This commit is contained in:
=
2026-04-16 16:03:29 +08:00
parent 3b372a2425
commit 423cb1fd61
12 changed files with 148 additions and 48 deletions
@@ -65,7 +65,7 @@ public class SysDataUnitPullServiceImpl extends BaseServiceImpl<Sys_unit> implem
@Override
@Aop(TransAop.READ_COMMITTED)
public void updateUnits(List<String> unitIds) {
// 判断有没有父节点
/*Sys_unit parentUnit = dao().fetch(Sys_unit.class, Cnd.where(Sys_unit::getUnitcode, "=", "0000"));
if(parentUnit == null) {
@@ -136,6 +136,6 @@ public class SysDataUnitPullServiceImpl extends BaseServiceImpl<Sys_unit> implem
}
log.info("本次拉取单位数据,新增{}条,更新{}条", insertList.size(), updateList.size());
dao().insert(insertList);
dao().update(updateList);
dao().updateIgnoreNull(updateList);
}
}
@@ -5,6 +5,7 @@ import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HtmlUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.event.role.RoleEventMsg;
@@ -139,6 +140,31 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService
return memberPreparedByTypes.contains(preparedBy);
}
/**
* 检查用户是否符合会员条件
*
* @param employmentType 用人方式
* @return 是否符合会员条件
*/
private boolean checkMembershipEligibility(String employmentType, String userState) {
if (StrUtil.isBlank(employmentType)) {
return false;
}
if (!"在岗".equals(userState)) {
return false;
}
Set<String> memberEmploymentTypes = new HashSet<>(Arrays.asList(
"事业编制",
"劳动合同制",
"劳务派遣",
"人事代理"
));
return memberEmploymentTypes.contains(employmentType);
}
/**
* 全量更新用户数据
*
@@ -181,36 +207,34 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService
List<String> addMemberUserIds = Collections.synchronizedList(new ArrayList<>());
List<String> removeMemberUserIds = Collections.synchronizedList(new ArrayList<>());
// 处理每条数据
for (Sys_user_source source : sources) {
Sys_user user = userMap.get(source.getLoginname());
source.setMember(null);
// 创建用户对象
Sys_user u = new Sys_user();
BeanUtils.copyProperties(source, u);
// 根据用人方式判断是否为会员
boolean isMember = checkMembershipEligibility(source.getEmploymentType(), source.getUserState());
u.setMember(isMember);
if (user == null) {
// 新增用户,初始化数据
String salt = R.UU32();
u.setSalt(salt);
u.setPassword(PwdUtil.getPassword(PwdUtil.generate(12), salt));
/* if (u.getMember()) {
addMemberUserIds.add(u.getId());
}*/
needInitUserList.add(u);
} else {
// 修改现有用户
u.setId(user.getId());
// 更新会员状态
// 检测会员状态变更
boolean currentIsMember = user.getMember() != null && user.getMember();
if (!currentIsMember) {
// addMemberUserIds.add(user.getId());
} else{
// removeMemberUserIds.add(user.getId());
if (isMember && !currentIsMember) {
addMemberUserIds.add(user.getId());
} else if (!isMember && currentIsMember) {
removeMemberUserIds.add(user.getId());
}
needDoUpdateList.add(u);
@@ -323,7 +347,7 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService
});
}
/* // 4. 异步添加会员角色 - 不等待完成
// 4. 异步添加会员角色
if (Lang.isNotEmpty(addMemberUserIds)) {
executorService.execute(() -> {
try {
@@ -352,7 +376,7 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService
});
}
// 5. 异步移除会员角色 - 不等待完成
// 5. 异步移除会员角色
if (Lang.isNotEmpty(removeMemberUserIds)) {
executorService.execute(() -> {
try {
@@ -371,7 +395,7 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService
log.error("移除会员角色异常", e);
}
});
}*/
}
// 6. 处理其他任务
// 6.1 更新提案的校领导角色,发送订阅
@@ -23,10 +23,7 @@ import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.random.R;
import java.util.List;
import java.util.Arrays;
import java.util.Date;
import java.util.Calendar;
import java.util.*;
import java.util.concurrent.CompletableFuture;
/**
@@ -40,6 +37,31 @@ public class SysDataUserIncrUpdateServiceImpl implements SysDataUserUpdateServic
@Inject
private SysRoleService sysRoleService;
/**
* 检查用户是否符合会员条件
*
* @param employmentType 用人方式
* @return 是否符合会员条件
*/
private boolean checkMembershipEligibility(String employmentType, String userState) {
if (StrUtil.isBlank(employmentType)) {
return false;
}
if (!"在岗".equals(userState)) {
return false;
}
Set<String> memberEmploymentTypes = new HashSet<>(Arrays.asList(
"事业编制",
"劳动合同制",
"劳务派遣",
"人事代理"
));
return memberEmploymentTypes.contains(employmentType);
}
@Override
public String update(SysDataUserUpdateParam updateParam) {
// 基本SQL查询
@@ -68,33 +90,9 @@ public class SysDataUserIncrUpdateServiceImpl implements SysDataUserUpdateServic
sysUser.setPassword(PwdUtil.getPassword(pwd, salt));
sysUser.setLoginCount(0);
// 检查是否符合会员条件
// 1. 用户状态为"在岗"
if ("在岗".equals(sysUser.getUserState())) {
// 2. 检查聘用方式条件
List<String> membershipQualifyingPreparedBy = Arrays.asList("新人事代理", "校聘合同制", "事业编制");
// 第一种情况:聘用方式在指定列表中
boolean isQualifiedByPreparedBy = membershipQualifyingPreparedBy.contains(sysUser.getPreparedBy());
// 第二种情况:聘用方式是博士后,且进站时间不超过两年
boolean isQualifiedPostdoc = false;
if ("博士后".equals(sysUser.getPreparedBy()) && sysUser.getPostDoctoralJoinDate() != null) {
Calendar twoYearsAgo = Calendar.getInstance();
twoYearsAgo.add(Calendar.YEAR, -2);
Date twoYearsAgoDate = twoYearsAgo.getTime();
isQualifiedPostdoc = sysUser.getPostDoctoralJoinDate().after(twoYearsAgoDate);
}
// 如果满足任一条件,设置为会员
if (isQualifiedByPreparedBy || isQualifiedPostdoc) {
sysUser.setMember(true);
} else {
sysUser.setMember(false);
}
} else {
sysUser.setMember(false);
}
// 根据用人方式判断是否为会员
boolean isMember = checkMembershipEligibility(sysUser.getEmploymentType(), sysUser.getUserState());
sysUser.setMember(isMember);
}
List<List<Sys_user>> splitSysUsers = ListUtil.split(sysUsers, 500);
@@ -116,6 +114,28 @@ public class SysDataUserIncrUpdateServiceImpl implements SysDataUserUpdateServic
});
sysRoleService.clearCache();
// 为会员用户添加会员角色
List<String> memberUserIds = sysUsers.stream()
.filter(Sys_user::getMember)
.map(Sys_user::getId)
.toList();
if (!memberUserIds.isEmpty()) {
Sys_role memberRole = sysRoleService.getByCode(RoleConstant.MEMBER);
if (memberRole != null) {
List<Sys_user_role> memberRoles = memberUserIds.stream().map(userId -> {
Sys_user_role userRole = new Sys_user_role();
userRole.setUserId(userId);
userRole.setRoleId(memberRole.getId());
return userRole;
}).toList();
ThreadUtil.execAsync(() -> {
dao.insert(memberRoles);
});
}
}
//比较单位数据
List<Sys_unit> sysUnits = dao.query(Sys_unit.class, Cnd.where(Sys_unit::getUnitLevel, "=", 2));
List<String> sysUnitIds = sysUnits.stream().map(Sys_unit::getId).toList();
@@ -62,9 +62,15 @@ public class MemberInfoPageForm extends PageForm {
@ApiModelProperty("教职工类别")
private String personType;
@ApiModelProperty("用人方式")
private String employmentType;
@ApiModelProperty("人员类型数组")
private List<String> personTypes;
@ApiModelProperty("用人方式数组")
private List<String> employmentTypes;
@ApiModelProperty("编制类型数组")
private List<String> preparedBys;
@@ -131,6 +137,7 @@ public class MemberInfoPageForm extends PageForm {
cnd.andEX(prefix + "userState", "in", this.getUserStates());
cnd.andEX(prefix + "preparedBy", "in", this.getPreparedBys());
cnd.andEX(prefix + "personType", "in", this.getPersonTypes());
cnd.andEX(prefix + "employmentType", "in", this.getEmploymentTypes());
if(StrUtil.isAllBlank(this.getPageOrderName(),this.getPageOrderBy())){
cnd.asc("unionCode").asc("unitCode");
@@ -42,6 +42,8 @@ public class MemberStatisticsPageForm extends PageForm {
private List<String> personTypes;
private List<String> employmentTypes;
private List<String> preparedBys;
private List<String> userStates;
@@ -98,6 +98,7 @@ public class MemberInfoServiceImpl extends BaseServiceImpl<Sys_user> implements
u.userState,
u.unionName,
u.unitName,
u.employmentType,
DATE_FORMAT(u.teachingTime, '%Y-%m-%d') AS teachingTime,
DATE_FORMAT(u.expectedLeaveSchoolDate, '%Y-%m-%d') AS expectedLeaveSchoolDate,
u.member,
@@ -91,6 +91,7 @@ public class MemberStatisticsServiceImpl extends BaseServiceImpl<Sys_user> imple
handleField("personType", pageForm.getPersonTypes(), reverseSelection, IN_OR_NIN_OP, cnd);
handleField("preparedBy", pageForm.getPreparedBys(), reverseSelection, IN_OR_NIN_OP, cnd);
handleField("userState", pageForm.getUserStates(), reverseSelection, IN_OR_NIN_OP, cnd);
handleField("employmentType", pageForm.getEmploymentTypes(), reverseSelection, IN_OR_NIN_OP, cnd);
handleField("sex", pageForm.getSexTypes(), reverseSelection, IN_OR_NIN_OP, cnd);
cnd.andEX("sur.roleId", IN_OR_NIN_OP, pageForm.getRoleIds());
} catch (Exception e) {
@@ -149,6 +150,7 @@ public class MemberStatisticsServiceImpl extends BaseServiceImpl<Sys_user> imple
u.userState,
u.unionName,
u.unitName,
u.employmentType,
DATE_FORMAT(u.teachingTime, '%Y-%m-%d') AS teachingTime,
DATE_FORMAT(u.expectedLeaveSchoolDate, '%Y-%m-%d') AS expectedLeaveSchoolDate,
u.member,