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