Commit 6fcbdfd8 by 张祺

修改任务启动支持多个

parent badcce0c
...@@ -34,165 +34,31 @@ import java.util.List; ...@@ -34,165 +34,31 @@ import java.util.List;
@RequestMapping(value = "/task") @RequestMapping(value = "/task")
public class TaskCtrl { public class TaskCtrl {
@Autowired
private TaskRuleService taskRuleService;
@Autowired
private TaskService taskService;
@Autowired @Autowired
private SystemAuthService systemAuthService; private TaskService taskService;
@Autowired
private IndicatorsRelService indRelService;
@ApiOperation("(启动)根据规则生成相关填报任务") @ApiOperation("(启动)根据规则生成相关填报任务")
@GetMapping("generateTaskByRule") @GetMapping("generateTaskByRule")
public Result generateTaskByRule(@ApiParam("规则id") @RequestParam("ruleId") Integer ruleId, public Result generateTaskByRule(@ApiParam("规则id") @RequestParam("ruleId") List<Integer> ruleIds,
@ApiParam("收数月份, 格式: 2020-03、2020-06、2020-09、2020-12") @RequestParam("valueTime")String valueTime) { @ApiParam("收数月份, 格式: 2020-03、2020-06、2020-09、2020-12") @RequestParam("valueTime")String valueTime) {
Result result = null; Result result = null;
TaskRule rule = taskRuleService.getById(ruleId, true); if (CollectionUtils.isNotEmpty(ruleIds)) {
if (rule != null) { if (ruleIds.size() > 1) {
String roleIdStr = rule.getToRoleIds(); taskService.batchCreateTaskByRule(ruleIds, valueTime);
if (StringUtils.isNotBlank(roleIdStr)) { result = Result.genOkResult("开始批量启动任务");
String[] roleIds = StringUtils.split(roleIdStr, Constants.SEP_COMMA);
List<RoleRefUserModel> users = new ArrayList<>();
for (String roleId : roleIds) {
List<JSONObject> list =
systemAuthService.findUserList(roleId, true,
null, null, null, 1, 100);
if (CollectionUtils.isNotEmpty(list)) {
for (JSONObject jo : list) {
RoleRefUserModel user = new RoleRefUserModel();
user.setId(jo.getString("id"));
user.setDisName(jo.getString("disname"));
user.setRefIndDept(jo.getString("refIndDept"));
String refIndDept = user.getRefIndDept();
if (StringUtils.isBlank(refIndDept)) {
continue;
}
if (!users.contains(user)) {
users.add(user);
}
}
}
}
if (users.size() > 0) {
List<TaskRuleIndicator> indicators = rule.getIndicators();
if (CollectionUtils.isNotEmpty(indicators)) {
List<TaskIndicator> taskIndicators = new ArrayList<>();
for (TaskRuleIndicator indicator : indicators) {
List<BaseIndDef> baseIndDefs =
this.indRelService.getRelByIndId(indicator.getIndId(), "1");
getBaseIndDef(ruleId, null, baseIndDefs, taskIndicators);
}
if (CollectionUtils.isNotEmpty(taskIndicators)) {
//数据项按归属部门分组
ImmutableListMultimap<String, TaskIndicator> deptMapInds =
Multimaps.index(taskIndicators, (taskIndicator)-> taskIndicator.getIndDept());
//角色关联用户按归属部门分组
ImmutableListMultimap<String, RoleRefUserModel> deptUsers =
Multimaps.index(users, (roleRefUser)-> roleRefUser.getRefIndDept());
//每个分组组成一个任务
Date now = new Date();
int addEndDate = rule.getTimeLimit();
int addAuditDate = rule.getAuditLimit();
Date editEndDate = DateUtils.addDay(now, addEndDate);
Date auditEndDate = DateUtils.addDay(now, addEndDate + addAuditDate);
String userId = SystemUserUtil.getCurrentUserId();
List<Task> allTasks = new ArrayList<>();
for (String dept : deptMapInds.keys()) {
List<TaskIndicator> tis = deptMapInds.get(dept);
List<RoleRefUserModel> refUsers = deptUsers.get(dept);
if (CollectionUtils.isEmpty(refUsers)) {
result = Result.genFailedResult("该规则对应的数据项所属部门{"+ dept +"}找不到对应的用户");
break;
} else {
Task task = new Task();
task.setValueTime(valueTime);
task.setStatus(Constants.APPLY_STATE_DRAFT);
task.setIndicators(tis);
task.setCreateTime(now);
task.setCreator(userId);
task.setUpdateTime(now);
task.setUpdater(userId);
task.setNeedSelfEnter(false);
task.setNeedSum(false);
task.setEndDate(editEndDate);
task.setAuditEndDate(auditEndDate);
task.setRuleName(rule.getName());
task.setRuleType(rule.getRuleType());
task.setRuleId(rule.getId());
task.setRuleLevel(rule.getRuleLevel());
task.setGroupId(rule.getGroupId());
task.setDescription(rule.getDescription());
StringBuilder userNames = new StringBuilder(Constants.SEP_COMMA);
StringBuilder userIds = new StringBuilder(Constants.SEP_COMMA);
for (RoleRefUserModel um : refUsers) {
userNames.append(um.getDisName());
userNames.append(Constants.SEP_COMMA);
userIds.append(um.getId());
userIds.append(Constants.SEP_COMMA);
}
task.setEnterUsers(userIds.toString());
task.setEnterUserNames(userNames.toString());
}
taskService.createTaskByRule(allTasks, valueTime, ruleId);
rule.setLastActiveTime(now);
taskRuleService.updateRule(rule);
}
} else {
result = Result.genFailedResult("规则配置的指标没有可用的数据项");
}
} else {
result = Result.genFailedResult("规则没有配置相关的指标");
}
} else {
result = Result.genFailedResult("找不到用户来生成任务");
}
} else { } else {
result = Result.genFailedResult("规则没有配置对应的下发对象"); result = taskService.createTaskByRule(ruleIds.get(0), valueTime);
} }
} else { } else {
result = Result.genFailedResult("规则不存在"); result = Result.genFailedResult("没有选择需要启动的任务");
} }
return result; return result;
} }
/**
* 获取关联的数据项和子数据项
* @param ruleId
* @param parentIndId
* @param baseIndDefs
* @param taskIndicators
*/
private void getBaseIndDef(Integer ruleId, String parentIndId, List<BaseIndDef> baseIndDefs, List<TaskIndicator> taskIndicators) {
if (CollectionUtils.isNotEmpty(baseIndDefs)) {
for (BaseIndDef baseIndDef : baseIndDefs) {
TaskIndicator taskIndicator = new TaskIndicator();
taskIndicator.setIndFormula(baseIndDef.getIndFormat());
taskIndicator.setRuleId(ruleId);
taskIndicator.setParentIndId(parentIndId);
taskIndicator.setIndSource(baseIndDef.getIndSource());
taskIndicator.setIndUnit(baseIndDef.getIndUnit());
taskIndicator.setIndId(baseIndDef.getIndId());
taskIndicator.setIndDept(baseIndDef.getIndDept());
if (!taskIndicators.contains(taskIndicator)) {
taskIndicators.add(taskIndicator);
} else {
continue;
}
List<BaseIndDef> children = baseIndDef.getChildrens();
if (CollectionUtils.isNotEmpty(children)) {
taskIndicator.setHasChildren(true);
} else {
taskIndicator.setHasChildren(false);
}
getBaseIndDef(ruleId, taskIndicator.getIndId(), children, taskIndicators);
}
}
}
@ApiOperation("根据关键字、规则类型、用户获取相关的填报任务") @ApiOperation("根据关键字、规则类型、用户获取相关的填报任务")
@PostMapping("findByPage") @PostMapping("findByPage")
......
package com.keymobile.indicators.service.dataenter; package com.keymobile.indicators.service.dataenter;
import com.keymobile.indicators.model.entity.dataenter.*; import com.keymobile.indicators.model.entity.dataenter.*;
import com.keymobile.indicators.result.Result;
import io.swagger.annotations.ApiParam;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List; import java.util.List;
...@@ -23,7 +26,7 @@ public interface TaskService { ...@@ -23,7 +26,7 @@ public interface TaskService {
* @param valueTime * @param valueTime
* @param ruleId * @param ruleId
*/ */
void createTaskByRule(List<Task> tasks, String valueTime, Integer ruleId); void batchCreateTask(List<Task> tasks, String valueTime, Integer ruleId);
/** /**
* 更新任务 * 更新任务
* @param task * @param task
...@@ -140,4 +143,23 @@ public interface TaskService { ...@@ -140,4 +143,23 @@ public interface TaskService {
* @return * @return
*/ */
TaskAnalysisResult analysisTask(QueryTaskParam param); TaskAnalysisResult analysisTask(QueryTaskParam param);
/**
* 批量启动任务
* @param ruleIds
* @param valueTime
* @return
*/
void batchCreateTaskByRule(List<Integer> ruleIds,
@ApiParam("收数月份, 格式: 2020-03、2020-06、2020-09、2020-12")String valueTime);
/**
* 单个生成任务
* @param ruleId
* @param valueTime
* @return
*/
Result createTaskByRule(Integer ruleId,
@ApiParam("收数月份, 格式: 2020-03、2020-06、2020-09、2020-12")String valueTime);
} }
package com.keymobile.indicators.service.dataenter.impl; package com.keymobile.indicators.service.dataenter.impl;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.ImmutableListMultimap;
import com.google.common.collect.Multimaps;
import com.keymobile.indicators.constant.Constants; import com.keymobile.indicators.constant.Constants;
import com.keymobile.indicators.model.entity.RoleRefUserModel; import com.keymobile.indicators.model.entity.RoleRefUserModel;
import com.keymobile.indicators.model.entity.dataenter.*; import com.keymobile.indicators.model.entity.dataenter.*;
import com.keymobile.indicators.model.entity.indicators.BaseIndDef;
import com.keymobile.indicators.model.mapper.indicators.*; import com.keymobile.indicators.model.mapper.indicators.*;
import com.keymobile.indicators.result.Result;
import com.keymobile.indicators.service.SystemAuthService; import com.keymobile.indicators.service.SystemAuthService;
import com.keymobile.indicators.service.dataenter.TaskRuleService;
import com.keymobile.indicators.service.dataenter.TaskService; import com.keymobile.indicators.service.dataenter.TaskService;
import com.keymobile.indicators.service.hytobacco.IndicatorsRelService;
import com.keymobile.indicators.utils.DateUtils;
import com.keymobile.indicators.utils.IdWorker; import com.keymobile.indicators.utils.IdWorker;
import com.keymobile.indicators.utils.LogManager;
import com.keymobile.indicators.utils.SystemUserUtil;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
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;
import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -24,6 +35,9 @@ import java.util.List; ...@@ -24,6 +35,9 @@ import java.util.List;
public class TaskServiceImpl implements TaskService { public class TaskServiceImpl implements TaskService {
@Autowired @Autowired
private TaskRuleService taskRuleService;
@Autowired
private TaskMapper taskMapper; private TaskMapper taskMapper;
@Autowired @Autowired
...@@ -41,6 +55,9 @@ public class TaskServiceImpl implements TaskService { ...@@ -41,6 +55,9 @@ public class TaskServiceImpl implements TaskService {
@Autowired @Autowired
private SystemAuthService systemAuthService; private SystemAuthService systemAuthService;
@Autowired
private IndicatorsRelService indRelService;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Task createTask(Task task) { public Task createTask(Task task) {
...@@ -51,7 +68,7 @@ public class TaskServiceImpl implements TaskService { ...@@ -51,7 +68,7 @@ public class TaskServiceImpl implements TaskService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void createTaskByRule(List<Task> tasks, String valueTime, Integer ruleId) { public void batchCreateTask(List<Task> tasks, String valueTime, Integer ruleId) {
deleteByRuleIdAndValueTime(ruleId, valueTime); deleteByRuleIdAndValueTime(ruleId, valueTime);
for (Task task : tasks) { for (Task task : tasks) {
task.setValueTime(valueTime); task.setValueTime(valueTime);
...@@ -283,4 +300,163 @@ public class TaskServiceImpl implements TaskService { ...@@ -283,4 +300,163 @@ public class TaskServiceImpl implements TaskService {
} }
return result; return result;
} }
@Override
@Async
public void batchCreateTaskByRule(List<Integer> ruleIds, String valueTime) {
for (Integer ruleId : ruleIds) {
createTaskByRule(ruleId, valueTime);
}
}
@Override
public Result createTaskByRule(Integer ruleId, String valueTime) {
Result result = null;
TaskRule rule = taskRuleService.getById(ruleId, true);
if (rule != null) {
String roleIdStr = rule.getToRoleIds();
if (StringUtils.isNotBlank(roleIdStr)) {
String[] roleIds = StringUtils.split(roleIdStr, Constants.SEP_COMMA);
List<RoleRefUserModel> users = new ArrayList<>();
for (String roleId : roleIds) {
List<JSONObject> list =
systemAuthService.findUserList(roleId, true,
null, null, null, 1, 100);
if (CollectionUtils.isNotEmpty(list)) {
for (JSONObject jo : list) {
RoleRefUserModel user = new RoleRefUserModel();
user.setId(jo.getString("id"));
user.setDisName(jo.getString("disname"));
user.setRefIndDept(jo.getString("refIndDept"));
String refIndDept = user.getRefIndDept();
if (StringUtils.isBlank(refIndDept)) {
continue;
}
if (!users.contains(user)) {
users.add(user);
}
}
}
}
if (users.size() > 0) {
List<TaskRuleIndicator> indicators = rule.getIndicators();
if (CollectionUtils.isNotEmpty(indicators)) {
List<TaskIndicator> taskIndicators = new ArrayList<>();
for (TaskRuleIndicator indicator : indicators) {
List<BaseIndDef> baseIndDefs =
this.indRelService.getRelByIndId(indicator.getIndId(), "1");
getBaseIndDef(ruleId, null, baseIndDefs, taskIndicators);
}
if (CollectionUtils.isNotEmpty(taskIndicators)) {
//数据项按归属部门分组
ImmutableListMultimap<String, TaskIndicator> deptMapInds =
Multimaps.index(taskIndicators, (taskIndicator) -> taskIndicator.getIndDept());
//角色关联用户按归属部门分组
ImmutableListMultimap<String, RoleRefUserModel> deptUsers =
Multimaps.index(users, (roleRefUser) -> roleRefUser.getRefIndDept());
//每个分组组成一个任务
Date now = new Date();
int addEndDate = rule.getTimeLimit();
int addAuditDate = rule.getAuditLimit();
Date editEndDate = DateUtils.addDay(now, addEndDate);
Date auditEndDate = DateUtils.addDay(now, addEndDate + addAuditDate);
String userId = SystemUserUtil.getCurrentUserId();
List<Task> allTasks = new ArrayList<>();
for (String dept : deptMapInds.keys()) {
List<TaskIndicator> tis = deptMapInds.get(dept);
List<RoleRefUserModel> refUsers = deptUsers.get(dept);
if (CollectionUtils.isEmpty(refUsers)) {
result = Result.genFailedResult("该规则对应的数据项所属部门{" + dept + "}找不到对应的用户");
break;
} else {
Task task = new Task();
task.setValueTime(valueTime);
task.setStatus(Constants.APPLY_STATE_DRAFT);
task.setIndicators(tis);
task.setCreateTime(now);
task.setCreator(userId);
task.setUpdateTime(now);
task.setUpdater(userId);
task.setNeedSelfEnter(false);
task.setNeedSum(false);
task.setEndDate(editEndDate);
task.setAuditEndDate(auditEndDate);
task.setRuleName(rule.getName());
task.setRuleType(rule.getRuleType());
task.setRuleId(rule.getId());
task.setRuleLevel(rule.getRuleLevel());
task.setGroupId(rule.getGroupId());
task.setDescription(rule.getDescription());
StringBuilder userNames = new StringBuilder(Constants.SEP_COMMA);
StringBuilder userIds = new StringBuilder(Constants.SEP_COMMA);
for (RoleRefUserModel um : refUsers) {
userNames.append(um.getDisName());
userNames.append(Constants.SEP_COMMA);
userIds.append(um.getId());
userIds.append(Constants.SEP_COMMA);
}
task.setEnterUsers(userIds.toString());
task.setEnterUserNames(userNames.toString());
}
this.batchCreateTask(allTasks, valueTime, ruleId);
rule.setLastActiveTime(now);
taskRuleService.updateRule(rule);
result = Result.genOkResult();
}
} else {
result = Result.genFailedResult("规则配置的指标没有可用的数据项");
}
} else {
result = Result.genFailedResult("规则没有配置相关的指标");
}
} else {
result = Result.genFailedResult("找不到用户来生成任务");
}
} else {
result = Result.genFailedResult("规则没有配置对应的下发对象");
}
} else {
result = Result.genFailedResult("规则不存在");
}
if (result.isSuccess()) {
LogManager.logInfo(Constants.LOG_CONTEXT_API, "任务id:{},名字:{}下发成功", rule.getId(), rule.getName() );
} else {
LogManager.logInfo(Constants.LOG_CONTEXT_API, "任务id:{},名字:{}下发失败", rule.getId(), rule.getName() );
}
return result;
}
/**
* 获取关联的数据项和子数据项
* @param ruleId
* @param parentIndId
* @param baseIndDefs
* @param taskIndicators
*/
private void getBaseIndDef(Integer ruleId, String parentIndId, List<BaseIndDef> baseIndDefs, List<TaskIndicator> taskIndicators) {
if (CollectionUtils.isNotEmpty(baseIndDefs)) {
for (BaseIndDef baseIndDef : baseIndDefs) {
TaskIndicator taskIndicator = new TaskIndicator();
taskIndicator.setIndFormula(baseIndDef.getIndFormat());
taskIndicator.setRuleId(ruleId);
taskIndicator.setParentIndId(parentIndId);
taskIndicator.setIndSource(baseIndDef.getIndSource());
taskIndicator.setIndUnit(baseIndDef.getIndUnit());
taskIndicator.setIndId(baseIndDef.getIndId());
taskIndicator.setIndDept(baseIndDef.getIndDept());
if (!taskIndicators.contains(taskIndicator)) {
taskIndicators.add(taskIndicator);
} else {
continue;
}
List<BaseIndDef> children = baseIndDef.getChildrens();
if (CollectionUtils.isNotEmpty(children)) {
taskIndicator.setHasChildren(true);
} else {
taskIndicator.setHasChildren(false);
}
getBaseIndDef(ruleId, taskIndicator.getIndId(), children, taskIndicators);
}
}
}
} }
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