From 17788a111fe687f29ff852690c07b7312b42a074 Mon Sep 17 00:00:00 2001
From: 陈杰 <504987307@qq.com>
Date: Tue, 31 Dec 2019 15:31:26 +0800
Subject: [PATCH] 中控指纹机

---
 cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SZ_AttendanceDto.java                   |  19 +++++++++++++++++++
 cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SyncUserDto.java                        |  10 +++++-----
 cloud/common/src/main/java/com/sincere/common/dto/xiaoan/FingerDto.java                               |  39 +++++++++++++++++++++++++++++++++++++++
 cloud/common/src/main/java/com/sincere/common/util/HttpClientUtils.java                               |   6 +++---
 cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/AttendanceController.java   |  13 +++++++++++++
 cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/UserController.java         |  26 ++++++++++++++++++++++++++
 cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/AttendaceMapper.java            |   6 ++++++
 cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/UserMapper.java                 |  11 +++++++++++
 cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/AttendacenService.java         |   5 +++++
 cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/UserService.java               |  12 ++++++++++++
 cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/AttendacenServiceImp.java |  15 +++++++++++++++
 cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/UserServiceImpl.java      |  23 +++++++++++++++++++++++
 cloud/search_smartCampus/src/main/resources/application.yml                                           |  12 ++++++------
 cloud/search_smartCampus/src/main/resources/mapper/AttendanceMapper.xml                               |  14 ++++++++++++++
 cloud/search_smartCampus/src/main/resources/mapper/SyncMapper.xml                                     |   8 ++++----
 cloud/search_smartCampus/src/main/resources/mapper/UserMapper.xml                                     |   9 +++++++++
 cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/controller/ZkController.java               |  30 ++++++++++++++++++++++++++++++
 cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/mapper/FingerMapper.java                   |  13 +++++++++++++
 cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/service/ZkService.java                     |  12 ++++++++++++
 cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/service/impl/ZkServiceImpl.java            |  24 ++++++++++++++++++++++++
 cloud/search_xiaoan/src/main/resources/mapper/FingerMapper.xml                                        |  11 +++++++++++
 cloud/zkAttendance/pom.xml                                                                            | 138 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 cloud/zkAttendance/src/main/java/com/sincere/att/AttApplication.java                                  |  21 +++++++++++++++++++++
 cloud/zkAttendance/src/main/java/com/sincere/att/Swagger2.java                                        |  38 ++++++++++++++++++++++++++++++++++++++
 cloud/zkAttendance/src/main/java/com/sincere/att/controller/AttPushController.java                    | 295 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 cloud/zkAttendance/src/main/java/com/sincere/att/feign/ScFeign.java                                   |  36 ++++++++++++++++++++++++++++++++++++
 cloud/zkAttendance/src/main/java/com/sincere/att/feign/XaFeign.java                                   |  19 +++++++++++++++++++
 cloud/zkAttendance/src/main/java/com/sincere/att/logs/LogName.java                                    |  39 +++++++++++++++++++++++++++++++++++++++
 cloud/zkAttendance/src/main/java/com/sincere/att/logs/LoggerUtils.java                                |  27 +++++++++++++++++++++++++++
 cloud/zkAttendance/src/main/java/com/sincere/att/logs/MyTimeBasedFileNamingAndTriggeringPolicy.java   |  32 ++++++++++++++++++++++++++++++++
 cloud/zkAttendance/src/main/java/com/sincere/att/vo/AttendanceInfoBean.java                           |  61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 cloud/zkAttendance/src/main/java/com/sincere/att/vo/OrderVo.java                                      |  28 ++++++++++++++++++++++++++++
 cloud/zkAttendance/src/main/java/com/sincere/att/vo/UserOrderVo.java                                  |  25 +++++++++++++++++++++++++
 cloud/zkAttendance/src/main/resources/application.yaml                                                |  16 ++++++++++++++++
 cloud/zkAttendance/src/main/resources/cmd.txt                                                         |   3 +++
 cloud/zkAttendance/src/main/resources/logback.xml                                                     | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 36 files changed, 1196 insertions(+), 18 deletions(-)
 create mode 100644 cloud/common/src/main/java/com/sincere/common/dto/xiaoan/FingerDto.java
 create mode 100644 cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/UserController.java
 create mode 100644 cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/UserMapper.java
 create mode 100644 cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/UserService.java
 create mode 100644 cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/UserServiceImpl.java
 create mode 100644 cloud/search_smartCampus/src/main/resources/mapper/UserMapper.xml
 create mode 100644 cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/controller/ZkController.java
 create mode 100644 cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/mapper/FingerMapper.java
 create mode 100644 cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/service/ZkService.java
 create mode 100644 cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/service/impl/ZkServiceImpl.java
 create mode 100644 cloud/search_xiaoan/src/main/resources/mapper/FingerMapper.xml
 create mode 100644 cloud/zkAttendance/pom.xml
 create mode 100644 cloud/zkAttendance/src/main/java/com/sincere/att/AttApplication.java
 create mode 100644 cloud/zkAttendance/src/main/java/com/sincere/att/Swagger2.java
 create mode 100644 cloud/zkAttendance/src/main/java/com/sincere/att/controller/AttPushController.java
 create mode 100644 cloud/zkAttendance/src/main/java/com/sincere/att/feign/ScFeign.java
 create mode 100644 cloud/zkAttendance/src/main/java/com/sincere/att/feign/XaFeign.java
 create mode 100644 cloud/zkAttendance/src/main/java/com/sincere/att/logs/LogName.java
 create mode 100644 cloud/zkAttendance/src/main/java/com/sincere/att/logs/LoggerUtils.java
 create mode 100644 cloud/zkAttendance/src/main/java/com/sincere/att/logs/MyTimeBasedFileNamingAndTriggeringPolicy.java
 create mode 100644 cloud/zkAttendance/src/main/java/com/sincere/att/vo/AttendanceInfoBean.java
 create mode 100644 cloud/zkAttendance/src/main/java/com/sincere/att/vo/OrderVo.java
 create mode 100644 cloud/zkAttendance/src/main/java/com/sincere/att/vo/UserOrderVo.java
 create mode 100644 cloud/zkAttendance/src/main/resources/application.yaml
 create mode 100644 cloud/zkAttendance/src/main/resources/cmd.txt
 create mode 100644 cloud/zkAttendance/src/main/resources/logback.xml

diff --git a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SZ_AttendanceDto.java b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SZ_AttendanceDto.java
index e0a33b4..79492a9 100644
--- a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SZ_AttendanceDto.java
+++ b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SZ_AttendanceDto.java
@@ -23,6 +23,25 @@ public class SZ_AttendanceDto {
 
     private int IsKaoqin;
 
+    private String ip ;
+    private int port ;
+
+    public String getIp() {
+        return ip;
+    }
+
+    public void setIp(String ip) {
+        this.ip = ip;
+    }
+
+    public int getPort() {
+        return port;
+    }
+
+    public void setPort(int port) {
+        this.port = port;
+    }
+
     public int getIsKaoqin() {
         return IsKaoqin;
     }
diff --git a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SyncUserDto.java b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SyncUserDto.java
index db39a83..4bbae14 100644
--- a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SyncUserDto.java
+++ b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SyncUserDto.java
@@ -15,14 +15,14 @@ public class SyncUserDto {
     private int sex ;
     private String mobile ;
     private int updateType ;
-    private String hxyCustomerId ;
+    private String yxyUserId ;
 
-    public String getHxyCustomerId() {
-        return hxyCustomerId;
+    public String getYxyUserId() {
+        return yxyUserId;
     }
 
-    public void setHxyCustomerId(String hxyCustomerId) {
-        this.hxyCustomerId = hxyCustomerId;
+    public void setYxyUserId(String yxyUserId) {
+        this.yxyUserId = yxyUserId;
     }
 
     public int getId() {
diff --git a/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/FingerDto.java b/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/FingerDto.java
new file mode 100644
index 0000000..5091729
--- /dev/null
+++ b/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/FingerDto.java
@@ -0,0 +1,39 @@
+package com.sincere.common.dto.xiaoan;
+
+import java.util.Date;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/12/31 0031 13:37
+ */
+public class FingerDto {
+
+    private int studentId ;
+    private String orderMsg ;
+    private Date createTime ;
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public int getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(int studentId) {
+        this.studentId = studentId;
+    }
+
+    public String getOrderMsg() {
+        return orderMsg;
+    }
+
+    public void setOrderMsg(String orderMsg) {
+        this.orderMsg = orderMsg;
+    }
+}
diff --git a/cloud/common/src/main/java/com/sincere/common/util/HttpClientUtils.java b/cloud/common/src/main/java/com/sincere/common/util/HttpClientUtils.java
index e557448..902abae 100644
--- a/cloud/common/src/main/java/com/sincere/common/util/HttpClientUtils.java
+++ b/cloud/common/src/main/java/com/sincere/common/util/HttpClientUtils.java
@@ -46,8 +46,8 @@ public class HttpClientUtils {
 //        JSONObject jsonObject = HttpClientUtils.httpPostJson(url,json);
 //        System.out.println(jsonObject.toJSONString());
 
-        String url = "http://115.239.135.60/token/yxt" ;
-        String json = "key=SZKJ&secret=87dyNIZReZNl6LXGsihfyX3unYgwukSk" ;
+        String url = "http://campus.myjxt.com/api/Room/GetListPageRoom" ;
+        String json = "PageIndex=1&roomId=6583&pageSize=9999" ;
         JSONObject jsonObject = HttpClientUtils.httpPost(url,json);
         System.out.println(jsonObject.toJSONString());
     }
@@ -84,7 +84,7 @@ public class HttpClientUtils {
 
             }
         } catch (IOException e) {
-
+            e.printStackTrace();
         } finally {
             httpPost.releaseConnection();
         }
diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/AttendanceController.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/AttendanceController.java
index 2724acc..784c2e1 100644
--- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/AttendanceController.java
+++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/AttendanceController.java
@@ -31,5 +31,18 @@ public class AttendanceController {
 
     }
 
+    @RequestMapping(value = "insertAttendance", method = RequestMethod.POST)
+    void insertAttendance(@RequestBody SZ_AttendanceDto attendanceDto){
+        attendacenService.insertAttendance(attendanceDto);
+    }
+
+    @RequestMapping(value = "updateAttendance", method = RequestMethod.GET)
+    void updateAttendance(@RequestParam("clientId") String clientId){
+        attendacenService.updateAttendance(clientId);
+    }
 
+    @RequestMapping(value = "selectRoomAttendance", method = RequestMethod.GET)
+    List<String> selectRoomAttendance(@RequestParam("placeId") int placeId){
+        return attendacenService.selectRoomAttendance(placeId);
+    }
 }
diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/UserController.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/UserController.java
new file mode 100644
index 0000000..992e99d
--- /dev/null
+++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/UserController.java
@@ -0,0 +1,26 @@
+package com.sincere.smartSearch.controller;
+
+import com.sincere.smartSearch.service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/12/31 0031 13:53
+ */
+@RestController
+@RequestMapping("/sm/user")
+public class UserController {
+
+    @Autowired
+    UserService userService;
+
+    @RequestMapping(value = "selectStudentNumByStudentId",method = RequestMethod.GET)
+    String selectStudentNumByStudentId(@RequestParam("studentId") int studentId){
+        return userService.selectStudentNumByStudentId(studentId);
+    }
+}
diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/AttendaceMapper.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/AttendaceMapper.java
index 81fd8b4..6b9a43e 100644
--- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/AttendaceMapper.java
+++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/AttendaceMapper.java
@@ -13,4 +13,10 @@ public interface AttendaceMapper {
 
     List<SZ_AttendanceDto> getAttensWithIsKaoqin(int IsKaoqin);
 
+    int insertAttendance(SZ_AttendanceDto attendanceDto) ;
+
+    int updateAttendance(String client_id);
+
+    List<String> selectRoomAttendance(int placeId);
+
 }
diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/UserMapper.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/UserMapper.java
new file mode 100644
index 0000000..8c866b5
--- /dev/null
+++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/UserMapper.java
@@ -0,0 +1,11 @@
+package com.sincere.smartSearch.mapper;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/12/31 0031 13:52
+ */
+public interface UserMapper {
+
+    String selectStudentNumByStudentId(int studentId);
+}
diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/AttendacenService.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/AttendacenService.java
index 1496062..4981a09 100644
--- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/AttendacenService.java
+++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/AttendacenService.java
@@ -13,4 +13,9 @@ public interface AttendacenService {
 
     List<SZ_AttendanceDto> getAttensWithIsKaoqin(int IsKaoqin);
 
+    int insertAttendance(SZ_AttendanceDto attendanceDto) ;
+
+    int updateAttendance(String client_id);
+
+    List<String> selectRoomAttendance(int placeId);
 }
diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/UserService.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/UserService.java
new file mode 100644
index 0000000..5a27520
--- /dev/null
+++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/UserService.java
@@ -0,0 +1,12 @@
+package com.sincere.smartSearch.service;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/12/31 0031 13:52
+ */
+public interface UserService {
+
+    String selectStudentNumByStudentId(int studentId);
+
+}
diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/AttendacenServiceImp.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/AttendacenServiceImp.java
index a503d6b..19e7862 100644
--- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/AttendacenServiceImp.java
+++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/AttendacenServiceImp.java
@@ -24,4 +24,19 @@ public class AttendacenServiceImp implements AttendacenService {
 
         return attendaceMapper.getAttensWithIsKaoqin(IsKaoqin);
     }
+
+    @Override
+    public int insertAttendance(SZ_AttendanceDto attendanceDto) {
+        return attendaceMapper.insertAttendance(attendanceDto);
+    }
+
+    @Override
+    public int updateAttendance(String client_id) {
+        return attendaceMapper.updateAttendance(client_id);
+    }
+
+    @Override
+    public List<String> selectRoomAttendance(int placeId) {
+        return attendaceMapper.selectRoomAttendance(placeId);
+    }
 }
diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/UserServiceImpl.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/UserServiceImpl.java
new file mode 100644
index 0000000..31ce0fd
--- /dev/null
+++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/UserServiceImpl.java
@@ -0,0 +1,23 @@
+package com.sincere.smartSearch.service.impl;
+
+import com.sincere.smartSearch.mapper.UserMapper;
+import com.sincere.smartSearch.service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/12/31 0031 13:53
+ */
+@Service
+public class UserServiceImpl implements UserService {
+
+    @Autowired
+    UserMapper userMapper ;
+
+    @Override
+    public String selectStudentNumByStudentId(int studentId) {
+        return userMapper.selectStudentNumByStudentId(studentId);
+    }
+}
diff --git a/cloud/search_smartCampus/src/main/resources/application.yml b/cloud/search_smartCampus/src/main/resources/application.yml
index 239a06f..ad5513a 100644
--- a/cloud/search_smartCampus/src/main/resources/application.yml
+++ b/cloud/search_smartCampus/src/main/resources/application.yml
@@ -4,12 +4,12 @@ spring:
   application:
     name: smartCampusSearch
   datasource:
-#    username: szjxtuser
-#    password: RQminVCJota3H1u8bBYH
-#    url: jdbc:sqlserver://116.62.155.137:33419;database=SmartCampus
-    username: SZJXTUSER
-    password: xst200919
-    url: jdbc:sqlserver://60.190.202.57:14333;database=SmartCampusSZ
+    username: szjxtuser
+    password: RQminVCJota3H1u8bBYH
+    url: jdbc:sqlserver://116.62.155.137:33419;database=SmartCampus
+#    username: SZJXTUSER
+#    password: xst200919
+#    url: jdbc:sqlserver://60.190.202.57:14333;database=SmartCampusSZ
     driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
   mvc:
     static-path-pattern: /images/**
diff --git a/cloud/search_smartCampus/src/main/resources/mapper/AttendanceMapper.xml b/cloud/search_smartCampus/src/main/resources/mapper/AttendanceMapper.xml
index d196bfb..2ed85bd 100644
--- a/cloud/search_smartCampus/src/main/resources/mapper/AttendanceMapper.xml
+++ b/cloud/search_smartCampus/src/main/resources/mapper/AttendanceMapper.xml
@@ -28,4 +28,18 @@
 
     </select>
 
+    <insert id="insertAttendance" parameterType="com.sincere.common.dto.smartCampus.SZ_AttendanceDto">
+        insert into SZ_Attendance(clint_id , clint_type , ip , port , intime ,school_id , state)
+        values (#{clint_id},#{clint_type},#{ip} , #{port},#{intime},#{school_id},#{state})
+    </insert>
+
+    <update id="updateAttendance" parameterType="java.lang.String">
+        update SZ_Attendance set lastlogin_time = GETDATE() , isConnection = 1 where clint_id = #{clint_id}
+    </update>
+
+
+    <select id="selectRoomAttendance" parameterType="java.lang.Integer" resultType="java.lang.String">
+        select KaoQinAttendance from XA_PlaceAttendance where PlaceId = #{placeId}
+    </select>
+
 </mapper>
diff --git a/cloud/search_smartCampus/src/main/resources/mapper/SyncMapper.xml b/cloud/search_smartCampus/src/main/resources/mapper/SyncMapper.xml
index 14653d8..866216a 100644
--- a/cloud/search_smartCampus/src/main/resources/mapper/SyncMapper.xml
+++ b/cloud/search_smartCampus/src/main/resources/mapper/SyncMapper.xml
@@ -48,7 +48,7 @@
   </update>
 
   <update id="updateUser" parameterType="java.lang.Integer" >
-    update HS_StudentUpdateCard set yxy_is_new = 1 where ID = #{id}
+    update HS_StudentUpdateCard set Yxy_IsNew = 1 where ID = #{id}
   </update>
 
   <resultMap id="UserDtp" type="com.sincere.common.dto.smartCampus.SyncUserDto">
@@ -60,7 +60,7 @@
     <result column="Sex" property="sex" />
     <result column="mobile" property="mobile"  />
     <result column="UpdateType" property="updateType"  />
-    <result column="hxyCustomerId" property="hxyCustomerId"  />
+    <result column="yxyUserId" property="yxyUserId"  />
   </resultMap>
   <select id="selectUser" parameterType="java.lang.Integer" resultMap="UserDtp">
     select HS_StudentUpdateCard.ID , HS_StudentUpdateCard.UserType , HS_StudentUpdateCard.Name , HS_StudentUpdateCard.ClassId , HS_StudentUpdateCard.CustomerId , HS_StudentUpdateCard.Sex , HS_StudentUpdateCard.mobile , HS_StudentUpdateCard.UpdateType , SZ_UserRelation.yxyUserId from HS_StudentUpdateCard
@@ -74,7 +74,7 @@
   </insert>
 
   <update id="updateDeptRelation" parameterType="com.sincere.common.dto.smartCampus.DeptRelationDto">
-    update SZ_DeptRelation set updateTime = GETDATE() where state = #{state} and hxyDeptId = #{hxyDeptId}
+    update SZ_DeptRelation set updateTime = GETDATE() , state = #{state} where hxyDeptId = #{hxyDeptId}
   </update>
 
   <select id="selectYxyIdByHxyId" parameterType="java.lang.Integer" resultType="java.lang.String">
@@ -88,7 +88,7 @@
   </insert>
 
   <update id="updateUserRelation" parameterType="com.sincere.common.dto.smartCampus.DeptRelationDto">
-    update SZ_UserRelation set updateTime = GETDATE() where state = #{state} and hxyCustomerId = #{hxyCustomerId}
+    update SZ_UserRelation set updateTime = GETDATE() , state = #{state} where hxyCustomerId = #{hxyCustomerId}
   </update>
 
   <select id="selectUserYxyIdByHxyId" parameterType="java.lang.String" resultType="java.lang.String">
diff --git a/cloud/search_smartCampus/src/main/resources/mapper/UserMapper.xml b/cloud/search_smartCampus/src/main/resources/mapper/UserMapper.xml
new file mode 100644
index 0000000..394226c
--- /dev/null
+++ b/cloud/search_smartCampus/src/main/resources/mapper/UserMapper.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.sincere.smartSearch.mapper.UserMapper" >
+
+  <select id="selectStudentNumByStudentId" parameterType="java.lang.Integer" resultType="java.lang.String">
+        select student_num from SZ_V_School_Student where student_id = #{studentId}
+  </select>
+
+</mapper>
\ No newline at end of file
diff --git a/cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/controller/ZkController.java b/cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/controller/ZkController.java
new file mode 100644
index 0000000..63d4e8d
--- /dev/null
+++ b/cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/controller/ZkController.java
@@ -0,0 +1,30 @@
+package com.sincere.xiaoanSearch.controller;
+
+import com.sincere.common.dto.xiaoan.CheckInDto;
+import com.sincere.common.dto.xiaoan.CheckOutDto;
+import com.sincere.common.dto.xiaoan.FingerDto;
+import com.sincere.xiaoanSearch.model.CheckIn;
+import com.sincere.xiaoanSearch.service.ZkService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/12/31 0031 13:41
+ */
+@RestController
+@RequestMapping("/xa/zk")
+public class ZkController {
+
+    @Autowired
+    ZkService zkService ;
+
+    @RequestMapping(value = "insertFinger",method = RequestMethod.POST)
+    public int insertFinger(@RequestBody FingerDto fingerDto){
+        return zkService.insertFinger(fingerDto);
+    }
+}
diff --git a/cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/mapper/FingerMapper.java b/cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/mapper/FingerMapper.java
new file mode 100644
index 0000000..1ae0ffc
--- /dev/null
+++ b/cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/mapper/FingerMapper.java
@@ -0,0 +1,13 @@
+package com.sincere.xiaoanSearch.mapper;
+
+import com.sincere.common.dto.xiaoan.FingerDto;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/12/31 0031 13:38
+ */
+public interface FingerMapper {
+
+    int insertFinger(FingerDto fingerDto);
+}
diff --git a/cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/service/ZkService.java b/cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/service/ZkService.java
new file mode 100644
index 0000000..a1e5480
--- /dev/null
+++ b/cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/service/ZkService.java
@@ -0,0 +1,12 @@
+package com.sincere.xiaoanSearch.service;
+
+import com.sincere.common.dto.xiaoan.FingerDto;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/12/31 0031 13:40
+ */
+public interface ZkService {
+    int insertFinger(FingerDto fingerDto);
+}
diff --git a/cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/service/impl/ZkServiceImpl.java b/cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/service/impl/ZkServiceImpl.java
new file mode 100644
index 0000000..a0f770d
--- /dev/null
+++ b/cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/service/impl/ZkServiceImpl.java
@@ -0,0 +1,24 @@
+package com.sincere.xiaoanSearch.service.impl;
+
+import com.sincere.common.dto.xiaoan.FingerDto;
+import com.sincere.xiaoanSearch.mapper.FingerMapper;
+import com.sincere.xiaoanSearch.service.ZkService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/12/31 0031 13:40
+ */
+@Service
+public class ZkServiceImpl implements ZkService {
+
+    @Autowired
+    FingerMapper fingerMapper ;
+
+    @Override
+    public int insertFinger(FingerDto fingerDto) {
+        return fingerMapper.insertFinger(fingerDto);
+    }
+}
diff --git a/cloud/search_xiaoan/src/main/resources/mapper/FingerMapper.xml b/cloud/search_xiaoan/src/main/resources/mapper/FingerMapper.xml
new file mode 100644
index 0000000..51db800
--- /dev/null
+++ b/cloud/search_xiaoan/src/main/resources/mapper/FingerMapper.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.sincere.xiaoanSearch.mapper.FingerMapper" >
+
+
+    <insert id="insertFinger" parameterType="com.sincere.common.dto.xiaoan.FingerDto">
+        insert into zk_finger (student_id , order_msg , create_time)
+        values (#{studentId},#{orderMsg},#{createTime})
+    </insert>
+
+</mapper>
\ No newline at end of file
diff --git a/cloud/zkAttendance/pom.xml b/cloud/zkAttendance/pom.xml
new file mode 100644
index 0000000..29e9e74
--- /dev/null
+++ b/cloud/zkAttendance/pom.xml
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>cloud</artifactId>
+        <groupId>com.sincere</groupId>
+        <version>1.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>zkAttendance</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.sincere</groupId>
+            <artifactId>common</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-feign</artifactId>
+            <version>1.3.6.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-openfeign-core</artifactId>
+            <version>2.1.2.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <version>3.3.2</version>
+        </dependency>
+    </dependencies>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.cloud</groupId>
+                <artifactId>spring-cloud-dependencies</artifactId>
+                <version>${spring-cloud.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <build>
+        <!--打包文件名-->
+        <finalName>att_server</finalName>
+        <!--打包方式-->
+        <plugins>
+            <!-- 设置编译版本 -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <encoding>UTF-8</encoding>
+                </configuration>
+            </plugin>
+            <!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 -->
+            <!-- 本地启动需要注释-->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <mainClass>com.sincere.quartz.QuartzApplication</mainClass>
+                            <addClasspath>true</addClasspath>
+                            <classpathPrefix>lib/</classpathPrefix>
+                        </manifest>
+                        <manifestEntries>
+                            <Class-Path>./config/</Class-Path>
+                        </manifestEntries>
+                    </archive>
+                    <excludes>
+                        <exclude>config/**</exclude>
+                    </excludes>
+                    <classesDirectory></classesDirectory>
+                </configuration>
+            </plugin>
+            <!-- 拷贝依赖的jar包到lib目录 -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>
+                                ${project.build.directory}/lib
+                            </outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <!-- 解决资源文件的编码问题 -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-resources-plugin</artifactId>
+                <version>2.5</version>
+                <configuration>
+                    <encoding>UTF-8</encoding>
+                </configuration>
+            </plugin>
+            <!-- 打包source文件为jar文件 -->
+            <plugin>
+                <artifactId>maven-source-plugin</artifactId>
+                <version>2.2</version>
+                <configuration>
+                    <attach>true</attach>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>compile</phase>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
\ No newline at end of file
diff --git a/cloud/zkAttendance/src/main/java/com/sincere/att/AttApplication.java b/cloud/zkAttendance/src/main/java/com/sincere/att/AttApplication.java
new file mode 100644
index 0000000..692e434
--- /dev/null
+++ b/cloud/zkAttendance/src/main/java/com/sincere/att/AttApplication.java
@@ -0,0 +1,21 @@
+package com.sincere.att;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/11/27 0027 14:24
+ */
+@EnableFeignClients(basePackages = "com.sincere.att.feign")
+@EnableEurekaClient
+@SpringBootApplication
+public class AttApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(AttApplication.class, args);
+    }
+}
diff --git a/cloud/zkAttendance/src/main/java/com/sincere/att/Swagger2.java b/cloud/zkAttendance/src/main/java/com/sincere/att/Swagger2.java
new file mode 100644
index 0000000..4dcbca2
--- /dev/null
+++ b/cloud/zkAttendance/src/main/java/com/sincere/att/Swagger2.java
@@ -0,0 +1,38 @@
+package com.sincere.att;
+
+import io.swagger.annotations.ApiOperation;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+@EnableSwagger2
+@Configuration      //让Spring来加载该类配置
+public class Swagger2 {
+
+    @Bean
+   public Docket createRestApi() {
+        return new Docket(DocumentationType.SWAGGER_2)
+                .apiInfo(apiInfo())
+                .enableUrlTemplating(true)
+                .select()
+                // 扫描所有有注解的api,用这种方式更灵活
+                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
+                .paths(PathSelectors.any())
+                .build();
+
+    }
+     private ApiInfo apiInfo() {
+        return new ApiInfoBuilder()
+               .title("Spring Boot中使用Swagger2构建RESTful APIs")
+                 .description("接口文档")
+                 .termsOfServiceUrl("")
+                .version("1.0")
+              .build();
+     }
+}
diff --git a/cloud/zkAttendance/src/main/java/com/sincere/att/controller/AttPushController.java b/cloud/zkAttendance/src/main/java/com/sincere/att/controller/AttPushController.java
new file mode 100644
index 0000000..4248848
--- /dev/null
+++ b/cloud/zkAttendance/src/main/java/com/sincere/att/controller/AttPushController.java
@@ -0,0 +1,295 @@
+package com.sincere.att.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.sincere.att.feign.ScFeign;
+import com.sincere.att.feign.XaFeign;
+import com.sincere.att.logs.LogName;
+import com.sincere.att.logs.LoggerUtils;
+import com.sincere.att.vo.AttendanceInfoBean;
+import com.sincere.att.vo.UserOrderVo;
+import com.sincere.common.dto.smartCampus.SZ_AttendanceDto;
+import com.sincere.common.dto.xiaoan.FingerDto;
+import com.sincere.common.util.DateUtils;
+import com.sincere.common.util.HttpClientUtils;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.math.BigInteger;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * 所有的设备请求都会在url参数里携带SN,这是设备序列号(serial number的缩写),每个设备唯一标识
+ */
+@Controller
+@RequestMapping("/iclock")
+public class AttPushController {
+    private static final Logger Log_orderFail = LoggerUtils.Logger(LogName.orderFail);
+    private static final Logger Log_orderSuccess = LoggerUtils.Logger(LogName.orderSuccess);
+    private static final Logger Log_kaoInfo = LoggerUtils.Logger(LogName.kaoInfo);
+
+    private static Map<String, List<String>> cmdMap = new HashMap<>();
+    private static Map<String , Integer> cmdOrderMap = new HashMap<>();
+
+    private static String pwd = "22222222-6faf-48uh-a5a9-447ec68bfe2f" ;
+    private static String account = "yueqingzhijiao" ;
+
+
+    @Autowired
+    ScFeign scFeign;
+
+    @Autowired
+    XaFeign xaFeign ;
+
+    @RequestMapping(value = "sendOrder/{roomId}" , method = RequestMethod.GET)
+    public void sendOrder(@PathVariable int roomId){
+        JSONObject object = new JSONObject();
+        object.put("PageIndex",1);
+        object.put("roomId",roomId);
+        object.put("pageSize",9999);
+        JSONObject result = HttpClientUtils.httpPostJson("http://campus.myjxt.com/api/Room/GetListPageRoom",object.toJSONString());
+        JSONArray array = (JSONArray) ((JSONObject) result.get("data")).get("roomList") ;
+        List<String> order = new ArrayList<>();
+        List<String> attendanceList = scFeign.selectRoomAttendance(roomId);
+        for(String attendance : attendanceList){
+            for(int i = 0 ; i < array.size() ; i++){
+                JSONObject student = (JSONObject) array.get(i);
+                UserOrderVo vo = new UserOrderVo();
+                vo.setStudentId((Integer) student.get("studentid"));
+                vo.setStudentName((String) student.get("name"));
+                int number = 1 ;
+                try{
+                    number = cmdOrderMap.get(attendance) ;
+                }catch (Exception e){
+
+                }
+                vo.setNumber(number);
+                number++ ;
+                cmdOrderMap.put(attendance,number) ;
+                if(vo.getStudentId() != 0){
+                    order.add(vo.toString());
+                }
+            }
+            cmdMap.put(attendance,order);
+        }
+    }
+    /**
+     * 1,设备通完电以后第一个发送到后台的请求
+     * 格式为 /iclock/cdata?options=all&language=xxxx&pushver=xxxx
+     */
+    @RequestMapping(value="/cdata",params = {"options","language","pushver"},method = RequestMethod.GET)
+    public void init(String SN, String options, String language, String pushver, HttpServletRequest request ,
+                     @RequestParam(required = false) String PushOptionsFlag, HttpServletResponse response){
+        try {
+            if(cmdMap.get(SN) == null){
+                cmdMap.put(SN,new ArrayList<>());
+                cmdOrderMap.put(SN,1);
+            }
+            if(scFeign.selectAttendaceWithId(SN) == null){
+                SZ_AttendanceDto attendanceDto = new SZ_AttendanceDto();
+                attendanceDto.setClint_id(SN);
+                attendanceDto.setClint_type("24");
+                attendanceDto.setIp(request.getRemoteAddr());
+                attendanceDto.setPort(request.getRemotePort());
+                attendanceDto.setIntime(DateUtils.date2String(new Date(),DateUtils.format2));
+                attendanceDto.setSchool_id("-1");
+                attendanceDto.setState(1);
+                scFeign.insertAttendance(attendanceDto);
+            }else {
+                scFeign.updateAttendance(SN);
+            }
+            String initOptions = initOptions(SN,PushOptionsFlag);
+            response.getWriter().write(initOptions);//返回成功以后设备会发送心跳请求
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 2,心跳请求,会从服务器拿到命令返回   给设备
+     */
+    @RequestMapping("/getrequest")
+    public void heartBeat(String SN, HttpServletResponse response){
+        scFeign.updateAttendance(SN);
+        StringBuffer sb = new StringBuffer("OK");
+        List<String> cmds =  cmdMap.get(SN);
+        if(cmds==null){//等于空说明从来没加载过,如果初始化加载过了,此时应该不为Null 只是size为0
+            cmds = new ArrayList<>();
+            cmdMap.put(SN,cmds);
+            cmdOrderMap.put(SN,1);
+        }
+        if(cmds!=null&&cmds.size()>0){
+           sb.setLength(0);//如果有命令就不返回OK了
+          cmds.stream().forEach(cmd->sb.append(cmd).append("\r\n\r\n"));
+
+        }
+        try {
+            response.setCharacterEncoding("gbk");
+            response.getWriter().write(sb.toString());
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    /**
+     * 3,候补心跳请求,正常情况下设备不发此请求,有大量数据上传的时候,不发上面的心跳,发这个请求,
+     * 这个请求,服务器只能返回OK,不可以返回命令
+     */
+    @RequestMapping("/ping")
+    public void ping(HttpServletResponse response){
+        System.out.println("考勤机心跳请求大量进来了......ping"+new SimpleDateFormat("HH:mm:ss").format(new Date()));
+        try {
+            response.getWriter().write("OK");
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 4,设备端处理完命令以后会发送该请求,告诉服务器命令的处理结果
+     */
+    @RequestMapping("/devicecmd")
+    public void handleCmd(String SN, @RequestBody String data, HttpServletResponse response){
+        //判断data  清空map
+        List<String> cmdList = cmdMap.get(SN);
+        String[] returnList = data.split("\n");
+        if(returnList.length > 0 && cmdList.size() > 0){
+            for(String message : returnList){
+                String number = message.substring(message.indexOf("=")+1,message.indexOf("&"));
+                String result = message.substring(message.indexOf("=",message.indexOf("&"))+1,message.indexOf("&",message.indexOf("&")+1));
+                if(result.equals("0")){
+                    Iterator<String> it = cmdList.iterator();
+                    while (((Iterator) it).hasNext()) {
+                        String b = it.next();
+                        if (b.contains("C:"+number)) {
+                            Log_orderSuccess.info("指令成功=========="+b);
+                            it.remove();
+                        }
+                    }
+                }
+            }
+        }
+        try {
+            response.getWriter().write("OK");
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    /**
+     * 5 考勤数据上报
+     */
+    @RequestMapping(value = "/cdata")
+    public void handleRtData(HttpServletRequest request, HttpServletResponse response, String SN, String table) throws UnsupportedEncodingException {
+        request.setCharacterEncoding("gbk");
+        String data = "";
+        ByteArrayOutputStream bos = null;
+        byte[] b= new byte[1024];
+        try {
+            InputStream is = request.getInputStream();
+            bos = new ByteArrayOutputStream();
+            int len = 0;
+            while((len=is.read(b))!=-1){
+                bos.write(b,0,len);
+            }
+            data = new String(bos.toByteArray(),"gbk");
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        if("ATTLOG".equals(table)){
+            String[] list = data.split("\t");
+            String cardNo = scFeign.selectStudentNumByStudentId(Integer.valueOf(list[0]));
+            cardNo = new BigInteger(cardNo, 16).toString();
+            //考勤日志
+            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            String info = String.format("<AttendanceInfo submitTime=\"%s\"><Info device=\"%s\" card=\"%s\" operTime=\"%s\" direc=\"%s\"></Info></AttendanceInfo>",
+                    simpleDateFormat.format(new Date()), SN, cardNo, list[1], "-1");
+            AttendanceInfoBean attendanceInfoBean = new AttendanceInfoBean();
+            attendanceInfoBean.setInfo(info);
+            attendanceInfoBean.setIsControl(0);
+            attendanceInfoBean.setPwd(pwd);
+            attendanceInfoBean.setUsername(account);
+
+            String jsonResult = JSON.toJSONString(attendanceInfoBean);
+            String urlHXY = "http://campus.myjxt.com/api/XiaoAnCommon/SendHXY";
+            JSONObject jsonObject = HttpClientUtils.httpPostJson(urlHXY, jsonResult);
+            if ((int) jsonObject.get("status") == 1){
+                Log_kaoInfo.info("出入寝签到成功:" + SN + " 卡号:" + cardNo);
+            }else {
+                Log_orderFail.info("出入寝签到失败:" + SN + " 卡号:" + cardNo + " result1:" + jsonObject.toJSONString());
+            }
+        }
+        if("OPERLOG".equals(table)){
+            //操作日志
+            if(data.substring(0,3).contains("FP")){
+                //添加指纹
+                String studentId = data.substring(data.indexOf("=")+1,data.indexOf("\t",data.indexOf("=")));
+                String order = data.substring(3);
+                FingerDto fingerDto = new FingerDto();
+                fingerDto.setOrderMsg(order);
+                fingerDto.setStudentId(Integer.valueOf(studentId));
+                fingerDto.setCreateTime(new Date());
+                xaFeign.insertFinger(fingerDto);
+            }
+        }
+        try {
+            response.getWriter().write("OK");
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 设备通电以后连接到服务器,需要返回的初始化参数
+     * @param sn
+     * @param PushOptionsFlag
+     * @return
+     */
+    private String initOptions(String sn,String PushOptionsFlag) {
+        StringBuffer devOptions = new StringBuffer();
+        devOptions.append("GET OPTION FROM: "+sn);
+        // + "\nStamp=" + devInfo.devInfoJson.getString("Stamp")
+        devOptions.append("\nATTLOGStamp=0");
+        devOptions.append("\nOPERLOGStamp=0");
+        devOptions.append("\nBIODATAStamp=0");
+        devOptions.append("\nATTPHOTOStamp=0");
+        devOptions.append("\nErrorDelay=10");//断网重连
+        devOptions.append("\nDelay=5");//心跳间隔
+        devOptions.append("\nTimeZone=8");//时区
+        devOptions.append("\nRealtime=1");//实时上传
+        devOptions.append("\nServerVer=3.0.1");//这个必须填写
+//        1 考勤记录
+//        2 操作日志
+//        3 考勤照片
+//        4 登记新指纹
+//        5 登记新用户
+//        6 指纹图片
+//        7 修改用户信息
+//        8 修改指纹
+//        9 新登记人脸
+//        10 用户照片
+//        11 工作号码
+//        12 比对照片
+        devOptions.append("\nTransFlag=111111111111");//  1-12二进制位 分别代表以上含义
+        System.out.println("PushOptionsFlag============="+PushOptionsFlag);
+        if (PushOptionsFlag!=null&&PushOptionsFlag.equals("1"))
+        {
+            // 支持参数单独获取的才要把需要获取的参数回传给设备 modifeid by max 20170926
+            devOptions.append("\nPushOptions=RegDeviceType,FingerFunOn,FaceFunOn,FPVersion,FaceVersion,NetworkType,HardwareId3,HardwareId5,HardwareId56,LicenseStatus3,LicenseStatus5,LicenseStatus56");
+        }
+        devOptions.append("\n");
+        return devOptions.toString();
+    }
+}
diff --git a/cloud/zkAttendance/src/main/java/com/sincere/att/feign/ScFeign.java b/cloud/zkAttendance/src/main/java/com/sincere/att/feign/ScFeign.java
new file mode 100644
index 0000000..179342e
--- /dev/null
+++ b/cloud/zkAttendance/src/main/java/com/sincere/att/feign/ScFeign.java
@@ -0,0 +1,36 @@
+package com.sincere.att.feign;
+
+import com.sincere.common.dto.smartCampus.SZ_AttendanceDto;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/12/31 0031 11:08
+ */
+@FeignClient("smartCampusSearch")
+public interface ScFeign {
+
+    @RequestMapping(value = "attendance/insertAttendance", method = RequestMethod.POST)
+    void insertAttendance(@RequestBody SZ_AttendanceDto attendanceDto);
+
+    @RequestMapping(value = "attendance/updateAttendance", method = RequestMethod.GET)
+    void updateAttendance(@RequestParam("clientId") String clientId);
+
+    @RequestMapping(value = "attendance/selectAttendaceWithId" , method = RequestMethod.GET)
+    SZ_AttendanceDto selectAttendaceWithId(@RequestParam("clint_id") String clint_id);
+
+    @RequestMapping(value = "attendance/selectRoomAttendance", method = RequestMethod.GET)
+    List<String> selectRoomAttendance(@RequestParam("placeId") int placeId);
+
+    @RequestMapping(value = "/sm/user/selectStudentNumByStudentId",method = RequestMethod.GET)
+    String selectStudentNumByStudentId(@RequestParam("studentId") int studentId);
+
+
+}
diff --git a/cloud/zkAttendance/src/main/java/com/sincere/att/feign/XaFeign.java b/cloud/zkAttendance/src/main/java/com/sincere/att/feign/XaFeign.java
new file mode 100644
index 0000000..a8279e3
--- /dev/null
+++ b/cloud/zkAttendance/src/main/java/com/sincere/att/feign/XaFeign.java
@@ -0,0 +1,19 @@
+package com.sincere.att.feign;
+
+import com.sincere.common.dto.xiaoan.FingerDto;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/12/31 0031 13:42
+ */
+@FeignClient("xiaoanSearch")
+public interface XaFeign {
+
+    @RequestMapping(value = "/xa/zk/insertFinger",method = RequestMethod.POST)
+    int insertFinger(@RequestBody FingerDto fingerDto);
+}
diff --git a/cloud/zkAttendance/src/main/java/com/sincere/att/logs/LogName.java b/cloud/zkAttendance/src/main/java/com/sincere/att/logs/LogName.java
new file mode 100644
index 0000000..d2a1122
--- /dev/null
+++ b/cloud/zkAttendance/src/main/java/com/sincere/att/logs/LogName.java
@@ -0,0 +1,39 @@
+package com.sincere.att.logs;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/10/12 0012 16:18
+ */
+public enum LogName {
+    orderSuccess("orderSuccess"),
+    orderFail("orderFail"),
+    kaoInfo("kaoInfo"),
+    heartBeat("heartBeat"),
+    error("error");
+
+    private String logFileName;
+
+    LogName(String fileName) {
+        this.logFileName = fileName;
+    }
+
+    public String getLogFileName() {
+        return logFileName;
+    }
+
+    public void setLogFileName(String logFileName) {
+        this.logFileName = logFileName;
+    }
+
+    public static LogName getAwardTypeEnum(String value) {
+        LogName[] arr = values();
+        for (LogName item : arr) {
+            if (null != item && !item.logFileName.equals("")) {
+                return item;
+            }
+        }
+        return null;
+    }
+}
+
diff --git a/cloud/zkAttendance/src/main/java/com/sincere/att/logs/LoggerUtils.java b/cloud/zkAttendance/src/main/java/com/sincere/att/logs/LoggerUtils.java
new file mode 100644
index 0000000..f81fcc3
--- /dev/null
+++ b/cloud/zkAttendance/src/main/java/com/sincere/att/logs/LoggerUtils.java
@@ -0,0 +1,27 @@
+package com.sincere.att.logs;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/10/12 0012 16:19
+ */
+public class LoggerUtils {
+
+    public static <T> Logger Logger(Class<T> clazz) {
+        return LoggerFactory.getLogger(clazz);
+    }
+
+    /**
+     * 打印到指定的文件下
+     *
+     * @param desc 日志文件名称
+     * @return
+     */
+    public static Logger Logger(LogName desc) {
+        return LoggerFactory.getLogger(desc.getLogFileName());
+    }
+
+}
diff --git a/cloud/zkAttendance/src/main/java/com/sincere/att/logs/MyTimeBasedFileNamingAndTriggeringPolicy.java b/cloud/zkAttendance/src/main/java/com/sincere/att/logs/MyTimeBasedFileNamingAndTriggeringPolicy.java
new file mode 100644
index 0000000..d490a28
--- /dev/null
+++ b/cloud/zkAttendance/src/main/java/com/sincere/att/logs/MyTimeBasedFileNamingAndTriggeringPolicy.java
@@ -0,0 +1,32 @@
+package com.sincere.att.logs;
+
+import ch.qos.logback.core.joran.spi.NoAutoStart;
+import ch.qos.logback.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/10/31 0031 13:42
+ */
+@NoAutoStart
+public class MyTimeBasedFileNamingAndTriggeringPolicy<E> extends DefaultTimeBasedFileNamingAndTriggeringPolicy<E> {
+
+    //这个用来指定时间间隔
+    private Integer multiple = 1;
+
+    @Override
+    protected void computeNextCheck() {
+        nextCheck = rc.getEndOfNextNthPeriod(dateInCurrentPeriod, multiple).getTime();
+    }
+
+    public Integer getMultiple() {
+        return multiple;
+    }
+
+    public void setMultiple(Integer multiple) {
+        if (multiple > 1) {
+            this.multiple = multiple;
+        }
+    }
+
+}
diff --git a/cloud/zkAttendance/src/main/java/com/sincere/att/vo/AttendanceInfoBean.java b/cloud/zkAttendance/src/main/java/com/sincere/att/vo/AttendanceInfoBean.java
new file mode 100644
index 0000000..422489c
--- /dev/null
+++ b/cloud/zkAttendance/src/main/java/com/sincere/att/vo/AttendanceInfoBean.java
@@ -0,0 +1,61 @@
+package com.sincere.att.vo;
+
+/**
+ * 考勤账号表
+ */
+public class AttendanceInfoBean {
+
+    /**
+     * 控制器类型,0是其他控制器,1是微耕控制器
+     */
+    private Integer isControl;
+
+    public Integer getIsControl() {
+        return isControl;
+    }
+
+    public void setIsControl(Integer isControl) {
+        this.isControl = isControl;
+    }
+
+    public String getInfo() {
+        return info;
+    }
+
+    public void setInfo(String info) {
+        this.info = info;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getPwd() {
+        return pwd;
+    }
+
+    public void setPwd(String pwd) {
+        this.pwd = pwd;
+    }
+
+    /**
+     * 刷卡信息,XML格式字符串:<AttendanceInfo submitTime="2017-08-01T16:30:30">
+     * <Info device="FD98DC58C467DB43" card="223456789" operTime="2017-08-01T11:20:30" direc="0"></Info>
+     * </AttendanceInfo>
+     */
+    private String info;
+
+    /**
+     * 账号
+     */
+    private String username;
+
+    /**
+     * 密码
+     */
+    private String pwd;
+}
diff --git a/cloud/zkAttendance/src/main/java/com/sincere/att/vo/OrderVo.java b/cloud/zkAttendance/src/main/java/com/sincere/att/vo/OrderVo.java
new file mode 100644
index 0000000..814dc79
--- /dev/null
+++ b/cloud/zkAttendance/src/main/java/com/sincere/att/vo/OrderVo.java
@@ -0,0 +1,28 @@
+package com.sincere.att.vo;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/12/31 0031 9:50
+ */
+public class OrderVo {
+
+    private int number ;
+    private int studentId ;
+
+    public int getNumber() {
+        return number;
+    }
+
+    public void setNumber(int number) {
+        this.number = number;
+    }
+
+    public int getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(int studentId) {
+        this.studentId = studentId;
+    }
+}
diff --git a/cloud/zkAttendance/src/main/java/com/sincere/att/vo/UserOrderVo.java b/cloud/zkAttendance/src/main/java/com/sincere/att/vo/UserOrderVo.java
new file mode 100644
index 0000000..a470918
--- /dev/null
+++ b/cloud/zkAttendance/src/main/java/com/sincere/att/vo/UserOrderVo.java
@@ -0,0 +1,25 @@
+package com.sincere.att.vo;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/12/31 0031 9:08
+ */
+public class UserOrderVo extends OrderVo {
+
+    private String studentName ;
+
+
+    public String getStudentName() {
+        return studentName;
+    }
+
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
+    }
+
+    @Override
+    public String toString() {
+        return "C:"+this.getNumber()+":DATA UPDATE USERINFO PIN="+this.getStudentId()+"\tName="+this.getStudentName()+"\tPasswd=\tCard=\tPri=0\r\n\r\n";
+    }
+}
diff --git a/cloud/zkAttendance/src/main/resources/application.yaml b/cloud/zkAttendance/src/main/resources/application.yaml
new file mode 100644
index 0000000..72638f5
--- /dev/null
+++ b/cloud/zkAttendance/src/main/resources/application.yaml
@@ -0,0 +1,16 @@
+server:
+  port: 8081
+
+spring:
+  application:
+    name: zkAtt-server
+
+eureka:
+  instance:
+    hostname: localhost
+    lease-expiration-duration-in-seconds: 60
+    lease-renewal-interval-in-seconds: 10
+  client:
+    service-url:
+      defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/
+
diff --git a/cloud/zkAttendance/src/main/resources/cmd.txt b/cloud/zkAttendance/src/main/resources/cmd.txt
new file mode 100644
index 0000000..1eee52f
--- /dev/null
+++ b/cloud/zkAttendance/src/main/resources/cmd.txt
@@ -0,0 +1,3 @@
+C:2:DATA UPDATE USERINFO PIN=133\tName=jwz\tPasswd=\tCard=\tPri=0   下发用户
+C:3:DATA QUERY FINGERTMP PIN=133\tFID=6
+C:4:DATA UPDATE FINGERTMP PIN=133\tFID=7\tSize=1636\tValid=1\tTMP=TYlTUzIxAAAEyskECAUHCc7QAAAcy2kBAAAAhHcop8oiAAQP8QDjAInFcgAwAPAPogBAymEP3wBIAE4PjcpOAGAPrACUAGrFAAFrACcPCwB3yoAPrQB3AJkPBcuDAKQPnABAAEjFtACfADoOKwC0yqwPogC0AIQPB8vAALQPwgAMADTFCQHOAKkObwDVyjgPcADUAIYPAsvWAJwOZQA3AELF0gD3ACEPwgH+yvUO4gAMAWAOZMoPAUgP4ADfAQ/FYgAgASsOMwAiy48PVgAtATEOasoyAaoOmgD2AajFCgE0AfsOHwA8y5gPvAA8AVsPkMpCAaIPfwCJAZPF7wBUAYIPsgBTy4wPvQBcAcEPs1LyFdOlSgbua3NB6JK6koftPHIqyw5fygJHDNJkIj+vAcpylhGXFsummIb7nNepuyTXMqIUiRIi3CPymbQu+WslGfKTFXfGpPvq8QLiNPv+zP4QHQt2CJ8S+cYIGmkLxfov8gIxIQ6J9H7++Ar6MhIBjvw/D+IHqDyg6iapgQPPBHvWhH+SGRPwi1n+mE9PIZyBh8cYddcAB4ZUPWhMfrq+EOW1OYGCTIYJXJvobcmZTp+shUhguv4UJQwnETLfHG7mewNkp/y2WtMM3gQinKv1qTJMDkYVRQwc9pYmp+nei8f0CPjaJ6vlPmhbbNJkJIIxNXsgPwHHxyPtAgBuAXDCwAB4y2zCOgYAssQJUgoFANYBCcAFBwRSBXqMPgkAaAsE9MH+RAYAfNZrxApuBACnJAOPEQQnJZB3dMLAAUp6zQHPKQlBRssAcuTs//7B/UY6wS/aAck0icJpBsDHrn/ABwDLNcwvM94AFTqgwsE6icW7dMH/wXwHxWVCqG5sFADcR0lvxQjAiXBcUwbF1khGwMKGBwDYiAb4/fwPAIVOYrFvXIDBFACpUXRXacUKZcBU/koQxYdXlMD/wXjB/wT/UTUXARRVnsG9wvsIaIvBhcJozAChkvb+//3//vYTBGlYa8J8wsAFwcSZwDHAGQEQop7EC3nCwcHBjELBxa7C/MISAMO1g8YPwsCZwMHABGd80gGYh1B+arRxiwtnwcHCDwBYiVQJU3J0wZMNxb2QjMLCwMJfwgGSDsrClCT+ZcIEuQrKgZhMam3COsKMxgHBnDrCwATAjAzFwx4BFJx1a5ZJwMHDxMBwB8BgkcE7CgC1o/jCxKzAjgoAx6P1wG4IxcbDCwDtaa2AD8XGxYsMAFq3R77Bw26QDABhtzkK/sHCcMPABhUFyL+3wYTCwATEmwnAw1xzGQHMy8dbcMGCw5uEvVgOysPMMMCQxAeUJssEz6s9w8FLxa0JWoRxdcPBBsFr6AAK1NbElkbBxAiToMHBwcEFcEA1wP79/w0Ab9U+soLCw8SDGcQC0Wg2Z8TIxcUEwsULwcDBwMPAB8LAwAFw20ZvwAHAlN8ABNuM+ysHwcYAyMLDwHbBBJAKynvoOmLCwgZ6es0BYvVMPCrJAGM/QsL/ooJVwREQxnAqBREWFrLA+TUFEFowEzDBEQP/dTUGED4+P/8mzRGYRhfD/wZZAdo+R/3+OgXVg0vQfgUQP1ADhwYVzVd0Pf4GEPxYAp/DAxB7WBoBAxQPZwDAUkIAzkMFygELRVI=
\ No newline at end of file
diff --git a/cloud/zkAttendance/src/main/resources/logback.xml b/cloud/zkAttendance/src/main/resources/logback.xml
new file mode 100644
index 0000000..02e9fb0
--- /dev/null
+++ b/cloud/zkAttendance/src/main/resources/logback.xml
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration scan="true" scanPeriod="60 seconds" debug="false">
+    <!-- 定义日志文件 输入位置 -->
+    <property name="logPath" value="d:/zk_log" />
+    <!-- 日志最大的历史 30天 -->
+    <property name="maxHistory" value="600"/>
+
+    <!-- 配置项, 通过此节点配置日志输出位置(控制台、文件、数据库)、输出格式等-->
+    <!-- ConsoleAppender代表输出到控制台 -->
+    <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
+        <!-- layout代表输出格式 -->
+        <layout class="ch.qos.logback.classic.PatternLayout">
+            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger -%msg%n</pattern>
+        </layout>
+    </appender>
+    <!-- 日志输出文件 -->
+    <appender name="orderSuccessInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss} -%msg%n</pattern>
+        </encoder>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <timeBasedFileNamingAndTriggeringPolicy class="com.sincere.att.logs.MyTimeBasedFileNamingAndTriggeringPolicy">
+                <multiple>1</multiple>
+            </timeBasedFileNamingAndTriggeringPolicy>
+            <!-- 输出路径 -->
+            <fileNamePattern>${logPath}/info/orderSuccess/%d{yyyy-MM-dd}.log</fileNamePattern>
+            <maxHistory>${maxHistory}</maxHistory>
+        </rollingPolicy>
+    </appender>
+    <appender name="orderFailInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss} -%msg%n</pattern>
+        </encoder>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <timeBasedFileNamingAndTriggeringPolicy class="com.sincere.att.logs.MyTimeBasedFileNamingAndTriggeringPolicy">
+                <multiple>1</multiple>
+            </timeBasedFileNamingAndTriggeringPolicy>
+            <!-- 输出路径 -->
+            <fileNamePattern>${logPath}/info/orderFail/%d{yyyy-MM-dd}.log</fileNamePattern>
+            <maxHistory>${maxHistory}</maxHistory>
+        </rollingPolicy>
+    </appender>
+    <appender name="heartBeatLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss} -%msg%n</pattern>
+        </encoder>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <timeBasedFileNamingAndTriggeringPolicy class="com.sincere.att.logs.MyTimeBasedFileNamingAndTriggeringPolicy">
+                <multiple>1</multiple>
+            </timeBasedFileNamingAndTriggeringPolicy>
+            <!-- 输出路径 -->
+            <fileNamePattern>${logPath}/info/heartBeat/%d{yyyy-MM-dd}.log</fileNamePattern>
+            <maxHistory>${maxHistory}</maxHistory>
+        </rollingPolicy>
+    </appender>
+    <appender name="kaoInfoInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss} -%msg%n</pattern>
+        </encoder>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <timeBasedFileNamingAndTriggeringPolicy class="com.sincere.att.logs.MyTimeBasedFileNamingAndTriggeringPolicy">
+                <multiple>1</multiple>
+            </timeBasedFileNamingAndTriggeringPolicy>
+            <!-- 输出路径 -->
+            <fileNamePattern>${logPath}/info/kaoInfo/%d{yyyy-MM-dd}.log</fileNamePattern>
+            <maxHistory>${maxHistory}</maxHistory>
+        </rollingPolicy>
+    </appender>
+
+
+    <!-- 特殊记录Error日志 -->
+    <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 只记录ERROR级别日志,添加范围过滤,可以将该类型的日志特殊记录到某个位置 -->
+        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+            <level>ERROR</level>
+        </filter>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger -%msg%n</pattern>
+        </encoder>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <timeBasedFileNamingAndTriggeringPolicy class="com.sincere.att.logs.MyTimeBasedFileNamingAndTriggeringPolicy">
+                <multiple>1</multiple>
+            </timeBasedFileNamingAndTriggeringPolicy>
+            <fileNamePattern>${logPath}/infoError/${PROJECT_NAME}.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>${maxHistory}</maxHistory>
+        </rollingPolicy>
+    </appender>
+
+    <!-- 不同的业务逻辑日志打印到指定文件夹-->
+    <logger name="orderSuccess" additivity="false" level="INFO">
+        <appender-ref ref="orderSuccessInfoLog"/>
+    </logger>
+    <logger name="orderFail" additivity="false" level="INFO">
+        <appender-ref ref="orderFailInfoLog"/>
+    </logger>
+    <logger name="kaoInfo" additivity="false" level="INFO">
+        <appender-ref ref="kaoInfoInfoLog"/>
+    </logger>
+    <logger name="heartBeat" additivity="false" level="INFO">
+        <appender-ref ref="heartBeatLog"/>
+    </logger>
+    <logger name="error" additivity="false" level="ERROR">
+        <appender-ref ref="fileErrorLog"/>
+    </logger>
+
+    <root level="info">
+        <appender-ref ref="consoleLog" />
+        <appender-ref ref="orderSuccessInfoLog" />
+        <appender-ref ref="orderFailInfoLog" />
+        <appender-ref ref="kaoInfoInfoLog" />
+        <appender-ref ref="heartBeatLog" />
+    </root>
+
+    <root level="error">
+        <appender-ref ref="fileErrorLog" />
+    </root>
+</configuration>
\ No newline at end of file
--
libgit2 0.21.0