first commit

This commit is contained in:
那些花儿
2025-07-14 08:45:13 +08:00
commit 3e86198a82
2710 changed files with 610330 additions and 0 deletions
@@ -0,0 +1,32 @@
package com.budwk.app.zhgh.staffmanage.member.constant;
import com.budwk.app.base.annotation.DictEnum;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @version 1.0
* @Author zzr
* @nameMemberChangeOrigin
* @Date 2024/8/8 9:26
* @注释 会员变更来源
*/
@Getter
@DictEnum(key = "MemberChangeOrigin", name = "会员变更来源")
@AllArgsConstructor
public enum MemberChangeOrigin {
PERSONAL("个人"),
BRANCH_UNION("分工会变更"),
BRANCH_UNION_VERIFICATION("分工会名单事项核对"),
UNION_GROUP("工会小组变更"),
SCHOOL_UNION("校工会变更"),
SCHOOL_UNION_VERIFICATION("校工会名单事项核对"),
SYSTEM("系统数据更新"),
OTHER("其他");
/**
* 避免和枚举类的name冲突
*/
public final String changeOriginName;
}
@@ -0,0 +1,26 @@
package com.budwk.app.zhgh.staffmanage.member.constant;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @version 1.0
* @Author zzr
* @nameMemberChangeType
* @Date 2024/8/8 9:31
* @注释
*/
@Getter
@AllArgsConstructor
public enum MemberChangeType {
//变更类型
NEW("新入职"),
RESTORE("入会"),
WITHDRAWAL("退会"),
UNIT_CHANGE("单位异动"),
BASIC_CHANGE("基本信息异动");
private final String changeTypeName;
}
@@ -0,0 +1,186 @@
package com.budwk.app.zhgh.staffmanage.member.controller.apply;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.BpmProcessConstant;
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.bpm.enums.BpmProcessTaskStatusEnum;
import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum;
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
import com.budwk.app.bpm.service.BpmService;
import com.budwk.app.bpm.vo.BpmTaskApprovalRecordVo;
import com.budwk.app.sys.models.Sys_user_history;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.web.controllers.open.commons.service.CommonService;
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberApplyBranchAuditPageForm;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberApplyPageForm;
import com.budwk.app.zhgh.staffmanage.member.service.MemberApplyRecordService;
import com.budwk.app.zhgh.staffmanage.member.service.MemberManageService;
import com.budwk.app.zhgh.staffmanage.member.vo.MemberApplyVo;
import io.swagger.annotations.ApiOperation;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.Static;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
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 javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* 会员入会申请分工会审核
*/
@IocBean
@At("/platform/member/apply/branchUnionAudit")
@Ok("json:full")
public class MemberApplyBranchUnionAuditController {
@Inject
private MemberApplyRecordService memberApplyRecordService;
@Inject
private MemberManageService memberManageService;
@Inject
private BpmService bpmService;
@Inject
private CommonService commonService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/apply/branchunionaudit/index.html")
@SaCheckPermission("member.apply.branchUnionAudit")
public void index() {
}
@At
@SaCheckPermission("member.apply.branchUnionAudit")
public Result pageData(MemberApplyPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
record.id,
vu.id AS userId,
vu.username,
vu.loginname,
record.changeType,
record.changeTypes,
record.changeOrigin,
record.applyDateTime,
record.unitId,
IFNULL(record.unionId, vu.unionid) AS unionId,
vu.unionname AS unionName,
IFNULL(record.unitName, vu.unitname) AS unitName,
IFNULL(record.userState, vu.userState) AS userState,
IFNULL(record.preparedBy, vu.preparedBy) AS preparedBy,
IFNULL(record.personType, vu.personType) AS personType,
inst.id processInstanceId,
inst.processInstanceNodeId,
inst.processInstanceNodeName,
inst.processInstanceTaskIds,
inst.processInstanceStatus,
task.id processInstanceTaskId,
task.taskStatus processInstanceTaskStatus,
COUNT(nt.id) OVER (PARTITION BY task.id) > 0 AS nextTaskIsComplete
FROM
bpm_process_task task
INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId
INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId
INNER JOIN bpm_process_define define On inst.processDefineId = define.id
INNER JOIN member_apply_record record ON record.id = inst.processInstanceBusinessId
LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id AND nt.taskStatus = 'COMPLETE'
LEFT JOIN vw_user vu ON vu.id = record.userId
$condition
""");
Cnd cnd = Cnd.NEW();
MemberApplyPageForm.buildSearch(cnd, pageForm);
if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){
cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname())));
}
cnd.and("nd.nodeCode","=",20);
if (pageForm.getAudit() != null) {
if (pageForm.getAudit()) {
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE);
} else {
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE);
}
}
cnd.and("define.`code`", "=", BpmProcessConstant.MEMBER_SINGLE_APPLY.name());
cnd.desc("task.createdOn");
cnd.groupBy("record.id");
sql.setCondition(cnd);
Pagination<MemberApplyVo> listPageVO = memberApplyRecordService.listPageVO(pageForm, sql, MemberApplyVo.class);
return Result.success(listPageVO);
}
@At
@Aop(TransAop.READ_COMMITTED)
@ApiOperation("会员入会分工会审核")
@SaCheckPermission("member.apply.branchUnionAudit")
@SLog(tag = "会员管理-会员入会申请-分工会审核", msg = "会员入会审核(分工会)")
public Result approval(@Param("approval") @Valid BpmTaskApprovalParam approvalParam) {
approvalParam.getBpmTaskApprovalTypeEnum();
Map<String, Object> variables = BeanUtil.beanToMap(approvalParam);
List<String> assignments = new ArrayList<>();
if(approvalParam.getBpmTaskApprovalTypeEnum().equals(BpmTaskApprovalTypeEnum.PASS)){
String approvalLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.SCHOOL_UNION_ADMIN);
assignments.add(approvalLoginName);
}
bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, assignments);
return Result.success();
}
@At
@ApiOperation("分工会审核撤回")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("member.apply.branchUnionAudit")
@SLog(tag = "会员管理-入会申请-分工会撤回", msg = "分工会入会审核撤回")
public Result revoke(@Valid String taskId) {
bpmService.revokeTask(taskId);
return Result.success();
}
/**
* 获取变更信息,审核
* @param recordId
* @return
*/
@At
@SaCheckPermission(value = {"member.apply.branchUnionAudit","member.apply.mine","member.apply.schoolUnionAudit"}, mode = SaMode.OR)
public Result findAuditChangeInfo(@Valid String recordId) {
Sys_user_history history = memberApplyRecordService.dao().fetch(Sys_user_history.class, Cnd.where("recordId", "=", recordId).or("id","=",recordId));
MemberApplyRecord record = memberApplyRecordService.dao().fetch(MemberApplyRecord.class, recordId);
if (ObjectUtil.isAllEmpty(history, record)) {
return Result.error("获取变更信息失败");
}
List<BpmTaskApprovalRecordVo> nodeTasks = bpmService.getNodeTasks(BpmProcessConstant.MEMBER_SINGLE_APPLY, recordId);
if (Lang.isNotEmpty(history)) {
List<NutMap> nutMaps = memberManageService.compareMemberChangeInfo(history);
return Result.success(NutMap.NEW().addv("changeList", nutMaps).addv("nodeTasks", nodeTasks));
}
List<NutMap> nutMaps = memberManageService.compareMemberChangeInfo(record);
return Result.success(NutMap.NEW().addv("changeList", nutMaps).addv("nodeTasks", nodeTasks));
}
}
@@ -0,0 +1,64 @@
package com.budwk.app.zhgh.staffmanage.member.controller.apply;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.hutool.core.util.DesensitizedUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.result.Result;
import com.budwk.app.sys.views.View_user;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import javax.validation.Valid;
@IocBean
@At("/platform/member/apply/common")
@Ok("json:full")
public class MemberApplyCommonController {
@Inject
private Dao dao;
@At
@SaCheckLogin
public Result findOne(@Valid String id) {
View_user user = dao.fetch(View_user.class, Cnd.where("id", "=", id));
if (ObjectUtil.isNull(user)) {
return Result.error("用户信息不存在");
}
// 系统管理员和学校工会管理员可以查看所有用户
if (AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_MEMBER_ADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
return Result.success(user);
}
// 分会主席只能查看本分会用户或未分配分会的用户
if (AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name()) && (user.getUnionId().equals(SecurityUtil.getUnionId()) || StrUtil.isBlank(user.getUnionId()))) {
user.setIdCard(DesensitizedUtil.idCardNum(user.getIdCard(), 3, 4));
user.setMobile(DesensitizedUtil.mobilePhone(user.getMobile()));
return Result.success(user);
}
// 分工会操作员同主席权限一致
if (AuthUtil.hasRole(RoleConstant.BRANCH_UNION_OPERATOR.name()) && (user.getUnionId().equals(SecurityUtil.getUnionId()) || StrUtil.isBlank(user.getUnionId()))) {
user.setIdCard(DesensitizedUtil.idCardNum(user.getIdCard(), 3, 4));
user.setMobile(DesensitizedUtil.mobilePhone(user.getMobile()));
return Result.success(user);
}
// 普通用户只能查看自己的信息
if (SecurityUtil.getUserId().equals(user.getId())) {
return Result.success(user);
}
return Result.error("没有权限");
}
}
@@ -0,0 +1,155 @@
package com.budwk.app.zhgh.staffmanage.member.controller.apply;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.BpmProcessConstant;
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.bpm.service.BpmService;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.sys.views.View_user;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.web.controllers.open.commons.service.CommonService;
import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeOrigin;
import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeType;
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
import io.swagger.annotations.ApiOperation;
import org.nutz.aop.interceptor.ioc.TransAop;
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.Static;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import javax.validation.Valid;
import java.util.List;
import java.util.stream.Stream;
/**
* 会员申请
*/
@IocBean
@At("/platform/member/apply/submit")
@Ok("json:full")
public class MemberApplyController {
@Inject
private Dao dao;
@Inject
private BpmService bpmservice;
@Inject
private CommonService commonService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/apply/submit/index.html")
@SaCheckPermission("member.apply.submit")
public void index() {
}
@At
@SaCheckPermission(value = {"member.apply.submit","member.branchUnion.record","member.schoolUnion.record"}, mode = SaMode.OR)
public Result findOne(@Valid String id, @Valid Boolean isEdit) {
if (isEdit) {
MemberApplyRecord record = dao.fetch(MemberApplyRecord.class,id);
return Result.success(record);
}
View_user user = dao.fetch(View_user.class, Cnd.where("id", "=", id));
return Result.success(user);
}
@At
@Aop(TransAop.READ_COMMITTED)
@ApiOperation("保存入会申请")
@SaCheckPermission("member.apply.submit")
@SLog(tag = "会员管理-入会申请-保存申请", msg = "保存申请")
public Result doSave(MemberApplyRecord record){
record.setMember(true);
record.setUserId(SecurityUtil.getUserId());
record.setChangeOrigin(MemberChangeOrigin.PERSONAL.name());
record.setChangeType(MemberChangeType.RESTORE.name());
record.setChangeTypes(List.of(MemberChangeType.RESTORE.name()));
dao.insertOrUpdate(record);
bpmservice.startSaveProcessInstance(BpmProcessConstant.MEMBER_SINGLE_APPLY.name(),
"【会员入会申请】" + record.getUsername(), record.getId(), null);
return Result.success();
}
/**
* 提交申请
*/
@At
@Aop(TransAop.READ_COMMITTED)
@ApiOperation("提交入会申请")
@SaCheckPermission("member.apply.submit")
@SLog(tag = "会员管理-入会申请-提交申请", msg = "提交申请")
public Object doSubmit(MemberApplyRecord record) {
record.setMember(true);
record.setUserId(SecurityUtil.getUserId());
record.setChangeType(MemberChangeType.RESTORE.name());
record.setChangeTypes(List.of(MemberChangeType.RESTORE.name()));
dao.insertOrUpdate(record);
//设置分工会审核人
List<Sys_user> users = commonService.findUserInfoByRoleCode("unionId", SecurityUtil.getUnionId(), RoleConstant.BRANCH_UNION_CHAIRMAN.name());
if (ObjectUtil.isEmpty(users)) {
return Result.error("您的分工会没有设置审核人,请联系校工会!");
}
List<Sys_user> operatorUsers = commonService.findUserInfoByRoleCode("unionId", SecurityUtil.getUnionId(), RoleConstant.BRANCH_UNION_OPERATOR.name());
List<Sys_user> assignments = Stream.concat(users.stream(), operatorUsers.stream()).distinct().toList();
bpmservice.startSubmitProcessInstance(BpmProcessConstant.MEMBER_SINGLE_APPLY.name(),
"【会员入会申请】" + record.getUsername(), record.getId(), assignments.stream().map(Sys_user::getLoginname).toList(), null);
return Result.success();
}
@At
@SaCheckPermission("member.apply.submit")
public Result getApplyUserByUnionOperate(@Valid String keyWord){
Sql sql = Sqls.create("""
SELECT
u.id,
u.username AS userName,
u.loginname AS loginName,
IFNULL(u.unitName,'无单位') AS unitName
FROM
vw_user u
WHERE
( u.member = '' OR u.member IS NULL )
AND (u.loginname like @keyWord or u.username like @keyWord)
$unionSql
""").setParam("keyWord", "%" + keyWord + "%");
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
sql.setVar("unionSql", new Static(" and u.unionId = %s".formatted(SecurityUtil.getUnionId())));
}
Pagination pagination = commonService.listPageMap(1, 20, sql);
return Result.success(pagination.getList());
}
@At
@SaCheckPermission("member.apply.submit")
public Result findApplyById(String id) {
return Result.success(dao.fetch(MemberApplyRecord.class,id));
}
@At
@SaCheckPermission("member.apply.submit")
public Result findUserInfo() {
return Result.success(dao.fetch(View_user.class, Cnd.where("id", "=", SecurityUtil.getUserId())));
}
}
@@ -0,0 +1,180 @@
package com.budwk.app.zhgh.staffmanage.member.controller.apply;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.BpmProcessConstant;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.bpm.service.BpmService;
import com.budwk.app.bpm.vo.BpmTaskApprovalRecordVo;
import com.budwk.app.sys.models.Sys_user_history;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberApplyPageForm;
import com.budwk.app.zhgh.staffmanage.member.service.MemberApplyRecordService;
import com.budwk.app.zhgh.staffmanage.member.service.MemberManageService;
import com.budwk.app.zhgh.staffmanage.member.vo.MemberApplyVo;
import io.swagger.annotations.ApiOperation;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
/**
* 我的申请
*/
@IocBean
@At("/platform/member/apply/mine")
@Ok("json:full")
public class MemberApplyMineController {
@Inject
private MemberApplyRecordService memberApplyRecordService;
@Inject
private BpmService bpmService;
@Inject
private MemberManageService memberManageService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/apply/mine/index.html")
@SaCheckPermission("member.apply.mine")
public void index() {
}
@At
@SaCheckPermission("member.apply.mine")
public Result pageData(MemberApplyPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
record.id,
vu.id AS userId,
vu.username,
vu.loginname,
record.changeType,
record.changeTypes,
record.changeOrigin,
record.applyDateTime,
record.unitId,
IFNULL(record.unionId, vu.unionid) AS unionId,
vu.unionname AS unionName,
IFNULL(record.unitName, vu.unitname) AS unitName,
IFNULL(record.userState, vu.userState) AS userState,
IFNULL(record.preparedBy, vu.preparedBy) AS preparedBy,
IFNULL(record.personType, vu.personType) AS personType,
inst.id processInstanceId,
inst.processInstanceNodeId,
inst.processInstanceNodeCode,
inst.processInstanceNodeName,
inst.processInstanceTaskIds,
inst.processInstanceStatus,
task.id processInstanceTaskId,
task.taskStatus processInstanceTaskStatus,
(
SELECT
count( 1 ) > 0
FROM
bpm_process_task
WHERE
prevTaskId = ( SELECT id FROM bpm_process_task WHERE processInstanceId = inst.id AND processTaskNodeCode IN ( 10, 40, 70 ) ORDER BY createdAt DESC LIMIT 1 )
AND taskStatus = 'COMPELTE'
) AS nextTaskIsComplete
FROM
bpm_process_task task
INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId
INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId
INNER JOIN bpm_process_define define On inst.processDefineId = define.id
INNER JOIN member_apply_record record ON record.id = inst.processInstanceBusinessId
LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id AND nt.taskStatus = 'COMPLETE'
LEFT JOIN vw_user vu ON vu.id = record.userId
$condition
""");
Cnd cnd = Cnd.NEW();
MemberApplyPageForm.buildSearch(cnd, pageForm);
cnd.and("nd.nodeCode", "=", 10);
cnd.and("define.`code`", "=", BpmProcessConstant.MEMBER_SINGLE_APPLY.name());
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
if (AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name())) {
cnd.andEX("vu.unionId","=", SecurityUtil.getUnionId());
} else {
cnd.and("vu.id", "=", SecurityUtil.getUserId());
}
}
cnd.desc("record.applyDateTime");
sql.setCondition(cnd);
Pagination<MemberApplyVo> listPageVO = memberApplyRecordService.listPageVO(pageForm, sql, MemberApplyVo.class);
return Result.success(listPageVO);
}
@At
@ApiOperation("删除会员申请记录")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("member.apply.mine")
@SLog(tag = "会员管理-入会申请-我的申请记录", msg = "删除申请")
public Result delete(@Valid String id) {
memberApplyRecordService.delete(id);
bpmService.deleteInstance(id);
return Result.success();
}
@At
@ApiOperation("个人申请撤回")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("member.apply.mine")
@SLog(tag = "会员管理-入会申请-个人申请撤回", msg = "个人申请撤回")
public Result revokeApply(@Valid String id) {
bpmService.revokeApply(id);
return Result.success();
}
/**
* 获取变更信息,审核
* @param recordId
* @return
*/
@At
@SaCheckPermission("member.apply.mine")
public Result findAuditChangeInfo(@Valid String recordId) {
MemberApplyRecord record = new MemberApplyRecord();
Cnd cnd = Cnd.NEW();
cnd.and(Cnd.exps("recordId", "=", recordId).or("id","=",recordId));
if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) {
cnd.and("loginname", "=", SecurityUtil.getUserLoginname());
record = memberApplyRecordService.dao().fetch(MemberApplyRecord.class, Cnd.where("loginname", "=", SecurityUtil.getUserLoginname())
.and("id", "=", recordId));
} else {
record = memberApplyRecordService.dao().fetch(MemberApplyRecord.class, recordId);
}
Sys_user_history history = memberApplyRecordService.dao().fetch(Sys_user_history.class, cnd);
if (ObjectUtil.isAllEmpty(history, record)) {
return Result.error("您暂无权限查询");
}
List<BpmTaskApprovalRecordVo> nodeTasks = bpmService.getNodeTasks(BpmProcessConstant.MEMBER_SINGLE_APPLY, recordId);
if (Lang.isNotEmpty(history)) {
List<NutMap> nutMaps = memberManageService.compareMemberChangeInfo(history);
return Result.success(NutMap.NEW().addv("changeList", nutMaps).addv("nodeTasks", nodeTasks));
}
List<NutMap> nutMaps = memberManageService.compareMemberChangeInfo(record);
return Result.success(NutMap.NEW().addv("changeList", nutMaps).addv("nodeTasks", nodeTasks));
}
}
@@ -0,0 +1,181 @@
package com.budwk.app.zhgh.staffmanage.member.controller.apply;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.BpmProcessConstant;
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.bpm.enums.BpmProcessTaskStatusEnum;
import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum;
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
import com.budwk.app.bpm.service.BpmService;
import com.budwk.app.bpm.vo.BpmTaskApprovalRecordVo;
import com.budwk.app.sys.models.Sys_user_history;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.web.controllers.open.commons.service.CommonService;
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberApplyPageForm;
import com.budwk.app.zhgh.staffmanage.member.service.MemberApplyRecordService;
import com.budwk.app.zhgh.staffmanage.member.service.MemberManageService;
import com.budwk.app.zhgh.staffmanage.member.vo.MemberApplyVo;
import io.swagger.annotations.ApiOperation;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.Static;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
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 javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* 会员入会申请校工会审核
*/
@IocBean
@At("/platform/member/apply/schoolUnionAudit")
@Ok("json:full")
public class MemberApplySchoolUnionAuditController {
@Inject
private MemberApplyRecordService memberApplyRecordService;
@Inject
private CommonService commonService;
@Inject
private BpmService bpmService;
@Inject
private MemberManageService memberManageService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/apply/schoolunionaudit/index.html")
@SaCheckPermission("member.apply.schoolUnionAudit")
public void index() {
}
@At
@SaCheckPermission("member.apply.schoolUnionAudit")
public Result pageData(MemberApplyPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
record.id,
vu.id AS userId,
vu.username,
vu.loginname,
record.changeType,
record.changeTypes,
record.changeOrigin,
record.applyDateTime,
record.unitId,
IFNULL(record.unionId, vu.unionid) AS unionId,
vu.unionname AS unionName,
IFNULL(record.unitName, vu.unitname) AS unitName,
IFNULL(record.userState, vu.userState) AS userState,
IFNULL(record.preparedBy, vu.preparedBy) AS preparedBy,
IFNULL(record.personType, vu.personType) AS personType,
inst.id processInstanceId,
inst.processInstanceNodeId,
inst.processInstanceNodeName,
inst.processInstanceTaskIds,
inst.processInstanceStatus,
task.id processInstanceTaskId,
task.taskStatus processInstanceTaskStatus,
COUNT(nt.id) OVER (PARTITION BY task.id) > 0 AS nextTaskIsComplete
FROM
bpm_process_task task
INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId
INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId
INNER JOIN bpm_process_define define On inst.processDefineId = define.id
INNER JOIN member_apply_record record ON record.id = inst.processInstanceBusinessId
LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id AND nt.taskStatus = 'COMPLETE'
LEFT JOIN vw_user vu ON vu.id = record.userId
$condition
""");
Cnd cnd = Cnd.NEW();
MemberApplyPageForm.buildSearch(cnd, pageForm);
if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){
cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname())));
}
cnd.and("nd.nodeCode","=",50);
if (pageForm.getAudit() != null) {
if (pageForm.getAudit()) {
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE);
} else {
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE);
}
}
cnd.and("define.`code`", "=", BpmProcessConstant.MEMBER_SINGLE_APPLY.name());
cnd.desc("task.createdOn");
// cnd.groupBy("record.id");
sql.setCondition(cnd);
Pagination<MemberApplyVo> listPageVO = memberApplyRecordService.listPageVO(pageForm, sql, MemberApplyVo.class);
return Result.success(listPageVO);
}
@At
@Aop(TransAop.READ_COMMITTED)
@ApiOperation("会员入会校工会审核")
@SaCheckPermission("member.apply.branchUnionAudit")
@SLog(tag = "会员管理-会员入会申请-校工会审核", msg = "会员入会审核(校工会)")
public Result approval(@Param("approval") @Valid BpmTaskApprovalParam approvalParam) {
Map<String, Object> variables = BeanUtil.beanToMap(approvalParam);
if (approvalParam.getBpmTaskApprovalTypeEnum().equals(BpmTaskApprovalTypeEnum.PASS)) {
MemberApplyRecord record = memberManageService.dao().fetch(MemberApplyRecord.class, Cnd.where("id", "=", approvalParam.getProcessInstanceBusinessId()));
memberManageService.compareMemberChangeInfoAndUpdateUser(record);
}
bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, null);
return Result.success();
}
@At
@ApiOperation("校工会审核撤回")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("member.apply.branchUnionAudit")
@SLog(tag = "会员管理-入会申请-校工会撤回", msg = "校工会入会审核撤回")
public Result revoke(@Valid String taskId) {
bpmService.revokeTask(taskId);
return Result.success();
}
/**
* 获取变更信息,审核
* @param recordId
* @return
*/
@At
@SaCheckPermission(value = "member.apply.branchUnionAudit")
public Result findAuditChangeInfo(@Valid String recordId){
Sys_user_history history = memberApplyRecordService.dao().fetch(Sys_user_history.class, Cnd.where("recordId", "=", recordId).or("id","=",recordId));
MemberApplyRecord record = memberApplyRecordService.dao().fetch(MemberApplyRecord.class, recordId);
if (ObjectUtil.isAllEmpty(history, record)) {
return Result.error("获取变更信息失败");
}
List<BpmTaskApprovalRecordVo> nodeTasks = bpmService.getNodeTasks(BpmProcessConstant.MEMBER_SINGLE_APPLY, recordId);
if (Lang.isNotEmpty(history)) {
List<NutMap> nutMaps = memberManageService.compareMemberChangeInfo(history);
return Result.success(NutMap.NEW().addv("changeList", nutMaps).addv("nodeTasks", nodeTasks));
}
List<NutMap> nutMaps = memberManageService.compareMemberChangeInfo(record);
return Result.success(NutMap.NEW().addv("changeList", nutMaps).addv("nodeTasks", nodeTasks));
}
}
@@ -0,0 +1,113 @@
package com.budwk.app.zhgh.staffmanage.member.controller.branch;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.util.ObjectUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.BpmProcessConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
import com.budwk.app.bpm.service.BpmService;
import com.budwk.app.bpm.vo.BpmTaskApprovalRecordVo;
import com.budwk.app.sys.models.Sys_user_history;
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm;
import com.budwk.app.zhgh.staffmanage.member.service.MemberBranchUnionManageService;
import com.budwk.app.zhgh.staffmanage.member.service.MemberManageService;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
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 javax.validation.Valid;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberBranchUnionAuditController
* @Date 2024/8/13 8:48
* @注释 分工会管理,分工会审核
*/
@Slf4j
@IocBean
@Ok("json")
@At("/platform/member/branchUnion/audit")
public class MemberBranchUnionAuditController {
@Inject
private MemberBranchUnionManageService memberBranchUnionManageService;
@Inject
private MemberManageService memberManageService;
@Inject
private BpmService bpmService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/branch/audit/index.html")
@SaCheckPermission("member.branchUnion.audit")
public void index() {
}
@At
@SaCheckPermission("member.branchUnion.audit")
public Result pageData(MemberManagePageForm pageForm) {
Pagination pageData = memberBranchUnionManageService.getPageData(pageForm);
return Result.success(pageData);
}
@At
@ApiOperation("分工会审核")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("member.branchUnion.audit")
@SLog(tag = "会员管理-分工会管理", type = "memberBranchUnionManage", msg = "分工会审核")
public Result approval(@Param("approval") @Valid BpmTaskApprovalParam approvalParam) {
bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), null, null);
return Result.success();
}
@At
@ApiOperation("分工会审核撤回")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("member.branchUnion.audit")
@SLog(tag = "会员管理-分工会管理", type = "memberBranchUnionManage", msg = "分工会审核撤回")
public Result revoke(@Valid String taskId) {
bpmService.revokeTask(taskId);
return Result.success();
}
/**
* 获取变更信息,审核
* @param recordId
* @return
*/
@At
@SaCheckPermission(value = {"member.branchUnion.audit", "member.schoolUnion.audit"}, mode = SaMode.OR)
public Result findAuditChangeInfo(String recordId) {
Sys_user_history history = memberBranchUnionManageService.dao().fetch(Sys_user_history.class, Cnd.where("recordId", "=", recordId).or("id","=",recordId));
MemberApplyRecord record = memberBranchUnionManageService.dao().fetch(MemberApplyRecord.class, recordId);
if (ObjectUtil.isAllEmpty(history, record)) {
return Result.error("获取变更信息失败");
}
List<BpmTaskApprovalRecordVo> nodeTasks = bpmService.getNodeTasks(BpmProcessConstant.MEMBER_BRANCH_UNION_CHANGE, recordId);
if (Lang.isNotEmpty(history)) {
List<NutMap> nutMaps = memberManageService.compareMemberChangeInfo(history);
return Result.success(NutMap.NEW().addv("changeList", nutMaps).addv("nodeTasks", nodeTasks));
}
List<NutMap> nutMaps = memberManageService.compareMemberChangeInfo(record);
return Result.success(NutMap.NEW().addv("changeList", nutMaps).addv("nodeTasks", nodeTasks));
}
}
@@ -0,0 +1,124 @@
package com.budwk.app.zhgh.staffmanage.member.controller.branch;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.RepeatSubmit;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.BpmProcessConstant;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.exception.BaseException;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.bpm.service.BpmService;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.web.controllers.open.commons.service.CommonService;
import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeOrigin;
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm;
import com.budwk.app.zhgh.staffmanage.member.service.MemberManageService;
import lombok.extern.slf4j.Slf4j;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.dao.sql.Sql;
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 javax.validation.Valid;
import java.util.List;
import java.util.Objects;
/**
* @version 1.0
* @Author zzr
* @nameMemberBranchUnionManageListController
* @Date 2024/8/12 14:06
* @注释 会员分工会管理
*/
@IocBean
@At("/platform/member/branchUnion/manage/list")
@Slf4j
@Ok("json")
public class MemberBranchUnionManageController {
@Inject
private MemberManageService memberManageService;
@Inject
private CommonService commonService;
@Inject
private BpmService bpmservice;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/branch/manage/index.html")
@SaCheckPermission("member.branchUnion.manage.list")
public void index() {
}
@At
@SaCheckPermission("member.branchUnion.manage.list")
@Ok("json:{dateFormat:'yyyy-MM-dd'}")
public Result pageData(MemberManagePageForm pageForm) {
Sql sql = memberManageService.getSql(pageForm, "branchUnion");
Pagination pagination = memberManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@At
@SaCheckPermission("member.branchUnion.manage.list")
@SLog(tag = "添加会员", type = "memberBranchManage", msg = "添加会员")
public Result addMember(@Valid MemberApplyRecord record) {
return null;
}
@At
@SaCheckPermission("member.branchUnion.manage.list")
public Result getChangeInfoByUserId(String userId) {
return Result.success(memberManageService.getMemberChangeInfoByUserId(userId));
}
@At
@SaCheckPermission("member.branchUnion.manage.list")
@Aop(TransAop.READ_COMMITTED)
@RepeatSubmit
@SLog(tag = "分工会管理-会员管理", type = "MemberBranchManageList", msg = "分工会普通变更")
public Result generalMemberChange(@Param("record") MemberApplyRecord record) {
try {
if (Objects.isNull(record)) {
return Result.error("数据获取失败");
}
Sys_user user = memberManageService.dao().fetch(Sys_user.class, Cnd.where("loginname", "=", record.getLoginname()));
record.setUserId(user.getId());
if ( record.getEdit() == null || !record.getEdit()) {
// 校验是否有变更的字段
List<NutMap> changeInfoList = memberManageService.compareMemberChangeInfo(record);
// 存储变更的类型
List<String> changeTypeList = memberManageService.compareMemberChangeType(changeInfoList, record);
// 有字段发生变更会走下面的方法,没有则会抛异常
record.setChangeTypes(changeTypeList);
record.setChangeOrigin(MemberChangeOrigin.BRANCH_UNION.name());
memberManageService.dao().insert(record);
} else {
record.setChangeOrigin(MemberChangeOrigin.BRANCH_UNION.name());
memberManageService.dao().updateIgnoreNull(record);
}
String approvalLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.SCHOOL_UNION_MEMBER_ADMIN);
if (StrUtil.isBlank(approvalLoginName)) {
throw new BaseException("校工会会员管理员未设置");
}
bpmservice.startSubmitProcessInstance(BpmProcessConstant.MEMBER_BRANCH_UNION_CHANGE.name(), "【会员分工会变更】" +record.getUsername(), record.getId(), List.of(approvalLoginName), null);
return Result.success();
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
}
@@ -0,0 +1,58 @@
package com.budwk.app.zhgh.staffmanage.member.controller.branch;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.sys.models.Sys_user_history;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm;
import com.budwk.app.zhgh.staffmanage.member.service.MemberManageService;
import lombok.extern.slf4j.Slf4j;
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 javax.validation.Valid;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberBranchRecordController
* @Date 2024/8/13 16:25
* @注释 分工会 会员变更记录
*/
@Slf4j
@IocBean
@Ok("json")
@At("/platform/member/branchUnion/record")
public class MemberBranchUnionRecordController {
@Inject
private MemberManageService memberManageService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/branch/record/index.html")
@SaCheckPermission("member.branchUnion.record")
public void index() {
}
@At
@SaCheckPermission("member.branchUnion.record")
public Result pageData(MemberManagePageForm pageForm){
Pagination pagination = memberManageService.memberHistoryRecords(pageForm);
return Result.success(pagination);
}
@At
@SaCheckPermission("member.branchUnion.record")
public Result findAuditChangeInfo(@Valid String recordId) {
Sys_user_history history = memberManageService.dao().fetch(Sys_user_history.class, recordId);
List<NutMap> list = memberManageService.compareMemberChangeInfo(history);
return Result.success(list);
}
}
@@ -0,0 +1,280 @@
package com.budwk.app.zhgh.staffmanage.member.controller.branch.verification;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.RepeatSubmit;
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.sys.models.Sys_user_change_info;
import com.budwk.app.sys.models.Sys_user_history;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeOrigin;
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
import com.budwk.app.zhgh.staffmanage.member.models.MemberListVerificationProject;
import com.budwk.app.zhgh.staffmanage.member.models.MemberListVerificationUser;
import com.budwk.app.zhgh.staffmanage.member.models.MemberVerificationBranchUnionFeedback;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberListVerificationPageForm;
import com.budwk.app.zhgh.staffmanage.member.param.MemberVerificationBranchUnionFeedbackParam;
import com.budwk.app.zhgh.staffmanage.member.param.MemberVerificationGetChangeParam;
import com.budwk.app.zhgh.staffmanage.member.service.MemberListVerificationService;
import com.budwk.app.zhgh.staffmanage.member.service.MemberManageService;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
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.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
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 javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @version 1.0
* @Author zzr
* @nameMemberBranchListVerificationController
* @Date 2024/8/13 16:22
* @注释 分工会 名单核对事项
*/
@Slf4j
@IocBean
@Ok("json")
@At("/platform/member/branchUnion/verification/check")
public class MemberBranchVerificationCheckController {
@Inject
private MemberListVerificationService memberListVerificationService;
@Inject
private MemberManageService memberManageService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/branch/verification/check/index.html")
@SaCheckPermission("member.branchUnion.verification.check")
public void index() {
}
@At
@SaCheckPermission("member.branchUnion.verification.check")
@ApiOperation("分工会 名单核对事项分页数据")
public Result pageData(MemberListVerificationPageForm pageForm) {
Pagination pagination = memberListVerificationService.getBranchListVerificationUser(pageForm);
return Result.success(pagination);
}
@At
@ApiOperation("获取所有正在进行中的事项")
@SaCheckPermission(value = {"member.branchUnion.verification.check", "member.schoolUnion.verification.check"}, mode = SaMode.OR)
public Result getVerificationList() {
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(),RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("startDate", "<=", DateUtil.now());
cnd.and("endDate", ">=", DateUtil.now());
cnd.and("isEnabled", "=", true);
cnd.desc("releaseDateTime");
List<MemberListVerificationProject> list = memberListVerificationService.dao().query(MemberListVerificationProject.class, cnd);
List<MemberListVerificationProject> collect = new ArrayList<>();
if (ObjectUtil.isNotEmpty(list)) {
collect = list.stream().filter(item -> item.getUnionIds().contains(SecurityUtil.getUnionId())).collect(Collectors.toList());
}
return Result.success(collect);
} else {
List<MemberListVerificationProject> list = memberListVerificationService.dao().query(MemberListVerificationProject.class, cnd);
return Result.success(list);
}
}
@At
@RepeatSubmit
@Aop(TransAop.READ_COMMITTED)
@ApiOperation("分工会 名单核对事项,单个人员变更")
@SaCheckPermission("member.branchUnion.verification.check")
@SLog(tag = "分工会管理-名单核对事项", type = "branchUnionVerification", msg = "分工会单个人员变更")
public Result doCheckMember(@Param("record") MemberApplyRecord record) {
if (Objects.isNull(record)) {
return Result.error("数据获取失败");
}
Dao dao = memberManageService.dao();
// memberManageService.compareMemberChangeInfoAndUpdateUser(record);
// 校验是否有变更的东西
memberManageService.compareMemberChangeInfo(record);
record.setChangeOrigin(MemberChangeOrigin.BRANCH_UNION_VERIFICATION.name());
MemberApplyRecord applyRecord = dao.fetch(MemberApplyRecord.class, Cnd.where("userId", "=", record.getUserId())
.and("verificationProjectId", "=", record.getVerificationProjectId()));
//查出当前核对事项是否有变更记录,有则修改
if (Lang.isNotEmpty(applyRecord)) {
record.setId(applyRecord.getId());
Sys_user_history history = dao.fetch(Sys_user_history.class, Cnd.where("loginname", "=", applyRecord.getLoginname())
.and("recordId", "=", record.getId()));
if (Lang.isNotEmpty(history)) {
Sys_user user = BeanUtil.copyProperties(history, Sys_user.class);
user.setId(record.getUserId());
dao.update(user);
}
}
dao.insertOrUpdate(record);
dao.update(MemberListVerificationUser.class,
Chain.make("isChanged", true).add("branchUnionChecked", true),
Cnd.where("userId", "=", record.getUserId())
.and("verificationProjectId", "=", record.getVerificationProjectId()));
dao.clear(Sys_user_history.class, Cnd.where("recordId", "=", record.getId()));
return Result.success();
}
@At
@RepeatSubmit
@Aop(TransAop.READ_COMMITTED)
@ApiOperation("分工会 名单核对事项,无误提交")
@SaCheckPermission("member.branchUnion.verification.check")
@SLog(tag = "分工会管理-名单核对事项", type = "branchUnionVerification", msg = "名单核对事项无误提交")
public Result correctSubmission(@Param("data") @Valid MemberVerificationBranchUnionFeedbackParam param) {
memberManageService.dao().update(MemberVerificationBranchUnionFeedback.class,
Chain.make("isSubmit", true).add("status", "分工会无误提交")
.add("welfareJson", param.getWelfareJson()),
Cnd.where("verificationProjectId", "=", param.getVerificationProjectId())
.and("unionId", "=", SecurityUtil.getUnionId()));
MemberVerificationBranchUnionFeedback feedback = new MemberVerificationBranchUnionFeedback();
BeanUtil.copyProperties(param, feedback);
memberListVerificationService.branchUnionCorrectSubmission(feedback);
return Result.success();
}
@At
@RepeatSubmit
@Aop(TransAop.READ_COMMITTED)
@ApiOperation("分工会 名单核对事项,有误提交")
@SaCheckPermission("member.branchUnion.verification.check")
@SLog(tag = "分工会管理-名单核对事项", type = "branchUnionVerification", msg = "名单核对事项有误提交")
public Result incorrectSubmission(@Param("verificationProjectId") String verificationProjectId) {
if (StrUtil.isEmpty(verificationProjectId)) {
return Result.error("获取核对事项失败");
}
memberListVerificationService.branchUnionIncorrectSubmission(verificationProjectId);
return Result.success();
}
/**
* 校验当前的提交按钮是否可用;并返回按钮提示信息
*
* @param verificationProjectId
* @return
*/
@At
@SaCheckPermission("member.branchUnion.verification.check")
public Result validateSubmitButton(@Valid @Param("verificationProjectId") String verificationProjectId) {
MemberVerificationBranchUnionFeedback feedback = memberManageService.dao().fetch(MemberVerificationBranchUnionFeedback.class,
Cnd.where("verificationProjectId", "=", verificationProjectId).and("unionId", "=", SecurityUtil.getUnionId()));
boolean flag = feedback.getBranchUnionSubmitNum() == 0 || feedback.getBranchUnionSubmit();
if (!Objects.equals(feedback.getBranchUnionSubmitNum(), feedback.getSchoolUnionSubmitNum())) {
flag = false;
}
if (feedback.getIsFeedback()) {
flag = false;
}
if (feedback.getIsRollback() != null && feedback.getIsRollback() &&
(feedback.getBranchUnionSubmitNum().equals(feedback.getSchoolUnionSubmitNum()))) {
flag = true;
}
NutMap map = NutMap.NEW();
map.put("buttonStatus", flag);
if (feedback.getIsRollback() != null && feedback.getIsRollback() && (feedback.getBranchUnionSubmitNum().equals(feedback.getSchoolUnionSubmitNum()))) {
map.put("buttonContent", "校工会退回,请重新提交;退回原因:" + feedback.getRollbackReason());
} else {
map.put("buttonContent", feedback.getBranchUnionSubmitNum() == 0 ? "如提交:当前为首次提交" : ("如提交:当前为第" + (feedback.getBranchUnionSubmitNum() + 1) + "次提交"));
map.put("submitCountContent", feedback.getIsFeedback() ? "已无误提交" : ("有误提交;校工会审核中-第" + feedback.getBranchUnionSubmitNum() + "次提交"));
}
map.put("isFeedback", feedback.getIsFeedback());
return Result.success(map);
}
/**
* 撤销变更
*
* @param param
* @return
*/
@At
@RepeatSubmit
@ApiOperation("分工会 名单核对事项,分工会撤销变更")
@SaCheckPermission("member.branchUnion.verification.check")
@SLog(tag = "分工会管理-名单核对事项", type = "branchUnionVerification", msg = "分工会撤销变更")
public Result branchUnionRevokeChange(@Valid @Param("data") MemberVerificationGetChangeParam param) {
memberListVerificationService.revokeChange(param.getUserId(), param.getVerificationProjectId(), "branchUnion");
return Result.success();
}
@At
@ApiOperation("分工会 名单核对事项,获取变更记录")
@SaCheckPermission("member.branchUnion.verification.check")
public Result getVerificationChangeInfo(@Valid @Param("data") MemberVerificationGetChangeParam param) {
MemberApplyRecord record = memberManageService.dao().fetch(MemberApplyRecord.class,
Cnd.where("userId", "=", param.getUserId()).and("verificationProjectId", "=", param.getVerificationProjectId()));
if (Lang.isNotEmpty(record)) {
Sys_user_history history = memberManageService.dao().fetch(Sys_user_history.class, Cnd.where("recordId", "=", record.getId()).desc("changeTime"));
if (Lang.isNotEmpty(history)) {
return Result.success(memberManageService.compareMemberChangeInfo(history));
} else {
return Result.success(memberManageService.compareMemberChangeInfo(record));
}
}
return Result.error();
}
@At
@ApiOperation("分工会 名单核对事项,查看反馈结果")
@SaCheckPermission(value = {"member.branchUnion.verification.check", "member.schoolUnion.verification.check"}, mode = SaMode.OR)
public Result getVerificationFeedback(String verificationProjectId, String unionId) {
MemberVerificationBranchUnionFeedback fetch = memberManageService.dao().fetch(MemberVerificationBranchUnionFeedback.class,
Cnd.where("verificationProjectId", "=", verificationProjectId).and("unionId", "=", unionId));
MemberListVerificationProject verificationProject = memberManageService.dao().fetch(MemberListVerificationProject.class, Cnd.where("id", "=", verificationProjectId));
NutMap nutMap = Lang.obj2nutmap(verificationProject);
nutMap.put("feedbackDate", DateUtil.format(DateUtil.date(fetch.getUpdatedAt()), "yyyy-MM-dd HH:mm:ss"));
nutMap.put("unionName", fetch.getUnionName());
nutMap.put("feedbackNum", fetch.getFeedbackNum());
nutMap.put("feedbackFiles", fetch.getFeedbackFiles());
nutMap.put("welfareJson", fetch.getWelfareJson());
return Result.success(nutMap);
}
@At
@Ok("void")
@SaCheckPermission("member.branchUnion.verification.check")
public void exportExcel(MemberListVerificationPageForm pageForm, HttpServletResponse response) {
memberListVerificationService.exportVerificationExcel(pageForm, response, true);
}
}
@@ -0,0 +1,61 @@
//package com.budwk.app.zhgh.member.controller.change;
//
//import cn.dev33.satoken.annotation.SaCheckPermission;
//import com.budwk.app.base.annotation.SLog;
//import com.budwk.app.base.page.Pagination;
//import com.budwk.app.base.result.Result;
//import com.budwk.app.zhgh.member.models.MemberApplyRecord;
//import com.budwk.app.zhgh.member.param.MemberManagePageForm;
//import com.budwk.app.zhgh.member.service.MemberManageService;
//import lombok.extern.slf4j.Slf4j;
//import org.nutz.dao.sql.Sql;
//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 javax.validation.Valid;
//
///**
// * @version 1.0
// * @Author zzr
// * @nameMemberChangeManageController
// * @Date 2024/8/6 8:39
// * @注释
// */
//@IocBean
//@Ok("json")
//@At("/platform/member/change/manage")
//@Slf4j
//public class MemberChangeManageController {
//
// @Inject
// private MemberManageService memberService;
//
// @At("")
// @Ok("beetl:/platform/zhgh/staffmanage/member/change/manage/index.html")
// @SaCheckPermission("member.branch.manage")
// public void index() {
// }
//
//
// @At
// @SaCheckPermission("member.branch.manage")
// public Result pageData(MemberManagePageForm pageForm) {
// Sql sql = memberService.getSql(pageForm,null);
// Pagination pagination = memberService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
// return Result.success(pagination);
// }
//
//
// @At
// @SaCheckPermission("member.branch.manage")
// public Result getNumData(MemberManagePageForm pageForm) {
// NutMap map = memberService.getButtonNum(pageForm);
// return Result.success(map);
// }
//
//
//
//}
@@ -0,0 +1,42 @@
package com.budwk.app.zhgh.staffmanage.member.controller.change;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm;
import com.budwk.app.zhgh.staffmanage.member.service.MemberManageService;
import lombok.extern.slf4j.Slf4j;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
/**
* @version 1.0
* @Author zzr
* @nameMemberChangeRecordsController
* @Date 2024/8/8 8:40
* @注释
*/
@IocBean
@Ok("json")
@At("/platform/member/change/record")
@Slf4j
public class MemberChangeRecordController {
@Inject
private MemberManageService memberService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/change/record/index.html")
@SaCheckPermission("member.change.record")
public void index() {
}
@At
@SaCheckPermission("member.change.record")
public Result pageData(MemberManagePageForm pageForm) {
Pagination pagination = memberService.memberHistoryRecords(pageForm);
return Result.success(pagination);
}
}
@@ -0,0 +1,34 @@
package com.budwk.app.zhgh.staffmanage.member.controller.config;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.result.Result;
import lombok.extern.slf4j.Slf4j;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
/**
* @version 1.0
* @Author zzr
* @nameMemberConfigManage
* @Date 2024/10/15 9:00
* @注释
*/
@Slf4j
@IocBean
@Ok("json")
@At("/platform/member/config/manage")
public class MemberConfigManage {
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/config/manage/index.html")
@SaCheckPermission("member.config.manage")
public void index() {
}
@At
@SaCheckPermission("member.config.manage")
public Result getMemberConfig(){
return null;
}
}
@@ -0,0 +1,181 @@
package com.budwk.app.zhgh.staffmanage.member.controller.info;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.date.DateUtil;
import com.budwk.app.base.result.Result;
import com.budwk.app.sys.models.Sys_dict;
import com.budwk.app.sys.services.SysDictService;
import com.budwk.app.zhgh.staffmanage.member.service.MemberInfoService;
import lombok.extern.slf4j.Slf4j;
import org.nutz.dao.Sqls;
import org.nutz.dao.entity.Record;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @version 1.0
* @Author zzr
* @nameMemberInfoBoardController
* @Date 2024/8/16 14:17
* @注释 会员信息 数据看板
*/
@Slf4j
@IocBean
@Ok("json")
@At("/platform/member/info/board")
public class MemberInfoBoardController {
@Inject
private MemberInfoService memberInfoService;
@Inject
private SysDictService sysDictService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/info/board/index.html")
@SaCheckPermission("member.info.board")
public void index() {
}
/**
* @return 今年和去年的会员数
*/
@At
@SaCheckPermission("member.info.board")
public Result memberNumber() {
int memberNum = memberInfoService.count(Sqls.create("select count(1) from sys_user where member = 1"));
int lastYearMemberNum = memberInfoService.count(Sqls.create("select count(1) from member_history where year = year(now()) -1 "));
return Result.success(Map.of("memberNum", memberNum, "lastYearMemberNum", lastYearMemberNum));
}
/**
* @return 会员增长趋势
*/
@At
@SaCheckPermission("member.info.board")
public Result growthTrend() {
List<Map> result = new ArrayList<>();
int year = DateUtil.thisYear();
for (int i = year - 5; i < year; i++) {
int count = memberInfoService.count(Sqls.create("select count(1) from member_history where year = @year ").setParam("year", year));
result.add(Map.of("label", i, "value", count));
}
result.add(Map.of("label", year, "value", memberInfoService.count(Sqls.create("select count(1) from sys_user where member = 1"))));
return Result.success(result);
}
/**
* @return 会员占比
*/
@At
@SaCheckPermission("member.info.board")
public Result memberPercentage() {
List<Sys_dict> memberApplyPersonTypeDictList = sysDictService.getSubListByCode("PERSON_TYPE");
List<String> personTypes = memberApplyPersonTypeDictList.stream().map(Sys_dict::getCode).collect(Collectors.toList());
int member = memberInfoService.count(Sqls.create("select count(1) from sys_user where member = 1"));
int user = memberInfoService.count(Sqls.create("select count(1) from sys_user").setParam("personTypes", personTypes));
float result;
if (user > 0) {
result = (float) member / (float) user;
} else {
result = 0.0f;
}
return Result.success(result);
}
/**
* @return 男女占比
*/
@At
@SaCheckPermission("member.info.board")
public Result memberSexPercentage() {
int men = memberInfoService.count(Sqls.create("select count(1) from sys_user where member = 1 and sex = '男' "));
int women = memberInfoService.count(Sqls.create("select count(1) from sys_user where member = 1 and sex = '女' "));
return Result.success(List.of(Map.of("type", "", "value", men), Map.of("type", "", "value", women)));
}
/**
* 各工会会员数
*
* @return
*/
@At
@SaCheckPermission("member.info.board")
public Result unionMember() {
String str = """
SELECT
un.name as unionname,
un.unionCode,
( SELECT count( 1 ) FROM vw_user WHERE member = 1 and unionId = un.id ) `value`
FROM
sys_union un
ORDER BY
$order
""";
List<Record> chartData = memberInfoService.list(Sqls.create(str).setVar("order", "un.unionCode"));
List<Record> tableData = memberInfoService.list(Sqls.create(str).setVar("order", "un.unionCode"));
return Result.success(Map.of("chartData", chartData, "tableData", tableData));
}
/**
* 根据人员类型查找会员数
*
* @return
*/
@At
@SaCheckPermission("member.info.board")
public Result personTypeMember() {
Sql sql = Sqls.create("""
SELECT
dict.`name`,
dict.`code` label,
( SELECT COUNT( 1 ) FROM sys_user WHERE member = 1 and personType = dict.`code` ) value
FROM
sys_dict dict
LEFT JOIN sys_dict parent ON dict.parentId = parent.id
WHERE
parent.`code` = 'USER_PERSON_TYPE'
ORDER BY
dict.location
""");
return Result.success(memberInfoService.list(sql));
}
/**
* 根据在职状态查找会员数
*
* @return
*/
@At
@SaCheckPermission("member.info.board")
public Object userStateMember() {
Sql sql = Sqls.create("""
SELECT
dict.`name`,
dict.`code` label,
( SELECT COUNT( 1 ) FROM sys_user WHERE member = 1 and userState = dict.`code` ) value
FROM
sys_dict dict
LEFT JOIN sys_dict parent ON dict.parentId = parent.id
WHERE
parent.`code` = 'USER_STATE'
ORDER BY
dict.location
""");
return Result.success(memberInfoService.list(sql));
}
}
@@ -0,0 +1,136 @@
package com.budwk.app.zhgh.staffmanage.member.controller.info;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.DesensitizedUtil;
import com.alibaba.excel.EasyExcel;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.zhgh.staffmanage.member.models.MemberHistory;
import com.budwk.app.zhgh.staffmanage.member.param.MemberInfoPageForm;
import com.budwk.app.zhgh.staffmanage.member.service.MemberInfoService;
import com.budwk.app.zhgh.staffmanage.member.vo.MemberImportVo;
import lombok.extern.slf4j.Slf4j;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.AdaptBy;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import org.nutz.mvc.upload.TempFile;
import org.nutz.mvc.upload.UploadAdaptor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberGroupInfoController
* @Date 2024/8/8 10:06
* @注释 会员档案管理
*/
@At("/platform/member/info/group")
@Ok("json:full")
@IocBean
@Slf4j
public class MemberInfoGroupController {
@Inject
private MemberInfoService memberInfoService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/info/group/index.html")
@SaCheckPermission("member.info.group")
public void index() {
}
@At
@SaCheckPermission("member.info.group")
@Ok("json:{dateFormat:'yyyy-MM-dd'}")
public Result pageData(@Valid @Param("pageForm") MemberInfoPageForm pageForm) {
Sql sql = memberInfoService.getSql(pageForm);
Pagination<NutMap> pagination = memberInfoService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
for (NutMap row : pagination.getList()) {
row.put("mobile",DesensitizedUtil.mobilePhone(row.getString("mobile")));
}
return Result.success(pagination);
}
@At
@SaCheckPermission("member.info.group")
public Result getMemberHistoryNum(@Valid Integer year) {
return Result.success(memberInfoService.dao().count(MemberHistory.class, Cnd.where("year", "=", year)));
}
@At
@SaCheckPermission("member.info.group")
@Aop(TransAop.READ_COMMITTED)
@SLog(type = "memberInfoGroup", tag = "备份会员数据", msg = "备份会员数据")
public Result archive(@Valid Integer year) {
try {
memberInfoService.archiveMember(year);
return Result.success();
} catch (Exception e) {
e.printStackTrace();
return Result.error();
}
}
@At
@Ok("void")
@SaCheckPermission("member.info.group")
public void exportMember(MemberInfoPageForm pageForm, HttpServletResponse response) {
memberInfoService.exportMember(pageForm, response);
}
@At
@Ok("void")
@SaCheckPermission("member.info.group")
public void downloadMemberTemplate(HttpServletResponse response) {
try {
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
String fileName = URLEncoder.encode("会员导入模版", "UTF-8").replaceAll("\\+", "%20");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
EasyExcel.write(response.getOutputStream(), MemberImportVo.class)
.sheet("会员导入模版")
.doWrite(ArrayList::new);
} catch (Exception e) {
throw new RuntimeException("导出失败");
}
}
@At
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("member.info.group")
@AdaptBy(type = UploadAdaptor.class, args = {"ioc:fileUpload"})
public Result importMember(TempFile file) {
try {
NutMap nutMap = memberInfoService.handlingMemberImport(file);
if (Lang.isNotEmpty(nutMap)) {
return Result.success(nutMap);
}
return Result.success("导入成功");
} catch (Exception e) {
e.printStackTrace();
return Result.error();
}
}
}
@@ -0,0 +1,106 @@
package com.budwk.app.zhgh.staffmanage.member.controller.info;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.utils.CommonDownloadUtil;
import com.budwk.app.sys.models.Sys_union;
import com.budwk.app.zhgh.staffmanage.member.param.MemberInfoPageForm;
import com.budwk.app.zhgh.staffmanage.member.service.MemberInfoService;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.dao.Cnd;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.BufferedOutputStream;
import java.net.URLEncoder;
import java.util.List;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* @version 1.0
* @Author zzr
* @nameMemberInquireHistoryController
* @Date 2024/8/8 12:07
* @注释 会员历史台账
*/
@At("/platform/member/info/history")
@Ok("json:full")
@IocBean
public class MemberInfoHistoryController {
@Inject
private MemberInfoService memberInfoService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/info/history/index.html")
@SaCheckPermission("member.info.history")
public void index() {
}
@At
@SaCheckPermission("member.info.history")
public Result pageData(MemberInfoPageForm pageForm) {
Sql sql = memberInfoService.getMemberHistorySql(pageForm);
Pagination pagination = memberInfoService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@At
@Ok("void")
@SaCheckPermission("member.info.history")
@SLog(type = "memberInfoHistory", tag = "会员历史台账", msg = "按分工会导出会员历史台账")
public void doExportByUnion(@Valid Integer year, HttpServletResponse response) {
List<NutMap> memberHisList = memberInfoService.historyExportByUnionData(year);
List<Sys_union> unionList = memberInfoService.dao().query(Sys_union.class, Cnd.NEW());
try {
response.setContentType("application/octet-stream");
response.setHeader("content-disposition", "attachment;filename="
+ URLEncoder.encode(year + "年度会员.zip", "UTF-8"));
ZipOutputStream zipOutputStream = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
for (Sys_union union : unionList) {
String fileName = union.getUnionCode() + union.getName().replaceAll("/", "") + "会员表.xlsx";
zipOutputStream.putNextEntry(new ZipEntry(fileName));
List<NutMap> usersByUnion = memberHisList.stream().filter(v -> Strings.isNotBlank(v.getString("unionId")) && v.getString("unionId").equals(union.getId())).collect(Collectors.toList());
Workbook workbook = memberInfoService.setHistoryExcelData(usersByUnion);
workbook.write(zipOutputStream);
zipOutputStream.closeEntry();
response.flushBuffer();
}
zipOutputStream.flush();
zipOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@At
@Ok("void")
@SaCheckPermission("member.info.history")
@SLog(type = "memberInfoHistory", tag = "会员历史台账", msg = "按条件导出会员历史台账")
public void doExport(MemberInfoPageForm pageForm, HttpServletResponse response) {
Sql sql = memberInfoService.getMemberHistorySql(pageForm);
List<NutMap> list = memberInfoService.listMap(sql);
try {
Workbook workbook = memberInfoService.setHistoryExcelData(list);
CommonDownloadUtil.download(pageForm.getYear() + "年会员历史台账表.xlsx", workbook, response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
@@ -0,0 +1,91 @@
package com.budwk.app.zhgh.staffmanage.member.controller.modelworker;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberModelWorkerPageForm;
import com.budwk.app.zhgh.staffmanage.member.service.MemberModelWorkerService;
import lombok.extern.slf4j.Slf4j;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberModelWorkerController
* @Date 2024/9/25 14:24
* @注释
*/
@Slf4j
@IocBean
@Ok("json")
@At("/platform/member/modelWorker/manage")
public class MemberModelWorkerController {
@Inject
private MemberModelWorkerService memberModelWorkerService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/modelworker/manage/index.html")
@SaCheckPermission("member.modelWorker.manage")
public void index() {}
@At
@SaCheckPermission("member.modelWorker.manage")
public Result pageData(MemberModelWorkerPageForm pageForm) {
Sql sql = memberModelWorkerService.getSql(pageForm);
Pagination pagination = memberModelWorkerService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@At
@SaCheckPermission("member.modelWorker.manage")
public Result setModelWorker(String userId) {
if (StrUtil.isNotBlank(userId)) {
memberModelWorkerService.update(Chain.make("isModelWorker", true), Cnd.where("id", "=", userId));
return Result.success();
} else {
return Result.error();
}
}
/**
* 取消劳模身份
* @return
*/
@At
@SaCheckPermission(value = {"member.modelWorker.manage","member.branchUnion.manage.list","member.schoolUnion.manage.list"}, mode = SaMode.OR)
public Result cancelModelWorker(@Param("userIds") String[] userIds) {
List<String> list = Arrays.asList(userIds);
if (Lang.isNotEmpty(list)) {
memberModelWorkerService.update(Chain.make("isModelWorker", false), Cnd.where("id", "in", list));
return Result.success();
} else {
return Result.error();
}
}
@At
@Ok("void")
@SaCheckPermission("member.modelWorker.manage")
public void doExport(MemberModelWorkerPageForm pageForm, HttpServletResponse response){
memberModelWorkerService.doExport(pageForm, response);
}
}
@@ -0,0 +1,128 @@
package com.budwk.app.zhgh.staffmanage.member.controller.school;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.RepeatSubmit;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.BpmProcessConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum;
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
import com.budwk.app.bpm.service.BpmService;
import com.budwk.app.bpm.vo.BpmTaskApprovalRecordVo;
import com.budwk.app.sys.models.Sys_user_history;
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm;
import com.budwk.app.zhgh.staffmanage.member.service.MemberManageService;
import com.budwk.app.zhgh.staffmanage.member.service.MemberSchoolUnionManageService;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
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 javax.validation.Valid;
import java.util.List;
import java.util.Map;
/**
* @version 1.0
* @Author zzr
* @nameMemberSchoolUnionAuditController
* @Date 2024/8/13 8:49
* @注释
*/
@Slf4j
@IocBean
@Ok("json")
@At("/platform/member/schoolUnion/audit")
public class MemberSchoolUnionAuditController {
@Inject
private BpmService bpmService;
@Inject
private MemberManageService memberManageService;
@Inject
private MemberSchoolUnionManageService memberSchoolUnionManageService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/school/audit/index.html")
@SaCheckPermission("member.schoolUnion.audit")
public void index() {
}
@At
@SaCheckPermission("member.schoolUnion.audit")
public Result pageData(MemberManagePageForm pageForm) {
Pagination pageData = memberSchoolUnionManageService.getPageData(pageForm);
return Result.success(pageData);
}
@At
@RepeatSubmit
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("member.schoolUnion.audit")
@SLog(tag = "会员管理-校工会管理", type = "memberSchoolUnionAudit", msg = "校工会会员审核")
public Result approval(@Param("approval") @Valid BpmTaskApprovalParam approvalParam) {
Map<String, Object> variables = BeanUtil.beanToMap(approvalParam);
if (approvalParam.getBpmTaskApprovalTypeEnum().equals(BpmTaskApprovalTypeEnum.PASS)) {
MemberApplyRecord record = memberManageService.dao().fetch(MemberApplyRecord.class, Cnd.where("id", "=", approvalParam.getProcessInstanceBusinessId()));
if (StrUtil.isNotEmpty(approvalParam.getApprovalRemark())) {
memberManageService.dao().update(MemberApplyRecord.class, Chain.make("remark", approvalParam.getApprovalRemark()), Cnd.where("id", "=", record.getId()));
}
memberManageService.compareMemberChangeInfoAndUpdateUser(record);
}
bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, null);
return Result.success();
}
@At
@ApiOperation("校工会审核撤回")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("member.schoolUnion.audit")
@SLog(tag = "会员管理-校工会管理", type = "memberSchoolUnionAudit", msg = "校工会审核撤回")
public Result revoke(@Valid String taskId) {
bpmService.revokeTask(taskId);
return Result.success();
}
/**
* 获取变更信息,审核
* @param recordId
* @return
*/
@At
@SaCheckPermission(value = {"member.branchUnion.audit", "member.schoolUnion.audit"}, mode = SaMode.OR)
public Result findAuditChangeInfo(String recordId) {
Sys_user_history history = memberManageService.dao().fetch(Sys_user_history.class, Cnd.where("recordId", "=", recordId).or("id","=",recordId));
MemberApplyRecord record = memberManageService.dao().fetch(MemberApplyRecord.class, recordId);
if (ObjectUtil.isAllEmpty(history, record)) {
return Result.error("获取变更信息失败");
}
List<BpmTaskApprovalRecordVo> nodeTasks = bpmService.getNodeTasks(BpmProcessConstant.MEMBER_BRANCH_UNION_CHANGE, recordId);
if (Lang.isNotEmpty(history)) {
List<NutMap> nutMaps = memberManageService.compareMemberChangeInfo(history);
return Result.success(NutMap.NEW().addv("changeList", nutMaps).addv("nodeTasks", nodeTasks));
}
List<NutMap> nutMaps = memberManageService.compareMemberChangeInfo(record);
return Result.success(NutMap.NEW().addv("changeList", nutMaps).addv("nodeTasks", nodeTasks));
}
}
@@ -0,0 +1,93 @@
package com.budwk.app.zhgh.staffmanage.member.controller.school;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.annotation.RepeatSubmit;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeOrigin;
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm;
import com.budwk.app.zhgh.staffmanage.member.service.MemberManageService;
import lombok.extern.slf4j.Slf4j;
import org.nutz.dao.sql.Sql;
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 javax.validation.Valid;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberSchoolUnionManageController
* @Date 2024/8/12 14:06
* @注释 会员校工会管理
*/
@IocBean
@At("/platform/member/schoolUnion/manage/list")
@Slf4j
@Ok("json")
public class MemberSchoolUnionManageController {
@Inject
private MemberManageService memberManageService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/school/manage/index.html")
@SaCheckPermission("member.schoolUnion.manage.list")
public void index() {
}
@At
@SaCheckPermission("member.schoolUnion.manage.list")
public Result pageData(MemberManagePageForm pageForm){
Sql sql = memberManageService.getSql(pageForm, "schoolUnion");
Pagination pagination = memberManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@At
@SaCheckPermission("member.schoolUnion.manage.list")
@SLog(tag = "添加会员", type = "memberBranchManage", msg = "添加会员")
public Result addMember(@Valid MemberApplyRecord record) {
return null;
}
@At
@SaCheckPermission("member.schoolUnion.manage.list")
public Result getChangeInfoByUserId(String userId) {
return Result.success(memberManageService.getMemberChangeInfoByUserId(userId));
}
@At
@RepeatSubmit
@SaCheckPermission("member.branchUnion.manage.list")
@SLog(tag = "校工会管理-会员管理", type = "MemberBranchManageList", msg = "校工会普通变更")
public Result generalMemberChange(@Param("record") MemberApplyRecord record, @Param("approvalRemark") String approvalRemark){
//校工会变更,直接更改
try {
// 校验是否有变更的字段
List<NutMap> changeInfoList = memberManageService.compareMemberChangeInfo(record);
// 存储变更的类型
List<String> changeTypeList = memberManageService.compareMemberChangeType(changeInfoList, record);
record.setChangeTypes(changeTypeList);
record.setChangeOrigin(MemberChangeOrigin.SCHOOL_UNION.name());
record.setRemark(approvalRemark);
memberManageService.insert(record);
memberManageService.compareMemberChangeInfoAndUpdateUser(record);
return Result.success();
} catch (Exception e) {
e.printStackTrace();
return Result.error(e.getMessage());
}
}
}
@@ -0,0 +1,56 @@
package com.budwk.app.zhgh.staffmanage.member.controller.school;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.sys.models.Sys_user_history;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm;
import com.budwk.app.zhgh.staffmanage.member.service.MemberManageService;
import lombok.extern.slf4j.Slf4j;
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 javax.validation.Valid;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberSchoolRecordController
* @Date 2024/8/13 16:27
* @注释 校工会 会员变更记录
*/
@Slf4j
@IocBean
@Ok("json")
@At("/platform/member/schoolUnion/record")
public class MemberSchoolUnionRecordController {
@Inject
private MemberManageService memberManageService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/school/record/index.html")
@SaCheckPermission("member.schoolUnion.record")
public void index() {
}
@At
@SaCheckPermission("member.schoolUnion.record")
public Result pageData(MemberManagePageForm pageForm){
Pagination pagination = memberManageService.memberHistoryRecords(pageForm);
return Result.success(pagination);
}
@At
@SaCheckPermission("member.schoolUnion.record")
public Result findAuditChangeInfo(@Valid String recordId) {
Sys_user_history history = memberManageService.dao().fetch(Sys_user_history.class, recordId);
List<NutMap> list = memberManageService.compareMemberChangeInfo(history);
return Result.success(list);
}
}
@@ -0,0 +1,252 @@
package com.budwk.app.zhgh.staffmanage.member.controller.school.verification;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.excel.EasyExcel;
import com.budwk.app.base.annotation.RepeatSubmit;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.utils.CommonDownloadUtil;
import com.budwk.app.base.utils.EasyExcelUtil;
import com.budwk.app.sys.models.Sys_union;
import com.budwk.app.sys.services.SysDictService;
import com.budwk.app.zhgh.benefit.mode.BenefitUserTemp;
import com.budwk.app.zhgh.staffmanage.member.mode.MemberImportTemp;
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
import com.budwk.app.zhgh.staffmanage.member.models.MemberListVerificationProject;
import com.budwk.app.zhgh.staffmanage.member.models.MemberListVerificationUser;
import com.budwk.app.zhgh.staffmanage.member.models.MemberVerificationBranchUnionFeedback;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberListVerificationPageForm;
import com.budwk.app.zhgh.staffmanage.member.param.MemberListVerificationParam;
import com.budwk.app.zhgh.staffmanage.member.param.MemberListVerificationProjectParam;
import com.budwk.app.zhgh.staffmanage.member.service.MemberListVerificationService;
import com.budwk.app.zhgh.welfare.mode.WelfareUserTemp;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.formula.functions.T;
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.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.AdaptBy;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import org.nutz.mvc.upload.TempFile;
import org.nutz.mvc.upload.UploadAdaptor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @version 1.0
* @Author zzr
* @nameMemberListVerificationController
* @Date 2024/8/5 13:37
* @注释 会员名单核对事项
*/
@IocBean
@At("/platform/member/schoolUnion/verification/manage")
@Ok("json")
@Slf4j
public class MemberListVerificationController {
@Inject
private SysDictService sysDictService;
@Inject
private MemberListVerificationService memberListVerificationService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/school/verification/manage/index.html")
@SaCheckPermission("member.schoolUnion.verification.manage")
public void index() {
}
@At
@SaCheckPermission("member.schoolUnion.verification.manage")
public Result pageData(MemberListVerificationPageForm pageForm) {
Sql sql = Sqls.create("select * from member_list_verification_project $condition");
Cnd cnd = Cnd.NEW();
cnd.and(Cnd.likeEX("projectName",pageForm.getSearchKeyword()));
cnd.andEX("YEAR(applyDate)", "=", pageForm.getProjectYear());
cnd.desc("applyDate");
sql.setCondition(cnd);
Pagination pagination = memberListVerificationService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@At
@SaCheckPermission("member.schoolUnion.verification.manage")
public Result getUserPageData(MemberListVerificationPageForm pageForm) {
Pagination pagination = memberListVerificationService.getUserPageData(pageForm);
return Result.success(pagination);
}
/**
* 获取该项目中的选择人员
*
* @param pageForm
* @return
*/
@At
@SaCheckPermission("member.schoolUnion.verification.manage")
public Result getShowSelectionUsers(@Param("data") MemberListVerificationPageForm pageForm) {
Pagination pagination = memberListVerificationService.getShowSelectionUsers(pageForm);
return Result.success(pagination);
}
@At
@ApiOperation("修改校工会事项名单的选择人员")
@SaCheckPermission("member.schoolUnion.verification.manage")
@SLog(type = "verificationManage", tag = "校工会名单事项管理", msg = "修改校工会事项名单的选择人员")
public Result modifySelection(@Valid @Param("list") MemberListVerificationParam param) {
try {
memberListVerificationService.modifySelection(param);
return Result.success();
} catch (RuntimeException e) {
return Result.error();
}
}
/**
* 用于前端表格回显选中数据框
*
* @param id
* @return
*/
@At
@SaCheckPermission("member.schoolUnion.verification.manage")
public Result getSelectionUser(@Valid @Param("id") String id) {
NutMap map = NutMap.NEW();
//获取更改字段名,回显表头勾选框
MemberListVerificationProject project = memberListVerificationService.dao().fetch(MemberListVerificationProject.class, id);
List<String> renewFields = project.getRenewFields();
map.put("renewFields", renewFields);
return Result.success(map);
}
@At
@RepeatSubmit
@SaCheckPermission("member.schoolUnion.verification.manage")
@SLog(type = "verificationManage", tag = "校工会名单事项管理", msg = "新增/修改核对事项")
public Result insertOrUpdate(@Valid @Param("data") MemberListVerificationProjectParam param) {
try {
memberListVerificationService.insertOrUpdateVerificationProject(param);
return Result.success();
} catch (Exception e) {
e.printStackTrace();
return Result.error();
}
}
@At
@RepeatSubmit
@SaCheckPermission("member.schoolUnion.verification.manage")
public Result releaseVerificationProject(String verificationProjectId) {
memberListVerificationService.dao().update(MemberListVerificationProject.class,
Chain.make("isEnabled", true).add("releaseDateTime", DateUtil.now()),
Cnd.where("id", "=", verificationProjectId));
return Result.success();
}
@At
@RepeatSubmit
@SaCheckPermission("member.schoolUnion.verification.manage")
public Result closeVerificationProject(String verificationProjectId) {
memberListVerificationService.dao().update(MemberListVerificationProject.class,
Chain.make("isEnabled", false), Cnd.where("id", "=", verificationProjectId));
return Result.success();
}
@At
@RepeatSubmit
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("member.schoolUnion.verification.manage")
public Result removeVerificationProject(String verificationProjectId) {
Dao dao = memberListVerificationService.dao();
dao.clear(MemberListVerificationProject.class, Cnd.where("id", "=", verificationProjectId));
dao.clear(MemberApplyRecord.class, Cnd.where("verificationProjectId", "=", verificationProjectId));
dao.clear(MemberListVerificationUser.class, Cnd.where("verificationProjectId", "=", verificationProjectId));
dao.clear(MemberVerificationBranchUnionFeedback.class, Cnd.where("verificationProjectId", "=", verificationProjectId));
return Result.success();
}
@At
@SaCheckPermission("member.schoolUnion.verification.manage")
public Result findOne(String verificationProjectId) {
MemberListVerificationProject project = memberListVerificationService.dao().fetch(MemberListVerificationProject.class, Cnd.where("id", "=", verificationProjectId));
NutMap nutMap = Lang.obj2nutmap(project);
List<String> unionIds = project.getUnionIds();
List<Sys_union> unionList = memberListVerificationService.dao().query(Sys_union.class, Cnd.where("id", "in", unionIds));
String string = unionList.stream().map(Sys_union::getName).collect(Collectors.joining(","));
nutMap.put("unionNames", string);
return Result.success(nutMap);
}
@At
@SaCheckPermission("member.schoolUnion.verification.manage")
public Result removeMemberVerificationUserById(String id){
memberListVerificationService.dao().delete(MemberListVerificationUser.class, id);
return Result.success();
}
@At
@Ok("void")
@SaCheckPermission("member.schoolUnion.verification.manage")
public void downloadImport(HttpServletResponse response) {
try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();){
EasyExcel.write(byteArrayOutputStream, MemberImportTemp.class)
.sheet("预选人员导入模版")
.doWrite(ArrayList::new);
CommonDownloadUtil.download("预选人员导入模版.xlsx",byteArrayOutputStream.toByteArray() ,response);
} catch (Exception e) {
e.printStackTrace();
}
}
@At
@SaCheckPermission("member.schoolUnion.verification.manage")
@AdaptBy(type = UploadAdaptor.class, args = {"ioc:fileUpload"})
public Result doImport(TempFile file, String verificationProjectId){
List<T> ts = EasyExcelUtil.syncReadModel(file.getFile(), BenefitUserTemp.class, 0, 1);
List<MemberImportTemp> tempList = JSONUtil.parseArray(JSONUtil.toJsonStr(ts)).toList(MemberImportTemp.class);
List<String> loginNameList = tempList.stream().map(MemberImportTemp::getLoginName).toList();
MemberListVerificationPageForm pageForm = new MemberListVerificationPageForm();
pageForm.setQueryLoginNames(loginNameList);
pageForm.setVerificationProjectId(verificationProjectId);
pageForm.setPageNumber(1);
pageForm.setPageSize(100000);
Pagination userPageData = memberListVerificationService.getUserPageData(pageForm);
return Result.success(userPageData);
}
}
@@ -0,0 +1,370 @@
package com.budwk.app.zhgh.staffmanage.member.controller.school.verification;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.json.JSONObject;
import com.budwk.app.base.annotation.RepeatSubmit;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.utils.CommonDownloadUtil;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.sys.models.Sys_user_change_info;
import com.budwk.app.sys.models.Sys_user_history;
import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeOrigin;
import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeType;
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
import com.budwk.app.zhgh.staffmanage.member.models.MemberListVerificationProject;
import com.budwk.app.zhgh.staffmanage.member.models.MemberListVerificationUser;
import com.budwk.app.zhgh.staffmanage.member.models.MemberVerificationBranchUnionFeedback;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberListVerificationPageForm;
import com.budwk.app.zhgh.staffmanage.member.param.MemberSchoolVerificationSubmitParam;
import com.budwk.app.zhgh.staffmanage.member.param.MemberVerificationGetChangeParam;
import com.budwk.app.zhgh.staffmanage.member.service.MemberListVerificationService;
import com.budwk.app.zhgh.staffmanage.member.service.MemberManageService;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
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.Static;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
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 javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* @version 1.0
* @Author zzr
* @nameMemberSchoolListVerificationController
* @Date 2024/8/13 16:23
* @注释 校工会,名单核对事项
*/
@Slf4j
@IocBean
@Ok("json")
@At("/platform/member/schoolUnion/verification/check")
public class MemberSchoolVerificationCheckController {
@Inject
private MemberListVerificationService memberListVerificationService;
@Inject
private MemberManageService memberManageService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/school/verification/check/index.html")
@SaCheckPermission("member.schoolUnion.verification.check")
public void index() {
}
@At
@SaCheckPermission("member.schoolUnion.verification.check")
public Result pageData(MemberListVerificationPageForm pageForm) {
List<NutMap> mapList = memberListVerificationService.getSchoolListVerificationUnion(pageForm);
return Result.success(mapList);
}
@At
@SaCheckPermission("member.schoolUnion.verification.check")
public Result getCheckedMemberByUnionId(MemberListVerificationPageForm pageForm) {
Pagination pagination = memberListVerificationService.getSchoolListVerificationUser(pageForm);
return Result.success(pagination);
}
@At
@SaCheckPermission("member.schoolUnion.verification.check")
public Result getVerificationChangeInfo(@Valid @Param("data") MemberVerificationGetChangeParam param) {
MemberApplyRecord record = memberManageService.dao().fetch(MemberApplyRecord.class,
Cnd.where("userId", "=", param.getUserId()).and("verificationProjectId", "=", param.getVerificationProjectId()));
if (Lang.isNotEmpty(record)) {
Sys_user_history history = memberManageService.dao().fetch(Sys_user_history.class, Cnd.where("recordId", "=", record.getId()).desc("changeTime"));
if (Lang.isNotEmpty(history)) {
return Result.success(memberManageService.compareMemberChangeInfo(history));
} else {
return Result.success(memberManageService.compareMemberChangeInfo(record));
}
}
return Result.success();
}
/**
* 校工会审核名单核对事项中的单个人员,
* 通过:更新人员信息和名单核对人员库,新增一条历史信息
* 不通过:返回分工会重新核对
*
* @return
*/
@At
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("member.schoolUnion.verification.check")
@SLog(type = "member", tag = "名单核对事项", msg = "校工会审核")
public Result doHandle(@Valid @Param("data") MemberVerificationGetChangeParam param) {
// 判断校工会审核该用户是通过还是拒绝
Chain chain = Chain.make("schoolUnionChecked", true);
chain.add("verificationOption", param.getOption());
MemberApplyRecord record = memberManageService.dao().fetch(MemberApplyRecord.class,
Cnd.where("userId", "=", param.getUserId())
.and("verificationProjectId", "=", param.getVerificationProjectId()));
if (param.getFlag()) {
chain.add("currentState", 2);
memberManageService.compareMemberChangeInfoAndUpdateUser(record);
} else {
chain.add("currentState", 1);
memberManageService.update(record);
}
memberManageService.dao().update(MemberListVerificationUser.class, chain,
Cnd.where("userId", "=", param.getUserId()).and("verificationProjectId", "=", param.getVerificationProjectId()));
return Result.success();
}
@At
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("member.schoolUnion.verification.check")
@SLog(type = "member", tag = "名单核对事项", msg = "校工会提交")
public Result schoolVerificationSubmit(@Valid @Param("data") MemberSchoolVerificationSubmitParam param) {
MemberVerificationBranchUnionFeedback fetch = memberManageService.dao().fetch(MemberVerificationBranchUnionFeedback.class,
Cnd.where("verificationProjectId", "=", param.getVerificationProjectId())
.and("unionId", "=", param.getUnionId()));
fetch.setSchoolUnionSubmit(true);
fetch.setSchoolUnionSubmitNum(fetch.getSchoolUnionSubmitNum() + 1);
fetch.setStatus("待分工会重新提交");
// 更新反馈表的数据,校工会提交置为true
memberManageService.dao().update(fetch);
Cnd cnd = Cnd.NEW();
cnd.and("unionId", "=", param.getUnionId());
cnd.and("verificationProjectId", "=", param.getVerificationProjectId());
memberManageService.dao().update(MemberListVerificationUser.class,
Chain.make("branchUnionChecked", false).add("schoolUnionChecked", true),
cnd);
return Result.success();
}
@At
@Ok("void")
@SaCheckPermission("member.schoolUnion.verification.check")
public void exportExcel(MemberListVerificationPageForm pageForm, HttpServletResponse response) {
memberListVerificationService.exportVerificationExcel(pageForm, response, false);
}
@At
@SaCheckPermission("member.schoolUnion.verification.check")
public Result getChangeTypeUserPageData(MemberListVerificationPageForm pageForm) {
Sql sql = memberListVerificationService.getChangeTypeUserSql(pageForm);
Pagination pagination = memberManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@At
@Ok("void")
@SaCheckPermission("member.schoolUnion.verification.check")
public void exportChangeTypeUserByUnionIdExcel(MemberListVerificationPageForm pageForm, HttpServletResponse response) {
Sql sql = memberListVerificationService.getChangeTypeUserSql(pageForm);
List<NutMap> list = memberManageService.listMap(sql);
List<ExcelExportEntity> excelExportEntities = memberListVerificationService.buildExportEntities();
NutMap nutMap = list.stream().findFirst().orElse(NutMap.NEW());
String labelName = "";
switch (pageForm.getChangeType()) {
case "userState" -> {
labelName = "在职状态变更列表";
excelExportEntities.add(new ExcelExportEntity("原在职状态", "oldUserState", 20));
excelExportEntities.add(new ExcelExportEntity("新在职状态", "newUserState", 20));
}
case "restore" -> labelName = "入会人员列表";
case "withdrawal" -> labelName = "退会人员列表";
case "member" -> labelName = "最终会员列表";
case "welfareMember" -> labelName = "最终福利会员列表";
}
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, excelExportEntities, list);
CommonDownloadUtil.download(nutMap.getString("unionName") + labelName + ".xlsx", workbook, response);
}
@At
@Ok("void")
@SaCheckPermission("member.schoolUnion.verification.check")
public void exportAllChangeTypeUserExcel(MemberListVerificationPageForm pageForm, HttpServletResponse response){
MemberListVerificationProject project = memberManageService.dao().fetch(MemberListVerificationProject.class, pageForm.getVerificationProjectId());
Sql sql = memberListVerificationService.getChangeTypeUserSql(pageForm);
List<NutMap> list = memberManageService.listMap(sql);
List<ExcelExportEntity> excelExportEntities = memberListVerificationService.buildExportEntities();
String labelName = "";
switch (pageForm.getChangeType()) {
case "userState" -> {
labelName = "在职状态变更列表";
excelExportEntities.add(new ExcelExportEntity("原在职状态", "oldUserState", 20));
excelExportEntities.add(new ExcelExportEntity("新在职状态", "newUserState", 20));
}
case "restore" -> labelName = "入会人员列表";
case "withdrawal" -> labelName = "退会人员列表";
case "member" -> labelName = "最终会员列表";
case "welfareMember" -> labelName = "最终福利会员列表";
}
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, excelExportEntities, list);
CommonDownloadUtil.download( project.getProjectName() + labelName + ".xlsx", workbook, response);
}
@At
@RepeatSubmit
@Aop(TransAop.READ_COMMITTED)
@ApiOperation("校工会 名单核对事项,单个人员变更")
@SaCheckPermission("member.schoolUnion.verification.check")
@SLog(tag = "校工会管理-名单核对事项", type = "schoolUnionVerification", msg = "校工会单个人员变更")
public Result doCheckMember(@Param("record") MemberApplyRecord record){
if (Objects.isNull(record)) {
return Result.error("数据获取失败");
}
Dao dao = memberManageService.dao();
record.setChangeOrigin(MemberChangeOrigin.SCHOOL_UNION_VERIFICATION.name());
MemberApplyRecord applyRecord = dao.fetch(MemberApplyRecord.class, Cnd.where("userId", "=", record.getUserId())
.and("verificationProjectId", "=", record.getVerificationProjectId()));
// 如果之前有变更,删除之前记录
if (Lang.isNotEmpty(applyRecord)) {
record.setId(applyRecord.getId());
Sys_user_history history = dao.fetch(Sys_user_history.class, Cnd.where("loginname", "=", applyRecord.getLoginname())
.and("recordId", "=", record.getId()));
if (Lang.isNotEmpty(history)) {
Sys_user user = BeanUtil.copyProperties(history, Sys_user.class);
user.setId(record.getUserId());
dao.update(user);
dao.clear(Sys_user_change_info.class, Cnd.where("userHistoryId", "=", history.getId()));
}
}
dao.insertOrUpdate(record);
dao.update(MemberListVerificationUser.class,
Chain.make("isChanged", true).add("branchUnionChecked", true),
Cnd.where("userId", "=", record.getUserId())
.and("verificationProjectId", "=", record.getVerificationProjectId()));
dao.clear(Sys_user_history.class, Cnd.where("recordId", "=", record.getId()));
memberManageService.compareMemberChangeInfoAndUpdateUser(record);
dao.update(MemberListVerificationUser.class,
Chain.make("schoolUnionChecked", true).add("currentState", 2),
Cnd.where("userId", "=", record.getUserId())
.and("verificationProjectId", "=", record.getVerificationProjectId()));
return Result.success();
}
@At
@RepeatSubmit
@Aop(TransAop.READ_COMMITTED)
@ApiOperation("校工会 名单核对事项,退回分工会无误提交")
@SaCheckPermission("member.schoolUnion.verification.check")
@SLog(tag = "校工会管理-名单核对事项", type = "schoolUnionVerification", msg = "退回分工会无误提交")
public Result doRollback(@Valid @Param("id") String id,
@Valid @Param("rollbackReason") String rollbackReason){
MemberVerificationBranchUnionFeedback feedback = memberManageService.dao().fetch(MemberVerificationBranchUnionFeedback.class,
Cnd.where("id", "=", id));
feedback.setIsRollback(true);
feedback.setRollbackReason(rollbackReason);
feedback.setSchoolUnionSubmitNum(feedback.getSchoolUnionSubmitNum() + 1);
feedback.setStatus("校工会退回");
memberManageService.dao().update(feedback);
return Result.success();
}
@At
@Ok("void")
@SaCheckPermission("member.schoolUnion.verification.check")
public void doExportByPageDataForExcel(MemberListVerificationPageForm pageForm, HttpServletResponse response){
MemberListVerificationProject project = memberManageService.dao().fetch(MemberListVerificationProject.class, pageForm.getVerificationProjectId());
List<NutMap> mapList = memberListVerificationService.getSchoolListVerificationUnion(pageForm);
mapList.forEach(v-> {
v.put("branchUnionSubmit" ,v.getBoolean("branchUnionSubmit") ? "已提交" : "未提交");
v.put("isFeedback" ,v.getBoolean("isFeedback") ? "已反馈" : "未反馈");
});
// excel表格数据
List<ExcelExportEntity> exportEntities = new ArrayList<>();
exportEntities.add(new ExcelExportEntity("工会名称", "unionName", 30));
exportEntities.add(new ExcelExportEntity("需核对人数", "allNum", 20));
exportEntities.add(new ExcelExportEntity("变更总人数", "sex", 20));
exportEntities.add(new ExcelExportEntity("在职状态变更数", "userStateNum", 20));
exportEntities.add(new ExcelExportEntity("入会人数", "restoreNum", 20));
exportEntities.add(new ExcelExportEntity("退会人数", "withdrawalNum", 30));
exportEntities.add(new ExcelExportEntity("最终会员数", "lastMemberNum", 20));
exportEntities.add(new ExcelExportEntity("最终福利会员数", "lastWelfareMemberNum", 20));
exportEntities.add(new ExcelExportEntity("分工会提交次数", "branchUnionSubmitNum", 20));
exportEntities.add(new ExcelExportEntity("分工会提交状态", "branchUnionSubmit", 20));
exportEntities.add(new ExcelExportEntity("反馈状态", "isFeedback", 15));
exportEntities.add(new ExcelExportEntity("当前状态", "status", 15));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, mapList);
CommonDownloadUtil.download( project.getProjectName() + "分工会核对数据.xlsx", workbook, response);
}
@At
@SaCheckPermission("member.schoolUnion.verification.check")
public Result getWelfareUserInfo(@Valid String projectId) {
NutMap nutMap = memberListVerificationService.welfareUserInfo(projectId);
return Result.success(nutMap);
}
@At
@Ok("void")
@SaCheckPermission("member.schoolUnion.verification.check")
public void welfareChooseNumExport(@Valid String projectId, HttpServletResponse response){
NutMap nutMap = memberListVerificationService.welfareUserInfo(projectId);
if (Lang.isNotEmpty(nutMap)) {
// 构建excel表格数据
List<ExcelExportEntity> exportEntities = new ArrayList<>();
ExcelExportEntity no = new ExcelExportEntity("序号", "no", 10);
no.setFormat("isAddIndex");
exportEntities.add(no);
List<String> tableHeader = nutMap.getAsList("tableHeader", String.class);
for (String name : tableHeader) {
exportEntities.add(new ExcelExportEntity(name, name, 30));
}
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, nutMap.getAsList("tableData", NutMap.class));
CommonDownloadUtil.download("分工会福利上报数据.xlsx", workbook, response);
}
}
}
@@ -0,0 +1,86 @@
package com.budwk.app.zhgh.staffmanage.member.controller.statistics;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.result.Result;
import com.budwk.app.zhgh.staffmanage.member.service.MemberStatisticsService;
import org.apache.poi.ss.usermodel.Workbook;
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 javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberAnalysisController
* @Date 2024/8/8 16:08
* @注释 会员分析
*/
@IocBean
@Ok("json:full")
@At("/platform/member/statistics/analysis")
public class MemberAnalysisController {
@Inject
private MemberStatisticsService memberStatisticsService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/statistics/analysis/index.html")
@SaCheckPermission("member.statistics.analysis")
public void index() {
}
@At
@SaCheckPermission("member.statistics.analysis")
public Result pageData(@Param(value = "queryId") String queryId,
@Param(value = "queryType") String queryType,
@Param(value = "currentYear") Integer currentYear) {
List<NutMap> list = new ArrayList<>();
if ("fgh".equals(queryType)) {
list = memberStatisticsService.getUnionAnalysisData(queryId, currentYear);
} else {
list = memberStatisticsService.getUnitAnalysisData(queryId, currentYear);
}
return Result.success(list);
}
@At
@Ok("void")
@SaCheckPermission("member.statistics.analysis")
public void doExport(@Param("queryType") String queryType, @Param("currentYear") String currentYear,
@Param("queryId") String queryId, HttpServletResponse response) {
List<NutMap> list = new ArrayList<>();
if ("union".equals(queryType)) {
list = memberStatisticsService.getUnionAnalysisData(queryId, Integer.valueOf(currentYear));
} else {
list = memberStatisticsService.getUnitAnalysisData(queryId, Integer.valueOf(currentYear));
}
NutMap sumMap = NutMap.NEW();
sumMap.put("union".equals(queryType) ? "unionName" : "unitName", "合计");
sumMap.put("lastYearMemberNum", list.stream().mapToInt(v -> v.getInt("lastYearMemberNum")).sum());
sumMap.put("newMemberNum", list.stream().mapToInt(v -> v.getInt("newMemberNum")).sum());
sumMap.put("newResetMemberNum", list.stream().mapToInt(v -> v.getInt("newResetMemberNum")).sum());
sumMap.put("memberUnitChangeNumOut", list.stream().mapToInt(v -> v.getInt("memberUnitChangeNumOut")).sum());
sumMap.put("reduceOtherNum", list.stream().mapToInt(v -> v.getInt("reduceOtherNum")).sum());
sumMap.put("currentYearMemberNum", list.stream().mapToInt(v -> v.getInt("currentYearMemberNum")).sum());
list.add(sumMap);
try {
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + new String(("会员信息.xlsx").getBytes("utf-8"), "ISO8859-1"));
Workbook workbook = memberStatisticsService.exportAnalysisExcel(list, queryType);
workbook.write(response.getOutputStream());
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
@@ -0,0 +1,74 @@
package com.budwk.app.zhgh.staffmanage.member.controller.statistics;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.DesensitizedUtil;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.utils.CommonDownloadUtil;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberStatisticsPageForm;
import com.budwk.app.zhgh.staffmanage.member.service.MemberInfoService;
import com.budwk.app.zhgh.staffmanage.member.service.MemberStatisticsService;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.dao.sql.Sql;
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 javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberComprehensiveController
* @Date 2024/8/8 14:45
* @注释 综合统计
*/
@At("/platform/member/statistics/comprehensive")
@Ok("json:full")
@IocBean
public class MemberComprehensiveController {
@Inject
private MemberStatisticsService memberStatisticsService;
@Inject
private MemberInfoService memberInfoService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/statistics/comprehensive/index.html")
@SaCheckPermission("member.statistics.comprehensive")
public void index() {
}
@At
@SaCheckPermission("member.statistics.comprehensive")
public Result pageData(MemberStatisticsPageForm pageForm) {
Sql sql = memberStatisticsService.getComprehensiveSql(pageForm);
Pagination<NutMap> pagination = memberStatisticsService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
for (NutMap row : pagination.getList()) {
row.put("mobile", DesensitizedUtil.mobilePhone(row.getString("mobile")));
}
return Result.success(pagination);
}
@At
@Ok("void")
@SaCheckPermission("member.statistics.comprehensive")
public void doExport(MemberStatisticsPageForm pageForm, HttpServletResponse response){
Sql sql = memberStatisticsService.getComprehensiveSql(pageForm);
List<NutMap> list = memberStatisticsService.listMap(sql);
for (NutMap row : list) {
row.put("mobile", DesensitizedUtil.mobilePhone(row.getString("mobile")));
}
try {
Workbook workbook = memberInfoService.setHistoryExcelData(list);
CommonDownloadUtil.download("会员综合统计表.xlsx", workbook, response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
@@ -0,0 +1,83 @@
package com.budwk.app.zhgh.staffmanage.member.controller.statistics;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.result.Result;
import com.budwk.app.zhgh.staffmanage.member.service.MemberStatisticsService;
import org.apache.poi.ss.usermodel.Workbook;
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 javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberSummaryController
* @Date 2024/8/9 9:32
* @注释 会员按性别年龄汇总统计
*/
@At("/platform/member/statistics/summary")
@Ok("json:full")
@IocBean
public class MemberSummaryController {
@Inject
private MemberStatisticsService memberStatisticsService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/statistics/summary/index.html")
@SaCheckPermission("member.statistics.summary")
public void index() {
}
@At
@SaCheckPermission("member.statistics.summary")
public Result pageData(@Param("queryId") String queryId, @Param("queryType") String queryType,
@Param("currentYear") Integer currentYear) {
List<NutMap> list = new ArrayList<>();
if ("fgh".equals(queryType)) {
list = memberStatisticsService.getUnionStatisticsData(queryId, currentYear);
} else {
list = memberStatisticsService.getUnitStatisticsData(queryId, currentYear);
}
return Result.success(list);
}
@At
@Ok("void")
@SaCheckPermission("member.statistics.summary")
public void doExport(@Param("queryId") String queryId, @Param("queryType") String queryType,
@Param("currentYear") Integer currentYear, HttpServletResponse response) {
List<NutMap> list = new ArrayList<>();
if ("union".equals(queryType)) {
list = memberStatisticsService.getUnionStatisticsData(queryId, currentYear);
} else {
list = memberStatisticsService.getUnitStatisticsData(queryId, currentYear);
}
NutMap map = NutMap.NEW();
map.put("union".equals(queryType) ? "unionName" : "unitName", "合计");
map.put("totalNumber", list.stream().mapToInt(v -> v.getInt("TotalNumber")).sum());
map.put("maleMember", list.stream().mapToInt(v -> v.getInt("maleMember")).sum());
map.put("femaleMember", list.stream().mapToInt(v -> v.getInt("femaleMember")).sum());
map.put("smallForty", list.stream().mapToInt(v -> v.getInt("smallForty")).sum());
map.put("smallFifty", list.stream().mapToInt(v -> v.getInt("smallFifty")).sum());
map.put("smallFiftyFive", list.stream().mapToInt(v -> v.getInt("smallFiftyFive")).sum());
map.put("smallFiftyFive2", list.stream().mapToInt(v -> v.getInt("smallFiftyFive2")).sum());
try {
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + new String(("会员性别统计.xlsx").getBytes("utf-8"), "ISO8859-1"));
Workbook workbook = memberStatisticsService.exportStatisticsExcel(list, queryType);
workbook.write(response.getOutputStream());
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
@@ -0,0 +1,45 @@
package com.budwk.app.zhgh.staffmanage.member.h5controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import io.swagger.annotations.Api;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
/**
* @version 1.0
* @Author zzr
* @nameH5MemberApplyController
* @Date 2024/11/12 14:46
* @注释
*/
@IocBean
@Ok("json:full")
@Api("h5会员入会")
@At("/platform/h5/member/apply")
public class H5MemberApplyController {
@At("/submit")
@Ok("beetl:/platform/zhghh5/staffmanage/member/apply/submit/index.html")
@SaCheckPermission("h5.member.apply.submit")
public void submit() {
}
@At("/mine")
@Ok("beetl:/platform/zhghh5/staffmanage/member/apply/mine/index.html")
@SaCheckPermission("h5.member.apply.mine")
public void mine() {
}
@At("/branch")
@Ok("beetl:/platform/zhghh5/staffmanage/member/apply/branch/index.html")
@SaCheckPermission("h5.member.apply.branch")
public void branch() {
}
@At("/school")
@Ok("beetl:/platform/zhghh5/staffmanage/member/apply/school/index.html")
@SaCheckPermission("h5.member.apply.school")
public void school() {
}
}
@@ -0,0 +1,27 @@
package com.budwk.app.zhgh.staffmanage.member.h5controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import io.swagger.annotations.Api;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
/**
* @version 1.0
* @Author zzr
* @nameH5MemberBoardController
* @Date 2024/9/26 16:54
* @注释
*/
@IocBean
@At("/platform/h5/member/board")
@Ok("json:full")
@Api("h5会员查询")
public class H5MemberBoardController {
@At("")
@Ok("beetl:/platform/zhghh5/staffmanage/member/board/index.html")
@SaCheckPermission("h5.member.query")
public void index() {
}
}
@@ -0,0 +1,27 @@
package com.budwk.app.zhgh.staffmanage.member.h5controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import io.swagger.annotations.Api;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
/**
* @version 1.0
* @Author zzr
* @nameH5MemberQueryController
* @Date 2024/9/26 16:54
* @注释
*/
@IocBean
@At("/platform/h5/member/query")
@Ok("json:full")
@Api("h5会员查询")
public class H5MemberQueryController {
@At("")
@Ok("beetl:/platform/zhghh5/staffmanage/member/query/index.html")
@SaCheckPermission("h5.member.query")
public void index() {
}
}
@@ -0,0 +1,29 @@
package com.budwk.app.zhgh.staffmanage.member.mode;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @version 1.0
* @Author zzr
* @nameMemberImportTemp
* @Date 2025/2/24 10:55
* @注释
*/
@Data
@EqualsAndHashCode
@ContentRowHeight(20) // 内容行高
@HeadRowHeight(20) // 表头行高
@ColumnWidth(25) //列宽
public class MemberImportTemp {
@ExcelProperty("工号")
private String loginName;
@ExcelProperty("姓名")
private String userName;
}
@@ -0,0 +1,250 @@
package com.budwk.app.zhgh.staffmanage.member.models;
import cn.hutool.json.JSONObject;
import com.budwk.app.base.model.BaseModel;
import com.budwk.app.sys.annotation.DataCenterColumn;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.Date;
import java.util.List;
/**
* 会员申请记录
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Accessors(chain = true)
@Table("member_apply_record")
@Comment("会员申请记录")
public class MemberApplyRecord extends BaseModel {
@Name
@Comment("ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
@PrevInsert(uu32 = true)
private String id;
@Column
@Comment("用户id")
@ColDefine(type = ColType.VARCHAR, width = 32)
@NotBlank(message = "用户不能为空")
@Size(max = 32)
private String userId;
@Column
@Comment("姓名")
@ColDefine(type = ColType.VARCHAR, width = 100)
@NotBlank(message = "姓名不能为空")
@Size(max = 100)
private String username;
@Column
@Comment("工号")
@ColDefine(type = ColType.VARCHAR, width = 100)
@NotBlank(message = "工号不能为空")
@Size(max = 100)
private String loginname;
@Column
@Comment("单位id")
@ColDefine(type = ColType.VARCHAR, width = 32)
@NotBlank(message = "单位id不能为空")
@Size(max = 32)
private String unitId;
@Column
@Comment("变更单位id")
@ColDefine(type = ColType.VARCHAR, width = 32)
@Size(max = 32)
private String changeUnitId;
@Column
@Comment("单位名称")
@ColDefine(type = ColType.VARCHAR, width = 200)
@NotBlank(message = "单位名称不能为空")
@Size(max = 200)
private String unitName;
@Column
@Comment("工会id")
@ColDefine(type = ColType.VARCHAR, width = 32)
@NotBlank(message = "工会id不能为空")
@Size(max = 32)
private String unionId;
@Column
@Comment("变更工会id")
@ColDefine(type = ColType.VARCHAR, width = 32)
@Size(max = 32)
private String changeUnionId;
@Column
@Comment("工会名称")
@ColDefine(type = ColType.VARCHAR, width = 50)
@NotBlank(message = "工会名称不能为空")
@Size(max = 50)
private String unionName;
@Column
@Comment("性别")
@ColDefine(type = ColType.VARCHAR, width = 10)
@NotBlank(message = "性别不能为空")
@Size(max = 10)
private String sex;
@Column
@Comment("证件号码")
@ColDefine(type = ColType.VARCHAR, width = 30)
@NotBlank(message = "证件号码不能为空")
@Size(max = 30)
private String idCard;
@Column
@Comment("民族")
@ColDefine(type = ColType.VARCHAR, width = 20)
@NotBlank(message = "民族不能为空")
@Size(max = 20)
private String nation;
@Column
@Comment("政治面貌")
@ColDefine(type = ColType.VARCHAR, width = 100)
@NotBlank(message = "政治面貌不能为空")
@Size(max = 100)
private String political;
@Column
@Comment("学历")
@ColDefine(type = ColType.VARCHAR, width = 20)
@NotBlank(message = "学历不能为空")
@Size(max = 20)
private String education;
@Column
@Comment("党政职务")
@ColDefine(type = ColType.VARCHAR, width = 50)
@NotBlank(message = "党政职务不能为空")
@Size(max = 50)
private String governmentPosition;
@Column
@Comment("在职状态")
@ColDefine(type = ColType.VARCHAR, width = 50)
@NotBlank(message = "在职状态不能为空")
@Size(max = 50)
private String userState;
@Column
@Comment("人事编制")
@ColDefine(type = ColType.VARCHAR, width = 50)
@NotBlank(message = "人事编制不能为空")
@Size(max = 50)
private String preparedBy;
@Column
@Comment("人员类别")
@ColDefine(type = ColType.VARCHAR, width = 50)
@NotBlank(message = "人员类别不能为空")
@Size(max = 50)
private String personType;
@Column
@Comment("手机号码")
@ColDefine(type = ColType.VARCHAR, width = 32)
@NotBlank(message = "手机号码不能为空")
@Size(max = 32)
private String mobile;
@Column
@Comment("电子邮箱")
@ColDefine(type = ColType.VARCHAR, width = 255)
@NotBlank(message = "电子邮箱不能为空")
@Size(max = 255)
private String email;
@Column
@Comment("是否愿意加入大病互助基金会")
@ColDefine(type = ColType.BOOLEAN)
@Default(value = "0")
@NotNull(message = "愿意加入大病互助基金会不能为空")
private Boolean wantJoinLoveMutualAidAssociation;
@Column
@Comment("会员状态")
@ColDefine(type = ColType.BOOLEAN)
@Default(value = "0")
private Boolean member;
@Column
@Comment("福利会员状态")
@ColDefine(type = ColType.BOOLEAN)
@Default(value = "0")
private Boolean welfareMember;
@Column
@Comment("家庭主要成员及其工作单位")
@ColDefine(type = ColType.MYSQL_JSON)
private List<JSONObject> families;
@Column
@Comment("博士后进站时间")
@ColDefine(type = ColType.DATE)
private Date postDoctoralJoinDate;
@Column
@Comment("个人简况")
@ColDefine(type = ColType.VARCHAR, customType = "text")
@NotBlank(message = "个人简况不能为空")
private String personalData;
@Column
@Comment("备注")
@ColDefine(type = ColType.VARCHAR, width = 255)
private String notes;
@Column
@Comment("变更类型")
@ColDefine(type = ColType.VARCHAR, width = 20)
private String changeType;
@Column
@Comment("变更类型集合")
@ColDefine(type = ColType.MYSQL_JSON)
private List<String> changeTypes;
@Column
@Comment("变更来源")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String changeOrigin;
@Column
@Comment("申请时间")
@ColDefine(type = ColType.DATETIME)
@PrevInsert(now = true)
private Date applyDateTime;
@Column
@Comment("名单事项核对Id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String verificationProjectId;
private Boolean edit;
@Column
@Comment("详细变更记录")
@ColDefine(type = ColType.TEXT)
private String changeInfos;
@Column
@Comment("详细变更记录")
@ColDefine(type = ColType.TEXT)
private String remark;
}
@@ -0,0 +1,37 @@
package com.budwk.app.zhgh.staffmanage.member.models;
import com.budwk.app.sys.models.Sys_user;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.nutz.dao.entity.annotation.*;
/**
* @version 1.0
* @Author zzr
* @nameMemberHistory
* @Date 2024/8/8 11:18
* @注释 历史会员表
*/
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@Data
@Table("member_history")
public class MemberHistory extends Sys_user {
@Column
@Name
@Comment("ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String id;
@Column
@Comment("年度")
@ColDefine(type = ColType.INT, width = 4)
private Integer year;
@Column
@Comment("用户ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String userId;
}
@@ -0,0 +1,108 @@
package com.budwk.app.zhgh.staffmanage.member.models;
import cn.hutool.json.JSONObject;
import com.budwk.app.base.model.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.Date;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberListVerificationProject
* @Date 2024/8/5 11:54
* @注释 名单核对事项项目表
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Table("member_list_verification_project")
@Comment("名单核对事项项目表")
public class MemberListVerificationProject extends BaseModel {
@Name
@Comment("ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
@PrevInsert(uu32 = true)
private String id;
@Column
@Comment("名单核对事项名称")
@ColDefine(type = ColType.VARCHAR, width = 100)
@NotBlank(message = "名单核对事项名称不能为空")
@Size(max = 100)
private String projectName;
@Column
@Comment("名单核对事项内容及要求")
@ColDefine(type = ColType.TEXT)
@NotBlank(message = "名单核对事项内容及要求不能为空")
private String content;
@Column
@Comment("名单核对事项发布时间")
@ColDefine(type = ColType.DATETIME)
private Date releaseDateTime;
@Column
@Comment("开始时间")
@ColDefine(type = ColType.DATETIME)
private Date startDate;
@Column
@Comment("结束时间")
@ColDefine(type = ColType.DATETIME)
private Date endDate;
@Column
@Comment("推送分工会id")
@ColDefine(type = ColType.MYSQL_JSON)
private List<String> unionIds;
@Column
@Comment("更新字段")
@ColDefine(type = ColType.MYSQL_JSON)
private List<String> renewFields;
@Column
@Comment("附件")
@ColDefine(type = ColType.MYSQL_JSON)
private List<JSONObject> files;
@Column
@Comment("是否需要反馈")
@ColDefine(type = ColType.BOOLEAN)
@Default(value = "1")
@NotNull(message = "是否需要反馈不能为空")
private Boolean isNeedFeedback;
@Column
@Comment("是否需要反馈附件")
@ColDefine(type = ColType.BOOLEAN)
@Default(value = "1")
@NotNull(message = "是否需要反馈附件不能为空")
private Boolean isNeedFeedbackFile;
@Column
@Comment("创建时间")
@ColDefine(type = ColType.DATETIME)
@PrevInsert(now = true)
private Date applyDate;
@Column
@Comment("是否开启")
@Default(value = "1")
@ColDefine(type = ColType.BOOLEAN)
private Boolean isEnabled;
@Column
@Comment("福利")
@ColDefine(type = ColType.MYSQL_JSON)
private List<JSONObject> welfareJson;
}
@@ -0,0 +1,65 @@
package com.budwk.app.zhgh.staffmanage.member.models;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert;
/**
* @version 1.0
* @Author zzr
* @nameMemberListVerification
* @Date 2024/8/5 11:51
* @注释 会员名单核对事项用户表
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@Table("member_list_verification_user")
@Comment("会员名单核对事项用户表")
public class MemberListVerificationUser extends MemberApplyRecord {
@Name
@Comment("ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
@PrevInsert(uu32 = true)
private String id;
@Column
@Comment("会员名单核对事项ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String verificationProjectId;
@Column
@Default("0")
@Comment("分工会是否已核对")
@ColDefine(type = ColType.BOOLEAN)
private Boolean branchUnionChecked;
@Column
@Default("0")
@Comment("校工会是否已核对")
@ColDefine(type = ColType.BOOLEAN)
private Boolean schoolUnionChecked;
@Column
@Default("0")
@Comment("是否变更")
@ColDefine(type = ColType.BOOLEAN)
private Boolean isChanged;
/**
* 1,校工会拒绝 2,校工会通过
*/
@Column
@Comment("当前状态")
@ColDefine(type = ColType.INT)
private Integer currentState;
@Column
@Comment("名单事项审核意见")
@ColDefine(type = ColType.VARCHAR, width = 200)
private String verificationOption;
}
@@ -0,0 +1,125 @@
package com.budwk.app.zhgh.staffmanage.member.models;
import cn.hutool.json.JSONObject;
import com.budwk.app.base.model.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberVerificationBranchUnionFaceback
* @Date 2024/8/16 9:49
* @注释 名单核对事项,分工会反馈
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Table
@Comment("名单核对事项,分工会反馈表")
public class MemberVerificationBranchUnionFeedback extends BaseModel {
@Name
@Comment("ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
@PrevInsert(uu32 = true)
private String id;
@Column
@Comment("名单核对事项Id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String verificationProjectId;
@Column
@Comment("分工会Id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unionId;
@Column
@Comment("分工会编码")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unionCode;
@Column
@Comment("分工会名称")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String unionName;
@Column
@Comment("是否已反馈")
@ColDefine(type = ColType.BOOLEAN)
@Default("0")
private Boolean isFeedback;
@Column
@Comment("分工会是否已提交")
@ColDefine(type = ColType.BOOLEAN)
@Default("0")
private Boolean branchUnionSubmit;
@Column
@Comment("分工会已提交次数")
@ColDefine(type = ColType.INT)
@Default("0")
private Integer branchUnionSubmitNum;
@Column
@Comment("校工会是否已提交")
@ColDefine(type = ColType.BOOLEAN)
@Default("0")
private Boolean schoolUnionSubmit;
@Column
@Comment("校工会已提交次数")
@ColDefine(type = ColType.INT)
@Default("0")
private Integer schoolUnionSubmitNum;
@Column
@Comment("反馈人Id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String feedbackUserId;
@Column
@Comment("反馈人姓名")
@ColDefine(type = ColType.VARCHAR, width = 30)
private String feedbackUserName;
@Column
@Comment("反馈人工号")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String feedbackLoginName;
@Column
@Comment("反馈人数")
@ColDefine(type = ColType.INT)
private Integer feedbackNum;
@Column
@Comment("反馈文件")
@ColDefine(type = ColType.MYSQL_JSON)
private List<JSONObject> feedbackFiles;
@Column
@Comment("校工会是否退回")
@ColDefine(type = ColType.BOOLEAN)
private Boolean isRollback;
@Column
@Comment("退回原因")
@ColDefine(type = ColType.VARCHAR, width = 200)
private String rollbackReason;
@Column
@Comment("当前状态")
@ColDefine(type = ColType.VARCHAR, width = 30)
private String status;
@Column
@Comment("分工会上报福利选择情况")
@ColDefine(type = ColType.MYSQL_JSON)
private List<JSONObject> welfareJson;
}
@@ -0,0 +1,55 @@
package com.budwk.app.zhgh.staffmanage.member.param;
import com.budwk.app.base.param.PageForm;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberInfoPageForm
* @Date 2024/8/8 10:08
* @注释 会员信息page
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class MemberInfoPageForm extends PageForm {
private Integer year;
private String unionId;
private String unitId;
private String threeUnitId;
private String unionGroupId;
private String userState;
private String preparedBy;
private String personType;
private List<String> personTypes;
private List<String> preparedBys;
private List<String> userStates;
private String sex;
private List<String> sexTypes;
private Integer memberStatus;
private String position;
private String jobTitle;
private String memberSearchName;
private String memberSearchKeyWord;
}
@@ -0,0 +1,29 @@
package com.budwk.app.zhgh.staffmanage.member.param;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberListVerificationParma
* @Date 2024/8/14 15:28
* @注释
*/
@Data
public class MemberListVerificationParam {
@NotBlank(message = "名单核对事项id不能为空")
private String verificationProjectId;
@NotNull(message = "用户数据读取失败")
private List<String> selectUserIds;
@NotNull(message = "更改字段获取失败")
private List<String> renewFields;
private Boolean checkCanSubmission;
}
@@ -0,0 +1,46 @@
package com.budwk.app.zhgh.staffmanage.member.param;
import lombok.Data;
import org.json.JSONObject;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberListVerificationParam
* @Date 2024/8/6 9:23
* @注释 名单核对事项新增参数验证
*/
@Data
public class MemberListVerificationProjectParam {
private String id;
@NotBlank(message = "事项名称不能为空")
private String projectName;
@NotBlank(message = "内容及要求不能为空")
private String content;
@NotEmpty(message = "推送分工会不能为空")
private List<String> unionIds;
@NotNull(message = "开始时间不能为空")
private Date startDate;
@NotNull(message = "结束时间不能为空")
private Date endDate;
@NotNull(message = "是否需要反馈不能为空")
private Boolean isNeedFeedback;
@NotNull(message = "是否需要反馈附件不能为空")
private Boolean isNeedFeedbackFile;
private List<JSONObject> welfareJson;
}
@@ -0,0 +1,23 @@
package com.budwk.app.zhgh.staffmanage.member.param;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* @version 1.0
* @Author zzr
* @nameMemberSchoolVerificationSubmitParam
* @Date 2024/9/13 15:29
* @注释
*/
@Data
public class MemberSchoolVerificationSubmitParam {
@NotBlank(message = "未获取到核对事项")
private String verificationProjectId;
@NotBlank(message = "未获取到所属工会")
private String unionId;
}
@@ -0,0 +1,29 @@
package com.budwk.app.zhgh.staffmanage.member.param;
import cn.hutool.json.JSONObject;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberVerificationBranchUnionFeedbackParam
* @Date 2024/9/10 11:29
* @注释
*/
@Data
public class MemberVerificationBranchUnionFeedbackParam {
@NotBlank(message = "核对事项不能为空")
private String verificationProjectId;
@NotNull(message = "反馈人数不能为空")
private Integer feedbackNum;
private List<JSONObject> feedbackFiles;
private List<JSONObject> welfareJson;
}
@@ -0,0 +1,26 @@
package com.budwk.app.zhgh.staffmanage.member.param;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* @version 1.0
* @Author zzr
* @nameMemberVerificationGetChangeParam
* @Date 2024/9/5 15:37
* @注释
*/
@Data
public class MemberVerificationGetChangeParam {
@NotBlank(message = "未获取到名单核对事项")
private String verificationProjectId;
@NotBlank(message = "未获取到用户")
private String userId;
private Boolean flag;
private String option;
}
@@ -0,0 +1,19 @@
package com.budwk.app.zhgh.staffmanage.member.param.pageform;
import com.budwk.app.base.param.PageForm;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 会员入会分工会审核
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class MemberApplyBranchAuditPageForm extends PageForm {
private Boolean audit;
private String unionId;
private String unitId;
}
@@ -0,0 +1,48 @@
package com.budwk.app.zhgh.staffmanage.member.param.pageform;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.Cnd;
import org.nutz.dao.util.cri.SqlExpressionGroup;
/**
* @version 1.0
* @Author zzr
* @nameMemberApplyPageForm
* @Date 2024/11/11 11:09
* @注释
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class MemberApplyPageForm extends PageForm<MemberApplyRecord> {
private String unionId;
private String unitId;
private String userState;
private String personType;
private String preparedBy;
public static void buildSearch(Cnd cnd, MemberApplyPageForm pageForm) {
if (cnd == null) {
cnd = Cnd.NEW();
}
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("vu.loginname", "like", "%" + pageForm.getSearchKeyword() + "%");
seg.or("vu.username", "like", "%" + pageForm.getSearchKeyword() + "%");
cnd.and(seg);
}
cnd.andEX("vu.unionId","=",pageForm.getUnionId());
cnd.andEX("vu.unitId","=",pageForm.getUnitId());
cnd.andEX("vu.userState","=",pageForm.getUserState());
cnd.andEX("vu.personType","=",pageForm.getPersonType());
cnd.andEX("vu.preparedBy","=",pageForm.getPreparedBy());
}
}
@@ -0,0 +1,133 @@
package com.budwk.app.zhgh.staffmanage.member.param.pageform;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.param.PageForm;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.Cnd;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import java.util.Date;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberListVerificationPageForm
* @Date 2024/8/13 16:33
* @注释
*/
@EqualsAndHashCode(callSuper = true)
@Data
@ApiModel("名单事项公共查询数据")
public class MemberListVerificationPageForm extends PageForm {
@ApiModelProperty("项目年份")
private String projectYear;
@ApiModelProperty("工会id")
private String unionId;
@ApiModelProperty("单位id")
private String unitId;
@ApiModelProperty("人员类型")
private String personType;
@ApiModelProperty("在职状态")
private String userState;
@ApiModelProperty("人事编制")
private String preparedBy;
@ApiModelProperty("变更类型")
private String changeType;
@ApiModelProperty("名单核对事项id")
private String verificationProjectId;
@ApiModelProperty("校工会核对")
private String schoolUnionChecked;
@ApiModelProperty("是否会员")
private Integer isMember;
@ApiModelProperty("是否福利会员")
private Integer isWelfareMember;
@ApiModelProperty("福利项目id")
private String welfareProjectId;
@ApiModelProperty("是否发放福利")
private Integer isGrantWelfare;
@ApiModelProperty("退休日期开始时间")
private Date retireStartDate;
@ApiModelProperty("退休日期结束时间")
private Date retireEndDate;
@ApiModelProperty("批量选择人员id")
private List<String> selectUserIds;
@ApiModelProperty("导入查询的工号")
private List<String> queryLoginNames;
@ApiModelProperty("性别")
private String sex;
public static void buildSearch(Cnd cnd, MemberListVerificationPageForm pageForm){
if (cnd == null) {
cnd = Cnd.NEW();
}
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("list.loginname", "like", "%" + pageForm.getSearchKeyword() + "%");
seg.or("list.username", "like", "%" + pageForm.getSearchKeyword() + "%");
cnd.and(seg);
}
cnd.andEX("list.unionId","=",pageForm.getUnionId());
cnd.andEX("list.unitId","=",pageForm.getUnitId());
cnd.andEX("list.userState","=",pageForm.getUserState());
cnd.andEX("list.personType","=",pageForm.getPersonType());
cnd.andEX("list.preparedBy","=",pageForm.getPreparedBy());
cnd.andEX("list.verificationProjectId","=",pageForm.getVerificationProjectId());
}
/**
* 单表查询
* @param cnd
* @param pageForm
*/
public static void buildSearchBySingleTable(Cnd cnd, MemberListVerificationPageForm pageForm) {
if (cnd == null){
cnd = Cnd.NEW();
}
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("u.loginname", "like", "%" + pageForm.getSearchKeyword() + "%");
seg.or("u.username", "like", "%" + pageForm.getSearchKeyword() + "%");
cnd.and(seg);
}
cnd.andEX("u.unitId", "=", pageForm.getUnitId());
cnd.andEX("u.userState", "=", pageForm.getUserState());
cnd.andEX("u.preparedBy", "=", pageForm.getPreparedBy());
cnd.andEX("u.personType", "=", pageForm.getPersonType());
if (pageForm.getIsMember() != null && !pageForm.getIsMember().equals(3)) {
cnd.and("u.member", "=", pageForm.getIsMember());
}
if (pageForm.getIsWelfareMember() != null && !pageForm.getIsWelfareMember().equals(3)) {
cnd.and("u.welfareMember", "=", pageForm.getIsWelfareMember());
}
cnd.andEX("u.sex","=",pageForm.getSex());
}
}
@@ -0,0 +1,141 @@
package com.budwk.app.zhgh.staffmanage.member.param.pageform;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.Cnd;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.dao.util.cri.Static;
import org.nutz.lang.Lang;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberChangePageForm
* @Date 2024/8/6 8:56
* @注释
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class MemberManagePageForm extends PageForm {
private String unionId;
private String unitId;
private String sex;
private String personType;
private String preparedBy;
private String userState;
private String changeType;
//变更状态数组
private List<String> changeTypes;
//是否变更
private Integer changed;
private Integer isMember;
private Integer isWelfareMember;
//变更开始时间
private String changeDateBefore;
//变更结束时间
private String changeDateEnd;
//变更来源
private List<Integer> changeOrigins;
public static void buildSearch(Cnd cnd, MemberManagePageForm pageForm) {
if (cnd == null) {
cnd = Cnd.NEW();
}
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("u.unionId", "=", SecurityUtil.getUnionId());
} else {
cnd.andEX("u.unionId", "=", pageForm.getUnionId());
}
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("u.loginname", "like", "%" + pageForm.getSearchKeyword() + "%");
seg.or("u.username", "like", "%" + pageForm.getSearchKeyword() + "%");
cnd.and(seg);
}
cnd.andEX("u.member", "=", pageForm.getIsMember());
cnd.andEX("u.welfareMember", "=", pageForm.getIsWelfareMember());
cnd.andEX("u.unitId", "=", pageForm.getUnitId());
cnd.andEX("u.userState", "=", pageForm.getUserState());
cnd.andEX("u.preparedBy", "=", pageForm.getPreparedBy());
cnd.andEX("u.sex", "=", pageForm.getSex());
cnd.andEX("u.personType", "=", pageForm.getPersonType());
if (StrUtil.isNotBlank(pageForm.getChangeDateBefore()) && StrUtil.isNotBlank(pageForm.getChangeDateEnd())) {
cnd.and(new Static(String.format("Date(his.changeTime) >= '%s' and Date(his.changeTime) <= '%s'", pageForm.getChangeDateBefore(), pageForm.getChangeDateEnd())));
}
if (Lang.isNotEmpty(pageForm.getChangeTypes())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
for (String type : pageForm.getChangeTypes()) {
seg.or(new Static("JSON_CONTAINS(his.changeTypes, JSON_ARRAY('%s'), '$')".formatted(type)));
}
cnd.and(seg);
}
if (pageForm.getChanged() != null) {
if (pageForm.getChanged() == 1) {
cnd.and(new Static("his.changeTime is not null"));
} else if (pageForm.getChanged() == 2) {
cnd.desc("his.changeTime");
} else {
cnd.and(new Static("his.changeTime is null"));
}
}
}
/**
* 审核查询
* @param cnd
* @param pageForm
*/
public static void buildAuditSearch(Cnd cnd, MemberManagePageForm pageForm){
if (cnd == null) {
cnd = Cnd.NEW();
}
if (pageForm.getAudit() != null) {
if (pageForm.getAudit()) {
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE);
} else {
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE);
}
}
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("record.loginname", "like", "%" + pageForm.getSearchKeyword() + "%");
seg.or("record.username", "like", "%" + pageForm.getSearchKeyword() + "%");
cnd.and(seg);
}
cnd.andEX("vu.unionId", "=", pageForm.getUnionId());
cnd.andEX("record.unitId", "=", pageForm.getUnitId());
cnd.andEX("record.userState", "=", pageForm.getUserState());
cnd.andEX("record.preparedBy", "=", pageForm.getPreparedBy());
cnd.andEX("record.personType", "=", pageForm.getPersonType());
cnd.groupBy("record.id,task.id");
}
}
@@ -0,0 +1,31 @@
package com.budwk.app.zhgh.staffmanage.member.param.pageform;
import com.budwk.app.base.param.PageForm;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @version 1.0
* @Author zzr
* @nameMemberModelWorkerPageForm
* @Date 2024/9/25 16:56
* @注释
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class MemberModelWorkerPageForm extends PageForm {
private String unionId;
private String unitId;
private String userState;
private String preparedBy;
private String personType;
private String memberState;
private String welfareMemberState;
}
@@ -0,0 +1,62 @@
package com.budwk.app.zhgh.staffmanage.member.param.pageform;
import com.budwk.app.base.param.PageForm;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberStatisticsPageForm
* @Date 2024/8/8 14:49
* @注释
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class MemberStatisticsPageForm extends PageForm {
private String isUnit;
private String isUnion;
private String searchType;
private String startDate;
private String endDate;
private Integer year;
private List<String> unionId;
private List<String> unitId;
private List<String> unionGroupId;
private List<String> personTypes;
private List<String> preparedBys;
private List<String> userStates;
private List<String> memberStatus;
private String campus;
private List<String> memberTypes;
private List<String> sexTypes;
private List<String> roleIds;
private List<String> age;
private Boolean reverseSelection;
private String memberSearchName;
private String memberSearchKeyWord;
}
@@ -0,0 +1,11 @@
package com.budwk.app.zhgh.staffmanage.member.service;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
/**
* 会员申请记录
*/
public interface MemberApplyRecordService extends BaseService<MemberApplyRecord> {
}
@@ -0,0 +1,18 @@
package com.budwk.app.zhgh.staffmanage.member.service;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm;
/**
* @version 1.0
* @Author zzr
* @nameMemberBranchUnionManageService
* @Date 2024/8/13 11:20
* @注释 会员管理-分工会管理
*/
public interface MemberBranchUnionManageService extends BaseService<Sys_user> {
Pagination getPageData(MemberManagePageForm pageForm);
}
@@ -0,0 +1,70 @@
package com.budwk.app.zhgh.staffmanage.member.service;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.zhgh.staffmanage.member.param.MemberInfoPageForm;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.upload.TempFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberChangeService
* @Date 2024/8/8 10:13
* @注释
*/
public interface MemberInfoService extends BaseService<Sys_user> {
/**
* 获取查询Sql
* @param pageForm
* @return
*/
Sql getSql(MemberInfoPageForm pageForm);
/**
* 获取会员历史
* @param pageForm
* @return
*/
Sql getMemberHistorySql(MemberInfoPageForm pageForm);
/**
* 备份会员
* @param year
*/
void archiveMember(Integer year);
/**
* 导出会员sql
* @param year
* @return
*/
List<NutMap> historyExportByUnionData(Integer year);
/**
* 设置Excel表格数据
* @param list
* @return
*/
Workbook setHistoryExcelData(List<NutMap> list);
/**
* 会员档案管理导出会员
* @param pageForm
* @param response
*/
void exportMember(MemberInfoPageForm pageForm, HttpServletResponse response);
/**
* 导入会员数据处理
* @param file
*/
NutMap handlingMemberImport(TempFile file);
}
@@ -0,0 +1,115 @@
package com.budwk.app.zhgh.staffmanage.member.service;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.staffmanage.member.models.MemberListVerificationUser;
import com.budwk.app.zhgh.staffmanage.member.models.MemberVerificationBranchUnionFeedback;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberListVerificationPageForm;
import com.budwk.app.zhgh.staffmanage.member.param.MemberListVerificationParam;
import com.budwk.app.zhgh.staffmanage.member.param.MemberListVerificationProjectParam;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.util.NutMap;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberListVerificationService
* @Date 2024/8/5 16:27
* @注释 名单事项
*/
public interface MemberListVerificationService extends BaseService<MemberListVerificationUser> {
/**
* 获取核对事项的成员列表
* @param pageForm
* @return
*/
Pagination getUserPageData(MemberListVerificationPageForm pageForm);
/**
* 获取显示选择人员数据
* @param pageForm
* @return
*/
Pagination getShowSelectionUsers(MemberListVerificationPageForm pageForm);
/**
* 修改或新增名单核对事项
* @param param
*/
void insertOrUpdateVerificationProject(MemberListVerificationProjectParam param);
/**
* 修改选择人员
* @param param
*/
void modifySelection(MemberListVerificationParam param);
/**
* 获取分工会核对列表
* @param pageForm
* @return
*/
Pagination getBranchListVerificationUser(MemberListVerificationPageForm pageForm);
/**
* 校工会查看所有分工会列表数据,查看是否已提交,变更数量
* @param pageForm
* @return
*/
List<NutMap> getSchoolListVerificationUnion(MemberListVerificationPageForm pageForm);
/**
* 校工会根据分工会查看提交的变更人员
* @param pageForm
* @return
*/
Pagination getSchoolListVerificationUser(MemberListVerificationPageForm pageForm);
/**
* 分工会无误提交反馈;流程结束
* @param feedback
*/
void branchUnionCorrectSubmission(MemberVerificationBranchUnionFeedback feedback);
/**
* 分工会有误提交,执行流程之外的逻辑
* @param verificationProjectId
*/
void branchUnionIncorrectSubmission(String verificationProjectId);
/**
* 撤销变更
* @param userId
* @param verificationProjectId
* @param type 撤销的类型;分工会:branchUnion;校工会:schoolUnion
*/
void revokeChange(String userId, String verificationProjectId, String type);
/**
* 导出名单核对事项数据
* @param pageForm
* @param response
* @param isUnion 是否是分工会导出
*/
void exportVerificationExcel(MemberListVerificationPageForm pageForm, HttpServletResponse response, Boolean isUnion);
Sql getChangeTypeUserSql(MemberListVerificationPageForm pageForm);
List<ExcelExportEntity> buildExportEntities();
NutMap welfareUserInfo(String verificationProjectId);
}
@@ -0,0 +1,101 @@
package com.budwk.app.zhgh.staffmanage.member.service;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.sys.models.Sys_user_history;
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.util.NutMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* @version 1.0
* @Author zzr
* @nameMemberService
* @Date 2024/8/6 10:42
* @注释
*/
public interface MemberManageService extends BaseService<Sys_user> {
/**
* 多条件查询Sql
* @param pageForm
* @return
*/
Sql getSql(MemberManagePageForm pageForm, String queryType);
/**
* 获取会员、非会员、变更、未变更的人数
* @param pageForm
* @return
*/
NutMap getButtonNum(MemberManagePageForm pageForm);
/**
* 会员变更记录
* @param pageForm
* @return
*/
Pagination memberHistoryRecords(MemberManagePageForm pageForm);
/**
* 根据用户id获取会员变更信息(时间线),所有的变更记录
* @param userId 用户id
* @return List<NutMap>
*/
List<NutMap> getMemberChangeInfoByUserId(String userId);
/**
* 会员变更信息对比
* @param current 当前数据
* @param previous 上一条数据
* @return
*/
List<NutMap> compareChange(Sys_user_history current, Sys_user_history previous, Set<String> allowChangeFieldNames, Map<String, String> dictMap);
List<NutMap> compareMemberChangeInfo(Sys_user_history history);
/**
* 校验是否有变更
* @param record
*/
List<NutMap> compareMemberChangeInfo(MemberApplyRecord record);
/**
* 获取变更类型
* @param changeList 变更记录
* @return
*/
List<String> compareMemberChangeType(List<NutMap> changeList, MemberApplyRecord record);
/**
* 会员变更信息对比 并更新数据
* @param record
*/
void compareMemberChangeInfoAndUpdateUser(MemberApplyRecord record);
/**
* 比较两个对象,并记录变更的字段工具
*
* @param newMap 新数据
* @param sourceMap 原数据
* @param fieldsMap 变更字段
* @param changeList 变更集合
*/
void extractChange(NutMap newMap, NutMap sourceMap, String fieldName, Map<String, String> fieldsMap, List<NutMap> changeList);
/**
* 获取会员变更信息,memberApplyRecord表中名单核对事项人员与sys_user表中人员对比
* @param userId
* @param verificationProjectId
* @return
*/
List<NutMap> getLastTimeMemberChangeInfoByUserId(String userId, String verificationProjectId);
}
@@ -0,0 +1,22 @@
package com.budwk.app.zhgh.staffmanage.member.service;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberModelWorkerPageForm;
import org.nutz.dao.sql.Sql;
import javax.servlet.http.HttpServletResponse;
/**
* @version 1.0
* @Author zzr
* @nameMemberModelWorkerService
* @Date 2024/9/25 17:01
* @注释
*/
public interface MemberModelWorkerService extends BaseService<Sys_user> {
Sql getSql(MemberModelWorkerPageForm pageForm);
void doExport(MemberModelWorkerPageForm pageForm, HttpServletResponse response);
}
@@ -0,0 +1,18 @@
package com.budwk.app.zhgh.staffmanage.member.service;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm;
/**
* @version 1.0
* @Author zzr
* @nameMemberSchoolUnionManageService
* @Date 2024/8/13 15:33
* @注释
*/
public interface MemberSchoolUnionManageService extends BaseService<Sys_user> {
Pagination getPageData(MemberManagePageForm pageForm);
}
@@ -0,0 +1,85 @@
package com.budwk.app.zhgh.staffmanage.member.service;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberStatisticsPageForm;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.dao.Cnd;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.util.NutMap;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberStatisticsService
* @Date 2024/8/8 14:55
* @注释
*/
public interface MemberStatisticsService extends BaseService<Sys_user> {
/**
* 获取查询条件
* @param pageForm
* @return
*/
Cnd getCnd(MemberStatisticsPageForm pageForm);
/**
* 获取综合统计sql
* @param pageForm
* @return
*/
Sql getComprehensiveSql(MemberStatisticsPageForm pageForm);
/**
* 获取工会分析数据
* @param unionId 工会id
* @param currentYear 所属年度
* @return
*/
List<NutMap> getUnionAnalysisData(String unionId, Integer currentYear);
/**
* 获取单位分析数据
* @param unitId 单位id
* @param currentYear 所属年度
* @return
*/
List<NutMap> getUnitAnalysisData(String unitId, Integer currentYear);
/**
* 导出分析数据
* @param list
* @param queryType 工会还是单位
* @return
*/
Workbook exportAnalysisExcel(List<NutMap> list, String queryType);
/**
* 获取工会统计数据
* @param unionId 工会id
* @param currentYear
* @return
*/
List<NutMap> getUnionStatisticsData(String unionId, Integer currentYear);
/**
* 获取单位统计数据
* @param unitId 单位id
* @param currentYear
* @return
*/
List<NutMap> getUnitStatisticsData(String unitId, Integer currentYear);
/**
* 导出统计数据
* @param list
* @param queryType 工会还是单位
* @return
*/
Workbook exportStatisticsExcel(List<NutMap> list, String queryType);
}
@@ -0,0 +1,15 @@
package com.budwk.app.zhgh.staffmanage.member.service.impl;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
import com.budwk.app.zhgh.staffmanage.member.service.MemberApplyRecordService;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.IocBean;
@IocBean(args = {"refer:dao"})
public class MemberApplyRecordServiceImpl extends BaseServiceImpl<MemberApplyRecord> implements MemberApplyRecordService {
public MemberApplyRecordServiceImpl(Dao dao) {
super(dao);
}
}
@@ -0,0 +1,78 @@
package com.budwk.app.zhgh.staffmanage.member.service.impl;
import com.budwk.app.base.constant.BpmProcessConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm;
import com.budwk.app.zhgh.staffmanage.member.service.MemberBranchUnionManageService;
import com.budwk.app.zhgh.staffmanage.member.vo.MemberChangeAuditVo;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.loader.annotation.IocBean;
/**
* @version 1.0
* @Author zzr
* @nameMemberBranchUnionManageServiceImpl
* @Date 2024/8/13 11:22
* @注释 会员管理 分工会管理
*/
@IocBean(args = {"refer:dao"})
public class MemberBranchUnionManageServiceImpl extends BaseServiceImpl<Sys_user> implements MemberBranchUnionManageService {
public MemberBranchUnionManageServiceImpl(Dao dao) {
super(dao);
}
@Override
public Pagination getPageData(MemberManagePageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
record.id,
record.userId,
record.username,
record.loginname,
record.changeType,
record.changeTypes,
record.changeOrigin,
record.applyDateTime,
record.unitId,
IFNULL(record.unionId, vu.unionid) AS unionId,
vu.unionname AS unionName,
IFNULL(record.unitName, vu.unitname) AS unitName,
IFNULL(record.userState, vu.userState) AS userState,
IFNULL(record.preparedBy, vu.preparedBy) AS preparedBy,
IFNULL(record.personType, vu.personType) AS personType,
inst.id processInstanceId,
inst.processInstanceNodeId,
inst.processInstanceNodeCode,
inst.processInstanceNodeName,
inst.processInstanceTaskIds,
inst.processInstanceStatus,
task.id processInstanceTaskId,
task.taskStatus processInstanceTaskStatus,
COUNT( nt.id ) OVER ( PARTITION BY task.id ) > 0 AS nextTaskIsComplete
FROM
bpm_process_task task
INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId
INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId
INNER JOIN bpm_process_define define On inst.processDefineId = define.id
INNER JOIN member_apply_record record ON record.id = inst.processInstanceBusinessId
LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id AND nt.taskStatus = 'COMPLETE'
LEFT JOIN vw_user vu ON vu.id = record.userId
$condition
""");
Cnd cnd = Cnd.NEW();
MemberManagePageForm.buildAuditSearch(cnd, pageForm);
cnd.and("nd.nodeCode", "=", 10);
cnd.and("define.`code`", "=", BpmProcessConstant.MEMBER_BRANCH_UNION_CHANGE.name());
cnd.and("vu.unionId","=", SecurityUtil.getUnionId());
cnd.desc("record.applyDateTime");
sql.setCondition(cnd);
return listPageVO(pageForm, sql, MemberChangeAuditVo.class);
}
}
@@ -0,0 +1,428 @@
package com.budwk.app.zhgh.staffmanage.member.service.impl;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.base.utils.*;
import com.budwk.app.sys.models.Sys_role;
import com.budwk.app.sys.models.Sys_unit;
import com.budwk.app.sys.models.Sys_user_role;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.staffmanage.member.models.MemberHistory;
import com.budwk.app.zhgh.staffmanage.member.param.MemberInfoPageForm;
import com.budwk.app.zhgh.staffmanage.member.service.MemberInfoService;
import com.budwk.app.zhgh.staffmanage.member.vo.MemberImportVo;
import org.apache.poi.ss.formula.functions.T;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.aop.interceptor.ioc.TransAop;
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.Lang;
import org.nutz.lang.random.R;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.upload.TempFile;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.*;
import java.util.stream.Collectors;
/**
* @version 1.0
* @Author zzr
* @nameMemberInfoServiceImpl
* @Date 2024/8/8 10:15
* @注释
*/
@IocBean(args = {"refer:dao"})
public class MemberInfoServiceImpl extends BaseServiceImpl<Sys_user> implements MemberInfoService {
@Inject
private ManyAddOrRenewUtil manyAddOrRenewUtil;
public MemberInfoServiceImpl(Dao dao) {
super(dao);
}
@Override
public Sql getSql(MemberInfoPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
id,
loginname,
username,
sex,
birthday,
mobile,
personType,
userState,
preparedBy,
unionId,
unionName,
unitId,
unitName,
education,
nation,
postDoctoralJoinDate
FROM
vw_user
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("unionId", "=", pageForm.getUnionId());
cnd.andEX("unitId", "=", pageForm.getUnitId());
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("username", "like", "%" + pageForm.getSearchKeyword() + "%");
seg.or("loginname", "like", "%" + pageForm.getSearchKeyword() + "%");
cnd.and(seg);
}
if (StrUtil.isAllNotBlank(pageForm.getMemberSearchName(), pageForm.getMemberSearchKeyWord())) {
cnd.and(new SqlExpressionGroup().andLike(pageForm.getMemberSearchName(), pageForm.getMemberSearchKeyWord()));
}
if (Lang.isNotEmpty(pageForm.getPersonTypes())) {
cnd.andEX("personType", "in", pageForm.getPersonTypes());
}
if (Lang.isNotEmpty(pageForm.getPreparedBys())) {
cnd.andEX("preparedBy", "in", pageForm.getPreparedBys());
}
if (Lang.isNotEmpty(pageForm.getUserStates())) {
cnd.andEX("userState", "in", pageForm.getUserStates());
}
cnd.andEX("sex", "=", pageForm.getSex());
cnd.andEX("sex", "in", pageForm.getSexTypes());
cnd.and("member", "=", true);
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("unionId", "=", SecurityUtil.getUnionId());
}
if(StrUtil.isAllBlank(pageForm.getPageOrderName(),pageForm.getPageOrderBy())){
cnd.asc("unionCode").asc("unitCode");
}else{
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
}
sql.setCondition(cnd);
return sql;
}
@Override
public Sql getMemberHistorySql(MemberInfoPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
mh.id,
mh.loginname,
mh.username,
mh.sex,
mh.mobile,
mh.birthday,
mh.personType,
mh.userState,
mh.preparedBy,
u.unionId,
u.unionName,
u.unitName,
mh.member
FROM
`member_history` mh
INNER JOIN `vw_user` u ON u.id = mh.userId
$condition
""");
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("u.unionId","=", SecurityUtil.getUnionId());
} else {
cnd.andEX("u.unionId","=", pageForm.getUnionId());
}
cnd.andEX("mh.unitId", "=", pageForm.getUnitId());
cnd.andEX("mh.`year`", "=", pageForm.getYear());
cnd.andEX("mh.personType", "=", pageForm.getPersonType());
cnd.andEX("mh.preparedBy", "=", pageForm.getPreparedBy());
cnd.andEX("mh.userState", "=", pageForm.getUserState());
if (StrUtil.isAllNotBlank(pageForm.getMemberSearchName(), pageForm.getMemberSearchKeyWord())) {
cnd.and(new SqlExpressionGroup().andLike("u." + pageForm.getMemberSearchName(), pageForm.getMemberSearchKeyWord()));
}
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("mh.username", "like", "%" + pageForm.getSearchKeyword() + "%");
seg.or("mh.loginname", "like", "%" + pageForm.getSearchKeyword() + "%");
cnd.and(seg);
}
cnd.groupBy("u.id");
sql.setCondition(cnd);
return sql;
}
/**
* 备份会员
*
* @param year
*/
@Override
@Aop(TransAop.READ_COMMITTED)
public void archiveMember(Integer year) throws RuntimeException{
dao().clear(MemberHistory.class, Cnd.where("`year`", "=", year));
List<Sys_user> userList = dao().query(Sys_user.class, Cnd.where("member", "=", true));
List<MemberHistory> memberHistories = userList.stream()
.map(user -> {
MemberHistory memberHistory = new MemberHistory();
memberHistory.setUserId(user.getId());
memberHistory.setId(R.UU32());
memberHistory.setYear(year);
BeanUtil.copyProperties(user, memberHistory);
return memberHistory;
}).collect(Collectors.toList());
manyAddOrRenewUtil.asyncExecuteFastInsert(memberHistories, null);
}
@Override
public List<NutMap> historyExportByUnionData(Integer year) {
Sql sql = Sqls.create("""
SELECT
mh.id,
mh.loginname,
mh.username,
mh.sex,
mh.mobile,
mh.birthday,
mh.personType,
mh.preparedBy,
mh.userState,
u.unionId,
u.unionName,
u.unitName,
mh.member
FROM
`member_history` mh
INNER JOIN `vw_user` u ON u.id = mh.userId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("mh.`year`", "=", year);
cnd.groupBy("u.id");
sql.setCondition(cnd);
return listMap(sql);
}
@Override
public Workbook setHistoryExcelData(List<NutMap> list) {
List<ExcelExportEntity> exportEntities = new ArrayList<>();
exportEntities.add(new ExcelExportEntity("工号", "loginname", 20));
exportEntities.add(new ExcelExportEntity("姓名", "username", 20));
exportEntities.add(new ExcelExportEntity("性别", "sex", 20));
exportEntities.add(new ExcelExportEntity("联系电话", "mobile", 20));
// exportEntities.add(new ExcelExportEntity("身份证号", "idCard", 30));
exportEntities.add(new ExcelExportEntity("在职状态", "userState", 20));
exportEntities.add(new ExcelExportEntity("聘用方式", "preparedBy", 20));
exportEntities.add(new ExcelExportEntity("人员类型", "personType", 20));
exportEntities.add(new ExcelExportEntity("所属工会", "unionName", 20));
exportEntities.add(new ExcelExportEntity("所属单位", "unitName", 30));
// exportEntities.add(new ExcelExportEntity("来校年月", "comeSchoolDate", 30));
// exportEntities.add(new ExcelExportEntity("所在科室", "threeUnitName", 20));
// exportEntities.add(new ExcelExportEntity("工会小组", "unionGroupName", 30));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
return ExcelExportUtil.exportExcel(exportParams, exportEntities, list);
}
@Override
public void exportMember(MemberInfoPageForm pageForm, HttpServletResponse response) {
Sql sql = getSql(pageForm);
List<NutMap> list = listMap(sql);
Workbook workbook = setHistoryExcelData(list);
CommonDownloadUtil.download("会员档案表.xlsx", workbook, response);
}
@Aop(TransAop.READ_COMMITTED)
@Override
public NutMap handlingMemberImport(TempFile file) {
List<T> ts = EasyExcelUtil.syncReadModel(file.getFile(), MemberImportVo.class, 0, 1);
List<MemberImportVo> list = JSONUtil.parseArray(JSONUtil.toJsonStr(ts)).toList(MemberImportVo.class);
// 获取系统用户
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(),RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("unionId","=",SecurityUtil.getUnionId());
}
List<Sys_user> dataUserList = dao().query(Sys_user.class, cnd);
Map<String, Sys_user> userMap = dataUserList.stream().collect(Collectors.toMap(Sys_user::getLoginname, v -> v));
List<Sys_unit> unitList = dao().query(Sys_unit.class, Cnd.where("unitLevel", "is not", null).and("unitLevel", "!=", "").groupBy("name"));
//单位名称,单位Id
Map<String, String> unitNameLevelTwoMap = unitList.stream().filter(v -> v.getUnitLevel() == 2).collect(Collectors.toMap(Sys_unit::getName, Sys_unit::getId));
//单位编号,单位Id
Map<String, String> unitCodeMap = unitList.stream().collect(Collectors.toMap(Sys_unit::getUnitcode, Sys_unit::getId));
//系统中没有,新增
List<String> needInsertUser = new ArrayList<>();
List<Sys_user> insertOrUpdateUserList = new ArrayList<>();
//返回错误记录
List<MemberImportVo> errorInfos = new ArrayList<>();
for (MemberImportVo v : list) {
if (StrUtil.isNotBlank(v.getLoginname())) {
v.setLoginname(v.getLoginname().trim());
} else {
v.setErrorInfo("工号不能为空!");
continue;
}
String unitId = getUnitId(unitCodeMap, unitNameLevelTwoMap, v.getUnitCode(), v.getUnitName());
if (StrUtil.isBlank(unitId)) {
v.setErrorInfo("单位编号或单位名称有误,请确保其准确!");
errorInfos.add(v);
continue;
}
// Map<String, String> unitNameLevelThreeMap = unitList.stream().filter(item -> item.getParentId().equals(unitId) && item.getUnitLevel() == 3).collect(Collectors.toMap(Sys_unit::getName, Sys_unit::getId));
// // 获取三级单位ID
// String threeUnitId = getUnitId(unitCodeMap, unitNameLevelThreeMap, v.getThreeUnitCode(), v.getThreeUnitName());
// if (threeUnitId == null) {
// String threeUnitNames = unitList.stream().filter(x -> x.getParentId().equals(unitId)).map(Sys_unit::getName).collect(Collectors.joining(";"));
// v.setErrorInfo("科室编号或科室名称有误,请确保其准确!【" + threeUnitNames + "】");
// errorInfos.add(v);
// continue;
// }
if (StrUtil.isBlank(v.getIsMember())) {
v.setErrorInfo("是否会员不能为空,请填写是或否");
errorInfos.add(v);
continue;
}
//判断是否在系统中
Sys_user user = userMap.get(v.getLoginname());
//初始化用户
if (user == null) {
user = new Sys_user();
//重新设置
user.setId(R.UU32());
user.setSalt(R.UU32());
user.setPassword(PwdUtil.getPassword(PwdUtil.generate(12),user.getSalt()));
user.setLoginCount(0);
needInsertUser.add(user.getLoginname());
}
//设置excel列的数据
user.setUsername(v.getUsername());
if (StrUtil.isNotBlank(v.getSex())) {
user.setSex(v.getSex());
}
if (StrUtil.isNotBlank(v.getMobile())) {
user.setMobile(v.getMobile());
}
if (StrUtil.isNotBlank(v.getIdCard())) {
user.setIdCard(v.getIdCard());
}
if (StrUtil.isNotBlank(v.getUserState())) {
user.setUserState(v.getUserState());
}
if (StrUtil.isNotBlank(v.getPersonType())) {
user.setPersonType(v.getPersonType());
}
user.setUnitId(unitId);
// user.setThreeUnitId(threeUnitId);
user.setMember("".equals(v.getIsMember()));
insertOrUpdateUserList.add(user);
}
if (Lang.isNotEmpty(insertOrUpdateUserList)) {
manyAddOrRenewUtil.asyncExecuteInsertOrUpdate(insertOrUpdateUserList,200);
Sys_role memberRole = dao().fetch(Sys_role.class, Cnd.where("`code`", "=", RoleConstant.MEMBER.name()));
Sys_role publicRole = dao().fetch(Sys_role.class, Cnd.where("`code`", "=", RoleConstant.PUBLIC.name()));
dao().clear(Sys_user_role.class, Cnd.where("roleId","=", memberRole.getId()));
//新增用户赋值普通角色
if (Lang.isNotEmpty(needInsertUser)) {
Sql newUserSql = Sqls.create("select id from sys_user where loginname in (@needInsertUser)");
newUserSql.setParam("needInsertUser", needInsertUser);
newUserSql.setCallback(Sqls.callback.maps());
dao().execute(newUserSql);
List<NutMap> newUserSqlList = newUserSql.getList(NutMap.class);
List<String> newUserIds = newUserSqlList.stream().map(user -> user.getString("id")).collect(Collectors.toList());
List<Sys_user_role> newUserRoles = newUserIds.stream().map(userId -> {
Sys_user_role sysUserRole = new Sys_user_role();
sysUserRole.setUserId(userId);
sysUserRole.setRoleId(publicRole.getId());
return sysUserRole;
}).collect(Collectors.toList());
manyAddOrRenewUtil.asyncExecuteInsert(newUserRoles,200);
}
//根据用户表的member添加会员角色
Sql memberUserSql = Sqls.create("select id from sys_user where member = 1");
memberUserSql.setCallback(Sqls.callback.maps());
dao().execute(memberUserSql);
List<NutMap> memberUserSqlList = memberUserSql.getList(NutMap.class);
List<String> memberUserIds = memberUserSqlList.stream().map(user -> user.getString("id")).toList();
List<Sys_user_role> memberUserRoles = memberUserIds.stream().map(userId -> {
Sys_user_role sysUserRole = new Sys_user_role();
sysUserRole.setUserId(userId);
sysUserRole.setRoleId(memberRole.getId());
return sysUserRole;
}).toList();
manyAddOrRenewUtil.asyncExecuteInsert(memberUserRoles,200);
}
//如果有错误数据就返回给前端
if (Lang.isNotEmpty(errorInfos)) {
NutMap nutMap = NutMap.NEW();
nutMap.setv("totalCount", list.size());
nutMap.setv("successCount", Math.max(list.size() - errorInfos.size(), 0));
nutMap.setv("errorCount", errorInfos.size());
nutMap.setv("errorList", errorInfos.stream().map(v -> {
return NutMap.NEW().addv("工号", v.getLoginname()).addv("姓名", v.getUsername()).addv("错误原因", v.getErrorInfo());
}).collect(Collectors.toList()));
return nutMap;
}
return null;
}
public String getUnitId(Map<String, String> codeMap, Map<String, String> nameMap, String code, String name) {
if (StrUtil.isNotBlank(code) && StrUtil.isNotBlank(name) || (StrUtil.isNotBlank(code) && StrUtil.isBlank(name))) {
return codeMap.get(code);
} else if (StrUtil.isBlank(code) && StrUtil.isNotBlank(name)) {
return nameMap.get(name);
} else {
return null;
}
}
}
@@ -0,0 +1,588 @@
package com.budwk.app.zhgh.staffmanage.member.service.impl;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import com.budwk.app.base.exception.BaseException;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.base.utils.CommonDownloadUtil;
import com.budwk.app.base.utils.ManyAddOrRenewUtil;
import com.budwk.app.sys.models.*;
import com.budwk.app.sys.services.SysDictService;
import com.budwk.app.sys.views.View_user;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeType;
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
import com.budwk.app.zhgh.staffmanage.member.models.MemberListVerificationProject;
import com.budwk.app.zhgh.staffmanage.member.models.MemberListVerificationUser;
import com.budwk.app.zhgh.staffmanage.member.models.MemberVerificationBranchUnionFeedback;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberListVerificationPageForm;
import com.budwk.app.zhgh.staffmanage.member.param.MemberListVerificationParam;
import com.budwk.app.zhgh.staffmanage.member.param.MemberListVerificationProjectParam;
import com.budwk.app.zhgh.staffmanage.member.service.MemberListVerificationService;
import org.apache.poi.ss.usermodel.Workbook;
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.dao.util.cri.Static;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.lang.random.R;
import org.nutz.lang.util.NutMap;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @version 1.0
* @Author zzr
* @nameMemberListVerificationServiceImpl
* @Date 2024/8/5 16:31
* @注释
*/
@IocBean(args = {"refer:dao"})
public class MemberListVerificationServiceImpl extends BaseServiceImpl<MemberListVerificationUser> implements MemberListVerificationService {
public MemberListVerificationServiceImpl(Dao dao) {
super(dao);
}
@Inject
private SysDictService sysDictService;
@Inject
private ManyAddOrRenewUtil manyAddOrRenewUtil;
@Override
public Pagination getUserPageData(MemberListVerificationPageForm pageForm) {
MemberListVerificationProject project = dao().fetch(MemberListVerificationProject.class, pageForm.getVerificationProjectId());
List<Sys_dict> dictList = sysDictService.getSubListByCode("MEMBER_ALLOW_CHANGES_FIELD");
//如果变更的字段中没有包含工会名称或单位名称,那就手动添加
Set<String> dictCodes = dictList.stream().map(v->{
return "u." + v.getCode();
}).collect(Collectors.toSet());
dictCodes.add("u.id");
dictCodes.add("u.loginname");
if (dictCodes.stream().anyMatch(v -> !List.of("unionName", "unitName").contains(v))) {
dictCodes.add("u.unionName");
dictCodes.add("u.unitName");
}
String string = String.join(",", dictCodes);
Sql sql = Sqls.create("""
SELECT
$selectColumns
FROM
vw_user u
LEFT JOIN welfare_list wl ON u.id = wl.userId
$condition
""");
sql.setVar("selectColumns", string);
Cnd cnd = Cnd.NEW();
if (StrUtil.isNotBlank(pageForm.getUnionId())) {
cnd.andEX("u.unionId", "=", pageForm.getUnionId());
} else {
cnd.and("u.unionId", "in", project.getUnionIds());
}
MemberListVerificationPageForm.buildSearchBySingleTable(cnd, pageForm);
if (StrUtil.isNotBlank(pageForm.getWelfareProjectId())) {
if (pageForm.getIsGrantWelfare() != null) {
if (pageForm.getIsGrantWelfare() == 1) {
cnd.and("wl.projectId", "=", pageForm.getWelfareProjectId());
} else {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("wl.projectId", "is", null);
seg.or("wl.projectId", "=", "");
cnd.and(seg);
}
} else {
cnd.and("wl.projectId", "=", pageForm.getWelfareProjectId());
}
}
if (ObjectUtil.isAllNotEmpty(pageForm.getRetireStartDate(), pageForm.getRetireEndDate())) {
cnd.and("u.retireDate", ">=", pageForm.getRetireStartDate());
cnd.and("u.retireDate", "<=", pageForm.getRetireEndDate());
}
if (Lang.isNotEmpty(pageForm.getQueryLoginNames())) {
cnd.and("u.loginname", "in", pageForm.getQueryLoginNames());
}
cnd.and("u.id", "not in", "select userId from member_list_verification_user where verificationProjectId = '%s'".formatted(pageForm.getVerificationProjectId()));
cnd.asc("u.unionCode");
cnd.asc("u.id");
// cnd.andEX("u.verificationProjectId","=",pageForm.getVerificationProjectId());
sql.setCondition(cnd);
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
/**
* 获取显示选择人员数据
*
* @param pageForm
* @return
*/
@Override
public Pagination getShowSelectionUsers(MemberListVerificationPageForm pageForm) {
Sql sql = Sqls.create("""
select u.id,u.userId,u.username,u.loginname,u.sex,u.mobile,u.unitName,u.unionName,u.userState,u.personType,u.preparedBy
from member_list_verification_user u $condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("u.verificationProjectId", "=", pageForm.getVerificationProjectId());
cnd.desc("u.isChanged");
cnd.asc("u.unionName");
MemberListVerificationPageForm.buildSearchBySingleTable(cnd, pageForm);
cnd.andEX("u.unionId", "=", pageForm.getUnionId());
if (StrUtil.isNotBlank(pageForm.getSchoolUnionChecked())) {
cnd.and("u.schoolUnionChecked", "=", "1".equals(pageForm.getSchoolUnionChecked()) ? 1 : 0);
}
cnd.desc("u.id");
sql.setCondition(cnd);
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
/**
* 修改或新增名单核对事项
*
* @param param
*/
@Override
public void insertOrUpdateVerificationProject(MemberListVerificationProjectParam param) {
MemberListVerificationProject project = new MemberListVerificationProject();
BeanUtil.copyProperties(param, project);
if (StrUtil.isBlank(param.getId())) {
//如果是新增,新增项目后,再插入代分工会反馈表
dao().insert(project);
} else {
//校验该项目是否是开启状态
int count = dao().count(MemberListVerificationProject.class, Cnd.where("isEnabled", "=", true).and("id","=",param.getId()));
if (count > 0) {
throw new BaseException("当前核对事项为开启状态,请将状态设为关闭后再进行修改");
}
dao().updateIgnoreNull(project);
//unionIds会随时变化, 先删除再插入
// dao().clear(MemberVerificationBranchUnionFeedback.class, Cnd.where("verificationProjectId", "=", param.getId()));
}
List<MemberVerificationBranchUnionFeedback> oldBranchUnionFeedbacks = dao().query(MemberVerificationBranchUnionFeedback.class, Cnd.where("verificationProjectId", "=", param.getId()));
Map<String, MemberVerificationBranchUnionFeedback> oldBranchUnionFeedbackMap = oldBranchUnionFeedbacks.stream().collect(Collectors.toMap(v -> v.getUnionId(), v -> v));
//需要核对的分工会id,这些工会会随时更改,修改项目时先删除再新增
List<String> unionIds = project.getUnionIds();
List<Sys_union> unionList = dao().query(Sys_union.class, Cnd.where("id", "in", unionIds));
List<MemberVerificationBranchUnionFeedback> feedbackList = unionList.stream().map(v -> {
MemberVerificationBranchUnionFeedback feedback = new MemberVerificationBranchUnionFeedback();
if (oldBranchUnionFeedbackMap.containsKey(v.getId())) {
MemberVerificationBranchUnionFeedback oldBranchUnionFeedback = oldBranchUnionFeedbackMap.get(v.getId());
BeanUtil.copyProperties(oldBranchUnionFeedback,feedback);
}else{
feedback.setId(R.UU32());
feedback.setStatus("待分工会核对");
}
feedback.setUnionId(v.getId());
feedback.setUnionCode(v.getUnionCode());
feedback.setUnionName(v.getName());
feedback.setVerificationProjectId(project.getId());
return feedback;
}).toList();
dao().insertOrUpdate(feedbackList);
}
/**
* 修改选择人员
*
* @param param
*/
@Aop(TransAop.READ_COMMITTED)
@Override
public void modifySelection(MemberListVerificationParam param) {
String verificationProjectId = param.getVerificationProjectId();
// 设置新的核对字段
dao().update(MemberListVerificationProject.class, Chain.make("renewFields", param.getRenewFields()),
Cnd.where("id", "=", verificationProjectId));
// 先清空再删除
// dao().clear(MemberListVerificationUser.class, Cnd.where("verificationProjectId", "=", param.getVerificationProjectId()));
List<View_user> userList = dao().query(View_user.class, Cnd.where("id", "in", param.getSelectUserIds()));
List<MemberListVerificationUser> list = BeanUtil.copyToList(userList, MemberListVerificationUser.class);
list.forEach(v -> {
v.setUserId(v.getId());
v.setId(R.UU32());
v.setVerificationProjectId(verificationProjectId);
});
manyAddOrRenewUtil.asyncExecuteFastInsert(list, null);
}
/**
* 获取分工会核对列表
*
* @param pageForm
* @return
*/
@Override
public Pagination getBranchListVerificationUser(MemberListVerificationPageForm pageForm) {
Sql sql = Sqls.create("select u.* from member_list_verification_user u $condition");
Cnd cnd = Cnd.NEW();
MemberListVerificationPageForm.buildSearchBySingleTable(cnd, pageForm);
// if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("u.unionId","=",SecurityUtil.getUnionId());
// }
cnd.and("u.verificationProjectId", "=", pageForm.getVerificationProjectId());
cnd.desc("u.currentState");
sql.setCondition(cnd);
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
/**
* 获取各分工会的核对列表
*
* @param pageForm
* @return
*/
@Override
public List<NutMap> getSchoolListVerificationUnion(MemberListVerificationPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
feed.*,
SUM(CASE WHEN u.isChanged = 1 THEN 1 ELSE 0 END) AS changeNum,
COUNT(u.id) AS allNum
FROM
member_verification_branch_union_feedback feed
LEFT JOIN member_apply_record record ON feed.unionId = record.unionId AND record.verificationProjectId = @verificationProjectId
LEFT JOIN member_list_verification_user u ON feed.unionId = u.unionId AND u.verificationProjectId = @verificationProjectId
$condition
""");
sql.setParam("verificationProjectId", pageForm.getVerificationProjectId());
Cnd cnd = Cnd.NEW();
cnd.andEX("feed.unionId", "=", pageForm.getUnionId());
cnd.and("feed.verificationProjectId", "=", pageForm.getVerificationProjectId());
// cnd.and("feed.branchUnionSubmit", "=", true);
cnd.asc("feed.unionCode");
cnd.groupBy("feed.unionId");
sql.setCondition(cnd);
List<NutMap> list = listMap(sql);
Sql recordSql = Sqls.create("""
SELECT
lu.unionId,
IF( u.userState = lu.userState, FALSE, TRUE ) AS userStateChange,
record.changeType,
u.member,
u.welfareMember
FROM
member_list_verification_user lu
LEFT JOIN member_apply_record record ON lu.userId = record.userId and record.verificationProjectId = @projectId
LEFT JOIN sys_user u ON u.id = lu.userId
WHERE
lu.verificationProjectId = @projectId AND lu.unionId is not null
""").setParam("projectId", pageForm.getVerificationProjectId());
List<NutMap> recordList = listMap(recordSql);
Map<String, List<NutMap>> unionIdMap = recordList.stream().collect(Collectors.groupingBy(v-> v.getString("unionId")));
list.forEach(v -> {
if (unionIdMap.containsKey(v.getString("unionId"))){
List<NutMap> mapList = unionIdMap.get(v.getString("unionId"));
long userStateChange = mapList.stream().filter(item -> item.getBoolean("userStateChange")).count();
v.put("userStateNum", userStateChange);
v.put("restoreNum", mapList.stream().filter(item -> StrUtil.isNotBlank(item.getString("changeType")) && item.getString("changeType").equals(MemberChangeType.RESTORE.name())).count());
v.put("withdrawalNum", mapList.stream().filter(item -> StrUtil.isNotBlank(item.getString("changeType")) && item.getString("changeType").equals(MemberChangeType.WITHDRAWAL.name())).count());
v.put("lastMemberNum", mapList.stream().filter(item -> item.getBoolean("member")).count());
v.put("lastWelfareMemberNum", mapList.stream().filter(item -> item.getBoolean("welfareMember")).count());
}
});
return list;
}
@Override
public Pagination getSchoolListVerificationUser(MemberListVerificationPageForm pageForm) {
Sql sql = Sqls.create("""
select id,userId,username,loginname,sex,mobile,unitName,unionName,userState,preparedBy,
personType,branchUnionChecked,schoolUnionChecked,isChanged,currentState
from member_list_verification_user u $condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("u.verificationProjectId", "=", pageForm.getVerificationProjectId());
MemberListVerificationPageForm.buildSearchBySingleTable(cnd, pageForm);
cnd.and("u.unionId", "=", pageForm.getUnionId());
if (StrUtil.isNotBlank(pageForm.getSchoolUnionChecked())) {
if ("1".equals(pageForm.getSchoolUnionChecked())) {
cnd.and("u.schoolUnionChecked", "=", true);
} else if ("2".equals(pageForm.getSchoolUnionChecked())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("u.schoolUnionChecked", "=", false);
seg.or("u.schoolUnionChecked", "is", null);
cnd.and(seg);
}
}
// cnd.and("u.branchUnionChecked","=",true);
cnd.desc("u.isChanged");
cnd.asc("u.unionName");
cnd.desc("u.id");
sql.setCondition(cnd);
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
/**
* 分工会无误提交反馈;流程结束
*
* @param feedback
*/
@Override
@Aop(TransAop.READ_COMMITTED)
public void branchUnionCorrectSubmission(MemberVerificationBranchUnionFeedback feedback) {
MemberVerificationBranchUnionFeedback fetch = dao().fetch(MemberVerificationBranchUnionFeedback.class,
Cnd.where("verificationProjectId", "=", feedback.getVerificationProjectId())
.and("unionId", "=", SecurityUtil.getUnionId()));
fetch.setFeedbackNum(feedback.getFeedbackNum());
fetch.setFeedbackFiles(feedback.getFeedbackFiles());
fetch.setFeedbackUserId(SecurityUtil.getUserId());
fetch.setFeedbackUserName(SecurityUtil.getUserUsername());
fetch.setFeedbackLoginName(SecurityUtil.getUserLoginname());
fetch.setIsFeedback(true);
fetch.setBranchUnionSubmit(true);
fetch.setBranchUnionSubmitNum(fetch.getBranchUnionSubmitNum() + 1);
dao().updateIgnoreNull(fetch);
Chain chain = Chain.make("branchUnionChecked", true);
dao().update(MemberListVerificationUser.class, chain, Cnd.where("verificationProjectId","=", feedback.getVerificationProjectId())
.and("unionId","=",SecurityUtil.getUnionId()));
}
/**
* 分工会有误提交
* @param verificationProjectId
*/
@Override
@Aop(TransAop.READ_COMMITTED)
public void branchUnionIncorrectSubmission(String verificationProjectId) {
MemberVerificationBranchUnionFeedback fetch = dao().fetch(MemberVerificationBranchUnionFeedback.class,
Cnd.where("verificationProjectId", "=", verificationProjectId)
.and("unionId", "=", SecurityUtil.getUnionId()));
fetch.setBranchUnionSubmit(true);
fetch.setStatus("有误提交,待校工会审核");
fetch.setBranchUnionSubmitNum(fetch.getBranchUnionSubmitNum() + 1);
fetch.setIsFeedback(false);
dao().updateIgnoreNull(fetch);
Chain chain = Chain.make("branchUnionChecked", true);
chain.add("schoolUnionChecked", false);
dao().update(MemberListVerificationUser.class, chain, Cnd.where("verificationProjectId","=", verificationProjectId)
.and("unionId","=",SecurityUtil.getUnionId()));
}
@Override
@Aop(TransAop.READ_COMMITTED)
public void revokeChange(String userId, String verificationProjectId, String type) {
MemberApplyRecord record = dao().fetch(MemberApplyRecord.class, Cnd.where("userId", "=", userId)
.and("verificationProjectId", "=", verificationProjectId));
if (record != null) {
dao().delete(MemberApplyRecord.class, record.getId());
Sys_user_history history = dao().fetch(Sys_user_history.class, Cnd.where("recordId", "=", record.getId()));
if (Lang.isNotEmpty(history)) {
Sys_user user = BeanUtil.copyProperties(history, Sys_user.class);
user.setId(record.getUserId());
dao().update(user);
dao().clear(Sys_user_change_info.class, Cnd.where("userHistoryId", "=", history.getId()));
}
}
// dao().clear(MemberApplyRecord.class, Cnd.where("userId","=",userId)
// .and("verificationProjectId","=",verificationProjectId));
if ("branchUnion".equals(type)) {
Chain chain = Chain.make("branchUnionChecked",false);
chain.add("isChanged",false);
dao().update(MemberListVerificationUser.class, chain, Cnd.where("userId","=",userId)
.and("verificationProjectId","=",verificationProjectId));
} else if ("schoolUnion".equals(type)) {
Chain chain = Chain.make("schoolUnion",false);
dao().update(MemberListVerificationUser.class, chain, Cnd.where("userId","=",userId)
.and("verificationProjectId","=",verificationProjectId));
}
}
/**
* 导出名单核对数据
* @param pageForm
* @param response
* @param isUnion 是否是分工会导出
*/
@Override
public void exportVerificationExcel(MemberListVerificationPageForm pageForm, HttpServletResponse response, Boolean isUnion) {
Sql sql = Sqls.create("""
SELECT
u.username,
u.loginname,
u.unitName,
u.unionName,
u.sex,
u.mobile,
u.userState,
u.preparedBy,
u.personType,
IF
( u.member = 1, '是', '否' ) AS member,
IF
( u.welfareMember = 1, '是', '否' ) AS welfareMember,
info.changeInfosStr
FROM
`member_list_verification_user` AS list
LEFT JOIN `vw_user` u ON list.userId = u.id
LEFT JOIN `member_apply_record` record ON record.verificationProjectId = list.verificationProjectId AND record.userId = list.userId
LEFT JOIN sys_user_history history ON history.recordId = record.id
LEFT JOIN sys_user_change_info info ON info.userHistoryId = history.id
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("list.verificationProjectId", "=", pageForm.getVerificationProjectId());
if (isUnion) {
cnd.and("u.unionId", "=", SecurityUtil.getUnionId());
} else {
cnd.andEX("u.unionId", "=", pageForm.getUnionId());
}
MemberListVerificationPageForm.buildSearchBySingleTable(cnd,pageForm);
cnd.desc("info.changeTime");
cnd.asc("u.unitId");
sql.setCondition(cnd);
List<NutMap> list = listMap(sql);
List<ExcelExportEntity> exportEntities = buildExportEntities();
exportEntities.add(new ExcelExportEntity("变更信息", "changeInfosStr", 40));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, list);
CommonDownloadUtil.download("名单事项核对记录.xlsx", workbook, response);
}
@Override
public Sql getChangeTypeUserSql(MemberListVerificationPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
u.loginname,
u.username,
u.sex,
u.mobile,
u.userState,
u.preparedBy,
u.personType,
lu.unionName,
$columns
lu.unitName,
IF
( u.member = 1, '是', '否' ) AS member,
IF
( u.welfareMember = 1, '是', '否' ) AS welfareMember
FROM
member_list_verification_user lu
LEFT JOIN member_apply_record record ON record.userId = lu.userId and record.verificationProjectId = @projectId
LEFT JOIN sys_user u ON u.id = lu.userId
$condition
""").setParam("projectId", pageForm.getVerificationProjectId());
Cnd cnd = Cnd.NEW();
MemberListVerificationPageForm.buildSearchBySingleTable(cnd, pageForm);
cnd.andEX("lu.unionId","=",pageForm.getUnionId());
cnd.and("lu.verificationProjectId", "=", pageForm.getVerificationProjectId());
switch (pageForm.getChangeType()) {
case "userState" -> {
cnd.and(new Static("u.userState != lu.userState"));
sql.setVar("columns", "u.userState AS newUserState, lu.userState AS oldUserState,");
}
case "restore" -> cnd.and("record.changeType", "=", MemberChangeType.RESTORE.name());
case "withdrawal" -> cnd.and("record.changeType", "=", MemberChangeType.WITHDRAWAL.name());
case "member" -> cnd.and("u.member", "=", true);
case "welfareMember" -> cnd.and("u.welfareMember", "=", true);
}
sql.setCondition(cnd);
return sql;
}
@Override
public List<ExcelExportEntity> buildExportEntities() {
List<ExcelExportEntity> exportEntities = new ArrayList<>();
exportEntities.add(new ExcelExportEntity("工号", "loginname", 20));
exportEntities.add(new ExcelExportEntity("姓名", "username", 20));
exportEntities.add(new ExcelExportEntity("性别", "sex", 20));
exportEntities.add(new ExcelExportEntity("联系电话", "mobile", 20));
exportEntities.add(new ExcelExportEntity("所属工会", "unionName", 20));
exportEntities.add(new ExcelExportEntity("所属单位", "unitName", 30));
exportEntities.add(new ExcelExportEntity("在职状态", "userState", 20));
exportEntities.add(new ExcelExportEntity("人事编制", "preparedBy", 20));
exportEntities.add(new ExcelExportEntity("人员类型", "personType", 20));
exportEntities.add(new ExcelExportEntity("是否会员", "member", 15));
exportEntities.add(new ExcelExportEntity("是否福利会员", "welfareMember", 15));
return exportEntities;
}
@Override
public NutMap welfareUserInfo(String verificationProjectId) {
List<MemberVerificationBranchUnionFeedback> list = dao().query(MemberVerificationBranchUnionFeedback.class, Cnd.where("verificationProjectId", "=", verificationProjectId));
MemberVerificationBranchUnionFeedback branchUnionFeedback = list.stream().filter(v -> v.getWelfareJson() != null).findFirst().orElse(new MemberVerificationBranchUnionFeedback());
if (Lang.isNotEmpty(branchUnionFeedback)) {
// 生成表头数据
List<JSONObject> welfareJson = branchUnionFeedback.getWelfareJson();
List<String> stringList = new ArrayList<>(welfareJson.stream().map(v -> v.getStr("welfareName")).toList());
List<NutMap> mapList = new ArrayList<>();
// 表结构
list.forEach(v-> {
NutMap nutMap = NutMap.NEW();
nutMap.put("工会名称", v.getUnionName());
List<JSONObject> json = v.getWelfareJson();
if (Lang.isNotEmpty(json)) {
stringList.forEach(welfareName-> {
JSONObject jsonObject = json.stream().filter(w -> w.getStr("welfareName").equals(welfareName)).findFirst().orElse(new JSONObject());
if (Lang.isNotEmpty(jsonObject)) {
nutMap.put(welfareName, jsonObject.getInt("chooseNumber"));
} else {
nutMap.put(welfareName, 0);
}
});
} else {
stringList.forEach(welfareName-> {
nutMap.put(welfareName, 0);
});
}
mapList.add(nutMap);
});
stringList.add(0, "工会名称");
NutMap map = NutMap.NEW();
map.put("tableData", mapList);
map.put("tableHeader", stringList);
return map;
} else {
return null;
}
}
}
@@ -0,0 +1,530 @@
package com.budwk.app.zhgh.staffmanage.member.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HtmlUtil;
import cn.hutool.json.JSONUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.exception.BaseException;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.sys.models.*;
import com.budwk.app.sys.services.SysDictService;
import com.budwk.app.sys.views.View_user;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeOrigin;
import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeType;
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm;
import com.budwk.app.zhgh.staffmanage.member.service.MemberManageService;
import lombok.extern.slf4j.Slf4j;
import org.json.JSONArray;
import org.json.JSONObject;
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.Daos;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.dao.util.cri.Static;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.json.Json;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;
/**
* @version 1.0
* @Author zzr
* @nameMemberServiceImpl
* @Date 2024/8/6 10:43
* @注释
*/
@IocBean(args = {"refer:dao"})
@Slf4j
public class MemberManageServiceImpl extends BaseServiceImpl<Sys_user> implements MemberManageService {
@Inject
private SysDictService sysDictService;
public MemberManageServiceImpl(Dao dao) {
super(dao);
}
@Override
public Sql getSql(MemberManagePageForm pageForm, String queryType) {
Sql sql = Sqls.create("""
SELECT
u.id,
u.sex,
u.loginname,
u.username,
u.mobile,
u.unitId,
u.unitName,
u.unionId,
u.unionName,
u.birthday,
u.manyUnit,
u.member,
u.userState,
u.preparedBy,
u.personType,
u.welfareMember,
u.isModelWorker,
u.wantJoinLoveMutualAidAssociation,
his.id hisId,
his.changeTypes,
his.changeTime
FROM
vw_user u
LEFT JOIN sys_user_history his ON his.loginname = u.loginname
$condition
""");
Cnd cnd = Cnd.NEW();
MemberManagePageForm.buildSearch(cnd, pageForm);
cnd.desc("his.changeTime");
cnd.groupBy("u.id");
if ("branchUnion".equals(queryType)) {
cnd.and("u.unionId", "=", SecurityUtil.getUnionId());
}
sql.setCondition(cnd);
return sql;
}
@Override
public NutMap getButtonNum(MemberManagePageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
(sum( CASE WHEN his.changeTypes IS NOT NULL THEN 1 ELSE 0 END )) as 'changeNum',
(sum( CASE WHEN his.changeTypes IS NULL THEN 1 ELSE 0 END )) as 'notChangeNum',
count(u.id) as 'userSumNum',
(sum( CASE WHEN u.member = 1 THEN 1 ELSE 0 END )) as 'memberNum',
(sum( CASE WHEN u.member != 1 THEN 1 ELSE 0 END )) as 'notMemberNum'
FROM
vw_user u
LEFT JOIN sys_user_history his ON his.loginname = u.loginname
$condition
""");
Cnd cnd = Cnd.NEW();
MemberManagePageForm.buildSearch(cnd,pageForm);
sql.setCondition(cnd);
cnd.desc("his.changeTime");
cnd.groupBy("u.id");
return (NutMap) Daos.query(dao(), sql.toString(), Sqls.callback.map());
}
@Override
public Pagination memberHistoryRecords(MemberManagePageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
his.id,
his.changeTime,
his.loginname,
his.username,
his.mobile,
his.birthday,
his.userState,
his.preparedBy,
his.personType,
his.sex,
his.changeTypes,
his.changeOrigin,
his.changeReason,
his.remark,
gh.`name` AS unionName,
unit.`name` AS unitName,
u.id AS userId
FROM
`sys_user_history` his
LEFT JOIN sys_user u ON u.loginname = his.loginname
LEFT JOIN sys_unit unit ON unit.id = u.unitid
LEFT JOIN sys_union gh ON gh.id = unit.unionId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("gh.id", "=", pageForm.getUnionId());
cnd.andEX("his.unitId", "=", pageForm.getUnitId());
cnd.andEX("his.personType", "=", pageForm.getPersonType());
cnd.andEX("his.userState", "=", pageForm.getUserState());
if (StrUtil.isNotBlank(pageForm.getChangeType())){
cnd.and(new Static("JSON_CONTAINS(his.changeTypes, JSON_ARRAY('%s'), '$')".formatted(pageForm.getChangeType())));
}
if (Lang.isNotEmpty(pageForm.getChangeTypes())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
for (String type : pageForm.getChangeTypes()) {
seg.or(new Static("JSON_CONTAINS(his.changeTypes, JSON_ARRAY('%s'), '$')".formatted(type)));
}
cnd.and(seg);
}
if (Lang.isNotEmpty(pageForm.getChangeOrigins())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
for (Integer c : pageForm.getChangeOrigins()) {
seg.orEquals("his.changeOrigin", c);
}
cnd.and(seg);
}
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("his.loginname", "like", "%" + pageForm.getSearchKeyword() + "%");
seg.or("his.username", "like", "%" + pageForm.getSearchKeyword() + "%");
cnd.and(seg);
}
if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy());
} else {
cnd.desc("his.changeTime");
}
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.andEX("his.unionId", "=", SecurityUtil.getUnionId());
}
sql.setCondition(cnd);
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
/**
* 根据用户id获取用户变更信息
*
* @param userId 用户id
* @return
*/
@Override
public List<NutMap> getMemberChangeInfoByUserId(String userId) {
Sys_user user = dao().fetch(Sys_user.class, userId);
Sys_user_history history = new Sys_user_history();
//获取当前用户信息
BeanUtil.copyProperties(user, history);
history.setChangeTime(new Date());
//获取用户变更信息
List<Sys_user_history> userHistories = dao().query(Sys_user_history.class, Cnd.where("loginname", "=", user.getLoginname()));
userHistories.add(history);
//按时间排序
CollectionUtil.sort(userHistories, Comparator.comparing(Sys_user_history::getChangeTime).reversed());
//获取允许变更的字段
List<Sys_dict> dictList = sysDictService.getSubListByCode("MEMBER_ALLOW_CHANGES_FIELD");
Set<String> allowChangeFieldNames = dictList.stream().map(Sys_dict::getCode).collect(Collectors.toSet());
Map<String, String> dictMap = dictList.stream().collect(Collectors.toMap(Sys_dict::getCode, Sys_dict::getName));
List<NutMap> resultList = new ArrayList<>();
for (int i = 1; i < userHistories.size(); i++) {
Sys_user_history current = userHistories.get(i);
Sys_user_history previous = userHistories.get(i - 1);
NutMap nutMap = compareAndRecordChange(current, previous, allowChangeFieldNames, dictMap);
resultList.add(nutMap);
}
return resultList;
}
/**
* 比较两个对象,并记录变更的字段
*
* @param current 当前数据
* @param previous 上一次的数据
* @param allowChangeFieldNames 允许变更的字段名
* @param dictMap 字典数据
* @return NutMap
*/
public NutMap compareAndRecordChange(Sys_user_history current, Sys_user_history previous, Set<String> allowChangeFieldNames, Map<String, String> dictMap) {
NutMap nutMap = NutMap.NEW();
if (StrUtil.isNotBlank(current.getChangeOrigin())) {
String title = MemberChangeOrigin.valueOf(MemberChangeOrigin.class , current.getChangeOrigin()).changeOriginName;
nutMap.put("title", title + "(" + DateUtil.format(current.getChangeTime(), "yyyy-MM-dd HH:mm:ss") + ")");
} else {
nutMap.put("title", DateUtil.format(current.getChangeTime(), "yyyy-MM-dd HH:mm:ss"));
}
nutMap.put("remark", current.getRemark());
nutMap.put("changeTime", DateUtil.format(current.getChangeTime(), "yyyy-MM-dd HH:mm:ss"));
List<NutMap> changeList = new ArrayList<>();
NutMap currentMap = Lang.obj2nutmap(current);
NutMap previousMap = Lang.obj2nutmap(previous);
for (String fieldName : allowChangeFieldNames) {
extractChange(currentMap, previousMap, fieldName, dictMap, changeList);
}
nutMap.put("changeList", changeList);
return nutMap;
}
/**
* 比较两个对象,并记录变更的字段
*
* @param current 当前数据
* @param previous 上一次的数据
* @param allowChangeFieldNames 允许变更的字段名
* @param dictMap 字典数据
* @return NutMap
*/
@Override
public List<NutMap> compareChange(Sys_user_history current, Sys_user_history previous, Set<String> allowChangeFieldNames, Map<String, String> dictMap) {
List<NutMap> changeList = new ArrayList<>();
NutMap currentMap = Lang.obj2nutmap(current);
NutMap previousMap = Lang.obj2nutmap(previous);
for (String fieldName : allowChangeFieldNames) {
extractChange(currentMap, previousMap, fieldName, dictMap, changeList);
}
return changeList;
}
/**
* 校验是否有变更
* @param
*/
@Override
public List<NutMap> compareMemberChangeInfo(Sys_user_history history) {
List<NutMap> infos = history.getChangeInfos();
if (ObjectUtil.isEmpty(infos)) {
throw new BaseException("获取变更记录失败");
}
return infos;
}
/**
* 校验是否有变更
* @param record
*/
@Override
public List<NutMap> compareMemberChangeInfo(MemberApplyRecord record) {
if (ObjectUtil.isEmpty(record) || ObjectUtil.isEmpty(record.getLoginname())) {
throw new BaseException("未获取到变更记录");
}
NutMap previousMap = NutMap.NEW();
View_user user = dao().fetch(View_user.class, Cnd.where("loginname", "=", record.getLoginname()));
previousMap = Lang.obj2nutmap(user);
//获取允许变更的字段
List<Sys_dict> dictList = sysDictService.getSubListByCode("MEMBER_ALLOW_CHANGES_FIELD");
Set<String> allowChangeFieldNames = dictList.stream().map(Sys_dict::getCode).collect(Collectors.toSet());
Map<String, String> dictMap = dictList.stream().collect(Collectors.toMap(Sys_dict::getCode, Sys_dict::getName));
List<NutMap> changeList = new ArrayList<>();
NutMap currentMap = Lang.obj2nutmap(record);
for (String fieldName : allowChangeFieldNames) {
extractChange(currentMap, previousMap, fieldName, dictMap, changeList);
}
if (Lang.isEmpty(changeList)) {
throw new BaseException("未获取到变更数据,请核对是否修改了数据");
}
return changeList;
}
@Override
public List<String> compareMemberChangeType(List<NutMap> changeList, MemberApplyRecord record) {
if (Lang.isEmpty(changeList)) {
return null;
}
List<String> changeTypes = new ArrayList<>();
// 有单位发生变化的记录数据
long unitChangeCount = changeList.stream().filter(item -> item != null && "unitId".equals(item.get("fieldName"))).count();
if (unitChangeCount > 0) {
// 有单位的变化,表明是单位变更
changeTypes.add(MemberChangeType.UNIT_CHANGE.name());
// 如果有非单位变更,表明是基本信息变更
long nonUnitChangeCount = changeList.size() - unitChangeCount;
if (nonUnitChangeCount > 0) {
changeTypes.add(MemberChangeType.BASIC_CHANGE.name());
}
} else {
// 没有单位的变化,表明是基本信息变更
changeTypes.add(MemberChangeType.BASIC_CHANGE.name());
}
// record中是否存在前端传递过来的变更状态,(入会/退会)
String changeType = record.getChangeType();
if (StrUtil.isNotBlank(changeType)) {
changeTypes.add(changeType);
}
return changeTypes;
}
/**
* 比较会员信息变更记录,并保存历史数据
*
* @param record 传递的记录
* @return
*/
@Aop(TransAop.READ_COMMITTED)
@Override
public void compareMemberChangeInfoAndUpdateUser(MemberApplyRecord record) {
List<NutMap> changeList = compareMemberChangeInfo(record);
View_user user = dao().fetch(View_user.class, Cnd.where("loginname", "=", record.getLoginname()));
Sys_user_history history = new Sys_user_history();
// 存储变更记录
if (ObjectUtil.isNotEmpty(changeList)) {
// 将当前的用户数据(user)记录成历史数据
BeanUtil.copyProperties(user, history);
if (Lang.isNotEmpty(record.getChangeTypes())) {
history.setChangeTypes(record.getChangeTypes());
} else {
List<String> changeTypes = this.compareMemberChangeType(changeList, record);
history.setChangeTypes(changeTypes);
}
}
if (ObjectUtil.isNotEmpty(history) && ObjectUtil.isNotEmpty(history.getLoginname())) {
Date nowDate = new Date();
history.setRecordId(record.getId());
history.setChangeTime(nowDate);
history.setUnionId(user.getUnionId());
history.setUnionName(user.getUnionName());
history.setChangeOrigin(StrUtil.isNotBlank(record.getChangeOrigin()) ? record.getChangeOrigin() : MemberChangeOrigin.SCHOOL_UNION.name());
history.setChangeReason(record.getNotes());
history.setRemark(record.getRemark());
// 到此,表明审核通过,需要存储历史数据,并修改用户数据
Chain chain = Chain.make("unitPath", null);
changeList.forEach(v -> {
if ("unitId".equals(v.getString("fieldName"))) {
chain.add(v.getString("fieldName"), record.getUnitId());
} else {
chain.add(v.getString("fieldName"), v.getString("newValue"));
}
});
chain.add("member", record.getMember());
chain.add("welfareMember", record.getWelfareMember());
Sys_role memberRole = dao().fetch(Sys_role.class, Cnd.where("`code`", "=", "MEMBER"));
dao().clear(Sys_user_role.class, Cnd.where("userId", "=", user.getId()).and("roleId","=", memberRole.getId()));
if (record.getMember()) {
Sys_user_role userRole = new Sys_user_role();
userRole.setRoleId(memberRole.getId());
userRole.setUserId(user.getId());
dao().insert(userRole);
}
AtomicBoolean isRetire = new AtomicBoolean(false);
String changeInfos = changeList.stream().map(v -> {
if ("userState".equals(v.getString("fieldName")) && "退休".equals(v.getString("newValue"))) {
isRetire.set(true);
chain.add("retireDate", DateUtil.date());
}
return "(变更字段:" + v.getString("name") + ",变更前:" + HtmlUtil.cleanHtmlTag(v.getString("value","")) + ",变更后:" + HtmlUtil.cleanHtmlTag(v.getString("newValue","")) + ")";
}).collect(Collectors.joining(""));
record.setChangeInfos(changeInfos);
history.setChangeInfos(changeList);
history.setChangeInfosStr(changeInfos);
dao().insert(history);
dao().update(Sys_user.class, chain, Cnd.where("loginname", "=", record.getLoginname()));
} else {
throw new BaseException("未获取到变更数据,请核对是否修改了数据");
}
}
@Override
public List<NutMap> getLastTimeMemberChangeInfoByUserId(String userId, String verificationProjectId) {
MemberApplyRecord record = dao().fetch(MemberApplyRecord.class, Cnd.where("userId", "=", userId)
.and("verificationProjectId","=",verificationProjectId));
if (ObjectUtil.isEmpty(record) || ObjectUtil.isEmpty(record.getLoginname())) {
throw new NullPointerException("数据获取失败");
}
View_user user = dao().fetch(View_user.class, Cnd.where("loginname", "=", record.getLoginname()));
//获取允许变更的字段
List<Sys_dict> dictList = sysDictService.getSubListByCode("MEMBER_ALLOW_CHANGES_FIELD");
Set<String> allowChangeFieldNames = dictList.stream().map(Sys_dict::getCode).collect(Collectors.toSet());
Map<String, String> dictMap = dictList.stream().collect(Collectors.toMap(Sys_dict::getCode, Sys_dict::getName));
List<NutMap> changeList = new ArrayList<>();
NutMap currentMap = Lang.obj2nutmap(record);
NutMap previousMap = Lang.obj2nutmap(user);
for (String fieldName : allowChangeFieldNames) {
extractChange(currentMap, previousMap, fieldName, dictMap, changeList);
}
return changeList;
}
/**
* 比较两个对象,并记录变更的字段工具
*
* @param current 当前数据
* @param previous 上一次的数据
* @param dictMap 字典数据
* @param changeList 变更集合
*/
@Override
public void extractChange(NutMap current, NutMap previous, String fieldName, Map<String, String> dictMap, List<NutMap> changeList) {
try {
Object currentValue = this.booleanVerification(current.get(fieldName));
Object previousValue = this.booleanVerification(previous.get(fieldName));
if (!ObjectUtil.equals(currentValue, previousValue)) {
String name = dictMap.getOrDefault(fieldName, fieldName);
if ("unitId".equals(fieldName)) {
List<Sys_unit> unitList = dao().query(Sys_unit.class, Cnd.where("id", "in", List.of(previousValue, currentValue)));
Object finalPreviousValue = previousValue;
previousValue = unitList.stream().filter(v->v.getId().equals(String.valueOf(finalPreviousValue))).findFirst().orElse(new Sys_unit()).getName();
Object finalCurrentValue = currentValue;
currentValue = unitList.stream().filter(v->v.getId().equals(String.valueOf(finalCurrentValue))).findFirst().orElse(new Sys_unit()).getName();
} else if ("families".equals(fieldName)) {
return;
}
changeList.add(NutMap.NEW()
.setv("fieldName", fieldName)
.setv("name", name)
.setv("value", previousValue)
.setv("newValue", currentValue));
}
} catch (Exception e) {
log.error("Error while extracting and comparing changes for field: {}", fieldName, e);
}
}
private String booleanVerification(Object value) {
// 检查是否为null或空字符串
if (ObjectUtil.isAllEmpty(value, "")) {
return "无数据";
}
// 处理布尔值
if (value instanceof Boolean) {
return ((Boolean) value) ? "" : "";
}
// 处理数值类型
if (value instanceof Number && List.of(0, 1).contains((Integer) value)) {
return ((Number) value).intValue() != 0 ? "" : "";
}
// 其他对象,返回其字符串表示
if (value instanceof Date) {
return DateUtil.format((Date) value, "yyyy-MM-dd");
}
return value.toString();
}
}
@@ -0,0 +1,144 @@
package com.budwk.app.zhgh.staffmanage.member.service.impl;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberModelWorkerPageForm;
import com.budwk.app.zhgh.staffmanage.member.service.MemberModelWorkerService;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.*;
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.loader.annotation.IocBean;
import org.nutz.lang.util.NutMap;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberModelWorkerServiceImpl
* @Date 2024/9/25 17:29
* @注释
*/
@Slf4j
@IocBean(args = {"refer:dao"})
public class MemberModelWorkerServiceImpl extends BaseServiceImpl<Sys_user> implements MemberModelWorkerService {
public MemberModelWorkerServiceImpl(Dao dao) {
super(dao);
}
@Override
public Sql getSql(MemberModelWorkerPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
id,
loginname,
username,
sex,
member,
welfareMember,
personType,
userState,
unionCode,
unionName,
unionId,
unitName,
unitCode,
unitId,
mobile,
birthday,
isModelWorker,
modelWorkerFiles
from
`vw_user`
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("isModelWorker","=",true);
if (!AuthUtil.hasRoleOr("SYSADMIN", "SCHOOL_UNION_ADMIN")) {
cnd.and("unionId", "=", SecurityUtil.getUnionId());
} else {
cnd.andEX("unionId", "=", pageForm.getUnionId());
}
cnd.andEX("unitId", "=", pageForm.getUnitId());
if (StrUtil.isAllNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("username", pageForm.getSearchKeyword());
seg.orLike("loginname", pageForm.getSearchKeyword());
cnd.and(seg);
}
cnd.andEX("userState", "=", pageForm.getUserState());
cnd.andEX("personType", "=", pageForm.getPersonType());
if (StrUtil.isNotBlank(pageForm.getMemberState())) {
cnd.andEX("member", "=", "true".equals(pageForm.getMemberState()));
}
if (StrUtil.isNotBlank(pageForm.getWelfareMemberState())) {
cnd.andEX("welfareMember", "=", "true".equals(pageForm.getWelfareMemberState()));
}
sql.setCondition(cnd);
return sql;
}
@Override
public void doExport(MemberModelWorkerPageForm pageForm, HttpServletResponse response) {
Sql sql = getSql(pageForm);
List<NutMap> list = listMap(sql);
int size = list.size();
List<ExcelExportEntity> exportEntities = new ArrayList<>();
exportEntities.add(new ExcelExportEntity("工号", "loginname", 20));
exportEntities.add(new ExcelExportEntity("姓名", "username", 20));
exportEntities.add(new ExcelExportEntity("性别", "sex", 20));
exportEntities.add(new ExcelExportEntity("联系电话", "mobile", 20));
exportEntities.add(new ExcelExportEntity("身份证号", "idCard", 30));
exportEntities.add(new ExcelExportEntity("在职状态", "userState", 20));
exportEntities.add(new ExcelExportEntity("人员类型", "personType", 20));
exportEntities.add(new ExcelExportEntity("所属工会", "unionName", 20));
exportEntities.add(new ExcelExportEntity("所属单位", "unitName", 30));
exportEntities.add(new ExcelExportEntity("是否为正式会员", "member", 10));
exportEntities.add(new ExcelExportEntity("是否为福利会员", "welfareMember", 10));
exportEntities.add(new ExcelExportEntity("劳模材料", "modelWorkerFiles", 20));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, list);
Sheet sheet = workbook.getSheetAt(0);
int linkColumnIndex = exportEntities.size();
CreationHelper helper = workbook.getCreationHelper();
ClientAnchor anchor = helper.createClientAnchor();
for (int rowIndex = 1; rowIndex <= size; rowIndex++) {
Row row = sheet.getRow(rowIndex);
Cell cell = row.createCell(linkColumnIndex);
}
// CommonDownloadUtil
}
}
@@ -0,0 +1,75 @@
package com.budwk.app.zhgh.staffmanage.member.service.impl;
import com.budwk.app.base.constant.BpmProcessConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm;
import com.budwk.app.zhgh.staffmanage.member.service.MemberSchoolUnionManageService;
import com.budwk.app.zhgh.staffmanage.member.vo.MemberChangeAuditVo;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.loader.annotation.IocBean;
/**
* @version 1.0
* @Author zzr
* @nameMemberSchoolUnionManageServiceImpl
* @Date 2024/8/13 15:33
* @注释
*/
@IocBean(args = {"refer:dao"})
public class MemberSchoolUnionManageServiceImpl extends BaseServiceImpl<Sys_user> implements MemberSchoolUnionManageService {
public MemberSchoolUnionManageServiceImpl(Dao dao) {
super(dao);
}
@Override
public Pagination getPageData(MemberManagePageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
record.id,
record.userId,
record.username,
record.loginname,
record.changeType,
record.changeTypes,
record.changeOrigin,
record.applyDateTime,
record.unitId,
IFNULL(record.unionId, vu.unionid) AS unionId,
vu.unionname AS unionName,
IFNULL(record.unitName, vu.unitname) AS unitName,
IFNULL(record.userState, vu.userState) AS userState,
IFNULL(record.preparedBy, vu.preparedBy) AS preparedBy,
IFNULL(record.personType, vu.personType) AS personType,
inst.id processInstanceId,
inst.processInstanceNodeId,
inst.processInstanceNodeCode,
inst.processInstanceNodeName,
inst.processInstanceTaskIds,
inst.processInstanceStatus,
task.id processInstanceTaskId,
task.taskStatus processInstanceTaskStatus,
COUNT( nt.id ) OVER ( PARTITION BY task.id ) > 0 AS nextTaskIsComplete
FROM
bpm_process_task task
INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId
INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId
INNER JOIN bpm_process_define define On inst.processDefineId = define.id
INNER JOIN member_apply_record record ON record.id = inst.processInstanceBusinessId
LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id AND nt.taskStatus = 'COMPLETE'
LEFT JOIN vw_user vu ON vu.id = record.userId
$condition
""");
Cnd cnd = Cnd.NEW();
MemberManagePageForm.buildAuditSearch(cnd, pageForm);
cnd.and("nd.nodeCode", "=", 20);
cnd.and("define.`code`", "=", BpmProcessConstant.MEMBER_BRANCH_UNION_CHANGE.name());
cnd.desc("record.applyDateTime");
sql.setCondition(cnd);
return listPageVO(pageForm, sql, MemberChangeAuditVo.class);
}
}
@@ -0,0 +1,402 @@
package com.budwk.app.zhgh.staffmanage.member.service.impl;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberStatisticsPageForm;
import com.budwk.app.zhgh.staffmanage.member.service.MemberStatisticsService;
import org.apache.poi.ss.usermodel.Workbook;
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.dao.util.cri.Static;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberStatisticsServiceImpl
* @Date 2024/8/8 14:55
* @注释
*/
@IocBean(args = {"refer:dao"})
public class MemberStatisticsServiceImpl extends BaseServiceImpl<Sys_user> implements MemberStatisticsService {
public MemberStatisticsServiceImpl(Dao dao) {
super(dao);
}
@Override
public Cnd getCnd(MemberStatisticsPageForm pageForm) {
Boolean reverseSelection = pageForm.getReverseSelection();
String IN_OR_NIN_OP = reverseSelection ? "NOT IN" : "IN";
String EQ_OR_NEQ_OP = reverseSelection ? "!=" : "=";
//小于等于
String LE_OR_NLE_OP = reverseSelection ? ">=" : "<=";
//大于等于
String GE_OR_NGE_OP = reverseSelection ? "<=" : ">=";
Cnd cnd = Cnd.NEW();
if (StrUtil.isAllNotBlank(pageForm.getPageOrderBy(), pageForm.getPageOrderName())) {
cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy().equalsIgnoreCase("ascending") ? "ASC" : "DESC");
}
if (Lang.isNotEmpty(pageForm.getAge()) && !"0".equals(pageForm.getAge().get(0)) && !"0".equals(pageForm.getAge().get(1))) {
if (reverseSelection) {
cnd.andNot("TIMESTAMPDIFF(YEAR, u.birthday, CURDATE())", "between", pageForm.getAge().toArray());
} else {
cnd.and("TIMESTAMPDIFF(YEAR, u.birthday, CURDATE())", "between", pageForm.getAge().toArray());
}
}
if (Strings.isNotBlank(pageForm.getStartDate()) && Strings.isNotBlank(pageForm.getEndDate())) {
if (reverseSelection) {
cnd.andNot("DATE(u.birthday)", "between", new String[]{pageForm.getStartDate(), pageForm.getEndDate()});
} else {
cnd.and("DATE(u.birthday)", "between", new String[]{pageForm.getStartDate(), pageForm.getEndDate()});
}
}
if (Strings.isNotBlank(pageForm.getStartDate()) && Strings.isBlank(pageForm.getEndDate())) {
cnd.and("DATE(u.birthday)", GE_OR_NGE_OP, pageForm.getStartDate());
}
if (Strings.isBlank(pageForm.getStartDate()) && Strings.isNotBlank(pageForm.getEndDate())) {
cnd.and("DATE(u.birthday)", LE_OR_NLE_OP, pageForm.getEndDate());
}
try {
handleField("unionId", pageForm.getUnionId(), reverseSelection, IN_OR_NIN_OP, cnd);
handleField("unitId", pageForm.getUnitId(), reverseSelection, IN_OR_NIN_OP, cnd);
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("sex", pageForm.getSexTypes(), reverseSelection, IN_OR_NIN_OP, cnd);
cnd.andEX("sur.roleId", IN_OR_NIN_OP, pageForm.getRoleIds());
} catch (Exception e) {
throw new RuntimeException(e);
}
return cnd;
}
void handleField(String fieldName, Object fieldValue, boolean reverseSelection, String IN_OR_NIN_OP, Cnd cnd) {
if (reverseSelection && Lang.isNotEmpty(fieldValue)) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("u." + fieldName, "is", null);
seg.or("u." + fieldName, IN_OR_NIN_OP, fieldValue);
cnd.and(seg);
} else {
cnd.andEX("u." + fieldName, IN_OR_NIN_OP, fieldValue);
}
}
@Override
public Sql getComprehensiveSql(MemberStatisticsPageForm pageForm) {
int yyyy = Calendar.getInstance().get(Calendar.YEAR);
Cnd cnd = getCnd(pageForm);
Sql sql = Sqls.create("""
SELECT
u.id,
u.loginname,
u.username,
u.sex,
u.birthday,
u.political,
u.joinPartyDate,
u.nation,
u.nativePlace,
u.nationality,
u.idCardType,
u.mobile,
u.education,
u.academicDegree,
u.technicalTitle,
u.technicalTitleLevel,
u.position,
u.positionLevel,
u.employeeLevel,
u.arrivalAtSchoolDate,
u.personType,
u.preparedBy,
u.identityType,
u.userState,
u.unionName,
u.unitName,
u.member,
u.postDoctoralJoinDate
FROM
$table
$hisUser
LEFT JOIN sys_user_role sur ON sur.userid = u.id
$condition
""");
if (pageForm.getYear() == yyyy) {
sql.setVar("table", "vw_user u");
} else {
sql.setVar("table", "member_history his");
sql.setVar("hisUser", " LEFT JOIN vw_user u ON u.id = his.userId ");
cnd.and("his.year", "=", pageForm.getYear());
}
if (StrUtil.isNotBlank(pageForm.getIsUnit())) {
cnd.and("u.unitId", "true".equals(pageForm.getIsUnit()) ? "is not" : "is", null);
}
if (StrUtil.isNotBlank(pageForm.getIsUnion())) {
cnd.and("u.unionId", "true".equals(pageForm.getIsUnion()) ? "is not" : "is", null);
}
if (StrUtil.isNotBlank(pageForm.getSearchType()) && !"all".equals(pageForm.getSearchType())) {
if ("member".equals(pageForm.getSearchType())) {
cnd.and("u.member", "=", true);
} else {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("u.member", "=", false);
seg.or("u.member", "is", null);
cnd.and(seg);
}
}
if (StrUtil.isAllNotBlank(pageForm.getMemberSearchName(), pageForm.getMemberSearchKeyWord())) {
cnd.and(new SqlExpressionGroup().andLike(pageForm.getMemberSearchName(), pageForm.getMemberSearchKeyWord()));
}
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("u.username", "like", "%" + pageForm.getSearchKeyword() + "%");
seg.or("u.loginname", "like", "%" + pageForm.getSearchKeyword() + "%");
cnd.and(seg);
}
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("u.unionId", "in", SecurityUtil.getUnionId());
}
// cnd.desc("u.unitId");
cnd.desc("u.unionName,u.id");
cnd.groupBy("u.id");
sql.setCondition(cnd);
return sql;
}
@Override
public List<NutMap> getUnionAnalysisData(String queryId, Integer currentYear) {
Sql sql = Sqls.create("""
SELECT
gh.id,
gh.unionCode,
gh.`name` as unionName,
( SELECT count( 1 ) FROM member_history his LEFT JOIN vw_user u on u.id = his.userId WHERE his.`year` = @lastYear AND u.unionId = gh.id ) AS lastYearMemberNum,
( SELECT count( 1 ) FROM member_apply_record WHERE changeUnionId is not null AND unionId = gh.id AND unionId != changeUnionId AND YEAR ( applyDateTime ) = @currentYear ) AS memberUnitChangeNumIn,
( SELECT count( 1 ) FROM member_apply_record WHERE changeUnionId is not null AND changeUnionId = gh.id AND unionId != changeUnionId AND YEAR ( applyDateTime ) = @currentYear ) AS memberUnitChangeNumOut,
( SELECT count( 1 ) FROM sys_user_history his LEFT JOIN `vw_user` u ON u.loginname = his.loginname WHERE JSON_CONTAINS(his.changeTypes, '["NEW", "RESTORE"]', '$') AND u.unionId = gh.id AND YEAR ( his.changeTime ) = @currentYear ) AS newResetMemberNum,
( SELECT count( 1 ) FROM sys_user_history his LEFT JOIN `vw_user` u ON u.loginname = his.loginname WHERE JSON_CONTAINS(his.changeTypes, '["WITHDRAWAL"]', '$') AND u.unionId = gh.id AND YEAR ( his.changeTime ) = @currentYear ) AS reduceOtherNum,
( SELECT count( 1 ) FROM $table where member = 1 and unionId = gh.id) as currentYearMemberNum
FROM
sys_union gh
$condition
""");
sql.setParam("lastYear", currentYear - 1);
sql.setParam("currentYear", currentYear);
sql.setVar("table", ((Integer) DateUtil.thisYear()).equals(currentYear) ? "`vw_user`" : "member_history");
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("gh.id", "=", SecurityUtil.getUnionId());
} else {
cnd.andEX("gh.id", "=", queryId);
}
cnd.groupBy("gh.id, gh.unionCode, gh.name");
cnd.asc("gh.unionCode");
sql.setCondition(cnd);
List<NutMap> list = listMap(sql);
list.forEach(v -> {
v.put("newMemberNum", NumberUtil.parseInt(v.getString("memberUnitChangeNumIn"),0) + NumberUtil.parseInt(v.getString("newResetMemberNum"),0));
v.put("reduceMemberNum", NumberUtil.parseInt(v.getString("memberUnitChangeNumOut"),0) + NumberUtil.parseInt(v.getString("reduceOtherNum")));
});
return list;
}
@Override
public List<NutMap> getUnitAnalysisData(String queryId, Integer currentYear) {
Sql sql = Sqls.create("""
SELECT
dw.id,
dw.unitcode as unitCode,
dw.`name` as unitName,
( SELECT count( 1 ) FROM member_history WHERE `year` = @lastYear AND unitId = dw.id ) AS lastYearMemberNum,
( SELECT count( 1 ) FROM member_apply_record WHERE changeUnitId is not null AND unitId = dw.id AND unitId != changeUnitId AND YEAR ( applyDateTime ) = @currentYear ) AS memberUnitChangeNumIn,
( SELECT count( 1 ) FROM member_apply_record WHERE changeUnitId is not null AND changeUnitId = dw.id AND unitId != changeUnitId AND YEAR ( applyDateTime ) = @currentYear ) AS memberUnitChangeNumOut,
( SELECT count( 1 ) FROM sys_user_history his LEFT JOIN vw_user u ON u.loginname = his.loginname WHERE JSON_CONTAINS(his.changeTypes, '["NEW", "RESTORE"]', '$') AND u.unitId = dw.id AND YEAR ( his.changeTime ) = @currentYear ) AS newResetMemberNum,
( SELECT count( 1 ) FROM sys_user_history his LEFT JOIN vw_user u ON u.loginname = his.loginname WHERE JSON_CONTAINS(his.changeTypes, '["WITHDRAWAL"]', '$') AND u.unitId = dw.id AND YEAR ( his.changeTime ) = @currentYear ) AS reduceOtherNum,
( SELECT count( 1 ) from vw_user where member = 1 and unitId = dw.id) as currentYearMemberNum
FROM
sys_unit dw
$condition
""");
sql.setParam("lastYear", currentYear - 1);
sql.setParam("currentYear", currentYear);
Cnd cnd = Cnd.NEW();
cnd.and("dw.unitLevel", "=", 2);
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("dw.unionId", "=", SecurityUtil.getUnionId());
} else {
cnd.andEX("dw.id", "=", queryId);
}
cnd.groupBy("dw.id", "dw.unitcode", "dw.name");
cnd.asc("dw.unitcode");
sql.setCondition(cnd);
List<NutMap> list = listMap(sql);
list.forEach(v -> {
v.put("newMemberNum", v.getInt("memberUnitChangeNumIn") + v.getInt("newResetMemberNum"));
v.put("reduceMemberNum", v.getInt("memberUnitChangeNumOut") + v.getInt("reduceOtherNum"));
});
return list;
}
@Override
public Workbook exportAnalysisExcel(List<NutMap> list, String queryType) {
List<ExcelExportEntity> exportEntities = new ArrayList<>();
if ("union".equals(queryType)) {
exportEntities.add(new ExcelExportEntity("工会名称", "unionName", 20));
exportEntities.add(new ExcelExportEntity("工会编码", "unionCode", 20));
} else {
exportEntities.add(new ExcelExportEntity("单位名称", "unitName", 20));
exportEntities.add(new ExcelExportEntity("单位编码", "unitCode", 20));
}
exportEntities.add(new ExcelExportEntity("年初数量", "lastYearMemberNum", 20));
exportEntities.add(new ExcelExportEntity("新增人数", "newMemberNum", 30));
exportEntities.add(new ExcelExportEntity("新入职、入会人数", "newResetMemberNum", 20));
exportEntities.add(new ExcelExportEntity("减少人数", "reduceMemberNum", 20));
exportEntities.add(new ExcelExportEntity("校内转出", "memberUnitChangeNumOut", 20));
exportEntities.add(new ExcelExportEntity("退会人数", "reduceOtherNum", 20));
exportEntities.add(new ExcelExportEntity("当前数量", "currentYearMemberNum", 30));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
exportParams.setHeight((short) 10);
return ExcelExportUtil.exportExcel(exportParams, exportEntities, list);
}
@Override
public List<NutMap> getUnionStatisticsData(String unionId, Integer currentYear) {
Sql sql = Sqls.create("""
SELECT
un.id,
un.unionCode,
un.`name` AS unionName,
SUM(CASE WHEN TIMESTAMPDIFF(YEAR, u.birthday, CURDATE()) <= 40 $personCnd $yearCnd THEN 1 ELSE 0 END) AS smallForty,
SUM(CASE WHEN TIMESTAMPDIFF(YEAR, u.birthday, CURDATE()) >= 41 AND TIMESTAMPDIFF(YEAR, u.birthday, CURDATE()) <= 50 $personCnd $yearCnd THEN 1 ELSE 0 END) AS smallFifty,
SUM(CASE WHEN TIMESTAMPDIFF(YEAR, u.birthday, CURDATE()) >= 51 AND TIMESTAMPDIFF(YEAR, u.birthday, CURDATE()) <= 55 $personCnd $yearCnd THEN 1 ELSE 0 END) AS smallFiftyFive,
SUM(CASE WHEN TIMESTAMPDIFF(YEAR, u.birthday, CURDATE()) > 55 $personCnd $yearCnd THEN 1 ELSE 0 END) AS smallFiftyFive2,
COUNT(*) AS totalNumber,
SUM(CASE WHEN sex = '男' $personCnd $yearCnd THEN 1 ELSE 0 END) AS maleMember,
SUM(CASE WHEN sex = '女' $personCnd $yearCnd THEN 1 ELSE 0 END) AS femaleMember
FROM
sys_union un
JOIN $table u ON u.unionId = un.id AND u.member = 1
$condition
""");
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("un.id", "=", SecurityUtil.getUnionId());
} else {
cnd.andEX("un.id", "=", unionId);
}
if (DateUtil.thisYear() == currentYear) {
sql.setVar("table", new Static("vw_user"));
// sql.setVar("abbr", new Static("u"));
} else {
sql.setVar("table", new Static("member_history"));
sql.setVar("yearCnd", new Static(" AND u.`year` = %d".formatted(currentYear)));
// sql.setVar("abbr", new Static("his"));
}
cnd.groupBy("un.id", "un.unionCode", "un.name");
cnd.asc("un.unionCode");
sql.setCondition(cnd);
return listMap(sql);
}
@Override
public List<NutMap> getUnitStatisticsData(String unitId, Integer currentYear) {
Sql sql = Sqls.create("""
SELECT
un.id,
un.unitcode AS unitCode,
un.`name` AS unitName,
SUM(CASE WHEN TIMESTAMPDIFF(YEAR, u.birthday, CURDATE()) <= 40 $personCnd $yearCnd THEN 1 ELSE 0 END) AS smallForty,
SUM(CASE WHEN TIMESTAMPDIFF(YEAR, u.birthday, CURDATE()) >= 41 AND TIMESTAMPDIFF(YEAR, u.birthday, CURDATE()) <= 50 $personCnd $yearCnd THEN 1 ELSE 0 END) AS smallFifty,
SUM(CASE WHEN TIMESTAMPDIFF(YEAR, u.birthday, CURDATE()) >= 51 AND TIMESTAMPDIFF(YEAR, u.birthday, CURDATE()) <= 55 $personCnd $yearCnd THEN 1 ELSE 0 END) AS smallFiftyFive,
SUM(CASE WHEN TIMESTAMPDIFF(YEAR, u.birthday, CURDATE()) > 55 $personCnd $yearCnd THEN 1 ELSE 0 END) AS smallFiftyFive2,
COUNT(*) AS totalNumber,
SUM(CASE WHEN sex = '男' $personCnd $yearCnd THEN 1 ELSE 0 END) AS maleMember,
SUM(CASE WHEN sex = '女' $personCnd $yearCnd THEN 1 ELSE 0 END) AS femaleMember
FROM
sys_unit un
JOIN $table u ON u.unitId = un.id AND u.member = 1
$condition
""");
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("un.unionId", "=", SecurityUtil.getUnionId());
} else {
cnd.andEX("un.id", "=", unitId);
}
if (DateUtil.thisYear() == currentYear) {
sql.setVar("table", new Static("vw_user"));
} else {
sql.setVar("table", new Static("member_history"));
sql.setVar("yearCnd", new Static(" AND u.`year` = %d".formatted(currentYear)));
}
cnd.and("un.unitLevel", "=", 2);
cnd.groupBy("un.id", "un.unitcode", "un.name");
cnd.asc("un.unitcode");
sql.setCondition(cnd);
return listMap(sql);
}
@Override
public Workbook exportStatisticsExcel(List<NutMap> list, String queryType) {
List<ExcelExportEntity> exportEntities = new ArrayList<>();
if ("union".equals(queryType)) {
exportEntities.add(new ExcelExportEntity("工会名称", "unionName", 20));
exportEntities.add(new ExcelExportEntity("工会编码", "unionCode", 20));
} else {
exportEntities.add(new ExcelExportEntity("单位名称", "unitName", 20));
exportEntities.add(new ExcelExportEntity("单位编码", "unitCode", 20));
}
exportEntities.add(new ExcelExportEntity("总人数", "totalNumber", 20));
exportEntities.add(new ExcelExportEntity("男会员", "maleMember", 20));
exportEntities.add(new ExcelExportEntity("女会员", "femaleMember", 20));
exportEntities.add(new ExcelExportEntity("小于等于40岁会员", "smallForty", 20));
exportEntities.add(new ExcelExportEntity("40-50", "smallFifty", 20));
exportEntities.add(new ExcelExportEntity("50-55", "smallFiftyFive", 20));
exportEntities.add(new ExcelExportEntity("大于55", "smallFiftyFive2", 20));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
exportParams.setHeight((short) 10);
return ExcelExportUtil.exportExcel(exportParams, exportEntities, list);
}
}
@@ -0,0 +1,52 @@
package com.budwk.app.zhgh.staffmanage.member.vo;
import com.budwk.app.bpm.vo.BpmTaskApprovalVo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberApplyVo
* @Date 2024/11/11 11:08
* @注释
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class MemberApplyVo extends BpmTaskApprovalVo {
private String id;
private String userId;
private String username;
private String loginname;
private String unitId;
private String changeUnitId;
private String unitName;
private String unionId;
private String changeUnionId;
private String unionName;
private String sex;
private String idCard;
private String nation;
private String political;
private String education;
private String governmentPosition;
private String userState;
private String personType;
private String mobile;
private String email;
private Boolean wantJoinLoveMutualAidAssociation;
private Boolean member;
private Boolean welfareMember;
private String families;
private String personalData;
private String notes;
private String changeType;
private List<String> changeTypes;
private String changeOrigin;
private Date applyDateTime;
private String verificationProjectId;
}
@@ -0,0 +1,52 @@
package com.budwk.app.zhgh.staffmanage.member.vo;
import com.budwk.app.bpm.vo.BpmTaskApprovalVo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberChangeAuditPageVo
* @Date 2024/10/23 18:02
* @注释
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class MemberChangeAuditVo extends BpmTaskApprovalVo {
private String id;
private String userId;
private String username;
private String loginname;
private String unitId;
private String changeUnitId;
private String unitName;
private String unionId;
private String changeUnionId;
private String unionName;
private String sex;
private String idCard;
private String nation;
private String political;
private String education;
private String governmentPosition;
private String userState;
private String personType;
private String mobile;
private String email;
private Boolean wantJoinLoveMutualAidAssociation;
private Boolean member;
private Boolean welfareMember;
private String families;
private String personalData;
private String notes;
private String changeType;
private List<String> changeTypes;
private String changeOrigin;
private Date applyDateTime;
private String verificationProjectId;
}
@@ -0,0 +1,64 @@
package com.budwk.app.zhgh.staffmanage.member.vo;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @version 1.0
* @Author zzr
* @nameMemberImportVo
* @Date 2024/10/14 11:48
* @注释
*/
@Data
@EqualsAndHashCode
@ContentRowHeight(20) // 内容行高
@HeadRowHeight(20) // 表头行高
@ColumnWidth(25) //列宽
public class MemberImportVo {
@ExcelProperty("工号")
private String loginname;
@ExcelProperty("姓名")
private String username;
@ExcelProperty("性别")
private String sex;
@ExcelProperty("联系方式")
private String mobile;
@ExcelProperty("身份证号")
private String idCard;
@ExcelProperty("在职状态")
private String userState;
@ExcelProperty("人员类型")
private String personType;
@ExcelProperty("单位编号")
private String unitCode;
@ExcelProperty("单位名称")
private String unitName;
// @ExcelProperty("科室编号")
// private String threeUnitCode;
//
// @ExcelProperty("科室名称")
// private String threeUnitName;
@ExcelProperty("是否会员")
private String isMember;
@ExcelIgnore
private String errorInfo;
}
@@ -0,0 +1,139 @@
package com.budwk.app.zhgh.staffmanage.sourcechange.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.constant.BpmProcessConstant;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.utils.PageUtil;
import com.budwk.app.bpm.service.BpmService;
import com.budwk.app.bpm.vo.BpmTaskApprovalRecordVo;
import com.budwk.app.sys.models.Sys_user_history;
import com.budwk.app.sys.services.SysUserService;
import com.budwk.app.zhgh.staffmanage.member.service.MemberManageService;
import com.budwk.app.zhgh.staffmanage.sourcechange.param.SourceChangePageForm;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.dao.util.cri.Static;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameSourceChangeManageController
* @Date 2024/11/21 10:22
* @注释 人员异动查看
*/
@Slf4j
@IocBean
@Ok("json")
@At("/platform/sourcechange/manage")
public class SourceChangeManageController {
@Inject
private BpmService bpmService;
@Inject
private SysUserService sysUserService;
@Inject
private MemberManageService memberManageService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/sourcechange/manage/index.html")
@SaCheckPermission("staff.sourcechange.manage")
public void index() {
}
@At
@ApiOperation("人员管理,人员变更信息查看")
@SaCheckPermission("staff.sourcechange.manage")
public Result pageData(SourceChangePageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
his.id,
his.loginname,
his.username,
u.sex,
u.unitName,
u.unionName,
his.userState,
his.personType,
his.preparedBy,
his.changeTime,
his.changeTypes,
his.changeOrigin,
his.remark,
u.id AS userId
FROM
sys_user_history his
LEFT JOIN vw_user u ON his.loginname = u.loginname
$condition
""");
Cnd cnd = Cnd.NEW();
if(StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("u.username",pageForm.getSearchKeyword());
seg.orLike("u.loginname",pageForm.getSearchKeyword());
cnd.and(seg);
}
if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
}
cnd.andEX("u.unionId", "=", pageForm.getUnionId());
cnd.andEX("u.unitId", "=", pageForm.getUnitId());
cnd.andEX("u.sex", "=", pageForm.getSex());
cnd.andEX("his.personType", "=", pageForm.getPersonType());
cnd.andEX("his.preparedBy", "=", pageForm.getPreparedBy());
cnd.andEX("his.userState", "=", pageForm.getUserState());
// cnd.andEX("his.changeType", "=", pageForm.getChangeType());
cnd.andEX("his.changeOrigin", "=", pageForm.getChangeOrigins());
if (StrUtil.isNotBlank(pageForm.getChangeType())) {
cnd.and(new Static("JSON_CONTAINS(his.changeTypes, JSON_QUOTE('%s'), '$')".formatted(pageForm.getChangeType())));
}
if (StrUtil.isAllNotBlank(pageForm.getChangeDateBefore(), pageForm.getChangeDateEnd())) {
cnd.and(new Static(String.format("Date(changeTime) >= '%s' and Date(changeTime) <= '%s'", pageForm.getChangeDateBefore(), pageForm.getChangeDateEnd())));
} else {
cnd.and("Date(changeTime)", "=", DateUtil.today());
}
cnd.desc("changeTime");
sql.setCondition(cnd);
return Result.success(sysUserService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql));
}
@At
@ApiOperation("人员管理,人员全部变更信息查看")
@SaCheckPermission("staff.sourcechange.manage")
public Result getChangeInfoByUserId(String userId) {
return Result.success(memberManageService.getMemberChangeInfoByUserId(userId));
}
@At
@ApiOperation("人员管理,人员当前变更信息查看")
@SaCheckPermission("staff.sourcechange.manage")
public Result findAuditChangeInfo(@Valid String recordId) {
Sys_user_history history = memberManageService.dao().fetch(Sys_user_history.class, recordId);
List<BpmTaskApprovalRecordVo> nodeTasks = new ArrayList<>();
try {
nodeTasks = bpmService.getNodeTasks(BpmProcessConstant.MEMBER_BRANCH_UNION_CHANGE, recordId);
} catch (Exception e) {
log.error("FIND_AUDIT_CHANGE_INFO BY BpmTaskApprovalRecordVo error:{}", e.getMessage());
}
List<NutMap> list = memberManageService.compareMemberChangeInfo(history);
return Result.success(NutMap.NEW().addv("changeList", list).addv("nodeTasks", nodeTasks).addv("remark", history.getRemark()));
}
}
@@ -0,0 +1,51 @@
package com.budwk.app.zhgh.staffmanage.sourcechange.param;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.sys.models.Sys_user_history;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameSourceChangePageForm
* @Date 2024/11/21 10:24
* @注释
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class SourceChangePageForm extends PageForm<Sys_user_history> {
private String unionId;
private String unitId;
private String sex;
private String personType;
private String preparedBy;
private String userState;
private String changeType;
//变更状态数组
private List<String> changeTypes;
//是否变更
private Integer changed;
private Integer isMember;
//变更开始时间
private String changeDateBefore;
//变更结束时间
private String changeDateEnd;
//变更来源
private List<Integer> changeOrigins;
}
@@ -0,0 +1,170 @@
package com.budwk.app.zhgh.staffmanage.specialstaff.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.event.user.SysUserEvent;
import com.budwk.app.base.event.user.SysUserPublisher;
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.sys.services.SysRoleService;
import com.budwk.app.sys.services.SysUserService;
import com.budwk.app.sys.views.View_user;
import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeType;
import com.budwk.app.zhgh.staffmanage.specialstaff.model.SpecialStaff;
import com.budwk.app.zhgh.staffmanage.specialstaff.param.SpecialStaffPageForm;
import com.budwk.app.zhgh.staffmanage.specialstaff.service.SpecialStaffManageService;
import com.budwk.app.zhgh.staffmanage.specialstaff.vo.SpecialStaffVo;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
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.Lang;
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 javax.validation.Valid;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameSpecialStaffManageController
* @Date 2024/10/25 9:03
* @注释 特殊人员管理
*/
@Slf4j
@IocBean
@Ok("json")
@At("/platform/staff/special/manage")
public class SpecialStaffManageController {
@Inject
private Dao dao;
@Inject
private SpecialStaffManageService specialStaffManageService;
@Inject
private SysRoleService sysRoleService;
@Inject
private SysUserService sysUserService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/specialstaff/manage/index.html")
@SaCheckPermission("staff.special.manage")
public void index() {
}
@At
@ApiOperation("人员管理特别人员管理")
@SaCheckPermission("staff.special.manage")
public Result pageData(SpecialStaffPageForm pageForm) {
Pagination pagination = specialStaffManageService.pageData(pageForm);
return Result.success(pagination);
}
@At
@ApiOperation("特别人员管理,获取人事关系用户信息")
@SaCheckPermission("staff.special.manage")
public Result getUserInfo(String userId) {
NutMap userInfo = specialStaffManageService.getUserInfo(userId);
return Result.success(userInfo);
}
@At
@ApiOperation("特别人员管理,获取特殊人员用户信息")
@SaCheckPermission("staff.special.manage")
public Result getSpecialStaffUserInfo(String userId) {
NutMap specialStaffUserInfo = specialStaffManageService.getSpecialStaffUserInfo(userId);
return Result.success(specialStaffUserInfo);
}
@At
@Aop(TransAop.READ_COMMITTED)
@ApiOperation("特别人员管理,新增特别人员")
@SaCheckPermission("staff.special.manage")
public Result addSpecialStaff(@Param("data") SpecialStaffVo specialStaffVo) {
SpecialStaff staff = new SpecialStaff();
Sys_user user = dao.fetch(Sys_user.class, specialStaffVo.getUserId());
boolean isNotify = false;
View_user viewUser = dao.fetch(View_user.class, Cnd.where("id", "=", specialStaffVo.getUserId()));
SpecialStaff specialStaff = dao.fetch(SpecialStaff.class, Cnd.where("userId", "=", specialStaffVo.getUserId()));
if (Lang.isNotEmpty(specialStaff)) {
staff = specialStaff;
}
BeanUtil.copyProperties(specialStaffVo, staff);
if (specialStaffVo.getIsManyUnit()!=null && specialStaffVo.getIsManyUnit()) {
if (!user.getUnitId().equals(specialStaffVo.getUnionRelationUnitId())) {
isNotify = true;
}
// 如果是多单位人员, 更改单位为工会关系
user.setUnitId(specialStaffVo.getUnionRelationUnitId());
dao.updateIgnoreNull(user);
staff.setIsManyUnit(true);
staff.setPersonnelRelationUnitName(viewUser.getUnitName());
staff.setPersonnelRelationUnionName(viewUser.getUnionName());
}
staff.setUserId(user.getId());
dao.insertOrUpdate(staff);
sysRoleService.clearCache();
sysUserService.clearCache();
if (isNotify) {
SysUserPublisher.notify(SysUserEvent.builder().userId(user.getId()).memberChangeType(MemberChangeType.UNIT_CHANGE).build());
}
return Result.success();
}
@At
@Aop(TransAop.READ_COMMITTED)
@ApiOperation("特别人员管理,删除特别人员")
@SaCheckPermission("staff.special.manage")
public Result removeSpecialStaff(@Valid String userId) {
SpecialStaff staff = dao.fetch(SpecialStaff.class, Cnd.where("userId", "=", userId));
if (staff.getIsManyUnit()) {
dao.update(Sys_user.class, Chain.make("unitId", staff.getPersonnelRelationUnitId()), Cnd.where("id", "=", userId));
SysUserPublisher.notify(SysUserEvent.builder().userId(userId).memberChangeType(MemberChangeType.UNIT_CHANGE).build());
}
dao.clear(SpecialStaff.class, Cnd.where("userId", "=", userId));
return Result.success();
}
@At
@ApiOperation("特别人员管理,查询用户")
@SaCheckPermission("staff.special.manage")
public Result queryUser(String keyWord) {
Sql sql = Sqls.create("""
select id,username,loginname,unitId,unitName,unionId,unionName from `vw_user` $condition limit 0,10
""");
Cnd cnd = Cnd.NEW();
cnd.where("id", "not in", "(select userId from special_staff)");
if (StrUtil.isNotBlank(keyWord)) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("username", keyWord);
seg.orLike("loginname", keyWord);
cnd.and(seg);
}
sql.setCondition(cnd);
List<NutMap> list = specialStaffManageService.listMap(sql);
return Result.success(list);
}
}
@@ -0,0 +1,93 @@
package com.budwk.app.zhgh.staffmanage.specialstaff.model;
import com.budwk.app.base.model.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert;
/**
* @version 1.0
* @Author zzr
* @nameSpecialStaff
* @Date 2024/10/25 9:05
* @注释
*/
@Data
@Comment("特别人员")
@Table("special_staff")
@EqualsAndHashCode(callSuper = true)
public class SpecialStaff extends BaseModel {
@Name
@Comment("ID")
@PrevInsert(uu32 = true)
@ColDefine(type = ColType.VARCHAR, width = 32)
private String id;
@Column
@Comment("组员对应的用户id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String userId;
@Column
@Comment("人事关系部门")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String personnelRelationUnitId;
@Column
@Comment("人事关系部门名称")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String personnelRelationUnitName;
@Column
@Comment("人事关系工会名称")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String personnelRelationUnionName;
@Column
@Comment("人事关系三级单位")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String personnelRelationThreeUnitId;
@Column
@Comment("人事关系三级单位")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String personnelRelationThreeUnitName;
@Column
@Comment("人事关系工会小组名称")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String personnelRelationUnionGroupName;
@Column
@Comment("工会关系部门")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unionRelationUnitId;
@Column
@Comment("工会关系三级单位")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unionRelationThreeUnitId;
@Column
@Comment("工会关系小组名称")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String unionRelationUnionGroupName;
@Column
@Comment("特殊人员类型")
@ColDefine(type = ColType.BOOLEAN)
@Default("0")
private Boolean isManyUnit;
@Column
@Comment("特殊人员类型")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String specialStaffType;
@Column
@Comment("特殊人员备注")
@ColDefine(type = ColType.VARCHAR, width = 200)
private String specialStaffRemark;
}
@@ -0,0 +1,32 @@
package com.budwk.app.zhgh.staffmanage.specialstaff.param;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.zhgh.staffmanage.specialstaff.model.SpecialStaff;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @version 1.0
* @Author zzr
* @nameSpecialStaffPageForm
* @Date 2024/10/25 9:31
* @注释
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class SpecialStaffPageForm extends PageForm<SpecialStaff> {
private String unionId;
private String unitId;
private String unionGroupId;
private String threeUnitId;
private String personType;
private String userState;
private String specialStaffType;
}
@@ -0,0 +1,38 @@
package com.budwk.app.zhgh.staffmanage.specialstaff.service;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.staffmanage.specialstaff.model.SpecialStaff;
import com.budwk.app.zhgh.staffmanage.specialstaff.param.SpecialStaffPageForm;
import org.nutz.lang.util.NutMap;
/**
* @version 1.0
* @Author zzr
* @nameSpecialStaffManageService
* @Date 2024/10/25 9:42
* @注释
*/
public interface SpecialStaffManageService extends BaseService<SpecialStaff> {
/**
* 分页查询
* @param pageForm
* @return
*/
Pagination pageData(SpecialStaffPageForm pageForm);
/**
* 获取用户信息(人事关系)
* @param userId 用户id
* @return
*/
NutMap getUserInfo(String userId);
/**
* 获取用户信息(特殊人员)
* @param userId 用户id
* @return
*/
NutMap getSpecialStaffUserInfo(String userId);
}
@@ -0,0 +1,136 @@
package com.budwk.app.zhgh.staffmanage.specialstaff.service.impl;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.base.utils.PageUtil;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.staffmanage.specialstaff.model.SpecialStaff;
import com.budwk.app.zhgh.staffmanage.specialstaff.param.SpecialStaffPageForm;
import com.budwk.app.zhgh.staffmanage.specialstaff.service.SpecialStaffManageService;
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.loader.annotation.IocBean;
import org.nutz.lang.util.NutMap;
/**
* @version 1.0
* @Author zzr
* @nameSpecialStaffManageServiceImpl
* @Date 2024/10/25 9:43
* @注释
*/
@IocBean(args = {"refer:dao"})
public class SpecialStaffManageServiceImpl extends BaseServiceImpl<SpecialStaff> implements SpecialStaffManageService {
public SpecialStaffManageServiceImpl(Dao dao) {
super(dao);
}
@Override
public Pagination pageData(SpecialStaffPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
s.*,
u.loginname,
u.username,
u.sex,
u.member,
u.welfareMember,
u.personType,
u.userState,
u.unitName AS unionRelationUnitName,
u.unionName AS unionRelationUnionName,
u.mobile,
u.birthday
FROM
`special_staff` s
LEFT JOIN `vw_user` u ON s.userId = u.id
$condition
""");
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("u.unionId", "=", SecurityUtil.getUnionId());
}
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("u.username", pageForm.getSearchKeyword());
seg.orLike("u.loginname", pageForm.getSearchKeyword());
cnd.and(seg);
}
if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
} else {
cnd.asc("u.unitCode");
cnd.asc("u.loginname");
}
cnd.andEX("u.unionId", "=", pageForm.getUnionId());
cnd.andEX("u.unitId", "=", pageForm.getUnitId());
cnd.andEX("u.personType", "=", pageForm.getPersonType());
cnd.andEX("u.userState", "=", pageForm.getUserState());
cnd.andEX("u.personType", "=", pageForm.getPersonType());
cnd.andEX("s.specialStaffType", "=", pageForm.getSpecialStaffType());
sql.setCondition(cnd);
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
@Override
public NutMap getUserInfo(String userId) {
Sql sql = Sqls.create("""
SELECT
id AS userId,
username,
loginname,
unitId AS personnelRelationUnitId,
unitName AS personnelRelationUnitName,
unionName AS personnelRelationUnionName,
userState,
personType,
mobile
FROM
`vw_user`
WHERE
id = @userId
""");
sql.setParam("userId", userId);
sql.setCallback(Sqls.callback.map());
dao().execute(sql);
return (NutMap) sql.getResult();
}
@Override
public NutMap getSpecialStaffUserInfo(String userId) {
Sql sql = Sqls.create("""
SELECT
s.*,
u.loginname,
u.username,
u.sex,
u.member,
u.welfareMember,
u.personType,
u.userState,
u.unitName AS unionRelationUnitName,
u.unionName AS unionRelationUnionName,
u.mobile,
u.birthday
FROM
`special_staff` s
LEFT JOIN `vw_user` u ON s.userId = u.id
WHERE
s.userId=@userId
""");
sql.setParam("userId", userId);
sql.setCallback(Sqls.callback.map());
dao().execute(sql);
return (NutMap) sql.getResult();
}
}
@@ -0,0 +1,30 @@
package com.budwk.app.zhgh.staffmanage.specialstaff.vo;
import lombok.Data;
/**
* @version 1.0
* @Author zzr
* @nameSpecialStaffVo
* @Date 2024/10/25 9:36
* @注释
*/
@Data
public class SpecialStaffVo {
private String id;
private String userId;
private String personnelRelationUnitId;
private String personnelRelationUnitName;
private String personnelRelationUnionName;
private String personnelRelationThreeUnitId;
private String personnelRelationThreeUnitName;
private String personnelRelationUnionGroupName;
private String unionRelationUnitId;
private String unionRelationThreeUnitId;
private String unionRelationUnionGroupName;
private Boolean isManyUnit;
private String specialStaffType;
private String specialStaffRemark;
}