From c635d78b479510ebe2556a420948effcd30a0731 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期六, 21 十二月 2024 18:40:43 +0800 Subject: [PATCH] 新建德森项目分支 --- zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java | 310 +++++++++++++++++++++++++------------------------- 1 files changed, 155 insertions(+), 155 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 7ac6f1d..f41b1c5 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 @@ -1,155 +1,155 @@ -package com.zy.asrs.wms.asrs.timer; - -import com.alibaba.fastjson.JSON; -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.CacheSiteStatusType; -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 com.zy.asrs.wms.utils.OrderUtils; -import com.zy.asrs.wms.utils.Utils; -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.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Optional; - -@Component -public class TaskWaveTimer { - - @Autowired - private TaskService taskService; - @Autowired - private TaskDetlService taskDetlService; - @Autowired - private OrderService orderService; - @Autowired - private OrderDetlService orderDetlService; - @Autowired - private OrderUtils orderUtils; - @Autowired - private CacheSiteService cacheSiteService; - @Autowired - private WaveSeedService waveSeedService; - @Autowired - private DictService dictService; - - @Scheduled(cron = "0/3 * * * * ? ") - @Transactional - public void taskWave() { - InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().tenantLine(true).build()); - try { - Dict dict = dictService.getOne(new LambdaQueryWrapper<Dict>().eq(Dict::getFlag, "autoCreateWaveSeed").eq(Dict::getStatus, 1)); - if (dict == null) { - return; - } - String autoCreateWaveSeed = dict.getValue(); - if (!autoCreateWaveSeed.equals("true")) { - return; - } - - 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()) { - 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) { - 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("浠诲姟鏇存柊澶辫触"); - } - } - } catch (Exception e) { - e.printStackTrace(); - TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); - }finally { - InterceptorIgnoreHelper.clearIgnoreStrategy(); - } - } - -} +package com.zy.asrs.wms.asrs.timer; + +import com.alibaba.fastjson.JSON; +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.CacheSiteStatusType; +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 com.zy.asrs.wms.utils.OrderUtils; +import com.zy.asrs.wms.utils.Utils; +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.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Optional; + +@Component +public class TaskWaveTimer { + + @Autowired + private TaskService taskService; + @Autowired + private TaskDetlService taskDetlService; + @Autowired + private OrderService orderService; + @Autowired + private OrderDetlService orderDetlService; + @Autowired + private OrderUtils orderUtils; + @Autowired + private CacheSiteService cacheSiteService; + @Autowired + private WaveSeedService waveSeedService; + @Autowired + private DictService dictService; + +// @Scheduled(cron = "0/3 * * * * ? ") + @Transactional + public void taskWave() { + InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().tenantLine(true).build()); + try { + Dict dict = dictService.getOne(new LambdaQueryWrapper<Dict>().eq(Dict::getFlag, "autoCreateWaveSeed").eq(Dict::getStatus, 1)); + if (dict == null) { + return; + } + String autoCreateWaveSeed = dict.getValue(); + if (!autoCreateWaveSeed.equals("true")) { + return; + } + + 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()) { + 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) { + 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("浠诲姟鏇存柊澶辫触"); + } + } + } catch (Exception e) { + e.printStackTrace(); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + }finally { + InterceptorIgnoreHelper.clearIgnoreStrategy(); + } + } + +} -- Gitblit v1.9.1