瀏覽代碼

华高金蝶看板相关接口

wzy 2 月之前
父節點
當前提交
489689339e

+ 26 - 0
mjava-huagao/src/main/java/com/malk/huagao/controller/KdHuagaoController.java

@@ -0,0 +1,26 @@
+package com.malk.huagao.controller;
+
+import com.malk.huagao.service.KdHuaGaoService;
+import com.malk.server.common.McR;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/kd")
+public class KdHuagaoController {
+    @Autowired
+    private KdHuaGaoService kdHuaGaoService;
+
+    //更新看板
+    @RequestMapping("/syncReport")
+    @ResponseBody
+    public McR syncReport(String type, String userId){
+        kdHuaGaoService.syncReport(type,userId);
+
+        return McR.success();
+    }
+
+
+}

+ 23 - 5
mjava-huagao/src/main/java/com/malk/huagao/schedule/KdScheduleTask.java

@@ -19,15 +19,33 @@ public class KdScheduleTask {
     @Autowired
     private KdHuaGaoService kdHuaGaoService;
 
-    //每周五 18:00定时同步序列号主档
-    @Scheduled(cron = "0 0 18 * * 5")
+    //每周六 17:00定时同步序列号主档
+    @Scheduled(cron = "0 0 17 * * 6")
     public void syncBDSerialMainFile(){
         kdHuaGaoService.syncBDSerialMainFile();
     }
 
-    //定时即时库存明细
-    /*@Scheduled(cron = "")
+    //每周六 16:00定时同步即时库存明细
+    @Scheduled(cron = "0 0 16 * * 6")
     public void syncSTKInventory(){
         kdHuaGaoService.syncSTKInventory();
-    }*/
+    }
+
+    //每周六 15:00定时处理待处理品数据
+    @Scheduled(cron = "0 0 15 * * 6")
+    public void syncPendingProducts(){
+        kdHuaGaoService.syncPendingProducts();
+    }
+
+    //每天00:00定时同步生产退料明细
+    @Scheduled(cron = "0 0 0 * * ?")
+    public void syncPRDReturnMtrl(){
+        kdHuaGaoService.syncPRDReturnMtrl();
+    }
+
+    //每天00:01定时同步发货通知单
+    @Scheduled(cron = "0 1 0 * * ?")
+    public void syncDLVNotice(){
+        kdHuaGaoService.syncDLVNotice();
+    }
 }

+ 8 - 0
mjava-huagao/src/main/java/com/malk/huagao/service/KdHuaGaoService.java

@@ -4,4 +4,12 @@ public interface KdHuaGaoService {
     void syncBDSerialMainFile();
 
     void syncSTKInventory();
+
+    void syncPRDReturnMtrl();
+
+    void syncReport(String type,String userId);
+
+    void syncPendingProducts();
+
+    void syncDLVNotice();
 }

+ 1 - 0
mjava-huagao/src/main/java/com/malk/huagao/service/impl/HuaGaoServiceImpl.java

@@ -77,6 +77,7 @@ public class HuaGaoServiceImpl implements HuaGaoService {
             String price=UtilMap.getString(formData,"numberField_m8e4zajw_value");
             List<String> users=ddClient_contacts.listDepartmentUserId(ddClient.getAccessToken(),Long.parseLong(deptId));
             for (String user : users) {
+//                if (!user.equals("17399270929001990") && !user.equals("17102075948191646") && !user.equals("16137991608422361") && !user.equals("16992517127785448")) continue;//刘多富、白涛、陈辉、吕明权
                 List<Map> valList=ddClientAttendance.getAttColumnVal(ddClient.getAccessToken(),user, Arrays.asList("82772106","89349019","82772125"),stTime,edTime);
                 if(valList!=null&&valList.size()==3){
                     Map<String,Map<String,String>> dateMap=toDateMap(valList);

+ 663 - 17
mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdHuaGaoServiceImpl.java

@@ -1,5 +1,6 @@
 package com.malk.huagao.service.impl;
 
+import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.google.gson.Gson;
 import com.kingdee.bos.webapi.entity.IdentifyInfo;
@@ -13,18 +14,31 @@ import com.malk.server.aliwork.YDConf;
 import com.malk.server.aliwork.YDParam;
 import com.malk.server.aliwork.YDSearch;
 import com.malk.server.common.McR;
+import com.malk.server.dingtalk.DDConf;
+import com.malk.server.dingtalk.DDR_New;
 import com.malk.service.aliwork.YDClient;
+import com.malk.service.dingtalk.DDClient;
+import com.malk.utils.UtilHttp;
 import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.logging.log4j.util.Strings;
 import org.slf4j.MDC;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.time.temporal.TemporalAdjusters;
 import java.time.temporal.WeekFields;
 import java.util.*;
+import java.util.stream.Collectors;
 
 import static org.junit.Assert.fail;
 
+@Slf4j
 @Service
 public class KdHuaGaoServiceImpl implements KdHuaGaoService {
     @Autowired
@@ -33,6 +47,12 @@ public class KdHuaGaoServiceImpl implements KdHuaGaoService {
     @Autowired
     private YDClient ydClient;
 
+    @Autowired
+    private DDClient ddClient;
+
+    @Autowired
+    private DDConf ddConf;
+
     //在库状态
     private static final Map<String,String> STOCK_STATUS = new HashMap<>();
     static{
@@ -50,7 +70,44 @@ public class KdHuaGaoServiceImpl implements KdHuaGaoService {
     public void syncBDSerialMainFile() {
         MDC.put("MDC_KEY_PID","1002");
 
+        // 获取当前日期
+        LocalDate today = LocalDate.now();
+        int year = today.getYear();//获取当前年份
+        int month = today.getMonthValue();//当前月份
+        WeekFields weekFields = WeekFields.of(Locale.getDefault());
+        int weekOfMonth = today.get(weekFields.weekOfMonth());//当前日期是当月的第几周
+
         try {
+            //删除宜搭当周序列号主档数据
+            log.info("开始删除序列号主档数据:{}年,{}月,{}周",year,month,weekOfMonth);
+            List<List<String>> formInstanceIdListList = new ArrayList<>();//实例id集合,每100条
+
+            DDR_New ddrNew = new DDR_New();
+            int pageSize = 100;
+            int pageNumber = 0;
+            do {
+                pageNumber++;
+
+                ddrNew = ydClient.queryData(YDParam.builder()
+                        .formUuid("FORM-3B2E5C93D7E6494B9AD920B48A90159F7DZ4")
+                        .searchFieldJson(JSONObject.toJSONString(UtilMap.map("numberField_mev270x6, numberField_mev270x5, textField_mev2ers5", Arrays.asList(year,year), Arrays.asList(month,month), weekOfMonth)))
+                        .pageNumber(pageNumber)
+                        .pageSize(pageSize)
+                        .build(), YDConf.FORM_QUERY.retrieve_search_form_id);
+
+                formInstanceIdListList.addAll(Collections.singleton((List<String>) ddrNew.getData()));
+            }while (ddrNew.getPageNumber() * pageSize < ddrNew.getTotalCount());
+
+            for (List<String> formInstanceIdList : formInstanceIdListList) {
+                if (!formInstanceIdList.isEmpty()){
+                    ydClient.operateData(YDParam.builder()
+                            .formUuid("FORM-06C833A3B1804929987033DD6B0E7B2F73JP")
+                            .formInstanceIdList(formInstanceIdList)
+                            .build(), YDConf.FORM_OPERATION.delete_batch);
+                }
+            }
+            log.info("删除序列号主档数据完成:{}年,{}月,{}周",year,month,weekOfMonth);
+
             K3CloudApi client = new K3CloudApi(initIden());
 
             int startRow = 0;
@@ -83,6 +140,8 @@ public class KdHuaGaoServiceImpl implements KdHuaGaoService {
                 startRow += limit;
             }while (result.size() == limit);
 
+            List<Map> originList = new ArrayList<>();
+
             for (Map map : list) {
                 String FNumber = UtilMap.getString(map,"FNumber");
 
@@ -101,7 +160,8 @@ public class KdHuaGaoServiceImpl implements KdHuaGaoService {
                     formData.put("textField_mev1n470",getNumber(UtilMap.getMap(serialMainFileInfo,"MaterialID")));//物料编码
                     formData.put("textField_mev1n471",getMultiLanguageTextName(UtilMap.getMap(serialMainFileInfo,"MaterialID")));//物料名称
                     formData.put("textField_mev1n472",getMultiLanguageTextSpecification(UtilMap.getMap(serialMainFileInfo,"MaterialID")));//规格型号
-                    formData.put("textField_mev1n477",getMultiLanguageTextName(UtilMap.getMap(UtilMap.getMap(serialMainFileInfo,"MaterialID"),"F_QUXZ_Assistant")));//所属系列
+                    String ssxl = getMultiLanguageTextName(UtilMap.getMap(UtilMap.getMap(serialMainFileInfo, "MaterialID"), "F_QUXZ_Assistant"));
+                    formData.put("textField_mev1n477", ssxl);//所属系列
                     double zkts = UtilMap.getDouble(serialMainFileInfo, "FZKTS") == 0.0 ? 1.0 : UtilMap.getDouble(serialMainFileInfo, "FZKTS");
                     formData.put("numberField_mev1n478", zkts);//在库天数
 
@@ -111,7 +171,8 @@ public class KdHuaGaoServiceImpl implements KdHuaGaoService {
 
                     List<Map> bdSerialmasterother = UtilMap.getList(serialMainFileInfo, "BD_SERIALMASTEROTHER");
                     formData.put("textField_mev1n473",getMultiLanguageTextName(UtilMap.getMap((bdSerialmasterother).get(0),"StockId")));//仓库
-                    formData.put("textField_mev1n474",getMultiLanguageTextName(UtilMap.getMap(UtilMap.getMap((bdSerialmasterother).get(0),"StockLocId"),"F100001")));//仓库
+                    String cw = getMultiLanguageTextName(UtilMap.getMap(UtilMap.getMap((bdSerialmasterother).get(0), "StockLocId"), "F100001"));
+                    formData.put("textField_mev1n474", cw);//仓位
                     formData.put("textField_mev1n475",getMultiLanguageTextName(UtilMap.getMap((bdSerialmasterother).get(0),"CustId")));//客户
 
                     //在库天数分类
@@ -130,14 +191,6 @@ public class KdHuaGaoServiceImpl implements KdHuaGaoService {
                         }
                     }
                     formData.put("selectField_mf205zr0",zktsfl);
-
-                    // 获取当前日期
-                    LocalDate today = LocalDate.now();
-                    int year = today.getYear();//获取当前年份
-                    int month = today.getMonthValue();//当前月份
-                    WeekFields weekFields = WeekFields.of(Locale.getDefault());
-                    int weekOfMonth = today.get(weekFields.weekOfMonth());//当前日期是当月的第几周
-
                     formData.put("numberField_mev270x6",year);
                     formData.put("numberField_mev270x5",month);
                     formData.put("textField_mev2ers5",weekOfMonth);
@@ -148,8 +201,89 @@ public class KdHuaGaoServiceImpl implements KdHuaGaoService {
                             .formUuid("FORM-3B2E5C93D7E6494B9AD920B48A90159F7DZ4")
                             .formDataJson(JSONObject.toJSONString(formData))
                             .build(), YDConf.FORM_OPERATION.create);
+
+                    Map origin = new HashMap();
+                    origin.put("cw",cw);
+                    origin.put("ssxl",ssxl);
+                    origin.put("zktsfl",zktsfl);
+                    origin.put("value",1);
+
+                    originList.add(origin);
                 }
             }
+
+            //删除宜搭历史最新库存信息
+            List<Map> data = (List<Map>) ydClient.queryData(YDParam.builder()
+                    .formUuid("FORM-4CB51E04B8344622BE880C9D573F68CANKWU")
+                    .searchFieldJson(JSONObject.toJSONString(UtilMap.map("numberField_mev270x6, numberField_mev270x5",Arrays.asList(year,year), Arrays.asList(month,month))))
+                    .build(), YDConf.FORM_QUERY.retrieve_list).getData();
+
+            List<String> formInstanceIdList = new ArrayList<>();
+
+            for (Map datum : data) {
+                formInstanceIdList.add(UtilMap.getString(datum,"formInstanceId"));
+            }
+
+            if (!formInstanceIdList.isEmpty()){
+                ydClient.operateData(YDParam.builder()
+                        .formUuid("FORM-4CB51E04B8344622BE880C9D573F68CANKWU")
+                        .formInstanceIdList(formInstanceIdList)
+                        .build(), YDConf.FORM_OPERATION.delete_batch);
+            }
+
+            List<Map> data2 = (List<Map>) ydClient.queryData(YDParam.builder()
+                    .formUuid("FORM-5764CC3F6D964FD3A165BD7D4D75999FO8NQ")
+                    .searchFieldJson(JSONObject.toJSONString(UtilMap.map("numberField_mev270x6",Arrays.asList(year,year), Arrays.asList(month,month))))
+                    .build(), YDConf.FORM_QUERY.retrieve_list).getData();
+
+            List<String> formInstanceIdList2 = new ArrayList<>();
+
+            for (Map datum : data2) {
+                formInstanceIdList2.add(UtilMap.getString(datum,"formInstanceId"));
+            }
+
+            if (!formInstanceIdList2.isEmpty()){
+                ydClient.operateData(YDParam.builder()
+                        .formUuid("FORM-5764CC3F6D964FD3A165BD7D4D75999FO8NQ")
+                        .formInstanceIdList(formInstanceIdList2)
+                        .build(), YDConf.FORM_OPERATION.delete_batch);
+            }
+
+            //将最新库存信息写入宜搭
+            List<Map> grouprList = originList.stream()
+                    .collect(Collectors.groupingBy(
+                            item -> Arrays.asList(
+                                    item.get("cw"),
+                                    item.get("ssxl"),
+                                    item.get("zktsfl")
+                            ),
+                            Collectors.summingInt(item -> UtilMap.getInt(item, "value"))
+                    )).entrySet()
+                    .stream()
+                    .map(entry -> {
+                        // 将分组键(List<Object>)和汇总值转换为 Map
+                        List<Object> key = entry.getKey();
+                        Map<String, Object> groupedItem = new LinkedHashMap<>();
+                        groupedItem.put("textField_mev1n474", key.get(0));
+                        groupedItem.put("textField_mev1n477", key.get(1));
+                        groupedItem.put("selectField_mf205zr0", key.get(2));
+                        groupedItem.put("numberField_mev270x6", year);
+                        groupedItem.put("numberField_mev270x5", month);
+                        groupedItem.put("numberField_mfat6egj", entry.getValue());
+                        return groupedItem;
+                    }).collect(Collectors.toList());
+
+            for (Map groupMap : grouprList) {
+                ydClient.operateData(YDParam.builder()
+                        .formUuid("FORM-4CB51E04B8344622BE880C9D573F68CANKWU")
+                        .formDataJson(JSONObject.toJSONString(groupMap))
+                        .build(), YDConf.FORM_OPERATION.create);
+
+                ydClient.operateData(YDParam.builder()
+                        .formUuid("FORM-5764CC3F6D964FD3A165BD7D4D75999FO8NQ")
+                        .formDataJson(JSONObject.toJSONString(groupMap))
+                        .build(), YDConf.FORM_OPERATION.create);
+            }
         }catch (Exception e){
             fail(e.getMessage());
         }
@@ -160,7 +294,46 @@ public class KdHuaGaoServiceImpl implements KdHuaGaoService {
     public void syncSTKInventory() {
         MDC.put("MDC_KEY_PID","1002");
 
+        // 获取当前日期
+        LocalDate today = LocalDate.now();
+        int year = today.getYear();//获取当前年份
+        int month = today.getMonthValue();//当前月份
+        WeekFields weekFields = WeekFields.of(Locale.getDefault());
+        int weekOfMonth = today.get(weekFields.weekOfMonth());//当前日期是当月的第几周
+
         try {
+            //删除宜搭当周库存信息
+            log.info("开始删除即时库存数据:{}年,{}月,{}周",year,month,weekOfMonth);
+            List<List<String>> formInstanceIdListList = new ArrayList<>();//实例id集合,每100条
+
+            DDR_New ddrNew = new DDR_New();
+            int pageSize = 100;
+            int pageNumber = 0;
+            do {
+                pageNumber++;
+
+                ddrNew = ydClient.queryData(YDParam.builder()
+                        .formUuid("FORM-06C833A3B1804929987033DD6B0E7B2F73JP")
+                        .searchFieldJson(JSONObject.toJSONString(UtilMap.map("numberField_mev270x6, numberField_mev270x5, textField_mev2ers5", Arrays.asList(year,year), Arrays.asList(month,month), weekOfMonth)))
+                        .pageNumber(pageNumber)
+                        .pageSize(pageSize)
+                        .build(), YDConf.FORM_QUERY.retrieve_search_form_id);
+
+                formInstanceIdListList.addAll(Collections.singleton((List<String>) ddrNew.getData()));
+            }while (ddrNew.getPageNumber() * pageSize < ddrNew.getTotalCount());
+
+            for (List<String> formInstanceIdList : formInstanceIdListList) {
+                if (!formInstanceIdList.isEmpty()){
+                    ydClient.operateData(YDParam.builder()
+                            .formUuid("FORM-06C833A3B1804929987033DD6B0E7B2F73JP")
+                            .formInstanceIdList(formInstanceIdList)
+                            .build(), YDConf.FORM_OPERATION.delete_batch);
+                }
+            }
+            log.info("删除即时库存数据完成:{}年,{}月,{}周",year,month,weekOfMonth);
+
+            log.info("开始同步即时库存数据:{}年,{}月,{}周",year,month,weekOfMonth);
+
             K3CloudApi client = new K3CloudApi(initIden());
 
             int startRow = 0;
@@ -170,14 +343,11 @@ public class KdHuaGaoServiceImpl implements KdHuaGaoService {
 
             billQuery.setLimit(limit);
             billQuery.setFormId("STK_Inventory");
-            billQuery.setFieldKeys("FMaterialId,FStockId,FLot,FStockUnitId,FQty,FAVBQty,FBaseQty,FBaseAVBQty,FStockStatusId");
+            billQuery.setFieldKeys("FMaterialID.FNumber,FMaterialID.FName,FMaterialID.FSpecification,FMaterialID.F_QUXZ_Assistant,FMaterialID.FSTOREURNOM,FMaterialID.FSTOREURNUM,FStockId,FStockId.FName,FLot,FLot.FName,FStockUnitId,FStockUnitId.FName,FBaseQty,FStockStatusId.FName");
             List<Map> filterString = new ArrayList<>();
-            //仓库等于成品仓 仓位等于默认仓位或样机仓位 在库状态等于待入库或在库
-            /*filterString.add(UtilMap.map("FieldName, Compare, Value, Left, Right, Logic","FStockId.FName","67","成品仓","","","0"));//仓库名称等于XX
-            filterString.add(UtilMap.map("FieldName, Compare, Value, Left, Right, Logic","FStockLocId.FF100001.FName","67","默认仓位","(","","1"));//仓位等于XX
-            filterString.add(UtilMap.map("FieldName, Compare, Value, Left, Right, Logic","FStockLocId.FF100001.FName","67","样机仓位","",")","0"));//仓位等于XX
-            filterString.add(UtilMap.map("FieldName, Compare, Value, Left, Right, Logic","FStockStatus","29","0","(","","1"));//在库状态等于XX
-            filterString.add(UtilMap.map("FieldName, Compare, Value, Left, Right, Logic","FStockStatus","29","1","",")","0"));//在库状态等于XX*/
+            //仓库等于成品仓或组装半成品仓
+            filterString.add(UtilMap.map("FieldName, Compare, Value, Left, Right, Logic","FStockName","338","成品仓,组装半成品仓","","","0"));//仓库名称 IN XX
+            filterString.add(UtilMap.map("FieldName, Compare, Value, Left, Right, Logic","FBaseQty","21",0,"","","0"));//库存量(主单位) > 0
 
             billQuery.setFilterString(filterString);
 
@@ -193,6 +363,125 @@ public class KdHuaGaoServiceImpl implements KdHuaGaoService {
                 startRow += limit;
             }while (result.size() == limit);
 
+            List<Map> originList = new ArrayList<>();
+
+            for (Map map : list) {
+                Map formData = new HashMap();
+
+                String FMaterialNumber = UtilMap.getString(map,"FMaterialID.FNumber");//物料编码
+                String FMaterialName = UtilMap.getString(map,"FMaterialID.FName");//物料名称
+                String FMaterialSpecification = UtilMap.getString(map,"FMaterialID.FSpecification");//物料规格
+                String FQUXZAssistant = Objects.nonNull(map.get("FMaterialID.F_QUXZ_Assistant")) ? UtilMap.getString(map,"FMaterialID.F_QUXZ_Assistant") : "--";//所属系列
+                String FStockName = UtilMap.getString(map,"FStockId.FName");//仓库名称
+                String FLotName = UtilMap.getString(map,"FLot.FName");//批号
+                String FStockUnitName = UtilMap.getString(map,"FStockUnitId.FName");//库存主单位
+                Double FBaseQty = UtilMap.getDouble(map,"FBaseQty");//库存数量
+                String FStockStatusName = UtilMap.getString(map,"FStockStatusId.FName");//库存状态
+
+                Double FSTOREURNOM = UtilMap.getDouble(map, "FMaterialID.FSTOREURNOM");
+                Double FSTOREURNUM = UtilMap.getDouble(map, "FMaterialID.FSTOREURNUM");
+
+                Double FQty = FBaseQty * FSTOREURNOM / FSTOREURNUM;//库存量(主单位)
+
+                formData.put("textField_mfarr0ei",FMaterialNumber);
+                formData.put("textField_mfarr0en",FMaterialName);
+                formData.put("textField_mfarr0eo",FMaterialSpecification);
+                formData.put("textField_mflwgj61", FQUXZAssistant);
+                formData.put("textField_mfarr0et",FStockName);
+                formData.put("textField_mfarr0eu",FLotName);
+                formData.put("textField_mfarr0ev",FStockUnitName);
+                formData.put("numberField_mfarr0f2",FQty);
+                formData.put("textField_mfarr0f4",FStockStatusName);
+
+                formData.put("numberField_mev270x6",year);
+                formData.put("numberField_mev270x5",month);
+                formData.put("textField_mev2ers5",weekOfMonth);
+
+                ydClient.operateData(YDParam.builder()
+                        .formUuid("FORM-06C833A3B1804929987033DD6B0E7B2F73JP")
+                        .formDataJson(JSONObject.toJSONString(formData))
+                        .build(), YDConf.FORM_OPERATION.create);
+
+                Map origin = new HashMap();
+                origin.put("ck",FStockName);
+                origin.put("ssxl",FQUXZAssistant);
+                origin.put("value",FQty);
+
+                originList.add(origin);
+            }
+
+            log.info("同步即时库存数据结束:{}年,{}月,{}周",year,month,weekOfMonth);
+
+            //删除宜搭历史最新库存信息
+            List<Map> data = (List<Map>) ydClient.queryData(YDParam.builder()
+                    .formUuid("FORM-35A70C47B4904437B05935AC0B23F981TR4B")
+                    .searchFieldJson(JSONObject.toJSONString(UtilMap.map("numberField_mev270x6, numberField_mev270x5",Arrays.asList(year,year), Arrays.asList(month,month))))
+                    .build(), YDConf.FORM_QUERY.retrieve_list).getData();
+
+            List<String> formInstanceIdList = new ArrayList<>();
+
+            for (Map datum : data) {
+                formInstanceIdList.add(UtilMap.getString(datum,"formInstanceId"));
+            }
+
+            if (!formInstanceIdList.isEmpty()){
+                ydClient.operateData(YDParam.builder()
+                        .formUuid("FORM-35A70C47B4904437B05935AC0B23F981TR4B")
+                        .formInstanceIdList(formInstanceIdList)
+                        .build(), YDConf.FORM_OPERATION.delete_batch);
+            }
+
+            List<Map> data2 = (List<Map>) ydClient.queryData(YDParam.builder()
+                    .formUuid("FORM-842BAB01084747E5B7E0811A16BE6AA56FUH")
+                    .searchFieldJson(JSONObject.toJSONString(UtilMap.map("numberField_mev270x6",Arrays.asList(year,year))))
+                    .build(), YDConf.FORM_QUERY.retrieve_list).getData();
+
+            List<String> formInstanceIdList2 = new ArrayList<>();
+
+            for (Map datum : data2) {
+                formInstanceIdList2.add(UtilMap.getString(datum,"formInstanceId"));
+            }
+
+            if (!formInstanceIdList2.isEmpty()){
+                ydClient.operateData(YDParam.builder()
+                        .formUuid("FORM-842BAB01084747E5B7E0811A16BE6AA56FUH")
+                        .formInstanceIdList(formInstanceIdList2)
+                        .build(), YDConf.FORM_OPERATION.delete_batch);
+            }
+
+            //将最新库存信息写入宜搭
+            List<Map> grouprList = originList.stream()
+                    .collect(Collectors.groupingBy(
+                            item -> Arrays.asList(
+                                    item.get("ck"),
+                                    item.get("ssxl")
+                            ),
+                            Collectors.summingDouble(item -> UtilMap.getDouble(item, "value"))
+                    )).entrySet()
+                    .stream()
+                    .map(entry -> {
+                        // 将分组键(List<Object>)和汇总值转换为 Map
+                        List<Object> key = entry.getKey();
+                        Map<String, Object> groupedItem = new LinkedHashMap<>();
+                        groupedItem.put("textField_mfarr0et", key.get(0));
+                        groupedItem.put("textField_mflwgj61", key.get(1));
+                        groupedItem.put("numberField_mev270x6", year);
+                        groupedItem.put("numberField_mev270x5", month);
+                        groupedItem.put("numberField_mfarr0f2", entry.getValue());
+                        return groupedItem;
+                    }).collect(Collectors.toList());
+
+            for (Map groupMap : grouprList) {
+                ydClient.operateData(YDParam.builder()
+                        .formUuid("FORM-35A70C47B4904437B05935AC0B23F981TR4B")
+                        .formDataJson(JSONObject.toJSONString(groupMap))
+                        .build(), YDConf.FORM_OPERATION.create);
+
+                ydClient.operateData(YDParam.builder()
+                        .formUuid("FORM-842BAB01084747E5B7E0811A16BE6AA56FUH")
+                        .formDataJson(JSONObject.toJSONString(groupMap))
+                        .build(), YDConf.FORM_OPERATION.create);
+            }
 
         }catch (Exception e){
             fail(e.getMessage());
@@ -200,6 +489,363 @@ public class KdHuaGaoServiceImpl implements KdHuaGaoService {
 
     }
 
+    //定时同步昨日到今天的
+    @Override
+    public void syncPRDReturnMtrl() {
+        MDC.put("MDC_KEY_PID","1002");
+
+        K3CloudApi client = new K3CloudApi(initIden());
+
+        int startRow = 0;
+        int limit = 2000;
+
+        BillQuery billQuery = new BillQuery();
+
+        billQuery.setLimit(limit);
+        billQuery.setFormId("PRD_ReturnMtrl");
+        billQuery.setFieldKeys("FBillNo,FDate,FPPBOMEntryId,FMaterialId.FNumber,FMaterialId.FName,FMaterialId.FSpecification,FMaterialId.FDefaultVendor,FReturnType,FQty");
+        List<Map> filterString = new ArrayList<>();
+        //审核日期为昨日到现在且单据状态等于已审核
+        filterString.add(UtilMap.map("FieldName, Compare, Value, Left, Right, Logic","FApproveDate","265",1,"","","0"));//审核日期在今天之前XX天之后
+        filterString.add(UtilMap.map("FieldName, Compare, Value, Left, Right, Logic","FDocumentStatus","105","C","","","0"));//单据状态等于XX
+//        filterString.add(UtilMap.map("FieldName, Compare, Value, Left, Right, Logic","FApproveDate","420","2025-01-01","","","0"));//审核日期等于XX年
+
+        billQuery.setFilterString(filterString);
+
+        List<Map> result = new ArrayList<>();
+        List<Map> list = new ArrayList<>();
+
+        do {
+            billQuery.setStartRow(startRow);
+
+            try {
+                result = (List<Map>)JSONObject.parse(client.billQuery(JSONObject.toJSONString(billQuery)));
+            } catch (Exception e) {
+                fail(e.getMessage());
+            }
+
+            list.addAll(result);
+
+            startRow += limit;
+        }while (result.size() == limit);
+
+        for (Map map : list) {
+            Map formData = new HashMap();
+            String fBillNo = UtilMap.getString(map, "FBillNo");
+            formData.put("textField_mfm7o4wb", fBillNo);//单据编号
+
+            String fDate = UtilMap.getString(map, "FDate");
+            // 解析字符串为 LocalDateTime
+            LocalDateTime localDateTime = LocalDateTime.parse(fDate);
+            // 将 LocalDateTime 转换为 ZonedDateTime
+            ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.systemDefault());
+            formData.put("dateField_mfm7o4wc", zonedDateTime.toInstant().toEpochMilli());//单据日期
+
+            String fppbomEntryId = UtilMap.getString(map, "FPPBOMEntryId");
+            formData.put("textField_mfmaqppu", fppbomEntryId);//分录明细id
+            formData.put("textField_mfm7o4we", UtilMap.getString(map,"FMaterialId.FNumber"));//物料编码
+
+            formData.put("textField_mfm7o4wf", UtilMap.getString(map,"FMaterialId.FName"));//物料名称
+            formData.put("textField_mfm7o4wg", UtilMap.getString(map,"FMaterialId.FSpecification"));//物料规格
+            formData.put("textField_mfq6bwfl", UtilMap.getString(map,"FMaterialId.FDefaultVendor"));//默认供应商
+
+            //退料类型
+            String type = UtilMap.getString(map, "FReturnType");
+            String typeValue = "";
+            switch (type){
+                case "1": typeValue = "良品退料";break;
+                case "2": typeValue = "来料不良退料";break;
+                case "3": typeValue = "作业不良退料";break;
+                default:break;
+            }
+            formData.put("textField_mfm7o4wh", typeValue);
+
+            formData.put("numberField_mfm7o4wj", UtilMap.getDouble(map,"FQty"));//退料数量
+
+            ydClient.operateData(YDParam.builder()
+                    .formUuid("FORM-D21383AF87AC48BEB577485C37F46E8FUAIK")
+                    .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mfm7o4wb, textField_mfmaqppu, textField_mfm7o4wh",fBillNo,fppbomEntryId,typeValue)))
+                    .formDataJson(JSONObject.toJSONString(formData))
+                    .build(), YDConf.FORM_OPERATION.upsert);
+        }
+    }
+
+    @Async
+    @Override
+    public void syncReport(String type,String userId) {
+        try {
+            switch (type){
+                case "成品库存天数看看板": syncBDSerialMainFile();break;
+                case "成品/组件库存看板": syncSTKInventory();break;
+                case "不良物料退库统计看板": syncPRDReturnMtrl();break;
+                case "成品/样机出库看板": syncDLVNotice();break;
+                default:break;
+            }
+            //发送工作通知
+            if (Objects.nonNull(userId)){
+                sendDdMsg(ddClient.getAccessToken(),ddConf.getAgentId(),userId,"更新" + type + "完成  时间:" + DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss"));
+            }
+
+        }catch (Exception e){
+            //发送工作通知
+            if (Objects.nonNull(userId)){
+                sendDdMsg(ddClient.getAccessToken(),ddConf.getAgentId(),userId,"更新" + type + "异常:" + e.getMessage() + "  时间:" + DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss"));
+            }
+        }
+    }
+
+    @Override
+    public void syncPendingProducts() {
+        MDC.put("MDC_KEY_PID","1002");
+
+        // 获取当前日期
+        LocalDate today = LocalDate.now();
+        int year = today.getYear();//获取当前年份
+        int month = today.getMonthValue();//当前月份
+        WeekFields weekFields = WeekFields.of(Locale.getDefault());
+        int weekOfMonth = today.get(weekFields.weekOfMonth()) - 1;//当前日期是当月的第几周
+
+        DDR_New ddrNew = new DDR_New();
+        int pageSize = 100;
+        int pageNumber = 0;
+
+        List<Map> list = new ArrayList<>();
+
+        do {
+            pageNumber++;
+
+            ddrNew = ydClient.queryData(YDParam.builder()
+                    .formUuid("FORM-C4751EF730D74299A0449E40C2601AE5L2BU")
+                    .searchCondition(JSONObject.toJSONString(UtilMap.map("numberField_mev270x6, numberField_mev270x5, textField_mev2ers5", Arrays.asList(year,year), Arrays.asList(month,month), weekOfMonth)))
+                    .pageNumber(pageNumber)
+                    .pageSize(pageSize)
+                    .build(), YDConf.FORM_QUERY.retrieve_list);
+
+            List<Map> data = (List<Map>) ddrNew.getData();
+
+            for (Map datum : data) {
+                list.add(UtilMap.getMap(datum,"formData"));
+            }
+        }while (ddrNew.getPageNumber() * pageSize < ddrNew.getTotalCount());
+
+        //删除宜搭历史最新库存信息
+        List<Map> data = (List<Map>) ydClient.queryData(YDParam.builder()
+                .formUuid("FORM-BC40899D61134DDFB80E6C693E9EA930Y6NW")
+                .searchFieldJson(JSONObject.toJSONString(UtilMap.map("numberField_mev270x6, numberField_mev270x5",Arrays.asList(year,year), Arrays.asList(month,month))))
+                .build(), YDConf.FORM_QUERY.retrieve_list).getData();
+
+        List<String> formInstanceIdList = new ArrayList<>();
+
+        for (Map datum : data) {
+            formInstanceIdList.add(UtilMap.getString(datum,"formInstanceId"));
+        }
+
+        if (!formInstanceIdList.isEmpty()){
+            ydClient.operateData(YDParam.builder()
+                    .formUuid("FORM-BC40899D61134DDFB80E6C693E9EA930Y6NW")
+                    .formInstanceIdList(formInstanceIdList)
+                    .build(), YDConf.FORM_OPERATION.delete_batch);
+        }
+
+        List<Map> data2 = (List<Map>) ydClient.queryData(YDParam.builder()
+                .formUuid("FORM-28F9CA5CEBFA488A83B1A20721692B6CD3P8")
+                .searchFieldJson(JSONObject.toJSONString(UtilMap.map("numberField_mev270x6",Arrays.asList(year,year))))
+                .build(), YDConf.FORM_QUERY.retrieve_list).getData();
+
+        List<String> formInstanceIdList2 = new ArrayList<>();
+
+        for (Map datum : data2) {
+            formInstanceIdList2.add(UtilMap.getString(datum,"formInstanceId"));
+        }
+
+        if (!formInstanceIdList2.isEmpty()){
+            ydClient.operateData(YDParam.builder()
+                    .formUuid("FORM-28F9CA5CEBFA488A83B1A20721692B6CD3P8")
+                    .formInstanceIdList(formInstanceIdList2)
+                    .build(), YDConf.FORM_OPERATION.delete_batch);
+        }
+
+        //将最新库存信息写入宜搭
+        List<Map> grouprList = list.stream()
+                .collect(Collectors.groupingBy(
+                        item -> Arrays.asList(
+                                item.get("textField_mfes8fg5")
+                        ),
+                        Collectors.summingDouble(item -> UtilMap.getDouble(item, "numberField_mfes8fg7"))
+                )).entrySet()
+                .stream()
+                .map(entry -> {
+                    // 将分组键(List<Object>)和汇总值转换为 Map
+                    List<Object> key = entry.getKey();
+                    Map<String, Object> groupedItem = new LinkedHashMap<>();
+                    groupedItem.put("textField_mfes8fg5", key.get(0));
+                    groupedItem.put("numberField_mev270x6", year);
+                    groupedItem.put("numberField_mev270x5", month);
+                    groupedItem.put("numberField_mfes8fg7", entry.getValue());
+                    return groupedItem;
+                }).collect(Collectors.toList());
+
+        for (Map groupMap : grouprList) {
+            ydClient.operateData(YDParam.builder()
+                    .formUuid("FORM-BC40899D61134DDFB80E6C693E9EA930Y6NW")
+                    .formDataJson(JSONObject.toJSONString(groupMap))
+                    .build(), YDConf.FORM_OPERATION.create);
+
+            ydClient.operateData(YDParam.builder()
+                    .formUuid("FORM-28F9CA5CEBFA488A83B1A20721692B6CD3P8")
+                    .formDataJson(JSONObject.toJSONString(groupMap))
+                    .build(), YDConf.FORM_OPERATION.create);
+        }
+
+    }
+
+    @Override
+    public void syncDLVNotice() {
+        MDC.put("MDC_KEY_PID","1002");
+
+        K3CloudApi client = new K3CloudApi(initIden());
+
+        int startRow = 0;
+        int limit = 2000;
+
+        BillQuery billQuery = new BillQuery();
+
+        billQuery.setLimit(limit);
+        billQuery.setFormId("SAL_DELIVERYNOTICE");
+        billQuery.setFieldKeys("FBillNo,FDate,FCustomerID.FName,F_QUXZ_Assistant.FNumber,FSOEntryId,FMaterialId.FNumber,FMaterialId.FName,FMaterialId.FSpecification,FMaterialId.F_QUXZ_Assistant,FUnitID.FName,FQty,FIsFree,FHGZBDay.FNumber,FStockID.FName");
+        List<Map> filterString = new ArrayList<>();
+        //审核日期为昨日到现在且单据状态等于已审核且明细收件人地址不为空
+        filterString.add(UtilMap.map("FieldName, Compare, Value, Left, Right, Logic","FApproveDate","265",1,"","","0"));//审核日期在今天之前XX天之后
+        filterString.add(UtilMap.map("FieldName, Compare, Value, Left, Right, Logic","FDocumentStatus","105","C","","","0"));//单据状态等于XX
+        filterString.add(UtilMap.map("FieldName, Compare, Value, Left, Right, Logic","FHGReceiveDZ","52","","","","0"));//明细收件人地址不为空
+//        filterString.add(UtilMap.map("FieldName, Compare, Value, Left, Right, Logic","FApproveDate","420","2025-01-01","","","0"));//审核日期等于XX年
+//        filterString.add(UtilMap.map("FieldName, Compare, Value, Left, Right, Logic","FApproveDate","63","","","","0"));//审核日期等于本月
+
+        billQuery.setFilterString(filterString);
+
+        List<Map> result = new ArrayList<>();
+        List<Map> list = new ArrayList<>();
+
+        do {
+            billQuery.setStartRow(startRow);
+
+            try {
+                result = (List<Map>)JSONObject.parse(client.billQuery(JSONObject.toJSONString(billQuery)));
+            } catch (Exception e) {
+                fail(e.getMessage());
+            }
+
+            list.addAll(result);
+
+            startRow += limit;
+        }while (result.size() == limit);
+
+        for (Map map : list) {
+            Map formData = new HashMap();
+            String fBillNo = UtilMap.getString(map, "FBillNo");
+            formData.put("textField_mfqf1fj5", fBillNo);//单据编号
+
+            String fDate = UtilMap.getString(map, "FDate");
+            // 解析字符串为 LocalDateTime
+            LocalDateTime localDateTime = LocalDateTime.parse(fDate);
+            // 将 LocalDateTime 转换为 ZonedDateTime
+            ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.systemDefault());
+
+            //localDateTime是当月的第几周
+            int week = localDateTime.get(WeekFields.ISO.weekOfWeekBasedYear());
+
+            formData.put("dateField_mfqf1fj4", zonedDateTime.toInstant().toEpochMilli());//单据日期
+            formData.put("textField_mfqf1fj6",UtilMap.getString(map,"FCustomerID.FName"));//客户名称
+
+            String F_QUXZ_AssistantFNumber = UtilMap.getString(map, "F_QUXZ_Assistant.FNumber");
+            String F_QUXZ_Assistant = "";
+            switch (F_QUXZ_AssistantFNumber){
+                case "01": F_QUXZ_Assistant = "正常订单";break;
+                case "02": F_QUXZ_Assistant = "样机订单";break;
+                case "03": F_QUXZ_Assistant = "租赁订单";break;
+                case "04": F_QUXZ_Assistant = "维修订单";break;
+                case "05": F_QUXZ_Assistant = "研发订单";break;
+                case "06": F_QUXZ_Assistant = "服务订单";break;
+                case "10": F_QUXZ_Assistant = "营销支持";break;
+                case "JD": F_QUXZ_Assistant = "京东订单";break;
+                case "SHZY": F_QUXZ_Assistant = "售后专用";break;
+                case "TM": F_QUXZ_Assistant = "天猫订单";break;
+                default:break;
+            }
+            formData.put("textField_mfqhmwpu", F_QUXZ_Assistant);//销售类型
+
+            String fsoEntryId = UtilMap.getString(map, "FSOEntryId");
+            formData.put("textField_mfqf1fjm", fsoEntryId);//销售订单EntryId
+            formData.put("textField_mfqf1fj7", UtilMap.getString(map,"FMaterialId.FNumber"));//物料编码
+            formData.put("textField_mfqf1fj8", UtilMap.getString(map,"FMaterialId.FName"));//物料名称
+            formData.put("textField_mfqf1fj9", UtilMap.getString(map,"FMaterialId.FSpecification"));//物料规格
+            formData.put("textField_mfqf1fk3", UtilMap.getString(map,"FMaterialId.F_QUXZ_Assistant"));//所属系列
+            formData.put("textField_mfqf1fjb", UtilMap.getString(map,"FUnitID.FName"));//销售单位
+            formData.put("numberField_mfqf1fjd", UtilMap.getDouble(map,"FQty"));//销售数量
+            formData.put("textField_mfqf1fjh", UtilMap.getBoolean(map,"FIsFree") ? "是" : "否");//是否赠品
+            formData.put("textField_mfqf1fjj", UtilMap.getString(map,"FStockID.FName"));//出货仓库
+
+            String FHGZBDayFNumber = UtilMap.getString(map, "FHGZBDay.FNumber");
+            String FHGZBDay = "";
+            switch (FHGZBDayFNumber){
+                case "01": FHGZBDay = "1年";break;
+                case "02": FHGZBDay = "2年";break;
+                case "03": FHGZBDay = "3年";break;
+                case "04": FHGZBDay = "4年";break;
+                case "05": FHGZBDay = "5年";break;
+                case "06": FHGZBDay = "15";break;
+                case "07": FHGZBDay = "27";break;
+                default:break;
+            }
+            formData.put("textField_mfqhmwpv", FHGZBDay);//质保期
+
+            formData.put("textField_mfqithiv",getWeekOfMonth(localDateTime));//所属周
+
+            ydClient.operateData(YDParam.builder()
+                    .formUuid("FORM-F7DB6FC6E47949A98BDD3DC344B3CBC1V7HY")
+                    .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mfqf1fj5, textField_mfqf1fjm",fBillNo,fsoEntryId)))
+                    .formDataJson(JSONObject.toJSONString(formData))
+                    .build(), YDConf.FORM_OPERATION.upsert);
+        }
+    }
+
+    public static int getWeekOfMonth(LocalDateTime dateTime) {
+        LocalDateTime date = dateTime.toLocalDate().atStartOfDay();
+
+        // 获取当月第一天
+        LocalDateTime firstDayOfMonth = date.with(TemporalAdjusters.firstDayOfMonth());
+
+        // 获取当月第一天是星期几(1-7,周一到周日)
+        int firstDayOfWeek = firstDayOfMonth.getDayOfWeek().getValue();
+
+        // 计算当前日期是当月的第几天
+        int dayOfMonth = date.getDayOfMonth();
+
+        // 计算周数(ISO标准,周一为一周开始)
+        // 第一周从1号开始,即使1号不是周一
+        int week = ((dayOfMonth + firstDayOfWeek - 2) / 7) + 1;
+
+        return week;
+    }
+
+    //发送工作通知
+    public void sendDdMsg(String access_token,Number agent_id, String userid_list, String content){
+        if (Objects.nonNull(userid_list)){
+            Map param2 = new HashMap();
+            param2.put("access_token",access_token);
+            Map body3 = new HashMap();
+            body3.put("agent_id",agent_id);
+            body3.put("userid_list",userid_list);
+            Map msg = new HashMap();
+            msg.put("msgtype","text");
+            //获取当前时间 精确到秒
+            String time = DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss");
+            msg.put("text", UtilMap.map("content",content));
+            body3.put("msg",msg);
+            UtilHttp.doPost("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2",null,param2,body3);
+        }
+    }
+
     private IdentifyInfo initIden(){
         //注意 1:此处不再使用参数形式传入用户名及密码等敏感信息,改为在登录配置文件中设置。
         //注意 2:必须先配置第三方系统登录授权信息后,再进行业务操作,详情参考各语言版本SDK介绍中的登录配置文件说明。

+ 137 - 3
mjava-huagao/src/test/java/com/malk/huagao/KdTest.java

@@ -6,17 +6,20 @@ import com.kingdee.bos.webapi.sdk.K3CloudApi;
 import com.malk.huagao.KdEntity.BillQuery;
 import com.malk.huagao.config.KDWebApiConf;
 import com.malk.huagao.service.KdHuaGaoService;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.service.aliwork.YDClient;
 import com.malk.utils.UtilMap;
 import lombok.extern.slf4j.Slf4j;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.slf4j.MDC;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Slf4j
 @SpringBootTest
@@ -28,6 +31,9 @@ public class KdTest {
     @Autowired
     private KdHuaGaoService kdHuaGaoService;
 
+    @Autowired
+    private YDClient ydClient;
+
     @Test
     public void test() throws Exception {
         K3CloudApi client = new K3CloudApi(initIden());
@@ -69,6 +75,131 @@ public class KdTest {
         kdHuaGaoService.syncBDSerialMainFile();
     }
 
+
+    @Test
+    public void test3() {
+        MDC.put("MDC_KEY_PID","1002");
+
+        int year = 2025;
+        int month = 9;
+
+        List<Map> originList = new ArrayList<>();
+        originList.add(UtilMap.map("cw, ssxl, zktsfl, year, month, value","成品仓","G100","0-30天",2023,1,1));
+        originList.add(UtilMap.map("cw, ssxl, zktsfl, year, month, value","成品仓","G200","0-60天",2023,2,1));
+        originList.add(UtilMap.map("cw, ssxl, zktsfl, year, month, value","成品仓","G300","0-30天",2023,3,1));
+        originList.add(UtilMap.map("cw, ssxl, zktsfl, year, month, value","成品仓","G100","0-30天",2023,1,1));
+        originList.add(UtilMap.map("cw, ssxl, zktsfl, year, month, value","成品仓","G100","0-90天",2023,1,1));
+        originList.add(UtilMap.map("cw, ssxl, zktsfl, year, month, value","样机仓","G100","0-30天",2023,2,1));
+        originList.add(UtilMap.map("cw, ssxl, zktsfl, year, month, value","样机仓","G200","0-30天",2023,1,1));
+        originList.add(UtilMap.map("cw, ssxl, zktsfl, year, month, value","样机仓","G300","0-60天",2023,3,1));
+        originList.add(UtilMap.map("cw, ssxl, zktsfl, year, month, value","样机仓","G100","0-30天",2023,1,1));
+        originList.add(UtilMap.map("cw, ssxl, zktsfl, year, month, value","样机仓","G100","0-30天",2023,2,1));
+
+        //删除宜搭历史最新库存信息
+        List<Map> data = (List<Map>) ydClient.queryData(YDParam.builder()
+                .formUuid("FORM-4CB51E04B8344622BE880C9D573F68CANKWU")
+                .searchFieldJson(JSONObject.toJSONString(UtilMap.map("numberField_mev270x6, numberField_mev270x5",year, month)))
+                .build(), YDConf.FORM_QUERY.retrieve_list).getData();
+
+        List<String> formInstanceIdList = new ArrayList<>();
+
+        for (Map datum : data) {
+            formInstanceIdList.add(UtilMap.getString(datum,"formInstanceId"));
+        }
+
+        if(!formInstanceIdList.isEmpty()){
+            ydClient.operateData(YDParam.builder()
+                    .formUuid("FORM-4CB51E04B8344622BE880C9D573F68CANKWU")
+                    .formInstanceIdList(formInstanceIdList)
+                    .build(), YDConf.FORM_OPERATION.delete_batch);
+        }
+
+        List<Map> data2 = (List<Map>) ydClient.queryData(YDParam.builder()
+                .formUuid("FORM-5764CC3F6D964FD3A165BD7D4D75999FO8NQ")
+                .searchFieldJson(JSONObject.toJSONString(UtilMap.map("numberField_mev270x6",year)))
+                .build(), YDConf.FORM_QUERY.retrieve_list).getData();
+
+        List<String> formInstanceIdList2 = new ArrayList<>();
+
+        for (Map datum : data2) {
+            formInstanceIdList2.add(UtilMap.getString(datum,"formInstanceId"));
+        }
+
+        if(!formInstanceIdList2.isEmpty()){
+            ydClient.operateData(YDParam.builder()
+                    .formUuid("FORM-5764CC3F6D964FD3A165BD7D4D75999FO8NQ")
+                    .formInstanceIdList(formInstanceIdList2)
+                    .build(), YDConf.FORM_OPERATION.delete_batch);
+        }
+
+        //将最新库存信息写入宜搭
+        List<Map> grouprList = originList.stream()
+                .collect(Collectors.groupingBy(
+                        item -> Arrays.asList(
+                                item.get("cw"),
+                                item.get("ssxl"),
+                                item.get("zktsfl")
+                        ),
+                        Collectors.summingInt(item -> UtilMap.getInt(item, "value"))
+                )).entrySet()
+                .stream()
+                .map(entry -> {
+                    // 将分组键(List<Object>)和汇总值转换为 Map
+                    List<Object> key = entry.getKey();
+                    Map<String, Object> groupedItem = new LinkedHashMap<>();
+                    groupedItem.put("textField_mev1n474", key.get(0));
+                    groupedItem.put("textField_mev1n477", key.get(1));
+                    groupedItem.put("selectField_mf205zr0", key.get(2));
+                    groupedItem.put("numberField_mev270x6", year);
+                    groupedItem.put("numberField_mev270x5", month);
+                    groupedItem.put("numberField_mfat6egj", entry.getValue());
+                    return groupedItem;
+                }).collect(Collectors.toList());
+
+        // 3. 打印原集合和分组结果
+        System.out.println("=== 原集合(List<Map>)===");
+        originList.forEach(System.out::println);
+
+        System.out.println("\n=== 分组求和结果(List<Map>)===");
+        grouprList.forEach(System.out::println);
+
+        for (Map groupMap : grouprList) {
+            ydClient.operateData(YDParam.builder()
+                    .formUuid("FORM-4CB51E04B8344622BE880C9D573F68CANKWU")
+                    .formDataJson(JSONObject.toJSONString(groupMap))
+                    .build(), YDConf.FORM_OPERATION.create);
+
+            ydClient.operateData(YDParam.builder()
+                    .formUuid("FORM-5764CC3F6D964FD3A165BD7D4D75999FO8NQ")
+                    .formDataJson(JSONObject.toJSONString(groupMap))
+                    .build(), YDConf.FORM_OPERATION.create);
+        }
+
+
+
+
+    }
+
+    @Test
+    public void test4(){
+        kdHuaGaoService.syncSTKInventory();
+    }
+
+    @Test
+    public void test5(){
+        kdHuaGaoService.syncPRDReturnMtrl();
+    }
+
+    @Test
+    public void test6(){
+        kdHuaGaoService.syncPendingProducts();
+    }
+
+    @Test
+    public void test7(){
+        kdHuaGaoService.syncDLVNotice();
+    }
+
     private IdentifyInfo initIden(){
         //注意 1:此处不再使用参数形式传入用户名及密码等敏感信息,改为在登录配置文件中设置。
         //注意 2:必须先配置第三方系统登录授权信息后,再进行业务操作,详情参考各语言版本SDK介绍中的登录配置文件说明。
@@ -82,4 +213,7 @@ public class KdTest {
 
         return iden;
     }
+
+
+
 }

+ 2 - 2
mjava-huagao/src/test/java/com/malk/huagao/YyYdTest.java

@@ -110,8 +110,8 @@ public class YyYdTest {
 
     @Test
     public void test3() {
-        LocalDateTime startTime= LocalDate.now().minusDays(3).atTime(LocalTime.MIN);
-        LocalDateTime endTime= LocalDate.now().minusDays(2).atTime(LocalTime.MIN);
+        LocalDateTime startTime= LocalDate.now().minusDays(2).atTime(LocalTime.MIN);
+        LocalDateTime endTime= LocalDate.now().minusDays(1).atTime(LocalTime.MIN);
 //        LocalDateTime endTime= LocalDate.now().atTime(LocalTime.MIN);
 
         huaGaoService.syncKqData(startTime,endTime);