From a8e4132c3e2e9c3b3fcb0360901b35571b6464ea Mon Sep 17 00:00:00 2001
From: hsy <1029150275@qq.com>
Date: 星期五, 28 八月 2026 10:13:01 +0800
Subject: [PATCH] feat: 综合业务模块功能补充与实体拓展

---
 src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java |   75 +++++++++++++++++++++++++++++++++++++
 1 files changed, 75 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java b/src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java
index 154923d..5b22c80 100644
--- a/src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java
@@ -6,6 +6,7 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.device.dto.DeviceLedgerDto;
@@ -31,6 +32,8 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.time.format.DateTimeFormatter;
+import java.time.LocalDate;
 
 @Service
 @RequiredArgsConstructor
@@ -56,6 +59,28 @@
         }
         DeviceLedger deviceLedger = new DeviceLedger();
         BeanUtils.copyProperties(deviceLedgerDto, deviceLedger);
+        
+        if (StringUtils.isEmpty(deviceLedger.getUniqueCode())) {
+            String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+            LambdaQueryWrapper<DeviceLedger> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.likeRight(DeviceLedger::getUniqueCode, "SB" + dateStr);
+            queryWrapper.orderByDesc(DeviceLedger::getUniqueCode);
+            queryWrapper.last("limit 1");
+            DeviceLedger lastRecord = this.getOne(queryWrapper);
+            int sequence = 1;
+            if (lastRecord != null && StringUtils.isNotEmpty(lastRecord.getUniqueCode()) && lastRecord.getUniqueCode().length() >= 13) {
+                String lastSeqStr = lastRecord.getUniqueCode().substring(10);
+                try {
+                    sequence = Integer.parseInt(lastSeqStr) + 1;
+                } catch (NumberFormatException ignored) {}
+            }
+            deviceLedger.setUniqueCode("SB" + dateStr + String.format("%03d", sequence));
+        }
+
+        if (this.count(new LambdaQueryWrapper<DeviceLedger>().eq(DeviceLedger::getUniqueCode, deviceLedger.getUniqueCode())) > 0) {
+            return AjaxResult.error("璁惧缂栧彿宸插瓨鍦細" + deviceLedger.getUniqueCode());
+        }
+
         boolean save = this.save(deviceLedger);
         if (save){
             if (deviceLedgerDto.getStorageBlobDTOs() != null) {
@@ -73,6 +98,14 @@
 
     @Override
     public AjaxResult updateDeviceLedger(DeviceLedgerDto deviceLedgerDto) {
+        if (StringUtils.isNotEmpty(deviceLedgerDto.getUniqueCode())) {
+            if (this.count(new LambdaQueryWrapper<DeviceLedger>()
+                    .eq(DeviceLedger::getUniqueCode, deviceLedgerDto.getUniqueCode())
+                    .ne(DeviceLedger::getId, deviceLedgerDto.getId())) > 0) {
+                return AjaxResult.error("璁惧缂栧彿宸插瓨鍦細" + deviceLedgerDto.getUniqueCode());
+            }
+        }
+        
         DeviceLedger deviceLedger = new DeviceLedger();
         BeanUtils.copyProperties(deviceLedgerDto, deviceLedger);
         if (this.updateById(deviceLedger)) {
@@ -141,6 +174,25 @@
     public Boolean importData(MultipartFile file) throws IOException {
         ExcelUtil<DeviceLedgerExeclDto> util = new ExcelUtil<DeviceLedgerExeclDto>(DeviceLedgerExeclDto.class);
         List<DeviceLedgerExeclDto> userList = util.importExcel(file.getInputStream());
+
+        String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+        LambdaQueryWrapper<DeviceLedger> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.likeRight(DeviceLedger::getUniqueCode, "SB" + dateStr);
+        queryWrapper.orderByDesc(DeviceLedger::getUniqueCode);
+        queryWrapper.last("limit 1");
+        DeviceLedger lastRecord = this.getOne(queryWrapper);
+        
+        // 搴斿Java lambda琛ㄨ揪寮忓唴鍙橀噺蹇呴』鏄痜inal鐨勯棶棰橈紝鐢ㄦ暟缁勬垨绫荤殑鎴愬憳鍖呰9
+        final int[] maxSequence = {0};
+        if (lastRecord != null && StringUtils.isNotEmpty(lastRecord.getUniqueCode()) && lastRecord.getUniqueCode().length() >= 13) {
+            String lastSeqStr = lastRecord.getUniqueCode().substring(10);
+            try {
+                maxSequence[0] = Integer.parseInt(lastSeqStr);
+            } catch (NumberFormatException ignored) {}
+        }
+        
+        List<String> importUniqueCodes = new ArrayList<>();
+
         userList.forEach(c -> {
             DeviceLedger deviceLedger = new DeviceLedger();
             SysUser sysUser = sysUserMapper.selectUserByUserName(c.getCreateUser());
@@ -150,6 +202,18 @@
                 deviceLedger.setCreateUser(SecurityUtils.getUserId().intValue());
             }
             BeanUtils.copyProperties(c,deviceLedger);
+            
+            if (StringUtils.isEmpty(deviceLedger.getUniqueCode())) {
+                maxSequence[0]++;
+                deviceLedger.setUniqueCode("SB" + dateStr + String.format("%03d", maxSequence[0]));
+            }
+            if (importUniqueCodes.contains(deviceLedger.getUniqueCode())) {
+                throw new RuntimeException("瀵煎叆鏂囦欢涓瓨鍦ㄩ噸澶嶇殑璁惧缂栧彿锛�" + deviceLedger.getUniqueCode());
+            }
+            if (this.count(new LambdaQueryWrapper<DeviceLedger>().eq(DeviceLedger::getUniqueCode, deviceLedger.getUniqueCode())) > 0) {
+                throw new RuntimeException("璁惧缂栧彿宸插瓨鍦細" + deviceLedger.getUniqueCode());
+            }
+            importUniqueCodes.add(deviceLedger.getUniqueCode());
             // 閫氳繃鍚◣鍗曚环銆佹暟閲忋�佺◣鐜囪绠楀惈绋庢�讳环锛屼笉鍚◣鎬讳环
             deviceLedger.setTaxIncludingPriceTotal(c.getTaxIncludingPriceUnit());
             deviceLedger.setNumber(BigDecimal.ONE);
@@ -158,6 +222,17 @@
             if (deviceLedger.getTaxIncludingPriceTotal() != null && c.getTaxRate() != null) {
                 deviceLedger.setUnTaxIncludingPriceTotal(deviceLedger.getTaxIncludingPriceTotal().divide(BigDecimal.ONE.add(c.getTaxRate()), 2, RoundingMode.HALF_UP));
             }
+
+            if (c.getPurchaseDate() != null) {
+                deviceLedger.setPurchaseDate(DateUtils.toLocalDate(c.getPurchaseDate()));
+            }
+            if (c.getActivationDate() != null) {
+                deviceLedger.setActivationDate(DateUtils.toLocalDate(c.getActivationDate()));
+            }
+            if (c.getFilingDate() != null) {
+                deviceLedger.setFilingDate(DateUtils.toLocalDate(c.getFilingDate()));
+            }
+
             deviceLedgerMapper.insert(deviceLedger);
         });
 

--
Gitblit v1.9.3