diff --git a/src/main/java/com/budwk/app/sys/services/impl/SysDataUnitPullServiceImpl.java b/src/main/java/com/budwk/app/sys/services/impl/SysDataUnitPullServiceImpl.java index 353e4ad..95c1f5f 100644 --- a/src/main/java/com/budwk/app/sys/services/impl/SysDataUnitPullServiceImpl.java +++ b/src/main/java/com/budwk/app/sys/services/impl/SysDataUnitPullServiceImpl.java @@ -65,7 +65,7 @@ public class SysDataUnitPullServiceImpl extends BaseServiceImpl implem @Override @Aop(TransAop.READ_COMMITTED) public void updateUnits(List 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 implem } log.info("本次拉取单位数据,新增{}条,更新{}条", insertList.size(), updateList.size()); dao().insert(insertList); - dao().update(updateList); + dao().updateIgnoreNull(updateList); } } diff --git a/src/main/java/com/budwk/app/sys/services/impl/SysDataUserAllUpdateServiceImpl.java b/src/main/java/com/budwk/app/sys/services/impl/SysDataUserAllUpdateServiceImpl.java index ed607d1..f7b8f39 100644 --- a/src/main/java/com/budwk/app/sys/services/impl/SysDataUserAllUpdateServiceImpl.java +++ b/src/main/java/com/budwk/app/sys/services/impl/SysDataUserAllUpdateServiceImpl.java @@ -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 memberEmploymentTypes = new HashSet<>(Arrays.asList( + "事业编制", + "劳动合同制", + "劳务派遣", + "人事代理" + )); + + return memberEmploymentTypes.contains(employmentType); + } + /** * 全量更新用户数据 * @@ -181,36 +207,34 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService List addMemberUserIds = Collections.synchronizedList(new ArrayList<>()); List 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 更新提案的校领导角色,发送订阅 diff --git a/src/main/java/com/budwk/app/sys/services/impl/SysDataUserIncrUpdateServiceImpl.java b/src/main/java/com/budwk/app/sys/services/impl/SysDataUserIncrUpdateServiceImpl.java index 78b3469..b9d3242 100644 --- a/src/main/java/com/budwk/app/sys/services/impl/SysDataUserIncrUpdateServiceImpl.java +++ b/src/main/java/com/budwk/app/sys/services/impl/SysDataUserIncrUpdateServiceImpl.java @@ -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 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 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> splitSysUsers = ListUtil.split(sysUsers, 500); @@ -116,6 +114,28 @@ public class SysDataUserIncrUpdateServiceImpl implements SysDataUserUpdateServic }); sysRoleService.clearCache(); + // 为会员用户添加会员角色 + List 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 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 sysUnits = dao.query(Sys_unit.class, Cnd.where(Sys_unit::getUnitLevel, "=", 2)); List sysUnitIds = sysUnits.stream().map(Sys_unit::getId).toList(); diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberInfoPageForm.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberInfoPageForm.java index e85e464..57b0126 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberInfoPageForm.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberInfoPageForm.java @@ -62,9 +62,15 @@ public class MemberInfoPageForm extends PageForm { @ApiModelProperty("教职工类别") private String personType; + @ApiModelProperty("用人方式") + private String employmentType; + @ApiModelProperty("人员类型数组") private List personTypes; + @ApiModelProperty("用人方式数组") + private List employmentTypes; + @ApiModelProperty("编制类型数组") private List 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"); diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberStatisticsPageForm.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberStatisticsPageForm.java index f78660f..46fb6cd 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberStatisticsPageForm.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberStatisticsPageForm.java @@ -42,6 +42,8 @@ public class MemberStatisticsPageForm extends PageForm { private List personTypes; + private List employmentTypes; + private List preparedBys; private List userStates; diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberInfoServiceImpl.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberInfoServiceImpl.java index e1e59d8..d1f1744 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberInfoServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberInfoServiceImpl.java @@ -98,6 +98,7 @@ public class MemberInfoServiceImpl extends BaseServiceImpl 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, diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberStatisticsServiceImpl.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberStatisticsServiceImpl.java index c68c3c1..e7808cd 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberStatisticsServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberStatisticsServiceImpl.java @@ -91,6 +91,7 @@ public class MemberStatisticsServiceImpl extends BaseServiceImpl 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 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, diff --git a/src/main/resources/views/platform/sys/data/user/update.html b/src/main/resources/views/platform/sys/data/user/update.html index 5f394ac..e15c260 100644 --- a/src/main/resources/views/platform/sys/data/user/update.html +++ b/src/main/resources/views/platform/sys/data/user/update.html @@ -74,6 +74,7 @@ layout("/layouts/platform.html"){ + diff --git a/src/main/resources/views/platform/zhgh/staffmanage/member/info/common/commonQuery.js b/src/main/resources/views/platform/zhgh/staffmanage/member/info/common/commonQuery.js index 64f84fb..7f36ca0 100644 --- a/src/main/resources/views/platform/zhgh/staffmanage/member/info/common/commonQuery.js +++ b/src/main/resources/views/platform/zhgh/staffmanage/member/info/common/commonQuery.js @@ -45,6 +45,10 @@ const COMMON_QUERY = { + + + `, store, @@ -68,6 +72,7 @@ const COMMON_QUERY = { userStates: [], personTypes: [], preparedBys: [], + employmentTypes: [], } } }, @@ -82,6 +87,7 @@ const COMMON_QUERY = { pageForm.userStates = JSON.stringify(this.pageForm.userStates) pageForm.personTypes = JSON.stringify(this.pageForm.personTypes) pageForm.preparedBys = JSON.stringify(this.pageForm.preparedBys) + pageForm.employmentTypes = JSON.stringify(this.pageForm.employmentTypes) this.$emit('search', pageForm) }, async initData(){ diff --git a/src/main/resources/views/platform/zhgh/staffmanage/member/info/group/index.html b/src/main/resources/views/platform/zhgh/staffmanage/member/info/group/index.html index b6e569e..979eea1 100644 --- a/src/main/resources/views/platform/zhgh/staffmanage/member/info/group/index.html +++ b/src/main/resources/views/platform/zhgh/staffmanage/member/info/group/index.html @@ -127,6 +127,7 @@ layout("/layouts/platform.html"){ { prop: "political", label: "政治面貌", width: 120, sortable: true}, { prop: "userState", label: "在职状态", width: 120, sortable: true }, { prop: "personType", label: "教职工类别", width: 120, sortable: true }, + { prop: "employmentType", label: "用人方式", width: 120, sortable: true }, { prop: "preparedBy", label: "编制类别", width: 120, sortable: true }, { prop: "postDoctoralJoinDate", label: "进站时间", sortable: true, checked: 0 }, { prop: "unionName", label: "所属工会", width: 120, sortable: true }, @@ -173,7 +174,8 @@ layout("/layouts/platform.html"){ pageForm.userStates = JSON.stringify(this.pageForm.userStates) pageForm.personTypes = JSON.stringify(this.pageForm.personTypes) pageForm.preparedBys = JSON.stringify(this.pageForm.preparedBys) - const data = this.tableColumns.filter(item => this.checkedFields.includes(item.prop)).map(item => { + pageForm.employmentTypes = JSON.stringify(this.pageForm.employmentTypes) + const data = this.tableColumns.filter(item => this.checkedFields.includes(item.prop)).map(item => { return {prop: item.prop, label: item.label} }) pageForm.columns = JSON.stringify(data) @@ -200,6 +202,7 @@ layout("/layouts/platform.html"){ pageForm.userStates = JSON.stringify(this.pageForm.userStates) pageForm.personTypes = JSON.stringify(this.pageForm.personTypes) pageForm.preparedBys = JSON.stringify(this.pageForm.preparedBys) + pageForm.employmentTypes = JSON.stringify(this.pageForm.employmentTypes) this.$axios.post(loc() + "/pageData", pageForm) .then((data) => { if (data.code === 0) { diff --git a/src/main/resources/views/platform/zhgh/staffmanage/member/statistics/comprehensive/index.html b/src/main/resources/views/platform/zhgh/staffmanage/member/statistics/comprehensive/index.html index 57e97bf..6327ffb 100644 --- a/src/main/resources/views/platform/zhgh/staffmanage/member/statistics/comprehensive/index.html +++ b/src/main/resources/views/platform/zhgh/staffmanage/member/statistics/comprehensive/index.html @@ -159,6 +159,7 @@ layout("/layouts/platform.html"){ { prop: "political", label: "政治面貌", width: 120, sortable: true}, { prop: "userState", label: "在职状态", width: 120, sortable: true }, { prop: "personType", label: "教职工类别", width: 120, sortable: true }, + { prop: "employmentType", label: "用人方式", width: 120, sortable: true }, { prop: "preparedBy", label: "编制类别", width: 120, sortable: true }, { prop: "postDoctoralJoinDate", label: "进站时间", sortable: true, checked: 0 }, { prop: "unionName", label: "所属工会", width: 120, sortable: true }, @@ -223,6 +224,7 @@ layout("/layouts/platform.html"){ pageForm.unitId = JSON.stringify(this.pageForm.unitId) pageForm.sexTypes = JSON.stringify(this.pageForm.sexTypes) pageForm.memberTypes = JSON.stringify(this.pageForm.memberTypes) + pageForm.employmentTypes = JSON.stringify(this.pageForm.employmentTypes) pageForm.personTypes = JSON.stringify(this.pageForm.personTypes) pageForm.preparedBys = JSON.stringify(this.pageForm.preparedBys) pageForm.memberStatus = JSON.stringify(this.pageForm.memberStatus) diff --git a/src/main/resources/views/platform/zhgh/staffmanage/member/statistics/comprehensive/queryForm.js b/src/main/resources/views/platform/zhgh/staffmanage/member/statistics/comprehensive/queryForm.js index 050b2f8..4b1f570 100644 --- a/src/main/resources/views/platform/zhgh/staffmanage/member/statistics/comprehensive/queryForm.js +++ b/src/main/resources/views/platform/zhgh/staffmanage/member/statistics/comprehensive/queryForm.js @@ -86,6 +86,31 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = { + + + 用人方式: + + 编制类别: @@ -208,6 +233,7 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = { searchName: "username", personTypes: [], preparedBys: [], + employmentTypes: [], userStates: [], memberStatus: [], year: moment().format("YYYY"), @@ -224,6 +250,7 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = { }, personTypeOptions: [], preparedByOptions: [], + employmentTypeOptions: [], userStateOptions: [], memberStatusOptions: [], unions: [], @@ -315,6 +342,7 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = { this.pageForm.sexTypes = [] this.pageForm.personTypes = [] this.pageForm.preparedBys = [] + this.pageForm.employmentTypes = [] this.pageForm.memberStatus = [] this.pageForm.userStates = [] this.pageForm.unionId = [] @@ -355,6 +383,10 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = { this.$businessTool.getDictOptions("USER_STATE").then((data) => { this.userStateOptions = data }) + this.$businessTool.getDictOptions("USER_EMPLOYMENT_TYPE").then((data) => { + this.employmentTypeOptions = data + console.log(data) + }) }, flushUnits() { this.$set(this.pageForm, "unitId", null)