jiangping
2025-04-08 9ae471f00bab21ee9cc40efdc26291fb580c03bf
server/src/main/java/com/doumee/service/business/impl/WorkorderServiceImpl.java
@@ -7,9 +7,12 @@
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.*;
import com.doumee.dao.business.model.*;
import com.doumee.dao.web.dto.CloseDTO;
import com.doumee.dao.web.dto.DCANoProblemDTO;
import com.doumee.service.business.WorkorderService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -18,14 +21,15 @@
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.catalina.Manager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import javax.annotation.Resource;
import java.io.Serializable;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
@@ -54,6 +58,13 @@
    @Autowired
    private ManagersMapper managersMapper;
    @Autowired
    private CategoryMapper categoryMapper;
    @Resource(name="sessionRedisTemplate")
    private RedisTemplate<Object, Serializable> redisTemplate;
    @Override
    public Integer create(Workorder workorder) {
        this.isValidBaseParam(workorder);
@@ -62,34 +73,113 @@
        workorder.setMemberId(workorder.getMemberId());
        workorder.setIsdeleted(Constants.ZERO);
        workorder.setStatus(Constants.ZERO);
        //跌绊滑事件上报 查询SHE负责人
        if(Constants.equalsInteger(workorder.getType(),Constants.THREE)){
            List<Managers> managersList = managersMapper.selectList(new QueryWrapper<Managers>().lambda().eq(Managers::getIsdeleted,Constants.ZERO)
                    .eq(Managers::getType,Constants.ZERO).orderByAsc(Managers::getSortnum)
            );
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(managersList)){
                workorder.setQwnoticeMemberIds(managersList.stream().map(i->i.getMemberId().toString()).collect(Collectors.joining(",")));
            }
        }
        workorder.setCode(this.getNextCode(workorder.getType()));
        //处理人员类信息
        this.dealNoticeData(workorder);
        workorderMapper.insert(workorder);
        //存储DCA 问题记录表
        this.saveProblemData(workorder);
        //存储附件信息
        this.saveMutiFile(workorder);
        //处理上报日志
        this.saveLog(null,workorder,Constants.ZERO,workorder.getMemberId());
        //TODO 发送通知
        return workorder.getId();
    }
    /**
     * 存储附件信息
     * @param workorder
     */
    public void saveMutiFile(Workorder workorder){
        List<Multifile> multifileList = workorder.getMultifileList();
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
            for (Multifile multifile:multifileList) {
                multifile.setObjId(workorder.getId());
                multifile.setCreateDate(new Date());
                //TODO 后续整理处理
                if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)){//SHE事件上报图片
                    multifile.setObjType(Constants.ZERO);
                    multifile.setObjType(Constants.multiFileType.sheUpload);
                }else if(Constants.equalsInteger(workorder.getType(),Constants.THREE)){//跌绊滑事件上报图片
                    multifile.setObjType(Constants.ONE);
                    multifile.setObjType(Constants.multiFileType.dbhUpload);
                }else if(Constants.equalsInteger(workorder.getType(),Constants.ONE)){//DCA事件上报
                    multifile.setObjType(Constants.multiFileType.dcaUpload);
                }
            }
            multifileMapper.insert(multifileList);
        }
        //处理上报日志
        this.saveLog(null,workorder,Constants.ZERO,workorder.getMemberId());
        return workorder.getId();
    }
    /**
     * 处理 DCA 提报 问题数据
     * @param workorder
     */
    public void saveProblemData(Workorder workorder){
        if(Constants.equalsInteger(workorder.getType(),Constants.TWO)){
            List<DCANoProblemDTO> dcaNoProblemDTOList = workorder.getDcaNoProblemDTOList();
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(dcaNoProblemDTOList)){
                for (DCANoProblemDTO dcaNoProblemDTO:dcaNoProblemDTOList) {
                    Category problem = categoryMapper.selectById(dcaNoProblemDTO.getProblemId());
                    Workorder dcaWorkOrder = new Workorder();
                    dcaWorkOrder.setCreateDate(new Date());
                    dcaWorkOrder.setEditDate(new Date());
                    dcaWorkOrder.setMemberId(workorder.getMemberId());
                    dcaWorkOrder.setTypeId(dcaNoProblemDTO.getProblemId());
                    dcaWorkOrder.setType(Constants.TWO);
                    dcaWorkOrder.setStatus(Constants.ZERO);
                    dcaWorkOrder.setIsdeleted(Constants.ZERO);
                    dcaWorkOrder.setProblemTitle(problem.getName());
                    dcaWorkOrder.setProblemId(problem.getId());
                    dcaWorkOrder.setProblemInfo(problem.getRemark());
                    dcaWorkOrder.setDcaRecordId(workorder.getId());
                    workorderMapper.insert(dcaWorkOrder);
                    List<Multifile> multifileList = dcaNoProblemDTO.getMultifileList();
                    if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
                        for (Multifile multifile:multifileList) {
                            multifile.setObjId(dcaWorkOrder.getId());
                            multifile.setCreateDate(new Date());
                            multifile.setObjType(Constants.multiFileType.dcaWorkOrder);
                        }
                        multifileMapper.insert(multifileList);
                    }
                }
            }
        }
    }
    /**
     * 处理通知类人员信息
     * @param workorder
     */
    public void dealNoticeData(Workorder workorder){
        //SHE上报 提交类型为同事 处理同事信息
        if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)&&Constants.equalsInteger(workorder.getMemberType(),Constants.ONE)){
            List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted,Constants.ZERO).in(Member::getQwId,workorder.getMemberQwids().split(",")));
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberList)){
                workorder.setMemberNames(memberList.stream().map(i->i.getName()).collect(Collectors.joining(",")));
            }
        }
        //跌绊滑事件上报 查询SHE负责人
        if(Constants.equalsInteger(workorder.getType(),Constants.THREE) || Constants.equalsInteger(workorder.getType(),Constants.ONE)){
            List<Managers> managersList = managersMapper.selectJoinList(Managers.class,new MPJLambdaWrapper<Managers>().selectAll(Managers.class)
                    .selectAs(Member::getName,Managers::getMemberName)
                    .leftJoin(Member.class,Member::getId,Managers::getMemberId)
                    .eq(Managers::getIsdeleted,Constants.ZERO)
                    .eq(Managers::getType,Constants.ZERO).orderByAsc(Managers::getSortnum)
            );
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(managersList)){
                workorder.setQwnoticeMemberIds(managersList.stream().map(i->i.getMemberId().toString()).collect(Collectors.joining(",")));
                if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)){
                    workorder.setEmialMemberIds(managersList.stream().map(i->i.getMemberId().toString()).collect(Collectors.joining(",")));
                }
            }
        }
    }
@@ -123,22 +213,21 @@
        || Objects.isNull(workorder.getSubmitDate())
        || Objects.isNull(workorder.getHappenTime())
        || Objects.isNull(workorder.getType())
        || !( Constants.equalsInteger(workorder.getType(),Constants.ZERO) || Constants.equalsInteger(workorder.getType(),Constants.ONE)
            || Constants.equalsInteger(workorder.getType(),Constants.TWO) || Constants.equalsInteger(workorder.getType(),Constants.THREE)
        || Objects.isNull(workorder.getTypeId())
        || Objects.isNull(workorder.getLocaltionId())
        || !( Constants.equalsInteger(workorder.getType(),Constants.ZERO) || Constants.equalsInteger(workorder.getType(),Constants.ONE) ||Constants.equalsInteger(workorder.getType(),Constants.THREE)
        )){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        //SHE 事件上报
        if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)){
            if(Objects.isNull(workorder.getMemberType())
                    || Objects.isNull(workorder.getLocaltionId())
                    || Objects.isNull(workorder.getOutJiuyi())
                    || (Constants.equalsInteger(workorder.getOutJiuyi(),Constants.ZERO) && Objects.isNull(workorder.getIsYiwushi()))
                    || (Constants.equalsInteger(workorder.getIsYiwushi(),Constants.ZERO) && Objects.isNull(workorder.getIsHurted()))
                    || Objects.isNull(workorder.getCategoryId())
                    || Objects.isNull(workorder.getWorkRelated())
                    || (Constants.equalsInteger(workorder.getMemberType(),Constants.TWO) && StringUtils.isEmpty(workorder.getMemberNames()))
                    || (Constants.equalsInteger(workorder.getMemberType(),Constants.ZERO) && StringUtils.isEmpty(workorder.getMemberQwids()))
                    || (Constants.equalsInteger(workorder.getMemberType(),Constants.ONE) && StringUtils.isEmpty(workorder.getMemberQwids()))
                    || org.apache.commons.lang3.StringUtils.isBlank(workorder.getEventInfo())
            ){
                throw new BusinessException(ResponseStatus.BAD_REQUEST);
@@ -146,15 +235,30 @@
        }
        //跌绊滑 事件上报
        if(Constants.equalsInteger(workorder.getType(),Constants.THREE)){
            if(Objects.isNull(workorder.getTypeId())
                || Objects.isNull(workorder.getLocaltionId())
                || org.apache.commons.lang3.StringUtils.isBlank(workorder.getEventInfo())
            if(org.apache.commons.lang3.StringUtils.isBlank(workorder.getRiskInfo())
            ){
                throw new BusinessException(ResponseStatus.BAD_REQUEST);
            }
        }
        //DCA 事件上报
        if(Constants.equalsInteger(workorder.getType(),Constants.ONE)){
            if(Objects.isNull(workorder.getDcaYesNum())
                || Objects.isNull(workorder.getDcaNoNum())
            ){
                throw new BusinessException(ResponseStatus.BAD_REQUEST);
            }
        }
        //数据库数据校验
        Category typeCategory = categoryMapper.selectById(workorder.getTypeId());
        if(Objects.isNull(typeCategory)){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        Category locationCategory = categoryMapper.selectById(workorder.getLocaltionId());
        if(Objects.isNull(locationCategory)){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        workorder.setLocationName(locationCategory.getNamePath());
    }
    @Override
@@ -174,13 +278,6 @@
                        .last(" limit 1 ")
        );
        if(Objects.nonNull(workorder)){
            //如果是SHE事件上报 SHE涉及人员类型为同事信息 需要查询同事名称
            if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)&&Constants.equalsInteger(workorder.getMemberType(),Constants.ONE)){
                List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted,Constants.ZERO).in(Member::getQwId, Arrays.asList(workorder.getMemberQwids().split(","))));
                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberList)){
                    workorder.setColleague(memberList.stream().map(i->i.getName()).collect(Collectors.joining(",")));
                }
            }
            //查询附件信息
            List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda().eq(Multifile::getIsdeleted,Constants.ZERO)
                    .eq(Multifile::getObjId,workorder).orderByAsc(Multifile::getId));
@@ -195,6 +292,7 @@
        }
        return workorder;
    }
    @Override
    public void deleteById(Integer id) {
@@ -320,6 +418,49 @@
        return workorderMapper.selectCount(wrapper);
    }
    public String getNextCode(Integer type){
        String date = DateUtil.getFomartDate(new Date(),"yyyyMMddHHmmss");
        String key = "S";
        if(Constants.equalsInteger(type,Constants.ONE)){
            key = "D";
        }else if(Constants.equalsInteger(type,Constants.THREE)){
            key = "A";
        }
        String code = redisTemplate.opsForValue().get(key+"_CODE").toString();
        if(StringUtils.isEmpty(code)){
            code = "01";
        }
        redisTemplate.opsForValue().set(key+"_CODE",Integer.valueOf(code)+1);
        return key + date + org.apache.commons.lang3.StringUtils.leftPad(code,2,"0");
    }
    @Override
    public void initializationCode(){
        redisTemplate.opsForValue().set("A_CODE",1);
        redisTemplate.opsForValue().set("S_CODE",1);
        redisTemplate.opsForValue().set("D_CODE",1);
    }
    public void  closeWorkOrder(CloseDTO closeDTO){
        if(Objects.isNull(closeDTO)
        || Objects.isNull(closeDTO.getWorkorderId())
        || org.apache.commons.lang3.StringUtils.isBlank(closeDTO.getInfo())
        || com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(closeDTO.getMultifileList())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        Workorder workorder = workorderMapper.selectById(closeDTO.getWorkorderId());
        if(Objects.isNull(workorder)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到工单数据");
        }
        if(!(Constants.equalsInteger(workorder.getStatus(),Constants.ZERO)
            || Constants.equalsInteger(workorder.getStatus(),Constants.ONE)
            || Constants.equalsInteger(workorder.getStatus(),Constants.TWO))){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"工单状态已流转无法进行操作");
        }
@@ -327,6 +468,9 @@
    }