From 08fc5462a5b82cf6cee38fc564d79c7b5f98160d Mon Sep 17 00:00:00 2001
From: lty <876263681@qq.com>
Date: 星期五, 18 四月 2025 16:35:42 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/task/handler/OrderReportHander.java |  292 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 292 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/zy/asrs/task/handler/OrderReportHander.java b/src/main/java/com/zy/asrs/task/handler/OrderReportHander.java
new file mode 100644
index 0000000..149d301
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/handler/OrderReportHander.java
@@ -0,0 +1,292 @@
+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.zy.asrs.entity.DocType;
+import com.zy.asrs.entity.Order;
+import com.zy.asrs.entity.OrderDetl;
+import com.zy.asrs.service.ApiLogService;
+import com.zy.asrs.service.DocTypeService;
+import com.zy.asrs.service.OrderDetlService;
+import com.zy.asrs.service.OrderService;
+import com.zy.asrs.task.AbstractHandler;
+import com.zy.asrs.task.core.ReturnT;
+import com.zy.asrs.task.kingdee.handler.LoginAuthenticationHandler;
+import com.zy.common.utils.HttpHandler;
+import com.zy.erp.kingdee.enums.KingDeeUtilType;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+
+@Service
+@Slf4j
+public class OrderReportHander extends AbstractHandler<String> {
+
+    @Value("${erp.address.URL}")
+    //绔彛
+    private String URL;
+
+    @Value("${erp.address.inaddressSave}")
+    //涓婃姤鍏ュ簱鍦板潃
+    private String inaddressSave;
+    @Value("${erp.address.outaddressSave}")
+    //涓婃姤鍑哄簱鍦板潃
+    private String outaddressSave;
+    @Autowired
+    private OrderService orderService;
+    @Autowired
+    private OrderDetlService orderDetlService;
+    @Autowired
+    private ApiLogService apiLogService;
+    @Autowired
+    private DocTypeService docTypeService;
+    @Autowired
+    private LoginAuthenticationHandler loginAuthenticationHandler;
+
+    public ReturnT<String> startPakIn() {
+        // 鏌ュ嚭鎵�鏈夋暟鎹叆搴撳崟
+        List<Order> orderList = orderService.selectList(new EntityWrapper<Order>().eq("doc_type", 34));
+        for(Order order : orderList){
+            List<OrderDetl> orderMemoList = orderDetlService.selectList(new EntityWrapper<OrderDetl>()
+                    .isNull("memo")
+                    .eq("order_No", order.getOrderNo()));//memo涓虹┖琛ㄧず浠嶆湭涓婃姤
+
+            List<OrderDetl> toReportList = new ArrayList<>();
+
+            // 寰幆鍒ゆ柇 anfme 鍜� qty 鏄惁鐩哥瓑锛岀浉绛夊垯琛ㄧず宸插畬鎴愬叆搴�
+            for (OrderDetl orderDetl : orderMemoList) {
+                if (orderDetl.getAnfme() != null && orderDetl.getQty() != null
+                        && orderDetl.getAnfme().doubleValue() == orderDetl.getQty().doubleValue()) {
+                    toReportList.add(orderDetl);
+                }
+            }
+
+            // 濡傛灉鏈夌鍚堟潯浠剁殑鏁版嵁锛屾墽琛屼笂鎶�
+            if (!toReportList.isEmpty()) {
+                reportPakIn(toReportList);
+
+                for (OrderDetl detl : toReportList) {
+                    detl.setMemo("1");
+                    orderDetlService.updateById(detl);
+                    log.info("宸插畬鎴愬崟鎹笂鎶� =====> " + detl);
+                }
+            }
+        }
+
+        return SUCCESS;
+    }
+
+    private void reportPakIn(List<OrderDetl> orderDetls) {
+
+        Date now = new Date();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+        // 鏋勫缓涓诲崟 JSON 鏁版嵁
+        JSONObject requestBody = new JSONObject();
+        requestBody.put("billType", "鍏ュ簱鍗�");
+
+        // 浠庣涓�涓槑缁嗕腑鎻愬彇璁㈠崟鍙风瓑淇℃伅
+        if (!orderDetls.isEmpty()) {
+            OrderDetl first = orderDetls.get(0);
+            requestBody.put("orderNo", first.getOrderNo());
+        }
+
+        requestBody.put("createTime", sdf.format(now));
+
+        // 鏋勫缓鐗╂枡鍒楄〃
+        JSONArray matList = new JSONArray();
+        for (OrderDetl detl : orderDetls) {
+            JSONObject mat = new JSONObject();
+            mat.put("matnr", detl.getMatnr());
+            mat.put("maktx", detl.getMaktx());
+            mat.put("batch", detl.getBatch());
+            mat.put("qty", detl.getQty());
+            mat.put("anfme", detl.getAnfme());
+            mat.put("units", detl.getUnits());
+            matList.add(mat);
+        }
+
+        requestBody.put("matList", matList);
+
+        // 鍙戦�� POST 璇锋眰
+        String response = "";
+        boolean success = false;
+        try {
+            HashMap<String, Object> headers = new HashMap<>();
+            //  cookie
+            headers.put("Cookie", loginAuthenticationHandler.start().getContent());
+
+            response = new HttpHandler.Builder()
+                    .setHeaders(headers)
+                    .setUri(URL)
+                    .setPath(inaddressSave) // 璁剧疆浣犵殑鎺ュ彛璺緞
+                    .setJson(requestBody.toJSONString())
+                    .build()
+                    .doPost();
+
+            JSONObject data = JSON.parseObject(response);
+            Object isSuccess = findValueByKey(data, "IsSuccess");
+            String bool = isSuccess != null ? isSuccess.toString() : "false";
+
+            if ("true".equals(bool)) {
+                success = true;
+            }
+        } catch (Exception e) {
+            log.error("涓婃姤ERP澶辫触", e);
+        } finally {
+            try {
+                apiLogService.save(
+                        "鍏ュ簱涓婃姤",
+                        URL + inaddressSave,
+                        null,
+                        "127.0.0.1",
+                        requestBody.toJSONString(),
+                        response,
+                        success
+                );
+            } catch (Exception e) {
+                log.error("鏃ュ織淇濆瓨澶辫触", e);
+            }
+        }
+    }
+
+    public ReturnT<String> startPakOut() {
+        // 鎵�鏈夋暟鎹嚭搴撳崟
+        List<Order> orderList = orderService.selectList(new EntityWrapper<Order>().eq("doc_type", 33));
+        for(Order order : orderList){
+            List<OrderDetl> orderMemoList = orderDetlService.selectList(new EntityWrapper<OrderDetl>()
+                    .isNull("memo")
+                    .eq("order_No", order.getOrderNo()));
+
+            List<OrderDetl> toReportList = new ArrayList<>();
+
+            // 寰幆鍒ゆ柇 anfme 鍜� qty 鏄惁鐩哥瓑
+            for (OrderDetl orderDetl : orderMemoList) {
+                if (orderDetl.getAnfme() != null && orderDetl.getQty() != null
+                        && orderDetl.getAnfme().doubleValue() == orderDetl.getQty().doubleValue()) {
+                    toReportList.add(orderDetl);
+                }
+            }
+
+            // 濡傛灉鏈夌鍚堟潯浠剁殑鏁版嵁锛屾墽琛屼笂鎶�
+            if (!toReportList.isEmpty()) {
+                reportPakOut(toReportList);
+
+                for (OrderDetl detl : toReportList) {
+                    detl.setMemo("1");
+                    orderDetlService.updateById(detl);
+                    log.info("宸插畬鎴愬崟鎹笂鎶� =====> " + detl);
+                }
+            }
+        }
+
+        return SUCCESS;
+    }
+
+    private void reportPakOut(List<OrderDetl> orderDetls) {
+
+        Date now = new Date();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+        // 鏋勫缓涓诲崟 JSON 鏁版嵁
+        JSONObject requestBody = new JSONObject();
+        requestBody.put("billType", "鍑哄簱鍗�");
+
+        // 浠庣涓�涓槑缁嗕腑鎻愬彇璁㈠崟鍙风瓑淇℃伅
+        if (!orderDetls.isEmpty()) {
+            OrderDetl first = orderDetls.get(0);
+            requestBody.put("orderNo", first.getOrderNo());
+        }
+
+        requestBody.put("createTime", sdf.format(now));
+
+        // 鏋勫缓鐗╂枡鍒楄〃
+        JSONArray matList = new JSONArray();
+        for (OrderDetl detl : orderDetls) {
+            JSONObject mat = new JSONObject();
+            mat.put("matnr", detl.getMatnr());
+            mat.put("maktx", detl.getMaktx());
+            mat.put("batch", detl.getBatch());
+            mat.put("qty", detl.getQty());
+            mat.put("anfme", detl.getAnfme());
+            mat.put("units", detl.getUnits());
+            matList.add(mat);
+        }
+
+        requestBody.put("matList", matList);
+
+        // 鍙戦�� POST 璇锋眰
+        String response = "";
+        boolean success = false;
+        try {
+            HashMap<String, Object> headers = new HashMap<>();
+            //cookie
+            headers.put("Cookie", loginAuthenticationHandler.start().getContent());
+
+            response = new HttpHandler.Builder()
+                    .setHeaders(headers)
+                    .setUri(URL)
+                    .setPath(inaddressSave) // 璁剧疆浣犵殑鎺ュ彛璺緞
+                    .setJson(requestBody.toJSONString())
+                    .build()
+                    .doPost();
+
+            JSONObject data = JSON.parseObject(response);
+            Object isSuccess = findValueByKey(data, "IsSuccess");
+            String bool = isSuccess != null ? isSuccess.toString() : "false";
+
+            if ("true".equals(bool)) {
+                success = true;
+            }
+        } catch (Exception e) {
+            log.error("涓婃姤ERP澶辫触", e);
+        } finally {
+            try {
+                apiLogService.save(
+                        "鍑哄簱涓婃姤",
+                        URL + outaddressSave,
+                        null,
+                        "127.0.0.1",
+                        requestBody.toJSONString(),
+                        response,
+                        success
+                );
+            } catch (Exception e) {
+                log.error("鏃ュ織淇濆瓨澶辫触", e);
+            }
+        }
+    }
+
+    public static Object findValueByKey(JSONObject json, String key) {
+        Set<String> keySet = json.keySet();
+        for (String k : keySet) {
+            Object v = json.get(k);
+            if (k.equals(key)) {
+                return v;
+            } else if (v instanceof JSONArray) {
+                int size = ((JSONArray) v).size();
+                for (int i = 0; i <= size - 1; i++) {
+                    Object result = findValueByKey((JSONObject) ((JSONArray) v).get(i), key);
+                    if (result != null){
+                        return result;
+                    }
+                }
+            } else if (v instanceof JSONObject){
+                Object result = findValueByKey((JSONObject) v, key);
+                if (result != null){
+                    return result;
+                }
+            }
+        }
+        return null;
+    }
+
+
+}

--
Gitblit v1.9.1