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