zhangherong
2025-06-07 740cecb56b03ec74dd6a9f0602f72ee891a922e8
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java
@@ -41,7 +41,10 @@
import org.jeecg.modules.flowable.service.IFlowTaskService;
import org.jeecg.modules.mdc.util.DateUtils;
import org.jeecg.modules.system.service.ISysBusinessCodeRuleService;
import org.jeecg.modules.system.service.ISysUserService;
import org.jeecg.modules.system.vo.UserSelector;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -49,6 +52,7 @@
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
/**
 * @Description: 维修工单
@@ -84,6 +88,9 @@
    @Resource
    private IEamEquipmentExtendService eamEquipmentExtendService;
    @Autowired
    private ISysUserService sysUserService;
    /**
     * 分页列表
@@ -159,9 +166,12 @@
        String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.REPAIR_ORDER_CODE_RULE);
        eamRepairOrder.setRepairCode(codeSeq);
        EamReportRepair eamReportRepair = eamReportRepairService.getById(eamRepairOrder.getReportId());
        if(eamReportRepair == null){
            throw new JeecgBootException("故障报修不存在,请刷新重试!");
        }
        eamRepairOrder.setDelFlag(CommonConstant.DEL_FLAG_0);
        eamRepairOrder.setEquipmentId(eamReportRepair.getEquipmentId());
        eamRepairOrder.setRepairStatus(ReportRepairEnum.UNDER_INTERNAL_REPAIR.name());
        eamRepairOrder.setRepairStatus(ReportRepairEnum.WAIT_INTERNAL_CONFIRM.name());
        eamRepairOrder.setActualStartTime(DateUtils.getNow());
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        eamRepairOrder.setRepairer(user.getUsername());
@@ -185,7 +195,7 @@
        if (!result.isSuccess()) {
            super.removeById(eamRepairOrder);
        } else {
            eamReportRepair.setReportStatus(ReportRepairEnum.UNDER_INTERNAL_REPAIR.name());
            eamReportRepair.setReportStatus(ReportRepairEnum.WAIT_INTERNAL_CONFIRM.name());
            eamReportRepairService.updateById(eamReportRepair);
            //更新设备维修状态
            eamEquipmentExtendService.updateEquipmentRepairStatus(eamReportRepair.getEquipmentId(), EquipmentRepairStatus.UNDER_REPAIR.name());
@@ -203,9 +213,12 @@
        String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.REPAIR_ORDER_CODE_RULE);
        eamRepairOrder.setRepairCode(codeSeq);
        EamReportRepair eamReportRepair = eamReportRepairService.getById(eamReportRepairQuery.getId());
        if(eamReportRepair == null){
            throw new JeecgBootException("故障报修不存在,请刷新重试!");
        }
        eamRepairOrder.setDelFlag(CommonConstant.DEL_FLAG_0);
        eamRepairOrder.setEquipmentId(eamReportRepair.getEquipmentId());
        eamRepairOrder.setRepairStatus(ReportRepairEnum.UNDER_INTERNAL_REPAIR.name());
        eamRepairOrder.setRepairStatus(ReportRepairEnum.WAIT_INTERNAL_CONFIRM.name());
        eamRepairOrder.setActualStartTime(DateUtils.getNow());
        eamRepairOrder.setRepairer(eamReportRepairQuery.getRepairer());
        super.save(eamRepairOrder);
@@ -228,7 +241,7 @@
        if (!result.isSuccess()) {
            super.removeById(eamRepairOrder);
        } else {
            eamReportRepair.setReportStatus(ReportRepairEnum.UNDER_INTERNAL_REPAIR.name());
            eamReportRepair.setReportStatus(ReportRepairEnum.WAIT_INTERNAL_CONFIRM.name());
            eamReportRepairService.updateById(eamReportRepair);
            //更新设备维修状态
            eamEquipmentExtendService.updateEquipmentRepairStatus(eamReportRepair.getEquipmentId(), EquipmentRepairStatus.UNDER_REPAIR.name());
@@ -245,10 +258,13 @@
    @Transactional(rollbackFor = Exception.class)
    @EquipmentHistoryLog(operationTag = EquipmentOperationTagEnum.REPAIRED, businessTable = "eam_repair_order")
    public EamRepairOrder perform(EamRepairOrderRequest request) {
        EamRepairOrder eamRepairOrder = this.baseMapper.selectById(request.getId());
        EamReportRepair eamReportRepair = eamReportRepairService.getById(eamRepairOrder.getReportId());
        if (eamRepairOrder == null) {
            throw new JeecgBootException("审批的数据已删除,请刷新重试!");
        EamRepairOrder order = this.baseMapper.selectById(request.getId());
        if (order == null) {
            throw new JeecgBootException("维修工单不存在,请刷新重试!");
        }
        EamReportRepair eamReportRepair = eamReportRepairService.getById(order.getReportId());
        if (eamReportRepair == null) {
            throw new JeecgBootException("故障报修不存在,请刷新重试!");
        }
        // 获取当前登录用户
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
@@ -274,82 +290,195 @@
            throw new JeecgBootException("设备不存在,请检查!");
        }
        ReportRepairEnum status = ReportRepairEnum.getInstance(eamRepairOrder.getRepairStatus());
        ReportRepairEnum status = ReportRepairEnum.getInstance(order.getRepairStatus());
        if (status == null) {
            return null;
            throw new JeecgBootException("工单状态不合法,请检查!");
        }
        //流程变量
        Map<String, Object> values = new HashMap<>();
        List<UserSelector> userSelectors;
        List<String> userApprovalList;
        switch (status) {
            case UNDER_INTERNAL_REPAIR:
                //维修中:下一步 判断是否需要备件, 需要备件转设备管理员领用备件, 不需要则转到设备报修员确认维修完成
                if (request.getIsUseSpare() == 1) {
                    // 需要
                    if (StringUtils.isBlank(equipment.getEquipmentManager())) {
                        throw new JeecgBootException("设备未分配设备管理员,无法进入下级审批!");
                    }
                        values.put("dataId", eamRepairOrder.getId());
                        values.put("organization", "维修工单进入报修员确认阶段");
                        values.put("comment", "维修工单进入报修员确认阶段");
                        values.put("NextAssignee", Arrays.asList(eamReportRepair.getCreateBy().split(",")));
                        request.setComment("维修工单进入等备件状态");
                        eamRepairOrder.setRepairStatus(ReportRepairEnum.WAIT_CONFIRM.name());
                        eamReportRepair.setReportStatus(ReportRepairEnum.WAIT_CONFIRM.name());
                        eamRepairOrder.setFaultReason(request.getFaultReason());
                        eamRepairOrder.setRepairDescription(request.getRepairDescription());
                        // 处理附件
                        if (CollectionUtil.isNotEmpty(request.getImageFilesResult())) {
                            List<FileUploadResult> fileUploadResultList = request.getImageFilesResult();
                            ObjectMapper mapper = new ObjectMapper();
                            try {
                                String referenceFile = mapper.writeValueAsString(fileUploadResultList);
                                eamRepairOrder.setImageFiles(referenceFile);
                            } catch (JsonProcessingException e) {
                                log.error("JSON转换失败:" + e.getMessage(), e);
                            }
                        }
                        //更新设备维修状态
                        eamEquipmentExtendService.updateEquipmentRepairStatus(eamReportRepair.getEquipmentId(), EquipmentRepairStatus.WAIT_CONFIRM.name());
                } else {
                    // 不需要
                    values.put("dataId", eamRepairOrder.getId());
                    values.put("organization", "维修工单进入报修员确认阶段");
                    values.put("comment", "维修工单进入报修员确认阶段");
                    values.put("NextAssignee", Arrays.asList(eamReportRepair.getCreateBy().split(",")));
                    values.put("status", 0);
                    request.setComment("维修工单进入报修员确认阶段");
                    eamRepairOrder.setRepairStatus(ReportRepairEnum.WAIT_CONFIRM.name());
                    eamReportRepair.setReportStatus(ReportRepairEnum.WAIT_CONFIRM.name());
                    eamRepairOrder.setFaultReason(request.getFaultReason());
                    eamRepairOrder.setRepairDescription(request.getRepairDescription());
                    // 处理附件
                    if (CollectionUtil.isNotEmpty(request.getImageFilesResult())) {
                        List<FileUploadResult> fileUploadResultList = request.getImageFilesResult();
                        ObjectMapper mapper = new ObjectMapper();
                        try {
                            String referenceFile = mapper.writeValueAsString(fileUploadResultList);
                            eamRepairOrder.setImageFiles(referenceFile);
                        } catch (JsonProcessingException e) {
                            log.error("JSON转换失败:" + e.getMessage(), e);
                        }
                    }
                    //更新设备维修状态
                    eamEquipmentExtendService.updateEquipmentRepairStatus(eamReportRepair.getEquipmentId(), EquipmentRepairStatus.WAIT_CONFIRM.name());
            case WAIT_INTERNAL_CONFIRM:
                order.setRepairConfirm(request.getRepairConfirm());
                order.setRepairConfirmComment(request.getRepairConfirmComment());
                order.setRepairConfirmTime(new Date());
                values.put("dataId", order.getId());
                if(StringUtils.isNotBlank(request.getRepairConfirmComment())){
                    values.put("organization", request.getRepairConfirmComment());
                    values.put("comment", request.getRepairConfirmComment());
                    request.setComment(request.getRepairConfirmComment());
                }else {
                    values.put("organization", "维修工单维修人确认完成");
                    values.put("comment", "维修工单维修人确认完成");
                    request.setComment("维修工单维修人确认完成");
                }
                if(CommonConstant.STATUS_1.equals(request.getRepairConfirm())) {
                    //可内部维修  维修人进行维修
                    values.put("NextAssignee", Arrays.asList(order.getRepairer().split(",")));
                    order.setRepairStatus(ReportRepairEnum.UNDER_INTERNAL_REPAIR.name());
                    eamReportRepair.setReportStatus(ReportRepairEnum.UNDER_INTERNAL_REPAIR.name());
                }else {
                    //提交机动办维修,车间管理员确认
                    userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getOrgId(), BusinessCodeConst.PCR0003);
                    if (CollectionUtil.isEmpty(userSelectors)) {
                        throw new JeecgBootException("设备未分配给班组长,无法进入下级审批!");
                    }
                    userApprovalList = userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
                    values.put("NextAssignee", userApprovalList);
                    order.setRepairStatus(ReportRepairEnum.WAIT_LEADER_CONFIRM.name());
                    eamReportRepair.setReportStatus(ReportRepairEnum.WAIT_LEADER_CONFIRM.name());
                }
                break;
            case UNDER_INTERNAL_REPAIR:
                // 内部维修
                values.put("dataId", order.getId());
                values.put("organization", "维修工单维修完成待操作工确认");
                values.put("comment", "维修工单维修完成待操作工确认");
                values.put("NextAssignee", Arrays.asList(eamReportRepair.getCreateBy().split(",")));
                request.setComment("维修工单维修完成待操作工确认");
                order.setRepairStatus(ReportRepairEnum.WAIT_CONFIRM.name());
                eamReportRepair.setReportStatus(ReportRepairEnum.WAIT_CONFIRM.name());
                order.setFaultReason(request.getFaultReason());
                order.setRepairDescription(request.getRepairDescription());
                order.setActualEndTime(new Date());
                // 处理附件
                if (CollectionUtil.isNotEmpty(request.getImageFilesResult())) {
                    List<FileUploadResult> fileUploadResultList = request.getImageFilesResult();
                    ObjectMapper mapper = new ObjectMapper();
                    try {
                        String referenceFile = mapper.writeValueAsString(fileUploadResultList);
                        order.setImageFiles(referenceFile);
                    } catch (JsonProcessingException e) {
                        log.error("JSON转换失败:" + e.getMessage(), e);
                    }
                }
                //更新设备维修状态
                eamEquipmentExtendService.updateEquipmentRepairStatus(eamReportRepair.getEquipmentId(), EquipmentRepairStatus.WAIT_CONFIRM.name());
                break;
            case WAIT_LEADER_CONFIRM:
                order.setLeaderConfirm(request.getLeaderConfirm());
                order.setLeaderConfirmComment(request.getLeaderConfirmComment());
                order.setLeaderUser(user.getUsername());
                order.setLeaderConfirmTime(new Date());
                values.put("dataId", order.getId());
                if(StringUtils.isNotBlank(request.getLeaderConfirmComment())){
                    values.put("organization", request.getLeaderConfirmComment());
                    values.put("comment", request.getLeaderConfirmComment());
                    request.setComment(request.getLeaderConfirmComment());
                }else {
                    values.put("organization", "维修工单领导确认完成");
                    values.put("comment", "维修工单领导确认完成");
                    request.setComment("维修工单领导确认完成");
                }
                if(CommonConstant.STATUS_1.equals(request.getLeaderConfirm())) {
                    //驳回 可内部维修  维修人进行维修
                    values.put("NextAssignee", Arrays.asList(order.getRepairer().split(",")));
                    order.setRepairStatus(ReportRepairEnum.UNDER_INTERNAL_REPAIR.name());
                    eamReportRepair.setReportStatus(ReportRepairEnum.UNDER_INTERNAL_REPAIR.name());
                }else {
                    //通过 提交机动办维修
                    userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getOrgId(), BusinessCodeConst.PCR0006);
                    if (CollectionUtil.isEmpty(userSelectors)) {
                        throw new JeecgBootException("设备未分配给公司管理员,无法进入下级审批!");
                    }
                    userApprovalList = userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
                    values.put("NextAssignee", userApprovalList);
                    order.setRepairStatus(ReportRepairEnum.WAIT_EXTERNAL_CONFIRM.name());
                    eamReportRepair.setReportStatus(ReportRepairEnum.WAIT_EXTERNAL_CONFIRM.name());
                }
                break;
            case WAIT_EXTERNAL_CONFIRM:
                order.setExternalConfirm(request.getExternalConfirm());
                order.setExternalConfirmComment(request.getExternalConfirmComment());
                order.setExternalRepairer(user.getUsername());
                order.setExternalConfirmTime(new Date());
                values.put("dataId", order.getId());
                if(StringUtils.isNotBlank(request.getExternalConfirmComment())){
                    values.put("organization", request.getExternalConfirmComment());
                    values.put("comment", request.getExternalConfirmComment());
                    request.setComment(request.getExternalConfirmComment());
                }else {
                    values.put("organization", "维修工单机动办确认完成");
                    values.put("comment", "维修工单机动办确认完成");
                    request.setComment("维修工单机动办确认完成");
                }
                if(CommonConstant.STATUS_1.equals(request.getLeaderConfirm())) {
                    //机动办可维修  机动办维修人进行维修
                    values.put("NextAssignee", Arrays.asList(order.getExternalRepairer().split(",")));
                    order.setRepairStatus(ReportRepairEnum.UNDER_EXTERNAL_REPAIR.name());
                    eamReportRepair.setReportStatus(ReportRepairEnum.UNDER_EXTERNAL_REPAIR.name());
                }else {
                    //机动办不可维修 进行委外维修
                    values.put("NextAssignee", Arrays.asList(order.getExternalRepairer().split(",")));
                    order.setRepairStatus(ReportRepairEnum.UNDER_OUTSIDE_REPAIR.name());
                    eamReportRepair.setReportStatus(ReportRepairEnum.UNDER_OUTSIDE_REPAIR.name());
                }
                break;
            case UNDER_EXTERNAL_REPAIR:
                // 机动办维修
                values.put("dataId", order.getId());
                values.put("organization", "维修工单机动办维修完成待操作工确认");
                values.put("comment", "维修工单机动办维修完成待操作工确认");
                values.put("NextAssignee", Arrays.asList(eamReportRepair.getCreateBy().split(",")));
                request.setComment("维修工单机动办维修完成待操作工确认");
                order.setRepairStatus(ReportRepairEnum.WAIT_CONFIRM.name());
                eamReportRepair.setReportStatus(ReportRepairEnum.WAIT_CONFIRM.name());
                order.setFaultReason(request.getFaultReason());
                order.setRepairDescription(request.getRepairDescription());
                order.setActualEndTime(new Date());
                // 处理附件
                if (CollectionUtil.isNotEmpty(request.getImageFilesResult())) {
                    List<FileUploadResult> fileUploadResultList = request.getImageFilesResult();
                    ObjectMapper mapper = new ObjectMapper();
                    try {
                        String referenceFile = mapper.writeValueAsString(fileUploadResultList);
                        order.setImageFiles(referenceFile);
                    } catch (JsonProcessingException e) {
                        log.error("JSON转换失败:" + e.getMessage(), e);
                    }
                }
                //更新设备维修状态
                eamEquipmentExtendService.updateEquipmentRepairStatus(eamReportRepair.getEquipmentId(), EquipmentRepairStatus.WAIT_CONFIRM.name());
                break;
            case UNDER_OUTSIDE_REPAIR:
                // 机动办维修
                values.put("dataId", order.getId());
                values.put("organization", "维修工单委外维修完成待操作工确认");
                values.put("comment", "维修工单委外维修完成待操作工确认");
                values.put("NextAssignee", Arrays.asList(eamReportRepair.getCreateBy().split(",")));
                request.setComment("维修工单委外维修完成待操作工确认");
                order.setRepairStatus(ReportRepairEnum.WAIT_CONFIRM.name());
                order.setOutsourcedUser(user.getUsername());
                eamReportRepair.setReportStatus(ReportRepairEnum.WAIT_CONFIRM.name());
                order.setFaultReason(request.getFaultReason());
                order.setRepairDescription(request.getRepairDescription());
                order.setActualEndTime(new Date());
                // 处理附件
                if (CollectionUtil.isNotEmpty(request.getImageFilesResult())) {
                    List<FileUploadResult> fileUploadResultList = request.getImageFilesResult();
                    ObjectMapper mapper = new ObjectMapper();
                    try {
                        String referenceFile = mapper.writeValueAsString(fileUploadResultList);
                        order.setImageFiles(referenceFile);
                    } catch (JsonProcessingException e) {
                        log.error("JSON转换失败:" + e.getMessage(), e);
                    }
                }
                //更新设备维修状态
                eamEquipmentExtendService.updateEquipmentRepairStatus(eamReportRepair.getEquipmentId(), EquipmentRepairStatus.WAIT_CONFIRM.name());
                break;
            case WAIT_CONFIRM:
                // 待确认, 维修员维修完成,报修人确认结束流程
                values.put("dataId", eamRepairOrder.getId());
                values.put("dataId", order.getId());
                values.put("organization", "维修工单流程结束");
                values.put("comment", "维修工单流程结束");
                values.put("NextAssignee", Arrays.asList(eamReportRepair.getCreateBy().split(",")));
                values.put("status", 0);
                request.setComment("维修工单进入报修员确认阶段");
                eamRepairOrder.setRepairStatus(ReportRepairEnum.COMPLETE.name());
                request.setComment("维修工单流程结束");
                order.setRepairStatus(ReportRepairEnum.COMPLETE.name());
                eamReportRepair.setReportStatus(ReportRepairEnum.COMPLETE.name());
                eamRepairOrder.setActualEndTime(new Date());
                order.setConfirmComment(request.getConfirmComment());
                order.setConfirmTime(new Date());
                order.setConfirmer(user.getUsername());
                //更新设备维修状态
                eamEquipmentExtendService.updateEquipmentRepairStatus(eamReportRepair.getEquipmentId(), EquipmentRepairStatus.NORMAL.name());
                break;
@@ -362,10 +491,10 @@
            throw new JeecgBootException("审批失败,请刷新查看!");
        }
        //保存工单
        this.baseMapper.updateById(eamRepairOrder);
        this.baseMapper.updateById(order);
        // 同步更新报修表状态
        eamReportRepairService.updateById(eamReportRepair);
        return eamRepairOrder;
        return order;
    }
    @Override