src/main/java/com/zy/asrs/controller/OpenController.java
@@ -12,6 +12,7 @@ import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.*; import com.zy.asrs.service.*; import com.zy.asrs.service.impl.BasShuttleServiceImpl; import com.zy.asrs.utils.Utils; import com.zy.common.web.BaseController; import lombok.extern.slf4j.Slf4j; @@ -61,155 +62,8 @@ public static final ArrayList<String> APP_KEY_LIST = new ArrayList<String>() {{ add("ea1f0459efc02a79f046f982767939ae"); }}; //agv任务完成 @PostMapping("/toAgvTaskOver") @AppAuth(memo = "agv任务完成接口") public R getAgvTaskOver(@RequestHeader String appkey, @RequestBody TaskOverParam param, HttpServletRequest request){ auth(appkey, param, request); if (Cools.isEmpty(param)) { return R.parse(BaseRes.PARAM); } if (Cools.isEmpty(param.getWharfCode())){ return R.error("码头[wharfCode]不能为空"); } if (Cools.isEmpty(param.getStatus())){ return R.error("完成标记[status]不能为空"); } openService.getAgvTaskOver(param); return R.ok(); } //创建任务 @PostMapping("/taskCreate") @Transactional public R taskCreate(@RequestHeader String appkey, @RequestBody List<TaskCreateParam> param1, HttpServletRequest request) { auth(appkey, param1, request); 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(); } //查询任务详情 @GetMapping("/queryTask") public R queryTask(@RequestHeader String appkey, @RequestParam String taskNo, HttpServletRequest request) { auth(appkey, taskNo, request); TaskWrk taskWrk = taskWrkService.selectByTaskNo(taskNo); if (taskWrk == null) { return R.error("任务不存在"); } return R.ok().add(taskWrk); } //取放货申请 @PostMapping("/pick/and/place/v1") @AppAuth(memo = "agv取放货申请") public R getAgvPickAndPlaceV1(@RequestHeader String appkey, @RequestBody TaskOverParam param, HttpServletRequest request){ auth(appkey, param, request); if (Cools.isEmpty(param)) { return R.parse(BaseRes.PARAM); } if (Cools.isEmpty(param.getStaNo())){ return R.error("码头[staNo]不能为空"); } if (Cools.isEmpty(param.getType())){ return R.error("类型[type]不能为空"); } return openService.getAgvPickAndPlaceV1(param); } //取放货完成反馈 @PostMapping("/pick/and/place/v2") @AppAuth(memo = "agv取放货完成反馈") public R getAgvPickAndPlaceV2(@RequestHeader String appkey, @RequestBody TaskOverParam param, HttpServletRequest request){ auth(appkey, param, request); if (Cools.isEmpty(param)) { return R.parse(BaseRes.PARAM); } if (Cools.isEmpty(param.getStaNo())){ return R.error("码头[staNo]不能为空"); } if (Cools.isEmpty(param.getType())){ return R.error("类型[type]不能为空"); } return openService.getAgvPickAndPlaceV2(param); } //查询任务指令集合 @GetMapping("/queryTaskCommand") public R queryTaskCommand(@RequestHeader String appkey, @RequestParam String taskNo, HttpServletRequest request) { auth(appkey, taskNo, request); TaskWrk taskWrk = taskWrkService.selectByTaskNo(taskNo); if (taskWrk == null) { return R.error("任务不存在"); } List<CommandInfo> commandInfos = commandInfoService.selectByTaskNo(taskNo); return R.ok().add(commandInfos); } @Autowired private BasShuttleServiceImpl basShuttleService; private void auth(String appkey, Object obj, HttpServletRequest request) { log.info("{}接口被访问;appkey:{};请求数据:{}", request.getServletPath(), appkey, JSON.toJSONString(obj)); @@ -224,12 +78,11 @@ //任务下发接口 @PostMapping("/outboundTaskSend") @Transactional // @Transactional public HashMap<String, Object> outboundTaskSend(@RequestBody HashMap<String,Object> hashMap) { String jsonString = JSON.toJSONString(hashMap.get("TaskList")); List<CarryParam> params= JSONObject.parseArray(jsonString,CarryParam.class); HashMap<String, Object> map = new HashMap<>(); List<WMSAndAGVInterfaceParam> params1 =new ArrayList<>(); for (CarryParam param:params){ if (Cools.isEmpty(param)){ map.put("Code","0"); @@ -245,8 +98,8 @@ return map; } String fusion = Utils.Fusion(param.getOriginalRowNo(), param.getOriginalFloorNo(), param.getOriginalColumnNo()); param.setStartPoint(fusion); LocMast locMast = locMastService.selectByLocNo(param.getStartPoint()); param.setOriginStartPoint(fusion); LocMast locMast = locMastService.selectByLocNo(fusion); if(Cools.isEmpty(locMast)){ map.put("Code","0"); map.put("Msg","初始库位无法找到!"); @@ -259,14 +112,13 @@ //出库任务创建 StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>() .eq("type_no",2) .eq("crn_no",locMast.getCrnNo()) .eq("stn_no",param.getTerminalNo())); if(Cools.isEmpty(staDesc)){ map.put("Code","0"); map.put("Msg","出库路劲不存在!"); return map; } r = openService.taskCreate(new TaskCreateParam(param,staDesc.getCrnNo())); r = openService.taskCreate(param); if(r.get("Code").equals("0")){ return r; } @@ -274,7 +126,7 @@ String fusion1 = Utils.Fusion(param.getGoalRowNo(), param.getGoalFloorNo(), param.getGoalColumnNo()); param.setTerminalNo(fusion1); //移库任务创建 r = openService.taskCreate(new TaskCreateParam(param,locMast.getCrnNo())); r = openService.taskCreate(param); if(r.get("Code").equals("0")){ return r; } @@ -352,22 +204,12 @@ @GetMapping("/deviceStatus") @Transactional public R deviceStatus() { List<CrnStatusParam> crnStatusParams=new ArrayList<>(); List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<>()); for (BasCrnp basCrnp:basCrnps){ CrnStatusParam crnStatusParam=new CrnStatusParam(); crnStatusParam.setCrnNo(basCrnp.getCrnNo()); crnStatusParam.setCrnSts(basCrnp.getCrnSts()); crnStatusParam.setErrorCode(basCrnp.getCrnErr()); BasCrnError error=basCrnErrorService.selectOne(new EntityWrapper<BasCrnError>().eq("error_code",basCrnp.getCrnErr())); if(Cools.isEmpty(error)){ crnStatusParam.setErrorMsg(""); }else { crnStatusParam.setErrorMsg(error.getErrName()); } crnStatusParams.add(crnStatusParam); } return R.ok(crnStatusParams); HashMap<String,Object> map = new HashMap<>(); List<BasShuttle> basShuttle = basShuttleService.selectList(null); List<BasDevp> basDevp = basDevpService.selectList(null); map.put("basShuttle",basShuttle); map.put("basDevp",basDevp); return R.ok(map); } //设备状态查询接口 @@ -381,50 +223,19 @@ return "ok"; } public static <T> List<T> convertListMapToListObject(List<HashMap<String, Object>> listMap, Class<T> clazz) throws Exception { List<T> list = new ArrayList<>(); for (Map<String, Object> map : listMap) { T obj = clazz.getDeclaredConstructor().newInstance(); for (Map.Entry<String, Object> entry : map.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); try { Field field = clazz.getDeclaredField(key); field.setAccessible(true); setFieldValue(obj, field, value); } catch (NoSuchFieldException e) { System.out.println("No such field: " + key + " in class " + clazz.getName()); } } list.add(obj); //rcs和wcs校验入库工作号是否一致 //设备状态查询接口 @PostMapping("/devpdeviceStatusTaskNo") @Transactional public String devpDeviceStatusTaskNo(@RequestBody HashMap staNo) { BasDevp basDevp=basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no",staNo.get("staNo"))); String taskNo=staNo.get("superTaskNo").toString(); if(Cools.isEmpty(basDevp)&&Cools.isEmpty(taskNo)){ return "no"; }else if(!basDevp.getWrkNo().equals(Integer.valueOf(taskNo))){ return "no"; } return list; } private static void setFieldValue(Object obj, Field field, Object value) throws IllegalAccessException { Class<?> fieldType = field.getType(); if (fieldType.isAssignableFrom(value.getClass())) { field.set(obj, value); } else if (fieldType == int.class || fieldType == Integer.class) { field.set(obj, ((Number) value).intValue()); } else if (fieldType == long.class || fieldType == Long.class) { field.set(obj, ((Number) value).longValue()); } else if (fieldType == double.class || fieldType == Double.class) { field.set(obj, ((Number) value).doubleValue()); } else if (fieldType == float.class || fieldType == Float.class) { field.set(obj, ((Number) value).floatValue()); } else if (fieldType == boolean.class || fieldType == Boolean.class) { field.set(obj, (Boolean) value); } else if (fieldType == String.class) { field.set(obj, String.valueOf(value)); } else { System.out.println("Unsupported field type: " + fieldType.getName()); } return "ok"; } } src/main/java/com/zy/asrs/controller/TaskWrkController.java
@@ -61,22 +61,24 @@ @RequestMapping(value = "/taskWrk/list/auth") @ManagerAuth public R list(@RequestParam(defaultValue = "1")Integer curr, @RequestParam(defaultValue = "10")Integer limit, @RequestParam(required = false)String orderByField, @RequestParam(required = false)String orderByType, @RequestParam Map<String, Object> param){ public R list(@RequestParam(defaultValue = "1") Integer curr, @RequestParam(defaultValue = "10") Integer limit, @RequestParam(required = false) String orderByField, @RequestParam(required = false) String orderByType, @RequestParam Map<String, Object> param) { EntityWrapper<TaskWrk> wrapper = new EntityWrapper<>(); excludeTrash(param); convert(param, wrapper); if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} if (!Cools.isEmpty(orderByField)) { wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); } return R.ok(taskWrkService.selectPage(new Page<>(curr, limit), wrapper)); } private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){ for (Map.Entry<String, Object> entry : map.entrySet()){ private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper) { for (Map.Entry<String, Object> entry : map.entrySet()) { String val = String.valueOf(entry.getValue()); if (val.contains(RANGE_TIME_LINK)){ if (val.contains(RANGE_TIME_LINK)) { String[] dates = val.split(RANGE_TIME_LINK); wrapper.ge(entry.getKey(), DateUtils.convert(dates[0])); wrapper.le(entry.getKey(), DateUtils.convert(dates[1])); @@ -93,9 +95,9 @@ return R.ok(); } @RequestMapping(value = "/taskWrk/update/auth") @ManagerAuth public R update(TaskWrk taskWrk){ @RequestMapping(value = "/taskWrk/update/auth") @ManagerAuth public R update(TaskWrk taskWrk) { if (Cools.isEmpty(taskWrk) || null == taskWrk.getTaskNo()) { return R.error(); } @@ -105,7 +107,7 @@ @RequestMapping(value = "/taskWrk/updatePoint/auth") @ManagerAuth public R updatePoint(TaskWrk taskWrk){ public R updatePoint(TaskWrk taskWrk) { if (Cools.isEmpty(taskWrk) || null == taskWrk.getTaskNo()) { return R.error(); } @@ -123,8 +125,8 @@ @RequestMapping(value = "/taskWrk/delete/auth") @ManagerAuth public R delete(@RequestParam(value="ids[]") Long[] ids){ for (Long id : ids){ public R delete(@RequestParam(value = "ids[]") Long[] ids) { for (Long id : ids) { taskWrkService.deleteById(id); } return R.ok(); @@ -132,7 +134,7 @@ @RequestMapping(value = "/taskWrk/export/auth") @ManagerAuth public R export(@RequestBody JSONObject param){ public R export(@RequestBody JSONObject param) { EntityWrapper<TaskWrk> wrapper = new EntityWrapper<>(); List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class); Map<String, Object> map = excludeTrash(param.getJSONObject("taskWrk")); @@ -148,7 +150,7 @@ wrapper.like("id", condition); Page<TaskWrk> page = taskWrkService.selectPage(new Page<>(0, 10), wrapper); List<Map<String, Object>> result = new ArrayList<>(); for (TaskWrk taskWrk : page.getRecords()){ for (TaskWrk taskWrk : page.getRecords()) { Map<String, Object> map = new HashMap<>(); map.put("id", taskWrk.getTaskNo()); map.put("value", taskWrk.getTaskNo()); @@ -161,7 +163,7 @@ @ManagerAuth public R query(@RequestBody JSONObject param) { Wrapper<TaskWrk> wrapper = new EntityWrapper<TaskWrk>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val")); if (null != taskWrkService.selectOne(wrapper)){ if (null != taskWrkService.selectOne(wrapper)) { return R.parse(BaseRes.REPEAT).add(getComment(TaskWrk.class, String.valueOf(param.get("key")))); } return R.ok(); @@ -178,72 +180,44 @@ @ManagerAuth(memo = "手动完成任务") public R complete(@RequestParam String taskNo) { TaskWrk taskWrk = taskWrkService.selectByTaskNo(taskNo); if (Cools.isEmpty(taskWrk) || taskWrk.getStatus()>=3){ return R.error("已完结或已取消") ; if (Cools.isEmpty(taskWrk) || taskWrk.getStatus() >= 3) { return R.error("已完结或已取消"); } LocMast locMast=new LocMast(); if(taskWrk.getIoType()==1){//入库任务完成库位为F locMast=locMastService.selectByLocNo(taskWrk.getTargetPoint()); if(Cools.isEmpty(locMast)){ R.error("没有找到该库位") ; LocMast locMast = new LocMast(); if (taskWrk.getIoType() == 1) {//入库任务完成库位为F locMast = locMastService.selectByLocNo(taskWrk.getTargetPoint()); if (Cools.isEmpty(locMast)) { R.error("没有找到该库位"); } locMast.setLocSts("F"); locMast.setModiTime(new Date()); locMast.setBarcode(taskWrk.getBarcode()); }else if(taskWrk.getIoType()==2){//出库任务完成库位为O locMast=locMastService.selectByLocNo(taskWrk.getStartPoint()); if(Cools.isEmpty(locMast)){ R.error("没有找到该库位") ; } else if (taskWrk.getIoType() == 2) {//出库任务完成库位为O locMast = locMastService.selectByLocNo(taskWrk.getStartPoint()); if (Cools.isEmpty(locMast)) { R.error("没有找到该库位"); } locMast.setLocSts("O"); locMast.setModiTime(new Date()); }else if(taskWrk.getIoType()==3){ locMast=locMastService.selectByLocNo(taskWrk.getStartPoint()); if(Cools.isEmpty(locMast)){ R.error("没有找到该库位") ; } else if (taskWrk.getIoType() == 3) { locMast = locMastService.selectByLocNo(taskWrk.getStartPoint()); if (Cools.isEmpty(locMast)) { R.error("没有找到该库位"); } locMast.setLocSts("O"); locMast.setModiTime(new Date()); locMastService.updateById(locMast); locMast=locMastService.selectByLocNo(taskWrk.getTargetPoint()); if(Cools.isEmpty(locMast)){ R.error("没有找到该库位") ; locMast = locMastService.selectByLocNo(taskWrk.getTargetPoint()); if (Cools.isEmpty(locMast)) { R.error("没有找到该库位"); } locMast.setLocSts("F"); locMast.setModiTime(new Date()); locMast.setBarcode(taskWrk.getBarcode()); } String response=""; try{ HashMap<String, Object> headParam = new HashMap<>(); headParam.put("TaskNo",taskWrk.getTaskNo()); headParam.put("Result",1); // headParam.put("reportTime",new Date()); log.info("wcs手动完成任务上报wms={}", taskWrk); response = new HttpHandler.Builder() // .setHeaders(headParam) .setUri(wmsUrl) .setPath(TaskExecCallback) .setJson(JSON.toJSONString(headParam)) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); apiLogService.save("wcs手动完成任务上报wms" ,wmsUrl+TaskExecCallback ,null ,"127.0.0.1" ,JSON.toJSONString(headParam) ,response ,true ); }catch (Exception e){ log.error("wcs手动完成任务上报wms失{},返回值={}", taskWrk,response); // throw new CoolException(e); } locMastService.updateById(locMast); taskWrk.setStatus(7);//手动完成任务 taskWrk.setStatus(6);//手动完成任务 taskWrk.setModiTime(new Date()); taskWrkService.updateById(taskWrk); return R.ok(); @@ -253,20 +227,20 @@ @ManagerAuth(memo = "重新给堆垛机下发任务") public R returnWorkingCondition(@RequestParam String taskNo) { TaskWrk taskWrk = taskWrkService.selectByTaskNo(taskNo); if (!Cools.isEmpty(taskWrk) && taskWrk.getWrkSts()==12){ if (!Cools.isEmpty(taskWrk) && taskWrk.getWrkSts() == 12) { taskWrk.setWrkSts(11); if(!taskWrkService.updateById(taskWrk)){ if (!taskWrkService.updateById(taskWrk)) { return R.error("更新任务状态失败"); } return R.ok(); } else if (!Cools.isEmpty(taskWrk) && taskWrk.getWrkSts()==3) { } else if (!Cools.isEmpty(taskWrk) && taskWrk.getWrkSts() == 3) { taskWrk.setWrkSts(2); taskWrkService.updateById(taskWrk); if(!taskWrkService.updateById(taskWrk)){ if (!taskWrkService.updateById(taskWrk)) { return R.error("更新任务状态失败"); } return R.ok(); }else{ } else { return R.error("任务状态不对无法重新给堆垛机下发任务"); } @@ -285,39 +259,12 @@ Date now = new Date(); taskWrk.setStatus(TaskStatusType.CANCEL.id); taskWrk.setModiTime(now);//操作时间 try{ try { taskWrk.setModiUser(getUserId());//操作员 }catch (Exception e){ } catch (Exception e) { taskWrk.setModiUser(9999L);//操作员 } String response=""; try{ HashMap<String, Object> headParam = new HashMap<>(); headParam.put("TaskNo",taskWrk.getTaskNo()); headParam.put("Result",0); // headParam.put("reportTime",new Date()); log.info("wcs手动取消任务上报wm={}", taskWrk); response = new HttpHandler.Builder() // .setHeaders(headParam) .setUri(wmsUrl) .setPath(TaskExecCallback) .setJson(JSON.toJSONString(headParam)) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); apiLogService.save("wcs手动取消任务上报wms" ,wmsUrl+TaskExecCallback ,null ,"127.0.0.1" ,JSON.toJSONString(headParam) ,response ,true ); }catch (Exception e){ log.error("wcs手动取消任务上报wms失败={},返回值={}", taskWrk,response); // throw new CoolException(e); } taskWrk.setStatus(4);//手动取消 taskWrk.setCompleteTime(now);//完结时间 taskWrkService.updateById(taskWrk); return R.ok(); @@ -338,8 +285,8 @@ return R.ok(); } public static String getTaskType(Integer paramIoType){ switch (paramIoType){ public static String getTaskType(Integer paramIoType) { switch (paramIoType) { case 1: return "RK"; case 2: @@ -354,32 +301,40 @@ @PostMapping(value = "/taskWrk/state") // @ManagerAuth(memo = "接收RCS任务状态") public R taskWrkState(@RequestBody NotifyDto notifyDto) { R r = R.ok(); log.info("接收RCS任务状态={}", notifyDto); TaskWrk taskWrk = taskWrkService.selectByTaskNo(notifyDto.getSuperTaskNo());//wms任务号 if (taskWrk == null) { return R.error("没有找到该任务={"+notifyDto+"}"); return R.error("没有找到该任务={" + notifyDto + "}"); } Date now = new Date(); if(notifyDto.getMsgType().equals("task_complete")){ /** * 任务完成 */ switch (notifyDto.getMsgType()) { case "task_complete": r = taskWrkService.taskComplete(taskWrk); break; } if(notifyDto.getMsgType().equals("task_complete")&&taskWrk.getIoType()==3){ taskWrk.setWrkSts(7);//更新数据完成,直接转历史档 //更新源库位状态为空库位 LocMast locMast = locMastService.selectByLocNo(taskWrk.getStartPoint()); locMast.setLocSts("O"); locMastService.updateById(locMast); //更新目标库状态为在库 LocMast locMast2 = locMastService.selectByLocNo(taskWrk.getTargetPoint()); locMast2.setLocSts("F"); locMastService.updateById(locMast2); taskWrk.setModiTime(now);//操作时间 taskWrk.setModiUser(9998L);//操作员 taskWrkService.updateById(taskWrk); } return R.ok(); // if (notifyDto.getMsgType().equals("task_complete") && taskWrk.getIoType() == 3) {//移库 // taskWrk.setWrkSts(7);//更新数据完成,直接转历史档 // // //更新源库位状态为空库位 // LocMast locMast = locMastService.selectByLocNo(taskWrk.getStartPoint()); // locMast.setLocSts("O"); // locMastService.updateById(locMast); // // //更新目标库状态为在库 // LocMast locMast2 = locMastService.selectByLocNo(taskWrk.getTargetPoint()); // locMast2.setLocSts("F"); // locMastService.updateById(locMast2); // taskWrk.setModiTime(now);//操作时间 // taskWrk.setModiUser(9998L);//操作员 // taskWrkService.updateById(taskWrk); // } return r; } } src/main/java/com/zy/asrs/entity/BasShuttle.java
@@ -31,9 +31,9 @@ private Integer shuttleNo; /** * 状态 1: 正常 0: 禁用 * 状态 0: 手动 1: 正常 2.充电中 */ @ApiModelProperty(value= "状态 1: 正常 0: 禁用 ") @ApiModelProperty(value= "状态 0: 手动 1: 正常 2.充电中 ") private Integer status; /** @@ -42,6 +42,20 @@ @ApiModelProperty(value= "当前小车状态(内部自我维护)") @TableField("shuttle_status") private Integer shuttleStatus; /** * 小车所在层 */ @ApiModelProperty(value= "小车所在层") @TableField("charge_line") private Integer chargeLine; /** * 是否充电状态 */ @ApiModelProperty(value= "是否充电状态") @TableField("auto_charge") private Integer autoCharge; /** * 任务号 @@ -56,20 +70,6 @@ @ApiModelProperty(value= "暂存库位") @TableField("idle_loc") private String idleLoc; /** * 自动充电 */ @ApiModelProperty(value= "自动充电") @TableField("auto_charge") private Integer autoCharge; /** * 电量线 */ @ApiModelProperty(value= "电量线") @TableField("charge_line") private Integer chargeLine; /** * 添加人员 @@ -135,6 +135,13 @@ @TableField("disable_lev") private String disableLev; /** * 小车异常码 */ @ApiModelProperty(value= "小车异常码") @TableField("errorCode") private Integer errorCode; public BasShuttle() {} public BasShuttle(Integer shuttleNo, Integer status, Integer shuttleStatus, Integer wrkNo, String idleLoc, Integer autoCharge, Integer chargeLine, Long createBy, Date createTime, Long updateBy, Date updateTime, String memo, Boolean pakMk, String deviceStatus) { src/main/java/com/zy/asrs/entity/TaskWrk.java
@@ -48,9 +48,9 @@ private String taskNo; /** * 任务状态 1: 接收 2: 派发 3: 完结 4: 取消 * 任务状态 1: 接收 2: 派发 4: 取消任务上报wms 5.取消任务 6: 完结任务上报wms 7.完结 */ @ApiModelProperty(value= "任务状态 1: 接收 2: 派发 4: 取消 5: 完结 ") @ApiModelProperty(value= "任务状态 1: 接收 2: 派发 4: 取消任务上报wms 5.取消任务 6: 完结任务上报wms 7.完结 ") private Integer status; /** @@ -87,14 +87,14 @@ /** * 起点 */ @ApiModelProperty(value= "起点") @ApiModelProperty(value= "源站点") @TableField("start_point") private String startPoint; /** * 终点 * 目标站点 */ @ApiModelProperty(value= "终点") @ApiModelProperty(value= "目标站点") @TableField("target_point") private String targetPoint; @@ -182,11 +182,11 @@ @TableField("transfer_mark") private Integer transferMark; @ApiModelProperty(value = "原始起点") @ApiModelProperty(value = "源库位") @TableField("origin_start_point") private String originStartPoint; @ApiModelProperty(value = "原始终点") @ApiModelProperty(value = "目标库位") @TableField("origin_target_point") private String originTargetPoint; src/main/java/com/zy/asrs/entity/param/CarryParam.java
@@ -16,6 +16,12 @@ //容器编码 private String BoxNo; //源库位 private String originStartPoint; //目标库位 private String originTargetPoint; //源货位排编号 private Integer OriginalRowNo; @@ -34,7 +40,7 @@ //目标库位列编号 private Integer GoalColumnNo; //起点 //源站点 private String startPoint; //终端编号(输送线上某一点位) src/main/java/com/zy/asrs/entity/param/GetShuttleStatusParam.java
New file @@ -0,0 +1,73 @@ package com.zy.asrs.entity.param; import lombok.Data; import java.util.List; @Data public class GetShuttleStatusParam { /** * 小车号 */ private Integer shuttleNo; /** * 小车模式 0:手动 1:自动 */ private Integer mode; /** * 小车状态 * <p> * IDLE(1, "空闲"), * WORKING(2, "作业中"), * WAITING(3, "等待确认"), * CHARGING(4, "充电中"), * CHARGING_WAITING(5, "充电任务等待确认"), * FIXING(6, "故障修复中"), * OFFLINE(7, "离线"), */ private Integer protocolStatus; /** * 当前二维码 * 0为空 */ private String currentCode; /** * 是否为充电状态 */ private Boolean hasCharge; private Integer errorCode; public String getProtocolStatus$() { String protocolStatus$ = ""; switch (this.protocolStatus) { case 1: protocolStatus$ = "空闲"; break; case 2: protocolStatus$ = "作业中"; break; case 3: protocolStatus$ = "等待确认"; break; case 4: protocolStatus$ = "充电中"; break; case 5: protocolStatus$ = "充电任务等待确认"; break; case 6: protocolStatus$ = "故障修复中"; break; case 7: protocolStatus$ = "离线"; break; } return protocolStatus$; } } src/main/java/com/zy/asrs/entity/param/StorageEscalationParam.java
@@ -5,6 +5,7 @@ @Data public class StorageEscalationParam { private Integer taskNo; //托盘码 private String boxNo; //执行状态 0:成功 1:失败 src/main/java/com/zy/asrs/service/OpenService.java
@@ -1,6 +1,7 @@ package com.zy.asrs.service; import com.core.common.R; import com.zy.asrs.entity.param.CarryParam; import com.zy.asrs.entity.param.TaskOverParam; import com.zy.asrs.entity.param.WMSAndAGVInterfaceParam; import com.zy.asrs.entity.param.TaskCreateParam; @@ -11,7 +12,7 @@ public interface OpenService { //创建任务 HashMap<String,Object> taskCreate(TaskCreateParam param); HashMap<String,Object> taskCreate(CarryParam param); R AgvToWCSToWms(WMSAndAGVInterfaceParam param) throws IOException; src/main/java/com/zy/asrs/service/TaskWrkService.java
@@ -1,5 +1,6 @@ package com.zy.asrs.service; import com.core.common.R; import com.zy.asrs.entity.TaskWrk; import com.baomidou.mybatisplus.service.IService; @@ -30,4 +31,7 @@ int saveToHistory(String taskNo);//将任务转历史日志 //RCS上报任务完成,对完成任务进行处理 R taskComplete(TaskWrk taskWrk); } src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -22,6 +22,7 @@ import com.zy.asrs.utils.Utils; import com.zy.common.service.CommonService; import com.zy.common.utils.HttpHandler; import com.zy.common.utils.RedisUtil; import com.zy.core.CrnThread; import com.zy.core.DevpThread; import com.zy.core.cache.MessageQueue; @@ -103,15 +104,21 @@ private String TaskExecCallback; @Value("${wms.taskStatusFeedbackPath}") private String taskStatusFeedbackPath; @Value("${wms.returnWarehouse}") private String returnWarehouse; @Value("${wcs.urlWcs}") private String wcsUrl; @Value("${wcs.inboundTaskApplyPathWcs}") private String wcsInboundTaskApplyPath; @Value("${wcs.outboundTaskRequest}") private String outboundTaskRequest; @Autowired private CrnController crnController; @Autowired private SiteController siteController; @Autowired private RedisUtil redisUtil; public synchronized void generateStoreWrkFile1() throws IOException, InterruptedException { @@ -134,7 +141,7 @@ // 判断是否满足入库条件 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && !staProtocol.isEmptyMk() && workNo >= 9790 && !staProtocol.isEmptyMk() && workNo >= 9998 && staProtocol.isPakMk()) { // 获取条码扫描仪信息 BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode()); @@ -145,17 +152,17 @@ if (BoxNo.equals("00000000")) { storageEscalationParam.setWCSStatus(1); storageEscalationParam.setWCSErrorMessage("没有扫到码"); BasDevp basDevp= basDevpService.selectOne(new EntityWrapper<BasDevp>() .eq("dev_no",staProtocol.getSiteId())); if(Cools.isEmpty(basDevp)){ log.error("扫码失败并且没有找到该站点---"+staProtocol.getSiteId()); }else{ BasDevp basDevp = basDevpService.selectOne(new EntityWrapper<BasDevp>() .eq("dev_no", staProtocol.getSiteId())); if (Cools.isEmpty(basDevp)) { log.error("扫码失败并且没有找到该站点---" + staProtocol.getSiteId()); } else { basDevp.setStaErr(1);//没有扫到码 basDevp.setStaErrMsg("没有扫到码!"); basDevpService.updateById(basDevp); } continue; }else{ } else { TaskWrk taskWrk1 = taskWrkService.selectOne(new EntityWrapper<TaskWrk>().eq("barcode", BoxNo)); if (!Cools.isEmpty(taskWrk1)) { log.info("托盘码:" + BoxNo + "任务档存在"); @@ -185,24 +192,26 @@ .doPost(); JSONObject jsonObject = JSON.parseObject(response); if (!Cools.isEmpty(response) && !Cools.isEmpty(jsonObject.get("ReturnStatus")) && jsonObject.get("ReturnStatus").equals(0) && !Cools.isEmpty(jsonObject.get("Result").toString())) { Result result = JSON.parseObject(jsonObject.get("Result").toString(), Result.class); if (!Cools.isEmpty(response) && !Cools.isEmpty(jsonObject.get("returnStatus")) && jsonObject.get("returnStatus").equals(0) && !Cools.isEmpty(jsonObject.get("results").toString())) { Result result = JSON.parseObject(jsonObject.get("results").toString(), Result.class); // 创新一个入库工作档 TaskWrk taskWrk = taskWrkService.selectByTaskNo(result.getTaskNo()+""); TaskWrk taskWrk = taskWrkService.selectByTaskNo(result.getTaskNo() + ""); if (Cools.isEmpty(taskWrk)) { taskWrk = createTask1(result, BoxNo,staProtocol.getSiteId()); taskWrk = createTask1(result, BoxNo, staProtocol.getSiteId()); if (Cools.isEmpty(taskWrk)) { log.error("库位异常,库位号:={}", taskWrk.getOriginTargetPoint()); } else { taskWrkService.insert(taskWrk); StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>() .eq("crn_no", taskWrk.getCrnNo()).eq("type_no", 1).eq("stn_no", staProtocol.getSiteId())); staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue()); staProtocol.setStaNo(staDesc.getCrnStn().shortValue()); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); HashMap<String, Object> hashMap = new HashMap<>(); hashMap.put("TaskNo", taskWrk.getTaskNo()); Boolean bool = false; staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue()); staProtocol.setStaNo((short) 0); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); try { //开始上报,任务开始时,WCS回调WMS response = new HttpHandler.Builder() @@ -212,9 +221,139 @@ .build() .doPost(); JSONObject jsonObject1 = JSON.parseObject(response); if (jsonObject1.get("ReturnStatus").equals(0)) { bool = true; } } catch (Exception e) { } finally { apiLogService.save("wcs开始入库任务上报wms" , wmsUrl + TaskExecCallback , null , "127.0.0.1" , JSON.toJSONString(hashMap) , response , bool ); } } } } } 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); } } finally { apiLogService.save("wms请求入库货位接口" , wmsUrl + inboundTaskApplyPath , null , "127.0.0.1" , JSON.toJSONString(storageEscalationParam) , response , success ); } log.info("入库请求参数=" + JSON.toJSONString(BoxNo)); log.info("入库请求返回参数=" + JSON.toJSONString(response)); } } } } catch (Exception e) { log.error("generateStoreWrkFile e", e); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } } public synchronized void EmptyPlates() throws IOException, InterruptedException { try { // 根据输送线plc遍历 for (DevpSlave devp : slaveProperties.getDevp()) { // 遍历入库口 for (DevpSlave.Sta inSta : devp.getInSta()) { StorageEscalationParam storageEscalationParam = new StorageEscalationParam(); // 获取入库站信息 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); if (staProtocol == null) { continue; } else { staProtocol = staProtocol.clone(); } Short workNo = staProtocol.getWorkNo(); Short stano = staProtocol.getStaNo(); // 判断是否满足入库条件 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isEmptyMk() && workNo ==9999 && staProtocol.isPakMk()) { // 获取条码扫描仪信息 BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode()); if (barcodeThread == null) { continue; } String BoxNo = barcodeThread.getBarcode(); log.info("组托入库={}", storageEscalationParam); storageEscalationParam.setBoxNo(BoxNo); storageEscalationParam.setWcsIoType(2);//空板 storageEscalationParam.setWcsSourceStaNo(staProtocol.getSiteId()); String response = ""; Boolean success = false; try { response = new HttpHandler.Builder() .setUri(wmsUrl) .setPath(inboundTaskApplyPath) .setJson(JSON.toJSONString(storageEscalationParam)) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); if (!Cools.isEmpty(response) && !Cools.isEmpty(jsonObject.get("returnStatus")) && jsonObject.get("returnStatus").equals(0) && !Cools.isEmpty(jsonObject.get("results").toString())) { Result result = JSON.parseObject(jsonObject.get("results").toString(), Result.class); // 创新一个入库工作档 TaskWrk taskWrk = taskWrkService.selectByTaskNo(result.getTaskNo() + ""); if (Cools.isEmpty(taskWrk)) { taskWrk = createTask1(result, BoxNo, staProtocol.getSiteId()); if (Cools.isEmpty(taskWrk)) { log.error("库位异常,库位号:={}", taskWrk.getOriginTargetPoint()); } else { devpThread.setPakMk(staProtocol.getSiteId(), false); taskWrkService.insert(taskWrk); StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>() .eq("crn_no", taskWrk.getCrnNo()).eq("type_no", 1).eq("stn_no", staProtocol.getSiteId())); HashMap<String, Object> hashMap = new HashMap<>(); hashMap.put("TaskNo", taskWrk.getTaskNo()); Boolean bool = false; staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue()); staProtocol.setStaNo((short) 0); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); try { //开始上报,任务开始时,WCS回调WMS response = new HttpHandler.Builder() .setUri(wmsUrl) .setPath(taskStatusFeedbackPath) .setJson(JSON.toJSONString(hashMap)) .build() .doPost(); JSONObject jsonObject1 = JSON.parseObject(response); if (jsonObject1.get("ReturnStatus").equals(0)) { bool = true; } } catch (Exception e) { @@ -272,55 +411,56 @@ * 堆垛机站出库到出库站 */ public synchronized void crnStnToOutStn() { for (CrnSlave crnSlave : slaveProperties.getCrn()) { // 遍历堆垛机出库站 for (CrnSlave.CrnStn crnStn : crnSlave.getCrnOutStn()) { List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("crn_no", crnSlave.getId()).eq("crn_stn", crnStn.getStaNo())); for (StaDesc staDesc : staDescs) { try { // 获取堆垛机出库站信息 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()); if (staProtocol == null) { continue; } else { staProtocol = staProtocol.clone(); } if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == 0)) { // 查询工作档 TaskWrk taskWrk = taskWrkMapper.selectCrnStaWorking(crnSlave.getId(), staDesc.getStnNo().toString()); if (taskWrk == null) { continue; } log.info("下发输送线任务:taskWrk:" + JSON.toJSONString(taskWrk)); // R r = siteController.siteDetlUpdate(Integer.valueOf(taskWrk.getTargetPoint()), taskWrk.getWrkNo().shortValue(), (short) 0, "Y", false, false); staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue()); staProtocol.setStaNo(staDesc.getStnNo().shortValue()); boolean offer = false; try { offer = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol)); } catch (Exception e) { log.error("下发输送线任务失败:异常:" + e); log.error("下发输送线任务失败:异常:offer:" + offer); } // JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(r)); if (offer) { log.info("下发输送线任务成功:taskWrk:" + JSON.toJSONString(taskWrk)); taskWrk.setStatus(5); taskWrk.setWrkSts(16); taskWrkService.updateById(taskWrk); } else { log.error("下发输送线任务失败:taskWrk:" + JSON.toJSONString(taskWrk)); // log.error("下发输送线任务失败:异常信息:"+JSON.toJSONString(r)); } } } catch (Exception e) { log.error("出库到出库站异常:异常信息:" + e); // 根据输送线plc遍历 for (DevpSlave devp : slaveProperties.getDevp()) { // 遍历出库口 for (DevpSlave.Sta outSta : devp.getOutSta()) { try { // 获取堆垛机出库站信息 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); StaProtocol staProtocol = devpThread.getStation().get(outSta.getStaNo()); if (staProtocol == null) { continue; } else { staProtocol = staProtocol.clone(); } } if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() == 0) { // 查询工作档 TaskWrk taskWrk = taskWrkService.selectOne(new EntityWrapper<TaskWrk>() .eq("target_point", staProtocol.getSiteId()) .eq("wrk_sts", 15)); if (taskWrk == null) { continue; } log.info("下发输送线任务:taskWrk:" + JSON.toJSONString(taskWrk)); // R r = siteController.siteDetlUpdate(Integer.valueOf(taskWrk.getTargetPoint()), taskWrk.getWrkNo().shortValue(), (short) 0, "Y", false, false); staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue()); staProtocol.setStaNo((short) 0); boolean offer = false; try { offer = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol)); } catch (Exception e) { log.error("下发输送线任务失败:异常:" + e); log.error("下发输送线任务失败:异常:offer:" + offer); } // JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(r)); if (offer) { log.info("下发输送线任务成功:taskWrk:" + JSON.toJSONString(taskWrk)); // taskWrk.setStatus(5); taskWrk.setWrkSts(16); taskWrkService.updateById(taskWrk); } else { log.error("下发输送线任务失败:taskWrk:" + JSON.toJSONString(taskWrk)); // log.error("下发输送线任务失败:异常信息:"+JSON.toJSONString(r)); } } } catch (Exception e) { log.error("出库到出库站异常:异常信息:" + e); } } } } @@ -328,89 +468,82 @@ * 入出库 ===>> 调用RCS进行入出库 */ public synchronized void crnIoExecute() throws IOException { for (CrnSlave crn : slaveProperties.getCrn()) { this.crnStnToLoc(crn); // 入库 this.locToCrnStn(crn); // 出库 // 库位移转 this.crnStnToLoc(); // 入库 this.locToCrnStn(); // 出库 // 库位移转 // this.locToLoc(crn, crnProtocol); } } /** * 入库 ===>> 堆垛机站到库位 */ public synchronized void crnStnToLoc(CrnSlave slave) throws IOException { for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) { List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("crn_no", slave.getId()).eq("crn_stn", crnStn.getStaNo())); for (StaDesc staDesc : staDescs) { boolean flag = false; // 获取堆垛机入库站信息 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()); public synchronized void crnStnToLoc() throws IOException { // 根据输送线plc遍历 for (DevpSlave devp : slaveProperties.getDevp()) { // 遍历入库口 for (DevpSlave.Sta inSta : devp.getInSta()) { StorageEscalationParam storageEscalationParam = new StorageEscalationParam(); // 获取入库站信息 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); if (staProtocol == null) { continue; } else { staProtocol = staProtocol.clone(); } // 查询站点详细信息 BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo()); BasDevp staDetl = basDevpService.selectById(staProtocol.getSiteId()); if (staDetl == null) { log.error("入库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", crnStn.getStaNo()); log.error("入库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", staProtocol.getSiteId()); continue; } if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable() if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() < 9990 && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) { flag = true; } if (!flag) { continue; } // 获取工作状态为2(设备上走)的入库工作档 TaskWrk taskWrk = taskWrkMapper.selectPakIn(slave.getId(), staProtocol.getWorkNo().intValue(), staDesc.getStnNo().toString()); if (null == taskWrk) { continue; } String mbz = taskWrk.getTargetPoint().substring(5); HashMap<String, Object> hashMap = new HashMap<>(); hashMap.put("taskNo", taskWrk.getTaskNo());//wms任务号 hashMap.put("sourceStaNo", staDetl.getDevNo());//源站点 hashMap.put("staNo", Integer.parseInt(mbz) + "");//目标站 hashMap.put("locNo", taskWrk.getTargetPoint());//目标库位 String response = ""; Boolean bool = false; try { //开始上报,出库任务开始时,WCS回调WMS response = new HttpHandler.Builder() .setUri(wcsUrl) .setPath(wcsInboundTaskApplyPath) .setJson(JSON.toJSONString(hashMap)) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); if (jsonObject.get("code").equals(200)) { bool = true; // taskWrk.setStatus(TaskStatusType.DISTRIBUTE.id);//派发状态 taskWrk.setAssignTime(new Date());//派发时间 taskWrk.setWrkSts(3);//工作状态 3.成功下发入库任务给RCS taskWrk.setCrnNo(staDesc.getCrnNo());//堆垛机号 taskWrk.setModiTime(new Date()); taskWrk.setModiUser(9988L); // 获取工作状态为2(设备上走)的入库工作档 TaskWrk taskWrk = taskWrkMapper.selectPakIn(null, staProtocol.getWorkNo().intValue(), staProtocol.getSiteId().toString()); if (null == taskWrk) { continue; } } catch (Exception e) { } finally { apiLogService.save("wcs派发入库任务给RCS" , wcsUrl + wcsInboundTaskApplyPath , null , "127.0.0.1" , JSON.toJSONString(hashMap) , response , bool ); HashMap<String, Object> hashMap = new HashMap<>(); hashMap.put("taskNo", taskWrk.getTaskNo());//wms任务号 hashMap.put("sourceStaNo", staDetl.getDevNo());//源站点 hashMap.put("staNo", taskWrk.getTargetPoint());//目标站 hashMap.put("locNo", taskWrk.getOriginTargetPoint());//目标库位 String response = ""; Boolean bool = false; try { //开始上报,出库任务开始时,WCS回调WMS response = new HttpHandler.Builder() .setUri(wcsUrl) .setPath(wcsInboundTaskApplyPath) .setJson(JSON.toJSONString(hashMap)) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); if (jsonObject.getInteger("code").equals(200)) { bool = true; // taskWrk.setStatus(TaskStatusType.DISTRIBUTE.id);//派发状态 taskWrk.setAssignTime(new Date());//派发时间 taskWrk.setWrkSts(3);//工作状态 3.成功下发入库任务给RCS taskWrk.setModiTime(new Date()); taskWrk.setModiUser(9988L); } } catch (Exception e) { } finally { apiLogService.save("wcs派发入库任务给RCS" , wcsUrl + wcsInboundTaskApplyPath , null , "127.0.0.1" , JSON.toJSONString(hashMap) , response , bool ); } } } } } @@ -419,16 +552,24 @@ * 出库 ===>> 库位到堆垛机站 * 2022-06-09 TQS修改,查询工作档LIST,遍历下发,防止第一个任务堵塞出库 */ public synchronized void locToCrnStn(CrnSlave slave) { List<TaskWrk> taskWrksInitial = taskWrkMapper.selectPakOut(slave.getId(), null); if (taskWrksInitial.size() == 0) { return; } for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) { List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("crn_no", slave.getId()).eq("crn_stn", crnStn.getStaNo())); for (StaDesc staDesc : staDescs) { // 获取工作状态为11(生成出库ID)的出库工作档 List<TaskWrk> taskWrks = taskWrkMapper.selectPakOut(slave.getId(), staDesc.getStnNo().toString()); public synchronized void locToCrnStn() { // 根据输送线plc遍历 for (DevpSlave devp : slaveProperties.getDevp()) { // 遍历入库口 for (DevpSlave.Sta outSta : devp.getOutSta()) { StorageEscalationParam storageEscalationParam = new StorageEscalationParam(); // 获取入库站信息 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); StaProtocol staProtocol = devpThread.getStation().get(outSta.getStaNo()); if (staProtocol == null) { continue; } else { staProtocol = staProtocol.clone(); } List<TaskWrk> taskWrks = taskWrkMapper.selectPakOut(1, staProtocol.getSiteId().toString()); if (taskWrks.size() == 0) { continue; } for (TaskWrk taskWrk : taskWrks) { if (taskWrk == null) { continue; @@ -444,19 +585,10 @@ //预留 // 获取堆垛机出库站信息 SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()); if (staProtocol == null) { break; } else { staProtocol = staProtocol.clone(); } // 查询站点详细信息 BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo()); BasDevp staDetl = basDevpService.selectById(staProtocol.getSiteId()); if (staDetl == null) { log.error("出库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", crnStn.getStaNo()); log.error("出库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", staProtocol.getSiteId()); break; } @@ -464,44 +596,35 @@ if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) { // 命令下发区 -------------------------------------------------------------------------- // 已经存在吊车执行任务时,则过滤 if (taskWrkMapper.selectCrnWorking(slave.getId()) != null) { break; } String mbz = taskWrk.getTargetPoint().substring(5); HashMap<String, Object> hashMap = new HashMap<>(); hashMap.put("taskNo", taskWrk.getTaskNo());//wms任务号 hashMap.put("sourceStaNo", staDetl.getDevNo());//源站点 hashMap.put("staNo", Integer.parseInt(mbz) + "");//目标站 hashMap.put("locNo", taskWrk.getTargetPoint());//目标库位 hashMap.put("sourceLocNo", taskWrk.getOriginStartPoint());//源库位 hashMap.put("staNo", taskWrk.getTargetPoint());//目标站 String response = ""; Boolean bool = false; try { //开始上报,出库任务开始时,WCS回调WMS response = new HttpHandler.Builder() .setUri(wcsUrl) .setPath(wcsInboundTaskApplyPath) .setPath(outboundTaskRequest) .setJson(JSON.toJSONString(hashMap)) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); if (jsonObject.get("code").equals(200)) { if (jsonObject.getInteger("code").equals(200)) { bool = true; // taskWrk.setStatus(TaskStatusType.DISTRIBUTE.id);//派发状态 taskWrk.setAssignTime(new Date());//派发时间 taskWrk.setWrkSts(3);//工作状态 3.成功下发入库任务给RCS taskWrk.setCrnNo(staDesc.getCrnNo());//堆垛机号 taskWrk.setWrkSts(12);//工作状态 12.成功下发出库任务 taskWrk.setModiTime(new Date()); taskWrk.setModiUser(9988L); taskWrkService.updateById(taskWrk); } } catch (Exception e) { } finally { apiLogService.save("wcs派发出库任务给RCS" , wcsUrl + wcsInboundTaskApplyPath , wcsUrl + outboundTaskRequest , null , "127.0.0.1" , JSON.toJSONString(hashMap) @@ -509,47 +632,6 @@ , bool ); } try { // 修改工作档状态 11.生成出库ID => 12.吊车出库中 Date now = new Date(); taskWrk.setWrkSts(12); taskWrk.setModiTime(now); if (taskWrkMapper.updateById(taskWrk) == 0) { log.error("修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", taskWrk.getWrkNo()); } } catch (Exception e) { log.error("修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", taskWrk.getWrkNo()); log.error("修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,异常:" + e); } // try { // HashMap<String, Object> headParam = new HashMap<>(); // headParam.put("taskNo", taskWrk.getTaskNo()); // headParam.put("status", taskWrk.getStatus()); // headParam.put("ioType", taskWrk.getIoType()); // headParam.put("barcode", taskWrk.getBarcode()); // String response; // response = new HttpHandler.Builder() // // .setHeaders(headParam) // .setUri(wmsUrl) // .setPath(taskStatusFeedbackPath) // .setJson(JSON.toJSONString(headParam)) // .build() // .doPost(); // JSONObject jsonObject = JSON.parseObject(response); // apiLogService.save("wcs派发出库任务上报wms" // , wmsUrl + taskStatusFeedbackPath // , null // , "127.0.0.1" // , JSON.toJSONString(headParam) // , response // , true // ); // } catch (Exception e) { // log.error("wcs派发出库任务上报wms失败", JSON.toJSONString(taskWrk)); //// throw new CoolException("wcs派发入库任务上报wms失败"); // } } } } @@ -557,99 +639,117 @@ } /** * 库位移转 * 拣料、并板、盘点再入库 */ public synchronized void locToLoc(CrnSlave slave, CrnProtocol crnProtocol) { for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) { // 获取工作状态为11(生成出库ID)的移库工作档 List<TaskWrk> taskWrks = taskWrkMapper.selectList(new EntityWrapper<TaskWrk>() .eq("crn_no", slave.getId()) .eq("wrk_sts", 11) .eq("io_type", 3) .orderBy("io_pri", false)); for (TaskWrk taskWrk : taskWrks) { // 双深库位且浅库位有货,则需先对浅库位进行库位移转 // if (Utils.isDeepLoc(slaveProperties, taskWrk.getStartPoint())) { // String shallowLocNo = Utils.getShallowLoc(slaveProperties, taskWrk.getStartPoint()); // TaskWrk hallowLocNoTask = taskWrkMapper.selectByStartPoint(shallowLocNo); // if (!Cools.isEmpty(hallowLocNoTask)){ // continue; // } // } // 堆垛机控制过滤 if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) { public synchronized void stnToCrnStnPick(Integer mark) { for (DevpSlave devp : slaveProperties.getDevp()) { // 遍历拣料入库口 for (DevpSlave.Sta pickSta : devp.getPickSta()) { StorageEscalationParam storageEscalationParam = new StorageEscalationParam(); // 获取拣料入库站信息 SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo()); if (staProtocol == null) { continue; } // 已经存在吊车执行任务时,则过滤 if (taskWrkMapper.selectCrnWorking(slave.getId()) != null) { continue; } if (taskWrk == null || Cools.isEmpty(taskWrk.getTargetPoint()) || taskWrk.getTargetPoint().equals("") || taskWrk.getWrkNo() == null) { continue; } // 工作档状态判断 if (taskWrk.getIoType() != 3 || taskWrk.getTargetPoint() == null) { log.error("查询工作档数据不符合条件--入出类型/目标库位号, 工作号={},源库位={},入出类型={}", taskWrk.getWrkNo(), taskWrk.getTargetPoint(), taskWrk.getIoType()); continue; } // 命令下发区 -------------------------------------------------------------------------- // 1.堆垛机开始移动 CrnCommand crnCommand = new CrnCommand(); crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 crnCommand.setTaskNo(taskWrk.getWrkNo().shortValue()); // 工作号 crnCommand.setAckFinish((short) 0); // 任务完成确认位 crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式: 库位移转 crnCommand.setSourcePosX(Utils.getRowShort(taskWrk.getStartPoint())); // 源库位排 crnCommand.setSourcePosY(Utils.getBayShort(taskWrk.getStartPoint())); // 源库位列 crnCommand.setSourcePosZ(Utils.getLevShort(taskWrk.getStartPoint())); // 源库位层 crnCommand.setDestinationPosX(Utils.getRowShort(taskWrk.getTargetPoint())); // 目标库位排 crnCommand.setDestinationPosY(Utils.getBayShort(taskWrk.getTargetPoint())); // 目标库位列 crnCommand.setDestinationPosZ(Utils.getLevShort(taskWrk.getTargetPoint())); // 目标库位层 crnCommand.setCommand((short) 1); if (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand), false)) { log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand)); } else { // 修改工作档状态 11.生成出库ID => 12.吊车出库中 Date now = new Date(); taskWrk.setWrkSts(12); taskWrk.setStatus(2); taskWrk.setModiTime(now); if (taskWrkMapper.updateById(taskWrk) == 0) { log.error("修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", taskWrk.getWrkNo()); } staProtocol = staProtocol.clone(); } if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk() && staProtocol.getWorkNo() >= 3001 && staProtocol.getWorkNo() <= 6000) { storageEscalationParam.setTaskNo(Integer.valueOf(staProtocol.getWorkNo())); String response = ""; Boolean success = false; try { HashMap<String, Object> headParam = new HashMap<>(); headParam.put("TaskNo", taskWrk.getTaskNo()); String response; //开始上报,拣料、并板、盘点再入库,WCS回调WMS response = new HttpHandler.Builder() // .setHeaders(headParam) .setUri(wmsUrl) .setPath(taskStatusFeedbackPath) .setJson(JSON.toJSONString(headParam)) .setPath(returnWarehouse) .setJson(JSON.toJSONString(storageEscalationParam)) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); apiLogService.save("wcs派发移库任务上报wms" , wmsUrl + taskStatusFeedbackPath if (!Cools.isEmpty(response) && !Cools.isEmpty(jsonObject.get("returnStatus")) && jsonObject.get("returnStatus").equals(0) && !Cools.isEmpty(jsonObject.get("results").toString())) { Result result = JSON.parseObject(jsonObject.get("results").toString(), Result.class); // 创新一个入库工作档 TaskWrk taskWrk = taskWrkService.selectByTaskNo(result.getTaskNo() + ""); if (Cools.isEmpty(taskWrk)) { taskWrk = createTask1(result, result.getBarcode(), staProtocol.getSiteId()); if (Cools.isEmpty(taskWrk)) { log.error("库位异常,库位号:={}", taskWrk.getOriginTargetPoint()); } else { taskWrkService.insert(taskWrk); StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>() .eq("crn_no", taskWrk.getCrnNo()).eq("type_no", 1).eq("stn_no", staProtocol.getSiteId())); HashMap<String, Object> hashMap = new HashMap<>(); hashMap.put("TaskNo", taskWrk.getTaskNo()); Boolean bool = false; staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue()); staProtocol.setStaNo((short) 0); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); try { //开始上报,任务开始时,WCS回调WMS response = new HttpHandler.Builder() .setUri(wmsUrl) .setPath(taskStatusFeedbackPath) .setJson(JSON.toJSONString(hashMap)) .build() .doPost(); JSONObject jsonObject1 = JSON.parseObject(response); if (jsonObject1.get("ReturnStatus").equals(0)) { bool = true; } } catch (Exception e) { } finally { apiLogService.save("wcs拣料、并板、盘点再入库上报wms" , wmsUrl + TaskExecCallback , null , "127.0.0.1" , JSON.toJSONString(hashMap) , response , bool ); } } } } } catch (Exception e) { } finally { apiLogService.save("wcs派发出库任务给RCS" , wcsUrl + outboundTaskRequest , null , "127.0.0.1" , JSON.toJSONString(headParam) , JSON.toJSONString(storageEscalationParam) , response , true , success ); } catch (Exception e) { log.error("wcs派发移库库任务上报wms失败", taskWrk); // throw new CoolException("wcs派发移库库任务上报wms失败"); } } return; } } } public void scanForkLift() { for (int i = 1; i <= 2; i++) { Object object = redisUtil.get("fork_lift_put_complete_" + i); if(object != null) { String taskNo = object.toString(); TaskWrk taskWrk = taskWrkService.selectByTaskNo(taskNo);//wms任务号 if (taskWrk == null) { log.info("没有找到该任务"); }else{ log.info("提前完成出库任务={}", taskWrk); taskWrkService.taskComplete(taskWrk); redisUtil.del("fork_lift_put_complete_" + i); } } } @@ -1089,19 +1189,20 @@ return response; } private TaskWrk createTask1(Result result, String barcode,Integer devNo) { private TaskWrk createTask1(Result result, String barcode, Integer devNo) { Date now = new Date(); TaskWrk taskWrk = new TaskWrk(); // int workNo1 = commonService.getWorkNo(WorkNoType.PAKIN.type);//获取入库工作号 taskWrk.setTaskNo(result.getTaskNo()+"");//任务号 taskWrk.setTaskNo(result.getTaskNo() + "");//任务号 taskWrk.setWrkNo(result.getTaskNo()); taskWrk.setStatus(TaskStatusType.DISTRIBUTE.id);//任务状态:派发 taskWrk.setCreateTime(now); taskWrk.setIoType(1);//任务类型 taskWrk.setIoPri(13);//优先级 taskWrk.setWrkSts(2);//2.派发入库任务给RCS taskWrk.setBarcode(barcode);//条码 taskWrk.setTargetPoint(devNo+"");//站点终点 taskWrk.setStartPoint(devNo+"");//站点起点 taskWrk.setTargetPoint(devNo + result.getShelfUnitId().substring(6));//站点终点 taskWrk.setStartPoint(devNo + "");//站点起点 taskWrk.setOriginStartPoint("");//源库位 taskWrk.setOriginTargetPoint(result.getShelfUnitId());//目标库位 return taskWrk; src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -9,6 +9,7 @@ import com.zy.asrs.domain.enums.TaskStatusType; import com.zy.asrs.domain.enums.WorkNoType; import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.CarryParam; import com.zy.asrs.entity.param.TaskOverParam; import com.zy.asrs.entity.param.WMSAndAGVInterfaceParam; import com.zy.asrs.entity.param.TaskCreateParam; @@ -66,69 +67,47 @@ @Override public HashMap<String, Object> taskCreate(TaskCreateParam param) { HashMap<String,Object> map=new HashMap<>(); public HashMap<String, Object> taskCreate(CarryParam param) { HashMap<String, Object> map = new HashMap<>(); TaskWrk taskWrk = taskWrkService.selectByTaskNo(param.getTaskNo()); if (taskWrk != null) { map.put("Code","0"); map.put("Msg",param.getTaskNo()+"任务已经生成!"); map.put("Code", "0"); map.put("Msg", param.getTaskNo() + "任务已经生成!"); return map; } Date now = new Date(); taskWrk = new TaskWrk(); LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", param.getStartPoint())); int workNo1 = commonService.getWorkNo(WorkNoType.PAKOUT.type);//获取入库工作号 LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", param.getOriginStartPoint())); // int workNo1 = commonService.getWorkNo(WorkNoType.PAKOUT.type);//获取入库工作号 taskWrk.setTaskNo(param.getTaskNo());//任务号 taskWrk.setWrkNo(workNo1); taskWrk.setWrkNo(Integer.valueOf(param.getTaskNo())); taskWrk.setStatus(TaskStatusType.RECEIVE.id);//任务状态:接收 taskWrk.setCreateTime(now); try { if (param.getIoType() > 1) { if (Utils.locNoRowBoolean(locMast.getRow1())) { param.setTaskPriority(11); } } } catch (Exception e) { } taskWrk.setIoType(param.getIoType());//任务类型 taskWrk.setIoPri(param.getTaskPriority());//优先级 taskWrk.setBarcode(param.getBarcode());//条码 taskWrk.setIoType(param.getStereoscopicTaskType());//任务类型 taskWrk.setIoPri(param.getPriority());//优先级 taskWrk.setBarcode(param.getBoxNo());//条码 taskWrk.setCrnNo(locMast.getCrnNo()); if (param.getIoType() == 1) { taskWrk.setWrkSts(1); if (!Cools.isEmpty(param.getTargetPoint())) { taskWrk.setTargetPoint(Utils.getWcsLocNo(param.getTargetPoint()));//终点 taskWrk.setOriginTargetPoint(param.getTargetPoint()); } } else if (param.getIoType() == 2) { if (param.getStereoscopicTaskType() == 2) { taskWrk.setWrkSts(11); if (!Cools.isEmpty(param.getStartPoint())) { taskWrk.setStartPoint(param.getStartPoint());//起点 taskWrk.setTargetPoint(param.getTargetPoint()); } taskWrk.setTargetPoint(param.getTargetPoint()); } else if (param.getIoType() == 3) { taskWrk.setWrkSts(11); if (!Cools.isEmpty(param.getStartPoint())) { taskWrk.setStartPoint(param.getStartPoint());//起点 taskWrk.setTargetPoint(param.getTargetPoint()); } } if (!Cools.isEmpty(param.getMemo())) { taskWrk.setMemo(param.getMemo());//备注 taskWrk.setStartPoint(param.getStartPoint());//源站点 taskWrk.setTargetPoint(param.getTerminalNo());//目标站 taskWrk.setOriginStartPoint(param.getOriginStartPoint());//源库位 } else if (param.getStereoscopicTaskType() == 3) { // taskWrk.setWrkSts(11); // if (!Cools.isEmpty(param.getStartPoint())) { // taskWrk.setStartPoint(param.getStartPoint());//起点 // taskWrk.setTargetPoint(param.getTargetPoint()); // } } if (!taskWrkService.insert(taskWrk)) { map.put("Code","0"); map.put("Msg",param.getTaskNo()+"创建任务失败!"); map.put("Code", "0"); map.put("Msg", param.getTaskNo() + "创建任务失败!"); return map; } map.put("Code","1"); map.put("Msg","ok"); map.put("Code", "1"); map.put("Msg", "ok"); return map; } @@ -182,7 +161,7 @@ WMSAndAGVInterfaceParam data = JSONObject.parseObject(jsonObject.get("data").toString(), WMSAndAGVInterfaceParam.class); String msg = null; try { taskCreate(new TaskCreateParam(data)); // taskCreate(new TaskCreateParam(data)); } catch (Exception e) { msg = e.getMessage(); } src/main/java/com/zy/asrs/service/impl/TaskWrkServiceImpl.java
@@ -3,13 +3,16 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.core.common.Cools; import com.core.common.R; import com.core.exception.CoolException; import com.zy.asrs.domain.enums.TaskStatusType; import com.zy.asrs.domain.enums.WorkNoType; import com.zy.asrs.entity.LocMast; import com.zy.asrs.entity.StaDesc; import com.zy.asrs.mapper.TaskWrkMapper; import com.zy.asrs.entity.TaskWrk; import com.zy.asrs.service.ApiLogService; import com.zy.asrs.service.LocMastService; import com.zy.asrs.service.StaDescService; import com.zy.asrs.service.TaskWrkService; import com.baomidou.mybatisplus.service.impl.ServiceImpl; @@ -50,6 +53,10 @@ private String taskStatusFeedbackPath; @Autowired private ApiLogService apiLogService; @Autowired private LocMastService locMastService; @Autowired private TaskWrkService taskWrkService; @Override public TaskWrk selectByTaskNo(String taskNo) { @@ -74,29 +81,7 @@ @Override @Transactional(propagation = Propagation.REQUIRES_NEW) public void distribute(String taskNo, Long userId) { TaskWrk taskWrk = this.selectByTaskNo(taskNo); if (taskWrk == null) { throw new CoolException("WMS任务不存在"); } if (taskWrk.getStatus() != 1) { throw new CoolException("任务已派发"); } //创建任务 if (taskWrk.getIoType() == 1) { //1.入库 if (taskWrk.getStartPoint() == null || taskWrk.getTargetPoint() == null) { throw new CoolException("未接收到起点和终点,不进行派发"); } startup(taskWrk, userId); }else if(taskWrk.getIoType() == 2){ //2.出库 stockOut(taskWrk, userId); } else if (taskWrk.getIoType() == 3) { //3.库格移载 locMove(taskWrk, userId); } } @Override @@ -247,4 +232,63 @@ public int saveToHistory(String taskNo) { return this.baseMapper.saveToHistory(taskNo); } @Override public R taskComplete(TaskWrk taskWrk) { LocMast locMast = new LocMast(); switch (taskWrk.getIoType()) { //入库 case 1: taskWrk.setModiTime(new Date()); taskWrk.setWrkSts(6);//入库完成--准备上报wms locMast = locMastService.selectByLocNo(taskWrk.getOriginTargetPoint()); if (locMast == null) { return R.error("没有找到该库位="+taskWrk.getOriginTargetPoint()); } locMast.setLocSts("F"); locMastService.updateById(locMast); break; //出库 case 2: if(taskWrk.getWrkSts()>=15){ return R.ok(); } taskWrk.setModiTime(new Date()); taskWrk.setWrkSts(15);//RCS出库完成--》写入输送线工作号 locMast = locMastService.selectByLocNo(taskWrk.getOriginStartPoint()); if (locMast == null) { return R.error("没有找到该库位="+taskWrk.getOriginStartPoint()); } locMast.setLocSts("O"); locMastService.updateById(locMast); log.info("RCS出库任务完成更新WCS任务状态={}",taskWrk); break; //移库 // case 3: // taskWrk.setModiTime(new Date()); // taskWrk.setWrkSts(6);//入库完成--准备上报wms // //源库位 // locMast = locMastService.selectByLocNo(taskWrk.getOriginTargetPoint()); // if (locMast == null) { // return R.error("没有找到该库位="+taskWrk.getOriginTargetPoint()); // } // locMast.setLocSts("F"); // locMastService.updateById(locMast); // //目标库位 // locMast = locMastService.selectByLocNo(taskWrk.getOriginStartPoint()); // if (locMast == null) { // return R.error("没有找到该库位="+taskWrk.getOriginStartPoint()); // } // locMast.setLocSts("0"); // locMastService.updateById(locMast); // return R.ok(); // } if(taskWrkService.updateById(taskWrk)){ return R.ok(); }else { return R.error("RCS任务上报完成更新WCS任务状态失败"+taskWrk); } } } src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -47,165 +47,165 @@ @Override @Transactional public void completeWrkMast(String workNo, Long userId) { WrkMast wrkMast = wrkMastService.selectById(workNo); if (Cools.isEmpty(wrkMast)) { throw new CoolException(workNo + "工作档不存在"); } if (wrkMast.getWrkSts() == 4 || wrkMast.getWrkSts() == 14) { throw new CoolException("当前工作档已完成"); } // 入库 + 库位转移 if (wrkMast.getWrkSts() < 4 || (wrkMast.getWrkSts() > 10 && wrkMast.getIoType() == 11)) { wrkMast.setWrkSts(4L); // 出库 } else if (wrkMast.getWrkSts() > 10) { wrkMast.setWrkSts(14L); } Date now = new Date(); wrkMast.setCrnStrTime(DateUtils.calculate(now, 1L, TimeUnit.SECONDS, true)); wrkMast.setCrnEndTime(now); wrkMast.setModiTime(now); wrkMast.setModiUser(userId); // 完成操作人员记录 wrkMast.setManuType("手动完成"); if (!wrkMastService.updateById(wrkMast)) { throw new CoolException("修改工作档失败"); } HashMap<String,Object> headParam = new HashMap<>(); headParam.put("TaskNo",wrkMast.getTaskNo()); headParam.put("Result",0);//完成 try { String response; log.error("wcs手动完结任务上报wms={}", wrkMast); response = new HttpHandler.Builder() // .setHeaders(headParam) .setUri(wmsUrl) .setPath(taskStatusFeedbackPath) .setJson(JSON.toJSONString(headParam)) .build() .doPost(); apiLogService.save("wcs手动完成任务上报wms" , wmsUrl + taskStatusFeedbackPath , null , "127.0.0.1" , JSON.toJSONString(headParam) , response , true ); } catch (Exception e) { log.error("wcs手动完结任务上报wms失败={}", wrkMast); log.error("wcs手动完结任务上报wms失败,报错信息:", e); // throw new CoolException("wcs派发入库任务上报wms失败"); } // WrkMast wrkMast = wrkMastService.selectById(workNo); // if (Cools.isEmpty(wrkMast)) { // throw new CoolException(workNo + "工作档不存在"); // } // if (wrkMast.getWrkSts() == 4 || wrkMast.getWrkSts() == 14) { // throw new CoolException("当前工作档已完成"); // } // // 入库 + 库位转移 // if (wrkMast.getWrkSts() < 4 || (wrkMast.getWrkSts() > 10 && wrkMast.getIoType() == 11)) { // wrkMast.setWrkSts(4L); // // 出库 // } else if (wrkMast.getWrkSts() > 10) { // wrkMast.setWrkSts(14L); // } // Date now = new Date(); // wrkMast.setCrnStrTime(DateUtils.calculate(now, 1L, TimeUnit.SECONDS, true)); // wrkMast.setCrnEndTime(now); // wrkMast.setModiTime(now); // wrkMast.setModiUser(userId); // // 完成操作人员记录 // wrkMast.setManuType("手动完成"); // if (!wrkMastService.updateById(wrkMast)) { // throw new CoolException("修改工作档失败"); // } // // HashMap<String,Object> headParam = new HashMap<>(); // headParam.put("TaskNo",wrkMast.getTaskNo()); // headParam.put("Result",0);//完成 // // try { // String response; // log.error("wcs手动完结任务上报wms={}", wrkMast); // // response = new HttpHandler.Builder() // // .setHeaders(headParam) // .setUri(wmsUrl) // .setPath(taskStatusFeedbackPath) // .setJson(JSON.toJSONString(headParam)) // .build() // .doPost(); // apiLogService.save("wcs手动完成任务上报wms" // , wmsUrl + taskStatusFeedbackPath // , null // , "127.0.0.1" // , JSON.toJSONString(headParam) // , response // , true // ); // } catch (Exception e) { // log.error("wcs手动完结任务上报wms失败={}", wrkMast); // log.error("wcs手动完结任务上报wms失败,报错信息:", e); //// throw new CoolException("wcs派发入库任务上报wms失败"); // } } @Override @Transactional public void cancelWrkMast(String workNo, Long userId) { Date now = new Date(); WrkMast wrkMast = wrkMastService.selectById(workNo); String locNo = ""; // 待修改目标库位 String locSts = ""; // 待修改目标库位状态 // 入库取消(修改目标库位) if (wrkMast.getWrkSts() < 4) { locNo = wrkMast.getLocNo(); locSts = "O"; // 库位转移 if (wrkMast.getIoType() == 11) { // 库位转移:源库位 LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo()); if (Cools.isEmpty(locMast)) { throw new CoolException("取消库位转移失败,源库位不存在:" + wrkMast.getSourceLocNo()); } locMast.setLocSts(wrkMast.getFullPlt().equalsIgnoreCase("N") ? "D" : "F"); locMast.setModiTime(now); locMast.setModiUser(userId); locMastService.updateById(locMast); } // 出库取消(修改源库位) } else if (wrkMast.getWrkSts() > 10 && wrkMast.getWrkSts() != 14) { locNo = wrkMast.getSourceLocNo(); // 出库 ===>> F.在库 if (wrkMast.getIoType() > 100 && wrkMast.getIoType() != 110) { locSts = "F"; // 空板出库 ===>> D.空桶/空栈板 } else if (wrkMast.getIoType() == 110) { locSts = "D"; // 库位转移 ===>> D.空桶/空栈板 } else if (wrkMast.getIoType() == 11) { locSts = wrkMast.getFullPlt().equalsIgnoreCase("N") ? "D" : "F"; // 库位转移:目标库位 LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); if (Cools.isEmpty(locMast)) { throw new CoolException("取消库位转移失败,目标库位不存在:" + wrkMast.getSourceLocNo()); } locMast.setLocSts("O"); locMast.setModiTime(now); locMast.setModiUser(userId); locMastService.updateById(locMast); } } else { throw new CoolException("当前工作状态无法取消"); } // 取消操作人员记录 wrkMast.setManuType("手动取消"); wrkMast.setModiUser(userId); wrkMast.setModiTime(now); if (!wrkMastService.updateById(wrkMast)) { throw new CoolException("取消任务失败"); } // 保存工作主档历史档 if (!wrkMastLogService.save(wrkMast.getWrkNo())) { throw new CoolException("保存任务历史档失败, workNo = " + wrkMast.getWrkNo()); } // 删除工作主档 boolean wrkMastRes = wrkMastService.deleteById(wrkMast); // 修改库位状态 LocMast locMast = locMastService.selectById(locNo); if (Cools.isEmpty(locMast)) { throw new CoolException("取消任务失败,库位不存在:" + locNo); } locMast.setLocSts(locSts); locMast.setModiTime(now); locMast.setModiUser(userId); boolean locMastRes = locMastService.updateById(locMast); if (!wrkMastRes || !locMastRes) { throw new CoolException("保存数据失败"); } HashMap<String,Object> headParam = new HashMap<>(); headParam.put("TaskNo",wrkMast.getTaskNo()); headParam.put("Result",1);//取消 try { String response; log.error("wcs手动取消任务上报wms={}", wrkMast); response = new HttpHandler.Builder() // .setHeaders(headParam) .setUri(wmsUrl) .setPath(taskStatusFeedbackPath) .setJson(JSON.toJSONString(headParam)) .build() .doPost(); apiLogService.save("wcs手动取消任务上报wms" , wmsUrl + taskStatusFeedbackPath , null , "127.0.0.1" , JSON.toJSONString(headParam) , response , true ); } catch (Exception e) { log.error("wcs手动取消任务上报wms失败={}", wrkMast); log.error("wcs手动取消任务上报wms失败,报错信息:", e); // throw new CoolException("wcs派发入库任务上报wms失败"); } // Date now = new Date(); // WrkMast wrkMast = wrkMastService.selectById(workNo); // // String locNo = ""; // 待修改目标库位 // String locSts = ""; // 待修改目标库位状态 // // 入库取消(修改目标库位) // if (wrkMast.getWrkSts() < 4) { // locNo = wrkMast.getLocNo(); // locSts = "O"; // // // 库位转移 // if (wrkMast.getIoType() == 11) { // // 库位转移:源库位 // LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo()); // if (Cools.isEmpty(locMast)) { // throw new CoolException("取消库位转移失败,源库位不存在:" + wrkMast.getSourceLocNo()); // } // locMast.setLocSts(wrkMast.getFullPlt().equalsIgnoreCase("N") ? "D" : "F"); // locMast.setModiTime(now); // locMast.setModiUser(userId); // locMastService.updateById(locMast); // } // // 出库取消(修改源库位) // } else if (wrkMast.getWrkSts() > 10 && wrkMast.getWrkSts() != 14) { // locNo = wrkMast.getSourceLocNo(); // // 出库 ===>> F.在库 // if (wrkMast.getIoType() > 100 && wrkMast.getIoType() != 110) { // locSts = "F"; // // 空板出库 ===>> D.空桶/空栈板 // } else if (wrkMast.getIoType() == 110) { // locSts = "D"; // // 库位转移 ===>> D.空桶/空栈板 // } else if (wrkMast.getIoType() == 11) { // locSts = wrkMast.getFullPlt().equalsIgnoreCase("N") ? "D" : "F"; // // 库位转移:目标库位 // LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); // if (Cools.isEmpty(locMast)) { // throw new CoolException("取消库位转移失败,目标库位不存在:" + wrkMast.getSourceLocNo()); // } // locMast.setLocSts("O"); // locMast.setModiTime(now); // locMast.setModiUser(userId); // locMastService.updateById(locMast); // } // } else { // throw new CoolException("当前工作状态无法取消"); // } // // 取消操作人员记录 // wrkMast.setManuType("手动取消"); // wrkMast.setModiUser(userId); // wrkMast.setModiTime(now); // if (!wrkMastService.updateById(wrkMast)) { // throw new CoolException("取消任务失败"); // } // // 保存工作主档历史档 // if (!wrkMastLogService.save(wrkMast.getWrkNo())) { // throw new CoolException("保存任务历史档失败, workNo = " + wrkMast.getWrkNo()); // } // // // 删除工作主档 // boolean wrkMastRes = wrkMastService.deleteById(wrkMast); // // // 修改库位状态 // LocMast locMast = locMastService.selectById(locNo); // if (Cools.isEmpty(locMast)) { // throw new CoolException("取消任务失败,库位不存在:" + locNo); // } // locMast.setLocSts(locSts); // locMast.setModiTime(now); // locMast.setModiUser(userId); // boolean locMastRes = locMastService.updateById(locMast); // if (!wrkMastRes || !locMastRes) { // throw new CoolException("保存数据失败"); // } // HashMap<String,Object> headParam = new HashMap<>(); // headParam.put("TaskNo",wrkMast.getTaskNo()); // headParam.put("Result",1);//取消 // // try { // String response; // log.error("wcs手动取消任务上报wms={}", wrkMast); // // response = new HttpHandler.Builder() // // .setHeaders(headParam) // .setUri(wmsUrl) // .setPath(taskStatusFeedbackPath) // .setJson(JSON.toJSONString(headParam)) // .build() // .doPost(); // apiLogService.save("wcs手动取消任务上报wms" // , wmsUrl + taskStatusFeedbackPath // , null // , "127.0.0.1" // , JSON.toJSONString(headParam) // , response // , true // ); // } catch (Exception e) { // log.error("wcs手动取消任务上报wms失败={}", wrkMast); // log.error("wcs手动取消任务上报wms失败,报错信息:", e); //// throw new CoolException("wcs派发入库任务上报wms失败"); // } } } src/main/java/com/zy/asrs/task/AssignTasksRCSScheduler.java
@@ -32,35 +32,41 @@ private String wcsmovePath; @Value("${wcs.outboundTaskRequest}") private String wcsoutboundTaskRequest; @Value("${wcs.inboundTaskApplyPathWcs}") private String inboundTaskApplyPathWcs; @Value("${wms.TaskExecCallback}") private String TaskExecCallback; @Value("${wms.taskStatusFeedbackPath}") private String taskStatusFeedbackPath; /** * 自动派发出库任务给RCS * 自动派发任务给RCS * * @throws IOException */ @Scheduled(cron = "0/3 * * * * ? ") public void execute() throws IOException { if(true){ if(false){ List<TaskWrk> taskWrks=taskWrkService.selectList(new EntityWrapper<TaskWrk>() .eq("wrk_sts",1).eq("io_type",3)); .eq("wrk_sts",1)); for(TaskWrk taskWrk:taskWrks){ HashMap<String, Object> headParam = new HashMap<>(); String response = ""; Boolean bool = false; String dz=""; if(taskWrk.getIoType()==2){ if(taskWrk.getIoType()==1){//入库 dz=inboundTaskApplyPathWcs; headParam.put("sourceStaNo", taskWrk.getStartPoint());//源站 headParam.put("staNo", taskWrk.getTargetPoint());//目标站 }else if(taskWrk.getIoType()==2){//出库 dz=wcsoutboundTaskRequest; }else{ }else if(taskWrk.getIoType()==3){//移库 dz=wcsmovePath; headParam.put("sourceLocNo",taskWrk.getStartPoint());//源库位 } try { headParam.put("taskNo", taskWrk.getTaskNo()); headParam.put("sourceLocNo",taskWrk.getStartPoint());//源库位 headParam.put("locNo",taskWrk.getTargetPoint());//目标库位 headParam.put("locNo",taskWrk.getOriginTargetPoint());//目标库位 log.info("wcs派发任务给RCS出库={}", taskWrk); response = new HttpHandler.Builder() // .setHeaders(headParam) @@ -71,8 +77,14 @@ .doPost(); JSONObject jsonObject = JSON.parseObject(response); if(jsonObject.get("code").equals(200)){ //派发出库任务给RCS==>成功下发出库任务 taskWrk.setWrkSts(2); //派发任务给RCS==>成功下发出库任务 if(taskWrk.getIoType()==1){ taskWrk.setWrkSts(3); }else if(taskWrk.getIoType()==2){ taskWrk.setWrkSts(12); }else if(taskWrk.getIoType()==3){ taskWrk.setWrkSts(3); } taskWrkService.updateById(taskWrk); bool = true; } src/main/java/com/zy/asrs/task/AutoReportStartHandler.java
@@ -102,7 +102,7 @@ .doPost(); JSONObject jsonObject = JSON.parseObject(response); Boolean bool = false; if(jsonObject.get("ReturnStatus").equals(0)){ if(jsonObject.get("ReturnStatus").equals("0")){ bool = true; taskWrk.setMarkStart(1); taskWrk.setStatus(2); src/main/java/com/zy/asrs/task/GetshuttlerStatusScheduler.java
New file @@ -0,0 +1,94 @@ package com.zy.asrs.task; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.zy.asrs.entity.BasDevp; import com.zy.asrs.entity.BasShuttle; import com.zy.asrs.entity.TaskWrk; import com.zy.asrs.entity.param.GetShuttleStatusParam; import com.zy.asrs.entity.param.Result; import com.zy.asrs.service.ApiLogService; import com.zy.asrs.service.BasDevpService; import com.zy.asrs.service.BasShuttleService; import com.zy.common.utils.HttpHandler; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.io.IOException; import java.util.HashMap; import java.util.List; @Slf4j @Component public class GetshuttlerStatusScheduler { @Value("${wcs.urlWcs}") private String wcsUrl; @Value("${wcs.shuttleStatus}") private String shuttleStatus; @Autowired private ApiLogService apiLogService; @Autowired private BasShuttleService basShuttleService; /** * 获取rcs小车信息 * * @throws IOException */ @Scheduled(cron = "0/3 * * * * ? ") public void execute() throws IOException { String response = ""; Boolean bool = false; try { // log.info("wcs获取rcs小车信息"); response = new HttpHandler.Builder() // .setHeaders(headParam) .setUri(wcsUrl) .setPath(shuttleStatus) .setJson(JSON.toJSONString("")) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); if (jsonObject.get("code").equals(200)) { JSONObject data = JSON.parseObject(jsonObject.get("data").toString()); List<GetShuttleStatusParam> shuttles = JSON.parseArray(data.get("shuttle").toString(), GetShuttleStatusParam.class); for (GetShuttleStatusParam shuttle : shuttles) { //对小车二维码进行处理 Integer lev=1; //小车模式 Integer mode=0; //小车是否在充电 Integer autoCharge=0; if(!Cools.isEmpty(shuttle.getCurrentCode())){ JSONObject jsonObject1 = JSON.parseObject(shuttle.getCurrentCode()); lev=jsonObject1.getInteger("z"); } if(!Cools.isEmpty(shuttle.getMode())){ mode=shuttle.getMode(); } if(!Cools.isEmpty(shuttle.getHasCharge())&&shuttle.getHasCharge()){ mode=2; } BasShuttle shuttle1 = basShuttleService.selectOne(new EntityWrapper<BasShuttle>().eq("shuttle_no", shuttle.getShuttleNo())); shuttle1.setStatus(mode);//小车模式 shuttle1.setShuttleStatus(shuttle.getProtocolStatus());//小车状态 shuttle1.setDeviceStatus(shuttle.getProtocolStatus$());//小车状态中文版 shuttle1.setChargeLine(lev);//小车所在层 shuttle1.setErrorCode(shuttle.getErrorCode());//异常码 basShuttleService.updateById(shuttle1); } bool = true; } } catch (Exception e) { log.error("wcs获取小车状态失败"); } } } src/main/java/com/zy/asrs/task/RepositionLED.java
@@ -84,7 +84,7 @@ * 上报WMS货物搬离 * @throws IOException */ @Scheduled(cron = "0/3 * * * * ? ") // @Scheduled(cron = "0/3 * * * * ? ") public void execute() throws IOException { List<TaskWrk> taskWrks=taskWrkService.selectList(new EntityWrapper<TaskWrk>().eq("wrk_sts",17)); for(TaskWrk taskWrk:taskWrks){ src/main/java/com/zy/asrs/task/TaskLogScheduler.java
@@ -65,7 +65,13 @@ @Scheduled(cron = "0/3 * * * * ? ") public void execute() throws IOException { //入库7转历史档,移库7转历史档,出库18转 List<TaskWrk> taskWrkList = taskWrkService.selectList(new EntityWrapper<TaskWrk>().in("wrk_sts", 7,18)); List<TaskWrk> taskWrkList = taskWrkService.selectList(new EntityWrapper<TaskWrk>() .in("wrk_sts", 7,17) .or() .in("status",5,7));//取消或者完结 if(taskWrkList.size() == 0){ return; } for (TaskWrk taskWrk : taskWrkList) { TaskWrkLog taskWrkLog = new TaskWrkLog(taskWrk); if(taskWrkLog.getIoType().equals(1)){ @@ -79,6 +85,16 @@ } }else if(taskWrkLog.getIoType().equals(2)){ BasDevp basDevp = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("wrk_no",taskWrk.getWrkNo())); if(taskWrk.getWrkNo()>=3001&&taskWrk.getWrkNo()<=6000){ taskWrkLog.setWrkSts(18); taskWrkLog.setModiTime(new Date()); if (!wrkLogService.insert(taskWrkLog)) { throw new CoolException("转历史档失败" + taskWrkLog); } if (!taskWrkService.deleteById(taskWrk)) { throw new CoolException("任务档删除失败" + taskWrkLog); } } if(basDevp==null){ HashMap<Object, Object> headParam = new HashMap<>(); String response = ""; @@ -95,6 +111,14 @@ .doPost(); JSONObject jsonObject = JSON.parseObject(response); if(jsonObject.get("ReturnStatus").equals(0)){ taskWrkLog.setWrkSts(18); taskWrkLog.setModiTime(new Date()); if (!wrkLogService.insert(taskWrkLog)) { throw new CoolException("转历史档失败" + taskWrkLog); } if (!taskWrkService.deleteById(taskWrk)) { throw new CoolException("任务档删除失败" + taskWrkLog); } } } catch (Exception e){ log.error("wcs搬离出库给wms失败{},返回值={}", taskWrk, response); src/main/java/com/zy/asrs/task/TaskMastScheduler.java
@@ -61,74 +61,45 @@ public void execute() throws IOException { for (TaskWrk taskWrk : taskWrkService.selectToBeHistoryData()) { HashMap<String, Object> headParam = new HashMap<>(); String s="";//日志标识 String s = "";//日志标识 if (taskWrk.getWrkSts() == 6) {//入库完成 headParam.put("Result", 1); s="入库完成"; taskWrk.setStatus(7);//入库任务转历史档6--》7 s = "入库完成"; taskWrk.setWrkSts(7);//入库任务转历史档6--》7 } else if (taskWrk.getWrkSts() == 16) {//出库完成-待搬离 headParam.put("Result", 1); s="出库完成-待搬离"; s = "出库完成-待搬离"; taskWrk.setWrkSts(17);//出库任务16--》17 } else if (taskWrk.getWrkSts().equals(30)) {//取消 s="取消"; } else if (taskWrk.getStatus().equals(4)) {//取消任务上报wms s = "取消"; taskWrk.setStatus(5);//取消任务 headParam.put("Result", 2); taskWrk.setWrkSts(31);//取消任务30--》31 } else if (taskWrk.getStatus().equals(6)) {//完结任务上报wms s = "手动完成"; taskWrk.setStatus(7);//完结 headParam.put("Result", 1); } String response = ""; Boolean bool = false; try { headParam.put("TaskNo", taskWrk.getTaskNo()); log.info("wcs"+s+"任务上报wms={}", taskWrk); log.info("wcs" + s + "任务上报wms={}", taskWrk); response = new HttpHandler.Builder() // .setHeaders(headParam) // .setHeaders(headPraam) .setUri(wmsUrl) .setPath(TaskExecCallback) .setJson(JSON.toJSONString(headParam)) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); Date date=new Date(); if(jsonObject.get("ReturnStatus").equals(0)){ if(taskWrk.getIoType().equals(1)){//入库 LocMast locMast = locMastService.selectByLocNo(taskWrk.getTargetPoint());//目标库位 if(locMast != null){ locMast.setLocSts("F"); locMast.setBarcode(taskWrk.getBarcode()); locMast.setModiTime(date); locMastService.updateById(locMast); } }else if(taskWrk.getIoType().equals(3)){//移库 LocMast locMast = locMastService.selectByLocNo(taskWrk.getTargetPoint());//目标库位 if(locMast != null){ locMast.setLocSts("F"); locMast.setBarcode(taskWrk.getBarcode()); locMast.setModiTime(date); locMastService.updateById(locMast); } LocMast locMast2 = locMastService.selectByLocNo(taskWrk.getStartPoint());//原始库位 if(locMast2 != null){ locMast2.setLocSts("O"); locMast2.setBarcode(""); locMast.setModiTime(date); locMastService.updateById(locMast2); } }else if(taskWrk.getIoType().equals(2)){//出库 LocMast locMast2 = locMastService.selectByLocNo(taskWrk.getStartPoint());//原始库位 if(locMast2 != null){ locMast2.setLocSts("O"); locMast2.setBarcode(""); locMast2.setModiTime(date); locMastService.updateById(locMast2); } } if (jsonObject.get("ReturnStatus").equals("0")) { taskWrkService.updateById(taskWrk); bool = true; } } catch (Exception e) { log.error("wcs"+s+"任务上报wms失败={},返回值={}", taskWrk, response); log.error("wcs" + s + "任务上报wms失败={},返回值={}", taskWrk, response); } finally { apiLogService.save("wcs"+s+"任务上报wms" apiLogService.save("wcs" + s + "任务上报wms" , wmsUrl + TaskExecCallback , null , "127.0.0.1" src/main/java/com/zy/asrs/utils/Utils.java
@@ -427,7 +427,12 @@ } public static String Fusion(int x, int y, int z){ String locNo="0"+x; String locNo =""; if(x>=10){ locNo=x+""; }else{ locNo="0"+x; } if(z>=10){ locNo=locNo+"0"+z; }else{ src/main/java/com/zy/common/config/RedisConfig.java
@@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.*; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; @@ -14,7 +15,7 @@ * Redis配置类 * Created by vincent on 2019-12-23 */ //@Configuration @Configuration //@EnableCaching // 开启数据缓存机制 public class RedisConfig extends CachingConfigurerSupport { src/main/java/com/zy/common/utils/HttpHandler.java
@@ -15,7 +15,7 @@ */ public class HttpHandler { private static final Integer DEFAULT_TIMEOUT_SECONDS = 5; private static final Integer DEFAULT_TIMEOUT_SECONDS = 10; private static final MediaType MEDIA_TYPE = MediaType.parse("application/json"); private String uri; src/main/java/com/zy/core/MainProcess.java
@@ -36,7 +36,7 @@ try { // 间隔 Thread.sleep(1000); Thread.sleep(500); // 系统运行状态判断 if (!SystemProperties.WCS_RUNNING_STATUS.get()) { @@ -47,12 +47,19 @@ // mainService.crnDemoOfLocMove1(); // 入库 ===>> 入库站到堆垛机站,根据条码扫描生成入库工作档 mainService.generateStoreWrkFile1(); // 组托 //入库 ===>> 空板入库 mainService.EmptyPlates();//空板入库 // 入出库 ===>> 调用RCS进行入出库 mainService.crnIoExecute(); // 出库 ===>> 堆垛机出库站到出库站 // mainService.crnStnToOutStn(); // 出库 ===>> 提升机出库站到出库站 mainService.crnStnToOutStn(); // 入库 ===>> 执行对工作档的完成操作 // mainService.storeFinished(); mainService.storeFinished(); // 入库 ===>> 拣料盘点再入库 mainService.stnToCrnStnPick(1); mainService.scanForkLift(); // 堆垛机异常信息记录 // mainService.recCrnErr(); src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -373,11 +373,11 @@ //任务下发成功标识 boolean writeFlag = false; while(writeCount < 5){ OperateResult writeResult1 = siemensS7Net.Write("DB100." + index*6, staProtocol.getWorkNo().intValue()); // 工作号 OperateResult writeResult2 = siemensS7Net.Write("DB100." + (index*6+4), staProtocol.getStaNo()); // 目标站 OperateResult writeResult1 = siemensS7Net.Write("DB1000." + index*8, staProtocol.getWorkNo().intValue()); // 工作号 OperateResult writeResult2 = siemensS7Net.Write("DB1000." + (index*8+4), staProtocol.getStaNo()); // 目标站 if(writeResult1.IsSuccess && writeResult2.IsSuccess){ Thread.sleep(200); OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB100." + index*6, (short)6); OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB1000." + index*8, (short)6); if(readResult.IsSuccess){ Integer workNo = siemensS7Net.getByteTransform().TransInt32(readResult.Content, 0); short staNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 4); src/main/resources/application-prod.yml
@@ -21,6 +21,10 @@ staNo: 100 outSta[1]: #出库口2 staNo: 200 pickSta[0]: staNo: 100 pickSta[1]: staNo: 200 barcode[0]: #条码扫描仪 port: 51236 ip: 172.17.91.39 src/main/resources/application.yml
@@ -8,7 +8,7 @@ name: @pom.build.finalName@ datasource: driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver url: jdbc:sqlserver://127.0.0.1:1433;databasename=lfdwcs_sxc url: jdbc:sqlserver://192.168.0.17:1433;databasename=lfdwcs_sxc username: sa password: sa@123 mvc: @@ -16,7 +16,7 @@ redis: host: localhost port: 6379 database: 0 database: 6 # password: xltys1995 profiles: active: prod @@ -50,7 +50,7 @@ #url: 10.32.53.195:8080 # WMS系统ip # url: 10.210.157.109:8090 url: 127.0.0.1:8081 url: 127.0.0.1:8081/lfdsxkwms # 入库任务申请接口 #inboundTaskApplyPath: api/InterFace/inboundTaskApply inboundTaskApplyPath: rpc/pakin/loc/v1 @@ -63,11 +63,15 @@ taskLeave : open/asrs/leave/task # 移库申请接口 movePath: api/InterFace/get_InterFace_TestStorage # 拣料盘点回库上报 returnWarehouse : rpc/pakin/loc/returnWarehouse wcs: urlWcs: 127.0.0.1:9091/wcs urlWcs: 127.0.0.1:9091/rcs #入库任务申请 inboundTaskApplyPathWcs: openapi/createInTask #出库任务申请 outboundTaskRequest : openapi/createOutTask # 移库申请接口 movePathWcs: openapi/createLocMoveTask # 获取小车信息 shuttleStatus: openapi/deviceStatus src/main/resources/mapper/BasShuttleMapper.xml
@@ -21,6 +21,7 @@ <result column="run_speed" property="runSpeed" /> <result column="device_status" property="deviceStatus" /> <result column="disable_lev" property="disableLev" /> <result column="errorCode" property="errorCode" /> </resultMap> src/main/resources/mapper/TaskWrkMapper.xml
@@ -25,6 +25,8 @@ <result column="command_step" property="commandStep" /> <result column="transfer_mark" property="transferMark" /> <result column="mark_start" property="markStart"/> <result column="origin_start_point" property="originStartPoint"/> <result column="origin_target_point" property="originTargetPoint"/> </resultMap> @@ -50,10 +52,10 @@ <select id="selectPakIn" resultMap="BaseResultMap"> select top 1 * from dbo.wcs_task_wrk where status=2 and crn_no=#{crnNo} and wrk_no=#{workNo} and start_point=#{startPoint} and io_type=1 and wrk_sts= 2 order by io_pri desc,create_time,wrk_no ASC </select> @@ -81,10 +83,8 @@ <select id="selectPakOut" resultMap="BaseResultMap"> select * from dbo.wcs_task_wrk where crn_no=#{crnNo} <if test="targetPoint!=null and targetPoint!='' "> and target_point=#{targetPoint} </if> where target_point=#{targetPoint} and wrk_sts=11 and io_type = 2 order by io_pri desc,create_time,wrk_no ASC @@ -119,7 +119,7 @@ <select id="selectToBeHistoryData" resultMap="BaseResultMap"> select * from dbo.wcs_task_wrk where 1=1 and (wrk_sts=16 or wrk_sts=7 or wrk_sts=30) and (wrk_sts=6 or wrk_sts=16 or status=4 or status=5) order by io_pri desc,create_time,wrk_no ASC </select> src/main/webapp/static/wcs/images/logo.pngsrc/main/webapp/static/wms/image/logo.png