自动化立体仓库 - WMS系统
dubin
11 小时以前 2c5a1382ede25186ce4b568f3b0e97c34a1ec536
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -9,7 +9,9 @@
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.CombParam;
import com.zy.asrs.entity.param.MobileAdjustParam;
import com.zy.asrs.entity.param.OffSaleParam;
import com.zy.asrs.entity.param.OpenOrderPakinParam;
import com.zy.asrs.mapper.ManLocDetlMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.MatUtils;
import com.zy.common.CodeRes;
@@ -73,24 +75,32 @@
    private NodeService nodeService;
    @Autowired
    private ManLocDetlService manLocDetlService;
    @Autowired
    private ManLocDetlMapper manLocDetlMapper;
    @Override
    @Transactional
    public void comb(CombParam param, Long userId) {
        if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) {
            if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) {
            throw new CoolException(BaseRes.PARAM);
        }
        // 判断是否有相同条码的数据
        if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>().
                eq("zpallet", param.getBarcode()).eq("io_status", "N")) > 0) {
            throw new CoolException(param.getBarcode() + "数据正在进行入库");
            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 countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",param.getBarcode())
//                                            .last(" wrk_no IN ( SELECT wrk_no FROM asr_wrk_mast WHERE wrk_sts != 15 )"));
        if (countLoc > 0 ) {
            throw new CoolException("库存条码数据已存在===>>" + param.getBarcode());
        }
        if (countWrk > 0) {
            throw new CoolException("工作档条码数据已存在===>>" + param.getBarcode());
        }
        Date now = new Date();
@@ -114,6 +124,9 @@
            for (DetlDto detlDto : detlDtos) {
                Mat mat = matService.selectByMatnr(detlDto.getMatnr());
                if (Cools.isEmpty(detlDto.getBatch())){
                    detlDto.setBatch("");
                }
                if (Cools.isEmpty(mat)) {
                    throw new CoolException(detlDto.getMatnr() + "商品档案不存在");
                }
@@ -128,6 +141,7 @@
                waitPakin.setAppeTime(now);
                waitPakin.setModiUser(userId);
                waitPakin.setModiTime(now);
                waitPakin.setBatch(mat.getBarcode());  //批次
                if (!waitPakinService.insert(waitPakin)) {
                    throw new CoolException("保存入库通知档失败");
                }
@@ -187,8 +201,10 @@
    }
    // 商品上架
    @Override
    public void onSale(CombParam param) {
        Date now = new Date();
        // 获取库位号
        String locno = param.getLocno();
        Node node = nodeService.selectByUuid(locno);
@@ -206,19 +222,40 @@
                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.setMatnr(combMat.getMatnr());
            manLocDetl.setBatch(combMat.getBatch());
            manLocDetl.setMaktx(mat.getMaktx());
            manLocDetl.setMatnr(mat.getMatnr());
            manLocDetl.setBatch(Cools.isEmpty(combMat.getBatch()) ? "" : combMat.getBatch());
            manLocDetl.setAnfme(combMat.getAnfme());
            manLocDetl.setModiTime(now);
            if (!manLocDetlService.insert(manLocDetl)) {
                throw new CoolException("商品上架失败!");
            }
        }
    }
    // 商品下架
    @Override
    public void offSale(OffSaleParam offSaleParam) {
        ManLocDetl manLocDetl = manLocDetlMapper.selectLocNo0(offSaleParam.getLocNo(), offSaleParam.getMatnr());
        if (Cools.isEmpty(manLocDetl)){
            throw new CoolException("无此商品!");
        }
        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
@@ -592,4 +629,65 @@
            throw new CoolException(locDetl.getLocNo() + "库位不是在库状态");
        }
    }
    @Override
    @Transactional
    public void createEmptyWrk(String barcode, Long userId) {
        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", barcode));
        if (!Cools.isEmpty(wrkMast)){
            throw new CoolException("托盘编号" + barcode + "已存在工作档");
        }
        List<WaitPakin> waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", barcode));
        if (!Cools.isEmpty(waitPakins)){
            throw new CoolException("托盘编号" + barcode + "已组托");
        }
        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("barcode", barcode));
        if (!locMast.getLocSts().equals("O")){
            throw new CoolException("托盘编号" + barcode + "库位状态不是空库位");
        }
        int workNo = commonService.getWorkNo(0);
        Date now = new Date();
        // 生成工作档
        WrkMast emptyWrkMast = new WrkMast();
        emptyWrkMast.setWrkNo(workNo);
        emptyWrkMast.setIoTime(new Date());
        emptyWrkMast.setWrkSts(2L); // 工作状态:生成入库ID
        emptyWrkMast.setIoType(10); // 入出库状态:1.空托盘入库
        emptyWrkMast.setIoPri(30D); // 优先级
        emptyWrkMast.setCrnNo(1);
        emptyWrkMast.setSourceStaNo(101);
        emptyWrkMast.setStaNo(0);
        emptyWrkMast.setLocNo(locMast.getLocNo());
        emptyWrkMast.setBarcode(barcode); // 托盘码
        emptyWrkMast.setFullPlt("N"); // 满板:N
        emptyWrkMast.setPicking("N"); // 拣料
        emptyWrkMast.setExitMk("N"); // 退出
        emptyWrkMast.setEmptyMk("Y"); // 空板
        emptyWrkMast.setLinkMis("Y");
        emptyWrkMast.setCtnType(0); // 容器类型
        // 操作人员数据
        emptyWrkMast.setAppeTime(now);
        emptyWrkMast.setModiTime(now);
        emptyWrkMast.setModiUser(userId);
        emptyWrkMast.setAppeUser(userId);
        boolean res = wrkMastService.insert(emptyWrkMast);
        if (!res) {
            throw new CoolException("保存空托盘入库工作档失败");
        }
        // 更新源站点信息
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(101, true);
        sourceStaNo.setWrkNo(emptyWrkMast.getWrkNo());
        sourceStaNo.setModiTime(now);
        if (!basDevpService.updateById(sourceStaNo)){
            throw new CoolException("更新源站失败");
        }
        // 更新目标库位状态
        locMast.setLocSts("S"); // S.入库预约
        locMast.setModiTime(now);
        if (!locMastService.updateById(locMast)){
            throw new CoolException("改变库位状态失败");
        }
    }
}