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