| | |
| | | @Transactional |
| | | public R pakoutOrderPause(OpenOrderPakoutPauseParam param) { |
| | | if (param == null || Cools.isEmpty(param.getOrderId())) { |
| | | throw new CoolException("orderNo is empty"); |
| | | throw new CoolException("orderNo不能为空"); |
| | | } |
| | | if (param.getExecute() == null) { |
| | | throw new CoolException("reason不能为空"); |
| | | } |
| | | |
| | | List<WrkMast> activeTasks = findActiveOutboundTasks(param.getOrderId()); |
| | | Map<String, Object> result = new HashMap<>(); |
| | | result.put("orderNo", param.getOrderId()); |
| | | result.put("taskCount", activeTasks.size()); |
| | | if (activeTasks.isEmpty()) { |
| | | result.put("confirmedCount", 0); |
| | | return R.ok("no active out tasks").add(result); |
| | | } |
| | | |
| | | Date now = new Date(); |
| | | int confirmedCount = 0; |
| | | for (WrkMast wrkMast : activeTasks) { |
| | | if (wrkMast == null || "Y".equalsIgnoreCase(wrkMast.getPdcType())) { |
| | | continue; |
| | | if (Objects.equals(param.getExecute(), 1)) { |
| | | // ERP确认立即执行,仅处理待下发的出库任务。 |
| | | List<WrkMast> pendingTasks = activeTasks.stream() |
| | | .filter(wrkMast -> wrkMast != null && Objects.equals(wrkMast.getWrkSts(), 11L)) |
| | | .collect(Collectors.toList()); |
| | | Map<String, Object> result = new HashMap<>(); |
| | | result.put("orderNo", param.getOrderId()); |
| | | result.put("taskCount", pendingTasks.size()); |
| | | if (pendingTasks.isEmpty()) { |
| | | result.put("confirmedCount", 0); |
| | | return R.ok("无有效出库任务").add(result); |
| | | } |
| | | wrkMast.setPdcType("Y"); |
| | | |
| | | Date now = new Date(); |
| | | int confirmedCount = 0; |
| | | for (WrkMast wrkMast : pendingTasks) { |
| | | if (wrkMast == null || "Y".equalsIgnoreCase(wrkMast.getPdcType())) { |
| | | continue; |
| | | } |
| | | wrkMast.setPdcType("Y"); |
| | | // wrkMast.setUpdMk("ERP_CONFIRMED"); |
| | | // wrkMast.setManuType("ERP_CONFIRM_OUT"); |
| | | wrkMast.setModiTime(now); |
| | | wrkMast.setModiUser(9527L); |
| | | if (!wrkMastService.updateById(wrkMast)) { |
| | | throw new CoolException("confirm out task failed: " + wrkMast.getWrkNo()); |
| | | wrkMast.setModiTime(now); |
| | | wrkMast.setModiUser(9527L); |
| | | if (!wrkMastService.updateById(wrkMast)) { |
| | | throw new CoolException("确认执行出库任务失败: " + wrkMast.getWrkNo()); |
| | | } |
| | | confirmedCount++; |
| | | } |
| | | confirmedCount++; |
| | | } |
| | | |
| | | result.put("confirmedCount", confirmedCount); |
| | | return R.ok(confirmedCount == 0 ? "tasks already confirmed" : "erp confirm out success").add(result); |
| | | result.put("confirmedCount", confirmedCount); |
| | | return R.ok(confirmedCount == 0 ? "任务已确认执行" : "ERP确认执行出库成功").add(result); |
| | | } |
| | | if (Objects.equals(param.getExecute(), 2)) { |
| | | // ERP请求取消任务:直接收集任务号,按 taskList 格式发送给 WCS。 |
| | | Map<String, Object> result = new HashMap<>(); |
| | | result.put("orderNo", param.getOrderId()); |
| | | result.put("execute", param.getExecute()); |
| | | result.put("taskCount", activeTasks.size()); |
| | | if (activeTasks.isEmpty()) { |
| | | return R.ok("无有效出库任务").add(result); |
| | | } |
| | | List<HashMap<String,Object>> taskList = new ArrayList<>(); |
| | | for (WrkMast wrkMast : activeTasks) { |
| | | HashMap<String,Object> hashMap = new HashMap<>(); |
| | | hashMap.put("taskNo", wrkMast.getWrkNo()); |
| | | taskList.add(hashMap); |
| | | } |
| | | wcsApiService.pauseOutTasks(taskList); |
| | | return R.ok("取消任务已发送至WCS").add(result); |
| | | } |
| | | throw new CoolException("reason仅支持1或2"); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public R pakoutOrderExecute(OpenOrderPakoutExecuteParam param) { |
| | | if (param == null || Cools.isEmpty(param.getOrderId())) { |
| | | throw new CoolException("orderId is empty"); |
| | | } |
| | | if (param.getExecute() == null) { |
| | | throw new CoolException("execute is empty"); |
| | | } |
| | | if (Objects.equals(param.getExecute(), 1)) { |
| | | return createPakoutTasks(param.getOrderId()); |
| | | } |
| | | if (Objects.equals(param.getExecute(), 2)) { |
| | | OpenOrderPakoutPauseParam pauseParam = new OpenOrderPakoutPauseParam(); |
| | | pauseParam.setOrderId(param.getOrderId()); |
| | | // pauseParam.setReason("OPEN_API_CONFIRM_OUT"); |
| | | return pakoutOrderPause(pauseParam); |
| | | } |
| | | throw new CoolException("execute only supports 1 or 2"); |
| | | return null; |
| | | } |
| | | |
| | | private List<WrkMast> findActiveOutboundTasks(String orderNo) { |
| | |
| | | List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() |
| | | .in("wrk_no", wrkNos) |
| | | .in("io_type", Arrays.asList(101, 103, 104, 107, 108, 110)) |
| | | .eq("wrk_sts", 11L)); |
| | | .in("wrk_sts", Arrays.asList(11L, 12L, 13L))); |
| | | if (wrkMasts == null || wrkMasts.isEmpty()) { |
| | | return Collections.emptyList(); |
| | | } |
| | |
| | | return orderDetl.getMatnr() + "|batch=" + (orderDetl.getBatch() == null ? "" : orderDetl.getBatch()) + "|lack=" + lackQty; |
| | | } |
| | | |
| | | private boolean needNotifyWcsStop(WrkMast wrkMast) { |
| | | return wrkMast != null |
| | | && wrkMast.getWrkSts() != null |
| | | && wrkMast.getWrkSts() >= 12L |
| | | && wrkMast.getWrkSts() < 14L; |
| | | } |
| | | |
| | | private StopOutTaskParams buildStopOutTaskParams(OpenOrderPakoutPauseParam param, List<WrkMast> wrkMasts) { |
| | | private StopOutTaskParams buildStopOutTaskParams(List<WrkMast> wrkMasts) { |
| | | StopOutTaskParams stopParams = new StopOutTaskParams(); |
| | | stopParams.setOrderNo(param.getOrderId()); |
| | | stopParams.setReason(param.getReason()); |
| | | // WCS取消接口仅接收 taskList.taskNo。 |
| | | for (WrkMast wrkMast : wrkMasts) { |
| | | StopOutTaskParams.TaskItem item = new StopOutTaskParams.TaskItem(); |
| | | item.setTaskNo(String.valueOf(wrkMast.getWrkNo())); |
| | | if (wrkMast.getStaNo() != null) { |
| | | item.setStaNo(String.valueOf(wrkMast.getStaNo())); |
| | | } |
| | | item.setLocNo(wrkMast.getSourceLocNo()); |
| | | stopParams.getTasks().add(item); |
| | | } |
| | | return stopParams; |