Commit ee6e03cf by chenweisong

更新

parent d7ac0dd2
...@@ -33,7 +33,7 @@ public class Swagger2Config { ...@@ -33,7 +33,7 @@ public class Swagger2Config {
ApiInfo apiInfo() { ApiInfo apiInfo() {
return new ApiInfoBuilder() return new ApiInfoBuilder()
.title("补录系统") .title("补录系统")
.description("补录系统api") .description("补录系统接口列表")
.termsOfServiceUrl("") .termsOfServiceUrl("")
.version("1.0.0") .version("1.0.0")
.contact(new Contact("", "", "")) .contact(new Contact("", "", ""))
...@@ -55,7 +55,7 @@ public class Swagger2Config { ...@@ -55,7 +55,7 @@ public class Swagger2Config {
return new Docket(DocumentationType.SWAGGER_2) return new Docket(DocumentationType.SWAGGER_2)
.host(this.host) .host(this.host)
.select() .select()
.apis(RequestHandlerSelectors.basePackage("com.keymobile.rest.ctrl")) .apis(RequestHandlerSelectors.basePackage("com.keymobile.rest.controller"))
.paths(PathSelectors.any()) .paths(PathSelectors.any())
.build() .build()
.apiInfo(this.apiInfo()); .apiInfo(this.apiInfo());
......
package com.keymobile.rest.common.constant;
public interface AssignmentConstant {
int KIND_RECORD = 1;
int KIND_AUDIT = 2;
int TYPE_AUTO = 2;
int TYPE_MANUAL = 1;
int STATUS_RELEASED = 2;
int STATUS_UNRELEASED = 1;
int STATUS_COMPLETED = 3;
int AUDIT_NEED = 1;
int AUDIT_NO_NEED = 2;
}
package com.keymobile.rest.common.constant;
public interface TemplateConstant {
}
package com.keymobile.rest.controller;
import com.google.common.collect.ImmutableMap;
import com.keymobile.rest.common.bean.ApiResponse;
import com.keymobile.rest.model.*;
import com.keymobile.rest.service.ExcelService;
import com.keymobile.rest.service.JobInfoService;
import com.keymobile.rest.service.UserService;
import com.keymobile.rest.vo.RecordDataForm;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.activiti.engine.*;
import org.activiti.engine.task.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Api(value = "模板控制器")
@RestController
@RequestMapping(path = "/api/excel")
public class ExcelController {
@Autowired
private RecordDataService recordDataService;
@Autowired
private ExcelService excelService;
@Autowired
private JobInfoService jobInfoService;
@Autowired
private UserService userService;
@Autowired
private TaskService taskService;
@ApiOperation(value = "填写补录数据")
@PostMapping(value = "/excel/saveData")
public ApiResponse saveRecordData(@RequestBody RecordDataForm form) {
User curUser = userService.getNormalUser();
Template template = excelService.get(form.getExcelId());
ProcessInfo processInfo = jobInfoService.findByExcelIdAndUserId(form.getExcelId(), curUser.getId());
DataInfo dataInfo;
if (form.getDataId() != null) {
dataInfo = recordDataService.update(form);
} else {
form.setProcessInfo(processInfo);
dataInfo = recordDataService.save(form);
}
Assignment assignment = template.getAssignment();
String processId = assignment.getProcessId();
// 发起人把流程发送到下一个人
List<Task> taskList = taskService.createTaskQuery().processInstanceId(processId)
.taskAssignee(curUser.getUsername()).list();
Task task = taskList.get(0);
User judge = userService.getAudit();
taskService.complete(task.getId(), ImmutableMap.of("judgeId", judge.getUsername()));
return ApiResponse.ok(dataInfo.getId());
}
@ApiOperation(value = "传excelId过来,获取用户填写的数据")
@PostMapping(value = "/excel/getData")
public ApiResponse getRecordData(@RequestParam long excelId) {
User curUser = userService.getNormalUser();
ProcessInfo processInfo = jobInfoService.findByExcelIdAndUserId(excelId, curUser.getId());
List<DataInfo> dataInfoList = processInfo.getDataInfoList();
if (dataInfoList.size() > 0) {
return ApiResponse.ok(dataInfoList.get(0));
} else {
return ApiResponse.ok();
}
}
}
package com.keymobile.rest.ctrl; package com.keymobile.rest.controller;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.keymobile.activiti.service.formService.FormExcelFileService;
import com.keymobile.rest.common.bean.ApiResponse; import com.keymobile.rest.common.bean.ApiResponse;
import com.keymobile.rest.common.validator.TwinkleValidator; import com.keymobile.rest.common.validator.TwinkleValidator;
import com.keymobile.rest.model.*; import com.keymobile.rest.model.Template;
import com.keymobile.rest.service.*; import com.keymobile.rest.model.Assignment;
import com.keymobile.rest.vo.*; import com.keymobile.rest.model.ProcessInfo;
import com.keymobile.rest.model.User;
import com.keymobile.rest.service.ExcelService;
import com.keymobile.rest.service.JobInfoService;
import com.keymobile.rest.service.JobService;
import com.keymobile.rest.service.UserService;
import com.keymobile.rest.vo.ExcelForm;
import com.keymobile.rest.vo.JobForm;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import lombok.extern.java.Log;
import org.activiti.engine.*; import org.activiti.engine.*;
import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.activiti.engine.repository.Deployment; import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition; import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.runtime.ProcessInstance;
...@@ -24,10 +29,14 @@ import org.springframework.web.bind.annotation.*; ...@@ -24,10 +29,14 @@ import org.springframework.web.bind.annotation.*;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Log
@RestController @RestController
@RequestMapping(path = "/api") @RequestMapping(path = "/api/task")
public class IndexCtrl { @Api(value = "活动控制器")
public class TaskController {
// 默认启动的固化流程
@Value("${app.active-process}")
private String process;
@Autowired @Autowired
private ManagementService managementService; private ManagementService managementService;
...@@ -36,8 +45,6 @@ public class IndexCtrl { ...@@ -36,8 +45,6 @@ public class IndexCtrl {
@Autowired @Autowired
private ExcelService excelService; private ExcelService excelService;
@Autowired @Autowired
private RecordDataService recordDataService;
@Autowired
private JobInfoService jobInfoService; private JobInfoService jobInfoService;
@Autowired @Autowired
private UserService userService; private UserService userService;
...@@ -47,20 +54,12 @@ public class IndexCtrl { ...@@ -47,20 +54,12 @@ public class IndexCtrl {
private RuntimeService runtimeService; private RuntimeService runtimeService;
@Autowired @Autowired
private TaskService taskService; private TaskService taskService;
@Autowired
private HistoryService historyService;
@Autowired
private ProcessEngineConfigurationImpl processEngineConfiguration;
@Autowired
private FormExcelFileService formExcelFileService;
@Value("${app.active-process}")
private String process;
@ApiOperation(value = "获取首页活动列表") @ApiOperation(value = "获取首页活动列表")
@PostMapping(value = "/task/list") @PostMapping(value = "/list")
public ApiResponse getTaskList(@RequestParam Integer pageNo, @RequestParam Integer pageSize, @RequestParam(required = false) @ApiParam(name = "name", value = "活动名称") String name) { public ApiResponse getTaskList(@RequestParam Integer pageNo, @RequestParam Integer pageSize, @RequestParam(required = false) @ApiParam(name = "name", value = "活动名称") String name) {
Page<Job> taskList; Page<Assignment> taskList;
String orderBy = "descending"; // String orderBy = "descending"; //
String propBy = "id"; // groupBy String propBy = "id"; // groupBy
if (name != null) { if (name != null) {
...@@ -72,20 +71,20 @@ public class IndexCtrl { ...@@ -72,20 +71,20 @@ public class IndexCtrl {
} }
@ApiOperation(value = "查看活动") @ApiOperation(value = "查看活动")
@PostMapping(value = "/task/get") @PostMapping(value = "/get")
public ApiResponse get(@RequestParam @ApiParam(required = true, name = "taskId", value = "活动id") Long taskId) { public ApiResponse get(@RequestParam @ApiParam(required = true, name = "taskId", value = "活动id") Long taskId) {
Job job = jobService.get(taskId); Assignment assignment = jobService.get(taskId);
TwinkleValidator.notNull(job, "活动不存在"); TwinkleValidator.notNull(assignment, "活动不存在");
return ApiResponse.ok(job); return ApiResponse.ok(assignment);
} }
@ApiOperation(value = "补录任务列表及审核任务列表") @ApiOperation(value = "补录任务列表及审核任务列表")
@PostMapping(value = "/task/getMyTasks") @PostMapping(value = "/getMyTasks")
public ApiResponse getMyTasks() { public ApiResponse getMyTasks() {
User user = userService.getNormalUser(); User user = userService.getNormalUser();
User audit = userService.getAudit(); User audit = userService.getAudit();
List<Job> jobList = new ArrayList<>(); List<Assignment> assignmentList = new ArrayList<>();
// 获取任务 // 获取任务
List<Task> tasks = taskService.createNativeTaskQuery() List<Task> tasks = taskService.createNativeTaskQuery()
.sql("SELECT * FROM " + managementService.getTableName(Task.class) + " T WHERE T.ASSIGNEE_ = #{assignee1} OR T.ASSIGNEE_ = #{assignee2}") .sql("SELECT * FROM " + managementService.getTableName(Task.class) + " T WHERE T.ASSIGNEE_ = #{assignee1} OR T.ASSIGNEE_ = #{assignee2}")
...@@ -94,23 +93,23 @@ public class IndexCtrl { ...@@ -94,23 +93,23 @@ public class IndexCtrl {
for (Task task : tasks) { for (Task task : tasks) {
String processId = task.getProcessInstanceId(); String processId = task.getProcessInstanceId();
Job job = jobService.findByProcessId(processId); Assignment assignment = jobService.findByProcessId(processId);
if (job != null && job.getStatus() != Job.STATUS_COMPLETED) { if (assignment != null && assignment.getStatus() != Assignment.STATUS_COMPLETED) {
if (task.getTaskDefinitionKey().equals("addData")) { if (task.getTaskDefinitionKey().equals("addData")) {
job.setKind(Job.KIND_RECORD); assignment.setKind(Assignment.KIND_RECORD);
} else { } else {
job.setKind(Job.KIND_AUDIT); assignment.setKind(Assignment.KIND_AUDIT);
} }
jobList.add(job); assignmentList.add(assignment);
} }
} }
return ApiResponse.ok(jobList); return ApiResponse.ok(assignmentList);
} }
@ApiOperation(value = "新建活动") @ApiOperation(value = "新建活动")
@PostMapping(value = "/task/create") @PostMapping(value = "/create")
public ApiResponse createTask(@RequestBody JobForm form) { public ApiResponse createTask(@RequestBody JobForm form) {
TwinkleValidator.notEmpty(form.getName(), "名称不能为空"); TwinkleValidator.notEmpty(form.getName(), "名称不能为空");
TwinkleValidator.notNull(form.getType(), "类型不能为空"); TwinkleValidator.notNull(form.getType(), "类型不能为空");
...@@ -118,59 +117,59 @@ public class IndexCtrl { ...@@ -118,59 +117,59 @@ public class IndexCtrl {
// 创建人 // 创建人
User manager = userService.getManager(); User manager = userService.getManager();
form.setUser(manager); form.setUser(manager);
Job job = jobService.save(form); Assignment assignment = jobService.save(form);
// 新建excel实例 // 新建excel实例
List<ExcelForm> excelFormList = form.getExcels(); List<ExcelForm> excelFormList = form.getExcels();
excelFormList.forEach(excelForm -> { excelFormList.forEach(excelForm -> {
TwinkleValidator.notEmpty(excelForm.getUserIds(), "补录人不能为空"); TwinkleValidator.notEmpty(excelForm.getUserIds(), "补录人不能为空");
excelForm.setJob(job); excelForm.setAssignment(assignment);
Excel excel = excelService.save(excelForm); Template template = excelService.save(excelForm);
// 新建补录人员任务关联 // 新建补录人员任务关联
String[] userIds = excelForm.getUserIds().split(","); String[] userIds = excelForm.getUserIds().split(",");
List<Long> userIdList = Arrays.asList(userIds).stream().map(Long::parseLong).collect(Collectors.toList()); List<Long> userIdList = Arrays.asList(userIds).stream().map(Long::parseLong).collect(Collectors.toList());
List<User> userList = userService.findAllByIdIn(userIdList); List<User> userList = userService.findAllByIdIn(userIdList);
TwinkleValidator.notLessThan(userList.size(), 1, "补录人员不存在"); TwinkleValidator.notLessThan(userList.size(), 1, "补录人员不存在");
userList.forEach(user -> { userList.forEach(user -> {
jobInfoService.save(user, excel); jobInfoService.save(user, template);
}); });
}); });
return ApiResponse.ok(job.getId()); return ApiResponse.ok(assignment.getId());
} }
@ApiOperation(value = "修改活动") @ApiOperation(value = "修改活动")
@PostMapping(value = "/task/update") @PostMapping(value = "/update")
public ApiResponse updateTask(@RequestBody JobForm form) { public ApiResponse updateTask(@RequestBody JobForm form) {
TwinkleValidator.isFalse((form.getId() == null && form.getId() <= 0), "活动id不能为空"); TwinkleValidator.isFalse((form.getId() == null && form.getId() <= 0), "活动id不能为空");
Job job = jobService.get(form.getId()); Assignment assignment = jobService.get(form.getId());
TwinkleValidator.notNull(job, "活动不存在"); TwinkleValidator.notNull(assignment, "活动不存在");
int status = job.getStatus(); int status = assignment.getStatus();
TwinkleValidator.isFalse(status != Job.STATUS_UNRELEASED, "活动已经发起"); TwinkleValidator.isFalse(status != Assignment.STATUS_UNRELEASED, "活动已经发起");
TwinkleValidator.notEmpty(form.getName(), "名称不能为空"); TwinkleValidator.notEmpty(form.getName(), "名称不能为空");
TwinkleValidator.notNull(form.getType(), "类型不能为空"); TwinkleValidator.notNull(form.getType(), "类型不能为空");
TwinkleValidator.isFalse((form.getExcels() == null || form.getExcels().size() == 0), "补录模板不能为空"); TwinkleValidator.isFalse((form.getExcels() == null || form.getExcels().size() == 0), "补录模板不能为空");
job.setType(form.getType()); assignment.setType(form.getType());
job.setRemark(form.getRemark()); assignment.setRemark(form.getRemark());
job.setName(form.getName()); assignment.setName(form.getName());
jobService.update(job); jobService.update(assignment);
// 新建excel实例 // 新建excel实例
List<ExcelForm> excelFormList = form.getExcels(); List<ExcelForm> excelFormList = form.getExcels();
excelFormList.forEach(excelForm -> { excelFormList.forEach(excelForm -> {
Excel excel = excelService.get(excelForm.getId()); Template template = excelService.get(excelForm.getId());
TwinkleValidator.notNull(excel, "模板不存在"); TwinkleValidator.notNull(template, "模板不存在");
excel.setName(excelForm.getName()); template.setName(excelForm.getName());
excel.setConfig(excelForm.getConfig()); template.setConfig(excelForm.getConfig());
excel.setRemark(excelForm.getRemark()); template.setRemark(excelForm.getRemark());
excel.setDataAt(excelForm.getDataAt()); template.setDataAt(excelForm.getDataAt());
excelService.update(excel); excelService.update(template);
}); });
return ApiResponse.ok(job.getId()); return ApiResponse.ok(assignment.getId());
} }
@ApiOperation(value = "手动发起活动") @ApiOperation(value = "手动发起活动")
@PostMapping(value = "/task/start") @PostMapping(value = "/start")
public ApiResponse startTask(@RequestParam Long taskId) { public ApiResponse startTask(@RequestParam Long taskId) {
Job job = jobService.get(taskId); Assignment assignment = jobService.get(taskId);
TwinkleValidator.notNull(job, "活动不存在"); TwinkleValidator.notNull(assignment, "活动不存在");
// 部署补录流程 // 部署补录流程
Deployment deploy = repositoryService Deployment deploy = repositoryService
.createDeployment() .createDeployment()
...@@ -181,53 +180,53 @@ public class IndexCtrl { ...@@ -181,53 +180,53 @@ public class IndexCtrl {
createProcessDefinitionQuery(). createProcessDefinitionQuery().
deploymentId(deploy.getId()). deploymentId(deploy.getId()).
singleResult(); singleResult();
String inputUser = job.getUser().getUsername(); String inputUser = assignment.getUser().getUsername();
Map<String, Object> variables = new HashMap<>(); Map<String, Object> variables = new HashMap<>();
variables.put("managerId", inputUser); variables.put("managerId", inputUser);
//启动流程 //启动流程
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinition.getKey(), variables); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinition.getKey(), variables);
job.setProcessId(processInstance.getId()); assignment.setProcessId(processInstance.getId());
jobService.update(job); jobService.update(assignment);
// 发起人把流程发送到下一个人 // 发起人把流程发送到下一个人
Task resultTask = taskService.createTaskQuery().processInstanceId(processInstance.getId()). Task resultTask = taskService.createTaskQuery().processInstanceId(processInstance.getId()).
taskInvolvedUser(inputUser).singleResult(); taskInvolvedUser(inputUser).singleResult();
// 根据活动查找需要填写的人 目前只支持一人 // 根据活动查找需要填写的人 目前只支持一人
List<Excel> excelList = job.getExcelList(); List<Template> templateList = assignment.getTemplateList();
TwinkleValidator.notLessThan(excelList.size(), 1, "补录模板不存在"); TwinkleValidator.notLessThan(templateList.size(), 1, "补录模板不存在");
Excel excel = excelList.get(0); Template template = templateList.get(0);
List<JobInfo> jobInfoList = jobInfoService.findAllByExcelId(excel.getId()); List<ProcessInfo> processInfoList = jobInfoService.findAllByExcelId(template.getId());
TwinkleValidator.notLessThan(jobInfoList.size(), 1, "补录人员不存在"); TwinkleValidator.notLessThan(processInfoList.size(), 1, "补录人员不存在");
taskService.complete(resultTask.getId(), ImmutableMap.of("userId", jobInfoList.get(0).getUser().getUsername())); taskService.complete(resultTask.getId(), ImmutableMap.of("userId", processInfoList.get(0).getUser().getUsername()));
return ApiResponse.ok(); return ApiResponse.ok();
} }
@ApiOperation(value = "审核通过活动") @ApiOperation(value = "审核通过活动")
@PostMapping(value = "/task/pass") @PostMapping(value = "/pass")
public ApiResponse passTask(@RequestParam Long taskId) { public ApiResponse passTask(@RequestParam Long taskId) {
Job job = jobService.get(taskId); Assignment assignment = jobService.get(taskId);
// 完结活动, 流程跑完 // 完结活动, 流程跑完
User judge = userService.getAudit(); User judge = userService.getAudit();
List<Task> taskList = taskService.createTaskQuery().processInstanceId(job.getProcessId()) List<Task> taskList = taskService.createTaskQuery().processInstanceId(assignment.getProcessId())
.taskAssignee(judge.getUsername()).list(); .taskAssignee(judge.getUsername()).list();
TwinkleValidator.notLessThan(taskList.size(), 1, "启动失败"); TwinkleValidator.notLessThan(taskList.size(), 1, "启动失败");
Task task = taskList.get(0); Task task = taskList.get(0);
taskService.complete(task.getId(), ImmutableMap.of("pass", "true")); taskService.complete(task.getId(), ImmutableMap.of("pass", "true"));
job.setStatus(Job.STATUS_COMPLETED); assignment.setStatus(Assignment.STATUS_COMPLETED);
jobService.update(job); jobService.update(assignment);
return ApiResponse.ok(); return ApiResponse.ok();
} }
@ApiOperation(value = "审核驳回活动") @ApiOperation(value = "审核驳回活动")
@PostMapping(value = "/task/reject") @PostMapping(value = "/reject")
public ApiResponse rejectTask(@RequestParam Long taskId) { public ApiResponse rejectTask(@RequestParam Long taskId) {
Job job = jobService.get(taskId); Assignment assignment = jobService.get(taskId);
// 完结活动, 流程跑完 // 完结活动, 流程跑完
User judge = userService.getAudit(); User judge = userService.getAudit();
List<Task> taskList = taskService.createTaskQuery().processInstanceId(job.getProcessId()) List<Task> taskList = taskService.createTaskQuery().processInstanceId(assignment.getProcessId())
.taskAssignee(judge.getUsername()).list(); .taskAssignee(judge.getUsername()).list();
TwinkleValidator.notLessThan(taskList.size(), 1, "启动失败"); TwinkleValidator.notLessThan(taskList.size(), 1, "启动失败");
Task task = taskList.get(0); Task task = taskList.get(0);
...@@ -235,57 +234,11 @@ public class IndexCtrl { ...@@ -235,57 +234,11 @@ public class IndexCtrl {
return ApiResponse.ok(); return ApiResponse.ok();
} }
// @ApiOperation(value = "查看当前活动进度")
// @ApiOperation(value = "查看当前活动进度")
// @PostMapping(value = "/task/viewTaskProcess") // @PostMapping(value = "/task/viewTaskProcess")
// public ApiResponse viewTaskProcess(@RequestParam Long taskId) { // public ApiResponse viewTaskProcess(@RequestParam Long taskId) {
// return ApiResponse.ok(); // return ApiResponse.ok();
// } // }
@ApiOperation(value = "获取补录人员列表")
@PostMapping(value = "/user/list")
public ApiResponse getUserList() {
List<User> userList = userService.findAllByRole(User.ROLE_NORMAL);
return ApiResponse.ok(userList);
}
@ApiOperation(value = "填写补录数据")
@PostMapping(value = "/excel/saveData")
public ApiResponse saveRecordData(@RequestBody RecordDataForm form) {
User curUser = userService.getNormalUser();
Excel excel = excelService.get(form.getExcelId());
JobInfo jobInfo = jobInfoService.findByExcelIdAndUserId(form.getExcelId(), curUser.getId());
RecordData recordData;
if (form.getDataId() != null) {
recordData = recordDataService.update(form);
} else {
form.setJobInfo(jobInfo);
recordData = recordDataService.save(form);
}
Job job = excel.getJob();
String processId = job.getProcessId();
// 发起人把流程发送到下一个人
List<Task> taskList = taskService.createTaskQuery().processInstanceId(processId)
.taskAssignee(curUser.getUsername()).list();
Task task = taskList.get(0);
User judge = userService.getAudit();
taskService.complete(task.getId(), ImmutableMap.of("judgeId", judge.getUsername()));
return ApiResponse.ok(recordData.getId());
}
@ApiOperation(value = "传excelId过来,获取用户填写的数据")
@PostMapping(value = "/excel/getData")
public ApiResponse getRecordData(@RequestParam long excelId) {
User curUser = userService.getNormalUser();
JobInfo jobInfo = jobInfoService.findByExcelIdAndUserId(excelId, curUser.getId());
List<RecordData> recordDataList = jobInfo.getRecordDataList();
if (recordDataList.size() > 0) {
return ApiResponse.ok(recordDataList.get(0));
} else {
return ApiResponse.ok();
}
}
} }
package com.keymobile.rest.controller;
import com.google.common.collect.ImmutableMap;
import com.keymobile.activiti.service.formService.FormExcelFileService;
import com.keymobile.rest.common.bean.ApiResponse;
import com.keymobile.rest.model.*;
import com.keymobile.rest.service.*;
import com.keymobile.rest.vo.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.activiti.engine.*;
import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.activiti.engine.task.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.*;
@Api(value = "用户控制器")
@RestController
@RequestMapping(path = "/api/user")
public class UserController {
@Autowired
private UserService userService;
@ApiOperation(value = "获取补录人员列表")
@PostMapping(value = "/user/list")
public ApiResponse getUserList() {
List<User> userList = userService.findAllByRole(User.ROLE_NORMAL);
return ApiResponse.ok(userList);
}
}
package com.keymobile.rest.dao; package com.keymobile.rest.dao;
import com.keymobile.rest.model.Excel; import com.keymobile.rest.model.Template;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List; import java.util.List;
public interface ExcelDao extends JpaRepository<Excel, Long> { public interface ExcelDao extends JpaRepository<Template, Long> {
List<Excel> findAllByIdIn(List<Long> ids); List<Template> findAllByIdIn(List<Long> ids);
List<Excel> findAllByJobId(long jid); List<Template> findAllByJobId(long jid);
} }
package com.keymobile.rest.dao; package com.keymobile.rest.dao;
import com.keymobile.rest.model.Job; import com.keymobile.rest.model.Assignment;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
public interface JobDao extends JpaRepository<Job, Long> { public interface JobDao extends JpaRepository<Assignment, Long> {
Page<Job> findAll(Pageable pageable); Page<Assignment> findAll(Pageable pageable);
Page<Job> findAllByNameLike(String valueOf, Pageable pageable); Page<Assignment> findAllByNameLike(String valueOf, Pageable pageable);
Job findByProcessId(String pid); Assignment findByProcessId(String pid);
} }
package com.keymobile.rest.dao; package com.keymobile.rest.dao;
import com.keymobile.rest.model.JobInfo; import com.keymobile.rest.model.ProcessInfo;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List; import java.util.List;
public interface JobInfoDao extends JpaRepository<JobInfo, Long> { public interface JobInfoDao extends JpaRepository<ProcessInfo, Long> {
List<JobInfo> findAllByExcelId(long eid); List<ProcessInfo> findAllByExcelId(long eid);
List<JobInfo> findAllByUserId(long uid); List<ProcessInfo> findAllByUserId(long uid);
void deleteAllByExcelId(long eid); void deleteAllByExcelId(long eid);
JobInfo findByExcelIdAndUserId(long eid, long uid); ProcessInfo findByExcelIdAndUserId(long eid, long uid);
} }
package com.keymobile.rest.dao; package com.keymobile.rest.dao;
import com.keymobile.rest.model.RecordData; import com.keymobile.rest.model.DataInfo;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
public interface RecordDataDao extends JpaRepository<RecordData, Long> { public interface RecordDataDao extends JpaRepository<DataInfo, Long> {
......
package com.keymobile.rest.model; package com.keymobile.rest.model;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp; import org.hibernate.annotations.CreationTimestamp;
...@@ -13,28 +12,15 @@ import java.io.Serializable; ...@@ -13,28 +12,15 @@ import java.io.Serializable;
import java.util.List; import java.util.List;
/** /**
* @name 流程、任务 * @name 活动, 任务
* @desc 包含属于哪个activiti流程、相关人员、附件信息id * @desc 包含一些活动的定义以及绑定一些spreadJs生成的excel模板
*/ */
@JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler", "fieldHandler"}) @JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler", "fieldHandler"})
@NoArgsConstructor // 自动生成无参数构造函数。 @NoArgsConstructor
@AllArgsConstructor // 自动生成全参数构造函数。
@Data @Data
@Entity @Entity
public class Job implements Serializable { public class Assignment implements Serializable {
public static int KIND_RECORD = 1;
public static int KIND_AUDIT = 2;
public static int TYPE_AUTO = 2;
public static int TYPE_MANUAL = 1;
public static int STATUS_RELEASED = 2;
public static int STATUS_UNRELEASED = 1;
public static int STATUS_COMPLETED = 3;
public static int AUDIT_NEED = 1;
public static int AUDIT_NO_NEED = 2;
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
...@@ -44,20 +30,17 @@ public class Job implements Serializable { ...@@ -44,20 +30,17 @@ public class Job implements Serializable {
private String name; private String name;
@Column(nullable = false) @Column(nullable = false)
private int type = 1; private int type;
@Column(nullable = false) @Column(nullable = false)
private int status = 1; private int status;
@Column(nullable = false) @Column(nullable = false)
private int audit = 1; private int needAudit;
@Column @Column
private String remark; private String remark;
@Column(name = "process_id")
private String processId;
// 报送频度 按年 按年 按周 按月 按日 自动推送 // 报送频度 按年 按年 按周 按月 按日 自动推送
@Column(name = "start_at") @Column(name = "start_at")
private Timestamp startAt; private Timestamp startAt;
...@@ -67,14 +50,9 @@ public class Job implements Serializable { ...@@ -67,14 +50,9 @@ public class Job implements Serializable {
@CreationTimestamp @CreationTimestamp
private Timestamp createAt; private Timestamp createAt;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "job") @OneToMany(fetch = FetchType.EAGER, mappedBy = "job")
private List<Excel> excelList; private List<Template> templateList;
@ManyToOne @ManyToOne
private User user; private User user;
@Transient
private int kind;
} }
...@@ -2,7 +2,6 @@ package com.keymobile.rest.model; ...@@ -2,7 +2,6 @@ package com.keymobile.rest.model;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp; import org.hibernate.annotations.CreationTimestamp;
...@@ -12,14 +11,13 @@ import java.io.Serializable; ...@@ -12,14 +11,13 @@ import java.io.Serializable;
import java.sql.Timestamp; import java.sql.Timestamp;
/** /**
* spreadJs 填写的数据 * 已经填写的数据实例
*/ */
@JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler", "fieldHandler"}) @JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler", "fieldHandler"})
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor
@Data @Data
@Entity @Entity
public class RecordData implements Serializable { public class DataInfo implements Serializable {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
...@@ -34,5 +32,5 @@ public class RecordData implements Serializable { ...@@ -34,5 +32,5 @@ public class RecordData implements Serializable {
@ManyToOne(fetch = FetchType.LAZY) @ManyToOne(fetch = FetchType.LAZY)
@JsonIgnore @JsonIgnore
private JobInfo jobInfo; private ProcessInfo processInfo;
} }
package com.keymobile.rest.model;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.io.Serializable;
/**
* @name 进程
* @desc
*/
@JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler", "fieldHandler"})
@NoArgsConstructor
@Data
@Entity
public class Process implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
// activiti运行中的流程实例id
@Column(name = "process_id")
private String processId;
}
package com.keymobile.rest.model; package com.keymobile.rest.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp; import org.hibernate.annotations.CreationTimestamp;
...@@ -13,14 +11,13 @@ import java.sql.Timestamp; ...@@ -13,14 +11,13 @@ import java.sql.Timestamp;
import java.util.List; import java.util.List;
/** /**
* spreadJs 补录人员信息 * 进程&指派人员关系
*/ */
@JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler", "fieldHandler"}) @JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler", "fieldHandler"})
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor
@Data @Data
@Entity @Entity
public class JobInfo implements Serializable { public class ProcessInfo implements Serializable {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
...@@ -31,12 +28,12 @@ public class JobInfo implements Serializable { ...@@ -31,12 +28,12 @@ public class JobInfo implements Serializable {
private Timestamp createAt; private Timestamp createAt;
@OneToOne @OneToOne
private Excel excel; private Template template;
@OneToOne @OneToOne
private User user; private User user;
@OneToMany(mappedBy = "jobInfo", fetch = FetchType.EAGER) @OneToMany(mappedBy = "jobInfo", fetch = FetchType.EAGER)
List<RecordData> recordDataList; List<DataInfo> dataInfoList;
} }
...@@ -2,7 +2,6 @@ package com.keymobile.rest.model; ...@@ -2,7 +2,6 @@ package com.keymobile.rest.model;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp; import org.hibernate.annotations.CreationTimestamp;
...@@ -10,17 +9,15 @@ import org.hibernate.annotations.CreationTimestamp; ...@@ -10,17 +9,15 @@ import org.hibernate.annotations.CreationTimestamp;
import javax.persistence.*; import javax.persistence.*;
import java.io.Serializable; import java.io.Serializable;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.List;
/** /**
* spreadJs 配置的报表 * spreadJs 配置的报表
*/ */
@JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler", "fieldHandler"}) @JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler", "fieldHandler"})
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor
@Data @Data
@Entity @Entity
public class Excel implements Serializable { public class Template implements Serializable {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
...@@ -44,5 +41,5 @@ public class Excel implements Serializable { ...@@ -44,5 +41,5 @@ public class Excel implements Serializable {
@ManyToOne(fetch = FetchType.LAZY) @ManyToOne(fetch = FetchType.LAZY)
@JsonIgnore @JsonIgnore
private Job job; private Assignment assignment;
} }
package com.keymobile.rest.model; package com.keymobile.rest.model;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
...@@ -10,7 +9,6 @@ import java.io.Serializable; ...@@ -10,7 +9,6 @@ import java.io.Serializable;
@JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler", "fieldHandler"}) @JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler", "fieldHandler"})
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor
@Data @Data
@Entity @Entity
public class User implements Serializable { public class User implements Serializable {
......
...@@ -2,7 +2,7 @@ package com.keymobile.rest.service; ...@@ -2,7 +2,7 @@ package com.keymobile.rest.service;
import com.keymobile.activiti.utils.DateUtil; import com.keymobile.activiti.utils.DateUtil;
import com.keymobile.rest.dao.*; import com.keymobile.rest.dao.*;
import com.keymobile.rest.model.Excel; import com.keymobile.rest.model.Template;
import com.keymobile.rest.vo.ExcelForm; import com.keymobile.rest.vo.ExcelForm;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -16,36 +16,36 @@ public class ExcelService { ...@@ -16,36 +16,36 @@ public class ExcelService {
@Autowired @Autowired
private ExcelDao excelDao; private ExcelDao excelDao;
public Excel save(ExcelForm form) { public Template save(ExcelForm form) {
Excel excel = new Excel(); Template template = new Template();
excel.setName(form.getName()); template.setName(form.getName());
excel.setDataAt(1); template.setDataAt(1);
excel.setConfig(form.getConfig()); template.setConfig(form.getConfig());
excel.setRemark(form.getRemark()); template.setRemark(form.getRemark());
excel.setJob(form.getJob()); template.setAssignment(form.getAssignment());
Timestamp now = Timestamp.valueOf(DateUtil.getDateTime()); Timestamp now = Timestamp.valueOf(DateUtil.getDateTime());
excel.setCreateAt(now); template.setCreateAt(now);
excel = excelDao.save(excel); template = excelDao.save(template);
return excel; return template;
} }
public Excel get(long id) { public Template get(long id) {
return excelDao.getOne(id); return excelDao.getOne(id);
} }
public void update(Excel excel) { public void update(Template template) {
excelDao.save(excel); excelDao.save(template);
} }
public List<Excel> findAllByIdIn(List<Long> ids) { public List<Template> findAllByIdIn(List<Long> ids) {
return excelDao.findAllByIdIn(ids); return excelDao.findAllByIdIn(ids);
} }
public List<Excel> findAllByJobId(long jid) { public List<Template> findAllByJobId(long jid) {
return excelDao.findAllByJobId(jid); return excelDao.findAllByJobId(jid);
} }
public void saveAll(List<Excel> excelList) { public void saveAll(List<Template> templateList) {
excelDao.saveAll(excelList); excelDao.saveAll(templateList);
} }
} }
...@@ -2,8 +2,8 @@ package com.keymobile.rest.service; ...@@ -2,8 +2,8 @@ package com.keymobile.rest.service;
import com.keymobile.activiti.utils.DateUtil; import com.keymobile.activiti.utils.DateUtil;
import com.keymobile.rest.dao.*; import com.keymobile.rest.dao.*;
import com.keymobile.rest.model.Excel; import com.keymobile.rest.model.Template;
import com.keymobile.rest.model.JobInfo; import com.keymobile.rest.model.ProcessInfo;
import com.keymobile.rest.model.User; import com.keymobile.rest.model.User;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -17,9 +17,9 @@ public class JobInfoService { ...@@ -17,9 +17,9 @@ public class JobInfoService {
@Autowired @Autowired
private JobInfoDao jobInfoDao; private JobInfoDao jobInfoDao;
public JobInfo save(User user, Excel excel) { public ProcessInfo save(User user, Template template) {
JobInfo info = new JobInfo(); ProcessInfo info = new ProcessInfo();
info.setExcel(excel); info.setTemplate(template);
info.setUser(user); info.setUser(user);
Timestamp now = Timestamp.valueOf(DateUtil.getDateTime()); Timestamp now = Timestamp.valueOf(DateUtil.getDateTime());
info.setCreateAt(now); info.setCreateAt(now);
...@@ -27,15 +27,15 @@ public class JobInfoService { ...@@ -27,15 +27,15 @@ public class JobInfoService {
return info; return info;
} }
public List<JobInfo> findAllByExcelId(long eid) { public List<ProcessInfo> findAllByExcelId(long eid) {
return jobInfoDao.findAllByExcelId(eid); return jobInfoDao.findAllByExcelId(eid);
} }
public JobInfo findByExcelIdAndUserId(long eid, long uid) { public ProcessInfo findByExcelIdAndUserId(long eid, long uid) {
return jobInfoDao.findByExcelIdAndUserId(eid, uid); return jobInfoDao.findByExcelIdAndUserId(eid, uid);
} }
public List<JobInfo> findByUserId(long uid) { public List<ProcessInfo> findByUserId(long uid) {
return jobInfoDao.findAllByUserId(uid); return jobInfoDao.findAllByUserId(uid);
} }
......
...@@ -2,7 +2,7 @@ package com.keymobile.rest.service; ...@@ -2,7 +2,7 @@ package com.keymobile.rest.service;
import com.keymobile.activiti.utils.DateUtil; import com.keymobile.activiti.utils.DateUtil;
import com.keymobile.rest.dao.JobDao; import com.keymobile.rest.dao.JobDao;
import com.keymobile.rest.model.Job; import com.keymobile.rest.model.Assignment;
import com.keymobile.rest.vo.JobForm; import com.keymobile.rest.vo.JobForm;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
...@@ -13,7 +13,6 @@ import org.springframework.stereotype.Service; ...@@ -13,7 +13,6 @@ import org.springframework.stereotype.Service;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Date;
@Service @Service
public class JobService { public class JobService {
...@@ -21,56 +20,60 @@ public class JobService { ...@@ -21,56 +20,60 @@ public class JobService {
@Autowired @Autowired
private JobDao jobDao; private JobDao jobDao;
public Job get(long id) { public Assignment get(long id) {
return jobDao.getOne(id); return jobDao.getOne(id);
} }
public Job update(Job job) { public Assignment update(Assignment assignment) {
return jobDao.save(job); return jobDao.save(assignment);
} }
public Job save(JobForm form) { public Assignment save(Assignment assignment) {
Job job = new Job(); return jobDao.save(assignment);
}
public Assignment save(JobForm form) {
Assignment assignment = new Assignment();
Timestamp now = Timestamp.valueOf(DateUtil.getDateTime()); Timestamp now = Timestamp.valueOf(DateUtil.getDateTime());
job.setCreateAt(now); assignment.setCreateAt(now);
job.setStatus(Job.STATUS_UNRELEASED); assignment.setStatus(Assignment.STATUS_UNRELEASED);
job.setAudit(Job.AUDIT_NEED); assignment.setAudit(Assignment.AUDIT_NEED);
job.setName(form.getName()); assignment.setName(form.getName());
job.setType(form.getType()); assignment.setType(form.getType());
if (form.getType() == Job.TYPE_AUTO) { if (form.getType() == Assignment.TYPE_AUTO) {
Timestamp startAt; Timestamp startAt;
try { try {
startAt = Timestamp.valueOf(form.getStartAt()); startAt = Timestamp.valueOf(form.getStartAt());
} catch (Exception e) { } catch (Exception e) {
startAt = Timestamp.valueOf(LocalDateTime.now()); startAt = Timestamp.valueOf(LocalDateTime.now());
} }
job.setStartAt(startAt); assignment.setStartAt(startAt);
} }
job.setUser(form.getUser()); assignment.setUser(form.getUser());
job = jobDao.save(job); assignment = jobDao.save(assignment);
return job; return assignment;
} }
public Job findByProcessId(String pid) { public Assignment findByProcessId(String pid) {
return jobDao.findByProcessId(pid); return jobDao.findByProcessId(pid);
} }
public Page<Job> findAll(int pageNo, int pageSize) { public Page<Assignment> findAll(int pageNo, int pageSize) {
Pageable pageable = convert(pageNo, pageSize); Pageable pageable = convert(pageNo, pageSize);
return jobDao.findAll(pageable); return jobDao.findAll(pageable);
} }
public Page<Job> findAllByName(String name, int pageNo, int pageSize) { public Page<Assignment> findAllByName(String name, int pageNo, int pageSize) {
Pageable pageable = convert(pageNo, pageSize); Pageable pageable = convert(pageNo, pageSize);
return jobDao.findAllByNameLike(("%" + name + "%"), pageable); return jobDao.findAllByNameLike(("%" + name + "%"), pageable);
} }
public Page<Job> findAll(int pageNo, int pageSize, String orderBy, String propBy) { public Page<Assignment> findAll(int pageNo, int pageSize, String orderBy, String propBy) {
Pageable pageable = convert(pageNo, pageSize, orderBy, propBy); Pageable pageable = convert(pageNo, pageSize, orderBy, propBy);
return jobDao.findAll(pageable); return jobDao.findAll(pageable);
} }
public Page<Job> findAllByName(String name, int pageNo, int pageSize, String orderBy, String propBy) { public Page<Assignment> findAllByName(String name, int pageNo, int pageSize, String orderBy, String propBy) {
Pageable pageable = convert(pageNo, pageSize, orderBy, propBy); Pageable pageable = convert(pageNo, pageSize, orderBy, propBy);
return jobDao.findAllByNameLike(("%" + name + "%"), pageable); return jobDao.findAllByNameLike(("%" + name + "%"), pageable);
} }
......
...@@ -2,7 +2,7 @@ package com.keymobile.rest.service; ...@@ -2,7 +2,7 @@ package com.keymobile.rest.service;
import com.keymobile.activiti.utils.DateUtil; import com.keymobile.activiti.utils.DateUtil;
import com.keymobile.rest.dao.*; import com.keymobile.rest.dao.*;
import com.keymobile.rest.model.RecordData; import com.keymobile.rest.model.DataInfo;
import com.keymobile.rest.vo.RecordDataForm; import com.keymobile.rest.vo.RecordDataForm;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -15,22 +15,22 @@ public class RecordDataService { ...@@ -15,22 +15,22 @@ public class RecordDataService {
@Autowired @Autowired
private RecordDataDao recordDataDao; private RecordDataDao recordDataDao;
public RecordData get(long id) { public DataInfo get(long id) {
return recordDataDao.getOne(id); return recordDataDao.getOne(id);
} }
public RecordData save(RecordDataForm form) { public DataInfo save(RecordDataForm form) {
RecordData data = new RecordData(); DataInfo data = new DataInfo();
data.setDatas(form.getDataStr()); data.setDatas(form.getDataStr());
data.setJobInfo(form.getJobInfo()); data.setProcessInfo(form.getProcessInfo());
Timestamp now = Timestamp.valueOf(DateUtil.getDateTime()); Timestamp now = Timestamp.valueOf(DateUtil.getDateTime());
data.setCreateAt(now); data.setCreateAt(now);
data = recordDataDao.save(data); data = recordDataDao.save(data);
return data; return data;
} }
public RecordData update(RecordDataForm form) { public DataInfo update(RecordDataForm form) {
RecordData data = this.get(form.getDataId()); DataInfo data = this.get(form.getDataId());
data = recordDataDao.save(data); data = recordDataDao.save(data);
return data; return data;
} }
......
...@@ -13,6 +13,10 @@ public class UserService { ...@@ -13,6 +13,10 @@ public class UserService {
@Autowired @Autowired
private UserDao userDao; private UserDao userDao;
public List<User> findAllByIdIn(List<Long> ids) {
return userDao.findAllByIdIn(ids);
}
public List<User> findAllByRole(int role) { public List<User> findAllByRole(int role) {
return userDao.findAllByRole(role); return userDao.findAllByRole(role);
} }
...@@ -35,7 +39,5 @@ public class UserService { ...@@ -35,7 +39,5 @@ public class UserService {
return user; return user;
} }
public List<User> findAllByIdIn(List<Long> ids) {
return userDao.findAllByIdIn(ids);
}
} }
package com.keymobile.rest.vo; package com.keymobile.rest.vo;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.keymobile.rest.model.Job; import com.keymobile.rest.model.Assignment;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.sql.Timestamp;
import java.util.List; import java.util.List;
@Data @Data
...@@ -39,5 +34,5 @@ public class ExcelForm { ...@@ -39,5 +34,5 @@ public class ExcelForm {
private Integer dataAt; private Integer dataAt;
@JsonIgnore @JsonIgnore
private Job job; private Assignment assignment;
} }
package com.keymobile.rest.vo; package com.keymobile.rest.vo;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.keymobile.rest.model.JobInfo; import com.keymobile.rest.model.ProcessInfo;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -27,7 +27,7 @@ public class RecordDataForm { ...@@ -27,7 +27,7 @@ public class RecordDataForm {
private List<Object> dataList; private List<Object> dataList;
@JsonIgnore @JsonIgnore
private JobInfo jobInfo; private ProcessInfo processInfo;
} }
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:tns="http://www.activiti.org/test" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" expressionLanguage="http://www.w3.org/1999/XPath" id="m1583335449426" name="" targetNamespace="http://www.activiti.org/test" typeLanguage="http://www.w3.org/2001/XMLSchema">
<process id="CompDataStandardProcess" isClosed="false" isExecutable="true" name="专业公司数据标准流程" processType="None">
<startEvent id="startevent1" name="Start"/>
<userTask activiti:assignee="${inputUser}" activiti:exclusive="true" id="dataStandardMake" name="提出数据标准编制需求"/>
<userTask activiti:candidateUsers="${groupDataStandardServiceImpl.findAssigneesForProcess(execution,&quot;group1&quot;)}" activiti:exclusive="true" id="applyTask1" name="审批(报表中心1)"/>
<exclusiveGateway gatewayDirection="Unspecified" id="exclusivegateway1" name="Exclusive Gateway"/>
<sequenceFlow id="flow1" sourceRef="startevent1" targetRef="dataStandardMake"/>
<sequenceFlow id="flow4" name="N" skipExpression="${sign=='false'}" sourceRef="exclusivegateway1" targetRef="dataStandardMake"/>
<userTask activiti:candidateUsers="${groupDataStandardServiceImpl.findAssigneesForProcess(execution,&quot;group2&quot;)}" activiti:exclusive="true" id="selectStandardApartment" name="确定数据标准责任部门"/>
<userTask activiti:exclusive="true" id="writeStandardAttr" name="填写数据标准属性">
<extensionElements>
<activiti:taskListener class="com.keymobile.activiti.listener.WirteStandardAttrListener" event="create"/>
</extensionElements>
</userTask>
<sequenceFlow id="flow5" name="Y" skipExpression="${sign=='true'}" sourceRef="exclusivegateway1" targetRef="selectStandardApartment"/>
<sequenceFlow id="flow6" sourceRef="selectStandardApartment" targetRef="writeStandardAttr"/>
<userTask activiti:candidateUsers="${groupDataStandardServiceImpl.findAssigneesForProcess(execution,&quot;group3&quot;)}" activiti:exclusive="true" id="applyTask2" name="审批(报表中心2)"/>
<exclusiveGateway gatewayDirection="Unspecified" id="exclusivegateway2" name="Exclusive Gateway"/>
<userTask activiti:candidateUsers="${groupDataStandardServiceImpl.findAssigneesForProcess(execution,&quot;group4&quot;)}" activiti:exclusive="true" id="applyTask3" name="审批(科技运营部)"/>
<sequenceFlow id="flow11" name="Y" skipExpression="${sign=='true'}" sourceRef="exclusivegateway2" targetRef="applyTask3"/>
<exclusiveGateway gatewayDirection="Unspecified" id="exclusivegateway3" name="Exclusive Gateway"/>
<userTask activiti:candidateUsers="${groupDataStandardServiceImpl.findAssigneesForProcess(execution,&quot;group5&quot;)}" activiti:exclusive="true" id="applyTask4" name="审批(报表中心4)"/>
<exclusiveGateway gatewayDirection="Unspecified" id="exclusivegateway4" name="Exclusive Gateway"/>
<endEvent id="endevent1" name="End"/>
<userTask activiti:candidateUsers="${groupDataStandardServiceImpl.findAssigneesForProcess(execution,&quot;group6&quot;)}" activiti:exclusive="true" id="publishStandard" name="发布数据标准终版"/>
<sequenceFlow id="flow13" sourceRef="applyTask3" targetRef="exclusivegateway3"/>
<sequenceFlow id="flow15" sourceRef="applyTask4" targetRef="exclusivegateway4"/>
<sequenceFlow id="flow16" name="N" skipExpression="${sign=='false'}" sourceRef="exclusivegateway3" targetRef="applyTask4"/>
<sequenceFlow id="flow17" name="Y" skipExpression="${sign=='true'}" sourceRef="exclusivegateway4" targetRef="endevent1"/>
<sequenceFlow id="flow18" name="Y" skipExpression="${sign=='true'}" sourceRef="exclusivegateway3" targetRef="publishStandard"/>
<sequenceFlow id="flow19" sourceRef="publishStandard" targetRef="endevent1"/>
<sequenceFlow id="flow24" name="N" skipExpression="${sign=='false'}" sourceRef="exclusivegateway4" targetRef="writeStandardAttr"/>
<sequenceFlow id="flow25" name="N" skipExpression="${sign=='true'}" sourceRef="exclusivegateway2" targetRef="writeStandardAttr"/>
<sequenceFlow id="flow29" sourceRef="dataStandardMake" targetRef="applyTask1"/>
<sequenceFlow id="flow30" sourceRef="applyTask1" targetRef="exclusivegateway1"/>
<sequenceFlow id="flow31" sourceRef="applyTask2" targetRef="exclusivegateway2"/>
<userTask activiti:candidateUsers="${groupDataStandardServiceImpl.findAssigneesForProcess(execution,&quot;group8&quot;)}" activiti:exclusive="true" id="commentCollction" name="意见征集"/>
<userTask activiti:assignee="${assignee}" activiti:exclusive="true" id="askComment" name="意见询问">
<multiInstanceLoopCharacteristics activiti:collection="commentUsers" activiti:elementVariable="assignee" isSequential="false"/>
</userTask>
<sequenceFlow id="flow32" sourceRef="writeStandardAttr" targetRef="commentCollction"/>
<sequenceFlow id="flow33" sourceRef="commentCollction" targetRef="askComment"/>
<sequenceFlow id="flow34" sourceRef="askComment" targetRef="applyTask2"/>
</process>
<bpmndi:BPMNDiagram documentation="background=#3C3F41;count=1;horizontalcount=1;orientation=0;width=842.4;height=1195.2;imageableWidth=832.4;imageableHeight=1185.2;imageableX=5.0;imageableY=5.0" id="Diagram-_1" name="New Diagram">
<bpmndi:BPMNPlane bpmnElement="CompDataStandardProcess">
<bpmndi:BPMNShape bpmnElement="startevent1" id="Shape-startevent1">
<omgdc:Bounds height="32.0" width="32.0" x="185.0" y="380.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="dataStandardMake" id="Shape-dataStandardMake">
<omgdc:Bounds height="75.0" width="85.0" x="195.0" y="195.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="75.0" width="85.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="applyTask1" id="Shape-applyTask1">
<omgdc:Bounds height="55.0" width="105.0" x="105.0" y="15.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="55.0" width="105.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="exclusivegateway1" id="Shape-exclusivegateway1" isMarkerVisible="false">
<omgdc:Bounds height="32.0" width="32.0" x="305.0" y="65.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="selectStandardApartment" id="Shape-selectStandardApartment">
<omgdc:Bounds height="63.0" width="105.0" x="600.0" y="270.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="63.0" width="105.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="writeStandardAttr" id="Shape-writeStandardAttr">
<omgdc:Bounds height="55.0" width="105.0" x="745.0" y="370.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="55.0" width="105.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="applyTask2" id="Shape-applyTask2">
<omgdc:Bounds height="55.0" width="105.0" x="875.0" y="540.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="55.0" width="105.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="exclusivegateway2" id="Shape-exclusivegateway2" isMarkerVisible="false">
<omgdc:Bounds height="32.0" width="32.0" x="803.0" y="547.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="applyTask3" id="Shape-applyTask3">
<omgdc:Bounds height="55.0" width="105.0" x="635.0" y="540.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="55.0" width="105.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="exclusivegateway3" id="Shape-exclusivegateway3" isMarkerVisible="false">
<omgdc:Bounds height="32.0" width="32.0" x="574.0" y="547.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="applyTask4" id="Shape-applyTask4">
<omgdc:Bounds height="55.0" width="105.0" x="429.0" y="540.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="55.0" width="105.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="exclusivegateway4" id="Shape-exclusivegateway4" isMarkerVisible="false">
<omgdc:Bounds height="32.0" width="32.0" x="330.0" y="547.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="endevent1" id="Shape-endevent1">
<omgdc:Bounds height="32.0" width="32.0" x="185.0" y="550.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="publishStandard" id="Shape-publishStandard">
<omgdc:Bounds height="55.0" width="105.0" x="247.0" y="594.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="55.0" width="105.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="commentCollction" id="Shape-commentCollction">
<omgdc:Bounds height="55.0" width="105.0" x="875.0" y="370.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="55.0" width="105.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="askComment" id="Shape-askComment">
<omgdc:Bounds height="55.0" width="105.0" x="875.0" y="450.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="55.0" width="105.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="flow29" id="BPMNEdge_flow29" sourceElement="dataStandardMake" targetElement="applyTask1">
<omgdi:waypoint x="202.5" y="195.0"/>
<omgdi:waypoint x="202.5" y="70.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="-1.0" width="-1.0" x="-1.0" y="-1.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow24" id="BPMNEdge_flow24" sourceElement="exclusivegateway4" targetElement="writeStandardAttr">
<omgdi:waypoint x="350.0" y="551.0"/>
<omgdi:waypoint x="350.0" y="470.0"/>
<omgdi:waypoint x="541.0" y="470.0"/>
<omgdi:waypoint x="650.0" y="470.0"/>
<omgdi:waypoint x="797.0" y="470.0"/>
<omgdi:waypoint x="745.0" y="397.5"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="14.0" width="7.0" x="185.0" y="237.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow25" id="BPMNEdge_flow25" sourceElement="exclusivegateway2" targetElement="writeStandardAttr">
<omgdi:waypoint x="822.0" y="550.0"/>
<omgdi:waypoint x="822.0" y="483.0"/>
<omgdi:waypoint x="822.0" y="466.0"/>
<omgdi:waypoint x="822.0" y="466.0"/>
<omgdi:waypoint x="797.0" y="466.0"/>
<omgdi:waypoint x="797.0" y="466.0"/>
<omgdi:waypoint x="822.0" y="425.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="14.0" width="7.0" x="658.0" y="237.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1" sourceElement="startevent1" targetElement="dataStandardMake">
<omgdi:waypoint x="206.0" y="380.80131584642936"/>
<omgdi:waypoint x="206.0" y="270.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="-1.0" width="-1.0" x="-1.0" y="-1.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4" sourceElement="exclusivegateway1" targetElement="dataStandardMake">
<omgdi:waypoint x="337.0" y="81.0"/>
<omgdi:waypoint x="545.0" y="458.0"/>
<omgdi:waypoint x="416.0" y="458.0"/>
<omgdi:waypoint x="298.0" y="458.0"/>
<omgdi:waypoint x="280.0" y="232.5"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="14.0" width="7.0" x="381.0" y="107.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow5" id="BPMNEdge_flow5" sourceElement="exclusivegateway1" targetElement="selectStandardApartment">
<omgdi:waypoint x="337.0" y="81.0"/>
<omgdi:waypoint x="650.0" y="180.0"/>
<omgdi:waypoint x="650.0" y="270.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="14.0" width="8.0" x="401.0" y="87.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow6" id="BPMNEdge_flow6" sourceElement="selectStandardApartment" targetElement="writeStandardAttr">
<omgdi:waypoint x="705.0" y="301.5"/>
<omgdi:waypoint x="745.0" y="397.5"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="-1.0" width="-1.0" x="-1.0" y="-1.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow17" id="BPMNEdge_flow17" sourceElement="exclusivegateway4" targetElement="endevent1">
<omgdi:waypoint x="330.0" y="563.0"/>
<omgdi:waypoint x="217.0" y="566.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="14.0" width="8.0" x="165.0" y="257.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow18" id="BPMNEdge_flow18" sourceElement="exclusivegateway3" targetElement="publishStandard">
<omgdi:waypoint x="593.0" y="576.0"/>
<omgdi:waypoint x="593.0" y="621.0"/>
<omgdi:waypoint x="352.0" y="621.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="14.0" width="8.0" x="429.0" y="277.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow19" id="BPMNEdge_flow19" sourceElement="publishStandard" targetElement="endevent1">
<omgdi:waypoint x="247.0" y="620.0"/>
<omgdi:waypoint x="202.0" y="620.0"/>
<omgdi:waypoint x="202.0" y="581.9687194226713"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="-1.0" width="-1.0" x="-1.0" y="-1.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow13" id="BPMNEdge_flow13" sourceElement="applyTask3" targetElement="exclusivegateway3">
<omgdi:waypoint x="635.0" y="567.5"/>
<omgdi:waypoint x="606.0" y="563.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="-1.0" width="-1.0" x="-1.0" y="-1.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow15" id="BPMNEdge_flow15" sourceElement="applyTask4" targetElement="exclusivegateway4">
<omgdi:waypoint x="429.0" y="567.5"/>
<omgdi:waypoint x="362.0" y="563.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="-1.0" width="-1.0" x="-1.0" y="-1.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow16" id="BPMNEdge_flow16" sourceElement="exclusivegateway3" targetElement="applyTask4">
<omgdi:waypoint x="574.0" y="563.0"/>
<omgdi:waypoint x="534.0" y="567.5"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="14.0" width="7.0" x="409.0" y="257.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow31" id="BPMNEdge_flow31" sourceElement="applyTask2" targetElement="exclusivegateway2">
<omgdi:waypoint x="875.0" y="567.5"/>
<omgdi:waypoint x="835.0" y="563.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="-1.0" width="-1.0" x="-1.0" y="-1.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow32" id="BPMNEdge_flow32" sourceElement="writeStandardAttr" targetElement="commentCollction">
<omgdi:waypoint x="850.0" y="397.5"/>
<omgdi:waypoint x="875.0" y="397.5"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="-1.0" width="-1.0" x="-1.0" y="-1.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow11" id="BPMNEdge_flow11" sourceElement="exclusivegateway2" targetElement="applyTask3">
<omgdi:waypoint x="803.0" y="563.0"/>
<omgdi:waypoint x="740.0" y="567.5"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="14.0" width="8.0" x="638.0" y="257.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow33" id="BPMNEdge_flow33" sourceElement="commentCollction" targetElement="askComment">
<omgdi:waypoint x="927.5" y="425.0"/>
<omgdi:waypoint x="927.5" y="450.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="-1.0" width="-1.0" x="-1.0" y="-1.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow34" id="BPMNEdge_flow34" sourceElement="askComment" targetElement="applyTask2">
<omgdi:waypoint x="927.5" y="505.0"/>
<omgdi:waypoint x="927.5" y="540.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="-1.0" width="-1.0" x="-1.0" y="-1.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow30" id="BPMNEdge_flow30" sourceElement="applyTask1" targetElement="exclusivegateway1">
<omgdi:waypoint x="210.0" y="42.5"/>
<omgdi:waypoint x="305.0" y="81.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="-1.0" width="-1.0" x="-1.0" y="-1.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
<process id="CompDataStandardProcess" name="专业公司数据标准流程" isExecutable="true">
<startEvent id="startevent1" name="Start"></startEvent>
<userTask id="dataStandardMake" name="提出数据标准编制需求" activiti:assignee="${inputUser}"></userTask>
<userTask id="applyTask1" name="审批(报表中心1)" activiti:candidateUsers="${groupDataStandardServiceImpl.findAssigneesForProcess(execution,&quot;group1&quot;)}"></userTask>
<exclusiveGateway id="exclusivegateway1" name="Exclusive Gateway"></exclusiveGateway>
<sequenceFlow id="flow1" sourceRef="startevent1" targetRef="dataStandardMake"></sequenceFlow>
<sequenceFlow id="flow4" name="N" sourceRef="exclusivegateway1" targetRef="dataStandardMake" skipExpression="${sign=='false'}"></sequenceFlow>
<userTask id="selectStandardApartment" name="确定数据标准责任部门" activiti:candidateUsers="${groupDataStandardServiceImpl.findAssigneesForProcess(execution,&quot;group2&quot;)}"></userTask>
<userTask id="writeStandardAttr" name="填写数据标准属性">
<extensionElements>
<activiti:taskListener event="create" class="com.keymobile.activiti.listener.WirteStandardAttrListener"></activiti:taskListener>
</extensionElements>
</userTask>
<sequenceFlow id="flow5" name="Y" sourceRef="exclusivegateway1" targetRef="selectStandardApartment" skipExpression="${sign=='true'}"></sequenceFlow>
<sequenceFlow id="flow6" sourceRef="selectStandardApartment" targetRef="writeStandardAttr"></sequenceFlow>
<userTask id="applyTask2" name="审批(报表中心2)" activiti:candidateUsers="${groupDataStandardServiceImpl.findAssigneesForProcess(execution,&quot;group3&quot;)}"></userTask>
<exclusiveGateway id="exclusivegateway2" name="Exclusive Gateway"></exclusiveGateway>
<userTask id="applyTask3" name="审批(科技运营部)" activiti:candidateUsers="${groupDataStandardServiceImpl.findAssigneesForProcess(execution,&quot;group4&quot;)}"></userTask>
<sequenceFlow id="flow11" name="Y" sourceRef="exclusivegateway2" targetRef="applyTask3" skipExpression="${sign=='true'}"></sequenceFlow>
<exclusiveGateway id="exclusivegateway3" name="Exclusive Gateway"></exclusiveGateway>
<userTask id="applyTask4" name="审批(报表中心4)" activiti:candidateUsers="${groupDataStandardServiceImpl.findAssigneesForProcess(execution,&quot;group5&quot;)}"></userTask>
<exclusiveGateway id="exclusivegateway4" name="Exclusive Gateway"></exclusiveGateway>
<endEvent id="endevent1" name="End"></endEvent>
<userTask id="publishStandard" name="发布数据标准终版" activiti:candidateUsers="${groupDataStandardServiceImpl.findAssigneesForProcess(execution,&quot;group6&quot;)}"></userTask>
<sequenceFlow id="flow13" sourceRef="applyTask3" targetRef="exclusivegateway3"></sequenceFlow>
<sequenceFlow id="flow15" sourceRef="applyTask4" targetRef="exclusivegateway4"></sequenceFlow>
<sequenceFlow id="flow16" name="N" sourceRef="exclusivegateway3" targetRef="applyTask4" skipExpression="${sign=='false'}"></sequenceFlow>
<sequenceFlow id="flow17" name="Y" sourceRef="exclusivegateway4" targetRef="endevent1" skipExpression="${sign=='true'}"></sequenceFlow>
<sequenceFlow id="flow18" name="Y" sourceRef="exclusivegateway3" targetRef="publishStandard" skipExpression="${sign=='true'}"></sequenceFlow>
<sequenceFlow id="flow19" sourceRef="publishStandard" targetRef="endevent1"></sequenceFlow>
<sequenceFlow id="flow24" name="N" sourceRef="exclusivegateway4" targetRef="writeStandardAttr" skipExpression="${sign=='false'}"></sequenceFlow>
<sequenceFlow id="flow25" name="N" sourceRef="exclusivegateway2" targetRef="writeStandardAttr" skipExpression="${sign=='true'}"></sequenceFlow>
<sequenceFlow id="flow28" sourceRef="writeStandardAttr" targetRef="applyTask2"></sequenceFlow>
<sequenceFlow id="flow29" sourceRef="dataStandardMake" targetRef="applyTask1"></sequenceFlow>
<sequenceFlow id="flow30" sourceRef="applyTask1" targetRef="exclusivegateway1"></sequenceFlow>
<sequenceFlow id="flow31" sourceRef="applyTask2" targetRef="exclusivegateway2"></sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_CompDataStandardProcess">
<bpmndi:BPMNPlane bpmnElement="CompDataStandardProcess" id="BPMNPlane_CompDataStandardProcess">
<bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
<omgdc:Bounds height="35.0" width="35.0" x="20.0" y="70.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="dataStandardMake" id="BPMNShape_dataStandardMake">
<omgdc:Bounds height="71.0" width="105.0" x="82.0" y="52.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="applyTask1" id="BPMNShape_applyTask1">
<omgdc:Bounds height="55.0" width="105.0" x="210.0" y="60.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="exclusivegateway1" id="BPMNShape_exclusivegateway1">
<omgdc:Bounds height="40.0" width="40.0" x="361.0" y="67.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="selectStandardApartment" id="BPMNShape_selectStandardApartment">
<omgdc:Bounds height="63.0" width="105.0" x="450.0" y="56.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="writeStandardAttr" id="BPMNShape_writeStandardAttr">
<omgdc:Bounds height="55.0" width="105.0" x="580.0" y="60.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="applyTask2" id="BPMNShape_applyTask2">
<omgdc:Bounds height="55.0" width="105.0" x="710.0" y="230.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="exclusivegateway2" id="BPMNShape_exclusivegateway2">
<omgdc:Bounds height="40.0" width="40.0" x="638.0" y="237.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="applyTask3" id="BPMNShape_applyTask3">
<omgdc:Bounds height="55.0" width="105.0" x="470.0" y="230.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="exclusivegateway3" id="BPMNShape_exclusivegateway3">
<omgdc:Bounds height="40.0" width="40.0" x="409.0" y="237.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="applyTask4" id="BPMNShape_applyTask4">
<omgdc:Bounds height="55.0" width="105.0" x="264.0" y="230.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="exclusivegateway4" id="BPMNShape_exclusivegateway4">
<omgdc:Bounds height="40.0" width="40.0" x="165.0" y="237.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
<omgdc:Bounds height="35.0" width="35.0" x="20.0" y="240.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="publishStandard" id="BPMNShape_publishStandard">
<omgdc:Bounds height="55.0" width="105.0" x="82.0" y="284.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
<omgdi:waypoint x="55.0" y="87.0"></omgdi:waypoint>
<omgdi:waypoint x="82.0" y="87.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4">
<omgdi:waypoint x="381.0" y="107.0"></omgdi:waypoint>
<omgdi:waypoint x="380.0" y="148.0"></omgdi:waypoint>
<omgdi:waypoint x="251.0" y="148.0"></omgdi:waypoint>
<omgdi:waypoint x="133.0" y="148.0"></omgdi:waypoint>
<omgdi:waypoint x="134.0" y="123.0"></omgdi:waypoint>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="14.0" width="7.0" x="381.0" y="107.0"></omgdc:Bounds>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow5" id="BPMNEdge_flow5">
<omgdi:waypoint x="401.0" y="87.0"></omgdi:waypoint>
<omgdi:waypoint x="450.0" y="87.0"></omgdi:waypoint>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="14.0" width="8.0" x="401.0" y="87.0"></omgdc:Bounds>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow6" id="BPMNEdge_flow6">
<omgdi:waypoint x="555.0" y="87.0"></omgdi:waypoint>
<omgdi:waypoint x="580.0" y="87.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow11" id="BPMNEdge_flow11">
<omgdi:waypoint x="638.0" y="257.0"></omgdi:waypoint>
<omgdi:waypoint x="575.0" y="257.0"></omgdi:waypoint>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="14.0" width="8.0" x="638.0" y="257.0"></omgdc:Bounds>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow13" id="BPMNEdge_flow13">
<omgdi:waypoint x="470.0" y="257.0"></omgdi:waypoint>
<omgdi:waypoint x="449.0" y="257.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow15" id="BPMNEdge_flow15">
<omgdi:waypoint x="264.0" y="257.0"></omgdi:waypoint>
<omgdi:waypoint x="205.0" y="257.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow16" id="BPMNEdge_flow16">
<omgdi:waypoint x="409.0" y="257.0"></omgdi:waypoint>
<omgdi:waypoint x="369.0" y="257.0"></omgdi:waypoint>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="14.0" width="7.0" x="409.0" y="257.0"></omgdc:Bounds>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow17" id="BPMNEdge_flow17">
<omgdi:waypoint x="165.0" y="257.0"></omgdi:waypoint>
<omgdi:waypoint x="55.0" y="257.0"></omgdi:waypoint>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="14.0" width="8.0" x="165.0" y="257.0"></omgdc:Bounds>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow18" id="BPMNEdge_flow18">
<omgdi:waypoint x="429.0" y="277.0"></omgdi:waypoint>
<omgdi:waypoint x="428.0" y="311.0"></omgdi:waypoint>
<omgdi:waypoint x="187.0" y="311.0"></omgdi:waypoint>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="14.0" width="8.0" x="429.0" y="277.0"></omgdc:Bounds>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow19" id="BPMNEdge_flow19">
<omgdi:waypoint x="82.0" y="311.0"></omgdi:waypoint>
<omgdi:waypoint x="37.0" y="310.0"></omgdi:waypoint>
<omgdi:waypoint x="37.0" y="275.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow24" id="BPMNEdge_flow24">
<omgdi:waypoint x="185.0" y="237.0"></omgdi:waypoint>
<omgdi:waypoint x="185.0" y="160.0"></omgdi:waypoint>
<omgdi:waypoint x="376.0" y="160.0"></omgdi:waypoint>
<omgdi:waypoint x="485.0" y="160.0"></omgdi:waypoint>
<omgdi:waypoint x="632.0" y="160.0"></omgdi:waypoint>
<omgdi:waypoint x="632.0" y="115.0"></omgdi:waypoint>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="14.0" width="7.0" x="185.0" y="237.0"></omgdc:Bounds>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow25" id="BPMNEdge_flow25">
<omgdi:waypoint x="658.0" y="237.0"></omgdi:waypoint>
<omgdi:waypoint x="657.0" y="173.0"></omgdi:waypoint>
<omgdi:waypoint x="657.0" y="156.0"></omgdi:waypoint>
<omgdi:waypoint x="657.0" y="156.0"></omgdi:waypoint>
<omgdi:waypoint x="632.0" y="156.0"></omgdi:waypoint>
<omgdi:waypoint x="632.0" y="156.0"></omgdi:waypoint>
<omgdi:waypoint x="632.0" y="115.0"></omgdi:waypoint>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="14.0" width="7.0" x="658.0" y="237.0"></omgdc:Bounds>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow28" id="BPMNEdge_flow28">
<omgdi:waypoint x="685.0" y="87.0"></omgdi:waypoint>
<omgdi:waypoint x="762.0" y="87.0"></omgdi:waypoint>
<omgdi:waypoint x="762.0" y="230.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow29" id="BPMNEdge_flow29">
<omgdi:waypoint x="187.0" y="87.0"></omgdi:waypoint>
<omgdi:waypoint x="210.0" y="87.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow30" id="BPMNEdge_flow30">
<omgdi:waypoint x="315.0" y="87.0"></omgdi:waypoint>
<omgdi:waypoint x="361.0" y="87.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow31" id="BPMNEdge_flow31">
<omgdi:waypoint x="710.0" y="257.0"></omgdi:waypoint>
<omgdi:waypoint x="678.0" y="257.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
<process id="groupDataStandardProcess" name="集团数据标准流程" isExecutable="true">
<startEvent id="startevent1" name="Start"></startEvent>
<userTask id="dataStandardMake" name="提出数据标准编制需求" activiti:assignee="${inputUser}"></userTask>
<userTask id="applyTask1" name="审批(报表中心1)" activiti:candidateUsers="${groupDataStandardServiceImpl.findAssigneesForProcess(execution,&quot;group1&quot;)}"></userTask>
<exclusiveGateway id="exclusivegateway1" name="Exclusive Gateway"></exclusiveGateway>
<sequenceFlow id="flow1" sourceRef="startevent1" targetRef="dataStandardMake"></sequenceFlow>
<sequenceFlow id="flow4" name="N" sourceRef="exclusivegateway1" targetRef="dataStandardMake" skipExpression="${sign=='false'}"></sequenceFlow>
<userTask id="selectStandardApartment" name="确定数据标准责任部门" activiti:candidateUsers="${groupDataStandardServiceImpl.findAssigneesForProcess(execution,&quot;group2&quot;)}"></userTask>
<userTask id="writeStandardAttr" name="填写数据标准属性">
<extensionElements>
<activiti:taskListener event="create" class="com.keymobile.activiti.listener.WirteStandardAttrListener"></activiti:taskListener>
</extensionElements>
</userTask>
<sequenceFlow id="flow5" name="Y" sourceRef="exclusivegateway1" targetRef="selectStandardApartment" skipExpression="${sign=='true'}"></sequenceFlow>
<sequenceFlow id="flow6" sourceRef="selectStandardApartment" targetRef="writeStandardAttr"></sequenceFlow>
<userTask id="applyTask2" name="审批(报表中心2)" activiti:candidateUsers="${groupDataStandardServiceImpl.findAssigneesForProcess(execution,&quot;group3&quot;)}"></userTask>
<exclusiveGateway id="exclusivegateway2" name="Exclusive Gateway"></exclusiveGateway>
<userTask id="applyTask3" name="审批(科技运营部)" activiti:candidateUsers="${groupDataStandardServiceImpl.findAssigneesForProcess(execution,&quot;group4&quot;)}"></userTask>
<sequenceFlow id="flow11" name="Y" sourceRef="exclusivegateway2" targetRef="applyTask3" skipExpression="${sign=='true'}"></sequenceFlow>
<exclusiveGateway id="exclusivegateway3" name="Exclusive Gateway"></exclusiveGateway>
<userTask id="applyTask4" name="审批(报表中心4)" activiti:candidateUsers="${groupDataStandardServiceImpl.findAssigneesForProcess(execution,&quot;group5&quot;)}"></userTask>
<exclusiveGateway id="exclusivegateway4" name="Exclusive Gateway"></exclusiveGateway>
<endEvent id="endevent1" name="End"></endEvent>
<userTask id="publishStandard" name="发布数据标准终版" activiti:candidateUsers="${groupDataStandardServiceImpl.findAssigneesForProcess(execution,&quot;group6&quot;)}"></userTask>
<sequenceFlow id="flow13" sourceRef="applyTask3" targetRef="exclusivegateway3"></sequenceFlow>
<sequenceFlow id="flow15" sourceRef="applyTask4" targetRef="exclusivegateway4"></sequenceFlow>
<sequenceFlow id="flow16" name="N" sourceRef="exclusivegateway3" targetRef="applyTask4" skipExpression="${sign=='false'}"></sequenceFlow>
<sequenceFlow id="flow17" name="Y" sourceRef="exclusivegateway4" targetRef="endevent1" skipExpression="${sign=='true'}"></sequenceFlow>
<sequenceFlow id="flow18" name="Y" sourceRef="exclusivegateway3" targetRef="publishStandard" skipExpression="${sign=='true'}"></sequenceFlow>
<sequenceFlow id="flow19" sourceRef="publishStandard" targetRef="endevent1"></sequenceFlow>
<sequenceFlow id="flow24" name="N" sourceRef="exclusivegateway4" targetRef="writeStandardAttr" skipExpression="${sign=='false'}"></sequenceFlow>
<sequenceFlow id="flow25" name="N" sourceRef="exclusivegateway2" targetRef="writeStandardAttr" skipExpression="${sign=='false'}"></sequenceFlow>
<sequenceFlow id="flow28" sourceRef="writeStandardAttr" targetRef="applyTask2"></sequenceFlow>
<sequenceFlow id="flow29" sourceRef="dataStandardMake" targetRef="applyTask1"></sequenceFlow>
<sequenceFlow id="flow30" sourceRef="applyTask1" targetRef="exclusivegateway1"></sequenceFlow>
<sequenceFlow id="flow31" sourceRef="applyTask2" targetRef="exclusivegateway2"></sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_groupDataStandardProcess">
<bpmndi:BPMNPlane bpmnElement="groupDataStandardProcess" id="BPMNPlane_groupDataStandardProcess">
<bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
<omgdc:Bounds height="35.0" width="35.0" x="20.0" y="70.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="dataStandardMake" id="BPMNShape_dataStandardMake">
<omgdc:Bounds height="71.0" width="105.0" x="82.0" y="52.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="applyTask1" id="BPMNShape_applyTask1">
<omgdc:Bounds height="55.0" width="105.0" x="210.0" y="60.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="exclusivegateway1" id="BPMNShape_exclusivegateway1">
<omgdc:Bounds height="40.0" width="40.0" x="361.0" y="67.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="selectStandardApartment" id="BPMNShape_selectStandardApartment">
<omgdc:Bounds height="63.0" width="105.0" x="450.0" y="56.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="writeStandardAttr" id="BPMNShape_writeStandardAttr">
<omgdc:Bounds height="55.0" width="105.0" x="580.0" y="60.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="applyTask2" id="BPMNShape_applyTask2">
<omgdc:Bounds height="55.0" width="105.0" x="710.0" y="230.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="exclusivegateway2" id="BPMNShape_exclusivegateway2">
<omgdc:Bounds height="40.0" width="40.0" x="638.0" y="237.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="applyTask3" id="BPMNShape_applyTask3">
<omgdc:Bounds height="55.0" width="105.0" x="470.0" y="230.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="exclusivegateway3" id="BPMNShape_exclusivegateway3">
<omgdc:Bounds height="40.0" width="40.0" x="409.0" y="237.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="applyTask4" id="BPMNShape_applyTask4">
<omgdc:Bounds height="55.0" width="105.0" x="264.0" y="230.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="exclusivegateway4" id="BPMNShape_exclusivegateway4">
<omgdc:Bounds height="40.0" width="40.0" x="165.0" y="237.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
<omgdc:Bounds height="35.0" width="35.0" x="20.0" y="240.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="publishStandard" id="BPMNShape_publishStandard">
<omgdc:Bounds height="55.0" width="105.0" x="82.0" y="284.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
<omgdi:waypoint x="55.0" y="87.0"></omgdi:waypoint>
<omgdi:waypoint x="82.0" y="87.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4">
<omgdi:waypoint x="381.0" y="107.0"></omgdi:waypoint>
<omgdi:waypoint x="380.0" y="148.0"></omgdi:waypoint>
<omgdi:waypoint x="251.0" y="148.0"></omgdi:waypoint>
<omgdi:waypoint x="133.0" y="148.0"></omgdi:waypoint>
<omgdi:waypoint x="134.0" y="123.0"></omgdi:waypoint>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="14.0" width="7.0" x="381.0" y="107.0"></omgdc:Bounds>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow5" id="BPMNEdge_flow5">
<omgdi:waypoint x="401.0" y="87.0"></omgdi:waypoint>
<omgdi:waypoint x="450.0" y="87.0"></omgdi:waypoint>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="14.0" width="8.0" x="401.0" y="87.0"></omgdc:Bounds>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow6" id="BPMNEdge_flow6">
<omgdi:waypoint x="555.0" y="87.0"></omgdi:waypoint>
<omgdi:waypoint x="580.0" y="87.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow11" id="BPMNEdge_flow11">
<omgdi:waypoint x="638.0" y="257.0"></omgdi:waypoint>
<omgdi:waypoint x="575.0" y="257.0"></omgdi:waypoint>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="14.0" width="100.0" x="638.0" y="257.0"></omgdc:Bounds>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow13" id="BPMNEdge_flow13">
<omgdi:waypoint x="470.0" y="257.0"></omgdi:waypoint>
<omgdi:waypoint x="449.0" y="257.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow15" id="BPMNEdge_flow15">
<omgdi:waypoint x="264.0" y="257.0"></omgdi:waypoint>
<omgdi:waypoint x="205.0" y="257.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow16" id="BPMNEdge_flow16">
<omgdi:waypoint x="409.0" y="257.0"></omgdi:waypoint>
<omgdi:waypoint x="369.0" y="257.0"></omgdi:waypoint>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="14.0" width="7.0" x="409.0" y="257.0"></omgdc:Bounds>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow17" id="BPMNEdge_flow17">
<omgdi:waypoint x="165.0" y="257.0"></omgdi:waypoint>
<omgdi:waypoint x="55.0" y="257.0"></omgdi:waypoint>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="14.0" width="100.0" x="165.0" y="257.0"></omgdc:Bounds>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow18" id="BPMNEdge_flow18">
<omgdi:waypoint x="429.0" y="277.0"></omgdi:waypoint>
<omgdi:waypoint x="428.0" y="311.0"></omgdi:waypoint>
<omgdi:waypoint x="187.0" y="311.0"></omgdi:waypoint>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="14.0" width="8.0" x="429.0" y="277.0"></omgdc:Bounds>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow19" id="BPMNEdge_flow19">
<omgdi:waypoint x="82.0" y="311.0"></omgdi:waypoint>
<omgdi:waypoint x="37.0" y="310.0"></omgdi:waypoint>
<omgdi:waypoint x="37.0" y="275.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow24" id="BPMNEdge_flow24">
<omgdi:waypoint x="185.0" y="237.0"></omgdi:waypoint>
<omgdi:waypoint x="185.0" y="160.0"></omgdi:waypoint>
<omgdi:waypoint x="376.0" y="160.0"></omgdi:waypoint>
<omgdi:waypoint x="485.0" y="160.0"></omgdi:waypoint>
<omgdi:waypoint x="632.0" y="160.0"></omgdi:waypoint>
<omgdi:waypoint x="632.0" y="115.0"></omgdi:waypoint>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="14.0" width="100.0" x="185.0" y="237.0"></omgdc:Bounds>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow25" id="BPMNEdge_flow25">
<omgdi:waypoint x="658.0" y="237.0"></omgdi:waypoint>
<omgdi:waypoint x="657.0" y="173.0"></omgdi:waypoint>
<omgdi:waypoint x="657.0" y="156.0"></omgdi:waypoint>
<omgdi:waypoint x="657.0" y="156.0"></omgdi:waypoint>
<omgdi:waypoint x="632.0" y="156.0"></omgdi:waypoint>
<omgdi:waypoint x="632.0" y="156.0"></omgdi:waypoint>
<omgdi:waypoint x="632.0" y="115.0"></omgdi:waypoint>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="14.0" width="100.0" x="658.0" y="237.0"></omgdc:Bounds>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow28" id="BPMNEdge_flow28">
<omgdi:waypoint x="685.0" y="87.0"></omgdi:waypoint>
<omgdi:waypoint x="762.0" y="87.0"></omgdi:waypoint>
<omgdi:waypoint x="762.0" y="230.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow29" id="BPMNEdge_flow29">
<omgdi:waypoint x="187.0" y="87.0"></omgdi:waypoint>
<omgdi:waypoint x="210.0" y="87.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow30" id="BPMNEdge_flow30">
<omgdi:waypoint x="315.0" y="87.0"></omgdi:waypoint>
<omgdi:waypoint x="361.0" y="87.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow31" id="BPMNEdge_flow31">
<omgdi:waypoint x="710.0" y="257.0"></omgdi:waypoint>
<omgdi:waypoint x="678.0" y="257.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:tns="http://www.activiti.org/test" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" expressionLanguage="http://www.w3.org/1999/XPath" id="m1583334145142" name="" targetNamespace="http://www.activiti.org/test" typeLanguage="http://www.w3.org/2001/XMLSchema">
<process id="RecordProcess" isClosed="false" isExecutable="true" name="RecordProcess" processType="None">
<startEvent id="startEvent" name="流程开始">
<extensionElements>
<activiti:executionListener event="start"/>
</extensionElements>
</startEvent>
<endEvent id="endEvent" name="End"/>
<userTask activiti:assignee="chenws" activiti:candidateUsers="${activityDemoServiceImpl.findUsersForSP(execution)}" activiti:exclusive="true" id="checkData" name="审批数据"/>
<exclusiveGateway gatewayDirection="Unspecified" id="isDataPass" name="数据是否正确通过">
<extensionElements>
<activiti:executionListener event="start">
<activiti:field>
<activiti:string/>
</activiti:field>
</activiti:executionListener>
</extensionElements>
</exclusiveGateway>
<sequenceFlow id="flow5" sourceRef="checkData" targetRef="isDataPass"/>
<userTask activiti:assignee="管理" activiti:exclusive="true" id="addExcel" name="添加补录模板">
<extensionElements>
<activiti:taskListener event="create"/>
</extensionElements>
</userTask>
<userTask activiti:assignee="chenws" activiti:candidateUsers="${userIds}" activiti:exclusive="true" id="addData" name="补录人员填写模板"/>
<sequenceFlow id="_7" sourceRef="addExcel" targetRef="addData"/>
<sequenceFlow id="_8" sourceRef="addData" targetRef="checkData"/>
<sequenceFlow id="_10" sourceRef="startEvent" targetRef="addExcel"/>
<sequenceFlow id="_12" skipExpression="${sign=='false'}" sourceRef="isDataPass" targetRef="addData">
<conditionExpression xsi:type="tFormalExpression">
<![CDATA[
]]>
</conditionExpression>
</sequenceFlow>
<sequenceFlow id="_13" sourceRef="isDataPass" targetRef="endEvent">
<extensionElements>
<activiti:executionListener event="start"/>
</extensionElements>
<conditionExpression xsi:type="tFormalExpression">
<![CDATA[
]]>
</conditionExpression>
</sequenceFlow>
</process>
<bpmndi:BPMNDiagram documentation="background=#3C3F41;count=1;horizontalcount=1;orientation=0;width=842.4;height=1195.2;imageableWidth=832.4;imageableHeight=1185.2;imageableX=5.0;imageableY=5.0" id="Diagram-_1" name="New Diagram">
<bpmndi:BPMNPlane bpmnElement="RecordProcess">
<bpmndi:BPMNShape bpmnElement="startEvent" id="Shape-startEvent">
<omgdc:Bounds height="32.0" width="32.0" x="450.0" y="45.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="endEvent" id="Shape-endEvent">
<omgdc:Bounds height="32.0" width="32.0" x="455.0" y="675.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="checkData" id="Shape-checkData">
<omgdc:Bounds height="55.0" width="105.0" x="410.0" y="445.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="55.0" width="105.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="isDataPass" id="Shape-isDataPass" isMarkerVisible="false">
<omgdc:Bounds height="32.0" width="32.0" x="455.0" y="545.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="addExcel" id="Shape-addExcel">
<omgdc:Bounds height="55.0" width="105.0" x="415.0" y="205.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="55.0" width="105.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="addData" id="Shape-addData">
<omgdc:Bounds height="70.0" width="105.0" x="400.0" y="315.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="70.0" width="105.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="_13" id="BPMNEdge__13" sourceElement="isDataPass" targetElement="endEvent">
<omgdi:waypoint x="471.0" y="577.0"/>
<omgdi:waypoint x="471.0" y="675.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="_12" id="BPMNEdge__12" sourceElement="isDataPass" targetElement="addData">
<omgdi:waypoint x="458.0" y="558.0"/>
<omgdi:waypoint x="350.0" y="558.0"/>
<omgdi:waypoint x="400.0" y="350.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="-1.0" width="-1.0" x="-1.0" y="-1.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow5" id="BPMNEdge_flow5" sourceElement="checkData" targetElement="isDataPass">
<omgdi:waypoint x="471.0" y="500.0"/>
<omgdi:waypoint x="471.0" y="545.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="-1.0" width="-1.0" x="-1.0" y="-1.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="_7" id="BPMNEdge__7" sourceElement="addExcel" targetElement="addData">
<omgdi:waypoint x="460.0" y="260.0"/>
<omgdi:waypoint x="460.0" y="315.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="_8" id="BPMNEdge__8" sourceElement="addData" targetElement="checkData">
<omgdi:waypoint x="457.5" y="385.0"/>
<omgdi:waypoint x="457.5" y="445.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="_10" id="BPMNEdge__10" sourceElement="startEvent" targetElement="addExcel">
<omgdi:waypoint x="466.0" y="77.0"/>
<omgdi:waypoint x="466.0" y="205.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:tns="http://www.activiti.org/testm1583600477586" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" expressionLanguage="http://www.w3.org/1999/XPath" id="m1583600477586" name="" targetNamespace="http://www.activiti.org/testm1583600477586" typeLanguage="http://www.w3.org/2001/XMLSchema"> <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:activiti="http://activiti.org/bpmn"
<process id="RecordStandardProcess" isClosed="false" isExecutable="true" name="RecordStandardProcess" processType="None"> xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
<startEvent id="RecordStartEvent" name="StartEvent"/> xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:tns="http://www.activiti.org/testm1583600477586"
<userTask activiti:assignee="${userId}" activiti:exclusive="true" id="addData" name="填写补录报表"/> xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<userTask activiti:assignee="${managerId}" activiti:exclusive="true" id="addExcel" name="发起流程添加模板"/> expressionLanguage="http://www.w3.org/1999/XPath" id="m1583600477586" name=""
<userTask activiti:assignee="${judgeId}" activiti:exclusive="true" id="JudgeData" name="审核数据"/> targetNamespace="http://www.activiti.org/testm1583600477586"
<endEvent id="RecordEndEvent" name="EndEvent"/> typeLanguage="http://www.w3.org/2001/XMLSchema">
<sequenceFlow id="_8" sourceRef="RecordStartEvent" targetRef="addExcel"/> <process id="RecordStandardProcess" isClosed="false" isExecutable="true" name="RecordStandardProcess"
<sequenceFlow id="_9" sourceRef="addExcel" targetRef="addData"/> processType="None">
<sequenceFlow id="_7" sourceRef="addData" targetRef="JudgeData"/> <startEvent id="RecordStartEvent" name="StartEvent"/>
<exclusiveGateway gatewayDirection="Unspecified" id="JudgeGateway" name="JudgeGateway"/> <userTask activiti:assignee="${userId}" activiti:exclusive="true" id="addData" name="填写补录报表"/>
<sequenceFlow id="_11" sourceRef="JudgeData" targetRef="JudgeGateway"/> <userTask activiti:assignee="${managerId}" activiti:exclusive="true" id="addExcel" name="发起流程添加模板"/>
<sequenceFlow id="_12" sourceRef="JudgeGateway" targetRef="RecordEndEvent"> <userTask activiti:assignee="${judgeId}" activiti:exclusive="true" id="JudgeData" name="审核数据"/>
<conditionExpression xsi:type="tFormalExpression"> <endEvent id="RecordEndEvent" name="EndEvent"/>
<![CDATA[${pass == 'true'}]]> <sequenceFlow id="_8" sourceRef="RecordStartEvent" targetRef="addExcel"/>
</conditionExpression> <sequenceFlow id="_9" sourceRef="addExcel" targetRef="addData"/>
</sequenceFlow> <sequenceFlow id="_7" sourceRef="addData" targetRef="JudgeData"/>
<sequenceFlow id="_13" sourceRef="JudgeGateway" targetRef="addData"> <exclusiveGateway gatewayDirection="Unspecified" id="JudgeGateway" name="JudgeGateway"/>
<conditionExpression xsi:type="tFormalExpression"> <sequenceFlow id="_11" sourceRef="JudgeData" targetRef="JudgeGateway"/>
<![CDATA[${pass == 'false'}]]> <sequenceFlow id="_12" sourceRef="JudgeGateway" targetRef="RecordEndEvent">
</conditionExpression> <conditionExpression xsi:type="tFormalExpression">
</sequenceFlow> <![CDATA[${pass == 'true'}]]>
</process> </conditionExpression>
<bpmndi:BPMNDiagram documentation="background=#3C3F41;count=1;horizontalcount=1;orientation=0;width=842.4;height=1195.2;imageableWidth=832.4;imageableHeight=1185.2;imageableX=5.0;imageableY=5.0" id="Diagram-_1" name="New Diagram"> </sequenceFlow>
<bpmndi:BPMNPlane bpmnElement="RecordStandardProcess"> <sequenceFlow id="_13" sourceRef="JudgeGateway" targetRef="addData">
<bpmndi:BPMNShape bpmnElement="RecordStartEvent" id="Shape-RecordStartEvent"> <conditionExpression xsi:type="tFormalExpression">
<dc:Bounds height="32.0" width="32.0" x="625.0" y="35.0"/> <![CDATA[${pass == 'false'}]]>
<bpmndi:BPMNLabel> </conditionExpression>
<dc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/> </sequenceFlow>
</bpmndi:BPMNLabel> </process>
</bpmndi:BPMNShape> <bpmndi:BPMNDiagram
<bpmndi:BPMNShape bpmnElement="addData" id="Shape-addData"> documentation="background=#3C3F41;count=1;horizontalcount=1;orientation=0;width=842.4;height=1195.2;imageableWidth=832.4;imageableHeight=1185.2;imageableX=5.0;imageableY=5.0"
<dc:Bounds height="55.0" width="85.0" x="595.0" y="215.0"/> id="Diagram-_1" name="New Diagram">
<bpmndi:BPMNLabel> <bpmndi:BPMNPlane bpmnElement="RecordStandardProcess">
<dc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/> <bpmndi:BPMNShape bpmnElement="RecordStartEvent" id="Shape-RecordStartEvent">
</bpmndi:BPMNLabel> <dc:Bounds height="32.0" width="32.0" x="625.0" y="35.0"/>
</bpmndi:BPMNShape> <bpmndi:BPMNLabel>
<bpmndi:BPMNShape bpmnElement="addExcel" id="Shape-addExcel"> <dc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
<dc:Bounds height="55.0" width="85.0" x="600.0" y="110.0"/> </bpmndi:BPMNLabel>
<bpmndi:BPMNLabel> </bpmndi:BPMNShape>
<dc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/> <bpmndi:BPMNShape bpmnElement="addData" id="Shape-addData">
</bpmndi:BPMNLabel> <dc:Bounds height="55.0" width="85.0" x="595.0" y="215.0"/>
</bpmndi:BPMNShape> <bpmndi:BPMNLabel>
<bpmndi:BPMNShape bpmnElement="JudgeData" id="Shape-JudgeData"> <dc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/>
<dc:Bounds height="55.0" width="85.0" x="590.0" y="325.0"/> </bpmndi:BPMNLabel>
<bpmndi:BPMNLabel> </bpmndi:BPMNShape>
<dc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/> <bpmndi:BPMNShape bpmnElement="addExcel" id="Shape-addExcel">
</bpmndi:BPMNLabel> <dc:Bounds height="55.0" width="85.0" x="600.0" y="110.0"/>
</bpmndi:BPMNShape> <bpmndi:BPMNLabel>
<bpmndi:BPMNShape bpmnElement="RecordEndEvent" id="Shape-RecordEndEvent"> <dc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/>
<dc:Bounds height="32.0" width="32.0" x="620.0" y="565.0"/> </bpmndi:BPMNLabel>
<bpmndi:BPMNLabel> </bpmndi:BPMNShape>
<dc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/> <bpmndi:BPMNShape bpmnElement="JudgeData" id="Shape-JudgeData">
</bpmndi:BPMNLabel> <dc:Bounds height="55.0" width="85.0" x="590.0" y="325.0"/>
</bpmndi:BPMNShape> <bpmndi:BPMNLabel>
<bpmndi:BPMNShape bpmnElement="JudgeGateway" id="Shape-JudgeGateway" isMarkerVisible="false"> <dc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/>
<dc:Bounds height="32.0" width="32.0" x="620.0" y="455.0"/> </bpmndi:BPMNLabel>
<bpmndi:BPMNLabel> </bpmndi:BPMNShape>
<dc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/> <bpmndi:BPMNShape bpmnElement="RecordEndEvent" id="Shape-RecordEndEvent">
</bpmndi:BPMNLabel> <dc:Bounds height="32.0" width="32.0" x="620.0" y="565.0"/>
</bpmndi:BPMNShape> <bpmndi:BPMNLabel>
<bpmndi:BPMNEdge bpmnElement="_13" id="BPMNEdge__13" sourceElement="_10" targetElement="_3"> <dc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
<di:waypoint x="620.0" y="471.0"/> </bpmndi:BPMNLabel>
<di:waypoint x="500.0" y="345.0"/> </bpmndi:BPMNShape>
<di:waypoint x="595.0" y="242.5"/> <bpmndi:BPMNShape bpmnElement="JudgeGateway" id="Shape-JudgeGateway" isMarkerVisible="false">
<bpmndi:BPMNLabel> <dc:Bounds height="32.0" width="32.0" x="620.0" y="455.0"/>
<dc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/> <bpmndi:BPMNLabel>
</bpmndi:BPMNLabel> <dc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNLabel>
<bpmndi:BPMNEdge bpmnElement="_12" id="BPMNEdge__12" sourceElement="_10" targetElement="_6"> </bpmndi:BPMNShape>
<di:waypoint x="636.0" y="487.0"/> <bpmndi:BPMNEdge bpmnElement="_13" id="BPMNEdge__13" sourceElement="_10" targetElement="_3">
<di:waypoint x="636.0" y="565.0"/> <di:waypoint x="620.0" y="471.0"/>
<bpmndi:BPMNLabel> <di:waypoint x="500.0" y="345.0"/>
<dc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/> <di:waypoint x="595.0" y="242.5"/>
</bpmndi:BPMNLabel> <bpmndi:BPMNLabel>
</bpmndi:BPMNEdge> <dc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
<bpmndi:BPMNEdge bpmnElement="_7" id="BPMNEdge__7" sourceElement="_3" targetElement="_5"> </bpmndi:BPMNLabel>
<di:waypoint x="635.0" y="270.0"/> </bpmndi:BPMNEdge>
<di:waypoint x="635.0" y="325.0"/> <bpmndi:BPMNEdge bpmnElement="_12" id="BPMNEdge__12" sourceElement="_10" targetElement="_6">
<bpmndi:BPMNLabel> <di:waypoint x="636.0" y="487.0"/>
<dc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/> <di:waypoint x="636.0" y="565.0"/>
</bpmndi:BPMNLabel> <bpmndi:BPMNLabel>
</bpmndi:BPMNEdge> <dc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
<bpmndi:BPMNEdge bpmnElement="_8" id="BPMNEdge__8" sourceElement="_2" targetElement="_4"> </bpmndi:BPMNLabel>
<di:waypoint x="641.0" y="67.0"/> </bpmndi:BPMNEdge>
<di:waypoint x="641.0" y="110.0"/> <bpmndi:BPMNEdge bpmnElement="_7" id="BPMNEdge__7" sourceElement="_3" targetElement="_5">
<bpmndi:BPMNLabel> <di:waypoint x="635.0" y="270.0"/>
<dc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/> <di:waypoint x="635.0" y="325.0"/>
</bpmndi:BPMNLabel> <bpmndi:BPMNLabel>
</bpmndi:BPMNEdge> <dc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
<bpmndi:BPMNEdge bpmnElement="_9" id="BPMNEdge__9" sourceElement="_4" targetElement="_3"> </bpmndi:BPMNLabel>
<di:waypoint x="640.0" y="165.0"/> </bpmndi:BPMNEdge>
<di:waypoint x="640.0" y="215.0"/> <bpmndi:BPMNEdge bpmnElement="_8" id="BPMNEdge__8" sourceElement="_2" targetElement="_4">
<bpmndi:BPMNLabel> <di:waypoint x="641.0" y="67.0"/>
<dc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/> <di:waypoint x="641.0" y="110.0"/>
</bpmndi:BPMNLabel> <bpmndi:BPMNLabel>
</bpmndi:BPMNEdge> <dc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
<bpmndi:BPMNEdge bpmnElement="_11" id="BPMNEdge__11" sourceElement="_5" targetElement="_10"> </bpmndi:BPMNLabel>
<di:waypoint x="636.0" y="380.0"/> </bpmndi:BPMNEdge>
<di:waypoint x="636.0" y="455.0"/> <bpmndi:BPMNEdge bpmnElement="_9" id="BPMNEdge__9" sourceElement="_4" targetElement="_3">
<bpmndi:BPMNLabel> <di:waypoint x="640.0" y="165.0"/>
<dc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/> <di:waypoint x="640.0" y="215.0"/>
</bpmndi:BPMNLabel> <bpmndi:BPMNLabel>
</bpmndi:BPMNEdge> <dc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
</bpmndi:BPMNPlane> </bpmndi:BPMNLabel>
</bpmndi:BPMNDiagram> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="_11" id="BPMNEdge__11" sourceElement="_5" targetElement="_10">
<di:waypoint x="636.0" y="380.0"/>
<di:waypoint x="636.0" y="455.0"/>
<bpmndi:BPMNLabel>
<dc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions> </definitions>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:tns="http://www.activiti.org/test" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" expressionLanguage="http://www.w3.org/1999/XPath" id="m1583334145142" name="" targetNamespace="http://www.activiti.org/test" typeLanguage="http://www.w3.org/2001/XMLSchema">
<process id="testProcess" isClosed="false" isExecutable="true" name="Test process" processType="None">
<startEvent id="startevent1" name="Start"/>
<endEvent id="endevent1" name="End"/>
<serviceTask activiti:exclusive="true" activiti:expression="#{activityDemoServiceImpl.updateBizStatus(execution,&quot;tj&quot;)}" id="servicetask1" name="用户提交"/>
<userTask activiti:candidateUsers="${activityDemoServiceImpl.findUsersForSL(execution)}" activiti:exclusive="true" id="usertask1" name="受理"/>
<exclusiveGateway gatewayDirection="Unspecified" id="exclusivegateway1" name="Exclusive Gateway"/>
<userTask activiti:candidateUsers="${activityDemoServiceImpl.findUsersForSP(execution)}" activiti:exclusive="true" id="usertask2" name="审批"/>
<exclusiveGateway gatewayDirection="Unspecified" id="exclusivegateway3" name="Exclusive Gateway"/>
<serviceTask activiti:exclusive="true" activiti:expression="#{activityDemoServiceImpl.updateBizStatus(execution,&quot;qf&quot;)}" id="servicetask2" name="已签发"/>
<serviceTask activiti:exclusive="true" activiti:expression="#{activityDemoServiceImpl.updateBizStatus(execution,&quot;bq&quot;)}" id="servicetask3" name="资料不全"/>
<sequenceFlow id="flow1" sourceRef="startevent1" targetRef="servicetask1"/>
<sequenceFlow id="flow2" sourceRef="servicetask1" targetRef="usertask1"/>
<sequenceFlow id="flow3" sourceRef="usertask1" targetRef="exclusivegateway1"/>
<sequenceFlow id="flow4" skipExpression="${sign=='true'}" sourceRef="exclusivegateway1" targetRef="usertask2"/>
<sequenceFlow id="flow5" sourceRef="usertask2" targetRef="exclusivegateway3"/>
<sequenceFlow id="flow6" skipExpression="${sign=='true'}" sourceRef="exclusivegateway3" targetRef="servicetask2"/>
<sequenceFlow id="flow7" sourceRef="servicetask2" targetRef="endevent1"/>
<sequenceFlow id="flow8" skipExpression="${sign=='false'}" sourceRef="exclusivegateway3" targetRef="servicetask3"/>
<sequenceFlow id="flow9" skipExpression="${sign=='false'}" sourceRef="exclusivegateway1" targetRef="servicetask3"/>
<sequenceFlow id="flow10" sourceRef="servicetask3" targetRef="endevent1"/>
</process>
<bpmndi:BPMNDiagram documentation="background=#3C3F41;count=1;horizontalcount=1;orientation=0;width=842.4;height=1195.2;imageableWidth=832.4;imageableHeight=1185.2;imageableX=5.0;imageableY=5.0" id="Diagram-_1" name="New Diagram">
<bpmndi:BPMNPlane bpmnElement="testProcess">
<bpmndi:BPMNShape bpmnElement="startevent1" id="Shape-startevent1">
<omgdc:Bounds height="32.0" width="32.0" x="20.0" y="140.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="endevent1" id="Shape-endevent1">
<omgdc:Bounds height="32.0" width="32.0" x="860.0" y="140.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="servicetask1" id="Shape-servicetask1">
<omgdc:Bounds height="55.0" width="105.0" x="90.0" y="130.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="55.0" width="105.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="usertask1" id="Shape-usertask1">
<omgdc:Bounds height="55.0" width="105.0" x="230.0" y="130.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="55.0" width="105.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="exclusivegateway1" id="Shape-exclusivegateway1" isMarkerVisible="false">
<omgdc:Bounds height="32.0" width="32.0" x="380.0" y="137.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="usertask2" id="Shape-usertask2">
<omgdc:Bounds height="55.0" width="105.0" x="460.0" y="130.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="55.0" width="105.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="exclusivegateway3" id="Shape-exclusivegateway3" isMarkerVisible="false">
<omgdc:Bounds height="32.0" width="32.0" x="608.0" y="137.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="servicetask2" id="Shape-servicetask2">
<omgdc:Bounds height="55.0" width="105.0" x="680.0" y="130.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="55.0" width="105.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="servicetask3" id="Shape-servicetask3">
<omgdc:Bounds height="55.0" width="105.0" x="576.0" y="20.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="55.0" width="105.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1" sourceElement="startevent1" targetElement="servicetask1">
<omgdi:waypoint x="52.0" y="156.0"/>
<omgdi:waypoint x="90.0" y="157.5"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="-1.0" width="-1.0" x="-1.0" y="-1.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2" sourceElement="servicetask1" targetElement="usertask1">
<omgdi:waypoint x="195.0" y="157.5"/>
<omgdi:waypoint x="230.0" y="157.5"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="-1.0" width="-1.0" x="-1.0" y="-1.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3" sourceElement="usertask1" targetElement="exclusivegateway1">
<omgdi:waypoint x="335.0" y="157.5"/>
<omgdi:waypoint x="380.0" y="153.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="-1.0" width="-1.0" x="-1.0" y="-1.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4" sourceElement="exclusivegateway1" targetElement="usertask2">
<omgdi:waypoint x="412.0" y="153.0"/>
<omgdi:waypoint x="460.0" y="157.5"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="-1.0" width="-1.0" x="-1.0" y="-1.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow5" id="BPMNEdge_flow5" sourceElement="usertask2" targetElement="exclusivegateway3">
<omgdi:waypoint x="565.0" y="157.5"/>
<omgdi:waypoint x="608.0" y="153.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="-1.0" width="-1.0" x="-1.0" y="-1.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow6" id="BPMNEdge_flow6" sourceElement="exclusivegateway3" targetElement="servicetask2">
<omgdi:waypoint x="640.0" y="153.0"/>
<omgdi:waypoint x="680.0" y="157.5"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="-1.0" width="-1.0" x="-1.0" y="-1.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow7" id="BPMNEdge_flow7" sourceElement="servicetask2" targetElement="endevent1">
<omgdi:waypoint x="785.0" y="157.5"/>
<omgdi:waypoint x="860.0" y="156.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="-1.0" width="-1.0" x="-1.0" y="-1.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow10" id="BPMNEdge_flow10" sourceElement="servicetask3" targetElement="endevent1">
<omgdi:waypoint x="681.0" y="47.0"/>
<omgdi:waypoint x="877.0" y="47.0"/>
<omgdi:waypoint x="877.0" y="140.0312805773287"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="-1.0" width="-1.0" x="-1.0" y="-1.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow8" id="BPMNEdge_flow8" sourceElement="exclusivegateway3" targetElement="servicetask3">
<omgdi:waypoint x="624.0" y="137.0"/>
<omgdi:waypoint x="624.0" y="75.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="-1.0" width="-1.0" x="-1.0" y="-1.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow9" id="BPMNEdge_flow9" sourceElement="exclusivegateway1" targetElement="servicetask3">
<omgdi:waypoint x="400.0" y="141.0"/>
<omgdi:waypoint x="400.0" y="47.0"/>
<omgdi:waypoint x="576.0" y="47.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="-1.0" width="-1.0" x="-1.0" y="-1.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
...@@ -52,8 +52,8 @@ app: ...@@ -52,8 +52,8 @@ app:
active-process: RecordStandardProcess.bpmn active-process: RecordStandardProcess.bpmn
swagger2: swagger2:
# host: localhost:8110 host: localhost:8110
host: 47.105.236.43/activiti # host: 47.105.236.43/activiti
......
package com.keymobile; package com.keymobile;
import com.keymobile.rest.common.exception.TwinkleException;
import com.keymobile.rest.common.validator.TwinkleValidator;
import com.keymobile.rest.model.Job;
import com.keymobile.rest.service.JobService; import com.keymobile.rest.service.JobService;
import javafx.application.Application;
import org.activiti.engine.*; import org.activiti.engine.*;
import org.activiti.engine.history.HistoricProcessInstance; import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.history.HistoricProcessInstanceQuery; import org.activiti.engine.history.HistoricProcessInstanceQuery;
import org.activiti.engine.repository.DeploymentBuilder;
import org.activiti.engine.repository.ProcessDefinition; import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.task.Task;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.IOException;
import java.io.InputStream;
import java.util.List; import java.util.List;
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment