admin-server/src/main/java/com/estate/expert/admin/controller/admin/RecordController.java
@@ -1,9 +1,17 @@ package com.estate.expert.admin.controller.admin; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.estate.expert.admin.domain.business.check.Check; import com.estate.expert.admin.domain.business.position.Position; import com.estate.expert.admin.domain.common.request.AddCheckInfoRequest; import com.estate.expert.admin.domain.common.request.AddOnDutyRequest; import com.estate.expert.admin.domain.common.request.BatchReq; import com.estate.expert.admin.domain.common.request.EditCheckInfoRequest; import com.estate.expert.admin.domain.common.request.EditOnDutyRequest; import com.estate.expert.admin.domain.common.request.PageReq; import com.estate.expert.admin.domain.common.request.RecordPageRequest; import com.estate.expert.admin.domain.common.response.PageResp; import com.estate.expert.admin.domain.common.response.PageRespMp; import com.estate.expert.admin.domain.exam.record.error.ErrorRecord; import com.estate.expert.admin.domain.exam.record.error.ErrorRecordDto; import com.estate.expert.admin.domain.exam.record.info.SetResponsibleDto; @@ -11,8 +19,7 @@ import com.estate.expert.admin.domain.exam.record.warning.WarningRecord; import com.estate.expert.admin.domain.exam.record.warning.WarningRecordDto; import com.estate.expert.admin.domain.user.User; import com.estate.expert.admin.service.ErrorRecordService; import com.estate.expert.admin.service.WarningRecordService; import com.estate.expert.admin.service.*; import com.estate.expert.common.domain.Session; import com.estate.expert.common.rpc.Result; import io.swagger.annotations.Api; @@ -37,6 +44,15 @@ @Resource private WarningRecordService warningRecordService; @Resource private PositionService positionService; @Resource private OnDutyService onDutyService; @Resource private CheckService checkService; //////// 问题清单 //////// @@ -205,4 +221,137 @@ return Result.success(); } //////// 在岗情况 //////// /** * 在岗情况列表查询 * 支持"全部/我创建的"筛选 */ @ApiOperation("【APP】在岗情况列表") @PostMapping("/onduty/list") public Result listOnDutyRecords(@ApiParam(hidden = true) Session session, @RequestParam(value = "planId", required = false) Integer planId, @RequestParam(value = "mine", required = false) Boolean mine, @Validated @RequestBody PageReq pageReq) { // 根据 mine 参数决定是否筛选"我创建的" var creatorId = mine != null && mine ? ((User) session.getUser()).getId() : null; // 调用 Service 层的 JPA 查询方法 return Result.success(onDutyService.listOnDutyRecords(planId, creatorId, pageReq)); } /** * 添加在岗情况 */ @ApiOperation("【APP】添加在岗情况") @PostMapping("/onduty/add") public Result addOnDuty(@ApiParam(hidden = true) Session session, @Validated @RequestBody AddOnDutyRequest request) { onDutyService.add((User) session.getUser(), request); return Result.success(); } /** * 编辑在岗情况 */ @ApiOperation("【APP】编辑在岗情况") @PostMapping("/onduty/edit") public Result editOnDuty(@Validated @RequestBody EditOnDutyRequest request) { onDutyService.edit(request); return Result.success(); } /** * 删除在岗情况 */ @ApiOperation("【APP】删除在岗情况") @PostMapping("/onduty/del") public Result deleteOnDuty(@Validated @RequestBody BatchReq request) { onDutyService.deleteByIds(request.getIds()); return Result.success(); } @ApiOperation(value = "【APP】岗位列表") @PostMapping("/position/list") public Result list(@Validated @RequestBody PageReq pageReq) { Page<Position> page = positionService.lambdaQuery().page(new Page<>(pageReq.getPage(), pageReq.getSize())); return Result.success(PageRespMp.of(page)); } /** * 岗位详情 */ @ApiOperation(value = "【APP】岗位详情") @GetMapping("/position/detail") public Result getPositionDetail(@RequestParam("id") Integer id) { Position position = positionService.getById(id); if (position == null) { throw new RuntimeException("岗位不存在"); } return Result.success(position); } //////// 检查情况 //////// /** * 检查情况列表查询 * 支持"全部/我创建的"筛选 */ @ApiOperation("【APP】检查情况列表") @PostMapping("/checkinfo/list") public Result listCheckInfoRecords(@ApiParam(hidden = true) Session session, @RequestParam(value = "planId", required = false) Integer planId, @RequestParam(value = "mine", required = false) Boolean mine, @Validated @RequestBody PageReq pageReq) { // 根据 mine 参数决定是否筛选"我创建的" var creatorId = mine != null && mine ? ((User) session.getUser()).getId() : null; // 调用 Service 层的 JPA 查询方法 return Result.success(checkService.listCheckInfoRecords(planId, creatorId, pageReq)); } /** * 添加检查信息 */ @ApiOperation("【APP】添加检查信息") @PostMapping("/checkinfo/add") public Result addCheckInfo(@ApiParam(hidden = true) Session session, @Validated @RequestBody AddCheckInfoRequest request) { checkService.addCheckInfo((User) session.getUser(), request); return Result.success(); } /** * 检查信息详情 */ @ApiOperation("【APP】检查信息详情") @GetMapping("/checkinfo/detail") public Result getCheckInfoDetail(@RequestParam("id") Integer id) { Check check = checkService.getById(id); if (check == null) { throw new RuntimeException("检查信息不存在"); } return Result.success(check); } /** * 编辑检查信息 */ @ApiOperation("【APP】编辑检查信息") @PostMapping("/checkinfo/edit") public Result editCheckInfo(@Validated @RequestBody EditCheckInfoRequest request) { checkService.editCheckInfo(request); return Result.success(); } /** * 删除检查信息 */ @ApiOperation("【APP】删除检查信息") @PostMapping("/checkinfo/del") public Result deleteCheckInfo(@Validated @RequestBody BatchReq request) { checkService.deleteCheckInfoByIds(request.getIds()); return Result.success(); } } admin-server/src/main/java/com/estate/expert/admin/domain/business/check/Check.java
@@ -4,11 +4,17 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.extension.activerecord.Model; import com.estate.expert.admin.domain.user.User; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import javax.persistence.Column; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import java.io.Serializable; import java.util.Date; @@ -67,4 +73,22 @@ private Date createTime; /** * 检查标题 */ @TableField("title") @ApiModelProperty("检查标题") private String title; /** * 创建者 */ @TableField("creator_id") @ApiModelProperty("创建人id") private Integer creatorId; @TableField("deleted") @TableLogic @ApiModelProperty("是否删除 false正常true删除") private Boolean deleted; } admin-server/src/main/java/com/estate/expert/admin/domain/business/onduty/OnDuty.java
@@ -1,10 +1,7 @@ package com.estate.expert.admin.domain.business.onduty; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.extension.activerecord.Model; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; @@ -103,6 +100,13 @@ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date createTime; @TableField("creator_id") private Integer creatorId; @TableField("deleted") @TableLogic private Boolean deleted; } admin-server/src/main/java/com/estate/expert/admin/domain/common/request/AddCheckInfoRequest.java
New file @@ -0,0 +1,44 @@ package com.estate.expert.admin.domain.common.request; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; /** * 添加检查信息请求 * * @author administrator * @since 2026-01-20 */ @Data @ApiModel("添加检查信息请求") public class AddCheckInfoRequest { @ApiModelProperty(value = "计划ID", required = true) @NotNull(message = "计划ID不能为空") private Integer planId; @ApiModelProperty(value = "项目ID", required = true) @NotNull(message = "项目ID不能为空") private Integer projectId; @ApiModelProperty(value = "委托方ID", required = true) @NotNull(message = "委托方ID不能为空") private Integer clientId; @ApiModelProperty(value = "检查标题", required = true) @NotBlank(message = "检查标题不能为空") private String title; @ApiModelProperty(value = "安全告知单(图片URL,多张用逗号分隔)") private String safetySlip; @ApiModelProperty(value = "检查人员照片(图片URL,多张用逗号分隔)") private String checkUserImg; @ApiModelProperty(value = "廉政告知单(图片URL,多张用逗号分隔)") private String integrityNotification; } admin-server/src/main/java/com/estate/expert/admin/domain/common/request/AddOnDutyRequest.java
New file @@ -0,0 +1,44 @@ package com.estate.expert.admin.domain.common.request; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Builder; import lombok.Value; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import java.util.List; /** * 添加在岗情况请求 */ @ApiModel("添加在岗情况请求") @Value @Builder public class AddOnDutyRequest { @ApiModelProperty(value = "项目ID", required = true) @NotNull(message = "项目ID不能为空") Integer projectId; @ApiModelProperty(value = "计划ID", required = true) @NotNull(message = "计划ID不能为空") Integer planId; @ApiModelProperty(value = "岗位ID", required = true) @NotNull(message = "岗位ID不能为空") Integer positionId; @ApiModelProperty(value = "在岗状态:1-在岗,2-未在岗,3-请假", required = true) @NotNull(message = "在岗状态不能为空") @Min(value = 1, message = "在岗状态值必须在1-3之间") @Max(value = 3, message = "在岗状态值必须在1-3之间") Integer state; @ApiModelProperty(value = "问题说明") String remark; @ApiModelProperty(value = "图片URL列表(多张)") List<String> images; } admin-server/src/main/java/com/estate/expert/admin/domain/common/request/EditCheckInfoRequest.java
New file @@ -0,0 +1,36 @@ package com.estate.expert.admin.domain.common.request; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; /** * 编辑检查信息请求 * * @author administrator * @since 2026-01-20 */ @Data @ApiModel("编辑检查信息请求") public class EditCheckInfoRequest { @ApiModelProperty(value = "检查信息ID", required = true) @NotNull(message = "检查信息ID不能为空") private Integer id; @ApiModelProperty(value = "检查标题", required = true) @NotBlank(message = "检查标题不能为空") private String title; @ApiModelProperty(value = "安全告知单(图片URL,多张用逗号分隔)") private String safetySlip; @ApiModelProperty(value = "检查人员照片(图片URL,多张用逗号分隔)") private String checkUserImg; @ApiModelProperty(value = "廉政告知单(图片URL,多张用逗号分隔)") private String integrityNotification; } admin-server/src/main/java/com/estate/expert/admin/domain/common/request/EditOnDutyRequest.java
New file @@ -0,0 +1,40 @@ package com.estate.expert.admin.domain.common.request; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Builder; import lombok.Value; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import java.util.List; /** * 编辑在岗情况请求 */ @ApiModel("编辑在岗情况请求") @Value @Builder public class EditOnDutyRequest { @ApiModelProperty(value = "在岗记录ID", required = true) @NotNull(message = "在岗记录ID不能为空") Integer id; @ApiModelProperty(value = "岗位ID", required = true) @NotNull(message = "岗位ID不能为空") Integer positionId; @ApiModelProperty(value = "在岗状态:1-在岗,2-未在岗,3-请假", required = true) @NotNull(message = "在岗状态不能为空") @Min(value = 1, message = "在岗状态值必须在1-3之间") @Max(value = 3, message = "在岗状态值必须在1-3之间") Integer state; @ApiModelProperty(value = "问题说明") String remark; @ApiModelProperty(value = "图片URL列表(多张)") List<String> images; } admin-server/src/main/java/com/estate/expert/admin/domain/common/response/PageRespMp.java
New file @@ -0,0 +1,78 @@ package com.estate.expert.admin.domain.common.response; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * mybatis plus 分页响应 * @param <T> */ @ApiModel("分页响应") @Data public class PageRespMp<T> { @ApiModelProperty("总页数") private int totalPages; @ApiModelProperty("总记录数") private long totalElements; @ApiModelProperty("每页大小") private int pageSize; @ApiModelProperty("当前页码, 从0开始") private int number; @ApiModelProperty("数据列表") private List<T> list; public PageRespMp(Page<?> page, List<T> list) { this.totalPages = (int) page.getPages(); this.totalElements = page.getTotal(); this.pageSize = (int) page.getSize(); this.number = (int) page.getCurrent(); this.list = list; } public PageRespMp(Page<T> page) { this.totalPages = (int) page.getPages(); this.totalElements = page.getTotal(); this.pageSize = (int) page.getSize(); this.number = (int) page.getCurrent(); this.list = page.getRecords(); } public PageRespMp(List<T> list) { this.list = list; this.totalPages = 1; this.totalElements = list.size(); this.pageSize = list.size(); this.number = 0; } // of public static <T> PageRespMp<T> of(Page<?> page, List<T> list) { return new PageRespMp<>(page, list); } // of public static <T> PageRespMp<T> of(Page<T> page) { return new PageRespMp<>(page); } // of public static <T> PageRespMp<T> of(List<T> list) { return new PageRespMp<>(list); } // empty public static <T> PageRespMp<T> empty() { return new PageRespMp<>(new Page<>()); } } admin-server/src/main/java/com/estate/expert/admin/service/CheckService.java
@@ -5,7 +5,12 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.estate.expert.admin.domain.business.check.Check; import com.estate.expert.admin.domain.business.check.CheckVo; import com.estate.expert.admin.domain.common.request.AddCheckInfoRequest; import com.estate.expert.admin.domain.common.request.EditCheckInfoRequest; import com.estate.expert.admin.domain.common.request.OnDutyRequest; import com.estate.expert.admin.domain.common.request.PageReq; import com.estate.expert.admin.domain.common.response.PageRespMp; import com.estate.expert.admin.domain.user.User; import java.util.List; @@ -21,7 +26,39 @@ List<CheckVo> pageList(Page<CheckVo> page, OnDutyRequest request); CheckVo detail(Integer id); /** * 分页查询检查情况列表(JPA 实现) * 用于新的列表查询接口,支持"全部/我创建的"筛选 * * @param planId 计划ID(可选) * @param creatorId 创建者ID(null表示查询全部) * @param pageReq 分页请求 * @return 检查情况分页结果 */ PageRespMp<Check> listCheckInfoRecords(Integer planId, Integer creatorId, PageReq pageReq); /** * 添加检查信息 * * @param creator 创建者 * @param request 添加请求 */ void addCheckInfo(User creator, AddCheckInfoRequest request); /** * 编辑检查信息 * * @param request 编辑请求 */ void editCheckInfo(EditCheckInfoRequest request); /** * 批量删除检查信息 * * @param ids 检查信息ID列表 */ void deleteCheckInfoByIds(List<Integer> ids); } admin-server/src/main/java/com/estate/expert/admin/service/OnDutyService.java
@@ -5,7 +5,12 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.estate.expert.admin.domain.business.onduty.OnDuty; import com.estate.expert.admin.domain.business.onduty.OnDutyVo; import com.estate.expert.admin.domain.common.request.AddOnDutyRequest; import com.estate.expert.admin.domain.common.request.EditOnDutyRequest; import com.estate.expert.admin.domain.common.request.OnDutyRequest; import com.estate.expert.admin.domain.common.request.PageReq; import com.estate.expert.admin.domain.common.response.PageRespMp; import com.estate.expert.admin.domain.user.User; import java.util.List; @@ -24,4 +29,39 @@ OnDutyVo detail(Integer id); /** * 添加在岗情况记录 * * @param creator 创建者 * @param request 添加请求 * @return 在岗情况实体 */ OnDuty add(User creator, AddOnDutyRequest request); /** * 分页查询在岗情况列表(JPA 实现) * 用于新的列表查询接口,支持"全部/我创建的"筛选 * * @param planId 计划ID(可选) * @param creatorId 创建者ID(null表示查询全部) * @param pageReq 分页请求 * @return 在岗情况分页结果 */ PageRespMp<OnDuty> listOnDutyRecords(Integer planId, Integer creatorId, PageReq pageReq); /** * 编辑在岗情况记录 * * @param request 编辑请求 * @return 更新后的在岗情况实体 */ OnDuty edit(EditOnDutyRequest request); /** * 批量删除在岗情况记录 * * @param ids 在岗记录ID列表 */ void deleteByIds(List<Integer> ids); } admin-server/src/main/java/com/estate/expert/admin/service/impl/CheckServiceImpl.java
@@ -5,13 +5,22 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.estate.expert.admin.domain.business.check.Check; import com.estate.expert.admin.domain.business.check.CheckVo; import com.estate.expert.admin.domain.business.onduty.OnDutyVo; import com.estate.expert.admin.domain.common.request.AddCheckInfoRequest; import com.estate.expert.admin.domain.common.request.EditCheckInfoRequest; import com.estate.expert.admin.domain.common.request.OnDutyRequest; import com.estate.expert.admin.domain.common.request.PageReq; import com.estate.expert.admin.domain.common.response.PageRespMp; import com.estate.expert.admin.domain.repository.CheckMapper; import com.estate.expert.admin.domain.user.User; import com.estate.expert.admin.service.CheckService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; import java.time.ZoneId; import java.util.Date; import java.util.List; import java.util.Objects; /** * <p> @@ -40,4 +49,77 @@ public CheckVo detail(Integer id) { return this.baseMapper.detail(id); } @Override public PageRespMp<Check> listCheckInfoRecords(Integer planId, Integer creatorId, PageReq pageReq) { Page<Check> page = lambdaQuery().eq(Check::getPlanId, planId).eq(Objects.nonNull(creatorId), Check::getCreatorId, creatorId) .page(new Page<>(pageReq.getPage(), pageReq.getSize())); // 将 Spring Data Page 转换为自定义 PageResp return PageRespMp.of(page); } /** * 添加检查信息(MyBatis Plus 方式) */ @Override @Transactional public void addCheckInfo(User creator, AddCheckInfoRequest request) { // 1. 创建 Check 实体对象(MyBatis Plus 实体) Check check = new Check(); // 2. 设置基本字段 check.setTitle(request.getTitle()); check.setSafetySlip(request.getSafetySlip()); check.setCheckUserImg(request.getCheckUserImg()); check.setIntegrityNotification(request.getIntegrityNotification()); // 3. 设置关联字段 check.setPlanId(request.getPlanId()); check.setProjectId(request.getProjectId()); check.setClientId(request.getClientId()); // 4. 设置创建者ID(MyBatis Plus 使用 creatorId 字段) check.setCreatorId(creator.getId()); // 5. 设置时间字段 check.setTime(new Date()); // createTime: 当前时间戳 check.setCreateTime(new Date()); // 6. 保存到数据库(MyBatis Plus 方式) save(check); } /** * 编辑检查信息(MyBatis Plus 方式) */ @Override @Transactional public void editCheckInfo(EditCheckInfoRequest request) { // 1. 根据 id 查询现有的 Check 实体 Check check = getById(request.getId()); if (check == null) { throw new RuntimeException("检查信息不存在"); } // 2. 更新字段 check.setTitle(request.getTitle()); check.setSafetySlip(request.getSafetySlip()); check.setCheckUserImg(request.getCheckUserImg()); check.setIntegrityNotification(request.getIntegrityNotification()); // 3. 保存更新(MyBatis Plus 方式) updateById(check); } /** * 批量删除检查信息(MyBatis Plus 方式) */ @Override @Transactional public void deleteCheckInfoByIds(List<Integer> ids) { // 使用 MyBatis Plus 的批量删除方法(逻辑删除,因为 Check 实体有 @TableLogic 注解) removeByIds(ids); } } admin-server/src/main/java/com/estate/expert/admin/service/impl/OnDutyServiceImpl.java
@@ -5,12 +5,28 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.estate.expert.admin.domain.business.onduty.OnDuty; import com.estate.expert.admin.domain.business.onduty.OnDutyVo; import com.estate.expert.admin.domain.business.position.Position; import com.estate.expert.admin.domain.common.request.AddOnDutyRequest; import com.estate.expert.admin.domain.common.request.EditOnDutyRequest; import com.estate.expert.admin.domain.common.request.OnDutyRequest; import com.estate.expert.admin.domain.common.request.PageReq; import com.estate.expert.admin.domain.common.response.PageRespMp; import com.estate.expert.admin.domain.project.Project; import com.estate.expert.admin.domain.project.ProjectRepository; import com.estate.expert.admin.domain.repository.OnDutyMapper; import com.estate.expert.admin.domain.user.User; import com.estate.expert.admin.service.OnDutyService; import com.estate.expert.admin.service.PositionService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.time.LocalDate; import java.time.ZoneId; import java.util.Date; import java.util.List; import java.util.Objects; /** * <p> @@ -22,6 +38,12 @@ */ @Service public class OnDutyServiceImpl extends ServiceImpl<OnDutyMapper, OnDuty> implements OnDutyService { @Resource private ProjectRepository projectRepository; @Resource private PositionService positionService; @Override public List<OnDutyVo> pageList(Page<OnDutyVo> page, OnDutyRequest request) { @@ -39,4 +61,121 @@ public OnDutyVo detail(Integer id) { return this.baseMapper.detail(id); } @Override @Transactional public OnDuty add(User creator, AddOnDutyRequest request) { // 1. 查询项目信息,获取 clientId Project project = projectRepository.findById(request.getProjectId()) .orElseThrow(() -> new RuntimeException("项目不存在")); if (project.getClient() == null) { throw new RuntimeException("项目未关联委托方"); } Integer clientId = project.getClient().getId(); // 2. 查询岗位信息,获取 positionName(MyBatis Plus 方式) Position position = positionService.getById(request.getPositionId()); if (position == null) { throw new RuntimeException("岗位不存在"); } String positionName = position.getName(); // 3. 处理图片列表(逗号分隔) String imgStr = null; if (!CollectionUtils.isEmpty(request.getImages())) { imgStr = String.join(",", request.getImages()); } // 4. 构建 OnDuty 实体 OnDuty onDuty = new OnDuty(); onDuty.setPlanId(request.getPlanId()); onDuty.setProjectId(request.getProjectId()); onDuty.setClientId(clientId); onDuty.setContent("人员在岗"); // 固定值 onDuty.setPositionId(request.getPositionId()); onDuty.setPositionName(positionName); onDuty.setRemark(request.getRemark()); onDuty.setImg(imgStr); onDuty.setState(request.getState()); // 5. 设置创建者 onDuty.setCreatorId(creator.getId()); // 6. 设置时间字段 // time: 当前日期(00:00:00) LocalDate today = LocalDate.now(); Date timeDate = Date.from(today.atStartOfDay(ZoneId.systemDefault()).toInstant()); onDuty.setTime(timeDate); // createTime: 当前时间戳 onDuty.setCreateTime(new Date()); // 6. 保存到数据库 this.save(onDuty); return onDuty; } /** * 分页查询在岗情况列表(JPA 实现) * 用于新的列表查询接口,支持"全部/我创建的"筛选 */ @Override public PageRespMp<OnDuty> listOnDutyRecords(Integer planId, Integer creatorId, PageReq pageReq) { Page<OnDuty> page = lambdaQuery().eq(OnDuty::getPlanId, planId).eq(Objects.nonNull(creatorId), OnDuty::getCreatorId, creatorId) .page(new Page<>(pageReq.getPage(), pageReq.getSize())); //转换为 PageRespMp return PageRespMp.of(page); } /** * 编辑在岗情况记录 */ @Override @Transactional public OnDuty edit(EditOnDutyRequest request) { // 1. 查询现有记录 OnDuty onDuty = this.getById(request.getId()); if (onDuty == null) { throw new RuntimeException("在岗记录不存在"); } // 2. 如果岗位ID发生变化,需要更新岗位名称(MyBatis Plus 方式) if (!onDuty.getPositionId().equals(request.getPositionId())) { Position position = positionService.getById(request.getPositionId()); if (position == null) { throw new RuntimeException("岗位不存在"); } onDuty.setPositionName(position.getName()); } // 3. 更新可编辑字段 onDuty.setPositionId(request.getPositionId()); onDuty.setState(request.getState()); onDuty.setRemark(request.getRemark()); // 4. 处理图片列表(逗号分隔) String imgStr = null; if (!CollectionUtils.isEmpty(request.getImages())) { imgStr = String.join(",", request.getImages()); } onDuty.setImg(imgStr); // 5. 保存更新(MyBatis-Plus 的 updateById) this.updateById(onDuty); return onDuty; } /** * 批量删除在岗情况记录 */ @Override @Transactional public void deleteByIds(List<Integer> ids) { // 使用 MyBatis-Plus 的批量删除方法(物理删除) this.removeByIds(ids); } }