From 40bf019f0b348378385ed0a819b5b06e1708d558 Mon Sep 17 00:00:00 2001 From: lyh <925863403@qq.com> Date: 星期六, 09 八月 2025 00:19:37 +0800 Subject: [PATCH] 工作流代码 --- lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java | 669 ++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 487 insertions(+), 182 deletions(-) diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java index 0f997e7..88c86f4 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -23,6 +24,7 @@ import org.jeecg.modules.eam.constant.BusinessCodeConst; import org.jeecg.modules.eam.constant.EamMaintenanceStandardDetailCategory; import org.jeecg.modules.eam.constant.MaintenanceStandardStatusEnum; +import org.jeecg.modules.eam.constant.SecondMaintenanceStatusEnum; import org.jeecg.modules.eam.entity.EamEquipment; import org.jeecg.modules.eam.entity.EamEquipmentExtend; import org.jeecg.modules.eam.entity.EamMaintenanceStandard; @@ -39,6 +41,7 @@ import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService; import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI; import org.jeecg.modules.flowable.apithird.service.FlowCommonService; +import org.jeecg.modules.flowable.domain.vo.FlowTaskVo; import org.jeecg.modules.flowable.service.IFlowDefinitionService; import org.jeecg.modules.flowable.service.IFlowTaskService; import org.jeecg.modules.system.entity.BaseFactory; @@ -183,7 +186,7 @@ //鍒犻櫎鏍囪 entity.setDelFlag(CommonConstant.DEL_FLAG_0); //閲嶅鎬ф牎楠� - EamMaintenanceStandard exist = checkDuplicate(entity.getEquipmentId(), entity.getMaintenanceCategory(), MaintenanceStandardStatusEnum.WAIT_SUBMIT.name()); + EamMaintenanceStandard exist = checkDuplicate(entity.getEquipmentId(), entity.getMaintenanceCategory(), MaintenanceStandardStatusEnum.ABOLISH.name()); if (exist != null) { throw new JeecgBootException("璁惧鏍囧噯宸插瓨鍦紝涓嶈兘閲嶅娣诲姞锛�"); } @@ -259,7 +262,7 @@ //鍒犻櫎鏍囪 newEntity.setDelFlag(CommonConstant.DEL_FLAG_0); //閲嶅鎬ф牎楠� - EamMaintenanceStandard exist = checkDuplicate(newEntity.getEquipmentId(), newEntity.getMaintenanceCategory(), MaintenanceStandardStatusEnum.WAIT_SUBMIT.name()); + EamMaintenanceStandard exist = checkDuplicate(newEntity.getEquipmentId(), newEntity.getMaintenanceCategory(), MaintenanceStandardStatusEnum.ABOLISH.name()); if (exist != null) { throw new JeecgBootException("璁惧鏍囧噯宸插瓨鍦紝涓嶈兘閲嶅娣诲姞锛�"); } @@ -285,7 +288,8 @@ queryWrapper.eq(EamMaintenanceStandard::getEquipmentId, equipmentId); queryWrapper.eq(EamMaintenanceStandard::getMaintenanceCategory, maintenanceCategory); queryWrapper.eq(EamMaintenanceStandard::getDelFlag, CommonConstant.DEL_FLAG_0); - queryWrapper.eq(EamMaintenanceStandard::getStandardStatus, standardStatus); + queryWrapper.ne(EamMaintenanceStandard::getStandardStatus, standardStatus); + queryWrapper.ne(EamMaintenanceStandard::getStandardStatus,MaintenanceStandardStatusEnum.START.name()); queryWrapper.orderByDesc(EamMaintenanceStandard::getStandardVersion); List<EamMaintenanceStandard> list = eamMaintenanceStandardMapper.selectList(queryWrapper); @@ -323,192 +327,374 @@ return eamMaintenanceStandardMapper.selectList(queryWrapper); } + @Override + public EamMaintenanceStandard queryByEquipmentIdAndCategory(String equipmentId, String maintenanceCategory) { + LambdaQueryWrapper<EamMaintenanceStandard> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(EamMaintenanceStandard::getDelFlag, CommonConstant.DEL_FLAG_0); + queryWrapper.eq(EamMaintenanceStandard::getMaintenanceCategory, maintenanceCategory); + queryWrapper.eq(EamMaintenanceStandard::getStandardStatus, MaintenanceStandardStatusEnum.START.name()); + queryWrapper.eq(EamMaintenanceStandard::getEquipmentId, equipmentId); + return eamMaintenanceStandardMapper.selectOne(queryWrapper); + } + /*娴佺▼涓氬姟浠g爜--------------------------寮�濮�*/ - /** - * 娴佺▼鍚姩,淇濆瓨瀵瑰簲鐨勬暟鎹� - * - * @param id - * @return - */ @Override + @Transactional(rollbackFor = Exception.class) public Result<?> saveEamMaintenanceStandardProcess(String id) { - LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - EamMaintenanceStandard maintenanceStandard = this.getById(id); - if (maintenanceStandard == null) { - return Result.error("鏈壘鍒板搴斾繚鍏绘爣鍑�"); + // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛 + LoginUser currentUser = getCurrentUser(); + + // 鏍¢獙淇濆吇鏍囧噯鏄惁瀛樺湪 + EamMaintenanceStandard maintenanceStandard = validateStandardExistence(id); + + // 鏍¢獙鍏宠仈璁惧鏄惁瀛樺湪 + EamEquipment equipment = validateEquipmentExistence(maintenanceStandard.getEquipmentId()); + + // 妫�鏌ユ槸鍚︽槸椹冲洖鍚庨噸鏂版彁浜ょ殑娴佺▼ + FlowMyBusiness flowBusiness = flowMyBusinessService.selectByDataId(maintenanceStandard.getId()); + + if (isReSubmitScenario(flowBusiness)) { + return handleReSubmitScenario(maintenanceStandard, equipment, currentUser, flowBusiness); } - System.out.println("淇濆吇瑙勮寖娴佺▼锛�" + maintenanceStandard.getId()); - flowCommonService.initActBusiness(maintenanceStandard.getStandardName() + "瑙勮寖杩涜娴佺▼瀹℃牳", - maintenanceStandard.getId(), "IEamMaintenanceStandardService", "eam_maintenance_standard", null); - Map<String, Object> variables = new HashMap<>(); - variables.put("dataId", maintenanceStandard.getId()); - variables.put("organization", "淇濆吇瑙勮寖鍚姩娴佺▼"); - variables.put("comment", "淇濆吇瑙勮寖鍚姩娴佺▼"); - variables.put("proofreading", true); - Result result = flowDefinitionService.startProcessInstanceByKey("eam_maintenance_standard", variables); - if (!result.isSuccess()) { - super.removeById(maintenanceStandard.getId()); - } else { - maintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_REPAIR_DIRECTOR.name()); - maintenanceStandard.setDesigner(user.getUsername()); - maintenanceStandard.setDesignTime(new Date()); - eamMaintenanceStandardMapper.updateById(maintenanceStandard); - //鑾峰彇flow鐨勬祦绋嬪疄渚媔d,璁剧疆涓嬩竴姝ョ殑澶勭悊浜哄憳 - List<FlowMyBusiness> businessList = flowMyBusinessService.list( - new QueryWrapper<FlowMyBusiness>() - .eq("data_id", maintenanceStandard.getId()) - ); - if (businessList.isEmpty()) { - return Result.error("娴佺▼璁板綍涓嶅瓨鍦�"); - } - FlowMyBusiness flowMyBusiness = businessList.get(0); - EamEquipment eamEquipment = eamEquipmentService.getById(maintenanceStandard.getEquipmentId()); - List<UserSelector> userSelectorList = sysUserService.selectOperatorList(eamEquipment.getEquipmentCode(), eamEquipment.getFactoryOrgCode(), BusinessCodeConst.PCR0008); - if (!CollectionUtils.isEmpty(userSelectorList)) { - List<String> usernameList = userSelectorList.stream().map(UserSelector::getUsername).collect(Collectors.toList()); - flowMyBusiness.setTodoUsers(JSON.toJSONString(usernameList)); - flowMyBusinessService.updateById(flowMyBusiness); - } + + // 澶勭悊棣栨鍚姩娴佺▼ + return handleFirstSubmitScenario(maintenanceStandard, equipment, currentUser); + } + + /** + * 鍒ゆ柇鏄惁鏄┏鍥炲悗閲嶆柊鎻愪氦鐨勫満鏅� + */ + private boolean isReSubmitScenario(FlowMyBusiness flowBusiness) { + return flowBusiness != null && + MaintenanceStandardStatusEnum.WAIT_SUBMIT.name().equals(flowBusiness.getTaskNameId()); + } + + /** + * 澶勭悊椹冲洖鍚庨噸鏂版彁浜ょ殑娴佺▼ + */ + private Result<?> handleReSubmitScenario(EamMaintenanceStandard maintenanceStandard, + EamEquipment equipment, + LoginUser currentUser, + FlowMyBusiness flowBusiness) { + // 鏇存柊寰呭姙缁翠慨宸� + updateTodoMaintenanceWorkers(flowBusiness, equipment); + + // 璁ら浠诲姟 + claimTaskOrFail(flowBusiness.getTaskId(), currentUser); + + // 鏋勫缓娴佺▼鍙橀噺 + Map<String, Object> variables = buildProcessVariables(maintenanceStandard.getId(), "淇濆吇瑙勮寖鍐嶆鍚姩娴佺▼"); + + // 璁剧疆涓嬩竴绾у鎵逛汉(缁翠慨瀹や富浠�) + setNextApprover(variables, equipment, BusinessCodeConst.PCR0008, "缁翠慨瀹や富浠�"); + + // 瀹屾垚褰撳墠浠诲姟锛屾帹杩涙祦绋� + FlowTaskVo taskVo = buildFlowTaskVo(flowBusiness, maintenanceStandard, variables, "淇濆吇瑙勮寖鍐嶆鍚姩娴佺▼"); + Result result = flowTaskService.complete(taskVo); + + // 鏇存柊淇濆吇鏍囧噯鐘舵�� + if (result.isSuccess()) { + updateMaintenanceStandardStatus(maintenanceStandard, currentUser, MaintenanceStandardStatusEnum.WAIT_REPAIR_DIRECTOR); + return Result.ok("淇濆吇瑙勮寖娴佺▼閲嶅惎鎴愬姛"); } + return result; } /** - * 瀹℃壒鎿嶄綔 - * - * @param eamMaintenanceStandardVo - * @return + * 澶勭悊棣栨鎻愪氦鐨勬祦绋� + */ + private Result<?> handleFirstSubmitScenario(EamMaintenanceStandard maintenanceStandard, + EamEquipment equipment, + LoginUser currentUser) { + // 鍒濆鍖栨祦绋嬩笟鍔′俊鎭� + flowCommonService.initActBusiness( + maintenanceStandard.getStandardName() + "瑙勮寖杩涜娴佺▼瀹℃牳", + maintenanceStandard.getId(), + "IEamMaintenanceStandardService", + "eam_maintenance_standard", + null + ); + + // 鏋勫缓娴佺▼鍙橀噺 + Map<String, Object> variables = buildProcessVariables(maintenanceStandard.getId(), "淇濆吇瑙勮寖鍚姩娴佺▼"); + + // 璁剧疆涓嬩竴绾у鎵逛汉(缁翠慨瀹や富浠�) + setNextApprover(variables, equipment, BusinessCodeConst.PCR0008, "缁翠慨瀹や富浠�"); + + // 鍚姩娴佺▼瀹炰緥 + Result result = flowDefinitionService.startProcessInstanceByKey("eam_maintenance_standard", variables); + + // 澶勭悊娴佺▼鍚姩缁撴灉 + if (result.isSuccess()) { + updateMaintenanceStandardStatus(maintenanceStandard, currentUser, MaintenanceStandardStatusEnum.WAIT_REPAIR_DIRECTOR); + validateFlowBusinessRecord(maintenanceStandard.getId()); + } else { + this.removeById(maintenanceStandard.getId()); + } + + return result; + } + + /** + * 瀹℃壒鎿嶄綔 */ @Override - public Result<?> auditEamMaintenanceStandard(EamMaintenanceStandardVo eamMaintenanceStandardVo) { - try { - // 鍙傛暟鏍¢獙 - if (StrUtil.isEmpty(eamMaintenanceStandardVo.getTaskId()) || StrUtil.isEmpty(eamMaintenanceStandardVo.getDataId())) { - return Result.error("鍙傛暟閿欒"); - } - LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - String userId = user.getId(); - eamMaintenanceStandardVo.setAssignee(user.getUsername()); - if (StrUtil.isEmpty(userId)) { - return Result.error("鏈壘鍒板搴旂敤鎴�"); - } + @Transactional(rollbackFor = Exception.class) + public Result<?> auditEamMaintenanceStandard(EamMaintenanceStandardVo vo) { + // 鍩虹鏍¢獙 + EamMaintenanceStandard standard = validateStandardExistence(vo.getDataId()); + LoginUser user = getCurrentUser(); + FlowMyBusiness business = validateFlowBusiness(vo); + validateUserAuthorization(business, user); + claimTaskOrFail(business.getTaskId(), user); - // 鏁版嵁鏌ヨ - EamMaintenanceStandard eamMaintenanceStandard = this.getById(eamMaintenanceStandardVo.getDataId()); - if (eamMaintenanceStandard == null) { - return Result.error("鏈壘鍒板搴斾繚鍏绘爣鍑�"); - } + // 鍑嗗瀹℃壒鎵�闇�鏁版嵁 + EamEquipment equipment = validateEquipmentExistence(standard.getEquipmentId()); + Map<String, Object> variables = new HashMap<>(); - // 2. 鏌ヨ娴佺▼涓氬姟璁板綍锛堝鐞嗙┖缁撴灉锛� - List<FlowMyBusiness> businessList = flowMyBusinessService.list( - new QueryWrapper<FlowMyBusiness>() - .eq("process_instance_id", eamMaintenanceStandardVo.getInstanceId()) - ); - if (businessList.isEmpty()) { - return Result.error("娴佺▼璁板綍涓嶅瓨鍦�"); - } - FlowMyBusiness flowMyBusiness = businessList.get(0); + // 鏍规嵁褰撳墠鐘舵�佸鐞嗗鎵� + MaintenanceStandardStatusEnum status = MaintenanceStandardStatusEnum.getInstance(standard.getStandardStatus()); + if (status == null) { + throw new JeecgBootException("鏃犳晥鐨勪繚鍏绘爣鍑嗙姸鎬�"); + } - // 3. 鏍¢獙鐢ㄦ埛鏄惁涓哄�欓�夊鐞嗕汉 - List<String> todoUsers = JSON.parseArray(flowMyBusiness.getTodoUsers(), String.class); - if (todoUsers == null || !todoUsers.contains(user.getUsername())) { - return Result.error("鐢ㄦ埛鏃犳潈鎿嶄綔姝や换鍔�"); - } + switch (status) { + case WAIT_REPAIR_DIRECTOR: + handleRepairDirectorApproval(vo, standard, equipment, variables); + break; + case WAIT_TECHNICAL_DIRECTOR: + handleTechnicalDirectorApproval(vo, standard, equipment, variables); + break; + default: + throw new JeecgBootException("褰撳墠鐘舵�佷笉鏀寔瀹℃壒鎿嶄綔"); + } - // 4. 璁ら浠诲姟锛堝鐞嗗凡琚棰嗙殑鎯呭喌锛� - String taskId = flowMyBusiness.getTaskId(); - Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); - if (task == null) { - return Result.error("浠诲姟涓嶅瓨鍦ㄦ垨宸插畬鎴�"); - } - if (task.getAssignee() != null && !task.getAssignee().equals(user.getUsername())) { - return Result.error("浠诲姟宸茶浠栦汉璁ら"); - } - taskService.claim(taskId, user.getUsername()); + // 鎻愪氦瀹℃壒缁撴灉 + submitApprovalResult(vo, standard, variables); + return Result.OK("鎿嶄綔鎴愬姛"); + } - // 璁剧疆娴佺▼鍙橀噺 - Map<String, Object> values = setProcessVariables(eamMaintenanceStandard, userId, eamMaintenanceStandardVo); - eamMaintenanceStandardVo.setValues(values); - eamMaintenanceStandardVo.setComment(values.get("comment").toString()); - // 瀹屾垚娴佺▼浠诲姟 - Result result = flowTaskService.complete(eamMaintenanceStandardVo); - if (result.isSuccess()) { - if (eamMaintenanceStandardVo.getRepairManagerApproveResult() != null) { - if (eamMaintenanceStandardVo.getRepairManagerApproveResult().equals("1")) { - List<FlowMyBusiness> newbusinessList = flowMyBusinessService.list( - new QueryWrapper<FlowMyBusiness>() - .eq("process_instance_id", eamMaintenanceStandardVo.getInstanceId())); - FlowMyBusiness newflowMyBusiness = newbusinessList.get(0); - eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_TECHNICAL_DIRECTOR.name()); - //鑾峰彇flow鐨勬祦绋嬪疄渚媔d,璁剧疆涓嬩竴姝ョ殑澶勭悊浜哄憳 - EamMaintenanceStandard maintenanceStandard = this.getById(eamMaintenanceStandardVo.getDataId()); - EamEquipment eamEquipment = eamEquipmentService.getById(maintenanceStandard.getEquipmentId()); - List<UserSelector> userSelectorList = sysUserService.selectOperatorList(eamEquipment.getEquipmentCode(), eamEquipment.getFactoryOrgCode(), BusinessCodeConst.PCR0009); - if (!CollectionUtils.isEmpty(userSelectorList)) { - List<String> usernameList = userSelectorList.stream().map(UserSelector::getUsername).collect(Collectors.toList()); - newflowMyBusiness.setTodoUsers(JSON.toJSONString(usernameList)); - flowMyBusinessService.updateById(newflowMyBusiness); - } - } else { - eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_SUBMIT.name()); - } - eamMaintenanceStandard.setRepairManager(user.getUsername()); - eamMaintenanceStandard.setRepairManagerApproveResult(eamMaintenanceStandardVo.getRepairManagerApproveResult()); - eamMaintenanceStandard.setRepairManagerApproveTime(new Date()); - eamMaintenanceStandard.setRepairManagerApproveComment(eamMaintenanceStandardVo.getComment()); - } - if (eamMaintenanceStandardVo.getTechnicalManagerApproveResult() != null) { - if (eamMaintenanceStandardVo.getTechnicalManagerApproveResult().equals("1")) { - eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.START.name()); - //鍒ゆ柇鏄惁杩涜鍗囩増锛岄�氳繃璁惧缂栧彿銆佷繚鍏诲垎绫汇�佺姸鎬佽繘琛岀瓫閫� - EamMaintenanceStandard maintenanceStandard = this.getById(eamMaintenanceStandardVo.getDataId()); - QueryWrapper<EamMaintenanceStandard> queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("equipment_id", maintenanceStandard.getEquipmentId()); - queryWrapper.eq("maintenance_category", maintenanceStandard.getMaintenanceCategory()); - queryWrapper.eq("standard_status", MaintenanceStandardStatusEnum.START.name()); - List<EamMaintenanceStandard> list = eamMaintenanceStandardMapper.selectList(queryWrapper); - if (!CollectionUtils.isEmpty(list)) { - //浣滃簾鍘熸湁 - for (EamMaintenanceStandard eamMaintenanceStandard1 : list) { - eamMaintenanceStandard1.setStandardStatus(MaintenanceStandardStatusEnum.ABOLISH.name()); - this.updateById(eamMaintenanceStandard1); - } - } - } else { - eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_SUBMIT.name()); - } - eamMaintenanceStandard.setTechnicalManager(user.getUsername()); - eamMaintenanceStandard.setTechnicalManagerApproveResult(eamMaintenanceStandardVo.getTechnicalManagerApproveResult()); - eamMaintenanceStandard.setTechnicalManagerApproveTime(new Date()); - eamMaintenanceStandard.setTechnicalManagerApproveComment(eamMaintenanceStandardVo.getComment()); - } - this.updateById(eamMaintenanceStandard); - } else { - return result; - } - return Result.OK("鎿嶄綔鎴愬姛"); - } catch (Exception e) { - return Result.error("鎿嶄綔澶辫触锛�" + e.getMessage()); + + private LoginUser getCurrentUser() { + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + if (user == null) { + throw new JeecgBootException("鏈幏鍙栧埌鐧诲綍鐢ㄦ埛锛岃閲嶆柊鐧诲綍鍚庡啀璇曪紒"); + } + return user; + } + + private EamMaintenanceStandard validateStandardExistence(String id) { + EamMaintenanceStandard standard = this.getById(id); + if (standard == null) { + throw new JeecgBootException("鏈壘鍒板搴斾繚鍏绘爣鍑�"); + } + return standard; + } + + private EamEquipment validateEquipmentExistence(String equipmentId) { + EamEquipment equipment = eamEquipmentService.getById(equipmentId); + if (equipment == null) { + throw new JeecgBootException("鍏宠仈璁惧涓嶅瓨鍦�"); + } + return equipment; + } + + private FlowMyBusiness validateFlowBusiness(EamMaintenanceStandardVo vo) { + FlowMyBusiness business = flowMyBusinessService.getFlowMyBusiness(vo.getInstanceId(), vo.getTaskId()); + if (business == null) { + throw new JeecgBootException("娴佺▼瀹炰緥涓嶅瓨鍦紝璇峰埛鏂伴噸璇�"); + } + return business; + } + + private void validateUserAuthorization(FlowMyBusiness business, LoginUser user) { + List<String> todoUsers = JSON.parseArray(business.getTodoUsers(), String.class); + if (todoUsers == null || !todoUsers.contains(user.getUsername())) { + throw new JeecgBootException("鐢ㄦ埛鏃犳潈鎿嶄綔姝や换鍔�"); } } - private Map<String, Object> setProcessVariables(EamMaintenanceStandard eamMaintenanceStandard, String userId, EamMaintenanceStandardVo eamMaintenanceStandardVo) { - Map<String, Object> values = new HashMap<>(); - values.put("dataId", eamMaintenanceStandard.getId()); - values.put("assignee", userId); - if (eamMaintenanceStandardVo.getRepairManagerApproveResult() != null) { - values.put("repairManagerApproveResult", eamMaintenanceStandardVo.getRepairManagerApproveResult()); - values.put("organization", eamMaintenanceStandardVo.getRepairManagerApproveComment()); - values.put("comment", eamMaintenanceStandardVo.getRepairManagerApproveComment()); + private void claimTaskOrFail(String taskId, LoginUser user) { + Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); + if (task == null) { + throw new JeecgBootException("浠诲姟涓嶅瓨鍦ㄦ垨宸插畬鎴�"); } - if (eamMaintenanceStandardVo.getTechnicalManagerApproveResult() != null) { - values.put("technicalManagerApproveResult", eamMaintenanceStandardVo.getTechnicalManagerApproveResult()); - values.put("organization", eamMaintenanceStandardVo.getTechnicalManagerApproveComment()); - values.put("comment", eamMaintenanceStandardVo.getTechnicalManagerApproveComment()); + if (task.getAssignee() != null && !task.getAssignee().equals(user.getUsername())) { + throw new JeecgBootException("浠诲姟宸茶浠栦汉璁ら"); } - return values; + taskService.claim(taskId, user.getUsername()); + } + + private Map<String, Object> buildProcessVariables(String dataId, String comment) { + Map<String, Object> vars = new HashMap<>(); + vars.put("dataId", dataId); + vars.put("organization", comment); + vars.put("comment", comment); + vars.put("proofreading", true); + return vars; + } + + private void setNextApprover(Map<String, Object> variables, EamEquipment equipment, + String businessCode, String roleName) { + List<UserSelector> approvers = sysUserService.selectOperatorList( + equipment.getEquipmentCode(), + equipment.getFactoryOrgCode(), + businessCode + ); + if (CollectionUtils.isEmpty(approvers)) { + throw new JeecgBootException("璁惧鏈厤缃�" + roleName); + } + variables.put("NextAssignee", approvers.stream() + .map(UserSelector::getUsername) + .collect(Collectors.toList())); + } + + private void updateTodoMaintenanceWorkers(FlowMyBusiness business, EamEquipment equipment) { + List<UserSelector> maintenanceWorkers = sysUserService.selectOperatorList( + equipment.getEquipmentCode(), + equipment.getFactoryOrgCode(), + BusinessCodeConst.PCR0002 + ); + if (CollectionUtils.isEmpty(maintenanceWorkers)) { + throw new JeecgBootException("璁惧鏈厤缃淮淇伐"); + } + business.setTodoUsers(JSON.toJSONString( + maintenanceWorkers.stream() + .map(UserSelector::getUsername) + .collect(Collectors.toList()) + )); + flowMyBusinessService.updateById(business); + } + + private FlowTaskVo buildFlowTaskVo(FlowMyBusiness business, EamMaintenanceStandard standard, + Map<String, Object> variables, String comment) { + FlowTaskVo taskVo = new FlowTaskVo(); + taskVo.setTaskId(business.getTaskId()); + taskVo.setComment(comment); + taskVo.setInstanceId(business.getProcessInstanceId()); + taskVo.setDataId(standard.getId()); + taskVo.setValues(variables); + return taskVo; + } + + private void updateMaintenanceStandardStatus(EamMaintenanceStandard standard, + LoginUser user, + MaintenanceStandardStatusEnum status) { + standard.setStandardStatus(status.name()); + if (MaintenanceStandardStatusEnum.WAIT_REPAIR_DIRECTOR.equals(status)) { + standard.setDesigner(user.getUsername()); + standard.setDesignTime(new Date()); + } + this.updateById(standard); + } + + private void validateFlowBusinessRecord(String standardId) { + List<FlowMyBusiness> businessList = flowMyBusinessService.list( + new QueryWrapper<FlowMyBusiness>().eq("data_id", standardId) + ); + if (CollectionUtils.isEmpty(businessList)) { + throw new JeecgBootException("娴佺▼璁板綍涓嶅瓨鍦�"); + } + } + + private void handleRepairDirectorApproval(EamMaintenanceStandardVo vo, + EamMaintenanceStandard standard, + EamEquipment equipment, + Map<String, Object> variables) { + // 璁剧疆鍩虹娴佺▼鍙橀噺 + variables.putAll(buildProcessVariables(standard.getId(), + StrUtil.blankToDefault(vo.getRepairManagerApproveComment(), ""))); + variables.put("repairManagerApproveResult", vo.getRepairManagerApproveResult()); + + LoginUser user = getCurrentUser(); + vo.setAssignee(user.getUsername()); + vo.setComment(vo.getRepairManagerApproveComment()); + if ("2".equals(vo.getRepairManagerApproveResult())) { + // 椹冲洖 + UpdateWrapper<EamMaintenanceStandard> updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id", standard.getId()); + updateWrapper.set("standard_status", MaintenanceStandardStatusEnum.WAIT_SUBMIT.name()); + updateWrapper.set("designer", null); + updateWrapper.set("design_time", null); + this.update(updateWrapper); + } else { + // 閫氳繃 + setNextApprover(variables, equipment, BusinessCodeConst.PCR0009, "鐢熶骇璁惧鎶�鏈富绠�"); + standard.setRepairManager(user.getUsername()); + standard.setRepairManagerApproveResult(vo.getRepairManagerApproveResult()); + standard.setRepairManagerApproveTime(new Date()); + standard.setRepairManagerApproveComment(vo.getRepairManagerApproveComment()); + standard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_TECHNICAL_DIRECTOR.name()); + } + } + + private void handleTechnicalDirectorApproval(EamMaintenanceStandardVo vo, + EamMaintenanceStandard standard, + EamEquipment equipment, + Map<String, Object> variables) { + // 璁剧疆鍩虹娴佺▼鍙橀噺 + variables.putAll(buildProcessVariables(standard.getId(), + StrUtil.blankToDefault(vo.getTechnicalManagerApproveComment(), ""))); + variables.put("technicalManagerApproveResult", vo.getTechnicalManagerApproveResult()); + + LoginUser user = getCurrentUser(); + vo.setAssignee(user.getUsername()); + vo.setComment(vo.getTechnicalManagerApproveComment()); + if ("2".equals(vo.getTechnicalManagerApproveResult())) { + // 椹冲洖 + standard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_REPAIR_DIRECTOR.name()); + standard.setRepairManager(null); + standard.setRepairManagerApproveResult(null); + standard.setRepairManagerApproveTime(null); + standard.setRepairManagerApproveComment(null); + setNextApprover(variables, equipment, BusinessCodeConst.PCR0008, "缁翠慨瀹や富浠�"); + } else { + // 閫氳繃 + standard.setTechnicalManager(user.getUsername()); + standard.setTechnicalManagerApproveResult(vo.getTechnicalManagerApproveResult()); + standard.setTechnicalManagerApproveTime(new Date()); + standard.setTechnicalManagerApproveComment(vo.getTechnicalManagerApproveComment()); + standard.setStandardStatus(MaintenanceStandardStatusEnum.START.name()); + } + } + + private void submitApprovalResult(EamMaintenanceStandardVo vo, + EamMaintenanceStandard standard, + Map<String, Object> variables) { + vo.setValues(variables); + Result result = flowTaskService.complete(vo); + if (!result.isSuccess()) { + throw new JeecgBootException("瀹℃壒娴佺▼鎻愪氦澶辫触: " + result.getMessage()); + } + + // 鏇存柊淇濆吇鏍囧噯 + this.updateById(standard); + + // 鎶�鏈富绠″鎵归�氳繃鍚庯紝浣滃簾鏃х増鏈� + if (MaintenanceStandardStatusEnum.WAIT_TECHNICAL_DIRECTOR.name().equals(standard.getStandardStatus()) + && "1".equals(vo.getTechnicalManagerApproveResult())) { + abolishPreviousStandards(standard); + } + } + + private void abolishPreviousStandards(EamMaintenanceStandard current) { + List<EamMaintenanceStandard> previous = eamMaintenanceStandardMapper.selectList( + new QueryWrapper<EamMaintenanceStandard>() + .ne("id", current.getId()) + .eq("equipment_id", current.getEquipmentId()) + .eq("maintenance_category", current.getMaintenanceCategory()) + .eq("standard_status", MaintenanceStandardStatusEnum.START.name()) + ); + + if (!CollectionUtils.isEmpty(previous)) { + previous.forEach(standard -> { + standard.setStandardStatus(MaintenanceStandardStatusEnum.ABOLISH.name()); + }); + this.updateBatchById(previous); + } } @@ -531,8 +717,9 @@ @Override public List<String> flowCandidateUsernamesOfTask(String taskNameId, Map<String, Object> values) { - //涓氬姟鏄惁骞查娴佺▼锛屼笟鍔″共棰勶紝娴佺▼骞查锛屾寚瀹氫汉鍛樿繘琛屽鐞� - return null; + //鑾峰彇涓嬩竴姝ュ鐞嗕汉 + Object object = values.get("NextAssignee"); + return (List<String>) object; } /*娴佺▼涓氬姟浠g爜--------------------------缁撴潫*/ @@ -545,7 +732,11 @@ */ @Override @Transactional(rollbackFor = Exception.class) - public Result<?> importPointInspectionExcel(MultipartFile file) { + public Result<?> importPointInspectionExcel(MultipartFile file,String id) { + EamMaintenanceStandard eamMaintenanceStandardOld=new EamMaintenanceStandard(); + if (StrUtil.isNotEmpty(id)){ + eamMaintenanceStandardOld=eamMaintenanceStandardMapper.selectById(id); + } try (Workbook workbook = WorkbookFactory.create(file.getInputStream())) { Sheet sheet = workbook.getSheetAt(0); @@ -560,13 +751,58 @@ eamMaintenanceStandard.setStandardName(name); - // 妫�鏌ラ噸澶� - EamMaintenanceStandard exist = checkDuplicate(eamMaintenanceStandard.getEquipmentId(), - eamMaintenanceStandard.getMaintenanceCategory(), MaintenanceStandardStatusEnum.START.name()); - if (exist != null) { - return Result.error(name + ": 璁惧鏍囧噯宸插瓨鍦紝涓嶈兘閲嶅娣诲姞"); + // 妫�鏌ラ噸澶�,鍙鍏ユ牎楠岋紝鍗囩増涓嶆牎楠� + if (StrUtil.isEmpty(id)){ + EamMaintenanceStandard exist = checkDuplicate(eamMaintenanceStandard.getEquipmentId(), + eamMaintenanceStandard.getMaintenanceCategory(), MaintenanceStandardStatusEnum.ABOLISH.name()); + if (exist != null) { + return Result.error(name + ": 璁惧鏍囧噯宸插瓨鍦紝涓嶈兘閲嶅娣诲姞"); + } } - + if (StrUtil.isNotEmpty(id)){ + if (eamMaintenanceStandardOld.getEquipmentId().equals(eamMaintenanceStandard.getEquipmentId()) + &&eamMaintenanceStandardOld.getMaintenanceCategory().equals(eamMaintenanceStandard.getMaintenanceCategory())) { + //鍒ゆ柇鏄惁鐜版湁寰呮彁浜ゆ暟鎹� + EamMaintenanceStandard maintenanceStandard=eamMaintenanceStandardMapper.selectOne( + new QueryWrapper<EamMaintenanceStandard>().eq("equipment_id",eamMaintenanceStandard.getEquipmentId()) + .eq("maintenance_category",eamMaintenanceStandard.getMaintenanceCategory()) + .eq("standard_status",MaintenanceStandardStatusEnum.WAIT_SUBMIT.name()) + .eq("del_flag", CommonConstant.DEL_FLAG_0)); + if (maintenanceStandard != null) { + //鍒犻櫎鍘熸湁寰呮彁浜� + eamMaintenanceStandardMapper.deleteById(maintenanceStandard.getId()); + } + //鏌ヨ鍦ㄦ祦绋嬩腑鐨勬暟鎹� + List<EamMaintenanceStandard> eamMaintenanceStandardList=eamMaintenanceStandardMapper.selectList( + new QueryWrapper<EamMaintenanceStandard>().eq("equipment_id",eamMaintenanceStandard.getEquipmentId()) + .eq("maintenance_category",eamMaintenanceStandard.getMaintenanceCategory()) + .eq("del_flag", CommonConstant.DEL_FLAG_0) + .and(i->i. + eq("standard_status",MaintenanceStandardStatusEnum.WAIT_REPAIR_DIRECTOR.name()) + .or() + .eq("standard_status",MaintenanceStandardStatusEnum.WAIT_TECHNICAL_DIRECTOR.name()) + )); + if (!eamMaintenanceStandardList.isEmpty()) { + return Result.error("宸插瓨鍦ㄥ浜庡鎵规祦绋嬬殑鏁版嵁锛岃鍒犻櫎鎴栫粨鏉熷悗杩涜鍗囩増瀵煎叆鎿嶄綔"); + } + //鍗囩増鎿嶄綔锛屼綔搴熷師鏈� + eamMaintenanceStandardOld.setStandardStatus(MaintenanceStandardStatusEnum.ABOLISH.name()); + eamMaintenanceStandardMapper.updateById(eamMaintenanceStandardOld); + //鐗堟湰閫掑鑾峰彇鏁板瓧 + Pattern pattern = Pattern.compile("(\\d+)(?:\\.\\d+)*$"); + Matcher matcher = pattern.matcher(eamMaintenanceStandardOld.getStandardVersion()); + if (matcher.find()) { + try { + int mainVersion = Integer.parseInt(matcher.group(1)); + eamMaintenanceStandard.setStandardVersion("v" + (mainVersion + 1)); + } catch (NumberFormatException ignored) { + } + } + }else { + return Result.error("鍗囩増瀵煎叆鐨勬枃浠朵笌鍘熸湁鏁版嵁鐨勮澶囩紪鍙蜂笉涓�鑷�,璇烽噸鏂扮紪杈戝鍏ユ枃浠�"); + } + } + eamMaintenanceStandard.setInitialDate(new Date()); eamMaintenanceStandardMapper.insert(eamMaintenanceStandard); Map<Integer, String> rowErrors = new HashMap<>(); @@ -594,9 +830,11 @@ // 瑙﹀彂淇濆吇娴佺▼ SysParams sysParams = sysParamsService.getSysPramBySettingKey("maintenance_import_type"); - if (sysParams != null && sysParams.getSettingValue().equals("1")) { - eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_SUBMIT.name()); - eamMaintenanceStandardMapper.updateById(eamMaintenanceStandard); + if (sysParams != null) { + if (sysParams.getSettingValue().equals("1")){ + eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_SUBMIT.name()); + eamMaintenanceStandardMapper.updateById(eamMaintenanceStandard); + } } else { return Result.error("鏈壘鍒颁繚鍏绘祦绋嬪鍏ョ浉鍏抽厤缃�,璇疯仈绯荤鐞嗗憳"); } @@ -1075,10 +1313,25 @@ */ @Override @Transactional - public Result<?> importMaintenanceStandard(MultipartFile file, String type) { + public Result<?> importMaintenanceStandard(MultipartFile file, String type,String id) { String fileName = file.getOriginalFilename(); try (XWPFDocument doc = new XWPFDocument(file.getInputStream())) { + // 鑾峰彇鏂囨。鏍囬锛堢涓�涓潪绌烘钀斤級 + String documentTitle = null; + for (XWPFParagraph p : doc.getParagraphs()) { + String text = p.getText(); + if (text != null && !text.trim().isEmpty()) { + documentTitle = text.trim(); + break; // 鎵惧埌绗竴涓潪绌烘钀藉嵆閫�鍑� + } + } + + // 鍩虹楠岃瘉 + if (doc.getTables().isEmpty()) { + return Result.error(fileName + ": 鏂囨。涓湭鎵惧埌琛ㄦ牸"); + } + // 鍩虹楠岃瘉 if (doc.getTables().isEmpty()) { return Result.error(fileName + ": 鏂囨。涓湭鎵惧埌琛ㄦ牸"); @@ -1106,12 +1359,64 @@ return Result.error(fileName + ": 璁惧淇℃伅鎻愬彇澶辫触"); } + EamMaintenanceStandard eamMaintenanceStandardOld=new EamMaintenanceStandard(); + if (StrUtil.isNotEmpty(id)){ + eamMaintenanceStandardOld=eamMaintenanceStandardMapper.selectById(id); + } + // 閰嶇疆绫诲瀷鐩稿叧鍙傛暟 configureStandard(standard, type, file); - EamMaintenanceStandard exist = checkDuplicate(standard.getEquipmentId(), standard.getMaintenanceCategory(), MaintenanceStandardStatusEnum.START.name()); - if (exist != null) { - return Result.error(fileName + ": 璁惧鏍囧噯宸插瓨鍦紝涓嶈兘閲嶅娣诲姞"); + if (StrUtil.isEmpty(id)){ + EamMaintenanceStandard exist = checkDuplicate(standard.getEquipmentId(), standard.getMaintenanceCategory(), MaintenanceStandardStatusEnum.ABOLISH.name()); + if (exist != null) { + return Result.error(fileName + ": 璁惧鏍囧噯宸插瓨鍦紝涓嶈兘閲嶅娣诲姞"); + } } + + if (StrUtil.isNotEmpty(id)){ + if (eamMaintenanceStandardOld.getEquipmentId().equals(standard.getEquipmentId()) + &&eamMaintenanceStandardOld.getMaintenanceCategory().equals(standard.getMaintenanceCategory())) { + //鍒ゆ柇鏄惁鐜版湁寰呮彁浜ゆ暟鎹� + EamMaintenanceStandard maintenanceStandard=eamMaintenanceStandardMapper.selectOne( + new QueryWrapper<EamMaintenanceStandard>().eq("equipment_id",standard.getEquipmentId()) + .eq("maintenance_category",standard.getMaintenanceCategory()) + .eq("standard_status",MaintenanceStandardStatusEnum.WAIT_SUBMIT.name()) + .eq("del_flag", CommonConstant.DEL_FLAG_0)); + if (maintenanceStandard != null) { + //鍒犻櫎鍘熸湁寰呮彁浜� + eamMaintenanceStandardMapper.deleteById(maintenanceStandard.getId()); + } + //鏌ヨ鍦ㄦ祦绋嬩腑鐨勬暟鎹� + List<EamMaintenanceStandard> eamMaintenanceStandardList=eamMaintenanceStandardMapper.selectList( + new QueryWrapper<EamMaintenanceStandard>().eq("equipment_id",standard.getEquipmentId()) + .eq("maintenance_category",standard.getMaintenanceCategory()) + .eq("del_flag", CommonConstant.DEL_FLAG_0) + .and(it->it. + eq("standard_status",MaintenanceStandardStatusEnum.WAIT_REPAIR_DIRECTOR.name()) + .or() + .eq("standard_status",MaintenanceStandardStatusEnum.WAIT_TECHNICAL_DIRECTOR.name()) + )); + if (!eamMaintenanceStandardList.isEmpty()) { + return Result.error("宸插瓨鍦ㄥ浜庡鎵规祦绋嬬殑鏁版嵁锛岃鍒犻櫎鎴栫粨鏉熷悗杩涜鍗囩増瀵煎叆鎿嶄綔"); + } + //鍗囩増鎿嶄綔锛屼綔搴熷師鏈� + eamMaintenanceStandardOld.setStandardStatus(MaintenanceStandardStatusEnum.ABOLISH.name()); + eamMaintenanceStandardMapper.updateById(eamMaintenanceStandardOld); + //鐗堟湰閫掑鑾峰彇鏁板瓧 + Pattern pattern = Pattern.compile("(\\d+)(?:\\.\\d+)*$"); + Matcher matcher = pattern.matcher(eamMaintenanceStandardOld.getStandardVersion()); + if (matcher.find()) { + try { + int mainVersion = Integer.parseInt(matcher.group(1)); + standard.setStandardVersion("v" + (mainVersion + 1)); + } catch (NumberFormatException ignored) { + } + } + }else { + return Result.error("鍗囩増瀵煎叆鐨勬枃浠朵笌鍘熸湁鏁版嵁鐨勮澶囩紪鍙蜂笉涓�鑷�,璇烽噸鏂扮紪杈戝鍏ユ枃浠�"); + } + } + standard.setStandardName(documentTitle); eamMaintenanceStandardMapper.insert(standard); standardId = standard.getId(); -- Gitblit v1.9.3