package com.estate.expert.admin.service.impl; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.estate.expert.admin.domain.business.check.Check; import com.estate.expert.admin.domain.business.client.Client; 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.exam.task.check.CheckTask; 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.CheckTaskService; import com.estate.expert.admin.service.ClientService; import com.estate.expert.admin.service.OnDutyService; import com.estate.expert.admin.service.PositionService; import org.springframework.beans.factory.annotation.Autowired; 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; /** *

* 在岗情况 服务实现类 *

* * @author administrator * @since 2026-01-12 */ @Service public class OnDutyServiceImpl extends ServiceImpl implements OnDutyService { @Resource private ProjectRepository projectRepository; @Resource private PositionService positionService; @Autowired private CheckTaskService checkTaskService; @Autowired private ClientService clientService; @Override public List pageList(Page page, OnDutyRequest request) { String sTime =null; String eTime =null; if(request.getTime()!=null && !request.getTime().isEmpty()){ sTime = request.getTime().split(" - ")[0] + " 00:00:00"; eTime = request.getTime().split(" - ")[1] + " 23:59:59"; } List list = this.baseMapper.pageList(page, request,sTime,eTime); return list; } @Override public OnDutyVo detail(Integer id) { return this.baseMapper.detail(id); } @Override @Transactional public OnDuty add(User creator, AddOnDutyRequest request) { //1.校验任务id CheckTask checkTask = checkTaskService.get(request.getCheckTaskIdId()); if (Objects.isNull(checkTask)) { throw new RuntimeException("检查任务不存在"); } Client client = clientService.get(checkTask.getProject().getClient().getId()); if (Objects.isNull(client)) { throw new RuntimeException("委托方不存在"); } // 2. 查询岗位信息,获取 positionName(MyBatis Plus 方式) Position position = positionService.getById(request.getPositionId()); if (position == null) { throw new RuntimeException("岗位不存在"); } String positionName = position.getName(); //校验该岗位是否已添加 Long count = lambdaQuery().eq(OnDuty::getCheckTaskIdId, request.getCheckTaskIdId()).eq(OnDuty::getPositionId, request.getPositionId()).count(); if (count > 0) { throw new RuntimeException("该岗位已上传"); } // 3. 处理图片列表(逗号分隔) String imgStr = null; if (!CollectionUtils.isEmpty(request.getImages())) { imgStr = String.join(",", request.getImages()); } // 4. 构建 OnDuty 实体 OnDuty onDuty = new OnDuty(); onDuty.setCheckTaskIdId(request.getCheckTaskIdId()); onDuty.setContent("人员在岗"); // 固定值 onDuty.setPositionId(request.getPositionId()); onDuty.setPositionName(positionName); onDuty.setRemark(request.getRemark()); onDuty.setImg(imgStr); onDuty.setState(request.getState()); onDuty.setPlanId(checkTask.getPlan().getId()); onDuty.setProjectId(checkTask.getProject().getId()); onDuty.setClientId(client.getId()); // 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 listOnDutyRecords(Integer checkTaskId, Integer creatorId, PageReq pageReq) { Page page = lambdaQuery().eq(OnDuty::getCheckTaskIdId, checkTaskId).eq(Objects.nonNull(creatorId), OnDuty::getCreatorId, creatorId) .orderByDesc(OnDuty::getCreateTime) .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 ids) { // 使用 MyBatis-Plus 的批量删除方法(物理删除) this.removeByIds(ids); } @Override public List exportList(OnDutyRequest query) { String sTime =null; String eTime =null; if(query.getTime()!=null && !query.getTime().isEmpty()){ sTime = query.getTime().split(" - ")[0] + " 00:00:00"; eTime = query.getTime().split(" - ")[1] + " 23:59:59"; } List list = this.baseMapper.exportList( query,sTime,eTime); return list; } }