skyouc
2025-06-22 ebe2da6e4eefd59b366ebab3a651b32763b580ed
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;
@@ -42,6 +46,69 @@
    private WaveSeedService waveSeedService;
    @Autowired
    private DictService dictService;
    @Autowired
    private WaveServiceImpl waveService;
    @Autowired
    private WaveLogServiceImpl waveLogService;
    @Autowired
    private WaveDetlServiceImpl waveDetlService;
    @Autowired
    private WaveDetlLogServiceImpl waveDetlLogService;
    /**
     * @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:
@@ -63,7 +130,8 @@
            }
            //查询状态为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<>();
            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 {
@@ -84,7 +152,7 @@
                        //分配订单
                        Long waveId = taskDetl.getWaveId();
                        //同一个物料只添加一次播种任务
                        if(sycMatnrs.contains(taskDetl.getMatnr())) {
                        if (sycMatnrs.contains(taskDetl.getMatnr())) {
                            continue;
                        }
                        sycMatnrs.add(taskDetl.getMatnr());
@@ -104,7 +172,7 @@
                                .in(OrderDetl::getOrderId, orderIds)
                                .eq(OrderDetl::getStockIndex, matUniqueKey)
                                .eq(OrderDetl::getHostId, hostId));
                        if(orderDetls.isEmpty()){
                        if (orderDetls.isEmpty()) {
                            throw new CoolException("订单明细不存在");
                        }
@@ -112,11 +180,15 @@
                        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; }
                            if (issued <= 0.0D) {
                                continue;
                            }
                            if (anfme <= 0.0D) {
                                break;
                            }
                            double workQty = issued;
                            if(anfme - issued < 0){
                            if (anfme - issued < 0) {
                                workQty = anfme;
                            }
                            anfme -= workQty;
@@ -168,7 +240,7 @@
        } catch (Exception e) {
            e.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        }finally {
        } finally {
            InterceptorIgnoreHelper.clearIgnoreStrategy();
        }
    }