#
Junjie
2024-09-12 fb4e7fd8575a97467a972028a91484f71985656c
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java
@@ -52,7 +52,12 @@
    private OperationPortService operationPortService;
    @Autowired
    private OrderUtils orderUtils;
    @Autowired
    private OrderNoRuleService orderNoRuleService;
    @Autowired
    private WaveService waveService;
    @Autowired
    private WaveDetlService waveDetlService;
    /**
     * 出库
@@ -330,6 +335,8 @@
            Long locId = entry.getKey();
            List<OrderOutBatchPreviewDto> previewDtos = entry.getValue();
            Boolean all = outUtils.isAllForPreview(locId, previewDtos);
            OrderOutBatchPreviewDto previewDto = previewDtos.get(0);
            Long operationPortId = previewDto.getOperationPort();
            Loc loc = locService.getById(locId);
            if (loc == null) {
@@ -338,6 +345,11 @@
            if (!loc.getLocStsId().equals(LocStsType.F.val())) {
                continue;
            }
            OperationPort operationPort = operationPortService.getById(operationPortId);
            if (operationPort == null) {
                throw new CoolException("作业口不存在");
            }
@@ -349,7 +361,7 @@
            task.setTaskType(taskType);
            task.setIoPri(workService.generateIoPri(taskType));
            task.setOriginLoc(loc.getLocNo());
            task.setTargetSite("A");
            task.setTargetSite(operationPort.getFlag());
            task.setBarcode(loc.getBarcode());
            boolean res = taskService.save(task);
            if (!res) {
@@ -370,6 +382,7 @@
                TaskDetl taskDetl = new TaskDetl();
                taskDetl.sync(locDetl);
                taskDetl.setId(null);
                taskDetl.setTaskId(task.getId());
                taskDetl.setAnfme(dto.getAnfme());
                taskDetl.setStock(locDetl.getAnfme());
@@ -384,6 +397,7 @@
                for (LocDetlField locDetlField : locDetlFields) {
                    TaskDetlField taskDetlField = new TaskDetlField();
                    taskDetlField.sync(locDetlField);
                    taskDetlField.setId(null);
                    taskDetlField.setDetlId(taskDetl.getId());
                    boolean taskDetlFieldSave = taskDetlFieldService.save(taskDetlField);
                    if(!taskDetlFieldSave){
@@ -588,6 +602,7 @@
            List<OrderDetl> orderDetlList = detlMap.get(matUniqueKey);
            for (OrderDetl orderDetl : orderDetlList) {
                orderDetl = orderDetlService.getById(orderDetl);
                double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getQty() - orderDetl.getWorkQty()).orElse(0.0D);
                if (issued <= 0D) {
                    continue;
@@ -597,19 +612,18 @@
                orderOutMergeDto.sync(param);
                orderOutMergeDto.setOrderDetlId(orderDetl.getId());
                Double anfme = orderDetl.getAnfme();
                Double updateWorkQty = null;
                double diffAnfme = requireAnfme - anfme;
                if (diffAnfme >= 0) {
                    orderOutMergeDto.setAnfme(anfme);
                    updateWorkQty = anfme;
                    requireAnfme -= anfme;
                if (requireAnfme > issued) {
                    orderOutMergeDto.setAnfme(issued);
                    updateWorkQty = issued;
                    requireAnfme -= issued;
                }else {
                    orderOutMergeDto.setAnfme(requireAnfme);
                    updateWorkQty = requireAnfme;
                    requireAnfme -= requireAnfme;
                }
                orderOutMergeDtos.add(orderOutMergeDto);
                orderUtils.updateWorkQty(orderDetl.getId(), updateWorkQty);
@@ -680,6 +694,7 @@
                TaskDetl taskDetl = new TaskDetl();
                taskDetl.sync(locDetl);
                taskDetl.setId(null);
                taskDetl.setTaskId(task.getId());
                taskDetl.setAnfme(merge.getAnfme());
                taskDetl.setStock(locDetl.getAnfme());
@@ -694,6 +709,7 @@
                for (LocDetlField locDetlField : locDetlFields) {
                    TaskDetlField taskDetlField = new TaskDetlField();
                    taskDetlField.sync(locDetlField);
                    taskDetlField.setId(null);
                    taskDetlField.setDetlId(taskDetl.getId());
                    boolean taskDetlFieldSave = taskDetlFieldService.save(taskDetlField);
                    if(!taskDetlFieldSave){
@@ -715,4 +731,86 @@
    }
    @Transactional
    public void generateWave(List<Long> orderIds) {
        if (orderIds == null) {
            throw new CoolException("参数不能为空");
        }
        if (orderIds.isEmpty()) {
            throw new CoolException("参数不能为空");
        }
        List<Order> orderList = orderService.listByIds(orderIds);
        if (orderList.isEmpty()) {
            throw new CoolException("订单不存在");
        }
        for (Order order : orderList) {
            if (order.getWaveId() != null) {
                throw new CoolException("当前订单中已经生成波次");
            }
        }
        String waveNo = orderNoRuleService.getOrderNo(3);
        Wave wave = new Wave();
        wave.setWaveNo(waveNo);
        wave.setWaveType(0);
        if (!waveService.save(wave)) {
            throw new CoolException("波次生成失败");
        }
        for (Order order : orderList) {
            WaveDetl waveDetl = new WaveDetl();
            waveDetl.setWaveNo(waveNo);
            waveDetl.setWaveId(wave.getId());
            waveDetl.setOrderId(order.getId());
            waveDetl.setOrderNo(order.getOrderNo());
            if (!waveDetlService.save(waveDetl)) {
                throw new CoolException("波次明细生成失败");
            }
            order.setWaveId(wave.getId());
            order.setWaveNo(waveNo);
            order.setUpdateTime(new Date());
            if (!orderService.updateById(order)) {
                throw new CoolException("订单反写波次失败");
            }
        }
    }
    @Transactional
    public void cancelWave(List<Long> waveIds) {
        if (waveIds == null) {
            throw new CoolException("参数不能为空");
        }
        if (waveIds.isEmpty()) {
            throw new CoolException("参数不能为空");
        }
        List<Wave> waves = waveService.listByIds(waveIds);
        if (waves.isEmpty()) {
            throw new CoolException("波次不存在");
        }
        for (Wave wave : waves) {
            List<WaveDetl> waveDetls = waveDetlService.list(new LambdaQueryWrapper<WaveDetl>().eq(WaveDetl::getWaveId, wave.getId()));
            for (WaveDetl waveDetl : waveDetls) {
                Order order = orderService.getById(waveDetl.getOrderId());
                order.setWaveId(null);
                order.setWaveNo(null);
                if (!orderService.updateById(order)) {
                    throw new CoolException("订单反写失败");
                }
                waveDetlService.removeById(waveDetl.getId());
            }
            waveService.removeById(wave.getId());
        }
    }
}