Browse Source

医保局
华晓
东方新华代码提交

zfc 9 months ago
parent
commit
5a518073ae

+ 0 - 15
.idea/dataSources.xml

@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="DataSourceManagerImpl" format="xml" multifile-model="true">
-    <data-source source="LOCAL" name="fbi.dll" uuid="0169dada-1ae4-4bb3-813d-9903fe29ff96">
-      <driver-ref>sqlite.xerial</driver-ref>
-      <synchronize>true</synchronize>
-      <jdbc-driver>org.sqlite.JDBC</jdbc-driver>
-      <jdbc-url>jdbc:sqlite:$PROJECT_DIR$/../../fbi.dll</jdbc-url>
-      <jdbc-additional-properties>
-        <property name="com.intellij.clouds.kubernetes.db.enabled" value="false" />
-      </jdbc-additional-properties>
-      <working-dir>$ProjectFileDir$</working-dir>
-    </data-source>
-  </component>
-</project>

+ 17 - 1
.idea/deployment.xml

@@ -1,7 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
 <project version="4">
-  <component name="PublishConfigData" serverName="云璞环境" remoteFilesAllowedToDisappearOnAutoupload="false">
+  <component name="PublishConfigData" remoteFilesAllowedToDisappearOnAutoupload="false">
     <serverData>
     <serverData>
+      <paths name="js">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$/mjava-dongfangxinhua" web="/" />
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
       <paths name="云璞环境">
       <paths name="云璞环境">
         <serverdata>
         <serverdata>
           <mappings>
           <mappings>
@@ -10,6 +18,14 @@
           </mappings>
           </mappings>
         </serverdata>
         </serverdata>
       </paths>
       </paths>
+      <paths name="图片服务器">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$/mjava-dongfangxinhua" web="/" />
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
     </serverData>
     </serverData>
   </component>
   </component>
 </project>
 </project>

+ 3 - 0
.idea/encodings.xml

@@ -3,8 +3,11 @@
   <component name="Encoding">
   <component name="Encoding">
     <file url="file://$PROJECT_DIR$/mjava-dongfangxinhua/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/mjava-dongfangxinhua/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/mjava-dongfangxinhua/src/main/resources" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/mjava-dongfangxinhua/src/main/resources" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/mjava-huaxiaojinshu/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/mjava-huaxiaojinshu/src/main/resources" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/mjava-yibaoju/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/mjava-yibaoju/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/mjava-yibaoju/src/main/resources" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/mjava-yibaoju/src/main/resources" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/mjava-yibaoju/target/2024-04-23/info-0.log.gz" charset="GBK" />
     <file url="file://$PROJECT_DIR$/mjava/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/mjava/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/mjava/src/main/resources" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/mjava/src/main/resources" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />

+ 124 - 0
.idea/uiDesigner.xml

@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Palette2">
+    <group name="Swing">
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+      </item>
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+        <initial-values>
+          <property name="text" value="Button" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="RadioButton" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="CheckBox" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="Label" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+          <preferred-size width="-1" height="20" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+      </item>
+    </group>
+  </component>
+</project>

+ 14 - 0
.idea/webServers.xml

@@ -9,6 +9,20 @@
           </advancedOptions>
           </advancedOptions>
         </fileTransfer>
         </fileTransfer>
       </webServer>
       </webServer>
+      <webServer id="82e0a689-0127-45b5-bb8a-8f664d2b7700" name="图片服务器">
+        <fileTransfer rootFolder="/home/portal/cloudpure" accessType="SFTP" host="47.97.181.40" port="22" sshConfigId="68f58a64-2527-484c-9d64-917b3d3e2ece" sshConfig="root@47.97.181.40:22 password">
+          <advancedOptions>
+            <advancedOptions dataProtectionLevel="Private" keepAliveTimeout="0" passiveMode="true" shareSSLContext="true" />
+          </advancedOptions>
+        </fileTransfer>
+      </webServer>
+      <webServer id="3eb90199-dd74-4734-bb61-8f57d8e50aef" name="js">
+        <fileTransfer accessType="SFTP" host="47.97.181.40" port="22" sshConfigId="68f58a64-2527-484c-9d64-917b3d3e2ece" sshConfig="root@47.97.181.40:22 password">
+          <advancedOptions>
+            <advancedOptions dataProtectionLevel="Private" keepAliveTimeout="0" passiveMode="true" shareSSLContext="true" />
+          </advancedOptions>
+        </fileTransfer>
+      </webServer>
     </option>
     </option>
   </component>
   </component>
 </project>
 </project>

+ 1 - 1
mjava-dongfangxinhua/src/main/resources/application-prod.yml

@@ -6,7 +6,7 @@ server:
 
 
 # condition
 # condition
 spel:
 spel:
-  scheduling: false        # 定时任务是否执行
+  scheduling: true        # 定时任务是否执行
   multiSource: false       # 是否多数据源配置
   multiSource: false       # 是否多数据源配置
 
 
 spring:
 spring:

+ 53 - 0
mjava-huaxiaojinshu/src/main/java/com/malk/huaxiaojinshu/controller/HXJSController.java

@@ -1,13 +1,36 @@
 package com.malk.huaxiaojinshu.controller;
 package com.malk.huaxiaojinshu.controller;
 
 
 
 
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSON;
+import com.malk.huaxiaojinshu.service.DDHXService;
+import com.malk.huaxiaojinshu.service.XiaoManService;
+import com.malk.huaxiaojinshu.utils.BaseSha256Util;
+import com.malk.huaxiaojinshu.utils.XMConf;
+import com.malk.huaxiaojinshu.utils.XiaomanAuthorization;
+import com.malk.server.aliwork.YDParam;
 import com.malk.server.common.McR;
 import com.malk.server.common.McR;
+import com.malk.server.dingtalk.DDConf;
 import com.malk.service.aliwork.YDClient;
 import com.malk.service.aliwork.YDClient;
+import com.malk.service.dingtalk.DDClient;
+import com.malk.utils.UtilHttp;
+import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
+import java.sql.*;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.TemporalAdjusters;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 
 
 
 /**
 /**
@@ -18,13 +41,43 @@ import javax.servlet.http.HttpServletRequest;
 @RequestMapping()
 @RequestMapping()
 public class HXJSController {
 public class HXJSController {
 
 
+    @Autowired
+    private DDClient ddClient;
 
 
     @Autowired
     @Autowired
     private YDClient ydClient;
     private YDClient ydClient;
 
 
+    @Autowired
+    private XMConf xmConf;
+
+    @Autowired
+    private XiaoManService xiaoManService;
+
+    @Autowired
+    private DDHXService ddhxService;
+
+    /**
+     * 同步客户信息
+     * @param request
+     * @return
+     */
+    @PostMapping("syncUserInfo")
+    McR syncUserInfo(HttpServletRequest request) {
+
+        xiaoManService.syncUserInfo();
+        return McR.success();
+    }
+
     @RequestMapping("test")
     @RequestMapping("test")
     McR test(HttpServletRequest request) {
     McR test(HttpServletRequest request) {
+//        xiaoManService.syncDDUserInfo();
+
+        xiaoManService.syncDDUserInfo();
+
+
+
         return McR.success();
         return McR.success();
     }
     }
 
 
+
 }
 }

+ 55 - 0
mjava-huaxiaojinshu/src/main/java/com/malk/huaxiaojinshu/service/DDHXService.java

@@ -0,0 +1,55 @@
+package com.malk.huaxiaojinshu.service;
+
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+public interface DDHXService {
+
+
+    /**
+     * 获取在职人员的
+     * @param access_token
+     * @param status_list
+     * @param offset
+     * @param size
+     * @return
+     */
+    Map getAllUserIdInfo(String access_token, String status_list, Number offset,Number size);
+
+
+    /**
+     * 获取员工花名册字段信息
+     * @param access_token
+     * @param userId
+     * @return
+     */
+    List<Map> getDDUserInfoById(String access_token, String userId, Number appAgentId);
+
+
+    /**
+     *  获取考勤列表列定义
+     */
+    Map getAttColumns(String access_token);
+
+    /**
+     * 获取考勤列值
+     * @param access_token
+     * @return
+     */
+    Map getAttColumnsValue(String access_token, String userId, String column_id_list, String startTime, String endTime);
+
+    /**
+     * 获取假期报表
+     * @param access_token
+     * @param userId
+     * @param leave_names
+     * @param startTime
+     * @param endTime
+     * @return
+     */
+    Map getleavetimebynames(String access_token, String userId, String leave_names, String startTime, String endTime);
+
+}

+ 85 - 0
mjava-huaxiaojinshu/src/main/java/com/malk/huaxiaojinshu/service/Impl/DDHXServiceImpl.java

@@ -0,0 +1,85 @@
+package com.malk.huaxiaojinshu.service.Impl;
+
+import com.malk.huaxiaojinshu.service.DDHXService;
+import com.malk.server.dingtalk.DDR;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.lang.reflect.Array;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Service
+@Slf4j
+public class DDHXServiceImpl implements DDHXService {
+
+    /**
+     * 获取在职员工
+     * @param access_token
+     * @param status_list
+     * @param offset
+     * @param size
+     * @return
+     */
+    @Override
+    public Map getAllUserIdInfo(String access_token, String status_list, Number offset, Number size) {
+
+        Map param = UtilMap.map("access_token", access_token);
+        Map body = UtilMap.map("status_list, offset, size", status_list, offset,size);
+        return (Map) DDR.doPost("https://oapi.dingtalk.com/topapi/smartwork/hrm/employee/queryonjob", null, param, body).getResult();
+
+    }
+
+    /**
+     * 花名册
+     * @param access_token
+     * @param userId
+     * @param appAgentId
+     * @return
+     */
+    @Override
+    public List<Map> getDDUserInfoById(String access_token, String userId, Number appAgentId) {
+        Map param = UtilMap.map("access_token", access_token);
+        Map body = UtilMap.map("userid_list, agentid", userId, appAgentId);
+        return (List<Map>) DDR.doPost("https://oapi.dingtalk.com/topapi/smartwork/hrm/employee/v2/list", null, param, body).getResult();
+    }
+
+    /**
+     * 获取考勤列表列定义
+     * @param access_token
+     * @return
+     */
+    @Override
+    public Map getAttColumns(String access_token) {
+        Map param = UtilMap.map("access_token", access_token);
+        return (Map) DDR.doPost("https://oapi.dingtalk.com/topapi/attendance/getattcolumns", null, param, null).getResult();
+
+    }
+
+    /**
+     * 通过列获取数据
+     * @param access_token
+     * @param userId
+     * @param column_id_list
+     * @param startTime
+     * @param endTime
+     * @return
+     */
+    @Override
+    public Map getAttColumnsValue(String access_token, String userId, String column_id_list, String startTime, String endTime) {
+        Map param = UtilMap.map("access_token", access_token);
+        Map body = UtilMap.map("userid, column_id_list, from_date, to_date", userId, column_id_list, startTime, endTime);
+        return (Map) DDR.doPost("https://oapi.dingtalk.com/topapi/attendance/getcolumnval", null, param, body).getResult();
+    }
+
+    @Override
+    public Map getleavetimebynames(String access_token, String userId, String leave_names, String startTime, String endTime) {
+        Map param = UtilMap.map("access_token", access_token);
+        Map body = UtilMap.map("userid, leave_names, from_date, to_date", userId, leave_names, startTime, endTime);
+        return (Map) DDR.doPost("https://oapi.dingtalk.com/topapi/attendance/getleavetimebynames", null, param, body).getResult();
+    }
+
+
+}

+ 616 - 0
mjava-huaxiaojinshu/src/main/java/com/malk/huaxiaojinshu/service/Impl/XiaoManServiceImpl.java

@@ -0,0 +1,616 @@
+package com.malk.huaxiaojinshu.service.Impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.malk.huaxiaojinshu.service.DDHXService;
+import com.malk.huaxiaojinshu.service.XiaoManService;
+import com.malk.huaxiaojinshu.utils.BaseSha256Util;
+import com.malk.huaxiaojinshu.utils.XMConf;
+import com.malk.huaxiaojinshu.utils.XiaomanAuthorization;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.server.dingtalk.DDConf;
+import com.malk.service.aliwork.YDClient;
+import com.malk.service.dingtalk.DDClient;
+import com.malk.service.dingtalk.DDClient_Contacts;
+import com.malk.service.dingtalk.DDClient_Personnel;
+import com.malk.service.dingtalk.DDService;
+import com.malk.utils.UtilDateTime;
+import com.malk.utils.UtilMap;
+import com.mysql.cj.xdevapi.JsonArray;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.TemporalAdjusters;
+import java.util.*;
+
+@Service
+@Slf4j
+public class XiaoManServiceImpl implements XiaoManService {
+
+    @Autowired
+    private XMConf xmConf;
+
+    @Autowired
+    private DDClient ddClient;
+
+    @Autowired
+    private DDConf ddConf;
+
+    @Autowired
+    private DDClient_Contacts ddClient_contacts;
+
+    @Autowired
+    private DDClient_Personnel ddClient_personnel;
+
+    @Autowired
+    private YDClient ydClient;
+    /**
+     * 获取客户信息
+     */
+    @Override
+    public void syncUserInfo() {
+        //token
+        String token = XiaomanAuthorization.getToken(xmConf.getClientId(),xmConf.getClientSecret(),xmConf.getUserName(), BaseSha256Util.encryptSHA256(xmConf.getPassWord()));
+        //获取分组信息
+        String groupRsp = XiaomanAuthorization.getGroupId(token);
+        Map groupResult = (Map) JSON.parse(groupRsp);
+        List<Map> mapList = (List<Map>) groupResult.get("data");
+
+        mapList.forEach(mapItem ->{
+            //A组客户需要获取详细信息
+            if (mapItem.get("id").equals("8056007887")){
+                GetCompanyInfo(token,mapItem);
+            }else if (mapItem.get("id").equals("8056009194")){  //B组客户需要获取详细信息
+                GetCompanyInfo(token,mapItem);
+            }
+        });
+    }
+
+
+    /**
+     * 获取各分组客户信息
+     * @param token
+     * @param mapItem
+     */
+    public void GetCompanyInfo(String token,Map mapItem){
+        //获取公司列表信息
+        String companyCount =  XiaomanAuthorization.getCompany(token,mapItem.get("id").toString(),1,1,0);
+        Map companyCountResult = (Map) JSON.parse(companyCount);
+        Map mapCount = (Map) companyCountResult.get("data");
+        //获取分组客户总数
+        int count = (int) mapCount.get("count");
+        int pageSize = 20;
+        for (int page = 1; page <= Math.ceil(count / pageSize); page++){
+
+            String companyRsp =  XiaomanAuthorization.getCompany(token,mapItem.get("id").toString(),page,pageSize,0);
+            Map companyResult = (Map) JSON.parse(companyRsp);
+            Map maps = (Map) companyResult.get("data");
+            List<Map> mapCompany = (List<Map>) maps.get("list");
+            //遍历每个公司
+            mapCompany.forEach(companyItem ->{
+                Map hashMap = new HashMap();
+                //客户分组ID
+                hashMap.put("textField_lx9pmkzr", mapItem.get("id"));
+                //客户分组Name
+                hashMap.put("textField_lxmla5ul", mapItem.get("name"));
+
+                //客户公司ID
+                hashMap.put("textField_lx9pmkz1", companyItem.get("company_id"));
+                //客户公司名称
+                hashMap.put("textField_lwypgrqi", companyItem.get("name"));
+                //客户公司简称
+                hashMap.put("textField_lwypgrqj", companyItem.get("short_name"));
+                String CompanyInfoRsp =  XiaomanAuthorization.getCompanyInfo(token,companyItem.get("company_id").toString());
+                Map CompanyInfoResult =   (Map) JSON.parse(CompanyInfoRsp);
+                //公司详细信息对象
+                Map mapCompanyInfo = (Map) CompanyInfoResult.get("data");
+                //来源
+                hashMap.put("textField_lx9pmkz3",mapCompanyInfo.get("origin_name"));
+                //国家/地区
+                hashMap.put("textField_lxmla5ub", mapCompanyInfo.get("country_name"));
+                //地址
+                hashMap.put("textField_lwypgrqk", mapCompanyInfo.get("address"));
+                //官网
+                hashMap.put("textField_lxmla5uk", mapCompanyInfo.get("homepage"));
+                //获取客户基本信息
+                List<Map> companyInfoMap = (List<Map>) mapCompanyInfo.get("customers");
+
+
+                companyInfoMap.forEach(itemMap ->{
+                    int number = (int) itemMap.get("main_customer_flag");
+                    //主要联系人信息
+                    if (number==1){
+                        hashMap.put("textField_lwypgrqo",itemMap.get("name"));
+                        hashMap.put("textField_lwypgrqq",itemMap.get("email"));
+
+                        JSONArray jsonArray = (JSONArray) itemMap.get("tel_list");
+                        if (!jsonArray.isEmpty()){
+                            JSONArray innerArray = jsonArray.getJSONArray(0);
+                            String firstElement = innerArray.getString(0);
+                            String secondElement = innerArray.getString(1);
+                            hashMap.put("textField_lwypgrqp",firstElement+secondElement);
+                        }
+                    }
+                });
+
+                ydClient.operateData(YDParam.builder()
+                        .searchCondition(JSON.toJSONString(UtilMap.map("textField_lx9pmkz1",companyItem.get("company_id"))))
+                        .formUuid("FORM-40F64FB5F44F4754BAB9FF6E038E03A5WUIM")
+                        .formDataJson(JSON.toJSONString(hashMap))
+                        .build(), YDConf.FORM_OPERATION.upsert);
+            });
+
+
+        }
+    }
+
+    /**
+     * 同步
+     */
+    @Override
+    public void syncUserCount() {
+
+        String token = XiaomanAuthorization.getToken(xmConf.getClientId(),xmConf.getClientSecret(),xmConf.getUserName(), BaseSha256Util.encryptSHA256(xmConf.getPassWord()));
+        //获取分组信息
+        String groupRsp = XiaomanAuthorization.getGroupId(token);
+        Map groupResult = (Map) JSON.parse(groupRsp);
+        List<Map> mapList = (List<Map>) groupResult.get("data");
+
+        mapList.forEach(item->{
+            //获取分组公司信息
+            String companyCount =  XiaomanAuthorization.getCompany(token,item.get("id").toString(),1,1,1);
+            Map companyCountResult = (Map) JSON.parse(companyCount);
+            Map mapCount = (Map) companyCountResult.get("data");
+            Map hashMap = new HashMap();
+            hashMap.put("textField_lxmyxx4s",item.get("id").toString());
+            hashMap.put("textField_lxmyxx4r",item.get("name").toString());
+            hashMap.put("textField_lxmyxx4t",mapCount.get("count").toString());
+            ydClient.operateData(YDParam.builder()
+                    .searchCondition(JSON.toJSONString(UtilMap.map("textField_lxmyxx4s, textField_lxmyxx4r",item.get("id"),item.get("name"))))
+                    .formUuid("FORM-94A6C309524740A49D8572FD211641ACPJQE")
+                    .formDataJson(JSON.toJSONString(hashMap))
+                    .build(), YDConf.FORM_OPERATION.upsert);
+        });
+    }
+
+    @Override
+    public void sysDDUserInfo() {
+        log.info("花名册:{}",ddClient_personnel.getPersonnelMeta(ddClient.getAccessToken(), ddConf.getAgentId()));
+    }
+
+    /**
+     * 同步商机信息
+     */
+    @Override
+    public void syncOpportunity() {
+        String token = XiaomanAuthorization.getToken(xmConf.getClientId(),xmConf.getClientSecret(),xmConf.getUserName(), BaseSha256Util.encryptSHA256(xmConf.getPassWord()));
+
+        LocalDate currentDate = LocalDate.now();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        //首次需要加载三个月以前的数据,然后每天同步前一天的
+        //LocalDate threeMonthsAgo = currentDate.minusMonths(3);
+
+        //获取一天前
+        LocalDate beforeDay = currentDate.minusDays(1);
+        String startTime =beforeDay.format(formatter);
+        String endTime = currentDate.format(formatter);
+
+        //获取商机信息
+        String opportunityList = XiaomanAuthorization.getOpportunity(token,1,1,startTime,endTime);
+        Map opportunityResult = (Map) JSON.parse(opportunityList);
+        Map mapCount = (Map) opportunityResult.get("data");
+        //获取查询数据总条数
+        int count = (int) mapCount.get("totalItem");
+        int pageSize = 20;
+        //按照设置的分页查询遍历数据
+        for (int page = 1; page <= Math.ceil(count / pageSize); page++){
+
+            String opportunityRsp =  XiaomanAuthorization.getOpportunity(token,page,pageSize,startTime,endTime);
+            Map opportunityMap = (Map) JSON.parse(opportunityRsp);
+            Map maps = (Map) opportunityMap.get("data");
+            List<Map> mapOpportunity = (List<Map>) maps.get("list");
+
+            //遍历
+            mapOpportunity.forEach(opportunityItem ->{
+                Map hashMap = new HashMap();
+
+                //商机ID
+                hashMap.put("textField_lx9u7e90", opportunityItem.get("opportunity_id"));
+                //商机编号
+                hashMap.put("textField_lx9u7e92", opportunityItem.get("serial_id"));
+                //商机名称
+                hashMap.put("textField_lx9u7e94", opportunityItem.get("name"));
+                //客户ID
+                hashMap.put("textField_lz6cr9gd", opportunityItem.get("company_id"));
+                //商机来源
+                hashMap.put("textField_lx9u7e95", opportunityItem.get("origin_name"));
+                //商机阶段
+                hashMap.put("textField_lx9u7e96", "商机阶段");
+                //结束日期
+                hashMap.put("textField_lx9u7e98", opportunityItem.get("account_date"));
+                // 销售金额(USD)
+                hashMap.put("numberField_lx9u7e9f", opportunityItem.get("amount_usd"));
+                // 销售金额(RMB)
+                hashMap.put("numberField_lx9u7e9d", opportunityItem.get("amount_rmb"));
+                //币种
+                hashMap.put("textField_lx9u7e99", opportunityItem.get("currency"));
+
+//                //商机阶段信息
+//                List<Map> stageInfoMap = (List<Map>) opportunityItem.get("stage_info");
+
+//                //创建人信息
+//                List<Map> createInfoMap = (List<Map>) opportunityItem.get("create_user_info");
+
+                ydClient.operateData(YDParam.builder()
+                        .searchCondition(JSON.toJSONString(UtilMap.map("textField_lx9u7e92",opportunityItem.get("serial_id"))))
+                        .formUuid("FORM-EA87926A05104316BF3B620AC3F5B12A2ED0")
+                        .formDataJson(JSON.toJSONString(hashMap))
+                        .build(), YDConf.FORM_OPERATION.upsert);
+
+            });
+
+        }
+        log.info("opportunityResult",opportunityResult);
+
+    }
+
+
+    @Autowired
+    private DDService ddService;
+    @Autowired
+    private DDHXService ddhxService;
+
+
+    @Override
+    public void syncDDUserInfo() {
+
+        Map userIds =  ddhxService.getAllUserIdInfo(ddClient.getAccessToken(),"2,3",0,50);
+        if (userIds.size()>0){
+            List<String> userIdList = (List<String>) userIds.get("data_list");
+            for (String strUserId:userIdList){
+                Map hashMap = new HashMap();
+                List<Map> userinfo = ddhxService.getDDUserInfoById(ddClient.getAccessToken(), strUserId, ddConf.getAgentId());
+                List<Map> dataList = (List<Map>) userinfo.get(0).get("field_data_list");
+
+                String mobile = null;
+
+                for (Map map:dataList){
+                    //成员
+                    hashMap.put("employeeField_lwyn4q8k",strUserId);
+
+                    // 姓名 sys00-name
+                    if (map.get("field_code").equals("sys00-name")){
+                        List<Map> mapList = (List<Map>) map.get("field_value_list");
+                        hashMap.put("textField_lxmks3dk",mapList.get(0).get("value"));
+                    }
+                    // 身份证 sys02-certNo
+                    else if (map.get("field_code").equals("sys02-certNo")){
+                        List<Map> mapList = (List<Map>) map.get("field_value_list");
+                        if (mapList.get(0).get("value")!=null){
+                            hashMap.put("textField_lz87r4yi",mapList.get(0).get("value"));
+                        }
+                    }
+                    // 邮箱 sys00-email
+                    else if (map.get("field_code").equals("425b4d32-381f-45e2-b93b-70ef1f5a7244")){
+                        List<Map> mapList = (List<Map>) map.get("field_value_list");
+                        if (mapList.get(0).get("value")!=null){
+                            hashMap.put("textField_lx07nnu5",mapList.get(0).get("value"));
+                        }
+                    }
+                    //职位 sys00-position
+                    else if (map.get("field_code").equals("sys00-position")){
+                        List<Map> mapList = (List<Map>) map.get("field_value_list");
+                        if (mapList.get(0).get("value")!=null){
+                            hashMap.put("textField_lz865mkl",mapList.get(0).get("value"));
+                        }
+                    }
+                    //主部门 sys00-mainDeptId
+                    else if (map.get("field_code").equals("sys00-mainDeptId")){
+                        List<Map> mapList = (List<Map>) map.get("field_value_list");
+                        hashMap.put("departmentSelectField_lx07nnu3",new String[]{mapList.get(0).get("value").toString()});
+                    }
+                    //手机号 sys00-mobile
+                    else if (map.get("field_code").equals("62e1e6c5-ee91-4abb-a8e3-e7a9e61bfb56")){
+                        List<Map> mapList = (List<Map>) map.get("field_value_list");
+                        if (mapList.get(0).get("value")!=null){
+                            mobile = mapList.get(0).get("value").toString();
+                            hashMap.put("textField_lwyn4q94",mobile);
+                        }
+                    }
+                    //岗位职级
+                    else if (map.get("field_code").equals("sys01-positionLevel")){
+                        List<Map> mapList = (List<Map>) map.get("field_value_list");
+                        if (mapList.get(0).get("value")!=null){
+                            hashMap.put("textField_lz865mkw",mapList.get(0).get("value"));
+                        }
+                    }
+                    //入职时间
+                    else if (map.get("field_code").equals("sys00-confirmJoinTime")){
+                        List<Map> mapList = (List<Map>) map.get("field_value_list");
+                        if (mapList.get(0).get("value")!=null){
+                            hashMap.put("dateField_m0ngt02p",UtilDateTime.parse(mapList.get(0).get("value").toString(),"yyyy-MM-dd"));
+                        }
+                    }
+                    //员工状态
+                    else if (map.get("field_code").equals("sys01-employeeStatus")){
+                        List<Map> mapList = (List<Map>) map.get("field_value_list");
+                        if (mapList.get(0).get("label")!=null){
+                            hashMap.put("textField_m0nklwg4",mapList.get(0).get("label"));
+                        }
+                    }
+
+                }
+                ydClient.operateData(YDParam.builder()
+                        .searchCondition(JSON.toJSONString(UtilMap.map("textField_lwyn4q94",mobile)))
+                        .formUuid("FORM-949F56242D564D988A99DBB7FB034D0E62H4")
+                        .formDataJson(JSON.toJSONString(hashMap))
+                        .build(), YDConf.FORM_OPERATION.upsert);
+                }
+            }
+        }
+
+    /**
+     * 同步考勤数据
+      */
+    @Override
+    public void syscAttColumnsValue() {
+
+
+        //获取考勤组字段  应勤和考勤天数
+        Map mapColumns = ddhxService.getAttColumns(ddClient.getAccessToken());
+
+        log.info("mapColumns:"+mapColumns);
+
+        List<Map> mapList = (List<Map>) mapColumns.get("columns");
+
+        //获取应勤和考勤ID
+        List<String> columnList = new ArrayList<>();
+
+        //获取假期Name
+        List<String> leaveNameList = new ArrayList<>();
+        for (Map map : mapList) {
+            if (map.get("name").equals("应出勤天数")) {
+                columnList.add(map.get("id").toString());
+            } else if (map.get("name").equals("出勤天数")) {
+                columnList.add(map.get("id").toString());
+            }else if (map.get("name").equals("年假")) {
+                leaveNameList.add(map.get("name").toString());
+            }else if (map.get("name").equals("事假")) {
+                leaveNameList.add(map.get("name").toString());
+            }else if (map.get("name").equals("病假")) {
+                leaveNameList.add(map.get("name").toString());
+            }else if (map.get("name").equals("调休")) {
+                leaveNameList.add(map.get("name").toString());
+            }else if (map.get("name").equals("产假")) {
+                leaveNameList.add(map.get("name").toString());
+            }else if (map.get("name").equals("陪产假")) {
+                leaveNameList.add(map.get("name").toString());
+            }else if (map.get("name").equals("婚假")) {
+                leaveNameList.add(map.get("name").toString());
+            }else if (map.get("name").equals("丧假")) {
+                leaveNameList.add(map.get("name").toString());
+            }else if (map.get("name").equals("哺乳假")) {
+                leaveNameList.add(map.get("name").toString());
+            }else if (map.get("name").equals("产检假")) {
+                leaveNameList.add(map.get("name").toString());
+            }else if (map.get("name").equals("育儿假")) {
+                leaveNameList.add(map.get("name").toString());
+            }
+        }
+
+        String columns = columnList.toString().replace("\"", "").replaceAll("\\[", "").replaceAll("\\]", "");
+        String leaveName = leaveNameList.toString().replace("\"", "").replaceAll("\\[", "").replaceAll("\\]", "");
+        // 获取当前日期
+        LocalDate currentDate = LocalDate.now();
+        // 获取上个月的1号
+        LocalDate firstDayOfLastMonth = currentDate.minusMonths(1).withDayOfMonth(1);
+        // 获取上个月的最后一天
+        LocalDate lastDayOfLastMonth = currentDate.minusMonths(1).with(TemporalAdjusters.lastDayOfMonth());
+
+        //获取在职员工UserID  2正式,3为在职
+        Map userInfoMap = ddhxService.getAllUserIdInfo(ddClient.getAccessToken(),"2,3",0,50);
+
+        List<String> userIds = (List<String>) userInfoMap.get("data_list");
+        Map hashMap = new HashMap();
+        for (String userId:userIds){
+
+            //获取考勤和出勤数据
+            Map mapAttColumnsValue = ddhxService.getAttColumnsValue(ddClient.getAccessToken(), userId, columns, firstDayOfLastMonth.toString(), lastDayOfLastMonth.toString());
+
+            List<Map> columnsVals = (List<Map>) mapAttColumnsValue.get("column_vals");
+
+            //获取应勤天数 和 考勤天数
+            List<Map> yqMaps = (List<Map>) columnsVals.get(0).get("column_vals");;
+            List<Map> cqMaps = (List<Map>) columnsVals.get(1).get("column_vals");
+
+            //应勤数据
+            int yqDays = 0;
+            for (int i = 0; i < yqMaps.size(); i++) {
+                float day = Float.parseFloat(yqMaps.get(i).get("value").toString()) ;
+                if (day > 0) {
+                    yqDays = yqDays + 1;
+                }
+            }
+            log.info(userId+"【应勤天数】:" + yqDays);
+
+            //出勤数据
+            int cqDays = 0;
+            for (int j = 0; j < cqMaps.size(); j++) {
+                float day = Float.parseFloat(cqMaps.get(j).get("value").toString()) ;
+                if (day > 0) {
+                    cqDays = cqDays + 1;
+                }
+            }
+            log.info(userId+"【出勤天数】:" + cqDays);
+
+
+            //获取考勤和出勤数据
+            Map mapAttNameValue = ddhxService.getleavetimebynames(ddClient.getAccessToken(), userId, leaveName, firstDayOfLastMonth.toString(), lastDayOfLastMonth.toString());
+
+            List<Map> NameValues = (List<Map>) mapAttNameValue.get("columns");
+
+            List<Map> nianjMaps = (List<Map>) NameValues.get(0).get("columnvals");   //年假
+            List<Map> shijMaps = (List<Map>) NameValues.get(1).get("columnvals");     //事假
+            List<Map> bingjMaps = (List<Map>) NameValues.get(2).get("columnvals");    //病假
+            List<Map> tiaoxMaps = (List<Map>) NameValues.get(3).get("columnvals");    //调休假
+            List<Map> chanjMaps = (List<Map>) NameValues.get(4).get("columnvals");    //产假
+            List<Map> peicjMaps = (List<Map>) NameValues.get(5).get("columnvals");    //陪产假
+            List<Map> hunjMaps = (List<Map>) NameValues.get(6).get("columnvals");     //婚假
+            List<Map> sangjMaps = (List<Map>) NameValues.get(7).get("columnvals");    //丧假
+            List<Map> burjMaps = (List<Map>) NameValues.get(8).get("columnvals");    //哺乳假
+            List<Map> chanjjMaps = (List<Map>) NameValues.get(9).get("columnvals");  //产检假
+            List<Map> yerjMaps = (List<Map>) NameValues.get(10).get("columnvals");    //育儿假
+
+
+
+            //年假
+            int nianjDays = 0;
+            for (int j = 0; j < nianjMaps.size(); j++) {
+                float day = Float.parseFloat(nianjMaps.get(j).get("value").toString()) ;
+                if (day > 0) {
+                    nianjDays = nianjDays + 1;
+                }
+            }
+            log.info(userId+"【年假】:" + nianjDays);
+
+            //事假
+            int shijDays = 0;
+            for (int j = 0; j < shijMaps.size(); j++) {
+                float day = Float.parseFloat(shijMaps.get(j).get("value").toString()) ;
+                if (day > 0) {
+                    shijDays = shijDays + 1;
+                }
+            }
+            log.info(userId+"【事假】:" + shijDays);
+
+            //病假
+            int bingjDays = 0;
+            for (int j = 0; j < bingjMaps.size(); j++) {
+                float day = Float.parseFloat(bingjMaps.get(j).get("value").toString()) ;
+                if (day > 0) {
+                    bingjDays = bingjDays + 1;
+                }
+            }
+            log.info(userId+"【病假】:" + bingjDays);
+
+            //调休假
+            int tiaoxDays = 0;
+            for (int j = 0; j < tiaoxMaps.size(); j++) {
+                float day = Float.parseFloat(tiaoxMaps.get(j).get("value").toString()) ;
+                if (day > 0) {
+                    tiaoxDays = tiaoxDays + 1;
+                }
+            }
+            log.info(userId+"【调休假】:" + tiaoxDays);
+
+             //产假
+            int chanjDays = 0;
+            for (int j = 0; j < chanjMaps.size(); j++) {
+                float day = Float.parseFloat(chanjMaps.get(j).get("value").toString()) ;
+                if (day > 0) {
+                    chanjDays = chanjDays + 1;
+                }
+            }
+            log.info(userId+"【产假】:" + chanjDays);
+
+            //陪产假
+            int peicjDays = 0;
+            for (int j = 0; j < peicjMaps.size(); j++) {
+                float day = Float.parseFloat(peicjMaps.get(j).get("value").toString()) ;
+                if (day > 0) {
+                    peicjDays = peicjDays + 1;
+                }
+            }
+            log.info(userId+"【陪产假】:" + peicjDays);
+
+             //婚假
+            int hunjDays = 0;
+            for (int j = 0; j < hunjMaps.size(); j++) {
+                float day = Float.parseFloat(hunjMaps.get(j).get("value").toString()) ;
+                if (day > 0) {
+                    hunjDays = hunjDays + 1;
+                }
+            }
+            log.info(userId+"【婚假】:" + peicjDays);
+
+            //丧假
+            int sangjDays = 0;
+            for (int j = 0; j < sangjMaps.size(); j++) {
+                float day = Float.parseFloat(sangjMaps.get(j).get("value").toString()) ;
+                if (day > 0) {
+                    sangjDays = sangjDays + 1;
+                }
+            }
+            log.info(userId+"【丧假】:" + sangjDays);
+
+            //哺乳假
+            int burjDays = 0;
+            for (int j = 0; j < burjMaps.size(); j++) {
+                float day = Float.parseFloat(burjMaps.get(j).get("value").toString()) ;
+                if (day > 0) {
+                    burjDays = burjDays + 1;
+                }
+            }
+            log.info(userId+"【哺乳假】:" + burjDays);
+
+            //产检假
+            int chanjjDays = 0;
+            for (int j = 0; j < chanjjMaps.size(); j++) {
+                float day = Float.parseFloat(chanjjMaps.get(j).get("value").toString()) ;
+                if (day > 0) {
+                    chanjjDays = chanjjDays + 1;
+                }
+            }
+            log.info(userId+"【产检假】:" + chanjjDays);
+
+            //育儿假
+            int yerjDays = 0;
+            for (int j = 0; j < yerjMaps.size(); j++) {
+                float day = Float.parseFloat(yerjMaps.get(j).get("value").toString()) ;
+                if (day > 0) {
+                    yerjDays = yerjDays + 1;
+                }
+            }
+            log.info(userId+"【育儿假】:" + yerjDays);
+
+
+
+            hashMap.put("employeeField_lzb09kqd",userId);
+            hashMap.put("dateField_lzb09kqf",UtilDateTime.parse(String.valueOf(firstDayOfLastMonth),"yyyy-MM"));
+            hashMap.put("textField_lzb0fjed",userId);
+            hashMap.put("textField_lzb0fjef",firstDayOfLastMonth);
+            hashMap.put("numberField_lzb09kqp",yqDays);
+            hashMap.put("numberField_lzb09kqr",cqDays);
+            hashMap.put("numberField_m0nb6i03",nianjDays);
+            hashMap.put("numberField_m0nb6i05",shijDays);
+            hashMap.put("numberField_m0nb6i08",bingjDays);
+            hashMap.put("numberField_m0nb6i0a",tiaoxDays);
+            hashMap.put("numberField_m0nb6i0d",chanjDays);
+            hashMap.put("numberField_m0nb6i0f",peicjDays);
+            hashMap.put("numberField_m0nb6i0i",hunjDays);
+            hashMap.put("numberField_m0nb6i0k",sangjDays);
+            hashMap.put("numberField_m0nb6i0n",burjDays);
+            hashMap.put("numberField_m0nb6i0p",chanjjDays);
+            hashMap.put("numberField_m0nb6i0s",yerjDays);
+            hashMap.put("numberField_m0ngfawd",nianjDays+shijDays+bingjDays+tiaoxDays+chanjDays+peicjDays+hunjDays+sangjDays+burjDays+chanjjDays+yerjDays);
+
+            log.info("hashMap:" + hashMap);
+
+            ydClient.operateData(YDParam.builder()
+
+                    .searchCondition(JSON.toJSONString(UtilMap.map("textField_lzb0fjed, textField_lzb0fjef",userId, firstDayOfLastMonth)))
+                    .formUuid("FORM-1E031963745047CFA5BF98759F34C4C6W12H")
+                    .formDataJson(JSON.toJSONString(hashMap))
+                    .build(), YDConf.FORM_OPERATION.upsert);
+
+        }
+    }
+
+
+}
+

+ 31 - 0
mjava-huaxiaojinshu/src/main/java/com/malk/huaxiaojinshu/service/XiaoManService.java

@@ -0,0 +1,31 @@
+package com.malk.huaxiaojinshu.service;
+
+public interface XiaoManService{
+
+
+    void syncUserInfo();
+
+
+    void syncUserCount();
+
+
+    void sysDDUserInfo();
+
+
+    /**
+     * 同步商机信息
+     */
+    void syncOpportunity();
+
+    /**
+     * 同步花名册
+     */
+    void syncDDUserInfo();
+
+
+    /**
+     * 同步考勤数据
+     */
+    void syscAttColumnsValue();
+
+}

+ 36 - 0
mjava-huaxiaojinshu/src/main/java/com/malk/huaxiaojinshu/utils/BaseSha256Util.java

@@ -0,0 +1,36 @@
+package com.malk.huaxiaojinshu.utils;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+public class BaseSha256Util {
+
+
+    /**
+     *  sha256 加密
+     * @param input
+     * @return
+     */
+    public static String encryptSHA256(String input) {
+        try {
+            MessageDigest digest = MessageDigest.getInstance("SHA-256");
+            byte[] hash = digest.digest(input.getBytes());
+            StringBuilder hexString = new StringBuilder();
+
+            for (byte b : hash) {
+                String hex = Integer.toHexString(0xff & b);
+                if (hex.length() == 1) {
+                    hexString.append('0');
+                }
+                hexString.append(hex);
+            }
+
+            return hexString.toString();
+        } catch (NoSuchAlgorithmException e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+
+}

+ 18 - 0
mjava-huaxiaojinshu/src/main/java/com/malk/huaxiaojinshu/utils/XMConf.java

@@ -0,0 +1,18 @@
+package com.malk.huaxiaojinshu.utils;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "xiaoman")
+public class XMConf {
+
+    private String userName;
+    private String passWord;
+    private String clientId;
+    private String clientSecret;
+
+
+}

+ 175 - 0
mjava-huaxiaojinshu/src/main/java/com/malk/huaxiaojinshu/utils/XiaomanAuthorization.java

@@ -0,0 +1,175 @@
+package com.malk.huaxiaojinshu.utils;
+
+
+import com.alibaba.fastjson.JSON;
+import com.malk.utils.UtilHttp;
+
+import java.io.BufferedReader;
+import java.io.DataOutputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.Base64;
+import java.util.HashMap;
+import java.util.Map;
+
+public class XiaomanAuthorization {
+
+
+    /**
+     * 获取token
+     * @param clientId
+     * @param clientSecret
+     * @param username
+     * @param password
+     * @return
+     */
+    public static String getToken(String clientId, String clientSecret, String username, String password) {
+
+        String authString = clientId+":"+clientSecret;
+        String encodedAuthString = Base64.getEncoder().encodeToString(authString.getBytes());
+        System.out.println(encodedAuthString);
+        Map<String, String> header = new HashMap<>();
+        header.put("Authorization", "Basic "+encodedAuthString);
+
+
+        Map<String, String> body = new HashMap<>();
+        body.put("client_id", clientId);
+        body.put("client_secret", clientSecret);
+        body.put("grant_type", "password");
+        body.put("scope", "company opportunity user");
+        body.put("username", username);
+        body.put("password", password);
+        String str = UtilHttp.doPost("https://api-sandbox.xiaoman.cn/v1/oauth2/access_token", header, null, body);
+        String token = String.valueOf(((Map) JSON.parse(str)).get("access_token"));
+        return token;
+    }
+
+
+    /**
+     * 获取私海客户分组信息
+     * @param token
+     * @return
+     */
+    public static String getGroupId(String token) {
+
+        String url = "https://api-sandbox.xiaoman.cn/v1/company/fields/selector";
+        Map<String, String> headers = new HashMap<>();
+        headers.put("Authorization", "Bearer "+token);
+
+        Map<String, String> params = new HashMap<>();
+        params.put("field","group_id");
+        String rsp = UtilHttp.doGet(url, headers, params);
+        return rsp;
+    }
+
+
+
+    /**
+     * 获取公海客户分组信息
+     * @param token
+     * @return
+     */
+    public static String getPoolGroupId(String token) {
+
+        String url = "https://api-sandbox.xiaoman.cn/v1/company/fields/selector";
+        Map<String, String> headers = new HashMap<>();
+        headers.put("Authorization", "Bearer "+token);
+
+        Map<String, String> params = new HashMap<>();
+        params.put("field","pool_id");
+        String rsp = UtilHttp.doGet(url, headers, params);
+        return rsp;
+    }
+
+
+    /**
+     *
+     * @param token
+     * @param groupId
+     * @param page         页码
+     * @param pageSize   每页数量
+     * @param status   1所有客户  0私海客户
+     * @return
+     */
+
+    public static String getCompany(String token,String groupId,int page,int pageSize,int status) {
+
+        String url = "https://api-sandbox.xiaoman.cn/v1/company/list";
+        Map<String, String> headers = new HashMap<>();
+        headers.put("Authorization", "Bearer "+token);
+
+        Map<String, Object> params = new HashMap<>();
+        params.put("start_index",page);
+        params.put("count",pageSize);
+        params.put("removed", 0);
+        params.put("all", status);
+        params.put("group_id", groupId);
+
+        String rsp = UtilHttp.doGet(url, headers, params);
+        return rsp;
+    }
+
+
+    /**
+     * 获取客户信息
+     * @param token
+     * @return
+     */
+    public static String getCompanyInfo(String token,String companyId) {
+
+        String url = "https://api-sandbox.xiaoman.cn/v1/company/info";
+        Map<String, String> headers = new HashMap<>();
+        headers.put("Authorization", "Bearer "+token);
+
+        Map<String, Object> params = new HashMap<>();
+        params.put("company_id", companyId);
+        String rsp = UtilHttp.doGet(url, headers, params);
+        return rsp;
+    }
+
+
+    /**
+     * 获取商机信息
+     * @param token
+     * @param statrTime   “yyyy-MM-dd”
+     * @param endTime    “yyyy-MM-dd”
+     * @return
+     */
+    public static String getOpportunity(String token,int page,int pageSize,String statrTime,String endTime) {
+
+
+        String url = "https://api-sandbox.xiaoman.cn/v1/opportunity/list";
+        Map<String, String> headers = new HashMap<>();
+        headers.put("Authorization", "Bearer "+token);
+
+        Map<String, Object> params = new HashMap<>();
+        params.put("start_index", page);
+        params.put("count", pageSize);
+        params.put("start_time", statrTime);
+        params.put("end_time", endTime);
+        String rsp = UtilHttp.doGet(url, headers, params);
+
+        return rsp;
+    }
+
+
+    /**
+     * 获用户信息
+     */
+    public static String getUserInfo(String token,String userId) {
+
+
+        String url = "https://api-sandbox.xiaoman.cn/v1/user/info";
+        Map<String, String> headers = new HashMap<>();
+        headers.put("Authorization", "Bearer "+token);
+
+        Map<String, Object> params = new HashMap<>();
+        params.put("user_id",userId);
+        String rsp = UtilHttp.doGet(url, headers, params);
+
+        return rsp;
+    }
+
+}

+ 14 - 5
mjava-huaxiaojinshu/src/main/resources/application-dev.yml

@@ -37,9 +37,9 @@ logging:
 
 
 # dingtalk
 # dingtalk
 dingtalk:
 dingtalk:
-  agentId: 2855972914
-  appKey: dingb1kydxxkseemaybo
-  appSecret: 1dm8Mxmd-CAxQQQpEs4HfHzdS-hngd6G-dnddz0eSEEs0I8BzB7TLh9adGx6TNPJ
+  agentId: 3095766275
+  appKey: dingbk5vgjeceuizxeu4
+  appSecret: XNtatCPBRJ3RWUw47yVKA5Aldqx0PTnG3HOw7yeq_ZbVf5qX2-RavnNr3afGfpat
   corpId: ding2ac6c08d3685357135c2f4657eb6378f
   corpId: ding2ac6c08d3685357135c2f4657eb6378f
   aesKey:
   aesKey:
   token:
   token:
@@ -48,5 +48,14 @@ dingtalk:
 
 
 # aliwork
 # aliwork
 aliwork:
 aliwork:
-  appType: "APP_YIDJ71B8QORD2YHNZ26Q"
-  systemToken: "RH766AC1707FCUZQAKET09YV8I8K3VZA1GVNLN2"
+  appType: "APP_MVBHMJC6EJYHBOPU1K1T"
+  systemToken: "E0D660C1FALKENQ87RAAI4AH8SSB2NUATLKVLKO"
+
+
+
+#   scope---  product company invoices 授权访问的业务API列表,中间加半角空格分割,目前开放 product(产品) company(公司客户) lead(线索) opportunity(商机) invoices(订单、报价单、回款单) user(用户列表)等业务模块
+xiaoman:
+  userName: "yida@huaxia-intl.com"
+  passWord: "HXMyida1!"
+  clientId: "8ec3c78a1bf9ad2a3d8ee5ec2527a2a19e3dcefc9a31e52b13652506aeb5995017b1a8e1c2b71e77"
+  clientSecret: "004fbe9cf0654f8a5e94125269f71348e0f18d201f6bdc262e9cf983e6479c33c8199a049274f3e0"

+ 11 - 5
mjava-huaxiaojinshu/src/main/resources/application-prod.yml

@@ -23,9 +23,9 @@ spring:
     database-platform: org.hibernate.dialect.MySQL57Dialect
     database-platform: org.hibernate.dialect.MySQL57Dialect
 # dingtalk
 # dingtalk
 dingtalk:
 dingtalk:
-  agentId: 2855972914
-  appKey: dingb1kydxxkseemaybo
-  appSecret: 1dm8Mxmd-CAxQQQpEs4HfHzdS-hngd6G-dnddz0eSEEs0I8BzB7TLh9adGx6TNPJ
+  agentId: 3095766275
+  appKey: dingbk5vgjeceuizxeu4
+  appSecret: XNtatCPBRJ3RWUw47yVKA5Aldqx0PTnG3HOw7yeq_ZbVf5qX2-RavnNr3afGfpat
   corpId: ding2ac6c08d3685357135c2f4657eb6378f
   corpId: ding2ac6c08d3685357135c2f4657eb6378f
   aesKey:
   aesKey:
   token:
   token:
@@ -34,6 +34,12 @@ dingtalk:
 
 
 # aliwork
 # aliwork
 aliwork:
 aliwork:
-  appType: "APP_YIDJ71B8QORD2YHNZ26Q"
-  systemToken: "RH766AC1707FCUZQAKET09YV8I8K3VZA1GVNLN2"
+  appType: "APP_MVBHMJC6EJYHBOPU1K1T"
+  systemToken: "E0D660C1FALKENQ87RAAI4AH8SSB2NUATLKVLKO"
 
 
+#小满
+xiaoman:
+  userName: "yida@huaxia-intl.com"
+  passWord: "HXMyida1!"
+  clientId: "8ec3c78a1bf9ad2a3d8ee5ec2527a2a19e3dcefc9a31e52b13652506aeb5995017b1a8e1c2b71e77"
+  clientSecret: "004fbe9cf0654f8a5e94125269f71348e0f18d201f6bdc262e9cf983e6479c33c8199a049274f3e0"