zhangherong
2025-05-09 8203359e4e68775b3ce0e540837bf3332d970798
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java
@@ -25,10 +25,12 @@
import org.jeecg.modules.eam.request.EamRepairOrderQuery;
import org.jeecg.modules.eam.request.EamRepairOrderRequest;
import org.jeecg.modules.eam.request.EamRepairOrderResponse;
import org.jeecg.modules.eam.request.EamReportRepairQuery;
import org.jeecg.modules.eam.service.IEamEquipmentExtendService;
import org.jeecg.modules.eam.service.IEamEquipmentService;
import org.jeecg.modules.eam.service.IEamRepairOrderService;
import org.jeecg.modules.eam.service.IEamReportRepairService;
import org.jeecg.modules.eam.vo.RepairmanRankingVO;
import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness;
import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService;
import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI;
@@ -37,10 +39,7 @@
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;
@@ -82,9 +81,6 @@
    private IFlowTaskService flowTaskService;
    @Resource
    private ISysUserService sysUserService;
    @Resource
    private IEamEquipmentExtendService eamEquipmentExtendService;
    /**
@@ -121,7 +117,7 @@
        eamRepairOrder.setActualStartTime(DateUtils.getNow());
        eamRepairOrder.setIsUseSpare(0);
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        eamRepairOrder.setRepairer(user.getRealname());
        eamRepairOrder.setRepairer(user.getUsername());
        super.save(eamRepairOrder);
        EamEquipment eamEquipment = eamEquipmentService.getById(eamReportRepair.getEquipmentId());
        // 启动维修流程
@@ -150,6 +146,55 @@
    }
    /**
     * 指派
     * @param eamReportRepairQuery
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void assign(EamReportRepairQuery eamReportRepairQuery) {
        EamRepairOrder eamRepairOrder = new EamRepairOrder();
        String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.REPAIR_ORDER_CODE_RULE);
        eamRepairOrder.setRepairCode(codeSeq);
        EamReportRepair eamReportRepair = eamReportRepairService.getById(eamReportRepairQuery.getId());
        eamRepairOrder.setDelFlag(CommonConstant.DEL_FLAG_0);
        eamRepairOrder.setEquipmentId(eamReportRepair.getEquipmentId());
        eamRepairOrder.setRepairStatus(ReportRepairEnum.UNDER_REPAIR.name());
        eamRepairOrder.setActualStartTime(DateUtils.getNow());
        eamRepairOrder.setIsUseSpare(0);
        eamRepairOrder.setRepairer(eamReportRepairQuery.getRepairer());
        super.save(eamRepairOrder);
        EamEquipment eamEquipment = eamEquipmentService.getById(eamReportRepair.getEquipmentId());
        // 启动维修流程
        flowCommonService.initActBusiness("维修工单号:" + codeSeq + ", 设备编号:" + eamEquipment.getEquipmentCode() + "开始维修",
                eamRepairOrder.getId(),
                "IEamRepairOrderService",
                "eam_repair",
                null);
        Map<String, Object> variables = new HashMap<>();
        variables.put("dataId", eamRepairOrder.getId());
        variables.put("organization", "维修工单启动流程");
        variables.put("comment", "维修工单启动流程");
        variables.put("proofreading", true);
        List<String> usernames = new ArrayList<>();
        usernames.add(eamReportRepairQuery.getRepairer());
        variables.put("NextAssignee", usernames);
        Result result = flowDefinitionService.startProcessInstanceByKey("eam_repair", variables);
        if (!result.isSuccess()) {
            super.removeById(eamRepairOrder);
        } else {
            eamReportRepair.setReportStatus(ReportRepairEnum.UNDER_REPAIR.name());
            eamReportRepairService.updateById(eamReportRepair);
            //更新设备维修状态
            eamEquipmentExtendService.updateEquipmentRepairStatus(eamReportRepair.getEquipmentId(), EquipmentRepairStatus.UNDER_REPAIR.name());
        }
    }
    @Override
    public List<RepairmanRankingVO> repairmanRanking(String start, String end) {
        return this.baseMapper.repairmanRanking(start, end);
    }
    /**
     * 流程操作
     *
     * @param request
@@ -160,6 +205,7 @@
    @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("审批的数据已删除,请刷新重试!");
        }
@@ -187,7 +233,7 @@
            throw new JeecgBootException("设备不存在,请检查!");
        }
        ReportRepairEnum status = ReportRepairEnum.getInstance(request.getRepairStatus());
        ReportRepairEnum status = ReportRepairEnum.getInstance(eamRepairOrder.getRepairStatus());
        if (status == null) {
            return null;
        }
@@ -196,30 +242,55 @@
        switch (status) {
            case UNDER_REPAIR:
                //维修中:下一步 判断是否需要备件, 需要备件转设备管理员领用备件, 不需要则转到设备报修员确认维修完成
                if (request.getStatus() == 1) {
                if (request.getIsUseSpare() == 1) {
                    // 需要
                    List<UserSelector> userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getOrgId(), BusinessCodeConst.PCR0004);
                    if (CollectionUtil.isEmpty(userSelectors)) {
                    if (StringUtils.isBlank(equipment.getEquipmentManager())) {
                        throw new JeecgBootException("设备未分配设备管理员,无法进入下级审批!");
                    }
                    values.put("dataId", eamRepairOrder.getId());
                    values.put("organization", "维修工单进入等备件状态");
                    values.put("comment", "维修工单进入等备件状态");
                    values.put("NextAssignee", userSelectors);
                    values.put("status", 1);
                    request.setComment("维修工单进入等备件状态");
                    eamRepairOrder.setRepairStatus(ReportRepairEnum.WAIT_SPARES.name());
                    eamRepairOrder.setIsUseSpare(1);
                    if (StringUtils.isBlank(eamRepairOrder.getSparePartDescription())) {
                        values.put("dataId", eamRepairOrder.getId());
                        values.put("organization", "维修工单进入等备件状态");
                        values.put("comment", "维修工单进入等备件状态");
                        values.put("NextAssignee", Arrays.asList(equipment.getEquipmentManager().split(",")));
                        values.put("status", 1);
                        request.setComment("维修工单进入等备件状态");
                        eamRepairOrder.setRepairStatus(ReportRepairEnum.WAIT_SPARES.name());
                        eamReportRepair.setReportStatus(ReportRepairEnum.WAIT_SPARES.name());
                        eamRepairOrder.setIsUseSpare(1);
                    } else {
                        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 {
                    // 不需要
                    EamReportRepair eamReportRepair = eamReportRepairService.getById(eamRepairOrder.getReportId());
                    values.put("dataId", eamRepairOrder.getId());
                    values.put("organization", "维修工单进入报修员确认阶段");
                    values.put("comment", "维修工单进入报修员确认阶段");
                    values.put("NextAssignee", eamReportRepair.getCreateBy());
                    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());
                    eamRepairOrder.setIsUseSpare(0);
@@ -243,22 +314,23 @@
                values.put("dataId", eamRepairOrder.getId());
                values.put("organization", "维修工单进入维修员继续维修阶段");
                values.put("comment", "维修工单进入维修员继续维修阶段");
                values.put("NextAssignee", eamRepairOrder.getRepairer());
                values.put("NextAssignee", Arrays.asList(eamRepairOrder.getRepairer().split(",")));
                values.put("status", 0);
                request.setComment("维修工单进入维修员继续维修阶段");
                eamRepairOrder.setRepairStatus(ReportRepairEnum.UNDER_REPAIR.name());
                eamReportRepair.setReportStatus(ReportRepairEnum.UNDER_REPAIR.name());
                eamRepairOrder.setSparePartDescription(request.getSparePartDescription());
                break;
            case WAIT_CONFIRM:
                // 待确认, 维修员维修完成,报修人确认结束流程
                EamReportRepair eamReportRepair = eamReportRepairService.getById(eamRepairOrder.getReportId());
                values.put("dataId", eamRepairOrder.getId());
                values.put("organization", "维修工单流程结束");
                values.put("comment", "维修工单流程结束");
                values.put("NextAssignee", eamReportRepair.getCreateBy());
                values.put("NextAssignee", Arrays.asList(eamReportRepair.getCreateBy().split(",")));
                values.put("status", 0);
                request.setComment("维修工单进入报修员确认阶段");
                eamRepairOrder.setRepairStatus(ReportRepairEnum.COMPLETE.name());
                eamReportRepair.setReportStatus(ReportRepairEnum.COMPLETE.name());
                eamRepairOrder.setActualEndTime(new Date());
                //更新设备维修状态
                eamEquipmentExtendService.updateEquipmentRepairStatus(eamReportRepair.getEquipmentId(), EquipmentRepairStatus.NORMAL.name());
@@ -273,6 +345,8 @@
        }
        //保存工单
        this.baseMapper.updateById(eamRepairOrder);
        // 同步更新报修表状态
        eamReportRepairService.updateById(eamReportRepair);
        return eamRepairOrder;
    }