From 44bc5cf48fa23a1bf5fcefedce1b4686033b245a Mon Sep 17 00:00:00 2001
From: skyouc <creaycat@gmail.com>
Date: 星期三, 24 十二月 2025 13:38:59 +0800
Subject: [PATCH] 添加损溢单上报接口

---
 src/main/java/com/zy/asrs/entity/CheckOrderDetl.java           |   12 --
 src/main/resources/mapper/OrderMapper.xml                      |   10 ++
 src/main/java/com/zy/asrs/service/OrderService.java            |   11 +-
 src/main/java/com/zy/api/service/impl/KopenApiServiceImpl.java |   65 +++++++++-------
 src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java   |    9 ++
 src/main/java/com/zy/api/service/KopenApiService.java          |    3 
 src/main/java/com/zy/asrs/mapper/OrderMapper.java              |    6 +
 src/main/java/com/zy/asrs/task/OrderSyncScheduler.java         |   34 ++++++++
 src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java   |   66 +++++++++++++++-
 src/main/java/com/zy/api/controller/KopenApiController.java    |   11 +-
 src/main/java/com/zy/api/entity/OrderParams.java               |    1 
 11 files changed, 171 insertions(+), 57 deletions(-)

diff --git a/src/main/java/com/zy/api/controller/KopenApiController.java b/src/main/java/com/zy/api/controller/KopenApiController.java
index a504ae8..dee3217 100644
--- a/src/main/java/com/zy/api/controller/KopenApiController.java
+++ b/src/main/java/com/zy/api/controller/KopenApiController.java
@@ -172,14 +172,15 @@
      */
     @ApiOperation("闆朵欢鎹熸孩鍗曚笅鍙�")
     @PostMapping("/sendBSBYDetails")
-    public XSR sendStockAdjust(@RequestBody StockAdjustParams params) {
-        if (Objects.isNull(params)) {
+    public XSR sendStockAdjust(@RequestBody List<StockAdjustParams> params) {
+        if (Objects.isNull(params) || params.isEmpty()) {
             return XSR.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
-        }
-        if (Objects.isNull(params.getDetails()) || params.getDetails().isEmpty()) {
-            return XSR.error("涓婃姤璁㈠崟鍒楄〃涓嶈兘涓虹┖锛侊紒");
         }
         return kopenApiService.sendStockAdjust(params, 1L);
     }
 
+
+    
+
+
 }
diff --git a/src/main/java/com/zy/api/entity/OrderParams.java b/src/main/java/com/zy/api/entity/OrderParams.java
index e865e5d..e09e9a9 100644
--- a/src/main/java/com/zy/api/entity/OrderParams.java
+++ b/src/main/java/com/zy/api/entity/OrderParams.java
@@ -1,7 +1,6 @@
 package com.zy.api.entity;
 
 import java.io.Serializable;
-import java.util.List;
 
 import org.springframework.format.annotation.DateTimeFormat;
 
diff --git a/src/main/java/com/zy/api/service/KopenApiService.java b/src/main/java/com/zy/api/service/KopenApiService.java
index f209638..c2cd61c 100644
--- a/src/main/java/com/zy/api/service/KopenApiService.java
+++ b/src/main/java/com/zy/api/service/KopenApiService.java
@@ -3,7 +3,6 @@
 import java.util.List;
 
 import com.zy.api.controller.params.PageRequestParams;
-import com.zy.api.entity.OrderItemsParam;
 import com.zy.api.entity.PubOrderParams;
 import com.zy.api.entity.ReportOrderParam;
 import com.zy.api.entity.StockAdjustParams;
@@ -79,5 +78,5 @@
      * @param params
      * @return com.core.common.R
      */
-	XSR sendStockAdjust(StockAdjustParams params, Long userId);
+    XSR sendStockAdjust(List<StockAdjustParams> params, Long userId);
 }
diff --git a/src/main/java/com/zy/api/service/impl/KopenApiServiceImpl.java b/src/main/java/com/zy/api/service/impl/KopenApiServiceImpl.java
index 05586a0..38d8f8d 100644
--- a/src/main/java/com/zy/api/service/impl/KopenApiServiceImpl.java
+++ b/src/main/java/com/zy/api/service/impl/KopenApiServiceImpl.java
@@ -472,10 +472,15 @@
      */
     @Override
     public XSR getStockInfo(PageRequestParams params) {
-        Page<LocDetl> locDetls = locDetlService.selectPage(new Page<>(params.getCurr(), params.getLimit()),
-                new EntityWrapper<LocDetl>()
-                        .eq(!Objects.isNull(params.getPro_komcode()), "matnr", params.getPro_komcode())
-                        .eq(Objects.isNull(params.getPro_id()), "supp_code", params.getPro_id()));
+        EntityWrapper<LocDetl> wrapper = new EntityWrapper<>();
+        if (!Objects.isNull(params.getPro_id())) {
+            wrapper.eq("supp_code", params.getPro_id());
+        }
+        if (!Objects.isNull(params.getPro_komcode())) {
+            wrapper.eq("matnr", params.getPro_komcode());
+        }
+
+        Page<LocDetl> locDetls = locDetlService.selectPage(new Page<>(params.getCurr(), params.getLimit()),  wrapper);
 
         return XSR.ok(locDetls.getRecords());
     }
@@ -490,25 +495,13 @@
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public XSR sendStockAdjust(StockAdjustParams params, Long userId) {
+    public XSR sendStockAdjust(List<StockAdjustParams> params, Long userId) {
         if (Objects.isNull(params)) {
             return XSR.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
         }
-        if (Objects.isNull(params.getDetails()) || params.getDetails().isEmpty()) {
-            return XSR.error("璁㈠崟鏄庣粏涓嶈兘涓虹┖锛侊紒");
-        }
-        // 鏍¢獙鍙傛暟
-        if (Objects.isNull(params.getBsby_no())) {
-            return XSR.error("鎹熸孩鍗曠紪鍙蜂笉鑳戒负绌猴紒锛�");
-        }
-
-        CheckOrder checkOrder = checkOrderService
-                .selectOne(new EntityWrapper<CheckOrder>().eq("order_no", params.getBsby_no()));
-        if (!Objects.isNull(checkOrder)) {
-            return XSR.error("鎹熸孩鍗曞凡瀛樺湪锛侊紒");
-        }
-
-        gentCheckOrders(params, userId);
+        params.forEach(param -> {
+            gentCheckOrders(param, userId);
+        });
 
         return XSR.ok("闆朵欢鎹熸孩鍗曚笅鍙戞垚鍔燂紒锛�");
     }
@@ -516,18 +509,32 @@
     /** 鐢熸垚鏂扮殑闆朵欢鎹熸孩鍗� 
      * @param userId */
     @Transactional(rollbackFor = Exception.class)   
-    public void gentCheckOrders(StockAdjustParams checkOrder, Long userId) {
+    public void gentCheckOrders(StockAdjustParams params, Long userId) {
+        if (Objects.isNull(params.getDetails()) || params.getDetails().isEmpty()) {
+            throw new CoolException("璁㈠崟鏄庣粏涓嶈兘涓虹┖锛侊紒");
+        }
+        // 鏍¢獙鍙傛暟
+        if (Objects.isNull(params.getBsby_no())) {
+            throw new CoolException("鎹熸孩鍗曠紪鍙蜂笉鑳戒负绌猴紒锛�");
+        }
+
+        CheckOrder checkOrder = checkOrderService
+                .selectOne(new EntityWrapper<CheckOrder>().eq("order_no", params.getBsby_no()));
+        if (!Objects.isNull(checkOrder)) {
+            throw new CoolException("鎹熸孩鍗曞凡瀛樺湪锛侊紒");
+        }
+
         CheckOrder order = new CheckOrder();
-        order.setOrderNo(checkOrder.getBsby_no());
-        order.setCstmrName(checkOrder.getCompany_id());
-        order.setDefNumber(checkOrder.getKopen_id());
+        order.setOrderNo(params.getBsby_no());
+        order.setCstmrName(params.getCompany_id());
+        order.setDefNumber(params.getKopen_id());
         order.setDocType(4L);
         order.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
         order.setSettle(Long.valueOf(CommonEnum.COMMON_ENUM_Y.type + ""));
         order.setStatus(CommonEnum.COMMON_ENUM_Y.type);
-        order.setOrderTime(checkOrder.getUpdate_time());
-        order.setMemo(checkOrder.getResason());
-        order.setShipName(checkOrder.getReason_name());
+        order.setOrderTime(params.getUpdate_time());
+        order.setMemo(params.getResason());
+        order.setShipName(params.getReason_name());
         order.setCreateTime(new Date());
         order.setUpdateTime(new Date());
 
@@ -535,11 +542,11 @@
             throw new CoolException("鎹熸孩鍗曟柊澧炲け璐ワ紒锛�");
         }
 
-        if (Objects.isNull(checkOrder.getDetails()) || checkOrder.getDetails().isEmpty()) {
+        if (Objects.isNull(params.getDetails()) || params.getDetails().isEmpty()) {
             throw new CoolException("璁㈠崟鏄庣粏涓嶈兘涓虹┖锛侊紒");
         }
 
-        checkOrder.getDetails().forEach(item -> {
+        params.getDetails().forEach(item -> {
             CheckOrderDetl checkOrderDetl = new CheckOrderDetl();
             //閫氳繃鎵樼洏锛� 鐗╂枡缂栫爜锛� 渚涘簲鍟嗙紪鐮佹煡璇㈠簱瀛樻槑缁�
             LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>()
diff --git a/src/main/java/com/zy/asrs/entity/CheckOrderDetl.java b/src/main/java/com/zy/asrs/entity/CheckOrderDetl.java
index 04afc24..bf76f08 100644
--- a/src/main/java/com/zy/asrs/entity/CheckOrderDetl.java
+++ b/src/main/java/com/zy/asrs/entity/CheckOrderDetl.java
@@ -5,9 +5,7 @@
 import com.core.common.SpringUtils;
 import com.zy.asrs.enums.CheckStatusEnum;
 import com.zy.asrs.service.OrderService;
-import com.zy.asrs.entity.Order;
 import com.baomidou.mybatisplus.annotations.TableField;
-import com.core.common.SpringUtils;
 import com.zy.common.utils.Synchro;
 import com.zy.system.service.UserService;
 import com.zy.system.entity.User;
@@ -16,15 +14,7 @@
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import org.springframework.format.annotation.DateTimeFormat;
-import com.core.common.SpringUtils;
-import com.zy.system.service.UserService;
-import com.zy.system.entity.User;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.text.SimpleDateFormat;
-import java.util.Date;
+
 
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
diff --git a/src/main/java/com/zy/asrs/mapper/OrderMapper.java b/src/main/java/com/zy/asrs/mapper/OrderMapper.java
index 69f50ce..ab3ffc7 100644
--- a/src/main/java/com/zy/asrs/mapper/OrderMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/OrderMapper.java
@@ -1,6 +1,7 @@
 package com.zy.asrs.mapper;
 
 import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.zy.asrs.entity.CheckOrder;
 import com.zy.asrs.entity.Order;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -25,4 +26,9 @@
 
     Order selectOrderMoveStatus();
     Order selectOrderMoveStatusInitial();
+    /**
+     * 鏌ヨ鎹熸孩鍗曞畬缁撶殑璁㈠崟
+     * @return
+     */
+    List<CheckOrder> selectCompleteCheck();
 }
diff --git a/src/main/java/com/zy/asrs/service/OrderService.java b/src/main/java/com/zy/asrs/service/OrderService.java
index 878002f..667df16 100644
--- a/src/main/java/com/zy/asrs/service/OrderService.java
+++ b/src/main/java/com/zy/asrs/service/OrderService.java
@@ -1,10 +1,7 @@
 package com.zy.asrs.service;
 
-import com.zy.asrs.entity.Order;
+import com.zy.asrs.entity.*;
 import com.baomidou.mybatisplus.service.IService;
-import com.zy.asrs.entity.OrderDetl;
-import com.zy.asrs.entity.WrkDetl;
-import com.zy.asrs.entity.WrkMast;
 
 import java.util.List;
 
@@ -35,5 +32,11 @@
 
     Order selectOrderMoveStatus();
     Order selectOrderMoveStatusInitial();
+    
+    /**
+     * 鏌ヨ鎹熸孩鍗曞畬缁撶殑璁㈠崟
+     * @return
+     */
+    List<CheckOrder> selectCompleteCheck();
 
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
index 912bdf6..29f7980 100644
--- a/src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
@@ -209,4 +209,13 @@
         return this.baseMapper.selectOrderMoveStatusInitial();
     }
 
+    /**
+     * 鏌ヨ鎹熸孩鍗曞畬缁撶殑璁㈠崟
+     * @return
+     */
+    @Override
+    public List<CheckOrder> selectCompleteCheck() {
+        return this.baseMapper.selectCompleteCheck();
+    }
+
 }
diff --git a/src/main/java/com/zy/asrs/task/OrderSyncScheduler.java b/src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
index 75e2e92..453e50f 100644
--- a/src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
+++ b/src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
@@ -1,6 +1,7 @@
 package com.zy.asrs.task;
 
 import com.core.common.Cools;
+import com.zy.asrs.entity.CheckOrder;
 import com.zy.asrs.entity.Order;
 import com.zy.asrs.enums.OrderTypeEnum;
 import com.zy.asrs.service.ApiLogService;
@@ -124,4 +125,37 @@
             }
         }
     }
+
+    /**鎹熸孩鍗曞畬缁撲笂鎶� */
+    @Scheduled(cron = "0/30 * * * * ?")
+    @Async("checkOrderThreadPool")
+    public void completeCheckOrderReport() {
+        if (!ErpReportOld){
+            return;
+        }
+        String erpReport = Parameter.get().getErpReport();
+        if (!Cools.isEmpty(erpReport) && erpReport.equals("true")) {
+            List<CheckOrder> orders = orderService.selectCompleteCheck();
+            for (CheckOrder order : orders) {
+                try {
+                    ReturnT<String> result = orderSyncHandler.startCheckOrderReport(order);
+                    if (!result.isSuccess()) {
+                        log.error("鍗曟嵁[orderNo={}]涓婃姤erp澶辫触", order.getOrderNo());
+                    }
+                } catch (Exception e) {
+                    log.error(e.getMessage());
+                    log.error("鍗曟嵁[orderNo={}]涓婃姤erp澶辫触", order.getOrderNo());
+                }
+
+                try {
+                    Thread.sleep(300);
+                } catch (InterruptedException e) {
+                    // TODO Auto-generated catch block
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+
 }
diff --git a/src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java b/src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java
index 3fb456e..157b547 100644
--- a/src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java
@@ -2,6 +2,7 @@
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
 import com.core.common.DateUtils;
 import com.core.exception.CoolException;
@@ -10,12 +11,14 @@
 import com.zy.api.entity.PubOrderParams;
 import com.zy.api.entity.ReportOrderParam;
 import com.zy.api.entity.ReportOrderParams;
+import com.zy.api.entity.StockAdjustParams;
 import com.zy.api.entity.StockUpOrderParams;
 import com.zy.api.entity.dto.XSR;
 import com.zy.api.service.KopenApiService;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.enums.OrderTypeEnum;
 import com.zy.asrs.service.*;
+import com.zy.asrs.service.impl.CheckOrderDetlServiceImpl;
 import com.zy.asrs.task.AbstractHandler;
 import com.zy.asrs.task.core.ReturnT;
 import com.zy.asrs.utils.OrderInAndOutUtil;
@@ -44,6 +47,8 @@
 @Service
 public class OrderSyncHandler extends AbstractHandler<String> {
 
+    private final CheckOrderDetlServiceImpl checkOrderDetlService;
+
     @Autowired
     private JdbcTemplate jdbcTemplate;
     @Autowired
@@ -62,6 +67,10 @@
     private KopenApiService kopenApiService;
     @Autowired
     private MatService matService;
+
+    OrderSyncHandler(CheckOrderDetlServiceImpl checkOrderDetlService) {
+        this.checkOrderDetlService = checkOrderDetlService;
+    }
 
     @Transactional
     public ReturnT<String> startOrderIssuedOnceMore(Order order) {
@@ -389,7 +398,8 @@
                         throw new CoolException("鏈嶅姟鍣ㄥ唴閮ㄩ敊璇紝璇疯仈绯荤鐞嗗憳");
                     }
                 } else {
-                    log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", MesConstant.URL + MesConstant.OUT_DISPATCH_RESULT,
+                    log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}",
+                            MesConstant.URL + MesConstant.OUT_DISPATCH_RESULT,
                             JSON.toJSONString(orderParam), JSON.toJSONString(response));
                     throw new CoolException("涓婃姤KOPEN绯荤粺澶辫触");
                 }
@@ -424,7 +434,6 @@
                     .setCus_id(order.getCstmrName())
                     .setCus_address(order.getTel());
 
-
             List<OrderItemsParam> reportOrderParams = new ArrayList<>();
             orderDetls.forEach(detl -> {
                 Mat material = matService.selectByMatnr(detl.getMatnr());
@@ -447,11 +456,10 @@
 
             List<OutOrderParams> pubOrderParamsList = new ArrayList<>();
             pubOrderParamsList.add(pubOrderParams);
-            //璁剧疆娲惧伐鍗曟槑缁�
+            // 璁剧疆娲惧伐鍗曟槑缁�
             stockUpOrderParams.setDetails(pubOrderParamsList);
             stockUpOrderParams.setUpdate_time(order.getUpdateBy$());
 
-            
             XSR response = null;
             boolean success = false;
             try {
@@ -470,7 +478,8 @@
                         throw new CoolException("鏈嶅姟鍣ㄥ唴閮ㄩ敊璇紝璇疯仈绯荤鐞嗗憳");
                     }
                 } else {
-                    log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", MesConstant.URL + MesConstant.OUT_DETAILS_RESULT,
+                    log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}",
+                            MesConstant.URL + MesConstant.OUT_DETAILS_RESULT,
                             JSON.toJSONString(stockUpOrderParams), JSON.toJSONString(response));
                     throw new CoolException("涓婃姤KOPEN绯荤粺澶辫触");
                 }
@@ -497,4 +506,51 @@
         return SUCCESS;
     }
 
+    /**
+     * 鎹熸孩鍗曞畬缁撲笂鎶�
+     * 
+     * @param order
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public ReturnT<String> startCheckOrderReport(CheckOrder order) {
+        List<StockAdjustParams> adjustParams = new ArrayList<>();
+
+        StockAdjustParams adjustParam = new StockAdjustParams();
+
+        adjustParam.setCompany_id(order.getCstmrName())
+                .setWms_id(order.getId() + "")
+                .setType(0 + "")
+                .setCompany_id(order.getCstmrName());
+
+        adjustParam.setBsby_no(order.getNumber())
+                .setResason("")
+                .setReason_name("");
+        List<CheckOrderDetl> detls = checkOrderDetlService
+                .selectList(new EntityWrapper<CheckOrderDetl>().eq("order_id", order.getId()));
+        if (Objects.isNull(detls) || detls.isEmpty()) {
+            throw new CoolException("鎹熸孩鍗曡鎯呬笉瀛樺湪");
+        }
+        List<OrderItemsParam> items = new ArrayList<>();
+        detls.forEach(detl -> {
+            Mat material = matService.selectByMatnr(detl.getMatnr());
+            if (Objects.isNull(material)) {
+                throw new CoolException("鐗╂枡涓嶅瓨鍦�");
+            }
+            OrderItemsParam itemParam = new OrderItemsParam();
+            itemParam.setLocation_no(detl.getZpallet())
+                    .setPro_komcode(material.getMatnr())
+                    .setPro_id(detl.getSuppCode())
+                    .setBsby_qty(detl.getDiffQty().intValue());
+            items.add(itemParam);
+        });
+        adjustParam.setDetails(items);
+
+        adjustParams.add(adjustParam);
+
+        return SUCCESS;
+        // TODO Auto-generated method stub
+
+    }
+
 }
diff --git a/src/main/resources/mapper/OrderMapper.xml b/src/main/resources/mapper/OrderMapper.xml
index f8c5070..270025a 100644
--- a/src/main/resources/mapper/OrderMapper.xml
+++ b/src/main/resources/mapper/OrderMapper.xml
@@ -118,5 +118,15 @@
         and move_status = 1
         order by update_time
     </select>
+    <select id="selectCompleteCheck" resultType="com.zy.asrs.entity.Order">
+        SELECT TOP
+            20 *
+        FROM
+            man_check_order
+        WHERE
+            settle = 4
+          AND status = 1
+          AND doc_type = 4
+    </select>
 
 </mapper>

--
Gitblit v1.9.1