|  |  |  | 
|---|
|  |  |  | import com.alibaba.fastjson.JSONObject; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; | 
|---|
|  |  |  | import com.fasterxml.jackson.core.JsonProcessingException; | 
|---|
|  |  |  | import com.fasterxml.jackson.databind.ObjectMapper; | 
|---|
|  |  |  | import com.fasterxml.jackson.databind.cfg.CoercionAction; | 
|---|
|  |  |  | import com.fasterxml.jackson.databind.cfg.CoercionInputShape; | 
|---|
|  |  |  | import com.zy.asrs.framework.exception.CoolException; | 
|---|
|  |  |  | import com.zy.asrs.wms.apis.wcs.entity.domain.SystemProperties; | 
|---|
|  |  |  | import com.zy.asrs.wms.apis.wcs.entity.request.ConveyorStarParam; | 
|---|
|  |  |  | import com.zy.asrs.wms.apis.wcs.entity.request.PublishTasksParam; | 
|---|
|  |  |  | import com.zy.asrs.wms.apis.wcs.entity.request.TaskDescribe; | 
|---|
|  |  |  | import com.zy.asrs.wms.apis.wcs.entity.request.TaskParam; | 
|---|
|  |  |  | 
|---|
|  |  |  | .eq(Task::getTaskSts, TaskStsType.WCS_CONTAINER_RECEIVE.id).eq(Task::getStatus, 1)); | 
|---|
|  |  |  | tasks.forEach(task -> { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | //                ConveyorStarParam conveyorStarParam = new ConveyorStarParam(); | 
|---|
|  |  |  | //                conveyorStarParam.setSlotCode(task.getOriginLoc()) | 
|---|
|  |  |  | //                        .setContainerCode(task.getBarcode()); | 
|---|
|  |  |  | //                //调用三方接口,将任务推送至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) { | 
|---|
|  |  |  | ConveyorStarParam conveyorStarParam = new ConveyorStarParam(); | 
|---|
|  |  |  | conveyorStarParam.setSlotCode(task.getOriginLoc()) | 
|---|
|  |  |  | .setContainerCode(task.getBarcode()) | 
|---|
|  |  |  | .setDirection("100"); | 
|---|
|  |  |  | // 原始报文 | 
|---|
|  |  |  | log.info("请求地址:{},请求参数:{}", "http://192.168.2.200:9046/conveyor/moveContainer", JSONObject.toJSONString(conveyorStarParam)); | 
|---|
|  |  |  | HttpHeaders headers = new HttpHeaders(); | 
|---|
|  |  |  | headers.add("Content-Type", "application/json"); | 
|---|
|  |  |  | HttpEntity httpEntity = new HttpEntity<>(conveyorStarParam, headers); | 
|---|
|  |  |  | // 调用三方接口,将任务推送至ESS平台 | 
|---|
|  |  |  | ResponseEntity<String> exchange = restTemplate.exchange("http://192.168.2.200:9046/conveyor/moveContainer", HttpMethod.POST, httpEntity, String.class); | 
|---|
|  |  |  | log.info("下发流动通知 返回结果:{}", exchange); | 
|---|
|  |  |  | if (exchange.getBody() == null) { | 
|---|
|  |  |  | throw new CoolException("下发流动通知失败!!"); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | ObjectMapper objectMapper = new ObjectMapper(); | 
|---|
|  |  |  | objectMapper.coercionConfigDefaults() | 
|---|
|  |  |  | .setCoercion(CoercionInputShape.EmptyString, CoercionAction.AsEmpty); | 
|---|
|  |  |  | CommonReponse commonReponse = objectMapper.readValue(exchange.getBody(), CommonReponse.class); | 
|---|
|  |  |  | if (commonReponse.getCode() == 0) { | 
|---|
|  |  |  | taskService.update(new LambdaUpdateWrapper<Task>() | 
|---|
|  |  |  | .eq(Task::getId, task.getId()) | 
|---|
|  |  |  | .set(Task::getTaskSts, TaskStsType.WCS_CONVEYOR_START.id)); | 
|---|
|  |  |  | //                        log.info(task.getTaskNo() + "下发流动通知" + commonReponse.getMsg()); | 
|---|
|  |  |  | //                    } else { | 
|---|
|  |  |  | //                        throw new CoolException("下发流动通知失败!!"); | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | 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).eq(Task::getId, task.getId())); | 
|---|
|  |  |  | taskService.update(new LambdaUpdateWrapper<Task>().set(Task::getStatus, 0).eq(Task::getId, task.getId())); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Scheduled(cron = "0/3 * * * * ? ") | 
|---|
|  |  |  | @Transactional(rollbackFor = Exception.class) | 
|---|
|  |  |  | public void waitPakinSchedule() { | 
|---|
|  |  |  | public void waitPakinSchedule() throws JsonProcessingException { | 
|---|
|  |  |  | //获取当前任务档中,所有为待入库状态的任务档,按时间升序排列 | 
|---|
|  |  |  | List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>() | 
|---|
|  |  |  | //                        .eq(Task::getTaskType, 1) | 
|---|
|  |  |  | 
|---|
|  |  |  | tasks.forEach(task -> { | 
|---|
|  |  |  | List<TaskParam> params = new ArrayList<>(); | 
|---|
|  |  |  | TaskParam param = new TaskParam(); | 
|---|
|  |  |  | //设置容器编码 | 
|---|
|  |  |  | param.setTaskCode(task.getTaskNo()); | 
|---|
|  |  |  | List<TaskDescribe> taskDescribes = new ArrayList<>(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 处理库位映射 | 
|---|
|  |  |  | String[] parts = task.getTargetLoc().split("-"); | 
|---|
|  |  |  | String formatLocNo = String.format("A-%03d-%03d-%02d", | 
|---|
|  |  |  | Integer.parseInt(parts[0]), | 
|---|
|  |  |  | Integer.parseInt(parts[1]), | 
|---|
|  |  |  | Integer.parseInt(parts[2])); | 
|---|
|  |  |  | TaskDescribe describe = new TaskDescribe(); | 
|---|
|  |  |  | //设置目标库位,站点 | 
|---|
|  |  |  | describe.setContainerCode(task.getBarcode()) | 
|---|
|  |  |  | .setToLocationCode(task.getTargetLoc()) | 
|---|
|  |  |  | .setToLocationCode(formatLocNo) | 
|---|
|  |  |  | .setToStationCode(task.getTargetSite()); | 
|---|
|  |  |  | taskDescribes.add(describe); | 
|---|
|  |  |  | param.setTaskDescribe(taskDescribes); | 
|---|
|  |  |  | //            .setFromLocationCode("") | 
|---|
|  |  |  | //            .setContainerFace("") | 
|---|
|  |  |  | //            .setContainerType("").setStorageTag(""); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | param.setTaskDescribe(describe); | 
|---|
|  |  |  | params.add(param); | 
|---|
|  |  |  | tasksParam.setTasks(params); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | 
|---|
|  |  |  | tasksParam.setTaskType("putaway"); | 
|---|
|  |  |  | // TODO 多任务多订单,统一调度,是否会出现部分成功,部分失败的情况 | 
|---|
|  |  |  | //调用三方接口,将任务推送至ESS平台 | 
|---|
|  |  |  | MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(); | 
|---|
|  |  |  | //        MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(); | 
|---|
|  |  |  | // 设置请求参数 | 
|---|
|  |  |  | params.add("params", JSONObject.toJSONString(tasksParam)); | 
|---|
|  |  |  | //        params.add("params", tasksParam); | 
|---|
|  |  |  | log.info("请求地址:{},请求参数:{}", "http://192.168.2.200:9046/task/create", JSONObject.toJSONString(tasksParam)); | 
|---|
|  |  |  | HttpHeaders headers = new HttpHeaders(); | 
|---|
|  |  |  | headers.add("Content-Type", "application/json"); | 
|---|
|  |  |  | HttpEntity httpEntity = new HttpEntity<>(params, headers); | 
|---|
|  |  |  | HttpEntity httpEntity = new HttpEntity<>(tasksParam, headers); | 
|---|
|  |  |  | // 请求 | 
|---|
|  |  |  | ResponseEntity<String> exchange = restTemplate.exchange("http://192.168.2.200:9046/task/create", HttpMethod.POST, httpEntity, String.class); | 
|---|
|  |  |  | log.info("下发任务 返回结果:{}", exchange); | 
|---|
|  |  |  | if (exchange.getBody() == null) { | 
|---|
|  |  |  | throw new CoolException("下发任务失败!!"); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | CommonReponse reponse = (CommonReponse) JSON.parse(exchange.getBody()); | 
|---|
|  |  |  | ObjectMapper objectMapper = new ObjectMapper(); | 
|---|
|  |  |  | CommonReponse reponse = objectMapper.readValue(exchange.getBody(), CommonReponse.class); | 
|---|
|  |  |  | //            CommonReponse reponse = (CommonReponse) JSON.parse(exchange.getBody()); | 
|---|
|  |  |  | if (reponse.getCode() == 0) { | 
|---|
|  |  |  | //  请求成功后,统一修改所有任务档状态为入库执行中。 | 
|---|
|  |  |  | tasks.forEach(task -> { | 
|---|
|  |  |  | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Scheduled(cron = "0/3 * * * * ? ") | 
|---|
|  |  |  | @Transactional(rollbackFor = Exception.class) | 
|---|
|  |  |  | public void waveToTask() { | 
|---|
|  |  |  | public void waveToTask() throws JsonProcessingException { | 
|---|
|  |  |  | //获取当前任务档中,所有为待出库状态的任务档,按时间升序排列 | 
|---|
|  |  |  | List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>() | 
|---|
|  |  |  | .ge(Task::getTaskType, 101) //TODO 如何确认是101,还是103 | 
|---|
|  |  |  | 
|---|
|  |  |  | TaskParam param = new TaskParam(); | 
|---|
|  |  |  | //设置容器编码 | 
|---|
|  |  |  | param.setTaskCode(task.getTaskNo()); | 
|---|
|  |  |  | List<TaskDescribe> taskDescribes = new ArrayList<>(); | 
|---|
|  |  |  | TaskDescribe describe = new TaskDescribe(); | 
|---|
|  |  |  | //设置目标库位,站点 | 
|---|
|  |  |  | describe.setContainerCode(task.getBarcode()) | 
|---|
|  |  |  | .setToLocationCode(task.getTargetLoc()) | 
|---|
|  |  |  | .setToStationCode(task.getTargetSite()); | 
|---|
|  |  |  | taskDescribes.add(describe); | 
|---|
|  |  |  | param.setTaskDescribe(taskDescribes); | 
|---|
|  |  |  | param.setTaskDescribe(describe); | 
|---|
|  |  |  | params.add(param); | 
|---|
|  |  |  | tasksParam.setTasks(params); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | tasksParam.setTaskType("carry"); | 
|---|
|  |  |  | // TODO 多任务多订单,统一调度,是否会出现部分成功,部分失败的情况 | 
|---|
|  |  |  | //调用三方接口,将任务推送至ESS平台 | 
|---|
|  |  |  | MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(); | 
|---|
|  |  |  | SystemProperties properties = new SystemProperties(); | 
|---|
|  |  |  | // 设置请求参数 | 
|---|
|  |  |  | params.add("params", JSONObject.toJSONString(tasksParam)); | 
|---|
|  |  |  | log.info("请求地址:{},请求参数:{}", properties.getBaseHost() + properties.getIssueTaskOfEvent(), JSONObject.toJSONString(tasksParam)); | 
|---|
|  |  |  | log.info("请求地址:{},请求参数:{}", properties.getBaseHost() + properties.getEssReceiveTask(), JSONObject.toJSONString(tasksParam)); | 
|---|
|  |  |  | HttpHeaders headers = new HttpHeaders(); | 
|---|
|  |  |  | headers.add("Content-Type", "application/json"); | 
|---|
|  |  |  | HttpEntity httpEntity = new HttpEntity<>(params, headers); | 
|---|
|  |  |  | HttpEntity httpEntity = new HttpEntity<>(tasksParam, headers); | 
|---|
|  |  |  | // 请求 | 
|---|
|  |  |  | ResponseEntity<String> exchange = restTemplate.exchange(properties.getBaseHost() + properties.getIssueTaskOfEvent(), HttpMethod.POST, httpEntity, String.class); | 
|---|
|  |  |  | ResponseEntity<String> exchange = restTemplate.exchange(properties.getBaseHost() + properties.getEssReceiveTask(), HttpMethod.POST, httpEntity, String.class); | 
|---|
|  |  |  | log.info("下发任务 返回结果:{}", exchange); | 
|---|
|  |  |  | if (exchange.getBody() == null) { | 
|---|
|  |  |  | throw new CoolException("下发任务失败!!"); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | CommonReponse reponse = (CommonReponse) JSON.parse(exchange.getBody()); | 
|---|
|  |  |  | ObjectMapper objectMapper = new ObjectMapper(); | 
|---|
|  |  |  | CommonReponse reponse = objectMapper.readValue(exchange.getBody(), CommonReponse.class); | 
|---|
|  |  |  | if (reponse.getCode() == 0) { | 
|---|
|  |  |  | //请求成功后,统一修改所有任务档状态为入库执行中。 | 
|---|
|  |  |  | tasks.forEach(task -> { | 
|---|