From f99e3966686d3891b814ff28d200b001fcdc8e1e Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期四, 05 二月 2026 12:54:26 +0800
Subject: [PATCH] 组托优化

---
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java |  143 ++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 122 insertions(+), 21 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 f765964..a014e06 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,6 +18,7 @@
 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.enums.CallBackEvent;
 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;
@@ -45,6 +46,7 @@
 
 import java.util.List;
 import java.util.Objects;
+import java.util.Random;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
@@ -415,6 +417,7 @@
         ScheduledExecutorService scheduled = Executors.newScheduledThreadPool(1);
         scheduled.scheduleWithFixedDelay(new Runnable() {
             int current = 1;
+
             @Override
             public void run() {
                 params.setCurrent(current);
@@ -422,24 +425,30 @@
                 if (dtos.isEmpty()) {
                     scheduled.shutdown();
                 }
-                dtos.forEach(dto -> {
+                for (SyncLocsDto dto : dtos) {
                     Loc loc = new Loc();
+                    String string = new Random().nextInt(10000000) + "";
+                    Loc one = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, dto.getLocNo()));
+                    if (!Objects.isNull(one)) {
+                        string = new Random().nextInt(10000000) + "";
+                    }
                     loc.setCode(dto.getLocNo())
                             .setBarcode(dto.getBarcode())
                             .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)) {
                         scheduled.shutdown();
                         throw new CoolException("WCS搴撲綅鍚屾澶辫触锛侊紒");
                     }
-                });
+                }
                 current++;
             }
         }, 1, 1, TimeUnit.SECONDS);
@@ -448,55 +457,145 @@
 
     /**
      * 寮傚父淇℃伅涓婃姤
+     *
      * @return
      */
     @Override
     public R receiveExMsg(ExMsgParams params) {
         if (Objects.isNull(params)) {
+            log.error("RCS鍥炶皟涓虹┖锛�");
             return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
         }
-
+        log.info("========== 鎺ユ敹RCS鍥炶皟 ==========");
+        log.info("浠诲姟缂栧彿锛歿}锛屼簨浠剁被鍨嬶細{}", params.getSeqNum(), params.getEventType());
         Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskCode, params.getSeqNum()));
         if (Objects.isNull(task)) {
-            throw new CoolException("浠诲姟涓嶅瓨鍦紒锛�");
+            log.error("浠诲姟涓嶅瓨鍦ㄦ垨宸茬粨鏉燂紒浠诲姟缂栧彿锛歿}", params.getSeqNum());
+            throw new CoolException("浠诲姟涓嶅瓨鍦ㄦ垨宸茬粨鏉燂紒锛�");
         }
-        
-        if (params.getEventType().equals("END")) {
+        log.info("鏌ヨ鍒颁换鍔� - 浠诲姟缂栫爜锛歿}锛屼换鍔$被鍨嬶細{}锛屽綋鍓嶇姸鎬侊細{}", 
+                task.getTaskCode(), task.getTaskType(), task.getTaskStatus());
+
+        /**鏂欑鎼繍涓紝 淇敼绔欑偣鐘舵��*/
+//        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())
-                        .set(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id))) {
-                    throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+
+                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)) {
+                        log.error("鍏ュ簱绔欑偣涓嶅瓨鍦� - 绔欑偣鍚嶇О锛歿}锛屼换鍔$紪鐮侊細{}", task.getOrgSite(), task.getTaskCode());
+                        throw new CoolException("鏁版嵁閿欒锛岀珯鐐逛笉瀛樺湪锛侊紒");
+                    }
+                    log.info("鏌ヨ鍒板叆搴撶珯鐐� - 绔欑偣鍚嶇О锛歿}锛岀珯鐐圭被鍨嬶細{}锛屽綋鍓嶇姸鎬侊細{}", 
+                            station.getStationName(), station.getType(), station.getUseStatus());
+                    if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
+                        log.info("鏇存柊鍏ュ簱绔欑偣鐘舵�� - 绔欑偣鍚嶇О锛歿}锛屾柊鐘舵�侊細{}", station.getStationName(), LocStsType.LOC_STS_TYPE_O.type);
+                        station.setUseStatus(LocStsType.LOC_STS_TYPE_O.type);
+                        if (!basStationService.updateById(station)) {
+                            log.error("鍏ュ簱绔欑偣鐘舵�佷慨鏀瑰け璐� - 绔欑偣鍚嶇О锛歿}", station.getStationName());
+                            throw new CoolException("绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+                        }
+                        log.info("鍏ュ簱绔欑偣鐘舵�佹洿鏂版垚鍔� - 绔欑偣鍚嶇О锛歿}", station.getStationName());
+                    }
+                }
+
+                log.info("鍑嗗鏇存柊鍏ュ簱浠诲姟鐘舵�� - 浠诲姟缂栫爜锛歿}锛屽綋鍓嶇姸鎬侊細{}锛岀洰鏍囩姸鎬侊細{}", 
+                        task.getTaskCode(), task.getTaskStatus(), TaskStsType.COMPLETE_IN.id);
+                
+                // 濡傛灉浠诲姟鐘舵�佸凡缁忓ぇ浜庣瓑浜庣洰鏍囩姸鎬侊紝璺宠繃鏇存柊
+                if (task.getTaskStatus() >= TaskStsType.COMPLETE_IN.id) {
+                    log.warn("鍏ュ簱浠诲姟鐘舵�佸凡澶т簬绛変簬鐩爣鐘舵�侊紝璺宠繃鏇存柊 - 浠诲姟缂栫爜锛歿}锛屽綋鍓嶇姸鎬侊細{}锛岀洰鏍囩姸鎬侊細{}", 
+                            task.getTaskCode(), task.getTaskStatus(), TaskStsType.COMPLETE_IN.id);
+                } else {
+                    boolean updated = taskService.update(new LambdaUpdateWrapper<Task>()
+                            .lt(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id)
+                            .eq(Task::getTaskCode, task.getTaskCode())
+                            .set(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id));
+                    if (!updated) {
+                        log.error("鍏ュ簱浠诲姟鐘舵�佷慨鏀瑰け璐� - 浠诲姟缂栫爜锛歿}锛屽綋鍓嶇姸鎬侊細{}锛岀洰鏍囩姸鎬侊細{}锛屽彲鑳戒换鍔$姸鎬佸凡澶т簬绛変簬鐩爣鐘舵��", 
+                                task.getTaskCode(), task.getTaskStatus(), TaskStsType.COMPLETE_IN.id);
+                        throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛佸綋鍓嶄换鍔$姸鎬侊細" + task.getTaskStatus() + "锛岀洰鏍囩姸鎬侊細" + TaskStsType.COMPLETE_IN.id);
+                    }
+                    log.info("鍏ュ簱浠诲姟鐘舵�佹洿鏂版垚鍔� - 浠诲姟缂栫爜锛歿}", task.getTaskCode());
                 }
             } else if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type)
                     || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_AGAIN_OUT.type)
                     || 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)) {
-                if (!taskService.update(new LambdaUpdateWrapper<Task>().eq(Task::getTaskCode, task.getTaskCode())
-                        .set(Task::getTaskStatus, TaskStsType.COMPLETE_OUT.id))) {
-                    throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+
+                /**淇敼鍑哄簱绔欑偣鐘舵��*/
+                BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
+                        .eq(BasStation::getStationName, task.getTargSite()));
+                if (Objects.isNull(station)) {
+                    log.error("鍑哄簱绔欑偣涓嶅瓨鍦� - 绔欑偣鍚嶇О锛歿}锛屼换鍔$紪鐮侊細{}", task.getTargSite(), task.getTaskCode());
+                    throw new CoolException("鏁版嵁閿欒锛岀珯鐐逛笉瀛樺湪锛侊紒");
+                }
+                log.info("鏌ヨ鍒板嚭搴撶珯鐐� - 绔欑偣鍚嶇О锛歿}锛岀珯鐐圭被鍨嬶細{}锛屽綋鍓嶇姸鎬侊細{}", 
+                        station.getStationName(), station.getType(), station.getUseStatus());
+                if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
+                    log.info("鏇存柊鍑哄簱绔欑偣鐘舵�� - 绔欑偣鍚嶇О锛歿}锛屾柊鐘舵�侊細{}", station.getStationName(), LocStsType.LOC_STS_TYPE_F.type);
+                    station.setUseStatus(LocStsType.LOC_STS_TYPE_F.type);
+                    if (!basStationService.updateById(station)) {
+                        log.error("鍑哄簱绔欑偣鐘舵�佷慨鏀瑰け璐� - 绔欑偣鍚嶇О锛歿}", station.getStationName());
+                        throw new CoolException("绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+                    }
+                    log.info("鍑哄簱绔欑偣鐘舵�佹洿鏂版垚鍔� - 绔欑偣鍚嶇О锛歿}", station.getStationName());
+                }
+                log.info("鍑嗗鏇存柊鍑哄簱浠诲姟鐘舵�� - 浠诲姟缂栫爜锛歿}锛屽綋鍓嶇姸鎬侊細{}锛岀洰鏍囩姸鎬侊細{}", 
+                        task.getTaskCode(), task.getTaskStatus(), TaskStsType.COMPLETE_OUT.id);
+                
+                // 濡傛灉浠诲姟鐘舵�佸凡缁忓ぇ浜庣瓑浜庣洰鏍囩姸鎬侊紝璺宠繃鏇存柊
+                if (task.getTaskStatus() >= TaskStsType.COMPLETE_OUT.id) {
+                    log.warn("鍑哄簱浠诲姟鐘舵�佸凡澶т簬绛変簬鐩爣鐘舵�侊紝璺宠繃鏇存柊 - 浠诲姟缂栫爜锛歿}锛屽綋鍓嶇姸鎬侊細{}锛岀洰鏍囩姸鎬侊細{}", 
+                            task.getTaskCode(), task.getTaskStatus(), TaskStsType.COMPLETE_OUT.id);
+                } else {
+                    boolean updated = taskService.update(new LambdaUpdateWrapper<Task>().eq(Task::getTaskCode, task.getTaskCode())
+                            .lt(Task::getTaskStatus, TaskStsType.COMPLETE_OUT.id)
+                            .set(Task::getTaskStatus, TaskStsType.COMPLETE_OUT.id));
+                    if (!updated) {
+                        log.error("鍑哄簱浠诲姟鐘舵�佷慨鏀瑰け璐� - 浠诲姟缂栫爜锛歿}锛屽綋鍓嶇姸鎬侊細{}锛岀洰鏍囩姸鎬侊細{}锛屽彲鑳戒换鍔$姸鎬佸凡澶т簬绛変簬鐩爣鐘舵��", 
+                                task.getTaskCode(), task.getTaskStatus(), TaskStsType.COMPLETE_OUT.id);
+                        throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛佸綋鍓嶄换鍔$姸鎬侊細" + task.getTaskStatus() + "锛岀洰鏍囩姸鎬侊細" + TaskStsType.COMPLETE_OUT.id);
+                    }
+                    log.info("鍑哄簱浠诲姟鐘舵�佹洿鏂版垚鍔� - 浠诲姟缂栫爜锛歿}", task.getTaskCode());
                 }
             }
+        } else {
+            log.warn("鏈鐞嗙殑浜嬩欢绫诲瀷 - 浜嬩欢绫诲瀷锛歿}锛屼换鍔$紪鐮侊細{}锛屼换鍔$被鍨嬶細{}", 
+                    params.getEventType(), task.getTaskCode(), task.getTaskType());
         }
-
-        log.info(JSONObject.toJSONString(params));
+        log.info("========== 浠诲姟鎵ц閫氱煡涓婃姤澶勭悊瀹屾垚 ==========");
+        log.info("澶勭悊缁撴灉锛歿}", JSONObject.toJSONString(params));
         return R.ok(JSONObject.toJSONString(params));
     }
 
     /**
      * 涓嬪彂浠诲姟鑷充腑杞珹PI
+     *
      * @param params
      * @return
      */
     @Override
     public R pubWcsTask(WcsTaskParams params) {
         String rcsUrl = rcsApi.getHost() + ":" + rcsApi.getPort() + RcsConstant.pubTask;
-        log.info("浠诲姟涓嬪彂锛岃姹傚湴鍧�锛� {}锛� 璇锋眰鍙傛暟锛� {}", rcsUrl, JSONObject.toJSONString(params));
+        log.info("浠诲姟涓嬪彂锛岃姹傚湴鍧�3锛� {}锛� 璇锋眰鍙傛暟锛� {}", rcsUrl, JSONObject.toJSONString(params));
         HttpHeaders headers = new HttpHeaders();
         headers.add("Content-Type", "application/json");
         headers.add("api-version", "v2.0");
@@ -641,7 +740,7 @@
         if (Cools.isEmpty(deviceSite)) {
             channel = 0;
         } else {
-            inTaskMsgDto.setStaNo(Integer.parseInt(deviceSite.getDeviceSite()));
+            inTaskMsgDto.setStaNo(deviceSite.getDeviceSite());
         }
 
         //鏇存柊褰撳墠鎺�
@@ -819,6 +918,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)
@@ -834,13 +935,13 @@
         DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
                 .eq(DeviceSite::getType, ioType)
                 .eq(DeviceSite::getSite, sourceStaNo)
-                .eq(DeviceSite::getDeviceCode, loc.getDeviceNo())
+                .eq(!Objects.isNull(loc.getDeviceNo()), DeviceSite::getDeviceCode, loc.getDeviceNo())
         );
         if (Cools.isEmpty(deviceSite)) {
             deviceNo = 0;
             loc = null;
         } else {
-            inTaskMsgDto.setStaNo(Integer.parseInt(deviceSite.getDeviceSite()));
+            inTaskMsgDto.setStaNo(deviceSite.getDeviceSite());
         }
         // 閫掑綊鏌ヨ
         if (Cools.isEmpty(loc) || !loc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {

--
Gitblit v1.9.1