diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusWorkerDailyReportController.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusWorkerDailyReportController.java index a980f847..5642f28e 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusWorkerDailyReportController.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusWorkerDailyReportController.java @@ -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 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 getReissueInfo(@NotNull(message = "主键不能为空") - @PathVariable Long id) { - return R.ok(busWorkerDailyReportService.queryReissueById(id)); - } - /** * 删除施工人员日报 * diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusConstructionUser.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusConstructionUser.java index e15065d8..059745a9 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusConstructionUser.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusConstructionUser.java @@ -55,6 +55,11 @@ public class BusConstructionUser extends BaseEntity { */ private Long teamId; + /** + * 班组名称 + */ + private String teamName; + /** * 状态(0在职 1离职) */ diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/bo/BusWorkerDailyReportBo.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/bo/BusWorkerDailyReportBo.java deleted file mode 100644 index 1334cb79..00000000 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/bo/BusWorkerDailyReportBo.java +++ /dev/null @@ -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; - - -} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/enums/WageMeasureUnitEnum.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/enums/WageMeasureUnitEnum.java new file mode 100644 index 00000000..55769f5d --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/enums/WageMeasureUnitEnum.java @@ -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; + } + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/enums/WorkerDailyReportReissueEnum.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/enums/WorkerDailyReportReissueEnum.java deleted file mode 100644 index b904464c..00000000 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/enums/WorkerDailyReportReissueEnum.java +++ /dev/null @@ -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; - } - -} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/attendance/AttendanceQueryTwoWeekReq.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/attendance/AttendanceQueryTwoWeekReq.java index c3612ffc..50e0b037 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/attendance/AttendanceQueryTwoWeekReq.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/attendance/AttendanceQueryTwoWeekReq.java @@ -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; + } diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/constructionuser/ConstructionUserAttendanceQueryReq.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/constructionuser/ConstructionUserAttendanceQueryReq.java index f2743a94..0a9d2d58 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/constructionuser/ConstructionUserAttendanceQueryReq.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/constructionuser/ConstructionUserAttendanceQueryReq.java @@ -40,6 +40,6 @@ public class ConstructionUserAttendanceQueryReq implements Serializable { /** * 打卡月份 */ - private String clockMonth; + private String clockDate; } diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/constructionuser/ConstructionUserQueryReq.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/constructionuser/ConstructionUserQueryReq.java index 18a1e4ca..76970104 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/constructionuser/ConstructionUserQueryReq.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/constructionuser/ConstructionUserQueryReq.java @@ -45,6 +45,11 @@ public class ConstructionUserQueryReq implements Serializable { */ private Long notTeamId; + /** + * 班组名称 + */ + private String teamName; + /** * 状态(0在职 1离职) */ diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/workerdailyreport/WorkerDailyReportQueryReq.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/workerdailyreport/WorkerDailyReportQueryReq.java index a510103b..6804f05d 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/workerdailyreport/WorkerDailyReportQueryReq.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/workerdailyreport/WorkerDailyReportQueryReq.java @@ -48,4 +48,9 @@ public class WorkerDailyReportQueryReq implements Serializable { @DateTimeFormat(pattern = "yyyy-MM-dd") private Date reportDate; + /** + * 是否为补卡(1不是 2是) + */ + private Long isResubmit; + } diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/workwage/WorkWageCreateReq.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/workwage/WorkWageCreateReq.java index b1fe6527..a8353df0 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/workwage/WorkWageCreateReq.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/workwage/WorkWageCreateReq.java @@ -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; - /** * 备注 */ diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/workwage/WorkWageUpdateReq.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/workwage/WorkWageUpdateReq.java index ca7a32a5..d37ec93d 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/workwage/WorkWageUpdateReq.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/workwage/WorkWageUpdateReq.java @@ -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; - /** * 备注 */ diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/BusConstructionUserVo.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/BusConstructionUserVo.java index 3141e05b..fd182bde 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/BusConstructionUserVo.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/BusConstructionUserVo.java @@ -75,9 +75,10 @@ public class BusConstructionUserVo implements Serializable { private Long teamId; /** - * 班组 + * 班组名称 */ - private BusProjectTeamVo teamVo; + @ExcelProperty(value = "班组名称") + private String teamName; /** * 状态(0在职 1离职) diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/BusProjectTeamVo.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/BusProjectTeamVo.java index 4f2c4f02..fcb94dad 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/BusProjectTeamVo.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/BusProjectTeamVo.java @@ -52,6 +52,11 @@ public class BusProjectTeamVo implements Serializable { @ExcelDictFormat(readConverterExp = "0=范围内打卡,1=任何地点打卡") private String isClockIn; + /** + * 班组人数 + */ + private Long peopleNumber; + /** * 备注 */ diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/BusWorkerDailyReportVo.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/BusWorkerDailyReportVo.java index 008c6c55..db98f14d 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/BusWorkerDailyReportVo.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/BusWorkerDailyReportVo.java @@ -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 fileList; + + /** + * 附件id + */ private String file; /** diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusConstructionBlacklistService.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusConstructionBlacklistService.java index 0dc70895..b43bc759 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusConstructionBlacklistService.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusConstructionBlacklistService.java @@ -45,6 +45,14 @@ public interface IBusConstructionBlacklistService extends IService queryList(ConstructionBlacklistQueryReq req); + /** + * 根据项目id查询黑名单用户id列表 + * + * @param projectId 项目id + * @return 黑名单用户id列表 + */ + List queryIdListByProjectId(Long projectId); + /** * 新增黑名单 * diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusWorkerDailyReportService.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusWorkerDailyReportService.java index 1221babe..7e7dee3c 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusWorkerDailyReportService.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusWorkerDailyReportService.java @@ -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 queryPageList(WorkerDailyReportQueryReq req, PageQuery pageQuery); - /** - * 分页查询施工人员日报补报列表 - * - * @param req 查询条件 - * @param pageQuery 分页参数 - * @return 施工人员日报补报分页列表 - */ - TableDataInfo queryReissuePageList(WorkerDailyReportQueryReq req, PageQuery pageQuery); - /** * 查询符合条件的施工人员日报列表 * @@ -80,14 +62,6 @@ public interface IBusWorkerDailyReportService extends IService getVoPage(Page workerDailyReportPage); - /** - * 获取施工人员日报补报分页对象视图 - * - * @param workerDailyReportPage 施工人员日报列表分页对象 - * @return 施工人员日报列表分页对象视图 - */ - Page getReissueVoPage(Page workerDailyReportPage); - } diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java index a18a1839..a18d4af2 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java @@ -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 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 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 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> dateListMap = this.list(lqw) .stream().collect(Collectors.groupingBy(BusAttendance::getClockDate)); - // 查询两周内的请假记录 - List leaveList = leaveService.lambdaQuery() - .eq(BusLeave::getProjectId, projectId) - .ge(BusLeave::getEndTime, twoWeeksDate) // 请假结束时间在两周前之后的 - .le(BusLeave::getStartTime, new Date()) // 请假开始时间在当前时间之前的 - .list(); - // 构造一个 Map:Key -> LocalDate(请假生效的日期),Value -> 当天请假的用户ID集合(Set 用于去重) - Map> 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 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 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 leaveUserSet = leaveMap.get(localDate); - if (leaveUserSet != null) { - leave = leaveUserSet.size(); - } resp.setAttendance(attendance); resp.setHalfAttendance(halfAttendance); resp.setAbsenteeism(absenteeism); diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusConstructionBlacklistServiceImpl.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusConstructionBlacklistServiceImpl.java index afb50f98..a81c98af 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusConstructionBlacklistServiceImpl.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusConstructionBlacklistServiceImpl.java @@ -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 queryIdListByProjectId(Long projectId) { + LambdaQueryWrapper 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 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 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 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 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 blacklistLqw = Wrappers.lambdaQuery(BusConstructionBlacklist.class) - .select(BusConstructionBlacklist::getUserId); if (projectId != null) { - blacklistLqw.eq(BusConstructionBlacklist::getProjectId, projectId); - } - List blackUserIdList = constructionBlacklistService.listObjs(blacklistLqw, obj -> (Long) obj); - // 查询结果移除黑名单人员 - if (CollUtil.isNotEmpty(blackUserIdList)) { - lqw.notIn(BusConstructionUser::getId, blackUserIdList); + List blackUserIdList = constructionBlacklistService.queryIdListByProjectId(projectId); + // 查询结果移除黑名单人员 + if (CollUtil.isNotEmpty(blackUserIdList)) { + lqw.notIn(BusConstructionUser::getId, blackUserIdList); + } } return lqw; } @@ -713,11 +701,6 @@ public class BusConstructionUserServiceImpl extends ServiceImpl> contractorIdContractorMap = contractorService.listByIds(contractorIdSet).stream() .collect(Collectors.groupingBy(BusContractor::getId)); - // 关联查询班组信息 - Set teamIdSet = constructionUserList.stream().map(BusConstructionUser::getTeamId) - .collect(Collectors.toSet()); - Map> teamIdTeamMap = projectTeamService.listByIds(teamIdSet).stream() - .collect(Collectors.groupingBy(BusProjectTeam::getId)); // 关联查询工资标准 LambdaQueryWrapper workWageLqw = Wrappers.lambdaQuery(BusWorkWage.class) .in(BusWorkWage::getProjectId, constructionUserList.stream().map(BusConstructionUser::getProjectId).toList()) @@ -740,13 +723,6 @@ public class BusConstructionUserServiceImpl extends ServiceImpl 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 blackUserIdList = constructionBlacklistService.lambdaQuery() - .eq(BusConstructionBlacklist::getProjectId, projectId).list() - .stream().map(BusConstructionBlacklist::getUserId).toList(); + List blackUserIdList = constructionBlacklistService.queryIdListByProjectId(projectId); // 查询结果移除黑名单人员 if (CollUtil.isNotEmpty(blackUserIdList)) { lqw.notIn(BusConstructionUser::getId, blackUserIdList); @@ -837,18 +816,11 @@ public class BusConstructionUserServiceImpl extends ServiceImpl> userIdBusAttendanceListMap = attendanceService.list(attendanceLqw) .stream().collect(Collectors.groupingBy(BusAttendance::getUserId)); - // 关联查询班组列表 - List teamIdList = constructionUserList.stream().map(BusConstructionUser::getTeamId).toList(); - Map> teamIdProjectTeamListMap = projectTeamService.lambdaQuery() - .in(BusProjectTeam::getId, teamIdList).list() - .stream().collect(Collectors.groupingBy(BusProjectTeam::getId)); // 填充信息 List 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 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 constructionUserLuw = Wrappers.lambdaUpdate(BusConstructionUser.class) - .eq(BusConstructionUser::getId, projectTeamMember.getMemberId()) - .set(BusConstructionUser::getTeamId, projectTeamMember.getTeamId()); - constructionUserService.update(constructionUserLuw); + // 如果修改了班组信息,同步修改用户表的字段 + if (!oldProjectTeamMember.getTeamId().equals(teamId)) { + LambdaUpdateWrapper 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 projectTeamVoList = projectTeamList.stream().map(this::getVo).toList(); + // 1. 获取各班组人数 + List teamIdList = projectTeamList.stream().map(BusProjectTeam::getId).toList(); + List> mapList = projectTeamMemberService.listMaps( + new QueryWrapper() + .select("team_id", "COUNT(*) as count") + .in("team_id", teamIdList) + .groupBy("team_id") + ); + // 2. 将查询结果转换成 Map + Map teamCountMap = mapList.stream() + .collect(Collectors.toMap( + m -> ((Number) m.get("team_id")).longValue(), + m -> ((Number) m.get("count")).longValue() + )); + // 对象列表 => 封装对象列表 + List 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; } diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusWorkWageServiceImpl.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusWorkWageServiceImpl.java index 4d607468..0489644e 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusWorkWageServiceImpl.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusWorkWageServiceImpl.java @@ -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 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) { diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusWorkerDailyReportServiceImpl.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusWorkerDailyReportServiceImpl.java index 6cddffc0..46f45960 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusWorkerDailyReportServiceImpl.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusWorkerDailyReportServiceImpl.java @@ -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 queryPageList(WorkerDailyReportQueryReq req, PageQuery pageQuery) { LambdaQueryWrapper lqw = this.buildQueryWrapper(req); - lqw.eq(BusWorkerDailyReport::getIsResubmit, WorkerDailyReportReissueEnum.UNREISSUE.getValue()); Page result = this.page(pageQuery.build(), lqw); return TableDataInfo.build(this.getVoPage(result)); } - /** - * 分页查询施工人员日报补报列表 - * - * @param req 查询条件 - * @param pageQuery 分页参数 - * @return 施工人员日报补报分页列表 - */ - @Override - public TableDataInfo queryReissuePageList(WorkerDailyReportQueryReq req, PageQuery pageQuery) { - LambdaQueryWrapper lqw = this.buildQueryWrapper(req); - lqw.eq(BusWorkerDailyReport::getIsResubmit, WorkerDailyReportReissueEnum.REISSUE.getValue()); - Page result = this.page(pageQuery.build(), lqw); - return TableDataInfo.build(this.getReissueVoPage(result)); - } - /** * 查询符合条件的施工人员日报列表 * @@ -128,7 +99,7 @@ public class BusWorkerDailyReportServiceImpl extends ServiceImpl ids, Boolean isValid) { if (isValid) { - //TODO 做一些业务上的校验,判断是否需要校验 + // TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteByIds(ids) > 0; } @@ -153,30 +124,16 @@ public class BusWorkerDailyReportServiceImpl extends ServiceImpl picList = Arrays.stream(file.split(",")) + .map(Long::parseLong) + .toList(); + List pictureList = ossService.listByIds(picList); + workerDailyReportVo.setFileList(pictureList.stream().map(SysOssVo::getUrl).toList()); } - BeanUtils.copyProperties(workerDailyReport, workerDailyReportReissueResp); - // 获取日报计件详情信息 - List 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 getReissueVoPage(Page workerDailyReportPage) { - // 对象列表 => 封装对象列表 - List workerDailyReportList = workerDailyReportPage.getRecords(); - Page respPage = new Page<>( - workerDailyReportPage.getCurrent(), - workerDailyReportPage.getSize(), - workerDailyReportPage.getTotal()); - if (CollUtil.isEmpty(workerDailyReportList)) { - return respPage; - } - // 获取日报计件详情信息 - List idList = workerDailyReportList.stream().map(BusWorkerDailyReport::getId).toList(); - Map> reportIdDailyPieceItemMap = dailyPieceItemService.lambdaQuery() - .in(BusDailyPieceItem::getReportId, idList).list() - .stream().collect(Collectors.groupingBy(BusDailyPieceItem::getReportId)); - // 获取班组详情信息 - List teamIdList = workerDailyReportList.stream().map(BusWorkerDailyReport::getTeamId).toList(); - Map> teamIdProjectTeamMap = projectTeamService.lambdaQuery() - .in(BusProjectTeam::getId, teamIdList).list() - .stream().collect(Collectors.groupingBy(BusProjectTeam::getId)); - // 封装对象 - List workerDailyReportVoList = workerDailyReportList.stream().map(workerDailyReport -> { - WorkerDailyReportReissueResp workerDailyReportVo = new WorkerDailyReportReissueResp(); - BeanUtils.copyProperties(workerDailyReport, workerDailyReportVo); - Long id = workerDailyReport.getId(); - // 获取日报计件详情信息 - List dailyPieceItemVoList = new ArrayList<>(); - if (reportIdDailyPieceItemMap.containsKey(id)) { - List 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; - } - }