fangq 4 년 전
부모
커밋
2cc666344c
47개의 변경된 파일959개의 추가작업 그리고 2722개의 파일을 삭제
  1. 3 3
      pom.xml
  2. 0 146
      src/main/java/org/springblade/flow/business/controller/WorkController.java
  3. 0 72
      src/main/java/org/springblade/flow/business/service/FlowBusinessService.java
  4. 0 77
      src/main/java/org/springblade/flow/business/service/IFlowService.java
  5. 0 327
      src/main/java/org/springblade/flow/business/service/impl/FlowBusinessServiceImpl.java
  6. 0 97
      src/main/java/org/springblade/flow/business/service/impl/FlowServiceImpl.java
  7. 0 61
      src/main/java/org/springblade/flow/core/constant/ProcessConstant.java
  8. 0 179
      src/main/java/org/springblade/flow/core/entity/BladeFlow.java
  9. 0 66
      src/main/java/org/springblade/flow/core/utils/FlowUtil.java
  10. 0 71
      src/main/java/org/springblade/flow/core/utils/TaskUtil.java
  11. 0 65
      src/main/java/org/springblade/flow/demo/leave/controller/LeaveController.java
  12. 0 6
      src/main/java/org/springblade/flow/demo/leave/mapper/LeaveMapper.xml
  13. 0 79
      src/main/java/org/springblade/flow/demo/leave/service/impl/LeaveServiceImpl.java
  14. 0 6
      src/main/java/org/springblade/flow/demo/package-info.java
  15. 0 44
      src/main/java/org/springblade/flow/engine/config/FlowableConfiguration.java
  16. 0 52
      src/main/java/org/springblade/flow/engine/constant/FlowEngineConstant.java
  17. 0 73
      src/main/java/org/springblade/flow/engine/controller/FlowFollowController.java
  18. 0 125
      src/main/java/org/springblade/flow/engine/controller/FlowManagerController.java
  19. 0 95
      src/main/java/org/springblade/flow/engine/controller/FlowModelController.java
  20. 0 191
      src/main/java/org/springblade/flow/engine/controller/FlowProcessController.java
  21. 0 57
      src/main/java/org/springblade/flow/engine/entity/FlowModel.java
  22. 0 61
      src/main/java/org/springblade/flow/engine/entity/FlowProcess.java
  23. 0 53
      src/main/java/org/springblade/flow/engine/mapper/FlowMapper.xml
  24. 0 120
      src/main/java/org/springblade/flow/engine/service/FlowEngineService.java
  25. 0 399
      src/main/java/org/springblade/flow/engine/service/impl/FlowEngineServiceImpl.java
  26. 0 73
      src/main/java/org/springblade/flow/engine/utils/FlowCache.java
  27. 94 0
      src/main/java/org/springblade/ship/HomeController.java
  28. 136 0
      src/main/java/org/springblade/ship/cable/controller/CableController.java
  29. 7 16
      src/main/java/org/springblade/ship/cable/dto/CableDTO.java
  30. 152 0
      src/main/java/org/springblade/ship/cable/entity/Cable.java
  31. 10 14
      src/main/java/org/springblade/ship/cable/mapper/CableMapper.java
  32. 37 0
      src/main/java/org/springblade/ship/cable/mapper/CableMapper.xml
  33. 13 9
      src/main/java/org/springblade/ship/cable/service/ICableService.java
  34. 41 0
      src/main/java/org/springblade/ship/cable/service/impl/CableServiceImpl.java
  35. 26 22
      src/main/java/org/springblade/ship/cable/vo/CableVO.java
  36. 49 0
      src/main/java/org/springblade/ship/cable/wrapper/CableWrapper.java
  37. 129 0
      src/main/java/org/springblade/ship/device/controller/DeviceController.java
  38. 11 6
      src/main/java/org/springblade/ship/device/dto/DeviceDTO.java
  39. 27 32
      src/main/java/org/springblade/ship/device/entity/Device.java
  40. 42 0
      src/main/java/org/springblade/ship/device/mapper/DeviceMapper.java
  41. 19 0
      src/main/java/org/springblade/ship/device/mapper/DeviceMapper.xml
  42. 41 0
      src/main/java/org/springblade/ship/device/service/IDeviceService.java
  43. 41 0
      src/main/java/org/springblade/ship/device/service/impl/DeviceServiceImpl.java
  44. 14 22
      src/main/java/org/springblade/ship/device/vo/DeviceVO.java
  45. 64 0
      src/main/java/org/springblade/ship/device/wrapper/DeviceWrapper.java
  46. 2 2
      src/main/resources/application-dev.yml
  47. 1 1
      src/main/resources/application.yml

+ 3 - 3
pom.xml

@@ -18,7 +18,7 @@
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 
-        <flowable.version>6.4.2</flowable.version>
+<!--        <flowable.version>6.4.2</flowable.version>-->
 
         <spring.boot.version>2.2.13.RELEASE</spring.boot.version>
         <spring.platform.version>Cairo-SR8</spring.platform.version>
@@ -127,7 +127,7 @@
             <artifactId>easy-captcha</artifactId>
         </dependency>
         <!-- 工作流 -->
-        <dependency>
+        <!--<dependency>
             <groupId>org.flowable</groupId>
             <artifactId>flowable-spring-boot-starter</artifactId>
             <version>${flowable.version}</version>
@@ -136,7 +136,7 @@
             <groupId>org.flowable</groupId>
             <artifactId>flowable-json-converter</artifactId>
             <version>${flowable.version}</version>
-        </dependency>
+        </dependency>-->
         <!-- Mybatis-Plus -->
         <dependency>
             <groupId>com.baomidou</groupId>

+ 0 - 146
src/main/java/org/springblade/flow/business/controller/WorkController.java

@@ -1,146 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.business.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.flowable.engine.TaskService;
-import org.springblade.core.launch.constant.AppConstant;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tool.api.R;
-import org.springblade.flow.business.service.FlowBusinessService;
-import org.springblade.flow.core.entity.BladeFlow;
-import org.springblade.flow.core.utils.TaskUtil;
-import org.springblade.flow.engine.entity.FlowProcess;
-import org.springblade.flow.engine.service.FlowEngineService;
-import org.springframework.web.bind.annotation.*;
-
-/**
- * 流程事务通用接口
- *
- * @author Chill
- */
-@RestController
-@AllArgsConstructor
-@RequestMapping(AppConstant.APPLICATION_FLOW_NAME + "/work")
-@Api(value = "流程事务通用接口", tags = "流程事务通用接口")
-public class WorkController {
-
-	private final TaskService taskService;
-	private final FlowEngineService flowEngineService;
-	private final FlowBusinessService flowBusinessService;
-
-	/**
-	 * 发起事务列表页
-	 */
-	@GetMapping("start-list")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "发起事务列表页", notes = "传入流程类型")
-	public R<IPage<FlowProcess>> startList(@ApiParam("流程类型") String category, Query query, @RequestParam(required = false, defaultValue = "1") Integer mode) {
-		IPage<FlowProcess> pages = flowEngineService.selectProcessPage(Condition.getPage(query), category, mode);
-		return R.data(pages);
-	}
-
-	/**
-	 * 待签事务列表页
-	 */
-	@GetMapping("claim-list")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "待签事务列表页", notes = "传入流程信息")
-	public R<IPage<BladeFlow>> claimList(@ApiParam("流程信息") BladeFlow bladeFlow, Query query) {
-		IPage<BladeFlow> pages = flowBusinessService.selectClaimPage(Condition.getPage(query), bladeFlow);
-		return R.data(pages);
-	}
-
-	/**
-	 * 待办事务列表页
-	 */
-	@GetMapping("todo-list")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "待办事务列表页", notes = "传入流程信息")
-	public R<IPage<BladeFlow>> todoList(@ApiParam("流程信息") BladeFlow bladeFlow, Query query) {
-		IPage<BladeFlow> pages = flowBusinessService.selectTodoPage(Condition.getPage(query), bladeFlow);
-		return R.data(pages);
-	}
-
-	/**
-	 * 已发事务列表页
-	 */
-	@GetMapping("send-list")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "已发事务列表页", notes = "传入流程信息")
-	public R<IPage<BladeFlow>> sendList(@ApiParam("流程信息") BladeFlow bladeFlow, Query query) {
-		IPage<BladeFlow> pages = flowBusinessService.selectSendPage(Condition.getPage(query), bladeFlow);
-		return R.data(pages);
-	}
-
-	/**
-	 * 办结事务列表页
-	 */
-	@GetMapping("done-list")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "办结事务列表页", notes = "传入流程信息")
-	public R<IPage<BladeFlow>> doneList(@ApiParam("流程信息") BladeFlow bladeFlow, Query query) {
-		IPage<BladeFlow> pages = flowBusinessService.selectDonePage(Condition.getPage(query), bladeFlow);
-		return R.data(pages);
-	}
-
-	/**
-	 * 签收事务
-	 *
-	 * @param taskId 任务id
-	 */
-	@PostMapping("claim-task")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "签收事务", notes = "传入流程信息")
-	public R claimTask(@ApiParam("任务id") String taskId) {
-		taskService.claim(taskId, TaskUtil.getTaskUser());
-		return R.success("签收事务成功");
-	}
-
-	/**
-	 * 完成任务
-	 *
-	 * @param flow 请假信息
-	 */
-	@PostMapping("complete-task")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "完成任务", notes = "传入流程信息")
-	public R completeTask(@ApiParam("任务信息") @RequestBody BladeFlow flow) {
-		return R.status(flowBusinessService.completeTask(flow));
-	}
-
-	/**
-	 * 删除任务
-	 *
-	 * @param taskId 任务id
-	 * @param reason 删除原因
-	 */
-	@PostMapping("delete-task")
-	@ApiOperationSupport(order = 8)
-	@ApiOperation(value = "删除任务", notes = "传入流程信息")
-	public R deleteTask(@ApiParam("任务id") String taskId, @ApiParam("删除原因") String reason) {
-		taskService.deleteTask(taskId, reason);
-		return R.success("删除任务成功");
-	}
-
-}

+ 0 - 72
src/main/java/org/springblade/flow/business/service/FlowBusinessService.java

@@ -1,72 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.business.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.flow.core.entity.BladeFlow;
-
-/**
- * 流程业务类
- *
- * @author Chill
- */
-public interface FlowBusinessService {
-
-	/**
-	 * 流程待签列表
-	 *
-	 * @param page      分页工具
-	 * @param bladeFlow 流程类
-	 * @return
-	 */
-	IPage<BladeFlow> selectClaimPage(IPage<BladeFlow> page, BladeFlow bladeFlow);
-
-	/**
-	 * 流程待办列表
-	 *
-	 * @param page      分页工具
-	 * @param bladeFlow 流程类
-	 * @return
-	 */
-	IPage<BladeFlow> selectTodoPage(IPage<BladeFlow> page, BladeFlow bladeFlow);
-
-	/**
-	 * 流程已发列表
-	 *
-	 * @param page      分页工具
-	 * @param bladeFlow 流程类
-	 * @return
-	 */
-	IPage<BladeFlow> selectSendPage(IPage<BladeFlow> page, BladeFlow bladeFlow);
-
-	/**
-	 * 流程办结列表
-	 *
-	 * @param page      分页工具
-	 * @param bladeFlow 流程类
-	 * @return
-	 */
-	IPage<BladeFlow> selectDonePage(IPage<BladeFlow> page, BladeFlow bladeFlow);
-
-	/**
-	 * 完成任务
-	 *
-	 * @param leave 请假信息
-	 * @return boolean
-	 */
-	boolean completeTask(BladeFlow leave);
-}

+ 0 - 77
src/main/java/org/springblade/flow/business/service/IFlowService.java

@@ -1,77 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.business.service;
-
-import org.springblade.flow.core.entity.BladeFlow;
-
-import java.util.Map;
-
-/**
- * 工作流调用接口.
- *
- * @author Chill
- */
-public interface IFlowService {
-
-	/**
-	 * 开启流程
-	 *
-	 * @param processDefinitionId 流程id
-	 * @param businessKey         业务key
-	 * @param variables           参数
-	 * @return BladeFlow
-	 */
-	BladeFlow startProcessInstanceById(String processDefinitionId, String businessKey, Map<String, Object> variables);
-
-	/**
-	 * 开启流程
-	 *
-	 * @param processDefinitionKey 流程标识
-	 * @param businessKey          业务key
-	 * @param variables            参数
-	 * @return BladeFlow
-	 */
-	BladeFlow startProcessInstanceByKey(String processDefinitionKey, String businessKey, Map<String, Object> variables);
-
-	/**
-	 * 完成任务
-	 *
-	 * @param taskId            任务id
-	 * @param processInstanceId 流程实例id
-	 * @param comment           评论
-	 * @param variables         参数
-	 * @return R
-	 */
-	boolean completeTask(String taskId, String processInstanceId, String comment, Map<String, Object> variables);
-
-	/**
-	 * 获取流程变量
-	 *
-	 * @param taskId       任务id
-	 * @param variableName 变量名
-	 * @return R
-	 */
-	Object taskVariable(String taskId, String variableName);
-
-	/**
-	 * 获取流程变量集合
-	 *
-	 * @param taskId 任务id
-	 * @return R
-	 */
-	Map<String, Object> taskVariables(String taskId);
-}

+ 0 - 327
src/main/java/org/springblade/flow/business/service/impl/FlowBusinessServiceImpl.java

@@ -1,327 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.business.service.impl;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import lombok.AllArgsConstructor;
-import org.flowable.engine.HistoryService;
-import org.flowable.engine.TaskService;
-import org.flowable.engine.history.HistoricProcessInstance;
-import org.flowable.engine.history.HistoricProcessInstanceQuery;
-import org.flowable.engine.repository.ProcessDefinition;
-import org.flowable.task.api.TaskQuery;
-import org.flowable.task.api.history.HistoricTaskInstance;
-import org.flowable.task.api.history.HistoricTaskInstanceQuery;
-import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tool.support.Kv;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringPool;
-import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.flow.business.service.FlowBusinessService;
-import org.springblade.flow.core.constant.ProcessConstant;
-import org.springblade.flow.core.entity.BladeFlow;
-import org.springblade.flow.core.utils.TaskUtil;
-import org.springblade.flow.engine.constant.FlowEngineConstant;
-import org.springblade.flow.engine.utils.FlowCache;
-import org.springframework.stereotype.Service;
-
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 流程业务实现类
- *
- * @author Chill
- */
-@Service
-@AllArgsConstructor
-public class FlowBusinessServiceImpl implements FlowBusinessService {
-
-	private final TaskService taskService;
-	private final HistoryService historyService;
-
-	@Override
-	public IPage<BladeFlow> selectClaimPage(IPage<BladeFlow> page, BladeFlow bladeFlow) {
-		String taskUser = TaskUtil.getTaskUser();
-		String taskGroup = TaskUtil.getCandidateGroup();
-		List<BladeFlow> flowList = new LinkedList<>();
-
-		// 个人等待签收的任务
-		TaskQuery claimUserQuery = taskService.createTaskQuery().taskCandidateUser(taskUser)
-			.includeProcessVariables().active().orderByTaskCreateTime().desc();
-		// 定制流程等待签收的任务
-		TaskQuery claimRoleWithTenantIdQuery = taskService.createTaskQuery().taskTenantId(AuthUtil.getTenantId()).taskCandidateGroupIn(Func.toStrList(taskGroup))
-			.includeProcessVariables().active().orderByTaskCreateTime().desc();
-		// 通用流程等待签收的任务
-		TaskQuery claimRoleWithoutTenantIdQuery = taskService.createTaskQuery().taskWithoutTenantId().taskCandidateGroupIn(Func.toStrList(taskGroup))
-			.includeProcessVariables().active().orderByTaskCreateTime().desc();
-
-		// 构建列表数据
-		buildFlowTaskList(bladeFlow, flowList, claimUserQuery, FlowEngineConstant.STATUS_CLAIM);
-		buildFlowTaskList(bladeFlow, flowList, claimRoleWithTenantIdQuery, FlowEngineConstant.STATUS_CLAIM);
-		buildFlowTaskList(bladeFlow, flowList, claimRoleWithoutTenantIdQuery, FlowEngineConstant.STATUS_CLAIM);
-
-		// 计算总数
-		long count = claimUserQuery.count() + claimRoleWithTenantIdQuery.count() + claimRoleWithoutTenantIdQuery.count();
-		// 设置页数
-		page.setSize(count);
-		// 设置总数
-		page.setTotal(count);
-		// 设置数据
-		page.setRecords(flowList);
-		return page;
-	}
-
-	@Override
-	public IPage<BladeFlow> selectTodoPage(IPage<BladeFlow> page, BladeFlow bladeFlow) {
-		String taskUser = TaskUtil.getTaskUser();
-		List<BladeFlow> flowList = new LinkedList<>();
-
-		// 已签收的任务
-		TaskQuery todoQuery = taskService.createTaskQuery().taskAssignee(taskUser).active()
-			.includeProcessVariables().orderByTaskCreateTime().desc();
-
-		// 构建列表数据
-		buildFlowTaskList(bladeFlow, flowList, todoQuery, FlowEngineConstant.STATUS_TODO);
-
-		// 计算总数
-		long count = todoQuery.count();
-		// 设置页数
-		page.setSize(count);
-		// 设置总数
-		page.setTotal(count);
-		// 设置数据
-		page.setRecords(flowList);
-		return page;
-	}
-
-	@Override
-	public IPage<BladeFlow> selectSendPage(IPage<BladeFlow> page, BladeFlow bladeFlow) {
-		String taskUser = TaskUtil.getTaskUser();
-		List<BladeFlow> flowList = new LinkedList<>();
-
-		HistoricProcessInstanceQuery historyQuery = historyService.createHistoricProcessInstanceQuery().startedBy(taskUser).orderByProcessInstanceStartTime().desc();
-
-		if (bladeFlow.getCategory() != null) {
-			historyQuery.processDefinitionCategory(bladeFlow.getCategory());
-		}
-		if (bladeFlow.getBeginDate() != null) {
-			historyQuery.startedAfter(bladeFlow.getBeginDate());
-		}
-		if (bladeFlow.getEndDate() != null) {
-			historyQuery.startedBefore(bladeFlow.getEndDate());
-		}
-
-		// 查询列表
-		List<HistoricProcessInstance> historyList = historyQuery.listPage(Func.toInt((page.getCurrent() - 1) * page.getSize()), Func.toInt(page.getSize()));
-
-		historyList.forEach(historicProcessInstance -> {
-			BladeFlow flow = new BladeFlow();
-			// historicProcessInstance
-			flow.setCreateTime(historicProcessInstance.getStartTime());
-			flow.setEndTime(historicProcessInstance.getEndTime());
-			flow.setVariables(historicProcessInstance.getProcessVariables());
-			String[] businessKey = Func.toStrArray(StringPool.COLON, historicProcessInstance.getBusinessKey());
-			if (businessKey.length > 1) {
-				flow.setBusinessTable(businessKey[0]);
-				flow.setBusinessId(businessKey[1]);
-			}
-			flow.setHistoryActivityName(historicProcessInstance.getName());
-			flow.setProcessInstanceId(historicProcessInstance.getId());
-			flow.setHistoryProcessInstanceId(historicProcessInstance.getId());
-			// ProcessDefinition
-			ProcessDefinition processDefinition = FlowCache.getProcessDefinition(historicProcessInstance.getProcessDefinitionId());
-			flow.setProcessDefinitionId(processDefinition.getId());
-			flow.setProcessDefinitionName(processDefinition.getName());
-			flow.setProcessDefinitionVersion(processDefinition.getVersion());
-			flow.setProcessDefinitionKey(processDefinition.getKey());
-			flow.setCategory(processDefinition.getCategory());
-			flow.setCategoryName(FlowCache.getCategoryName(processDefinition.getCategory()));
-			flow.setProcessInstanceId(historicProcessInstance.getId());
-			// HistoricTaskInstance
-			List<HistoricTaskInstance> historyTasks = historyService.createHistoricTaskInstanceQuery().processInstanceId(historicProcessInstance.getId()).orderByHistoricTaskInstanceEndTime().desc().list();
-			if (Func.isNotEmpty(historyTasks)) {
-				HistoricTaskInstance historyTask = historyTasks.iterator().next();
-				flow.setTaskId(historyTask.getId());
-				flow.setTaskName(historyTask.getName());
-				flow.setTaskDefinitionKey(historyTask.getTaskDefinitionKey());
-			}
-			// Status
-			if (historicProcessInstance.getEndActivityId() != null) {
-				flow.setProcessIsFinished(FlowEngineConstant.STATUS_FINISHED);
-			} else {
-				flow.setProcessIsFinished(FlowEngineConstant.STATUS_UNFINISHED);
-			}
-			flow.setStatus(FlowEngineConstant.STATUS_FINISH);
-			flowList.add(flow);
-		});
-
-		// 计算总数
-		long count = historyQuery.count();
-		// 设置总数
-		page.setTotal(count);
-		page.setRecords(flowList);
-		return page;
-	}
-
-	@Override
-	public IPage<BladeFlow> selectDonePage(IPage<BladeFlow> page, BladeFlow bladeFlow) {
-		String taskUser = TaskUtil.getTaskUser();
-		List<BladeFlow> flowList = new LinkedList<>();
-
-		HistoricTaskInstanceQuery doneQuery = historyService.createHistoricTaskInstanceQuery().taskAssignee(taskUser).finished()
-			.includeProcessVariables().orderByHistoricTaskInstanceEndTime().desc();
-
-		if (bladeFlow.getCategory() != null) {
-			doneQuery.processCategoryIn(Func.toStrList(bladeFlow.getCategory()));
-		}
-		if (bladeFlow.getBeginDate() != null) {
-			doneQuery.taskCompletedAfter(bladeFlow.getBeginDate());
-		}
-		if (bladeFlow.getEndDate() != null) {
-			doneQuery.taskCompletedBefore(bladeFlow.getEndDate());
-		}
-
-		// 查询列表
-		List<HistoricTaskInstance> doneList = doneQuery.listPage(Func.toInt((page.getCurrent() - 1) * page.getSize()), Func.toInt(page.getSize()));
-		doneList.forEach(historicTaskInstance -> {
-			BladeFlow flow = new BladeFlow();
-			flow.setTaskId(historicTaskInstance.getId());
-			flow.setTaskDefinitionKey(historicTaskInstance.getTaskDefinitionKey());
-			flow.setTaskName(historicTaskInstance.getName());
-			flow.setAssignee(historicTaskInstance.getAssignee());
-			flow.setCreateTime(historicTaskInstance.getCreateTime());
-			flow.setExecutionId(historicTaskInstance.getExecutionId());
-			flow.setHistoryTaskEndTime(historicTaskInstance.getEndTime());
-			flow.setVariables(historicTaskInstance.getProcessVariables());
-
-			ProcessDefinition processDefinition = FlowCache.getProcessDefinition(historicTaskInstance.getProcessDefinitionId());
-			flow.setProcessDefinitionId(processDefinition.getId());
-			flow.setProcessDefinitionName(processDefinition.getName());
-			flow.setProcessDefinitionKey(processDefinition.getKey());
-			flow.setProcessDefinitionVersion(processDefinition.getVersion());
-			flow.setCategory(processDefinition.getCategory());
-			flow.setCategoryName(FlowCache.getCategoryName(processDefinition.getCategory()));
-
-			flow.setProcessInstanceId(historicTaskInstance.getProcessInstanceId());
-			flow.setHistoryProcessInstanceId(historicTaskInstance.getProcessInstanceId());
-			HistoricProcessInstance historicProcessInstance = getHistoricProcessInstance((historicTaskInstance.getProcessInstanceId()));
-			if (Func.isNotEmpty(historicProcessInstance)) {
-				String[] businessKey = Func.toStrArray(StringPool.COLON, historicProcessInstance.getBusinessKey());
-				flow.setBusinessTable(businessKey[0]);
-				flow.setBusinessId(businessKey[1]);
-				if (historicProcessInstance.getEndActivityId() != null) {
-					flow.setProcessIsFinished(FlowEngineConstant.STATUS_FINISHED);
-				} else {
-					flow.setProcessIsFinished(FlowEngineConstant.STATUS_UNFINISHED);
-				}
-			}
-			flow.setStatus(FlowEngineConstant.STATUS_FINISH);
-			flowList.add(flow);
-		});
-		// 计算总数
-		long count = doneQuery.count();
-		// 设置总数
-		page.setTotal(count);
-		page.setRecords(flowList);
-		return page;
-	}
-
-	@Override
-	public boolean completeTask(BladeFlow flow) {
-		String taskId = flow.getTaskId();
-		String processInstanceId = flow.getProcessInstanceId();
-		String comment = Func.toStr(flow.getComment(), ProcessConstant.PASS_COMMENT);
-		// 增加评论
-		if (StringUtil.isNoneBlank(processInstanceId, comment)) {
-			taskService.addComment(taskId, processInstanceId, comment);
-		}
-		// 创建变量
-		Map<String, Object> variables = flow.getVariables();
-		if (variables == null) {
-			variables = Kv.create();
-		}
-		variables.put(ProcessConstant.PASS_KEY, flow.isPass());
-		// 完成任务
-		taskService.complete(taskId, variables);
-		return true;
-	}
-
-	/**
-	 * 构建流程
-	 *
-	 * @param bladeFlow 流程通用类
-	 * @param flowList  流程列表
-	 * @param taskQuery 任务查询类
-	 * @param status    状态
-	 */
-	private void buildFlowTaskList(BladeFlow bladeFlow, List<BladeFlow> flowList, TaskQuery taskQuery, String status) {
-		if (bladeFlow.getCategory() != null) {
-			taskQuery.processCategoryIn(Func.toStrList(bladeFlow.getCategory()));
-		}
-		if (bladeFlow.getProcessDefinitionName() != null) {
-			taskQuery.processDefinitionName(bladeFlow.getProcessDefinitionName());
-		}
-		if (bladeFlow.getBeginDate() != null) {
-			taskQuery.taskCreatedAfter(bladeFlow.getBeginDate());
-		}
-		if (bladeFlow.getEndDate() != null) {
-			taskQuery.taskCreatedBefore(bladeFlow.getEndDate());
-		}
-		taskQuery.list().forEach(task -> {
-			BladeFlow flow = new BladeFlow();
-			flow.setTaskId(task.getId());
-			flow.setTaskDefinitionKey(task.getTaskDefinitionKey());
-			flow.setTaskName(task.getName());
-			flow.setAssignee(task.getAssignee());
-			flow.setCreateTime(task.getCreateTime());
-			flow.setClaimTime(task.getClaimTime());
-			flow.setExecutionId(task.getExecutionId());
-			flow.setVariables(task.getProcessVariables());
-
-			HistoricProcessInstance historicProcessInstance = getHistoricProcessInstance(task.getProcessInstanceId());
-			if (Func.isNotEmpty(historicProcessInstance)) {
-				String[] businessKey = Func.toStrArray(StringPool.COLON, historicProcessInstance.getBusinessKey());
-				flow.setBusinessTable(businessKey[0]);
-				flow.setBusinessId(businessKey[1]);
-			}
-
-			ProcessDefinition processDefinition = FlowCache.getProcessDefinition(task.getProcessDefinitionId());
-			flow.setCategory(processDefinition.getCategory());
-			flow.setCategoryName(FlowCache.getCategoryName(processDefinition.getCategory()));
-			flow.setProcessDefinitionId(processDefinition.getId());
-			flow.setProcessDefinitionName(processDefinition.getName());
-			flow.setProcessDefinitionKey(processDefinition.getKey());
-			flow.setProcessDefinitionVersion(processDefinition.getVersion());
-			flow.setProcessInstanceId(task.getProcessInstanceId());
-			flow.setStatus(status);
-			flowList.add(flow);
-		});
-	}
-
-	/**
-	 * 获取历史流程
-	 *
-	 * @param processInstanceId 流程实例id
-	 * @return HistoricProcessInstance
-	 */
-	private HistoricProcessInstance getHistoricProcessInstance(String processInstanceId) {
-		return historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
-	}
-
-}

+ 0 - 97
src/main/java/org/springblade/flow/business/service/impl/FlowServiceImpl.java

@@ -1,97 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.business.service.impl;
-
-import lombok.AllArgsConstructor;
-import org.flowable.engine.IdentityService;
-import org.flowable.engine.RuntimeService;
-import org.flowable.engine.TaskService;
-import org.flowable.engine.runtime.ProcessInstance;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.support.Kv;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.flow.business.service.IFlowService;
-import org.springblade.flow.core.entity.BladeFlow;
-import org.springblade.flow.core.utils.TaskUtil;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.Map;
-
-/**
- * 流程实现类
- *
- * @author Chill
- */
-@RestController
-@AllArgsConstructor
-public class FlowServiceImpl implements IFlowService {
-
-	private final RuntimeService runtimeService;
-	private final IdentityService identityService;
-	private final TaskService taskService;
-
-	@Override
-	public BladeFlow startProcessInstanceById(String processDefinitionId, String businessKey, Map<String, Object> variables) {
-		// 设置流程启动用户
-		identityService.setAuthenticatedUserId(TaskUtil.getTaskUser());
-		// 开启流程
-		ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinitionId, businessKey, variables);
-		// 组装流程通用类
-		BladeFlow flow = new BladeFlow();
-		flow.setProcessInstanceId(processInstance.getId());
-		return flow;
-	}
-
-	@Override
-	public BladeFlow startProcessInstanceByKey(String processDefinitionKey, String businessKey, Map<String, Object> variables) {
-		// 设置流程启动用户
-		identityService.setAuthenticatedUserId(TaskUtil.getTaskUser());
-		// 开启流程
-		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey, businessKey, variables);
-		// 组装流程通用类
-		BladeFlow flow = new BladeFlow();
-		flow.setProcessInstanceId(processInstance.getId());
-		return flow;
-	}
-
-	@Override
-	public boolean completeTask(String taskId, String processInstanceId, String comment, Map<String, Object> variables) {
-		// 增加评论
-		if (StringUtil.isNoneBlank(processInstanceId, comment)) {
-			taskService.addComment(taskId, processInstanceId, comment);
-		}
-		// 非空判断
-		if (Func.isEmpty(variables)) {
-			variables = Kv.create();
-		}
-		// 完成任务
-		taskService.complete(taskId, variables);
-		return true;
-	}
-
-	@Override
-	public Object taskVariable(String taskId, String variableName) {
-		return R.data(taskService.getVariable(taskId, variableName));
-	}
-
-	@Override
-	public Map<String, Object> taskVariables(String taskId) {
-		return taskService.getVariables(taskId);
-	}
-
-}

+ 0 - 61
src/main/java/org/springblade/flow/core/constant/ProcessConstant.java

@@ -1,61 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.core.constant;
-
-/**
- * 流程常量.
- *
- * @author Chill
- */
-public interface ProcessConstant {
-
-	/**
-	 * 请假流程标识
-	 */
-	String LEAVE_KEY = "Leave";
-
-	/**
-	 * 报销流程标识
-	 */
-	String EXPENSE_KEY = "Expense";
-
-	/**
-	 * 同意标识
-	 */
-	String PASS_KEY = "pass";
-
-	/**
-	 * 同意代号
-	 */
-	String PASS_ALIAS = "ok";
-
-	/**
-	 * 同意默认批复
-	 */
-	String PASS_COMMENT = "同意";
-
-	/**
-	 * 驳回默认批复
-	 */
-	String NOT_PASS_COMMENT = "驳回";
-
-	/**
-	 * 创建人变量名
-	 */
-	String TASK_VARIABLE_CREATE_USER = "createUser";
-
-}

+ 0 - 179
src/main/java/org/springblade/flow/core/entity/BladeFlow.java

@@ -1,179 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.core.entity;
-
-import lombok.Data;
-import org.springblade.flow.core.constant.ProcessConstant;
-
-import java.io.Serializable;
-import java.util.Date;
-import java.util.Map;
-
-/**
- * 工作流通用实体类
- *
- * @author Chill
- */
-@Data
-public class BladeFlow implements Serializable {
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 任务编号
-	 */
-	private String taskId;
-	/**
-	 * 任务名称
-	 */
-	private String taskName;
-	/**
-	 * 任务定义Key
-	 */
-	private String taskDefinitionKey;
-	/**
-	 * 任务执行人编号
-	 */
-	private String assignee;
-	/**
-	 * 任务执行人名称
-	 */
-	private String assigneeName;
-	/**
-	 * 流程分类
-	 */
-	private String category;
-	/**
-	 * 流程分类名
-	 */
-	private String categoryName;
-	/**
-	 * 创建时间
-	 */
-	private Date createTime;
-	/**
-	 * 结束时间
-	 */
-	private Date endTime;
-	/**
-	 * 签收时间
-	 */
-	private Date claimTime;
-	/**
-	 * 历史任务结束时间
-	 */
-	private Date historyTaskEndTime;
-	/**
-	 * 执行ID
-	 */
-	private String executionId;
-	/**
-	 * 流程实例ID
-	 */
-	private String processInstanceId;
-	/**
-	 * 流程ID
-	 */
-	private String processDefinitionId;
-	/**
-	 * 流程标识
-	 */
-	private String processDefinitionKey;
-	/**
-	 * 流程名
-	 */
-	private String processDefinitionName;
-	/**
-	 * 流程版本
-	 */
-	private int processDefinitionVersion;
-	/**
-	 * 流程说明
-	 */
-	private String processDefinitionDesc;
-	/**
-	 * 流程简图名
-	 */
-	private String processDefinitionDiagramResName;
-	/**
-	 * 流程重命名
-	 */
-	private String processDefinitionResName;
-	/**
-	 * 历史任务流程实例ID 查看流程图会用到
-	 */
-	private String historyProcessInstanceId;
-	/**
-	 * 流程实例是否结束
-	 */
-	private String processIsFinished;
-	/**
-	 * 历史活动ID
-	 */
-	private String historyActivityId;
-	/**
-	 * 历史活动流程
-	 */
-	private String historyActivityName;
-	/**
-	 * 历史活动耗时
-	 */
-	private String historyActivityDurationTime;
-	/**
-	 * 业务绑定Table
-	 */
-	private String businessTable;
-	/**
-	 * 业务绑定ID
-	 */
-	private String businessId;
-	/**
-	 * 任务状态
-	 */
-	private String status;
-	/**
-	 * 任务意见
-	 */
-	private String comment;
-	/**
-	 * 是否通过
-	 */
-	private boolean isPass;
-	/**
-	 * 是否通过代号
-	 */
-	private String flag;
-	/**
-	 * 开始查询日期
-	 */
-	private Date beginDate;
-	/**
-	 * 结束查询日期
-	 */
-	private Date endDate;
-	/**
-	 * 流程参数
-	 */
-	private Map<String, Object> variables;
-
-	/**
-	 * 获取是否通过
-	 */
-	public boolean isPass() {
-		return ProcessConstant.PASS_ALIAS.equals(flag) || ProcessConstant.PASS_COMMENT.equals(comment);
-	}
-
-}

+ 0 - 66
src/main/java/org/springblade/flow/core/utils/FlowUtil.java

@@ -1,66 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.core.utils;
-
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.flow.core.constant.ProcessConstant;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 工作流工具类
- *
- * @author Chill
- */
-public class FlowUtil {
-
-	/**
-	 * 定义流程key对应的表名
-	 */
-	private final static Map<String, String> BUSINESS_TABLE = new HashMap<>();
-
-	static {
-		BUSINESS_TABLE.put(ProcessConstant.LEAVE_KEY, "blade_process_leave");
-	}
-
-	/**
-	 * 通过流程key获取业务表名
-	 *
-	 * @param key 流程key
-	 */
-	public static String getBusinessTable(String key) {
-		String businessTable = BUSINESS_TABLE.get(key);
-		if (Func.isEmpty(businessTable)) {
-			throw new RuntimeException("流程启动失败,未找到相关业务表");
-		}
-		return businessTable;
-	}
-
-	/**
-	 * 获取业务标识
-	 *
-	 * @param businessTable 业务表
-	 * @param businessId    业务表主键
-	 * @return businessKey
-	 */
-	public static String getBusinessKey(String businessTable, String businessId) {
-		return StringUtil.format("{}:{}", businessTable, businessId);
-	}
-
-}

+ 0 - 71
src/main/java/org/springblade/flow/core/utils/TaskUtil.java

@@ -1,71 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.core.utils;
-
-import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringUtil;
-
-import static org.springblade.core.launch.constant.FlowConstant.TASK_USR_PREFIX;
-
-/**
- * 工作流任务工具类
- *
- * @author Chill
- */
-public class TaskUtil {
-
-	/**
-	 * 获取任务用户格式
-	 *
-	 * @return taskUser
-	 */
-	public static String getTaskUser() {
-		return StringUtil.format("{}{}", TASK_USR_PREFIX, AuthUtil.getUserId());
-	}
-
-	/**
-	 * 获取任务用户格式
-	 *
-	 * @param userId 用户id
-	 * @return taskUser
-	 */
-	public static String getTaskUser(String userId) {
-		return StringUtil.format("{}{}", TASK_USR_PREFIX, userId);
-	}
-
-
-	/**
-	 * 获取用户主键
-	 *
-	 * @param taskUser 任务用户
-	 * @return userId
-	 */
-	public static Long getUserId(String taskUser) {
-		return Func.toLong(StringUtil.removePrefix(taskUser, TASK_USR_PREFIX));
-	}
-
-	/**
-	 * 获取用户组格式
-	 *
-	 * @return candidateGroup
-	 */
-	public static String getCandidateGroup() {
-		return AuthUtil.getUserRole();
-	}
-
-}

+ 0 - 65
src/main/java/org/springblade/flow/demo/leave/controller/LeaveController.java

@@ -1,65 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.demo.leave.controller;
-
-import lombok.AllArgsConstructor;
-import org.springblade.common.cache.UserCache;
-import org.springblade.core.launch.constant.AppConstant;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.flow.demo.leave.entity.ProcessLeave;
-import org.springblade.flow.demo.leave.service.ILeaveService;
-import org.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
-
-/**
- * 控制器
- *
- * @author Chill
- */
-@NonDS
-@ApiIgnore
-@RestController
-@RequestMapping(AppConstant.APPLICATION_DESK_NAME + "/process/leave")
-@AllArgsConstructor
-public class LeaveController {
-
-	private final ILeaveService leaveService;
-
-	/**
-	 * 详情
-	 *
-	 * @param businessId 主键
-	 */
-	@GetMapping("detail")
-	public R<ProcessLeave> detail(Long businessId) {
-		ProcessLeave detail = leaveService.getById(businessId);
-		detail.getFlow().setAssigneeName(UserCache.getUser(detail.getCreateUser()).getName());
-		return R.data(detail);
-	}
-
-	/**
-	 * 新增或修改
-	 *
-	 * @param leave 请假信息
-	 */
-	@PostMapping("start-process")
-	public R startProcess(@RequestBody ProcessLeave leave) {
-		return R.status(leaveService.startProcess(leave));
-	}
-
-}

+ 0 - 6
src/main/java/org/springblade/flow/demo/leave/mapper/LeaveMapper.xml

@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.flow.demo.leave.mapper.LeaveMapper">
-
-
-</mapper>

+ 0 - 79
src/main/java/org/springblade/flow/demo/leave/service/impl/LeaveServiceImpl.java

@@ -1,79 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.demo.leave.service.impl;
-
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springblade.core.log.exception.ServiceException;
-import org.springblade.core.mp.base.BaseServiceImpl;
-import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tool.support.Kv;
-import org.springblade.core.tool.utils.DateUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.flow.business.service.IFlowService;
-import org.springblade.flow.core.constant.ProcessConstant;
-import org.springblade.flow.core.entity.BladeFlow;
-import org.springblade.flow.core.utils.FlowUtil;
-import org.springblade.flow.core.utils.TaskUtil;
-import org.springblade.flow.demo.leave.entity.ProcessLeave;
-import org.springblade.flow.demo.leave.mapper.LeaveMapper;
-import org.springblade.flow.demo.leave.service.ILeaveService;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-/**
- * 服务实现类
- *
- * @author Chill
- */
-@Slf4j
-@Service
-@AllArgsConstructor
-public class LeaveServiceImpl extends BaseServiceImpl<LeaveMapper, ProcessLeave> implements ILeaveService {
-
-	private final IFlowService flowService;
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public boolean startProcess(ProcessLeave leave) {
-		String businessTable = FlowUtil.getBusinessTable(ProcessConstant.LEAVE_KEY);
-		if (Func.isEmpty(leave.getId())) {
-			// 保存leave
-			leave.setApplyTime(DateUtil.now());
-			save(leave);
-			// 启动流程
-			Kv variables = Kv.create()
-				.set(ProcessConstant.TASK_VARIABLE_CREATE_USER, AuthUtil.getUserName())
-				.set("taskUser", TaskUtil.getTaskUser(leave.getTaskUser()))
-				.set("days", DateUtil.between(leave.getStartTime(), leave.getEndTime()).toDays());
-			BladeFlow flow = flowService.startProcessInstanceById(leave.getProcessDefinitionId(), FlowUtil.getBusinessKey(businessTable, String.valueOf(leave.getId())), variables);
-			if (Func.isNotEmpty(flow)) {
-				log.debug("流程已启动,流程ID:" + flow.getProcessInstanceId());
-				// 返回流程id写入leave
-				leave.setProcessInstanceId(flow.getProcessInstanceId());
-				updateById(leave);
-			} else {
-				throw new ServiceException("开启流程失败");
-			}
-		} else {
-
-			updateById(leave);
-		}
-		return true;
-	}
-
-}

+ 0 - 6
src/main/java/org/springblade/flow/demo/package-info.java

@@ -1,6 +0,0 @@
-/**
- * Created by Blade.
- *
- * @author zhuangqian
- */
-package org.springblade.flow.demo;

+ 0 - 44
src/main/java/org/springblade/flow/engine/config/FlowableConfiguration.java

@@ -1,44 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.engine.config;
-
-import lombok.AllArgsConstructor;
-import org.flowable.spring.SpringProcessEngineConfiguration;
-import org.flowable.spring.boot.EngineConfigurationConfigurer;
-import org.flowable.spring.boot.FlowableProperties;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * Flowable配置类
- *
- * @author Chill
- */
-@Configuration
-@AllArgsConstructor
-@EnableConfigurationProperties(FlowableProperties.class)
-public class FlowableConfiguration implements EngineConfigurationConfigurer<SpringProcessEngineConfiguration> {
-	private final FlowableProperties flowableProperties;
-
-	@Override
-	public void configure(SpringProcessEngineConfiguration engineConfiguration) {
-		engineConfiguration.setActivityFontName(flowableProperties.getActivityFontName());
-		engineConfiguration.setLabelFontName(flowableProperties.getLabelFontName());
-		engineConfiguration.setAnnotationFontName(flowableProperties.getAnnotationFontName());
-	}
-
-}

+ 0 - 52
src/main/java/org/springblade/flow/engine/constant/FlowEngineConstant.java

@@ -1,52 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.engine.constant;
-
-/**
- * 流程常量.
- *
- * @author zhuangqian
- */
-public interface FlowEngineConstant {
-
-	String FLOWABLE_BASE_PACKAGES = "org.flowable.ui";
-
-	String SUFFIX = ".bpmn20.xml";
-
-	String ACTIVE = "active";
-
-	String SUSPEND = "suspend";
-
-	String STATUS_TODO = "todo";
-
-	String STATUS_CLAIM = "claim";
-
-	String STATUS_SEND = "send";
-
-	String STATUS_DONE = "done";
-
-	String STATUS_FINISHED = "finished";
-
-	String STATUS_UNFINISHED = "unfinished";
-
-	String STATUS_FINISH = "finish";
-
-	String START_EVENT = "startEvent";
-
-	String END_EVENT = "endEvent";
-
-}

+ 0 - 73
src/main/java/org/springblade/flow/engine/controller/FlowFollowController.java

@@ -1,73 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.engine.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.core.launch.constant.AppConstant;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.secure.annotation.PreAuth;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.constant.RoleConstant;
-import org.springblade.flow.engine.entity.FlowExecution;
-import org.springblade.flow.engine.service.FlowEngineService;
-import org.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
-
-/**
- * 流程状态控制器
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@RequestMapping(AppConstant.APPLICATION_FLOW_NAME + "/follow")
-@AllArgsConstructor
-@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
-@ApiIgnore
-public class FlowFollowController {
-
-	private final FlowEngineService flowEngineService;
-
-	/**
-	 * 流程状态列表
-	 */
-	@GetMapping("list")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "分页", notes = "传入notice")
-	public R<IPage<FlowExecution>> list(Query query, @ApiParam(value = "流程实例id") String processInstanceId, @ApiParam(value = "流程key") String processDefinitionKey) {
-		IPage<FlowExecution> pages = flowEngineService.selectFollowPage(Condition.getPage(query), processInstanceId, processDefinitionKey);
-		return R.data(pages);
-	}
-
-	/**
-	 * 删除流程实例
-	 */
-	@PostMapping("delete-process-instance")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "删除", notes = "传入主键集合")
-	public R deleteProcessInstance(@ApiParam(value = "流程实例id") @RequestParam String processInstanceId, @ApiParam(value = "删除原因") @RequestParam String deleteReason) {
-		boolean temp = flowEngineService.deleteProcessInstance(processInstanceId, deleteReason);
-		return R.status(temp);
-	}
-
-}

+ 0 - 125
src/main/java/org/springblade/flow/engine/controller/FlowManagerController.java

@@ -1,125 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.engine.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.core.launch.constant.AppConstant;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.secure.annotation.PreAuth;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.constant.RoleConstant;
-import org.springblade.core.tool.support.Kv;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.flow.engine.constant.FlowEngineConstant;
-import org.springblade.flow.engine.entity.FlowProcess;
-import org.springblade.flow.engine.service.FlowEngineService;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-import springfox.documentation.annotations.ApiIgnore;
-
-import java.util.List;
-import java.util.Objects;
-
-/**
- * 流程管理接口
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@RequestMapping(AppConstant.APPLICATION_FLOW_NAME + "/manager")
-@AllArgsConstructor
-@Api(value = "流程管理接口", tags = "流程管理接口")
-@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
-@ApiIgnore
-public class FlowManagerController {
-
-	private final FlowEngineService flowEngineService;
-
-	/**
-	 * 分页
-	 */
-	@GetMapping("list")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "分页", notes = "传入流程类型")
-	public R<IPage<FlowProcess>> list(@ApiParam("流程类型") String category, Query query, @RequestParam(required = false, defaultValue = "1") Integer mode) {
-		IPage<FlowProcess> pages = flowEngineService.selectProcessPage(Condition.getPage(query), category, mode);
-		return R.data(pages);
-	}
-
-	/**
-	 * 变更流程状态
-	 *
-	 * @param state     状态
-	 * @param processId 流程id
-	 */
-	@PostMapping("change-state")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "变更流程状态", notes = "传入state,processId")
-	public R changeState(@RequestParam String state, @RequestParam String processId) {
-		String msg = flowEngineService.changeState(state, processId);
-		return R.success(msg);
-	}
-
-	/**
-	 * 删除部署流程
-	 *
-	 * @param deploymentIds 部署流程id集合
-	 */
-	@PostMapping("delete-deployment")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "删除部署流程", notes = "部署流程id集合")
-	public R deleteDeployment(String deploymentIds) {
-		return R.status(flowEngineService.deleteDeployment(deploymentIds));
-	}
-
-	/**
-	 * 检查流程文件格式
-	 *
-	 * @param file 流程文件
-	 */
-	@PostMapping("check-upload")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "上传部署流程文件", notes = "传入文件")
-	public R checkUpload(@RequestParam MultipartFile file) {
-		boolean temp = Objects.requireNonNull(file.getOriginalFilename()).endsWith(FlowEngineConstant.SUFFIX);
-		return R.data(Kv.create().set("name", file.getOriginalFilename()).set("success", temp));
-	}
-
-	/**
-	 * 上传部署流程文件
-	 *
-	 * @param files    流程文件
-	 * @param category 类型
-	 */
-	@PostMapping("deploy-upload")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "上传部署流程文件", notes = "传入文件")
-	public R deployUpload(@RequestParam List<MultipartFile> files,
-						  @RequestParam String category,
-						  @RequestParam(required = false, defaultValue = "") String tenantIds) {
-		return R.status(flowEngineService.deployUpload(files, category, Func.toStrList(tenantIds)));
-	}
-
-}

+ 0 - 95
src/main/java/org/springblade/flow/engine/controller/FlowModelController.java

@@ -1,95 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.engine.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.core.launch.constant.AppConstant;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.secure.annotation.PreAuth;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.constant.RoleConstant;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.flow.engine.entity.FlowModel;
-import org.springblade.flow.engine.service.FlowEngineService;
-import org.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
-
-import java.util.Map;
-
-/**
- * 流程模型控制器
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@RequestMapping(AppConstant.APPLICATION_FLOW_NAME + "/model")
-@AllArgsConstructor
-@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
-@ApiIgnore
-public class FlowModelController {
-
-	private final FlowEngineService flowEngineService;
-
-	/**
-	 * 分页
-	 */
-	@GetMapping("/list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "modelKey", value = "模型标识", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "name", value = "模型名称", paramType = "query", dataType = "string")
-	})
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "分页", notes = "传入notice")
-	public R<IPage<FlowModel>> list(@ApiIgnore @RequestParam Map<String, Object> flow, Query query) {
-		IPage<FlowModel> pages = flowEngineService.page(Condition.getPage(query), Condition.getQueryWrapper(flow, FlowModel.class));
-		return R.data(pages);
-	}
-
-	/**
-	 * 删除
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "删除", notes = "传入主键集合")
-	public R remove(@ApiParam(value = "主键集合") @RequestParam String ids) {
-		boolean temp = flowEngineService.removeByIds(Func.toStrList(ids));
-		return R.status(temp);
-	}
-
-	/**
-	 * 部署
-	 */
-	@PostMapping("/deploy")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "部署", notes = "传入模型id和分类")
-	public R deploy(@ApiParam(value = "模型id") @RequestParam String modelId,
-					@ApiParam(value = "工作流分类") @RequestParam String category,
-					@ApiParam(value = "租户ID") @RequestParam(required = false, defaultValue = "") String tenantIds) {
-		boolean temp = flowEngineService.deployModel(modelId, category, Func.toStrList(tenantIds));
-		return R.status(temp);
-	}
-
-}

+ 0 - 191
src/main/java/org/springblade/flow/engine/controller/FlowProcessController.java

@@ -1,191 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.engine.controller;
-
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.flowable.bpmn.model.BpmnModel;
-import org.flowable.common.engine.impl.util.IoUtil;
-import org.flowable.engine.*;
-import org.flowable.engine.history.HistoricActivityInstance;
-import org.flowable.engine.history.HistoricProcessInstance;
-import org.flowable.engine.repository.ProcessDefinition;
-import org.flowable.engine.runtime.ProcessInstance;
-import org.flowable.image.ProcessDiagramGenerator;
-import org.springblade.core.launch.constant.AppConstant;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.flow.core.entity.BladeFlow;
-import org.springblade.flow.engine.service.FlowEngineService;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-import springfox.documentation.annotations.ApiIgnore;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 流程通用控制器
- *
- * @author Chill
- */
-@NonDS
-@Slf4j
-@RestController
-@AllArgsConstructor
-@RequestMapping(AppConstant.APPLICATION_FLOW_NAME + "/process")
-@ApiIgnore
-public class FlowProcessController {
-
-	private static final String IMAGE_NAME = "image";
-	private static final String XML_NAME = "xml";
-	private static final Integer INT_1024 = 1024;
-
-	private final RepositoryService repositoryService;
-	private final RuntimeService runtimeService;
-	private final HistoryService historyService;
-	private final ProcessEngine processEngine;
-	private final FlowEngineService flowEngineService;
-
-	/**
-	 * 获取流转历史列表
-	 *
-	 * @param processInstanceId 流程实例id
-	 * @param startActivityId   开始节点id
-	 * @param endActivityId     结束节点id
-	 */
-	@GetMapping(value = "history-flow-list")
-	public R<List<BladeFlow>> historyFlowList(@RequestParam String processInstanceId, String startActivityId, String endActivityId) {
-		return R.data(flowEngineService.historyFlowList(processInstanceId, startActivityId, endActivityId));
-	}
-
-	/**
-	 * 流程图展示
-	 *
-	 * @param processDefinitionId 流程id
-	 * @param processInstanceId   实例id
-	 * @param resourceType        资源类型
-	 * @param response            响应
-	 */
-	@GetMapping("resource-view")
-	public void resourceView(@RequestParam String processDefinitionId, String processInstanceId, @RequestParam(defaultValue = IMAGE_NAME) String resourceType, HttpServletResponse response) throws Exception {
-		if (StringUtil.isAllBlank(processDefinitionId, processInstanceId)) {
-			return;
-		}
-		if (StringUtil.isBlank(processDefinitionId)) {
-			ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
-			processDefinitionId = processInstance.getProcessDefinitionId();
-		}
-		ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
-		String resourceName = "";
-		if (resourceType.equals(IMAGE_NAME)) {
-			resourceName = processDefinition.getDiagramResourceName();
-		} else if (resourceType.equals(XML_NAME)) {
-			resourceName = processDefinition.getResourceName();
-		}
-		InputStream resourceAsStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), resourceName);
-		byte[] b = new byte[1024];
-		int len;
-		while ((len = resourceAsStream.read(b, 0, INT_1024)) != -1) {
-			response.getOutputStream().write(b, 0, len);
-		}
-	}
-
-	/**
-	 * 获取流程节点进程图
-	 *
-	 * @param processInstanceId   流程实例id
-	 * @param httpServletResponse http响应
-	 */
-	@GetMapping(value = "diagram-view")
-	public void diagramView(String processInstanceId, HttpServletResponse httpServletResponse) {
-		diagram(processInstanceId, httpServletResponse);
-	}
-
-	/**
-	 * 根据流程节点绘图
-	 *
-	 * @param processInstanceId   流程实例id
-	 * @param httpServletResponse http响应
-	 */
-	private void diagram(String processInstanceId, HttpServletResponse httpServletResponse) {
-		// 获得当前活动的节点
-		String processDefinitionId;
-		// 如果流程已经结束,则得到结束节点
-		if (this.isFinished(processInstanceId)) {
-			HistoricProcessInstance pi = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
-			processDefinitionId = pi.getProcessDefinitionId();
-		} else {
-			// 如果流程没有结束,则取当前活动节点
-			// 根据流程实例ID获得当前处于活动状态的ActivityId合集
-			ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
-			processDefinitionId = pi.getProcessDefinitionId();
-		}
-		List<String> highLightedActivities = new ArrayList<>();
-
-		// 获得活动的节点
-		List<HistoricActivityInstance> highLightedActivityList = historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId).orderByHistoricActivityInstanceStartTime().asc().list();
-
-		for (HistoricActivityInstance tempActivity : highLightedActivityList) {
-			String activityId = tempActivity.getActivityId();
-			highLightedActivities.add(activityId);
-		}
-
-		List<String> flows = new ArrayList<>();
-		// 获取流程图
-		BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
-		ProcessEngineConfiguration engConf = processEngine.getProcessEngineConfiguration();
-
-		ProcessDiagramGenerator diagramGenerator = engConf.getProcessDiagramGenerator();
-		InputStream in = diagramGenerator.generateDiagram(bpmnModel, "bmp", highLightedActivities, flows, engConf.getActivityFontName(),
-			engConf.getLabelFontName(), engConf.getAnnotationFontName(), engConf.getClassLoader(), 1.0, true);
-		OutputStream out = null;
-		byte[] buf = new byte[1024];
-		int length;
-		try {
-			out = httpServletResponse.getOutputStream();
-			while ((length = in.read(buf)) != -1) {
-				out.write(buf, 0, length);
-			}
-		} catch (IOException e) {
-			log.error("操作异常", e);
-		} finally {
-			IoUtil.closeSilently(out);
-			IoUtil.closeSilently(in);
-		}
-	}
-
-	/**
-	 * 是否已完结
-	 *
-	 * @param processInstanceId 流程实例id
-	 * @return bool
-	 */
-	private boolean isFinished(String processInstanceId) {
-		return historyService.createHistoricProcessInstanceQuery().finished()
-			.processInstanceId(processInstanceId).count() > 0;
-	}
-
-
-}

+ 0 - 57
src/main/java/org/springblade/flow/engine/entity/FlowModel.java

@@ -1,57 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.engine.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * 流程模型
- *
- * @author Chill
- */
-@Data
-@TableName("ACT_DE_MODEL")
-public class FlowModel implements Serializable {
-
-	private static final long serialVersionUID = 1L;
-
-	public static final int MODEL_TYPE_BPMN = 0;
-	public static final int MODEL_TYPE_FORM = 2;
-	public static final int MODEL_TYPE_APP = 3;
-	public static final int MODEL_TYPE_DECISION_TABLE = 4;
-	public static final int MODEL_TYPE_CMMN = 5;
-
-	private String id;
-	private String name;
-	private String modelKey;
-	private String description;
-	private Date created;
-	private Date lastUpdated;
-	private String createdBy;
-	private String lastUpdatedBy;
-	private Integer version;
-	private String modelEditorJson;
-	private String modelComment;
-	private Integer modelType;
-	private String tenantId;
-	private byte[] thumbnail;
-
-}

+ 0 - 61
src/main/java/org/springblade/flow/engine/entity/FlowProcess.java

@@ -1,61 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.engine.entity;
-
-import lombok.Data;
-import org.flowable.engine.impl.persistence.entity.ProcessDefinitionEntityImpl;
-import org.springblade.flow.engine.utils.FlowCache;
-
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * FlowProcess
- *
- * @author Chill
- */
-@Data
-public class FlowProcess implements Serializable {
-
-	private String id;
-	private String tenantId;
-	private String name;
-	private String key;
-	private String category;
-	private String categoryName;
-	private Integer version;
-	private String deploymentId;
-	private String resourceName;
-	private String diagramResourceName;
-	private Integer suspensionState;
-	private Date deploymentTime;
-
-	public FlowProcess(ProcessDefinitionEntityImpl entity) {
-		this.id = entity.getId();
-		this.tenantId = entity.getTenantId();
-		this.name = entity.getName();
-		this.key = entity.getKey();
-		this.category = entity.getCategory();
-		this.categoryName = FlowCache.getCategoryName(entity.getCategory());
-		this.version = entity.getVersion();
-		this.deploymentId = entity.getDeploymentId();
-		this.resourceName = entity.getResourceName();
-		this.diagramResourceName = entity.getDiagramResourceName();
-		this.suspensionState = entity.getSuspensionState();
-	}
-
-}

+ 0 - 53
src/main/java/org/springblade/flow/engine/mapper/FlowMapper.xml

@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.flow.engine.mapper.FlowMapper">
-
-    <!-- 通用查询映射结果 -->
-    <resultMap id="flowModelResultMap" type="org.springblade.flow.engine.entity.FlowModel">
-        <result column="id" property="id"/>
-        <result column="name" property="name"/>
-        <result column="model_key" property="modelKey"/>
-        <result column="description" property="description"/>
-        <result column="model_comment" property="modelComment"/>
-        <result column="created" property="created"/>
-        <result column="created_by" property="createdBy"/>
-        <result column="last_updated" property="lastUpdated"/>
-        <result column="last_updated_by" property="lastUpdatedBy"/>
-        <result column="version" property="version"/>
-        <result column="model_editor_json" property="modelEditorJson"/>
-        <result column="thumbnail" property="thumbnail"/>
-        <result column="model_type" property="modelType"/>
-        <result column="tenant_id" property="tenantId"/>
-    </resultMap>
-
-    <select id="selectFlowPage" resultMap="flowModelResultMap">
-        SELECT
-            a.id,
-            a.name,
-            a.model_key,
-            a.description,
-            a.model_comment,
-            a.created,
-            a.created_by,
-            a.last_updated,
-            a.last_updated_by,
-            a.version,
-            a.model_editor_json,
-            a.thumbnail,
-            a.model_type,
-            a.tenant_id
-        FROM
-            ACT_DE_MODEL a
-        WHERE
-            1 = 1
-        ORDER BY
-            a.created DESC
-    </select>
-
-    <select id="findByParentModelId" parameterType="string" resultMap="flowModelResultMap">
-        select model.* from ACT_DE_MODEL_RELATION modelrelation
-                                inner join ACT_DE_MODEL model on modelrelation.model_id = model.id
-        where modelrelation.parent_model_id = #{_parameter}
-    </select>
-
-</mapper>

+ 0 - 120
src/main/java/org/springblade/flow/engine/service/FlowEngineService.java

@@ -1,120 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.engine.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.service.IService;
-import org.springblade.flow.core.entity.BladeFlow;
-import org.springblade.flow.engine.entity.FlowExecution;
-import org.springblade.flow.engine.entity.FlowModel;
-import org.springblade.flow.engine.entity.FlowProcess;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.util.List;
-
-/**
- * FlowEngineService
- *
- * @author Chill
- */
-public interface FlowEngineService extends IService<FlowModel> {
-
-	/**
-	 * 自定义分页
-	 *
-	 * @param page      分页工具
-	 * @param flowModel 流程模型
-	 * @return
-	 */
-	IPage<FlowModel> selectFlowPage(IPage<FlowModel> page, FlowModel flowModel);
-
-	/**
-	 * 流程管理列表
-	 *
-	 * @param page     分页工具
-	 * @param category 分类
-	 * @param mode     形态
-	 * @return
-	 */
-	IPage<FlowProcess> selectProcessPage(IPage<FlowProcess> page, String category, Integer mode);
-
-	/**
-	 * 流程管理列表
-	 *
-	 * @param page                 分页工具
-	 * @param processInstanceId    流程实例id
-	 * @param processDefinitionKey 流程key
-	 * @return
-	 */
-	IPage<FlowExecution> selectFollowPage(IPage<FlowExecution> page, String processInstanceId, String processDefinitionKey);
-
-	/**
-	 * 获取流转历史列表
-	 *
-	 * @param processInstanceId 流程实例id
-	 * @param startActivityId   开始节点id
-	 * @param endActivityId     结束节点id
-	 * @return
-	 */
-	List<BladeFlow> historyFlowList(String processInstanceId, String startActivityId, String endActivityId);
-
-	/**
-	 * 变更流程状态
-	 *
-	 * @param state     状态
-	 * @param processId 流程ID
-	 * @return
-	 */
-	String changeState(String state, String processId);
-
-	/**
-	 * 删除部署流程
-	 *
-	 * @param deploymentIds 部署流程id集合
-	 * @return
-	 */
-	boolean deleteDeployment(String deploymentIds);
-
-	/**
-	 * 上传部署流程
-	 *
-	 * @param files        流程配置文件
-	 * @param category     流程分类
-	 * @param tenantIdList 租户id集合
-	 * @return
-	 */
-	boolean deployUpload(List<MultipartFile> files, String category, List<String> tenantIdList);
-
-	/**
-	 * 部署流程
-	 *
-	 * @param modelId      模型id
-	 * @param category     分类
-	 * @param tenantIdList 租户id集合
-	 * @return
-	 */
-	boolean deployModel(String modelId, String category, List<String> tenantIdList);
-
-	/**
-	 * 删除流程实例
-	 *
-	 * @param processInstanceId 流程实例id
-	 * @param deleteReason      删除原因
-	 * @return
-	 */
-	boolean deleteProcessInstance(String processInstanceId, String deleteReason);
-}

+ 0 - 399
src/main/java/org/springblade/flow/engine/service/impl/FlowEngineServiceImpl.java

@@ -1,399 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.engine.service.impl;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.flowable.bpmn.converter.BpmnXMLConverter;
-import org.flowable.bpmn.model.BpmnModel;
-import org.flowable.bpmn.model.Process;
-import org.flowable.editor.language.json.converter.BpmnJsonConverter;
-import org.flowable.engine.HistoryService;
-import org.flowable.engine.RepositoryService;
-import org.flowable.engine.RuntimeService;
-import org.flowable.engine.TaskService;
-import org.flowable.engine.history.HistoricActivityInstance;
-import org.flowable.engine.history.HistoricProcessInstance;
-import org.flowable.engine.impl.persistence.entity.ExecutionEntityImpl;
-import org.flowable.engine.impl.persistence.entity.ProcessDefinitionEntityImpl;
-import org.flowable.engine.repository.Deployment;
-import org.flowable.engine.repository.ProcessDefinition;
-import org.flowable.engine.repository.ProcessDefinitionQuery;
-import org.flowable.engine.runtime.ProcessInstance;
-import org.flowable.engine.runtime.ProcessInstanceQuery;
-import org.flowable.engine.task.Comment;
-import org.springblade.common.cache.UserCache;
-import org.springblade.core.log.exception.ServiceException;
-import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tool.utils.DateUtil;
-import org.springblade.core.tool.utils.FileUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.flow.core.entity.BladeFlow;
-import org.springblade.flow.core.enums.FlowModeEnum;
-import org.springblade.flow.core.utils.TaskUtil;
-import org.springblade.flow.engine.constant.FlowEngineConstant;
-import org.springblade.flow.engine.entity.FlowExecution;
-import org.springblade.flow.engine.entity.FlowModel;
-import org.springblade.flow.engine.entity.FlowProcess;
-import org.springblade.flow.engine.mapper.FlowMapper;
-import org.springblade.flow.engine.service.FlowEngineService;
-import org.springblade.flow.engine.utils.FlowCache;
-import org.springblade.modules.system.entity.User;
-import org.springframework.stereotype.Service;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.*;
-
-/**
- * 工作流服务实现类
- *
- * @author Chill
- */
-@Slf4j
-@Service
-@AllArgsConstructor
-public class FlowEngineServiceImpl extends ServiceImpl<FlowMapper, FlowModel> implements FlowEngineService {
-	private static final String ALREADY_IN_STATE = "already in state";
-	private static final BpmnJsonConverter BPMN_JSON_CONVERTER = new BpmnJsonConverter();
-	private static final BpmnXMLConverter BPMN_XML_CONVERTER = new BpmnXMLConverter();
-	private final ObjectMapper objectMapper;
-	private final RepositoryService repositoryService;
-	private final RuntimeService runtimeService;
-	private final HistoryService historyService;
-	private final TaskService taskService;
-
-	@Override
-	public IPage<FlowModel> selectFlowPage(IPage<FlowModel> page, FlowModel flowModel) {
-		return page.setRecords(baseMapper.selectFlowPage(page, flowModel));
-	}
-
-	@Override
-	public IPage<FlowProcess> selectProcessPage(IPage<FlowProcess> page, String category, Integer mode) {
-		ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery().latestVersion().orderByProcessDefinitionKey().asc();
-		// 通用流程
-		if (mode == FlowModeEnum.COMMON.getMode()) {
-			processDefinitionQuery.processDefinitionWithoutTenantId();
-		}
-		// 定制流程
-		else if (!AuthUtil.isAdministrator()) {
-			processDefinitionQuery.processDefinitionTenantId(AuthUtil.getTenantId());
-		}
-		if (StringUtils.isNotEmpty(category)) {
-			processDefinitionQuery.processDefinitionCategory(category);
-		}
-		List<ProcessDefinition> processDefinitionList = processDefinitionQuery.listPage(Func.toInt((page.getCurrent() - 1) * page.getSize()), Func.toInt(page.getSize()));
-		List<FlowProcess> flowProcessList = new ArrayList<>();
-		processDefinitionList.forEach(processDefinition -> {
-			String deploymentId = processDefinition.getDeploymentId();
-			Deployment deployment = repositoryService.createDeploymentQuery().deploymentId(deploymentId).singleResult();
-			FlowProcess flowProcess = new FlowProcess((ProcessDefinitionEntityImpl) processDefinition);
-			flowProcess.setDeploymentTime(deployment.getDeploymentTime());
-			flowProcessList.add(flowProcess);
-		});
-		page.setTotal(processDefinitionQuery.count());
-		page.setRecords(flowProcessList);
-		return page;
-	}
-
-	@Override
-	public IPage<FlowExecution> selectFollowPage(IPage<FlowExecution> page, String processInstanceId, String processDefinitionKey) {
-		ProcessInstanceQuery processInstanceQuery = runtimeService.createProcessInstanceQuery();
-		if (StringUtil.isNotBlank(processInstanceId)) {
-			processInstanceQuery.processInstanceId(processInstanceId);
-		}
-		if (StringUtil.isNotBlank(processDefinitionKey)) {
-			processInstanceQuery.processDefinitionKey(processDefinitionKey);
-		}
-		List<FlowExecution> flowList = new ArrayList<>();
-		List<ProcessInstance> procInsList = processInstanceQuery.listPage(Func.toInt((page.getCurrent() - 1) * page.getSize()), Func.toInt(page.getSize()));
-		procInsList.forEach(processInstance -> {
-			ExecutionEntityImpl execution = (ExecutionEntityImpl) processInstance;
-			FlowExecution flowExecution = new FlowExecution();
-			flowExecution.setId(execution.getId());
-			flowExecution.setName(execution.getName());
-			flowExecution.setStartUserId(execution.getStartUserId());
-			User taskUser = UserCache.getUserByTaskUser(execution.getStartUserId());
-			if (taskUser != null) {
-				flowExecution.setStartUser(taskUser.getName());
-			}
-			flowExecution.setStartTime(execution.getStartTime());
-			flowExecution.setExecutionId(execution.getId());
-			flowExecution.setProcessInstanceId(execution.getProcessInstanceId());
-			flowExecution.setProcessDefinitionId(execution.getProcessDefinitionId());
-			flowExecution.setProcessDefinitionKey(execution.getProcessDefinitionKey());
-			flowExecution.setSuspensionState(execution.getSuspensionState());
-			ProcessDefinition processDefinition = FlowCache.getProcessDefinition(execution.getProcessDefinitionId());
-			flowExecution.setCategory(processDefinition.getCategory());
-			flowExecution.setCategoryName(FlowCache.getCategoryName(processDefinition.getCategory()));
-			flowList.add(flowExecution);
-		});
-		page.setTotal(processInstanceQuery.count());
-		page.setRecords(flowList);
-		return page;
-	}
-
-	@Override
-	public List<BladeFlow> historyFlowList(String processInstanceId, String startActivityId, String endActivityId) {
-		List<BladeFlow> flowList = new LinkedList<>();
-		List<HistoricActivityInstance> historicActivityInstanceList = historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId).orderByHistoricActivityInstanceStartTime().asc().orderByHistoricActivityInstanceEndTime().asc().list();
-		boolean start = false;
-		Map<String, Integer> activityMap = new HashMap<>(16);
-		for (int i = 0; i < historicActivityInstanceList.size(); i++) {
-			HistoricActivityInstance historicActivityInstance = historicActivityInstanceList.get(i);
-			// 过滤开始节点前的节点
-			if (StringUtil.isNotBlank(startActivityId) && startActivityId.equals(historicActivityInstance.getActivityId())) {
-				start = true;
-			}
-			if (StringUtil.isNotBlank(startActivityId) && !start) {
-				continue;
-			}
-			// 显示开始节点和结束节点,并且执行人不为空的任务
-			if (StringUtils.isNotBlank(historicActivityInstance.getAssignee())
-				|| FlowEngineConstant.START_EVENT.equals(historicActivityInstance.getActivityType())
-				|| FlowEngineConstant.END_EVENT.equals(historicActivityInstance.getActivityType())) {
-				// 给节点增加序号
-				Integer activityNum = activityMap.get(historicActivityInstance.getActivityId());
-				if (activityNum == null) {
-					activityMap.put(historicActivityInstance.getActivityId(), activityMap.size());
-				}
-				BladeFlow flow = new BladeFlow();
-				flow.setHistoryActivityId(historicActivityInstance.getActivityId());
-				flow.setHistoryActivityName(historicActivityInstance.getActivityName());
-				flow.setCreateTime(historicActivityInstance.getStartTime());
-				flow.setEndTime(historicActivityInstance.getEndTime());
-				String durationTime = DateUtil.secondToTime(Func.toLong(historicActivityInstance.getDurationInMillis(), 0L) / 1000);
-				flow.setHistoryActivityDurationTime(durationTime);
-				// 获取流程发起人名称
-				if (FlowEngineConstant.START_EVENT.equals(historicActivityInstance.getActivityType())) {
-					List<HistoricProcessInstance> processInstanceList = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).orderByProcessInstanceStartTime().asc().list();
-					if (processInstanceList.size() > 0) {
-						if (StringUtil.isNotBlank(processInstanceList.get(0).getStartUserId())) {
-							String taskUser = processInstanceList.get(0).getStartUserId();
-							User user = UserCache.getUser(TaskUtil.getUserId(taskUser));
-							if (user != null) {
-								flow.setAssignee(historicActivityInstance.getAssignee());
-								flow.setAssigneeName(user.getName());
-							}
-						}
-					}
-				}
-				// 获取任务执行人名称
-				if (StringUtil.isNotBlank(historicActivityInstance.getAssignee())) {
-					User user = UserCache.getUser(TaskUtil.getUserId(historicActivityInstance.getAssignee()));
-					if (user != null) {
-						flow.setAssignee(historicActivityInstance.getAssignee());
-						flow.setAssigneeName(user.getName());
-					}
-				}
-				// 获取意见评论内容
-				if (StringUtil.isNotBlank(historicActivityInstance.getTaskId())) {
-					List<Comment> commentList = taskService.getTaskComments(historicActivityInstance.getTaskId());
-					if (commentList.size() > 0) {
-						flow.setComment(commentList.get(0).getFullMessage());
-					}
-				}
-				flowList.add(flow);
-			}
-			// 过滤结束节点后的节点
-			if (StringUtils.isNotBlank(endActivityId) && endActivityId.equals(historicActivityInstance.getActivityId())) {
-				boolean temp = false;
-				Integer activityNum = activityMap.get(historicActivityInstance.getActivityId());
-				// 该活动节点,后续节点是否在结束节点之前,在后续节点中是否存在
-				for (int j = i + 1; j < historicActivityInstanceList.size(); j++) {
-					HistoricActivityInstance hi = historicActivityInstanceList.get(j);
-					Integer activityNumA = activityMap.get(hi.getActivityId());
-					boolean numberTemp = activityNumA != null && activityNumA < activityNum;
-					boolean equalsTemp = StringUtils.equals(hi.getActivityId(), historicActivityInstance.getActivityId());
-					if (numberTemp || equalsTemp) {
-						temp = true;
-					}
-				}
-				if (!temp) {
-					break;
-				}
-			}
-		}
-		return flowList;
-	}
-
-	@Override
-	public String changeState(String state, String processId) {
-		try {
-			if (state.equals(FlowEngineConstant.ACTIVE)) {
-				repositoryService.activateProcessDefinitionById(processId, true, null);
-				return StringUtil.format("激活ID为 [{}] 的流程成功", processId);
-			} else if (state.equals(FlowEngineConstant.SUSPEND)) {
-				repositoryService.suspendProcessDefinitionById(processId, true, null);
-				return StringUtil.format("挂起ID为 [{}] 的流程成功", processId);
-			} else {
-				return "暂无流程变更";
-			}
-		} catch (Exception e) {
-			if (e.getMessage().contains(ALREADY_IN_STATE)) {
-				return StringUtil.format("ID为 [{}] 的流程已是此状态,无需操作", processId);
-			}
-			return e.getMessage();
-		}
-	}
-
-	@Override
-	public boolean deleteDeployment(String deploymentIds) {
-		Func.toStrList(deploymentIds).forEach(deploymentId -> repositoryService.deleteDeployment(deploymentId, true));
-		return true;
-	}
-
-	@Override
-	public boolean deployUpload(List<MultipartFile> files, String category, List<String> tenantIdList) {
-		files.forEach(file -> {
-			try {
-				String fileName = file.getOriginalFilename();
-				InputStream fileInputStream = file.getInputStream();
-				byte[] bytes = FileUtil.copyToByteArray(fileInputStream);
-				if (Func.isNotEmpty(tenantIdList)) {
-					tenantIdList.forEach(tenantId -> {
-						Deployment deployment = repositoryService.createDeployment().addBytes(fileName, bytes).tenantId(tenantId).deploy();
-						deploy(deployment, category);
-					});
-				} else {
-					Deployment deployment = repositoryService.createDeployment().addBytes(fileName, bytes).deploy();
-					deploy(deployment, category);
-				}
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
-		});
-		return true;
-	}
-
-	@Override
-	public boolean deployModel(String modelId, String category, List<String> tenantIdList) {
-		FlowModel model = this.getById(modelId);
-		if (model == null) {
-			throw new ServiceException("No model found with the given id: " + modelId);
-		}
-		byte[] bytes = getBpmnXML(model);
-		String processName = model.getName();
-		if (!StringUtil.endsWithIgnoreCase(processName, FlowEngineConstant.SUFFIX)) {
-			processName += FlowEngineConstant.SUFFIX;
-		}
-		String finalProcessName = processName;
-		if (Func.isNotEmpty(tenantIdList)) {
-			tenantIdList.forEach(tenantId -> {
-				Deployment deployment = repositoryService.createDeployment().addBytes(finalProcessName, bytes).name(model.getName()).key(model.getModelKey()).tenantId(tenantId).deploy();
-				deploy(deployment, category);
-			});
-		} else {
-			Deployment deployment = repositoryService.createDeployment().addBytes(finalProcessName, bytes).name(model.getName()).key(model.getModelKey()).deploy();
-			deploy(deployment, category);
-		}
-		return true;
-	}
-
-	@Override
-	public boolean deleteProcessInstance(String processInstanceId, String deleteReason) {
-		runtimeService.deleteProcessInstance(processInstanceId, deleteReason);
-		return true;
-	}
-
-	private boolean deploy(Deployment deployment, String category) {
-		log.debug("流程部署--------deploy:  " + deployment + "  分类---------->" + category);
-		List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).list();
-		StringBuilder logBuilder = new StringBuilder(500);
-		List<Object> logArgs = new ArrayList<>();
-		// 设置流程分类
-		for (ProcessDefinition processDefinition : list) {
-			if (StringUtil.isNotBlank(category)) {
-				repositoryService.setProcessDefinitionCategory(processDefinition.getId(), category);
-			}
-			logBuilder.append("部署成功,流程ID={} \n");
-			logArgs.add(processDefinition.getId());
-		}
-		if (list.size() == 0) {
-			throw new ServiceException("部署失败,未找到流程");
-		} else {
-			log.info(logBuilder.toString(), logArgs.toArray());
-			return true;
-		}
-	}
-
-	private byte[] getBpmnXML(FlowModel model) {
-		BpmnModel bpmnModel = getBpmnModel(model);
-		return getBpmnXML(bpmnModel);
-	}
-
-	private byte[] getBpmnXML(BpmnModel bpmnModel) {
-		for (Process process : bpmnModel.getProcesses()) {
-			if (StringUtils.isNotEmpty(process.getId())) {
-				char firstCharacter = process.getId().charAt(0);
-				if (Character.isDigit(firstCharacter)) {
-					process.setId("a" + process.getId());
-				}
-			}
-		}
-		return BPMN_XML_CONVERTER.convertToXML(bpmnModel);
-	}
-
-	private BpmnModel getBpmnModel(FlowModel model) {
-		BpmnModel bpmnModel;
-		try {
-			Map<String, FlowModel> formMap = new HashMap<>(16);
-			Map<String, FlowModel> decisionTableMap = new HashMap<>(16);
-
-			List<FlowModel> referencedModels = baseMapper.findByParentModelId(model.getId());
-			for (FlowModel childModel : referencedModels) {
-				if (FlowModel.MODEL_TYPE_FORM == childModel.getModelType()) {
-					formMap.put(childModel.getId(), childModel);
-
-				} else if (FlowModel.MODEL_TYPE_DECISION_TABLE == childModel.getModelType()) {
-					decisionTableMap.put(childModel.getId(), childModel);
-				}
-			}
-			bpmnModel = getBpmnModel(model, formMap, decisionTableMap);
-		} catch (Exception e) {
-			log.error("Could not generate BPMN 2.0 model for {}", model.getId(), e);
-			throw new ServiceException("Could not generate BPMN 2.0 model");
-		}
-		return bpmnModel;
-	}
-
-	private BpmnModel getBpmnModel(FlowModel model, Map<String, FlowModel> formMap, Map<String, FlowModel> decisionTableMap) {
-		try {
-			ObjectNode editorJsonNode = (ObjectNode) objectMapper.readTree(model.getModelEditorJson());
-			Map<String, String> formKeyMap = new HashMap<>(16);
-			for (FlowModel formModel : formMap.values()) {
-				formKeyMap.put(formModel.getId(), formModel.getModelKey());
-			}
-			Map<String, String> decisionTableKeyMap = new HashMap<>(16);
-			for (FlowModel decisionTableModel : decisionTableMap.values()) {
-				decisionTableKeyMap.put(decisionTableModel.getId(), decisionTableModel.getModelKey());
-			}
-			return BPMN_JSON_CONVERTER.convertToBpmnModel(editorJsonNode, formKeyMap, decisionTableKeyMap);
-		} catch (Exception e) {
-			log.error("Could not generate BPMN 2.0 model for {}", model.getId(), e);
-			throw new ServiceException("Could not generate BPMN 2.0 model");
-		}
-	}
-
-}

+ 0 - 73
src/main/java/org/springblade/flow/engine/utils/FlowCache.java

@@ -1,73 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.engine.utils;
-
-import org.flowable.engine.RepositoryService;
-import org.flowable.engine.repository.ProcessDefinition;
-import org.springblade.common.cache.DictCache;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.SpringUtil;
-import org.springblade.core.tool.utils.StringPool;
-
-/**
- * 流程缓存
- *
- * @author Chill
- */
-public class FlowCache {
-
-	private static final String FLOW_CACHE = "flow:process";
-	private static final String FLOW_DEFINITION_ID = "definition:id";
-	private static RepositoryService repositoryService;
-
-	private static RepositoryService getRepositoryService() {
-		if (repositoryService == null) {
-			repositoryService = SpringUtil.getBean(RepositoryService.class);
-		}
-		return repositoryService;
-	}
-
-	/**
-	 * 获得流程定义对象
-	 *
-	 * @param processDefinitionId 流程对象id
-	 * @return
-	 */
-	public static ProcessDefinition getProcessDefinition(String processDefinitionId) {
-		return CacheUtil.get(FLOW_CACHE, FLOW_DEFINITION_ID, processDefinitionId, () -> getRepositoryService().createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult());
-	}
-
-	/**
-	 * 获取流程类型名
-	 *
-	 * @param category 流程类型
-	 * @return
-	 */
-	public static String getCategoryName(String category) {
-		if (Func.isEmpty(category)) {
-			return StringPool.EMPTY;
-		}
-		String[] categoryArr = category.split(StringPool.UNDERSCORE);
-		if (categoryArr.length <= 1) {
-			return StringPool.EMPTY;
-		} else {
-			return DictCache.getValue(category.split(StringPool.UNDERSCORE)[0], Func.toInt(category.split(StringPool.UNDERSCORE)[1]));
-		}
-	}
-
-}

+ 94 - 0
src/main/java/org/springblade/ship/HomeController.java

@@ -0,0 +1,94 @@
+package org.springblade.ship;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.modules.system.entity.User;
+import org.springblade.modules.system.service.IDeptService;
+import org.springblade.modules.system.service.IUserService;
+import org.springblade.ship.cable.entity.Cable;
+import org.springblade.ship.cable.service.ICableService;
+import org.springblade.ship.device.entity.Device;
+import org.springblade.ship.device.service.IDeviceService;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@AllArgsConstructor
+@RequestMapping("ship/home")
+@Api(value = "", tags = "首页")
+public class HomeController extends BladeController {
+
+	private final IUserService userService;
+	private final ICableService cableService;
+	private final IDeviceService deviceService;
+
+
+	/**
+	 *
+	 */
+	@GetMapping("/getTotalData")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "总数", notes = "")
+	public R getTotalData() {
+		Map<String, Object> map = new HashMap<>();
+		map.put("userCount", userService.count());
+		map.put("cableCount", cableService.count());
+		map.put("deviceCount", deviceService.count());
+		return R.data(map);
+	}
+
+	/**
+	 *
+	 */
+	@GetMapping("/getTodayData")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "今日新增", notes = "")
+	public R getTodayData(String theDay) {
+		Map<String, Object> map = new HashMap<>();
+
+		if (theDay == null){
+			theDay = DateUtil.formatDate(DateUtil.now());
+		}
+
+		map.put("userCount", userService.count(new QueryWrapper<>(new User()).lambda().like(User::getCreateTime, theDay)));
+		map.put("cableCount", cableService.count(new QueryWrapper<>(new Cable()).lambda().like(Cable::getCreateTime, theDay)));
+		map.put("deviceCount", deviceService.count(new QueryWrapper<>(new Device()).lambda().like(Device::getCreateTime, theDay)));
+		return R.data(map);
+	}
+
+		/**
+	 *
+	 */
+	@GetMapping("/getMonthData")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "今日新增", notes = "")
+	public R getMonthData(String theMonth) {
+		Map<String, Object> map = new HashMap<>();
+
+		if (theMonth == null){
+			theMonth = DateUtil.format(DateUtil.now(), "yyyy-MM");
+		}
+
+		map.put("userList", userService.list(new QueryWrapper<>(new User()).lambda().like(User::getCreateTime, theMonth).orderByDesc(User::getCreateTime)));
+		map.put("cableList", cableService.list(new QueryWrapper<>(new Cable()).lambda().like(Cable::getCreateTime, theMonth).orderByDesc(Cable::getCreateTime)));
+		map.put("deviceList", deviceService.list(new QueryWrapper<>(new Device()).lambda().like(Device::getCreateTime, theMonth).orderByDesc(Device::getCreateTime)));
+		return R.data(map);
+	}
+
+
+
+}

+ 136 - 0
src/main/java/org/springblade/ship/cable/controller/CableController.java

@@ -0,0 +1,136 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.ship.cable.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import lombok.AllArgsConstructor;
+import javax.validation.Valid;
+
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.RequestParam;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.ship.cable.entity.Cable;
+import org.springblade.ship.cable.vo.CableVO;
+import org.springblade.ship.cable.wrapper.CableWrapper;
+import org.springblade.ship.cable.service.ICableService;
+import org.springblade.core.boot.ctrl.BladeController;
+
+import java.util.Map;
+
+/**
+ *  控制器
+ *
+ * @author BladeX
+ * @since 2021-11-15
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("ship/cable")
+@Api(value = "", tags = "接口")
+public class CableController extends BladeController {
+
+	private final ICableService cableService;
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入cable")
+	public R<CableVO> detail(Cable cable) {
+		Cable detail = cableService.getOne(Condition.getQueryWrapper(cable));
+		return R.data(CableWrapper.build().entityVO(detail));
+	}
+
+	/**
+	 * 分页
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入cable")
+	public R<IPage<CableVO>> list(CableVO cable, Query query) {
+		QueryWrapper<Cable> queryWrapper = Condition.getQueryWrapper(cable);
+		if (cable.getCreateTimeBegin() != null && cable.getCreateTimeEnd() != null){
+			queryWrapper.lambda().between(Cable::getCreateTime, cable.getCreateTimeBegin(), cable.getCreateTimeEnd());
+		}
+		IPage<Cable> pages = cableService.page(Condition.getPage(query), queryWrapper);
+		return R.data(CableWrapper.build().pageVO(pages));
+	}
+
+
+	/**
+	 * 自定义分页
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入cable")
+	public R<IPage<CableVO>> page(CableVO cable, Query query) {
+		IPage<CableVO> pages = cableService.selectCablePage(Condition.getPage(query), cable);
+		return R.data(pages);
+	}
+
+	/**
+	 * 新增
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "新增", notes = "传入cable")
+	public R save(@Valid @RequestBody Cable cable) {
+		return R.status(cableService.save(cable));
+	}
+
+	/**
+	 * 修改
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入cable")
+	public R update(@Valid @RequestBody Cable cable) {
+		return R.status(cableService.updateById(cable));
+	}
+
+	/**
+	 * 新增或修改
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入cable")
+	public R submit(@Valid @RequestBody Cable cable) {
+		return R.status(cableService.saveOrUpdate(cable));
+	}
+
+
+	/**
+	 * 删除
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "逻辑删除", notes = "传入ids")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return R.status(cableService.deleteLogic(Func.toLongList(ids)));
+	}
+
+
+}

+ 7 - 16
src/main/java/org/springblade/flow/core/entity/FlowEntity.java → src/main/java/org/springblade/ship/cable/dto/CableDTO.java

@@ -14,30 +14,21 @@
  *  this software without specific prior written permission.
  *  Author: Chill 庄骞 (smallchill@163.com)
  */
-package org.springblade.flow.core.entity;
+package org.springblade.ship.cable.dto;
 
-import com.baomidou.mybatisplus.annotation.TableField;
+import org.springblade.ship.cable.entity.Cable;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import org.springblade.core.mp.base.BaseEntity;
 
 /**
- * FlowEntity
+ * 数据传输对象实体类
  *
- * @author Chill
+ * @author BladeX
+ * @since 2021-11-15
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
-public class FlowEntity extends BaseEntity {
-
-	@TableField(exist = false)
-	private BladeFlow flow;
-
-	public BladeFlow getFlow() {
-		if (flow == null) {
-			flow = new BladeFlow();
-		}
-		return flow;
-	}
+public class CableDTO extends Cable {
+	private static final long serialVersionUID = 1L;
 
 }

+ 152 - 0
src/main/java/org/springblade/ship/cable/entity/Cable.java

@@ -0,0 +1,152 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.ship.cable.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import org.springblade.core.mp.base.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * 实体类
+ *
+ * @author BladeX
+ * @since 2021-11-15
+ */
+@Data
+@TableName("sc_cable")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "Cable对象", description = "Cable对象")
+public class Cable extends BaseEntity {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	* 电缆代号
+	*/
+		@ApiModelProperty(value = "电缆代号")
+		private String alias;
+	/**
+	* 类别
+	*/
+		@ApiModelProperty(value = "类别")
+		private String category;
+	/**
+	* 型号
+	*/
+		@ApiModelProperty(value = "型号")
+		private String model;
+	/**
+	* 规格
+	*/
+		@ApiModelProperty(value = "规格")
+		private String specs;
+	/**
+	* 直径
+	*/
+		@ApiModelProperty(value = "直径")
+		private String diameter;
+	/**
+	* 起点舱室
+	*/
+		@ApiModelProperty(value = "起点舱室")
+		private String beginCabin;
+	/**
+	* 起点设备名称
+	*/
+		@ApiModelProperty(value = "起点设备名称")
+		private String beginName;
+	/**
+	* 起点甲板
+	*/
+		@ApiModelProperty(value = "起点甲板")
+		private String beginDeck;
+	/**
+	* 起点船舷
+	*/
+		@ApiModelProperty(value = "起点船舷")
+		private String beginShipSide;
+	/**
+	* 起点肋位
+	*/
+		@ApiModelProperty(value = "起点肋位")
+		private String beginRibPosition;
+	/**
+	* 经过节点
+	*/
+		@ApiModelProperty(value = "经过节点")
+		private String passNode;
+	/**
+	* 终点舱室
+	*/
+		@ApiModelProperty(value = "终点舱室")
+		private String endCabin;
+	/**
+	* 终点设备名称
+	*/
+		@ApiModelProperty(value = "终点设备名称")
+		private String endName;
+	/**
+	* 终点甲板
+	*/
+		@ApiModelProperty(value = "终点甲板")
+		private String endDeck;
+	/**
+	* 终点船舷
+	*/
+		@ApiModelProperty(value = "终点船舷")
+		private String endShipSide;
+	/**
+	* 终点肋位
+	*/
+		@ApiModelProperty(value = "终点肋位")
+		private String endRibPosition;
+	/**
+	* 停止点
+	*/
+		@ApiModelProperty(value = "停止点")
+		private String stopPoint;
+	/**
+	* 前长度
+	*/
+		@ApiModelProperty(value = "前长度")
+		private String frontLen;
+	/**
+	* 总长
+	*/
+		@ApiModelProperty(value = "总长")
+		private String len;
+	/**
+	* 系统图号
+	*/
+		@ApiModelProperty(value = "系统图号")
+		private String drawingNo;
+	/**
+	* 标签
+	*/
+		@ApiModelProperty(value = "标签")
+		private String label;
+	/**
+	* 备注
+	*/
+		@ApiModelProperty(value = "备注")
+		private String remark;
+
+
+}

+ 10 - 14
src/main/java/org/springblade/flow/engine/mapper/FlowMapper.java → src/main/java/org/springblade/ship/cable/mapper/CableMapper.java

@@ -14,33 +14,29 @@
  *  this software without specific prior written permission.
  *  Author: Chill 庄骞 (smallchill@163.com)
  */
-package org.springblade.flow.engine.mapper;
+package org.springblade.ship.cable.mapper;
 
+import org.springblade.ship.cable.entity.Cable;
+import org.springblade.ship.cable.vo.CableVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.flow.engine.entity.FlowModel;
-
 import java.util.List;
 
 /**
- * FlowMapper.
+ *  Mapper 接口
  *
- * @author Chill
+ * @author BladeX
+ * @since 2021-11-15
  */
-public interface FlowMapper extends BaseMapper<FlowModel> {
+public interface CableMapper extends BaseMapper<Cable> {
 
 	/**
 	 * 自定义分页
+	 *
 	 * @param page
-	 * @param flowModel
+	 * @param cable
 	 * @return
 	 */
-	List<FlowModel> selectFlowPage(IPage page, FlowModel flowModel);
+	List<CableVO> selectCablePage(IPage page, CableVO cable);
 
-	/**
-	 * 获取模型
-	 * @param parentModelId
-	 * @return
-	 */
-	List<FlowModel> findByParentModelId(String parentModelId);
 }

+ 37 - 0
src/main/java/org/springblade/ship/cable/mapper/CableMapper.xml

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.ship.cable.mapper.CableMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="cableResultMap" type="org.springblade.ship.cable.entity.Cable">
+        <result column="id" property="id"/>
+        <result column="alias" property="alias"/>
+        <result column="category" property="category"/>
+        <result column="model" property="model"/>
+        <result column="specs" property="specs"/>
+        <result column="diameter" property="diameter"/>
+        <result column="begin_cabin" property="beginCabin"/>
+        <result column="begin_name" property="beginName"/>
+        <result column="begin_deck" property="beginDeck"/>
+        <result column="begin_ship_side" property="beginShipSide"/>
+        <result column="begin_rib_position" property="beginRibPosition"/>
+        <result column="pass_node" property="passNode"/>
+        <result column="end_cabin" property="endCabin"/>
+        <result column="end_name" property="endName"/>
+        <result column="end_deck" property="endDeck"/>
+        <result column="end_ship_side" property="endShipSide"/>
+        <result column="end_rib_position" property="endRibPosition"/>
+        <result column="stop_point" property="stopPoint"/>
+        <result column="front_len" property="frontLen"/>
+        <result column="len" property="len"/>
+        <result column="drawing_no" property="drawingNo"/>
+        <result column="label" property="label"/>
+        <result column="remark" property="remark"/>
+    </resultMap>
+
+
+    <select id="selectCablePage" resultMap="cableResultMap">
+        select * from sc_cable where is_deleted = 0
+    </select>
+
+</mapper>

+ 13 - 9
src/main/java/org/springblade/flow/demo/leave/service/ILeaveService.java → src/main/java/org/springblade/ship/cable/service/ICableService.java

@@ -14,24 +14,28 @@
  *  this software without specific prior written permission.
  *  Author: Chill 庄骞 (smallchill@163.com)
  */
-package org.springblade.flow.demo.leave.service;
+package org.springblade.ship.cable.service;
 
+import org.springblade.ship.cable.entity.Cable;
+import org.springblade.ship.cable.vo.CableVO;
 import org.springblade.core.mp.base.BaseService;
-import org.springblade.flow.demo.leave.entity.ProcessLeave;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 
 /**
- * 服务类
+ *  服务类
  *
- * @author Chill
+ * @author BladeX
+ * @since 2021-11-15
  */
-public interface ILeaveService extends BaseService<ProcessLeave> {
+public interface ICableService extends BaseService<Cable> {
 
 	/**
-	 * 开启流程
+	 * 自定义分页
 	 *
-	 * @param leave 请假实体
-	 * @return boolean
+	 * @param page
+	 * @param cable
+	 * @return
 	 */
-	boolean startProcess(ProcessLeave leave);
+	IPage<CableVO> selectCablePage(IPage<CableVO> page, CableVO cable);
 
 }

+ 41 - 0
src/main/java/org/springblade/ship/cable/service/impl/CableServiceImpl.java

@@ -0,0 +1,41 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.ship.cable.service.impl;
+
+import org.springblade.ship.cable.entity.Cable;
+import org.springblade.ship.cable.vo.CableVO;
+import org.springblade.ship.cable.mapper.CableMapper;
+import org.springblade.ship.cable.service.ICableService;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ *  服务实现类
+ *
+ * @author BladeX
+ * @since 2021-11-15
+ */
+@Service
+public class CableServiceImpl extends BaseServiceImpl<CableMapper, Cable> implements ICableService {
+
+	@Override
+	public IPage<CableVO> selectCablePage(IPage<CableVO> page, CableVO cable) {
+		return page.setRecords(baseMapper.selectCablePage(page, cable));
+	}
+
+}

+ 26 - 22
src/main/java/org/springblade/flow/engine/entity/FlowExecution.java → src/main/java/org/springblade/ship/cable/vo/CableVO.java

@@ -14,37 +14,41 @@
  *  this software without specific prior written permission.
  *  Author: Chill 庄骞 (smallchill@163.com)
  */
-package org.springblade.flow.engine.entity;
+package org.springblade.ship.cable.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springblade.ship.cable.entity.Cable;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
+import io.swagger.annotations.ApiModel;
+import org.springframework.format.annotation.DateTimeFormat;
 
-import java.io.Serializable;
 import java.util.Date;
 
 /**
- * 运行实体类
+ * 视图实体类
  *
- * @author Chill
+ * @author BladeX
+ * @since 2021-11-15
  */
 @Data
-public class FlowExecution implements Serializable {
-
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "CableVO对象", description = "CableVO对象")
+public class CableVO extends Cable {
 	private static final long serialVersionUID = 1L;
 
-	private String id;
-	private String name;
-	private String startUserId;
-	private String startUser;
-	private Date startTime;
-	private String taskDefinitionId;
-	private String taskDefinitionKey;
-	private String category;
-	private String categoryName;
-	private String processInstanceId;
-	private String processDefinitionId;
-	private String processDefinitionKey;
-	private String activityId;
-	private int suspensionState;
-	private String executionId;
-
+	@DateTimeFormat(
+		pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	@JsonFormat(
+		pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	private Date createTimeBegin;
+	@DateTimeFormat(
+		pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	@JsonFormat(
+		pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	private Date createTimeEnd;
 }

+ 49 - 0
src/main/java/org/springblade/ship/cable/wrapper/CableWrapper.java

@@ -0,0 +1,49 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.ship.cable.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.ship.cable.entity.Cable;
+import org.springblade.ship.cable.vo.CableVO;
+import java.util.Objects;
+
+/**
+ * 包装类,返回视图层所需的字段
+ *
+ * @author BladeX
+ * @since 2021-11-15
+ */
+public class CableWrapper extends BaseEntityWrapper<Cable, CableVO>  {
+
+	public static CableWrapper build() {
+		return new CableWrapper();
+ 	}
+
+	@Override
+	public CableVO entityVO(Cable cable) {
+		CableVO cableVO = Objects.requireNonNull(BeanUtil.copy(cable, CableVO.class));
+
+		//User createUser = UserCache.getUser(cable.getCreateUser());
+		//User updateUser = UserCache.getUser(cable.getUpdateUser());
+		//cableVO.setCreateUserName(createUser.getName());
+		//cableVO.setUpdateUserName(updateUser.getName());
+
+		return cableVO;
+	}
+
+}

+ 129 - 0
src/main/java/org/springblade/ship/device/controller/DeviceController.java

@@ -0,0 +1,129 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.ship.device.controller;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import lombok.AllArgsConstructor;
+import javax.validation.Valid;
+
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.RequestParam;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.ship.device.entity.Device;
+import org.springblade.ship.device.vo.DeviceVO;
+import org.springblade.ship.device.wrapper.DeviceWrapper;
+import org.springblade.ship.device.service.IDeviceService;
+import org.springblade.core.boot.ctrl.BladeController;
+
+/**
+ *  控制器
+ *
+ * @author BladeX
+ * @since 2021-11-15
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("ship/device")
+@Api(value = "", tags = "接口")
+public class DeviceController extends BladeController {
+
+	private final IDeviceService deviceService;
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入device")
+	public R<DeviceVO> detail(Device device) {
+		Device detail = deviceService.getOne(Condition.getQueryWrapper(device));
+		return R.data(DeviceWrapper.build().entityVO(detail));
+	}
+
+	/**
+	 * 分页 
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入device")
+	public R<IPage<DeviceVO>> list(Device device, Query query) {
+		IPage<Device> pages = deviceService.page(Condition.getPage(query), Condition.getQueryWrapper(device));
+		return R.data(DeviceWrapper.build().pageVO(pages));
+	}
+
+
+	/**
+	 * 自定义分页 
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入device")
+	public R<IPage<DeviceVO>> page(DeviceVO device, Query query) {
+		IPage<DeviceVO> pages = deviceService.selectDevicePage(Condition.getPage(query), device);
+		return R.data(pages);
+	}
+
+	/**
+	 * 新增 
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "新增", notes = "传入device")
+	public R save(@Valid @RequestBody Device device) {
+		return R.status(deviceService.save(device));
+	}
+
+	/**
+	 * 修改 
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入device")
+	public R update(@Valid @RequestBody Device device) {
+		return R.status(deviceService.updateById(device));
+	}
+
+	/**
+	 * 新增或修改 
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入device")
+	public R submit(@Valid @RequestBody Device device) {
+		return R.status(deviceService.saveOrUpdate(device));
+	}
+
+	
+	/**
+	 * 删除 
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "逻辑删除", notes = "传入ids")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return R.status(deviceService.deleteLogic(Func.toLongList(ids)));
+	}
+
+	
+}

+ 11 - 6
src/main/java/org/springblade/flow/demo/leave/mapper/LeaveMapper.java → src/main/java/org/springblade/ship/device/dto/DeviceDTO.java

@@ -14,16 +14,21 @@
  *  this software without specific prior written permission.
  *  Author: Chill 庄骞 (smallchill@163.com)
  */
-package org.springblade.flow.demo.leave.mapper;
+package org.springblade.ship.device.dto;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.flow.demo.leave.entity.ProcessLeave;
+import org.springblade.ship.device.entity.Device;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 /**
- * Mapper 接口
+ * 数据传输对象实体类
  *
- * @author Chill
+ * @author BladeX
+ * @since 2021-11-15
  */
-public interface LeaveMapper extends BaseMapper<ProcessLeave> {
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class DeviceDTO extends Device {
+	private static final long serialVersionUID = 1L;
 
 }

+ 27 - 32
src/main/java/org/springblade/flow/demo/leave/entity/ProcessLeave.java → src/main/java/org/springblade/ship/device/entity/Device.java

@@ -14,54 +14,49 @@
  *  this software without specific prior written permission.
  *  Author: Chill 庄骞 (smallchill@163.com)
  */
-package org.springblade.flow.demo.leave.entity;
+package org.springblade.ship.device.entity;
 
 import com.baomidou.mybatisplus.annotation.TableName;
+import org.springblade.core.mp.base.BaseEntity;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import org.springblade.flow.core.entity.FlowEntity;
-
-import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 
 /**
- * 请假流程实体类
+ * 实体类
  *
- * @author Chill
+ * @author BladeX
+ * @since 2021-11-15
  */
 @Data
-@TableName("blade_process_leave")
+@TableName("sc_device")
 @EqualsAndHashCode(callSuper = true)
-public class ProcessLeave extends FlowEntity {
+@ApiModel(value = "Device对象", description = "Device对象")
+public class Device extends BaseEntity {
 
 	private static final long serialVersionUID = 1L;
 
 	/**
-	 * 流程定义id
-	 */
-	private String processDefinitionId;
-	/**
-	 * 流程实例id
-	 */
-	private String processInstanceId;
-	/**
-	 * 请假开始时间
-	 */
-	private Date startTime;
+	* 设备名称
+	*/
+		@ApiModelProperty(value = "设备名称")
+		private String name;
 	/**
-	 * 请假结束时间
-	 */
-	private Date endTime;
+	* 设备编码
+	*/
+		@ApiModelProperty(value = "设备编码")
+		private String code;
 	/**
-	 * 请假理由
-	 */
-	private String reason;
+	* 设备型号
+	*/
+		@ApiModelProperty(value = "设备型号")
+		private String model;
 	/**
-	 * 审批人
-	 */
-	private String taskUser;
-	/**
-	 * 流程申请时间
-	 */
-	private Date applyTime;
+	* 权限者
+	*/
+		@ApiModelProperty(value = "权限者")
+		private String personIds;
+
 
 }

+ 42 - 0
src/main/java/org/springblade/ship/device/mapper/DeviceMapper.java

@@ -0,0 +1,42 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.ship.device.mapper;
+
+import org.springblade.ship.device.entity.Device;
+import org.springblade.ship.device.vo.DeviceVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+
+/**
+ *  Mapper 接口
+ *
+ * @author BladeX
+ * @since 2021-11-15
+ */
+public interface DeviceMapper extends BaseMapper<Device> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param device
+	 * @return
+	 */
+	List<DeviceVO> selectDevicePage(IPage page, DeviceVO device);
+
+}

+ 19 - 0
src/main/java/org/springblade/ship/device/mapper/DeviceMapper.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.ship.device.mapper.DeviceMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="deviceResultMap" type="org.springblade.ship.device.entity.Device">
+        <result column="id" property="id"/>
+        <result column="name" property="name"/>
+        <result column="code" property="code"/>
+        <result column="model" property="model"/>
+        <result column="person_ids" property="personIds"/>
+    </resultMap>
+
+
+    <select id="selectDevicePage" resultMap="deviceResultMap">
+        select * from sc_device where is_deleted = 0
+    </select>
+
+</mapper>

+ 41 - 0
src/main/java/org/springblade/ship/device/service/IDeviceService.java

@@ -0,0 +1,41 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.ship.device.service;
+
+import org.springblade.ship.device.entity.Device;
+import org.springblade.ship.device.vo.DeviceVO;
+import org.springblade.core.mp.base.BaseService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ *  服务类
+ *
+ * @author BladeX
+ * @since 2021-11-15
+ */
+public interface IDeviceService extends BaseService<Device> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param device
+	 * @return
+	 */
+	IPage<DeviceVO> selectDevicePage(IPage<DeviceVO> page, DeviceVO device);
+
+}

+ 41 - 0
src/main/java/org/springblade/ship/device/service/impl/DeviceServiceImpl.java

@@ -0,0 +1,41 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.ship.device.service.impl;
+
+import org.springblade.ship.device.entity.Device;
+import org.springblade.ship.device.vo.DeviceVO;
+import org.springblade.ship.device.mapper.DeviceMapper;
+import org.springblade.ship.device.service.IDeviceService;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ *  服务实现类
+ *
+ * @author BladeX
+ * @since 2021-11-15
+ */
+@Service
+public class DeviceServiceImpl extends BaseServiceImpl<DeviceMapper, Device> implements IDeviceService {
+
+	@Override
+	public IPage<DeviceVO> selectDevicePage(IPage<DeviceVO> page, DeviceVO device) {
+		return page.setRecords(baseMapper.selectDevicePage(page, device));
+	}
+
+}

+ 14 - 22
src/main/java/org/springblade/flow/core/enums/FlowModeEnum.java → src/main/java/org/springblade/ship/device/vo/DeviceVO.java

@@ -14,32 +14,24 @@
  *  this software without specific prior written permission.
  *  Author: Chill 庄骞 (smallchill@163.com)
  */
-package org.springblade.flow.core.enums;
+package org.springblade.ship.device.vo;
 
-import lombok.AllArgsConstructor;
-import lombok.Getter;
+import org.springblade.ship.device.entity.Device;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import io.swagger.annotations.ApiModel;
 
 /**
- * 流程类型枚举
+ * 视图实体类
  *
- * @author Chill
+ * @author BladeX
+ * @since 2021-11-15
  */
-@Getter
-@AllArgsConstructor
-public enum FlowModeEnum {
-
-	/**
-	 * 通用流程
-	 */
-	COMMON("common", 1),
-
-	/**
-	 * 定制流程
-	 */
-	CUSTOM("custom", 2),
-	;
-
-	final String name;
-	final int mode;
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "DeviceVO对象", description = "DeviceVO对象")
+public class DeviceVO extends Device {
+	private static final long serialVersionUID = 1L;
 
+	private String personNames;
 }

+ 64 - 0
src/main/java/org/springblade/ship/device/wrapper/DeviceWrapper.java

@@ -0,0 +1,64 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.ship.device.wrapper;
+
+import org.springblade.common.cache.UserCache;
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.modules.system.entity.User;
+import org.springblade.ship.device.entity.Device;
+import org.springblade.ship.device.vo.DeviceVO;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 包装类,返回视图层所需的字段
+ *
+ * @author BladeX
+ * @since 2021-11-15
+ */
+public class DeviceWrapper extends BaseEntityWrapper<Device, DeviceVO>  {
+
+	public static DeviceWrapper build() {
+		return new DeviceWrapper();
+ 	}
+
+	@Override
+	public DeviceVO entityVO(Device device) {
+		DeviceVO deviceVO = Objects.requireNonNull(BeanUtil.copy(device, DeviceVO.class));
+
+		if (device.getPersonIds() != null){
+			List<String> nameList = new ArrayList<>();
+			String[] split = device.getPersonIds().split(",");
+			for (int i = 0; i < split.length; i++) {
+				String userId = split[i];
+				User user = UserCache.getUser(Long.valueOf(userId));
+				nameList.add(user.getName());
+			}
+			deviceVO.setPersonNames(StringUtil.join(nameList));
+		}
+
+		//User updateUser = UserCache.getUser(device.getUpdateUser());
+		//deviceVO.setUpdateUserName(updateUser.getName());
+
+		return deviceVO;
+	}
+
+}

+ 2 - 2
src/main/resources/application-dev.yml

@@ -13,9 +13,9 @@ spring:
     #  commandTimeout: 5000
   datasource:
     # MySql
-    url: jdbc:mysql://localhost:3306/bladex_boot?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
+    url: jdbc:mysql://localhost:3306/ship_cable?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
     username: root
-    password: root
+    password: 123456
     # PostgreSQL
     #url: jdbc:postgresql://127.0.0.1:5432/bladex_boot
     #username: postgres

+ 1 - 1
src/main/resources/application.yml

@@ -1,6 +1,6 @@
 #服务器配置
 server:
-  port: 80
+  port: 9528
   undertow:
     # 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
     io-threads: 16