自动化立体仓库 - WMS系统
#
zjj
2024-10-31 4262bd3905d0f9982dfa265bd443c82a1fff0a00
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -26,10 +26,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.*;
/**
 * 移动端服务核心类
@@ -85,16 +82,27 @@
        if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) {
            throw new CoolException(BaseRes.PARAM);
        }
        if(param.getCombMats().size()>1){
            throw new CoolException("请提取一个商品,或者刷新重新组托!");
        }
        // 判断是否有相同条码的数据
        if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>().
                eq("zpallet", param.getBarcode()).eq("io_status", "N")) > 0) {
            throw new CoolException(param.getBarcode() + "数据正在进行入库");
        }
        if(param.getBarcode().length()!=8){
            throw new CoolException("条码长度不是8位===>>" + param.getBarcode());
        }
        if (param.getCombMats().size()>1){
            throw new CoolException("不允许混料===>>" + param.getBarcode());
        }
        int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",param.getBarcode()));
        int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",param.getBarcode()));
        if (countLoc > 0 || countWrk > 0) {
            throw new CoolException("工作档/库存条码数据已存在===>>" + param.getBarcode());
        int countwait = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet",param.getBarcode()));
        if (countLoc > 0 || countWrk > 0 || countwait > 0) {
            throw new CoolException("组托档/工作档/库存条码数据已存在===>>" + param.getBarcode());
        }
        Date now = new Date();
@@ -139,15 +147,22 @@
        // 关联组托
        } else {
            Order order = orderService.selectByNo(param.getOrderNo());
            if (order.getSettle() > 2) {
            if (Cools.isEmpty(order) || order.getSettle() > 2) {
                throw new CoolException("单据编号已过期");
            }
            // 生成入库通知档
            List<DetlDto> detlDtos = new ArrayList<>();
            param.getCombMats().forEach(elem -> {
            for (CombParam.CombMat elem : param.getCombMats()) {
//            param.getCombMats().forEach(elem -> {
                // 订单明细数量校验
                OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), elem.getMatnr(), elem.getBatch());
                if (Cools.isEmpty(orderDetl)) {
                    throw new CoolException("该单据中未找到对应物料明细");
                }
                if (elem.getAnfme() > orderDetl.getEnableQty()) {
                    throw new CoolException(orderDetl.getMatnr() + "入库数量不合法");
                }
@@ -156,7 +171,7 @@
                    throw new CoolException("修改单据作业数量失败");
                }
                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme());
                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme(),orderDetl.getManu());
                if (DetlDto.has(detlDtos, detlDto)) {
                    DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch());
                    assert one != null;
@@ -164,7 +179,8 @@
                } else {
                    detlDtos.add(detlDto);
                }
            });
//            });
            }
            for (DetlDto detlDto : detlDtos) {
                Mat mat = matService.selectByMatnr(detlDto.getMatnr());
                if (Cools.isEmpty(mat)) {
@@ -182,6 +198,7 @@
                waitPakin.setAppeTime(now);
                waitPakin.setModiUser(userId);
                waitPakin.setModiTime(now);
                waitPakin.setManu(detlDto.getMark());
                if (!waitPakinService.insert(waitPakin)) {
                    throw new CoolException("保存入库通知档失败");
                }
@@ -191,6 +208,7 @@
    }
    // 商品上架
    @Override
    public void onSale(CombParam param) {
        Date now = new Date();
@@ -211,14 +229,14 @@
                throw new CoolException(combMat.getMatnr() + ":商品数量有误!");
            }
            if (Cools.isEmpty(combMat.getBatch())){
                throw new CoolException(combMat.getMatnr() + ":商品批号有误!");
//                throw new CoolException(combMat.getMatnr() + ":商品批号有误!");
            }
            ManLocDetl manLocDetl = new ManLocDetl();
            manLocDetl.setLocNo(locno);
            manLocDetl.setNodeId(node.getId());
            manLocDetl.setMaktx(mat.getMaktx());
            manLocDetl.setMatnr(mat.getMatnr());
            manLocDetl.setBatch(combMat.getBatch());
            manLocDetl.setBatch(Cools.isEmpty(combMat.getBatch()) ? "" : combMat.getBatch());
            manLocDetl.setAnfme(combMat.getAnfme());
            manLocDetl.setModiTime(now);
            if (!manLocDetlService.insert(manLocDetl)) {
@@ -227,15 +245,25 @@
        }
    }
    // 商品下架
    @Override
    public void offSale(OffSaleParam offSaleParam) {
        List<ManLocDetl> manLocDetls = manLocDetlMapper.selectLocNo0(offSaleParam.getLocNo(), offSaleParam.getMatnr());
        if (Cools.isEmpty(manLocDetls)){
            throw new CoolException("商品下架失败!");
        ManLocDetl manLocDetl = manLocDetlMapper.selectLocNo0(offSaleParam.getLocNo(), offSaleParam.getMatnr());
        if (Cools.isEmpty(manLocDetl)){
            throw new CoolException("无此商品!");
        }
        int i = manLocDetlMapper.deleteLocNo0(offSaleParam.getLocNo(), offSaleParam.getMatnr());
        System.out.println(i);
        double anfme = manLocDetl.getAnfme() - offSaleParam.getAnfme();
        if (anfme < 0) {
            throw new CoolException("商品库存不足!");
        } else if (anfme == 0){
            manLocDetlMapper.deleteLocNo0(offSaleParam.getLocNo(), offSaleParam.getMatnr());
        }
        manLocDetlMapper.updateAnfme0(anfme,manLocDetl.getNodeId());
    }
    // 查找商品
    @Override
    @Transactional
    public void adjust(MobileAdjustParam param, Long userId) {
@@ -412,7 +440,7 @@
            String orderNo = "PACK" + snowflakeIdWorker.nextId();
            OpenOrderPakinParam openParam = new OpenOrderPakinParam();
            openParam.setOrderNo(orderNo);
            openParam.setOrderTime(DateUtils.convert(now));
            openParam.setInboundDate(DateUtils.convert(now));
            openParam.setOrderType("打包入库单");
            openParam.setOrderDetails(detlDtos);
            openService.pakinOrderCreate(openParam);
@@ -539,6 +567,63 @@
    }
    @Override
//    @Transactional
    public void leftoversOut(Map<String, Object> map,Long userId) {
        String barcode = map.get("barcode").toString();
        String barcode2 = map.get("barcode2").toString();
        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", barcode).eq("io_type", 103));
        if (Cools.isEmpty(wrkMast)) {
            throw new CoolException("未查询到拣料任务");
        }
        int workNo = commonService.getWorkNo(1);
        WrkMast wrkMast2 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", barcode2).eq("io_type", 200));
        if (Cools.isEmpty(wrkMast2)) {
            Date now = new Date();
            WrkMast wrkMast1 = new WrkMast();
            wrkMast1.sync(wrkMast);
            wrkMast1.setWrkNo(workNo);
            wrkMast1.setWrkSts(2L);
            wrkMast1.setIoType(200);
            wrkMast1.setSourceStaNo(wrkMast.getStaNo() == 113 ? 111 : 117);
            wrkMast1.setStaNo(wrkMast.getStaNo() == 113 ? 204 : 304);
            wrkMast1.setIoTime(now);
            wrkMast1.setIoPri(13D); // 优先级:13
            wrkMast1.setCrnNo(wrkMast.getCrnNo());
            wrkMast1.setSourceLocNo(wrkMast.getLocNo()); // 源库位
            wrkMast1.setFullPlt("Y"); // 满板:Y
            wrkMast1.setPicking("N"); // 拣料
            wrkMast1.setExitMk("N"); // 退出
            wrkMast1.setEmptyMk("N"); // 空板
            wrkMast1.setLinkMis("N");
            wrkMast1.setAppeUser(userId); // 操作人员数据
            wrkMast1.setAppeTime(now);
            wrkMast1.setModiUser(userId);
            wrkMast1.setModiTime(now);
            wrkMast1.setBarcode(barcode2);
            if (!wrkMastService.insert(wrkMast1)) {
                throw new CoolException("保存工作档失败");
            }
        }
        List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("zpallet", map.get("barcode")));
        if (Cools.isEmpty(wrkDetls)) {
            throw new CoolException("未查询到拣料任务明细");
        }
        for(WrkDetl wrkDetl : wrkDetls){
            WrkDetl wrkDetl1 = new WrkDetl();
            wrkDetl1.sync(wrkDetl);
            wrkDetl1.setWrkNo(workNo);
            wrkDetlService.insert(wrkDetl1);
        }
    }
    @Override
    @Transactional
    public void stockOut(OrderDetl orderDetl, BasDevp staNo, LocDetl locDetl,
                         Double curOutQty, Integer ioType, Long userId, Date now) {