diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dao/AttendanceExportRecordDao.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dao/AttendanceExportRecordDao.java
new file mode 100644
index 0000000000000000000000000000000000000000..c9867c22193ded1a94ea469865aac8b940c6597f
--- /dev/null
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dao/AttendanceExportRecordDao.java
@@ -0,0 +1,17 @@
+package com.mortals.xhx.module.attendance.dao;
+
+import com.mortals.framework.dao.ICRUDDao;
+import com.mortals.xhx.module.attendance.model.AttendanceExportRecordEntity;
+import java.util.List;
+/**
+* 瀵煎叆瀵煎嚭璁板綍Dao
+* 瀵煎叆瀵煎嚭璁板綍 DAO鎺ュ彛
+*
+* @author zxfei
+* @date 2023-04-17
+*/
+
+public interface  AttendanceExportRecordDao extends ICRUDDao<AttendanceExportRecordEntity,Long>{
+
+
+}
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dao/ibatis/AttendanceExportRecordDaoImpl.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dao/ibatis/AttendanceExportRecordDaoImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..5a2fa2269cbcf92bea00f45f7f15c239be0aaf56
--- /dev/null
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dao/ibatis/AttendanceExportRecordDaoImpl.java
@@ -0,0 +1,21 @@
+package com.mortals.xhx.module.attendance.dao.ibatis;
+
+
+import org.springframework.stereotype.Repository;
+import com.mortals.xhx.module.attendance.dao.AttendanceExportRecordDao;
+import com.mortals.xhx.module.attendance.model.AttendanceExportRecordEntity;
+import java.util.Date;
+import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis;
+import java.util.List;
+/**
+* 瀵煎叆瀵煎嚭璁板綍DaoImpl DAO鎺ュ彛
+*
+* @author zxfei
+* @date 2023-04-17
+*/
+@Repository("attendanceExportRecordDao")
+public class AttendanceExportRecordDaoImpl extends BaseCRUDDaoMybatis<AttendanceExportRecordEntity,Long> implements AttendanceExportRecordDao {
+
+
+
+}
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/AttendanceExportRecordEntity.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/AttendanceExportRecordEntity.java
new file mode 100644
index 0000000000000000000000000000000000000000..786fd7644d1da0810e7ea8b9d04c63320ac9ff00
--- /dev/null
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/AttendanceExportRecordEntity.java
@@ -0,0 +1,239 @@
+package com.mortals.xhx.module.attendance.model;
+
+import java.util.List;
+import java.util.ArrayList;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.mortals.framework.annotation.Excel;
+import com.mortals.framework.model.BaseEntityLong;
+import com.mortals.xhx.module.attendance.model.vo.AttendanceExportRecordVo;
+/**
+ * 瀵煎叆瀵煎嚭璁板綍瀹炰綋瀵硅薄
+ *
+ * @author zxfei
+ * @date 2023-04-17
+ */
+
+public class AttendanceExportRecordEntity extends AttendanceExportRecordVo {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 閫夋嫨閮ㄩ棬鍚嶇О
+     */
+    private String deptName;
+    /**
+     * 閫夋嫨鑰冨嫟缁勫悕绉�
+     */
+    private String groupName;
+    /**
+     * 閫夋嫨鐝鍚嶇О
+     */
+    private String className;
+    /**
+     * 閫夋嫨寮€濮嬫椂闂村拰缁撴潫鏃堕棿娈�
+     */
+    private String attendanceDate;
+    /**
+     * 瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆)
+     */
+    private Integer exportOrImport;
+    /**
+     * 瀵煎嚭鏂囦欢璺緞
+     */
+    private String filePath;
+    /**
+     * 姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍)
+     */
+    private Integer type;
+    /**
+     * 澶囨敞
+     */
+    private String remark;
+    /**
+     * 閫夋嫨id鍒楄〃
+     */
+    private String recordIdList;
+
+
+
+    public AttendanceExportRecordEntity(){}
+    /**
+     * 鑾峰彇 閫夋嫨閮ㄩ棬鍚嶇О
+     * @return String
+     */
+    public String getDeptName(){
+        return deptName;
+    }
+    /**
+     * 璁剧疆 閫夋嫨閮ㄩ棬鍚嶇О
+     * @param deptName
+     */
+    public void setDeptName(String deptName){
+        this.deptName = deptName;
+    }
+    /**
+     * 鑾峰彇 閫夋嫨鑰冨嫟缁勫悕绉�
+     * @return String
+     */
+    public String getGroupName(){
+        return groupName;
+    }
+    /**
+     * 璁剧疆 閫夋嫨鑰冨嫟缁勫悕绉�
+     * @param groupName
+     */
+    public void setGroupName(String groupName){
+        this.groupName = groupName;
+    }
+    /**
+     * 鑾峰彇 閫夋嫨鐝鍚嶇О
+     * @return String
+     */
+    public String getClassName(){
+        return className;
+    }
+    /**
+     * 璁剧疆 閫夋嫨鐝鍚嶇О
+     * @param className
+     */
+    public void setClassName(String className){
+        this.className = className;
+    }
+    /**
+     * 鑾峰彇 閫夋嫨寮€濮嬫椂闂村拰缁撴潫鏃堕棿娈�
+     * @return String
+     */
+    public String getAttendanceDate(){
+        return attendanceDate;
+    }
+    /**
+     * 璁剧疆 閫夋嫨寮€濮嬫椂闂村拰缁撴潫鏃堕棿娈�
+     * @param attendanceDate
+     */
+    public void setAttendanceDate(String attendanceDate){
+        this.attendanceDate = attendanceDate;
+    }
+    /**
+     * 鑾峰彇 瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆)
+     * @return Integer
+     */
+    public Integer getExportOrImport(){
+        return exportOrImport;
+    }
+    /**
+     * 璁剧疆 瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆)
+     * @param exportOrImport
+     */
+    public void setExportOrImport(Integer exportOrImport){
+        this.exportOrImport = exportOrImport;
+    }
+    /**
+     * 鑾峰彇 瀵煎嚭鏂囦欢璺緞
+     * @return String
+     */
+    public String getFilePath(){
+        return filePath;
+    }
+    /**
+     * 璁剧疆 瀵煎嚭鏂囦欢璺緞
+     * @param filePath
+     */
+    public void setFilePath(String filePath){
+        this.filePath = filePath;
+    }
+    /**
+     * 鑾峰彇 姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍)
+     * @return Integer
+     */
+    public Integer getType(){
+        return type;
+    }
+    /**
+     * 璁剧疆 姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍)
+     * @param type
+     */
+    public void setType(Integer type){
+        this.type = type;
+    }
+    /**
+     * 鑾峰彇 澶囨敞
+     * @return String
+     */
+    public String getRemark(){
+        return remark;
+    }
+    /**
+     * 璁剧疆 澶囨敞
+     * @param remark
+     */
+    public void setRemark(String remark){
+        this.remark = remark;
+    }
+    /**
+     * 鑾峰彇 閫夋嫨id鍒楄〃
+     * @return String
+     */
+    public String getRecordIdList(){
+        return recordIdList;
+    }
+    /**
+     * 璁剧疆 閫夋嫨id鍒楄〃
+     * @param recordIdList
+     */
+    public void setRecordIdList(String recordIdList){
+        this.recordIdList = recordIdList;
+    }
+
+
+
+
+    @Override
+    public int hashCode() {
+        return this.getId().hashCode();
+    }
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) return false;
+        if (obj instanceof AttendanceExportRecordEntity) {
+            AttendanceExportRecordEntity tmp = (AttendanceExportRecordEntity) obj;
+            if (this.getId() == tmp.getId()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public String toString(){
+        StringBuilder sb = new StringBuilder("");
+        sb.append(",deptName:").append(getDeptName());
+        sb.append(",groupName:").append(getGroupName());
+        sb.append(",className:").append(getClassName());
+        sb.append(",attendanceDate:").append(getAttendanceDate());
+        sb.append(",exportOrImport:").append(getExportOrImport());
+        sb.append(",filePath:").append(getFilePath());
+        sb.append(",type:").append(getType());
+        sb.append(",remark:").append(getRemark());
+        sb.append(",recordIdList:").append(getRecordIdList());
+        return sb.toString();
+    }
+
+    public void initAttrValue(){
+
+        this.deptName = "";
+
+        this.groupName = "";
+
+        this.className = "";
+
+        this.attendanceDate = "";
+
+        this.exportOrImport = 1;
+
+        this.filePath = "";
+
+        this.type = 1;
+
+        this.remark = "";
+
+        this.recordIdList = "";
+    }
+}
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/AttendanceExportRecordQuery.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/AttendanceExportRecordQuery.java
new file mode 100644
index 0000000000000000000000000000000000000000..d30d79584393c509b5baf3f12c306d4d97d06720
--- /dev/null
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/AttendanceExportRecordQuery.java
@@ -0,0 +1,1272 @@
+package com.mortals.xhx.module.attendance.model;
+
+import java.util.List;
+import com.mortals.xhx.module.attendance.model.AttendanceExportRecordEntity;
+/**
+ * 瀵煎叆瀵煎嚭璁板綍鏌ヨ瀵硅薄
+ *
+ * @author zxfei
+ * @date 2023-04-17
+ */
+public class AttendanceExportRecordQuery extends AttendanceExportRecordEntity {
+    /** 寮€濮�  */
+    private Long idStart;
+
+    /** 缁撴潫  */
+    private Long idEnd;
+
+    /** 澧炲姞  */
+    private Long idIncrement;
+
+    /** 鍒楄〃 */
+    private List <Long> idList;
+
+    /** 鎺掗櫎鍒楄〃 */
+    private List <Long> idNotList;
+
+    /** 閫夋嫨閮ㄩ棬鍚嶇О */
+    private List<String> deptNameList;
+
+    /** 閫夋嫨閮ㄩ棬鍚嶇О鎺掗櫎鍒楄〃 */
+    private List <String> deptNameNotList;
+    /** 閫夋嫨鑰冨嫟缁勫悕绉� */
+    private List<String> groupNameList;
+
+    /** 閫夋嫨鑰冨嫟缁勫悕绉版帓闄ゅ垪琛� */
+    private List <String> groupNameNotList;
+    /** 閫夋嫨鐝鍚嶇О */
+    private List<String> classNameList;
+
+    /** 閫夋嫨鐝鍚嶇О鎺掗櫎鍒楄〃 */
+    private List <String> classNameNotList;
+    /** 閫夋嫨寮€濮嬫椂闂村拰缁撴潫鏃堕棿娈� */
+    private List<String> attendanceDateList;
+
+    /** 閫夋嫨寮€濮嬫椂闂村拰缁撴潫鏃堕棿娈垫帓闄ゅ垪琛� */
+    private List <String> attendanceDateNotList;
+    /** 寮€濮� 瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆) */
+    private Integer exportOrImportStart;
+
+    /** 缁撴潫 瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆) */
+    private Integer exportOrImportEnd;
+
+    /** 澧炲姞 瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆) */
+    private Integer exportOrImportIncrement;
+
+    /** 瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆)鍒楄〃 */
+    private List <Integer> exportOrImportList;
+
+    /** 瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆)鎺掗櫎鍒楄〃 */
+    private List <Integer> exportOrImportNotList;
+
+    /** 瀵煎嚭鏂囦欢璺緞 */
+    private List<String> filePathList;
+
+    /** 瀵煎嚭鏂囦欢璺緞鎺掗櫎鍒楄〃 */
+    private List <String> filePathNotList;
+    /** 寮€濮� 姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍) */
+    private Integer typeStart;
+
+    /** 缁撴潫 姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍) */
+    private Integer typeEnd;
+
+    /** 澧炲姞 姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍) */
+    private Integer typeIncrement;
+
+    /** 姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍)鍒楄〃 */
+    private List <Integer> typeList;
+
+    /** 姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍)鎺掗櫎鍒楄〃 */
+    private List <Integer> typeNotList;
+
+    /** 澶囨敞 */
+    private List<String> remarkList;
+
+    /** 澶囨敞鎺掗櫎鍒楄〃 */
+    private List <String> remarkNotList;
+    /** 寮€濮� 鍒涘缓鐢ㄦ埛 */
+    private Long createUserIdStart;
+
+    /** 缁撴潫 鍒涘缓鐢ㄦ埛 */
+    private Long createUserIdEnd;
+
+    /** 澧炲姞 鍒涘缓鐢ㄦ埛 */
+    private Long createUserIdIncrement;
+
+    /** 鍒涘缓鐢ㄦ埛鍒楄〃 */
+    private List <Long> createUserIdList;
+
+    /** 鍒涘缓鐢ㄦ埛鎺掗櫎鍒楄〃 */
+    private List <Long> createUserIdNotList;
+
+    /** 寮€濮� 鍒涘缓鏃堕棿 */
+    private String createTimeStart;
+
+    /** 缁撴潫 鍒涘缓鏃堕棿 */
+    private String createTimeEnd;
+
+    /** 寮€濮� 鏇存柊鐢ㄦ埛 */
+    private Long updateUserIdStart;
+
+    /** 缁撴潫 鏇存柊鐢ㄦ埛 */
+    private Long updateUserIdEnd;
+
+    /** 澧炲姞 鏇存柊鐢ㄦ埛 */
+    private Long updateUserIdIncrement;
+
+    /** 鏇存柊鐢ㄦ埛鍒楄〃 */
+    private List <Long> updateUserIdList;
+
+    /** 鏇存柊鐢ㄦ埛鎺掗櫎鍒楄〃 */
+    private List <Long> updateUserIdNotList;
+
+    /** 寮€濮� 鏇存柊鏃堕棿 */
+    private String updateTimeStart;
+
+    /** 缁撴潫 鏇存柊鏃堕棿 */
+    private String updateTimeEnd;
+
+    /** 閫夋嫨id鍒楄〃 */
+    private List<String> recordIdListList;
+
+    /** 閫夋嫨id鍒楄〃鎺掗櫎鍒楄〃 */
+    private List <String> recordIdListNotList;
+    /** OR鏉′欢闆嗗悎锛屽垪琛ㄩ」涔嬮棿鏄疧R锛岄」鍐呭涔嬮棿鏄疉ND锛屽锛�(list[0].1 and list[0].2) or (list[1].3 and list[1].4) */
+    private List<AttendanceExportRecordQuery> orConditionList;
+
+    /** AND鏉′欢闆嗗悎锛屽垪琛ㄩ」涔嬮棿鏄疉ND锛岄」鍐呭涔嬮棿鏄疧R锛屽锛�(list[0].1 or list[0].2) and (list[1].3 or list[1].4) */
+    private List<AttendanceExportRecordQuery> andConditionList;
+
+    public AttendanceExportRecordQuery(){}
+
+    /**
+     * 鑾峰彇 寮€濮�
+     * @return idStart
+     */
+    public Long getIdStart(){
+        return this.idStart;
+    }
+
+    /**
+     * 璁剧疆 寮€濮�
+     * @param idStart
+     */
+    public void setIdStart(Long idStart){
+        this.idStart = idStart;
+    }
+
+    /**
+     * 鑾峰彇 缁撴潫
+     * @return $idEnd
+     */
+    public Long getIdEnd(){
+        return this.idEnd;
+    }
+
+    /**
+     * 璁剧疆 缁撴潫
+     * @param idEnd
+     */
+    public void setIdEnd(Long idEnd){
+        this.idEnd = idEnd;
+    }
+
+    /**
+     * 鑾峰彇 澧炲姞
+     * @return idIncrement
+     */
+    public Long getIdIncrement(){
+        return this.idIncrement;
+    }
+
+    /**
+     * 璁剧疆 澧炲姞
+     * @param idIncrement
+     */
+    public void setIdIncrement(Long idIncrement){
+        this.idIncrement = idIncrement;
+    }
+
+    /**
+     * 鑾峰彇
+     * @return idList
+     */
+    public List<Long> getIdList(){
+        return this.idList;
+    }
+
+    /**
+     * 璁剧疆
+     * @param idList
+     */
+    public void setIdList(List<Long> idList){
+        this.idList = idList;
+    }
+
+    /**
+     * 鑾峰彇
+     * @return idNotList
+     */
+    public List<Long> getIdNotList(){
+        return this.idNotList;
+    }
+
+    /**
+     * 璁剧疆
+     * @param idNotList
+     */
+    public void setIdNotList(List<Long> idNotList){
+        this.idNotList = idNotList;
+    }
+
+
+    /**
+     * 鑾峰彇 閫夋嫨閮ㄩ棬鍚嶇О
+     * @return deptNameList
+     */
+    public List<String> getDeptNameList(){
+        return this.deptNameList;
+    }
+
+    /**
+     * 璁剧疆 閫夋嫨閮ㄩ棬鍚嶇О
+     * @param deptNameList
+     */
+    public void setDeptNameList(List<String> deptNameList){
+        this.deptNameList = deptNameList;
+    }
+
+    /**
+     * 鑾峰彇 閫夋嫨閮ㄩ棬鍚嶇О
+     * @return deptNameNotList
+     */
+    public List<String> getDeptNameNotList(){
+        return this.deptNameNotList;
+    }
+
+    /**
+     * 璁剧疆 閫夋嫨閮ㄩ棬鍚嶇О
+     * @param deptNameNotList
+     */
+    public void setDeptNameNotList(List<String> deptNameNotList){
+        this.deptNameNotList = deptNameNotList;
+    }
+
+    /**
+     * 鑾峰彇 閫夋嫨鑰冨嫟缁勫悕绉�
+     * @return groupNameList
+     */
+    public List<String> getGroupNameList(){
+        return this.groupNameList;
+    }
+
+    /**
+     * 璁剧疆 閫夋嫨鑰冨嫟缁勫悕绉�
+     * @param groupNameList
+     */
+    public void setGroupNameList(List<String> groupNameList){
+        this.groupNameList = groupNameList;
+    }
+
+    /**
+     * 鑾峰彇 閫夋嫨鑰冨嫟缁勫悕绉�
+     * @return groupNameNotList
+     */
+    public List<String> getGroupNameNotList(){
+        return this.groupNameNotList;
+    }
+
+    /**
+     * 璁剧疆 閫夋嫨鑰冨嫟缁勫悕绉�
+     * @param groupNameNotList
+     */
+    public void setGroupNameNotList(List<String> groupNameNotList){
+        this.groupNameNotList = groupNameNotList;
+    }
+
+    /**
+     * 鑾峰彇 閫夋嫨鐝鍚嶇О
+     * @return classNameList
+     */
+    public List<String> getClassNameList(){
+        return this.classNameList;
+    }
+
+    /**
+     * 璁剧疆 閫夋嫨鐝鍚嶇О
+     * @param classNameList
+     */
+    public void setClassNameList(List<String> classNameList){
+        this.classNameList = classNameList;
+    }
+
+    /**
+     * 鑾峰彇 閫夋嫨鐝鍚嶇О
+     * @return classNameNotList
+     */
+    public List<String> getClassNameNotList(){
+        return this.classNameNotList;
+    }
+
+    /**
+     * 璁剧疆 閫夋嫨鐝鍚嶇О
+     * @param classNameNotList
+     */
+    public void setClassNameNotList(List<String> classNameNotList){
+        this.classNameNotList = classNameNotList;
+    }
+
+    /**
+     * 鑾峰彇 閫夋嫨寮€濮嬫椂闂村拰缁撴潫鏃堕棿娈�
+     * @return attendanceDateList
+     */
+    public List<String> getAttendanceDateList(){
+        return this.attendanceDateList;
+    }
+
+    /**
+     * 璁剧疆 閫夋嫨寮€濮嬫椂闂村拰缁撴潫鏃堕棿娈�
+     * @param attendanceDateList
+     */
+    public void setAttendanceDateList(List<String> attendanceDateList){
+        this.attendanceDateList = attendanceDateList;
+    }
+
+    /**
+     * 鑾峰彇 閫夋嫨寮€濮嬫椂闂村拰缁撴潫鏃堕棿娈�
+     * @return attendanceDateNotList
+     */
+    public List<String> getAttendanceDateNotList(){
+        return this.attendanceDateNotList;
+    }
+
+    /**
+     * 璁剧疆 閫夋嫨寮€濮嬫椂闂村拰缁撴潫鏃堕棿娈�
+     * @param attendanceDateNotList
+     */
+    public void setAttendanceDateNotList(List<String> attendanceDateNotList){
+        this.attendanceDateNotList = attendanceDateNotList;
+    }
+
+    /**
+     * 鑾峰彇 寮€濮� 瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆)
+     * @return exportOrImportStart
+     */
+    public Integer getExportOrImportStart(){
+        return this.exportOrImportStart;
+    }
+
+    /**
+     * 璁剧疆 寮€濮� 瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆)
+     * @param exportOrImportStart
+     */
+    public void setExportOrImportStart(Integer exportOrImportStart){
+        this.exportOrImportStart = exportOrImportStart;
+    }
+
+    /**
+     * 鑾峰彇 缁撴潫 瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆)
+     * @return $exportOrImportEnd
+     */
+    public Integer getExportOrImportEnd(){
+        return this.exportOrImportEnd;
+    }
+
+    /**
+     * 璁剧疆 缁撴潫 瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆)
+     * @param exportOrImportEnd
+     */
+    public void setExportOrImportEnd(Integer exportOrImportEnd){
+        this.exportOrImportEnd = exportOrImportEnd;
+    }
+
+    /**
+     * 鑾峰彇 澧炲姞 瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆)
+     * @return exportOrImportIncrement
+     */
+    public Integer getExportOrImportIncrement(){
+        return this.exportOrImportIncrement;
+    }
+
+    /**
+     * 璁剧疆 澧炲姞 瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆)
+     * @param exportOrImportIncrement
+     */
+    public void setExportOrImportIncrement(Integer exportOrImportIncrement){
+        this.exportOrImportIncrement = exportOrImportIncrement;
+    }
+
+    /**
+     * 鑾峰彇 瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆)
+     * @return exportOrImportList
+     */
+    public List<Integer> getExportOrImportList(){
+        return this.exportOrImportList;
+    }
+
+    /**
+     * 璁剧疆 瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆)
+     * @param exportOrImportList
+     */
+    public void setExportOrImportList(List<Integer> exportOrImportList){
+        this.exportOrImportList = exportOrImportList;
+    }
+
+    /**
+     * 鑾峰彇 瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆)
+     * @return exportOrImportNotList
+     */
+    public List<Integer> getExportOrImportNotList(){
+        return this.exportOrImportNotList;
+    }
+
+    /**
+     * 璁剧疆 瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆)
+     * @param exportOrImportNotList
+     */
+    public void setExportOrImportNotList(List<Integer> exportOrImportNotList){
+        this.exportOrImportNotList = exportOrImportNotList;
+    }
+
+
+    /**
+     * 鑾峰彇 瀵煎嚭鏂囦欢璺緞
+     * @return filePathList
+     */
+    public List<String> getFilePathList(){
+        return this.filePathList;
+    }
+
+    /**
+     * 璁剧疆 瀵煎嚭鏂囦欢璺緞
+     * @param filePathList
+     */
+    public void setFilePathList(List<String> filePathList){
+        this.filePathList = filePathList;
+    }
+
+    /**
+     * 鑾峰彇 瀵煎嚭鏂囦欢璺緞
+     * @return filePathNotList
+     */
+    public List<String> getFilePathNotList(){
+        return this.filePathNotList;
+    }
+
+    /**
+     * 璁剧疆 瀵煎嚭鏂囦欢璺緞
+     * @param filePathNotList
+     */
+    public void setFilePathNotList(List<String> filePathNotList){
+        this.filePathNotList = filePathNotList;
+    }
+
+    /**
+     * 鑾峰彇 寮€濮� 姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍)
+     * @return typeStart
+     */
+    public Integer getTypeStart(){
+        return this.typeStart;
+    }
+
+    /**
+     * 璁剧疆 寮€濮� 姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍)
+     * @param typeStart
+     */
+    public void setTypeStart(Integer typeStart){
+        this.typeStart = typeStart;
+    }
+
+    /**
+     * 鑾峰彇 缁撴潫 姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍)
+     * @return $typeEnd
+     */
+    public Integer getTypeEnd(){
+        return this.typeEnd;
+    }
+
+    /**
+     * 璁剧疆 缁撴潫 姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍)
+     * @param typeEnd
+     */
+    public void setTypeEnd(Integer typeEnd){
+        this.typeEnd = typeEnd;
+    }
+
+    /**
+     * 鑾峰彇 澧炲姞 姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍)
+     * @return typeIncrement
+     */
+    public Integer getTypeIncrement(){
+        return this.typeIncrement;
+    }
+
+    /**
+     * 璁剧疆 澧炲姞 姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍)
+     * @param typeIncrement
+     */
+    public void setTypeIncrement(Integer typeIncrement){
+        this.typeIncrement = typeIncrement;
+    }
+
+    /**
+     * 鑾峰彇 姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍)
+     * @return typeList
+     */
+    public List<Integer> getTypeList(){
+        return this.typeList;
+    }
+
+    /**
+     * 璁剧疆 姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍)
+     * @param typeList
+     */
+    public void setTypeList(List<Integer> typeList){
+        this.typeList = typeList;
+    }
+
+    /**
+     * 鑾峰彇 姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍)
+     * @return typeNotList
+     */
+    public List<Integer> getTypeNotList(){
+        return this.typeNotList;
+    }
+
+    /**
+     * 璁剧疆 姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍)
+     * @param typeNotList
+     */
+    public void setTypeNotList(List<Integer> typeNotList){
+        this.typeNotList = typeNotList;
+    }
+
+
+    /**
+     * 鑾峰彇 澶囨敞
+     * @return remarkList
+     */
+    public List<String> getRemarkList(){
+        return this.remarkList;
+    }
+
+    /**
+     * 璁剧疆 澶囨敞
+     * @param remarkList
+     */
+    public void setRemarkList(List<String> remarkList){
+        this.remarkList = remarkList;
+    }
+
+    /**
+     * 鑾峰彇 澶囨敞
+     * @return remarkNotList
+     */
+    public List<String> getRemarkNotList(){
+        return this.remarkNotList;
+    }
+
+    /**
+     * 璁剧疆 澶囨敞
+     * @param remarkNotList
+     */
+    public void setRemarkNotList(List<String> remarkNotList){
+        this.remarkNotList = remarkNotList;
+    }
+
+    /**
+     * 鑾峰彇 寮€濮� 鍒涘缓鐢ㄦ埛
+     * @return createUserIdStart
+     */
+    public Long getCreateUserIdStart(){
+        return this.createUserIdStart;
+    }
+
+    /**
+     * 璁剧疆 寮€濮� 鍒涘缓鐢ㄦ埛
+     * @param createUserIdStart
+     */
+    public void setCreateUserIdStart(Long createUserIdStart){
+        this.createUserIdStart = createUserIdStart;
+    }
+
+    /**
+     * 鑾峰彇 缁撴潫 鍒涘缓鐢ㄦ埛
+     * @return $createUserIdEnd
+     */
+    public Long getCreateUserIdEnd(){
+        return this.createUserIdEnd;
+    }
+
+    /**
+     * 璁剧疆 缁撴潫 鍒涘缓鐢ㄦ埛
+     * @param createUserIdEnd
+     */
+    public void setCreateUserIdEnd(Long createUserIdEnd){
+        this.createUserIdEnd = createUserIdEnd;
+    }
+
+    /**
+     * 鑾峰彇 澧炲姞 鍒涘缓鐢ㄦ埛
+     * @return createUserIdIncrement
+     */
+    public Long getCreateUserIdIncrement(){
+        return this.createUserIdIncrement;
+    }
+
+    /**
+     * 璁剧疆 澧炲姞 鍒涘缓鐢ㄦ埛
+     * @param createUserIdIncrement
+     */
+    public void setCreateUserIdIncrement(Long createUserIdIncrement){
+        this.createUserIdIncrement = createUserIdIncrement;
+    }
+
+    /**
+     * 鑾峰彇 鍒涘缓鐢ㄦ埛
+     * @return createUserIdList
+     */
+    public List<Long> getCreateUserIdList(){
+        return this.createUserIdList;
+    }
+
+    /**
+     * 璁剧疆 鍒涘缓鐢ㄦ埛
+     * @param createUserIdList
+     */
+    public void setCreateUserIdList(List<Long> createUserIdList){
+        this.createUserIdList = createUserIdList;
+    }
+
+    /**
+     * 鑾峰彇 鍒涘缓鐢ㄦ埛
+     * @return createUserIdNotList
+     */
+    public List<Long> getCreateUserIdNotList(){
+        return this.createUserIdNotList;
+    }
+
+    /**
+     * 璁剧疆 鍒涘缓鐢ㄦ埛
+     * @param createUserIdNotList
+     */
+    public void setCreateUserIdNotList(List<Long> createUserIdNotList){
+        this.createUserIdNotList = createUserIdNotList;
+    }
+
+
+    /**
+     * 鑾峰彇 寮€濮� 鍒涘缓鏃堕棿
+     * @return createTimeStart
+     */
+    public String getCreateTimeStart(){
+        return this.createTimeStart;
+    }
+
+    /**
+     * 璁剧疆 寮€濮� 鍒涘缓鏃堕棿
+     * @param createTimeStart
+     */
+    public void setCreateTimeStart(String createTimeStart){
+        this.createTimeStart = createTimeStart;
+    }
+
+    /**
+     * 鑾峰彇 缁撴潫 鍒涘缓鏃堕棿
+     * @return createTimeEnd
+     */
+    public String getCreateTimeEnd(){
+        return this.createTimeEnd;
+    }
+
+    /**
+     * 璁剧疆 缁撴潫 鍒涘缓鏃堕棿
+     * @param createTimeEnd
+     */
+    public void setCreateTimeEnd(String createTimeEnd){
+        this.createTimeEnd = createTimeEnd;
+    }
+
+    /**
+     * 鑾峰彇 寮€濮� 鏇存柊鐢ㄦ埛
+     * @return updateUserIdStart
+     */
+    public Long getUpdateUserIdStart(){
+        return this.updateUserIdStart;
+    }
+
+    /**
+     * 璁剧疆 寮€濮� 鏇存柊鐢ㄦ埛
+     * @param updateUserIdStart
+     */
+    public void setUpdateUserIdStart(Long updateUserIdStart){
+        this.updateUserIdStart = updateUserIdStart;
+    }
+
+    /**
+     * 鑾峰彇 缁撴潫 鏇存柊鐢ㄦ埛
+     * @return $updateUserIdEnd
+     */
+    public Long getUpdateUserIdEnd(){
+        return this.updateUserIdEnd;
+    }
+
+    /**
+     * 璁剧疆 缁撴潫 鏇存柊鐢ㄦ埛
+     * @param updateUserIdEnd
+     */
+    public void setUpdateUserIdEnd(Long updateUserIdEnd){
+        this.updateUserIdEnd = updateUserIdEnd;
+    }
+
+    /**
+     * 鑾峰彇 澧炲姞 鏇存柊鐢ㄦ埛
+     * @return updateUserIdIncrement
+     */
+    public Long getUpdateUserIdIncrement(){
+        return this.updateUserIdIncrement;
+    }
+
+    /**
+     * 璁剧疆 澧炲姞 鏇存柊鐢ㄦ埛
+     * @param updateUserIdIncrement
+     */
+    public void setUpdateUserIdIncrement(Long updateUserIdIncrement){
+        this.updateUserIdIncrement = updateUserIdIncrement;
+    }
+
+    /**
+     * 鑾峰彇 鏇存柊鐢ㄦ埛
+     * @return updateUserIdList
+     */
+    public List<Long> getUpdateUserIdList(){
+        return this.updateUserIdList;
+    }
+
+    /**
+     * 璁剧疆 鏇存柊鐢ㄦ埛
+     * @param updateUserIdList
+     */
+    public void setUpdateUserIdList(List<Long> updateUserIdList){
+        this.updateUserIdList = updateUserIdList;
+    }
+
+    /**
+     * 鑾峰彇 鏇存柊鐢ㄦ埛
+     * @return updateUserIdNotList
+     */
+    public List<Long> getUpdateUserIdNotList(){
+        return this.updateUserIdNotList;
+    }
+
+    /**
+     * 璁剧疆 鏇存柊鐢ㄦ埛
+     * @param updateUserIdNotList
+     */
+    public void setUpdateUserIdNotList(List<Long> updateUserIdNotList){
+        this.updateUserIdNotList = updateUserIdNotList;
+    }
+
+
+    /**
+     * 鑾峰彇 寮€濮� 鏇存柊鏃堕棿
+     * @return updateTimeStart
+     */
+    public String getUpdateTimeStart(){
+        return this.updateTimeStart;
+    }
+
+    /**
+     * 璁剧疆 寮€濮� 鏇存柊鏃堕棿
+     * @param updateTimeStart
+     */
+    public void setUpdateTimeStart(String updateTimeStart){
+        this.updateTimeStart = updateTimeStart;
+    }
+
+    /**
+     * 鑾峰彇 缁撴潫 鏇存柊鏃堕棿
+     * @return updateTimeEnd
+     */
+    public String getUpdateTimeEnd(){
+        return this.updateTimeEnd;
+    }
+
+    /**
+     * 璁剧疆 缁撴潫 鏇存柊鏃堕棿
+     * @param updateTimeEnd
+     */
+    public void setUpdateTimeEnd(String updateTimeEnd){
+        this.updateTimeEnd = updateTimeEnd;
+    }
+
+    /**
+     * 鑾峰彇 閫夋嫨id鍒楄〃
+     * @return recordIdListList
+     */
+    public List<String> getRecordIdListList(){
+        return this.recordIdListList;
+    }
+
+    /**
+     * 璁剧疆 閫夋嫨id鍒楄〃
+     * @param recordIdListList
+     */
+    public void setRecordIdListList(List<String> recordIdListList){
+        this.recordIdListList = recordIdListList;
+    }
+
+    /**
+     * 鑾峰彇 閫夋嫨id鍒楄〃
+     * @return recordIdListNotList
+     */
+    public List<String> getRecordIdListNotList(){
+        return this.recordIdListNotList;
+    }
+
+    /**
+     * 璁剧疆 閫夋嫨id鍒楄〃
+     * @param recordIdListNotList
+     */
+    public void setRecordIdListNotList(List<String> recordIdListNotList){
+        this.recordIdListNotList = recordIdListNotList;
+    }
+
+    /**
+     * 璁剧疆
+     * @param id
+     */
+    public AttendanceExportRecordQuery id(Long id){
+        setId(id);
+        return this;
+    }
+
+    /**
+     * 璁剧疆 寮€濮�
+     * @param idStart
+     */
+    public AttendanceExportRecordQuery idStart(Long idStart){
+        this.idStart = idStart;
+        return this;
+    }
+
+    /**
+     * 璁剧疆 缁撴潫
+     * @param idEnd
+     */
+    public AttendanceExportRecordQuery idEnd(Long idEnd){
+        this.idEnd = idEnd;
+        return this;
+    }
+
+    /**
+     * 璁剧疆 澧炲姞
+     * @param idIncrement
+     */
+    public AttendanceExportRecordQuery idIncrement(Long idIncrement){
+        this.idIncrement = idIncrement;
+        return this;
+    }
+
+    /**
+     * 璁剧疆
+     * @param idList
+     */
+    public AttendanceExportRecordQuery idList(List<Long> idList){
+        this.idList = idList;
+        return this;
+    }
+
+    /**
+     * 璁剧疆
+     * @param idNotList
+     */
+    public AttendanceExportRecordQuery idNotList(List<Long> idNotList){
+        this.idNotList = idNotList;
+        return this;
+    }
+
+
+    /**
+     * 璁剧疆 閫夋嫨閮ㄩ棬鍚嶇О
+     * @param deptName
+     */
+    public AttendanceExportRecordQuery deptName(String deptName){
+        setDeptName(deptName);
+        return this;
+    }
+
+    /**
+     * 璁剧疆 閫夋嫨閮ㄩ棬鍚嶇О
+     * @param deptNameList
+     */
+    public AttendanceExportRecordQuery deptNameList(List<String> deptNameList){
+        this.deptNameList = deptNameList;
+        return this;
+    }
+
+
+    /**
+     * 璁剧疆 閫夋嫨鑰冨嫟缁勫悕绉�
+     * @param groupName
+     */
+    public AttendanceExportRecordQuery groupName(String groupName){
+        setGroupName(groupName);
+        return this;
+    }
+
+    /**
+     * 璁剧疆 閫夋嫨鑰冨嫟缁勫悕绉�
+     * @param groupNameList
+     */
+    public AttendanceExportRecordQuery groupNameList(List<String> groupNameList){
+        this.groupNameList = groupNameList;
+        return this;
+    }
+
+
+    /**
+     * 璁剧疆 閫夋嫨鐝鍚嶇О
+     * @param className
+     */
+    public AttendanceExportRecordQuery className(String className){
+        setClassName(className);
+        return this;
+    }
+
+    /**
+     * 璁剧疆 閫夋嫨鐝鍚嶇О
+     * @param classNameList
+     */
+    public AttendanceExportRecordQuery classNameList(List<String> classNameList){
+        this.classNameList = classNameList;
+        return this;
+    }
+
+
+    /**
+     * 璁剧疆 閫夋嫨寮€濮嬫椂闂村拰缁撴潫鏃堕棿娈�
+     * @param attendanceDate
+     */
+    public AttendanceExportRecordQuery attendanceDate(String attendanceDate){
+        setAttendanceDate(attendanceDate);
+        return this;
+    }
+
+    /**
+     * 璁剧疆 閫夋嫨寮€濮嬫椂闂村拰缁撴潫鏃堕棿娈�
+     * @param attendanceDateList
+     */
+    public AttendanceExportRecordQuery attendanceDateList(List<String> attendanceDateList){
+        this.attendanceDateList = attendanceDateList;
+        return this;
+    }
+
+    /**
+     * 璁剧疆  瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆)
+     * @param exportOrImport
+     */
+    public AttendanceExportRecordQuery exportOrImport(Integer exportOrImport){
+        setExportOrImport(exportOrImport);
+        return this;
+    }
+
+    /**
+     * 璁剧疆 寮€濮� 瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆)
+     * @param exportOrImportStart
+     */
+    public AttendanceExportRecordQuery exportOrImportStart(Integer exportOrImportStart){
+        this.exportOrImportStart = exportOrImportStart;
+        return this;
+    }
+
+    /**
+     * 璁剧疆 缁撴潫 瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆)
+     * @param exportOrImportEnd
+     */
+    public AttendanceExportRecordQuery exportOrImportEnd(Integer exportOrImportEnd){
+        this.exportOrImportEnd = exportOrImportEnd;
+        return this;
+    }
+
+    /**
+     * 璁剧疆 澧炲姞 瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆)
+     * @param exportOrImportIncrement
+     */
+    public AttendanceExportRecordQuery exportOrImportIncrement(Integer exportOrImportIncrement){
+        this.exportOrImportIncrement = exportOrImportIncrement;
+        return this;
+    }
+
+    /**
+     * 璁剧疆 瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆)
+     * @param exportOrImportList
+     */
+    public AttendanceExportRecordQuery exportOrImportList(List<Integer> exportOrImportList){
+        this.exportOrImportList = exportOrImportList;
+        return this;
+    }
+
+    /**
+     * 璁剧疆 瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆)
+     * @param exportOrImportNotList
+     */
+    public AttendanceExportRecordQuery exportOrImportNotList(List<Integer> exportOrImportNotList){
+        this.exportOrImportNotList = exportOrImportNotList;
+        return this;
+    }
+
+
+    /**
+     * 璁剧疆 瀵煎嚭鏂囦欢璺緞
+     * @param filePath
+     */
+    public AttendanceExportRecordQuery filePath(String filePath){
+        setFilePath(filePath);
+        return this;
+    }
+
+    /**
+     * 璁剧疆 瀵煎嚭鏂囦欢璺緞
+     * @param filePathList
+     */
+    public AttendanceExportRecordQuery filePathList(List<String> filePathList){
+        this.filePathList = filePathList;
+        return this;
+    }
+
+    /**
+     * 璁剧疆  姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍)
+     * @param type
+     */
+    public AttendanceExportRecordQuery type(Integer type){
+        setType(type);
+        return this;
+    }
+
+    /**
+     * 璁剧疆 寮€濮� 姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍)
+     * @param typeStart
+     */
+    public AttendanceExportRecordQuery typeStart(Integer typeStart){
+        this.typeStart = typeStart;
+        return this;
+    }
+
+    /**
+     * 璁剧疆 缁撴潫 姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍)
+     * @param typeEnd
+     */
+    public AttendanceExportRecordQuery typeEnd(Integer typeEnd){
+        this.typeEnd = typeEnd;
+        return this;
+    }
+
+    /**
+     * 璁剧疆 澧炲姞 姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍)
+     * @param typeIncrement
+     */
+    public AttendanceExportRecordQuery typeIncrement(Integer typeIncrement){
+        this.typeIncrement = typeIncrement;
+        return this;
+    }
+
+    /**
+     * 璁剧疆 姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍)
+     * @param typeList
+     */
+    public AttendanceExportRecordQuery typeList(List<Integer> typeList){
+        this.typeList = typeList;
+        return this;
+    }
+
+    /**
+     * 璁剧疆 姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍)
+     * @param typeNotList
+     */
+    public AttendanceExportRecordQuery typeNotList(List<Integer> typeNotList){
+        this.typeNotList = typeNotList;
+        return this;
+    }
+
+
+    /**
+     * 璁剧疆 澶囨敞
+     * @param remark
+     */
+    public AttendanceExportRecordQuery remark(String remark){
+        setRemark(remark);
+        return this;
+    }
+
+    /**
+     * 璁剧疆 澶囨敞
+     * @param remarkList
+     */
+    public AttendanceExportRecordQuery remarkList(List<String> remarkList){
+        this.remarkList = remarkList;
+        return this;
+    }
+
+    /**
+     * 璁剧疆  鍒涘缓鐢ㄦ埛
+     * @param createUserId
+     */
+    public AttendanceExportRecordQuery createUserId(Long createUserId){
+        setCreateUserId(createUserId);
+        return this;
+    }
+
+    /**
+     * 璁剧疆 寮€濮� 鍒涘缓鐢ㄦ埛
+     * @param createUserIdStart
+     */
+    public AttendanceExportRecordQuery createUserIdStart(Long createUserIdStart){
+        this.createUserIdStart = createUserIdStart;
+        return this;
+    }
+
+    /**
+     * 璁剧疆 缁撴潫 鍒涘缓鐢ㄦ埛
+     * @param createUserIdEnd
+     */
+    public AttendanceExportRecordQuery createUserIdEnd(Long createUserIdEnd){
+        this.createUserIdEnd = createUserIdEnd;
+        return this;
+    }
+
+    /**
+     * 璁剧疆 澧炲姞 鍒涘缓鐢ㄦ埛
+     * @param createUserIdIncrement
+     */
+    public AttendanceExportRecordQuery createUserIdIncrement(Long createUserIdIncrement){
+        this.createUserIdIncrement = createUserIdIncrement;
+        return this;
+    }
+
+    /**
+     * 璁剧疆 鍒涘缓鐢ㄦ埛
+     * @param createUserIdList
+     */
+    public AttendanceExportRecordQuery createUserIdList(List<Long> createUserIdList){
+        this.createUserIdList = createUserIdList;
+        return this;
+    }
+
+    /**
+     * 璁剧疆 鍒涘缓鐢ㄦ埛
+     * @param createUserIdNotList
+     */
+    public AttendanceExportRecordQuery createUserIdNotList(List<Long> createUserIdNotList){
+        this.createUserIdNotList = createUserIdNotList;
+        return this;
+    }
+
+
+    /**
+     * 璁剧疆  鏇存柊鐢ㄦ埛
+     * @param updateUserId
+     */
+    public AttendanceExportRecordQuery updateUserId(Long updateUserId){
+        setUpdateUserId(updateUserId);
+        return this;
+    }
+
+    /**
+     * 璁剧疆 寮€濮� 鏇存柊鐢ㄦ埛
+     * @param updateUserIdStart
+     */
+    public AttendanceExportRecordQuery updateUserIdStart(Long updateUserIdStart){
+        this.updateUserIdStart = updateUserIdStart;
+        return this;
+    }
+
+    /**
+     * 璁剧疆 缁撴潫 鏇存柊鐢ㄦ埛
+     * @param updateUserIdEnd
+     */
+    public AttendanceExportRecordQuery updateUserIdEnd(Long updateUserIdEnd){
+        this.updateUserIdEnd = updateUserIdEnd;
+        return this;
+    }
+
+    /**
+     * 璁剧疆 澧炲姞 鏇存柊鐢ㄦ埛
+     * @param updateUserIdIncrement
+     */
+    public AttendanceExportRecordQuery updateUserIdIncrement(Long updateUserIdIncrement){
+        this.updateUserIdIncrement = updateUserIdIncrement;
+        return this;
+    }
+
+    /**
+     * 璁剧疆 鏇存柊鐢ㄦ埛
+     * @param updateUserIdList
+     */
+    public AttendanceExportRecordQuery updateUserIdList(List<Long> updateUserIdList){
+        this.updateUserIdList = updateUserIdList;
+        return this;
+    }
+
+    /**
+     * 璁剧疆 鏇存柊鐢ㄦ埛
+     * @param updateUserIdNotList
+     */
+    public AttendanceExportRecordQuery updateUserIdNotList(List<Long> updateUserIdNotList){
+        this.updateUserIdNotList = updateUserIdNotList;
+        return this;
+    }
+
+
+
+    /**
+     * 璁剧疆 閫夋嫨id鍒楄〃
+     * @param recordIdList
+     */
+    public AttendanceExportRecordQuery recordIdList(String recordIdList){
+        setRecordIdList(recordIdList);
+        return this;
+    }
+
+    /**
+     * 璁剧疆 閫夋嫨id鍒楄〃
+     * @param recordIdListList
+     */
+    public AttendanceExportRecordQuery recordIdListList(List<String> recordIdListList){
+        this.recordIdListList = recordIdListList;
+        return this;
+    }
+
+    /**
+     * 鑾峰彇 OR鏉′欢闆嗗悎锛屽垪琛ㄩ」涔嬮棿鏄疧R锛岄」鍐呭涔嬮棿鏄疉ND锛屽锛�(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
+     * @return orConditionList
+     */
+    public List<AttendanceExportRecordQuery> getOrConditionList(){
+        return this.orConditionList;
+    }
+
+    /**
+     * 璁剧疆 OR鏉′欢闆嗗悎锛屽垪琛ㄩ」涔嬮棿鏄疧R锛岄」鍐呭涔嬮棿鏄疉ND锛屽锛�(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
+     * @param orConditionList
+     */
+    public void setOrConditionList(List<AttendanceExportRecordQuery> orConditionList){
+        this.orConditionList = orConditionList;
+    }
+
+    /**
+     * 鑾峰彇 AND鏉′欢闆嗗悎锛屽垪琛ㄩ」涔嬮棿鏄疉ND锛岄」鍐呭涔嬮棿鏄疧R锛屽锛�(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
+     * @return andConditionList
+     */
+    public List<AttendanceExportRecordQuery> getAndConditionList(){
+        return this.andConditionList;
+    }
+
+    /**
+     * 璁剧疆 AND鏉′欢闆嗗悎锛屽垪琛ㄩ」涔嬮棿鏄疉ND锛岄」鍐呭涔嬮棿鏄疧R锛屽锛�(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
+     * @param andConditionList
+     */
+    public void setAndConditionList(List<AttendanceExportRecordQuery> andConditionList){
+        this.andConditionList = andConditionList;
+    }
+
+}
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/AttendanceGroupFixedworkSpecialEntity.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/AttendanceGroupFixedworkSpecialEntity.java
index 7737db6f4c6e2231055a64b8476d73331d5a3785..e0eeb37fff084d35a378008b1ad4795288066a93 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/AttendanceGroupFixedworkSpecialEntity.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/AttendanceGroupFixedworkSpecialEntity.java
@@ -40,6 +40,7 @@ public class AttendanceGroupFixedworkSpecialEntity extends AttendanceGroupFixedw
     /**
      * 鐗规畩鏃堕棿
      */
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date specialTime;
     /**
      * 澶囨敞
@@ -48,10 +49,12 @@ public class AttendanceGroupFixedworkSpecialEntity extends AttendanceGroupFixedw
     /**
      * 鏃堕棿娈垫椂鍊欏紑濮嬫椂闂�
      */
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date specialStartTime;
     /**
      * 鏃堕棿娈电粨鏉熸椂闂�
      */
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date specialEndTime;
 
 
@@ -237,4 +240,4 @@ public class AttendanceGroupFixedworkSpecialEntity extends AttendanceGroupFixedw
 
         this.specialEndTime = null;
     }
-}
\ No newline at end of file
+}
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/AttendanceExportRecordVo.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/AttendanceExportRecordVo.java
new file mode 100644
index 0000000000000000000000000000000000000000..b1695ee74805f2706413e68303aeb4069f2a23ef
--- /dev/null
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/AttendanceExportRecordVo.java
@@ -0,0 +1,16 @@
+package com.mortals.xhx.module.attendance.model.vo;
+import com.mortals.framework.model.BaseEntityLong;
+import com.mortals.xhx.module.attendance.model.AttendanceExportRecordEntity;
+import java.util.ArrayList;
+import java.util.List;
+import lombok.Data;
+/**
+* 瀵煎叆瀵煎嚭璁板綍瑙嗗浘瀵硅薄
+*
+* @author zxfei
+* @date 2023-04-17
+*/
+@Data
+public class AttendanceExportRecordVo extends BaseEntityLong {
+
+}
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/AttendanceGroupVo.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/AttendanceGroupVo.java
index bee45c3b3a56dc38b130361c0c766618984de81b..877a9e3a0a2892e31b06f5b234a52af3d0c73ef5 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/AttendanceGroupVo.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/AttendanceGroupVo.java
@@ -1,9 +1,6 @@
 package com.mortals.xhx.module.attendance.model.vo;
 import com.mortals.framework.model.BaseEntityLong;
-import com.mortals.xhx.module.attendance.model.AttendanceGroupEntity;
-import com.mortals.xhx.module.attendance.model.AttendanceGroupFixedworkEntity;
-import com.mortals.xhx.module.attendance.model.AttendanceGroupFixedworkSpecialEntity;
-import com.mortals.xhx.module.attendance.model.AttendanceGroupResponsibleEntity;
+import com.mortals.xhx.module.attendance.model.*;
 import lombok.Data;
 
 import java.util.ArrayList;
@@ -18,15 +15,37 @@ import java.util.List;
 public class AttendanceGroupVo extends BaseEntityLong {
 
     /**
-     * 鑰冨嫟缁勭彮娆″疄浣撶被
+     * 鍥哄畾鐝鑰冨嫟缁勭彮娆″疄浣撶被
      */
-    private AttendanceGroupFixedworkEntity attendanceGroupFixedworkEntity;
+    private AttendanceGroupFixedworkEntity groupFixedworkEntity;
 
     /**
-     * 鑰冨嫟缁勫浐瀹氱彮娆$壒娈婃棩鏈熼厤缃�
+     * 鑰冨嫟缁勮礋璐d汉瀵硅薄
      */
-    private List<AttendanceGroupFixedworkSpecialEntity> fixedworkSpecial;
+    private AttendanceGroupResponsibleEntity groupResponsibleEntity;
 
+    /**
+     * 鑷敱鐝埗
+     */
+    private AttendanceGroupFreeworkEntity attendanceGroupFreeworkEntity;
 
-    private AttendanceGroupResponsibleEntity groupResponsibleEntity;
+    /**
+     * 鑰冨嫟缁勮礋璐d汉id
+     */
+    private Long responsibleId;
+
+    /**
+     * 鑰冨嫟缁勮礋璐d汉鍚嶅瓧
+     */
+    private String responsibleName;
+
+    /**
+     * 鑰冨嫟鏃堕棿
+     */
+    private String attendanceTime;
+
+    /**
+     * 浼戞伅鏃ユ湡
+     */
+    private String restTime;
 }
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/AttendanceRecordHikVo.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/AttendanceRecordHikVo.java
index 2534e82f4de3996785df0572432b7dc964c8050f..6a6c868542cedf40fa61f818e2e9380333386070 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/AttendanceRecordHikVo.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/AttendanceRecordHikVo.java
@@ -18,4 +18,18 @@ public class AttendanceRecordHikVo extends BaseEntityLong {
     @Excel(name = "鎵€灞炵粍缁�")
     private String orgName;
 
+    /** 寮€濮� 鑰冨嫟鏃ユ湡 */
+    private String attendanceDateStart;
+
+    /** 缁撴潫 鑰冨嫟鏃ユ湡 */
+    private String attendanceDateEnd;
+
+    /** 鍛樺伐ID鍒楄〃 */
+    private List <Long> staffIdList;
+
+    /** 搴忓彿锛屼富閿紝鑷闀垮垪琛� */
+    private List <Long> idList;
+
+    private List<AttendanceRecordHikEntity> list;
+
 }
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/AttendanceRecordVo.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/AttendanceRecordVo.java
index c24410bed5ff83163707384f6b96f5b873b993fc..e081a760b6edf72051ae49deb529b05216cfba22 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/AttendanceRecordVo.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/AttendanceRecordVo.java
@@ -18,5 +18,11 @@ public class AttendanceRecordVo extends BaseEntityLong {
     private List<AttendanceGroupFixedworkSpecialVo> list;
 
     private AttendanceRecordDetailEntity attendanceRecordDetailEntity;
+
+    /** 寮€濮� 鎵撳崱鏃ユ湡 */
+    private String attendanceDateStart;
+
+    /** 缁撴潫 鎵撳崱鏃ユ湡 */
+    private String attendanceDateEnd;
 }
 
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceExportRecordService.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceExportRecordService.java
new file mode 100644
index 0000000000000000000000000000000000000000..490b2585c004f51de2ed01b271719b2b21df8a94
--- /dev/null
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceExportRecordService.java
@@ -0,0 +1,14 @@
+package com.mortals.xhx.module.attendance.service;
+import com.mortals.framework.service.ICRUDService;
+import com.mortals.xhx.module.attendance.model.AttendanceExportRecordEntity;
+/**
+* AttendanceExportRecordService
+*
+* 瀵煎叆瀵煎嚭璁板綍 service鎺ュ彛
+*
+* @author zxfei
+* @date 2023-04-17
+*/
+public interface AttendanceExportRecordService extends ICRUDService<AttendanceExportRecordEntity,Long>{
+
+}
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceGroupFixedworkService.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceGroupFixedworkService.java
index 60e561605d356c14f6d23a753b0593171a5e9eef..1da8a566f518262840b6d22a7a1dab6351efb4b6 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceGroupFixedworkService.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceGroupFixedworkService.java
@@ -1,5 +1,6 @@
 package com.mortals.xhx.module.attendance.service;
 import com.mortals.framework.service.ICRUDService;
+import com.mortals.xhx.module.attendance.dao.AttendanceGroupFixedworkDao;
 import com.mortals.xhx.module.attendance.model.AttendanceGroupFixedworkEntity;
 /**
 * AttendanceGroupFixedworkService
@@ -11,4 +12,6 @@ import com.mortals.xhx.module.attendance.model.AttendanceGroupFixedworkEntity;
 */
 public interface AttendanceGroupFixedworkService extends ICRUDService<AttendanceGroupFixedworkEntity,Long>{
 
-}
\ No newline at end of file
+    AttendanceGroupFixedworkDao getDao();
+
+}
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceGroupFreeworkService.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceGroupFreeworkService.java
index 0e92149f7a54b330fa3f076328d30a812dc58778..420761a3f332cdb65f0e4ece9f36e42324d4f0b7 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceGroupFreeworkService.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceGroupFreeworkService.java
@@ -1,5 +1,6 @@
 package com.mortals.xhx.module.attendance.service;
 import com.mortals.framework.service.ICRUDService;
+import com.mortals.xhx.module.attendance.dao.AttendanceGroupFreeworkDao;
 import com.mortals.xhx.module.attendance.model.AttendanceGroupFreeworkEntity;
 /**
 * AttendanceGroupFreeworkService
@@ -11,4 +12,6 @@ import com.mortals.xhx.module.attendance.model.AttendanceGroupFreeworkEntity;
 */
 public interface AttendanceGroupFreeworkService extends ICRUDService<AttendanceGroupFreeworkEntity,Long>{
 
-}
\ No newline at end of file
+    AttendanceGroupFreeworkDao getDao();
+
+}
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceGroupResponsibleService.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceGroupResponsibleService.java
index 374e468d52a7005425146ea0ef0cfef302707af6..e485dc7744c8bdc490c368fe06901feb542771d0 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceGroupResponsibleService.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceGroupResponsibleService.java
@@ -1,5 +1,6 @@
 package com.mortals.xhx.module.attendance.service;
 import com.mortals.framework.service.ICRUDService;
+import com.mortals.xhx.module.attendance.dao.AttendanceGroupResponsibleDao;
 import com.mortals.xhx.module.attendance.model.AttendanceGroupResponsibleEntity;
 /**
 * AttendanceGroupResponsibleService
@@ -11,4 +12,6 @@ import com.mortals.xhx.module.attendance.model.AttendanceGroupResponsibleEntity;
 */
 public interface AttendanceGroupResponsibleService extends ICRUDService<AttendanceGroupResponsibleEntity,Long>{
 
-}
\ No newline at end of file
+    AttendanceGroupResponsibleDao getDao();
+
+}
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceExportRecordServiceImpl.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceExportRecordServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..35b8fc47b42dba02373465792af51c5288d300bd
--- /dev/null
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceExportRecordServiceImpl.java
@@ -0,0 +1,19 @@
+package com.mortals.xhx.module.attendance.service.impl;
+import org.springframework.stereotype.Service;
+import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
+import com.mortals.framework.exception.AppException;
+import com.mortals.framework.model.Context;
+import com.mortals.xhx.module.attendance.dao.AttendanceExportRecordDao;
+import com.mortals.xhx.module.attendance.model.AttendanceExportRecordEntity;
+import com.mortals.xhx.module.attendance.service.AttendanceExportRecordService;
+/**
+* AttendanceExportRecordService
+* 瀵煎叆瀵煎嚭璁板綍 service瀹炵幇
+*
+* @author zxfei
+* @date 2023-04-17
+*/
+@Service("attendanceExportRecordService")
+public class AttendanceExportRecordServiceImpl extends AbstractCRUDServiceImpl<AttendanceExportRecordDao, AttendanceExportRecordEntity, Long> implements AttendanceExportRecordService {
+
+}
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceExportRecordController.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceExportRecordController.java
new file mode 100644
index 0000000000000000000000000000000000000000..946f9d12a37f5b2f3af21ff78d6b19f927974eb1
--- /dev/null
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceExportRecordController.java
@@ -0,0 +1,51 @@
+package com.mortals.xhx.module.attendance.web;
+import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
+import com.mortals.xhx.base.system.param.service.ParamService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+import com.mortals.framework.model.Context;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
+import com.mortals.xhx.module.attendance.model.AttendanceExportRecordEntity;
+import com.mortals.xhx.module.attendance.service.AttendanceExportRecordService;
+import org.apache.commons.lang3.ArrayUtils;
+import com.mortals.framework.util.StringUtils;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import com.alibaba.fastjson.JSONObject;
+import java.util.Arrays;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import static com.mortals.framework.ap.SysConstains.*;
+/**
+*
+* 瀵煎叆瀵煎嚭璁板綍
+*
+* @author zxfei
+* @date 2023-04-17
+*/
+@RestController
+@RequestMapping("attendance/export/record")
+public class AttendanceExportRecordController extends BaseCRUDJsonBodyMappingController<AttendanceExportRecordService,AttendanceExportRecordEntity,Long> {
+
+    @Autowired
+    private ParamService paramService;
+
+    public AttendanceExportRecordController(){
+        super.setModuleDesc( "瀵煎叆瀵煎嚭璁板綍");
+    }
+
+    @Override
+    protected void init(Map<String, Object> model, Context context) {
+        this.addDict(model, "exportOrImport", paramService.getParamBySecondOrganize("AttendanceExportRecord","exportOrImport"));
+        this.addDict(model, "type", paramService.getParamBySecondOrganize("AttendanceExportRecord","type"));
+        super.init(model, context);
+    }
+
+
+}
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceGroupController.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceGroupController.java
index 8d2946d30f27c7ec96c7eb53b0098e0f4b3e32dd..323995ff5fd4d4d6ad788cd68c6d5b135b4f6c41 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceGroupController.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceGroupController.java
@@ -1,8 +1,10 @@
 package com.mortals.xhx.module.attendance.web;
 import cn.hutool.core.stream.CollectorUtil;
 import com.mortals.framework.exception.AppException;
+import com.mortals.framework.utils.ServletUtils;
 import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
 import com.mortals.xhx.base.system.param.service.ParamService;
+import com.mortals.xhx.feign.IFeign;
 import com.mortals.xhx.module.attendance.model.*;
 import com.mortals.xhx.module.attendance.service.*;
 import com.mortals.xhx.module.dept.model.DeptEntity;
@@ -15,9 +17,12 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import com.mortals.framework.model.Context;
+import org.springframework.web.multipart.MultipartFile;
 
-import java.util.List;
-import java.util.Map;
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.text.SimpleDateFormat;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -38,6 +43,8 @@ public class AttendanceGroupController extends BaseCRUDJsonBodyMappingController
     @Autowired
     private AttendanceClassService attendanceClassService;
     @Autowired
+    private AttendanceClassDetailService attendanceClassDetailService;
+    @Autowired
     private DeptService deptService;
     @Autowired
     private AttendanceGroupFixedworkService attendanceGroupFixedworkService;
@@ -45,6 +52,10 @@ public class AttendanceGroupController extends BaseCRUDJsonBodyMappingController
     private AttendanceGroupFixedworkSpecialService specialService;
     @Autowired
     private AttendanceGroupResponsibleService groupResponsibleService;
+    @Autowired
+    private AttendanceGroupFreeworkService freeworkService;
+    @Autowired
+    private AttendanceGroupService attendanceGroupService;
 
     public AttendanceGroupController(){
         super.setModuleDesc( "鑰冨嫟缁勪俊鎭�");
@@ -65,20 +76,346 @@ public class AttendanceGroupController extends BaseCRUDJsonBodyMappingController
 
     @Override
     protected int saveAfter(AttendanceGroupEntity entity, Map<String, Object> model, Context context) throws AppException {
-        entity.getAttendanceGroupFixedworkEntity().setGroupId(entity.getId());
-        entity.getAttendanceGroupFixedworkEntity().setGroupName(entity.getGroupName());
-        AttendanceGroupFixedworkEntity save = attendanceGroupFixedworkService.save(entity.getAttendanceGroupFixedworkEntity());
-        List<AttendanceGroupFixedworkSpecialEntity> fixedworkSpecial = entity.getFixedworkSpecial();
-        if (fixedworkSpecial!=null && fixedworkSpecial.size()>0){
-        fixedworkSpecial.forEach(item->{
-            item.setFixedWorkId(save.getId());
-        });
+        AttendanceGroupFixedworkQuery condition = new AttendanceGroupFixedworkQuery();
+        condition.setGroupId(entity.getId());
+        attendanceGroupFixedworkService.getDao().delete(condition);
+
+        AttendanceGroupResponsibleQuery responsibleQuery = new AttendanceGroupResponsibleQuery();
+        responsibleQuery.setGroupId(entity.getId());
+        groupResponsibleService.getDao().delete(responsibleQuery);
+
+        AttendanceGroupFreeworkQuery freeworkQuery = new AttendanceGroupFreeworkQuery();
+        freeworkQuery.setGroupId(entity.getId());
+        freeworkService.getDao().delete(freeworkQuery);
+
+    if (entity.getGroupFixedworkEntity()!=null){
+            entity.getGroupFixedworkEntity().setGroupId(entity.getId());
+            entity.getGroupFixedworkEntity().setGroupName(entity.getGroupName());
+            entity.getGroupFixedworkEntity().setCreateUserId(this.getContextUserId(context));
+            entity.getGroupFixedworkEntity().setCreateTime(new Date());
+            attendanceGroupFixedworkService.save(entity.getGroupFixedworkEntity(),context);
         }
-        specialService.save(fixedworkSpecial);
+
         AttendanceGroupResponsibleEntity responsibleEntity = entity.getGroupResponsibleEntity();
         responsibleEntity.setGroupId(entity.getId());
         responsibleEntity.setGroupName(entity.getGroupName());
-        groupResponsibleService.save(responsibleEntity);
+        responsibleEntity.setCreateUserId(this.getContextUserId(context));
+        responsibleEntity.setCreateTime(new Date());
+        groupResponsibleService.save(responsibleEntity,context);
+
+        if (entity.getAttendanceGroupFreeworkEntity()!=null){
+            entity.getAttendanceGroupFreeworkEntity().setGroupId(entity.getId());
+            entity.getAttendanceGroupFreeworkEntity().setGroupName(entity.getGroupName());
+            entity.getAttendanceGroupFreeworkEntity().setCreateUserId(this.getContextUserId(context));
+            entity.getAttendanceGroupFreeworkEntity().setCreateTime(new Date());
+            freeworkService.save(entity.getAttendanceGroupFreeworkEntity(),context);
+        }
         return super.saveAfter(entity, model, context);
     }
+
+    @Override
+    protected int editAfter(Long id, Map<String, Object> model, AttendanceGroupEntity entity, Context context) throws AppException {
+        AttendanceGroupResponsibleEntity attendanceGroupResponsibleEntity = groupResponsibleService.selectOne(new AttendanceGroupResponsibleQuery().groupId(id));
+
+        AttendanceGroupFixedworkEntity attendanceGroupFixedworkEntity = attendanceGroupFixedworkService.selectOne(new AttendanceGroupFixedworkQuery().groupId(id));
+
+        AttendanceGroupFreeworkEntity attendanceGroupFreeworkEntity = freeworkService.selectOne(new AttendanceGroupFreeworkQuery().groupId(id));
+        entity.setGroupFixedworkEntity(attendanceGroupFixedworkEntity);
+        entity.setAttendanceGroupFreeworkEntity(attendanceGroupFreeworkEntity);
+        entity.setGroupResponsibleEntity(attendanceGroupResponsibleEntity);
+        return super.editAfter(id, model, entity, context);
+    }
+
+    @Override
+    protected int doListAfter(AttendanceGroupEntity query, Map<String, Object> model, Context context) throws AppException {
+        List<AttendanceGroupEntity> data = (List<AttendanceGroupEntity>)model.get(KEY_RESULT_DATA);
+        for (AttendanceGroupEntity entity : data) {
+            entity.setPersonNum(entity.getAttendanceGroupStaffList().size());
+            AttendanceGroupResponsibleEntity attendanceGroupResponsibleEntity = groupResponsibleService.selectOne(new AttendanceGroupResponsibleQuery().groupId(entity.getId()));
+            if (attendanceGroupResponsibleEntity!=null){
+                entity.setResponsibleId(attendanceGroupResponsibleEntity.getResponsibleId());
+                entity.setResponsibleName(attendanceGroupResponsibleEntity.getResponsibleName());
+            }
+            String monday = "";
+            String tuesday = "";
+            String wednesday = "";
+            String thursday = "";
+            String friday = "";
+            String saturday = "";
+            String sunday = "";
+            String rest = "";
+            String attendanceTime = "";
+            //鎷兼帴鑰冨嫟鏃堕棿
+            //鍥哄畾鐝埗
+            AttendanceGroupFixedworkEntity attendanceGroupFixedworkEntity = attendanceGroupFixedworkService.selectOne(new AttendanceGroupFixedworkQuery().groupId(entity.getId()));
+            SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
+            if (Objects.nonNull(attendanceGroupFixedworkEntity)){
+                //鍛ㄤ竴
+                if (Objects.nonNull(attendanceGroupFixedworkEntity)&&attendanceGroupFixedworkEntity.getMonday()==1){
+                    List<AttendanceClassDetailEntity> attendanceClassDetailEntity = attendanceClassDetailService.find(new AttendanceClassDetailQuery().classId(attendanceGroupFixedworkEntity.getMondayClassId()));
+                    String className = attendanceGroupFixedworkEntity.getMondayClassName();
+                    String time = "";
+                    for (AttendanceClassDetailEntity classDetailEntity : attendanceClassDetailEntity) {
+                        if (!time.equals("")){
+                            time = time+"-"+sdf.format(classDetailEntity.getGoWorkDate())+"~"+sdf.format(classDetailEntity.getOffWorkDate());
+                        }else {
+                            time = sdf.format(classDetailEntity.getGoWorkDate())+"~"+sdf.format(classDetailEntity.getOffWorkDate());
+                        }
+                    }
+                    monday ="鍛ㄤ竴"+"("+className+":"+time+")";
+                    attendanceTime = attendanceTime+monday;
+                }else {
+                    rest = rest+"鍛ㄤ竴";
+                }
+                //鍛ㄤ簩
+                if ((Objects.nonNull(attendanceGroupFixedworkEntity)&&attendanceGroupFixedworkEntity.getTuesday()==1)){
+                    List<AttendanceClassDetailEntity> attendanceClassDetailEntity = attendanceClassDetailService.find(new AttendanceClassDetailQuery().classId(attendanceGroupFixedworkEntity.getTuesdayClassId()));
+                    String className = attendanceGroupFixedworkEntity.getTuesdayClassName();
+                    String time = "";
+                    for (AttendanceClassDetailEntity classDetailEntity : attendanceClassDetailEntity) {
+                        if (!time.equals("")){
+                            time = time+"-"+sdf.format(classDetailEntity.getGoWorkDate())+"~"+sdf.format(classDetailEntity.getOffWorkDate());
+                        }else {
+                            time = sdf.format(classDetailEntity.getGoWorkDate())+"~"+sdf.format(classDetailEntity.getOffWorkDate());
+                        }
+                    }
+                    tuesday = "鍛ㄤ簩"+"("+className+":"+time+")";
+                    if (!attendanceTime.equals("")){
+                        attendanceTime = attendanceTime + "銆�"+tuesday;
+                    }else {
+                        attendanceTime = attendanceTime +tuesday;
+                    }
+                }else {
+                    if (!rest.equals("")){
+                        rest = rest+"銆�"+"鍛ㄤ簩";
+                    }else {
+                        rest = rest+"鍛ㄤ簩";
+                    }
+                }
+                //鍛ㄤ笁
+                if ((Objects.nonNull(attendanceGroupFixedworkEntity)&&attendanceGroupFixedworkEntity.getWednesday()==1)){
+                    List<AttendanceClassDetailEntity> attendanceClassDetailEntity = attendanceClassDetailService.find(new AttendanceClassDetailQuery().classId(attendanceGroupFixedworkEntity.getWednesdayClassId()));
+                    String className = attendanceGroupFixedworkEntity.getWednesdayClassName();
+                    String time = "";
+                    for (AttendanceClassDetailEntity classDetailEntity : attendanceClassDetailEntity) {
+                        if (!time.equals("")){
+                            time = time+"-"+sdf.format(classDetailEntity.getGoWorkDate())+"~"+sdf.format(classDetailEntity.getOffWorkDate());
+                        }else {
+                            time = sdf.format(classDetailEntity.getGoWorkDate())+"~"+sdf.format(classDetailEntity.getOffWorkDate());
+                        }
+                    }
+                    wednesday = "鍛ㄤ笁"+"("+className+":"+time+")";
+                    if (!attendanceTime.equals("")){
+                        attendanceTime = attendanceTime + "銆�"+wednesday;
+                    }else {
+                        attendanceTime = attendanceTime +wednesday;
+                    }
+                }else {
+                    if (!rest.equals("")){
+                        rest = rest+"銆�"+"鍛ㄤ笁";
+                    }else {
+                        rest = rest+"鍛ㄤ笁";
+                    }
+                }
+                //鍛ㄥ洓
+                if ((Objects.nonNull(attendanceGroupFixedworkEntity)&&attendanceGroupFixedworkEntity.getThursday()==1)){
+                    List<AttendanceClassDetailEntity> attendanceClassDetailEntity = attendanceClassDetailService.find(new AttendanceClassDetailQuery().classId(attendanceGroupFixedworkEntity.getThursdayClassId()));
+                    String className = attendanceGroupFixedworkEntity.getThursdayClassName();
+                    String time = "";
+                    for (AttendanceClassDetailEntity classDetailEntity : attendanceClassDetailEntity) {
+                        if (!time.equals("")){
+                            time = time+"-"+sdf.format(classDetailEntity.getGoWorkDate())+"~"+sdf.format(classDetailEntity.getOffWorkDate());
+                        }else {
+                            time = sdf.format(classDetailEntity.getGoWorkDate())+"~"+sdf.format(classDetailEntity.getOffWorkDate());
+                        }
+                    }
+                    thursday = "鍛ㄥ洓"+"("+className+":"+time+")";
+                    if (!attendanceTime.equals("")){
+                        attendanceTime = attendanceTime + "銆�"+thursday;
+                    }else {
+                        attendanceTime = attendanceTime +thursday;
+                    }
+                }else {
+                    if (!rest.equals("")){
+                        rest = rest+"銆�"+"鍛ㄥ洓";
+                    }else {
+                        rest = rest+"鍛ㄥ洓";
+                    }
+                }
+                //鍛ㄤ簲
+                if ((Objects.nonNull(attendanceGroupFixedworkEntity)&&attendanceGroupFixedworkEntity.getFriday()==1)){
+                    List<AttendanceClassDetailEntity> attendanceClassDetailEntity = attendanceClassDetailService.find(new AttendanceClassDetailQuery().classId(attendanceGroupFixedworkEntity.getFridayClassId()));
+                    String className = attendanceGroupFixedworkEntity.getFridayClassName();
+                    String time = "";
+                    for (AttendanceClassDetailEntity classDetailEntity : attendanceClassDetailEntity) {
+                        if (!time.equals("")){
+                            time = time+"-"+sdf.format(classDetailEntity.getGoWorkDate())+"~"+sdf.format(classDetailEntity.getOffWorkDate());
+                        }else {
+                            time = sdf.format(classDetailEntity.getGoWorkDate())+"~"+sdf.format(classDetailEntity.getOffWorkDate());
+                        }
+                    }
+                    friday = "鍛ㄤ簲"+"("+className+":"+time+")";
+                    if (!attendanceTime.equals("")){
+                        attendanceTime = attendanceTime + "銆�"+friday;
+                    }else {
+                        attendanceTime = attendanceTime +friday;
+                    }
+                }else {
+                    if (!rest.equals("")){
+                        rest = rest+"銆�"+"鍛ㄤ簲";
+                    }else {
+                        rest = rest+"鍛ㄤ簲";
+                    }
+                }
+                //鍛ㄥ叚
+                if ((Objects.nonNull(attendanceGroupFixedworkEntity)&&attendanceGroupFixedworkEntity.getSaturday()==1)){
+                    List<AttendanceClassDetailEntity> attendanceClassDetailEntity = attendanceClassDetailService.find(new AttendanceClassDetailQuery().classId(attendanceGroupFixedworkEntity.getSaturdayClassId()));
+                    String className = attendanceGroupFixedworkEntity.getSaturdayClassName();
+                    String time = "";
+                    for (AttendanceClassDetailEntity classDetailEntity : attendanceClassDetailEntity) {
+                        if (!time.equals("")){
+                            time = time+"-"+sdf.format(classDetailEntity.getGoWorkDate())+"~"+sdf.format(classDetailEntity.getOffWorkDate());
+                        }else {
+                            time = sdf.format(classDetailEntity.getGoWorkDate())+"~"+sdf.format(classDetailEntity.getOffWorkDate());
+                        }
+                    }
+                    saturday = "鍛ㄥ叚"+"("+className+":"+time+")";
+                    if (!attendanceTime.equals("")){
+                        attendanceTime = attendanceTime + "銆�"+saturday;
+                    }else {
+                        attendanceTime = attendanceTime +saturday;
+                    }
+                }else {
+                    if (!rest.equals("")){
+                        rest = rest+"銆�"+"鍛ㄥ叚";
+                    }else {
+                        rest = rest+"鍛ㄥ叚";
+                    }
+                }
+                //鍛ㄦ棩
+                if ((Objects.nonNull(attendanceGroupFixedworkEntity)&&attendanceGroupFixedworkEntity.getSunday()==1)){
+                    List<AttendanceClassDetailEntity> attendanceClassDetailEntity = attendanceClassDetailService.find(new AttendanceClassDetailQuery().classId(attendanceGroupFixedworkEntity.getSundayClassId()));
+                    String className = attendanceGroupFixedworkEntity.getSundayClassName();
+                    String time = "";
+                    for (AttendanceClassDetailEntity classDetailEntity : attendanceClassDetailEntity) {
+                        if (!time.equals("")){
+                            time = time+"-"+sdf.format(classDetailEntity.getGoWorkDate())+"~"+sdf.format(classDetailEntity.getOffWorkDate());
+                        }else {
+                            time = sdf.format(classDetailEntity.getGoWorkDate())+"~"+sdf.format(classDetailEntity.getOffWorkDate());
+                        }
+                    }
+                    sunday = "鍛ㄦ棩"+"("+className+":"+time+")";
+                    if (!attendanceTime.equals("")){
+                        attendanceTime = attendanceTime + "銆�"+sunday;
+                    }else {
+                        attendanceTime = attendanceTime +sunday;
+                    }
+                }else {
+                    if (!rest.equals("")){
+                        rest = rest+"銆�"+"鍛ㄦ棩";
+                    }else {
+                        rest = rest+"鍛ㄦ棩";
+                    }
+                }
+            }
+
+            //鑷敱宸ユ椂
+            AttendanceGroupFreeworkEntity attendanceGroupFreeworkEntity = freeworkService.selectOne(new AttendanceGroupFreeworkQuery().groupId(entity.getId()));
+            if (Objects.nonNull(attendanceGroupFreeworkEntity)){
+                if (attendanceGroupFreeworkEntity.getMonday()==1){
+                    attendanceTime="鍛ㄤ竴";
+                }else {
+                    rest = "鍛ㄤ竴";
+                }
+                if (attendanceGroupFreeworkEntity.getTuesday()==1){
+                    if (!attendanceTime.equals("")){
+                        attendanceTime = attendanceTime +"銆�"+"鍛ㄤ簩";
+                    }else {
+                        attendanceTime = "鍛ㄤ簩";
+                    }
+                }else {
+                    if (!rest.equals("")){
+                        rest = rest+"銆�"+"鍛ㄤ簩";
+                    }else {
+                        rest = rest+"鍛ㄤ簩";
+                    }
+                }
+                if (attendanceGroupFreeworkEntity.getWednesday()==1){
+                    if (!attendanceTime.equals("")){
+                        attendanceTime = attendanceTime +"銆�"+"鍛ㄤ笁";
+                    }else {
+                        attendanceTime = "鍛ㄤ笁";
+                    }
+                }else {
+                    if (!rest.equals("")){
+                        rest = rest+"銆�"+"鍛ㄤ笁";
+                    }else {
+                        rest = rest+"鍛ㄤ笁";
+                    }
+                }
+                if (attendanceGroupFreeworkEntity.getThursday()==1){
+                    if (!attendanceTime.equals("")){
+                        attendanceTime = attendanceTime +"銆�"+"鍛ㄥ洓";
+                    }else {
+                        attendanceTime = "鍛ㄥ洓";
+                    }
+                }else {
+                    if (!rest.equals("")){
+                        rest = rest+"銆�"+"鍛ㄥ洓";
+                    }else {
+                        rest = rest+"鍛ㄥ洓";
+                    }
+                }
+                if (attendanceGroupFreeworkEntity.getFriday()==1){
+                    if (!attendanceTime.equals("")){
+                        attendanceTime = attendanceTime +"銆�"+"鍛ㄤ簲";
+                    }else {
+                        attendanceTime = "鍛ㄤ簲";
+                    }
+                }else {
+                    if (!rest.equals("")){
+                        rest = rest+"銆�"+"鍛ㄤ簲";
+                    }else {
+                        rest = rest+"鍛ㄤ簲";
+                    }
+                }
+                if (attendanceGroupFreeworkEntity.getSaturday()==1){
+                    if (!attendanceTime.equals("")){
+                        attendanceTime = attendanceTime +"銆�"+"鍛ㄥ叚";
+                    }else {
+                        attendanceTime = "鍛ㄥ叚";
+                    }
+                }else {
+                    if (!rest.equals("")){
+                        rest = rest+"銆�"+"鍛ㄥ叚";
+                    }else {
+                        rest = rest+"鍛ㄥ叚";
+                    }
+                }
+                if (attendanceGroupFreeworkEntity.getSunday()==1){
+                    if (!attendanceTime.equals("")){
+                        attendanceTime = attendanceTime +"銆�"+"鍛ㄦ棩";
+                    }else {
+                        attendanceTime = "鍛ㄦ棩";
+                    }
+                }else {
+                    if (!rest.equals("")){
+                        rest = rest+"銆�"+"鍛ㄦ棩";
+                    }else {
+                        rest = rest+"鍛ㄦ棩";
+                    }
+                }
+                if (!attendanceTime.equals("")){
+                    attendanceTime = attendanceTime +"(宸ヤ綔鏃堕暱:"+attendanceGroupFreeworkEntity.getWorkTime()+")";
+                }
+            }
+
+            if (!rest.equals("")){
+                rest = rest + "浼戞伅";
+            }
+            entity.setRestTime(rest);
+            entity.setAttendanceTime(attendanceTime);
+        }
+        return super.doListAfter(query, model, context);
+    }
 }
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceRecordController.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceRecordController.java
index 9ecb25422c25163cd7ed43f70aae8f738efada43..5815aafe9e7536d66fa4492afec95ebbe960f22a 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceRecordController.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceRecordController.java
@@ -1,6 +1,12 @@
 package com.mortals.xhx.module.attendance.web;
 import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
 import com.mortals.xhx.base.system.param.service.ParamService;
+import com.mortals.xhx.module.attendance.model.*;
+import com.mortals.xhx.module.attendance.service.AttendanceClassService;
+import com.mortals.xhx.module.attendance.service.AttendanceGroupService;
+import com.mortals.xhx.module.dept.model.DeptEntity;
+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;
@@ -9,7 +15,6 @@ import com.mortals.framework.model.Context;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
-import com.mortals.xhx.module.attendance.model.AttendanceRecordEntity;
 import com.mortals.xhx.module.attendance.service.AttendanceRecordService;
 import org.apache.commons.lang3.ArrayUtils;
 import com.mortals.framework.util.StringUtils;
@@ -36,12 +41,24 @@ public class AttendanceRecordController extends BaseCRUDJsonBodyMappingControlle
     @Autowired
     private ParamService paramService;
 
+    @Autowired
+    private AttendanceGroupService attendanceGroupService;
+
+    @Autowired
+    private DeptService deptService;
+
+    @Autowired
+    private AttendanceClassService attendanceClassService;
+
     public AttendanceRecordController(){
         super.setModuleDesc( "鑰冨嫟鎵撳崱璁板綍淇℃伅");
     }
 
     @Override
     protected void init(Map<String, Object> model, Context context) {
+        this.addDict(model,"deptId",deptService.find(new DeptQuery()).stream().collect(Collectors.toMap(x->x.getId().toString(),y->y.getDeptName())));
+        this.addDict(model,"groupId",attendanceGroupService.find(new AttendanceGroupQuery()).stream().collect(Collectors.toMap(x->x.getId().toString(),y->y.getGroupName())));
+        this.addDict(model,"classId",attendanceClassService.find(new AttendanceClassQuery()).stream().collect(Collectors.toMap(x->x.getId().toString(),y->y.getClassName())));
         super.init(model, context);
     }
 
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceRecordErrorController.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceRecordErrorController.java
index 4a91f7c2e952de50c323ee4fc501c1eee04ca752..f993a9dd301e09a2cc0ab0de5cd453f6f044e079 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceRecordErrorController.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceRecordErrorController.java
@@ -1,6 +1,17 @@
 package com.mortals.xhx.module.attendance.web;
+import com.mortals.framework.annotation.UnAuth;
+import com.mortals.framework.common.Rest;
+import com.mortals.framework.exception.AppException;
+import com.mortals.framework.model.PageInfo;
+import com.mortals.framework.model.Result;
+import com.mortals.framework.service.IUser;
+import com.mortals.framework.util.DateUtils;
 import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
 import com.mortals.xhx.base.system.param.service.ParamService;
+import com.mortals.xhx.module.attendance.model.*;
+import com.mortals.xhx.module.attendance.service.*;
+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;
@@ -9,16 +20,12 @@ import com.mortals.framework.model.Context;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
-import com.mortals.xhx.module.attendance.model.AttendanceRecordErrorEntity;
-import com.mortals.xhx.module.attendance.service.AttendanceRecordErrorService;
 import org.apache.commons.lang3.ArrayUtils;
 import com.mortals.framework.util.StringUtils;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+
+import java.util.*;
 import java.util.stream.Collectors;
 import com.alibaba.fastjson.JSONObject;
-import java.util.Arrays;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 import static com.mortals.framework.ap.SysConstains.*;
@@ -36,6 +43,24 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
     @Autowired
     private ParamService paramService;
 
+    @Autowired
+    private AttendanceGroupService attendanceGroupService;
+
+    @Autowired
+    private DeptService deptService;
+
+    @Autowired
+    private AttendanceClassService attendanceClassService;
+
+    @Autowired
+    private AttendanceRecordService attendanceRecordService;
+
+    @Autowired
+    private AttendanceRecordDetailService attendanceRecordDetailService;
+
+    @Autowired
+    private AttendanceRecordErrorService errorService;
+
     public AttendanceRecordErrorController(){
         super.setModuleDesc( "鑰冨嫟鎵撳崱璁板綍寮傚父淇℃伅");
     }
@@ -44,8 +69,46 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
     protected void init(Map<String, Object> model, Context context) {
         this.addDict(model, "errorStatus", paramService.getParamBySecondOrganize("AttendanceRecordError","errorStatus"));
         this.addDict(model, "processStatus", paramService.getParamBySecondOrganize("AttendanceRecordError","processStatus"));
+        this.addDict(model,"deptId",deptService.find(new DeptQuery()).stream().collect(Collectors.toMap(x->x.getId().toString(), y->y.getDeptName())));
+        this.addDict(model,"groupId",attendanceGroupService.find(new AttendanceGroupQuery()).stream().collect(Collectors.toMap(x->x.getId().toString(), y->y.getGroupName())));
+        this.addDict(model,"classId",attendanceClassService.find(new AttendanceClassQuery()).stream().collect(Collectors.toMap(x->x.getId().toString(), y->y.getClassName())));
         super.init(model, context);
     }
 
 
-}
\ No newline at end of file
+    @PostMapping({"disposeError"})
+    public Rest<String> disposeError(@RequestBody AttendanceRecordErrorEntity query) {
+        Rest<String> ret = new Rest();
+        Context context = this.getContext();
+        query.setOpertor(context.getUser().getRealName());
+        query.setOperDateTime(new Date());
+        query.setProcessStatus(1);
+        errorService.update(query);
+        DateUtils.convertTime2Str(query.getErrorDateTime().getTime(),DateUtils.P_yyyy_MM_dd);
+        AttendanceRecordQuery attendanceRecordQuery = new AttendanceRecordQuery();
+        attendanceRecordQuery.setStaffId(query.getStaffId());
+        attendanceRecordQuery.setAttendanceDateStart(DateUtils.convertTime2Str(query.getErrorDateTime().getTime(),DateUtils.P_yyyy_MM_dd));
+        attendanceRecordQuery.setAttendanceDateEnd(DateUtils.convertTime2Str(query.getErrorDateTime().getTime(),DateUtils.P_yyyy_MM_dd));
+        AttendanceRecordEntity attendanceRecordEntity = attendanceRecordService.selectOne(attendanceRecordQuery);
+        AttendanceRecordDetailQuery detailQuery = new AttendanceRecordDetailQuery();
+        detailQuery.setRecordId(attendanceRecordEntity.getId());
+        detailQuery.setShiftsId(query.getShiftsId());
+        List<AttendanceRecordDetailEntity> attendanceRecordDetailEntity = attendanceRecordDetailService.find(detailQuery);
+        for (AttendanceRecordDetailEntity recordDetailEntity : attendanceRecordDetailEntity) {
+            Date goWorkDate = recordDetailEntity.getGoWorkDate();
+            Date offWorkDate = recordDetailEntity.getOffWorkDate();
+            if (goWorkDate.getTime()==query.getErrorDateTime().getTime()){
+                recordDetailEntity.setGoWorkResult(query.getErrorStatus());
+            }
+            if (offWorkDate.getTime()==query.getErrorDateTime().getTime()){
+                recordDetailEntity.setOffWorkResult(query.getErrorStatus());
+            }
+            attendanceRecordDetailService.update(recordDetailEntity);
+        }
+        return  Rest.ok();
+    }
+
+
+
+
+}
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 d72aaabfb0ccc81623ee7a0a77a8ba8390c8fa99..8ceafe85c2bcfcd56bc80104a7843ce32cbd7d4e 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
@@ -1,15 +1,48 @@
 package com.mortals.xhx.module.attendance.web;
-
-import com.mortals.framework.model.Context;
+import cn.hutool.core.util.StrUtil;
+import com.mortals.framework.exception.AppException;
+import com.mortals.framework.service.IUser;
+import com.mortals.framework.utils.ServletUtils;
 import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
 import com.mortals.xhx.base.system.param.service.ParamService;
-import com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity;
-import com.mortals.xhx.module.attendance.service.AttendanceRecordHikService;
+import com.mortals.xhx.base.system.upload.service.UploadService;
+import com.mortals.xhx.module.attendance.model.*;
+import com.mortals.xhx.module.attendance.service.*;
+import com.mortals.xhx.module.dept.model.DeptEntity;
+import com.mortals.xhx.module.dept.model.DeptQuery;
+import com.mortals.xhx.module.dept.service.DeptService;
+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 com.sun.xml.internal.bind.v2.TODO;
+import javassist.Loader;
+import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang.time.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+import com.mortals.framework.model.Context;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
+import org.apache.commons.lang3.ArrayUtils;
+import com.mortals.framework.util.StringUtils;
 
-import java.util.Map;
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.*;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.stream.Collectors;
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import static com.mortals.framework.ap.SysConstains.*;
 /**
 *
 * 娴峰悍鑰冨嫟鎵撳崱璁板綍姹囨€讳俊鎭�
@@ -23,6 +56,30 @@ public class AttendanceRecordHikController extends BaseCRUDJsonBodyMappingContro
 
     @Autowired
     private ParamService paramService;
+    @Autowired
+    private DeptService deptService;
+    @Autowired
+    private AttendanceRecordService attendanceRecordService;
+    @Autowired
+    private AttendanceRecordHikService attendanceRecordHikService;
+    @Autowired
+    private AttendanceGroupStaffService attendanceGroupStaffService;
+    @Autowired
+    private AttendanceGroupService attendanceGroupService;
+    @Autowired
+    private AttendanceGroupFixedworkService attendanceGroupFixedworkService;
+    @Autowired
+    private AttendanceClassService attendanceClassService;
+    @Autowired
+    private AttendanceClassDetailService attendanceClassDetailService;
+    @Autowired
+    private StaffService staffService;
+    @Autowired
+    private UploadService uploadService;
+    @Autowired
+    private AttendanceExportRecordService attendanceExportRecordService;
+    @Autowired
+    private AttendanceRecordErrorService errorService;
 
     public AttendanceRecordHikController(){
         super.setModuleDesc( "娴峰悍鑰冨嫟鎵撳崱璁板綍姹囨€讳俊鎭�");
@@ -34,4 +91,487 @@ public class AttendanceRecordHikController extends BaseCRUDJsonBodyMappingContro
     }
 
 
-}
\ No newline at end of file
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void doImportDataBefore(List<AttendanceRecordHikEntity> list, boolean updateSupport, Context context) throws AppException {
+
+
+        list.forEach(item->{
+            String orgName = item.getOrgName();
+            //todo split orgName to deptId and deptName
+            String[] split = orgName.split("/");
+
+            String deptName = split[split.length-1];
+            DeptQuery deptQuery = new DeptQuery();
+            deptQuery.setDeptName(deptName);
+            //閫氳繃鍒嗚В鐨刣eptName鍘昏幏鍙栭儴闂ㄤ俊鎭�
+            List<DeptEntity> deptEntities = deptService.find(deptQuery);
+            Long deptId = 0L;
+            //鍒ゆ柇鏌ュ嚭鏉ョ殑閮ㄩ棬淇℃伅鏄惁涓轰竴涓�,鏄殑璇濈洿鎺ヨ幏鍙杋d,涓嶆槸鐨勮瘽鑾峰彇閮ㄩ棬鐨勭埗绾d,閫氳繃鐖剁骇id鍜宒eptName鍘绘煡閮ㄩ棬id
+            if (StringUtils.isNotNull(deptEntities) && deptEntities.size()==1){
+                deptId = deptEntities.get(0).getId();
+            }else {
+                String parentDeptName = split[split.length - 2];
+
+                deptQuery.setDeptName(parentDeptName);
+                DeptEntity deptEntity = deptService.selectOne(deptQuery);
+
+                deptQuery.setDeptName(deptName);
+                deptQuery.setParentId(deptEntity.getParentId());
+                DeptEntity dept = deptService.selectOne(deptQuery);
+                deptId = dept.getId();
+            }
+            //閫氳繃宸ュ彿鍘绘煡璇㈠憳宸ヤ俊鎭�
+            String workNum = item.getWorkNum();
+            String replace = StrUtil.replace(workNum, "\t", "");
+            StaffEntity staffEntity = staffService.selectOne(new StaffQuery().workNum(replace));
+            item.setWorkNum(replace);
+            item.setStaffId(staffEntity.getId());
+            item.setDeptId(deptId);
+            item.setDeptName(deptName);
+            item.setPositionId(staffEntity.getPositionId());
+            item.setPositionName(staffEntity.getPositionName());
+        });
+        //瀛樺叆娴峰悍鎵撳崱鍘熷鏁版嵁 mortals_xhx_attendance_record_hik
+        super.doImportDataBefore(list, updateSupport, context);
+    }
+
+    @Override
+    protected int batchSaveAfter(List<AttendanceRecordHikEntity> list, Map<String, Object> model, Context context) throws AppException {
+        return super.batchSaveAfter(list, model, context);
+    }
+
+    @PostMapping(value = "/addAttendanceRecord")
+    public void addAttendanceRecord(@RequestBody AttendanceRecordHikEntity hikEntity) throws ParseException {
+        List<AttendanceRecordHikEntity> list = hikEntity.getList();
+        //瀵硅€冨嫟鏁版嵁鏍规嵁鑰冨嫟鏃堕棿杩涜鎺掑簭
+        List<AttendanceRecordHikEntity> collect = list.stream().sorted(Comparator.comparing(AttendanceRecordHikEntity::getAttendanceDate)).collect(Collectors.toList());
+        //鏍规嵁宸ュ彿瀵硅€冨嫟鏁版嵁杩涜鍒嗙粍
+        Map<String, List<AttendanceRecordHikEntity>> listMap = collect.stream().collect(Collectors.groupingBy(AttendanceRecordHikEntity::getWorkNum));
+        //map閬嶅巻.鍏堟妸鎵€鏈夐敭鍙栧嚭鏉�
+        Set<String> workNumSet = listMap.keySet();
+        //鏍规嵁閿彇鍑簐alue
+        for (String workNum : workNumSet) {
+            List<AttendanceRecordHikEntity> attendanceRecordHikEntities1 = listMap.get(workNum);
+            //瀵规寜鐓у伐鍙峰垎缁勪簡鐨勬暟鎹產ttendanceRecordHikEntities杩涜鏃堕棿鍒嗙粍
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+            Map<String, List<AttendanceRecordHikEntity>> map = attendanceRecordHikEntities1.stream().collect(Collectors.groupingBy(entity -> entity.getAttendanceDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate().format(formatter)));
+            Set<String> dateSet = map.keySet();
+            for (String s : dateSet) {
+                List<AttendanceRecordHikEntity> attendanceRecordHikEntities = map.get(s);
+                //瀵圭浉鍚屽伐鍙风殑浜哄憳杩涜閬嶅巻鍒ゆ柇鑰冨嫟瑙勫垯.
+                AttendanceRecordEntity attendanceRecordEntity = new AttendanceRecordEntity();
+                List<AttendanceRecordDetailEntity> detailEntity = new ArrayList<>();
+                for (AttendanceRecordHikEntity item:attendanceRecordHikEntities) {
+                    //瀵逛富琛ㄧ殑瀵硅薄杩涜璧嬪€�
+                    if (Objects.nonNull(attendanceRecordEntity)){
+                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+                        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());
+                        IUser user = getContext().getUser();
+                        attendanceRecordEntity.setCreateTime(new Date());
+                        attendanceRecordEntity.setCreateUserId(user.getId());
+                        attendanceRecordEntity.setAttendanceDate(sdf.parse(sdf.format(item.getAttendanceDate())));
+                    }
+                    //鑾峰彇鑰冨嫟鎵撳崱鏃堕棿
+                    Date attendanceDate = item.getAttendanceDate();
+                    //閫氳繃宸ュ彿鏌ヨ鍛樺伐淇℃伅
+                    StaffQuery staffQuery = new StaffQuery();
+                    StaffEntity staffEntity = staffService.selectOne(staffQuery.workNum(item.getWorkNum()));
+                    //閫氳繃鍛樺伐id鏌ヨ鑰冨嫟浜哄憳淇℃伅
+                    AttendanceGroupStaffQuery attendanceGroupStaffQuery = new AttendanceGroupStaffQuery();
+                    List<AttendanceGroupStaffEntity> attendanceGroupStaffEntities = attendanceGroupStaffService.find(attendanceGroupStaffQuery.staffId(staffEntity.getId()));
+                    //鏌ヨ璇ヨ€冨嫟浜哄憳,濡傛灉鏌ュ嚭鏉ョ殑鑰冨嫟浜哄憳淇℃伅list闀垮害涓�1 鍒欒鑰冨嫟浜哄憳鍙湁涓€涓€冨嫟缁�
+                    if (StringUtils.isNotNull(attendanceGroupStaffEntities) && attendanceGroupStaffEntities.size()==1){
+                        //鏌ヨ鑰冨嫟缁�
+                        AttendanceGroupQuery attendanceGroupQuery = new AttendanceGroupQuery();
+                        AttendanceGroupEntity attendanceGroupEntity = attendanceGroupService.selectOne(attendanceGroupQuery.id(attendanceGroupStaffEntities.get(0).getGroupId()));
+                        //鏌ヨ鑰冨嫟缁勮缁嗕俊鎭幏鍙栫彮娆�
+                        AttendanceGroupFixedworkQuery attendanceGroupFixedworkQuery = new AttendanceGroupFixedworkQuery();
+                        AttendanceGroupFixedworkEntity attendanceGroupFixedworkEntity = attendanceGroupFixedworkService.selectOne(attendanceGroupFixedworkQuery.groupId(attendanceGroupEntity.getId()));
+                        //鍒ゆ柇褰撳墠鑰冨嫟鏃ユ湡涓哄懆鍑�
+                        Date attendanceDate1 = attendanceDate;
+                        String week = this.getWeek(attendanceDate1);
+                        //閫氳繃鑰冨嫟鏃ユ湡鐨勬槦鏈熸嬁鍒扮彮娆d.
+                        Long weekClassId = this.getWeekClassId(attendanceGroupFixedworkEntity, week);
+                        //weekClassId涓�-1 鍒欎笉鍦ㄨ€冨嫟
+                        if (weekClassId==-1L){
+                            //璺宠繃鏈寰幆
+                            continue;
+                        }
+                        //鑾峰彇鐝淇℃伅
+                        AttendanceClassQuery attendanceClassQuery = new AttendanceClassQuery();
+                        AttendanceClassEntity attendanceClassEntity = attendanceClassService.selectOne(attendanceClassQuery.id(weekClassId));
+                        //鑾峰彇鐝璇︾粏淇℃伅
+                        AttendanceClassDetailQuery attendanceClassDetailQuery = new AttendanceClassDetailQuery();
+                        List<AttendanceClassDetailEntity> attendanceClassDetailEntities = attendanceClassDetailService.find(attendanceClassDetailQuery.classId(attendanceClassEntity.getId()));
+                        Integer orderNum = 0;
+                        for (AttendanceClassDetailEntity classDetailEntity : attendanceClassDetailEntities) {
+                            orderNum++;
+                            AttendanceRecordDetailEntity recordDetailEntity = new AttendanceRecordDetailEntity();
+                            recordDetailEntity.setShiftsId(classDetailEntity.getId());
+                            recordDetailEntity.setShiftsName(classDetailEntity.getClassName());
+                            recordDetailEntity.setGoWorkResult(3);
+                            recordDetailEntity.setOffWorkResult(3);
+                            recordDetailEntity.setOrderNum(orderNum);
+                            detailEntity.add(recordDetailEntity);
+                        }
+
+                        for (AttendanceClassDetailEntity classDetail :attendanceClassDetailEntities) {
+                            SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
+                            //涓婄彮鎵撳崱鍓嶆椂闂�
+                            Date goWorkDateBefore = sdf.parse(sdf.format(DateUtils.addMinutes(classDetail.getGoWorkDate(), -classDetail.getGoWorkDateBefore())));
+                            //涓婄彮鎵撳崱鍚庢椂闂�
+                            Date goWorkDateAfter = sdf.parse(sdf.format(DateUtils.addMinutes(classDetail.getGoWorkDate(), classDetail.getGoWorkDateAfter())));
+                            //涓嬬彮鎵撳崱鍓嶆椂闂�
+                            Date offWorkDateBefore = sdf.parse(sdf.format(DateUtils.addMinutes(classDetail.getOffWorkDate(), -classDetail.getOffWorkDateBefore())));
+                            //涓嬬彮鎵撳崱鍚庢椂闂�
+                            Date offWorkDateAfter = sdf.parse(sdf.format(DateUtils.addMinutes(classDetail.getOffWorkDate(), classDetail.getOffWorkDateAfter())));
+                            //鍒ゆ柇鑰冨嫟鏃堕棿鏄惁鍦ㄤ笂鐝墦鍗″尯闂村唴  true 鍦� false 涓嶅湪
+                            boolean goInTime = isInTime(sdf.parse(sdf.format(attendanceDate)), goWorkDateBefore, goWorkDateAfter);
+                            //鍒ゆ柇鑰冨嫟鏃堕棿鏄惁鍦ㄤ笅鐝墦鍗″尯闂村唴
+                            boolean offInTime = isInTime(sdf.parse(sdf.format(attendanceDate)), offWorkDateBefore, offWorkDateAfter);
+                            if (goInTime==false && offInTime==false){
+                                continue;
+                            }
+                            if (goInTime) {
+                                //濡傛灉鏄笂鐝墦鍗�,鍒ゆ柇鏄惁杩熷埌
+                                boolean inTime = isInTime(sdf.parse(sdf.format(attendanceDate)), goWorkDateBefore,sdf.parse(sdf.format(classDetail.getGoWorkDate())));
+                                if (!inTime) {
+                                    for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntity) {
+                                        if (attendanceRecordDetailEntity.getShiftsId().equals(classDetail.getClassId())){
+                                            attendanceRecordDetailEntity.setGoWorkResult(4);
+                                            attendanceRecordDetailEntity.setGoWorkDate(attendanceDate);
+                                        }
+                                    }
+                                }
+                                if (inTime) {
+                                    for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntity) {
+                                        if (attendanceRecordDetailEntity.getShiftsId().equals(classDetail.getClassId())){
+                                            attendanceRecordDetailEntity.setGoWorkResult(1);
+                                            attendanceRecordDetailEntity.setGoWorkDate(attendanceDate);
+                                        }
+                                    }
+                                }
+                            }
+                            if(offInTime){
+                                boolean inTime = isInTime(sdf.parse(sdf.format(attendanceDate)),sdf.parse(sdf.format( classDetail.getOffWorkDate())), offWorkDateAfter);
+                                if (!inTime){
+                                    for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntity) {
+                                        if (attendanceRecordDetailEntity.getShiftsId().equals(classDetail.getClassId())){
+                                            attendanceRecordDetailEntity.setOffWorkResult(5);
+                                            attendanceRecordDetailEntity.setOffWorkDate(attendanceDate);
+                                        }
+                                    }
+                                }
+                                if (inTime){
+                                    for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntity) {
+                                        if (attendanceRecordDetailEntity.getShiftsId().equals(classDetail.getClassId())){
+                                            attendanceRecordDetailEntity.setOffWorkResult(1);
+                                            attendanceRecordDetailEntity.setOffWorkDate(attendanceDate);
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    //濡傛灉鑰冨嫟浜哄憳淇℃伅list闀垮害澶т簬1 鍒欒鑰冨嫟浜哄憳鏈夊涓€冨嫟缁�.
+                    if (StringUtils.isNotNull(attendanceGroupStaffEntities) && attendanceGroupStaffEntities.size()>1){
+                        for (AttendanceGroupStaffEntity groupStaffEntity:attendanceGroupStaffEntities){
+                            {
+                                //鏌ヨ鑰冨嫟缁�
+                                AttendanceGroupQuery attendanceGroupQuery = new AttendanceGroupQuery();
+                                AttendanceGroupEntity attendanceGroupEntity = attendanceGroupService.selectOne(attendanceGroupQuery.id(groupStaffEntity.getGroupId()));
+                                //鏌ヨ鑰冨嫟缁勮缁嗕俊鎭幏鍙栫彮娆�
+                                AttendanceGroupFixedworkQuery attendanceGroupFixedworkQuery = new AttendanceGroupFixedworkQuery();
+                                AttendanceGroupFixedworkEntity attendanceGroupFixedworkEntity = attendanceGroupFixedworkService.selectOne(attendanceGroupFixedworkQuery.groupId(attendanceGroupEntity.getId()));
+                                //鍒ゆ柇褰撳墠鑰冨嫟鏃ユ湡涓哄懆鍑�
+                                Date attendanceDate1 = attendanceDate;
+                                String week = this.getWeek(attendanceDate1);
+                                //閫氳繃鑰冨嫟鏃ユ湡鐨勬槦鏈熸嬁鍒扮彮娆d.
+                                Long weekClassId = this.getWeekClassId(attendanceGroupFixedworkEntity, week);
+                                //weekClassId涓�-1 鍒欎笉鍦ㄨ€冨嫟
+                                if (weekClassId==-1L){
+                                    //璺宠繃鏈寰幆
+                                    continue;
+                                }
+                                //鑾峰彇鐝淇℃伅
+                                AttendanceClassQuery attendanceClassQuery = new AttendanceClassQuery();
+                                AttendanceClassEntity attendanceClassEntity = attendanceClassService.selectOne(attendanceClassQuery.id(weekClassId));
+                                //鑾峰彇鐝璇︾粏淇℃伅
+                                AttendanceClassDetailQuery attendanceClassDetailQuery = new AttendanceClassDetailQuery();
+                                List<AttendanceClassDetailEntity> attendanceClassDetailEntities = attendanceClassDetailService.find(attendanceClassDetailQuery.classId(attendanceClassEntity.getId()));
+                                Integer orderNum = 0;
+                                for (AttendanceClassDetailEntity classDetailEntity : attendanceClassDetailEntities) {
+                                    orderNum++;
+                                    AttendanceRecordDetailEntity recordDetailEntity = new AttendanceRecordDetailEntity();
+                                    recordDetailEntity.setShiftsId(classDetailEntity.getId());
+                                    recordDetailEntity.setShiftsName(classDetailEntity.getClassName());
+                                    recordDetailEntity.setGoWorkResult(3);
+                                    recordDetailEntity.setOffWorkResult(3);
+                                    recordDetailEntity.setOrderNum(orderNum);
+                                    detailEntity.add(recordDetailEntity);
+                                }
+                                for (AttendanceClassDetailEntity classDetail :attendanceClassDetailEntities) {
+                                    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
+                                    //涓婄彮鎵撳崱鍓嶆椂闂�
+                                    Date goWorkDateBefore = sdf.parse(sdf.format(DateUtils.addMinutes(classDetail.getGoWorkDate(), -classDetail.getGoWorkDateBefore())));
+                                    //涓婄彮鎵撳崱鍚庢椂闂�
+                                    Date goWorkDateAfter = sdf.parse(sdf.format(DateUtils.addMinutes(classDetail.getGoWorkDate(), classDetail.getGoWorkDateAfter())));
+                                    //涓嬬彮鎵撳崱鍓嶆椂闂�
+                                    Date offWorkDateBefore = sdf.parse(sdf.format(DateUtils.addMinutes(classDetail.getOffWorkDate(), -classDetail.getOffWorkDateBefore())));
+                                    //涓嬬彮鎵撳崱鍚庢椂闂�
+                                    Date offWorkDateAfter = sdf.parse(sdf.format(DateUtils.addMinutes(classDetail.getOffWorkDate(), classDetail.getOffWorkDateAfter())));
+                                    //鍒ゆ柇鑰冨嫟鏃堕棿鏄惁鍦ㄤ笂鐝墦鍗″尯闂村唴  true 鍦� false 涓嶅湪
+                                    boolean goInTime = isInTime(sdf.parse(sdf.format(attendanceDate)), goWorkDateBefore, goWorkDateAfter);
+                                    //鍒ゆ柇鑰冨嫟鏃堕棿鏄惁鍦ㄤ笅鐝墦鍗″尯闂村唴
+                                    boolean offInTime = isInTime(sdf.parse(sdf.format(attendanceDate)), offWorkDateBefore, offWorkDateAfter);
+                                    if (goInTime==false&&offInTime==false){
+                                        continue;
+                                    }
+                                    if (goInTime) {
+                                        //濡傛灉鏄笂鐝墦鍗�,鍒ゆ柇鏄惁杩熷埌
+                                        boolean inTime = isInTime(sdf.parse(sdf.format(attendanceDate)), goWorkDateBefore,sdf.parse(sdf.format(classDetail.getGoWorkDate())));
+                                        if (!inTime) {
+                                            for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntity) {
+                                                if (attendanceRecordDetailEntity.getShiftsId().equals(classDetail.getClassId())){
+                                                    attendanceRecordDetailEntity.setGoWorkResult(4);
+                                                    attendanceRecordDetailEntity.setGoWorkDate(attendanceDate);
+                                                }
+                                            }
+                                        }
+                                        if (inTime) {
+                                            for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntity) {
+                                                if (attendanceRecordDetailEntity.getShiftsId().equals(classDetail.getClassId())){
+                                                    attendanceRecordDetailEntity.setGoWorkResult(1);
+                                                    attendanceRecordDetailEntity.setGoWorkDate(attendanceDate);
+                                                }
+                                            }
+                                        }
+                                    }
+                                    if(offInTime){
+                                        boolean inTime = isInTime(sdf.parse(sdf.format(attendanceDate)),sdf.parse(sdf.format(classDetail.getOffWorkDate())), offWorkDateAfter);
+                                        if (!inTime){
+                                            for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntity) {
+                                                if (attendanceRecordDetailEntity.getShiftsId().equals(classDetail.getClassId())){
+                                                    attendanceRecordDetailEntity.setOffWorkResult(5);
+                                                    attendanceRecordDetailEntity.setOffWorkDate(attendanceDate);
+                                                }
+                                            }
+                                        }
+                                        if (inTime){
+                                            for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntity) {
+                                                if (attendanceRecordDetailEntity.getShiftsId().equals(classDetail.getClassId())){
+                                                    attendanceRecordDetailEntity.setOffWorkResult(1);
+                                                    attendanceRecordDetailEntity.setOffWorkDate(attendanceDate);
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+                List<AttendanceRecordErrorEntity> errorEntityList = new ArrayList<>();
+                for (AttendanceRecordDetailEntity recordDetailEntity : detailEntity) {
+                    Integer goWorkResult = recordDetailEntity.getGoWorkResult();
+                    Integer offWorkResult = recordDetailEntity.getOffWorkResult();
+                    if (goWorkResult!=1){
+                        AttendanceRecordErrorEntity errorEntity = new AttendanceRecordErrorEntity();
+                        errorEntity.setStaffId(attendanceRecordEntity.getStaffId());
+                        errorEntity.setStaffName(attendanceRecordEntity.getStaffName());
+                        errorEntity.setWorkNum(attendanceRecordEntity.getWorkNum());
+                        errorEntity.setDeptId(attendanceRecordEntity.getDeptId());
+                        errorEntity.setDeptName(attendanceRecordEntity.getDeptName());
+                        errorEntity.setPositionId(attendanceRecordEntity.getPositionId());
+                        errorEntity.setPositionName(attendanceRecordEntity.getPositionName());
+                        errorEntity.setShiftsId(recordDetailEntity.getShiftsId());
+                        errorEntity.setShiftsName(recordDetailEntity.getShiftsName());
+                        errorEntity.setGoOffDateTime(attendanceClassDetailService.selectOne(new AttendanceClassDetailQuery().id(recordDetailEntity.getShiftsId())).getGoWorkDate());
+                        errorEntity.setErrorDateTime(recordDetailEntity.getGoWorkDate());
+                        errorEntity.setActualAttendanceDateTime(recordDetailEntity.getGoWorkDate());
+                        errorEntity.setErrorStatus(recordDetailEntity.getGoWorkResult());
+                        errorEntity.setProcessResult("0");
+                        IUser user = getContext().getUser();
+                        errorEntity.setCreateTime(new Date());
+                        errorEntity.setCreateUserId(user.getId());
+                        errorEntityList.add(errorEntity);
+                    }
+                    if (offWorkResult!=1){
+                        AttendanceRecordErrorEntity errorEntity = new AttendanceRecordErrorEntity();
+                        errorEntity.setStaffId(attendanceRecordEntity.getStaffId());
+                        errorEntity.setStaffName(attendanceRecordEntity.getStaffName());
+                        errorEntity.setWorkNum(attendanceRecordEntity.getWorkNum());
+                        errorEntity.setDeptId(attendanceRecordEntity.getDeptId());
+                        errorEntity.setDeptName(attendanceRecordEntity.getDeptName());
+                        errorEntity.setPositionId(attendanceRecordEntity.getPositionId());
+                        errorEntity.setPositionName(attendanceRecordEntity.getPositionName());
+                        errorEntity.setShiftsId(recordDetailEntity.getShiftsId());
+                        errorEntity.setShiftsName(recordDetailEntity.getShiftsName());
+                        errorEntity.setGoOffDateTime(attendanceClassDetailService.selectOne(new AttendanceClassDetailQuery().id(recordDetailEntity.getShiftsId())).getOffWorkDate());
+                        errorEntity.setErrorDateTime(recordDetailEntity.getOffWorkDate());
+                        errorEntity.setActualAttendanceDateTime(recordDetailEntity.getOffWorkDate());
+                        errorEntity.setErrorStatus(recordDetailEntity.getOffWorkResult());
+                        errorEntity.setProcessResult("0");
+                        IUser user = getContext().getUser();
+                        errorEntity.setCreateTime(new Date());
+                        errorEntity.setCreateUserId(user.getId());
+                        errorEntityList.add(errorEntity);
+                    }
+
+                }
+                if (errorEntityList!=null&&errorEntityList.size()>0){
+                    errorService.save(errorEntityList);
+                }
+                attendanceRecordEntity.setAttendanceRecordDetailList(detailEntity);
+                attendanceRecordService.save(attendanceRecordEntity);
+            }
+
+        }
+
+    }
+
+    public String getWeek(Date date){
+        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;
+    }
+
+    /**
+     *
+     * @param nowTime   褰撳墠鏃堕棿
+     * @param startTime	寮€濮嬫椂闂�
+     * @param endTime   缁撴潫鏃堕棿
+     * @return
+     *  鍒ゆ柇褰撳墠鏃堕棿鍦ㄦ椂闂村尯闂村唴
+     */
+    public static boolean isInTime(Date nowTime, Date startTime, Date endTime) {
+        if (nowTime.getTime() == startTime.getTime()
+                || nowTime.getTime() == endTime.getTime()) {
+            return true;
+        }
+        Calendar date = Calendar.getInstance();
+        date.setTime(nowTime);
+
+        Calendar begin = Calendar.getInstance();
+        begin.setTime(startTime);
+
+        Calendar end = Calendar.getInstance();
+        end.setTime(endTime);
+
+        if (date.after(begin) && date.before(end)) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+
+    @Override
+    protected void doListBefore(AttendanceRecordHikEntity query, Map<String, Object> model, Context context) throws AppException {
+        if (query.getStaffName()!=null && !query.getStaffName().equals("")){
+            String staffName = "%" + query.getStaffName() + "%";
+            query.setStaffName(staffName);
+        }
+        super.doListBefore(query, model, context);
+    }
+
+    @Override
+    public void doExportFileAfter(byte[] data, AttendanceRecordHikEntity query, Context context) throws AppException {
+        InputStream inputStream = new ByteArrayInputStream(data);
+        MultipartFile file = ServletUtils.getMultipartFile(inputStream, "kaoqin.xlsx");
+        String filePath = uploadService.saveFileUpload(file, "file/fileupload",null);
+        AttendanceExportRecordEntity attendanceExportRecordEntity = new AttendanceExportRecordEntity();
+        attendanceExportRecordEntity.initAttrValue();
+        attendanceExportRecordEntity.setFilePath(filePath);
+        if (query.getIdList()!=null){
+            List<Long> idList = query.getIdList();
+            String recordIdList = "";
+            for (Long aLong : idList) {
+                if (recordIdList.equals("")){
+                    recordIdList = recordIdList + aLong;
+                }else {
+                    recordIdList = recordIdList + "銆�" +aLong;
+                }
+            }
+            attendanceExportRecordEntity.setRecordIdList(recordIdList);
+        }
+        if (query.getAttendanceDateStart()!=null){
+            String attendanceDate = query.getAttendanceDateStart() + "~"+query.getAttendanceDateEnd();
+            attendanceExportRecordEntity.setAttendanceDate(attendanceDate);
+        }
+        attendanceExportRecordEntity.setCreateUserId(context.getUser().getId());
+        attendanceExportRecordEntity.setCreateTime(new Date());
+        attendanceExportRecordEntity.setType(1);
+        attendanceExportRecordEntity.setExportOrImport(1);
+        attendanceExportRecordService.save(attendanceExportRecordEntity);
+        super.doExportFileAfter(data, query, context);
+    }
+
+}
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/web/StaffController.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/web/StaffController.java
index 1a14a9eeca24f829727ccf5e6c77b71f73f5619b..e316bc8595e54a21225b41d2fd71f5e78fcc8807 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/web/StaffController.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/web/StaffController.java
@@ -8,6 +8,7 @@ import com.mortals.xhx.module.dept.model.DeptEntity;
 import com.mortals.xhx.module.dept.model.DeptQuery;
 import com.mortals.xhx.module.dept.model.DeptTreeSelect;
 import com.mortals.xhx.module.dept.service.DeptService;
+import com.mortals.xhx.module.job.model.JobEntity;
 import com.mortals.xhx.module.job.model.JobQuery;
 import com.mortals.xhx.module.job.service.JobService;
 import com.mortals.xhx.module.staff.model.StaffEntity;
@@ -106,4 +107,5 @@ public class StaffController extends BaseCRUDJsonBodyMappingController<StaffServ
 
         super.doExportBefore(context, query);
     }
-}
\ No newline at end of file
+}
+
diff --git a/attendance-performance-manager/src/main/resources/sqlmap/module/attendance/AttendanceExportRecordMapper.xml b/attendance-performance-manager/src/main/resources/sqlmap/module/attendance/AttendanceExportRecordMapper.xml
new file mode 100644
index 0000000000000000000000000000000000000000..768bbd91f669b3582bd430321db7e80e323f1dd0
--- /dev/null
+++ b/attendance-performance-manager/src/main/resources/sqlmap/module/attendance/AttendanceExportRecordMapper.xml
@@ -0,0 +1,795 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "mybatis-3-mapper.dtd">
+<mapper namespace="com.mortals.xhx.module.attendance.dao.ibatis.AttendanceExportRecordDaoImpl">
+
+    <!-- 瀛楁鍜屽睘鎬ф槧灏� -->
+    <resultMap type="AttendanceExportRecordEntity" id="AttendanceExportRecordEntity-Map">
+        <id  property="id" column="id" />
+        <result property="deptName" column="deptName" />
+        <result property="groupName" column="groupName" />
+        <result property="className" column="className" />
+        <result property="attendanceDate" column="attendanceDate" />
+        <result property="exportOrImport" column="exportOrImport" />
+        <result property="filePath" column="filePath" />
+        <result property="type" column="type" />
+        <result property="remark" column="remark" />
+        <result property="createUserId" column="createUserId" />
+        <result property="createTime" column="createTime" />
+        <result property="updateUserId" column="updateUserId" />
+        <result property="updateTime" column="updateTime" />
+        <result property="recordIdList" column="recordIdList" />
+
+    </resultMap>
+
+
+    <!-- 琛ㄦ墍鏈夊垪 -->
+    <sql id="_columns">
+        <trim suffixOverrides="," suffix="">
+            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('id') or colPickMode == 1 and data.containsKey('id')))">
+                a.id,
+            </if>
+            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('deptName') or colPickMode == 1 and data.containsKey('deptName')))">
+                a.deptName,
+            </if>
+            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('groupName') or colPickMode == 1 and data.containsKey('groupName')))">
+                a.groupName,
+            </if>
+            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('className') or colPickMode == 1 and data.containsKey('className')))">
+                a.className,
+            </if>
+            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('attendanceDate') or colPickMode == 1 and data.containsKey('attendanceDate')))">
+                a.attendanceDate,
+            </if>
+            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('exportOrImport') or colPickMode == 1 and data.containsKey('exportOrImport')))">
+                a.exportOrImport,
+            </if>
+            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('filePath') or colPickMode == 1 and data.containsKey('filePath')))">
+                a.filePath,
+            </if>
+            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('type') or colPickMode == 1 and data.containsKey('type')))">
+                a.type,
+            </if>
+            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('remark') or colPickMode == 1 and data.containsKey('remark')))">
+                a.remark,
+            </if>
+            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('createUserId') or colPickMode == 1 and data.containsKey('createUserId')))">
+                a.createUserId,
+            </if>
+            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('createTime') or colPickMode == 1 and data.containsKey('createTime')))">
+                a.createTime,
+            </if>
+            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('updateUserId') or colPickMode == 1 and data.containsKey('updateUserId')))">
+                a.updateUserId,
+            </if>
+            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('updateTime') or colPickMode == 1 and data.containsKey('updateTime')))">
+                a.updateTime,
+            </if>
+            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('recordIdList') or colPickMode == 1 and data.containsKey('recordIdList')))">
+                a.recordIdList,
+            </if>
+        </trim>
+    </sql>
+    <!-- 鏂板 鍖哄垎涓婚敭鑷鍔犺繕鏄笟鍔℃彃鍏� -->
+    <insert id="insert" parameterType="AttendanceExportRecordEntity"  useGeneratedKeys="true" keyProperty="id">
+        insert into mortals_xhx_attendance_export_record
+        (deptName,groupName,className,attendanceDate,exportOrImport,filePath,type,remark,createUserId,createTime,updateUserId,updateTime,recordIdList)
+        VALUES
+        (#{deptName},#{groupName},#{className},#{attendanceDate},#{exportOrImport},#{filePath},#{type},#{remark},#{createUserId},#{createTime},#{updateUserId},#{updateTime},#{recordIdList})
+    </insert>
+
+    <!-- 鎵归噺鏂板 -->
+    <insert id="insertBatch" parameterType="paramDto">
+        insert into mortals_xhx_attendance_export_record
+        (deptName,groupName,className,attendanceDate,exportOrImport,filePath,type,remark,createUserId,createTime,updateUserId,updateTime,recordIdList)
+        VALUES
+        <foreach collection="data.dataList" item="item" index="index" separator="," >
+            (#{item.deptName},#{item.groupName},#{item.className},#{item.attendanceDate},#{item.exportOrImport},#{item.filePath},#{item.type},#{item.remark},#{item.createUserId},#{item.createTime},#{item.updateUserId},#{item.updateTime},#{item.recordIdList})
+        </foreach>
+    </insert>
+
+
+    <!-- 鏍规嵁ParamDto鏇存柊 -->
+    <update id="update" parameterType="paramDto">
+        update mortals_xhx_attendance_export_record as a
+        set
+        <trim suffixOverrides="," suffix="">
+            <if test="(colPickMode==0 and data.containsKey('deptName')) or (colPickMode==1 and !data.containsKey('deptName'))">
+                a.deptName=#{data.deptName},
+            </if>
+            <if test="(colPickMode==0 and data.containsKey('groupName')) or (colPickMode==1 and !data.containsKey('groupName'))">
+                a.groupName=#{data.groupName},
+            </if>
+            <if test="(colPickMode==0 and data.containsKey('className')) or (colPickMode==1 and !data.containsKey('className'))">
+                a.className=#{data.className},
+            </if>
+            <if test="(colPickMode==0 and data.containsKey('attendanceDate')) or (colPickMode==1 and !data.containsKey('attendanceDate'))">
+                a.attendanceDate=#{data.attendanceDate},
+            </if>
+            <if test="(colPickMode==0 and data.containsKey('exportOrImport')) or (colPickMode==1 and !data.containsKey('exportOrImport'))">
+                a.exportOrImport=#{data.exportOrImport},
+            </if>
+            <if test="(colPickMode==0 and data.containsKey('exportOrImportIncrement')) or (colPickMode==1 and !data.containsKey('exportOrImportIncrement'))">
+                a.exportOrImport=ifnull(a.exportOrImport,0) + #{data.exportOrImportIncrement},
+            </if>
+            <if test="(colPickMode==0 and data.containsKey('filePath')) or (colPickMode==1 and !data.containsKey('filePath'))">
+                a.filePath=#{data.filePath},
+            </if>
+            <if test="(colPickMode==0 and data.containsKey('type')) or (colPickMode==1 and !data.containsKey('type'))">
+                a.type=#{data.type},
+            </if>
+            <if test="(colPickMode==0 and data.containsKey('typeIncrement')) or (colPickMode==1 and !data.containsKey('typeIncrement'))">
+                a.type=ifnull(a.type,0) + #{data.typeIncrement},
+            </if>
+            <if test="(colPickMode==0 and data.containsKey('remark')) or (colPickMode==1 and !data.containsKey('remark'))">
+                a.remark=#{data.remark},
+            </if>
+            <if test="(colPickMode==0 and data.containsKey('createUserId')) or (colPickMode==1 and !data.containsKey('createUserId'))">
+                a.createUserId=#{data.createUserId},
+            </if>
+            <if test="(colPickMode==0 and data.containsKey('createUserIdIncrement')) or (colPickMode==1 and !data.containsKey('createUserIdIncrement'))">
+                a.createUserId=ifnull(a.createUserId,0) + #{data.createUserIdIncrement},
+            </if>
+            <if test="(colPickMode==0 and data.containsKey('createTime')) or (colPickMode==1 and !data.containsKey('createTime'))">
+                a.createTime=#{data.createTime},
+            </if>
+            <if test="(colPickMode==0 and data.containsKey('updateUserId')) or (colPickMode==1 and !data.containsKey('updateUserId'))">
+                a.updateUserId=#{data.updateUserId},
+            </if>
+            <if test="(colPickMode==0 and data.containsKey('updateUserIdIncrement')) or (colPickMode==1 and !data.containsKey('updateUserIdIncrement'))">
+                a.updateUserId=ifnull(a.updateUserId,0) + #{data.updateUserIdIncrement},
+            </if>
+            <if test="(colPickMode==0 and data.containsKey('updateTime')) or (colPickMode==1 and !data.containsKey('updateTime'))">
+                a.updateTime=#{data.updateTime},
+            </if>
+            <if test="(colPickMode==0 and data.containsKey('recordIdList')) or (colPickMode==1 and !data.containsKey('recordIdList'))">
+                a.recordIdList=#{data.recordIdList},
+            </if>
+        </trim>
+        <trim suffixOverrides="where" suffix="">
+            where
+            <trim prefixOverrides="and" prefix="">
+                <include refid="_condition_"/>
+            </trim>
+        </trim>
+    </update>
+    <!-- 鎵归噺鏇存柊 -->
+    <update id="updateBatch" parameterType="paramDto">
+        update mortals_xhx_attendance_export_record as a
+        <trim prefix="set" suffixOverrides=",">
+            <trim prefix="deptName=(case" suffix="ELSE deptName end),">
+                <foreach collection="data.dataList" item="item" index="index" separator="" >
+                    <if test="(colPickMode==0 and item.containsKey('deptName')) or (colPickMode==1 and !item.containsKey('deptName'))">
+                        when a.id=#{item.id} then #{item.deptName}
+                    </if>
+                </foreach>
+            </trim>
+            <trim prefix="groupName=(case" suffix="ELSE groupName end),">
+                <foreach collection="data.dataList" item="item" index="index" separator="" >
+                    <if test="(colPickMode==0 and item.containsKey('groupName')) or (colPickMode==1 and !item.containsKey('groupName'))">
+                        when a.id=#{item.id} then #{item.groupName}
+                    </if>
+                </foreach>
+            </trim>
+            <trim prefix="className=(case" suffix="ELSE className end),">
+                <foreach collection="data.dataList" item="item" index="index" separator="" >
+                    <if test="(colPickMode==0 and item.containsKey('className')) or (colPickMode==1 and !item.containsKey('className'))">
+                        when a.id=#{item.id} then #{item.className}
+                    </if>
+                </foreach>
+            </trim>
+            <trim prefix="attendanceDate=(case" suffix="ELSE attendanceDate end),">
+                <foreach collection="data.dataList" item="item" index="index" separator="" >
+                    <if test="(colPickMode==0 and item.containsKey('attendanceDate')) or (colPickMode==1 and !item.containsKey('attendanceDate'))">
+                        when a.id=#{item.id} then #{item.attendanceDate}
+                    </if>
+                </foreach>
+            </trim>
+            <trim prefix="exportOrImport=(case" suffix="ELSE exportOrImport end),">
+                <foreach collection="data.dataList" item="item" index="index" separator="" >
+                    <choose>
+                        <when test="(colPickMode==0 and item.containsKey('exportOrImport')) or (colPickMode==1 and !item.containsKey('exportOrImport'))">
+                            when a.id=#{item.id} then #{item.exportOrImport}
+                        </when>
+                        <when test="(colPickMode==0 and item.containsKey('exportOrImportIncrement')) or (colPickMode==1 and !item.containsKey('exportOrImportIncrement'))">
+                            when a.id=#{item.id} then ifnull(a.exportOrImport,0) + #{item.exportOrImportIncrement}
+                        </when>
+                    </choose>
+                </foreach>
+            </trim>
+            <trim prefix="filePath=(case" suffix="ELSE filePath end),">
+                <foreach collection="data.dataList" item="item" index="index" separator="" >
+                    <if test="(colPickMode==0 and item.containsKey('filePath')) or (colPickMode==1 and !item.containsKey('filePath'))">
+                        when a.id=#{item.id} then #{item.filePath}
+                    </if>
+                </foreach>
+            </trim>
+            <trim prefix="type=(case" suffix="ELSE type end),">
+                <foreach collection="data.dataList" item="item" index="index" separator="" >
+                    <choose>
+                        <when test="(colPickMode==0 and item.containsKey('type')) or (colPickMode==1 and !item.containsKey('type'))">
+                            when a.id=#{item.id} then #{item.type}
+                        </when>
+                        <when test="(colPickMode==0 and item.containsKey('typeIncrement')) or (colPickMode==1 and !item.containsKey('typeIncrement'))">
+                            when a.id=#{item.id} then ifnull(a.type,0) + #{item.typeIncrement}
+                        </when>
+                    </choose>
+                </foreach>
+            </trim>
+            <trim prefix="remark=(case" suffix="ELSE remark end),">
+                <foreach collection="data.dataList" item="item" index="index" separator="" >
+                    <if test="(colPickMode==0 and item.containsKey('remark')) or (colPickMode==1 and !item.containsKey('remark'))">
+                        when a.id=#{item.id} then #{item.remark}
+                    </if>
+                </foreach>
+            </trim>
+            <trim prefix="createUserId=(case" suffix="ELSE createUserId end),">
+                <foreach collection="data.dataList" item="item" index="index" separator="" >
+                    <choose>
+                        <when test="(colPickMode==0 and item.containsKey('createUserId')) or (colPickMode==1 and !item.containsKey('createUserId'))">
+                            when a.id=#{item.id} then #{item.createUserId}
+                        </when>
+                        <when test="(colPickMode==0 and item.containsKey('createUserIdIncrement')) or (colPickMode==1 and !item.containsKey('createUserIdIncrement'))">
+                            when a.id=#{item.id} then ifnull(a.createUserId,0) + #{item.createUserIdIncrement}
+                        </when>
+                    </choose>
+                </foreach>
+            </trim>
+            <trim prefix="createTime=(case" suffix="ELSE createTime end),">
+                <foreach collection="data.dataList" item="item" index="index" separator="" >
+                    <if test="(colPickMode==0 and item.containsKey('createTime')) or (colPickMode==1 and !item.containsKey('createTime'))">
+                        when a.id=#{item.id} then #{item.createTime}
+                    </if>
+                </foreach>
+            </trim>
+            <trim prefix="updateUserId=(case" suffix="ELSE updateUserId end),">
+                <foreach collection="data.dataList" item="item" index="index" separator="" >
+                    <choose>
+                        <when test="(colPickMode==0 and item.containsKey('updateUserId')) or (colPickMode==1 and !item.containsKey('updateUserId'))">
+                            when a.id=#{item.id} then #{item.updateUserId}
+                        </when>
+                        <when test="(colPickMode==0 and item.containsKey('updateUserIdIncrement')) or (colPickMode==1 and !item.containsKey('updateUserIdIncrement'))">
+                            when a.id=#{item.id} then ifnull(a.updateUserId,0) + #{item.updateUserIdIncrement}
+                        </when>
+                    </choose>
+                </foreach>
+            </trim>
+            <trim prefix="updateTime=(case" suffix="ELSE updateTime end),">
+                <foreach collection="data.dataList" item="item" index="index" separator="" >
+                    <if test="(colPickMode==0 and item.containsKey('updateTime')) or (colPickMode==1 and !item.containsKey('updateTime'))">
+                        when a.id=#{item.id} then #{item.updateTime}
+                    </if>
+                </foreach>
+            </trim>
+            <trim prefix="recordIdList=(case" suffix="ELSE recordIdList end),">
+                <foreach collection="data.dataList" item="item" index="index" separator="" >
+                    <if test="(colPickMode==0 and item.containsKey('recordIdList')) or (colPickMode==1 and !item.containsKey('recordIdList'))">
+                        when a.id=#{item.id} then #{item.recordIdList}
+                    </if>
+                </foreach>
+            </trim>
+        </trim>
+        where id in
+        <foreach collection="data.dataList" item="item" index="index" open="(" separator="," close=")">
+            #{item.id}
+        </foreach>
+    </update>
+    <!-- 鏍规嵁涓诲仴鏌ヨ -->
+    <select id="getByKey" parameterType="paramDto" resultMap="AttendanceExportRecordEntity-Map">
+        select <include refid="_columns"/>
+        from mortals_xhx_attendance_export_record as a
+        where a.id=#{condition.id}
+    </select>
+    <!-- 鏍规嵁涓诲仴鍒犻櫎 -->
+    <delete id="deleteByKey" parameterType="paramDto">
+        delete a.* from mortals_xhx_attendance_export_record as a where a.id=#{condition.id}
+    </delete>
+    <!-- 鏍规嵁涓诲仴鍒犻櫎涓€鎵癸紝閽堝鍗曚竴涓诲仴鏈夋晥 -->
+    <delete id="deleteByKeys">
+        delete from mortals_xhx_attendance_export_record where id in
+        <foreach collection="array" item="item" index="index" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+    </delete>
+    <!-- 鏍规嵁涓诲仴鍒楄〃鍒犻櫎涓€鎵癸紝閽堝鍗曚竴涓诲仴鏈夋晥 -->
+    <delete id="deleteByKeyList">
+        delete from mortals_xhx_attendance_export_record where id in
+        <foreach collection="list" item="item" index="index" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+    </delete>
+
+    <!-- 鏍规嵁瀵硅薄鍒楄〃鍒犻櫎涓€鎵癸紝閽堝鍗曚竴涓诲仴鏈夋晥 -->
+    <delete id="deleteByEntityList">
+        delete from mortals_xhx_attendance_export_record where id in
+        <foreach collection="list" item="item" index="index" open="(" separator="," close=")">
+            #{item.id}
+        </foreach>
+    </delete>
+    <!-- 鏍规嵁paramDto鍒犻櫎涓€鎵� -->
+    <delete id="deleteByMap" parameterType="paramDto">
+        delete a.* from mortals_xhx_attendance_export_record as a
+        <trim suffixOverrides="where" suffix="">
+            where
+            <trim prefixOverrides="and" prefix="">
+                <include refid="_condition_"/>
+            </trim>
+        </trim>
+    </delete>
+    <!-- 鑾峰彇鍒楄〃 -->
+    <select id="getList" parameterType="paramDto" resultMap="AttendanceExportRecordEntity-Map">
+        select <include refid="_columns"/>
+        from mortals_xhx_attendance_export_record as a
+        <trim suffixOverrides="where" suffix="">
+            where
+            <trim prefixOverrides="and" prefix="">
+                <include refid="_condition_"/>
+            </trim>
+        </trim>
+        <include refid="_orderCols_"/>
+    </select>
+
+
+
+    <!-- 鑾峰彇 -->
+    <select id="getListCount" parameterType="paramDto" resultType="int">
+        select count(1)
+        from mortals_xhx_attendance_export_record as a
+        <trim suffixOverrides="where" suffix="">
+            where
+            <trim prefixOverrides="and" prefix="">
+                <include refid="_condition_"/>
+            </trim>
+        </trim>
+    </select>
+    <!-- 鏉′欢鏄犲皠 -->
+    <sql id="_condition_">
+        <if test="condition != null and !condition.isEmpty()">
+            <!-- 鏉′欢鏄犲皠-鏅€氭潯浠� -->
+            <include refid="_condition_param_">
+                <property name="_conditionParam_" value="condition"/>
+                <property name="_conditionType_" value="and"/>
+            </include>
+            <!-- 鏉′欢鏄犲皠-闆嗗悎涔嬮棿浣跨敤AND锛岄泦鍚堜腑鍏冪礌浣跨敤OR-(list[0].1 or list[0].2) and (list[1].3 or list[1].4) -->
+            <if test="condition.containsKey('andConditionList') and !condition.andConditionList.isEmpty()">
+                and
+                <foreach collection="condition.andConditionList" open="(" close=")" index="index" item="andCondition" separator=" and ">
+                    <trim prefixOverrides="or" prefix="(" suffix=")">
+                        <include refid="_condition_param_">
+                            <property name="_conditionParam_" value="andCondition"/>
+                            <property name="_conditionType_" value="or"/>
+                        </include>
+                    </trim>
+                </foreach>
+            </if>
+            <!-- 鏉′欢鏄犲皠-闆嗗悎涔嬮棿浣跨敤OR锛岄泦鍚堜腑鍏冪礌浣跨敤AND-(list[0].1 and list[0].2) or (list[1].3 and list[1].4) -->
+            <if test="condition.containsKey('orConditionList') and !condition.orConditionList.isEmpty()">
+                and
+                <foreach collection="condition.orConditionList" open="(" close=")" index="index" item="orCondition" separator=" or ">
+                    <trim prefixOverrides="and" prefix="(" suffix=")">
+                        <include refid="_condition_param_">
+                            <property name="_conditionParam_" value="orCondition"/>
+                            <property name="_conditionType_" value="and"/>
+                        </include>
+                    </trim>
+                </foreach>
+            </if>
+        </if>
+    </sql>
+    <!-- 鏉′欢鏄犲皠-浠e弬鏁� -->
+    <sql id="_condition_param_">
+        <bind name="conditionParamRef" value="${_conditionParam_}"/>
+        <if test="conditionParamRef.containsKey('id')">
+            <if test="conditionParamRef.id != null">
+                ${_conditionType_} a.id=#{${_conditionParam_}.id}
+            </if>
+        </if>
+        <if test="conditionParamRef.containsKey('id')">
+            <if test="conditionParamRef.id != null ">
+                ${_conditionType_} a.id = #{${_conditionParam_}.id}
+            </if>
+            <if test="conditionParamRef.id == null">
+                ${_conditionType_} a.id is null
+            </if>
+        </if>
+        <if test="conditionParamRef.containsKey('idList') and conditionParamRef.idList.size() > 0">
+            ${_conditionType_} a.id in
+            <foreach collection="conditionParamRef.idList" open="(" close=")" index="index" item="item" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="conditionParamRef.containsKey('idNotList') and conditionParamRef.idNotList.size() > 0">
+            ${_conditionType_} a.id not in
+            <foreach collection="conditionParamRef.idNotList" open="(" close=")" index="index" item="item" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="conditionParamRef.containsKey('idStart') and conditionParamRef.idStart != null">
+            ${_conditionType_} a.id <![CDATA[ >= ]]> #{${_conditionParam_}.idStart}
+        </if>
+        <if test="conditionParamRef.containsKey('idEnd') and conditionParamRef.idEnd != null">
+            ${_conditionType_} a.id <![CDATA[ <= ]]> #{${_conditionParam_}.idEnd}
+        </if>
+
+
+        <if test="conditionParamRef.containsKey('deptName')">
+            <if test="conditionParamRef.deptName != null and conditionParamRef.deptName != ''">
+                ${_conditionType_} a.deptName like #{${_conditionParam_}.deptName}
+            </if>
+            <if test="conditionParamRef.deptName == null">
+                ${_conditionType_} a.deptName is null
+            </if>
+        </if>
+        <if test="conditionParamRef.containsKey('deptNameList') and conditionParamRef.deptNameList.size() > 0">
+            ${_conditionType_} a.deptName in
+            <foreach collection="conditionParamRef.deptNameList" open="(" close=")" index="index" item="item" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="conditionParamRef.containsKey('deptNameNotList') and conditionParamRef.deptNameNotList.size() > 0">
+            ${_conditionType_} a.deptName not in
+            <foreach collection="conditionParamRef.deptNameNotList" open="(" close=")" index="index" item="item" separator=",">
+                #{item}
+            </foreach>
+        </if>
+
+        <if test="conditionParamRef.containsKey('groupName')">
+            <if test="conditionParamRef.groupName != null and conditionParamRef.groupName != ''">
+                ${_conditionType_} a.groupName like #{${_conditionParam_}.groupName}
+            </if>
+            <if test="conditionParamRef.groupName == null">
+                ${_conditionType_} a.groupName is null
+            </if>
+        </if>
+        <if test="conditionParamRef.containsKey('groupNameList') and conditionParamRef.groupNameList.size() > 0">
+            ${_conditionType_} a.groupName in
+            <foreach collection="conditionParamRef.groupNameList" open="(" close=")" index="index" item="item" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="conditionParamRef.containsKey('groupNameNotList') and conditionParamRef.groupNameNotList.size() > 0">
+            ${_conditionType_} a.groupName not in
+            <foreach collection="conditionParamRef.groupNameNotList" open="(" close=")" index="index" item="item" separator=",">
+                #{item}
+            </foreach>
+        </if>
+
+        <if test="conditionParamRef.containsKey('className')">
+            <if test="conditionParamRef.className != null and conditionParamRef.className != ''">
+                ${_conditionType_} a.className like #{${_conditionParam_}.className}
+            </if>
+            <if test="conditionParamRef.className == null">
+                ${_conditionType_} a.className is null
+            </if>
+        </if>
+        <if test="conditionParamRef.containsKey('classNameList') and conditionParamRef.classNameList.size() > 0">
+            ${_conditionType_} a.className in
+            <foreach collection="conditionParamRef.classNameList" open="(" close=")" index="index" item="item" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="conditionParamRef.containsKey('classNameNotList') and conditionParamRef.classNameNotList.size() > 0">
+            ${_conditionType_} a.className not in
+            <foreach collection="conditionParamRef.classNameNotList" open="(" close=")" index="index" item="item" separator=",">
+                #{item}
+            </foreach>
+        </if>
+
+        <if test="conditionParamRef.containsKey('attendanceDate')">
+            <if test="conditionParamRef.attendanceDate != null and conditionParamRef.attendanceDate != ''">
+                ${_conditionType_} a.attendanceDate like #{${_conditionParam_}.attendanceDate}
+            </if>
+            <if test="conditionParamRef.attendanceDate == null">
+                ${_conditionType_} a.attendanceDate is null
+            </if>
+        </if>
+        <if test="conditionParamRef.containsKey('attendanceDateList') and conditionParamRef.attendanceDateList.size() > 0">
+            ${_conditionType_} a.attendanceDate in
+            <foreach collection="conditionParamRef.attendanceDateList" open="(" close=")" index="index" item="item" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="conditionParamRef.containsKey('attendanceDateNotList') and conditionParamRef.attendanceDateNotList.size() > 0">
+            ${_conditionType_} a.attendanceDate not in
+            <foreach collection="conditionParamRef.attendanceDateNotList" open="(" close=")" index="index" item="item" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="conditionParamRef.containsKey('exportOrImport')">
+            <if test="conditionParamRef.exportOrImport != null ">
+                ${_conditionType_} a.exportOrImport = #{${_conditionParam_}.exportOrImport}
+            </if>
+            <if test="conditionParamRef.exportOrImport == null">
+                ${_conditionType_} a.exportOrImport is null
+            </if>
+        </if>
+        <if test="conditionParamRef.containsKey('exportOrImportList') and conditionParamRef.exportOrImportList.size() > 0">
+            ${_conditionType_} a.exportOrImport in
+            <foreach collection="conditionParamRef.exportOrImportList" open="(" close=")" index="index" item="item" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="conditionParamRef.containsKey('exportOrImportNotList') and conditionParamRef.exportOrImportNotList.size() > 0">
+            ${_conditionType_} a.exportOrImport not in
+            <foreach collection="conditionParamRef.exportOrImportNotList" open="(" close=")" index="index" item="item" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="conditionParamRef.containsKey('exportOrImportStart') and conditionParamRef.exportOrImportStart != null">
+            ${_conditionType_} a.exportOrImport <![CDATA[ >= ]]> #{${_conditionParam_}.exportOrImportStart}
+        </if>
+        <if test="conditionParamRef.containsKey('exportOrImportEnd') and conditionParamRef.exportOrImportEnd != null">
+            ${_conditionType_} a.exportOrImport <![CDATA[ <= ]]> #{${_conditionParam_}.exportOrImportEnd}
+        </if>
+
+
+        <if test="conditionParamRef.containsKey('filePath')">
+            <if test="conditionParamRef.filePath != null and conditionParamRef.filePath != ''">
+                ${_conditionType_} a.filePath like #{${_conditionParam_}.filePath}
+            </if>
+            <if test="conditionParamRef.filePath == null">
+                ${_conditionType_} a.filePath is null
+            </if>
+        </if>
+        <if test="conditionParamRef.containsKey('filePathList') and conditionParamRef.filePathList.size() > 0">
+            ${_conditionType_} a.filePath in
+            <foreach collection="conditionParamRef.filePathList" open="(" close=")" index="index" item="item" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="conditionParamRef.containsKey('filePathNotList') and conditionParamRef.filePathNotList.size() > 0">
+            ${_conditionType_} a.filePath not in
+            <foreach collection="conditionParamRef.filePathNotList" open="(" close=")" index="index" item="item" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="conditionParamRef.containsKey('type')">
+            <if test="conditionParamRef.type != null ">
+                ${_conditionType_} a.type = #{${_conditionParam_}.type}
+            </if>
+            <if test="conditionParamRef.type == null">
+                ${_conditionType_} a.type is null
+            </if>
+        </if>
+        <if test="conditionParamRef.containsKey('typeList') and conditionParamRef.typeList.size() > 0">
+            ${_conditionType_} a.type in
+            <foreach collection="conditionParamRef.typeList" open="(" close=")" index="index" item="item" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="conditionParamRef.containsKey('typeNotList') and conditionParamRef.typeNotList.size() > 0">
+            ${_conditionType_} a.type not in
+            <foreach collection="conditionParamRef.typeNotList" open="(" close=")" index="index" item="item" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="conditionParamRef.containsKey('typeStart') and conditionParamRef.typeStart != null">
+            ${_conditionType_} a.type <![CDATA[ >= ]]> #{${_conditionParam_}.typeStart}
+        </if>
+        <if test="conditionParamRef.containsKey('typeEnd') and conditionParamRef.typeEnd != null">
+            ${_conditionType_} a.type <![CDATA[ <= ]]> #{${_conditionParam_}.typeEnd}
+        </if>
+
+
+        <if test="conditionParamRef.containsKey('remark')">
+            <if test="conditionParamRef.remark != null and conditionParamRef.remark != ''">
+                ${_conditionType_} a.remark like #{${_conditionParam_}.remark}
+            </if>
+            <if test="conditionParamRef.remark == null">
+                ${_conditionType_} a.remark is null
+            </if>
+        </if>
+        <if test="conditionParamRef.containsKey('remarkList') and conditionParamRef.remarkList.size() > 0">
+            ${_conditionType_} a.remark in
+            <foreach collection="conditionParamRef.remarkList" open="(" close=")" index="index" item="item" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="conditionParamRef.containsKey('remarkNotList') and conditionParamRef.remarkNotList.size() > 0">
+            ${_conditionType_} a.remark not in
+            <foreach collection="conditionParamRef.remarkNotList" open="(" close=")" index="index" item="item" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="conditionParamRef.containsKey('createUserId')">
+            <if test="conditionParamRef.createUserId != null ">
+                ${_conditionType_} a.createUserId = #{${_conditionParam_}.createUserId}
+            </if>
+            <if test="conditionParamRef.createUserId == null">
+                ${_conditionType_} a.createUserId is null
+            </if>
+        </if>
+        <if test="conditionParamRef.containsKey('createUserIdList') and conditionParamRef.createUserIdList.size() > 0">
+            ${_conditionType_} a.createUserId in
+            <foreach collection="conditionParamRef.createUserIdList" open="(" close=")" index="index" item="item" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="conditionParamRef.containsKey('createUserIdNotList') and conditionParamRef.createUserIdNotList.size() > 0">
+            ${_conditionType_} a.createUserId not in
+            <foreach collection="conditionParamRef.createUserIdNotList" open="(" close=")" index="index" item="item" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="conditionParamRef.containsKey('createUserIdStart') and conditionParamRef.createUserIdStart != null">
+            ${_conditionType_} a.createUserId <![CDATA[ >= ]]> #{${_conditionParam_}.createUserIdStart}
+        </if>
+        <if test="conditionParamRef.containsKey('createUserIdEnd') and conditionParamRef.createUserIdEnd != null">
+            ${_conditionType_} a.createUserId <![CDATA[ <= ]]> #{${_conditionParam_}.createUserIdEnd}
+        </if>
+
+
+        <if test="conditionParamRef.containsKey('createTime')">
+            <if test="conditionParamRef.createTime != null ">
+                ${_conditionType_} a.createTime = #{${_conditionParam_}.createTime}
+            </if>
+            <if test="conditionParamRef.createTime == null">
+                ${_conditionType_} a.createTime is null
+            </if>
+        </if>
+        <if test="conditionParamRef.containsKey('createTimeStart') and conditionParamRef.createTimeStart != null and conditionParamRef.createTimeStart!=''">
+            ${_conditionType_} a.createTime <![CDATA[ >= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.createTimeStart},' 00:00:00'),19),'%Y-%m-%d %k:%i:%s')
+        </if>
+        <if test="conditionParamRef.containsKey('createTimeEnd') and conditionParamRef.createTimeEnd != null and conditionParamRef.createTimeEnd!=''">
+            ${_conditionType_} a.createTime <![CDATA[ <= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.createTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s')
+        </if>
+        <if test="conditionParamRef.containsKey('updateUserId')">
+            <if test="conditionParamRef.updateUserId != null ">
+                ${_conditionType_} a.updateUserId = #{${_conditionParam_}.updateUserId}
+            </if>
+            <if test="conditionParamRef.updateUserId == null">
+                ${_conditionType_} a.updateUserId is null
+            </if>
+        </if>
+        <if test="conditionParamRef.containsKey('updateUserIdList') and conditionParamRef.updateUserIdList.size() > 0">
+            ${_conditionType_} a.updateUserId in
+            <foreach collection="conditionParamRef.updateUserIdList" open="(" close=")" index="index" item="item" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="conditionParamRef.containsKey('updateUserIdNotList') and conditionParamRef.updateUserIdNotList.size() > 0">
+            ${_conditionType_} a.updateUserId not in
+            <foreach collection="conditionParamRef.updateUserIdNotList" open="(" close=")" index="index" item="item" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="conditionParamRef.containsKey('updateUserIdStart') and conditionParamRef.updateUserIdStart != null">
+            ${_conditionType_} a.updateUserId <![CDATA[ >= ]]> #{${_conditionParam_}.updateUserIdStart}
+        </if>
+        <if test="conditionParamRef.containsKey('updateUserIdEnd') and conditionParamRef.updateUserIdEnd != null">
+            ${_conditionType_} a.updateUserId <![CDATA[ <= ]]> #{${_conditionParam_}.updateUserIdEnd}
+        </if>
+
+
+        <if test="conditionParamRef.containsKey('updateTime')">
+            <if test="conditionParamRef.updateTime != null ">
+                ${_conditionType_} a.updateTime = #{${_conditionParam_}.updateTime}
+            </if>
+            <if test="conditionParamRef.updateTime == null">
+                ${_conditionType_} a.updateTime is null
+            </if>
+        </if>
+        <if test="conditionParamRef.containsKey('updateTimeStart') and conditionParamRef.updateTimeStart != null and conditionParamRef.updateTimeStart!=''">
+            ${_conditionType_} a.updateTime <![CDATA[ >= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.updateTimeStart},' 00:00:00'),19),'%Y-%m-%d %k:%i:%s')
+        </if>
+        <if test="conditionParamRef.containsKey('updateTimeEnd') and conditionParamRef.updateTimeEnd != null and conditionParamRef.updateTimeEnd!=''">
+            ${_conditionType_} a.updateTime <![CDATA[ <= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.updateTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s')
+        </if>
+
+        <if test="conditionParamRef.containsKey('recordIdList')">
+            <if test="conditionParamRef.recordIdList != null and conditionParamRef.recordIdList != ''">
+                ${_conditionType_} a.recordIdList like #{${_conditionParam_}.recordIdList}
+            </if>
+            <if test="conditionParamRef.recordIdList == null">
+                ${_conditionType_} a.recordIdList is null
+            </if>
+        </if>
+        <if test="conditionParamRef.containsKey('recordIdListList') and conditionParamRef.recordIdListList.size() > 0">
+            ${_conditionType_} a.recordIdList in
+            <foreach collection="conditionParamRef.recordIdListList" open="(" close=")" index="index" item="item" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="conditionParamRef.containsKey('recordIdListNotList') and conditionParamRef.recordIdListNotList.size() > 0">
+            ${_conditionType_} a.recordIdList not in
+            <foreach collection="conditionParamRef.recordIdListNotList" open="(" close=")" index="index" item="item" separator=",">
+                #{item}
+            </foreach>
+        </if>
+    </sql>
+    <sql id="_orderCols_">
+        <if test="orderColList != null and !orderColList.isEmpty()">
+            order by
+            <trim suffixOverrides=","  suffix="">
+                <foreach collection="orderColList" open="" close="" index="index" item="item" separator=",">
+                    ${item.colName} ${item.sortKind}
+                </foreach>
+            </trim>
+        </if>
+        <if test="(orderColList == null or orderColList.isEmpty()) and orderCol != null and !orderCol.isEmpty()">
+            order by
+            <trim suffixOverrides=","  suffix="">
+                <if test="orderCol.containsKey('id')">
+                    a.id
+                    <if test='orderCol.id != null and "DESC".equalsIgnoreCase(orderCol.id)'>DESC</if>
+                    ,
+                </if>
+                <if test="orderCol.containsKey('deptName')">
+                    a.deptName
+                    <if test='orderCol.deptName != null and "DESC".equalsIgnoreCase(orderCol.deptName)'>DESC</if>
+                    ,
+                </if>
+                <if test="orderCol.containsKey('groupName')">
+                    a.groupName
+                    <if test='orderCol.groupName != null and "DESC".equalsIgnoreCase(orderCol.groupName)'>DESC</if>
+                    ,
+                </if>
+                <if test="orderCol.containsKey('className')">
+                    a.className
+                    <if test='orderCol.className != null and "DESC".equalsIgnoreCase(orderCol.className)'>DESC</if>
+                    ,
+                </if>
+                <if test="orderCol.containsKey('attendanceDate')">
+                    a.attendanceDate
+                    <if test='orderCol.attendanceDate != null and "DESC".equalsIgnoreCase(orderCol.attendanceDate)'>DESC</if>
+                    ,
+                </if>
+                <if test="orderCol.containsKey('exportOrImport')">
+                    a.exportOrImport
+                    <if test='orderCol.exportOrImport != null and "DESC".equalsIgnoreCase(orderCol.exportOrImport)'>DESC</if>
+                    ,
+                </if>
+                <if test="orderCol.containsKey('filePath')">
+                    a.filePath
+                    <if test='orderCol.filePath != null and "DESC".equalsIgnoreCase(orderCol.filePath)'>DESC</if>
+                    ,
+                </if>
+                <if test="orderCol.containsKey('type')">
+                    a.type
+                    <if test='orderCol.type != null and "DESC".equalsIgnoreCase(orderCol.type)'>DESC</if>
+                    ,
+                </if>
+                <if test="orderCol.containsKey('remark')">
+                    a.remark
+                    <if test='orderCol.remark != null and "DESC".equalsIgnoreCase(orderCol.remark)'>DESC</if>
+                    ,
+                </if>
+                <if test="orderCol.containsKey('createUserId')">
+                    a.createUserId
+                    <if test='orderCol.createUserId != null and "DESC".equalsIgnoreCase(orderCol.createUserId)'>DESC</if>
+                    ,
+                </if>
+                <if test="orderCol.containsKey('createTime')">
+                    a.createTime
+                    <if test='orderCol.createTime != null and "DESC".equalsIgnoreCase(orderCol.createTime)'>DESC</if>
+                    ,
+                </if>
+                <if test="orderCol.containsKey('updateUserId')">
+                    a.updateUserId
+                    <if test='orderCol.updateUserId != null and "DESC".equalsIgnoreCase(orderCol.updateUserId)'>DESC</if>
+                    ,
+                </if>
+                <if test="orderCol.containsKey('updateTime')">
+                    a.updateTime
+                    <if test='orderCol.updateTime != null and "DESC".equalsIgnoreCase(orderCol.updateTime)'>DESC</if>
+                    ,
+                </if>
+                <if test="orderCol.containsKey('recordIdList')">
+                    a.recordIdList
+                    <if test='orderCol.recordIdList != null and "DESC".equalsIgnoreCase(orderCol.recordIdList)'>DESC</if>
+                    ,
+                </if>
+            </trim>
+        </if>
+    </sql>
+    <sql id="_group_by_">
+        <if test="groupList != null and !groupList.isEmpty()">
+            GROUP BY
+            <trim suffixOverrides=","  suffix="">
+                <foreach collection="groupList" open="" close="" index="index" item="item" separator=",">
+                    ${item}
+                </foreach>
+            </trim>
+        </if>
+    </sql>
+</mapper>
diff --git a/attendance-performance-manager/src/main/resources/sqlmap/module/attendance/AttendanceGroupFixedworkMapper.xml b/attendance-performance-manager/src/main/resources/sqlmap/module/attendance/AttendanceGroupFixedworkMapper.xml
index b45bc7059a1041a5d3308cdfac0f46cbeb18eac6..379d8f44ede6bb0c9053a2cddfb5a51820e07dc7 100644
--- a/attendance-performance-manager/src/main/resources/sqlmap/module/attendance/AttendanceGroupFixedworkMapper.xml
+++ b/attendance-performance-manager/src/main/resources/sqlmap/module/attendance/AttendanceGroupFixedworkMapper.xml
@@ -1658,4 +1658,4 @@
             </trim>
         </if>
     </sql>
-</mapper>
\ No newline at end of file
+</mapper>
diff --git a/attendance-performance-manager/src/test/java/com/mortals/httpclient/attendance/AttendanceExportRecordController.http b/attendance-performance-manager/src/test/java/com/mortals/httpclient/attendance/AttendanceExportRecordController.http
new file mode 100644
index 0000000000000000000000000000000000000000..a26b3bc67ff90ed344f685464a4f1acfb302541b
--- /dev/null
+++ b/attendance-performance-manager/src/test/java/com/mortals/httpclient/attendance/AttendanceExportRecordController.http
@@ -0,0 +1,66 @@
+###鐧诲綍
+POST {{baseUrl}}/login/login
+Content-Type: application/json
+
+{
+  "loginName":"admin",
+  "password":"admin",
+  "securityCode":"8888"
+}
+
+> {%
+client.global.set("SmsSet_id", JSON.parse(response.body).data.id);
+client.global.set("authToken", JSON.parse(response.body).data.token);
+%}
+
+###瀵煎叆瀵煎嚭璁板綍鍒楄〃
+POST {{baseUrl}}/attendance/export/record/list
+Authorization: {{authToken}}
+Content-Type: application/json
+
+{
+  "page":1,
+  "size":10
+}
+
+
+###瀵煎叆瀵煎嚭璁板綍鏇存柊涓庝繚瀛�
+POST {{baseUrl}}/attendance/export/record/save
+Authorization: {{authToken}}
+Content-Type: application/json
+
+{
+  "deptName":"cuvbax",
+  "groupName":"hgm3yp",
+  "className":"0n52rt",
+  "attendanceDate":"9evgzx",
+  "idList":"4ewzo5",
+  "exportOrImport":554,
+  "filePath":"vp6gcq",
+  "type":451,
+  "remark":"pihagt",
+}
+
+> {%
+client.global.set("AttendanceExportRecord_id", JSON.parse(response.body).data.id);
+%}
+
+###瀵煎叆瀵煎嚭璁板綍鏌ョ湅
+GET {{baseUrl}}/attendance/export/record/info?id={{AttendanceExportRecord_id}}
+Authorization: {{authToken}}
+Accept: application/json
+
+###瀵煎叆瀵煎嚭璁板綍缂栬緫
+GET {{baseUrl}}/attendance/export/record/edit?id={{AttendanceExportRecord_id}}
+Authorization: {{authToken}}
+Accept: application/json
+
+
+###瀵煎叆瀵煎嚭璁板綍鍒犻櫎
+GET {{baseUrl}}/attendance/export/record/delete?id={{AttendanceExportRecord_id}}
+Authorization: {{authToken}}
+Accept: application/json
+
+
+
+
diff --git a/attendance-performance-manager/src/test/java/com/mortals/httpclient/attendance/AttendanceRecordController.http b/attendance-performance-manager/src/test/java/com/mortals/httpclient/attendance/AttendanceRecordController.http
index 727624d40eb5e3d72fc854a7fcb890128489bfda..45a9373165345044024ea0d5d67d140ef4aadc43 100644
--- a/attendance-performance-manager/src/test/java/com/mortals/httpclient/attendance/AttendanceRecordController.http
+++ b/attendance-performance-manager/src/test/java/com/mortals/httpclient/attendance/AttendanceRecordController.http
@@ -32,7 +32,7 @@ Content-Type: application/json
 
 {
         "staffId":702,
-        "staffName":"grenxy",
+        "staffName":"xiaowen",
         "workNum":"957jwe",
         "deptId":609,
         "deptName":"ct2iti",
diff --git a/db/menu.sql b/db/menu.sql
index 909a25c07b063e9d23966d0ea7b191a0484d90b8..c019d00ec62d7b7bc8aa38d3a2d58624311c7847 100644
--- a/db/menu.sql
+++ b/db/menu.sql
@@ -572,3 +572,22 @@ INSERT INTO `mortals_xhx_param` VALUES (null, '璇峰亣绫诲瀷', 'AttendanceVacatio
 INSERT INTO `mortals_xhx_param` VALUES (null, '璇峰亣绫诲瀷', 'AttendanceVacationRecord', 'type', '21', '鎺翰鍋�', 1, 4, 0, 'type', NULL, NULL, NULL);
 INSERT INTO `mortals_xhx_param` VALUES (null, '澧炲噺绫诲瀷', 'AttendanceVacationRecord', 'subAddType', '1', '澧炲姞', 1, 4, 0, 'subAddType', NULL, NULL, NULL);
 INSERT INTO `mortals_xhx_param` VALUES (null, '澧炲噺绫诲瀷', 'AttendanceVacationRecord', 'subAddType', '2', '鎵i櫎', 1, 4, 0, 'subAddType', NULL, NULL, NULL);
+
+-- ----------------------------
+-- 瀵煎叆瀵煎嚭璁板綍鑿滃崟 SQL
+-- ----------------------------
+INSERT INTO `mortals_xhx_menu` VALUES (null, '瀵煎叆瀵煎嚭璁板綍琛�', '/attendance/export/record/list', 0,'', 1, 1, 0, 0,'',NULL, NULL, NULL, 0, 0, 1, NULL, NULL, NULL);
+
+-- ----------------------------
+-- 瀵煎叆瀵煎嚭璁板綍璧勬簮璺緞 SQL
+-- ----------------------------
+INSERT INTO `mortals_xhx_resource` VALUES (null, '瀵煎叆瀵煎嚭璁板綍-鑿滃崟绠$悊-鏌ョ湅', '/attendance/export/record/list,/attendance/export/record/view,/attendance/export/record/info,/attendance/export/record/export,/attendance/export/record/exportExcel,/attendance/export/record/downloadTemplate,/attendance/export/record/download', 3, 0, NULL, NULL, NULL, 0);
+INSERT INTO `mortals_xhx_resource` VALUES (null, '瀵煎叆瀵煎嚭璁板綍-鑿滃崟绠$悊-缁存姢', '/attendance/export/record/add,/attendance/export/record/edit,/attendance/export/record/delete,/attendance/export/record/logicDelete,/attendance/export/record/save,/attendance/export/record/importData', 3, 0, NULL, NULL, NULL, 0);
+
+-- ----------------------------
+-- 瀵煎叆瀵煎嚭璁板綍鍙傛暟 SQL
+-- ----------------------------
+INSERT INTO `mortals_xhx_param` VALUES (null, '瀵煎嚭杩樻槸瀵煎叆', 'AttendanceExportRecord', 'exportOrImport', '1', '瀵煎嚭', 1, 4, 0, 'exportOrImport', NULL, NULL, NULL);
+INSERT INTO `mortals_xhx_param` VALUES (null, '瀵煎嚭杩樻槸瀵煎叆', 'AttendanceExportRecord', 'exportOrImport', '2', '瀵煎叆', 1, 4, 0, 'exportOrImport', NULL, NULL, NULL);
+INSERT INTO `mortals_xhx_param` VALUES (null, '姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�', 'AttendanceExportRecord', 'type', '1', '姹囨€�', 1, 4, 0, 'type', NULL, NULL, NULL);
+INSERT INTO `mortals_xhx_param` VALUES (null, '姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�', 'AttendanceExportRecord', 'type', '2', '姣忔棩鎵撳崱璁板綍', 1, 4, 0, 'type', NULL, NULL, NULL);
diff --git a/db/module.sql b/db/module.sql
index 3ab977a80c4f707666873198ea2a1eea5483c08c..420585e79c6a93d25ca0316ab9f726e086b1486d 100644
--- a/db/module.sql
+++ b/db/module.sql
@@ -785,24 +785,28 @@ PRIMARY KEY  (`id`)
 
 
 
+-- ----------------------------
+-- 瀵煎叆瀵煎嚭璁板綍琛�
+-- ----------------------------
 DROP TABLE IF EXISTS `mortals_xhx_attendance_export_record`;
-CREATE TABLE `mortals_xhx_attendance_export_record` (
-  `id` bigint(20) AUTO_INCREMENT NOT NULL,
-  `deptName` varchar(255) DEFAULT NULL COMMENT '閫夋嫨閮ㄩ棬鍚嶇О',
-  `groupName` varchar(255) DEFAULT NULL COMMENT '閫夋嫨鑰冨嫟缁勫悕绉�',
-  `className` varchar(255) DEFAULT NULL COMMENT '閫夋嫨鐝鍚嶇О',
-  `attendanceDate` varchar(0) DEFAULT NULL COMMENT '閫夋嫨寮€濮嬫椂闂村拰缁撴潫鏃堕棿娈�',
-  `idList` varchar(255) DEFAULT NULL COMMENT '閫夋嫨id鍒楄〃',
-  `exportOrImport` tinyint(2) DEFAULT NULL COMMENT '瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆)',
-  `filePath` varchar(255) DEFAULT NULL COMMENT '瀵煎嚭鏂囦欢璺緞',
-  `type` tinyint(2) DEFAULT NULL COMMENT '姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍)',
-  `remark` varchar(255) DEFAULT NULL COMMENT '澶囨敞',
-  `createUserId` bigint(20) NOT NULL COMMENT '鍒涘缓鐢ㄦ埛',
-  `createTime` datetime NOT NULL COMMENT '鍒涘缓鏃堕棿',
-  `updateUserId` bigint(20) DEFAULT NULL COMMENT '鏇存柊鐢ㄦ埛',
-  `updateTime` datetime DEFAULT NULL COMMENT '鏇存柊鏃堕棿',
-  PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='瀵煎叆瀵煎嚭璁板綍琛�';
+CREATE TABLE mortals_xhx_attendance_export_record(
+    `id` bigint(20)   AUTO_INCREMENT   COMMENT '',
+    `deptName` varchar(255)      COMMENT '閫夋嫨閮ㄩ棬鍚嶇О',
+    `groupName` varchar(255)      COMMENT '閫夋嫨鑰冨嫟缁勫悕绉�',
+    `className` varchar(255)      COMMENT '閫夋嫨鐝鍚嶇О',
+    `attendanceDate` varchar(0)      COMMENT '閫夋嫨寮€濮嬫椂闂村拰缁撴潫鏃堕棿娈�',
+    `exportOrImport` tinyint(2)      COMMENT '瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆)',
+    `filePath` varchar(255)      COMMENT '瀵煎嚭鏂囦欢璺緞',
+    `type` tinyint(2)      COMMENT '姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍)',
+    `remark` varchar(255)      COMMENT '澶囨敞',
+    `createUserId` bigint(20) NOT NULL     COMMENT '鍒涘缓鐢ㄦ埛',
+    `createTime` datetime NOT NULL     COMMENT '鍒涘缓鏃堕棿',
+    `updateUserId` bigint(20)      COMMENT '鏇存柊鐢ㄦ埛',
+    `updateTime` datetime      COMMENT '鏇存柊鏃堕棿',
+    `recordIdList` varchar(255)      COMMENT '閫夋嫨id鍒楄〃',
+    PRIMARY KEY  (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='瀵煎叆瀵煎嚭璁板綍';
+
 
 
 
diff --git a/doc/api.md b/doc/api.md
index ba06bcc6fdcea3472d545a201ef65911a139d97e..73947f5553bc3136c5926a7593e41335c561b668 100644
--- a/doc/api.md
+++ b/doc/api.md
@@ -10580,7 +10580,249 @@ msg|String|娑堟伅|-
 
 ```
 
+## 瀵煎叆瀵煎嚭璁板綍
 
+### 鏌ヨ瀵煎叆瀵煎嚭璁板綍鍒楄〃
+
+**璇锋眰URL:** attendance/export/record/list
+
+**璇锋眰鏂瑰紡:** POST
+
+**鍐呭绫诲瀷:** application/json;charset=utf-8
+
+**绠€瑕佹弿杩�:** 鏌ヨ瀵煎叆瀵煎嚭璁板綍
+
+**璇锋眰鍙傛暟:**
+
+鍙傛暟鍚嶇О|绫诲瀷|蹇呭~|鎻忚堪
+:---|:---|:---|:------
+page|Integer|鍚褰撳墠椤�
+size|Integer|鍚姣忛〉鏉℃暟锛屽€间负-1锛屾煡璇㈡墍鏈夎褰�
+
+**璇锋眰鏍蜂緥:**
+```
+  {
+        "page":1,
+        "size":10
+  }
+
+```
+**鍝嶅簲鍙傛暟:**
+
+鍙傛暟鍚嶇О|鍙傛暟绫诲瀷|鎻忚堪
+:---|:---|:------
+code|Integer|缁撴灉鐮侊紙-1.澶辫触锛�1.鎴愬姛锛�
+msg|String|娑堟伅
+data|object|鏁版嵁瀵硅薄
+&emsp;per_page|Integer|姣忛〉鏉℃暟
+&emsp;total|Integer|鎬绘潯鏁�
+&emsp;last_page|Integer|鎬婚〉鏁�
+&emsp;current_page|Integer|褰撳墠椤�
+&emsp;data|array|缁撴灉闆嗗垪琛▅鏁扮粍
+&emsp;&emsp;id|Long|
+&emsp;&emsp;deptName|String|閫夋嫨閮ㄩ棬鍚嶇О
+&emsp;&emsp;groupName|String|閫夋嫨鑰冨嫟缁勫悕绉�
+&emsp;&emsp;className|String|閫夋嫨鐝鍚嶇О
+&emsp;&emsp;attendanceDate|String|閫夋嫨寮€濮嬫椂闂村拰缁撴潫鏃堕棿娈�
+&emsp;&emsp;idList|String|閫夋嫨id鍒楄〃
+&emsp;&emsp;exportOrImport|Integer|瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆)
+&emsp;&emsp;filePath|String|瀵煎嚭鏂囦欢璺緞
+&emsp;&emsp;type|Integer|姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍)
+&emsp;&emsp;remark|String|澶囨敞
+&emsp;&emsp;createUserId|Long|鍒涘缓鐢ㄦ埛
+&emsp;&emsp;createTime|Date|鍒涘缓鏃堕棿
+&emsp;&emsp;updateUserId|Long|鏇存柊鐢ㄦ埛
+&emsp;&emsp;updateTime|Date|鏇存柊鏃堕棿
+dict|object|瀛楀吀瀵硅薄
+&emsp;exportOrImport|object|瀛楀吀灞炴€у璞★紝璇﹁闄勫綍
+&emsp;type|object|瀛楀吀灞炴€у璞★紝璇﹁闄勫綍
+
+**鍝嶅簲娑堟伅鏍蜂緥:**
+```
+{
+    "code":1,
+    "data":{
+    }
+}
+```
+
+### 鏌ョ湅瀵煎叆瀵煎嚭璁板綍
+
+**璇锋眰URL:** attendance/export/record/info
+
+**璇锋眰鏂瑰紡:** GET
+
+**鍐呭绫诲瀷:** application/json;charset=utf-8
+
+**绠€瑕佹弿杩�:** 鏌ョ湅瀵煎叆瀵煎嚭璁板綍锛岃繑鍥炲疄渚嬭缁嗕俊鎭�
+
+**璇锋眰鍙傛暟:**
+
+鍙傛暟鍚嶇О|绫诲瀷|蹇呭~|鎻忚堪
+:---|:---|:---|:------
+id|Long|鏄瘄ID
+
+**璇锋眰鏍蜂緥:**
+```
+    http://localhost/attendance/export/record/info?id=549
+```
+**鍝嶅簲鍙傛暟:**
+
+鍙傛暟鍚嶇О |鍙傛暟绫诲瀷|鎻忚堪
+:---|:---|:-------
+code|Integer|缁撴灉鐮侊紙-1.澶辫触锛�1.鎴愬姛锛�
+msg|String|娑堟伅
+data|object|鏁版嵁瀵硅薄
+&emsp;id|Long|
+&emsp;deptName|String|閫夋嫨閮ㄩ棬鍚嶇О
+&emsp;groupName|String|閫夋嫨鑰冨嫟缁勫悕绉�
+&emsp;className|String|閫夋嫨鐝鍚嶇О
+&emsp;attendanceDate|String|閫夋嫨寮€濮嬫椂闂村拰缁撴潫鏃堕棿娈�
+&emsp;idList|String|閫夋嫨id鍒楄〃
+&emsp;exportOrImport|Integer|瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆)
+&emsp;filePath|String|瀵煎嚭鏂囦欢璺緞
+&emsp;type|Integer|姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍)
+&emsp;remark|String|澶囨敞
+&emsp;createUserId|Long|鍒涘缓鐢ㄦ埛
+&emsp;createTime|Date|鍒涘缓鏃堕棿
+&emsp;updateUserId|Long|鏇存柊鐢ㄦ埛
+&emsp;updateTime|Date|鏇存柊鏃堕棿
+dict|object|瀛楀吀瀵硅薄
+&emsp;exportOrImport|object|瀛楀吀灞炴€у璞★紝璇﹁闄勫綍
+&emsp;type|object|瀛楀吀灞炴€у璞★紝璇﹁闄勫綍
+
+**鍝嶅簲娑堟伅鏍蜂緥:**
+```
+{
+    "code": 1,
+    "data": {
+            "id":4989,
+            "deptName":"p67b9s",
+            "groupName":"gaxsu2",
+            "className":"8itxcq",
+            "attendanceDate":"ji5yfm",
+            "idList":"uxmkrz",
+            "exportOrImport":3824,
+            "filePath":"we0b2e",
+            "type":7052,
+            "remark":"evkf8r",
+            "createUserId":3510,
+            "createTime":"2023-04-17",
+            "updateUserId":2491,
+            "updateTime":"2023-04-17"
+        }
+}
+```
+
+### 淇濆瓨鏇存柊瀵煎叆瀵煎嚭璁板綍
+
+**璇锋眰URL:** attendance/export/record/save
+
+**璇锋眰鏂瑰紡:** POST
+
+**鍐呭绫诲瀷:** application/json;charset=utf-8
+
+**绠€瑕佹弿杩�:** 淇濆瓨鎴栨洿鏂板鍏ュ鍑鸿褰曪細id涓虹┖鏃朵负鏂板淇濆瓨锛屽惁鍒欎负鏇存柊鎻愪氦
+
+**璇锋眰鍙傛暟:**
+
+鍙傛暟鍚嶇О|绫诲瀷|蹇呭~|鎻忚堪
+:---|:---|:---|:-------
+deptName|String|鍚閫夋嫨閮ㄩ棬鍚嶇О
+groupName|String|鍚閫夋嫨鑰冨嫟缁勫悕绉�
+className|String|鍚閫夋嫨鐝鍚嶇О
+attendanceDate|String|鍚閫夋嫨寮€濮嬫椂闂村拰缁撴潫鏃堕棿娈�
+idList|String|鍚閫夋嫨id鍒楄〃
+exportOrImport|Integer|鍚瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆)
+filePath|String|鍚瀵煎嚭鏂囦欢璺緞
+type|Integer|鍚姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍)
+remark|String|鍚澶囨敞
+
+**璇锋眰鏍蜂緥:**
+```
+{
+    "deptName":"ujkn3k",
+    "groupName":"frq7vh",
+    "className":"lhemhd",
+    "attendanceDate":"nemhiv",
+    "idList":"5jotvw",
+    "exportOrImport":5790,
+    "filePath":"nbfcrc",
+    "type":2027,
+    "remark":"qm9qd0",
+}
+
+```
+**鍝嶅簲鍙傛暟:**
+
+鍙傛暟鍚嶇О |鍙傛暟绫诲瀷|鎻忚堪
+:---|:---|:------
+code|Integer|缁撴灉鐮侊紙-1.澶辫触锛�1.鎴愬姛锛�
+msg|String|娑堟伅
+data|object|鏁版嵁瀵硅薄
+&emsp;id|Long|淇濆瓨鍚庝富閿甶d
+&emsp;entity|object|淇濆瓨鏇存柊瀹炰綋
+&emsp;&emsp;id|Long|
+&emsp;&emsp;deptName|String|閫夋嫨閮ㄩ棬鍚嶇О
+&emsp;&emsp;groupName|String|閫夋嫨鑰冨嫟缁勫悕绉�
+&emsp;&emsp;className|String|閫夋嫨鐝鍚嶇О
+&emsp;&emsp;attendanceDate|String|閫夋嫨寮€濮嬫椂闂村拰缁撴潫鏃堕棿娈�
+&emsp;&emsp;idList|String|閫夋嫨id鍒楄〃
+&emsp;&emsp;exportOrImport|Integer|瀵煎嚭杩樻槸瀵煎叆(1.瀵煎嚭,2.瀵煎叆)
+&emsp;&emsp;filePath|String|瀵煎嚭鏂囦欢璺緞
+&emsp;&emsp;type|Integer|姹囨€昏繕鏄瘡鏃ユ墦鍗¤褰�(1.姹囨€�,2.姣忔棩鎵撳崱璁板綍)
+&emsp;&emsp;remark|String|澶囨敞
+&emsp;&emsp;createUserId|Long|鍒涘缓鐢ㄦ埛
+&emsp;&emsp;createTime|Date|鍒涘缓鏃堕棿
+&emsp;&emsp;updateUserId|Long|鏇存柊鐢ㄦ埛
+&emsp;&emsp;updateTime|Date|鏇存柊鏃堕棿
+
+**鍝嶅簲娑堟伅鏍蜂緥:**
+```
+{
+    "msg":"鏂板妯″潡鎴愬姛",
+    "code":1,
+    "data":{}
+    }
+}
+
+```
+
+### 鍒犻櫎瀵煎叆瀵煎嚭璁板綍
+
+**璇锋眰URL:** attendance/export/record/delete
+
+**璇锋眰鏂瑰紡:** GET
+
+**鍐呭绫诲瀷:** application/json;charset=utf-8
+
+**绠€瑕佹弿杩�:** 鍒犻櫎瀵煎叆瀵煎嚭璁板綍
+
+**璇锋眰鍙傛暟:**
+
+鍙傛暟鍚嶇О|绫诲瀷|蹇呭~|鎻忚堪
+:---|:---|:---|:------
+id|String|鏄瘄鏁扮粍
+
+**璇锋眰鏍蜂緥:**
+```
+    http://localhost:8080/attendance/export/record/delete?id=1&id=2'
+```
+**鍝嶅簲鍙傛暟:**
+
+鍙傛暟鍚嶇О |鍙傛暟绫诲瀷|澶囨敞|鍏跺畠
+---|---|---|---
+code|Integer|缁撴灉鐮侊紙-1.澶辫触锛�1.鎴愬姛锛墊-
+msg|String|娑堟伅|-
+
+**鍝嶅簲娑堟伅鏍蜂緥:**
+```
+{
+    "code":1,
+	"msg":"鎴愬姛"
+}
+
+```
 
 
 ## 瀛楀吀闄勫綍
@@ -10950,4 +11192,4 @@ data|object|鏁版嵁瀵硅薄
     "code":1,
     "data":{}
     }
-}
\ No newline at end of file
+}