diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncDoorsEventAfterTaskImpl.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncDoorsEventAfterTaskImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..d18a81c09af36cafb97ca2d59048cf3fc38b9e46
--- /dev/null
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncDoorsEventAfterTaskImpl.java
@@ -0,0 +1,173 @@
+package com.mortals.xhx.daemon.task;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.PageUtil;
+import cn.hutool.core.util.StrUtil;
+import com.mortals.framework.common.Rest;
+import com.mortals.framework.exception.AppException;
+import com.mortals.framework.model.Context;
+import com.mortals.framework.service.ITask;
+import com.mortals.framework.service.ITaskExcuteService;
+import com.mortals.framework.util.DateUtils;
+import com.mortals.xhx.base.system.user.model.UserEntity;
+import com.mortals.xhx.common.code.YesNoEnum;
+import com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity;
+import com.mortals.xhx.module.attendance.model.AttendanceRecordHikQuery;
+import com.mortals.xhx.module.attendance.service.AttendanceRecordHikService;
+import com.mortals.xhx.module.hik.door.model.req.door.DoorEventReq;
+import com.mortals.xhx.module.hik.door.model.rsp.door.DoorEventDataInfo;
+import com.mortals.xhx.module.hik.door.service.IHikDoorService;
+import com.mortals.xhx.module.staff.model.StaffEntity;
+import com.mortals.xhx.module.staff.service.StaffService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * 鍚屾鑾峰彇涓嬪崍娴峰悍闂ㄧ浜嬩欢
+ */
+@Slf4j
+@Service("SyncDoorsEventAfterTask")
+public class SyncDoorsEventAfterTaskImpl implements ITaskExcuteService {
+
+    @Autowired
+    private AttendanceRecordHikService recordHikService;
+
+    @Autowired
+    private StaffService staffService;
+
+    @Autowired
+    private IHikDoorService hikDoorService;
+
+
+    @Override
+    public void excuteTask(ITask task) throws AppException {
+        syncDoorEvents();
+
+        calculateAttendByDay();
+    }
+
+    private void calculateAttendByDay() {
+        Context context = new Context();
+        UserEntity userEntity = new UserEntity();
+        userEntity.setCreateUserId(1L);
+        userEntity.setCreateUserName("system");
+        userEntity.setCreateTime(new Date());
+        context.setUser(userEntity);
+        AttendanceRecordHikQuery recordHikEntity = new AttendanceRecordHikQuery();
+
+        // Date todayStart = DateUtil.offsetHour(new Date(), -5).toJdkDate();
+        //  recordHikEntity.setAttendanceDateStart(DateUtils.getCurrStrDate());
+        recordHikEntity.setAttendanceDateStart(DateUtil.offsetHour(new Date(), -5).toString());
+        recordHikEntity.setAttendanceDateEnd(DateUtils.getCurrStrDate());
+        try {
+            recordHikService.addAttendanceRecordByQuery(recordHikEntity, context);
+        } catch (Exception e) {
+            log.error("璁$畻鑰冨嫟寮傚父", e);
+        }
+    }
+
+    private void syncDoorEvents() {
+        DoorEventReq doorEventReq = new DoorEventReq();
+        List<Integer> eventTypes = new ArrayList<>();
+        eventTypes.add(196885);
+        eventTypes.add(196887);
+        eventTypes.add(196893);
+        eventTypes.add(196888);
+        eventTypes.add(196889);
+        eventTypes.add(196890);
+        eventTypes.add(196891);
+        doorEventReq.setEventTypes(eventTypes);
+        // 鑾峰彇褰撳ぉ鐨勫紑濮嬫椂闂�
+        Date todayStart = DateUtil.offsetHour(new Date(), -5).toJdkDate();
+        // Date todayStart = DateUtil.beginOfDay(new Date());
+        // 鑾峰彇褰撳ぉ鐨勭粨鏉熸椂闂�
+        Date todayEnd = DateUtil.endOfDay(new Date());
+        doorEventReq.setStartTime(todayStart);
+        doorEventReq.setEndTime(todayEnd);
+        doorEventReq.setPageNo(1);
+        doorEventReq.setPageSize(1);
+
+        Rest<DoorEventDataInfo> doorEventsRest = hikDoorService.getDoorEvents(doorEventReq);
+        log.info("doorEventsRest:{} msg:{}", doorEventsRest.getCode(), doorEventsRest.getMsg());
+        if (doorEventsRest.getCode() == YesNoEnum.YES.getValue()) {
+            //鍒嗛〉鑾峰彇鑰冨嫟鏁版嵁
+            Integer total = doorEventsRest.getData().getTotal();
+            int pageCount = PageUtil.totalPage(total, 1000);
+            for (int i = 1; i <= pageCount; i++) {
+                doorEventReq.setPageNo(i);
+                doorEventReq.setPageSize(1000);
+                doorEventsRest = hikDoorService.getDoorEvents(doorEventReq);
+                log.info("doorEventsRest:{} msg:{},page:{}", doorEventsRest.getCode(), doorEventsRest.getMsg(), doorEventReq.getPageNo());
+                getDoorEvents(doorEventsRest);
+            }
+        }
+    }
+
+    private void getDoorEvents(Rest<DoorEventDataInfo> doorEventsRest) {
+        //鍚屾褰撳墠鑰冨嫟鏁版嵁
+        List<AttendanceRecordHikEntity> attRecords = doorEventsRest.getData().getList().stream().map(item -> {
+            AttendanceRecordHikEntity recordHikEntity = new AttendanceRecordHikEntity();
+            recordHikEntity.initAttrValue();
+            StaffEntity staffCache = staffService.getExtCache(StrUtil.padPre(item.getJobNo(), 8, "0"));
+            if (ObjectUtils.isEmpty(staffCache)) {
+                log.info("staff is null !staffCode:{}", item.getJobNo());
+                return null;
+            }
+
+            recordHikEntity.setStaffId(staffCache.getId());
+            recordHikEntity.setStaffName(staffCache.getName());
+            recordHikEntity.setWorkNum(staffCache.getWorkNum());
+            recordHikEntity.setDeptId(staffCache.getDeptId());
+            recordHikEntity.setDeptName(staffCache.getDeptName());
+            recordHikEntity.setPositionId(staffCache.getPositionId());
+            recordHikEntity.setPositionName(staffCache.getPositionName());
+
+            recordHikEntity.setAttendanceDate(item.getEventTime());
+            recordHikEntity.setAttendanceAddress(item.getDoorName());
+            recordHikEntity.setEventSource("闂ㄧ鐐�");
+            recordHikEntity.setRemark(item.getEventId());
+            recordHikEntity.setCreateTime(new Date());
+            recordHikEntity.setCreateUserName("绯荤粺绠$悊鍛�");
+            recordHikEntity.setCreateUserId(1L);
+            return recordHikEntity;
+        }).filter(f -> f != null).collect(Collectors.toList());
+        log.info("attRecords size:{}", attRecords.size());
+        List<String> eventIds = attRecords.parallelStream().filter(f -> !ObjectUtils.isEmpty(f) && !ObjectUtils.isEmpty(f.getRemark())).map(i -> i.getRemark()).collect(Collectors.toList());
+
+        //鏌ヨ褰撳ぉ鑰冨嫟璁板綍鏄惁鏈夐噸澶嶇殑 鏈夌殑 鍒欎笉娣诲姞
+        AttendanceRecordHikQuery recordHikQuery = new AttendanceRecordHikQuery();
+        recordHikQuery.setAttendanceDateStart(DateUtil.format(DateUtil.beginOfDay(new Date()), "yyyy-MM-dd"));
+        recordHikQuery.setAttendanceDateEnd(DateUtil.format(DateUtil.beginOfDay(new Date()), "yyyy-MM-dd"));
+        recordHikQuery.setRemarkList(eventIds);
+        Set<String> eventIdSet = recordHikService.find(recordHikQuery).parallelStream().map(i -> i.getRemark()).collect(Collectors.toSet());
+
+        //鍘婚噸 鏃跺垎绉掓墦鍗$殑 涔熻鍘绘帀閲嶅銆�
+        List<AttendanceRecordHikEntity> saveRecordList = attRecords.stream().filter(f -> !eventIdSet.contains(f.getRemark())).collect(Collectors.toList());
+        if (!ObjectUtils.isEmpty(saveRecordList)) {
+            //鍗曚釜鎻掑叆 鍘绘帀閲嶅鏃堕棿娈电殑鎵撳崱璁板綍
+            for (AttendanceRecordHikEntity recordHikEntity : saveRecordList) {
+                try {
+                    recordHikService.save(recordHikEntity);
+                } catch (Exception e) {
+                    log.error("鍩虹鑰冨嫟鏁版嵁淇濆瓨寮傚父", e.getMessage());
+                }
+            }
+            // recordHikService.save(saveRecordList);
+        }
+        log.info("saveRecordList size:{}", saveRecordList.size());
+    }
+
+
+    @Override
+    public void stopTask(ITask task) throws AppException {
+
+    }
+}
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncDoorsEventTaskImpl.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncDoorsEventTaskImpl.java
index 98cd55081a3cdf565f7e18c095e8e7549e9bda32..28484dce2ce772e7900012df415ad9620d99c5bd 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncDoorsEventTaskImpl.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncDoorsEventTaskImpl.java
@@ -1,11 +1,8 @@
 package com.mortals.xhx.daemon.task;
 
-import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.PageUtil;
 import cn.hutool.core.util.StrUtil;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
 import com.mortals.framework.common.Rest;
 import com.mortals.framework.exception.AppException;
 import com.mortals.framework.model.Context;
@@ -23,12 +20,10 @@ import com.mortals.xhx.module.hik.door.service.IHikDoorService;
 import com.mortals.xhx.module.staff.model.StaffEntity;
 import com.mortals.xhx.module.staff.service.StaffService;
 import lombok.extern.slf4j.Slf4j;
-import org.checkerframework.checker.units.qual.A;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 
-import java.time.Year;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -68,12 +63,12 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
         context.setUser(userEntity);
         AttendanceRecordHikQuery recordHikEntity = new AttendanceRecordHikQuery();
 
-       // Date todayStart = DateUtil.offsetHour(new Date(), -5).toJdkDate();
-      //  recordHikEntity.setAttendanceDateStart(DateUtils.getCurrStrDate());
+        // Date todayStart = DateUtil.offsetHour(new Date(), -5).toJdkDate();
+        //  recordHikEntity.setAttendanceDateStart(DateUtils.getCurrStrDate());
         recordHikEntity.setAttendanceDateStart(DateUtil.offsetHour(new Date(), -5).toString());
         recordHikEntity.setAttendanceDateEnd(DateUtils.getCurrStrDate());
         try {
-            recordHikService.addAttendanceRecord(recordHikEntity, context);
+            recordHikService.addAttendanceRecordByQuery(recordHikEntity, context);
         } catch (Exception e) {
             log.error("璁$畻鑰冨嫟寮傚父", e);
         }
@@ -92,7 +87,7 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
         doorEventReq.setEventTypes(eventTypes);
         // 鑾峰彇褰撳ぉ鐨勫紑濮嬫椂闂�
         Date todayStart = DateUtil.offsetHour(new Date(), -5).toJdkDate();
-       // Date todayStart = DateUtil.beginOfDay(new Date());
+        // Date todayStart = DateUtil.beginOfDay(new Date());
         // 鑾峰彇褰撳ぉ鐨勭粨鏉熸椂闂�
         Date todayEnd = DateUtil.endOfDay(new Date());
         doorEventReq.setStartTime(todayStart);
@@ -123,7 +118,7 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
             recordHikEntity.initAttrValue();
             StaffEntity staffCache = staffService.getExtCache(StrUtil.padPre(item.getJobNo(), 8, "0"));
             if (ObjectUtils.isEmpty(staffCache)) {
-                log.info("staff is null !staffCode:{}",item.getJobNo());
+                log.info("staff is null !staffCode:{}", item.getJobNo());
                 return null;
             }
 
@@ -140,13 +135,11 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
             recordHikEntity.setEventSource("闂ㄧ鐐�");
             recordHikEntity.setRemark(item.getEventId());
             recordHikEntity.setCreateTime(new Date());
-            recordHikEntity.setCreateUserName("system");
+            recordHikEntity.setCreateUserName("绯荤粺绠$悊鍛�");
             recordHikEntity.setCreateUserId(1L);
             return recordHikEntity;
-        }).filter(f->f!=null).collect(Collectors.toList());
-
+        }).filter(f -> f != null).collect(Collectors.toList());
         log.info("attRecords size:{}", attRecords.size());
-
         List<String> eventIds = attRecords.parallelStream().filter(f -> !ObjectUtils.isEmpty(f) && !ObjectUtils.isEmpty(f.getRemark())).map(i -> i.getRemark()).collect(Collectors.toList());
 
         //鏌ヨ褰撳ぉ鑰冨嫟璁板綍鏄惁鏈夐噸澶嶇殑 鏈夌殑 鍒欎笉娣诲姞
@@ -156,9 +149,18 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
         recordHikQuery.setRemarkList(eventIds);
         Set<String> eventIdSet = recordHikService.find(recordHikQuery).parallelStream().map(i -> i.getRemark()).collect(Collectors.toSet());
 
+        //鍘婚噸 鏃跺垎绉掓墦鍗$殑 涔熻鍘绘帀閲嶅銆�
         List<AttendanceRecordHikEntity> saveRecordList = attRecords.stream().filter(f -> !eventIdSet.contains(f.getRemark())).collect(Collectors.toList());
         if (!ObjectUtils.isEmpty(saveRecordList)) {
-            recordHikService.save(saveRecordList);
+            //鍗曚釜鎻掑叆 鍘绘帀閲嶅鏃堕棿娈电殑鎵撳崱璁板綍
+            for (AttendanceRecordHikEntity recordHikEntity : saveRecordList) {
+                try {
+                    recordHikService.save(recordHikEntity);
+                } catch (Exception e) {
+                    log.error("鍩虹鑰冨嫟鏁版嵁淇濆瓨寮傚父", e.getMessage());
+                }
+            }
+            // recordHikService.save(saveRecordList);
         }
         log.info("saveRecordList size:{}", saveRecordList.size());
     }
@@ -168,20 +170,4 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
     public void stopTask(ITask task) throws AppException {
 
     }
-
-    public static void main(String[] args) {
-        // 鑾峰彇褰撳墠鏃堕棿鐨勫皬鏃舵暟
-        int hour = DateUtil.hour(new Date(), true);
-        // 鑾峰彇褰撳墠鏃堕棿鎵€鍦ㄥ皬鏃剁殑寮€濮嬫椂闂村拰缁撴潫鏃堕棿
-        Date startTime = DateUtil.beginOfHour(new Date());
-        Date endTime = DateUtil.endOfHour(new Date());
-
-        // 鏍煎紡鍖栨椂闂翠负鎸囧畾鏍煎紡
-        String startTimeStr = DateUtil.format(startTime, "yyyy-MM-dd HH:00:00");
-        String endTimeStr = DateUtil.format(endTime, "yyyy-MM-dd HH:59:59");
-
-        // 杈撳嚭缁撴灉
-        System.out.println("褰撳墠鏃堕棿鎵€鍦ㄥ皬鏃剁殑寮€濮嬫椂闂达細" + startTimeStr);
-        System.out.println("褰撳墠鏃堕棿鎵€鍦ㄥ皬鏃剁殑缁撴潫鏃堕棿锛�" + endTimeStr);
-    }
 }
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dingmsg/api/DingMessageController.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dingmsg/api/DingMessageController.java
index d9a84d9c426fd304b6e832fca32ecdde5304314f..3315174a9c11b7877305004a2e5010199d3a7c32 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dingmsg/api/DingMessageController.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dingmsg/api/DingMessageController.java
@@ -20,6 +20,9 @@ import com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordEntity;
 import com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordQuery;
 import com.mortals.xhx.module.attendance.service.AttendanceLeaveRecordService;
 import com.mortals.xhx.module.dingding.personal.service.IDingPersonService;
+import com.mortals.xhx.module.staff.model.StaffEntity;
+import com.mortals.xhx.module.staff.model.StaffQuery;
+import com.mortals.xhx.module.staff.service.StaffService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.logging.Log;
 import org.apache.poi.ss.formula.functions.T;
@@ -54,7 +57,8 @@ public class DingMessageController {
     private IDingPersonService dingPersonService;
     @Autowired
     private AttendanceLeaveRecordService attendanceLeaveRecordService;
-
+    @Autowired
+    private StaffService staffService;
 
     /**
      * appKey
@@ -109,149 +113,170 @@ public class DingMessageController {
                         AttendanceLeaveRecordEntity leaveRecordEntity = new AttendanceLeaveRecordEntity();
                         leaveRecordEntity.initAttrValue();
                         leaveRecordEntity.setRemark(processInstanceId);   //灏嗛拤閽夌殑浜嬬墿id浣滀负澶囨敞濉叆鏁版嵁搴�
-                        leaveRecordEntity.setLeavePersonId(Long.parseLong(result.getOriginatorUserId()));
-                        leaveRecordEntity.setLeavePerson(result.getTitle().substring(0,result.getTitle().indexOf("鎻愪氦")));
-                        leaveRecordEntity.setDeptId(Long.parseLong(result.getOriginatorDeptId()));
-                        leaveRecordEntity.setDeptName(result.getOriginatorDeptName());
 
+                        Rest<String> mobileRest = dingPersonService.getPersonById(result.getOriginatorUserId());
+                        if(mobileRest.getCode() == Rest.SUCCESS) {
+                            String mobile = mobileRest.getData();
+                            StaffEntity staffEntity = staffService.selectOne(new StaffQuery().phoneNumber(mobile));
+                            if(!ObjectUtils.isEmpty(staffEntity)){
+
+                                leaveRecordEntity.setLeavePersonId(staffEntity.getId());
+                                leaveRecordEntity.setLeavePerson(staffEntity.getName());
+                                leaveRecordEntity.setDeptId(staffEntity.getDeptId());
+                                leaveRecordEntity.setDeptName(staffEntity.getDeptName());
+                                leaveRecordEntity.setPhoneNumber(staffEntity.getPhoneNumber());
+
+                                if(result.getTasks().size() >0 ){
+                                    Date startTime = dateFormat(result.getTasks().get(0).getCreateTime());
+
+                                    Date endTime = dateFormat(result.getTasks().get(0).getFinishTime());
+                                    leaveRecordEntity.setStartTime(startTime);
+                                    leaveRecordEntity.setEndTime(endTime);
+                                    leaveRecordEntity.setDuration((int) ((endTime.getTime() - startTime.getTime())/1000));
+                                }
 
+                                if(result.getFormComponentValues().size() > 0 ){
+                                    JSONArray jsonArray = JSONArray.parseArray(result.getFormComponentValues().get(0).getValue());
+                                    if(jsonArray.size() > 0){
+                                        Date startTime1 = dateFormat(jsonArray.get(0).toString());
+                                        leaveRecordEntity.setStartTime(startTime1);
+                                    }
+                                    if(jsonArray.size() > 1){
+                                        Date endTime1 = dateFormat(jsonArray.get(1).toString());
+                                        leaveRecordEntity.setEndTime(endTime1);
+                                    }
+                                    if(jsonArray.size() > 2){
+                                        leaveRecordEntity.setDuration((int) (Float.parseFloat(jsonArray.get(2).toString())*60*60));
+                                    }
+                                    if(jsonArray.size() > 4){
+                                        switch (jsonArray.get(4).toString()){
+                                            case "璋冧紤":
+                                                leaveRecordEntity.setLeaveType(2);
+                                                break;
+                                            case "鐥呭亣":
+                                                leaveRecordEntity.setLeaveType(3);
+                                                break;
+                                            case "骞村亣":
+                                                leaveRecordEntity.setLeaveType(4);
+                                                break;
+                                            case "浜у亣":
+                                                leaveRecordEntity.setLeaveType(5);
+                                                break;
+                                            case "闄骇鍋�":
+                                                leaveRecordEntity.setLeaveType(6);
+                                                break;
+                                            case "濠氬亣":
+                                                leaveRecordEntity.setLeaveType(7);
+                                                break;
+                                            case "渚嬪亣":
+                                                leaveRecordEntity.setLeaveType(8);
+                                                break;
+                                            case "鍝轰钩鍋�":
+                                                leaveRecordEntity.setLeaveType(9);
+                                                break;
+                                            case "涓у亣":
+                                                leaveRecordEntity.setLeaveType(10);
+                                                break;
+                                            case "鍥炲崟浣�":
+                                                leaveRecordEntity.setLeaveType(11);
+                                                break;
+                                            case "鍥犲叕璇峰亣":
+                                                leaveRecordEntity.setLeaveType(12);
+                                                break;
+                                            case "澶栧嚭鍕橀獙":
+                                                leaveRecordEntity.setLeaveType(13);
+                                                break;
+                                            case "鍊肩彮琛ョ彮":
+                                                leaveRecordEntity.setLeaveType(14);
+                                                break;
+                                            case "浣撴":
+                                                leaveRecordEntity.setLeaveType(15);
+                                                break;
+                                            case "闅旂":
+                                                leaveRecordEntity.setLeaveType(16);
+                                                break;
+                                            case "鍥犲叕澶栧嚭":
+                                                leaveRecordEntity.setLeaveType(17);
+                                                break;
+                                            case "鍏紤":
+                                                leaveRecordEntity.setLeaveType(18);
+                                                break;
+                                            case "鑲插効鍋�":
+                                                leaveRecordEntity.setLeaveType(19);
+                                                break;
+                                            case "璋冨洖鍗曚綅":
+                                                leaveRecordEntity.setLeaveType(20);
+                                                break;
+                                            case "鎺翰鍋�":
+                                                leaveRecordEntity.setLeaveType(21);
+                                                break;
+                                            default:
+                                                leaveRecordEntity.setLeaveType(1);  //榛樿浜嬪亣
+                                                break;
+
+                                        }
+
+                                    }
+
+                                } else if (result.getFormComponentValues().size() > 1) {  //璇峰亣鐞嗙敱
+                                    GetProcessInstanceResponseBody.GetProcessInstanceResponseBodyResultFormComponentValues resonEntity = result.getFormComponentValues().get(1);
+                                    if(resonEntity.getName().equals("璇峰亣浜嬬敱")){
+                                        leaveRecordEntity.setReason(resonEntity.getValue());
+                                    }
+                                }else if (result.getFormComponentValues().size() > 2) {  //涓婁紶鐨勯檮浠�
+                                    GetProcessInstanceResponseBody.GetProcessInstanceResponseBodyResultFormComponentValues picEntity = result.getFormComponentValues().get(2);
+                                    if(picEntity.getName().equals("鍥剧墖") && picEntity.getValue() != null){
+                                        leaveRecordEntity.setReason(picEntity.getValue());
+                                    }
+                                }
 
-                        if(result.getTasks().size() >0 ){
-                            Date startTime = dateFormat(result.getTasks().get(0).getCreateTime());
-                            Date endTime = dateFormat(result.getTasks().get(0).getFinishTime());
-                            leaveRecordEntity.setStartTime(startTime);
-                            leaveRecordEntity.setEndTime(endTime);
-                            leaveRecordEntity.setDuration((int) ((endTime.getTime() - startTime.getTime())/1000));
-                        }
 
-                        if(result.getFormComponentValues().size() > 0 ){
-                            JSONArray jsonArray = JSONArray.parseArray(result.getFormComponentValues().get(0).getValue());
-                            if(jsonArray.size() > 0){
-                                Date startTime1 = dateFormat(jsonArray.get(0).toString());
-                                leaveRecordEntity.setStartTime(startTime1);
-                            }
-                            if(jsonArray.size() > 1){
-                                Date endTime1 = dateFormat(jsonArray.get(1).toString());
-                                leaveRecordEntity.setEndTime(endTime1);
-                            }
-                            if(jsonArray.size() > 2){
-                                leaveRecordEntity.setDuration((int) (Float.parseFloat(jsonArray.get(2).toString())*60*60));
-                            }
-                            if(jsonArray.size() > 4){
-                                switch (jsonArray.get(4).toString()){
-                                    case "璋冧紤":
-                                        leaveRecordEntity.setLeaveType(2);
-                                        break;
-                                    case "鐥呭亣":
-                                        leaveRecordEntity.setLeaveType(3);
-                                        break;
-                                    case "骞村亣":
-                                        leaveRecordEntity.setLeaveType(4);
-                                        break;
-                                    case "浜у亣":
-                                        leaveRecordEntity.setLeaveType(5);
-                                        break;
-                                    case "闄骇鍋�":
-                                        leaveRecordEntity.setLeaveType(6);
-                                        break;
-                                    case "濠氬亣":
-                                        leaveRecordEntity.setLeaveType(7);
-                                        break;
-                                    case "渚嬪亣":
-                                        leaveRecordEntity.setLeaveType(8);
-                                        break;
-                                    case "鍝轰钩鍋�":
-                                        leaveRecordEntity.setLeaveType(9);
-                                        break;
-                                    case "涓у亣":
-                                        leaveRecordEntity.setLeaveType(10);
-                                        break;
-                                    case "鍥炲崟浣�":
-                                        leaveRecordEntity.setLeaveType(11);
-                                        break;
-                                    case "鍥犲叕璇峰亣":
-                                        leaveRecordEntity.setLeaveType(12);
-                                        break;
-                                    case "澶栧嚭鍕橀獙":
-                                        leaveRecordEntity.setLeaveType(13);
-                                        break;
-                                    case "鍊肩彮琛ョ彮":
-                                        leaveRecordEntity.setLeaveType(14);
-                                        break;
-                                    case "浣撴":
-                                        leaveRecordEntity.setLeaveType(15);
-                                        break;
-                                    case "闅旂":
-                                        leaveRecordEntity.setLeaveType(16);
-                                        break;
-                                    case "鍥犲叕澶栧嚭":
-                                        leaveRecordEntity.setLeaveType(17);
-                                        break;
-                                    case "鍏紤":
-                                        leaveRecordEntity.setLeaveType(18);
-                                        break;
-                                    case "鑲插効鍋�":
-                                        leaveRecordEntity.setLeaveType(19);
-                                        break;
-                                    case "璋冨洖鍗曚綅":
-                                        leaveRecordEntity.setLeaveType(20);
-                                        break;
-                                    case "鎺翰鍋�":
-                                        leaveRecordEntity.setLeaveType(21);
-                                        break;
-                                    default:
-                                        leaveRecordEntity.setLeaveType(1);  //榛樿浜嬪亣
-                                        break;
+                                if(result.getStatus().compareToIgnoreCase("NEW") == 0 || result.getStatus().compareToIgnoreCase("RUNNING") == 0){
+                                    leaveRecordEntity.setProcessStatus(1);
+                                }else if(result.getStatus().compareToIgnoreCase("COMPLETED") == 0 || result.getStatus().compareToIgnoreCase("CANCELED") == 0
+                                        || result.getStatus().compareToIgnoreCase("TERMINATED") == 0){
+                                    leaveRecordEntity.setProcessStatus(2);
+                                }
 
+                                if(result.getResult().compareToIgnoreCase("AGREE") == 0){
+                                    leaveRecordEntity.setAuditResult(1);
+                                }else {
+                                    leaveRecordEntity.setAuditResult(2);
                                 }
 
-                            }
+                                log.info("閽夐拤杩斿洖鐨剅esult:"+result.getResult()+"\nauditresult:"+leaveRecordEntity.getAuditResult());
+                                leaveRecordEntity.setAuditDesc(result.getOperationRecords().get(0).getRemark());
 
-                        } else if (result.getFormComponentValues().size() > 1) {  //璇峰亣鐞嗙敱
-                            GetProcessInstanceResponseBody.GetProcessInstanceResponseBodyResultFormComponentValues resonEntity = result.getFormComponentValues().get(1);
-                            if(resonEntity.getName().equals("璇峰亣浜嬬敱")){
-                                leaveRecordEntity.setReason(resonEntity.getValue());
-                            }
-                        }else if (result.getFormComponentValues().size() > 2) {  //涓婁紶鐨勯檮浠�
-                            GetProcessInstanceResponseBody.GetProcessInstanceResponseBodyResultFormComponentValues picEntity = result.getFormComponentValues().get(2);
-                            if(picEntity.getName().equals("鍥剧墖") && picEntity.getValue() != null){
-                                leaveRecordEntity.setReason(picEntity.getValue());
-                            }
-                        }
+                                AttendanceLeaveRecordEntity recordEntity = attendanceLeaveRecordService.selectOne(new AttendanceLeaveRecordQuery().remark(processInstanceId));
+                                if(ObjectUtils.isEmpty(recordEntity)){
 
+                                    leaveRecordEntity.setCreateTime(new Date());
+                                    leaveRecordEntity.setCreateUserId(1L);
+                                    attendanceLeaveRecordService.save(leaveRecordEntity);
+                                }else{
+                                    leaveRecordEntity.setId(recordEntity.getId());
 
-                        if(result.getStatus().compareToIgnoreCase("NEW") == 0 || result.getStatus().compareToIgnoreCase("RUNNING") == 0){
-                            leaveRecordEntity.setProcessStatus(1);
-                        }else if(result.getStatus().compareToIgnoreCase("COMPLETED") == 0 || result.getStatus().compareToIgnoreCase("CANCELED") == 0
-                                || result.getStatus().compareToIgnoreCase("TERMINATED") == 0){
-                            leaveRecordEntity.setProcessStatus(2);
-                        }
+                                    leaveRecordEntity.setUpdateUserId(1L);
+                                    leaveRecordEntity.setUpdateTime(new Date());
 
-                        if(result.getResult().compareToIgnoreCase("AGREE") == 0){
-                            leaveRecordEntity.setAuditResult(1);
-                        }else {
-                            leaveRecordEntity.setAuditResult(2);
-                        }
+                                    attendanceLeaveRecordService.update(leaveRecordEntity);
+                                }
 
-                        log.info("閽夐拤杩斿洖鐨剅esult:"+result.getResult()+"\nauditresult:"+leaveRecordEntity.getAuditResult());
-                        leaveRecordEntity.setAuditDesc(result.getOperationRecords().get(0).getRemark());
 
-                        AttendanceLeaveRecordEntity recordEntity = attendanceLeaveRecordService.selectOne(new AttendanceLeaveRecordQuery().remark(processInstanceId));
-                        if(ObjectUtils.isEmpty(recordEntity)){
 
-                            leaveRecordEntity.setCreateTime(new Date());
-                            leaveRecordEntity.setCreateUserId(1L);
-                            attendanceLeaveRecordService.save(leaveRecordEntity);
-                        }else{
-                             leaveRecordEntity.setId(recordEntity.getId());
+                            }else {
+                                log.info("璇ュ彿鐮�("+mobile +")鏈湪鏈郴缁熺粦瀹�");
+                            }
 
-                             leaveRecordEntity.setUpdateUserId(1L);
-                             leaveRecordEntity.setUpdateTime(new Date());
 
-                             attendanceLeaveRecordService.update(leaveRecordEntity);
+                        }else {
+                            log.info("鏍规嵁id鍦ㄩ拤閽夊钩鍙版煡璇㈢數璇濆け璐�"+mobileRest.getMsg());
                         }
 
 
+
+
+
                     }
 
                 }
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/AttendanceStatEntity.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/AttendanceStatEntity.java
index a3af6b0c39a6ea3dec0a462adebe5dad38b13229..5da417ebac985c1d5e47084f604c297149e2f9f3 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/AttendanceStatEntity.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/AttendanceStatEntity.java
@@ -1,7 +1,10 @@
 package com.mortals.xhx.module.attendance.model;
 import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 import java.util.ArrayList;
+
+import cn.hutool.core.date.DateUtil;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.mortals.framework.annotation.Excel;
 import com.mortals.framework.model.BaseEntityLong;
@@ -29,6 +32,7 @@ public class AttendanceStatEntity extends AttendanceStatVo {
     /**
      * 鍛樺伐濮撳悕
      */
+    @Excel(name = "鍛樺伐濮撳悕")
     private String staffName;
     /**
      * 鎵€灞為儴闂�
@@ -37,6 +41,7 @@ public class AttendanceStatEntity extends AttendanceStatVo {
     /**
      * 鎵€灞為儴闂ㄥ悕绉�
      */
+    @Excel(name = "閮ㄩ棬鍚嶇О")
     private String deptName;
     /**
      * 鍥炲崟浣嶏紙澶╋級
@@ -312,11 +317,11 @@ public class AttendanceStatEntity extends AttendanceStatVo {
 
         this.earlyLeaveMeeting = BigDecimal.valueOf(0);
 
-        this.year = -1;
+        this.year = DateUtil.year(new Date());
 
-        this.month = -1;
+        this.month = DateUtil.month(new Date())+1;
 
-        this.day = -1;
+        this.day = DateUtil.dayOfMonth(new Date());
 
         this.remark = "";
 
@@ -338,4 +343,8 @@ public class AttendanceStatEntity extends AttendanceStatVo {
 
         this.afternoonTimes = 0;
     }
+
+    public static void main(String[] args) {
+        System.out.println(DateUtil.dayOfMonth(new Date()));
+    }
 }
\ No newline at end of file
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceRecordHikService.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceRecordHikService.java
index 86d7707df21a7eece95d49edf01dcec2b700abb8..2695e905959d4046dde999a421c5f7a867dd7dea 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceRecordHikService.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceRecordHikService.java
@@ -4,6 +4,8 @@ import com.mortals.framework.service.ICRUDService;
 import com.mortals.xhx.module.attendance.dao.AttendanceRecordHikDao;
 import com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity;
 
+import java.util.List;
+
 /**
 * AttendanceRecordHikService
 *
@@ -17,9 +19,26 @@ public interface AttendanceRecordHikService extends ICRUDService<AttendanceRecor
     AttendanceRecordHikDao getDao();
 
     /**
-     * 灏嗗師濮嬫暟鎹鍏ユ墦鍗¤褰曡〃
-     * @param entity
+     * 鏍规嵁鏌ヨ鏉′欢鐢熸垚鎵撳崱璁板綍
+     * @param attendanceRecordHikQuery
+     */
+     void addAttendanceRecordByQuery(AttendanceRecordHikEntity attendanceRecordHikQuery, Context context) throws Exception;
+
+
+
+    /**
+     * 鏍规嵁鏌ヨ鏉′欢鐢熸垚鎵撳崱璁板綍
+     * @param hikEntity
      */
-     void addAttendanceRecord(AttendanceRecordHikEntity entity, Context context) throws Exception;
+    void addAttendanceRecord(AttendanceRecordHikEntity hikEntity, Context context) throws Exception;
+
+
+
+    /**
+     * 鏍规嵁鏌ュ師濮嬭褰曞垪琛ㄧ敓鎴愭墦鍗¤褰�
+     * @param hikEntityList
+     */
+    void addAttendanceRecordList(List<AttendanceRecordHikEntity> hikEntityList, Context context) throws Exception;
+
 
 }
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceRecordHikServiceImpl.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceRecordHikServiceImpl.java
index 62f535f3aa4289655f996f7015a10280fef9b7ba..eaf45790f7a02f371f3bf7c758b5ac84512f3868 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceRecordHikServiceImpl.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceRecordHikServiceImpl.java
@@ -6,6 +6,7 @@ import com.mortals.framework.service.IUser;
 import com.mortals.framework.util.StringUtils;
 import com.mortals.xhx.base.system.upload.service.UploadService;
 import com.mortals.xhx.common.code.*;
+import com.mortals.xhx.common.utils.BeanUtil;
 import com.mortals.xhx.module.attendance.model.*;
 import com.mortals.xhx.module.attendance.service.*;
 import com.mortals.xhx.module.dept.service.DeptService;
@@ -14,6 +15,7 @@ import com.mortals.xhx.module.staff.model.StaffQuery;
 import com.mortals.xhx.module.staff.service.StaffService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.time.DateUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
@@ -60,16 +62,200 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
     @Autowired
     private AttendanceRecordErrorService errorService;
 
+
     @Override
-    public void addAttendanceRecord(AttendanceRecordHikEntity entity, Context context) throws Exception {
+    public void addAttendanceRecord(AttendanceRecordHikEntity hikEntity, Context context) throws Exception {
+        List<AttendanceRecordHikEntity> hikEntityList = new ArrayList<>();
+        addAttendanceRecordList(hikEntityList, context);
+    }
 
-        List<AttendanceRecordHikEntity> hikEntityList = attendanceRecordHikService.find(entity);
+    @Override
+    public void addAttendanceRecordByQuery(AttendanceRecordHikEntity attendanceRecordHikQuery, Context context) throws Exception {
+        List<AttendanceRecordHikEntity> hikEntityList = attendanceRecordHikService.find(attendanceRecordHikQuery);
+        addAttendanceRecordList(hikEntityList, context);
+    }
+
+    public void addAttendanceRecordList(List<AttendanceRecordHikEntity> hikEntityList, Context context) throws Exception {
         //瀵硅€冨嫟鏁版嵁鏍规嵁鑰冨嫟鏃堕棿杩涜鎺掑簭
         List<AttendanceRecordHikEntity> collect = hikEntityList.stream().sorted(Comparator.comparing(AttendanceRecordHikEntity::getAttendanceDate)).collect(Collectors.toList());
         //鏍规嵁宸ュ彿瀵硅€冨嫟鏁版嵁杩涜鍒嗙粍
         Map<String, List<AttendanceRecordHikEntity>> listMap = collect.stream().collect(Collectors.groupingBy(AttendanceRecordHikEntity::getWorkNum));
         //Map<String, Map<String, List<AttendanceRecordHikEntity>>> groupMap = collect.stream().collect(Collectors.groupingBy(AttendanceRecordHikEntity::getWorkNum, Collectors.groupingBy(x -> com.mortals.framework.util.DateUtils.getDateTimeStr(x.getAttendanceDate(), "yyyy-MM-dd"))));
-        //map閬嶅巻.鍏堟妸鎵€鏈夐敭鍙栧嚭鏉�
+        for (Map.Entry<String, List<AttendanceRecordHikEntity>> itemEntry : listMap.entrySet()) {
+            String workNum = itemEntry.getKey();
+            List<AttendanceRecordHikEntity> recordHikEntityList = itemEntry.getValue();
+            //瀵规寜鐓у伐鍙峰垎缁勪簡鐨勬暟鎹畆ecordHikEntityList杩涜鏃堕棿鍒嗙粍
+            // DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+            Map<String, List<AttendanceRecordHikEntity>> dateRecordMap = recordHikEntityList.stream().collect(Collectors.groupingBy(hikEntity -> DateUtil.formatDate(hikEntity.getAttendanceDate())));
+            for (Map.Entry<String, List<AttendanceRecordHikEntity>> dateEntry : dateRecordMap.entrySet()) {
+                String dateStr = dateEntry.getKey();
+                List<AttendanceRecordHikEntity> attendanceRecordHikEntities = dateEntry.getValue();
+                //瀵圭浉鍚屽伐鍙风殑浜哄憳杩涜閬嶅巻鍒ゆ柇鑰冨嫟瑙勫垯
+                AttendanceRecordEntity attendanceRecordEntity = new AttendanceRecordEntity();
+                attendanceRecordEntity.initAttrValue();
+                List<AttendanceRecordDetailEntity> detailEntityList = new ArrayList<>();
+                for (AttendanceRecordHikEntity item : attendanceRecordHikEntities) {
+                    //瀵逛富琛ㄧ殑瀵硅薄杩涜璧嬪€�
+                    attendanceRecordEntity.setStaffId(item.getStaffId());
+                    attendanceRecordEntity.setStaffName(item.getStaffName());
+                    attendanceRecordEntity.setDeptId(item.getDeptId());
+                    attendanceRecordEntity.setDeptName(item.getDeptName());
+                    attendanceRecordEntity.setPositionId(item.getPositionId());
+                    attendanceRecordEntity.setPositionName(item.getPositionName());
+                    attendanceRecordEntity.setWorkNum(item.getWorkNum());
+                    attendanceRecordEntity.setAttendanceDate(item.getAttendanceDate());
+                    attendanceRecordEntity.setCreateTime(new Date());
+                    attendanceRecordEntity.setCreateUserId(this.getContextUserId(context));
+                    //鑾峰彇鑰冨嫟鎵撳崱鏃堕棿
+                    Date attendanceDate = item.getAttendanceDate();
+                    //閫氳繃宸ュ彿鏌ヨ鍛樺伐淇℃伅
+                    StaffEntity staffEntity = staffService.getExtCache(StrUtil.padPre(item.getWorkNum(), 8, "0"));
+                    if (ObjectUtils.isEmpty(staffEntity)) {
+                        log.info("staffEntity is null ,workNum:{}", StrUtil.padPre(item.getWorkNum(), 8, "0"));
+                        continue;
+                    }
+                    //閫氳繃鍛樺伐id鏌ヨ鑰冨嫟缁勪汉鍛樹俊鎭�
+                    List<AttendanceGroupStaffEntity> attendanceGroupStaffEntities = attendanceGroupStaffService.find(new AttendanceGroupStaffQuery().staffId(staffEntity.getId()));
+                    //鏌ヨ璇ヨ€冨嫟浜哄憳,濡傛灉鏌ュ嚭鏉ョ殑鑰冨嫟浜哄憳淇℃伅list闀垮害涓�1 鍒欒鑰冨嫟浜哄憳鍙湁涓€涓€冨嫟缁�
+                    if (!ObjectUtils.isEmpty(attendanceGroupStaffEntities) && attendanceGroupStaffEntities.size() == 1)
+                        checkAttendGroupByOne(attendanceRecordEntity, detailEntityList, attendanceDate, attendanceGroupStaffEntities.get(0), context);
+
+                    //濡傛灉鑰冨嫟浜哄憳淇℃伅list闀垮害澶т簬1 鍒欒鑰冨嫟浜哄憳鏈夊涓€冨嫟缁�.
+                    if (StringUtils.isNotNull(attendanceGroupStaffEntities) && attendanceGroupStaffEntities.size() > 1) {
+                        for (AttendanceGroupStaffEntity groupStaffEntity : attendanceGroupStaffEntities) {
+                            //澶氳€冨嫟缁� todo 鏆傛椂鍜屽崟涓€瑕嗙洊
+                            checkAttendGroupByOne(attendanceRecordEntity, detailEntityList, attendanceDate, groupStaffEntity, context);
+                        }
+                    }
+                }
+
+                //澶勭悊寮傚父鎵撳崱锛屾墍浠ュ紓甯告墦鍗$殑 閮芥柊澧炰竴鏉¤褰�
+                List<AttendanceRecordErrorEntity> errorEntityList = new ArrayList<>();
+                for (AttendanceRecordDetailEntity recordDetailEntity : detailEntityList) {
+                    //SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                    //SimpleDateFormat sdft = new SimpleDateFormat("HH:mm:ss");
+                    Integer goWorkResult = recordDetailEntity.getGoWorkResult();
+                    Integer offWorkResult = recordDetailEntity.getOffWorkResult();
+//鍒ゆ柇涓婄彮
+                    if (GoWorkResultEnum.姝e父.getValue() != goWorkResult) {
+                        AttendanceRecordErrorEntity errorEntity = new AttendanceRecordErrorEntity();
+                        BeanUtils.copyProperties(attendanceRecordEntity, errorEntity, new String[]{"id"});
+
+                        Date goWorkDate = attendanceClassDetailService.selectOne(new AttendanceClassDetailQuery().id(recordDetailEntity.getShiftsId())).getGoWorkDate();
+                        errorEntity.setGoOffDateTime(goWorkDate);
+
+                        if (!ObjectUtils.isEmpty(recordDetailEntity.getGoWorkDate())) {
+                            errorEntity.setErrorDateTime(recordDetailEntity.getGoWorkDate());
+                            errorEntity.setActualAttendanceDateTime(recordDetailEntity.getGoWorkDate());
+                        } else {
+                            errorEntity.setErrorDateTime(goWorkDate);
+                        }
+                        if (GoWorkResultEnum.鏃╅€€.getValue() == recordDetailEntity.getGoWorkResult()) {
+                            errorEntity.setErrorStatus(ErrorStatusEnum.鏃╅€€.getValue());
+                        }
+                        if (GoWorkResultEnum.杩熷埌.getValue() == recordDetailEntity.getGoWorkResult()) {
+                            errorEntity.setErrorStatus(ErrorStatusEnum.杩熷埌.getValue());
+                        }
+                        if (GoWorkResultEnum.缂哄崱.getValue() == recordDetailEntity.getGoWorkResult()) {
+                            errorEntity.setErrorStatus(ErrorStatusEnum.缂哄崱.getValue());
+                        }
+                        errorEntity.setProcessStatus(YesNoEnum.NO.getValue());
+                        errorEntity.setCreateTime(new Date());
+                        errorEntity.setCreateUserId(this.getContextUserId(context));
+                        errorEntityList.add(errorEntity);
+                    }
+                    //鍒ゆ柇涓嬬彮
+                    if (OffWorkResultEnum.姝e父.getValue() != offWorkResult) {
+                        AttendanceRecordErrorEntity errorEntity = new AttendanceRecordErrorEntity();
+                        errorEntity.initAttrValue();
+                        BeanUtils.copyProperties(attendanceRecordEntity, errorEntity, new String[]{"id"});
+
+                        Date offWorkDate = attendanceClassDetailService.selectOne(new AttendanceClassDetailQuery().id(recordDetailEntity.getShiftsId())).getOffWorkDate();
+                        errorEntity.setGoOffDateTime(offWorkDate);
+                        if (!ObjectUtils.isEmpty(recordDetailEntity.getGoWorkDate())) {
+                            errorEntity.setErrorDateTime(recordDetailEntity.getGoWorkDate());
+                            errorEntity.setActualAttendanceDateTime(recordDetailEntity.getGoWorkDate());
+                        } else {
+                            errorEntity.setErrorDateTime(offWorkDate);
+                        }
+                        if (OffWorkResultEnum.缂哄崱.getValue() == recordDetailEntity.getOffWorkResult()) {
+                            errorEntity.setErrorStatus(ErrorStatusEnum.缂哄崱.getValue());
+                        }
+                        if (OffWorkResultEnum.鏃╅€€.getValue() == recordDetailEntity.getOffWorkResult()) {
+                            errorEntity.setErrorStatus(ErrorStatusEnum.鏃╅€€.getValue());
+                        }
+                        if (OffWorkResultEnum.杩熷埌.getValue() == recordDetailEntity.getOffWorkResult()) {
+                            errorEntity.setErrorStatus(ErrorStatusEnum.杩熷埌.getValue());
+                        }
+                        errorEntity.setProcessStatus(YesNoEnum.NO.getValue());
+                        errorEntity.setCreateTime(new Date());
+                        errorEntity.setCreateUserId(this.getContextUserId(context));
+                        errorEntityList.add(errorEntity);
+                    }
+                }
+
+                if (!ObjectUtils.isEmpty(detailEntityList)) {
+                    if (!ObjectUtils.isEmpty(detailEntityList)) {
+                        errorService.save(errorEntityList, context);
+                    }
+                    attendanceRecordEntity.setShiftsName(detailEntityList.get(0).getShiftsName());
+                    attendanceRecordEntity.setShiftsId(detailEntityList.get(0).getShiftsId());
+                    attendanceRecordEntity.setAttendanceRecordDetailList(detailEntityList);
+
+                    //鍒ゆ柇绛惧埌 鍙瀛樺湪涓€娆℃甯告墦鍗¤缁嗚褰� 灏卞垽鏂鍒�
+                    for (AttendanceRecordDetailEntity detailEntity : detailEntityList) {
+                        if (GoWorkResultEnum.姝e父.getValue() == detailEntity.getGoWorkResult() || GoWorkResultEnum.杩熷埌.getValue() == detailEntity.getOffWorkResult()) {
+                            attendanceRecordEntity.setSignInResult(YesNoEnum.YES.getValue());
+                            break;
+                        }
+                    }
+
+                    for (AttendanceRecordDetailEntity detailEntity : detailEntityList) {
+                        if (OffWorkResultEnum.姝e父.getValue() == detailEntity.getOffWorkResult() || OffWorkResultEnum.鏃╅€€.getValue() == detailEntity.getOffWorkResult()) {
+                            attendanceRecordEntity.setSignOutResult(YesNoEnum.YES.getValue());
+                            break;
+                        }
+                    }
+
+                    for (AttendanceRecordDetailEntity detailEntity : detailEntityList) {
+                        if (OffWorkResultEnum.缂哄崱.getValue() == detailEntity.getOffWorkResult()) {
+                            attendanceRecordEntity.setPunchResult(YesNoEnum.NO.getValue());
+                            break;
+                        }
+
+                        if (OffWorkResultEnum.缂哄崱.getValue() == detailEntity.getOffWorkResult()) {
+                            attendanceRecordEntity.setPunchResult(YesNoEnum.NO.getValue());
+                            break;
+                        }
+                    }
+
+                    if (YesNoEnum.YES.getValue() == attendanceRecordEntity.getSignInResult() && YesNoEnum.YES.getValue() == attendanceRecordEntity.getSignOutResult()) {
+                        attendanceRecordEntity.setPunchResult(YesNoEnum.YES.getValue());
+                    }
+
+                    attendanceRecordEntity.setAttendType("鐜板満鎵撳崱");
+                    //鍒ゆ柇鏄惁瀛樺湪璁板綍 濡傛灉瀛樺湪 鍒欐洿鏂�  缁村害   staffId  attendanceDate shiftsId attendanceGroupId
+                    AttendanceRecordQuery query = new AttendanceRecordQuery();
+                    query.setStaffId(attendanceRecordEntity.getStaffId());
+                    query.setShiftsId(attendanceRecordEntity.getShiftsId());
+                    query.setAttendanceGroupId(attendanceRecordEntity.getAttendanceGroupId());
+                    query.setAttendanceDate(attendanceRecordEntity.getAttendanceDate());
+
+                    AttendanceRecordEntity recordEntity = attendanceRecordService.selectOne(query);
+                    if (!ObjectUtils.isEmpty(recordEntity)) {
+                        attendanceRecordEntity.setId(recordEntity.getId());
+                        attendanceRecordEntity.setUpdateTime(new Date());
+                        attendanceRecordEntity.setUpdateUserId(this.getContextUserId(context));
+                        attendanceRecordService.update(attendanceRecordEntity, context);
+                    } else {
+                        attendanceRecordService.save(attendanceRecordEntity, context);
+                    }
+                }
+
+            }
+        }
+
+      /*  //map閬嶅巻.鍏堟妸鎵€鏈夐敭鍙栧嚭鏉�
         Set<String> workNumSet = listMap.keySet();
         //鏍规嵁閿彇鍑簐alue
         for (String workNum : workNumSet) {
@@ -119,7 +305,6 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
                         AttendanceGroupEntity attendanceGroupEntity = attendanceGroupService.selectOne(attendanceGroupQuery.id(attendanceGroupStaffEntities.get(0).getGroupId()));
                         attendanceRecordEntity.setAttendanceGroupId(attendanceGroupEntity.getId());
                         attendanceRecordEntity.setAttendanceGroupName(attendanceGroupEntity.getGroupName());
-
                         //log.info("attendanceGroupEntity.getId()=={}", attendanceGroupEntity.getId());
                         //鏌ヨ鑰冨嫟缁勮缁嗕俊鎭幏鍙栫彮娆�
                         AttendanceGroupFixedworkEntity attendanceGroupFixedworkEntity = attendanceGroupFixedworkService.selectOne(new AttendanceGroupFixedworkQuery()
@@ -455,17 +640,117 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
                         attendanceRecordService.save(attendanceRecordEntity, context);
                     }
                 }
-
             }
+        }*/
+    }
 
+    private void checkAttendGroupByOne(AttendanceRecordEntity attendanceRecordEntity, List<AttendanceRecordDetailEntity> detailEntityList, Date attendanceDate, AttendanceGroupStaffEntity attendanceGroupStaffEntity, Context context) {
+        //鏌ヨ鑰冨嫟缁�
+        AttendanceGroupEntity attendanceGroupEntity = attendanceGroupService.get(attendanceGroupStaffEntity.getGroupId(), context);
+        attendanceRecordEntity.setAttendanceGroupId(attendanceGroupEntity == null ? 0L : attendanceGroupEntity.getId());
+        attendanceRecordEntity.setAttendanceGroupName(attendanceGroupEntity == null ? "" : attendanceGroupEntity.getGroupName());
+        //鏌ヨ鑰冨嫟缁勮缁嗕俊鎭幏鍙栫彮娆�
+        AttendanceGroupFixedworkEntity attendanceGroupFixedworkEntity = attendanceGroupFixedworkService.selectOne(new AttendanceGroupFixedworkQuery()
+                .groupId(attendanceGroupEntity.getId()));
+        //鍒ゆ柇褰撳墠鑰冨嫟鏃ユ湡涓哄懆鍑�
+        String week = this.getWeek(attendanceDate);
+        //log.info("week:{}", week);
+        //閫氳繃鑰冨嫟鏃ユ湡鐨勬槦鏈熸嬁鍒扮彮娆d.
+        if (ObjectUtils.isEmpty(attendanceGroupFixedworkEntity)) {
+            log.info("attendanceGroupFixedworkEntity is null ! groupId:{}", attendanceGroupEntity.getId());
+            return;
+        }
+        Long weekClassId = this.getWeekClassId(attendanceGroupFixedworkEntity, week);
+        //log.info("weekClassId:{}", weekClassId);
+        //weekClassId涓�-1 鍒欎笉鍦ㄨ€冨嫟
+        if (weekClassId == -1L) {
+            //璺宠繃鏈寰幆
+            return;
+        }
+        //鑾峰彇鐝淇℃伅
+        AttendanceClassEntity attendanceClassEntity = attendanceClassService.get(weekClassId);
+        if (ObjectUtils.isEmpty(attendanceClassEntity)) {
+            log.info("attendanceClassEntity is null ,weekClassId:{}", weekClassId);
+            return;
+        }
+        //鑾峰彇鐝璇︾粏淇℃伅
+        List<AttendanceClassDetailEntity> attendanceClassDetailEntities = attendanceClassDetailService.find(new AttendanceClassDetailQuery().classId(attendanceClassEntity.getId()));
+        Integer orderNum = 0;
+        //鏋勯€犳暟鎹�
+        if (ObjectUtils.isEmpty(detailEntityList)) {
+            for (AttendanceClassDetailEntity classDetailEntity : attendanceClassDetailEntities) {
+                orderNum++;
+                AttendanceRecordDetailEntity recordDetailEntity = new AttendanceRecordDetailEntity();
+                recordDetailEntity.setShiftsId(classDetailEntity.getId());
+                recordDetailEntity.setShiftsName(classDetailEntity.getClassName());
+                recordDetailEntity.setGoWorkResult(GoWorkResultEnum.缂哄崱.getValue());
+                recordDetailEntity.setOffWorkResult(GoWorkResultEnum.缂哄崱.getValue());
+                recordDetailEntity.setOrderNum(orderNum);
+                detailEntityList.add(recordDetailEntity);
+            }
+        }
+        for (AttendanceClassDetailEntity classDetail : attendanceClassDetailEntities) {
+            //璁$畻鍖洪棿鑼冨洿
+            //涓婄彮鎵撳崱鍓嶆椂闂�
+            Date goWorkDateBefore = DateUtil.offsetMinute(classDetail.getGoWorkDate(), -classDetail.getGoWorkDateBefore());
+            //涓婄彮鎵撳崱鍚庢椂闂�
+            Date goWorkDateAfter = DateUtil.offsetMinute(classDetail.getGoWorkDate(), classDetail.getGoWorkDateAfter());
+            // 涓嬬彮鎵撳崱鍓嶆椂闂�
+            Date offWorkDateBefore = DateUtil.offsetMinute(classDetail.getOffWorkDate(), -classDetail.getOffWorkDateBefore());
+            //涓嬬彮鎵撳崱鍚庢椂闂�
+            Date offWorkDateAfter = DateUtil.offsetMinute(classDetail.getOffWorkDate(), classDetail.getOffWorkDateAfter());
+            //鍒ゆ柇鑰冨嫟鏃堕棿鏄惁鍦ㄤ笂鐝墦鍗″尯闂村唴  true 鍦� false 涓嶅湪
+            boolean goInTime = DateUtil.isIn(attendanceDate, goWorkDateBefore, goWorkDateAfter);
+            //鍒ゆ柇鑰冨嫟鏃堕棿鏄惁鍦ㄤ笅鐝墦鍗″尯闂村唴
+            boolean offInTime = DateUtil.isIn(attendanceDate, offWorkDateBefore, offWorkDateAfter);
+            if (goInTime == false && offInTime == false) {
+                log.info("鑰冨嫟鏃堕棿涓嶅湪涓婄彮鍖洪棿涓庝笅鐝尯闂翠腑锛屼笉鍋氬鐞嗭紒attendDate:{}", DateUtil.formatDateTime(attendanceDate));
+                continue;
+            }
+            if (goInTime) {
+                //濡傛灉鏄笂鐝墦鍗″尯闂磋寖鍥�,鍒ゆ柇鏄惁杩熷埌
+                boolean inTime = DateUtil.isIn(attendanceDate, goWorkDateBefore, classDetail.getGoWorkDate());
+                if (inTime) {
+                    for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntityList) {
+                        if (attendanceRecordDetailEntity.getShiftsId() == classDetail.getClassId()) {
+                            attendanceRecordDetailEntity.setGoWorkResult(GoWorkResultEnum.姝e父.getValue());
+                            attendanceRecordDetailEntity.setGoWorkDate(attendanceDate);
+                        }
+                    }
+                } else {
+                    for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntityList) {
+                        if (attendanceRecordDetailEntity.getShiftsId() == classDetail.getClassId()) {
+                            attendanceRecordDetailEntity.setGoWorkResult(GoWorkResultEnum.杩熷埌.getValue());
+                            attendanceRecordDetailEntity.setGoWorkDate(attendanceDate);
+                        }
+                    }
+                }
+            }
+            if (offInTime) {
+                boolean inTime = DateUtil.isIn(attendanceDate, classDetail.getOffWorkDate(), offWorkDateAfter);
+                if (inTime) {
+                    for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntityList) {
+                        if (attendanceRecordDetailEntity.getShiftsId().longValue() == classDetail.getId().longValue()) {
+                            attendanceRecordDetailEntity.setGoWorkResult(GoWorkResultEnum.姝e父.getValue());
+                            attendanceRecordDetailEntity.setGoWorkDate(attendanceDate);
+                        }
+                    }
+                } else {
+                    for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntityList) {
+                        if (attendanceRecordDetailEntity.getShiftsId().longValue() == classDetail.getId().longValue()) {
+                            attendanceRecordDetailEntity.setOffWorkResult(GoWorkResultEnum.鏃╅€€.getValue());
+                            attendanceRecordDetailEntity.setOffWorkDate(attendanceDate);
+                        }
+                    }
+                }
+            }
         }
     }
 
-    public String getWeek(Date date) {
 
+    public String getWeek(Date date) {
         // Get the day of the week (1 = Sunday, 2 = Monday, ..., 7 = Saturday)
         int dayOfWeek = DateUtil.dayOfWeek(date);
-
         // Map the numeric day of the week to its corresponding Chinese name
         String[] dayOfWeekNames = new String[]{
                 "鏄熸湡鏃�", "鏄熸湡涓€", "鏄熸湡浜�", "鏄熸湡涓�", "鏄熸湡鍥�", "鏄熸湡浜�", "鏄熸湡鍏�"
@@ -473,74 +758,8 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
         // Get the Chinese name of the day of the week
         String dayOfWeekName = dayOfWeekNames[dayOfWeek - 1];
         return dayOfWeekName;
-//
-//        SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
-//        String week = sdf.format(date);
-        //     return week;
     }
 
-    /**
-     * 鑾峰彇閫氳繃鏄熸湡鑾峰彇鐝id  濡傛灉杩斿弬涓�-1 鍒欎笉鍦ㄨ€冨嫟
-     *
-     * @return
-     */
-   /* public Long getWeekClassId(AttendanceGroupFixedworkEntity attendanceGroupFixedworkEntity, String week) {
-        Long weekClassId = 0L;
-        switch (week) {
-            case "鏄熸湡涓€":
-                if (attendanceGroupFixedworkEntity.getMonday() == 0) {
-                    weekClassId = -1L;
-                    return weekClassId;
-                }
-                weekClassId = attendanceGroupFixedworkEntity.getMondayClassId();
-                break;
-            case "鏄熸湡浜�":
-                if (attendanceGroupFixedworkEntity.getTuesday() == 0) {
-                    weekClassId = -1L;
-                    return weekClassId;
-                }
-                weekClassId = attendanceGroupFixedworkEntity.getTuesdayClassId();
-                break;
-            case "鏄熸湡涓�":
-                if (attendanceGroupFixedworkEntity.getWednesday() == 0) {
-                    weekClassId = -1L;
-                    return weekClassId;
-                }
-                weekClassId = attendanceGroupFixedworkEntity.getWednesdayClassId();
-                break;
-            case "鏄熸湡鍥�":
-                if (attendanceGroupFixedworkEntity.getThursday() == 0) {
-                    weekClassId = -1L;
-                    return weekClassId;
-                }
-                weekClassId = attendanceGroupFixedworkEntity.getThursdayClassId();
-                break;
-            case "鏄熸湡浜�":
-                if (attendanceGroupFixedworkEntity.getFriday() == 0) {
-                    weekClassId = -1L;
-                    return weekClassId;
-                }
-                weekClassId = attendanceGroupFixedworkEntity.getFridayClassId();
-                break;
-            case "鏄熸湡鍏�":
-                if (attendanceGroupFixedworkEntity.getSaturday() == 0) {
-                    weekClassId = -1L;
-                    return weekClassId;
-                }
-                weekClassId = attendanceGroupFixedworkEntity.getSaturdayClassId();
-                break;
-            case "鏄熸湡鏃�":
-                if (attendanceGroupFixedworkEntity.getSunday() == 0) {
-                    weekClassId = -1L;
-                    return weekClassId;
-                }
-                weekClassId = attendanceGroupFixedworkEntity.getSundayClassId();
-                break;
-        }
-        return weekClassId;
-    }*/
-
-
     /**
      * 鑾峰彇閫氳繃鏄熸湡鑾峰彇鐝id  濡傛灉杩斿弬涓�-1 鍒欎笉鍦ㄨ€冨嫟
      *
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceRecordHikController.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceRecordHikController.java
index 54f0567d7c20174164cea844464d38860dccd1d1..1e4958d6852eabed16170bbeded22abcf060cd73 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceRecordHikController.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceRecordHikController.java
@@ -127,7 +127,7 @@ public class AttendanceRecordHikController extends BaseCRUDJsonBodyMappingContro
             if (ObjectUtils.isEmpty(hikEntity.getAttendanceDateStart())) {
                 throw new AppException("璇烽€夋嫨寮€濮嬫棩鏈�");
             }
-            hikService.addAttendanceRecord(hikEntity, getContext());
+            hikService.addAttendanceRecordByQuery(hikEntity, getContext());
             model.put("message_info", busiDesc + "鎴愬姛");
             this.recordSysLog(this.request, busiDesc + " 銆愭垚鍔熴€�");
         } catch (Exception e) {
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceVacationBalanceController.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceVacationBalanceController.java
index 12d4cc8c2db11df45ce6f5e4aa33a5d4fb900f41..4fdbb049ba417065284b07c79e6cdeab3af61fbd 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceVacationBalanceController.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceVacationBalanceController.java
@@ -5,11 +5,14 @@ import com.mortals.xhx.base.system.param.service.ParamService;
 import com.mortals.xhx.common.code.AllHolidaysEnum;
 import com.mortals.xhx.module.attendance.model.AttendanceVacationBalanceEntity;
 import com.mortals.xhx.module.attendance.service.AttendanceVacationBalanceService;
+import com.mortals.xhx.module.dept.model.DeptQuery;
+import com.mortals.xhx.module.dept.service.DeptService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
 *
@@ -25,6 +28,9 @@ public class AttendanceVacationBalanceController extends BaseCRUDJsonBodyMapping
     @Autowired
     private ParamService paramService;
 
+    @Autowired
+    private DeptService deptService;
+
 
     public AttendanceVacationBalanceController(){
         super.setModuleDesc( "鍛樺伐鍋囨湡浣欓淇℃伅");
@@ -33,6 +39,7 @@ public class AttendanceVacationBalanceController extends BaseCRUDJsonBodyMapping
     @Override
     protected void init(Map<String, Object> model, Context context) {
         this.addDict(model,"AllHolidays",AllHolidaysEnum.getEnumMap());
+        this.addDict(model, "deptId", deptService.find(new DeptQuery()).stream().collect(Collectors.toMap(x -> x.getId().toString(), y -> y.getDeptName())));
         super.init(model, context);
     }
 
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/dept/model/DeptPerformStatEntity.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/dept/model/DeptPerformStatEntity.java
index 362183fe50bc018dd7248d1b31d837ea47f694ac..95e3b4945d550df5a6f1d8cd790d13b1f2861c0a 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/dept/model/DeptPerformStatEntity.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/dept/model/DeptPerformStatEntity.java
@@ -1,117 +1,115 @@
 package com.mortals.xhx.module.dept.model;
 import java.math.BigDecimal;
-import java.util.List;
-import java.util.ArrayList;
-import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+import cn.hutool.core.date.DateUtil;
 import com.mortals.framework.annotation.Excel;
-import com.mortals.framework.model.BaseEntityLong;
 import com.mortals.xhx.module.dept.model.vo.DeptPerformStatVo;
 import lombok.Data;
 /**
-* 閮ㄩ棬缁╂晥鍒嗘暟缁熻瀹炰綋瀵硅薄
-*
-* @author zxfei
-* @date 2023-07-14
-*/
+ * 閮ㄩ棬缁╂晥鍒嗘暟缁熻瀹炰綋瀵硅薄
+ *
+ * @author zxfei
+ * @date 2023-07-20
+ */
 @Data
 public class DeptPerformStatEntity extends DeptPerformStatVo {
     private static final long serialVersionUID = 1L;
 
     /**
-    * 閮ㄩ棬id鍙�
-    */
+     * 閮ㄩ棬id鍙�
+     */
     private Long deptId;
     /**
-    * 閮ㄩ棬鍚嶇О
-    */
+     * 閮ㄩ棬鍚嶇О
+     */
     private String deptName;
     /**
-    * 閮ㄩ棬缁╂晥鎬诲垎鏁�
-    */
+     * 閮ㄩ棬缁╂晥鎬诲垎鏁�
+     */
     @Excel(name = "閮ㄩ棬缁╂晥鎬诲垎鏁�")
     private BigDecimal totalScore;
     /**
-    * 閮ㄩ棬缁╂晥鍔犲垎鎬诲垎鏁版眹鎬�
-    */
+     * 閮ㄩ棬缁╂晥鍔犲垎鎬诲垎鏁版眹鎬�
+     */
     @Excel(name = "閮ㄩ棬缁╂晥鍔犲垎鎬诲垎鏁版眹鎬�")
     private BigDecimal totalAddScore;
     /**
-    * 閮ㄩ棬缁╂晥鍑忓垎鎬诲垎鏁版眹鎬�
-    */
+     * 閮ㄩ棬缁╂晥鍑忓垎鎬诲垎鏁版眹鎬�
+     */
     @Excel(name = "閮ㄩ棬缁╂晥鍑忓垎鎬诲垎鏁版眹鎬�")
     private BigDecimal totalSubScore;
     /**
-    * 鑰冨嫟缁╂晥鎸囨爣澧炲姞鍒嗘暟
-    */
+     * 鑰冨嫟缁╂晥鎸囨爣澧炲姞鍒嗘暟
+     */
     private BigDecimal attendScoreAdd;
     /**
-    * 鑰冨嫟缁╂晥鎸囨爣鎵e噺鍒嗘暟
-    */
+     * 鑰冨嫟缁╂晥鎸囨爣鎵e噺鍒嗘暟
+     */
     private BigDecimal attendScoreSub;
     /**
-    * 璇勪环缁╂晥鎸囨爣澧炲姞鍒嗘暟
-    */
+     * 璇勪环缁╂晥鎸囨爣澧炲姞鍒嗘暟
+     */
     private BigDecimal reviewScoreAdd;
     /**
-    * 璇勪环缁╂晥鎸囨爣鎵e噺鍒嗘暟
-    */
+     * 璇勪环缁╂晥鎸囨爣鎵e噺鍒嗘暟
+     */
     private BigDecimal reviewScoreSub;
     /**
-    * 鎶曡瘔缁╂晥鎸囨爣澧炲姞鍒嗘暟
-    */
+     * 鎶曡瘔缁╂晥鎸囨爣澧炲姞鍒嗘暟
+     */
     private BigDecimal complainScoreAdd;
     /**
-    * 鎶曡瘔缁╂晥鎸囨爣鎵e噺鍒嗘暟
-    */
+     * 鎶曡瘔缁╂晥鎸囨爣鎵e噺鍒嗘暟
+     */
     private BigDecimal complainScoreSub;
     /**
-    * 鍔炰欢缁╂晥鎸囨爣澧炲姞鍒嗘暟
-    */
+     * 鍔炰欢缁╂晥鎸囨爣澧炲姞鍒嗘暟
+     */
     private BigDecimal goworkScoreAdd;
     /**
-    * 鍔炰欢缁╂晥鎸囨爣鎵e噺鍒嗘暟
-    */
+     * 鍔炰欢缁╂晥鎸囨爣鎵e噺鍒嗘暟
+     */
     private BigDecimal goworkScoreSub;
     /**
-    * 鏁堣兘缁╂晥鎸囨爣澧炲姞鍒嗘暟
-    */
+     * 鏁堣兘缁╂晥鎸囨爣澧炲姞鍒嗘暟
+     */
     private BigDecimal effectScoreAdd;
     /**
-    * 鏁堣兘缁╂晥鎸囨爣鎵e噺鍒嗘暟
-    */
+     * 鏁堣兘缁╂晥鎸囨爣鎵e噺鍒嗘暟
+     */
     private BigDecimal effectScoreSub;
     /**
-    * 鍏跺畠缁╂晥鎸囨爣澧炲姞鍒嗘暟
-    */
+     * 鍏跺畠缁╂晥鎸囨爣澧炲姞鍒嗘暟
+     */
     private BigDecimal otherScoreAdd;
     /**
-    * 鍏跺畠缁╂晥鎸囨爣鎵e噺鍒嗘暟
-    */
+     * 鍏跺畠缁╂晥鎸囨爣鎵e噺鍒嗘暟
+     */
     private BigDecimal otherScoreSub;
     /**
-    * 閮ㄩ棬缁╂晥骞冲潎鍒嗘暟锛屾牴鎹儴闂ㄦ墍灞炰汉鏁板钩鍧�
-    */
+     * 閮ㄩ棬缁╂晥骞冲潎鍒嗘暟锛屾牴鎹儴闂ㄦ墍灞炰汉鏁板钩鍧�
+     */
     @Excel(name = "閮ㄩ棬缁╂晥骞冲潎鍒嗘暟锛屾牴鎹儴闂ㄦ墍灞炰汉鏁板钩鍧�")
     private BigDecimal averageScore;
     /**
-    * 澶囨敞
-    */
+     * 澶囨敞
+     */
     private String remark;
     /**
-    * 骞�
-    */
+     * 骞�
+     */
     private Integer year;
     /**
-    * 鏈�
-    */
+     * 鏈�
+     */
     private Integer month;
     /**
-    * 鏃�
-    */
+     * 鏃�
+     */
     private Integer day;
     @Override
     public int hashCode() {
-         return this.getId().hashCode();
+        return this.getId().hashCode();
     }
     @Override
     public boolean equals(Object obj) {
@@ -119,7 +117,7 @@ public class DeptPerformStatEntity extends DeptPerformStatVo {
         if (obj instanceof DeptPerformStatEntity) {
             DeptPerformStatEntity tmp = (DeptPerformStatEntity) obj;
             if (this.getId() == tmp.getId()) {
-                 return true;
+                return true;
             }
         }
         return false;
@@ -127,48 +125,48 @@ public class DeptPerformStatEntity extends DeptPerformStatVo {
 
     public void initAttrValue(){
 
-            this.deptId = 0L;
+        this.deptId = 0L;
 
-            this.deptName = "";
+        this.deptName = "";
 
-            this.totalScore = new BigDecimal(0);
+        this.totalScore = new BigDecimal(0);
 
-            this.totalAddScore = new BigDecimal(0);
+        this.totalAddScore = new BigDecimal(0);
 
-            this.totalSubScore = new BigDecimal(0);
+        this.totalSubScore = new BigDecimal(0);
 
-            this.attendScoreAdd = new BigDecimal(0);
+        this.attendScoreAdd = new BigDecimal(0);
 
-            this.attendScoreSub = new BigDecimal(0);
+        this.attendScoreSub = new BigDecimal(0);
 
-            this.reviewScoreAdd = new BigDecimal(0);
+        this.reviewScoreAdd = new BigDecimal(0);
 
-            this.reviewScoreSub = new BigDecimal(0);
+        this.reviewScoreSub = new BigDecimal(0);
 
-            this.complainScoreAdd = new BigDecimal(0);
+        this.complainScoreAdd = new BigDecimal(0);
 
-            this.complainScoreSub = new BigDecimal(0);
+        this.complainScoreSub = new BigDecimal(0);
 
-            this.goworkScoreAdd = new BigDecimal(0);
+        this.goworkScoreAdd = new BigDecimal(0);
 
-            this.goworkScoreSub = new BigDecimal(0);
+        this.goworkScoreSub = new BigDecimal(0);
 
-            this.effectScoreAdd = new BigDecimal(0);
+        this.effectScoreAdd = new BigDecimal(0);
 
-            this.effectScoreSub = new BigDecimal(0);
+        this.effectScoreSub = new BigDecimal(0);
 
-            this.otherScoreAdd = new BigDecimal(0);
+        this.otherScoreAdd = new BigDecimal(0);
 
-            this.otherScoreSub = new BigDecimal(0);
+        this.otherScoreSub = new BigDecimal(0);
 
-            this.averageScore = new BigDecimal(0);
+        this.averageScore = new BigDecimal(0);
 
-            this.remark = "";
+        this.remark = "";
 
-            this.year = -1;
+        this.year = DateUtil.year(new Date());
 
-            this.month = -1;
+        this.month = DateUtil.month(new Date())+1;
 
-            this.day = -1;
+        this.day = DateUtil.dayOfMonth(new Date());
     }
 }
\ No newline at end of file
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/personal/service/IDingPersonService.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/personal/service/IDingPersonService.java
index e65e57553208f730262963043ff652a5d4179d06..f4d9b3fa78b3a19cc125fe0dd0caca1f41ff8b4f 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/personal/service/IDingPersonService.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/personal/service/IDingPersonService.java
@@ -2,6 +2,7 @@ package com.mortals.xhx.module.dingding.personal.service;
 
 
 import com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponseBody;
+import com.dingtalk.api.response.OapiV2UserGetResponse;
 import com.mortals.framework.common.Rest;
 import com.mortals.xhx.module.dingding.IDingTalkService;
 import com.mortals.xhx.module.dingding.personal.model.req.workmsg.WorkMsgReq;
@@ -27,6 +28,14 @@ public interface IDingPersonService extends IDingTalkService {
      */
     Rest<String> getPersonByMobile(String mobile);
 
+    /**
+     * 鏍规嵁id鑾峰彇鐢ㄦ埛鐢佃瘽
+     *
+     * @param id
+     * @return
+             */
+    Rest<String> getPersonById(String id);
+
     /**
      * 鏍规嵁code鑾峰彇閽夐拤鐢ㄦ埛id
      *
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/personal/service/impl/DingPersonServiceImpl.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/personal/service/impl/DingPersonServiceImpl.java
index 28269336a444e3881b7c81d1f57ead4c968dde60..acf8136a7e6a3fca257ba8647338f8d2121c0b03 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/personal/service/impl/DingPersonServiceImpl.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/personal/service/impl/DingPersonServiceImpl.java
@@ -6,9 +6,11 @@ import com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponseBody;
 import com.aliyun.tea.TeaException;
 import com.dingtalk.api.DingTalkClient;
 import com.dingtalk.api.request.OapiMessageCorpconversationAsyncsendV2Request;
+import com.dingtalk.api.request.OapiV2UserGetRequest;
 import com.dingtalk.api.request.OapiV2UserGetbymobileRequest;
 import com.dingtalk.api.request.OapiV2UserGetuserinfoRequest;
 import com.dingtalk.api.response.OapiMessageCorpconversationAsyncsendV2Response;
+import com.dingtalk.api.response.OapiV2UserGetResponse;
 import com.dingtalk.api.response.OapiV2UserGetbymobileResponse;
 import com.dingtalk.api.response.OapiV2UserGetuserinfoResponse;
 import com.mortals.framework.common.Rest;
@@ -50,6 +52,26 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
         }
     }
 
+    @Override
+    public Rest<String> getPersonById(String id) {
+        try {
+            DingTalkClient client = getDingTalkClient("/topapi/v2/user/get");
+            OapiV2UserGetRequest req = new OapiV2UserGetRequest();
+            req.setUserid(id);   //鐢ㄦ埛id
+            log.info("getPersonByID:{}",id);
+            OapiV2UserGetResponse rsp = client.execute(req, getToken());
+            log.info("閽夐拤杩斿洖鐢ㄦ埛淇℃伅:{}", rsp.getBody());
+            if (rsp.getErrcode() == 0) {
+                return Rest.ok("鎴愬姛", rsp.getResult().getMobile());
+            } else {
+                return Rest.fail(String.format("code:%s,msg:%s", rsp.getErrcode(), rsp.getErrmsg()));
+            }
+        } catch (ApiException e) {
+            log.info("鏍规嵁鎵嬫満鍙风爜鏌ヨ浜哄憳寮傚父", e);
+            return Rest.fail(e.getMessage());
+        }
+    }
+
     @Override
     public Rest<String> getPersonByCode(String code) {
         try {
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/perform/web/PerformAttendAppealController.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/perform/web/PerformAttendAppealController.java
index d6536b576ba25367871e934cc4cf0812e79c62b0..1a5c3f528077d341c05c56e3d58ce4af1883fa04 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/perform/web/PerformAttendAppealController.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/perform/web/PerformAttendAppealController.java
@@ -12,6 +12,8 @@ import com.mortals.xhx.base.system.param.service.ParamService;
 import com.mortals.xhx.base.system.user.model.UserQuery;
 import com.mortals.xhx.base.system.user.service.UserService;
 import com.mortals.xhx.common.code.*;
+import com.mortals.xhx.module.dept.model.DeptQuery;
+import com.mortals.xhx.module.dept.service.DeptService;
 import com.mortals.xhx.module.perform.model.PerformRulesQuery;
 import com.mortals.xhx.module.perform.model.vo.AppealInfo;
 import com.mortals.xhx.module.perform.model.vo.AppealSummaryQuery;
@@ -65,6 +67,8 @@ public class PerformAttendAppealController extends BaseCRUDJsonBodyMappingContro
     private UserService userService;
     @Autowired
     private PerformRulesService rulesService;
+    @Autowired
+    private DeptService deptService;
 
 
     public PerformAttendAppealController() {
@@ -84,8 +88,9 @@ public class PerformAttendAppealController extends BaseCRUDJsonBodyMappingContro
         this.addDict(model, "reviewResult", paramService.getParamBySecondOrganize("PerformAttendAppeal", "reviewResult"));
         this.addDict(model, "reviewSource", paramService.getParamBySecondOrganize("PerformAttendAppeal", "reviewSource"));
         this.addDict(model, "irregularType", IrregularTypeEnum.getEnumMap());
-
         this.addDict(model, "irregularOtherType", IrregularOtherTypeEnum.getEnumMap());
+        this.addDict(model, "deptId", deptService.find(new DeptQuery()).stream().collect(Collectors.toMap(x -> x.getId().toString(), y -> y.getDeptName())));
+
         super.init(model, context);
     }