| | |
| | | package com.zy.asrs.service.impl; |
| | | |
| | | import com.alibaba.excel.util.StringUtils; |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.zy.asrs.entity.*; |
| | |
| | | @Value("${mes.defaultUserId}") |
| | | public long defaultUserId; |
| | | |
| | | @Resource |
| | | private BasStationService basStationService; |
| | | |
| | | @Resource |
| | | private MesService mesService; |
| | |
| | | |
| | | // region 海康RCS,AGV |
| | | |
| | | @Resource |
| | | private ApiLogService apiLogService; |
| | | |
| | | /** |
| | | * 2.1.2任务下发接口 |
| | | * 厂家:海量、华晓 |
| | |
| | | * @param rcsFactory 1 海康;2 华晓; |
| | | * @return |
| | | */ |
| | | public int submitTask(RcsTaskSubmit rcsTaskSubmit, int rcsFactory){ |
| | | return 1; |
| | | public RcsReturn submitTask(RcsTaskSubmit rcsTaskSubmit, int rcsFactory){ |
| | | RcsReturn rcsReturn = new RcsReturn(); |
| | | boolean success = false; |
| | | String url = rcsFactory == 2 ? HX_URL : HIK_URL + "api/robot/controller/task/submit"; |
| | | String response = ""; |
| | | try { |
| | | response = sendPost(url, JSONObject.toJSONString(rcsTaskSubmit)); |
| | | if (!StringUtils.isEmpty(response) && response.contains("code")) { |
| | | rcsReturn = JSONObject.parseObject(response, RcsReturn.class); |
| | | if ("SUCCESS".equals(rcsReturn.getCode())) { |
| | | // 模拟返回 |
| | | // rcsReturn.setCode("SUCCESS"); |
| | | // JSONObject jsonObject = new JSONObject(); |
| | | // jsonObject.put("robotTaskCode","2025121301"); |
| | | // rcsReturn.setData(jsonObject); |
| | | success = true; |
| | | |
| | | // String url = rcsFactory == 2 ? HX_URL :HIK_URL + "api/robot/controller/task/submit"; |
| | | // String response = sendPost(url, rcsTaskSubmit.toString()); |
| | | // if (!StringUtils.isEmpty(response) && response.contains("code")){ |
| | | // RcsReturn rcsReturn = JSONObject.parseObject(response, RcsReturn.class); |
| | | // if("SUCCESS".equals(rcsReturn.getCode())) { |
| | | // JSONObject data = rcsReturn.getData(); |
| | | // String robotTaskCode = data.getString("robotTaskCode"); |
| | | // if (robotTaskCode.equals(rcsTaskSubmit.getRobotTaskCode())){ |
| | | // return 1; |
| | | // } |
| | | // } |
| | | // } |
| | | // |
| | | // return 0; |
| | | log.info("呼叫agv搬运成功!url:{};request:{};response:{}", url, JSON.toJSONString(rcsTaskSubmit), response); |
| | | } else { |
| | | log.error("呼叫agv搬运失败!url:{};request:{};response:{}", url, JSON.toJSONString(rcsTaskSubmit), response); |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("呼叫agv搬运异常", e); |
| | | } finally { |
| | | try { |
| | | // 保存接口日志 |
| | | apiLogService.save( |
| | | "呼叫agv搬运", |
| | | url, |
| | | null, |
| | | "127.0.0.1", |
| | | JSON.toJSONString(rcsTaskSubmit), |
| | | response, |
| | | success |
| | | ); |
| | | } catch (Exception e) { |
| | | log.error("呼叫agv搬运保存接口日志异常", e); |
| | | } |
| | | } |
| | | return rcsReturn; |
| | | } |
| | | |
| | | /** |
| | |
| | | public int continueTask(RcsTaskContinue rcsTaskContinue, int rcsFactory){ |
| | | |
| | | String url = rcsFactory == 2 ? HX_URL :HIK_URL + "api/robot/controller/task/extend/continue"; |
| | | String response = sendPost(url, rcsTaskContinue.toString()); |
| | | String response = sendPost(url, JSONObject.toJSONString(rcsTaskContinue)); |
| | | if (!StringUtils.isEmpty(response) && response.contains("code")){ |
| | | RcsReturn rcsReturn = JSONObject.parseObject(response, RcsReturn.class); |
| | | if("SUCCESS".equals(rcsReturn.getCode())) { |
| | |
| | | public int cancelTask(RcsTaskCancel rcsTaskCancel, int rcsFactory){ |
| | | |
| | | String url = rcsFactory == 2 ? HX_URL :HIK_URL + "api/robot/controller/task/cancel"; |
| | | String response = sendPost(url, rcsTaskCancel.toString()); |
| | | String response = sendPost(url, JSONObject.toJSONString(rcsTaskCancel)); |
| | | if (!StringUtils.isEmpty(response) && response.contains("code")){ |
| | | RcsReturn rcsReturn = JSONObject.parseObject(response, RcsReturn.class); |
| | | if("SUCCESS".equals(rcsReturn.getCode())) { |
| | |
| | | private int notifyEqpt(RcsEqptNotify rcsEqptNotify, int rcsFactory){ |
| | | |
| | | String url = rcsFactory == 2 ? HX_URL :HIK_URL + "api/wcs/robot/eqpt/notify"; |
| | | String response = sendPost(url, rcsEqptNotify.toString()); |
| | | String response = sendPost(url, JSONObject.toJSONString(rcsEqptNotify)); |
| | | if (!StringUtils.isEmpty(response) && response.contains("code")){ |
| | | RcsReturn rcsReturn = JSONObject.parseObject(response, RcsReturn.class); |
| | | if("SUCCESS".equals(rcsReturn.getCode())) { |
| | |
| | | // start : 任务开始;outbin : 走出储位;end : 任务完成 |
| | | String method = values.getString("method"); |
| | | String carrierType = values.getString("carrierType"); |
| | | Date now = new Date(); |
| | | |
| | | try { |
| | | if ("Q3".equals(carrierType) || "Q8".equals(carrierType)) { //AGV |
| | | if (singleRobotCode.equals("14") || singleRobotCode.equals("15")) { // 两台CTU库机器人编号 |
| | | WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("task_no", robotTaskCode)); |
| | | if(wrkMast != null) { |
| | | Integer ioType = wrkMast.getIoType(); |
| | | switch (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method))) { |
| | | case TASK_START: { |
| | | if (ioType == 1 || ioType == 10 || ioType == 53) { |
| | | wrkMast.setCrnStrTime(now); |
| | | wrkMast.setModiTime(now); |
| | | wrkMastService.updateById(wrkMast); |
| | | } else if (ioType == 101 || ioType == 110 || ioType == 103) { |
| | | |
| | | } else { |
| | | log.error("{}ioType{}不在end反馈处理中", wrkMast.getWrkNo(), ioType); |
| | | } |
| | | } |
| | | break; |
| | | case TASK_END: { |
| | | if (ioType == 1 || ioType == 10 || ioType == 53) { |
| | | wrkMast.setWrkSts(4L); |
| | | wrkMast.setCrnEndTime(now); |
| | | wrkMast.setModiTime(now); |
| | | wrkMastService.updateById(wrkMast); |
| | | } else if (ioType == 101 || ioType == 110 || ioType == 103) { |
| | | |
| | | } else { |
| | | log.error("{}ioType{}不在end反馈处理中", wrkMast.getWrkNo(), ioType); |
| | | } |
| | | } |
| | | break; |
| | | default: |
| | | } |
| | | } |
| | | } else { //AGV |
| | | EntityWrapper<Task> wrapper = new EntityWrapper<>(); |
| | | wrapper.eq("task_no", robotTaskCode); |
| | | Task task = taskService.selectOne(wrapper); |
| | |
| | | |
| | | switch (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method))) { |
| | | case TASK_START: { |
| | | if(memo.getString("TransType").equals("05") || memo.getString("TransType").equals("01")) { |
| | | BasStation station = basStationService.selectOne(new EntityWrapper<BasStation>().eq("dev_no", task.getSourceStaNo())); |
| | | if(station.getLocSts().equals("R")) { |
| | | station.setLocSts("O"); |
| | | station.setBarcode(""); |
| | | station.setModiTime(new Date()); |
| | | basStationService.updateById(station); |
| | | } else { |
| | | log.error("agv回调start,接驳点状态不为R,agv任务号:{},状态:{}",task.getTaskNo(),task.getWrkSts()); |
| | | } |
| | | } |
| | | task.setWrkSts(302L); // 301 任务下发、302 任务执行、303 任务中断、304 任务结束 |
| | | task.setModiTime(new Date()); |
| | | task.setModiUser(defaultUserId); |
| | |
| | | // case TASK_OUT_BIN: {} break; |
| | | case TASK_END: { |
| | | // 更新任务状态等内部逻辑 |
| | | task.setWrkSts(304L); // 301 任务下发、302 任务执行、303 任务中断、304 任务结束 |
| | | if(memo.getString("TransType").equals("06") || memo.getString("TransType").equals("02")) { |
| | | // 06下刀来的空刀架需要回去,02来的要上刀05的空刀架上满后需要回去,pda上做任务转换 |
| | | task.setWrkSts(305L); // 305.任务转换 |
| | | BasStation station = basStationService.selectOne(new EntityWrapper<BasStation>().eq("dev_no", task.getStaNo())); |
| | | if(station.getLocSts().equals("S")) { |
| | | station.setLocSts("F"); |
| | | station.setModiTime(new Date()); |
| | | basStationService.updateById(station); |
| | | } else { |
| | | log.error("agv回调end,接驳点状态不为S,agv任务号:{},状态:{}",task.getTaskNo(),task.getWrkSts()); |
| | | } |
| | | } else { |
| | | task.setWrkSts(304L); // 301 任务下发、302 任务执行、303 任务中断、304 任务结束 |
| | | } |
| | | task.setModiTime(new Date()); |
| | | task.setModiUser(defaultUserId); |
| | | taskService.updateById(task); |
| | | // 任务完成 |
| | | mesService.reporterTask(rcsReporterTask); |
| | | |
| | | // 更新接驳位置状态 |
| | | |
| | | |
| | | // EntityWrapper<TaskDetl> wapper2 = new EntityWrapper<>(); |
| | | // wapper2.eq("wrk_no", task.getWrkNo()) |
| | |
| | | TransArrivalStation arrivalStation = new TransArrivalStation(); |
| | | arrivalStation.setTaskno(robotTaskCode); |
| | | arrivalStation.setTaskname(memo.getString("taskName")); |
| | | arrivalStation.setTuoPanId(taskDetl == null || taskDetl.getZpallet() == null ? "" : taskDetl.getZpallet()); |
| | | // arrivalStation.setTuoPanId(taskDetl == null || taskDetl.getZpallet() == null ? "" : taskDetl.getZpallet()); |
| | | arrivalStation.setDaotype(memo.getString("TransType")); |
| | | arrivalStation.setProductLineId(memo.getString("ProductLineId")); |
| | | // arrivalStation.setStationId(task.getStaNo()); |
| | |
| | | } break; |
| | | default: {} break; |
| | | } |
| | | } else if ("CTU".equals(carrierType)) { //CTU |
| | | EntityWrapper<WrkMast> wrapper = new EntityWrapper<>(); |
| | | wrapper.eq("task_no", robotTaskCode); |
| | | WrkMast task = wrkMastService.selectOne(wrapper); |
| | | if (task == null || !task.getTaskNo().equals(robotTaskCode)) { |
| | | rcsReturn.setCode("Err_RobotCodeNotMatch"); |
| | | rcsReturn.setMessage(""); |
| | | JSONObject data = new JSONObject(); |
| | | data.put("robotTaskCode", robotTaskCode); |
| | | rcsReturn.setData(data); |
| | | return rcsReturn; |
| | | } |
| | | // JSONObject memo = JSONObject.parseObject(task.getMemo()); |
| | | |
| | | switch (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method))) { |
| | | case TASK_START: { |
| | | // task.setWrkSts(302L); // 301 任务下发、302 任务执行、303 任务中断、304 任务结束 |
| | | } |
| | | // else if ("CTU".equals(carrierType)) { //CTU |
| | | // EntityWrapper<WrkMast> wrapper = new EntityWrapper<>(); |
| | | // wrapper.eq("task_no", robotTaskCode); |
| | | // WrkMast task = wrkMastService.selectOne(wrapper); |
| | | // if (task == null || !task.getTaskNo().equals(robotTaskCode)) { |
| | | // rcsReturn.setCode("Err_RobotCodeNotMatch"); |
| | | // rcsReturn.setMessage(""); |
| | | // JSONObject data = new JSONObject(); |
| | | // data.put("robotTaskCode", robotTaskCode); |
| | | // rcsReturn.setData(data); |
| | | // return rcsReturn; |
| | | // } |
| | | //// JSONObject memo = JSONObject.parseObject(task.getMemo()); |
| | | // |
| | | // switch (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method))) { |
| | | // case TASK_START: { |
| | | //// task.setWrkSts(302L); // 301 任务下发、302 任务执行、303 任务中断、304 任务结束 |
| | | //// task.setModiTime(new Date()); |
| | | //// task.setModiUser(defaultUserId); |
| | | //// taskService.updateById(task); |
| | | // } break; |
| | | //// case TASK_OUT_BIN: {} break; |
| | | // case TASK_END: { |
| | | // // 更新任务状态等内部逻辑 |
| | | // long wrkSts = task.getWrkSts(); // 1.入库;101.出库; |
| | | // if (task.getIoType() == 1) { |
| | | // wrkSts = 4L; |
| | | // } else if (task.getIoType() == 101) { |
| | | // wrkSts = 14L; |
| | | // } |
| | | // |
| | | // task.setWrkSts(wrkSts); // 4.入库完成;14.已出库未确认; |
| | | // task.setModiTime(new Date()); |
| | | // task.setModiUser(defaultUserId); |
| | | // taskService.updateById(task); |
| | | } break; |
| | | // case TASK_OUT_BIN: {} break; |
| | | case TASK_END: { |
| | | // 更新任务状态等内部逻辑 |
| | | long wrkSts = task.getWrkSts(); // 1.入库;101.出库; |
| | | if (task.getIoType() == 1) { |
| | | wrkSts = 4L; |
| | | } else if (task.getIoType() == 101) { |
| | | wrkSts = 14L; |
| | | } |
| | | |
| | | task.setWrkSts(wrkSts); // 4.入库完成;14.已出库未确认; |
| | | task.setModiTime(new Date()); |
| | | task.setModiUser(defaultUserId); |
| | | wrkMastService.updateById(task); |
| | | |
| | | // TODO:任务完成触发出入库变更操作 |
| | | |
| | | |
| | | // // 入库完成 |
| | | // mesService.inFeedback(memo.getString("OrderNo")); |
| | | // // 出库完成 |
| | | // mesService.outFeedback(memo.getString("OrderNo")); |
| | | } break; |
| | | default: {} break; |
| | | } |
| | | } |
| | | // wrkMastService.updateById(task); |
| | | // |
| | | // // TODO:任务完成触发出入库变更操作 |
| | | // |
| | | // |
| | | //// // 入库完成 |
| | | //// mesService.inFeedback(memo.getString("OrderNo")); |
| | | //// // 出库完成 |
| | | //// mesService.outFeedback(memo.getString("OrderNo")); |
| | | // } break; |
| | | // default: {} break; |
| | | // } |
| | | // } |
| | | |
| | | // 返回RCS |
| | | rcsReturn.setCode("SUCCESS"); |
| | |
| | | log.info("sendPost - {} - {}", url, param); |
| | | URL realUrl = new URL(url); |
| | | URLConnection conn = realUrl.openConnection(); |
| | | conn.setRequestProperty("accept", "*/*"); |
| | | conn.setRequestProperty("connection", "Keep-Alive"); |
| | | conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); |
| | | conn.setRequestProperty("Accept-Charset", "utf-8"); |
| | | conn.setRequestProperty("Content-Type", "application/json;charset=utf-8"); |
| | | conn.setRequestProperty("Content-Type", "application/json"); |
| | | conn.setRequestProperty("Content-Length", "<calculated when request is sent>"); |
| | | conn.setRequestProperty("Host", "<calculated when request is sent>"); |
| | | conn.setRequestProperty("Accept", "*/*"); |
| | | conn.setRequestProperty("Accept-Encoding", "gzip, deflate, br"); |
| | | conn.setRequestProperty("Connection", "keep-alive"); |
| | | |
| | | conn.setRequestProperty("X-lr-request-id", String.valueOf(new Date().getTime())); |
| | | conn.setRequestProperty("X-lr-version", "4.3"); |
| | | conn.setConnectTimeout(5000); |
| | | conn.setReadTimeout(5000); |
| | | conn.setDoOutput(true); |