From fcbc8ed5d4152d5b8b0a230e8074fb159bdd1989 Mon Sep 17 00:00:00 2001
From: skyouc <creaycat@gmail.com>
Date: 星期二, 16 十二月 2025 10:22:47 +0800
Subject: [PATCH] bug修复

---
 src/main/java/com/zy/api/enums/OrderWkType.java                |    4 +
 src/main/java/com/zy/api/service/impl/KopenApiServiceImpl.java |   91 +++++++++++++++++++++++++++---
 src/main/java/com/zy/api/service/KopenApiService.java          |    7 ++
 src/main/java/com/zy/api/controller/KopenApiController.java    |   20 ++++++
 src/main/java/com/zy/api/entity/OrderParams.java               |    5 +
 src/main/java/com/zy/api/entity/OrderItemsParam.java           |    8 ++
 6 files changed, 124 insertions(+), 11 deletions(-)

diff --git a/src/main/java/com/zy/api/controller/KopenApiController.java b/src/main/java/com/zy/api/controller/KopenApiController.java
index 1d62be6..33df387 100644
--- a/src/main/java/com/zy/api/controller/KopenApiController.java
+++ b/src/main/java/com/zy/api/controller/KopenApiController.java
@@ -43,6 +43,7 @@
         return kopenApiService.receiveOrders(params);
     }
 
+
     /**
      * 涓婃父涓嬪彂闆朵欢鏁版嵁鍙樻洿
      * s
@@ -84,4 +85,23 @@
         return kopenApiService.getInDispatchResult(params);
     }
 
+    /**
+     * 澶囪揣鎸囩ず娲惧伐鍗曚笅鍙�
+     * @author Ryan
+     * @date 2025/11/24 15:21
+     * @param params
+     * @return com.core.common.R
+     */
+    @ApiOperation("澶囪揣鎸囩ず娲惧伐鍗曚笅鍙�")
+    @PostMapping("/sendOutDispatch")
+    public R sendStockPrepareDispatch(@RequestBody PubOrderParams params) {
+        if (Objects.isNull(params)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        if (Objects.isNull(params.getDetails()) || params.getDetails().isEmpty()) {
+            return R.error("涓婃姤璁㈠崟鍒楄〃涓嶈兘涓虹┖锛侊紒");
+        }
+        return kopenApiService.sendOutDispatch(params);
+    }
+
 }
diff --git a/src/main/java/com/zy/api/entity/OrderItemsParam.java b/src/main/java/com/zy/api/entity/OrderItemsParam.java
index bf5cbdc..4fbf902 100644
--- a/src/main/java/com/zy/api/entity/OrderItemsParam.java
+++ b/src/main/java/com/zy/api/entity/OrderItemsParam.java
@@ -30,5 +30,13 @@
     @ApiModelProperty("鍏ュ簱閫氱煡鏁伴噺")
     private Double inv_qty;
 
+    @ApiModelProperty("鎸囩ず鎷h揣璁㈠崟鏁伴噺")
+    private Integer order_qty;
+
+    @ApiModelProperty("鍘熶笂鏋舵淳宸ユ暟閲�")
+    private Integer old_qty;
+
+    @ApiModelProperty("鍙樻洿鏁伴噺")
+    private Integer new_qty;
 
 }
diff --git a/src/main/java/com/zy/api/entity/OrderParams.java b/src/main/java/com/zy/api/entity/OrderParams.java
index 20d63ba..82685ba 100644
--- a/src/main/java/com/zy/api/entity/OrderParams.java
+++ b/src/main/java/com/zy/api/entity/OrderParams.java
@@ -26,7 +26,7 @@
     @ApiModelProperty("鍏徃ID")
     private String company_id;
 
-    @ApiModelProperty("鍏ュ簱绫诲瀷 1: 閲囪喘鍏ュ簱锛�2: 璋冩嫧鍏ュ簱锛�3: 閿�鍞��璐у叆搴擄紝4: 濂楀寘鍏ュ簱")
+    @ApiModelProperty("鍏ュ簱绫诲瀷 1: 閲囪喘鍏ュ簱锛�2: 璋冩嫧鍏ュ簱锛�3: 閿�鍞��璐у叆搴擄紝4: 濂楀寘鍏ュ簱, 5:SO, 6:EO")
     private String type;
 
     @ApiModelProperty("绠卞彿")
@@ -38,6 +38,9 @@
     @ApiModelProperty("鐩爣搴撳尯")
     private String target_location;
 
+    @ApiModelProperty("婧愬簱鍖�")
+    private String source_location;
+
 
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
diff --git a/src/main/java/com/zy/api/enums/OrderWkType.java b/src/main/java/com/zy/api/enums/OrderWkType.java
index 2b0efc2..8f410fd 100644
--- a/src/main/java/com/zy/api/enums/OrderWkType.java
+++ b/src/main/java/com/zy/api/enums/OrderWkType.java
@@ -7,6 +7,8 @@
     ORDER_WK_TRANSFER_IN("2", "璋冩嫈鍏ュ簱"),
     ORDER_WK_SALE_IN("锛�", "閿�鍞��璐у叆搴�"),
     ORDER_WK_BAG_IN("锛�", "濂楀寘鍏ュ簱"),
+    ORDER_WK_ORDER_OUT_EO("EO", "澶囪揣鎸囩ず娲惧伐鍗曪紙EO锛�"),
+    ORDER_WK_ORDER_OUT_SO("SO", "澶囪揣鎸囩ず娲惧伐鍗曪紙SO锛�"),
     ORDER_WK_ORDER_OUT("29", "澶囪揣鍗�");
 
     OrderWkType(String val, String desc) {
@@ -26,7 +28,7 @@
             return OrderType.ORDER_IN.type;
         } else if (val.equals(OrderWkType.ORDER_WK_BAG_IN.val)) {
             return OrderType.ORDER_IN.type;
-        } else if (val.equals(OrderWkType.ORDER_WK_ORDER_OUT.val)) {
+        } else if (val.equals(OrderWkType.ORDER_WK_ORDER_OUT.val)  || val.equals(OrderWkType.ORDER_WK_ORDER_OUT.val)  || val.equals(OrderWkType.ORDER_WK_ORDER_OUT.val)) {
             return OrderType.ORDER_OUT.type;
         } else {
             return OrderType.ORDER_OUT.type;
diff --git a/src/main/java/com/zy/api/service/KopenApiService.java b/src/main/java/com/zy/api/service/KopenApiService.java
index f6ea29c..e9305e3 100644
--- a/src/main/java/com/zy/api/service/KopenApiService.java
+++ b/src/main/java/com/zy/api/service/KopenApiService.java
@@ -40,4 +40,11 @@
      * @return
      */
     R getInDispatchResult(ReportOrderParam params);
+
+    /**
+     * 澶囪揣鎸囩ず娲惧伐鍗曚笅鍙�
+     * @param params
+     * @return
+     */
+    R sendOutDispatch(PubOrderParams params);
 }
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 6e881a9..b94b1fe 100644
--- a/src/main/java/com/zy/api/service/impl/KopenApiServiceImpl.java
+++ b/src/main/java/com/zy/api/service/impl/KopenApiServiceImpl.java
@@ -6,7 +6,6 @@
 import com.core.common.R;
 import com.core.exception.CoolException;
 import com.zy.api.entity.OrderParams;
-import com.zy.api.entity.ReportOrderParam;
 import com.zy.api.entity.PubOrderParams;
 import com.zy.api.entity.ReportOrderParam;
 import com.zy.api.entity.SyncMatParmas;
@@ -31,9 +30,6 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.Objects;
 
@@ -97,6 +93,73 @@
         } catch (Exception e) {
             return R.error(e.getMessage());
         }
+    }
+
+     /* */
+     /**
+      * 澶囪揣鎸囩ず娲惧伐鍗曚笅鍙�
+      * @author Ryan
+      * @date 2025/11/24 15:21
+      * @param params
+      * @return com.core.common.R
+      */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R sendOutDispatch(PubOrderParams params) {
+        if (Objects.isNull(params)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        // 鏍¢獙鍙傛暟
+        if (Objects.isNull(params.getDispatch_no())) {
+            return R.error("娲惧伐鍗曠紪鍙蜂笉鑳戒负绌猴紒锛�");
+        }
+        if (Objects.isNull(params.getKopen_id())) {
+            return R.error("娴佹按鍙蜂笉鑳戒负绌猴紒锛�");
+        }
+        if (Objects.isNull(params.getCompany_id())) {
+            return R.error("鍏徃ID涓嶈兘涓虹┖锛侊紒");
+        }
+
+        addOrUpdateOrders(params, "add");
+        
+        return R.ok("澶囪揣鎸囩ず娲惧伐鍗曚笅鍙戞垚鍔燂紒锛�");
+    }
+
+    /**
+     * 澶囪揣鎸囩ず娲惧伐鍗�
+     * @author Ryan
+     * @date 2025/12/16 9:15
+     * @param params
+     */
+    private void outOrderAddAndUpdate(PubOrderParams params, String type) {
+        if (Objects.isNull(params)) {
+            throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        if (Objects.isNull(params.getType())) {
+            throw new CoolException("璁㈠崟绫诲瀷涓嶈兘涓虹┖锛侊紒");
+        }
+
+        OrderParams orderParams = JSONObject.parseObject(JSONObject.toJSONString(params), OrderParams.class);
+        Order order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no", orderParams.getInv_no()));
+        if (type.equals("add") && !Objects.isNull(order)) {
+            throw new CoolException("鍗曟嵁宸插瓨鍦�, 涓嶅彲閲嶅娣诲姞锛侊紒");
+        }
+        // 鍒ゆ柇璁㈠崟鏄惁瀛樺湪
+        if (Objects.isNull(order)) {
+            /** 涓嶅瓨鍦紝鏂板璁㈠崟 */
+            generateOrders(params);
+        } else {
+            /** 瀛樺湪锛屽垹闄よ�佽鍗曪紝鏇存柊鎻掑叆鏂拌鍗� */
+            // 鍒犻櫎鏃ц鍗曟槑缁�
+            if (!orderDetlService.delete(new EntityWrapper<OrderDetl>().eq("order_id", order.getId()))) {
+                throw new CoolException("璁㈠崟鏄庣粏鍒犻櫎澶辫触锛侊紒");
+            };
+            if (!orderService.deleteById(order.getId())) {
+                throw new CoolException("鍘熷崟鎹垹闄ゅけ璐ワ紒锛�");
+            }
+            generateOrders(params);
+        }
+
     }
 
     /**
@@ -167,7 +230,6 @@
         if (Objects.isNull(params.getType())) {
             throw new CoolException("璁㈠崟绫诲瀷涓嶈兘涓虹┖锛侊紒");
         }
-
         OrderParams orderParams = JSONObject.parseObject(JSONObject.toJSONString(params), OrderParams.class);
         Order order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no", orderParams.getInv_no()));
         if (type.equals("add") && !Objects.isNull(order)) {
@@ -182,7 +244,8 @@
             // 鍒犻櫎鏃ц鍗曟槑缁�
             if (!orderDetlService.delete(new EntityWrapper<OrderDetl>().eq("order_id", order.getId()))) {
                 throw new CoolException("璁㈠崟鏄庣粏鍒犻櫎澶辫触锛侊紒");
-            };
+            }
+
             if (!orderService.deleteById(order.getId())) {
                 throw new CoolException("鍘熷崟鎹垹闄ゅけ璐ワ紒锛�");
             }
@@ -206,12 +269,14 @@
         if (OrderType.ORDER_IN.type.equals(OrderWkType.getTypeVal(params.getType()))) {
             // 鍏ュ簱
             newOrder.setPakinPakoutStatus(1);
+            newOrder.setDocType(Long.parseLong(params.getType()));
+            newOrder.setOrderNo(params.getInv_no());
         } else if (OrderType.ORDER_OUT.type.equals(OrderWkType.getTypeVal(params.getType()))) {
             // 鍑哄簱
             newOrder.setPakinPakoutStatus(2);
+            newOrder.setDocType(5L);
+            newOrder.setOrderNo(params.getDispatch_no());
         }
-        newOrder.setDocType(Long.parseLong(params.getType()));
-        newOrder.setOrderNo(params.getInv_no());
         newOrder.setUuid(generateUUID(params));
         // 娴佹按鍙凤紙鍞竴锛�
         newOrder.setDefNumber(params.getKopen_id());
@@ -242,7 +307,15 @@
                 BeanUtils.copyProperties(matnr, orderItem);
                 orderItem.setOrderId(newOrder.getId());
                 orderItem.setOrderNo(newOrder.getOrderNo());
-                orderItem.setAnfme(Math.round(item.getInv_qty() * 10000) / 10000.0);
+
+                if (OrderType.ORDER_IN.type.equals(OrderWkType.getTypeVal(params.getType()))) {
+                    // 鍏ュ簱
+                    orderItem.setAnfme(Math.round(item.getInv_qty() * 10000) / 10000.0);
+                } else if (OrderType.ORDER_OUT.type.equals(OrderWkType.getTypeVal(params.getType()))) {
+                    // 鍑哄簱
+                    newOrder.setPakinPakoutStatus(2);
+                    orderItem.setAnfme(Math.round(item.getOrder_qty() * 10000) / 10000.0);
+                }
                 orderItem.setMatnr(matnr.getMatnr());
                 orderItem.setMaktx(matnr.getMaktx());
                 orderItem.setBrand(matnr.getBrand());

--
Gitblit v1.9.1