From 98d88ac8caf7f0991d741079474c262f1e252927 Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期五, 06 三月 2026 08:14:54 +0800
Subject: [PATCH] 拣货过程中的出库库存匹配

---
 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/WcsController.java |  148 ++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 145 insertions(+), 3 deletions(-)

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 f41c681..68408c0 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
@@ -3,17 +3,32 @@
 import com.vincent.rsf.framework.common.Cools;
 import com.vincent.rsf.framework.common.R;
 import com.vincent.rsf.server.api.entity.dto.InTaskMsgDto;
-import com.vincent.rsf.server.api.controller.params.TaskInParam;
+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.common.annotation.OperationLog;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.vincent.rsf.server.common.domain.BaseParam;
+import com.vincent.rsf.server.common.domain.PageParam;
+import com.vincent.rsf.server.manager.controller.params.LocToTaskParams;
+import com.vincent.rsf.server.manager.entity.Loc;
+import com.vincent.rsf.server.manager.enums.LocStsType;
 import com.vincent.rsf.server.manager.enums.TaskType;
+import com.vincent.rsf.server.manager.service.LocItemService;
+import com.vincent.rsf.server.manager.service.LocService;
 import com.vincent.rsf.server.api.service.WcsService;
+import com.vincent.rsf.server.common.constant.Constants;
 import com.vincent.rsf.server.system.controller.BaseController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 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.Map;
 
 @RestController
 @RequestMapping("/wcs")
@@ -22,6 +37,23 @@
 
     @Autowired
     private WcsService wcsService;
+    @Autowired
+    private LocItemService locItemService;
+    @Autowired
+    private LocService locService;
+
+
+    @ApiOperation("绌烘澘搴撲綅鍒楄〃锛堝垎椤碉級锛屼粎杩斿洖 useStatus=D 鐨勫簱浣嶏紝鐢ㄤ簬绌烘澘鍑哄簱椤靛嬀閫�")
+    @PreAuthorize("hasAuthority('manager:emptyOutbound:list')")
+    @PostMapping("/empty/locs/page")
+    public R emptyLocsPage(@RequestBody Map<String, Object> map) {
+        BaseParam baseParam = buildParam(map, BaseParam.class);
+        PageParam<Loc, BaseParam> pageParam = new PageParam<>(baseParam, Loc.class);
+        LambdaQueryWrapper<Loc> qw = new LambdaQueryWrapper<Loc>()
+                .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_D.type)
+                .orderByAsc(Loc::getId);
+        return R.ok().add(locService.page(pageParam, qw));
+    }
 
     @ApiOperation(value = "wcs鐢熸垚鍏ュ簱浠诲姟鎺ュ彛")
     @PostMapping("/create/in/task")
@@ -40,8 +72,6 @@
         }
         InTaskMsgDto msgDto = wcsService.createInTask(param);
         return R.ok(msgDto);
-
-
     }
 
     @ApiOperation(value = "agv鍙栬揣瀹屾垚鎺ュ彛")
@@ -65,8 +95,120 @@
 
     }
 
+    /**
+     * 鎺ユ敹WCS璋冨害锛屽洖浼犳墽琛岀姸鎬�
+     *  TODO 1. 鎷f枡鍑哄簱锛屽啀鍏ュ簱鎵ц锛屼慨鏀圭姸鎬佷负199.浠诲姟瀹屾垚  骞惰褰曞叆搴撶珯鐐癸紙婧愮珯鐐癸級锛屾坊鍔犱换鍔″彿鍙傛暟
+     * @param param
+     * @return
+     */
+    @ApiOperation("鎺ユ敹WCS璋冨害锛屽洖浼犳墽琛岀姸鎬�")
+    @PostMapping("/exce/status")
+    public R receiveTask(@RequestBody TaskInParam param) {
+        if (Cools.isEmpty(param)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        return R.ok();
+    }
 
+    /**
+     * @author Ryan
+     * @date 2025/8/27
+     * @description: RCS搴撲綅淇℃伅鍚屾
+     * @version 1.0
+     */
+    @ApiOperation("RCS搴撲綅淇℃伅鍚屾")
+    @OperationLog("RCS搴撲綅淇℃伅鍚屾")
+    @PostMapping("/sync/locs")
+    public R syncLocsToWms() {
+         wcsService.syncLocsToWms();
+         return R.ok();
+    }
 
+    /**
+     * 涓嬪彂浠诲姟鑷砏CS锛孉PI涓浆
+     * @param
+     * @return
+     */
+    @ApiOperation("涓嬪彂浠诲姟鑷砏CS")
+    @OperationLog("涓嬪彂浠诲姟鑷砏CS")
+    @PostMapping("/pub/task/wcs")
+    public R pubTaskToWcs(@RequestBody WcsTaskParams params) {
+        return wcsService.pubWcsTask(params);
+    }
+
+    /**
+     * @author Ryan
+     * @date 2025/8/28
+     * @description: RCS涓婃姤寮傚父淇℃伅
+     * @version 1.0
+     */
+    @ApiOperation("RCS涓婃姤寮傚父鎵ц淇℃伅")
+    @OperationLog("RCS涓婃姤寮傚父鎵ц淇℃伅")
+    @PostMapping("/receive/ex/msg")
+    public R receiveExMsg(@RequestBody ExMsgParams params) {
+        return wcsService.receiveExMsg(params);
+    }
+
+    /**
+     * @author Ryan
+     * @date 2026/2/6
+     * @description: 鐢宠鍏ュ簱浠诲姟锛屽垎閰嶅簱浣�
+     * @version 1.0
+     */
+    @ApiOperation("鐢宠鍏ュ簱浠诲姟锛屽垎閰嶅簱浣�")
+    @PostMapping("/allocate/location")
+    public R allocateLocation(@RequestBody Map<String, Object> params) {
+        if (Cools.isEmpty(params)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        String barcode = (String) params.get("barcode");
+        String staNo = (String) params.get("staNo");
+        Integer type = params.get("type") != null ? Integer.valueOf(params.get("type").toString()) : null;
+        Boolean full = null;
+        if (params.get("full") != null) {
+            if (params.get("full") instanceof Boolean) {
+                full = (Boolean) params.get("full");
+            } else {
+                full = Boolean.parseBoolean(params.get("full").toString());
+            }
+        }
+        if (Cools.isEmpty(barcode)) {
+            return R.error("鏂欑鐮佷笉鑳戒负绌猴紒锛�");
+        }
+        if (Cools.isEmpty(staNo)) {
+            return R.error("鍏ュ簱绔欑偣涓嶈兘涓虹┖锛侊紒");
+        }
+        if (type == null) {
+            return R.error("鍏ュ簱绫诲瀷涓嶈兘涓虹┖锛侊紒");
+        }
+        return wcsService.allocateLocation(barcode, staNo, type, full);
+    }
+
+    @ApiOperation("绌烘澘鍑哄簱锛氫粠鎸囧畾绌烘澘搴撲綅鐢熸垚鍑哄簱浠诲姟鑷崇洰鏍囩珯鐐�")
+    @PreAuthorize("hasAuthority('manager:emptyOutbound:list')")
+    @PostMapping("/empty/outbound")
+    public R emptyOutbound(@RequestBody Map<String, Object> params) {
+        if (Cools.isEmpty(params)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        String staNo = (String) params.get("staNo");
+        String orgLoc = (String) params.get("orgLoc");
+        if (Cools.isEmpty(staNo)) {
+            return R.error("鐩爣绔欑偣 staNo 涓嶈兘涓虹┖锛侊紒");
+        }
+        if (Cools.isEmpty(orgLoc)) {
+            return R.error("婧愬簱浣� orgLoc 涓嶈兘涓虹┖锛侊紒");
+        }
+        LocToTaskParams map = new LocToTaskParams();
+        map.setSiteNo(staNo);
+        map.setOrgLoc(orgLoc);
+        map.setType(Constants.TASK_TYPE_OUT_STOCK_EMPTY);
+        Long userId = getLoginUserId();
+        if (userId == null) {
+            userId = 1L;
+        }
+        return R.ok("绌烘澘鍑哄簱浠诲姟鍒涘缓鎴愬姛").add(locItemService.generateTaskEmpty(map, userId));
+    }
 
 
 }

--
Gitblit v1.9.1