From 78b8f5141aa11bfa0f94361407ed43362c8852ce Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期一, 19 一月 2026 17:28:55 +0800
Subject: [PATCH] WMS功能完善
---
src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java | 242 +++++++++++++++++++++++++++++++++++++++++------
1 files changed, 208 insertions(+), 34 deletions(-)
diff --git a/src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java
index 4ffaa27..f8ac53d 100644
--- a/src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java
@@ -1,16 +1,20 @@
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.*;
import com.zy.asrs.entity.mes.TransArrivalStation;
+import com.zy.asrs.entity.mes.TransInOutStationAllow;
import com.zy.asrs.entity.mes.TransParent;
import com.zy.asrs.entity.rcs.*;
import com.zy.asrs.enums.RcsRetMethodEnum;
+import com.zy.asrs.mapper.BasDevpMapper;
import com.zy.asrs.mapper.BlockStationMapper;
import com.zy.asrs.mapper.BlockTaskMapper;
import com.zy.asrs.service.*;
+import com.zy.common.utils.HttpHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@@ -25,10 +29,7 @@
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -45,6 +46,10 @@
@Value("${mes.defaultUserId}")
public long defaultUserId;
+ // wcs鍦板潃
+ @Value("${wcs.url}")
+ private String WCS_URL;
+
@Resource
private MesService mesService;
@@ -55,7 +60,7 @@
@Resource
private BlockTaskMapper blockTaskMapper;
@Resource
- private TaskDetlServiceImpl taskDetlService;
+ private TaskDetlService taskDetlService;
@Resource
private WrkMastService wrkMastService;
@@ -172,7 +177,7 @@
* @param rcsFactory 1 娴峰悍锛�2 鍗庢檽锛�
* @return
*/
- public int submitTask(RcsTaskSubmit rcsTaskSubmit, int rcsFactory){
+ public RcsReturn submitTask(RcsTaskSubmit rcsTaskSubmit, int rcsFactory){
// String response = "";
// boolean success = false;
@@ -218,22 +223,46 @@
// }
// }
// return success ? 1 : 0;
+ RcsReturn rcsReturn = new RcsReturn();
+ boolean success = false;
+ String url = rcsFactory == 2 ? HX_URL : HIK_URL + "api/robot/controller/task/submit";
+ String response = "";
+ try {
+ // 妯℃嫙杩斿洖
+// rcsReturn.setCode("SUCCESS");
+// success = true;
+// log.info("鍛煎彨agv鎼繍鎴愬姛锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", url, JSON.toJSONString(rcsTaskSubmit), response);
- String url = rcsFactory == 2 ? HX_URL :HIK_URL + "api/robot/controller/task/submit";
- String response = sendPost(url, JSONObject.toJSONString(rcsTaskSubmit));
- 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;
+ response = sendPost(url, JSONObject.toJSONString(rcsTaskSubmit));
+ if (!StringUtils.isEmpty(response) && response.contains("code")) {
+ rcsReturn = JSONObject.parseObject(response, RcsReturn.class);
+ if ("SUCCESS".equals(rcsReturn.getCode())) {
+ success = true;
+ log.info("鍛煎彨agv鎼繍鎴愬姛锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", url, JSON.toJSONString(rcsTaskSubmit), response);
+ } else {
+ log.error("鍛煎彨agv鎼繍澶辫触锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", 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 0;
+ return rcsReturn;
}
/**
@@ -271,7 +300,7 @@
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())) {
@@ -296,7 +325,7 @@
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())) {
@@ -310,6 +339,9 @@
return 0;
}
+
+ @Resource
+ private BasDevpMapper basDevpMapper;
/**
* 2.2.1浠诲姟鎵ц鍥為
@@ -333,7 +365,7 @@
try {
// q3,q8=1
- if ("1".equals(carrierType)) { //AGV
+// if ("1".equals(carrierType)) { //AGV
EntityWrapper<Task> wrapper = new EntityWrapper<>();
wrapper.eq("task_no", robotTaskCode);
Task task = taskService.selectOne(wrapper);
@@ -359,6 +391,100 @@
// JSONObject taskMemo = JSONObject.parseObject(task.getMemo());
// mesService.outFeedbackByTuo(taskMemo.getString("OrderNo"), task);
} break;
+ case APPLY_PUT: { // 鏀捐揣鐢宠
+ String staNo = task.getStaNo();
+ BasDevp basDevp = basDevpMapper.selectById(staNo);
+ if(basDevp.getAutoing().equals("Y") && basDevp.getLoading().equals("N") && basDevp.getWrkNo() == 0) {
+
+ // 205 瑙﹀彂鏉$爜鎵弿
+ if (staNo.equals("205")) {
+ Map<String,Object> params = new HashMap<>();
+ params.put("siteId",staNo);
+ String response = new HttpHandler.Builder()
+ .setUri(WCS_URL)
+ .setPath("/site/startScan")
+ .setParams(params)
+ .build()
+ .doPost();
+ log.info("{}鏀捐揣鐢宠缁檞cs涓嬪彂鏉$爜鎵弿鍘熷杩斿洖:{}",staNo,response);
+ }
+
+ // 婊¤冻鏀捐揣鏉′欢锛岃皟鐢≧CS浠诲姟缁х画鎵ц
+ RcsTaskContinue rcsTaskContinue = new RcsTaskContinue();
+ rcsTaskContinue.setRobotTaskCode(robotTaskCode);
+ rcsTaskContinue.setTriggerType("TASK");
+ rcsTaskContinue.setTriggerCode(robotTaskCode);
+ int success = continueTask(rcsTaskContinue, 1);
+ if(success != 1) {
+ rcsReturn.setCode("Err_RobotCodeNotMatch");
+ rcsReturn.setMessage("缁х画鎵ц澶辫触");
+ JSONObject data = new JSONObject();
+ data.put("robotTaskCode", robotTaskCode);
+ rcsReturn.setData(data);
+ return rcsReturn;
+ }
+ }else {
+ log.warn("绔欑偣锛歿}锛屼笉婊¤冻鏀捐揣鏉′欢锛岃嚜鍔細{}锛屾棤鐗╋細{}锛屼换鍔″彿锛歿}",staNo,basDevp.getAutoing(),basDevp.getLoading(),basDevp.getWrkNo());
+ rcsReturn.setCode("Err_RobotCodeNotMatch");
+ rcsReturn.setMessage("绔欑偣涓嶆弧瓒虫斁璐ф潯浠�");
+ JSONObject data = new JSONObject();
+ data.put("robotTaskCode", robotTaskCode);
+ rcsReturn.setData(data);
+ return rcsReturn;
+ }
+ } break;
+ case APPLY_PICK: { // 鍙栬揣鐢宠
+ String staNo = task.getSourceStaNo();
+ BasDevp basDevp = basDevpMapper.selectById(staNo);
+ if(basDevp.getAutoing().equals("Y") && basDevp.getLoading().equals("Y")
+ && basDevp.getWrkNo() > 0 && basDevp.getWrkNo() <= 9990) {
+ // 婊¤冻鏀捐揣鏉′欢锛岃皟鐢≧CS浠诲姟缁х画鎵ц
+ RcsTaskContinue rcsTaskContinue = new RcsTaskContinue();
+ rcsTaskContinue.setRobotTaskCode(robotTaskCode);
+ rcsTaskContinue.setTriggerType("TASK");
+ rcsTaskContinue.setTriggerCode(robotTaskCode);
+ int success = continueTask(rcsTaskContinue, 1);
+ if(success != 1) {
+ rcsReturn.setCode("Err_RobotCodeNotMatch");
+ rcsReturn.setMessage("缁х画鎵ц澶辫触");
+ JSONObject data = new JSONObject();
+ data.put("robotTaskCode", robotTaskCode);
+ rcsReturn.setData(data);
+ return rcsReturn;
+ }
+ }else {
+ log.warn("绔欑偣锛歿}锛屼笉婊¤冻鍙栬揣鏉′欢锛岃嚜鍔細{}锛屾棤鐗╋細{}锛屼换鍔″彿锛歿}",staNo,basDevp.getAutoing(),basDevp.getLoading(),basDevp.getWrkNo());
+ rcsReturn.setCode("Err_RobotCodeNotMatch");
+ rcsReturn.setMessage("绔欑偣涓嶆弧瓒虫斁璐ф潯浠�");
+ JSONObject data = new JSONObject();
+ data.put("robotTaskCode", robotTaskCode);
+ rcsReturn.setData(data);
+ return rcsReturn;
+ }
+ } break;
+ case PICK_COMPLETE: { // 鍙栬揣瀹屾垚
+ String staNo = task.getSourceStaNo();
+
+ // 娓呴櫎杈撻�佺嚎浠诲姟鍙�
+ Map<String,Object> params = new HashMap<>();
+ params.put("siteId",staNo);
+ params.put("workNo",0);
+ params.put("staNo", 0);
+ params.put("pakMk","Y");
+ String response = new HttpHandler.Builder()
+ .setUri(WCS_URL)
+ .setPath("/site/detl/update")
+ .setParams(params)
+ .build()
+ .doPost();
+ log.info("agv鍙嶉pickComplete缁檞cs鍙戝懡浠�:{},杩斿洖锛歿}",JSONObject.toJSONString(params),response);
+ // agv缁х画鎵ц
+// TransInOutStationAllow inOutStationAllow = new TransInOutStationAllow();
+// inOutStationAllow.setTaskno(robotTaskCode);
+// inOutStationAllow.setStatus("Y");
+// inOutStationAllow.setAgvCode("agv001");
+// mesService.allowOutStation(inOutStationAllow);
+ } break;
case TASK_END: {
// 鏇存柊浠诲姟鐘舵�佺瓑鍐呴儴閫昏緫
task.setWrkSts(304L); // 301 浠诲姟涓嬪彂銆�302 浠诲姟鎵ц銆�303 浠诲姟涓柇銆�304 浠诲姟缁撴潫
@@ -367,6 +493,37 @@
taskService.updateById(task);
// 浠诲姟瀹屾垚
// mesService.reporterTask(rcsReporterTask);
+
+ // 鍏ョ珛搴撴椂锛屽尯鍒嗘槸绌烘墭杩樻槸婊℃墭锛岀粰杈撻�佺嚎涓嬪彂鍛戒护9990 绌猴紝9995婊�
+ // 渚ч潰205 9996绌猴紝9997婊�
+ String transType = memo.getString("TransType");
+ if("02".equals(transType) || "04".equals(transType)) {
+ int wrkNo = 9995;
+ if("02".equals(transType)) {
+ TaskDetl taskDetl = taskDetlService.selectOne(new EntityWrapper<TaskDetl>().eq("wrk_no", task.getWrkNo()));
+ if (taskDetl != null) {
+ if("tuopan".equals(taskDetl.getMatnr())){
+ wrkNo = 9990;
+ }
+ }
+ }
+ int staNo = Integer.parseInt(task.getStaNo());
+ if(staNo == 205) { // 渚ч潰浠诲姟鍙疯浆鎹�
+ wrkNo = wrkNo == 9990 ? 9996 : 9997;
+ }
+ Map<String,Object> params = new HashMap<>();
+ params.put("siteId",staNo);
+ params.put("workNo",wrkNo);
+ params.put("staNo", staNo == 205 ? 205 : (staNo-1) );
+ params.put("pakMk","Y");
+ String response = new HttpHandler.Builder()
+ .setUri(WCS_URL)
+ .setPath("/site/detl/update")
+ .setParams(params)
+ .build()
+ .doPost();
+ log.info("agv鍙嶉end缁檞cs鍙戝懡浠�:{},杩斿洖锛歿}",JSONObject.toJSONString(params),response);
+ }
// EntityWrapper<TaskDetl> wapper2 = new EntityWrapper<>();
// wapper2.eq("wrk_no", task.getWrkNo())
@@ -403,14 +560,16 @@
mesService.applyOutStation(apply);
} else if (RcsRetMethodEnum.ARRIVE_OFF_STATION.getCode().equals(method)) {
mesService.outStation(apply);
+ // agv缁х画鎵ц
+
+// TransInOutStationAllow inOutStationAllow = new TransInOutStationAllow();
+// inOutStationAllow.setTaskno(robotTaskCode);
+// inOutStationAllow.setStatus("Y");
+// inOutStationAllow.setAgvCode("agv001");
+// mesService.allowOutStation(inOutStationAllow);
}
} break;
case ARRIVE_ON_STATION: {
- // TODO: 濡傛灉浜х嚎鏄繍杈撹捣鐐癸紝鍒欎笉鍙戦�佸埌绔欏畬鎴愶紝鏆傛椂璋冭瘯浣跨敤lG锛屾湭瀹炵幇鍒ゆ柇
- if (rcsReporterTask.getCurrentSeq() == 0 && task.getSourceStaNo().startsWith("LG")) {
- break;
- }
-
EntityWrapper<TaskDetl> wapper2 = new EntityWrapper<>();
wapper2.eq("wrk_no", task.getWrkNo())
.eq("matnr", memo.getString("Itemno"))
@@ -419,7 +578,7 @@
TransArrivalStation arrivalStation = new TransArrivalStation();
arrivalStation.setTaskno(robotTaskCode);
arrivalStation.setTaskname(memo.getString("taskName"));
- arrivalStation.setTuoPanId(taskDetl.getZpallet()); // memo.getString("TuoPanId")
+ arrivalStation.setTuoPanId(task.getBarcode()); // memo.getString("TuoPanId")
arrivalStation.setProductLineId(memo.getString("ProductLineId"));
String transType = memo.getString("TransType");
arrivalStation.setDaotype(transType);
@@ -431,18 +590,19 @@
arrivalStation.setOrderNo(memo.getString("OrderNo"));
arrivalStation.setAgvCode(singleRobotCode);
arrivalStation.setItemno(memo.getString("Itemno"));
- String memo2 = taskDetl.getMemo();
- List<String> itemBarCode = new ArrayList<>();
- Matcher matcher = Pattern.compile("\"([^\"]*)\"").matcher(memo2);
- while (matcher.find()) {
- itemBarCode.add(matcher.group(1));
- }
- arrivalStation.setItemBarcode(itemBarCode);
+ String memo2 = taskDetl == null ? "":taskDetl.getMemo();
+ String[] array = memo2.split(",");
+// List<String> itemBarCode = new ArrayList<>();
+// Matcher matcher = Pattern.compile("\"([^\"]*)\"").matcher(memo2);
+// while (matcher.find()) {
+// itemBarCode.add(matcher.group(1));
+// }
+ arrivalStation.setItemBarcode(Arrays.asList(array));
mesService.arriveOnStation(arrivalStation);
} break;
default: {} break;
}
- }
+// }
// else if ("CTU".equals(carrierType)) { //CTU
// EntityWrapper<WrkMast> wrapper = new EntityWrapper<>();
// wrapper.eq("task_no", robotTaskCode);
@@ -679,5 +839,19 @@
return result.toString();
}
+ @Override
+ public RcsReturn siteBind(SiteBind siteBind) {
+ RcsReturn rcsReturn = new RcsReturn();
+ String url = HIK_URL + "api/robot/controller/site/bind";
+ String response = sendPost(url, JSONObject.toJSONString(siteBind));
+ if (!StringUtils.isEmpty(response) && response.contains("code")){
+ rcsReturn = JSONObject.parseObject(response, RcsReturn.class);
+ } else {
+ rcsReturn.setCode("ERROR");
+ rcsReturn.setMessage("璋冪敤缁戝畾鎺ュ彛RCS鏃犺繑鍥�");
+ }
+ return rcsReturn;
+ }
+
// endregion
}
--
Gitblit v1.9.1