This commit is contained in:
Paidax
2024-10-10 14:57:56 +08:00
parent 9371024bef
commit 9c21da4f0f
2 changed files with 23 additions and 33 deletions
@@ -1,15 +1,19 @@
package io.v.nutz.zhgh.data.service.impl; package io.v.nutz.zhgh.data.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import io.v.nutz.base.service.AsyncService;
import io.v.nutz.base.service.impl.ViServiceImpl;
import io.v.nutz.base.utils.Roles; import io.v.nutz.base.utils.Roles;
import io.v.nutz.sys.models.Sys_unit; import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.sys.models.Sys_user_role; import io.v.nutz.sys.models.Sys_user_role;
import io.v.nutz.sys.services.SysRoleService;
import io.v.nutz.sys.services.SysUnitService; import io.v.nutz.sys.services.SysUnitService;
import io.v.nutz.sys.services.SysUserRoleService; import io.v.nutz.sys.services.SysUserRoleService;
import io.v.nutz.sys.services.SysUserService;
import io.v.nutz.web.commons.controller.userpartupdate.models.UserPartUp;
import io.v.nutz.web.commons.controller.userpartupdate.service.UserPatUpService;
import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.data.constant.SourceData; import io.v.nutz.zhgh.data.constant.SourceData;
import io.v.nutz.zhgh.data.constant.UserChangeType; import io.v.nutz.zhgh.data.constant.UserChangeType;
@@ -17,25 +21,14 @@ import io.v.nutz.zhgh.data.model.UserHistory;
import io.v.nutz.zhgh.data.model.UserSource; import io.v.nutz.zhgh.data.model.UserSource;
import io.v.nutz.zhgh.data.service.HistoryUserService; import io.v.nutz.zhgh.data.service.HistoryUserService;
import io.v.nutz.zhgh.data.service.SourceUserService; import io.v.nutz.zhgh.data.service.SourceUserService;
import io.v.nutz.base.lang.Enum;
import io.v.nutz.zhgh.member.UserMode; import io.v.nutz.zhgh.member.UserMode;
import io.v.nutz.base.service.AsyncService;
import io.v.nutz.base.service.impl.ViServiceImpl;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.sys.services.SysRoleService;
import io.v.nutz.sys.services.SysUserService;
import io.v.nutz.web.commons.controller.userpartupdate.models.UserPartUp;
import io.v.nutz.web.commons.controller.userpartupdate.service.UserPatUpService;
import io.v.nutz.zhgh.member.constant.MemberChangeOrigin; import io.v.nutz.zhgh.member.constant.MemberChangeOrigin;
import io.v.nutz.zhgh.member.handle.MemberChangeHandle;
import io.v.nutz.zhgh.member.model.MemberChangeRecord;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nutz.aop.interceptor.ioc.TransAop; import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd; import org.nutz.dao.Cnd;
import org.nutz.dao.Dao; import org.nutz.dao.Dao;
import org.nutz.dao.FieldFilter; import org.nutz.dao.FieldFilter;
import org.nutz.dao.Sqls; import org.nutz.dao.Sqls;
import org.nutz.dao.entity.Record;
import org.nutz.dao.sql.Sql; import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.Daos; import org.nutz.dao.util.Daos;
import org.nutz.ioc.aop.Aop; import org.nutz.ioc.aop.Aop;
@@ -127,9 +120,9 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
AtomicReference<Dao> filterColumnDao = new AtomicReference<>(dao()); AtomicReference<Dao> filterColumnDao = new AtomicReference<>(dao());
//全部更新时,要修改的用户表 //全部更新时,要修改的用户表
List<Sys_user> needDoUpdateList = new ArrayList<>(); List<Sys_user> needDoUpdateList = new CopyOnWriteArrayList<>();
//新增的用户 //新增的用户
List<Sys_user> needInitUserList = new ArrayList<>(); List<Sys_user> needInitUserList = new CopyOnWriteArrayList<>();
//添加角色的用户 //添加角色的用户
List<Sys_user_role> userRoles = new ArrayList<>(); List<Sys_user_role> userRoles = new ArrayList<>();
@@ -159,6 +152,8 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
u.setId(user == null ? source.getId() : user.getId()); u.setId(user == null ? source.getId() : user.getId());
if (user != null) { if (user != null) {
needDoUpdateList.add(u); needDoUpdateList.add(u);
} else {
needInitUserList.add(u);
} }
} }
case "add" -> { case "add" -> {
@@ -133,38 +133,33 @@ public class HealthCheckupProjectServiceImpl extends ViServiceImpl<HealthCheckup
public void renewHealthCheckupUser(HealthCheckupProject healthCheckupProject) { public void renewHealthCheckupUser(HealthCheckupProject healthCheckupProject) {
//全部组别人员 //全部组别人员
List<HealthCheckupUser> allGroupUsers = getHealthCheckupUserListByProject(healthCheckupProject); List<HealthCheckupUser> allGroupUsers = getHealthCheckupUserListByProject(healthCheckupProject);
//已选取人员 //已选取人员,选择表的人员
List<HealthCheckupUserSelection> selectionList = dao().query(HealthCheckupUserSelection.class, Cnd.where("projectId", "=", healthCheckupProject.getId())); List<HealthCheckupUser> userList = dao().query(HealthCheckupUser.class, Cnd.where("projectId", "=", healthCheckupProject.getId()));
// Set<String> selectUserIds = selectionList.stream().map(HealthCheckupUserSelection::getSelectUserId).collect(Collectors.toSet()); // 找出在 userList 中但不在allGroupUsers中的userId,这部分人要删除体检信息
//已选取人员不在组别里面的人 List<String> needDeleteUserIds = userList.stream()
.map(HealthCheckupUser::getUserId)
// 找出在selectionList中但不在allGroupUsers中的userId,这部分人要删除体检信息
List<String> needDeleteUserIds = selectionList.stream()
.map(HealthCheckupUserSelection::getSelectUserId)
.filter(selectUserId -> allGroupUsers.stream() .filter(selectUserId -> allGroupUsers.stream()
.noneMatch(user -> user.getUserId().equals(selectUserId))) .noneMatch(user -> user.getUserId().equals(selectUserId)))
.collect(Collectors.toList()); .collect(Collectors.toList());
//获取生成名单中没有的用户,这部分要添加 //获取生成名单中没有的用户,这部分要添加
Sql sql = Sqls.create("select userId from health_checkup_user where projectId = @projectId").setParam("projectId", healthCheckupProject.getId()); Sql sql = Sqls.create("select userId from health_checkup_user where projectId = @projectId").setParam("projectId", healthCheckupProject.getId());
List<NutMap> sourceUserMaps = (List<NutMap>) Daos.query(dao(), sql.toString(), Sqls.callback.maps()); List<NutMap> sourceSelectionUserMaps = (List<NutMap>) Daos.query(dao(), sql.toString(), Sqls.callback.maps());
Set<String> sourceUserIds = sourceUserMaps.stream().map(v -> v.getString("userId")).collect(Collectors.toSet()); Set<String> sourceSelectionUserIds = sourceSelectionUserMaps.stream().map(v -> v.getString("userId")).collect(Collectors.toSet());
//找出原来名单中没有的人,没有的就可以新增 //找出原来名单中没有的人,没有的就可以新增
List<HealthCheckupUser> canInsertUsers = allGroupUsers.stream().filter(v -> !sourceUserIds.contains(v.getId())).collect(Collectors.toList()); List<HealthCheckupUser> canInsertSelectionUsers = allGroupUsers.stream().filter(v -> !sourceSelectionUserIds.contains(v.getId())).collect(Collectors.toList());
//过滤出原有名单中没有的,可以新增 //过滤出原有名单中没有的,可以新增
List<HealthCheckupUser> needInsertUsers = canInsertUsers.parallelStream() List<HealthCheckupUser> needInsertSelectionUsers = canInsertSelectionUsers.parallelStream()
.filter(v -> !sourceUserIds.contains(v.getUserId())) .filter(v -> !sourceSelectionUserIds.contains(v.getUserId()))
.collect(Collectors.toList()); .collect(Collectors.toList());
// List<HealthCheckupUser> needInsertUsers = canInsertUsers.stream().filter(v -> !healthUserIdList.contains(v.getUserId())).collect(Collectors.toList()); List<String> userSelectionIds = userList.stream().filter(needDeleteUserIds::contains).map(HealthCheckupUser::getId).collect(Collectors.toList());
List<String> userSelectionIds = selectionList.stream().filter(needDeleteUserIds::contains).map(HealthCheckupUserSelection::getId).collect(Collectors.toList());
dao().clear(HealthCheckupUser.class, Cnd.where("userId", "in", needDeleteUserIds)); dao().clear(HealthCheckupUser.class, Cnd.where("userId", "in", needDeleteUserIds));
dao().clear(HealthCheckupUserSelection.class, Cnd.where("selectUserId", "in", needDeleteUserIds)); dao().clear(HealthCheckupUserSelection.class, Cnd.where("selectUserId", "in", needDeleteUserIds));
dao().clear(HealthCheckupUserCompanion.class, Cnd.where("userSelectionId", "in", userSelectionIds)); dao().clear(HealthCheckupUserCompanion.class, Cnd.where("userSelectionId", "in", userSelectionIds));
manyAddOrRenewUtil.addOrRenew(needInsertUsers, true); manyAddOrRenewUtil.addOrRenew(needInsertSelectionUsers, true);
} }