From 74260d0eb5ce27531cd2f7b79538170edcd042bb Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期一, 30 三月 2026 18:50:00 +0800
Subject: [PATCH] fix: 产品入库的库存返回产品大类、规则型号、单位

---
 src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java |  267 ++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 234 insertions(+), 33 deletions(-)

diff --git a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
index 06612f6..8a11f1c 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
@@ -4,7 +4,6 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 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.poi.ExcelUtil;
 import com.ruoyi.framework.security.LoginUser;
@@ -25,9 +24,10 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -51,13 +51,13 @@
         // 璁$畻寰呭叆搴撴暟閲�
         // 鏌ヨ閲囪喘璁板綍宸插叆搴撴暟閲�
         List<Integer> collect = procurementDtos.stream().map(ProcurementDto::getId).collect(Collectors.toList());
-        if(CollectionUtils.isEmpty( collect)){
+        if (CollectionUtils.isEmpty(collect)) {
             return procurementDtos;
         }
         LambdaQueryWrapper<ProcurementRecordStorage> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
         procurementRecordLambdaQueryWrapper.in(ProcurementRecordStorage::getSalesLedgerProductId, collect);
         List<ProcurementRecordStorage> procurementRecordStorages = procurementRecordMapper.selectList(procurementRecordLambdaQueryWrapper);
-        if(CollectionUtils.isEmpty(procurementRecordStorages)){
+        if (CollectionUtils.isEmpty(procurementRecordStorages)) {
             return procurementDtos;
         }
         for (ProcurementDto dto : procurementDtos) {
@@ -65,35 +65,35 @@
             List<ProcurementRecordStorage> collect1 = procurementRecordStorages.stream()
                     .filter(procurementRecordStorage -> procurementRecordStorage.getSalesLedgerProductId().equals(dto.getId()))
                     .collect(Collectors.toList());
-            
+
             // 濡傛灉娌℃湁鐩稿叧鐨勫叆搴撹褰曪紝璺宠繃璇ユ潯鏁版嵁
-            if(CollectionUtils.isEmpty(collect1)){
+            if (CollectionUtils.isEmpty(collect1)) {
                 dto.setQuantity0(dto.getQuantity());
                 continue;
             }
-            
+
             // 璁$畻宸插叆搴撴暟閲忔�诲拰锛屽苟璁剧疆寰呭叆搴撴暟閲�
             BigDecimal totalInboundNum = collect1.stream()
                     .map(ProcurementRecordStorage::getInboundNum)
                     .reduce(BigDecimal.ZERO, BigDecimal::add);
-            
+
             // 寰呭叆搴撴暟閲� = 鎬绘暟閲� - 宸插叆搴撴暟閲�
             dto.setQuantity0(dto.getQuantity().subtract(totalInboundNum));
         }
         return procurementDtos;
     }
 
-    public ProcurementRecordStorage getProcurementRecordById(Integer id){
+    public ProcurementRecordStorage getProcurementRecordById(Integer id) {
         ProcurementRecordStorage procurementRecordStorage = procurementRecordMapper.selectById(id);
-        if(procurementRecordStorage == null) {
+        if (procurementRecordStorage == null) {
             throw new RuntimeException("鏈壘鍒拌閲囪喘鍏ュ簱璁板綍");
         }
         return procurementRecordStorage;
     }
 
-    public List<ProcurementRecordStorage> getProcurementRecordByIds(List<Integer> id){
+    public List<ProcurementRecordStorage> getProcurementRecordByIds(List<Integer> id) {
         List<ProcurementRecordStorage> procurementRecordStorage = procurementRecordMapper.selectBatchIds(id);
-        if(procurementRecordStorage == null) {
+        if (procurementRecordStorage == null) {
             throw new RuntimeException("鏈壘鍒拌閲囪喘鍏ュ簱璁板綍");
         }
         return procurementRecordStorage;
@@ -103,8 +103,11 @@
     public int updatePro(ProcurementUpdateDto procurementDto) {
         ProcurementRecordStorage procurementRecordStorageById = getProcurementRecordById(procurementDto.getId());
         procurementRecordStorageById.setInboundNum(procurementDto.getQuantityStock());
+        procurementRecordStorageById.setWarnNum(procurementDto.getWarnNum());
         procurementRecordStorageById.setUpdateUser(SecurityUtils.getLoginUser().getUserId());
         procurementRecordStorageById.setUpdateTime(LocalDateTime.now());
+        procurementRecordStorageById.setOutStockQuantity(procurementDto.getOutStockQuantity());
+        procurementRecordStorageById.setShortageDescription(procurementDto.getShortageDescription());
         return procurementRecordMapper.updateById(procurementRecordStorageById);
     }
 
@@ -116,7 +119,7 @@
         LambdaQueryWrapper<ProcurementRecordOut> procurementRecordOutLambdaQueryWrapper = new LambdaQueryWrapper<>();
         procurementRecordOutLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, procurementDto.getIds());
         List<ProcurementRecordOut> procurementRecordOuts = procurementRecordOutMapper.selectList(procurementRecordOutLambdaQueryWrapper);
-        if(!CollectionUtils.isEmpty(procurementRecordOuts)){
+        if (!CollectionUtils.isEmpty(procurementRecordOuts)) {
             procurementRecordOutMapper.deleteBatchIds(procurementRecordOuts.stream().map(ProcurementRecordOut::getId).collect(Collectors.toList()));
         }
         return 0;
@@ -124,11 +127,11 @@
 
     @Override
     public void export(HttpServletResponse response) {
-        List<ProcurementPageDto> list =procurementRecordMapper.list();
+        List<ProcurementPageDto> list = procurementRecordMapper.list();
         // 璁$畻寰呭叆搴撴暟閲�
         // 鏌ヨ閲囪喘璁板綍宸插叆搴撴暟閲�
         List<Integer> collect = list.stream().map(ProcurementPageDto::getId).collect(Collectors.toList());
-        if(CollectionUtils.isEmpty( collect)){
+        if (CollectionUtils.isEmpty(collect)) {
             ExcelUtil<ProcurementPageDto> util = new ExcelUtil<ProcurementPageDto>(ProcurementPageDto.class);
             util.exportExcel(response, list, "鍏ュ簱鍙拌处");
             return;
@@ -136,7 +139,7 @@
         LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
         procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect);
         List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper);
-        if(CollectionUtils.isEmpty( procurementRecords)){
+        if (CollectionUtils.isEmpty(procurementRecords)) {
             ExcelUtil<ProcurementPageDto> util = new ExcelUtil<ProcurementPageDto>(ProcurementPageDto.class);
             util.exportExcel(response, list, "鍏ュ簱鍙拌处");
             return;
@@ -148,7 +151,7 @@
                     .collect(Collectors.toList());
 
             // 濡傛灉娌℃湁鐩稿叧鐨勫嚭搴撹褰曪紝璺宠繃璇ユ潯鏁版嵁
-            if(CollectionUtils.isEmpty(collect1)){
+            if (CollectionUtils.isEmpty(collect1)) {
                 dto.setInboundNum0(dto.getInboundNum());
                 continue;
             }
@@ -171,29 +174,37 @@
     public int updateManagement(ProcurementManagementUpdateDto procurementDto) {
         LoginUser loginUser = SecurityUtils.getLoginUser();
         SysUser sysUser = sysUserMapper.selectUserById(procurementDto.getCreateUser());
-        if(sysUser == null){
+        if (sysUser == null) {
             throw new RuntimeException("鍏ュ簱浜轰笉瀛樺湪");
         }
         DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         String entryDateStr = procurementDto.getEntryDate() + " 00:00:00";
         String createTimeStr = procurementDto.getCreateTime() + " 00:00:00";
+        SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(procurementDto.getSalesLedgerProductId());
+        if (procurementDto.getSalesLedgerProductId() != null && salesLedgerProduct == null) {
+            throw new RuntimeException("閿�鍞彴璐︿骇鍝佷笉瀛樺湪");
+        }
+        if (procurementDto.getSalesLedgerProductId() != null && salesLedgerProduct != null) {
+            salesLedgerProduct.setMinStock(procurementDto.getMinStock());
+            salesLedgerProductMapper.updateById(salesLedgerProduct);
+        }
         ProcurementRecordStorage procurementRecordStorageById = getProcurementRecordById(procurementDto.getId());
         procurementRecordStorageById.setCreateBy(sysUser.getNickName());
         procurementRecordStorageById.setCreateUser(sysUser.getUserId());
-        procurementRecordStorageById.setUpdateTime(LocalDateTime.parse(entryDateStr,df));
+        procurementRecordStorageById.setUpdateTime(LocalDateTime.parse(entryDateStr, df));
         procurementRecordStorageById.setUpdateUser(loginUser.getUserId());
-        procurementRecordStorageById.setCreateTime(LocalDateTime.parse(createTimeStr,df));
+        procurementRecordStorageById.setCreateTime(LocalDateTime.parse(createTimeStr, df));
         procurementRecordMapper.updateById(procurementRecordStorageById);
         return 0;
     }
 
     @Override
     public void exportCopy(HttpServletResponse response) {
-        List<ProcurementPageDtoCopy> list =procurementRecordMapper.listCopy();
+        List<ProcurementPageDtoCopy> list = procurementRecordMapper.listCopy();
         // 璁$畻寰呭叆搴撴暟閲�
         // 鏌ヨ閲囪喘璁板綍宸插叆搴撴暟閲�
         List<Integer> collect = list.stream().map(ProcurementPageDtoCopy::getId).collect(Collectors.toList());
-        if(CollectionUtils.isEmpty( collect)){
+        if (CollectionUtils.isEmpty(collect)) {
             ExcelUtil<ProcurementPageDtoCopy> util = new ExcelUtil<ProcurementPageDtoCopy>(ProcurementPageDtoCopy.class);
             util.exportExcel(response, list, "搴撳瓨绠$悊");
             return;
@@ -201,7 +212,7 @@
         LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
         procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect);
         List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper);
-        if(CollectionUtils.isEmpty( procurementRecords)){
+        if (CollectionUtils.isEmpty(procurementRecords)) {
             ExcelUtil<ProcurementPageDtoCopy> util = new ExcelUtil<ProcurementPageDtoCopy>(ProcurementPageDtoCopy.class);
             util.exportExcel(response, list, "搴撳瓨绠$悊");
             return;
@@ -213,7 +224,7 @@
                     .collect(Collectors.toList());
 
             // 濡傛灉娌℃湁鐩稿叧鐨勫嚭搴撹褰曪紝璺宠繃璇ユ潯鏁版嵁
-            if(CollectionUtils.isEmpty(collect1)){
+            if (CollectionUtils.isEmpty(collect1)) {
                 dto.setInboundNum0(dto.getInboundNum());
                 continue;
             }
@@ -231,6 +242,167 @@
     }
 
     @Override
+    public Map<String, Object> getReportList(Page page, ProcurementPageDto procurementDto) {
+        // 鏋勫缓鎶ヨ〃鏁版嵁缁撴瀯
+        Map<String, Object> reportData = new HashMap<>();
+        // 2. 鏋勫缓鍥捐〃鏁版嵁
+        Map<String, Object> chartData = new HashMap<>();
+
+        IPage<ProcurementPageDtoCopy> procurementPageDtoCopyIPage = procurementRecordMapper.listPageCopy(page, procurementDto);
+        List<ProcurementPageDtoCopy> procurementPageDtoCopyList = procurementPageDtoCopyIPage.getRecords();
+        // 璁$畻寰呭叆搴撴暟閲�
+        reportData.put("tableData", procurementPageDtoCopyList);
+        // 鏌ヨ閲囪喘璁板綍宸插叆搴撴暟閲�
+        List<Integer> collect = procurementPageDtoCopyList.stream().map(ProcurementPageDtoCopy::getId).collect(Collectors.toList());
+        if (CollectionUtils.isEmpty(collect)) {
+            return reportData;
+        }
+        LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect);
+        List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper);
+        if (CollectionUtils.isEmpty(procurementRecords)) {
+            return reportData;
+        }
+        int totalIn = 0;
+        int totalOut = 0;
+        int currentStock = 0;
+        int turnoverRate = 0;
+        List<String> dates = new ArrayList<>();
+        List<Integer> values = new ArrayList<>();
+        List<String> comparisonDates = new ArrayList<>();
+        List<Integer> inValues = new ArrayList<>();
+        List<Integer> outValues = new ArrayList<>();
+        // 瀹氫箟鏃ユ湡鏍煎紡鍖栧櫒锛屾寚瀹氫负yyyy-MM-dd鏍煎紡
+        DateTimeFormatter dateFormatter = DateTimeFormatter.ISO_LOCAL_DATE;
+        for (ProcurementPageDtoCopy dto : procurementPageDtoCopyList) {
+            dates.add(dto.getCreateTime().format(dateFormatter));
+            comparisonDates.add(dto.getCreateTime().format(dateFormatter));
+
+            // 鏍规嵁閲囪喘鍙拌处ID绛涢�夊搴旂殑鍑哄簱璁板綍
+            List<ProcurementRecordOut> collect1 = procurementRecords.stream()
+                    .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId()))
+                    .collect(Collectors.toList());
+
+            // 濡傛灉娌℃湁鐩稿叧鐨勫嚭搴撹褰曪紝璺宠繃璇ユ潯鏁版嵁
+            if (CollectionUtils.isEmpty(collect1)) {
+                dto.setInboundNum0(dto.getInboundNum());
+                continue;
+            }
+
+            // 璁$畻宸插嚭搴撴暟閲忔�诲拰锛屽苟璁剧疆寰呭嚭搴撴暟閲�
+            BigDecimal totalInboundNum = collect1.stream()
+                    .map(ProcurementRecordOut::getInboundNum)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+            // 寰呭嚭搴撴暟閲� = 鎬绘暟閲� - 宸插嚭搴撴暟閲�
+            dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum));
+
+            // 璁$畻鎬诲叆搴撴暟閲�
+            totalIn += dto.getInboundNum().intValue();
+            inValues.add(totalIn);
+            // 璁$畻鎬诲嚭搴撴暟閲�
+            totalOut += totalInboundNum.intValue();
+            outValues.add(totalOut);
+            // 璁$畻褰撳墠搴撳瓨
+            currentStock += dto.getInboundNum().intValue() - totalInboundNum.intValue();
+            values.add(currentStock);
+            // 璁$畻鍛ㄨ浆鐜�
+            if (totalIn > 0) {
+                turnoverRate = totalOut * 100 / totalIn;
+            }
+        }
+
+
+        // 1. 鏋勫缓姹囨�绘暟鎹�
+        Map<String, Object> summary = new HashMap<>();
+        summary.put("totalIn", totalIn);          // 鎬诲叆搴撻噺锛屽疄闄呭簲浠庢暟鎹绠�
+        summary.put("totalOut", totalOut);         // 鎬诲嚭搴撻噺锛屽疄闄呭簲浠庢暟鎹绠�
+        summary.put("currentStock", currentStock);     // 褰撳墠搴撳瓨閲忥紝瀹為檯搴斾粠鏁版嵁璁$畻
+        summary.put("turnoverRate", turnoverRate);      // 鍛ㄨ浆鐜囷紝瀹為檯搴斾粠鏁版嵁璁$畻
+        reportData.put("summary", summary);
+
+        // 2. 鏋勫缓鍥捐〃鏁版嵁
+//        Map<String, Object> chartData = new HashMap<>();
+//        List<String> dates = Arrays.asList("2025-09-15", "2025-09-16", "2025-09-17", "2025-09-18", "2025-09-19");
+//        List<Integer> values = Arrays.asList(300, 350, 400, 380, 420);
+
+        chartData.put("dates", dates);
+        chartData.put("values", values);
+        chartData.put("comparisonDates", comparisonDates);  // 瀹為檯搴斾粠鏁版嵁璁$畻
+        chartData.put("inValues", inValues);         // 瀹為檯搴斾粠鏁版嵁璁$畻
+        chartData.put("outValues", outValues);        // 瀹為檯搴斾粠鏁版嵁璁$畻
+        reportData.put("chartData", chartData);
+
+        // 3. 璁剧疆琛ㄦ牸鏁版嵁
+        reportData.put("tableData", procurementPageDtoCopyList);
+
+        return reportData;
+    }
+
+    @Override
+    public InventoryInformationDto getReportList() {
+        InventoryInformationDto inventoryInformationDto = new InventoryInformationDto();
+        IPage<ProcurementPageDto> procurementPageDtoIPage = this.listPage(new Page<>(1, -1), new ProcurementPageDto());
+        if (CollectionUtils.isEmpty(procurementPageDtoIPage.getRecords())) {
+            return inventoryInformationDto;
+        }
+        // 璁$畻鎬诲簱瀛樻暟閲�
+        inventoryInformationDto.setTotalInventoryCount(procurementPageDtoIPage.getRecords().stream()
+                .map(ProcurementPageDto::getInboundNum0)
+                .reduce(BigDecimal.ZERO, BigDecimal::add)
+                .intValue());
+        // 璁$畻鎬诲簱瀛橀噾棰�-ProcurementPageDto閲屾瘡涓璞$殑inboundNum0鍊煎拰taxInclusiveUnitPrice鐨勪箻绉紝涔嬪悗鐩稿姞寰楀埌鎬诲簱瀛橀噾棰�
+        BigDecimal totalInventoryValue = procurementPageDtoIPage.getRecords().stream()
+                // 杩囨护绌哄璞★紝閬垮厤NPE
+                .filter(Objects::nonNull)
+                // 澶勭悊姣忎釜瀵硅薄鐨勭┖鍊硷細null杞负0
+                .map(dto -> {
+                    // 鍏ュ簱鏁伴噺锛歯ull 鈫� 0
+                    BigDecimal inboundNum0 = Optional.ofNullable(dto.getInboundNum0()).orElse(BigDecimal.ZERO);
+                    // 鍚◣鍗曚环锛歯ull 鈫� 0
+                    BigDecimal taxInclusiveUnitPrice = Optional.ofNullable(dto.getTaxInclusiveUnitPrice()).orElse(BigDecimal.ZERO);
+                    // 璁$畻鍗曚釜瀵硅薄鐨勫簱瀛橀噾棰濓細鏁伴噺 脳 鍚◣鍗曚环
+                    return inboundNum0.multiply(taxInclusiveUnitPrice);
+                })
+                // 鎵�鏈夊崟涓噾棰濇眰鍜岋紝鍒濆鍊间负0
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        // 璁剧疆鎬诲簱瀛橀噾棰�
+        inventoryInformationDto.setTotalInventoryValue(totalInventoryValue);
+        // 璁$畻搴撳瓨鍙樺姩鏁伴噺-ProcurementPageDto閲屾瘡涓璞$殑inboundNum鍊煎拰inboundNum0鍊肩殑宸�硷紝涔嬪悗鐩稿姞寰楀埌搴撳瓨鍙樺姩鏁伴噺
+        inventoryInformationDto.setInventoryChangeCount(procurementPageDtoIPage.getRecords().stream()
+                // 杩囨护绌哄璞★紝閬垮厤NPE
+                .filter(Objects::nonNull)
+                // 澶勭悊姣忎釜瀵硅薄鐨勭┖鍊硷細null杞负0
+                .map(dto -> {
+                    // 鍏ュ簱鏁伴噺锛歯ull 鈫� 0
+                    BigDecimal inboundNum = Optional.ofNullable(dto.getInboundNum()).orElse(BigDecimal.ZERO);
+                    // 寰呭嚭搴撴暟閲忥細null 鈫� 0
+                    BigDecimal inboundNum0 = Optional.ofNullable(dto.getInboundNum0()).orElse(BigDecimal.ZERO);
+                    // 璁$畻鍗曚釜瀵硅薄鐨勫簱瀛樺彉鍔ㄦ暟閲忥細鏁伴噺 - 寰呭嚭搴撴暟閲�
+                    return inboundNum.subtract(inboundNum0);
+                })
+                // 鎵�鏈夊崟涓彉鍔ㄦ暟閲忔眰鍜岋紝鍒濆鍊间负0
+                .reduce(BigDecimal.ZERO, BigDecimal::add)
+                .intValue());
+        // 璁$畻搴撳瓨鍙樺姩閲戦ProcurementPageDto閲屾瘡涓璞$殑taxInclusiveTotalPrice鍊肩殑鍜�
+        BigDecimal inventoryChangeValue = procurementPageDtoIPage.getRecords().stream()
+                // 杩囨护绌哄璞★紝閬垮厤NPE
+                .filter(Objects::nonNull)
+                // 澶勭悊姣忎釜瀵硅薄鐨勭┖鍊硷細null杞负0
+                .map(dto -> {
+                    // 鍚◣鎬讳环锛歯ull 鈫� 0
+                    BigDecimal taxInclusiveTotalPrice = Optional.ofNullable(dto.getTaxInclusiveTotalPrice()).orElse(BigDecimal.ZERO);
+                    // 璁$畻鍗曚釜瀵硅薄鐨勫叆搴撳簱瀛橀噾棰濓細鍚◣鎬讳环
+                    return taxInclusiveTotalPrice;
+                })
+                // 鎵�鏈夊崟涓彉鍔ㄩ噾棰濇眰鍜岋紝鍒濆鍊间负0
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        // 璁剧疆搴撳瓨鍙樺姩閲戦
+        inventoryInformationDto.setInventoryChangeValue(inventoryChangeValue.subtract(totalInventoryValue));
+        return inventoryInformationDto;
+    }
+
+    @Override
     public int add(ProcurementAddDto procurementDto) {
         LoginUser loginUser = SecurityUtils.getLoginUser();
         // 鎵归噺鏂板
@@ -242,13 +414,17 @@
 
             ProcurementRecordStorage.ProcurementRecordStorageBuilder procurementRecordBuilder = ProcurementRecordStorage.builder()
                     .salesLedgerProductId(detail.getId())
-                    .inboundBatches(aLong.equals(0L) ? "绗�1鎵规" : "绗�"+ (aLong + 1) + "鎵规")
+                    .inboundBatches(aLong.equals(0L) ? "绗�1鎵规" : "绗�" + (aLong + 1) + "鎵规")
                     .inboundNum(detail.getInboundQuantity())
+                    .warnNum(detail.getWarnNum())
+                    .outStockQuantity(detail.getOutStockQuantity())
+                    .shortageDescription(detail.getShortageDescription())
                     .createTime(LocalDateTime.now())
                     .createUser(loginUser.getUserId())
                     .updateTime(LocalDateTime.now())
                     .updateUser(loginUser.getUserId())
-                    .createBy(procurementDto.getNickName());
+                    .createBy(procurementDto.getNickName())
+                    .productModelId(detail.getProductModelId());
             this.save(procurementRecordBuilder.build());
             // 鍏ュ簱鎴愬姛鍑忔帀閲囪喘鏁伴噺
 //            LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductLambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -264,19 +440,43 @@
     }
 
     @Override
+    public int addProduct(Details detail) {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+
+        ProcurementRecordStorage.ProcurementRecordStorageBuilder builder = ProcurementRecordStorage.builder()
+                .id(detail.getId())
+                .inboundBatches("绗�1鎵规")
+                .inboundNum(detail.getInboundQuantity())
+                .warnNum(detail.getWarnNum())
+                .outStockQuantity(detail.getOutStockQuantity())
+                .shortageDescription(detail.getShortageDescription())
+                .productModelId(detail.getProductModelId())
+                .updateTime(LocalDateTime.now())
+                .updateUser(loginUser.getUserId());
+        if (detail.getId() == null) {
+            builder.createTime(LocalDateTime.now())
+                    .createUser(loginUser.getUserId())
+                    .createBy(loginUser.getNickName());
+        }
+
+        boolean success = this.saveOrUpdate(builder.build());
+        return success ? 1 : 0;
+    }
+
+    @Override
     public IPage<ProcurementPageDto> listPage(Page page, ProcurementPageDto procurementDto) {
         IPage<ProcurementPageDto> procurementPageDtoIPage = procurementRecordMapper.listPage(page, procurementDto);
         List<ProcurementPageDto> procurementPageDtos = procurementPageDtoIPage.getRecords();
         // 璁$畻寰呭叆搴撴暟閲�
         // 鏌ヨ閲囪喘璁板綍宸插叆搴撴暟閲�
         List<Integer> collect = procurementPageDtos.stream().map(ProcurementPageDto::getId).collect(Collectors.toList());
-        if(CollectionUtils.isEmpty( collect)){
+        if (CollectionUtils.isEmpty(collect)) {
             return procurementPageDtoIPage;
         }
         LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
         procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect);
         List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper);
-        if(CollectionUtils.isEmpty( procurementRecords)){
+        if (CollectionUtils.isEmpty(procurementRecords)) {
             return procurementPageDtoIPage;
         }
         for (ProcurementPageDto dto : procurementPageDtos) {
@@ -286,7 +486,7 @@
                     .collect(Collectors.toList());
 
             // 濡傛灉娌℃湁鐩稿叧鐨勫嚭搴撹褰曪紝璺宠繃璇ユ潯鏁版嵁
-            if(CollectionUtils.isEmpty(collect1)){
+            if (CollectionUtils.isEmpty(collect1)) {
                 dto.setInboundNum0(dto.getInboundNum());
                 continue;
             }
@@ -309,13 +509,13 @@
         // 璁$畻寰呭叆搴撴暟閲�
         // 鏌ヨ閲囪喘璁板綍宸插叆搴撴暟閲�
         List<Integer> collect = procurementPageDtoCopyList.stream().map(ProcurementPageDtoCopy::getId).collect(Collectors.toList());
-        if(CollectionUtils.isEmpty( collect)){
+        if (CollectionUtils.isEmpty(collect)) {
             return procurementPageDtoCopyIPage;
         }
         LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
         procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect);
         List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper);
-        if(CollectionUtils.isEmpty( procurementRecords)){
+        if (CollectionUtils.isEmpty(procurementRecords)) {
             return procurementPageDtoCopyIPage;
         }
         for (ProcurementPageDtoCopy dto : procurementPageDtoCopyList) {
@@ -325,7 +525,7 @@
                     .collect(Collectors.toList());
 
             // 濡傛灉娌℃湁鐩稿叧鐨勫嚭搴撹褰曪紝璺宠繃璇ユ潯鏁版嵁
-            if(CollectionUtils.isEmpty(collect1)){
+            if (CollectionUtils.isEmpty(collect1)) {
                 dto.setInboundNum0(dto.getInboundNum());
                 continue;
             }
@@ -334,7 +534,8 @@
             BigDecimal totalInboundNum = collect1.stream()
                     .map(ProcurementRecordOut::getInboundNum)
                     .reduce(BigDecimal.ZERO, BigDecimal::add);
-
+            // 鍑哄簱鏁伴噺 = 鎬绘暟閲� - 寰呭嚭搴撴暟閲�
+            dto.setTotalInboundNum(totalInboundNum);
             // 寰呭嚭搴撴暟閲� = 鎬绘暟閲� - 宸插嚭搴撴暟閲�
             dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum));
         }

--
Gitblit v1.9.3