优化,修改人员管理模块相关代码逻辑

This commit is contained in:
lcj
2025-04-10 18:33:34 +08:00
parent a1b8e245f3
commit f5a63d6927
23 changed files with 267 additions and 424 deletions

View File

@ -13,7 +13,6 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.project.domain.req.workerdailyreport.WorkerDailyReportQueryReq;
import org.dromara.project.domain.resp.workerdailyreport.WorkerDailyReportReissueResp;
import org.dromara.project.domain.vo.BusWorkerDailyReportVo;
import org.dromara.project.service.IBusWorkerDailyReportService;
import org.springframework.validation.annotation.Validated;
@ -44,15 +43,6 @@ public class BusWorkerDailyReportController extends BaseController {
return busWorkerDailyReportService.queryPageList(req, pageQuery);
}
/**
* 查询施工人员补交日报列表
*/
@SaCheckPermission("project:workerDailyReport:list")
@GetMapping("/list/reissue")
public TableDataInfo<WorkerDailyReportReissueResp> listReissue(WorkerDailyReportQueryReq req, PageQuery pageQuery) {
return busWorkerDailyReportService.queryReissuePageList(req, pageQuery);
}
/**
* 导出施工人员日报列表
*/
@ -76,18 +66,6 @@ public class BusWorkerDailyReportController extends BaseController {
return R.ok(busWorkerDailyReportService.queryById(id));
}
/**
* 获取施工人员补交日报详细信息
*
* @param id 主键
*/
@SaCheckPermission("project:workerDailyReport:query")
@GetMapping("/reissue/{id}")
public R<WorkerDailyReportReissueResp> getReissueInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(busWorkerDailyReportService.queryReissueById(id));
}
/**
* 删除施工人员日报
*

View File

@ -55,6 +55,11 @@ public class BusConstructionUser extends BaseEntity {
*/
private Long teamId;
/**
* 班组名称
*/
private String teamName;
/**
* 状态0在职 1离职
*/

View File

@ -1,79 +0,0 @@
package org.dromara.project.domain.bo;
import org.dromara.project.domain.BusWorkerDailyReport;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 施工人员日报业务对象 bus_worker_daily_report
*
* @author lcj
* @date 2025-04-09
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = BusWorkerDailyReport.class, reverseConvertGenerate = false)
public class BusWorkerDailyReportBo extends BaseEntity {
/**
* 主键id
*/
@NotNull(message = "主键id不能为空", groups = { EditGroup.class })
private Long id;
/**
* 项目id
*/
@NotNull(message = "项目id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long projectId;
/**
* 班组id
*/
private Long teamId;
/**
* 申请人id
*/
@NotNull(message = "申请人id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long userId;
/**
* 申请人名字
*/
private String userName;
/**
* 今日完成工作
*/
private String todayCompletedWork;
/**
* 未完成工作
*/
private String unfinishedWork;
/**
* 明日工作
*/
private String tomorrowWork;
/**
* 需协调与帮助
*/
private String coordinationHelp;
/**
* 附件
*/
private String file;
}

View File

@ -0,0 +1,24 @@
package org.dromara.project.domain.enums;
import lombok.Getter;
/**
* @author lcj
* @date 2025/4/10 11:16
*/
@Getter
public enum WageMeasureUnitEnum {
TIME("计时:元/每天", "1"),
PIECE("计件:元/每个", "2");
private final String text;
private final String value;
WageMeasureUnitEnum(String text, String value) {
this.text = text;
this.value = value;
}
}

View File

@ -1,24 +0,0 @@
package org.dromara.project.domain.enums;
import lombok.Getter;
/**
* @author lcj
* @date 2025/4/9 17:23
*/
@Getter
public enum WorkerDailyReportReissueEnum {
UNREISSUE("不是补卡", 1),
REISSUE("是补卡", 2);
private final String text;
private final int value;
WorkerDailyReportReissueEnum(String text, int value) {
this.text = text;
this.value = value;
}
}

View File

@ -2,9 +2,11 @@ package org.dromara.project.domain.req.attendance;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* @author lcj
@ -16,10 +18,31 @@ public class AttendanceQueryTwoWeekReq implements Serializable {
@Serial
private static final long serialVersionUID = 3193787736889938829L;
/**
* 人员姓名
*/
private String userName;
/**
* 项目id
*/
@NotNull(message = "项目id不能为空")
private Long projectId;
/**
* 班组id
*/
private Long teamId;
/**
* 工种
*/
private String typeOfWork;
/**
* 打卡日期
*/
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date clockDate;
}

View File

@ -40,6 +40,6 @@ public class ConstructionUserAttendanceQueryReq implements Serializable {
/**
* 打卡月份
*/
private String clockMonth;
private String clockDate;
}

View File

@ -45,6 +45,11 @@ public class ConstructionUserQueryReq implements Serializable {
*/
private Long notTeamId;
/**
* 班组名称
*/
private String teamName;
/**
* 状态0在职 1离职
*/

View File

@ -48,4 +48,9 @@ public class WorkerDailyReportQueryReq implements Serializable {
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date reportDate;
/**
* 是否为补卡1不是 2是
*/
private Long isResubmit;
}

View File

@ -1,5 +1,6 @@
package org.dromara.project.domain.req.workwage;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.io.Serial;
@ -18,11 +19,13 @@ public class WorkWageCreateReq implements Serializable {
/**
* 项目id
*/
@NotNull(message = "项目id不能为空")
private Long projectId;
/**
* 工种
*/
@NotNull(message = "工种不能为空")
private String workType;
/**
@ -33,18 +36,15 @@ public class WorkWageCreateReq implements Serializable {
/**
* 工资计算方式1计时 2计件
*/
@NotNull(message = "工资计算方式不能为空")
private String wageCalculationType;
/**
* 工资标准
*/
@NotNull(message = "工资标准不能为空")
private Long wage;
/**
* 工资计量单位
*/
private String wageMeasureUnit;
/**
* 备注
*/

View File

@ -25,31 +25,16 @@ public class WorkWageUpdateReq implements Serializable {
*/
private Long projectId;
/**
* 工种
*/
private String workType;
/**
* 是否是特种兵1是 2否
*/
private String isSpecialType;
/**
* 工资计算方式1计时 2计件
*/
private String wageCalculationType;
/**
* 工资标准
*/
private Long wage;
/**
* 工资计量单位
*/
private String wageMeasureUnit;
/**
* 备注
*/

View File

@ -75,9 +75,10 @@ public class BusConstructionUserVo implements Serializable {
private Long teamId;
/**
* 班组
* 班组名称
*/
private BusProjectTeamVo teamVo;
@ExcelProperty(value = "班组名称")
private String teamName;
/**
* 状态0在职 1离职

View File

@ -52,6 +52,11 @@ public class BusProjectTeamVo implements Serializable {
@ExcelDictFormat(readConverterExp = "0=范围内打卡,1=任何地点打卡")
private String isClockIn;
/**
* 班组人数
*/
private Long peopleNumber;
/**
* 备注
*/

View File

@ -77,6 +77,11 @@ public class BusWorkerDailyReportVo implements Serializable {
@ExcelProperty(value = "需协调与帮助")
private String coordinationHelp;
/**
* 是否为补卡1不是 2是
*/
private Long isResubmit;
/**
* 补交理由
*/
@ -95,6 +100,11 @@ public class BusWorkerDailyReportVo implements Serializable {
/**
* 附件
*/
private List<String> fileList;
/**
* 附件id
*/
private String file;
/**

View File

@ -45,6 +45,14 @@ public interface IBusConstructionBlacklistService extends IService<BusConstructi
*/
List<BusConstructionBlacklistVo> queryList(ConstructionBlacklistQueryReq req);
/**
* 根据项目id查询黑名单用户id列表
*
* @param projectId 项目id
* @return 黑名单用户id列表
*/
List<Long> queryIdListByProjectId(Long projectId);
/**
* 新增黑名单
*

View File

@ -7,7 +7,6 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.project.domain.BusWorkerDailyReport;
import org.dromara.project.domain.req.workerdailyreport.WorkerDailyReportQueryReq;
import org.dromara.project.domain.resp.workerdailyreport.WorkerDailyReportReissueResp;
import org.dromara.project.domain.vo.BusWorkerDailyReportVo;
import java.util.Collection;
@ -29,14 +28,6 @@ public interface IBusWorkerDailyReportService extends IService<BusWorkerDailyRep
*/
BusWorkerDailyReportVo queryById(Long id);
/**
* 查询施工人员日报补报
*
* @param id 主键
* @return 施工人员日报补报
*/
WorkerDailyReportReissueResp queryReissueById(Long id);
/**
* 分页查询施工人员日报列表
*
@ -46,15 +37,6 @@ public interface IBusWorkerDailyReportService extends IService<BusWorkerDailyRep
*/
TableDataInfo<BusWorkerDailyReportVo> queryPageList(WorkerDailyReportQueryReq req, PageQuery pageQuery);
/**
* 分页查询施工人员日报补报列表
*
* @param req 查询条件
* @param pageQuery 分页参数
* @return 施工人员日报补报分页列表
*/
TableDataInfo<WorkerDailyReportReissueResp> queryReissuePageList(WorkerDailyReportQueryReq req, PageQuery pageQuery);
/**
* 查询符合条件的施工人员日报列表
*
@ -80,14 +62,6 @@ public interface IBusWorkerDailyReportService extends IService<BusWorkerDailyRep
*/
BusWorkerDailyReportVo getVo(BusWorkerDailyReport workerDailyReport);
/**
* 获取施工人员日报补报视图对象
*
* @param workerDailyReport 施工人员日报对象
* @return 施工人员日报补报视图对象
*/
WorkerDailyReportReissueResp getReissueVo(BusWorkerDailyReport workerDailyReport);
/**
* 获取施工人员日报列表查询条件封装
*
@ -104,12 +78,4 @@ public interface IBusWorkerDailyReportService extends IService<BusWorkerDailyRep
*/
Page<BusWorkerDailyReportVo> getVoPage(Page<BusWorkerDailyReport> workerDailyReportPage);
/**
* 获取施工人员日报补报分页对象视图
*
* @param workerDailyReportPage 施工人员日报列表分页对象
* @return 施工人员日报列表分页对象视图
*/
Page<WorkerDailyReportReissueResp> getReissueVoPage(Page<BusWorkerDailyReport> workerDailyReportPage);
}

View File

@ -1,6 +1,7 @@
package org.dromara.project.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -14,7 +15,7 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.project.domain.BusAttendance;
import org.dromara.project.domain.BusLeave;
import org.dromara.project.domain.BusConstructionUser;
import org.dromara.project.domain.BusProjectTeamMember;
import org.dromara.project.domain.enums.AttendanceClockStatusEnum;
import org.dromara.project.domain.enums.AttendanceCommuterEnum;
@ -54,10 +55,10 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
private IBusProjectTeamMemberService projectTeamMemberService;
@Resource
private IBusLeaveService leaveService;
private IBusConstructionUserService constructionUserService;
@Resource
private IBusConstructionUserService constructionUserService;
private IBusConstructionBlacklistService constructionBlacklistService;
/**
* 查询考勤
@ -99,42 +100,46 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
if (projectService.getById(projectId) == null) {
throw new ServiceException("项目信息不存在", HttpStatus.NOT_FOUND);
}
// 获取两周前的日期
LocalDate twoWeeksAgoLocal = LocalDate.now().minusWeeks(2);
// 2. 转成Date时分秒会被置为 00:00:00
Date twoWeeksDate = Date.from(twoWeeksAgoLocal.atStartOfDay(ZoneId.systemDefault()).toInstant());
// 获取两周内的考勤记录
// 1. 处理日期区间
Date clockDate = req.getClockDate();
LocalDate startLocal;
LocalDate endLocal;
if (clockDate != null) {
// 检查 clockDate 不能大于当前日期
if (DateUtil.compare(clockDate, new Date()) > 0) {
throw new ServiceException("日期不能大于当前日期", HttpStatus.BAD_REQUEST);
}
// 以传入的 clockDate 为结束日期
endLocal = clockDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
} else {
// 如果未传入,则以当前日期为结束日期
endLocal = LocalDate.now();
}
// 计算开始日期为结束日期减两周
startLocal = endLocal.minusWeeks(2);
// 如果数据库中的 clockDate 只存储日期(时分秒置为 00:00:00直接转换即可
Date startDate = Date.from(startLocal.atStartOfDay(ZoneId.systemDefault()).toInstant());
Date endDate = Date.from(endLocal.atStartOfDay(ZoneId.systemDefault()).toInstant());
// 构造查询条件 clockDate 在 [startDate, endDate] 区间内
LambdaQueryWrapper<BusAttendance> lqw = new LambdaQueryWrapper<>();
lqw.eq(BusAttendance::getProjectId, projectId)
.ge(BusAttendance::getClockDate, twoWeeksDate)
.eq(StringUtils.isNotEmpty(req.getUserName()), BusAttendance::getUserName, req.getUserName())
.between(BusAttendance::getClockDate, startDate, endDate)
.orderByDesc(BusAttendance::getClockDate);
// 构建查询用户相关信息查询条件
List<Long> userIdList = constructionUserService.lambdaQuery()
.eq(BusConstructionUser::getProjectId, projectId)
.eq(req.getTeamId() != null, BusConstructionUser::getTeamId, req.getTeamId())
.eq(req.getTypeOfWork() != null, BusConstructionUser::getTypeOfWork, req.getTypeOfWork())
.notIn(BusConstructionUser::getId, constructionBlacklistService.queryIdListByProjectId(projectId))
.list().stream().map(BusConstructionUser::getId).toList();
lqw.in(CollUtil.isNotEmpty(userIdList), BusAttendance::getUserId, userIdList);
Map<Date, List<BusAttendance>> dateListMap = this.list(lqw)
.stream().collect(Collectors.groupingBy(BusAttendance::getClockDate));
// 查询两周内的请假记录
List<BusLeave> leaveList = leaveService.lambdaQuery()
.eq(BusLeave::getProjectId, projectId)
.ge(BusLeave::getEndTime, twoWeeksDate) // 请假结束时间在两周前之后的
.le(BusLeave::getStartTime, new Date()) // 请假开始时间在当前时间之前的
.list();
// 构造一个 MapKey -> LocalDate请假生效的日期Value -> 当天请假的用户ID集合Set 用于去重)
Map<LocalDate, Set<Long>> leaveMap = new HashMap<>();
LocalDate todayLocal = LocalDate.now();
for (BusLeave leave : leaveList) {
// 将请假记录的开始和结束时间转换为 LocalDate
LocalDate leaveStart = leave.getStartTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate leaveEnd = leave.getEndTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
// 计算在两周范围内的有效区间
LocalDate effectiveStart = leaveStart.isBefore(twoWeeksAgoLocal) ? twoWeeksAgoLocal : leaveStart;
LocalDate effectiveEnd = leaveEnd.isAfter(todayLocal) ? todayLocal : leaveEnd;
// 对有效区间内的每一天加入该请假用户
for (LocalDate date = effectiveStart; !date.isAfter(effectiveEnd); date = date.plusDays(1)) {
leaveMap.computeIfAbsent(date, k -> new HashSet<>()).add(leave.getUserId());
}
}
// 遍历每个日期,计算考勤状态
List<AttendanceClockDateForTwoWeekResp> respList = new ArrayList<>();
// 遍历从两周前到今天的所有日期
for (LocalDate localDate = twoWeeksAgoLocal; !localDate.isAfter(todayLocal); localDate = localDate.plusDays(1)) {
for (LocalDate localDate = startLocal; !localDate.isAfter(endLocal); localDate = localDate.plusDays(1)) {
AttendanceClockDateForTwoWeekResp resp = new AttendanceClockDateForTwoWeekResp();
// 转换为 Date 类型(时分秒为 00:00:00
Date currentDate = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
@ -152,16 +157,21 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
for (List<BusAttendance> userAttendanceList : userAttendanceMap.values()) {
String clockInStatus = null;
String clockOutStatus = null;
String clockAllDayStatus = null;
// 遍历同一用户的考勤记录,分别获取上下班状态
for (BusAttendance a : userAttendanceList) {
if (AttendanceCommuterEnum.CLOCKIN.getValue().equals(a.getCommuter())) {
clockInStatus = a.getClockStatus();
} else if (AttendanceCommuterEnum.CLOCKOUT.getValue().equals(a.getCommuter())) {
clockOutStatus = a.getClockStatus();
} else if (AttendanceCommuterEnum.ALLDAY.getValue().equals(a.getCommuter())) {
clockAllDayStatus = a.getClockStatus();
}
}
// 统计考勤状态
if ((AttendanceClockStatusEnum.NORMAL.getValue().equals(clockInStatus)
if (AttendanceClockStatusEnum.LEAVE.getValue().equals(clockAllDayStatus)) {
leave++;
} else if ((AttendanceClockStatusEnum.NORMAL.getValue().equals(clockInStatus)
|| AttendanceClockStatusEnum.REISSUE.getValue().equals(clockInStatus))
&& (AttendanceClockStatusEnum.NORMAL.getValue().equals(clockOutStatus)
|| AttendanceClockStatusEnum.REISSUE.getValue().equals(clockOutStatus))) {
@ -169,15 +179,12 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
} else if (AttendanceClockStatusEnum.UNCLOCK.getValue().equals(clockInStatus)
&& AttendanceClockStatusEnum.UNCLOCK.getValue().equals(clockOutStatus)) {
absenteeism++;
} else {
} else if (AttendanceClockStatusEnum.UNCLOCK.getValue().equals(clockInStatus)
|| AttendanceClockStatusEnum.UNCLOCK.getValue().equals(clockOutStatus)) {
halfAttendance++;
}
}
}
Set<Long> leaveUserSet = leaveMap.get(localDate);
if (leaveUserSet != null) {
leave = leaveUserSet.size();
}
resp.setAttendance(attendance);
resp.setHalfAttendance(halfAttendance);
resp.setAbsenteeism(absenteeism);

View File

@ -1,7 +1,6 @@
package org.dromara.project.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -30,7 +29,6 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Collection;
import java.util.Date;
import java.util.List;
/**
@ -90,6 +88,20 @@ public class BusConstructionBlacklistServiceImpl extends ServiceImpl<BusConstruc
return baseMapper.selectVoList(lqw);
}
/**
* 根据项目id查询黑名单用户id列表
*
* @param projectId 项目id
* @return 黑名单用户id列表
*/
@Override
public List<Long> queryIdListByProjectId(Long projectId) {
LambdaQueryWrapper<BusConstructionBlacklist> lqw = Wrappers.lambdaQuery(BusConstructionBlacklist.class)
.select(BusConstructionBlacklist::getUserId)
.eq(projectId != null, BusConstructionBlacklist::getProjectId, projectId);
return this.listObjs(lqw, obj -> (Long) obj);
}
/**
* 新增黑名单
*
@ -120,28 +132,6 @@ public class BusConstructionBlacklistServiceImpl extends ServiceImpl<BusConstruc
if (!result) {
throw new ServiceException("新增黑名单失败,数据库异常", HttpStatus.ERROR);
}
// 如果加入黑名单用户已在班组,则移除
Long teamId = constructionUser.getTeamId();
if (teamId != null) {
// 修改用户team_id字段
LambdaUpdateWrapper<BusConstructionUser> constructionUserLqw = Wrappers.lambdaUpdate(BusConstructionUser.class)
.eq(BusConstructionUser::getId, userId)
.set(BusConstructionUser::getTeamId, null)
.set(BusConstructionUser::getLeaveDate, new Date());
boolean update = constructionUserService.update(constructionUserLqw);
if (!update) {
throw new ServiceException("用户退场失败,数据库异常", HttpStatus.ERROR);
}
// 移除用户与班组关联
LambdaQueryWrapper<BusProjectTeamMember> projectTeamMemberLqw = Wrappers.lambdaQuery(BusProjectTeamMember.class)
.eq(BusProjectTeamMember::getProjectId, req.getProjectId())
.eq(BusProjectTeamMember::getTeamId, teamId)
.eq(BusProjectTeamMember::getMemberId, userId);
boolean remove = projectTeamMemberService.remove(projectTeamMemberLqw);
if (!remove) {
throw new ServiceException("用户退场失败,数据库异常", HttpStatus.ERROR);
}
}
return constructionBlacklist.getId();
}
@ -158,13 +148,16 @@ public class BusConstructionBlacklistServiceImpl extends ServiceImpl<BusConstruc
if (projectService.getById(projectId) == null) {
throw new ServiceException("对应项目不存在", HttpStatus.NOT_FOUND);
}
// 判断是否已经存在该用户
LambdaQueryWrapper<BusConstructionBlacklist> lqw = Wrappers.lambdaQuery(BusConstructionBlacklist.class)
.eq(BusConstructionBlacklist::getProjectId, projectId)
.eq(BusConstructionBlacklist::getUserId, userId);
if (this.count(lqw) > 0) {
throw new ServiceException("该用户已经存在", HttpStatus.BAD_REQUEST);
// 判断用户是否退场
Long count = projectTeamMemberService.lambdaQuery()
.eq(BusProjectTeamMember::getProjectId, projectId)
.eq(BusProjectTeamMember::getMemberId, userId)
.count();
if (count > 0) {
throw new ServiceException("请将施工人员退场后,再加入黑名单", HttpStatus.BAD_REQUEST);
}
// 判断是否已经存在该用户
this.validUserInBlacklist(userId, projectId);
}
/**
@ -214,6 +207,7 @@ public class BusConstructionBlacklistServiceImpl extends ServiceImpl<BusConstruc
LambdaQueryWrapper<BusConstructionBlacklist> lqw = new LambdaQueryWrapper<>();
Long id = req.getId();
Long userId = req.getUserId();
Long projectId = req.getProjectId();
String userName = req.getUserName();
String sfzNumber = req.getSfzNumber();
// 模糊查询
@ -222,6 +216,7 @@ public class BusConstructionBlacklistServiceImpl extends ServiceImpl<BusConstruc
// 精确查询
lqw.eq(ObjectUtils.isNotEmpty(id), BusConstructionBlacklist::getId, id);
lqw.eq(ObjectUtils.isNotEmpty(userId), BusConstructionBlacklist::getUserId, userId);
lqw.eq(ObjectUtils.isNotEmpty(projectId), BusConstructionBlacklist::getProjectId, projectId);
return lqw;
}
}

View File

@ -29,7 +29,6 @@ import org.dromara.project.domain.resp.constructionuser.ConstructionUserAttendan
import org.dromara.project.domain.resp.constructionuser.ConstructionUserAttendanceTotalResp;
import org.dromara.project.domain.vo.BusConstructionUserVo;
import org.dromara.project.domain.vo.BusContractorVo;
import org.dromara.project.domain.vo.BusProjectTeamVo;
import org.dromara.project.mapper.BusConstructionUserMapper;
import org.dromara.project.service.*;
import org.dromara.system.domain.vo.SysOssVo;
@ -65,9 +64,6 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
@Resource
private IBusProjectTeamMemberService projectTeamMemberService;
@Resource
private IBusProjectTeamService projectTeamService;
@Resource
private ISysOssService ossService;
@ -244,8 +240,6 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
BeanUtils.copyProperties(constructionUserVo, constructionUserExportVo);
// 关联分包公司信息
constructionUserExportVo.setContractorName(constructionUserVo.getContractorVo().getName());
// 关联班组信息
constructionUserExportVo.setTeamName(constructionUserVo.getTeamVo().getTeamName());
// 关联项目信息
Long projectId = constructionUserVo.getProjectId();
String projectName = null;
@ -594,11 +588,6 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
if (StringUtils.isNotBlank(facePic)) {
constructionUserVo.setFacePicUrl(ossService.getById(Long.parseLong(facePic)).getUrl());
}
// 关联查询班组信息
Long teamId = constructionUser.getTeamId();
if (teamId != null) {
constructionUserVo.setTeamVo(projectTeamService.queryById(teamId));
}
// 关联查询薪水标准
Long projectId = constructionUser.getProjectId();
String typeOfWork = constructionUser.getTypeOfWork();
@ -635,6 +624,7 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
Long contractorId = req.getContractorId();
Long teamId = req.getTeamId();
Long notTeamId = req.getNotTeamId();
String teamName = req.getTeamName();
String status = req.getStatus();
String isPinch = req.getIsPinch();
String phone = req.getPhone();
@ -660,6 +650,7 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
lqw.like(StringUtils.isNotBlank(yhkNumber), BusConstructionUser::getYhkNumber, yhkNumber);
lqw.like(StringUtils.isNotBlank(yhkOpeningBank), BusConstructionUser::getYhkOpeningBank, yhkOpeningBank);
lqw.like(StringUtils.isNotBlank(yhkCardholder), BusConstructionUser::getYhkCardholder, yhkCardholder);
lqw.like(StringUtils.isNotBlank(teamName), BusConstructionUser::getTeamName, teamName);
// 精确查询
lqw.eq(StringUtils.isNotBlank(status), BusConstructionUser::getStatus, status);
lqw.eq(ObjectUtils.isNotEmpty(id), BusConstructionUser::getId, id);
@ -679,15 +670,12 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
.or().isNull(BusConstructionUser::getTeamId));
}
// 查询当前项目下的黑名单人员
LambdaQueryWrapper<BusConstructionBlacklist> blacklistLqw = Wrappers.lambdaQuery(BusConstructionBlacklist.class)
.select(BusConstructionBlacklist::getUserId);
if (projectId != null) {
blacklistLqw.eq(BusConstructionBlacklist::getProjectId, projectId);
}
List<Long> blackUserIdList = constructionBlacklistService.listObjs(blacklistLqw, obj -> (Long) obj);
// 查询结果移除黑名单人员
if (CollUtil.isNotEmpty(blackUserIdList)) {
lqw.notIn(BusConstructionUser::getId, blackUserIdList);
List<Long> blackUserIdList = constructionBlacklistService.queryIdListByProjectId(projectId);
// 查询结果移除黑名单人员
if (CollUtil.isNotEmpty(blackUserIdList)) {
lqw.notIn(BusConstructionUser::getId, blackUserIdList);
}
}
return lqw;
}
@ -713,11 +701,6 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
.collect(Collectors.toSet());
Map<Long, List<BusContractor>> contractorIdContractorMap = contractorService.listByIds(contractorIdSet).stream()
.collect(Collectors.groupingBy(BusContractor::getId));
// 关联查询班组信息
Set<Long> teamIdSet = constructionUserList.stream().map(BusConstructionUser::getTeamId)
.collect(Collectors.toSet());
Map<Long, List<BusProjectTeam>> teamIdTeamMap = projectTeamService.listByIds(teamIdSet).stream()
.collect(Collectors.groupingBy(BusProjectTeam::getId));
// 关联查询工资标准
LambdaQueryWrapper<BusWorkWage> workWageLqw = Wrappers.lambdaQuery(BusWorkWage.class)
.in(BusWorkWage::getProjectId, constructionUserList.stream().map(BusConstructionUser::getProjectId).toList())
@ -740,13 +723,6 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
contractor = contractorService.getVo(contractorIdContractorMap.get(contractorId).get(0));
}
constructionUserVo.setContractorVo(contractor);
// 关联班组信息
Long teamId = constructionUser.getTeamId();
BusProjectTeamVo team = null;
if (teamIdTeamMap.containsKey(teamId)) {
team = projectTeamService.getVo(teamIdTeamMap.get(teamId).get(0));
}
constructionUserVo.setTeamVo(team);
// 关联工资标准
// 构造相应的 key
String key = constructionUser.getTypeOfWork() + "_" + constructionUser.getWageMeasureUnit();
@ -786,17 +762,22 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
Long projectId = req.getProjectId();
Long teamId = req.getTeamId();
String typeOfWork = req.getTypeOfWork();
String clockMonth = req.getClockMonth();
String clockDate = req.getClockDate();
// 联表查询
LambdaQueryWrapper<BusAttendance> attendanceLqw = Wrappers.lambdaQuery(BusAttendance.class)
.eq(BusAttendance::getProjectId, projectId);
if (ObjectUtils.isNotEmpty(clockMonth)) {
if (ObjectUtils.isNotEmpty(clockDate)) {
String clockMonth = clockDate.substring(0, 7);
// 校验月份格式
if (!DateConstant.YEAR_MONTH_PATTERN.matcher(clockMonth).matches()) {
throw new ServiceException("月份格式不正确", HttpStatus.BAD_REQUEST);
}
// 解析月份
YearMonth yearMonth = YearMonth.parse(clockMonth);
// 判断是否大于当前月份
if (yearMonth.isAfter(YearMonth.now())) {
throw new ServiceException("不能查看大于当前月份的记录", HttpStatus.BAD_REQUEST);
}
// 计算当月第一天 / 最后一天
Date start = DateUtils.toDate(yearMonth.atDay(1));
Date end = DateUtils.toDate(yearMonth.atEndOfMonth());
@ -814,9 +795,7 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
lqw.eq(ObjectUtils.isNotEmpty(teamId), BusConstructionUser::getTeamId, teamId);
lqw.eq(StringUtils.isNotBlank(typeOfWork), BusConstructionUser::getTypeOfWork, typeOfWork);
// 查询当前项目下的黑名单人员
List<Long> blackUserIdList = constructionBlacklistService.lambdaQuery()
.eq(BusConstructionBlacklist::getProjectId, projectId).list()
.stream().map(BusConstructionBlacklist::getUserId).toList();
List<Long> blackUserIdList = constructionBlacklistService.queryIdListByProjectId(projectId);
// 查询结果移除黑名单人员
if (CollUtil.isNotEmpty(blackUserIdList)) {
lqw.notIn(BusConstructionUser::getId, blackUserIdList);
@ -837,18 +816,11 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
attendanceLqw.in(BusAttendance::getUserId, userIdList);
Map<Long, List<BusAttendance>> userIdBusAttendanceListMap = attendanceService.list(attendanceLqw)
.stream().collect(Collectors.groupingBy(BusAttendance::getUserId));
// 关联查询班组列表
List<Long> teamIdList = constructionUserList.stream().map(BusConstructionUser::getTeamId).toList();
Map<Long, List<BusProjectTeam>> teamIdProjectTeamListMap = projectTeamService.lambdaQuery()
.in(BusProjectTeam::getId, teamIdList).list()
.stream().collect(Collectors.groupingBy(BusProjectTeam::getId));
// 填充信息
List<ConstructionUserAttendanceTotalResp> userAttendanceTotalList = constructionUserList.stream().map(constructionUser -> {
ConstructionUserAttendanceTotalResp constructionUserAttendanceTotalResp = new ConstructionUserAttendanceTotalResp();
Long id = constructionUser.getId();
constructionUserAttendanceTotalResp.setId(id);
constructionUserAttendanceTotalResp.setUserName(constructionUser.getUserName());
constructionUserAttendanceTotalResp.setTypeOfWork(constructionUser.getTypeOfWork());
BeanUtils.copyProperties(constructionUser, constructionUserAttendanceTotalResp);
// 关联施工人员考勤信息
int attendanceDays = 0;
int lateDays = 0;
@ -902,14 +874,6 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
constructionUserAttendanceTotalResp.setLeaveEarlyDays(leaveEarlyDays);
constructionUserAttendanceTotalResp.setUnClockDays(unClockDays);
constructionUserAttendanceTotalResp.setLeaveDays(leaveDays);
// 关联班组信息
Long userTeamId = constructionUser.getTeamId();
String teamName = null;
if (teamIdProjectTeamListMap.containsKey(userTeamId)) {
teamName = teamIdProjectTeamListMap.get(userTeamId).get(0).getTeamName();
}
constructionUserAttendanceTotalResp.setTeamId(userTeamId);
constructionUserAttendanceTotalResp.setTeamName(teamName);
return constructionUserAttendanceTotalResp;
}).toList();
constructionUserAttendanceTotalPage.setRecords(userAttendanceTotalList);

View File

@ -17,6 +17,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.project.domain.BusConstructionUser;
import org.dromara.project.domain.BusConstructionUserExit;
import org.dromara.project.domain.BusProjectTeam;
import org.dromara.project.domain.BusProjectTeamMember;
import org.dromara.project.domain.enums.ProjectTeamMemberPostEnum;
import org.dromara.project.domain.req.projectteammember.ProjectTeamMemberCreateReq;
@ -117,6 +118,12 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM
BeanUtils.copyProperties(req, projectTeamMember);
// 数据校验
validEntityBeforeSave(projectTeamMember, true);
// 判断班组信息是否存在
Long teamId = req.getTeamId();
BusProjectTeam projectTeam = projectTeamService.getById(teamId);
if (projectTeam == null) {
throw new ServiceException("对应班组不存在", HttpStatus.NOT_FOUND);
}
// 判断用户是否已经被拉黑
constructionBlacklistService.validUserInBlacklist(projectTeamMember.getMemberId(), projectTeamMember.getProjectId());
// 判断对应的用户与项目关联是否存在
@ -135,6 +142,7 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM
LambdaUpdateWrapper<BusConstructionUser> constructionUserLuw = Wrappers.lambdaUpdate(BusConstructionUser.class)
.eq(BusConstructionUser::getId, projectTeamMember.getMemberId())
.set(BusConstructionUser::getTeamId, projectTeamMember.getTeamId())
.set(BusConstructionUser::getTeamName, projectTeam.getTeamName())
.set(BusConstructionUser::getEntryDate, new Date())
.set(BusConstructionUser::getLeaveDate, null);
constructionUserService.update(constructionUserLuw);
@ -155,16 +163,25 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM
BeanUtils.copyProperties(req, projectTeamMember);
// 数据校验
validEntityBeforeSave(projectTeamMember, false);
// 判断班组信息是否存在
Long teamId = req.getTeamId();
BusProjectTeam projectTeam = projectTeamService.getById(teamId);
if (projectTeam == null) {
throw new ServiceException("对应班组不存在", HttpStatus.NOT_FOUND);
}
// 判断是否存在
BusProjectTeamMember oldProjectTeamMember = this.getById(projectTeamMember.getId());
if (oldProjectTeamMember == null) {
throw new ServiceException("修改项目班组下的成员,数据不存在", HttpStatus.NOT_FOUND);
}
// 同步修改用户表的team_id字段
LambdaUpdateWrapper<BusConstructionUser> constructionUserLuw = Wrappers.lambdaUpdate(BusConstructionUser.class)
.eq(BusConstructionUser::getId, projectTeamMember.getMemberId())
.set(BusConstructionUser::getTeamId, projectTeamMember.getTeamId());
constructionUserService.update(constructionUserLuw);
// 如果修改了班组信息,同步修改用户表的字段
if (!oldProjectTeamMember.getTeamId().equals(teamId)) {
LambdaUpdateWrapper<BusConstructionUser> constructionUserLuw = Wrappers.lambdaUpdate(BusConstructionUser.class)
.eq(BusConstructionUser::getId, projectTeamMember.getMemberId())
.set(BusConstructionUser::getTeamId, projectTeamMember.getTeamId())
.set(BusConstructionUser::getTeamName, projectTeam.getTeamName());
constructionUserService.update(constructionUserLuw);
}
// 操作数据库
return this.updateById(projectTeamMember);
}
@ -176,7 +193,6 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM
// TODO 做一些数据校验,如唯一约束
Long projectId = entity.getProjectId();
Long memberId = entity.getMemberId();
Long teamId = entity.getTeamId();
String postId = entity.getPostId();
ProjectTeamMemberPostEnum postEnum = ProjectTeamMemberPostEnum.getEnumByValue(postId);
if (create) {
@ -186,9 +202,6 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM
if (memberId == null) {
throw new ServiceException("人员 id 不能为空", HttpStatus.BAD_REQUEST);
}
if (teamId == null) {
throw new ServiceException("班组 id 不能为空", HttpStatus.BAD_REQUEST);
}
if (postEnum == null) {
throw new ServiceException("请选择正确的岗位", HttpStatus.BAD_REQUEST);
}
@ -199,9 +212,6 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM
if (constructionUserService.getById(memberId) == null) {
throw new ServiceException("对应人员不存在", HttpStatus.NOT_FOUND);
}
if (projectTeamService.getById(teamId) == null) {
throw new ServiceException("对应班组不存在", HttpStatus.NOT_FOUND);
}
}
/**

View File

@ -2,6 +2,7 @@ package org.dromara.project.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -252,6 +253,11 @@ public class BusProjectTeamServiceImpl extends ServiceImpl<BusProjectTeamMapper,
return projectTeamVo;
}
BeanUtils.copyProperties(projectTeam, projectTeamVo);
// 获取班组人数
Long peopleNumber = projectTeamMemberService.lambdaQuery()
.eq(BusProjectTeamMember::getTeamId, projectTeam.getId())
.count();
projectTeamVo.setPeopleNumber(peopleNumber);
return projectTeamVo;
}
@ -299,7 +305,27 @@ public class BusProjectTeamServiceImpl extends ServiceImpl<BusProjectTeamMapper,
if (CollUtil.isEmpty(projectTeamList)) {
return projectTeamVoPage;
}
List<BusProjectTeamVo> projectTeamVoList = projectTeamList.stream().map(this::getVo).toList();
// 1. 获取各班组人数
List<Long> teamIdList = projectTeamList.stream().map(BusProjectTeam::getId).toList();
List<Map<String, Object>> mapList = projectTeamMemberService.listMaps(
new QueryWrapper<BusProjectTeamMember>()
.select("team_id", "COUNT(*) as count")
.in("team_id", teamIdList)
.groupBy("team_id")
);
// 2. 将查询结果转换成 Map<Long, Long>
Map<Long, Long> teamCountMap = mapList.stream()
.collect(Collectors.toMap(
m -> ((Number) m.get("team_id")).longValue(),
m -> ((Number) m.get("count")).longValue()
));
// 对象列表 => 封装对象列表
List<BusProjectTeamVo> projectTeamVoList = projectTeamList.stream().map(projectTeam -> {
BusProjectTeamVo projectTeamVo = new BusProjectTeamVo();
BeanUtils.copyProperties(projectTeam, projectTeamVo);
projectTeamVo.setPeopleNumber(teamCountMap.getOrDefault(projectTeam.getId(), 0L));
return projectTeamVo;
}).toList();
projectTeamVoPage.setRecords(projectTeamVoList);
return projectTeamVoPage;
}

View File

@ -13,6 +13,7 @@ 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.project.domain.BusWorkWage;
import org.dromara.project.domain.enums.WageMeasureUnitEnum;
import org.dromara.project.domain.req.workwage.WorkWageCreateReq;
import org.dromara.project.domain.req.workwage.WorkWageQueryReq;
import org.dromara.project.domain.req.workwage.WorkWageUpdateReq;
@ -93,6 +94,27 @@ public class BusWorkWageServiceImpl extends ServiceImpl<BusWorkWageMapper, BusWo
BeanUtils.copyProperties(req, workWage);
// 数据校验
validEntityBeforeSave(workWage, true);
// 判断是否存在
Long count = this.lambdaQuery()
.eq(BusWorkWage::getProjectId, workWage.getProjectId())
.eq(BusWorkWage::getWorkType, workWage.getWorkType())
.eq(BusWorkWage::getWageCalculationType, workWage.getWageCalculationType())
.count();
if (count > 0) {
throw new ServiceException("该项目已存在该工种薪水信息", HttpStatus.CONFLICT);
}
// 填充默认值
String wageCalculationType = req.getWageCalculationType();
switch (wageCalculationType) {
case "1":
workWage.setWageMeasureUnit(WageMeasureUnitEnum.TIME.getValue());
break;
case "2":
workWage.setWageMeasureUnit(WageMeasureUnitEnum.PIECE.getValue());
break;
default:
throw new ServiceException("工资计算方式错误", HttpStatus.BAD_REQUEST);
}
// 操作数据库
boolean save = this.save(workWage);
if (!save) {

View File

@ -14,15 +14,15 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.project.domain.BusDailyPieceItem;
import org.dromara.project.domain.BusProjectTeam;
import org.dromara.project.domain.BusWorkerDailyReport;
import org.dromara.project.domain.enums.WorkerDailyReportReissueEnum;
import org.dromara.project.domain.req.workerdailyreport.WorkerDailyReportQueryReq;
import org.dromara.project.domain.resp.workerdailyreport.WorkerDailyReportReissueResp;
import org.dromara.project.domain.vo.BusDailyPieceItemVo;
import org.dromara.project.domain.vo.BusWorkerDailyReportVo;
import org.dromara.project.mapper.BusWorkerDailyReportMapper;
import org.dromara.project.service.IBusDailyPieceItemService;
import org.dromara.project.service.IBusProjectTeamService;
import org.dromara.project.service.IBusWorkerDailyReportService;
import org.dromara.system.domain.vo.SysOssVo;
import org.dromara.system.service.ISysOssService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
@ -45,6 +45,9 @@ public class BusWorkerDailyReportServiceImpl extends ServiceImpl<BusWorkerDailyR
@Resource
private IBusProjectTeamService projectTeamService;
@Resource
private ISysOssService ossService;
/**
* 查询施工人员日报
*
@ -60,22 +63,6 @@ public class BusWorkerDailyReportServiceImpl extends ServiceImpl<BusWorkerDailyR
return this.getVo(workerDailyReport);
}
/**
* 查询施工人员日报补报
*
* @param id 主键
* @return 施工人员日报补报
*/
@Override
public WorkerDailyReportReissueResp queryReissueById(Long id) {
BusWorkerDailyReport workerDailyReport = this.getById(id);
if (workerDailyReport == null) {
throw new ServiceException("施工人员日报信息不存在", HttpStatus.NOT_FOUND);
}
return this.getReissueVo(workerDailyReport);
}
/**
* 分页查询施工人员日报列表
*
@ -86,26 +73,10 @@ public class BusWorkerDailyReportServiceImpl extends ServiceImpl<BusWorkerDailyR
@Override
public TableDataInfo<BusWorkerDailyReportVo> queryPageList(WorkerDailyReportQueryReq req, PageQuery pageQuery) {
LambdaQueryWrapper<BusWorkerDailyReport> lqw = this.buildQueryWrapper(req);
lqw.eq(BusWorkerDailyReport::getIsResubmit, WorkerDailyReportReissueEnum.UNREISSUE.getValue());
Page<BusWorkerDailyReport> result = this.page(pageQuery.build(), lqw);
return TableDataInfo.build(this.getVoPage(result));
}
/**
* 分页查询施工人员日报补报列表
*
* @param req 查询条件
* @param pageQuery 分页参数
* @return 施工人员日报补报分页列表
*/
@Override
public TableDataInfo<WorkerDailyReportReissueResp> queryReissuePageList(WorkerDailyReportQueryReq req, PageQuery pageQuery) {
LambdaQueryWrapper<BusWorkerDailyReport> lqw = this.buildQueryWrapper(req);
lqw.eq(BusWorkerDailyReport::getIsResubmit, WorkerDailyReportReissueEnum.REISSUE.getValue());
Page<BusWorkerDailyReport> result = this.page(pageQuery.build(), lqw);
return TableDataInfo.build(this.getReissueVoPage(result));
}
/**
* 查询符合条件的施工人员日报列表
*
@ -128,7 +99,7 @@ public class BusWorkerDailyReportServiceImpl extends ServiceImpl<BusWorkerDailyR
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
// TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
@ -153,30 +124,16 @@ public class BusWorkerDailyReportServiceImpl extends ServiceImpl<BusWorkerDailyR
workerDailyReportVo.setDailyPieceItemVoList(dailyPieceItemService.getListVo(dailyPieceItemList));
// 获取班组详情信息
workerDailyReportVo.setTeamName(projectTeamService.getById(workerDailyReport.getTeamId()).getTeamName());
return workerDailyReportVo;
}
/**
* 获取施工人员日报补报视图对象
*
* @param workerDailyReport 施工人员日报对象
* @return 施工人员日报补报视图对象
*/
@Override
public WorkerDailyReportReissueResp getReissueVo(BusWorkerDailyReport workerDailyReport) {
// 对象转封装类
WorkerDailyReportReissueResp workerDailyReportReissueResp = new WorkerDailyReportReissueResp();
if (workerDailyReport == null) {
return workerDailyReportReissueResp;
// 获取图片信息
String file = workerDailyReport.getFile();
if (StringUtils.isNotEmpty(file)) {
List<Long> picList = Arrays.stream(file.split(","))
.map(Long::parseLong)
.toList();
List<SysOssVo> pictureList = ossService.listByIds(picList);
workerDailyReportVo.setFileList(pictureList.stream().map(SysOssVo::getUrl).toList());
}
BeanUtils.copyProperties(workerDailyReport, workerDailyReportReissueResp);
// 获取日报计件详情信息
List<BusDailyPieceItem> dailyPieceItemList = dailyPieceItemService.lambdaQuery()
.eq(BusDailyPieceItem::getReportId, workerDailyReport.getId()).list();
workerDailyReportReissueResp.setDailyPieceItemVoList(dailyPieceItemService.getListVo(dailyPieceItemList));
// 获取班组详情信息
workerDailyReportReissueResp.setTeamName(projectTeamService.getById(workerDailyReport.getTeamId()).getTeamName());
return workerDailyReportReissueResp;
return workerDailyReportVo;
}
/**
@ -197,6 +154,7 @@ public class BusWorkerDailyReportServiceImpl extends ServiceImpl<BusWorkerDailyR
Long userId = req.getUserId();
String userName = req.getUserName();
Date reportDate = req.getReportDate();
Long isResubmit = req.getIsResubmit();
// 模糊查询
lqw.like(StringUtils.isNotBlank(userName), BusWorkerDailyReport::getUserName, userName);
// 精确查询
@ -205,6 +163,7 @@ public class BusWorkerDailyReportServiceImpl extends ServiceImpl<BusWorkerDailyR
lqw.eq(ObjectUtils.isNotEmpty(teamId), BusWorkerDailyReport::getTeamId, teamId);
lqw.eq(ObjectUtils.isNotEmpty(userId), BusWorkerDailyReport::getUserId, userId);
lqw.eq(ObjectUtils.isNotEmpty(reportDate), BusWorkerDailyReport::getReportDate, reportDate);
lqw.eq(ObjectUtils.isNotEmpty(isResubmit), BusWorkerDailyReport::getIsResubmit, isResubmit);
return lqw;
}
@ -260,56 +219,4 @@ public class BusWorkerDailyReportServiceImpl extends ServiceImpl<BusWorkerDailyR
return workerDailyReportVoPage;
}
/**
* 获取施工人员日报补报分页对象视图
*
* @param workerDailyReportPage 施工人员日报列表分页对象
* @return 施工人员日报列表分页对象视图
*/
@Override
public Page<WorkerDailyReportReissueResp> getReissueVoPage(Page<BusWorkerDailyReport> workerDailyReportPage) {
// 对象列表 => 封装对象列表
List<BusWorkerDailyReport> workerDailyReportList = workerDailyReportPage.getRecords();
Page<WorkerDailyReportReissueResp> respPage = new Page<>(
workerDailyReportPage.getCurrent(),
workerDailyReportPage.getSize(),
workerDailyReportPage.getTotal());
if (CollUtil.isEmpty(workerDailyReportList)) {
return respPage;
}
// 获取日报计件详情信息
List<Long> idList = workerDailyReportList.stream().map(BusWorkerDailyReport::getId).toList();
Map<Long, List<BusDailyPieceItem>> reportIdDailyPieceItemMap = dailyPieceItemService.lambdaQuery()
.in(BusDailyPieceItem::getReportId, idList).list()
.stream().collect(Collectors.groupingBy(BusDailyPieceItem::getReportId));
// 获取班组详情信息
List<Long> teamIdList = workerDailyReportList.stream().map(BusWorkerDailyReport::getTeamId).toList();
Map<Long, List<BusProjectTeam>> teamIdProjectTeamMap = projectTeamService.lambdaQuery()
.in(BusProjectTeam::getId, teamIdList).list()
.stream().collect(Collectors.groupingBy(BusProjectTeam::getId));
// 封装对象
List<WorkerDailyReportReissueResp> workerDailyReportVoList = workerDailyReportList.stream().map(workerDailyReport -> {
WorkerDailyReportReissueResp workerDailyReportVo = new WorkerDailyReportReissueResp();
BeanUtils.copyProperties(workerDailyReport, workerDailyReportVo);
Long id = workerDailyReport.getId();
// 获取日报计件详情信息
List<BusDailyPieceItemVo> dailyPieceItemVoList = new ArrayList<>();
if (reportIdDailyPieceItemMap.containsKey(id)) {
List<BusDailyPieceItem> dailyPieceItemList = reportIdDailyPieceItemMap.get(id);
dailyPieceItemVoList = dailyPieceItemService.getListVo(dailyPieceItemList);
}
workerDailyReportVo.setDailyPieceItemVoList(dailyPieceItemVoList);
// 获取班组详情信息
String teamName = null;
if (teamIdProjectTeamMap.containsKey(workerDailyReport.getTeamId())) {
BusProjectTeam projectTeam = teamIdProjectTeamMap.get(workerDailyReport.getTeamId()).get(0);
teamName = projectTeam.getTeamName();
}
workerDailyReportVo.setTeamName(teamName);
return workerDailyReportVo;
}).toList();
respPage.setRecords(workerDailyReportVoList);
return respPage;
}
}