自动化立体仓库 - WMS系统
#
yxFwq
2025-04-01 74fd6eb7fb0322078f7946f51073f20e90231df1
src/main/java/com/zy/common/web/WcsController.java
@@ -2,7 +2,9 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.core.common.BaseRes;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.R;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
@@ -10,6 +12,7 @@
import com.zy.asrs.entity.result.KeyValueVo;
import com.zy.asrs.service.*;
import com.zy.common.CodeRes;
import com.zy.common.model.DetlDto;
import com.zy.common.model.LocTypeDto;
import com.zy.common.model.StartupDto;
import com.zy.common.model.enums.WorkNoType;
@@ -53,6 +56,8 @@
    private WorkService workService;
    @Autowired
    private StaDescService staDescService;
    @Autowired
    private MatService matService;
    @PostMapping("/pakin/loc/v1")
    @ResponseBody
@@ -110,6 +115,115 @@
        log.info("WCS入库接口返参:{},托盘码:{}", dto, param.getBarcode());
        return R.ok().add(dto);
    }
//
//    @PostMapping("/pakin/yx/loc/v33")
//    @ResponseBody
//    public synchronized R getLocNo33(@RequestBody SearchLocParam param) {
//        if (Cools.isEmpty(param.getBarcode(), param.getSourceStaNo())) {
//            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() + "数据正在进行入库");
//        }
//
//        if(param.getBarcode().length()!=8){
//            throw new CoolException("条码长度不是8位===>>" + param.getBarcode());
//        }
//
//        int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",param.getBarcode()));
//        int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",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());
//        }
//        BasDevp basDevp = basDevpService.selectById(param.getSourceStaNo());
//        if (Cools.isEmpty(basDevp)){
//            throw new CoolException("参数:站点号 devNo不存在");
//        }
//        if (Cools.isEmpty(basDevp.getGrossWt())){
//            throw new CoolException("参数:站点号 "+param.getSourceStaNo()+"重量信息不存在");
//        }
//
//        Date now = new Date();
//        // 生成入库通知档
//        Mat mat = matService.selectByMatnr("6-6405H");
//        if (Cools.isEmpty(mat)) {
//            throw new CoolException("6-6405H商品档案不存在");
//        }
//        WaitPakin waitPakin = new WaitPakin();
//        waitPakin.sync(mat);
//        waitPakin.setBatch("");
////        waitPakin.setWeight(basDevp.getGrossWt());
//        waitPakin.setWeight(basDevp.getGrossWt());
//        waitPakin.setZpallet(param.getBarcode());   // 托盘码
//        waitPakin.setIoStatus("N");     // 入出状态
//        waitPakin.setAnfme(1.0);  // 数量
//        waitPakin.setStatus("Y");    // 状态
//        waitPakin.setAppeUser(7777L);
//        waitPakin.setAppeTime(now);
//        waitPakin.setModiUser(7777L);
//        waitPakin.setModiTime(now);
//        if (!waitPakinService.insert(waitPakin)) {
//            throw new CoolException("保存入库通知档失败");
//        }
//        return R.ok();
//    }
    @PostMapping("/pakin/yx/loc/v464")
    @ResponseBody
    public synchronized R getLocNo464(@RequestBody SearchLocParam param) {
        if (Cools.isEmpty(param.getBarcode(), param.getSourceStaNo())) {
            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() + "数据正在进行入库");
        }
        if(param.getBarcode().length()!=8){
            throw new CoolException("条码长度不是8位===>>" + param.getBarcode());
        }
        int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",param.getBarcode()));
        int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",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());
        }
        BasDevp basDevp = basDevpService.selectById(param.getSourceStaNo());
        if (Cools.isEmpty(basDevp)){
            throw new CoolException("参数:站点号 devNo不存在");
        }
        if (Cools.isEmpty(basDevp.getGrossWt())){
            throw new CoolException("参数:站点号 "+param.getSourceStaNo()+"重量信息不存在");
        }
        Date now = new Date();
        // 生成入库通知档
        Mat mat = matService.selectByMatnr(basDevp.getDecDesc());
        if (Cools.isEmpty(mat)) {
            throw new CoolException(basDevp.getDecDesc()+"商品档案不存在");
        }
        WaitPakin waitPakin = new WaitPakin();
        waitPakin.sync(mat);
        waitPakin.setBatch(DateUtils.convert(new Date(), DateUtils.yyyyMMdd));
//        waitPakin.setWeight(basDevp.getGrossWt());
        waitPakin.setWeight(basDevp.getGrossWt());
        waitPakin.setZpallet(param.getBarcode());   // 托盘码
        waitPakin.setIoStatus("N");     // 入出状态
        waitPakin.setAnfme(1.0);  // 数量
        waitPakin.setStatus("Y");    // 状态
        waitPakin.setAppeUser(8888L);
        waitPakin.setAppeTime(now);
        waitPakin.setModiUser(8888L);
        waitPakin.setModiTime(now);
        if (!waitPakinService.insert(waitPakin)) {
            throw new CoolException("保存入库通知档失败");
        }
        return R.ok();
    }
    /*
    * 双工位单伸堆垛机,初始不分配库位
@@ -117,6 +231,66 @@
    @PostMapping("/pakin/pair/station/single/loc/v1")
    @ResponseBody
    public synchronized R getLocNoPairSingle(@RequestBody SearchLocParam param) {
        log.info("收到WCS入库接口请求====>>入参:{}", param);
        if (Cools.isEmpty(param.getIoType())) {
            return R.error("入出库类型不能为空");
        }
        if (Cools.isEmpty(param.getSourceStaNo())) {
            return R.error("源站编号不能为空");
        }
        List<WaitPakin> waitPakins = null;
        if (param.getIoType() == 1) {
            if (Cools.isEmpty(param.getBarcode())) {
                return R.error("条码不能为空");
            }
            waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", param.getBarcode()));
            if (Cools.isEmpty(waitPakins)) {
                WrkMast wrkMast = wrkMastService.selectByBarcode(param.getBarcode());
                if (wrkMast != null && wrkMast.getIoType() == 103) {
                    return R.parse(CodeRes.PICK_600);
                }
                return R.parse(CodeRes.NO_COMB_700);
            }
            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) {
                return R.error(CodeRes.EXIST_500);
            }
        }
        if (Cools.isEmpty(param.getLocType1())){
            return R.error("高低检测信号不能为空");
        }
        // 源站点状态检测
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(param.getSourceStaNo(), true);
        sourceStaNo.setLocType1(param.getLocType1());
        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
        StartupDto dto = null;
        switch (param.getIoType()) {
            case 1://满托盘入库
                assert waitPakins != null;
                dto = startupFullPutStorePairSingle(param.getSourceStaNo(), param.getBarcode(), locTypeDto, waitPakins);
                break;
            case 10://空托盘入库
                dto = emptyPlateInPairSingle(param.getSourceStaNo(), locTypeDto, param.getBarcode());
                break;
//            case 201://自动补空板任务
//                dto = emptyPlateIn201(param.getSourceStaNo(), locTypeDto, param.getBarcode());
//                break;
            default:
                break;
        }
        log.info("WCS入库接口返参:{},托盘码:{}", dto, param.getBarcode());
        return R.ok().add(dto);
    }
    /*
     * 双工位单伸堆垛机,初始不分配库位
     * */
    @PostMapping("/pakin/pair/station/large/loc/v1")
    @ResponseBody
    public synchronized R getLocNoPairLarge(@RequestBody SearchLocParam param) {
        log.info("收到WCS入库接口请求====>>入参:{}", param);
        if (Cools.isEmpty(param.getIoType())) {
            return R.error("入出库类型不能为空");
@@ -425,9 +599,10 @@
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
        // 检索库位
        List<KeyValueVo> list = waitPakins.stream().map(item-> new KeyValueVo(item.getMatnr(), item.getBatch())).distinct().collect(Collectors.toList());
//        List<String> matNos = waitPakins.stream().map(WaitPakin::getMatnr).distinct().collect(Collectors.toList());
        StartupDto dto = commonService.getLocNo(1, 1, devpNo, null,null,null, locTypeDto);
        List<String> matnrs = waitPakins.stream().map(WaitPakin::getMatnr).distinct().collect(Collectors.toList());
        List<String> batchs = waitPakins.stream().map(WaitPakin::getBatch).distinct().collect(Collectors.toList());
//        StartupDto dto = commonService.getLocNo(1, 1, devpNo, matnrs.get(0),batchs.get(0),null, locTypeDto);
        StartupDto dto = commonService.getLocNo(1, 1, devpNo, matnrs.get(0),null,null, locTypeDto);
        int workNo = dto.getWorkNo();
        Date now = new Date();
        // 生成工作档