From 9905847295d326134d50fe7f005522cdfafe2763 Mon Sep 17 00:00:00 2001
From: lty <876263681@qq.com>
Date: 星期五, 07 十一月 2025 16:52:27 +0800
Subject: [PATCH] #erp商品档案同步

---
 src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java |  177 ++++++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 120 insertions(+), 57 deletions(-)

diff --git a/src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java b/src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java
index 4a551bc..2392f5d 100644
--- a/src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java
+++ b/src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java
@@ -10,10 +10,11 @@
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.service.*;
+import com.zy.asrs.service.impl.ErpSecretServiceImpl;
 import com.zy.asrs.task.AbstractHandler;
 import com.zy.asrs.task.core.ReturnT;
 import com.zy.asrs.utils.OrderInAndOutUtil;
-import com.zy.erp.kingdee.entity.param.InFormIdParam;
+import com.zy.erp.kingdee.entity.param.MatLoadParam;
 import com.zy.erp.kingdee.enums.KingDeeUtilType;
 import com.zy.common.utils.HttpHandler;
 import com.zy.erp.kingdee.utils.KingDeeUtil;
@@ -23,7 +24,9 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -65,45 +68,48 @@
 
     @Autowired
     private LocOwnerService locOwnerService;
-
+    @Autowired
+    private ErpSecretServiceImpl erpSecretService;
+    @Value("${erp.login.accountId}")
+    private String accountId;
+    @Value("${erp.login.xAcfwIdentity}")
+    private String xAcfwIdentity;
     @Transactional
     public synchronized ReturnT<String> start() {
-        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        //鐧诲綍閲戣澏
-        ReturnT<String> start = loginAuthenticationHandler.start();
+        SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-MM-dd");
+        //璇诲彇token
+        ErpSecret erpSecret = erpSecretService.selectOne(new EntityWrapper<ErpSecret>().eq("account_id", accountId));
+
+
         for(KingDeeUtilType kingDeeUtilType : KingDeeUtilType.values()) {
-            InFormIdParam inFormIdParam = new InFormIdParam();
+            MatLoadParam matLoadParam = new MatLoadParam();
             DocType docType = docTypeService.selectOne(new EntityWrapper<DocType>().eq("doc_name", kingDeeUtilType.desc));
             if (Cools.isEmpty(docType) && !kingDeeUtilType.formId.equals("BD_MATERIAL")){
                 docType = docTypeService.selectOrAdd(kingDeeUtilType.desc, kingDeeUtilType.pakIn.equals(1));
             }
-            inFormIdParam.setFormId(kingDeeUtilType.formId);
-            inFormIdParam.setLimit(100);
-            inFormIdParam.setStartRow("0");
             String FDocumentStatus=null;
-
             //鏉′欢鍜岄渶瑕佽幏寰楃殑缁撴灉鎷兼帴
             JSONObject jsonObject = new JSONObject();
-            jsonObject.put("FormId", inFormIdParam.getFormId());
-            jsonObject.put("Limit", inFormIdParam.getLimit());
-            jsonObject.put("StartRow", inFormIdParam.getStartRow());
             //鐗╂枡妗f鏌ヨ
             if(kingDeeUtilType.formId.equals("BD_MATERIAL")){
                 Tag tag = tagService.selectByName("鍏ㄩ儴", 1);
-                //鐗╂枡鐘舵�� FUseOrgId .FNumber
-                FDocumentStatus="C";
-                jsonObject.put("FilterString", "FCreateDate>'"+sdf.format(tag.getUpdateTime())+"' and FDocumentStatus='"+FDocumentStatus+"' and FUseOrgId .FNumber='100'");
-                jsonObject.put("FieldKeys", "FName,FNumber,FCreateDate,FSpecification,FDocumentStatus");
-                // FName : 鐗╂枡鍚嶇О 锛�
-                // FNumber 锛氱墿鏂欑紪鍙凤紱
-                // FCreateDate 锛氱墿鏂欏垱寤烘椂闂达紱
-                // FSpecification 锛氱墿鏂欒鏍硷紱
-                // FDocumentStatus 锛氱墿鏂欑姸鎬�
+                jsonObject.put("id", null);//id
+                jsonObject.put("number", null);//缂栫爜
+                jsonObject.put("createorg_number", null);//鍒涘缓缁勭粐
+                jsonObject.put("start_createtime", "2025-01-01 00:00:00");//鍒涘缓璧峰
+                jsonObject.put("end_createtime", sdf1.format(new Date()));//鍒涘缓鎴
+                jsonObject.put("start_modifytime", "2025-01-01 00:00:00");//鏇存柊璧峰
+                jsonObject.put("end_modifytime", sdf1.format(new Date()));//鏇存柊鎴
+                jsonObject.put("start_approvedate", "2025-01-01");//瀹℃牳璧峰
+                jsonObject.put("end_approvedate", sdf2.format(new Date()));//瀹℃牳鎴
+                jsonObject.put("status", Arrays.asList("B", "C"));//鏁版嵁鐘舵�� [A:鏆傚瓨, B:宸叉彁浜�, C:宸插鏍竇
+
             }else{
                 //鑾峰彇鏈�鏂版椂闂�
                 //鍗曟嵁鐘舵��
                 FDocumentStatus="B";
-                jsonObject.put("FilterString", "FCreateDate>'"+sdf.format(docType.getCreateTime())+"'"+" and FStockId.Fname='绔嬪簱'"+" and FDocumentStatus='"+FDocumentStatus+"'");
+                jsonObject.put("FilterString", "FCreateDate>'"+sdf1.format(docType.getCreateTime())+"'"+" and FStockId.Fname='绔嬪簱'"+" and FDocumentStatus='"+FDocumentStatus+"'");
                 jsonObject.put("FieldKeys", "FBillNo,FCreateDate,FMaterialId.FNumber,FMaterialId.FName,FMaterialId.FSpecification,"+kingDeeUtilType.anfme+",FDocumentStatus");
                 // FBillNo :鍗曟嵁缂栧彿锛�
                 // FCreateDate 锛氬崟鎹垱寤烘椂闂达紱
@@ -116,14 +122,18 @@
             }
             JSONObject jsonObject1 = new JSONObject();
             jsonObject1.put("data", jsonObject);
+            jsonObject1.put("pageSize", 10);
+            jsonObject1.put("pageNo", 1);
             String add = jsonObject1.toJSONString();
+
             //涓婃姤
             String response = "";
             boolean success = false;
             try {
                 //鑾峰彇Cookie鍊�
                 HashMap<String, Object> headers = new HashMap<>();
-                headers.put("Cookie", start.getContent());
+                headers.put("accesstoken", erpSecret.getAccessToken());
+                headers.put("x-acgw-identity", xAcfwIdentity);  // 鑷畾涔夎姹傚ご
                 response = new HttpHandler.Builder()
                         .setHeaders(headers)
                         .setUri(URL)
@@ -131,45 +141,98 @@
                         .setJson(add)
                         .build()
                         .doPost();
-                JSONArray data = JSON.parseArray(response);
+                JSONObject jsonResponse = JSON.parseObject(response);
+                if(jsonResponse.getString("errorCode").equals("401")){
+                    log.error("妫�绱㈠け璐ラ敊璇俊鎭細{}", jsonResponse.getString("message"));
+                    loginAuthenticationHandler.start();
+                    continue;
+                }
+                JSONArray data = jsonResponse.getJSONObject("data").getJSONArray("rows");
                 if(data.size()<=0)  continue;
-                if (data.getJSONArray(0).get(0).toString().length()>=20) continue;
-                if (kingDeeUtilType.formId.equals("BD_MATERIAL")) {//鐗╂枡妗f
+                //鍟嗗搧妗f鍚屾
+                if (kingDeeUtilType.formId.equals("BD_MATERIAL")) {
                     Tag tag = tagService.selectByName("鍏ㄩ儴", 1);
-                    for (int j = 0; j < data.size(); j++) {
-                        JSONArray jsonArray = data.getJSONArray(j);
-                        //瀵圭編鍥芥椂闂磋繘琛岃浆鎹�
-                        Date jsonDate = KingDeeUtil.KingDeeDate(jsonArray.get(2).toString());
-                        //鐢熸垚鍟嗗搧妗f
-                        //鍟嗗搧缂栧彿
-                        Mat mat = matService.selectByMatnr(jsonArray.get(1).toString());
-                        if (mat == null) {
-                            mat = new Mat();
-                            mat.setMatnr(jsonArray.get(1).toString());
-                            mat.setMaktx(jsonArray.get(0).toString());
-                            mat.setSpecs(jsonArray.get(3).toString());//瑙勬牸
-                            mat.setTagId(tag.getId());
-                            mat.setCreateTime(jsonDate);//鍟嗗搧鍒涘缓鏃堕棿
-                            mat.setUpdateTime(new Date());
-                            mat.setStatus(1);
-                            //鏈�鏂版姄鍙栧晢鍝佹椂闂�
-                            if (!matService.insert(mat)) {
-//                                throw new CoolException("鏈嶅姟鍣ㄥ唴閮ㄩ敊璇紝璇疯仈绯荤鐞嗗憳");
-                                callApiLogSaveMat(mat,kingDeeUtilType, "鍚屾鏂扮墿鏂欏嚭閿欙紒锛侊紒"+mat, false);
-                                log.info("鍚屾鏂扮墿鏂欏嚭閿欙紒锛侊紒鍙傛暟锛歔{}]銆乕{}]",mat,jsonArray);
+
+                    // 澶勭悊鍒嗛〉锛氭牴鎹繑鍥炵殑totalCount鍜宲ageSize璁$畻椤垫暟
+                    int pageSize = jsonResponse.getJSONObject("data").getIntValue("pageSize");
+                    int totalCount = jsonResponse.getJSONObject("data").getIntValue("totalCount");
+                    int totalPages = (int) Math.ceil((double) totalCount / pageSize);
+
+                    for (int page = 1; page <= totalPages; page++) {
+                        jsonObject1.put("pageNo", page);
+                        add = jsonObject1.toJSONString();
+                        // 閲嶆柊鍙戣捣璇锋眰浠ヨ幏鍙栬椤电殑鏁版嵁
+                        response = new HttpHandler.Builder()
+                                .setHeaders(headers)
+                                .setUri(URL)
+                                .setPath(inaddress)
+                                .setJson(add)
+                                .build()
+                                .doPost();
+
+                        jsonResponse = JSON.parseObject(response);
+                        data = jsonResponse.getJSONObject("data").getJSONArray("rows");
+                        for (int j = 0; j < data.size(); j++) {
+                            JSONObject jsonObjectNew = data.getJSONObject(j);
+                            Date modifyTime = sdf1.parse(jsonObjectNew.get("modifytime").toString());
+                            String matnr = jsonObjectNew.get("number").toString();
+                            String name = jsonObjectNew.get("name").toString();
+                            String createtime = jsonObjectNew.get("createtime").toString();
+                            Double grossweight = jsonObjectNew.get("grossweight") != null ? new BigDecimal(jsonObjectNew.get("grossweight").toString()).doubleValue() : 0.0;
+                            Double height = jsonObjectNew.get("height") != null ? new BigDecimal(jsonObjectNew.get("height").toString()).doubleValue() : 0.0;
+                            Double width = jsonObjectNew.get("width") != null ? new BigDecimal(jsonObjectNew.get("width").toString()).doubleValue() : 0.0;
+                            Double length = jsonObjectNew.get("length") != null ? new BigDecimal(jsonObjectNew.get("length").toString()).doubleValue() : 0.0;
+
+                            // 鐢熸垚鍟嗗搧妗f
+                            Mat mat = matService.selectByMatnr(matnr);
+                            if (mat == null) {
+                                mat = new Mat();
+                                mat.setMatnr(matnr);
+                                mat.setMaktx(name);
+                                mat.setTagId(tag.getId());
+                                mat.setWeight(grossweight);
+                                mat.setManLength(length);
+                                mat.setHeight(height);
+                                mat.setWidth(width);
+                                mat.setCreateTime(sdf1.parse(createtime));
+                                mat.setUpdateTime(modifyTime);
+                                mat.setStatus(1);
+                                if (!matService.insert(mat)) {
+                                    callApiLogSaveMat(mat, kingDeeUtilType, "鍚屾鏂扮墿鏂欏嚭閿欙紒" + mat, false);
+                                    log.info("鍚屾鏂扮墿鏂欏嚭閿欙紒鍙傛暟锛歔{}]銆乕{}]", mat, jsonObjectNew);
+                                } else {
+                                    callApiLogSaveMat(mat, kingDeeUtilType, "鍚屾鏂扮墿鏂欐垚鍔燂紒", true);
+                                }
                             } else {
-                                callApiLogSaveMat(mat,kingDeeUtilType, "鍚屾鏂扮墿鏂欙紒", true);
-//                                log.info("鍚屾鏂扮墿鏂橻鍟嗗搧缂栧彿锛歿}]", mat.getMatnr());
-                            }
-                        }else {
-                            if (!jsonDate.equals(tag.getUpdateTime())){
-                                callApiLogSaveMat(mat,kingDeeUtilType, "鍟嗗搧缂栧彿閲嶅:"+mat.getMatnr(), false);
-                                log.info("鍚屾鏂扮墿鏂橻鍟嗗搧缂栧彿锛歿}],鍟嗗搧缂栧彿閲嶅锛侊紒锛�", mat.getMatnr());
+                                boolean isUpdated = false;
+                                if (mat.getUpdateTime().compareTo(modifyTime) != 0) {
+                                    // 鏇存柊瀛楁
+                                    if (!mat.getMaktx().equals(name)) mat.setMaktx(name);
+                                    if (mat.getWeight().compareTo(grossweight) != 0) mat.setWeight(grossweight);
+                                    if (mat.getManLength().compareTo(length) != 0) mat.setManLength(length);
+                                    if (mat.getHeight().compareTo(height) != 0) mat.setHeight(height);
+                                    if (mat.getWidth().compareTo(width) != 0) mat.setWidth(width);
+                                    if (mat.getCreateTime().compareTo(sdf1.parse(createtime)) != 0)
+                                        mat.setCreateTime(sdf1.parse(createtime));
+                                    mat.setUpdateTime(modifyTime);
+                                    isUpdated = true;
+                                }
+                                // 鎵ц鏇存柊鎿嶄綔
+                                if (isUpdated) {
+                                    mat.setUpdateTime(new Date());
+                                    if (!matService.updateById(mat)) {
+                                        callApiLogSaveMat(mat, kingDeeUtilType, "鏇存柊鐗╂枡鍑洪敊锛�" + mat, false);
+                                        log.info("鏇存柊鐗╂枡[鍟嗗搧缂栧彿锛歿}], 鏇存柊澶辫触锛�", mat.getMatnr());
+                                    } else {
+                                        callApiLogSaveMat(mat, kingDeeUtilType, "鏇存柊鐗╂枡鎴愬姛锛�", true);
+                                        log.info("鏇存柊鐗╂枡[鍟嗗搧缂栧彿锛歿}]", mat.getMatnr());
+                                    }
+                                }
                             }
                         }
-                        tag.setUpdateTime(jsonDate);
                     }
-                    tagService.updateById(tag);
+                }else if(kingDeeUtilType.formId.equals("BD_RRGANIZATION")){
+
                 } else {
                     for (int j = 0; j < data.size(); j++) {
                         JSONArray jsonArray = data.getJSONArray(j);

--
Gitblit v1.9.1