考勤范围和导出
This commit is contained in:
@ -17,6 +17,7 @@ import org.dromara.manager.recognizermanager.vo.RecognizeConvertCoordinateResult
|
|||||||
import org.locationtech.jts.geom.*;
|
import org.locationtech.jts.geom.*;
|
||||||
import org.locationtech.jts.index.strtree.STRtree;
|
import org.locationtech.jts.index.strtree.STRtree;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -369,4 +370,15 @@ public class JSTUtil {
|
|||||||
return address;
|
return address;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
String s = "[{\"lng\":108.27080423,\"lat\":30.78111723,\"alt\":0},{\"lng\":108.1121822,\"lat\":28.29520706,\"alt\":0},{\"lng\":104.14552241,\"lat\":25.30970518,\"alt\":0},{\"lng\":109.08566373,\"lat\":22.16157883,\"alt\":0},{\"lng\":113.65236101,\"lat\":23.77537016,\"alt\":0},{\"lng\":114.7759412,\"lat\":27.54339559,\"alt\":0},{\"lng\":112.75195929,\"lat\":30.44798186,\"alt\":0},{\"lng\":109.80548867,\"lat\":31.34953868,\"alt\":0}]";
|
||||||
|
|
||||||
|
List<String> list = new ArrayList<>();
|
||||||
|
list.add(s);
|
||||||
|
List<GeoPoint> matchingRange = findMatchingRange("30.247348", "105.729797", list);
|
||||||
|
System.out.println(matchingRange==null);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -66,4 +66,9 @@ public class SubConstructionUserAttendanceTotalVo implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private Integer leaveDays;
|
private Integer leaveDays;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 今天是否打卡
|
||||||
|
*/
|
||||||
|
private boolean isClockToday=false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -261,4 +261,6 @@ public interface ISubConstructionUserService extends IService<SubConstructionUse
|
|||||||
|
|
||||||
|
|
||||||
TableDataInfo<AttendanceTodayUserVo> todayUserList(TodayUserDto dto, PageQuery pageQuery);
|
TableDataInfo<AttendanceTodayUserVo> todayUserList(TodayUserDto dto, PageQuery pageQuery);
|
||||||
|
|
||||||
|
List<AttendanceTodayUserVo> todayUserList(TodayUserDto dto);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1186,6 +1186,16 @@ public class SubConstructionUserServiceImpl extends ServiceImpl<SubConstructionU
|
|||||||
attendanceLqw.between(BusAttendance::getClockDate, start, end);
|
attendanceLqw.between(BusAttendance::getClockDate, start, end);
|
||||||
Map<Long, List<BusAttendance>> userIdBusAttendanceListMap = attendanceService.list(attendanceLqw)
|
Map<Long, List<BusAttendance>> userIdBusAttendanceListMap = attendanceService.list(attendanceLqw)
|
||||||
.stream().collect(Collectors.groupingBy(BusAttendance::getUserId));
|
.stream().collect(Collectors.groupingBy(BusAttendance::getUserId));
|
||||||
|
//获取今天打卡人员
|
||||||
|
LambdaQueryWrapper<BusAttendance> attendanceWrapper = Wrappers.lambdaQuery(BusAttendance.class)
|
||||||
|
.eq(BusAttendance::getProjectId, projectId)
|
||||||
|
.eq(BusAttendance::getClockDate, LocalDate.now())
|
||||||
|
.in(BusAttendance::getClockStatus, BusAttendanceClockStatusEnum.ATTENDANCE_LIST)
|
||||||
|
.in(BusAttendance::getUserId, userIdList);
|
||||||
|
List<BusAttendance> list = attendanceService.list(attendanceWrapper);
|
||||||
|
List<Long> attendanceUserIdList = list.stream().map(BusAttendance::getUserId).toList();
|
||||||
|
|
||||||
|
|
||||||
// 填充信息
|
// 填充信息
|
||||||
List<SubConstructionUserAttendanceTotalVo> userAttendanceTotalList = constructionUserList.stream().map(constructionUser -> {
|
List<SubConstructionUserAttendanceTotalVo> userAttendanceTotalList = constructionUserList.stream().map(constructionUser -> {
|
||||||
SubConstructionUserAttendanceTotalVo constructionUserAttendanceTotalResp = new SubConstructionUserAttendanceTotalVo();
|
SubConstructionUserAttendanceTotalVo constructionUserAttendanceTotalResp = new SubConstructionUserAttendanceTotalVo();
|
||||||
@ -1243,6 +1253,9 @@ public class SubConstructionUserServiceImpl extends ServiceImpl<SubConstructionU
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(attendanceUserIdList.contains(id)){
|
||||||
|
constructionUserAttendanceTotalResp.setClockToday(true);
|
||||||
|
}
|
||||||
constructionUserAttendanceTotalResp.setAttendanceDays(attendanceDays);
|
constructionUserAttendanceTotalResp.setAttendanceDays(attendanceDays);
|
||||||
constructionUserAttendanceTotalResp.setLateDays(lateDays);
|
constructionUserAttendanceTotalResp.setLateDays(lateDays);
|
||||||
constructionUserAttendanceTotalResp.setLeaveEarlyDays(leaveEarlyDays);
|
constructionUserAttendanceTotalResp.setLeaveEarlyDays(leaveEarlyDays);
|
||||||
@ -1629,4 +1642,47 @@ public class SubConstructionUserServiceImpl extends ServiceImpl<SubConstructionU
|
|||||||
|
|
||||||
return new TableDataInfo<>(attendanceTodayUserVos, result.getTotal());
|
return new TableDataInfo<>(attendanceTodayUserVos, result.getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AttendanceTodayUserVo> todayUserList(TodayUserDto dto) {
|
||||||
|
LambdaQueryWrapper<SubConstructionUser> wrapper = new LambdaQueryWrapper<>();
|
||||||
|
|
||||||
|
wrapper.eq(SubConstructionUser::getUserRole, "0")
|
||||||
|
.eq(SubConstructionUser::getProjectId, dto.getProjectId())
|
||||||
|
.eq(dto.getTeamId() != null, SubConstructionUser::getTeamId, dto.getTeamId())
|
||||||
|
.eq(StrUtil.isNotBlank(dto.getTypeOfWork()), SubConstructionUser::getTypeOfWork, dto.getTypeOfWork())
|
||||||
|
.like(StrUtil.isNotBlank(dto.getUserName()), SubConstructionUser::getUserName, dto.getUserName())
|
||||||
|
.isNotNull(SubConstructionUser::getTeamId);
|
||||||
|
if("1".equals(dto.getType())){
|
||||||
|
wrapper.in(SubConstructionUser::getSysUserId, dto.getUserIds());
|
||||||
|
}else if("2".equals(dto.getType())){
|
||||||
|
if(dto.getIsToday()){
|
||||||
|
wrapper.notIn(CollectionUtil.isNotEmpty(dto.getUserIds()),SubConstructionUser::getSysUserId, dto.getUserIds());
|
||||||
|
}else {
|
||||||
|
wrapper.in(SubConstructionUser::getSysUserId, dto.getUserIds());
|
||||||
|
}
|
||||||
|
|
||||||
|
}else{
|
||||||
|
wrapper.in(SubConstructionUser::getSysUserId, dto.getUserIds());
|
||||||
|
}
|
||||||
|
|
||||||
|
List<SubConstructionUser> records = this.list(wrapper);
|
||||||
|
|
||||||
|
List<Long> list1 = records.stream().map(SubConstructionUser::getTeamId).toList();
|
||||||
|
List<BusProjectTeam> busProjectTeams = projectTeamService.listByIds(list1);
|
||||||
|
Map<Long, String> teamMap = busProjectTeams.stream().collect(Collectors.toMap(BusProjectTeam::getId, BusProjectTeam::getTeamName));
|
||||||
|
|
||||||
|
List<AttendanceTodayUserVo> attendanceTodayUserVos = new ArrayList<>();
|
||||||
|
for (SubConstructionUser constructionUser : records) {
|
||||||
|
AttendanceTodayUserVo attendanceTodayUserVo = new AttendanceTodayUserVo();
|
||||||
|
attendanceTodayUserVo.setUserId(constructionUser.getSysUserId());
|
||||||
|
attendanceTodayUserVo.setUserName(constructionUser.getUserName());
|
||||||
|
attendanceTodayUserVo.setTypeOfWork(constructionUser.getTypeOfWork());
|
||||||
|
attendanceTodayUserVo.setTeamName(teamMap.get(constructionUser.getTeamId()));
|
||||||
|
attendanceTodayUserVos.add(attendanceTodayUserVo);
|
||||||
|
}
|
||||||
|
|
||||||
|
return attendanceTodayUserVos;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -149,6 +149,16 @@ public class BusAttendanceController extends BaseController {
|
|||||||
return busAttendanceService.getTodayAttendanceUser(dto,pageQuery);
|
return busAttendanceService.getTodayAttendanceUser(dto,pageQuery);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出考勤列表
|
||||||
|
*/
|
||||||
|
@Log(title = "考勤", businessType = BusinessType.EXPORT)
|
||||||
|
@PostMapping("/attendanceUserExport")
|
||||||
|
public void todayAttendanceUserExport(TodayUserDto dto, HttpServletResponse response) {
|
||||||
|
List<AttendanceTodayUserVo> list = busAttendanceService.getTodayAttendanceUser(dto);
|
||||||
|
ExcelUtil.exportExcel(list, "考勤", AttendanceTodayUserVo.class, response);
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping("/exportList")
|
@PostMapping("/exportList")
|
||||||
public void exportList(AttendanceExportDto dto, HttpServletResponse response) {
|
public void exportList(AttendanceExportDto dto, HttpServletResponse response) {
|
||||||
busAttendanceService.getExportList(dto, response);
|
busAttendanceService.getExportList(dto, response);
|
||||||
|
|||||||
@ -1,19 +1,27 @@
|
|||||||
package org.dromara.project.domain.vo.attendance;
|
package org.dromara.project.domain.vo.attendance;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import org.dromara.common.excel.annotation.ExcelDictFormat;
|
||||||
|
import org.dromara.common.excel.convert.ExcelDictConvert;
|
||||||
import org.dromara.common.translation.annotation.Translation;
|
import org.dromara.common.translation.annotation.Translation;
|
||||||
import org.dromara.common.translation.constant.TransConstant;
|
import org.dromara.common.translation.constant.TransConstant;
|
||||||
|
|
||||||
|
@ExcelIgnoreUnannotated
|
||||||
@Data
|
@Data
|
||||||
public class AttendanceTodayUserVo {
|
public class AttendanceTodayUserVo {
|
||||||
|
|
||||||
private Long userId;
|
private Long userId;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "名字")
|
||||||
private String userName;
|
private String userName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 工种(字典type_of_work)
|
* 工种(字典type_of_work)
|
||||||
*/
|
*/
|
||||||
|
@ExcelProperty(value = "用户性别", converter = ExcelDictConvert.class)
|
||||||
|
@ExcelDictFormat(dictType = "type_of_work")
|
||||||
private String typeOfWork;
|
private String typeOfWork;
|
||||||
|
|
||||||
@Translation(type = TransConstant.DICT_TYPE_TO_LABEL, mapper = "typeOfWork",other = "type_of_work")
|
@Translation(type = TransConstant.DICT_TYPE_TO_LABEL, mapper = "typeOfWork",other = "type_of_work")
|
||||||
@ -22,6 +30,7 @@ public class AttendanceTodayUserVo {
|
|||||||
/**
|
/**
|
||||||
* 班组名称
|
* 班组名称
|
||||||
*/
|
*/
|
||||||
|
@ExcelProperty(value = "班组")
|
||||||
private String teamName;
|
private String teamName;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -191,6 +191,11 @@ public interface IBusAttendanceService extends IService<BusAttendance>{
|
|||||||
*/
|
*/
|
||||||
TableDataInfo<AttendanceTodayUserVo> getTodayAttendanceUser(TodayUserDto dto, PageQuery pageQuery);
|
TableDataInfo<AttendanceTodayUserVo> getTodayAttendanceUser(TodayUserDto dto, PageQuery pageQuery);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取项目当天的出勤人员
|
||||||
|
*/
|
||||||
|
List<AttendanceTodayUserVo> getTodayAttendanceUser(TodayUserDto dto);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取导出的考勤数据
|
* 获取导出的考勤数据
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -964,7 +964,7 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
|
|||||||
}
|
}
|
||||||
// 再获取项目的规则
|
// 再获取项目的规则
|
||||||
BusAttendanceRuleVo busAttendanceRuleVo = attendanceRuleService.queryByProjectId(projectId);
|
BusAttendanceRuleVo busAttendanceRuleVo = attendanceRuleService.queryByProjectId(projectId);
|
||||||
if (busAttendanceRuleVo != null && "2".equals(busAttendanceRuleVo.getType())) {
|
if (busAttendanceRuleVo != null && "1".equals(busAttendanceRuleVo.getType())) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -979,6 +979,7 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
|
|||||||
if (CollUtil.isEmpty(punchRangeList)) {
|
if (CollUtil.isEmpty(punchRangeList)) {
|
||||||
throw new ServiceException(isConstruct ? "班组未配置考勤范围" : "项目未配置考勤范围", HttpStatus.ERROR);
|
throw new ServiceException(isConstruct ? "班组未配置考勤范围" : "项目未配置考勤范围", HttpStatus.ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
List<GeoPoint> matchingRange = JSTUtil.findMatchingRange(req.getLat(), req.getLng(), punchRangeList);
|
List<GeoPoint> matchingRange = JSTUtil.findMatchingRange(req.getLat(), req.getLng(), punchRangeList);
|
||||||
return matchingRange != null;
|
return matchingRange != null;
|
||||||
}
|
}
|
||||||
@ -1837,6 +1838,80 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
|
|||||||
return constructionUserService.todayUserList(dto, pageQuery);
|
return constructionUserService.todayUserList(dto, pageQuery);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AttendanceTodayUserVo> getTodayAttendanceUser(TodayUserDto dto) {
|
||||||
|
LocalDate date = dto.getDate();
|
||||||
|
if (date == null) {
|
||||||
|
date = LocalDate.now();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("1".equals(dto.getType())) {
|
||||||
|
List<BusAttendance> list = list(Wrappers.<BusAttendance>lambdaQuery()
|
||||||
|
.eq(BusAttendance::getClockDate, date)
|
||||||
|
.eq(BusAttendance::getProjectId, dto.getProjectId())
|
||||||
|
.in(BusAttendance::getClockStatus, ATTENDANCE_LIST)
|
||||||
|
);
|
||||||
|
List<Long> list1 = list.stream().map(BusAttendance::getUserId).distinct().toList();
|
||||||
|
|
||||||
|
if (CollectionUtil.isEmpty(list1)) {
|
||||||
|
return List.of();
|
||||||
|
}
|
||||||
|
dto.setUserIds(list1);
|
||||||
|
} else if ("2".equals(dto.getType())) {
|
||||||
|
List<BusAttendance> list = list(Wrappers.<BusAttendance>lambdaQuery()
|
||||||
|
.eq(BusAttendance::getClockDate, date)
|
||||||
|
.eq(BusAttendance::getProjectId, dto.getProjectId())
|
||||||
|
.in(BusAttendance::getClockStatus, ATTENDANCE_LIST)
|
||||||
|
);
|
||||||
|
List<Long> list1 = list.stream().map(BusAttendance::getUserId).distinct().toList();
|
||||||
|
if (date.isEqual(LocalDate.now())) {
|
||||||
|
String todayStr = date.format(DateTimeFormatter.ISO_LOCAL_DATE);
|
||||||
|
List<BusLeave> list2 = leaveService.list(Wrappers.<BusLeave>lambdaQuery()
|
||||||
|
.eq(BusLeave::getProjectId, dto.getProjectId())
|
||||||
|
.eq(dto.getTeamId() != null, BusLeave::getTeamId, dto.getTeamId())
|
||||||
|
// 关键:给日期字符串加单引号,避免 SQL 语法错误
|
||||||
|
.apply("DATE(start_time) <= {0}", todayStr)
|
||||||
|
.apply("DATE(end_time) >= {0}", todayStr));
|
||||||
|
|
||||||
|
List<Long> list11 = list2.stream().map(BusLeave::getUserId).distinct().toList();
|
||||||
|
ArrayList<Long> longs = new ArrayList<>();
|
||||||
|
longs.addAll(list1);
|
||||||
|
longs.addAll(list11);
|
||||||
|
dto.setUserIds(longs);
|
||||||
|
dto.setIsToday(true);
|
||||||
|
} else {
|
||||||
|
List<BusAttendance> unlocks = list(Wrappers.<BusAttendance>lambdaQuery()
|
||||||
|
.eq(BusAttendance::getClockDate, date)
|
||||||
|
.eq(BusAttendance::getProjectId, dto.getProjectId())
|
||||||
|
.eq(BusAttendance::getClockStatus, BusAttendanceClockStatusEnum.UNCLOCK.getValue())
|
||||||
|
);
|
||||||
|
List<Long> list11 = new ArrayList<>(unlocks.stream().map(BusAttendance::getUserId).distinct().toList());
|
||||||
|
list11.removeAll(list1);
|
||||||
|
dto.setUserIds(list11);
|
||||||
|
dto.setIsToday(false);
|
||||||
|
if (CollectionUtil.isEmpty(list11)) {
|
||||||
|
return List.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if ("3".equals(dto.getType())) {
|
||||||
|
String todayStr = date.format(DateTimeFormatter.ISO_LOCAL_DATE);
|
||||||
|
List<BusLeave> list2 = leaveService.list(Wrappers.<BusLeave>lambdaQuery()
|
||||||
|
.eq(BusLeave::getProjectId, dto.getProjectId())
|
||||||
|
.eq(dto.getTeamId() != null, BusLeave::getTeamId, dto.getTeamId())
|
||||||
|
// 关键:给日期字符串加单引号,避免 SQL 语法错误
|
||||||
|
.apply("DATE(start_time) <= {0}", todayStr)
|
||||||
|
.apply("DATE(end_time) >= {0}", todayStr));
|
||||||
|
|
||||||
|
List<Long> list11 = list2.stream().map(BusLeave::getUserId).distinct().toList();
|
||||||
|
if (CollectionUtil.isEmpty(list11)) {
|
||||||
|
return List.of();
|
||||||
|
}
|
||||||
|
dto.setUserIds(list11);
|
||||||
|
}
|
||||||
|
return constructionUserService.todayUserList(dto);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void getExportList(AttendanceExportDto dto, HttpServletResponse response) {
|
public void getExportList(AttendanceExportDto dto, HttpServletResponse response) {
|
||||||
try (OutputStream outputStream = response.getOutputStream()) {
|
try (OutputStream outputStream = response.getOutputStream()) {
|
||||||
|
|||||||
@ -1,46 +1,22 @@
|
|||||||
package org.dromara.system.controller.app;
|
package org.dromara.system.controller.app;
|
||||||
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
|
||||||
import cn.dev33.satoken.annotation.SaIgnore;
|
import cn.dev33.satoken.annotation.SaIgnore;
|
||||||
import cn.dev33.satoken.secure.BCrypt;
|
import cn.dev33.satoken.secure.BCrypt;
|
||||||
import cn.hutool.core.collection.CollUtil;
|
|
||||||
import cn.hutool.core.lang.tree.Tree;
|
import cn.hutool.core.lang.tree.Tree;
|
||||||
import cn.hutool.core.util.ArrayUtil;
|
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
|
||||||
import jakarta.validation.constraints.NotNull;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.dromara.common.core.domain.R;
|
import org.dromara.common.core.domain.R;
|
||||||
import org.dromara.common.core.domain.model.LoginUser;
|
import org.dromara.common.core.exception.ServiceException;
|
||||||
import org.dromara.common.core.utils.StreamUtils;
|
|
||||||
import org.dromara.common.core.utils.StringUtils;
|
|
||||||
import org.dromara.common.encrypt.annotation.ApiEncrypt;
|
|
||||||
import org.dromara.common.excel.core.ExcelResult;
|
|
||||||
import org.dromara.common.excel.utils.ExcelUtil;
|
|
||||||
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
||||||
import org.dromara.common.log.annotation.Log;
|
|
||||||
import org.dromara.common.log.enums.BusinessType;
|
|
||||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
|
||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
|
||||||
import org.dromara.common.satoken.utils.LoginHelper;
|
import org.dromara.common.satoken.utils.LoginHelper;
|
||||||
import org.dromara.common.tenant.helper.TenantHelper;
|
|
||||||
import org.dromara.common.web.core.BaseController;
|
import org.dromara.common.web.core.BaseController;
|
||||||
|
import org.dromara.system.domain.SysUser;
|
||||||
import org.dromara.system.domain.bo.SysDeptBo;
|
import org.dromara.system.domain.bo.SysDeptBo;
|
||||||
import org.dromara.system.domain.bo.SysPostBo;
|
import org.dromara.system.domain.dto.AppUserUpdatePasswordDto;
|
||||||
import org.dromara.system.domain.bo.SysRoleBo;
|
|
||||||
import org.dromara.system.domain.bo.SysUserBo;
|
|
||||||
import org.dromara.system.domain.dto.role.SysRoleProjectDto;
|
|
||||||
import org.dromara.system.domain.enums.SysDeptTypeEnum;
|
|
||||||
import org.dromara.system.domain.vo.*;
|
import org.dromara.system.domain.vo.*;
|
||||||
import org.dromara.system.listener.SysUserImportListener;
|
|
||||||
import org.dromara.system.service.*;
|
import org.dromara.system.service.*;
|
||||||
import org.springframework.http.MediaType;
|
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -101,4 +77,13 @@ public class SysUserAppController extends BaseController {
|
|||||||
return R.ok(userService.passwordCompare(password));
|
return R.ok(userService.passwordCompare(password));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改密码
|
||||||
|
*/
|
||||||
|
@RepeatSubmit()
|
||||||
|
@PutMapping("/updatePassword")
|
||||||
|
public R<Void> updatePassword(AppUserUpdatePasswordDto dto) {
|
||||||
|
return toAjax(userService.appResetUserPwd(dto));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,9 @@
|
|||||||
|
package org.dromara.system.domain.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class AppUserUpdatePasswordDto {
|
||||||
|
private String oldPassword;
|
||||||
|
private String newPassword;
|
||||||
|
}
|
||||||
@ -10,6 +10,7 @@ import org.dromara.project.domain.vo.attendance.AttendanceTodayUserVo;
|
|||||||
import org.dromara.project.domain.vo.attendance.SubUserAttendanceTotalVo;
|
import org.dromara.project.domain.vo.attendance.SubUserAttendanceTotalVo;
|
||||||
import org.dromara.system.domain.SysUser;
|
import org.dromara.system.domain.SysUser;
|
||||||
import org.dromara.system.domain.bo.SysUserBo;
|
import org.dromara.system.domain.bo.SysUserBo;
|
||||||
|
import org.dromara.system.domain.dto.AppUserUpdatePasswordDto;
|
||||||
import org.dromara.system.domain.dto.FbUserListDto;
|
import org.dromara.system.domain.dto.FbUserListDto;
|
||||||
import org.dromara.system.domain.dto.role.SysRoleProjectDto;
|
import org.dromara.system.domain.dto.role.SysRoleProjectDto;
|
||||||
import org.dromara.system.domain.vo.SysUserExportVo;
|
import org.dromara.system.domain.vo.SysUserExportVo;
|
||||||
@ -298,4 +299,6 @@ public interface ISysUserService {
|
|||||||
TableDataInfo<SysUserVo> selectPageFbUserAttendanceList(SubUserAttendanceQueryReq dto, PageQuery pageQuery);
|
TableDataInfo<SysUserVo> selectPageFbUserAttendanceList(SubUserAttendanceQueryReq dto, PageQuery pageQuery);
|
||||||
|
|
||||||
TableDataInfo<SysUserVo> todayUserList(SubTodayUserDto dto, PageQuery pageQuery);
|
TableDataInfo<SysUserVo> todayUserList(SubTodayUserDto dto, PageQuery pageQuery);
|
||||||
|
|
||||||
|
int appResetUserPwd(AppUserUpdatePasswordDto dto);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -50,6 +50,7 @@ import org.dromara.project.service.IBusProjectTeamService;
|
|||||||
import org.dromara.project.service.IBusUserProjectRelevancyService;
|
import org.dromara.project.service.IBusUserProjectRelevancyService;
|
||||||
import org.dromara.system.domain.*;
|
import org.dromara.system.domain.*;
|
||||||
import org.dromara.system.domain.bo.SysUserBo;
|
import org.dromara.system.domain.bo.SysUserBo;
|
||||||
|
import org.dromara.system.domain.dto.AppUserUpdatePasswordDto;
|
||||||
import org.dromara.system.domain.dto.FbUserListDto;
|
import org.dromara.system.domain.dto.FbUserListDto;
|
||||||
import org.dromara.system.domain.dto.role.SysRoleProjectDto;
|
import org.dromara.system.domain.dto.role.SysRoleProjectDto;
|
||||||
import org.dromara.system.domain.vo.SysPostVo;
|
import org.dromara.system.domain.vo.SysPostVo;
|
||||||
@ -1509,4 +1510,15 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
|
|||||||
}
|
}
|
||||||
return TableDataInfo.build(page);
|
return TableDataInfo.build(page);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int appResetUserPwd(AppUserUpdatePasswordDto dto) {
|
||||||
|
Long userId = LoginHelper.getUserId();
|
||||||
|
SysUser sysUser = baseMapper.selectById(userId);
|
||||||
|
boolean checkpw = BCrypt.checkpw(dto.getOldPassword(), sysUser.getPassword());
|
||||||
|
if(!checkpw){
|
||||||
|
throw new ServiceException("旧密码错误");
|
||||||
|
}
|
||||||
|
return resetUserPwd(sysUser.getUserId(), BCrypt.hashpw(dto.getNewPassword()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user