Bladeren bron

初版提交

chenkang11 1 week geleden
bovenliggende
commit
13909786ee
46 gewijzigde bestanden met toevoegingen van 2099 en 8555 verwijderingen
  1. 0 337
      mjava-paineng/src/main/java/com/malk/paineng/Timers/timer1.java
  2. 0 69
      mjava-paineng/src/main/java/com/malk/paineng/controller/DDController.java
  3. 0 51
      mjava-paineng/src/main/java/com/malk/paineng/controller/GZTController.java
  4. 0 10
      mjava-paineng/src/main/java/com/malk/paineng/service/GZT_PN.java
  5. 0 24
      mjava-paineng/src/main/java/com/malk/paineng/service/YD_PN.java
  6. 0 50
      mjava-paineng/src/main/java/com/malk/paineng/service/ZT_PN.java
  7. 0 24
      mjava-paineng/src/main/java/com/malk/paineng/service/ZhongTai_All.java
  8. 0 91
      mjava-paineng/src/main/java/com/malk/paineng/service/impl/GZT_PNImpl.java
  9. 0 533
      mjava-paineng/src/main/java/com/malk/paineng/service/impl/YD_PNImpl.java
  10. 0 5504
      mjava-paineng/src/main/java/com/malk/paineng/service/impl/ZT_PNImpl.java
  11. 0 1744
      mjava-paineng/src/main/java/com/malk/paineng/service/impl/ZhongTai_AllImpl.java
  12. 0 47
      mjava-paineng/src/main/resources/application-prod.yml
  13. 0 31
      mjava-paineng/src/test/java/test.java
  14. 0 0
      mjava-ts/log/2024-10-22/error-0.log.gz
  15. 0 0
      mjava-ts/log/2024-10-22/info-0.log.gz
  16. 0 0
      mjava-ts/log/2024-10-22/point-0.log.gz
  17. 0 0
      mjava-ts/log/2024-10-22/warn-0.log.gz
  18. 0 0
      mjava-ts/log/2024-10-28/info-0.log.gz
  19. 0 0
      mjava-ts/log/2024-10-28/point-0.log.gz
  20. BIN
      mjava-ts/log/2024-12-09/error-0.log.gz
  21. BIN
      mjava-ts/log/2024-12-09/info-0.log.gz
  22. BIN
      mjava-ts/log/2024-12-09/point-0.log.gz
  23. BIN
      mjava-ts/log/2025-08-26/error-0.log.gz
  24. BIN
      mjava-ts/log/2025-08-26/info-0.log.gz
  25. BIN
      mjava-ts/log/2025-08-26/point-0.log.gz
  26. BIN
      mjava-ts/log/2025-08-26/warn-0.log.gz
  27. 4 4
      mjava-paineng/pom.xml
  28. 1 1
      mjava-paineng/src/main/java/com/malk/paineng/Boot.java
  29. 25 0
      mjava-ts/src/main/java/com/malk/taisen/Timers/Time.java
  30. 43 0
      mjava-ts/src/main/java/com/malk/taisen/configuration/RestTemplateBase.java
  31. 21 0
      mjava-ts/src/main/java/com/malk/taisen/controller/DDController.java
  32. 56 0
      mjava-ts/src/main/java/com/malk/taisen/controller/NonPoCpntroller.java
  33. 39 0
      mjava-ts/src/main/java/com/malk/taisen/controller/ProxyController.java
  34. 299 0
      mjava-ts/src/main/java/com/malk/taisen/delegate/DDDelegate.java
  35. 9 0
      mjava-ts/src/main/java/com/malk/taisen/service/NonPoServer.java
  36. 434 0
      mjava-ts/src/main/java/com/malk/taisen/service/impl/NonPoServerImpl.java
  37. 780 0
      mjava-ts/src/main/java/com/malk/taisen/util/CusutUtil.java
  38. 10 17
      mjava-paineng/src/main/java/com/malk/paineng/util/HttpUtil.java
  39. 20 13
      mjava-paineng/src/main/resources/application-dev.yml
  40. 56 0
      mjava-ts/src/main/resources/application-prod.yml
  41. 295 0
      mjava-ts/src/test/java/test.java
  42. 1 1
      mjava/pom.xml
  43. 2 1
      mjava/src/main/java/com/malk/delegate/DDEvent.java
  44. 1 1
      mjava/src/main/java/com/malk/server/dingtalk/DDFormComponentDto.java
  45. 1 0
      mjava/src/main/java/com/malk/service/dingtalk/impl/DDImplClient_Workflow.java
  46. 2 2
      pom.xml

+ 0 - 337
mjava-paineng/src/main/java/com/malk/paineng/Timers/timer1.java

@@ -1,337 +0,0 @@
-package com.malk.paineng.Timers;
-
-import cn.hutool.core.date.DateTime;
-import com.malk.paineng.controller.DDController;
-import com.malk.paineng.service.GZT_PN;
-import com.malk.paineng.service.YD_PN;
-import com.malk.paineng.service.ZT_PN;
-import com.malk.server.aliwork.YDConf;
-import com.malk.server.aliwork.YDParam;
-import com.malk.server.dingtalk.DDR_New;
-import com.malk.service.aliwork.YDClient;
-import com.malk.service.dingtalk.DDClient;
-import com.malk.service.dingtalk.DDClient_Contacts;
-import com.malk.service.dingtalk.DDClient_Workflow;
-import com.malk.utils.UtilMap;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.scheduling.annotation.Scheduled;
-
-import java.util.Calendar;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-@Slf4j
-@Configuration
-@EnableScheduling
-public class timer1 {
-    @Autowired
-    private DDController Controller1;
-    @Autowired
-    private YD_PN yd_pnServer;
-    @Autowired
-    private ZT_PN zt_pnServer;
-    @Autowired
-    private DDClient ddClient;
-
-    @Autowired
-    private YDClient ydClient;
-    @Autowired
-    private GZT_PN gzt_pn;
-
-
-    @Autowired
-    private DDClient_Workflow ddClient_workflow;
-    boolean ifss = true;
-
-    //@Scheduled(fixedRate = 100)
-    @Async
-    @Scheduled(cron = "0 0 4 * * ?")
-    public void LegalEntityList() throws Exception {
-
-        if (true) {
-            if (true) {
-                log.info("开启派能数据同步!");
-                System.out.println("开启派能数据同步!");
-                if (true) {
-                    zt_pnServer.ads_fin_gross_profit_margin_i();//收入毛利率分析
-                    zt_pnServer.dwd_sal_ship_order_det_i();//瓦时数据
-                    zt_pnServer.Purchasing_analysis();//采购明细
-                    zt_pnServer.ads_fina_gen_accoutbook_detail_i();//只同步库数据, 先不同步指标
-                    System.out.println("同步结束时间:" + DateTime.now());
-                }
-                if (false) {
-
-                    yd_pnServer.syncYD_GSSJ();//工时-天数据  数据量太大暂不同步
-                }
-                System.out.println("派能数据同步结束!");
-
-            }
-        }
-    }
-
-    /**
-     * 销售明细数据-凌晨6点执行
-     */
-
- // @Scheduled(fixedRate = 100)
-    @Async
-  @Scheduled(cron = "0 0 6 * * ?")
-    public void LegalEntityList_XSMX() throws Exception {
-        if (true) {
-                log.info("开启派能数据同步!销售明细");
-                System.out.println("开启派能数据同步!");
-                zt_pnServer.ads_fin_gross_profit_margin_i_XSMX();
-                System.out.println("派能数据同步结束!销售明细");
-        }
-    }
-    /**
-     * 碳排放月度工时数据-凌晨4点执行
-     */
-    //@Scheduled(fixedRate = 500)
-     @Async
-    @Scheduled(cron = "0 0 4 * * ?")
-    public void LegalEntityList_TPF() throws Exception {
-        if (true) {
-            log.info("开启碳排放月度工时同步!");
-            System.out.println("开启碳排放月度工时同步!");
-            yd_pnServer.syncYD_GSSJTOMonth();//碳排放月度工时数据
-            System.out.println("碳排放月度工时同步结束!");
-        }
-    }
-
-
-
-    /*批量删除宜搭表单数据  -运营平台数据*/
-//    @Scheduled(fixedRate = 1000 )
-//    public void DeleteYDData() {
-//        log.info("开始批量删除宜搭数据");
-//        System.out.println("开始批量删除宜搭数据");
-//        try {
-//            //一次100条,并非全部删除
-//            DDR_New ddrNew = ydClient.queryData(YDParam.builder()
-//                    .appType("APP_U3W7R66HBXPW5T4LETZ7")
-//                    .systemToken("LG9663B1RMIPG2PGDDLEEB0DK2GK3DRFWGI2ME2N")
-//                    .formUuid("FORM-AE6B2FCDF9E244BB8C4EC2B8DFDBEFFAC6CN")
-//                    .build(), YDConf.FORM_QUERY.retrieve_search_form_id);
-//
-//            System.out.println(ddrNew.getTotalCount());
-//
-//            ydClient.operateData(YDParam.builder()
-//                    .appType("APP_U3W7R66HBXPW5T4LETZ7")
-//                    .systemToken("LG9663B1RMIPG2PGDDLEEB0DK2GK3DRFWGI2ME2N")
-//                    .formUuid("FORM-AE6B2FCDF9E244BB8C4EC2B8DFDBEFFAC6CN")
-//                    .asynchronousExecution(true)
-//                    .formInstanceIdList((List<String>) ddrNew.getData())
-//                    .build(), YDConf.FORM_OPERATION.delete_batch);
-//            System.out.println("宜搭数据删除完毕!");
-//
-//        } catch (Exception e) {
-//            //记录错误数据
-//            e.printStackTrace();
-//        }
-//    }
-    /*批量删除宜搭表单数据  -碳排放-上海*/
-     @Scheduled(fixedRate = 500 )
-    public void DeleteYDData() {
-         yd_pnServer.syncYD_GSSJTOMonth();//碳排放月度工时数据
-
-//        log.info("开始批量删除宜搭数据");
-//        System.out.println("开始批量删除宜搭数据");
-//        try {
-//            //一次100条,并非全部删除
-//            DDR_New ddrNew = ydClient.queryData(YDParam.builder()
-//                    .appType("APP_U4GYY20ZKB7REZKT8586")
-//                    .systemToken("9Z766DC19KWMUGCK7OQ8Z8UQ30YB2VVY74PYLCI3")
-//                    .formUuid("FORM-A7F0FB903B7242F68FB99D6E81192C5B6BNE")//工时计算数据
-//                    .build(), YDConf.FORM_QUERY.retrieve_search_form_id);
-//
-//            System.out.println(ddrNew.getTotalCount());
-//
-//            ydClient.operateData(YDParam.builder()
-//                    .appType("APP_U4GYY20ZKB7REZKT8586")
-//                    .systemToken("9Z766DC19KWMUGCK7OQ8Z8UQ30YB2VVY74PYLCI3")
-//                    .formUuid("FORM-A7F0FB903B7242F68FB99D6E81192C5B6BNE")
-//                    .asynchronousExecution(true)
-//                    .formInstanceIdList((List<String>) ddrNew.getData())
-//                    .build(), YDConf.FORM_OPERATION.delete_batch);
-//            System.out.println("宜搭数据删除完毕!");
-//
-//        } catch (Exception e) {
-//            //记录错误数据
-//            e.printStackTrace();
-//        }
-    }
-
-
-    /**
-     * 常开
-     * 工作台数据5分钟更新一次
- */
-    @Async
-    @Scheduled(cron = "0 */5 * * * ?")
-    // @Scheduled(fixedRate = 500 )
-    public void hzmhByType() {
-        if (true) {
-            try {
-                log.info("工作台数据刷新开始!");
-                gzt_pn.getDataList();
-                log.info("工作台数据刷新结束!");
-            } catch (Exception e) {
-                // 记录错误信息
-                e.printStackTrace();
-                log.info("工作台数据异常: " + e.toString());
-            }
-        }
-    }
-
-
-    /**
-     * 常开
-     * 出差数据10分种同步到处理库
-     */
-    @Async
-    @Scheduled(fixedRate = 1000 * 60 * 10)// 1000 * 60 * 10
-    public void CCYdtoYd() {
-        if (true) {
-            try {
-                log.info("出差数据写入宜搭开始!");
-                if (true) {
-                    yd_pnServer.CCSJtoYD();
-                }
-
-                if (false) {//抓取OA数据写入宜搭,不执行
-                    String APP_EKY = "dingmpxci8bolc3jpima";
-                    String APP_SECRET = "Y_k3jpKNHbGvb9S9As2Y61ZaUFNglm7SCqquIkcowLBRoc4ZpH7DG0ZTn8LyHMwI";
-                    //派能出差PROC-83B26FB1-717C-4F64-B4C6-2869ED5C301E
-                    //外出PROC-F7955C22-C8E6-45B1-B143-5518EF04EBF0
-                    String token = ddClient.getAccessToken(APP_EKY, APP_SECRET);
-                    String access_token = "PROC-83B26FB1-717C-4F64-B4C6-2869ED5C301E";
-                    Calendar calendar = Calendar.getInstance();
-                    calendar.add(Calendar.DAY_OF_YEAR, -42); // 设置为前120天的时间
-                    long startTime = calendar.getTimeInMillis(); // 获取时间戳
-//    Calendar calendarss = Calendar.getInstance();
-//    calendarss.add(Calendar.DAY_OF_YEAR, -280); // 设置为前120天的时间
-//    long endTime = calendarss.getTimeInMillis(); // 获取时间戳
-                    long endTime = System.currentTimeMillis();
-                    Map param_post = new HashMap();
-                    // param_post.put("statuses","COMPLETED");//审批完成
-//        param_post.put("startTime",startTime);
-//        param_post.put("nextToken",nextToken);
-//        param_post.put("maxResults",maxResults);
-                    List<String> processData = (List<String>) ddClient_workflow.getInstanceIds_all(token, access_token, startTime, endTime, param_post);
-                    System.out.println(processData);
-                    if (processData != null && processData.size() > 0) {
-                        for (int i = 0; i < processData.size(); i++) {
-
-                            String sss = processData.get(i);
-                            System.out.println("正在同步派能出差第:" + i + "/" + processData.size() + " 条数据!" + sss);
-                            String obj_log = yd_pnServer.syncYD_PN(sss, "出差", "");
-
-                        }
-                    }
-                }
-
-                log.info("出差数据写入宜搭结束!");
-
-            } catch (Exception e) {
-                // 记录错误信息
-                e.printStackTrace();
-                log.info("出差数据写入宜搭异常: " + e.toString());
-            }
-        }
-    }
-
-
-//        log.info("k");
-//        System.out.println("开始同步");
-//        String APP_EKY = "dingmpxci8bolc3jpima";
-//        String APP_SECRET = "Y_k3jpKNHbGvb9S9As2Y61ZaUFNglm7SCqquIkcowLBRoc4ZpH7DG0ZTn8LyHMwI";
-//        try {//派能批量刷数据
-//            System.out.println(DateTime.now()+"!开始同步派能出差:"+"B6CwTTjOTvK8UZOXPGXhQg01291728518733");
-//            String obj_log= yd_pnServer.syncYD_PN("B6CwTTjOTvK8UZOXPGXhQg01291728518733", "出差" );
-//
-//            if (false) {
-//                //派能出差PROC-83B26FB1-717C-4F64-B4C6-2869ED5C301E
-//                //外出PROC-F7955C22-C8E6-45B1-B143-5518EF04EBF0
-//                String token = ddClient.getAccessToken(APP_EKY, APP_SECRET);
-//                String access_token = "PROC-83B26FB1-717C-4F64-B4C6-2869ED5C301E";
-//                Calendar calendar = Calendar.getInstance();
-//                calendar.add(Calendar.DAY_OF_YEAR, -10); // 设置为前120天的时间
-//                long startTime = calendar.getTimeInMillis(); // 获取时间戳
-////    Calendar calendarss = Calendar.getInstance();
-////    calendarss.add(Calendar.DAY_OF_YEAR, -280); // 设置为前120天的时间
-////    long endTime = calendarss.getTimeInMillis(); // 获取时间戳
-//                long endTime = System.currentTimeMillis();
-//                Map param_post = new HashMap();
-//                // param_post.put("statuses","COMPLETED");//审批完成
-////        param_post.put("startTime",startTime);
-////        param_post.put("nextToken",nextToken);
-////        param_post.put("maxResults",maxResults);
-//                List<String> processData = (List<String>) ddClient_workflow.getInstanceIds_all(token, access_token, startTime, endTime, param_post);
-//                System.out.println(processData);
-//                if (processData != null && processData.size() > 0) {
-//                    for (int i = 0; i < processData.size(); i++) {
-//
-//                        String sss = processData.get(i);
-//                        System.out.println("正在同步派能出差第:" + i + "/" + processData.size() + " 条数据!" + sss);
-//                         obj_log= yd_pnServer.syncYD_PN(sss, "出差" );
-//
-//                    }
-//                }
-//            }
-//            if (false) {
-//                String token = ddClient.getAccessToken(APP_EKY, APP_SECRET);
-//                String access_token = "PROC-83B26FB1-717C-4F64-B4C6-2869ED5C301E";
-//                Calendar calendar = Calendar.getInstance();
-//                calendar.add(Calendar.DAY_OF_YEAR, -241); // 设置为前120天的时间
-//                long startTime = calendar.getTimeInMillis(); // 获取时间戳
-//                Calendar calendarss = Calendar.getInstance();
-//                calendarss.add(Calendar.DAY_OF_YEAR, -121); // 设置为前120天的时间
-//                long endTime = calendarss.getTimeInMillis(); // 获取时间戳
-//                Map param_post = new HashMap();
-//                List<String> processData = (List<String>) ddClient_workflow.getInstanceIds_all(token, access_token, startTime, endTime, param_post);
-//                System.out.println(processData);
-//                if (processData != null && processData.size() > 0) {
-//                    for (int i = 0; i < processData.size(); i++) {
-//                        String sss = processData.get(i);
-//                        System.out.println("正在同步派能出差第:" + i + "/" + processData.size() + " 条数据!" + sss);
-//                          obj_log= yd_pnServer.syncYD_PN(sss, "出差" );
-//                    }
-//                }
-//            }
-//            if (false) {
-//                String token = ddClient.getAccessToken(APP_EKY, APP_SECRET);
-//                String access_token = "PROC-83B26FB1-717C-4F64-B4C6-2869ED5C301E";
-//                Calendar calendar = Calendar.getInstance();
-//                calendar.add(Calendar.DAY_OF_YEAR, -363); // 设置为前120天的时间
-//                long startTime = calendar.getTimeInMillis(); // 获取时间戳
-//                Calendar calendarss = Calendar.getInstance();
-//                calendarss.add(Calendar.DAY_OF_YEAR, -242); // 设置为前120天的时间
-//                long endTime = calendarss.getTimeInMillis(); // 获取时间戳
-//                Map param_post = new HashMap();
-//                List<String> processData = (List<String>) ddClient_workflow.getInstanceIds_all(token, access_token, startTime, endTime, param_post);
-//                System.out.println(processData);
-//                if (processData != null && processData.size() > 0) {
-//                    for (int i = 0; i < processData.size(); i++) {
-//                        String sss = processData.get(i);
-//                        System.out.println("正在同步派能出差第:" + i + "/" + processData.size() + " 条数据!" + sss);
-//                          obj_log= yd_pnServer.syncYD_PN(sss, "出差" );
-//
-//                    }
-//                }
-//            }
-//            System.out.println("同步结束");
-//        } catch (Exception e) {
-//            //记录错误信息
-//            e.printStackTrace();
-//        }
-//    }
-
-
-}

+ 0 - 69
mjava-paineng/src/main/java/com/malk/paineng/controller/DDController.java

@@ -1,69 +0,0 @@
-package com.malk.paineng.controller;
-
-import cn.hutool.core.date.DateTime;
-import cn.hutool.json.JSONObject;
-import com.alibaba.fastjson.JSON;
-import com.malk.paineng.service.YD_PN;
-import com.malk.server.aliwork.YDConf;
-import com.malk.server.aliwork.YDParam;
-import com.malk.server.common.McR;
-import com.malk.service.aliwork.YDClient;
-import com.malk.service.dingtalk.DDClient;
-import com.malk.service.dingtalk.DDClient_Workflow;
-import com.malk.utils.UtilDateTime;
-import com.malk.utils.UtilMap;
-import com.malk.utils.UtilServlet;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections4.map.HashedMap;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.servlet.http.HttpServletRequest;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.time.Duration;
-import java.time.LocalDateTime;
-import java.util.*;
-import java.util.regex.Pattern;
-
-@Slf4j
-@RestController
-@RequestMapping("oa")
-public class DDController {
-    @Autowired
-    private YD_PN yd_pnServer;
-    @Autowired
-    private YDClient ydClient;
-
-    @PostMapping("do-approve")//钉钉OA出差单数据同步到宜搭碳排放应用
-    // public McR doApprove_PN(String processInstanceId, String type) {
-    public McR doApprove_PN(@RequestBody JSONObject obj) throws IOException {
-
-        String type = obj.get("type").toString();
-        String processInstanceId = obj.get("processInstanceId").toString();
-        if (type != "" && processInstanceId != "") {
-            if (true) {
-                Map hashMap = new HashMap();
-                hashMap.put("textField_m3wod35r", processInstanceId);//processInstanceId
-                hashMap.put("textField_m3wod35s", type);//type
-                hashMap.put("textField_m3wod35t", "未同步" );//IF
-                ydClient.operateData(YDParam.builder()
-                        .appType("APP_Z4YYJI3LG8WXWY51L4B2")
-                        .systemToken("KMC66FA18ZEQU27NCQKE3982F2JH3NF4NHM3MW2")
-                        .formUuid("FORM-8E9F37B1CCD34F708D560ED0CF59CC27TW5C")
-                        .formDataJson(JSON.toJSONString(hashMap))
-                        .build(), YDConf.FORM_OPERATION.create);
-            }
-            System.out.println(DateTime.now()   + processInstanceId+"写入宜搭待同步成功!");
-        }
-        return McR.success();
-    }
-
-
-}

+ 0 - 51
mjava-paineng/src/main/java/com/malk/paineng/controller/GZTController.java

@@ -1,51 +0,0 @@
-package com.malk.paineng.controller;
-
-import com.malk.paineng.service.GZT_PN;
-import com.malk.utils.UtilServlet;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.List;
-import java.util.Map;
-
-@Slf4j
-@RestController
-@RequestMapping
-public class GZTController {
-
-    @Autowired
-    private GZT_PN gzt_pn;
-
-    @PostMapping("portal/PNZX")
-    List<Map> portal_PNZX(HttpServletRequest request) {
-
-        Map data = UtilServlet.getParamMap(request);
-        log.info("工作台数据, {}", data);
-        return gzt_pn.getPortalList("派能资讯");
-    }
-    @PostMapping("portal/NLPS")
-    List<Map> portal_NLPS(HttpServletRequest request) {
-
-        Map data = UtilServlet.getParamMap(request);
-        log.info("工作台数据, {}", data);
-        return gzt_pn.getPortalList("能量派送");
-    }
-    @PostMapping("portal/RZZX")
-    List<Map> portal_RZZX(HttpServletRequest request) {
-
-        Map data = UtilServlet.getParamMap(request);
-        log.info("工作台数据, {}", data);
-        return gzt_pn.getPortalList("人资资讯");
-    }
-    @PostMapping("portal/NBZX")
-    List<Map> portal_NBZX(HttpServletRequest request) {
-
-        Map data = UtilServlet.getParamMap(request);
-        log.info("工作台数据, {}", data);
-        return gzt_pn.getPortalList("内部资讯");
-    }
-}

+ 0 - 10
mjava-paineng/src/main/java/com/malk/paineng/service/GZT_PN.java

@@ -1,10 +0,0 @@
-package com.malk.paineng.service;
-
-import java.util.List;
-import java.util.Map;
-
-public interface GZT_PN
-{
-    List<Map> getPortalList(String section);
-    void getDataList();
-}

+ 0 - 24
mjava-paineng/src/main/java/com/malk/paineng/service/YD_PN.java

@@ -1,24 +0,0 @@
-package com.malk.paineng.service;
-
-import java.io.IOException;
-import java.util.Map;
-
-public interface YD_PN {
-
-
-    //根据OA数据ID 和传过来的类型,判断往宜搭写入出差数据
-    String syncYD_PN(String processInstanceId, String type, String SSGS) throws IOException;
-
-
-    //方法syncYD_PN() 的具体实现
-      void syncYD_PN_impl(String processInstanceId, Map<String, String> compsId_main, Map<String, String> compsId_itinerary, String compId_sub_oa,String SSGS) throws IOException;
-
-
-
-    //获取工时数据 按天
-      void  syncYD_GSSJ();
-
-    void  syncYD_GSSJTOMonth();
-
-      void CCSJtoYD() throws IOException;
-}

+ 0 - 50
mjava-paineng/src/main/java/com/malk/paineng/service/ZT_PN.java

@@ -1,50 +0,0 @@
-package com.malk.paineng.service;
-
-import java.util.Map;
-
-public interface ZT_PN {
-    /**
-     * 瓦时出货量写入本地库
-     * @throws Exception
-     */
-    void  dwd_sal_ship_order_det_i() throws Exception;
-    /**
-     * 本地库瓦时出货量写入 宜搭
-     * @throws Exception
-     */
-  void  dwd_sal_ship_order_det_i_TOOA() throws Exception;
-
-
-    /**
-     * 收入毛利率分析写入本地库
-     * @throws Exception
-     */
-    void  ads_fin_gross_profit_margin_i() throws Exception;
-
-    /**
-     * 抓取销售明细入本地库
-     * @throws Exception
-     */
-    void  ads_fin_gross_profit_margin_i_XSMX() throws Exception;
-
-
-
-    /**
-     *费用明细表 写入本地库
-     * @throws Exception
-     */
-    void  ads_fina_gen_accoutbook_detail_i( ) throws Exception;
-
-    void HRUserToLC();
-
-
-    /**
-     * 采购明细写入宜搭
-     */
-    void  Purchasing_analysis( ) throws Exception;
-
-
-
-}
-
-

+ 0 - 24
mjava-paineng/src/main/java/com/malk/paineng/service/ZhongTai_All.java

@@ -1,24 +0,0 @@
-package com.malk.paineng.service;
-
-import java.util.List;
-import java.util.Map;
-
-public interface ZhongTai_All {
-
-
-
-    void  ads_hr_work_hours_sub_o( List<Map<Object, Object>> mso);
-    void  dwd_sal_ship_order_det_i( List<Map<Object, Object>> mso);
-    void  ads_fin_gross_profit_margin_i( List<Map<Object, Object>> mso);
-    void  ads_fina_gen_accoutbook_detail_i( List<Map<Object, Object>> mso);
-
-    /**
-     * 采购数据写入数据库
-     * @param mso
-     */
-    void  ads_ai_pr_allbom_cost_trend_i( List<Map<Object, Object>> mso);
-    void  ads_pr_purchase_details_o( List<Map<Object, Object>> mso);
-    void  ads_ai_pro_raw_material_i( List<Map<Object, Object>> mso);
-    void  ads_pr_application_details_i( List<Map<Object, Object>> mso);
-
-}

+ 0 - 91
mjava-paineng/src/main/java/com/malk/paineng/service/impl/GZT_PNImpl.java

@@ -1,91 +0,0 @@
-package com.malk.paineng.service.impl;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.malk.paineng.service.GZT_PN;
-import com.malk.server.aliwork.YDConf;
-import com.malk.server.aliwork.YDParam;
-import com.malk.service.aliwork.YDClient;
-import com.malk.utils.UtilDateTime;
-import com.malk.utils.UtilMap;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.stereotype.Service;
-
-import java.util.*;
-import java.util.stream.Collectors;
-
-@EnableScheduling
-@Service
-@Slf4j
-public class GZT_PNImpl implements GZT_PN {
-    private Map portal_cache = new HashMap();
-    @Autowired
-    private YDClient ydClient;
-
-    @Override
-    public List<Map> getPortalList(String section) {
-        return _portalList(section);
-    }
-
-    @Override
-    public void getDataList() {
-        try {
-
-            portal_cache = new HashMap();
-            getPortalList("派能资讯");
-            getPortalList("能量派送");
-            getPortalList("人资资讯");
-            getPortalList("内部资讯");
-//            getPortalList("规章制度");
-
-        } catch (Exception e) {
-            // 记录错误信息
-            e.printStackTrace();
-        }
-    }
-
-    private List<Map> _portalList(String type) {
-        List<Map> pList = UtilMap.getList(portal_cache, type);
-        try {
-            if (pList.isEmpty()) {
-                List<Map> dataList = (List<Map>) ydClient.queryData(YDParam.builder()
-                        .appType("APP_OM7HTYCXYQYCKJ046D9V")
-                        .systemToken("BN766KC1CS9Q2LJQDAKIN82VVUHT2J07ALF3M7R2")
-                        .formUuid("FORM-918FE77C2E8248069B7CA497C6B2E4C6XD4B")
-                        .pageSize(5)
-                        .searchFieldJson(JSONObject.toJSONString(UtilMap.map("selectField_m17kv4an", type)))
-                        .build(), YDConf.FORM_QUERY.retrieve_search_form).getData();
-
-                dataList.sort(Comparator.comparingInt(item -> UtilMap.getInt(item, "numberField_m3s6swzt"))); // 排序
-                pList = dataList.stream().map(item -> {
-                    Map formData = UtilMap.getMap(item, "formData");
-
-                    Map row = UtilMap.map("title, source, link", UtilMap.getString(formData, "textField_m17kv4aq"), UtilMap.getString(formData, "textField_m17kv4as"), UtilMap.getString(formData, "textField_m17kv4at"));
-                    long date = UtilMap.getLong(formData, "dateField_m17kv4ar");
-                    if (date > 0L) {
-                        row.put("dateTime", UtilDateTime.format(new Date(date), "yyyy-MM-dd HH:mm"));
-                    }
-                    // 图片免登处理
-                    String image = UtilMap.getString(formData, "imageField_m1abjxl0");
-                    if (StringUtils.isNotBlank(image)) {
-                        List<Map> attas = (List<Map>) JSON.parse(image);
-                        row.put("image", ydClient.convertTemporaryUrl_PN(UtilMap.getString(attas.get(0), "url")));
-                        Object image1 = row.get("image");
-                        //   System.out.println("image=========" + UtilMap.getString(attas.get(0), "url"));
-//                    System.out.println("image1========="+image1);
-                    }
-                    return row;
-                }).collect(Collectors.toList());
-                portal_cache.put(type, pList);
-            }
-        } catch (Exception e) {
-
-        }
-        log.info("type: {},list:{}", type, pList);
-        return pList;
-    }
-
-}

+ 0 - 533
mjava-paineng/src/main/java/com/malk/paineng/service/impl/YD_PNImpl.java

@@ -1,533 +0,0 @@
-package com.malk.paineng.service.impl;
-
-import cn.hutool.json.JSONObject;
-import com.alibaba.fastjson.JSON;
-import com.malk.paineng.service.YD_PN;
-import com.malk.server.aliwork.YDConf;
-import com.malk.server.aliwork.YDParam;
-import com.malk.server.dingtalk.DDR_New;
-import com.malk.service.aliwork.YDClient;
-import com.malk.service.dingtalk.DDClient;
-import com.malk.service.dingtalk.DDClient_Workflow;
-import com.malk.utils.UtilDateTime;
-import com.malk.utils.UtilMap;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections4.map.HashedMap;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.*;
-import java.nio.charset.StandardCharsets;
-import java.time.LocalDateTime;
-import java.time.ZoneId;
-import java.util.*;
-
-
-@Slf4j
-@Service
-public class YD_PNImpl implements YD_PN {
-
-    @Autowired
-    private DDClient ddClient;
-
-    @Autowired
-    private YDClient ydClient;
-
-    @Autowired
-    private DDClient_Workflow ddClient_workflow;
-
-    @Autowired
-    private ZT_PNImpl ZT_PNImpl;
-    @Autowired
-    private ZhongTai_AllImpl ZhongTai_AllImpl;
-
-    @Override
-    public String syncYD_PN(String processInstanceId, String type, String SSGS) throws IOException {
-        if ("出差".equals(type) && processInstanceId != "") {
-            System.out.println("正在同步派能出差:" + processInstanceId + "   !!!");
-            Map<String, String> compsId_main = UtilMap.map("出差事由, 所属公司", "textareaField_lygo9owv, textField_m2sdke9h");
-            Map<String, String> compsId_itinerary = UtilMap.map("交通工具, 单程往返, 出发城市, 目的城市, 开始时间, 结束时间, 时长", "textField_m2sdke90, textField_m2sdke91, textField_m2sdke92, textField_m2sdke93, textField_m2sdke94, textField_m2sdke95, numberField_m2sdke96");
-            compsId_main.put("出差明细", "tableField_lygo9owu"); // 子表组件
-            syncYD_PN_impl(processInstanceId, compsId_main, compsId_itinerary, "itinerary", SSGS);
-        }
-        return null;
-    }
-
-    /**
-     * 派能出差数据通过钉钉连接器同步到宜搭
-     *
-     * @param processInstanceId
-     * @param compsId_main
-     * @param compsId_itinerary
-     * @param compId_sub_oa
-     * @throws IOException
-     */
-    public void syncYD_PN_impl(String processInstanceId, Map<String, String> compsId_main, Map<String, String> compsId_itinerary, String compId_sub_oa, String SSGS) throws IOException {
-        /// dingtalk——派能
-        String APP_EKY = "dingmpxci8bolc3jpima";
-        String APP_SECRET = "Y_k3jpKNHbGvb9S9As2Y61ZaUFNglm7SCqquIkcowLBRoc4ZpH7DG0ZTn8LyHMwI";
-        String token = ddClient.getAccessToken(APP_EKY, APP_SECRET);//ddtokken
-        Map processData = ddClient_workflow.getProcessInstanceId(token, processInstanceId);//通过instanceID ID获取钉钉数据
-        List<Map> formComponentValues = (List<Map>) processData.get("formComponentValues");
-        String ifagree = processData.get("result").toString();
-        String ifstatus = processData.get("status").toString();
-
-        if (ifagree.equals("agree") && ifstatus.equals("COMPLETED")) {//status为COMPLETED且result为agree时,表示审批单完结并审批通过。
-            String userId = String.valueOf(processData.get("originatorUserId"));
-            long cDate = UtilDateTime.parse(UtilMap.getString(processData, "createTime"), "yyyy-MM-dd'T'HH:mm").getTime();//chuangajin
-            LocalDateTime dateTime = LocalDateTime.ofInstant(new Date(cDate).toInstant(), ZoneId.systemDefault());
-            int nianyue = dateTime.getYear();//所属年份
-            double HCGLS = 0;//火车公里数
-            double QCGLS = 0;//汽车公里数
-            double CZCGLS = 0;//出租车公里数
-            double FJGLS = 0;//飞机单程公里数
-
-
-            Map formData = UtilMap.map("employeeField_ltxqs53k, departmentSelectField_lu20ayky, dateField_ltxqs53j, textField_lygnetw9, dateField_m3pl2xmv, textField_m4118cyp", Arrays.asList(userId), Arrays.asList(processData.get("originatorDeptId")), cDate, UtilMap.getString(processData, "businessId"), cDate, nianyue);
-            String ssgs = "";
-            if (SSGS.equals("")) {
-                Map formComp_SSGS = formComponentValues.stream().filter(item -> "所属公司".equals(item.get("name"))).findAny().get();
-                ssgs = (String) formComp_SSGS.get("value");
-            } else {
-                ssgs = SSGS;
-
-            }
-
-
-            for (String name : compsId_main.keySet()) {
-                String compId = compsId_main.get(name);
-                // 判定是否子表 [宜搭]
-                if (compId.startsWith("tableField_")) {
-                    List<Map> details = new ArrayList<>();
-                    // 兼容明细组件, 存在多条情况 [加班跨天才有有明细]
-                    Optional optional = formComponentValues.stream().filter(item -> compId_sub_oa.equals(item.get("bizAlias"))).findAny();
-                    if (!optional.isPresent()) {
-                        continue;
-                    }
-                    String schedule = UtilMap.getString((Map) optional.get(), "value");
-                    List<Map> itineraryList = ((List<Map>) JSON.parse(schedule));
-                    // 循环明细数据
-                    String dizhiA = "";
-                    String dizhiB = "";
-                    String dcwf = "";//单程往返
-                    String jtgj = "";//交通工具
-                    for (Map itinerary : itineraryList) {
-                        List<Map> rowValue = (List<Map>) itinerary.get("rowValue");
-                        Map rowData = new HashedMap();
-                        // 循环子表组件
-                        for (String subName : compsId_itinerary.keySet()) {
-                            log.info("子表字段, {}", subName);
-                            //  加班单跨天 [子表label为空]
-
-                            rowData.put(compsId_itinerary.get(subName), rowValue.stream().filter(item -> subName.equals(item.get("bizAlias")) || subName.equals(item.get("label"))).findAny().get().get("value"));
-                            if (subName.equals("出发城市")) {
-                                dizhiA = (String) rowValue.stream().filter(item -> "出发城市".equals(item.get("bizAlias")) || "出发城市".equals(item.get("label"))).findAny().get().get("value");
-                            }
-                            if (subName.equals("目的城市")) {
-                                dizhiB = (String) rowValue.stream().filter(item -> "目的城市".equals(item.get("bizAlias")) || "目的城市".equals(item.get("label"))).findAny().get().get("value");
-                            }
-                            if (subName.equals("交通工具")) {
-                                jtgj = (String) rowValue.stream().filter(item -> "交通工具".equals(item.get("bizAlias")) || "交通工具".equals(item.get("label"))).findAny().get().get("value");
-                            }
-                            if (subName.equals("单程往返")) {
-                                dcwf = (String) rowValue.stream().filter(item -> "单程往返".equals(item.get("bizAlias")) || "单程往返".equals(item.get("label"))).findAny().get().get("value");
-                            }
-                            if (jtgj.contains("其他") && subName.equals("交通工具")) {
-                                rowData.put(compsId_itinerary.get(subName), "其他");
-                                String[] parts = jtgj.split("[()]");
-                                String result = jtgj;
-                                // 提取括号内的内容(跳过第一个空字符串)
-                                if (parts.length > 1) {
-                                    result = parts[1];
-                                    System.out.println(result);  // 输出: 公车 火车
-                                }
-                                rowData.put("textField_m2wrpa40", result);
-
-                            } else {
-                                rowData.put(compsId_itinerary.get(subName), rowValue.stream().filter(item -> subName.equals(item.get("bizAlias")) || subName.equals(item.get("label"))).findAny().get().get("value"));
-                            }
-
-                        }
-
-                        double ipdiz = 0;
-                        ipdiz = getdizhibyYD(dizhiA, dizhiB);//通过表单源获取计算
-
-                        if (ipdiz == 0) {
-                            ipdiz = getdizhi(dizhiA, dizhiB);//通过API计算
-                        }
-
-
-                        double leiji = 0;
-                        double fjleiji = 0;
-                        rowData.put("numberField_m2sdke98", ipdiz);
-                        if (dcwf.equals("往返")) {
-                            rowData.put("numberField_m2wrpa42", ipdiz * 2);
-                            leiji = ipdiz * 2;
-                            fjleiji = ipdiz*2;
-                        } else {
-                            rowData.put("numberField_m2wrpa42", ipdiz);
-                            leiji = ipdiz;
-                            fjleiji = ipdiz;
-
-
-                        }
-
-
-                        if (jtgj.contains("汽车")) {
-                            QCGLS += leiji;
-                        }
-                        if (jtgj.contains("火车")) {
-                            HCGLS += leiji;
-                        }
-                        if (jtgj.contains("出租车")) {
-                            CZCGLS += leiji;
-                        }
-                        if (jtgj.contains("飞机")) {
-                            FJGLS += fjleiji;
-                        }
-                        details.add(rowData);
-                    }
-                    formData.put(compId, details);
-                    continue;
-                }
-                log.info("主表字段, {}", name);
-                // 请假套件: 开始时间 / 结束时间 / 时长 / 单位 / 请假类型
-                if ("DDHolidayField".equals(name)) {
-                    Optional optional = formComponentValues.stream().filter(item -> "DDHolidayField".equals(item.get("componentType"))).findAny();
-                    if (optional.isPresent()) {
-                        String[] ids = compId.split(" / ");
-                        List vas = (List) JSON.parse(UtilMap.getString((Map) optional.get(), "value"));
-                        for (int i = 0; i < ids.length; i++) {
-                            formData.put(ids[i], vas.get(i));
-                        }
-                    }
-                    continue;
-                }
-
-                //是否为国际差旅  为否才计算 1106先不动
-                // 成员组件, 数据处理
-                if (name.equals("所属公司") && !SSGS.equals("")){
-                    formData.put(compId, SSGS);
-                }else {
-                    Map formComp = formComponentValues.stream().filter(item -> name.equals(item.get("name"))).findAny().get();
-                    Object value = formComp.get("value");
-                    if ("InnerContactField".equals(formComp.get("componentType")) && formComp.containsKey("value")) {
-                        List<Map> empInfos = (List<Map>) JSON.parse(String.valueOf(formComp.get("extValue")));
-                        List<String> emplsId = new ArrayList<>();
-                        for (Map empInfo : empInfos) {
-                            emplsId.add(String.valueOf(empInfo.get("emplId")));
-                        }
-                        value = emplsId; // 成员多选
-                    }
-                    formData.put(compId, value);
-                }
-
-            }
-
-            // 用于审批回传
-            List<Map> tasks = UtilMap.getList(processData, "tasks");
-            formData.put("textField_lygvvyd9", tasks.get(0).get("taskId"));
-            formData.put("textField_lygvvyda", tasks.get(0).get("userId"));
-            formData.put("textField_lyh4y3th", processInstanceId);
-            formData.put("numberField_m3pl2xm6", HCGLS);
-            formData.put("numberField_m3pl2xm8", QCGLS);
-            formData.put("numberField_m3pl2xme", CZCGLS);
-            if (FJGLS > 3700) {
-                formData.put("numberField_m3pl2xmc", FJGLS);
-            } else {
-                formData.put("numberField_m3pl2xma", FJGLS);
-            }
-
-
-//            formData.put("selectField_lyo1uao4", "否"); // 出差是否报销, 否
-//            formData.put("selectField_lyo1zprd", "是"); // 同步存量数据, 否
-
-            log.info("审批数据, {}", JSON.toJSONString(formData));
-            if (ssgs.equals("上海派能")) {
-                ydClient.operateData(YDParam.builder()
-                        .appType("APP_U4GYY20ZKB7REZKT8586")
-                        .systemToken("9Z766DC19KWMUGCK7OQ8Z8UQ30YB2VVY74PYLCI3")
-                        .formUuid("FORM-E41AE15E41CA46D6A245AA1C5E7DFB15D622")
-                        .formDataJson(JSON.toJSONString(formData))
-                        .userId(userId)
-                        .build(), YDConf.FORM_OPERATION.create);
-            }
-            if (ssgs.equals("扬州派能")) {
-                ydClient.operateData(YDParam.builder()
-                        .appType("APP_LECHEG4IXU554WD3BOUB")
-                        .systemToken("5H9662C1TMHPRLFDANK0ZCOVUF4I3WOLUMB2MG")
-                        .formUuid("FORM-65EFD9616EF54386AEDE6F064BC53DE22XGG")
-                        .formDataJson(JSON.toJSONString(formData))
-                        .userId(userId)
-                        .build(), YDConf.FORM_OPERATION.create);
-            }
-            if (ssgs.equals("安徽派能能源科技有限公司") || ssgs.equals("安徽派能能源技术有限公司") || ssgs.equals("安徽派能")) {
-                ydClient.operateData(YDParam.builder()
-                        .appType("APP_IEZRE28YCR3DE8EFOMG3")
-                        .systemToken("F2766O915RHP3GY2E4K3M9PF82S92HGY8RC2M122")
-                        .formUuid("FORM-8ADBE73416E84A65ACBF2AAD81089A50HFM9")
-                        .formDataJson(JSON.toJSONString(formData))
-                        .userId(userId)
-                        .build(), YDConf.FORM_OPERATION.create);
-            }
-
-
-        }
-    }
-
-
-    /**
-     * 获取工时数据 到宜搭碳排放后台,根据公司区别
-     */
-    @Override
-    public void syncYD_GSSJ() {
-        try {
-            log.info("执行!工时数据");
-            System.out.println("执行!工时数据");
-            Map<String, String> params = new HashMap<>();
-            params.put("appId", "1");
-            params.put("tablename", "ads_hr_work_hours_sub_o");
-            params.put("schemalname", "ads");
-            params.put("connectortype", "ads_hr_total_api_i");
-            params.put("appToken", "Qu9JsOqZ9UJEgMklqr+wlLHAkaSjLCno9YIy34QpT8pG473Z2giJJwA1PZPIUSXO");
-            ZhongTai_AllImpl.sendGetRequest_ALL(params);
-            log.info("同步结束!工时数据:");
-            System.out.println("同步结束!工时数据:");
-        } catch (Exception e) {
-            log.info(e.toString());
-            System.out.println(e.toString());
-            e.printStackTrace();
-        }
-
-
-    }
-
-    public void syncYD_GSSJTOMonth() {
-        try {
-            log.info("执行!月度工时数据");
-            System.out.println("执行!月度工时数据");
-            Map<String, String> params = new HashMap<>();
-            params.put("appId", "1");
-            params.put("tablename", "ads_hr_work_hours_sum_o");
-            params.put("schemalname", "ads");
-            params.put("connectortype", "ads_hr_total_api_i");
-            params.put("appToken", "Qu9JsOqZ9UJEgMklqr+wlLHAkaSjLCno9YIy34QpT8pG473Z2giJJwA1PZPIUSXO");
-            ZhongTai_AllImpl.sendGetRequest_ALL(params);
-            log.info("同步结束!月度工时数据:");
-            System.out.println("同步结束!月度工时数据:");
-        } catch (Exception e) {
-            log.info(e.toString());
-            System.out.println(e.toString());
-            e.printStackTrace();
-        }
-
-
-    }
-
-    /**
-     * 执行抓取未处理的数据处理写入碳排放
-     */
-    @Override
-    public void CCSJtoYD() throws IOException {
-        cn.hutool.json.JSONObject searchCondition = new cn.hutool.json.JSONObject();
-        searchCondition.put("textField_m3wod35s", "出差");
-        searchCondition.put("textField_m3wod35t", "未同步");
-        List<Map> list = (List<Map>) ydClient.queryData(
-                YDParam.builder()
-                        .appType("APP_Z4YYJI3LG8WXWY51L4B2")
-                        .systemToken("KMC66FA18ZEQU27NCQKE3982F2JH3NF4NHM3MW2")
-                        .formUuid("FORM-8E9F37B1CCD34F708D560ED0CF59CC27TW5C")
-                        .searchCondition(JSON.toJSONString(searchCondition))
-                        .build(),
-                YDConf.FORM_QUERY.retrieve_list).getData();
-        if (list.size() > 0) {
-            for (Map formData : list) {
-                String formInstanceId = formData.get("formInstanceId").toString();
-                String processInstanceId = String.valueOf(UtilMap.getMap(formData, "formData").get("textField_m3wod35r"));
-                String SSGS = String.valueOf(UtilMap.getMap(formData, "formData").get("textField_m4kqfmd9"));
-                if (!processInstanceId.equals("")) {
-                    syncYD_PN(processInstanceId, "出差", SSGS);
-                    ydClient.operateData(YDParam.builder()
-                            .appType("APP_Z4YYJI3LG8WXWY51L4B2")
-                            .systemToken("KMC66FA18ZEQU27NCQKE3982F2JH3NF4NHM3MW2")
-                            .formInstanceId(String.valueOf(formInstanceId))
-                            .updateFormDataJson(JSON.toJSONString(UtilMap.map("textField_m3wod35t", "已同步")))
-                            .build(), YDConf.FORM_OPERATION.update);
-                }
-            }
-        }
-    }
-
-    /***
-     * 通过两个地址,获取两点之间距离
-     * @param STR_DZ
-     * @param END_DZ
-     * @return
-     */
-
-    private static final String GEOCODING_API_URL = "https://restapi.amap.com/v3/geocode/geo";
-
-    private static final String YOUR_AMAP_KEY = "f26ada1decb558baa08accd1a43913c5"; // 高德地图API Key yp的账号
-
-    private static final String API_KEY = "f26ada1decb558baa08accd1a43913c5";
-    private static final String GEOCODING_API = "http://api.amap.com/v3/geocode/geo?key=%s&address=%s";
-
-
-    public double getdizhi(String STR_DZ, String END_DZ) throws IOException {
-        double tt = 0;
-        try {
-            // 第一个位置获取
-            double lng_A = 0;
-            double lat_A = 0;
-//             String API_KEY = "f26ada1decb558baa08accd1a43913c5";
-//            String GEOCODING_API = "https://restapi.amap.com/v3/geocode/geo?key=%s&address=%s";
-//
-//            String apiUrl = String.format(GEOCODING_API, API_KEY, END_DZ);
-//
-//            URL url = new URL(apiUrl);
-//            BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), StandardCharsets.UTF_8));
-//
-//            String inputLine;
-//            StringBuilder content = new StringBuilder();
-//            while ((inputLine = in.readLine()) != null) {
-//                content.append(inputLine);
-//            }
-//            in.close();
-//
-//            // 解析JSON或者XML来获取经纬度
-//            // 示例中省略了解析过程,直接打印结果
-//            System.out.println(content.toString());
-
-            if (true) {
-                String encodedCityName = URLEncoder.encode(STR_DZ, String.valueOf(StandardCharsets.UTF_8));
-                String requestUrl = GEOCODING_API_URL + "?key=" + YOUR_AMAP_KEY + "&address=" + encodedCityName + "&city=" + encodedCityName;
-                URL url = new URL(requestUrl);
-                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
-                connection.setRequestMethod("GET");
-                connection.connect();
-
-                BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
-                String inputLine;
-                StringBuffer content = new StringBuffer();
-                while ((inputLine = in.readLine()) != null) {
-                    content.append(inputLine);
-                }
-                in.close();
-                connection.disconnect();
-                JSONObject jsonObject = new JSONObject(content.toString());
-                if ("1".equals(jsonObject.get("status"))) {
-                    JSONObject geocodes = jsonObject.getJSONArray("geocodes").getJSONObject(0);
-                    //  String sss=geocodes.get("location").toString();
-                    lng_A = Double.parseDouble(geocodes.get("location").toString().split(",")[0]);
-                    lat_A = Double.parseDouble(geocodes.get("location").toString().split(",")[1]);
-                    System.out.println("A经度:" + lng_A + ", A纬度:" + lat_A);
-
-                } else {
-                    System.out.println("未能成功获取经纬度");
-                }
-            }
-            double lng_B = 0;
-            double lat_B = 0;
-            if (true) {
-                String encodedCityName = URLEncoder.encode(END_DZ, String.valueOf(StandardCharsets.UTF_8));
-                String requestUrl = GEOCODING_API_URL + "?key=" + YOUR_AMAP_KEY + "&address=" + encodedCityName + "&city=" + encodedCityName;
-                URL url = new URL(requestUrl);
-                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
-                connection.setRequestMethod("GET");
-                connection.connect();
-                BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
-                String inputLine;
-                StringBuffer content = new StringBuffer();
-                while ((inputLine = in.readLine()) != null) {
-                    content.append(inputLine);
-                }
-                in.close();
-                connection.disconnect();
-                JSONObject jsonObject = new JSONObject(content.toString());
-                if ("1".equals(jsonObject.get("status"))) {
-                    JSONObject geocodes = jsonObject.getJSONArray("geocodes").getJSONObject(0);
-                    //  String sss=geocodes.get("location").toString();
-                    lng_B = Double.parseDouble(geocodes.get("location").toString().split(",")[0]);
-                    lat_B = Double.parseDouble(geocodes.get("location").toString().split(",")[1]);
-                    System.out.println("A经度:" + lng_B + ", A纬度:" + lat_B);
-
-                } else {
-                    System.out.println("未能成功获取经纬度");
-                }
-            }
-//            double EARTH_RADIUS = 6371; // 地球半径,单位为公里
-//
-//            double latDistance = toRadians(lat_B - lat_A);
-//            double lonDistance = toRadians(lng_B - lng_A);
-//            double a = sin(latDistance / 2) * sin(latDistance / 2) +
-//                    cos(toRadians(lat_A)) * cos(toRadians(lat_B)) *
-//                            sin(lonDistance / 2) * sin(lonDistance / 2);
-//            double c = 2 * atan2(sqrt(a), sqrt(1 - a));
-//          tt= EARTH_RADIUS * c;
-
-            if (lng_A > 0 && lng_B > 0 && lat_A > 0 && lat_B > 0) {
-                double pk = 180 / 3.14169;  // 地球周长与直径的比例
-                // a1、a2、b1、b2:将纬度和经度转换为弧度后的值
-                double a1 = lat_A / pk;
-                double a2 = lng_A / pk;
-                double b1 = lat_B / pk;
-                double b2 = lng_B / pk;
-                //  t1、t2、t3:三个余弦值,用于后续计算
-                double t1 = Math.cos(a1) * Math.cos(a2) * Math.cos(b1) * Math.cos(b2);
-                double t2 = Math.cos(a1) * Math.sin(a2) * Math.cos(b1) * Math.sin(b2);
-                double t3 = Math.sin(a1) * Math.sin(b1);
-                // 两个坐标之间的距离(弧度)
-                tt = Math.acos(t1 + t2 + t3) / 1000 * 6371000;
-            }
-
-
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
-        return tt;
-
-
-    }
-
-    public double getdizhibyYD(String STR_DZ, String END_DZ) {
-        double tt = 0;
-        try {
-            if (!STR_DZ.equals("") && !END_DZ.equals("")) {
-                List<Map> dataList = (List<Map>) ydClient.queryData(YDParam.builder()
-                        .appType("APP_Z4YYJI3LG8WXWY51L4B2")
-                        .systemToken("KMC66FA18ZEQU27NCQKE3982F2JH3NF4NHM3MW2")
-                        .formUuid("FORM-6340D2874C3347CA85840D2E55731FB81CZI")
-                        .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_m3mhndep, textField_m3mhndeq", STR_DZ, END_DZ)))//D041P16
-                        .build(), YDConf.FORM_QUERY.retrieve_search_form).getData();
-                if (dataList != null && dataList.size() > 0) {
-                    for (Map formData : dataList) {
-                        tt = Double.parseDouble(String.valueOf(UtilMap.getMap(formData, "formData").get("numberField_m3mhnder")));
-                    }
-                }
-
-                if (tt == 0) {
-                    dataList = (List<Map>) ydClient.queryData(YDParam.builder()
-                            .appType("APP_Z4YYJI3LG8WXWY51L4B2")
-                            .systemToken("KMC66FA18ZEQU27NCQKE3982F2JH3NF4NHM3MW2")
-                            .formUuid("FORM-6340D2874C3347CA85840D2E55731FB81CZI")
-                            .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_m3mhndep, textField_m3mhndeq", END_DZ, STR_DZ)))//D041P16
-                            .build(), YDConf.FORM_QUERY.retrieve_search_form).getData();
-                    if (dataList != null && dataList.size() > 0) {
-                        for (Map formData : dataList) {
-                            tt = Double.parseDouble(String.valueOf(UtilMap.getMap(formData, "formData").get("numberField_m3mhnder")));
-                        }
-                    }
-                }
-            }
-
-        } catch (Exception e) {
-
-        }
-        return tt;
-
-    }
-}

File diff suppressed because it is too large
+ 0 - 5504
mjava-paineng/src/main/java/com/malk/paineng/service/impl/ZT_PNImpl.java


File diff suppressed because it is too large
+ 0 - 1744
mjava-paineng/src/main/java/com/malk/paineng/service/impl/ZhongTai_AllImpl.java


+ 0 - 47
mjava-paineng/src/main/resources/application-prod.yml

@@ -1,47 +0,0 @@
-# 环境配置
-server:
-  port: 8110
-  servlet:
-    context-path: /api/paineng
-
-enable:
-  scheduling: true
-
-# condition
-spel:
-  scheduling: true        # 定时任务是否执行
-  multiSource: false      # 是否多数据源配置
-
-nc:
-  scheduling: true        # 定时任务是否执行
-  multiSource: false      # 是否多数据源配置
-
-spring:
-  # database
-  datasource:
-    hikari:
-      connection-init-sql: SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci           # SqlServer, Oracle 无需设置类型
-    driver-class-name: com.mysql.cj.jdbc.Driver
-    username: root
-    password: 123456
-    url: jdbc:mysql://58.247.23.192:3306/paineng?serverTimezone=GMT%2B8
-  jpa:
-    database: MYSQL
-    database-platform: org.hibernate.dialect.MySQL57Dialect
-
-
-# dingtalk
-dingtalk:
-  agentId: 3280128891
-  appKey: dingmpxci8bolc3jpima
-  appSecret: Y_k3jpKNHbGvb9S9As2Y61ZaUFNglm7SCqquIkcowLBRoc4ZpH7DG0ZTn8LyHMwI
-  corpId: ding6d0de5f5de58a80c35c2f4657eb6378f
-  aesKey:
-  token:
-  operator: ""   # OA管理员账号 [首字符若为0需要转一下字符串]
-
-
-sqlserver:
-  url: jdbc:sqlserver://192.168.0.237:1433;databaseName=lanyun
-  userName: sa
-  password: "LANyunnc!2024#"

+ 0 - 31
mjava-paineng/src/test/java/test.java

@@ -1,31 +0,0 @@
-import com.malk.paineng.Boot;
-import com.mysql.cj.x.protobuf.MysqlxExpr;
-import lombok.extern.slf4j.Slf4j;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-@Slf4j
-@RunWith(SpringRunner.class)
-@SpringBootTest(classes = Boot.class)
-public class test {
-
-    @Test
-    public void testService(){
-        System.out.println("sdafasdfas");
-    }
-}
-//import org.apache.commons.text.similarity.LevenshteinDistance;
-//
-//public class FuzzyDistanceExample {
-//    public static void main(String[] args) {
-//        String str1 = "example";
-//        String str2 = "samples";
-//
-//
-//        int distance = LevenshteinDistance.getDefaultInstance().apply(str1, str2);
-//
-//        System.out.println("The fuzzy distance between '" + str1 + "' and '" + str2 + "' is: " + distance);
-//    }
-//}

mjava-paineng/log/2024-10-22/error-0.log.gz → mjava-ts/log/2024-10-22/error-0.log.gz


mjava-paineng/log/2024-10-22/info-0.log.gz → mjava-ts/log/2024-10-22/info-0.log.gz


mjava-paineng/log/2024-10-22/point-0.log.gz → mjava-ts/log/2024-10-22/point-0.log.gz


mjava-paineng/log/2024-10-22/warn-0.log.gz → mjava-ts/log/2024-10-22/warn-0.log.gz


mjava-paineng/log/2024-10-28/info-0.log.gz → mjava-ts/log/2024-10-28/info-0.log.gz


mjava-paineng/log/2024-10-28/point-0.log.gz → mjava-ts/log/2024-10-28/point-0.log.gz


BIN
mjava-ts/log/2024-12-09/error-0.log.gz


BIN
mjava-ts/log/2024-12-09/info-0.log.gz


BIN
mjava-ts/log/2024-12-09/point-0.log.gz


BIN
mjava-ts/log/2025-08-26/error-0.log.gz


BIN
mjava-ts/log/2025-08-26/info-0.log.gz


BIN
mjava-ts/log/2025-08-26/point-0.log.gz


BIN
mjava-ts/log/2025-08-26/warn-0.log.gz


+ 4 - 4
mjava-paineng/pom.xml

@@ -3,14 +3,14 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
-        <artifactId>java-mcli</artifactId>
+        <artifactId>java-ts</artifactId>
         <groupId>com.malk</groupId>
         <version>1.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>mjava-paineng</artifactId>
-    <description>派能项目</description>
+    <artifactId>mjava-ts</artifactId>
+    <description>泰森开发项目</description>
 
     <properties>
         <maven.compiler.source>8</maven.compiler.source>
@@ -23,7 +23,7 @@
         <dependency>
             <groupId>com.malk</groupId>
             <artifactId>mjava</artifactId>
-            <version>${mjava.version}</version>
+            <version>0.0.3</version>
         </dependency>
 
         <!-- sqlserver依赖 -->

+ 1 - 1
mjava-paineng/src/main/java/com/malk/paineng/Boot.java

@@ -1,4 +1,4 @@
-package com.malk.paineng;
+package com.malk.kepeida;
 
 import com.querydsl.jpa.impl.JPAQueryFactory;
 import org.springframework.boot.SpringApplication;

+ 25 - 0
mjava-ts/src/main/java/com/malk/taisen/Timers/Time.java

@@ -0,0 +1,25 @@
+package com.malk.taisen.Timers;
+
+import com.malk.taisen.service.NonPoServer;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class Time {
+
+
+    @Autowired
+    private NonPoServer nonPoServer;
+
+
+//    @Scheduled(fixedRate = 500)
+//    public void JX() throws Exception {
+//        nonPoServer.NonPoinsetSAP0005("","045e8b98-3e82-4569-b5ea-c22def5170bd");
+//
+//    }
+
+}

+ 43 - 0
mjava-ts/src/main/java/com/malk/taisen/configuration/RestTemplateBase.java

@@ -0,0 +1,43 @@
+package com.malk.taisen.configuration;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.MediaType;
+import org.springframework.http.client.SimpleClientHttpRequestFactory;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.converter.StringHttpMessageConverter;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Configuration
+public class RestTemplateBase {
+    @Bean
+    public RestTemplate registerTemplate() {
+        RestTemplate restTemplate = new RestTemplate(getFactory());
+        //这个地方需要配置消息转换器,不然收到消息后转换会出现异常
+        restTemplate.setMessageConverters(getConverts());
+        return restTemplate;
+    }
+
+    private SimpleClientHttpRequestFactory getFactory() {
+        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
+        factory.setConnectTimeout(100*100000);
+        factory.setReadTimeout(100*100000);
+        return factory;
+    }
+
+    private List<HttpMessageConverter<?>> getConverts() {
+        List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
+        // String转换器
+        StringHttpMessageConverter stringConvert = new StringHttpMessageConverter();
+        List<MediaType> stringMediaTypes = new ArrayList<MediaType>() {{
+            //添加响应数据格式,不匹配会报401
+            add(MediaType.ALL);
+        }};
+        stringConvert.setSupportedMediaTypes(stringMediaTypes);
+        messageConverters.add(stringConvert);
+        return messageConverters;
+    }
+}

+ 21 - 0
mjava-ts/src/main/java/com/malk/taisen/controller/DDController.java

@@ -0,0 +1,21 @@
+package com.malk.taisen.controller;
+
+import com.malk.controller.DDCallbackController;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 钉钉事件回调 3_1
+ * -
+ * [子项目直接继承即可有调用, 无需实现]
+ * -
+ * 注解 @RequestMapping 路径不能重复 [主子项目属同一个项目];
+ * 获取项目回调请求地址, https://mc.cloudpure.cn/frp/mc/dd/callback [调试代理: frp + nginx]
+ */
+@Slf4j
+@RestController
+@RequestMapping("/cp/dd")
+public class DDController extends DDCallbackController {
+
+}

+ 56 - 0
mjava-ts/src/main/java/com/malk/taisen/controller/NonPoCpntroller.java

@@ -0,0 +1,56 @@
+package com.malk.taisen.controller;
+
+import com.malk.server.common.McR;
+import com.malk.taisen.service.NonPoServer;
+import com.malk.utils.UtilMap;
+import com.malk.utils.UtilServlet;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+
+@Slf4j
+@RestController
+@RequestMapping
+public class NonPoCpntroller {
+    @Autowired
+    private NonPoServer NonPoServer;
+
+
+    @PostMapping("/nonpo")
+    McR notice(HttpServletRequest request) {
+
+        Map data = UtilServlet.getParamMap(request);
+        String instanceId = UtilMap.getString(data, "instanceId");
+        String type = UtilMap.getString(data, "type");
+        if (type.equals("Non-PoToSAP0005")) {
+            log.info("泰森宜搭:Non-Po写入SAP0005 请求参数, {}", data);
+            System.out.println("泰森宜搭:Non-Po写入SAP0005!::" + data);
+            NonPoServer.NonPoinsetSAP0005(type, instanceId);
+            System.out.println("泰森宜搭:Non-Po写入SAP0005!结束");
+            log.info("泰森宜搭:Non-Po写入SAP0005!结束");
+        }
+        return McR.success();
+    }
+
+    @PostMapping("/GXFP")
+    McR GXFP(HttpServletRequest request) {
+        Map data = UtilServlet.getParamMap(request);
+        String InstanceId = UtilMap.getString(data, "InstanceId");
+        String voucherNumber = UtilMap.getString(data, "voucherNumber");
+        String OAnumber = UtilMap.getString(data, "OAnumber");
+     //  NonPoServer.FPGX("045e8b98-3e82-4569-b5ea-c22def5170bd", "1920000006","1120测试");
+        if (!InstanceId.equals("") && !voucherNumber.equals("")) {
+            NonPoServer.FPGX(InstanceId, voucherNumber, OAnumber);
+        }
+
+        return McR.success();
+
+    }
+
+
+}

+ 39 - 0
mjava-ts/src/main/java/com/malk/taisen/controller/ProxyController.java

@@ -0,0 +1,39 @@
+package com.malk.taisen.controller;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestTemplate;
+
+@RestController
+@RequestMapping
+public class  ProxyController {
+    /**
+     * 发调用发票需开IP白名单。本地ip经常变更,放服务器调用
+     */
+    private final RestTemplate restTemplate = new RestTemplate();
+    @Value(value = "${sap.TARGET_URL_Poc}")
+    private String  TARGET_URL ;
+
+    @PostMapping("/bookkeeping")
+    public ResponseEntity<?> forwardRequest( @RequestBody Object requestBody) {
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_JSON);
+
+        // 转发请求到目标URL
+        ResponseEntity<String> response = restTemplate.postForEntity(
+                TARGET_URL,
+                new HttpEntity<>(requestBody , headers),
+                String.class
+        );
+
+        return ResponseEntity.status(response.getStatusCode())
+                .body(response.getBody());
+    }
+}

+ 299 - 0
mjava-ts/src/main/java/com/malk/taisen/delegate/DDDelegate.java

@@ -0,0 +1,299 @@
+package com.malk.taisen.delegate;
+
+import cn.hutool.json.JSONArray;
+import com.alibaba.fastjson.JSON;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.malk.delegate.DDEvent;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+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.service.dingtalk.DDClient_Workflow;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.map.HashedMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Primary;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.time.*;
+import java.util.*;
+
+/**
+ * OA审批事件 [主项目也有实现, 添加 @Primary 优先注入主项目实现]
+ * -
+ * 取消方案: 撤销和拒绝流程不继续执行连接器, 因此不使用连接器与轮询审批记录方案 [低效而且占用较高钉钉api调次数];
+ * 优化方案: 通过事件订阅实现实时同步所有审批状态, 定时查询钉钉回调失败记录 [配置钉钉事件Delegate, 添加定时任务]
+ */
+@Slf4j
+@Service
+@Primary
+public class DDDelegate implements DDEvent {
+
+    @Autowired
+    private DDClient ddClient;
+
+    @Autowired
+    private YDClient ydClient;
+    @Autowired
+    private DDClient_Workflow ddClient_workflow;
+    private static final String KEY = "key";
+    private static final String VALUE = "value";
+    private static final String TYPE = "type";
+    private static final String OPERATOR = "operator";
+    private static final String COMPONENT_NAME = "componentName";
+    private static Map<String, Object> buildCondition(
+            String key, Object value, String type, String operator, String componentName) {
+        Map<String, Object> condition = new HashMap<>();
+        condition.put(KEY, key);
+        condition.put(VALUE, value);
+        condition.put(TYPE, type);
+        condition.put(OPERATOR, operator);
+        condition.put(COMPONENT_NAME, componentName);
+        return condition;
+    }
+
+    // 审批任务回调执行业务逻辑
+    @Async
+    @Override
+    public void executeEvent_Task_Finish(String processInstanceId, String processCode, boolean isAgree, String remark) {
+        log.info("executeEvent_Task_Finish");
+    }
+
+    @Async
+    @Override
+    public void executeEvent_Task_Start(String processInstanceId, String processCode) {
+        log.info("executeEvent_Task_Start");
+    }
+
+    @Async
+    @Override
+    public void executeEvent_Task_Redirect(String processInstanceId, String processCode) {
+        log.info("executeEvent_Task_Redirect");
+    }
+
+    @Async
+    @Override
+    public void executeEvent_Instance_Start(String processInstanceId, String processCode) {
+        log.info("executeEvent_Instance_Start");
+    }
+
+
+    // 审批实例回调执行业务逻辑
+    @Async
+    @Override
+    public void executeEvent_Instance_Finish(String processInstanceId, String processCode, boolean isAgree, boolean isTerminate, String staffId)   {
+
+        ///结束
+
+        String compId_sub_oa = "itinerary";
+        Map<String, String> compsId_itinerary = UtilMap.map("开始时间, 结束时间", "dateField_mekuxca9, dateField_mekuxcaa");
+
+        log.info("executeEvent_Instance_Finish");
+        String approveResult = isAgree ? "agree" : "refuse";
+        if (isTerminate) approveResult = "terminated";
+        log.info("审批实例回调执行业务逻辑, {}", approveResult);
+        if (processCode.equals("PROC-4E2D9835-A995-4B7A-B864-52A5D2D729D7") && approveResult.equals("agree")) {//
+//
+//            //如果是出差申请单,并且结束
+//            //根据钉钉id 查询数据
+//            /// dingtalk——派能
+//            String APP_EKY = "ding6dh1cyazzvharitw";
+//            String APP_SECRET = "W3cmjbQZgu1WfAN3tJbuy90jUdOTz4QwSzVCbZY_7Adf7THGo8_BV8y4Ll0X5KFE";
+//            String token = ddClient.getAccessToken(APP_EKY, APP_SECRET);//ddtokken
+//            Map processData = ddClient_workflow.getProcessInstanceId(token, processInstanceId);//通过instanceID ID获取钉钉数据
+//            List<Map> formComponentValues = (List<Map>) processData.get("formComponentValues");
+//            String ifagree = processData.get("result").toString();
+//            String ifstatus = processData.get("status").toString();
+//
+//            if (ifagree.equals("agree") && ifstatus.equals("COMPLETED")) {//status为COMPLETED且result为agree时,表示审批单完结并审批通过。
+//                Optional optional = formComponentValues.stream().filter(item -> compId_sub_oa.equals(item.get("bizAlias"))).findAny();
+//                if (!optional.isPresent()) {
+//                    return;
+//                }
+//                String KSSJ = "";
+//                String JSSJ = "";
+//
+//                String schedule = UtilMap.getString((Map) optional.get(), "value");
+//                List<Map> itineraryList = ((List<Map>) JSON.parse(schedule));
+//                for (Map itinerary : itineraryList) {
+//                    List<Map> rowValue = (List<Map>) itinerary.get("rowValue");
+//                    Map rowData = new HashedMap();
+//                    // 循环子表组件
+//                    for (String subName : compsId_itinerary.keySet()) {
+//                        if (subName.equals("开始时间")) {
+//                            if (KSSJ.equals("")) {
+//                                KSSJ = (String) rowValue.stream().filter(item -> "开始时间".equals(item.get("bizAlias")) || "开始时间".equals(item.get("label"))).findAny().get().get("value");
+//                            }
+//                        }
+//                        if (subName.equals("结束时间")) {
+//                            JSSJ = (String) rowValue.stream().filter(item -> "结束时间".equals(item.get("bizAlias")) || "结束时间".equals(item.get("label"))).findAny().get().get("value");
+//                        }
+//                    }
+//                }
+//                //更改宜搭问题单数据     先抓取对应数据
+//                KSSJ = String.valueOf(dateTime(KSSJ));
+//                JSSJ = String.valueOf(dateTime(JSSJ));
+//                optional = formComponentValues.stream().filter(item -> "问题明细".equals(item.get("name"))).findAny();
+//                if (!optional.isPresent()) {
+//                    return;
+//                }
+//                schedule = UtilMap.getString((Map) optional.get(), "value");
+//
+//                    ObjectMapper mapper = new ObjectMapper();
+//                Response[] responses = new Response[0];
+//                try {
+//                    responses = mapper.readValue(schedule, Response[].class);
+//                } catch (JsonProcessingException e) {
+//                    throw new RuntimeException(e);
+//                }
+//
+//                // 循环提取 procInstId
+//                    for (Response response : responses) {
+//                        if (response.getRowValue() != null) {
+//                            for (Row row : response.getRowValue()) {
+//                                if (row.getExtendValue() != null && row.getExtendValue().getList() != null) {
+//                                    for (ListItem item : row.getExtendValue().getList()) {
+//                                        System.out.println("procInstId: " + item.getProcInstId());
+//                                        //根据procInstId查询宜搭数据
+//
+//                                        List<Map<String, Object>> conditions = new ArrayList<>(Arrays.asList(
+//                                                buildCondition(
+//                                                        "textField_mf0rup5q",  item.getProcInstId(), "TEXT", "eq", "TextField")
+//                                        ));
+//
+//                                        String listJson = JSON.toJSONString(conditions);
+//
+//                                        List<Map> list = (List<Map>) ydClient.queryData(YDParam.builder()
+//                                                .appType("APP_TYUU2SIHDVIFQS7Y3DEV")
+//                                                .systemToken("MYF663B18U0YFX2X6ZS2U78VR2ZC21II16BEMF1")
+//                                                .formUuid("FORM-434FF773538D4386AFFB10FBCEED4D7CXQN8")
+//                                                .searchFieldJson(listJson)
+//                                                .build(), YDConf.FORM_QUERY.retrieve_search_form).getData();
+//
+//                                        if (list != null && list.size() > 0) {
+//                                            for (Map map : list) {
+//                                                try {
+//
+//                                                    String formInstanceId = UtilMap.getString(map, "formInstanceId");//导入数据的实例ID
+//
+//                                                    ydClient.operateData(YDParam.builder()
+//                                                            .appType("APP_TYUU2SIHDVIFQS7Y3DEV")
+//                                                            .systemToken("MYF663B18U0YFX2X6ZS2U78VR2ZC21II16BEMF1")
+//                                                            .formInstanceId(formInstanceId)
+//                                                            .updateFormDataJson(JSON.toJSONString(UtilMap.map("dateField_mekuxca9, dateField_mekuxcaa", KSSJ,JSSJ)))
+//                                                            .build(), YDConf.FORM_OPERATION.update);
+//
+//                                                } catch (Exception e) {
+//                                                    log.error("处理数据时发生异常", e);
+//                                                }
+//                                            }}
+//
+//                                    }
+//                                }
+//                            }
+//                        }
+//                    }
+//
+//
+//
+//
+////                itineraryList = ((List<Map>) JSON.parse(schedule));
+////                for (Map itinerary : itineraryList) {
+////                    String  prui="";
+////
+////
+////
+//
+//            }
+
+
+        }
+
+
+    }
+
+    public long dateTime(String dateStr) {
+        String[] parts = dateStr.split(" ");
+        if (parts.length != 2) {
+            throw new IllegalArgumentException("日期格式无效");
+        }
+
+        // 解析日期部分
+        LocalDate date = LocalDate.parse(parts[0]);
+
+        // 根据上午/下午设置小时
+        boolean isPM = "上午".equals(parts[1]);
+        int hour = isPM ? 8 : 18;
+        // 组合日期和时间
+        LocalDateTime dateTime = LocalDateTime.of(date, LocalTime.of(hour, 0));
+
+        // 指定时区(例如:Asia/Shanghai)
+        ZoneId zoneId = ZoneId.of("Asia/Shanghai");
+        ZonedDateTime zonedDateTime = dateTime.atZone(zoneId);
+        // 转换为时间戳
+        long timestamp = zonedDateTime.toInstant().toEpochMilli();
+
+
+        return timestamp;
+
+    }
+
+    // 定义与JSON结构匹配的Java类
+    public static class Response {
+        private List<Row> rowValue;
+        private String rowNumber;
+
+        // Getters and Setters
+        public List<Row> getRowValue() { return rowValue; }
+        public void setRowValue(List<Row> rowValue) { this.rowValue = rowValue; }
+        public String getRowNumber() { return rowNumber; }
+        public void setRowNumber(String rowNumber) { this.rowNumber = rowNumber; }
+    }
+
+    public static class Row {
+        private String label;
+        private ExtendValue extendValue;
+        private List<String> value;
+        private String key;
+
+        // Getters and Setters
+        public String getLabel() { return label; }
+        public void setLabel(String label) { this.label = label; }
+        public ExtendValue getExtendValue() { return extendValue; }
+        public void setExtendValue(ExtendValue extendValue) { this.extendValue = extendValue; }
+        public List<String> getValue() { return value; }
+        public void setValue(List<String> value) { this.value = value; }
+        public String getKey() { return key; }
+        public void setKey(String key) { this.key = key; }
+    }
+
+    public static class ExtendValue {
+        private List<ListItem> list;
+
+        // Getters and Setters
+        public List<ListItem> getList() { return list; }
+        public void setList(List<ListItem> list) { this.list = list; }
+    }
+
+    public static class ListItem {
+        private String businessId;
+        private String procInstId;
+
+        // Getters and Setters
+        public String getBusinessId() { return businessId; }
+        public void setBusinessId(String businessId) { this.businessId = businessId; }
+        public String getProcInstId() { return procInstId; }
+        public void setProcInstId(String procInstId) { this.procInstId = procInstId; }
+    }
+
+}
+
+
+
+
+

+ 9 - 0
mjava-ts/src/main/java/com/malk/taisen/service/NonPoServer.java

@@ -0,0 +1,9 @@
+package com.malk.taisen.service;
+
+public interface NonPoServer {
+
+    void  NonPoinsetSAP0005(String type,String InstanceId);
+
+    void  FPGX(String InstanceId,String voucherNumber,String OAnumber);
+
+}

+ 434 - 0
mjava-ts/src/main/java/com/malk/taisen/service/impl/NonPoServerImpl.java

@@ -0,0 +1,434 @@
+package com.malk.taisen.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.malk.taisen.util.CusutUtil;
+import com.malk.taisen.util.HttpUtil;
+import cn.hutool.json.JSONArray;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.server.dingtalk.DDR_New;
+import com.malk.service.aliwork.YDClient;
+import com.malk.service.aliwork.YDService;
+import com.malk.service.dingtalk.DDClient;
+import com.malk.taisen.service.NonPoServer;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@Slf4j
+@Service
+public class NonPoServerImpl implements NonPoServer {
+
+
+    @Autowired
+    private YDClient ydClient;
+
+    @Autowired
+    private YDService ydService;
+    @Autowired
+    private DDClient ddClient;
+    /**
+     * 测试地址
+     */
+    @Value(value = "${sap.QA_sapUrl_Poc}")
+    private String  QA_sapUrl ;
+
+
+    @Override
+    public void NonPoinsetSAP0005(String type, String InstanceId) {
+        YDParam ydParam = _getYDTokenKPD();
+        ydParam.setFormInstanceId(InstanceId);
+        DDR_New ddr = ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_id);
+        Map dataForm = ddr.getFormData();
+        // dataForm.put("InstanceId", InstanceId);
+
+        JSONObject sapJson = new JSONObject();
+        JSONObject upJson = new JSONObject();
+        // 添加顶级键值对
+        sapJson.put("ZDUEDATE", CusutUtil.getFormatDate((Long) dataForm.get("dateField_mejfoonv"))); //Due date / 到期日
+        sapJson.put("BKTXT", dataForm.get("textareaField_mejfoonw"));//备注  抬头文本
+        sapJson.put("ZOA_NUMBER", dataForm.get("textField_mi73dy3n")); //钉钉单据号
+        if (dataForm.get("selectField_mejfoona").equals("收据支付")){//☑ 票据支付时 代码ZINVOICE_AMT 默认ZPAY_AMT的值
+            sapJson.put("ZINVOICE_AMT",dataForm.get("numberField_mejfoool_value").equals("")?"0": dataForm.get("numberField_mejfoool_value"));//支付金额
+        }else {
+            sapJson.put("ZINVOICE_AMT", dataForm.get("numberField_mejfoook_value").equals("")?"0": dataForm.get("numberField_mejfoook_value"));//发票总额
+        }
+
+        sapJson.put("BANKA", dataForm.get("textField_mejfoon9")); //开户行
+        sapJson.put("BLDAT", CusutUtil.getFormatDate((Long) dataForm.get("dateField_l9nsavm3"))); //凭证日期ƒ   Date / 申请日期
+        String uid = "TEST-CN001";
+        String uname = "";
+        if (!dataForm.get("employeeField_mhxdzya9_id").equals("")) {
+
+            List<Map<String, Object>> conditions = new ArrayList<>(Arrays.asList(buildCondition("textField_l6dddg5k", dataForm.get("employeeField_mhxdzya9_id"), "TEXT", "eq", "TextField")));
+            String listJson = JSON.toJSONString(conditions);
+            YDParam YGydParam = _getYDTokenZXXZ(listJson);
+            List<Map> dataList = (List<Map>) ydClient.queryData(YGydParam, YDConf.FORM_QUERY.retrieve_search_form).getData();
+            if (dataList != null && dataList.size() > 0) {
+                Map map = dataList.get(0);
+                Map formData = (Map) map.get("formData");
+                uid = formData.get("textField_l6djch1m").toString();
+                uid = "CHN-0" + uid;
+            }
+        }
+        //  uid = "CHN-01000332";//测试过账人
+        sapJson.put("USNAM", uid);   //过账人
+        sapJson.put("BUDAT", CusutUtil.getFormatDate((Long) dataForm.get("dateField_mhxdzyaa")));  //过账日期
+        sapJson.put("ZOA_TYPE", dataForm.get("selectField_mejfoona").equals("无票预付") ? "AD" : "NP");//OA单据类型
+        sapJson.put("ZPAY_AMT", dataForm.get("numberField_mejfoool_value").equals("")?"0":dataForm.get("numberField_mejfoool_value")); //支付金额
+        sapJson.put("BUKRS", dataForm.get("textField_mejfj9iw"));//公司代码
+        sapJson.put("BANKN", dataForm.get("textField_mejfoon8")); //银行账号
+        sapJson.put("WAERS", dataForm.get("selectField_mejfoong")); //币种
+        sapJson.put("KOINH", dataForm.get("textField_mejezfwl")); //收款方名称
+        sapJson.put("LIFNR", dataForm.get("textField_mejezfwv"));//供应商代码
+        sapJson.put("interface_id", "SAP005");
+        //获取子表
+        if (dataForm.get("selectField_mejfoona").equals("发票支付")) {
+            sapJson.put("BLART", "Z2");//凭证类型
+            JSONArray itemArray = new JSONArray();
+            int x = 1;//OA单据行号累计用
+            List<Map<String, Object>> tableFils = (List<Map<String, Object>>) dataForm.get("tableField_l6ujr47b");
+            if (tableFils != null && tableFils.size() > 0) {
+                for (int n = 0; n < tableFils.size(); n++) {
+                    Map<String, Object> row = new HashMap(tableFils.get(n));
+
+
+                    JSONObject itemObj = new JSONObject();
+                    itemObj.put("KOSTL", String.valueOf(row.get("textField_mi5kjmwk"))); //成本中心
+                    itemObj.put("DMBTR", String.valueOf(row.get("numberField_l6ujr47g_value")));  //不含税金额
+                    itemObj.put("XREF1", "");//参考码  9000242
+
+                    String sjItemNo = "";
+                    if (x < 10) {
+                        sjItemNo += "00" + x;
+                    } else if (x < 100) {
+                        sjItemNo += "0" + x;
+                    } else {
+                        sjItemNo += x;
+                    }
+                    x++;
+                    itemObj.put("ZOA_ITEMNO", sjItemNo);//OA单据行号
+                    itemObj.put("HKONT", String.valueOf(row.get("textField_l6lvt6lj"))); //会计科目
+                    itemObj.put("ZTAXOUT_AMT","0");//进项税转出金额  、、、 String.valueOf(row.get("numberField_l6bx7hqk_value"))
+                    itemObj.put("MWSKZ", String.valueOf(row.get("textField_l7a6bzpv")));///税码
+                    itemObj.put("ZTAX_AMT", String.valueOf(row.get("numberField_l6vu65fp_value")).equals("")?"0": String.valueOf(row.get("numberField_l6vu65fp_value")));  //税额
+                    itemObj.put("SGTXT", String.valueOf(row.get("textField_mejfoonz")));  //行项目文本
+
+                    itemArray.put(itemObj);
+                }
+
+
+            }
+
+            sapJson.put("ITEM", itemArray);
+        } else  if (dataForm.get("selectField_mejfoona").equals("无票预付")){
+
+            sapJson.put("BLART", "Z4");//凭证类型
+            sapJson.put("UMSKZ", "A");//特别总账标识
+            JSONArray SapItem = new JSONArray();       //子表
+            JSONObject itemObject = new JSONObject();
+            itemObject.put("ZOA_ITEMNO", "001");       //OA单据行号
+            itemObject.put("HKONT", "");       //会计科目
+            itemObject.put("KOSTL", "");       //成本中心
+
+            BigDecimal bigBhsje = new BigDecimal(dataForm.get("numberField_mejfoool_value").toString());//改大数
+            bigBhsje = bigBhsje.setScale(2, RoundingMode.HALF_UP);
+            itemObject.put("DMBTR", bigBhsje);       //不含税金额
+
+//                itemObject.put("DMBTR", object.get("numberField_l6bwb4hg").toString());       //不含税金额--支付金额
+            itemObject.put("MWSKZ", "");       //税码
+            itemObject.put("ZTAX_AMT", "0");       //税额
+            itemObject.put("ZTAXOUT_AMT", "0");       //进项税转出金额
+            itemObject.put("SGTXT", "");       //行项目文本
+            itemObject.put("XREF1", dataForm.get("textareaField_mejfoonw")); //cir项目号
+            SapItem.put(itemObject);
+            sapJson.put("ITEM", SapItem);
+        }else  if (dataForm.get("selectField_mejfoona").equals("收据支付")){
+            sapJson.put("BLART", "Z2");//凭证类型
+            JSONArray itemArray = new JSONArray();
+            int x = 1;//OA单据行号累计用
+            List<Map<String, Object>> tableFils = (List<Map<String, Object>>) dataForm.get("tableField_mi7c3wl9");
+            if (tableFils != null && tableFils.size() > 0) {
+                for (int n = 0; n < tableFils.size(); n++) {
+                    Map<String, Object> row = new HashMap(tableFils.get(n));
+                    JSONObject itemObj = new JSONObject();
+                    itemObj.put("KOSTL", String.valueOf(row.get("textField_mi7c3wku"))); //成本中心
+                    itemObj.put("DMBTR", String.valueOf(row.get("numberField_mi7c3wky_value")));  //不含税金额
+                    itemObj.put("XREF1", "");//参考码  9000242
+                    String sjItemNo = "";
+                    if (x < 10) {
+                        sjItemNo += "00" + x;
+                    } else if (x < 100) {
+                        sjItemNo += "0" + x;
+                    } else {
+                        sjItemNo += x;
+                    }
+                    x++;
+                    itemObj.put("ZOA_ITEMNO", sjItemNo);//OA单据行号
+                    itemObj.put("HKONT", String.valueOf(row.get("textField_mi7c3wl5"))); //会计科目
+                    itemObj.put("ZTAXOUT_AMT","0");//进项税转出金额  、、、 String.valueOf(row.get("numberField_l6bx7hqk_value"))
+                    itemObj.put("MWSKZ", "");///税码
+                    itemObj.put("ZTAX_AMT", "0");  //税额
+                    itemObj.put("SGTXT", String.valueOf(row.get("textField_mi7c3wkn")));  //行项目文本
+
+                    itemArray.put(itemObj);
+                }
+
+            }
+            sapJson.put("ITEM", itemArray);
+        }
+
+
+        /***
+         * 调用接口
+         */
+        System.out.println(sapJson);
+        log.info("发起POST请求:URL={},参数={}", QA_sapUrl + "SAP005", sapJson);
+        String post = HttpUtil.post(QA_sapUrl + "SAP005", null, sapJson.toString(), null);
+        log.info(dataForm.get("textField_mi73dy3n")+"POST反馈={}", post);
+        System.out.println( "POST反馈====="+post);
+        if (!post.equals("")) {
+            JSONArray jsonArray = new JSONArray(post);
+            if (jsonArray.size() > 0) {
+                String voucherNumber = "";
+                try {
+                    cn.hutool.json.JSONObject postJsonObject = jsonArray.getJSONObject(0);
+                  String  E_SYSMSGTYPE   =  postJsonObject.getStr("E_SYSMSGTYPE");//状态
+                    String E_MESSAGE = postJsonObject.getStr("E_MESSAGE");//SAP005 接口 反馈值
+                    if ( E_SYSMSGTYPE.equals("S")) {
+                        String e_belnr = postJsonObject.getStr("E_BELNR");
+                        if (e_belnr.contains(";")) {
+                            String[] split = e_belnr.split(";");
+                            try {
+                                e_belnr = split[0];//+ ";";
+                            } catch (Exception ex) {
+                                e_belnr = ";";
+                            }
+
+                        }
+                        voucherNumber = e_belnr;
+                        String E_GJAHR = postJsonObject.getStr("E_GJAHR");//凭证年度
+                        //   执行完加入,把更改表单凭证数据
+                        ydClient.operateData(YDParam.builder().appType("APP_N9NPHVTQLPBPO8MR6WFG").systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW").formInstanceId(String.valueOf(InstanceId)).updateFormDataJson(JSON.toJSONString(UtilMap.map("textField_l9nsavm2, textField_mejezfwk, textareaField_mi5kjmxb, selectField_mi72r4s6", E_GJAHR, e_belnr,E_MESSAGE,"成功"))).build(), YDConf.FORM_OPERATION.update);
+
+                        /**
+                         * 执行勾选发票
+                         */
+                        if (dataForm.get("selectField_mejfoona").equals("发票支付")) {
+                            FPGX(InstanceId, voucherNumber, (String) dataForm.get("textField_mi73dy3n"));
+                        }
+                    }else {
+                        //  报错写入
+                        ydClient.operateData(YDParam.builder().appType("APP_N9NPHVTQLPBPO8MR6WFG").systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW").formInstanceId(String.valueOf(InstanceId)).updateFormDataJson(JSON.toJSONString(UtilMap.map("textareaField_mi5kjmxb, selectField_mi72r4s6", E_MESSAGE,"失败" ))).build(), YDConf.FORM_OPERATION.update);
+
+                    }
+
+
+                } catch (Exception ex) {
+                }
+            } else {
+
+
+            }
+
+        }else {
+
+            //  报错写入
+            ydClient.operateData(YDParam.builder().appType("APP_N9NPHVTQLPBPO8MR6WFG").systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW").formInstanceId(String.valueOf(InstanceId)).updateFormDataJson(JSON.toJSONString(UtilMap.map("textareaField_mi5kjmxb, selectField_mi72r4s6", post,"失败" ))).build(), YDConf.FORM_OPERATION.update);
+
+        }
+
+
+    }
+
+    /***
+     * 发票勾选处理
+     * @param InstanceId
+     * @param voucherNumber
+     */
+    @Override
+    public void FPGX(String InstanceId, String voucherNumber,String OAnumber) {
+        YDParam ydParam = _getYDTokenKPD();
+        ydParam.setFormInstanceId(InstanceId);
+        DDR_New ddr = ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_id);
+        Map dataForm = ddr.getFormData();
+        try {
+            String nowDate = CusutUtil.getNowDate();
+            List<Map<String, Object>> requestList = new ArrayList<>();
+            Map<String, Object> request = new LinkedHashMap<>();
+            JSONArray invoices = new JSONArray();
+            ArrayList<String> ids = new ArrayList<>();
+            request.put("voucherNumber", voucherNumber);
+            request.put("voucherstatus", "0");
+            request.put("voucherdate", nowDate);
+            request.put("applytime", nowDate);
+            request.put("bookeepflag", "1");
+            request.put("syssource", "第三方系统规定");
+            List<Map> list = new ArrayList<>();
+            List<Map<String, Object>> tableFils = (List<Map<String, Object>>) dataForm.get("tableField_l6ujr47b");
+            if (tableFils != null && tableFils.size() > 0) {
+                list = (List<Map>) dataForm.get("tableField_l6ujr47b");
+                for (int n = 0; n < tableFils.size(); n++) {
+
+                    Map<String, Object> row = new HashMap(tableFils.get(n));
+                    Map<Object, Object> invoice = new LinkedHashMap<>();
+//                                String substring = row.getString("associationFormField_l6yglav7_id").replaceAll("\\\\", "").substring(1);
+                    String instanceId = row.get("textField_mi1l1tcc").toString();
+
+                    Map formdata = ydClient.queryData(YDParam.builder().appType("APP_N9NPHVTQLPBPO8MR6WFG").systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW").formUuid("FORM-4J7669A1Z1X22RIL61LB7AOXGRX82OHP45U6L51").formInstanceId(instanceId).build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+                    if (formdata != null) {
+                        ids.add(instanceId);
+                        JSONObject jsonObject = new JSONObject();
+                        invoice.put("taxno", formdata.get("textField_l6u55vdn"));
+                        if (formdata.get("textField_l6u55vd8").toString().contains("全电")) {
+                            invoice.put("invoicecode", "全电发票");
+                        } else {
+                            invoice.put("invoicecode", formdata.get("textField_l6u55vd9"));
+                        }
+                        invoice.put("invoicenumber", formdata.get("textField_l6u55vd3"));
+                        invoice.put("usetax", formdata.get("textField_l6vu65fs").toString());
+                        try {
+                            if (!formdata.containsKey("textField_l6vvuq3f") || formdata.get("textField_l6vvuq3f").equals("")) {
+                                formdata.remove("textField_l6vvuq3f");
+                                formdata.put("textField_l6vvuq3f", "0");
+                            }
+                            invoice.put("taxrate", Double.parseDouble(formdata.get("textField_l6vvuq3f").toString().substring(0, formdata.get("textField_l6vvuq3f").toString().lastIndexOf("%"))) / 100);
+                        } catch (Exception ex) {
+                            try {
+                                invoice.put("taxrate", Double.parseDouble(formdata.get("textField_l6vvuq3f").toString()) / 100);
+                            } catch (Exception ex2) {
+                                invoice.put("taxrate", 0);
+                            }
+                        }
+                        invoice.put("autodeduct", "1");
+                        invoice.put("oper", "1");
+                        jsonObject.toString();
+                        invoices.put(invoice);
+                        request.put("invoices", invoices);
+                    }
+
+                }
+                requestList.add(request);
+                String jsonBody = new ObjectMapper().writeValueAsString(requestList);
+                System.out.println(jsonBody.toString());
+                RestTemplate restTemplate = new RestTemplate();
+                String PROXY_URL = "https://poc.cloudpure.cn/api/ts/bookkeeping";
+                HttpHeaders headers = new HttpHeaders();
+                headers.setContentType(MediaType.APPLICATION_JSON);
+                ResponseEntity<String> response = restTemplate.postForEntity(PROXY_URL, new HttpEntity<>(jsonBody, headers), String.class);
+
+                String responseBody = response.getBody();
+                try {
+                    ObjectMapper objectMapper = new ObjectMapper();
+                    JsonNode rootNode = objectMapper.readTree(responseBody);
+                    ArrayList<Map> maps_YD = new ArrayList<>();
+                    HashMap map = new HashMap();
+                    // 获取 data 数组
+                    JsonNode dataArray = rootNode.get("data");
+                    String code= String.valueOf(rootNode.get("code"));
+                    // 循环遍历 data 数组
+                    if (dataArray.size()>0 && code.equals("\"0000\"")) {
+
+                        for (int i = 0; i < list.size(); i++) {
+                            Map sss2 = (Map) list.get(i);
+                            String pd = (String) sss2.get("selectField_mgz2tut4");//发票是否勾选?
+                            String fpidInstanceId=(String) sss2.get("textField_mi1l1tcc");//发票实例ID
+
+                            String returnMsg = "";
+                            for (JsonNode dataItem : dataArray) {
+                                 returnMsg = dataItem.get("returnmsg").asText();
+                                String invoicenumber = dataItem.get("invoicenumber").asText();
+                                if (invoicenumber.equals(sss2.get("textField_l6ujr47c")) && !returnMsg.equals("未同步到该发票信息,请先进行同步发票操作!")) {
+                                    pd = "已勾选";
+                                } else {
+                                    pd = "不相关";
+                                }
+                            }
+                            sss2.put("cascadeSelectField_mejfoony", list.get(i).get("cascadeSelectField_mejfoony_id"));
+                            sss2.put("selectField_mgz2tut4", pd);
+                            sss2.put("textareaField_mi5kjmxc", returnMsg);
+                            maps_YD.add(sss2);
+                            //更改发票信息
+                            HashMap FPMAP = new HashMap();
+                            FPMAP.put("textField_l7efm5az",pd);
+                            FPMAP.put("textField_l7efm5ay","是");
+                            FPMAP.put("textField_lz0v4x8o",voucherNumber);
+                            FPMAP.put("textField_lz0v4x8p",OAnumber);
+                            ydClient.operateData(YDParam.builder().appType("APP_N9NPHVTQLPBPO8MR6WFG").systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW").formInstanceId(String.valueOf(fpidInstanceId)).updateFormDataJson(JSON.toJSONString(FPMAP)).build(), YDConf.FORM_OPERATION.update);
+                        }
+                        map.put("tableField_l6ujr47b", maps_YD);
+                        map.put("textareaField_mi7et0wm",rootNode);
+                        ydClient.operateData(YDParam.builder().appType("APP_N9NPHVTQLPBPO8MR6WFG").systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW").formInstanceId(String.valueOf(InstanceId)).updateFormDataJson(JSON.toJSONString(map)).build(), YDConf.FORM_OPERATION.update);
+
+                    }else {
+
+                        //  报错写入
+                        ydClient.operateData(YDParam.builder().appType("APP_N9NPHVTQLPBPO8MR6WFG").systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW").formInstanceId(String.valueOf(InstanceId)).updateFormDataJson(JSON.toJSONString(UtilMap.map("textareaField_mi7et0wm",   rootNode))).build(), YDConf.FORM_OPERATION.update);
+
+
+                    }
+
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+
+
+            }
+
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            System.out.println(ex);
+        }
+
+    }
+
+
+    public YDParam _getYDTokenKPD() {
+        /**
+         * 泰森付款
+         */
+        return YDParam.builder().appType("APP_N9NPHVTQLPBPO8MR6WFG").systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW").build();
+    }
+
+    /**
+     * 泰森付款  人员档案表
+     */
+    public static YDParam _getYDTokenZXXZ(String searchFieldJson) {
+        return YDParam.builder().appType("APP_N9NPHVTQLPBPO8MR6WFG").systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW").formUuid("FORM-4J7669A10FO250UJ9C6Q7CM00PC62YPW8DD6LT").searchFieldJson(searchFieldJson).build();
+    }
+
+
+    //匹配条件用
+    private static final String KEY = "key";
+    private static final String VALUE = "value";
+    private static final String TYPE = "type";
+    private static final String OPERATOR = "operator";
+    private static final String COMPONENT_NAME = "componentName";
+
+    private static Map<String, Object> buildCondition(String key, Object value, String type, String operator, String componentName) {
+        Map<String, Object> condition = new HashMap<>();
+        condition.put(KEY, key);
+        condition.put(VALUE, value);
+        condition.put(TYPE, type);
+        condition.put(OPERATOR, operator);
+        condition.put(COMPONENT_NAME, componentName);
+        return condition;
+    }
+
+}

+ 780 - 0
mjava-ts/src/main/java/com/malk/taisen/util/CusutUtil.java

@@ -0,0 +1,780 @@
+package com.malk.taisen.util;
+
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.util.DigestUtils;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Decription:
+ * 通用方法
+ */
+public class CusutUtil {
+
+
+    //当前时间加几天返回
+    public static String SetTimeAddDay(int day) {
+        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
+        Calendar c = Calendar.getInstance();
+        c.add(Calendar.DAY_OF_MONTH, day);
+        return sf.format(c.getTime());
+    }
+
+    //当前时间加几月返回
+    public static String SetTimeAddMonth(int Month) {
+        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
+        Calendar c = Calendar.getInstance();
+        c.add(Calendar.MONTH, Month);
+        return sf.format(c.getTime());
+    }
+
+    //月份加任意
+    public static String monthAddFrist(String date, int month) {
+
+        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+        try {
+            Calendar ct = Calendar.getInstance();
+            ct.setTime(df.parse(date));
+            ct.add(Calendar.MONTH, month);
+            return df.format(ct.getTime());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return "";
+    }
+
+    //时间转时间戳(yyyy年MM月dd日) 毫秒级
+    public static long dateTOtimeshap(String date) {
+        String date_str = date +  " 00:00:00";
+        DateFormat df = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
+        try {
+
+            Date time = df.parse(date_str);
+            long timestamp = time.getTime();
+            return timestamp;
+        } catch (Exception e) {
+            try {
+                Date  time = df.parse(date);
+                long timestamp = time.getTime();
+                return timestamp;
+            } catch (ParseException parseException) {
+                parseException.printStackTrace();
+            }
+
+        }
+        return 0;
+    }
+
+    //时间转时间戳(yyyyMMdd) 毫秒级
+    public static long dateTOtimeshapYYMMDD(String date) {
+        date += " 00:00:00";
+        DateFormat df = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
+        try {
+
+            Date time = df.parse(date);
+            long timestamp = time.getTime();
+            return timestamp;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return 0;
+    }
+
+    //时间转格式(yyyy/MM/dd/)
+    public static String dateTOxieg(String date) {
+        return date.replace("年", "").replace("月", "").replace("日", "");
+    }
+
+    //天数加任意
+    public static String DayAddFrist(String date, int day) {
+        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+        try {
+            Calendar ct = Calendar.getInstance();
+            ct.setTime(df.parse(date));
+            ct.add(Calendar.DAY_OF_MONTH, day);
+            return df.format(ct.getTime());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return "";
+    }
+
+    //根据云枢url获取refId
+    public static String ByUrlGetRefId(String url) {
+        String refId = url.substring(url.indexOf("?") + 7, url.indexOf("&"));
+        return refId;
+    }
+
+    //String to html
+    public static String strToHtml(String s) {
+        if (s == null || s.equals("")) return "";
+        s = s.replaceAll("&amp;", "&");
+        s = s.replaceAll("&lt;", "<");
+        s = s.replaceAll("&gt;", ">");
+        s = s.replaceAll("  ", "&nbsp;");
+        return s;
+    }
+
+    //从头开始删除字符的方法
+    public static String TruncateHeadString(String origin, int count) {
+        if (origin == null || origin.length() < count) {
+            return null;
+        }
+        char[] arr = origin.toCharArray();
+        char[] ret = new char[arr.length - count];
+        for (int i = 0; i < ret.length; i++) {
+            ret[i] = arr[i + count];
+        }
+
+        return String.copyValueOf(ret);
+    }
+
+    //从尾部开始删除字符的方法
+    public static String TruncateTailString(String origin, int count) {
+        if (origin == null || origin.length() < count) {
+            return null;
+        }
+        char[] arr = origin.toCharArray();
+        char[] ret = new char[arr.length - count + 1];
+        for (int i = 0; i < ret.length; i++) {
+            ret[i] = arr[i];
+        }
+
+        return String.copyValueOf(ret);
+    }
+
+    /**
+     * 获取现在时间
+     *
+     * @return 返回时间类型 yyyy-MM-dd HH:mm:ss
+     */
+    public static String getNowDate() {
+        Date currentTime = new Date();
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String dateString = formatter.format(currentTime);
+        return dateString;
+    }
+
+    /**
+     * @param string
+     * @return 转换之后的内容
+     * @Title: unicodeDecode
+     * @Description: unicode解码 将Unicode的编码转换为中文
+     */
+    public static String unicodeDecode(String string) {
+        Pattern pattern = Pattern.compile("(\\\\u(\\p{XDigit}{4}))");
+        Matcher matcher = pattern.matcher(string);
+        char ch;
+        while (matcher.find()) {
+            ch = (char) Integer.parseInt(matcher.group(2), 16);
+            string = string.replace(matcher.group(1), ch + "");
+        }
+        return string;
+    }
+
+
+    /**
+     * 获取现在时间 -格式
+     *
+     * @return 返回时间类型 yyyyMMdd
+     */
+    public static String getNowDate(String gs) {
+        Date currentTime = new Date();
+        SimpleDateFormat formatter = new SimpleDateFormat(gs);
+        String dateString = formatter.format(currentTime);
+        return dateString;
+    }
+
+    //时间戳转时间 yyyyMMdd
+    public static String getFormatDate(long times) {
+        Date date = new Date(times);
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
+        String dateString = formatter.format(date);
+        return dateString;
+    }
+
+    //时间戳转时间 yyyyMMdd
+    public static String getFormatDateYY(long times) {
+        Date date = new Date(times);
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy");
+        String dateString = formatter.format(date);
+        return dateString;
+    }
+
+    //时间戳转时间 yyyyMM
+    public static String getFormatDateMM(long times) {
+        Date date = new Date(times);
+        SimpleDateFormat formatter = new SimpleDateFormat("MM");
+        String dateString = formatter.format(date);
+        return dateString;
+    }
+
+    /**
+     * 获取现在时间 -带时区
+     *
+     * @return 返回时间类型 yyyy-MM-dd'T'HH:mm:ssXXX
+     */
+    public static String getNowDate_TIMEZONE() {
+        Date currentTime = new Date();
+
+        Calendar cal = Calendar.getInstance(); // creates calendar
+
+        cal.setTime(currentTime); // sets calendar time/date
+
+        cal.add(Calendar.HOUR_OF_DAY, 2); // adds one hour
+
+        currentTime = cal.getTime();//
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
+        String dateString = formatter.format(currentTime);
+        return dateString;
+    }
+/**
+  * @Description : 时间格式转为yyyy-MM-dd
+  * @Author : Lizzy
+  * @Param :
+  * @return : String
+  * @Date : 2024/7/29 19:11
+  */
+    public static String getDate(long times) {
+        Date date = new Date(times);
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+        String dateString = formatter.format(date);
+        return dateString;
+    }
+
+
+    //获取jayy数组
+//    public static JSONArray getJayy(String s) {
+//        JSONObject jObj = new JSONObject(s);
+//        JSONArray content = new JSONArray();
+//        if (jObj.has("data")) {
+//            JSONObject jdata = new JSONObject(jObj.get("data").toString());
+//            content = new JSONArray(jdata.get("content").toString());
+//        }
+//        return content;
+//    }
+
+    //月份加1
+    public static String monthAddFrist(String date) {
+
+        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+        try {
+            Calendar ct = Calendar.getInstance();
+            ct.setTime(df.parse(date));
+            ct.add(Calendar.MONTH, +1);
+            return df.format(ct.getTime());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return "";
+    }
+
+    //返回成功格式
+    public static String SuccessReturnJsonString(int code, String data, String... types) {
+        for (String type : types) {
+            if (type.toLowerCase().contains("str")) data = "\"" + data + "\"";
+        }
+        return "{\"code\":" + code + ",\"message\":\"\",\"response\":" + data + ",\"success\":true}";
+    }
+
+
+//    public static Object jsonByHas(JSONObject jo, String key) {
+//        if (jo.has(key)) {
+//            return jo.get(key);
+//        }
+//        return null;
+//    }
+
+    //返回失败格式
+    public static String ErrorReturnJsonString(int code, String message, String... types) {
+        if (types.length == 0) {
+            message = "\"" + message + "\"";
+        }
+        return "{\"code\":" + code + ",\"message\":" + message + ",\"response\":null,\"success\":false}";
+    }
+
+    //返回json中需要的参
+//    public static String getJsonValue(JSONObject iter, String jpath) {
+//        String[] json_vals = jpath.split("\\.");
+//        for (int i = 0; i < json_vals.length; i++) {
+//            if (i + 1 >= json_vals.length)
+//                return iter.has(json_vals[i]) ? iter.get(json_vals[i]).toString() : "";
+//
+//            iter = new JSONObject(iter.get(json_vals[i]).toString());
+//        }
+//
+//        return "";
+//    }
+
+
+    //计算两个时间相差的秒数
+    public static long getTime(String startTime, String endTime) {
+        try {
+            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            long eTime = df.parse(endTime).getTime();
+            long sTime = df.parse(startTime).getTime();
+            long diff = (eTime - sTime) / 1000;
+            return diff;
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        return 0;
+    }
+
+
+    /**
+     * 生成32位随机数
+     *
+     * @return
+     */
+    public static String random32() {
+        Random rand = new Random();
+        StringBuffer sb = new StringBuffer();
+        for (int i = 1; i <= 32; i++) {
+            int randNum = rand.nextInt(9) + 1;
+            String num = randNum + "";
+            sb = sb.append(num);
+        }
+        String random = String.valueOf(sb);
+        return random;
+    }
+
+    //转义字符供getJsonValue使用
+    private static String tpath = "data.%s.";
+
+    public static String getJpath(String Name) {
+        return getJpath("", Name);
+    }
+
+    public static String getJpath(String Name, String params) {
+        return String.format(tpath, params) + Name;
+    }
+
+    //获取前端发送的json字符串
+    public static String getPostString(HttpServletRequest request) {
+        String s = "";
+
+        InputStream in = null;
+
+        BufferedInputStream bin = null;
+
+        try {
+            in = request.getInputStream();
+
+            bin = new BufferedInputStream(in);
+
+            int len = 0;
+
+            byte[] b = new byte[1024];
+
+            while ((len = bin.read(b)) != -1) {
+                s += new String(b, 0, len);
+
+            }
+
+        } catch (IOException e) {
+            e.printStackTrace();
+
+        } finally {
+            try {
+                bin.close();
+
+            } catch (IOException e) {
+                e.printStackTrace();
+
+            }
+
+            try {
+                in.close();
+
+            } catch (IOException e) {
+                e.printStackTrace();
+
+            }
+            return s;
+        }
+    }
+
+    //Authorization
+    public static HttpEntity<String> JsonToHttpEntity(JSONObject json, String... Authorization) {
+        HttpHeaders headers = new HttpHeaders();
+        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
+        headers.setContentType(type);
+        if (Authorization.length > 0) {
+            headers.add("Authorization", Authorization[0]);
+        }
+        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
+        HttpEntity<String> formEntity = new HttpEntity<String>(json.toString(), headers);
+        return formEntity;
+    }
+
+
+    public static HttpEntity<String> HttpEntity_headers(JSONObject json, HashMap<String, String> map) {
+        HttpHeaders headers = new HttpHeaders();
+        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
+        headers.setContentType(type);
+        if (map.size() > 0) {
+            for (Map.Entry entry : map.entrySet()) {
+                headers.add(entry.getKey().toString(), entry.getValue().toString());
+            }
+        }
+        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
+        HttpEntity<String> formEntity = new HttpEntity<String>(json.toString(), headers);
+        return formEntity;
+    }
+    //加密方法
+
+    /**
+     * 传入文本内容,返回 SHA-256 串
+     *
+     * @param strText
+     * @return
+     */
+    public static String SHA256(final String strText) {
+        return SHA(strText, "SHA-256");
+    }
+
+    /**
+     * 传入文本内容,返回 SHA-512 串
+     *
+     * @param strText
+     * @return
+     */
+    public static String SHA512(final String strText) {
+        return SHA(strText, "SHA-512");
+    }
+
+    /**
+     * 字符串 SHA 加密
+     *
+     * @param strType
+     * @return
+     */
+    private static String SHA(final String strText, final String strType) {
+        // 返回值
+        String strResult = null;
+
+        // 是否是有效字符串
+        if (strText != null && strText.length() > 0) {
+            try {
+                // SHA 加密开始
+                // 创建加密对象 并傳入加密類型
+                MessageDigest messageDigest = MessageDigest.getInstance(strType);
+                // 传入要加密的字符串
+                messageDigest.update(strText.getBytes());
+                // 得到 byte 類型结果
+                byte byteBuffer[] = messageDigest.digest();
+
+                // 將 byte 轉換爲 string
+                StringBuffer strHexString = new StringBuffer();
+                // 遍歷 byte buffer
+                for (int i = 0; i < byteBuffer.length; i++) {
+                    String hex = Integer.toHexString(0xff & byteBuffer[i]);
+                    if (hex.length() == 1) {
+                        strHexString.append('0');
+                    }
+                    strHexString.append(hex);
+                }
+                // 得到返回結果
+                strResult = strHexString.toString();
+            } catch (NoSuchAlgorithmException e) {
+                e.printStackTrace();
+            }
+        }
+
+        return strResult;
+    }
+
+    //用户密码加密封装
+    public static String hash_password(String password) {
+        return SHA256(SHA512(password));
+    }
+
+    public static String md5(String body) {
+        String md5 = "";
+        try {
+            md5 = DigestUtils.md5DigestAsHex(body.getBytes());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return md5;
+    }
+
+    /**
+     * 去除前后指定字符
+     *
+     * @param args   目标字符串
+     * @param beTrim 要删除的指定字符
+     * @return 删除之后的字符串
+     * 调用示例:System.out.println(trim("$$abc $","$"));
+     */
+    public static String trim(String args, char beTrim) {
+        int st = 0;
+        int len = args.length();
+        char[] val = args.toCharArray();
+        char sbeTrim = beTrim;
+        while ((st < len) && (val[st] <= sbeTrim)) {
+            st++;
+        }
+        while ((st < len) && (val[len - 1] <= sbeTrim)) {
+            len--;
+        }
+        return ((st > 0) || (len < args.length())) ? args.substring(st, len) : args;
+    }
+
+    /**
+     * MultipartFile 转 File
+     *
+     * @param file
+     * @throws Exception
+     */
+    public static File multipartFileToFile(MultipartFile file) throws Exception {
+
+        File toFile = null;
+        if (file.equals("") || file.getSize() <= 0) {
+            file = null;
+        } else {
+            InputStream ins = null;
+            ins = file.getInputStream();
+            toFile = new File(new Date().getTime() + "-" + UUID.randomUUID() + "." + file.getOriginalFilename().split("\\.")[1]);
+            inputStreamToFile(ins, toFile);
+            ins.close();
+        }
+        return toFile;
+    }
+
+    //获取流文件
+    private static void inputStreamToFile(InputStream ins, File file) {
+        try {
+            OutputStream os = new FileOutputStream(file);
+            int bytesRead = 0;
+            byte[] buffer = new byte[8192];
+            while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
+                os.write(buffer, 0, bytesRead);
+            }
+            os.close();
+            ins.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 删除本地临时文件
+     *
+     * @param file
+     */
+    public static void delteTempFile(File file) {
+        if (file != null) {
+            File del = new File(file.toURI());
+            del.delete();
+        }
+    }
+
+
+    /**
+     * 根据经纬度查询
+     *
+     * @param log
+     * @param lat
+     * @return
+     */
+    public static String getAdd(String log, String lat) {
+        //lat 小  log  大
+        //参数解释: 纬度,经度 type 001 (100代表道路,010代表POI,001代表门址,111可以同时显示前三项)
+        String urlString = "http://api.map.baidu.com/geocoder/v2/?ak=0EXAjYp9hii1DrK3Tuda8efu9vivslcX&callback=renderReverse&location=" + lat + "," + log + "&output=json&pois=1";
+        String res = "";
+        try {
+            URL url = new URL(urlString);
+            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+            conn.setDoOutput(true);
+            conn.setRequestMethod("POST");
+            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
+            String line;
+            while ((line = in.readLine()) != null) {
+                res += line + "\n";
+            }
+            in.close();
+        } catch (Exception e) {
+            System.out.println("error in wapaction,and e is " + e.getMessage());
+        }
+        System.out.println(res);
+        return res;
+    }
+
+
+    public static void main(String[] args) {
+        /*  System.out.println(getAdd(119.0478515625+"",31.5785354265+""));*/
+        //System.out.println(addressResolution("河南省仙桃市"));
+        double b = (double) 560 / 100;
+        System.out.println(b);
+        String add = CusutUtil.getAdd("119.0478515625", "31.5785354265");
+        System.out.println(add);
+    }
+
+    /**
+     * 根据url 拉取文件
+     *
+     * @param url
+     * @return
+     * @throws Exception
+     */
+    public static File getFile(String url) throws Exception {
+        File file = null;
+        try {
+            HttpURLConnection httpUrl = (HttpURLConnection) new URL(url).openConnection();
+            httpUrl.connect();
+            file = CusutUtil.inputStreamToFile(httpUrl.getInputStream(), "url.png");
+            httpUrl.disconnect();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return file;
+    }
+
+    /**
+     * 工具类
+     * inputStream 转 File
+     */
+    public static File inputStreamToFile(InputStream ins, String name) throws Exception {
+        File file = new File(System.getProperty("java.io.tmpdir") + File.separator + name);
+        if (file.exists()) {
+            return file;
+        }
+        OutputStream os = new FileOutputStream(file);
+        int bytesRead;
+        int len = 8192;
+        byte[] buffer = new byte[len];
+        while ((bytesRead = ins.read(buffer, 0, len)) != -1) {
+            os.write(buffer, 0, bytesRead);
+        }
+        os.close();
+        ins.close();
+        return file;
+    }
+
+
+    public static String isJson(String str) {
+        String result = "false";
+        if (str != null) {
+            str = str.trim();
+            if (str.startsWith("{") && str.endsWith("}")) {
+                result = "json";
+            } else if (str.startsWith("[") && str.endsWith("]")) {
+                result = "jarray";
+            }
+        }
+        return result;
+    }
+
+//    public static String jsonTOxml(JSONObject jo) {
+//        Iterator iterator = jo.keys();
+//        String xmlStr = "<xml>";
+//        while (iterator.hasNext()) {
+//            String key = (String) iterator.next();
+//            String val = jo.get(key).toString();
+//            xmlStr += "\n<" + key + ">" + val + "</" + key + ">";
+//        }
+//        return xmlStr + "\n</xml>";
+//    }
+
+    /**
+     * 方法用途: 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序),并且生成参数串<br>
+     * 实现步骤: <br>
+     *
+     * @param paraMap    要排序的Map对象
+     * @param urlEncode  是否需要URLENCODE
+     * @param keyToLower 是否需要将Key转换为全小写
+     *                   true:key转化成小写,false:不转化
+     * @return
+     */
+    public static String formatUrlMap(Map<String, String> paraMap, boolean urlEncode, boolean keyToLower) {
+        String buff = "";
+        Map<String, String> tmpMap = paraMap;
+        try {
+            List<Map.Entry<String, String>> infoIds = new ArrayList<Map.Entry<String, String>>(tmpMap.entrySet());
+            // 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)
+            Collections.sort(infoIds, new Comparator<Map.Entry<String, String>>() {
+
+                @Override
+                public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) {
+                    return (o1.getKey()).toString().compareTo(o2.getKey());
+                }
+            });
+            // 构造返回字符串键值对的格式
+            StringBuilder buf = new StringBuilder();
+            for (Map.Entry<String, String> item : infoIds) {
+                if (item.getKey() != "") {
+                    String key = item.getKey();
+                    String val = item.getValue();
+                    if (urlEncode) {
+                        val = URLEncoder.encode(val, "utf-8");
+                    }
+                    if (keyToLower) {
+                        buf.append(key.toLowerCase() + "=" + val);
+                    } else {
+                        buf.append(key + "=" + val);
+                    }
+                    buf.append("&");
+                }
+
+            }
+            buff = buf.toString();
+            if (buff.isEmpty() == false) {
+                buff = buff.substring(0, buff.length() - 1);
+            }
+        } catch (Exception e) {
+            return null;
+        }
+        return buff;
+    }
+
+    public static String getRandomString(int length) {
+
+        //1. 定义一个字符串(A-Z,a-z,0-9)即62个数字字母;
+
+        String str = "zxcvbnmlkjhgfdsaqwertyuiopQWERTYUIOPASDFGHJKLZXCVBNM1234567890";
+
+        //2. 由Random生成随机数
+
+        Random random = new Random();
+
+        StringBuffer sb = new StringBuffer();
+
+        //3. 长度为几就循环几次
+
+        for (int i = 0; i < length; ++i) {
+
+            //从62个的数字或字母中选择
+
+            int number = random.nextInt(62);
+
+            //将产生的数字通过length次承载到sb中
+
+            sb.append(str.charAt(number));
+
+        }
+        //将承载的字符转换成字符串
+        return sb.toString();
+    }
+
+}

+ 10 - 17
mjava-paineng/src/main/java/com/malk/paineng/util/HttpUtil.java

@@ -1,5 +1,5 @@
-package com.malk.paineng.util;
-import org.springframework.beans.factory.annotation.Autowired;
+package com.malk.taisen.util;
+import com.malk.taisen.configuration.RestTemplateBase;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.core.io.FileSystemResource;
 import org.springframework.http.HttpEntity;
@@ -9,6 +9,7 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.util.MultiValueMap;
 import org.springframework.web.client.RestTemplate;
 
+import javax.net.ssl.HttpsURLConnection;
 import java.io.BufferedInputStream;
 import java.io.File;
 import java.io.FileOutputStream;
@@ -38,7 +39,10 @@ public class HttpUtil {
     }
 
     public static String post(String url,String AcceptType,String body,Map<String,String> headersMap){
-        RestTemplate restTemplate = new RestTemplate();
+
+
+        HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true);
+        RestTemplate restTemplate = new RestTemplateBase().registerTemplate();
 
         HttpHeaders headers = new HttpHeaders();
         MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
@@ -57,21 +61,10 @@ public class HttpUtil {
         //指定格式
         HttpEntity<String> formEntity = new HttpEntity<String>(body, headers);
         ResponseEntity<String> stringResponseEntity = null;
-        int index = 0;
-        while (true) {
-            try {
-                stringResponseEntity = restTemplate.postForEntity(url, formEntity, String.class);
-                break;
-            } catch (Exception ex) {
-                index++;
-                if(index > 2)
-                {
-                    break;
-                }
-                continue;
-            }
-        }
+        stringResponseEntity = restTemplate.postForEntity(url, formEntity, String.class);
         return stringResponseEntity.getBody();
+
+
     }
 
 

+ 20 - 13
mjava-paineng/src/main/resources/application-dev.yml

@@ -1,8 +1,8 @@
 # 环境配置
 server:
-  port: 8110
+  port: 9090
   servlet:
-    context-path: /api/paineng
+    context-path: /api/ts
 
 
 enable:
@@ -45,19 +45,26 @@ logging:
   file:
     path: /Users/malk/server/_Tool/var/mjava/log
 
-# dingtalk
+# dingtal泰森
 dingtalk:
-  agentId: 3280128891
-  appKey: dingmpxci8bolc3jpima
-  appSecret: Y_k3jpKNHbGvb9S9As2Y61ZaUFNglm7SCqquIkcowLBRoc4ZpH7DG0ZTn8LyHMwI
-  corpId: ding6d0de5f5de58a80c35c2f4657eb6378f
+  agentId: 4105843375
+  appKey: dingszpkn6qnoaro6u67
+  appSecret: DxBcr_t1hOPxsphbrsiYcp_PCcyg-ULTXYRusI249GBR_ko2wdrjZKSEj6So0eY3
+  corpId: dinge61fe69900ea236b35c2f4657eb6378f
   aesKey:
   token:
   operator: ""   # OA管理员账号 [首字符若为0需要转一下字符串]
+ding:
+  agentId: '1782962089'
+  appKey: 'dingfnrpklgoaoynrbsw'
+  appSecret: '6FxZudtXjdYeHNQN7-Os_A-zXGF7slS7UX9d3alu9uIsK56w4gXiZN0yXPp67FDh'
+  appType: "APP_N9NPHVTQLPBPO8MR6WFG"
+  systemToken: "UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW"
+  userId: "0128190612251172008042"
+  url: "https://www.aliwork.com"
+  hanxingUrl: 'http://106.15.251.153:8095/stms_xocr/pxocr/'
+sap:
+  QA_sapUrl_Poc: https://etl-nonprod-tasks.tysondt.com:443/api/1/rest/feed/run/task/TysonNonProd/Ultra_PoC/10-QA-team-fssc/tk_oa_to_sap_p2p?bearer_token=bBiGTA7PS0JJ6wKhQU8Vm0vLsIDNjLaN&interface_id=
 
-
-#SqlServer
-sqlserver:
-  url: jdbc:sqlserver://58.246.128.122:2433;databaseName=lanyun
-  username: sa
-  password: "!lanyunnc@2023#"
+hangxing:
+  TARGET_URL_Poc: http://139.224.3.140:8091/stms/openapi/income/bookkeeping

+ 56 - 0
mjava-ts/src/main/resources/application-prod.yml

@@ -0,0 +1,56 @@
+# 环境配置
+server:
+  port: 9090
+  servlet:
+    context-path: /api/ts
+
+enable:
+  scheduling: true
+
+# condition
+spel:
+  scheduling: true        # 定时任务是否执行
+  multiSource: false      # 是否多数据源配置
+
+nc:
+  scheduling: true        # 定时任务是否执行
+  multiSource: false      # 是否多数据源配置
+
+spring:
+  # database
+  datasource:
+    hikari:
+      connection-init-sql: SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci           # SqlServer, Oracle 无需设置类型
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    username: root
+    password: 123456
+    url: jdbc:mysql://58.247.23.192:3306/paineng?serverTimezone=GMT%2B8
+  jpa:
+    database: MYSQL
+    database-platform: org.hibernate.dialect.MySQL57Dialect
+
+
+# dingtal泰森
+dingtalk:
+  agentId: 4105843375
+  appKey: dingszpkn6qnoaro6u67
+  appSecret: DxBcr_t1hOPxsphbrsiYcp_PCcyg-ULTXYRusI249GBR_ko2wdrjZKSEj6So0eY3
+  corpId: dinge61fe69900ea236b35c2f4657eb6378f
+  aesKey:
+  token:
+  operator: ""   # OA管理员账号 [首字符若为0需要转一下字符串]
+ding:
+  agentId: '1782962089'
+  appKey: 'dingfnrpklgoaoynrbsw'
+  appSecret: '6FxZudtXjdYeHNQN7-Os_A-zXGF7slS7UX9d3alu9uIsK56w4gXiZN0yXPp67FDh'
+  appType: "APP_N9NPHVTQLPBPO8MR6WFG"
+  systemToken: "UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW"
+  userId: "0128190612251172008042"
+  url: "https://www.aliwork.com"
+  hanxingUrl: 'http://106.15.251.153:8095/stms_xocr/pxocr/'
+
+sap:
+  QA_sapUrl_Poc: https://etl-nonprod-tasks.tysondt.com:443/api/1/rest/feed/run/task/TysonNonProd/Ultra_PoC/10-QA-team-fssc/tk_oa_to_sap_p2p?bearer_token=bBiGTA7PS0JJ6wKhQU8Vm0vLsIDNjLaN&interface_id=
+
+hangxing:
+  TARGET_URL_Poc: http://139.224.3.140:8091/stms/openapi/income/bookkeeping

+ 295 - 0
mjava-ts/src/test/java/test.java

@@ -0,0 +1,295 @@
+import cn.hutool.json.JSONArray;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.malk.kepeida.Boot;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.server.dingtalk.DDR_New;
+import com.malk.service.aliwork.YDClient;
+import com.malk.service.aliwork.YDService;
+import com.malk.service.dingtalk.DDClient;
+import com.malk.taisen.util.CusutUtil;
+import com.malk.taisen.util.HttpUtil;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.web.client.RestTemplate;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.*;
+
+@Slf4j
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = Boot.class)
+public class test {
+
+    @Autowired
+    private YDClient ydClient;
+
+    @Autowired
+    private YDService ydService;
+    @Autowired
+    private DDClient ddClient;
+    /**
+     * 测试地址
+     */
+    String QA_sapUrl = "https://etl-nonprod-tasks.tysondt.com:443/api/1/rest/feed/run/task/TysonNonProd/Ultra_PoC/10-QA-team-fssc/tk_oa_to_sap_p2p?bearer_token=bBiGTA7PS0JJ6wKhQU8Vm0vLsIDNjLaN&interface_id=";
+
+    @Test
+    public void testService() {
+        System.out.println("sdafasdfas");
+
+
+        ////////////1920000006
+
+        YDParam ydParam = _getYDTokenKPD();
+        ydParam.setFormInstanceId("045e8b98-3e82-4569-b5ea-c22def5170bd");
+        DDR_New ddr = ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_id);
+        Map dataForm = ddr.getFormData();
+
+        String voucherNumber = "1920000006";
+        try {
+
+            if (dataForm.get("selectField_mejfoona").equals("发票支付")) {//勾选发票处理
+                String nowDate = CusutUtil.getNowDate();
+                List<Map<String, Object>> requestList = new ArrayList<>();
+                Map<String, Object> request = new LinkedHashMap<>();
+                JSONArray invoices = new JSONArray();
+                ArrayList<String> ids = new ArrayList<>();
+                request.put("voucherNumber", voucherNumber);
+                request.put("voucherstatus", "0");
+                request.put("voucherdate", nowDate);
+                request.put("applytime", nowDate);
+                request.put("bookeepflag", "1");
+                request.put("syssource", "第三方系统规定");
+                List<Map> list = new ArrayList<>();
+
+                List<Map<String, Object>> tableFils = (List<Map<String, Object>>) dataForm.get("tableField_l6ujr47b");
+                if (tableFils != null && tableFils.size() > 0) {
+                    list = (List<Map>) dataForm.get("tableField_l6ujr47b");
+                    for (int n = 0; n < tableFils.size(); n++) {
+
+                        Map<String, Object> row = new HashMap(tableFils.get(n));
+                        Map<Object, Object> invoice = new LinkedHashMap<>();
+//                                String substring = row.getString("associationFormField_l6yglav7_id").replaceAll("\\\\", "").substring(1);
+                        String instanceId = row.get("textField_mi1l1tcc").toString();
+
+                        Map formdata = ydClient.queryData(YDParam.builder()
+                                .appType("APP_N9NPHVTQLPBPO8MR6WFG")
+                                .systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW")
+                                .formUuid("FORM-4J7669A1Z1X22RIL61LB7AOXGRX82OHP45U6L51")
+                                .formInstanceId(instanceId)
+                                .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+                        if (formdata != null) {
+                            ids.add(instanceId);
+                            JSONObject jsonObject = new JSONObject();
+                            invoice.put("taxno", formdata.get("textField_l6u55vdn"));
+                            if (formdata.get("textField_l6u55vd8").toString().contains("全电")) {
+                                invoice.put("invoicecode", "全电发票");
+                            } else {
+                                invoice.put("invoicecode", formdata.get("textField_l6u55vd9"));
+                            }
+                            invoice.put("invoicenumber", formdata.get("textField_l6u55vd3"));
+                            invoice.put("usetax", formdata.get("textField_l6vu65fs").toString());
+                            try {
+                                if (!formdata.containsKey("textField_l6vvuq3f") || formdata.get("textField_l6vvuq3f").equals("")) {
+                                    formdata.remove("textField_l6vvuq3f");
+                                    formdata.put("textField_l6vvuq3f", "0");
+                                }
+                                invoice.put("taxrate", Double.parseDouble(formdata.get("textField_l6vvuq3f").toString().substring(0, formdata.get("textField_l6vvuq3f").toString().lastIndexOf("%"))) / 100);
+                            } catch (Exception ex) {
+                                try {
+                                    invoice.put("taxrate", Double.parseDouble(formdata.get("textField_l6vvuq3f").toString()) / 100);
+                                } catch (Exception ex2) {
+                                    invoice.put("taxrate", 0);
+                                }
+                            }
+                            invoice.put("autodeduct", "1");
+                            invoice.put("oper", "1");
+                            jsonObject.toString();
+                            invoices.put(invoice);
+                            request.put("invoices", invoices);
+                        }
+
+                    }
+
+
+                    requestList.add(request);
+                    String jsonBody = new ObjectMapper().writeValueAsString(requestList);
+                    System.out.println(jsonBody.toString());
+                    RestTemplate restTemplate = new RestTemplate();
+                    String PROXY_URL = "https://28356641.r38.cpolar.top/api/ts/bookkeeping";
+                    HttpHeaders headers = new HttpHeaders();
+                    headers.setContentType(MediaType.APPLICATION_JSON);
+                    ResponseEntity<String> response = restTemplate.postForEntity(
+                            PROXY_URL,
+                            new HttpEntity<>(jsonBody, headers),
+                            String.class
+                    );
+
+                    //   String post_GX = HttpUtil.post("https://28356641.r38.cpolar.top/api/ts/bookkeeping", null, jsonBody.toString(), null);
+                    // if (!"".equals(post_GX)) {
+                    //  System.out.println(CusutUtil.unicodeDecode(post_GX));
+                    //  log.info("post_GX:" + CusutUtil.unicodeDecode(post_GX));
+
+                    String responseBody = response.getBody();
+                    try {
+                        ObjectMapper objectMapper = new ObjectMapper();
+                        JsonNode rootNode = objectMapper.readTree(responseBody);
+                        ArrayList<Map<String, String>> maps_YD = new ArrayList<>();
+                        // 获取 data 数组
+                        JsonNode dataArray = rootNode.get("data");
+                        // 循环遍历 data 数组
+                        if (dataArray.isArray()) {
+
+                            for (int i = 0; i < list.size(); i++) {
+                                Map sss2 = (Map) list.get(i);
+                                String pd = (String) sss2.get("selectField_mgz2tut4");
+                                for (JsonNode dataItem : dataArray) {
+                                    String returnMsg = dataItem.get("returnmsg").asText();
+                                    String invoicenumber = dataItem.get("invoicenumber").asText();
+                                    if (invoicenumber.equals(sss2.get("textField_l6ujr47c")) && !returnMsg.equals("未同步到该发票信息,请先进行同步发票操作!")) {
+                                        pd = "已勾选";
+                                    } else {
+                                        pd = "不相关";
+                                    }
+                                }
+                                sss2.put("selectField_mgz2tut4", pd);
+                                maps_YD.add(sss2);
+                            }
+                            Map map = new HashMap();
+                            map.put("tableField_l6ujr47b", maps_YD);
+                            ydClient.operateData(YDParam.builder()
+                                    .formInstId("045e8b98-3e82-4569-b5ea-c22def5170bd")
+                                    .updateFormDataJson(JSON.toJSONString(map))
+                                    .build(), YDConf.FORM_OPERATION.update);
+
+                        }
+
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+
+
+                }
+
+
+            }
+
+        } catch (Exception ex) {
+
+        }
+
+
+    }
+
+    public void shareRecord(String processInstanceId, Map data) {
+
+        //开始抓取宜搭对应的子表数据
+        String mapss = null;
+        ArrayList<Map<String, String>> maps_YD = new ArrayList<>();
+//        cn.hutool.json.JSONArray jsonArray_YDZB =null;
+        DDR_New ddrNew1 = ydClient.queryData(YDParam.builder().formInstanceId(processInstanceId).build()
+                , YDConf.FORM_QUERY.retrieve_id);
+        Map data1 = ddrNew1.getFormData();
+        List<Map> list = new ArrayList<>();
+        if (data1.get("tableField_m2cx8zh5") != null) {
+            list = (List<Map>) data1.get("tableField_m2cx8zh5");
+        }
+//         jsonArray_YDZB = new cn.hutool.json.JSONArray(mapss);
+        Map sss = new HashMap<>();
+        sss.put("employeeField_m2cx8zh6", data.get("atUserId").toString().split(","));
+        sss.put("textareaField_m2cx8zh7", data.get("content"));
+        //原有数据
+        for (int i = 0; i < list.size(); i++) {
+            Map sss2 = new HashMap();
+            Map map = (Map) list.get(i);
+//            List<Map>  user = (List<Map>) ;
+            sss2.put("employeeField_m2cx8zh6", map.get("employeeField_m2cx8zh6_id"));
+
+            sss2.put("textareaField_m2cx8zh7", map.get("textareaField_m2cx8zh7"));
+            maps_YD.add(sss2);
+        }
+        maps_YD.add(sss);//新增数据
+
+        Map map = new HashMap();
+        map.put(UtilMap.getString(data, "compId"), UtilMap.getList(data, "userIds"));
+        map.put("tableField_m2cx8zh5", maps_YD);
+
+        ydClient.operateData(YDParam.builder()
+                .formInstId(processInstanceId)
+                .updateFormDataJson(JSON.toJSONString(map))
+                .build(), YDConf.FORM_OPERATION.update);
+
+
+    }
+
+    public YDParam _getYDTokenKPD() {
+        /**
+         * 泰森付款
+         */
+        return YDParam.builder()
+                .appType("APP_N9NPHVTQLPBPO8MR6WFG")
+                .systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW")
+                .build();
+    }
+
+    /**
+     * 泰森付款  人员档案表
+     */
+    public static YDParam _getYDTokenZXXZ(String searchFieldJson) {
+        return YDParam.builder()
+                .appType("APP_N9NPHVTQLPBPO8MR6WFG")
+                .systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW")
+                .formUuid("FORM-4J7669A10FO250UJ9C6Q7CM00PC62YPW8DD6LT")
+                .searchFieldJson(searchFieldJson)
+                .build();
+    }
+
+
+    //匹配条件用
+    private static final String KEY = "key";
+    private static final String VALUE = "value";
+    private static final String TYPE = "type";
+    private static final String OPERATOR = "operator";
+    private static final String COMPONENT_NAME = "componentName";
+
+    private static Map<String, Object> buildCondition(
+            String key, Object value, String type, String operator, String componentName) {
+        Map<String, Object> condition = new HashMap<>();
+        condition.put(KEY, key);
+        condition.put(VALUE, value);
+        condition.put(TYPE, type);
+        condition.put(OPERATOR, operator);
+        condition.put(COMPONENT_NAME, componentName);
+        return condition;
+    }
+
+
+}
+
+
+//import org.apache.commons.text.similarity.LevenshteinDistance;
+//
+//public class FuzzyDistanceExample {
+//    public static void main(String[] args) {
+//        String str1 = "example";
+//        String str2 = "samples";
+//
+//
+//        int distance = LevenshteinDistance.getDefaultInstance().apply(str1, str2);
+//
+//        System.out.println("The fuzzy distance between '" + str1 + "' and '" + str2 + "' is: " + distance);
+//    }
+//}

+ 1 - 1
mjava/pom.xml

@@ -3,7 +3,7 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
-        <artifactId>java-mcli</artifactId>
+        <artifactId>java-ts</artifactId>
         <groupId>com.malk</groupId>
         <version>1.0-SNAPSHOT</version>
     </parent>

+ 2 - 1
mjava/src/main/java/com/malk/delegate/DDEvent.java

@@ -1,5 +1,6 @@
 package com.malk.delegate;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
 import org.springframework.scheduling.annotation.Async;
 
 /**
@@ -29,7 +30,7 @@ public interface DDEvent {
 
     // 审批实例回调执行业务逻辑
     @Async
-    void executeEvent_Instance_Finish(String processInstanceId, String processCode, boolean isAgree, boolean isTerminate, String staffId);
+    void executeEvent_Instance_Finish(String processInstanceId, String processCode, boolean isAgree, boolean isTerminate, String staffId)  ;
 
     @Async
     void executeEvent_Instance_Start(String processInstanceId, String processCode);

+ 1 - 1
mjava/src/main/java/com/malk/server/dingtalk/DDFormComponentDto.java

@@ -47,7 +47,7 @@ public class DDFormComponentDto {
         Map<String, String> ruleDetail = detailRule;
         List<DDFormComponentDto> formComponentValues = new ArrayList<>();
         for (String key : formRule.keySet()) {
-            if (formData.get(key) instanceof List) {
+            if (formData.get(key) instanceof List && !key.equals("employeeField_mektp0zu_id")) {
                 // 明细组件: 每一个组件都是集合, table为集合嵌套集合
                 List<List<DDFormComponentDto>> formComponentDetailsValues = new ArrayList<>();
                 List<Map> details = (List<Map>) formData.get(key);

+ 1 - 0
mjava/src/main/java/com/malk/service/dingtalk/impl/DDImplClient_Workflow.java

@@ -36,6 +36,7 @@ public class DDImplClient_Workflow implements DDClient_Workflow {
         Map body = UtilMap.map("originator_user_id, process_code, form_component_values", originatorUserId, processCode, formComponentValues);
         body.putAll(body_ext);
         DDR ddr = DDR.doPost("https://oapi.dingtalk.com/topapi/processinstance/create", header, DDConf.initTokenParams(access_token), body);
+        log.info("ddr, {}", ddr);
         return ddr.getProcessInstanceId();
     }
 

+ 2 - 2
pom.xml

@@ -5,13 +5,13 @@
     <modelVersion>4.0.0</modelVersion>
 
     <groupId>com.malk</groupId>
-    <artifactId>java-mcli</artifactId>
+    <artifactId>java-ts</artifactId>
     <version>1.0-SNAPSHOT</version>
 
     <modules>
         <module>mjava</module>
 
-        <module>mjava-paineng</module>
+        <module>mjava-ts</module>
 
     </modules>
     <packaging>pom</packaging>