From 1e1cedc70758a7c17ccf63ea11d1db70c409aa66 Mon Sep 17 00:00:00 2001
From: skyouc <958836976@qq.com>
Date: 星期五, 05 九月 2025 09:45:15 +0800
Subject: [PATCH] Merge branch 'devlop' of http://47.97.1.152:5880/r/wms-master into devlop

---
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java |   97 ++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 89 insertions(+), 8 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 27b6502..3005f19 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,8 +425,13 @@
                 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, string));
+                    if (!Objects.isNull(one)) {
+                        string = new Random().nextInt(10000000) + "";
+                    }
                     loc.setCode(dto.getLocNo())
                             .setBarcode(dto.getBarcode())
                             .setRow(dto.getRow())
@@ -431,6 +439,7 @@
                             .setId(null)
                             .setAreaId(41L)
                             .setWarehouseId(27L)
+                            .setBarcode(string)
                             .setCol(dto.getBay())
                             .setType(dto.getLocType())
                             .setStatus(dto.getStatusBool())
@@ -439,7 +448,7 @@
                         scheduled.shutdown();
                         throw new CoolException("WCS搴撲綅鍚屾澶辫触锛侊紒");
                     }
-                });
+                }
                 current++;
             }
         }, 1, 1, TimeUnit.SECONDS);
@@ -448,6 +457,7 @@
 
     /**
      * 寮傚父淇℃伅涓婃姤
+     *
      * @return
      */
     @Override
@@ -455,13 +465,82 @@
         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("浠诲姟涓嶅瓨鍦ㄥ彲宸茬粨鏉燂紒锛�");
+        }
+
+        /**鏂欑鎼繍涓紝 淇敼绔欑偣鐘舵��*/
+        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)) {
+                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("绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+                        }
+                    }
+                }
+            } 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)) {
+                /**淇敼鍑哄簱绔欑偣鐘舵��*/
+                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("绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+                    }
+                }
+            }
+            /**鍙栫瀹屾垚锛� 淇敼浠诲姟鐘舵��*/
+        } 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>()
+                        .lt(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id)
+                        .eq(Task::getTaskCode, task.getTaskCode())
+                        .set(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id))) {
+                    throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+                }
+            } 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())
+                        .lt(Task::getTaskStatus, TaskStsType.COMPLETE_OUT.id)
+                        .set(Task::getTaskStatus, TaskStsType.COMPLETE_OUT.id))) {
+                    throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+                }
+            }
+        }
         log.info(JSONObject.toJSONString(params));
         return R.ok(JSONObject.toJSONString(params));
     }
 
     /**
      * 涓嬪彂浠诲姟鑷充腑杞珹PI
+     *
      * @param params
      * @return
      */
@@ -524,7 +603,7 @@
         }
     }
 
-    private InTaskMsgDto getLocNoCrn(String orgLoc, DeviceBind deviceBind, Long area, Integer sourceStaNo, String matnr, String batch, LocTypeDto locTypeDto, int times, Integer ioType) {
+    private InTaskMsgDto getLocNoCrn(String orgLoc, DeviceBind deviceBind, Long area, String sourceStaNo, String matnr, String batch, LocTypeDto locTypeDto, int times, Integer ioType) {
         if (Cools.isEmpty(matnr)) {  //鐗╂枡鍙�
             matnr = "";
         }
@@ -613,7 +692,7 @@
         if (Cools.isEmpty(deviceSite)) {
             channel = 0;
         } else {
-            inTaskMsgDto.setStaNo(Integer.parseInt(deviceSite.getDeviceSite()));
+            inTaskMsgDto.setStaNo(deviceSite.getDeviceSite());
         }
 
         //鏇存柊褰撳墠鎺�
@@ -777,7 +856,7 @@
         return inTaskMsgDto;
     }
 
-    private InTaskMsgDto getLocNoCtu(DeviceBind deviceBind, Long area, Integer sourceStaNo, String matnr, String batch, LocTypeDto locTypeDto, int times, Integer ioType) {
+    private InTaskMsgDto getLocNoCtu(DeviceBind deviceBind, Long area, String sourceStaNo, String matnr, String batch, LocTypeDto locTypeDto, int times, Integer ioType) {
         if (Cools.isEmpty(matnr)) {  //鐗╂枡鍙�
             matnr = "";
         }
@@ -791,6 +870,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)
@@ -806,13 +887,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