Browse Source

重庆康诚销售易对接钉钉考勤

hxx 1 month ago
parent
commit
b03ae4043e

+ 84 - 0
mjava-kangcheng/pom.xml

@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>com.malk</groupId>
+    <artifactId>mjava-kangcheng</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>kangcheng</name>
+    <description>kangcheng</description>
+    <properties>
+        <java.version>1.8</java.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <spring-boot.version>2.6.13</spring-boot.version>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.malk</groupId>
+            <artifactId>base</artifactId>
+            <version>1.3</version>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-dependencies</artifactId>
+                <version>${spring-boot.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <build>
+        <finalName>kangcheng</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.8.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <encoding>UTF-8</encoding>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>${spring-boot.version}</version>
+                <configuration>
+                    <mainClass>com.malk.kangcheng.KangchengApplication</mainClass>
+<!--                    <skip>true</skip>-->
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>repackage</id>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 16 - 0
mjava-kangcheng/src/main/java/com/malk/kangcheng/KangchengApplication.java

@@ -0,0 +1,16 @@
+package com.malk.kangcheng;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+@SpringBootApplication(scanBasePackages = {"com.malk"})
+@EnableScheduling
+public class KangchengApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(KangchengApplication.class, args);
+    }
+
+}

+ 31 - 0
mjava-kangcheng/src/main/java/com/malk/kangcheng/controller/attendanceController.java

@@ -0,0 +1,31 @@
+package com.malk.kangcheng.controller;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import com.malk.kangcheng.service.YSEITaskService;
+
+import java.io.UnsupportedEncodingException;
+
+/**
+ * 功能:
+ * 作者:hanxue
+ * 日期:2026/2/3 10:46
+ */
+@Slf4j
+@Configuration
+@EnableScheduling
+@ConditionalOnProperty(name = {"enable.scheduling"})
+public class attendanceController {
+    @Autowired
+    private YSEITaskService yseitaskSrevice;
+    @Scheduled(cron = "0 0 21 * * ?")
+    public void syncMaterial() throws UnsupportedEncodingException, JsonProcessingException {
+        yseitaskSrevice.syncAttendance();
+    }
+
+}

+ 9 - 0
mjava-kangcheng/src/main/java/com/malk/kangcheng/controller/oaCrmController.java

@@ -0,0 +1,9 @@
+package com.malk.kangcheng.controller;
+
+/**
+ * 功能:
+ * 作者:hanxue
+ * 日期:2026/2/3 10:47
+ */
+public class oaCrmController {
+}

+ 223 - 0
mjava-kangcheng/src/main/java/com/malk/kangcheng/service/Impl/YSEITaskServiceImpl.java

@@ -0,0 +1,223 @@
+package com.malk.kangcheng.service.Impl;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.malk.kangcheng.service.YSEITaskService;
+import com.malk.server.common.VenR;
+import com.malk.service.dingtalk.DDClient;
+import com.malk.service.dingtalk.DDClient_Attendance;
+import com.malk.service.dingtalk.DDClient_Contacts;
+import com.malk.utils.UtilHttp;
+import com.malk.utils.UtilMap;
+import com.malk.utils.UtilToken;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.io.UnsupportedEncodingException;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 功能:
+ * 作者:hanxue
+ * 日期:2026/2/4 15:23
+ */
+@Slf4j
+@Service
+public class YSEITaskServiceImpl implements YSEITaskService {
+    @Autowired
+    private DDClient_Attendance ddClientAttendance;
+    @Autowired
+    private DDClient ddClient;
+    @Autowired
+    private DDClient_Contacts ddClientContacts;
+    @Value("${neocrm.client_id}")
+    private String clientId;
+    @Value("${neocrm.client_secret}")
+    private String clientSecret;
+    @Value("${neocrm.username}")
+    private String username;
+    @Value("${neocrm.password}")
+    private String password;
+
+
+
+
+    @Override
+    public void syncAttendance() throws JsonProcessingException, UnsupportedEncodingException {
+        log.info("开始同步钉钉打卡记录");
+//        获取当天所有的售后打卡数据
+        Long [] attendanceList =getSYAttendance();
+//        Long[] attendanceList = new Long[]{4256678656838946L};
+        String token =getSYToken();
+        Map header = new HashMap();
+        header.put("Authorization",token);
+//        遍历上传打卡信息
+        for(Long attendanceId:attendanceList){
+            String personAllAttInfo = UtilHttp.doGet("https://api-p05.xiaoshouyi.com/rest/data/v2.0/xobjects/serviceAttendance/"+attendanceId, header, (Map) null);
+            ObjectMapper rootMap = new ObjectMapper();
+            Map personAllAttInfoMap = rootMap.readValue(personAllAttInfo, Map.class);
+            Map personAttData = UtilMap.getMap(personAllAttInfoMap, "data");
+            String query = "select phone,name from user where id =" + UtilMap.getLong(personAttData, "ownerId");
+            String userInfo =UtilHttp.doGet( "https://api-p05.xiaoshouyi.com//rest/data/v2/query?q=" + query, header, (Map) null);
+            Map userInfoMap = rootMap.readValue(userInfo, Map.class);
+            Map userInfoResult = UtilMap.getMap(userInfoMap, "result");
+            List<Map> userInfoList = UtilMap.getList(userInfoResult, "records");
+            Map userdetail= userInfoList.get(0);
+//            同步钉钉打卡数据
+            String userId = UtilMap.getString(ddClientContacts.getUserInfoByMobile(ddClient.getAccessToken(),UtilMap.getString(userdetail, "phone")),"userid");
+            String addressCode ="address";
+            long departureTime =0;
+            long checkinTime =0;
+            long checkoutTime =0;
+            if(!UtilMap.isBlankString(personAttData,"departureTime")){
+                departureTime =UtilMap.getLong(personAttData,"departureTime");
+                String address=UtilMap.isBlankString(personAttData,"departureAddr")?"销售易签到":UtilMap.getString(personAttData, "departureAddr");
+                boolean uploaddepartureResult = ddClientAttendance.uploadAttendanceRecord(ddClient.getAccessToken(),userId,address,addressCode,null,departureTime);
+            }
+            if(!UtilMap.isBlankString(personAttData,"checkinTime")){
+                checkinTime =UtilMap.getLong(personAttData,"checkinTime");
+                String address=UtilMap.isBlankString(personAttData,"checkinAddr")?"销售易签到":UtilMap.getString(personAttData, "checkinAddr");
+                boolean uploadcheckinResult = ddClientAttendance.uploadAttendanceRecord(ddClient.getAccessToken(),userId,address,addressCode,null,checkinTime);
+            }
+            if(!UtilMap.isBlankString(personAttData,"checkoutTime")){
+                checkoutTime =UtilMap.getLong(personAttData,"checkoutTime");
+                String address=UtilMap.isBlankString(personAttData,"checkoutAddr")?"销售易签到":UtilMap.getString(personAttData, "checkoutAddr");
+                boolean uploadcheckoutResult = ddClientAttendance.uploadAttendanceRecord(ddClient.getAccessToken(),userId,address,addressCode,null,checkoutTime);
+            }
+
+        }
+
+    }
+    /**
+     * 获取现场服务考勤id列表
+     */
+
+    public Long[] getSYAttendance() throws JsonProcessingException, UnsupportedEncodingException {
+        String token =getSYToken();
+        Map header = new HashMap();
+        header.put("Authorization",token);
+        long startTime = LocalDate.now()
+                .atStartOfDay()             // 设置为当天 00:00:00
+                .atZone(ZoneId.systemDefault()) // 转换为系统时区
+                .toInstant()
+                .toEpochMilli();
+        long endTime = LocalDate.now()
+                .atTime(23, 59, 59, 999_000_000) // 设置为当天 23:59:59.999
+                .atZone(ZoneId.systemDefault())
+                .toInstant()
+                .toEpochMilli();
+//        测试阶段先同步林成-13098772906- 3513810242771626和陈佩锋-13372629269- 3462626334399040 数据
+        String baseQuery = "select id from serviceAttendance where checkinTime>=" + startTime + " AND checkinTime<=" + endTime+"AND ownerId IN (3513810242771626, 3462626334399040)";
+        ObjectMapper rootMap = new ObjectMapper();
+        ArrayList<Map> allRecordsList = new ArrayList<>(); // 用于存储所有结果
+        int pageSize = 100; // 接口允许的最大条数,建议设为100
+        int offset = 0;
+        int totalSize = -1; // 初始化为-1,表示未知
+        int fetchedCount = 0; // 当前已获取的总数
+        log.info("开始分页拉取打卡记录...");
+        do {
+            String qs = baseQuery + " order by id asc limit " + offset + "," + pageSize;
+            // URL编码可能需要处理
+            String fullUrl = "https://api-p05.xiaoshouyi.com//rest/data/v2/query?q=" +qs;
+            String attendanceRecord = UtilHttp.doGet(fullUrl, header, (Map) null);
+            if (attendanceRecord == null || attendanceRecord.isEmpty()) {
+                log.error("接口返回为空,请检查程序错误");
+                break;
+            }
+            Map attendanceMap = rootMap.readValue(attendanceRecord, Map.class);
+            Map attendanceResult = UtilMap.getMap(attendanceMap, "result");
+            if (attendanceResult == null) {
+                log.error("返回结果中缺少result字段");
+                break;
+            }
+            // 第一次请求时获取总条数
+            if (totalSize == -1) {
+                totalSize = UtilMap.getInt(attendanceResult, "totalSize");
+                log.info("打卡记录总数(totalSize): {}", totalSize);
+                if (totalSize == 0) {
+                    break; // 没有数据直接退出
+                }
+            }
+            // 获取当前页记录
+            List<Map> records = UtilMap.getList(attendanceResult, "records");
+            if (records == null || records.isEmpty()) {
+                log.warn("当前页未获取到数据,可能已达末尾,终止拉取。offset: {}, totalSize: {}", offset, totalSize);
+                break;
+            }
+            // 将当前页数据加入总列表
+            allRecordsList.addAll(records);
+
+            // 更新计数
+            fetchedCount += records.size();
+            offset += pageSize; // 移动偏移量
+            log.info("已拉取: {}/{}, 当前页大小: {}", fetchedCount, totalSize, records.size());
+        } while (fetchedCount < totalSize);
+        log.info("分页拉取完成,最终获取记录数: {}", allRecordsList.size());
+//      提取ID列表
+        if (!allRecordsList.isEmpty()) {
+            Long[] recordsIdList = allRecordsList.stream()
+                    .map(map -> {
+                        Object idObj = map.get("id");
+                        return idObj instanceof Long ? (Long) idObj : Long.valueOf(idObj.toString());
+                    })
+                    .toArray(Long[]::new);
+            log.info("最终打卡记录ID总数:{}", recordsIdList.length);
+            return recordsIdList;
+        }else{
+            log.info("最终打卡记录ID总数:{}", 0);
+            return null;
+        }
+    }
+
+
+
+
+    /**
+     * 销售易获取token
+     */
+    public String getSYToken() throws JsonProcessingException {
+        String accessToken = UtilToken.get("invalid-token");
+        if (StringUtils.isNotBlank(accessToken)) return accessToken;
+        Map header = new HashMap();
+        header.put("Content-Type","application/x‐www‐form‐urlencoded");
+        Map param = new HashMap();
+        param.put("grant_type","password");
+        param.put("client_id",clientId);
+        param.put("client_secret",clientSecret);
+        param.put("username",username);
+        param.put("password",password);
+        String resultParam = UtilHttp.doPost("https://login.xiaoshouyi.com/auc/oauth2/token", header, param, (Map) null);
+        log.info("获取销售易token结果:{}",resultParam);
+        ObjectMapper rootMap = new ObjectMapper();
+        Map resultMap = rootMap.readValue(resultParam, Map.class);
+        accessToken ="Bearer "+UtilMap.getString(resultMap,"access_token");
+        UtilToken.put("invalid-token", accessToken, 86399 * 1000L);
+        return accessToken;
+    }
+
+    /**
+     * 同步钉钉打卡记录
+     */
+//    public boolean syncDDRecord(Map param) throws JsonProcessingException {
+////        根据手机号获取userId
+//        String userId = UtilMap.getString(ddClientContacts.getUserInfoByMobile(ddClient.getAccessToken(),param.get("mobile").toString()),"userId");
+//        String address ="";
+//        String addressCode ="";
+//        long departureTime =UtilMap.getLong(param,"departureTime");
+//        long checkinTime =UtilMap.getLong(param,"checkinTime");
+//        long checkoutTime =UtilMap.getLong(param,"checkoutTime");
+////        上传打卡记录
+//        boolean uploaddepartureResult = ddClientAttendance.uploadAttendanceRecord(ddClient.getAccessToken(),userId,address,addressCode,null,departureTime);
+//        boolean uploadcheckinResult = ddClientAttendance.uploadAttendanceRecord(ddClient.getAccessToken(),userId,address,addressCode,null,checkinTime);
+//        boolean uploadcheckoutResult = ddClientAttendance.uploadAttendanceRecord(ddClient.getAccessToken(),userId,address,addressCode,null,checkoutTime);
+//        return uploaddepartureResult&&uploadcheckinResult&&uploadcheckoutResult;
+//    }
+}

+ 13 - 0
mjava-kangcheng/src/main/java/com/malk/kangcheng/service/YSEITaskService.java

@@ -0,0 +1,13 @@
+package com.malk.kangcheng.service;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import org.springframework.stereotype.Service;
+
+import java.io.UnsupportedEncodingException;
+
+
+public interface YSEITaskService {
+    void syncAttendance() throws JsonProcessingException, UnsupportedEncodingException;
+
+
+}

+ 51 - 0
mjava-kangcheng/src/main/resources/application-dev.yml

@@ -0,0 +1,51 @@
+server:
+  port: 9002
+  servlet:
+    context-path: /kangcheng
+
+#spring:
+#  datasource:
+#    url: jdbc:mysql://localhost:3306/floe?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC
+#    username: root
+#    password: 111111
+#    driver-class-name: com.mysql.cj.jdbc.Driver
+enable:
+  scheduling: true
+logging:
+  config: classpath:logback-spring.xml
+  path: /home/server/kangcheng/log/
+  level:
+    com.malk.*: debug
+
+
+mybatis-plus:
+  configuration:
+    #开启驼峰命名自动映射
+    map-underscore-to-camel-case: true
+    #开启日志打印
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+  type-aliases-package: com.malk.kabeiyi.entity
+  #扫描mapper文件
+  mapper-locations: classpath:mapper/*.xml
+
+
+# dingtalk
+dingtalk:
+  agentId:
+  appKey: dingji9zqgtxsqz8tvpe
+  appSecret: bg_xakyOfvAItXP99k12NjT5u7iWD5dv0MMsqHcYn3VncmPHgTG1bpfUFMIGXOW7
+  corpId:
+  aesKey:
+  token:
+  operator:
+
+aliwork:
+  appType: APP_D7TTZKL8C03JKEWCNW74
+  systemToken: TCC66771RQETFGT5DYPUGAXP4GRC29A6HCV7MV19
+
+neocrm:
+  client_id: 5ea2ac5be29c56c77094ff9916765038
+  client_secret: 4b75c0790a33c049926213febfd09a9f
+  username: 13022307850
+  password: YSEI2026U9tLkrqu
+

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

@@ -0,0 +1,44 @@
+server:
+  port: 9054
+  servlet:
+    context-path: /kangcheng
+
+enable:
+  scheduling: true
+logging:
+  config: classpath:logback-spring.xml
+  path: /home/server/kangcheng/log/
+  level:
+    com.malk.*: info
+
+mybatis-plus:
+  configuration:
+    #开启驼峰命名自动映射
+    map-underscore-to-camel-case: true
+    #开启日志打印
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+  type-aliases-package: com.malk.kabeiyi.entity
+  #扫描mapper文件
+  mapper-locations: classpath:mapper/*.xml
+
+
+
+# dingtalk
+dingtalk:
+  agentId:
+  appKey: dingji9zqgtxsqz8tvpe
+  appSecret: bg_xakyOfvAItXP99k12NjT5u7iWD5dv0MMsqHcYn3VncmPHgTG1bpfUFMIGXOW7
+  corpId:
+  aesKey:
+  token:
+  operator:
+
+aliwork:
+  appType: APP_D7TTZKL8C03JKEWCNW74
+  systemToken: TCC66771RQETFGT5DYPUGAXP4GRC29A6HCV7MV19
+
+neocrm:
+  client_id: 5ea2ac5be29c56c77094ff9916765038
+  client_secret: 4b75c0790a33c049926213febfd09a9f
+  username: 13022307850
+  password: YSEI2026U9tLkrqu

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

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

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

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

+ 25 - 0
mjava-kangcheng/src/test/java/com/malk/kangcheng/KangchengApplicationTests.java

@@ -0,0 +1,25 @@
+package com.malk.kangcheng;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.malk.kangcheng.service.YSEITaskService;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import java.io.UnsupportedEncodingException;
+
+@SpringBootTest
+class KangchengApplicationTests {
+
+    @Autowired
+    private YSEITaskService yseitaskSrevice;
+//    @Test
+//    void contextLoads() {
+//    }
+//
+    @Test
+    public void test() throws JsonProcessingException, UnsupportedEncodingException {
+        yseitaskSrevice.syncAttendance();
+    }
+
+}