This commit is contained in:
zt
2025-09-28 12:31:24 +08:00
parent fa625aff6d
commit eb6a7f2373
8 changed files with 86 additions and 60 deletions

View File

@ -70,4 +70,9 @@ public class UserDTO implements Serializable {
*/
private Date createTime;
/**
* 头像
*/
private String avatarUrl;
}

View File

@ -130,4 +130,9 @@ public interface UserService {
*/
String selectAvatarById(Long userId);
/**
* 通过用户id查询头像
*/
UserDTO selectUser(Long userId);
}

View File

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

View File

@ -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,14 +227,18 @@ 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)
@ -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")) {

View File

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

View File

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

View File

@ -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 {

View File

@ -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) {