diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/controller/AttendanceDetailsController.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/controller/AttendanceDetailsController.java index 6e1acc7..699a6cc 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/controller/AttendanceDetailsController.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/controller/AttendanceDetailsController.java @@ -12,6 +12,7 @@ import com.bonus.system.api.domain.SysRole; import com.bonus.system.api.domain.SysUser; import com.bonus.system.att.entity.AttDataDetailsBean; import com.bonus.system.att.entity.AttDayReportBean; +import com.bonus.system.att.entity.AttMonthDaysMakeUpBean; import com.bonus.system.att.entity.AttMonthReportBean; import com.bonus.system.att.service.AttendanceDetailsService; import com.bonus.system.basic.dao.SysOrgDao; @@ -426,4 +427,19 @@ public class AttendanceDetailsController extends BaseController { } return getDataTableError(new ArrayList<>()); } + + /** + * 获取数据看板-详细记录 + */ + @GetMapping("/getAttMonthDaysMakeUp") + @Log(title = "考勤报表->月报表->出勤天数组成", businessType = BusinessType.QUERY) + public TableDataInfo getAttMonthDaysMakeUp(AttMonthDaysMakeUpBean bean) { + try{ + return getDataTable(attendanceDetailsService.getAttMonthDaysMakeUp(bean)); + }catch (Exception e){ + log.error(e.toString(),e); + } + return getDataTableError(new ArrayList<>()); + } + } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttendanceDetailsService.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttendanceDetailsService.java index 6b0be8a..6cd470c 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttendanceDetailsService.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttendanceDetailsService.java @@ -2,10 +2,7 @@ package com.bonus.system.att.service; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.system.api.domain.MapVo; -import com.bonus.system.att.entity.AttClockingRecordVo; -import com.bonus.system.att.entity.AttDataDetailsBean; -import com.bonus.system.att.entity.AttDayReportBean; -import com.bonus.system.att.entity.AttMonthReportBean; +import com.bonus.system.att.entity.*; import javax.servlet.http.HttpServletResponse; import java.util.List; @@ -119,4 +116,11 @@ public interface AttendanceDetailsService { * @date 2025/2/18 16:00 */ List getClockingRecordListByUserId(AttMonthReportBean bean); + + /** + * + * @param bean + * @return + */ + List getAttMonthDaysMakeUp(AttMonthDaysMakeUpBean bean); } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttendanceDetailsServiceImpl.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttendanceDetailsServiceImpl.java index 803545b..abd4ffb 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttendanceDetailsServiceImpl.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttendanceDetailsServiceImpl.java @@ -7,10 +7,12 @@ import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.security.utils.SecurityUtils; import com.bonus.system.api.domain.MapVo; import com.bonus.system.api.domain.SysUser; +import com.bonus.system.att.dao.AttSourceDataDao; import com.bonus.system.att.dao.AttendanceDetailsDao; import com.bonus.system.att.entity.*; import com.bonus.system.att.tasks.NewAttTask; import com.bonus.system.att.utils.RoleUtil; +import com.bonus.system.att.utils.WorkdayCalculator; import com.bonus.system.basic.domain.SysNotice; import com.bonus.system.basic.service.SysNoticeService; import com.bonus.system.file.service.FileUploadService; @@ -22,7 +24,11 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.concurrent.atomic.AtomicLong; import java.util.stream.Collectors; /** @@ -342,4 +348,67 @@ public class AttendanceDetailsServiceImpl implements AttendanceDetailsService { } return list; } + + + @Resource(name = "AttCalService") + private AttCalService attCalService; + + @Resource(name = "attSourceDataDao") + private AttSourceDataDao attSourceDataDao; + + @Override + public List getAttMonthDaysMakeUp(AttMonthDaysMakeUpBean bean) { + List listDays = new ArrayList<>(); + String attCurrentMonth = bean.getAttCurrentMonth() + "-01"; + //查询历史考勤规则,方便分组计算 + List dataList = attCalService.getAttSettingHistoryByUserAndDate(String.valueOf(bean.getUserId()),attCurrentMonth); + AtomicLong requiredDays = new AtomicLong(); + //以最后一个考勤规则补全剩下当月日期所有考勤规则数据 + // 获取最后一个数据的日期 + AttGroupBean lastData = dataList.get(dataList.size() - 1); + LocalDate lastDate = LocalDate.parse(lastData.getCurrentDay(), DateTimeFormatter.ofPattern("yyyy-MM-dd")); + // 获取当月的总天数 + int lastDayOfMonth = lastDate.lengthOfMonth(); + // 从最后一个日期开始补全当月剩下的日期 + for (int day = lastDate.getDayOfMonth() + 1; day <= lastDayOfMonth; day++) { + LocalDate newDate = lastDate.withDayOfMonth(day); + dataList.add(new AttGroupBean(lastData.getUserId(), lastData.getGroupId(), newDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))); + } + if (!dataList.isEmpty()) { + List> result = new ArrayList<>(); + List currentList = new ArrayList<>(); + //查出考勤组 + List groupList = attCalService.getSimplyGroupData(); + List holidays = attSourceDataDao.selectHolidayByMonth(attCurrentMonth); + Long currentGroupId = dataList.get(0).getGroupId(); + for (AttGroupBean data : dataList) { + if (!Objects.equals(data.getGroupId(), currentGroupId)) { + result.add(currentList); + currentList = new ArrayList<>(); + currentGroupId = data.getGroupId(); + } + currentList.add(data); + } + result.add(currentList); + result.forEach(v -> { + AttMonthDaysMakeUpBean dayBean = new AttMonthDaysMakeUpBean(); + List collect = groupList.stream().filter(g -> Objects.equals(g.getGroupId(), v.get(0).getGroupId())).collect(Collectors.toList()); + if(!collect.isEmpty()){ + //应考勤天数 + List attDayList = WorkdayCalculator.getWorkDay(collect.get(0).getAttDay(), + collect.get(0).getIsHaveHoliday(), holidays, v.get(0).getCurrentDay(),v.get(v.size()-1).getCurrentDay()); + requiredDays.addAndGet(attDayList.size()); + dayBean.setAttCurrentMonth(bean.getAttCurrentMonth()); + dayBean.setAttDays(attDayList.size()); + dayBean.setGroupName(collect.get(0).getGroupName()); + dayBean.setAttRules(collect.get(0).getAttDay()); + dayBean.setIsHaveHoliday(collect.get(0).getIsHaveHoliday() == 1 ? "不打卡" : "打卡"); + dayBean.setAttStartDate(v.get(0).getCurrentDay()); + dayBean.setAttEndDate(v.get(v.size()-1).getCurrentDay()); + listDays.add(dayBean); + } + }); + } + return listDays; + } } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/tasks/WechatTasks.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/tasks/WechatTasks.java index b23a5b5..2a049a1 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/tasks/WechatTasks.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/tasks/WechatTasks.java @@ -20,6 +20,7 @@ import com.bonus.system.basic.domain.SysOrg; import com.bonus.system.evection.entity.EvectionBean; import com.bonus.system.holiday.entity.WorkReportBean; import com.bonus.system.index.entity.MapBean; +import com.fasterxml.jackson.core.JsonProcessingException; import lombok.extern.slf4j.Slf4j; import okhttp3.*; import org.springframework.context.annotation.Configuration; @@ -264,13 +265,20 @@ public class WechatTasks { } else { AttFaceBean user = wechatUserMap.get(userId); //将未审核通过的数据更新到考勤库审核 - if (wechatUser.getUpdateTime().after(user.getUpdateTime())) { - String jsonStr2 = "{\"userId\":\"" + user.getUserId() + "\"}"; - String method2 = "getWeChatFaceListByUserId"; - String string2 = httpPost(method2, jsonStr2); - AttFaceBean wechatFace = FastJsonHelper.jsonStrToBean(string2, AttFaceBean.class); - dao.updateWebFace(wechatFace); + try { + if (wechatUser.getUpdateTime().after(user.getUpdateTime())) { + String jsonStr2 = "{\"userId\":\"" + user.getUserId() + "\"}"; + String method2 = "getWeChatFaceListByUserId"; + String string2 = httpPost(method2, jsonStr2); + AttFaceBean wechatFace = FastJsonHelper.jsonStrToBean(string2, AttFaceBean.class); + dao.updateWebFace(wechatFace); + } + }catch(Exception e){ + System.out.println(wechatUser.getUserId()+"-----"+user.getUserId()); + System.out.println(wechatUser.getUpdateTime()+"-----"+user.getUpdateTime()); + log.error("json转换异常"); } + } } }