commit
This commit is contained in:
@@ -220,9 +220,13 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService
|
||||
|
||||
if (user == null) {
|
||||
// 新增用户,初始化数据
|
||||
u.setId(R.UU32());
|
||||
String salt = R.UU32();
|
||||
u.setSalt(salt);
|
||||
u.setPassword(PwdUtil.getPassword(PwdUtil.generate(12), salt));
|
||||
if (isMember) {
|
||||
addMemberUserIds.add(u.getId());
|
||||
}
|
||||
|
||||
needInitUserList.add(u);
|
||||
} else {
|
||||
@@ -231,9 +235,9 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService
|
||||
|
||||
// 检测会员状态变更
|
||||
boolean currentIsMember = user.getMember() != null && user.getMember();
|
||||
if (isMember && !currentIsMember) {
|
||||
if (isMember) {
|
||||
addMemberUserIds.add(user.getId());
|
||||
} else if (!isMember && currentIsMember) {
|
||||
} else if (currentIsMember) {
|
||||
removeMemberUserIds.add(user.getId());
|
||||
}
|
||||
|
||||
@@ -351,13 +355,40 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService
|
||||
if (Lang.isNotEmpty(addMemberUserIds)) {
|
||||
executorService.execute(() -> {
|
||||
try {
|
||||
log.info("添加会员角色: {} 个", addMemberUserIds.size());
|
||||
List<Sys_user_role> roleList = addMemberUserIds.stream().map(id -> {
|
||||
if (memberRole == null) {
|
||||
log.warn("会员角色不存在,跳过会员角色补齐");
|
||||
return;
|
||||
}
|
||||
|
||||
List<String> candidateMemberUserIds = addMemberUserIds.stream()
|
||||
.filter(StrUtil::isNotBlank)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
if (candidateMemberUserIds.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 全量更新会重算会员身份,这里补齐新增会员和历史缺失的会员角色,避免重复插入已有关系。
|
||||
Set<String> existingMemberRoleUserIds = new HashSet<>();
|
||||
List<List<String>> queryBatches = ListUtil.split(candidateMemberUserIds, 500);
|
||||
queryBatches.forEach(batch -> {
|
||||
List<Sys_user_role> existingRoles = dao.query(Sys_user_role.class,
|
||||
Cnd.where("roleId", "=", memberRole.getId()).and("userId", "in", batch));
|
||||
existingMemberRoleUserIds.addAll(existingRoles.stream()
|
||||
.map(Sys_user_role::getUserId)
|
||||
.filter(StrUtil::isNotBlank)
|
||||
.collect(Collectors.toSet()));
|
||||
});
|
||||
|
||||
List<Sys_user_role> roleList = candidateMemberUserIds.stream()
|
||||
.filter(id -> !existingMemberRoleUserIds.contains(id))
|
||||
.map(id -> {
|
||||
Sys_user_role userRole = new Sys_user_role();
|
||||
userRole.setRoleId(memberRole.getId());
|
||||
userRole.setUserId(id);
|
||||
return userRole;
|
||||
}).collect(Collectors.toList());
|
||||
log.info("添加会员角色: 候选 {} 个, 实际新增 {} 个", candidateMemberUserIds.size(), roleList.size());
|
||||
|
||||
if (!roleList.isEmpty()) {
|
||||
// 分批处理角色分配
|
||||
@@ -408,7 +439,7 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService
|
||||
log.info("全量更新用户数据完成,耗时: {} 毫秒", (endTime - startTime));
|
||||
|
||||
return "更新完成: 新增用户 " + needInitUserList.size() + " 个, 更新用户 " + needDoUpdateList.size()
|
||||
+ " 个, 待添加会员 " + addMemberUserIds.size() + " 个, 待移除会员 " + removeMemberUserIds.size() + " 个";
|
||||
+ " 个, 会员角色补齐候选 " + addMemberUserIds.size() + " 个, 待移除会员 " + removeMemberUserIds.size() + " 个";
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+42
-10
@@ -27,6 +27,7 @@ import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
@IocBean
|
||||
@@ -35,6 +36,22 @@ import java.util.List;
|
||||
@Ok("json:full")
|
||||
public class ProposalDashboardController {
|
||||
|
||||
private static final String MASTER_REPLY_TASK_NAME = "master_reply";
|
||||
private static final String OPINION_MASTER_REPLY_TASK_NAME = "opinion_master_reply";
|
||||
private static final List<String> MERGED_MASTER_REPLY_TASK_NAMES = List.of(MASTER_REPLY_TASK_NAME, OPINION_MASTER_REPLY_TASK_NAME);
|
||||
private static final List<String> EXCLUDE_NODE_NAMES = List.of("撰写提案", "邀请附议人", "提案附议");
|
||||
private static final List<String> DASHBOARD_TASK_NODE_ORDER = List.of(
|
||||
"delegation",
|
||||
"committee_member_review",
|
||||
"committee",
|
||||
"school_leader_instruction",
|
||||
MASTER_REPLY_TASK_NAME,
|
||||
"slave_reply",
|
||||
"committee_director_opinion",
|
||||
"school_leader",
|
||||
"feedback"
|
||||
);
|
||||
|
||||
@Inject
|
||||
private ProposalCommonService proposalCommonService;
|
||||
@Inject
|
||||
@@ -63,12 +80,11 @@ public class ProposalDashboardController {
|
||||
ProcessModel processModel = processDefineService.processDefineToModel(define);
|
||||
List<TaskModel> taskModels = processModel.getModels(TaskModel.class);
|
||||
|
||||
List<String> excludeNodes = new ArrayList<>(3);
|
||||
excludeNodes.add("撰写提案");
|
||||
excludeNodes.add("邀请附议人");
|
||||
excludeNodes.add("提案附议");
|
||||
|
||||
List<NutMap> taskNodes = taskModels.stream().filter(taskModel -> !excludeNodes.contains(taskModel.getDisplayName()))
|
||||
List<NutMap> taskNodes = taskModels.stream()
|
||||
.filter(taskModel -> !EXCLUDE_NODE_NAMES.contains(taskModel.getDisplayName()))
|
||||
// 主办单位答复存在立案、建议两条流程编码,看板统一合并到 master_reply 统计。
|
||||
.filter(taskModel -> !OPINION_MASTER_REPLY_TASK_NAME.equals(taskModel.getName()))
|
||||
.sorted(Comparator.comparingInt(taskModel -> getDashboardNodeOrder(taskModel.getName())))
|
||||
.map(taskModel -> NutMap.NEW()
|
||||
.addv("name", taskModel.getDisplayName())
|
||||
.addv("id", taskModel.getName())
|
||||
@@ -106,9 +122,9 @@ public class ProposalDashboardController {
|
||||
|
||||
for (NutMap node : nodes) {
|
||||
if (node.getString("type").equals("task")) {
|
||||
long todoCount = todoTasks.stream().filter(task -> task.getInt("taskState") == ProcessTaskStateEnum.DOING.getCode() && task.getString("taskName").equals(node.getString("id"))).count();
|
||||
long todoCount = todoTasks.stream().filter(task -> task.getInt("taskState") == ProcessTaskStateEnum.DOING.getCode() && isDashboardTaskMatch(task, node.getString("id"))).count();
|
||||
node.put("todoCount", todoCount);
|
||||
long doneCount = todoTasks.stream().filter(task -> task.getInt("taskState") == ProcessTaskStateEnum.FINISHED.getCode() && task.getString("taskName").equals(node.getString("id"))).count();
|
||||
long doneCount = todoTasks.stream().filter(task -> task.getInt("taskState") == ProcessTaskStateEnum.FINISHED.getCode() && isDashboardTaskMatch(task, node.getString("id"))).count();
|
||||
node.put("doneCount", doneCount);
|
||||
} else if (node.getString("type").equals("total")) {
|
||||
int count = dao.count(ProposalInfo.class, Cnd.where(ProposalInfo::getSessionId, "=", sessionId));
|
||||
@@ -161,9 +177,13 @@ public class ProposalDashboardController {
|
||||
if (StrUtil.isNotBlank(selectNodeType) && StrUtil.isNotBlank(selectNodeId)) {
|
||||
switch (selectNodeType) {
|
||||
case "task":
|
||||
cnd.and("t.taskName", "=", selectNodeId);
|
||||
if (MASTER_REPLY_TASK_NAME.equals(selectNodeId)) {
|
||||
cnd.and("t.taskName", "in", MERGED_MASTER_REPLY_TASK_NAMES);
|
||||
} else {
|
||||
cnd.and("t.taskName", "=", selectNodeId);
|
||||
}
|
||||
|
||||
if (selectNodeMode.equals("todo")) {
|
||||
if ("todo".equals(selectNodeMode)) {
|
||||
sql.setParam("taskState", ProcessTaskStateEnum.DOING.getCode());
|
||||
} else {
|
||||
sql.setParam("taskState", ProcessTaskStateEnum.FINISHED.getCode());
|
||||
@@ -183,5 +203,17 @@ public class ProposalDashboardController {
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
private int getDashboardNodeOrder(String taskName) {
|
||||
int index = DASHBOARD_TASK_NODE_ORDER.indexOf(taskName);
|
||||
return index < 0 ? Integer.MAX_VALUE : index;
|
||||
}
|
||||
|
||||
private boolean isDashboardTaskMatch(NutMap task, String nodeId) {
|
||||
String taskName = task.getString("taskName");
|
||||
if (MASTER_REPLY_TASK_NAME.equals(nodeId)) {
|
||||
return MERGED_MASTER_REPLY_TASK_NAMES.contains(taskName);
|
||||
}
|
||||
return nodeId.equals(taskName);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user