package org.dromara.eims.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.dromara.common.core.constant.DictConstants; 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.EimsEqu; import org.dromara.eims.domain.EimsInspectRecord; import org.dromara.eims.domain.vo.EimsInspectRecordVo; import org.dromara.eims.mapper.EimsEquMapper; import org.dromara.eims.mapper.EimsInspectRecordMapper; import org.springframework.stereotype.Service; import org.dromara.eims.domain.bo.EimsInspectStBo; import org.dromara.eims.domain.vo.EimsInspectStVo; import org.dromara.eims.domain.EimsInspectSt; import org.dromara.eims.mapper.EimsInspectStMapper; import org.dromara.eims.service.IEimsInspectStService; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.ZoneId; import java.time.temporal.TemporalAdjusters; import java.util.*; import java.util.stream.Collectors; /** * 点检汇总Service业务层处理 * * @author zhuguifei * @date 2025-03-14 */ @RequiredArgsConstructor @Service public class EimsInspectStServiceImpl implements IEimsInspectStService { private final EimsInspectStMapper baseMapper; private final EimsEquMapper equMapper; private final EimsInspectRecordMapper recordMapper; /** * 查询点检汇总 * * @param id 主键 * @return 点检汇总 */ @Override public EimsInspectStVo queryById(Long id){ EimsInspectStVo stVo = baseMapper.selectVoById(id); if(stVo!=null&&stVo.getEquId()!=null){ EimsEqu eimsEqu = equMapper.selectById(stVo.getEquId()); stVo.setEquName(eimsEqu.getEquName()); stVo.setAssetNo(eimsEqu.getAssetNo()); } // fillStDataSingle(stVo); return stVo; } @Override public EimsInspectStVo queryByStId(String stId) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("st_id", stId); EimsInspectStVo stVo = baseMapper.selectVoOne(queryWrapper); if(stVo!=null&&stVo.getEquId()!=null){ EimsEqu eimsEqu = equMapper.selectById(stVo.getEquId()); stVo.setEquName(eimsEqu.getEquName()); stVo.setAssetNo(eimsEqu.getAssetNo()); } // fillStDataSingle(stVo); return stVo; } /** * * @param stVo type Day-日视图 Month-月视图 * @param */ private void fillStDataSingle(EimsInspectStVo stVo) { LambdaQueryWrapper recordLqw = Wrappers.lambdaQuery(); recordLqw.eq(EimsInspectRecord::getEquId, stVo.getEquId()); LocalDate planTime = stVo.getPlanTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); // 月视图查询范围 LocalDate startOfMonth = planTime.with(TemporalAdjusters.firstDayOfMonth()); LocalDate endOfMonth = planTime.with(TemporalAdjusters.lastDayOfMonth()); // 日视图查询范围 if(stVo.getType().equals("Day")){ recordLqw.between(EimsInspectRecord::getPlanTime, planTime, planTime); }else { // 月视图查询范围 recordLqw.between(EimsInspectRecord::getPlanTime, startOfMonth, endOfMonth); } // 执行查询 List recordList = recordMapper.selectVoList(recordLqw); // TODO 根据字典eims_inspect_status Map cMap = recordList.stream() .filter(order -> List.of("0", "1").contains(order.getStatus())) .collect(Collectors.groupingBy(EimsInspectRecordVo::getStatus, Collectors.counting())); // TODO 根据字典eims_inspect_result Map rMap = recordList.stream() .filter(order ->order.getInspResult()!=null && List.of("1", "2").contains(order.getInspResult())) .collect(Collectors.groupingBy(EimsInspectRecordVo::getInspResult, Collectors.counting())); stVo.setRecordCount(recordList.size()); stVo.setUnCheckCount(cMap.getOrDefault("0", 0L).intValue()); stVo.setCheckCount(cMap.getOrDefault("1", 0L).intValue()); stVo.setNormalNum(rMap.getOrDefault("1", 0L).intValue()); stVo.setAbNormalNum(rMap.getOrDefault("2", 0L).intValue()); } /** * 分页查询点检汇总列表 * * @param bo 查询条件 * @param pageQuery 分页参数 * @return 点检汇总分页列表 */ @Override public TableDataInfo queryPageList(EimsInspectStBo bo, PageQuery pageQuery) { bo.setType(bo.getViewMode()); QueryWrapper qw = buildWrapper(bo); Page result = baseMapper.selectInspStList(pageQuery.build(), qw); // 填充数据 fillStData(result,bo.getViewMode()); return TableDataInfo.build(result); } /** * * @param result * @param type Day-日视图 Month-月视图 */ private void fillStData(Page result,String type) { List records = result.getRecords(); for (int i = 0; i < records.size(); i++) { EimsInspectStVo stVo = records.get(i); //2.统计数据 LambdaQueryWrapper recordLqw = Wrappers.lambdaQuery(); recordLqw.eq(EimsInspectRecord::getEquId, stVo.getEquId()); LocalDate planTime = stVo.getPlanTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); // 月视图查询范围 LocalDate startOfMonth = planTime.with(TemporalAdjusters.firstDayOfMonth()); LocalDate endOfMonth = planTime.with(TemporalAdjusters.lastDayOfMonth()); // 日视图查询范围 if(type.equals("Day")){ recordLqw.between(EimsInspectRecord::getPlanTime, planTime, planTime); }else { // 月视图查询范围 recordLqw.between(EimsInspectRecord::getPlanTime, startOfMonth, endOfMonth); } // 执行查询 List recordList = recordMapper.selectVoList(recordLqw); // TODO 根据字典eims_inspect_status Map cMap = recordList.stream() .filter(order -> List.of("0", "1").contains(order.getStatus())) .collect(Collectors.groupingBy(EimsInspectRecordVo::getStatus, Collectors.counting())); // TODO 根据字典eims_inspect_result Map rMap = recordList.stream() .filter(order ->order.getInspResult()!=null && List.of("1", "2").contains(order.getInspResult())) .collect(Collectors.groupingBy(EimsInspectRecordVo::getInspResult, Collectors.counting())); stVo.setRecordCount(recordList.size()); stVo.setUnCheckCount(cMap.getOrDefault("0", 0L).intValue()); stVo.setCheckCount(cMap.getOrDefault("1", 0L).intValue()); stVo.setNormalNum(rMap.getOrDefault("1", 0L).intValue()); stVo.setAbNormalNum(rMap.getOrDefault("2", 0L).intValue()); } } private QueryWrapper buildGroupWrapper(EimsInspectStBo bo) { Map params = bo.getParams(); QueryWrapper qw = Wrappers.query(); qw.like(StringUtils.isNotBlank(bo.getTitle()), "CONCAT(DATE_FORMAT(ir.plan_time, '%Y%m%d'), equ.equ_name)", bo.getTitle()); qw.like(StringUtils.isNotBlank(bo.getEquName()), "equ.equ_name", bo.getEquName()); qw.like(StringUtils.isNotBlank(bo.getAssetNo()), "equ.asset_no", bo.getAssetNo()); qw.between(params.get("beginPlanTime") != null && params.get("endPlanTime") != null, "ir.plan_time", params.get("beginPlanTime"), params.get("endPlanTime")); qw.eq(bo.getInspUser() != null, "ir.insp_user", bo.getInspUser()); qw.eq(bo.getVerifyUser() != null, "ir.verify_user", bo.getVerifyUser()); qw.eq(bo.getStatus() != null, "ir.status", bo.getStatus()); qw.between(params.get("beginPlanTime") != null && params.get("endPlanTime") != null, "ir.plan_time", params.get("beginPlanTime"), params.get("endPlanTime")); qw.groupBy(Arrays.asList("ir.equ_id","ir.plan_time")); qw.orderByDesc( "ir.plan_time"); return qw; } /** * 查询符合条件的点检汇总列表 * * @param bo 查询条件 * @return 点检汇总列表 */ @Override public List queryList(EimsInspectStBo bo) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); return baseMapper.selectVoList(lqw); } private LambdaQueryWrapper buildQueryWrapper(EimsInspectStBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(bo.getEquId() != null, EimsInspectSt::getEquId, bo.getEquId()); lqw.eq(bo.getPlanTime() != null, EimsInspectSt::getPlanTime, bo.getPlanTime()); lqw.eq(StringUtils.isNotBlank(bo.getStatus()), EimsInspectSt::getStatus, bo.getStatus()); lqw.eq(bo.getInspUser() != null, EimsInspectSt::getInspUser, bo.getInspUser()); lqw.eq(bo.getVerifyUser() != null, EimsInspectSt::getVerifyUser, bo.getVerifyUser()); lqw.eq(bo.getVerifyTime() != null, EimsInspectSt::getVerifyTime, bo.getVerifyTime()); return lqw; } private QueryWrapper buildWrapper(EimsInspectStBo bo) { Map params = bo.getParams(); QueryWrapper qw = Wrappers.query(); qw.like(StringUtils.isNotBlank(bo.getTitle()), "st.title", bo.getTitle()); qw.like(StringUtils.isNotBlank(bo.getEquName()), "equ.equ_name", bo.getEquName()); qw.like(StringUtils.isNotBlank(bo.getAssetNo()), "equ.asset_no", bo.getAssetNo()); if(bo.getPlanTime()!=null&&bo.getViewMode() != null && bo.getViewMode().equals("Day")){ qw.eq("DATE_FORMAT(st.plan_time, '%Y-%m-%d')", DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,bo.getPlanTime())); }else if(bo.getPlanTime()!=null&&bo.getViewMode() != null && bo.getViewMode().equals("Month")){ qw.eq("DATE_FORMAT(st.plan_time, '%Y-%m')", DateUtils.parseDateToStr(DateUtils.YYYY_MM,bo.getPlanTime())); } qw.eq( "st.type", bo.getType()); qw.between(params.get("beginPlanTime") != null && params.get("endPlanTime") != null, "st.plan_time", params.get("beginPlanTime"), params.get("endPlanTime")); if (params.get("searchValue") != null && StringUtils.isNotBlank(params.get("searchValue").toString())) { qw.and(wq -> wq.like("st.title", params.get("searchValue")) .or().like("equ.equ_name", params.get("searchValue")) .or().like("equ.asset_no", params.get("searchValue")) ); } qw.eq(bo.getInspUser() != null, "st.maint_user", bo.getInspUser()); qw.eq(bo.getVerifyUser() != null, "st.verify_user", bo.getVerifyUser()); qw.eq(bo.getStatus() != null, "st.status", bo.getStatus()); qw.eq(bo.getUpdateBy() != null, "st.update_by", bo.getUpdateBy()); qw.orderByDesc( "st.create_time"); return qw; } /** * 新增点检汇总 * * @param bo 点检汇总 * @return 是否新增成功 */ @Override public Boolean insertByBo(EimsInspectStBo bo) { EimsInspectSt add = MapstructUtils.convert(bo, EimsInspectSt.class); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); } return flag; } /** * 修改点检汇总 * * @param bo 点检汇总 * @return 是否修改成功 */ @Override public Boolean updateByBo(EimsInspectStBo bo) { EimsInspectSt update = MapstructUtils.convert(bo, EimsInspectSt.class); // if(bo.getVerifyUser()!=null){ // EimsInspectSt st = baseMapper.selectById(bo.getId()); // String status = st.getStatus(); // if(status==null || status.equals(DictConstants.MAINT_ORDER_ST_STATUS_DETAIL.N)){ // if(update.getVerifyTime()==null) update.setStatus(DictConstants.MAINT_ORDER_ST_STATUS_DETAIL.Y); // if(update.getVerifyTime()==null) update.setVerifyTime(new Date()); // } // } validEntityBeforeSave(update); return baseMapper.updateById(update) > 0; } /** * 保存前的数据校验 */ private void validEntityBeforeSave(EimsInspectSt entity){ //TODO 做一些数据校验,如唯一约束 } /** * 校验并批量删除点检汇总信息 * * @param ids 待删除的主键集合 * @param isValid 是否进行有效性校验 * @return 是否删除成功 */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { if(isValid){ //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteByIds(ids) > 0; } }