bug
This commit is contained in:
@ -738,7 +738,12 @@ public class SubConstructionUserServiceImpl extends ServiceImpl<SubConstructionU
|
||||
}
|
||||
}
|
||||
// 解密身份证号码
|
||||
String decrypt = idCardEncryptorUtil.decrypt(constructionUserVo.getSfzNumber());
|
||||
String decrypt = constructionUserVo.getSfzNumber();
|
||||
try {
|
||||
decrypt = idCardEncryptorUtil.decrypt(constructionUserVo.getSfzNumber());
|
||||
}catch (Exception e) {
|
||||
log.error("身份证号码解密失败", e);
|
||||
}
|
||||
constructionUserVo.setSfzNumber(decrypt);
|
||||
// 计算年龄
|
||||
LocalDate sfzBirth = constructionUser.getSfzBirth();
|
||||
|
||||
@ -98,7 +98,7 @@ public class BusProjectTeamMemberController extends BaseController {
|
||||
*/
|
||||
@SaCheckPermission("project:projectTeamMember:remove")
|
||||
@Log(title = "项目班组下的成员", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/")
|
||||
@DeleteMapping()
|
||||
public R<Void> remove(@RequestBody BusProjectTeamMemberExitReq req) {
|
||||
return toAjax(busProjectTeamMemberService.deleteById(req));
|
||||
}
|
||||
|
||||
@ -279,58 +279,109 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
|
||||
}
|
||||
|
||||
// 判断当前用户打卡状态
|
||||
List<BusAttendance> attendances = this.lambdaQuery()
|
||||
.eq(BusAttendance::getUserId, userId)
|
||||
.eq(BusAttendance::getClockDate, localDate)
|
||||
.list();
|
||||
BusAttendance attendance = new BusAttendance();
|
||||
if (CollUtil.isEmpty(attendances)) {
|
||||
// 上班打卡
|
||||
attendance.setClockType(BusAttendanceCommuterEnum.CLOCKIN.getValue());
|
||||
//打卡时间
|
||||
attendance.setRuleTime(busAttendanceRuleVo.getClockInTime());
|
||||
// 判断是否为迟到
|
||||
if (isLate(now, busAttendanceRuleVo)) {
|
||||
attendance.setClockStatus(BusAttendanceClockStatusEnum.LATE.getValue());
|
||||
attendance.setMinuteCount(getMinutesDifference(now, busAttendanceRuleVo.getClockInTime()));
|
||||
} else {
|
||||
attendance.setClockStatus(BusAttendanceClockStatusEnum.NORMAL.getValue());
|
||||
|
||||
int clockTypeByTime = getClockTypeByTime(localDate, now, busAttendanceRuleVo);
|
||||
if (clockTypeByTime == 1 ) {
|
||||
List<BusAttendance> attendances = this.lambdaQuery()
|
||||
.eq(BusAttendance::getUserId, userId)
|
||||
.eq(BusAttendance::getClockDate, localDate)
|
||||
.eq(BusAttendance::getClockType, BusAttendanceCommuterEnum.CLOCKIN.getValue())
|
||||
.list();
|
||||
if(CollectionUtil.isNotEmpty(attendances)){
|
||||
BusAttendance busAttendance = attendances.getFirst();
|
||||
if(busAttendance.getClockStatus().equals(BusAttendanceClockStatusEnum.UNCLOCK.getValue())){
|
||||
throw new ServiceException("上班缺卡记录已生成,不能更新");
|
||||
}
|
||||
//更新打卡时间
|
||||
busAttendance.setClockTime(now);
|
||||
updateById(busAttendance);
|
||||
}else{
|
||||
BusAttendance attendance = new BusAttendance();
|
||||
// 上班打卡
|
||||
attendance.setClockType(BusAttendanceCommuterEnum.CLOCKIN.getValue());
|
||||
//打卡时间
|
||||
attendance.setRuleTime(busAttendanceRuleVo.getClockInTime());
|
||||
// 判断是否为迟到
|
||||
if (isLate(now, busAttendanceRuleVo)) {
|
||||
attendance.setClockStatus(BusAttendanceClockStatusEnum.LATE.getValue());
|
||||
attendance.setMinuteCount(getMinutesDifference(now, busAttendanceRuleVo.getClockInTime()));
|
||||
} else {
|
||||
attendance.setClockStatus(BusAttendanceClockStatusEnum.NORMAL.getValue());
|
||||
}
|
||||
// 填充信息
|
||||
attendance.setUserId(userId);
|
||||
attendance.setProjectId(req.getProjectId());
|
||||
attendance.setClockDate(localDate);
|
||||
attendance.setClockTime(now);
|
||||
attendance.setUserName(constructionUser.getUserName());
|
||||
// 记录打卡坐标
|
||||
attendance.setLat(req.getLat());
|
||||
attendance.setLng(req.getLng());
|
||||
attendance.setClockLocation(req.getLocationName());
|
||||
// 上传人脸照
|
||||
SysOssVo upload = ossService.upload(file);
|
||||
attendance.setFacePic(upload.getOssId().toString());
|
||||
chatServerHandler.sendSystemMessageToUser(userId, "打卡成功", "1");
|
||||
boolean save = this.save(attendance);
|
||||
//插入工资
|
||||
userSalaryDetailService.insertByAttendance(userId, attendance.getClockDate());
|
||||
return save;
|
||||
}
|
||||
} else if (attendances.size() == 1) {
|
||||
// 下班打卡
|
||||
attendance.setClockType(BusAttendanceCommuterEnum.CLOCKOUT.getValue());
|
||||
attendance.setRuleTime(busAttendanceRuleVo.getClockOutTime());
|
||||
// 判断是否为早退
|
||||
if (isLeaveEarly(now, busAttendanceRuleVo)) {
|
||||
attendance.setClockStatus(BusAttendanceClockStatusEnum.LEAVEEARLY.getValue());
|
||||
attendance.setMinuteCount(getMinutesDifference(now, busAttendanceRuleVo.getClockOutTime()));
|
||||
} else {
|
||||
attendance.setClockStatus(BusAttendanceClockStatusEnum.NORMAL.getValue());
|
||||
}else if (clockTypeByTime == 2 ) {
|
||||
List<BusAttendance> attendances = this.lambdaQuery()
|
||||
.eq(BusAttendance::getUserId, userId)
|
||||
.eq(BusAttendance::getClockDate, localDate)
|
||||
.eq(BusAttendance::getClockType, BusAttendanceCommuterEnum.CLOCKOUT.getValue())
|
||||
.list();
|
||||
if(CollectionUtil.isNotEmpty(attendances)){
|
||||
BusAttendance busAttendance = attendances.getFirst();
|
||||
if(busAttendance.getClockStatus().equals(BusAttendanceClockStatusEnum.UNCLOCK.getValue())){
|
||||
throw new ServiceException("下班缺卡记录已生成,不能更新");
|
||||
}
|
||||
//更新打卡时间
|
||||
busAttendance.setClockTime(now);
|
||||
// 判断是否为早退
|
||||
if (isLeaveEarly(now, busAttendanceRuleVo)) {
|
||||
busAttendance.setClockStatus(BusAttendanceClockStatusEnum.LEAVEEARLY.getValue());
|
||||
busAttendance.setMinuteCount(getMinutesDifference(now, busAttendanceRuleVo.getClockOutTime()));
|
||||
} else {
|
||||
busAttendance.setClockStatus(BusAttendanceClockStatusEnum.NORMAL.getValue());
|
||||
}
|
||||
updateById(busAttendance);
|
||||
}else {
|
||||
BusAttendance attendance = new BusAttendance();
|
||||
// 下班打卡
|
||||
attendance.setClockType(BusAttendanceCommuterEnum.CLOCKOUT.getValue());
|
||||
attendance.setRuleTime(busAttendanceRuleVo.getClockOutTime());
|
||||
// 判断是否为早退
|
||||
if (isLeaveEarly(now, busAttendanceRuleVo)) {
|
||||
attendance.setClockStatus(BusAttendanceClockStatusEnum.LEAVEEARLY.getValue());
|
||||
attendance.setMinuteCount(getMinutesDifference(now, busAttendanceRuleVo.getClockOutTime()));
|
||||
} else {
|
||||
attendance.setClockStatus(BusAttendanceClockStatusEnum.NORMAL.getValue());
|
||||
}
|
||||
// 填充信息
|
||||
attendance.setUserId(userId);
|
||||
attendance.setProjectId(req.getProjectId());
|
||||
attendance.setClockDate(localDate);
|
||||
attendance.setClockTime(now);
|
||||
attendance.setUserName(constructionUser.getUserName());
|
||||
// 记录打卡坐标
|
||||
attendance.setLat(req.getLat());
|
||||
attendance.setLng(req.getLng());
|
||||
attendance.setClockLocation(req.getLocationName());
|
||||
// 上传人脸照
|
||||
SysOssVo upload = ossService.upload(file);
|
||||
attendance.setFacePic(upload.getOssId().toString());
|
||||
chatServerHandler.sendSystemMessageToUser(userId, "打卡成功", "1");
|
||||
boolean save = this.save(attendance);
|
||||
//插入工资
|
||||
userSalaryDetailService.insertByAttendance(userId, attendance.getClockDate());
|
||||
return save;
|
||||
}
|
||||
} else if (attendances.size() == 2) {
|
||||
throw new ServiceException("当前已完成打卡,请勿重复提交", HttpStatus.BAD_REQUEST);
|
||||
} else {
|
||||
throw new ServiceException("打卡异常,请联系管理员", HttpStatus.ERROR);
|
||||
}
|
||||
// 填充信息
|
||||
attendance.setUserId(userId);
|
||||
attendance.setProjectId(req.getProjectId());
|
||||
attendance.setClockDate(localDate);
|
||||
attendance.setClockTime(now);
|
||||
attendance.setUserName(constructionUser.getUserName());
|
||||
// 记录打卡坐标
|
||||
attendance.setLat(req.getLat());
|
||||
attendance.setLng(req.getLng());
|
||||
attendance.setClockLocation(req.getLocationName());
|
||||
// 上传人脸照
|
||||
SysOssVo upload = ossService.upload(file);
|
||||
attendance.setFacePic(upload.getOssId().toString());
|
||||
chatServerHandler.sendSystemMessageToUser(userId, "打卡成功", "1");
|
||||
boolean save = this.save(attendance);
|
||||
//插入工资
|
||||
userSalaryDetailService.insertByAttendance(userId, attendance.getClockDate());
|
||||
return save;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@ -595,6 +646,68 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
|
||||
return null;
|
||||
}
|
||||
|
||||
private int getClockTypeByTime(LocalDate date, LocalDateTime now, BusAttendanceRuleVo busAttendanceRuleVo) {
|
||||
LocalTime clockInTime = busAttendanceRuleVo.getClockInTime();
|
||||
LocalTime clockOutTime = busAttendanceRuleVo.getClockOutTime();
|
||||
LocalTime clockInResultTime = busAttendanceRuleVo.getClockInResultTime();
|
||||
LocalTime clockOutResultTime = busAttendanceRuleVo.getClockOutResultTime();
|
||||
|
||||
// 构建各个时间节点
|
||||
LocalDateTime clockInDateTime = LocalDateTime.of(date, clockInTime);
|
||||
LocalDateTime clockInResultDateTime;
|
||||
LocalDateTime clockOutDateTime;
|
||||
LocalDateTime clockOutResultDateTime;
|
||||
|
||||
// 处理跨天情况
|
||||
if (clockInResultTime.isBefore(clockInTime)) {
|
||||
clockInResultDateTime = LocalDateTime.of(date.plusDays(1), clockInResultTime);
|
||||
} else {
|
||||
clockInResultDateTime = LocalDateTime.of(date, clockInResultTime);
|
||||
}
|
||||
|
||||
if (clockOutTime.isBefore(clockInTime)) {
|
||||
clockOutDateTime = LocalDateTime.of(date.plusDays(1), clockOutTime);
|
||||
} else {
|
||||
clockOutDateTime = LocalDateTime.of(date, clockOutTime);
|
||||
}
|
||||
|
||||
if (clockOutResultTime.isBefore(clockInTime)) {
|
||||
clockOutResultDateTime = LocalDateTime.of(date.plusDays(1), clockOutResultTime);
|
||||
} else {
|
||||
clockOutResultDateTime = LocalDateTime.of(date, clockOutResultTime);
|
||||
}
|
||||
|
||||
// now在clockInDateTime 和clockInResultDateTime之间,左开右闭 属于上班
|
||||
if (now.isAfter(clockInDateTime) && !now.isAfter(clockInResultDateTime)) {
|
||||
return 1; // 上班打卡
|
||||
}
|
||||
|
||||
// now在clockInResultDateTime 和clockOutResultDateTime之间,左开右闭 属于下班
|
||||
if (now.isAfter(clockInResultDateTime) && !now.isAfter(clockOutResultDateTime)) {
|
||||
return 2; // 下班打卡
|
||||
}
|
||||
|
||||
// 特殊情况处理:如果在上班打卡时间之前或者在下班打卡时间之后
|
||||
if (!now.isAfter(clockInDateTime)) {
|
||||
return 1; // 上班打卡(早于规定上班时间)
|
||||
}
|
||||
|
||||
if (!now.isBefore(clockOutResultDateTime)) {
|
||||
// 判断是否更接近上班时间还是下班时间
|
||||
Duration toClockIn = Duration.between(now, clockInDateTime.plusDays(1));
|
||||
Duration toClockOut = Duration.between(clockOutResultDateTime, now);
|
||||
|
||||
if (toClockIn.compareTo(toClockOut) < 0) {
|
||||
return 1; // 上班打卡
|
||||
} else {
|
||||
return 2; // 下班打卡
|
||||
}
|
||||
}
|
||||
|
||||
// 默认返回下班打卡
|
||||
return 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否迟到
|
||||
*/
|
||||
@ -1202,4 +1315,7 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -316,6 +316,7 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM
|
||||
// 同步修改用户表的team_id字段
|
||||
LambdaUpdateWrapper<SubConstructionUser> constructionUserLuw = Wrappers.lambdaUpdate(SubConstructionUser.class)
|
||||
.eq(SubConstructionUser::getId, constructionUser.getId())
|
||||
.set(SubConstructionUser::getExitStatus, "2")
|
||||
.set(SubConstructionUser::getTeamId, null)
|
||||
.set(SubConstructionUser::getLeaveDate, new Date());
|
||||
constructionUserService.update(constructionUserLuw);
|
||||
|
||||
@ -822,7 +822,12 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean updateAppUserType(Long userId, String appUserType) {
|
||||
//直接添加权限
|
||||
|
||||
|
||||
|
||||
return baseMapper.update(null,
|
||||
new LambdaUpdateWrapper<SysUser>()
|
||||
.set(SysUser::getAppUserType, appUserType)
|
||||
|
||||
@ -18,7 +18,7 @@
|
||||
</if>
|
||||
<if test="ew.getSqlSelect == null">
|
||||
u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex,
|
||||
u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark
|
||||
u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,u.app_user_type
|
||||
</if>
|
||||
from sys_user u
|
||||
${ew.getCustomSqlSegment}
|
||||
|
||||
Reference in New Issue
Block a user