自动化立体仓库 - WMS系统
pang.jiabao
4 天以前 b6e0bec71de45cad64e9de14977770053be7e010
src/main/java/com/zy/common/web/WcsController.java
@@ -16,6 +16,7 @@
import com.zy.common.service.CommonService;
import com.zy.common.web.param.CanningLineInLocParam;
import com.zy.common.web.param.SearchLocParam;
import com.zy.system.entity.Config;
import com.zy.system.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -24,10 +25,7 @@
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.Map;
import java.util.*;
/**
 * Created by vincent on 2020/10/30
@@ -80,22 +78,6 @@
        if (param.getIoType() == 1) {
            // 先创建入库通知档
            waitPakin = comb(param.getBarcode(),param.getBucketType(),param.getBucketCount());
//            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("高低检测信号不能为空");
@@ -109,27 +91,39 @@
        StartupDto dto = null;
        if(param.getIoType() == 1) {
            Map<Integer, String> wantBucketFlag = param.getWantBucketFlag();
            if(!wantBucketFlag.isEmpty()) {
                if(waitPakin == null) {
                    return R.error("入库通知档为空");
                } else {
                    dto = startupFullPutStore(param,waitPakin); // 直供罐装线任务
                    if (dto != null) {
                        log.info("WCS入库直供罐装线接口返参:{},托盘码:{}", dto, param.getBarcode());
                        return R.ok().add(dto);
            List<SearchLocParam.WantBucket> wantBucketFlag = param.getWantBucketFlag();
            for(SearchLocParam.WantBucket wantBucket: wantBucketFlag) {
                if(wantBucket.getBucketType() != 0 && wantBucket.getBucketType() == param.getBucketType()) { // 罐装线有要桶信号并且当前桶是罐装线要的桶
                    if(waitPakin == null) {
                        return R.error("入库通知档为空");
                    } else {
                        int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("wrk_sts", 2).eq("sta_no", wantBucket.getSite()));
                        if(wantBucket.getSite() == 1071 && count < 12 || wantBucket.getSite() == 1064 && count < 10 || wantBucket.getSite() == 1078 && count < 12) {
                            dto = startupFullPutStore(param,waitPakin,wantBucket); // 直供罐装线任务
                            if (dto != null) {
                                log.info("WCS入库直供罐装线接口返参:{},托盘码:{}", dto, param.getBarcode());
                                return R.ok().add(dto);
                            }
                        } else {
                            log.warn("直供灌装线任务已满,入成品库,入库目标站点{},任务数:{}",wantBucket.getSite(),count);
                        }
                    }
                }
            }
        }
        // 1.母托盘,2子托盘
        int flag = 0;
        if(param.getIoType() == 10) {
            flag = param.getBucketType() == 21 ? 1 : 2 ;
        }
        switch (param.getIoType()) {
            case 1://满托盘入库
                assert waitPakin != null;
                dto = startupFullPutStore(param.getSourceStaNo(), param.getBarcode(), locTypeDto, waitPakin, param.getLocArea(),param.isTailSupportFlag());
                dto = startupFullPutStore(param.getSourceStaNo(), param.getBarcode(), locTypeDto, waitPakin, param.isTailSupportFlag());
                break;
            case 10://空托盘入库
                dto = emptyPlateIn(param.getSourceStaNo(), locTypeDto, param.getBarcode(), 1);
                dto = emptyPlateIn(param.getSourceStaNo(), locTypeDto, param.getBarcode(), 1, flag);
                break;
            default:
                break;
@@ -142,7 +136,7 @@
    @PostMapping("/pakin/CanningLine/loc/v1")
    @ResponseBody
    @Transactional
    public synchronized R getLocNo(@RequestBody CanningLineInLocParam param) {
    public synchronized R inCanningLine(@RequestBody CanningLineInLocParam param) {
        log.info("收到WCS罐装入库接口请求====>>入参:{}", param);
        if (Cools.isEmpty(param.getWrkNo())) {
            return R.error("工作号不能为空");
@@ -155,71 +149,254 @@
        WrkMast wrkMast1 = wrkMastService.selectById(param.getWrkNo());
        // 根据任务号查询任务明细
        WrkDetl wrkDetl1 = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast1.getWrkNo()));
        // 分配库位
        StartupDto dto = commonService.getLocNoNew(1, param.getSourceStaNo(), null, 1);
        // 创建新任务
        int workNo = dto.getWorkNo();
        Mat mat = matService.selectByMatnr(param.getMatnr());
        if (mat == null) {
            log.error("罐装完成入库,反馈给wcs成品标识不存在:{}",param.getMatnr());
            return R.error("罐装完成入库,反馈给wcs成品标识不存在:" + param.getMatnr());
        }
        // 获取系统配置,看成品罐装完成是否直接出到发货口
        Config config = configService.selectConfigByCode("gzwcfh");
        boolean fhFlag = false;
        if (config != null && config.getStatus() == 1 && !Cools.isEmpty(config.getValue())) {
            String[] split = config.getValue().split("=");
            for(String item : split) {
                if(param.getMatnr().equals(item)) {
                    fhFlag = true;
                    break;
                }
            }
        }
        Date now = new Date();
        // 生成工作档
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
        wrkMast.setIoTime(now);
        wrkMast.setWrkSts(2L); // 工作状态:生成入库ID
        wrkMast.setIoType(1); // 入出库状态:1.入库
        wrkMast.setIoPri(13D); // 优先级
        wrkMast.setCrnNo(dto.getCrnNo());
        wrkMast.setSourceStaNo(dto.getSourceStaNo());
        wrkMast.setStaNo(dto.getStaNo());
        wrkMast.setLocNo(dto.getLocNo());
        wrkMast.setBarcode(wrkMast1.getBarcode()); // 托盘码
        wrkMast.setFullPlt("Y"); // 满板:Y
        wrkMast.setPicking("N"); // 拣料
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk("N"); // 空板
        wrkMast.setLinkMis("Y");
        wrkMast.setCtnType(wrkMast1.getCtnType()); // 尾托标识
        wrkMast.setPdcType(wrkMast1.getPdcType()); // 空桶类型
        wrkMast.setAppeTime(now);
        boolean res = wrkMastService.insert(wrkMast);
        if (!res) {
            throw new CoolException("保存工作档失败");
        }
        StartupDto dto;
        // 生成工作档明细
        // todo 入成品桶库的物料 这里先根据空桶类型指定成品桶物料
        String matnr;
        if(wrkMast1.getPdcType().equals("208L")) {
            matnr = "YJ2025011814414206";
        } else {
            matnr = "YJ2025011814412359";
        }
        Mat mat = matService.selectByMatnr(matnr);
        WrkDetl wrkDetl = new WrkDetl();
        wrkDetl.sync(mat);
        wrkDetl.setWrkNo(workNo);
        wrkDetl.setAnfme(wrkDetl1.getAnfme());
        wrkDetl.setZpallet(wrkMast1.getBarcode());
        wrkDetl.setIoTime(now);
        wrkDetl.setAppeTime(now);
        if (!wrkDetlService.insert(wrkDetl)) {
            throw new CoolException("保存工作明细失败");
        }
        // 判断贴标异常,复检重量异常的,不分配库位,去往异常口1090
//        if ( !param.isTbFlag() || param.getGrossWeight() < param.getWeight()) {
//
//            // 生成工作档 ------------------------------------------------------
//            WrkMast wrkMast = new WrkMast();
//            wrkMast.setWrkNo(commonService.getWorkNo(0));
//            wrkMast.setIoTime(now);
//            wrkMast.setIoType(3); // 入出库类型3.站到站
//            wrkMast.setWrkSts(2L);
//            wrkMast.setIoPri(13D); // 优先级
////            wrkMast.setCrnNo(dto.getCrnNo());
//            wrkMast.setSourceStaNo(param.getSourceStaNo());
//            wrkMast.setStaNo(1090);
////            wrkMast.setLocNo(dto.getLocNo());
//            wrkMast.setBarcode(wrkMast1.getBarcode()); // 托盘码
//            wrkMast.setFullPlt("Y"); // 满板:Y
////            wrkMast.setPicking("N"); // 拣料
////            wrkMast.setExitMk("N"); // 退出
////            wrkMast.setEmptyMk("N"); // 空板
////            wrkMast.setLinkMis("Y");
////            wrkMast.setCtnType(wrkMast1.getCtnType()); // 尾托标识
//            wrkMast.setPdcType(wrkMast1.getPdcType()); // 空桶类型
//            wrkMast.setAppeTime(now);
//            wrkMastService.insert(wrkMast);
//
//            // 生成工作档明细----------------------------------------------------
//            WrkDetl wrkDetl = new WrkDetl();
//            wrkDetl.sync(mat);
//            wrkDetl.setWrkNo(wrkMast.getWrkNo());
//            wrkDetl.setAnfme(wrkDetl1.getAnfme());
//            wrkDetl.setZpallet(wrkMast1.getBarcode());
//            wrkDetl.setBatch(param.getBatch());
//            wrkDetl.setManuDate(param.getManuDate());
//            wrkDetl.setWeight(param.getWeight());
//            wrkDetl.setManLength(param.getGrossWeight());
//            wrkDetl.setInspect(1); // 贴标成功
//            wrkDetl.setIoTime(now);
//            wrkDetl.setAppeTime(now);
//            wrkDetlService.insert(wrkDetl);
//
//            dto = new StartupDto();
//            dto.setWorkNo(wrkMast.getWrkNo());
//            dto.setSourceStaNo(wrkMast.getSourceStaNo());
//            dto.setStaNo(wrkMast.getStaNo());
//        } else
        if(fhFlag) { // 直接发货
            // 生成工作档 ------------------------------------------------------
            WrkMast wrkMast = new WrkMast();
            wrkMast.setWrkNo(commonService.getWorkNo(0));
            wrkMast.setIoTime(now);
            wrkMast.setIoType(3); // 入出库类型3.站到站
            wrkMast.setWrkSts(2L);
            wrkMast.setIoPri(13D); // 优先级
//            wrkMast.setCrnNo(dto.getCrnNo());
            wrkMast.setSourceStaNo(param.getSourceStaNo());
            wrkMast.setStaNo(1016);
//            wrkMast.setLocNo(dto.getLocNo());
            wrkMast.setBarcode(wrkMast1.getBarcode()); // 托盘码
            wrkMast.setFullPlt("Y"); // 满板:Y
//            wrkMast.setPicking("N"); // 拣料
//            wrkMast.setExitMk("N"); // 退出
//            wrkMast.setEmptyMk("N"); // 空板
//            wrkMast.setLinkMis("Y");
//            wrkMast.setCtnType(wrkMast1.getCtnType()); // 尾托标识
            wrkMast.setPdcType(wrkMast1.getPdcType()); // 空桶类型
            wrkMast.setAppeTime(now);
            wrkMastService.insert(wrkMast);
        // 完成旧任务(直供罐装线任务手动完成,出库任务任务号消失会自动完成)
        if (wrkMast1.getIoType() == 2) {
            wrkMast1.setWrkSts(4L);
            // 生成工作档明细----------------------------------------------------
            WrkDetl wrkDetl = new WrkDetl();
            wrkDetl.sync(mat);
            wrkDetl.setWrkNo(wrkMast.getWrkNo());
            wrkDetl.setAnfme(wrkDetl1.getAnfme());
            wrkDetl.setZpallet(wrkMast1.getBarcode());
            wrkDetl.setBatch(param.getBatch());
            wrkDetl.setManuDate(param.getManuDate());
            wrkDetl.setWeight(param.getWeight());
            wrkDetl.setManLength(param.getGrossWeight());
            wrkDetl.setInspect(1);
            wrkDetl.setIoTime(now);
            wrkDetl.setAppeTime(now);
            wrkDetlService.insert(wrkDetl);
            dto = new StartupDto();
            dto.setWorkNo(wrkMast.getWrkNo());
            dto.setSourceStaNo(wrkMast.getSourceStaNo());
            dto.setStaNo(wrkMast.getStaNo());
        } else  { // 检测成功,入成品库
                // 检索库位条件
                FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo();
                findLocNoAttributeVo.setMatnr(wrkDetl1.getMatnr());
                findLocNoAttributeVo.setModel(wrkDetl1.getModel());
                // 分配库位
                dto = commonService.getLocNoNew(1, param.getSourceStaNo(), findLocNoAttributeVo, 1);
                // 创建新任务
                int workNo = dto.getWorkNo();
                // 生成工作档
                WrkMast wrkMast = new WrkMast();
                wrkMast.setWrkNo(workNo);
                wrkMast.setIoTime(now);
                wrkMast.setWrkSts(2L); // 工作状态:生成入库ID
                wrkMast.setIoType(1); // 入出库状态:1.入库
                wrkMast.setIoPri(13D); // 优先级
                wrkMast.setCrnNo(dto.getCrnNo());
                wrkMast.setSourceStaNo(dto.getSourceStaNo());
                wrkMast.setStaNo(dto.getStaNo());
                wrkMast.setLocNo(dto.getLocNo());
                wrkMast.setBarcode(wrkMast1.getBarcode()); // 托盘码
                wrkMast.setFullPlt("Y"); // 满板:Y
                wrkMast.setPicking("N"); // 拣料
                wrkMast.setExitMk("N"); // 退出
                wrkMast.setEmptyMk("N"); // 空板
                wrkMast.setLinkMis("Y");
//            wrkMast.setCtnType(wrkMast1.getCtnType()); // 尾托标识
                wrkMast.setPdcType(wrkMast1.getPdcType()); // 空桶类型
                wrkMast.setAppeTime(now);
                wrkMastService.insert(wrkMast);
                // 生成工作档明细
                WrkDetl wrkDetl = new WrkDetl();
                wrkDetl.sync(mat);
                wrkDetl.setWrkNo(workNo);
                wrkDetl.setAnfme(wrkDetl1.getAnfme());
                wrkDetl.setZpallet(wrkMast1.getBarcode());
                wrkDetl.setBatch(param.getBatch());
                wrkDetl.setManuDate(param.getManuDate());
                wrkDetl.setWeight(param.getWeight());
                wrkDetl.setManLength(param.getGrossWeight());
                wrkDetl.setInspect(1); // 贴标成功
                wrkDetl.setIoTime(now);
                wrkDetl.setAppeTime(now);
                wrkDetlService.insert(wrkDetl);
                // 更新目标库位状态
                LocMast locMast = locMastService.selectById(dto.getLocNo());
                if (locMast.getLocSts().equals("O")) {
                    locMast.setLocSts("S"); // S.入库预约
                    locMast.setModiTime(now);
                    if (!locMastService.updateById(locMast)) {
                        throw new CoolException("改变库位状态失败");
                    }
                } else {
                    log.error(dto.getLocNo() + "目标库位已被占用");
                    throw new CoolException(dto.getLocNo() + "目标库位已被占用");
                }
            }
        // 完成旧任务(直供罐装线任务手动完成)
        if (wrkMast1.getIoType() == 3 && wrkMast1.getWrkSts() == 2) {
            wrkMast1.setWrkSts(5L);
            wrkMast1.setModiTime(now);
            wrkMastService.updateById(wrkMast1);
        } else if(wrkMast1.getIoType() == 101 && wrkMast1.getWrkSts() == 2) {
            wrkMast1.setWrkSts(15L);
            wrkMast1.setModiTime(now);
            wrkMastService.updateById(wrkMast1);
        } else {
            log.error("罐装完成,完成旧任务失败:{}",wrkMast1.getWrkNo());
            return R.parse("罐装完成,完成旧任务失败:"+wrkMast1.getWrkNo());
        }
        // 更新源站点信息
        BasDevp basDevp = basDevpService.selectById(param.getSourceStaNo());
        basDevp.setWrkNo(workNo);
        basDevp.setWrkNo(dto.getWorkNo());
        basDevp.setModiTime(now);
        if (!basDevpService.updateById(basDevp)) {
            throw new CoolException("更新源站失败");
        }
        log.info("WCS罐装入库接口返参:{},托盘码:{}", dto, wrkMast1.getBarcode());
        return R.ok(dto);
    }
    // 异常口入库,获取库位
    @PostMapping("/pakin/abnormalMouthWarehousing/loc/v1")
    @ResponseBody
    @Transactional
    public synchronized R abnormalMouthWarehousing(@RequestBody CanningLineInLocParam param) {
        log.info("收到WCS异常口入库接口请求====>>入参:{}", param);
        int wrkNo = param.getWrkNo();
        Integer sourceStaNo = param.getSourceStaNo();
        if (Cools.isEmpty(wrkNo)) {
            return R.error("工作号不能为空");
        }
        if (Cools.isEmpty(sourceStaNo)) {
            return R.error("源站编号不能为空");
        }
        Date now = new Date();
        StartupDto dto;
        WrkMast wrkMast = wrkMastService.selectById(wrkNo);
        if (wrkMast == null) {
            throw new CoolException("异常口入库任务号无任务:" + wrkNo);
        } else if (wrkMast.getLocNo() != null) {
            throw new CoolException("异常口入库库位已分配:" + wrkMast.getLocNo());
        }
        if(!param.isTbFlag()) { //下线出库
            wrkMast.setSourceStaNo(1090);
            wrkMast.setStaNo(1016); // 异常下线默认入库站点为1016
            wrkMastService.updateById(wrkMast);
            return R.ok();
        }
        WrkDetl wrkDetl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkNo));
        // 检索库位条件
        FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo();
        findLocNoAttributeVo.setMatnr(wrkDetl.getMatnr());
        findLocNoAttributeVo.setModel(wrkDetl.getModel());
        // 分配库位
        dto = commonService.getLocNoNew(1, param.getSourceStaNo(), findLocNoAttributeVo, 1);
        dto.setWorkNo(wrkMast.getWrkNo()); // 使用原工作号
        wrkMast.setIoType(1); // 入出库类型 1.入库
        wrkMast.setCrnNo(dto.getCrnNo());
        wrkMast.setLocNo(dto.getLocNo());
        wrkMast.setSourceStaNo(dto.getSourceStaNo());
        wrkMast.setStaNo(dto.getStaNo());
        wrkMastService.updateById(wrkMast);
        // 更新目标库位状态
        LocMast locMast = locMastService.selectById(dto.getLocNo());
@@ -234,12 +411,20 @@
            throw new CoolException(dto.getLocNo() + "目标库位已被占用");
        }
        log.info("WCS罐装入库接口返参:{},托盘码:{}", dto, wrkMast1.getBarcode());
        // 更新源站点信息
        BasDevp basDevp = basDevpService.selectById(sourceStaNo);
        basDevp.setWrkNo(dto.getWorkNo());
        basDevp.setModiTime(now);
        if (!basDevpService.updateById(basDevp)) {
            throw new CoolException("更新源站失败");
        }
        log.info("WCS异常口入库接口返参:{},托盘码:{}", dto, wrkMast.getBarcode());
        return R.ok(dto);
    }
    @Transactional(propagation = Propagation.REQUIRED)
    public WaitPakin comb(String barcode, String matnr,int bucketCount) {
    public WaitPakin comb(String barcode, int matnr,int bucketCount) {
        if (Cools.isEmpty(barcode, matnr,bucketCount)) {
            throw new CoolException(BaseRes.PARAM);
        }
@@ -282,7 +467,7 @@
//            for (DetlDto detlDto : detlDtos) {
                Mat mat = matService.selectByMatnr(matnr);
                Mat mat = matService.selectByMatnr(String.valueOf(matnr));
                if (Cools.isEmpty(mat)) {
                    throw new CoolException(matnr + "商品档案不存在");
                }
@@ -443,15 +628,12 @@
     * 全板入库
     */
    @Transactional(propagation = Propagation.REQUIRED)
    public StartupDto startupFullPutStore(Integer devpNo, String barcode, LocTypeDto locTypeDto, WaitPakin waitPakins, int locArea,boolean tailSupportFlag) {
    public StartupDto startupFullPutStore(Integer devpNo, String barcode, LocTypeDto locTypeDto, WaitPakin waitPakins,boolean tailSupportFlag) {
        // 源站点状态检测
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
        // 检索库位
//        List<String> matnrs = waitPakins.stream().map(WaitPakin::getMatnr).distinct().collect(Collectors.toList());
//        List<String> batchs = waitPakins.stream().map(WaitPakin::getBatch).distinct().collect(Collectors.toList());
//        FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(matnrs.get(0), batchs.get(0));
        FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(waitPakins);
        StartupDto dto = commonService.getLocNoNew( 1, devpNo,findLocNoAttributeVo, locArea);
        StartupDto dto = commonService.getLocNoNew( 1, devpNo,findLocNoAttributeVo,waitPakins.getModel().equals("空托盘") ? 1 : 2);
        int workNo = dto.getWorkNo();
        Date now = new Date();
        // 生成工作档
@@ -472,7 +654,7 @@
        wrkMast.setEmptyMk("N"); // 空板
        wrkMast.setLinkMis("Y");
        wrkMast.setCtnType(tailSupportFlag ? 1 : 0); // 尾托标识
        wrkMast.setPdcType(waitPakins.getModel()); // 空桶类型
        wrkMast.setPdcType(waitPakins.getMatnr()); // 空桶类型
        // 操作人员数据
        wrkMast.setAppeTime(now);
        wrkMast.setModiTime(now);
@@ -524,43 +706,30 @@
     * 直供罐装线
     */
    @Transactional(propagation = Propagation.REQUIRED)
    public StartupDto startupFullPutStore(SearchLocParam param,WaitPakin waitPakin) {
    public StartupDto startupFullPutStore(SearchLocParam param,WaitPakin waitPakin,SearchLocParam.WantBucket wantBucket) {
        // 源站点状态检测
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(param.getSourceStaNo(), true);
        String model = waitPakin.getModel();
//        // 判断空桶库有多少这种桶型
//        int count = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("matnr", param.getBucketType()).where("CAST(SUBSTRING(loc_no, 1, 2) as int) >= 9"));
//
//        // 小于10个则直供罐装线,避免入空桶库后在出库
//        if (count > 10) {
//             return null;
//        }
        Integer wantBucketFlag = 0; // 罐装线号
        String wantBucketType; // 桶类型
        boolean flag = true;
        for(Map.Entry<Integer,String> entry :param.getWantBucketFlag().entrySet()) {
            wantBucketFlag = entry.getKey();
            wantBucketType = entry.getValue();
            if(model.equals(wantBucketType)) { // 当前桶类型是罐装线要的类型
                // 空桶库无该类型桶
                int count = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("model", model).where("CAST(SUBSTRING(loc_no, 1, 2) as int) >= 9"));
                if (count == 0) {
                    flag = false;
                    break;
                }
            }
        }
        if (flag) { // 不满足直供罐装线条件
             return null;
        }
        StartupDto dto = commonService.getLocNo(param,wantBucketFlag);
        StartupDto dto = commonService.getLocNo(param,wantBucket.getSite());
        int workNo = dto.getWorkNo();
        Date now = new Date();
        // 生成工作档
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
        wrkMast.setIoTime(now);
        wrkMast.setWrkSts(2L); // 工作状态:生成入库ID
        wrkMast.setIoType(2); // 入出库状态:2.直供罐装线
        wrkMast.setWrkSts(2L);
        wrkMast.setIoType(3); // 入出库状态:3.站到站
        wrkMast.setIoPri(13D); // 优先级
        wrkMast.setCrnNo(dto.getCrnNo());
//        wrkMast.setCrnNo(dto.getCrnNo());
        wrkMast.setSourceStaNo(dto.getSourceStaNo());
        wrkMast.setStaNo(dto.getStaNo());
//        wrkMast.setLocNo(dto.getLocNo());
@@ -571,7 +740,7 @@
        wrkMast.setEmptyMk("N"); // 空板
        wrkMast.setLinkMis("Y");
        wrkMast.setCtnType(param.isTailSupportFlag() ? 1 : 0); // 尾托标识
        wrkMast.setPdcType(model); // 空桶类型
        wrkMast.setPdcType(waitPakin.getMatnr()); // 空桶类型
        // 操作人员数据
        wrkMast.setAppeTime(now);
        wrkMast.setModiTime(now);
@@ -610,7 +779,7 @@
    }
    @Transactional
    public StartupDto emptyPlateIn(Integer devpNo, LocTypeDto locTypeDto, String barcode, int locArea) {
    public StartupDto emptyPlateIn(Integer devpNo, LocTypeDto locTypeDto, String barcode, int locArea, int flag) {
        // 源站点状态检测
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
        // 检索库位
@@ -634,8 +803,9 @@
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk("Y"); // 空板
        wrkMast.setLinkMis("Y");
        wrkMast.setBarcode(barcode);
        wrkMast.setCtnType(sourceStaNo.getCtnType()); // 容器类型
        wrkMast.setPltType(flag); // 空拖类型
//        wrkMast.setBarcode(barcode);
//        wrkMast.setCtnType(sourceStaNo.getCtnType()); // 容器类型
        // 操作人员数据
        wrkMast.setAppeTime(new Date());
        wrkMast.setModiTime(new Date());