From ffe47d904591be8cae513a75ac899dbf720a6e71 Mon Sep 17 00:00:00 2001
From: zwl <zwl123>
Date: 星期六, 07 十月 2023 15:25:17 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/task/handler/MesPakoutHandler.java |  194 +++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 190 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/zy/asrs/task/handler/MesPakoutHandler.java b/src/main/java/com/zy/asrs/task/handler/MesPakoutHandler.java
index 96b0484..0d63af0 100644
--- a/src/main/java/com/zy/asrs/task/handler/MesPakoutHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/MesPakoutHandler.java
@@ -1,37 +1,223 @@
 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.SnowflakeIdWorker;
+import com.core.exception.CoolException;
+import com.zy.asrs.entity.DiaphragmInfo;
+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.utils.MesSyncUtil;
+import com.zy.common.utils.HttpHandler;
 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 org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
 
 @Slf4j
 @Service
 public class MesPakoutHandler extends AbstractHandler<String> {
-    @Value("${mes.pakin.url}")
-    private String url;
+    @Value("${mes.pakout.url}")
+    private String uri;
 
-    @Value("${mes.pakin.path}")
+    @Value("${mes.pakout.path}")
     private String path;
 
     @Autowired
     private DocTypeService docTypeService;
 
     @Autowired
+    private SnowflakeIdWorker snowflakeIdWorker;
+
+    @Autowired
     private OrderService orderService;
+
+    @Autowired
+    private ApiLogService apiLogService;
 
     @Autowired
     private OrderDetlService orderDetlService;
 
-    public ReturnT<String> start() throws IOException {
+    @Transactional
+    public ReturnT<String> start() {
+        boolean success = true;
+        log.info("url:" + uri + path);
+        JSONObject jsonObject = null;
+        try {
+            jsonObject = doPostJsonData();
+        } catch (IOException e) {
+            success = false;
+            e.printStackTrace();
+        }
 
+        int code = jsonObject.getInteger("code");
+
+        if(code == 200){
+            if(!Cools.isEmpty(jsonObject.getString("data")) && jsonObject.getString("data").length()>2){
+
+                JSONArray jsonArray = jsonObject.getJSONArray("data");
+                List<JSONObject> jsonDataList = jsonArray.toJavaList(JSONObject.class);
+
+                jsonDataList.forEach(data -> {
+                    String orderNo = data.getString("orderNo");
+                    Order o = insertOrder(data,orderNo);
+                    insertOrUpdateOrderDetl(data, o);
+                });
+            }
+
+        }else {
+            success = false;
+            log.error("璇锋眰mes鎺ュ彛鍝嶅簲閿欒锛屽搷搴旂爜涓�: " + code);
+        }
+        saveApiLog(jsonObject.toJSONString(),success);
         return SUCCESS;
     }
+
+    /*
+    淇濆瓨鏃ュ織
+     */
+    private void saveApiLog(String response, boolean success){
+        apiLogService.save(
+                "鐢熸垚鍑哄簱鍗曟嵁",
+                uri + path,
+                null,
+                "127.0.0.1",
+                null,
+                response,
+                success
+        );
+    }
+
+    /*
+    鍙戣捣涓�涓姹傛潵鑾峰彇鏈幏鍙栬繃鐨勫崟鎹俊鎭�
+     */
+    private JSONObject doPostJsonData() throws IOException {
+
+        Map<String, Object> requestParamMap = MesSyncUtil.getRequestParamMap();
+        //鑾峰彇鏈幏鍙栬繃鐨勬墍鏈夊崟鎹�
+        requestParamMap.put("type",0);
+
+        return JSON.parseObject( new HttpHandler.Builder()
+                .setUri(uri)
+                .setPath(path)
+                .setParams(requestParamMap)
+                .build()
+                .doPostWithParam());
+    }
+
+    /*
+    鏂板order淇℃伅
+     */
+    private Order insertOrder(JSONObject jsonData, String orderNo){
+        Order o = orderService.selectByNo(orderNo);
+        if (!Cools.isEmpty(o)) {
+            throw new CoolException(jsonData.getString("orderNo") + "鍗曟嵁宸插瓨鍦紝璇峰嬁閲嶅鎻愪氦");
+        }
+
+        o = orderMapping(jsonData);
+        if (!orderService.insert(o)) {
+            throw new CoolException("鐢熸垚鍗曟嵁涓绘。澶辫触锛岃鑱旂郴绠$悊鍛�");
+        }
+        return o;
+    }
+
+    /*
+    鏍规嵁orderNo銆乵atnr銆乥atch锛屾柊澧炴垨鑰呮洿鏀筼rderDetl淇℃伅
+     */
+    private void insertOrUpdateOrderDetl(JSONObject jsonData, Order o){
+        List<DiaphragmInfo> diaphragmInfoList =  JSONObject.parseArray(jsonData.getString("orderDetails"),DiaphragmInfo.class);
+
+        diaphragmInfoList.forEach(d -> {
+            EntityWrapper<OrderDetl> wrapper = new EntityWrapper<>();
+            wrapper.eq("order_no",o.getOrderNo()).eq("matnr",d.getItemCode()).eq("batch",d.getBatchNo());
+            OrderDetl od = orderDetlService.selectOne(wrapper);
+            if(od == null){
+                od = new OrderDetl();
+                od.setOrderNo(o.getOrderNo());
+                od.setOrderId(o.getId());
+                orderDetlMapping(d,od);
+                orderDetlService.insert(od);
+            }else {
+                od.setQty(od.getQty() + d.getQuantity().doubleValue());
+                od.setAnfme(od.getAnfme() + d.getAssQuantity().doubleValue());
+                od.setUpdateTime(new Date());
+                orderDetlService.updateById(od);
+            }
+        });
+    }
+
+    /*
+    鏄犲皠Order绫诲拰jsonData鐨勫瓧娈�
+     */
+    private Order orderMapping(JSONObject jsonData){
+        Order o = new Order();
+        o.setStatus(1);
+        //璁剧疆璁㈠崟鐘舵�� --- 鍒濆鍖栫姸鎬�
+        o.setSettle(0L);
+        //uuid
+        o.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
+        //鍗曟嵁缂栧彿
+        o.setOrderNo(jsonData.getString("orderNo"));
+        //鍗曟嵁鏃堕棿
+        o.setOrderTime(jsonData.getString("orderTime"));
+        //鍗曟嵁绫诲瀷
+        DocType docType = docTypeService.selectOrAdd(jsonData.getString("orderType"), Boolean.TRUE);
+        //鐗╂祦鍚嶇О -- 鍏ュ簱搴撴埧鍚嶇О(绔嬩綋搴撳悕绉�)
+        o.setShipName(jsonData.getString("storage"));
+        o.setDocType(docType.getDocId());
+        o.setCreateTime(new Date());
+        o.setUpdateTime(new Date());
+        return o;
+    }
+
+    /*
+    鏄犲皠OrderDetl涓庨殧鑶滀俊鎭被鐨勫瓧娈靛叧绯�
+     */
+    private void orderDetlMapping(DiaphragmInfo d, OrderDetl od){
+        //鎵瑰彿 -- 鐢熶骇鎵瑰彿
+        od.setBatch(d.getBatchNo());
+        //鍟嗗搧缂栫爜 -- 鐗╂枡缂栫爜
+        od.setMatnr(d.getItemCode());
+        //鍟嗗搧鍚嶇О -- 鐗╂枡鍚嶇О
+        od.setMaktx(d.getItemName());
+        //鏁伴噺 -- 鏁伴噺
+        od.setAnfme(d.getQuantity() == null ? null : d.getQuantity().doubleValue());
+        //瀹屾垚鏁伴噺 -- 杈呮暟閲�
+        od.setQty(d.getAssQuantity() == null ? null : d.getAssQuantity().doubleValue());
+        //瑙勬牸 -- 瑙勬牸/鍨嬪彿
+        od.setSpecs(d.getStd());
+        //澶囨敞 -- 澶囨敞
+        od.setMemo(d.getNote());
+        //鏉″舰鐮� -- 鏉″舰鐮�
+        od.setQrCode(d.getBarCode());
+        //棰滆壊 -- 澶у嵎浣嶇疆
+        od.setColor(d.getPosition());
+        //鍨嬪彿 -- 灏忓嵎浣嶇疆
+        od.setModel(d.getPosition2());
+        //鍝佺墝 -- 绛夌骇
+        od.setBrand(d.getGrade());
+        //鏀跺嵎寮�濮嬫棩鏈�
+        od.setStartDate(d.getStartDate());
+        //鏀跺嵎缁撴潫鏃ユ湡
+        od.setEndDate(d.getEndDate());
+
+        od.setCreateTime(new Date());
+        od.setUpdateTime(new Date());
+    }
 }

--
Gitblit v1.9.1