From 64b131814e08131dee09c2aae36937955065c4d6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=B5=B5=E5=95=B8=E9=9D=9E?= <8153694@qq.com>
Date: Wed, 1 Nov 2023 00:36:13 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=85=8D=E7=BD=AE=E6=96=87?=
 =?UTF-8?q?=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 pom.xml                                       |  13 +-
 .../lilosoft/api/bean/receive/ErrorsItem.java |  11 +
 .../api/bean/receive/FileDataItem.java        |  19 ++
 .../api/bean/receive/ProjectData.java         |  16 ++
 .../api/bean/receive/ReceiveMsgInfo.java      |  31 +++
 .../lilosoft/api/controller/MqConsumer.java   |  25 ++-
 .../lilosoft/api/service/ApplyService.java    |  57 ++---
 .../lilosoft/api/service/ComplexService.java  |  93 ++++++++
 .../api/service/complexWindow/CommonData.java |  37 ++++
 .../complexWindow/ComplexWindowAbstract.java  |  75 +++++++
 .../service/complexWindow/WXHXPJYXKFRBG.java  | 162 ++++++++++++++
 .../complex/AbstractComplexService.java       |  54 +++++
 .../java/com/lilosoft/complex/BaseReq.java    |  13 ++
 .../com/lilosoft/complex/ComplexApiRest.java  |  96 +++++++++
 .../com/lilosoft/complex/IComplexService.java |  10 +
 src/main/java/com/lilosoft/complex/Rest.java  |  99 +++++++++
 .../complex/matter/model/req/AcceptReq.java   |  18 ++
 .../matter/model/req/ApplicantLeagal.java     |  12 ++
 .../matter/model/req/ApplicantPersonal.java   |  12 ++
 .../matter/model/req/DeviceLoginReq.java      |   8 +
 .../matter/model/req/HandlingsItem.java       |   9 +
 .../matter/model/req/ImplementationReq.java   |  25 +++
 .../complex/matter/model/req/InfoMap.java     |   9 +
 .../matter/model/req/MaterialsItem.java       |  11 +
 .../complex/matter/model/req/MatterReq.java   |  11 +
 .../matter/model/req/UploadFileReq.java       |  14 ++
 .../matter/model/rsp/AcceptRspInfo.java       | 154 +++++++++++++
 .../matter/model/rsp/HandleAddress.java       |  26 +++
 .../matter/model/rsp/LoginRspInfo.java        |  10 +
 .../matter/model/rsp/MatterListInfo.java      |  12 ++
 .../matter/model/rsp/MatterRespInfo.java      |  85 ++++++++
 .../matter/model/rsp/SelfDeviceInfo.java      |  24 +++
 .../complex/matter/model/rsp/SysUser.java     |  43 ++++
 .../matter/model/rsp/matter/ChildrenItem.java |  18 ++
 .../model/rsp/matter/MaterialsItem.java       |  16 ++
 .../model/rsp/matter/MatterWorkInfo.java      |  14 ++
 .../matter/model/rsp/work/WorkInfo.java       |  38 ++++
 .../matter/service/IComplexMatterService.java |  80 +++++++
 .../impl/ComplexMatterServiceImpl.java        | 203 ++++++++++++++++++
 .../com/lilosoft/core/enums/TypeEnum.java     |  65 ++++++
 .../com/lilosoft/core/enums/YesNoEnum.java    |  64 ++++++
 .../lilosoft/core/exception/AppException.java |  51 +++++
 src/main/resources/application.yml            |   3 +-
 43 files changed, 1808 insertions(+), 38 deletions(-)
 create mode 100644 src/main/java/com/lilosoft/api/bean/receive/ErrorsItem.java
 create mode 100644 src/main/java/com/lilosoft/api/bean/receive/FileDataItem.java
 create mode 100644 src/main/java/com/lilosoft/api/bean/receive/ProjectData.java
 create mode 100644 src/main/java/com/lilosoft/api/bean/receive/ReceiveMsgInfo.java
 create mode 100644 src/main/java/com/lilosoft/api/service/ComplexService.java
 create mode 100644 src/main/java/com/lilosoft/api/service/complexWindow/CommonData.java
 create mode 100644 src/main/java/com/lilosoft/api/service/complexWindow/ComplexWindowAbstract.java
 create mode 100644 src/main/java/com/lilosoft/api/service/complexWindow/WXHXPJYXKFRBG.java
 create mode 100644 src/main/java/com/lilosoft/complex/AbstractComplexService.java
 create mode 100644 src/main/java/com/lilosoft/complex/BaseReq.java
 create mode 100644 src/main/java/com/lilosoft/complex/ComplexApiRest.java
 create mode 100644 src/main/java/com/lilosoft/complex/IComplexService.java
 create mode 100644 src/main/java/com/lilosoft/complex/Rest.java
 create mode 100644 src/main/java/com/lilosoft/complex/matter/model/req/AcceptReq.java
 create mode 100644 src/main/java/com/lilosoft/complex/matter/model/req/ApplicantLeagal.java
 create mode 100644 src/main/java/com/lilosoft/complex/matter/model/req/ApplicantPersonal.java
 create mode 100644 src/main/java/com/lilosoft/complex/matter/model/req/DeviceLoginReq.java
 create mode 100644 src/main/java/com/lilosoft/complex/matter/model/req/HandlingsItem.java
 create mode 100644 src/main/java/com/lilosoft/complex/matter/model/req/ImplementationReq.java
 create mode 100644 src/main/java/com/lilosoft/complex/matter/model/req/InfoMap.java
 create mode 100644 src/main/java/com/lilosoft/complex/matter/model/req/MaterialsItem.java
 create mode 100644 src/main/java/com/lilosoft/complex/matter/model/req/MatterReq.java
 create mode 100644 src/main/java/com/lilosoft/complex/matter/model/req/UploadFileReq.java
 create mode 100644 src/main/java/com/lilosoft/complex/matter/model/rsp/AcceptRspInfo.java
 create mode 100644 src/main/java/com/lilosoft/complex/matter/model/rsp/HandleAddress.java
 create mode 100644 src/main/java/com/lilosoft/complex/matter/model/rsp/LoginRspInfo.java
 create mode 100644 src/main/java/com/lilosoft/complex/matter/model/rsp/MatterListInfo.java
 create mode 100644 src/main/java/com/lilosoft/complex/matter/model/rsp/MatterRespInfo.java
 create mode 100644 src/main/java/com/lilosoft/complex/matter/model/rsp/SelfDeviceInfo.java
 create mode 100644 src/main/java/com/lilosoft/complex/matter/model/rsp/SysUser.java
 create mode 100644 src/main/java/com/lilosoft/complex/matter/model/rsp/matter/ChildrenItem.java
 create mode 100644 src/main/java/com/lilosoft/complex/matter/model/rsp/matter/MaterialsItem.java
 create mode 100644 src/main/java/com/lilosoft/complex/matter/model/rsp/matter/MatterWorkInfo.java
 create mode 100644 src/main/java/com/lilosoft/complex/matter/model/rsp/work/WorkInfo.java
 create mode 100644 src/main/java/com/lilosoft/complex/matter/service/IComplexMatterService.java
 create mode 100644 src/main/java/com/lilosoft/complex/matter/service/impl/ComplexMatterServiceImpl.java
 create mode 100644 src/main/java/com/lilosoft/core/enums/TypeEnum.java
 create mode 100644 src/main/java/com/lilosoft/core/enums/YesNoEnum.java
 create mode 100644 src/main/java/com/lilosoft/core/exception/AppException.java

diff --git a/pom.xml b/pom.xml
index e213231..4acc595 100644
--- a/pom.xml
+++ b/pom.xml
@@ -35,7 +35,8 @@
                 <profiles.baseUrl>http://10.225.128.55</profiles.baseUrl>
                 <profiles.ocrUrl>http://rocrt.egovrobot.com/</profiles.ocrUrl>
                 <profiles.apiUrl>http://api.egovrobot.com</profiles.apiUrl>
-                <profiles.mq>sanya</profiles.mq>
+                <profiles.robertServerUrl>http://localhost:8099/</profiles.robertServerUrl>
+                <profiles.mq>yibin</profiles.mq>
                 <profiles.activemq.brokerUrl>tcp://59.175.148.30:62818</profiles.activemq.brokerUrl>
                 <profiles.publish.path>/home/publish</profiles.publish.path>
             </properties>
@@ -50,7 +51,7 @@
                 <profiles.baseUrl>http://10.225.128.55</profiles.baseUrl>
                 <profiles.ocrUrl>http://rocrt.egovrobot.com/</profiles.ocrUrl>
                 <profiles.apiUrl>http://api.egovrobot.com</profiles.apiUrl>
-                <profiles.mq>sanya</profiles.mq>
+                <profiles.mq>yibin</profiles.mq>
                 <profiles.activemq.brokerUrl>tcp://8.136.255.30:11044</profiles.activemq.brokerUrl>
                 <profiles.publish.path>/home/publish</profiles.publish.path>
             </properties>
@@ -126,6 +127,14 @@
             <artifactId>hutool-all</artifactId>
             <version>5.8.4</version>
         </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.83</version>
+        </dependency>
+
+
     </dependencies>
 
     <build>
diff --git a/src/main/java/com/lilosoft/api/bean/receive/ErrorsItem.java b/src/main/java/com/lilosoft/api/bean/receive/ErrorsItem.java
new file mode 100644
index 0000000..e40a17f
--- /dev/null
+++ b/src/main/java/com/lilosoft/api/bean/receive/ErrorsItem.java
@@ -0,0 +1,11 @@
+package com.lilosoft.api.bean.receive;
+
+import lombok.Data;
+
+@Data
+public class ErrorsItem{
+	private int errorType;
+	private String name;
+	private String error;
+	private String fileId;
+}
\ No newline at end of file
diff --git a/src/main/java/com/lilosoft/api/bean/receive/FileDataItem.java b/src/main/java/com/lilosoft/api/bean/receive/FileDataItem.java
new file mode 100644
index 0000000..29fa6f5
--- /dev/null
+++ b/src/main/java/com/lilosoft/api/bean/receive/FileDataItem.java
@@ -0,0 +1,19 @@
+package com.lilosoft.api.bean.receive;
+
+import lombok.Data;
+
+@Data
+public class FileDataItem {
+    private String fileName;
+    private String jsonData;
+    private String fileUrl;
+    private String id;
+    private String fileId;
+
+    private String name;
+
+    private byte[] bytes;
+
+    private String downloadUrl;
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/lilosoft/api/bean/receive/ProjectData.java b/src/main/java/com/lilosoft/api/bean/receive/ProjectData.java
new file mode 100644
index 0000000..57861b3
--- /dev/null
+++ b/src/main/java/com/lilosoft/api/bean/receive/ProjectData.java
@@ -0,0 +1,16 @@
+package com.lilosoft.api.bean.receive;
+
+import lombok.Data;
+
+@Data
+public class ProjectData{
+	private String transactcode;
+	private int times;
+	private String extUrl;
+	private String taskUrl;
+	private String netUrl;
+	private String name;
+	private String replyVoice;
+	private String localId;
+	private String isNet;
+}
\ No newline at end of file
diff --git a/src/main/java/com/lilosoft/api/bean/receive/ReceiveMsgInfo.java b/src/main/java/com/lilosoft/api/bean/receive/ReceiveMsgInfo.java
new file mode 100644
index 0000000..1776bad
--- /dev/null
+++ b/src/main/java/com/lilosoft/api/bean/receive/ReceiveMsgInfo.java
@@ -0,0 +1,31 @@
+package com.lilosoft.api.bean.receive;
+
+import java.util.List;
+import lombok.Data;
+
+@Data
+public class ReceiveMsgInfo{
+	private String msg;
+	private String wordUrl;
+	private String isSkip;
+	private String itemCode;
+	private String code;
+	private String isRpa;
+	private List<FileDataItem> fileData;
+	private String type;
+	private String batchId;
+	private String isPrintWord;
+	private List<Object> labels;
+	private ProjectData projectData;
+	private String artificialType;
+	private String rpaData;
+	private String wordTips;
+	private String scanUrl;
+	private Boolean success;
+	private String fileUrl;
+	private String pageUrl;
+	private String enterpriseId;
+	private String isReceipt;
+	private String projectId;
+	private List<ErrorsItem> errors;
+}
\ No newline at end of file
diff --git a/src/main/java/com/lilosoft/api/controller/MqConsumer.java b/src/main/java/com/lilosoft/api/controller/MqConsumer.java
index a7af44c..cebb542 100644
--- a/src/main/java/com/lilosoft/api/controller/MqConsumer.java
+++ b/src/main/java/com/lilosoft/api/controller/MqConsumer.java
@@ -1,15 +1,15 @@
 package com.lilosoft.api.controller;
 
 import cn.hutool.core.util.IdUtil;
-import cn.hutool.json.JSON;
 import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSON;
 import com.lilosoft.api.api.RobotApi;
 import com.lilosoft.api.bean.RobotCaseRecord;
+import com.lilosoft.api.bean.receive.ReceiveMsgInfo;
 import com.lilosoft.api.service.ApplyService;
+import com.lilosoft.api.service.ComplexService;
 import com.lilosoft.core.utils.ObjectUtils;
 import lombok.extern.slf4j.Slf4j;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.jms.annotation.JmsListener;
@@ -25,6 +25,8 @@ public class MqConsumer {
 
     @Autowired
     private ApplyService applyService;
+    @Autowired
+    private ComplexService complexService;
 
     @Autowired
     private RobotApi robotApi;
@@ -34,9 +36,7 @@ public class MqConsumer {
 
     @JmsListener(destination = "${api.mq}", containerFactory = "jmsListenerContainerQueue")
     public void receiveMsg(HashMap<String, String> text) {
-
-        log.info("receive msg==>{}", JSONUtil.toJsonStr(text));
-
+       // log.info("receive msg==>{}", JSONUtil.toJsonStr(text));
         RobotCaseRecord caseRecord = new RobotCaseRecord();
         caseRecord.setId(IdUtil.simpleUUID());
         caseRecord.setContent(text.get("content"));
@@ -45,15 +45,20 @@ public class MqConsumer {
         caseRecord.setUpdateTime(new Date());
         try {
             robotApi.saveRecord(caseRecord);
-            HashMap<String, Object> entries = JSONUtil.toBean(text.get("content"), HashMap.class);
-            String apply = applyService.webApply(entries);
-            if (ObjectUtils.isEmpty(apply)) {
+
+            String content = text.get("content");
+            ReceiveMsgInfo receiveMsgInfo = JSON.parseObject(content, ReceiveMsgInfo.class);
+
+            // HashMap<String, Object> entries = JSONUtil.toBean(text.get("content"), HashMap.class);
+           // String apply = applyService.webApply(entries);
+            String apply = complexService.windowApply(receiveMsgInfo);
+/*            if (ObjectUtils.isEmpty(apply)) {
                 caseRecord.setSendFlag("2");
                 caseRecord.setMsg("success");
             } else {
                 caseRecord.setSendFlag("1");
                 caseRecord.setMsg(apply);
-            }
+            }*/
             robotApi.saveRecord(caseRecord);
         } catch (Exception e) {
             caseRecord.setSendFlag("1");
diff --git a/src/main/java/com/lilosoft/api/service/ApplyService.java b/src/main/java/com/lilosoft/api/service/ApplyService.java
index a463c86..286ea1c 100644
--- a/src/main/java/com/lilosoft/api/service/ApplyService.java
+++ b/src/main/java/com/lilosoft/api/service/ApplyService.java
@@ -4,6 +4,8 @@ import cn.hutool.core.date.DateUtil;
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
+import com.lilosoft.api.service.complexWindow.CommonData;
+import com.lilosoft.api.service.complexWindow.ComplexWindowAbstract;
 import com.lilosoft.core.utils.Base64Helper;
 import org.springframework.stereotype.Service;
 
@@ -20,21 +22,27 @@ public class ApplyService extends PublicService {
      */
     public String webApply(HashMap<String, Object> paramsMap) throws Exception {
         logger.info(JSONUtil.toJsonStr(paramsMap));
-        String itemCode = paramsMap.get("ItemCode").toString();
-        if(!paramsMap.containsKey("address")){
+        //浜嬮」缂栫爜锛岄€氳繃杩欎釜鑾峰彇闇€瑕佹彁浜ゅ埌缁煎悎绐楀彛鏈嶅姟  绌轰笉鎻愪氦
+        String itemCode = (String) paramsMap.getOrDefault("ItemCode", "");
+        ComplexWindowAbstract complexWindowAbstract = ComplexWindowAbstract.newType(itemCode);
+        CommonData commonData = new CommonData();
+        complexWindowAbstract.doHandleWork(commonData);
+
+
+        if (!paramsMap.containsKey("address")) {
             paramsMap.put("address", "");//鍔炰簨浜鸿仈绯诲湴鍧€
         }
         HashMap<String, Object> formData = new HashMap<>();//闇€瑕佹彁浜ょ殑琛ㄥ崟鏁版嵁锛堜笉鍚屼簨椤逛笉鍚屽瓧娈碉級锛岄渶鏍规嵁formId鑾峰彇琛ㄥ崟瀛楁
         String result = "";//杩斿洖缁撴灉
         boolean check = true;//浜嬮」鏄惁鏌ユ壘鍒帮紝榛樿浜嬮」宸茬粡鏌ユ壘鍒�
-        if("46020400WJ-XK-1104".equals(itemCode)){//鍏叡鍦烘墍鍗敓璁稿彲璇佹敞閿€
+        if ("46020400WJ-XK-1104".equals(itemCode)) {//鍏叡鍦烘墍鍗敓璁稿彲璇佹敞閿€
             ggcswxxkzx(paramsMap, formData);
-        }else {
+        } else {
             check = false;
             result = "鏈煡璇㈠埌鐩稿叧浜嬮」;";
             logger.error(result + JSONUtil.toJsonStr(paramsMap));
         }
-        if(check){
+        if (check) {
             //閫氱敤涓婁紶鎺ュ彛
             result = super.webApply(paramsMap, formData);
         }
@@ -45,7 +53,7 @@ public class ApplyService extends PublicService {
     /**
      * 鍏叡鍦烘墍鍗敓璁稿彲璇佹敞閿€
      */
-    private void ggcswxxkzx(HashMap<String, Object> paramsMap, HashMap<String, Object> formData){
+    private void ggcswxxkzx(HashMap<String, Object> paramsMap, HashMap<String, Object> formData) {
         //缁勮绗笁姝ユ彁浜よ〃鍗曢渶瑕佺殑鏁版嵁锛屾鏁版嵁鏄牴鎹綋鍓嶄簨椤硅〃鍗曞瓧娈佃幏鍙�
         formData.put("ShenQingRiQi", DateUtil.today());//鐢宠鏃ユ湡
         formData.put("XuKeZhengHao", "");//璁稿彲璇佸彿
@@ -55,14 +63,14 @@ public class ApplyService extends PublicService {
         formData.put("FaDingDaiBiaoRen", paramsMap.get("FaDingDaiBiaoRen"));//娉曞畾浠h〃浜�
         formData.put("TongYiSheHuiXinYongDaiMa", paramsMap.get("TongYiSheHuiXinYongDaiMa"));//缁熶竴绀句細淇$敤浠g爜
         JSONArray materials = JSONUtil.parseArray(paramsMap.get("materials"));//鏉愭枡鍒楄〃
-        for (int n = 0, m = materials.size(); n < m ; n++) {
+        for (int n = 0, m = materials.size(); n < m; n++) {
             JSONObject jsonObject1 = materials.getJSONObject(n);
             String fileId = jsonObject1.getStr("fileId");//褰撳墠鏉愭枡缂栫爜
-            if("hygiene".equals(fileId) || "business".equals(fileId)){//鍏叡鍦烘墍鍗敓璁稿彲璇�/钀ヤ笟鎵х収褰掍负涓€绫�
+            if ("hygiene".equals(fileId) || "business".equals(fileId)) {//鍏叡鍦烘墍鍗敓璁稿彲璇�/钀ヤ笟鎵х収褰掍负涓€绫�
                 jsonObject1.putOpt("fileCode", "46020400WJ-XK-1104-00003");
-            } else if("applicationForm".equals(fileId) || "applicationText".equals(fileId)){//鍏充簬娉ㄩ攢鍏叡鍦烘墍鍗敓璁稿彲璇佺殑鐢宠涔�/鐢宠琛ㄥ綊涓轰竴绫�
+            } else if ("applicationForm".equals(fileId) || "applicationText".equals(fileId)) {//鍏充簬娉ㄩ攢鍏叡鍦烘墍鍗敓璁稿彲璇佺殑鐢宠涔�/鐢宠琛ㄥ綊涓轰竴绫�
                 jsonObject1.putOpt("fileCode", "46020400WJ-XK-1104-00002");
-            } else if("idcard".equals(fileId)){//澶氫釜韬唤璇佸綊涓轰竴绫�
+            } else if ("idcard".equals(fileId)) {//澶氫釜韬唤璇佸綊涓轰竴绫�
                 jsonObject1.putOpt("fileCode", "46020400WJ-XK-1104-00001");
             } else {//澶氫綑鏉愭枡褰掍负璇佺収绫�
                 jsonObject1.putOpt("fileCode", "46020400WJ-XK-1104-00003");
@@ -80,7 +88,7 @@ public class ApplyService extends PublicService {
     }
 
     //鍗遍櫓鍖栧鍝佺粡钀ヨ鍙瘉鍙樻洿-娉曚汉鍙樻洿
-    private void wxhxpjyxkzbg(HashMap<String, Object> paramsMap, HashMap<String, Object> formData){
+    private void wxhxpjyxkzbg(HashMap<String, Object> paramsMap, HashMap<String, Object> formData) {
 
         String temp = String.valueOf(formData.get("rpaData"));
         String rpaData = new String(Base64Helper.decode(temp));
@@ -88,26 +96,25 @@ public class ApplyService extends PublicService {
 
         List<Map<String, Object>> handlings = new ArrayList<>();
         Map<String, Object> handling = new HashMap<>();
-        handling.put("eventId","852dcb2bb1aa70255871f75cf4868fa7");     //缁肩獥骞冲彴浜嬮」id
-        handling.put("objectType","O");                                 //浜嬮」闈㈠瀵硅薄锛孭鑷劧浜猴紝O娉曚汉
+        handling.put("eventId", "852dcb2bb1aa70255871f75cf4868fa7");     //缁肩獥骞冲彴浜嬮」id
+        handling.put("objectType", "O");                                 //浜嬮」闈㈠瀵硅薄锛孭鑷劧浜猴紝O娉曚汉
         handlings.add(handling);
-        formData.put("handlings",handlings);
-        formData.put("infoMap",null);                                   //琛ㄥ崟淇℃伅锛屽姙浠惰绱犳帴鍙h幏鍙栵紝姝や簨椤规棤
+        formData.put("handlings", handlings);
+        formData.put("infoMap", null);                                   //琛ㄥ崟淇℃伅锛屽姙浠惰绱犳帴鍙h幏鍙栵紝姝や簨椤规棤
         Map<String, Object> applicantLegal = new HashMap<>();           //鐢宠浜轰俊鎭�
-        applicantLegal.put("applicantName",null);                       //濮撳悕
-        applicantLegal.put("documentId",null);                          //璇佷欢绫诲瀷
-        applicantLegal.put("applicantIdNumber",null);                   //璇佷欢鍙风爜
-        formData.put("applicantLegal",applicantLegal);
+        applicantLegal.put("applicantName", null);                       //濮撳悕
+        applicantLegal.put("documentId", null);                          //璇佷欢绫诲瀷
+        applicantLegal.put("applicantIdNumber", null);                   //璇佷欢鍙风爜
+        formData.put("applicantLegal", applicantLegal);
         Map<String, Object> legalProxy = new HashMap<>();               //娉曚汉淇℃伅锛屾硶浜轰簨椤瑰繀濉�
-        legalProxy.put("legalName",rpa.getStr("principalName"));                               //濮撳悕
-        legalProxy.put("documentId",null);                              //璇佷欢绫诲瀷
-        legalProxy.put("legalIdNumber",rpa.getStr("principalCardNumber"));                           //璇佷欢鍙风爜
-        formData.put("legalProxy",legalProxy);
+        legalProxy.put("legalName", rpa.getStr("principalName"));                               //濮撳悕
+        legalProxy.put("documentId", null);                              //璇佷欢绫诲瀷
+        legalProxy.put("legalIdNumber", rpa.getStr("principalCardNumber"));                           //璇佷欢鍙风爜
+        formData.put("legalProxy", legalProxy);
         List<String> itemsIds = new ArrayList<>();                      //鎯呭舰椤筰d闆嗗悎
         itemsIds.add("d32d382b1b3ff119378c2813bd581aed");               //缁肩獥骞冲彴鎯呭舰椤筰d
-        formData.put("itemsIds",itemsIds);
+        formData.put("itemsIds", itemsIds);
     }
 
 
-
 }
diff --git a/src/main/java/com/lilosoft/api/service/ComplexService.java b/src/main/java/com/lilosoft/api/service/ComplexService.java
new file mode 100644
index 0000000..f004979
--- /dev/null
+++ b/src/main/java/com/lilosoft/api/service/ComplexService.java
@@ -0,0 +1,93 @@
+package com.lilosoft.api.service;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.lilosoft.api.api.OcrApi;
+import com.lilosoft.api.bean.receive.ReceiveMsgInfo;
+import com.lilosoft.api.service.complexWindow.CommonData;
+import com.lilosoft.api.service.complexWindow.ComplexWindowAbstract;
+import com.lilosoft.core.utils.Base64Helper;
+import lombok.extern.slf4j.Slf4j;
+import okhttp3.ResponseBody;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import retrofit2.Response;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 缁肩獥澶勭悊绫�
+ *
+ * @author: zxfei
+ * @date: 2023/10/29 10:51
+ */
+
+@Service
+@Slf4j
+public class ComplexService extends PublicService {
+
+
+    @Autowired
+    private OcrApi ocrApi;
+
+    @Value("${complex.robertServerUrl:''}")
+    protected String robertServerUrl;
+
+    /**
+     * 缁肩獥鐢虫姤
+     */
+    public String windowApply(ReceiveMsgInfo receiveMsgInfo) throws Exception {
+
+
+        logger.info(JSONUtil.toJsonStr(receiveMsgInfo));
+        Boolean success = receiveMsgInfo.getSuccess();
+
+        receiveMsgInfo.getFileData().forEach(item -> {
+
+            Response<ResponseBody> response = ocrApi.downloadFile(item.getFileUrl(), item.getFileName(), "0");
+
+            boolean successful = response.isSuccessful();
+            int code = response.code();
+            if (successful && code == 200) {
+                ResponseBody responseBody = response.body();
+                //涓婁紶鍙楃悊骞冲彴
+                if (responseBody != null) {
+                    try {
+                        byte[] bytes = responseBody.bytes();
+                    } catch (IOException e) {
+                        throw new RuntimeException(e);
+                    }
+                }
+            }
+
+
+        });
+
+
+        if (success) {
+
+            ComplexWindowAbstract complexWindowAbstract = ComplexWindowAbstract.newType(receiveMsgInfo.getItemCode());
+            CommonData commonData = new CommonData();
+            commonData.setRobertServerUrl(robertServerUrl);
+            commonData.setFileData(receiveMsgInfo.getFileData());
+            complexWindowAbstract.doHandleWork(commonData);
+
+        } else {
+            log.info("棰勫浜嬮」鏈€氳繃");
+        }
+
+        String result = "";//杩斿洖缁撴灉
+        boolean check = true;//浜嬮」鏄惁鏌ユ壘鍒帮紝榛樿浜嬮」宸茬粡鏌ユ壘鍒�
+        return result;
+
+    }
+
+}
diff --git a/src/main/java/com/lilosoft/api/service/complexWindow/CommonData.java b/src/main/java/com/lilosoft/api/service/complexWindow/CommonData.java
new file mode 100644
index 0000000..03c8675
--- /dev/null
+++ b/src/main/java/com/lilosoft/api/service/complexWindow/CommonData.java
@@ -0,0 +1,37 @@
+package com.lilosoft.api.service.complexWindow;
+
+
+import com.lilosoft.api.bean.receive.FileDataItem;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 閫氱敤鍙傛暟
+ *
+ * @author:
+ * @date: 2023/7/31 15:27
+ */
+@Data
+public class CommonData {
+
+    private String deviceLogo;
+
+    private String robertServerUrl;
+
+
+    private List<FileDataItem> fileData;
+
+
+    private Date attendanceDate;
+
+    private Long staffId;
+    //褰撳墠鏃ユ湡
+    private String dateStr;
+
+
+
+
+
+}
diff --git a/src/main/java/com/lilosoft/api/service/complexWindow/ComplexWindowAbstract.java b/src/main/java/com/lilosoft/api/service/complexWindow/ComplexWindowAbstract.java
new file mode 100644
index 0000000..ea11859
--- /dev/null
+++ b/src/main/java/com/lilosoft/api/service/complexWindow/ComplexWindowAbstract.java
@@ -0,0 +1,75 @@
+package com.lilosoft.api.service.complexWindow;
+
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.lilosoft.core.enums.TypeEnum;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.util.ObjectUtils;
+
+/**
+ * 缁煎悎绐楀彛鎶借薄绫�
+ *
+ * @author:
+ * @date: 2023/7/31 15:09
+ */
+@Slf4j
+public abstract class ComplexWindowAbstract {
+
+
+    public String url ="/self-device-info/login";
+
+    public String token="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyTnVtIjoibGoiLCJoYW5kbGVBZGRyZXNzSWQiOiIxNDE0MTYyODc4OTk3MDIwNjczIiwiZGVwdElkIjoiNTExNTAwMzEiLCJleHAiOjE2OTg2NzIzNzAsInVzZXJJZCI6IjEzMTIiLCJ3aW5kb3dJZCI6IjE1ODUwOTEyNDU4ODgzNjQ1NDUifQ.2a6N9xc2D_X2LSOpeiUPdMWvaLhOefgMr176pmC-X_k";
+
+    private String type;
+
+    abstract String getType();
+
+    public abstract void doHandleWork(CommonData commonData);
+
+
+    public static ComplexWindowAbstract newType(String type) {
+
+        if (type == TypeEnum.鍗遍櫓鍖栧鍝佺粡钀ヨ鍙硶浜哄彉鏇�.getValue()) {
+            return new WXHXPJYXKFRBG(type);
+        }
+
+
+/*        if (type == TypeEnum.鍥哄畾鐝埗.getValue()) {
+            //return new FixWorkAttendance(type);
+            return new FixWorkOtherAttendance(type);
+        } else if (type == TypeEnum.鑷敱宸ユ椂.getValue()) {
+            return new FreedomWorkAttendance(type);
+        }
+        if (type == TypeEnum.鎺掔彮鍒�.getValue()) {
+            return new ScheduleWorkAttendance(type);
+        } else {
+            throw new AppException(String.format("鏈煡鐨勭被鍨嬬爜:%s", type));
+        }*/
+        // throw new Exception(String.format("鏈煡鐨勭被鍨嬬爜:%s", type));
+
+        return null;
+    }
+
+
+    public String getToken() {
+        try {
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.put("deviceLogo","5c:1b:f4:e2");
+
+            String rest = HttpUtil.post(url, jsonObject.toJSONString());
+
+            log.info("get token==>>{}",rest);
+
+        } catch (Exception e) {
+            log.error("鑾峰彇TOKEN寮傚父", e);
+        }
+
+        return this.token;
+    }
+
+
+    public ComplexWindowAbstract(String type) {
+        this.type = type;
+    }
+
+}
diff --git a/src/main/java/com/lilosoft/api/service/complexWindow/WXHXPJYXKFRBG.java b/src/main/java/com/lilosoft/api/service/complexWindow/WXHXPJYXKFRBG.java
new file mode 100644
index 0000000..cb784a9
--- /dev/null
+++ b/src/main/java/com/lilosoft/api/service/complexWindow/WXHXPJYXKFRBG.java
@@ -0,0 +1,162 @@
+package com.lilosoft.api.service.complexWindow;
+
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.extra.spring.SpringUtil;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSON;
+import com.lilosoft.api.bean.receive.FileDataItem;
+import com.lilosoft.complex.Rest;
+import com.lilosoft.complex.matter.model.req.*;
+import com.lilosoft.complex.matter.model.rsp.AcceptRspInfo;
+import com.lilosoft.complex.matter.model.rsp.LoginRspInfo;
+import com.lilosoft.complex.matter.model.rsp.MatterListInfo;
+import com.lilosoft.complex.matter.model.rsp.MatterRespInfo;
+import com.lilosoft.complex.matter.model.rsp.matter.ChildrenItem;
+import com.lilosoft.complex.matter.model.rsp.matter.MatterWorkInfo;
+import com.lilosoft.complex.matter.service.IComplexMatterService;
+import com.lilosoft.core.enums.TypeEnum;
+import com.lilosoft.core.enums.YesNoEnum;
+import lombok.extern.slf4j.Slf4j;
+import okhttp3.ResponseBody;
+import org.springframework.beans.BeanUtils;
+import org.springframework.util.ObjectUtils;
+import retrofit2.Response;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 鍗遍櫓鍖栧鍝佺粡钀ヨ鍙硶浜哄彉鏇�
+ *
+ * @author:
+ * @date: 2023/7/31 15:15
+ */
+@Slf4j
+public class WXHXPJYXKFRBG extends ComplexWindowAbstract {
+
+
+    private IComplexMatterService complexMatterService;
+
+    public static String matterName = "浠庝簨鍓ф瘨銆佹槗鍒剁垎銆佹苯娌瑰姞娌圭珯銆佷笓鐢ㄥ嵄鍖栧搧浠撳偍鐨勪紒涓氾紝涓ぎ浼佷笟鎵€灞炵渷绾�";
+
+
+    public WXHXPJYXKFRBG(String type) {
+        super(type);
+        this.complexMatterService = SpringUtil.getBean(IComplexMatterService.class);
+
+    }
+
+    @Override
+    String getType() {
+        return TypeEnum.鍗遍櫓鍖栧鍝佺粡钀ヨ鍙硶浜哄彉鏇�.getValue();
+    }
+
+    @Override
+    public void doHandleWork(CommonData commonData) {
+        //鑾峰彇鏁版嵁璧勬簮 todo
+
+
+        //涓嬭浇闄勪欢
+        List<FileDataItem> fileCollect = commonData.getFileData().stream().map(item -> {
+            FileDataItem fileDataItem = new FileDataItem();
+            BeanUtils.copyProperties(item, fileDataItem);
+            String downloadPath = commonData.getRobertServerUrl() + item.getFileUrl();
+
+            byte[] bytes = HttpUtil.downloadBytes(downloadPath);
+            fileDataItem.setBytes(bytes);
+            return fileDataItem;
+        }).collect(Collectors.toList());
+
+        //閫氳繃鍚嶇О鏌ヨ
+        DeviceLoginReq deviceLoginReq = new DeviceLoginReq();
+        deviceLoginReq.setDeviceLogo(commonData.getDeviceLogo());
+        Rest<LoginRspInfo> loginRspInfoRest = complexMatterService.deviceLogin(deviceLoginReq);
+        if (loginRspInfoRest.getCode() == YesNoEnum.YES.getValue()) {
+            //璁惧鐧诲綍鎴愬姛 涓婁紶闄勪欢
+
+            fileCollect.stream().forEach(item -> {
+                Rest<String> uploadFileRest = complexMatterService.uploadFile(commonData.getDeviceLogo(), item.getBytes(), item.getFileName());
+                if (uploadFileRest.getCode() == YesNoEnum.YES.getValue()) {
+                    item.setDownloadUrl(uploadFileRest.getData());
+                }
+            });
+
+
+            //閫氳繃浜嬮」鏌ヨeventId
+            ImplementationReq implementationReq = new ImplementationReq();
+            implementationReq.setImplementName(matterName);
+            Rest<MatterListInfo> matterRest = complexMatterService.findMatters(commonData.getDeviceLogo(), implementationReq);
+            if (matterRest.getCode() == YesNoEnum.YES.getValue()) {
+                List<MatterRespInfo> matterListInfos = matterRest.getData().getRecords();
+                if (!ObjectUtils.isEmpty(matterListInfos)) {
+                    MatterRespInfo matterRespInfo = matterListInfos.get(0);
+                    String eventId = matterRespInfo.getEventId();
+                    String eventObjectType = matterRespInfo.getEventObjectType();
+
+                    //鏌ヨ鍔炵悊浜嬮」鎯呭舰
+                    Rest<MatterWorkInfo> matterWorkInfoRest = complexMatterService.doWorkMatterSearch(commonData.getDeviceLogo(), eventId);
+                    if (matterWorkInfoRest.getCode() == YesNoEnum.YES.getValue()) {
+                        MatterWorkInfo matterWorkInfo = matterWorkInfoRest.getData();
+                        ChildrenItem childrenItem = matterWorkInfo.getChildren().stream().filter(f -> "鍙樻洿娉曚汉".equals(f.getLabel())).findFirst().orElseGet(() -> null);
+
+                        if (!ObjectUtils.isEmpty(childrenItem)) {
+                            MaterialsItem materialsItem = new MaterialsItem();
+
+                            //鏋勫缓鍙楃悊鏉愭枡闄勪欢
+                            List<MaterialsItem> materialsItemList = childrenItem.getMaterials().stream().map(item -> {
+                                String name = item.getName();
+                                if (StrUtil.contains(name, "鍙樻洿鐢宠琛�")) {
+                                    matchUploadFile(fileCollect, materialsItem,"鐢宠涔�");
+                                }else if(StrUtil.contains(name, "瀹夊叏璧勬牸璇佷功")){
+                                    matchUploadFile(fileCollect, materialsItem,"鍚堟牸璇�");
+                                }else if(StrUtil.contains(name, "鍖栧鍝佺粡钀ヨ鍙瘉")){
+                                    matchUploadFile(fileCollect, materialsItem,"璁稿彲璇�");
+                                }
+                                materialsItem.setMaterialForm(item.getFromId());
+                                materialsItem.setMaterialId(item.getId());
+
+                                return materialsItem;
+
+                            }).collect(Collectors.toList());
+
+
+                        }
+
+                    }
+
+
+                    //鎻愪氦鍝嶅簲鐨勫彈鐞�
+
+                    AcceptReq acceptReq = new AcceptReq();
+
+                    List<HandlingsItem> handlingsItemList = new ArrayList<>();
+                    HandlingsItem handlingsItem = new HandlingsItem();
+                    handlingsItem.setEventId(eventId);
+                    handlingsItem.setObjectType(eventObjectType);
+                    handlingsItemList.add(handlingsItem);
+                    acceptReq.setHandlings(handlingsItemList);
+
+
+                    Rest<AcceptRspInfo> acceptRest = complexMatterService.accept(commonData.getDeviceLogo(), acceptReq);
+                    if (acceptRest.getCode() == YesNoEnum.YES.getValue()) {
+                        log.info("鍙楃悊鎴愬姛==>{}", JSON.toJSONString(acceptRest));
+                    }
+                }
+
+
+            }
+
+        }
+
+    }
+
+    private static void matchUploadFile(List<FileDataItem> fileCollect, MaterialsItem materialsItem,String fileName) {
+        FileDataItem fileDataItem = fileCollect.stream().filter(f -> StrUtil.contains(f.getFileName(), fileName)).findFirst().orElseGet(() -> null);
+        if(!ObjectUtils.isEmpty(fileDataItem)){
+            materialsItem.setUploadFileName(fileDataItem.getFileName());
+            materialsItem.setMaterialPath(fileDataItem.getDownloadUrl());
+        }
+    }
+}
diff --git a/src/main/java/com/lilosoft/complex/AbstractComplexService.java b/src/main/java/com/lilosoft/complex/AbstractComplexService.java
new file mode 100644
index 0000000..4828063
--- /dev/null
+++ b/src/main/java/com/lilosoft/complex/AbstractComplexService.java
@@ -0,0 +1,54 @@
+package com.lilosoft.complex;
+
+import com.lilosoft.complex.matter.model.req.DeviceLoginReq;
+import com.lilosoft.complex.matter.model.rsp.LoginRspInfo;
+import com.lilosoft.complex.matter.service.IComplexMatterService;
+import com.lilosoft.core.exception.AppException;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.util.ObjectUtils;
+
+import java.util.Map;
+
+
+@Slf4j
+public abstract class AbstractComplexService implements IComplexMatterService {
+
+    //缁肩獥璁块棶鍦板潃
+    @Value("${complex.host:}")
+    protected String host;
+
+    //缁肩獥璁惧缂栫爜 澶氫釜閫楀彿鍒嗗壊
+    @Value("${complex.deviceCode:''}")
+    protected String deviceCode;
+
+    @Value("${hik.appSecret:''}")
+    protected String appSecret;
+
+    //缁肩獥鎺ヤ欢token  deviceCode--瀵瑰簲tokenMap
+    public Map<String, String> tokenMap;
+
+    //缁肩獥鎺ヤ欢token
+    public String token;
+
+
+    @Override
+    public String getToken(String deviceLogo) {
+        try {
+
+            String deviceToken = tokenMap.getOrDefault(deviceLogo, "");
+            if (ObjectUtils.isEmpty(deviceToken)) {
+                DeviceLoginReq loginReq = new DeviceLoginReq();
+                loginReq.setDeviceLogo(deviceLogo);
+                Rest<LoginRspInfo> loginRspInfoRest = this.deviceLogin(loginReq);
+                return loginRspInfoRest.getData().getToken();
+            } else {
+                return deviceToken;
+            }
+        } catch (Exception e) {
+            log.error("鑾峰彇TOKEN寮傚父", e);
+            throw new AppException(e.getMessage());
+        }
+    }
+
+}
diff --git a/src/main/java/com/lilosoft/complex/BaseReq.java b/src/main/java/com/lilosoft/complex/BaseReq.java
new file mode 100644
index 0000000..1af09f1
--- /dev/null
+++ b/src/main/java/com/lilosoft/complex/BaseReq.java
@@ -0,0 +1,13 @@
+package com.lilosoft.complex;
+
+import lombok.Data;
+
+/**
+ * 娴峰悍璇锋眰鍩虹绫�
+ * @author:
+ * @date: 2023/4/12 17:57
+ */
+@Data
+public class BaseReq {
+
+}
diff --git a/src/main/java/com/lilosoft/complex/ComplexApiRest.java b/src/main/java/com/lilosoft/complex/ComplexApiRest.java
new file mode 100644
index 0000000..bf6282c
--- /dev/null
+++ b/src/main/java/com/lilosoft/complex/ComplexApiRest.java
@@ -0,0 +1,96 @@
+
+
+package com.lilosoft.complex;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONPObject;
+import com.alibaba.fastjson.TypeReference;
+import com.lilosoft.complex.matter.model.rsp.LoginRspInfo;
+import com.lilosoft.core.utils.Json;
+import lombok.Data;
+
+@Data
+public class ComplexApiRest<T> {
+    private T result;
+    private Integer code;
+    private String message;
+    private Boolean success;
+
+    private Long timestamp;
+
+
+    public static void main(String[] args) {
+        String str="{\n" +
+                "    \"success\": true,\n" +
+                "    \"message\": \"鎿嶄綔鎴愬姛锛乗",\n" +
+                "    \"code\": 200,\n" +
+                "    \"result\": {\n" +
+                "        \"token\": \"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyTnVtIjoiZ29uZ2ppIiwic2VsZkRldmljZUlkIjoiNiIsImhhbmRsZUFkZHJlc3NJZCI6IjE0OTk2NTA0ODgyMzEwNzE3NDYiLCJleHAiOjE2OTUyMjk5MTksInVzZXJJZCI6IjExMTIiLCJ3aW5kb3dJZCI6IjE0OTk2NTA1NTM0MTA1NTU5MDYifQ.ADZQR8AIo8OHtuUJBskBx3w2yaqHHsQLMSBamYvf6YE\",\n" +
+                "        \"sysUser\": {\n" +
+                "            \"createBy\": 1,\n" +
+                "            \"createTime\": \"2021-08-16 16:38:17\",\n" +
+                "            \"updateBy\": null,\n" +
+                "            \"updateTime\": \"2023-08-12 10:40:34\",\n" +
+                "            \"delFlag\": \"N\",\n" +
+                "            \"userId\": 1112,\n" +
+                "            \"userName\": \"涓囬潚闈抃",\n" +
+                "            \"sex\": \"鐢穃",\n" +
+                "            \"loginName\": null,\n" +
+                "            \"userNumber\": \"gongji\",\n" +
+                "            \"dept\": null,\n" +
+                "            \"deptId\": 306,\n" +
+                "            \"email\": \"56462@qq.com\",\n" +
+                "            \"address\": null,\n" +
+                "            \"idCard\": \"522121199208022252\",\n" +
+                "            \"phoneNumber\": \"18888888888\",\n" +
+                "            \"workPhone\": \"17778445521\",\n" +
+                "            \"avatar\": \"/mnt/jpg/2023-08-12/3bf75fd4301da7469c83e8e35e233c65.jpg\",\n" +
+                "            \"startNumber\": null,\n" +
+                "            \"userType\": null,\n" +
+                "            \"password\": \"632a02caecc0bb7b\",\n" +
+                "            \"passwordState\": \"Y\",\n" +
+                "            \"salt\": \"ZGimxeDr\",\n" +
+                "            \"status\": \"Y\",\n" +
+                "            \"remark\": \"\",\n" +
+                "            \"areaCode\": \"510100000000\",\n" +
+                "            \"hometown\": null,\n" +
+                "            \"windowId\": null,\n" +
+                "            \"centerUserId\": \"123456789\",\n" +
+                "            \"value\": null,\n" +
+                "            \"label\": null,\n" +
+                "            \"dkUserId\": null,\n" +
+                "            \"dkUnionId\": null,\n" +
+                "            \"changePwTime\": \"2023-08-25 10:03:46\",\n" +
+                "            \"sysRole\": null,\n" +
+                "            \"isWaiter\": \"N\"\n" +
+                "        },\n" +
+                "        \"selfDeviceInfo\": {\n" +
+                "            \"selfDeviceId\": \"6\",\n" +
+                "            \"deviceLogo\": \"uutest\",\n" +
+                "            \"note\": \"寮犺繙娴穃",\n" +
+                "            \"userId\": \"1112\",\n" +
+                "            \"windowId\": \"1499650553410555906\",\n" +
+                "            \"createBy\": \"1\",\n" +
+                "            \"createTime\": \"2023-08-25 15:11:41\",\n" +
+                "            \"updateBy\": null,\n" +
+                "            \"updateTime\": null,\n" +
+                "            \"delFlag\": \"N\",\n" +
+                "            \"coordinate\": \"104.090953,30.767351\",\n" +
+                "            \"ticketTitle\": null,\n" +
+                "            \"tips\": null,\n" +
+                "            \"workHours\": null,\n" +
+                "            \"telephone\": \"9528\",\n" +
+                "            \"floorId\": \"1499650525505851393\",\n" +
+                "            \"handleAddressId\": \"1499650488231071746\"\n" +
+                "        }\n" +
+                "    },\n" +
+                "    \"timestamp\": 1695193919663\n" +
+                "}\n";
+
+        ComplexApiRest<LoginRspInfo> loginRspInfoComplexApiRest = JSON.parseObject(str, new TypeReference<ComplexApiRest<LoginRspInfo>>() {
+        });
+
+        System.out.println(JSON.toJSONString(loginRspInfoComplexApiRest));
+
+    }
+}
diff --git a/src/main/java/com/lilosoft/complex/IComplexService.java b/src/main/java/com/lilosoft/complex/IComplexService.java
new file mode 100644
index 0000000..f0fc144
--- /dev/null
+++ b/src/main/java/com/lilosoft/complex/IComplexService.java
@@ -0,0 +1,10 @@
+package com.lilosoft.complex;
+
+/**
+ * 缁肩獥鍩虹鎺ュ彛绫�
+ * @author: zxfei
+ * @date: 2023/10/31 11:36
+ */
+public interface IComplexService {
+    String getToken(String deviceLogo);
+}
diff --git a/src/main/java/com/lilosoft/complex/Rest.java b/src/main/java/com/lilosoft/complex/Rest.java
new file mode 100644
index 0000000..4217090
--- /dev/null
+++ b/src/main/java/com/lilosoft/complex/Rest.java
@@ -0,0 +1,99 @@
+
+
+package com.lilosoft.complex;
+
+public class Rest<T> {
+
+    /**
+     * 鎴愬姛
+     */
+    public static final int SUCCESS = 1;
+
+    /**
+     * 澶辫触
+     */
+    public static final int FAIL = -1;
+
+    private T data;
+    private Integer code;
+    private String msg;
+
+    private Object dict;
+
+    public T getData() {
+        return data;
+    }
+
+    public void setData(T data) {
+        this.data = data;
+    }
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public void setCode(Integer code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    public Object getDict() {
+        return dict;
+    }
+
+    public void setDict(Object dict) {
+        this.dict = dict;
+    }
+
+    public static <T> Rest<T> ok() {
+        return restResult(null, SUCCESS, "鎿嶄綔鎴愬姛");
+    }
+
+    public static <T> Rest<T> ok(T data) {
+        return restResult(data, SUCCESS, "鎿嶄綔鎴愬姛");
+    }
+
+    public static <T> Rest<T> ok(String msg) {
+        return restResult(null, SUCCESS, msg);
+    }
+
+    public static <T> Rest<T> ok(String msg, T data) {
+        return restResult(data, SUCCESS, msg);
+    }
+
+    public static <T> Rest<T> fail() {
+        return restResult(null, FAIL, "鎿嶄綔澶辫触");
+    }
+
+    public static <T> Rest<T> fail(String msg) {
+        return restResult(null, FAIL, msg);
+    }
+
+    public static <T> Rest<T> fail(T data) {
+        return restResult(data, FAIL, "鎿嶄綔澶辫触");
+    }
+
+    public static <T> Rest<T> fail(String msg, T data) {
+        return restResult(data, FAIL, msg);
+    }
+
+    public static <T> Rest<T> fail(int code, String msg) {
+        return restResult(null, code, msg);
+    }
+
+
+    private static <T> Rest<T> restResult(T data, int code, String msg) {
+        Rest<T> rest = new Rest<>();
+        rest.setCode(code);
+        rest.setData(data);
+        rest.setMsg(msg);
+        return rest;
+    }
+}
diff --git a/src/main/java/com/lilosoft/complex/matter/model/req/AcceptReq.java b/src/main/java/com/lilosoft/complex/matter/model/req/AcceptReq.java
new file mode 100644
index 0000000..56b6a51
--- /dev/null
+++ b/src/main/java/com/lilosoft/complex/matter/model/req/AcceptReq.java
@@ -0,0 +1,18 @@
+package com.lilosoft.complex.matter.model.req;
+
+import java.util.List;
+import lombok.Data;
+
+@Data
+public class AcceptReq{
+	private ApplicantLeagal applicantLegal;
+	private Object agency;
+	private List<String> itemsIds;
+	private List<MaterialsItem> materials;
+	private String isStaging;
+	private ApplicantPersonal applicantPersonal;
+	private List<HandlingsItem> handlings;
+	private InfoMap infoMap;
+	private Object legalProxy;
+	private Object thingId;
+}
\ No newline at end of file
diff --git a/src/main/java/com/lilosoft/complex/matter/model/req/ApplicantLeagal.java b/src/main/java/com/lilosoft/complex/matter/model/req/ApplicantLeagal.java
new file mode 100644
index 0000000..44710d3
--- /dev/null
+++ b/src/main/java/com/lilosoft/complex/matter/model/req/ApplicantLeagal.java
@@ -0,0 +1,12 @@
+package com.lilosoft.complex.matter.model.req;
+
+import lombok.Data;
+
+@Data
+public class ApplicantLeagal {
+	private String phone;
+	private String applicantSex;
+	private String documentId;
+	private String applicantName;
+	private String applicantIdNumber;
+}
\ No newline at end of file
diff --git a/src/main/java/com/lilosoft/complex/matter/model/req/ApplicantPersonal.java b/src/main/java/com/lilosoft/complex/matter/model/req/ApplicantPersonal.java
new file mode 100644
index 0000000..d58c463
--- /dev/null
+++ b/src/main/java/com/lilosoft/complex/matter/model/req/ApplicantPersonal.java
@@ -0,0 +1,12 @@
+package com.lilosoft.complex.matter.model.req;
+
+import lombok.Data;
+
+@Data
+public class ApplicantPersonal{
+	private String phone;
+	private String applicantSex;
+	private String documentId;
+	private String applicantName;
+	private String applicantIdNumber;
+}
\ No newline at end of file
diff --git a/src/main/java/com/lilosoft/complex/matter/model/req/DeviceLoginReq.java b/src/main/java/com/lilosoft/complex/matter/model/req/DeviceLoginReq.java
new file mode 100644
index 0000000..13b8492
--- /dev/null
+++ b/src/main/java/com/lilosoft/complex/matter/model/req/DeviceLoginReq.java
@@ -0,0 +1,8 @@
+package com.lilosoft.complex.matter.model.req;
+
+import lombok.Data;
+
+@Data
+public class DeviceLoginReq {
+	private String deviceLogo;
+}
\ No newline at end of file
diff --git a/src/main/java/com/lilosoft/complex/matter/model/req/HandlingsItem.java b/src/main/java/com/lilosoft/complex/matter/model/req/HandlingsItem.java
new file mode 100644
index 0000000..86a3d76
--- /dev/null
+++ b/src/main/java/com/lilosoft/complex/matter/model/req/HandlingsItem.java
@@ -0,0 +1,9 @@
+package com.lilosoft.complex.matter.model.req;
+
+import lombok.Data;
+
+@Data
+public class HandlingsItem{
+	private String eventId;
+	private String objectType;
+}
\ No newline at end of file
diff --git a/src/main/java/com/lilosoft/complex/matter/model/req/ImplementationReq.java b/src/main/java/com/lilosoft/complex/matter/model/req/ImplementationReq.java
new file mode 100644
index 0000000..ecb2eb1
--- /dev/null
+++ b/src/main/java/com/lilosoft/complex/matter/model/req/ImplementationReq.java
@@ -0,0 +1,25 @@
+package com.lilosoft.complex.matter.model.req;
+
+import lombok.Data;
+
+/**
+ * 浜嬮」鏌ヨ
+ *
+ * @author: zxfei
+ * @date: 2023/10/30 16:50
+ */
+@Data
+public class ImplementationReq {
+
+    private Integer currentPage;
+    
+    private Integer pageSize;
+
+    private String eventObjectType;
+
+    private String crossFlag;
+
+    private String implementName;
+
+
+}
diff --git a/src/main/java/com/lilosoft/complex/matter/model/req/InfoMap.java b/src/main/java/com/lilosoft/complex/matter/model/req/InfoMap.java
new file mode 100644
index 0000000..5ef2639
--- /dev/null
+++ b/src/main/java/com/lilosoft/complex/matter/model/req/InfoMap.java
@@ -0,0 +1,9 @@
+package com.lilosoft.complex.matter.model.req;
+
+import lombok.Data;
+
+@Data
+public class InfoMap{
+	private String sjrdz;
+	private String rqkdata;
+}
\ No newline at end of file
diff --git a/src/main/java/com/lilosoft/complex/matter/model/req/MaterialsItem.java b/src/main/java/com/lilosoft/complex/matter/model/req/MaterialsItem.java
new file mode 100644
index 0000000..41eeec3
--- /dev/null
+++ b/src/main/java/com/lilosoft/complex/matter/model/req/MaterialsItem.java
@@ -0,0 +1,11 @@
+package com.lilosoft.complex.matter.model.req;
+
+import lombok.Data;
+
+@Data
+public class MaterialsItem{
+	private String uploadFileName;
+	private String materialForm;
+	private String materialPath;
+	private String materialId;
+}
\ No newline at end of file
diff --git a/src/main/java/com/lilosoft/complex/matter/model/req/MatterReq.java b/src/main/java/com/lilosoft/complex/matter/model/req/MatterReq.java
new file mode 100644
index 0000000..f2c2d26
--- /dev/null
+++ b/src/main/java/com/lilosoft/complex/matter/model/req/MatterReq.java
@@ -0,0 +1,11 @@
+package com.lilosoft.complex.matter.model.req;
+
+
+import lombok.Data;
+
+@Data
+public class MatterReq {
+
+    //浜嬩欢id
+    private String eventIds;
+}
diff --git a/src/main/java/com/lilosoft/complex/matter/model/req/UploadFileReq.java b/src/main/java/com/lilosoft/complex/matter/model/req/UploadFileReq.java
new file mode 100644
index 0000000..a99f03d
--- /dev/null
+++ b/src/main/java/com/lilosoft/complex/matter/model/req/UploadFileReq.java
@@ -0,0 +1,14 @@
+package com.lilosoft.complex.matter.model.req;
+
+import lombok.Data;
+
+import java.io.File;
+
+@Data
+public class UploadFileReq {
+    private String conversionImage = "Y";
+
+
+    private File file;
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/lilosoft/complex/matter/model/rsp/AcceptRspInfo.java b/src/main/java/com/lilosoft/complex/matter/model/rsp/AcceptRspInfo.java
new file mode 100644
index 0000000..b62f5ec
--- /dev/null
+++ b/src/main/java/com/lilosoft/complex/matter/model/rsp/AcceptRspInfo.java
@@ -0,0 +1,154 @@
+package com.lilosoft.complex.matter.model.rsp;
+
+import java.util.List;
+import lombok.Data;
+
+@Data
+public class AcceptRspInfo{
+	private Object handler;
+	private Object deptName;
+	private Object btsName;
+	private String handleAddressId;
+	private String isOneThing;
+	private Object cycleAndSteps;
+	private Object endDate;
+	private Object functionRole;
+	private Object printCorrectionReceipt;
+	private Object handleDeptName;
+	private Object createUserName;
+	private Object handlerName;
+	private List<Object> areas;
+	private String acceptAreaCode;
+	private Object tokenUser;
+	private Object businessTacheName;
+	private Object floorId;
+	private String implementName;
+	private Object stateName;
+	private Object areaName;
+	private String acceptObjectType;
+	private boolean orderByLimitTime;
+	private String isTongBan;
+	private String state;
+	private String applicantId;
+	private String unifyCode;
+	private Object deptId;
+	private Object isIssue;
+	private Object suspendSecond;
+	private Object eventType;
+	private Object packages;
+	private Object waitHandlingSearch;
+	private Object replyPrintLicence;
+	private Object eventIds;
+	private Object applicantIdNumber;
+	private Object extend;
+	private Object itemId;
+	private Object registerAddress;
+	private Object hotNum;
+	private String phone;
+	private String sourceType;
+	private Object handlingIds;
+	private String doSource;
+	private Object infoMap;
+	private Object applyCode;
+	private Object situationItems;
+	private int btsOrder;
+	private String startDate;
+	private Object printNoAccept;
+	private Object timeLimitState;
+	private String businessTacheId;
+	private String submitType;
+	private Object btsIds;
+	private Object eventIdAndTacheIds;
+	private Object timingStartTime;
+	private String acceptIsPrint;
+	private Object thingHandlingId;
+	private Object conditionTime;
+	private Object situationId;
+	private Object stepResult;
+	private Object printFinishBook;
+	private String delFlag;
+	private Object auditState;
+	private Object search;
+	private Object rightsDeptName;
+	private Object commAddress;
+	private Object handlerPhone;
+	private String isDissolve;
+	private String handlingId;
+	private Object situations;
+	private Object printUpload;
+	private Object printAccept;
+	private Object updateTime;
+	private String currentArea;
+	private String userId;
+	private Object applicant;
+	private Object thingId;
+	private String legalPersonId;
+	private Object dealAreaCode;
+	private Object rightsDeptId;
+	private String createTime;
+	private String ecId;
+	private String handlingCode;
+	private Object situationItemIds;
+	private Object eventTypeName;
+	private Object warningTimeAll;
+	private int num;
+	private String implementCoding;
+	private Object acceptDeptName;
+	private Object limitDay;
+	private String businessTacheCode;
+	private Object selectSituationItems;
+	private String eventObjectType;
+	private Object handlingUseTime;
+	private Object situationIds;
+	private int handlingVersion;
+	private Object processName;
+	private Object windowName;
+	private Object deptIds;
+	private Object dealAreaName;
+	private String endIsPrint;
+	private String eventId;
+	private Object acceptDeptId;
+	private HandleAddress handleAddress;
+	private String applicantName;
+	private Object printLicence;
+	private Object acceptAreaName;
+	private Object eventHandleKind;
+	private String windowId;
+	private Object areaCode;
+	private Object materials;
+	private Object windowUserId;
+	private Object timingEndTime;
+	private Object ecName;
+	private Object areaLinkCode;
+	private Object beyondTime;
+	private Object note;
+	private List<Object> areaLinks;
+	private Object auditAreaCode;
+	private String btsId;
+	private Object cycleAndStep;
+	private Object stepId;
+	private Object tenantCode;
+	private Object states;
+	private Object tenantName;
+	private Object updateBy;
+	private String handlerId;
+	private Object legalPerson;
+	private Object eventImplementation;
+	private Object warningTime;
+	private Object areaOrder;
+	private Object eventIdAndTacheId;
+	private Object handleDept;
+	private String resultsHandlingType;
+	private Object isStaging;
+	private Object thingName;
+	private Object printDocument;
+	private Object userName;
+	private Object timeLimit;
+	private Object areaCodeList;
+	private Object oneThingExampleId;
+	private String createBy;
+	private Object systemCode;
+	private Object beyondTimeAll;
+	private Object isTimeout;
+	private Object bjlx;
+}
\ No newline at end of file
diff --git a/src/main/java/com/lilosoft/complex/matter/model/rsp/HandleAddress.java b/src/main/java/com/lilosoft/complex/matter/model/rsp/HandleAddress.java
new file mode 100644
index 0000000..343799a
--- /dev/null
+++ b/src/main/java/com/lilosoft/complex/matter/model/rsp/HandleAddress.java
@@ -0,0 +1,26 @@
+package com.lilosoft.complex.matter.model.rsp;
+
+import java.util.List;
+import lombok.Data;
+
+@Data
+public class HandleAddress{
+	private String handleAddressDetail;
+	private int isCenter;
+	private List<String> callNotification;
+	private Object eventId;
+	private String handleAddressId;
+	private int distance;
+	private double latitude;
+	private int userId;
+	private String areaCode;
+	private String queueNumberRule;
+	private String areaName;
+	private String areaLevel;
+	private String state;
+	private String stateDate;
+	private int timeCost;
+	private int kilometre;
+	private String queuingRules;
+	private double longitude;
+}
\ No newline at end of file
diff --git a/src/main/java/com/lilosoft/complex/matter/model/rsp/LoginRspInfo.java b/src/main/java/com/lilosoft/complex/matter/model/rsp/LoginRspInfo.java
new file mode 100644
index 0000000..4262cd2
--- /dev/null
+++ b/src/main/java/com/lilosoft/complex/matter/model/rsp/LoginRspInfo.java
@@ -0,0 +1,10 @@
+package com.lilosoft.complex.matter.model.rsp;
+
+import lombok.Data;
+
+@Data
+public class LoginRspInfo{
+	private SelfDeviceInfo selfDeviceInfo;
+	private SysUser sysUser;
+	private String token;
+}
\ No newline at end of file
diff --git a/src/main/java/com/lilosoft/complex/matter/model/rsp/MatterListInfo.java b/src/main/java/com/lilosoft/complex/matter/model/rsp/MatterListInfo.java
new file mode 100644
index 0000000..300f424
--- /dev/null
+++ b/src/main/java/com/lilosoft/complex/matter/model/rsp/MatterListInfo.java
@@ -0,0 +1,12 @@
+package com.lilosoft.complex.matter.model.rsp;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class MatterListInfo {
+
+    private List<MatterRespInfo> records;
+
+}
diff --git a/src/main/java/com/lilosoft/complex/matter/model/rsp/MatterRespInfo.java b/src/main/java/com/lilosoft/complex/matter/model/rsp/MatterRespInfo.java
new file mode 100644
index 0000000..fae9234
--- /dev/null
+++ b/src/main/java/com/lilosoft/complex/matter/model/rsp/MatterRespInfo.java
@@ -0,0 +1,85 @@
+package com.lilosoft.complex.matter.model.rsp;
+
+import lombok.Data;
+
+@Data
+public class MatterRespInfo{
+	private Object factSheet;
+	private Object sourceId;
+	private String deptName;
+	private Object endDate;
+	private String onlineReservation;
+	private Object afternoonStartTime;
+	private String implementCoding;
+	private Object runNumbers;
+	private String typeIdFr;
+	private String eventObjectType;
+	private String crossFlag;
+	private String selfServiceTerminals;
+	private Object dfjha;
+	private String implementName;
+	private Object electronicSealPath;
+	private Object classificationDfZrr;
+	private String depthId;
+	private Object afternoonEndTime;
+	private String state;
+	private String handlingItemCode;
+	private String logisticeExpress;
+	private Object limitNum;
+	private String eventId;
+	private int useId;
+	private Object legalLimitTime;
+	private int deptId;
+	private String eventType;
+	private String eventHandleKind;
+	private Object extend;
+	private Object contrastRatio;
+	private Object xsfs;
+	private String typeIdZrr;
+	private String areaCode;
+	private Object hotNum;
+	private Object thingEventId;
+	private Object promiseLimitTime;
+	private Object sourceType;
+	private Object classificationDfFr;
+	private String eventHandleKindDesc;
+	private Object formData;
+	private Object checkInExplanation;
+	private Object accessGrant;
+	private Object startDate;
+	private Object dfjhaType;
+	private Object integrationMatterName;
+	private Object integrationInputName;
+	private Object includeIntegration;
+	private Object remark;
+	private Object thingSituation;
+	private Object delFlag;
+	private Object morningEndTime;
+	private Object isApproval;
+	private Object localAndIntegrationIdentical;
+	private Object fullOnlineHandle;
+	private int businessFlowId;
+	private String parentEventId;
+	private Object assHandle;
+	private String onlinePayment;
+	private Object requestType;
+	private String resultsHandlingType;
+	private String enterHall;
+	private Object onlineHandleSystem;
+	private Object eventTypeDetail;
+	private Object optionalWeek;
+	private Object eventCharacterMap;
+	private Object morningStartTime;
+	private Object thingId;
+	private Object schedulingRules;
+	private Object specifyTime;
+	private Object checkIn;
+	private String ecId;
+	private Object eventTypeName;
+	private String networkOffice;
+	private Object settledFilePath;
+	private String bjlx;
+	private String stateDate;
+	private Object unitOfLimitTime;
+	private Object resultsDefines;
+}
\ No newline at end of file
diff --git a/src/main/java/com/lilosoft/complex/matter/model/rsp/SelfDeviceInfo.java b/src/main/java/com/lilosoft/complex/matter/model/rsp/SelfDeviceInfo.java
new file mode 100644
index 0000000..730a52b
--- /dev/null
+++ b/src/main/java/com/lilosoft/complex/matter/model/rsp/SelfDeviceInfo.java
@@ -0,0 +1,24 @@
+package com.lilosoft.complex.matter.model.rsp;
+
+import lombok.Data;
+
+@Data
+public class SelfDeviceInfo{
+	private String note;
+	private Object ticketTitle;
+	private String selfDeviceId;
+	private String handleAddressId;
+	private String coordinate;
+	private Object workHours;
+	private Object updateTime;
+	private String telephone;
+	private String delFlag;
+	private String deviceLogo;
+	private String userId;
+	private Object tips;
+	private String windowId;
+	private String floorId;
+	private String createBy;
+	private String createTime;
+	private Object updateBy;
+}
\ No newline at end of file
diff --git a/src/main/java/com/lilosoft/complex/matter/model/rsp/SysUser.java b/src/main/java/com/lilosoft/complex/matter/model/rsp/SysUser.java
new file mode 100644
index 0000000..dd34a25
--- /dev/null
+++ b/src/main/java/com/lilosoft/complex/matter/model/rsp/SysUser.java
@@ -0,0 +1,43 @@
+package com.lilosoft.complex.matter.model.rsp;
+
+import lombok.Data;
+
+@Data
+public class SysUser{
+	private Object sysRole;
+	private Object startNumber;
+	private String idCard;
+	private String remark;
+	private String delFlag;
+	private String centerUserId;
+	private String password;
+	private Object updateBy;
+	private Object loginName;
+	private String userNumber;
+	private Object value;
+	private String email;
+	private Object hometown;
+	private Object address;
+	private String salt;
+	private String sex;
+	private int deptId;
+	private String updateTime;
+	private String isWaiter;
+	private Object dept;
+	private String avatar;
+	private Object label;
+	private String userName;
+	private int userId;
+	private Object dkUserId;
+	private Object windowId;
+	private int createBy;
+	private String areaCode;
+	private String phoneNumber;
+	private String createTime;
+	private String passwordState;
+	private Object dkUnionId;
+	private String changePwTime;
+	private String workPhone;
+	private Object userType;
+	private String status;
+}
\ No newline at end of file
diff --git a/src/main/java/com/lilosoft/complex/matter/model/rsp/matter/ChildrenItem.java b/src/main/java/com/lilosoft/complex/matter/model/rsp/matter/ChildrenItem.java
new file mode 100644
index 0000000..735382f
--- /dev/null
+++ b/src/main/java/com/lilosoft/complex/matter/model/rsp/matter/ChildrenItem.java
@@ -0,0 +1,18 @@
+package com.lilosoft.complex.matter.model.rsp.matter;
+
+import java.util.List;
+import lombok.Data;
+
+@Data
+public class ChildrenItem{
+	private String situationItemId;
+	private List<MaterialsItem> materials;
+	private String situationDefineId;
+	private String situationItemName;
+	private String label;
+	private String id;
+	private String situationItemType;
+	private String type;
+	private String parentId;
+	private String key;
+}
\ No newline at end of file
diff --git a/src/main/java/com/lilosoft/complex/matter/model/rsp/matter/MaterialsItem.java b/src/main/java/com/lilosoft/complex/matter/model/rsp/matter/MaterialsItem.java
new file mode 100644
index 0000000..a87b818
--- /dev/null
+++ b/src/main/java/com/lilosoft/complex/matter/model/rsp/matter/MaterialsItem.java
@@ -0,0 +1,16 @@
+package com.lilosoft.complex.matter.model.rsp.matter;
+
+import lombok.Data;
+
+@Data
+public class MaterialsItem{
+	private String name;
+	private String pid;
+	private int paperCopies;
+	private String id;
+	private String label;
+	private String type;
+	private String fromId;
+	private String parentId;
+	private String key;
+}
\ No newline at end of file
diff --git a/src/main/java/com/lilosoft/complex/matter/model/rsp/matter/MatterWorkInfo.java b/src/main/java/com/lilosoft/complex/matter/model/rsp/matter/MatterWorkInfo.java
new file mode 100644
index 0000000..002b556
--- /dev/null
+++ b/src/main/java/com/lilosoft/complex/matter/model/rsp/matter/MatterWorkInfo.java
@@ -0,0 +1,14 @@
+package com.lilosoft.complex.matter.model.rsp.matter;
+
+import java.util.List;
+import lombok.Data;
+
+@Data
+public class MatterWorkInfo{
+	private List<ChildrenItem> children;
+	private String name;
+	private String id;
+	private String label;
+	private String type;
+	private String key;
+}
\ No newline at end of file
diff --git a/src/main/java/com/lilosoft/complex/matter/model/rsp/work/WorkInfo.java b/src/main/java/com/lilosoft/complex/matter/model/rsp/work/WorkInfo.java
new file mode 100644
index 0000000..bfc40ef
--- /dev/null
+++ b/src/main/java/com/lilosoft/complex/matter/model/rsp/work/WorkInfo.java
@@ -0,0 +1,38 @@
+package com.lilosoft.complex.matter.model.rsp.work;
+
+import java.util.List;
+import lombok.Data;
+
+@Data
+public class WorkInfo{
+	private String fieldGenerateRules;
+	private String commonCharacterName;
+	private Object defaultValue;
+	private String hcFillRule;
+	private String defaultValueRules;
+	private Object xpath;
+	private Object regularName;
+	private String handlingCharacterPackage;
+	private int hcOrder;
+	private int elCol;
+	private String state;
+	private Object commonCharacterComment;
+	private Object parentValue;
+	private String commonCharacterCode;
+	private String commonCharacterId;
+	private String commonCharacterType;
+	private int userId;
+	private String assType;
+	private Object parentId;
+	private String regularId;
+	private String tacheStep;
+	private Object checkTrictly;
+	private String handlingCharacterTemplateId;
+	private Object parentMovement;
+	private Object regularVal;
+	private String allowModify;
+	private String stateDate;
+	private int commonCharacterLength;
+	private List<Object> items;
+	private String dataInterfaceType;
+}
\ No newline at end of file
diff --git a/src/main/java/com/lilosoft/complex/matter/service/IComplexMatterService.java b/src/main/java/com/lilosoft/complex/matter/service/IComplexMatterService.java
new file mode 100644
index 0000000..dbdbfd7
--- /dev/null
+++ b/src/main/java/com/lilosoft/complex/matter/service/IComplexMatterService.java
@@ -0,0 +1,80 @@
+package com.lilosoft.complex.matter.service;
+
+
+import com.lilosoft.complex.IComplexService;
+import com.lilosoft.complex.Rest;
+import com.lilosoft.complex.matter.model.req.AcceptReq;
+import com.lilosoft.complex.matter.model.req.ImplementationReq;
+import com.lilosoft.complex.matter.model.req.DeviceLoginReq;
+import com.lilosoft.complex.matter.model.rsp.AcceptRspInfo;
+import com.lilosoft.complex.matter.model.rsp.LoginRspInfo;
+import com.lilosoft.complex.matter.model.rsp.MatterListInfo;
+import com.lilosoft.complex.matter.model.rsp.MatterRespInfo;
+import com.lilosoft.complex.matter.model.rsp.matter.MatterWorkInfo;
+import com.lilosoft.complex.matter.model.rsp.work.WorkInfo;
+
+import java.util.List;
+
+/**
+ * 缁煎悎绐楀彛涓氬姟澶勭悊绫�
+ *
+ * @author: zxfei
+ * @date: 2023/10/30 14:52
+ */
+public interface IComplexMatterService extends IComplexService {
+
+    /**
+     * 鑷姪璁惧鐧诲綍
+     *
+     * @param deviceLoginReq
+     * @return
+     */
+    Rest<LoginRspInfo> deviceLogin(DeviceLoginReq deviceLoginReq);
+
+    /**
+     * 闄勪欢涓婁紶
+     *
+     * @param bytes
+     * @param fileName
+     * @return
+     */
+    Rest<String> uploadFile(String deviceLogo,byte[] bytes, String fileName);
+
+
+    /**
+     * 鑷姪璁惧鎺ヤ欢
+     *
+     * @param acceptReq
+     * @return
+     */
+    Rest<AcceptRspInfo> accept(String deviceLogo,AcceptReq acceptReq);
+
+    /**
+     * 鏌ヨ鍙彈鐞嗕簨椤�
+     *
+     * @param implementationReq
+     * @return
+     */
+    Rest<MatterListInfo> findMatters(String deviceLogo, ImplementationReq implementationReq);
+
+
+    /**
+     * 鏌ヨ鍔炵悊浜嬮」鎯呭舰
+     *
+     * @param eventIds
+     * @return
+     */
+    Rest<MatterWorkInfo> doWorkMatterSearch(String deviceLogo, String eventIds);
+
+
+    /**
+     * 鑾峰彇鍔炰欢瑕佺礌
+     * @param deviceLogo
+     * @param eventIds
+     * @return
+     */
+    Rest<WorkInfo> getWorkMatter(String deviceLogo, String eventIds);
+
+
+
+}
diff --git a/src/main/java/com/lilosoft/complex/matter/service/impl/ComplexMatterServiceImpl.java b/src/main/java/com/lilosoft/complex/matter/service/impl/ComplexMatterServiceImpl.java
new file mode 100644
index 0000000..42ce6b6
--- /dev/null
+++ b/src/main/java/com/lilosoft/complex/matter/service/impl/ComplexMatterServiceImpl.java
@@ -0,0 +1,203 @@
+package com.lilosoft.complex.matter.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.TypeReference;
+import com.lilosoft.complex.AbstractComplexService;
+import com.lilosoft.complex.ComplexApiRest;
+import com.lilosoft.complex.Rest;
+import com.lilosoft.complex.matter.model.req.AcceptReq;
+import com.lilosoft.complex.matter.model.req.ImplementationReq;
+import com.lilosoft.complex.matter.model.req.DeviceLoginReq;
+import com.lilosoft.complex.matter.model.rsp.AcceptRspInfo;
+import com.lilosoft.complex.matter.model.rsp.LoginRspInfo;
+import com.lilosoft.complex.matter.model.rsp.MatterListInfo;
+import com.lilosoft.complex.matter.model.rsp.MatterRespInfo;
+import com.lilosoft.complex.matter.model.rsp.matter.MatterWorkInfo;
+import com.lilosoft.complex.matter.model.rsp.work.WorkInfo;
+import com.lilosoft.complex.matter.service.IComplexMatterService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 缁煎悎绐楀彛涓氬姟瀹炵幇绫�
+ *
+ * @author: zxfei
+ * @date: 2023/10/30 14:53
+ */
+@Service("complexMatterService")
+@Slf4j
+public class ComplexMatterServiceImpl extends AbstractComplexService implements IComplexMatterService {
+
+    //token鏈夋晥鏈� 10灏忔椂
+    @Override
+    public Rest<LoginRspInfo> deviceLogin(DeviceLoginReq loginReq) {
+        String deviceLoginApi = host + "self-device-info/login";
+        String rest = HttpUtil.post(deviceLoginApi, JSON.toJSONString(loginReq));
+        ComplexApiRest<LoginRspInfo> complexApiRest = JSON.parseObject(rest, new TypeReference<ComplexApiRest<LoginRspInfo>>() {
+        });
+        if (complexApiRest.getCode() == 200) {
+            //鏇存柊token
+            String deviceLoginToken = complexApiRest.getResult().getToken();
+            String deviceLogo = complexApiRest.getResult().getSelfDeviceInfo().getDeviceLogo();
+            this.tokenMap.put(deviceLogo, deviceLoginToken);
+            return Rest.ok(complexApiRest.getMessage(), complexApiRest.getResult());
+        }
+        return Rest.fail(complexApiRest.getMessage());
+    }
+
+    @Override
+    public Rest<String> uploadFile(String deviceLogo, byte[] bytes, String fileName) {
+
+        String uploadApi = host + "common/uploadFileToFtp?conversionImage=Y";
+        HttpRequest request = HttpRequest.post(uploadApi);
+
+        String deviceToken = checkToken(deviceLogo);
+
+        request.form("file", bytes, fileName);
+        String uploadRest = request.header("X-Access-Token", deviceToken).execute().body();
+        ComplexApiRest<String> complexApiRest = JSON.parseObject(uploadRest, new TypeReference<ComplexApiRest<String>>() {
+        });
+        if (complexApiRest.getCode() == 200) {
+            return Rest.ok(complexApiRest.getMessage(), complexApiRest.getResult());
+        }
+        return Rest.fail(complexApiRest.getMessage());
+    }
+
+    @Override
+    public Rest<AcceptRspInfo> accept(String deviceLogo, AcceptReq acceptReq) {
+        String deviceLoginApi = host + "self-device-info/acceptHandling";
+
+        String deviceToken = checkToken(deviceLogo);
+        String rest = HttpUtil.createPost(deviceLoginApi)
+                .header("X-Access-Token", deviceToken)
+                .body(JSON.toJSONString(acceptReq))
+                .execute().body();
+        ComplexApiRest<AcceptRspInfo> complexApiRest = JSON.parseObject(rest, new TypeReference<ComplexApiRest<AcceptRspInfo>>() {
+        });
+        if (complexApiRest.getCode() == 200) {
+            return Rest.ok(complexApiRest.getMessage(), complexApiRest.getResult());
+        }
+        return Rest.fail(complexApiRest.getMessage());
+    }
+
+
+    @Override
+    public Rest<MatterListInfo> findMatters(String deviceLogo, ImplementationReq implementationReq) {
+        String mattersApi = host + "event-implementation/list";
+
+        Map<String, String> paramMap = new HashMap<>();
+        // 灏哅ap涓殑灞炴€у€艰浆涓哄瓧绗︿覆
+        for (Map.Entry<String, Object> entry : BeanUtil.beanToMap(implementationReq, false, true).entrySet()) {
+            String key = entry.getKey();
+            Object value = entry.getValue();
+            String stringValue = String.valueOf(value);
+            paramMap.put(key, stringValue);
+        }
+
+        String deviceToken = checkToken(deviceLogo);
+
+        String rest = HttpUtil.createGet(mattersApi)
+                .header("X-Access-Token", deviceToken)
+                .headerMap(paramMap, true)
+                .execute().body();
+
+        ComplexApiRest<MatterListInfo> complexApiRest = JSON.parseObject(rest, new TypeReference<ComplexApiRest<MatterListInfo>>() {
+        });
+        if (complexApiRest.getCode() == 200) {
+            return Rest.ok(complexApiRest.getMessage(), complexApiRest.getResult());
+        }
+        return Rest.fail(complexApiRest.getMessage());
+    }
+
+    @Override
+    public Rest<MatterWorkInfo> doWorkMatterSearch(String deviceLogo, String eventIds) {
+        String mattersApi = host + "bus-situation-material/getSituationMaterialTreeByEventIds";
+
+        Map<String, String> paramMap = new HashMap<>();
+        paramMap.put("eventIds", eventIds);
+
+        String deviceToken = checkToken(deviceLogo);
+        String rest = HttpUtil.createGet(mattersApi)
+                .header("X-Access-Token", deviceToken)
+                .headerMap(paramMap, true)
+                .execute().body();
+
+        ComplexApiRest<MatterWorkInfo> complexApiRest = JSON.parseObject(rest, new TypeReference<ComplexApiRest<MatterWorkInfo>>() {
+        });
+        if (complexApiRest.getCode() == 200) {
+            return Rest.ok(complexApiRest.getMessage(), complexApiRest.getResult());
+        }
+        return Rest.fail(complexApiRest.getMessage());
+    }
+
+    @Override
+    public Rest<WorkInfo> getWorkMatter(String deviceLogo, String eventIds) {
+        String mattersApi = host + "event-implementation/getDynamicFormByEventIds";
+
+        ArrayList<String> list = new ArrayList<>();
+        list.add(eventIds);
+
+        String deviceToken = checkToken(deviceLogo);
+
+        String rest = HttpUtil.createPost(mattersApi)
+                .header("X-Access-Token", deviceToken)
+                .body(JSON.toJSONString(list))
+                .execute().body();
+
+        ComplexApiRest<WorkInfo> complexApiRest = JSON.parseObject(rest, new TypeReference<ComplexApiRest<WorkInfo>>() {
+        });
+        if (complexApiRest.getCode() == 200) {
+            return Rest.ok(complexApiRest.getMessage(), complexApiRest.getResult());
+        }
+        return Rest.fail(complexApiRest.getMessage());
+    }
+
+
+    private String checkToken(String deviceLogo) {
+        String deviceToken = tokenMap.getOrDefault(deviceLogo, "");
+        if (ObjectUtils.isEmpty(deviceToken)) {
+            deviceToken = getToken(deviceLogo);
+        }
+        return deviceToken;
+    }
+
+    public static void main(String[] args) {
+        // Define the URL where you want to upload the file
+        String uploadUrl = "http://example.com/upload";
+
+        // Define the path of the file you want to upload
+        String filePath = "/path/to/your/file.txt";
+
+        byte[] bytes = "111".getBytes();
+
+        // Create an HTTP request
+        HttpRequest request = HttpRequest.post(uploadUrl);
+
+        // Attach the file to the request
+        request.form("file", bytes, "1.png");
+
+        // Send the request and get the response
+        HttpResponse response = request.execute();
+
+        String body = request.execute().body();
+
+        // Check the response status
+        int status = response.getStatus();
+        if (status == 200) {
+            System.out.println("File uploaded successfully!");
+        } else {
+            System.out.println("File upload failed. Status code: " + status);
+        }
+
+    }
+}
diff --git a/src/main/java/com/lilosoft/core/enums/TypeEnum.java b/src/main/java/com/lilosoft/core/enums/TypeEnum.java
new file mode 100644
index 0000000..d56ae12
--- /dev/null
+++ b/src/main/java/com/lilosoft/core/enums/TypeEnum.java
@@ -0,0 +1,65 @@
+package com.lilosoft.core.enums;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * 缁肩獥浜嬮」澶勭悊绫�
+ *
+ * @author zxfei
+ */
+public enum TypeEnum {
+    鍗遍櫓鍖栧鍝佺粡钀ヨ鍙硶浜哄彉鏇�("wxhxpjyxkfrbg20231007", "鍗遍櫓鍖栧鍝佺粡钀ヨ鍙硶浜哄彉鏇�"),
+    ;
+    private String value;
+    private String desc;
+
+    TypeEnum(String value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+
+    public String getValue() {
+        return this.value;
+    }
+
+    public String getDesc() {
+        return this.desc;
+    }
+
+    public static TypeEnum getByValue(String value) {
+        for (TypeEnum typeEnum : TypeEnum.values()) {
+            if (typeEnum.getValue() == value) {
+                return typeEnum;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 鑾峰彇Map闆嗗悎
+     *
+     * @param eItem 涓嶅寘鍚」
+     * @return
+     */
+    public static Map<String, String> getEnumMap(String... eItem) {
+        Map<String, String> resultMap = new LinkedHashMap<>();
+        for (TypeEnum item : TypeEnum.values()) {
+            try {
+                boolean hasE = false;
+                for (String e : eItem) {
+                    if (item.getValue() == e) {
+                        hasE = true;
+                        break;
+                    }
+                }
+                if (!hasE) {
+                    resultMap.put(item.getValue() + "", item.getDesc());
+                }
+            } catch (Exception ex) {
+
+            }
+        }
+        return resultMap;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/lilosoft/core/enums/YesNoEnum.java b/src/main/java/com/lilosoft/core/enums/YesNoEnum.java
new file mode 100644
index 0000000..d4ec051
--- /dev/null
+++ b/src/main/java/com/lilosoft/core/enums/YesNoEnum.java
@@ -0,0 +1,64 @@
+package com.lilosoft.core.enums;
+
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+public enum YesNoEnum {
+
+    NO(0, "鍚�"),
+    YES(1, "鏄�");
+
+    private int value;
+    private String desc;
+
+    YesNoEnum(int value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+
+    public int getValue() {
+        return this.value;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public static YesNoEnum getByValue(int value) {
+        for (YesNoEnum YesNoEnum : YesNoEnum.values()) {
+            if (YesNoEnum.getValue() == value) {
+                return YesNoEnum;
+            }
+        }
+        return null;
+    }
+
+
+    /**
+     * 鑾峰彇Map闆嗗悎
+     *
+     * @param eItem 涓嶅寘鍚」
+     * @return
+     */
+    public static Map<String, String> getEnumMap(int... eItem) {
+        Map<String, String> resultMap = new LinkedHashMap<String, String>();
+        for (YesNoEnum item : YesNoEnum.values()) {
+            try {
+                boolean hasE = false;
+                for (int e : eItem) {
+                    if (item.getValue() == e) {
+                        hasE = true;
+                        break;
+                    }
+                }
+                if (!hasE) {
+                    resultMap.put(item.getValue() + "", item.getDesc());
+                }
+            } catch (Exception ex) {
+            }
+        }
+        return resultMap;
+    }
+
+}
diff --git a/src/main/java/com/lilosoft/core/exception/AppException.java b/src/main/java/com/lilosoft/core/exception/AppException.java
new file mode 100644
index 0000000..254870f
--- /dev/null
+++ b/src/main/java/com/lilosoft/core/exception/AppException.java
@@ -0,0 +1,51 @@
+package com.lilosoft.core.exception;
+
+public class AppException extends RuntimeException {
+    private static final long serialVersionUID = 3770580067312032700L;
+    private int code = 99999;
+    private String message = "";
+
+    public AppException() {
+    }
+
+    public AppException(String message) {
+        this(-1, message);
+    }
+
+    public AppException(int code) {
+        this.code = code;
+    }
+
+    public AppException(int code, String message) {
+        super(message);
+        this.code = code;
+        this.message = message;
+    }
+
+    public AppException(Throwable e) {
+        super(e);
+    }
+
+    public AppException(String message, Throwable e) {
+        super(message, e);
+        this.message = message;
+    }
+
+    public int getCode() {
+        return this.code;
+    }
+
+    public void setCode(int code) {
+        this.code = code;
+    }
+
+    @Override
+    public String getMessage() {
+        return this.message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+}
+
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index ef3d8b1..8469a52 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -2,9 +2,10 @@
 api:
   xss-open: true #鏄惁寮€鍚痻ss璺ㄧ珯鑴氭湰鏀诲嚮闃叉姢鏀寔 (true/false)
   requestLimit: 30 #鎺ュ彛姣忕璇锋眰闄愬埗
-  baseUrl: @profiles.baseUrl@ #瀹℃壒绯荤粺鍦板潃
+  baseUrl: @profiles.baseUrl@ #棰勫绯荤粺鍦板潃
   ocrUrl: @profiles.ocrUrl@ #璧勬枡棰勫鎺ュ彛鍦板潃
   apiUrl: @profiles.apiUrl@ #璧勬枡棰勫閰嶇疆鎺ュ彛鍦板潃
+  robertServerUrl: @profiles.robertServerUrl@ #鏈哄櫒浜洪瀹″湴鍧€
   mq: @profiles.mq@       #mq鐩戝惉闃熷垪鍚嶇О
 scheduled: #瀹氭椂浠诲姟鎺ㄩ€�
   monitorCron: 0 0/5 * * * ?
-- 
2.24.3