考勤
This commit is contained in:
@ -70,4 +70,9 @@ public class UserDTO implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private Date createTime;
|
private Date createTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 头像
|
||||||
|
*/
|
||||||
|
private String avatarUrl;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -130,4 +130,9 @@ public interface UserService {
|
|||||||
*/
|
*/
|
||||||
String selectAvatarById(Long userId);
|
String selectAvatarById(Long userId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过用户id查询头像
|
||||||
|
*/
|
||||||
|
UserDTO selectUser(Long userId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1127,6 +1127,8 @@ public class SubConstructionUserServiceImpl extends ServiceImpl<SubConstructionU
|
|||||||
if (CollUtil.isNotEmpty(blackUserIdList)) {
|
if (CollUtil.isNotEmpty(blackUserIdList)) {
|
||||||
lqw.notIn(SubConstructionUser::getSysUserId, blackUserIdList);
|
lqw.notIn(SubConstructionUser::getSysUserId, blackUserIdList);
|
||||||
}
|
}
|
||||||
|
//只查施工人员
|
||||||
|
lqw.eq(SubConstructionUser::getUserRole, "0");
|
||||||
// 分页查询获取数据
|
// 分页查询获取数据
|
||||||
Page<SubConstructionUser> constructionUserPage = this.page(pageQuery.build(), lqw);
|
Page<SubConstructionUser> constructionUserPage = this.page(pageQuery.build(), lqw);
|
||||||
List<SubConstructionUser> constructionUserList = constructionUserPage.getRecords();
|
List<SubConstructionUser> constructionUserList = constructionUserPage.getRecords();
|
||||||
|
|||||||
@ -90,7 +90,7 @@ public class AttendanceJob {
|
|||||||
LocalDate date = LocalDate.now();
|
LocalDate date = LocalDate.now();
|
||||||
|
|
||||||
//管理员关联多个项目,需要记录是否已生成缺卡记录
|
//管理员关联多个项目,需要记录是否已生成缺卡记录
|
||||||
HashSet<Long> manageUserIds = new HashSet<>();
|
// HashSet<Long> manageUserIds = new HashSet<>();
|
||||||
|
|
||||||
List<BusAttendance> missList = new ArrayList<>();
|
List<BusAttendance> missList = new ArrayList<>();
|
||||||
for (BusAttendanceRule rule : list) {
|
for (BusAttendanceRule rule : list) {
|
||||||
@ -117,46 +117,38 @@ public class AttendanceJob {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
//查询项目下的关联人员
|
// //查询项目下的关联人员
|
||||||
List<BusUserProjectRelevancy> relevancyList = userProjectRelevancyService.list(Wrappers.lambdaQuery(BusUserProjectRelevancy.class)
|
// List<BusUserProjectRelevancy> relevancyList = userProjectRelevancyService.list(Wrappers.lambdaQuery(BusUserProjectRelevancy.class)
|
||||||
.eq(BusUserProjectRelevancy::getProjectId, rule.getProjectId()));
|
// .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)
|
List<BusAttendance> attendanceList = attendanceService.list(Wrappers.lambdaQuery(BusAttendance.class)
|
||||||
.eq(BusAttendance::getClockDate, date)
|
.eq(BusAttendance::getClockDate, date)
|
||||||
.eq(BusAttendance::getClockType, BusAttendanceCommuterEnum.CLOCKIN.getValue())
|
.eq(BusAttendance::getClockType, BusAttendanceCommuterEnum.CLOCKIN.getValue())
|
||||||
|
.eq(BusAttendance::getProjectId, rule.getProjectId())
|
||||||
);
|
);
|
||||||
List<Long> attendanceUserIds = attendanceList.stream().map(BusAttendance::getUserId).toList();
|
List<Long> attendanceUserIds = attendanceList.stream().map(BusAttendance::getUserId).toList();
|
||||||
|
|
||||||
|
for (SubConstructionUser constructionUser : constructionUsers) {
|
||||||
for (BusUserProjectRelevancy relevancy : relevancyList) {
|
Long sysUserId = constructionUser.getSysUserId();
|
||||||
|
if (attendanceUserIds.contains(sysUserId)) {
|
||||||
if (attendanceUserIds.contains(relevancy.getUserId()) || noClockUserTypes.contains(relevancy.getUserType())) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BusAttendance busAttendance = new BusAttendance();
|
BusAttendance busAttendance = new BusAttendance();
|
||||||
busAttendance.setProjectId(relevancy.getProjectId());
|
busAttendance.setProjectId(constructionUser.getProjectId());
|
||||||
// 管理人员 项目id是0
|
busAttendance.setUserId(sysUserId);
|
||||||
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.setUserName(constructionUser.getUserName());
|
busAttendance.setUserName(constructionUser.getUserName());
|
||||||
|
|
||||||
busAttendance.setClockDate(date);
|
busAttendance.setClockDate(date);
|
||||||
busAttendance.setClockType(BusAttendanceCommuterEnum.CLOCKIN.getValue());
|
busAttendance.setClockType(BusAttendanceCommuterEnum.CLOCKIN.getValue());
|
||||||
busAttendance.setRuleTime(rule.getClockInTime());
|
busAttendance.setRuleTime(rule.getClockInTime());
|
||||||
if(leaveService.isLeave(date, relevancy.getUserId())){
|
if (leaveService.isLeave(date, sysUserId)) {
|
||||||
busAttendance.setClockStatus(BusAttendanceClockStatusEnum.LEAVE.getValue());
|
busAttendance.setClockStatus(BusAttendanceClockStatusEnum.LEAVE.getValue());
|
||||||
} else {
|
} else {
|
||||||
busAttendance.setClockStatus(BusAttendanceClockStatusEnum.UNCLOCK.getValue());
|
busAttendance.setClockStatus(BusAttendanceClockStatusEnum.UNCLOCK.getValue());
|
||||||
@ -208,7 +200,7 @@ public class AttendanceJob {
|
|||||||
LocalDate date = LocalDate.now();
|
LocalDate date = LocalDate.now();
|
||||||
|
|
||||||
//管理员关联多个项目,需要记录是否已生成缺卡记录
|
//管理员关联多个项目,需要记录是否已生成缺卡记录
|
||||||
HashSet<Long> manageUserIds = new HashSet<>();
|
// HashSet<Long> manageUserIds = new HashSet<>();
|
||||||
|
|
||||||
|
|
||||||
List<BusAttendance> missList = new ArrayList<>();
|
List<BusAttendance> missList = new ArrayList<>();
|
||||||
@ -240,9 +232,13 @@ public class AttendanceJob {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//查询项目下的关联人员
|
//查询项目下的关联人员
|
||||||
List<BusUserProjectRelevancy> relevancyList = userProjectRelevancyService.list(Wrappers.lambdaQuery(BusUserProjectRelevancy.class)
|
// List<BusUserProjectRelevancy> relevancyList = userProjectRelevancyService.list(Wrappers.lambdaQuery(BusUserProjectRelevancy.class)
|
||||||
.eq(BusUserProjectRelevancy::getProjectId, rule.getProjectId()));
|
// .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)
|
List<BusAttendance> allAttendanceList = attendanceService.list(Wrappers.lambdaQuery(BusAttendance.class)
|
||||||
.eq(BusAttendance::getClockDate, date)
|
.eq(BusAttendance::getClockDate, date)
|
||||||
@ -257,38 +253,27 @@ public class AttendanceJob {
|
|||||||
List<Long> attendanceUserIds = attendanceList.stream().map(BusAttendance::getUserId).toList();
|
List<Long> attendanceUserIds = attendanceList.stream().map(BusAttendance::getUserId).toList();
|
||||||
|
|
||||||
|
|
||||||
for (BusUserProjectRelevancy relevancy : relevancyList) {
|
for (SubConstructionUser constructionUser : constructionUsers) {
|
||||||
if (attendanceUserIds.contains(relevancy.getUserId()) || noClockUserTypes.contains(relevancy.getUserType())) {
|
Long sysUserId = constructionUser.getSysUserId();
|
||||||
|
if (attendanceUserIds.contains(sysUserId)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
BusAttendance busAttendance = new BusAttendance();
|
BusAttendance busAttendance = new BusAttendance();
|
||||||
// 管理人员 项目id是0
|
// 管理人员 项目id是0
|
||||||
busAttendance.setProjectId(relevancy.getProjectId());
|
busAttendance.setProjectId(constructionUser.getProjectId());
|
||||||
if("2".equals(relevancy.getUserType()) && !manageUserIds.contains(relevancy.getUserId())){
|
|
||||||
manageUserIds.add(relevancy.getUserId());
|
|
||||||
busAttendance.setProjectId(0L);
|
|
||||||
}
|
|
||||||
|
|
||||||
SubConstructionUser constructionUser = constructionUserService.lambdaQuery()
|
busAttendance.setUserId(sysUserId);
|
||||||
.eq(SubConstructionUser::getSysUserId, relevancy.getUserId())
|
|
||||||
.last("limit 1")
|
|
||||||
.one();
|
|
||||||
if(constructionUser==null){
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
busAttendance.setUserId(relevancy.getUserId());
|
|
||||||
busAttendance.setUserName(constructionUser.getUserName());
|
busAttendance.setUserName(constructionUser.getUserName());
|
||||||
|
|
||||||
busAttendance.setClockDate(date);
|
busAttendance.setClockDate(date);
|
||||||
busAttendance.setClockType(BusAttendanceCommuterEnum.CLOCKOUT.getValue());
|
busAttendance.setClockType(BusAttendanceCommuterEnum.CLOCKOUT.getValue());
|
||||||
busAttendance.setRuleTime(rule.getClockOutTime());
|
busAttendance.setRuleTime(rule.getClockOutTime());
|
||||||
if(leaveService.isLeave(date, relevancy.getUserId())){
|
if (leaveService.isLeave(date, sysUserId)) {
|
||||||
busAttendance.setClockStatus(BusAttendanceClockStatusEnum.LEAVE.getValue());
|
busAttendance.setClockStatus(BusAttendanceClockStatusEnum.LEAVE.getValue());
|
||||||
} else {
|
} else {
|
||||||
busAttendance.setClockStatus(BusAttendanceClockStatusEnum.UNCLOCK.getValue());
|
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));
|
busAttendance.setSalary(computeSalary(constructionUser, list1));
|
||||||
missList.add(busAttendance);
|
missList.add(busAttendance);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -887,6 +887,7 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
|
|||||||
//先查询人员有那些
|
//先查询人员有那些
|
||||||
List<SubConstructionUser> list = constructionUserService.list(Wrappers.lambdaQuery(SubConstructionUser.class)
|
List<SubConstructionUser> list = constructionUserService.list(Wrappers.lambdaQuery(SubConstructionUser.class)
|
||||||
.eq(SubConstructionUser::getProjectId, dto.getProjectId())
|
.eq(SubConstructionUser::getProjectId, dto.getProjectId())
|
||||||
|
.eq(SubConstructionUser::getUserRole, "0")
|
||||||
.eq(dto.getTeamId() != null, SubConstructionUser::getTeamId, dto.getTeamId())
|
.eq(dto.getTeamId() != null, SubConstructionUser::getTeamId, dto.getTeamId())
|
||||||
.in(dto.getTeamId() == null && "2".equals(appUserType), SubConstructionUser::getTeamId, list2)
|
.in(dto.getTeamId() == null && "2".equals(appUserType), SubConstructionUser::getTeamId, list2)
|
||||||
.eq(StringUtils.isNotBlank(dto.getTypeOfWork()), SubConstructionUser::getTypeOfWork, dto.getTypeOfWork())
|
.eq(StringUtils.isNotBlank(dto.getTypeOfWork()), SubConstructionUser::getTypeOfWork, dto.getTypeOfWork())
|
||||||
@ -948,6 +949,7 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
|
|||||||
return rspData;
|
return rspData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wrapper.eq(SubConstructionUser::getUserRole, "0");
|
||||||
wrapper.in("1".equals(dto.getClockStatus()), SubConstructionUser::getSysUserId, attendanceUserIds);
|
wrapper.in("1".equals(dto.getClockStatus()), SubConstructionUser::getSysUserId, attendanceUserIds);
|
||||||
wrapper.notIn("2".equals(dto.getClockStatus()) && CollectionUtil.isNotEmpty(attendanceUserIds), 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());
|
wrapper.eq(StrUtil.isNotBlank(dto.getTypeOfWork()), SubConstructionUser::getTypeOfWork, dto.getTypeOfWork());
|
||||||
@ -1144,10 +1146,17 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
|
|||||||
@Override
|
@Override
|
||||||
public List<BusAttendanceClockDateForTwoWeekVo> getClockDateForTwoWeekList(Long projectId) {
|
public List<BusAttendanceClockDateForTwoWeekVo> getClockDateForTwoWeekList(Long projectId) {
|
||||||
LocalDate now = LocalDate.now();
|
LocalDate now = LocalDate.now();
|
||||||
|
|
||||||
|
//查询所有管理员和分包人员 排除
|
||||||
|
List<Long> excludeUserIds = constructionUserService.list(Wrappers.<SubConstructionUser>lambdaQuery()
|
||||||
|
.ne(SubConstructionUser::getUserRole, "0")
|
||||||
|
).stream().map(SubConstructionUser::getSysUserId).toList();
|
||||||
|
|
||||||
// 往前14天,包含今天
|
// 往前14天,包含今天
|
||||||
LocalDate startDate = now.minusDays(13);
|
LocalDate startDate = now.minusDays(13);
|
||||||
List<BusAttendance> list = list(Wrappers.<BusAttendance>lambdaQuery()
|
List<BusAttendance> list = list(Wrappers.<BusAttendance>lambdaQuery()
|
||||||
.eq(BusAttendance::getProjectId, projectId)
|
.eq(BusAttendance::getProjectId, projectId)
|
||||||
|
.notIn(CollectionUtil.isNotEmpty(excludeUserIds),BusAttendance::getUserId, excludeUserIds)
|
||||||
.between(BusAttendance::getClockDate, startDate, now)
|
.between(BusAttendance::getClockDate, startDate, now)
|
||||||
.orderByAsc(BusAttendance::getClockDate)
|
.orderByAsc(BusAttendance::getClockDate)
|
||||||
);
|
);
|
||||||
|
|||||||
@ -1202,4 +1202,22 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
|
|||||||
}
|
}
|
||||||
return baseMapper.updateById(sysUser)>0;
|
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){
|
if(flowHisTaskVo != null){
|
||||||
appVo.setFlowStatus(flowHisTaskVo.getFlowStatus());
|
appVo.setFlowStatus(flowHisTaskVo.getFlowStatus());
|
||||||
if(BusinessStatusEnum.WAITING.getStatus().equals(flowHisTaskVo.getFlowStatus())){
|
if(BusinessStatusEnum.WAITING.getStatus().equals(flowHisTaskVo.getFlowStatus())){
|
||||||
appVo.setAuditName(flowHisTaskVo.getApproveName());
|
appVo.setAuditName(userService.selectNicknameByIds(flowHisTaskVo.getApprover()));
|
||||||
}else {
|
}else {
|
||||||
appVo.setApproveName(flowHisTaskVo.getApproveName());
|
UserDTO userDTO = userService.selectUser(Long.valueOf(flowHisTaskVo.getApprover()));
|
||||||
if(StrUtil.isNotBlank(flowHisTaskVo.getApprover())){
|
if(userDTO != null){
|
||||||
appVo.setApproveAvatar(userService.selectAvatarById(Long.valueOf(flowHisTaskVo.getApprover())));
|
appVo.setApproveAvatar(userDTO.getAvatarUrl());
|
||||||
|
appVo.setApproveName(userDTO.getNickName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else {
|
}else {
|
||||||
|
|||||||
@ -153,6 +153,7 @@ public class WorkflowGlobalListener implements GlobalListener {
|
|||||||
|
|
||||||
List<UserDTO> userDTOS = flwTaskAssigneeService.fetchUsersByStorageIds(permissionFlag, Long.valueOf(projectId));
|
List<UserDTO> userDTOS = flwTaskAssigneeService.fetchUsersByStorageIds(permissionFlag, Long.valueOf(projectId));
|
||||||
|
|
||||||
|
|
||||||
flowTask.setPermissionList(userDTOS.stream().map(UserDTO::getUserId).map(String::valueOf).collect(Collectors.toList()));
|
flowTask.setPermissionList(userDTOS.stream().map(UserDTO::getUserId).map(String::valueOf).collect(Collectors.toList()));
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|||||||
Reference in New Issue
Block a user