From f01635b8145c99ca236f1f95af107a91cc2dd71d Mon Sep 17 00:00:00 2001
From: skyouc <creaycat@gmail.com>
Date: 星期一, 05 一月 2026 13:56:43 +0800
Subject: [PATCH] no message

---
 src/main/java/com/zy/api/controller/params/PageRequestParams.java |   19 
 src/main/java/com/zy/api/entity/CallAgvParams.java                |   35 +
 src/main/java/com/zy/api/enums/MatType.java                       |   36 +
 src/main/java/com/zy/api/entity/ReportOrderParam.java             |   18 
 src/main/java/com/zy/api/entity/StockAdjustParams.java            |   27 +
 src/main/java/com/zy/api/enums/LocAreaType.java                   |   24 
 src/main/java/com/zy/api/entity/OrderParams.java                  |   66 ++
 src/main/java/com/zy/api/controller/HWmsApiController.java        |  162 ++++++
 src/main/java/com/zy/api/enums/MatLocType.java                    |   65 ++
 src/main/java/com/zy/asrs/utils/Utils.java                        |   42 +
 src/main/java/com/zy/api/entity/SyncMatParmas.java                |   45 +
 src/main/java/com/zy/api/service/HWmsApiService.java              |   78 ++
 src/main/java/com/zy/api/controller/HmesApiController.java        |   14 
 src/main/java/com/zy/api/entity/dto/XSR.java                      |   77 ++
 src/main/java/com/zy/api/entity/PubOrderParams.java               |   17 
 src/main/resources/application-dev.yml                            |    4 
 src/main/java/com/zy/api/entity/OrderItemsParam.java              |   50 +
 src/main/java/com/zy/api/entity/BaseRequstParam.java              |   15 
 src/main/java/com/zy/api/entity/StockUpOrderParams.java           |   19 
 src/main/java/com/zy/api/enums/OrderWkType.java                   |   45 +
 src/main/java/com/zy/api/enums/OrderType.java                     |   57 ++
 src/main/java/com/zy/api/service/impl/HWmsApiServiceImpl.java     |  539 +++++++++++++++++++
 src/main/java/com/zy/api/entity/ReportOrderParams.java            |   55 ++
 src/main/java/com/zy/asrs/entity/Order.java                       |    3 
 src/main/java/com/zy/api/entity/MatnrsParams.java                 |   43 +
 src/main/java/com/zy/api/entity/OutOrderParams.java               |   34 +
 26 files changed, 1,583 insertions(+), 6 deletions(-)

diff --git a/src/main/java/com/zy/api/controller/HWmsApiController.java b/src/main/java/com/zy/api/controller/HWmsApiController.java
new file mode 100644
index 0000000..eccfd6b
--- /dev/null
+++ b/src/main/java/com/zy/api/controller/HWmsApiController.java
@@ -0,0 +1,162 @@
+package com.zy.api.controller;
+
+
+import com.zy.api.controller.params.PageRequestParams;
+import com.zy.api.entity.PubOrderParams;
+import com.zy.api.entity.ReportOrderParam;
+import com.zy.api.entity.StockAdjustParams;
+import com.zy.api.entity.StockUpOrderParams;
+import com.zy.api.entity.SyncMatParmas;
+import com.zy.api.entity.dto.XSR;
+import com.zy.api.service.HWmsApiService;
+import com.zy.common.web.BaseController;
+
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Objects;
+
+
+
+@Slf4j
+@RestController
+@RequestMapping("/kopen")
+public class HWmsApiController extends BaseController{
+
+    @Autowired
+    private HWmsApiService kopenApiService;
+
+    /**
+     * 涓婃父涓嬪彂娲惧伐鍗�
+     * 
+     * @author Ryan
+     * @date 2025/11/24 15:18
+     * @param params
+     * @return com.core.common.R
+     */
+    @ApiOperation("涓婃灦娲惧伐鍗�")
+    @PostMapping("/sendInDispatch")
+    public XSR receiveOrders(@RequestBody List<PubOrderParams> params) {
+        if (Objects.isNull(params)) {
+            return XSR.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+//        if (Objects.isNull(params.getType())) {
+//            return XSR.error("鍗曟嵁绫诲瀷涓嶈兘涓虹┖锛�");
+//        }
+        return kopenApiService.receiveOrders(params);
+    }
+
+    /**
+     * 涓婃父涓嬪彂闆朵欢鏁版嵁鍙樻洿
+     * 
+     * @author Ryan
+     * @date 2025/11/24 15:19
+     * @param params
+     * @return com.core.common.R
+     */
+    @ApiOperation("闆朵欢淇℃伅鏁版嵁鏇存柊")
+    @PostMapping("/sendPartsMaster")
+    public XSR basMatUpdate(@RequestBody List<SyncMatParmas> params) {
+        if (Objects.isNull(params) || params.isEmpty()) {
+            return XSR.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        return kopenApiService.basMatupdate(params);
+    }
+
+    /**
+     * 涓婃灦娲惧伐鍗曞弽棣�
+     * @author Ryan
+     * @date 2025/11/24 15:20
+     * @param params
+     * @return com.core.common.R
+     */
+    @ApiOperation("涓婃灦娲惧伐鍗曞弽棣�")
+    @PostMapping("/getInDispatchResult")
+    public XSR getInDispatchResult(@RequestBody List<ReportOrderParam> params) {
+        if (Objects.isNull(params)) {
+            return XSR.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+//        if (Objects.isNull(params.getKopen_id()) && Objects.isNull(params.getInv_no()) && Objects.isNull(params.getDispatch_no())) {
+//            return XSR.error("鍙栨秷鏉′欢涓嶈兘涓虹┖锛侊紒");
+//        }
+        return kopenApiService.getInDispatchResult(params, null);
+    }
+
+    /**
+     * 澶囪揣鎸囩ず娲惧伐鍗曚笅鍙�
+     * @author Ryan
+     * @date 2025/11/24 15:21
+     * @param params
+     * @return com.core.common.R
+     */
+    @ApiOperation("澶囪揣鎸囩ず娲惧伐鍗曚笅鍙�")
+    @PostMapping("/sendOutDispatch")
+    public XSR sendStockPrepareDispatch(@RequestBody List<PubOrderParams> params) {
+        if (Objects.isNull(params)) {
+            return XSR.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+//        if (Objects.isNull(params.getDetails()) || params.getDetails().isEmpty()) {
+//            return XSR.error("涓婃姤璁㈠崟鍒楄〃涓嶈兘涓虹┖锛侊紒");
+//        }
+        return kopenApiService.sendOutDispatch(params);
+    }
+
+
+    //  /**
+    //  * 澶囪揣鎸囩ず娲惧伐鍗曞弽棣�
+    //  * @author Ryan
+    //  * @date 2025/11/24 15:22
+    //  * @param params
+    //  * @return com.core.common.R
+    //  */
+    // @ApiOperation("澶囪揣鎸囩ず娲惧伐鍗曞弽棣�")
+    // @PostMapping("/getOutDispatchResult")
+    // public R getOutDispatchResult(@RequestBody ReportOrderParam params) {
+    //     if (Objects.isNull(params)) {
+    //         return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+    //     }
+    //     if (Objects.isNull(params.getKopen_id()) && Objects.isNull(params.getInv_no()) && Objects.isNull(params.getDispatch_no())) {
+    //         return R.error("鍙栨秷鏉′欢涓嶈兘涓虹┖锛侊紒");
+    //     }
+    //     return kopenApiService.getOutDispatchResult(params);
+    // }
+
+
+    /**
+     * 澶囪揣鍗曚笅鍙�
+     * @author Ryan
+     * @date 2025/11/24 15:21
+     * @param params
+     * @return com.core.common.R
+     */
+    @ApiOperation("澶囪揣鍗曚笅鍙�")
+    @PostMapping("/getOutDetails")
+    public XSR getOutDetails(@RequestBody List<StockUpOrderParams> params) {
+        if (Objects.isNull(params)) {
+            return XSR.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        return kopenApiService.getOutDetails(params);
+    }
+
+
+    /**
+     * 鏌ヨWMS搴撳瓨淇℃伅
+     * @author Ryan
+     * @date 2025/11/24 15:22
+     * @param params
+     * @return com.core.common.R
+     */
+    @ApiOperation("鏌ヨWMS搴撳瓨淇℃伅")
+    @PostMapping("/getStockInfo")
+    public XSR getStockInfo(@RequestBody PageRequestParams params) {
+        return kopenApiService.getStockInfo(params);
+    }
+
+}
diff --git a/src/main/java/com/zy/api/controller/HmesApiController.java b/src/main/java/com/zy/api/controller/HmesApiController.java
new file mode 100644
index 0000000..f79a237
--- /dev/null
+++ b/src/main/java/com/zy/api/controller/HmesApiController.java
@@ -0,0 +1,14 @@
+package com.zy.api.controller;
+
+
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Api(value = "HMES瀵规帴")
+@RestController
+@RequestMapping("/api")
+public class HmesApiController {
+
+
+}
diff --git a/src/main/java/com/zy/api/controller/params/PageRequestParams.java b/src/main/java/com/zy/api/controller/params/PageRequestParams.java
new file mode 100644
index 0000000..6723f32
--- /dev/null
+++ b/src/main/java/com/zy/api/controller/params/PageRequestParams.java
@@ -0,0 +1,19 @@
+package com.zy.api.controller.params;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@Accessors(chain = true)
+@ApiModel("鍒嗛〉璇锋眰鍙傛暟")
+public class PageRequestParams {
+
+    private Integer curr = 1;
+
+    private Integer limit = 50;
+
+    private String pro_komcode;
+
+    private String pro_id;
+}
diff --git a/src/main/java/com/zy/api/entity/BaseRequstParam.java b/src/main/java/com/zy/api/entity/BaseRequstParam.java
new file mode 100644
index 0000000..acd8d03
--- /dev/null
+++ b/src/main/java/com/zy/api/entity/BaseRequstParam.java
@@ -0,0 +1,15 @@
+package com.zy.api.entity;
+
+import java.util.Map;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@ApiModel("鍩虹璇锋眰鍙傛暟")
+@Accessors(chain = true)
+public class BaseRequstParam {
+
+    private Map<String, Object> root;
+}
diff --git a/src/main/java/com/zy/api/entity/CallAgvParams.java b/src/main/java/com/zy/api/entity/CallAgvParams.java
new file mode 100644
index 0000000..59b5fd1
--- /dev/null
+++ b/src/main/java/com/zy/api/entity/CallAgvParams.java
@@ -0,0 +1,35 @@
+package com.zy.api.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "CallAgvParams", description = "AGV鎼繍鍙傛暟")
+public class CallAgvParams implements Serializable {
+
+    @ApiModelProperty("鍛煎彨绫诲瀷锛氬嚭搴擄細out, 鍏ュ簱锛歩n")
+    private String type;
+
+    @ApiModelProperty("鍘熷簱浣�")
+    private String orgLoc;
+
+    @ApiModelProperty("鐩爣绔欑偣")
+    private String tarSite;
+
+    @ApiModelProperty("鍘熺珯鐐�")
+    private String orgSite;
+
+    @ApiModelProperty("鐩爣搴撲綅")
+    private String tarLoc;
+
+    @ApiModelProperty("鎼繍鐘舵��")
+    private String status;
+
+    @ApiModelProperty("浠诲姟鍙�")
+    private String wrkNo;
+}
diff --git a/src/main/java/com/zy/api/entity/MatnrsParams.java b/src/main/java/com/zy/api/entity/MatnrsParams.java
new file mode 100644
index 0000000..c1e72ec
--- /dev/null
+++ b/src/main/java/com/zy/api/entity/MatnrsParams.java
@@ -0,0 +1,43 @@
+package com.zy.api.entity;
+
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "MatnrsParams", description = "鐗╂枡淇℃伅")
+public class MatnrsParams {
+
+    @ApiModelProperty("鍗曟嵁绫诲瀷")
+    private String pro_komcode;
+
+    @ApiModelProperty("宸ュ崟绫诲瀷")
+    private String pro_id;
+
+    @ApiModelProperty("璁㈠崟鍙�")
+    private String company_id;
+
+    @ApiModelProperty("璁㈠崟鏁伴噺")
+    private Double pro_name;
+
+    @ApiModelProperty("鎿嶄綔浜�")
+    private String pro_size;
+
+    @ApiModelProperty("閲嶉噺")
+    private String pro_wet;
+
+    @ApiModelProperty("闆朵欢绫诲瀷")
+    private String pro_type;
+
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private String update_time;
+}
diff --git a/src/main/java/com/zy/api/entity/OrderItemsParam.java b/src/main/java/com/zy/api/entity/OrderItemsParam.java
new file mode 100644
index 0000000..30f3613
--- /dev/null
+++ b/src/main/java/com/zy/api/entity/OrderItemsParam.java
@@ -0,0 +1,50 @@
+package com.zy.api.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import java.io.Serializable;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "OrderItemsParam", description = "璁㈠崟鏄庣粏鍙傛暟")
+public class OrderItemsParam implements Serializable {
+
+    @ApiModelProperty("BS Code")
+    private String total_serial;
+
+    @ApiModelProperty("鐩爣搴撳尯")
+    private String target_location;
+
+    @ApiModelProperty("闆朵欢绫诲瀷")
+    private String pro_type;
+
+    @ApiModelProperty("闆朵欢浠g爜")
+    private String pro_komcode;
+
+    @ApiModelProperty("渚涘簲鍟嗙紪鐮�")
+    private String pro_id;
+
+    @ApiModelProperty("鍏ュ簱閫氱煡鏁伴噺")
+    private Double inv_qty;
+
+    @ApiModelProperty("鎸囩ず鎷h揣璁㈠崟鏁伴噺")
+    private Integer order_qty;
+
+    @ApiModelProperty("鍘熶笂鏋舵淳宸ユ暟閲�")
+    private Integer old_qty;
+
+    @ApiModelProperty("鍙樻洿鏁伴噺")
+    private Integer new_qty;
+
+    @ApiModelProperty("鎹嗙粦/鍙枡/鏁伴噺鏁伴噺")
+    private Integer pick_qty;
+
+    @ApiModelProperty("鎹熸孩鏁伴噺")
+    private Integer bsby_qty;
+
+    @ApiModelProperty("鎵樼洏缂栧彿")
+    private String location_no;
+
+}
diff --git a/src/main/java/com/zy/api/entity/OrderParams.java b/src/main/java/com/zy/api/entity/OrderParams.java
new file mode 100644
index 0000000..e09e9a9
--- /dev/null
+++ b/src/main/java/com/zy/api/entity/OrderParams.java
@@ -0,0 +1,66 @@
+package com.zy.api.entity;
+
+import java.io.Serializable;
+
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "OrderParams", description = "鍗曟嵁淇℃伅")
+public class OrderParams implements Serializable {
+
+    @ApiModelProperty("娴佹按鍙凤紙鍞竴锛�")
+    private String kopen_id;
+
+    @ApiModelProperty("娲惧伐鍗曞彿")
+    private String dispatch_no;
+
+    @ApiModelProperty("鍏徃ID")
+    private String company_id;
+
+    @ApiModelProperty("鍏ュ簱绫诲瀷 1: 閲囪喘鍏ュ簱锛�2: 璋冩嫧鍏ュ簱锛�3: 閿�鍞��璐у叆搴擄紝4: 濂楀寘鍏ュ簱, 5:SO, 6:EO, 7:鍑哄簱")
+    private String type;
+
+    @ApiModelProperty("绠卞彿")
+    private String pm_tktid;
+
+    @ApiModelProperty("鍏ュ簱閫氱煡鍗曞彿")
+    private String inv_no;
+
+    @ApiModelProperty("鐩爣搴撳尯")
+    private String target_location;
+
+    @ApiModelProperty("婧愬簱鍖�")
+    private String source_location;
+
+
+    @ApiModelProperty("鎷h揣鍗曞彿")
+    private String pick_no;
+
+    @ApiModelProperty("璁㈠崟鍙�")
+    private String order_no;
+
+
+    @ApiModelProperty("瀹㈡埛ID")
+    private String cus_id;
+
+
+    @ApiModelProperty("瀹㈡埛鍦板潃")
+    private String cus_address;
+
+
+    @ApiModelProperty("WMS ID")
+    private String wms_id;
+
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private String update_time;
+}
diff --git a/src/main/java/com/zy/api/entity/OutOrderParams.java b/src/main/java/com/zy/api/entity/OutOrderParams.java
new file mode 100644
index 0000000..32aed18
--- /dev/null
+++ b/src/main/java/com/zy/api/entity/OutOrderParams.java
@@ -0,0 +1,34 @@
+package com.zy.api.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "OutOrderParams", description = "澶囪揣璁㈠崟鍙傛暟")
+public class OutOrderParams implements Serializable {
+
+    @ApiModelProperty("鏄庣粏澶囪揣鍗曞彿")
+    private String pick_no;
+
+    @ApiModelProperty("璁㈠崟鍙�")
+    private String order_no;
+
+    @ApiModelProperty("瀹㈡埛")
+    private String cus_id;
+
+    @ApiModelProperty("瀹㈡埛鍦板潃")
+    private String cus_address;
+
+    @ApiModelProperty("涓氬姟绫诲瀷")
+    private String type;
+
+    @ApiModelProperty("璁㈠崟鏄庣粏")
+    private List<OrderItemsParam> partList;
+
+
+}
diff --git a/src/main/java/com/zy/api/entity/PubOrderParams.java b/src/main/java/com/zy/api/entity/PubOrderParams.java
new file mode 100644
index 0000000..2f90cdb
--- /dev/null
+++ b/src/main/java/com/zy/api/entity/PubOrderParams.java
@@ -0,0 +1,17 @@
+package com.zy.api.entity;
+
+import java.util.List;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "PubOrderParams", description = "鍙戝竷璁㈠崟淇℃伅")
+public class PubOrderParams extends OrderParams {
+
+    @ApiModelProperty("鍏ュ簱鐗╂枡鍒楄〃")
+    List<OrderItemsParam> details;
+}
diff --git a/src/main/java/com/zy/api/entity/ReportOrderParam.java b/src/main/java/com/zy/api/entity/ReportOrderParam.java
new file mode 100644
index 0000000..139cdce
--- /dev/null
+++ b/src/main/java/com/zy/api/entity/ReportOrderParam.java
@@ -0,0 +1,18 @@
+package com.zy.api.entity;
+
+import java.util.List;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "ReportOrderParam", description = "涓婃姤璁㈠崟淇℃伅")
+public class ReportOrderParam extends OrderParams{
+
+    @ApiModelProperty("涓婃姤璁㈠崟鍒楄〃")
+    List<ReportOrderParams> details;
+
+}
diff --git a/src/main/java/com/zy/api/entity/ReportOrderParams.java b/src/main/java/com/zy/api/entity/ReportOrderParams.java
new file mode 100644
index 0000000..99585b2
--- /dev/null
+++ b/src/main/java/com/zy/api/entity/ReportOrderParams.java
@@ -0,0 +1,55 @@
+package com.zy.api.entity;
+
+import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@Accessors(chain = true)
+@ApiModel("涓婃姤璁㈠崟鍙傛暟")
+public class ReportOrderParams implements Serializable {
+
+        @ApiModelProperty("BS Code")
+        private String total_serial;
+
+        @ApiModelProperty("浜у搧绫诲瀷")
+        private String pro_type;
+
+        @ApiModelProperty("闆朵欢浠g爜")
+        private String pro_komcode;
+
+        @ApiModelProperty("渚涘簲鍟咺D")
+        private String pro_id;
+
+        @ApiModelProperty("瀹瑰櫒缂栫爜")
+        private String location_no;
+
+        @ApiModelProperty("璐т綅绫诲瀷")
+        private String location_type;
+
+        @ApiModelProperty("涓婃灦鏃ユ湡")
+        private String sj_date;
+
+        @ApiModelProperty("涓婃灦浜�")
+        private String sj_emp;
+
+        @ApiModelProperty("涓婃灦鏁伴噺")
+        private Integer pick_qty;
+
+        @ApiModelProperty("鐮存崯鏁伴噺")
+        private Integer damage_qty;
+        
+        @ApiModelProperty("宸紓鏁伴噺")
+        private Integer diff_qty;
+
+        @ApiModelProperty("鍘熶笂鏋舵淳宸ユ暟閲�")
+        private Integer old_qty;
+
+        @ApiModelProperty("鍙樻洿鏁伴噺")
+        private Integer new_qty;
+
+
+}
diff --git a/src/main/java/com/zy/api/entity/StockAdjustParams.java b/src/main/java/com/zy/api/entity/StockAdjustParams.java
new file mode 100644
index 0000000..5b3ae43
--- /dev/null
+++ b/src/main/java/com/zy/api/entity/StockAdjustParams.java
@@ -0,0 +1,27 @@
+package com.zy.api.entity;
+
+import java.util.List;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "StockAdjustParams", description = "闆朵欢鎹熸孩鍗曞弬鏁�")
+public class StockAdjustParams extends OrderParams {
+
+    @ApiModelProperty("璋冩暣鍘熷洜")
+    private String reason;
+
+    @ApiModelProperty("璋冩暣鍘熷洜鍚嶇О")
+    private String reason_name;
+
+    @ApiModelProperty("璋冩暣鍗曠紪鍙�")
+    private String bsby_no;
+
+    @ApiModelProperty("璋冩暣鍗曟槑缁嗗垪琛�")
+    List<OrderItemsParam> details;
+
+}
diff --git a/src/main/java/com/zy/api/entity/StockUpOrderParams.java b/src/main/java/com/zy/api/entity/StockUpOrderParams.java
new file mode 100644
index 0000000..6243370
--- /dev/null
+++ b/src/main/java/com/zy/api/entity/StockUpOrderParams.java
@@ -0,0 +1,19 @@
+package com.zy.api.entity;
+
+import java.util.List;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "StockUpOrderParams", description = "澶囪揣璁㈠崟鍙傛暟")
+public class StockUpOrderParams extends OrderParams{
+
+
+    @ApiModelProperty("璁㈠崟鏄庣粏")
+    private List<OutOrderParams> details;
+
+}
diff --git a/src/main/java/com/zy/api/entity/SyncMatParmas.java b/src/main/java/com/zy/api/entity/SyncMatParmas.java
new file mode 100644
index 0000000..7de24a6
--- /dev/null
+++ b/src/main/java/com/zy/api/entity/SyncMatParmas.java
@@ -0,0 +1,45 @@
+package com.zy.api.entity;
+
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "SyncMatParmas", description = "鐗╂枡鍚屾鍙傛暟")
+public class SyncMatParmas implements Serializable {
+
+
+    @ApiModelProperty("闆朵欢绫诲瀷")
+    private String pro_type;
+
+    @ApiModelProperty("闆朵欢浠g爜")
+    private String pro_komcode;
+
+    @ApiModelProperty("渚涘簲鍟嗙紪鐮�")
+    private String pro_id;
+
+    @ApiModelProperty("鍏ュ簱閫氱煡鏁伴噺")
+    private Double inv_qty;
+
+    @ApiModelProperty("鍏徃ID")
+    private String company_id;
+
+    @ApiModelProperty("闆朵欢鍚嶇О")
+    private String pro_name;
+
+    @ApiModelProperty("灏哄")
+    private String pro_size;
+
+    @ApiModelProperty("閲嶉噺")
+    private String pro_wet;
+
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    private String update_time;
+
+}
diff --git a/src/main/java/com/zy/api/entity/dto/XSR.java b/src/main/java/com/zy/api/entity/dto/XSR.java
new file mode 100644
index 0000000..842a586
--- /dev/null
+++ b/src/main/java/com/zy/api/entity/dto/XSR.java
@@ -0,0 +1,77 @@
+package com.zy.api.entity.dto;
+
+import java.sql.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "XSR", description = "鍩虹鍝嶅簲")
+public class XSR<T> {
+    private static final String SUCCESS_CODE = "200";
+    private static final String FAIL_CODE = "500";
+
+    private String code;
+
+    private String message;
+
+    private Boolean success;
+
+    private String returnMessage;
+
+    private T result;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date timestamp;
+
+    public XSR() {
+        this.timestamp = new Date(System.currentTimeMillis());
+    }
+
+    public static <T> XSR<T> ok() {
+        return new XSR<T>()
+                .setCode(SUCCESS_CODE)
+                .setSuccess(true)
+                .setMessage("鎿嶄綔鎴愬姛")
+                .setReturnMessage("鎿嶄綔鎴愬姛");
+    }
+
+    public static <T> XSR<T> ok(T data) {
+        return new XSR<T>()
+                .setCode(SUCCESS_CODE)
+                .setSuccess(true)
+                .setMessage("鎿嶄綔鎴愬姛")
+                .setReturnMessage("鎿嶄綔鎴愬姛")
+                .setResult(data);
+    }
+
+    public static <T> XSR<T> ok(T data, String message) {
+        return new XSR<T>()
+                .setCode(SUCCESS_CODE)
+                .setSuccess(true)
+                .setMessage(message)
+                .setReturnMessage(message)
+                .setResult(data);
+    }
+
+    public static <T> XSR<T> error(String message) {
+        return new XSR<T>()
+                .setCode(FAIL_CODE)
+                .setSuccess(false)
+                .setMessage(message)
+                .setReturnMessage(message);
+    }
+
+    public static <T> XSR<T> error(String code, String message) {
+        return new XSR<T>()
+                .setCode(code)
+                .setSuccess(false)
+                .setMessage(message)
+                .setReturnMessage(message);
+    }
+}
diff --git a/src/main/java/com/zy/api/enums/LocAreaType.java b/src/main/java/com/zy/api/enums/LocAreaType.java
new file mode 100644
index 0000000..3ac462b
--- /dev/null
+++ b/src/main/java/com/zy/api/enums/LocAreaType.java
@@ -0,0 +1,24 @@
+package com.zy.api.enums;
+/**
+ * 搴撳尯绫诲瀷
+ */
+public enum LocAreaType {
+
+
+    /** 澶у簱鍖� */
+     AUTOMATED("1", "绔嬪簱"),
+    /** 涓簱鍖� */
+    SO_HOLDING("2", "SO绛夊緟鍖�"),
+    /** 灏忎欢搴撳尯 */
+    EO_HOLDING("3", "EO绛夊緟鍖�");
+
+    public String type;
+
+    public String desc;
+
+    LocAreaType(String type, String desc) {
+        this.type = type;
+        this.desc = desc;
+    }
+
+}
diff --git a/src/main/java/com/zy/api/enums/MatLocType.java b/src/main/java/com/zy/api/enums/MatLocType.java
new file mode 100644
index 0000000..714ac23
--- /dev/null
+++ b/src/main/java/com/zy/api/enums/MatLocType.java
@@ -0,0 +1,65 @@
+package com.zy.api.enums;
+
+/**
+ * 鐗╂枡鎵�灞炲簱浣嶇被鍨�
+ * @author Ryan
+ * @date 2025/12/6 10:41
+ * @return null
+ */
+public enum MatLocType {
+
+    /** 灏忎欢 */
+    AUTOMATED("12", "灏忎欢"),
+    /** 涓欢 */
+    SO_HOLDING("13", "涓欢"),
+    /** 澶т欢 */
+    EO_HOLDING("14", "婊よ姱");
+
+    public String type;
+
+    public String desc;
+
+    MatLocType(String type, String desc) {
+        this.type = type;
+        this.desc = desc;
+    }
+
+    public static String getTagName(String type) {
+        if (type.equals(MatLocType.AUTOMATED.type)) {
+            return MatLocType.AUTOMATED.desc;
+        } else if (type.equals(MatLocType.SO_HOLDING.type)) {
+            return MatLocType.SO_HOLDING.desc;
+        } else if (type.equals(MatLocType.EO_HOLDING.type)) {
+            return MatLocType.EO_HOLDING.desc;
+        } else {
+            return null;
+        }
+    }
+
+
+    public static Long getTag(String type) {
+        if (type.equals(MatType.LARGE.type)) {
+            return Long.parseLong(MatLocType.AUTOMATED.type);
+        } else if (type.equals(MatType.MIDDEL.type)) {
+            return Long.parseLong(MatLocType.SO_HOLDING.type);
+        } else if (type.equals(MatType.SMALL.type)) {
+            return Long.parseLong(MatLocType.EO_HOLDING.type);
+        } else {
+            return null;
+        }
+    }
+
+
+    
+    public static String getMatTag(String type) {
+        if (type.equals(MatLocType.AUTOMATED.type)) {
+            return MatType.LARGE.type;
+        } else if (type.equals(MatLocType.SO_HOLDING.type)) {
+            return MatType.MIDDEL.type;
+        } else if (type.equals(MatLocType.EO_HOLDING.type)) {
+            return MatType.SMALL.type;
+        } else {
+            return null;
+        }
+    }
+}
diff --git a/src/main/java/com/zy/api/enums/MatType.java b/src/main/java/com/zy/api/enums/MatType.java
new file mode 100644
index 0000000..0b4cfac
--- /dev/null
+++ b/src/main/java/com/zy/api/enums/MatType.java
@@ -0,0 +1,36 @@
+package com.zy.api.enums;
+
+/**
+ * 鐗╂枡绫诲瀷
+ */
+public enum MatType {
+
+    /** 婊よ姱 */
+    LARGE("1", "婊よ姱"),
+    /** 涓欢 */
+    MIDDEL("2", "涓欢"),
+    /** 灏忎欢 */
+    SMALL("3", "灏忎欢");
+
+    public String type;
+
+    public String desc;
+
+    MatType(String type, String desc) {
+        this.type = type;
+        this.desc = desc;
+    }
+
+    public static Long getTag(String type) {
+        if (type.equals(MatType.LARGE.type)) {
+            return Long.parseLong(MatLocType.AUTOMATED.type);
+        } else if (type.equals(MatType.MIDDEL.type)) {
+            return Long.parseLong(MatLocType.SO_HOLDING.type);
+        } else if (type.equals(MatType.SMALL.type)) {
+            return Long.parseLong(MatLocType.EO_HOLDING.type);
+        } else {
+            return null;
+        }
+    }
+
+}
diff --git a/src/main/java/com/zy/api/enums/OrderType.java b/src/main/java/com/zy/api/enums/OrderType.java
new file mode 100644
index 0000000..0216467
--- /dev/null
+++ b/src/main/java/com/zy/api/enums/OrderType.java
@@ -0,0 +1,57 @@
+package com.zy.api.enums;
+
+/**
+ * @author Ryan
+ * @version 1.0
+ * @title PurchaseType
+ * @description
+ * @create 2025/3/5 15:54
+ */
+public enum OrderType {
+    //璁㈠崟绫诲瀷
+    ORDER_OUT("out", "鍑哄簱鍗�"),
+    ORDER_IN("in", "鍏ュ簱鍗�"),
+    ORDER_TRANSFER("transfer", "璋冩嫈鍗�"),
+    ORDER_REVISE("revise", "搴撳瓨璋冩暣"),
+    ORDER_CHECK("check", "鐩樼偣鍗�");
+
+
+    OrderType(String type, String desc) {
+        this.type = type;
+        this.desc = desc;
+    }
+
+    public String type;
+    public String desc;
+
+    public static String getTypeVal(String desc) {
+        if (desc.equals(OrderType.ORDER_IN.desc)) {
+            return OrderType.ORDER_IN.type;
+        } else if (desc.equals(OrderType.ORDER_OUT.desc)) {
+            return OrderType.ORDER_OUT.type;
+        } else if (desc.equals(OrderType.ORDER_CHECK.desc)) {
+            return OrderType.ORDER_CHECK.type;
+        } else if (desc.equals(OrderType.ORDER_TRANSFER.desc)) {
+            return OrderType.ORDER_TRANSFER.type;
+        } else if (desc.equals(OrderType.ORDER_REVISE.desc)) {
+            return OrderType.ORDER_REVISE.type;
+        }
+        return null;
+    }
+
+    public static String getValType(String type) {
+        if (type.equals(OrderType.ORDER_IN.type)) {
+            return OrderType.ORDER_IN.desc;
+        } else if (type.equals(OrderType.ORDER_OUT.type)) {
+            return OrderType.ORDER_OUT.desc;
+        } else if (type.equals(OrderType.ORDER_CHECK.type)) {
+            return OrderType.ORDER_CHECK.desc;
+        } else if (type.equals(OrderType.ORDER_TRANSFER.type)) {
+            return OrderType.ORDER_TRANSFER.desc;
+        } else if (type.equals(OrderType.ORDER_REVISE.type)) {
+            return OrderType.ORDER_REVISE.desc;
+        }
+        return null;
+    }
+
+}
diff --git a/src/main/java/com/zy/api/enums/OrderWkType.java b/src/main/java/com/zy/api/enums/OrderWkType.java
new file mode 100644
index 0000000..a656e3d
--- /dev/null
+++ b/src/main/java/com/zy/api/enums/OrderWkType.java
@@ -0,0 +1,45 @@
+package com.zy.api.enums;
+
+
+public enum OrderWkType {
+
+    // 璁㈠崟绫诲瀷
+    ORDER_WK_PUR_IN("0", "閲囪喘鍏ュ簱"),
+    ORDER_WK_TRANSFER_IN("1", "璋冩嫈鍏ュ簱"),
+    ORDER_WK_SALE_IN("2", "瀹㈡埛閫�璐�"),
+    ORDER_WK_BAG_IN("5", "绱㈣禂鍏ュ簱"),
+    ORDER_WK_SUPLUS_IN("7", "鎶ユ孩鍏ュ簱"),
+    ORDER_WK_PRO_UPDATE_IN("8", "浠跺彿鍙樻洿鍏ュ簱"),
+    ORDER_WK_MEGER_IN("K", "缁勫悎鎷嗛浂鍏ュ簱"),
+    ORDER_WK_ORDER_OUT_EO("11", "澶囪揣鎸囩ず娲惧伐鍗曪紙EO锛�"),
+    ORDER_WK_ORDER_OUT_SO("12", "澶囪揣鎸囩ず娲惧伐鍗曪紙SO锛�"),
+    ORDER_WK_ORDER_OUT("13", "澶囪揣鍗�");
+
+    OrderWkType(String val, String desc) {
+        this.val = val;
+        this.desc = desc;
+    }
+
+    public String val;
+    public String desc;
+
+    public static String getTypeVal(String val) {
+        if (val.equals(OrderWkType.ORDER_WK_PUR_IN.val)
+                || val.equals(OrderWkType.ORDER_WK_SUPLUS_IN.val)
+                || val.equals(OrderWkType.ORDER_WK_MEGER_IN.val)
+                || val.equals(OrderWkType.ORDER_WK_PRO_UPDATE_IN.val)) {
+            return OrderType.ORDER_IN.type;
+        } else if (val.equals(OrderWkType.ORDER_WK_TRANSFER_IN.val)) {
+            return OrderType.ORDER_IN.type;
+        } else if (val.equals(OrderWkType.ORDER_WK_SALE_IN.val)) {
+            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_EO.val)  || val.equals(OrderWkType.ORDER_WK_ORDER_OUT_SO.val)  || val.equals(OrderWkType.ORDER_WK_ORDER_OUT.val)) {
+            return OrderType.ORDER_OUT.type;
+        } else {
+            return null;
+        }
+    }
+
+}
diff --git a/src/main/java/com/zy/api/service/HWmsApiService.java b/src/main/java/com/zy/api/service/HWmsApiService.java
new file mode 100644
index 0000000..5733310
--- /dev/null
+++ b/src/main/java/com/zy/api/service/HWmsApiService.java
@@ -0,0 +1,78 @@
+package com.zy.api.service;
+
+import java.util.List;
+
+import com.zy.api.controller.params.PageRequestParams;
+import com.zy.api.entity.PubOrderParams;
+import com.zy.api.entity.ReportOrderParam;
+import com.zy.api.entity.StockAdjustParams;
+import com.zy.api.entity.StockUpOrderParams;
+import com.zy.api.entity.SyncMatParmas;
+import com.zy.api.entity.dto.XSR;
+import com.zy.asrs.entity.Order;
+
+public interface HWmsApiService {
+
+
+    /**
+     * 涓婃灦娲惧伐鍗曚笅鍙�
+     * @author Ryan
+     * @date 2025/11/24 14:42
+     * @param params
+     * @return com.core.common.R
+     */
+    XSR receiveOrders(List<PubOrderParams> params);
+
+    /**
+     * 鍩虹闆朵欢鍙樻洿
+     * @author Ryan
+     * @date 2025/11/24 15:04
+     * @param matnrs
+     * @return com.core.common.R
+     */
+    XSR basMatupdate(List<SyncMatParmas> matnrs);
+
+
+    /**
+     * 鏂板鎴栦慨鏀瑰崟鎹俊鎭�
+     * @author Ryan
+     * @date 2025/11/24 15:33
+     */
+    void addOrUpdateOrders(PubOrderParams params, String type) ;
+
+    /**
+     * 涓婃灦娲惧伐鍗曞弽棣�
+     *
+     * @param params
+     * @param order
+     * @return
+     */
+    XSR getInDispatchResult(List<ReportOrderParam> params, Order order);
+
+    /**
+     * 澶囪揣鎸囩ず娲惧伐鍗曚笅鍙�
+     * @param params
+     * @return
+     */
+    XSR sendOutDispatch(List<PubOrderParams> params);
+
+    /**
+     * 澶囪揣鍗曚笅鍙�
+     * @author Ryan
+     * @date 2025/11/24 15:40
+     * @param params
+     * @return com.core.common.R
+     */
+    XSR getOutDetails(List<StockUpOrderParams> params);
+
+    /**
+     * 鏌ヨWMS搴撳瓨淇℃伅
+     * @author Ryan
+     * @date 2025/11/24 15:22
+     * @param params
+     * @return com.core.common.R
+     */
+    XSR getStockInfo(PageRequestParams params);
+
+
+}
diff --git a/src/main/java/com/zy/api/service/impl/HWmsApiServiceImpl.java b/src/main/java/com/zy/api/service/impl/HWmsApiServiceImpl.java
new file mode 100644
index 0000000..f709dd5
--- /dev/null
+++ b/src/main/java/com/zy/api/service/impl/HWmsApiServiceImpl.java
@@ -0,0 +1,539 @@
+package com.zy.api.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.common.SnowflakeIdWorker;
+import com.core.exception.CoolException;
+import com.zy.api.controller.params.PageRequestParams;
+import com.zy.api.entity.OrderItemsParam;
+import com.zy.api.entity.OrderParams;
+import com.zy.api.entity.OutOrderParams;
+import com.zy.api.entity.PubOrderParams;
+import com.zy.api.entity.ReportOrderParam;
+import com.zy.api.entity.StockUpOrderParams;
+import com.zy.api.entity.SyncMatParmas;
+import com.zy.api.entity.dto.XSR;
+import com.zy.api.enums.MatLocType;
+import com.zy.api.enums.OrderType;
+import com.zy.api.enums.OrderWkType;
+import com.zy.api.service.HWmsApiService;
+import com.zy.asrs.entity.LocDetl;
+import com.zy.asrs.entity.Mat;
+import com.zy.asrs.entity.Order;
+import com.zy.asrs.entity.OrderDetl;
+import com.zy.asrs.enums.CommonEnum;
+import com.zy.asrs.service.LocDetlService;
+import com.zy.asrs.service.MatService;
+import com.zy.asrs.service.OrderDetlService;
+import com.zy.asrs.service.OrderService;
+
+import com.zy.asrs.utils.Utils;
+import com.zy.common.utils.HttpHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+
+@Slf4j
+@Service("kopenApiServiceImpl")
+public class HWmsApiServiceImpl implements HWmsApiService {
+
+    @Autowired
+    private OrderService orderService;
+    @Autowired
+    private OrderDetlService orderDetlService;
+    @Autowired
+    private MatService matService;
+    @Autowired
+    private LocDetlService locDetlService;
+    @Autowired
+    private SnowflakeIdWorker snowflakeIdWorker;
+//    @Value("${kopen.url}")
+    private String url;
+//    @Value("${kopen.port}")
+    private String port;
+//    @Value("${kopen.prefix}")
+    private String prefix;
+
+
+    /**
+     * 鎺ユ敹涓嬪彂璁㈠崟淇℃伅
+     *
+     * @param orderParams
+     * @return com.core.common.R
+     * @author Ryan
+     * @date 2025/11/24 14:49
+     */
+    @Override
+    public XSR receiveOrders(List<PubOrderParams> orderParams) {
+        orderParams.forEach(params -> {
+            if (params.getType().equals(OrderWkType.getTypeVal(params.getType()))) {
+                throw new CoolException("褰撳墠绫诲瀷涓嶆槸涓婃灦娲惧伐鍗曪紒锛�");
+            }
+            addOrUpdateOrders(params, "add");
+        });
+
+        return XSR.ok("鍗曟嵁涓嬪彂鎴愬姛锛侊紒");
+    }
+
+    /**
+     * 涓婃灦娲惧伐鍗曞弽棣�
+     *
+     * @author Ryan
+     * @date 2025/11/24 15:33
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public XSR getInDispatchResult(List<ReportOrderParam> params, Order order) {
+        if (Objects.isNull(params)) {
+            return XSR.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        String response = null;
+
+        try {
+            response = new HttpHandler.Builder()
+                    .setUri(url + ":" + port)
+                    .setPath(prefix + "/getInDispatchResult")
+                    .setJson(JSONObject.toJSONString(params))
+                    .build()
+                    .doPost();
+            if (Objects.isNull(response) || response.trim().isEmpty()) {
+                return XSR.error("澶栫綉鎺ュ彛鏃犲搷搴旓紒锛�");
+            }
+            JSONObject jsonObject = JSONObject.parseObject(response);
+            Integer code = jsonObject.getInteger("code");
+            if (!Objects.isNull(code) && code.equals(200)) {
+                if (!Objects.isNull(order)) {
+                    order.setReportOnce(5);
+                    orderService.updateById(order);
+                }
+                return XSR.ok("鍏ュ簱鍗曚笂鎶ュ畬鎴愶紒锛�");
+            } else {
+                if (!Objects.isNull(order)) {
+                    int reportOnce = order.getReportOnce();
+                    reportOnce ++;
+                    order.setReportOnce(reportOnce);
+                    orderService.updateById(order);
+                }
+                String msg = jsonObject.getString("message");
+                return XSR.error(Objects.isNull(msg) ? "涓婃姤澶辫触锛侊紒" : msg);
+            }
+        } catch (Exception e) {
+            if (!Objects.isNull(order)) {
+                int reportOnce = order.getReportOnce();
+                reportOnce ++;
+                order.setReportOnce(reportOnce);
+                orderService.updateById(order);
+            }
+            log.error(e.getMessage(), e);
+            return XSR.error(e.getMessage());
+        }
+    }
+
+    /**
+     * 鑾峰彇鑷畾涔夎姹傚ご
+     * @author Ryan
+     * @date 2025/12/29 9:11
+     * @return java.util.Map<java.lang.String,java.lang.Object>
+     */
+    private Map<String, Object> getHeaderParam() {
+        Map<String, Object> headerParam = new HashMap<>();
+//        headerParam.put("accept", "*/*");
+//        headerParam.put("connection", "Keep-Alive");
+        //璁剧疆璇锋眰杩炴帴鐨凾oken
+        headerParam.put("api_key", "WMS");
+        headerParam.put("charset", "UTF-8");
+        headerParam.put("timestamp", new Date());
+        headerParam.put("format", "xml");
+        headerParam.put("signature", "c56ced444ed772098ffeb59537bbfa59");
+
+        return headerParam;
+    }
+
+    /* */
+
+    /**
+     * 澶囪揣鎸囩ず娲惧伐鍗曚笅鍙�
+     *
+     * @param pubOrderParams
+     * @return com.core.common.R
+     * @author Ryan
+     * @date 2025/11/24 15:21
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public XSR sendOutDispatch(List<PubOrderParams> pubOrderParams) {
+        if (Objects.isNull(pubOrderParams) || pubOrderParams.isEmpty()) {
+            return XSR.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        pubOrderParams.forEach(params -> {
+            // 鏍¢獙鍙傛暟
+            if (Objects.isNull(params.getDispatch_no())) {
+                throw new CoolException("娲惧伐鍗曠紪鍙蜂笉鑳戒负绌猴紒锛�");
+            }
+            if (Objects.isNull(params.getKopen_id())) {
+                throw new CoolException("娴佹按鍙蜂笉鑳戒负绌猴紒锛�");
+            }
+            if (Objects.isNull(params.getCompany_id())) {
+                throw new CoolException("鍏徃ID涓嶈兘涓虹┖锛侊紒");
+            }
+
+            addOrUpdateOrders(params, "add");
+        });
+
+        return XSR.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);
+    // }
+
+    // }
+
+    /**
+     * 鍩虹闆朵欢鍙樻洿
+     *
+     * @param params
+     * @return com.core.common.R
+     * @author Ryan
+     * @date 2025/11/24 15:05
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public synchronized XSR basMatupdate(List<SyncMatParmas> params) {
+        if (Objects.isNull(params) || params.isEmpty()) {
+            return XSR.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        params.forEach(mats -> {
+            if (Objects.isNull(mats)) {
+                throw new CoolException("鐗╂枡缂栫爜涓嶈兘涓虹┖锛侊紒");
+            }
+            if (Objects.isNull(mats.getPro_type())) {
+                throw new CoolException("闆朵欢绫诲瀷涓嶈兘涓虹┖锛侊紒");
+            }
+            Mat matnr = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", mats.getPro_komcode()));
+            if (!Objects.isNull(matnr)) {
+                // 璁㈠崟鏃堕棿
+                if (Utils.isValidFormat(mats.getUpdate_time(), "yyyy-MM-dd HH:mm:ss")) {
+                    Date date1 = Utils.getFormateDate(mats.getUpdate_time());
+                    matnr.setUpdateTime(date1);
+                }
+                matnr.setMaktx(mats.getPro_name());
+                matnr.setSpecs(mats.getPro_size());
+                matnr.setWeight(Objects.isNull(mats.getPro_wet()) ? 0.0 : Double.parseDouble(mats.getPro_wet()));
+                matnr.setSuppCode(mats.getPro_id());
+                matnr.setTagId(MatLocType.getTag(mats.getPro_type()));
+                matnr.setLocType(MatLocType.getTag(mats.getPro_type()));
+                matnr.setManu(mats.getCompany_id());
+                if (!matService.updateById(matnr)) {
+                    throw new CoolException("鐗╂枡鏇存柊澶辫触鎴栨棤闇�鏇存柊锛侊紒");
+                }
+            } else {
+                if (Objects.isNull(matnr)) {
+                    matnr = new Mat();
+                }
+                // 璁㈠崟鏃堕棿
+                if (Utils.isValidFormat(mats.getUpdate_time(), "yyyy-MM-dd HH:mm:ss")) {
+                    Date date1 = Utils.getFormateDate(mats.getUpdate_time());
+                    matnr.setUpdateTime(date1);
+                }
+                matnr.setMaktx(mats.getPro_name());
+                matnr.setMatnr(mats.getPro_komcode());
+                matnr.setSpecs(mats.getPro_size());
+                matnr.setWeight(Double.parseDouble(mats.getPro_wet()));
+                matnr.setSuppCode(mats.getPro_id());
+                matnr.setTagId(MatLocType.getTag(mats.getPro_type()));
+                matnr.setLocType(MatLocType.getTag(mats.getPro_type()));
+                matnr.setManu(mats.getCompany_id());
+                if (!matService.insert(matnr)) {
+                    throw new CoolException("鐗╂枡鏇存柊澶辫触锛侊紒");
+                }
+            }
+        });
+
+        return XSR.ok("淇濆瓨鎴愬姛锛侊紒");
+    }
+
+    /**
+     * 鏂板鎴栦慨鏀硅鍗曚俊鎭�
+     *
+     * @author Ryan
+     * @date 2025/11/24 15:32
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void addOrUpdateOrders(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.getDispatch_no()));
+        Order order = null;
+        if (OrderType.ORDER_IN.type.equals(OrderWkType.getTypeVal(params.getType()))) {
+            // 鍏ュ簱
+            order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no",
+                    orderParams.getDispatch_no()));
+        } else if (OrderType.ORDER_OUT.type.equals(OrderWkType.getTypeVal(params.getType()))) {
+            // 鍑哄簱
+            if (OrderWkType.ORDER_WK_ORDER_OUT.val.equals(params.getType())) {
+                // 澶囪揣鍗曞嚭搴�
+                order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no",
+                        orderParams.getPick_no()));
+            } else if (OrderWkType.ORDER_WK_ORDER_OUT_EO.val.equals(params.getType())
+                    || OrderWkType.ORDER_WK_ORDER_OUT_SO.val.equals(params.getType())) {
+                // 澶囪揣鎸囩ず娲惧伐鍗曪紙EO/SO锛夊嚭搴�
+                order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no",
+                        orderParams.getDispatch_no()));
+            } else {
+                throw new CoolException("鍗曟嵁绫诲瀷涓嶅瓨鍦紝涓嶆敮鎸佹坊鍔狅紒锛�");
+            }
+        } else {
+            throw new CoolException("鍗曟嵁绫诲瀷涓嶅瓨鍦紝涓嶆敮鎸佹坊鍔狅紒锛�");
+        }
+        // 鍑哄簱
+        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);
+        }
+    }
+
+    public static String generateUUID(OrderParams params) {
+        return UUID.randomUUID().toString();
+    }
+
+    /**
+     * 鐢熸垚璁㈠崟淇℃伅
+     *
+     * @param params
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void generateOrders(PubOrderParams params) {
+        // 灏嗘暟鎹綋鏂拌鍗曟彃鍏�
+        Order newOrder = new Order();
+        // 娲惧伐鍗曞彿
+        newOrder.setOrderNo(params.getDispatch_no());
+        if (OrderType.ORDER_IN.type.equals(OrderWkType.getTypeVal(params.getType()))) {
+            // 鍏ュ簱
+            newOrder.setPakinPakoutStatus(1);
+//            Integer docType = OrderWkType.getDocType(params.getType());
+//            newOrder.setDocType(Long.parseLong(docType + ""));
+            newOrder.setNumber(params.getInv_no());
+        } else if (OrderType.ORDER_OUT.type.equals(OrderWkType.getTypeVal(params.getType()))) {
+            // 鍑哄簱
+            if (OrderWkType.ORDER_WK_ORDER_OUT.val.equals(params.getType())) {
+                // 澶囪揣鍗曞嚭搴�
+                newOrder.setOrderNo(params.getPick_no());
+                newOrder.setNumber(params.getDispatch_no());
+                newOrder.setShipCode(params.getOrder_no());
+                newOrder.setCstmrName(params.getCus_id());
+                newOrder.setTel(params.getCus_address());
+//                newOrder.setDocType(Long.parseLong(OrderTypeEnum.STOCK.type + ""));
+            } else if (OrderWkType.ORDER_WK_ORDER_OUT_EO.val.equals(params.getType())
+                    || OrderWkType.ORDER_WK_ORDER_OUT_SO.val.equals(params.getType())) {
+                // 澶囪揣鎸囩ず娲惧伐鍗曪紙EO/SO锛夊嚭搴�
+//                newOrder.setDocType(Long.parseLong(OrderTypeEnum.TRANSFER.type + ""));
+            }
+            newOrder.setPakinPakoutStatus(2);
+        }
+
+        newOrder.setUuid(generateUUID(params));
+        // 娴佹按鍙凤紙鍞竴锛�
+        newOrder.setDefNumber(params.getKopen_id());
+//        newOrder.setTargetLocation(params.getTarget_location());
+        // 绠卞彿
+        newOrder.setItemName(params.getPm_tktid());
+//        newOrder.setSettle(OrderSettle.ORDER_SETTLE_HOLDING.type);
+        newOrder.setStatus(CommonEnum.COMMON_ENUM_Y.type);
+        // 璁㈠崟鏃堕棿
+        if (Utils.isValidFormat(params.getUpdate_time(), "yyyy-MM-dd HH:mm:ss")) {
+            newOrder.setOrderTime(params.getUpdate_time());
+        }
+        // 鍏徃ID
+        newOrder.setCstmrName(params.getCompany_id());
+        newOrder.setCreateTime(new Date());
+        newOrder.setUpdateTime(new Date());
+        if (!orderService.insert(newOrder)) {
+            throw new RuntimeException("鏂板璁㈠崟澶辫触锛侊紒");
+        }
+        if (!Objects.isNull(params.getDetails()) && !params.getDetails().isEmpty()) {
+            params.getDetails().forEach(item -> {
+                Mat matnr = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", item.getPro_komcode()));
+                if (Objects.isNull(matnr)) {
+                    throw new CoolException("鐗╂枡缂栫爜涓嶅瓨鍦紒锛�");
+                }
+                OrderDetl orderItem = new OrderDetl();
+                BeanUtils.copyProperties(matnr, orderItem);
+                orderItem.setOrderId(newOrder.getId());
+                orderItem.setOrderNo(newOrder.getOrderNo());
+
+                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()))) {
+                    // 鍑哄簱
+                    if (OrderWkType.ORDER_WK_ORDER_OUT.val.equals(params.getType())) {
+                        // 澶囪揣鍗曞嚭搴�
+                        orderItem.setAnfme(Math.round(item.getPick_qty() * 10000) / 10000.0);
+                    } else if (OrderWkType.ORDER_WK_ORDER_OUT_EO.val.equals(params.getType())
+                            || OrderWkType.ORDER_WK_ORDER_OUT_SO.val.equals(params.getType())) {
+                        // 澶囪揣鎸囩ず娲惧伐鍗曪紙EO/SO锛夊嚭搴�
+                        orderItem.setAnfme(Math.round(item.getOrder_qty() * 10000) / 10000.0);
+                    }
+                }
+                orderItem.setMatnr(matnr.getMatnr());
+                orderItem.setMaktx(matnr.getMaktx());
+                orderItem.setBrand(matnr.getBrand());
+                orderItem.setBatch(1 + "");
+                orderItem.setStandby1(item.getPro_id());
+                // 鍏宠仈涓婂姞娲惧伐鍗曞彿+闆朵欢浠g爜+渚涘簲鍟嗕唬鐮�
+                orderItem.setThreeCode(item.getTotal_serial());
+                // 渚涘簲鍟嗕唬鐮�
+                orderItem.setSuppCode(item.getPro_id());
+                orderItem.setCreateTime(new Date());
+                orderItem.setUpdateTime(new Date());
+                if (!orderDetlService.insert(orderItem)) {
+                    throw new CoolException("璁㈠崟鏄庣粏鏂板澶辫触锛侊紒");
+                }
+            });
+        }
+    }
+
+    /**
+     * 澶囪揣鍗曚笅鍙�
+     *
+     * @param stockUpParams
+     * @return com.core.common.R
+     * @author Ryan
+     * @date 2025/11/24 15:40
+     */
+    @Override
+    public XSR getOutDetails(List<StockUpOrderParams> stockUpParams) {
+        if (Objects.isNull(stockUpParams)) {
+            return XSR.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        stockUpParams.forEach(params -> {
+            if (Objects.isNull(params.getDispatch_no())) {
+                throw new CoolException("娲惧伐鍗曠紪鍙蜂笉鑳戒负绌猴紒锛�");
+            }
+            if (Objects.isNull(params.getKopen_id())) {
+                throw new CoolException("娴佹按鍙蜂笉鑳戒负绌猴紒锛�");
+            }
+            if (Objects.isNull(params.getCompany_id())) {
+                throw new CoolException("鍏徃ID涓嶈兘涓虹┖锛侊紒");
+            }
+            if (Objects.isNull(params.getDetails()) || params.getDetails().isEmpty()) {
+                throw new CoolException("璁㈠崟鏄庣粏涓嶈兘涓虹┖锛侊紒");
+            }
+            List<OrderItemsParam> items = new ArrayList<>();
+            if (params.getDetails() != null) {
+                for (OutOrderParams detail : params.getDetails()) {
+                    if (detail.getPartList() != null) {
+                        items.addAll(detail.getPartList());
+                    }
+                }
+            }
+
+            params.getDetails().forEach(item -> {
+                PubOrderParams pubOrderParams = new PubOrderParams();
+                BeanUtils.copyProperties(params, pubOrderParams);
+                pubOrderParams.setType(item.getType())
+                        .setPick_no(item.getPick_no())
+                        .setCus_address(item.getCus_address())
+                        .setOrder_no(item.getOrder_no())
+                        .setUpdate_time(params.getUpdate_time())
+                        .setCus_id(item.getCus_id());
+                pubOrderParams.setDetails(item.getPartList());
+                addOrUpdateOrders(pubOrderParams, "add");
+            });
+        });
+
+        return XSR.ok("澶囪揣鍗曚笅鍙戞垚鍔燂紒锛�");
+    }
+
+    /**
+     * 鏌ヨWMS搴撳瓨淇℃伅
+     *
+     * @param params
+     * @return com.core.common.R
+     */
+    @Override
+    public XSR getStockInfo(PageRequestParams params) {
+        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());
+    }
+
+
+    private String kopen() {
+        return url + ":" + port + prefix;
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/Order.java b/src/main/java/com/zy/asrs/entity/Order.java
index 90aac1d..5e9877b 100644
--- a/src/main/java/com/zy/asrs/entity/Order.java
+++ b/src/main/java/com/zy/asrs/entity/Order.java
@@ -262,6 +262,9 @@
     @ApiModelProperty(value= "澶囨敞")
     private String memo;
 
+
+    @ApiModelProperty("涓婃姤娆℃暟")
+    private Integer reportOnce;
     /**
      * 鐘舵�� 1: 杩涜涓�  0: 鍒濆  2:宸插畬鎴�
      */
diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java
index 4ead5ce..1927845 100644
--- a/src/main/java/com/zy/asrs/utils/Utils.java
+++ b/src/main/java/com/zy/asrs/utils/Utils.java
@@ -16,10 +16,13 @@
 
 
 import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
 
 /**
  * Created by vincent on 2020/8/27
@@ -47,6 +50,26 @@
             }
             return msgBuilder.toString();
         }
+    }
+
+    public static boolean isValidFormat(String dateStr, String format) {
+        SimpleDateFormat sdf = new SimpleDateFormat(format);
+        sdf.setLenient(false); // 涓ユ牸妯″紡锛屽繀椤诲畬鍏ㄥ尮閰嶆牸寮�
+        try {
+            sdf.parse(dateStr);
+            return true;
+        } catch (ParseException e) {
+            return false;
+        }
+    }
+
+    public static Date getFormateDate(String datestr) {
+        //瀛楃涓茶浆鏃ユ湡
+        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        LocalDateTime parse = LocalDateTime.parse(datestr, dateTimeFormatter);
+        Instant instant = parse.atZone(ZoneId.systemDefault()).toInstant();
+        Date date = Date.from(instant);
+        return date;
     }
 
     /**
@@ -631,4 +654,15 @@
         return result;
     }
 
+    /**
+     * 鏃ユ湡杞崲涓哄瓧绗︿覆
+     * @param date 鏃ユ湡
+     * @param format 鏍煎紡
+     * @return 瀛楃涓�
+     */
+    public static String dateToStr(Date date, String format) {
+        SimpleDateFormat sdf = new SimpleDateFormat(format);
+        return sdf.format(date);
+    }
+
 }
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index ffa0b84..94f804b 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -11,8 +11,8 @@
   datasource:
     driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
     username: sa
-    password: Skyouc#23
-    url: jdbc:sqlserver://127.0.0.1:1433;databasename=jsxswms
+    password: sa@123
+    url: jdbc:sqlserver://192.168.4.15:1433;databasename=jxhcwms
   mvc:
     static-path-pattern: /**
   redis:

--
Gitblit v1.9.1