From 13c2be4774f4afbb34fa70be97c96802f07b15ff Mon Sep 17 00:00:00 2001
From: zyx <zyx123456>
Date: 星期四, 04 七月 2024 15:35:02 +0800
Subject: [PATCH] #MES接口
---
src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java | 159 +++++++++++++++++++++++++
src/main/java/com/zy/asrs/controller/OpenController.java | 22 +++
src/main/java/com/zy/asrs/entity/param/CheckParam.java | 13 ++
src/main/java/com/zy/asrs/entity/param/MesOrderReportParam.java | 53 ++++++++
src/main/webapp/static/js/agvLocMast/locMast.js | 2
src/main/java/com/zy/asrs/entity/param/OrderSyncParam.java | 8 +
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java | 38 ++++++
src/main/java/com/zy/asrs/service/OpenService.java | 5
src/main/resources/application.yml | 9 +
9 files changed, 298 insertions(+), 11 deletions(-)
diff --git a/src/main/java/com/zy/asrs/controller/OpenController.java b/src/main/java/com/zy/asrs/controller/OpenController.java
index 7b763f5..88bca34 100644
--- a/src/main/java/com/zy/asrs/controller/OpenController.java
+++ b/src/main/java/com/zy/asrs/controller/OpenController.java
@@ -308,7 +308,7 @@
return R.parse(BaseRes.PARAM);
}
- String docName = param.getChildren().get(0).getIQuantity() > 0 ? "閾跺骇閲囪喘鍏ュ簱鍗�" : "閾跺骇閲囪喘閫�璐у崟";
+ String docName = !Cools.isEmpty(param.getOrderType()) ? param.getOrderType() : param.getChildren().get(0).getIQuantity() > 0 ? "閾跺骇閲囪喘鍏ュ簱鍗�" : "閾跺骇閲囪喘閫�璐у崟";
boolean pakin = param.getChildren().get(0).getIQuantity() > 0 ? true : false;
openService.syncOrder(param,pakin,docName);
@@ -317,6 +317,26 @@
}
+ /*
+ 鐩樼偣鎺ュ彛
+ */
+ @PostMapping("/check/default/v1")
+ @AppAuth(memo = "搴撳瓨鐩樼偣")
+ public synchronized R checkLoc(@RequestHeader(required = false) String appkey,
+ @RequestBody(required = true) CheckParam param,
+ HttpServletRequest request){
+ auth(appkey, param, request);
+ if (Cools.isEmpty(param)) {
+ return R.parse(BaseRes.PARAM);
+ }
+
+ openService.checkAndAdjustLocDetl(param);
+
+ return R.ok("搴撳瓨璋冩暣鎴愬姛");
+
+ }
+
+
@PostMapping("/order/pakout/default/v1")
@AppAuth(memo = "鍚屾宸ュ崟鍗曟嵁")
public synchronized R orderPakout(@RequestHeader(required = false) String appkey,
diff --git a/src/main/java/com/zy/asrs/entity/param/CheckParam.java b/src/main/java/com/zy/asrs/entity/param/CheckParam.java
new file mode 100644
index 0000000..93569bb
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/param/CheckParam.java
@@ -0,0 +1,13 @@
+package com.zy.asrs.entity.param;
+
+import com.zy.common.model.DetlDto;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class CheckParam {
+ private String locNo;
+ private String containerCode;
+ private List<DetlDto> locDetls;
+}
diff --git a/src/main/java/com/zy/asrs/entity/param/MesOrderReportParam.java b/src/main/java/com/zy/asrs/entity/param/MesOrderReportParam.java
new file mode 100644
index 0000000..93e6524
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/param/MesOrderReportParam.java
@@ -0,0 +1,53 @@
+package com.zy.asrs.entity.param;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class MesOrderReportParam {
+ //缂栫爜
+ private String code;
+ //澶囨敞
+ private String remark;
+ private List<TransferOrderItem> transferOrderItems;
+
+ @Data
+ public static class TransferOrderItem{
+ private List<InventoryDetail> inventoryDetails;
+ //琛屽娉� 鍗曟嵁鍙�
+ private String remark;
+ //鎺ユ敹浠撲綅
+ private String targetLocationCode;
+
+ @Data
+ public static class InventoryDetail{
+ private Amount amount;
+ private BizKey bizKey;
+ //鍙戝嚭浠撲綅
+ private String locationCode;
+ //鐗╂枡缂栫爜
+ private String materialCode;
+ //璐ㄩ噺鐘舵��
+ private Integer qcStatus;
+ //浠撳偍鐘舵��
+ private Integer storageStatus;
+
+ @Data
+ public static class Amount{
+ //鏁伴噺
+ private Double amount;
+ //鍗曚綅缂栫爜
+ private String unitCode;
+ //鍗曚綅鍚嶇О 浜岄�変竴
+ private String unitName;
+ }
+
+ @Data
+ public static class BizKey{
+ //鎵规
+ private String batchNo;
+ }
+ }
+ }
+}
diff --git a/src/main/java/com/zy/asrs/entity/param/OrderSyncParam.java b/src/main/java/com/zy/asrs/entity/param/OrderSyncParam.java
index 5f3f9c3..fc67c8d 100644
--- a/src/main/java/com/zy/asrs/entity/param/OrderSyncParam.java
+++ b/src/main/java/com/zy/asrs/entity/param/OrderSyncParam.java
@@ -12,8 +12,10 @@
//鍏ュ嚭搴撴爣璁�
private Integer pakin;
+ //鍗曟嵁绫诲瀷
+ private String orderType;
- //閲囪喘璁㈠崟缂栧彿
+ //璁㈠崟缂栧彿
private String cPOID;
//渚涘簲鍟嗙紪鐮�
private String cVenCode;
@@ -88,10 +90,12 @@
@Data
public static class OrderDetl{
- //閲囪喘璁㈠崟琛屽彿
+ //璁㈠崟琛屽彿
private String ivouchrowno;
//鐗╂枡缂栫爜
private String cInvCode;
+ //鎵瑰彿
+ private String batch;
//闇�姹傛椂闂�
private String dArriveDate;
//闇�姹傛暟閲�
diff --git a/src/main/java/com/zy/asrs/service/OpenService.java b/src/main/java/com/zy/asrs/service/OpenService.java
index 58e5630..93c86d9 100644
--- a/src/main/java/com/zy/asrs/service/OpenService.java
+++ b/src/main/java/com/zy/asrs/service/OpenService.java
@@ -5,6 +5,7 @@
import com.zy.asrs.entity.param.*;
import com.zy.asrs.entity.result.OpenOrderCompeteResult;
import com.zy.asrs.entity.result.StockVo;
+import com.zy.common.model.LocDetlDto;
import java.util.List;
@@ -78,4 +79,8 @@
*/
boolean orderDelete(String orderNo);
+ /*
+ 搴撳瓨鐩樼偣
+ */
+ boolean checkAndAdjustLocDetl(CheckParam params);
}
diff --git a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
index 1d7833c..94cdbb2 100644
--- a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -15,8 +15,11 @@
import com.zy.asrs.service.*;
import com.zy.asrs.utils.MatUtils;
import com.zy.common.model.DetlDto;
+import com.zy.common.model.LocDetlDto;
import com.zy.common.utils.NodeUtils;
+import lombok.Synchronized;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -59,6 +62,10 @@
private WrkDetlService wrkDetlService;
@Autowired
private ReportQueryMapper reportQueryMapper;
+ @Autowired
+ private AgvLocMastService agvLocMastService;
+ @Autowired
+ private AgvLocDetlService agvLocDetlService;
@Override
@Transactional
@@ -918,6 +925,37 @@
return true;
}
+ @Override
+ @Transactional
+ @Synchronized
+ public boolean checkAndAdjustLocDetl(CheckParam params) {
+
+ //鍒ゆ柇搴撲綅鏄惁瀛樺湪
+ AgvLocMast agvLocMast = agvLocMastService.selectById(params.getLocNo());
+ if(Cools.isEmpty(agvLocMast)){
+ throw new CoolException("搴撲綅鍙蜂笉瀛樺湪");
+ }
+
+ //鍒犻櫎鏃у簱瀛�
+ agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",params.getLocNo()));
+
+ //鏂板鐩樼偣搴撳瓨
+ for (DetlDto detlDto : params.getLocDetls()){
+ AgvLocDetl agvLocDetl = new AgvLocDetl();
+ Mat mat = matService.selectByMatnr(detlDto.getMatnr());
+ BeanUtils.copyProperties(mat,agvLocDetl);
+ agvLocDetl.setLocNo(params.getLocNo());
+ agvLocDetl.setSuppCode(params.getContainerCode());
+ agvLocDetl.setAnfme(detlDto.getAnfme());
+ agvLocDetl.setBatch(detlDto.getBatch());
+ agvLocDetl.setThreeCode(detlDto.getCsocode());
+ agvLocDetl.setDeadTime(detlDto.getIsoseq());
+ agvLocDetlService.insert(agvLocDetl);
+ }
+
+ return true;
+ }
+
private Order orderMapping(OrderSyncParam param, Date now, boolean pakin, String docName){
Order order = new Order();
//uuid
diff --git a/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java b/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java
index a4491b0..027e913 100644
--- a/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java
@@ -1,14 +1,17 @@
package com.zy.asrs.task.handler;
+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.core.common.R;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
+import com.zy.asrs.entity.param.MesOrderReportParam;
import com.zy.asrs.service.*;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
+import com.zy.common.utils.HttpHandler;
import lombok.Synchronized;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -17,9 +20,7 @@
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.stream.Collectors;
@Slf4j
@@ -28,6 +29,17 @@
@Value("${agvBasDev.maxWorkNum}")
private int maxWrokNum;
+ @Value("${mes.url}")
+ private String url;
+ @Value("${mes.orderReportPath}")
+ private String orderReportPath;
+ @Value("${mes.getTokenPath}")
+ private String getTokenPath;
+ @Value("${mes.appKey}")
+ private String appKey;
+ @Value("${mes.appSecret}")
+ private String appSecret;
+
@Autowired
private AgvWrkMastService agvWrkMastService;
@@ -51,6 +63,8 @@
private AgvBasDevpService agvBasDevpService;
@Autowired
private AgvWorkService agvWorkService;
+ @Autowired
+ private ApiLogService apiLogService;
@Transactional
public ReturnT<String> completedPutWayWrk(AgvWrkMast agvWrkMast) {
@@ -65,6 +79,8 @@
agvBasDevp = agvWrkMast.getSourceLocNo();
}
+ //鐢ㄤ簬涓婃姤mes鐨勫伐浣滄。鏄庣粏
+ List<AgvWrkDetl> agvWrkDetlListOld = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", agvWrkMast.getWrkNo()));
//淇敼宸ヤ綔妗g姸鎬佷负207.搴撳瓨鏇存柊瀹屾垚
agvWrkMast.setWrkSts(207L);
@@ -222,6 +238,12 @@
});
}
+ //涓婃姤mes
+ MesOrderReportParam param = generateMesParam(agvWrkMast, agvWrkDetlListOld);
+ if(!Cools.isEmpty(param)){
+ doHttpRequest(param,getMesTokenInfo(),"涓婃姤mes鍗曟嵁淇℃伅",url,orderReportPath,null,"127.0.0.1");
+ }
+
return SUCCESS;
}catch (Exception e){
log.error(""+e.getMessage());
@@ -232,7 +254,12 @@
@Transactional
public ReturnT<String> completedCarryWrk(AgvWrkMast agvWrkMast) {
+
try{
+
+ //鐢ㄤ簬涓婃姤mes鐨勫伐浣滄。鏄庣粏
+ List<AgvWrkDetl> agvWrkDetlListOld = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", agvWrkMast.getWrkNo()));
+
Date now = new Date();
int wrkNo = agvWrkMast.getWrkNo();
String orderNo = getOrderNoByWrkNo(wrkNo);
@@ -308,6 +335,13 @@
orderService.checkComplete(o);
});
}
+
+ //涓婃姤mes
+ MesOrderReportParam param = generateMesParam(agvWrkMast, agvWrkDetlListOld);
+ if(!Cools.isEmpty(param)){
+ doHttpRequest(param,getMesTokenInfo(),"涓婃姤mes鍗曟嵁淇℃伅",url,orderReportPath,null,"127.0.0.1");
+ }
+
return SUCCESS;
}catch (Exception e){
log.error(""+e.getMessage());
@@ -318,6 +352,9 @@
@Transactional
public ReturnT<String> completedCarryWrk2(AgvWrkMast agvWrkMast) {
try{
+ //鐢ㄤ簬涓婃姤mes鐨勫伐浣滄。鏄庣粏
+ List<AgvWrkDetl> agvWrkDetlListOld = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", agvWrkMast.getWrkNo()));
+
int wrkNo = agvWrkMast.getWrkNo();
String orderNo = getOrderNoByWrkNo(wrkNo);
String agvBasDevp = "";
@@ -353,6 +390,11 @@
String o = map.get("orderNo").toString();
orderService.checkComplete(o);
});
+ }
+ //涓婃姤mes
+ MesOrderReportParam param = generateMesParam(agvWrkMast, agvWrkDetlListOld);
+ if(!Cools.isEmpty(param)){
+ doHttpRequest(param,getMesTokenInfo(),"涓婃姤mes鍗曟嵁淇℃伅",url,orderReportPath,null,"127.0.0.1");
}
return SUCCESS;
}catch (Exception e){
@@ -527,4 +569,113 @@
return wrkMast;
}
+
+ private MesOrderReportParam generateMesParam(AgvWrkMast agvWrkMast, List<AgvWrkDetl> agvWrkDetls){
+
+ if(Cools.isEmpty(agvWrkDetls)){
+ return null;
+ }
+
+ if(agvWrkMast.getIoType() == 53){
+ String locNo = agvWrkMast.getLocNo();
+ agvWrkMast.setLocNo(agvWrkMast.getSourceLocNo());
+ agvWrkMast.setSourceLocNo(locNo);
+ }
+
+ MesOrderReportParam param = new MesOrderReportParam();
+
+ List<MesOrderReportParam.TransferOrderItem> transferOrderItems = new ArrayList<>();
+ List<MesOrderReportParam.TransferOrderItem.InventoryDetail> inventoryDetails = new ArrayList<>();
+ //娣诲姞transferOrderItem灞炴��
+ MesOrderReportParam.TransferOrderItem transferOrderItem = new MesOrderReportParam.TransferOrderItem();
+ transferOrderItem.setRemark(agvWrkDetls.get(0).getOrderNo());
+ transferOrderItem.setTargetLocationCode(agvWrkMast.getLocNo());
+ transferOrderItems.add(transferOrderItem);
+ transferOrderItem.setInventoryDetails(inventoryDetails);
+
+ param.setTransferOrderItems(transferOrderItems);
+
+ for (AgvWrkDetl agvWrkDetl : agvWrkDetls){
+ MesOrderReportParam.TransferOrderItem.InventoryDetail inventoryDetail = new MesOrderReportParam.TransferOrderItem.InventoryDetail();
+ //娣诲姞amount灞炴��
+ MesOrderReportParam.TransferOrderItem.InventoryDetail.Amount amount = new MesOrderReportParam.TransferOrderItem.InventoryDetail.Amount();
+ amount.setAmount(agvWrkDetl.getAnfme());
+ amount.setUnitName(agvWrkDetl.getUnit());
+ inventoryDetail.setAmount(amount);
+ //娣诲姞bizKey灞炴��
+ MesOrderReportParam.TransferOrderItem.InventoryDetail.BizKey bizKey = new MesOrderReportParam.TransferOrderItem.InventoryDetail.BizKey();
+ bizKey.setBatchNo(agvWrkDetl.getThreeCode());
+ inventoryDetail.setBizKey(bizKey);
+ //娣诲姞inventoryDetail灞炴��
+ inventoryDetail.setLocationCode(agvWrkMast.getSourceLocNo());
+ inventoryDetail.setMaterialCode(agvWrkDetl.getMatnr());
+ inventoryDetail.setQcStatus(1);
+ inventoryDetail.setStorageStatus(1);
+ inventoryDetails.add(inventoryDetail);
+ }
+
+ return param;
+ }
+
+ //鑾峰彇mes token淇℃伅
+ private Map<String,Object> getMesTokenInfo(){
+ Map<String,String> param = new HashMap<>();
+ param.put("appKey",appKey);
+ param.put("appSecret",appSecret);
+
+ JSONObject jsonObject = doHttpRequest(param,null, "鑾峰彇MesToken", url, getTokenPath, null, "127.0.0.1");
+
+ Map<String,Object> headParam = new HashMap<>();
+ headParam.put("X-AUTH",JSON.parseObject(jsonObject.get("data").toString()).get("appAccessToken").toString());
+
+ return headParam;
+
+ }
+
+ private JSONObject doHttpRequest(Object requestParam,Map<String,Object> headParam, String namespace, String url, String path, String appkey, String ip){
+
+ String response = "";
+ boolean success = false;
+
+ try {
+ response = new HttpHandler.Builder()
+ .setUri(url)
+ .setPath(path)
+ .setHeaders(headParam)
+ .setJson(JSONObject.toJSONString(requestParam))
+ .setHttps(true)
+ .build()
+ .doPost();
+ JSONObject jsonObject = JSON.parseObject(response);
+
+ if(Cools.isEmpty(jsonObject.get("code")) && Integer.parseInt(jsonObject.get("code").toString()) != 200){
+ throw new CoolException(jsonObject.get("dsc").toString());
+ }
+
+ return jsonObject;
+
+// String succeed = jsonObject.get("succeed").toString();
+//
+// int code = Cools.eq("0",succeed) ? 0 : 1;
+// if(code != 200){
+// throw new CoolException(jsonObject.get("dsc").toString());
+// }
+// success = true;
+
+ }catch (Exception e){
+ log.error(e.getMessage());
+ throw new CoolException(e.getMessage());
+ }finally {
+ apiLogService.save(
+ namespace,
+ url + path,
+ appkey,
+ ip,
+ JSON.toJSONString(JSONObject.toJSONString(requestParam)),
+ response,
+ success
+ );
+ }
+
+ }
}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 968a193..d9e5741 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -90,9 +90,12 @@
ERP:
url: http://39.184.149.30:8877
orderReportPath: /DBMS/U8/CM/add
-MES:
- url: http://192.168.1.55:8010
- orderReportPath: /api/RdAudit
+mes:
+ url: https://v3-ali.blacklake.cn
+ orderReportPath: /api/openapi/domain/web/v1/route/inventory/open/v2/transfer_order/ordinary/_execute
+ getTokenPath: /api/openapi/domain/api/v1/access_token/_get_access_token
+ appKey: cli_1712644281065780
+ appSecret: 6710d24e31e64adc963d4c213b2c9b8e
agvBasDev:
maxWorkNum: 1
diff --git a/src/main/webapp/static/js/agvLocMast/locMast.js b/src/main/webapp/static/js/agvLocMast/locMast.js
index 1951580..f1154c4 100644
--- a/src/main/webapp/static/js/agvLocMast/locMast.js
+++ b/src/main/webapp/static/js/agvLocMast/locMast.js
@@ -23,7 +23,6 @@
,{field: 'locNo', align: 'center',title: '搴撲綅鍙�',sort:true}
,{field: 'locSts$', align: 'center',title: '搴撲綅鐘舵��',width:200}
// ,{field: 'whsType$', align: 'center',title: '搴撲綅绫诲瀷'}
- // ,{field: 'pltType', align: 'center',title: ''}
// ,{field: 'ctnType', align: 'center',title: ''}
// ,{field: 'locSts', align: 'center',title: ''}
// ,{field: 'sheetNo', align: 'center',title: ''}
@@ -35,6 +34,7 @@
,{field: 'floor', align: 'center',title: '妤�', sort:true}
,{field: 'barcode', align: 'center',title: '璐ф灦鐮�', sort:true}
,{field: 'locType2', align: 'center',title: '璐ф灦绫诲瀷', sort:true}
+ ,{field: 'pltType', align: 'center',title: '浠撲綅缂栫爜'}
,{field: 'fullPlt', align: 'center',title: '婊℃澘', templet:function(row){
var html = "<input value='fullPlt' type='checkbox' lay-skin='primary' lay-filter='tableCheckbox' disabled table-index='"+row.LAY_TABLE_INDEX+"'";
if(row.fullPlt === 'Y'){html += " checked ";}
--
Gitblit v1.9.1