考勤
This commit is contained in:
@ -70,4 +70,9 @@ public class UserDTO implements Serializable {
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 头像
|
||||
*/
|
||||
private String avatarUrl;
|
||||
|
||||
}
|
||||
|
||||
@ -130,4 +130,9 @@ public interface UserService {
|
||||
*/
|
||||
String selectAvatarById(Long userId);
|
||||
|
||||
/**
|
||||
* 通过用户id查询头像
|
||||
*/
|
||||
UserDTO selectUser(Long userId);
|
||||
|
||||
}
|
||||
|
||||
@ -1127,6 +1127,8 @@ public class SubConstructionUserServiceImpl extends ServiceImpl<SubConstructionU
|
||||
if (CollUtil.isNotEmpty(blackUserIdList)) {
|
||||
lqw.notIn(SubConstructionUser::getSysUserId, blackUserIdList);
|
||||
}
|
||||
//只查施工人员
|
||||
lqw.eq(SubConstructionUser::getUserRole, "0");
|
||||
// 分页查询获取数据
|
||||
Page<SubConstructionUser> constructionUserPage = this.page(pageQuery.build(), lqw);
|
||||
List<SubConstructionUser> constructionUserList = constructionUserPage.getRecords();
|
||||
|
||||
@ -57,9 +57,9 @@ public class AttendanceJob {
|
||||
private IBusWorkWageService workWageService;
|
||||
|
||||
//0系统管理员 1普通人员 2项目管理员 3分包 只有1才生成缺卡记录 无需打卡人员
|
||||
private static final List<String> noClockUserTypes = Arrays.asList("0","2");
|
||||
private static final List<String> noClockUserTypes = Arrays.asList("0", "2");
|
||||
|
||||
// @Scheduled(cron = "0 0/10 * * * ?")
|
||||
// @Scheduled(cron = "0 0/10 * * * ?")
|
||||
@JobExecutor(name = "clockInMiss")
|
||||
public void clockInMiss() {
|
||||
|
||||
@ -90,7 +90,7 @@ public class AttendanceJob {
|
||||
LocalDate date = LocalDate.now();
|
||||
|
||||
//管理员关联多个项目,需要记录是否已生成缺卡记录
|
||||
HashSet<Long> manageUserIds = new HashSet<>();
|
||||
// HashSet<Long> manageUserIds = new HashSet<>();
|
||||
|
||||
List<BusAttendance> missList = new ArrayList<>();
|
||||
for (BusAttendanceRule rule : list) {
|
||||
@ -113,52 +113,44 @@ public class AttendanceJob {
|
||||
}
|
||||
}
|
||||
|
||||
if(checkSkip(rule,date)){
|
||||
if (checkSkip(rule, date)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
//查询项目下的关联人员
|
||||
List<BusUserProjectRelevancy> relevancyList = userProjectRelevancyService.list(Wrappers.lambdaQuery(BusUserProjectRelevancy.class)
|
||||
.eq(BusUserProjectRelevancy::getProjectId, rule.getProjectId()));
|
||||
// //查询项目下的关联人员
|
||||
// List<BusUserProjectRelevancy> relevancyList = userProjectRelevancyService.list(Wrappers.lambdaQuery(BusUserProjectRelevancy.class)
|
||||
// .eq(BusUserProjectRelevancy::getProjectId, rule.getProjectId()));
|
||||
List<SubConstructionUser> constructionUsers = constructionUserService.list(Wrappers.<SubConstructionUser>lambdaQuery()
|
||||
.eq(SubConstructionUser::getProjectId, rule.getProjectId())
|
||||
.isNotNull(SubConstructionUser::getTeamId)
|
||||
.eq(SubConstructionUser::getUserRole, "0") //0-施工人员 1-管理人员 2-分包管理人员
|
||||
);
|
||||
|
||||
|
||||
//查询当天已打上班卡人员
|
||||
List<BusAttendance> attendanceList = attendanceService.list(Wrappers.lambdaQuery(BusAttendance.class)
|
||||
.eq(BusAttendance::getClockDate, date)
|
||||
.eq(BusAttendance::getClockType, BusAttendanceCommuterEnum.CLOCKIN.getValue())
|
||||
.eq(BusAttendance::getProjectId, rule.getProjectId())
|
||||
);
|
||||
List<Long> attendanceUserIds = attendanceList.stream().map(BusAttendance::getUserId).toList();
|
||||
|
||||
|
||||
for (BusUserProjectRelevancy relevancy : relevancyList) {
|
||||
|
||||
if (attendanceUserIds.contains(relevancy.getUserId()) || noClockUserTypes.contains(relevancy.getUserType())) {
|
||||
for (SubConstructionUser constructionUser : constructionUsers) {
|
||||
Long sysUserId = constructionUser.getSysUserId();
|
||||
if (attendanceUserIds.contains(sysUserId)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
BusAttendance busAttendance = new BusAttendance();
|
||||
busAttendance.setProjectId(relevancy.getProjectId());
|
||||
// 管理人员 项目id是0
|
||||
if("2".equals(relevancy.getUserType()) && !manageUserIds.contains(relevancy.getUserId())){
|
||||
manageUserIds.add(relevancy.getUserId());
|
||||
busAttendance.setProjectId(0L);
|
||||
}
|
||||
SubConstructionUser constructionUser = constructionUserService.lambdaQuery()
|
||||
.eq(SubConstructionUser::getSysUserId, relevancy.getUserId())
|
||||
.last("limit 1")
|
||||
.one();
|
||||
if(constructionUser==null){
|
||||
continue;
|
||||
}
|
||||
busAttendance.setUserId(relevancy.getUserId());
|
||||
busAttendance.setProjectId(constructionUser.getProjectId());
|
||||
busAttendance.setUserId(sysUserId);
|
||||
busAttendance.setUserName(constructionUser.getUserName());
|
||||
|
||||
busAttendance.setClockDate(date);
|
||||
busAttendance.setClockType(BusAttendanceCommuterEnum.CLOCKIN.getValue());
|
||||
busAttendance.setRuleTime(rule.getClockInTime());
|
||||
if(leaveService.isLeave(date, relevancy.getUserId())){
|
||||
if (leaveService.isLeave(date, sysUserId)) {
|
||||
busAttendance.setClockStatus(BusAttendanceClockStatusEnum.LEAVE.getValue());
|
||||
}else {
|
||||
} else {
|
||||
busAttendance.setClockStatus(BusAttendanceClockStatusEnum.UNCLOCK.getValue());
|
||||
}
|
||||
busAttendance.setSalary(computeSalary(constructionUser, null));
|
||||
@ -178,7 +170,7 @@ public class AttendanceJob {
|
||||
log.info("执行定时任务:上班缺卡记录生成完成");
|
||||
}
|
||||
|
||||
// @Scheduled(cron = "0 0/10 * * * ?")
|
||||
// @Scheduled(cron = "0 0/10 * * * ?")
|
||||
@JobExecutor(name = "clockOutMiss")
|
||||
public void clockOutMiss() {
|
||||
log.info("执行定时任务:下班缺卡记录生成");
|
||||
@ -208,7 +200,7 @@ public class AttendanceJob {
|
||||
LocalDate date = LocalDate.now();
|
||||
|
||||
//管理员关联多个项目,需要记录是否已生成缺卡记录
|
||||
HashSet<Long> manageUserIds = new HashSet<>();
|
||||
// HashSet<Long> manageUserIds = new HashSet<>();
|
||||
|
||||
|
||||
List<BusAttendance> missList = new ArrayList<>();
|
||||
@ -235,20 +227,24 @@ public class AttendanceJob {
|
||||
date = date.minusDays(1);
|
||||
}
|
||||
}
|
||||
if(checkSkip(rule,date)){
|
||||
if (checkSkip(rule, date)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
//查询项目下的关联人员
|
||||
List<BusUserProjectRelevancy> relevancyList = userProjectRelevancyService.list(Wrappers.lambdaQuery(BusUserProjectRelevancy.class)
|
||||
.eq(BusUserProjectRelevancy::getProjectId, rule.getProjectId()));
|
||||
|
||||
// List<BusUserProjectRelevancy> relevancyList = userProjectRelevancyService.list(Wrappers.lambdaQuery(BusUserProjectRelevancy.class)
|
||||
// .eq(BusUserProjectRelevancy::getProjectId, rule.getProjectId()));
|
||||
List<SubConstructionUser> constructionUsers = constructionUserService.list(Wrappers.<SubConstructionUser>lambdaQuery()
|
||||
.eq(SubConstructionUser::getProjectId, rule.getProjectId())
|
||||
.isNotNull(SubConstructionUser::getTeamId)
|
||||
.eq(SubConstructionUser::getUserRole, "0") //0-施工人员 1-管理人员 2-分包管理人员
|
||||
);
|
||||
//查询当天打卡人员
|
||||
List<BusAttendance> allAttendanceList = attendanceService.list(Wrappers.lambdaQuery(BusAttendance.class)
|
||||
.eq(BusAttendance::getClockDate, date)
|
||||
);
|
||||
|
||||
List<BusAttendance> inAttendanceList = allAttendanceList.stream()
|
||||
List<BusAttendance> inAttendanceList = allAttendanceList.stream()
|
||||
.filter(attendance -> BusAttendanceCommuterEnum.CLOCKIN.getValue().equals(attendance.getClockType())).toList();
|
||||
|
||||
List<BusAttendance> attendanceList = allAttendanceList.stream()
|
||||
@ -257,38 +253,27 @@ public class AttendanceJob {
|
||||
List<Long> attendanceUserIds = attendanceList.stream().map(BusAttendance::getUserId).toList();
|
||||
|
||||
|
||||
for (BusUserProjectRelevancy relevancy : relevancyList) {
|
||||
if (attendanceUserIds.contains(relevancy.getUserId()) || noClockUserTypes.contains(relevancy.getUserType())) {
|
||||
for (SubConstructionUser constructionUser : constructionUsers) {
|
||||
Long sysUserId = constructionUser.getSysUserId();
|
||||
if (attendanceUserIds.contains(sysUserId)) {
|
||||
continue;
|
||||
}
|
||||
BusAttendance busAttendance = new BusAttendance();
|
||||
// 管理人员 项目id是0
|
||||
busAttendance.setProjectId(relevancy.getProjectId());
|
||||
if("2".equals(relevancy.getUserType()) && !manageUserIds.contains(relevancy.getUserId())){
|
||||
manageUserIds.add(relevancy.getUserId());
|
||||
busAttendance.setProjectId(0L);
|
||||
}
|
||||
busAttendance.setProjectId(constructionUser.getProjectId());
|
||||
|
||||
SubConstructionUser constructionUser = constructionUserService.lambdaQuery()
|
||||
.eq(SubConstructionUser::getSysUserId, relevancy.getUserId())
|
||||
.last("limit 1")
|
||||
.one();
|
||||
if(constructionUser==null){
|
||||
continue;
|
||||
}
|
||||
|
||||
busAttendance.setUserId(relevancy.getUserId());
|
||||
busAttendance.setUserId(sysUserId);
|
||||
busAttendance.setUserName(constructionUser.getUserName());
|
||||
|
||||
busAttendance.setClockDate(date);
|
||||
busAttendance.setClockType(BusAttendanceCommuterEnum.CLOCKOUT.getValue());
|
||||
busAttendance.setRuleTime(rule.getClockOutTime());
|
||||
if(leaveService.isLeave(date, relevancy.getUserId())){
|
||||
if (leaveService.isLeave(date, sysUserId)) {
|
||||
busAttendance.setClockStatus(BusAttendanceClockStatusEnum.LEAVE.getValue());
|
||||
}else {
|
||||
} else {
|
||||
busAttendance.setClockStatus(BusAttendanceClockStatusEnum.UNCLOCK.getValue());
|
||||
}
|
||||
List<BusAttendance> list1 = inAttendanceList.stream().filter(vo -> relevancy.getUserId().equals(vo.getUserId())).toList();
|
||||
List<BusAttendance> list1 = inAttendanceList.stream().filter(vo -> sysUserId.equals(vo.getUserId())).toList();
|
||||
busAttendance.setSalary(computeSalary(constructionUser, list1));
|
||||
missList.add(busAttendance);
|
||||
}
|
||||
@ -308,7 +293,7 @@ public class AttendanceJob {
|
||||
/**
|
||||
* 检查是否跳过
|
||||
*/
|
||||
public Boolean checkSkip(BusAttendanceRule rule,LocalDate date) {
|
||||
public Boolean checkSkip(BusAttendanceRule rule, LocalDate date) {
|
||||
//项目异常状态
|
||||
BusProject byId = projectService.getById(rule.getProjectId());
|
||||
if (byId == null || Objects.equals(byId.getStatus(), "1")) {
|
||||
|
||||
@ -887,6 +887,7 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
|
||||
//先查询人员有那些
|
||||
List<SubConstructionUser> list = constructionUserService.list(Wrappers.lambdaQuery(SubConstructionUser.class)
|
||||
.eq(SubConstructionUser::getProjectId, dto.getProjectId())
|
||||
.eq(SubConstructionUser::getUserRole, "0")
|
||||
.eq(dto.getTeamId() != null, SubConstructionUser::getTeamId, dto.getTeamId())
|
||||
.in(dto.getTeamId() == null && "2".equals(appUserType), SubConstructionUser::getTeamId, list2)
|
||||
.eq(StringUtils.isNotBlank(dto.getTypeOfWork()), SubConstructionUser::getTypeOfWork, dto.getTypeOfWork())
|
||||
@ -948,6 +949,7 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
|
||||
return rspData;
|
||||
}
|
||||
|
||||
wrapper.eq(SubConstructionUser::getUserRole, "0");
|
||||
wrapper.in("1".equals(dto.getClockStatus()), SubConstructionUser::getSysUserId, attendanceUserIds);
|
||||
wrapper.notIn("2".equals(dto.getClockStatus()) && CollectionUtil.isNotEmpty(attendanceUserIds), SubConstructionUser::getSysUserId, attendanceUserIds);
|
||||
wrapper.eq(StrUtil.isNotBlank(dto.getTypeOfWork()), SubConstructionUser::getTypeOfWork, dto.getTypeOfWork());
|
||||
@ -1144,10 +1146,17 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
|
||||
@Override
|
||||
public List<BusAttendanceClockDateForTwoWeekVo> getClockDateForTwoWeekList(Long projectId) {
|
||||
LocalDate now = LocalDate.now();
|
||||
|
||||
//查询所有管理员和分包人员 排除
|
||||
List<Long> excludeUserIds = constructionUserService.list(Wrappers.<SubConstructionUser>lambdaQuery()
|
||||
.ne(SubConstructionUser::getUserRole, "0")
|
||||
).stream().map(SubConstructionUser::getSysUserId).toList();
|
||||
|
||||
// 往前14天,包含今天
|
||||
LocalDate startDate = now.minusDays(13);
|
||||
List<BusAttendance> list = list(Wrappers.<BusAttendance>lambdaQuery()
|
||||
.eq(BusAttendance::getProjectId, projectId)
|
||||
.notIn(CollectionUtil.isNotEmpty(excludeUserIds),BusAttendance::getUserId, excludeUserIds)
|
||||
.between(BusAttendance::getClockDate, startDate, now)
|
||||
.orderByAsc(BusAttendance::getClockDate)
|
||||
);
|
||||
|
||||
@ -1202,4 +1202,22 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
|
||||
}
|
||||
return baseMapper.updateById(sysUser)>0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserDTO selectUser(Long userId) {
|
||||
|
||||
SysUser sysUser = baseMapper.selectById(userId);
|
||||
if (sysUser == null) {
|
||||
return null;
|
||||
}
|
||||
UserDTO userDTO = BeanUtil.copyProperties(sysUser, UserDTO.class);
|
||||
|
||||
if(sysUser.getAvatar() != null){
|
||||
SysOss sysOss = ossMapper.selectById(sysUser.getAvatar());
|
||||
if(sysOss != null){
|
||||
userDTO.setAvatarUrl(sysOss.getUrl());
|
||||
}
|
||||
}
|
||||
return userDTO;
|
||||
}
|
||||
}
|
||||
|
||||
@ -74,11 +74,12 @@ public class FlowAppController {
|
||||
if(flowHisTaskVo != null){
|
||||
appVo.setFlowStatus(flowHisTaskVo.getFlowStatus());
|
||||
if(BusinessStatusEnum.WAITING.getStatus().equals(flowHisTaskVo.getFlowStatus())){
|
||||
appVo.setAuditName(flowHisTaskVo.getApproveName());
|
||||
appVo.setAuditName(userService.selectNicknameByIds(flowHisTaskVo.getApprover()));
|
||||
}else {
|
||||
appVo.setApproveName(flowHisTaskVo.getApproveName());
|
||||
if(StrUtil.isNotBlank(flowHisTaskVo.getApprover())){
|
||||
appVo.setApproveAvatar(userService.selectAvatarById(Long.valueOf(flowHisTaskVo.getApprover())));
|
||||
UserDTO userDTO = userService.selectUser(Long.valueOf(flowHisTaskVo.getApprover()));
|
||||
if(userDTO != null){
|
||||
appVo.setApproveAvatar(userDTO.getAvatarUrl());
|
||||
appVo.setApproveName(userDTO.getNickName());
|
||||
}
|
||||
}
|
||||
}else {
|
||||
|
||||
@ -153,6 +153,7 @@ public class WorkflowGlobalListener implements GlobalListener {
|
||||
|
||||
List<UserDTO> userDTOS = flwTaskAssigneeService.fetchUsersByStorageIds(permissionFlag, Long.valueOf(projectId));
|
||||
|
||||
|
||||
flowTask.setPermissionList(userDTOS.stream().map(UserDTO::getUserId).map(String::valueOf).collect(Collectors.toList()));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
|
||||
Reference in New Issue
Block a user