diff --git a/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/utils/poi/ExcelUtil.java b/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/utils/poi/ExcelUtil.java index c287c3b5..5a669f60 100644 --- a/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/utils/poi/ExcelUtil.java +++ b/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/utils/poi/ExcelUtil.java @@ -98,7 +98,7 @@ public class ExcelUtil /** * 工作表对象 */ - private Sheet sheet; + protected Sheet sheet; /** * 样式列表 @@ -108,7 +108,7 @@ public class ExcelUtil /** * 导入导出数据列表 */ - private List list; + protected List list; /** * 注解列表 diff --git a/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/domain/AttendanceUbiData.java b/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/domain/AttendanceUbiData.java index 08665a3c..1e59f615 100644 --- a/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/domain/AttendanceUbiData.java +++ b/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/domain/AttendanceUbiData.java @@ -111,6 +111,16 @@ public class AttendanceUbiData extends BaseEntity return userIds; } + private List days; + + public List getDays() { + return days; + } + + public void setDays(List days) { + this.days = days; + } + public void setUserIds(List userIds) { this.userIds = userIds; } diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/AttendanceUbiDataController.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/AttendanceUbiDataController.java index f69044ad..ca06c31f 100644 --- a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/AttendanceUbiDataController.java +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/AttendanceUbiDataController.java @@ -1,5 +1,7 @@ package com.yanzhu.manage.controller; +import com.yanzhu.common.core.annotation.Excel; +import com.yanzhu.common.core.utils.DateUtils; import com.yanzhu.common.core.utils.poi.ExcelUtil; import com.yanzhu.common.core.web.controller.BaseController; import com.yanzhu.common.core.web.domain.AjaxResult; @@ -9,12 +11,14 @@ import com.yanzhu.common.log.enums.BusinessType; import com.yanzhu.common.security.annotation.RequiresPermissions; import com.yanzhu.manage.domain.AttendanceUbiData; import com.yanzhu.manage.service.IAttendanceUbiDataService; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.util.IOUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; -import java.util.List; +import java.util.*; /** * 考勤管理Controller @@ -29,6 +33,7 @@ public class AttendanceUbiDataController extends BaseController @Autowired private IAttendanceUbiDataService attendanceUbiDataService; + /** * 查询考勤管理列表 */ @@ -55,10 +60,81 @@ public class AttendanceUbiDataController extends BaseController } attendanceUbiData.setUserIds(userIds); List userDatas=attendanceUbiDataService.queryStatisticsByUserIds(attendanceUbiData); - data.setRows(userDatas); + //处理汇总数据 + List retUsers= attendanceUbiDataService.procStatistics(attendanceUbiData.getInTime(), datas,userDatas); + data.setRows(retUsers); } return data; } + + @RequiresPermissions("manage:attendanceUbiData:list") + @PostMapping("/statisticsExport") + public void statisticsExport(HttpServletResponse response,AttendanceUbiData attendanceUbiData){ + List list = attendanceUbiDataService.queryStatistics(attendanceUbiData); + if(list.size()>0){ + List userIds=new ArrayList<>(); + for(AttendanceUbiData ad:list){ + userIds.add(ad.getUserId()); + } + attendanceUbiData.setUserIds(userIds); + + List userDatas=attendanceUbiDataService.queryStatisticsByUserIds(attendanceUbiData); + Date inTime=attendanceUbiData.getInTime(); + Calendar calendar = new GregorianCalendar(inTime.getYear(), inTime.getMonth(), 1); + int daysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + //处理汇总数据 + List retUsers= attendanceUbiDataService.procStatistics(attendanceUbiData.getInTime(), list,userDatas); + ExcelUtil util = new ExcelUtil(AttendanceUbiData.class){ + @Override + public void writeSheet() { + createSheet(0,0); + Row row = sheet.createRow(0); + Cell cell=row.createCell(0); + cell.setCellValue("公司"); + cell=row.createCell(1); + cell.setCellValue("项目"); + cell=row.createCell(2); + cell.setCellValue("用户"); + cell=row.createCell(3); + cell.setCellValue("班组"); + cell=row.createCell(4); + cell.setCellValue("工种类型"); + cell=row.createCell(5); + cell.setCellValue("工种岗位"); + for(int i=1;i<=daysInMonth;i++){ + cell=row.createCell(i+5); + cell.setCellValue(i); + } + for(int i=0;i queryStatisticsByUserIds(AttendanceUbiData attendanceUbiData); + + List procStatistics(Date inTime, List datas, List userDatas); } diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/AttendanceUbiDataServiceImpl.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/AttendanceUbiDataServiceImpl.java index 69989e4d..0bcb0336 100644 --- a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/AttendanceUbiDataServiceImpl.java +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/AttendanceUbiDataServiceImpl.java @@ -1,9 +1,10 @@ package com.yanzhu.manage.service.impl; -import java.util.List; +import java.util.*; import com.yanzhu.common.core.context.SecurityContextHolder; import com.yanzhu.common.core.utils.DateUtils; +import com.yanzhu.common.core.utils.StringUtils; import com.yanzhu.manage.domain.AttendanceUbiData; import com.yanzhu.manage.mapper.AttendanceUbiDataMapper; import com.yanzhu.manage.service.IAttendanceUbiDataService; @@ -22,6 +23,7 @@ public class AttendanceUbiDataServiceImpl implements IAttendanceUbiDataService @Autowired private AttendanceUbiDataMapper attendanceUbiDataMapper; + /** * 查询考勤管理 * @@ -112,4 +114,58 @@ public class AttendanceUbiDataServiceImpl implements IAttendanceUbiDataService public List queryStatisticsByUserIds(AttendanceUbiData attendanceUbiData) { return attendanceUbiDataMapper.queryStatisticsByUserIds(attendanceUbiData); } + + @Override + public List procStatistics(Date inTime, List datas, List userDatas) { + List users=new ArrayList<>(); + if(datas.size()==0){ + return users; + } + Calendar calendar = new GregorianCalendar(inTime.getYear(), inTime.getMonth(), 1); + int daysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + for(AttendanceUbiData ad :datas){ + List days=makeEmptyDays(daysInMonth); + List findDatas=findUserDatas(ad,userDatas); + int j=0; + for(AttendanceUbiData fd:findDatas){ + if(j==0){ + fd.setDays(days); + users.add(fd); + } + j++; + Date dt=fd.getInTime(); + String inStr=fd.getInTime()!=null?DateUtils.parseDateToStr("HH:MM:SS",fd.getInTime()):""; + String outStr=fd.getOutTime()!=null?DateUtils.parseDateToStr("HH:MM:SS",fd.getOutTime()):""; + if(dt==null){ + dt=fd.getOutTime(); + } + if(dt==null){ + continue; + } + int day=dt.getDate(); + if(StringUtils.isNotEmpty(inStr) || StringUtils.isNotEmpty(outStr)){ + days.set(day-1,inStr+"-"+outStr); + } + } + } + return users; + } + + private List findUserDatas(AttendanceUbiData ad, List userDatas) { + List list=new ArrayList<>(); + for(AttendanceUbiData it :userDatas){ + if(it.getUserId().equals(ad.getUserId())){ + list.add(it); + } + } + return list; + } + + private List makeEmptyDays(int daysInMonth) { + List days=new ArrayList<>(); + for(int i=0;i diff --git a/yanzhu-ui-vue3/src/views/manage/attendanceUbiData/statistics.vue b/yanzhu-ui-vue3/src/views/manage/attendanceUbiData/statistics.vue index c3dacc86..61183d04 100644 --- a/yanzhu-ui-vue3/src/views/manage/attendanceUbiData/statistics.vue +++ b/yanzhu-ui-vue3/src/views/manage/attendanceUbiData/statistics.vue @@ -26,6 +26,7 @@ 搜索 重置 + 导出 @@ -64,7 +65,7 @@