From 66f482d6b979f4988f425d029ea4be3c6ec52471 Mon Sep 17 00:00:00 2001 From: yangyang Date: 星期六, 21 六月 2025 16:14:13 +0800 Subject: [PATCH] no message --- zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java | 263 +++++++++++++++++++++++++++++++++++----------------- 1 files changed, 178 insertions(+), 85 deletions(-) diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java index f41b1c5..9572fb5 100644 --- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java +++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java @@ -10,6 +10,10 @@ 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.asrs.service.impl.WaveDetlLogServiceImpl; +import com.zy.asrs.wms.asrs.service.impl.WaveDetlServiceImpl; +import com.zy.asrs.wms.asrs.service.impl.WaveLogServiceImpl; +import com.zy.asrs.wms.asrs.service.impl.WaveServiceImpl; import com.zy.asrs.wms.system.entity.Dict; import com.zy.asrs.wms.system.service.DictService; import com.zy.asrs.wms.utils.OrderUtils; @@ -20,10 +24,8 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Optional; +import java.util.*; +import java.util.stream.Collectors; @Component public class TaskWaveTimer { @@ -44,9 +46,77 @@ private WaveSeedService waveSeedService; @Autowired private DictService dictService; + @Autowired + private WaveServiceImpl waveService; + @Autowired + private WaveLogServiceImpl waveLogService; + @Autowired + private WaveDetlServiceImpl waveDetlService; + @Autowired + private WaveDetlLogServiceImpl waveDetlLogService; -// @Scheduled(cron = "0/3 * * * * ? ") - @Transactional + + /** + * @author Ryan + * @date 2025/6/20 + * @description: 娉㈡鍔犲叆鍘嗗彶妗� + * @version 1.0 + */ + @Scheduled(cron = "0/30 * * * * ? ") + @Transactional(rollbackFor = Exception.class) + public void addWaveHistories() { + List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskSts, TaskStsType.COMPLETE_OUT.id)); + if (tasks.isEmpty()) { + return; + } + for (Task task : tasks) { + List<TaskDetl> detls = taskDetlService.list(new LambdaQueryWrapper<TaskDetl>().eq(TaskDetl::getTaskId, task.getId())); + if (detls.isEmpty()) { + continue; + } + Set<Long> waveIds = detls.stream().map(TaskDetl::getWaveId).collect(Collectors.toSet()); + + if (waveIds.isEmpty()) { + throw new CoolException("娉㈡淇℃伅涓虹┖锛侊紒"); + } + List<Wave> waves = waveService.list(new LambdaQueryWrapper<Wave>().in(Wave::getId, waveIds)); + for (Wave wave : waves) { + WaveLog waveLog = new WaveLog(); + waveLog.sync(wave); + waveLog.setId(null); + if (!waveLogService.save(waveLog)) { + throw new CoolException("娉㈡杞巻鍙插け璐�"); + } + + List<WaveDetl> waveDetls = waveDetlService.list(new LambdaQueryWrapper<WaveDetl>().eq(WaveDetl::getWaveId, wave.getId())); + for (WaveDetl waveDetl : waveDetls) { + WaveDetlLog waveDetlLog = new WaveDetlLog(); + waveDetlLog.sync(waveDetl); + waveDetlLog.setId(null); + waveDetlLog.setWaveId(waveLog.getId()); + if (!waveDetlLogService.save(waveDetlLog)) { + throw new CoolException("娉㈡鏄庣粏杞巻鍙插け璐�"); + } + if (!waveDetlService.removeById(waveDetl.getId())) { + throw new CoolException("娉㈡鏄庣粏鍒犻櫎澶辫触"); + } + } + if (!waveService.removeById(wave.getId())) { + throw new CoolException("娉㈡鍒犻櫎澶辫触"); + } + } + } + } + + + + /** + * modifty锛� + * original : fetch datasource of task type on WCS_EXECUTE_OUT_TASK_DONE + * now: Fetch datasource of task type on WCS_EXECUTE_OUT_ARRIVED, After completing the task and for setting the task type equal to GENERATE_WAVE_SEED + */ + @Scheduled(cron = "0/3 * * * * ? ") + @Transactional(rollbackFor = Exception.class) public void taskWave() { InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().tenantLine(true).build()); try { @@ -58,96 +128,119 @@ if (!autoCreateWaveSeed.equals("true")) { return; } + //鏌ヨ鐘舵�佷负RCS浠诲姟瀹屾垚鎵�鏈変换鍔″崟鎹� +// List<Task> taskList = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskSts, TaskStsType.WAVE_SEED.id)); + List<Task> taskList = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskSts, TaskStsType.WCS_EXECUTE_OUT.id)); + HashSet<String> sycMatnrs = new HashSet<>(); + if (taskList.isEmpty()) { +// throw new CoolException("娌℃湁鍙挱绉嶄换鍔★紒锛�"); + } else { + for (Task task : taskList) { + Long hostId = task.getHostId(); - List<Task> taskList = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskSts, TaskStsType.WAVE_SEED.id)); - for (Task task : taskList) { - Long hostId = task.getHostId(); - - List<TaskDetl> taskDetls = taskDetlService.list(new LambdaQueryWrapper<TaskDetl>().eq(TaskDetl::getTaskId, task.getId()).eq(TaskDetl::getHostId, hostId)); - if (taskDetls.isEmpty()) { - continue; - } - - for (TaskDetl taskDetl : taskDetls) { - //鍒嗛厤璁㈠崟 - Long waveId = taskDetl.getWaveId(); - List<Order> list = orderService.list(new LambdaQueryWrapper<Order>().eq(Order::getWaveId, waveId)); - if (list.isEmpty()) { + List<TaskDetl> taskDetls = taskDetlService.list(new LambdaQueryWrapper<TaskDetl>().eq(TaskDetl::getTaskId, task.getId()).eq(TaskDetl::getHostId, hostId)); + if (taskDetls.isEmpty()) { + continue; + } + // 杩囨护宸茬粡鐢熸垚娉㈡鎾鏁版嵁鐨勪换鍔� 璇ヤ换鍔$殑浠诲姟鏄庣粏鍙蜂笉鑳藉湪鎾鏁版嵁琛ㄩ噷闈� + long count = waveSeedService.count(new LambdaQueryWrapper<WaveSeed>().in(WaveSeed::getTaskDetlId, taskDetls.stream().map(TaskDetl::getId).collect(Collectors.toList())).eq(WaveSeed::getHostId, hostId)); + if (count > 0) { continue; } - ArrayList<Long> orderIds = new ArrayList<>(); - for (Order order : list) { - orderIds.add(order.getId()); + for (TaskDetl taskDetl : taskDetls) { + //鍒嗛厤璁㈠崟 + Long waveId = taskDetl.getWaveId(); + //鍚屼竴涓墿鏂欏彧娣诲姞涓�娆℃挱绉嶄换鍔� + if (sycMatnrs.contains(taskDetl.getMatnr())) { + continue; + } + sycMatnrs.add(taskDetl.getMatnr()); + + List<Order> list = orderService.list(new LambdaQueryWrapper<Order>().eq(Order::getWaveId, waveId)); + if (list.isEmpty()) { + continue; + } + + ArrayList<Long> orderIds = new ArrayList<>(); + for (Order order : list) { + orderIds.add(order.getId()); + } + + String matUniqueKey = Utils.getMatUniqueKey(taskDetl.getMatnr(), taskDetl.getBatch(), taskDetl.getUniqueField()); + List<OrderDetl> orderDetls = orderDetlService.list(new LambdaQueryWrapper<OrderDetl>() + .in(OrderDetl::getOrderId, orderIds) + .eq(OrderDetl::getStockIndex, matUniqueKey) + .eq(OrderDetl::getHostId, hostId)); + if (orderDetls.isEmpty()) { + throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦�"); + } + + Double anfme = taskDetl.getAnfme(); + for (OrderDetl orderDetl : orderDetls) { + //fixme 浣滀笟涓暟閲忚皟鏁存斁鑷筹紝鐢熸垚鍑哄簱浠诲姟鎴愬姛鍚� + double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getQty() - orderDetl.getWorkQty()).orElse(0.0D); + if (issued <= 0.0D) { + continue; + } + if (anfme <= 0.0D) { + break; + } + + double workQty = issued; + if (anfme - issued < 0) { + workQty = anfme; + } + anfme -= workQty; + + orderUtils.updateWorkQty(orderDetl.getId(), workQty, true); +// + //fixme 鐢熸垚娉㈡鎾鏁版嵁鏃讹紝涓嶈嚜鍔ㄦ坊鍔犵珯鐐圭粦瀹氾紝绔欑偣缁戝畾璋冩暣鑷冲嚭搴撶粦瀹氭挱绉嶅簱浣嶆椂鏇存柊 +// CacheSite cacheSite = cacheSiteService.getOne(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getOrderId, orderDetl.getOrderId()).eq(CacheSite::getHostId, hostId)); +// if (cacheSite == null) { +// throw new CoolException("缂撳瓨绔欑┖闂翠笉瀛樺湪"); +// } + + WaveSeed waveSeed = new WaveSeed(); +// waveSeed.setSiteId(cacheSite.getId()); +// waveSeed.setSiteNo(cacheSite.getSiteNo()); + waveSeed.setOrderNo(orderDetl.getOrderNo()); + waveSeed.setOrderId(orderDetl.getOrderId()); + waveSeed.setOrderDetlId(orderDetl.getId()); + waveSeed.setWaveId(taskDetl.getWaveId()).setWaveNo(taskDetl.getWaveNo()); + waveSeed.setTaskDetlId(taskDetl.getId()); + //涓烘弧瓒冲綋鍓嶉渶姹傦紝缁忕‘璁わ紝鏀规垚璁㈠崟鏁伴噺 + waveSeed.setAnfme(orderDetl.getAnfme()); + waveSeed.setWorkQty(0D); + waveSeed.setMatnr(taskDetl.getMatnr()); + waveSeed.setBatch(taskDetl.getBatch()); + waveSeed.setFieldParams(JSON.toJSONString(taskDetl.getUniqueField())); + waveSeed.setHostId(hostId); + if (!waveSeedService.save(waveSeed)) { + throw new CoolException("娉㈡鎾鍒涘缓澶辫触"); + } +// cacheSite.setOrderId(orderDetl.getOrderId()); +// cacheSite.setOrderNo(orderDetl.getOrderNo()); +// cacheSite.setSiteStatus(CacheSiteStatusType.R.id); +// cacheSite.setUpdateTime(new Date()); +// if (!cacheSiteService.updateById(cacheSite)) { +// throw new CoolException("缂撳瓨绔欐洿鏂板け璐�"); +// } + + } } - String matUniqueKey = Utils.getMatUniqueKey(taskDetl.getMatnr(), taskDetl.getBatch(), taskDetl.getUniqueField()); - List<OrderDetl> orderDetls = orderDetlService.list(new LambdaQueryWrapper<OrderDetl>() - .in(OrderDetl::getOrderId, orderIds) - .eq(OrderDetl::getStockIndex, matUniqueKey) - .eq(OrderDetl::getHostId, hostId)); - if(orderDetls.isEmpty()){ - throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦�"); - } - - Double anfme = taskDetl.getAnfme(); - for (OrderDetl orderDetl : orderDetls) { - double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getQty() - orderDetl.getWorkQty()).orElse(0.0D); - if (issued <= 0.0D) { continue; } - if (anfme <= 0.0D) { break; } - - double workQty = issued; - if(anfme - issued < 0){ - workQty = anfme; - } - anfme -= workQty; - - orderUtils.updateWorkQty(orderDetl.getId(), workQty, true); - - CacheSite cacheSite = cacheSiteService.getOne(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getOrderId, orderDetl.getOrderId()).eq(CacheSite::getHostId, hostId)); - if (cacheSite == null) { - throw new CoolException("缂撳瓨绔欑┖闂翠笉瀛樺湪"); - } - - WaveSeed waveSeed = new WaveSeed(); - waveSeed.setSiteId(cacheSite.getId()); - waveSeed.setSiteNo(cacheSite.getSiteNo()); - waveSeed.setOrderNo(orderDetl.getOrderNo()); - waveSeed.setOrderId(orderDetl.getOrderId()); - waveSeed.setOrderDetlId(orderDetl.getId()); - waveSeed.setTaskDetlId(taskDetl.getId()); - waveSeed.setAnfme(taskDetl.getAnfme()); - waveSeed.setWorkQty(0D); - waveSeed.setMatnr(taskDetl.getMatnr()); - waveSeed.setBatch(taskDetl.getBatch()); - waveSeed.setFieldParams(JSON.toJSONString(taskDetl.getUniqueField())); - waveSeed.setHostId(hostId); - if (!waveSeedService.save(waveSeed)) { - throw new CoolException("娉㈡鎾鍒涘缓澶辫触"); - } - - cacheSite.setOrderId(orderDetl.getOrderId()); - cacheSite.setOrderNo(orderDetl.getOrderNo()); - cacheSite.setSiteStatus(CacheSiteStatusType.R.id); - cacheSite.setUpdateTime(new Date()); - if (!cacheSiteService.updateById(cacheSite)) { - throw new CoolException("缂撳瓨绔欐洿鏂板け璐�"); - } - - } - - } - - task.setTaskSts(TaskStsType.COMPLETE_OUT.id); - task.setUpdateTime(new Date()); - if (!taskService.updateById(task)) { - throw new CoolException("浠诲姟鏇存柊澶辫触"); +// task.setTaskSts(TaskStsType.GENERATE_WAVE_SEED.id); +// task.setUpdateTime(new Date()); +// if (!taskService.updateById(task)) { +// throw new CoolException("浠诲姟鏇存柊澶辫触"); +// } } } } catch (Exception e) { e.printStackTrace(); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); - }finally { + } finally { InterceptorIgnoreHelper.clearIgnoreStrategy(); } } -- Gitblit v1.9.1