优化
This commit is contained in:
@ -310,6 +310,7 @@ public class DesVolumeFileServiceImpl extends ServiceImpl<DesVolumeFileMapper, D
|
|||||||
// 根据文件类型和文件名判断是否存在文件,存在则版本号往上增
|
// 根据文件类型和文件名判断是否存在文件,存在则版本号往上增
|
||||||
List<DesVolumeFile> existingFiles = baseMapper.selectList(new LambdaQueryWrapper<DesVolumeFile>()
|
List<DesVolumeFile> existingFiles = baseMapper.selectList(new LambdaQueryWrapper<DesVolumeFile>()
|
||||||
.eq(DesVolumeFile::getType, type)
|
.eq(DesVolumeFile::getType, type)
|
||||||
|
.eq(DesVolumeFile::getVolumeCatalogId, file.getVolumeCatalogId())
|
||||||
.eq(DesVolumeFile::getFileName, fileName)
|
.eq(DesVolumeFile::getFileName, fileName)
|
||||||
.orderByDesc(DesVolumeFile::getVersion));
|
.orderByDesc(DesVolumeFile::getVersion));
|
||||||
|
|
||||||
@ -327,10 +328,11 @@ public class DesVolumeFileServiceImpl extends ServiceImpl<DesVolumeFileMapper, D
|
|||||||
// 先查找对应的蓝图文件最新版本
|
// 先查找对应的蓝图文件最新版本
|
||||||
List<DesVolumeFile> blueprintFiles = baseMapper.selectList(new LambdaQueryWrapper<DesVolumeFile>()
|
List<DesVolumeFile> blueprintFiles = baseMapper.selectList(new LambdaQueryWrapper<DesVolumeFile>()
|
||||||
.eq(DesVolumeFile::getType, DesVolumeFile.BLUEPRINT) // 蓝图类型
|
.eq(DesVolumeFile::getType, DesVolumeFile.BLUEPRINT) // 蓝图类型
|
||||||
|
.eq(DesVolumeFile::getVolumeCatalogId, file.getVolumeCatalogId())
|
||||||
// .eq(DesVolumeFile::getFileName, fileName)
|
// .eq(DesVolumeFile::getFileName, fileName)
|
||||||
.orderByDesc(DesVolumeFile::getVersion));
|
.orderByDesc(DesVolumeFile::getVersion));
|
||||||
|
|
||||||
String blueprintVersion = "1.0"; // 默认蓝图版本
|
String blueprintVersion = "0.0"; // 默认蓝图版本
|
||||||
if (CollectionUtil.isNotEmpty(blueprintFiles)) {
|
if (CollectionUtil.isNotEmpty(blueprintFiles)) {
|
||||||
blueprintVersion = blueprintFiles.getFirst().getVersion();
|
blueprintVersion = blueprintFiles.getFirst().getVersion();
|
||||||
}
|
}
|
||||||
|
@ -11,11 +11,14 @@ import org.dromara.common.web.core.BaseController;
|
|||||||
import org.dromara.contractor.service.ISubConstructionUserService;
|
import org.dromara.contractor.service.ISubConstructionUserService;
|
||||||
import org.dromara.project.domain.BusProjectPunchrange;
|
import org.dromara.project.domain.BusProjectPunchrange;
|
||||||
import org.dromara.project.domain.dto.attendance.AttendanceCountDto;
|
import org.dromara.project.domain.dto.attendance.AttendanceCountDto;
|
||||||
|
import org.dromara.project.domain.dto.attendance.AttendanceUserCountDto;
|
||||||
import org.dromara.project.domain.dto.attendance.BusAttendancePunchCardByFaceReq;
|
import org.dromara.project.domain.dto.attendance.BusAttendancePunchCardByFaceReq;
|
||||||
import org.dromara.project.domain.vo.BusAttendanceRuleVo;
|
import org.dromara.project.domain.vo.BusAttendanceRuleVo;
|
||||||
import org.dromara.project.domain.vo.BusAttendanceVo;
|
import org.dromara.project.domain.vo.BusAttendanceVo;
|
||||||
import org.dromara.project.domain.vo.BusMonthAttendanceVo;
|
import org.dromara.project.domain.vo.BusMonthAttendanceVo;
|
||||||
import org.dromara.project.domain.vo.attendance.AttendanceCountVo;
|
import org.dromara.project.domain.vo.attendance.AttendanceCountVo;
|
||||||
|
import org.dromara.project.domain.vo.attendance.AttendanceUserCountVo;
|
||||||
|
import org.dromara.project.domain.vo.attendance.AttendanceUserDataVo;
|
||||||
import org.dromara.project.domain.vo.attendance.AttendanceUserVo;
|
import org.dromara.project.domain.vo.attendance.AttendanceUserVo;
|
||||||
import org.dromara.project.service.IBusAttendanceRuleService;
|
import org.dromara.project.service.IBusAttendanceRuleService;
|
||||||
import org.dromara.project.service.IBusAttendanceService;
|
import org.dromara.project.service.IBusAttendanceService;
|
||||||
@ -123,7 +126,7 @@ public class BusAttendanceAppController extends BaseController {
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 统计指定日期的打卡人员
|
* 统计指定日期的打卡人员数量
|
||||||
*/
|
*/
|
||||||
@GetMapping("/count")
|
@GetMapping("/count")
|
||||||
public R<AttendanceCountVo> getAttendanceCount(AttendanceCountDto dto){
|
public R<AttendanceCountVo> getAttendanceCount(AttendanceCountDto dto){
|
||||||
@ -131,7 +134,6 @@ public class BusAttendanceAppController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 指定日期的打卡人员列表
|
* 指定日期的打卡人员列表
|
||||||
*/
|
*/
|
||||||
@ -140,4 +142,41 @@ public class BusAttendanceAppController extends BaseController {
|
|||||||
return attendanceService.getAttendanceUser(dto,pageQuery);
|
return attendanceService.getAttendanceUser(dto,pageQuery);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 指定月份的打卡人员考勤统计
|
||||||
|
*/
|
||||||
|
@GetMapping("/getAttendanceUserCount")
|
||||||
|
public R<AttendanceUserCountVo> getAttendanceUserCount(AttendanceUserCountDto dto){
|
||||||
|
return R.ok(attendanceService.getAttendanceUserCount(dto));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 指定月份的打卡人员考勤数据
|
||||||
|
*/
|
||||||
|
@GetMapping("/getAttendanceUserData")
|
||||||
|
public R<AttendanceUserDataVo> getAttendanceUserData(AttendanceUserCountDto dto){
|
||||||
|
return R.ok(attendanceService.getAttendanceUserData(dto));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,11 @@
|
|||||||
|
package org.dromara.project.domain.dto.attendance;
|
||||||
|
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class AttendanceUserCountDto {
|
||||||
|
private Long projectId;
|
||||||
|
private String month;
|
||||||
|
private Long userId;
|
||||||
|
}
|
@ -58,4 +58,9 @@ public class BusReissueCardAddReq implements Serializable {
|
|||||||
* 补卡申请时间
|
* 补卡申请时间
|
||||||
*/
|
*/
|
||||||
private LocalDateTime userTime;
|
private LocalDateTime userTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 补卡类型(1上班 2下班)
|
||||||
|
*/
|
||||||
|
private String reissueCardType;
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,27 @@
|
|||||||
|
package org.dromara.project.domain.vo.attendance;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class AttendanceUserCountVo {
|
||||||
|
/**
|
||||||
|
* 出勤天数
|
||||||
|
*/
|
||||||
|
private Integer workNum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 迟到次数
|
||||||
|
*/
|
||||||
|
private Integer lateNum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 早退次数
|
||||||
|
*/
|
||||||
|
private Integer earlyNum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 缺卡次数
|
||||||
|
*/
|
||||||
|
private Integer absentNum;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,33 @@
|
|||||||
|
package org.dromara.project.domain.vo.attendance;
|
||||||
|
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class AttendanceUserDataDetailVo {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 打卡时间
|
||||||
|
*/
|
||||||
|
private LocalDate clockDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 星期几
|
||||||
|
*/
|
||||||
|
private Integer week;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 打卡时间
|
||||||
|
*/
|
||||||
|
private LocalDateTime clockTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 迟到或早退的分钟
|
||||||
|
*/
|
||||||
|
private Integer minuteCount;
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
package org.dromara.project.domain.vo.attendance;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class AttendanceUserDataVo {
|
||||||
|
/**
|
||||||
|
* 出勤天数
|
||||||
|
*/
|
||||||
|
private List<AttendanceUserDataDetailVo> work;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 迟到
|
||||||
|
*/
|
||||||
|
private List<AttendanceUserDataDetailVo> late;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 早退
|
||||||
|
*/
|
||||||
|
private List<AttendanceUserDataDetailVo> early;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 缺卡
|
||||||
|
*/
|
||||||
|
private List<AttendanceUserDataDetailVo> absent;
|
||||||
|
|
||||||
|
}
|
@ -5,6 +5,7 @@ import lombok.Data;
|
|||||||
@Data
|
@Data
|
||||||
public class AttendanceUserVo {
|
public class AttendanceUserVo {
|
||||||
|
|
||||||
|
private Long userId;
|
||||||
/**
|
/**
|
||||||
* 用户昵称
|
* 用户昵称
|
||||||
*/
|
*/
|
||||||
@ -13,7 +14,7 @@ public class AttendanceUserVo {
|
|||||||
/**
|
/**
|
||||||
* 用户头像
|
* 用户头像
|
||||||
*/
|
*/
|
||||||
private Long avatar;
|
private String avatar;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 工种(字典type_of_work)
|
* 工种(字典type_of_work)
|
||||||
|
@ -71,6 +71,11 @@ public class BusReissueCardVo implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private Long projectId;
|
private Long projectId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目名
|
||||||
|
*/
|
||||||
|
private String projectName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 班组长id
|
* 班组长id
|
||||||
*/
|
*/
|
||||||
@ -141,4 +146,14 @@ public class BusReissueCardVo implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private String status;
|
private String status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 头像
|
||||||
|
*/
|
||||||
|
private String avatar;
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package org.dromara.project.service;
|
|||||||
|
|
||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
import org.dromara.project.domain.dto.attendance.AttendanceCountDto;
|
import org.dromara.project.domain.dto.attendance.AttendanceCountDto;
|
||||||
|
import org.dromara.project.domain.dto.attendance.AttendanceUserCountDto;
|
||||||
import org.dromara.project.domain.dto.attendance.BusAttendancePunchCardByFaceReq;
|
import org.dromara.project.domain.dto.attendance.BusAttendancePunchCardByFaceReq;
|
||||||
import org.dromara.project.domain.vo.BusAttendanceVo;
|
import org.dromara.project.domain.vo.BusAttendanceVo;
|
||||||
import org.dromara.project.domain.bo.BusAttendanceBo;
|
import org.dromara.project.domain.bo.BusAttendanceBo;
|
||||||
@ -12,6 +13,8 @@ import org.dromara.common.mybatis.core.page.PageQuery;
|
|||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import org.dromara.project.domain.vo.BusMonthAttendanceVo;
|
import org.dromara.project.domain.vo.BusMonthAttendanceVo;
|
||||||
import org.dromara.project.domain.vo.attendance.AttendanceCountVo;
|
import org.dromara.project.domain.vo.attendance.AttendanceCountVo;
|
||||||
|
import org.dromara.project.domain.vo.attendance.AttendanceUserCountVo;
|
||||||
|
import org.dromara.project.domain.vo.attendance.AttendanceUserDataVo;
|
||||||
import org.dromara.project.domain.vo.attendance.AttendanceUserVo;
|
import org.dromara.project.domain.vo.attendance.AttendanceUserVo;
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
@ -137,4 +140,15 @@ public interface IBusAttendanceService extends IService<BusAttendance>{
|
|||||||
* 指定日期的打卡人员列表
|
* 指定日期的打卡人员列表
|
||||||
*/
|
*/
|
||||||
TableDataInfo<AttendanceUserVo> getAttendanceUser(AttendanceCountDto dto, PageQuery pageQuery);
|
TableDataInfo<AttendanceUserVo> getAttendanceUser(AttendanceCountDto dto, PageQuery pageQuery);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 指定月份的打卡人员考勤统计
|
||||||
|
*/
|
||||||
|
AttendanceUserCountVo getAttendanceUserCount(AttendanceUserCountDto dto);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 指定月份的打卡人员考勤数据
|
||||||
|
*/
|
||||||
|
AttendanceUserDataVo getAttendanceUserData(AttendanceUserCountDto dto);
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package org.dromara.project.service.impl;
|
|||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.json.JSONArray;
|
import cn.hutool.json.JSONArray;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
@ -11,6 +12,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.poi.ss.formula.functions.T;
|
||||||
import org.dromara.common.core.constant.HttpStatus;
|
import org.dromara.common.core.constant.HttpStatus;
|
||||||
import org.dromara.common.core.exception.ServiceException;
|
import org.dromara.common.core.exception.ServiceException;
|
||||||
import org.dromara.common.core.utils.MapstructUtils;
|
import org.dromara.common.core.utils.MapstructUtils;
|
||||||
@ -21,22 +23,25 @@ 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.utils.JSTUtil;
|
import org.dromara.common.utils.JSTUtil;
|
||||||
import org.dromara.contractor.domain.SubConstructionUser;
|
import org.dromara.contractor.domain.SubConstructionUser;
|
||||||
|
import org.dromara.contractor.domain.vo.constructionuser.SubConstructionUserVo;
|
||||||
import org.dromara.contractor.service.ISubConstructionUserService;
|
import org.dromara.contractor.service.ISubConstructionUserService;
|
||||||
import org.dromara.project.domain.*;
|
import org.dromara.project.domain.*;
|
||||||
import org.dromara.project.domain.bo.BusAttendanceBo;
|
import org.dromara.project.domain.bo.BusAttendanceBo;
|
||||||
import org.dromara.project.domain.dto.attendance.AttendanceCountDto;
|
import org.dromara.project.domain.dto.attendance.AttendanceCountDto;
|
||||||
|
import org.dromara.project.domain.dto.attendance.AttendanceUserCountDto;
|
||||||
import org.dromara.project.domain.dto.attendance.BusAttendancePunchCardByFaceReq;
|
import org.dromara.project.domain.dto.attendance.BusAttendancePunchCardByFaceReq;
|
||||||
import org.dromara.project.domain.enums.BusAttendanceClockStatusEnum;
|
import org.dromara.project.domain.enums.BusAttendanceClockStatusEnum;
|
||||||
import org.dromara.project.domain.enums.BusAttendanceCommuterEnum;
|
import org.dromara.project.domain.enums.BusAttendanceCommuterEnum;
|
||||||
import org.dromara.project.domain.vo.BusAttendanceRuleVo;
|
import org.dromara.project.domain.vo.BusAttendanceRuleVo;
|
||||||
import org.dromara.project.domain.vo.BusAttendanceVo;
|
import org.dromara.project.domain.vo.BusAttendanceVo;
|
||||||
import org.dromara.project.domain.vo.BusMonthAttendanceVo;
|
import org.dromara.project.domain.vo.BusMonthAttendanceVo;
|
||||||
import org.dromara.project.domain.vo.attendance.AttendanceCountVo;
|
import org.dromara.project.domain.vo.attendance.*;
|
||||||
import org.dromara.project.domain.vo.attendance.AttendanceUserVo;
|
|
||||||
import org.dromara.project.mapper.BusAttendanceMapper;
|
import org.dromara.project.mapper.BusAttendanceMapper;
|
||||||
import org.dromara.project.service.*;
|
import org.dromara.project.service.*;
|
||||||
import org.dromara.system.domain.vo.SysOssVo;
|
import org.dromara.system.domain.vo.SysOssVo;
|
||||||
|
import org.dromara.system.domain.vo.SysUserVo;
|
||||||
import org.dromara.system.service.ISysOssService;
|
import org.dromara.system.service.ISysOssService;
|
||||||
|
import org.dromara.system.service.ISysUserService;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
@ -85,6 +90,8 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
|
|||||||
|
|
||||||
private final IBusLeaveService leaveService;
|
private final IBusLeaveService leaveService;
|
||||||
|
|
||||||
|
private final ISysUserService userService;
|
||||||
|
|
||||||
// 出勤状态(正常、迟到、早退)
|
// 出勤状态(正常、迟到、早退)
|
||||||
private static final Set<String> ATTENDANCE_STATUS = new HashSet<>(Arrays.asList(BusAttendanceClockStatusEnum.NORMAL.getValue(),
|
private static final Set<String> ATTENDANCE_STATUS = new HashSet<>(Arrays.asList(BusAttendanceClockStatusEnum.NORMAL.getValue(),
|
||||||
BusAttendanceClockStatusEnum.LATE.getValue(), BusAttendanceClockStatusEnum.LEAVEEARLY.getValue()));
|
BusAttendanceClockStatusEnum.LATE.getValue(), BusAttendanceClockStatusEnum.LEAVEEARLY.getValue()));
|
||||||
@ -577,12 +584,167 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TableDataInfo<AttendanceUserVo> getAttendanceUser(AttendanceCountDto dto, PageQuery pageQuery) {
|
public TableDataInfo<AttendanceUserVo> getAttendanceUser(AttendanceCountDto dto, PageQuery pageQuery) {
|
||||||
|
//查询今天打卡人员
|
||||||
|
|
||||||
// constructionUserService.queryPageList(dto.getProjectId());
|
List<BusAttendance> attendanceList = baseMapper.selectList(Wrappers.<BusAttendance>lambdaQuery()
|
||||||
|
.eq(BusAttendance::getProjectId, dto.getProjectId())
|
||||||
|
.in(BusAttendance::getClockStatus,Arrays.asList("1","2","3","5","7"))
|
||||||
|
.eq(BusAttendance::getClockDate, dto.getDate())
|
||||||
|
);
|
||||||
|
List<Long> attendanceUserIds = attendanceList.stream().map(BusAttendance::getUserId).toList();
|
||||||
|
|
||||||
|
LambdaQueryWrapper<SubConstructionUser> wrapper = new LambdaQueryWrapper<>();
|
||||||
|
wrapper.eq(SubConstructionUser::getProjectId, dto.getProjectId());
|
||||||
|
wrapper.in("1".equals(dto.getClockStatus()),SubConstructionUser::getId,attendanceUserIds);
|
||||||
|
wrapper.notIn("2".equals(dto.getClockStatus()),SubConstructionUser::getId,attendanceUserIds);
|
||||||
|
wrapper.eq(StrUtil.isNotBlank(dto.getTypeOfWork()),SubConstructionUser::getTypeOfWork,dto.getTypeOfWork());
|
||||||
|
wrapper.eq(dto.getTeamId()!=null,SubConstructionUser::getTeamId,dto.getTeamId());
|
||||||
|
Page<SubConstructionUser> result = constructionUserService.page(pageQuery.build(), wrapper);
|
||||||
|
List<SubConstructionUser> records = result.getRecords();
|
||||||
|
|
||||||
|
ArrayList<AttendanceUserVo> list = new ArrayList<>();
|
||||||
|
|
||||||
return null;
|
for (SubConstructionUser constructionUser : records) {
|
||||||
|
AttendanceUserVo attendanceUserVo = new AttendanceUserVo();
|
||||||
|
SysUserVo sysUserVo = userService.selectUserById(constructionUser.getSysUserId());
|
||||||
|
attendanceUserVo.setUserId(sysUserVo.getUserId());
|
||||||
|
attendanceUserVo.setNickName(sysUserVo.getNickName());
|
||||||
|
SysOssVo byId = ossService.getById(sysUserVo.getAvatar());
|
||||||
|
if (byId != null) {
|
||||||
|
attendanceUserVo.setAvatar(byId.getUrl());
|
||||||
|
}
|
||||||
|
attendanceUserVo.setTypeOfWork(attendanceUserVo.getTypeOfWork());
|
||||||
|
attendanceUserVo.setTeamName(attendanceUserVo.getTeamName());
|
||||||
|
if(attendanceUserIds.contains(constructionUser.getSysUserId())){
|
||||||
|
attendanceUserVo.setClockStatus("1");
|
||||||
|
}else{
|
||||||
|
attendanceUserVo.setClockStatus("2");
|
||||||
|
}
|
||||||
|
list.add(attendanceUserVo);
|
||||||
|
}
|
||||||
|
TableDataInfo<AttendanceUserVo> rspData = new TableDataInfo<>();
|
||||||
|
rspData.setCode(cn.hutool.http.HttpStatus.HTTP_OK);
|
||||||
|
rspData.setMsg("查询成功");
|
||||||
|
rspData.setRows(list);
|
||||||
|
rspData.setTotal(result.getTotal());
|
||||||
|
|
||||||
|
return rspData;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AttendanceUserCountVo getAttendanceUserCount(AttendanceUserCountDto dto) {
|
||||||
|
|
||||||
|
|
||||||
|
AttendanceUserCountVo attendanceUserCountVo = new AttendanceUserCountVo();
|
||||||
|
|
||||||
|
List<String> validStatusList = Arrays.asList("1", "2", "3", "5", "7");
|
||||||
|
// 解析月份字符串获取开始和结束日期
|
||||||
|
LocalDate startDate = LocalDate.parse(dto.getMonth() + "-01");
|
||||||
|
LocalDate endDate = startDate.withDayOfMonth(startDate.lengthOfMonth());
|
||||||
|
|
||||||
|
|
||||||
|
// 查询该月的所有考勤记录
|
||||||
|
List<BusAttendanceVo> attendanceList = baseMapper.selectVoList(Wrappers.lambdaQuery(BusAttendance.class)
|
||||||
|
.eq(BusAttendance::getUserId, dto.getUserId())
|
||||||
|
.eq(BusAttendance::getProjectId, dto.getProjectId())
|
||||||
|
.ge(BusAttendance::getClockDate, startDate)
|
||||||
|
.le(BusAttendance::getClockDate, endDate)
|
||||||
|
.orderByAsc(BusAttendance::getClockDate));
|
||||||
|
|
||||||
|
|
||||||
|
// 过滤有效考勤记录
|
||||||
|
Set<LocalDate> collect = attendanceList.stream()
|
||||||
|
.filter(a -> validStatusList.contains(a.getClockStatus()))
|
||||||
|
.map(BusAttendanceVo::getClockDate)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
|
||||||
|
attendanceUserCountVo.setWorkNum(collect.size());
|
||||||
|
|
||||||
|
List<LocalDate> lateList = attendanceList.stream()
|
||||||
|
.filter(a -> "2".equals(a.getClockStatus()))
|
||||||
|
.map(BusAttendanceVo::getClockDate)
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
attendanceUserCountVo.setLateNum(lateList.size());
|
||||||
|
|
||||||
|
List<LocalDate> earlyList = attendanceList.stream().filter(a -> "3".equals(a.getClockStatus()))
|
||||||
|
.map(BusAttendanceVo::getClockDate)
|
||||||
|
.toList();
|
||||||
|
attendanceUserCountVo.setEarlyNum(earlyList.size());
|
||||||
|
|
||||||
|
List<LocalDate> absentList = attendanceList.stream().filter(a -> "4".equals(a.getClockStatus()))
|
||||||
|
.map(BusAttendanceVo::getClockDate)
|
||||||
|
.toList();
|
||||||
|
attendanceUserCountVo.setAbsentNum(absentList.size());
|
||||||
|
|
||||||
|
return attendanceUserCountVo;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AttendanceUserDataVo getAttendanceUserData(AttendanceUserCountDto dto) {
|
||||||
|
AttendanceUserDataVo vo = new AttendanceUserDataVo();
|
||||||
|
|
||||||
|
List<String> validStatusList = Arrays.asList("1", "2", "3", "5", "7");
|
||||||
|
// 解析月份字符串获取开始和结束日期
|
||||||
|
LocalDate startDate = LocalDate.parse(dto.getMonth() + "-01");
|
||||||
|
LocalDate endDate = startDate.withDayOfMonth(startDate.lengthOfMonth());
|
||||||
|
|
||||||
|
// 查询该月的所有考勤记录
|
||||||
|
List<BusAttendanceVo> attendanceList = baseMapper.selectVoList(Wrappers.lambdaQuery(BusAttendance.class)
|
||||||
|
.eq(BusAttendance::getUserId, dto.getUserId())
|
||||||
|
.eq(BusAttendance::getProjectId, dto.getProjectId())
|
||||||
|
.ge(BusAttendance::getClockDate, startDate)
|
||||||
|
.le(BusAttendance::getClockDate, endDate)
|
||||||
|
.orderByAsc(BusAttendance::getClockDate));
|
||||||
|
|
||||||
|
// 处理正常出勤记录(去重日期)
|
||||||
|
List<AttendanceUserDataDetailVo> workList = attendanceList.stream()
|
||||||
|
.filter(a -> validStatusList.contains(a.getClockStatus()))
|
||||||
|
.map(this::convertToDetailVo)
|
||||||
|
.distinct() // 去除重复日期
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
vo.setWork(workList);
|
||||||
|
|
||||||
|
// 处理迟到记录
|
||||||
|
List<AttendanceUserDataDetailVo> lateList = attendanceList.stream()
|
||||||
|
.filter(a -> "2".equals(a.getClockStatus()))
|
||||||
|
.map(this::convertToDetailVo)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
vo.setLate(lateList);
|
||||||
|
|
||||||
|
// 处理早退记录
|
||||||
|
List<AttendanceUserDataDetailVo> earlyList = attendanceList.stream()
|
||||||
|
.filter(a -> "3".equals(a.getClockStatus()))
|
||||||
|
.map(this::convertToDetailVo)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
vo.setEarly(earlyList);
|
||||||
|
|
||||||
|
// 处理缺勤记录
|
||||||
|
List<AttendanceUserDataDetailVo> absentList = attendanceList.stream()
|
||||||
|
.filter(a -> "4".equals(a.getClockStatus()))
|
||||||
|
.map(this::convertToDetailVo)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
vo.setAbsent(absentList);
|
||||||
|
|
||||||
|
return vo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将BusAttendanceVo转换为AttendanceUserDataDetailVo
|
||||||
|
* @param attendance 考勤记录
|
||||||
|
* @return 考勤详情VO
|
||||||
|
*/
|
||||||
|
private AttendanceUserDataDetailVo convertToDetailVo(BusAttendanceVo attendance) {
|
||||||
|
AttendanceUserDataDetailVo detailVo = new AttendanceUserDataDetailVo();
|
||||||
|
detailVo.setClockDate(attendance.getClockDate());
|
||||||
|
detailVo.setWeek(attendance.getClockDate().getDayOfWeek().getValue());
|
||||||
|
detailVo.setClockTime(attendance.getClockTime());
|
||||||
|
detailVo.setMinuteCount(attendance.getMinuteCount());
|
||||||
|
return detailVo;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,10 @@ import org.dromara.project.domain.dto.reissuecard.BusReissueCardQueryReq;
|
|||||||
import org.dromara.project.domain.vo.reissuecard.BusReissueCardVo;
|
import org.dromara.project.domain.vo.reissuecard.BusReissueCardVo;
|
||||||
import org.dromara.project.mapper.BusReissueCardMapper;
|
import org.dromara.project.mapper.BusReissueCardMapper;
|
||||||
import org.dromara.project.service.*;
|
import org.dromara.project.service.*;
|
||||||
|
import org.dromara.system.domain.vo.SysOssVo;
|
||||||
|
import org.dromara.system.domain.vo.SysUserVo;
|
||||||
|
import org.dromara.system.service.ISysOssService;
|
||||||
|
import org.dromara.system.service.ISysUserService;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.context.event.EventListener;
|
import org.springframework.context.event.EventListener;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -65,6 +69,12 @@ public class BusReissueCardServiceImpl extends ServiceImpl<BusReissueCardMapper,
|
|||||||
@Resource
|
@Resource
|
||||||
private IBusUserProjectRelevancyService userProjectRelevancyService;
|
private IBusUserProjectRelevancyService userProjectRelevancyService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ISysUserService userService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ISysOssService ossService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询施工人员补卡申请
|
* 查询施工人员补卡申请
|
||||||
*
|
*
|
||||||
@ -73,7 +83,21 @@ public class BusReissueCardServiceImpl extends ServiceImpl<BusReissueCardMapper,
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public BusReissueCardVo queryById(Long id) {
|
public BusReissueCardVo queryById(Long id) {
|
||||||
return baseMapper.selectVoById(id);
|
BusReissueCardVo busReissueCardVo = baseMapper.selectVoById(id);
|
||||||
|
if (busReissueCardVo == null) {
|
||||||
|
throw new ServiceException("施工人员补卡申请信息不存在");
|
||||||
|
}
|
||||||
|
BusProject byId = projectService.getById(busReissueCardVo.getProjectId());
|
||||||
|
busReissueCardVo.setProjectName(byId.getProjectName());
|
||||||
|
|
||||||
|
SysUserVo sysUserVo = userService.selectUserById(busReissueCardVo.getGangerId());
|
||||||
|
busReissueCardVo.setGangerName(sysUserVo.getNickName());
|
||||||
|
if(sysUserVo.getAvatar() != null){
|
||||||
|
SysOssVo byId1 = ossService.getById(sysUserVo.getAvatar());
|
||||||
|
busReissueCardVo.setAvatar(byId1.getUrl());
|
||||||
|
}
|
||||||
|
|
||||||
|
return busReissueCardVo;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -345,14 +369,14 @@ public class BusReissueCardServiceImpl extends ServiceImpl<BusReissueCardMapper,
|
|||||||
public Boolean updateCard(BusReissueCardUpdateReq req) {
|
public Boolean updateCard(BusReissueCardUpdateReq req) {
|
||||||
|
|
||||||
BusReissueCard bean = getById(req.getId());
|
BusReissueCard bean = getById(req.getId());
|
||||||
|
|
||||||
if (bean == null) {
|
if (bean == null) {
|
||||||
throw new ServiceException("未找到该申请");
|
throw new ServiceException("未找到该申请");
|
||||||
}
|
}
|
||||||
|
Long attendanceId = bean.getAttendanceId();
|
||||||
BeanUtil.copyProperties(req, bean);
|
BeanUtil.copyProperties(req, bean);
|
||||||
boolean b = updateById(bean);
|
boolean b = updateById(bean);
|
||||||
if("2".equals(bean.getGangerOpinion())){
|
if("2".equals(bean.getGangerOpinion())){
|
||||||
BusAttendance byId = attendanceService.getById(bean.getAttendanceId());
|
BusAttendance byId = attendanceService.getById(attendanceId);
|
||||||
byId.setClockStatus(BusAttendanceClockStatusEnum.REISSUE.getValue());
|
byId.setClockStatus(BusAttendanceClockStatusEnum.REISSUE.getValue());
|
||||||
}
|
}
|
||||||
return b;
|
return b;
|
||||||
|
Reference in New Issue
Block a user