Commit a6ce3c08 by chenweisong

更新

parent 236d1c49
package com.keymobile.rest.common.utils;
import com.keymobile.rest.model.Activity;
import com.keymobile.rest.vo.TaskForm;
import com.keymobile.rest.dto.TaskForm;
import lombok.extern.slf4j.Slf4j;
import java.lang.reflect.Field;
......@@ -11,7 +11,7 @@ public class BeanUtils {
private BeanUtils() {
throw new RuntimeException("别乱搞");
throw new RuntimeException("hey! don't mess up the party!");
}
public static <O, T> T convertTo(O o, T t) {
......
package com.keymobile.rest.controller;
import com.google.common.collect.ImmutableMap;
import com.keymobile.rest.common.bean.ApiResponse;
import com.keymobile.rest.common.utils.DateUtil;
import com.keymobile.rest.model.DataInfo;
import com.keymobile.rest.model.Mission;
import com.keymobile.rest.model.Template;
import com.keymobile.rest.model.User;
import com.keymobile.rest.service.DataInfoService;
import com.keymobile.rest.service.TemplateService;
import com.keymobile.rest.service.MissionService;
......@@ -18,7 +18,9 @@ import org.springframework.web.bind.annotation.*;
import java.sql.Timestamp;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
@Api(description = "模板 控制器")
@RestController
......@@ -44,10 +46,17 @@ public class ExcelController {
})
@PostMapping(value = "/excel/saveData")
public ApiResponse saveRecordData(long excelId, String dataStr) {
// excelId 其实就是当前得missionId
Mission mission = missionService.findById(excelId);
Template template = mission.getTemplate();
// 同一个模板的所有任务都需要被完成(所有没完成的任务)
List<Mission> missionList = missionService.findAllByTemplateIdAndStatus(template.getId(), Mission.STATUS_BEGIN);
// 一人填写,全部过
DataInfo dataInfo = new DataInfo();
Timestamp now = Timestamp.valueOf(DateUtil.getDateTime());
dataInfo.setCreateAt(now);
......@@ -56,25 +65,46 @@ public class ExcelController {
dataInfo.setMission(mission);
dataInfoService.save(dataInfo);
String processId = mission.getProcess().getProcessId();
String taskId = mission.getTaskId();
// 发起人把流程发送到下一个人
Task task = taskService.createTaskQuery().processInstanceId(processId).taskId(taskId)
.singleResult();
Map vars = new HashMap<>();
if (template.getNeedAudit() == Template.NEED_AUDIT) {
vars.put("sign", true);
vars.put("inputDataApply", "审核人");
vars.put("applySign", template.getNeedConfirm() == Template.NEED_CONFIRM);
} else {
vars.put("_ACTIVITI_SKIP_EXPRESSION_ENABLED", true);
vars.put("sign", false);
vars.put("inputDataApply", "");
vars.put("applySign", template.getNeedConfirm() == Template.NEED_CONFIRM);
for (int i = 0, len = missionList.size(); i < len; i++) {
String taskId = mission.getTaskId();
// 发起人把流程发送到下一个人
Task task = taskService.createTaskQuery().taskId(taskId)
.singleResult();
Map vars = new HashMap<>();
// 当该模板执行最后一个任务
if (i == len - 1) {
// 当该活动所有的任务都完成
if (template.getNeedAudit() == Template.NEED_AUDIT) {
vars.put("needDataAudit", true);
vars.put("auditUser", "审核人");
} else {
vars.put("needDataAudit", false);
}
} else {
// 不是最后一个默认全不需要审核
vars.put("needDataAudit", false);
}
mission.setDataInfo(dataInfo);
mission.setStatus(Mission.STATUS_COMPLETED);
missionService.save(mission);
// 当前流程的所有未完成任务
long allMissionCount = missionService.countAllByActivityIdAndStatus(template.getActivity().getId(), Mission.STATUS_BEGIN);
if (allMissionCount == 0) {
if (template.getNeedConfirm() == Template.NEED_CONFIRM) {
vars.put("needConfirm", true);
} else {
vars.put("needConfirm", false);
vars.put("needDataBackflow", true);
}
}
taskService.complete(task.getId(), vars);
}
taskService.complete(task.getId(), vars);
return ApiResponse.ok();
}
......@@ -94,4 +124,14 @@ public class ExcelController {
return ApiResponse.ok();
// }
}
public User getAdmin() {
User user = userService.findAllByUsername("发起人").get(0);
return user;
}
public User getAuditUser() {
User user = userService.findAllByUsername("审核人").get(0);
return user;
}
}
......@@ -8,8 +8,10 @@ import com.keymobile.rest.common.validator.CommonValidator;
import com.keymobile.rest.model.*;
import com.keymobile.rest.model.Process;
import com.keymobile.rest.service.*;
import com.keymobile.rest.vo.ExcelForm;
import com.keymobile.rest.vo.TaskForm;
import com.keymobile.rest.dto.ExcelForm;
import com.keymobile.rest.dto.TaskForm;
import com.keymobile.rest.vo.SimpleTask;
import com.keymobile.rest.vo.SimpleTemplate;
import io.swagger.annotations.*;
import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
......@@ -74,7 +76,7 @@ public class TaskController {
} else {
taskList = activityService.findAll(pageNo, pageSize, orderBy, propBy);
}
return ApiResponse.ok(ImmutableMap.of("list", taskList.getContent(), "total", taskList.getTotalElements()));
return ApiResponse.ok(ImmutableMap.of("list", SimpleTask.convert(taskList.getContent()), "total", taskList.getTotalElements()));
}
@ApiOperation(value = "单个活动详情")
......@@ -85,7 +87,7 @@ public class TaskController {
public ApiResponse get(long taskId) {
Activity activity = activityService.get(taskId);
CommonValidator.notNull(activity, "活动不存在");
return ApiResponse.ok(activity);
return ApiResponse.ok(SimpleTask.convert(activity));
}
@ApiOperation(value = "我的任务", notes = "补录任务列表及审核任务列表")
......@@ -99,29 +101,53 @@ public class TaskController {
List<Map> missions = new ArrayList<>();
List<User> userList = userService.findAll();
userList.forEach(user -> {
// 查找当前用户所有的activiti task
String sql = "SELECT * FROM " + managementService.getTableName(Task.class) + " T WHERE T.ASSIGNEE_ like #{assignee}";
List<Task> tasks = taskService.createNativeTaskQuery()
.sql(sql)
.parameter("assignee", user.getUsername() + ":templateId:")
String username;
if (user.getUsername().equals("发起人") || user.getUsername().equals("审核人")) {
username = user.getUsername();
} else {
// 查找当前用户所有的activiti task
username = "%" + user.getUsername() + ":template:%";
}
List<Task> tasks = taskService.createTaskQuery().taskAssigneeLike(username)
.list();
tasks.forEach(task -> {
String assignee = task.getAssignee();
long templateId = Long.parseLong(assignee.split(":templateId:")[1]);
String processId = task.getProcessInstanceId();
Mission mission = missionService.findByProcessIdAndUsernameAndTemplateIdAndStatus(processId, user.getUsername(), templateId, Mission.STATUS_BEGIN);
mission.setTaskId(task.getId());
missionService.save(mission);
Map map = new HashMap();
map.put("id", mission.getId());
map.put("userId", mission.getUser().getId());
map.put("username", mission.getUser().getUsername());
map.put("excelList", Arrays.asList(mission.getTemplate()));
if (user.getUsername().equals("发起人") || user.getUsername().equals("审核人")) {
if (task.getTaskDefinitionKey().equals("dataEntrySubTask")) {
map.put("kind", 1);
} else {
long templateId = Long.parseLong(assignee.split(":template:")[1]);
String processId = task.getProcessInstanceId();
Process process = processService.findByProcessId(processId);
Mission mission = missionService.findByProcessIdAndUsernameAndTemplateIdAndStatus(process.getId(), user.getUsername(), templateId, Mission.STATUS_BEGIN);
mission.setTaskId(task.getId());
missionService.save(mission);
map.put("id", mission.getId());
map.put("userId", mission.getUser().getId());
map.put("username", mission.getUser().getUsername());
Template template = mission.getTemplate();
Map _template = new HashMap();
_template.put("id", mission.getId());
_template.put("config", template.getConfig());
_template.put("name", template.getName());
_template.put("createAt", template.getCreateAt());
map.put("excelList", Arrays.asList(_template));
}
if (task.getTaskDefinitionKey().toLowerCase().equals("dataenter")) {
map.put("kind", 1);
map.put("mission", "填写补录数据");
} else if (task.getTaskDefinitionKey().toLowerCase().equals("dataaudit")) {
map.put("kind", 2);
map.put("mission", "审核补录数据");
} else if (task.getTaskDefinitionKey().toLowerCase().equals("useraudit")) {
map.put("kind", 3);
map.put("mission", "审核人审核");
} else if (task.getTaskDefinitionKey().toLowerCase().equals("databackflow")) {
map.put("kind", 4);
map.put("mission", "数据回流");
}
missions.add(map);
});
......@@ -144,7 +170,8 @@ public class TaskController {
// 新建活动
Timestamp now = Timestamp.valueOf(DateUtil.getDateTime());
Activity activity = BeanUtils.convertTo(form, new Activity());
Activity activity = new Activity();
activity = BeanUtils.convertTo(form, activity);
activity.setCreateAt(now);
final Activity finalActivity = activityService.save(activity);
......@@ -164,7 +191,8 @@ public class TaskController {
|| (StringUtils.isNotEmpty(excelForm.getUpStreamAddr()) && StringUtils.isEmpty(excelForm.getBackStreamAddr()))), "上游地址和回流地址需同时填写或者同时为空");
excelForm.setActivity(finalActivity);
Template template = BeanUtils.convertTo(excelForm, new Template());
Template template = new Template();
template = BeanUtils.convertTo(excelForm, template);
template.setCreateAt(now);
final Template finalTemplate = templateService.save(template);
......@@ -195,7 +223,7 @@ public class TaskController {
Activity activity = activityService.get(taskId);
CommonValidator.notNull(activity, "活动不存在");
// 根据活动查找需要填写的人 目前只支持一人
List<Template> templateList = activity.getExcelList();
List<Template> templateList = activity.getTemplateList();
CommonValidator.notLessThan(templateList.size(), 1, "补录模板不存在");
// 部署补录流程
......@@ -257,9 +285,7 @@ public class TaskController {
Map<String, Object> vars = new HashMap<>();
// 分发录入任务
if (resultTask.getTaskDefinitionKey().contains("startEntry")) {
vars.put("candiateUserList", userNameList);
}
vars.put("candidateUsers", userNameList);
// 提交任务,并把补录人任务划分好
taskService.complete(resultTask.getId(), vars);
return ApiResponse.ok();
......@@ -271,8 +297,7 @@ public class TaskController {
@ApiImplicitParam(name = "taskId", value = "活动id", paramType = "query", required = true, dataType = "long")
})
@PostMapping(value = "/pass")
public ApiResponse passTask(
long taskId) {
public ApiResponse passTask(long taskId) {
Activity activity = activityService.get(taskId);
// 完结活动, 流程跑完
// User judge = userService.getAudit();
......@@ -310,8 +335,7 @@ public class TaskController {
public User getAdmin() {
User user = new User();
user.setUsername("发起人");
User user = userService.findAllByUsername("发起人").get(0);
return user;
}
......
......@@ -10,5 +10,7 @@ public interface MissionDao extends JpaRepository<Mission, Long> {
List<Mission> findAllByTemplateIdAndStatus(long templateId, int status);
Mission findByProcessIdAndUserUsernameAndTemplateIdAndStatus(String processId, String username, long templateId, int status);
long countAllByActivityIdAndStatus(long activityId, int status);
Mission findByProcessIdAndUserUsernameAndTemplateIdAndStatusAndType(long processId, String username, long templateId, int status, int type);
}
package com.keymobile.rest.vo;
package com.keymobile.rest.dto;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.keymobile.rest.model.Activity;
......@@ -31,16 +31,16 @@ public class ExcelForm {
private String remark;
@ApiModelProperty(name = "dataAt", value = "数据开始行数 列如 1", example = "1")
private Integer dataAt;
private Integer dataAt = 1;
@ApiModelProperty(name = "needAudit", value = "需要审核 1 不需要 2 需要", required = true, example = "1")
private Integer needAudit;
private Integer needAudit = 1;
@ApiModelProperty(name = "needConfirm", value = "需要负责人确认 1 不需要 2 需要", required = true, example = "1")
private Integer needConfirm;
private Integer needConfirm = 1;
@ApiModelProperty(name = "needMerge", value = "需要数据合并 1 不需要 2 需要", example = "1")
private Integer needMerge;
private Integer needMerge = 1;
@ApiModelProperty(name = "upStreamAddr", value = "上游地址 与 回流地址 同时填写")
private String upStreamAddr;
......
package com.keymobile.rest.vo;
package com.keymobile.rest.dto;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.keymobile.rest.model.User;
......@@ -17,7 +17,7 @@ public class TaskForm {
private String name;
@ApiModelProperty(required = true, name = "type", value = "收数类型 1手动 2自动", example = "1")
private Integer type;
private Integer type = 1;
@ApiModelProperty(name = "freq", value = "频度 按年 1 按周 2 按月 3 按日 4", example = "1")
private Integer freq;
......
......@@ -42,7 +42,7 @@ public class Activity implements Serializable {
private String name;
@Column(nullable = false, columnDefinition = ("integer(2) default 1 comment '下发方式'"))
private Integer type;
private Integer type = 1;
@Column(columnDefinition = ("varchar(200) comment '备注'"))
private String remark;
......@@ -55,7 +55,7 @@ public class Activity implements Serializable {
private Timestamp createAt;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "activity")
private List<Template> excelList;
private List<Template> templateList;
/**
......@@ -71,4 +71,11 @@ public class Activity implements Serializable {
@JsonIgnore
private List<Process> processList;
/**
* 该活动跑过得所有任务
*/
@OneToMany(fetch = FetchType.LAZY, mappedBy = "activity")
@JsonIgnore
private List<Mission> missionList;
}
......@@ -32,10 +32,10 @@ public class Group implements Serializable {
private String name;
@Column(nullable = false, columnDefinition = ("integer(2) default 0 comment '机构层级'"))
private int level;
private int level = 0;
@Column(name = "parent_id", columnDefinition = ("bigint(22) default 0 comment '父机构id'"))
private long parentId;
private long parentId = 0;
/**
* 常见的父子数据结构
......
......@@ -65,4 +65,8 @@ public class Mission implements Serializable {
@ManyToOne(fetch = FetchType.LAZY)
@JsonIgnore
private Process process;
@ManyToOne(fetch = FetchType.LAZY)
@JsonIgnore
private Activity activity;
}
......@@ -37,7 +37,7 @@ public class Process implements Serializable {
private String processId;
@Column(nullable = false, columnDefinition = ("integer(2) default 0 comment '进程状态'"))
private int status;
private int status = 0;
/**
* 该进程启动得所有子任务
......
......@@ -41,16 +41,16 @@ public class Template implements Serializable {
private String config;
@Column(name = "data_at", columnDefinition = ("integer(20) default 1 comment '数据开始行数'"))
private Integer dataAt;
private Integer dataAt = 1;
@Column(name = "need_audit", columnDefinition = ("integer(2) default 1 comment '需要审核'"))
private Integer needAudit;
private Integer needAudit = 1;
@Column(name = "need_confirm", columnDefinition = ("integer(2) default 1 comment '需要负责人确认'"))
private Integer needConfirm;
private Integer needConfirm = 1;
@Column(name = "need_merge", columnDefinition = ("integer(2) default 1 comment '需要数据合并'"))
private Integer needMerge;
private Integer needMerge = 1;
@Column(name = "up_stream_addr", columnDefinition = ("varchar(100) comment '上游地址'"))
private String upStreamAddr;
......
......@@ -23,6 +23,7 @@ public class MissionService {
// 初始的开始状态
info.setStatus(Mission.STATUS_BEGIN);
info.setUser(user);
info.setType(Mission.TYPE_RECORD);
Timestamp now = Timestamp.valueOf(DateUtil.getDateTime());
info.setCreateAt(now);
info = missionDao.save(info);
......@@ -38,7 +39,7 @@ public class MissionService {
return missionDao.getOne(missionId);
}
public Mission findByProcessIdAndUsernameAndTemplateIdAndStatus(String processId, String username, long templateId, int status) {
public Mission findByProcessIdAndUsernameAndTemplateIdAndStatusAndType(long processId, String username, long templateId, int status) {
return missionDao.findByProcessIdAndUserUsernameAndTemplateIdAndStatus(processId, username, templateId, status);
}
......@@ -46,4 +47,8 @@ public class MissionService {
return missionDao.findAllByTemplateIdAndStatus(templateId, status);
}
public long countAllByActivityIdAndStatus(long activityId, int status) {
return missionDao.countAllByActivityIdAndStatus(activityId, status);
}
}
package com.keymobile.rest.vo;
import com.keymobile.rest.common.utils.BeanUtils;
import com.keymobile.rest.model.Activity;
import com.keymobile.rest.model.Template;
import lombok.Data;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
@Data
public class SimpleTask {
private Long id;
private String name;
private String remark;
private Integer type;
private Integer freq;
private Timestamp createAt;
private List<SimpleTemplate> excelList;
public static SimpleTask convert(Activity activity) {
List<SimpleTemplate> simpleTemplateList = new ArrayList<>();
List<Template> templateList = activity.getTemplateList();
templateList.forEach(template -> {
simpleTemplateList.add(BeanUtils.convertTo(template, new SimpleTemplate()));
});
SimpleTask task = new SimpleTask();
task = BeanUtils.convertTo(activity, task);
task.setExcelList(simpleTemplateList);
return task;
}
public static List<SimpleTask> convert(List<Activity> activityList) {
List<SimpleTask> simpleTaskList = new ArrayList<>();
activityList.forEach(activity -> {
SimpleTask simpleTask = convert(activity);
simpleTaskList.add(simpleTask);
});
return simpleTaskList;
}
}
package com.keymobile.rest.vo;
import com.keymobile.rest.common.utils.BeanUtils;
import com.keymobile.rest.model.Template;
import lombok.Data;
import java.sql.Timestamp;
@Data
public class SimpleTemplate {
private Long id;
private String name;
private String config;
private Timestamp createAt;
public static SimpleTemplate convert(Template template) {
SimpleTemplate simpleTemplate = new SimpleTemplate();
simpleTemplate = BeanUtils.convertTo(template, simpleTemplate);
return simpleTemplate;
}
}
......@@ -19,10 +19,10 @@ spring:
application:
name: dataCollector
jpa:
show-sql: false
show-sql: true
database-platform: org.hibernate.dialect.MySQL5Dialect
# hibernate:
# ddl-auto: update
hibernate:
ddl-auto: update
datasource:
url: jdbc:mysql://47.105.193.165:3306/dev0?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8
username: root
......
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