车间能级提升-智能设备管理系统
baoshiwei
2025-07-02 2f0009c750de4d47a18cce4a5a403fa83ba0c209
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java
@@ -5,7 +5,9 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.SneakyThrows;
import org.dromara.common.core.constant.DictConstants;
import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.service.MaintOrderService;
import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StringUtils;
@@ -16,21 +18,27 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.eims.domain.EimsMaintPlan;
import org.dromara.eims.domain.EimsSpareInout;
import org.dromara.eims.domain.bo.EimsSpareBo;
import org.dromara.eims.domain.bo.EimsSpareInoutBo;
import org.dromara.eims.domain.bo.MaintOrderBo;
import org.dromara.eims.domain.vo.*;
import org.dromara.eims.mapper.EimsEquMapper;
import org.dromara.eims.mapper.EimsMaintPlanMapper;
import org.dromara.eims.service.IEimsSpareInoutService;
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;
import java.util.*;
/**
 * 保养工单Service业务层处理
@@ -43,7 +51,10 @@
public class EimsMaintOrderServiceImpl implements IEimsMaintOrderService, MaintOrderService {
    private final EimsMaintOrderMapper baseMapper;
    private final EimsMaintPlanMapper planMapper;
    private final SysDeptMapper sysDeptMapper;
    private final EimsEquMapper equMapper;
    private final IEimsSpareInoutService spareInoutService;
    /**
     * 查询保养工单
@@ -53,7 +64,13 @@
     */
    @Override
    public EimsMaintOrderVo queryById(Long id){
        return baseMapper.selectVoById(id);
        EimsMaintOrderVo orderVo = baseMapper.selectVoById(id);
        EimsEquVo equVo = equMapper.selectVoById(orderVo.getEquId());
        if(equVo!=null){
            orderVo.setEquName(equVo.getEquName());
            orderVo.setAssetNo(equVo.getAssetNo());
        }
        return orderVo;
    }
    /**
@@ -76,6 +93,12 @@
        return TableDataInfo.build(page);
    }
    @Override
    public TableDataInfo<MaintOrdeGroupVo> queryPageGroupList(EimsMaintOrderBo bo, PageQuery pageQuery) {
        Page<MaintOrdeGroupVo> page = baseMapper.selectMaintOrderGroupList(pageQuery.build(), buildGroupWrapper(bo));
        return TableDataInfo.build(page);
    }
    /**
     * 查询符合条件的保养工单列表
     *
@@ -92,13 +115,35 @@
        QueryWrapper<EimsMaintOrder> 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.like(bo.getEquId() != null, "equ.equ_id", bo.getEquId());
        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.eq(bo.getPlanTime()!=null,
            "mo.plan_time", bo.getPlanTime());
        qw.between(params.get("beginPlanTime") != null && params.get("endPlanTime") != null,
            "mo.plan_time", params.get("beginPlanTime"), params.get("endPlanTime"));
        qw.orderByDesc("mo.create_time");
        return qw;
    }
    private QueryWrapper<EimsMaintOrder> buildGroupWrapper(EimsMaintOrderBo bo) {
        Map<String, Object> params = bo.getParams();
        QueryWrapper<EimsMaintOrder> 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.between(params.get("beginPlanTime") != null && params.get("endPlanTime") != null,
            "mo.plan_time", params.get("beginPlanTime"), params.get("endPlanTime"));
        qw.groupBy(Arrays.asList("mo.equ_id","mo.plan_time"));
        qw.orderByDesc("mo.plan_time");
        return qw;
    }
@@ -143,6 +188,8 @@
        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());
        // 按创建时间倒序
        lqw.orderByDesc(EimsMaintOrder::getCreateTime);
        return lqw;
    }
@@ -152,9 +199,20 @@
     * @param bo 保养工单
     * @return 是否新增成功
     */
    @Transactional(rollbackFor = Exception.class)
    @Override
    public Boolean insertByBo(EimsMaintOrderBo bo) {
        EimsMaintOrder add = MapstructUtils.convert(bo, EimsMaintOrder.class);
        //通过保养计划生成的数据需要更新保养计划
        Long planId = bo.getPlanId();
        if(planId!=null){
            EimsMaintPlan eimsMaintPlan = planMapper.selectById(planId);
            setMaintNextTime(eimsMaintPlan);
            planMapper.updateById(eimsMaintPlan);
        }
        validEntityBeforeSave(add);
        boolean flag = baseMapper.insert(add) > 0;
        if (flag) {
@@ -162,6 +220,50 @@
        }
        return flag;
    }
    /**
     * 计算保养计划下次执行时间
     */
    @SneakyThrows
    private void setMaintNextTime(EimsMaintPlan bo) {
        Date oldNext = bo.getMaintNextTime();
        //TODO 下次保养时间计算规则 0-按固定周期  1-按上次保养时间
        Date newNext = null;
        //下次次执行时间为空抛出异常
        if (oldNext == null) {
            throw new Exception("下次保养时间不能为空!");
        }
        //周期
        Long maintCycle = bo.getMaintCycle();
        //单位 1-天 2-周 3-月 4-季 5-年
        String maintCycleUnit = bo.getMaintCycleUnit();
        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.setMaintNextTime(newNext);
        if(bo.getMaintFirstTime()==null){
            bo.setMaintFirstTime(oldNext);
        }
        bo.setMaintLastTime(oldNext);
    }
    /**
@@ -175,11 +277,61 @@
    @Override
    public Boolean updateByBo(EimsMaintOrderBo bo) {
        EimsMaintOrder update = MapstructUtils.convert(bo, EimsMaintOrder.class);
        if(bo.getStatus().equals(DictConstants.MAINT_ORDER_STATUS_DETAIL.BAOYANG) && bo.getStartTime() == null){
            update.setStartTime(new Date());
        }
        EimsMaintOrder old = baseMapper.selectById(bo.getId());
        if(bo.getStatus().equals(DictConstants.MAINT_ORDER_STATUS_DETAIL.DAIYANZHENG) && bo.getEndTime() == null){
            update.setEndTime(new Date());
        }
        if(bo.getStatus().equals(DictConstants.MAINT_ORDER_STATUS_DETAIL.WANCHENG) && bo.getVerifyUser() == null){
            LoginUser loginUser = LoginHelper.getLoginUser();
            update.setVerifyUser(loginUser.getUserId());
        }
        validEntityBeforeSave(update);
        return baseMapper.updateById(update) > 0;
    }
    /**
     * 批量修改保养工单
     *
     * @param bo 保养工单
     * @return 是否修改成功
     */
    @Override
    public boolean updateBatchByBo(MaintOrderBo bo) {
        LoginUser loginUser = LoginHelper.getLoginUser();
        List<EimsMaintOrder> list = MapstructUtils.convert(bo.getMaintOrderList(),  EimsMaintOrder.class);
        list.forEach(e -> {
            e.setStatus(DictConstants.MAINT_ORDER_STATUS_DETAIL.DAIYANZHENG);
            e.setEndTime(new Date());
            e.setMaintUser(loginUser.getUserId());
            e.setUpdateTime(new Date());
        });
        bo.getMaintOrderList().forEach(item -> {
            // 判断备件列表是否为空,不为空则新增一个备件出库单,同时增加出库明细
            if (item.getSpareParts() != null && item.getSpareParts().size() > 0) {
                EimsSpareInoutBo spareInoutBo = new EimsSpareInoutBo();
                // 根据日期生成单号,格式为CK+日期+流水号
                spareInoutBo.setOrderCode("CK"+DateUtils.dateTimeNow("yyyyMMddHHmmss"));
                spareInoutBo.setOrderTime(new Date());
                spareInoutBo.setType(DictConstants.SPARE_INOUT_TYPE_DETAIL.CK);
                spareInoutBo.setPartnerName(loginUser.getNickname());
                spareInoutBo.setSpareList(item.getSpareParts());
                spareInoutBo.setChargeUser(loginUser.getUserId());
                spareInoutBo.setChargeDept(loginUser.getDeptId());
                spareInoutBo.setAssociatedOrder(item.getMaintCode());
                // 保存进数据库
                Boolean b = spareInoutService.insertByBo(spareInoutBo);
            }
        });
        return baseMapper.updateBatchById(list);
    }
    /**
@@ -216,4 +368,20 @@
        }
        return String.join(StringUtils.SEPARATOR, list);
    }
    @Override
    public List<EimsSpareVo> querySpareParts(String code) {
        // 查询关联的备件,关系如下:备件出入库单的associatedOrder 关联传入的code,备件出入库明细通过出入库单的id关联,备件名称通过出入库明细中的spareId关联
        EimsSpareInoutBo bo = new EimsSpareInoutBo();
        bo.setAssociatedOrder(code);
        List<EimsSpareInoutVo> list = spareInoutService.queryList(bo);
        if (!list.isEmpty()) {
            // 查询备件明细和名称
            EimsSpareInoutVo eimsSpareInoutVo = spareInoutService.queryById(list.get(0).getId());
            return eimsSpareInoutVo.getSpareList();
        }
        return List.of();
    }
}