From d0226747665355acecd5b4f2b5c0beb020586729 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期五, 17 一月 2025 15:37:32 +0800 Subject: [PATCH] # 23. PDA拣货单据,勾选或点击确认按钮后,完成当前单据 (已完成) 24. PDA出库成功后,界面数据重置,避免重复操作 (已修复) 25. PDA接口请求,添加一个Loading遮档 (已修复) 27. 非平库单据,在平库可做入库操作 (已修复) 28. 平库已组拖数据,组拖完成后依然可组拖 (已修复) 29. 平库入库后,订单明细没有添加(已修复) 30. 平库入库后,单据类型没有修改(已修复) 31. 没有绑定播种位,不能进行播种,前后端都需加判定(已修复) 33. 平库入库未修改入库已完成数量(已修复) 34. cacheSite缓存站点逻辑需重新梳理,入库生成波次时(已完成) 35. PDA添加发货确认,默认全选 (已修复) 36. 大屏获取任务时,是由容器到达的拖盘码确认通知 (已修复) 37. 拣货单序号不显示 问题修复 (已修复) 42. pda发货确认,添加不同颜色区分是否全部完成拣货,绿色全部拣货完成,红色完成部分拣货(已修复) 43. CTU入库完成后,订单明细没有删除,执行中数量清空(已修复) 44. 平库入库完成后,历史档明细完成数量没有更新 (已修复) 45. PDA料号不显示 (已修复) 46. 发货完成后,波次管理数据未加入历史档 (已修复) --- zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/Impl/WcsApiServiceImpl.java | 416 +++++++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 334 insertions(+), 82 deletions(-) diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/Impl/WcsApiServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/Impl/WcsApiServiceImpl.java index a4223a4..9d767e8 100644 --- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/Impl/WcsApiServiceImpl.java +++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/Impl/WcsApiServiceImpl.java @@ -1,24 +1,39 @@ package com.zy.asrs.wms.apis.wcs.services.Impl; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.zy.asrs.framework.common.R; import com.zy.asrs.framework.exception.CoolException; -import com.zy.asrs.wms.apis.wcs.entity.domain.EssTaskStatus; +import com.zy.asrs.wms.apis.wcs.entity.domain.SystemProperties; +import com.zy.asrs.wms.apis.wcs.entity.enums.EssTaskStatus; import com.zy.asrs.wms.apis.wcs.entity.request.*; +import com.zy.asrs.wms.apis.wcs.entity.response.CommonReponse; import com.zy.asrs.wms.apis.wcs.services.WcsApiService; -import com.zy.asrs.wms.asrs.entity.Task; +import com.zy.asrs.wms.asrs.entity.*; +import com.zy.asrs.wms.asrs.entity.enums.CacheSiteStatusType; +import com.zy.asrs.wms.asrs.entity.enums.OrderPickStatus; import com.zy.asrs.wms.asrs.entity.enums.TaskStsType; -import com.zy.asrs.wms.asrs.service.TaskService; -import com.zy.asrs.wms.asrs.service.WaitPakinService; -import com.zy.asrs.wms.asrs.service.WorkService; +import com.zy.asrs.wms.asrs.service.*; import io.jsonwebtoken.lang.Collections; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestTemplate; +import java.math.BigDecimal; +import java.util.Date; import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; @Slf4j @Service @@ -30,7 +45,22 @@ private WorkService workService; @Autowired private TaskService taskService; + @Autowired + private TaskDetlService taskDetlService; + @Autowired + private CacheSiteService cacheSiteService; + @Autowired + private OrderService orderService; + @Autowired + private OrderDetlService orderDetlService; + @Autowired + private WaveSeedService waveSeedService; + @Autowired + private RestTemplate restTemplate; + + @Autowired + private PlatformService platformService; /** @@ -57,19 +87,37 @@ //DONE 鏍规嵁ESS杩斿洖鐨勫鍣ㄧ紪鐮佷慨鏀逛换鍔℃。涓殑杈撻�佺嚎璧峰浣嶇疆鑺傜偣锛屽強浠诲姟妗e鍣ㄥ埌杈剧姸鎬� taskService.update(new LambdaUpdateWrapper<Task>() .set(Task::getTaskSts, TaskStsType.WCS_CONTAINER_RECEIVE.id) - .set(Task::getOriginLoc, arrivedParam.getSlotCode()) + //杈撻�佺嚎鑺傜偣缂栫爜锛屼笉鏄簮搴撲綅 +// .set(Task::getOriginLoc, arrivedParam.getSlotCode()) .eq(Task::getBarcode, arrivedParam.getContainerCode())); } else { + //瀹瑰櫒鍒拌揪鏃舵洿鏂颁换鍔$姸鎬佷负锛氬叆搴撳畬鎴愶紝瀹氭椂浠诲姟鏍规嵁鐘舵�佺爜鏇存柊搴撳瓨 + //褰撶姸鎬佷负鍏ュ簱瀹屾垚鏃讹紝鏇存柊搴撳瓨淇℃伅 +// boolean update = taskService.update(new LambdaUpdateWrapper<Task>() +// .set(Task::getTaskSts, TaskStsType.COMPLETE_OUT.id) +// .set(Task::getOriginLoc, arrivedParam.getSlotCode()) +// .eq(Task::getBarcode, arrivedParam.getContainerCode())); + //fixme 瀹瑰櫒鍒拌揪鐘舵�佹洿鏀逛负鎾涓�... boolean update = taskService.update(new LambdaUpdateWrapper<Task>() - .set(Task::getTaskSts, TaskStsType.WCS_EXECUTE_OUT_ARRIVED.id) + .set(Task::getTaskSts, TaskStsType.WAVE_SEED.id) .set(Task::getOriginLoc, arrivedParam.getSlotCode()) .eq(Task::getBarcode, arrivedParam.getContainerCode())); + if (!update) { + throw new CoolException("瀹瑰櫒鍒拌揪浠诲姟鏇存柊澶辫触锛侊紒"); + } } return R.success("success"); } + /** + * 瀹瑰櫒鎵ц鐘舵�佷笂鎶� + * + * @param callbackParam + * @param stockType + * @param hostId + */ @Override @Transactional(rollbackFor = Exception.class) public void receiveTaskStatus(TasksStatusCallbackParam callbackParam, String stockType, Long hostId) { @@ -78,90 +126,294 @@ .eq(Task::getTaskNo, callbackParam.getTaskCode())); if (!Collections.isEmpty(list)) { list.forEach(task -> { - TaskStsType taskStsType = null; - if (stockType.equals("inStock")) { //鍏ュ簱浠诲姟 - if (callbackParam.getEventType().equals(EssTaskStatus.TASK_EVENT_TOTE_LOAD.event)) { //涓婃姤鍙栫鐘舵�� - if (task.getTaskSts() == TaskStsType.WCS_CONVEYOR_START.id) { - taskStsType = TaskStsType.WCS_TOTE_LOAD; - } else { - String errMsg = "浠诲姟缂栧彿锛�" + task.getTaskNo() + "鐘舵�佷负涓嶅尮閰嶏紝" + "涓嶈兘鎵ц锛�" + TaskStsType.WCS_TOTE_LOAD.desc + "浠诲姟"; - log.error(errMsg); - throw new CoolException(errMsg); - } - } else if (callbackParam.getEventType().equals(EssTaskStatus.TASK_EVENT_TOTE_UNLOAD.event)) { //涓婃姤鏀剧鐘舵�� - if (task.getTaskSts() == TaskStsType.WCS_TOTE_LOAD.id) { - taskStsType = TaskStsType.WCS_TOTE_UNLOAD; - } else { - String errMsg = "浠诲姟缂栧彿锛�" + task.getTaskNo() + "鐘舵�佷负涓嶅尮閰嶏紝" + "涓嶈兘鎵ц锛�" + TaskStsType.WCS_TOTE_UNLOAD.desc + "浠诲姟"; - log.error(errMsg); - throw new CoolException(errMsg); - } - } else if (callbackParam.getEventType().equals(EssTaskStatus.TASK_EVENT_STATUS.event)) { //TODO 闇�纭涓婃姤浠诲姟涓紝浠诲姟瀹屾垚鏄摢涓簨浠讹紝鐩墠鏆傚畾task浜嬩欢 - if (task.getTaskSts() == TaskStsType.WCS_TOTE_UNLOAD.id) { - taskStsType = TaskStsType.WCS_PUTAWAY_SUCESS; - } else { - String errMsg = "浠诲姟缂栧彿锛�" + task.getTaskNo() + "鐘舵�佷负涓嶅尮閰嶏紝" + "涓嶈兘鎵ц锛�" + TaskStsType.WCS_PUTAWAY_SUCESS.desc + "浠诲姟"; - log.error(errMsg); - throw new CoolException(errMsg); - } + TaskStsType taskStsType = null; + if (stockType.equals("inStock")) { //鍏ュ簱浠诲姟 + if (callbackParam.getEventType().equals(EssTaskStatus.TASK_EVENT_TOTE_LOAD.event)) { //涓婃姤鍙栫鐘舵�� + if (task.getTaskSts() == TaskStsType.WCS_CONVEYOR_START.id) { + taskStsType = TaskStsType.WCS_TOTE_LOAD; + } else { + String errMsg = "浠诲姟缂栧彿锛�" + task.getTaskNo() + "鐘舵�佷负涓嶅尮閰嶏紝" + "涓嶈兘鎵ц锛�" + TaskStsType.WCS_TOTE_LOAD.desc + "浠诲姟"; + log.error(errMsg); + throw new CoolException(errMsg); } - boolean result = taskService.update(new LambdaUpdateWrapper<Task>() - .set(Task::getRobotCode, callbackParam.getRobotCode()) - .set(Task::getSysTaskCode, callbackParam.getSysTaskCode()) - .set(Task::getTaskSts, taskStsType.id) - .set(Task::getExcudeStatus, callbackParam.getStatus()) - .set(Task::getTaskDesc, callbackParam.getMessage()) - .eq(Task::getBarcode, callbackParam.getContainerCode()) - .eq(Task::getTaskNo, callbackParam.getTaskCode())); - - if (callbackParam.getEventType().equals(EssTaskStatus.TASK_EVENT_STATUS.event) && result) { - workService.completeTask(task.getId()); + } else if (callbackParam.getEventType().equals(EssTaskStatus.TASK_EVENT_TOTE_UNLOAD.event)) { //涓婃姤鏀剧鐘舵�� + if (task.getTaskSts() == TaskStsType.WCS_TOTE_LOAD.id) { + taskStsType = TaskStsType.WCS_TOTE_UNLOAD; + } else { + String errMsg = "浠诲姟缂栧彿锛�" + task.getTaskNo() + "鐘舵�佷负涓嶅尮閰嶏紝" + "涓嶈兘鎵ц锛�" + TaskStsType.WCS_TOTE_UNLOAD.desc + "浠诲姟"; + log.error(errMsg); + throw new CoolException(errMsg); } - } else { //鍑哄簱浠诲姟 - if (callbackParam.getEventType().equals(EssTaskStatus.TASK_EVENT_TOTE_LOAD.event)) { //涓婃姤鍙栫鐘舵�� - //TODO 瀹氭椂鍣ㄥ紑鍚悗锛岃鍒犻櫎 || task.getTaskType() == TaskStsType.GENERATE_OUT.id - if (task.getTaskSts() == TaskStsType.WCS_EXECUTE_OUT.id || task.getTaskSts() == TaskStsType.GENERATE_OUT.id) { - taskStsType = TaskStsType.WCS_EXECUTE_OUT_TOTE_LOAD; - } else { - String errMsg = "浠诲姟缂栧彿锛�" + task.getTaskNo() + "鐘舵�佷负涓嶅尮閰嶏紝" + "涓嶈兘鎵ц锛�" + TaskStsType.WCS_EXECUTE_OUT_TOTE_LOAD.desc + "浠诲姟"; - log.error(errMsg); - throw new CoolException(errMsg); - } - } else if (callbackParam.getEventType().equals(EssTaskStatus.TASK_EVENT_TOTE_UNLOAD.event)) { //涓婃姤鏀剧鐘舵�� - if (task.getTaskSts() == TaskStsType.WCS_EXECUTE_OUT_TOTE_LOAD.id) { - taskStsType = TaskStsType.WCS_EXECUTE_OUT_TOTE_UNLOAD; - } else { - String errMsg = "浠诲姟缂栧彿锛�" + task.getTaskNo() + "鐘舵�佷负涓嶅尮閰嶏紝" + "涓嶈兘鎵ц锛�" + TaskStsType.WCS_EXECUTE_OUT_TOTE_UNLOAD.desc + "浠诲姟"; - log.error(errMsg); - throw new CoolException(errMsg); - } - } else if (callbackParam.getEventType().equals(EssTaskStatus.TASK_EVENT_STATUS.event)) { //涓婃姤瀹屾垚鐘舵�� - if (task.getTaskSts() == TaskStsType.WCS_EXECUTE_OUT_TOTE_UNLOAD.id || task.getTaskSts() == TaskStsType.WCS_EXECUTE_OUT_TASK_DONE.id) { - //鍑哄簱浠诲姟瀹屾垚锛屼慨鏀圭姸鎬佷负鎾涓紝瀹氭椂浠诲姟鐢熸垚鎾娉㈡ - taskStsType = TaskStsType.WAVE_SEED; - } else { - String errMsg = "浠诲姟缂栧彿锛�" + task.getTaskNo() + "鐘舵�佷负涓嶅尮閰嶏紝" + "涓嶈兘鎵ц锛�" + TaskStsType.WCS_EXECUTE_OUT_TASK_DONE.desc + "浠诲姟"; - log.error(errMsg); - throw new CoolException(errMsg); - } + } else if (callbackParam.getEventType().equals(EssTaskStatus.TASK_EVENT_STATUS.event)) { //TODO 闇�纭涓婃姤浠诲姟涓紝浠诲姟瀹屾垚鏄摢涓簨浠讹紝鐩墠鏆傚畾task浜嬩欢 + if (task.getTaskSts() == TaskStsType.WCS_TOTE_UNLOAD.id) { + taskStsType = TaskStsType.WCS_PUTAWAY_SUCESS; + } else { + String errMsg = "浠诲姟缂栧彿锛�" + task.getTaskNo() + "鐘舵�佷负涓嶅尮閰嶏紝" + "涓嶈兘鎵ц锛�" + TaskStsType.WCS_PUTAWAY_SUCESS.desc + "浠诲姟"; + log.error(errMsg); + throw new CoolException(errMsg); } + } + boolean result = taskService.update(new LambdaUpdateWrapper<Task>() + .set(Task::getRobotCode, callbackParam.getRobotCode()) + .set(Task::getSysTaskCode, callbackParam.getSysTaskCode()) + .set(Task::getTaskSts, taskStsType.id) + .set(Task::getExcudeStatus, callbackParam.getStatus()) + .set(Task::getTaskDesc, callbackParam.getMessage()) + .eq(Task::getBarcode, callbackParam.getContainerCode()) + .eq(Task::getTaskNo, callbackParam.getTaskCode())); - //鏇存柊鍑哄簱鐘舵�佸強鐩稿叧瀛楁 - taskService.update(new LambdaUpdateWrapper<Task>() - .set(Task::getRobotCode, callbackParam.getRobotCode()) - .set(Task::getSysTaskCode, callbackParam.getSysTaskCode()) - .set(Task::getTaskSts, taskStsType.id) - .set(Task::getExcudeStatus, callbackParam.getStatus()) - .set(Task::getTaskDesc, callbackParam.getMessage()) - .eq(Task::getBarcode, callbackParam.getContainerCode()) - .eq(Task::getTaskNo, callbackParam.getTaskCode())); - + //event浜嬩欢涓簍ask锛岃〃鏄庝换鍔′笂鎶ュ畬鎴愮姸鎬� + if (callbackParam.getEventType().equals(EssTaskStatus.TASK_EVENT_STATUS.event) && result) { + //浠诲姟鐘舵�佷慨鏀逛负 99 鍏ュ簱瀹屾垚 + workService.completeTask(task.getId()); + } + } else { //鍑哄簱浠诲姟 + if (callbackParam.getEventType().equals(EssTaskStatus.TASK_EVENT_TOTE_LOAD.event)) { //涓婃姤鍙栫鐘舵�� + //TODO 瀹氭椂鍣ㄥ紑鍚悗锛岃鍒犻櫎 || task.getTaskType() == TaskStsType.GENERATE_OUT.id + if (task.getTaskSts() == TaskStsType.WCS_EXECUTE_OUT.id || task.getTaskSts() == TaskStsType.GENERATE_OUT.id) { + taskStsType = TaskStsType.WCS_EXECUTE_OUT_TOTE_LOAD; + } else { + String errMsg = "浠诲姟缂栧彿锛�" + task.getTaskNo() + "鐘舵�佷负涓嶅尮閰嶏紝" + "涓嶈兘鎵ц锛�" + TaskStsType.WCS_EXECUTE_OUT_TOTE_LOAD.desc + "浠诲姟"; + log.error(errMsg); + throw new CoolException(errMsg); + } + } else if (callbackParam.getEventType().equals(EssTaskStatus.TASK_EVENT_TOTE_UNLOAD.event)) { //涓婃姤鏀剧鐘舵�� + if (task.getTaskSts() == TaskStsType.WCS_EXECUTE_OUT_TOTE_LOAD.id) { + taskStsType = TaskStsType.WCS_EXECUTE_OUT_TOTE_UNLOAD; + } else { + String errMsg = "浠诲姟缂栧彿锛�" + task.getTaskNo() + "鐘舵�佷负涓嶅尮閰嶏紝" + "涓嶈兘鎵ц锛�" + TaskStsType.WCS_EXECUTE_OUT_TOTE_UNLOAD.desc + "浠诲姟"; + log.error(errMsg); + throw new CoolException(errMsg); + } + } else if (callbackParam.getEventType().equals(EssTaskStatus.TASK_EVENT_STATUS.event)) { //涓婃姤瀹屾垚鐘舵�� + if (task.getTaskSts() == TaskStsType.WCS_EXECUTE_OUT_TOTE_UNLOAD.id || task.getTaskSts() == TaskStsType.WCS_EXECUTE_OUT_TASK_DONE.id) { + //鍑哄簱浠诲姟瀹屾垚锛屼慨鏀圭姸鎬佷负瀹瑰櫒鍒拌揪锛屽畾鏃朵换鍔$敓鎴愭挱绉嶆尝娆� + taskStsType = TaskStsType.WCS_EXECUTE_OUT_TASK_DONE; + } else { + String errMsg = "浠诲姟缂栧彿锛�" + task.getTaskNo() + "鐘舵�佷负涓嶅尮閰嶏紝" + "涓嶈兘鎵ц锛�" + TaskStsType.WCS_EXECUTE_OUT_TASK_DONE.desc + "浠诲姟"; + log.error(errMsg); + throw new CoolException(errMsg); + } } - }); + //鏇存柊鍑哄簱鐘舵�佸強鐩稿叧瀛楁 + taskService.update(new LambdaUpdateWrapper<Task>() + .set(Task::getRobotCode, callbackParam.getRobotCode()) + .set(Task::getSysTaskCode, callbackParam.getSysTaskCode()) + .set(Task::getTaskSts, taskStsType.id) + .set(Task::getExcudeStatus, callbackParam.getStatus()) + .set(Task::getTaskDesc, callbackParam.getMessage()) + .eq(Task::getBarcode, callbackParam.getContainerCode()) + .eq(Task::getTaskNo, callbackParam.getTaskCode())); + + } + + }); } else { throw new CoolException("鏇存柊鍐呭涓嶅瓨鍦紒锛�"); } } + /** + * 瀹瑰櫒娴佸姩閫氱煡 + * + * @param code + * @return + */ + @Override + public synchronized R containerConveryor(String code) { + List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, code)); + if (tasks.isEmpty()) { + return R.error("瀹瑰櫒鐮佷换鍔′笉瀛樺湪锛侊紒"); + } else if (tasks.size() > 1) { + return R.error("瀹瑰櫒鐮佷换鍔¢敊璇紒锛�"); + } + tasks.forEach(task -> { + // try { +// ConveyorStarParam conveyorStarParam = new ConveyorStarParam(); +// conveyorStarParam.setSlotCode(task.getOriginLoc()) +// .setContainerCode(task.getBarcode()); +// if (task.getTaskType() == 101) { //浠诲姟绫诲瀷涓�101鍏ㄧ洏鍑哄簱锛岀洿鎺ュ彇涓嬪鍣紝浼�200 +// conveyorStarParam.setDirection("200"); +// } else if (task.getTaskType() == 103) { //濡傛灉涓轰换鍔$被鍨嬩负103锛岄渶璧板洖搴撴搷浣滐紝浼�100 +// conveyorStarParam.setDirection("100"); +// } +// //璋冪敤涓夋柟鎺ュ彛锛屽皢浠诲姟鎺ㄩ�佽嚦ESS骞冲彴 +// MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(); +// // 璁剧疆璇锋眰鍙傛暟 +// params.add("params", JSONObject.toJSONString(conveyorStarParam)); +// log.info("璇锋眰鍦板潃锛歿}锛岃姹傚弬鏁帮細{}", Constant.CONVEYOR_START, JSONObject.toJSONString(conveyorStarParam)); +// HttpHeaders headers = new HttpHeaders(); +// headers.add("Content-Type", "application/json"); +// HttpEntity httpEntity = new HttpEntity<>(params, headers); +// // 璇锋眰 +// ResponseEntity<String> exchange = restTemplate.exchange(Constant.CONVEYOR_START, HttpMethod.POST, httpEntity, String.class); +// log.info("涓嬪彂娴佸姩閫氱煡 杩斿洖缁撴灉锛歿}", exchange); +// if (exchange.getBody() == null) { +// throw new CoolException("涓嬪彂娴佸姩閫氱煡澶辫触锛侊紒"); +// } else { +// CommonReponse commonReponse = JSON.toJavaObject(JSON.parseObject(exchange.getBody()), CommonReponse.class); +// if (commonReponse.getCode() == 0) { + //娴佸姩閫氱煡涓嬪彂瀹屾垚鍚庯紝淇敼浠诲姟鐘舵�佷负杈撻�佺嚎娴佸姩涓�傘�� + //TODO 鍒ゆ柇浠诲姟鏄惁涓�103鎷f枡鍑哄簱锛�103鎷f枡娴佸姩鍚庝慨鏀逛负4锛圧CS瀹瑰櫒娴佸姩浠诲姟宸蹭笅鍙戯級 + if (task.getTaskType() == 103) { + //TODO 闇�鎵炬捣鏌旂‘璁ゆ槸鍚﹂渶瑕侀噸鏂拌皟鐢ㄥ叆搴撴帴鍙� + //鏇存柊搴撳瓨淇℃伅,淇敼浠诲姟鐘舵�佷负4 锛圧CS瀹瑰櫒娴佸姩浠诲姟宸蹭笅鍙戯級 + workService.pickTask(task.getId()); +// taskService.update(new LambdaUpdateWrapper<Task>().eq(Task::getId, task.getId()).set(Task::getTaskSts, TaskStsType.WCS_CONVEYOR_START)) + } else { + taskService.update(new LambdaUpdateWrapper<Task>() + .eq(Task::getId, task.getId()) + .set(Task::getTaskSts, TaskStsType.COMPLETE_OUT.id)); + } +// log.info(task.getTaskNo() + "涓嬪彂娴佸姩閫氱煡" + commonReponse.getMsg()); +// } else { +// throw new CoolException("涓嬪彂娴佸姩閫氱煡澶辫触锛侊紒"); +// } +// } +// } catch (Exception ex) { +// log.error(ex.getMessage()); +// } finally { +// //濡傛灉寮傚父淇敼绂佺敤鐘舵�� +// taskService.update(new LambdaUpdateWrapper<Task>().set(Task::getStatus, 0) +// .set(Task::getUpdateTime, new Date()) +// .eq(Task::getId, task.getId())); +// } + }); + return R.ok(); + } + + + @Override + public R rfidCallback(RfidSingalRequest request) { + return null; + } + + @Override + public R getPlatforms() { + return R.ok(platformService.list(new LambdaQueryWrapper<>())); + } + + /** + * 鎷嶇伅鎷f枡閫昏緫锛岃缁嗚鏄庤鎺ュ彛璋冪敤璇存槑 + * + * @param request + */ + @Override + public void slapLightLogic(Map<String, Object> request) { + String taskNo = request.get("taskNo").toString(); + String orderNo = request.get("orderNo").toString(); + + //* 1. 鍒ゆ柇褰撳墠瀹瑰櫒鏄惁杩樻湁鐗╂枡鏈嫞锛屾湭鎷e畬闂伅锛屾嫞瀹岄�氱煡瀹瑰櫒娴佸姩锛屽苟鐏伅 + SlapLightControlParam slapParam = new SlapLightControlParam(); + MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(); + //榛樿娴佸姩 + boolean converyor = false; + //鍒ゆ柇褰撳墠浠诲姟鏄惁杩樻湁鐗╂枡鏈嫞 + if (!checked(orderNo, taskNo)) { + //璋冪敤涓夋柟鎺ュ彛,闂伅涓嶅仛鎿嶄綔 + // 璁剧疆璇锋眰鍙傛暟 + params.add("params", JSONObject.toJSONString(slapParam)); + log.info("璇锋眰鍦板潃锛歿}锛岃姹傚弬鏁帮細{}", SystemProperties.SLAP_LIGHT, JSONObject.toJSONString(slapParam)); + } else { + //璋冪敤涓夋柟鎺ュ彛,鐏伅閫氱煡瀹瑰櫒娴佸姩锛� 浼犵伃鐏弬鏁� + //todo 鍒ゆ柇褰撳墠璁㈠崟鏄惁瀹屾垚锛屽畬鎴愮伃鐏紝鏈畬鎴愪繚鎸佹嫞璐х姸鎬佷寒鐏� + Order one = orderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, orderNo)); + + if (Objects.isNull(one)) { + throw new CoolException("褰撳墠璁㈠崟鏄庣粏涓嶅瓨鍦紒锛�"); + } +// //鑾峰彇鎾宸插畬鎴愮殑璁㈠崟鏄庣粏 +// List<OrderDetl> detlList = orderDetls.stream().filter(detl -> { +// return detl.getPickStatus() == OrderPickStatus.ORDER_PICK_STATUS_DONE.val; +// }).collect(Collectors.toList()); + + //鍒ゆ柇鏁伴噺鏄惁涓庤鍗曟槑缁嗙殑闇�姹傞噺鐩稿悓锛岀浉鍚屽垯璁㈠崟瀹屾垚 + if (one.getPickStatus() == OrderPickStatus.ORDER_PICK_STATUS_DONE.val) { + //鎾瀹屾垚锛岄噴鏀剧粦瀹氱珯鐐� + List<CacheSite> cacheSites = cacheSiteService.list(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getOrderNo, orderNo)); + for (CacheSite cacheSite : cacheSites) { + if (!cacheSite.getSiteStatus().equals(CacheSiteStatusType.O.id)) { + cacheSite.setSiteStatus(CacheSiteStatusType.O.id); + cacheSite.setOrderId(null); + cacheSite.setBarcode(null); + cacheSite.setOrderNo(null); + cacheSite.setPlatformId(null); + cacheSite.setPlatformNo(null); + cacheSite.setUpdateTime(new Date()); + if (!cacheSiteService.updateById(cacheSite)) { + throw new CoolException("鎾绔欑偣鏇存柊澶辫触"); + } + } + } + } + converyor = true; + params.add("params", JSONObject.toJSONString(slapParam)); + log.info("璇锋眰鍦板潃锛歿}锛岃姹傚弬鏁帮細{}", SystemProperties.SLAP_LIGHT, JSONObject.toJSONString(slapParam)); + } + + if (converyor) { + Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskNo, request.get("taskNo"))); + if (Objects.isNull(task)) { + throw new CoolException("浠诲姟涓嶅瓨鍦紒锛�"); + } + containerConveryor(task.getBarcode()); + } + +// HttpHeaders headers = new HttpHeaders(); +// headers.add("Content-Type", "application/json"); +// HttpEntity httpEntity = new HttpEntity<>(params, headers); +// // 璇锋眰 +// ResponseEntity<CommonReponse> exchange = restTemplate.exchange(SystemProperties.CONVEYOR_START, HttpMethod.POST, httpEntity, CommonReponse.class); +// log.info("涓嬪彂娴佸姩閫氱煡 杩斿洖缁撴灉锛歿}", exchange); +// if (exchange.getBody() == null) { +// throw new CoolException("涓嬪彂娴佸姩閫氱煡澶辫触锛侊紒"); +// } else { +// CommonReponse response = exchange.getBody(); +// if (response.getCode() == 0) { +// if (!converyor) { +// //* 2. 瀹瑰櫒娴佸姩鍒ゆ柇锛屽鏋滄枡绠辨病鏈夌墿鏂� code浼�200锛� 鏈夌墿鏂欎紶100 鎵ц鍥炲簱浠诲姟,淇敼浠诲姟鐘舵�佷负 璋冪敤containerConveryor锛坱askNo锛夋柟娉� +// containerConveryor(request.get("taskNo").toString()); +// } +// } +// } + } + + /** + * 鍒ゆ柇褰撳墠浠诲姟涓嬶紝璁㈠崟鏄惁宸插畬鎴愭嫞璐� + * + * @param orderNo + * @param taskNo + * @return + */ + public synchronized boolean checked(String orderNo, String taskNo) { + if (Objects.isNull(orderNo)) { + throw new CoolException("璁㈠崟缂栫爜涓嶈兘涓虹┖锛侊紒"); + } + if (Objects.isNull(taskNo)) { + throw new CoolException("浠诲姟缂栫爜涓嶈兘涓虹┖锛侊紒"); + } + + List<TaskDetl> taskDetls = taskDetlService.list(new LambdaQueryWrapper<TaskDetl>().eq(TaskDetl::getTaskNo, taskNo)); + if (taskDetls.isEmpty()) { + throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦紒锛�"); + } + + List<Long> detlIds = taskDetls.stream().map(TaskDetl::getId).collect(Collectors.toList()); + + double taskNum = taskDetls.stream().mapToDouble(TaskDetl::getAnfme).sum(); + + List<WaveSeed> seeds = waveSeedService.list(new LambdaQueryWrapper<WaveSeed>().in(WaveSeed::getTaskDetlId, detlIds)); + if (seeds.isEmpty()) { + throw new CoolException("鎾淇℃伅涓嶅瓨鍦紒锛侊紒"); + } + double seedNum = seeds.stream().mapToDouble(WaveSeed::getWorkQty).sum(); + //鍒ゆ柇浠诲姟闇�姹傛�婚噺鏄惁绛夋挱绉嶆�绘暟閲� + if (taskNum == seedNum) { + return true; + } else { + return false; + } + } + } -- Gitblit v1.9.1