Browse Source

项目迁移

pruple_boy 10 months ago
commit
2cf4509e46
25 changed files with 3038 additions and 0 deletions
  1. 42 0
      .gitignore
  2. 0 0
      README.md
  3. 93 0
      mjava-ruisi/pom.xml
  4. 16 0
      mjava-ruisi/src/main/java/com/malk/ruisi/MjavaRuisiApplication.java
  5. 40 0
      mjava-ruisi/src/main/java/com/malk/ruisi/constant/QysConstant.java
  6. 41 0
      mjava-ruisi/src/main/java/com/malk/ruisi/controller/QysApiTestController.java
  7. 292 0
      mjava-ruisi/src/main/java/com/malk/ruisi/controller/QysHuiDaoController.java
  8. 95 0
      mjava-ruisi/src/main/java/com/malk/ruisi/controller/RsQysController.java
  9. 163 0
      mjava-ruisi/src/main/java/com/malk/ruisi/controller/ScheduleTask.java
  10. 23 0
      mjava-ruisi/src/main/java/com/malk/ruisi/entity/RsQysConfigInfo.java
  11. 18 0
      mjava-ruisi/src/main/java/com/malk/ruisi/service/QysApiService.java
  12. 30 0
      mjava-ruisi/src/main/java/com/malk/ruisi/service/QysService.java
  13. 30 0
      mjava-ruisi/src/main/java/com/malk/ruisi/service/RsQysService.java
  14. 15 0
      mjava-ruisi/src/main/java/com/malk/ruisi/service/dingshiqi.java
  15. 147 0
      mjava-ruisi/src/main/java/com/malk/ruisi/service/impl/QysApiServiceImpl.java
  16. 92 0
      mjava-ruisi/src/main/java/com/malk/ruisi/service/impl/QysServiceImpl.java
  17. 1314 0
      mjava-ruisi/src/main/java/com/malk/ruisi/service/impl/RsQysServiceImpl.java
  18. 338 0
      mjava-ruisi/src/main/java/com/malk/ruisi/service/impl/dingshiqiImpl.java
  19. 38 0
      mjava-ruisi/src/main/resources/application-dev.yml
  20. 0 0
      mjava-ruisi/src/main/resources/application-prod.yml
  21. 15 0
      mjava-ruisi/src/main/resources/application.yml
  22. 61 0
      mjava-ruisi/src/main/resources/logback-spring.xml
  23. 13 0
      mjava-ruisi/src/test/java/com/malk/ruisi/MjavaRuisiApplicationTests.java
  24. 107 0
      mjava-ruisi/src/test/java/com/malk/ruisi/test.java
  25. 15 0
      pom.xml

+ 42 - 0
.gitignore

@@ -0,0 +1,42 @@
+# IntelliJ project files
+.idea
+*.iml
+out
+gen
+### Java template
+# Compiled class file
+*.class
+
+# Log file
+*.log
+/log/
+
+# BlueJ files
+*.ctxt
+
+# Mobile Tools for Java (J2ME)
+.mtj.tmp/
+
+# Package Files #
+*.jar
+*.war
+*.nar
+*.ear
+*.zip
+*.tar.gz
+*.rar
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+
+mvnw
+mvnw.cmd
+
+# tmp file
+.tmp
+*/tmp
+*/target
+
+# web2 file
+*/src/main/resources/static/web
+*/src/main/resources/static/mjs

+ 0 - 0
README.md


+ 93 - 0
mjava-ruisi/pom.xml

@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.2.0.RELEASE</version> <!-- 使用最新的稳定版或其他适用版本 -->
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+
+    <groupId>com.malk.ruisi</groupId>
+    <artifactId>mjava-ruisi</artifactId>
+    <version>1.0-SNAPSHOT</version>
+<!--    <name>mjava-ruisi</name>-->
+<!--    <description>mjava-ruisi</description>-->
+
+    <dependencies>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.8.9</version> <!-- 检查最新版本 -->
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.malk</groupId>
+            <artifactId>base</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
+
+
+    <dependencyManagement>
+        <dependencies>
+            <!-- SpringBoot 依赖 -->
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-dependencies</artifactId>
+                <version>2.2.13.RELEASE</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+
+    <build>
+        <finalName>ruisi</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <encoding>UTF-8</encoding>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <executable>true</executable>
+                    <includeSystemScope>true</includeSystemScope>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <properties>
+        <java.version>1.8</java.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <spring-boot.version>2.6.13</spring-boot.version>
+    </properties>
+
+</project>

+ 16 - 0
mjava-ruisi/src/main/java/com/malk/ruisi/MjavaRuisiApplication.java

@@ -0,0 +1,16 @@
+package com.malk.ruisi;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication(scanBasePackages = {"com.malk"})
+public class MjavaRuisiApplication {
+
+    public static void main(String[] args) {
+        try {
+            SpringApplication.run(MjavaRuisiApplication.class,args);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+}

+ 40 - 0
mjava-ruisi/src/main/java/com/malk/ruisi/constant/QysConstant.java

@@ -0,0 +1,40 @@
+package com.malk.ruisi.constant;
+
+import com.malk.ruisi.entity.RsQysConfigInfo;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class QysConstant {
+
+    public static Map<String,Map<String, RsQysConfigInfo>> QYS_CONFIG_DATA=new HashMap();// 契约锁密钥配置
+
+    public static String QYS_SUCCESS_CODE="0";
+
+    public static String QYS_API_SEALLIST="/seal/innercompany/seallist";
+
+    public static String QYS_API_CREATEBYFILE="/v2/document/createbyfile";
+
+    public static String QYS_API_MULTIPLE="/seal/apply/multiple";
+
+    public static String QYS_API_CREATEBYCATEGORY="/contract/createbycategory";
+
+    public static String QYS_API_DETAIL="/seal/detail";
+
+    public static String QYS_API_PRESIGNURL="/contract/presignurl";
+
+    public static String QYS_API_SIGNURL="/contract/signurl";
+
+    public static String QYS_API_CONTRACT_DETAIL="/contract/detail";
+
+    public static String QYS_API_SEND="/contract/send";
+
+    public static String QYS_API_CATEGORIES="/contract/categories";
+
+    public static String QYS_API_SEALBYCATEGORY="/seal/apply/mulitipleByCategory";
+
+    public static String QYS_API_LEGALPERSONSIGN="/v2/contract/legalpersonsign";
+
+    public static String QYS_API_DOWNLOAD="/contract/download";
+
+}

+ 41 - 0
mjava-ruisi/src/main/java/com/malk/ruisi/controller/QysApiTestController.java

@@ -0,0 +1,41 @@
+package com.malk.ruisi.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.malk.ruisi.service.QysApiService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+
+/***
+ * 测试契约锁
+ */
+@RestController
+@Slf4j
+@RequestMapping("/qys/")
+public class QysApiTestController {
+    @Autowired
+    private QysApiService qysApiService;
+
+    @PostMapping("test")
+    public JSONObject testJSon(@RequestBody() JSONObject param){
+        log.info("JSON格式请求参数:{}",param);
+        try {
+            Map data=(Map) param.get("data");
+            String url=String.valueOf(param.get("url"));
+            boolean isPost=(Boolean) param.get("isPost");
+            if(isPost){
+                return qysApiService.sendPost(data,url);
+            }else {
+                return qysApiService.sendGet(data,url,false);
+            }
+        } catch (Exception apiException) {
+            return new JSONObject().fluentPut("msg","失败");
+        }
+    }
+    @GetMapping("/hello")
+    public String hello(){
+        return "Hello World!!!";
+    }
+}

+ 292 - 0
mjava-ruisi/src/main/java/com/malk/ruisi/controller/QysHuiDaoController.java

@@ -0,0 +1,292 @@
+package com.malk.ruisi.controller;
+
+
+import cn.hutool.http.HttpUtil;
+import cn.hutool.json.ObjectMapper;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.malk.ruisi.service.RsQysService;
+import com.malk.ruisi.service.dingshiqi;
+import com.malk.ruisi.service.impl.dingshiqiImpl;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.server.common.McException;
+import com.malk.server.common.McR;
+import com.malk.server.dingtalk.DDConf;
+import com.malk.service.aliwork.YDClient;
+import com.malk.service.dingtalk.DDClient;
+import com.malk.utils.UtilHttp;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringEscapeUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.UrlResource;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.*;
+
+@RestController
+@Slf4j
+@RequestMapping("/qys")
+public class QysHuiDaoController {
+    @Autowired
+    private RsQysService qysService;
+    @Autowired
+    private YDClient ydClient;
+    @Autowired
+    private YDConf ydConf;
+    @Autowired
+    private DDConf ddConf;
+    @Autowired
+    private DDClient ddClient;
+    @PostMapping("/person")
+    //传入实例Id获取实例数据
+    public McR person(@RequestBody Map map) throws Exception {
+        log.info("param:{}", map);
+        List<String> list = (List<String>) map.get("formInstanceId");
+        List<String> result = new ArrayList<>();
+        for (String s : list) {
+            Map formData = (Map) ydClient.queryData(YDParam.builder().formInstId(s)
+                    .appType(ydConf.getAppType()).systemToken(ydConf.getSystemToken())
+                    .userId(ddConf.getOperator()).build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+            log.info("formData:{}", formData);
+
+            List<String> aa2 = (List<String>) formData.get("employeeField_lwr509pq");
+            System.out.println(aa2);
+            //用for循环遍历一下aa2集合
+            result.addAll(aa2);
+        }
+        Set<String> result1 = new HashSet<>(result);
+        List<Map> r = new ArrayList<>();
+        for (String s1 : result1) {
+            Map<String, String> name1 = new HashMap<>();
+            int start = s1.indexOf('(');
+            int end = s1.indexOf(')');
+            if (start != -1 && end != -1) {
+                String name = s1.substring(0, start);
+                String id = s1.substring(start + 1, end);
+                name1.put("label", name);
+                name1.put("value", id);
+            }
+            r.add(name1);
+        }
+        return McR.success(r);
+    }
+    @GetMapping("/test1" )
+    public String test1() throws Exception {
+//        List<Map> list = (List<Map>) ydClient.queryData(YDParam.builder().formUuid("FORM-5DB656AF0F0E4EFA85A4739D55C23ED85BXO")
+//                .searchFieldJson(JSONObject.toJSONString(UtilMap.map("serialNumberField_lvz8coae", "HT02-KJLHEYY-202407240029")))
+//                .build(), YDConf.FORM_QUERY.retrieve_list).getData();
+        Map data = (Map) ydClient.queryData(YDParam.builder().formInstId("6a1ca03a-1d9c-4906-a328-881741543db8")
+                .appType(ydConf.getAppType()).systemToken(ydConf.getSystemToken())
+                .userId(ddConf.getOperator()).build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+        System.out.println("qaqqaq------------"+data);
+        String json = data.get("associationFormField_lvz8coby"+"_id").toString();
+        System.out.println("zzzz==========="+json);
+        String s = StringEscapeUtils.unescapeJava(json.substring(1, json.length() - 1));
+        List<Map> list1 = (List<Map>) JSONArray.parse(s);
+        for (Map map2 : list1) {
+            JSONObject auths = new JSONObject();
+            String subTitle = (String) map2.get("instanceId");
+            Map data1 = (Map) ydClient.queryData(YDParam.builder().formInstId(subTitle)
+                    .appType(ydConf.getAppType()).systemToken(ydConf.getSystemToken())
+                    .userId(ddConf.getOperator()).build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+            System.out.println("niu==================="+data1);
+            String aa = (String) data1.get("textField_lwywohh0");
+            String aa1 = (String) data1.get("textField_lw6aecve");
+//            String aa2 = (String) data1.get("employeeField_lwr509pq_id");
+            ArrayList<Object> objects = new ArrayList<>();
+            Map hashMap = new HashMap();
+            hashMap.put("mobile",aa);
+            objects.add(hashMap);
+            auths.put("sealName", aa1);//印章名称
+            auths.put("count", 3);//授权数量
+            auths.put("users", objects);
+            System.out.println("qaq"+auths);
+//            System.out.println("qqqq"+subTitle);
+        }
+//        System.out.println("sssss======"+list1);
+//        log.info("list:{}", list);
+//        Map map = list.get(0);
+//        Map formData = (Map) map.get("formData");
+//        String json1 = formData.get("associationFormField_lvz8coby"+"_id").toString();
+//        System.out.println("zzzz"+json1);
+//        String s1 = StringEscapeUtils.unescapeJava(json.substring(1, json.length() - 1));
+//        List<Map> list2 = (List<Map>) JSONArray.parse(s1);
+//        System.out.println("zzzz"+list1);
+//        for (Map map1 : list1) {
+//            JSONObject auths = new JSONObject();
+//
+//            Object subTitle = map1.get("title");
+//            ArrayList<Object> objects = new ArrayList<>();
+//            auths.put("sealName", subTitle);//印章名称
+//            auths.put("count", 3);//授权数量
+//            System.out.println("qaq"+auths);
+//            System.out.println("qqqq"+subTitle);
+//        }
+return "success";
+    }
+    @GetMapping("/test2")
+    public String test2() throws Exception {
+        dingshiqiImpl dingshiqi = new dingshiqiImpl();
+//        String sn = param.get("sn");
+//        String[] sns = sn.split("-");
+//        Map<String, String> formUuid = getFormUuid(sns[0]);
+        List<Map> list1 = (List<Map>) ydClient.queryData(YDParam.builder().formUuid("FORM-5DB656AF0F0E4EFA85A4739D55C23ED85BXO")
+                .searchFieldJson(JSONObject.toJSONString(UtilMap.map("serialNumberField_lvz8coae", "HT02-KJLHEYY-202408090037")))
+                .build(), YDConf.FORM_QUERY.retrieve_list).getData();
+        Map map = list1.get(0);
+        String instanceId = (String) map.get("formInstanceId");
+        Map param2 = new HashMap();
+        param2.put("x-acs-dingtalk-access-token", dingshiqi.getAccessToken_PJSS());
+        Map body3 = new HashMap();
+        body3.put("appType","APP_VCTRP6227CC8368NDOID");
+        body3.put("systemToken","5H9662C1X8XJLFFCE841M5VBEBQ73DM5IBPULPI3");
+        body3.put("processInstanceId", instanceId);
+        body3.put("userId","13810479803");
+        boolean flag=true;
+        do {
+            String s = UtilHttp.doGet("https://api.dingtalk.com/v1.0/yida/processes/operationRecords", param2, (Map<String, Object>) body3);
+            JSONObject obj=JSONObject.parseObject(s);
+            JSONArray arr = obj.getJSONArray("result");
+            for (int i = 0; i < arr.size(); i++) {
+                JSONObject json = arr.getJSONObject(i);
+                flag=false;
+//                if(json.getString("operatorUserId").equals("13810479803")&&json.getString("type").equals("TODO")){
+                    try {
+                        taskExecute("0f3433c2-f9db-40ab-929b-3e8119d66c84",json.getString("taskId"));
+                    }catch (McException e){
+                        log.error("taskExecute error:{}",e.getMessage());
+                    }
+
+                    flag=true;
+                    break;
+
+//                }
+            }
+        }while (flag);
+        return "success";
+    }
+//    @GetMapping("/test" )
+//    public String test() throws Exception {
+//        dingshiqiImpl dingshiqi = new dingshiqiImpl();
+//        List<Map> list = (List<Map>) ydClient.queryData(YDParam.builder().formUuid("FORM-5DB656AF0F0E4EFA85A4739D55C23ED85BXO")
+//                .searchFieldJson(JSONObject.toJSONString(UtilMap.map("serialNumberField_lvz8coae", "HT02-KJLHEYY-202408090036")))
+//                .build(), YDConf.FORM_QUERY.retrieve_list).getData();
+//        log.info("list:{}", list);
+//        Map map = list.get(0);
+//        String instanceId = (String) map.get("formInstanceId");
+//        Map formData = (Map) map.get("formData");
+//        String lss = formData.toString();
+//        String json = formData.get("associationFormField_lzaq7kz8_id").toString();
+//        String s = StringEscapeUtils.unescapeJava(json.substring(1, json.length() - 1));
+//        List<Map> list1 = (List<Map>) JSONArray.parse(s);
+//        System.out.println("zzzz"+list1);
+//        for (Map map1 : list1) {
+//            Object subTitle = map1.get("subTitle");
+//            System.out.println("qqqq"+subTitle);
+//        }
+//
+////        List<String> subTitleValues = getSubTitles(formData);
+//        Map param2 = new HashMap();
+//        param2.put("x-acs-dingtalk-access-token", dingshiqi.getAccessToken_PJSS());
+//        System.out.println("x-acs-dingtalk-access-token"+ddClient.getAccessToken());
+//        Map body3 = new HashMap();
+////        body3.put("outResult","AGREE");
+//        body3.put("appType","APP_VCTRP6227CC8368NDOID");
+//        body3.put("systemToken","5H9662C1X8XJLFFCE841M5VBEBQ73DM5IBPULPI3");
+////        body3.put("remark","同意");
+//        body3.put("processInstanceId", instanceId);
+//        body3.put("userId","13810479803");
+//        boolean flag=true;
+//        do {
+//            String s = UtilHttp.doGet("https://api.dingtalk.com/v1.0/yida/processes/operationRecords", param2, (Map<String, Object>) body3);
+//            System.out.println("555"+s);
+//            JSONObject obj=JSONObject.parseObject(s);
+//            JSONArray arr = obj.getJSONArray("result");
+//            for (int i = 0; i < arr.size(); i++) {
+//                JSONObject json = arr.getJSONObject(i);
+//                flag=false;
+//                if(json.getString("operatorUserId").equals("13810479803")&&json.getString("type").equals("TODO")){
+//                    taskExecute(instanceId,json.getString("taskId"));
+//                    flag=true;
+//                    break;
+//                }
+//            }
+//        }while (flag);
+//        return "success";
+//    }
+    private void taskExecute(String instanceId,String taskId){
+        Map param3 = new HashMap();
+        param3.put("x-acs-dingtalk-access-token",new dingshiqiImpl().getAccessToken_PJSS());
+        Map body4 = new HashMap();
+        body4.put("outResult","AGREE");
+        body4.put("appType","APP_VCTRP6227CC8368NDOID");
+        body4.put("systemToken","5H9662C1X8XJLFFCE841M5VBEBQ73DM5IBPULPI3");
+        body4.put("remark","同意");
+        body4.put("taskId",taskId);
+        body4.put("processInstanceId", instanceId);
+        body4.put("userId","13810479803");
+        String s1 = UtilHttp.doPost("https://api.dingtalk.com/v1.0/yida/tasks/execute", param3,null, (Map<String, Object>) body4);
+        System.out.println("result"+s1);
+    }
+    /***
+     * 第三步
+     * 契约锁签署完成回调、保存文件
+     * @return
+     */
+    @PostMapping("/callback")
+    public String  callback(@RequestParam Map<String, String> param) throws Exception {
+        log.info("callback:{}", param);
+
+        //1.content解析为json字符   并获得contractId
+        //2.根据contractId 获取附件到本地获得一个本地地址  接口:/contract/download zip保存到本地   并解压zip
+
+        //3.根据contractId查询对应的数据实例ID,根据实例ID把本地地址对的文件传到对应的 附件签署后
+
+        //("attachmentField_ltsbweit",文件)
+        return qysService.callback(param);
+    }
+    @PostMapping("/callback1")
+    public String  callback1(@RequestParam Map<String, String> param) throws Exception {
+        log.info("callback:{}", param);
+
+        return qysService.callback1(param);
+    }
+
+    private static final String FILE_DIRECTORY = "/home/server/ruisi_qys/ruisi_qiyuesuo/fils_new/";
+
+    @GetMapping("/download/{sn}/{fileName}")
+    public ResponseEntity<Resource> downloadFile(@PathVariable String fileName,@PathVariable String sn) {
+        Path filePath = Paths.get(FILE_DIRECTORY.concat(sn.concat("//"))).resolve(fileName).normalize();
+        try {
+            Resource resource = new UrlResource(filePath.toUri());
+            if (resource.exists()) {
+                HttpHeaders headers = new HttpHeaders();
+                headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + resource.getFilename());
+                return ResponseEntity.ok()
+                        .headers(headers)
+                        .contentType(MediaType.parseMediaType("application/octet-stream"))
+                        .body(resource);
+            } else {
+                return ResponseEntity.notFound().build();
+            }
+        } catch (MalformedURLException e) {
+            return ResponseEntity.notFound().build();
+        } catch (IOException e) {
+            return ResponseEntity.notFound().build();
+        }
+    }
+}
+
+
+

+ 95 - 0
mjava-ruisi/src/main/java/com/malk/ruisi/controller/RsQysController.java

@@ -0,0 +1,95 @@
+package com.malk.ruisi.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.malk.ruisi.service.RsQysService;
+import com.malk.server.common.McR;
+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.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@Slf4j
+@RequestMapping("/qys")
+public class RsQysController {
+    @Autowired
+    private RsQysService rsQysService;
+    /* 契约锁回调密钥 */
+
+    /***
+     * 第一步
+     * 根据文件类型创建合同文档
+     * @param
+     * @return
+     */
+
+    @PostMapping("/createbyfile")
+    public McR createByFile(@RequestBody JSONObject param) throws Exception {
+        return rsQysService.createByFile(param);
+    }
+    /***
+     * 创建新签合同
+     * @param
+     * @return
+     */
+    @PostMapping("/createContract")
+    public McR createContract(@RequestBody JSONObject param) throws Exception {
+        return rsQysService.createContract(param);
+    }
+
+    /***
+     * 创建新签合同
+     * @param
+     * @return
+     */
+    @PostMapping("/createReContract")
+    public McR createReContract(@RequestBody JSONObject param) throws Exception {
+        return rsQysService.createReContract(param);
+    }
+    /***
+     * 预签署  可重复获取
+     * @param
+     * @return
+     */
+    @PostMapping("/appointurl")
+    public McR appointurl(String contractId) throws Exception {
+        log.info("进入 预签署 接口,参数:{}",contractId);
+//            String contractId=String.valueOf(param.getString("contractId"));
+//            return McR.success(contractId);
+        return rsQysService.appointurl(contractId);
+    }
+//    /***
+//     * 第二步
+//     * 发起合同、完成发起方签署
+//     * @param
+//     * @return
+//     */
+//    @PostMapping("/send")
+//    public McR sendContract(String contractId) throws Exception {
+//        log.info("进入 step two 接口,参数:{}",contractId);
+//        return rsQysService.sendContract(contractId);
+//    }
+    /***
+     * 授权物理印章码
+     * @param
+     * @return
+     */
+    @PostMapping("/apply")
+    public McR apply(@RequestBody JSONObject param) throws Exception {
+        log.info("进入 apply 接口,参数:{}",param);
+        return rsQysService.apply(param);
+    }
+
+    /***
+     * 合同签署页面
+     * @param
+     * @return
+     */
+    @PostMapping("/signurl")
+    public McR signurl(@RequestBody JSONObject param) throws Exception {
+        log.info("进入 apply 接口,参数:{}",param);
+        return rsQysService.signurl(param);
+    }
+}

+ 163 - 0
mjava-ruisi/src/main/java/com/malk/ruisi/controller/ScheduleTask.java

@@ -0,0 +1,163 @@
+package com.malk.ruisi.controller;
+
+import cn.hutool.core.io.FileUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.malk.ruisi.service.dingshiqi;
+import com.malk.ruisi.service.impl.dingshiqiImpl;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.server.common.McException;
+import com.malk.service.aliwork.YDClient;
+import com.malk.utils.UtilHttp;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.tomcat.util.http.fileupload.FileUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import java.io.File;
+import java.io.IOException;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+@ConditionalOnProperty(name = {"enable.scheduling"})
+public class ScheduleTask {
+    @Autowired
+    private dingshiqi ds;
+    @Value("${qiyuesuo.pdfbdurl}")
+    private String PDFBDURL;
+
+    @Value("${qiyuesuo.bdurl}")
+    private String BDURL;
+    @Autowired
+    private YDClient ydClient;
+
+    /**
+     * 每月查询业务ID
+     */
+    @Scheduled(cron = "0 0 0 26 * ?")
+//    @Scheduled(cron = "0/10 * * * * ?")
+    public void syncRecruitSource() {
+        try {
+            System.out.println("开始上传业务ID");
+            System.out.println(LocalDateTime.now());
+            ds.getYWFLid();
+            System.out.println("结束业务ID");
+        } catch (Exception e) {
+            // 记录错误信息
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 每月查询物理印章ID
+     */
+//    @Scheduled(cron = "0/1 * * * * ?")
+    @Scheduled(cron = "0 0 0 26 * ?")
+    public void syncRecruitSource1() {
+        try {
+            System.out.println("开始上传物理印章ID");
+            System.out.println(LocalDateTime.now());
+            ds.getYWFLid1();
+            System.out.println("结束物理印章ID");
+        } catch (Exception e) {
+            // 记录错误信息
+            e.printStackTrace();
+        }
+    }
+
+//    @Scheduled(cron = "*/10 * * * *")
+    public void syncRecruitSource3() {
+        List<Map> datalist = (List<Map>) ydClient.queryData(YDParam.builder()
+                .formUuid("FORM-F7B0E685C56E41FC939A581F8B7C2665PXPV")
+                .build(), YDConf.FORM_QUERY.retrieve_search_form);
+        for (Map map : datalist) {
+            Map formData = (Map) map.get("formData");
+            boolean flag = false;
+            String sn = String.valueOf(formData.get("textField_lzns5l3l"));
+            try {
+                taskExecute(String.valueOf(formData.get("textField_lzns5l3l")), String.valueOf(formData.get("textField_lzns5l3k")));
+                flag = true;
+            } catch (McException e) {
+
+            }
+            if (flag) {
+                ydClient.operateData(YDParam.builder()
+                        .formInstanceId(sn)
+                        .build(), YDConf.FORM_OPERATION.delete);
+            }
+        }
+
+    }
+
+    private void taskExecute(String instanceId, String taskId) {
+        Map param3 = new HashMap();
+        param3.put("x-acs-dingtalk-access-token", new dingshiqiImpl().getAccessToken_PJSS());
+        Map body4 = new HashMap();
+        body4.put("outResult", "AGREE");
+        body4.put("appType", "APP_VCTRP6227CC8368NDOID");
+        body4.put("systemToken", "5H9662C1X8XJLFFCE841M5VBEBQ73DM5IBPULPI3");
+        body4.put("remark", "同意");
+        body4.put("taskId", taskId);
+        body4.put("processInstanceId", instanceId);
+        body4.put("userId", "13810479803");
+        String s1 = UtilHttp.doPost("https://api.dingtalk.com/v1.0/yida/tasks/execute", param3, null, (Map<String, Object>) body4);
+        System.out.println("result" + s1);
+    }
+
+    /**
+     * 每月查询电子印章ID
+     * //
+     */
+    @Scheduled(cron = "0 0 0 26 * ?")
+//    @Scheduled(cron = "0 0 0 * * ?")
+    public void syncRecruitSource2() {
+        try {
+            System.out.println("开始上传电子印章ID");
+            System.out.println(LocalDateTime.now());
+            ds.getYWFLid2();
+            System.out.println("结束电子印章ID");
+        } catch (Exception e) {
+            // 记录错误信息
+            e.printStackTrace();
+        }
+    }
+
+    @Scheduled(cron = "0 1 0 * * SUN")
+//    @Scheduled(cron = "0 0 * * 0")
+//@Scheduled(cron = "0 0 0 * * ?")
+    public void delTempFile() {
+        log.info("开始删除文件");
+        File directory = new File(BDURL);
+        try {
+            FileUtils.cleanDirectory(directory);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    //        @Scheduled(cron = "0/1 * * * * ?")
+    public void syncDelete() {
+
+        log.info("开始删除数据");
+
+        try {
+            ds.syncDelete();
+            System.out.println(LocalDateTime.now());
+        } catch (Exception e) {
+            // 记录错误信息
+            e.printStackTrace();
+        }
+    }
+}

+ 23 - 0
mjava-ruisi/src/main/java/com/malk/ruisi/entity/RsQysConfigInfo.java

@@ -0,0 +1,23 @@
+package com.malk.ruisi.entity;
+
+import lombok.Data;
+
+@Data
+public class RsQysConfigInfo {
+    private String aId;// 公司ID
+
+    private String type;// 业务分类代码
+
+    private String categoryId;// 业务分类契约锁ID
+
+    private String callBackSecretKey;// 业务分类回调密钥
+
+    public RsQysConfigInfo(){}
+
+    public RsQysConfigInfo(String aId, String type, String categoryId, String callBackSecretKey){
+        this.aId=aId;
+        this.type=type;
+        this.categoryId=categoryId;
+        this.callBackSecretKey=callBackSecretKey;
+    }
+}

+ 18 - 0
mjava-ruisi/src/main/java/com/malk/ruisi/service/QysApiService.java

@@ -0,0 +1,18 @@
+package com.malk.ruisi.service;
+
+import com.alibaba.fastjson.JSONObject;
+
+import java.io.File;
+import java.util.Map;
+
+public interface QysApiService {
+    JSONObject sendPost(Map param, String url)throws Exception;
+
+    JSONObject sendGet(Map param, String url)throws Exception;
+
+    JSONObject sendGet(Map param, String url,Boolean isUnicode)throws Exception;
+
+    JSONObject sendPostFile(Map param, String url)throws Exception;
+
+    void getFile(Map param, String url, File file)throws Exception;
+}

+ 30 - 0
mjava-ruisi/src/main/java/com/malk/ruisi/service/QysService.java

@@ -0,0 +1,30 @@
+package com.malk.ruisi.service;
+
+import com.alibaba.fastjson.JSONObject;
+
+import java.io.File;
+import java.util.List;
+import java.util.Map;
+
+public interface QysService {
+    JSONObject createDraft(Map param)throws Exception;
+
+    JSONObject createbyfile(Map da) throws Exception;
+
+    JSONObject appointurl(String contractId)throws Exception;
+
+    JSONObject createbycategory(Map data) throws Exception;
+
+    JSONObject getDetail(String bizId, String tenantName) throws Exception;
+
+    JSONObject send(String contractId, String tenantName) throws Exception;
+
+
+    void download(String contractId, File file)throws Exception;
+
+    JSONObject createseal(Map map) throws Exception;
+
+    JSONObject applyseals(Map param) throws Exception;
+
+    JSONObject signurla(Map signatory) throws Exception;
+}

+ 30 - 0
mjava-ruisi/src/main/java/com/malk/ruisi/service/RsQysService.java

@@ -0,0 +1,30 @@
+package com.malk.ruisi.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.malk.server.common.McR;
+
+import java.util.Map;
+
+public interface RsQysService {
+
+    McR createByFile(JSONObject param) throws Exception;
+
+    String callback(Map<String, String> param) throws Exception;
+
+    McR appointurl(String contractId) throws Exception;
+
+//    McR sendContract(String contractId) throws Exception;
+
+    McR apply(JSONObject param) throws Exception;
+
+    McR signurl(JSONObject param) throws Exception;
+
+    McR createContract(JSONObject param) throws Exception;
+
+    McR createReContract(JSONObject param) throws Exception;
+
+    String callback1(Map<String, String> param) throws Exception;
+
+
+//    String callback(JSONObject param);
+}

+ 15 - 0
mjava-ruisi/src/main/java/com/malk/ruisi/service/dingshiqi.java

@@ -0,0 +1,15 @@
+package com.malk.ruisi.service;
+
+import com.alibaba.fastjson.JSONObject;
+
+import java.util.Map;
+
+public interface dingshiqi {
+    JSONObject getYWFLid()throws Exception;
+
+    JSONObject getYWFLid1()throws Exception;
+
+    JSONObject getYWFLid2()throws Exception;
+
+    void syncDelete()throws Exception;
+}

File diff suppressed because it is too large
+ 147 - 0
mjava-ruisi/src/main/java/com/malk/ruisi/service/impl/QysApiServiceImpl.java


+ 92 - 0
mjava-ruisi/src/main/java/com/malk/ruisi/service/impl/QysServiceImpl.java

@@ -0,0 +1,92 @@
+package com.malk.ruisi.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.malk.ruisi.service.QysApiService;
+import com.malk.ruisi.service.QysService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static com.malk.ruisi.constant.QysConstant.*;
+
+@Slf4j
+@Service
+public class QysServiceImpl implements QysService {
+   @Autowired
+   private QysApiService qysApiService;
+    @Override
+    public JSONObject createDraft(Map param) throws Exception {
+        return qysApiService.sendPost(param,QYS_API_CREATEBYCATEGORY);
+    }
+
+    @Override
+    public JSONObject createbyfile(Map da) throws Exception {
+        return qysApiService.sendPostFile(da,QYS_API_CREATEBYFILE);
+    }
+
+    @Override
+    public JSONObject appointurl(String contractId) throws Exception {
+
+            Map<String,Object> data=new HashMap();
+            data.put("contractId",contractId);
+            return qysApiService.sendGet(data,QYS_API_PRESIGNURL);
+//            return qysApiService.sendPost(data,QYS_API_PRESIGNURL);
+
+    }
+
+    @Override
+    public JSONObject createbycategory(Map data) throws Exception {
+        return qysApiService.sendPost(data,QYS_API_CREATEBYCATEGORY);
+    }
+
+    @Override
+    public JSONObject getDetail(String bizId, String tenantName) throws Exception {
+        Map<String ,Object> data = new HashMap();
+        data.put("bizId",bizId);
+        data.put("tenantName",tenantName);
+        return qysApiService.sendGet(data,QYS_API_CONTRACT_DETAIL);
+    }
+
+    @Override
+    public JSONObject send(String contractId, String tenantName) throws Exception {
+        Map<String,Object> data=new HashMap();
+        data.put("contractId",contractId);
+        data.put("tenantName",tenantName);
+        return qysApiService.sendPost(data,QYS_API_SEND);
+    }
+    public JSONObject getYWFLid(Map data) throws Exception {
+        return qysApiService.sendGet(data,QYS_API_CATEGORIES,false);
+    }
+    /***
+     * 下载签署后文件
+     * @param contractId
+     * @param file
+     * @throws Exception
+     */
+    @Override
+    public void download(String contractId, File file) throws Exception {
+        log.info("下载文件:{}",file.getPath());
+        qysApiService.getFile(new JSONObject().fluentPut("contractId",contractId),QYS_API_DOWNLOAD,file);
+        log.info("下载完成:文件大小:{}",file.length());
+    }
+
+    @Override
+    public JSONObject createseal(Map map) throws Exception {
+        return qysApiService.sendPost(map,QYS_API_SEALBYCATEGORY);
+    }
+
+    @Override
+    public JSONObject applyseals(Map param) throws Exception {
+        return qysApiService.sendPost(param,QYS_API_MULTIPLE);
+    }
+
+    @Override
+    public JSONObject signurla(Map signatory) throws Exception {
+        return qysApiService.sendPost(signatory,QYS_API_SIGNURL);
+    }
+}

File diff suppressed because it is too large
+ 1314 - 0
mjava-ruisi/src/main/java/com/malk/ruisi/service/impl/RsQysServiceImpl.java


+ 338 - 0
mjava-ruisi/src/main/java/com/malk/ruisi/service/impl/dingshiqiImpl.java

@@ -0,0 +1,338 @@
+package com.malk.ruisi.service.impl;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.google.gson.Gson;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.malk.ruisi.service.QysApiService;
+import com.malk.ruisi.service.QysService;
+import com.malk.ruisi.service.dingshiqi;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.server.common.McException;
+import com.malk.server.dingtalk.DDR;
+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.utils.UtilHttp;
+import com.malk.utils.UtilMap;
+import com.malk.utils.UtilToken;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static com.malk.ruisi.constant.QysConstant.*;
+
+
+@Service
+@Slf4j
+public class dingshiqiImpl implements dingshiqi {
+    @Autowired
+    private QysService qysService;
+    @Autowired
+    private QysServiceImpl qysServiceImpl;
+    @Autowired
+    private QysApiService qysApiService;
+    @Autowired
+    private YDClient ydClient;
+    @Autowired
+    private YDConf ydConf;
+    @Autowired
+    private DDClient ddClient;
+    @Autowired
+    private DDClient_Contacts ddClient_contacts;
+
+    @Override
+    public JSONObject getYWFLid() throws Exception {
+        Map<String, Object> data = new HashMap();
+        //通过接口获取所有业务分类列表
+        JSONObject ywfLid = qysApiService.sendGet(data, QYS_API_CATEGORIES, false);
+        JSONArray ids = ywfLid.getJSONArray("categories");//得到所有业务分类数据
+        if (ids != null && ids.size() > 0) {
+            for (int i = 0; i < ids.size(); i++) {
+                String scon = "";//签署配置
+                //判断所需数据是否为空
+                if (ids.getJSONObject(i).getString("name") != "" && ids.getJSONObject(i).getString("id") != ""
+                        && ids.getJSONObject(i).getString("tenantName") != "" && ids.getJSONObject(i).getString("tenantId") != ""
+                        && ids.getJSONObject(i).getString("config") != "") {
+                    String name = ids.getJSONObject(i).getString("name");//业务分类名称
+                    String id = ids.getJSONObject(i).getString("id");//业务分类id
+                    String config = ids.getJSONObject(i).getString("config");
+                    String tenantName = ids.getJSONObject(i).getString("tenantName");//公司名称
+                    String tenantID = ids.getJSONObject(i).getString("tenantId");//公司id
+                    String sc = "textField_lvkbxugq, textField_lvkbxugr, textField_lvyy8a3l";
+                    String fd = "textField_lvkbxugq, textField_lvkbxugr, textField_lvyy8a3l, textField_lvyy8a3m, textareaField_lw1py1td";
+                    //把配置数据转换成json
+                    Gson gson = new Gson();
+                    JsonObject jsonObject = gson.fromJson(config, JsonObject.class);
+                    JsonArray signatories = jsonObject.getAsJsonArray("signatories");
+                    if (signatories == null || signatories.size() == 0) {
+                        signatories = new JsonArray();
+                    }
+                    //封装所需配置数据为列表
+                    List<Map<String, Object>> signatoriesData = new ArrayList<>();
+                    for (JsonElement signatory : signatories) {
+                        JsonObject signatoryObj = signatory.getAsJsonObject();
+                        String tenantType = signatoryObj.has("tenantType") ? signatoryObj.get("tenantType").getAsString() : "COMPANY";
+                        int serialNo = signatoryObj.get("serialNo").getAsInt();
+                        List<Map<String, Object>> actionData = new ArrayList<>();
+                        JsonArray actions = signatoryObj.getAsJsonArray("actions");
+                        for (JsonElement action : actions) {
+                            JsonObject actionObj = action.getAsJsonObject();
+                            String type = actionObj.get("type").getAsString();
+                            String name1 = actionObj.get("name").getAsString();
+                            int actionSerialNo = actionObj.get("serialNo").getAsInt();
+                            Map<String, Object> actionMap = new HashMap<>();
+                            actionMap.put("type", type);
+                            actionMap.put("name", name1);
+                            actionMap.put("serialNo", actionSerialNo);
+                            actionData.add(actionMap);
+                        }
+                        Map<String, Object> signatoryMap = new HashMap<>();
+                        if (tenantType != null) {
+                            signatoryMap.put("tenantType", tenantType);
+                        }
+                        signatoryMap.put("serialNo", serialNo);
+                        signatoryMap.put("actions", actionData);
+                        signatoriesData.add(signatoryMap);
+                    }
+                    //把配置数据转换成json
+                    Gson gson1 = new Gson();
+                    scon = gson1.toJson(signatoriesData);
+                    //把数据插入宜搭基础表单中
+                    String tquid = ydClient.operateData(YDParam.builder()
+                            .formUuid("FORM-417576F4EE9F4AA1B2395BCD93B7A08C8ASN")
+                            .searchCondition(JSONObject.toJSONString(UtilMap.map(sc, name, id, tenantName)))
+                            .formDataJson(JSONObject.toJSONString(UtilMap.map(fd, name, id, tenantName, tenantID, scon)))
+                            .build(), YDConf.FORM_OPERATION.upsert).toString();
+                    System.out.println("tquid:" + tquid);
+                }
+            }
+
+        }
+        return null;
+    }
+    public String getAccessToken_PJSS() {
+        //
+        String accessToken = UtilToken.get("invalid-token-dingtalk");
+        if (StringUtils.isNotBlank(accessToken)) {
+            return accessToken;
+        }
+        Map param = new HashMap();
+        param.put("appkey", "dingwnds0gg0vpbu44cd");
+        param.put("appsecret", "B7tDWb3hPjP4rksRd_PqOsOVBv6QWY6F9gvn1X2aIoAIMFchRGw69aDeHly-6XXn");
+        DDR r = (DDR) UtilHttp.doGet("https://oapi.dingtalk.com/gettoken", param, DDR.class);
+        log.info("响应token, {}", r.getAccessToken());
+        accessToken = r.getAccessToken();
+        // token失效自动重置: DD重新调用会重置过期时间
+        UtilToken.put("invalid-token-dingtalk", accessToken, r.getExpiresIn() * 1000L);
+        return accessToken;
+    }
+    @Override
+    public JSONObject getYWFLid1() throws Exception {
+        Map<String, Object> data = new HashMap();
+        data.put("category", "PHYSICS");
+        JSONObject qysid = qysApiService.sendGet(data, QYS_API_SEALLIST, false);
+        JSONArray result = qysid.getJSONArray("result");//得到物理印章所有数据
+        if (result != null && result.size() > 0) {
+            for (int i = 0; i < result.size(); i++) {
+                JSONObject sealData = result.getJSONObject(i);
+                String charger = sealData.getString("charger"); // 印章负责人
+                String name = sealData.getString("name"); // 公司名称
+                String id = sealData.getString("id"); // 公司id
+                JSONArray seals = sealData.getJSONArray("seals"); // 公司id
+                String sc = "textField_lw6aecvd, textField_lw6aecvg, textField_lw6aecve, textField_lw6aecvh";
+                String fd = "employeeField_lwr509pq, textField_lw6aecvd, textField_lw6aecvg, textField_lw6aecve, textField_lw6aecvh, textField_lwywohh0";
+                String fd1 = "textField_lw6aecvd, textField_lw6aecvg, textField_lw6aecve, textField_lw6aecvh";
+
+                // 如果 seals 为空,则设置 id、name、category 为空字符串
+                if (seals != null && seals.size() > 0) {
+                    for (int i1 = 0; i1 < seals.size(); i1++) {
+                        JSONObject seal = seals.getJSONObject(i1);
+                        String sealId = seal.getString("id"); // 印章id
+                        String sealName = seal.getString("name"); // 印章名称
+//                        String sealCategory = seal.getString("category"); // 印章类别
+//                        if (sealCategory.equals("PHYSICS")) {
+//                            sealCategory = "物理";
+//                        }
+                        Map<String, Object> data5 = new HashMap();
+                        data5.put("sealId", sealId);
+                        JSONObject detail = qysApiService.sendGet(data5, QYS_API_DETAIL, false);
+                        JSONObject seal3 = detail.getJSONObject("seal");//得到电子印章所有数据
+                        JSONArray users = seal3.getJSONArray("users");//得到电子印章所有数据
+
+                        if (users != null && users.size() > 0) {
+                            List<String> usersList = new ArrayList<>();
+                            for (int k = 0; k < users.size(); k++) {
+                                JSONObject usersData = users.getJSONObject(k);
+
+                                String mobile = usersData.getString("mobile");
+                                try {
+                                    Map userInfoByMobile = ddClient_contacts.getUserInfoByMobile(ddClient.getAccessToken(), mobile);
+                                    String userid = UtilMap.getString(userInfoByMobile, "userid");
+                                    if (userid != null) {
+                                        log.info("userInfoByMobile:{}", userInfoByMobile.get("userid"));
+                                        usersList.add(userid);
+                                    } else {
+                                        usersList.add(null);
+                                    }
+                                } catch (McException e) {
+                                    if (e.getCode() == "60121") {
+                                        // 处理用户不存在的特定情况,如记录日志、添加特定消息等
+                                        log.warn("用户不存在: 手机号={}", mobile);
+                                    } else {
+                                        // 其他错误处理
+                                        log.error("获取用户信息时发生错误", e);
+                                    }
+                                }
+                                System.out.println("物理印章使用人----------------" + usersList);
+                                System.out.println("物理印章使用人----------------" + ddClient.getAccessToken());
+                                System.out.println("物理印章使用人----------------" + mobile);
+                                if (usersList != null){
+                                    ydClient.operateData(YDParam.builder()
+                                            .formUuid("FORM-7ACCB70D96FA4187BD2042243641E54CD6VH")
+                                            .searchCondition(JSONObject.toJSONString(UtilMap.map(sc, name, sealId, sealName, id)))
+                                            .formDataJson(JSONObject.toJSONString(UtilMap.map(fd, usersList, name, sealId, sealName, id, mobile)))
+                                            .build(), YDConf.FORM_OPERATION.upsert);
+                                }else{
+                                    ydClient.operateData(YDParam.builder()
+                                            .formUuid("FORM-7ACCB70D96FA4187BD2042243641E54CD6VH")
+                                            .searchCondition(JSONObject.toJSONString(UtilMap.map(sc, name, sealId, sealName, id)))
+                                            .formDataJson(JSONObject.toJSONString(UtilMap.map(fd1, name, sealId, sealName, id)))
+                                            .build(), YDConf.FORM_OPERATION.upsert);
+                                }
+
+                            }
+                        }
+
+                    }
+                } else {
+                    String sealId = ""; // 印章id
+                    String sealName = ""; // 印章名称
+                    String sealCategory = ""; // 印章类别
+
+                    ydClient.operateData(YDParam.builder()
+                            .formUuid("FORM-7ACCB70D96FA4187BD2042243641E54CD6VH")
+                            .searchCondition(JSONObject.toJSONString(UtilMap.map(sc, name, sealId, sealName, id)))
+                            .formDataJson(JSONObject.toJSONString(UtilMap.map(fd1,  name, sealId, sealName, id)))
+                            .build(), YDConf.FORM_OPERATION.upsert).toString();
+                }
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public JSONObject getYWFLid2() throws Exception {
+        Map<String, Object> data = new HashMap();
+        data.put("category", "ELECTRONIC");
+        JSONObject qysid = qysApiService.sendGet(data, QYS_API_SEALLIST, false);
+        JSONArray result = qysid.getJSONArray("result");//得到电子印章所有数据
+        if (result != null && result.size() > 0) {
+            for (int i = 0; i < result.size(); i++) {
+                JSONObject sealData = result.getJSONObject(i);
+                String charger = sealData.getString("charger"); // 印章负责人
+                String name = sealData.getString("name"); // 公司名称
+                String id = sealData.getString("id"); // 公司id
+                JSONArray seals = sealData.getJSONArray("seals"); // 印章id
+                String sc = "textField_lu0k70cf, textField_lw5pfnr9";
+                String fd = "employeeField_lwqbilgc, textField_lu0k70cf, textField_lw5pfnr9, textField_lu0k70cg, textField_lw5qtyzw, textField_lwywvrx9";
+                String fd1 = "textField_lu0k70cf, textField_lw5pfnr9, textField_lu0k70cg, textField_lw5qtyzw";
+                // 如果 seals 为空,则设置 id、name、category 为空字符串
+                if (seals != null && seals.size() > 0) {
+                    for (int i1 = 0; i1 < seals.size(); i1++) {
+                        JSONObject seal = seals.getJSONObject(i1);
+                        String sealId = seal.getString("id"); // 印章id
+                        String sealName = seal.getString("name"); // 印章名称
+//                        String sealCategory = seal.getString("category"); // 印章类别
+//                        if (sealCategory.equals("ELECTRONIC")) {
+//                            sealCategory = "电子";
+//                        }
+                        Map<String, Object> data5 = new HashMap();
+                        data5.put("sealId", sealId);
+                        JSONObject detail = qysApiService.sendGet(data5, QYS_API_DETAIL, false);
+                        JSONObject seal3 = detail.getJSONObject("seal");//得到电子印章所有数据
+                        JSONArray users = seal3.getJSONArray("users");//得到电子印章所有数据
+
+                        if (users != null && users.size() > 0) {
+                            List<String> usersList = new ArrayList<>();
+                            for (int k = 0; k < users.size(); k++) {
+                                JSONObject usersData = users.getJSONObject(k);
+//                                String name3 = usersData.getString("name");
+                                String mobile = usersData.getString("mobile");
+                                try {
+                                    Map userInfoByMobile = ddClient_contacts.getUserInfoByMobile(ddClient.getAccessToken(), mobile);
+                                    String userid = UtilMap.getString(userInfoByMobile, "userid");
+                                    if (userid != null) {
+                                        log.info("userInfoByMobile:{}", userInfoByMobile.get("userid"));
+                                        usersList.add(userid);
+                                    } else {
+                                        usersList.add(null);
+                                    }
+                                } catch (McException e) {
+                                    if (e.getCode() == "60121") {
+                                        // 处理用户不存在的特定情况,如记录日志、添加特定消息等
+                                        log.warn("用户不存在: 手机号={}", mobile);
+                                    } else {
+                                        // 其他错误处理
+                                        log.error("获取用户信息时发生错误", e);
+                                    }
+                                }
+                                System.out.println("印章使用人----------------" + mobile);
+                                if (usersList != null) {
+                                    ydClient.operateData(YDParam.builder()
+                                            .formUuid("FORM-6D5B2C469B45456F9287C3575BFF92C7KUF6")
+                                            .searchCondition(JSONObject.toJSONString(UtilMap.map(sc, name, sealId)))
+                                            .formDataJson(JSONObject.toJSONString(UtilMap.map(fd, usersList, name, sealId, sealName, id, mobile)))
+                                            .build(), YDConf.FORM_OPERATION.upsert);
+                                } else {
+                                    ydClient.operateData(YDParam.builder()
+                                            .formUuid("FORM-6D5B2C469B45456F9287C3575BFF92C7KUF6")
+                                            .searchCondition(JSONObject.toJSONString(UtilMap.map(sc, name, sealId)))
+                                            .formDataJson(JSONObject.toJSONString(UtilMap.map(fd1, name, sealId, sealName, id)))
+                                            .build(), YDConf.FORM_OPERATION.upsert);
+                                }
+                            }
+                        }
+                    }
+                } else {
+                    String sealId = ""; // 印章id
+                    String sealName = ""; // 印章名称
+                    String sealCategory = ""; // 印章类别
+
+                    ydClient.operateData(YDParam.builder()
+                            .formUuid("FORM-6D5B2C469B45456F9287C3575BFF92C7KUF6")
+                            .searchCondition(JSONObject.toJSONString(UtilMap.map(sc, name, sealId)))
+                            .formDataJson(JSONObject.toJSONString(UtilMap.map(fd1, name, sealId, sealName, id)))
+                            .build(), YDConf.FORM_OPERATION.upsert).toString();
+                }
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public void syncDelete() {
+        DDR_New ddrNew = ydClient.queryData(YDParam.builder()
+                .formUuid("FORM-7ACCB70D96FA4187BD2042243641E54CD6VH")
+                .build(), YDConf.FORM_QUERY.retrieve_search_form_id);
+
+        System.out.println(ddrNew.getTotalCount());
+
+        ydClient.operateData(YDParam.builder()
+                .formUuid("FORM-7ACCB70D96FA4187BD2042243641E54CD6VH")
+                .asynchronousExecution(true)
+                .formInstanceIdList((List<String>) ddrNew.getData())
+                .build(), YDConf.FORM_OPERATION.delete_batch);
+
+    }
+}

+ 38 - 0
mjava-ruisi/src/main/resources/application-dev.yml

@@ -0,0 +1,38 @@
+server:
+  port: 9020
+  servlet:
+    context-path: /ruisi
+
+enable:
+  scheduling: true
+logging:
+  config: classpath:logback-spring.xml
+  path: /home/server/connect/canrui/log/
+  level:
+    com.zitoo.connect.*: debug
+
+# dingtalk
+dingtalk:
+  agentId: "3079562924"
+  appKey: "dingprswtas7kluqst2c"
+  appSecret: "ukquGx_DjznsTQtKQtFFNutn1NFhSgL9ZbTfCtl_9mJYWacFYu--vj_zThTxjsYN"
+  corpId: "dingccd7fff754e440cf24f2f5cc6abecb85"
+  aesKey:
+  token:
+qiyuesuo:
+  doman: http://esign.risechina.com:9182
+  token: wSIHewkJqu
+  secret: IS2QWwM7ktcYa80LzhpvQyHYhYfgBZ
+  bdurl: /home/server/ruisi_qys/ruisi_qiyuesuo/file/
+  pdfbdurl: /home/server/ruisi_qys/ruisi_qiyuesuo/fils_new/
+  url: https://aservice.risechina.com/ruisi/qys/download/
+# teambition
+teambition:
+  AppID: 63589b8bb6803e162f9a57d8
+  AppSecret: 5mB3b73OFhSwo38xEVqahCLwQVhG1MW3
+  TenantId: 5ca44db8ca4fd40001b10559
+  OperatorId: 5e698cca21f5ad70dfba7d2b    # 公共账号, 需要有操作权限 [牧语]
+# aliwork
+aliwork:
+  appType: APP_VCTRP6227CC8368NDOID
+  systemToken: 5H9662C1X8XJLFFCE841M5VBEBQ73DM5IBPULPI3

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


+ 15 - 0
mjava-ruisi/src/main/resources/application.yml

@@ -0,0 +1,15 @@
+spring:
+  profiles:
+    active: dev
+  servlet:
+    multipart:
+      max-file-size: 100MB
+      max-request-size: 100MB
+  http:
+    enabled: false
+
+#  configuration:
+#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+  global-config:
+    db-config:
+      id-type: auto

+ 61 - 0
mjava-ruisi/src/main/resources/logback-spring.xml

@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration debug="false" scan="false" scanPeriod="60 seconds">
+    <springProperty scope="context" name="LOG_HOME" source="logging.path" defaultValue="/home/server/log/"/>
+    <property name="FileNamePattern" value="${LOG_HOME}%d{yyyyMM}/%d{dd}"/>
+
+    <!-- 定义控制台输出 -->
+    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
+        <layout class="ch.qos.logback.classic.PatternLayout">
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} - [%thread] - %-5level - %logger{50} - %msg%n</pattern>
+        </layout>
+    </appender>
+
+    <appender name="appLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 指定日志文件的名称 -->
+        <!--<file>${FileNamePattern}/info.log</file>-->
+
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${FileNamePattern}/info-%i.log</fileNamePattern>
+            <MaxHistory>30</MaxHistory>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <MaxFileSize>30MB</MaxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+
+        <layout class="ch.qos.logback.classic.PatternLayout">
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [ %thread ] - [ %-5level ] [ %logger{50} : %line ] - %msg%n</pattern>
+        </layout>
+    </appender>
+
+    <appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
+        <discriminator>
+            <Key>processid</Key>
+            <DefaultValue>sys</DefaultValue>
+        </discriminator>
+        <sift>
+            <appender name="FILE-${processid}"
+                      class="ch.qos.logback.core.rolling.RollingFileAppender">
+                <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+                    <FileNamePattern>
+                        ${FileNamePattern}/${processid}.log
+                    </FileNamePattern>
+                </rollingPolicy>
+                <layout class="ch.qos.logback.classic.PatternLayout">
+                    <Pattern>
+                        %d{yyyyMMdd:HH:mm:ss.SSS} [%thread] %-5level %msg%n
+                    </Pattern>
+                </layout>
+            </appender>
+        </sift>
+    </appender>
+
+
+    <!-- 日志输出级别 -->
+    <logger name="org.springframework" level="debug"  additivity="false"/>
+    <logger name="com.zitoo.connecter" level="debug"/>
+    <root level="INFO">
+        <appender-ref ref="stdout"/>
+        <appender-ref ref="appLogAppender"/>
+        <appender-ref ref="SIFT"/>
+    </root>
+</configuration>

+ 13 - 0
mjava-ruisi/src/test/java/com/malk/ruisi/MjavaRuisiApplicationTests.java

@@ -0,0 +1,13 @@
+package com.malk.ruisi;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class MjavaRuisiApplicationTests {
+
+    @Test
+    void contextLoads() {
+    }
+
+}

+ 107 - 0
mjava-ruisi/src/test/java/com/malk/ruisi/test.java

@@ -0,0 +1,107 @@
+package com.malk.ruisi;
+
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.json.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.malk.ruisi.service.QysApiService;
+import com.malk.ruisi.service.QysService;
+import com.malk.ruisi.service.RsQysService;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+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.test.context.junit4.SpringRunner;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class test {
+
+    @Autowired
+    private QysApiService qysApiService;
+    @Autowired
+    private QysService qysService;
+    @Autowired
+    private RsQysService rsQysService;
+//上传文件得到文档Id
+    @Test
+    public void test() throws Exception {
+        Map data=new HashMap();
+        data.put("file", FileUtil.file("/home/file/123.docx"));
+        data.put("title","123");
+        data.put("fileType","docx");
+//        data.put("bizId",bizId);
+//        data.put("title",FileUtil.mainName(file));
+//        data.put("file", file);
+//        data.put("fileSuffix", FileUtil.extName(file));
+//        data.put("tenantName",tenantName);
+//        qysApiService.sendPostFile(data,"/v2/document/createbyfile");
+        qysService.createbyfile(data);
+    }
+
+
+//    @Test
+//    public void test222(){
+//        JSONObject obj=new JSONObject();
+//        obj.put("formInstanceId","");
+//        rsQysService.createbyfile("6552b416-09d0-4cd4-af9a-2b549144a508");
+//    }
+
+
+//    String bizId=param.getString("bizId");
+//    String formInstanceId=param.getString("formInstanceId");
+//    Map data = (Map) ydClient.queryData(YDParam.builder().formInstId(formInstanceId)
+//            .appType(ydConf.getAppType()).systemToken(ydConf.getSystemToken())
+//            .userId(ddConf.getOperator()).build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+//        log.info("data:{}",JSONObject.toJSONString(data));
+//
+//    JSONObject obj=new JSONObject();
+//        obj.put("subject",data.get("textField_ltsbwef0"));
+//        obj.put("sn",data.get("serialNumberField_ltsbweh2"));
+//        obj.put("categoryName",data.get("textField_ltsbweif"));
+//        obj.put("signatory",data.get("textField_ltwa0vk0"));
+//        obj.put("send",false);// 是否发起合同;发起合同后不能再进行添加文档、指定签署位置等操作
+//
+//    JSONArray array=new JSONArray();
+//    JSONObject signatory=new JSONObject();
+////        signatory.put("tenantType",data.get("selectField_ltsbwei6"));
+//        signatory.put("tenantType","COMPANY");
+//        signatory.put("tenantName",data.get("selectField_ltsbwei5"));
+//    // 假设 data 是一个 Map<String, String> 对象
+////        String selectFieldValue = (String) data.get("selectField_lu69xx6q");
+////        List<Integer> result;
+////
+////        if ("是".equals(selectFieldValue)) {
+////            result = Arrays.asList(1, 2, 3);
+////        } else {
+////            result = Arrays.asList(1, 1, 1);
+////        }
+////
+////        signatory.put("serialNo",result);
+//        array.add(signatory);
+////
+//        obj.put("signatories",array);
+//
+//        log.info("obj:{}",obj);
+//        try {
+//        log.info("1. 创建合同草稿 {}",bizId);
+//        JSONObject draft=qysService.createDraft(obj);
+//        System.out.println(draft);
+//    } catch (Exception e) {
+//        e.printStackTrace();
+//    }
+
+    @Test
+    public void qystest() throws Exception {
+        Map map=new HashMap();
+        map.put("sn","HT01-HTYY-202405200047");
+        map.put("contractId","3230485872831869324");
+        map.put("status","SIGNED");
+        rsQysService.callback(map);
+    }
+}

+ 15 - 0
pom.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         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">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>com.malk</groupId>
+    <artifactId>ruiQiyuesuo</artifactId>
+    <packaging>pom</packaging>
+    <version>1.0-SNAPSHOT</version>
+    <modules>
+    </modules>
+
+
+</project>