diff --git a/cloud/dahua/src/main/java/com/example/dahua/bean/WeekTime.java b/cloud/dahua/src/main/java/com/example/dahua/bean/WeekTime.java
index a7a012c..fd1775a 100644
--- a/cloud/dahua/src/main/java/com/example/dahua/bean/WeekTime.java
+++ b/cloud/dahua/src/main/java/com/example/dahua/bean/WeekTime.java
@@ -28,3 +28,4 @@ public class WeekTime implements Serializable {
         this.endTime = endTime;
     }
 }
+
diff --git a/cloud/dahua/src/main/java/com/example/dahua/control/FileControl.java b/cloud/dahua/src/main/java/com/example/dahua/control/FileControl.java
index 2f04592..6dee7ef 100644
--- a/cloud/dahua/src/main/java/com/example/dahua/control/FileControl.java
+++ b/cloud/dahua/src/main/java/com/example/dahua/control/FileControl.java
@@ -191,6 +191,12 @@ public class FileControl {
         return clearCard;
     }
 
+    @RequestMapping(value = "getUserCard", method = RequestMethod.GET)
+    @ApiOperation(value = "获取卡信息")
+    public void clearFaceInfo(@RequestParam("userId") String userId,@RequestParam("deviceId") String deviceId) {
+        GateModule.getCard(userId, MyTask.lLongSendMap.get(deviceId));
+    }
+
 
     public String cardNo(String cardDex) {
 
@@ -209,7 +215,6 @@ public class FileControl {
 
     }
 
-
     @Autowired
     private DeleteBatchTest deleteBatchTest;
 
diff --git a/cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java b/cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java
index 4f7f1cf..97e0bc5 100644
--- a/cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java
+++ b/cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java
@@ -139,7 +139,7 @@ public interface UserDao {
     @Select("select Top(1) PlaceId from XA_PlaceAttendance where KanBanAttendance = #{kanBanDevId}")
     String getPlaceIdWithKanBanDevid(@Param("kanBanDevId") String kanBanDevId);
 
-    @Select("select KanBanAttendance from XA_PlaceAttendance where PlaceId = #{PlaceId} and (len(KanBanAttendance)>0 and KanBanAttendance is not null )")
+    @Select("select KanBanAttendance from XA_PlaceAttendance where PlaceId = #{PlaceId} and (len(KanBanAttendance)>0 and KanBanAttendance is not null)")
     List<String> getKanBanIdWithPlaceId(@Param("PlaceId") String placeId);
 
     @Select("select user_id,studentcode from SZ_V_School_Student where school_id = 27")
@@ -269,6 +269,4 @@ public interface UserDao {
     List<AttendanceBean> queryClintList(@Param("schoolId") Integer schoolId,@Param("deviceId")String deviceId);
 
     List<String> queryStudentIdList(@Param("schoolId") Integer schoolId,@Param("roomId")Integer roomId);
-
-
 }
diff --git a/cloud/dahua/src/main/java/com/example/dahua/module/GateModule.java b/cloud/dahua/src/main/java/com/example/dahua/module/GateModule.java
index 606fe6b..6fa9e37 100644
--- a/cloud/dahua/src/main/java/com/example/dahua/module/GateModule.java
+++ b/cloud/dahua/src/main/java/com/example/dahua/module/GateModule.java
@@ -988,8 +988,7 @@ public class GateModule {
                 System.out.println("[" + i + "]卡号 : "
                         + new String(cards[i].szCardNo).trim());
                 System.out.println("[" + i + "]卡类型 : " + cards[i].emType);
-                System.out.println("[" + i + "]查询卡结果 : "
-                        + failCodes[i].nFailCode + "\n");
+                System.out.println("[" + i + "]查询卡结果 : " + failCodes[i].nFailCode + "\n");
             }
         } else {
             System.err.println("查询卡失败, " + ToolKits.getErrorCodePrint());
diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/CMSServer.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/CMSServer.java
index 8ba82b8..0e2e44f 100644
--- a/cloud/haikangface/src/main/java/com/sincere/haikangface/CMSServer.java
+++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/CMSServer.java
@@ -7,6 +7,7 @@ import com.sincere.haikangface.bean.AttendanceBean;
 import com.sincere.haikangface.bean.BaiduFaceRecorder;
 import com.sincere.haikangface.bean.StudentBean;
 import com.sincere.haikangface.bean.TeacherBean;
+import com.sincere.haikangface.bean.xiaoan.CheckIn;
 import com.sincere.haikangface.bean.xiaoan.Face_Recoder;
 import com.sincere.haikangface.dao.DeviceDao;
 import com.sincere.haikangface.dao.UserDao;
@@ -17,6 +18,7 @@ import com.sincere.haikangface.mqtt.MqtUtils;
 import com.sincere.haikangface.service.impl.BaseService;
 import com.sincere.haikangface.utils.AlarmUtils;
 import com.sincere.haikangface.utils.HttpUtil;
+import com.sincere.haikangface.utils.JsonUtils;
 import com.sincere.haikangface.utils.SpringContextHolder;
 import com.sincere.haikangface.xiananDao.SendRecordDao;
 import com.sun.jna.NativeLong;
@@ -65,7 +67,7 @@ public class CMSServer implements ApplicationRunner {
     //114.55.30.100
     //120.26.116.253
 //    private String ip_cloud = "114.55.30.100";
-    private String ip_cloud = "114.55.30.100";
+    private String ip_cloud = "120.26.116.253";
 
     private String ip;
     {
@@ -366,6 +368,7 @@ public class CMSServer implements ApplicationRunner {
                 pPlateInfo.write(0, pAlarmMsg.pXmlBuf.getByteArray(0, strXMLData.size()), 0, strXMLData.size());
                 strXMLData.read();
                 String strXML = new String(strXMLData.byValue);
+//                log.info("strXML: "+strXML);
                 if (null == alarmUtils) {
                     log.info("初始化报警工具类");
                     alarmUtils = new AlarmUtils(deviceDao, userDao);
@@ -373,10 +376,18 @@ public class CMSServer implements ApplicationRunner {
                         @Override
                         public void callBack(String minorType, String deviceID, String cardNo, String time, String picDataUrlId, String currTemperature) {
                             saveAttendance(deviceID);
+                            AttendanceBean attendanceBean = deviceDao.selectDevice(deviceID);
+                            int outOrIn = attendanceBean.getOutOrIn();
+                            String schoolId = attendanceBean.getSchool_id();
                             switch (minorType) {
                                 case "0x4b"://人脸认证通过
                                     log.info("人脸验证通过,事件次类型:"+minorType);
-                                    saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature);
+                                    //人脸记录
+                                    saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature,outOrIn);
+                                    //944柯桥实验幼儿园,海康一体机考勤签到
+                                    if(Integer.parseInt(schoolId)== 944 && !StringUtils.isEmpty(cardNo) && isNumeric(cardNo)){
+                                        kaoQinRecord(outOrIn,cardNo,deviceID,time);
+                                    }
                                     break;
                                 case "0x426"://人证设备在线
                                     break;
@@ -387,11 +398,19 @@ public class CMSServer implements ApplicationRunner {
                                     break;
                                 case "0x69"://人证比对通过
                                     log.info("人证比对通过,事件次类型:"+minorType);
-                                    saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature);
+                                    saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature,outOrIn);
+                                    //944柯桥实验幼儿园,海康一体机考勤签到
+                                    if(Integer.parseInt(schoolId)== 944 && !StringUtils.isEmpty(cardNo)&& isNumeric(cardNo)){
+                                        kaoQinRecord(outOrIn,cardNo,deviceID,time);
+                                    }
                                     break;
                                 case "0x6":
                                     log.info("通过,事件次类型:"+minorType);
-                                    saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature);
+                                    saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature,outOrIn);
+                                    //944柯桥实验幼儿园,海康一体机考勤签到
+                                    if(Integer.parseInt(schoolId)== 944 && !StringUtils.isEmpty(cardNo) && isNumeric(cardNo)){
+                                        kaoQinRecord(outOrIn,cardNo,deviceID,time);
+                                    }
                                     break;
                             }
                         }
@@ -406,6 +425,27 @@ public class CMSServer implements ApplicationRunner {
         }
     }
 
+    public void kaoQinRecord(int outOrIn,String cardNo,String deviceId,String eventTime) {
+        BaseService baseService = SpringContextHolder.getBaseService();
+        //十进制卡转十六进制卡
+        String card = splicingZero(Long.toHexString(Long.parseLong(cardNo)), 8).toUpperCase();
+        //卡号逆转
+        cardNo = baseService.getCard(card);
+        //有效刷卡调考勤存储过程
+        CheckIn checkIn = new CheckIn();
+        checkIn.setDeviceId(deviceId);
+        checkIn.setCardNo(cardNo);
+        checkIn.setFunNo(8);
+        checkIn.setFlag(outOrIn == 1 ? 1:0);
+        checkIn.setCheckTime(eventTime);
+        sendRecordDao.checkIn(checkIn);
+        if (checkIn.getIsSuccess() == 1) {
+            log.info("考勤成功:  checkIn: {}, 方向:{}", JsonUtils.nonDefaultMapper().toJson(checkIn),outOrIn == 1 ? "门" : "出门");
+        } else {
+            log.info("考勤失败: checkIn: {}, 方向:{}",JsonUtils.nonDefaultMapper().toJson(checkIn),outOrIn == 1 ? "进门" : "出门");
+        }
+    }
+
     /**
      * 判断设备是否在线
      * @param deviceId
@@ -420,7 +460,7 @@ public class CMSServer implements ApplicationRunner {
      * @param time
      * @param picDataUrlId
      */
-    private void saveFaceRecoder(String deviceID, String cardNo, String time, String picDataUrlId, String currTemperature) {
+    private void saveFaceRecoder(String deviceID, String cardNo, String time, String picDataUrlId, String currTemperature,int OutOrIn) {
         BaseService baseService = SpringContextHolder.getBaseService();
         try {
             if (!StringUtils.isEmpty(cardNo) && isNumeric(cardNo)) {
@@ -430,7 +470,6 @@ public class CMSServer implements ApplicationRunner {
                 //卡号逆转
                 cardNo = baseService.getCard(card);
                 StudentBean studentBean = userDao.getStudentWithCard(cardNo,null);
-                AttendanceBean attendanceBean = deviceDao.selectDevice(deviceID);
                 if (null != studentBean) {
                     String name = studentBean.getName();
                     int schoolId = studentBean.getSchool_id();
@@ -441,7 +480,7 @@ public class CMSServer implements ApplicationRunner {
                     face_recoder.setTime(time);
                     face_recoder.setName(name);
                     face_recoder.setUser_id(studentBean.getUser_id());
-                    face_recoder.setInOrOut(attendanceBean.getOutOrIn());
+                    face_recoder.setInOrOut(OutOrIn);
                     String imgUrl = "http://" + ip_cloud + ":8081/kms/services/rest/dataInfoService/downloadFile?id=" + picDataUrlId;
                     face_recoder.setImgurl(imgUrl);
                     log.info("设备: {},人脸抓怕:学校id: {} ,班级:{} ,用户名:{} ,卡号:{} ,",deviceID,schoolId,className,name,cardNo);
diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/xiaoan/CheckIn.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/xiaoan/CheckIn.java
new file mode 100644
index 0000000..5fe1c9f
--- /dev/null
+++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/xiaoan/CheckIn.java
@@ -0,0 +1,74 @@
+package com.sincere.haikangface.bean.xiaoan;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/10/30 0030 10:26
+ */
+public class CheckIn {
+
+    private String deviceId ;
+    private String cardNo ;
+    private int funNo ;
+    private int flag ;
+    private String checkTime ;
+
+    private String out;
+    private int isSuccess ;
+
+    public String getDeviceId() {
+        return deviceId;
+    }
+
+    public void setDeviceId(String deviceId) {
+        this.deviceId = deviceId;
+    }
+
+    public String getCardNo() {
+        return cardNo;
+    }
+
+    public void setCardNo(String cardNo) {
+        this.cardNo = cardNo;
+    }
+
+    public int getFlag() {
+        return flag;
+    }
+
+    public void setFlag(int flag) {
+        this.flag = flag;
+    }
+
+    public String getCheckTime() {
+        return checkTime;
+    }
+
+    public void setCheckTime(String checkTime) {
+        this.checkTime = checkTime;
+    }
+
+    public String getOut() {
+        return out;
+    }
+
+    public void setOut(String out) {
+        this.out = out;
+    }
+
+    public int getIsSuccess() {
+        return isSuccess;
+    }
+
+    public void setIsSuccess(int isSuccess) {
+        this.isSuccess = isSuccess;
+    }
+
+    public int getFunNo() {
+        return funNo;
+    }
+
+    public void setFunNo(int funNo) {
+        this.funNo = funNo;
+    }
+}
diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/DeviceDao.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/DeviceDao.java
index 95b7cd1..4b77d76 100644
--- a/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/DeviceDao.java
+++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/DeviceDao.java
@@ -6,6 +6,7 @@ import com.sincere.haikangface.bean.AttendanceBean;
 import com.sincere.haikangface.bean.FaceWaterRecoder;
 import com.sincere.haikangface.bean.PlaceAttendance;
 import com.sincere.haikangface.bean.QianDaoManager;
+import com.sincere.haikangface.bean.xiaoan.CheckIn;
 import org.apache.ibatis.annotations.*;
 import org.springframework.stereotype.Repository;
 
@@ -57,5 +58,4 @@ public interface DeviceDao {
     @Select("select * from SZ_Attendance where clint_type = #{clint_type} and school_id = #{school_id}")
     List<AttendanceBean> selectDeviceWithschool_id(@Param("clint_type") String clint_type, @Param("school_id") String school_id);
 
-
 }
diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/xiananDao/SendRecordDao.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/xiananDao/SendRecordDao.java
index d1444ed..f2d76ac 100644
--- a/cloud/haikangface/src/main/java/com/sincere/haikangface/xiananDao/SendRecordDao.java
+++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/xiananDao/SendRecordDao.java
@@ -3,6 +3,7 @@ package com.sincere.haikangface.xiananDao;
 import com.sincere.haikangface.bean.AttendanceRecords;
 import com.sincere.haikangface.bean.SendRecordBean;
 import com.sincere.haikangface.bean.xiaoan.AttendanceRecordsSS;
+import com.sincere.haikangface.bean.xiaoan.CheckIn;
 import com.sincere.haikangface.bean.xiaoan.CreditCardRecordsSS;
 import org.apache.ibatis.annotations.*;
 import org.springframework.stereotype.Repository;
@@ -162,4 +163,11 @@ public interface SendRecordDao {
 
     @Select("select top 1000 * from Face_SendFail where schoolId = 865 ")
     List<SendRecordBean> getFaceFailList();
+
+    /**
+     * 考勤推送存储过程
+     * @param checkIn
+     * @return
+     */
+    void checkIn(CheckIn checkIn);
 }
diff --git a/cloud/haikangface/src/main/resources/application.yaml b/cloud/haikangface/src/main/resources/application.yaml
index c8760de..6a95634 100644
--- a/cloud/haikangface/src/main/resources/application.yaml
+++ b/cloud/haikangface/src/main/resources/application.yaml
@@ -3,7 +3,7 @@ server:
 
 spring:
   profiles:
-    active: prod
+    active: dev
   application:
     name: haikangserver
   servlet:
diff --git a/cloud/haikangface/src/main/resources/xiaoanmapper/usermapper.xml b/cloud/haikangface/src/main/resources/xiaoanmapper/usermapper.xml
index b93634e..57bf9a4 100644
--- a/cloud/haikangface/src/main/resources/xiaoanmapper/usermapper.xml
+++ b/cloud/haikangface/src/main/resources/xiaoanmapper/usermapper.xml
@@ -1,12 +1,16 @@
 <?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.haikangface.xiananDao">
+<mapper namespace="com.sincere.haikangface.xiananDao.SendRecordDao">
 
-    <!--<select id="getStudentNum" resultType="String" parameterType="String">-->
-    <!--select student_num-->
-    <!--from SZ_V_School_Student-->
-    <!--where school_id = #{school_id}-->
-    <!--and studentcode = #{studentcode}-->
-    <!--</select>-->
+    <resultMap id="resultMap" type="com.sincere.haikangface.bean.xiaoan.CheckIn">
+        <result column="arr" property="out" jdbcType="VARCHAR" />
+        <result column="iscuccess" property="isSuccess" jdbcType="INTEGER" />
+    </resultMap>
 
+    <insert id="checkIn" parameterType="com.sincere.haikangface.bean.xiaoan.CheckIn" statementType="CALLABLE">
+        {call AttendanceService(
+           #{deviceId,mode=IN},#{cardNo,mode=IN},#{funNo,mode=IN},#{flag,mode=IN},#{checkTime,mode=IN},
+           #{out,mode=OUT,jdbcType=VARCHAR,resultMap=resultMap},#{isSuccess,mode=OUT,jdbcType=INTEGER,resultMap=resultMap}
+        )}
+    </insert>
 </mapper>
diff --git a/cloud/pom.xml b/cloud/pom.xml
index d20b2ee..60339c1 100644
--- a/cloud/pom.xml
+++ b/cloud/pom.xml
@@ -30,7 +30,7 @@
         <module>autho</module>
         <module>common</module>
         <module>getaway</module>
-<!--        <module>haikang</module>-->
+        <!--<module>haikang</module>-->
         <module>dahua</module>
         <!--        <module>consumer</module>-->
                 <module>haikangface</module>
--
libgit2 0.21.0