From 93fac3ecad495575f1dbe16a7eb40e70a7c87d9f Mon Sep 17 00:00:00 2001
From: 1 <1@123>
Date: 星期一, 02 二月 2026 17:36:00 +0800
Subject: [PATCH] lsh#

---
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java |  439 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 420 insertions(+), 19 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 11a9ab3..1f79199 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,8 +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.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;
@@ -29,6 +31,8 @@
 import com.vincent.rsf.server.manager.service.impl.LocServiceImpl;
 import com.vincent.rsf.server.system.constant.SerialRuleCode;
 import com.vincent.rsf.server.manager.enums.LocStsType;
+import com.vincent.rsf.server.system.entity.*;
+import com.vincent.rsf.server.system.service.impl.*;
 import com.vincent.rsf.server.system.utils.SerialRuleUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -42,8 +46,10 @@
 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;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
@@ -78,6 +84,16 @@
     private RestTemplate restTemplate;
     @Autowired
     private RemotesInfoProperties.RcsApi rcsApi;
+    @Autowired
+    private UserServiceImpl userService;
+    @Autowired
+    private TaskInstanceServiceImpl taskInstanceService;
+    @Autowired
+    private TaskInstanceNodeServiceImpl taskInstanceNodeService;
+    @Autowired
+    private FlowStepInstanceServiceImpl flowStepInstanceService;
+    @Autowired
+    private FlowInstanceServiceImpl flowInstanceService;
 
 
     @Override
@@ -197,7 +213,7 @@
                             String targetSite, String sourceSiteNo, Long loginUserId) {
         Task task = new Task();
         task.setTaskCode(ruleCode)
-                .setTaskStatus(TaskStsType.GENERATE_IN.id)
+                .setTaskStatus(TaskStsType.MISSION_INITIAL.id)
                 .setTaskType(TaskType.TASK_TYPE_IN.type)
                 .setWarehType(WarehType.WAREHOUSE_TYPE_CRN.val)
                 .setTargLoc(targetLoc)
@@ -252,6 +268,9 @@
                     .setCreateBy(loginUserId)
                     .setUpdateBy(loginUserId)
                     .setOrderId(item.getAsnId())
+                    .setSplrBatch(item.getBatch())
+                    .setPlatWorkCode(item.getPlatWorkCode())
+                    .setPlatItemId(item.getPlatItemId())
                     .setOrderItemId(item.getAsnItemId());
         }).collect(Collectors.toList());
 
@@ -407,13 +426,14 @@
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public R syncLocsToWms() {
+    public void syncLocsToWms() {
         /**RCS鍩虹閰嶇疆閾炬帴*/
         CommonRequest params = new CommonRequest();
         params.setPageSize(100);
         ScheduledExecutorService scheduled = Executors.newScheduledThreadPool(1);
         scheduled.scheduleWithFixedDelay(new Runnable() {
             int current = 1;
+
             @Override
             public void run() {
                 params.setCurrent(current);
@@ -421,33 +441,163 @@
                 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);
 
-        return R.ok();
     }
 
-    private List<SyncLocsDto> syncLocs(CommonRequest params) {
-        String rcsUrl = rcsApi.getHost() + ":" + rcsApi.getPort() + RcsConstant.syncLocs;
+    /**
+     * 寮傚父淇℃伅涓婃姤
+     *
+     * @return
+     */
+    @Override
+    public R receiveExMsg(ExMsgParams params) {
+        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("浠诲姟涓嶅瓨鍦ㄥ彲浠ョ粨鏉燂紒锛�");
+        }
+        FlowStepInstance flowStepInstance = flowStepInstanceService.getOne(new LambdaQueryWrapper<FlowStepInstance>()
+                .eq(FlowStepInstance::getTaskNo, task.getTaskCode())
+                .eq(FlowStepInstance::getWmsNowTaskStatus, task.getTaskStatus())
+                .eq(FlowStepInstance::getStatus, (short) 1).last("limit 1"));
+        if (Cools.isEmpty(flowStepInstance)){
+            return R.error(task.getTaskCode()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+        }
+        if (!MissionStepType.getTaskRECEIVE().contains(flowStepInstance.getStepType())){
+            return R.error(task.getTaskCode()+"浠诲姟鍙�==>鐩稿叧浠诲姟绫诲瀷闈炴帴鏀跺瀷锛屾楠ら敊涔憋紒锛侊紒");
+        }
+
+        FlowInstance flowInstance = flowInstanceService.getById(flowStepInstance.getFlowInstanceId());
+        if (Cools.isEmpty(flowInstance)) {
+            return R.error(task.getTaskCode()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+        }
+        List<FlowStepInstance> flowStepInstances = flowStepInstanceService.list(new LambdaQueryWrapper<FlowStepInstance>()
+                .eq(FlowStepInstance::getFlowInstanceId, flowInstance.getId()).eq(FlowStepInstance::getStatus, (short) 0));
+        flowInstance.setStatus(flowStepInstances.isEmpty()? (short) 2:(short) 1);
+        TaskInstanceNode taskInstanceNode = taskInstanceNodeService.getById(flowInstance.getNodeInstanceId());
+        if (Cools.isEmpty(taskInstanceNode)) {
+            return R.error(task.getTaskCode()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+        }
+        taskInstanceNode.setStatus(flowInstance.getStatus());
+        TaskInstance taskInstance = taskInstanceService.getById(flowInstance.getTaskId());
+        if (Cools.isEmpty(taskInstance)) {
+            return R.error(task.getTaskCode()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+        }
+
+
+        /**鏂欑鎼繍涓紝 淇敼绔欑偣鐘舵��*/
+        if (params.getEventType().equals(CallBackEvent.CALL_BACK_EVENT_BIN.event)) {
+            if (!flowStepInstance.getStepType().equals(MissionStepType.MISSION_STEP_TYPE_RECEIVE_BIN.type)) {
+                return R.error(task.getTaskCode()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+            }
+            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_EMPTY_IN.type)
+                    || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_IN.type)
+                    || 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);
+                    station.setBarcode(null);
+                    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_EMPTY_OUT.type)) {
+//                /**淇敼鍑哄簱绔欑偣鐘舵��*/
+//                BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
+//                        .eq(BasStation::getStationName, task.getOrgLoc()));
+//                if (Objects.isNull(station)) {
+//                    throw new CoolException("鏁版嵁閿欒锛岀珯鐐逛笉瀛樺湪锛侊紒");
+//                }
+//                if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
+//                    station.setUseStatus(LocStsType.LOC_STS_TYPE_O.type);
+//                    station.setBarcode(null);
+//                    if (!basStationService.updateById(station)) {
+//                        throw new CoolException("绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+//                    }
+//                }
+            }
+            /**鍙栫瀹屾垚锛� 淇敼浠诲姟鐘舵��*/
+        } else if (params.getEventType().equals(CallBackEvent.CALL_BACK_EVENT_END.event)) {
+            if (flowStepInstance.getStepType().equals(MissionStepType.MISSION_STEP_TYPE_RECEIVE_BIN.type)) {
+                return R.error(task.getTaskCode()+"浠诲姟鍙�==>璇峰厛鍑虹珯璇锋眰锛侊紒锛�");
+            }
+        }
+
+
+        task.setTaskStatus(flowStepInstance.getWmsNextTaskStatus());
+        flowStepInstance.setStatus((short)3);
+
+        flowStepInstanceService.updateById(flowStepInstance);
+        taskService.updateById(task);
+        if (flowStepInstance.getWmsNextTaskStatus() != 9999) {
+            FlowStepInstance nextFlowStepInstance = flowStepInstanceService.getOne(new LambdaQueryWrapper<FlowStepInstance>()
+                    .eq(FlowStepInstance::getStatus, (short)0)
+                    .eq(FlowStepInstance::getStepOrder, flowStepInstance.getStepOrder() + 1)
+                    .eq(FlowStepInstance::getWmsNowTaskStatus, flowStepInstance.getWmsNextTaskStatus()));
+            if (Cools.isEmpty(nextFlowStepInstance)) {
+                return R.error(task.getTaskCode()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+            }
+            nextFlowStepInstance.setStatus((short)1);
+
+            flowStepInstanceService.updateById(nextFlowStepInstance);
+        } else {
+            taskInstance.setStatus((short)2);
+            taskInstanceService.updateById(taskInstance);
+        }
+        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));
         HttpHeaders headers = new HttpHeaders();
         headers.add("Content-Type", "application/json");
@@ -464,8 +614,7 @@
             try {
                 CommonResponse result = objectMapper.readValue(exchange.getBody(), CommonResponse.class);
                 if (result.getCode() == 200) {
-                    JSONObject jsonObject = JSONObject.parseObject(exchange.getBody()).getJSONObject("data");
-                    return JSONArray.parseArray(jsonObject.getJSONArray("records").toJSONString(), SyncLocsDto.class);
+                    return R.ok();
                 } else {
                     throw new CoolException("浠诲姟涓嬪彂澶辫触锛侊紒");
                 }
@@ -475,7 +624,37 @@
         }
     }
 
-    private InTaskMsgDto getLocNoCrn(String orgLoc, DeviceBind deviceBind, Long area, Integer sourceStaNo, String matnr, String batch, LocTypeDto locTypeDto, int times, Integer ioType) {
+
+    private List<SyncLocsDto> syncLocs(CommonRequest params) {
+        String rcsUrl = rcsApi.getHost() + ":" + rcsApi.getPort() + RcsConstant.syncLocs;
+        log.info("搴撲綅鍚屾锛岃姹傚湴鍧�锛� {}锛� 璇锋眰鍙傛暟锛� {}", rcsUrl, 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(rcsUrl, HttpMethod.POST, httpEntity, String.class);
+        log.info("搴撲綅鍚屾锛屽搷搴旂粨鏋滐細 {}", exchange);
+        if (Objects.isNull(exchange.getBody())) {
+            throw new CoolException("搴撲綅鍚屾涓嬪彂澶辫触锛侊紒");
+        } 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) {
+                    JSONObject jsonObject = JSONObject.parseObject(exchange.getBody());
+                    return JSONArray.parseArray(jsonObject.getJSONArray("data").toJSONString(), SyncLocsDto.class);
+                } else {
+                    throw new CoolException("搴撲綅鍚屾澶辫触锛侊紒");
+                }
+            } catch (JsonProcessingException e) {
+                throw new CoolException(e.getMessage());
+            }
+        }
+    }
+
+    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 = "";
         }
@@ -564,7 +743,7 @@
         if (Cools.isEmpty(deviceSite)) {
             channel = 0;
         } else {
-            inTaskMsgDto.setStaNo(Integer.parseInt(deviceSite.getDeviceSite()));
+            inTaskMsgDto.setStaNo(deviceSite.getDeviceSite());
         }
 
         //鏇存柊褰撳墠鎺�
@@ -728,7 +907,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 = "";
         }
@@ -742,6 +921,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)
@@ -757,13 +938,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)) {
@@ -791,4 +972,224 @@
         inTaskMsgDto.setLocNo(locNo);
         return inTaskMsgDto;
     }
+
+    /**
+     * WCS鍏ュ簱浠诲姟鐢宠
+     *
+     * @return
+     */
+    @Override
+    public R wcsCreateInTask(CreateInTaskParam params) {
+        if (Objects.isNull(params)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+
+        BasStation basStation = basStationService.getOne(new LambdaQueryWrapper<BasStation>().eq(BasStation::getStationName, params.getSourceStaNo()).orderByDesc(BasStation::getId), false);
+        if (Objects.isNull(basStation)) {
+            throw new CoolException(params.getSourceStaNo()+"绔欑偣涓嶅瓨鍦紒锛�");
+        }
+        if (!basStation.getType().equals(StationTypeEnum.STATION_TYPE_MUTI.type)) {
+            throw new CoolException(params.getSourceStaNo()+"绔欑偣闈炴櫤鑳界珯鐐癸紒锛佽浣跨敤PDA缁戝畾鍏ュ簱");
+        }
+        Task one = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, params.getBarcode()));
+        if (!Cools.isEmpty(one)) {
+            if (!one.getTaskStatus().equals(TaskStsType.WCS_EXECUTE_IN.id)) {
+                return R.error("浠诲姟宸插瓨鍦ㄤ絾鏄姸鎬佷笉涓�鑷达紒锛侊紒").add("浠诲姟宸插瓨鍦ㄤ絾鏄姸鎬佷笉涓�鑷达紒锛侊紒");
+            }
+            InTaskWcsReportParam inTaskWcsReportParam = new InTaskWcsReportParam();
+            inTaskWcsReportParam.setTaskNo(one.getTaskCode());
+            inTaskWcsReportParam.setLocNo(one.getTargLoc());
+            inTaskWcsReportParam.setTaskPri(one.getSort());
+            return R.ok("浠诲姟宸插瓨鍦ㄧ洿鎺ヤ笅鍙戯紒").add(inTaskWcsReportParam);
+        }
+        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(basStation.getId());
+
+        User wcs = userService.getByUsername("wcs", 1L);
+        Long wcsId = 1111L;
+        if (!Cools.isEmpty(wcs)) {
+            wcsId = wcs.getId();
+        }
+        R r = taskService.generateTasksWcs(taskParams, wcsId,params.getRowList());
+        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 task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskCode, params.getSuperTaskNo()));
+        if (Cools.isEmpty(task)) {
+            return R.error(params.getSuperTaskNo()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟锛侊紒锛�");
+        }
+        if (params.getMsgType().equals(WcsMsgTypeEvent.TASK_COMPLETE.event)){
+            if (!Cools.isEmpty(task)) {
+                FlowStepInstance flowStepInstance = flowStepInstanceService.getOne(new LambdaQueryWrapper<FlowStepInstance>()
+                        .eq(FlowStepInstance::getTaskNo, task.getTaskCode())
+                        .eq(FlowStepInstance::getWmsNowTaskStatus, task.getTaskStatus())
+                        .eq(FlowStepInstance::getStatus, (short) 1).last("limit 1"));
+                if (Cools.isEmpty(flowStepInstance)){
+                    return R.error(params.getSuperTaskNo()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+                }
+
+                if (!MissionStepType.getTaskRECEIVE().contains(flowStepInstance.getStepType())){
+                    return R.error(params.getSuperTaskNo()+"浠诲姟鍙�==>鐩稿叧浠诲姟绫诲瀷闈炴帴鏀跺瀷锛屾楠ら敊涔憋紒锛侊紒");
+                }
+
+                FlowInstance flowInstance = flowInstanceService.getById(flowStepInstance.getFlowInstanceId());
+                if (Cools.isEmpty(flowInstance)) {
+                    return R.error(params.getSuperTaskNo()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+                }
+                List<FlowStepInstance> flowStepInstances = flowStepInstanceService.list(new LambdaQueryWrapper<FlowStepInstance>()
+                        .eq(FlowStepInstance::getFlowInstanceId, flowInstance.getId()).eq(FlowStepInstance::getStatus, (short) 0));
+                flowInstance.setStatus(flowStepInstances.isEmpty()? (short) 2:(short) 1);
+                TaskInstanceNode taskInstanceNode = taskInstanceNodeService.getById(flowInstance.getNodeInstanceId());
+                if (Cools.isEmpty(taskInstanceNode)) {
+                    return R.error(params.getSuperTaskNo()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+                }
+                taskInstanceNode.setStatus(flowInstance.getStatus());
+                TaskInstance taskInstance = taskInstanceService.getById(flowInstance.getTaskId());
+                if (Cools.isEmpty(taskInstance)) {
+                    return R.error(params.getSuperTaskNo()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+                }
+                task.setTaskStatus(flowStepInstance.getWmsNextTaskStatus());
+                flowStepInstance.setStatus((short)3);
+
+                flowStepInstanceService.updateById(flowStepInstance);
+                taskService.updateById(task);
+                if (flowStepInstance.getWmsNextTaskStatus() != 9999) {
+                    FlowStepInstance nextFlowStepInstance = flowStepInstanceService.getOne(new LambdaQueryWrapper<FlowStepInstance>()
+                            .eq(FlowStepInstance::getStatus, (short)0)
+                            .eq(FlowStepInstance::getStepOrder, flowStepInstance.getStepOrder() + 1)
+                            .eq(FlowStepInstance::getWmsNowTaskStatus, flowStepInstance.getWmsNextTaskStatus()));
+                    if (Cools.isEmpty(nextFlowStepInstance)) {
+                        return R.error(task.getTaskCode()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+                    }
+                    nextFlowStepInstance.setStatus((short)1);
+
+                    flowStepInstanceService.updateById(nextFlowStepInstance);
+                } else {
+                    taskInstance.setStatus((short)2);
+                    taskInstanceService.updateById(taskInstance);
+                }
+                return R.ok("浠诲姟瀹屾垚鎴愬姛").add(task);
+
+
+//                one.setTaskStatus(one.getTaskType() < 100 ? TaskStsType.COMPLETE_IN.id : TaskStsType.AWAIT.id);
+//                if (!taskService.updateById(one)) {
+////                    throw new CoolException("瀹屾垚浠诲姟澶辫触");
+//                    return R.error("瀹屾垚浠诲姟澶辫触").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 wcsTaskReport2(TaskReportParam params) {
+        if (Objects.isNull(params)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        Task one = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskCode, params.getSuperTaskNo()));
+        if (Cools.isEmpty(one)) {
+            return R.error(params.getSuperTaskNo()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟锛侊紒锛�");
+        }
+        if (params.getMsgType().equals(WcsMsgTypeEvent.TASK_COMPLETE.event)){
+            if (!Cools.isEmpty(one)) {
+                one.setTaskStatus(TaskStsType.MISSION_INITIAL.id);
+                one.setOrgSite(one.getTargSite());
+                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