From 0ed2995fbd51293095e78b6c55055d6f7794f992 Mon Sep 17 00:00:00 2001 From: lyh <925863403@qq.com> Date: 星期三, 09 四月 2025 16:30:15 +0800 Subject: [PATCH] 修改指派程序至设备,点检工单流程与异常报修,修改flow已办查询 --- lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamInspectionOrderServiceImpl.java | 251 ++++++++++++++++++++++++++++++++++---------------- 1 files changed, 171 insertions(+), 80 deletions(-) diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamInspectionOrderServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamInspectionOrderServiceImpl.java index b26567c..a9ac0fc 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamInspectionOrderServiceImpl.java +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamInspectionOrderServiceImpl.java @@ -9,16 +9,14 @@ import org.flowable.engine.TaskService; import org.flowable.task.api.Task; import org.jeecg.common.api.vo.Result; +import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.eam.constant.InspectionStatus; -import org.jeecg.modules.eam.entity.EamEquipment; -import org.jeecg.modules.eam.entity.EamInspectionOrder; -import org.jeecg.modules.eam.entity.EamInspectionOrderDetail; +import org.jeecg.modules.eam.constant.ReportRepairEnum; +import org.jeecg.modules.eam.entity.*; import org.jeecg.modules.eam.mapper.EamInspectionOrderMapper; import org.jeecg.modules.eam.request.EamInspectionOrderRequest; -import org.jeecg.modules.eam.service.IEamEquipmentService; -import org.jeecg.modules.eam.service.IEamInspectionOrderDetailService; -import org.jeecg.modules.eam.service.IEamInspectionOrderService; +import org.jeecg.modules.eam.service.*; import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness; import org.jeecg.modules.flowable.apithird.business.service.impl.FlowMyBusinessServiceImpl; import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI; @@ -62,6 +60,11 @@ private IEamEquipmentService iEamEquipmentService; @Autowired private IMdcUserProductionService mdcUserProductionService; + @Autowired + private IEamReportRepairService eamReportRepairService; + @Autowired + private IEamEquipmentFaultReasonService eamEquipmentFaultReasonService; + @Override @Transactional(rollbackFor = Exception.class) public boolean addInspectionOrder(EamInspectionOrderRequest eamInspectionOrderRequest) { @@ -125,6 +128,9 @@ public boolean editInspectionOrder(EamInspectionOrderRequest eamInspectionOrderRequest) { EamInspectionOrder eamInspectionOrder = new EamInspectionOrder(); BeanUtils.copyProperties(eamInspectionOrderRequest, eamInspectionOrder); + if (StrUtil.isNotEmpty(eamInspectionOrder.getOperator())){ + eamInspectionOrder.setInspectionStatus(InspectionStatus.IN_PROGRESS.getCode()); + } updateById(eamInspectionOrder); //澶勭悊鏄庣粏鏁版嵁 if (CollectionUtil.isNotEmpty(eamInspectionOrderRequest.getTableDetailList())) { @@ -181,100 +187,57 @@ * @return */ @Override - @Transactional - public Result<?> inspectionProcess(EamInspectionOrderRequest eamInspectionOrderRequest){ + public Result<?> inspectionProcess(EamInspectionOrderRequest eamInspectionOrderRequest) { try { - // 鍙傛暟鏍¢獙 - if (!StrUtil.isNotBlank(eamInspectionOrderRequest.getTaskId()) || !StrUtil.isNotBlank(eamInspectionOrderRequest.getDataId())) { + // 妫�鏌ヨ姹傚弬鏁� + if (!isValidRequest(eamInspectionOrderRequest)) { return Result.error("闈炴硶鍙傛暟"); } - LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - String userId = user.getId(); - eamInspectionOrderRequest.setAssignee(user.getUsername()); - if (!StrUtil.isNotBlank(userId)) { + + // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛 + LoginUser user = getCurrentUser(); + if (user == null || StrUtil.isBlank(user.getId())) { return Result.error("璐﹀彿涓嶅瓨鍦�"); } + eamInspectionOrderRequest.setAssignee(user.getUsername()); - // 鏁版嵁鏌ヨ - EamInspectionOrder eamInspectionOrder = this.getById(eamInspectionOrderRequest.getDataId()); + // 鑾峰彇鐐规宸ュ崟淇℃伅 + EamInspectionOrder eamInspectionOrder = getEamInspectionOrder(eamInspectionOrderRequest.getDataId()); if (eamInspectionOrder == null) { return Result.error("鏈壘鍒板搴旀暟鎹�"); } - // 2. 鏌ヨ娴佺▼涓氬姟璁板綍锛堝鐞嗙┖缁撴灉锛� - List<FlowMyBusiness> businessList = flowMyBusinessService.list( - new QueryWrapper<FlowMyBusiness>() - .eq("process_instance_id", eamInspectionOrderRequest.getInstanceId()) - ); - if (businessList.isEmpty()) { + // 鑾峰彇娴佺▼涓氬姟璁板綍 + FlowMyBusiness flowMyBusiness = getFlowMyBusiness(eamInspectionOrderRequest.getInstanceId()); + if (flowMyBusiness == null) { return Result.error("娴佺▼璁板綍涓嶅瓨鍦�"); } - FlowMyBusiness flowMyBusiness = businessList.get(0); - // 3. 鏍¢獙鐢ㄦ埛鏄惁涓哄�欓�夊鐞嗕汉 - List<String> todoUsers = JSON.parseArray(flowMyBusiness.getTodoUsers(), String.class); - if (todoUsers == null || !todoUsers.contains(user.getUsername())) { + // 妫�鏌ョ敤鎴锋槸鍚︽湁鏉冮檺鎿嶄綔浠诲姟 + if (!isUserAuthorized(flowMyBusiness, user)) { return Result.error("鐢ㄦ埛鏃犳潈鎿嶄綔姝や换鍔�"); } - // 4. 璁ら浠诲姟锛堝鐞嗗凡琚棰嗙殑鎯呭喌锛� - String taskId = flowMyBusiness.getTaskId(); - Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); - if (task == null) { - return Result.error("浠诲姟涓嶅瓨鍦ㄦ垨宸插畬鎴�"); + // 璁ら浠诲姟 + if (!claimTask(flowMyBusiness.getTaskId(), user)) { + return Result.error("浠诲姟涓嶅瓨鍦ㄣ�佸凡瀹屾垚鎴栧凡琚粬浜鸿棰�"); } - if (task.getAssignee() != null && !task.getAssignee().equals(user.getUsername())) { - return Result.error("浠诲姟宸茶浠栦汉璁ら"); - } - taskService.claim(taskId, user.getUsername()); - Map<String, Object> values = new HashMap<>(); - if ((InspectionStatus.IN_PROGRESS.getCode()).equals(eamInspectionOrder.getInspectionStatus())) { - //鐐规浜虹偣妫�缁撴潫 - //鏌ヨ瀵瑰簲鐝粍闀�,浣滀负涓嬩竴鑺傜偣澶勭悊浜�,瀛樺湪澶氫釜澶勭悊浜� - String orgId=iEamEquipmentService.getById(eamInspectionOrder.getEquipmentId()).getOrgId(); - //绛涢�夊嚭鐝粍闀垮矖浣�,post涓篜CR0003 - List<SysUser> sysUserList= mdcUserProductionService.queryByPostAndProId("PCR0003",orgId); - List<String> usernameList; - if (sysUserList.isEmpty()){ - return Result.error("鏈壘鍒拌璁惧瀵瑰簲杞﹂棿鐨勭彮缁勯暱锛岃鑱旂郴绠$悊鍛樺鐞�"); - }else { - usernameList = sysUserList.stream().map(SysUser::getUsername).collect(Collectors.toList()); - } - // 璁剧疆娴佺▼鍙橀噺 - values.put("dataId", eamInspectionOrder.getId()); - values.put("organization", "鐐规浜虹偣妫�缁撴潫"); - values.put("comment","鐐规浜虹偣妫�缁撴潫" ); - values.put("NextAssignee", usernameList); - eamInspectionOrderRequest.setComment("鐐规浜虹偣妫�缁撴潫"); - }else { - //鐝粍闀跨‘璁� - values.put("dataId", eamInspectionOrder.getId()); - values.put("organization", "鐝粍闀跨‘璁�"); - values.put("comment","鐝粍闀跨‘璁�" ); - eamInspectionOrderRequest.setComment("鐝粍闀跨‘璁�"); - } - eamInspectionOrderRequest.setValues(values); + // 璁剧疆娴佺▼鍙橀噺 + setupProcessVariables(eamInspectionOrderRequest, eamInspectionOrder, user); + // 瀹屾垚娴佺▼浠诲姟 Result result = flowTaskService.complete(eamInspectionOrderRequest); - if (result.isSuccess()) { - // 鏇存柊鐘舵�� - if ((InspectionStatus.IN_PROGRESS.getCode()).equals(eamInspectionOrder.getInspectionStatus())) { - //鐐规瀹屾垚 - eamInspectionOrder.setInspectionStatus("3"); - eamInspectionOrder.setInspectionDate(new Date()); - eamInspectionOrderDetailService.remove(new QueryWrapper<EamInspectionOrderDetail>().eq("order_id", eamInspectionOrder.getId())); - eamInspectionOrderDetailService.saveBatch(eamInspectionOrderRequest.getTableDetailList()); - this.updateById(eamInspectionOrder); - } - } else if ((InspectionStatus.COMPLETED.getCode()).equals(eamInspectionOrder.getInspectionStatus())){ - // 鐝粍闀跨‘璁や换鍔� - eamInspectionOrder.setInspectionStatus("4"); - eamInspectionOrder.setConfirmUser(user.getUsername()); - eamInspectionOrder.setConfirmTime(new Date()); - this.updateById(eamInspectionOrder); - //澶勭悊寮傚父鏁版嵁杩涘叆缁翠慨鍗� - return result; + + // 鏍规嵁浠诲姟瀹屾垚缁撴灉鏇存柊宸ュ崟鐘舵�� + updateOrderStatus(result, eamInspectionOrderRequest, eamInspectionOrder, user); + + // 鏇存柊宸ュ崟淇℃伅 + updateEamInspectionOrder(eamInspectionOrder); + + //鏌ヨ鏁版嵁,杩涜璁惧缁翠慨澶勭悊 + if (eamInspectionOrder.getInspectionStatus().equals(InspectionStatus.CONFIRMED.getCode())){ + updateEamInspectionOrderDetail(eamInspectionOrder); } return Result.OK("鎿嶄綔鎴愬姛"); @@ -283,6 +246,134 @@ } } + private boolean isValidRequest(EamInspectionOrderRequest request) { + return StrUtil.isNotBlank(request.getTaskId()) && StrUtil.isNotBlank(request.getDataId()); + } + + private LoginUser getCurrentUser() { + try { + return (LoginUser) SecurityUtils.getSubject().getPrincipal(); + } catch (Exception e) { + return null; + } + } + + private EamInspectionOrder getEamInspectionOrder(String dataId) { + return this.getById(dataId); + } + + private FlowMyBusiness getFlowMyBusiness(String instanceId) { + List<FlowMyBusiness> businessList = flowMyBusinessService.list( + new QueryWrapper<FlowMyBusiness>().eq("process_instance_id", instanceId)); + return businessList.isEmpty() ? null : businessList.get(0); + } + + private boolean isUserAuthorized(FlowMyBusiness flowMyBusiness, LoginUser user) { + List<String> todoUsers = JSON.parseArray(flowMyBusiness.getTodoUsers(), String.class); + return todoUsers != null && todoUsers.contains(user.getUsername()); + } + + private boolean claimTask(String taskId, LoginUser user) { + Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); + if (task == null) { + return false; + } + if (task.getAssignee() != null && !task.getAssignee().equals(user.getUsername())) { + return false; + } + taskService.claim(taskId, user.getUsername()); + return true; + } + + private void setupProcessVariables(EamInspectionOrderRequest request, EamInspectionOrder order, LoginUser user) { + Map<String, Object> values = new HashMap<>(); + if (InspectionStatus.IN_PROGRESS.getCode().equals(order.getInspectionStatus()) && user.getUsername().equals(order.getOperator())) { + // 鐐规浜虹偣妫�缁撴潫 + String orgId = Optional.ofNullable(iEamEquipmentService.getById(order.getEquipmentId())) + .map(equipment -> equipment.getOrgId()) + .orElse(null); + if (orgId == null) { + throw new IllegalArgumentException("鏈壘鍒拌澶囩殑缁勭粐 ID"); + } + List<SysUser> sysUserList = mdcUserProductionService.queryByPostAndProId("PCR0003", orgId); + List<String> usernameList = sysUserList.stream().map(SysUser::getUsername).collect(Collectors.toList()); + if (usernameList.isEmpty()) { + throw new IllegalArgumentException("鏈壘鍒拌璁惧瀵瑰簲杞﹂棿鐨勭彮缁勯暱锛岃鑱旂郴绠$悊鍛樺鐞�"); + } + values.put("dataId", order.getId()); + values.put("organization", "鐐规浜虹偣妫�缁撴潫"); + values.put("comment", "鐐规浜虹偣妫�缁撴潫"); + values.put("NextAssignee", usernameList); + request.setComment("鐐规浜虹偣妫�缁撴潫"); + } else { + // 鐝粍闀跨‘璁� + values.put("dataId", order.getId()); + values.put("organization", request.getDealSuggestion()); + values.put("comment", request.getDealSuggestion()); + values.put("confirmation", request.getDealType()); + request.setComment(request.getDealSuggestion()); + if ("2".equals(request.getDealType())) { + // 鐝粍闀块┏鍥� + List<String> usernames = new ArrayList<>(); + usernames.add(order.getOperator()); + order.setInspectionStatus("2"); + values.put("NextAssignee", usernames); + } + } + request.setValues(values); + } + + private void updateOrderStatus(Result result, EamInspectionOrderRequest request, EamInspectionOrder order, LoginUser user) { + if (result.isSuccess()) { + if (InspectionStatus.IN_PROGRESS.getCode().equals(order.getInspectionStatus()) && StrUtil.isEmpty(request.getDealType())) { + // 鐐规瀹屾垚 + order.setInspectionStatus("3"); + order.setOperateTime(new Date()); + eamInspectionOrderDetailService.remove(new QueryWrapper<EamInspectionOrderDetail>().eq("order_id", order.getId())); + eamInspectionOrderDetailService.saveBatch(request.getTableDetailList()); + } else if (InspectionStatus.COMPLETED.getCode().equals(order.getInspectionStatus()) && StrUtil.isNotEmpty(request.getDealType())) { + // 鐝粍闀跨‘璁や换鍔� + order.setInspectionStatus("4"); + order.setConfirmUser(user.getUsername()); + order.setConfirmTime(new Date()); + } + } + } + + private void updateEamInspectionOrder(EamInspectionOrder eamInspectionOrder) { + this.updateById(eamInspectionOrder); + } + + /** + * 璁惧鏄惁瀛樺湪寮傚父,骞惰繘琛岃澶囩淮淇� + * @param eamInspectionOrder + */ + private void updateEamInspectionOrderDetail(EamInspectionOrder eamInspectionOrder) { + EamEquipmentFaultReason eamEquipmentFaultReason=eamEquipmentFaultReasonService. + getOne(new QueryWrapper<EamEquipmentFaultReason>().eq("fault_code","EFR20250003")); + List<EamInspectionOrderDetail> eamInspectionOrderDetails = eamInspectionOrderDetailService + .list(new QueryWrapper<EamInspectionOrderDetail>() + .eq("order_id", eamInspectionOrder.getId()).eq("report_flag","1")); + List<EamReportRepair> eamReportRepairs = new ArrayList<>(); + if (!eamInspectionOrderDetails.isEmpty()) { + eamInspectionOrderDetails.forEach(item->{ + EamReportRepair eamReportRepair=new EamReportRepair(); + eamReportRepair.setEquipmentId(eamInspectionOrder.getEquipmentId()); + eamReportRepair.setFaultName(eamEquipmentFaultReason.getFaultName()); + eamReportRepair.setFaultType(eamEquipmentFaultReason.getFaultCategory()); + eamReportRepair.setFaultDescription(eamEquipmentFaultReason.getFaultDescription()); + eamReportRepair.setReportStatus(ReportRepairEnum.WAIT_REPAIR.name()); + eamReportRepair.setDelFlag(CommonConstant.DEL_FLAG_0); + eamReportRepair.setFaultStartTime(new Date()); + eamReportRepair.setRemark(item.getExceptionDescription()); + eamReportRepairs.add(eamReportRepair); + }); + } + if (!eamReportRepairs.isEmpty()) { + eamReportRepairService.saveBatch(eamReportRepairs); + } + } + /** * 鎵归噺浣滃簾涓庨鍙� * @param ids -- Gitblit v1.9.3