From 658a3d7656bf54876b7483b08a196c7d00f83840 Mon Sep 17 00:00:00 2001 From: lijiarao Date: Mon, 16 Oct 2023 15:35:59 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E6=B5=81=E7=A8=8B=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E7=BB=91=E5=AE=9A=E5=AE=A1=E6=89=B9=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/流程.sql | 121 +++++++++++------ .../api/fallback/SysBaseAPIFallback.java | 5 + .../java/com/jero/common/api/CommonAPI.java | 2 + .../com/jero/common/aspect/DictAspect.java | 85 +++++++++++- .../common/aspect/annotation/DictPoint.java | 17 +++ .../modules/system/mapper/SysUserMapper.java | 1 + .../system/mapper/xml/SysUserMapper.xml | 4 + .../system/service/impl/SysBaseApiImpl.java | 5 + .../controller/ActivitiController.java | 110 +++++---------- .../controller/ModelerController.java | 55 +------- .../activiti/entity/ProcessModelNode.java | 20 ++- .../modules/activiti/entity/ProcessNode.java | 22 +-- .../activiti/entity/ProcessNodeLink.java | 33 +++-- .../activiti/entity/ProcessNodeOrigin.java | 125 ------------------ .../activiti/enums/VariableTypeEnum.java | 39 ++++++ .../mapper/LawsProcessNodeLinkMapper.java | 11 -- .../mapper/LawsProcessNodeMapper.java | 11 -- .../mapper/LawsProcessNodeOriginMapper.java | 14 -- .../mapper/ProcessNodeLinkMapper.java | 19 +++ .../activiti/mapper/ProcessNodeMapper.java | 15 +++ .../mapper/xml/LawsProcessNodeMapper.xml | 24 ---- .../xml/LawsProcessNodeOriginMapper.xml | 30 ----- ...nkMapper.xml => ProcessNodeLinkMapper.xml} | 2 +- .../activiti/mapper/xml/ProcessNodeMapper.xml | 24 ++++ .../service/LawsProcessNodeLinkService.java | 15 --- .../service/LawsProcessNodeOriginService.java | 73 ---------- .../service/LawsProcessNodeService.java | 15 --- .../service/ProcessModelNodeService.java | 26 ++++ .../service/ProcessNodeLinkService.java | 69 ++++++++++ .../activiti/service/ProcessNodeService.java | 58 ++++++++ .../service/impl/ProcessServiceImpl.java | 6 - 31 files changed, 548 insertions(+), 508 deletions(-) create mode 100644 laws-base/laws-base-core/src/main/java/com/jero/common/aspect/annotation/DictPoint.java delete mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/entity/ProcessNodeOrigin.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/enums/VariableTypeEnum.java delete mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/mapper/LawsProcessNodeLinkMapper.java delete mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/mapper/LawsProcessNodeMapper.java delete mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/mapper/LawsProcessNodeOriginMapper.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/mapper/ProcessNodeLinkMapper.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/mapper/ProcessNodeMapper.java delete mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/LawsProcessNodeMapper.xml delete mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/LawsProcessNodeOriginMapper.xml rename laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/{LawsProcessNodeLinkMapper.xml => ProcessNodeLinkMapper.xml} (90%) create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/ProcessNodeMapper.xml delete mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/service/LawsProcessNodeLinkService.java delete mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/service/LawsProcessNodeOriginService.java delete mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/service/LawsProcessNodeService.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessNodeLinkService.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessNodeService.java diff --git a/db/流程.sql b/db/流程.sql index 6d997a6c..696edddb 100644 --- a/db/流程.sql +++ b/db/流程.sql @@ -1,44 +1,91 @@ -DROP TABLE IF EXISTS laws_process_node_origin; -create table laws_process_node_origin +-- auto-generated definition +create table process_model_node +( + id varchar(36) not null comment '主键id' + primary key, + model_id varchar(64) null comment '模型id', + node_name varchar(50) null comment '节点名称', + node_type varchar(50) null comment '节点类型', + xml_sub_node_id varchar(50) null comment '子流程id', + xml_node_id varchar(50) null comment 'xml节点Id', + xml_source_ref varchar(50) null comment 'xml来源节点id', + xml_target_ref varchar(50) null comment 'xml目标节点id', + variable_type varchar(50) null comment '变量类型', + variable_name varchar(50) null comment '变量名称', + is_approval_node tinyint null comment '是否审批节点', + is_can_deleted tinyint null comment '是否可删除', + sort tinyint null comment '排序', + create_by varchar(36) null comment '创建人', + create_time datetime null comment '创建时间', + update_by varchar(36) null comment '更新人', + update_time datetime null comment '更新时间', + sys_code varchar(64) null comment '所属部门' +) + comment '流程模型节点表'; + +create table process_node +( + id varchar(36) not null comment '主键id' + primary key, + process_definition_id varchar(64) null comment '流程定义id', + node_name varchar(50) null comment '节点名称', + variable_type varchar(50) null comment '变量类型', + variable_name varchar(50) null comment '变量名称', + sort tinyint null comment '排序', + create_by varchar(36) null comment '创建人', + create_time datetime null comment '创建时间', + update_by varchar(36) null comment '更新人', + update_time datetime null comment '更新时间', + sys_code varchar(64) null comment '所属部门' +) + comment '流程定义节点表'; + +create table process_node_link ( id varchar(36) not null primary key comment '主键id', process_definition_id varchar(64) comment '流程定义id', - node_name varchar(50) comment '节点名称', - node_type varchar(50) comment '节点类型', - xml_node_id varchar(50) comment 'xml节点Id', - xml_source_ref varchar(50) comment 'xml来源节点id', - xml_target_ref varchar(50) comment 'xml目标节点id', - is_approval_node tinyint(4) comment '是否审批节点', - is_can_deleted tinyint(4) comment '是否可删除', - sort tinyint(4) comment '排序', - create_by varchar(36) comment '创建人', - create_time datetime comment '创建时间', - update_by varchar(36) comment '更新人', - update_time datetime comment '更新时间', - sys_code varchar(64) comment '所属部门' -) comment = '流程节点_来源'; + process_node_id varchar(36) comment '流程节点id', + process_instance_id varchar(64) comment '流程实例id', + user_id varchar(36) comment '用户id' +) comment = '流程实例节点关联用户表'; -DROP TABLE IF EXISTS laws_process_node; -create table laws_process_node +create table process_approval_record ( - id varchar(36) not null primary key comment '主键id', - process_definition_id varchar(64) comment '流程定义id', - node_name varchar(50) comment '节点名称', - is_approval_node tinyint(4) comment '是否审批节点', - is_can_deleted tinyint(4) comment '是否可删除', - sort tinyint(4) comment '排序', - create_by varchar(36) comment '创建人', - create_time datetime comment '创建时间', - update_by varchar(36) comment '更新人', - update_time datetime comment '更新时间', - sys_code varchar(64) comment '所属部门' -) comment = '流程节点'; + id varchar(32) not null comment '主键' + primary key, + task_id varchar(64) comment '任务id', + task_name varchar(255) comment '任务名称', + process_instance_id varchar(64) comment '流程实例id', + msg_type varchar(120) comment '资源类型', + user_id varchar(32) comment '处理人id', + mesg longtext comment '信息', + finish_flag tinyint(4) comment '完成注记(0未完成,1完成)', + project_id varchar(32) comment '项目id', + commit_flag tinyint(4) comment '审批意见(0同意,1不同意)', + commit_text varchar(255) comment '审批内容', + prc_name varchar(255) comment '流程名称', + create_time datetime default current_timestamp comment '创建时间', + update_time datetime comment '更新时间', + end_time datetime comment '完成时间' +) comment '流程审批记录表'; -DROP TABLE IF EXISTS laws_process_node_link; -create table laws_process_node_link +create table process_all ( - id varchar(36) not null primary key comment '主键id', - process_node_id varchar(36) comment '流程节点id', - type int(1) comment '类型(1-用户、2-部门)', - user_depart_id varchar(36) comment '用户id,部门id)' -) comment = '流程节点关联用户部门表'; \ No newline at end of file + id varchar(32) not null + primary key, + prc_name varchar(255) comment '流程名称', + process_instance_id varchar(64) comment '流程实例id', + prc_mes varchar(255) comment '流程描述', + prc_num varchar(50) comment '流程编号', + create_user_id varchar(50) comment '创建人id', + prc_type varchar(50) comment '流程类型', + create_user_name varchar(255) comment '发起人名称', + mes longtext comment 'json信息', + create_time datetime default current_timestamp comment '创建时间', + end_time datetime comment '完成时间', + over_time varchar(255) comment '耗时', + due_time datetime comment '截止时间', + project_id varchar(255) comment '项目id', + project_name varchar(255) comment '项目名称', + prc_name_en varchar(255) comment '流程名称(英文)' +) comment '流程总表'; \ No newline at end of file diff --git a/laws-base/laws-base-api/jero-system-cloud-api/src/main/java/com/jero/common/system/api/fallback/SysBaseAPIFallback.java b/laws-base/laws-base-api/jero-system-cloud-api/src/main/java/com/jero/common/system/api/fallback/SysBaseAPIFallback.java index 308dfd4d..ee7d151c 100644 --- a/laws-base/laws-base-api/jero-system-cloud-api/src/main/java/com/jero/common/system/api/fallback/SysBaseAPIFallback.java +++ b/laws-base/laws-base-api/jero-system-cloud-api/src/main/java/com/jero/common/system/api/fallback/SysBaseAPIFallback.java @@ -289,6 +289,11 @@ public class SysBaseAPIFallback implements ISysBaseAPI { return null; } + @Override + public String translateUserRealNameFromTable(String id) { + return null; + } + @Override public void sendEmailMsg(String email,String title,String content) { // do other diff --git a/laws-base/laws-base-core/src/main/java/com/jero/common/api/CommonAPI.java b/laws-base/laws-base-core/src/main/java/com/jero/common/api/CommonAPI.java index e91300de..1bd72506 100644 --- a/laws-base/laws-base-core/src/main/java/com/jero/common/api/CommonAPI.java +++ b/laws-base/laws-base-core/src/main/java/com/jero/common/api/CommonAPI.java @@ -138,4 +138,6 @@ public interface CommonAPI { * @return JSONObject */ String queryTableDictTextByKey(String table,String text,String code, String key); + + String translateUserRealNameFromTable(String id); } diff --git a/laws-base/laws-base-core/src/main/java/com/jero/common/aspect/DictAspect.java b/laws-base/laws-base-core/src/main/java/com/jero/common/aspect/DictAspect.java index 8765b4e8..b44676b4 100644 --- a/laws-base/laws-base-core/src/main/java/com/jero/common/aspect/DictAspect.java +++ b/laws-base/laws-base-core/src/main/java/com/jero/common/aspect/DictAspect.java @@ -1,5 +1,6 @@ package com.jero.common.aspect; +import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -52,6 +53,9 @@ public class DictAspect { public void excudeService() { // do other } + @Pointcut("@annotation(com.jero.common.aspect.annotation.DictPoint)") + public void dictPointCut() { + } @Around("excudeService()") public Object doAround(ProceedingJoinPoint pjp) throws Throwable { @@ -66,6 +70,19 @@ public class DictAspect { return result; } + @Around("dictPointCut()") + public Object arround(ProceedingJoinPoint point) throws Throwable { + long time1 = System.currentTimeMillis(); + Object result = point.proceed(); + long time2 = System.currentTimeMillis(); + log.debug("获取JSON数据 耗时:" + (time2 - time1) + "ms"); + long start = System.currentTimeMillis(); + this.parseMethodDictText(result); + long end = System.currentTimeMillis(); + log.debug("解析注入JSON数据 耗时" + (end - start) + "ms"); + return result; + } + /** * 本方法针对返回对象为Result 的IPage的分页列表数据进行动态字典注入 * 字典注入实现 通过对实体类添加注解@dict 来标识需要的字典内容,字典分为单字典code即可 ,table字典 code table text配合使用与原来jero的用法相同 @@ -396,7 +413,12 @@ public class DictAspect { log.warn(e.getMessage()); } }else { - tmpValue= commonAPI.translateDictFromTable(table,text,code,k.trim()); + //处理用户要翻译为姓名加工号 + if ("sys_user".equals(table)&&"realname".equals(text)&&"id".equals(code)){ + tmpValue= commonAPI.translateUserRealNameFromTable(k.trim()); + }else { + tmpValue= commonAPI.translateDictFromTable(table,text,code,k.trim()); + } } }else { String keyString = String.format(SYS_CACHE_DICT_S_S,code,k.trim()); @@ -413,5 +435,66 @@ public class DictAspect { return tmpValue; } + /** + * @param result + */ + private void parseMethodDictText(Object result) { + if (result instanceof Result) { + Object result1 = ((Result) result).getResult(); + String jsonStr = JSONUtil.toJsonStr(result1); + if (JSONUtil.isTypeJSONObject(jsonStr)) { + JSONObject translate = translate(result1); + ((Result) result).setResult(translate); + } else { + List items = new ArrayList<>(); + for (Object o : (List) result1) { + JSONObject translate = translate(o); + items.add(translate); + } + ((Result) result).setResult(items); + } + } + } + + /** + * @param record + * @return + */ + private JSONObject translate(Object record) { + ObjectMapper mapper = new ObjectMapper(); + String json = "{}"; + try { + //解决@JsonFormat注解解析不了的问题详见SysAnnouncement类的@JsonFormat + json = mapper.writeValueAsString(record); + } catch (JsonProcessingException e) { + log.error("json解析失败" + e.getMessage(), e); + } + JSONObject item = JSONObject.parseObject(json); + //update-begin--Author:scott -- Date:20190603 ----for:解决继承实体字段无法翻译问题------ + //for (Field field : record.getClass().getDeclaredFields()) { + for (Field field : oConvertUtils.getAllFields(record)) { + //update-end--Author:scott -- Date:20190603 ----for:解决继承实体字段无法翻译问题------ + if (field.getAnnotation(Dict.class) != null) { + String code = field.getAnnotation(Dict.class).dicCode(); + String text = field.getAnnotation(Dict.class).dicText(); + String table = field.getAnnotation(Dict.class).dictTable(); + String key = String.valueOf(item.get(field.getName())); + + //翻译字典值对应的txt + String textValue = translateDictValue(code, text, table, key); + + log.debug(" 字典Val : " + textValue); + log.debug(" __翻译字典字段__ " + field.getName() + CommonConstant.DICT_TEXT_SUFFIX + ": " + textValue); + item.put(field.getName() + CommonConstant.DICT_TEXT_SUFFIX, textValue); + } + //date类型默认转换string格式化日期 + if (field.getType().getName().equals("java.util.Date") && field.getAnnotation(JsonFormat.class) == null && item.get(field.getName()) != null) { + SimpleDateFormat aDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + item.put(field.getName(), aDate.format(new Date((Long) item.get(field.getName())))); + } + } + return item; + } + } diff --git a/laws-base/laws-base-core/src/main/java/com/jero/common/aspect/annotation/DictPoint.java b/laws-base/laws-base-core/src/main/java/com/jero/common/aspect/annotation/DictPoint.java new file mode 100644 index 00000000..75ff29fc --- /dev/null +++ b/laws-base/laws-base-core/src/main/java/com/jero/common/aspect/annotation/DictPoint.java @@ -0,0 +1,17 @@ +package com.jero.common.aspect.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 字典转换点注解 + * 加到方法上,返回值会返回字典数据 + * @author liJiaRao + * @date 2021-08-02 9:44 + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface DictPoint { +} diff --git a/laws-module-system/src/main/java/com/jero/modules/system/mapper/SysUserMapper.java b/laws-module-system/src/main/java/com/jero/modules/system/mapper/SysUserMapper.java index e5d5f44d..9de52fe0 100644 --- a/laws-module-system/src/main/java/com/jero/modules/system/mapper/SysUserMapper.java +++ b/laws-module-system/src/main/java/com/jero/modules/system/mapper/SysUserMapper.java @@ -168,4 +168,5 @@ public interface SysUserMapper extends BaseMapper { List getUserListByDepIds(@Param("departIds") List departIds); + String translateUserRealNameFromTable(@Param("id") String id); } diff --git a/laws-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysUserMapper.xml b/laws-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysUserMapper.xml index 5ef8e349..f9566b6c 100644 --- a/laws-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysUserMapper.xml +++ b/laws-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysUserMapper.xml @@ -215,4 +215,8 @@ + diff --git a/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysBaseApiImpl.java b/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysBaseApiImpl.java index bccb8246..86e0b5d3 100644 --- a/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysBaseApiImpl.java +++ b/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysBaseApiImpl.java @@ -1181,4 +1181,9 @@ public class SysBaseApiImpl implements ISysBaseAPI { return dictService.queryTableDictTextByKey(table,text,code,key); } + @Override + public String translateUserRealNameFromTable(String id) { + return userMapper.translateUserRealNameFromTable(id); + } + } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/controller/ActivitiController.java b/laws-modules/src/main/java/com/jero/modules/activiti/controller/ActivitiController.java index f9b83831..38c3e985 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/controller/ActivitiController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/controller/ActivitiController.java @@ -5,22 +5,22 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import com.jero.common.api.vo.Result; +import com.jero.common.aspect.annotation.DictPoint; import com.jero.common.constant.enums.LanguageEnum; import com.jero.common.util.MessageUtils; +import com.jero.modules.activiti.entity.ProcessModelNode; import com.jero.modules.activiti.entity.ProcessNode; -import com.jero.modules.activiti.entity.ProcessNodeOrigin; -import com.jero.modules.activiti.service.LawsProcessNodeOriginService; -import com.jero.modules.activiti.service.LawsProcessNodeService; +import com.jero.modules.activiti.service.ProcessNodeLinkService; +import com.jero.modules.activiti.service.ProcessNodeService; +import com.jero.modules.activiti.service.ProcessModelNodeService; import com.jero.modules.activiti.service.ProcessService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; +import com.jero.modules.laws.common.constant.ResultCommon; +import io.swagger.annotations.*; import lombok.extern.slf4j.Slf4j; import org.activiti.bpmn.converter.BpmnXMLConverter; import org.activiti.bpmn.model.BpmnModel; import org.activiti.editor.language.json.converter.BpmnJsonConverter; import org.activiti.engine.*; -import org.activiti.engine.repository.Deployment; import org.activiti.engine.repository.ProcessDefinition; import org.activiti.engine.repository.ProcessDefinitionQuery; import org.activiti.engine.runtime.ProcessInstance; @@ -32,7 +32,6 @@ import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; @@ -57,53 +56,11 @@ public class ActivitiController { @Resource private TaskService taskService; @Resource - private LawsProcessNodeOriginService processNodeOriginService; + private ProcessNodeService processNodeService; @Resource - private LawsProcessNodeService processNodeService; - @ApiOperation(value="部署流程图") - @GetMapping("/deploy") - public Result> deploy(@RequestParam(value = "name", required = false) String name, - @RequestParam(value = "classpathResource") String classpathResource, - @RequestParam(value = "resourceName") String resourceName, - @RequestPart(value = "files", required = false) MultipartFile file) { - if (StringUtils.isBlank(name)) { - //根据流程定义Key查询 - name = "出差申请流程"; - } - -// 3、使用RepositoryService进行部署 - Deployment deployment = null; - try { - deployment = repositoryService.createDeployment() - //.addClasspathResource("bpmn/diagram_1.bpmn20.xml") // 添加bpmn资源 - //.addClasspathResource("bpmn/business-trips.png") // 添加png资源 - //.addClasspathResource(classpathResource) - .addInputStream(resourceName, file.getInputStream()) - .disableSchemaValidation() - .key(name) - .name(name) - .deploy(); - - } catch (IOException e) { - e.printStackTrace(); - } - -// 4、输出部署信息 - Map map = new HashMap<>(); - - map.put("流程部署id:", deployment.getId()); - map.put("流程部署名称:", deployment.getName()); - map.put("流程部署key:", deployment.getKey()); - - //创建一个流程定义查询 - ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery(); - processDefinitionQuery.deploymentId(deployment.getId()); - ProcessDefinition processDefinition = processDefinitionQuery.singleResult(); - String processDefinitionId = processDefinition.getId(); - map.put("流程定义Id:", processDefinitionId); - - return Result.OK(map); - } + private ProcessModelNodeService modelNodeService; + @Resource + private ProcessNodeLinkService processNodeLinkService; @ApiOperation(value="启动流程") @PostMapping("/start") @@ -114,7 +71,7 @@ public class ActivitiController { // 2、获取RunTimeService RuntimeService runtimeService = processEngine.getRuntimeService(); -// 3、根据流程定义Id启动流程 +// 3、根据流程key启动流程 ProcessInstance processInstance = runtimeService .startProcessInstanceByKey(key, map); String processDefinitionId = processInstance.getProcessDefinitionId(); @@ -125,25 +82,6 @@ public class ActivitiController { map1.put("流程实例id:", processInstance.getId()); map1.put("当前活动Id:", processInstance.getActivityId()); - //从流程节点源表中保存一份流程节点信息到流程节点表 - LambdaQueryWrapper processNodeOriginLambdaQueryWrapper = new LambdaQueryWrapper<>(); - processNodeOriginLambdaQueryWrapper.eq(ProcessNodeOrigin::getNodeType,"userTask") - .orderByAsc(ProcessNodeOrigin::getSort); - - List processNodeOrigins = processNodeOriginService.list(processNodeOriginLambdaQueryWrapper); - List processNodes = new ArrayList<>(); - for (ProcessNodeOrigin processNodeOrigin : processNodeOrigins) { - ProcessNode processNode = new ProcessNode(); - BeanUtils.copyProperties(processNodeOrigin, processNode); - processNode.setId(null); - processNodes.add(processNode); - } - processNodeService.saveBatch(processNodes); - for (ProcessNode processNode : processNodes) { - if (processNode.getNodeName().equals("填写基本信息,在线编辑,分发其他起草人")) { - //todo 关联关系 - } - } String mainDrafter = map.get("mainDrafter").toString(); return Result.OK(map1); @@ -333,4 +271,28 @@ public class ActivitiController { LanguageEnum language = MessageUtils.getLanguage(); return Result.OK(msg1 + "\n" + msg2); } + @DictPoint + @GetMapping("/getNodeList") + @ApiImplicitParams({ + @ApiImplicitParam(name = "processDefinitionId", value = "流程定义id"), + @ApiImplicitParam(name = "processInstanceId", value = "流程实例id(这个参数会去查绑定好的用户)") + }) + @ApiOperation("获得节点列表") + public Result> getNodeList(String processDefinitionId,String processInstanceId) { + //查询节点信息 + + List nodeList = processNodeService.getNodeList(processDefinitionId,processInstanceId); + return Result.OK(nodeList); + } + + @PostMapping("/saveNodeUserLink") + @ApiImplicitParams({ + @ApiImplicitParam(name = "processDefinitionId", value = "流程定义id"), + @ApiImplicitParam(name = "processInstanceId", value = "流程实例id") + }) + @ApiOperation("保存节点用户关系") + public Result saveNodeUserLink(String processDefinitionId,String processInstanceId,@RequestBody Map map) { + processNodeLinkService.saveNodeUserLink(processDefinitionId,processInstanceId,map); + return Result.OK(MessageUtils.getMessage(ResultCommon.OK)); + } } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/controller/ModelerController.java b/laws-modules/src/main/java/com/jero/modules/activiti/controller/ModelerController.java index 3321b3b1..ef11df51 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/controller/ModelerController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/controller/ModelerController.java @@ -10,7 +10,7 @@ import com.jero.common.util.MessageUtils; import com.jero.modules.activiti.entity.ProcessModelNode; import com.jero.modules.activiti.listener.CompleteListener; import com.jero.modules.activiti.listener.CreateListener; -import com.jero.modules.activiti.service.LawsProcessNodeOriginService; +import com.jero.modules.activiti.service.ProcessNodeService; import com.jero.modules.activiti.service.ProcessModelNodeService; import com.jero.modules.activiti.util.CreatedTools; import com.jero.modules.activiti.vo.AddTaskVO; @@ -35,11 +35,8 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamReader; -import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; @@ -61,7 +58,7 @@ public class ModelerController { @Autowired private ObjectMapper objectMapper; @Resource - private LawsProcessNodeOriginService processNodeOriginService; + private ProcessNodeService processNodeService; @Resource private ProcessModelNodeService processModelNodeService; //@Autowired @@ -102,12 +99,12 @@ public class ModelerController { ActivitiListener createListener = new ActivitiListener(); createListener.setEvent(TaskListener.EVENTNAME_CREATE); createListener.setImplementationType("class"); - createListener.setImplementation(CreateListener.class.toString()); + createListener.setImplementation(CreateListener.class.getName()); taskListeners.add(createListener); ActivitiListener completeListener = new ActivitiListener(); completeListener.setEvent(TaskListener.EVENTNAME_COMPLETE); completeListener.setImplementationType("class"); - completeListener.setImplementation(CompleteListener.class.toString()); + completeListener.setImplementation(CompleteListener.class.getName()); taskListeners.add(completeListener); userTask.setTaskListeners(taskListeners); } @@ -119,47 +116,6 @@ public class ModelerController { return Result.OK(modelId); } - @ApiOperation(value = "新建模板") - @ApiImplicitParam(name = "category_id", value = "类型id") - @SuppressWarnings("deprecation") - @GetMapping("/create") - public void newModel(HttpServletRequest request, HttpServletResponse response) - throws IOException { - // 初始化一个空模型 - Model model = repositoryService.newModel(); - - // 设置一些默认信息 - String name = ""; - String description = ""; - int revision = 1; - String key = "m_" + CreatedTools.getCreated(); - // 设置子系统 - //model.setTenantId("子系统1"); - //model.setCategory(category_id); - - ObjectNode modelNode = objectMapper.createObjectNode(); - modelNode.put(ModelDataJsonConstants.MODEL_NAME, name); - modelNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, description); - modelNode.put(ModelDataJsonConstants.MODEL_REVISION, revision); - - model.setName(name); - model.setKey(key); - model.setMetaInfo(modelNode.toString()); - - repositoryService.saveModel(model); - String id = model.getId(); - - // 完善ModelEditorSource - ObjectNode editorNode = objectMapper.createObjectNode(); - editorNode.put("id", "canvas"); - editorNode.put("resourceId", "canvas"); - ObjectNode stencilSetNode = objectMapper.createObjectNode(); - stencilSetNode.put("namespace", "http://b3mn.org/stencilset/bpmn2.0#"); - editorNode.put("stencilset", stencilSetNode); - repositoryService.addModelEditorSource(id, editorNode.toString().getBytes("utf-8")); - response.sendRedirect(request.getContextPath() + "/modeler.html?modelId=" + id); - } - @ApiOperation(value = "模板列表") @ApiImplicitParams({ @ApiImplicitParam(name = "name", value = "名称"), @ApiImplicitParam(name = "category", value = "类型") }) @@ -281,7 +237,8 @@ public class ModelerController { processDefinitionQuery.deploymentId(deployment.getId()); ProcessDefinition processDefinition = processDefinitionQuery.singleResult(); String processDefinitionId = processDefinition.getId(); - processNodeOriginService.copyNodeFromModel(modelId,processDefinitionId); + processNodeService.copyNodeFromModel(modelId,processDefinitionId); + // 4、输出部署信息 Map map = new HashMap<>(); map.put("流程部署id:", deployment.getId()); diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/entity/ProcessModelNode.java b/laws-modules/src/main/java/com/jero/modules/activiti/entity/ProcessModelNode.java index eb8385e8..1e29be45 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/entity/ProcessModelNode.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/entity/ProcessModelNode.java @@ -12,13 +12,13 @@ import lombok.Data; /** * *@author liJiaRao - *@date 2023-10-08 18:01 + *@date 2023-10-16 10:09 */ /** - * 流程节点加签表 + * 流程模型节点表 */ -@ApiModel(description = "流程节点加签表") +@ApiModel(description = "流程模型节点表") @Data @TableName(value = "process_model_node") public class ProcessModelNode { @@ -78,6 +78,20 @@ public class ProcessModelNode { @ApiModelProperty(value = "xml目标节点id") private String xmlTargetRef; + /** + * 变量类型 + */ + @TableField(value = "variable_type") + @ApiModelProperty(value = "变量类型") + private String variableType; + + /** + * 变量名称 + */ + @TableField(value = "variable_name") + @ApiModelProperty(value = "变量名称") + private String variableName; + /** * 是否审批节点 */ diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/entity/ProcessNode.java b/laws-modules/src/main/java/com/jero/modules/activiti/entity/ProcessNode.java index 2ece1f23..bf0cec81 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/entity/ProcessNode.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/entity/ProcessNode.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.jero.common.aspect.annotation.Dict; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.util.Date; @@ -40,18 +41,18 @@ public class ProcessNode { private String nodeName; /** - * 是否审批节点 + * 变量类型 */ - @TableField(value = "is_approval_node") - @ApiModelProperty(value = "是否审批节点") - private Integer isApprovalNode; + @TableField(value = "variable_type") + @ApiModelProperty(value = "变量类型") + private String variableType; /** - * 是否可删除 + * 变量名称 */ - @TableField(value = "is_can_deleted") - @ApiModelProperty(value = "是否可删除") - private Integer isCanDeleted; + @TableField(value = "variable_name") + @ApiModelProperty(value = "变量名称") + private String variableName; /** * 排序 @@ -94,4 +95,9 @@ public class ProcessNode { @TableField(value = "sys_code") @ApiModelProperty(value = "所属部门") private String sysCode; + + @TableField(exist = false) + @ApiModelProperty(value = "关联用户id") + @Dict(dictTable = "sys_user",dicText = "realname",dicCode = "id") + private String linkUserIds; } \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/entity/ProcessNodeLink.java b/laws-modules/src/main/java/com/jero/modules/activiti/entity/ProcessNodeLink.java index d62abece..adaaa19f 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/entity/ProcessNodeLink.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/entity/ProcessNodeLink.java @@ -9,11 +9,15 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** - *流程节点关联用户部门表 + * *@author liJiaRao - *@date 2023-09-26 15:12 + *@date 2023-10-16 13:43 */ -@ApiModel(description = "流程节点关联用户部门表") + +/** + * 流程实例节点关联用户表 + */ +@ApiModel(description = "流程实例节点关联用户表") @Data @TableName(value = "process_node_link") public class ProcessNodeLink { @@ -24,6 +28,13 @@ public class ProcessNodeLink { @ApiModelProperty(value = "主键id") private String id; + /** + * 流程定义id + */ + @TableField(value = "process_definition_id") + @ApiModelProperty(value = "流程定义id") + private String processDefinitionId; + /** * 流程节点id */ @@ -32,16 +43,16 @@ public class ProcessNodeLink { private String processNodeId; /** - * 类型(1-用户、2-部门) + * 流程实例id */ - @TableField(value = "`type`") - @ApiModelProperty(value = "类型(1-用户、2-部门)") - private Integer type; + @TableField(value = "process_instance_id") + @ApiModelProperty(value = "流程实例id") + private String processInstanceId; /** - * 用户id,部门id) + * 用户id */ - @TableField(value = "user_depart_id") - @ApiModelProperty(value = "用户id,部门id)") - private String userDepartId; + @TableField(value = "user_id") + @ApiModelProperty(value = "用户id") + private String userId; } \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/entity/ProcessNodeOrigin.java b/laws-modules/src/main/java/com/jero/modules/activiti/entity/ProcessNodeOrigin.java deleted file mode 100644 index 0385247c..00000000 --- a/laws-modules/src/main/java/com/jero/modules/activiti/entity/ProcessNodeOrigin.java +++ /dev/null @@ -1,125 +0,0 @@ -package com.jero.modules.activiti.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import java.util.Date; -import lombok.Data; - -/** - *流程节点_来源 - *@author liJiaRao - *@date 2023-09-26 15:12 - */ -@ApiModel(description = "流程节点_来源") -@Data -@TableName(value = "process_node_origin") -public class ProcessNodeOrigin { - /** - * 主键id - */ - @TableId(value = "id", type = IdType.ASSIGN_ID) - @ApiModelProperty(value = "主键id") - private String id; - - /** - * 流程定义id - */ - @TableField(value = "process_definition_id") - @ApiModelProperty(value = "流程定义id") - private String processDefinitionId; - - /** - * 节点名称 - */ - @TableField(value = "node_name") - @ApiModelProperty(value = "节点名称") - private String nodeName; - - /** - * 节点类型 - */ - @TableField(value = "node_type") - @ApiModelProperty(value = "节点类型") - private String nodeType; - - /** - * xml节点Id - */ - @TableField(value = "xml_node_id") - @ApiModelProperty(value = "xml节点Id") - private String xmlNodeId; - - /** - * xml来源节点id - */ - @TableField(value = "xml_source_ref") - @ApiModelProperty(value = "xml来源节点id") - private String xmlSourceRef; - - /** - * xml目标节点id - */ - @TableField(value = "xml_target_ref") - @ApiModelProperty(value = "xml目标节点id") - private String xmlTargetRef; - - /** - * 是否审批节点 - */ - @TableField(value = "is_approval_node") - @ApiModelProperty(value = "是否审批节点") - private Integer isApprovalNode; - - /** - * 是否可删除 - */ - @TableField(value = "is_can_deleted") - @ApiModelProperty(value = "是否可删除") - private Integer isCanDeleted; - - /** - * 排序 - */ - @TableField(value = "sort") - @ApiModelProperty(value = "排序") - private Integer sort; - - /** - * 创建人 - */ - @TableField(value = "create_by") - @ApiModelProperty(value = "创建人") - private String createBy; - - /** - * 创建时间 - */ - @TableField(value = "create_time") - @ApiModelProperty(value = "创建时间") - private Date createTime; - - /** - * 更新人 - */ - @TableField(value = "update_by") - @ApiModelProperty(value = "更新人") - private String updateBy; - - /** - * 更新时间 - */ - @TableField(value = "update_time") - @ApiModelProperty(value = "更新时间") - private Date updateTime; - - /** - * 所属部门 - */ - @TableField(value = "sys_code") - @ApiModelProperty(value = "所属部门") - private String sysCode; -} \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/enums/VariableTypeEnum.java b/laws-modules/src/main/java/com/jero/modules/activiti/enums/VariableTypeEnum.java new file mode 100644 index 00000000..d7339456 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/enums/VariableTypeEnum.java @@ -0,0 +1,39 @@ +package com.jero.modules.activiti.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author liJiaRao + * @date 2023-10-16 11:53 + */ +@Getter +@AllArgsConstructor +public enum VariableTypeEnum { + /** + * A + */ + STRING("string", 1), + LIST("list", 1); + + private String name; + private Integer value; + + public static String getNameByValue(Integer value) { + for (VariableTypeEnum enumObject : values()) { + if (enumObject.getValue().equals(value)) { + return enumObject.getName(); + } + } + return null; + } + + public static Integer getValueByName(String name) { + for (VariableTypeEnum enumObject : values()) { + if (enumObject.getName().equals(name)) { + return enumObject.getValue(); + } + } + return null; + } +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/LawsProcessNodeLinkMapper.java b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/LawsProcessNodeLinkMapper.java deleted file mode 100644 index 037b7c81..00000000 --- a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/LawsProcessNodeLinkMapper.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.jero.modules.activiti.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.jero.modules.activiti.entity.ProcessNodeLink; - -/** - * @author liJiaRao - * @date 2023-09-26 15:12 - */ -public interface LawsProcessNodeLinkMapper extends BaseMapper { -} \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/LawsProcessNodeMapper.java b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/LawsProcessNodeMapper.java deleted file mode 100644 index d37f0f88..00000000 --- a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/LawsProcessNodeMapper.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.jero.modules.activiti.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.jero.modules.activiti.entity.ProcessNode; - -/** - * @author liJiaRao - * @date 2023-09-26 15:12 - */ -public interface LawsProcessNodeMapper extends BaseMapper { -} \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/LawsProcessNodeOriginMapper.java b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/LawsProcessNodeOriginMapper.java deleted file mode 100644 index 656b0ebb..00000000 --- a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/LawsProcessNodeOriginMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.jero.modules.activiti.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.jero.modules.activiti.entity.ProcessNodeOrigin; -import org.apache.ibatis.annotations.Param; - -import java.util.List; - -/** - * @author liJiaRao - * @date 2023-09-26 15:12 - */ -public interface LawsProcessNodeOriginMapper extends BaseMapper { -} \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/ProcessNodeLinkMapper.java b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/ProcessNodeLinkMapper.java new file mode 100644 index 00000000..4fc4b60a --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/ProcessNodeLinkMapper.java @@ -0,0 +1,19 @@ +package com.jero.modules.activiti.mapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import org.apache.ibatis.annotations.Param; +import java.util.List; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jero.modules.activiti.entity.ProcessNodeLink; + +/** + * @author liJiaRao + * @date 2023-09-26 15:12 + */ +public interface ProcessNodeLinkMapper extends BaseMapper { + + + +} \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/ProcessNodeMapper.java b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/ProcessNodeMapper.java new file mode 100644 index 00000000..8b0804ce --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/ProcessNodeMapper.java @@ -0,0 +1,15 @@ +package com.jero.modules.activiti.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jero.modules.activiti.entity.ProcessNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author liJiaRao + * @date 2023-09-26 15:12 + */ +public interface ProcessNodeMapper extends BaseMapper { + List selectByIdPdIdAndPiId(@Param("processDefinitionId") String processDefinitionId, @Param("processInstanceId") String processInstanceId); +} \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/LawsProcessNodeMapper.xml b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/LawsProcessNodeMapper.xml deleted file mode 100644 index 6d6f2e4b..00000000 --- a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/LawsProcessNodeMapper.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - id, process_definition_id, node_name, is_approval_node, is_can_deleted, sort, create_by, - create_time, update_by, update_time, sys_code - - \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/LawsProcessNodeOriginMapper.xml b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/LawsProcessNodeOriginMapper.xml deleted file mode 100644 index 02ba5421..00000000 --- a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/LawsProcessNodeOriginMapper.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - id, process_definition_id, node_name, node_type, xml_node_id, xml_source_ref, xml_target_ref, - is_approval_node, is_can_deleted, sort, create_by, create_time, update_by, update_time, - sys_code - - - \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/LawsProcessNodeLinkMapper.xml b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/ProcessNodeLinkMapper.xml similarity index 90% rename from laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/LawsProcessNodeLinkMapper.xml rename to laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/ProcessNodeLinkMapper.xml index 8a81de28..11394940 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/LawsProcessNodeLinkMapper.xml +++ b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/ProcessNodeLinkMapper.xml @@ -1,6 +1,6 @@ - + diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/ProcessNodeMapper.xml b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/ProcessNodeMapper.xml new file mode 100644 index 00000000..e462c4e3 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/ProcessNodeMapper.xml @@ -0,0 +1,24 @@ + + + + + + \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/service/LawsProcessNodeLinkService.java b/laws-modules/src/main/java/com/jero/modules/activiti/service/LawsProcessNodeLinkService.java deleted file mode 100644 index c19944a1..00000000 --- a/laws-modules/src/main/java/com/jero/modules/activiti/service/LawsProcessNodeLinkService.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.jero.modules.activiti.service; - -import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.jero.modules.activiti.mapper.LawsProcessNodeLinkMapper; -import com.jero.modules.activiti.entity.ProcessNodeLink; -/** - * - *@author liJiaRao - *@date 2023-09-26 15:12 - */ -@Service -public class LawsProcessNodeLinkService extends ServiceImpl { - -} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/service/LawsProcessNodeOriginService.java b/laws-modules/src/main/java/com/jero/modules/activiti/service/LawsProcessNodeOriginService.java deleted file mode 100644 index ba63eb99..00000000 --- a/laws-modules/src/main/java/com/jero/modules/activiti/service/LawsProcessNodeOriginService.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.jero.modules.activiti.service; - -import cn.hutool.core.lang.UUID; -import cn.hutool.core.util.RandomUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; -import com.jero.common.constant.enums.YesOrNoEnum; -import com.jero.common.exception.JeroBootException; -import com.jero.modules.activiti.entity.ProcessModelNode; -import com.jero.modules.activiti.mapper.ActGeBytearrayMapper; -import com.jero.modules.activiti.mapper.ProcessModelNodeMapper; -import com.jero.modules.activiti.vo.AddTaskVO; -import org.activiti.bpmn.BpmnAutoLayout; -import org.activiti.bpmn.converter.BpmnXMLConverter; -import org.activiti.bpmn.model.*; -import org.activiti.bpmn.model.Process; -import org.activiti.editor.language.json.converter.BpmnJsonConverter; -import org.activiti.engine.*; -import org.activiti.engine.repository.Model; -import org.activiti.engine.repository.ProcessDefinition; -import org.activiti.engine.repository.ProcessDefinitionQuery; -import org.apache.commons.io.IOUtils; -import org.springframework.beans.BeanUtils; -import org.springframework.stereotype.Service; -import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; - -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.jero.modules.activiti.mapper.LawsProcessNodeOriginMapper; -import com.jero.modules.activiti.entity.ProcessNodeOrigin; -/** - * - *@author liJiaRao - *@date 2023-09-26 15:12 - */ -@Service -public class LawsProcessNodeOriginService extends ServiceImpl { - @Resource - private RepositoryService repositoryService; - @Resource - private ProcessEngine processEngine; - @Resource - private ActGeBytearrayMapper actGeBytearrayMapper; - @Resource - private LawsProcessNodeOriginMapper processNodeOriginMapper; - @Resource - private ProcessModelNodeMapper processModelNodeMapper; - - public void copyNodeFromModel(String modelId, String processDefinitionId) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(ProcessModelNode::getModelId,modelId); - wrapper.isNotNull(ProcessModelNode::getSort); - List processModelNodes = processModelNodeMapper.selectList(wrapper); - - List processNodeOriginList = new ArrayList<>(); - for (ProcessModelNode processModelNode : processModelNodes) { - ProcessNodeOrigin processNodeOrigin = new ProcessNodeOrigin(); - BeanUtils.copyProperties(processModelNode,processNodeOrigin); - processNodeOrigin.setId(null); - processNodeOrigin.setProcessDefinitionId(processDefinitionId); - } - this.saveBatch(processNodeOriginList); - } - -} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/service/LawsProcessNodeService.java b/laws-modules/src/main/java/com/jero/modules/activiti/service/LawsProcessNodeService.java deleted file mode 100644 index 779cc4cb..00000000 --- a/laws-modules/src/main/java/com/jero/modules/activiti/service/LawsProcessNodeService.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.jero.modules.activiti.service; - -import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.jero.modules.activiti.mapper.LawsProcessNodeMapper; -import com.jero.modules.activiti.entity.ProcessNode; -/** - * - *@author liJiaRao - *@date 2023-09-26 15:12 - */ -@Service -public class LawsProcessNodeService extends ServiceImpl { - -} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessModelNodeService.java b/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessModelNodeService.java index b640f1a7..c9f34018 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessModelNodeService.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessModelNodeService.java @@ -8,6 +8,9 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import com.jero.common.constant.enums.YesOrNoEnum; import com.jero.common.exception.JeroBootException; import com.jero.modules.activiti.entity.ProcessModelNode; +import com.jero.modules.activiti.enums.VariableTypeEnum; +import com.jero.modules.activiti.listener.CompleteListener; +import com.jero.modules.activiti.listener.CreateListener; import com.jero.modules.activiti.vo.AddTaskVO; import lombok.extern.slf4j.Slf4j; import org.activiti.bpmn.BpmnAutoLayout; @@ -340,6 +343,19 @@ public class ProcessModelNodeService extends ServiceImpl taskListeners = userTask.getTaskListeners(); + ActivitiListener createListener = new ActivitiListener(); + createListener.setEvent(TaskListener.EVENTNAME_CREATE); + createListener.setImplementationType("class"); + createListener.setImplementation(CreateListener.class.getName()); + taskListeners.add(createListener); + ActivitiListener completeListener = new ActivitiListener(); + completeListener.setEvent(TaskListener.EVENTNAME_COMPLETE); + completeListener.setImplementationType("class"); + completeListener.setImplementation(CompleteListener.class.getName()); + taskListeners.add(completeListener); + userTask.setTaskListeners(taskListeners); return userTask; } protected static SequenceFlow createSequenceFlow(String from, String to) { @@ -398,6 +414,16 @@ public class ProcessModelNodeService extends ServiceImpl { + @Resource + private ProcessNodeService processNodeService; + + public void saveNodeUserLink(String processDefinitionId, String processInstanceId, Map map) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ProcessNode::getProcessDefinitionId,processDefinitionId); + List processNodeList = processNodeService.list(wrapper); + List processNodeLinks = new ArrayList<>(); + for (ProcessNode processNode : processNodeList) { + String processNodeId = processNode.getId(); + String variableType = processNode.getVariableType(); + String variableName = processNode.getVariableName(); + List userIdList = new ArrayList<>(); + if (map.containsKey(variableName)) { + String s = (String) map.get(variableName); + if (VariableTypeEnum.LIST.getName().equals(variableType)) { + userIdList.addAll(Arrays.asList(s.split(","))); + }else { + userIdList.add(s); + } + } + if (!userIdList.isEmpty()) { + for (String userId : userIdList) { + ProcessNodeLink processNodeLink = new ProcessNodeLink(); + processNodeLink.setProcessDefinitionId(processDefinitionId); + processNodeLink.setProcessNodeId(processNodeId); + processNodeLink.setProcessInstanceId(processInstanceId); + processNodeLink.setUserId(userId); + processNodeLinks.add(processNodeLink); + } + } + } + this.saveBatch(processNodeLinks); + + } + + public List selectByProcessInstanceId(String processInstanceId) { + LambdaQueryWrapper myQuery = Wrappers.lambdaQuery(ProcessNodeLink.class); + myQuery.eq(ProcessNodeLink::getProcessInstanceId, processInstanceId); + return list(myQuery); + } + +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessNodeService.java b/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessNodeService.java new file mode 100644 index 00000000..cba8842f --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessNodeService.java @@ -0,0 +1,58 @@ +package com.jero.modules.activiti.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.jero.modules.activiti.entity.ProcessModelNode; +import com.jero.modules.activiti.mapper.ProcessModelNodeMapper; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jero.modules.activiti.mapper.ProcessNodeMapper; +import com.jero.modules.activiti.entity.ProcessNode; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * + *@author liJiaRao + *@date 2023-09-26 15:12 + */ +@Service +public class ProcessNodeService extends ServiceImpl { + @Resource + private ProcessModelNodeMapper processModelNodeMapper; + @Resource + private ProcessNodeLinkService processNodeLinkService; + @Resource + private ProcessNodeMapper processNodeMapper; + + public void copyNodeFromModel(String modelId, String processDefinitionId) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ProcessModelNode::getNodeType,"userTask"); + wrapper.eq(ProcessModelNode::getModelId,modelId); + wrapper.isNotNull(ProcessModelNode::getSort); + List processModelNodes = processModelNodeMapper.selectList(wrapper); + + List processNodeList = new ArrayList<>(); + for (ProcessModelNode processModelNode : processModelNodes) { + ProcessNode node = new ProcessNode(); + BeanUtils.copyProperties(processModelNode,node); + node.setId(null); + node.setProcessDefinitionId(processDefinitionId); + processNodeList.add(node); + } + this.saveBatch(processNodeList); + } + + public List getNodeList(String processDefinitionId, String processInstanceId) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ProcessNode::getProcessDefinitionId,processDefinitionId); + wrapper.orderByAsc(ProcessNode::getSort); + //List processNodeList = this.list(wrapper); + List processNodeList = processNodeMapper.selectByIdPdIdAndPiId(processDefinitionId,processInstanceId); + + return processNodeList; + } +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/service/impl/ProcessServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/service/impl/ProcessServiceImpl.java index be76e812..87f91085 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/service/impl/ProcessServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/service/impl/ProcessServiceImpl.java @@ -1,8 +1,6 @@ package com.jero.modules.activiti.service.impl; import com.jero.modules.activiti.config.WorkflowConstants; -import com.jero.modules.activiti.mapper.ActGeBytearrayMapper; -import com.jero.modules.activiti.mapper.LawsProcessNodeOriginMapper; import com.jero.modules.activiti.service.ProcessService; import com.jero.modules.activiti.service.impl.image.ICustomProcessDiagramGenerator; import lombok.extern.slf4j.Slf4j; @@ -48,10 +46,6 @@ public class ProcessServiceImpl implements ProcessService { private TaskService taskService; @Autowired private ManagementService managementService; - @Resource - private ActGeBytearrayMapper actGeBytearrayMapper; - @Resource - private LawsProcessNodeOriginMapper processNodeOriginMapper; private List getHighLightedFlows(BpmnModel bpmnModel, ProcessDefinitionEntity processDefinitionEntity, List historicActivityInstances) { // 高亮流程已发生流转的线id集合