Selaa lähdekoodia

1、复制模型并发布
2、流程发起人员工化改造

dongpo 7 kuukautta sitten
vanhempi
commit
3855e11a43

+ 50 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmModelController.java

@@ -1,6 +1,7 @@
 package cn.iocoder.yudao.module.bpm.controller.admin.definition;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
@@ -8,21 +9,26 @@ import cn.iocoder.yudao.framework.common.util.io.IoUtils;
 import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.*;
+import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.rule.BpmTaskAssignRuleCreateReqVO;
 import cn.iocoder.yudao.module.bpm.convert.definition.BpmModelConvert;
 import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmCategoryDO;
 import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO;
+import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO;
 import cn.iocoder.yudao.module.bpm.service.definition.BpmCategoryService;
 import cn.iocoder.yudao.module.bpm.service.definition.BpmFormService;
 import cn.iocoder.yudao.module.bpm.service.definition.BpmModelService;
 import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService;
 import cn.iocoder.yudao.module.bpm.service.definition.dto.BpmModelMetaInfoRespDTO;
+import cn.iocoder.yudao.module.bpm.service.task.BpmTaskAssignRuleService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import org.flowable.engine.RepositoryService;
 import org.flowable.engine.repository.Deployment;
 import org.flowable.engine.repository.Model;
 import org.flowable.engine.repository.ProcessDefinition;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
@@ -53,6 +59,12 @@ public class BpmModelController {
     @Resource
     private BpmProcessDefinitionService processDefinitionService;
 
+    @Resource
+    private RepositoryService repositoryService;
+
+    @Resource
+    private BpmTaskAssignRuleService bpmTaskAssignRuleService;
+
     @GetMapping("/page")
     @Operation(summary = "获得模型分页")
     public CommonResult<PageResult<BpmModelRespVO>> getModelPage(BpmModelPageReqVO pageVO) {
@@ -94,6 +106,44 @@ public class BpmModelController {
         return success(BpmModelConvert.INSTANCE.buildModel(model, bpmnBytes));
     }
 
+    @GetMapping("/copy")
+    @Operation(summary = "复制模型")
+    @Transactional(rollbackFor = Exception.class)
+    public CommonResult<String> copyModel() {
+        List<Model> modelList = repositoryService.createModelQuery()
+                .modelKey("oa_stamp")
+                .modelTenantId("1")
+                .list();
+        for (Model model : modelList) {
+            Model newModel = repositoryService.newModel();
+            newModel.setName(model.getName());
+            newModel.setKey(model.getKey());
+            newModel.setVersion(1);
+            newModel.setMetaInfo(model.getMetaInfo());
+            newModel.setTenantId("122");
+
+            CommonResult<BpmModelRespVO> model1 = getModel(model.getId());
+            BpmModelRespVO data = model1.getData();
+            BpmModelUpdateReqVO updateReqVO = BeanUtils.toBean(data, BpmModelUpdateReqVO.class);
+            // 修改流程定义
+            BpmModelConvert.INSTANCE.copyToUpdateModel(newModel, updateReqVO);
+            // 更新模型
+            repositoryService.saveModel(newModel);
+            // 更新 BPMN XML
+            repositoryService.addModelEditorSource(newModel.getId(), StrUtil.utf8Bytes(updateReqVO.getBpmnXml()));
+
+            List<BpmTaskAssignRuleDO> taskAssignRuleListByModelId = bpmTaskAssignRuleService.getTaskAssignRuleListByModelId2(model.getId());
+            for (BpmTaskAssignRuleDO bpmTaskAssignRuleDO : taskAssignRuleListByModelId) {
+                bpmTaskAssignRuleDO.setModelId(newModel.getId());
+                BpmTaskAssignRuleCreateReqVO bpmTaskAssignRuleCreateReqVO = BeanUtils.toBean(bpmTaskAssignRuleDO, BpmTaskAssignRuleCreateReqVO.class);
+                bpmTaskAssignRuleService.createTaskAssignRule(bpmTaskAssignRuleCreateReqVO);
+            }
+
+            modelService.deployModel(newModel.getId());
+        }
+        return CommonResult.success("成功");
+    }
+
     @PostMapping("/create")
     @Operation(summary = "新建模型")
     @PreAuthorize("@ss.hasPermission('bpm:model:create')")

+ 9 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmTaskAssignRuleMapper.java

@@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
+import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
 import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO;
 import org.apache.ibatis.annotations.Mapper;
 import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.*;
@@ -36,6 +37,14 @@ public interface BpmTaskAssignRuleMapper extends BaseMapperX<BpmTaskAssignRuleDO
                 .eq("process_definition_id", BpmTaskAssignRuleDO.PROCESS_DEFINITION_ID_NULL));
     }
 
+    @TenantIgnore
+    default List<BpmTaskAssignRuleDO> selectListByModelId2(String modelId) {
+        return selectList(new QueryWrapperX<BpmTaskAssignRuleDO>()
+                .eq("tenant_id", 1L)
+                .eq("model_id", modelId)
+                .eq("process_definition_id", BpmTaskAssignRuleDO.PROCESS_DEFINITION_ID_NULL));
+    }
+
     default List<BpmTaskAssignRuleDO> selectListByProcessDefinitionId(String processDefinitionId,
                                                                       @Nullable String taskDefinitionKey) {
         return selectList(new QueryWrapperX<BpmTaskAssignRuleDO>()

+ 1 - 1
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/listener/BpmTaskEventListener.java

@@ -53,7 +53,7 @@ public class BpmTaskEventListener extends AbstractFlowableEngineEventListener {
 
     @Override
     protected void taskAssigned(FlowableEngineEntityEvent event) {
-        taskService.updateTaskExtAssign((Task)event.getEntity());
+        // taskService.updateTaskExtAssign((Task)event.getEntity());
     }
 
     @Override

+ 4 - 1
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmModelServiceImpl.java

@@ -291,7 +291,10 @@ public class BpmModelServiceImpl implements BpmModelService {
     }
 
     private Model getModelByKey(String key) {
-        return repositoryService.createModelQuery().modelKey(key).singleResult();
+        return repositoryService.createModelQuery()
+                .modelKey(key)
+                .modelTenantId(FlowableUtils.getTenantId())
+                .singleResult();
     }
 
     @Override

+ 3 - 1
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmProcessDefinitionServiceImpl.java

@@ -86,7 +86,9 @@ public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionServ
 
     @Override
     public ProcessDefinition getActiveProcessDefinition(String key) {
-        return repositoryService.createProcessDefinitionQuery().processDefinitionKey(key).active().singleResult();
+        return repositoryService.createProcessDefinitionQuery()
+                .processDefinitionTenantId(FlowableUtils.getTenantId())
+                .processDefinitionKey(key).active().singleResult();
     }
 
     @Override

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 312 - 1
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java


+ 8 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskAssignRuleService.java

@@ -37,6 +37,14 @@ public interface BpmTaskAssignRuleService {
      */
     List<BpmTaskAssignRuleDO> getTaskAssignRuleListByModelId(String modelId);
 
+    /**
+     * 获得流程模型的任务规则数组
+     *
+     * @param modelId 流程模型的编号
+     * @return 任务规则数组
+     */
+    List<BpmTaskAssignRuleDO> getTaskAssignRuleListByModelId2(String modelId);
+
     /**
      * 获得流程定义的任务分配规则数组
      *

+ 14 - 2
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskAssignRuleServiceImpl.java

@@ -19,6 +19,8 @@ import cn.iocoder.yudao.module.bpm.framework.flowable.core.behavior.script.BpmTa
 import cn.iocoder.yudao.module.bpm.service.definition.BpmModelService;
 import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService;
 import cn.iocoder.yudao.module.bpm.service.definition.BpmUserGroupService;
+import cn.iocoder.yudao.module.employee.api.EmployeeApi;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 import cn.iocoder.yudao.module.system.api.dept.DeptApi;
 import cn.iocoder.yudao.module.system.api.dept.PostApi;
 import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
@@ -82,6 +84,8 @@ public class BpmTaskAssignRuleServiceImpl implements BpmTaskAssignRuleService {
     @Resource
     private AdminUserApi adminUserApi;
     @Resource
+    private EmployeeApi employeeApi;
+    @Resource
     private DictDataApi dictDataApi;
     @Resource
     private PermissionApi permissionApi;
@@ -105,6 +109,10 @@ public class BpmTaskAssignRuleServiceImpl implements BpmTaskAssignRuleService {
     public List<BpmTaskAssignRuleDO> getTaskAssignRuleListByModelId(String modelId) {
         return taskRuleMapper.selectListByModelId(modelId);
     }
+    @Override
+    public List<BpmTaskAssignRuleDO> getTaskAssignRuleListByModelId2(String modelId) {
+        return taskRuleMapper.selectListByModelId2(modelId);
+    }
 
     @Override
     public List<BpmTaskAssignRuleRespVO> getTaskAssignRuleList(String modelId, String processDefinitionId) {
@@ -343,9 +351,13 @@ public class BpmTaskAssignRuleServiceImpl implements BpmTaskAssignRuleService {
             return;
         }
         Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(assigneeUserIds);
+        List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(assigneeUserIds);
+        Map<Long, EmployeeRespDTO> respDTOMap = convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
         assigneeUserIds.removeIf(id -> {
-            AdminUserRespDTO user = userMap.get(id);
-            return user == null || !CommonStatusEnum.ENABLE.getStatus().equals(user.getStatus());
+            // AdminUserRespDTO user = userMap.get(id);
+            EmployeeRespDTO employee = respDTOMap.get(id);
+            // return user == null || !CommonStatusEnum.ENABLE.getStatus().equals(user.getStatus());
+            return employee == null;
         });
     }