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);
|
constructionUserVo.setSfzNumber(decrypt);
|
||||||
// 计算年龄
|
// 计算年龄
|
||||||
LocalDate sfzBirth = constructionUser.getSfzBirth();
|
LocalDate sfzBirth = constructionUser.getSfzBirth();
|
||||||
|
|||||||
@ -98,7 +98,7 @@ public class BusProjectTeamMemberController extends BaseController {
|
|||||||
*/
|
*/
|
||||||
@SaCheckPermission("project:projectTeamMember:remove")
|
@SaCheckPermission("project:projectTeamMember:remove")
|
||||||
@Log(title = "项目班组下的成员", businessType = BusinessType.DELETE)
|
@Log(title = "项目班组下的成员", businessType = BusinessType.DELETE)
|
||||||
@DeleteMapping("/")
|
@DeleteMapping()
|
||||||
public R<Void> remove(@RequestBody BusProjectTeamMemberExitReq req) {
|
public R<Void> remove(@RequestBody BusProjectTeamMemberExitReq req) {
|
||||||
return toAjax(busProjectTeamMemberService.deleteById(req));
|
return toAjax(busProjectTeamMemberService.deleteById(req));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -279,12 +279,24 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 判断当前用户打卡状态
|
// 判断当前用户打卡状态
|
||||||
|
|
||||||
|
int clockTypeByTime = getClockTypeByTime(localDate, now, busAttendanceRuleVo);
|
||||||
|
if (clockTypeByTime == 1 ) {
|
||||||
List<BusAttendance> attendances = this.lambdaQuery()
|
List<BusAttendance> attendances = this.lambdaQuery()
|
||||||
.eq(BusAttendance::getUserId, userId)
|
.eq(BusAttendance::getUserId, userId)
|
||||||
.eq(BusAttendance::getClockDate, localDate)
|
.eq(BusAttendance::getClockDate, localDate)
|
||||||
|
.eq(BusAttendance::getClockType, BusAttendanceCommuterEnum.CLOCKIN.getValue())
|
||||||
.list();
|
.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();
|
BusAttendance attendance = new BusAttendance();
|
||||||
if (CollUtil.isEmpty(attendances)) {
|
|
||||||
// 上班打卡
|
// 上班打卡
|
||||||
attendance.setClockType(BusAttendanceCommuterEnum.CLOCKIN.getValue());
|
attendance.setClockType(BusAttendanceCommuterEnum.CLOCKIN.getValue());
|
||||||
//打卡时间
|
//打卡时间
|
||||||
@ -296,22 +308,6 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
|
|||||||
} else {
|
} else {
|
||||||
attendance.setClockStatus(BusAttendanceClockStatusEnum.NORMAL.getValue());
|
attendance.setClockStatus(BusAttendanceClockStatusEnum.NORMAL.getValue());
|
||||||
}
|
}
|
||||||
} 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 (attendances.size() == 2) {
|
|
||||||
throw new ServiceException("当前已完成打卡,请勿重复提交", HttpStatus.BAD_REQUEST);
|
|
||||||
} else {
|
|
||||||
throw new ServiceException("打卡异常,请联系管理员", HttpStatus.ERROR);
|
|
||||||
}
|
|
||||||
// 填充信息
|
// 填充信息
|
||||||
attendance.setUserId(userId);
|
attendance.setUserId(userId);
|
||||||
attendance.setProjectId(req.getProjectId());
|
attendance.setProjectId(req.getProjectId());
|
||||||
@ -331,6 +327,61 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
|
|||||||
userSalaryDetailService.insertByAttendance(userId, attendance.getClockDate());
|
userSalaryDetailService.insertByAttendance(userId, attendance.getClockDate());
|
||||||
return save;
|
return save;
|
||||||
}
|
}
|
||||||
|
}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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -595,6 +646,68 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
|
|||||||
return null;
|
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字段
|
// 同步修改用户表的team_id字段
|
||||||
LambdaUpdateWrapper<SubConstructionUser> constructionUserLuw = Wrappers.lambdaUpdate(SubConstructionUser.class)
|
LambdaUpdateWrapper<SubConstructionUser> constructionUserLuw = Wrappers.lambdaUpdate(SubConstructionUser.class)
|
||||||
.eq(SubConstructionUser::getId, constructionUser.getId())
|
.eq(SubConstructionUser::getId, constructionUser.getId())
|
||||||
|
.set(SubConstructionUser::getExitStatus, "2")
|
||||||
.set(SubConstructionUser::getTeamId, null)
|
.set(SubConstructionUser::getTeamId, null)
|
||||||
.set(SubConstructionUser::getLeaveDate, new Date());
|
.set(SubConstructionUser::getLeaveDate, new Date());
|
||||||
constructionUserService.update(constructionUserLuw);
|
constructionUserService.update(constructionUserLuw);
|
||||||
|
|||||||
@ -822,7 +822,12 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public Boolean updateAppUserType(Long userId, String appUserType) {
|
public Boolean updateAppUserType(Long userId, String appUserType) {
|
||||||
|
//直接添加权限
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return baseMapper.update(null,
|
return baseMapper.update(null,
|
||||||
new LambdaUpdateWrapper<SysUser>()
|
new LambdaUpdateWrapper<SysUser>()
|
||||||
.set(SysUser::getAppUserType, appUserType)
|
.set(SysUser::getAppUserType, appUserType)
|
||||||
|
|||||||
@ -18,7 +18,7 @@
|
|||||||
</if>
|
</if>
|
||||||
<if test="ew.getSqlSelect == null">
|
<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.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>
|
</if>
|
||||||
from sys_user u
|
from sys_user u
|
||||||
${ew.getCustomSqlSegment}
|
${ew.getCustomSqlSegment}
|
||||||
|
|||||||
Reference in New Issue
Block a user