From 264a479aa1ad16818110e9f9d833bbf02e298f47 Mon Sep 17 00:00:00 2001
From: lty <876263681@qq.com>
Date: 星期一, 16 三月 2026 10:06:28 +0800
Subject: [PATCH] #lfderp接口开发

---
 src/main/java/com/zy/asrs/controller/OpenController.java |  209 ++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 185 insertions(+), 24 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/OpenController.java b/src/main/java/com/zy/asrs/controller/OpenController.java
index c16c8af..d6e4dde 100644
--- a/src/main/java/com/zy/asrs/controller/OpenController.java
+++ b/src/main/java/com/zy/asrs/controller/OpenController.java
@@ -4,21 +4,26 @@
 import com.core.annotations.AppAuth;
 import com.core.common.*;
 import com.core.exception.CoolException;
-import com.zy.asrs.entity.param.OpenOrderCompleteParam;
-import com.zy.asrs.entity.param.OpenOrderPakinParam;
-import com.zy.asrs.entity.param.OpenOrderPakoutParam;
-import com.zy.asrs.entity.param.PackParam;
+import com.zy.asrs.entity.ErpOrder;
+import com.zy.asrs.entity.ErpOrderDetl;
+import com.zy.asrs.entity.param.*;
+import com.zy.asrs.entity.ErpMat;
+import com.zy.asrs.service.ErpOrderDetlService;
+import com.zy.asrs.service.ErpOrderService;
 import com.zy.asrs.service.OpenService;
+import com.zy.asrs.service.ErpMatService;
 import com.zy.common.model.DetlDto;
 import com.zy.common.web.BaseController;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.io.IOException;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * Created by vincent on 2022/4/8
@@ -35,31 +40,174 @@
 
     @Autowired
     private OpenService openService;
+    @Autowired
+    private ErpMatService erpMatService;
+    @Autowired
+    private ErpOrderService erpOrderService;
+    @Autowired
+    private ErpOrderDetlService erpOrderDetlService;
+    @Value("${open-asrs.auth.app-id:wms_8f7c3d126a944e3ab5c89d21f4a7c6b2}")
+    private String openAppId;
 
+    @Value("${open-asrs.auth.app-secret:D9f3A7xP1kLm8Q2tW5zH0sY6vR4bNcE7FjK3uM9pT2aL8qX6}")
+    private String openAppSecret;
 
+    @Value("${open-asrs.auth.token-valid-minutes:30}")
+    private Integer tokenValidMinutes;
 
-    /****************************************************************************/
-    /********************************* 鎵撳寘涓婄嚎 **********************************/
-    /****************************************************************************/
+    private static final Map<String, TokenInfoParam> TOKEN_CACHE = new ConcurrentHashMap<>();
 
+    @PostMapping("/getToken")
+    public synchronized R getToken(@RequestBody(required = false) Map<String, String> param) {
+        log.info("{}鎺ュ彛琚闂紱璇锋眰鏁版嵁锛歿}", "/getToken", JSON.toJSONString(param));
+        if (Cools.isEmpty(param)) {
+            return R.parse(BaseRes.PARAM);
+        }
 
-    @PostMapping("/order/pakin/new/package/v1")
-    @AppAuth(memo = "鎵撳寘涓婄嚎鎺ュ彛")
-    public synchronized R pakinOrderPackage(@RequestHeader(required = false) String appkey,
-                                            @RequestBody(required = false) PackParam param,
-                                            HttpServletRequest request) {
+        String appId = param.get("appId");
+        String appSecret = param.get("appSecret");
+        if (Cools.isEmpty(appId)) {
+            return R.error("鍙傛暟[appId]涓嶈兘涓虹┖");
+        }
+        if (Cools.isEmpty(appSecret)) {
+            return R.error("鍙傛暟[appSecret]涓嶈兘涓虹┖");
+        }
+        if (Cools.isEmpty(openAppId) || Cools.isEmpty(openAppSecret)) {
+            throw new CoolException("绯荤粺鏈厤缃畂pen-asrs.auth.app-id鎴杘pen-asrs.auth.app-secret");
+        }
+        if (!openAppId.equals(appId) || !openAppSecret.equals(appSecret)) {
+            throw new CoolException("璁よ瘉澶辫触锛岃纭appId鎴朼ppSecret鏃犺锛�");
+        }
+
+        String token = UUID.randomUUID().toString().replace("-", "");
+        long expireAt = System.currentTimeMillis() + tokenValidMinutes * 60L * 1000L;
+        TOKEN_CACHE.put(token, new TokenInfoParam(appId, expireAt));
+
+        Map<String, Object> result = new HashMap<>();
+        result.put("token", token);
+        result.put("validTime", tokenValidMinutes);
+        return R.ok().add(result);
+    }
+
+    public static boolean validToken(String authorization) {
+        if (Cools.isEmpty(authorization)) {
+            return false;
+        }
+        TokenInfoParam tokenInfo = TOKEN_CACHE.get(authorization);
+        if (tokenInfo == null) {
+            return false;
+        }
+        if (System.currentTimeMillis() > tokenInfo.getExpireAt()) {
+            TOKEN_CACHE.remove(authorization);
+            return false;
+        }
+        return true;
+    }
+    @PostMapping("/order/matSync/default/v1")
+    @AppAuth(memo = "鍟嗗搧淇℃伅鍚屾鎺ュ彛")
+    public synchronized R syncMatInfo(@RequestHeader(required = false) String appkey,
+                                      @RequestBody(required = false) MatSyncParam param,
+                                      HttpServletRequest request){
         auth(appkey, param, request);
         if (Cools.isEmpty(param)) {
             return R.parse(BaseRes.PARAM);
         }
-        openService.packageUp(param);
+        openService.syncMat(param);
         return R.ok();
     }
+
+    @PostMapping("/erp/mat/sync")
+    public synchronized R erpMatSync(@RequestBody(required = false) List<Map<String, Object>> body,
+                                     HttpServletRequest request) {
+        auth(null, body, request);
+        if (Cools.isEmpty(body)) {
+            return R.parse(BaseRes.PARAM);
+        }
+        openService.syncErpMat(body);
+        Map<String, Object> res = new HashMap<>();
+        res.put("result", "SUCCESS");
+        return R.ok().add(res);
+    }
+
+    @PostMapping("/erp/order/addPrd")
+    public synchronized R erpOrderAddPrd(@RequestBody Object body,
+                                         HttpServletRequest request) {
+        List<OrderDto> orders;
+        if (body instanceof List) {
+            orders = JSON.parseArray(JSON.toJSONString(body), OrderDto.class);
+        } else {
+            OrderDto dto = JSON.parseObject(JSON.toJSONString(body), OrderDto.class);
+            orders = new ArrayList<>();
+            orders.add(dto);
+        }
+        auth(null, orders, request);
+        if (Cools.isEmpty(orders)) {
+            return R.parse(BaseRes.PARAM);
+        }
+        return R.ok().add(openService.addErpOrder(orders));
+    }
+
+    @PostMapping("/erp/order/addQc")
+    public synchronized R erpOrderAddQc(@RequestBody Object body,
+                                         HttpServletRequest request) {
+        List<OrderDto> orders;
+        if (body instanceof List) {
+            orders = JSON.parseArray(JSON.toJSONString(body), OrderDto.class);
+        } else {
+            OrderDto dto = JSON.parseObject(JSON.toJSONString(body), OrderDto.class);
+            orders = new ArrayList<>();
+            orders.add(dto);
+        }
+        auth(null, orders, request);
+        if (Cools.isEmpty(orders)) {
+            return R.parse(BaseRes.PARAM);
+        }
+        return R.ok().add(openService.addErpOrder(orders));
+    }
+
+    @PostMapping("/erp/order/addSrm")
+    public synchronized R erpOrderAddSrm(@RequestBody Object body,
+                                         HttpServletRequest request) {
+        List<OrderDto> orders;
+        if (body instanceof List) {
+            orders = JSON.parseArray(JSON.toJSONString(body), OrderDto.class);
+        } else {
+            OrderDto dto = JSON.parseObject(JSON.toJSONString(body), OrderDto.class);
+            orders = new ArrayList<>();
+            orders.add(dto);
+        }
+        auth(null, orders, request);
+        if (Cools.isEmpty(orders)) {
+            return R.parse(BaseRes.PARAM);
+        }
+        return R.ok().add(openService.addErpOrder(orders));
+    }
+
+    @PostMapping("/MES/inventory/details")
+    public synchronized R mesInventoryDetails(@RequestBody(required = false) Map<String, Object> param,
+                                              HttpServletRequest request) throws IOException {
+        auth(null, param, request);
+        if (param == null) {
+            param = new HashMap<>();
+        }
+        return R.ok().add(openService.mesInventoryDetails(param));
+    }
+
+    @PostMapping("/MES/inventory/summary")
+    public synchronized R mesInventorySummary(@RequestBody(required = false) Map<String, Object> param,
+                                              HttpServletRequest request) throws IOException {
+        auth(null, param, request);
+        if (param == null) {
+            param = new HashMap<>();
+        }
+        return R.ok().add(openService.mesInventorySummary(param));
+    }
+
 
     /**
      * 娣诲姞鍏ュ簱鍗�
      */
-    @PostMapping("/order/pakin/new/default/v1")
+    @PostMapping("/order/pakin/default/v1")
     public synchronized R pakinOrderCreate(@RequestHeader(required = false) String appkey,
                                            @RequestBody OpenOrderPakinParam param,
                                            HttpServletRequest request) {
@@ -94,7 +242,7 @@
     /**
      * 娣诲姞鍑哄簱鍗�
      */
-    @PostMapping("/order/pakout/new/default/v1")
+    @PostMapping("/order/pakout/default/v1")
     @AppAuth(memo = "娣诲姞璁㈠崟鍑哄簱")
     public synchronized R pakoutOrderCreate(@RequestHeader(required = false) String appkey,
                                             @RequestBody OpenOrderPakoutParam param,
@@ -144,19 +292,32 @@
         return R.ok().add(openService.queryStock());
     }
 
-
     private void auth(String appkey, Object obj, HttpServletRequest request) {
-        log.info("{}鎺ュ彛琚闂紱appkey:{}锛涜姹傛暟鎹細{}", "open/sensorType/list/auth/v1", appkey, JSON.toJSONString(obj));
+        log.info("{}鎺ュ彛琚闂紱token:{}锛涜姹傛暟鎹細{}", "open/sensorType/list/auth/v1", request.getHeader("Authorization"), JSON.toJSONString(obj));
         request.setAttribute("cache", obj);
         if (!auth) {
             return;
         }
-        if (Cools.isEmpty(appkey)) {
-            throw new CoolException("璁よ瘉澶辫触锛岃纭appkey鏃犺锛�");
+        String authorization = request.getHeader("Authorization");
+        if (Cools.isEmpty(authorization)) {
+            authorization = request.getHeader("authorization");
         }
-        if (!APP_KEY_LIST.contains(appkey)) {
-            throw new CoolException("璁よ瘉澶辫触锛岃纭appkey鏃犺锛�");
+        if (!Cools.isEmpty(authorization)) {
+            String val = authorization.trim();
+            if (val.toLowerCase().startsWith("bearer")) {
+                int idx = val.indexOf(' ');
+                authorization = idx > -1 ? val.substring(idx + 1).trim() : "";
+            } else {
+                authorization = val;
+            }
         }
+        if (!Cools.isEmpty(authorization)) {
+            if (validToken(authorization)) {
+                return;
+            }
+            throw new CoolException("璁よ瘉澶辫触锛岃纭Authorization鏃犺锛�");
+        }
+        throw new CoolException("璁よ瘉澶辫触锛岃纭Authorization鏃犺锛�");
     }
 
     public static void main(String[] args) {

--
Gitblit v1.9.1