package org.dromara.eims.service.impl; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.SneakyThrows; import org.dromara.common.core.constant.DictConstants; import org.dromara.common.core.service.MaintOrderService; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.SpringUtils; 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.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.EimsMaintOrderBo; import org.dromara.eims.domain.vo.EimsMaintOrderVo; import org.dromara.eims.domain.EimsMaintOrder; import org.dromara.eims.mapper.EimsMaintOrderMapper; import org.dromara.eims.service.IEimsMaintOrderService; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Collection; /** * 保养工单Service业务层处理 * * @author zhuguifei * @date 2025-03-06 */ @RequiredArgsConstructor @Service public class EimsMaintOrderServiceImpl implements IEimsMaintOrderService, MaintOrderService { private final EimsMaintOrderMapper baseMapper; private final SysDeptMapper sysDeptMapper; /** * 查询保养工单 * * @param id 主键 * @return 保养工单 */ @Override public EimsMaintOrderVo queryById(Long id){ return baseMapper.selectVoById(id); } /** * 分页查询保养工单列表 * * @param bo 查询条件 * @param pageQuery 分页参数 * @return 保养工单分页列表 */ @Override public TableDataInfo queryPageList(EimsMaintOrderBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); return TableDataInfo.build(result); } @Override public TableDataInfo queryPageListCustom(EimsMaintOrderBo bo, PageQuery pageQuery) { Page page = baseMapper.selectMaintOrderList(pageQuery.build(), buildWrapper(bo)); return TableDataInfo.build(page); } /** * 查询符合条件的保养工单列表 * * @param bo 查询条件 * @return 保养工单列表 */ @Override public List queryList(EimsMaintOrderBo bo) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); return baseMapper.selectVoList(lqw); } private QueryWrapper buildWrapper(EimsMaintOrderBo bo) { Map params = bo.getParams(); QueryWrapper qw = Wrappers.query(); qw.like(StringUtils.isNotBlank(bo.getMaintCode()),"mo.maint_code", bo.getMaintCode()); qw.like(bo.getEquName() != null, "equ.equ_name", bo.getEquName()); qw.eq(StringUtils.isNotBlank(bo.getMaintType()), "mo.maint_type", bo.getMaintType()); qw.eq(StringUtils.isNotBlank(bo.getMaintCycleUnit()), "mo.maint_cycle_unit", bo.getMaintCycleUnit()); qw.eq(StringUtils.isNotBlank(bo.getMaintRule()), "mo.maint_rule", bo.getMaintRule()); qw.eq(bo.getMaintUser() != null, "mo.maint_user", bo.getMaintUser()); qw.in(bo.getMaintDept() != null, "mo.maint_dept", getAllDescendantIds(bo.getMaintDept())); qw.eq(bo.getStatus() != null, "mo.status", bo.getStatus()); qw.orderByDesc("mo.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); } } } private LambdaQueryWrapper buildQueryWrapper(EimsMaintOrderBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(bo.getEquId() != null, EimsMaintOrder::getEquId, bo.getEquId()); lqw.eq(StringUtils.isNotBlank(bo.getMaintType()), EimsMaintOrder::getMaintType, bo.getMaintType()); lqw.eq(bo.getMaintCycle() != null, EimsMaintOrder::getMaintCycle, bo.getMaintCycle()); lqw.eq(StringUtils.isNotBlank(bo.getMaintCycleUnit()), EimsMaintOrder::getMaintCycleUnit, bo.getMaintCycleUnit()); lqw.eq(StringUtils.isNotBlank(bo.getMaintRule()), EimsMaintOrder::getMaintRule, bo.getMaintRule()); lqw.eq(bo.getMaintUser() != null, EimsMaintOrder::getMaintUser, bo.getMaintUser()); lqw.eq(bo.getMaintDept() != null, EimsMaintOrder::getMaintDept, bo.getMaintDept()); lqw.eq(StringUtils.isNotBlank(bo.getMaintCode()), EimsMaintOrder::getMaintCode, bo.getMaintCode()); lqw.eq(StringUtils.isNotBlank(bo.getStatus()), EimsMaintOrder::getStatus, bo.getStatus()); lqw.eq(bo.getPlanTime() != null, EimsMaintOrder::getPlanTime, bo.getPlanTime()); lqw.eq(bo.getPlanId() != null, EimsMaintOrder::getPlanId, bo.getPlanId()); return lqw; } /** * 新增保养工单 * * @param bo 保养工单 * @return 是否新增成功 */ @Override public Boolean insertByBo(EimsMaintOrderBo bo) { EimsMaintOrder add = MapstructUtils.convert(bo, EimsMaintOrder.class); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); } return flag; } /** * 修改保养工单 * * @param bo 保养工单 * @return 是否修改成功 */ @SneakyThrows @Transactional(rollbackFor = Exception.class) @Override public Boolean updateByBo(EimsMaintOrderBo bo) { EimsMaintOrder update = MapstructUtils.convert(bo, EimsMaintOrder.class); EimsMaintOrder old = baseMapper.selectById(bo.getId()); validEntityBeforeSave(update); return baseMapper.updateById(update) > 0; } /** * 保存前的数据校验 */ private void validEntityBeforeSave(EimsMaintOrder entity){ //TODO 做一些数据校验,如唯一约束 } /** * 校验并批量删除保养工单信息 * * @param ids 待删除的主键集合 * @param isValid 是否进行有效性校验 * @return 是否删除成功 */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { if(isValid){ //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteByIds(ids) > 0; } @Override public String selectMaintOrderCodeByIds(String orderIds) { List list = new ArrayList<>(); for (Long id : StringUtils.splitTo(orderIds, Convert::toLong)) { EimsMaintOrderVo vo = SpringUtils.getAopProxy(this).queryById(id); if (ObjectUtil.isNotNull(vo)) { list.add(vo.getMaintCode()); } } return String.join(StringUtils.SEPARATOR, list); } }