From 41ee7170ba0d269028e737d2021ed0565022f737 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期五, 22 八月 2025 10:00:08 +0800
Subject: [PATCH] 差异单同步 调整单接口同步

---
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java |  218 ++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 202 insertions(+), 16 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
index cc26147..f0c4fa6 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
@@ -3,22 +3,22 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.vincent.rsf.framework.common.R;
 import com.vincent.rsf.framework.exception.CoolException;
 import com.vincent.rsf.server.api.controller.erp.params.*;
+import com.vincent.rsf.server.api.controller.erp.params.dto.CheckDiffDto;
+import com.vincent.rsf.server.api.controller.erp.params.dto.TransferInfoDto;
+import com.vincent.rsf.server.api.controller.erp.params.dto.WkOrderDto;
 import com.vincent.rsf.server.common.domain.BaseParam;
 import com.vincent.rsf.server.common.domain.PageParam;
 import com.vincent.rsf.server.manager.controller.dto.LocStockDto;
 import com.vincent.rsf.server.manager.entity.*;
-import com.vincent.rsf.server.manager.enums.CompanysType;
-import com.vincent.rsf.server.manager.enums.OrderSourceType;
-import com.vincent.rsf.server.manager.enums.OrderType;
-import com.vincent.rsf.server.manager.enums.OrderWorkType;
+import com.vincent.rsf.server.manager.enums.*;
 import com.vincent.rsf.server.manager.service.*;
 import com.vincent.rsf.server.manager.service.impl.MatnrServiceImpl;
-import com.vincent.rsf.server.manager.service.impl.TransferItemServiceImpl;
 import com.vincent.rsf.server.system.constant.SerialRuleCode;
 import com.vincent.rsf.server.system.entity.Fields;
 import com.vincent.rsf.server.system.service.FieldsItemService;
@@ -52,8 +52,6 @@
     @Autowired
     private FieldsService fieldsService;
     @Autowired
-    private FieldsItemService fieldsItemService;
-    @Autowired
     private MatnrGroupService matnrGroupService;
     @Autowired
     private MatnrServiceImpl matnrService;
@@ -68,8 +66,6 @@
     @Autowired
     private LocService locService;
     @Autowired
-    private LocItemService locItemService;
-    @Autowired
     private WarehouseAreasService warehouseAreasService;
     @Autowired
     private WarehouseService warehouseService;
@@ -79,6 +75,16 @@
     private TransferService transferService;
     @Autowired
     private TransferItemService transferItemService;
+    @Autowired
+    private LocReviseService locReviseService;
+    @Autowired
+    private ReviseLogService reviseLogService;
+    @Autowired
+    private ReviseLogItemService reviseLogItemService;
+    @Autowired
+    private CheckDiffService checkDiffService;
+    @Autowired
+    private CheckDiffItemService checkDiffItemService;
 
 
     /**
@@ -88,7 +94,7 @@
      * @version 1.0
      */
     @Override
-    @Transactional(rollbackFor = Exception.class)
+    @Transactional(timeout = 60, rollbackFor = Exception.class)
     public boolean syncPurchasee(List<OrderParams> orders) {
         if (orders.isEmpty()) {
             throw new CoolException("鍗曟嵁鍐呭涓嶈兘涓虹┖锛侊紒");
@@ -170,6 +176,7 @@
      * @param matnrs
      */
     @Override
+    @Transactional(timeout = 60, rollbackFor = Exception.class)
     public void syncMatnrs(List<BaseMatParms> matnrs) {
         List<Matnr> syncMatnrs = new ArrayList<>();
         if (!matnrs.isEmpty()) {
@@ -204,7 +211,7 @@
     @Override
     public R queryOrderStatus(QueryOrderParam queryParams) {
         WkOrder wkOrders = asnOrderService.getOne(new LambdaQueryWrapper<WkOrder>()
-                .eq(WkOrder::getCode, queryParams.getOrderNo())
+                .in(WkOrder::getCode, queryParams.getOrderNo())
                 .eq(WkOrder::getType, queryParams.getType()));
         if (Objects.isNull(wkOrders)) {
             throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
@@ -227,7 +234,7 @@
     public R syncLocsDetl(PageParam<Loc, BaseParam> pageParam, QueryWrapper<Loc> wrapper) {
         Page<Object> page = new Page<>();
         page.setCurrent(pageParam.getCurrent()).setSize(pageParam.getSize());
-        IPage<LocStockDto> locStocks =  locService.getLocDetls(page);
+        IPage<LocStockDto> locStocks = locService.getLocDetls(page);
         return R.ok().add(locStocks);
     }
 
@@ -297,7 +304,7 @@
             BeanUtils.copyProperties(param, locArea);
             WarehouseAreas warehouseAreas = warehouseAreasService
                     .getOne(new LambdaQueryWrapper<WarehouseAreas>()
-                    .eq(WarehouseAreas::getName, param.getName()));
+                            .eq(WarehouseAreas::getName, param.getName()));
             if (!Objects.isNull(warehouseAreas)) {
                 locArea.setWarehouseId(warehouseAreas.getId());
             }
@@ -351,7 +358,7 @@
                 String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_COMPANYS_CODE, null);
                 companys.setCode(ruleCode);
             } else {
-                throw new CoolException(one.getName() +  "锛屼紒涓氬悕閲嶅锛侊紒");
+                throw new CoolException(one.getName() + "锛屼紒涓氬悕閲嶅锛侊紒");
             }
             companys.setType(CompanysType.getCustomVal(param.getType()))
                     .setId(null);
@@ -372,12 +379,12 @@
             WkOrder wkOrder = new WkOrder();
             String ruleCode = null;
             if (syncOrders.getType().equals(OrderType.ORDER_CHECK.type)) {
-                 ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_CHECK_RULE_CODE, null);
+                ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_CHECK_RULE_CODE, null);
             } else if (syncOrders.getType().equals(OrderType.ORDER_IN.type)) {
                 ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_ASN_ORDER, null);
             } else if (syncOrders.getType().equals(OrderType.ORDER_OUT.type)) {
                 ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_OUT_STOCK_CODE, null);
-            }  else if (syncOrders.getType().equals(OrderType.ORDER_REVISE.type)) {
+            } else if (syncOrders.getType().equals(OrderType.ORDER_REVISE.type)) {
                 ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_LOC_REVISE_CODE, null);
             } else if (syncOrders.getType().equals(OrderType.ORDER_TRANSFER.type)) {
                 ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TRANSFER_ORDER_CODE, null);
@@ -474,4 +481,183 @@
         return R.ok();
     }
 
+    /**
+     * @author Ryan
+     * @date 2025/8/20
+     * @description: 搴撳瓨璋冩暣鍗曞悓姝�
+     * @version 1.0
+     */
+    @Override
+    @Transactional(timeout = 60, rollbackFor = Exception.class)
+    public R syncLocRevise(SyncLocReviseParams reviseParams) {
+        LocRevise locRevise = new LocRevise();
+        if (Objects.isNull(reviseParams.getAreaName())) {
+            throw new CoolException("搴撳尯涓嶈兘涓虹┖锛侊紒");
+        }
+        WarehouseAreas warehouseAreas = warehouseAreasService
+                .getOne(new LambdaQueryWrapper<WarehouseAreas>()
+                        .eq(WarehouseAreas::getName, reviseParams.getAreaName()));
+        if (Objects.isNull(warehouseAreas)) {
+            throw new CoolException("搴撳尯涓嶅瓨鍦紒锛�");
+        }
+        locRevise.setAreaName(locRevise.getAreaName())
+                .setAreaId(warehouseAreas.getId());
+        locRevise.setCode(SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_LOC_REVISE_CODE, null));
+
+        if (!locReviseService.save(locRevise)) {
+            throw new CoolException("搴撳瓨璋冩暣鍗曚繚瀛樺け璐ワ紒锛�");
+        }
+
+        reviseParams.getItems().forEach(revise -> {
+            Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, revise.getLocCode()));
+            ReviseLog reviseLog = new ReviseLog();
+            BeanUtils.copyProperties(loc, reviseLog);
+            reviseLog.setReviseId(locRevise.getId()).setReviseCode(locRevise.getCode());
+            if (!reviseLogService.save(reviseLog)) {
+                throw new CoolException("搴撳瓨璋冩暣鍗曚笉鑳戒负绌猴紒锛�");
+            }
+            revise.getItems().forEach(reviseItem -> {
+                ReviseLogItem logItem = new ReviseLogItem();
+                BeanUtils.copyProperties(reviseItem, logItem);
+                logItem.setLocId(loc.getId())
+                        .setLocCode(loc.getCode())
+                        .setId(null)
+                        .setReviseQty(reviseItem.getAnfme());
+
+                if (!reviseLogItemService.save(logItem)) {
+                    throw new CoolException("璋冩暣搴撳瓨鏄庣粏淇濆瓨澶辫触锛侊紒");
+                }
+            });
+        });
+
+        return R.ok();
+    }
+
+    /**
+     * @author Ryan
+     * @date 2025/8/20
+     * @description: 鍗曟嵁淇敼--鏀惰揣閫氱煡鍗�/鍑哄簱鍗�/鐩樼偣鍗�
+     * @version 1.0
+     */
+    @Override
+    @Transactional(timeout = 60, rollbackFor = Exception.class)
+    public R syncOrderUpdate(SyncOrderParams orders) {
+        //鍏ュ簱鍗曚慨鏀�
+        if (orders.getType().equals(OrderType.ORDER_IN.type)) {
+            orders.getItems().forEach(orderItem -> {
+                WkOrder order = asnOrderService.getOne(new LambdaQueryWrapper<WkOrder>()
+                        .eq(WkOrder::getType, OrderType.ORDER_IN.type)
+                        .eq(WkOrder::getCode, orderItem.getOrderCode()));
+                if (Objects.isNull(order)) {
+                    throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
+                }
+
+                if (!asnOrderItemService.update(new LambdaUpdateWrapper<WkOrderItem>()
+                        .eq(WkOrderItem::getOrderCode, orderItem.getOrderCode())
+                        .eq(WkOrderItem::getMatnrCode, orderItem.getMatnrCode())
+                        .eq(WkOrderItem::getSplrBatch, orderItem.getBatch())
+                        .set(WkOrderItem::getAnfme, orderItem.getAnfme()))) {
+                    throw new CoolException("鍗曟嵁淇敼澶辫触锛侊紒");
+                }
+
+                List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>()
+                        .eq(WkOrderItem::getOrderId, order.getId()));
+                if (orderItems.isEmpty()) {
+                    throw new CoolException("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�");
+                }
+
+                Double summed = orderItems.stream().mapToDouble(WkOrderItem::getAnfme).sum();
+                order.setAnfme(summed);
+
+                if (!asnOrderService.updateById(order)) {
+                    throw new CoolException("鍗曟嵁淇敼澶辫触锛侊紒");
+                }
+            });
+        } else {
+
+        }
+        return null;
+    }
+
+    /**
+     * @author Ryan
+     * @date 2025/8/21
+     * @description: 鍒犻櫎鍗曟嵁
+     * @version 1.0
+     */
+    @Override
+    @Transactional(timeout = 60, rollbackFor = Exception.class)
+    public R syncOrderDelete(List<SyncOrderParams> orders) {
+        orders.forEach(order -> {
+            order.getItems().forEach(orderItem -> {
+                WkOrder wkOrder = asnOrderService.getOne(new LambdaQueryWrapper<WkOrder>()
+                        .eq(WkOrder::getType, order.getType())
+                        .in(WkOrder::getExceStatus, Arrays.asList(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val, AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val))
+                        .eq(WkOrder::getId, orderItem.getOrderId()));
+                if (Objects.isNull(wkOrder)) {
+                    throw new CoolException("璁㈠崟锛�" + orderItem.getOrderCode() + "锛屽綋鍓嶇姸鎬侊紝涓嶅彲鎵ц鍒犻櫎鎿嶄綔锛侊紒");
+                }
+                if (!asnOrderItemService.remove(new LambdaQueryWrapper<WkOrderItem>()
+                        .eq(WkOrderItem::getMatnrId, orderItem.getMatnrId())
+                        .eq(WkOrderItem::getSplrBatch, orderItem.getBatch())
+                        .eq(WkOrderItem::getOrderCode, orderItem.getOrderCode()))) {
+                    throw new CoolException("鍗曟嵁鏄庣粏鍒犻櫎澶辫触锛侊紒");
+                }
+                List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, orderItem.getOrderId()));
+                if (orderItems.isEmpty()) {
+                    if (!asnOrderService.removeById(orderItem.getOrderId())) {
+                        throw new CoolException("鍗曟嵁鍒犻櫎澶辫触锛侊紒");
+                    }
+                }
+            });
+        });
+        return R.ok();
+    }
+
+    /**
+     * @author Ryan
+     * @date 2025/8/21
+     * @description: 璋冩嫈鍗曟槑缁嗘煡璇�
+     * @version 1.0
+     */
+    @Override
+    public R queryTransfer(QueryOrderParam queryParams) {
+        Transfer transfer = transferService.getOne(new LambdaQueryWrapper<Transfer>()
+                .in(Transfer::getCode, queryParams.getOrderNo()));
+        if (Objects.isNull(transfer)) {
+            throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
+        }
+        List<TransferItem> orderItems = transferItemService.list(new LambdaQueryWrapper<TransferItem>()
+                .eq(TransferItem::getTransferId, transfer.getId()));
+        TransferInfoDto wkorderDto = new TransferInfoDto();
+        wkorderDto.setTransfer(transfer).setItems(orderItems);
+        return R.ok().add(wkorderDto);
+    }
+
+    /**
+     * @author Ryan
+     * @date 2025/8/22
+     * @description: 鐩樼偣宸紓鍗曞悓姝�
+     * @version 1.0
+     */
+    @Override
+    @Transactional(timeout = 60, rollbackFor = Exception.class)
+    public R syncCheckDiffs(SyncCheckDiffParams syncParams) {
+        List<CheckDiff> diffs = checkDiffService.list(new LambdaQueryWrapper<CheckDiff>()
+                .eq(CheckDiff::getExceStatus, CheckExceStatus.CHECK_ORDER_STATUS_EXCE_DONE.val)
+                .in(CheckDiff::getOrderCode, syncParams.getDiffCode()));
+        if (diffs.isEmpty()) {
+            return R.ok();
+        }
+        List<CheckDiffDto> dtos = new ArrayList<>();
+        diffs.forEach(check -> {
+            CheckDiffDto dto = new CheckDiffDto();
+            BeanUtils.copyProperties(check, dto);
+            List<CheckDiffItem> items = checkDiffItemService.list(new LambdaQueryWrapper<CheckDiffItem>().eq(CheckDiffItem::getCheckId, check.getId()));
+            dto.setItems(items);
+            dtos.add(dto);
+        });
+
+        return R.ok().add(dtos);
+    }
 }

--
Gitblit v1.9.1