From bf8b7d7ea57296afdf23968b1811fa631fc54fa3 Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期五, 08 五月 2026 17:29:34 +0800
Subject: [PATCH] 形态转换单接口完成,形态转换出库单不上报

---
 src/main/java/com/zy/asrs/task/handler/OrderPakoutSyncHandler.java |    2 
 src/main/java/com/zy/asrs/controller/OpenController.java           |   24 ++++++++
 src/main/java/com/zy/asrs/task/OrderSyncScheduler.java             |    9 ++
 src/main/java/com/zy/common/model/DetlDto.java                     |    3 +
 src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java        |  119 +++++++++++++++++++++++++++++++++++++++
 src/main/java/com/zy/asrs/service/OpenService.java                 |    6 ++
 6 files changed, 161 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/OpenController.java b/src/main/java/com/zy/asrs/controller/OpenController.java
index 004dd8a..24e121e 100644
--- a/src/main/java/com/zy/asrs/controller/OpenController.java
+++ b/src/main/java/com/zy/asrs/controller/OpenController.java
@@ -270,6 +270,30 @@
 //    }
 
     /**
+     * 娣诲姞褰㈡�佽浆鎹㈠崟
+     */
+    @PostMapping("/order/createFormConversionOrder")
+    @AppAuth(memo = "娣诲姞褰㈡�佽浆鎹㈠崟")
+    public synchronized R createFormConversionOrder(@RequestHeader(required = false) String appkey,
+                                           @RequestBody OpenOrderPakinParam param,
+                                           HttpServletRequest request) {
+        auth(appkey, param, request);
+        if (Cools.isEmpty(param)) {
+            return R.parse(BaseRes.PARAM);
+        }
+        if (Cools.isEmpty(param.getOrderNo())) {
+            return R.error("鍗曟嵁缂栧彿[orderNo]涓嶈兘涓虹┖");
+        }
+        if (Cools.isEmpty(param.getOrderType())) {
+            return R.error("鍗曟嵁绫诲瀷[orderType]涓嶈兘涓虹┖");
+        }
+        if (Cools.isEmpty(param.getOrderDetails())) {
+            return R.error("鍗曟嵁鏄庣粏[orderDetails]涓嶈兘涓虹┖");
+        }
+        return openService.createFormConversionOrder(param);
+    }
+
+    /**
      * 娣诲姞鍏ュ簱鍗�
      */
     @PostMapping("/order/pakin/default/v1")
diff --git a/src/main/java/com/zy/asrs/service/OpenService.java b/src/main/java/com/zy/asrs/service/OpenService.java
index 6e85104..c704cfa 100644
--- a/src/main/java/com/zy/asrs/service/OpenService.java
+++ b/src/main/java/com/zy/asrs/service/OpenService.java
@@ -1,5 +1,6 @@
 package com.zy.asrs.service;
 
+import com.core.common.R;
 import com.zy.asrs.entity.param.*;
 import com.zy.asrs.entity.result.OpenOrderCompeteResult;
 import com.zy.asrs.entity.result.StockVo;
@@ -44,4 +45,9 @@
      * @param param
      */
     void syncMat(MatSyncParam param);
+
+    /**
+     * 鍒涘缓褰㈡�佽浆鎹㈠崟
+     */
+    R createFormConversionOrder(OpenOrderPakinParam param);
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
index 06fe192..5545bae 100644
--- a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
 import com.core.common.DateUtils;
+import com.core.common.R;
 import com.core.common.SnowflakeIdWorker;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
@@ -15,6 +16,7 @@
 import com.zy.common.model.DetlDto;
 import com.zy.common.utils.NodeUtils;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -586,4 +588,121 @@
 
     }
 
+    @Override
+    public R createFormConversionOrder(OpenOrderPakinParam param) {
+        OrderPakin order = orderPakinService.selectByNo(param.getOrderNo());
+        if (!Cools.isEmpty(order)) {
+            return R.parse(param.getOrderNo() + "鍗曟嵁宸插瓨鍦紝璇峰嬁閲嶅鎻愪氦");
+        }
+        DocType docType = docTypeService.selectOrAdd(param.getOrderType(), Boolean.TRUE);
+        Date now = new Date();
+        // 鍗曟嵁涓绘。
+        order = new OrderPakin(
+                String.valueOf(snowflakeIdWorker.nextId()),    // 缂栧彿[闈炵┖]
+                param.getOrderNo(),    // 璁㈠崟缂栧彿
+                DateUtils.convert(now),    // 鍗曟嵁鏃ユ湡
+                docType.getDocId(),    // 鍗曟嵁绫诲瀷
+                null,    // 椤圭洰缂栧彿
+                null,    //
+                null,    // 璋冩嫧椤圭洰缂栧彿
+                null,    // 鍒濆绁ㄦ嵁鍙�
+                null,    // 绁ㄦ嵁鍙�
+                null,    // 瀹㈡埛缂栧彿
+                null,    // 瀹㈡埛
+                null,    // 鑱旂郴鏂瑰紡
+                null,    // 鎿嶄綔浜哄憳
+                null,    // 鍚堣閲戦
+                null,    // 浼樻儬鐜�
+                null,    // 浼樻儬閲戦
+                null,    // 閿�鍞垨閲囪喘璐圭敤鍚堣
+                null,    // 瀹炰粯閲戦
+                null,    // 浠樻绫诲瀷
+                null,    // 涓氬姟鍛�
+                null,    // 缁撶畻澶╂暟
+                null,    // 閭垂鏀粯绫诲瀷
+                null,    // 閭垂
+                null,    // 浠樻鏃堕棿
+                null,    // 鍙戣揣鏃堕棿
+                null,    // 鐗╂祦鍚嶇О
+                null,    // 鐗╂祦鍗曞彿
+                1L,    // 璁㈠崟鐘舵��
+                1,    // 鐘舵��
+                9527L,    // 娣诲姞浜哄憳
+                now,    // 娣诲姞鏃堕棿
+                9527L,    // 淇敼浜哄憳
+                now,    // 淇敼鏃堕棿
+                null  // 澶囨敞
+        );
+        if (!orderPakinService.insert(order)) {
+            throw new CoolException("鐢熸垚鍗曟嵁涓绘。澶辫触锛岃鑱旂郴绠$悊鍛�");
+        }
+
+        // 鍗曟嵁鏄庣粏妗�
+        List<DetlDto> list = new ArrayList<>();
+        List<DetlDto> orderDetails = param.getOrderDetails();
+        for (DetlDto detail : orderDetails) {
+            DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(), detail.getBrand(), detail.getStandby1(), detail.getStandby2(), detail.getStandby3(), detail.getLineNumber(), detail.getBoxType1(), detail.getBoxType2(), detail.getBoxType3(), detail.getAnfme(),detail.getSku());
+            dto.setManu(detail.getManu());
+            dto.setWorkOrder(detail.getWorkOrder());
+            if (DetlDto.hasLineNumber(list, dto)) {
+                DetlDto detlDto = DetlDto.findLineNumber(list, dto.getMatnr(), dto.getBatch(), dto.getBrand(), dto.getStandby1(), dto.getStandby2(), dto.getStandby3(), dto.getLineNumber(), dto.getBoxType1(), dto.getBoxType2(), dto.getBoxType3(),dto.getSku());
+                assert detlDto != null;
+                detlDto.setAnfme(detlDto.getAnfme() + detail.getAnfme());
+            } else {
+                list.add(dto);
+            }
+        }
+        // 娣诲姞褰㈡�佽浆鎹㈠嚭搴撳崟
+        DocType docType2 = docTypeService.selectOrAdd("褰㈡�佽浆鎹㈠嚭搴撳崟", Boolean.FALSE);
+        OrderPakout outOrder = new OrderPakout();
+        BeanUtils.copyProperties(order, outOrder);
+        outOrder.setOrderNo("XTC" + outOrder.getOrderNo());
+        outOrder.setDocType(docType2.getDocId());
+        if (!orderPakoutService.insert(outOrder)) {
+            throw new CoolException("鐢熸垚褰㈡�佽浆鎹㈠嚭搴撳崟澶辫触");
+        }
+
+        for (DetlDto detlDto : list) {
+            Mat mat = matService.selectByMatnr(detlDto.getMatnr());
+            if (Cools.isEmpty(mat)) {
+                throw new CoolException(detlDto.getMatnr() + "缂栧彿鍟嗗搧妫�绱㈠け璐ワ紝璇峰厛娣诲姞鍟嗗搧");
+            }
+            OrderDetlPakin orderDetl = new OrderDetlPakin();
+            orderDetl.sync(mat);
+            orderDetl.setSku(String.valueOf(detlDto.getSku()));
+            orderDetl.setManu(detlDto.getManu());
+            orderDetl.setLineNumber(detlDto.getLineNumber());
+            orderDetl.setBatch(detlDto.getBatch());
+            orderDetl.setAnfme(detlDto.getAnfme());
+            orderDetl.setBrand(detlDto.getBrand());
+            orderDetl.setStandby1(detlDto.getStandby1());
+            orderDetl.setStandby2(detlDto.getStandby2());
+            orderDetl.setStandby3(detlDto.getStandby3());
+            orderDetl.setOrderId(order.getId());
+            orderDetl.setOrderNo(order.getOrderNo());
+            orderDetl.setCreateBy(9527L);
+            orderDetl.setCreateTime(now);
+            orderDetl.setUpdateBy(9527L);
+            orderDetl.setUpdateTime(now);
+            orderDetl.setStatus(1);
+            orderDetl.setQty(0.0D);
+            orderDetl.setPakinPakoutStatus(1);
+            if (!orderDetlPakinService.insert(orderDetl)) {
+                throw new CoolException("鐢熸垚鍗曟嵁鏄庣粏澶辫触锛岃鑱旂郴绠$悊鍛�");
+            }
+            // 娣诲姞褰㈡�佽浆鎹㈠嚭搴撳崟鏄庣粏
+            OrderDetlPakout orderDetlPakout = new OrderDetlPakout();
+            BeanUtils.copyProperties(orderDetl, orderDetlPakout);
+            orderDetlPakout.setOrderId(outOrder.getId());
+            orderDetlPakout.setOrderNo(outOrder.getOrderNo());
+            orderDetlPakout.setStandby1(detlDto.getWorkOrder());
+            orderDetlPakout.setPakinPakoutStatus(2);
+            if (!orderDetlPakoutService.insert(orderDetlPakout)) {
+                throw new CoolException("鐢熸垚褰㈡�佽浆鎹㈠嚭搴撳崟鏄庣粏澶辫触");
+            }
+        }
+
+        return R.ok("娣诲姞鎴愬姛");
+    }
+
 }
diff --git a/src/main/java/com/zy/asrs/task/OrderSyncScheduler.java b/src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
index f0c4ba5..8d82982 100644
--- a/src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
+++ b/src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
@@ -20,6 +20,7 @@
 import javax.annotation.Resource;
 import java.util.Iterator;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * updated by IX in 2024/12/17
@@ -80,7 +81,13 @@
     @Async("orderThreadPool")
     public void reportOutStockOrders() {
         if (loadingConfigTimer.getErpReport()) {
-            List<OrderDetlPakout> orderDetlPakoutList = orderDetlPakoutService.selectList(new EntityWrapper<OrderDetlPakout>().where("qty > units"));
+            List<OrderPakout> orderPakoutList = orderPakoutService.selectList(new EntityWrapper<OrderPakout>().in("settle", 2, 4));
+            // 鍘婚櫎褰㈡�佽浆鎹㈠嚭搴撳崟涓嶄笂鎶�
+            List<Long> collect = orderPakoutList.stream().filter(orderPakout -> !orderPakout.getDocType$().equals("褰㈡�佽浆鎹㈠嚭搴撳崟")).map(OrderPakout::getId).collect(Collectors.toList());
+            if(collect.isEmpty()){
+                return;
+            }
+            List<OrderDetlPakout> orderDetlPakoutList = orderDetlPakoutService.selectList(new EntityWrapper<OrderDetlPakout>().where("qty > units").in("order_id",collect));
             if (!orderDetlPakoutList.isEmpty()) {
                 orderPakoutSyncHandler.reportOutStockOrders(orderDetlPakoutList);
             }
diff --git a/src/main/java/com/zy/asrs/task/handler/OrderPakoutSyncHandler.java b/src/main/java/com/zy/asrs/task/handler/OrderPakoutSyncHandler.java
index 492f520..b9bd12e 100644
--- a/src/main/java/com/zy/asrs/task/handler/OrderPakoutSyncHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/OrderPakoutSyncHandler.java
@@ -110,7 +110,7 @@
         List<OrderPakout> orderPakouts = orderPakoutService.selectList(new EntityWrapper<OrderPakout>().where("settle = 4"));
 
         // 浣跨敤 removeIf 绠�鍖栦唬鐮�
-        orderPakouts.removeIf(orderPakout -> orderDetlPakoutMapper.selectReportComplete(orderPakout.getId()) == 0);
+        orderPakouts.removeIf(orderPakout -> orderDetlPakoutMapper.selectReportComplete(orderPakout.getId()) == 0 && orderPakout.getDocType$().equals("褰㈡�佽浆鎹㈠嚭搴撳崟"));
 
         // 瀵瑰墿浣欐暟鎹繘琛宻ettle璁剧疆
         orderPakouts.forEach(orderPakin -> orderPakin.setSettle(6L));
diff --git a/src/main/java/com/zy/common/model/DetlDto.java b/src/main/java/com/zy/common/model/DetlDto.java
index 3908fd5..5a5704b 100644
--- a/src/main/java/com/zy/common/model/DetlDto.java
+++ b/src/main/java/com/zy/common/model/DetlDto.java
@@ -43,6 +43,9 @@
     // 浠撳簱
     private String manu;
 
+    // 杞崲鍓嶅伐鍗曞彿
+    private String workOrder;
+
     public DetlDto() {
     }
 

--
Gitblit v1.9.1