自动化立体仓库 - WMS系统
zyx
2023-11-09 98b1835a279fd8c9ed2a21fae3501f24c470c39b
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -23,6 +23,7 @@
import com.zy.common.web.BaseController;
import com.zy.common.web.WcsController;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -77,6 +78,10 @@
    private RowLastnoService rowLastnoService;
    @Autowired
    private SlaveProperties slaveProperties;
    @Autowired
    private DocTypeService docTypeService;
    @Autowired
    private AgvWaitPakinService agvWaitPakinService;
    @Override
    @Transactional
@@ -124,8 +129,7 @@
        // 生成工作档明细
        List<DetlDto> detlDtos = new ArrayList<>();
        param.getList().forEach(elem -> {
            DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme(), elem.getCsocode(), elem.getIsoseq());
            detlDto.setContainerCode(elem.getContainerCode());
            DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme(), elem.getCsocode(), elem.getIsoseq(),elem.getContainerCode());
            if (DetlDto.has(detlDtos, detlDto)) {
                DetlDto detlDto1 = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch(),detlDto.getCsocode(),detlDto.getIsoseq(),detlDto.getContainerCode());
                assert detlDto1 != null;
@@ -191,13 +195,13 @@
                }
            }
            List<String> groupInnerLoc = Utils.getGroupInnerLoc(locNo);
            if (!Cools.isEmpty(groupInnerLoc)) {
                for (String insideLoc : groupInnerLoc) {
                    if (locNos.contains(insideLoc)){
            List<String> groupOuterLoc = Utils.getGroupOuterLoc(locNo);
            if (!Cools.isEmpty(groupOuterLoc)) {
                for (String outerLoc : groupOuterLoc) {
                    if (locNos.contains(outerLoc)){
                        continue;
                    }
                    LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", insideLoc));
                    LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", outerLoc));
                    if (locMast != null) {
                        if (!locMast.getLocSts().equals("O") && !locMast.getLocSts().equals("R")){
                            sign=true;
@@ -217,7 +221,7 @@
        List<LocDetlDto> locDetlDtos = new ArrayList<>();
        for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) {
            if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) {
                LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getBatch());
                LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getBatch(), paramLocDetl.getContainerCode());
                if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount()));
            }
        }
@@ -304,6 +308,21 @@
            StaDesc staDesc = staDescService.queryCrnStn(ioType, outCrnNo, staNo.getDevNo());
            // 生成工作号
            int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
            Integer stnNo = staDesc.getStnNo();//目标站
            Integer sourceStaNo = staDesc.getCrnStn();//源站
            if (stnNo == 325 || stnNo == 331 || stnNo == 333 || stnNo == 339) {
                stnNo = staDesc.getCrnStn();
                sourceStaNo = staDesc.getStnNo();
            }
            int lev = Utils.getLev(dto.getLocNo());
            if (lev == 1 || lev == 2) {
                if (!(stnNo == 100 || stnNo == 103 || stnNo == 105)) {
                    throw new CoolException("1、2层货物仅允许在一楼进行出库");
                }
            }
            // 生成工作档
            WrkMast wrkMast = new WrkMast();
            wrkMast.setWrkNo(workNo);
@@ -314,8 +333,8 @@
            wrkMast.setIoPri(ioPri); // 优先级:13
            wrkMast.setOutMost(outMost?1:0);;
            wrkMast.setCrnNo(outMost?outCrnNo:locMast.getCrnNo());
            wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 源站
            wrkMast.setStaNo(staDesc.getStnNo()); // 目标站
            wrkMast.setSourceStaNo(sourceStaNo); // 源站
            wrkMast.setStaNo(stnNo); // 目标站
            wrkMast.setSourceLocNo(dto.getLocNo()); // 源库位
            wrkMast.setFullPlt("Y"); // 满板:Y
            wrkMast.setPicking("N"); // 拣料
@@ -382,6 +401,21 @@
        StaDesc staDesc = staDescService.queryCrnStnAuto(ioType, outCrnNo, staNo.getDevNo());
        // 生成工作号
        int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
        Integer stnNo = staDesc.getStnNo();//目标站
        Integer sourceStaNo = staDesc.getCrnStn();//源站
        if (stnNo == 325 || stnNo == 331 || stnNo == 333 || stnNo == 339) {
            stnNo = staDesc.getCrnStn();
            sourceStaNo = staDesc.getStnNo();
        }
        int lev = Utils.getLev(taskDto.getLocNo());
        if (lev == 1 || lev == 2) {
            if (!(stnNo == 100 || stnNo == 103 || stnNo == 105)) {
                throw new CoolException("1、2层货物仅允许在一楼进行出库");
            }
        }
        // 生成工作档
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
@@ -392,8 +426,12 @@
        wrkMast.setIoPri(ioPri); // 优先级:13
        wrkMast.setOutMost(outMost?1:0);;
        wrkMast.setCrnNo(outMost?outCrnNo:locMast.getCrnNo());
        wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 源站
        wrkMast.setStaNo(staDesc.getStnNo()); // 目标站
        wrkMast.setSourceStaNo(sourceStaNo); // 源站
        wrkMast.setStaNo(stnNo); // 目标站
        if(ioType == 101 && taskDto.getStaNo()>=300){
            wrkMast.setSourceStaNo(346); // 源站
            wrkMast.setStaNo(346); // 目标站
        }
        wrkMast.setSourceLocNo(taskDto.getLocNo()); // 源库位
        wrkMast.setFullPlt("Y"); // 满板:Y
        wrkMast.setPicking("N"); // 拣料
@@ -411,7 +449,7 @@
        // 生成工作档明细
        for (LocDto locDto : taskDto.getLocDtos()) {
            if (locDto.getAnfme()==null || locDto.getAnfme() <= 0.0D) { continue; }
            LocDetl locDetl = locDetlService.selectItem(locDto.getLocNo(), locDto.getMatnr(), locDto.getBatch());
            LocDetl locDetl = locDetlService.selectItem(locDto.getLocNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getContainerCode());
            if (locDetl == null || locDetl.getAnfme() < locDto.getAnfme()) {
                throw new CoolException(locDto.getLocNo() + "库位中" + locDto.getMatnr() + "商品库存不足!");
            }
@@ -429,9 +467,15 @@
            wrkDetl.setAppeUser(userId);
            wrkDetl.setModiTime(now);
            wrkDetl.setModiUser(userId);
            wrkDetl.setSuppCode(locDto.getContainerCode());
            wrkDetl.setThreeCode(locDto.getCsocode());
            wrkDetl.setDeadTime(locDto.getIsoseq());
            if (!wrkDetlService.insert(wrkDetl)) {
                throw new CoolException("保存工作档明细失败");
            }
            //补货单则生成AGV入库通知档
            generateAgvWaitpakin(wrkDetl);
            // 修改订单明细
            if (!BaseController.isJSON(locDto.getOrderNo())) {
                OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
@@ -654,7 +698,7 @@
        List<LocDetlDto> locDetlDtos = new ArrayList<>();
        for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) {
            if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) {
                LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getBatch());
                LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getBatch(),paramLocDetl.getContainerCode());
                if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount()));
            }
        }
@@ -755,15 +799,22 @@
        if (Cools.isEmpty(wrkMast)){
            throw new CoolException(workNo+"工作档不存在");
        }
        if (wrkMast.getWrkSts() == 9 || wrkMast.getWrkSts() == 17) {
        if (wrkMast.getIoType() == 200) {
            //小车移库任务,直接删除工作档
            wrkMastService.deleteById(wrkMast);
            return;
        }
        if (wrkMast.getWrkSts() == 9 || wrkMast.getWrkSts() == 29) {
            throw new CoolException("当前工作档已完成");
        }
        // 入库 + 库位转移
        if (wrkMast.getWrkSts() < 9 || (wrkMast.getWrkSts() > 10 && wrkMast.getIoType()==11)) {
            wrkMast.setWrkSts(9L);
            // 出库
        } else if (wrkMast.getWrkSts() > 10) {
            wrkMast.setWrkSts(17L);
        } else if (wrkMast.getWrkSts() > 20) {
            wrkMast.setWrkSts(29L);
        }
        Date now = new Date();
        wrkMast.setCrnStrTime(DateUtils.calculate(now, 1L, TimeUnit.SECONDS, true));
@@ -807,7 +858,7 @@
                    if (!locDetl.getAnfme().equals(adjust.getCount())) {
                        // todo 盘点记录
                        // 修改库存
                        if (!locDetlService.updateAnfme(adjust.getCount(), locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch())) {
                        if (!locDetlService.updateAnfme(adjust.getCount(), locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch(),locDetl.getSuppCode(),locDetl.getThreeCode(),locDetl.getDeadTime())) {
                            throw new CoolException(locDetl.getLocNo() + "库位," + locDetl.getMatnr() + "商品," + locDetl.getBatch() + "序列码修改数量失败");
                        }
                        // 保存调整记录
@@ -821,9 +872,7 @@
                        adjDetl.setModiUser(userId);
                        adjDetl.setAppeTime(now);
                        adjDetl.setAppeUser(userId);
                        UUID uuid = UUID.randomUUID();
                        adjDetl.setOrderNo(uuid.toString());
                        adjDetl.setOrderNo(Utils.generateAdjustOrderNo());
                        adjDetl.setCsocode(locDetl.getThreeCode());
                        adjDetl.setIsoseq(locDetl.getDeadTime());
@@ -838,7 +887,7 @@
        // 删除库存
        for (LocDetl locDetl : locDetls) {
            // todo 盘点记录
            if (!locDetlService.updateAnfme(-1.0D, locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch())) {
            if (!locDetlService.updateAnfme(-1.0D, locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch(),locDetl.getSuppCode(),locDetl.getThreeCode(),locDetl.getDeadTime())) {
                throw new CoolException("删除" + locDetl.getLocNo() + "库位," + locDetl.getMatnr() + "商品," + locDetl.getBatch() + "序列码库存明细失败");
            }
            // 保存调整记录
@@ -852,7 +901,7 @@
            adjDetl.setModiUser(userId);
            adjDetl.setAppeTime(now);
            adjDetl.setAppeUser(userId);
            adjDetl.setOrderNo(Utils.generateAdjustOrderNo());
            adjDetlService.save(adjDetl, userId);
        }
@@ -885,11 +934,9 @@
            adjDetl.setModiUser(userId);
            adjDetl.setAppeTime(now);
            adjDetl.setAppeUser(userId);
            UUID uuid = UUID.randomUUID();
            adjDetl.setOrderNo(uuid.toString());
            adjDetl.setCsocode(locDetl.getThreeCode());
            adjDetl.setIsoseq(locDetl.getDeadTime());
            adjDetl.setOrderNo(Utils.generateAdjustOrderNo());
            adjDetlService.save(adjDetl, userId);
        }
@@ -920,6 +967,13 @@
        if (Cools.isEmpty(wrkMast)){
            throw new CoolException(workNo+"工作档不存在");
        }
        if (wrkMast.getIoType() == 200) {
            //小车移库任务,直接删除工作档
            wrkMastService.deleteById(wrkMast);
            return;
        }
        String locNo = ""; // 待修改目标库位
        String locSts = ""; // 待修改目标库位状态
        // 入库取消(修改目标库位)
@@ -940,7 +994,7 @@
                locMastService.updateById(locMast);
            }
        // 出库取消(修改源库位)
        } else if (wrkMast.getWrkSts() > 10 && wrkMast.getWrkSts() != 19) {
        } else if (wrkMast.getWrkSts() > 20) {
            locNo = wrkMast.getSourceLocNo();
            // 出库 ===>> F.在库
            if (wrkMast.getIoType() > 100 && wrkMast.getIoType() != 110) {
@@ -1104,4 +1158,14 @@
        return "";
    }
    private void generateAgvWaitpakin(WrkDetl wrkDetl){
        Order order = orderService.selectByNo(wrkDetl.getOrderNo());
        DocType docType = docTypeService.selectById(order.getDocType());
        if("人工补货单".equals(docType.getDocName())){
            AgvWaitPakin agvWaitPakin = new AgvWaitPakin();
            BeanUtils.copyProperties(wrkDetl,agvWaitPakin);
            agvWaitPakinService.insert(agvWaitPakin);
        }
    }
}