package org.dromara.eims.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.SneakyThrows; import org.dromara.common.core.utils.DateUtils; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.dromara.eims.domain.EimsInspectPlan; import org.dromara.eims.domain.EimsInspectSt; import org.dromara.eims.domain.EimsMaintPlan; import org.dromara.eims.domain.bo.EimsInspectStBo; import org.dromara.eims.domain.vo.EimsInspectStVo; import org.dromara.eims.domain.vo.EimsMaintOrderVo; import org.dromara.eims.mapper.EimsInspectPlanMapper; import org.dromara.eims.mapper.EimsMaintPlanMapper; import org.dromara.system.domain.SysDept; import org.dromara.system.domain.vo.SysDeptVo; import org.dromara.system.mapper.SysDeptMapper; import org.springframework.stereotype.Service; import org.dromara.eims.domain.bo.EimsInspectRecordBo; import org.dromara.eims.domain.vo.EimsInspectRecordVo; import org.dromara.eims.domain.EimsInspectRecord; import org.dromara.eims.mapper.EimsInspectRecordMapper; import org.dromara.eims.service.IEimsInspectRecordService; import java.util.*; /** * 点检记录Service业务层处理 * * @author zhuguifei * @date 2025-03-13 */ @RequiredArgsConstructor @Service public class EimsInspectRecordServiceImpl implements IEimsInspectRecordService { private final EimsInspectRecordMapper baseMapper; private final SysDeptMapper sysDeptMapper; private final EimsInspectPlanMapper planMapper; /** * 查询点检记录 * * @param id 主键 * @return 点检记录 */ @Override public EimsInspectRecordVo queryById(Long id){ return baseMapper.selectVoById(id); } /** * 分页查询点检记录列表 * * @param bo 查询条件 * @param pageQuery 分页参数 * @return 点检记录分页列表 */ @Override public TableDataInfo queryPageList(EimsInspectRecordBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); return TableDataInfo.build(result); } @Override public TableDataInfo queryPageListCustom(EimsInspectRecordBo bo, PageQuery pageQuery) { Page page = baseMapper.selectInspRecordList(pageQuery.build(), buildWrapper(bo)); return TableDataInfo.build(page); } /** * 查询符合条件的点检记录列表 * * @param bo 查询条件 * @return 点检记录列表 */ @Override public List queryList(EimsInspectRecordBo bo) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); return baseMapper.selectVoList(lqw); } private LambdaQueryWrapper buildQueryWrapper(EimsInspectRecordBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(bo.getEquId() != null, EimsInspectRecord::getEquId, bo.getEquId()); lqw.like(StringUtils.isNotBlank(bo.getInspName()), EimsInspectRecord::getInspName, bo.getInspName()); lqw.eq(StringUtils.isNotBlank(bo.getStatus()), EimsInspectRecord::getStatus, bo.getStatus()); lqw.eq(StringUtils.isNotBlank(bo.getInspCode()), EimsInspectRecord::getInspCode, bo.getInspCode()); lqw.eq(StringUtils.isNotBlank(bo.getInspResult()), EimsInspectRecord::getInspResult, bo.getInspResult()); lqw.eq(bo.getInspTime() != null, EimsInspectRecord::getInspTime, bo.getInspTime()); lqw.eq(bo.getPlanTime() != null, EimsInspectRecord::getPlanTime, bo.getPlanTime()); lqw.eq(bo.getVerifyUser() != null, EimsInspectRecord::getVerifyUser, bo.getVerifyUser()); return lqw; } private QueryWrapper buildWrapper(EimsInspectRecordBo bo) { Map params = bo.getParams(); QueryWrapper qw = Wrappers.query(); qw.like(StringUtils.isNotBlank(bo.getInspCode()),"ir.insp_code", bo.getInspCode()); qw.like(StringUtils.isNotBlank(bo.getInspName()),"ir.insp_name", bo.getInspName()); qw.like(bo.getEquName() != null, "equ.equ_name", bo.getEquName()); qw.like(bo.getAssetNo() != null, "equ.asset_no", bo.getAssetNo()); qw.like(bo.getEquId() != null, "equ.equ_id", bo.getEquId()); qw.eq(StringUtils.isNotBlank(bo.getInspType()), "ir.insp_type", bo.getInspType()); qw.eq(bo.getInspUser() != null, "ir.insp_user", bo.getInspUser()); qw.in(bo.getInspDept() != null, "ir.insp_dept", getAllDescendantIds(bo.getInspDept())); qw.eq(bo.getStatus() != null, "ir.status", bo.getStatus()); qw.eq(bo.getInspResult() != null, "ir.insp_result", bo.getInspResult()); qw.between(params.get("beginPlanTime") != null && params.get("endPlanTime") != null, "ir.plan_time", params.get("beginPlanTime"), params.get("endPlanTime")); qw.eq(bo.getPlanTime()!=null, "ir.plan_time", bo.getPlanTime()); qw.orderByDesc("ir.create_time"); return qw; } /** * 根据id,获取所有后代id * * @param rootId * @return */ public List getAllDescendantIds(Long rootId) { List result = new ArrayList<>(); result.add(rootId); collectDescendants(rootId, result); return result; } private void collectDescendants(Long currentId, List collector) { QueryWrapper sysDeptWrapper = new QueryWrapper<>(); sysDeptWrapper.lambda().eq(SysDept::getParentId, currentId); List children = sysDeptMapper.selectVoList(sysDeptWrapper); if (children != null && !children.isEmpty()) { for (SysDeptVo child : children) { Long childId = child.getDeptId(); collector.add(childId); collectDescendants(childId, collector); } } } /** * 新增点检记录 * * @param bo 点检记录 * @return 是否新增成功 */ @Override public Boolean insertByBo(EimsInspectRecordBo bo) { EimsInspectRecord add = MapstructUtils.convert(bo, EimsInspectRecord.class); //通过保养计划生成的数据需要更新保养计划 Long planId = bo.getPlanId(); if(planId!=null){ EimsInspectPlan plan = planMapper.selectById(planId); setInspNextTime(plan); planMapper.updateById(plan); } validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); } return flag; } /** * 计算点检计划下次执行时间 */ @SneakyThrows private void setInspNextTime(EimsInspectPlan bo) { Date oldNext = bo.getInspNextTime(); //TODO 下次点检时间计算规则 0-按固定周期 1-按上次保养时间 Date newNext = null; //下次次执行时间为空抛出异常 if (oldNext == null) { throw new Exception("下次点检时间不能为空!"); } //周期 Long maintCycle = bo.getInspCycle(); //单位 1-天 2-周 3-月 4-季 5-年 String maintCycleUnit = bo.getInspCycleUnit(); switch (maintCycleUnit) { case "1": newNext = DateUtils.addDays(oldNext, maintCycle.intValue()); break; case "2": newNext = DateUtils.addWeeks(oldNext, maintCycle.intValue()); break; case "3": newNext = DateUtils.addMonths(oldNext, maintCycle.intValue()); break; case "4": newNext = DateUtils.addMonths(oldNext, maintCycle.intValue() * 3); break; case "5": newNext = DateUtils.addYears(oldNext, maintCycle.intValue()); break; } bo.setInspNextTime(newNext); if(bo.getInspFirstTime()==null){ bo.setInspFirstTime(oldNext); } bo.setInspLastTime(oldNext); } /** * 修改点检记录 * * @param bo 点检记录 * @return 是否修改成功 */ @Override public Boolean updateByBo(EimsInspectRecordBo bo) { EimsInspectRecord update = MapstructUtils.convert(bo, EimsInspectRecord.class); validEntityBeforeSave(update); return baseMapper.updateById(update) > 0; } /** * 保存前的数据校验 */ private void validEntityBeforeSave(EimsInspectRecord entity){ //TODO 做一些数据校验,如唯一约束 } /** * 校验并批量删除点检记录信息 * * @param ids 待删除的主键集合 * @param isValid 是否进行有效性校验 * @return 是否删除成功 */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { if(isValid){ //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteByIds(ids) > 0; } }