From 23a41447d547a32ec67925b970162e91730e2561 Mon Sep 17 00:00:00 2001 From: cuikaidong <ckd2942379034@163.com> Date: 星期五, 23 五月 2025 17:14:22 +0800 Subject: [PATCH] 封存启封功能完善,启封,编辑功能 --- lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentSealUpServiceImpl.java | 173 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 171 insertions(+), 2 deletions(-) diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentSealUpServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentSealUpServiceImpl.java index 90afff0..a0fbad9 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentSealUpServiceImpl.java +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentSealUpServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -10,6 +11,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; 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.constant.DataBaseConstant; @@ -21,6 +23,7 @@ import org.jeecg.modules.eam.constant.EquipmentLeanOutStatusEnum; import org.jeecg.modules.eam.constant.EquipmentSealUpStatusEnum; import org.jeecg.modules.eam.entity.EamEquipment; +import org.jeecg.modules.eam.entity.EamEquipmentLeanOut; import org.jeecg.modules.eam.entity.EamEquipmentSealUp; import org.jeecg.modules.eam.mapper.EamEquipmentSealUpMapper; import org.jeecg.modules.eam.request.EamEquipmentSealUpQuery; @@ -174,12 +177,57 @@ @Override @Transactional(rollbackFor = Exception.class) + public boolean unseal(String id) { + EamEquipmentSealUp entity = equipmentSealUpMapper.selectById(id); + if (entity == null) { + throw new JeecgBootException("瑕佹彁浜ょ殑鏁版嵁涓嶅瓨鍦紝璇峰埛鏂伴噸璇曪紒"); + } + if (!EquipmentSealUpStatusEnum.SEALED.name().equals(entity.getSealStatus())) { + throw new JeecgBootException("褰撳墠鏁版嵁鐘舵�佷笉鍏佽缂栬緫锛�"); + } + //妫�鏌ヨ澶� + EamEquipment equipment = eamEquipmentService.getById(entity.getEquipmentId()); + if (equipment == null) { + throw new JeecgBootException("璁惧涓嶅瓨鍦紒"); + } + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + if (sysUser == null) { + throw new JeecgBootException("褰撳墠鐢ㄦ埛鏃犳硶缂栬緫灏佸瓨璁板綍锛�"); + } + //鍚姩瀹℃壒娴佺▼ + flowCommonService.initActBusiness("宸ュ崟鍙�:" + entity.getCode() + ";璁惧缂栧彿: " + equipment.getEquipmentCode() + ";杩涜璁惧鍚皝", + entity.getId(), "IEamEquipmentSealUpService", "equipment_unseal", null); + Map<String, Object> variables = new HashMap<>(); + variables.put("dataId", entity.getId()); + variables.put("organization", "鏂板鍚皝榛樿鍚姩娴佺▼"); + variables.put("comment", "鏂板鍚皝榛樿鍚姩娴佺▼"); + variables.put("proofreading", true); + // 鍒嗛厤缁欒澶囩鐞嗗憳 + List<UserSelector> userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getOrgId(), BusinessCodeConst.PCR0004); + if (CollectionUtil.isEmpty(userSelectors)) { + throw new JeecgBootException("璁惧鏈垎閰嶇粰璁惧绠$悊鍛橈紝鏃犳硶杩涘叆涓嬬骇瀹℃壒锛�"); + } + List<String> usernames = userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList()); + variables.put("NextAssignee", usernames); + Result result = flowDefinitionService.startProcessInstanceByKey("equipment_unseal", variables); + if (result != null) { + entity.setSealEndTime(new Date()); + entity.setSealStatus(EquipmentSealUpStatusEnum.WAIT_UNSEALING_AUDIT.name()); + //淇濆瓨宸ュ崟 + equipmentSealUpMapper.updateById(entity); + return result.isSuccess(); + } + return true; + } + + @Override + @Transactional(rollbackFor = Exception.class) public boolean submit(String id) { EamEquipmentSealUp entity = equipmentSealUpMapper.selectById(id); if (entity == null) { throw new JeecgBootException("瑕佹彁浜ょ殑鏁版嵁涓嶅瓨鍦紝璇峰埛鏂伴噸璇曪紒"); } - if (!EquipmentLeanOutStatusEnum.WAIT_SUBMIT.name().equals(entity.getSealStatus())) { + if (!EquipmentSealUpStatusEnum.WAIT_SUBMIT.name().equals(entity.getSealStatus())) { throw new JeecgBootException("褰撳墠鏁版嵁鐘舵�佷笉鍏佽缂栬緫锛�"); } //妫�鏌ヨ澶� @@ -234,7 +282,128 @@ @Override @Transactional(rollbackFor = Exception.class) public EamEquipmentSealUp approval(EamEquipmentSealUpRequest request) { - return null; + EamEquipmentSealUp entity = equipmentSealUpMapper.selectById(request.getId()); + if (entity == null) { + throw new JeecgBootException("瀹℃壒鐨勬暟鎹凡鍒犻櫎锛岃鍒锋柊閲嶈瘯锛�"); + } + // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛 + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + if (user == null || StrUtil.isBlank(user.getId())) { + throw new JeecgBootException("鏈幏鍙栧埌鐧诲綍鐢ㄦ埛锛岃閲嶆柊鐧诲綍鍚庡啀璇曪紒"); + } + request.setApprovalUser(user.getUsername()); + // 鑾峰彇娴佺▼涓氬姟璁板綍 + FlowMyBusiness flowMyBusiness = flowMyBusinessService.getFlowMyBusiness(request.getInstanceId()); + if (flowMyBusiness == null) { + throw new JeecgBootException("娴佺▼瀹炰緥涓嶅瓨鍦紝璇峰埛鏂板悗閲嶈瘯锛�"); + } + + boolean userAuthorized = isUserAuthorized(flowMyBusiness, user); + if (!userAuthorized) { + throw new JeecgBootException("鐢ㄦ埛鏃犳潈鎿嶄綔姝や换鍔★紝璇峰埛鏂板悗閲嶈瘯锛�"); + } + // 璁ら浠诲姟 + if (!claimTask(flowMyBusiness.getTaskId(), user)) { + throw new JeecgBootException("浠诲姟涓嶅瓨鍦ㄣ�佸凡瀹屾垚鎴栧凡琚粬浜鸿棰嗭紒"); + } + + EamEquipment equipment = eamEquipmentService.getById(entity.getEquipmentId()); + if (equipment == null) { + throw new JeecgBootException("璁惧涓嶅瓨鍦紝璇锋鏌ワ紒"); + } + + EquipmentSealUpStatusEnum status = EquipmentSealUpStatusEnum.getInstance(entity.getSealStatus()); + if (status == null) { + return null; + } + //娴佺▼鍙橀噺 + Map<String, Object> values = new HashMap<>(); + switch (status) { + // 瀹℃壒 + case WAIT_UNSEALING_AUDIT: + //鎵ц瀹屾垚 + values.put("dataId", entity.getId()); + values.put("organization", request.getApprovalComment()); + values.put("comment", request.getApprovalComment()); + values.put("approvalDealType", request.getApprovalDealType()); + request.setComment(request.getApprovalComment()); + entity.setApprovalUser(user.getUsername());// 瀹℃牳浜� + entity.setApprovalComment(request.getApprovalComment());// 瀹℃牳鎰忚 + entity.setApprovalTime(new Date());// 瀹℃牳鏃堕棿 + entity.setApprovalDealType(request.getApprovalDealType()); // 瀹℃壒绫诲瀷 + // 楠岃瘉閫氳繃杩樻槸椹冲洖 + if (request.getApprovalDealType().equals("1")) { + //璁剧疆entity + entity.setSealStatus(EquipmentSealUpStatusEnum.SEALED.name()); + List<String> userApprovalList = new ArrayList<>(Collections.singletonList(entity.getReportUser())); + values.put("NextAssignee", userApprovalList); + } else { + //璁剧疆entity + entity.setSealStatus(EquipmentSealUpStatusEnum.WAIT_SUBMIT.name()); + // 淇敼璁惧鐘舵�� + equipment.setAssetStatus(AssetStatusEnum.NORMAL.name()); + eamEquipmentService.updateById(equipment); + } + break; + // 宸插皝瀛� + case SEALED: + values.put("dataId", entity.getId()); + values.put("organization", request.getUnsealApprovalComment()); + values.put("comment", request.getUnsealApprovalComment()); + request.setComment(request.getUnsealApprovalComment()); + // 楠岃瘉閫氳繃杩樻槸椹冲洖 + if (request.getUnsealApprovalDealType().equals("1")) { + //璁剧疆entity + entity.setSealStatus(EquipmentSealUpStatusEnum.COMPLETE.name()); + // 淇敼璁惧鐘舵�� + equipment.setAssetStatus(AssetStatusEnum.NORMAL.name()); + } else { + //璁剧疆entity + entity.setSealStatus(EquipmentSealUpStatusEnum.SEALED.name()); + } + entity.setUnsealApprovalUser(user.getUsername()); + entity.setUnsealApprovalComment(request.getUnsealApprovalComment()); + entity.setUnsealApprovalTime(new Date()); + + // 淇敼璁惧鐘舵�� + equipment.setAssetStatus(AssetStatusEnum.NORMAL.name()); + eamEquipmentService.updateById(equipment); + break; + } + request.setValues(values); + + // 瀹屾垚娴佺▼浠诲姟 + Result result = flowTaskService.complete(request); + if (!result.isSuccess()) { + throw new JeecgBootException("瀹℃壒澶辫触锛岃鍒锋柊鏌ョ湅锛�"); + } + //淇濆瓨宸ュ崟 + equipmentSealUpMapper.updateById(entity); + return entity; + } + + /** + * 鍒ゆ柇鐢ㄦ埛鏄惁鎷ユ湁姝ゆ潈闄� + * + * @param flowMyBusiness + * @param user + * @return + */ + 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; } @Override -- Gitblit v1.9.3