自动化立体仓库 - WMS系统
pang.jiabao
5 天以前 f0bf8f7252ab482b4ce82082dbc67fc0b77477f0
pda空托出库
5个文件已修改
123 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/MobileController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/MobileService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 88 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-dev.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MobileController.java
@@ -529,10 +529,14 @@
    @PostMapping("/callEmptyBinOutBound")
    @ManagerAuth(memo = "pda呼叫空料框出库")
    public synchronized R callEmptyBinOutBound(@RequestBody JSONObject param) {
        if(!param.containsKey("staNo") || !param.containsKey("locType")){ // 1.窄,2.宽
        if(!param.containsKey("staNo") || !param.containsKey("locType") || !param.containsKey("count")){ // 1.窄,2.宽
            return R.parse(BaseRes.PARAM);
        }
        return mobileService.callEmptyBinOutBound(null,param.getString("staNo"),param.getString("locType"),getUserId());
        int count = param.getInteger("count");
        if (count <= 0 || count > 10) {
            return R.parse("数量有误,count:" + count);
        }
        return mobileService.callEmptyBinOutBound(null,param.getString("staNo"),param.getString("locType"),count,getUserId());
    }
    @PostMapping("/callEmptyBinInBound")
src/main/java/com/zy/asrs/service/MobileService.java
@@ -107,7 +107,7 @@
     * @param locType 托盘类型 1.窄,2.宽
     * @param userId 用户id
     */
    R callEmptyBinOutBound(MesOutApply mesOutApply,String staNo, String locType, Long userId);
    R callEmptyBinOutBound(MesOutApply mesOutApply,String staNo, String locType, int count, Long userId);
    /**
     * pda呼叫料框回库
src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java
@@ -372,7 +372,7 @@
        // 空托出库
        if (StringUtils.isEmpty(mesOutApply.getOrderNo()) && "01".equals(mesOutApply.getTransType())) {
            // 生成空托出库任务
            mobileService.callEmptyBinOutBound(mesOutApply,WMS_TRANS_START_STATION_1,"1",defaultUserId);
            mobileService.callEmptyBinOutBound(mesOutApply,WMS_TRANS_START_STATION_1,"1",1,defaultUserId);
//            try {
//                if (!StringUtils.isEmpty(mesOutApply.getTaskno()) && !StringUtils.isEmpty(mesOutApply.getStationId())) {
@@ -586,8 +586,8 @@
                    transTask.setOrderNo(mesInApply.getOrderNo());
                    transTask.setTransType(mesInApply.getTransType());
                    transTask.setCurProcess(mesInApply.getProductLineId());
                    transTask.setCurStationId("A3");
                    transTask.setNextStationId("A4");
                    transTask.setCurStationId(mesInApply.getStationID());
                    transTask.setNextStationId(WMS_TRANS_START_STATION_2);
                    transTask.setItemno(WMS_ZPALLET_ID);  // 固定为空托的编码
                    transTask.setQty(1);    // 空托只回1个
                    transTask.setProductLineId(mesInApply.getProductLineId());
@@ -595,7 +595,7 @@
                    transTask.setAgvFactory(1);
                    JSONObject sendAgvTask = submitTask(transTask);
                    if (!"1".equals(sendAgvTask.getString("Success"))) {
                        log.error("出库下发agv运输任务失败,{}", JSONObject.toJSONString(transTask));
                        log.error("入库下发agv运输任务失败,{}", JSONObject.toJSONString(transTask));
                        return 2;
                    }
                } else {
@@ -678,7 +678,6 @@
            OrderInAndOutUtil.updateOrder(Boolean.TRUE, orderPakin.getId(), 2L, defaultUserId);
            // 呼叫AGV从产线运回立库
            try {
                if (!StringUtils.isEmpty(mesInApply.getTaskno())) {
                    TransTask transTask = new TransTask();
                    transTask.setTaskno(mesInApply.getTaskno());
@@ -697,12 +696,12 @@
                    transTask.setAgvFactory(1);
                    JSONObject sendAgvTask = submitTask(transTask);
                    if (!"1".equals(sendAgvTask.getString("Success"))) {
                        log.error("出库下发agv运输任务失败:{}", JSONObject.toJSONString(transTask));
                        log.error("入库下发agv运输任务失败:{}", JSONObject.toJSONString(transTask));
                        throw new CoolException("入库下发agv运输任务失败");
                    }
                } else {
                    throw new CoolException("MES入库下发agv运输任务失败");
                }
            } catch (Exception e) {
                log.error("下发AGV运输任务失败", e);
            }
        }
        return 1;
@@ -1124,9 +1123,9 @@
        // 转发给海康或华晓RCS
        RcsReturn rcsReturn = rcsService.submitTask(rcsTaskSubmit, transTask.getAgvFactory());
        if (rcsReturn.getCode().equals("SUCCESS")) {
            JSONObject data = rcsReturn.getData();
            String robotTaskCode = data.getString("robotTaskCode");
            if (Cools.isEmpty(transTask.getTaskno())) {
                JSONObject data = rcsReturn.getData();
                String robotTaskCode = data.getString("robotTaskCode");
                transTask.setTaskno(robotTaskCode);
                result.put("taskno", transTask.getTaskno());
            }
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -1287,60 +1287,64 @@
    @Override
    @Transactional
    public R callEmptyBinOutBound(MesOutApply mesOutApply, String staNo, String locType, Long userId) {
        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_sts", 'D').eq("loc_type2", locType));
        if(locMast == null) {
            return R.parse("该类型:" + locType +"空托盘不存在");
    public R callEmptyBinOutBound(MesOutApply mesOutApply, String staNo, String locType,int count, Long userId) {
        List<LocMast> locMastList = locMastService.selectList(new EntityWrapper<LocMast>().setSqlSelect("TOP " + count + " *")
                .eq("loc_sts", "D").eq("frozen", 0).eq("loc_type2", locType).orderBy("lev1").orderBy("bay1").orderBy("row1"));
        if (locMastList.size() < count) {
            return R.parse("空托数量不足(或冻结),剩余数量:" + locMastList.size());
        }
        // 获取路径
        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                .eq("type_no", 110)
                .eq("stn_no", 204)
                .eq("crn_no", locMast.getCrnNo());
                .eq("crn_no", 1);
        StaDesc staDesc = staDescService.selectOne(wrapper);
        if (staDesc == null) {
            return R.parse("出库路径不存在,站点:" + staNo);
        }
        Date now = new Date();
        // 生成工作档
        int workNo = commonService.getWorkNo(WorkNoType.PAKOUT.type);
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
        wrkMast.setIoTime(now);
        wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
        wrkMast.setIoType(110); // 入出库状态: 110.空板出库
        wrkMast.setIoPri(10D);
        wrkMast.setSourceStaNo(staDesc.getCrnStn$()); // 源站
        wrkMast.setStaNo(staDesc.getStnNo$()); // 目标站
        wrkMast.setCrnNo(staDesc.getCrnNo());
        wrkMast.setSourceLocNo(locMast.getLocNo()); // 源库位
        wrkMast.setFullPlt("N"); // 满板:Y
        wrkMast.setPicking("N"); // 拣料
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk("Y"); // 空板
        wrkMast.setLinkMis("N");
        wrkMast.setAppeUser(userId);
        wrkMast.setAppeTime(now);
        wrkMast.setModiUser(userId);
        wrkMast.setModiTime(now);
        if (mesOutApply != null) {
            wrkMast.setTaskNo(mesOutApply.getTaskno());
            wrkMast.setAgvSta(mesOutApply.getStationId());
            wrkMast.setMemo(JSONObject.toJSONString(mesOutApply));
        } else {
            wrkMast.setAgvSta(staNo);
        }
        for (LocMast locMast: locMastList) {
            Date now = new Date();
            // 生成工作档
            int workNo = commonService.getWorkNo(WorkNoType.PAKOUT.type);
            WrkMast wrkMast = new WrkMast();
            wrkMast.setWrkNo(workNo);
            wrkMast.setIoTime(now);
            wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
            wrkMast.setIoType(110); // 入出库状态: 110.空板出库
            wrkMast.setIoPri(10D);
            wrkMast.setSourceStaNo(staDesc.getCrnStn$()); // 源站
            wrkMast.setStaNo(staDesc.getStnNo$()); // 目标站
            wrkMast.setCrnNo(staDesc.getCrnNo());
            wrkMast.setSourceLocNo(locMast.getLocNo()); // 源库位
            wrkMast.setFullPlt("N"); // 满板:Y
            wrkMast.setPicking("N"); // 拣料
            wrkMast.setExitMk("N"); // 退出
            wrkMast.setEmptyMk("Y"); // 空板
            wrkMast.setLinkMis("N");
            wrkMast.setAppeUser(userId);
            wrkMast.setAppeTime(now);
            wrkMast.setModiUser(userId);
            wrkMast.setModiTime(now);
            if (mesOutApply != null) {
                wrkMast.setTaskNo(mesOutApply.getTaskno());
                wrkMast.setAgvSta(mesOutApply.getStationId());
                wrkMast.setMemo(JSONObject.toJSONString(mesOutApply));
            } else {
                wrkMast.setAgvSta(staNo);
            }
        wrkMastService.insert(wrkMast);
            wrkMastService.insert(wrkMast);
        // 更新库位状态
        if (locMast.getLocSts().equals("D")) {
            locMast.setLocSts("R");
            locMast.setModiUser(userId);
            locMast.setModiTime(now);
            locMastService.updateById(locMast);
            // 更新库位状态
            if (locMast.getLocSts().equals("D")) {
                locMast.setLocSts("R");
                locMast.setModiUser(userId);
                locMast.setModiTime(now);
                locMastService.updateById(locMast);
            }
            log.info("生成空托出库任务成功,任务号:{}",wrkMast.getWrkNo());
        }
        log.info("生成空托出库任务成功,任务号:{}",wrkMast.getWrkNo());
        return R.ok("出库成功");
    }
src/main/resources/application-dev.yml
@@ -144,3 +144,7 @@
hx:
  url: http://127.0.0.1:8089/hx/
#wcs地址
wcs:
  url: http://127.0.0.1:9090/jgwcs