This commit is contained in:
Paidax
2025-07-31 15:48:46 +08:00
parent ac02be1aec
commit 1510e28ab0
294 changed files with 36042 additions and 4361 deletions
@@ -16,14 +16,15 @@ import lombok.Getter;
@AllArgsConstructor
public enum MemberChangeOrigin {
PERSONAL("个人"),
PERSONAL("个人申请变更"),
BRANCH_UNION("分工会变更"),
BRANCH_UNION_VERIFICATION("分工会名单事项核对"),
UNION_GROUP("工会小组变更"),
SCHOOL_UNION("校工会变更"),
SCHOOL_UNION_VERIFICATION("校工会名单事项核对"),
SYSTEM("系统数据更新"),
OTHER("其他");
HAND_MOVEMENT("手动数据更新"),
OTHER("其他方式变更");
/**
* 避免和枚举类的name冲突
@@ -1,5 +1,6 @@
package com.budwk.app.zhgh.staffmanage.member.constant;
import com.budwk.app.base.annotation.DictEnum;
import lombok.AllArgsConstructor;
import lombok.Getter;
@@ -12,13 +13,22 @@ import lombok.Getter;
*/
@Getter
@AllArgsConstructor
@DictEnum(key = "MemberChangeType", name = "会员变更类型")
public enum MemberChangeType {
//变更类型
NEW("新入职"),
RESTORE("入会"),
WITHDRAWAL("退会"),
WORK("在职"),
LEAVE_SCHOOL("离校"),
RETIRE("退休"),
RESIGN("辞职"),
OUT("调出"),
LEAVE_OFFICE("离职"),
OTHER("其他减员"),
UNIT_CHANGE("单位异动"),
UNION_CHANGE("工会关系异动"),
BASIC_CHANGE("基本信息异动");
@@ -0,0 +1,156 @@
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.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.base.utils.PageUtil;
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.flow.enums.ProcessTaskStateEnum;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.web.commons.base.Globals;
import com.budwk.app.web.controllers.open.commons.service.CommonService;
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.MemberCommonService;
import com.budwk.app.zhgh.staffmanage.member.vo.MemberCommonVo;
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.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;
/**
* 会员入会申请分工会审核
* @author fky
*/
@IocBean
@Ok("json:full")
@ApiOperation("会员入会申请分工会审核")
@At("/platform/member/apply/branchUnionApproval")
public class MemberApplyBranchUnionApprovalController {
@Inject
private BpmService bpmService;
@Inject
private CommonService commonService;
@Inject
private MemberCommonService memberCommonService;
@Inject
private MemberApplyRecordService memberApplyRecordService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/apply/branchunionapproval/index.html")
@SaCheckPermission("member.apply.branchUnionApproval")
public void index() {
}
@At
@Ok("beetl:/platform/zhgh/staffmanage/member/apply/branchunionapproval/form.html")
@SaCheckPermission("member.apply.branchUnionApproval")
public void form() {
}
@At
@ApiOperation("会员入会申请分工会审核列表")
@SaCheckPermission("member.apply.branchUnionApproval")
public Result pageData(MemberApplyPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
info.id,
info.userName,
info.loginName,
info.unitName,
info.unionName,
info.userState,
info.preparedBy,
info.personType,
info.sign,
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
ins.variable instanceVariale,
t.id taskId,
t.taskName AS taskKey,
t.displayName taskName,
t.taskType,
t.performType taskPerformType,
t.taskState,
t.finishTime,
t.taskParentId,
t.variable taskVariable,
IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName,
IF(rt.id IS NOT NULL, 1, 0) AS canRevoke
FROM
wf_process_task t
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
LEFT JOIN member_apply_record info ON info.id = ins.businessNo
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10
LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10
$condition
""");
Cnd cnd = Cnd.NEW();
MemberApplyPageForm.buildSearch(cnd, pageForm);
if ("HMC".equals(Globals.SchoolCode)) {
cnd.and("t.taskName", "=", "8337f4ee-d8ff-45e2-8e21-978d916f64da");
} else {
cnd.and("t.taskName", "=", "9d94ac55-ef3d-4c28-9f77-1a8de099f1ad");
}
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
if (pageForm.getAudit()) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
} else {
cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode());
}
if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
cnd.desc("t.createdAt");
cnd.desc("info.applyDateTime");
} else {
cnd.orderBy("info." + pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
}
sql.setCondition(cnd);
Pagination<NutMap> pagination = memberApplyRecordService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@At
@ApiOperation("分工会审核撤回")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("member.apply.branchUnionApproval")
@SLog(tag = "会员管理-入会申请-分工会撤回", msg = "分工会入会审核撤回")
public Result revoke(@Valid String taskId) {
bpmService.revokeTask(taskId);
return Result.success();
}
}
@@ -1,186 +0,0 @@
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));
}
}
@@ -2,22 +2,21 @@ 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.base.utils.PageUtil;
import com.budwk.app.bpm.enums.BpmProcessInstanceStatusEnum;
import com.budwk.app.bpm.models.BpmProcessInstance;
import com.budwk.app.flow.engine.FlowEngine;
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 com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberApplyPageForm;
import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
import io.swagger.annotations.ApiOperation;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
@@ -28,27 +27,26 @@ 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.util.NutMap;
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")
@At("/platform/member/apply/submit")
public class MemberApplyController {
@Inject
private Dao dao;
@Inject
private BpmService bpmservice;
private FlowEngine flowEngine;
@Inject
private CommonService commonService;
private MemberCommonService memberCommonService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/apply/submit/index.html")
@@ -56,8 +54,77 @@ public class MemberApplyController {
public void index() {
}
@At
@Ok("beetl:/platform/zhgh/staffmanage/member/apply/submit/form.html")
@SaCheckPermission("member.apply.submit")
public void form() {
}
@At
@ApiOperation("会员入会申请,我的申请列表")
@SaCheckPermission("member.apply.submit")
public Result pageData(MemberApplyPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
info.id,
info.userName,
info.loginName,
info.unitName,
info.unionName,
info.userState,
info.preparedBy,
info.personType,
info.sign,
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
ins.variable instanceVariale,
t.id taskId,
t.taskName AS taskKey,
t.displayName taskName,
t.taskType,
t.performType taskPerformType,
t.taskState,
t.finishTime,
t.taskParentId,
t.variable taskVariable,
IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke,
(select MAX(id) from wf_process_task where processInstanceId = ins.id and taskName = 'startTask') AS startTaskId
FROM
member_apply_record info
LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id
LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
$condition
""");
Cnd cnd = Cnd.NEW();
MemberApplyPageForm.buildSearch(cnd, pageForm);
if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
cnd.desc("info.applyDateTime");
} else {
cnd.orderBy("info." + pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
}
sql.setCondition(cnd);
Pagination<NutMap> pagination = memberCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success().addData(pagination);
}
@At
@ApiOperation("删除入会申请")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("member.apply.submit")
@SLog(tag = "会员入会申请", msg = "删除入会申请id: ${args[0]}")
public Result onDelete(@Valid String id) {
dao.clear(MemberApplyRecord.class, Cnd.where("id", "=", id));
// 流程相关操作
flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id);
return Result.success();
}
@At
@ApiOperation("根据申请或修改,查询不同数据")
@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) {
@@ -69,53 +136,20 @@ public class MemberApplyController {
}
@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();
}
/**
* 提交申请
* 查询申请记录
* @param id
* @return
*/
@At
@Aop(TransAop.READ_COMMITTED)
@ApiOperation("提交入会申请")
@ApiOperation("根据id查询申请记录")
@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();
public Result findApplyById(String id) {
return Result.success(dao.fetch(MemberApplyRecord.class,id));
}
@At
@SaCheckPermission("member.apply.submit")
public Result getApplyUserByUnionOperate(@Valid String keyWord){
@@ -135,20 +169,32 @@ public class MemberApplyController {
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);
Pagination pagination = memberCommonService.listPageMap(1, 20, sql);
return Result.success(pagination.getList());
}
/**
* 校验当前申请人是否有未走完的流程,只有等流程走完才能再次申请
* @return
*/
@At
@SaCheckPermission("member.apply.submit")
public Result findApplyById(String id) {
return Result.success(dao.fetch(MemberApplyRecord.class,id));
@ApiOperation("校验当前申请人是否有未走完的流程")
public Result validateApply(){
int count = dao.count(BpmProcessInstance.class, Cnd.where("processInstanceInitiatorId", "=", SecurityUtil.getUserId())
.and("processInstanceStatus", "=", BpmProcessInstanceStatusEnum.RUNNING.name()));
return Result.success().addData(count);
}
/**
* 获取当前登录用户信息,是用来判断当前用户是否是会员
* @return
*/
@At
@ApiOperation("获取当前登录用户信息")
@SaCheckPermission("member.apply.submit")
public Result findUserInfo() {
public Result getSelfUserInfo() {
return Result.success(dao.fetch(View_user.class, Cnd.where("id", "=", SecurityUtil.getUserId())));
}
@@ -1,180 +0,0 @@
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,174 @@
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.StrUtil;
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.PageUtil;
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.flow.enums.ProcessTaskStateEnum;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.web.commons.base.Globals;
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.MemberCommonService;
import com.budwk.app.zhgh.staffmanage.member.vo.MemberCommonVo;
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.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.Map;
/**
* 会员入会申请校工会审核
* @author fky
*/
@IocBean
@Ok("json:full")
@At("/platform/member/apply/schoolUnionApproval")
public class MemberApplySchoolUnionApprovalController {
@Inject
private Dao dao;
@Inject
private BpmService bpmService;
@Inject
private CommonService commonService;
@Inject
private MemberCommonService memberCommonService;
@Inject
private MemberApplyRecordService memberApplyRecordService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/apply/schoolunionapproval/index.html")
@SaCheckPermission("member.apply.schoolUnionApproval")
public void index() {
}
@At
@Ok("beetl:/platform/zhgh/staffmanage/member/apply/schoolunionapproval/form.html")
@SaCheckPermission("member.apply.schoolUnionApproval")
public void form() {
}
@At
@ApiOperation("会员入会校工会审核列表")
@SaCheckPermission("member.apply.schoolUnionApproval")
public Result pageData(MemberApplyPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
info.id,
info.userName,
info.loginName,
info.unitName,
info.unionName,
info.userState,
info.preparedBy,
info.personType,
info.sign,
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
ins.variable instanceVariale,
t.id taskId,
t.taskName AS taskKey,
t.displayName taskName,
t.taskType,
t.performType taskPerformType,
t.taskState,
t.finishTime,
t.taskParentId,
t.variable taskVariable,
IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName,
IF(rt.id IS NOT NULL, 1, 0) AS canRevoke
FROM
wf_process_task t
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
LEFT JOIN member_apply_record info ON info.id = ins.businessNo
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10
LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10
$condition
""");
Cnd cnd = Cnd.NEW();
MemberApplyPageForm.buildSearch(cnd, pageForm);
if ("HMC".equals(Globals.SchoolCode)) {
cnd.and("t.taskName", "=", "5cdf34fe-4ba8-4e79-9832-ac5565a90d1a");
} else {
cnd.and("t.taskName", "=", "00b620c5-5c64-48bd-9394-3621c1d91af8");
}
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
if (pageForm.getAudit()) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
} else {
cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode());
}
if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
cnd.desc("t.createdAt");
cnd.desc("info.applyDateTime");
} else {
cnd.orderBy("info." + pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
}
sql.setCondition(cnd);
Pagination<NutMap> pagination = memberApplyRecordService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@At
@Aop(TransAop.READ_COMMITTED)
@ApiOperation("会员入会校工会审核")
@SaCheckPermission("member.apply.schoolUnionApproval")
@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 = memberCommonService.dao().fetch(MemberApplyRecord.class, Cnd.where("id", "=", approvalParam.getProcessInstanceBusinessId()));
Sys_user sysUser = new Sys_user();
BeanUtil.copyProperties(record, sysUser);
sysUser.setId(record.getUserId());
dao.updateIgnoreNull(sysUser);
}
bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, null);
return Result.success();
}
@At
@ApiOperation("校工会审核撤回")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("member.apply.schoolUnionApproval")
@SLog(tag = "会员管理-入会申请-校工会撤回", msg = "校工会入会审核撤回")
public Result revoke(@Valid String taskId) {
bpmService.revokeTask(taskId);
return Result.success();
}
}
@@ -1,181 +0,0 @@
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,72 @@
package com.budwk.app.zhgh.staffmanage.member.controller.apply;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
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.bpm.vo.BpmTaskApprovalRecordVo;
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.MemberCommonService;
import com.budwk.app.zhgh.staffmanage.member.vo.MemberCommonVo;
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.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 javax.validation.Valid;
import java.util.List;
/**
* 我的申请
* @author fky
*/
@IocBean
@Ok("json:full")
@ApiOperation("会员入会申请,查看")
@At("/platform/member/apply/view")
public class MemberApplyViewController {
@Inject
private Dao dao;
@Inject
private BpmService bpmService;
@Inject
private MemberCommonService memberCommonService;
@Inject
private MemberApplyRecordService memberApplyRecordService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/apply/view/index.html")
@SaCheckPermission("member.apply.submit")
public void index() {
}
/**
* 获取申请信息
* @param id
* @return
*/
@At
@ApiOperation("获取申请信息")
@SaCheckPermission(value = {"member.apply.submit", "member.apply.branchUnionApproval", "member.apply.branchUnionApproval"}, mode = SaMode.OR)
public Result findMemberApplyRecord(@Valid String id) {
MemberApplyRecord record = dao.fetch(MemberApplyRecord.class, id);
return Result.success().addData(record);
}
}
@@ -1,113 +0,0 @@
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));
}
}
@@ -1,124 +0,0 @@
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());
}
}
}
@@ -1,58 +0,0 @@
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,160 @@
package com.budwk.app.zhgh.staffmanage.member.controller.change;
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.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.base.utils.PageUtil;
import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum;
import com.budwk.app.bpm.models.BpmProcessInstance;
import com.budwk.app.bpm.models.BpmProcessTask;
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.flow.enums.ProcessTaskStateEnum;
import com.budwk.app.sys.models.Sys_user_history;
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.MemberChangePageForm;
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.MemberCommonService;
import io.swagger.annotations.ApiModelProperty;
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.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.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;
/**
* @version 1.0
* @Author zzr
* @nameMemberBranchUnionAuditController
* @Date 2024/8/13 8:48
* @注释 分工会管理,分工会审核
*/
@Slf4j
@IocBean
@Ok("json")
@At("/platform/member/change/branchUnion/audit")
public class MemberBranchUnionAuditController {
@Inject
private Dao dao;
@Inject
private BpmService bpmService;
@Inject
private CommonService commonService;
@Inject
private MemberCommonService memberCommonService;
@Inject
private MemberBranchUnionManageService memberBranchUnionManageService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/change/branchUnionAudit/index.html")
@SaCheckPermission("member.change.branchUnion.audit")
public void index() {
}
@At
@Ok("beetl:/platform/zhgh/staffmanage/member/change/branchUnionAudit/form.html")
@SaCheckPermission("member.change.branchUnion.audit")
public void form() {
}
@At
@ApiModelProperty("会员变更申请,分工会审核列表")
@SaCheckPermission("member.change.branchUnion.audit")
public Result pageData(MemberChangePageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
info.id,
info.sex,
info.userName,
info.loginName,
info.unitName,
info.unionName,
info.userState,
info.preparedBy,
info.personType,
info.changeTypes,
info.applyDateTime,
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
ins.variable instanceVariale,
t.id taskId,
t.taskName AS taskKey,
t.displayName taskName,
t.taskType,
t.performType taskPerformType,
t.taskState,
t.finishTime,
t.taskParentId,
t.variable taskVariale
FROM
wf_process_task t
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
LEFT JOIN member_change_record info ON info.id = ins.businessNo
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
$condition
""");
Cnd cnd = Cnd.NEW();
pageForm.buildSearch(cnd, "info.");
cnd.and("t.taskName", "=", "8ca3bcf0-7b86-4ef2-b19f-b76a1707e2da");
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
if (pageForm.getAudit()) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
} else {
cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode());
}
if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
cnd.desc("info.applyDateTime");
} else {
cnd.orderBy("info." + pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
}
sql.setCondition(cnd);
Pagination<NutMap> pagination = memberCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success().addData(pagination);
}
@At
@ApiOperation("分工会审核撤回")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("member.change.branchUnion.audit")
@SLog(tag = "会员管理-分工会管理", type = "memberBranchUnionManage", msg = "分工会审核撤回")
public Result revoke(@Valid String taskId) {
bpmService.revokeTask(taskId);
return Result.success();
}
}
@@ -0,0 +1,150 @@
package com.budwk.app.zhgh.staffmanage.member.controller.change;
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.base.utils.PageUtil;
import com.budwk.app.bpm.service.BpmService;
import com.budwk.app.sys.models.Sys_union;
import com.budwk.app.sys.models.Sys_unit;
import com.budwk.app.sys.models.Sys_user;
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.models.MemberChangeRecord;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberChangePageForm;
import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
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.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 java.util.List;
import java.util.stream.Stream;
@Slf4j
@IocBean
@Ok("json:full")
@ApiModel("会员变更申请")
@At("/platform/member/change/apply")
public class MemberChangeApplyController {
@Inject
private Dao dao;
@Inject
private BpmService bpmService;
@Inject
private CommonService commonService;
@Inject
private MemberCommonService memberCommonService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/change/submit/index.html")
@SaCheckPermission("member.change.apply")
public void index() {
}
@At
@Ok("beetl:/platform/zhgh/staffmanage/member/change/submit/form.html")
@SaCheckPermission("member.change.apply")
public void form() {
}
@At
@ApiOperation("会员变更申请,我的申请列表")
@SaCheckPermission("member.change.apply")
public Result pageData(MemberChangePageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
info.id,
info.username,
info.loginname,
info.sex,
info.unitName,
info.unionName,
info.userState,
info.preparedBy,
info.personType,
info.changeTypes,
info.applyDateTime,
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
ins.variable instanceVariale,
t.id taskId,
t.taskName AS taskKey,
t.displayName taskName,
t.taskType,
t.performType taskPerformType,
t.taskState,
t.finishTime,
t.taskParentId,
t.variable taskVariale
FROM
member_change_record info
LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id
LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id
AND t.taskState = 10
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
$condition
""");
Cnd cnd = Cnd.NEW();
pageForm.buildSearch(cnd, "info.");
if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
cnd.desc("info.applyDateTime");
} else {
cnd.orderBy("info." + pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
}
sql.setCondition(cnd);
Pagination<NutMap> pagination = memberCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success().addData(pagination);
}
@At
@ApiModelProperty("根据id查询变更记录")
@SaCheckPermission("member.change.apply")
public Result findChangeById(String id){
return Result.success().addData(dao.fetch(MemberChangeRecord.class, id));
}
/**
* 不知道有什么用,移过来的
* @param userId
* @return
*/
@At
@SaCheckPermission(value = {"member.change.branchUnion.audit","member.change.schoolUnion.audit"}, mode = SaMode.OR)
public Result getUserByIdForMemberChange(String userId){
View_user user = dao.fetch(View_user.class, Cnd.where("id", "=", userId));
NutMap nutMap = Lang.obj2nutmap(user);
if (StrUtil.isNotBlank(user.getUnionId())) {
Sys_union union = dao.fetch(Sys_union.class, Cnd.where("id", "=", user.getUnionId()));
nutMap.put("union", union);
}
if (StrUtil.isNotBlank(user.getUnitId())) {
Sys_unit unit = dao.fetch(Sys_unit.class, Cnd.where("id", "=", user.getUnitId()));
nutMap.put("unit", unit);
}
return Result.success().addData(nutMap);
}
}
@@ -1,61 +1,145 @@
//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);
// }
//
//
//
//}
package com.budwk.app.zhgh.staffmanage.member.controller.change;
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 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.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum;
import com.budwk.app.bpm.models.BpmProcessInstance;
import com.budwk.app.bpm.models.BpmProcessTask;
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
import com.budwk.app.bpm.service.BpmService;
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.constant.MemberChangeType;
import com.budwk.app.zhgh.staffmanage.member.models.MemberChangeRecord;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm;
import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
import lombok.extern.slf4j.Slf4j;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
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 org.nutz.mvc.annotation.Param;
import java.util.List;
import java.util.Map;
/**
* @version 1.0
* @Author zzr
* @nameMemberChangeManageController
* @Date 2024/8/12 14:06
* @注释 会员变更高级管理
*/
@Slf4j
@IocBean
@Ok("json")
@At("/platform/member/change/manage")
public class MemberChangeManageController {
@Inject
private Dao dao;
@Inject
private BpmService bpmService;
@Inject
private CommonService commonService;
@Inject
private MemberCommonService memberCommonService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/change/manage/index.html")
@SaCheckPermission(value = {"member.change.mange", "staff.member.change.mange"}, mode = SaMode.OR)
public void index() {
}
@At
@SaCheckPermission(value = {"member.change.mange", "staff.member.change.mange"}, mode = SaMode.OR)
public Result pageData(MemberManagePageForm pageForm){
Sql sql = memberCommonService.getSql(pageForm, "schoolUnion");
Pagination pagination = memberCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@At
@RepeatSubmit
@Aop(TransAop.READ_COMMITTED)
@SLog(tag = "会员高级管理-会员变更", msg = "分工会/校工会会员管理员提交变更")
@SaCheckPermission(value = {"member.change.mange", "staff.member.change.mange"}, mode = SaMode.OR)
public Result doSubmitChange(@Param("record") MemberChangeRecord record, @Param("approvalRemark") String approvalRemark){
// 检验是否有变更
if (Lang.isEmpty(record)) {
return Result.error("未获取到异动数据");
}
List<NutMap> changeInfos = memberCommonService.getChangeInfos(record);
if (Lang.isEmpty(changeInfos)) {
return Result.error("未校验到变更数据,请确认数据是否存在变更");
}
if (Lang.isEmpty(record.getChangeTypes())) {
record.setChangeTypes(List.of(MemberChangeType.BASIC_CHANGE.name()));
} else {
List<String> changeTypes = record.getChangeTypes();
changeTypes.add(MemberChangeType.BASIC_CHANGE.name());
record.setChangeTypes(changeTypes);
}
record.setApplyDateTime(DateUtil.date());
record.setChangeOrigin("党委会变更");
dao.insertOrUpdate(record);
bpmService.startSubmitProcessInstance(BpmProcessConstant.MEMBER_CHANGE.name(),
"【会员变更】" + record.getUsername(), record.getId(), List.of(SecurityUtil.getUserLoginname()), null);
// 有这个菜单权限的,那就是默认分工会审核通过了
BpmProcessInstance instance = dao.fetch(BpmProcessInstance.class, Cnd.where("processInstanceBusinessId", "=", record.getId()));
BpmProcessTask task = dao.fetch(BpmProcessTask.class, Cnd.where(BpmProcessTask::getProcessInstanceId, "=", instance.getId())
.desc(BpmProcessTask::getCreatedAt));
BpmTaskApprovalParam param = new BpmTaskApprovalParam();
param.setProcessInstanceId(instance.getId());
param.setProcessInstanceBusinessId(record.getId());
param.setProcessInstanceTaskId(task.getId());
param.setBpmTaskApprovalType(BpmTaskApprovalTypeEnum.PASS.name());
param.setBpmTaskApprovalTypeEnum(BpmTaskApprovalTypeEnum.PASS);
param.setApprovalOpinion("分工会审核通过");
// 表示分工会审核通过
param.getBpmTaskApprovalTypeEnum();
Map<String, Object> variables = BeanUtil.beanToMap(param);
bpmService.completeTask(param.getProcessInstanceTaskId(), param.getBpmTaskApprovalTypeEnum(), variables, List.of(SecurityUtil.getUserLoginname()));
// 如果有校工会或者超管的角色,直接审核通过了
if (AuthUtil.hasRoleOr(RoleConstant.SCHOOL_UNION_CHAIRMAN.name(), RoleConstant.SCHOOL_UNION_MEMBER_ADMIN.name(), RoleConstant.SYSADMIN.name())) {
BpmProcessInstance committeeInstance = dao.fetch(BpmProcessInstance.class, Cnd.where("processInstanceBusinessId", "=", record.getId()));
BpmProcessTask committeeTask = dao.fetch(BpmProcessTask.class, Cnd.where(BpmProcessTask::getProcessInstanceId, "=", committeeInstance.getId())
.desc(BpmProcessTask::getCreatedAt));
BpmTaskApprovalParam committeeParam = new BpmTaskApprovalParam();
committeeParam.setProcessInstanceId(committeeInstance.getId());
committeeParam.setProcessInstanceBusinessId(record.getId());
committeeParam.setProcessInstanceTaskId(committeeTask.getId());
committeeParam.setBpmTaskApprovalType(BpmTaskApprovalTypeEnum.PASS.name());
committeeParam.setBpmTaskApprovalTypeEnum(BpmTaskApprovalTypeEnum.PASS);
committeeParam.setApprovalOpinion("校工会审核通过");
memberCommonService.compareChangeInfoAndUpdateMember(committeeParam.getProcessInstanceBusinessId());
bpmService.completeTask(committeeParam.getProcessInstanceTaskId(), committeeParam.getBpmTaskApprovalTypeEnum(), null, null);
}
return Result.success();
}
}
@@ -4,28 +4,32 @@ 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 com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
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
* @nameMemberChangeRecordsController
* @Date 2024/8/8 8:40
* @注释
* @nameMemberSchoolRecordController
* @Date 2024/8/13 16:27
* @注释 校工会 会员变更记录
*/
@Slf4j
@IocBean
@Ok("json")
@At("/platform/member/change/record")
@Slf4j
public class MemberChangeRecordController {
@Inject
private MemberManageService memberService;
private MemberCommonService memberCommonService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/change/record/index.html")
@@ -35,8 +39,16 @@ public class MemberChangeRecordController {
@At
@SaCheckPermission("member.change.record")
public Result pageData(MemberManagePageForm pageForm) {
Pagination pagination = memberService.memberHistoryRecords(pageForm);
public Result pageData(MemberManagePageForm pageForm){
Pagination pagination = memberCommonService.memberHistoryRecords(pageForm);
return Result.success(pagination);
}
@At
@SaCheckPermission("member.change.record")
public Result findAuditChangeInfo(@Valid String recordId) {
List<NutMap> list = memberCommonService.getChangeInfos(recordId);
return Result.success(list);
}
}
@@ -0,0 +1,89 @@
package com.budwk.app.zhgh.staffmanage.member.controller.change;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.result.Result;
import com.budwk.app.bpm.service.BpmService;
import com.budwk.app.zhgh.staffmanage.member.models.MemberChangeRecord;
import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
import io.swagger.annotations.ApiModel;
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.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.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberChangeMineController
* @Date 2025/2/14 11:13
* @注释
*/
@IocBean
@Ok("json:full")
@ApiModel("会员变更申请查看")
@At("/platform/member/change/view")
public class MemberChangeViewController {
@Inject
private Dao dao;
@Inject
private BpmService bpmService;
@Inject
private MemberCommonService memberCommonService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/change/view/index.html")
@SaCheckPermission("member.change.apply")
public void index() {
}
@At
@ApiOperation("个人申请撤回")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("member.change.apply")
@SLog(tag = "会员变更申请", msg = "撤回申请")
public Result doRevoke(@Valid String id){
bpmService.revokeApply(id);
return Result.success();
}
@At
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("member.change.apply")
@SLog(tag = "会员入会申请", msg = "删除申请")
public Result doDelete(String id){
dao.clear(MemberChangeRecord.class, Cnd.where("id", "=", id));
bpmService.deleteInstance(id);
return Result.success();
}
@At
@ApiOperation("根据id查询变更记录")
@SaCheckPermission("member.change.apply")
public Result findMemberChangeRecord(String id){
MemberChangeRecord record = dao.fetch(MemberChangeRecord.class, id);
NutMap nutMap = Lang.obj2nutmap(record);
List<NutMap> changeInfos = memberCommonService.getChangeInfos(nutMap.getString("id"));
nutMap.put("changeInfos", changeInfos);
return Result.success().addData(nutMap);
}
}
@@ -0,0 +1,222 @@
package com.budwk.app.zhgh.staffmanage.member.controller.change;
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.base.utils.PageUtil;
import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum;
import com.budwk.app.bpm.models.BpmProcessInstance;
import com.budwk.app.bpm.models.BpmProcessTask;
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.flow.enums.ProcessTaskStateEnum;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.sys.models.Sys_user_history;
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.models.MemberChangeRecord;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberChangePageForm;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm;
import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
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.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.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/change/schoolUnion/audit")
public class MemberSchoolUnionAuditController {
@Inject
private Dao dao;
@Inject
private BpmService bpmService;
@Inject
private MemberCommonService memberCommonService;
@Inject
private MemberSchoolUnionManageService memberSchoolUnionManageService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/change/schoolUnionAudit/index.html")
@SaCheckPermission("member.change.schoolUnion.audit")
public void index() {
}
@At
@Ok("beetl:/platform/zhgh/staffmanage/member/change/schoolUnionAudit/form.html")
@SaCheckPermission("member.change.schoolUnion.audit")
public void form() {
}
@At
@SaCheckPermission("member.change.schoolUnion.audit")
public Result pageData(MemberChangePageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
info.id,
info.sex,
info.userName,
info.loginName,
info.unitName,
info.unionName,
info.userState,
info.preparedBy,
info.personType,
info.changeTypes,
info.applyDateTime,
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
ins.variable instanceVariale,
t.id taskId,
t.taskName AS taskKey,
t.displayName taskName,
t.taskType,
t.performType taskPerformType,
t.taskState,
t.finishTime,
t.taskParentId,
t.variable taskVariale
FROM
wf_process_task t
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
LEFT JOIN member_change_record info ON info.id = ins.businessNo
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
$condition
""");
Cnd cnd = Cnd.NEW();
pageForm.buildSearch(cnd, "info.");
cnd.and("t.taskName", "=", "f18d8726-75bc-43a9-87a8-2dd73341bdce");
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
if (pageForm.getAudit()) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
} else {
cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode());
}
if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
cnd.desc("info.applyDateTime");
} else {
cnd.orderBy("info." + pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
}
sql.setCondition(cnd);
Pagination<NutMap> pagination = memberCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success().addData(pagination);
}
@At
@RepeatSubmit
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("member.change.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)) {
MemberChangeRecord record = memberCommonService.dao().fetch(MemberChangeRecord.class, Cnd.where("id", "=", approvalParam.getProcessInstanceBusinessId()));
if (StrUtil.isNotEmpty(approvalParam.getApprovalRemark())) {
memberCommonService.dao().update(MemberChangeRecord.class, Chain.make("remark", approvalParam.getApprovalRemark()), Cnd.where("id", "=", record.getId()));
}
memberCommonService.compareChangeInfoAndUpdateMember(record);
}
bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, null);
return Result.success();
}
@At
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("member.change.schoolUnion.audit")
@SLog(type = "memberChange", tag = "会员变更", msg = "校工会批量审核")
public Object doBatchApproval(@Param("data") String[] ids){
if (ids.length == 0) {
return Result.error("未获取到选择数据");
}
for (String id : ids) {
BpmProcessInstance committeeInstance = dao.fetch(BpmProcessInstance.class, Cnd.where("processInstanceBusinessId", "=", id));
BpmProcessTask committeeTask = dao.fetch(BpmProcessTask.class, Cnd.where(BpmProcessTask::getProcessInstanceId, "=", committeeInstance.getId())
.desc(BpmProcessTask::getCreatedAt));
BpmTaskApprovalParam committeeParam = new BpmTaskApprovalParam();
committeeParam.setProcessInstanceId(committeeInstance.getId());
committeeParam.setProcessInstanceBusinessId(id);
committeeParam.setProcessInstanceTaskId(committeeTask.getId());
committeeParam.setBpmTaskApprovalType(BpmTaskApprovalTypeEnum.PASS.name());
committeeParam.setBpmTaskApprovalTypeEnum(BpmTaskApprovalTypeEnum.PASS);
committeeParam.setApprovalOpinion("校工会审核通过");
memberCommonService.compareChangeInfoAndUpdateMember(committeeParam.getProcessInstanceBusinessId());
bpmService.completeTask(committeeParam.getProcessInstanceTaskId(), committeeParam.getBpmTaskApprovalTypeEnum(), null, null);
}
return Result.success();
}
@At
@ApiOperation("校工会审核撤回")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("member.change.schoolUnion.audit")
@SLog(tag = "会员管理-校工会管理", type = "memberSchoolUnionAudit", msg = "校工会审核撤回")
public Result revoke(@Valid String taskId) {
bpmService.revokeTask(taskId);
// 审核通过的撤回,要将数据也改变回去
BpmProcessTask oldTask = dao.fetch(BpmProcessTask.class, taskId);
BpmProcessInstance fetch = dao.fetch(BpmProcessInstance.class, oldTask.getProcessInstanceId());
String businessId = fetch.getProcessInstanceBusinessId();
// 先查询历史记录,然后再把历史记录赋值给现在数据库存储的记录
Sys_user_history history = dao.fetch(Sys_user_history.class, Cnd.where(Sys_user_history::getRecordId, "=", businessId));
Sys_user info = dao.fetch(Sys_user.class, Cnd.where(Sys_user::getLoginname, "=", history.getLoginname()));
String userId = info.getId();
BeanUtil.copyProperties(history, info);
info.setId(userId);
dao.update(info);
dao.delete(history);
return Result.success();
}
}
@@ -1,128 +0,0 @@
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));
}
}
@@ -1,93 +0,0 @@
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());
}
}
}
@@ -1,56 +0,0 @@
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);
}
}
@@ -1,4 +1,4 @@
package com.budwk.app.zhgh.staffmanage.member.controller.branch.verification;
package com.budwk.app.zhgh.staffmanage.member.controller.verification;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
@@ -12,20 +12,16 @@ 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.models.*;
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 com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.nutz.aop.interceptor.ioc.TransAop;
@@ -65,7 +61,7 @@ public class MemberBranchVerificationCheckController {
private MemberListVerificationService memberListVerificationService;
@Inject
private MemberManageService memberManageService;
private MemberCommonService memberCommonService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/branch/verification/check/index.html")
@@ -113,16 +109,15 @@ public class MemberBranchVerificationCheckController {
@ApiOperation("分工会 名单核对事项,单个人员变更")
@SaCheckPermission("member.branchUnion.verification.check")
@SLog(tag = "分工会管理-名单核对事项", type = "branchUnionVerification", msg = "分工会单个人员变更")
public Result doCheckMember(@Param("record") MemberApplyRecord record) {
public Result doCheckMember(@Param("record") MemberChangeRecord record) {
if (Objects.isNull(record)) {
return Result.error("数据获取失败");
}
Dao dao = memberManageService.dao();
// memberManageService.compareMemberChangeInfoAndUpdateUser(record);
Dao dao = memberCommonService.dao();
// 校验是否有变更的东西
memberManageService.compareMemberChangeInfo(record);
memberCommonService.compareChangeInfoAndUpdateMember(record);
record.setChangeOrigin(MemberChangeOrigin.BRANCH_UNION_VERIFICATION.name());
MemberApplyRecord applyRecord = dao.fetch(MemberApplyRecord.class, Cnd.where("userId", "=", record.getUserId())
MemberChangeRecord applyRecord = dao.fetch(MemberChangeRecord.class, Cnd.where("userId", "=", record.getUserId())
.and("verificationProjectId", "=", record.getVerificationProjectId()));
//查出当前核对事项是否有变更记录有则修改
if (Lang.isNotEmpty(applyRecord)) {
@@ -152,7 +147,7 @@ public class MemberBranchVerificationCheckController {
@SaCheckPermission("member.branchUnion.verification.check")
@SLog(tag = "分工会管理-名单核对事项", type = "branchUnionVerification", msg = "名单核对事项无误提交")
public Result correctSubmission(@Param("data") @Valid MemberVerificationBranchUnionFeedbackParam param) {
memberManageService.dao().update(MemberVerificationBranchUnionFeedback.class,
memberCommonService.dao().update(MemberVerificationBranchUnionFeedback.class,
Chain.make("isSubmit", true).add("status", "分工会无误提交")
.add("welfareJson", param.getWelfareJson()),
Cnd.where("verificationProjectId", "=", param.getVerificationProjectId())
@@ -189,7 +184,7 @@ public class MemberBranchVerificationCheckController {
@At
@SaCheckPermission("member.branchUnion.verification.check")
public Result validateSubmitButton(@Valid @Param("verificationProjectId") String verificationProjectId) {
MemberVerificationBranchUnionFeedback feedback = memberManageService.dao().fetch(MemberVerificationBranchUnionFeedback.class,
MemberVerificationBranchUnionFeedback feedback = memberCommonService.dao().fetch(MemberVerificationBranchUnionFeedback.class,
Cnd.where("verificationProjectId", "=", verificationProjectId).and("unionId", "=", SecurityUtil.getUnionId()));
boolean flag = feedback.getBranchUnionSubmitNum() == 0 || feedback.getBranchUnionSubmit();
@@ -240,15 +235,10 @@ public class MemberBranchVerificationCheckController {
@ApiOperation("分工会 名单核对事项,获取变更记录")
@SaCheckPermission("member.branchUnion.verification.check")
public Result getVerificationChangeInfo(@Valid @Param("data") MemberVerificationGetChangeParam param) {
MemberApplyRecord record = memberManageService.dao().fetch(MemberApplyRecord.class,
MemberChangeRecord record = memberCommonService.dao().fetch(MemberChangeRecord.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(memberCommonService.getChangeInfos(record));
}
return Result.error();
}
@@ -258,9 +248,9 @@ public class MemberBranchVerificationCheckController {
@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,
MemberVerificationBranchUnionFeedback fetch = memberCommonService.dao().fetch(MemberVerificationBranchUnionFeedback.class,
Cnd.where("verificationProjectId", "=", verificationProjectId).and("unionId", "=", unionId));
MemberListVerificationProject verificationProject = memberManageService.dao().fetch(MemberListVerificationProject.class, Cnd.where("id", "=", verificationProjectId));
MemberListVerificationProject verificationProject = memberCommonService.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());
@@ -1,4 +1,4 @@
package com.budwk.app.zhgh.staffmanage.member.controller.school.verification;
package com.budwk.app.zhgh.staffmanage.member.controller.verification;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.date.DateUtil;
@@ -14,15 +14,11 @@ 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.models.*;
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;
@@ -188,7 +184,7 @@ public class MemberListVerificationController {
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(MemberChangeRecord.class, Cnd.where("verificationProjectId", "=", verificationProjectId));
dao.clear(MemberListVerificationUser.class, Cnd.where("verificationProjectId", "=", verificationProjectId));
dao.clear(MemberVerificationBranchUnionFeedback.class, Cnd.where("verificationProjectId", "=", verificationProjectId));
return Result.success();
@@ -1,4 +1,4 @@
package com.budwk.app.zhgh.staffmanage.member.controller.school.verification;
package com.budwk.app.zhgh.staffmanage.member.controller.verification;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
@@ -6,7 +6,6 @@ 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;
@@ -16,16 +15,12 @@ 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.models.*;
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 com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
@@ -33,9 +28,7 @@ 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;
@@ -68,7 +61,7 @@ public class MemberSchoolVerificationCheckController {
private MemberListVerificationService memberListVerificationService;
@Inject
private MemberManageService memberManageService;
private MemberCommonService memberCommonService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/school/verification/check/index.html")
@@ -96,15 +89,10 @@ public class MemberSchoolVerificationCheckController {
@At
@SaCheckPermission("member.schoolUnion.verification.check")
public Result getVerificationChangeInfo(@Valid @Param("data") MemberVerificationGetChangeParam param) {
MemberApplyRecord record = memberManageService.dao().fetch(MemberApplyRecord.class,
MemberChangeRecord record = memberCommonService.dao().fetch(MemberChangeRecord.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(memberCommonService.getChangeInfos(record));
}
return Result.success();
}
@@ -126,18 +114,18 @@ public class MemberSchoolVerificationCheckController {
Chain chain = Chain.make("schoolUnionChecked", true);
chain.add("verificationOption", param.getOption());
MemberApplyRecord record = memberManageService.dao().fetch(MemberApplyRecord.class,
MemberChangeRecord record = memberCommonService.dao().fetch(MemberChangeRecord.class,
Cnd.where("userId", "=", param.getUserId())
.and("verificationProjectId", "=", param.getVerificationProjectId()));
if (param.getFlag()) {
chain.add("currentState", 2);
memberManageService.compareMemberChangeInfoAndUpdateUser(record);
memberCommonService.compareChangeInfoAndUpdateMember(record);
} else {
chain.add("currentState", 1);
memberManageService.update(record);
memberCommonService.update(record);
}
memberManageService.dao().update(MemberListVerificationUser.class, chain,
memberCommonService.dao().update(MemberListVerificationUser.class, chain,
Cnd.where("userId", "=", param.getUserId()).and("verificationProjectId", "=", param.getVerificationProjectId()));
return Result.success();
}
@@ -148,19 +136,19 @@ public class MemberSchoolVerificationCheckController {
@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,
MemberVerificationBranchUnionFeedback fetch = memberCommonService.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);
memberCommonService.dao().update(fetch);
Cnd cnd = Cnd.NEW();
cnd.and("unionId", "=", param.getUnionId());
cnd.and("verificationProjectId", "=", param.getVerificationProjectId());
memberManageService.dao().update(MemberListVerificationUser.class,
memberCommonService.dao().update(MemberListVerificationUser.class,
Chain.make("branchUnionChecked", false).add("schoolUnionChecked", true),
cnd);
return Result.success();
@@ -179,7 +167,7 @@ public class MemberSchoolVerificationCheckController {
@SaCheckPermission("member.schoolUnion.verification.check")
public Result getChangeTypeUserPageData(MemberListVerificationPageForm pageForm) {
Sql sql = memberListVerificationService.getChangeTypeUserSql(pageForm);
Pagination pagination = memberManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
Pagination pagination = memberCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@@ -189,7 +177,7 @@ public class MemberSchoolVerificationCheckController {
@SaCheckPermission("member.schoolUnion.verification.check")
public void exportChangeTypeUserByUnionIdExcel(MemberListVerificationPageForm pageForm, HttpServletResponse response) {
Sql sql = memberListVerificationService.getChangeTypeUserSql(pageForm);
List<NutMap> list = memberManageService.listMap(sql);
List<NutMap> list = memberCommonService.listMap(sql);
List<ExcelExportEntity> excelExportEntities = memberListVerificationService.buildExportEntities();
NutMap nutMap = list.stream().findFirst().orElse(NutMap.NEW());
String labelName = "";
@@ -215,9 +203,9 @@ public class MemberSchoolVerificationCheckController {
@Ok("void")
@SaCheckPermission("member.schoolUnion.verification.check")
public void exportAllChangeTypeUserExcel(MemberListVerificationPageForm pageForm, HttpServletResponse response){
MemberListVerificationProject project = memberManageService.dao().fetch(MemberListVerificationProject.class, pageForm.getVerificationProjectId());
MemberListVerificationProject project = memberCommonService.dao().fetch(MemberListVerificationProject.class, pageForm.getVerificationProjectId());
Sql sql = memberListVerificationService.getChangeTypeUserSql(pageForm);
List<NutMap> list = memberManageService.listMap(sql);
List<NutMap> list = memberCommonService.listMap(sql);
List<ExcelExportEntity> excelExportEntities = memberListVerificationService.buildExportEntities();
String labelName = "";
switch (pageForm.getChangeType()) {
@@ -244,13 +232,13 @@ public class MemberSchoolVerificationCheckController {
@ApiOperation("校工会 名单核对事项,单个人员变更")
@SaCheckPermission("member.schoolUnion.verification.check")
@SLog(tag = "校工会管理-名单核对事项", type = "schoolUnionVerification", msg = "校工会单个人员变更")
public Result doCheckMember(@Param("record") MemberApplyRecord record){
public Result doCheckMember(@Param("record") MemberChangeRecord record){
if (Objects.isNull(record)) {
return Result.error("数据获取失败");
}
Dao dao = memberManageService.dao();
Dao dao = memberCommonService.dao();
record.setChangeOrigin(MemberChangeOrigin.SCHOOL_UNION_VERIFICATION.name());
MemberApplyRecord applyRecord = dao.fetch(MemberApplyRecord.class, Cnd.where("userId", "=", record.getUserId())
MemberChangeRecord applyRecord = dao.fetch(MemberChangeRecord.class, Cnd.where("userId", "=", record.getUserId())
.and("verificationProjectId", "=", record.getVerificationProjectId()));
// 如果之前有变更删除之前记录
if (Lang.isNotEmpty(applyRecord)) {
@@ -271,7 +259,7 @@ public class MemberSchoolVerificationCheckController {
.and("verificationProjectId", "=", record.getVerificationProjectId()));
dao.clear(Sys_user_history.class, Cnd.where("recordId", "=", record.getId()));
memberManageService.compareMemberChangeInfoAndUpdateUser(record);
memberCommonService.compareChangeInfoAndUpdateMember(record);
dao.update(MemberListVerificationUser.class,
Chain.make("schoolUnionChecked", true).add("currentState", 2),
@@ -289,13 +277,13 @@ public class MemberSchoolVerificationCheckController {
@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,
MemberVerificationBranchUnionFeedback feedback = memberCommonService.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);
memberCommonService.dao().update(feedback);
return Result.success();
}
@@ -305,7 +293,7 @@ public class MemberSchoolVerificationCheckController {
@Ok("void")
@SaCheckPermission("member.schoolUnion.verification.check")
public void doExportByPageDataForExcel(MemberListVerificationPageForm pageForm, HttpServletResponse response){
MemberListVerificationProject project = memberManageService.dao().fetch(MemberListVerificationProject.class, pageForm.getVerificationProjectId());
MemberListVerificationProject project = memberCommonService.dao().fetch(MemberListVerificationProject.class, pageForm.getVerificationProjectId());
List<NutMap> mapList = memberListVerificationService.getSchoolListVerificationUnion(pageForm);
mapList.forEach(v-> {
v.put("branchUnionSubmit" ,v.getBoolean("branchUnionSubmit") ? "已提交" : "未提交");
@@ -0,0 +1,93 @@
package com.budwk.app.zhgh.staffmanage.member.interceptor;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.flow.constant.FlowConst;
import com.budwk.app.flow.engine.FlowInterceptor;
import com.budwk.app.flow.engine.core.Execution;
import com.budwk.app.flow.engine.core.ServiceContext;
import com.budwk.app.flow.enums.ProcessSubmitTypeEnum;
import com.budwk.app.sys.models.Sys_role;
import com.budwk.app.sys.models.Sys_union;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.sys.models.Sys_user_role;
import com.budwk.app.sys.views.View_user;
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
import com.budwk.app.zhgh.staffmanage.specialstaff.model.SpecialStaff;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.json.Json;
/**
* @version 1.0
* @Author zzr
* @nameMemberApplyBranchApprovalInterceptor
* @Date 2025/7/29 17:14
* @注释
*/
public class MemberApplyBranchApprovalInterceptor implements FlowInterceptor {
@Override
public void intercept(Execution execution) {
System.out.println("member apply branch approval ..................");
String formDataStr = execution.getArgs().getStr(FlowConst.FORM_DATA);
MemberApplyRecord record = Json.fromJson(MemberApplyRecord.class, formDataStr);
Dao dao = ServiceContext.find(Dao.class);
// 如果是HMC,分工会接收,要判断更会关系有没有变化,然后再去改变用户数据
boolean submitType = execution.getArgs().getInt("submitType").equals(ProcessSubmitTypeEnum.AGREE.getCode());
if (submitType) {
if ("HMC".equals(record.getOrigin())) {
// 判断是否改变了工会关系
View_user user = dao.fetch(View_user.class, Cnd.where("id", "=", record.getUserId()));
if (!ObjectUtil.equals(user.getUnionId(), record.getAllocationUnionId())) {
// 去判断特殊人员表里面有没有这些人,有的话先删除再增加
if (dao.count(SpecialStaff.class, Cnd.where("userId", "=", record.getUserId())) > 0) {
dao.clear(SpecialStaff.class, Cnd.where("userId", "=", record.getUserId()));
user = dao.fetch(View_user.class, Cnd.where("id", "=", record.getUserId()));
}
// 获取分配工会信息
Sys_union union = dao.fetch(Sys_union.class, Cnd.where("id", "=", record.getAllocationUnionId()));
SpecialStaff staff = new SpecialStaff();
staff.setUserId(record.getUserId());
staff.setPersonnelRelationUnitId(user.getUnitId());
staff.setPersonnelRelationUnitName(user.getUnitName());
staff.setUnionRelationUnionId(union.getId());
staff.setUnionRelationUnionName(union.getName());
staff.setIsManyUnit(false);
staff.setSpecialStaffType("HMC_RELATION");
dao.insert(staff);
}
Sys_user sysUser = new Sys_user();
BeanUtil.copyProperties(record, sysUser);
sysUser.setId(record.getUserId());
sysUser.setMember(true);
// 这是HMC的
sysUser.setPreparedBy("会员");
dao.updateIgnoreNull(sysUser);
// 还要设置会员角色
Sys_role role = dao.fetch(Sys_role.class, Cnd.where(Sys_role::getCode, "=", RoleConstant.MEMBER.name()));
int count = dao.count(Sys_user_role.class, Cnd.where("userId", "=", user.getId()).and("roleId", "=", role.getId()));
if (count == 0) {
Sys_user_role userRole = new Sys_user_role();
userRole.setUserId(user.getId());
userRole.setRoleId(role.getId());
dao.insert(userRole);
}
// 短信啊,TMD HMC,狗屎
} else {
// 其他的高校,发短信给下一步(校工会)审核
}
}
}
}
@@ -0,0 +1,47 @@
package com.budwk.app.zhgh.staffmanage.member.interceptor;
import com.budwk.app.flow.constant.FlowConst;
import com.budwk.app.flow.engine.FlowInterceptor;
import com.budwk.app.flow.engine.core.Execution;
import com.budwk.app.flow.engine.core.ServiceContext;
import com.budwk.app.flow.entity.ProcessInstance;
import com.budwk.app.web.commons.base.Globals;
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.json.Json;
/**
* @version 1.0
* @Author zzr
* @nameMemberApplySaveInterceptor
* @Date 2025/7/28 16:39
* @注释
*/
public class MemberApplySaveInterceptor implements FlowInterceptor {
@Override
public void intercept(Execution execution) {
System.out.println("member apply ..................");
String formDataStr = execution.getArgs().getStr(FlowConst.FORM_DATA);
// 设置流程变量
if ("HMC".equals(Globals.SchoolCode)) {
execution.getArgs().set("origin", "HMC");
} else {
execution.getArgs().set("origin", "OTHER");
}
MemberApplyRecord record = Json.fromJson(MemberApplyRecord.class, formDataStr);
Dao dao = ServiceContext.find(Dao.class);
dao.insertOrUpdate(record);
execution.getArgs().set(FlowConst.FORM_DATA, Json.toJson(record));
int instanceId = execution.getArgs().getInt(FlowConst.PROCESS_INSTANCE_ID_KEY);
dao.update(ProcessInstance.class, Chain.make("businessNo", record.getId()), Cnd.where(ProcessInstance::getId, "=", instanceId));
System.out.println(execution);
}
}
@@ -0,0 +1,53 @@
package com.budwk.app.zhgh.staffmanage.member.interceptor;
import cn.hutool.core.bean.BeanUtil;
import com.budwk.app.flow.constant.FlowConst;
import com.budwk.app.flow.engine.FlowInterceptor;
import com.budwk.app.flow.engine.core.Execution;
import com.budwk.app.flow.engine.core.ServiceContext;
import com.budwk.app.flow.enums.ProcessSubmitTypeEnum;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.json.Json;
/**
* @version 1.0
* @Author zzr
* @nameMemberApplySchoolApprovalInterceptor
* @Date 2025/7/29 15:34
* @注释
*/
public class MemberApplySchoolApprovalInterceptor implements FlowInterceptor {
@Override
public void intercept(Execution execution) {
System.out.println("member apply school approval ..................");
String formDataStr = execution.getArgs().getStr(FlowConst.FORM_DATA);
MemberApplyRecord record = Json.fromJson(MemberApplyRecord.class, formDataStr);
String allocationUnionId = execution.getArgs().getStr(FlowConst.TASK_FORM_DATA_PREFIX + "allocation_unionId");
Dao dao = ServiceContext.find(Dao.class);
dao.update(MemberApplyRecord.class, Chain.make("allocationUnionId", allocationUnionId),
Cnd.where(MemberApplyRecord::getId, "=", record.getId()));
// 判断如果是审核通过,并且不是HMC, 去修改用户表的基础数据
boolean submitType = execution.getArgs().getInt("submitType").equals(ProcessSubmitTypeEnum.AGREE.getCode());
if (submitType) {
if (!"HMC".equals(record.getOrigin())) {
Sys_user sysUser = new Sys_user();
BeanUtil.copyProperties(record, sysUser);
sysUser.setId(record.getUserId());
dao.updateIgnoreNull(sysUser);
// 正常的发送短信,审核通过
} else {
// 发TMD短信 HMC,流程在流转到分工会接收环节
}
} else {
// 没审核通过,发短信告知本人
}
}
}
@@ -0,0 +1,68 @@
package com.budwk.app.zhgh.staffmanage.member.interceptor;
import cn.hutool.core.date.DateUtil;
import com.budwk.app.base.exception.BaseException;
import com.budwk.app.flow.constant.FlowConst;
import com.budwk.app.flow.engine.FlowInterceptor;
import com.budwk.app.flow.engine.core.Execution;
import com.budwk.app.flow.engine.core.ServiceContext;
import com.budwk.app.flow.entity.ProcessInstance;
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.MemberChangeOrigin;
import com.budwk.app.zhgh.staffmanage.member.models.MemberChangeRecord;
import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.json.Json;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import java.util.Date;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberChangeSaveInterceptor
* @Date 2025/7/28 16:39
* @注释
*/
public class MemberChangeSaveInterceptor implements FlowInterceptor {
@Override
public void intercept(Execution execution) {
System.out.println("member change ..................");
String formDataStr = execution.getArgs().getStr(FlowConst.FORM_DATA);
MemberChangeRecord record = Json.fromJson(MemberChangeRecord.class, formDataStr);
Dao dao = ServiceContext.find(Dao.class);
MemberCommonService memberCommonService = ServiceContext.find(MemberCommonService.class);
// 校验有没有发生变更
List<NutMap> changeInfos = memberCommonService.getChangeInfos(record);
if (Lang.isEmpty(changeInfos)) {
throw new BaseException("未获取到异动数据");
}
View_user user = dao.fetch(View_user.class, Cnd.where("id", "=", record.getUserId()));
// 比较有哪些变更类型
List<String> changeTypes = memberCommonService.compareChangeType(record, user);
record.setChangeTypes(changeTypes);
record.setUserId(SecurityUtil.getUserId());
// 变更来源 个人
record.setChangeOrigin(MemberChangeOrigin.PERSONAL.name());
dao.insertOrUpdate(record);
execution.getArgs().set(FlowConst.FORM_DATA, Json.toJson(record));
int instanceId = execution.getArgs().getInt(FlowConst.PROCESS_INSTANCE_ID_KEY);
dao.update(ProcessInstance.class, Chain.make("businessNo", record.getId()), Cnd.where(ProcessInstance::getId, "=", instanceId));
System.out.println(execution);
}
}
@@ -0,0 +1,37 @@
package com.budwk.app.zhgh.staffmanage.member.interceptor;
import com.budwk.app.flow.constant.FlowConst;
import com.budwk.app.flow.engine.FlowInterceptor;
import com.budwk.app.flow.engine.core.Execution;
import com.budwk.app.flow.engine.core.ServiceContext;
import com.budwk.app.flow.enums.ProcessSubmitTypeEnum;
import com.budwk.app.zhgh.staffmanage.member.models.MemberChangeRecord;
import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
import org.nutz.json.Json;
/**
* @version 1.0
* @Author zzr
* @nameMemberChangeSchoolApprovalInterceptor
* @Date 2025/7/30 9:06
* @注释
*/
public class MemberChangeSchoolApprovalInterceptor implements FlowInterceptor {
@Override
public void intercept(Execution execution) {
System.out.println("member change school approval ..................");
String formDataStr = execution.getArgs().getStr(FlowConst.FORM_DATA);
MemberChangeRecord record = Json.fromJson(MemberChangeRecord.class, formDataStr);
MemberCommonService memberCommonService = ServiceContext.find(MemberCommonService.class);
// 是否审核通过
boolean submitType = execution.getArgs().getInt("submitType").equals(ProcessSubmitTypeEnum.AGREE.getCode());
// 审核通过后去修改用户表字段
if (submitType) {
memberCommonService.compareChangeInfoAndUpdateMember(record);
} else {
// 没审核通过的操作
}
}
}
@@ -52,6 +52,11 @@ public class MemberApplyRecord extends BaseModel {
@Size(max = 100)
private String loginname;
@Column
@Comment("出生日期")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String birthday;
@Column
@Comment("单位id")
@ColDefine(type = ColType.VARCHAR, width = 32)
@@ -59,12 +64,6 @@ public class MemberApplyRecord extends BaseModel {
@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)
@@ -79,12 +78,6 @@ public class MemberApplyRecord extends BaseModel {
@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)
@@ -128,11 +121,10 @@ public class MemberApplyRecord extends BaseModel {
private String education;
@Column
@Comment("党政职务")
@Comment("职务")
@ColDefine(type = ColType.VARCHAR, width = 50)
@NotBlank(message = "党政职务不能为空")
@Size(max = 50)
private String governmentPosition;
private String position;
@Column
@Comment("在职状态")
@@ -169,13 +161,6 @@ public class MemberApplyRecord extends BaseModel {
@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)
@@ -188,6 +173,11 @@ public class MemberApplyRecord extends BaseModel {
@Default(value = "0")
private Boolean welfareMember;
@Column
@Comment("校区")
@ColDefine(type = ColType.VARCHAR, width = 20)
private String campus;
@Column
@Comment("家庭主要成员及其工作单位")
@ColDefine(type = ColType.MYSQL_JSON)
@@ -211,7 +201,7 @@ public class MemberApplyRecord extends BaseModel {
@Column
@Comment("变更类型")
@ColDefine(type = ColType.VARCHAR, width = 20)
@ColDefine(type = ColType.VARCHAR, width = 50)
private String changeType;
@Column
@@ -231,20 +221,22 @@ public class MemberApplyRecord extends BaseModel {
private Date applyDateTime;
@Column
@Comment("名单事项核对Id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String verificationProjectId;
private Boolean edit;
@Comment("分配的工会关系")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String allocationUnionId;
@Column
@Comment("详细变更记录")
@ColDefine(type = ColType.TEXT)
private String changeInfos;
@Comment("是否自愿加入工会")
@ColDefine(type = ColType.BOOLEAN)
private Boolean isVoluntary;
@Column
@Comment("详细变更记录")
@ColDefine(type = ColType.TEXT)
private String remark;
@Comment("签字")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String sign;
@Column
@Comment("来源,高校编码")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String origin;
}
@@ -0,0 +1,225 @@
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 lombok.experimental.Accessors;
import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert;
import javax.validation.constraints.Size;
import java.util.Date;
import java.util.List;
/**
* 会员变更记录
*
* @author: 1V
* @date: 2021/1/25
* @since 1.0
*/
@Data
@Accessors(chain = true)
@Table("member_change_record")
@EqualsAndHashCode(callSuper = true)
public class MemberChangeRecord 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)
@Size(max = 32)
private String userId;
@Column
@Comment("姓名")
@ColDefine(type = ColType.VARCHAR, width = 100)
@Size(max = 100)
private String username;
@Column
@Comment("工号")
@ColDefine(type = ColType.VARCHAR, width = 100)
@Size(max = 100)
private String loginname;
@Column
@Comment("单位id")
@ColDefine(type = ColType.VARCHAR, width = 32)
@Size(max = 32)
private String unitId;
@Column
@Comment("单位名称")
@ColDefine(type = ColType.VARCHAR, width = 200)
@Size(max = 200)
private String unitName;
@Column
@Comment("工会id")
@ColDefine(type = ColType.VARCHAR, width = 32)
@Size(max = 32)
private String unionId;
@Column
@Comment("工会名称")
@ColDefine(type = ColType.VARCHAR, width = 50)
@Size(max = 50)
private String unionName;
@Column
@Comment("性别")
@ColDefine(type = ColType.VARCHAR, width = 10)
@Size(max = 10)
private String sex;
@Column
@Comment("出生日期")
@ColDefine(type = ColType.VARCHAR, width = 10)
@Size(max = 10)
private String birthday;
@Column
@Comment("证件号码")
@ColDefine(type = ColType.VARCHAR, width = 30)
@Size(max = 30)
private String idCard;
@Column
@Comment("民族")
@ColDefine(type = ColType.VARCHAR, width = 20)
@Size(max = 20)
private String nation;
@Column
@Comment("政治面貌")
@ColDefine(type = ColType.VARCHAR, width = 100)
@Size(max = 100)
private String political;
@Column
@Comment("学历")
@ColDefine(type = ColType.VARCHAR, width = 20)
@Size(max = 20)
private String education;
@Column
@Comment("学位")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String academicDegree;
@Column
@Comment("党政职务")
@ColDefine(type = ColType.VARCHAR, width = 50)
@Size(max = 50)
private String position;
@Column
@Comment("在职状态")
@ColDefine(type = ColType.VARCHAR, width = 50)
@Size(max = 50)
private String userState;
@Column
@Comment("人事编制")
@ColDefine(type = ColType.VARCHAR, width = 50)
@Size(max = 50)
private String preparedBy;
@Column
@Comment("人员类别")
@ColDefine(type = ColType.VARCHAR, width = 50)
@Size(max = 50)
private String personType;
@Column
@Comment("手机号码")
@ColDefine(type = ColType.VARCHAR, width = 32)
@Size(max = 32)
private String mobile;
@Column
@Comment("电子邮箱")
@ColDefine(type = ColType.VARCHAR, width = 255)
@Size(max = 255)
private String email;
@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.VARCHAR, width = 20)
private String campus;
@Column
@Comment("退休日期")
@ColDefine(type = ColType.DATE)
private Date retireDate;
@Column
@Comment("家庭主要成员及其工作单位")
@ColDefine(type = ColType.MYSQL_JSON)
private List<JSONObject> families;
@Column
@Comment("个人简况")
@ColDefine(type = ColType.VARCHAR, customType = "text")
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("福利享受截止日期")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String welfareStopDate;
@Column
@Comment("名单事项核对Id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String verificationProjectId;
@Comment("备注(南邮的)")
@ColDefine(type = ColType.TEXT)
private String remark;
private Boolean edit;
}
@@ -35,14 +35,14 @@ public class MemberApplyPageForm extends PageForm<MemberApplyRecord> {
}
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("vu.loginname", "like", "%" + pageForm.getSearchKeyword() + "%");
seg.or("vu.username", "like", "%" + pageForm.getSearchKeyword() + "%");
seg.or("info.loginName", "like", "%" + pageForm.getSearchKeyword() + "%");
seg.or("info.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());
cnd.andEX("info.unionId","=",pageForm.getUnionId());
cnd.andEX("info.unitId","=",pageForm.getUnitId());
cnd.andEX("info.userState","=",pageForm.getUserState());
cnd.andEX("info.personType","=",pageForm.getPersonType());
cnd.andEX("info.preparedBy","=",pageForm.getPreparedBy());
}
}
@@ -0,0 +1,62 @@
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.MemberChangeRecord;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.Cnd;
import org.nutz.dao.util.cri.SqlExpressionGroup;
/**
* @version 1.0
* @Author zzr
* @nameMemberChangePageForm
* @Date 2025/2/14 14:05
* @注释
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class MemberChangePageForm extends PageForm<MemberChangeRecord> {
// 工会id
@ApiModelProperty("工会id")
private String unionId;
// 单位id
@ApiModelProperty("单位id")
private String unitId;
// 在职状态
@ApiModelProperty("在职状态")
private String userState;
// 在职状态
@ApiModelProperty("编制类型")
private String preparedBy;
// 人员类型
@ApiModelProperty("人员类型")
private String personType;
public void buildSearch(Cnd cnd, String prefix){
if (cnd == null) {
cnd = Cnd.NEW();
}
if (StrUtil.isNotBlank(this.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike(prefix + "username", this.getSearchKeyword());
seg.orLike(prefix + "loginname", this.getSearchKeyword());
cnd.and(seg);
}
cnd.andEX(prefix + "unionId", "=", this.getUnionId());
cnd.andEX(prefix + "unitId", "=", this.getUnitId());
cnd.andEX(prefix + "userState", "=", this.getUserState());
cnd.andEX(prefix + "preparedBy", "=", this.getPreparedBy());
cnd.andEX(prefix + "personType", "=", this.getPersonType());
}
}
@@ -64,7 +64,11 @@ public class MemberManagePageForm extends PageForm {
cnd = Cnd.NEW();
}
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("u.unionId", "=", SecurityUtil.getUnionId());
if (AuthUtil.hasRoleOr(RoleConstant.BRANCH_UNION_CHAIRMAN.name(), RoleConstant.BRANCH_UNION_OPERATOR.name())) {
cnd.and("u.unionId", "=", SecurityUtil.getUnionId());
} else {
cnd.and("record.userId", "=", SecurityUtil.getUserId());
}
} else {
cnd.andEX("u.unionId", "=", pageForm.getUnionId());
}
@@ -3,15 +3,15 @@ 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.sys.views.View_user;
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
import com.budwk.app.zhgh.staffmanage.member.models.MemberChangeRecord;
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
@@ -20,7 +20,7 @@ import java.util.Set;
* @Date 2024/8/6 10:42
* @注释
*/
public interface MemberManageService extends BaseService<Sys_user> {
public interface MemberCommonService extends BaseService<Sys_user> {
/**
* 多条件查询Sql
@@ -43,43 +43,47 @@ public interface MemberManageService extends BaseService<Sys_user> {
*/
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);
NutMap getDictAllowChangeFields();
/**
* 校验是否有变更
* @param record
*/
List<NutMap> compareMemberChangeInfo(MemberApplyRecord record);
/**
* 获取变更类型
* @param changeList 变更记录
* 获取变更详情
* @param recordId 变更记录id
* @return
*/
List<String> compareMemberChangeType(List<NutMap> changeList, MemberApplyRecord record);
List<NutMap> getChangeInfos(String recordId);
List<NutMap> getChangeInfos(MemberChangeRecord record);
/**
* 会员变更信息对比 并更新数据
* 比较有哪些变更类型
* @param record
* @param user
* @return
*/
List<String> compareChangeType(MemberChangeRecord record, View_user user);
/**
* 存储比较变更信息并更新会员信息
* @param recordId
*/
void compareChangeInfoAndUpdateMember(String recordId);
/**
* 存储比较变更信息并更新会员信息
* @param record
*/
void compareMemberChangeInfoAndUpdateUser(MemberApplyRecord record);
void compareChangeInfoAndUpdateMember(MemberChangeRecord record);
/**
* 获取会员的变更信息
* @param userId
* @return
*/
List<NutMap> getAllChangeInfo(String userId);
/**
* 比较两个对象并记录变更的字段工具
@@ -90,12 +94,4 @@ public interface MemberManageService extends BaseService<Sys_user> {
* @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);
}
@@ -42,8 +42,8 @@ public class MemberBranchUnionManageServiceImpl extends BaseServiceImpl<Sys_user
record.applyDateTime,
record.unitId,
IFNULL(record.unionId, vu.unionid) AS unionId,
vu.unionname AS unionName,
IFNULL(record.unitName, vu.unitname) AS unitName,
IFNULL(record.unionName, 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,
@@ -61,15 +61,15 @@ public class MemberBranchUnionManageServiceImpl extends BaseServiceImpl<Sys_user
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
INNER JOIN member_change_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("nd.nodeCode", "=", 20);
cnd.and("define.`code`", "=", BpmProcessConstant.MEMBER_CHANGE.name());
cnd.and("vu.unionId","=", SecurityUtil.getUnionId());
cnd.desc("record.applyDateTime");
sql.setCondition(cnd);
@@ -19,10 +19,7 @@ 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.models.*;
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;
@@ -400,10 +397,10 @@ public class MemberListVerificationServiceImpl extends BaseServiceImpl<MemberLis
@Override
@Aop(TransAop.READ_COMMITTED)
public void revokeChange(String userId, String verificationProjectId, String type) {
MemberApplyRecord record = dao().fetch(MemberApplyRecord.class, Cnd.where("userId", "=", userId)
MemberChangeRecord record = dao().fetch(MemberChangeRecord.class, Cnd.where("userId", "=", userId)
.and("verificationProjectId", "=", verificationProjectId));
if (record != null) {
dao().delete(MemberApplyRecord.class, record.getId());
dao().delete(MemberChangeRecord.class, record.getId());
Sys_user_history history = dao().fetch(Sys_user_history.class, Cnd.where("recordId", "=", record.getId()));
if (Lang.isNotEmpty(history)) {
@@ -413,8 +410,7 @@ public class MemberListVerificationServiceImpl extends BaseServiceImpl<MemberLis
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);
@@ -6,24 +6,27 @@ 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.services.SysRoleService;
import com.budwk.app.sys.services.SysUserService;
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.activity.basic.models.ActivityUserScope;
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.MemberChangeRecord;
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.MemberCommonService;
import com.budwk.app.zhgh.staffmanage.specialstaff.model.SpecialStaff;
import com.budwk.app.zhgh.welfare.model.WelfareList;
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;
@@ -36,8 +39,8 @@ 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.random.R;
import org.nutz.lang.util.NutMap;
import java.util.*;
@@ -53,10 +56,14 @@ import java.util.stream.Collectors;
*/
@IocBean(args = {"refer:dao"})
@Slf4j
public class MemberManageServiceImpl extends BaseServiceImpl<Sys_user> implements MemberManageService {
public class MemberManageServiceImpl extends BaseServiceImpl<Sys_user> implements MemberCommonService {
@Inject
private SysDictService sysDictService;
@Inject
private SysRoleService sysRoleService;
@Inject
private SysUserService sysUserService;
public MemberManageServiceImpl(Dao dao) {
super(dao);
@@ -83,7 +90,6 @@ public class MemberManageServiceImpl extends BaseServiceImpl<Sys_user> implement
u.personType,
u.welfareMember,
u.isModelWorker,
u.wantJoinLoveMutualAidAssociation,
his.id hisId,
his.changeTypes,
his.changeTime
@@ -96,7 +102,8 @@ public class MemberManageServiceImpl extends BaseServiceImpl<Sys_user> implement
MemberManagePageForm.buildSearch(cnd, pageForm);
cnd.desc("his.changeTime");
cnd.groupBy("u.id");
if ("branchUnion".equals(queryType)) {
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("u.unionId", "=", SecurityUtil.getUnionId());
}
sql.setCondition(cnd);
@@ -192,316 +199,281 @@ public class MemberManageServiceImpl extends BaseServiceImpl<Sys_user> implement
cnd.desc("his.changeTime");
}
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name(), RoleConstant.SCHOOL_UNION_MEMBER_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");
public NutMap getDictAllowChangeFields() {
//获取可变更字段
List<Sys_dict> dictList = sysDictService.getSubListByCode("ALLOW_CHANGE_FIELDS");
Set<String> allowChangeFieldNames = dictList.stream().map(Sys_dict::getCode).collect(Collectors.toSet());
allowChangeFieldNames.add("member");
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;
dictMap.put("member", "会员状态");
return NutMap.NEW().addv("allowChangeFieldNames", allowChangeFieldNames).addv("dictMap", dictMap);
}
/**
* 比较两个对象,并记录变更的字段
*
* @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") + ")");
@Override
public List<NutMap> getChangeInfos(String recordId) {
Sys_user_history history = dao().fetch(Sys_user_history.class, Cnd.where("recordId", "=", recordId));
if (Lang.isNotEmpty(history)) {
return history.getChangeInfos();
} else {
nutMap.put("title", DateUtil.format(current.getChangeTime(), "yyyy-MM-dd HH:mm:ss"));
MemberChangeRecord record = dao().fetch(MemberChangeRecord.class, recordId);
return getChangeInfos(record);
}
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);
public List<NutMap> getChangeInfos(MemberChangeRecord record) {
View_user info = dao().fetch(View_user.class, Cnd.where("id", "=", record.getUserId()));
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));
NutMap map = getDictAllowChangeFields();
Set<String> allowChangeFieldNames = map.getAs("allowChangeFieldNames", Set.class);
Map<String, String> dictMap = map.getAs("dictMap", Map.class);
// 新数据
NutMap newMap = Lang.obj2nutmap(record);
// 原数据
NutMap sourceMap = Lang.obj2nutmap(info);
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("未获取到变更数据,请核对是否修改了数据");
extractChange(newMap, sourceMap, fieldName, dictMap, changeList);
}
return changeList;
}
@Override
public List<String> compareMemberChangeType(List<NutMap> changeList, MemberApplyRecord record) {
if (Lang.isEmpty(changeList)) {
return null;
}
public List<String> compareChangeType(MemberChangeRecord record, View_user user) {
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());
changeTypes.add(MemberChangeType.BASIC_CHANGE.name());
if (!ObjectUtil.equals(user.getUserState(), record.getUserState())) {
List<MemberChangeType> list = Arrays.stream(MemberChangeType.values())
.filter(v -> v.getChangeTypeName().equals(record.getUserState())).toList();
if (Lang.isNotEmpty(list)) {
changeTypes.add(list.get(0).name());
}
} else {
// 没有单位的变化,表明是基本信息变更
changeTypes.add(MemberChangeType.BASIC_CHANGE.name());
}
// record中是否存在前端传递过来的变更状态,(入会/退会)
String changeType = record.getChangeType();
if (StrUtil.isNotBlank(changeType)) {
changeTypes.add(changeType);
if (!ObjectUtil.equals(user.getMember() == 1, record.getMember())){
if (record.getMember()) {
changeTypes.add(MemberChangeType.RESTORE.name());
} else {
changeTypes.add(MemberChangeType.WITHDRAWAL.name());
}
}
if (!ObjectUtil.equals(user.getUnitId(), record.getUnitId())) {
changeTypes.add(MemberChangeType.UNIT_CHANGE.name());
}
if (!ObjectUtil.equals(user.getUnionId(), record.getUnionId())) {
changeTypes.add(MemberChangeType.UNION_CHANGE.name());
}
return changeTypes;
}
/**
* 比较会员信息变更记录,并保存历史数据
*
* @param record 传递的记录
* @return
*/
@Aop(TransAop.READ_COMMITTED)
@Override
public void compareMemberChangeInfoAndUpdateUser(MemberApplyRecord record) {
List<NutMap> changeList = compareMemberChangeInfo(record);
public void compareChangeInfoAndUpdateMember(String recordId) {
MemberChangeRecord record = dao().fetch(MemberChangeRecord.class, recordId);
compareChangeInfoAndUpdateMember(record);
}
View_user user = dao().fetch(View_user.class, Cnd.where("loginname", "=", record.getLoginname()));
@Override
public void compareChangeInfoAndUpdateMember(MemberChangeRecord record) {
List<NutMap> changeList = getChangeInfos(record);
// 如果有工会关系人员,这个user用来存储数据
View_user user = dao().fetch(View_user.class, Cnd.where("id", "=", record.getUserId()));
// 获取会员信息,用于存储变更记录
Sys_user info = dao().fetch(Sys_user.class, Cnd.where("id", "=", record.getUserId()));
String userId = info.getId();
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 (Lang.isNotEmpty(changeList)) {
BeanUtil.copyProperties(info, history);
}
if (ObjectUtil.isNotEmpty(history) && ObjectUtil.isNotEmpty(history.getLoginname())) {
Date nowDate = new Date();
if (Lang.isNotEmpty(history)) {
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);
history.setChangeTime(DateUtil.date());
history.setChangeTypes(record.getChangeTypes());
history.setChangeOrigin(record.getChangeOrigin());
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()));
// 获取会员角色,加入或退出会员组别,写了之后用处不大,注释了,暂且保留,想优化就把下面注释打开,305行与304-348行取消注释
// Sys_role role = sysRoleService.getByCode(RoleConstant.MEMBER);
// 加入会员
if (record.getMember()) {
Sys_user_role userRole = new Sys_user_role();
userRole.setRoleId(memberRole.getId());
userRole.setUserId(user.getId());
dao().insert(userRole);
// int activityCount = dao().count(ActivityUserScope.class, Cnd.where("userId", "=", userId).and("groupId", "=", 1));
// int memberCount = dao().count(Sys_user_role.class, Cnd.where("userId", "=", userId).and("roleId", "=", role.getId()));
// if (activityCount <= 0) {
// // 取消或加入会员组别
// if (record.getIsJoinActivityMemberScope() != null && record.getIsJoinActivityMemberScope()) {
// ActivityUserScope scope = new ActivityUserScope();
// scope.setUserId(userId);
// scope.setGroupId(1);
// scope.setGroupName("工会会员");
// dao().insert(scope);
// }
// }
// if (memberCount <= 0) {
// Sys_user_role userRole = new Sys_user_role();
// userRole.setUserId(userId);
// userRole.setRoleId(role.getId());
// dao().insert(userRole);
// }
// // 杭医特有,其他学校请删除
// record.setPreparedBy("会员");
// } else {
// if (record.getIsExitActivityMemberScope() != null && record.getIsExitActivityMemberScope()) {
// dao().clear(ActivityUserScope.class, Cnd.where("userId", "=", userId).and("groupId", "=", 1));
// }
// dao().clear(Sys_user_role.class, Cnd.where("userId", "=", userId).and("roleId", "=", Roles.MEMBER));
// // 杭医特有,其他学校请删除
// record.setPreparedBy("教职工");
// }
//
// // 加入福利会员 是否加入福利项目
// if (record.getWelfareMember() && record.getIsJoinWelfareProject() != null && record.getIsJoinWelfareProject()) {
// WelfareList welfareList = new WelfareList();
// welfareList.setId(R.UU32());
// welfareList.setProjectId(record.getWelfareProjectId());
// welfareList.setUserId(userId);
// welfareList.setIsReceive(false);
// welfareList.setIsAutoSelect(false);
// welfareList.setUserState(record.getUserState());
// welfareList.setPersonType(record.getPersonType());
// welfareList.setWelfareUnitId(record.getUnitId());
// dao().insert(welfareList);
}
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);
// 到此,表明审核通过,需要存储历史数据,并修改用户数据
BeanUtil.copyProperties(record, info);
info.setId(userId);
// 如果有单位变更,则需要记录单位关系
if (record.getChangeTypes().contains(MemberChangeType.UNIT_CHANGE.name())) {
info.setUnitId(record.getUnitId());
}
// 如果工会发生变更了,就是工会关系变更,记录到特殊人员表中
if (record.getChangeTypes().contains(MemberChangeType.UNION_CHANGE.name())) {
if (dao().count(SpecialStaff.class, Cnd.where("userId", "=", record.getUserId())) > 0) {
dao().clear(SpecialStaff.class, Cnd.where("userId", "=", record.getUserId()));
user = dao().fetch(View_user.class, Cnd.where("id", "=", record.getUserId()));
}
if (!ObjectUtil.equals(user.getUnionId(), record.getUnionId())) {
Sys_union union = dao().fetch(Sys_union.class, Cnd.where("id", "=", record.getUnionId()));
// 记录工会关系变更的数据
NutMap map = NutMap.NEW();
map.put("field", "unionId");
map.put("fieldName", "工会");
map.put("sourceValue", record.getUnionName());
map.put("newValue", union.getName());
changeList.add(map);
SpecialStaff staff = new SpecialStaff();
staff.setUserId(userId);
staff.setPersonnelRelationUnitId(user.getUnitId());
staff.setPersonnelRelationUnitName(user.getUnitName());
staff.setUnionRelationUnionId(union.getId());
staff.setUnionRelationUnionName(union.getName());
staff.setIsManyUnit(false);
staff.setSpecialStaffType("HMC_RELATION");
dao().insert(staff);
}
}
// 如果有工会关系变更,也需要记录变更了什么工会
history.setChangeInfos(changeList);
String changeInfos = changeList.stream().map(v -> {
return v.getString("fieldName") + "" + HtmlUtil.cleanHtmlTag(v.getString("sourceValue")) + "->" + HtmlUtil.cleanHtmlTag(v.getString("newValue"));
}).collect(Collectors.joining(""));
history.setChangeInfosStr(changeInfos);
dao().updateIgnoreNull(info);
dao().insert(history);
dao().update(Sys_user.class, chain, Cnd.where("loginname", "=", record.getLoginname()));
} else {
throw new BaseException("未获取到变更数据,请核对是否修改了数据");
sysUserService.deleteCache(info.getId());
}
}
@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("数据获取失败");
public List<NutMap> getAllChangeInfo(String userId) {
List<NutMap> resultMapList = new ArrayList<>();
Sql sql = Sqls.fetchString(Sqls.create("select loginname from sys_user where id = @id").setParam("id", userId).toString());
dao().execute(sql);
String loginName = sql.getString();
MemberChangeRecord record = dao().fetch(MemberChangeRecord.class, Cnd.where("userId", "=", userId).desc("applyDateTime"));
List<Sys_user_history> historyList = dao().query(Sys_user_history.class, Cnd.where("loginname", "=", loginName)
.and("changeInfos", "is not", null).desc("changeTime"));
List<String> recordList = historyList.stream().map(Sys_user_history::getRecordId).toList();
if (Lang.isNotEmpty(record) && !recordList.contains(record.getId())) {
NutMap map = NutMap.NEW();
List<NutMap> changeInfos = getChangeInfos(record.getId());
map.put("changeInfos", changeInfos);
map.put("timestamp", DateUtil.format(record.getApplyDateTime(), "yyyy-MM-dd HH:mm:ss"));
map.put("changeOriginName", MemberChangeOrigin.valueOf(MemberChangeOrigin.class, record.getChangeOrigin()).changeOriginName);
resultMapList.add(map);
}
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);
for (Sys_user_history history : historyList) {
NutMap map = NutMap.NEW();
List<NutMap> changeInfos = history.getChangeInfos();
map.put("changeInfos", changeInfos);
map.put("timestamp", DateUtil.format(history.getChangeTime(), "yyyy-MM-dd HH:mm:ss"));
map.put("changeOriginName", MemberChangeOrigin.valueOf(MemberChangeOrigin.class, history.getChangeOrigin()).changeOriginName);
resultMapList.add(map);
}
return changeList;
return resultMapList;
}
/**
* 比较两个对象,并记录变更的字段工具
*
* @param current 当前数据
* @param previous 上一次的数据
* @param dictMap 字典数据
* @param newMap 数据
* @param sourceMap 原数据
* @param fieldsMap 变更字段
* @param changeList 变更集合
*/
@Override
public void extractChange(NutMap current, NutMap previous, String fieldName, Map<String, String> dictMap, List<NutMap> changeList) {
public void extractChange(NutMap newMap, NutMap sourceMap, String fieldName, Map<String, String> fieldsMap, List<NutMap> changeList) {
try {
Object currentValue = this.booleanVerification(current.get(fieldName));
Object previousValue = this.booleanVerification(previous.get(fieldName));
Object currentValue = this.booleanVerification(newMap.get(fieldName));
Object previousValue = this.booleanVerification(sourceMap.get(fieldName));
if ("unitId".equals(fieldName)) {
currentValue = (newMap.get(fieldName) == null ? this.booleanVerification(newMap.get("unitId")) : currentValue);
previousValue = (sourceMap.get(fieldName) == null ? this.booleanVerification(sourceMap.get("unitId")) : previousValue);
}
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)));
String name = fieldsMap.getOrDefault(fieldName, fieldName);
if ("unitId".equals(fieldName) || "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();
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;
currentValue = unitList.stream().filter(v -> v.getId().equals(String.valueOf(finalCurrentValue)))
.findFirst().orElse(new Sys_unit()).getName();
}
changeList.add(NutMap.NEW()
.setv("fieldName", fieldName)
.setv("name", name)
.setv("value", previousValue)
.setv("field", fieldName)
.setv("fieldName", name)
.setv("sourceValue", previousValue)
.setv("newValue", currentValue));
}
} catch (Exception e) {
log.error("Error while extracting and comparing changes for field: {}", fieldName, e);
}
@@ -40,7 +40,7 @@ public class MemberSchoolUnionManageServiceImpl extends BaseServiceImpl<Sys_user
record.applyDateTime,
record.unitId,
IFNULL(record.unionId, vu.unionid) AS unionId,
vu.unionname AS unionName,
IFNULL(record.unionName, 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,
@@ -59,15 +59,15 @@ public class MemberSchoolUnionManageServiceImpl extends BaseServiceImpl<Sys_user
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
INNER JOIN member_change_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.and("nd.nodeCode", "=", 50);
cnd.and("define.`code`", "=", BpmProcessConstant.MEMBER_CHANGE.name());
cnd.desc("record.applyDateTime");
sql.setCondition(cnd);
return listPageVO(pageForm, sql, MemberChangeAuditVo.class);
@@ -10,13 +10,13 @@ import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberApplyVo
* @nameMemberCommonVo
* @Date 2024/11/11 11:08
* @注释
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class MemberApplyVo extends BpmTaskApprovalVo {
public class MemberCommonVo extends BpmTaskApprovalVo {
private String id;
private String userId;
@@ -38,7 +38,6 @@ public class MemberApplyVo extends BpmTaskApprovalVo {
private String personType;
private String mobile;
private String email;
private Boolean wantJoinLoveMutualAidAssociation;
private Boolean member;
private Boolean welfareMember;
private String families;
@@ -48,5 +47,5 @@ public class MemberApplyVo extends BpmTaskApprovalVo {
private List<String> changeTypes;
private String changeOrigin;
private Date applyDateTime;
private String verificationProjectId;
private String allocationUnionId;
}
@@ -0,0 +1,184 @@
package com.budwk.app.zhgh.staffmanage.memberCost.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.result.Result;
import com.budwk.app.zhgh.staffmanage.memberCost.service.MemberPaymentService;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.nutz.dao.Sqls;
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 java.util.List;
import java.util.stream.Collectors;
/**
* @ClassName MemberPaymentChartSummaryController
* @Description 图表汇总
* @Author zhf
* @Date 2025/3/11 下午3:20
*/
@Slf4j
@IocBean
@Ok("json:full")
@ApiOperation("会员缴费图表汇总")
@At("/platform/member/payment/chartSummary")
public class MemberPaymentChartSummaryController {
@Inject
private MemberPaymentService memberPaymentService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/membercost/chartSummary/index.html")
@SaCheckPermission("member.payment.chartSummary")
public void index() {
}
@At
@ApiOperation("获取缴费项目图表")
@SaCheckPermission("member.payment.chartSummary")
public Result getPayProjectChart(@Param("startYear") Integer startYear,
@Param("endYear") Integer endYear) {
Sql sql = Sqls.create("""
SELECT
mpp.projectName,
COUNT( mpi.id ) AS num
FROM
member_payment_project mpp
LEFT JOIN member_payment_info mpi ON mpi.paymentProjectId = mpp.id
AND mpi.isPayment = 1
WHERE
YEAR ( mpp.createTime ) BETWEEN @startYear
AND @endYear
GROUP BY
mpp.id
""").setParam("startYear", startYear).setParam("endYear", endYear);
return Result.success(memberPaymentService.listMap(sql));
}
@At
@ApiOperation("获取退款项目图表")
@SaCheckPermission("member.payment.chartSummary")
public Result getRefundProjectChart(@Param("startYear") Integer startYear,
@Param("endYear") Integer endYear) {
Sql sql = Sqls.create("""
SELECT
mpp.projectName,
COUNT( pt.id ) AS num
FROM
member_payment_project mpp
LEFT JOIN member_payment_info mpi ON mpi.paymentProjectId = mpp.id
LEFT JOIN payment_transaction pt ON pt.memberPaymentInfoId = mpi.id
AND pt.isRefund = 1
WHERE
YEAR ( mpp.createTime ) BETWEEN @startYear
AND @endYear
GROUP BY
mpp.id
""").setParam("startYear", startYear).setParam("endYear", endYear);
return Result.success(memberPaymentService.listMap(sql));
}
@At
@ApiOperation("获取缴费金额图表")
@SaCheckPermission("member.payment.chartSummary")
public Result getPayMoneyChart(@Param("startYear") Integer startYear,
@Param("endYear") Integer endYear) {
Sql sql = Sqls.create("""
SELECT
mpp.projectName,
SUM( pt.tradingAmount * 0.01 ) AS money
FROM
member_payment_project mpp
LEFT JOIN member_payment_info mpi ON mpi.paymentProjectId = mpp.id
AND mpi.isPayment = 1
LEFT JOIN payment_transaction pt ON pt.memberPaymentInfoId = mpi.id
AND pt.isRefund = 0
AND pt.tradingState = 'PAY_SUCCESS'
WHERE
YEAR ( mpp.createTime ) BETWEEN @startYear
AND @endYear
GROUP BY
mpp.id
""").setParam("startYear", startYear).setParam("endYear", endYear);
return Result.success(memberPaymentService.listMap(sql));
}
@At
@ApiOperation("获取缴费、退款数量")
@SaCheckPermission("member.payment.chartSummary")
public Result getNumData(@Param("startYear") Integer startYear,
@Param("endYear") Integer endYear) {
Sql sql = Sqls.create("""
SELECT
pt.tradingAmount * 0.01 AS money,
pt.isRefund
FROM
member_payment_project mpp
LEFT JOIN member_payment_info mpi ON mpi.paymentProjectId = mpp.id
AND mpi.isPayment = 1
LEFT JOIN payment_transaction pt ON pt.memberPaymentInfoId = mpi.id
AND pt.tradingState = 'PAY_SUCCESS'
WHERE
YEAR ( mpp.createTime ) BETWEEN @startYear
AND @endYear
""").setParam("startYear", startYear).setParam("endYear", endYear);
List<NutMap> map = memberPaymentService.listMap(sql);
double payMoney = map.stream().filter(v -> !v.getBoolean("isRefund")).mapToDouble(v -> v.getDouble("money")).sum();
double refundMoney = map.stream().filter(v -> v.getBoolean("isRefund")).mapToDouble(v -> v.getDouble("money")).sum();
int refundSize = map.stream().filter(v -> v.getBoolean("isRefund")).collect(Collectors.toList()).size();
int paySize = map.stream().filter(v -> !v.getBoolean("isRefund")).collect(Collectors.toList()).size();
NutMap data = new NutMap();
data.put("payMoney", payMoney);
data.put("refundMoney", refundMoney);
data.put("paySize", paySize);
data.put("refundSize", refundSize);
return Result.success(data);
}
@At
@ApiOperation("按分工会统计会员缴费金额")
@SaCheckPermission("member.payment.chartSummary")
public Result allUnionMoney(String paymentProjectId) {
Sql sql = Sqls.create("""
SELECT
un.name AS unionname,
COALESCE ( SUM( subquery.money ), 0 ) AS money
FROM
sys_union un
LEFT JOIN (
SELECT
pt.unionId,
SUM( pt.tradingAmount * 0.01 ) AS money
FROM
payment_transaction pt
INNER JOIN member_payment_info mpi ON mpi.id = pt.memberPaymentInfoId
AND mpi.paymentProjectId = @paymentProjectId
WHERE
pt.tradingState = 'PAY_SUCCESS'
AND pt.isRefund = 0
GROUP BY
pt.unionId
) subquery ON subquery.unionId = un.id
GROUP BY
un.id,
un.unionname,
un.unioncode
ORDER BY
un.unioncode;
""").setParam("paymentProjectId", paymentProjectId);
return Result.success(memberPaymentService.listMap(sql));
}
}
@@ -0,0 +1,103 @@
package com.budwk.app.zhgh.staffmanage.memberCost.controller;
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.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.zhgh.staffmanage.memberCost.model.MemberPaymentConfig;
import com.budwk.app.zhgh.staffmanage.memberCost.service.MemberPaymentService;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
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.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import java.util.List;
@Slf4j
@IocBean
@Ok("json:full")
@ApiOperation("会员缴费配置管理")
@At("/platform/member/payment/config")
public class MemberPaymentConfigController {
@Inject
private MemberPaymentService memberPaymentService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/membercost/config.html")
@SaCheckPermission("member.payment.config")
public void index() {}
@At
@ApiOperation("缴费配置界面数据")
@SaCheckPermission("member.payment.config")
public Result pageData(PageForm pageForm, @Param("name") String name) {
Sql sql = Sqls.create("select * from member_payment_config $condition");
Cnd cnd = Cnd.NEW();
if (Strings.isNotBlank(name)) {
cnd.and(Cnd.likeEX("name", name));
}
// cnd.desc("project.`year`");
cnd.desc("createdAt");
sql.setCondition(cnd);
Pagination pagination = memberPaymentService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success().addData(pagination);
}
@At
@ApiOperation("获取缴费配置")
@SaCheckPermission("member.payment.config")
public Result getPaymentConfig(){
MemberPaymentConfig config = memberPaymentService.getConfig();
return Result.success().addData(config);
}
@At
@ApiOperation("获取缴费配置列表")
@SaCheckPermission("member.payment.config")
public Result getPaymentConfigList(){
List<MemberPaymentConfig> paymentConfigList = memberPaymentService.getPaymentConfigList();
return Result.success().addData(paymentConfigList);
}
@At
@ApiOperation("删除缴费配置")
@SaCheckPermission("member.payment.config")
@SLog(tag = "会员缴费配置", msg = "删除缴费配置,${args[0]}")
public Result doRemove(String id){
memberPaymentService.dao().clear(MemberPaymentConfig.class, Cnd.where("id", "=", id));
return Result.success();
}
@At
@ApiOperation("打开/关闭缴费配置")
@SaCheckPermission("member.payment.config")
public Result openClosedConfig(String id){
//位运算 取反
memberPaymentService.dao().update(MemberPaymentConfig.class,
Chain.makeSpecial("isDisabled", "isDisabled ^ 1"),
Cnd.where("id", "=", id));
return Result.success();
}
@At
@ApiOperation("添加/修改缴费配置")
@SaCheckPermission("member.payment.config")
@SLog(tag = "会员缴费配置", msg = "添加/修改缴费配置,id:${args[0].id}")
public Result doAddOrModify(MemberPaymentConfig memberPaymentConfig){
memberPaymentService.dao().insertOrUpdate(memberPaymentConfig);
return Result.success();
}
}
@@ -0,0 +1,187 @@
package com.budwk.app.zhgh.staffmanage.memberCost.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
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.param.PageForm;
import com.budwk.app.base.payment.model.PaymentRefundRecord;
import com.budwk.app.base.payment.model.PaymentTransaction;
import com.budwk.app.base.payment.wxpay.service.WxPayCommonService;
import com.budwk.app.base.payment.wxpay.vo.WxPayNeedParamVo;
import com.budwk.app.base.result.Result;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.staffmanage.memberCost.model.MemberPaymentInfo;
import com.budwk.app.zhgh.staffmanage.memberCost.service.MemberPaymentService;
import com.ijpay.wxpay.model.v3.Amount;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.FieldFilter;
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.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 java.util.List;
import java.util.stream.Collectors;
/**
* @version 1.0
* @Author zzr
* @nameMemberPaymentMineController
* @Date 2025/3/10 8:44
* @注释 我的缴费列表
*/
@Slf4j
@IocBean
@Ok("json:full")
@ApiOperation("我的缴费列表")
@At("/platform/member/payment/mine")
public class MemberPaymentMineController {
@Inject
private Dao dao;
@Inject
private WxPayCommonService wxPayCommonService;
@Inject
private MemberPaymentService memberPaymentService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/membercost/mine/index.html")
@SaCheckPermission("member.payment.mine")
public void index() {
}
@At
@ApiOperation("缴费配置界面数据")
@SaCheckPermission("member.payment.mine")
public Result pageData(PageForm pageForm, Integer year, Integer isPay) {
Sql sql = Sqls.create("""
SELECT
mpp.`year`,
mpp.projectName,
mpp.startTime,
mpp.endTime,
mpi.id,
mpi.isPayment,
mpi.payPersonnel,
mpi.personType,
mpi.userState,
mpi.paymentMonth,
mpi.isRefund,
mpi.refundState,
mpc.paymentStartMonth,
mpc.paymentEndMonth,
mpc.payStandards
FROM
`member_payment_info` mpi
LEFT JOIN member_payment_project mpp ON mpi.paymentProjectId = mpp.id
LEFT JOIN member_payment_config mpc ON mpc.id = mpp.configId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("YEAR(mpp.createTime)", "=", year);
cnd.andEX("mpi.userId", "=", SecurityUtil.getUserId());
cnd.and("mpp.endTime", ">=", DateUtil.today());
cnd.andEX("mpp.isDisabled", "=", 0);
if (ObjectUtil.isNotNull(isPay)) {
if (isPay == 0) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("mpi.isPayment", "=", 0);
seg.or("mpi.isPayment", "is", null);
cnd.and(seg);
} else {
cnd.and("mpi.isPayment", "=", isPay);
}
}
sql.setCondition(cnd);
Pagination pagination = memberPaymentService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success().addData(pagination);
}
@At
@RepeatSubmit
@ApiOperation("PC端唤起微信支付")
@SaCheckPermission("member.payment.mine")
@SLog(tag = "会员缴费", msg = "微信PC端订单支付,下单Id:${args[1]},交易金额:${args[0]}")
public Result pcOrderPay(Integer paymentMoney, String paymentInfoId) {
WxPayNeedParamVo paramVo = new WxPayNeedParamVo();
paramVo.setDescription(SecurityUtil.getUserUsername() + "会费缴纳支付");
paramVo.setAttach("");
paramVo.setMemberPaymentInfoId(paymentInfoId);
paramVo.setAmount(new Amount().setTotal(paymentMoney));
return wxPayCommonService.nativePay(paramVo);
}
@At
@ApiOperation("获取是否已经缴费")
@SaCheckPermission("member.payment.mine")
public Result getIsPay(String paymentInfoId) {
int count = memberPaymentService.dao().count(MemberPaymentInfo.class,
Cnd.where("id", "=", paymentInfoId).and("isPayment", "=", 1));
return Result.success().addData(count);
}
@At
@ApiOperation("获取缴费信息")
@SaCheckPermission("member.payment.mine")
public Result getPaymentInfoById(String id) {
Sql sql = Sqls.create("""
SELECT
mpi.id,
mpi.loginname,
u.username,
u.unionname,
u.unitname,
mpp.projectName,
mpi.isPayment,
mpi.payPersonnel,
mpi.personType,
mpi.paymentMonth,
mpi.paymentMoney
FROM
`member_payment_info` mpi
LEFT JOIN member_payment_project mpp ON mpi.paymentProjectId = mpp.id
LEFT JOIN `user` u ON u.loginname = mpi.loginname
WHERE
mpi.id = @id
""").setParam("id", id);
// 查出id的缴费信息,并且查出缴费记录
sql.setCallback(Sqls.callback.map());
dao.execute(sql);
NutMap result = (NutMap) sql.getResult();
// 订单信息
FieldFilter transFieldFilter = FieldFilter.locked(PaymentTransaction.class, "resultJson");
List<PaymentTransaction> transList = Daos.ext(dao, transFieldFilter).query(PaymentTransaction.class, Cnd.where("memberPaymentInfoId", "=", id).desc("createdAt"));
if (Lang.isNotEmpty(transList)) {
result.put("transList", transList);
// 退款信息
List<String> transIdList = transList.stream().map(PaymentTransaction::getId).collect(Collectors.toList());
FieldFilter refundFieldFilter = FieldFilter.locked(PaymentRefundRecord.class, "resultJson");
List<PaymentRefundRecord> refundRecordList = Daos.ext(dao, refundFieldFilter).query(PaymentRefundRecord.class,
Cnd.where("paymentTransactionId", "in", transIdList).desc("createdAt"));
if (Lang.isNotEmpty(refundRecordList)) {
result.put("refundRecordList", refundRecordList);
}
}
return Result.success().addData(result);
}
}
@@ -0,0 +1,295 @@
package com.budwk.app.zhgh.staffmanage.memberCost.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.budwk.app.base.annotation.SLog;
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.sys.models.Sys_user;
import com.budwk.app.zhgh.staffmanage.memberCost.model.MemberPaymentConfig;
import com.budwk.app.zhgh.staffmanage.memberCost.model.MemberPaymentInfo;
import com.budwk.app.zhgh.staffmanage.memberCost.model.MemberPaymentProject;
import com.budwk.app.zhgh.staffmanage.memberCost.service.MemberPaymentService;
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.Sqls;
import org.nutz.dao.impl.NutTxDao;
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.Strings;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
@Slf4j
@IocBean
@Ok("json:full")
@ApiOperation("会员缴费项目管理")
@At("/platform/member/payment/project")
public class MemberPaymentProjectController {
@Inject
private MemberPaymentService memberPaymentService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/membercost/project.html")
@SaCheckPermission("member.payment.project")
public void index() {
}
@At
@ApiOperation("缴费项目界面数据")
@SaCheckPermission("member.payment.project")
public Result pageData(PageForm pageForm,
@Param("year") String year,
@Param("projectName") String projectName) {
Sql sql = Sqls.create("select project.*,IF((SELECT count(1) FROM member_payment_info WHERE paymentProjectId = project.id)>0,TRUE,FALSE) created from member_payment_project project $condition");
Cnd cnd = Cnd.NEW();
cnd.andEX("project.`year`", "=", year);
if (Strings.isNotBlank(projectName)) {
cnd.and(Cnd.likeEX("project.projectName", projectName));
}
// cnd.desc("project.`year`");
cnd.desc("project.createTime");
sql.setCondition(cnd);
Pagination pagination = memberPaymentService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success().addData(pagination);
}
/**
* 是否开启
*
* @param id 项目Id
* @return
*/
@At
@ApiOperation("开启/禁用缴费项目")
@SaCheckPermission("member.payment.project")
public Result openClosedProject(String id) {
//位运算 取反
memberPaymentService.dao().update(MemberPaymentProject.class,
Chain.makeSpecial("isDisabled", "isDisabled ^ 1"),
Cnd.where("id", "=", id));
return Result.success();
}
/**
* 添加或修改缴费项目
*
* @param paymentProject
* @return
*/
@At
@ApiOperation("添加/修改缴费项目")
@SaCheckPermission("member.payment.project")
@SLog(tag = "会员缴费项目", msg = "添加/修改缴费项目")
public Result doSave(MemberPaymentProject paymentProject) {
memberPaymentService.insertOrUpdate(paymentProject);
return Result.success();
}
/**
* 设置缴费人员
*
* @param id 缴费项目Id
* @param isRenew 是否更行缴费人员
* @return
*/
@At
@ApiOperation("设置缴费人员")
@SaCheckPermission("member.payment.project")
@SLog(tag = "会员缴费项目", msg = "设置缴费人员")
public Result doSetPayment(String id, Boolean isRenew) {
//如果不是更新缴费人员,就删除该项目下的所有待缴费信息,再重新设置
if (!isRenew) {
memberPaymentService.clear(Cnd.where("paymentProjectId", "=", id));
}
//获取缴费项目
MemberPaymentProject project = memberPaymentService.dao().fetch(MemberPaymentProject.class, id);
//获取缴费配置
MemberPaymentConfig config = memberPaymentService.getConfigById(project.getConfigId());
List<MemberPaymentConfig.PayStandards> payStandards = config.getPayStandards();
//缴费人员类型
List<String> personTypeList = payStandards.stream().map(MemberPaymentConfig.PayStandards::getPersonType).collect(Collectors.toList());
//获取所有有入会时间的会员
List<Sys_user> memberList = memberPaymentService.dao().query(Sys_user.class, Cnd.where("personType", "in", personTypeList));
//获取该项目下的代缴人员
List<String> paymentUserIdList = memberPaymentService.query(Cnd.where("paymentProjectId", "=", id)).stream().map(MemberPaymentInfo::getUserId).collect(Collectors.toList());
//过滤出需要新增到记录表中的人员
List<Sys_user> needInsertUserIds = memberList.stream().filter(v -> !paymentUserIdList.contains(v.getId())).collect(Collectors.toList());
//该缴费配置的缴费月份是几月到几月,转为数组
String[] strings = {config.getPaymentStartMonth(),config.getPaymentEndMonth()};
DateTime beginDate = DateUtil.parse(strings[0] + "-01");
//获取月份的最后一天
DateTime endDate = DateUtil.endOfMonth(DateUtil.parse(strings[1] + "-01"));
List<MemberPaymentInfo> memberPaymentInfos = new ArrayList<>();
needInsertUserIds.forEach(v -> {
MemberPaymentInfo paymentInfo = new MemberPaymentInfo();
paymentInfo.setPersonType(v.getPersonType());
paymentInfo.setUserState(v.getUserState());
long differMonth = 0;
//如果是新入职教工,计算需要缴纳的月数
if (v.getMemberTime() == null) {
differMonth = DateUtil.betweenMonth(beginDate, endDate, false)+1;
paymentInfo.setPaymentMonth(String.valueOf(differMonth));
paymentInfo.setPayPersonnel("普通会员");
} else if (v.getMemberTime().after(beginDate) && v.getMemberTime().before(endDate)){
differMonth = DateUtil.betweenMonth(v.getMemberTime(), endDate, false)+1;
paymentInfo.setPaymentMonth(String.valueOf(differMonth));
paymentInfo.setPayPersonnel("新进会员");
//getPayment(v, payStandards, paymentInfo, differMonth,"新进会员");
}else if(v.getRetireDate()!=null&&v.getRetireDate().after(beginDate)&&v.getRetireDate().before(endDate)){
//如果是退休会员
differMonth = DateUtil.betweenMonth(beginDate, v.getRetireDate(), false)+1;
paymentInfo.setPaymentMonth(String.valueOf(differMonth));
paymentInfo.setPayPersonnel("退休会员");
//getPayment(v, payStandards, paymentInfo, differMonth,"退休会员");
}else {
//如果是普通会员
differMonth = DateUtil.betweenMonth(beginDate, endDate, false)+1;
paymentInfo.setPaymentMonth(String.valueOf(differMonth));
paymentInfo.setPayPersonnel("普通会员");
//getPayment(v, payStandards, paymentInfo, differMonth,"普通会员");
}
paymentInfo.setUserId(v.getId());
paymentInfo.setLoginname(v.getLoginname());
paymentInfo.setPaymentProjectId(id);
paymentInfo.setPayment(false);
memberPaymentInfos.add(paymentInfo);
});
if (memberPaymentInfos.size() < 500) {
memberPaymentService.insert(memberPaymentInfos);
} else {
List<List<MemberPaymentInfo>> splitList = CollectionUtil.split(memberPaymentInfos, 500);
NutTxDao nutTxDao = new NutTxDao(memberPaymentService.dao()).setDebug(true);
nutTxDao.beginRC();
ExecutorService executorService = Executors.newWorkStealingPool();
List<Callable<Object>> taskList = new ArrayList<>();
for (List<MemberPaymentInfo> everyList : splitList) {
taskList.add(() -> nutTxDao.insert(everyList).size());
}
List<Future<Object>> futureList = null;
AtomicInteger atomicInteger = new AtomicInteger();
try {
futureList = executorService.invokeAll(taskList);
for (Future<Object> future : futureList) {
atomicInteger.getAndAdd((Integer) future.get());
}
if (atomicInteger.get() != memberPaymentInfos.size()) {
throw new RuntimeException("插入数据与期望数据条数不符");
}
nutTxDao.commit();
} catch (Exception e) {
nutTxDao.rollback();
throw new RuntimeException(e);
} finally {
executorService.shutdown();
}
}
return Result.success();
}
private static void getPayment(Sys_user v, List<MemberPaymentConfig.PayStandards> payStandards, MemberPaymentInfo paymentInfo, long differMonth,String payPersonnel) {
List<MemberPaymentConfig.PayStandards> list = payStandards.stream().filter(v1 -> v1.getPersonType().equals(v.getPersonType()) && payPersonnel.equals(v1.getPayPersonnel())).collect(Collectors.toList());
MemberPaymentConfig.PayStandards standards = null;
if (list!=null&&list.size()>0){
standards = list.get(0);
}
if ("在编".equals(v.getPersonType())&&standards!=null){
AtomicReference<Integer> value= new AtomicReference<>(0);
standards.getPayModeValueList().forEach(v1->{
value.set(value.get()+v1.getInt("value"));
});
paymentInfo.setPaymentMoney(String.valueOf(value.get()*0.05* differMonth));
}
if ("非编".equals(v.getPersonType())&&standards!=null){
paymentInfo.setPaymentMoney(String.valueOf(Integer.valueOf(standards.getPayModeValue())* differMonth));
}
}
/**
* 删除
*
* @param id 项目Id
* @return
*/
@At
@ApiOperation("删除缴费项目")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("member.payment.project")
@SLog(tag = "会员缴费项目", msg = "删除缴费项目: ${args[0]}")
public Result doRemove(String id) {
int paymentCount = memberPaymentService.count(Cnd.where("paymentProjectId", "=", id).and("isPayment", "=", 1));
if (paymentCount > 0) {
return Result.error().addMsg("该项目已有人完成缴费,请将缴费人员设置为未缴后再进行删除!");
}
memberPaymentService.dao().clear(MemberPaymentProject.class, Cnd.where("id", "=", id));
memberPaymentService.clear(Cnd.where("paymentProjectId", "=", id));
return Result.success();
}
/**
* 获取全部缴费项目
*
* @param year
* @return
*/
@At
@ApiOperation("获取全部缴费项目")
@SaCheckPermission(value = {"member.payment.project", "member.payment.summary"}, mode = SaMode.OR)
public Result getAllProject(String year) {
Cnd cnd = Cnd.NEW();
cnd.and("isDisabled", "=", 0);
if (Strings.isNotBlank(year)) {
cnd.and("`year`", "=", year);
}
cnd.desc("createTime");
cnd.desc("year");
return Result.success().addData(memberPaymentService.dao().query(MemberPaymentProject.class, cnd));
}
@At("/findOne")
@ApiOperation("获取缴费项目信息")
@SaCheckPermission(value = {"member.payment.project", "member.payment.summary"}, mode = SaMode.OR)
public Result findOne(String id) {
MemberPaymentProject oneProject = memberPaymentService.findOneProject(id);
return Result.success().addData(oneProject);
}
}
@@ -0,0 +1,115 @@
package com.budwk.app.zhgh.staffmanage.memberCost.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.ObjectUtil;
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.param.PageForm;
import com.budwk.app.base.payment.enums.TradingStateEnum;
import com.budwk.app.base.payment.model.PaymentTransaction;
import com.budwk.app.base.payment.wxpay.service.WxPayCommonService;
import com.budwk.app.base.result.Result;
import com.budwk.app.zhgh.staffmanage.memberCost.service.MemberPaymentService;
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.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
/**
* @ClassName MemberPaymentRefundController
* @Description 退款
* @Author zhf
* @Date 2025/3/11 上午8:51
*/
@Slf4j
@IocBean
@Ok("json:full")
@ApiOperation("会员缴费退款")
@At("/platform/member/payment/refund")
public class MemberPaymentRefundController {
@Inject
private WxPayCommonService wxPayCommonService;
@Inject
private MemberPaymentService memberPaymentService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/membercost/refund/index.html")
@SaCheckPermission("member.payment.refund")
public void index() {
}
@At
@ApiOperation("退款数据列表")
@SaCheckPermission("member.payment.refund")
public Result pageData(PageForm pageForm, String paymentProjectId, String transactionId, Integer isRefund) {
Sql sql = Sqls.create("""
SELECT
mpp.`year`,
mpp.projectName,
mpp.startTime,
mpp.endTime,
mpi.isPayment,
mpi.payPersonnel,
mpi.personType,
mpi.paymentMonth,
mpi.paymentTime,
pt.id,
pt.outTradeNo,
pt.transactionId,
pt.userName,
pt.loginName,
pt.unitName,
pt.unionName,
pt.tradingAmount,
pt.isRefund,
prr.createdAt AS refundTime
FROM
payment_transaction pt
LEFT JOIN `member_payment_info` mpi ON pt.memberPaymentInfoId = mpi.id
LEFT JOIN `payment_refund_record` prr ON pt.id = prr.paymentTransactionId
LEFT JOIN member_payment_project mpp ON mpi.paymentProjectId = mpp.id
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("mpi.paymentProjectId", "=", paymentProjectId);
cnd.andEX("pt.tradingState", "=", TradingStateEnum.PAY_SUCCESS);
cnd.and(Cnd.likeEX("pt.transactionId", transactionId));
if (isRefund != 3) {
cnd.andEX("pt.isRefund", "=", isRefund);
}
if (ObjectUtil.isNotEmpty(pageForm.getSearchKeyword())) {
SqlExpressionGroup group = new SqlExpressionGroup();
group.orLike("pt.userName", pageForm.getSearchKeyword());
group.orLike("pt.loginName", pageForm.getSearchKeyword());
cnd.and(group);
}
cnd.groupBy("pt.id");
cnd.desc("mpi.paymentTime");
sql.setCondition(cnd);
Pagination pagination = memberPaymentService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success().addData(pagination);
}
@At
@RepeatSubmit
@ApiOperation("缴费退款")
@SaCheckPermission("member.payment.refund")
@SLog(tag = "会员缴费退款", msg = "会员缴费退款: ${args[0]}")
public Result doRefund(@Param("id") String id) {
PaymentTransaction transaction = memberPaymentService.dao().fetch(PaymentTransaction.class, id);
Result refund = wxPayCommonService.refund(transaction.getTransactionId(), transaction.getOutTradeNo());
return Result.success().addData(refund);
}
}
@@ -0,0 +1,287 @@
package com.budwk.app.zhgh.staffmanage.memberCost.controller;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
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.sys.services.SysUserService;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.staffmanage.memberCost.model.MemberPaymentInfo;
import com.budwk.app.zhgh.staffmanage.memberCost.service.MemberPaymentService;
import com.budwk.app.zhgh.staffmanage.memberCost.template.MemberPaymentTemp;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
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.lang.Strings;
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.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedOutputStream;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.*;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@Slf4j
@IocBean
@Ok("json:full")
@ApiOperation("会员缴费汇总")
@At("/platform/member/payment/summary")
public class MemberPaymentSummaryController {
@Inject
private MemberPaymentService memberPaymentService;
@Inject
private SysUserService sysUserService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/membercost/summary.html")
@SaCheckPermission("member.payment.summary")
public void index() {
}
@At
@ApiOperation("会员缴费汇总数据")
@SaCheckPermission("member.payment.summary")
public Result pageData(PageForm pageForm,
@Param("unionId") String unionId,
@Param("unitId") String unitId,
@Param("unionGroupId") String unionGroupId,
@Param("threeUnitId") String threeUnitId,
@Param("personType") String personType,
@Param("userState") String userState,
@Param("paymentProjectId") String paymentProjectId,
@Param("year") String year,
@Param("isPay") String isPay,
@Param("schoolTimeStart") String schoolTimeStart,
@Param("schoolTimeEnd") String schoolTimeEnd,
@Param("retireDateStart") String retireDateStart,
@Param("retireDateEnd") String retireDateEnd,
@Param("search") String search) {
Sql sql = memberPaymentService.getSummarySql(pageForm.getPageOrderName(), pageForm.getPageOrderBy(), pageForm.getSearchName(),
pageForm.getSearchKeyword(), unionId, unitId, threeUnitId, unionGroupId,
personType, userState, paymentProjectId, year, isPay, schoolTimeStart, schoolTimeEnd,
retireDateStart, retireDateEnd, search);
Pagination pagination = memberPaymentService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success().addData(pagination);
}
@At
@ApiOperation("修改缴费信息")
@SLog(tag = "缴费汇总", msg = "修改缴费信息")
@SaCheckPermission("member.payment.summary")
public Result modify(@Param("ids") String[] ids, String paymentMoney, boolean isPay, String remark) {
List<String> idList = Arrays.asList(ids);
if (Lang.isNotEmpty(idList)) {
if (!isPay) {
//未缴费设为已缴费
memberPaymentService.update(Chain.make("paymentMoney", paymentMoney)
.add("remark", remark).add("isPayment", 1)
.add("paymentTime", new Date()),
Cnd.where("id", "in", idList));
} else {
//已缴费设为未缴费
memberPaymentService.update(Chain.make("paymentMoney", null)
.add("isPayment", 0).add("paymentTime", null),
Cnd.where("id", "in", idList));
}
}
return Result.success();
}
@At
@ApiOperation("删除缴费信息")
@SaCheckPermission("member.payment.summary")
@SLog(tag = "缴费汇总", msg = "根据缴费Id删除缴费信息")
public Result doRemoveById(String id) {
memberPaymentService.delete(id);
return Result.success();
}
@At
@Ok("void")
@ApiOperation("下载导入模版")
@SaCheckPermission("member.payment.summary")
public void downloadImportTemp(HttpServletResponse response) {
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, MemberPaymentTemp.class, new ArrayList<>());
CommonDownloadUtil.download("会员缴费导入模版.xlsx", workbook, response);
}
@At
@ApiOperation("导入缴费信息")
@SaCheckPermission("member.payment.summary")
@SLog(tag = "导入缴费信息", msg = "导入缴费信息")
@AdaptBy(type = UploadAdaptor.class, args = {"ioc:fileUpload"})
public Result doImport(TempFile file, String projectId) {
try {
List<MemberPaymentTemp> memberPaymentTempList = ExcelImportUtil.importExcel(file.getFile(), MemberPaymentTemp.class, new ImportParams());
List<MemberPaymentInfo> paymentUserList = memberPaymentService.query(Cnd.where("paymentProjectId", "=", projectId));
Map<String, MemberPaymentInfo> infoMap = paymentUserList.stream().collect(Collectors.toMap(MemberPaymentInfo::getLoginname, v -> v));
List<MemberPaymentTemp> errorInfos = new ArrayList<>();
List<MemberPaymentInfo> needInsertList = new ArrayList<>();
//缴费比例
for (MemberPaymentTemp v : memberPaymentTempList) {
if (infoMap.containsKey(v.getLoginname().trim())) {
MemberPaymentInfo memberPaymentInfo = infoMap.get(v.getLoginname().trim());
// 如果系统里边没有这个工号,返回错误信息,然后跳过
if (Lang.isEmpty(memberPaymentInfo)) {
v.setResult("请检查该工号是否正确!");
errorInfos.add(v);
continue;
}
memberPaymentInfo.setPayment(v.getIsPay());
if (Strings.isNotBlank(v.getPaymentBase())) {
String paymentBase = v.getPaymentBase();
BigDecimal value = new BigDecimal(paymentBase);
BigDecimal multipliedValue = value.multiply(new BigDecimal(100));
// 转换为整数类型
int result = multipliedValue.intValueExact();
memberPaymentInfo.setPaymentMoney(String.valueOf(result));
memberPaymentInfo.setPaymentTime(v.getIsPay() ? DateUtil.date() : null);
memberPaymentInfo.setRemark(v.getRemark());
memberPaymentInfo.setPaymentMethod("导入");
needInsertList.add(memberPaymentInfo);
} else {
v.setResult("请填写该教职工的缴费数据!");
errorInfos.add(v);
}
} else {
v.setResult("该教工可能不在此次缴费项目之中,请重新设置缴费人员或检查人员是否正确!");
errorInfos.add(v);
}
}
int i = 0;
if (Lang.isNotEmpty(needInsertList)) {
i = memberPaymentService.updateIgnoreNull(needInsertList);
}
if (Lang.isNotEmpty(errorInfos)) {
NutMap nutMap = NutMap.NEW();
nutMap.setv("totalCount", memberPaymentTempList.size());
nutMap.setv("successCount", i);
nutMap.setv("errorCount", errorInfos.size());
nutMap.setv("errorList", errorInfos.stream().map(v -> {
return NutMap.NEW().addv("工号", v.getLoginname()).addv("姓名", v.getUsername()).addv("错误原因", v.getResult());
}).collect(Collectors.toList()));
return Result.success(nutMap);
}
return Result.success();
} catch (Exception e) {
e.printStackTrace();
return Result.error();
}
}
@At
@Ok("void")
@ApiOperation("导出缴费信息")
@SaCheckPermission("member.payment.summary")
public void doExport(@Param("searchName") String searchName,
@Param("searchKeyword") String searchKeyword,
@Param("unionId") String unionId,
@Param("unitId") String unitId,
@Param("unionGroupId") String unionGroupId,
@Param("threeUnitId") String threeUnitId,
@Param("personType") String personType,
@Param("userState") String userState,
@Param("paymentProjectId") String paymentProjectId,
@Param("year") String year,
@Param("isPay") String isPay,
@Param("schoolTimeStart") String schoolTimeStart,
@Param("schoolTimeEnd") String schoolTimeEnd,
@Param("retireDateStart") String retireDateStart,
@Param("retireDateEnd") String retireDateEnd,
boolean isZip, HttpServletResponse response) {
Sql sql = memberPaymentService.getSummarySql(null, null, searchName, searchKeyword, unionId, unitId, threeUnitId,
unionGroupId, personType, userState, paymentProjectId, year, isPay, schoolTimeStart, schoolTimeEnd,
retireDateStart, retireDateEnd, "");
List<NutMap> list = memberPaymentService.listMap(sql);
NutMap nutMap = list.stream().findFirst().orElse(null);
List<Sys_union> unionIdList = memberPaymentService.dao().query(Sys_union.class, Cnd.NEW());
try {
assert nutMap != null;
if (isZip) {
response.setContentType("application/octet-stream");
response.setHeader("content-disposition", "attachment;filename="
+ URLEncoder.encode((Lang.isNotEmpty(nutMap) ? nutMap.getString("projectName") : "") + "缴费详情.zip", "UTF-8"));
ZipOutputStream zipOutputStream = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
for (Sys_union union : unionIdList) {
String fileName = union.getUnionCode() + union.getName().replaceAll("/", "") + "缴费记录表.xlsx";
zipOutputStream.putNextEntry(new ZipEntry(fileName));
List<NutMap> unionUserList = list.stream().filter(v -> Strings.isNotBlank(v.getString("unionid")) && v.getString("unionid").equals(union.getId())).collect(Collectors.toList());
Workbook workbook = memberPaymentService.exportOrZip(unionUserList, response.getOutputStream());
workbook.write(zipOutputStream);
zipOutputStream.closeEntry();
response.flushBuffer();
}
zipOutputStream.flush();
zipOutputStream.close();
} else {
String fileName = (Lang.isNotEmpty(nutMap) ? nutMap.getString("projectName") : "") + "缴费详情表.xlsx";
Workbook workbook = memberPaymentService.exportOrZip(list, response.getOutputStream());
CommonDownloadUtil.download(fileName, workbook, response);
}
} catch (Exception e) {
e.printStackTrace();
}
}
@At
@ApiOperation("发送缴费信息")
@SaCheckPermission("member.payment.summary")
public Result sendPaymentMsg(@Param("id") String id) {
if (Strings.isNotBlank(id)) {
List<MemberPaymentInfo> paymentInfos = memberPaymentService.query(Cnd.where("isPayment", "=", 0));
// msgApi.sendMsg();
} else {
MemberPaymentInfo paymentInfo = memberPaymentService.fetch(id);
// msgApi.sendMsg();
}
return Result.success();
}
}
@@ -0,0 +1,85 @@
package com.budwk.app.zhgh.staffmanage.memberCost.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
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.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.staffmanage.memberCost.model.MemberPaymentInfo;
import com.budwk.app.zhgh.staffmanage.memberCost.service.MemberPaymentService;
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.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Strings;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
/**
* 个人缴费管理
* @author hpf
*/
@Slf4j
@IocBean
@Ok("json:full")
@ApiOperation("个人缴费管理")
@At("/platform/member/payment/user")
public class MemberPaymentUserController {
@Inject
private MemberPaymentService memberPaymentService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/membercost/user.html")
@SaCheckPermission("member.payment.user")
public void index() {
}
@At
@ApiOperation("分页查询")
@SaCheckPermission("member.payment.user")
public Result pageData(PageForm pageForm, @Param("year") String year, @Param("projectName") String projectName){
Sql sql = Sqls.create("""
SELECT
mpi.*,
mpp.`year`,
mpp.projectName,
mpp.startTime,
mpp.endTime,
mpp.configId,
mpc.payStandards,
mpc.paymentStartMonth,
mpc.paymentEndMonth
FROM
member_payment_info mpi
LEFT JOIN member_payment_project mpp ON mpi.paymentProjectId = mpp.id
LEFT JOIN member_payment_config mpc ON mpc.id = mpp.configId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("mpp.isDisabled", "=", false);
cnd.andEX("mpp.year", "=", year);
cnd.and("mpi.userId", "=", SecurityUtil.getUserId());
if (Strings.isNotBlank(projectName)) {
cnd.and(Cnd.likeEX("mpp.projectName", projectName));
}
cnd.desc("mpp.createTime");
sql.setCondition(cnd);
Pagination pagination = memberPaymentService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success().addData(pagination);
}
@At
@ApiOperation("保存或修改")
@SaCheckPermission("member.payment.user")
public Result doSave(MemberPaymentInfo memberPaymentInfo) {
memberPaymentService.insertOrUpdate(memberPaymentInfo);
return null;
}
}
@@ -0,0 +1,97 @@
package com.budwk.app.zhgh.staffmanage.memberCost.h5controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.payment.wxpay.service.WxPayCommonService;
import com.budwk.app.base.payment.wxpay.vo.WxPayNeedParamVo;
import com.budwk.app.base.result.Result;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.staffmanage.memberCost.model.MemberPaymentInfo;
import com.budwk.app.zhgh.staffmanage.memberCost.service.MemberPaymentService;
import com.ijpay.wxpay.model.v3.Amount;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.nutz.dao.Sqls;
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;
/**
* @ClassName MobileMemberCostListController
* @Description TODO
* @Author zhf
* @Date 2024/1/26 15:37
*/
@Slf4j
@IocBean
@Ok("json:full")
@At("/mobile/memberCost/list")
public class MobileMemberCostListController {
@Inject
private MemberPaymentService memberPaymentService;
@Inject
private WxPayCommonService wxPayCommonService;
@At("")
@SaCheckPermission("member.payment.user")
@Ok("beetl:/mobile/memberCost/memberCostList.html")
public void index() {
}
@At("/paySuccess")
@SaCheckPermission("member.payment.user")
@Ok("beetl:/mobile/memberCost/paySuccess.html")
public void paySuccess() {
}
@At("/summary")
@SaCheckPermission("member.payment.user")
@Ok("beetl:/mobile/memberCost/summary.html")
public void summary() {
}
@At
@ApiOperation("获取缴费列表")
@SaCheckPermission("member.payment.user")
public Result pageData(Integer memberActive) {
Sql sql = Sqls.create("""
SELECT
mpi.*,
mpp.projectName
FROM
member_payment_info mpi
LEFT JOIN member_payment_project mpp ON mpi.paymentProjectId = mpp.id
WHERE
mpi.userId = @userId
AND mpp.isDisabled =0
and mpi.isPayment =@isPayment
""").setParam("userId", SecurityUtil.getUserId()).setParam("isPayment", memberActive);
return Result.success().addData(memberPaymentService.listMap(sql));
}
@At
@ApiOperation("获取支付信息")
@SaCheckPermission("member.payment.user")
public Result getPayInfo(String id) {
MemberPaymentInfo info = memberPaymentService.fetch(id);
return Result.success().addData(info);
}
@At
@ApiOperation("唤起微信支付")
@SaCheckPermission("member.payment.user")
@SLog(tag = "会员管理", msg = "唤起微信支付,支付金额:${args[0]};唯一Id${args[1]}")
public Result pullWeChatPay(Integer money, String busId) {
WxPayNeedParamVo wxPayNeedParamVo = new WxPayNeedParamVo();
wxPayNeedParamVo.setDescription("会费缴纳");
wxPayNeedParamVo.setMemberPaymentInfoId(busId);
wxPayNeedParamVo.setAmount(new Amount().setTotal(money));
return wxPayCommonService.jsApiPay(wxPayNeedParamVo);
}
}
@@ -0,0 +1,73 @@
package com.budwk.app.zhgh.staffmanage.memberCost.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;
import org.nutz.lang.util.NutMap;
import java.io.Serializable;
import java.util.List;
@Data
@Table
@EqualsAndHashCode(callSuper = true)
public class MemberPaymentConfig extends BaseModel {
@Column
@Name
@Comment("ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
@PrevInsert(uu32 = true)
private String id;
@Column
@Comment("缴费配置名称")
@ColDefine(type = ColType.VARCHAR,width = 50)
private String name;
@Column
@Comment("缴费标准")
@ColDefine(type = ColType.MYSQL_JSON)
private List<PayStandards> payStandards;
@Column
@Comment("未缴费退会时长")
@ColDefine(type = ColType.VARCHAR,width = 10)
private String unPaidExitDuration;
@Column
@Comment("退会模式(1,。自动退会;2.人工退会)")
@ColDefine(type = ColType.VARCHAR,width = 10)
private String exitMode;
@Column
@Comment("缴费时长(多久缴费一次)")
@ColDefine(type = ColType.VARCHAR,width = 10)
private String paidDuration;
@Column
@Comment("是否开启")
@ColDefine(type = ColType.BOOLEAN)
private boolean isDisabled;
@Column
@Comment("开始缴费月份")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String paymentStartMonth;
@Column
@Comment("结束缴费月份")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String paymentEndMonth;
@Data
public static class PayStandards implements Serializable {
private String payPersonnel;
private String payMode;
private String personType;
private String payModeValue;
private List<NutMap> payModeValueList;
}
}
@@ -0,0 +1,118 @@
package com.budwk.app.zhgh.staffmanage.memberCost.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;
import java.util.Date;
@Data
@Table
@EqualsAndHashCode(callSuper = true)
public class MemberPaymentInfo extends BaseModel {
@Column
@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 userId;
@Column
@Comment("工号")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String loginname;
@Column
@Comment("缴费项目id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String paymentProjectId;
@Column
@Comment("工资")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String wages;
@Column
@Comment("是否缴费")
@ColDefine(type = ColType.BOOLEAN)
private boolean isPayment;
@Column
@Comment("缴费基数1")
@ColDefine(type = ColType.VARCHAR,width = 32)
private String paymentBaseOne;
@Column
@Comment("缴费基数2")
@ColDefine(type = ColType.VARCHAR,width = 32)
private String paymentBaseTwo;
@Column
@Comment("缴费金额")
@ColDefine(type = ColType.VARCHAR,width = 32)
private String paymentMoney;
@Column
@Comment("缴费日期")
@ColDefine(type = ColType.DATETIME)
private Date paymentTime;
@Column
@Comment("备注")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String remark;
@Column
@Comment("支付记录Id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String payId;
@Column
@Comment("支付宝记录Id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String tradeNo;
@Column
@Comment("缴费方式")
@ColDefine(type = ColType.VARCHAR, width = 20)
private String paymentMethod;
@Column
@Comment("缴费月份")
@ColDefine(type = ColType.VARCHAR, width = 10)
private String paymentMonth;
@Column
@Comment("人员类型")
@ColDefine(type = ColType.VARCHAR, width = 20)
private String personType;
@Column
@Comment("在职状态")
@ColDefine(type = ColType.VARCHAR, width = 20)
private String userState;
@Column
@Comment("会员类型")
@ColDefine(type = ColType.VARCHAR, width = 10)
private String payPersonnel;
@Column
@Comment("是否退款")
@ColDefine(type = ColType.BOOLEAN)
private Boolean isRefund;
@Column
@Comment("退款状态")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String refundState;
}
@@ -0,0 +1,68 @@
package com.budwk.app.zhgh.staffmanage.memberCost.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;
import java.util.Date;
@Data
@Table
@EqualsAndHashCode(callSuper = true)
public class MemberPaymentProject extends BaseModel {
@Column
@Name
@Comment("ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
@PrevInsert(uu32 = true)
private String id;
@Column
@Comment("年度")
@ColDefine(type = ColType.VARCHAR, width = 4)
private String year;
@Column
@Comment("项目名称")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String projectName;
@Column
@Comment("是否开启")
@ColDefine(type = ColType.BOOLEAN)
private boolean isDisabled;
@Column
@Comment("创建时间")
@ColDefine(type = ColType.DATETIME)
private Date createTime;
@Column
@Comment("开始缴费月份")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String paymentStartMonth;
@Column
@Comment("结束缴费月份")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String paymentEndMonth;
@Column
@Comment("开始缴费时间")
@ColDefine(type = ColType.VARCHAR,width = 32)
private String startTime;
@Column
@Comment("结束缴费时间")
@ColDefine(type = ColType.VARCHAR,width = 32)
private String endTime;
@Column
@Comment("缴费配置id")
@ColDefine(type = ColType.VARCHAR,width = 32)
private String configId;
}
@@ -0,0 +1,76 @@
package com.budwk.app.zhgh.staffmanage.memberCost.service;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.staffmanage.memberCost.model.MemberPaymentConfig;
import com.budwk.app.zhgh.staffmanage.memberCost.model.MemberPaymentInfo;
import com.budwk.app.zhgh.staffmanage.memberCost.model.MemberPaymentProject;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.util.NutMap;
import java.io.OutputStream;
import java.util.List;
public interface MemberPaymentService extends BaseService<MemberPaymentInfo> {
/**
* 根据id查询缴费项目
* @param id
* @return
*/
MemberPaymentProject findOneProject(String id);
/**
* 导出缴费信息的公共方法
* @return
*/
Workbook exportOrZip(List<NutMap> list, OutputStream outputStream)throws Exception;
/**
* 获取缴费配置信息
* @return
*/
MemberPaymentConfig getConfig();
/**
* 获取缴费配置列表
* @return
*/
List<MemberPaymentConfig> getPaymentConfigList();
/**
* 根据id获取缴费配置信息
* @param configId
* @return
*/
MemberPaymentConfig getConfigById(String configId);
/**
* 会员缴费汇总数据公共sql
*
* @param pageOrderName
* @param pageOrderBy
* @param searchName
* @param searchKeyword
* @param unionId
* @param unitId
* @param threeUnitId
* @param unionGroupId
* @param personType
* @param userState
* @param paymentProjectId
* @param year
* @param isPay
* @param schoolTimeStart
* @param schoolTimeEnd
* @param retireDateStart
* @param retireDateEnd
* @param search
* @return
*/
Sql getSummarySql(String pageOrderName, String pageOrderBy, String searchName, String searchKeyword,
String unionId, String unitId, String threeUnitId, String unionGroupId,
String personType, String userState, String paymentProjectId, String year,
String isPay,String schoolTimeStart, String schoolTimeEnd, String retireDateStart,
String retireDateEnd, String search);
}
@@ -0,0 +1,174 @@
package com.budwk.app.zhgh.staffmanage.memberCost.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.constant.RoleConstant;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.staffmanage.memberCost.model.MemberPaymentConfig;
import com.budwk.app.zhgh.staffmanage.memberCost.model.MemberPaymentInfo;
import com.budwk.app.zhgh.staffmanage.memberCost.model.MemberPaymentProject;
import com.budwk.app.zhgh.staffmanage.memberCost.service.MemberPaymentService;
import lombok.extern.slf4j.Slf4j;
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.ioc.loader.annotation.IocBean;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@IocBean(args = {"refer:dao"})
public class MemberPaymentServiceImpl extends BaseServiceImpl<MemberPaymentInfo> implements MemberPaymentService {
public MemberPaymentServiceImpl(Dao dao) {
super(dao);
}
@Override
public MemberPaymentProject findOneProject(String id) {
return dao().fetch(MemberPaymentProject.class, id);
}
@Override
public Workbook exportOrZip(List<NutMap> list, OutputStream outputStream) throws Exception {
List<ExcelExportEntity> exportEntities = new ArrayList<>();
exportEntities.add(new ExcelExportEntity("工号", "loginname", 20));
exportEntities.add(new ExcelExportEntity("姓名", "username", 20));
// exportEntities.add(new ExcelExportEntity("年度", "year", 20));
exportEntities.add(new ExcelExportEntity("缴费项目", "projectName", 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("是否缴费", "isPay", 10));
exportEntities.add(new ExcelExportEntity("缴费金额", "payMoney", 10));
exportEntities.add(new ExcelExportEntity("缴费时间", "paymentTime", 20));
exportEntities.add(new ExcelExportEntity("备注", "remark", 30));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
exportParams.setHeight((short) 10);
return ExcelExportUtil.exportExcel(exportParams, exportEntities, list);
}
@Override
public MemberPaymentConfig getConfig() {
return dao().fetch(MemberPaymentConfig.class);
}
@Override
public List<MemberPaymentConfig> getPaymentConfigList() {
return dao().query(MemberPaymentConfig.class, Cnd.NEW().and("isDisabled", "=", "0"));
}
@Override
public MemberPaymentConfig getConfigById(String configId) {
return dao().fetch(MemberPaymentConfig.class, configId);
}
/**
* 会员缴费汇总数据公共sql
*
* @param pageOrderName
* @param pageOrderBy
* @param searchName
* @param searchKeyword
* @param unionId
* @param unitId
* @param threeUnitId
* @param unionGroupId
* @param personType
* @param userState
* @param paymentProjectId
* @param year
* @param isPay
* @param schoolTimeStart
* @param schoolTimeEnd
* @param retireDateStart
* @param retireDateEnd
* @param search
* @return
*/
@Override
public Sql getSummarySql(String pageOrderName, String pageOrderBy, String searchName, String searchKeyword, String unionId, String unitId, String threeUnitId, String unionGroupId, String personType, String userState, String paymentProjectId, String year, String isPay, String schoolTimeStart, String schoolTimeEnd, String retireDateStart, String retireDateEnd, String search) {
Sql sql = Sqls.create("""
SELECT
mpi.*,
(IFNULL( mpi.paymentMoney, 0 ) / 100) AS payMoney,
IF(mpi.isPayment = 1,'已缴费','未缴费') AS isPay,
mpp.projectName,
u.username,
u.sex,
u.member,
u.welfareMember,
u.unionName AS unionname,
u.unionId AS unionid,
u.unitName AS unitname,
u.unitId AS unitid,
u.mobile,
u.birthday,
u.arrivalAtSchoolDate AS schoolTime,
u.retireDate
FROM
`member_payment_info` mpi
LEFT JOIN `vw_user` u ON u.id = mpi.userId
left join `member_payment_project` mpp on mpp.id = mpi.paymentProjectId
$condition
""");
Cnd cnd = Cnd.NEW();
if (StrUtil.isNotBlank(searchName) && StrUtil.isNotBlank(searchKeyword)) {
cnd.and(Cnd.likeEX(searchName, searchKeyword));
}
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
if (AuthUtil.hasRoleOr(RoleConstant.BRANCH_UNION_CHAIRMAN.name(), RoleConstant.BRANCH_UNION_OPERATOR.name())) {
cnd.and("u.unionid", "=", SecurityUtil.getUnionId());
} else {
cnd.and("u.id", "=", SecurityUtil.getUserId());
}
}
if (Strings.isNotBlank(search)) {
cnd.orEX("u.username", "like", "%" + search + "%");
}
cnd.andEX("mpp.`year`", "=", year);
cnd.andEX("mpi.paymentProjectId", "=", paymentProjectId);
if (Strings.isNotBlank(isPay) && !"null".equals(isPay)) {
cnd.andEX("mpi.isPayment", "=", "true".equals(isPay) ? 1 : 0);
}
cnd.andEX("u.unionId", "=", unionId);
cnd.andEX("u.unitId", "=", unitId);
cnd.andEX("u.personType", "=", personType);
cnd.andEX("u.userState", "=", userState);
cnd.andEX("u.arrivalAtSchoolDate", ">=", schoolTimeStart);
cnd.andEX("u.arrivalAtSchoolDate", "<=", schoolTimeEnd);
cnd.andEX("u.retireDate", ">=", retireDateStart);
cnd.andEX("u.retireDate", "<=", retireDateEnd);
cnd.groupBy("u.id");
if (StrUtil.isNotBlank(pageOrderName) && StrUtil.isNotBlank(pageOrderBy)) {
cnd.orderBy(pageOrderName, "ascending".equalsIgnoreCase(pageOrderBy) ? "ASC" : "DESC");
} else {
cnd.desc("mpi.isPayment");
cnd.desc("mpi.paymentTime");
cnd.asc("u.loginname");
}
sql.setCondition(cnd);
return sql;
}
}
@@ -0,0 +1,34 @@
package com.budwk.app.zhgh.staffmanage.memberCost.template;
import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.Data;
@Data
public class MemberPaymentTemp {
@Excel(name = "工号")
private String loginname;
@Excel(name = "姓名")
private String username;
@Excel(name = "缴纳金额")
private String paymentBase;
@Excel(name = "是否缴费")
private Boolean isPay;
// @Excel(name = "缴纳基数2")
// String paymentBaseTwo;
// @Excel(name = "缴费金额")
// String paymentMoney;
//
// @Excel(name = "缴费日期")
// Date paymentTime;
@Excel(name = "备注")
String remark;
String result;
}
@@ -10,7 +10,7 @@ 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.member.service.MemberCommonService;
import com.budwk.app.zhgh.staffmanage.sourcechange.param.SourceChangePageForm;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@@ -21,7 +21,6 @@ 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;
@@ -48,7 +47,7 @@ public class SourceChangeManageController {
@Inject
private SysUserService sysUserService;
@Inject
private MemberManageService memberManageService;
private MemberCommonService memberCommonService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/sourcechange/manage/index.html")
@@ -118,22 +117,24 @@ public class SourceChangeManageController {
@ApiOperation("人员管理,人员全部变更信息查看")
@SaCheckPermission("staff.sourcechange.manage")
public Result getChangeInfoByUserId(String userId) {
return Result.success(memberManageService.getMemberChangeInfoByUserId(userId));
// return Result.success(memberCommonService.memberHistoryRecordsByUserId(userId));
return Result.success();
}
@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()));
// Sys_user_history history = memberCommonService.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 = memberCommonService.compareMemberChangeInfo(history);
// return Result.success(NutMap.NEW().addv("changeList", list).addv("nodeTasks", nodeTasks).addv("remark", history.getRemark()));
return Result.success();
}
}
@@ -101,7 +101,6 @@ public class SpecialStaffManageController {
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)) {
@@ -109,26 +108,23 @@ public class SpecialStaffManageController {
}
BeanUtil.copyProperties(specialStaffVo, staff);
if (specialStaffVo.getIsManyUnit()!=null && specialStaffVo.getIsManyUnit()) {
if (!user.getUnitId().equals(specialStaffVo.getUnionRelationUnitId())) {
isNotify = true;
}
// 如果是多单位人员, 更改单位为工会关系
user.setUnitId(specialStaffVo.getUnionRelationUnitId());
// user.setUnitid(specialStaffVo.getUnionRelationUnitId());
// user.setThreeUnitId(specialStaffVo.getUnionRelationThreeUnitId());
// user.setIsManyUnit(true);
dao.updateIgnoreNull(user);
staff.setIsManyUnit(true);
staff.setPersonnelRelationUnitId(viewUser.getUnitId());
staff.setPersonnelRelationUnitName(viewUser.getUnitName());
staff.setPersonnelRelationUnionId(viewUser.getUnionId());
staff.setPersonnelRelationUnionName(viewUser.getUnionName());
// staff.setPersonnelRelationThreeUnitId(viewUser.getThreeUnitId());
// staff.setPersonnelRelationThreeUnitName(viewUser.getThreeUnitName());
// staff.setPersonnelRelationUnionGroupId(viewUser.getUnionGroupId());
// staff.setPersonnelRelationUnionGroupName(viewUser.getUnionGroupName());
}
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();
}
@@ -140,7 +136,9 @@ public class SpecialStaffManageController {
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));
dao.update(Sys_user.class, Chain.make("unitId", staff.getPersonnelRelationUnitId())
.add("threeUnitId", staff.getPersonnelRelationThreeUnitId())
.add("isManyUnit", null), Cnd.where("id", "=", userId));
SysUserPublisher.notify(SysUserEvent.builder().userId(userId).memberChangeType(MemberChangeType.UNIT_CHANGE).build());
}
dao.clear(SpecialStaff.class, Cnd.where("userId", "=", userId));
@@ -151,18 +149,31 @@ public class SpecialStaffManageController {
@At
@ApiOperation("特别人员管理,查询用户")
@SaCheckPermission("staff.special.manage")
public Result queryUser(String keyWord) {
public Result queryUser(String keyWord, Boolean flag) {
Sql sql = Sqls.create("""
select id,username,loginname,unitId,unitName,unionId,unionName from `vw_user` $condition limit 0,10
select
id,
username,
loginname,
unitId,
unitName,
unionId,
unionName
from
`vw_user`
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.where("id", "not in", "(select userId from special_staff)");
if (flag) {
cnd.and("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);
}
cnd.limit(0, 10);
sql.setCondition(cnd);
List<NutMap> list = specialStaffManageService.listMap(sql);
return Result.success(list);
@@ -30,6 +30,9 @@ public class SpecialStaff extends BaseModel {
@ColDefine(type = ColType.VARCHAR, width = 32)
private String userId;
/**
* 人事关系
*/
@Column
@Comment("人事关系部门")
@ColDefine(type = ColType.VARCHAR, width = 32)
@@ -40,6 +43,11 @@ public class SpecialStaff extends BaseModel {
@ColDefine(type = ColType.VARCHAR, width = 100)
private String personnelRelationUnitName;
@Column
@Comment("人事关系工会")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String personnelRelationUnionId;
@Column
@Comment("人事关系工会名称")
@ColDefine(type = ColType.VARCHAR, width = 100)
@@ -51,25 +59,59 @@ public class SpecialStaff extends BaseModel {
private String personnelRelationThreeUnitId;
@Column
@Comment("人事关系三级单位")
@Comment("人事关系三级单位名称")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String personnelRelationThreeUnitName;
@Column
@Comment("人事关系工会小组")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String personnelRelationUnionGroupId;
@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 = 50)
private String unionRelationUnitName;
@Column
@Comment("工会关系工会")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unionRelationUnionId;
@Column
@Comment("工会关系工会名称")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String unionRelationUnionName;
@Column
@Comment("工会关系三级单位")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unionRelationThreeUnitId;
@Column
@Comment("工会关系三级单位名称")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String unionRelationThreeUnitName;
@Column
@Comment("工会关系小组")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unionRelationUnionGroupId;
@Column
@Comment("工会关系小组名称")
@ColDefine(type = ColType.VARCHAR, width = 100)
@@ -90,4 +132,6 @@ public class SpecialStaff extends BaseModel {
@Comment("特殊人员备注")
@ColDefine(type = ColType.VARCHAR, width = 200)
private String specialStaffRemark;
}
@@ -43,13 +43,13 @@ public class SpecialStaffManageServiceImpl extends BaseServiceImpl<SpecialStaff>
u.welfareMember,
u.personType,
u.userState,
u.unitName AS unionRelationUnitName,
u.unionName AS unionRelationUnionName,
u.mobile,
dict.`name` AS distSpecialStaffType,
u.birthday
FROM
`special_staff` s
LEFT JOIN `vw_user` u ON s.userId = u.id
LEFT JOIN `sys_dict` dict ON dict.`code` = s.specialStaffType
$condition
""");
Cnd cnd = Cnd.NEW();
@@ -88,9 +88,13 @@ public class SpecialStaffManageServiceImpl extends BaseServiceImpl<SpecialStaff>
id AS userId,
username,
loginname,
unitId AS personnelRelationUnitId,
unitName AS personnelRelationUnitName,
unionName AS personnelRelationUnionName,
unitid AS personnelRelationUnitId,
unitname AS personnelRelationUnitName,
unionname AS personnelRelationUnionName,
threeUnitId AS personnelRelationThreeUnitId,
threeUnitName AS personnelRelationThreeUnitName,
unionGroupId AS personnelRelationUnionGroupId,
unionGroupName AS personnelRelationUnionGroupName,
userState,
personType,
mobile