| | |
| | | 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();
|
| | | }
|
| | | }
|
| | |
|
| | | }
|