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/asrs/timer/TaskLogTimer.java | 455 +++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 301 insertions(+), 154 deletions(-) diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskLogTimer.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskLogTimer.java index 86a640f..07f0f35 100644 --- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskLogTimer.java +++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskLogTimer.java @@ -1,154 +1,301 @@ -package com.zy.asrs.wms.asrs.timer; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.plugins.IgnoreStrategy; -import com.baomidou.mybatisplus.core.plugins.InterceptorIgnoreHelper; -import com.zy.asrs.framework.exception.CoolException; -import com.zy.asrs.wms.asrs.entity.*; -import com.zy.asrs.wms.asrs.entity.enums.OrderSettleType; -import com.zy.asrs.wms.asrs.service.*; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Transactional; - -import java.util.Date; -import java.util.List; - -@Component -public class TaskLogTimer { - - @Autowired - private TaskService taskService; - @Autowired - private TaskDetlService taskDetlService; - @Autowired - private TaskDetlFieldService taskDetlFieldService; - @Autowired - private TaskLogService taskLogService; - @Autowired - private TaskDetlLogService taskDetlLogService; - @Autowired - private TaskDetlFieldLogService taskDetlFieldLogService; - @Autowired - private OrderService orderService; - @Autowired - private OrderDetlService orderDetlService; - - @Scheduled(cron = "0/3 * * * * ? ") - @Transactional - public void inExecute() { - InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().tenantLine(true).build()); - try { - //鑾峰彇鍏ュ簱瀹屾垚浠诲姟 - List<Task> list = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskSts, 100)); - if (list.isEmpty()) { - return; - } - - for (Task task : list) { - Long hostId = task.getHostId(); - - //淇濆瓨浠诲姟鍘嗗彶妗� - TaskLog taskLog = new TaskLog(); - taskLog.sync(task); - if (!taskLogService.save(taskLog)) { - throw new CoolException("淇濆瓨浠诲姟鍘嗗彶妗eけ璐�"); - } - - //鍒犻櫎浠诲姟鍘嗗彶妗f - if (!taskService.removeById(task.getId())) { - throw new CoolException("鍒犻櫎浠诲姟妗eけ璐�"); - } - - //淇濆瓨浠诲姟鏄庣粏鍘嗗彶妗� - List<TaskDetl> taskDetls = taskDetlService.getTaskDetlByTaskId(task.getId()); - if(taskDetls.isEmpty()) { - throw new CoolException("浠诲姟鏄庣粏涓嶅瓨鍦�"); - } - for (TaskDetl taskDetl : taskDetls) { - TaskDetlLog taskDetlLog = new TaskDetlLog(); - taskDetlLog.sync(taskDetl); - if (!taskDetlLogService.save(taskDetlLog)) { - throw new CoolException("淇濆瓨浠诲姟鏄庣粏鍘嗗彶妗eけ璐�"); - } - - //淇濆瓨鏄庣粏鎵╁睍瀛楁鍘嗗彶妗� - List<TaskDetlField> detlFields = taskDetlFieldService.list(new LambdaQueryWrapper<TaskDetlField>().eq(TaskDetlField::getDetlId, taskDetl.getId()).eq(TaskDetlField::getHostId, hostId)); - for (TaskDetlField detlField : detlFields) { - //鏄庣粏鎵╁睍瀛楁鏁版嵁淇濆瓨鑷冲巻鍙叉。 - TaskDetlFieldLog taskDetlFieldLog = new TaskDetlFieldLog(); - taskDetlFieldLog.sync(detlField); - if (!taskDetlFieldLogService.save(taskDetlFieldLog)) { - throw new CoolException("鏄庣粏鎵╁睍瀛楁杞巻鍙叉。妗堝け璐�"); - } - - //鍒犻櫎鏄庣粏鎵╁睍 - boolean removeField = taskDetlFieldService.removeById(detlField.getId()); - if(!removeField){ - throw new CoolException("鍒犻櫎鏄庣粏鎵╁睍澶辫触"); - } - } - - //鍒犻櫎鏄庣粏 - boolean removeDetl = taskDetlService.removeById(taskDetl.getId()); - if(!removeDetl){ - throw new CoolException("鏄庣粏鍒犻櫎澶辫触"); - } - } - - //鏇存柊璁㈠崟淇℃伅 - for (TaskDetl taskDetl : taskDetls) { - OrderDetl orderDetl = orderDetlService.getById(taskDetl.getDetlId()); - if (orderDetl == null) { - throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦�"); - } - - orderDetl.setWorkQty(orderDetl.getWorkQty() - taskDetl.getAnfme());//宸ヤ綔涓暟閲忓噺灏� - orderDetl.setQty(orderDetl.getQty() + taskDetl.getAnfme());//宸插畬鎴愭暟閲忓鍔� - orderDetl.setUpdateTime(new Date()); - if (!orderDetlService.updateById(orderDetl)) { - throw new CoolException("鏇存柊璁㈠崟鏄庣粏澶辫触"); - } - - //妫�娴嬭鍗曟槸鍚﹀畬鎴� - boolean checkOrderComplete = orderService.checkOrderComplete(orderDetl.getOrderId()); - if (checkOrderComplete) { - //璁㈠崟宸茬粡瀹屾垚 - Order order = orderService.getById(orderDetl.getOrderId()); - if(order == null) { - throw new CoolException("璁㈠崟涓嶅瓨鍦�"); - } - - order.setOrderSettle(OrderSettleType.COMPLETE.val()); - order.setUpdateTime(new Date()); - if (!orderService.save(order)) { - throw new CoolException("璁㈠崟鏇存柊澶辫触"); - } - } - } - - - } - - } catch (Exception e) { - e.printStackTrace(); - }finally { - InterceptorIgnoreHelper.clearIgnoreStrategy(); - } - } - - @Scheduled(cron = "0/3 * * * * ? ") - @Transactional - public void outExecute() { - InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().tenantLine(true).build()); - try { - - } catch (Exception e) { - e.printStackTrace(); - }finally { - InterceptorIgnoreHelper.clearIgnoreStrategy(); - } - } - -} +package com.zy.asrs.wms.asrs.timer; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.plugins.IgnoreStrategy; +import com.baomidou.mybatisplus.core.plugins.InterceptorIgnoreHelper; +import com.zy.asrs.framework.common.DateUtils; +import com.zy.asrs.framework.exception.CoolException; +import com.zy.asrs.wms.asrs.entity.*; +import com.zy.asrs.wms.asrs.entity.enums.OrderSettleType; +import com.zy.asrs.wms.asrs.entity.enums.TaskStsType; +import com.zy.asrs.wms.asrs.service.*; +import com.zy.asrs.wms.system.entity.Dict; +import com.zy.asrs.wms.system.service.DictService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +public class TaskLogTimer { + + @Autowired + private TaskService taskService; + @Autowired + private TaskDetlService taskDetlService; + @Autowired + private TaskDetlFieldService taskDetlFieldService; + @Autowired + private TaskLogService taskLogService; + @Autowired + private TaskDetlLogService taskDetlLogService; + @Autowired + private TaskDetlFieldLogService taskDetlFieldLogService; + @Autowired + private OrderService orderService; + @Autowired + private OrderDetlService orderDetlService; + @Autowired + private DictService dictService; + @Autowired + private WaveService waveService; + + @Scheduled(cron = "0/15 * * * * ? ") + @Transactional(rollbackFor = Exception.class) + public void inExecute() { + InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().tenantLine(true).build()); + try { + //鑾峰彇鍏ュ簱瀹屾垚浠诲姟 + List<Task> list = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskSts, TaskStsType.UPDATED_IN.id)); + if (list.isEmpty()) { + return; + } + + for (Task task : list) { + Long hostId = task.getHostId(); + //淇濆瓨浠诲姟鍘嗗彶妗� + TaskLog taskLog = new TaskLog(); + taskLog.sync(task); + taskLog.setId(null); + if (!taskLogService.save(taskLog)) { + throw new CoolException("淇濆瓨浠诲姟鍘嗗彶妗eけ璐�"); + } + //淇濆瓨浠诲姟鏄庣粏鍘嗗彶妗� + List<TaskDetl> taskDetls = taskDetlService.getTaskDetlByTaskId(task.getId()); + + if (taskDetls.isEmpty()) { + throw new CoolException("浠诲姟鏄庣粏涓嶅瓨鍦�"); + } else { //TODO 鍏堟洿鏂拌鍗曪紝鍚庡垹闄や换鍔℃槑缁嗐�備换鍔′负53鏃讹紝闇�鏇存柊鏄庣粏銆� + //浠诲姟绫诲瀷涓�53锛屾牴鎹甒aveId淇敼璁㈠崟鏄庣粏 + for (TaskDetl taskDetl : taskDetls) { + if (taskDetl.getDetlId() == null) { + continue; + } + OrderDetl orderDetl = orderDetlService.getById(taskDetl.getDetlId()); + if (orderDetl == null) { + throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦�"); + } + orderDetl.setWorkQty(orderDetl.getWorkQty() - taskDetl.getAnfme());//宸ヤ綔涓暟閲忓噺灏� + orderDetl.setQty(orderDetl.getQty() + taskDetl.getAnfme());//宸插畬鎴愭暟閲忓鍔� + orderDetl.setUpdateTime(new Date()); + if (!orderDetlService.updateById(orderDetl)) { + throw new CoolException("鏇存柊璁㈠崟鏄庣粏澶辫触"); + } + //妫�娴嬭鍗曟槸鍚﹀畬鎴� + boolean checkOrderComplete = orderService.checkOrderComplete(orderDetl.getOrderId()); + + if (checkOrderComplete) { + //璁㈠崟宸茬粡瀹屾垚 + Order order = orderService.getById(orderDetl.getOrderId()); + if (order == null) { + throw new CoolException("璁㈠崟涓嶅瓨鍦�"); + } + order.setOrderSettle(OrderSettleType.COMPLETE.val()); + order.setUpdateTime(new Date()); + if (!orderService.updateById(order)) { + throw new CoolException("璁㈠崟鏇存柊澶辫触"); + } + + } + } + } + + //鍒犻櫎浠诲姟鍘嗗彶妗f + if (!taskService.removeById(task.getId())) { + throw new CoolException("鍒犻櫎浠诲姟妗eけ璐�"); + } + + for (TaskDetl taskDetl : taskDetls) { + TaskDetlLog taskDetlLog = new TaskDetlLog(); + taskDetlLog.sync(taskDetl); + taskDetlLog.setId(null); + taskDetlLog.setTaskId(taskLog.getId()); + if (!taskDetlLogService.save(taskDetlLog)) { + throw new CoolException("淇濆瓨浠诲姟鏄庣粏鍘嗗彶妗eけ璐�"); + } + + //淇濆瓨鏄庣粏鎵╁睍瀛楁鍘嗗彶妗� + List<TaskDetlField> detlFields = taskDetlFieldService.list(new LambdaQueryWrapper<TaskDetlField>().eq(TaskDetlField::getDetlId, taskDetl.getId()).eq(TaskDetlField::getHostId, hostId)); + for (TaskDetlField detlField : detlFields) { + //鏄庣粏鎵╁睍瀛楁鏁版嵁淇濆瓨鑷冲巻鍙叉。 + TaskDetlFieldLog taskDetlFieldLog = new TaskDetlFieldLog(); + taskDetlFieldLog.sync(detlField); + taskDetlFieldLog.setId(null); + taskDetlFieldLog.setDetlId(taskDetlLog.getId()); + if (!taskDetlFieldLogService.save(taskDetlFieldLog)) { + throw new CoolException("鏄庣粏鎵╁睍瀛楁杞巻鍙叉。妗堝け璐�"); + } + + //鍒犻櫎鏄庣粏鎵╁睍 + boolean removeField = taskDetlFieldService.removeById(detlField.getId()); + if (!removeField) { + throw new CoolException("鍒犻櫎鏄庣粏鎵╁睍澶辫触"); + } + } + + //鍒犻櫎鏄庣粏 + boolean removeDetl = taskDetlService.removeById(taskDetl.getId()); + if (!removeDetl) { + throw new CoolException("鏄庣粏鍒犻櫎澶辫触"); + } + } + + } + + } catch (Exception e) { + e.printStackTrace(); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } finally { + InterceptorIgnoreHelper.clearIgnoreStrategy(); + } + } + + @Scheduled(cron = "0/10 * * * * ? ") + @Transactional(rollbackFor = Exception.class) + public void outExecute() { + InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().tenantLine(true).build()); + try { + //鑾峰彇鍑哄簱瀹屾垚浠诲姟 + List<Task> list = taskService.list(new LambdaQueryWrapper<Task>() + .eq(Task::getTaskSts, TaskStsType.UPDATED_OUT.id) + .in(Task::getTaskType, 101, 53, 57)); + if (list.isEmpty()) { + return; + } + + Dict dict = dictService.getOne(new LambdaQueryWrapper<Dict>().eq(Dict::getFlag, "taskLogDiffDays").eq(Dict::getStatus, 1)); + if (dict == null) { + return; + } + for (Task task : list) { + int diff = DateUtils.diff(task.getCreateTime(), new Date()); + int taskLogDiffDays = Integer.parseInt(dict.getValue()); + if (diff < taskLogDiffDays) { + continue; + } + + Long hostId = task.getHostId(); + + //淇濆瓨浠诲姟鏄庣粏鍘嗗彶妗� + List<TaskDetl> taskDetls = taskDetlService.getTaskDetlByTaskId(task.getId()); + if (taskDetls.isEmpty()) { + throw new CoolException("浠诲姟鏄庣粏涓嶅瓨鍦�"); + } + + boolean flag = false; + for (TaskDetl taskDetl : taskDetls) { + if (taskDetl.getWaveId() == null) { + continue; + } + + Wave wave = waveService.getById(taskDetl.getWaveId()); + if (wave != null) { + flag = true;//娉㈡鏈畬鎴� + break; + } + } + + if (flag) { + continue; + } + + + //淇濆瓨浠诲姟鍘嗗彶妗� + TaskLog taskLog = new TaskLog(); + taskLog.sync(task); + taskLog.setId(null); + if (!taskLogService.save(taskLog)) { + throw new CoolException("淇濆瓨浠诲姟鍘嗗彶妗eけ璐�"); + } else { //fixme 鍘嗗彶浠诲姟妗d繚瀛樺悗锛屼慨鏀硅鍗曠姸鎬佷俊鎭悗锛屽啀鍒犻櫎浠诲姟妗� + //鏇存柊璁㈠崟淇℃伅 + taskDetls.forEach(taskDetl -> { + if (taskDetl.getDetlId() != null) { + OrderDetl orderDetl = orderDetlService.getById(taskDetl.getDetlId()); + if (orderDetl == null) { + throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦�"); + } + + orderDetl.setWorkQty(orderDetl.getWorkQty() - taskDetl.getAnfme());//宸ヤ綔涓暟閲忓噺灏� + orderDetl.setQty(orderDetl.getQty() + taskDetl.getAnfme());//宸插畬鎴愭暟閲忓鍔� + orderDetl.setUpdateTime(new Date()); + if (!orderDetlService.updateById(orderDetl)) { + throw new CoolException("鏇存柊璁㈠崟鏄庣粏澶辫触"); + } + + //妫�娴嬭鍗曟槸鍚﹀畬鎴� + boolean checkOrderComplete = orderService.checkOrderComplete(orderDetl.getOrderId()); + if (checkOrderComplete) { + //璁㈠崟宸茬粡瀹屾垚 + Order order = orderService.getById(orderDetl.getOrderId()); + if (order == null) { + throw new CoolException("璁㈠崟涓嶅瓨鍦�"); + } + + order.setOrderSettle(OrderSettleType.COMPLETE.val()); + order.setUpdateTime(new Date()); + if (!orderService.updateById(order)) { + throw new CoolException("璁㈠崟鏇存柊澶辫触"); + } + } + } + }); + } + + //鍒犻櫎浠诲姟鍘嗗彶妗f + if (!taskService.removeById(task.getId())) { + throw new CoolException("鍒犻櫎浠诲姟妗eけ璐�"); + } + + for (TaskDetl taskDetl : taskDetls) { + TaskDetlLog taskDetlLog = new TaskDetlLog(); + taskDetlLog.sync(taskDetl); + taskDetlLog.setId(null); + taskDetlLog.setTaskId(taskLog.getId()); + if (!taskDetlLogService.save(taskDetlLog)) { + throw new CoolException("淇濆瓨浠诲姟鏄庣粏鍘嗗彶妗eけ璐�"); + } + + //淇濆瓨鏄庣粏鎵╁睍瀛楁鍘嗗彶妗� + List<TaskDetlField> detlFields = taskDetlFieldService.list(new LambdaQueryWrapper<TaskDetlField>().eq(TaskDetlField::getDetlId, taskDetl.getId()).eq(TaskDetlField::getHostId, hostId)); + for (TaskDetlField detlField : detlFields) { + //鏄庣粏鎵╁睍瀛楁鏁版嵁淇濆瓨鑷冲巻鍙叉。 + TaskDetlFieldLog taskDetlFieldLog = new TaskDetlFieldLog(); + taskDetlFieldLog.sync(detlField); + taskDetlFieldLog.setId(null); + taskDetlFieldLog.setDetlId(taskDetlLog.getId()); + if (!taskDetlFieldLogService.save(taskDetlFieldLog)) { + throw new CoolException("鏄庣粏鎵╁睍瀛楁杞巻鍙叉。妗堝け璐�"); + } + + //鍒犻櫎鏄庣粏鎵╁睍 + boolean removeField = taskDetlFieldService.removeById(detlField.getId()); + if (!removeField) { + throw new CoolException("鍒犻櫎鏄庣粏鎵╁睍澶辫触"); + } + } + + //鍒犻櫎鏄庣粏 + boolean removeDetl = taskDetlService.removeById(taskDetl.getId()); + if (!removeDetl) { + throw new CoolException("鏄庣粏鍒犻櫎澶辫触"); + } + } + + } + } catch (Exception e) { + e.printStackTrace(); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } finally { + InterceptorIgnoreHelper.clearIgnoreStrategy(); + } + } + +} -- Gitblit v1.9.1