From 3c7f862206f468670ebf42d34745803df1006175 Mon Sep 17 00:00:00 2001
From: liaoxuwei <5789413@qq.com>
Date: Mon, 7 Aug 2023 17:16:49 +0800
Subject: [PATCH] =?UTF-8?q?=E8=80=83=E5=8B=A4=E6=B1=87=E6=80=BB=E4=BB=BB?=
 =?UTF-8?q?=E5=8A=A1=E4=BF=AE=E6=94=B9=EF=BC=8C=E8=80=83=E5=8B=A4=E6=B1=87?=
 =?UTF-8?q?=E6=80=BB=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../dao/AttendanceStaffStatDao.java           |   4 +-
 .../attendance/dao/AttendanceStatDao.java     |   5 +
 .../ibatis/AttendanceStaffStatDaoImpl.java    |   6 +-
 .../dao/ibatis/AttendanceStatDaoImpl.java     |  46 +++++++
 .../model/vo/AttendanceSummaryQuery.java      |   5 +
 .../service/AttendanceStaffStatService.java   |  10 ++
 .../service/AttendanceStatService.java        |   6 +
 .../impl/AttendanceStaffStatServiceImpl.java  |  20 ++-
 .../impl/AttendanceStatServiceImpl.java       |  76 ++++++++++++
 .../web/AttendanceStatController.java         |  45 ++++++-
 .../AttendanceStaffStatMapperExt.xml          |  13 ++
 .../attendance/AttendanceStatMapperExt.xml    | 116 ++++++++++++++++++
 12 files changed, 346 insertions(+), 6 deletions(-)
 create mode 100644 attendance-performance-manager/src/main/resources/sqlmap/module/attendance/AttendanceStaffStatMapperExt.xml
 create mode 100644 attendance-performance-manager/src/main/resources/sqlmap/module/attendance/AttendanceStatMapperExt.xml

diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dao/AttendanceStaffStatDao.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dao/AttendanceStaffStatDao.java
index ee2c596f..ee8b58a7 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dao/AttendanceStaffStatDao.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dao/AttendanceStaffStatDao.java
@@ -2,6 +2,8 @@ package com.mortals.xhx.module.attendance.dao;
 
 import com.mortals.framework.dao.ICRUDDao;
 import com.mortals.xhx.module.attendance.model.AttendanceStaffStatEntity;
+import com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery;
+
 import java.util.List;
 /**
 * 鑰冨嫟浜哄憳姹囨€讳俊鎭疍ao
@@ -13,5 +15,5 @@ import java.util.List;
 
 public interface  AttendanceStaffStatDao extends ICRUDDao<AttendanceStaffStatEntity,Long>{
 
-
+    List<AttendanceStaffStatEntity> getListExt(AttendanceSummaryQuery params);
 }
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dao/AttendanceStatDao.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dao/AttendanceStatDao.java
index dfcac7d2..9ec1aff2 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dao/AttendanceStatDao.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dao/AttendanceStatDao.java
@@ -1,7 +1,10 @@
 package com.mortals.xhx.module.attendance.dao;
 
 import com.mortals.framework.dao.ICRUDDao;
+import com.mortals.framework.model.PageInfo;
+import com.mortals.framework.model.Result;
 import com.mortals.xhx.module.attendance.model.AttendanceStatEntity;
+import com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery;
 
 /**
 * 鑰冨嫟姹囨€讳俊鎭疍ao
@@ -17,4 +20,6 @@ public interface  AttendanceStatDao extends ICRUDDao<AttendanceStatEntity,Long>{
      * */
     AttendanceStatEntity queryEntity(Long staffId);
 
+    Result<AttendanceStatEntity> getListExt(AttendanceSummaryQuery params, PageInfo pageInfo);
+
 }
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dao/ibatis/AttendanceStaffStatDaoImpl.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dao/ibatis/AttendanceStaffStatDaoImpl.java
index 2deea4f7..1cd5dc08 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dao/ibatis/AttendanceStaffStatDaoImpl.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dao/ibatis/AttendanceStaffStatDaoImpl.java
@@ -1,6 +1,7 @@
 package com.mortals.xhx.module.attendance.dao.ibatis;
 
 
+import com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery;
 import org.springframework.stereotype.Repository;
 import com.mortals.xhx.module.attendance.dao.AttendanceStaffStatDao;
 import com.mortals.xhx.module.attendance.model.AttendanceStaffStatEntity;
@@ -17,5 +18,8 @@ import java.util.List;
 public class AttendanceStaffStatDaoImpl extends BaseCRUDDaoMybatis<AttendanceStaffStatEntity,Long> implements AttendanceStaffStatDao {
 
 
-
+    @Override
+    public List<AttendanceStaffStatEntity> getListExt(AttendanceSummaryQuery params) {
+        return this.getSqlSession().selectList(this.getSqlId("getListExt"), params);
+    }
 }
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dao/ibatis/AttendanceStatDaoImpl.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dao/ibatis/AttendanceStatDaoImpl.java
index f5a999c7..416737d1 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dao/ibatis/AttendanceStatDaoImpl.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dao/ibatis/AttendanceStatDaoImpl.java
@@ -2,9 +2,18 @@ package com.mortals.xhx.module.attendance.dao.ibatis;
 
 
 import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis;
+import com.mortals.framework.model.PageInfo;
+import com.mortals.framework.model.ParamDto;
+import com.mortals.framework.model.Result;
 import com.mortals.xhx.module.attendance.dao.AttendanceStatDao;
 import com.mortals.xhx.module.attendance.model.AttendanceStatEntity;
+import com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery;
+import org.apache.ibatis.session.RowBounds;
 import org.springframework.stereotype.Repository;
+
+import java.util.ArrayList;
+import java.util.List;
+
 /**
 * 鑰冨嫟姹囨€讳俊鎭疍aoImpl DAO鎺ュ彛
 *
@@ -19,4 +28,41 @@ public class AttendanceStatDaoImpl extends BaseCRUDDaoMybatis<AttendanceStatEnti
     public AttendanceStatEntity queryEntity(Long staffId) {
         return getSqlSession().selectOne(getSqlId("queryEntity"),staffId);
     }
+
+    @Override
+    public Result<AttendanceStatEntity> getListExt(AttendanceSummaryQuery params, PageInfo pageInfo) {
+        Result result = new Result();
+        List list = null;
+        if (pageInfo.isCountPage()) {
+            int count = this.getCountExt(params);
+            if (count == 0) {
+                list = new ArrayList();
+            } else if (pageInfo.getPrePageResult() == -1) {
+                list = this.getSqlSession().selectList(this.getSqlId("getListExt"), params);
+            } else {
+                RowBounds rowBounds = new RowBounds(pageInfo.getBeginIndex(), pageInfo.getPrePageResult());
+                list = this.getSqlSession().selectList(this.getSqlId("getListExt"), params, rowBounds);
+            }
+
+            pageInfo.setTotalResult(count);
+            result.setPageInfo(pageInfo);
+            result.setList((List)list);
+        } else {
+            if (pageInfo.getPrePageResult() == -1) {
+                list = this.getSqlSession().selectList(this.getSqlId("getListExt"), params);
+            } else {
+                RowBounds rowBounds = new RowBounds(pageInfo.getBeginIndex(), pageInfo.getPrePageResult());
+                list = this.getSqlSession().selectList(this.getSqlId("getListExt"), params, rowBounds);
+            }
+
+            pageInfo.setTotalResult(-1);
+            result.setPageInfo(pageInfo);
+            result.setList(list);
+        }
+        return result;
+    }
+
+    public int getCountExt(AttendanceSummaryQuery paramDto) {
+        return (Integer)this.getSqlSession().selectOne(this.getSqlId("getListCountExt"), paramDto);
+    }
 }
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/AttendanceSummaryQuery.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/AttendanceSummaryQuery.java
index ca5473e3..a3c49daa 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/AttendanceSummaryQuery.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/AttendanceSummaryQuery.java
@@ -13,6 +13,11 @@ public class AttendanceSummaryQuery {
     private String summaryTimeStart;
     private String summaryTimeEnd;
 
+    private Long staffId;
+
+    private Integer page;
+    private Integer size;
+
     public AttendanceSummaryQuery(String summaryTime){
         this.summaryTime = summaryTime;
     }
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceStaffStatService.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceStaffStatService.java
index 50363a7f..e95ee201 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceStaffStatService.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceStaffStatService.java
@@ -1,6 +1,14 @@
 package com.mortals.xhx.module.attendance.service;
+import com.mortals.framework.exception.AppException;
+import com.mortals.framework.model.Context;
+import com.mortals.framework.model.PageInfo;
+import com.mortals.framework.model.Result;
 import com.mortals.framework.service.ICRUDService;
 import com.mortals.xhx.module.attendance.model.AttendanceStaffStatEntity;
+import com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery;
+
+import java.util.List;
+
 /**
 * AttendanceStaffStatService
 *
@@ -11,4 +19,6 @@ import com.mortals.xhx.module.attendance.model.AttendanceStaffStatEntity;
 */
 public interface AttendanceStaffStatService extends ICRUDService<AttendanceStaffStatEntity,Long>{
 
+    List<AttendanceStaffStatEntity> getListExt(AttendanceSummaryQuery params) throws AppException;
+
 }
\ No newline at end of file
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceStatService.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceStatService.java
index 8c4dac16..4963556d 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceStatService.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceStatService.java
@@ -1,4 +1,8 @@
 package com.mortals.xhx.module.attendance.service;
+import com.mortals.framework.exception.AppException;
+import com.mortals.framework.model.Context;
+import com.mortals.framework.model.PageInfo;
+import com.mortals.framework.model.Result;
 import com.mortals.framework.service.ICRUDService;
 import com.mortals.xhx.module.attendance.model.AttendanceStatEntity;
 import com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery;
@@ -18,4 +22,6 @@ public interface AttendanceStatService extends ICRUDService<AttendanceStatEntity
      * @param query
      */
     void doAttendanceSummary(AttendanceSummaryQuery query);
+
+    Result<AttendanceStatEntity> findExt(AttendanceSummaryQuery params, PageInfo pageInfo, Context context) throws AppException;
 }
\ No newline at end of file
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceStaffStatServiceImpl.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceStaffStatServiceImpl.java
index cff12159..f35f115b 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceStaffStatServiceImpl.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceStaffStatServiceImpl.java
@@ -1,4 +1,6 @@
 package com.mortals.xhx.module.attendance.service.impl;
+import com.mortals.framework.util.StringUtils;
+import com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery;
 import org.springframework.stereotype.Service;
 import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
 import com.mortals.framework.exception.AppException;
@@ -6,6 +8,9 @@ import com.mortals.framework.model.Context;
 import com.mortals.xhx.module.attendance.dao.AttendanceStaffStatDao;
 import com.mortals.xhx.module.attendance.model.AttendanceStaffStatEntity;
 import com.mortals.xhx.module.attendance.service.AttendanceStaffStatService;
+
+import java.util.List;
+
 /**
 * AttendanceStaffStatService
 * 鑰冨嫟浜哄憳姹囨€讳俊鎭� service瀹炵幇
@@ -15,5 +20,18 @@ import com.mortals.xhx.module.attendance.service.AttendanceStaffStatService;
 */
 @Service("attendanceStaffStatService")
 public class AttendanceStaffStatServiceImpl extends AbstractCRUDServiceImpl<AttendanceStaffStatDao, AttendanceStaffStatEntity, Long> implements AttendanceStaffStatService {
-    
+
+    @Override
+    public List<AttendanceStaffStatEntity> getListExt(AttendanceSummaryQuery params) throws AppException {
+        if(params==null){
+            throw new AppException("鏌ヨ鏉′欢瀵硅薄涓嶈兘涓虹┖");
+        }
+        if(params.getStaffId()==null){
+            throw new AppException("浜哄憳淇℃伅id涓嶈兘涓虹┖");
+        }
+        if(StringUtils.isEmpty(params.getSummaryTimeStart())||StringUtils.isEmpty(params.getSummaryTimeEnd())){
+            throw new AppException("鏌ヨ鏃ユ湡鑼冨洿涓嶈兘涓虹┖");
+        }
+        return dao.getListExt(params);
+    }
 }
\ No newline at end of file
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceStatServiceImpl.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceStatServiceImpl.java
index ab593d37..1f07f733 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceStatServiceImpl.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceStatServiceImpl.java
@@ -1,6 +1,7 @@
 package com.mortals.xhx.module.attendance.service.impl;
 
 import com.mortals.framework.model.PageInfo;
+import com.mortals.framework.model.Result;
 import com.mortals.framework.util.DateUtils;
 import com.mortals.framework.util.StringUtils;
 import com.mortals.xhx.common.code.LeaveTypeEnum;
@@ -26,6 +27,7 @@ import com.mortals.xhx.module.attendance.model.AttendanceStatEntity;
 import com.mortals.xhx.module.attendance.service.AttendanceStatService;
 
 import java.math.BigDecimal;
+import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
 
@@ -161,9 +163,11 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc
                         BeanUtils.copyProperties(item, attendanceStatEntity, BeanUtil.getNullPropertyNames(item));
                         attendanceStatEntity.setCreateTime(new Date());
                         attendanceStatEntity.setCreateUserId(1l);
+                        attendanceStatEntity.setGoTimes(1);   //榛樿褰撳ぉ鍏ㄥ嫟
                         this.dao.insert(attendanceStatEntity);
                     } else {
                         BeanUtils.copyProperties(item, temp, BeanUtil.getNullPropertyNames(item));
+                        temp.setUpdateTime(new Date());
                         this.dao.update(temp);
                     }
                 }
@@ -174,10 +178,16 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc
             if (CollectionUtils.isNotEmpty(leaveSummaryVoList)) {
                 BigDecimal hour = new BigDecimal(3600);
                 for (LeaveSummaryVo item : leaveSummaryVoList) {
+                    String attendanceSummary = "";
                     AttendanceStatEntity temp = this.selectOne(new AttendanceStatQuery().staffId(item.getStaffId()).year(item.getYear()).month(item.getMonth()).day(item.getDay()));
                     if (temp != null) {
                         BigDecimal leaveTime = new BigDecimal(item.getDuration()).divide(hour, 1, BigDecimal.ROUND_HALF_DOWN);
+                        temp.setGoTimes(0);     //榛樿鍙鏈夎鍋囷紝褰撳ぉ灏变笉绠楀叏鍕�
                         LeaveTypeEnum leaveTypeEnum = LeaveTypeEnum.getByValue(item.getLeaveType());
+                        if(leaveTypeEnum == null){
+                            leaveTypeEnum = LeaveTypeEnum.浜嬪亣;  //榛樿涓轰簨鍋�
+                        }
+                        attendanceSummary = leaveTypeEnum.getDesc()+"*1";
                         switch (leaveTypeEnum) {
                             case 浜嬪亣:
                                 temp.setPersonalLeave(leaveTime);
@@ -215,6 +225,21 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc
                         }
                         this.dao.update(temp);
                     }
+
+                    AttendanceStaffStatEntity staffStat = new AttendanceStaffStatEntity();
+                    staffStat.initAttrValue();
+                    BeanUtils.copyProperties(item, staffStat, BeanUtil.getNullPropertyNames(item));
+                    staffStat.setAttendanceSummary(attendanceSummary);
+                    AttendanceStaffStatEntity staffStatTemp = attendanceStaffStatService.selectOne(new AttendanceStaffStatQuery().staffId(item.getStaffId()).year(item.getYear()).month(item.getMonth()).day(item.getDay()));
+                    if(staffStatTemp!=null){
+                        staffStat.setId(staffStatTemp.getId());
+                        staffStat.setUpdateTime(new Date());
+                        attendanceStaffStatService.update(staffStat);
+                    }else {
+                        staffStat.setCreateTime(new Date());
+                        staffStat.setCreateUserId(1l);
+                        attendanceStaffStatService.save(staffStat);
+                    }
                 }
             }
             log.info("瀹屾垚姹囨€诲綋鍓嶆棩鏈熻鍋囨儏鍐�.....");
@@ -225,8 +250,33 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc
                     AttendanceStatEntity temp = this.selectOne(new AttendanceStatQuery().staffId(item.getStaffId()).year(item.getYear()).month(item.getMonth()).day(item.getDay()));
                     if (temp != null) {
                         BeanUtils.copyProperties(item, temp, BeanUtil.getNullPropertyNames(item));
+                        temp.setGoTimes(0);     //榛樿鍙鏈夊紓甯歌€冨嫟锛屽綋澶╁氨涓嶇畻鍏ㄥ嫟
                         this.dao.update(temp);
                     }
+                    String attendanceSummary = "";
+                    if(item.getMorningTimes()>0){
+                        attendanceSummary+="缂哄崱*"+item.getMorningTimes()+"娆�;";
+                    }
+                    if(item.getLateTimes()>0){
+                        attendanceSummary+="杩熷埌*"+item.getLateTimes()+"娆�;";
+                    }
+                    if(item.getOvertimeTimes()>0){
+                        attendanceSummary+="鏃╅€€*"+item.getOvertimeTimes()+"娆�;";
+                    }
+                    AttendanceStaffStatEntity staffStat = new AttendanceStaffStatEntity();
+                    staffStat.initAttrValue();
+                    BeanUtils.copyProperties(item, staffStat, BeanUtil.getNullPropertyNames(item));
+                    staffStat.setAttendanceSummary(attendanceSummary);
+                    AttendanceStaffStatEntity staffStatTemp = attendanceStaffStatService.selectOne(new AttendanceStaffStatQuery().staffId(item.getStaffId()).year(item.getYear()).month(item.getMonth()).day(item.getDay()));
+                    if(staffStatTemp!=null){
+                        staffStat.setId(staffStatTemp.getId());
+                        staffStat.setUpdateTime(new Date());
+                        attendanceStaffStatService.update(staffStat);
+                    }else {
+                        staffStat.setCreateTime(new Date());
+                        staffStat.setCreateUserId(1l);
+                        attendanceStaffStatService.save(staffStat);
+                    }
                 }
             }
             log.info("瀹屾垚姹囨€诲綋鍓嶆棩鏈熷紓甯歌€冨嫟.....");
@@ -235,4 +285,30 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc
             log.error("鑰冨嫟姹囨€诲嚭閿�",e);
         }
     }
+
+    @Override
+    public Result<AttendanceStatEntity> findExt(AttendanceSummaryQuery params, PageInfo pageInfo, Context context) throws AppException {
+        if(params==null){
+            params = new AttendanceSummaryQuery();
+            Calendar now = Calendar.getInstance();
+            now.setTime(new Date());
+            now.add(Calendar.DAY_OF_MONTH, -30); //榛樿鏌ユ渶杩�30澶╂暟鎹�
+            params.setSummaryTimeStart(DateUtils.getStrDate(now.getTime()));
+            params.setSummaryTimeEnd(DateUtils.getCurrStrDate());
+        }
+        if(pageInfo == null){
+            pageInfo = new PageInfo(10);
+        }
+        Result<AttendanceStatEntity> result = dao.getListExt(params,pageInfo);
+        if(CollectionUtils.isNotEmpty(result.getList())){
+            for(AttendanceStatEntity item:result.getList()){
+                params.setStaffId(item.getStaffId());
+                List<AttendanceStaffStatEntity> statEntities = attendanceStaffStatService.getListExt(params);
+                if(CollectionUtils.isNotEmpty(statEntities)){
+                    item.setAttendanceStaffStatEntities(statEntities);
+                }
+            }
+        }
+        return result;
+    }
 }
\ No newline at end of file
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceStatController.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceStatController.java
index ba73274e..ee3cfc44 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceStatController.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceStatController.java
@@ -133,8 +133,47 @@ public class AttendanceStatController extends BaseCRUDJsonBodyMappingController<
         return dates;
     }
 
-    public static void main(String[] args){
-        List<String> sss = getDatesBetween("2023-07-28","2023-08-04");
-        System.out.println(sss);
+    @PostMapping({"listExt"})
+    @UnAuth
+    public Rest<Object> listExt(@RequestBody AttendanceSummaryQuery query) {
+        Rest<Object> ret = new Rest();
+        Map<String, Object> model = new HashMap();
+        Context context = this.getContext();
+        String busiDesc = "鏌ヨ" + this.getModuleDesc();
+        int code=1;
+        try {
+            PageInfo pageInfo = this.buildPageInfoExt(query);
+            Result<AttendanceStatEntity> result = this.getService().findExt(query, pageInfo, context);
+            model.put("data", result.getList());
+            model.put("pageInfo", result.getPageInfo());
+            this.parsePageInfo(model, result.getPageInfo());
+            model.put("message_info", busiDesc + "鎴愬姛");
+            if (!ObjectUtils.isEmpty(context) && !ObjectUtils.isEmpty(context.getUser())) {
+                this.recordSysLog(this.request, busiDesc + " 銆愭垚鍔熴€�");
+            }
+        } catch (Exception var9) {
+            code = -1;
+            this.doException(this.request, busiDesc, model, var9);
+        }
+
+        this.init(model, context);
+        ret.setCode(code);
+        ret.setData(model);
+        ret.setDict(model.get("dict"));
+        ret.setMsg(model.get("message_info") == null ? "" : model.remove("message_info").toString());
+        return ret;
+    }
+
+    protected PageInfo buildPageInfoExt(AttendanceSummaryQuery query) {
+        PageInfo pageInfo = new PageInfo();
+        if (!ObjectUtils.isEmpty(query) && !ObjectUtils.isEmpty(query.getPage())) {
+            pageInfo.setCurrPage(query.getPage());
+        }
+
+        if (!ObjectUtils.isEmpty(query) && !ObjectUtils.isEmpty(query.getSize())) {
+            pageInfo.setPrePageResult(query.getSize());
+        }
+
+        return pageInfo;
     }
 }
diff --git a/attendance-performance-manager/src/main/resources/sqlmap/module/attendance/AttendanceStaffStatMapperExt.xml b/attendance-performance-manager/src/main/resources/sqlmap/module/attendance/AttendanceStaffStatMapperExt.xml
new file mode 100644
index 00000000..cdf65bb5
--- /dev/null
+++ b/attendance-performance-manager/src/main/resources/sqlmap/module/attendance/AttendanceStaffStatMapperExt.xml
@@ -0,0 +1,13 @@
+<?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.AttendanceStaffStatDaoImpl">
+
+    <select id="getListExt" parameterType="com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery" resultMap="AttendanceStaffStatEntity-Map">
+        select s.*
+        from mortals_xhx_attendance_staff_stat as s
+        where s.staffId=#{staffId}
+        AND STR_TO_DATE(CONCAT(s.`year`,'-',s.`month`,'-',s.`day`),'%Y-%m-%d') <![CDATA[ >= ]]> STR_TO_DATE(#{summaryTimeStart},'%Y-%m-%d')
+        AND STR_TO_DATE(CONCAT(s.`year`,'-',s.`month`,'-',s.`day`),'%Y-%m-%d') <![CDATA[ <= ]]> STR_TO_DATE(#{summaryTimeEnd},'%Y-%m-%d')
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/attendance-performance-manager/src/main/resources/sqlmap/module/attendance/AttendanceStatMapperExt.xml b/attendance-performance-manager/src/main/resources/sqlmap/module/attendance/AttendanceStatMapperExt.xml
new file mode 100644
index 00000000..f8febe84
--- /dev/null
+++ b/attendance-performance-manager/src/main/resources/sqlmap/module/attendance/AttendanceStatMapperExt.xml
@@ -0,0 +1,116 @@
+<?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.AttendanceStatDaoImpl">
+    <select id="getListExt" parameterType="com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery" resultMap="AttendanceStatEntity-Map">
+        SELECT * FROM (
+        SELECT
+        s.staffId,
+        s.staffName,
+        s.deptId,
+        s.deptName,
+        s.phoneNumer,
+        ROUND(IFNULL(sum(s.goTimes),0)/count(1),4) as attendanceRate,
+        sum(s.goTimes) AS goTimes,
+        sum(s.morningTimes) AS morningTimes,
+        sum(s.afternoonTimes) AS afternoonTimes,
+        sum(s.backToUnit) AS backToUnit,
+        sum(s.onDutyLeave) AS onDutyLeave,
+        sum(s.outOfOffice) AS outOfOffice,
+        sum(s.shiftCompensation) AS shiftCompensation,
+        sum(s.physicalExamination) AS physicalExamination,
+        sum(s.quarantine) AS quarantine,
+        sum(s.businessTrip) AS businessTrip,
+        sum(s.publicHoliday) AS publicHoliday,
+        sum(s.sickLeave) AS sickLeave,
+        sum(s.funeralLeave) AS funeralLeave,
+        sum(s.marriageLeave) AS marriageLeave,
+        sum(s.childRearingLeave) AS childRearingLeave,
+        sum(s.maternityLeave) AS maternityLeave,
+        sum(s.transferBack) AS transferBack,
+        sum(s.homeLeave) AS homeLeave,
+        sum(s.breastfeedingLeaveDays) AS breastfeedingLeaveDays,
+        sum(s.personalLeave) AS personalLeave,
+        sum(s.compensatedLeaveDays) AS compensatedLeaveDays,
+        sum(s.annualLeaveDays) AS annualLeaveDays,
+        sum(s.menstrualLeaveDays) AS menstrualLeaveDays,
+        sum(s.paternityLeaveDays) AS paternityLeaveDays,
+        sum(s.absenteeismDays) AS absenteeismDays,
+        sum(s.otherDays) AS otherDays,
+        sum(s.nonCompliancePunch) AS nonCompliancePunch,
+        sum(s.surfingMobileTimes) AS surfingMobileTimes,
+        sum(s.overtimeTimes) AS overtimeTimes,
+        sum(s.vacancy) AS vacancy,
+        sum(s.nonStandardDressTimes) AS nonStandardDressTimes,
+        sum(s.unexcusedMeetingAbsence) AS unexcusedMeetingAbsence,
+        sum(s.earlyLeaveMeeting) AS earlyLeaveMeeting
+        FROM
+        mortals_xhx_attendance_stat s
+        WHERE
+        STR_TO_DATE(CONCAT(s.`year`,'-',s.`month`,'-',s.`day`),'%Y-%m-%d') <![CDATA[ >= ]]> STR_TO_DATE(#{summaryTimeStart},'%Y-%m-%d')
+        AND STR_TO_DATE(CONCAT(s.`year`,'-',s.`month`,'-',s.`day`),'%Y-%m-%d') <![CDATA[ <= ]]> STR_TO_DATE(#{summaryTimeEnd},'%Y-%m-%d')
+        GROUP BY
+        s.staffId,
+        s.staffName,
+        s.deptId,
+        s.deptName,
+        s.phoneNumer
+        ) AS a
+    </select>
+
+    <select id="getListCountExt" parameterType="com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery" resultType="int">
+        SELECT count(1) FROM (
+        SELECT
+        s.staffId,
+        s.staffName,
+        s.deptId,
+        s.deptName,
+        s.phoneNumer,
+        ROUND(IFNULL(sum(s.goTimes),0)/count(1),4) as attendanceRate,
+        sum(s.goTimes) AS goTimes,
+        sum(s.morningTimes) AS morningTimes,
+        sum(s.afternoonTimes) AS afternoonTimes,
+        sum(s.backToUnit) AS backToUnit,
+        sum(s.onDutyLeave) AS onDutyLeave,
+        sum(s.outOfOffice) AS outOfOffice,
+        sum(s.shiftCompensation) AS shiftCompensation,
+        sum(s.physicalExamination) AS physicalExamination,
+        sum(s.quarantine) AS quarantine,
+        sum(s.businessTrip) AS businessTrip,
+        sum(s.publicHoliday) AS publicHoliday,
+        sum(s.sickLeave) AS sickLeave,
+        sum(s.funeralLeave) AS funeralLeave,
+        sum(s.marriageLeave) AS marriageLeave,
+        sum(s.childRearingLeave) AS childRearingLeave,
+        sum(s.maternityLeave) AS maternityLeave,
+        sum(s.transferBack) AS transferBack,
+        sum(s.homeLeave) AS homeLeave,
+        sum(s.breastfeedingLeaveDays) AS breastfeedingLeaveDays,
+        sum(s.personalLeave) AS personalLeave,
+        sum(s.compensatedLeaveDays) AS compensatedLeaveDays,
+        sum(s.annualLeaveDays) AS annualLeaveDays,
+        sum(s.menstrualLeaveDays) AS menstrualLeaveDays,
+        sum(s.paternityLeaveDays) AS paternityLeaveDays,
+        sum(s.absenteeismDays) AS absenteeismDays,
+        sum(s.otherDays) AS otherDays,
+        sum(s.nonCompliancePunch) AS nonCompliancePunch,
+        sum(s.surfingMobileTimes) AS surfingMobileTimes,
+        sum(s.overtimeTimes) AS overtimeTimes,
+        sum(s.vacancy) AS vacancy,
+        sum(s.nonStandardDressTimes) AS nonStandardDressTimes,
+        sum(s.unexcusedMeetingAbsence) AS unexcusedMeetingAbsence,
+        sum(s.earlyLeaveMeeting) AS earlyLeaveMeeting
+        FROM
+        mortals_xhx_attendance_stat s
+        WHERE
+        STR_TO_DATE(CONCAT(s.`year`,'-',s.`month`,'-',s.`day`),'%Y-%m-%d') <![CDATA[ >= ]]> STR_TO_DATE(#{summaryTimeStart},'%Y-%m-%d')
+        AND STR_TO_DATE(CONCAT(s.`year`,'-',s.`month`,'-',s.`day`),'%Y-%m-%d') <![CDATA[ <= ]]> STR_TO_DATE(#{summaryTimeEnd},'%Y-%m-%d')
+        GROUP BY
+        s.staffId,
+        s.staffName,
+        s.deptId,
+        s.deptName,
+        s.phoneNumer
+        ) AS a
+    </select>
+</mapper>
\ No newline at end of file
-- 
2.24.3