车间能级提升-智能设备管理系统
zhuguifei
2025-04-29 d28bb7d7acdc4d27a553e5b6b2458d5e7ec43165
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairResServiceImpl.java
@@ -3,7 +3,9 @@
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.domain.model.LoginUser;
import org.dromara.common.core.service.RepairResService;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.SpringUtils;
@@ -14,27 +16,24 @@
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.EimsFixture;
import org.dromara.eims.domain.EimsRepairReq;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.eims.domain.*;
import org.dromara.eims.domain.vo.EimsEquVo;
import org.dromara.eims.domain.vo.EimsFixtureVo;
import org.dromara.eims.domain.vo.EimsRepairReqVo;
import org.dromara.eims.mapper.EimsRepairReqMapper;
import org.dromara.eims.mapper.*;
import org.dromara.eims.utils.DataFilterUtil;
import org.dromara.system.domain.SysDept;
import org.dromara.system.domain.vo.SysDeptVo;
import org.dromara.system.mapper.SysDeptMapper;
import org.redisson.misc.LogHelper;
import org.springframework.stereotype.Service;
import org.dromara.eims.domain.bo.EimsRepairResBo;
import org.dromara.eims.domain.vo.EimsRepairResVo;
import org.dromara.eims.domain.EimsRepairRes;
import org.dromara.eims.mapper.EimsRepairResMapper;
import org.dromara.eims.service.IEimsRepairResService;
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业务层处理
@@ -49,6 +48,9 @@
    private final EimsRepairResMapper baseMapper;
    private final EimsRepairReqMapper reqMapper;
    private final SysDeptMapper deptMapper;
    private final EimsRepairRecordMapper recordMapper;
    private final EimsEquMapper equMapper;
    private final EimsFixtureMapper fixtureMapper;
    /**
     * 查询维修工单
@@ -58,7 +60,27 @@
     */
    @Override
    public EimsRepairResVo queryById(Long id) {
        return baseMapper.selectVoById(id);
        EimsRepairResVo resVo = baseMapper.selectVoById(id);
        Long reqId = resVo.getReqId();
        if(reqId!=null){
            EimsRepairReqVo reqVo = reqMapper.selectVoById(reqId);
            resVo.setReqType(reqVo.getReqType());
            resVo.setReqCode(reqVo.getCode());
            if(reqVo.getEquId()!=null){
                EimsEquVo equVo = equMapper.selectVoById(reqVo.getEquId());
                resVo.setAssetNo(equVo.getAssetNo());
                resVo.setEquName(equVo.getEquName());
            }
            if(reqVo.getFixtureId()!=null){
                EimsFixtureVo fixtureVo = fixtureMapper.selectVoById(reqVo.getFixtureId());
                resVo.setFixtureName(fixtureVo.getFixtureName());
                resVo.setAssetNo(fixtureVo.getAssetNo());
            }
        }
        return resVo;
    }
    /**
@@ -98,6 +120,8 @@
            EimsRepairRes::getStartTime, params.get("beginStartTime"), params.get("endStartTime"));
        lqw.between(params.get("beginEndTime") != null && params.get("endEndTime") != null,
            EimsRepairRes::getEndTime, params.get("beginEndTime"), params.get("endEndTime"));
        // 按创建时间倒序
        lqw.orderByDesc(EimsRepairRes::getCreateTime);
        return lqw;
    }
@@ -109,7 +133,7 @@
     */
    @Transactional(rollbackFor = Exception.class)
    @Override
    public Boolean insertByBo(EimsRepairResBo bo) {
    public synchronized Boolean insertByBo(EimsRepairResBo bo) {
        EimsRepairRes add = MapstructUtils.convert(bo, EimsRepairRes.class);
        validEntityBeforeSave(add);
        boolean flag = baseMapper.insert(add) > 0;
@@ -118,11 +142,57 @@
            // 新增维修工单的时候更新报修单数据
            EimsRepairReqVo reqVo = reqMapper.selectVoById(bo.getReqId());
            reqVo.setRepairId(add.getId());
            reqVo.setStatus(DictConstants.REPAIR_REQ_STATUS_DETAIL.WEIXIU);
            reqVo.setStatus(DictConstants.REPAIR_REQ_STATUS_DETAIL.YIJIEDAN);
            EimsRepairReq req = MapstructUtils.convert(reqVo, EimsRepairReq.class);
            reqMapper.updateById(req);
            //将新增报修单时维修记录的维修工单id更新
            LambdaQueryWrapper<EimsRepairRecord> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(EimsRepairRecord::getReqId, add.getReqId());
            EimsRepairRecord one = recordMapper.selectOne(queryWrapper);
            if(one!=null){
                one.setResId(add.getId());
                recordMapper.updateById(one);
            }
            //生成维修记录
            EimsRepairRecord record = new EimsRepairRecord();
            record.setReqId(add.getReqId());
            record.setResId(add.getId());
            record.setHandleTime(new Date());
            //接单状态
            record.setOpera(DictConstants.REPAIR_RECORD_HANDLE_DETAIL.YIJIEDAN);
            record.setOperaUser(add.getCreateBy());
            record.setOperaResult("生成维修工单");
            //新增时生成记录
            recordMapper.insert(record);
        }
        return flag;
    }
    @SneakyThrows
    @Transactional(rollbackFor = Exception.class)
    @Override
    public Boolean insertBatchByBo(EimsRepairResBo bo){
        String batchReqIds = bo.getBatchReqIds();
        boolean result = StringUtils.isNotEmpty(batchReqIds);
        for (String reqId : batchReqIds.split(",")) {
            EimsRepairReqVo reqVo = reqMapper.selectVoById(reqId);
            EimsRepairResBo insert = new EimsRepairResBo();
            insert.setReqId(reqVo.getId());
            insert.setReqUser(reqVo.getReqUser());
            insert.setReqDept(reqVo.getReqDept());
            insert.setResCode(reqVo.getCode().replace("BXD","WXD"));
            insert.setResUser(bo.getResUser());
            insert.setResDept(bo.getResDept());
            insert.setStatus(DictConstants.REPAIR_RES_STATUS_DETAIL.YIJIEDAN);
            Boolean b = insertByBo(insert);
            if(!b)throw new Exception("");
        }
        return result;
    }
    /**
@@ -134,17 +204,56 @@
    @Transactional(rollbackFor = Exception.class)
    @Override
    public Boolean updateByBo(EimsRepairResBo bo) {
        LoginUser loginUser = LoginHelper.getLoginUser();
        EimsRepairRes update = MapstructUtils.convert(bo, EimsRepairRes.class);
        EimsRepairResVo resVo = baseMapper.selectVoById(bo.getId());
        String status = resVo.getStatus();
        //首次更新需要同步更新报修单状态
        //维修工单开始维修,同步更新报修单 以及 维修记录
        if (bo.getStatus().equals(DictConstants.REPAIR_RES_STATUS_DETAIL.WEIXIU) &&
            status.equals(DictConstants.REPAIR_RES_STATUS_DETAIL.YIJIEDAN)) {
            //1.设置开始维修时间
            //2.更新报修单为维修状态
            EimsRepairReqVo reqVo = reqMapper.selectVoById(bo.getReqId());
            reqVo.setStatus(DictConstants.REPAIR_REQ_STATUS_DETAIL.WEIXIU);
            EimsRepairReq req = MapstructUtils.convert(reqVo, EimsRepairReq.class);
            reqMapper.updateById(req);
            //3.生成维修记录
            EimsRepairRecord record = new EimsRepairRecord();
            record.setResId(bo.getId());
            record.setReqId(bo.getReqId());
            record.setHandleTime(new Date());
            record.setOpera(DictConstants.REPAIR_RECORD_HANDLE_DETAIL.WEIXIU);
            assert loginUser != null;
            record.setOperaUser(loginUser.getUserId());
            record.setOperaResult("开始维修");
            recordMapper.insert(record);
        }
        //维修工单完成,同步更新报修单 以及 维修记录
        if (bo.getStatus().equals(DictConstants.REPAIR_RES_STATUS_DETAIL.WANCHENG) &&
            status.equals(DictConstants.REPAIR_RES_STATUS_DETAIL.WEIXIU)) {
            //1.设置结束维修时间
            //2.更新报修单为完成状态
            EimsRepairReqVo reqVo = reqMapper.selectVoById(bo.getReqId());
            reqVo.setStatus(DictConstants.REPAIR_REQ_STATUS_DETAIL.WANCHENG);
            EimsRepairReq req = MapstructUtils.convert(reqVo, EimsRepairReq.class);
            reqMapper.updateById(req);
            //3.生成维修记录
            EimsRepairRecord record = new EimsRepairRecord();
            record.setResId(bo.getId());
            record.setReqId(bo.getReqId());
            record.setHandleTime(new Date());
            record.setOpera(DictConstants.REPAIR_RECORD_HANDLE_DETAIL.WANCHENG);
            assert loginUser != null;
            record.setOperaUser(loginUser.getUserId());
            record.setOperaResult("完成维修工单");
            recordMapper.insert(record);
        }
        validEntityBeforeSave(update);
        return baseMapper.updateById(update) > 0;
@@ -174,6 +283,7 @@
    @Override
    public TableDataInfo<EimsRepairResVo> queryPageListCustom(EimsRepairResBo bo, PageQuery pageQuery) {
        DataFilterUtil.getInstance().filterRepairRes(bo);
        Page<EimsRepairResVo> page = baseMapper.selectRepairResList(pageQuery.build(), buildWrapper(bo));
        return TableDataInfo.build(page);
    }
@@ -184,9 +294,15 @@
        qw.like(StringUtils.isNotBlank(bo.getResCode()), "res.res_code", bo.getResCode());
        qw.like(StringUtils.isNotBlank(bo.getReqCode()), "req.code", bo.getReqCode());
        qw.eq(bo.getResUser() != null, "res.res_user", bo.getResUser());
        qw.eq(bo.getReqType() != null, "req.req_type", bo.getReqType());
        qw.eq(bo.getReqUser() != null, "res.req_user", bo.getReqUser());
        List<Long> allDescendantIds = getAllDescendantIds(bo.getResDept());
        qw.in(bo.getResDept() != null, "res.res_dept", allDescendantIds);
        List<Long> resDeptIds = getAllDescendantIds(bo.getResDept());
        qw.in(bo.getResDept() != null, "res.res_dept", resDeptIds);
        List<Long> reqDeptIds = getAllDescendantIds(bo.getReqDept());
        qw.in(bo.getReqDept() != null, "res.req_dept", reqDeptIds);
        qw.eq(StringUtils.isNotBlank(bo.getStatus()), "res.status", bo.getStatus());
        qw.orderByDesc("res.create_time");