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