自动化立体仓库 - WMS系统
#
lsh
2024-01-12 41074b338be9cff71a43d910deab3ba6a7bfb69f
#
12个文件已修改
235 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OpenController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/BasDevp.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/SingleMountUnstackingCompleteParam.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/BasDevpService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/ReportToOKScheduler.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/WrkMastStaInItScheduler.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/ReportToDismantleTheStackHandler.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WrkMastStaInItHandler.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/CommonService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/WcsController.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -222,10 +222,12 @@
     * 中控:码垛完成下发入库信息
     */
    @PostMapping("/palletizing/complete/auth/v1")
    @AppAuth(memo = "中控(桁架):码垛完成下发入库信息")
    @AppAuth(memo = "码垛完成下发入库信息")
    public synchronized R palletizingComplete(@RequestHeader(required = false) String appkey,
                                           @RequestBody PalletizingCompleteParam param,
                                           HttpServletRequest request) {
//        appkey = "ea1f0459efc02a79f046f982767939ae";
        auth(appkey, param, request);
        openService.palletizingComplete(param);
        return R.ok(param);
@@ -253,6 +255,8 @@
    public synchronized R singleUnstackingComplete(@RequestHeader(required = false) String appkey,
                                            @RequestBody SingleUnstackingCompleteParam param,
                                            HttpServletRequest request) {
//        appkey = "ea1f0459efc02a79f046f982767939ae";
        auth(appkey, param, request);
        openService.singleUnstackingComplete(param);
        return R.ok(param);
@@ -266,6 +270,8 @@
    public synchronized R singleMountUnstackingComplete(@RequestHeader(required = false) String appkey,
                                            @RequestBody SingleMountUnstackingCompleteParam param,
                                            HttpServletRequest request) {
//        appkey = "ea1f0459efc02a79f046f982767939ae";
        auth(appkey, param, request);
        openService.singleMountUnstackingComplete(param);
        return R.ok(param);
src/main/java/com/zy/asrs/entity/BasDevp.java
@@ -214,6 +214,10 @@
    @TableField("cart_pos")
    private Integer cartPos;
    @ApiModelProperty(value = "")
    @TableField("report_sign")
    private Integer reportSign;
    public String getIoTime$(){
        if (Cools.isEmpty(this.ioTime)){
src/main/java/com/zy/asrs/entity/param/SingleMountUnstackingCompleteParam.java
@@ -14,7 +14,7 @@
public class SingleMountUnstackingCompleteParam {
    private String barcode;//    是    字符串    托盘码
    private String boxType;//    是    字符串    码垛木箱类型(同一托盘一种类型)
    private String palletizingNo;//    是    字符串    码垛木箱类型(同一托盘一种类型)
    private String palletizingNo;//    是    字符串    码垛木箱类型(同一托盘一种类型)  废弃
    private String createTime;//        是    字符串    创建时间
    private String uuid;//        是    字符串    时间戳
    private Integer staStart;//        是    字符串    起始站点(托盘所在站点)
src/main/java/com/zy/asrs/service/BasDevpService.java
@@ -43,4 +43,10 @@
     */
    BasDevp checkSiteStatus(Integer devpNo, boolean pakin);
    /**
     * 目标站点状态检测
     * @param pakin 是否入库操作 true 是 ; false 不是
     */
    BasDevp checkSiteStatusEmpty(Integer devpNo, boolean pakin);
}
src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java
@@ -67,4 +67,30 @@
        }
        return station;
    }
    @Override
    public BasDevp checkSiteStatusEmpty(Integer devpNo, boolean pakin) {
        BasDevp station = selectById(devpNo);
        if (station == null){
            throw new CoolException(devpNo+"站点不存在");
        }
        if (pakin) {
//            if(station.getAutoing()==null || !station.getAutoing().equals("Y")) {
//                throw new CoolException(devpNo+"站点不是自动状态");
//            }
//            if(station.getLoading()==null || !station.getLoading().equals("Y")) {
//                throw new CoolException(devpNo+"站点无物");
//            }
//            if(station.getWrkNo()!=null && station.getWrkNo()>0 && station.getWrkNo() < 9990) {
//                throw new CoolException(devpNo+"站点已有工作号");
//            }
//            if(!station.getInEnable().equals("Y")) {
//                throw new CoolException(devpNo+"站点不是可入状态");
//            }
            if(wrkMastService.getWorkingMast(devpNo)>0){
                throw new CoolException(devpNo+"站点不能同时生成两笔入库工作档");
            }
        }
        return station;
    }
}
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -975,11 +975,11 @@
    @Transactional
    public void cs3() {
        //拆盘
        WrkMastSta wrkMastSta1 = new WrkMastSta(new Date(),118);
        WrkMastSta wrkMastSta1 = new WrkMastSta(new Date(),119);
        wrkMastSta1.setType(2);
        wrkMastSta1.setWrkType(2);
        wrkMastStaService.insert(wrkMastSta1);
        WrkMastSta wrkMastSta2 = new WrkMastSta(new Date(),122);
        WrkMastSta wrkMastSta2 = new WrkMastSta(new Date(),121);
        wrkMastSta2.setType(2);
        wrkMastSta2.setWrkType(2);
        wrkMastStaService.insert(wrkMastSta2);
src/main/java/com/zy/asrs/task/ReportToOKScheduler.java
@@ -1,7 +1,6 @@
package com.zy.asrs.task;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.task.handler.ReportToDismantleTheStackHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@@ -13,18 +12,15 @@
@Component
public class ReportToOKScheduler {
    @Autowired
    private ReportToDismantleTheStackHandler reportToDismantleTheStackHandler;
//    @Scheduled(cron = "0/3 * * * * ? ")
    private void execute(){//拆垛完成信息处理
        int[] staNos =new int[]{118,119,120,121};
        for (int staNo : staNos){
            ReturnT<String> result = reportToDismantleTheStackHandler.start(staNo);
            if (result.getCode()==200){
                break;
            }
        }
//        int[] staNos =new int[]{118,119,120,121};
//        for (int staNo : staNos){
//            ReturnT<String> result = reportToDismantleTheStackHandler.start(staNo);
//            if (result.getCode()==200){
//                break;
//            }
//        }
    }
}
src/main/java/com/zy/asrs/task/WrkMastStaInItScheduler.java
@@ -49,6 +49,9 @@
                if(Cools.isEmpty(wrkMast)){
                    continue;
                }
                if (wrkMast.getIoType()<100 || wrkMast.getIoType()==110){
                    continue;
                }
                if (wrkMast.getWrkSts()!=14 && wrkMast.getWrkSts()!=15){
                    continue;
                }
@@ -83,27 +86,27 @@
            BasDevp basDevp = basDevpService.selectById(staNo);
            if (basDevp.getWrkNo()!=0){
                WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", basDevp.getWrkNo()));
                if (wrkMast.getWrkSts()!=2){
                if (wrkMast.getWrkSts()!=2 || wrkMast.getIoType()==10){
                    continue;
                }
                boolean wrkTypeSign = fullKM(wrkMast);
//                boolean wrkTypeSign = fullKM(wrkMast);
                if (!Cools.isEmpty(wrkMast)){
                    if (wrkTypeSign){
//                    if (wrkTypeSign){
                        ReturnT<String> result = wrkMastStaInItHandler.start(wrkMast,basDevp,13);
                        if (result.getCode()==200) {
                            continue;
                        } else {
                            System.out.println(staNo+"失败!");
                        }
                    }else {
                        ReturnT<String> result = wrkMastStaInItHandler.start(wrkMast,basDevp,23);
                        if (result.getCode()==200) {
                            continue;
                        } else {
                            System.out.println(staNo+"失败!");
                        }
                    }
//                    }else {
//                        ReturnT<String> result = wrkMastStaInItHandler.start(wrkMast,basDevp,23);
//                        if (result.getCode()==200) {
//                            continue;
//                        } else {
//                            System.out.println(staNo+"失败!");
//                        }
//                    }
                }
            }
        }
src/main/java/com/zy/asrs/task/handler/ReportToDismantleTheStackHandler.java
@@ -50,7 +50,14 @@
    public ReturnT<String> start(int staNo) {
        try {
            BasDevp basDevp = basDevpService.selectById(staNo);
            if (!Cools.isEmpty(basDevp) && basDevp.getAutoing().equals("Y") && basDevp.getWrkNo()!=0){ //上传前工作号跟电控约定为9992(你可以自定义)
            Integer staOther = getStaOther(staNo);
            if (staOther==0) return SUCCESS;
            BasDevp basDevpOther = basDevpService.selectById(staOther);
            if (Cools.isEmpty(basDevpOther) || basDevpOther.getReportSign()==1){
                return SUCCESS;
            }
            if (!Cools.isEmpty(basDevp) && basDevp.getAutoing().equals("Y") && basDevp.getWrkNo()!=0){ //上传前工作号跟电控约定为9992中控(桁架):码垛完成下发入库信息(你可以自定义)
                WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", basDevp.getWrkNo()));
                if (Cools.isEmpty(wrkMast) || !wrkMast.getSheetNo().equals("0")){
                    return SUCCESS;
@@ -61,7 +68,7 @@
                }
                SingleMountUnstackingCompleteParam singleMountUnstackingCompleteParam = new SingleMountUnstackingCompleteParam(wrkMast,wrkDetls);
                singleMountUnstackingCompleteParam.setStaStart(staNo);
                singleMountUnstackingCompleteParam.setStaEnd(staNo>119? 135:133);
                singleMountUnstackingCompleteParam.setStaEnd(staNo>119? 135:131);
                ReturnT<String> result = null;
                result = postMesData(barcodeUploadpath,singleMountUnstackingCompleteParam);
                System.out.println(result);
@@ -84,6 +91,8 @@
                    }
                    wrkMast.setSheetNo("1");
                    wrkMastService.updateById(wrkMast);
                    basDevp.setReportSign(1);
                    basDevpService.updateById(basDevp);
                    return SUCCESS;
                }else {
                    log.error("条码上传中控失败");
@@ -135,4 +144,19 @@
        }
        return SUCCESS;
    }
    public Integer getStaOther(Integer staNo){
        switch (staNo){
            case 118:
                return 119;
            case 119:
                return 118;
            case 120:
                return 121;
            case 121:
                return 120;
            default:
                return 0;
        }
    }
}
src/main/java/com/zy/asrs/task/handler/WrkMastStaInItHandler.java
@@ -49,15 +49,15 @@
                    if (Cools.isEmpty(wrkMastSta)){
                        WrkMastSta wrkMastSta1 = new WrkMastSta(wrkMast,new Date(),basDevp);
                        wrkMastSta1.setType(fullKM(wrkMast)? 1:2);
                        wrkMastSta1.setWrkType(1);
                        wrkMastSta1.setWrkType(1);//工作类型  1:取(叠盘)  2:拆盘  3:取放 5:满取  6:满放
                        wrkMastStaService.insert(wrkMastSta1);
                    };
                    break;
                case 22://2:放
                case 22://2:放(拆盘)
                    if (Cools.isEmpty(wrkMastSta)){
                        WrkMastSta wrkMastSta1 = new WrkMastSta(wrkMast,new Date(),basDevp);
                        wrkMastSta1.setType(fullKM(wrkMast)? 1:2);
                        wrkMastSta1.setWrkType(5);
                        wrkMastSta1.setWrkType(5);//工作类型  1:取(叠盘)  2:拆盘  3:取放 5:满取  6:满放
                        wrkMastStaService.insert(wrkMastSta1);
                    };
                    break;
src/main/java/com/zy/common/service/CommonService.java
@@ -297,7 +297,7 @@
                log.error("type_no={},stn_no={},crn_no={}", staDescId, sourceStaNo, crnNo);
//                throw new CoolException("入库路径不存在");
                crnNo = 0;
            }
            }else {
            staNo = basDevpService.selectById(staDesc.getCrnStn());
            if (!staNo.getAutoing().equals("Y")) {
//                throw new CoolException("目标站"+staDesc.getCrnStn()+"不可用");
@@ -305,6 +305,7 @@
            }
            startupDto.setStaNo(staNo.getDevNo());
        }
        }
        // 更新库位排号
        if (Utils.BooleanWhsTypeSta(whsType, staDescId)) {
src/main/java/com/zy/common/web/WcsController.java
@@ -109,6 +109,59 @@
        return R.ok().add(dto);
    }
    @PostMapping("/pakin/empty/loc/v1")
    @ResponseBody
    public synchronized R getLocNoEmpty(@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.checkSiteStatusEmpty(param.getSourceStaNo(), true);
        sourceStaNo.setLocType1(param.getLocType1());
        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
        StartupDto dto = null;
        switch (param.getIoType()) {
            case 10://空托盘入库
                dto = emptyPlateInEmpty(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("/auto/emptyIn/v1")
    @ResponseBody
    public R autoEmptyIn(@RequestBody LocTypeDto locTypeDto){
@@ -290,6 +343,58 @@
        return dto;
    }
    @Transactional
    public StartupDto emptyPlateInEmpty(Integer devpNo, LocTypeDto locTypeDto, String barcode) {
        // 源站点状态检测
        BasDevp sourceStaNo = basDevpService.checkSiteStatusEmpty(devpNo, true);
        // 检索库位
        StartupDto dto = commonService.getLocNo(1, 10, devpNo, null,null,null, locTypeDto);
        int workNo = dto.getWorkNo();
        // 生成工作档
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
        wrkMast.setIoTime(new Date());
        wrkMast.setWrkSts(2L); // 工作状态:生成入库ID
        wrkMast.setIoType(10); // 入出库状态:10.空板入库
        wrkMast.setIoPri(13D); // 优先级
        wrkMast.setCrnNo(dto.getCrnNo());
        wrkMast.setSourceStaNo(dto.getSourceStaNo());
        wrkMast.setStaNo(dto.getStaNo());
        wrkMast.setLocNo(dto.getLocNo());
        wrkMast.setFullPlt("N"); // 满板
        wrkMast.setPicking("N"); // 拣料
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk("Y"); // 空板
        wrkMast.setLinkMis("Y");
        wrkMast.setBarcode(barcode);
        wrkMast.setCtnType(sourceStaNo.getCtnType()); // 容器类型
        // 操作人员数据
        wrkMast.setAppeTime(new Date());
        wrkMast.setModiTime(new Date());
        boolean res = wrkMastService.insert(wrkMast);
        if (!res) {
            throw new CoolException("保存工作档失败");
        }
        // 更新源站点信息
        sourceStaNo.setWrkNo(workNo);
        sourceStaNo.setModiTime(new Date());
        if (!basDevpService.updateById(sourceStaNo)){
            throw new CoolException("更新源站失败");
        }
        // 更新目标库位状态
        LocMast locMast = locMastService.selectById(dto.getLocNo());
        if (locMast.getLocSts().equals("O")){
            locMast.setLocSts("S"); // S.入库预约
            locMast.setModiTime(new Date());
            if (!locMastService.updateById(locMast)){
                throw new CoolException("改变库位状态失败");
            }
        } else {
            throw new CoolException(dto.getLocNo()+"目标库位已被占用");
        }
        return dto;
    }
    /*...........................徐工汉云..............以下.............上饶江铜...........................*/
    /*............................Created by Monkey D. Luffy on 2023.07.19.............................*/