chen.lin
昨天 e877563a0916d1bec2472bbbed04ab17f0921ec4
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java
@@ -1,6 +1,7 @@
package com.vincent.rsf.server.manager.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.api.controller.erp.params.TaskInParam;
import com.vincent.rsf.server.api.entity.dto.InTaskMsgDto;
@@ -51,6 +52,12 @@
    private WaveService waveService;
    @Autowired
    private BasStationService basStationService;
    @Autowired
    private LocItemWorkingService locItemWorkingService;
    @Autowired
    private CheckDiffService checkDiffService;
    @Autowired
    private CheckDiffItemService checkDiffItemService;
    /**
@@ -106,7 +113,7 @@
                //空容器出库
                DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
                        .eq(!Objects.isNull(loc.getChannel()), DeviceSite::getChannel, loc.getChannel())
                        .eq(DeviceSite::getSite, siteNo).eq(DeviceSite::getType, TaskType.TASK_TYPE_EMPTY_OUT.type));
                        .eq(DeviceSite::getSite, siteNo).eq(DeviceSite::getType, TaskType.TASK_TYPE_EMPTY_OUT.type).last("limit 1"));
                if (Objects.isNull(deviceSite)) {
                    throw new CoolException("站点不支持空容器出库!!");
                }
@@ -134,9 +141,9 @@
    @Synchronized
    @Transactional(rollbackFor = Exception.class)
    public synchronized void generateTask(Short resouce, LocToTaskParams map, Long loginUserId) throws Exception {
        if (Objects.isNull(map.getSiteNo())) {
            throw new CoolException("站点不能为空!");
        }
//        if (Objects.isNull(map.getSiteNo())) {
//            throw new CoolException("站点不能为空!");
//        }
        if (Objects.isNull(map.getItems()) || map.getItems().isEmpty()) {
            throw new CoolException("明细不能为空!");
        }
@@ -175,7 +182,7 @@
                throw new CoolException("库位状态更新失败!!");
            }
            //增加对备货单得判断
            //增加对备货单的判断
            Integer taskStatus = resouce.equals(TaskResouceType.TASK_RESOUCE_STOCK_UP.val)
                    ? TaskStsType.MISSION_INITIAL.id:TaskStsType.MISSION_INITIAL.id;
@@ -192,6 +199,8 @@
                    .setUpdateTime(new Date())
                    .setTaskStatus(taskStatus)
                    .setBarcode(loc.getBarcode())
                    .setTargSiteArea(map.getTargSiteAreaList())
                    .setTargSiteAreaNow(map.getTargSiteAreaNow())
                    .setMemo(map.getMemo());
            List<LocItem> locItems = this.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getLocId, key));
@@ -211,7 +220,7 @@
                    DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
                            .eq(DeviceSite::getSite, siteNo)
                            .eq(!Objects.isNull(loc.getChannel()),DeviceSite::getChannel, loc.getChannel())
                            .eq(DeviceSite::getType, TaskType.TASK_TYPE_PICK_AGAIN_OUT.type));
                            .eq(DeviceSite::getType, TaskType.TASK_TYPE_PICK_AGAIN_OUT.type).last("limit 1"),false);
                    if (Objects.isNull(deviceSite)) {
                        throw new CoolException("站点不支持拣料出库!!");
                    }
@@ -221,7 +230,7 @@
                        //全板出库
                        DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
                                .eq(DeviceSite::getSite, siteNo).eq(DeviceSite::getType, TaskType.TASK_TYPE_CROSS_DOCKING_OUT.type)
                                .eq(!Objects.isNull(loc.getChannel()), DeviceSite::getChannel, loc.getChannel()));
                                .eq(!Objects.isNull(loc.getChannel()), DeviceSite::getChannel, loc.getChannel()).last("limit 1"));
                        if (Objects.isNull(deviceSite)) {
                            throw new CoolException("站点不支持越库!!");
                        }
@@ -230,7 +239,7 @@
                        //全板出库
                        DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
                                .eq(DeviceSite::getSite, siteNo).eq(DeviceSite::getType, TaskType.TASK_TYPE_OUT.type)
                                .eq(!Objects.isNull(loc.getChannel()), DeviceSite::getChannel, loc.getChannel()));
                                .eq(!Objects.isNull(loc.getChannel()), DeviceSite::getChannel, loc.getChannel()).last("limit 1"));
                        if (Objects.isNull(deviceSite)) {
                            throw new CoolException("站点不支持全板出库!!");
                        }
@@ -243,7 +252,7 @@
                DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
                        .eq(!Objects.isNull(loc.getChannel()), DeviceSite::getChannel, loc.getChannel())
                        .eq(DeviceSite::getSite, siteNo)
                        .eq(DeviceSite::getType, TaskType.TASK_TYPE_CHECK_OUT.type));
                        .eq(DeviceSite::getType, TaskType.TASK_TYPE_CHECK_OUT.type).last("limit 1"));
                if (Objects.isNull(deviceSite)) {
                    throw new CoolException("当前站点不支持盘点出库!!");
                }
@@ -286,7 +295,6 @@
                    throw new CoolException("主任务关联失败!!");
                }
            }
            List<TaskItem> taskItems = new ArrayList<>();
            listMap.get(key).forEach(item -> {
                TaskItem taskItem = new TaskItem();
@@ -340,10 +348,86 @@
                if (!locItemService.updateById(item)) {
                    throw new CoolException("库存信息修改失败!!");
                }
            });
            locItemWorkingService.remove(new LambdaQueryWrapper<LocItemWorking>().eq(LocItemWorking::getTaskId, task.getId()));
            List<LocItemWorking> workings = new ArrayList<>();
            for (LocItem item : locItems) {
                LocItemWorking working = new LocItemWorking();
                BeanUtils.copyProperties(item, working);
                working.setId(null)
                        .setTaskId(task.getId())
                        .setLocItemId(item.getId())
                        .setUpdateBy(loginUserId)
                        .setUpdateTime(new Date());
                workings.add(working);
            }
            if (!locItemWorkingService.saveBatch(workings)) {
                throw new CoolException("临时库存更新失败!!");
            }
            if (!taskItemService.saveBatch(taskItems)) {
                throw new CoolException("任务明细生成失败!!");
            }
            // 无单盘点:提取出库时即生成盘点差异单,便于 PDA 按差异单校验
            if (map.getType().equals(Constants.TASK_TYPE_OUT_CHECK)) {
                Date now = new Date();
                double sumAnfme = taskItems.stream().mapToDouble(ti -> ti.getAnfme() != null ? ti.getAnfme() : 0).sum();
                CheckDiff checkDiff = new CheckDiff();
                checkDiff.setOrderCode(task.getTaskCode())
                        .setOrderId(null)
                        .setCheckType(0)
                        .setExceStatus(CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_INIT.val)
                        .setAnfme(sumAnfme)
                        .setCheckQty(0D)
                        .setStatus(1)
                        .setDeleted(0)
                        .setTenantId(task.getTenantId())
                        .setCreateBy(loginUserId)
                        .setCreateTime(now)
                        .setUpdateBy(loginUserId)
                        .setUpdateTime(now);
                if (loc.getAreaId() != null) {
                    checkDiff.setAreaId(loc.getAreaId()).setAreaName(loc.getAreaId$());
                }
                if (!checkDiffService.save(checkDiff)) {
                    throw new CoolException("无单盘点差异单创建失败!!");
                }
                List<CheckDiffItem> diffItems = new ArrayList<>();
                for (TaskItem ti : taskItems) {
                    CheckDiffItem diffItem = new CheckDiffItem();
                    diffItem.setCheckId(checkDiff.getId())
                            .setOrderCode(task.getTaskCode())
                            .setTaskId(task.getId())
                            .setTaskItemId(ti.getId())
                            .setBarcode(task.getBarcode())
                            .setAnfme(ti.getAnfme() != null ? ti.getAnfme() : 0D)
                            .setCheckQty(ti.getAnfme() != null ? ti.getAnfme() : 0D)
                            .setMatnrCode(ti.getMatnrCode())
                            .setMaktx(ti.getMaktx())
                            .setBatch(ti.getBatch())
                            .setSpec(ti.getSpec())
                            .setModel(ti.getModel())
                            .setExceStatus(CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_INIT.val)
                            .setStatus(1)
                            .setDeleted(0)
                            .setTenantId(task.getTenantId())
                            .setCreateBy(loginUserId)
                            .setCreateTime(now)
                            .setUpdateBy(loginUserId)
                            .setUpdateTime(now);
                    diffItems.add(diffItem);
                }
                if (!checkDiffItemService.saveBatch(diffItems)) {
                    throw new CoolException("无单盘点差异明细创建失败!!");
                }
                taskItemService.update(new LambdaUpdateWrapper<TaskItem>()
                        .set(TaskItem::getSourceCode, task.getTaskCode())
                        .eq(TaskItem::getTaskId, task.getId()));
            }
        });
    }
@@ -381,7 +465,7 @@
            //目标库位为空,自动获取新库位
            DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
                    .eq(DeviceSite::getType, TaskType.TASK_TYPE_LOC_MOVE.type)
                    .eq(!Objects.isNull(orgLoc.getChannel()), DeviceSite::getChannel, orgLoc.getChannel()), false);
                    .eq(!Objects.isNull(orgLoc.getChannel()), DeviceSite::getChannel, orgLoc.getChannel()).last("limit 1"), false);
            if (Objects.isNull(deviceSite)) {
                throw new CoolException("站点信息不存在!!");
            }