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