From 755aed47ee9dcabec5458117115e767eeb82318e Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期一, 21 七月 2025 14:27:11 +0800
Subject: [PATCH] 保存新增盘点明细

---
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java |   94 +++++++++++++++++++++++++++++++++++++----------
 1 files changed, 74 insertions(+), 20 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java
index 09def72..88a132a 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java
@@ -8,18 +8,22 @@
 import com.vincent.rsf.server.api.service.PdaCheckOrderService;
 import com.vincent.rsf.server.manager.entity.*;
 import com.vincent.rsf.server.manager.enums.CheckDiffExceStatus;
+import com.vincent.rsf.server.manager.enums.OrderType;
+import com.vincent.rsf.server.manager.enums.OrderWorkType;
 import com.vincent.rsf.server.manager.enums.TaskStsType;
 import com.vincent.rsf.server.manager.service.*;
 import com.vincent.rsf.server.system.constant.DictTypeCode;
 import com.vincent.rsf.server.system.entity.DictData;
 import com.vincent.rsf.server.system.service.DictDataService;
 import com.vincent.rsf.server.system.service.DictTypeService;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 @Service
 public class PdaCheckOrderServiceImpl implements PdaCheckOrderService {
@@ -39,33 +43,37 @@
     private DictTypeService dictTypeService;
     @Autowired
     private DictDataService dictDataService;
+    @Autowired
+    private MatnrService matnrService;
+    @Autowired
+    private CheckOrderService checkOrderService;
 
     @Override
     public R getCheckList(String code) {
         LambdaQueryWrapper<CheckDiff> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-        lambdaQueryWrapper.eq(!Cools.isEmpty(code),CheckDiff::getOrderCode,code);
+        lambdaQueryWrapper.eq(!Cools.isEmpty(code), CheckDiff::getOrderCode, code);
         List<CheckDiff> waveList = checkDiffService.list(lambdaQueryWrapper);
         return R.ok(waveList);
 
     }
 
     @Override
-    public R getCheckTaskItemList(String barcode,String checkCode) {
+    public R getCheckTaskItemList(String barcode, String checkCode) {
 
         List<CheckDiffItem> checkDiffItems = checkDiffItemService.list(new LambdaQueryWrapper<CheckDiffItem>()
                 .eq(CheckDiffItem::getBarcode, barcode)
                 .eq(CheckDiffItem::getOrderCode, checkCode)
         );
-        if (checkDiffItems.isEmpty()){
+        if (checkDiffItems.isEmpty()) {
             throw new CoolException("姝ゆ潯鐮佷笉鍦ㄥ綋鍓嶇洏鐐瑰崟涓�");
         }
         LambdaQueryWrapper<Task> lambdaQueryWrapper = new LambdaQueryWrapper<>();
         lambdaQueryWrapper.eq(Task::getBarcode, barcode);
         Task task = taskService.getOne(lambdaQueryWrapper);
-        if (null == task){
+        if (null == task) {
             throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲浠诲姟");
         }
-        if (!task.getTaskStatus().equals(TaskStsType.AWAIT.id)){
+        if (!task.getTaskStatus().equals(TaskStsType.AWAIT.id)) {
             return R.error("浠诲姟鐘舵�佷笉鏄瓑寰呯‘璁�");
         }
 
@@ -83,38 +91,84 @@
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public R saveCheckDiff(SaveCheckDiffParams params,Long loginUserId) {
+    public R saveCheckDiff(SaveCheckDiffParams params, Long loginUserId) {
         CheckDiff checkDiff = checkDiffService.getById(params.getCheckId());
-        if (null == checkDiff){
+        if (null == checkDiff) {
             return R.error("鏈壘鍒扮洏鐐瑰樊寮傚崟");
         }
-        if (checkDiff.getExceStatus().equals(CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_END.val)){
+        if (checkDiff.getExceStatus().equals(CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_END.val)) {
             return R.error("璇ョ洏鐐瑰崟宸插畬鎴�");
         }
-        for (CheckDiffItem checkDiffItem: params.getCheckDiffItems()){
-            CheckDiffItem diffItem = checkDiffItemService.getById(checkDiffItem.getId());
-            if (null == diffItem){
-                return R.error("鏁版嵁閿欒锛屾湭鎵惧埌宸紓鍗曟槑缁�");
+        Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, params.getContainer()));
+        if (null == task) {
+            throw new CoolException("鏁版嵁閿欒锛屾湭鎵惧埌瀹瑰櫒鐮佸搴旂洏鐐逛换鍔�");
+        }
+        for (CheckDiffItem checkDiffItem : params.getCheckDiffItems()) {
+            CheckDiffItem diffItem = new CheckDiffItem();
+            if (Objects.isNull(checkDiffItem.getId())) {
+                BeanUtils.copyProperties(checkDiffItem, diffItem);
+                diffItem.setCheckId(params.getCheckId());
+
+                Matnr matnr = matnrService.getOne(new LambdaQueryWrapper<Matnr>().eq(Matnr::getCode, diffItem.getMatnrCode()));
+                if (Objects.isNull(matnr)) {
+                    throw new CoolException("鍗曟嵁鐗╂枡鍚嶇О涓嶅瓨鍦紒锛�");
+                }
+
+                if (!checkDiffItemService.save(diffItem)) {
+                    throw new CoolException("鏂板鏄庣粏淇濆瓨澶辫触锛侊紒");
+                }
+                //鏂板浠诲姟鏄庣粏淇℃伅
+                TaskItem taskItem = new TaskItem();
+                BeanUtils.copyProperties(diffItem, diffItem);
+                taskItem.setTaskId(task.getId())
+                        .setOrderType(OrderType.ORDER_CHECK.type)
+                        .setWkType(Short.parseShort(OrderWorkType.ORDER_WORK_TYPE_STOCK_CHECK.type))
+                        .setAnfme(diffItem.getAnfme())
+                        .setWorkQty(0.0)
+                        .setBatch(diffItem.getBatch())
+                        .setMaktx(matnr.getName())
+                        .setMatnrCode(diffItem.getMatnrCode())
+                        .setSpec(diffItem.getSpec())
+                        .setModel(diffItem.getModel())
+                        .setMatnrId(matnr.getId())
+                        .setCreateBy(loginUserId)
+                        //婕忕洏搴撳瓨锛屾柊澧炴病鏈夌洏鐐瑰崟鏄庣粏ID
+                        .setSource(diffItem.getId())
+                        .setSourceId(params.getCheckId())
+                        .setCreateTime(new Date())
+                        .setUpdateBy(loginUserId)
+                        .setMemo("涓嶅湪搴撴槑缁嗭紝鐩樻紡鏂板")
+                        .setUpdateTime(new Date())
+                        .setId(null)
+                        //鐩樼偣鍗旾D
+                        .setOrderId(checkDiff.getOrderId());
+                if (!taskItemService.save(taskItem)) {
+                    throw new CoolException("鏂板鐩樼偣鏄庣粏淇濆瓨澶辫触锛侊紒");
+                }
+            } else {
+                diffItem = checkDiffItemService.getById(checkDiffItem.getId());
+                if (null == diffItem) {
+                    return R.error("鏁版嵁閿欒锛屾湭鎵惧埌宸紓鍗曟槑缁�");
+                }
             }
+
             checkDiffItem.setExceStatus(CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_HOLD.val);
-            if(!checkDiffItemService.updateById(checkDiffItem)){
+            if (!checkDiffItemService.updateById(checkDiffItem)) {
                 throw new CoolException("鏇存柊宸紓鍗曟槑缁嗗け璐�");
             }
-            checkDiff.setCheckQty(checkDiff.getCheckQty()+checkDiffItem.getCheckQty());
+            Double checkQty = Math.round((checkDiff.getCheckQty() + checkDiffItem.getCheckQty()) * 10000) / 10000.0;
+            checkDiff.setCheckQty(checkQty);
         }
         checkDiff.setExceStatus(CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_HOLD.val);
 
-        if(!checkDiffService.updateById(checkDiff)){
+        if (!checkDiffService.updateById(checkDiff)) {
             throw new CoolException("鏇存柊宸紓鍗曞け璐�");
         }
-        Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, params.getContainer()));
-        if (null == task){
-            throw new CoolException("鏁版嵁閿欒锛屾湭鎵惧埌瀹瑰櫒鐮佸搴旂洏鐐逛换鍔�");
-        }
+
         task.setTaskStatus(TaskStsType.COMPLETE_OUT.id);
         task.setUpdateBy(loginUserId);
         task.setUpdateTime(new Date());
-        if (!taskService.updateById(task)){
+        if (!taskService.updateById(task)) {
             throw new CoolException("鏇存柊浠诲姟澶辫触");
         }
         return R.ok("鐩樼偣瀹屾垚");

--
Gitblit v1.9.1