src/main/java/com/zy/asrs/controller/OpenController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/entity/BasDevp.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/utils/Utils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/model/protocol/StaProtocol.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/thread/SiemensDevpThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/mapper/BasDevpMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -13,6 +13,7 @@ import com.zy.asrs.entity.param.WMSAndAGVInterfaceParam; import com.zy.asrs.entity.param.TaskCreateParam; import com.zy.asrs.service.*; import com.zy.asrs.utils.Utils; import com.zy.common.web.BaseController; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -78,38 +79,64 @@ //创建任务 @PostMapping("/taskCreate") @Transactional public R taskCreate(@RequestHeader String appkey, @RequestBody List<TaskCreateParam> param1, HttpServletRequest request) { auth(appkey, param1, request); for (TaskCreateParam param : param1 ) { if (Cools.isEmpty(param)) { return R.parse(BaseRes.PARAM); } if (Cools.isEmpty(param.getTaskNo())) { return R.error("任务号[taskNo]不能为空"); } if (Cools.isEmpty(param.getIoType())) { return R.error("任务类型[ioType]不能为空"); } if (Cools.isEmpty(param.getBarcode())) { return R.error("条码[barcode]不能为空"); } String locNo=null; if(param.getIoType()==1){ locNo=param.getTargetPoint(); }else{ locNo=param.getStartPoint(); } LocMast locMast=locMastService.selectOne(new EntityWrapper<LocMast>() .eq("loc_sts","F") .eq("loc_no",locNo) .eq("barcode",param.getBarcode())); if(Cools.isEmpty(locMast)){ return R.error("该库位不满足出库条件"+param.getTargetPoint()); } openService.taskCreate(param); try{ List<TaskCreateParam> paramList = new ArrayList<>(); List<String> locNoList = new ArrayList<>(); for (TaskCreateParam param : param1) { if (Cools.isEmpty(param)) { return R.parse(BaseRes.PARAM); } if (Cools.isEmpty(param.getTaskNo())) { return R.error("任务号[taskNo]不能为空"); } if (Cools.isEmpty(param.getIoType())) { return R.error("任务类型[ioType]不能为空"); } if (Cools.isEmpty(param.getBarcode())) { return R.error("条码[barcode]不能为空"); } String locNo=null; if(param.getIoType()==1){ locNo=param.getTargetPoint(); }else{ locNo=param.getStartPoint(); } try{ LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>() .eq("loc_no", locNo).ne("loc_sts","X")); if (Cools.isEmpty(locMast)){ log.error("库位号不存在"+locNo); return R.error("库位号不存在"+locNo).add("库位号不存在"+locNo); } }catch (Exception e){ log.error("库位号检测程序异常==》异常信息"+e); return R.error("库位号检测程序异常").add("库位号检测程序异常==》异常信息"+e); } LocMast locMast=locMastService.selectOne(new EntityWrapper<LocMast>() .eq("loc_sts","F") .eq("loc_no",locNo) .eq("barcode",param.getBarcode())); if(Cools.isEmpty(locMast)){ return R.error("该库位不满足出库条件"+param.getTargetPoint()); } if (!locNoList.contains(locMast.getLocNo())){ locNoList.add(locMast.getLocNo()); paramList.add(param); }else { return R.error("该库位不能同时下发两笔任务"+locMast.getLocNo()); } } for (TaskCreateParam param : paramList){ openService.taskCreate(param); } }catch (Exception e){ log.error("任务下发异常"+e); return R.error(); } return R.ok(); } src/main/java/com/zy/asrs/entity/BasDevp.java
@@ -230,6 +230,10 @@ @TableField("agv_target_place") private Integer agvTargetPlace; @ApiModelProperty(value= "异常码") @TableField("sta_err") private Integer staErr; public String getIoTime$(){ if (Cools.isEmpty(this.ioTime)){ src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -169,9 +169,9 @@ } // News.warn("扫码入库失败,{}入库站因{}异常,托盘已被退回", inSta.getStaNo(), errMsg); staProtocol.setWorkNo(workNo); staProtocol.setStaNo(inSta.getBackSta().shortValue()); staProtocol.setStaNo(inSta.getStaNo().shortValue()); devpThread.setPakMk(staProtocol.getSiteId(), false); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol)); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); TaskWrk taskWrk = taskWrkMapper.selectByWrkNo(Integer.valueOf(workNo)); if (taskWrk != null) { taskWrk.setMemo(errMsg);//将错误码存入备注字段进行展示 @@ -213,13 +213,40 @@ HashMap<String, Object> headParam = new HashMap<>(); headParam.put("Content-Type","application/json"); String response; response = new HttpHandler.Builder() // .setHeaders(headParam) .setUri(wmsUrl) .setPath(inboundTaskApplyPath) .setJson(JSON.toJSONString(toWmsDTO)) .build() .doPost(); try{ response = new HttpHandler.Builder() // .setHeaders(headParam) .setUri(wmsUrl) .setPath(inboundTaskApplyPath) .setJson(JSON.toJSONString(toWmsDTO)) .build() .doPost(); }catch (Exception e){ log.error("请求入库调用接口失败"); log.error("异常信息打印:"+e); try{ BasDevp basDevp = basDevpService.selectById(inSta.getStaNo()); if (Cools.isEmpty(basDevp)){ log.error("站点号异常"+inSta.getStaNo()); } else if (basDevp.getStaErr()!=0){ basDevp.setStaErr(2); basDevpService.updateById(basDevp); } }catch (Exception e1){ // 退回 log.error("扫码检测程序异常"+inSta.getStaNo()+"异常信息"+e1); } staProtocol.setWorkNo((short)9999); staProtocol.setStaNo(inSta.getStaNo().shortValue()); devpThread.setPakMk(staProtocol.getSiteId(), false); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); // TaskWrk taskWrk = taskWrkMapper.selectByWrkNo(Integer.valueOf(workNo)); // if (taskWrk != null) { // taskWrk.setMemo(errMsg);//将错误码存入备注字段进行展示 // taskWrkMapper.updateById(taskWrk); // } continue; } JSONObject jsonObject = JSON.parseObject(response); apiLogService.save("wms请求入库货位接口" @@ -233,7 +260,43 @@ log.info("入库请求参数{}" + JSON.toJSONString(toWmsDTO)); if (jsonObject.getInteger("code").equals(200) && !Cools.isEmpty(jsonObject.get("data").toString())) { GetWmsDto getWmsDto = JSON.parseObject(jsonObject.get("data").toString(), GetWmsDto.class); try{ BasDevp basDevp = basDevpService.selectById(inSta.getStaNo()); if (Cools.isEmpty(basDevp)){ log.error("站点号异常"+inSta.getStaNo()); throw new CoolException("站点号异常"+inSta.getStaNo()); } Integer staNoCrnNo = Utils.StaNoCrnNo(inSta.getStaNo()); if (staNoCrnNo==0){ basDevp.setStaErr(1); basDevpService.updateById(basDevp); throw new CoolException("站点号异常"+inSta.getStaNo()); }else { LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>() .eq("crn_no", staNoCrnNo.longValue()) .eq("loc_no", getWmsDto.getLocNo())); if (Cools.isEmpty(locMast)){ basDevp.setStaErr(1); basDevpService.updateById(basDevp); throw new CoolException("站点号异常"+inSta.getStaNo()); } } } catch (Exception e){ // log.error("扫码检测程序异常"+inSta.getStaNo()+"异常信息"+e); // 退回 log.error("扫码检测程序异常"+inSta.getStaNo()+errMsg); staProtocol.setWorkNo((short)9999); staProtocol.setStaNo(inSta.getStaNo().shortValue()); devpThread.setPakMk(staProtocol.getSiteId(), false); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); // TaskWrk taskWrk = taskWrkMapper.selectByWrkNo(Integer.valueOf(workNo)); // if (taskWrk != null) { // taskWrk.setMemo(errMsg);//将错误码存入备注字段进行展示 // taskWrkMapper.updateById(taskWrk); // } continue; } //查看该库位是否为空库位 LocMast locMast=locMastService.selectOne(new EntityWrapper<LocMast>() .eq("loc_sts","O") @@ -288,87 +351,9 @@ continue; } // StaDescService staDescService = SpringUtils.getBean(StaDescService.class); // // ToWmsDTO toWmsDTO = new ToWmsDTO(); // Map<String, Object> map = new HashMap<>(); // map.put("x-api-key","7a15b5db-29b6-552c-8cff-0cfec3756da2"); // List<Integer> list = openServiceImpl.getInEnableRoadway(); // TaskWrk taskWrk = taskWrkService.selectOne(new EntityWrapper<TaskWrk>().eq("barcode", barcode)); // // if (Cools.isEmpty(taskWrk)){ // continue; // } // //StaDesc staDesc1 = staDescService.selectOne(new EntityWrapper<StaDesc>().eq("stn_no",inSta.getBackSta())); // if (taskWrk.getTargetPoint() != null && taskWrk.getStartPoint() != null){ // if ( taskWrk.getWrkNo() != null && taskWrk.getWrkNo().shortValue() == workNo ){ // continue; // } // //获取堆垛机站点 // StaDesc staDesc = new StaDesc(); // if (devp.getId() <= 1){ // staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>() // .eq("crn_no", taskWrk.getCrnNo()).eq("type_no",1).lt("stn_no", 200)); // }else { // staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>() // .eq("crn_no", taskWrk.getCrnNo()).eq("type_no",1).lt("stn_no", 400).ge("stn_no", 250)); // } // staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue()); // staProtocol.setStaNo(staDesc.getCrnStn().shortValue()); // MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol)); // Thread.sleep(500); // }else { // //TaskWrk taskWrk = taskWrkService.selectByTaskNo(param.getTaskNo()); // toWmsDTO.setWarehouseId("1688469798893297665"); // toWmsDTO.setContainerCode(barcode); // toWmsDTO.setApplyType("TUNNEL_LOCATION"); // toWmsDTO.setTaskTunnel(taskWrk.getCrnNo()); // toWmsDTO.setCanInboundTunnels(list); // String response = null; // try { // response = new HttpHandler.Builder() // .setHeaders(map) // .setUri(wmsUrl) // .setPath(inboundTaskApplyPath) // .setJson(JSON.toJSONString(toWmsDTO)) // .build() // .doPost(); // }catch (Exception e){ // log.error("wms通讯失败,"+e.getMessage()); // continue; // } // apiLogService.save("wms请求入库货位接口" // ,wmsUrl+"wcsManager/wcsInterface/inboundTaskApply" // ,null // ,"127.0.0.1" // ,JSON.toJSONString(toWmsDTO) // ,response // ,true // ); // JSONObject jsonObject = JSON.parseObject(response); // if (jsonObject.getInteger("code").equals(200)) { // GetWmsDto getWmsDto = JSON.parseObject(jsonObject.get("data").toString(), GetWmsDto.class); // taskWrk.setOriginTargetPoint(getWmsDto.getTargetLocationCode()); // taskWrk.setTargetPoint(Utils.getWcsLocNo(getWmsDto.getTargetLocationCode())); // taskWrk.setStartPoint(String.valueOf(inSta.getBackSta())); // if (!taskWrkService.updateById(taskWrk)){ // log.error("保存wms库位号失败"); // } // // }else { // log.error("wms通讯失败,"+jsonObject.get("msg")); // // } // } } else { // 退回 log.error("扫码入库失败,{}入库站因{}异常,托盘已被退回", inSta.getStaNo(), errMsg); // staProtocol.setWorkNo((short)0); // staProtocol.setStaNo(inSta.getStaNo().shortValue()); // MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); // // Thread.sleep(500); staProtocol.setWorkNo((short)9999); staProtocol.setStaNo(inSta.getStaNo().shortValue()); src/main/java/com/zy/asrs/utils/Utils.java
@@ -3,6 +3,7 @@ import com.core.common.Arith; import com.core.common.Cools; import com.core.common.SpringUtils; import com.zy.asrs.entity.LocMast; import com.zy.core.model.CrnSlave; import com.zy.core.properties.SlaveProperties; @@ -384,4 +385,24 @@ String wcsLocNo = getWcsLocNo("01-01-01-01-01"); System.out.println(wcsLocNo); } public static Integer StaNoCrnNo(Integer staNo) { switch (staNo){ case 100: case 101: return 1; case 102: case 103: return 2; case 104: case 105: return 3; case 106: case 107: return 4; default: return 0; } } } src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -155,6 +155,9 @@ basDevp.setWrkNo(workNo.intValue()); basDevp.setAutoing(autoing?"Y":"N"); basDevp.setLoading(loading?"Y":"N"); if (!loading){ basDevp.setStaErr(0); } basDevp.setInEnable(inEnable?"Y":"N"); basDevp.setOutEnable(outEnable?"Y":"N"); basDevp.setLocType1((short) 0); // 高低类型{0:未知,1:低库位,2:高库位} src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -262,7 +262,7 @@ } } OperateResultExOne<byte[]> resultAgvAndPlcOk = siemensS7Net.Read("DB102.0", (short) 30); OperateResultExOne<byte[]> resultAgvAndPlcOk = siemensS7Net.Read("DB132.0", (short) 30); if (resultAgvAndPlcOk.IsSuccess) { for (int i = 0; i < staNoSize; i++) { int sign =(i+2)/2-1; @@ -274,7 +274,7 @@ staProtocol.setSiteId(siteId); station.put(siteId, staProtocol); } staProtocol.setAgvTargetPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlc.Content, sign*6+4)); // 允许取货 staProtocol.setAgvTargetPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlcOk.Content, sign*6+4)); // 允许取货 staProtocol.setAgvTargetPlace((short)0); // 允许放货 continue; } @@ -285,8 +285,18 @@ staProtocol.setSiteId(siteId); station.put(siteId, staProtocol); } staProtocol.setAgvTargetPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlc.Content, sign*6)); // 允许取货 staProtocol.setAgvTargetPlace(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlc.Content, sign*6 + 2)); // 允许放货 try{ staProtocol.setAgvTargetPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlcOk.Content, sign*6)); // 取货完成 if (staProtocol.getAgvTargetPick()!=0){ System.out.println(staProtocol.getAgvTargetPick()); } staProtocol.setAgvTargetPlace(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlcOk.Content, sign*6 + 2)); // 放货完成 if (staProtocol.getAgvTargetPlace()!=0){ System.out.println(staProtocol.getAgvTargetPlace()); } }catch (Exception e){ log.error(""+e); } } } src/main/resources/mapper/BasDevpMapper.xml
@@ -45,6 +45,7 @@ <result column="agv_target_pick" property="agvTargetPick" /> <result column="agv_start_place" property="agvStartPlace" /> <result column="agv_target_place" property="agvTargetPlace" /> <result column="sta_err" property="staErr" /> </resultMap>