From 55d694aaae4e421b5e55cd941500e08f85cb5d4d Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 27 八月 2026 18:21:33 +0800
Subject: [PATCH] feat(sales): 添加框架合同订单功能并优化销售台账管理
---
src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerServiceImpl.java | 96 +++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 95 insertions(+), 1 deletions(-)
diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerServiceImpl.java b/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerServiceImpl.java
index 4025d75..56d5694 100644
--- a/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerServiceImpl.java
@@ -2,11 +2,14 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.enums.FileNameType;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.measuringinstrumentledger.dto.MeasuringInstrumentLedgerImportDto;
import com.ruoyi.measuringinstrumentledger.dto.MeasuringInstrumentLedgerDto;
import com.ruoyi.measuringinstrumentledger.mapper.MeasuringInstrumentLedgerMapper;
import com.ruoyi.measuringinstrumentledger.mapper.MeasuringInstrumentLedgerRecordMapper;
@@ -25,7 +28,14 @@
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.multipart.MultipartFile;
import java.util.List;
+import java.util.Set;
import java.util.stream.Collectors;
/**
@@ -89,6 +99,90 @@
}
@Override
+ @Transactional(rollbackFor = Exception.class)
+ public AjaxResult importData(MultipartFile file) {
+ if (file == null || file.isEmpty()) {
+ return AjaxResult.error("璇蜂笂浼� Excel 鏂囦欢");
+ }
+ String filename = file.getOriginalFilename();
+ if (filename == null || !(filename.endsWith(".xls") || filename.endsWith(".xlsx"))) {
+ return AjaxResult.error("鍙敮鎸佸鍏� xls 鎴� xlsx 鏂囦欢");
+ }
+ try {
+ ExcelUtil<MeasuringInstrumentLedgerImportDto> util = new ExcelUtil<>(MeasuringInstrumentLedgerImportDto.class);
+ List<MeasuringInstrumentLedgerImportDto> rows = util.importExcel(file.getInputStream());
+ if (CollectionUtils.isEmpty(rows)) {
+ return AjaxResult.error("Excel 涓病鏈夊彲瀵煎叆鐨勬暟鎹�");
+ }
+ Set<String> codes = new HashSet<>();
+ Map<Integer, String> errors = new LinkedHashMap<>();
+ List<MeasuringInstrumentLedger> ledgers = new ArrayList<>();
+ Long tenantId = SecurityUtils.getLoginUser().getTenantId();
+ Long userId = SecurityUtils.getUserId();
+ String userName = SecurityUtils.getLoginUser().getNickName();
+ for (int i = 0; i < rows.size(); i++) {
+ MeasuringInstrumentLedgerImportDto row = rows.get(i);
+ int excelRow = i + 2;
+ String code = StringUtils.trim(row.getCode());
+ String name = StringUtils.trim(row.getName());
+ if (!StringUtils.hasText(code)) {
+ errors.put(excelRow, "璁¢噺鍣ㄥ叿缂栧彿涓嶈兘涓虹┖");
+ continue;
+ }
+ if (!StringUtils.hasText(name)) {
+ errors.put(excelRow, "璁¢噺鍣ㄥ叿鍚嶇О涓嶈兘涓虹┖");
+ continue;
+ }
+ if (!codes.add(code)) {
+ errors.put(excelRow, "璁¢噺鍣ㄥ叿缂栧彿鍦� Excel 涓噸澶�");
+ continue;
+ }
+ if (row.getValid() != null && row.getValid() <= 0) {
+ errors.put(excelRow, "妫�瀹氭湁鏁堟湡蹇呴』澶т簬 0");
+ continue;
+ }
+ MeasuringInstrumentLedger ledger = new MeasuringInstrumentLedger();
+ ledger.setCode(code);
+ ledger.setName(name);
+ ledger.setModel(StringUtils.trim(row.getModel()));
+ ledger.setMostDate(row.getMostDate());
+ ledger.setValid(row.getValid());
+ ledger.setRecordDate(row.getRecordDate() == null ? new Date() : row.getRecordDate());
+ ledger.setUnit(StringUtils.trim(row.getUnit()));
+ ledger.setDeptId(row.getDeptId());
+ ledger.setInstationLocation(StringUtils.trim(row.getInstationLocation()));
+ ledger.setCycle(StringUtils.trim(row.getCycle()));
+ ledger.setUserId(userId);
+ ledger.setUserName(userName);
+ ledger.setTenantId(tenantId);
+ if (row.getMostDate() != null && row.getValid() != null) {
+ ledger.setNextDate(new Date(row.getMostDate().getTime() + 86400000L * row.getValid()));
+ }
+ ledgers.add(ledger);
+ }
+ if (!codes.isEmpty()) {
+ for (String code : measuringInstrumentLedgerMapper.selectExistingCodes(tenantId, codes)) {
+ errors.put(-1, "璁¢噺鍣ㄥ叿缂栧彿宸插瓨鍦細" + code);
+ }
+ }
+ if (!errors.isEmpty()) {
+ return AjaxResult.error("瀵煎叆鏍¢獙澶辫触锛�" + errors.values().stream().limit(100).collect(Collectors.joining("锛�")));
+ }
+ saveBatch(ledgers);
+ return AjaxResult.success("鎴愬姛瀵煎叆 " + ledgers.size() + " 鏉℃暟鎹�");
+ } catch (Exception e) {
+ log.error("璁¢噺鍣ㄥ叿鍙拌处瀵煎叆澶辫触", e);
+ return AjaxResult.error("瀵煎叆澶辫触锛岃妫�鏌� Excel 鍐呭");
+ }
+ }
+
+ @Override
+ public void downloadTemplate(HttpServletResponse response) {
+ ExcelUtil<MeasuringInstrumentLedgerImportDto> util = new ExcelUtil<>(MeasuringInstrumentLedgerImportDto.class);
+ util.importTemplateExcel(response, "璁¢噺鍣ㄥ叿鍙拌处瀵煎叆妯℃澘");
+ }
+
+ @Override
public void export(HttpServletResponse response) {
List<MeasuringInstrumentLedger> list = measuringInstrumentLedgerMapper.listPage(new MeasuringInstrumentLedger());
ExcelUtil<MeasuringInstrumentLedger> util = new ExcelUtil<MeasuringInstrumentLedger>(MeasuringInstrumentLedger.class);
--
Gitblit v1.9.3