| | |
| | | import com.fasterxml.jackson.databind.cfg.CoercionAction; |
| | | import com.fasterxml.jackson.databind.cfg.CoercionInputShape; |
| | | import com.vincent.rsf.framework.common.Cools; |
| | | import com.vincent.rsf.framework.common.DateUtils; |
| | | import com.vincent.rsf.framework.common.R; |
| | | import com.vincent.rsf.framework.exception.CoolException; |
| | | import com.vincent.rsf.server.api.config.RemotesInfoProperties; |
| | |
| | | @Scheduled(cron = "0/55 * * * * ? ") |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void pubTaskToWcs() { |
| | | log.info("定时任务开始执行:任务下发到RCS"); |
| | | Long loginUserId = SystemAuthUtils.getLoginUserId(); |
| | | List<Integer> list = Arrays.asList(TaskType.TASK_TYPE_IN.type, TaskType.TASK_TYPE_OUT.type, TaskType.TASK_TYPE_LOC_MOVE.type, TaskType.TASK_TYPE_EMPITY_IN.type |
| | | , TaskType.TASK_TYPE_CHECK_IN.type, TaskType.TASK_TYPE_MERGE_IN.type, TaskType.TASK_TYPE_EMPITY_OUT.type, TaskType.TASK_TYPE_PICK_IN.type, |
| | |
| | | .in(Task::getTaskType, list) |
| | | .in(Task::getTaskStatus, integers) |
| | | .orderByDesc(Task::getSort)); |
| | | log.info("查询到待下发任务数量:{}", tasks.size()); |
| | | if (tasks.isEmpty()) { |
| | | log.debug("没有待下发的任务,定时任务结束"); |
| | | return; |
| | | } |
| | | Config config = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.AUTO_RUN_CHECK_ORDERS)); |
| | | if (!Objects.isNull(config) && !Objects.isNull(config.getVal())) { |
| | | if (Boolean.parseBoolean(config.getVal())) { |
| | | return; |
| | | log.info("配置项AUTO_RUN_CHECK_ORDERS为true,跳过任务下发"); |
| | | return; |
| | | } |
| | | } |
| | | // for (Task task : tasks) { |
| | |
| | | // } |
| | | // } |
| | | /**下发普通站点任务,报错回滚,不再往下执行*/ |
| | | log.info("开始下发{}个任务到RCS", tasks.size()); |
| | | taskService.pubTaskToWcs(tasks); |
| | | log.info("定时任务执行完成:任务下发到RCS"); |
| | | } |
| | | |
| | | /** |
| | |
| | | } else { |
| | | queryWrapper.in(Task::getTaskStatus, TaskStsType.UPDATED_IN.id, TaskStsType.UPDATED_OUT.id); |
| | | } |
| | | queryWrapper.last("ORDER BY RAND() LIMIT 1"); |
| | | |
| | | List<Task> tasks = taskService.list(queryWrapper); |
| | | if (tasks.isEmpty()) { |
| | | return; |
| | |
| | | } else if ((task.getTaskType() >= TaskType.TASK_TYPE_OUT.type && task.getTaskType() <= TaskType.TASK_TYPE_EMPITY_OUT.type) |
| | | || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_IN.type)) { |
| | | /**判断单据是否完成**/ |
| | | Set<Long> longSet = taskItems.stream().map(TaskItem::getSourceId).collect(Collectors.toSet()); |
| | | List<WaveOrderRela> waveOrderRelas = waveOrderRelaService.list(new LambdaQueryWrapper<WaveOrderRela>() |
| | | .in(WaveOrderRela::getWaveId, longSet)); |
| | | if (Cools.isEmpty(waveOrderRelas)) { |
| | | throw new CoolException("波次对应关联单未找到"); |
| | | } |
| | | Set<Long> orderIds = waveOrderRelas.stream().map(WaveOrderRela::getOrderId).collect(Collectors.toSet()); |
| | | List<WkOrder> wkOrders = asnOrderService.listByIds(orderIds); |
| | | if (wkOrders.isEmpty()) { |
| | | throw new CoolException("单据不存在!!"); |
| | | } |
| | | |
| | | Config allowChang = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.ALLOW_OVER_CHANGE)); |
| | | |
| | | wkOrders.forEach(order -> { |
| | | //判断是否允许超收,不允许超收添加拒收判断 |
| | | if (!Objects.isNull(allowChang)) { |
| | | if (!Boolean.parseBoolean(allowChang.getVal())) { |
| | | if (order.getAnfme().compareTo(order.getQty()) == 0) { |
| | | order.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val); |
| | | if (!asnOrderService.updateById(order)) { |
| | | throw new CoolException("出库单更新状态失败"); |
| | | } |
| | | } |
| | | // 只有波次类型的任务才需要查询波次关联单 |
| | | if (task.getResource() != null && task.getResource().equals(TaskResouceType.TASK_RESOUCE_WAVE_TYPE.val)) { |
| | | Set<Long> longSet = taskItems.stream() |
| | | .map(TaskItem::getSourceId) |
| | | .filter(Objects::nonNull) |
| | | .collect(Collectors.toSet()); |
| | | |
| | | if (longSet.isEmpty()) { |
| | | logger.warn("任务{}的任务明细中没有有效的sourceId,跳过波次关联单查询。任务编码:{},任务类型:{}", |
| | | task.getId(), task.getTaskCode(), task.getTaskType()); |
| | | } else { |
| | | List<WaveOrderRela> waveOrderRelas = waveOrderRelaService.list(new LambdaQueryWrapper<WaveOrderRela>() |
| | | .in(WaveOrderRela::getWaveId, longSet)); |
| | | if (Cools.isEmpty(waveOrderRelas)) { |
| | | logger.warn("任务{}的波次对应关联单未找到,可能是数据不一致或任务不是通过波次创建的。任务编码:{},sourceIds:{}", |
| | | task.getId(), task.getTaskCode(), longSet); |
| | | } else { |
| | | if (order.getAnfme().compareTo(order.getQty()) <= 0) { |
| | | order.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val); |
| | | if (!asnOrderService.updateById(order)) { |
| | | throw new CoolException("出库单更新状态失败"); |
| | | } |
| | | Set<Long> orderIds = waveOrderRelas.stream().map(WaveOrderRela::getOrderId).collect(Collectors.toSet()); |
| | | List<WkOrder> wkOrders = asnOrderService.listByIds(orderIds); |
| | | if (wkOrders.isEmpty()) { |
| | | logger.warn("任务{}的关联单据不存在。任务编码:{},orderIds:{}", |
| | | task.getId(), task.getTaskCode(), orderIds); |
| | | } else { |
| | | Config allowChang = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.ALLOW_OVER_CHANGE)); |
| | | |
| | | wkOrders.forEach(order -> { |
| | | //判断是否允许超收,不允许超收添加拒收判断 |
| | | if (!Objects.isNull(allowChang)) { |
| | | if (!Boolean.parseBoolean(allowChang.getVal())) { |
| | | if (order.getAnfme().compareTo(order.getQty()) == 0) { |
| | | order.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val); |
| | | if (!asnOrderService.updateById(order)) { |
| | | logger.error("出库单更新状态失败。订单ID:{},订单编码:{}", order.getId(), order.getCode()); |
| | | } |
| | | } |
| | | } else { |
| | | if (order.getAnfme().compareTo(order.getQty()) <= 0) { |
| | | order.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val); |
| | | if (!asnOrderService.updateById(order)) { |
| | | logger.error("出库单更新状态失败。订单ID:{},订单编码:{}", order.getId(), order.getCode()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | //检查单据是否完成 |
| | | |
| | | }); |
| | | } |
| | | } |
| | | } |
| | | //检查单据是否完成 |
| | | |
| | | }); |
| | | } else { |
| | | logger.debug("任务{}不是波次类型任务(资源类型:{}),跳过波次关联单查询。任务编码:{}", |
| | | task.getId(), task.getResource(), task.getTaskCode()); |
| | | } |
| | | |
| | | //出库单上报RCS修改库位状态 |
| | | try { |
| | | reportStationStatus(task); |
| | | } catch (Exception e) { |
| | | throw new CoolException(e.getMessage()); |
| | | logger.error("任务{}上报RCS修改库位状态失败。任务编码:{}", task.getId(), task.getTaskCode(), e); |
| | | // 不抛出异常,避免中断定时任务 |
| | | } |
| | | } |
| | | |