From 989dd1b9dec8ffbf32657d67bb5012de3bc75d04 Mon Sep 17 00:00:00 2001
From: 1 <1@123>
Date: 星期五, 09 一月 2026 15:46:53 +0800
Subject: [PATCH] #接口: WCS入库任务申请 WCS任务上报通知 WCS申请任务重新分配入库 WCS申请在库库位更换库位

---
 rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/CreateInTaskParam.java   |   28 ++
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/config/PlatformProperties.java          |   30 ++
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/WcsConstant.java        |    9 
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/WcsCreateInTaskParam.java |   28 ++
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/WmsWcsService.java              |   17 +
 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java       |    6 
 rsf-open-api/src/main/resources/application-dev.yml                                        |   12 +
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/WcsTaskReportParam.java   |   28 ++
 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/WcsController.java          |   55 ++++
 rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/TaskReportParam.java     |   28 ++
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/WmsConstant.java        |   15 +
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/WcsChangeLocParam.java    |   28 ++
 rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ReassignLocParam.java    |   28 ++
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/WcsReassignLocParam.java  |   28 ++
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsWcsServiceImpl.java     |  198 ++++++++++++++++++
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/WmsWcsController.java        |   92 ++++++++
 16 files changed, 625 insertions(+), 5 deletions(-)

diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/config/PlatformProperties.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/config/PlatformProperties.java
index 8559823..beb64c9 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/config/PlatformProperties.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/config/PlatformProperties.java
@@ -66,4 +66,34 @@
     }
 
 
+    @Data
+    @Configuration
+    @ConfigurationProperties(prefix = "platform.wcs")
+    public class WcsApi {
+        /**
+         * rcs璋冪敤璺緞
+         */
+        private String host;
+
+        /**rcs璋冪敤绔彛**/
+        private String port;
+
+    }
+
+
+    @Data
+    @Configuration
+    @ConfigurationProperties(prefix = "platform.hk")
+    public class HkApi {
+        /**
+         * rcs璋冪敤璺緞
+         */
+        private String host;
+
+        /**rcs璋冪敤绔彛**/
+        private String port;
+
+    }
+
+
 }
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/WmsWcsController.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/WmsWcsController.java
new file mode 100644
index 0000000..aaabf78
--- /dev/null
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/WmsWcsController.java
@@ -0,0 +1,92 @@
+package com.vincent.rsf.openApi.controller;
+
+import com.vincent.rsf.framework.common.R;
+import com.vincent.rsf.openApi.entity.params.WcsChangeLocParam;
+import com.vincent.rsf.openApi.entity.params.WcsCreateInTaskParam;
+import com.vincent.rsf.openApi.entity.params.WcsReassignLocParam;
+import com.vincent.rsf.openApi.entity.params.WcsTaskReportParam;
+import com.vincent.rsf.openApi.service.WmsWcsService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+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.Objects;
+
+@RestController
+@Api("WCS璋冨害浜や簰鎺ュ彛")
+@RequestMapping("/wcs")
+public class WmsWcsController {
+
+    @Autowired
+    private WmsWcsService wmsWcsService;
+
+
+    /**
+     * @author Munch D. Luffy
+     * @date 2026/01/09
+     * @description: WCS鍏ュ簱浠诲姟鐢宠
+     * @version 1.0
+     */
+    @ApiOperation("WCS鍏ュ簱浠诲姟鐢宠")
+    @PostMapping("/openapi/createInTask")
+    public R wcsCreateInTask(@RequestBody WcsCreateInTaskParam params) {
+        if (Objects.isNull(params)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        return R.ok().add(wmsWcsService.wcsCreateInTask(params));
+    }
+
+
+    /**
+     * @author Munch D. Luffy
+     * @date 2026/01/09
+     * @description: WCS浠诲姟涓婃姤閫氱煡
+     * @version 1.0
+     */
+    @ApiOperation("WCS浠诲姟涓婃姤閫氱煡")
+    @PostMapping("/openapi/report")
+    public R wcsTaskReport(@RequestBody WcsTaskReportParam params) {
+        if (Objects.isNull(params)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        return R.ok().add(wmsWcsService.wcsTaskReport(params));
+    }
+
+
+    /**
+     * @author Munch D. Luffy
+     * @date 2026/01/09
+     * @description: WCS鐢宠浠诲姟閲嶆柊鍒嗛厤鍏ュ簱
+     * @version 1.0
+     */
+    @ApiOperation("WCS鐢宠浠诲姟閲嶆柊鍒嗛厤鍏ュ簱")
+    @PostMapping("/openapi/reassign/loc")
+    public R wcsReassignLoc(@RequestBody WcsReassignLocParam params) {
+        if (Objects.isNull(params)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        return R.ok().add(wmsWcsService.wcsReassignLoc(params));
+    }
+
+
+    /**
+     * @author Munch D. Luffy
+     * @date 2026/01/09
+     * @description: WCS鐢宠鍦ㄥ簱搴撲綅鏇存崲搴撲綅
+     * @version 1.0
+     */
+    @ApiOperation("WCS鐢宠鍦ㄥ簱搴撲綅鏇存崲搴撲綅")
+    @PostMapping("/openapi/change/loc")
+    public R wcsChangeLoc(@RequestBody WcsChangeLocParam params) {
+        if (Objects.isNull(params)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        return R.ok().add(wmsWcsService.wcsChangeLoc(params));
+    }
+
+
+}
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/WcsConstant.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/WcsConstant.java
new file mode 100644
index 0000000..9dbeb5a
--- /dev/null
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/WcsConstant.java
@@ -0,0 +1,9 @@
+package com.vincent.rsf.openApi.entity.constant;
+
+public class WcsConstant {
+
+    public static String pubTask = "/openapi/createInTask";
+
+    public static String syncLocs = "/api/open/loc/sync";
+
+}
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/WmsConstant.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/WmsConstant.java
index d903d43..26c84d9 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/WmsConstant.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/WmsConstant.java
@@ -25,6 +25,21 @@
     //璁㈠崟瀹屾垚鍥炲啓
     public static String REPORT_ORDER_CALLBACK = "/C3Api?SysCode=WMS";
 
+    //鍏ュ簱浠诲姟鐢宠
+    public static String WCS_CREATE_IN_TASK = "/rsf-server/wcs/createInTask";
+
+    //WCS浠诲姟涓婃姤閫氱煡
+    public static String WCS_TASK_REPORT = "/rsf-server/wcs/task/report";
+
+    //WCS鐢宠浠诲姟閲嶆柊鍒嗛厤鍏ュ簱
+    public static String WCS_REASSIGN_LOC = "/rsf-server/wcs/reassign/loc";
+
+    //WCS鐢宠鍦ㄥ簱搴撲綅鏇存崲搴撲綅
+    public static String WCS_CHANGE_LOC = "/rsf-server/wcs/change/loc";
+
+    //绉诲簱浠诲姟鐢宠
+    public static String WCS_CREATE_LOC_MOVE_TASK = "/rsf-server/wcs/createLocMoveTask";
+
 
 
 }
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/WcsChangeLocParam.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/WcsChangeLocParam.java
new file mode 100644
index 0000000..03b4748
--- /dev/null
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/WcsChangeLocParam.java
@@ -0,0 +1,28 @@
+package com.vincent.rsf.openApi.entity.params;
+
+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 = "WcsTaskReportParam", description = "WCS浠诲姟涓婃姤閫氱煡")
+public class WcsChangeLocParam implements Serializable {
+
+    @ApiModelProperty("鎵樼洏鐮�")
+    private String barcode;
+
+    @ApiModelProperty("婧愮珯")
+    private Integer sourceStaNo;
+
+    @ApiModelProperty("鍙敤鎺�")
+    private List<Integer> rowList;
+
+    @ApiModelProperty("搴撲綅绫诲瀷")
+    private Integer locType1;
+
+}
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/WcsCreateInTaskParam.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/WcsCreateInTaskParam.java
new file mode 100644
index 0000000..528cc0d
--- /dev/null
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/WcsCreateInTaskParam.java
@@ -0,0 +1,28 @@
+package com.vincent.rsf.openApi.entity.params;
+
+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 = "WcsCreateInTaskParam", description = "鍏ュ簱浠诲姟鐢宠")
+public class WcsCreateInTaskParam implements Serializable {
+
+    @ApiModelProperty("鎵樼洏鐮�")
+    private String barcode;
+
+    @ApiModelProperty("婧愮珯")
+    private Integer sourceStaNo;
+
+    @ApiModelProperty("鍙敤鎺�")
+    private List<Integer> rowList;
+
+    @ApiModelProperty("搴撲綅绫诲瀷")
+    private Integer locType1;
+
+}
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/WcsReassignLocParam.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/WcsReassignLocParam.java
new file mode 100644
index 0000000..1df9634
--- /dev/null
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/WcsReassignLocParam.java
@@ -0,0 +1,28 @@
+package com.vincent.rsf.openApi.entity.params;
+
+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 = "WcsTaskReportParam", description = "WCS浠诲姟涓婃姤閫氱煡")
+public class WcsReassignLocParam implements Serializable {
+
+    @ApiModelProperty("鎵樼洏鐮�")
+    private String barcode;
+
+    @ApiModelProperty("婧愮珯")
+    private Integer sourceStaNo;
+
+    @ApiModelProperty("鍙敤鎺�")
+    private List<Integer> rowList;
+
+    @ApiModelProperty("搴撲綅绫诲瀷")
+    private Integer locType1;
+
+}
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/WcsTaskReportParam.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/WcsTaskReportParam.java
new file mode 100644
index 0000000..76f3472
--- /dev/null
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/WcsTaskReportParam.java
@@ -0,0 +1,28 @@
+package com.vincent.rsf.openApi.entity.params;
+
+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 = "WcsTaskReportParam", description = "WCS浠诲姟涓婃姤閫氱煡")
+public class WcsTaskReportParam implements Serializable {
+
+    @ApiModelProperty("鎵樼洏鐮�")
+    private String barcode;
+
+    @ApiModelProperty("婧愮珯")
+    private Integer sourceStaNo;
+
+    @ApiModelProperty("鍙敤鎺�")
+    private List<Integer> rowList;
+
+    @ApiModelProperty("搴撲綅绫诲瀷")
+    private Integer locType1;
+
+}
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/WmsWcsService.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/WmsWcsService.java
new file mode 100644
index 0000000..5859885
--- /dev/null
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/WmsWcsService.java
@@ -0,0 +1,17 @@
+package com.vincent.rsf.openApi.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vincent.rsf.framework.common.R;
+import com.vincent.rsf.openApi.entity.Loc;
+import com.vincent.rsf.openApi.entity.params.WcsChangeLocParam;
+import com.vincent.rsf.openApi.entity.params.WcsCreateInTaskParam;
+import com.vincent.rsf.openApi.entity.params.WcsReassignLocParam;
+import com.vincent.rsf.openApi.entity.params.WcsTaskReportParam;
+
+public interface WmsWcsService extends IService<Loc> {
+
+    R wcsCreateInTask(WcsCreateInTaskParam params);
+    R wcsTaskReport(WcsTaskReportParam params);
+    R wcsReassignLoc(WcsReassignLocParam params);
+    R wcsChangeLoc(WcsChangeLocParam params);
+}
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsWcsServiceImpl.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsWcsServiceImpl.java
new file mode 100644
index 0000000..500e2a3
--- /dev/null
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsWcsServiceImpl.java
@@ -0,0 +1,198 @@
+package com.vincent.rsf.openApi.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.cfg.CoercionAction;
+import com.fasterxml.jackson.databind.cfg.CoercionInputShape;
+import com.vincent.rsf.framework.common.R;
+import com.vincent.rsf.openApi.config.PlatformProperties;
+import com.vincent.rsf.openApi.entity.Loc;
+import com.vincent.rsf.openApi.entity.constant.WmsConstant;
+import com.vincent.rsf.openApi.entity.dto.CommonResponse;
+import com.vincent.rsf.openApi.entity.params.WcsChangeLocParam;
+import com.vincent.rsf.openApi.entity.params.WcsCreateInTaskParam;
+import com.vincent.rsf.openApi.entity.params.WcsReassignLocParam;
+import com.vincent.rsf.openApi.entity.params.WcsTaskReportParam;
+import com.vincent.rsf.openApi.mapper.LocMapper;
+import com.vincent.rsf.openApi.service.WmsWcsService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.Objects;
+
+
+@Slf4j
+@Service("wmsWcsService")
+public class WmsWcsServiceImpl extends ServiceImpl<LocMapper, Loc> implements WmsWcsService {
+
+    @Autowired
+    private PlatformProperties.WmsApi wmsApi;
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+    /**
+     * @author Munch D. Luffy
+     * @date 2026/01/09
+     * @description: 浠诲姟涓嬪彂
+     * @version 1.0
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R wcsCreateInTask(WcsCreateInTaskParam params)  {
+        String createInTask =  wmsApi.getHost() + ":" + wmsApi.getPort() + WmsConstant.WCS_CREATE_IN_TASK;
+        /**WMS鍩虹閰嶇疆閾炬帴*/
+        log.info("鍏ュ簱浠诲姟鐢宠锛岃姹傚湴鍧�锛� {}锛� 璇锋眰鍙傛暟锛� {}", createInTask , JSONObject.toJSONString(params));
+        HttpHeaders headers = new HttpHeaders();
+        headers.add("Content-Type", "application/json");
+        headers.add("api-version", "v2.0");
+        HttpEntity httpEntity = new HttpEntity(params, headers);
+        ResponseEntity<String> exchange = restTemplate.exchange(createInTask, HttpMethod.POST, httpEntity, String.class);
+        log.info("WCS鍏ュ簱浠诲姟鐢宠锛屽搷搴旂粨鏋滐細 {}", exchange);
+        if (Objects.isNull(exchange.getBody())) {
+            return R.error().add("涓嬪彂WMS杩斿洖鍙傛暟涓虹┖锛侊紒锛�");
+        } else {
+            ObjectMapper objectMapper = new ObjectMapper();
+            objectMapper.coercionConfigDefaults()
+                    .setCoercion(CoercionInputShape.EmptyString, CoercionAction.AsEmpty);
+            try {
+                CommonResponse result = objectMapper.readValue(exchange.getBody(), CommonResponse.class);
+                if (result.getCode() == 200) {
+                    return R.ok();
+                } else {
+                    return R.error(result.getMsg());
+//                    throw new CoolException("浠诲姟鎵ц鐘舵�佷笂鎶ュけ璐ワ紒锛�");
+                }
+            } catch (JsonProcessingException e) {
+//                throw new CoolException(e.getMessage());
+            }
+        }
+        return R.error();
+    }
+
+    /**
+     * @author Munch D. Luffy
+     * @date 2026/01/09
+     * @description: WCS浠诲姟涓婃姤閫氱煡
+     * @version 1.0
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R wcsTaskReport(WcsTaskReportParam params)  {
+        String createInTask =  wmsApi.getHost() + ":" + wmsApi.getPort() + WmsConstant.WCS_TASK_REPORT;
+        /**WMS鍩虹閰嶇疆閾炬帴*/
+        log.info("WCS浠诲姟涓婃姤閫氱煡锛岃姹傚湴鍧�锛� {}锛� 璇锋眰鍙傛暟锛� {}", createInTask , JSONObject.toJSONString(params));
+        HttpHeaders headers = new HttpHeaders();
+        headers.add("Content-Type", "application/json");
+        headers.add("api-version", "v2.0");
+        HttpEntity httpEntity = new HttpEntity(params, headers);
+        ResponseEntity<String> exchange = restTemplate.exchange(createInTask, HttpMethod.POST, httpEntity, String.class);
+        log.info("WCS浠诲姟涓婃姤閫氱煡锛屽搷搴旂粨鏋滐細 {}", exchange);
+        if (Objects.isNull(exchange.getBody())) {
+            return R.error().add("WCS浠诲姟涓婃姤閫氱煡鍛婄煡wms杩斿洖鍙傛暟涓虹┖锛侊紒锛�");
+        } else {
+            ObjectMapper objectMapper = new ObjectMapper();
+            objectMapper.coercionConfigDefaults()
+                    .setCoercion(CoercionInputShape.EmptyString, CoercionAction.AsEmpty);
+            try {
+                CommonResponse result = objectMapper.readValue(exchange.getBody(), CommonResponse.class);
+                if (result.getCode() == 200) {
+                    return R.ok();
+                } else {
+                    return R.error(result.getMsg());
+//                    throw new CoolException("浠诲姟鎵ц鐘舵�佷笂鎶ュけ璐ワ紒锛�");
+                }
+            } catch (JsonProcessingException e) {
+//                throw new CoolException(e.getMessage());
+            }
+        }
+        return R.error();
+    }
+
+    /**
+     * @author Munch D. Luffy
+     * @date 2026/01/09
+     * @description: WCS鐢宠浠诲姟閲嶆柊鍒嗛厤鍏ュ簱
+     * @version 1.0
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R wcsReassignLoc(WcsReassignLocParam params)  {
+        String createInTask =  wmsApi.getHost() + ":" + wmsApi.getPort() + WmsConstant.WCS_REASSIGN_LOC;
+        /**WMS鍩虹閰嶇疆閾炬帴*/
+        log.info("WCS浠诲姟涓婃姤閫氱煡锛岃姹傚湴鍧�锛� {}锛� 璇锋眰鍙傛暟锛� {}", createInTask , JSONObject.toJSONString(params));
+        HttpHeaders headers = new HttpHeaders();
+        headers.add("Content-Type", "application/json");
+        headers.add("api-version", "v2.0");
+        HttpEntity httpEntity = new HttpEntity(params, headers);
+        ResponseEntity<String> exchange = restTemplate.exchange(createInTask, HttpMethod.POST, httpEntity, String.class);
+        log.info("WCS浠诲姟涓婃姤閫氱煡锛屽搷搴旂粨鏋滐細 {}", exchange);
+        if (Objects.isNull(exchange.getBody())) {
+            return R.error().add("WCS浠诲姟涓婃姤閫氱煡鍛婄煡wms杩斿洖鍙傛暟涓虹┖锛侊紒锛�");
+        } else {
+            ObjectMapper objectMapper = new ObjectMapper();
+            objectMapper.coercionConfigDefaults()
+                    .setCoercion(CoercionInputShape.EmptyString, CoercionAction.AsEmpty);
+            try {
+                CommonResponse result = objectMapper.readValue(exchange.getBody(), CommonResponse.class);
+                if (result.getCode() == 200) {
+                    return R.ok();
+                } else {
+                    return R.error(result.getMsg());
+//                    throw new CoolException("浠诲姟鎵ц鐘舵�佷笂鎶ュけ璐ワ紒锛�");
+                }
+            } catch (JsonProcessingException e) {
+//                throw new CoolException(e.getMessage());
+            }
+        }
+        return R.error();
+    }
+
+    /**
+     * @author Munch D. Luffy
+     * @date 2026/01/09
+     * @description: WCS鐢宠鍦ㄥ簱搴撲綅鏇存崲搴撲綅
+     * @version 1.0
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R wcsChangeLoc(WcsChangeLocParam params)  {
+        String createInTask =  wmsApi.getHost() + ":" + wmsApi.getPort() + WmsConstant.WCS_CHANGE_LOC;
+        /**WMS鍩虹閰嶇疆閾炬帴*/
+        log.info("WCS浠诲姟涓婃姤閫氱煡锛岃姹傚湴鍧�锛� {}锛� 璇锋眰鍙傛暟锛� {}", createInTask , JSONObject.toJSONString(params));
+        HttpHeaders headers = new HttpHeaders();
+        headers.add("Content-Type", "application/json");
+        headers.add("api-version", "v2.0");
+        HttpEntity httpEntity = new HttpEntity(params, headers);
+        ResponseEntity<String> exchange = restTemplate.exchange(createInTask, HttpMethod.POST, httpEntity, String.class);
+        log.info("WCS浠诲姟涓婃姤閫氱煡锛屽搷搴旂粨鏋滐細 {}", exchange);
+        if (Objects.isNull(exchange.getBody())) {
+            return R.error().add("WCS浠诲姟涓婃姤閫氱煡鍛婄煡wms杩斿洖鍙傛暟涓虹┖锛侊紒锛�");
+        } else {
+            ObjectMapper objectMapper = new ObjectMapper();
+            objectMapper.coercionConfigDefaults()
+                    .setCoercion(CoercionInputShape.EmptyString, CoercionAction.AsEmpty);
+            try {
+                CommonResponse result = objectMapper.readValue(exchange.getBody(), CommonResponse.class);
+                if (result.getCode() == 200) {
+                    return R.ok();
+                } else {
+                    return R.error(result.getMsg());
+//                    throw new CoolException("浠诲姟鎵ц鐘舵�佷笂鎶ュけ璐ワ紒锛�");
+                }
+            } catch (JsonProcessingException e) {
+//                throw new CoolException(e.getMessage());
+            }
+        }
+        return R.error();
+    }
+}
diff --git a/rsf-open-api/src/main/resources/application-dev.yml b/rsf-open-api/src/main/resources/application-dev.yml
index c4ba7ad..a93ac00 100644
--- a/rsf-open-api/src/main/resources/application-dev.yml
+++ b/rsf-open-api/src/main/resources/application-dev.yml
@@ -61,6 +61,18 @@
     host: http://127.0.0.1
     #绔彛
     port: 8088
+  #WCS閾炬帴
+  wcs:
+    #閾炬帴
+    host: http://192.168.4.78
+    #绔彛
+    port: 9091
+  #WCS閾炬帴
+  hk:
+    #閾炬帴
+    host: http://127.0.0.1
+    #绔彛
+    port: 9090
   wms:
     #閾炬帴
     host: http://127.0.0.1
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/WcsController.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/WcsController.java
index b4e79a9..4f163ef 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/WcsController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/WcsController.java
@@ -4,8 +4,7 @@
 import com.vincent.rsf.framework.common.R;
 import com.vincent.rsf.server.api.entity.dto.InTaskMsgDto;
 import com.vincent.rsf.server.api.controller.erp.params.TaskInParam;
-import com.vincent.rsf.server.api.entity.params.ExMsgParams;
-import com.vincent.rsf.server.api.entity.params.WcsTaskParams;
+import com.vincent.rsf.server.api.entity.params.*;
 import com.vincent.rsf.server.common.annotation.OperationLog;
 import com.vincent.rsf.server.manager.enums.TaskType;
 import com.vincent.rsf.server.api.service.WcsService;
@@ -121,5 +120,57 @@
         return wcsService.receiveExMsg(params);
     }
 
+    /**
+     * @author Munch D. Luffy
+     * @date 2026/01/09
+     * @description: WCS鍏ュ簱浠诲姟鐢宠
+     * @version 1.0
+     */
+    @ApiOperation("WCS鍏ュ簱浠诲姟鐢宠")
+    @OperationLog("WCS鍏ュ簱浠诲姟鐢宠")
+    @PostMapping("/createInTask")
+    public R wcsCreateInTask(@RequestBody CreateInTaskParam params) {
+        return R.ok();//lsh  寰呭畬鍠�
+    }
+
+    /**
+     * @author Munch D. Luffy
+     * @date 2026/01/09
+     * @description: WCS浠诲姟涓婃姤閫氱煡
+     * @version 1.0
+     */
+    @ApiOperation("WCS浠诲姟涓婃姤閫氱煡")
+    @OperationLog("WCS浠诲姟涓婃姤閫氱煡")
+    @PostMapping("/task/report")
+    public R wcsTaskReport(@RequestBody TaskReportParam params) {
+        return R.ok();//lsh  寰呭畬鍠�
+    }
+
+    /**
+     * @author Munch D. Luffy
+     * @date 2026/01/09
+     * @description: WCS鐢宠浠诲姟閲嶆柊鍒嗛厤鍏ュ簱
+     * @version 1.0
+     */
+    @ApiOperation("WCS鐢宠浠诲姟閲嶆柊鍒嗛厤鍏ュ簱")
+    @OperationLog("WCS鐢宠浠诲姟閲嶆柊鍒嗛厤鍏ュ簱")
+    @PostMapping("/reassign/loc")
+    public R wcsReassignLoc(@RequestBody ReassignLocParam params) {
+        return R.ok();//lsh  寰呭畬鍠�
+    }
+
+    /**
+     * @author Munch D. Luffy
+     * @date 2026/01/09
+     * @description: WCS鐢宠鍦ㄥ簱搴撲綅鏇存崲搴撲綅
+     * @version 1.0
+     */
+    @ApiOperation("WCS鐢宠鍦ㄥ簱搴撲綅鏇存崲搴撲綅")
+    @OperationLog("WCS鐢宠鍦ㄥ簱搴撲綅鏇存崲搴撲綅")
+    @PostMapping("/change/loc")
+    public R wcsChangeLoc(@RequestBody TaskReportParam params) {
+        return R.ok();//lsh  寰呭畬鍠�
+    }
+
 
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/CreateInTaskParam.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/CreateInTaskParam.java
new file mode 100644
index 0000000..ca98875
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/CreateInTaskParam.java
@@ -0,0 +1,28 @@
+package com.vincent.rsf.server.api.entity.params;
+
+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 = "CreateInTaskParam", description = "鍏ュ簱浠诲姟鐢宠")
+public class CreateInTaskParam implements Serializable {
+
+    @ApiModelProperty("鎵樼洏鐮�")
+    private String barcode;
+
+    @ApiModelProperty("婧愮珯")
+    private Integer sourceStaNo;
+
+    @ApiModelProperty("鍙敤鎺�")
+    private List<Integer> rowList;
+
+    @ApiModelProperty("搴撲綅绫诲瀷")
+    private Integer locType1;
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ReassignLocParam.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ReassignLocParam.java
new file mode 100644
index 0000000..7be5439
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ReassignLocParam.java
@@ -0,0 +1,28 @@
+package com.vincent.rsf.server.api.entity.params;
+
+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 = "ReassignLocParam", description = "WCS浠诲姟涓婃姤閫氱煡")
+public class ReassignLocParam implements Serializable {
+
+    @ApiModelProperty("鎵樼洏鐮�")
+    private String barcode;
+
+    @ApiModelProperty("婧愮珯")
+    private Integer sourceStaNo;
+
+    @ApiModelProperty("鍙敤鎺�")
+    private List<Integer> rowList;
+
+    @ApiModelProperty("搴撲綅绫诲瀷")
+    private Integer locType1;
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/TaskReportParam.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/TaskReportParam.java
new file mode 100644
index 0000000..b2352f0
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/TaskReportParam.java
@@ -0,0 +1,28 @@
+package com.vincent.rsf.server.api.entity.params;
+
+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 = "TaskReportParam", description = "WCS浠诲姟涓婃姤閫氱煡")
+public class TaskReportParam implements Serializable {
+
+    @ApiModelProperty("鎵樼洏鐮�")
+    private String barcode;
+
+    @ApiModelProperty("婧愮珯")
+    private Integer sourceStaNo;
+
+    @ApiModelProperty("鍙敤鎺�")
+    private List<Integer> rowList;
+
+    @ApiModelProperty("搴撲綅绫诲瀷")
+    private Integer locType1;
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
index 061473a..44ee6df 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
@@ -237,7 +237,7 @@
     /**
      * 闈炲厜鐢电珯鐐逛换鍔′笅鍙�
      */
-//    @Scheduled(cron = "0/5 * * * * ?  ")
+    @Scheduled(cron = "0/5 * * * * ?  ")
     @Transactional(rollbackFor = Exception.class)
     public void pubTaskToWcs() {
         Long loginUserId = SystemAuthUtils.getLoginUserId();
@@ -270,7 +270,7 @@
      * @description: 鍏夌數绔欑偣浠诲姟涓嬪彂
      * @version 1.0
      */
-//    @Scheduled(cron = "0/5 * * * * ?  ")
+    @Scheduled(cron = "0/5 * * * * ?  ")
     @Transactional(rollbackFor = Exception.class)
     public void taskToWCS() throws Exception {
         Long loginUserId = SystemAuthUtils.getLoginUserId();
@@ -452,7 +452,7 @@
         ResponseEntity<String> exchange = restTemplate.exchange(pubTakUrl, HttpMethod.POST, httpEntity, String.class);
         log.info("浠诲姟涓嬪彂鍚庯紝鍝嶅簲缁撴灉锛� {}", exchange);
         if (Objects.isNull(exchange.getBody())) {
-            throw new CoolException("浠诲姟涓嬪彂澶辫触锛侊紒");
+            throw new CoolException("浠诲姟涓嬪彂澶辫触锛侊紒锛岃繑鍥炲弬鏁颁负绌猴紒锛侊紒");
         } else {
             try {
                 ObjectMapper objectMapper = new ObjectMapper();

--
Gitblit v1.9.1