From 1becd6d46123723bd2b898fd565b4331fb2cb2d8 Mon Sep 17 00:00:00 2001 From: lyh <liuyuanheng@xalxzn.com> Date: 星期五, 28 二月 2025 15:51:50 +0800 Subject: [PATCH] 新增flow able 代办已办 --- lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/AssignFileStreamServiceImpl.java | 144 ++++++++++++++++++++++++++--------------------- 1 files changed, 80 insertions(+), 64 deletions(-) diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/AssignFileStreamServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/AssignFileStreamServiceImpl.java index 97159f1..b4b380b 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/AssignFileStreamServiceImpl.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/AssignFileStreamServiceImpl.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.common.collect.Lists; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.flowable.engine.TaskService; @@ -34,12 +35,18 @@ import org.jeecg.modules.dnc.utils.ValidateUtil; import org.jeecg.modules.dnc.utils.date.DateUtil; import org.jeecg.modules.dnc.utils.file.FileUtilS; +import org.jeecg.modules.flow.vo.AssignFlowTaskVo; +import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness; +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.mdc.entity.MdcEquipment; import org.jeecg.modules.mdc.service.IMdcEquipmentService; import org.jeecg.modules.system.entity.MdcProduction; import org.jeecg.modules.system.service.IMdcProductionService; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.StringRedisTemplate; @@ -51,8 +58,8 @@ import java.util.*; import java.util.stream.Collectors; -@Service -public class AssignFileStreamServiceImpl extends ServiceImpl<AssignFileStreamMapper, AssignFileStream> implements IAssignFileStreamService { +@Service("IAssignFileStreamService") +public class AssignFileStreamServiceImpl extends ServiceImpl<AssignFileStreamMapper, AssignFileStream> implements IAssignFileStreamService , FlowCallBackServiceI { private static final String PROCESS_KEY = "assign_nc_to_device"; private static final String APPLY_VARIABLE = "apply_user"; private static final String APPROVE_VARIABLE = "approve_users"; @@ -101,6 +108,8 @@ private FlowCommonService flowCommonService; @Resource private IFlowDefinitionService flowDefinitionService; + @Autowired + private IFlowTaskService flowTaskService; @Value("${securedoc.serverIp}") private String serverIp; @@ -113,22 +122,16 @@ @Override @Transactional(rollbackFor = {Exception.class}) - public ResponseResult applyAssignFile(AssignFileStream stream) { + public Result applyAssignFile(AssignFileStream stream) { synchronized (this){ //鍒ゆ柇璁惧鐗规畩瀛楃 String specialChar = getDeviceSpecialChar(stream.getDeviceId(),stream.getFileId()); if (StrUtil.isNotEmpty(specialChar)){ //鎶涘嚭鐗规畩瀛楃寮傚父 - return createSpecialCharErrorResponse(specialChar); + return Result.error("鏂囦欢鍚嶇О瀛樺湪璁惧鐗规畩瀛楃"); } if(flowableEnable) { - boolean b = applyAssignFileActive(stream); - if (b) { - return ResponseResult.SUCCESS(); - } else { - return ResponseResult.SUCCESS(); - } - + return applyAssignFileActive(stream); }else { return applyAssignFileNonActive(stream); } @@ -190,7 +193,7 @@ @Override @Transactional(rollbackFor = {Exception.class}) - public boolean applyAssignFileActive(AssignFileStream stream) { + public Result<?> applyAssignFileActive(AssignFileStream stream) { validateParams(stream); DocInfo docInfo = getDocInfo(stream); MdcEquipment mdcEquipment = getMdcEquipment(stream); @@ -206,23 +209,19 @@ List<PermissionStream> permissionStreams = getPermissionStreams(stream); LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String userId = user.getId(); -// List<String> departIds = getDepartIds(permissionStreams, userId); -// List<String> userIdList = getUserIdList(departIds); -// saveBusinessObject(stream, userId); -// ProcessInstance processInstance = startProcessInstance(stream, userIdList); -// completeTask(processInstance, userId); + saveBusinessObject(stream, userId); System.out.println("鎸囨淳NC鏂囨。鍒拌澶囨祦绋嬶細" + stream.getDocId()); - flowCommonService.initActBusiness("鎸囨淳NC鏂囨。鍒拌澶囨祦绋嬶細" + stream.getStreamId(), stream.getStreamId(), "IAssignFileStreamService", "assign_nc_to_device", null); + flowCommonService.initActBusiness("鎸囨淳NC鏂囨。鍒拌澶囨祦绋嬶細" +docInfo.getDocName()+"."+docInfo.getDocSuffix()+"鍒拌澶�->"+mdcEquipment.getEquipmentName() , + stream.getStreamId(), "IAssignFileStreamService", "assign_nc_to_device", null); Map<String, Object> variables = new HashMap<>(); - variables.put("id", stream.getStreamId()); - variables.put("approveContent", stream.getApproveContent()); - flowDefinitionService.startProcessInstanceByKey("assign_nc_to_device", variables); - return true; + variables.put("dataId", stream.getStreamId()); + variables.put("organization", stream.getApplyReason()); + return flowDefinitionService.startProcessInstanceByKey("assign_nc_to_device", variables); } @Override @Transactional(rollbackFor = {Exception.class}) - public ResponseResult applyAssignFileNonActive(AssignFileStream stream) { + public Result<?> applyAssignFileNonActive(AssignFileStream stream) { //鏉冮檺鏍¢獙 validateParams(stream); DocInfo docInfo = getDocInfo(stream); @@ -268,7 +267,7 @@ handleFileTransfer(mdcEquipment, docFile); handleFileProcessing(docFile, mdcEquipment, whether, localFilePath); synchronizedFlagService.updateFlag(2); - return new ResponseResult(CommonCode.SUCCESS); + return Result.OK("鎿嶄綔鎴愬姛"); } @Override @@ -280,47 +279,45 @@ @Override @Transactional(rollbackFor = {Exception.class}) - public boolean approveAssignFile(String taskId, String streamId, AssignFileStream stream) { - if(!ValidateUtil.validateString(taskId) || !ValidateUtil.validateString(streamId) || stream == null) + public boolean approveAssignFile(AssignFlowTaskVo assignFlowTaskVo) { + if(!ValidateUtil.validateString(assignFlowTaskVo.getTaskId()) || !ValidateUtil.validateString(assignFlowTaskVo.getDataId()) || assignFlowTaskVo == null) ExceptionCast.cast(CommonCode.INVALID_PARAM); LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String userId = user.getId(); if(!ValidateUtil.validateString(userId)) ExceptionCast.cast(UcenterCode.UCENTER_ACCOUNT_NOT_EXIST); - if(!ValidateUtil.validateInteger(stream.getStatus())) + if(!ValidateUtil.validateInteger(assignFlowTaskVo.getStatus())) ExceptionCast.cast(ActivitiCode.ACT_STATUS_ERROR); - AssignFileStream en = super.getById(streamId); + AssignFileStream en = super.getById(assignFlowTaskVo.getDataId()); if(en == null) ExceptionCast.cast(ActivitiCode.ACT_BUSINESS_DETAIL_ERROR); - Task task = taskService.createTaskQuery().taskId(taskId).taskCandidateOrAssigned(userId).singleResult(); - if(task == null) - ExceptionCast.cast(ActivitiCode.ACT_TASK_ERROR); - if(!ValidateUtil.validateString(task.getAssignee())) { - //鎷惧彇浠诲姟 - taskService.claim(task.getId(), userId); - //瀹屾垚浠诲姟 - taskService.complete(task.getId()); - }else { - //瀹屾垚浠诲姟 - taskService.complete(task.getId()); - } + //flowable澶勭悊 + FlowTaskVo flowTaskVo = new FlowTaskVo(); + BeanUtils.copyProperties(assignFlowTaskVo, flowTaskVo); + flowTaskService.complete(flowTaskVo); //鏇存柊瀵硅薄灏佽 AssignFileStream up = new AssignFileStream(); - up.setApproveContent(stream.getApproveContent()); - up.setStatus(stream.getStatus()); + up.setApproveContent(assignFlowTaskVo.getApproveContent()); + up.setStatus(assignFlowTaskVo.getStatus()); up.setApproveUserId(userId); up.setApproveTime(DateUtil.getNow()); - up.setStreamId(streamId); + up.setStreamId(assignFlowTaskVo.getDataId()); boolean b = super.updateById(up); if(!b) ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR); if(up.getStatus() == 2) { + DocInfo docInfo; //鍚屾剰鎿嶄綔 - DocInfo docInfo = docInfoService.getByDocAttrAndDocId(en.getDocId(), 5, en.getProcessId()); + if (StrUtil.isNotEmpty(en.getStepId())){ + //宸ユ鎸囨淳 + docInfo = docInfoService.getByDocAttrAndDocId(en.getDocId(), 6, en.getStepId()); + }else { + docInfo = docInfoService.getByDocAttrAndDocId(en.getDocId(), 5, en.getProcessId()); + } if(docInfo == null || docInfo.getDocStatus() == 3) ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR); - DeviceInfo deviceInfo = deviceInfoService.getById(en.getDeviceId()); - if(deviceInfo == null) + MdcEquipment mdcEquipment = iMdcEquipmentService.getById(en.getDeviceId()); + if(mdcEquipment == null) ExceptionCast.cast(ActivitiCode.ACT_ASSIGN_DEVICE_NONE); DocFile docFile = docFileService.getById(en.getFileId()); if(docFile == null) @@ -328,17 +325,16 @@ DocInfo deviceDoc = docInfoService.getByDocAttrAndDocId(en.getDocId(),4, en.getDeviceId()); if(deviceDoc != null) { // 鍒犻櫎 澶囦唤 瑕嗙洊 鍘熸湁鐨� - List<String> strings = deviceGroupService.findListParentTreeAll(deviceInfo.getGroupId()); + List<String> strings = iMdcProductionService.findListParentTreeAll(mdcEquipment.getId()); if (strings != null && !strings.isEmpty()) { String path = StringUtils.join(strings.toArray(), "/"); - boolean copyFileNc = FileUtilS.copyFileNcToBak(path + "/"+ deviceInfo.getDeviceNo(), + boolean copyFileNc = FileUtilS.copyFileNcToBak(path + "/"+ mdcEquipment.getEquipmentId(), docFile.getFileName(), docFile.getFileSuffix()); /* //docInfoService.getBaseMapper().deleteById(deviceDoc.getDocId()); boolean doc = docRelativeService.deleteCopyDocByAttrNext(deviceDoc.getDocId(),4,stream.getDeviceId()); if (!doc) { ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR_DELEVE); }*/ - } } else { //鎻掑叆鏂囨。鍒拌澶囧彂閫佹枃妗� @@ -355,22 +351,20 @@ } if(!b) ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR); - if (deviceInfo != null) { - List<String> strings = deviceGroupService.findListParentTreeAll(deviceInfo.getGroupId()); + if (mdcEquipment != null) { + List<String> strings = iMdcProductionService.findListParentTreeAll(mdcEquipment.getId()); if (strings != null && !strings.isEmpty()) { String path = StringUtils.join(strings.toArray(), "/"); - boolean copyFileNc = FileUtilS.copyFileNc(docFile.getFilePath(),path + "/"+ deviceInfo.getDeviceNo(), + boolean copyFileNc = FileUtilS.copyFileNc(docFile.getFilePath(),path + "/"+ mdcEquipment.getEquipmentId(), docFile.getFileEncodeName(), docFile.getFileName(),docFile.getFileSuffix()); if (!copyFileNc) { ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR); } else { - FileUtilS.deleteZipFromToSend(path + "/"+ deviceInfo.getDeviceNo(), + FileUtilS.deleteZipFromToSend(path + "/"+ mdcEquipment.getEquipmentId(), docFile.getFileName(),docFile.getFileSuffix()); - } } - } return synchronizedFlagService.updateFlag(1); }else if(up.getStatus() == 3) { @@ -394,11 +388,12 @@ for(String id : deviceIds) { stream = new AssignFileStream(); stream.setProcessId(assignFileRequest.getProcessId()); + stream.setStepId(assignFileRequest.getStepId()); stream.setDocId(assignFileRequest.getDocId()); stream.setFileId(assignFileRequest.getFileId()); stream.setApplyReason(assignFileRequest.getApplyReason()); stream.setDeviceId(id); - ResponseResult b = applyAssignFile(stream); + Result b = applyAssignFile(stream); if(!b.isSuccess()) ExceptionCast.cast(ActivitiCode.ACT_APPLY_ERROR); } @@ -413,14 +408,14 @@ List<TaskRequest> list = approveBatchRequest.getTaskArr(); if(list == null || list.isEmpty()) ExceptionCast.cast(CommonCode.INVALID_PARAM); - list.forEach(item -> { - AssignFileStream stream = new AssignFileStream(); - stream.setApproveContent(approveBatchRequest.getApproveContent()); - stream.setStatus(approveBatchRequest.getStatus()); - boolean b = approveAssignFile(item.getId(), item.getBusinessKey(), stream); - if(!b) - ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR); - }); +// list.forEach(item -> { +// AssignFileStream stream = new AssignFileStream(); +// stream.setApproveContent(approveBatchRequest.getApproveContent()); +// stream.setStatus(approveBatchRequest.getStatus()); +// boolean b = approveAssignFile(item.getId(), item.getBusinessKey(), stream); +// if(!b) +// ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR); +// }); return synchronizedFlagService.updateFlag(1); } @@ -785,4 +780,25 @@ } } + @Override + public void afterFlowHandle(FlowMyBusiness business) { + business.getTaskNameId();//鎺ヤ笅鏉ュ鎵圭殑鑺傜偣 + business.getValues();//鍓嶇浼犺繘鏉ョ殑鍙傛暟 + business.getActStatus(); + } + + @Override + public Object getBusinessDataById(String dataId) { + return this.getById(dataId); + } + + @Override + public Map<String, Object> flowValuesOfTask(String taskNameId, Map<String, Object> values) { + return null; + } + + @Override + public List<String> flowCandidateUsernamesOfTask(String taskNameId, Map<String, Object> values) { + return Lists.newArrayList("jeecg"); + } } -- Gitblit v1.9.3