月计划应出勤天数子页添加

This commit is contained in:
fl 2025-03-05 18:28:20 +08:00
parent 8244185637
commit 25e131d534
4 changed files with 107 additions and 10 deletions

View File

@ -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<>());
}
}

View File

@ -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<AttClockingRecordVo> getClockingRecordListByUserId(AttMonthReportBean bean);
/**
*
* @param bean
* @return
*/
List<AttMonthDaysMakeUpBean> getAttMonthDaysMakeUp(AttMonthDaysMakeUpBean bean);
}

View File

@ -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<AttMonthDaysMakeUpBean> getAttMonthDaysMakeUp(AttMonthDaysMakeUpBean bean) {
List<AttMonthDaysMakeUpBean> listDays = new ArrayList<>();
String attCurrentMonth = bean.getAttCurrentMonth() + "-01";
//查询历史考勤规则方便分组计算
List<AttGroupBean> 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<List<AttGroupBean>> result = new ArrayList<>();
List<AttGroupBean> currentList = new ArrayList<>();
//查出考勤组
List<AttGroupBean> groupList = attCalService.getSimplyGroupData();
List<Holiday> 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<AttGroupBean> collect = groupList.stream().filter(g -> Objects.equals(g.getGroupId(), v.get(0).getGroupId())).collect(Collectors.toList());
if(!collect.isEmpty()){
//应考勤天数
List<String> 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;
}
}

View File

@ -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转换异常");
}
}
}
}