From b5b400a615743a74e9d127261bd3785554aa06aa Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期六, 10 一月 2026 13:34:40 +0800
Subject: [PATCH] #

---
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java |  199 ++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 186 insertions(+), 13 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
index 8af462a..3670db5 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
@@ -18,9 +18,10 @@
 import com.vincent.rsf.server.api.entity.dto.LocTypeDto;
 import com.vincent.rsf.server.api.controller.erp.params.TaskInParam;
 import com.vincent.rsf.server.api.entity.dto.SyncLocsDto;
-import com.vincent.rsf.server.api.entity.params.CommonRequest;
-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.enums.CallBackEvent;
+import com.vincent.rsf.server.api.entity.enums.WcsMsgTypeEvent;
+import com.vincent.rsf.server.api.entity.params.*;
+import com.vincent.rsf.server.manager.controller.params.GenerateTaskParams;
 import com.vincent.rsf.server.manager.enums.*;
 import com.vincent.rsf.server.api.service.WcsService;
 import com.vincent.rsf.server.api.utils.LocUtils;
@@ -43,6 +44,7 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.client.RestTemplate;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 import java.util.Random;
@@ -416,6 +418,7 @@
         ScheduledExecutorService scheduled = Executors.newScheduledThreadPool(1);
         scheduled.scheduleWithFixedDelay(new Runnable() {
             int current = 1;
+
             @Override
             public void run() {
                 params.setCurrent(current);
@@ -426,7 +429,7 @@
                 for (SyncLocsDto dto : dtos) {
                     Loc loc = new Loc();
                     String string = new Random().nextInt(10000000) + "";
-                    Loc one = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, string));
+                    Loc one = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, dto.getLocNo()));
                     if (!Objects.isNull(one)) {
                         string = new Random().nextInt(10000000) + "";
                     }
@@ -435,11 +438,11 @@
                             .setRow(dto.getRow())
                             .setLev(dto.getLev())
                             .setId(null)
-                            .setAreaId(41L)
-                            .setWarehouseId(27L)
+                            .setAreaId(42L)
+                            .setWarehouseId(29L)
                             .setBarcode(string)
                             .setCol(dto.getBay())
-                            .setType(dto.getLocType())
+                            .setType(dto.getLocType().equals("16") ? "17" : "15")
                             .setStatus(dto.getStatusBool())
                             .setUseStatus(LocStsType.getLocSts(dto.getLocSts()));
                     if (!locService.save(loc)) {
@@ -455,6 +458,7 @@
 
     /**
      * 寮傚父淇℃伅涓婃姤
+     *
      * @return
      */
     @Override
@@ -462,20 +466,47 @@
         if (Objects.isNull(params)) {
             return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
         }
-
         Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskCode, params.getSeqNum()));
         if (Objects.isNull(task)) {
-            throw new CoolException("浠诲姟涓嶅瓨鍦紒锛�");
+            throw new CoolException("浠诲姟涓嶅瓨鍦ㄥ彲宸茬粨鏉燂紒锛�");
         }
 
-        if (params.getEventType().equals("END")) {
+        /**鏂欑鎼繍涓紝 淇敼绔欑偣鐘舵��*/
+//        if (params.getEventType().equals(CallBackEvent.CALL_BACK_EVENT_OBIT.event)) {
+//            if (task.getTaskType().equals(TaskType.TASK_TYPE_IN.type)
+//                    || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_IN.type)
+//                    || task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_IN.type)
+//                    || task.getTaskType().equals(TaskType.TASK_TYPE_EMPITY_IN.type)
+//                    || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_IN.type)
+//                    || task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) {
+//
+//            }
+//            /**鍙栫瀹屾垚锛� 淇敼浠诲姟鐘舵��*/
+//        } else
+        if (params.getEventType().equals(CallBackEvent.CALL_BACK_EVENT_END.event)) {
             if (task.getTaskType().equals(TaskType.TASK_TYPE_IN.type)
                     || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_IN.type)
                     || task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_IN.type)
                     || task.getTaskType().equals(TaskType.TASK_TYPE_EMPITY_IN.type)
                     || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_IN.type)
                     || task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) {
-                if (!taskService.update(new LambdaUpdateWrapper<Task>().eq(Task::getTaskCode, task.getTaskCode())
+
+                if (!task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) {
+                    BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>().eq(BasStation::getStationName, task.getOrgSite()));
+                    if (Objects.isNull(station)) {
+                        throw new CoolException("鏁版嵁閿欒锛岀珯鐐逛笉瀛樺湪锛侊紒");
+                    }
+                    if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
+                        station.setUseStatus(LocStsType.LOC_STS_TYPE_O.type);
+                        if (!basStationService.updateById(station)) {
+                            throw new CoolException("绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+                        }
+                    }
+                }
+
+                if (!taskService.update(new LambdaUpdateWrapper<Task>()
+                        .lt(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id)
+                        .eq(Task::getTaskCode, task.getTaskCode())
                         .set(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id))) {
                     throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
                 }
@@ -484,19 +515,35 @@
                     || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_OUT.type)
                     || task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_OUT.type)
                     || task.getTaskType().equals(TaskType.TASK_TYPE_EMPITY_OUT.type)) {
+
+
+                /**淇敼鍑哄簱绔欑偣鐘舵��*/
+                BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
+                        .eq(BasStation::getStationName, task.getTargSite()));
+                if (Objects.isNull(station)) {
+                    throw new CoolException("鏁版嵁閿欒锛岀珯鐐逛笉瀛樺湪锛侊紒");
+                }
+                if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
+                    station.setUseStatus(LocStsType.LOC_STS_TYPE_F.type);
+                    if (!basStationService.updateById(station)) {
+                        throw new CoolException("绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+                    }
+                }
+
                 if (!taskService.update(new LambdaUpdateWrapper<Task>().eq(Task::getTaskCode, task.getTaskCode())
-                        .set(Task::getTaskStatus, TaskStsType.COMPLETE_OUT.id))) {
+                        .lt(Task::getTaskStatus, TaskStsType.COMPLETE_OUT.id)
+                        .set(Task::getTaskStatus, TaskStsType.AWAIT.id))) {
                     throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
                 }
             }
         }
-
         log.info(JSONObject.toJSONString(params));
         return R.ok(JSONObject.toJSONString(params));
     }
 
     /**
      * 涓嬪彂浠诲姟鑷充腑杞珹PI
+     *
      * @param params
      * @return
      */
@@ -826,6 +873,8 @@
                 .eq(Loc::getAreaId, area)
                 .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
                 .eq(Loc::getType, locTypeDto.getLocType1())
+                .ge(Loc::getRow, deviceBind.getStartRow())
+                .le(Loc::getRow, deviceBind.getEndRow())
                 .orderByAsc(Loc::getLev)
                 .orderByAsc(Loc::getCol)
                 .orderByAsc(Loc::getRow)
@@ -875,4 +924,128 @@
         inTaskMsgDto.setLocNo(locNo);
         return inTaskMsgDto;
     }
+
+    /**
+     * WCS鍏ュ簱浠诲姟鐢宠
+     *
+     * @return
+     */
+    @Override
+    public R wcsCreateInTask(CreateInTaskParam params) {
+        if (Objects.isNull(params)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, params.getBarcode()));
+        if (waitPakins.isEmpty()) {
+            throw new CoolException("鍗曟嵁涓嶅瓨鍦� 锛侊紒");
+        }
+
+        DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>().eq(DeviceSite::getSite,params.getSourceStaNo()).orderByDesc(DeviceSite::getId),false);
+        if (Objects.isNull(deviceSite)) {
+            throw new CoolException(params.getSourceStaNo()+"绔欑偣涓嶅瓨鍦紒锛�");
+        }
+        if (deviceSite.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type.toString())) {
+            throw new CoolException(params.getSourceStaNo()+"绔欑偣闈炲厜鐢电珯鐐癸紒锛佽浣跨敤PDA缁戝畾鍏ュ簱");
+        }
+        Task one = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, params.getBarcode()));
+        if (!Cools.isEmpty(one)) {
+            InTaskWcsReportParam inTaskWcsReportParam = new InTaskWcsReportParam();
+            inTaskWcsReportParam.setTaskNo(one.getTaskCode());
+            inTaskWcsReportParam.setLocNo(one.getTargLoc());
+            inTaskWcsReportParam.setTaskPri(one.getSort());
+            return R.ok("浠诲姟宸插瓨鍦ㄧ洿鎺ヤ笅鍙戯紒").add(inTaskWcsReportParam);
+        }
+        GenerateTaskParams taskParams = new GenerateTaskParams();
+        taskParams.setWaitPakins(waitPakins)
+                .setSiteId(deviceSite.getId());
+        R r = taskService.generateTasksWcs(taskParams, 111L,params.getRowList());//lsh寰呬慨鏀�  WCS鐢ㄦ埛淇℃伅
+        if (r.get("msg").equals("浠诲姟鐢熸垚瀹屾瘯锛�")) {
+            one = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, params.getBarcode()));
+            InTaskWcsReportParam inTaskWcsReportParam = new InTaskWcsReportParam();
+            inTaskWcsReportParam.setTaskNo(one.getTaskCode());
+            inTaskWcsReportParam.setLocNo(one.getTargLoc());
+            inTaskWcsReportParam.setTaskPri(one.getSort());
+            return R.ok("浠诲姟鐢熸垚瀹屾瘯锛�").add(inTaskWcsReportParam);
+        }
+        return R.error();
+//        return R.ok("浠诲姟鐢熸垚瀹屾瘯锛�");
+//        log.info(JSONObject.toJSONString(params));
+//        return R.ok(JSONObject.toJSONString(params));
+    }
+
+    /**
+     * WCS浠诲姟涓婃姤閫氱煡
+     *
+     * @return
+     */
+    @Override
+    public R wcsTaskReport(TaskReportParam params) {
+        if (Objects.isNull(params)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        Task one = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskCode, params.getSuperTaskNo()));
+        if (params.getMsgType().equals(WcsMsgTypeEvent.TASK_COMPLETE.event)){
+            if (!Cools.isEmpty(one)) {
+                one.setTaskStatus(one.getTaskType() < 100 ? TaskStsType.COMPLETE_IN.id : TaskStsType.AWAIT.id);
+                if (!taskService.updateById(one)) {
+//                    throw new CoolException("瀹屾垚浠诲姟澶辫触");
+                    return R.error("瀹屾垚浠诲姟澶辫触").add(one);
+                }
+                return R.ok("浠诲姟瀹屾垚鎴愬姛").add(one);
+            }
+        } else if (params.getMsgType().equals(WcsMsgTypeEvent.TASK_CANCEL.event)){
+//            if (!Cools.isEmpty(one)) {
+//                one.setTaskStatus(one.getTaskType() < 100 ? TaskStsType.COMPLETE_IN.id : TaskStsType.AWAIT.id);
+//                return R.ok("锛�").add(one);
+//            }
+            return R.error("鏆備笉鍏佽鍙栨秷");
+        }
+        return R.error("鏁版嵁寮傚父");
+    }
+
+    /**
+     * WCS鐢宠浠诲姟閲嶆柊鍒嗛厤鍏ュ簱
+     *
+     * @return
+     */
+    @Override
+    public R wcsReassignLoc(ReassignLocParam params) {
+        if (Objects.isNull(params)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, params.getBarcode()));
+        if (waitPakins.isEmpty()) {
+            throw new CoolException("鍗曟嵁涓嶅瓨鍦� 锛侊紒");
+        }
+        GenerateTaskParams taskParams = new GenerateTaskParams();
+        taskParams.setWaitPakins(waitPakins)
+                .setSiteId(params.getSourceStaNo().longValue());
+        return R.ok(taskService.generateTasks(taskParams, 111L));
+//        return R.ok("浠诲姟鐢熸垚瀹屾瘯锛�");
+//        log.info(JSONObject.toJSONString(params));
+//        return R.ok(JSONObject.toJSONString(params));
+    }
+
+    /**
+     * WCS鐢宠鍦ㄥ簱搴撲綅鏇存崲搴撲綅
+     *
+     * @return
+     */
+    @Override
+    public R wcsChangeLoc(ChangeLocParam params) {
+        if (Objects.isNull(params)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, params.getBarcode()));
+        if (waitPakins.isEmpty()) {
+            throw new CoolException("鍗曟嵁涓嶅瓨鍦� 锛侊紒");
+        }
+        GenerateTaskParams taskParams = new GenerateTaskParams();
+        taskParams.setWaitPakins(waitPakins)
+                .setSiteId(params.getSourceStaNo().longValue());
+        return R.ok(taskService.generateTasks(taskParams, 111L));
+//        return R.ok("浠诲姟鐢熸垚瀹屾瘯锛�");
+//        log.info(JSONObject.toJSONString(params));
+//        return R.ok(JSONObject.toJSONString(params));
+    }
 }

--
Gitblit v1.9.1