From 5730478c79000d769542597a3178d015d5562cb2 Mon Sep 17 00:00:00 2001 From: "@jyuhsin" <729757837@qq.com> Date: Wed, 24 Sep 2025 20:00:07 +0800 Subject: [PATCH 1/2] commit --- .../info/MemberDataManageController.java | 196 ++++++++++---- .../member/info/datamanage/index.html | 254 +++++++++++++++++- 2 files changed, 389 insertions(+), 61 deletions(-) diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/info/MemberDataManageController.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/info/MemberDataManageController.java index 13b622ca..6bf53f7d 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/info/MemberDataManageController.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/info/MemberDataManageController.java @@ -2,20 +2,38 @@ package com.budwk.app.zhgh.staffmanage.member.controller.info; 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.base.utils.PageUtil; +import com.budwk.app.sys.models.Sys_role; +import com.budwk.app.sys.models.Sys_user; +import com.budwk.app.sys.models.Sys_user_role; +import com.budwk.app.sys.services.SysRoleService; import com.budwk.app.web.commons.auth.utils.AuthUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.dayofficework.meeting.model.MeetingInfo; +import com.budwk.app.zhgh.dayofficework.meeting.model.MeetingTimePeriodUser; import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberInfoPageForm; +import com.budwk.app.zhgh.staffmanage.member.service.MemberInfoService; import io.swagger.annotations.ApiOperation; +import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.dao.Chain; import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; import org.nutz.dao.Sqls; import org.nutz.dao.sql.Sql; import org.nutz.dao.util.cri.SqlExpressionGroup; +import org.nutz.ioc.aop.Aop; +import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.util.NutMap; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import java.util.List; /** * @version 1.0 @@ -29,62 +47,134 @@ import org.nutz.mvc.annotation.Ok; @At("/platform/member/info/dataManage") public class MemberDataManageController { - @At("") - @SaCheckPermission("member.info.dataManage") - @Ok("beetl:/platform/zhgh/staffmanage/member/info/datamanage/index.html") - public void index() {} + @Inject + private MemberInfoService memberInfoService; + @Inject + private Dao dao; + @Inject + private SysRoleService roleService; + + @At("") + @SaCheckPermission("member.info.dataManage") + @Ok("beetl:/platform/zhgh/staffmanage/member/info/datamanage/index.html") + public void index() { + } - @At - @ApiOperation("数据管理工具") - @SaCheckPermission("member.info.dataManage") - public Result pageData(MemberInfoPageForm pageForm) { - Sql sql = Sqls.create(""" - SELECT - id, - loginname, - username, - sex, - userState, - personType, - preparedBy, - unionName, - unitName, - mobile - from - `user` - $condition - """); - Cnd cnd = Cnd.NEW(); - if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) { - SqlExpressionGroup seg = new SqlExpressionGroup(); - seg.orLike("username", pageForm.getSearchKeyword()); - seg.orLike("loginname", pageForm.getSearchKeyword()); - cnd.and(seg); - } + @At + @ApiOperation("数据管理工具") + @SaCheckPermission("member.info.dataManage") + public Result pageData(MemberInfoPageForm pageForm) { + Sql sql = generateSql(pageForm, Cnd.NEW()); + Pagination pagination = memberInfoService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } - // 权限判断 - if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) { - SqlExpressionGroup seg = new SqlExpressionGroup(); - seg.or("unionId", "=", SecurityUtil.getUnionId()); - seg.or("unionId", "is", null); - seg.or("unionId", "=", ""); - cnd.and(seg); - } else { - cnd.andEX("unionId", "=", pageForm.getUnionId()); - cnd.andEX("unitId", "=", pageForm.getUnitId()); - } + @At + @ApiOperation("根据身份证号设置出生日期") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("member.info.dataManage") + @SLog(tag = "会员管理-数据管理工具", msg = "根据身份证号设置出生日期") + public Object setBirthdayByIdCard() { + Sql sql = Sqls.create(""" + UPDATE sys_user + SET birthday = STR_TO_DATE(SUBSTRING(idcard, 7, 8), '%Y%m%d') + WHERE (birthday IS NULL OR birthday = '') AND length(idcard)=18 + """); + memberInfoService.execute(sql); + return Result.success(); + } - cnd.andEX("userState", "in", pageForm.getUserStates()); - cnd.andEX("preparedBy", "in", pageForm.getPreparedBys()); - cnd.andEX("personType", "in", pageForm.getPersonTypes()); + @At + @ApiOperation("批量设置会员") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("member.info.dataManage") + @SLog(tag = "会员管理-数据管理工具", msg = "批量设置会员") + public Object setMemberByCnd(MemberInfoPageForm pageForm, boolean append) { - if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { - cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); - } else { - cnd.asc("unitcode").asc("loginname"); - } - sql.setCondition(cnd); - return Result.success(); - } + Sys_role sysRole = roleService.getByCode(RoleConstant.MEMBER.name()); + // 如果是先清空再追加 + if(!append) { + dao.update(Sys_user.class, Chain.make("member", false), Cnd.NEW()); + dao.clear(Sys_user_role.class, Cnd.where(Sys_user_role::getRoleId, "=", sysRole.getId())); + } + + Cnd cnd = Cnd.NEW(); + cnd.and(Cnd.exps("member", "=", false).or("member", "is", null)); + Sql sql = generateSql(pageForm, cnd); + List listMap = memberInfoService.listMap(sql); + List list = listMap.stream().map(o -> o.getString("id")).toList(); + + List userRoles = list.stream().map(o -> { + Sys_user_role userRole = new Sys_user_role(); + userRole.setRoleId(sysRole.getId()); + userRole.setUserId(o); + return userRole; + }).toList(); + + dao.update(Sys_user.class, Chain.make("member", true), Cnd.where("id", "in", list)); + dao.insert(userRoles); + return Result.success(); + } + + @At + @ApiOperation("批量设置福利会员") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("member.info.dataManage") + @SLog(tag = "会员管理-数据管理工具", msg = "批量设置福利会员") + public Object setWelfareMemberByCnd(MemberInfoPageForm pageForm, boolean append) { + + // 如果是先清空再追加 + if(!append) { + dao.update(Sys_user.class, Chain.make("welfareMember", false), Cnd.NEW()); + } + + Cnd cnd = Cnd.NEW(); + cnd.and(Cnd.exps("welfareMember", "=", false).or("welfareMember", "is", null)); + Sql sql = generateSql(pageForm, cnd); + List listMap = memberInfoService.listMap(sql); + List list = listMap.stream().map(o -> o.getString("id")).toList(); + + dao.update(Sys_user.class, Chain.make("welfareMember", true), Cnd.where("id", "in", list)); + return Result.success(); + } + + private Sql generateSql(MemberInfoPageForm pageForm, Cnd cnd) { + Sql sql = Sqls.create(""" + SELECT + id, + loginname as loginName, + username as userName, + sex, + userState, + personType, + preparedBy, + unionName, + unitName, + mobile + from + `vw_user` + $condition + """); + pageForm.buildSearch(cnd, ""); + if (StrUtil.isNotBlank(pageForm.getStartLoginNames())) { + String[] loginNames = pageForm.getStartLoginNames().split(","); + SqlExpressionGroup seg = new SqlExpressionGroup(); + for (String loginName : loginNames) { + seg.orLikeL("loginname", loginName); + } + cnd.and(seg); + } + + if (StrUtil.isNotBlank(pageForm.getEndLoginNames())) { + String[] loginNames = pageForm.getEndLoginNames().split(","); + SqlExpressionGroup seg = new SqlExpressionGroup(); + for (String loginName : loginNames) { + seg.orLikeR("loginname", loginName); + } + cnd.and(seg); + } + sql.setCondition(cnd); + return sql; + } } diff --git a/src/main/resources/views/platform/zhgh/staffmanage/member/info/datamanage/index.html b/src/main/resources/views/platform/zhgh/staffmanage/member/info/datamanage/index.html index 20a77d59..3c8e7165 100644 --- a/src/main/resources/views/platform/zhgh/staffmanage/member/info/datamanage/index.html +++ b/src/main/resources/views/platform/zhgh/staffmanage/member/info/datamanage/index.html @@ -1,19 +1,167 @@ + + +
- + + + + + + + + + + +
+
人员类型
+
+ + {{ item.name }} + + 清空 + + 全部 + +
+
+
+
在职状态
+
+ + {{ item.name }} + + 清空 + + 全部 + +
+
+ +
+ - + + 根据身份证设置生日 + +
+
+
+

+ + 如果先清空已有数据,后更新,请选择 + 更新 + (这将清空目前所有的会员,请谨慎操作!) +

+

+ + 如果追加或更新数据,请选择 + 追加 +

+
+
+ + {{ item.text }} +
+
- +
+ +
diff --git a/src/main/resources/views/platform/zhgh/staffmanage/member/info/history/index.html b/src/main/resources/views/platform/zhgh/staffmanage/member/info/history/index.html index 313a5f52..fd67f9ff 100644 --- a/src/main/resources/views/platform/zhgh/staffmanage/member/info/history/index.html +++ b/src/main/resources/views/platform/zhgh/staffmanage/member/info/history/index.html @@ -43,10 +43,10 @@ layout("/layouts/platform.html"){ - + @@ -120,7 +120,7 @@ layout("/layouts/platform.html"){ { prop: "sex", label: "性别" }, { prop: "mobile", label: "联系电话" }, { prop: "userState", label: "在职状态", sortable: true }, - { prop: "preparedBy", label: "聘用方式", sortable: true }, + { prop: "preparedBy", label: "编制类别", sortable: true }, { prop: "personType", label: "人员类型", sortable: true }, { prop: "unionName", label: "所属工会", sortable: true }, { prop: "unitName", label: "所属单位", sortable: true } diff --git a/src/main/resources/views/platform/zhgh/staffmanage/member/school/verification/check/schoolViewAndHandle.js b/src/main/resources/views/platform/zhgh/staffmanage/member/school/verification/check/schoolViewAndHandle.js index 4e5e6b3c..9317c4bd 100644 --- a/src/main/resources/views/platform/zhgh/staffmanage/member/school/verification/check/schoolViewAndHandle.js +++ b/src/main/resources/views/platform/zhgh/staffmanage/member/school/verification/check/schoolViewAndHandle.js @@ -19,8 +19,8 @@ const SCHOOL_VIEW_AND_HANDLE = { - - + @@ -140,7 +140,7 @@ const SCHOOL_VIEW_AND_HANDLE = { { label: "工号", prop: "loginname" }, { label: "性别", prop: "sex" }, { label: "在职状态", prop: "userState" }, - { label: "聘用方式", prop: "preparedBy" }, + { label: "编制类别", prop: "preparedBy" }, { label: "人员类型", prop: "personType" }, { label: "所属单位", prop: "unitName" }, { label: "是否变更", prop: "isChanged" }, diff --git a/src/main/resources/views/platform/zhgh/staffmanage/member/school/verification/check/viewChangeTypeUser.js b/src/main/resources/views/platform/zhgh/staffmanage/member/school/verification/check/viewChangeTypeUser.js index f01a0f08..f95ccaca 100644 --- a/src/main/resources/views/platform/zhgh/staffmanage/member/school/verification/check/viewChangeTypeUser.js +++ b/src/main/resources/views/platform/zhgh/staffmanage/member/school/verification/check/viewChangeTypeUser.js @@ -17,8 +17,8 @@ const VIEW_CHANGE_TYPE_USER = { - - + @@ -76,7 +76,7 @@ const VIEW_CHANGE_TYPE_USER = { { prop: "loginname", label: "工号", sortable: true }, { prop: "username", label: "姓名", sortable: true }, { prop: "userState", label: "在职状态", sortable: true }, - { prop: "preparedBy", label: "聘用方式", sortable: true }, + { prop: "preparedBy", label: "编制类别", sortable: true }, { prop: "personType", label: "人员类型", sortable: true }, { prop: "unionName", label: "所属工会", sortable: true }, { prop: "unitName", label: "所属单位", sortable: true }, diff --git a/src/main/resources/views/platform/zhgh/staffmanage/member/school/verification/manage/verificationSetUserList.js b/src/main/resources/views/platform/zhgh/staffmanage/member/school/verification/manage/verificationSetUserList.js index f91e9825..3d6fb8f6 100644 --- a/src/main/resources/views/platform/zhgh/staffmanage/member/school/verification/manage/verificationSetUserList.js +++ b/src/main/resources/views/platform/zhgh/staffmanage/member/school/verification/manage/verificationSetUserList.js @@ -32,8 +32,8 @@ const VERIFICATION_SET_USER_LIST = { - - + diff --git a/src/main/resources/views/platform/zhgh/staffmanage/member/school/verification/manage/verificationShowSelectionUsers.js b/src/main/resources/views/platform/zhgh/staffmanage/member/school/verification/manage/verificationShowSelectionUsers.js index 28c77f90..8a1b4c5a 100644 --- a/src/main/resources/views/platform/zhgh/staffmanage/member/school/verification/manage/verificationShowSelectionUsers.js +++ b/src/main/resources/views/platform/zhgh/staffmanage/member/school/verification/manage/verificationShowSelectionUsers.js @@ -26,8 +26,8 @@ const VERIFICATION_SHOW_SELECTION_USERS = { - - + @@ -43,7 +43,7 @@ const VERIFICATION_SHOW_SELECTION_USERS = { - + 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 e818a7c0..2798cd3b 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 @@ -47,7 +47,39 @@ layout("/layouts/platform.html"){ - 导出 + 导出 + + + + +
+ 全选 + 反选 +
+ + + + {{ f.label }} + + + + + + 列设置 + +
@@ -83,7 +118,7 @@ layout("/layouts/platform.html"){ - + @@ -114,20 +149,38 @@ layout("/layouts/platform.html"){ units: [], childrenData: {}, tableColumns: [ - { prop: "loginname", label: "工号", fixed: "left" }, - { prop: "username", label: "姓名", fixed: "left" }, - { prop: "sex", label: "性别" }, + { prop: "loginname", label: "工号", width: 120, fixed: "left"}, + { prop: "username", label: "姓名", width: 120, fixed: "left" }, + { prop: "sex", label: "性别", width: 120}, { prop: "birthday", label: "出生年月", width: 120, sortable: true }, - { prop: "mobile", label: "联系电话" }, + { prop: "nationality", label: "国籍", width: 120, sortable: true, checked: 0 }, + { prop: "nation", label: "民族", width: 120, sortable: true}, + { prop: "mobile", label: "联系电话", width: 120 }, + { prop: "political", label: "政治面貌", width: 120, sortable: true}, { prop: "userState", label: "在职状态", width: 120, sortable: true }, { prop: "personType", label: "教职工类别", width: 120, sortable: true }, - { prop: "preparedBy", label: "聘用方式", width: 120, sortable: true }, - { prop: "postDoctoralJoinDate", label: "进站时间", sortable: true }, - { prop: "identityType", 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 }, { prop: "unitName", label: "所属单位", width: 120, sortable: true }, - { prop: "arrivalAtSchoolDate", label: "来校年月", width: 120, sortable: true } - ] + { prop: "idCardType", label: "证件类型", width: 120, sortable: true, checked: 0 }, + { prop: "idCard", label: "证件号码", width: 120, sortable: true, checked: 0 }, + { prop: "marriage", label: "婚姻状况", width: 120, sortable: true, checked: 0 }, + { prop: "jobCategory", label: "岗位类别", width: 120, sortable: true, checked: 0 }, + + { prop: "professionalTitle", label: "职称", width: 120, sortable: true, checked: 0 }, + { prop: "professionalLevel", label: "职级", width: 120, sortable: true, checked: 0 }, + { prop: "employeeSource", label: "职工来源", width: 120, sortable: true, checked: 0 }, + { prop: "administrativeLevel", label: "行政级别(管理岗位)", width: 120, sortable: true, checked: 0 }, + { prop: "positionSeries", label: "岗位系列", width: 120, sortable: true, checked: 0 }, + { prop: "positionLevel", label: "岗级", width: 120, sortable: true, checked: 0 }, + { prop: "administrativePositionLevel", label: "行政岗级", width: 120, sortable: true, checked: 0 }, + { prop: "arrivalAtSchoolDate", label: "来校时间", width: 120, sortable: true, checked: 0 }, + { prop: "teachingTime", label: "从教年月", width: 120, sortable: true, checked: 0 }, + { prop: "expectedLeaveSchoolDate", label: "预计/最后离校时间", width: 120, sortable: true, checked: 0 }, + ], + + checkedFields: [] } }, components: { @@ -142,12 +195,17 @@ layout("/layouts/platform.html"){ }, doExport() { const pageForm = clone(this.pageForm) + pageForm.userIds = JSON.stringify(this.pageForm.userIds) pageForm.unionId = JSON.stringify(this.pageForm.unionId) pageForm.unitId = JSON.stringify(this.pageForm.unitId) pageForm.sexTypes = JSON.stringify(this.pageForm.sexTypes) pageForm.memberTypes = JSON.stringify(this.pageForm.memberTypes) pageForm.personTypes = JSON.stringify(this.pageForm.personTypes) pageForm.userStates = JSON.stringify(this.pageForm.userStates) + 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) this.$downLoad("/platform/member/statistics/comprehensive/doExport", pageForm) }, search(pageForm) { @@ -159,6 +217,7 @@ layout("/layouts/platform.html"){ }, pageData() { const pageForm = clone(this.pageForm) + pageForm.userIds = JSON.stringify(this.pageForm.userIds) pageForm.age = JSON.stringify(this.pageForm.age) pageForm.unionId = JSON.stringify(this.pageForm.unionId) pageForm.unitId = JSON.stringify(this.pageForm.unitId) @@ -188,7 +247,22 @@ layout("/layouts/platform.html"){ this.$message.error(res.msg) } }) + }, + checkAll() { + this.checkedFields = this.tableColumns.map(c => c.prop); + }, + invertCheck() { + const all = this.tableColumns.map(c => c.prop); + this.checkedFields = all.filter(p => !this.checkedFields.includes(p)); } + }, + computed: { + showColumns() { + return this.tableColumns.filter(c => this.checkedFields.includes(c.prop)); + } + }, + mounted() { + this.checkedFields = this.tableColumns.filter(c => c.checked !== 0).map(c => c.prop); } }) 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 ee3d2542..95714f3d 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 @@ -1,59 +1,27 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = { template: /*language=HTML*/ ` - - 年  度: - - - - - - 本年 - - - + 姓名/工号: - - - - - - - - - - - 所属工会: - - - - - - 所属单位: - - - - - + + + - + 性别: @@ -69,6 +37,31 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = { + + 在职状态: + + + 人员类型: - - 在职状态: -
- + - + - +