diff --git a/src/main/java/com/budwk/app/sys/controller/SysDataUserUpdateController.java b/src/main/java/com/budwk/app/sys/controller/SysDataUserUpdateController.java index 248c5d8..c948f99 100644 --- a/src/main/java/com/budwk/app/sys/controller/SysDataUserUpdateController.java +++ b/src/main/java/com/budwk/app/sys/controller/SysDataUserUpdateController.java @@ -84,7 +84,7 @@ public class SysDataUserUpdateController { cnd.and(Cnd.likeEX("u.loginname", pageForm.getLoginName())); cnd.andEX("u.unitId", "=", pageForm.getUnitId()); cnd.andEX("u.userState", "=", pageForm.getUserState()); - cnd.andEX("u.;preparedBy", "=", pageForm.getPreparedBy()); + cnd.andEX("u.preparedBy", "=", pageForm.getPreparedBy()); cnd.andEX("u.personType", "=", pageForm.getPersonType()); if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); diff --git a/src/main/java/com/budwk/app/sys/models/Sys_union_group.java b/src/main/java/com/budwk/app/sys/models/Sys_union_group.java index b3552ae..2bd3de8 100644 --- a/src/main/java/com/budwk/app/sys/models/Sys_union_group.java +++ b/src/main/java/com/budwk/app/sys/models/Sys_union_group.java @@ -42,7 +42,7 @@ public class Sys_union_group extends BaseModel { @Column @Comment("小组长") - @ColDefine(type = ColType.VARCHAR, width = 32) + @ColDefine(type = ColType.VARCHAR) private List leaders; } 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 46f33ab..22ef947 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 @@ -3,7 +3,9 @@ package com.budwk.app.sys.services.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.date.DateField; +import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdcardUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HtmlUtil; @@ -34,6 +36,7 @@ import org.springframework.beans.BeanUtils; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import java.lang.reflect.Field; +import java.time.LocalDate; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; @@ -114,7 +117,7 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService */ private boolean checkMembershipEligibility(String userState, String preparedBy, Date postDoctoralJoinDate, Sys_user user) { // 博士后单独判断:只要进站时间在两年内就是会员 - if ("博士后".equals(preparedBy)) { + /*if ("博士后".equals(preparedBy)) { Date twoYearsAgo = DateUtil.offset(DateUtil.date(), DateField.YEAR, -2).toJdkDate(); if (postDoctoralJoinDate != null) { return postDoctoralJoinDate.after(twoYearsAgo); @@ -123,6 +126,27 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService return user.getPostDoctoralJoinDate().after(twoYearsAgo); } return false; + }*/ + + // 2026-01-10 JyuHsin 修改博士后逻辑 + // 如果是新进博士后,那么直接就不是会员,如果在库里已经是会员的,判断进站时间,如果超过2年就不是会员 + if ("博士后".equals(preparedBy)) { + // 如果是新入职的,user参数传的是null,那么直接就不是会员 + if(Lang.isEmpty(user)) { + return false; + } + boolean currentIsMember = user.getMember() != null && user.getMember(); + if(!currentIsMember) { + return false; + } + // 如果已经是会员的,判断进站时间 + if (user.getPostDoctoralJoinDate() != null) { + DateTime afterTwoYear = DateUtil.offset(user.getPostDoctoralJoinDate(), DateField.YEAR, 2); + DateTime today = DateUtil.date(); + // 当前日期在进站时间推2年之后,意思就是进站时间超过了2年 + return !today.isAfter(afterTwoYear); + } + return false; } // 其他人员需要判断在岗状态和聘用方式 @@ -165,7 +189,8 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService List specialStaffUserLoginNames = dao.query(Sys_user.class, Cnd.where(Sys_user::getId, "in", specialStaffUserIds)).stream().map(Sys_user::getLoginname).toList(); // 找特殊人员在源数据中退休的 - List retireList = dao.query(Sys_user_source.class, Cnd.where(Sys_user_source::getPullTime, "=", updateParam.getPullTime()).and("userState", "=", "退休").and(Sys_user_source::getLoginname, "in", specialStaffUserLoginNames)); + List usList = List.of("辞职", "退休", "调出", "无", "退站", "其他", "出站", "死亡", "不保留编制", "退休死亡", "离休", "离职", "辞退", "合同到期", "解聘", "离休死亡", "开除公职", "合同终止", "解除合同", "开除", "除名", "内退"); + List retireList = dao.query(Sys_user_source.class, Cnd.where(Sys_user_source::getPullTime, "=", updateParam.getPullTime()).and("userState", "in", usList).and(Sys_user_source::getLoginname, "in", specialStaffUserLoginNames)); List retireLoginNames = retireList.stream().map(Sys_user_source::getLoginname).distinct().toList(); List list = specialStaffUserLoginNames.stream().filter(o -> !retireLoginNames.contains(o)).toList(); @@ -241,6 +266,12 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService if (StrUtil.isNotBlank(user.getIdCard())) { u.setIdCard(null); } + if (StrUtil.isNotBlank(user.getIdCard()) && user.getIdCard().length() == 18) { + DateTime birthDate = IdcardUtil.getBirthDate(user.getIdCard()); + if (birthDate != null) { + u.setBirthday(birthDate); + } + } // 检查会员资格 boolean shouldBeMember = checkMembershipEligibility( diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/change/MemberChangeManageController.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/change/MemberChangeManageController.java index e6baf74..f5d7659 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/change/MemberChangeManageController.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/change/MemberChangeManageController.java @@ -130,7 +130,7 @@ public class MemberChangeManageController { // 启动流程 HashMap processVariables = new HashMap<>(); - processVariables.put("processType", branchGroupRoleBool ? "unionGroup" : "branchUnion"); + processVariables.put("processType", Lang.isNotEmpty(group) ? "unionGroup" : "branchUnion"); bpmService.startSubmitProcessInstance( BpmProcessConstant.MEMBER_CHANGE.name(), @@ -159,14 +159,14 @@ public class MemberChangeManageController { } else { vars.put("groupAuditNext", "school"); } - completeLatestTask(instance, "工会小组审核通过", null, vars); + completeLatestTask(instance, "工会小组审核通过", BpmTaskApprovalTypeEnum.DYNAMIC, null, vars); // processVariables.put("") } // 2. 分工会审核通过(如果是分工会角色) if (branchRoleBool || schoolRoleBool) { - completeLatestTask(instance, "分工会审核通过", null, null); + completeLatestTask(instance, "分工会审核通过", BpmTaskApprovalTypeEnum.PASS, null, null); } // 3. 校工会审核通过(如果是校工会或超管) @@ -174,6 +174,7 @@ public class MemberChangeManageController { // completeLatestTask 后 taskId 可能变化,所以重新查一次 BpmProcessInstance committeeInstance = getProcessInstanceByBusinessId(record.getId()); completeLatestTask(committeeInstance, "校工会审核通过", + BpmTaskApprovalTypeEnum.PASS, vars -> memberCommonService.compareChangeInfoAndUpdateMember(record.getId()), null); } @@ -215,6 +216,7 @@ public class MemberChangeManageController { * @param postAction 成功后执行的动作(如更新会员数据) */ private void completeLatestTask(BpmProcessInstance instance, String opinion, + BpmTaskApprovalTypeEnum typeEnum, Consumer> postAction, Map var) { BpmProcessTask task = getLatestTaskByInstanceId(instance.getId()); @@ -235,7 +237,7 @@ public class MemberChangeManageController { variables.putAll(var); } // 执行完成任务 - bpmService.completeTask(task.getId(), BpmTaskApprovalTypeEnum.PASS, variables, List.of(SecurityUtil.getUserLoginname())); + bpmService.completeTask(task.getId(), typeEnum, variables, List.of(SecurityUtil.getUserLoginname())); // 回调后置操作 if (postAction != null) { diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/models/MemberChangeRecord.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/models/MemberChangeRecord.java index 214f12b..343c46c 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/models/MemberChangeRecord.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/models/MemberChangeRecord.java @@ -198,6 +198,10 @@ public class MemberChangeRecord extends BaseModel { @Comment("博士后进站时间") @ColDefine(type = ColType.DATE) private Date postDoctoralJoinDate; + @Column + @Comment("出生年月") + @ColDefine(type = ColType.DATE) + private Date birthday; @Column @Comment("个人简况") diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberCommonServiceImpl.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberCommonServiceImpl.java index 2a78cbc..983b652 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberCommonServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberCommonServiceImpl.java @@ -83,6 +83,7 @@ public class MemberCommonServiceImpl extends BaseServiceImpl implement u.idCardType, u.idCard, u.mobile, + u.welfareMember, u.welfareMobile, u.education, u.academicDegree, 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 e0d80ba..2b3bd61 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 @@ -237,6 +237,8 @@ public class MemberInfoServiceImpl extends BaseServiceImpl implements exportEntities.add(new ExcelExportEntity("性别", "sex", 20)); exportEntities.add(new ExcelExportEntity("联系电话", "mobile", 20)); exportEntities.add(new ExcelExportEntity("身份证号", "idCard", 30)); + exportEntities.add(new ExcelExportEntity("出生年月", "birthday", 30)); + exportEntities.add(new ExcelExportEntity("进站时间", "postDoctoralJoinDate", 30)); exportEntities.add(new ExcelExportEntity("在职状态", "userState", 20)); exportEntities.add(new ExcelExportEntity("聘用方式", "preparedBy", 20)); exportEntities.add(new ExcelExportEntity("人员类型", "personType", 20)); 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 33fbd5a..28912b7 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 @@ -136,7 +136,7 @@ public class MemberStatisticsServiceImpl extends BaseServiceImpl imple u.loginname, u.username, u.sex, - u.birthday, + DATE_FORMAT(u.birthday, '%Y-%m-%d') as birthday, u.political, u.joinPartyDate, u.nation, diff --git a/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareListController.java b/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareListController.java index 7ece19a..1713495 100644 --- a/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareListController.java +++ b/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareListController.java @@ -86,8 +86,9 @@ public class WelfareListController { @SaCheckPermission("welfare.list.mange") @SLog(tag = "福利名单管理", msg = "管理员删除某个福利会员") public Result delete(String projectId, String userId, String id) { + WelfareList oldWelfare = welfareListService.fetch(id); welfareListService.delete(id); - welfareListService.dao().clear(WelfareUserSelection.class, Cnd.where("welfareId", "=", projectId).and("selectUserId", "=", userId)); + welfareListService.dao().clear(WelfareUserSelection.class, Cnd.where("welfareId", "=", oldWelfare.getProjectId()).and("selectUserId", "=", oldWelfare.getUserId())); return Result.success(); } diff --git a/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareSelectionSituationController.java b/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareSelectionSituationController.java index 4c23504..81de153 100644 --- a/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareSelectionSituationController.java +++ b/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareSelectionSituationController.java @@ -4,15 +4,19 @@ import cn.dev33.satoken.annotation.SaCheckLogin; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.util.StrUtil; import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.constant.RoleConstant; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.result.Result; import com.budwk.app.sys.models.Sys_user; +import com.budwk.app.web.commons.auth.utils.AuthUtil; import com.budwk.app.zhgh.welfare.model.WelfareList; +import com.budwk.app.zhgh.welfare.model.WelfareProject; import com.budwk.app.zhgh.welfare.model.WelfareUserSelection; import com.budwk.app.zhgh.welfare.param.WelfareSelectionSituationPageForm; import com.budwk.app.zhgh.welfare.service.WelfareListService; import com.budwk.app.zhgh.welfare.service.WelfareSelectionSituationService; import com.budwk.app.zhgh.welfare.service.WelfareStatisticsService; +import com.jogamp.common.util.SecurityUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -81,6 +85,12 @@ public class WelfareSelectionSituationController { @SLog(type = "welfare", tag = "选择福利", msg = "代选福利") @SaCheckPermission("welfare.selection.situation") public Result confirmSelect(@Param("selections") WelfareUserSelection[] selections, String projectId, String userId) { + WelfareProject project = dao.fetch(WelfareProject.class, projectId); + if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) { + if(project.getChoiceTimeEnd().getTime() userSelections = listMap(sql2); for (NutMap union : mapUnions) { + System.out.println(union.getString("name")); // 福利人数 long teacherSum = welfareSelectionList.stream().filter(v -> v.getString("welfareUnionId", "").equals(union.getString("id"))).count(); union.put("teacherSum", teacherSum); @@ -109,7 +110,7 @@ public class WelfareStatisticsServiceImpl extends BaseServiceImpl v.getString("welfareUnionId").equals(union.getString("id")) && StrUtil.isNotBlank(v.getString("selectOptionId")) && v.getString("selectOptionId").equals(option.getId())).map(v -> v.getString("selectUserId")).distinct().count(); + long count = userSelections.stream().filter(v -> v.getString("welfareUnionId", "").equals(union.getString("id")) && StrUtil.isNotBlank(v.getString("selectOptionId")) && v.getString("selectOptionId").equals(option.getId())).map(v -> v.getString("selectUserId")).distinct().count(); union.put(option.getId(), count); } } @@ -462,11 +463,11 @@ public class WelfareStatisticsServiceImpl extends BaseServiceImpl v.getString("welfareUnionId").equals(union.getString("id"))).count(); + long teacherSum = welfareSelectionList.stream().filter(v -> v.getString("welfareUnionId","").equals(union.getString("id"))).count(); union.put("teacherSum", teacherSum); // 已选人数 - long selectedNum = welfareSelectionList.stream().filter(v -> v.getString("welfareUnionId").equals(union.getString("id")) && v.getBoolean("has_selected")).count(); + long selectedNum = welfareSelectionList.stream().filter(v -> v.getString("welfareUnionId","").equals(union.getString("id")) && v.getBoolean("has_selected")).count(); union.put("selectedNum", selectedNum); // 未选人数 @@ -474,7 +475,7 @@ public class WelfareStatisticsServiceImpl extends BaseServiceImpl v.getString("welfareUnionId").equals(union.getString("id")) && v.getString("selectOptionId").equals(option.getId())).map(v -> v.getString("selectUserId")).distinct().count(); + long count = userSelections.stream().filter(v -> v.getString("welfareUnionId","").equals(union.getString("id")) && v.getString("selectOptionId").equals(option.getId())).map(v -> v.getString("selectUserId")).distinct().count(); union.put(option.getId(), count); } } diff --git a/src/main/resources/views/platform/zhgh/staffmanage/member/change/common/memberChange.js b/src/main/resources/views/platform/zhgh/staffmanage/member/change/common/memberChange.js index 8cddcc9..3d1395b 100644 --- a/src/main/resources/views/platform/zhgh/staffmanage/member/change/common/memberChange.js +++ b/src/main/resources/views/platform/zhgh/staffmanage/member/change/common/memberChange.js @@ -107,6 +107,16 @@ const MEMBER_CHANGE = { :disabled="allowFields('preparedBy')" style="width: 100%"> + + + + + + { - if (!value) { - // 如果值为空,直接通过校验 - callback(); - } else if (/^[1-9]\d{5}(18|19|20)?\d{2}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}(\d|[Xx])$/.test(value)) { - // 18位身份证号码格式正确 - callback(); - } else if (/^[1-9]\d{7}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) { - // 15位身份证号码格式正确 - callback(); - } else if (/^[1-9]\d{5}(18|19|20)?\d{2}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) { - // 外国人身份证号码格式正确(18位) - callback(); - } else if (/^[1-9]\d{7}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) { - // 外国人身份证号码格式正确(15位) - callback(); - } else if (/^[A-Z]\d{6,9}$/.test(value)) { - // 香港身份证号码格式正确(8位) - callback(); - } else { - // 格式错误,返回错误信息 - callback(new Error("身份证号码格式错误")); - } - }, - trigger: ["change", "blur"] - } - ], + // idCard: [ + // { + // validator: (rule, value, callback) => { + // if (!value) { + // // 如果值为空,直接通过校验 + // callback(); + // } else if (/^[1-9]\d{5}(18|19|20)?\d{2}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}(\d|[Xx])$/.test(value)) { + // // 18位身份证号码格式正确 + // callback(); + // } else if (/^[1-9]\d{7}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) { + // // 15位身份证号码格式正确 + // callback(); + // } else if (/^[1-9]\d{5}(18|19|20)?\d{2}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) { + // // 外国人身份证号码格式正确(18位) + // callback(); + // } else if (/^[1-9]\d{7}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) { + // // 外国人身份证号码格式正确(15位) + // callback(); + // } else if (/^[A-Z]\d{6,9}$/.test(value)) { + // // 香港身份证号码格式正确(8位) + // callback(); + // } else { + // // 格式错误,返回错误信息 + // callback(new Error("身份证号码格式错误")); + // } + // }, + // trigger: ["change", "blur"] + // } + // ], mobile: [ { validator: (rule, value, callback) => { 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 82d7856..9a5972b 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 @@ -111,8 +111,8 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = { - 姓  别: - 性  别: + { this.isSubmitting = false - this.$message.error("网络错误,请重试") + // this.$message.error("网络错误,请重试") }) }) }, diff --git a/src/main/resources/views/platform/zhgh/welfare/selectionSituation/index.html b/src/main/resources/views/platform/zhgh/welfare/selectionSituation/index.html index 62e4409..a4dfc46 100644 --- a/src/main/resources/views/platform/zhgh/welfare/selectionSituation/index.html +++ b/src/main/resources/views/platform/zhgh/welfare/selectionSituation/index.html @@ -144,7 +144,7 @@ layout("/layouts/platform.html"){ { prop: "welfareUnionName", label: "所属工会", sortable: true }, { prop: "welfareUnitName", label: "所属单位", sortable: true }, { prop: "selectedOptions", label: "所选福利", sortable: true }, - { prop: "mobile", label: "联系电话", sortable: true } + { prop: "welfareMobile", label: "福利号码", sortable: true } ], optionSelectVisible: false } diff --git a/src/main/resources/views/platform/zhghh5/welfare/select/index.html b/src/main/resources/views/platform/zhghh5/welfare/select/index.html index 4ae78aa..d080e24 100644 --- a/src/main/resources/views/platform/zhghh5/welfare/select/index.html +++ b/src/main/resources/views/platform/zhghh5/welfare/select/index.html @@ -277,8 +277,8 @@ layout("/layouts/platform_h5.html"){ .welfare-tag { position: absolute; - right: 8px; - top: 8px; + right: 41px; + top: -3px; z-index: 2; } @@ -531,6 +531,17 @@ layout("/layouts/platform_h5.html"){ text-align: center; margin-top: 6px; } + + .welfare-info-card .van-collapse-item__content { + padding: 0; + } + .welfare-info-card .welfare-cell-group .van-cell__title { + max-width: 70px; + } + .welfare-info-card .welfare-cell-group .van-cell { + padding: 8px 16px; + } +
@@ -582,7 +593,7 @@ layout("/layouts/platform_h5.html"){
- +