Commit ce9f81062073a90657531d6f32aff847480ed57e
1 parent
ca9b738a
step 1 修改用户鉴权 以及部分流程
Showing
41 changed files
with
2205 additions
and
250 deletions
trash-activiti/src/main/java/com/trash/activiti/controller/TaskController.java
| @@ -28,18 +28,20 @@ public class TaskController extends BaseController { | @@ -28,18 +28,20 @@ public class TaskController extends BaseController { | ||
| 28 | @Autowired | 28 | @Autowired |
| 29 | private IActTaskService actTaskService; | 29 | private IActTaskService actTaskService; |
| 30 | 30 | ||
| 31 | - | ||
| 32 | - | ||
| 33 | //获取我的代办任务 | 31 | //获取我的代办任务 |
| 34 | @GetMapping(value = "/list") | 32 | @GetMapping(value = "/list") |
| 35 | public TableDataInfo getTasks() { | 33 | public TableDataInfo getTasks() { |
| 36 | PageDomain pageDomain = TableSupport.buildPageRequest(); | 34 | PageDomain pageDomain = TableSupport.buildPageRequest(); |
| 37 | Page<ActTaskDTO> hashMaps = actTaskService.selectProcessDefinitionList(pageDomain); | 35 | Page<ActTaskDTO> hashMaps = actTaskService.selectProcessDefinitionList(pageDomain); |
| 38 | return getDataTable(hashMaps); | 36 | return getDataTable(hashMaps); |
| 37 | + } | ||
| 39 | 38 | ||
| 40 | - | 39 | + @RequestMapping("/taskHistory") |
| 40 | + public String taskHistory() { | ||
| 41 | + return "taskHistory"; | ||
| 41 | } | 42 | } |
| 42 | 43 | ||
| 44 | + | ||
| 43 | 45 | ||
| 44 | //渲染表单 | 46 | //渲染表单 |
| 45 | @GetMapping(value = "/formDataShow/{taskID}") | 47 | @GetMapping(value = "/formDataShow/{taskID}") |
trash-activiti/src/main/java/com/trash/activiti/controller/TaskHistoryController.java
0 → 100644
| 1 | +package com.trash.activiti.controller; | ||
| 2 | + | ||
| 3 | + | ||
| 4 | +import com.github.pagehelper.Page; | ||
| 5 | +import com.trash.common.core.controller.BaseController; | ||
| 6 | +import com.trash.common.core.domain.AjaxResult; | ||
| 7 | +import com.trash.common.core.page.PageDomain; | ||
| 8 | +import com.trash.common.core.page.TableDataInfo; | ||
| 9 | +import com.trash.common.core.page.TableSupport; | ||
| 10 | +import com.trash.activiti.domain.dto.ActTaskDTO; | ||
| 11 | +import com.trash.activiti.domain.dto.ActWorkflowFormDataDTO; | ||
| 12 | +import com.trash.activiti.service.IActTaskService; | ||
| 13 | + | ||
| 14 | +import org.activiti.api.task.runtime.TaskRuntime; | ||
| 15 | +import org.springframework.beans.factory.annotation.Autowired; | ||
| 16 | +import org.springframework.web.bind.annotation.*; | ||
| 17 | + | ||
| 18 | +import java.text.ParseException; | ||
| 19 | +import java.util.List; | ||
| 20 | + | ||
| 21 | + | ||
| 22 | +@RestController | ||
| 23 | +@RequestMapping("/taskhistory") | ||
| 24 | +public class TaskHistoryController extends BaseController { | ||
| 25 | + @Autowired | ||
| 26 | + private TaskRuntime taskRuntime; | ||
| 27 | + | ||
| 28 | + @Autowired | ||
| 29 | + private IActTaskService actTaskService; | ||
| 30 | + | ||
| 31 | + //获取我的代办任务 | ||
| 32 | + @GetMapping(value = "/list") | ||
| 33 | + public TableDataInfo getTasks() { | ||
| 34 | + PageDomain pageDomain = TableSupport.buildPageRequest(); | ||
| 35 | + Page<ActTaskDTO> hashMaps = actTaskService.selectRuntimeTaskHistoryDefinitionList(pageDomain); | ||
| 36 | + return getDataTable(hashMaps); | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + @GetMapping(value = "/listend") | ||
| 40 | + public TableDataInfo getEndTasks() { | ||
| 41 | + PageDomain pageDomain = TableSupport.buildPageRequest(); | ||
| 42 | + Page<ActTaskDTO> hashMaps = actTaskService.selectTaskEndHistoryDefinitionList(pageDomain); | ||
| 43 | + return getDataTable(hashMaps); | ||
| 44 | + } | ||
| 45 | + | ||
| 46 | + | ||
| 47 | + //渲染表单 | ||
| 48 | + @GetMapping(value = "/formDataShow/{taskID}") | ||
| 49 | + public AjaxResult formDataShow(@PathVariable("taskID") String taskID) { | ||
| 50 | + return AjaxResult.success(actTaskService.formDataShow(taskID)); | ||
| 51 | + } | ||
| 52 | + | ||
| 53 | + //保存表单 | ||
| 54 | + @PostMapping(value = "/formDataSave/{taskID}") | ||
| 55 | + public AjaxResult formDataSave(@PathVariable("taskID") String taskID, | ||
| 56 | + @RequestBody List<ActWorkflowFormDataDTO> formData ) throws ParseException { | ||
| 57 | + return toAjax(actTaskService.formDataSave(taskID, formData)); | ||
| 58 | + | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | +} |
trash-activiti/src/main/java/com/trash/activiti/domain/dto/ActTaskDTO.java
| @@ -3,10 +3,13 @@ package com.trash.activiti.domain.dto; | @@ -3,10 +3,13 @@ package com.trash.activiti.domain.dto; | ||
| 3 | import com.fasterxml.jackson.annotation.JsonFormat; | 3 | import com.fasterxml.jackson.annotation.JsonFormat; |
| 4 | import com.trash.common.core.domain.BaseEntity; | 4 | import com.trash.common.core.domain.BaseEntity; |
| 5 | import org.activiti.api.task.model.Task; | 5 | import org.activiti.api.task.model.Task; |
| 6 | - | 6 | +import org.activiti.engine.history.HistoricProcessInstance; |
| 7 | +import org.activiti.engine.history.HistoricTaskInstance; | ||
| 7 | import org.activiti.engine.runtime.ProcessInstance; | 8 | import org.activiti.engine.runtime.ProcessInstance; |
| 8 | 9 | ||
| 10 | +import java.text.SimpleDateFormat; | ||
| 9 | import java.util.Date; | 11 | import java.util.Date; |
| 12 | +import java.util.Map; | ||
| 10 | 13 | ||
| 11 | public class ActTaskDTO | 14 | public class ActTaskDTO |
| 12 | extends BaseEntity { | 15 | extends BaseEntity { |
| @@ -19,16 +22,52 @@ public class ActTaskDTO | @@ -19,16 +22,52 @@ public class ActTaskDTO | ||
| 19 | 22 | ||
| 20 | private String status; | 23 | private String status; |
| 21 | 24 | ||
| 25 | + private String startTime; | ||
| 26 | + | ||
| 27 | + private String endTime; | ||
| 28 | + | ||
| 29 | + private String reason; | ||
| 30 | + | ||
| 31 | + private String type; | ||
| 32 | + | ||
| 33 | + private String checkStatus; | ||
| 34 | + | ||
| 35 | + | ||
| 22 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") | 36 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| 23 | private Date createdDate; | 37 | private Date createdDate; |
| 24 | private String instanceName; | 38 | private String instanceName; |
| 25 | private String definitionKey; | 39 | private String definitionKey; |
| 26 | private String businessKey; | 40 | private String businessKey; |
| 27 | 41 | ||
| 28 | - public ActTaskDTO() { | 42 | + |
| 43 | + | ||
| 44 | + public ActTaskDTO(ProcessInstance processInstance, Map<String, String> map) { | ||
| 45 | + this.id = processInstance.getId(); | ||
| 46 | + this.instanceName = processInstance.getName(); | ||
| 47 | + this.definitionKey= processInstance.getProcessDefinitionKey(); | ||
| 48 | + this.businessKey= processInstance.getBusinessKey(); | ||
| 49 | + this.startTime = sdf.format(map.get("startTime")); | ||
| 50 | + this.endTime = sdf.format(map.get("endTime")); | ||
| 51 | + this.reason = map.get("reason"); | ||
| 52 | + this.type = map.get("type"); | ||
| 53 | + } | ||
| 54 | + | ||
| 55 | + public ActTaskDTO(HistoricProcessInstance processInstance, Map<String, String> map) { | ||
| 56 | + this.id = processInstance.getId(); | ||
| 57 | + this.instanceName = processInstance.getName(); | ||
| 58 | + this.definitionKey= processInstance.getProcessDefinitionKey(); | ||
| 59 | + this.businessKey= processInstance.getBusinessKey(); | ||
| 60 | + this.startTime = sdf.format(map.get("startTime")); | ||
| 61 | + this.endTime = sdf.format(map.get("endTime")); | ||
| 62 | + this.reason = map.get("reason"); | ||
| 63 | + this.type = map.get("type"); | ||
| 29 | } | 64 | } |
| 65 | + | ||
| 66 | + | ||
| 67 | + | ||
| 68 | + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); | ||
| 30 | 69 | ||
| 31 | - public ActTaskDTO(Task task, ProcessInstance processInstance) { | 70 | + public ActTaskDTO(Task task, ProcessInstance processInstance,Map<String,String> map) { |
| 32 | this.id = task.getId(); | 71 | this.id = task.getId(); |
| 33 | this.name = task.getName(); | 72 | this.name = task.getName(); |
| 34 | this.status = task.getStatus().toString(); | 73 | this.status = task.getStatus().toString(); |
| @@ -36,9 +75,14 @@ public class ActTaskDTO | @@ -36,9 +75,14 @@ public class ActTaskDTO | ||
| 36 | this.instanceName = processInstance.getName(); | 75 | this.instanceName = processInstance.getName(); |
| 37 | this.definitionKey=processInstance.getProcessDefinitionKey(); | 76 | this.definitionKey=processInstance.getProcessDefinitionKey(); |
| 38 | this.businessKey=processInstance.getBusinessKey(); | 77 | this.businessKey=processInstance.getBusinessKey(); |
| 78 | + this.startTime = sdf.format(map.get("startTime")); | ||
| 79 | + this.endTime = sdf.format(map.get("endTime")); | ||
| 80 | + this.reason = map.get("reason"); | ||
| 81 | + this.type = map.get("type"); | ||
| 39 | } | 82 | } |
| 40 | 83 | ||
| 41 | - public String getId() { | 84 | + |
| 85 | + public String getId() { | ||
| 42 | return id; | 86 | return id; |
| 43 | } | 87 | } |
| 44 | 88 | ||
| @@ -93,4 +137,47 @@ public class ActTaskDTO | @@ -93,4 +137,47 @@ public class ActTaskDTO | ||
| 93 | public void setBusinessKey(String businessKey) { | 137 | public void setBusinessKey(String businessKey) { |
| 94 | this.businessKey = businessKey; | 138 | this.businessKey = businessKey; |
| 95 | } | 139 | } |
| 140 | + | ||
| 141 | + public String getStartTime() { | ||
| 142 | + return startTime; | ||
| 143 | + } | ||
| 144 | + | ||
| 145 | + public void setStartTime(String startTime) { | ||
| 146 | + this.startTime = startTime; | ||
| 147 | + } | ||
| 148 | + | ||
| 149 | + public String getEndTime() { | ||
| 150 | + return endTime; | ||
| 151 | + } | ||
| 152 | + | ||
| 153 | + public void setEndTime(String endTime) { | ||
| 154 | + this.endTime = endTime; | ||
| 155 | + } | ||
| 156 | + | ||
| 157 | + public String getReason() { | ||
| 158 | + return reason; | ||
| 159 | + } | ||
| 160 | + | ||
| 161 | + public void setReason(String reason) { | ||
| 162 | + this.reason = reason; | ||
| 163 | + } | ||
| 164 | + | ||
| 165 | + public String getType() { | ||
| 166 | + return type; | ||
| 167 | + } | ||
| 168 | + | ||
| 169 | + public void setType(String type) { | ||
| 170 | + this.type = type; | ||
| 171 | + } | ||
| 172 | + | ||
| 173 | + public String getCheckStatus() { | ||
| 174 | + return checkStatus; | ||
| 175 | + } | ||
| 176 | + | ||
| 177 | + public void setCheckStatus(String checkStatus) { | ||
| 178 | + this.checkStatus = checkStatus; | ||
| 179 | + } | ||
| 180 | + | ||
| 181 | + | ||
| 182 | + | ||
| 96 | } | 183 | } |
trash-activiti/src/main/java/com/trash/activiti/mapper/ActReDeploymentMapper.java
| @@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Param; | @@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Param; | ||
| 5 | import com.trash.activiti.domain.vo.ActReDeploymentVO; | 5 | import com.trash.activiti.domain.vo.ActReDeploymentVO; |
| 6 | 6 | ||
| 7 | import java.util.List; | 7 | import java.util.List; |
| 8 | +import java.util.Map; | ||
| 8 | import java.util.Set; | 9 | import java.util.Set; |
| 9 | 10 | ||
| 10 | /** | 11 | /** |
| @@ -17,5 +18,12 @@ public interface ActReDeploymentMapper { | @@ -17,5 +18,12 @@ public interface ActReDeploymentMapper { | ||
| 17 | 18 | ||
| 18 | 19 | ||
| 19 | public List<ActReDeploymentVO> selectActReDeploymentByIds(@Param("ids") Set<String> ids); | 20 | public List<ActReDeploymentVO> selectActReDeploymentByIds(@Param("ids") Set<String> ids); |
| 21 | + | ||
| 22 | + | ||
| 23 | + public Map<String,String> selectWorkLeaveById(@Param("id") String id); | ||
| 24 | + | ||
| 25 | + public Set<String> selectUnCompleteWorkByUsername(@Param("username") String username); | ||
| 26 | + | ||
| 27 | + public List<String> selectCompleteWorkByUsername(@Param("username") String username); | ||
| 20 | 28 | ||
| 21 | } | 29 | } |
trash-activiti/src/main/java/com/trash/activiti/service/IActTaskService.java
| @@ -12,4 +12,8 @@ public interface IActTaskService { | @@ -12,4 +12,8 @@ public interface IActTaskService { | ||
| 12 | public Page<ActTaskDTO> selectProcessDefinitionList(PageDomain pageDomain); | 12 | public Page<ActTaskDTO> selectProcessDefinitionList(PageDomain pageDomain); |
| 13 | public List<String>formDataShow(String taskID); | 13 | public List<String>formDataShow(String taskID); |
| 14 | public int formDataSave(String taskID, List<ActWorkflowFormDataDTO> awfs) throws ParseException; | 14 | public int formDataSave(String taskID, List<ActWorkflowFormDataDTO> awfs) throws ParseException; |
| 15 | + | ||
| 16 | + Page<ActTaskDTO> selectRuntimeTaskHistoryDefinitionList(PageDomain pageDomain); | ||
| 17 | + | ||
| 18 | + Page<ActTaskDTO> selectTaskEndHistoryDefinitionList(PageDomain pageDomain); | ||
| 15 | } | 19 | } |
trash-activiti/src/main/java/com/trash/activiti/service/impl/ActTaskServiceImpl.java
| 1 | 1 | ||
| 2 | - | ||
| 3 | package com.trash.activiti.service.impl; | 2 | package com.trash.activiti.service.impl; |
| 4 | 3 | ||
| 5 | -import com.github.pagehelper.Page; | ||
| 6 | -import com.trash.common.core.page.PageDomain; | ||
| 7 | -import com.trash.activiti.domain.ActWorkflowFormData; | ||
| 8 | -import com.trash.activiti.domain.dto.ActTaskDTO; | ||
| 9 | -import com.trash.activiti.domain.dto.ActWorkflowFormDataDTO; | ||
| 10 | -import com.trash.activiti.service.IActTaskService; | ||
| 11 | -import com.trash.activiti.service.IActWorkflowFormDataService; | 4 | +import java.text.ParseException; |
| 5 | +import java.text.SimpleDateFormat; | ||
| 6 | +import java.util.ArrayList; | ||
| 7 | +import java.util.HashMap; | ||
| 8 | +import java.util.HashSet; | ||
| 9 | +import java.util.List; | ||
| 10 | +import java.util.Map; | ||
| 11 | +import java.util.Set; | ||
| 12 | +import java.util.stream.Collectors; | ||
| 12 | 13 | ||
| 14 | +import org.activiti.api.runtime.shared.identity.UserGroupManager; | ||
| 13 | import org.activiti.api.runtime.shared.query.Pageable; | 15 | import org.activiti.api.runtime.shared.query.Pageable; |
| 16 | +import org.activiti.api.runtime.shared.security.SecurityManager; | ||
| 14 | import org.activiti.api.task.model.Task; | 17 | import org.activiti.api.task.model.Task; |
| 15 | import org.activiti.api.task.model.builders.TaskPayloadBuilder; | 18 | import org.activiti.api.task.model.builders.TaskPayloadBuilder; |
| 19 | +import org.activiti.api.task.model.payloads.GetTasksPayload; | ||
| 16 | import org.activiti.api.task.runtime.TaskRuntime; | 20 | import org.activiti.api.task.runtime.TaskRuntime; |
| 17 | import org.activiti.bpmn.model.FormProperty; | 21 | import org.activiti.bpmn.model.FormProperty; |
| 18 | import org.activiti.bpmn.model.UserTask; | 22 | import org.activiti.bpmn.model.UserTask; |
| 23 | +import org.activiti.engine.HistoryService; | ||
| 24 | +import org.activiti.engine.ProcessEngine; | ||
| 25 | +import org.activiti.engine.ProcessEngines; | ||
| 19 | import org.activiti.engine.RepositoryService; | 26 | import org.activiti.engine.RepositoryService; |
| 20 | import org.activiti.engine.RuntimeService; | 27 | import org.activiti.engine.RuntimeService; |
| 28 | +import org.activiti.engine.TaskService; | ||
| 29 | +import org.activiti.engine.history.HistoricProcessInstance; | ||
| 30 | +import org.activiti.engine.history.HistoricProcessInstanceQuery; | ||
| 31 | +import org.activiti.engine.history.HistoricTaskInstance; | ||
| 32 | +import org.activiti.engine.impl.HistoricProcessInstanceQueryImpl; | ||
| 33 | +import org.activiti.engine.impl.ProcessInstanceQueryImpl; | ||
| 21 | import org.activiti.engine.runtime.ProcessInstance; | 34 | import org.activiti.engine.runtime.ProcessInstance; |
| 35 | +import org.activiti.engine.runtime.ProcessInstanceQuery; | ||
| 36 | +import org.activiti.engine.task.TaskQuery; | ||
| 37 | +import org.activiti.runtime.api.query.impl.PageImpl; | ||
| 22 | import org.springframework.beans.factory.annotation.Autowired; | 38 | import org.springframework.beans.factory.annotation.Autowired; |
| 23 | import org.springframework.stereotype.Service; | 39 | import org.springframework.stereotype.Service; |
| 24 | -import java.text.ParseException; | ||
| 25 | -import java.util.ArrayList; | ||
| 26 | -import java.util.HashMap; | ||
| 27 | -import java.util.List; | ||
| 28 | -import java.util.Set; | ||
| 29 | -import java.util.stream.Collectors; | 40 | + |
| 41 | +import com.github.pagehelper.Page; | ||
| 42 | +import com.trash.activiti.domain.ActWorkflowFormData; | ||
| 43 | +import com.trash.activiti.domain.dto.ActTaskDTO; | ||
| 44 | +import com.trash.activiti.domain.dto.ActWorkflowFormDataDTO; | ||
| 45 | +import com.trash.activiti.mapper.ActReDeploymentMapper; | ||
| 46 | +import com.trash.activiti.service.IActTaskService; | ||
| 47 | +import com.trash.activiti.service.IActWorkflowFormDataService; | ||
| 48 | +import com.trash.common.core.page.PageDomain; | ||
| 30 | 49 | ||
| 31 | @Service | 50 | @Service |
| 32 | public class ActTaskServiceImpl implements IActTaskService { | 51 | public class ActTaskServiceImpl implements IActTaskService { |
| 33 | 52 | ||
| 34 | - @Autowired | ||
| 35 | - private RepositoryService repositoryService; | ||
| 36 | - | ||
| 37 | - @Autowired | ||
| 38 | - private TaskRuntime taskRuntime; | ||
| 39 | - @Autowired | ||
| 40 | - private RuntimeService runtimeService; | ||
| 41 | - @Autowired | ||
| 42 | - private IActWorkflowFormDataService actWorkflowFormDataService; | ||
| 43 | - | ||
| 44 | - | ||
| 45 | - @Override | ||
| 46 | - public Page<ActTaskDTO> selectProcessDefinitionList(PageDomain pageDomain) { | ||
| 47 | - Page<ActTaskDTO> list = new Page<ActTaskDTO>(); | ||
| 48 | - org.activiti.api.runtime.shared.query.Page<Task> pageTasks = taskRuntime.tasks(Pageable.of((pageDomain.getPageNum() - 1) * pageDomain.getPageSize(), pageDomain.getPageSize())); | ||
| 49 | - List<Task> tasks = pageTasks.getContent(); | ||
| 50 | - int totalItems = pageTasks.getTotalItems(); | ||
| 51 | - list.setTotal(totalItems); | ||
| 52 | - if (totalItems != 0) { | ||
| 53 | - Set<String> processInstanceIdIds = tasks.parallelStream().map(t -> t.getProcessInstanceId()).collect(Collectors.toSet()); | ||
| 54 | - List<ProcessInstance> processInstanceList = runtimeService.createProcessInstanceQuery().processInstanceIds(processInstanceIdIds).list(); | ||
| 55 | - List<ActTaskDTO> actTaskDTOS = tasks.stream() | ||
| 56 | - .map(t -> new ActTaskDTO(t, processInstanceList.parallelStream().filter(pi -> t.getProcessInstanceId().equals(pi.getId())).findAny().get())) | ||
| 57 | - .collect(Collectors.toList()); | ||
| 58 | - list.addAll(actTaskDTOS); | ||
| 59 | - | ||
| 60 | - } | ||
| 61 | - return list; | ||
| 62 | - } | ||
| 63 | - | ||
| 64 | - @Override | ||
| 65 | - public List<String> formDataShow(String taskID) { | ||
| 66 | - Task task = taskRuntime.task(taskID); | ||
| 67 | -/* ------------------------------------------------------------------------------ | ||
| 68 | - FormProperty_0ueitp2--__!!类型--__!!名称--__!!是否参数--__!!默认值 | ||
| 69 | - 例子: | ||
| 70 | - FormProperty_0lovri0--__!!string--__!!姓名--__!!f--__!!同意!!__--驳回 | ||
| 71 | - FormProperty_1iu6onu--__!!int--__!!年龄--__!!s | ||
| 72 | - | ||
| 73 | - 默认值:无、字符常量、FormProperty_开头定义过的控件ID | ||
| 74 | - 是否参数:f为不是参数,s是字符,t是时间(不需要int,因为这里int等价于string) | ||
| 75 | - 注:类型是可以获取到的,但是为了统一配置原则,都配置到 | ||
| 76 | - */ | ||
| 77 | - | ||
| 78 | - //注意!!!!!!!!:表单Key必须要任务编号一模一样,因为参数需要任务key,但是无法获取,只能获取表单key“task.getFormKey()”当做任务key | ||
| 79 | - UserTask userTask = (UserTask) repositoryService.getBpmnModel(task.getProcessDefinitionId()) | ||
| 80 | - .getFlowElement(task.getFormKey()); | ||
| 81 | - | ||
| 82 | - if (userTask == null) { | ||
| 83 | - return null; | ||
| 84 | - } | ||
| 85 | - List<FormProperty> formProperties = userTask.getFormProperties(); | ||
| 86 | - List<String> collect = formProperties.stream().map(fp -> fp.getId()).collect(Collectors.toList()); | ||
| 87 | - | ||
| 88 | - return collect; | ||
| 89 | - } | ||
| 90 | - | ||
| 91 | - @Override | ||
| 92 | - public int formDataSave(String taskID, List<ActWorkflowFormDataDTO> awfs) throws ParseException { | ||
| 93 | - Task task = taskRuntime.task(taskID); | ||
| 94 | - ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult(); | ||
| 95 | - | ||
| 96 | - Boolean hasVariables = false;//没有任何参数 | ||
| 97 | - HashMap<String, Object> variables = new HashMap<String, Object>(); | ||
| 98 | - //前端传来的字符串,拆分成每个控件 | ||
| 99 | - List<ActWorkflowFormData> acwfds = new ArrayList<>(); | ||
| 100 | - for (ActWorkflowFormDataDTO awf : awfs) { | ||
| 101 | - ActWorkflowFormData actWorkflowFormData = new ActWorkflowFormData(processInstance.getBusinessKey(),awf, task); | ||
| 102 | - acwfds.add(actWorkflowFormData); | ||
| 103 | - //构建参数集合 | ||
| 104 | - if(!"f".equals(awf.getControlIsParam())) { | ||
| 105 | - variables.put(awf.getControlId(), awf.getControlValue()); | ||
| 106 | - hasVariables = true; | ||
| 107 | - } | ||
| 108 | - }//for结束 | ||
| 109 | - if (task.getAssignee() == null) { | ||
| 110 | - taskRuntime.claim(TaskPayloadBuilder.claim().withTaskId(task.getId()).build()); | ||
| 111 | - } | ||
| 112 | - if (hasVariables) { | ||
| 113 | - //带参数完成任务 | ||
| 114 | - taskRuntime.complete(TaskPayloadBuilder.complete().withTaskId(taskID) | ||
| 115 | - .withVariables(variables) | ||
| 116 | - .build()); | ||
| 117 | - } else { | ||
| 118 | - taskRuntime.complete(TaskPayloadBuilder.complete().withTaskId(taskID) | ||
| 119 | - .build()); | ||
| 120 | - } | ||
| 121 | - | ||
| 122 | - | ||
| 123 | - //写入数据库 | ||
| 124 | - return actWorkflowFormDataService.insertActWorkflowFormDatas(acwfds); | ||
| 125 | - } | 53 | + @Autowired |
| 54 | + private RepositoryService repositoryService; | ||
| 55 | + | ||
| 56 | + @Autowired | ||
| 57 | + private TaskRuntime taskRuntime; | ||
| 58 | + | ||
| 59 | + @Autowired | ||
| 60 | + private TaskService taskService; | ||
| 61 | + | ||
| 62 | + @Autowired | ||
| 63 | + private RuntimeService runtimeService; | ||
| 64 | + @Autowired | ||
| 65 | + private IActWorkflowFormDataService actWorkflowFormDataService; | ||
| 66 | + | ||
| 67 | + @Autowired | ||
| 68 | + private ActReDeploymentMapper actMapper; | ||
| 69 | + | ||
| 70 | + @Autowired | ||
| 71 | + SecurityManager securityManager; | ||
| 72 | + | ||
| 73 | + @Autowired | ||
| 74 | + UserGroupManager userGroupManager; | ||
| 75 | + | ||
| 76 | + HistoricProcessInstanceQuery processInstanceQuery; | ||
| 77 | + | ||
| 78 | + @Override | ||
| 79 | + public Page<ActTaskDTO> selectProcessDefinitionList(PageDomain pageDomain) { | ||
| 80 | + Page<ActTaskDTO> list = new Page<ActTaskDTO>(); | ||
| 81 | + org.activiti.api.runtime.shared.query.Page<Task> pageTasks = taskRuntime | ||
| 82 | + .tasks(Pageable.of((pageDomain.getPageNum() - 1) * pageDomain.getPageSize(), pageDomain.getPageSize())); | ||
| 83 | + List<Task> tasks = pageTasks.getContent(); | ||
| 84 | + int totalItems = pageTasks.getTotalItems(); | ||
| 85 | + list.setTotal(totalItems); | ||
| 86 | + if (totalItems != 0) { | ||
| 87 | + Set<String> processInstanceIdIds = tasks.parallelStream().map(t -> t.getProcessInstanceId()) | ||
| 88 | + .collect(Collectors.toSet()); | ||
| 89 | + List<ProcessInstance> processInstanceList = runtimeService.createProcessInstanceQuery() | ||
| 90 | + .processInstanceIds(processInstanceIdIds).list(); | ||
| 91 | + | ||
| 92 | + List<ActTaskDTO> actTaskDTOS = tasks.stream() | ||
| 93 | + .map(t -> new ActTaskDTO(t, | ||
| 94 | + processInstanceList.parallelStream() | ||
| 95 | + .filter(pi -> t.getProcessInstanceId().equals(pi.getId())).findAny().get(), | ||
| 96 | + getData(processInstanceList.parallelStream() | ||
| 97 | + .filter(pi -> t.getProcessInstanceId().equals(pi.getId())).findAny().get()))) | ||
| 98 | + .collect(Collectors.toList()); | ||
| 99 | + | ||
| 100 | + list.addAll(actTaskDTOS); | ||
| 101 | + } | ||
| 102 | + return list; | ||
| 103 | + } | ||
| 104 | + | ||
| 105 | + @Override | ||
| 106 | + public Page<ActTaskDTO> selectTaskEndHistoryDefinitionList(PageDomain pageDomain) { | ||
| 107 | + Page<ActTaskDTO> list = new Page<ActTaskDTO>(); | ||
| 108 | + | ||
| 109 | + ProcessEngine pes = ProcessEngines.getDefaultProcessEngine(); | ||
| 110 | + HistoryService historyService = pes.getHistoryService(); | ||
| 111 | + | ||
| 112 | + | ||
| 113 | + List<String> collect = actMapper.selectCompleteWorkByUsername(securityManager.getAuthenticatedUserId()); | ||
| 114 | + | ||
| 115 | + if(collect.size() > 0){ | ||
| 116 | + Set<String> set = new HashSet(collect); | ||
| 117 | + | ||
| 118 | + List<HistoricProcessInstance> processInstanceList = historyService.createHistoricProcessInstanceQuery().processInstanceIds(set).list(); | ||
| 119 | + | ||
| 120 | + list.setTotal(processInstanceList.size()); | ||
| 121 | + | ||
| 122 | + if(processInstanceList.size() > 0){ | ||
| 123 | + for(HistoricProcessInstance p : processInstanceList){ | ||
| 124 | + ActTaskDTO actTaskDTOS = new ActTaskDTO(p,getData(p)); | ||
| 125 | + | ||
| 126 | + getCheckData(actTaskDTOS); | ||
| 127 | + | ||
| 128 | + list.add(actTaskDTOS); | ||
| 129 | + } | ||
| 130 | + | ||
| 131 | + } | ||
| 132 | + } | ||
| 133 | + | ||
| 134 | + return list; | ||
| 135 | + } | ||
| 136 | + | ||
| 137 | + | ||
| 138 | + | ||
| 139 | + @Override | ||
| 140 | + public Page<ActTaskDTO> selectRuntimeTaskHistoryDefinitionList(PageDomain pageDomain) { | ||
| 141 | + Page<ActTaskDTO> list = new Page<ActTaskDTO>(); | ||
| 142 | + | ||
| 143 | + Set<String> collect = actMapper.selectUnCompleteWorkByUsername(securityManager.getAuthenticatedUserId()); | ||
| 144 | + | ||
| 145 | + if(collect.size() > 0){ | ||
| 146 | + | ||
| 147 | + List<ProcessInstance> processInstanceList = runtimeService.createProcessInstanceQuery().processInstanceIds(collect).list(); | ||
| 148 | + | ||
| 149 | + list.setTotal(processInstanceList.size()); | ||
| 150 | + | ||
| 151 | + if(processInstanceList.size() > 0){ | ||
| 152 | + for(ProcessInstance p: processInstanceList){ | ||
| 153 | + ActTaskDTO actTaskDTOS = new ActTaskDTO(p,getData(p)); | ||
| 154 | + | ||
| 155 | + getCheckData(actTaskDTOS); | ||
| 156 | + | ||
| 157 | + list.add(actTaskDTOS); | ||
| 158 | + } | ||
| 159 | + | ||
| 160 | + } | ||
| 161 | + } | ||
| 162 | + return list; | ||
| 163 | + } | ||
| 164 | + | ||
| 165 | + | ||
| 166 | + public void getCheckData(ActTaskDTO actTaskDTOS){ | ||
| 167 | + ActWorkflowFormData ActWorkflowFormData = new ActWorkflowFormData(); | ||
| 168 | + ActWorkflowFormData.setBusinessKey(actTaskDTOS.getBusinessKey()); | ||
| 169 | + ActWorkflowFormData.setCreateBy(securityManager.getAuthenticatedUserId()); | ||
| 170 | + ActWorkflowFormData.setControlName("审批"); | ||
| 171 | + | ||
| 172 | + actTaskDTOS.setCheckStatus(actWorkflowFormDataService.selectActWorkflowFormDataList(ActWorkflowFormData).get(0).getControlValue().equals("通过") ? "0" : "1"); | ||
| 173 | + } | ||
| 174 | + | ||
| 175 | + SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS"); | ||
| 176 | + | ||
| 177 | + public Map<String, String> getData(HistoricProcessInstance processInstance) { | ||
| 178 | + Map<String, String> map = actMapper.selectWorkLeaveById(processInstance.getBusinessKey()); | ||
| 179 | + return map; | ||
| 180 | + | ||
| 181 | + } | ||
| 182 | + | ||
| 183 | + public Map<String, String> getData(ProcessInstance processInstance) { | ||
| 184 | + Map<String, String> map = actMapper.selectWorkLeaveById(processInstance.getBusinessKey()); | ||
| 185 | + return map; | ||
| 186 | + } | ||
| 187 | + | ||
| 188 | + @Override | ||
| 189 | + public List<String> formDataShow(String taskID) { | ||
| 190 | + Task task = taskRuntime.task(taskID); | ||
| 191 | + /* | ||
| 192 | + * --------------------------------------------------------------------- | ||
| 193 | + * --------- FormProperty_0ueitp2--__!!类型--__!!名称--__!!是否参数--__!!默认值 例子: | ||
| 194 | + * FormProperty_0lovri0--__!!string--__!!姓名--__!!f--__!!同意!!__--驳回 | ||
| 195 | + * FormProperty_1iu6onu--__!!int--__!!年龄--__!!s | ||
| 196 | + * | ||
| 197 | + * 默认值:无、字符常量、FormProperty_开头定义过的控件ID | ||
| 198 | + * 是否参数:f为不是参数,s是字符,t是时间(不需要int,因为这里int等价于string) | ||
| 199 | + * 注:类型是可以获取到的,但是为了统一配置原则,都配置到 | ||
| 200 | + */ | ||
| 201 | + | ||
| 202 | + // 注意!!!!!!!!:表单Key必须要任务编号一模一样,因为参数需要任务key,但是无法获取,只能获取表单key“task.getFormKey()”当做任务key | ||
| 203 | + UserTask userTask = (UserTask) repositoryService.getBpmnModel(task.getProcessDefinitionId()) | ||
| 204 | + .getFlowElement(task.getFormKey()); | ||
| 205 | + | ||
| 206 | + if (userTask == null) { | ||
| 207 | + return null; | ||
| 208 | + } | ||
| 209 | + List<FormProperty> formProperties = userTask.getFormProperties(); | ||
| 210 | + List<String> collect = formProperties.stream().map(fp -> fp.getId()).collect(Collectors.toList()); | ||
| 211 | + | ||
| 212 | + return collect; | ||
| 213 | + } | ||
| 214 | + | ||
| 215 | + @Override | ||
| 216 | + public int formDataSave(String taskID, List<ActWorkflowFormDataDTO> awfs) throws ParseException { | ||
| 217 | + Task task = taskRuntime.task(taskID); | ||
| 218 | + ProcessInstance processInstance = runtimeService.createProcessInstanceQuery() | ||
| 219 | + .processInstanceId(task.getProcessInstanceId()).singleResult(); | ||
| 220 | + | ||
| 221 | + Boolean hasVariables = false;// 没有任何参数 | ||
| 222 | + HashMap<String, Object> variables = new HashMap<String, Object>(); | ||
| 223 | + // 前端传来的字符串,拆分成每个控件 | ||
| 224 | + List<ActWorkflowFormData> acwfds = new ArrayList<>(); | ||
| 225 | + for (ActWorkflowFormDataDTO awf : awfs) { | ||
| 226 | + ActWorkflowFormData actWorkflowFormData = new ActWorkflowFormData(processInstance.getBusinessKey(), awf, | ||
| 227 | + task); | ||
| 228 | + acwfds.add(actWorkflowFormData); | ||
| 229 | + // 构建参数集合 | ||
| 230 | + if (!"f".equals(awf.getControlIsParam())) { | ||
| 231 | + variables.put(awf.getControlId(), awf.getControlValue()); | ||
| 232 | + hasVariables = true; | ||
| 233 | + } | ||
| 234 | + } // for结束 | ||
| 235 | + if (task.getAssignee() == null) { | ||
| 236 | + taskRuntime.claim(TaskPayloadBuilder.claim().withTaskId(task.getId()).build()); | ||
| 237 | + } | ||
| 238 | + if (hasVariables) { | ||
| 239 | + // 带参数完成任务 | ||
| 240 | + taskRuntime.complete(TaskPayloadBuilder.complete().withTaskId(taskID).withVariables(variables).build()); | ||
| 241 | + } else { | ||
| 242 | + taskRuntime.complete(TaskPayloadBuilder.complete().withTaskId(taskID).build()); | ||
| 243 | + } | ||
| 244 | + | ||
| 245 | + // 写入数据库 | ||
| 246 | + return actWorkflowFormDataService.insertActWorkflowFormDatas(acwfds); | ||
| 247 | + } | ||
| 126 | } | 248 | } |
trash-activiti/src/main/resources/mapper/activiti/ActReDeploymentMapper.xml
| @@ -23,5 +23,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | @@ -23,5 +23,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | ||
| 23 | </foreach> | 23 | </foreach> |
| 24 | </select> | 24 | </select> |
| 25 | 25 | ||
| 26 | - | 26 | + <select id="selectWorkLeaveById" parameterType="String" resultType="java.util.Map"> |
| 27 | + select start_time as startTime,end_time as endTime, reason,type from workflow where id = #{id} | ||
| 28 | + </select> | ||
| 29 | + | ||
| 30 | + <select id="selectUnCompleteWorkByUsername" parameterType="String" resultType="java.lang.String"> | ||
| 31 | + select instance_id from workflow where id in (select business_key from act_workflow_formdata where create_by = #{username} GROUP BY business_key) | ||
| 32 | + </select> | ||
| 33 | + | ||
| 34 | + <select id="selectCompleteWorkByUsername" parameterType="String" resultType="java.lang.String"> | ||
| 35 | + select ID_ from act_hi_procinst where BUSINESS_KEY_ in (select business_key from act_workflow_formdata where create_by = #{username} GROUP BY business_key) and END_ACT_ID_ is not null | ||
| 36 | + </select> | ||
| 37 | + | ||
| 27 | </mapper> | 38 | </mapper> |
| 28 | \ No newline at end of file | 39 | \ No newline at end of file |
trash-activiti/src/main/resources/mapper/activiti/ActWorkflowFormDataMapper.xml
| @@ -27,8 +27,11 @@ | @@ -27,8 +27,11 @@ | ||
| 27 | <if test="formKey != null and formKey != ''"> and form_key = #{formKey}</if> | 27 | <if test="formKey != null and formKey != ''"> and form_key = #{formKey}</if> |
| 28 | <if test="controlId != null and controlId != ''"> and control_id = #{controlId}</if> | 28 | <if test="controlId != null and controlId != ''"> and control_id = #{controlId}</if> |
| 29 | <if test="controlValue != null and controlValue != ''"> and control_value = #{controlValue}</if> | 29 | <if test="controlValue != null and controlValue != ''"> and control_value = #{controlValue}</if> |
| 30 | + <if test="controlName != null and controlName != ''"> and control_name = #{controlName}</if> | ||
| 30 | <if test="taskNodeName != null and taskNodeName != ''"> and task_node_name = #{taskNodeName}</if> | 31 | <if test="taskNodeName != null and taskNodeName != ''"> and task_node_name = #{taskNodeName}</if> |
| 32 | + <if test="createBy != null and createBy != ''"> and create_by = #{createBy}</if> | ||
| 31 | </where> | 33 | </where> |
| 34 | + order by create_time DESC | ||
| 32 | </select> | 35 | </select> |
| 33 | 36 | ||
| 34 | <select id="selectActWorkflowFormDataById" parameterType="Long" resultMap="ActWorkflowFormDataResult"> | 37 | <select id="selectActWorkflowFormDataById" parameterType="Long" resultMap="ActWorkflowFormDataResult"> |
trash-admin/src/main/java/com/trash/web/controller/system/SysLoginController.java
| @@ -2,6 +2,9 @@ package com.trash.web.controller.system; | @@ -2,6 +2,9 @@ package com.trash.web.controller.system; | ||
| 2 | 2 | ||
| 3 | import java.util.List; | 3 | import java.util.List; |
| 4 | import java.util.Set; | 4 | import java.util.Set; |
| 5 | + | ||
| 6 | +import javax.servlet.http.HttpServletRequest; | ||
| 7 | + | ||
| 5 | import org.springframework.beans.factory.annotation.Autowired; | 8 | import org.springframework.beans.factory.annotation.Autowired; |
| 6 | import org.springframework.web.bind.annotation.GetMapping; | 9 | import org.springframework.web.bind.annotation.GetMapping; |
| 7 | import org.springframework.web.bind.annotation.PostMapping; | 10 | import org.springframework.web.bind.annotation.PostMapping; |
| @@ -64,8 +67,11 @@ public class SysLoginController | @@ -64,8 +67,11 @@ public class SysLoginController | ||
| 64 | */ | 67 | */ |
| 65 | @GetMapping("getInfo") | 68 | @GetMapping("getInfo") |
| 66 | public AjaxResult getInfo() | 69 | public AjaxResult getInfo() |
| 67 | - { | ||
| 68 | - LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); | 70 | + { |
| 71 | + HttpServletRequest request = ServletUtils.getRequest(); | ||
| 72 | + | ||
| 73 | + LoginUser loginUser = tokenService.getLoginUser(request); | ||
| 74 | + | ||
| 69 | SysUser user = loginUser.getUser(); | 75 | SysUser user = loginUser.getUser(); |
| 70 | // 角色集合 | 76 | // 角色集合 |
| 71 | Set<String> roles = permissionService.getRolePermission(user); | 77 | Set<String> roles = permissionService.getRolePermission(user); |
trash-framework/src/main/java/com/trash/framework/config/ResourcesConfig.java
| @@ -22,6 +22,7 @@ import com.trash.framework.interceptor.RepeatSubmitInterceptor; | @@ -22,6 +22,7 @@ import com.trash.framework.interceptor.RepeatSubmitInterceptor; | ||
| 22 | @Configuration | 22 | @Configuration |
| 23 | public class ResourcesConfig implements WebMvcConfigurer | 23 | public class ResourcesConfig implements WebMvcConfigurer |
| 24 | { | 24 | { |
| 25 | + | ||
| 25 | @Autowired | 26 | @Autowired |
| 26 | private RepeatSubmitInterceptor repeatSubmitInterceptor; | 27 | private RepeatSubmitInterceptor repeatSubmitInterceptor; |
| 27 | 28 | ||
| @@ -41,7 +42,7 @@ public class ResourcesConfig implements WebMvcConfigurer | @@ -41,7 +42,7 @@ public class ResourcesConfig implements WebMvcConfigurer | ||
| 41 | */ | 42 | */ |
| 42 | @Override | 43 | @Override |
| 43 | public void addInterceptors(InterceptorRegistry registry) | 44 | public void addInterceptors(InterceptorRegistry registry) |
| 44 | - { | 45 | + { |
| 45 | registry.addInterceptor(repeatSubmitInterceptor).addPathPatterns("/**"); | 46 | registry.addInterceptor(repeatSubmitInterceptor).addPathPatterns("/**"); |
| 46 | } | 47 | } |
| 47 | 48 |
trash-framework/src/main/java/com/trash/framework/config/SecurityConfig.java
| @@ -118,6 +118,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter | @@ -118,6 +118,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter | ||
| 118 | .antMatchers("/druid/**").anonymous() | 118 | .antMatchers("/druid/**").anonymous() |
| 119 | .antMatchers("/system/post/all").anonymous() | 119 | .antMatchers("/system/post/all").anonymous() |
| 120 | .antMatchers("/system/user/all").anonymous() | 120 | .antMatchers("/system/user/all").anonymous() |
| 121 | +// .antMatchers("/workflow/add").anonymous()//测试 | ||
| 122 | +// .antMatchers("/workflow/addtest").anonymous()//测试 | ||
| 121 | // 除上面外的所有请求全部需要鉴权认证 | 123 | // 除上面外的所有请求全部需要鉴权认证 |
| 122 | .anyRequest().authenticated() | 124 | .anyRequest().authenticated() |
| 123 | .and() | 125 | .and() |
trash-framework/src/main/java/com/trash/framework/security/filter/JwtAuthenticationTokenFilter.java
| 1 | package com.trash.framework.security.filter; | 1 | package com.trash.framework.security.filter; |
| 2 | 2 | ||
| 3 | +import java.awt.datatransfer.FlavorEvent; | ||
| 3 | import java.io.IOException; | 4 | import java.io.IOException; |
| 4 | import javax.servlet.FilterChain; | 5 | import javax.servlet.FilterChain; |
| 5 | import javax.servlet.ServletException; | 6 | import javax.servlet.ServletException; |
| 7 | +import javax.servlet.http.Cookie; | ||
| 6 | import javax.servlet.http.HttpServletRequest; | 8 | import javax.servlet.http.HttpServletRequest; |
| 7 | import javax.servlet.http.HttpServletResponse; | 9 | import javax.servlet.http.HttpServletResponse; |
| 8 | import org.springframework.beans.factory.annotation.Autowired; | 10 | import org.springframework.beans.factory.annotation.Autowired; |
| @@ -15,6 +17,7 @@ import org.springframework.web.filter.OncePerRequestFilter; | @@ -15,6 +17,7 @@ import org.springframework.web.filter.OncePerRequestFilter; | ||
| 15 | import com.trash.common.core.domain.model.LoginUser; | 17 | import com.trash.common.core.domain.model.LoginUser; |
| 16 | import com.trash.common.utils.SecurityUtils; | 18 | import com.trash.common.utils.SecurityUtils; |
| 17 | import com.trash.common.utils.StringUtils; | 19 | import com.trash.common.utils.StringUtils; |
| 20 | +import com.trash.framework.web.service.SysLoginService; | ||
| 18 | import com.trash.framework.web.service.TokenService; | 21 | import com.trash.framework.web.service.TokenService; |
| 19 | 22 | ||
| 20 | /** | 23 | /** |
| @@ -28,11 +31,32 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter | @@ -28,11 +31,32 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter | ||
| 28 | @Autowired | 31 | @Autowired |
| 29 | private TokenService tokenService; | 32 | private TokenService tokenService; |
| 30 | 33 | ||
| 34 | + @Autowired | ||
| 35 | + private SysLoginService loginService; | ||
| 36 | + | ||
| 31 | @Override | 37 | @Override |
| 32 | protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) | 38 | protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) |
| 33 | throws ServletException, IOException | 39 | throws ServletException, IOException |
| 34 | { | 40 | { |
| 35 | - LoginUser loginUser = tokenService.getLoginUser(request); | 41 | + |
| 42 | + LoginUser loginUser = tokenService.getLoginUser(request); | ||
| 43 | + | ||
| 44 | + if(loginUser == null){ | ||
| 45 | + String token = request.getHeader("Authorization"); | ||
| 46 | + | ||
| 47 | + if(token == null){ | ||
| 48 | + token = getTokenFromCookies(request); | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + if(token!= null && !token.equals("undefined")){ | ||
| 52 | + loginUser = tokenService.getLoginUserByToken(token); | ||
| 53 | + | ||
| 54 | + if(loginUser == null){ | ||
| 55 | + loginUser = requestRemoteUser(token); | ||
| 56 | + } | ||
| 57 | + } | ||
| 58 | + } | ||
| 59 | + | ||
| 36 | if (StringUtils.isNotNull(loginUser) && StringUtils.isNull(SecurityUtils.getAuthentication())) | 60 | if (StringUtils.isNotNull(loginUser) && StringUtils.isNull(SecurityUtils.getAuthentication())) |
| 37 | { | 61 | { |
| 38 | tokenService.verifyToken(loginUser); | 62 | tokenService.verifyToken(loginUser); |
| @@ -42,4 +66,20 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter | @@ -42,4 +66,20 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter | ||
| 42 | } | 66 | } |
| 43 | chain.doFilter(request, response); | 67 | chain.doFilter(request, response); |
| 44 | } | 68 | } |
| 69 | + | ||
| 70 | + private String getTokenFromCookies(HttpServletRequest request) { | ||
| 71 | + | ||
| 72 | + for(Cookie cookie : request.getCookies()){ | ||
| 73 | + | ||
| 74 | + if(("token").equals(cookie.getName())){ | ||
| 75 | + return cookie.getValue(); | ||
| 76 | + } | ||
| 77 | + } | ||
| 78 | + | ||
| 79 | + return null; | ||
| 80 | + } | ||
| 81 | + | ||
| 82 | + private LoginUser requestRemoteUser(String token) { | ||
| 83 | + return loginService.loginByRemote(token); | ||
| 84 | + } | ||
| 45 | } | 85 | } |
trash-framework/src/main/java/com/trash/framework/web/service/SysLoginService.java
| 1 | package com.trash.framework.web.service; | 1 | package com.trash.framework.web.service; |
| 2 | 2 | ||
| 3 | +import java.util.Date; | ||
| 4 | + | ||
| 3 | import javax.annotation.Resource; | 5 | import javax.annotation.Resource; |
| 4 | import org.springframework.beans.factory.annotation.Autowired; | 6 | import org.springframework.beans.factory.annotation.Autowired; |
| 5 | import org.springframework.security.authentication.AuthenticationManager; | 7 | import org.springframework.security.authentication.AuthenticationManager; |
| @@ -7,6 +9,7 @@ import org.springframework.security.authentication.BadCredentialsException; | @@ -7,6 +9,7 @@ import org.springframework.security.authentication.BadCredentialsException; | ||
| 7 | import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; | 9 | import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; |
| 8 | import org.springframework.security.core.Authentication; | 10 | import org.springframework.security.core.Authentication; |
| 9 | import org.springframework.stereotype.Component; | 11 | import org.springframework.stereotype.Component; |
| 12 | +import org.springframework.security.core.userdetails.UserDetailsService; | ||
| 10 | 13 | ||
| 11 | import com.trash.common.constant.Constants; | 14 | import com.trash.common.constant.Constants; |
| 12 | import com.trash.common.core.domain.model.LoginUser; | 15 | import com.trash.common.core.domain.model.LoginUser; |
| @@ -16,6 +19,7 @@ import com.trash.common.exception.user.CaptchaException; | @@ -16,6 +19,7 @@ import com.trash.common.exception.user.CaptchaException; | ||
| 16 | import com.trash.common.exception.user.CaptchaExpireException; | 19 | import com.trash.common.exception.user.CaptchaExpireException; |
| 17 | import com.trash.common.exception.user.UserPasswordNotMatchException; | 20 | import com.trash.common.exception.user.UserPasswordNotMatchException; |
| 18 | import com.trash.common.utils.MessageUtils; | 21 | import com.trash.common.utils.MessageUtils; |
| 22 | +import com.trash.common.utils.uuid.UUID; | ||
| 19 | import com.trash.framework.manager.AsyncManager; | 23 | import com.trash.framework.manager.AsyncManager; |
| 20 | import com.trash.framework.manager.factory.AsyncFactory; | 24 | import com.trash.framework.manager.factory.AsyncFactory; |
| 21 | 25 | ||
| @@ -35,7 +39,9 @@ public class SysLoginService | @@ -35,7 +39,9 @@ public class SysLoginService | ||
| 35 | 39 | ||
| 36 | @Autowired | 40 | @Autowired |
| 37 | private RedisCache redisCache; | 41 | private RedisCache redisCache; |
| 38 | - | 42 | + |
| 43 | + @Autowired | ||
| 44 | + UserDetailsService UserDetailsService; | ||
| 39 | /** | 45 | /** |
| 40 | * 登录验证 | 46 | * 登录验证 |
| 41 | * | 47 | * |
| @@ -86,4 +92,49 @@ public class SysLoginService | @@ -86,4 +92,49 @@ public class SysLoginService | ||
| 86 | // 生成token | 92 | // 生成token |
| 87 | return tokenService.createToken(loginUser); | 93 | return tokenService.createToken(loginUser); |
| 88 | } | 94 | } |
| 95 | + | ||
| 96 | + public LoginUser loginByRemote(String token) | ||
| 97 | + { | ||
| 98 | +// String verifyKey = Constants.CAPTCHA_CODE_KEY; | ||
| 99 | +// String captcha = redisCache.getCacheObject(verifyKey); | ||
| 100 | +// redisCache.deleteObject(verifyKey); | ||
| 101 | +// if (captcha == null) | ||
| 102 | +// { | ||
| 103 | +// AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"))); | ||
| 104 | +// throw new CaptchaExpireException(); | ||
| 105 | +// } | ||
| 106 | +// if (!code.equalsIgnoreCase(captcha)) | ||
| 107 | +// { | ||
| 108 | +// AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"))); | ||
| 109 | +// throw new CaptchaException(); | ||
| 110 | +// } | ||
| 111 | + // 用户验证 | ||
| 112 | + Authentication authentication = null; | ||
| 113 | + try | ||
| 114 | + { | ||
| 115 | +// // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername | ||
| 116 | + authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken("youxiw2000", "123456")); | ||
| 117 | + } | ||
| 118 | + catch (Exception e) | ||
| 119 | + { | ||
| 120 | + if (e instanceof BadCredentialsException) | ||
| 121 | + { | ||
| 122 | + AsyncManager.me().execute(AsyncFactory.recordLogininfor("youxiw2000", Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); | ||
| 123 | + throw new UserPasswordNotMatchException(); | ||
| 124 | + } | ||
| 125 | + else | ||
| 126 | + { | ||
| 127 | + AsyncManager.me().execute(AsyncFactory.recordLogininfor("youxiw2000", Constants.LOGIN_FAIL, e.getMessage())); | ||
| 128 | + throw new CustomException(e.getMessage()); | ||
| 129 | + } | ||
| 130 | + } | ||
| 131 | + AsyncManager.me().execute(AsyncFactory.recordLogininfor("youxiw2000", Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); | ||
| 132 | + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); | ||
| 133 | + | ||
| 134 | + loginUser.setToken(token); | ||
| 135 | + tokenService.refreshToken(loginUser); | ||
| 136 | + | ||
| 137 | + // 生成token | ||
| 138 | + return loginUser; | ||
| 139 | + } | ||
| 89 | } | 140 | } |
trash-framework/src/main/java/com/trash/framework/web/service/TokenService.java
| @@ -3,6 +3,8 @@ package com.trash.framework.web.service; | @@ -3,6 +3,8 @@ package com.trash.framework.web.service; | ||
| 3 | import java.util.HashMap; | 3 | import java.util.HashMap; |
| 4 | import java.util.Map; | 4 | import java.util.Map; |
| 5 | import java.util.concurrent.TimeUnit; | 5 | import java.util.concurrent.TimeUnit; |
| 6 | + | ||
| 7 | +import javax.servlet.http.Cookie; | ||
| 6 | import javax.servlet.http.HttpServletRequest; | 8 | import javax.servlet.http.HttpServletRequest; |
| 7 | import org.springframework.beans.factory.annotation.Autowired; | 9 | import org.springframework.beans.factory.annotation.Autowired; |
| 8 | import org.springframework.beans.factory.annotation.Value; | 10 | import org.springframework.beans.factory.annotation.Value; |
| @@ -69,6 +71,36 @@ public class TokenService | @@ -69,6 +71,36 @@ public class TokenService | ||
| 69 | LoginUser user = redisCache.getCacheObject(userKey); | 71 | LoginUser user = redisCache.getCacheObject(userKey); |
| 70 | return user; | 72 | return user; |
| 71 | } | 73 | } |
| 74 | + | ||
| 75 | + token = getTokenFromCookies(request); | ||
| 76 | + if(StringUtils.isNotEmpty(token)){ | ||
| 77 | + String userKey = getTokenKey(token); | ||
| 78 | + LoginUser user = redisCache.getCacheObject(userKey); | ||
| 79 | + return user; | ||
| 80 | + } | ||
| 81 | + return null; | ||
| 82 | + } | ||
| 83 | + | ||
| 84 | + | ||
| 85 | + private String getTokenFromCookies(HttpServletRequest request) { | ||
| 86 | + for(Cookie cookie : request.getCookies()){ | ||
| 87 | + | ||
| 88 | + if(("token").equals(cookie.getName())){ | ||
| 89 | + return cookie.getValue(); | ||
| 90 | + } | ||
| 91 | + } | ||
| 92 | + | ||
| 93 | + return null; | ||
| 94 | + } | ||
| 95 | + | ||
| 96 | + public LoginUser getLoginUserByToken(String token) | ||
| 97 | + { | ||
| 98 | + // 获取请求携带的令牌 | ||
| 99 | + if (StringUtils.isNotEmpty(token)) | ||
| 100 | + { | ||
| 101 | + LoginUser user = redisCache.getCacheObject(token); | ||
| 102 | + return user; | ||
| 103 | + } | ||
| 72 | return null; | 104 | return null; |
| 73 | } | 105 | } |
| 74 | 106 |
trash-ui/public/bpmnjs/index.js
| @@ -83459,6 +83459,8 @@ module.exports = function(group, element, bpmnFactory, translate) { | @@ -83459,6 +83459,8 @@ module.exports = function(group, element, bpmnFactory, translate) { | ||
| 83459 | return formHelper.getFormField(element, selected.idx); | 83459 | return formHelper.getFormField(element, selected.idx); |
| 83460 | } | 83460 | } |
| 83461 | 83461 | ||
| 83462 | + | ||
| 83463 | + | ||
| 83462 | // [FormKey] form key text input field | 83464 | // [FormKey] form key text input field |
| 83463 | group.entries.push(entryFactory.textField({ | 83465 | group.entries.push(entryFactory.textField({ |
| 83464 | id : 'form-key', | 83466 | id : 'form-key', |
| @@ -83551,6 +83553,29 @@ module.exports = function(group, element, bpmnFactory, translate) { | @@ -83551,6 +83553,29 @@ module.exports = function(group, element, bpmnFactory, translate) { | ||
| 83551 | } | 83553 | } |
| 83552 | })); | 83554 | })); |
| 83553 | 83555 | ||
| 83556 | + function updateParamInput(idvalue){ | ||
| 83557 | + var value = $("#activiti-form-field-id").val(); | ||
| 83558 | + | ||
| 83559 | + value = value.split("--__!!")[0]; | ||
| 83560 | + | ||
| 83561 | + var label = $("#FormLabel").val() == "" ? "NULL" : $("#FormLabel").val(); | ||
| 83562 | + var labelValue = $("#FormValue").val() == "" ? "NULL" : $("#FormValue").val(); | ||
| 83563 | + | ||
| 83564 | + var isCheck = "f"; | ||
| 83565 | + if($("#isprime:checked").val()){ | ||
| 83566 | + isCheck = "i"; | ||
| 83567 | + } | ||
| 83568 | + var label = $("#FormLabel").val() == "" ? "NULL" : $("#FormLabel").val(); | ||
| 83569 | + | ||
| 83570 | + value += "--__!!" + $("#FormProperty_type").val(); | ||
| 83571 | + value += "--__!!" + label; | ||
| 83572 | + value += "--__!!" + isCheck; | ||
| 83573 | + value += "--__!!" + labelValue.replace("--__--"); | ||
| 83574 | + | ||
| 83575 | + $("#activiti-form-field-id")[0].value = value; | ||
| 83576 | + } | ||
| 83577 | + | ||
| 83578 | + | ||
| 83554 | // [FormData] form field id text input field | 83579 | // [FormData] form field id text input field |
| 83555 | group.entries.push(entryFactory.validationAwareTextField({ | 83580 | group.entries.push(entryFactory.validationAwareTextField({ |
| 83556 | id: 'form-field-id', | 83581 | id: 'form-field-id', |
| @@ -83570,9 +83595,7 @@ module.exports = function(group, element, bpmnFactory, translate) { | @@ -83570,9 +83595,7 @@ module.exports = function(group, element, bpmnFactory, translate) { | ||
| 83570 | hidden: function(element, node) { | 83595 | hidden: function(element, node) { |
| 83571 | return !getSelectedFormField(element, node); | 83596 | return !getSelectedFormField(element, node); |
| 83572 | }, | 83597 | }, |
| 83573 | - | ||
| 83574 | validate: function(element, values, node) { | 83598 | validate: function(element, values, node) { |
| 83575 | - debugger; | ||
| 83576 | 83599 | ||
| 83577 | var formField = getSelectedFormField(element, node); | 83600 | var formField = getSelectedFormField(element, node); |
| 83578 | 83601 | ||
| @@ -83588,32 +83611,58 @@ module.exports = function(group, element, bpmnFactory, translate) { | @@ -83588,32 +83611,58 @@ module.exports = function(group, element, bpmnFactory, translate) { | ||
| 83588 | 83611 | ||
| 83589 | // var combox = entryFactory.comboBox({"selectOptions": [{ name: 'textarea', value: 'textarea' },{ name: 'radio', value: 'radio' }]}); | 83612 | // var combox = entryFactory.comboBox({"selectOptions": [{ name: 'textarea', value: 'textarea' },{ name: 'radio', value: 'radio' }]}); |
| 83590 | 83613 | ||
| 83591 | - if($("#FormProperty_type").length == 0){ | ||
| 83592 | - $(".bpp-properties-entry[data-entry='form-field-id']").append("类型<br/><select id=FormProperty_type><option value=radio selected='selected'>radio</option><option value=textarea>textarea</option></select>"); | ||
| 83593 | - $(".bpp-properties-entry[data-entry='form-field-id']").append("标签<br/><input id=FormLabel type=input value="+param[2] +">"); | ||
| 83594 | - $(".bpp-properties-entry[data-entry='form-field-id']").append("参数<br/><input id=FormValue type=input value="+param[4].replace("--__--",",") +">"); | 83614 | + $(".bpp-properties-entry[data-entry='form-field-id'] p").remove(); |
| 83615 | + $("#FormProperty_type").remove(); | ||
| 83616 | + $("#FormLabel").remove(); | ||
| 83617 | + $("#FormValue").remove(); | ||
| 83618 | + $("#isprime").remove(); | ||
| 83595 | 83619 | ||
| 83620 | + var tag = "<p>类型</p><select id=FormProperty_type><option value=radio "; | ||
| 83621 | + if(param[1] && param[1] == "radio"){ | ||
| 83622 | + tag += "selected='selected'"; | ||
| 83623 | + } | ||
| 83624 | + tag += ">单选</option><option value=textarea "; | ||
| 83625 | + if(param[1] && param[1] == "textarea"){ | ||
| 83626 | + tag += "selected='selected'"; | ||
| 83627 | + } | ||
| 83628 | + tag += ">文本</option><option value=file "; | ||
| 83629 | + if(param[1] && param[1] == "file"){ | ||
| 83630 | + tag += "selected='selected'"; | ||
| 83631 | + } | ||
| 83632 | + tag += ">文件</option><option value=image "; | ||
| 83633 | + if(param[1] && param[1] == "image"){ | ||
| 83634 | + tag += "selected='selected'"; | ||
| 83635 | + } | ||
| 83636 | + tag += ">图片</option></select>"; | ||
| 83637 | + $(".bpp-properties-entry[data-entry='form-field-id']").append(tag); | ||
| 83596 | 83638 | ||
| 83597 | - var test = ""; | ||
| 83598 | - var check = 'false'; | 83639 | + var p = ""; |
| 83599 | 83640 | ||
| 83600 | - if(param[3] != 'f'){ | ||
| 83601 | - check = 'true'; | 83641 | + if(param[2]){ |
| 83642 | + p = param[2]; | ||
| 83602 | } | 83643 | } |
| 83644 | + $(".bpp-properties-entry[data-entry='form-field-id']").append("<p>标签</p><input id=FormLabel type=input value="+p +">"); | ||
| 83603 | 83645 | ||
| 83604 | - $(".bpp-properties-entry[data-entry='form-field-id']").append("是否<br/><input id=FormValue type=checkbox checked="+ check + ">"); | 83646 | + p = ""; |
| 83605 | 83647 | ||
| 83648 | + if(param[4]){ | ||
| 83649 | + p = param[4].replace("--__--",","); | ||
| 83650 | + } | ||
| 83651 | + $(".bpp-properties-entry[data-entry='form-field-id']").append("<p>参数</p><input id=FormValue type=input value="+p +">"); | ||
| 83606 | 83652 | ||
| 83607 | - $("#FormProperty_type").change(function(){ | ||
| 83608 | - console.log("change"); | ||
| 83609 | - }); | ||
| 83610 | - $("#FormLabel").change(function(){ | ||
| 83611 | - console.log("change"); | ||
| 83612 | - }); | ||
| 83613 | - }else{ | 83653 | + p = ''; |
| 83654 | + | ||
| 83655 | + if(param[3] != 'f'){ | ||
| 83656 | + p = 'checked=checked'; | ||
| 83657 | + } | ||
| 83658 | + | ||
| 83659 | + $(".bpp-properties-entry[data-entry='form-field-id']").append("<p>是否关键</p><input id=isprime type=checkbox "+p+">"); | ||
| 83614 | 83660 | ||
| 83615 | - } | ||
| 83616 | 83661 | ||
| 83662 | + $("#FormProperty_type").change(updateParamInput); | ||
| 83663 | + $("#FormLabel").change(updateParamInput); | ||
| 83664 | + $("#FormValue").change(updateParamInput); | ||
| 83665 | + $("#isprime").change(updateParamInput); | ||
| 83617 | 83666 | ||
| 83618 | if (!idValue || idValue.trim() === '') { | 83667 | if (!idValue || idValue.trim() === '') { |
| 83619 | return { id: 'Form field id must not be empty' }; | 83668 | return { id: 'Form field id must not be empty' }; |
trash-ui/src/api/activiti/taskhistory.js
0 → 100644
| 1 | +import request from '@/utils/request' | ||
| 2 | + | ||
| 3 | +// 查询task列表 | ||
| 4 | +export function listTask(query) { | ||
| 5 | + return request({ | ||
| 6 | + url: '/taskhistory/list', | ||
| 7 | + method: 'get', | ||
| 8 | + params: query | ||
| 9 | + }) | ||
| 10 | +} | ||
| 11 | + | ||
| 12 | +// 查询task列表 | ||
| 13 | +export function listEndTask(query) { | ||
| 14 | + return request({ | ||
| 15 | + url: '/taskhistory/listend', | ||
| 16 | + method: 'get', | ||
| 17 | + params: query | ||
| 18 | + }) | ||
| 19 | +} | ||
| 20 | + | ||
| 21 | +// 查询表单 | ||
| 22 | +export function formDataShow(taskID) { | ||
| 23 | + return request({ | ||
| 24 | + url: '/historyFromData/ByInstanceId/'+taskID, | ||
| 25 | + method: 'get', | ||
| 26 | + }) | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +// 查询表单 | ||
| 30 | +export function formDataSave(taskID,data) { | ||
| 31 | + return request({ | ||
| 32 | + url: '/taskhistory/formDataSave/'+taskID, | ||
| 33 | + method: 'post', | ||
| 34 | + data:data | ||
| 35 | + }) | ||
| 36 | +} |
trash-ui/src/assets/css/font.css
0 → 100644
trash-ui/src/assets/css/task.css
0 → 100644
| 1 | +.card_status{ | ||
| 2 | + position: relative; | ||
| 3 | + top:-15px; | ||
| 4 | + left:-20px; | ||
| 5 | + height:20px; | ||
| 6 | + width:60px; | ||
| 7 | + font-size: 12px; | ||
| 8 | + text-align: center; | ||
| 9 | + line-height: 20px; | ||
| 10 | + border-radius: 5px; | ||
| 11 | +} | ||
| 12 | + | ||
| 13 | +.card_status.notcheck{ | ||
| 14 | + background-color: aqua; | ||
| 15 | + color:blue; | ||
| 16 | +} | ||
| 17 | + | ||
| 18 | +.card_status.agree{ | ||
| 19 | + background-color: greenyellow; | ||
| 20 | + color: green; | ||
| 21 | +} | ||
| 22 | +.card_status.dismiss{ | ||
| 23 | + background-color: pink; | ||
| 24 | + color: red; | ||
| 25 | +} | ||
| 26 | + | ||
| 27 | +.card_btn a{ | ||
| 28 | + color:blue; | ||
| 29 | + margin-right: 10px; | ||
| 30 | +} | ||
| 31 | + | ||
| 32 | +.card_btn a.agree{ | ||
| 33 | + color:green; | ||
| 34 | +} | ||
| 35 | + | ||
| 36 | +.card_btn a.dismiss{ | ||
| 37 | + color:red; | ||
| 38 | +} | ||
| 39 | + | ||
| 40 | +.card_btn{ | ||
| 41 | + float: right; | ||
| 42 | +} | ||
| 43 | + | ||
| 44 | +.box-card{ | ||
| 45 | + margin-bottom: 30px; | ||
| 46 | +} | ||
| 47 | + | ||
| 48 | +.card_title{ | ||
| 49 | + font-size: 18px; | ||
| 50 | + font-weight: bold; | ||
| 51 | +} | ||
| 52 | + | ||
| 53 | +.card_row{ | ||
| 54 | + margin-top: 20px; | ||
| 55 | + margin-bottom: 20px; | ||
| 56 | +} | ||
| 57 | + | ||
| 58 | +.card_grid{ | ||
| 59 | + height:20px; | ||
| 60 | + line-height: 20px; | ||
| 61 | +} | ||
| 62 | + | ||
| 63 | +.card_grid.center{ | ||
| 64 | + text-align: center; | ||
| 65 | + border-left: 2px solid black; | ||
| 66 | + border-right: 2px solid black; | ||
| 67 | +} | ||
| 68 | +.card_grid.right{ | ||
| 69 | + text-align: right; | ||
| 70 | +} |
trash-ui/src/layout/components/Navbar.vue
| @@ -9,11 +9,11 @@ | @@ -9,11 +9,11 @@ | ||
| 9 | <search id="header-search" class="right-menu-item" /> | 9 | <search id="header-search" class="right-menu-item" /> |
| 10 | 10 | ||
| 11 | <el-tooltip content="源码地址" effect="dark" placement="bottom"> | 11 | <el-tooltip content="源码地址" effect="dark" placement="bottom"> |
| 12 | - <ruo-yi-git id="trash-git" class="right-menu-item hover-effect" /> | 12 | + <trash-git id="trash-git" class="right-menu-item hover-effect" /> |
| 13 | </el-tooltip> | 13 | </el-tooltip> |
| 14 | 14 | ||
| 15 | <el-tooltip content="文档地址" effect="dark" placement="bottom"> | 15 | <el-tooltip content="文档地址" effect="dark" placement="bottom"> |
| 16 | - <ruo-yi-doc id="trash-doc" class="right-menu-item hover-effect" /> | 16 | + <trash-doc id="trash-doc" class="right-menu-item hover-effect" /> |
| 17 | </el-tooltip> | 17 | </el-tooltip> |
| 18 | 18 | ||
| 19 | <screenfull id="screenfull" class="right-menu-item hover-effect" /> | 19 | <screenfull id="screenfull" class="right-menu-item hover-effect" /> |
trash-ui/src/layout/index3.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <app-main /> | ||
| 3 | +</template> | ||
| 4 | + | ||
| 5 | +<script> | ||
| 6 | +import RightPanel from '@/components/RightPanel' | ||
| 7 | +import { AppMain, Navbar, Settings, Sidebar, TagsView } from './components' | ||
| 8 | +import ResizeMixin from './mixin/ResizeHandler' | ||
| 9 | +import { mapState } from 'vuex' | ||
| 10 | + | ||
| 11 | +export default { | ||
| 12 | + name: 'Layout', | ||
| 13 | + components: { | ||
| 14 | + AppMain, | ||
| 15 | + Navbar, | ||
| 16 | + RightPanel, | ||
| 17 | + Settings, | ||
| 18 | + Sidebar, | ||
| 19 | + TagsView | ||
| 20 | + }, | ||
| 21 | + mixins: [ResizeMixin], | ||
| 22 | + computed: { | ||
| 23 | + ...mapState({ | ||
| 24 | + sidebar: state => state.app.sidebar, | ||
| 25 | + device: state => state.app.device, | ||
| 26 | + showSettings: state => state.settings.showSettings, | ||
| 27 | + needTagsView: state => state.settings.tagsView, | ||
| 28 | + fixedHeader: state => state.settings.fixedHeader | ||
| 29 | + }), | ||
| 30 | + classObj() { | ||
| 31 | + return { | ||
| 32 | + hideSidebar: !this.sidebar.opened, | ||
| 33 | + openSidebar: this.sidebar.opened, | ||
| 34 | + withoutAnimation: this.sidebar.withoutAnimation, | ||
| 35 | + mobile: this.device === 'mobile' | ||
| 36 | + } | ||
| 37 | + } | ||
| 38 | + }, | ||
| 39 | + methods: { | ||
| 40 | + handleClickOutside() { | ||
| 41 | + this.$store.dispatch('app/closeSideBar', { withoutAnimation: false }) | ||
| 42 | + } | ||
| 43 | + } | ||
| 44 | +} | ||
| 45 | +</script> | ||
| 46 | + | ||
| 47 | +<style lang="scss" scoped> | ||
| 48 | + @import "~@/assets/styles/mixin.scss"; | ||
| 49 | + @import "~@/assets/styles/variables.scss"; | ||
| 50 | + | ||
| 51 | + .app-wrapper { | ||
| 52 | + @include clearfix; | ||
| 53 | + position: relative; | ||
| 54 | + height: 100%; | ||
| 55 | + width: 100%; | ||
| 56 | + | ||
| 57 | + &.mobile.openSidebar { | ||
| 58 | + position: fixed; | ||
| 59 | + top: 0; | ||
| 60 | + } | ||
| 61 | + } | ||
| 62 | + | ||
| 63 | + .drawer-bg { | ||
| 64 | + background: #000; | ||
| 65 | + opacity: 0.3; | ||
| 66 | + width: 100%; | ||
| 67 | + top: 0; | ||
| 68 | + height: 100%; | ||
| 69 | + position: absolute; | ||
| 70 | + z-index: 999; | ||
| 71 | + } | ||
| 72 | + | ||
| 73 | + .fixed-header { | ||
| 74 | + position: fixed; | ||
| 75 | + top: 0; | ||
| 76 | + right: 0; | ||
| 77 | + z-index: 9; | ||
| 78 | + width: calc(100% - #{$sideBarWidth}); | ||
| 79 | + transition: width 0.28s; | ||
| 80 | + } | ||
| 81 | + | ||
| 82 | + .hideSidebar .fixed-header { | ||
| 83 | + width: calc(100% - 54px) | ||
| 84 | + } | ||
| 85 | + | ||
| 86 | + .mobile .fixed-header { | ||
| 87 | + width: 100%; | ||
| 88 | + } | ||
| 89 | +</style> |
trash-ui/src/permission.js
| @@ -4,21 +4,31 @@ import { Message } from 'element-ui' | @@ -4,21 +4,31 @@ import { Message } from 'element-ui' | ||
| 4 | import NProgress from 'nprogress' | 4 | import NProgress from 'nprogress' |
| 5 | import 'nprogress/nprogress.css' | 5 | import 'nprogress/nprogress.css' |
| 6 | import { getToken } from '@/utils/auth' | 6 | import { getToken } from '@/utils/auth' |
| 7 | +import Cookies from "js-cookie"; | ||
| 7 | 8 | ||
| 8 | NProgress.configure({ showSpinner: false }) | 9 | NProgress.configure({ showSpinner: false }) |
| 9 | 10 | ||
| 10 | const whiteList = ['/login', '/auth-redirect', '/bind', '/register'] | 11 | const whiteList = ['/login', '/auth-redirect', '/bind', '/register'] |
| 11 | 12 | ||
| 13 | +// const whiteList = ['/*'] | ||
| 14 | + | ||
| 12 | router.beforeEach((to, from, next) => { | 15 | router.beforeEach((to, from, next) => { |
| 13 | NProgress.start() | 16 | NProgress.start() |
| 14 | - if (getToken()) { | 17 | + var token = getToken(); |
| 18 | + if(!token){ | ||
| 19 | + token = to.query.token; | ||
| 20 | + if(token){ | ||
| 21 | + Cookies.set("token", token, { expires: 30 }); | ||
| 22 | + } | ||
| 23 | + } | ||
| 24 | + | ||
| 25 | + if (token) { | ||
| 15 | /* has token*/ | 26 | /* has token*/ |
| 16 | if (to.path === '/login') { | 27 | if (to.path === '/login') { |
| 17 | next({ path: '/' }) | 28 | next({ path: '/' }) |
| 18 | NProgress.done() | 29 | NProgress.done() |
| 19 | } else { | 30 | } else { |
| 20 | if (store.getters.roles.length === 0) { | 31 | if (store.getters.roles.length === 0) { |
| 21 | - // 判断当前用户是否已拉取完user_info信息 | ||
| 22 | store.dispatch('GetInfo').then(res => { | 32 | store.dispatch('GetInfo').then(res => { |
| 23 | // 拉取user_info | 33 | // 拉取user_info |
| 24 | const roles = res.roles | 34 | const roles = res.roles |
trash-ui/src/utils/auth.js
| @@ -12,4 +12,4 @@ export function setToken(token) { | @@ -12,4 +12,4 @@ export function setToken(token) { | ||
| 12 | 12 | ||
| 13 | export function removeToken() { | 13 | export function removeToken() { |
| 14 | return Cookies.remove(TokenKey) | 14 | return Cookies.remove(TokenKey) |
| 15 | -} | 15 | -} |
| 16 | +} | ||
| 16 | \ No newline at end of file | 17 | \ No newline at end of file |
trash-ui/src/views/activiti/definition/index.vue
| @@ -104,6 +104,7 @@ | @@ -104,6 +104,7 @@ | ||
| 104 | /> | 104 | /> |
| 105 | <!--bpmnjs在线流程设计器--> | 105 | <!--bpmnjs在线流程设计器--> |
| 106 | <el-dialog | 106 | <el-dialog |
| 107 | + :close-on-click-modal="false" | ||
| 107 | :visible.sync="modelVisible" | 108 | :visible.sync="modelVisible" |
| 108 | title="流程图" | 109 | title="流程图" |
| 109 | width="1680px" | 110 | width="1680px" |
trash-ui/src/views/activiti/task/index.vue
| 1 | <template> | 1 | <template> |
| 2 | <div class="app-container"> | 2 | <div class="app-container"> |
| 3 | 3 | ||
| 4 | + <el-card class="box-card" v-for="task in tastList"> | ||
| 5 | + <div class="card_status notcheck">待审批</div> | ||
| 6 | + <div class="card_btn"> | ||
| 7 | + <a @click="examineAndApprove(task,0)" class="agree">同意</a> | ||
| 8 | + <a @click="examineAndApprove(task,1)" class="dismiss">拒绝</a> | ||
| 9 | + <a @click="examineAndApprove(task,-1)" >详情>></a> | ||
| 10 | + </div> | ||
| 11 | + <el-row class="card_row"> | ||
| 12 | + <el-col :span="2" class="card_grid"></el-col> | ||
| 13 | + <div class="card_title">{{task.instanceName}}</div> | ||
| 14 | + </el-row> | ||
| 15 | + | ||
| 16 | + <el-row class="card_row"> | ||
| 17 | + <el-col :span="3" class="card_grid"></el-col> | ||
| 18 | + <el-col :span="6" class="card_grid"> | ||
| 19 | + <div>开始时间: {{task.startTime}}</div> | ||
| 20 | + </el-col> | ||
| 21 | + <el-col :span="6" class="card_grid center"> | ||
| 22 | + <div>结束时间: {{task.endTime}}</div> | ||
| 23 | + </el-col> | ||
| 24 | + <el-col :span="6" class="card_grid right"> | ||
| 25 | + <div>申请类型: {{task.type}}</div> | ||
| 26 | + </el-col> | ||
| 27 | + <el-col :span="3" class="card_grid"></el-col> | ||
| 28 | + </el-row> | ||
| 29 | + <el-row class="card_row"> | ||
| 30 | + <el-col :span="3" class="card_grid"> | ||
| 31 | + <div></div> | ||
| 32 | + </el-col> | ||
| 33 | + <el-col :span="18"> | ||
| 34 | + <div>申请理由: {{task.reason}}</div> | ||
| 35 | + </el-col> | ||
| 36 | + <el-col :span="3" class="card_grid"></el-col> | ||
| 37 | + </el-row> | ||
| 38 | + </el-card> | ||
| 4 | 39 | ||
| 5 | - <el-table v-loading="loading" :data="tastList"> | ||
| 6 | - <!-- <el-table-column label="流程ID" align="center" prop="id"/>--> | ||
| 7 | - <el-table-column label="流程名称" align="center" prop="instanceName"/> | ||
| 8 | - <el-table-column label="任务节点名称" align="center" prop="name"/> | ||
| 9 | - <el-table-column label="任务状态" align="center" prop="status"/> | ||
| 10 | - <el-table-column label="办理人" align="center" prop="assignee"/> | ||
| 11 | - <el-table-column label="创建时间" align="center" prop="createdDate"/> | 40 | + |
| 41 | + <!--<el-table v-loading="loading" :data="tastList"> | ||
| 42 | + <el-table-column label="流程ID" align="center" prop="id"/> | ||
| 43 | + <el-table-column label="流程名称" align="center" prop="instanceName" /> | ||
| 44 | + <el-table-column label="任务节点名称" align="center" prop="name" /> | ||
| 45 | + <el-table-column label="任务状态" align="center" prop="status" /> | ||
| 46 | + <el-table-column label="办理人" align="center" prop="assignee" /> | ||
| 47 | + <el-table-column label="创建时间" align="center" prop="createdDate" /> | ||
| 12 | 48 | ||
| 13 | <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> | 49 | <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
| 14 | <template slot-scope="scope"> | 50 | <template slot-scope="scope"> |
| 15 | - <el-button | ||
| 16 | - size="mini" | ||
| 17 | - type="text" | ||
| 18 | - icon="el-icon-edit" | ||
| 19 | - @click="examineAndApprove (scope.row)" | ||
| 20 | - v-hasPermi="['workflow:leave:edit']" | ||
| 21 | - >审批 | 51 | + <el-button size="mini" type="text" icon="el-icon-edit" @click="examineAndApprove (scope.row)" |
| 52 | + v-hasPermi="['workflow:leave:edit']">审批 | ||
| 22 | </el-button> | 53 | </el-button> |
| 23 | </template> | 54 | </template> |
| 24 | </el-table-column> | 55 | </el-table-column> |
| 25 | - </el-table> | 56 | + </el-table>--> |
| 26 | 57 | ||
| 27 | - <pagination | ||
| 28 | - v-show="total>0" | ||
| 29 | - :total="total" | ||
| 30 | - :page.sync="queryParams.pageNum" | ||
| 31 | - :limit.sync="queryParams.pageSize" | ||
| 32 | - @pagination="getList" | ||
| 33 | - /> | 58 | + <pagination :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" /> |
| 34 | 59 | ||
| 35 | <!-- 审批对话框 --> | 60 | <!-- 审批对话框 --> |
| 36 | <el-dialog :title="title" :visible.sync="open" v-if="open" width="500px" append-to-body> | 61 | <el-dialog :title="title" :visible.sync="open" v-if="open" width="500px" append-to-body> |
| 37 | - <leaveHistoryForm :businessKey="businessKey" v-if="'leave'==definitionKey"/> | 62 | + <leaveHistoryForm :businessKey="businessKey" v-if="'leave'==definitionKey && needShow" /> |
| 38 | 63 | ||
| 39 | <el-form :model="form" ref="form" label-width="100px" class="demo-dynamic"> | 64 | <el-form :model="form" ref="form" label-width="100px" class="demo-dynamic"> |
| 40 | - <el-form-item | ||
| 41 | - v-for="(domain, index) in form.formData" | ||
| 42 | - :label="domain.controlLable" | ||
| 43 | - :key="index" | ||
| 44 | - > | ||
| 45 | - <el-radio-group v-model="domain.controlValue" v-if="'radio'==domain.controlType"> | ||
| 46 | - <el-radio v-for="(defaults,indexd) in domain.controlDefault.split('--__--')" | ||
| 47 | - :label=indexd | ||
| 48 | - :key="indexd" | ||
| 49 | - >{{defaults}} | ||
| 50 | - | 65 | + <el-form-item v-for="(domain, index) in form.formData" :label="domain.controlLable" :key="index"> |
| 66 | + <el-radio-group v-model="domain.controlValue" v-if="'radio'==domain.controlType && needShow"> | ||
| 67 | + <el-radio v-for="(defaults,indexd) in domain.controlDefault.split('--__--')" :label=indexd :key="indexd"> | ||
| 68 | + {{defaults}} | ||
| 51 | </el-radio> | 69 | </el-radio> |
| 52 | - | ||
| 53 | </el-radio-group> | 70 | </el-radio-group> |
| 54 | - <el-input type="textarea" v-model="domain.controlValue" v-if="'textarea'==domain.controlType" | ||
| 55 | - ></el-input> | 71 | + <el-input type="textarea" v-model="domain.controlValue" v-if="'textarea'==domain.controlType"></el-input> |
| 56 | </el-form-item> | 72 | </el-form-item> |
| 57 | </el-form> | 73 | </el-form> |
| 58 | 74 | ||
| @@ -64,18 +80,26 @@ | @@ -64,18 +80,26 @@ | ||
| 64 | </div> | 80 | </div> |
| 65 | </template> | 81 | </template> |
| 66 | 82 | ||
| 67 | -<script> | ||
| 68 | - | 83 | +<style> |
| 84 | + @import '../../../assets/css/task.css' | ||
| 85 | +</style> | ||
| 69 | 86 | ||
| 70 | - import {listTask, formDataShow, formDataSave} from "@/api/activiti/task"; | 87 | +<script> |
| 88 | + import { | ||
| 89 | + listTask, | ||
| 90 | + formDataShow, | ||
| 91 | + formDataSave | ||
| 92 | + } from "@/api/activiti/task"; | ||
| 71 | import leaveHistoryForm from "@/views/workflow/leave/leaveHistoryForm"; | 93 | import leaveHistoryForm from "@/views/workflow/leave/leaveHistoryForm"; |
| 72 | 94 | ||
| 73 | export default { | 95 | export default { |
| 74 | - name: "Leave", | ||
| 75 | - components: {leaveHistoryForm}, | 96 | + name: "task", |
| 97 | + components: { | ||
| 98 | + leaveHistoryForm | ||
| 99 | + }, | ||
| 76 | data() { | 100 | data() { |
| 77 | return { | 101 | return { |
| 78 | - id:'', | 102 | + id: '', |
| 79 | definitionKey: '', | 103 | definitionKey: '', |
| 80 | businessKey: '', | 104 | businessKey: '', |
| 81 | // 遮罩层 | 105 | // 遮罩层 |
| @@ -103,8 +127,9 @@ | @@ -103,8 +127,9 @@ | ||
| 103 | }, | 127 | }, |
| 104 | // 表单参数 | 128 | // 表单参数 |
| 105 | form: { | 129 | form: { |
| 106 | - formData:[] | 130 | + formData: [] |
| 107 | }, | 131 | }, |
| 132 | + needShow:false, | ||
| 108 | // 表单校验 | 133 | // 表单校验 |
| 109 | rules: {} | 134 | rules: {} |
| 110 | }; | 135 | }; |
| @@ -133,20 +158,18 @@ | @@ -133,20 +158,18 @@ | ||
| 133 | this.definitionKey = '', | 158 | this.definitionKey = '', |
| 134 | this.businessKey = '', | 159 | this.businessKey = '', |
| 135 | this.form = { | 160 | this.form = { |
| 136 | - formData:[], | 161 | + formData: [], |
| 137 | }; | 162 | }; |
| 138 | this.resetForm("form"); | 163 | this.resetForm("form"); |
| 139 | }, | 164 | }, |
| 140 | - | ||
| 141 | /** 审批按钮操作 */ | 165 | /** 审批按钮操作 */ |
| 142 | - examineAndApprove(row) { | ||
| 143 | - console.log(row) | 166 | + examineAndApprove(row,idx) { |
| 167 | + this.needShow = false; | ||
| 144 | this.reset(); | 168 | this.reset(); |
| 145 | this.definitionKey = row.definitionKey; | 169 | this.definitionKey = row.definitionKey; |
| 146 | - this.businessKey = row.businessKey; | ||
| 147 | - this.id=row.id; | 170 | + this.businessKey = row.businessKey; |
| 171 | + this.id = row.id; | ||
| 148 | formDataShow(row.id).then(response => { | 172 | formDataShow(row.id).then(response => { |
| 149 | - debugger; | ||
| 150 | // FormProperty_3qipis2--__!!radio--__!!审批意见--__!!i--__!!同意--__--不同意 | 173 | // FormProperty_3qipis2--__!!radio--__!!审批意见--__!!i--__!!同意--__--不同意 |
| 151 | // FormProperty_0lffpcm--__!!textarea--__!!批注--__!!f--__!!null | 174 | // FormProperty_0lffpcm--__!!textarea--__!!批注--__!!f--__!!null |
| 152 | let datas = response.data; | 175 | let datas = response.data; |
| @@ -157,11 +180,16 @@ | @@ -157,11 +180,16 @@ | ||
| 157 | let controlDefault = null | 180 | let controlDefault = null |
| 158 | switch (strings[1]) { | 181 | switch (strings[1]) { |
| 159 | case 'radio': | 182 | case 'radio': |
| 160 | - controlValue = 0; | 183 | + controlValue = idx; |
| 161 | controlDefault = strings[4] | 184 | controlDefault = strings[4] |
| 162 | break; | 185 | break; |
| 163 | - // default: | 186 | + // default: |
| 164 | } | 187 | } |
| 188 | + | ||
| 189 | + if(idx == -1){ | ||
| 190 | + this.needShow = true; | ||
| 191 | + } | ||
| 192 | + | ||
| 165 | formData.push({ | 193 | formData.push({ |
| 166 | controlId: strings[0], | 194 | controlId: strings[0], |
| 167 | controlType: strings[1], | 195 | controlType: strings[1], |
| @@ -178,7 +206,7 @@ | @@ -178,7 +206,7 @@ | ||
| 178 | }, | 206 | }, |
| 179 | /** 提交按钮 */ | 207 | /** 提交按钮 */ |
| 180 | submitForm() { | 208 | submitForm() { |
| 181 | - formDataSave(this.id,this.form.formData).then(response => { | 209 | + formDataSave(this.id, this.form.formData).then(response => { |
| 182 | this.msgSuccess("审批成功"); | 210 | this.msgSuccess("审批成功"); |
| 183 | this.open = false; | 211 | this.open = false; |
| 184 | this.getList(); | 212 | this.getList(); |
trash-ui/src/views/activiti/taskhistory/end.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <div class="app-container"> | ||
| 3 | + | ||
| 4 | + <el-card class="box-card" v-for="task in tastList"> | ||
| 5 | + <div :class="{card_status:true,dismiss:task.checkStatus=='1',agree:task.checkStatus=='0'}">{{task.checkStatus=="0"?"已同意":"已拒绝"}}</div> | ||
| 6 | + <div class="card_btn"> | ||
| 7 | + <a @click="examineAndApprove(task,-1)" >详情>></a> | ||
| 8 | + </div> | ||
| 9 | + <el-row class="card_row"> | ||
| 10 | + <el-col :span="2" class="card_grid"></el-col> | ||
| 11 | + <div class="card_title">{{task.instanceName}}</div> | ||
| 12 | + </el-row> | ||
| 13 | + | ||
| 14 | + <el-row class="card_row"> | ||
| 15 | + <el-col :span="3" class="card_grid"></el-col> | ||
| 16 | + <el-col :span="6" class="card_grid"> | ||
| 17 | + <div>开始时间: {{task.startTime}}</div> | ||
| 18 | + </el-col> | ||
| 19 | + <el-col :span="6" class="card_grid center"> | ||
| 20 | + <div>结束时间: {{task.endTime}}</div> | ||
| 21 | + </el-col> | ||
| 22 | + <el-col :span="6" class="card_grid right"> | ||
| 23 | + <div>申请类型: {{task.type}}</div> | ||
| 24 | + </el-col> | ||
| 25 | + <el-col :span="3" class="card_grid"></el-col> | ||
| 26 | + </el-row> | ||
| 27 | + <el-row class="card_row"> | ||
| 28 | + <el-col :span="3" class="card_grid"> | ||
| 29 | + <div></div> | ||
| 30 | + </el-col> | ||
| 31 | + <el-col :span="18"> | ||
| 32 | + <div>申请理由: {{task.reason}}</div> | ||
| 33 | + </el-col> | ||
| 34 | + <el-col :span="3" class="card_grid"></el-col> | ||
| 35 | + </el-row> | ||
| 36 | + </el-card> | ||
| 37 | + | ||
| 38 | + | ||
| 39 | + <!--<el-table v-loading="loading" :data="tastList"> | ||
| 40 | + <el-table-column label="流程ID" align="center" prop="id"/> | ||
| 41 | + <el-table-column label="流程名称" align="center" prop="instanceName" /> | ||
| 42 | + <el-table-column label="任务节点名称" align="center" prop="name" /> | ||
| 43 | + <el-table-column label="任务状态" align="center" prop="status" /> | ||
| 44 | + <el-table-column label="办理人" align="center" prop="assignee" /> | ||
| 45 | + <el-table-column label="创建时间" align="center" prop="createdDate" /> | ||
| 46 | + | ||
| 47 | + <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> | ||
| 48 | + <template slot-scope="scope"> | ||
| 49 | + <el-button size="mini" type="text" icon="el-icon-edit" @click="examineAndApprove (scope.row)" | ||
| 50 | + v-hasPermi="['workflow:leave:edit']">审批 | ||
| 51 | + </el-button> | ||
| 52 | + </template> | ||
| 53 | + </el-table-column> | ||
| 54 | + </el-table>--> | ||
| 55 | + | ||
| 56 | + <pagination :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" /> | ||
| 57 | + | ||
| 58 | + <!-- 查看详细信息话框 --> | ||
| 59 | + <el-dialog :title="title" :visible.sync="open" append-to-body> | ||
| 60 | + <earthSitesForm :businessKey="businessKey" v-if="open"/> | ||
| 61 | + <div slot="footer" class="dialog-footer"> | ||
| 62 | + <el-button @click="open=!open">关闭</el-button> | ||
| 63 | + </div> | ||
| 64 | + </el-dialog> | ||
| 65 | + | ||
| 66 | + </div> | ||
| 67 | +</template> | ||
| 68 | + | ||
| 69 | +<style> | ||
| 70 | + @import '../../../assets/css/task.css' | ||
| 71 | +</style> | ||
| 72 | + | ||
| 73 | +<script> | ||
| 74 | + import { | ||
| 75 | + listEndTask, | ||
| 76 | + formDataShow | ||
| 77 | + } from "@/api/activiti/taskhistory"; | ||
| 78 | + import leaveHistoryForm from "@/views/workflow/leave/leaveHistoryForm"; | ||
| 79 | + import earthSitesForm from "@/views/workflow/leave/earthSitesForm"; | ||
| 80 | + | ||
| 81 | + export default { | ||
| 82 | + name: "taskHistory", | ||
| 83 | + components: { | ||
| 84 | + leaveHistoryForm, | ||
| 85 | + earthSitesForm | ||
| 86 | + }, | ||
| 87 | + data() { | ||
| 88 | + return { | ||
| 89 | + id: '', | ||
| 90 | + definitionKey: '', | ||
| 91 | + businessKey: '', | ||
| 92 | + // 遮罩层 | ||
| 93 | + loading: true, | ||
| 94 | + // 选中数组 | ||
| 95 | + ids: [], | ||
| 96 | + // 非单个禁用 | ||
| 97 | + single: true, | ||
| 98 | + // 非多个禁用 | ||
| 99 | + multiple: true, | ||
| 100 | + // 显示搜索条件 | ||
| 101 | + showSearch: true, | ||
| 102 | + // 总条数 | ||
| 103 | + total: 0, | ||
| 104 | + // 请假表格数据 | ||
| 105 | + tastList: [], | ||
| 106 | + // 弹出层标题 | ||
| 107 | + title: "", | ||
| 108 | + // 是否显示弹出层 | ||
| 109 | + open: false, | ||
| 110 | + // 查询参数 | ||
| 111 | + queryParams: { | ||
| 112 | + pageNum: 1, | ||
| 113 | + pageSize: 10, | ||
| 114 | + }, | ||
| 115 | + // 表单参数 | ||
| 116 | + form: { | ||
| 117 | + formData: [] | ||
| 118 | + }, | ||
| 119 | + needShow:false, | ||
| 120 | + // 表单校验 | ||
| 121 | + rules: {} | ||
| 122 | + }; | ||
| 123 | + }, | ||
| 124 | + created() { | ||
| 125 | + this.getList(); | ||
| 126 | + }, | ||
| 127 | + methods: { | ||
| 128 | + /** 查询请假列表 */ | ||
| 129 | + getList() { | ||
| 130 | + this.loading = true; | ||
| 131 | + listEndTask(this.queryParams).then(response => { | ||
| 132 | + this.tastList = response.rows; | ||
| 133 | + this.total = response.total; | ||
| 134 | + this.loading = false; | ||
| 135 | + }); | ||
| 136 | + }, | ||
| 137 | + | ||
| 138 | + // 取消按钮 | ||
| 139 | + cancel() { | ||
| 140 | + this.open = false; | ||
| 141 | + this.reset(); | ||
| 142 | + }, | ||
| 143 | + // 表单重置 | ||
| 144 | + reset() { | ||
| 145 | + this.definitionKey = '', | ||
| 146 | + this.businessKey = '', | ||
| 147 | + this.form = { | ||
| 148 | + formData: [], | ||
| 149 | + }; | ||
| 150 | + this.resetForm("form"); | ||
| 151 | + }, | ||
| 152 | + examineAndApprove(row,idx) { | ||
| 153 | + this.needShow = false; | ||
| 154 | + this.reset(); | ||
| 155 | + this.definitionKey = row.definitionKey; | ||
| 156 | + this.businessKey = row.businessKey; | ||
| 157 | + this.id = row.id; | ||
| 158 | + this.open = true; | ||
| 159 | + this.title = "详情"; | ||
| 160 | + /* formDataShow(this.id).then(response => { | ||
| 161 | + // FormProperty_3qipis2--__!!radio--__!!审批意见--__!!i--__!!同意--__--不同意 | ||
| 162 | + // FormProperty_0lffpcm--__!!textarea--__!!批注--__!!f--__!!null | ||
| 163 | + let datas = response.data; | ||
| 164 | + let formData = [] | ||
| 165 | + for (let i = 0; i < datas.length; i++) { | ||
| 166 | + let strings = datas[i].split('--__!!') | ||
| 167 | + let controlValue = null | ||
| 168 | + let controlDefault = null | ||
| 169 | + switch (strings[1]) { | ||
| 170 | + case 'radio': | ||
| 171 | + controlValue = idx; | ||
| 172 | + controlDefault = strings[4] | ||
| 173 | + break; | ||
| 174 | + // default: | ||
| 175 | + } | ||
| 176 | + | ||
| 177 | + if(idx == -1){ | ||
| 178 | + this.needShow = true; | ||
| 179 | + } | ||
| 180 | + | ||
| 181 | + formData.push({ | ||
| 182 | + controlId: strings[0], | ||
| 183 | + controlType: strings[1], | ||
| 184 | + controlLable: strings[2], | ||
| 185 | + controlIsParam: strings[3], | ||
| 186 | + controlValue: controlValue, | ||
| 187 | + controlDefault: controlDefault | ||
| 188 | + }) | ||
| 189 | + } | ||
| 190 | + this.form.formData = formData; | ||
| 191 | + }); */ | ||
| 192 | + }, | ||
| 193 | + } | ||
| 194 | + }; | ||
| 195 | +</script> |
trash-ui/src/views/activiti/taskhistory/index.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <div class="app-container"> | ||
| 3 | + | ||
| 4 | + <el-card class="box-card" v-for="task in tastList"> | ||
| 5 | + <div :class="{card_status:true,dismiss:task.checkStatus=='1',agree:task.checkStatus=='0'}">{{task.checkStatus=="0"?"已同意":"已拒绝"}}</div> | ||
| 6 | + <div class="card_btn"> | ||
| 7 | + <a @click="examineAndApprove(task,-1)" >详情>></a> | ||
| 8 | + </div> | ||
| 9 | + <el-row class="card_row"> | ||
| 10 | + <el-col :span="2" class="card_grid"></el-col> | ||
| 11 | + <div class="card_title">{{task.instanceName}}</div> | ||
| 12 | + </el-row> | ||
| 13 | + | ||
| 14 | + <el-row class="card_row"> | ||
| 15 | + <el-col :span="3" class="card_grid"></el-col> | ||
| 16 | + <el-col :span="6" class="card_grid"> | ||
| 17 | + <div>开始时间: {{task.startTime}}</div> | ||
| 18 | + </el-col> | ||
| 19 | + <el-col :span="6" class="card_grid center"> | ||
| 20 | + <div>结束时间: {{task.endTime}}</div> | ||
| 21 | + </el-col> | ||
| 22 | + <el-col :span="6" class="card_grid right"> | ||
| 23 | + <div>申请类型: {{task.type}}</div> | ||
| 24 | + </el-col> | ||
| 25 | + <el-col :span="3" class="card_grid"></el-col> | ||
| 26 | + </el-row> | ||
| 27 | + <el-row class="card_row"> | ||
| 28 | + <el-col :span="3" class="card_grid"> | ||
| 29 | + <div></div> | ||
| 30 | + </el-col> | ||
| 31 | + <el-col :span="18"> | ||
| 32 | + <div>申请理由: {{task.reason}}</div> | ||
| 33 | + </el-col> | ||
| 34 | + <el-col :span="3" class="card_grid"></el-col> | ||
| 35 | + </el-row> | ||
| 36 | + </el-card> | ||
| 37 | + | ||
| 38 | + | ||
| 39 | + <!--<el-table v-loading="loading" :data="tastList"> | ||
| 40 | + <el-table-column label="流程ID" align="center" prop="id"/> | ||
| 41 | + <el-table-column label="流程名称" align="center" prop="instanceName" /> | ||
| 42 | + <el-table-column label="任务节点名称" align="center" prop="name" /> | ||
| 43 | + <el-table-column label="任务状态" align="center" prop="status" /> | ||
| 44 | + <el-table-column label="办理人" align="center" prop="assignee" /> | ||
| 45 | + <el-table-column label="创建时间" align="center" prop="createdDate" /> | ||
| 46 | + | ||
| 47 | + <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> | ||
| 48 | + <template slot-scope="scope"> | ||
| 49 | + <el-button size="mini" type="text" icon="el-icon-edit" @click="examineAndApprove (scope.row)" | ||
| 50 | + v-hasPermi="['workflow:leave:edit']">审批 | ||
| 51 | + </el-button> | ||
| 52 | + </template> | ||
| 53 | + </el-table-column> | ||
| 54 | + </el-table>--> | ||
| 55 | + | ||
| 56 | + <pagination :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" /> | ||
| 57 | + | ||
| 58 | + <!-- 查看详细信息话框 --> | ||
| 59 | + <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> | ||
| 60 | + <leaveHistoryForm :businessKey="businessKey" v-if="open"/> | ||
| 61 | + <div slot="footer" class="dialog-footer"> | ||
| 62 | + <el-button @click="open=!open">关闭</el-button> | ||
| 63 | + </div> | ||
| 64 | + </el-dialog> | ||
| 65 | + | ||
| 66 | + </div> | ||
| 67 | +</template> | ||
| 68 | + | ||
| 69 | +<style> | ||
| 70 | + @import '../../../assets/css/task.css' | ||
| 71 | +</style> | ||
| 72 | + | ||
| 73 | +<script> | ||
| 74 | + import { | ||
| 75 | + listTask, | ||
| 76 | + formDataShow | ||
| 77 | + } from "@/api/activiti/taskhistory"; | ||
| 78 | + import leaveHistoryForm from "@/views/workflow/leave/leaveHistoryForm"; | ||
| 79 | + | ||
| 80 | + export default { | ||
| 81 | + name: "taskHistory", | ||
| 82 | + components: { | ||
| 83 | + leaveHistoryForm | ||
| 84 | + }, | ||
| 85 | + data() { | ||
| 86 | + return { | ||
| 87 | + id: '', | ||
| 88 | + definitionKey: '', | ||
| 89 | + businessKey: '', | ||
| 90 | + // 遮罩层 | ||
| 91 | + loading: true, | ||
| 92 | + // 选中数组 | ||
| 93 | + ids: [], | ||
| 94 | + // 非单个禁用 | ||
| 95 | + single: true, | ||
| 96 | + // 非多个禁用 | ||
| 97 | + multiple: true, | ||
| 98 | + // 显示搜索条件 | ||
| 99 | + showSearch: true, | ||
| 100 | + // 总条数 | ||
| 101 | + total: 0, | ||
| 102 | + // 请假表格数据 | ||
| 103 | + tastList: [], | ||
| 104 | + // 弹出层标题 | ||
| 105 | + title: "", | ||
| 106 | + // 是否显示弹出层 | ||
| 107 | + open: false, | ||
| 108 | + // 查询参数 | ||
| 109 | + queryParams: { | ||
| 110 | + pageNum: 1, | ||
| 111 | + pageSize: 10, | ||
| 112 | + }, | ||
| 113 | + // 表单参数 | ||
| 114 | + form: { | ||
| 115 | + formData: [] | ||
| 116 | + }, | ||
| 117 | + needShow:false, | ||
| 118 | + // 表单校验 | ||
| 119 | + rules: {} | ||
| 120 | + }; | ||
| 121 | + }, | ||
| 122 | + created() { | ||
| 123 | + this.getList(); | ||
| 124 | + }, | ||
| 125 | + methods: { | ||
| 126 | + /** 查询请假列表 */ | ||
| 127 | + getList() { | ||
| 128 | + this.loading = true; | ||
| 129 | + listTask(this.queryParams).then(response => { | ||
| 130 | + this.tastList = response.rows; | ||
| 131 | + this.total = response.total; | ||
| 132 | + this.loading = false; | ||
| 133 | + }); | ||
| 134 | + }, | ||
| 135 | + | ||
| 136 | + // 取消按钮 | ||
| 137 | + cancel() { | ||
| 138 | + this.open = false; | ||
| 139 | + this.reset(); | ||
| 140 | + }, | ||
| 141 | + // 表单重置 | ||
| 142 | + reset() { | ||
| 143 | + this.definitionKey = '', | ||
| 144 | + this.businessKey = '', | ||
| 145 | + this.form = { | ||
| 146 | + formData: [], | ||
| 147 | + }; | ||
| 148 | + this.resetForm("form"); | ||
| 149 | + }, | ||
| 150 | + examineAndApprove(row,idx) { | ||
| 151 | + this.needShow = false; | ||
| 152 | + this.reset(); | ||
| 153 | + this.definitionKey = row.definitionKey; | ||
| 154 | + this.businessKey = row.businessKey; | ||
| 155 | + this.id = row.id; | ||
| 156 | + formDataShow(row.id).then(response => { | ||
| 157 | + // FormProperty_3qipis2--__!!radio--__!!审批意见--__!!i--__!!同意--__--不同意 | ||
| 158 | + // FormProperty_0lffpcm--__!!textarea--__!!批注--__!!f--__!!null | ||
| 159 | + let datas = response.data; | ||
| 160 | + let formData = [] | ||
| 161 | + for (let i = 0; i < datas.length; i++) { | ||
| 162 | + let strings = datas[i].split('--__!!') | ||
| 163 | + let controlValue = null | ||
| 164 | + let controlDefault = null | ||
| 165 | + switch (strings[1]) { | ||
| 166 | + case 'radio': | ||
| 167 | + controlValue = idx; | ||
| 168 | + controlDefault = strings[4] | ||
| 169 | + break; | ||
| 170 | + // default: | ||
| 171 | + } | ||
| 172 | + | ||
| 173 | + if(idx == -1){ | ||
| 174 | + this.needShow = true; | ||
| 175 | + } | ||
| 176 | + | ||
| 177 | + formData.push({ | ||
| 178 | + controlId: strings[0], | ||
| 179 | + controlType: strings[1], | ||
| 180 | + controlLable: strings[2], | ||
| 181 | + controlIsParam: strings[3], | ||
| 182 | + controlValue: controlValue, | ||
| 183 | + controlDefault: controlDefault | ||
| 184 | + }) | ||
| 185 | + } | ||
| 186 | + this.form.formData = formData; | ||
| 187 | + this.open = true; | ||
| 188 | + this.title = "审批"; | ||
| 189 | + }); | ||
| 190 | + }, | ||
| 191 | + /** 提交按钮 */ | ||
| 192 | + submitForm() { | ||
| 193 | + formDataSave(this.id, this.form.formData).then(response => { | ||
| 194 | + this.msgSuccess("审批成功"); | ||
| 195 | + this.open = false; | ||
| 196 | + this.getList(); | ||
| 197 | + }); | ||
| 198 | + }, | ||
| 199 | + } | ||
| 200 | + }; | ||
| 201 | +</script> |
trash-ui/src/views/index.vue
| 1 | <template> | 1 | <template> |
| 2 | <div class="dashboard-editor-container"> | 2 | <div class="dashboard-editor-container"> |
| 3 | - | 3 | +<!-- |
| 4 | <panel-group @handleSetLineChartData="handleSetLineChartData" /> | 4 | <panel-group @handleSetLineChartData="handleSetLineChartData" /> |
| 5 | 5 | ||
| 6 | <el-row style="background:#fff;padding:16px 16px 0;margin-bottom:32px;"> | 6 | <el-row style="background:#fff;padding:16px 16px 0;margin-bottom:32px;"> |
| 7 | <line-chart :chart-data="lineChartData" /> | 7 | <line-chart :chart-data="lineChartData" /> |
| 8 | - </el-row> | 8 | + </el-row> --> |
| 9 | 9 | ||
| 10 | - <el-row :gutter="32"> | 10 | + <!-- <el-row :gutter="32"> |
| 11 | <el-col :xs="24" :sm="24" :lg="8"> | 11 | <el-col :xs="24" :sm="24" :lg="8"> |
| 12 | <div class="chart-wrapper"> | 12 | <div class="chart-wrapper"> |
| 13 | <raddar-chart /> | 13 | <raddar-chart /> |
| @@ -23,55 +23,55 @@ | @@ -23,55 +23,55 @@ | ||
| 23 | <bar-chart /> | 23 | <bar-chart /> |
| 24 | </div> | 24 | </div> |
| 25 | </el-col> | 25 | </el-col> |
| 26 | - </el-row> | 26 | + </el-row> --> |
| 27 | + | ||
| 27 | 28 | ||
| 28 | - | ||
| 29 | </div> | 29 | </div> |
| 30 | </template> | 30 | </template> |
| 31 | 31 | ||
| 32 | <script> | 32 | <script> |
| 33 | -import PanelGroup from './dashboard/PanelGroup' | ||
| 34 | -import LineChart from './dashboard/LineChart' | ||
| 35 | -import RaddarChart from './dashboard/RaddarChart' | ||
| 36 | -import PieChart from './dashboard/PieChart' | ||
| 37 | -import BarChart from './dashboard/BarChart' | 33 | +// import PanelGroup from './dashboard/PanelGroup' |
| 34 | +// import LineChart from './dashboard/LineChart' | ||
| 35 | +// import RaddarChart from './dashboard/RaddarChart' | ||
| 36 | +// import PieChart from './dashboard/PieChart' | ||
| 37 | +// import BarChart from './dashboard/BarChart' | ||
| 38 | 38 | ||
| 39 | -const lineChartData = { | ||
| 40 | - newVisitis: { | ||
| 41 | - expectedData: [100, 120, 161, 134, 105, 160, 165], | ||
| 42 | - actualData: [120, 82, 91, 154, 162, 140, 145] | ||
| 43 | - }, | ||
| 44 | - messages: { | ||
| 45 | - expectedData: [200, 192, 120, 144, 160, 130, 140], | ||
| 46 | - actualData: [180, 160, 151, 106, 145, 150, 130] | ||
| 47 | - }, | ||
| 48 | - purchases: { | ||
| 49 | - expectedData: [80, 100, 121, 104, 105, 90, 100], | ||
| 50 | - actualData: [120, 90, 100, 138, 142, 130, 130] | ||
| 51 | - }, | ||
| 52 | - shoppings: { | ||
| 53 | - expectedData: [130, 140, 141, 142, 145, 150, 160], | ||
| 54 | - actualData: [120, 82, 91, 154, 162, 140, 130] | ||
| 55 | - } | ||
| 56 | -} | 39 | +// const lineChartData = { |
| 40 | +// newVisitis: { | ||
| 41 | +// expectedData: [100, 120, 161, 134, 105, 160, 165], | ||
| 42 | +// actualData: [120, 82, 91, 154, 162, 140, 145] | ||
| 43 | +// }, | ||
| 44 | +// messages: { | ||
| 45 | +// expectedData: [200, 192, 120, 144, 160, 130, 140], | ||
| 46 | +// actualData: [180, 160, 151, 106, 145, 150, 130] | ||
| 47 | +// }, | ||
| 48 | +// purchases: { | ||
| 49 | +// expectedData: [80, 100, 121, 104, 105, 90, 100], | ||
| 50 | +// actualData: [120, 90, 100, 138, 142, 130, 130] | ||
| 51 | +// }, | ||
| 52 | +// shoppings: { | ||
| 53 | +// expectedData: [130, 140, 141, 142, 145, 150, 160], | ||
| 54 | +// actualData: [120, 82, 91, 154, 162, 140, 130] | ||
| 55 | +// } | ||
| 56 | +// } | ||
| 57 | 57 | ||
| 58 | export default { | 58 | export default { |
| 59 | name: 'Index', | 59 | name: 'Index', |
| 60 | components: { | 60 | components: { |
| 61 | - PanelGroup, | ||
| 62 | - LineChart, | ||
| 63 | - RaddarChart, | ||
| 64 | - PieChart, | ||
| 65 | - BarChart | 61 | + // PanelGroup, |
| 62 | + // LineChart, | ||
| 63 | + // RaddarChart, | ||
| 64 | + // PieChart, | ||
| 65 | + // BarChart | ||
| 66 | }, | 66 | }, |
| 67 | data() { | 67 | data() { |
| 68 | return { | 68 | return { |
| 69 | - lineChartData: lineChartData.newVisitis | 69 | + // lineChartData: lineChartData.newVisitis |
| 70 | } | 70 | } |
| 71 | }, | 71 | }, |
| 72 | methods: { | 72 | methods: { |
| 73 | handleSetLineChartData(type) { | 73 | handleSetLineChartData(type) { |
| 74 | - this.lineChartData = lineChartData[type] | 74 | + // this.lineChartData = lineChartData[type] |
| 75 | } | 75 | } |
| 76 | } | 76 | } |
| 77 | } | 77 | } |
trash-ui/src/views/workflow/leave/earthSitesForm.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <div> | ||
| 3 | + <div> | ||
| 4 | + <h2>申请人:{{form.createName}}</h2> | ||
| 5 | + <el-form label-width="80px"> | ||
| 6 | + <el-form-item label="类型" > | ||
| 7 | + <el-input v-model="form.type"/> | ||
| 8 | + </el-form-item> | ||
| 9 | + <el-form-item label="标题"> | ||
| 10 | + <el-input v-model="form.title"/> | ||
| 11 | + </el-form-item> | ||
| 12 | + <el-form-item label="申请理由" > | ||
| 13 | + <el-input v-model="form.reason" /> | ||
| 14 | + </el-form-item> | ||
| 15 | + <el-form-item label="开始时间"> | ||
| 16 | + <el-input v-model="form.leaveStartTime"/> | ||
| 17 | + </el-form-item> | ||
| 18 | + <el-form-item label="结束时间"> | ||
| 19 | + <el-input v-model="form.leaveEndTime"/> | ||
| 20 | + </el-form-item> | ||
| 21 | + </el-form> | ||
| 22 | + </div> | ||
| 23 | + <div v-for="(historyData, index) in fromData" | ||
| 24 | + :key="index" > | ||
| 25 | + <h2>{{historyData.taskNodeName}}</h2> | ||
| 26 | + <h3>审批人:{{historyData.createName}}</h3> | ||
| 27 | + <h3>审批时间:{{historyData.createdDate}}</h3> | ||
| 28 | + <el-form v-for="(fistoryFormData, indexH) in historyData.formHistoryDataDTO" :key="indexH" label-width="80px"> | ||
| 29 | + <el-form-item :label=fistoryFormData.title > | ||
| 30 | + <el-input v-model="fistoryFormData.value"/> | ||
| 31 | + </el-form-item> | ||
| 32 | + </el-form> | ||
| 33 | + </div> | ||
| 34 | + </div> | ||
| 35 | +</template> | ||
| 36 | + | ||
| 37 | +<script> | ||
| 38 | + import { getLeave } from '@/api/workflow/leave' | ||
| 39 | + import { historyFromData } from '@/api/activiti/historyFormdata' | ||
| 40 | + export default { | ||
| 41 | + name: "earthSitesForm", | ||
| 42 | + props: { | ||
| 43 | + businessKey: { | ||
| 44 | + type: String | ||
| 45 | + } | ||
| 46 | + }, | ||
| 47 | + data(){ | ||
| 48 | + return{ | ||
| 49 | + // 表单参数 | ||
| 50 | + form: {}, | ||
| 51 | + fromData:[], | ||
| 52 | + } | ||
| 53 | + }, | ||
| 54 | + created() { | ||
| 55 | + this.getLeave() | ||
| 56 | + this.historyFromData() | ||
| 57 | + }, | ||
| 58 | + methods:{ | ||
| 59 | + getLeave() { | ||
| 60 | + getLeave(this.businessKey).then(response => { | ||
| 61 | + this.form = response.data | ||
| 62 | + }) | ||
| 63 | + }, | ||
| 64 | + historyFromData() { | ||
| 65 | + historyFromData(this.businessKey).then(response => { | ||
| 66 | + this.fromData = response.data | ||
| 67 | + }) | ||
| 68 | + }, | ||
| 69 | + } | ||
| 70 | + | ||
| 71 | + } | ||
| 72 | +</script> | ||
| 73 | + | ||
| 74 | +<style scoped> | ||
| 75 | + | ||
| 76 | +</style> |
trash-ui/src/views/workflow/leave/index.vue
trash-ui/src/views/workflow/leave/leaveHistoryForm.vue
| @@ -9,7 +9,7 @@ | @@ -9,7 +9,7 @@ | ||
| 9 | <el-form-item label="标题"> | 9 | <el-form-item label="标题"> |
| 10 | <el-input v-model="form.title"/> | 10 | <el-input v-model="form.title"/> |
| 11 | </el-form-item> | 11 | </el-form-item> |
| 12 | - <el-form-item label="原因" > | 12 | + <el-form-item label="申请理由" > |
| 13 | <el-input v-model="form.reason" /> | 13 | <el-input v-model="form.reason" /> |
| 14 | </el-form-item> | 14 | </el-form-item> |
| 15 | <el-form-item label="开始时间"> | 15 | <el-form-item label="开始时间"> |
trash-workFlow/pom.xml
| @@ -16,6 +16,9 @@ | @@ -16,6 +16,9 @@ | ||
| 16 | <groupId>com.trash</groupId> | 16 | <groupId>com.trash</groupId> |
| 17 | <artifactId>trash-activiti</artifactId> | 17 | <artifactId>trash-activiti</artifactId> |
| 18 | </dependency> | 18 | </dependency> |
| 19 | - | 19 | + <dependency> |
| 20 | + <groupId>com.trash</groupId> | ||
| 21 | + <artifactId>trash-activiti</artifactId> | ||
| 22 | + </dependency> | ||
| 20 | </dependencies> | 23 | </dependencies> |
| 21 | </project> | 24 | </project> |
| 22 | \ No newline at end of file | 25 | \ No newline at end of file |
trash-workFlow/src/main/java/com/trash/leave/controller/WorkflowController.java
0 → 100644
| 1 | +package com.trash.leave.controller; | ||
| 2 | + | ||
| 3 | +import java.util.Map; | ||
| 4 | + | ||
| 5 | +import org.springframework.beans.factory.annotation.Autowired; | ||
| 6 | +import org.springframework.web.bind.annotation.PathVariable; | ||
| 7 | +import org.springframework.web.bind.annotation.PostMapping; | ||
| 8 | +import org.springframework.web.bind.annotation.RequestBody; | ||
| 9 | +import org.springframework.web.bind.annotation.RequestMapping; | ||
| 10 | +import org.springframework.web.bind.annotation.RestController; | ||
| 11 | + | ||
| 12 | +import com.trash.common.core.controller.BaseController; | ||
| 13 | +import com.trash.common.core.domain.AjaxResult; | ||
| 14 | +import com.trash.common.core.domain.entity.SysUser; | ||
| 15 | +import com.trash.common.core.domain.model.LoginUser; | ||
| 16 | +import com.trash.common.utils.SecurityUtils; | ||
| 17 | +import com.trash.framework.web.service.SysLoginService; | ||
| 18 | +import com.trash.leave.service.IWorkflowService; | ||
| 19 | +import com.trash.system.service.ISysUserService; | ||
| 20 | + | ||
| 21 | +/** | ||
| 22 | + * 请假Controller | ||
| 23 | + * | ||
| 24 | + * @author danny | ||
| 25 | + * @date 2020-10-28 | ||
| 26 | + */ | ||
| 27 | +@RestController | ||
| 28 | +@RequestMapping("/workflow") | ||
| 29 | +public class WorkflowController extends BaseController { | ||
| 30 | + | ||
| 31 | + @Autowired | ||
| 32 | + IWorkflowService workflowService; | ||
| 33 | + | ||
| 34 | + | ||
| 35 | + @Autowired | ||
| 36 | + private SysLoginService loginService; | ||
| 37 | + /** | ||
| 38 | + * 查询请假列表 | ||
| 39 | + */ | ||
| 40 | + @RequestMapping("/add") | ||
| 41 | + public AjaxResult add(@RequestBody Map<String,Object> map) { | ||
| 42 | + String username = null; | ||
| 43 | + try { | ||
| 44 | + username = SecurityUtils.getUsername() ; | ||
| 45 | + } catch (Exception e) { | ||
| 46 | + // TODO: handle exception | ||
| 47 | + } | ||
| 48 | + if(username == null){ | ||
| 49 | + loginService.loginByRemote(map.get("user").toString()); | ||
| 50 | + } | ||
| 51 | + | ||
| 52 | + int i = workflowService.createWorkFlow(map); | ||
| 53 | + | ||
| 54 | + return AjaxResult.success("create work flow success"); | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + /** | ||
| 58 | + * 查询请假列表 */ | ||
| 59 | +// @GetMapping("/listAll") | ||
| 60 | +// public TableDataInfo listAll(WorkflowLeave workflowLeave) { | ||
| 61 | +// startPage(); | ||
| 62 | +// List<WorkflowLeave> list = workflowLeaveService.selectWorkflowLeaveList(workflowLeave); | ||
| 63 | +// return getDataTable(list); | ||
| 64 | +// } | ||
| 65 | +// | ||
| 66 | +// /** | ||
| 67 | +// * 获取请假详细信息 | ||
| 68 | +// */ | ||
| 69 | +// @PreAuthorize("@ss.hasPermi('workflow:leave:query')") | ||
| 70 | +// @GetMapping(value = "/{id}") | ||
| 71 | +// public AjaxResult getInfo(@PathVariable("id") String id) { | ||
| 72 | +// return AjaxResult.success(workflowLeaveService.selectWorkflowLeaveById(id)); | ||
| 73 | +// } /** | ||
| 74 | +// * 获取请假详细信息 | ||
| 75 | +// */ | ||
| 76 | +// @PreAuthorize("@ss.hasPermi('workflow:leave:query')") | ||
| 77 | +// @GetMapping(value = "ByInstanceId/{instanceId}") | ||
| 78 | +// public AjaxResult getInfoByInstanceId(@PathVariable("instanceId") String instanceId) { | ||
| 79 | +// return AjaxResult.success(workflowLeaveService.selectWorkflowLeaveByInstanceId(instanceId)); | ||
| 80 | +// } | ||
| 81 | +// | ||
| 82 | +// /** | ||
| 83 | +// * 新增请假 | ||
| 84 | +// */ | ||
| 85 | +// @PreAuthorize("@ss.hasPermi('workflow:leave:add')") | ||
| 86 | +// @Log(title = "请假", businessType = BusinessType.INSERT) | ||
| 87 | +// @PostMapping | ||
| 88 | +// public AjaxResult add(@RequestBody WorkflowLeave workflowLeave) { | ||
| 89 | +// return toAjax(workflowLeaveService.insertWorkflowLeave(workflowLeave)); | ||
| 90 | +// } | ||
| 91 | +// | ||
| 92 | +// /** | ||
| 93 | +// * 修改请假 | ||
| 94 | +// */ | ||
| 95 | +// @PreAuthorize("@ss.hasPermi('workflow:leave:edit')") | ||
| 96 | +// @Log(title = "请假", businessType = BusinessType.UPDATE) | ||
| 97 | +// @PutMapping | ||
| 98 | +// public AjaxResult edit(@RequestBody WorkflowLeave workflowLeave) { | ||
| 99 | +// return toAjax(workflowLeaveService.insertWorkflowLeave(workflowLeave)); | ||
| 100 | +// } | ||
| 101 | +// | ||
| 102 | +// /** | ||
| 103 | +// * 删除请假 | ||
| 104 | +// */ | ||
| 105 | +// @PreAuthorize("@ss.hasPermi('workflow:leave:remove')") | ||
| 106 | +// @Log(title = "请假", businessType = BusinessType.DELETE) | ||
| 107 | +// @DeleteMapping("/{ids}") | ||
| 108 | +// public AjaxResult remove(@PathVariable String[] ids) { | ||
| 109 | +// return toAjax(workflowLeaveService.deleteWorkflowLeaveByIds(ids)); | ||
| 110 | +// } | ||
| 111 | +} |
trash-workFlow/src/main/java/com/trash/leave/domain/Workflow.java
0 → 100644
| 1 | +package com.trash.leave.domain; | ||
| 2 | + | ||
| 3 | +import java.util.Date; | ||
| 4 | +import com.fasterxml.jackson.annotation.JsonFormat; | ||
| 5 | +import org.apache.commons.lang3.builder.ToStringBuilder; | ||
| 6 | +import org.apache.commons.lang3.builder.ToStringStyle; | ||
| 7 | +import com.trash.common.annotation.Excel; | ||
| 8 | +import com.trash.common.core.domain.BaseEntity; | ||
| 9 | + | ||
| 10 | +/** | ||
| 11 | + * 请假对象 workflow_leave | ||
| 12 | + * | ||
| 13 | + * @author danny | ||
| 14 | + * @date 2020-10-28 | ||
| 15 | + */ | ||
| 16 | +public class Workflow extends BaseEntity | ||
| 17 | +{ | ||
| 18 | + private static final long serialVersionUID = 1L; | ||
| 19 | + | ||
| 20 | + /** 主键ID */ | ||
| 21 | + private String id; | ||
| 22 | + | ||
| 23 | + /** 请假类型 */ | ||
| 24 | + @Excel(name = "请假类型") | ||
| 25 | + private String type; | ||
| 26 | + | ||
| 27 | + /** 标题 */ | ||
| 28 | + @Excel(name = "标题") | ||
| 29 | + private String title; | ||
| 30 | + | ||
| 31 | + /** 原因 */ | ||
| 32 | + @Excel(name = "原因") | ||
| 33 | + private String reason; | ||
| 34 | + | ||
| 35 | + /** 开始时间 */ | ||
| 36 | + @JsonFormat(pattern = "yyyy-MM-dd") | ||
| 37 | + @Excel(name = "开始时间", width = 30, dateFormat = "yyyy-MM-dd") | ||
| 38 | + private String startTime; | ||
| 39 | + | ||
| 40 | + /** 结束时间 */ | ||
| 41 | + @JsonFormat(pattern = "yyyy-MM-dd") | ||
| 42 | + @Excel(name = "结束时间", width = 30, dateFormat = "yyyy-MM-dd") | ||
| 43 | + private String endTime; | ||
| 44 | + | ||
| 45 | + | ||
| 46 | + private String instanceId; | ||
| 47 | + private String taskName; | ||
| 48 | + | ||
| 49 | + /** 状态 */ | ||
| 50 | + @Excel(name = "状态") | ||
| 51 | + private String state; | ||
| 52 | + | ||
| 53 | + /** 创建人 */ | ||
| 54 | + @Excel(name = "创建人") | ||
| 55 | + private String createName; | ||
| 56 | + | ||
| 57 | + public void setId(String id) | ||
| 58 | + { | ||
| 59 | + this.id = id; | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + public String getId() | ||
| 63 | + { | ||
| 64 | + return id; | ||
| 65 | + } | ||
| 66 | + public void setType(String type) | ||
| 67 | + { | ||
| 68 | + this.type = type; | ||
| 69 | + } | ||
| 70 | + | ||
| 71 | + public String getType() | ||
| 72 | + { | ||
| 73 | + return type; | ||
| 74 | + } | ||
| 75 | + public void setTitle(String title) | ||
| 76 | + { | ||
| 77 | + this.title = title; | ||
| 78 | + } | ||
| 79 | + | ||
| 80 | + public String getTitle() | ||
| 81 | + { | ||
| 82 | + return title; | ||
| 83 | + } | ||
| 84 | + public void setReason(String reason) | ||
| 85 | + { | ||
| 86 | + this.reason = reason; | ||
| 87 | + } | ||
| 88 | + | ||
| 89 | + public String getReason() | ||
| 90 | + { | ||
| 91 | + return reason; | ||
| 92 | + } | ||
| 93 | + | ||
| 94 | + | ||
| 95 | + public void setInstanceId(String instanceId) | ||
| 96 | + { | ||
| 97 | + this.instanceId = instanceId; | ||
| 98 | + } | ||
| 99 | + | ||
| 100 | + public String getInstanceId() | ||
| 101 | + { | ||
| 102 | + return instanceId; | ||
| 103 | + } | ||
| 104 | + public void setState(String state) | ||
| 105 | + { | ||
| 106 | + this.state = state; | ||
| 107 | + } | ||
| 108 | + | ||
| 109 | + public String getState() | ||
| 110 | + { | ||
| 111 | + return state; | ||
| 112 | + } | ||
| 113 | + | ||
| 114 | + public String getCreateName() { | ||
| 115 | + return createName; | ||
| 116 | + } | ||
| 117 | + | ||
| 118 | + public void setCreateName(String createName) { | ||
| 119 | + this.createName = createName; | ||
| 120 | + } | ||
| 121 | + | ||
| 122 | + public String getTaskName() { | ||
| 123 | + return taskName; | ||
| 124 | + } | ||
| 125 | + | ||
| 126 | + public void setTaskName(String taskName) { | ||
| 127 | + this.taskName = taskName; | ||
| 128 | + } | ||
| 129 | + | ||
| 130 | + | ||
| 131 | + | ||
| 132 | + public String getStartTime() { | ||
| 133 | + return startTime; | ||
| 134 | + } | ||
| 135 | + | ||
| 136 | + public void setStartTime(String startTime) { | ||
| 137 | + this.startTime = startTime; | ||
| 138 | + } | ||
| 139 | + | ||
| 140 | + public String getEndTime() { | ||
| 141 | + return endTime; | ||
| 142 | + } | ||
| 143 | + | ||
| 144 | + public void setEndTime(String endTime) { | ||
| 145 | + this.endTime = endTime; | ||
| 146 | + } | ||
| 147 | + | ||
| 148 | + @Override | ||
| 149 | + public String toString() { | ||
| 150 | + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) | ||
| 151 | + .append("id", getId()) | ||
| 152 | + .append("type", getType()) | ||
| 153 | + .append("title", getTitle()) | ||
| 154 | + .append("reason", getReason()) | ||
| 155 | + .append("startTime", getStartTime()) | ||
| 156 | + .append("endTime", getEndTime()) | ||
| 157 | + .append("instanceId", getInstanceId()) | ||
| 158 | + .append("state", getState()) | ||
| 159 | + .append("createBy", getCreateBy()) | ||
| 160 | + .append("createTime", getCreateTime()) | ||
| 161 | + .append("updateTime", getUpdateTime()) | ||
| 162 | + .toString(); | ||
| 163 | + } | ||
| 164 | +} |
trash-workFlow/src/main/java/com/trash/leave/instener/EarthSitesEndStateListener.java
0 → 100644
| 1 | +package com.trash.leave.instener; | ||
| 2 | + | ||
| 3 | +import com.trash.leave.domain.WorkflowLeave; | ||
| 4 | +import com.trash.leave.service.IWorkflowLeaveService; | ||
| 5 | +import com.trash.common.utils.spring.SpringUtils; | ||
| 6 | + | ||
| 7 | +import org.activiti.engine.delegate.DelegateExecution; | ||
| 8 | +import org.activiti.engine.delegate.ExecutionListener; | ||
| 9 | +import org.activiti.engine.delegate.Expression; | ||
| 10 | + | ||
| 11 | + | ||
| 12 | +public class EarthSitesEndStateListener implements ExecutionListener { | ||
| 13 | + | ||
| 14 | + private Expression state; | ||
| 15 | + | ||
| 16 | + @Override | ||
| 17 | + public void notify(DelegateExecution delegateExecution) { | ||
| 18 | + System.out.println("流程状态更新 更新ID:" + delegateExecution.getProcessInstanceBusinessKey() + "状态:" + state.getValue(delegateExecution).toString()); | ||
| 19 | + } | ||
| 20 | +} |
trash-workFlow/src/main/java/com/trash/leave/mapper/WorkflowMapper.java
0 → 100644
| 1 | +package com.trash.leave.mapper; | ||
| 2 | + | ||
| 3 | +import java.util.List; | ||
| 4 | + | ||
| 5 | +import org.apache.ibatis.annotations.Param; | ||
| 6 | + | ||
| 7 | +import com.trash.leave.domain.Workflow; | ||
| 8 | + | ||
| 9 | +/** | ||
| 10 | + * 请假Mapper接口 | ||
| 11 | + * | ||
| 12 | + * @author danny | ||
| 13 | + * @date 2020-10-28 | ||
| 14 | + */ | ||
| 15 | +public interface WorkflowMapper | ||
| 16 | +{ | ||
| 17 | + /** | ||
| 18 | + * 查询请假 | ||
| 19 | + * | ||
| 20 | + * @param id 请假ID | ||
| 21 | + * @return 请假 | ||
| 22 | + */ | ||
| 23 | + public Workflow selectWorkflowById(String id); /** | ||
| 24 | + * 查询请假 | ||
| 25 | + * | ||
| 26 | + * @param instanceId 请假ID | ||
| 27 | + * @return 请假 | ||
| 28 | + */ | ||
| 29 | + public Workflow selectWorkflowByInstanceId(String instanceId); | ||
| 30 | + | ||
| 31 | + /** | ||
| 32 | + * 查询请假列表根据部门编号和Workflow | ||
| 33 | + * | ||
| 34 | + * @param Workflow 请假 | ||
| 35 | + * @return 请假集合 | ||
| 36 | + */ | ||
| 37 | + public List<Workflow> selectWorkflowListByWorkflowAndDeptId(@Param("Workflow")Workflow Workflow,@Param("deptId") Long deptId); | ||
| 38 | + /** | ||
| 39 | + * 查询请假列表 | ||
| 40 | + * | ||
| 41 | + * @param Workflow 请假 | ||
| 42 | + * @return 请假集合 | ||
| 43 | + */ | ||
| 44 | + public List<Workflow> selectWorkflowList(Workflow Workflow); | ||
| 45 | + | ||
| 46 | + | ||
| 47 | + /** | ||
| 48 | + * 新增请假 | ||
| 49 | + * | ||
| 50 | + * @param Workflow 请假 | ||
| 51 | + * @return 结果 | ||
| 52 | + */ | ||
| 53 | + public int insertWorkflow(Workflow Workflow); | ||
| 54 | + | ||
| 55 | + /** | ||
| 56 | + * 修改请假 | ||
| 57 | + * | ||
| 58 | + * @param Workflow 请假 | ||
| 59 | + * @return 结果 | ||
| 60 | + */ | ||
| 61 | + public int updateWorkflow(Workflow Workflow); | ||
| 62 | + | ||
| 63 | + /** | ||
| 64 | + * 删除请假 | ||
| 65 | + * | ||
| 66 | + * @param id 请假ID | ||
| 67 | + * @return 结果 | ||
| 68 | + */ | ||
| 69 | + public int deleteWorkflowById(String id); | ||
| 70 | + | ||
| 71 | + /** | ||
| 72 | + * 批量删除请假 | ||
| 73 | + * | ||
| 74 | + * @param ids 需要删除的数据ID | ||
| 75 | + * @return 结果 | ||
| 76 | + */ | ||
| 77 | + public int deleteWorkflowByIds(String[] ids); | ||
| 78 | +} |
trash-workFlow/src/main/java/com/trash/leave/service/IWorkflowLeaveService.java
| 1 | package com.trash.leave.service; | 1 | package com.trash.leave.service; |
| 2 | 2 | ||
| 3 | import java.util.List; | 3 | import java.util.List; |
| 4 | +import java.util.Map; | ||
| 4 | 5 | ||
| 5 | import com.trash.leave.domain.WorkflowLeave; | 6 | import com.trash.leave.domain.WorkflowLeave; |
| 6 | import com.trash.activiti.domain.dto.HistoryDataDTO; | 7 | import com.trash.activiti.domain.dto.HistoryDataDTO; |
| @@ -71,4 +72,5 @@ public interface IWorkflowLeaveService | @@ -71,4 +72,5 @@ public interface IWorkflowLeaveService | ||
| 71 | 72 | ||
| 72 | 73 | ||
| 73 | public WorkflowLeave selectWorkflowLeaveByInstanceId(String instanceId); | 74 | public WorkflowLeave selectWorkflowLeaveByInstanceId(String instanceId); |
| 75 | + | ||
| 74 | } | 76 | } |
trash-workFlow/src/main/java/com/trash/leave/service/IWorkflowService.java
0 → 100644
| 1 | +package com.trash.leave.service; | ||
| 2 | + | ||
| 3 | +import java.util.List; | ||
| 4 | +import java.util.Map; | ||
| 5 | + | ||
| 6 | +import com.trash.leave.domain.Workflow; | ||
| 7 | +import com.trash.activiti.domain.dto.HistoryDataDTO; | ||
| 8 | + | ||
| 9 | +/** | ||
| 10 | + * 请假Service接口 | ||
| 11 | + * | ||
| 12 | + * @author danny | ||
| 13 | + * @date 2020-10-28 | ||
| 14 | + */ | ||
| 15 | +public interface IWorkflowService | ||
| 16 | +{ | ||
| 17 | + public int createWorkFlow(Map<String,Object> map); | ||
| 18 | + /** | ||
| 19 | + * 查询请假 | ||
| 20 | + * | ||
| 21 | + * @param id 请假ID | ||
| 22 | + * @return 请假 | ||
| 23 | + */ | ||
| 24 | + public Workflow selectWorkflowById(String id); | ||
| 25 | + | ||
| 26 | + /** | ||
| 27 | + * 查询请假列表 | ||
| 28 | + * | ||
| 29 | + * @param Workflow 请假 | ||
| 30 | + * @return 请假集合 | ||
| 31 | + */ | ||
| 32 | + public List<Workflow> selectWorkflowList(Workflow Workflow); | ||
| 33 | + | ||
| 34 | + /** | ||
| 35 | + * 查询请假列表 | ||
| 36 | + * | ||
| 37 | + * @param Workflow 请假 | ||
| 38 | + * @return 请假集合 | ||
| 39 | + */ | ||
| 40 | + public List<Workflow> selectWorkflowAndTaskNameList(Workflow Workflow); | ||
| 41 | + | ||
| 42 | + /** | ||
| 43 | + * 新增请假 | ||
| 44 | + * | ||
| 45 | + * @param Workflow 请假 | ||
| 46 | + * @return 结果 | ||
| 47 | + */ | ||
| 48 | + public int insertWorkflow(Workflow Workflow); | ||
| 49 | + | ||
| 50 | + /** | ||
| 51 | + * 修改请假 | ||
| 52 | + * | ||
| 53 | + * @param Workflow 请假 | ||
| 54 | + * @return 结果 | ||
| 55 | + */ | ||
| 56 | + public int updateWorkflow(Workflow Workflow); | ||
| 57 | + | ||
| 58 | + /** | ||
| 59 | + * 批量删除请假 | ||
| 60 | + * | ||
| 61 | + * @param ids 需要删除的请假ID | ||
| 62 | + * @return 结果 | ||
| 63 | + */ | ||
| 64 | + public int deleteWorkflowByIds(String[] ids); | ||
| 65 | + | ||
| 66 | + /** | ||
| 67 | + * 删除请假信息 | ||
| 68 | + * | ||
| 69 | + * @param id 请假ID | ||
| 70 | + * @return 结果 | ||
| 71 | + */ | ||
| 72 | + public int deleteWorkflowById(String id); | ||
| 73 | + | ||
| 74 | + | ||
| 75 | + public Workflow selectWorkflowByInstanceId(String instanceId); | ||
| 76 | +} |
trash-workFlow/src/main/java/com/trash/leave/service/impl/WorkflowLeaveServiceImpl.java
| @@ -95,13 +95,11 @@ public class WorkflowLeaveServiceImpl implements IWorkflowLeaveService { | @@ -95,13 +95,11 @@ public class WorkflowLeaveServiceImpl implements IWorkflowLeaveService { | ||
| 95 | String id = UUID.randomUUID().toString(); | 95 | String id = UUID.randomUUID().toString(); |
| 96 | workflowLeave.setId(id); | 96 | workflowLeave.setId(id); |
| 97 | workflowLeave.setCreateTime(DateUtils.getNowDate()); | 97 | workflowLeave.setCreateTime(DateUtils.getNowDate()); |
| 98 | - String join = StringUtils.join(sysUserService.selectUserNameByPostCodeAndDeptId("se", SecurityUtils.getLoginUser().getUser().getDeptId()), ","); | ||
| 99 | ProcessInstance processInstance = processRuntime.start(ProcessPayloadBuilder | 98 | ProcessInstance processInstance = processRuntime.start(ProcessPayloadBuilder |
| 100 | .start() | 99 | .start() |
| 101 | - .withProcessDefinitionKey("leave") | 100 | + .withProcessDefinitionKey("workflow_earthsites") |
| 102 | .withName(workflowLeave.getTitle()) | 101 | .withName(workflowLeave.getTitle()) |
| 103 | .withBusinessKey(id) | 102 | .withBusinessKey(id) |
| 104 | - .withVariable("deptLeader",join) | ||
| 105 | .build()); | 103 | .build()); |
| 106 | workflowLeave.setInstanceId(processInstance.getId()); | 104 | workflowLeave.setInstanceId(processInstance.getId()); |
| 107 | workflowLeave.setState("0"); | 105 | workflowLeave.setState("0"); |
trash-workFlow/src/main/java/com/trash/leave/service/impl/WorkflowServiceImpl.java
0 → 100644
| 1 | +package com.trash.leave.service.impl; | ||
| 2 | + | ||
| 3 | +import java.util.List; | ||
| 4 | +import java.util.Map; | ||
| 5 | +import java.util.stream.Collectors; | ||
| 6 | + | ||
| 7 | +import org.activiti.api.process.model.ProcessInstance; | ||
| 8 | +import org.activiti.api.process.model.builders.ProcessPayloadBuilder; | ||
| 9 | +import org.activiti.api.process.runtime.ProcessRuntime; | ||
| 10 | +import org.activiti.engine.TaskService; | ||
| 11 | +import org.activiti.engine.task.Task; | ||
| 12 | +import org.springframework.beans.factory.annotation.Autowired; | ||
| 13 | +import org.springframework.stereotype.Service; | ||
| 14 | + | ||
| 15 | +import com.trash.common.utils.DateUtils; | ||
| 16 | +import com.trash.common.utils.SecurityUtils; | ||
| 17 | +import com.trash.common.utils.StringUtils; | ||
| 18 | +import com.trash.common.utils.uuid.UUID; | ||
| 19 | +import com.trash.leave.domain.Workflow; | ||
| 20 | +import com.trash.leave.mapper.WorkflowMapper; | ||
| 21 | +import com.trash.leave.service.IWorkflowService; | ||
| 22 | +import com.trash.system.service.ISysUserService; | ||
| 23 | + | ||
| 24 | +/** | ||
| 25 | + * 请假Service业务层处理 | ||
| 26 | + * | ||
| 27 | + * @author danny | ||
| 28 | + * @date 2020-10-28 | ||
| 29 | + */ | ||
| 30 | +@Service | ||
| 31 | +public class WorkflowServiceImpl implements IWorkflowService { | ||
| 32 | + | ||
| 33 | + @Autowired | ||
| 34 | + private WorkflowMapper workflowMapper; | ||
| 35 | + @Autowired | ||
| 36 | + private ProcessRuntime processRuntime; | ||
| 37 | + @Autowired | ||
| 38 | + private ISysUserService sysUserService; | ||
| 39 | + @Autowired | ||
| 40 | + private TaskService taskService; | ||
| 41 | + | ||
| 42 | + String siteType[] = {"消纳场","建筑垃圾资源化处置场","盾构土环保处置场","盾构土应急消纳场","回填场"}; | ||
| 43 | + | ||
| 44 | + @Override | ||
| 45 | + public int createWorkFlow(Map<String,Object> data) { | ||
| 46 | + | ||
| 47 | + String flowType = data.get("type").toString(); | ||
| 48 | + Map map = (Map) data.get("data"); | ||
| 49 | + | ||
| 50 | + String businessKey = flowType + ":" + map.get("id"); //流程对应事务key | ||
| 51 | + String title = siteType[Integer.parseInt(map.get("type").toString())] + map.get("certificateNo"); | ||
| 52 | + | ||
| 53 | + String applyOpinion = map.get("applyOpinion").toString(); | ||
| 54 | + | ||
| 55 | + String startTime = ((Map)map.get("site")).get("effectiveFrom").toString(); | ||
| 56 | + String endTime = ((Map)map.get("site")).get("effectiveEnd").toString(); | ||
| 57 | + | ||
| 58 | + ProcessInstance processInstance = processRuntime.start(ProcessPayloadBuilder | ||
| 59 | + .start() | ||
| 60 | + .withProcessDefinitionKey(flowType) | ||
| 61 | + .withName(title) | ||
| 62 | + .withBusinessKey(businessKey) | ||
| 63 | + .build()); | ||
| 64 | + | ||
| 65 | + Workflow workflow = new Workflow(); | ||
| 66 | + workflow.setId(businessKey); | ||
| 67 | + workflow.setTitle(title); | ||
| 68 | + workflow.setReason(applyOpinion); | ||
| 69 | + workflow.setStartTime(startTime); | ||
| 70 | + workflow.setEndTime(endTime); | ||
| 71 | + workflow.setType(siteType[Integer.parseInt(map.get("type").toString())]); | ||
| 72 | + workflow.setInstanceId(processInstance.getId()); | ||
| 73 | + workflow.setState("0"); | ||
| 74 | + | ||
| 75 | + | ||
| 76 | + return workflowMapper.insertWorkflow(workflow); | ||
| 77 | + } | ||
| 78 | + | ||
| 79 | + | ||
| 80 | + /** | ||
| 81 | + * 查询请假 | ||
| 82 | + * | ||
| 83 | + * @param id 请假ID | ||
| 84 | + * @return 请假 | ||
| 85 | + */ | ||
| 86 | + @Override | ||
| 87 | + public Workflow selectWorkflowById(String id) { | ||
| 88 | + return workflowMapper.selectWorkflowById(id); | ||
| 89 | + } | ||
| 90 | + | ||
| 91 | + /** | ||
| 92 | + * 查询请假列表 | ||
| 93 | + * | ||
| 94 | + * @param Workflow 请假 | ||
| 95 | + * @return 请假 | ||
| 96 | + */ | ||
| 97 | + @Override | ||
| 98 | + public List<Workflow> selectWorkflowList(Workflow Workflow) { | ||
| 99 | + return workflowMapper.selectWorkflowListByWorkflowAndDeptId(Workflow,SecurityUtils.getLoginUser().getUser().getDeptId()); | ||
| 100 | + } | ||
| 101 | + /** | ||
| 102 | + * 查询请假列表带任务状态 | ||
| 103 | + * | ||
| 104 | + * @param Workflow 请假 | ||
| 105 | + * @return 请假 | ||
| 106 | + */ | ||
| 107 | + @Override | ||
| 108 | + public List<Workflow> selectWorkflowAndTaskNameList(Workflow Workflow) { | ||
| 109 | + List<Workflow> Workflows = workflowMapper.selectWorkflowList(Workflow); | ||
| 110 | + List<String> collect = Workflows.parallelStream().map(wl -> wl.getInstanceId()).collect(Collectors.toList()); | ||
| 111 | + if(collect!=null&&!collect.isEmpty()) { | ||
| 112 | + List<Task> tasks = taskService.createTaskQuery().processInstanceIdIn(collect).list(); | ||
| 113 | + Workflows.forEach( | ||
| 114 | + wl->{ | ||
| 115 | + Task task = tasks.parallelStream().filter(t -> t.getProcessInstanceId().equals(wl.getInstanceId())).findAny().orElse(null); | ||
| 116 | + if (task != null) { | ||
| 117 | + wl.setTaskName(task.getName()); | ||
| 118 | + } | ||
| 119 | + } | ||
| 120 | + ); | ||
| 121 | + } | ||
| 122 | + return Workflows; | ||
| 123 | + } | ||
| 124 | + | ||
| 125 | + /** | ||
| 126 | + * 新增请假 | ||
| 127 | + * | ||
| 128 | + * @param Workflow 请假 | ||
| 129 | + * @return 结果 | ||
| 130 | + */ | ||
| 131 | + @Override | ||
| 132 | + public int insertWorkflow(Workflow Workflow) { | ||
| 133 | + String id = UUID.randomUUID().toString(); | ||
| 134 | + Workflow.setId(id); | ||
| 135 | + Workflow.setCreateTime(DateUtils.getNowDate()); | ||
| 136 | + String join = StringUtils.join(sysUserService.selectUserNameByPostCodeAndDeptId("se", SecurityUtils.getLoginUser().getUser().getDeptId()), ","); | ||
| 137 | + ProcessInstance processInstance = processRuntime.start(ProcessPayloadBuilder | ||
| 138 | + .start() | ||
| 139 | + .withProcessDefinitionKey("leave") | ||
| 140 | + .withName(Workflow.getTitle()) | ||
| 141 | + .withBusinessKey(id) | ||
| 142 | + .withVariable("deptLeader",join) | ||
| 143 | + .build()); | ||
| 144 | + Workflow.setInstanceId(processInstance.getId()); | ||
| 145 | + Workflow.setState("0"); | ||
| 146 | + Workflow.setCreateName(SecurityUtils.getNickName()); | ||
| 147 | + Workflow.setCreateBy(SecurityUtils.getUsername()); | ||
| 148 | + Workflow.setCreateTime(DateUtils.getNowDate()); | ||
| 149 | + return workflowMapper.insertWorkflow(Workflow); | ||
| 150 | + } | ||
| 151 | + | ||
| 152 | + /** | ||
| 153 | + * 修改请假 | ||
| 154 | + * | ||
| 155 | + * @param Workflow 请假 | ||
| 156 | + * @return 结果 | ||
| 157 | + */ | ||
| 158 | + @Override | ||
| 159 | + public int updateWorkflow(Workflow Workflow) { | ||
| 160 | + Workflow.setUpdateTime(DateUtils.getNowDate()); | ||
| 161 | + return workflowMapper.updateWorkflow(Workflow); | ||
| 162 | + } | ||
| 163 | + | ||
| 164 | + /** | ||
| 165 | + * 批量删除请假 | ||
| 166 | + * | ||
| 167 | + * @param ids 需要删除的请假ID | ||
| 168 | + * @return 结果 | ||
| 169 | + */ | ||
| 170 | + @Override | ||
| 171 | + public int deleteWorkflowByIds(String[] ids) { | ||
| 172 | + return workflowMapper.deleteWorkflowByIds(ids); | ||
| 173 | + } | ||
| 174 | + | ||
| 175 | + /** | ||
| 176 | + * 删除请假信息 | ||
| 177 | + * | ||
| 178 | + * @param id 请假ID | ||
| 179 | + * @return 结果 | ||
| 180 | + */ | ||
| 181 | + @Override | ||
| 182 | + public int deleteWorkflowById(String id) { | ||
| 183 | + return workflowMapper.deleteWorkflowById(id); | ||
| 184 | + } | ||
| 185 | + | ||
| 186 | + @Override | ||
| 187 | + public Workflow selectWorkflowByInstanceId(String instanceId) { | ||
| 188 | + | ||
| 189 | + return workflowMapper.selectWorkflowByInstanceId(instanceId); | ||
| 190 | + } | ||
| 191 | +} |
trash-workFlow/src/main/resources/mapper/leave/WorkflowLeaveMapper.xml
| @@ -9,8 +9,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | @@ -9,8 +9,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | ||
| 9 | <result property="type" column="type" /> | 9 | <result property="type" column="type" /> |
| 10 | <result property="title" column="title" /> | 10 | <result property="title" column="title" /> |
| 11 | <result property="reason" column="reason" /> | 11 | <result property="reason" column="reason" /> |
| 12 | - <result property="leaveStartTime" column="leave_start_time" /> | ||
| 13 | - <result property="leaveEndTime" column="leave_end_time" /> | 12 | + <result property="startTime" column="start_time" /> |
| 13 | + <result property="endTime" column="end_time" /> | ||
| 14 | <result property="instanceId" column="instance_id" /> | 14 | <result property="instanceId" column="instance_id" /> |
| 15 | <result property="state" column="state" /> | 15 | <result property="state" column="state" /> |
| 16 | <result property="createName" column="create_name" /> | 16 | <result property="createName" column="create_name" /> |
| @@ -20,7 +20,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | @@ -20,7 +20,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | ||
| 20 | </resultMap> | 20 | </resultMap> |
| 21 | 21 | ||
| 22 | <sql id="selectWorkflowLeaveVo"> | 22 | <sql id="selectWorkflowLeaveVo"> |
| 23 | - select id, type, title, reason, leave_start_time, leave_end_time, instance_id, state, create_name,create_by, create_time, update_time from workflow_leave | 23 | + select id, type, title, reason, start_time, end_time, instance_id, state, create_name,create_by, create_time, update_time from workflow_leave |
| 24 | </sql> | 24 | </sql> |
| 25 | 25 | ||
| 26 | <select id="selectWorkflowLeaveListByWorkflowLeaveAndDeptId" resultMap="WorkflowLeaveResult"> | 26 | <select id="selectWorkflowLeaveListByWorkflowLeaveAndDeptId" resultMap="WorkflowLeaveResult"> |
| @@ -29,8 +29,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | @@ -29,8 +29,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | ||
| 29 | <if test="workflowLeave.type != null and workflowLeave.type != ''"> and type = #{workflowLeave.type}</if> | 29 | <if test="workflowLeave.type != null and workflowLeave.type != ''"> and type = #{workflowLeave.type}</if> |
| 30 | <if test="workflowLeave.title != null and workflowLeave.title != ''"> and title = #{workflowLeave.title}</if> | 30 | <if test="workflowLeave.title != null and workflowLeave.title != ''"> and title = #{workflowLeave.title}</if> |
| 31 | <if test="workflowLeave.reason != null and workflowLeave.reason != ''"> and reason = #{workflowLeave.reason}</if> | 31 | <if test="workflowLeave.reason != null and workflowLeave.reason != ''"> and reason = #{workflowLeave.reason}</if> |
| 32 | - <if test="workflowLeave.leaveStartTime != null "> and leave_start_time = #{workflowLeave.leaveStartTime}</if> | ||
| 33 | - <if test="workflowLeave.leaveEndTime != null "> and leave_end_time = #{workflowLeave.leaveEndTime}</if> | 32 | + <if test="workflowLeave.startTime != null "> and start_time = #{workflowLeave.startTime}</if> |
| 33 | + <if test="workflowLeave.endTime != null "> and end_time = #{workflowLeave.endTime}</if> | ||
| 34 | <if test="workflowLeave.instanceId != null and workflowLeave.instanceId != ''"> and instance_id = #{workflowLeave.instanceId}</if> | 34 | <if test="workflowLeave.instanceId != null and workflowLeave.instanceId != ''"> and instance_id = #{workflowLeave.instanceId}</if> |
| 35 | <if test="workflowLeave.state != null and workflowLeave.state != ''"> and state = #{workflowLeave.state}</if> | 35 | <if test="workflowLeave.state != null and workflowLeave.state != ''"> and state = #{workflowLeave.state}</if> |
| 36 | <if test="workflowLeave.createName != null and workflowLeave.createName != ''"> and create_name = #{workflowLeave.createName}</if> | 36 | <if test="workflowLeave.createName != null and workflowLeave.createName != ''"> and create_name = #{workflowLeave.createName}</if> |
| @@ -44,8 +44,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | @@ -44,8 +44,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | ||
| 44 | <if test="type != null and type != ''"> and type = #{type}</if> | 44 | <if test="type != null and type != ''"> and type = #{type}</if> |
| 45 | <if test="title != null and title != ''"> and title = #{title}</if> | 45 | <if test="title != null and title != ''"> and title = #{title}</if> |
| 46 | <if test="reason != null and reason != ''"> and reason = #{reason}</if> | 46 | <if test="reason != null and reason != ''"> and reason = #{reason}</if> |
| 47 | - <if test="leaveStartTime != null "> and leave_start_time = #{leaveStartTime}</if> | ||
| 48 | - <if test="leaveEndTime != null "> and leave_end_time = #{leaveEndTime}</if> | 47 | + <if test="startTime != null "> and start_time = #{startTime}</if> |
| 48 | + <if test="endTime != null "> and end_time = #{endTime}</if> | ||
| 49 | <if test="instanceId != null and instanceId != ''"> and instance_id = #{instanceId}</if> | 49 | <if test="instanceId != null and instanceId != ''"> and instance_id = #{instanceId}</if> |
| 50 | <if test="state != null and state != ''"> and state = #{state}</if> | 50 | <if test="state != null and state != ''"> and state = #{state}</if> |
| 51 | <if test="createName != null and createName != ''"> and create_name = #{createName}</if> | 51 | <if test="createName != null and createName != ''"> and create_name = #{createName}</if> |
| @@ -70,8 +70,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | @@ -70,8 +70,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | ||
| 70 | <if test="type != null">type,</if> | 70 | <if test="type != null">type,</if> |
| 71 | <if test="title != null">title,</if> | 71 | <if test="title != null">title,</if> |
| 72 | <if test="reason != null">reason,</if> | 72 | <if test="reason != null">reason,</if> |
| 73 | - <if test="leaveStartTime != null">leave_start_time,</if> | ||
| 74 | - <if test="leaveEndTime != null">leave_end_time,</if> | 73 | + <if test="startTime != null">start_time,</if> |
| 74 | + <if test="endTime != null">end_time,</if> | ||
| 75 | <if test="instanceId != null">instance_id,</if> | 75 | <if test="instanceId != null">instance_id,</if> |
| 76 | <if test="state != null">state,</if> | 76 | <if test="state != null">state,</if> |
| 77 | <if test="createName != null">create_name,</if> | 77 | <if test="createName != null">create_name,</if> |
| @@ -84,8 +84,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | @@ -84,8 +84,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | ||
| 84 | <if test="type != null">#{type},</if> | 84 | <if test="type != null">#{type},</if> |
| 85 | <if test="title != null">#{title},</if> | 85 | <if test="title != null">#{title},</if> |
| 86 | <if test="reason != null">#{reason},</if> | 86 | <if test="reason != null">#{reason},</if> |
| 87 | - <if test="leaveStartTime != null">#{leaveStartTime},</if> | ||
| 88 | - <if test="leaveEndTime != null">#{leaveEndTime},</if> | 87 | + <if test="startTime != null">#{startTime},</if> |
| 88 | + <if test="endTime != null">#{endTime},</if> | ||
| 89 | <if test="instanceId != null">#{instanceId},</if> | 89 | <if test="instanceId != null">#{instanceId},</if> |
| 90 | <if test="state != null">#{state},</if> | 90 | <if test="state != null">#{state},</if> |
| 91 | <if test="createName != null">#{createName},</if> | 91 | <if test="createName != null">#{createName},</if> |
| @@ -101,8 +101,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | @@ -101,8 +101,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | ||
| 101 | <if test="type != null">type = #{type},</if> | 101 | <if test="type != null">type = #{type},</if> |
| 102 | <if test="title != null">title = #{title},</if> | 102 | <if test="title != null">title = #{title},</if> |
| 103 | <if test="reason != null">reason = #{reason},</if> | 103 | <if test="reason != null">reason = #{reason},</if> |
| 104 | - <if test="leaveStartTime != null">leave_start_time = #{leaveStartTime},</if> | ||
| 105 | - <if test="leaveEndTime != null">leave_end_time = #{leaveEndTime},</if> | 104 | + <if test="startTime != null">start_time = #{startTime},</if> |
| 105 | + <if test="endTime != null">end_time = #{endTime},</if> | ||
| 106 | <if test="instanceId != null">instance_id = #{instanceId},</if> | 106 | <if test="instanceId != null">instance_id = #{instanceId},</if> |
| 107 | <if test="state != null">state = #{state},</if> | 107 | <if test="state != null">state = #{state},</if> |
| 108 | <if test="createName != null">create_name = #{createName},</if> | 108 | <if test="createName != null">create_name = #{createName},</if> |
trash-workFlow/src/main/resources/mapper/leave/WorkflowMapper.xml
0 → 100644
| 1 | +<?xml version="1.0" encoding="UTF-8" ?> | ||
| 2 | +<!DOCTYPE mapper | ||
| 3 | +PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | ||
| 4 | +"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||
| 5 | +<mapper namespace="com.trash.leave.mapper.WorkflowMapper"> | ||
| 6 | + | ||
| 7 | + <resultMap type="Workflow" id="WorkflowResult"> | ||
| 8 | + <result property="id" column="id" /> | ||
| 9 | + <result property="type" column="type" /> | ||
| 10 | + <result property="title" column="title" /> | ||
| 11 | + <result property="reason" column="reason" /> | ||
| 12 | + <result property="startTime" column="start_time" /> | ||
| 13 | + <result property="endTime" column="end_time" /> | ||
| 14 | + <result property="instanceId" column="instance_id" /> | ||
| 15 | + <result property="state" column="state" /> | ||
| 16 | + <result property="createName" column="create_name" /> | ||
| 17 | + <result property="createBy" column="create_by" /> | ||
| 18 | + <result property="createTime" column="create_time" /> | ||
| 19 | + <result property="updateTime" column="update_time" /> | ||
| 20 | + </resultMap> | ||
| 21 | + | ||
| 22 | + <sql id="selectWorkflowVo"> | ||
| 23 | + select id, type, title, reason, start_time, end_time, instance_id, state, create_name,create_by, create_time, update_time from workflow | ||
| 24 | + </sql> | ||
| 25 | + | ||
| 26 | + <select id="selectWorkflowListByWorkflowAndDeptId" resultMap="WorkflowResult"> | ||
| 27 | + <include refid="selectWorkflowVo"/> | ||
| 28 | + where create_by in (SELECT user_name FROM `sys_user` where dept_id in (SELECT dept_id FROM sys_dept WHERE dept_id = #{deptId} or find_in_set( #{deptId} , ancestors ) )) | ||
| 29 | + <if test="Workflow.type != null and Workflow.type != ''"> and type = #{Workflow.type}</if> | ||
| 30 | + <if test="Workflow.title != null and Workflow.title != ''"> and title = #{Workflow.title}</if> | ||
| 31 | + <if test="Workflow.reason != null and Workflow.reason != ''"> and reason = #{Workflow.reason}</if> | ||
| 32 | + <if test="Workflow.startTime != null "> and start_time = #{Workflow.startTime}</if> | ||
| 33 | + <if test="Workflow.endTime != null "> and end_time = #{Workflow.endTime}</if> | ||
| 34 | + <if test="Workflow.instanceId != null and Workflow.instanceId != ''"> and instance_id = #{Workflow.instanceId}</if> | ||
| 35 | + <if test="Workflow.state != null and Workflow.state != ''"> and state = #{Workflow.state}</if> | ||
| 36 | + <if test="Workflow.createName != null and Workflow.createName != ''"> and create_name = #{Workflow.createName}</if> | ||
| 37 | + <if test="Workflow.createBy != null and Workflow.createBy != ''"> and create_by = #{Workflow.createBy}</if> | ||
| 38 | + order by create_time desc | ||
| 39 | + </select> | ||
| 40 | + | ||
| 41 | + <select id="selectWorkflowList" parameterType="Workflow" resultMap="WorkflowResult"> | ||
| 42 | + <include refid="selectWorkflowVo"/> | ||
| 43 | + <where> | ||
| 44 | + <if test="type != null and type != ''"> and type = #{type}</if> | ||
| 45 | + <if test="title != null and title != ''"> and title = #{title}</if> | ||
| 46 | + <if test="reason != null and reason != ''"> and reason = #{reason}</if> | ||
| 47 | + <if test="startTime != null "> and start_time = #{startTime}</if> | ||
| 48 | + <if test="endTime != null "> and end_time = #{endTime}</if> | ||
| 49 | + <if test="instanceId != null and instanceId != ''"> and instance_id = #{instanceId}</if> | ||
| 50 | + <if test="state != null and state != ''"> and state = #{state}</if> | ||
| 51 | + <if test="createName != null and createName != ''"> and create_name = #{createName}</if> | ||
| 52 | + <if test="createBy != null and createBy != ''"> and create_by = #{createBy}</if> | ||
| 53 | + </where> | ||
| 54 | + order by create_time desc | ||
| 55 | + </select> | ||
| 56 | + | ||
| 57 | + <select id="selectWorkflowById" parameterType="String" resultMap="WorkflowResult"> | ||
| 58 | + <include refid="selectWorkflowVo"/> | ||
| 59 | + where id = #{id} | ||
| 60 | + </select> | ||
| 61 | + <select id="selectWorkflowByInstanceId" parameterType="String" resultMap="WorkflowResult"> | ||
| 62 | + <include refid="selectWorkflowVo"/> | ||
| 63 | + where instance_id = #{instanceId} | ||
| 64 | + </select> | ||
| 65 | + | ||
| 66 | + <insert id="insertWorkflow" parameterType="Workflow"> | ||
| 67 | + insert into workflow | ||
| 68 | + <trim prefix="(" suffix=")" suffixOverrides=","> | ||
| 69 | + <if test="id != null">id,</if> | ||
| 70 | + <if test="type != null">type,</if> | ||
| 71 | + <if test="title != null">title,</if> | ||
| 72 | + <if test="reason != null">reason,</if> | ||
| 73 | + <if test="startTime != null">start_time,</if> | ||
| 74 | + <if test="endTime != null">end_time,</if> | ||
| 75 | + <if test="instanceId != null">instance_id,</if> | ||
| 76 | + <if test="state != null">state,</if> | ||
| 77 | + <if test="createName != null">create_name,</if> | ||
| 78 | + <if test="createBy != null">create_by,</if> | ||
| 79 | + <if test="createTime != null">create_time,</if> | ||
| 80 | + <if test="updateTime != null">update_time,</if> | ||
| 81 | + </trim> | ||
| 82 | + <trim prefix="values (" suffix=")" suffixOverrides=","> | ||
| 83 | + <if test="id != null">#{id},</if> | ||
| 84 | + <if test="type != null">#{type},</if> | ||
| 85 | + <if test="title != null">#{title},</if> | ||
| 86 | + <if test="reason != null">#{reason},</if> | ||
| 87 | + <if test="startTime != null">#{startTime},</if> | ||
| 88 | + <if test="endTime != null">#{endTime},</if> | ||
| 89 | + <if test="instanceId != null">#{instanceId},</if> | ||
| 90 | + <if test="state != null">#{state},</if> | ||
| 91 | + <if test="createName != null">#{createName},</if> | ||
| 92 | + <if test="createBy != null">#{createBy},</if> | ||
| 93 | + <if test="createTime != null">#{createTime},</if> | ||
| 94 | + <if test="updateTime != null">#{updateTime},</if> | ||
| 95 | + </trim> | ||
| 96 | + </insert> | ||
| 97 | + | ||
| 98 | + <update id="updateWorkflow" parameterType="Workflow"> | ||
| 99 | + update workflow | ||
| 100 | + <trim prefix="SET" suffixOverrides=","> | ||
| 101 | + <if test="type != null">type = #{type},</if> | ||
| 102 | + <if test="title != null">title = #{title},</if> | ||
| 103 | + <if test="reason != null">reason = #{reason},</if> | ||
| 104 | + <if test="startTime != null">start_time = #{startTime},</if> | ||
| 105 | + <if test="endTime != null">end_time = #{endTime},</if> | ||
| 106 | + <if test="instanceId != null">instance_id = #{instanceId},</if> | ||
| 107 | + <if test="state != null">state = #{state},</if> | ||
| 108 | + <if test="createName != null">create_name = #{createName},</if> | ||
| 109 | + <if test="createBy != null">create_by = #{createBy},</if> | ||
| 110 | + <if test="createTime != null">create_time = #{createTime},</if> | ||
| 111 | + <if test="updateTime != null">update_time = #{updateTime},</if> | ||
| 112 | + </trim> | ||
| 113 | + where id = #{id} | ||
| 114 | + </update> | ||
| 115 | + | ||
| 116 | + <delete id="deleteWorkflowById" parameterType="String"> | ||
| 117 | + delete from workflow where id = #{id} | ||
| 118 | + </delete> | ||
| 119 | + | ||
| 120 | + <delete id="deleteWorkflowByIds" parameterType="String"> | ||
| 121 | + delete from workflow where id in | ||
| 122 | + <foreach item="id" collection="array" open="(" separator="," close=")"> | ||
| 123 | + #{id} | ||
| 124 | + </foreach> | ||
| 125 | + </delete> | ||
| 126 | + | ||
| 127 | +</mapper> | ||
| 0 | \ No newline at end of file | 128 | \ No newline at end of file |