This commit is contained in:
Paidax
2025-02-20 13:56:04 +08:00
parent 409ff2e0bb
commit bce946e651
189 changed files with 9732 additions and 4037 deletions
+46 -46
View File
@@ -47,57 +47,57 @@ public class MsgApi {
/**
* @param channels 推送渠道 (INNER:站内消息; SMS:短信; Mail:邮件; WeChat:微信; DingTalk:钉钉;同时推送多个渠道用英文逗号分隔 )
* @param loginNameStr 字符串,多个工号用英文逗号分隔 ","
* @param mtype 消息类型; 0: 图文 1: 文字 2: 外链
* @param title 标题
* @param content 内容
* @param imageUrl 图片URL
* @param channels 推送渠道 (INNER:站内消息; SMS:短信; Mail:邮件; WeChat:微信; DingTalk:钉钉;同时推送多个渠道用英文逗号分隔 )
* @param loginNameStr 字符串,多个工号用英文逗号分隔 ","
* @param mtype 消息类型; 0: 图文 1: 文字 2: 外链
* @param title 标题
* @param content 内容
* @param imageUrl 图片URL
* @author zhf
* @description
*/
public void sendMsg(List<String> channels, String loginNameStr, Integer mtype, String title, String content, String imageUrl,String link) {
try {
if (!Globals.MyConfig.getBoolean("SendMsg")) {
log.info("发送失败,消息暂未开启!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
return;
}
if (Globals.isEnv(Env.dev)) {
log.info("开发模式不允许发送短信!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
return;
}
if (StrUtil.isBlank(title)||StrUtil.isBlank(content) ||Lang.isEmpty(channels) || Lang.isEmpty(loginNameStr)) {
log.info("发送失败,缺少需要参数请检查!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
return;
}
String msgToken = getMsgToken();
NutMap map = new NutMap();
map.put("channel", String.join(",", channels));
//推送范围(1:普通模式;2:全体教师;3:全体学生;4:全体人员)
map.put("objScope", 1);
map.put("objIds", loginNameStr);
map.put("mtype", mtype);
map.put("sendStatus", 1);
map.put("title", title);
map.put("content", content);
map.put("imageUrl", imageUrl);
map.put("link", link);
HttpRequest request = HttpUtil.createPost(MSG_API)
.header("token", msgToken)
.body(Json.toJson(map));
JSONObject jsonObject = JSON.parseObject(request.execute().body());
int status = jsonObject.getInteger("code");
if (status == 200) {
log.info("发送成功>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
} else {
log.info("发送失败>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
throw new RuntimeException("Message sending failed with status code: " + status + ", Message: " + jsonObject.getString("message"));
}
// if (!Globals.MyConfig.getBoolean("SendMsg")) {
// log.info("发送失败,消息暂未开启!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
// return;
// }
//
// if (Globals.isEnv(Env.dev)) {
// log.info("开发模式不允许发送短信!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
// return;
// }
//
// if (StrUtil.isBlank(title)||StrUtil.isBlank(content) ||Lang.isEmpty(channels) || Lang.isEmpty(loginNameStr)) {
// log.info("发送失败,缺少需要参数请检查!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
// return;
// }
//
// String msgToken = getMsgToken();
// NutMap map = new NutMap();
// map.put("channel", String.join(",", channels));
// //推送范围(1:普通模式;2:全体教师;3:全体学生;4:全体人员)
// map.put("objScope", 1);
// map.put("objIds", loginNameStr);
// map.put("mtype", mtype);
// map.put("sendStatus", 1);
// map.put("title", title);
// map.put("content", content);
// map.put("imageUrl", imageUrl);
// map.put("link", link);
//
// HttpRequest request = HttpUtil.createPost(MSG_API)
// .header("token", msgToken)
// .body(Json.toJson(map));
// JSONObject jsonObject = JSON.parseObject(request.execute().body());
// int status = jsonObject.getInteger("code");
//
// if (status == 200) {
// log.info("发送成功>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
// } else {
// log.info("发送失败>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
// throw new RuntimeException("Message sending failed with status code: " + status + ", Message: " + jsonObject.getString("message"));
// }
} catch (Exception e) {
e.printStackTrace();
}
@@ -63,4 +63,8 @@ public class Sys_dict extends BaseModel implements Serializable {
@Comment("有子节点")
private boolean hasChildren;
@Column
@Comment("特殊备注")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String remark;
}
@@ -1,11 +1,10 @@
package io.v.nutz.sys.models;
import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.hutool.json.JSONObject;
import io.v.nutz.base.model.BaseModel;
import io.v.nutz.zhgh.member.MemberMode;
import io.v.nutz.zhgh.member.WelfareMemberMode;
import io.v.nutz.zhgh.member.constant.MemberOrigin;
import io.v.nutz.zhgh.member.constant.MemberStatus;
import io.v.nutz.zhgh.staffmanage.member.MemberMode;
import io.v.nutz.zhgh.staffmanage.member.WelfareMemberMode;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@@ -282,7 +281,7 @@ public class Sys_user extends BaseModel implements Serializable {
private Date welfareMemberJoinTime;
/**
* @see MemberOrigin
* @see
*/
@Column
@Comment("会员来源(1 个人申请 2 补录 3 批量设置 4 其他)")
@@ -290,7 +289,7 @@ public class Sys_user extends BaseModel implements Serializable {
private Integer memberOrigin;
/**
* @see MemberStatus
* @see
*/
@Column
@Comment("会员状态")
@@ -378,22 +377,13 @@ public class Sys_user extends BaseModel implements Serializable {
private String vita;
/**
* 成员
* 家庭成员
*
* @see Family
*/
@Column
@Comment("家庭成员")
@ColDefine(type = ColType.MYSQL_JSON)
private List<Family> family;
@Data
public static class Family implements Serializable {
private String relation;
private String name;
private String unit;
private String remark;
}
private List<JSONObject> families;
/**
* end
@@ -85,41 +85,44 @@ public class UserPartUpServiceImpl extends ViServiceImpl<UserPartUp> implements
@Aop(TransAop.READ_COMMITTED)
public void renewUserState() {
//在职状态
Sql userStateSql = Sqls.create("select userState from `user` where userState is not null and userState !='' group by userState");
List<String> userStates = sysDictService.listMap(userStateSql).stream().map(v -> v.getString("userState")).collect(Collectors.toList());
List<Sys_dict> userStateList = sysDictService.getSubListByCode("UserState");
//dict中的在职状态,在user表中没有,这一部分删除
List<Sys_dict> deleteUserState = userStateList.stream().filter(v -> !userStates.contains(v.getName())).collect(Collectors.toList());
List<String> deleteUserStateIds = deleteUserState.stream().map(Sys_dict::getId).collect(Collectors.toList());
if (Lang.isNotEmpty(deleteUserStateIds)) {
sysDictService.delete(deleteUserStateIds);
}
//获取删除dict后的在职状态
List<Sys_dict> deleteRenewUserStateList = sysDictService.getSubListByCode("UserState");
Sys_dict userState = deleteRenewUserStateList.stream().findFirst().orElse(null);
assert userState != null;
//获取在职状态名
List<String> dictNameList = deleteRenewUserStateList.stream().map(Sys_dict::getName).collect(Collectors.toList());
//如果user表中有在职状态, 删除userState后的dict表中没有,就需要新增
List<String> insertUserStateList = userStates.stream().filter(v -> !dictNameList.contains(v)).collect(Collectors.toList());
insertUserStateList = insertUserStateList.stream().distinct().collect(Collectors.toList());
if (Lang.isNotEmpty(insertUserStateList)) {
for (String item : insertUserStateList) {
Sys_dict dict = new Sys_dict();
dict.setCode(item);
dict.setName(item);
sysDictService.save(dict, userState.getParentId());
}
}
// Sql userStateSql = Sqls.create("select userState from `user` where userState is not null and userState !='' group by userState");
// List<String> userStates = sysDictService.listMap(userStateSql).stream().map(v -> v.getString("userState")).collect(Collectors.toList());
// List<Sys_dict> userStateList = sysDictService.getSubListByCode("UserState");
//
// //dict中的在职状态,在user表中没有,这一部分删除
// List<Sys_dict> deleteUserState = userStateList.stream().filter(v -> !userStates.contains(v.getName())).collect(Collectors.toList());
// List<String> deleteUserStateIds = deleteUserState.stream().map(Sys_dict::getId).collect(Collectors.toList());
//
// if (Lang.isNotEmpty(deleteUserStateIds)) {
// sysDictService.delete(deleteUserStateIds);
// }
//
// //获取删除dict后的在职状态
// List<Sys_dict> deleteRenewUserStateList = sysDictService.getSubListByCode("UserState");
// Sys_dict userState = deleteRenewUserStateList.stream().findFirst().orElse(null);
// assert userState != null;
// //获取在职状态名
// List<String> dictNameList = deleteRenewUserStateList.stream().map(Sys_dict::getName).collect(Collectors.toList());
// //如果user表中有在职状态, 删除userState后的dict表中没有,就需要新增
// List<String> insertUserStateList = userStates.stream().filter(v -> !dictNameList.contains(v)).collect(Collectors.toList());
//
// insertUserStateList = insertUserStateList.stream().distinct().collect(Collectors.toList());
// if (Lang.isNotEmpty(insertUserStateList)) {
// for (String item : insertUserStateList) {
// Sys_dict dict = new Sys_dict();
// dict.setCode(item);
// dict.setName(item);
// sysDictService.save(dict, userState.getParentId());
// }
// }
//人员类型
Sql personTypeSql = Sqls.create("select personType from `user` where personType is not null and personType !='' group by personType");
List<String> personTypes = sysDictService.listMap(personTypeSql).stream().map(v -> v.getString("personType")).collect(Collectors.toList());
List<Sys_dict> personTypeList = sysDictService.getSubListByCode("UserType");
List<Sys_dict> personTypeList = sysDictService.getSubListByCode("PERSON_TYPE");
if (Lang.isEmpty(personTypeList)) {
return;
}
//dict中的personType,在user表中没有,这一部分删除
List<Sys_dict> deletePersonType = personTypeList.stream().filter(v -> !personTypes.contains(v.getName())).collect(Collectors.toList());
@@ -130,7 +133,7 @@ public class UserPartUpServiceImpl extends ViServiceImpl<UserPartUp> implements
}
//获取删除dict后的personType
List<Sys_dict> deleteRenewPersonTypeList = sysDictService.getSubListByCode("UserType");
List<Sys_dict> deleteRenewPersonTypeList = sysDictService.getSubListByCode("PERSON_TYPE");
Sys_dict personType = deleteRenewPersonTypeList.stream().findFirst().orElse(null);
assert personType != null;
//获取personType
@@ -1,7 +1,7 @@
package io.v.nutz.zhgh.data.handle;
import io.v.nutz.base.annontation.SelectEnum;
import io.v.nutz.zhgh.member.UserMode;
import io.v.nutz.zhgh.staffmanage.member.UserMode;
import lombok.Getter;
import org.apache.shiro.crypto.hash.Sha256Hash;
import org.apache.shiro.util.ByteSource;
@@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert;
import org.nutz.lang.util.NutMap;
import java.util.Date;
import java.util.List;
@@ -37,26 +38,21 @@ public class UserHistory extends Sys_user {
@Column
@Comment("更新时间")
@ColDefine(type = ColType.DATETIME)
private Date changeTime;
/**
* @see UserChangeType
*/
@Column
@Comment("变更类型")
private int changeType;
@Column
@Comment("变更类型(多种)")
private List<Integer> changeTypes;
@ColDefine(type = ColType.MYSQL_JSON)
private List<String> changeTypes;
@Column
@Comment("变更来源")
private Integer changeOrigin;
@Column
@Comment("变更人")
private String changeOperator;
@ColDefine(type = ColType.VARCHAR, width = 50)
private String changeOrigin;
@Column
@ColDefine(type = ColType.VARCHAR, width = 100)
@@ -65,10 +61,16 @@ public class UserHistory extends Sys_user {
@Column
@Comment("会员变更表记录id")
private String memberChangeRecordId;
@ColDefine(type = ColType.VARCHAR, width = 32)
private String recordId;
@Column
@ColDefine(type = ColType.VARCHAR, width = 32)
@Comment("上一次历史记录id")
private String lastHistoryId;
@Comment("详细变更记录,用于查询、列表展示")
@ColDefine(type = ColType.MYSQL_JSON)
private List<NutMap> changeInfos;
@Column
@Comment("详细变更记录,文本类型,可用于导出")
@ColDefine(type = ColType.TEXT)
private String changeInfosStr;
}
@@ -1,20 +1,27 @@
package io.v.nutz.zhgh.data.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HtmlUtil;
import io.v.nutz.base.utils.ManyAddOrRenewUtil;
import io.v.nutz.base.utils.Roles;
import io.v.nutz.sys.models.Sys_dict;
import io.v.nutz.sys.models.Sys_user_role;
import io.v.nutz.sys.services.SysDictService;
import io.v.nutz.sys.services.SysUserRoleService;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.activity.models.ActivityUserScope;
import io.v.nutz.zhgh.data.constant.SourceData;
import io.v.nutz.zhgh.data.constant.UserChangeType;
import io.v.nutz.zhgh.data.model.UserHistory;
import io.v.nutz.zhgh.data.model.UserSource;
import io.v.nutz.zhgh.data.service.HistoryUserService;
import io.v.nutz.zhgh.data.service.SourceUserService;
import io.v.nutz.zhgh.member.UserMode;
import io.v.nutz.zhgh.data.vo.SourceUserCommonVo;
import io.v.nutz.zhgh.staffmanage.member.UserMode;
import io.v.nutz.base.service.AsyncService;
import io.v.nutz.base.service.impl.ViServiceImpl;
import io.v.nutz.sys.models.Sys_user;
@@ -22,7 +29,11 @@ import io.v.nutz.sys.services.SysRoleService;
import io.v.nutz.sys.services.SysUserService;
import io.v.nutz.web.commons.controller.userpartupdate.models.UserPartUp;
import io.v.nutz.web.commons.controller.userpartupdate.service.UserPatUpService;
import io.v.nutz.zhgh.member.constant.MemberChangeOrigin;
import io.v.nutz.zhgh.staffmanage.member.constant.MemberChangeOrigin;
import io.v.nutz.zhgh.staffmanage.member.constant.MemberChangeType;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService;
import io.v.nutz.zhgh.staffmanage.sourcechange.model.SourceChangeConfig;
import io.v.nutz.zhgh.staffmanage.sourcechange.model.SourceChangeMiddleTable;
import lombok.extern.slf4j.Slf4j;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
@@ -47,6 +58,7 @@ import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
@@ -60,8 +72,6 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
super(dao);
}
// 是会员的人员类型
private final List<String> MEMBER_PERSON_TYPE = List.of("事业编制(员额)", "事业编制", "校聘编外", "同工同酬", "学校编制", "博士后(统招)");
@Inject
private AsyncService asyncService;
@@ -74,8 +84,12 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
@Inject
private SysRoleService sysRoleService;
@Inject
private SysDictService sysDictService;
@Inject
private SysUserRoleService sysUserRoleService;
@Inject
private MemberCommonService memberCommonService;
@Inject
private ManyAddOrRenewUtil manyAddOrRenewUtil;
@Override
@@ -94,13 +108,7 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
@Aop(TransAop.READ_COMMITTED)
public void updateSysUser(String pullTime, String sourceType, String[] columnNames, String isUpSet, String partGroupId, boolean isInvert) {
try {
List<Sys_user> users = sysUserService.query(Cnd.where("loginname", "is not", null));
Map<String, Sys_user> userMap = users.stream().collect(Collectors.toMap(sys_user -> sys_user.getLoginname().toLowerCase(), sys_user -> sys_user));
List<UserSource> sources = new ArrayList<>();
List<UserHistory> histories = new CopyOnWriteArrayList<>();
Map<String, String> userPartMap = new HashMap<>();
if (Strings.isNotBlank(partGroupId)) {
//如果为true,更新组别之外人员
@@ -117,6 +125,10 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
sources = query(Cnd.where("pullTime", "=", pullTime).groupBy("loginname"));
}
// 查询所有用户,判断是否需要更新
List<Sys_user> users = sysUserService.query(Cnd.where("loginname", "is not", null));
Map<String, Sys_user> userMap = users.stream().collect(Collectors.toMap(Sys_user::getLoginname, user -> user));
AtomicReference<Dao> filterColumnDao = new AtomicReference<>(dao());
// 全部更新时,要修改的用户表
@@ -125,10 +137,35 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
List<Sys_user> needInitUserList = new CopyOnWriteArrayList<>();
// 添加角色的用户
List<Sys_user_role> userRoles = new CopyOnWriteArrayList<>();
// 人员更新配置的对象
SourceChangeConfig changeConfig = dao().fetch(SourceChangeConfig.class, Cnd.NEW());
boolean isAuto = "automatic".equals(changeConfig.getSourceChangeType());
// 存储人员变更记录的表
List<UserHistory> histories = new CopyOnWriteArrayList<>();
// 如果是手动更新暂时存储到SourceChangeMiddleTable表
List<SourceChangeMiddleTable> middleTables = new CopyOnWriteArrayList<>();
// 获取人员变更字段,用于存储记录
List<Sys_dict> dictList = sysDictService.getSubListByCode("ALLOW_CHANGE_FIELDS");
Set<String> allowChangeFieldNames = dictList.stream().map(Sys_dict::getCode).collect(Collectors.toSet());
allowChangeFieldNames.add("member");
allowChangeFieldNames.add("welfareMember");
Map<String, String> dictMap = dictList.stream().collect(Collectors.toMap(Sys_dict::getCode, Sys_dict::getName));
dictMap.put("member", "会员状态");
dictMap.put("welfareMember", "福利会员状态");
// 添加会员角色
List<String> addMemberUserIds = new CopyOnWriteArrayList<>();
// 移除会员角色
List<String> deleteMemberUserIds = new CopyOnWriteArrayList<>();
// 添加福利会员角色的用户id
List<String> addWelfareMemberUserIds = new CopyOnWriteArrayList<>();
// 移除福利会员角色的用户id
List<String> deleteWelfareMemberUserIds = new CopyOnWriteArrayList<>();
// 创建一个固定大小的线程池 可以根据服务器性能调整线程池大小
int numberOfThreads = Runtime.getRuntime().availableProcessors() * 2;
@@ -148,30 +185,20 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
source.setWelfareMember(null);
Sys_user user = userMap.get(source.getLoginname().toLowerCase());
if (isAuto) {
checkMemberOrWelfareMember(changeConfig, source, user, addMemberUserIds, deleteMemberUserIds,
addWelfareMemberUserIds, deleteWelfareMemberUserIds);
} else {
if (user != null) {
source.setMember(user.getMember());
source.setWelfareMember(user.getWelfareMember());
}
}
Sys_user u = new Sys_user();
BeanUtils.copyProperties(source, u);
switch (sourceType) {
case "all" -> {
if (StrUtil.isNotBlank(source.getPersonType())
&& MEMBER_PERSON_TYPE.contains(source.getPersonType())
&& "在职".equals(source.getUserState())) {
source.setMember(1);
source.setWelfareMember(1);
// 符合条件的这类人员 人员性质设为会员
if (user != null && user.getMember() != 1) {
addMemberUserIds.add(user.getId());
}
if (user == null) {
addMemberUserIds.add(source.getId());
}
} else {
source.setMember(0);
source.setWelfareMember(0);
// 不符合条件的这类人员 人员性质设为教职工
if (user != null && user.getMember() == 1) {
deleteMemberUserIds.add(user.getId());
}
}
// 复制属性到一个新的user对象
u.setId(user == null ? source.getId() : user.getId());
if (user != null) {
@@ -194,17 +221,24 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
}
}
List<UserChangeType> changeTypes = getChangeTypes(source, user, sourceType);
if (changeTypes.contains(UserChangeType.NEW)) {
user = UserMode.initUser(u);
needInitUserList.add(user);
Sys_user_role userRole = new Sys_user_role();
userRole.setUserId(user.getId());
userRole.setRoleId(Roles.PUBLIC);
userRoles.add(userRole);
histories.add(createUserHistory(user, changeTypes));
} else if (changeTypes.size() > 0) {
histories.add(createUserHistory(user, changeTypes));
if (isAuto) {
UserHistory history = createHistory(source, user, dictMap, allowChangeFieldNames);
if (Lang.isEmpty(history)) {
continue;
}
histories.add(history);
if (history.getChangeTypes().contains(MemberChangeType.NEW.getType())) {
needInitUserList.add(u);
}
} else {
SourceChangeMiddleTable table = createSourceChangeMiddleTable(source, user, dictMap, allowChangeFieldNames);
if (Lang.isEmpty(table)) {
continue;
}
middleTables.add(table);
if (table.getChangeTypes().contains(MemberChangeType.NEW.getType())) {
needInitUserList.add(u);
}
}
}
}, Executors.newFixedThreadPool(numberOfThreads));
@@ -221,41 +255,37 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
sysUserRoleService.insert(userRoles);
}
if ("all".equals(sourceType)) {
// 添加会员角色
if (Lang.isNotEmpty(addMemberUserIds)) {
String memberRoleId = Roles.MEMBER;
List<Sys_user_role> list = addMemberUserIds.stream().map(v -> {
Sys_user_role userRole = new Sys_user_role();
userRole.setUserId(v);
userRole.setRoleId(memberRoleId);
return userRole;
}).toList();
manyAddOrRenewUtil.asyncExecuteInsert(list, 200);
}
// 不是定义的personType的人员,去除会员角色
if (Lang.isNotEmpty(deleteMemberUserIds)) {
dao().clear(Sys_user_role.class, Cnd.where("userId", "in", deleteMemberUserIds).and("roleId", "=", Roles.MEMBER));
}
}
// 添加会员
addMemberUser(addMemberUserIds, changeConfig.getIsJoinMemberActivityScope());
// 删除会员
deleteMemberUser(deleteMemberUserIds, changeConfig.getIsDeleteMemberActivityScope());
// Collection<String[]> updateColumns = SourceData.USER_FIELD_RELATION.values();
// 加入进行中的福利项目,暂时没写
if ("part".equals(sourceType)) {
massUpdatesAsync(needDoUpdateList, true, filterColumnDao);
} else {
massUpdatesAsync(needDoUpdateList, false, null);
}
// 历史记录表插入数据
historyUserService.dao().fastInsert(histories);
// 人员状态及在职状态更新
userPatUpService.renewUserState();
// 修改不在人事库的人员,删除角色
if ("automatic".equals(changeConfig.getSourceChangeType())) {
// 自动更新,修改数据表,存储历史记录
if ("part".equals(sourceType)) {
massUpdatesAsync(needDoUpdateList, true, filterColumnDao);
} else {
massUpdatesAsync(needDoUpdateList, false, null);
}
manyAddOrRenewUtil.asyncExecuteFastInsert(histories, 200);
// 人员状态及在职状态更新
// 在职状态关乎变更类型,建议自己手动更新,不要使用自动更新功能,硬要使用,请点进 renewUserState 打开注释
userPatUpService.renewUserState();
// 修改不在人事库的人员,删除角色
// userPatUpService.deleteNotInSourceUser(true);
//清除缓存
// sysUserService.clearCache();
// sysRoleService.clearCache();
//清除缓存
sysUserService.clearCache();
sysRoleService.clearCache();
} else {
manyAddOrRenewUtil.asyncExecuteFastInsert(middleTables, 200);
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage());
@@ -263,6 +293,315 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
}
/**
* 判断自动更新的会员和福利会员
* @param config 人员更新的配置
* @param source
* @param user
* @param addMemberUserIds
* @param deleteMemberUserIds
* @param addWelfareMemberUserIds
* @param deleteWelfareMemberUserIds
*/
private void checkMemberOrWelfareMember(SourceChangeConfig config, UserSource source, Sys_user user,
List<String> addMemberUserIds, List<String> deleteMemberUserIds,
List<String> addWelfareMemberUserIds, List<String> deleteWelfareMemberUserIds){
if (config == null || config.getMemberSiftList() == null) {
return;
}
config.getMemberSiftList().forEach(memberSift -> {
String siftName = memberSift.getSiftName();
Object siftValue = memberSift.getSiftValue();
boolean shouldAdd = false;
boolean shouldRemove = false;
switch (siftName) {
case "userState":
if (siftValue instanceof List<?> && source != null && source.getUserState() != null) {
List<String> userStateList = (List<String>) siftValue;
shouldAdd = userStateList.contains(source.getUserState());
shouldRemove = !shouldAdd && user != null && user.getMember() == 1;
}
break;
case "personType":
if (siftValue instanceof List<?> && source != null && source.getPersonType() != null) {
List<String> personTypeList = (List<String>) siftValue;
shouldAdd = personTypeList.contains(source.getPersonType());
shouldRemove = !shouldAdd && user != null && user.getMember() == 1;
}
break;
case "loginNameStart":
if (siftValue instanceof String && source != null && source.getLoginname() != null) {
String loginNameStart = (String) siftValue;
shouldAdd = source.getLoginname().startsWith(loginNameStart);
shouldRemove = !shouldAdd && user != null && user.getMember() == 1;
}
break;
case "loginNameEnd":
if (siftValue instanceof String && source != null && source.getLoginname() != null) {
String loginNameEnd = (String) siftValue;
shouldAdd = source.getLoginname().endsWith(loginNameEnd);
shouldRemove = !shouldAdd && user != null && user.getMember() == 1;
}
break;
case "userQuery":
if (siftValue instanceof List<?> && user != null) {
List<String> userIds = (List<String>) siftValue;
shouldAdd = userIds.contains(user.getId()) && user.getMember() != 1;
}
break;
}
if (shouldAdd) {
if (user == null) {
addMemberUserIds.add(source.getId());
} else if (user.getMember() != 1) {
addMemberUserIds.add(user.getId());
}
source.setMember(1);
} else if (shouldRemove) {
deleteMemberUserIds.add(user.getId());
source.setMember(0);
}
});
config.getWelfareMemberSiftList().forEach(welfareMember -> {
String siftName = welfareMember.getSiftName();
Object siftValue = welfareMember.getSiftValue();
boolean shouldAdd = false;
boolean shouldRemove = false;
switch (siftName) {
case "member":
if ((user != null && addMemberUserIds.contains(user.getId())) || addMemberUserIds.contains(source.getId())) {
shouldAdd = true;
} else {
shouldRemove = true;
}
break;
case "userState":
if (siftValue instanceof List<?> && source != null && source.getUserState() != null) {
List<String> userStateList = (List<String>) siftValue;
shouldAdd = userStateList.contains(source.getUserState());
shouldRemove = !shouldAdd && user != null && user.getMember() == 1;
}
break;
case "personType":
if (siftValue instanceof List<?> && source != null && source.getPersonType() != null) {
List<String> personTypeList = (List<String>) siftValue;
shouldAdd = personTypeList.contains(source.getPersonType());
shouldRemove = !shouldAdd && user != null && user.getMember() == 1;
}
break;
case "loginNameStart":
if (siftValue instanceof String && source != null && source.getLoginname() != null) {
String loginNameStart = (String) siftValue;
shouldAdd = source.getLoginname().startsWith(loginNameStart);
shouldRemove = !shouldAdd && user != null && user.getMember() == 1;
}
break;
case "loginNameEnd":
if (siftValue instanceof String && source != null && source.getLoginname() != null) {
String loginNameEnd = (String) siftValue;
shouldAdd = source.getLoginname().endsWith(loginNameEnd);
shouldRemove = !shouldAdd && user != null && user.getMember() == 1;
}
break;
case "userQuery":
if (siftValue instanceof List<?> && user != null) {
List<String> userIds = (List<String>) siftValue;
shouldAdd = userIds.contains(user.getId()) && user.getMember() != 1;
}
break;
}
if (shouldAdd) {
if (user == null) {
addWelfareMemberUserIds.add(source.getId());
} else if (user.getMember() != 1) {
addWelfareMemberUserIds.add(user.getId());
}
source.setWelfareMember(1);
} else if (shouldRemove) {
deleteWelfareMemberUserIds.add(user.getId());
source.setWelfareMember(0);
}
});
}
/**
* 用于人工操作,不自动更新,不改变数据库数据
* 待人工手动调整后,变更数据库
* @param source
* @param user
* @param dictMap
* @param allowChangeFieldNames
* @return 人工操作记录表
*/
private SourceChangeMiddleTable createSourceChangeMiddleTable(UserSource source, Sys_user user, Map<String, String> dictMap, Set<String> allowChangeFieldNames) {
List<String> changeTypes = new ArrayList<>();
// 手动变更,记录新的数据,并记录变更内容
SourceChangeMiddleTable table = new SourceChangeMiddleTable();
BeanUtil.copyProperties(source, table);
table.setId(R.UU32());
table.setChangeTime(DateUtil.date());
table.setChangeOrigin(MemberChangeOrigin.SYSTEM.name());
// 新入职教职工
if (user == null) {
changeTypes.add(MemberChangeType.NEW.getType());
table.setChangeTypes(changeTypes);
return table;
}
// 获取变更记录
// 新数据
NutMap newMap = Lang.obj2nutmap(source);
// 原数据
NutMap sourceMap = Lang.obj2nutmap(user);
// 变更记录
List<NutMap> changeList = new ArrayList<>();
for (String fieldName : allowChangeFieldNames) {
memberCommonService.extractChange(newMap, sourceMap, fieldName, dictMap, changeList);
}
if (Lang.isEmpty(changeList)) {
return null;
}
String changeInfos = changeList.stream().map(v -> {
return "(变更字段:" + v.getString("fieldName") + ",变更前:" + HtmlUtil.cleanHtmlTag(v.getString("sourceValue")) + ",变更后:" + HtmlUtil.cleanHtmlTag(v.getString("newValue")) + ")";
}).collect(Collectors.joining(""));
// 比较变更数据
commonCompareChange(source, user, changeTypes);
table.setChangeTypes(changeTypes);
table.setChangeInfos(changeList);
table.setChangeInfosStr(changeInfos);
table.setIsOperate(false);
return table;
}
/**
* 自动更新,创建历史记录
* 会直接改变数据库
* @param source
* @param user
* @param dictMap
* @param allowChangeFieldNames
* @return 历史记录表
*/
private UserHistory createHistory(UserSource source, Sys_user user, Map<String, String> dictMap, Set<String> allowChangeFieldNames) {
List<String> changeTypes = new ArrayList<>();
UserHistory history = new UserHistory();
BeanUtil.copyProperties(user, history);
history.setId(R.UU32());
history.setChangeTime(DateUtil.date());
history.setChangeOrigin(MemberChangeOrigin.SYSTEM.name());
if (user == null) {
changeTypes.add(MemberChangeType.NEW.getType());
history.setChangeTypes(changeTypes);
return history;
}
// 获取变更记录
NutMap newMap = Lang.obj2nutmap(source);
NutMap sourceMap = Lang.obj2nutmap(user);
List<NutMap> changeList = new ArrayList<>();
for (String fieldName : allowChangeFieldNames) {
memberCommonService.extractChange(newMap, sourceMap, fieldName, dictMap, changeList);
}
if (Lang.isEmpty(changeList)) {
return null;
}
String changeInfos = changeList.stream().map(v -> {
return "(变更字段:" + v.getString("fieldName") + ",变更前:" + HtmlUtil.cleanHtmlTag(v.getString("sourceValue")) + ",变更后:" + HtmlUtil.cleanHtmlTag(v.getString("newValue")) + ")";
}).collect(Collectors.joining(""));
// 比较变更数据
commonCompareChange(source, user, changeTypes);
history.setChangeTypes(changeTypes);
history.setChangeInfos(changeList);
history.setChangeInfosStr(changeInfos);
return history;
}
/**
* 比较变更类型公共方法
* @param source
* @param user
* @param changeTypes
*/
private void commonCompareChange(UserSource source, Sys_user user, List<String> changeTypes){
changeTypes.add(MemberChangeType.BASIC_CHANGE.getType());
if (!ObjectUtil.equals(user.getUserState(), source.getUserState())) {
List<MemberChangeType> list = Arrays.stream(MemberChangeType.values())
.filter(v -> v.getChangeTypeName().equals(source.getUserState())).toList();
if (Lang.isNotEmpty(list)) {
changeTypes.add(list.get(0).getType());
}
}
if (!ObjectUtil.equals(user.getMember(), source.getMember())){
if (source.getMember() == 1) {
changeTypes.add(MemberChangeType.RESTORE.getType());
} else {
changeTypes.add(MemberChangeType.WITHDRAWAL.getType());
}
}
if (!ObjectUtil.equals(user.getUnitid(), source.getUnitid())) {
changeTypes.add(MemberChangeType.UNIT_CHANGE.getType());
}
}
/**
* 添加会员
* @param addMemberUserIds
* @param isJoinMemberActivityScope
*/
private void addMemberUser(List<String> addMemberUserIds, Boolean isJoinMemberActivityScope) {
if (Lang.isNotEmpty(addMemberUserIds)) {
List<Sys_user_role> roleList = addMemberUserIds.stream().distinct().map(v -> {
Sys_user_role role = new Sys_user_role();
role.setUserId(v);
role.setRoleId(Roles.MEMBER);
return role;
}).toList();
manyAddOrRenewUtil.asyncExecuteInsert(roleList, 200);
if (isJoinMemberActivityScope) {
List<ActivityUserScope> scopeList = addMemberUserIds.stream().distinct().map(v -> {
ActivityUserScope scope = new ActivityUserScope();
scope.setGroupId(1);
scope.setGroupName("工会会员");
scope.setUserId(v);
return scope;
}).toList();
manyAddOrRenewUtil.asyncExecuteInsert(scopeList, 200);
}
}
}
/**
* 删除会员
* @param deleteMemberUserIds
* @param isDeleteMemberActivityScope
*/
private void deleteMemberUser(List<String> deleteMemberUserIds, Boolean isDeleteMemberActivityScope){
if (Lang.isNotEmpty(deleteMemberUserIds)) {
dao().clear(Sys_user_role.class, Cnd.where("userId", "in", deleteMemberUserIds).and("roleId", "=", Roles.MEMBER));
if (isDeleteMemberActivityScope) {
dao().clear(ActivityUserScope.class, Cnd.where("userId", "in", deleteMemberUserIds).and("groupId", "=", 1));
}
}
}
@Override
@Aop(TransAop.READ_COMMITTED)
public void dailyScheduledUpdates() {
@@ -276,68 +615,6 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
dao().clear(UserSource.class, Cnd.where("DATE(pullTime)", "<", formatAgoWeekDate));
}
private List<UserChangeType> getChangeTypes(Sys_user source, Sys_user user, String sourceType) {
List<UserChangeType> userChangeTypes = new ArrayList<>();
if (user == null) {
userChangeTypes.add(UserChangeType.NEW);
return userChangeTypes;
} else {
if ("add".equals(sourceType)) {
return userChangeTypes;
}
if (!StringUtils.isEmpty(source.getUnitid()) && !source.getUnitid().equals(user.getUnitid())) {
userChangeTypes.add(UserChangeType.UNIT_CHANGE);
}
if (!StringUtils.isEmpty(user.getUserState()) && StrUtil.isNotEmpty(source.getUserState()) && !source.getUserState().equals(user.getUserState())) {
for (UserChangeType value : UserChangeType.values()) {
if (value.getDescription().equals(source.getUserState())) {
userChangeTypes.add(value);
}
}
}
List<String> columns = List.of("nation", "birthday", "personType", "political", "schoolTime", "jobTitle", "education", "academicDegree", "position", "leaveSchoolDate", "retireDate");
for (String column : columns) {
NutMap userSourceMap = Lang.obj2nutmap(source);
NutMap userMap = Lang.obj2nutmap(user);
String sourceValue = userSourceMap.getString(column, "");
String value = userMap.getString(column, "");
if (!sourceValue.equals(value) && StrUtil.isNotBlank(sourceValue)) {
userChangeTypes.add(UserChangeType.BASIC_CHANGE);
break;
}
}
}
return userChangeTypes;
}
/**
* 生成一条用户历史记录
*
* @param user
* @param changeTypes
* @return
*/
private UserHistory createUserHistory(Sys_user user, List<UserChangeType> changeTypes) {
//除仅更新新增人员外的方式都需要往历史记录表插数据
UserHistory history = new UserHistory();
history.setId(R.UU32());
BeanUtils.copyProperties(user, history);
history.setChangeTime(new Date());
history.setChangeTypes(changeTypes.stream().map(UserChangeType::getCode).collect(Collectors.toList()));
history.setChangeOperator(StrUtil.blankToDefault((String) ShiroUtil.getPrincipalProperty("username"), "系统"));
history.setChangeOrigin(MemberChangeOrigin.SYSTEM.getCode());
history.setChangeReason("数据自动更新");
//找出上一次更新的记录
Sql lastHistorySql = Sqls.fetchString("select id from user_history where loginname = @loginname order by changeTime");
lastHistorySql.setParam("loginname",user.getLoginname());
dao().execute(lastHistorySql);
String lastHistoryId = lastHistorySql.getString();
history.setLastHistoryId(lastHistoryId);
return history;
}
/**
* 数据大批量更新
@@ -0,0 +1,39 @@
package io.v.nutz.zhgh.data.vo;
import io.v.nutz.zhgh.staffmanage.sourcechange.model.SourceChangeConfig;
import lombok.Data;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* @version 1.0
* @Author zzr
* @nameSourceUserCommonVo
* @Date 2025/2/18 16:50
* @注释
*/
@Data
public class SourceUserCommonVo {
// 添加会员角色
private List<String> addMemberUserIds = new CopyOnWriteArrayList<>();
// 移除会员角色
private List<String> deleteMemberUserIds = new CopyOnWriteArrayList<>();
// 添加会员分组的用户id
private List<String> addMemberGroupUserIds = new CopyOnWriteArrayList<>();
// 移除会员分组的用户id
private List<String> deleteMemberGroupUserIds = new CopyOnWriteArrayList<>();
// 添加福利会员角色的用户id
private List<String> addWelfareMemberUserIds = new CopyOnWriteArrayList<>();
// 移除福利会员角色的用户id
private List<String> deleteWelfareMemberUserIds = new CopyOnWriteArrayList<>();
private SourceChangeConfig config;
}
@@ -17,7 +17,6 @@ import io.v.nutz.base.utils.OfficeTemplateUtil;
import io.v.nutz.base.utils.PageUtil;
import io.v.nutz.base.utils.Roles;
import io.v.nutz.base.utils.ViTool;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.sys.models.Sys_user_role;
import io.v.nutz.zhgh.jdh.model.db.Jdh_db;
import io.v.nutz.zhgh.jdh.model.db.TeacherMeetDelegate;
@@ -28,7 +27,6 @@ import io.v.nutz.sys.services.SysUserService;
import io.v.nutz.zhgh.jdh.model.zzjg.Jdh_dbt;
import io.v.nutz.zhgh.jdh.model.zzjg.Jdh_dbt_zcdw;
import io.v.nutz.zhgh.jdh.vo.TeacherDelegateExcelImportVo;
import io.v.nutz.zhgh.thirtyteach.template.ThirtyTeachTemp;
import io.v.nutz.zhgh.workersCongress.model.workersCongressSession;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
@@ -59,7 +57,6 @@ import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -1,35 +0,0 @@
package io.v.nutz.zhgh.member.constant;
/**
* 会员申请状态
*
* @author: 1V
* @date: 2021/1/25
* @since 1.0
*/
public interface MemberApplyState {
/**
* 待分工会审核
*/
int UNION = 10;
/**
* 分工会审核不通过
*/
int UNION_FAIL = 15;
/**
* 待校工会审核
*/
int SCHOOL_UNION = 20;
/**
* 校工会审核不通过
*/
int SCHOOL_UNION_FAIL = 25;
/**
* 正式会员
*/
int NORMAL_MEMBER = 30;
}
@@ -1,35 +0,0 @@
package io.v.nutz.zhgh.member.constant;
/**
* 会员变更申请状态
*
* @author: 1V
* @date: 2021/1/25
* @since 1.0
*/
public interface MemberChangeApplyState {
/**
* 待分工会审核
*/
int UNION = 50;
/**
* 分工会审核不通过
*/
int UNION_FAIL = 55;
/**
* 待校工会审核
*/
int SCHOOL_UNION = 60;
/**
* 校工会审核不通过
*/
int SCHOOL_UNION_FAIL = 65;
/**
* 变更成功
*/
int SUCCESS = 70;
}
@@ -1,28 +0,0 @@
package io.v.nutz.zhgh.member.constant;
import io.v.nutz.base.annontation.SelectEnum;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 会员变更来源
*
* @author: 1V
* @date: 2021/1/25
* @since 1.0
*/
@Getter
@SelectEnum
@AllArgsConstructor
public enum MemberChangeOrigin {
PERSONAL(1, "个人"),
UNION(2, "分工会"),
UNION_GROUP(3, "工会小组"),
SCHOOL(4, "校工会"),
OTHER(5, "其他"),
RETIREMENT_CHANGE(6, "退休(系统变更)"),
SYSTEM(7, "系统数据更新");
private int code;
private String description;
}
@@ -1,22 +0,0 @@
package io.v.nutz.zhgh.member.constant;
import io.v.nutz.base.annontation.SelectEnum;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 会员变更记录模式
*
* @author: 1V
* @date: 2021/1/25
* @since 1.0
*/
@Getter
@SelectEnum
@AllArgsConstructor
public enum MemberChangeRecordMode {
MEMBER(1, "会员"), WELFARE_MEMBER(2, "福利会员");
private int code;
private String description;
}
@@ -1,22 +0,0 @@
package io.v.nutz.zhgh.member.constant;
import io.v.nutz.base.annontation.SelectEnum;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 会员来源
*
* @author: 1V
* @date: 2021/1/25
* @since 1.0
*/
@Getter
@SelectEnum
@AllArgsConstructor
public enum MemberOrigin {
APPLY(1, "个人申请"), MAKE(2, "补录"), BATCH(3, "批量设置"), OTHER(4, "其他");
private int code;
private String description;
}
@@ -1,55 +0,0 @@
package io.v.nutz.zhgh.member.constant;
import io.v.nutz.base.annontation.SelectEnum;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author Aaron
*/
@Getter
@SelectEnum
@AllArgsConstructor
public enum MemberStatus {
//会员状态
NORMAL(1, "入会"),
TURN_IN(2, "转入"),
TURN_OUT(3, "转出"),
KEEP(4, "保留"),
WITHDRAWAL(5, "退会"),
RESTORE(6, "恢复"),
EXPELLED(7, "除名");
/**
* 编码
*/
private final int code;
/**
* 描述
*/
private final String description;
public String getDescByCode(int code) {
switch (code) {
case 1:
return NORMAL.getDescription();
case 2:
return TURN_IN.getDescription();
case 3:
return TURN_OUT.getDescription();
case 4:
return KEEP.getDescription();
case 5:
return WITHDRAWAL.getDescription();
case 6:
return RESTORE.getDescription();
case 7:
return EXPELLED.getDescription();
default:
return "";
}
}
}
@@ -1,173 +0,0 @@
package io.v.nutz.zhgh.member.controller.apply;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.dao.CndPlus;
import io.v.nutz.base.lang.Enum;
import io.v.nutz.base.model.Audit;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.ViService;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.member.constant.MemberApplyState;
import io.v.nutz.zhgh.member.handle.MemberApplyAuditHandle;
import io.v.nutz.zhgh.member.model.MemberApplyRecord;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresPermissions;
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;
import org.nutz.mvc.annotation.Param;
@At("/platform/member/apply/audit")
@Ok("json:full")
@IocBean
public class MemberApplyAuditController {
@At("/union")
@Ok("beetl:/platform/member/apply/audit/Union.html")
@RequiresPermissions("member.apply.audit.union")
public void union() {
}
@At("/school")
@Ok("beetl:/platform/member/apply/audit/School.html")
@RequiresPermissions("member.apply.audit.school")
public void school() {
}
@Inject("MemberApplyRecord")
private ViService<MemberApplyRecord> memberApplyRecordViService;
@Inject
private Vi vi;
/**
* @param pageForm 分页查询对象
* @param source 来源 1 分工会 2 校工会
* @return
*/
@At
@ViReturn
@RequiresPermissions(value = {"member.apply.audit.union", "member.apply.audit.school"}, logical = Logical.OR)
public Object pageData(PageForm pageForm,
@Param(value = "unionId", required = false) String unionId,
@Param(value = "unitId", required = false) String unitId,
@Param(value = "threeUnitId", required = false) String threeUnitId,
@Param(value = "unionGroupId", required = false) String unionGroupId,
@Param(value = "source", required = false) Integer source,
@Param(value = "date", required = false) String[] date,
@Param(value = "memberStatus", required = false) Integer memberStatus,
@Param(value = "audit", required = false) Integer audit) {
Sql sql = Sqls.create("""
SELECT
mar.*,
LEFT ( mar.applyTime, 10 ) applyDate,
u.username,
u.loginname,
u.unitname,
u.unionname,
u.sex,
u.mobile,
u.unitcode,
u.unioncode,
u.unionGroupName,
u.threeUnitName,
state.stateName,
state.stateColor,
IF(mar.stateId = @auditState,TRUE,FALSE) audit
FROM
member_apply_record mar
LEFT JOIN audit_state state ON mar.stateId = state.stateId
LEFT JOIN `user` u ON mar.userId = u.id $condition
""");
CndPlus cnd = CndPlus.create();
pageForm.defaultSortAsc("mar.stateId");
cnd.and(pageForm);
cnd.andEX("u.memberStatus", "=", memberStatus);
/* if (audit == 1 && !ShiroUtil.hasAnyRoles("sysadmin")) {
cnd.and("mar.unionId", "=", vi.getUnionId());
*//*cnd.and("mar.userId", "=", ShiroUtil.getUserId());*//*
} else if (audit == 2) {
cnd.and("mar.stateId", "=", source == 1 ? MemberApplyState.UNION : MemberApplyState.SCHOOL_UNION);
}*/
if (date != null && date.length == 2) {
cnd.and("date(mar.applyTime)", ">=", date[0]);
cnd.and("date(mar.applyTime)", "<=", date[1]);
}
cnd.andEX("u.unionid", "=", unionId);
cnd.andEX("u.unitid", "=", unitId);
cnd.andEX("u.threeUnitId", "=", threeUnitId);
cnd.andEX("u.unionGroupId", "=", unionGroupId);
if (!ShiroUtil.hasAnyRoles("sysadmin") && source == 1) {
cnd.and("mar.unionId", "=", vi.getUnionId());
}
if (audit == 0) {
if (source == 1) {
} else if (source == 2) {
cnd.and("mar.stateId", "!=", MemberApplyState.UNION);
cnd.and("mar.stateId", "!=", MemberApplyState.UNION_FAIL);
}
} else if (audit == 1) {
if (source == 1) {
cnd.and("mar.stateId", ">", MemberApplyState.UNION);
} else if (source == 2) {
cnd.and("mar.stateId", ">", MemberApplyState.SCHOOL_UNION);
}
} else if (audit == 2) {
if (source == 1) {
cnd.and("mar.stateId", "=", MemberApplyState.UNION);
} else if (source == 2) {
cnd.and("mar.stateId", "=", MemberApplyState.SCHOOL_UNION);
}
}
if (source == 1) {
sql.setParam("auditState", MemberApplyState.UNION);
} else {
sql.setParam("auditState", MemberApplyState.SCHOOL_UNION);
}
/* if (audit != 0) {
if (source == 1) {
cnd.and("mar.stateId", audit == 1 ? ">" : "=", MemberApplyState.UNION);
sql.setParam("auditState", MemberApplyState.UNION);
} else if (source == 2) {
cnd.and("mar.stateId", audit == 1 ? ">" : "=", MemberApplyState.SCHOOL_UNION);
sql.setParam("auditState", MemberApplyState.SCHOOL_UNION);
}
} else {
if (source == 1) {
cnd.and("mar.stateId", "<", MemberApplyState.SCHOOL_UNION);
} else if (source == 2) {
cnd.and("mar.stateId", ">=", MemberApplyState.SCHOOL_UNION);
}
}*/
sql.setCondition(cnd);
return memberApplyRecordViService.list(pageForm, sql);
}
@At
@ViReturn
@RequiresPermissions(value = {"member.apply.audit.union", "member.apply.audit.school"}, logical = Logical.OR)
public Object doAudit(String recordId, Audit audit) {
MemberApplyRecord record = memberApplyRecordViService.fetch(recordId);
MemberApplyAuditHandle applyHandle = Enum.instance(MemberApplyAuditHandle.class, record.getStateId());
applyHandle.next(record, audit);
return null;
}
}
@@ -1,272 +0,0 @@
package io.v.nutz.zhgh.member.controller.apply;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.service.ViService;
import io.v.nutz.base.utils.OfficeTemplateUtil;
import io.v.nutz.base.utils.Roles;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.base.utils.ViTool;
import io.v.nutz.sys.models.Sys_signature;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.sys.services.SysSignatureService;
import io.v.nutz.sys.services.SysUserService;
import io.v.nutz.web.commons.base.Globals;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.member.constant.MemberApplyState;
import io.v.nutz.zhgh.member.handle.MemberApplyAuditHandle;
import io.v.nutz.zhgh.member.model.MemberApplyRecord;
import io.v.nutz.zhgh.member.model.MemberCheckSelfTask;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.ddr.poi.html.HtmlRenderPolicy;
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.json.Json;
import org.nutz.lang.Lang;
import org.nutz.lang.Strings;
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 org.nutz.trans.Trans;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
@At("/platform/member/apply/submit")
@Ok("json:full")
@IocBean
public class MemberApplyController {
@At("")
@Ok("beetl:/platform/member/apply/index.html")
@RequiresPermissions("member.apply.submit")
public void index() {
}
@Inject("MemberApplyRecord")
private ViService<MemberApplyRecord> memberApplyRecordViService;
@Inject
private Vi vi;
@Inject
private SysUserService sysUserService;
@Inject
private SysSignatureService sysSignatureService;
@Inject
private OfficeTemplateUtil officeTemplateUtil;
/**
* 获取信息
*
* @return
*/
@At
@ViReturn
@RequiresPermissions("member.apply.submit")
public Object unionInfo() {
Sql userSql = Sqls.create("""
SELECT
u.id,
u.username,
u.loginname,
u.member,
u.unitid,
u.nation,
u.marriage,
un.id unionid,
un.unioncode,
un.unionname,
un.telephone,
idType,
idcard,
family,
education,
academicDegree,
political,
position,
homeAddress,
registeredResidence,
sex,
specialSkill,
vita,
mobile
FROM
sys_user u
LEFT JOIN sys_unit unit ON u.unitid = unit.id
LEFT JOIN sys_union un ON unit.unionid = un.id
WHERE
u.id = @id
""").setParam("id", ShiroUtil.getPrincipalProperty("id"));
NutMap user = memberApplyRecordViService.fetch(userSql);
if (Strings.isNotBlank(user.getString("unionid"))) {
Sql managerSql = Sqls.create("""
SELECT
GROUP_CONCAT(DISTINCT u.username ) manager
FROM
sys_user u
LEFT JOIN sys_user_role sur ON u.id = sur.userId
WHERE sur.roleId = @roleId and sur.unionid = @unionId
""").setParam("roleId", Roles.UNION_MANGER).setParam("unionId", user.getString("unionid"));
user.setv("manager", memberApplyRecordViService.fetch(managerSql).getString("manager"));
Sql marSql = Sqls.create("""
SELECT
mar.*,
u.username,
u.loginname,
un.unionname,
state.stateName,
state.stateColor
FROM
member_apply_record mar
LEFT JOIN audit_state state ON mar.stateId = state.stateId
LEFT JOIN sys_union un ON mar.unionId = un.id
LEFT JOIN sys_user u ON mar.userId = u.id
WHERE
mar.userId = @userId
ORDER BY
mar.applyTime desc
""").setParam("userId", ShiroUtil.getPrincipalProperty("id"));
List<NutMap> records = memberApplyRecordViService.listMap(marSql);
if (records.size() > 0) {
NutMap record = records.get(0);
user.setv("record", record);
if (record.getInt("stateId") == MemberApplyState.UNION_FAIL || record.getInt("stateId") == MemberApplyState.SCHOOL_UNION_FAIL) {
user.setv("reApply", true);
} else if (record.getInt("stateId") == MemberApplyState.NORMAL_MEMBER && !user.getBoolean("member")) {
user.setv("apply", true);
}
} else if (!user.getBoolean("member")) {
user.setv("apply", true);
}
user.setv("records", records);
}
return user;
}
/**
* 提交申请
*
* @return
*/
@At
@ViReturn
@RequiresPermissions("member.apply.submit")
public Object doApply(Integer memberStates) {
return MemberApplyAuditHandle.CREATE.next(new MemberApplyRecord().setMemberStates(memberStates), null);
}
@At
@ViReturn
@RequiresPermissions("member.apply.submit")
public Object doEdit(Sys_user sys_user, @Param(value = "taskId", required = false) String taskId) {
Trans.exec(() -> {
if (StrUtil.isNotBlank(taskId)) {
sysUserService.dao().update(MemberCheckSelfTask.class,
Chain.make("isFinish", true),
Cnd.where("taskId", "=", taskId).and("userId", "=", ShiroUtil.getUserId()));
}
sysUserService.updateIgnoreNull(sys_user);
sysUserService.deleteCache(sys_user.getId());
});
return null;
}
@At
@Ok("void")
@RequiresPermissions("member.apply.submit")
public void exportApply(@Param(value = "userId", required = false) String userId, HttpServletResponse response) {
try (ServletOutputStream os = response.getOutputStream()) {
Sql sql = Sqls.create("""
SELECT
u.username,
u.sex,
u.nation,
u.education,
concat(u.username, '、', u.jobTitle) as workUnit,
u.marriage,
u.academicDegree,
u.political,
u.idcard,
u.mobile,
u.registeredResidence,
u.homeAddress,
u.vita,
u.specialSkill,
u.family,
mar.signId,
mar.applyTime
FROM
sys_user u
left join member_apply_record mar on mar.userId = u.id
WHERE u.id = @id
""").setParam("id", Strings.isNotBlank(userId) ? userId : ShiroUtil.getUserId());
NutMap userMap = memberApplyRecordViService.fetch(sql);
MemberApplyRecord applyRecord = memberApplyRecordViService.fetch(Cnd.where("userId", "=", Strings.isNotBlank(userId) ? userId : ShiroUtil.getUserId()).desc("applyTime"));
//and("stateId", "=", 30)
memberApplyRecordViService.fetchLinks(applyRecord, null);
if (Strings.isNotBlank(userMap.getString("signId"))) {
Sys_signature signature = sysSignatureService.fetch(userMap.getString("signId"));
userMap.setv("userSign", signature != null ? Vi.getImg(signature.getData()) : null);
}
if (Lang.isNotEmpty(applyRecord) && applyRecord.getUnionAudit() != null) {
userMap.put("unionOpinion", applyRecord.getUnionAudit().getAuditOpinion());
userMap.put("unionUserName", applyRecord.getUnionAudit().getUsername());
if (StrUtil.isNotBlank(applyRecord.getUnionAudit().getAuditSign())) {
// userMap.put("unionUserSign", ViTool.poiBase64Image7030(applyRecord.getUnionAudit().getAuditSign()));
userMap.put("unionUserSign", Vi.getImg(applyRecord.getUnionAudit().getAuditSign()));
}
userMap.put("unionDate", DateUtil.format(applyRecord.getUnionAudit().getAuditTime(), "yyyy年MM月dd日"));
}
if (Lang.isNotEmpty(applyRecord) && applyRecord.getSchoolAudit() != null) {
userMap.put("schoolOpinion", applyRecord.getSchoolAudit().getAuditOpinion());
if (StrUtil.isNotBlank(applyRecord.getSchoolAudit().getAuditSign())) {
// userMap.put("schoolSign", ViTool.poiBase64Image7030(applyRecord.getSchoolAudit().getAuditSign()));
userMap.put("schoolSign", Vi.getImg(applyRecord.getSchoolAudit().getAuditSign()));
}
userMap.put("schoolDate", DateUtil.format(applyRecord.getSchoolAudit().getAuditTime(), "yyyy年MM月dd日"));
}
Date applyTime = applyRecord.getApplyTime();
Calendar calendar = Calendar.getInstance();
calendar.setTime(applyTime);
userMap.put("year", DateUtil.year(userMap.getTime("applyTime")));
userMap.put("month", DateUtil.month(userMap.getTime("applyTime")) + 1);
userMap.put("day", DateUtil.dayOfMonth(userMap.getTime("applyTime")));
userMap.put("schoolName", Globals.MyConfig.getString("GxName"));
ViTool.excelResponse(response, userMap.getString("username") + "-工会入会申请表.docx");
HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy();
Configure configure = Configure.builder().bind("vita", htmlRenderPolicy).build();
XWPFTemplate.compile(officeTemplateUtil.getPath("memberApply"), configure).render(userMap).writeAndClose(os);
System.out.println(Json.toJson(userMap));
} catch (Exception e) {
e.printStackTrace();
}
}
}
@@ -1,170 +0,0 @@
package io.v.nutz.zhgh.member.controller.change;
import cn.hutool.core.util.StrUtil;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.dao.CndPlus;
import io.v.nutz.base.lang.Enum;
import io.v.nutz.base.model.Audit;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.ViService;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.member.constant.MemberChangeApplyState;
import io.v.nutz.zhgh.member.constant.MemberChangeRecordMode;
import io.v.nutz.zhgh.member.handle.MemberChangeAuditHandle;
import io.v.nutz.zhgh.member.model.MemberChangeRecord;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresPermissions;
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;
import org.nutz.mvc.annotation.Param;
@At("/platform/member/change/audit")
@Ok("json:full")
@IocBean
public class MemberChangeApplyAuditController {
@At("/union")
@Ok("beetl:/platform/member/change/audit/Union.html")
@RequiresPermissions("member.change.audit.union")
public void union() {
}
@At("/school")
@Ok("beetl:/platform/member/change/audit/School.html")
@RequiresPermissions("member.change.audit.school")
public void school() {
}
@Inject("MemberChangeRecord")
private ViService<MemberChangeRecord> recordViService;
@Inject
private Vi vi;
/**
* @param pageForm 分页查询对象
* @param source 来源 1 分工会 2 校工会
* @return
*/
@At
@ViReturn
@RequiresPermissions(value = {"member.change.audit.union", "member.change.audit.school"}, logical = Logical.OR)
public Object pageData(PageForm pageForm,
@Param(value = "unionId", required = false) String unionId,
@Param(value = "unitId", required = false) String unitId,
@Param(value = "threeUnitId", required = false) String threeUnitId,
@Param(value = "unionGroupId", required = false) String unionGroupId,
@Param(value = "source", required = false) Integer source,
@Param(value = "date", required = false) String[] date,
@Param(value = "type", required = false) Integer type,
@Param(value = "memberStatus", required = false) Integer memberStatus,
@Param(value = "audit", required = false) Integer audit) {
Sql sql = Sqls.create("""
SELECT
mcr.*,
LEFT ( mcr.applyTime, 10 ) applyDate,
u.username,
u.loginname,
u.unitname,
u.unionname,
u.mobile AS MMobile,
u.unitcode,
u.unioncode,
u.unionGroupName,
u.threeUnitName,
state.stateName,
state.stateColor,
originUnit.unitcode originUnitCode,
originUnit.`name` originUnitName,
originUnion.unioncode originUnionCode,
originUnion.unionname originUnionName,
currentUnit.unitcode currentUnitCode,
currentUnit.`name` currentUnitName,
currentUnion.unioncode currentUnionCode,
currentUnion.unionname currentUnionName,
IF(mcr.stateId = @auditState,TRUE,FALSE) audit
FROM
member_change_record mcr
LEFT JOIN `user` u ON mcr.userId = u.id
LEFT JOIN audit_state state ON mcr.stateId = state.stateId
LEFT JOIN sys_unit originUnit ON mcr.originUnitId = originUnit.id
LEFT JOIN sys_union originUnion ON mcr.originUnionId = originUnion.id
LEFT JOIN sys_unit currentUnit ON mcr.currentUnitId = currentUnit.id
LEFT JOIN sys_union currentUnion ON mcr.currentUnionId = currentUnion.id
$condition
""");
CndPlus cnd = CndPlus.create();
pageForm.defaultSortAsc("mcr.stateId");
cnd.and(pageForm);
cnd.and("mcr.recordMode", "=", MemberChangeRecordMode.MEMBER.getCode());
if (date != null && date.length == 2) {
cnd.and("date(mcr.applyTime)", ">=", date[0]);
cnd.and("date(mcr.applyTime)", "<=", date[1]);
}
/*if (audit == 1) {
cnd.and("mcr.userId", "=", ShiroUtil.getUserId());
} else if (audit == 2) {
cnd.and("mcr.stateId", "=", source == 1 ? MemberChangeApplyState.UNION : MemberChangeApplyState.SCHOOL_UNION);
}*/
cnd.andEX("u.unionid", "=", unionId);
cnd.andEX("u.unitid", "=", unitId);
cnd.andEX("u.threeUnitId", "=", threeUnitId);
cnd.andEX("u.unionGroupId", "=", unionGroupId);
cnd.andEX("mcr.type", "=", type);
cnd.andEX("u.memberStatus", "=", memberStatus);
if (!ShiroUtil.hasAnyRoles("sysadmin") && source == 1) {
cnd.and("mcr.originUnionId", "=", Vi.getUnionId());
}
if (audit != 0) {
if (source == 1) {
cnd.and("mcr.stateId", audit == 1 ? ">" : "=", MemberChangeApplyState.UNION);
sql.setParam("auditState", MemberChangeApplyState.UNION);
} else if (source == 2) {
cnd.and("mcr.stateId", audit == 1 ? ">" : "=", MemberChangeApplyState.SCHOOL_UNION);
sql.setParam("auditState", MemberChangeApplyState.SCHOOL_UNION);
}
} else {
if (source == 1) {
} else if (source == 2) {
cnd.and("mcr.stateId", ">=", MemberChangeApplyState.SCHOOL_UNION);
}
}
sql.setCondition(cnd);
return recordViService.list(pageForm, sql);
}
@At
@ViReturn
@RequiresPermissions(value = {"member.change.audit.union", "member.change.audit.school"}, logical = Logical.OR)
public Object doAudit(String recordId,
Audit audit,
@Param(value = "currentUnitId", required = false) String currentUnitId,
@Param(value = "currentUnionId", required = false) String currentUnionId,
@Param(value = "currentThreeUnitId", required = false) String currentThreeUnitId) {
MemberChangeRecord record = recordViService.fetch(recordId);
if (StrUtil.isAllNotBlank(currentUnitId, currentUnionId)) {
record.setCurrentUnitId(currentUnitId);
record.setCurrentUnionId(currentUnionId);
record.setCurrentThreeUnitId(currentThreeUnitId);
recordViService.update(record);
}
MemberChangeAuditHandle applyHandle = Enum.instance(MemberChangeAuditHandle.class, record.getStateId());
applyHandle.next(record, audit);
return null;
}
}
@@ -1,123 +0,0 @@
package io.v.nutz.zhgh.member.controller.change;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.service.ViService;
import io.v.nutz.base.utils.Roles;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.member.constant.MemberChangeApplyState;
import io.v.nutz.zhgh.member.constant.MemberChangeOrigin;
import io.v.nutz.zhgh.member.constant.MemberChangeRecordMode;
import io.v.nutz.zhgh.member.handle.MemberChangeAuditHandle;
import io.v.nutz.zhgh.member.model.MemberChangeRecord;
import io.v.nutz.zhgh.member.service.MemberService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
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.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import java.util.List;
@At("/platform/member/change/apply")
@Ok("json:full")
@IocBean
public class MemberChangeApplyController {
@At("")
@Ok("beetl:/platform/member/change/Apply.html")
@RequiresPermissions("member.change.apply")
public void index() {
}
@Inject("MemberChangeRecord")
private ViService<MemberChangeRecord> changeRecordViService;
@Inject
private Vi vi;
@Inject
private MemberService memberService;
/**
* 获取信息
*
* @return
*/
@At
@ViReturn
@RequiresPermissions("member.change.apply")
public Object unionInfo() {
Sql userSql = Sqls.create("""
SELECT
u.id,
u.username,
u.loginname,
u.member,
un.id unionid,
un.unioncode,
un.unionname,
un.telephone
FROM
sys_user u
LEFT JOIN sys_unit unit ON u.unitid = unit.id
LEFT JOIN sys_union un ON unit.unionid = un.id
WHERE
u.id = @id
""").setParam("id", ShiroUtil.getPrincipalProperty("id"));
NutMap user = changeRecordViService.fetch(userSql);
if (Strings.isNotBlank(user.getString("unionid"))) {
Sql managerSql = Sqls.create("""
SELECT
GROUP_CONCAT(DISTINCT u.username ) manager
FROM
sys_user u
LEFT JOIN sys_user_role sur ON u.id = sur.userId
WHERE sur.roleId = @roleId and sur.unionid = @unionId
""").setParam("roleId", Roles.UNION_MANGER).setParam("unionId", user.getString("unionid"));
user.setv("manager", changeRecordViService.fetch(managerSql).getString("manager"));
List<NutMap> records = memberService.memberChangeRecords(ShiroUtil.getPrincipalProperty("id").toString());
if (records.size() > 0) {
NutMap record = records.get(0);
user.setv("record", record);
if (record.getInt("stateId") == MemberChangeApplyState.UNION_FAIL || record.getInt("stateId") == MemberChangeApplyState.SCHOOL_UNION_FAIL) {
user.setv("reApply", true);
} else if (record.getInt("stateId") == MemberChangeApplyState.SUCCESS && user.getBoolean("member")) {
user.setv("apply", true);
}
} else {
if (user.getBoolean("member")) {
user.setv("apply", true);
}
}
user.setv("records", records);
}
return user;
}
/**
* 提交申请
*
* @return
*/
@At
@ViReturn
@RequiresPermissions("member.change.apply")
public Object doApply(MemberChangeRecord record) {
record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
record.setApplyOrigin(MemberChangeOrigin.PERSONAL.getCode());
return MemberChangeAuditHandle.CREATE.next(record, null);
}
}
@@ -1,181 +0,0 @@
package io.v.nutz.zhgh.member.handle;
import cn.hutool.core.util.StrUtil;
import io.v.nutz.base.model.Audit;
import io.v.nutz.base.service.AuditService;
import io.v.nutz.base.service.ViService;
import io.v.nutz.base.service.impl.ViServiceImpl;
import io.v.nutz.base.utils.MsgApi;
import io.v.nutz.base.utils.Roles;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.base.utils.ViResource;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.sys.services.SysUserService;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.data.constant.UserChangeType;
import io.v.nutz.zhgh.data.model.UserHistory;
import io.v.nutz.zhgh.member.UserMode;
import io.v.nutz.zhgh.member.constant.MemberApplyState;
import io.v.nutz.zhgh.member.constant.MemberChangeOrigin;
import io.v.nutz.zhgh.member.constant.MemberOrigin;
import io.v.nutz.zhgh.member.model.MemberApplyRecord;
import lombok.Getter;
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.sql.Sql;
import org.nutz.ioc.aop.Aop;
import org.nutz.lang.random.R;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.BeanUtils;
import java.util.Date;
import java.util.List;
/**
* 会员申请审核
*
* @author: 1V
* @date: 2021/1/25
* @since 1.0
*/
@Getter
public enum MemberApplyAuditHandle {
/**
* 创建
*/
CREATE(null) {
@Override
@Aop(TransAop.READ_COMMITTED)
public MemberApplyRecord next(MemberApplyRecord record, Audit audit) {
record.setUserId(ShiroUtil.getPrincipalProperty("id").toString());
record.setStateId(MemberApplyState.UNION);
record.setUnionId(Vi.getUnionId());
record.setApplyTime(new Date());
MemberApplyRecord insert = memberApplyRecordViService.insert(record);
Sys_user user = sysUserService.fetch(record.getUserId());
Sql sql = Sqls.create("""
SELECT
su.loginname
FROM
sys_user_role sur
LEFT JOIN sys_user su ON su.id = sur.userId
WHERE
sur.roleId = @roleId
AND sur.unionid = @unionId
""").setParam("roleId", Roles.UNION_MANGER).setParam("unionId", record.getUnionId());
List<NutMap> mapList = sysUserService.listMap(sql);
MemberApplyToDoHandler.START_PROCESS.exec(record,null);
MemberApplyToDoHandler.CREATE_UNION_TASK.exec(record,NutMap.NEW().addv("unionLeader",mapList));
UserHistory history = new UserHistory();
BeanUtils.copyProperties(user, history);
history.setId(R.UU32());
history.setChangeTime(new Date());
history.setChangeTypes(List.of(UserChangeType.RESTORE.getCode()));
history.setChangeOperator(StrUtil.blankToDefault((String) ShiroUtil.getPrincipalProperty("username"), "系统"));
history.setChangeOrigin(MemberChangeOrigin.PERSONAL.getCode());
history.setChangeReason("个人申请");
history.setMemberChangeRecordId(record.getId());
/* mapList.forEach(v -> {
String content = user.getUsername() + "提交了会员申请待您审核,请前往智慧工会进行审核!";
// sendMsg.pushWeChatMsg("会员系统", content, v.getString("loginname"));
});*/
return insert;
}
},
/**
* 分工会审核
*/
AUDIT_UNION(MemberApplyState.UNION) {
@Override
public MemberApplyRecord next(MemberApplyRecord record, Audit audit) {
record.setStateId(audit.getAuditPass() ? MemberApplyState.SCHOOL_UNION : MemberApplyState.UNION_FAIL);
record.setUnionAuditId(auditService.insert(audit).getId());
memberApplyRecordViService.update(record);
Sys_user user = sysUserService.fetch(record.getUserId());
MemberApplyToDoHandler.COMPLETE_UNION_TASK.exec(record,NutMap.NEW().addv("nodeName",audit.getAuditPass() ? "基层工会通过" : "基层工会拒绝"));
// if (audit.getAuditPass()) {
//
// Sql sql = Sqls.create("""
// SELECT
// su.loginname
// FROM
// sys_user_role sur
// LEFT JOIN sys_user su ON su.id = sur.userId
// WHERE
// sur.roleId = @roleId
// """).setParam("roleId", Roles.H03);
//
// List<NutMap> mapList = sysUserService.listMap(sql);
//
// MemberApplyToDoHandler.CREATE_SCHOOL_TASK.exec(record,NutMap.NEW().addv("schoolLeader",mapList));
//
///* mapList.forEach(v -> {
//// sendMsg.pushWeChatMsg("会员系统", user.getUsername() + "提交了会员申请待您审核,请前往智慧工会进行审核!", v.getString("loginname"));
// });*/
// } else {
//// sendMsg.pushWeChatMsg("会员系统", "院级工会拒绝了您的会员申请", user.getLoginname());
// MemberApplyToDoHandler.REFUSE_UNION_TASK.exec(record,NutMap.NEW().addv("nodeName","基层工会拒绝"));
// }
return record;
}
},
/**
* 校工会审核
*/
AUDIT_SCHOOL(MemberApplyState.SCHOOL_UNION) {
@Override
public MemberApplyRecord next(MemberApplyRecord record, Audit audit) {
memberApplyRecordViService.transactional(() -> {
record.setStateId(audit.getAuditPass() ? MemberApplyState.NORMAL_MEMBER : MemberApplyState.SCHOOL_UNION_FAIL);
record.setSchoolAuditId(auditService.insert(audit).getId());
memberApplyRecordViService.update(record);
Sys_user user = sysUserService.fetch(record.getUserId());
MemberApplyToDoHandler.COMPLETE_SCHOOL_TASK.exec(record,NutMap.NEW().addv("nodeName",audit.getAuditPass() ? "审核通过" : "校工会拒绝"));
if (audit.getAuditPass()) {
sysUserService.update(Chain.make("memberOrigin", MemberOrigin.APPLY.getCode()).add("memberStatus", record.getMemberStates()), Cnd.where("id", "=", record.getUserId()));
UserMode.addMemberRole(record.getUserId());
MemberApplyToDoHandler.COMPLETE_PROCESS.exec(record,null);
// sendMsg.pushWeChatMsg("会员系统", "校工会同意了您的会员申请", user.getLoginname());
} else {
MemberApplyToDoHandler.REFUSE_UNION_TASK.exec(record,NutMap.NEW().addv("nodeName","校工会拒绝"));
// sendMsg.pushWeChatMsg("会员系统", "校工会拒绝了您的会员申请", user.getLoginname());
}
});
sysUserService.deleteCache(record.getUserId());
return record;
}
};
private Integer state;
MemberApplyAuditHandle(Integer state) {
this.state = state;
}
public ViService<MemberApplyRecord> memberApplyRecordViService = ViResource.ioc.get(ViServiceImpl.class, "MemberApplyRecord");
public AuditService auditService = ViResource.ioc.getByType(AuditService.class);
public SysUserService sysUserService = ViResource.ioc.getByType(SysUserService.class);
public MsgApi sendMsg = ViResource.ioc.getByType(MsgApi.class);
public abstract MemberApplyRecord next(MemberApplyRecord record, Audit audit);
}
@@ -1,170 +0,0 @@
package io.v.nutz.zhgh.member.handle;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import io.v.nutz.base.lang.Enum;
import io.v.nutz.base.model.Audit;
import io.v.nutz.base.service.AuditService;
import io.v.nutz.base.service.ViService;
import io.v.nutz.base.service.impl.ViServiceImpl;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.base.utils.ViResource;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.data.constant.UserChangeType;
import io.v.nutz.zhgh.data.model.UserHistory;
import io.v.nutz.zhgh.member.constant.MemberChangeApplyState;
import io.v.nutz.zhgh.member.constant.MemberChangeOrigin;
import io.v.nutz.zhgh.member.model.MemberChangeRecord;
import lombok.Getter;
import org.nutz.dao.Cnd;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.BeanUtils;
import java.util.Date;
import java.util.List;
/**
* 会员变更审核Handle
*
* @author: 1V
* @date: 2021/1/27
* @since 1.0
*/
@Getter
public enum MemberChangeAuditHandle {
/**
* 创建
*/
CREATE(null) {
@Override
public MemberChangeRecord next(MemberChangeRecord record, Audit audit) {
record.setApplyTime(new Date());
if (record.getApplyOrigin() == MemberChangeOrigin.PERSONAL.getCode()) {
record.setUserId(ShiroUtil.getPrincipalProperty("id").toString());
record.setOriginUnitId(ShiroUtil.getPrincipalProperty("unitid").toString());
record.setOriginUnionId(Vi.getUnionId());
record.setStateId(MemberChangeApplyState.UNION);
} else if (record.getApplyOrigin() == MemberChangeOrigin.UNION.getCode()) {
record.setStateId(MemberChangeApplyState.SCHOOL_UNION);
} else if (record.getApplyOrigin() == MemberChangeOrigin.SCHOOL.getCode()) {
record.setStateId(MemberChangeApplyState.SUCCESS);
}
MemberChangeRecord changeRecord = recordViService.insert(record);
UserHistory history = new UserHistory();
Sys_user user = recordViService.dao().fetch(Sys_user.class, record.getUserId());
BeanUtils.copyProperties(user, history);
history.setChangeTime(DateUtil.date());
history.setChangeType(record.getType());
history.setChangeTypes(List.of(record.getType()));
history.setChangeOrigin(record.getApplyOrigin());
history.setChangeOperator((String) ShiroUtil.getPrincipalProperty("username"));
history.setChangeReason(record.getRemark());
history.setMemberChangeRecordId(record.getId());
recordViService.insert(history);
MemberChangeToDoHandler.START_PROCESS.exec(changeRecord,null);
MemberChangeToDoHandler.CREATE_UNION_TASK.exec(changeRecord, NutMap.NEW().addv("nodeName","基层工会审核"));
return changeRecord;
}
},
/**
* 分工会审核
*/
UNION(MemberChangeApplyState.UNION) {
@Override
public MemberChangeRecord next(MemberChangeRecord record, Audit audit) {
record.setStateId(audit.getAuditPass() ? MemberChangeApplyState.SCHOOL_UNION : MemberChangeApplyState.UNION_FAIL);
record.setUnionAuditId(auditService.insert(audit).getId());
recordViService.update(record);
MemberChangeToDoHandler.COMPLETE_UNION_TASK.exec(record,NutMap.NEW().addv("nodeName",audit.getAuditPass() ? "基层工会通过" : "基层工会拒绝"));
if (audit.getAuditPass()){
if (auditService.dao().count(UserHistory.class, Cnd.where("memberChangeRecordId", "=", record.getId())) == 0) {
UserHistory history = new UserHistory();
Sys_user user = recordViService.dao().fetch(Sys_user.class, record.getUserId());
BeanUtils.copyProperties(user, history);
history.setChangeTime(DateUtil.date());
history.setChangeType(record.getType());
history.setChangeTypes(List.of(record.getType()));
history.setChangeOrigin(record.getApplyOrigin());
history.setChangeOperator((String) ShiroUtil.getPrincipalProperty("username"));
history.setChangeReason(record.getRemark());
history.setMemberChangeRecordId(record.getId());
recordViService.insert(history);
}
MemberChangeToDoHandler.CREATE_SCHOOL_TASK.exec(record,null);
} else {
MemberChangeToDoHandler.REFUSE_UNION_TASK.exec(record,NutMap.NEW().addv("nodeName","分工会拒绝"));
}
return record;
}
},
/**
* 校工会审核
*/
SCHOOL(MemberChangeApplyState.SCHOOL_UNION) {
@Override
public MemberChangeRecord next(MemberChangeRecord record, Audit audit) {
recordViService.transactional(() -> {
record.setStateId(audit.getAuditPass() ? MemberChangeApplyState.SUCCESS : MemberChangeApplyState.SCHOOL_UNION_FAIL);
record.setSchoolAuditId(auditService.insert(audit).getId());
if (record.getStateId() == MemberChangeApplyState.SUCCESS) {
if (auditService.dao().count(UserHistory.class, Cnd.where("memberChangeRecordId", "=", record.getId())) == 0) {
UserHistory history = new UserHistory();
Sys_user user = recordViService.dao().fetch(Sys_user.class, record.getUserId());
BeanUtils.copyProperties(user, history);
history.setChangeTime(DateUtil.date());
history.setChangeType(record.getType());
history.setChangeTypes(List.of(record.getType()));
history.setChangeOrigin(record.getApplyOrigin());
history.setChangeOperator((String) ShiroUtil.getPrincipalProperty("username"));
history.setChangeReason(record.getRemark());
history.setMemberChangeRecordId(record.getId());
recordViService.insert(history);
}
MemberChangeHandle handle = Enum.instance(MemberChangeHandle.class, record.getType());
handle.change(record);
if (StrUtil.isNotBlank(record.getCurrentThreeUnitId()) && !record.getCurrentThreeUnitId().equals(record.getOriginThreeUnitId())) {
MemberChangeHandle unitChangeHandle = Enum.instance(MemberChangeHandle.class, UserChangeType.UNIT_CHANGE.getCode());
unitChangeHandle.change(record);
}
}
recordViService.update(record);
});
MemberChangeToDoHandler.COMPLETE_SCHOOL_TASK.exec(record,NutMap.NEW().addv("nodeName",audit.getAuditPass() ? "审核通过" : "校工会拒绝"));
if (audit.getAuditPass()) {
MemberChangeToDoHandler.COMPLETE_PROCESS.exec(record,null);
} else {
MemberChangeToDoHandler.REFUSE_UNION_TASK.exec(record,NutMap.NEW().addv("nodeName","校工会拒绝"));
}
return record;
}
};
private Integer state;
MemberChangeAuditHandle(Integer state) {
this.state = state;
}
public AuditService auditService = ViResource.ioc.getByType(AuditService.class);
public ViService<MemberChangeRecord> recordViService = ViResource.ioc.getByType(ViServiceImpl.class);
public abstract MemberChangeRecord next(MemberChangeRecord record, Audit audit);
}
@@ -1,227 +0,0 @@
package io.v.nutz.zhgh.member.handle;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import io.v.nutz.base.service.ViService;
import io.v.nutz.base.service.impl.ViServiceImpl;
import io.v.nutz.base.utils.ViResource;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.sys.services.SysRoleService;
import io.v.nutz.sys.services.SysUserService;
import io.v.nutz.zhgh.data.constant.UserChangeType;
import io.v.nutz.zhgh.data.model.UserHistory;
import io.v.nutz.zhgh.member.MemberMode;
import io.v.nutz.zhgh.member.UserMode;
import io.v.nutz.zhgh.member.WelfareMemberMode;
import io.v.nutz.zhgh.member.constant.MemberStatus;
import io.v.nutz.zhgh.member.model.MemberChangeRecord;
import lombok.Getter;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.lang.Strings;
import java.util.List;
/**
* 会员变更Handle
*
* @author: 1V
* @date: 2021/1/27
* @see UserChangeType
* @since 1.0
*/
@Getter
public enum MemberChangeHandle {
//会员变更Handle
UNIT_CHANGE(UserChangeType.UNIT_CHANGE.getCode()) {
@Override
public void change(MemberChangeRecord record) {
archive(record.getUserId(), UserChangeType.UNIT_CHANGE);
sysUserService.update(Chain.make("unitid", record.getCurrentUnitId())
.add("unionid", record.getCurrentUnionId())
.add("threeUnitId", record.getCurrentThreeUnitId()), Cnd.where("id", "=", record.getUserId()));
sysUserService.clearCache();
sysRoleService.clearCache();
}
},
NEW(UserChangeType.NEW.getCode()) {
@Override
public void change(MemberChangeRecord record) {
archive(record.getUserId(), UserChangeType.NEW);
if (null != record.getUpdateMember() && record.getUpdateMember()){
sysUserService.update(Chain.make("schoolTime", DateUtil.today()),Cnd.where("id","=",record.getUserId()));
}
updateMemberAndWelfareMember(record);
sysUserService.clearCache();
sysRoleService.clearCache();
}
},
RESIGN(UserChangeType.RESIGN.getCode()) {
@Override
public void change(MemberChangeRecord record) {
archive(record.getUserId(), UserChangeType.RESIGN);
UserMode.removeMemberRole(record.getUserId());
updateMemberAndWelfareMember(record);
// updateMemberStatus(MemberStatus.TURN_OUT, record.getUserId());
updateUserStateAndPersonType(record);
}
},
/*DIE(UserChangeType.DIE.getCode()) {
@Override
public void change(MemberChangeRecord record) {
archive(record.getUserId(), UserChangeType.DIE);
UserMode.removeMemberRole(record.getUserId());
updateWelfareMember(record);
updateMemberStatus(MemberStatus.WITHDRAWAL, record.getUserId());
updateUserStateAndPersonType(record);
}
},*/
RETIREMENT(UserChangeType.RETIREMENT.getCode()) {
@Override
public void change(MemberChangeRecord record) {
archive(record.getUserId(), UserChangeType.RETIREMENT);
UserMode.removeMemberRole(record.getUserId());
updateMemberAndWelfareMember(record);
// updateMemberStatus(MemberStatus.KEEP, record.getUserId());
updateUserStateAndPersonType(record);
}
},
/*EXPELLED(UserChangeType.EXPELLED.getCode()) {
@Override
public void change(MemberChangeRecord record) {
archive(record.getUserId(), UserChangeType.EXPELLED);
UserMode.removeMemberRole(record.getUserId());
updateWelfareMember(record);
updateMemberStatus(MemberStatus.EXPELLED, record.getUserId());
updateUserStateAndPersonType(record);
}
},*/
RESTORE(UserChangeType.RESTORE.getCode()) {
@Override
public void change(MemberChangeRecord record) {
archive(record.getUserId(), UserChangeType.RESTORE);
UserMode.addMemberRole(record.getUserId());
updateMemberStatus(MemberStatus.RESTORE, record.getUserId());
updateMemberAndWelfareMember(record);
sysUserService.update(Chain.make("preparedBy", "会员"), Cnd.where("id", "=", record.getUserId()));
}
},
WITHDRAWAL(UserChangeType.WITHDRAWAL.getCode()) {
@Override
public void change(MemberChangeRecord record) {
archive(record.getUserId(), UserChangeType.WITHDRAWAL);
UserMode.removeMemberRole(record.getUserId());
updateMemberAndWelfareMember(record);
updateMemberStatus(MemberStatus.WITHDRAWAL, record.getUserId());
updateUserStateAndPersonType(record);
sysUserService.update(Chain.make("preparedBy", "教职工"), Cnd.where("id", "=", record.getUserId()));
}
},
CARD_CHANGE(UserChangeType.CARD_CHANGE.getCode()){
@Override
public void change(MemberChangeRecord record) {
archive(record.getUserId(), UserChangeType.CARD_CHANGE);
if (Strings.isNotBlank(record.getChangeIdCard())) {
sysUserService.update(Chain.make("idcard", record.getChangeIdCard()), Cnd.where("id", "=", record.getUserId()));
}
}
},
MOBILE_CHANGE(UserChangeType.MOBILE_CHANGE.getCode()){
@Override
public void change(MemberChangeRecord record) {
archive(record.getUserId(), UserChangeType.MOBILE_CHANGE);
if (Strings.isNotBlank(record.getChangeMobile())) {
sysUserService.update(Chain.make("mobile", record.getChangeMobile()), Cnd.where("id", "=", record.getUserId()));
}
}
};
/*EDUCATION_CHANGE(UserChangeType.EDUCATION_CHANGE.getCode()){
@Override
public void change(MemberChangeRecord record) {
archive(record.getUserId(), UserChangeType.EDUCATION_CHANGE);
if (Strings.isNotBlank(record.getEducation())) {
sysUserService.update(Chain.make("education", record.getEducation()), Cnd.where("id", "=", record.getUserId()));
}
}
};*/
/**
* 存档
*
* @param userId
* @param changeType
*/
private static void archive(String userId, UserChangeType changeType) {
Sys_user user = sysUserService.fetch(userId);
UserHistory history = new UserHistory();
BeanUtil.copyProperties(user,history);
history.setChangeTime(DateUtil.date());
history.setChangeType(changeType.getCode());
history.setChangeTypes(List.of(changeType.getCode()));
sysUserService.insert(history);
}
/**
* 更新福利会员
*
* @param record 变更记录
*/
public static void updateMemberAndWelfareMember(MemberChangeRecord record) {
if (null != record.getUpdateWelfareMember()) {
sysUserService.update(Chain.make("welfareMember", record.getUpdateWelfareMember() ? WelfareMemberMode.NORMAL.getCode() : WelfareMemberMode.NONE.getCode()), Cnd.where("id", "=", record.getUserId()));
}
if (null != record.getUpdateMember()){
sysUserService.update(Chain.make("member", record.getUpdateMember() ? MemberMode.NORMAL.getCode() : MemberMode.NONE.getCode()), Cnd.where("id", "=", record.getUserId()));
}
if (null != record.getUpdateMember() && record.getUpdateMember()) {
UserMode.addMemberRole(record.getUserId());
} else {
UserMode.removeMemberRole(record.getUserId());
}
}
/**
* 更新会员状态
*
* @param status 会员状态
* @param userId 用户id
*/
public static void updateMemberStatus(MemberStatus status, String userId) {
sysUserService.update(Chain.make("memberStatus", status.getCode()), Cnd.where("id", "=", userId));
}
/**
* 在职状态和人员类别变更
* zzr 2024-03-10 新增在职状态及人员类别的变更
* @param record 变更记录
*/
public static void updateUserStateAndPersonType(MemberChangeRecord record){
Chain chain = Chain.make("eCard",null);
if (Strings.isNotBlank(record.getChangeUserState())) {
chain.add("userState", record.getChangeUserState());
} else if (Strings.isNotBlank(record.getChangePersonType())) {
chain.add("personType", record.getChangePersonType());
}
sysUserService.update(chain,Cnd.where("id","=",record.getUserId()));
}
/**
* 变更类型
*/
private int changeType;
public static SysUserService sysUserService = ViResource.ioc.getByType(SysUserService.class);
public static SysRoleService sysRoleService = ViResource.ioc.getByType(SysRoleService.class);
public static ViService<MemberChangeRecord> recordViService = ViResource.ioc.getByType(ViServiceImpl.class);
MemberChangeHandle(int changeType) {
this.changeType = changeType;
}
public abstract void change(MemberChangeRecord record);
}
@@ -1,76 +0,0 @@
package io.v.nutz.zhgh.member.model;
import io.v.nutz.base.model.Audit;
import io.v.nutz.base.model.AuditState;
import lombok.Data;
import lombok.experimental.Accessors;
import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert;
import java.util.Date;
/**
* 会员申请记录
*
* @author: 1V
* @date: 2021/1/25
* @since 1.0
*/
@Data
@Accessors(chain = true)
@Table("member_apply_record")
public class MemberApplyRecord {
@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 unionId;
@Column
@Comment("用户id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String userId;
@Column
@Comment("状态id")
@ColDefine(type = ColType.INT, width = 8)
private Integer stateId;
@Column
@Comment("申请时间")
private Date applyTime;
/**
* @see io.v.nutz.zhgh.member.constant.MemberStatus
*/
@Column
@Comment("加入方式")
@ColDefine(type = ColType.INT, width = 2)
private Integer memberStates;
@Column
@Comment("分工会审核记录id")
@ColDefine(type = ColType.VARCHAR, width = 32)
public String unionAuditId;
@Column
@Comment("校工会审核记录id")
@ColDefine(type = ColType.VARCHAR, width = 32)
public String schoolAuditId;
@One(field = "unionAuditId")
public Audit unionAudit;
@One(field = "schoolAuditId")
public Audit schoolAudit;
@One(field = "stateId")
private AuditState auditState;
}
@@ -1,184 +0,0 @@
package io.v.nutz.zhgh.member.model;
import io.v.nutz.base.model.Audit;
import io.v.nutz.base.model.AuditState;
import io.v.nutz.sys.models.Sys_union;
import io.v.nutz.sys.models.Sys_unit;
import io.v.nutz.zhgh.member.constant.MemberChangeOrigin;
import io.v.nutz.zhgh.member.constant.MemberChangeRecordMode;
import lombok.Data;
import lombok.experimental.Accessors;
import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert;
import java.util.Date;
/**
* 会员变更记录
*
* @author: 1V
* @date: 2021/1/25
* @since 1.0
*/
@Data
@Accessors(chain = true)
@Table("member_change_record")
public class MemberChangeRecord {
@Column
@Name
@Comment("ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
@PrevInsert(uu32 = true)
private String id;
/**
* @see io.v.nutz.zhgh.member.handle.MemberChangeHandle
*/
@Column
@Comment("变更类型")
@ColDefine(type = ColType.VARCHAR, width = 32)
private int type;
@Column
@Comment("用户id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String userId;
@Column
@Comment("原单位id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String originUnitId;
@Column
@Comment("原工会id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String originUnionId;
@Column
@Comment("原三级单位id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String originThreeUnitId;
@Column
@Comment("现单位id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String currentUnitId;
@Column
@Comment("现三级单位id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String currentThreeUnitId;
@Column
@Comment("现工会id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String currentUnionId;
@Column
@Comment("备注")
@ColDefine(type = ColType.VARCHAR, width = 500)
private String remark;
@Column
@Comment("申请时间")
private Date applyTime;
/**
* @see MemberChangeOrigin
*/
@Column
@Comment("申请来源")
@ColDefine(type = ColType.INT, width = 8)
private Integer applyOrigin;
/**
* @see MemberChangeRecordMode
*/
@Column
@Comment("记录模式")
@ColDefine(type = ColType.INT, width = 8)
private Integer recordMode;
@Column
@Comment("状态id")
@ColDefine(type = ColType.INT, width = 8)
private Integer stateId;
@Column
@Comment("分工会审核记录id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unionAuditId;
@Column
@Comment("校工会审核记录id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String schoolAuditId;
@Column
@Comment("福利会员(true:增加福利会员 false:取消福利会员);针对新入职")
@ColDefine(type = ColType.BOOLEAN)
private Boolean updateWelfareMember;
@Column
@Comment("是否更新会员")
@ColDefine(type = ColType.BOOLEAN)
private Boolean updateMember;
@Column
@Comment("身份证号异动")
@ColDefine(type = ColType.VARCHAR, width = 30)
private String changeIdCard;
@Column
@Comment("手机号异动")
@ColDefine(type = ColType.VARCHAR, width = 30)
private String changeMobile;
@Column
@Comment("学历异动")
@ColDefine(type = ColType.VARCHAR, width = 30)
private String changeEducation;
@Column
@Comment("在职状态")
@ColDefine(type = ColType.VARCHAR, width = 10)
private String changeUserState;
@Column
@Comment("人员类别")
@ColDefine(type = ColType.VARCHAR, width = 10)
private String changePersonType;
@Column
@Comment("任务id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String taskId;
@One(field = "unionAuditId")
private Audit unionAudit;
@One(field = "schoolAuditId")
private Audit schoolAudit;
@One(field = "stateId")
private AuditState auditState;
@One(field = "originUnitId")
private Sys_unit originUnit;
@One(field = "originThreeUnitId")
private Sys_unit originThreeUnit;
@One(field = "originUnionId")
private Sys_union originUnion;
@One(field = "currentUnitId")
private Sys_unit currentUnit;
@One(field = "currentThreeUnitId")
private Sys_unit currentThreeUnit;
@One(field = "currentUnionId")
private Sys_union currentUnion;
}
@@ -1,44 +0,0 @@
package io.v.nutz.zhgh.member.service;
import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.dao.CndPlus;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.ViService;
import io.v.nutz.sys.models.Sys_user;
import org.nutz.lang.util.NutMap;
import java.util.List;
/**
* Todo
*
* @author: 1V
* @date: 2021/1/25
* @since 1.0
*/
public interface MemberService extends ViService<Sys_user> {
/**
* 会员变更记录
*
* @param userId
* @return
*/
List<NutMap> memberChangeRecords(String userId);
/**
* 会员变更记录
*
* @param cnd
* @return
*/
Pagination memberChangeRecords(PageForm pageForm, CndPlus cnd);
/**
* 某会员历史变更记录
* @param userId
* @return
*/
List<NutMap> memberHistoryRecordsByUserId(String userId);
}
@@ -1,118 +0,0 @@
package io.v.nutz.zhgh.member.service.impl;
import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.dao.CndPlus;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.impl.ViServiceImpl;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.zhgh.member.service.MemberService;
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.util.NutMap;
import org.nutz.plugins.wkcache.annotation.CacheDefaults;
import java.util.List;
/**
* @author 1V
*/
@IocBean(args = {"refer:dao"})
@CacheDefaults(cacheName = "member")
public class MemberServiceImpl extends ViServiceImpl<Sys_user> implements MemberService {
public MemberServiceImpl(Dao dao) {
super(dao);
}
private final String MEMBER_CHANGE_RECORDS = """
SELECT
mcr.*,
LEFT ( mcr.applyTime, 10 ) applyDate,
u.username,
u.loginname,
u.unitname,
u.unitcode,
u.unionname,
u.unioncode,
u.threeUnitName,
u.unionGroupName,
state.stateName,
state.stateColor,
originUnit.unitcode originUnitCode,
originUnit.`name` originUnitName,
originUnion.unioncode originUnionCode,
originUnion.unionname originUnionName,
currentUnit.unitcode currentUnitCode,
currentUnit.`name` currentUnitName,
currentUnion.unioncode currentUnionCode,
currentUnion.unionname currentUnionName,
originThreeUnit.`name` originThreeUnitName,
currentThreeUnit.`name` currentThreeUnitName
FROM
member_change_record mcr
LEFT JOIN `user` u ON mcr.userId = u.id
LEFT JOIN audit_state state ON mcr.stateId = state.stateId
LEFT JOIN sys_unit originUnit ON mcr.originUnitId = originUnit.id
LEFT JOIN sys_union originUnion ON mcr.originUnionId = originUnion.id
LEFT JOIN sys_unit currentUnit ON mcr.currentUnitId = currentUnit.id
LEFT JOIN sys_union currentUnion ON mcr.currentUnionId = currentUnion.id
LEFT JOIN sys_unit originThreeUnit ON mcr.originThreeUnitId = originThreeUnit.id
LEFT JOIN sys_unit currentThreeUnit ON mcr.currentThreeUnitId = currentThreeUnit.id
$condition
""";
@Override
public List<NutMap> memberChangeRecords(String userId) {
Sql sql = Sqls.create(MEMBER_CHANGE_RECORDS);
sql.setCondition(Cnd.where("mcr.userId", "=", userId).desc("mcr.applyTime"));
return listMap(sql);
}
@Override
public Pagination memberChangeRecords(PageForm pageForm, CndPlus cnd) {
Sql sql = Sqls.create(MEMBER_CHANGE_RECORDS).setCondition(cnd);
return list(pageForm, sql);
}
@Override
public List<NutMap> memberHistoryRecordsByUserId(String userId) {
Sql sql = Sqls.create("""
SELECT
his.id,
his.changeTime,
his.loginname,
his.username,
his.mobile,
his.birthday,
his.userState,
his.personType,
his.sex,
his.changeTypes,
his.changeOrigin,
his.changeOperator,
his.memberChangeRecordId,
his.changeReason,
his.lastHistoryId,
u.unitname,
u.unionname,
mcr.stateId,
state.stateName,
state.stateColor
FROM
`user_history` his
LEFT JOIN member_change_record mcr ON mcr.id = his.memberChangeRecordId
LEFT JOIN audit_state state ON mcr.stateId = state.stateId
LEFT JOIN `user` u ON u.loginname = his.loginname
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("u.id", "=", userId);
cnd.desc("his.changeTime");
sql.setCondition(cnd);
return listMap(sql);
}
}
@@ -1,112 +0,0 @@
package io.v.nutz.zhgh.mobile.member;
import cn.wizzer.framework.base.service.BaseService;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.base.dao.CndPlus;
import io.v.nutz.zhgh.member.constant.MemberApplyState;
import io.v.nutz.web.commons.utils.ShiroUtil;
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.lang.Lang;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
/**
* @author zhf
* @date 2021/9/26 9:24
* @description
*/
@IocBean
@At("/mobile/member/audit")
@Ok("json:full")
public class MemberAuditUnionController {
@At("")
@Ok("beetl:/mobile/member/audit_list.html")
public void indext() {
}
@Inject
private BaseService baseService;
@At
@ViReturn
public Object pageData(int pageNumber, int pageSize, boolean isAudit, Integer year) {
Sql sql = Sqls.create("""
SELECT
mar.*,
st.stateName,
st.stateColor,
u.unionname,
u.username,
u.loginname,
u.personType
FROM
`member_apply_record` mar
LEFT JOIN audit_state st ON st.stateId = mar.stateId
LEFT JOIN `user` u ON u.id = mar.userId
$condition
""");
CndPlus cnd = CndPlus.create();
cnd.and("mar.memberStates", "=", 1);
if (ShiroUtil.hasAnyRoles("sysadmin")) {
cnd.and("mar.stateId", "in", isAudit ? Lang.array(MemberApplyState.UNION_FAIL, MemberApplyState.SCHOOL_UNION_FAIL, MemberApplyState.NORMAL_MEMBER) : Lang.array(MemberApplyState.UNION, MemberApplyState.SCHOOL_UNION));
} else {
if (ShiroUtil.hasAnyRoles("A06,wyh02") && ShiroUtil.hasAnyRoles("H04")) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("mar.stateId", isAudit ? ">" : "=", MemberApplyState.SCHOOL_UNION);
seg.or(CndPlus.exps("mar.unionId", "=", Vi.getUnionId()).and("mar.stateId", isAudit ? ">" : "=", MemberApplyState.UNION));
cnd.and(seg);
} else if (ShiroUtil.hasAnyRoles("A06,wyh02")) {
cnd.and("mar.stateId", isAudit ? ">" : "=", MemberApplyState.SCHOOL_UNION);
} else if (ShiroUtil.hasAnyRoles("H04")) {
cnd.and("mar.unionId", "=", Vi.getUnionId());
cnd.and("mar.stateId", isAudit ? ">" : "=", MemberApplyState.UNION);
}
/*if (ShiroUtil.hasAnyRoles("A06,wyh02")) {
cnd.and("mar.stateId", isAudit ? ">" : "=", MemberApplyState.SCHOOL_UNION);
} else if (ShiroUtil.hasAnyRoles("H04")) {
cnd.and("mar.unionId", "=", Vi.getUnionId());
cnd.and("mar.stateId", isAudit ? ">" : "=", MemberApplyState.UNION);
}*/
}
/* if (!ShiroUtil.hasAnyRoles("sysadmin")) {
if (ShiroUtil.hasAnyRoles("A06,wyh02")) {
cnd.and("mar.stateId", isAudit ? ">" : "=", MemberApplyState.SCHOOL_UNION);
}
}*/
cnd.andEx("YEAR(mar.applyTime)", "=", year);
cnd.asc("mar.stateId");
cnd.desc("mar.applyTime");
sql.setCondition(cnd);
return baseService.listPageMap(pageNumber, pageSize, sql);
}
@At("/findOne")
@Ok("re")
public String findOne(Integer stateId) {
if (stateId == MemberApplyState.UNION && ShiroUtil.hasAnyRoles("H04,A06,sysadmin")) {
return "beetl:/mobile/member/union_Audit.html";
} else if (stateId == MemberApplyState.SCHOOL_UNION && ShiroUtil.hasAnyRoles("A06,sysadmin")) {
return "beetl:/mobile/member/school_Audit.html";
} /*else if (stateId == MemberApplyState.NORMAL_MEMBER || stateId == MemberApplyState.UNION_FAIL || stateId == MemberApplyState.SCHOOL_UNION_FAIL) {
return "beetl:/mobile/member/detail.html";
}*/
return "beetl:/mobile/member/detail.html";
}
}
@@ -1,31 +0,0 @@
package io.v.nutz.zhgh.mobile.member;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import java.util.List;
/**
* @ClassName MemberChangeAuditController
* @Description TODO
* @Author zhf
* @Date 2023/8/1 9:21
*/
@IocBean
@At("/mobile/member/change/audit")
@Ok("json:full")
public class MemberChangeAuditController {
@At("/union")
@Ok("beetl:/mobile/member/union_audit_change_list.html")
public void index() {
}
@At("/school")
@Ok("beetl:/mobile/member/school_audit_change_list.html")
public void index2() {
}
}
@@ -3,7 +3,7 @@ package io.v.nutz.zhgh.mobile.member;
import cn.hutool.core.util.StrUtil;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.service.BaseService;
import io.v.nutz.zhgh.member.service.MemberService;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.web.commons.utils.ShiroUtil;
@@ -27,7 +27,7 @@ import java.util.List;
public class MemberMobileController {
@Inject
private MemberService memberService;
private MemberCommonService memberService;
@Inject
private BaseService baseService;
@@ -8,7 +8,7 @@ import io.v.nutz.base.utils.MsgApi;
import io.v.nutz.base.utils.Roles;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.web.commons.base.Globals;
import io.v.nutz.zhgh.member.UserMode;
import io.v.nutz.zhgh.staffmanage.member.UserMode;
import io.v.nutz.zhgh.mobile.selfApplyUser.models.SelfApplyUser;
import io.v.nutz.zhgh.shopping.models.ShoppingType;
import io.v.nutz.sys.models.Sys_user;
@@ -3,24 +3,15 @@ package io.v.nutz.zhgh.mutualInsurance.zhejiang.controller;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import io.v.nutz.base.page.Pagination;
import io.v.nutz.base.result.Result;
import io.v.nutz.base.utils.PageUtil;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.base.utils.ViTool;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.member.MemberMode;
import io.v.nutz.zhgh.mutualInsurance.zhejiang.param.ZheJiangMutualInsuranceUserPageForm;
import io.v.nutz.zhgh.mutualInsurance.zhejiang.service.ZheJiangMutualInsuranceUserService;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shiro.authz.annotation.RequiresPermissions;
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.lang.util.NutMap;
@@ -6,7 +6,7 @@ import io.v.nutz.base.utils.PageUtil;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.sys.models.User;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.member.MemberMode;
import io.v.nutz.zhgh.staffmanage.member.MemberMode;
import io.v.nutz.zhgh.mutualInsurance.zhejiang.model.ZheJiangMutualInsuranceUserInfo;
import io.v.nutz.zhgh.mutualInsurance.zhejiang.param.ZheJiangMutualInsuranceUserPageForm;
import io.v.nutz.zhgh.mutualInsurance.zhejiang.service.ZheJiangMutualInsuranceUserService;
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.member;
package io.v.nutz.zhgh.staffmanage.member;
import lombok.Getter;
@@ -1,12 +1,10 @@
package io.v.nutz.zhgh.member;
package io.v.nutz.zhgh.staffmanage.member;
import io.v.nutz.base.utils.Roles;
import io.v.nutz.base.utils.ViResource;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.sys.models.Sys_user_role;
import io.v.nutz.sys.services.SysUserService;
import io.v.nutz.zhgh.member.constant.MemberOrigin;
import io.v.nutz.zhgh.member.constant.MemberStatus;
import org.apache.shiro.crypto.hash.Sha256Hash;
import org.apache.shiro.util.ByteSource;
import org.nutz.dao.Chain;
@@ -174,7 +172,7 @@ public interface UserMode {
static void addMemberRole(String userid) {
SysUserService sysUserService = ioc.getByType(SysUserService.class);
sysUserService.update(Chain.make("member", MemberMode.NORMAL.getCode()).add("memberJoinTime", new Date()).add("memberStatus", MemberStatus.NORMAL.getCode()), Cnd.where("id", "=", userid));
sysUserService.update(Chain.make("member", MemberMode.NORMAL.getCode()).add("memberJoinTime", new Date()), Cnd.where("id", "=", userid));
addRoleAndFlush(userid, Roles.MEMBER);
@@ -189,7 +187,7 @@ public interface UserMode {
static void addMemberRole(String[] userids) {
SysUserService sysUserService = ioc.getByType(SysUserService.class);
sysUserService.update(Chain.make("member", MemberMode.NORMAL.getCode()).add("memberJoinTime", new Date()).add("memberStatus", MemberStatus.NORMAL.getCode()).add("memberOrigin", MemberOrigin.BATCH.getCode()), Cnd.where("id", "in", userids));
sysUserService.update(Chain.make("member", MemberMode.NORMAL.getCode()).add("memberJoinTime", new Date()), Cnd.where("id", "in", userids));
addRoleAndFlush(userids, Roles.MEMBER);
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.member;
package io.v.nutz.zhgh.staffmanage.member;
import lombok.AllArgsConstructor;
import lombok.Getter;
@@ -0,0 +1,33 @@
package io.v.nutz.zhgh.staffmanage.member.constant;
import io.v.nutz.base.annontation.SelectEnum;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 会员变更来源
*
* @author: 1V
* @date: 2021/1/25
* @since 1.0
*/
@Getter
@SelectEnum
@AllArgsConstructor
public enum MemberChangeOrigin {
PERSONAL("个人申请变更"),
BRANCH_UNION("分工会变更"),
BRANCH_UNION_VERIFICATION("分工会名单事项核对"),
UNION_GROUP("工会小组变更"),
SCHOOL_UNION("校工会变更"),
SCHOOL_UNION_VERIFICATION("校工会名单事项核对"),
SYSTEM("系统数据更新"),
HAND_MOVEMENT("手动数据更新"),
OTHER("其他方式变更");
/**
* 避免和枚举类的name冲突
*/
public final String changeOriginName;
}
@@ -0,0 +1,36 @@
package io.v.nutz.zhgh.staffmanage.member.constant;
import io.v.nutz.base.annontation.SelectEnum;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @version 1.0
* @Author zzr
* @nameMemberChangeType
* @Date 2025/1/20 18:57
* @注释
*/
@Getter
@SelectEnum
@AllArgsConstructor
public enum MemberChangeType {
//变更类型
NEW("NEW","新入职"),
RESTORE("RESTORE","入会"),
WITHDRAWAL("WITHDRAWAL","退会"),
WORK("WORK","在职"),
LEAVE_SCHOOL("LEAVE_SCHOOL","离校"),
RETIRE("RETIRE","退休"),
RESIGN("RESIGN","辞职"),
OUT("OUT","调出"),
LEAVE_OFFICE("LEAVE_OFFICE","离职"),
OTHER("OTHER","其他"),
UNIT_CHANGE("UNIT_CHANGE","单位异动"),
UNION_CHANGE("UNION_CHANGE","工会关系异动"),
BASIC_CHANGE("BASIC_CHANGE","基本信息异动");
private final String type;
private final String changeTypeName;
}
@@ -1,14 +1,14 @@
package io.v.nutz.zhgh.member.controller;
package io.v.nutz.zhgh.staffmanage.member.controller;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.sys.models.Sys_menu;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.member.constant.MemberApplyState;
import io.v.nutz.zhgh.member.constant.MemberChangeApplyState;
import io.v.nutz.zhgh.member.constant.MemberChangeRecordMode;
import io.v.nutz.zhgh.member.service.MemberService;
//import io.v.nutz.zhgh.member.constant.MemberApplyState;
//import io.v.nutz.zhgh.member.constant.MemberChangeApplyState;
//import io.v.nutz.zhgh.member.constant.MemberChangeRecordMode;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService;
import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
@@ -38,7 +38,7 @@ import java.util.stream.Collectors;
@RequiresAuthentication
public class MemberAgendaController {
@Inject
private MemberService memberService;
private MemberCommonService memberService;
@Inject
private Vi vi;
@@ -66,17 +66,17 @@ public class MemberAgendaController {
""");
int marUnionNum = 0;
Cnd marUnionCnd = Cnd.where("mar.stateId", "=", MemberApplyState.UNION);
// Cnd marUnionCnd = Cnd.where("mar.stateId", "=", MemberApplyState.UNION);
if (!anyRoles) {
marUnionCnd.and("u.unionid", "=", Vi.getUnionId());
// marUnionCnd.and("u.unionid", "=", Vi.getUnionId());
}
marSql.setCondition(marUnionCnd);
// marSql.setCondition(marUnionCnd);
marUnionNum = memberService.count(marSql);
list.add(new NutMap().addv("title", title).addv("iconClass", vi.getIconByPath("/platform/member/apply/audit/union")).addv("label", "待院级工会入会审核").addv("number", marUnionNum).addv("url", "/platform/member/apply/audit/union"));
int marSchoolNum = 0;
Cnd marSchoolCnd = Cnd.where("mar.stateId", "=", MemberApplyState.SCHOOL_UNION);
marSql.setCondition(marSchoolCnd);
// Cnd marSchoolCnd = Cnd.where("mar.stateId", "=", MemberApplyState.SCHOOL_UNION);
// marSql.setCondition(marSchoolCnd);
marSchoolNum = memberService.count(marSql);
list.add(new NutMap().addv("title", title).addv("iconClass", vi.getIconByPath("/platform/member/apply/audit/school")).addv("label", "待校工会入会审核").addv("number", marSchoolNum).addv("url", "/platform/member/apply/audit/school"));
@@ -92,19 +92,19 @@ public class MemberAgendaController {
""");
int mcrUnionNum = 0;
Cnd mcrUnionCnd = Cnd.where("mcr.stateId", "=", MemberChangeApplyState.UNION).and("recordMode", "=", MemberChangeRecordMode.MEMBER.getCode());
if (!anyRoles) {
mcrUnionCnd.and("u.unionid", "=", Vi.getUnionId());
}
mcrSql.setCondition(mcrUnionCnd);
mcrUnionNum = memberService.count(mcrSql);
list.add(new NutMap().addv("title", title).addv("iconClass", vi.getIconByPath("/platform/member/apply/audit/union")).addv("label", "待院级工会变更审核").addv("number", mcrUnionNum).addv("url", "/platform/member/change/audit/union"));
int mcrSchoolNum = 0;
Cnd mcrSchoolCnd = Cnd.where("mcr.stateId", "=", MemberChangeApplyState.SCHOOL_UNION).and("recordMode", "=", MemberChangeRecordMode.MEMBER.getCode());
mcrSql.setCondition(mcrSchoolCnd);
mcrSchoolNum = memberService.count(mcrSql);
list.add(new NutMap().addv("title", title).addv("iconClass", vi.getIconByPath("/platform/member/apply/audit/school")).addv("label", "待校工会变更审核").addv("number", mcrSchoolNum).addv("url", "/platform/member/change/audit/school"));
// Cnd mcrUnionCnd = Cnd.where("mcr.stateId", "=", MemberChangeApplyState.UNION).and("recordMode", "=", MemberChangeRecordMode.MEMBER.getCode());
// if (!anyRoles) {
// mcrUnionCnd.and("u.unionid", "=", Vi.getUnionId());
// }
// mcrSql.setCondition(mcrUnionCnd);
// mcrUnionNum = memberService.count(mcrSql);
// list.add(new NutMap().addv("title", title).addv("iconClass", vi.getIconByPath("/platform/member/apply/audit/union")).addv("label", "待院级工会变更审核").addv("number", mcrUnionNum).addv("url", "/platform/member/change/audit/union"));
//
// int mcrSchoolNum = 0;
// Cnd mcrSchoolCnd = Cnd.where("mcr.stateId", "=", MemberChangeApplyState.SCHOOL_UNION).and("recordMode", "=", MemberChangeRecordMode.MEMBER.getCode());
// mcrSql.setCondition(mcrSchoolCnd);
// mcrSchoolNum = memberService.count(mcrSql);
// list.add(new NutMap().addv("title", title).addv("iconClass", vi.getIconByPath("/platform/member/apply/audit/school")).addv("label", "待校工会变更审核").addv("number", mcrSchoolNum).addv("url", "/platform/member/change/audit/school"));
Sys_user user = (Sys_user) ShiroUtil.getPrincipal();
@@ -1,18 +1,20 @@
package io.v.nutz.zhgh.member.controller;
package io.v.nutz.zhgh.staffmanage.member.controller;
import cn.hutool.core.util.StrUtil;
import cn.wizzer.framework.base.Result;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.service.ViService;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.sys.models.Sys_unit;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.sys.models.User;
import io.v.nutz.sys.services.SysUserService;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.data.model.UserHistory;
import io.v.nutz.zhgh.member.UserMode;
import io.v.nutz.zhgh.member.model.MemberApplyRecord;
import io.v.nutz.zhgh.member.model.MemberChangeRecord;
import io.v.nutz.zhgh.member.service.MemberService;
import io.v.nutz.zhgh.staffmanage.member.UserMode;
import io.v.nutz.zhgh.staffmanage.member.model.MemberApplyRecord;
import io.v.nutz.zhgh.staffmanage.member.model.MemberChangeRecord;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService;
import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
@@ -40,7 +42,7 @@ import java.util.stream.Collectors;
public class MemberCommonController {
@Inject
private MemberService memberService;
private MemberCommonService memberService;
@Inject
private SysUserService sysUserService;
@@ -57,6 +59,31 @@ public class MemberCommonController {
@Inject("MemberChangeRecord")
private ViService<MemberChangeRecord> changeRecordViService;
@At
@RequiresAuthentication
public Object fetchMemberUserById(String userId){
if (StrUtil.isBlank(userId)) {
return Result.error("未获取到参数,无法查询");
}
// 根据权限判断是否可以查询用户信息
User user = dao.fetch(User.class, Cnd.where("id", "=", userId));
if (!ShiroUtil.hasAnyRoles("sysadmin, SchoolUnionAdmin, SchoolUnionMemberAdmin")) {
if (ShiroUtil.hasAnyRoles("H04, branchUnionMemberAdmin")) {
if (!Vi.getUnionId().equals(user.getUnionid())) {
return Result.error("您没有权限!");
}
} else {
if (user.getId().equals(ShiroUtil.getUserId())){
return Result.error("您没有权限!");
}
}
}
return Result.success().addData(user);
}
/**
* 用户信息
*
@@ -206,59 +233,59 @@ public class MemberCommonController {
NutMap sysUserMap = (NutMap) Daos.query(dao, Sqls.create("select * from sys_user where loginname=@loginname").setParam("loginname", userHistory.getLoginname()).toString(), Sqls.callback.map());
NutMap userHisMap = Lang.obj2nutmap(userHistory);
if (StrUtil.isNotBlank(userHistory.getMemberChangeRecordId())) {
if (StrUtil.isNotBlank(userHistory.getRecordId())) {
//从变更来的 特殊 需要审核
MemberChangeRecord changeRecord = dao.fetch(MemberChangeRecord.class, userHistory.getMemberChangeRecordId());
String originUnitId = StrUtil.blankToDefault(changeRecord.getOriginUnitId(), "");
String currentUnitId = StrUtil.blankToDefault(changeRecord.getCurrentUnitId(), "");
if (!originUnitId.equals(currentUnitId) && StrUtil.isNotBlank(currentUnitId)) {
compareData.add(NutMap.NEW()
.addv("columnName", "单位")
.addv("newValue", unitMap.get(currentUnitId))
.addv("oldValue", unitMap.get(originUnitId))
);
}
String userState = StrUtil.blankToDefault(changeRecord.getChangeUserState(), "");
if (StrUtil.isNotBlank(userState) && !userState.equals(sysUserMap.getString("userState", ""))) {
compareData.add(NutMap.NEW()
.addv("columnName", "在职状态")
.addv("newValue", userState)
.addv("oldValue", sysUserMap.getString("userState"))
);
}
String personType = StrUtil.blankToDefault(changeRecord.getChangePersonType(), "");
if (StrUtil.isNotBlank(personType) && !personType.equals(sysUserMap.getString("personType", ""))) {
compareData.add(NutMap.NEW()
.addv("columnName", "人员类型")
.addv("newValue", personType)
.addv("oldValue", sysUserMap.getString("personType"))
);
}
//在职,退休,离职可能会发生会员和福利会员的变化
if(changeRecord.getUpdateMember()!=null && changeRecord.getUpdateMember()){
//说明要改变会员状态
compareData.add(NutMap.NEW()
.addv("columnName", "会员资格")
.addv("newValue", "")
.addv("oldValue", "")
);
}
if(changeRecord.getUpdateWelfareMember()!=null && changeRecord.getUpdateWelfareMember()){
//说明要改变福利会员状态
compareData.add(NutMap.NEW()
.addv("columnName", "福利会员资格")
.addv("newValue", "")
.addv("oldValue", "")
);
}
// MemberChangeRecord changeRecord = dao.fetch(MemberChangeRecord.class, userHistory.getRecordId());
// String originUnitId = StrUtil.blankToDefault(changeRecord.getOriginUnitId(), "");
// String currentUnitId = StrUtil.blankToDefault(changeRecord.getCurrentUnitId(), "");
//
// if (!originUnitId.equals(currentUnitId) && StrUtil.isNotBlank(currentUnitId)) {
// compareData.add(NutMap.NEW()
// .addv("columnName", "单位")
// .addv("newValue", unitMap.get(currentUnitId))
// .addv("oldValue", unitMap.get(originUnitId))
// );
// }
//
// String userState = StrUtil.blankToDefault(changeRecord.getChangeUserState(), "");
// if (StrUtil.isNotBlank(userState) && !userState.equals(sysUserMap.getString("userState", ""))) {
// compareData.add(NutMap.NEW()
// .addv("columnName", "在职状态")
// .addv("newValue", userState)
// .addv("oldValue", sysUserMap.getString("userState"))
// );
// }
//
// String personType = StrUtil.blankToDefault(changeRecord.getChangePersonType(), "");
// if (StrUtil.isNotBlank(personType) && !personType.equals(sysUserMap.getString("personType", ""))) {
// compareData.add(NutMap.NEW()
// .addv("columnName", "人员类型")
// .addv("newValue", personType)
// .addv("oldValue", sysUserMap.getString("personType"))
// );
// }
//
// //在职,退休,离职可能会发生会员和福利会员的变化
// if(changeRecord.getUpdateMember()!=null && changeRecord.getUpdateMember()){
// //说明要改变会员状态
// compareData.add(NutMap.NEW()
// .addv("columnName", "会员资格")
// .addv("newValue", "")
// .addv("oldValue", "")
// );
// }
//
// if(changeRecord.getUpdateWelfareMember()!=null && changeRecord.getUpdateWelfareMember()){
// //说明要改变福利会员状态
// compareData.add(NutMap.NEW()
// .addv("columnName", "福利会员资格")
// .addv("newValue", "")
// .addv("oldValue", "")
// );
// }
//需要包含分工会校工会审核信息
String memberChangeRecordId = userHistory.getMemberChangeRecordId();
String memberChangeRecordId = userHistory.getRecordId();
MemberChangeRecord memberChangeRecord = dao.fetch(MemberChangeRecord.class, memberChangeRecordId);
dao.fetchLinks(memberChangeRecord,"auditState|unionAudit|schoolAudit");
@@ -1,12 +1,12 @@
package io.v.nutz.zhgh.member.controller;
package io.v.nutz.zhgh.staffmanage.member.controller;
import cn.hutool.core.date.DateUtil;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.service.BaseService;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.member.constant.MemberChangeRecordMode;
import io.v.nutz.zhgh.member.model.MemberCheckSelfTask;
import io.v.nutz.zhgh.member.model.MemberCheckTask;
//import io.v.nutz.zhgh.member.constant.MemberChangeRecordMode;
import io.v.nutz.zhgh.staffmanage.member.model.MemberCheckSelfTask;
import io.v.nutz.zhgh.staffmanage.member.model.MemberCheckTask;
import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.nutz.dao.Cnd;
import org.nutz.ioc.loader.annotation.Inject;
@@ -41,8 +41,8 @@ public class MemberSelfAgentController {
List<MemberCheckTask> checkTasks = baseService.dao().query(MemberCheckTask.class, Cnd.where("startTime", "<", DateUtil.date())
.and("endTime", ">", DateUtil.date())
.and("createTaskMode", "=", 2)
.and("year", "=", DateUtil.thisYear())
.and("taskMode", "=", MemberChangeRecordMode.MEMBER.getCode()));
.and("year", "=", DateUtil.thisYear()));
// .and("taskMode", "=", MemberChangeRecordMode.MEMBER.getCode()));
final String title = "【会员系统】";
List<NutMap> list = new ArrayList<>();
@@ -0,0 +1,166 @@
package io.v.nutz.zhgh.staffmanage.member.controller.apply;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.wizzer.framework.base.Result;
import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.model.Audit;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.sys.models.Sys_union;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.sys.models.User;
import io.v.nutz.sys.services.SysLocalProcessService;
import io.v.nutz.web.commons.slog.annotation.SLog;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.staffmanage.member.handle.MemberApplyToDoHandler;
import io.v.nutz.zhgh.staffmanage.member.model.MemberApplyRecord;
import io.v.nutz.zhgh.staffmanage.member.param.pageForm.MemberApplyPageForm;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService;
import io.v.nutz.zhgh.staffmanage.specialstaff.model.SpecialStaff;
import org.apache.shiro.authz.annotation.RequiresPermissions;
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.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
/**
* @version 1.0
* @Author zzr
* @nameMemberApplyBranchUnionAuditController
* @Date 2025/2/12 8:38
* @注释
*/
@IocBean
@Ok("json:full")
@At("/platform/member/apply/branchUnion/audit")
public class MemberApplyBranchUnionAuditController {
@Inject
private Dao dao;
@Inject
private MemberCommonService memberCommonService;
@Inject
private SysLocalProcessService localProcessService;
@At("/")
@Ok("beetl:/platform/member/apply/branchUnionAudit/index.html")
@RequiresPermissions("member.apply.branchUnion.audit")
public void index() {}
@At
@RequiresPermissions("member.apply.branchUnion.audit")
public Object pageData(MemberApplyPageForm pageForm){
Sql sql = Sqls.create("""
SELECT
record.*,
state.stateName,
su.unionname AS allocationUnionName
FROM
member_apply_record record
LEFT JOIN audit_state state ON state.stateId = record.applyStateId
LEFT JOIN sys_union su ON su.id = record.allocationUnionId
$condition
""");
Cnd cnd = Cnd.NEW();
pageForm.buildSearch(cnd, "record.");
if (!ShiroUtil.hasAnyRoles("sysadmin, A06, SchoolUnionMemberAdmin")) {
cnd.and("record.allocationUnionId", "=", Vi.getUnionId());
}
if (pageForm.getAudit()) {
cnd.and("record.applyStateId", ">", 50);
} else {
cnd.and("record.applyStateId", "=", 50);
}
cnd.desc("record.applyDateTime");
sql.setCondition(cnd);
Pagination pagination = memberCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success().addData(pagination);
}
@At
@ViReturn
@Aop(TransAop.READ_COMMITTED)
@RequiresPermissions("member.apply.branchUnion.audit")
@SLog(type = "memberApply", tag = "会员入会申请", msg = "分工会审核")
public Object approval(@Param("audit") Audit audit, String id){
audit.setAuditor(ShiroUtil.getUserId());
audit.setLoginname(ShiroUtil.getPlatformLoginname());
audit.setUsername(ShiroUtil.getPlatformUsername());
audit.setAuditTime(DateUtil.date());
audit = dao.insert(audit);
MemberApplyRecord record = dao.fetch(MemberApplyRecord.class, id);
if (audit.getAuditType() == 2) {
// 退回修改
record.setApplyStateId(60);
} else if (audit.getAuditType() == 1) {
// 通过
record.setApplyStateId(80);
} else {
// 拒绝
record.setApplyStateId(70);
}
record.setBranchUnionAuditId(audit.getId());
dao.updateIgnoreNull(record);
if (audit.getAuditType() == 2) {
MemberApplyToDoHandler.CREATE_APPLY_RE_MODIFY_TASK.exec(record, null);
} else if (audit.getAuditType() == 1) {
MemberApplyToDoHandler.COMPLETE_PROCESS.exec(record, null);
// 判断是否改变了工会关系
User user = dao.fetch(User.class, Cnd.where("id", "=", record.getUserId()));
if (!ObjectUtil.equals(user.getUnionid(), record.getAllocationUnionId())) {
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.getUnionname());
staff.setIsManyUnit(false);
staff.setSpecialStaffType("HMC_RELATION");
dao.insert(staff);
}
Sys_user sysUser = new Sys_user();
BeanUtil.copyProperties(record, sysUser);
sysUser.setId(user.getId());
dao.updateIgnoreNull(sysUser);
} else {
MemberApplyToDoHandler.REFUSE_UNION_TASK.exec(record, NutMap.NEW().addv("nodeName", "分工会审核拒绝"));
}
MemberApplyToDoHandler.COMPLETE_UNION_TASK.exec(record, NutMap.NEW().addv("nodeName", "分工会审核完成"));
return null;
}
@At
@ViReturn
@Aop(TransAop.READ_COMMITTED)
@RequiresPermissions("member.apply.branchUnion.audit")
@SLog(type = "memberApply", tag = "会员入会申请", msg = "分工会撤回")
public Object doRevoke(String id){
MemberApplyRecord record = dao.fetch(MemberApplyRecord.class, id);
dao.update(MemberApplyRecord.class, Chain.make("applyStateId", 20)
.add("branchUnionAuditId", null), Cnd.where("id", "=", id));
dao.clear(Audit.class, Cnd.where("id", "=", record.getBranchUnionAuditId()));
// 待办撤回
localProcessService.revokeTask("MEMBER_APPLY@" + id, "分工会审核");
return null;
}
}
@@ -0,0 +1,121 @@
package io.v.nutz.zhgh.staffmanage.member.controller.apply;
import cn.wizzer.framework.base.Result;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.utils.MsgApi;
import io.v.nutz.sys.models.User;
import io.v.nutz.web.commons.slog.annotation.SLog;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.staffmanage.member.constant.MemberChangeOrigin;
import io.v.nutz.zhgh.staffmanage.member.constant.MemberChangeType;
import io.v.nutz.zhgh.staffmanage.member.handle.MemberApplyToDoHandler;
import io.v.nutz.zhgh.staffmanage.member.model.MemberApplyRecord;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import java.util.List;
import java.util.stream.Collectors;
/**
* @version 1.0
* @Author zzr
* @nameMemberApplyController
* @Date 2025/1/20 19:01
* @注释 会员申请
*/
@IocBean
@Ok("json:full")
@At("/platform/member/apply/submit")
public class MemberApplyController {
@Inject
private Dao dao;
@Inject
private MsgApi msgApi;
@Inject
private MemberCommonService commonService;
@At("/")
@Ok("beetl:/platform/member/apply/submit/index.html")
@RequiresPermissions("member.apply.submit")
public void index() {
}
@At("/h5")
@Ok("beetl:/platform/member/apply/submit/index.html")
@RequiresPermissions("member.apply.submit")
public void h5() {
}
@At
@ViReturn
@RequiresPermissions("member.apply.submit")
public Object findOne(String id, Boolean isEdit){
if (isEdit) {
return dao.fetch(MemberApplyRecord.class, id);
}
return dao.fetch(User.class, Cnd.where("id", "=", id));
}
@At
@RequiresPermissions("member.apply.submit")
public Object findApplyById(String id){
return Result.success().addData(dao.fetch(MemberApplyRecord.class, id));
}
@At
@ViReturn
@RequiresPermissions("member.apply.submit")
@SLog(tag = "会员入会申请", msg = "保存申请")
public Object doSave(MemberApplyRecord record){
record.setMember(true);
record.setUserId(ShiroUtil.getUserId());
// 变更来源 个人
record.setChangeOrigin(MemberChangeOrigin.PERSONAL.name());
// 变更类型 入会
record.setChangeType(MemberChangeType.RESTORE.name());
record.setChangeTypes(List.of(MemberChangeType.RESTORE.name()));
// 待提交
record.setApplyStateId(10);
dao.insertOrUpdate(record);
return null;
}
@At
@ViReturn
@Aop(TransAop.READ_COMMITTED)
@RequiresPermissions("member.apply.submit")
@SLog(tag = "会员入会申请", msg = "提交申请")
public Object doSubmit(MemberApplyRecord record){
record.setMember(true);
record.setUserId(ShiroUtil.getUserId());
record.setChangeOrigin(MemberChangeOrigin.PERSONAL.name());
record.setChangeType(MemberChangeType.RESTORE.name());
record.setChangeTypes(List.of(MemberChangeType.RESTORE.name()));
// 待校工会审核
record.setApplyStateId(20);
dao.insertOrUpdate(record);
// 审核流程开始
MemberApplyToDoHandler.START_PROCESS.exec(record, null);
MemberApplyToDoHandler.CREATE_SCHOOL_TASK.exec(record, null);
List<String> schoolLoginNameList = commonService.getSchoolOrBranchUnionMemberAdminLoginNames("school", null);
String schoolLoginNameListStr = schoolLoginNameList.stream().distinct().collect(Collectors.joining(","));
String content = "%s老师正申请加入工会,请您点击此条消息或前往智慧工会进行审核";
msgApi.sendMsg(List.of("DingTalk"), schoolLoginNameListStr, 2, "协会入会邀请", content, "", "");
return null;
}
}
@@ -0,0 +1,143 @@
package io.v.nutz.zhgh.staffmanage.member.controller.apply;
import cn.hutool.core.util.StrUtil;
import cn.wizzer.framework.base.Result;
import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.model.Audit;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.sys.services.SysLocalProcessService;
import io.v.nutz.web.commons.slog.annotation.SLog;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.staffmanage.member.model.MemberApplyRecord;
import io.v.nutz.zhgh.staffmanage.member.param.pageForm.MemberApplyPageForm;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService;
import io.v.nutz.zhgh.zgfw.model.difficult.Zgfw_knbf;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresPermissions;
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.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
/**
* @version 1.0
* @Author zzr
* @nameMemberApplyMineController
* @Date 2025/2/12 8:39
* @注释 会员入会 我的申请
*/
@IocBean
@Ok("json:full")
@At("/platform/member/apply/mine")
public class MemberApplyMineController {
@Inject
private Dao dao;
@Inject
private MemberCommonService memberCommonService;
@Inject
private SysLocalProcessService sysLocalProcessService;
@At("/")
@Ok("beetl:/platform/member/apply/mine/index.html")
@RequiresPermissions("member.apply.mine")
public void index() {
}
@At
@RequiresPermissions("member.apply.mine")
public Object pageData(MemberApplyPageForm pageForm){
Sql sql = Sqls.create("""
SELECT
record.*,
state.stateName
FROM
member_apply_record record
LEFT JOIN audit_state state ON state.stateId = record.applyStateId
$condition
""");
Cnd cnd = Cnd.NEW();
pageForm.buildSearch(cnd, "record.");
if (!ShiroUtil.hasAnyRoles("sysadmin,SchoolUnionAdmin,SchoolUnionMemberAdmin")) {
if (ShiroUtil.hasAnyRoles("H04,branchUnionMemberAdmin")) {
cnd.and("record.unionId", "=", Vi.getUnionId());
} else {
cnd.and("record.userId", "=", ShiroUtil.getUserId());
}
}
cnd.desc("record.applyDateTime");
sql.setCondition(cnd);
Pagination pagination = memberCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success().addData(pagination);
}
@At
@ViReturn
@Aop(TransAop.READ_COMMITTED)
@RequiresPermissions("member.apply.mine")
@SLog(tag = "会员入会申请", msg = "撤回申请")
public Object doRevoke(String id){
dao.update(MemberApplyRecord.class, Chain.make("applyStateId", 10), Cnd.where("id", "=", id));
sysLocalProcessService.revokeTask("MEMBER_APPLY@" + id,"待提交申请");
return null;
}
@At
@ViReturn
@Aop(TransAop.READ_COMMITTED)
@RequiresPermissions("member.apply.mine")
@SLog(tag = "会员入会申请", msg = "删除申请")
public Object doDelete(String id){
dao.clear(MemberApplyRecord.class, Cnd.where("id", "=", id));
sysLocalProcessService.deleteProcessInstance("MEMBER_APPLY@" + id);
return null;
}
@At
@ViReturn
@RequiresPermissions(value = {"member.apply.mine", "member.apply.branchUnion.audit", "member.apply.schoolUnion.audit"}, logical = Logical.OR)
public Object findMemberApplyRecord(String id){
Sql sql = Sqls.create("""
SELECT
record.*,
u.unionname AS userUnionName,
u.unitname AS userUnitName,
state.stateName,
su.unionname AS allocationUnionName
FROM
member_apply_record record
LEFT JOIN audit_state state ON state.stateId = record.applyStateId
LEFT JOIN `user` u ON u.id = record.userId
LEFT JOIN sys_union su ON su.id = record.allocationUnionId
WHERE
record.id = @id
""").setParam("id", id);
sql.setCallback(Sqls.callback.map());
dao.execute(sql);
NutMap nutMap = (NutMap) sql.getResult();
if (StrUtil.isNotBlank(nutMap.getString("schoolUnionAuditId"))) {
Audit audit = dao.fetch(Audit.class, Cnd.where("id", "=", nutMap.getString("schoolUnionAuditId")));
nutMap.addv("schoolAudit", audit);
}
if (StrUtil.isNotBlank(nutMap.getString("branchUnionAuditId"))) {
Audit audit = dao.fetch(Audit.class, Cnd.where("id", "=", nutMap.getString("branchUnionAuditId")));
nutMap.addv("branchAudit", audit);
}
return nutMap;
}
}
@@ -0,0 +1,161 @@
package io.v.nutz.zhgh.staffmanage.member.controller.apply;
import cn.hutool.core.date.DateUtil;
import cn.wizzer.framework.base.Result;
import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.model.Audit;
import io.v.nutz.sys.services.SysLocalProcessService;
import io.v.nutz.web.commons.slog.annotation.SLog;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.staffmanage.member.handle.MemberApplyToDoHandler;
import io.v.nutz.zhgh.staffmanage.member.model.MemberApplyRecord;
import io.v.nutz.zhgh.staffmanage.member.param.pageForm.MemberApplyPageForm;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
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.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberApplySchoolUnionAuditController
* @Date 2025/2/12 8:38
* @注释 会员入会申请,校工会审核
*/
@IocBean
@Ok("json:full")
@At("/platform/member/apply/schoolUnion/audit")
public class MemberApplySchoolUnionAuditController {
@Inject
private Dao dao;
@Inject
private MemberCommonService memberCommonService;
@Inject
private SysLocalProcessService localProcessService;
@At("/")
@Ok("beetl:/platform/member/apply/schoolUnionAudit/index.html")
@RequiresPermissions("member.apply.schoolUnion.audit")
public void index() {}
@At
@RequiresPermissions("member.apply.schoolUnion.audit")
public Object pageData(MemberApplyPageForm pageForm){
Sql sql = Sqls.create("""
SELECT
record.*,
state.stateName,
su.unionname AS allocationUnionName
FROM
member_apply_record record
LEFT JOIN audit_state state ON state.stateId = record.applyStateId
LEFT JOIN sys_union su ON su.id = record.allocationUnionId
$condition
""");
Cnd cnd = Cnd.NEW();
pageForm.buildSearch(cnd, "record.");
if (pageForm.getAudit()) {
cnd.and("record.applyStateId", ">", 20);
} else {
cnd.and("record.applyStateId", "=", 20);
}
cnd.desc("record.applyDateTime");
sql.setCondition(cnd);
Pagination pagination = memberCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success().addData(pagination);
}
@At
@ViReturn
@Aop(TransAop.READ_COMMITTED)
@RequiresPermissions("member.apply.schoolUnion.audit")
@SLog(type = "memberApply", tag = "会员入会申请", msg = "校工会审核")
public Object approval(@Param("audit") Audit audit, String id, String unionId){
audit.setAuditor(ShiroUtil.getUserId());
audit.setLoginname(ShiroUtil.getPlatformLoginname());
audit.setUsername(ShiroUtil.getPlatformUsername());
audit.setAuditTime(DateUtil.date());
audit = dao.insert(audit);
MemberApplyRecord record = dao.fetch(MemberApplyRecord.class, id);
if (audit.getAuditType() == 2) {
// 退回修改
record.setApplyStateId(30);
} else if (audit.getAuditType() == 1) {
// 通过
record.setApplyStateId(50);
} else {
// 拒绝
record.setApplyStateId(40);
}
record.setAllocationUnionId(unionId);
record.setSchoolUnionAuditId(audit.getId());
dao.updateIgnoreNull(record);
if (audit.getAuditType() == 2) {
MemberApplyToDoHandler.CREATE_APPLY_RE_MODIFY_TASK.exec(record, null);
String content = "%s老师您好,您的入会申请被校工会退回,您可根据退回原因修改后再次提交,如有疑问请及时联系校工会".formatted(record.getUsername());
} else if (audit.getAuditType() == 1) {
Sql sql = Sqls.create("""
SELECT
u.loginname,
u.username
FROM
`sys_user_role` userRole
LEFT JOIN sys_role role ON role.id = userRole.roleId
LEFT JOIN `user` u ON u.id = userRole.userId
WHERE
role.`code` = 'BranchUnionMemberAdmin' and u.unionid = @unionId
group by u.loginname
""").setParam("unionId", unionId);
List<NutMap> list = memberCommonService.listMap(sql);
List<String> unionLeaderLoginNames = list.stream().map(v -> v.getString("loginname")).toList();
MemberApplyToDoHandler.CREATE_UNION_TASK.exec(record, NutMap.NEW().addv("unionLeaderLoginNames", unionLeaderLoginNames));
for (NutMap map : list) {
String content = "%s老师您好,%s老师的入会申请校工会已通过,现将工会关系划入本工会,请您点击此消息或前往智慧工会进行接收"
.formatted(map.getString("username"), record.getUsername());
}
} else {
MemberApplyToDoHandler.REFUSE_UNION_TASK.exec(record, NutMap.NEW().addv("nodeName", "校工会审核拒绝"));
String content = "%s老师您好,您的入会申请被校工会拒绝,如有疑问请及时联系校工会".formatted(record.getUsername());
}
MemberApplyToDoHandler.COMPLETE_SCHOOL_TASK.exec(record, NutMap.NEW().addv("nodeName", "校工会审核完成"));
return null;
}
@At
@ViReturn
@Aop(TransAop.READ_COMMITTED)
@RequiresPermissions("member.apply.schoolUnion.audit")
@SLog(type = "memberApply", tag = "会员入会申请", msg = "校工会撤回")
public Object doRevoke(String id){
MemberApplyRecord record = dao.fetch(MemberApplyRecord.class, id);
dao.update(MemberApplyRecord.class, Chain.make("applyStateId", 20)
.add("schoolUnionAuditId", null), Cnd.where("id", "=", id));
dao.clear(Audit.class, Cnd.where("id", "=", record.getSchoolUnionAuditId()));
// 待办撤回
localProcessService.revokeTask("MEMBER_APPLY@" + id, "校工会审核");
return null;
}
}
@@ -0,0 +1,150 @@
package io.v.nutz.zhgh.staffmanage.member.controller.change;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.wizzer.framework.base.Result;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.utils.Roles;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.sys.models.Sys_union;
import io.v.nutz.sys.models.Sys_unit;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.sys.models.User;
import io.v.nutz.web.commons.slog.annotation.SLog;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.staffmanage.member.constant.MemberChangeOrigin;
import io.v.nutz.zhgh.staffmanage.member.constant.MemberChangeType;
import io.v.nutz.zhgh.staffmanage.member.handle.MemberChangeToDoHandler;
import io.v.nutz.zhgh.staffmanage.member.model.MemberChangeRecord;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresPermissions;
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.Strings;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@IocBean
@Slf4j
@Ok("json:full")
@At("/platform/member/change/apply")
public class MemberChangeApplyController {
@Inject
private Dao dao;
@At("")
@Ok("beetl:/platform/member/change/submit/index.html")
@RequiresPermissions("member.change.apply")
public void index() {
}
@Inject
private MemberCommonService memberService;
@At
@ViReturn
@RequiresPermissions("member.change.apply")
public Object findChangeById(String id){
return dao.fetch(MemberChangeRecord.class, id);
}
@At
@RequiresPermissions("member.change.apply")
@SLog(tag = "会员变更申请", msg = "保存我的申请")
public Object doSave(MemberChangeRecord record){
// 检验是否有变更
if (Lang.isEmpty(record)) {
return Result.error("未获取到异动数据");
}
List<NutMap> changeInfos = memberService.getChangeInfos(record);
if (Lang.isEmpty(changeInfos)) {
return Result.error("未校验到变更数据,请确认数据是否存在变更");
}
try {
User user = dao.fetch(User.class, Cnd.where("id", "=", record.getUserId()));
// 比较有哪些变更类型
List<String> changeTypes = memberService.compareChangeType(record, user);
record.setChangeTypes(changeTypes);
record.setUserId(ShiroUtil.getUserId());
// 变更来源 个人
record.setChangeOrigin(MemberChangeOrigin.PERSONAL.name());
// 待提交
record.setApplyStateId(10010);
dao.insertOrUpdate(record);
return Result.success();
} catch (Exception e) {
return Result.error("保存失败");
}
}
@At
@RequiresPermissions("member.change.apply")
@SLog(tag = "会员变更申请", msg = "提交我的申请")
public Object doSubmit(MemberChangeRecord record){
// 检验是否有变更
if (Lang.isEmpty(record)) {
return Result.error("未获取到异动数据");
}
List<NutMap> changeInfos = memberService.getChangeInfos(record);
if (Lang.isEmpty(changeInfos)) {
return Result.error("未校验到变更数据,请确认数据是否存在变更");
}
try {
User user = dao.fetch(User.class, Cnd.where("id", "=", record.getUserId()));
// 比较有哪些变更类型
List<String> changeTypes = memberService.compareChangeType(record, user);
record.setChangeTypes(changeTypes);
record.setUserId(ShiroUtil.getUserId());
// 变更来源 个人
record.setChangeOrigin(MemberChangeOrigin.PERSONAL.name());
// 待分工会审核
record.setApplyStateId(10020);
dao.insertOrUpdate(record);
MemberChangeToDoHandler.START_PROCESS.exec(record, null);
MemberChangeToDoHandler.CREATE_UNION_TASK.exec(record, null);
return Result.success();
} catch (Exception e) {
log.error("提交失败", e);
return Result.error("提交失败");
}
}
@At
@ViReturn
@RequiresPermissions(value = {"member.change.branchUnion.audit","member.change.schoolUnion.audit"}, logical = Logical.OR)
public Object getUserByIdForMemberChange(String userId){
User user = dao.fetch(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 nutMap;
}
}
@@ -0,0 +1,135 @@
package io.v.nutz.zhgh.staffmanage.member.controller.change;
import cn.hutool.core.date.DateUtil;
import cn.wizzer.framework.base.Result;
import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.model.Audit;
import io.v.nutz.sys.services.SysLocalProcessService;
import io.v.nutz.web.commons.slog.annotation.SLog;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.staffmanage.member.handle.MemberChangeToDoHandler;
import io.v.nutz.zhgh.staffmanage.member.model.MemberChangeRecord;
import io.v.nutz.zhgh.staffmanage.member.param.pageForm.MemberChangePageForm;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
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.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
/**
* @version 1.0
* @Author zzr
* @nameMemberChangeBranchUnionAuditController
* @Date 2025/2/14 14:13
* @注释
*/
@IocBean
@Ok("json:full")
@At("/platform/member/change/branchUnion/audit")
public class MemberChangeBranchUnionAuditController {
@Inject
private Dao dao;
@Inject
private MemberCommonService memberCommonService;
@Inject
private SysLocalProcessService localProcessService;
@At("")
@Ok("beetl:/platform/member/change/branchUnionAudit/index.html")
@RequiresPermissions("member.change.branchUnion.audit")
public void index() {
}
@At
@RequiresPermissions("member.change.branchUnion.audit")
public Object pageData(MemberChangePageForm pageForm){
Sql sql = Sqls.create("""
SELECT
record.*,
state.stateName
FROM
member_change_record record
LEFT JOIN audit_state state ON state.stateId = record.applyStateId
$condition
""");
Cnd cnd = Cnd.NEW();
pageForm.buildSearch(cnd, "record.");
if (pageForm.getAudit()) {
cnd.and("record.applyStateId", ">", 10020);
} else {
cnd.and("record.applyStateId", "=", 10020);
}
cnd.desc("record.applyDateTime");
sql.setCondition(cnd);
Pagination pagination = memberCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success().addData(pagination);
}
@At
@ViReturn
@Aop(TransAop.READ_COMMITTED)
@RequiresPermissions("member.change.branchUnion.audit")
@SLog(type = "memberChange", tag = "会员变更", msg = "分工会审核")
public Object approval(@Param("audit") Audit audit, String id){
audit.setAuditor(ShiroUtil.getUserId());
audit.setLoginname(ShiroUtil.getPlatformLoginname());
audit.setUsername(ShiroUtil.getPlatformUsername());
audit.setAuditTime(DateUtil.date());
audit = dao.insert(audit);
MemberChangeRecord record = dao.fetch(MemberChangeRecord.class, id);
if (audit.getAuditType() == 2) {
// 退回修改
record.setApplyStateId(10030);
} else if (audit.getAuditType() == 1) {
// 通过
record.setApplyStateId(10050);
} else {
// 拒绝
record.setApplyStateId(10040);
}
record.setBranchUnionAuditId(audit.getId());
dao.updateIgnoreNull(record);
MemberChangeToDoHandler.COMPLETE_UNION_TASK.exec(record, NutMap.NEW().addv("nodeName", "分工会审核完成"));
if (audit.getAuditType() == 2) {
MemberChangeToDoHandler.CREATE_APPLY_RE_MODIFY_TASK.exec(record, NutMap.NEW().addv("nodeName", "分工会退回"));
} else if (audit.getAuditType() == 1) {
MemberChangeToDoHandler.CREATE_SCHOOL_TASK.exec(record, null);
} else {
MemberChangeToDoHandler.REFUSE_UNION_TASK.exec(record, NutMap.NEW().addv("nodeName", "分工会审核拒绝"));
}
return null;
}
@At
@ViReturn
@Aop(TransAop.READ_COMMITTED)
@RequiresPermissions("member.change.branchUnion.audit")
@SLog(type = "memberChange", tag = "会员变更", msg = "分工会撤回")
public Object doRevoke(String id){
MemberChangeRecord record = dao.fetch(MemberChangeRecord.class, id);
dao.update(MemberChangeRecord.class, Chain.make("applyStateId", 10020)
.add("branchUnionAuditId", null), Cnd.where("id", "=", id));
dao.clear(Audit.class, Cnd.where("id", "=", record.getBranchUnionAuditId()));
// 待办撤回
localProcessService.revokeTask("MEMBER_CHANGE@" + id, "分工会审核");
return null;
}
}
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.member.controller.change;
package io.v.nutz.zhgh.staffmanage.member.controller.change;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
@@ -6,6 +6,7 @@ import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.wizzer.framework.base.Result;
import com.google.common.base.Joiner;
@@ -25,15 +26,15 @@ import io.v.nutz.sys.services.SysUserService;
import io.v.nutz.web.commons.slog.annotation.SLog;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.data.constant.UserChangeType;
import io.v.nutz.zhgh.member.MemberMode;
import io.v.nutz.zhgh.member.UserMode;
import io.v.nutz.zhgh.member.WelfareMemberMode;
import io.v.nutz.zhgh.member.constant.*;
import io.v.nutz.zhgh.member.handle.MemberChangeAuditHandle;
import io.v.nutz.zhgh.member.model.MemberChangeRecord;
import io.v.nutz.zhgh.member.service.MemberService;
import io.v.nutz.zhgh.member.template.MemberTemp;
import io.v.nutz.zhgh.member.utils.MemberUtils;
import io.v.nutz.zhgh.staffmanage.member.MemberMode;
import io.v.nutz.zhgh.staffmanage.member.UserMode;
import io.v.nutz.zhgh.staffmanage.member.WelfareMemberMode;
import io.v.nutz.zhgh.staffmanage.member.constant.MemberChangeOrigin;
import io.v.nutz.zhgh.staffmanage.member.handle.MemberChangeToDoHandler;
import io.v.nutz.zhgh.staffmanage.member.model.MemberChangeRecord;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService;
import io.v.nutz.zhgh.staffmanage.member.template.MemberTemp;
import io.v.nutz.zhgh.staffmanage.member.utils.MemberUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -72,13 +73,13 @@ import java.util.stream.Collectors;
public class MemberChangeManageController {
@At("")
@Ok("beetl:/platform/member/change/Manage.html")
@Ok("beetl:/platform/member/change/manage/index.html")
@RequiresPermissions("member.change.mange")
public void index() {
}
@Inject
private MemberService memberService;
private MemberCommonService memberService;
@Inject
private AuditService auditService;
@@ -111,8 +112,7 @@ public class MemberChangeManageController {
@Param(value = "userState", required = false) String userState,
@Param(value = "preparedBy", required = false) String preparedBy,
@Param(value = "changeDate", required = false) String changeDate,
@Param(value = "changeType", required = false) String changeType,
@Param(value = "changeTypes", required = false) Integer[] changeTypes,
@Param(value = "changeTypes", required = false) String[] changeTypes,
@Param(value = "changed", required = false) Integer changed,
@Param(value = "myUnionGroupUser", required = false) Integer myUnionGroupUser,
@Param(value = "isMember", required = false) Integer isMember) {
@@ -126,31 +126,17 @@ public class MemberChangeManageController {
IF( his.id IS NULL, FALSE, TRUE ) hasHis,
state.stateId,
state.stateName,
state.stateColor,
IF( mcr.userId IS NULL OR mcr.stateId = @success, TRUE, FALSE ) apply,
IF( mcr.stateId IN ( $failStates ), TRUE, FALSE ) reApply
state.stateColor
FROM
`user` u
LEFT JOIN user_history_latest his ON his.loginname = u.loginname
LEFT JOIN member_change_record_latest mcr on mcr.userId = u.id
LEFT JOIN audit_state state ON mcr.stateId = state.stateId
LEFT JOIN user_history his ON his.loginname = u.loginname
LEFT JOIN member_change_record mcr on mcr.userId = u.id
LEFT JOIN audit_state state ON mcr.applyStateId = state.stateId
$condition
""")
.setParam("recordMode", MemberChangeRecordMode.MEMBER.getCode())
.setParam("changeUnitAuditing", MemberChangeApplyState.SCHOOL_UNION)
.setParam("changeUnitError", MemberChangeApplyState.SCHOOL_UNION_FAIL)
.setParam("success", MemberChangeApplyState.SUCCESS)
.setVar("failStates", Joiner.on(",").join(List.of(MemberChangeApplyState.UNION_FAIL, MemberChangeApplyState.SCHOOL_UNION_FAIL)));
""");
CndPlus cnd = CndPlus.create();
SqlExpressionGroup group = new SqlExpressionGroup();
/* group.or("his.changeType", "=", 2).or("u.member", "=", MemberMode.NORMAL.getCode());
cnd.and(group);*/
Cnd cnd = Cnd.NEW();
cnd.andEX("u.member", "=", isMember);
cnd.and(pageForm);
if (!ShiroUtil.hasAnyRoles("sysadmin,H03,A06")) {
if (ShiroUtil.hasRole("H04")) {
cnd.and("u.unionId", "=", Vi.getUnionId());
@@ -180,35 +166,41 @@ public class MemberChangeManageController {
cnd.andEX("u.userState", "=", userState);
cnd.andEX("u.preparedBy", "=", preparedBy);
if (StrUtil.isAllNotBlank(pageForm.getSearchName(), pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or(pageForm.getSearchName(), "like", "%" + pageForm.getSearchKeyword() + "%");
seg.or(pageForm.getSearchName(), "like", "%" + pageForm.getSearchKeyword() + "%");
cnd.and(seg);
}
if (StrUtil.isNotBlank(changeDateBefore) && StrUtil.isNotBlank(changeDateEnd)) {
cnd.and(new Static(String.format("Date(his.changeTime) >= '%s' and Date(his.changeTime) <= '%s'", changeDateBefore, changeDateEnd)));
}
if (Strings.isNotBlank(pageForm.getPageOrderName()) && Strings.isNotBlank(pageForm.getPageOrderBy())) {
cnd.orderBy((List.of("changeTime", "changeType", "changeTypes").contains(pageForm.getPageOrderName()) ? "his." : "u.") + pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
} else {
cnd.desc("his.changeTime");
}
if (Lang.isNotEmpty(changeTypes)) {
SqlExpressionGroup seg = new SqlExpressionGroup();
for (Integer type : changeTypes) {
seg.or(new Static("JSON_CONTAINS(his.changeTypes, CAST(%d AS JSON), '$')".formatted(type)));
for (String type : changeTypes) {
seg.or(new Static("JSON_CONTAINS(his.changeTypes, JSON_QUOTE('%s'), '$')".formatted(type)));
}
cnd.and(seg);
}
// cnd.andEX("Date(his.changeTime)", "=", changeDate);
// cnd.andEX("his.changeType", "=", changeType);
if (changed != null) {
if (changed == 1) {
cnd.and(new Static("his.changeType is not null"));
cnd.and(new Static("his.changeTypes is not null"));
} else if (changed == 2){
cnd.desc("his.changeType");
cnd.desc("his.changeTime");
} else {
cnd.and(new Static("his.changeType is null"));
cnd.and(new Static("his.changeTypes is null"));
}
}
cnd.groupBy("u.id");
sql.setCondition(cnd);
return memberService.list(pageForm, sql);
}
@@ -243,12 +235,12 @@ public class MemberChangeManageController {
LEFT JOIN member_change_record_latest mcr on mcr.userId = u.id
LEFT JOIN audit_state state ON mcr.stateId = state.stateId
$condition
""")
.setParam("recordMode", MemberChangeRecordMode.MEMBER.getCode())
.setParam("changeUnitAuditing", MemberChangeApplyState.SCHOOL_UNION)
.setParam("changeUnitError", MemberChangeApplyState.SCHOOL_UNION_FAIL)
.setParam("success", MemberChangeApplyState.SUCCESS)
.setVar("failStates", Joiner.on(",").join(List.of(MemberChangeApplyState.UNION_FAIL, MemberChangeApplyState.SCHOOL_UNION_FAIL)));
""");
// .setParam("recordMode", MemberChangeRecordMode.MEMBER.getCode())
// .setParam("changeUnitAuditing", MemberChangeApplyState.SCHOOL_UNION)
// .setParam("changeUnitError", MemberChangeApplyState.SCHOOL_UNION_FAIL)
// .setParam("success", MemberChangeApplyState.SUCCESS)
// .setVar("failStates", Joiner.on(",").join(List.of(MemberChangeApplyState.UNION_FAIL, MemberChangeApplyState.SCHOOL_UNION_FAIL)));
CndPlus cnd = CndPlus.create();
cnd.andEX("u.member", "=", isMember);
cnd.and(pageForm);
@@ -283,57 +275,71 @@ public class MemberChangeManageController {
}
@At
@Aop(TransAop.READ_COMMITTED)
@RequiresPermissions("member.change.mange")
public Object change(MemberChangeRecord memberChangeRecord) {
// if (Objects.equals(memberChangeRecord.getType(), UserChangeType.NEW.getCode())) {
// return Result.error("您已经入职,可以选择恢复功能入会!");
// }
if (Objects.equals(memberChangeRecord.getType(), UserChangeType.UNIT_CHANGE.getCode())) {
boolean unionGroupEnable = Optional.ofNullable(dao.fetch(Sys_config.class, Cnd.where("configKey", "=", "isThreeUnit"))).map(Sys_config::getConfigValue).orElse("false").equals("true");
@SLog(tag = "会员高级管理-会员变更", msg = "分工会/校工会会员管理员提交变更")
public Object doSubmitChange(MemberChangeRecord record) {
// 检验是否有变更
if (Lang.isEmpty(record)) {
return Result.error("未获取到异动数据");
}
List<NutMap> changeInfos = memberService.getChangeInfos(record);
if (Lang.isEmpty(changeInfos)) {
return Result.error("未校验到变更数据,请确认数据是否存在变更");
}
if (unionGroupEnable && memberChangeRecord.getCurrentThreeUnitId().equals(memberChangeRecord.getOriginThreeUnitId())) {
return Result.error("请选择不同的单位!");
} else if (!unionGroupEnable && memberChangeRecord.getCurrentUnitId().equals(memberChangeRecord.getOriginUnitId())) {
return Result.error("请选择不同的单位!");
try {
// 变更就表明当前审核人审核通过
Audit audit = new Audit();
audit.setAuditor(ShiroUtil.getUserId());
audit.setLoginname(ShiroUtil.getPlatformLoginname());
audit.setUsername(ShiroUtil.getPlatformUsername());
audit.setAuditOpinion("通过");
audit.setAuditTime(DateUtil.date());
dao.insert(audit);
User user = dao.fetch(User.class, Cnd.where("id", "=", record.getUserId()));
// 比较有哪些变更类型
List<String> changeTypes = memberService.compareChangeType(record, user);
record.setChangeTypes(changeTypes);
if (!ShiroUtil.hasAnyRoles("sysadmin, SchoolUnionMemberAdmin")) {
// 分工会变更分工会审核通过转为校工会审核
record.setChangeOrigin(MemberChangeOrigin.BRANCH_UNION.name());
record.setApplyStateId(10050);
record.setBranchUnionAuditId(audit.getId());
dao.insert(record);
// 创建流程任务
MemberChangeToDoHandler.START_PROCESS.exec(record, null);
MemberChangeToDoHandler.CREATE_UNION_TASK.exec(record, null);
MemberChangeToDoHandler.COMPLETE_UNION_TASK.exec(record, NutMap.NEW().addv("nodeName", "分工会审核完成"));
MemberChangeToDoHandler.CREATE_SCHOOL_TASK.exec(record, null);
} else {
// 校工会变更变更直接完成
record.setChangeOrigin(MemberChangeOrigin.SCHOOL_UNION.name());
record.setApplyStateId(10080);
record.setBranchUnionAuditId(audit.getId());
record.setSchoolUnionAuditId(audit.getId());
dao.insert(record);
// 创建流程任务
MemberChangeToDoHandler.START_PROCESS.exec(record, null);
MemberChangeToDoHandler.CREATE_UNION_TASK.exec(record, null);
MemberChangeToDoHandler.COMPLETE_UNION_TASK.exec(record, NutMap.NEW().addv("nodeName", "分工会审核完成"));
MemberChangeToDoHandler.CREATE_SCHOOL_TASK.exec(record, null);
MemberChangeToDoHandler.COMPLETE_SCHOOL_TASK.exec(record, NutMap.NEW().addv("nodeName", "校工会审核完成"));
MemberChangeToDoHandler.COMPLETE_PROCESS.exec(record, null);
memberService.compareChangeInfoAndUpdateMember(record.getId());
}
return Result.success("操作成功");
} catch (Exception e) {
log.error("分工会/校工会会员管理员提交变更:", e);
return Result.error("操作失败");
}
if (!Objects.equals(memberChangeRecord.getType(), UserChangeType.UNIT_CHANGE.getCode())) {
memberChangeRecord.setCurrentUnitId(null);
memberChangeRecord.setCurrentUnionId(null);
}
Audit audit = new Audit();
audit.setAuditPass(true);
memberChangeRecord.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
if (ShiroUtil.hasRole("sysadmin")) {
memberChangeRecord.setApplyOrigin(MemberChangeOrigin.SCHOOL.getCode());
memberChangeRecord = MemberChangeAuditHandle.CREATE.next(memberChangeRecord, null);
MemberChangeAuditHandle.SCHOOL.next(memberChangeRecord, audit);
} else {
if (ShiroUtil.hasAnyRoles("gh01, H04")) {
memberChangeRecord.setApplyOrigin(MemberChangeOrigin.UNION.getCode());
} else if (ShiroUtil.hasRole("ghxzzz")){
memberChangeRecord.setApplyOrigin(MemberChangeOrigin.UNION_GROUP.getCode());
}
memberChangeRecord = MemberChangeAuditHandle.CREATE.next(memberChangeRecord, null);
MemberChangeAuditHandle.UNION.next(memberChangeRecord, audit);
}
return Result.success();
// record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
// if (ShiroUtil.hasAnyRoles("sysadmin,A06,H03")) {
// record.setApplyOrigin(MemberChangeOrigin.SCHOOL.getCode());
// record = MemberChangeAuditHandle.CREATE.next(record, null);
// MemberChangeAuditHandle.SCHOOL.next(record, new Audit().setAuditPass(true));
// } else {
// record.setApplyOrigin(MemberChangeOrigin.UNION.getCode());
// record = MemberChangeAuditHandle.CREATE.next(record, null);
// MemberChangeAuditHandle.UNION.next(record, new Audit().setAuditPass(true));
// }
// return null;
}
@Inject
private SysUserService userService;
@@ -396,9 +402,9 @@ public class MemberChangeManageController {
cnd.and(new SqlExpressionGroup().andLike(memberSearchName, memberSearchKeyWord));
}
List<Integer> status = new ArrayList<>();
status.add(MemberStatus.NORMAL.getCode());
status.add(MemberStatus.TURN_IN.getCode());
status.add(MemberStatus.RESTORE.getCode());
// status.add(MemberStatus.NORMAL.getCode());
// status.add(MemberStatus.TURN_IN.getCode());
// status.add(MemberStatus.RESTORE.getCode());
if (!ShiroUtil.hasAnyRoles("sysadmin,A06,H03")) {
cnd.and("unionid", "=", Vi.getUnionId());
@@ -440,22 +446,22 @@ public class MemberChangeManageController {
memberService.update("sys_user", updateUnitChain, Cnd.where("id", "in", userId));
for (String uid : userId) {
MemberChangeRecord record = new MemberChangeRecord();
record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
record.setType(UserChangeType.UNIT_CHANGE.getCode());
record.setUserId(uid);
record.setApplyTime(new Date());
record.setApplyOrigin(MemberChangeOrigin.SCHOOL.getCode());
record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
record.setStateId(MemberChangeApplyState.SUCCESS);
Audit audit = new Audit();
audit.setAuditPass(true);
audit.setAuditOpinion(MemberOrigin.BATCH.getDescription());
String id = auditService.insert(audit).getId();
record.setSchoolAuditId(id);
memberService.insert(record);
// MemberChangeRecord record = new MemberChangeRecord();
//// record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
// record.setType(UserChangeType.UNIT_CHANGE.getCode());
// record.setUserId(uid);
// record.setApplyTime(new Date());
//// record.setApplyOrigin(MemberChangeOrigin.SCHOOL.getCode());
//// record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
//// record.setStateId(MemberChangeApplyState.SUCCESS);
//
// Audit audit = new Audit();
// audit.setAuditPass(true);
//// audit.setAuditOpinion(MemberOrigin.BATCH.getDescription());
// String id = auditService.insert(audit).getId();
//
// record.setSchoolAuditId(id);
// memberService.insert(record);
}
});
@@ -521,24 +527,24 @@ public class MemberChangeManageController {
audit.setLoginname(ShiroUtil.getPrincipalProperty("loginname").toString());
memberService.insert(audit);
for (String userId : userIds) {
User user = memberService.dao().fetch(User.class, Cnd.where("id", "=", userId));
MemberChangeRecord changeRecord = new MemberChangeRecord();
changeRecord.setType(UserChangeType.NEW.getCode());
changeRecord.setApplyOrigin(ShiroUtil.hasRole("H04") ? MemberChangeOrigin.UNION.getCode() : MemberChangeOrigin.UNION_GROUP.getCode());
changeRecord.setStateId(MemberChangeApplyState.SCHOOL_UNION);
changeRecord.setUpdateWelfareMember(true);
changeRecord.setUserId(userId);
changeRecord.setApplyTime(new Date());
changeRecord.setOriginUnitId(user.getUnitid());
changeRecord.setOriginUnionId(user.getUnionid());
changeRecord.setOriginThreeUnitId(user.getThreeUnitId());
changeRecord.setCurrentUnionId(user.getUnionid());
changeRecord.setCurrentUnitId(unitId);
changeRecord.setCurrentThreeUnitId(threeUnitId);
changeRecord.setUnionAuditId(audit.getId());
changeRecord.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
changeRecord.setTaskId(taskId);
maps.add(changeRecord);
// User user = memberService.dao().fetch(User.class, Cnd.where("id", "=", userId));
// MemberChangeRecord changeRecord = new MemberChangeRecord();
// changeRecord.setType(UserChangeType.NEW.getCode());
//// changeRecord.setApplyOrigin(ShiroUtil.hasRole("H04") ? MemberChangeOrigin.UNION.getCode() : MemberChangeOrigin.UNION_GROUP.getCode());
//// changeRecord.setStateId(MemberChangeApplyState.SCHOOL_UNION);
// changeRecord.setUpdateWelfareMember(true);
// changeRecord.setUserId(userId);
// changeRecord.setApplyTime(new Date());
// changeRecord.setOriginUnitId(user.getUnitid());
// changeRecord.setOriginUnionId(user.getUnionid());
// changeRecord.setOriginThreeUnitId(user.getThreeUnitId());
// changeRecord.setCurrentUnionId(user.getUnionid());
// changeRecord.setCurrentUnitId(unitId);
// changeRecord.setCurrentThreeUnitId(threeUnitId);
// changeRecord.setUnionAuditId(audit.getId());
//// changeRecord.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
// changeRecord.setTaskId(taskId);
// maps.add(changeRecord);
}
memberService.insert(maps);
return null;
@@ -581,6 +587,7 @@ public class MemberChangeManageController {
@At
@Ok("void")
@RequiresPermissions("member.change.mange")
public void downloadImport(HttpServletResponse response) {
try {
ViTool.excelResponse(response, "会员导入模版.xlsx");
@@ -609,8 +616,9 @@ public class MemberChangeManageController {
private final ReentrantLock lock = new ReentrantLock(true);
@At
@AdaptBy(type = UploadAdaptor.class, args = {"ioc:fileUpload"})
@Aop(TransAop.READ_COMMITTED)
@RequiresPermissions("member.change.mange")
@AdaptBy(type = UploadAdaptor.class, args = {"ioc:fileUpload"})
@SLog(type = "会员管理系统", tag = "信息维护-会员高级管理", msg = "导入会员", param = true, result = true)
public Object doImport(TempFile file) {
try {
@@ -721,4 +729,19 @@ public class MemberChangeManageController {
}
@At
@ViReturn
@RequiresPermissions("member.change.mange")
public Object getAllChangeMemberInfo(String userId){
List<NutMap> mapList = memberService.getAllChangeInfo(userId);
if (Lang.isEmpty(mapList)) {
return Result.error("未获取到异动数据");
}
User user = dao.fetch(User.class, Cnd.where("id", "=", userId));
NutMap map = Lang.obj2nutmap(user);
map.put("user",user);
map.put("allChangeInfo", mapList);
return map;
}
}
@@ -0,0 +1,149 @@
package io.v.nutz.zhgh.staffmanage.member.controller.change;
import cn.hutool.core.util.StrUtil;
import cn.wizzer.framework.base.Result;
import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.model.Audit;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.sys.services.SysLocalProcessService;
import io.v.nutz.web.commons.slog.annotation.SLog;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.staffmanage.member.model.MemberApplyRecord;
import io.v.nutz.zhgh.staffmanage.member.model.MemberChangeRecord;
import io.v.nutz.zhgh.staffmanage.member.param.pageForm.MemberChangePageForm;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
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.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberChangeMineController
* @Date 2025/2/14 11:13
* @注释
*/
@IocBean
@Ok("json:full")
@At("/platform/member/change/mine")
public class MemberChangeMineController {
@Inject
private Dao dao;
@Inject
private MemberCommonService memberCommonService;
@Inject
private SysLocalProcessService sysLocalProcessService;
@At("")
@Ok("beetl:/platform/member/change/mine/index.html")
@RequiresPermissions("member.change.mine")
public void index() {
}
@At
@RequiresPermissions("member.change.mine")
public Object pageData(MemberChangePageForm pageForm){
Sql sql = Sqls.create("""
SELECT
record.*,
state.stateName
FROM
member_change_record record
LEFT JOIN audit_state state ON state.stateId = record.applyStateId
$condition
""");
Cnd cnd = Cnd.NEW();
pageForm.buildSearch(cnd, "record.");
if (!ShiroUtil.hasAnyRoles("sysadmin,SchoolUnionAdmin,SchoolUnionMemberAdmin")) {
if (ShiroUtil.hasAnyRoles("H04,branchUnionMemberAdmin")) {
cnd.and("record.unionId", "=", Vi.getUnionId());
} else {
cnd.and("record.userId", "=", ShiroUtil.getUserId());
}
}
cnd.desc("record.applyDateTime");
sql.setCondition(cnd);
Pagination pagination = memberCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success().addData(pagination);
}
@At
@ViReturn
@Aop(TransAop.READ_COMMITTED)
@RequiresPermissions("member.change.mine")
@SLog(tag = "会员入会申请", msg = "撤回申请")
public Object doRevoke(String id){
dao.update(MemberChangeRecord.class, Chain.make("applyStateId", 10), Cnd.where("id", "=", id));
sysLocalProcessService.revokeTask("MEMBER_CHANGE@" + id,"待提交申请");
return null;
}
@At
@ViReturn
@Aop(TransAop.READ_COMMITTED)
@RequiresPermissions("member.change.mine")
@SLog(tag = "会员入会申请", msg = "删除申请")
public Object doDelete(String id){
dao.clear(MemberChangeRecord.class, Cnd.where("id", "=", id));
sysLocalProcessService.deleteProcessInstance("MEMBER_CHANGE@" + id);
return null;
}
@At
@ViReturn
@RequiresPermissions("member.change.mine")
public Object findMemberChangeRecord(String id){
Sql sql = Sqls.create("""
SELECT
u.*,
record.id AS recordId,
record.applyDateTime,
record.branchUnionAuditId,
record.schoolUnionAuditId,
state.stateName
FROM
member_change_record record
LEFT JOIN audit_state state ON state.stateId = record.applyStateId
LEFT JOIN `user` u ON u.id = record.userId
WHERE
record.id = @id
""").setParam("id", id);
sql.setCallback(Sqls.callback.map());
dao.execute(sql);
NutMap nutMap = (NutMap) sql.getResult();
List<NutMap> changeInfos = memberCommonService.getChangeInfos(nutMap.getString("recordId"));
nutMap.put("changeInfos", changeInfos);
if (StrUtil.isNotBlank(nutMap.getString("schoolUnionAuditId"))) {
Audit audit = dao.fetch(Audit.class, Cnd.where("id", "=", nutMap.getString("schoolUnionAuditId")));
nutMap.addv("schoolAudit", audit);
}
if (StrUtil.isNotBlank(nutMap.getString("branchUnionAuditId"))) {
Audit audit = dao.fetch(Audit.class, Cnd.where("id", "=", nutMap.getString("branchUnionAuditId")));
nutMap.addv("branchAudit", audit);
}
return nutMap;
}
}
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.member.controller.change;
package io.v.nutz.zhgh.staffmanage.member.controller.change;
import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.annontation.ViReturn;
@@ -8,13 +8,15 @@ import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.ViService;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.member.model.MemberChangeRecord;
import io.v.nutz.zhgh.member.service.MemberService;
import io.v.nutz.zhgh.staffmanage.member.model.MemberChangeRecord;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
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;
@@ -35,13 +37,13 @@ import java.util.List;
public class MemberChangeRecordsController {
@At("")
@Ok("beetl:/platform/member/change/Records.html")
@Ok("beetl:/platform/member/change/record/index.html")
@RequiresPermissions("member.change.records")
public void index() {
}
@Inject
private MemberService memberService;
private MemberCommonService memberService;
@Inject("MemberChangeRecord")
private ViService<MemberChangeRecord> recordViService;
@@ -59,10 +61,10 @@ public class MemberChangeRecordsController {
@Param(value = "unionGroupId", required = false) String unionGroupId,
@Param(value = "threeUnitId", required = false) String threeUnitId,
@Param(value = "userType", required = false) String userType,
@Param(value = "changeType", required = false) Integer changeType,
@Param(value = "applyOrigin", required = false) Integer applyOrigin) {
@Param(value = "changeTypes", required = false) String[] changeTypes,
@Param(value = "applyOrigin", required = false) String applyOrigin) {
CndPlus cnd = CndPlus.create();
pageForm.defaultSortDesc("mcr.applyTime");
pageForm.defaultSortDesc("mcr.applyDateTime");
cnd.and(pageForm);
//查询是否记录模式来自对会员还是福利会员
//cnd.and("mcr.recordMode", "=", MemberChangeRecordMode.MEMBER.getCode());
@@ -71,9 +73,15 @@ public class MemberChangeRecordsController {
cnd.andEX("u.threeUnitId", "=", threeUnitId);
cnd.andEX("u.unionGroupId", "=", unionGroupId);
cnd.andEX("u.personType", "=", userType);
cnd.andEX("mcr.type", "=", changeType);
cnd.andEX("mcr.applyOrigin", "=", applyOrigin);
cnd.andEX("mcr.changeOrigin", "=", applyOrigin);
if (Lang.isNotEmpty(changeTypes)) {
SqlExpressionGroup seg = new SqlExpressionGroup();
for (String type : changeTypes) {
seg.or(new Static("JSON_CONTAINS(his.changeTypes, JSON_QUOTE('%s'), '$')".formatted(type)));
}
cnd.and(seg);
}
if (!ShiroUtil.hasAnyRoles("sysadmin,H03,A06")) {
if (ShiroUtil.hasRole("H04")) {
cnd.and("u.unionId", "=", Vi.getUnionId());
@@ -87,12 +95,6 @@ public class MemberChangeRecordsController {
}
Pagination pagination = memberService.memberChangeRecords(pageForm, cnd);
List<NutMap> list = pagination.getList();
list.forEach(v -> {
v.setv("unionAudit", auditViService.fetch(Cnd.where("id", "=", v.getString("unionAuditId"))));
v.setv("schoolAudit", auditViService.fetch(Cnd.where("id", "=", v.getString("schoolAuditId"))));
});
return pagination;
}
@@ -0,0 +1,137 @@
package io.v.nutz.zhgh.staffmanage.member.controller.change;
import cn.hutool.core.date.DateUtil;
import cn.wizzer.framework.base.Result;
import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.model.Audit;
import io.v.nutz.sys.services.SysLocalProcessService;
import io.v.nutz.web.commons.slog.annotation.SLog;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.staffmanage.member.handle.MemberChangeToDoHandler;
import io.v.nutz.zhgh.staffmanage.member.model.MemberChangeRecord;
import io.v.nutz.zhgh.staffmanage.member.param.pageForm.MemberChangePageForm;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
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.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
/**
* @version 1.0
* @Author zzr
* @nameMemberChangeSchoolUnionAuditController
* @Date 2025/2/14 14:13
* @注释
*/
@IocBean
@Ok("json:full")
@At("/platform/member/change/schoolUnion/audit")
public class MemberChangeSchoolUnionAuditController {
@Inject
private Dao dao;
@Inject
private MemberCommonService memberCommonService;
@Inject
private SysLocalProcessService localProcessService;
@At("")
@Ok("beetl:/platform/member/change/schoolUnionAudit/index.html")
@RequiresPermissions("member.change.schoolUnion.audit")
public void index() {
}
@At
@RequiresPermissions("member.change.schoolUnion.audit")
public Object pageData(MemberChangePageForm pageForm){
Sql sql = Sqls.create("""
SELECT
record.*,
state.stateName
FROM
member_change_record record
LEFT JOIN audit_state state ON state.stateId = record.applyStateId
$condition
""");
Cnd cnd = Cnd.NEW();
pageForm.buildSearch(cnd, "record.");
if (pageForm.getAudit()) {
cnd.and("record.applyStateId", ">", 10050);
} else {
cnd.and("record.applyStateId", "=", 10050);
}
cnd.desc("record.applyDateTime");
sql.setCondition(cnd);
Pagination pagination = memberCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success().addData(pagination);
}
@At
@ViReturn
@Aop(TransAop.READ_COMMITTED)
@RequiresPermissions("member.change.schoolUnion.audit")
@SLog(type = "memberChange", tag = "会员变更", msg = "校工会审核")
public Object approval(@Param("audit") Audit audit, String id){
audit.setAuditor(ShiroUtil.getUserId());
audit.setLoginname(ShiroUtil.getPlatformLoginname());
audit.setUsername(ShiroUtil.getPlatformUsername());
audit.setAuditTime(DateUtil.date());
audit = dao.insert(audit);
MemberChangeRecord record = dao.fetch(MemberChangeRecord.class, id);
if (audit.getAuditType() == 2) {
// 退回修改
record.setApplyStateId(10060);
} else if (audit.getAuditType() == 1) {
// 通过
record.setApplyStateId(10080);
} else {
// 拒绝
record.setApplyStateId(10070);
}
record.setSchoolUnionAuditId(audit.getId());
dao.updateIgnoreNull(record);
MemberChangeToDoHandler.COMPLETE_SCHOOL_TASK.exec(record, NutMap.NEW().addv("nodeName", "校工会审核完成"));
if (audit.getAuditType() == 2) {
MemberChangeToDoHandler.CREATE_APPLY_RE_MODIFY_TASK.exec(record, NutMap.NEW().addv("nodeName", "校工会退回"));
} else if (audit.getAuditType() == 1) {
MemberChangeToDoHandler.COMPLETE_PROCESS.exec(record, null);
memberCommonService.compareChangeInfoAndUpdateMember(record.getId());
} else {
MemberChangeToDoHandler.REFUSE_UNION_TASK.exec(record, NutMap.NEW().addv("nodeName", "校工会审核拒绝"));
}
return null;
}
@At
@ViReturn
@Aop(TransAop.READ_COMMITTED)
@RequiresPermissions("member.change.schoolUnion.audit")
@SLog(type = "memberChange", tag = "会员变更", msg = "校工会撤回")
public Object doRevoke(String id){
MemberChangeRecord record = dao.fetch(MemberChangeRecord.class, id);
dao.update(MemberChangeRecord.class, Chain.make("applyStateId", 10050)
.add("schoolUnionAuditId", null), Cnd.where("id", "=", id));
dao.clear(Audit.class, Cnd.where("id", "=", record.getSchoolUnionAuditId()));
// 待办撤回
localProcessService.revokeTask("MEMBER_CHANGE@" + id, "校工会审核");
return null;
}
}
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.member.controller.check;
package io.v.nutz.zhgh.staffmanage.member.controller.check;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
@@ -8,7 +8,7 @@ import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.base.utils.ViTool;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.member.service.MemberCheckPersonalService;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCheckPersonalService;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
@@ -1,12 +1,12 @@
package io.v.nutz.zhgh.member.controller.check;
package io.v.nutz.zhgh.staffmanage.member.controller.check;
import cn.hutool.core.util.StrUtil;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.SimpleService;
import io.v.nutz.base.utils.Roles;
import io.v.nutz.zhgh.member.constant.MemberChangeApplyState;
import io.v.nutz.zhgh.member.model.MemberChangeRecord;
//import io.v.nutz.zhgh.member.constant.MemberChangeApplyState;
import io.v.nutz.zhgh.staffmanage.member.model.MemberChangeRecord;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
@@ -69,7 +69,7 @@ public class MemberCheckSchoolController {
LEFT JOIN sys_union gh ON gh.id = mcut.unionId
$condition
""");
sql.setParam("stateId", MemberChangeApplyState.SCHOOL_UNION);
// sql.setParam("stateId", MemberChangeApplyState.SCHOOL_UNION);
Cnd cnd = Cnd.NEW();
cnd.andEX("gh.id", "=", unionId);
cnd.and("mcut.taskId", "=", taskId);
@@ -79,22 +79,7 @@ public class MemberCheckSchoolController {
sql.setCondition(cnd);
List<NutMap> map = simpleService.listMap(sql);
List<MemberChangeRecord> changeRecords = simpleService.dao().query(MemberChangeRecord.class,
Cnd.where("stateId", "=", MemberChangeApplyState.SCHOOL_UNION)
.and("taskId", "=", taskId));
map.forEach(v -> {
//该工会有多少个人需要审核
//找出原工会和现工会不等于空的
/*//找出的值为单位变更
int size = changeRecords.stream().filter(c ->
StrUtil.isNotEmpty(c.getCurrentUnionId()) &&
StrUtil.isNotEmpty(c.getOriginUnionId()) &&
c.getCurrentUnionId().equals(v.getString("id"))).collect(Collectors.toList()).size();*/
//找出除了单位变更的其他会员
int size2 = changeRecords.stream().filter(c ->
StrUtil.isNotEmpty(c.getOriginUnionId()) &&
c.getOriginUnionId().equals(v.getString("id"))).collect(Collectors.toList()).size();
v.setv("notCheckNum", size2);
});
Cnd.where("taskId", "=", taskId));
return map;
}
@@ -133,7 +118,7 @@ public class MemberCheckSchoolController {
""");
sql.setParam("taskId", taskId);
sql.setParam("unionId", unionId);
sql.setParam("stateId", MemberChangeApplyState.SCHOOL_UNION);
// sql.setParam("stateId", MemberChangeApplyState.SCHOOL_UNION);
List<NutMap> list = simpleService.listMap(sql);
return list;
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.member.controller.check;
package io.v.nutz.zhgh.staffmanage.member.controller.check;
import cn.hutool.core.lang.Assert;
import io.v.nutz.base.annontation.ViReturn;
@@ -6,11 +6,11 @@ import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.SimpleService;
import io.v.nutz.sys.models.Sys_union;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.zhgh.member.constant.MemberChangeRecordMode;
import io.v.nutz.zhgh.member.model.MemberChangeRecord;
import io.v.nutz.zhgh.member.model.MemberCheckSelfTask;
import io.v.nutz.zhgh.member.model.MemberCheckTask;
import io.v.nutz.zhgh.member.model.MemberCheckUnionTask;
//import io.v.nutz.zhgh.member.constant.MemberChangeRecordMode;
import io.v.nutz.zhgh.staffmanage.member.model.MemberChangeRecord;
import io.v.nutz.zhgh.staffmanage.member.model.MemberCheckSelfTask;
import io.v.nutz.zhgh.staffmanage.member.model.MemberCheckTask;
import io.v.nutz.zhgh.staffmanage.member.model.MemberCheckUnionTask;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
@@ -59,7 +59,7 @@ public class MemberCheckTaskController {
select * from member_check_task $condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("taskMode", "=", MemberChangeRecordMode.MEMBER.getCode());
// cnd.and("taskMode", "=", MemberChangeRecordMode.MEMBER.getCode());
cnd.andEX("year", "=", year);
sql.setCondition(cnd);
return simpleService.list(pageForm, sql);
@@ -74,7 +74,7 @@ public class MemberCheckTaskController {
List<Sys_union> sysUnions = dao.query(Sys_union.class, null);
Trans.exec(() -> {
task.setYear(calendar.get(Calendar.YEAR));
task.setTaskMode(MemberChangeRecordMode.MEMBER.getCode());
// task.setTaskMode(MemberChangeRecordMode.MEMBER.getCode());
dao.insert(task);
if (task.getCreateTaskMode() == 1) {
List<MemberCheckUnionTask> unionTasks = sysUnions.stream().map(v -> {
@@ -120,7 +120,7 @@ public class MemberCheckTaskController {
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(task.getStartTime());
task.setTaskMode(MemberChangeRecordMode.MEMBER.getCode());
// task.setTaskMode(MemberChangeRecordMode.MEMBER.getCode());
task.setYear(calendar.get(Calendar.YEAR));
dao.updateIgnoreNull(task);
@@ -149,7 +149,7 @@ public class MemberCheckTaskController {
Cnd cnd = Cnd.NEW();
cnd.andEX("year", "=", year);
cnd.and("createTaskMode", "=", 1);
cnd.and("taskMode", "=", MemberChangeRecordMode.MEMBER.getCode());
// cnd.and("taskMode", "=", MemberChangeRecordMode.MEMBER.getCode());
cnd.desc("year");
return dao.query(MemberCheckTask.class, cnd);
}
@@ -160,7 +160,7 @@ public class MemberCheckTaskController {
Cnd cnd = Cnd.NEW();
cnd.andEX("year", "=", year);
cnd.andEX("createTaskMode", "=", 2);
cnd.and("taskMode", "=", MemberChangeRecordMode.MEMBER.getCode());
// cnd.and("taskMode", "=", MemberChangeRecordMode.MEMBER.getCode());
return dao.query(MemberCheckTask.class, cnd);
}
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.member.controller.check;
package io.v.nutz.zhgh.staffmanage.member.controller.check;
import cn.hutool.core.util.StrUtil;
import cn.wizzer.framework.base.Result;
@@ -11,12 +11,13 @@ import io.v.nutz.base.utils.Vi;
import io.v.nutz.sys.models.Sys_config;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.data.constant.UserChangeType;
import io.v.nutz.zhgh.member.constant.MemberChangeApplyState;
import io.v.nutz.zhgh.member.constant.MemberChangeOrigin;
import io.v.nutz.zhgh.member.constant.MemberChangeRecordMode;
import io.v.nutz.zhgh.member.handle.MemberChangeAuditHandle;
import io.v.nutz.zhgh.member.model.MemberChangeRecord;
import io.v.nutz.zhgh.member.model.MemberCheckUnionTask;
//import io.v.nutz.zhgh.member.constant.MemberChangeApplyState;
import io.v.nutz.zhgh.staffmanage.member.constant.MemberChangeOrigin;
//import io.v.nutz.zhgh.member.constant.MemberChangeRecordMode;
//import io.v.nutz.zhgh.staffmanage.member.handle.MemberChangeAuditHandle;
//import io.v.nutz.zhgh.staffmanage.member.handle.MemberChangeAuditHandle;
import io.v.nutz.zhgh.staffmanage.member.model.MemberChangeRecord;
import io.v.nutz.zhgh.staffmanage.member.model.MemberCheckUnionTask;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
@@ -178,8 +179,8 @@ public class MemberCheckUnionController {
sql.setCondition(cnd);
sql.setParam("success", MemberChangeApplyState.SUCCESS);
sql.setVar("failStates", Joiner.on(",").join(List.of(MemberChangeApplyState.UNION_FAIL, MemberChangeApplyState.SCHOOL_UNION_FAIL)));
// sql.setParam("success", MemberChangeApplyState.SUCCESS);
// sql.setVar("failStates", Joiner.on(",").join(List.of(MemberChangeApplyState.UNION_FAIL, MemberChangeApplyState.SCHOOL_UNION_FAIL)));
return simpleService.list(pageForm, sql);
}
@@ -264,8 +265,8 @@ public class MemberCheckUnionController {
}
sql.setCondition(cnd);
sql.setParam("success", MemberChangeApplyState.SUCCESS);
sql.setVar("failStates", Joiner.on(",").join(List.of(MemberChangeApplyState.UNION_FAIL, MemberChangeApplyState.SCHOOL_UNION_FAIL)));
// sql.setParam("success", MemberChangeApplyState.SUCCESS);
// sql.setVar("failStates", Joiner.on(",").join(List.of(MemberChangeApplyState.UNION_FAIL, MemberChangeApplyState.SCHOOL_UNION_FAIL)));
return simpleService.fetch(sql);
}
@@ -288,54 +289,6 @@ public class MemberCheckUnionController {
@ViReturn
@RequiresPermissions("member.check.union")
public Object doSubmitChangeUser(MemberChangeRecord memberChangeRecord) {
if (Objects.equals(memberChangeRecord.getType(), UserChangeType.NEW.getCode())) {
return Result.error("您已经入职,可以选择恢复功能入会!");
}
if (Objects.equals(memberChangeRecord.getType(), UserChangeType.UNIT_CHANGE.getCode())) {
boolean unionGroupEnable = Optional.ofNullable(dao.fetch(Sys_config.class, Cnd.where("configKey", "=", "isThreeUnit"))).map(v -> v.getConfigValue()).orElse("false").equals("true");
if (unionGroupEnable && memberChangeRecord.getCurrentThreeUnitId().equals(memberChangeRecord.getOriginThreeUnitId())) {
return Result.error("请选择不同的单位!");
} else if (!unionGroupEnable && memberChangeRecord.getCurrentUnitId().equals(memberChangeRecord.getOriginUnitId())) {
return Result.error("请选择不同的单位!");
}
}
if (!Objects.equals(memberChangeRecord.getType(), UserChangeType.UNIT_CHANGE.getCode())) {
memberChangeRecord.setCurrentUnitId(null);
memberChangeRecord.setCurrentUnionId(null);
}
Sql userSql = Sqls.fetchString("select userState from sys_user where id = @userId");
userSql.setParam("userId", memberChangeRecord.getUserId());
dao.execute(userSql);
String userState = StrUtil.blankToDefault(userSql.getString(), "");
// if (memberChangeRecord.getType() == UserChangeType.ON_DUTY.getCode()) {
// if (userState.equals(UserChangeType.ON_DUTY.getDescription())) {
// return Result.error("该用户当前的状态已经是" + UserChangeType.ON_DUTY.getDescription() + ",您无需变更!");
// }
// }
if (memberChangeRecord.getType() == UserChangeType.RESIGN.getCode()) {
if (userState.equals(UserChangeType.RESIGN.getDescription())) {
return Result.error("该用户当前的状态已经是" + UserChangeType.RESIGN.getDescription() + ",您无需变更!");
}
}
if (memberChangeRecord.getType() == UserChangeType.RETIREMENT.getCode()) {
if (userState.equals(UserChangeType.RETIREMENT.getDescription())) {
return Result.error("该用户当前的状态已经是" + UserChangeType.RETIREMENT.getDescription() + ",您无需变更!");
}
}
memberChangeRecord.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
memberChangeRecord.setApplyOrigin(MemberChangeOrigin.UNION.getCode());
memberChangeRecord = MemberChangeAuditHandle.CREATE.next(memberChangeRecord, null);
Audit audit = new Audit();
audit.setAuditPass(true);
audit.setAuditOpinion(memberChangeRecord.getRemark());
MemberChangeAuditHandle.UNION.next(memberChangeRecord, audit);
return null;
}
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.member.controller.info;
package io.v.nutz.zhgh.staffmanage.member.controller.info;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
@@ -14,14 +14,14 @@ import io.v.nutz.base.utils.ViTool;
import io.v.nutz.sys.services.SysUserService;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.data.constant.UserChangeType;
import io.v.nutz.zhgh.member.MemberMode;
import io.v.nutz.zhgh.member.UserMode;
import io.v.nutz.zhgh.member.constant.MemberChangeApplyState;
import io.v.nutz.zhgh.member.constant.MemberChangeOrigin;
import io.v.nutz.zhgh.member.constant.MemberChangeRecordMode;
import io.v.nutz.zhgh.member.constant.MemberOrigin;
import io.v.nutz.zhgh.member.model.MemberChangeRecord;
import io.v.nutz.zhgh.member.service.MemberService;
import io.v.nutz.zhgh.staffmanage.member.MemberMode;
import io.v.nutz.zhgh.staffmanage.member.UserMode;
//import io.v.nutz.zhgh.member.constant.MemberChangeApplyState;
import io.v.nutz.zhgh.staffmanage.member.constant.MemberChangeOrigin;
//import io.v.nutz.zhgh.member.constant.MemberChangeRecordMode;
//import io.v.nutz.zhgh.member.constant.MemberOrigin;
import io.v.nutz.zhgh.staffmanage.member.model.MemberChangeRecord;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
@@ -60,7 +60,7 @@ public class MemberBatchMakeController {
}
@Inject
private MemberService memberService;
private MemberCommonService memberService;
@Inject
private SysUserService sysUserService;
@@ -148,22 +148,22 @@ public class MemberBatchMakeController {
Trans.exec(() -> {
UserMode.addMemberRole(userIds);
for (String v : userIds) {
MemberChangeRecord record = new MemberChangeRecord();
record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
record.setType(UserChangeType.RESTORE.getCode());
record.setUserId(v);
record.setApplyTime(new Date());
record.setApplyOrigin(MemberChangeOrigin.SCHOOL.getCode());
record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
record.setStateId(MemberChangeApplyState.SUCCESS);
Audit audit = new Audit();
audit.setAuditPass(true);
audit.setAuditOpinion(MemberOrigin.BATCH.getDescription());
String id = auditService.insert(audit).getId();
record.setSchoolAuditId(id);
sysUserService.insert(record);
// MemberChangeRecord record = new MemberChangeRecord();
//// record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
// record.setType(UserChangeType.RESTORE.getCode());
// record.setUserId(v);
// record.setApplyTime(new Date());
//// record.setApplyOrigin(MemberChangeOrigin.SCHOOL.getCode());/////////
//// record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
//// record.setStateId(MemberChangeApplyState.SUCCESS);
//
// Audit audit = new Audit();
// audit.setAuditPass(true);
//// audit.setAuditOpinion(MemberOrigin.BATCH.getDescription());
// String id = auditService.insert(audit).getId();
//
// record.setSchoolAuditId(id);
// sysUserService.insert(record);
}
});
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.member.controller.info;
package io.v.nutz.zhgh.staffmanage.member.controller.info;
import cn.hutool.core.util.StrUtil;
import io.v.nutz.base.annontation.ViReturn;
@@ -9,15 +9,15 @@ import io.v.nutz.base.utils.Vi;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.data.constant.UserChangeType;
import io.v.nutz.zhgh.member.MemberMode;
import io.v.nutz.zhgh.member.UserMode;
import io.v.nutz.zhgh.member.WelfareMemberMode;
import io.v.nutz.zhgh.member.constant.MemberChangeApplyState;
import io.v.nutz.zhgh.member.constant.MemberChangeOrigin;
import io.v.nutz.zhgh.member.constant.MemberChangeRecordMode;
import io.v.nutz.zhgh.member.constant.MemberOrigin;
import io.v.nutz.zhgh.member.model.MemberChangeRecord;
import io.v.nutz.zhgh.member.service.MemberService;
import io.v.nutz.zhgh.staffmanage.member.MemberMode;
import io.v.nutz.zhgh.staffmanage.member.UserMode;
import io.v.nutz.zhgh.staffmanage.member.WelfareMemberMode;
//import io.v.nutz.zhgh.member.constant.MemberChangeApplyState;
import io.v.nutz.zhgh.staffmanage.member.constant.MemberChangeOrigin;
//import io.v.nutz.zhgh.member.constant.MemberChangeRecordMode;
//import io.v.nutz.zhgh.member.constant.MemberOrigin;
import io.v.nutz.zhgh.staffmanage.member.model.MemberChangeRecord;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Chain;
@@ -52,7 +52,7 @@ public class MemberDataManageController {
}
@Inject
private MemberService memberService;
private MemberCommonService memberService;
@Inject
private Dao dao;
@@ -207,7 +207,7 @@ public class MemberDataManageController {
//如果是先清空再追加
if (confirm) {
dao.update(Sys_user.class, Chain.make("member", MemberMode.NONE.getCode()).add("memberOrigin", MemberOrigin.BATCH.getCode()), Cnd.NEW());
// dao.update(Sys_user.class, Chain.make("member", MemberMode.NONE.getCode()).add("memberOrigin", MemberOrigin.BATCH.getCode()), Cnd.NEW());
}
Sql sql = Sqls.create("SELECT id from `user` $condition");
@@ -266,18 +266,18 @@ public class MemberDataManageController {
UserMode.addMemberRole(userIds);
Audit audit = new Audit();
audit.setAuditPass(true);
audit.setAuditOpinion("数据管理工具" + MemberOrigin.BATCH.getDescription());
// audit.setAuditOpinion("数据管理工具" + MemberOrigin.BATCH.getDescription());
dao.insert(audit);
List<MemberChangeRecord> insertMemberChangeRecords = Arrays.stream(userIds).map(v -> {
MemberChangeRecord record = new MemberChangeRecord();
record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
record.setType(UserChangeType.RESTORE.getCode());
record.setUserId(v);
record.setApplyTime(new Date());
record.setApplyOrigin(MemberChangeOrigin.SCHOOL.getCode());
record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
record.setStateId(MemberChangeApplyState.SUCCESS);
record.setSchoolAuditId(audit.getId());
//// record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
// record.setType(UserChangeType.RESTORE.getCode());
// record.setUserId(v);
// record.setApplyTime(new Date());
//// record.setApplyOrigin(MemberChangeOrigin.SCHOOL.getCode());
//// record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
//// record.setStateId(MemberChangeApplyState.SUCCESS);
// record.setSchoolAuditId(audit.getId());
return record;
}).collect(Collectors.toList());
dao.insert(insertMemberChangeRecords);
@@ -389,18 +389,18 @@ public class MemberDataManageController {
Audit audit = new Audit();
audit.setAuditPass(true);
audit.setAuditOpinion("数据管理工具" + MemberOrigin.BATCH.getDescription());
// audit.setAuditOpinion("数据管理工具" + MemberOrigin.BATCH.getDescription());
dao.insert(audit);
List<MemberChangeRecord> insertMemberChangeRecords = Arrays.stream(userIds).map(v -> {
MemberChangeRecord record = new MemberChangeRecord();
record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
record.setType(UserChangeType.RESTORE.getCode());
record.setUserId(v);
record.setApplyTime(new Date());
record.setApplyOrigin(MemberChangeOrigin.SCHOOL.getCode());
record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
record.setStateId(MemberChangeApplyState.SUCCESS);
record.setSchoolAuditId(audit.getId());
//// record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
// record.setType(UserChangeType.RESTORE.getCode());
// record.setUserId(v);
// record.setApplyTime(new Date());
//// record.setApplyOrigin(MemberChangeOrigin.SCHOOL.getCode());
//// record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
//// record.setStateId(MemberChangeApplyState.SUCCESS);
// record.setSchoolAuditId(audit.getId());
return record;
}).collect(Collectors.toList());
dao.insert(insertMemberChangeRecords);
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.member.controller.info;
package io.v.nutz.zhgh.staffmanage.member.controller.info;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
@@ -14,11 +14,11 @@ import io.v.nutz.base.utils.ViTool;
import io.v.nutz.sys.services.SysRoleService;
import io.v.nutz.sys.services.SysUserService;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.member.MemberMode;
import io.v.nutz.zhgh.member.UserMode;
import io.v.nutz.zhgh.member.model.MemberHistory;
import io.v.nutz.zhgh.member.service.MemberHistoryService;
import io.v.nutz.zhgh.member.service.MemberService;
import io.v.nutz.zhgh.staffmanage.member.MemberMode;
import io.v.nutz.zhgh.staffmanage.member.UserMode;
import io.v.nutz.zhgh.staffmanage.member.model.MemberHistory;
import io.v.nutz.zhgh.staffmanage.member.service.MemberHistoryService;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
@@ -60,7 +60,7 @@ public class MemberGroupInfoController {
}
@Inject
private MemberService memberService;
private MemberCommonService memberService;
@Inject
private SysUserService sysUserService;
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.member.controller.info;
package io.v.nutz.zhgh.staffmanage.member.controller.info;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.dao.CndPlus;
@@ -10,10 +10,11 @@ import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.data.constant.UserChangeType;
import io.v.nutz.zhgh.data.model.UserHistory;
import io.v.nutz.zhgh.data.service.HistoryUserService;
import io.v.nutz.zhgh.member.UserMode;
import io.v.nutz.zhgh.member.constant.*;
import io.v.nutz.zhgh.member.model.MemberChangeRecord;
import io.v.nutz.zhgh.member.service.MemberService;
import io.v.nutz.zhgh.staffmanage.member.UserMode;
//import io.v.nutz.zhgh.member.constant.*;
import io.v.nutz.zhgh.staffmanage.member.constant.MemberChangeOrigin;
import io.v.nutz.zhgh.staffmanage.member.model.MemberChangeRecord;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
@@ -50,7 +51,7 @@ public class MemberMakeController {
}
@Inject
private MemberService memberService;
private MemberCommonService memberService;
@Inject
private SysUserService sysUserService;
@@ -100,7 +101,7 @@ public class MemberMakeController {
""");
CndPlus cnd = CndPlus.create();
cnd.and("memberOrigin", "=", MemberOrigin.MAKE.getCode());
// cnd.and("memberOrigin", "=", MemberOrigin.MAKE.getCode());
cnd.andEX("unionid", "=", unionId);
cnd.andEX("unitid", "=", unitId);
@@ -111,9 +112,9 @@ public class MemberMakeController {
cnd.andEX("campusName", "=", campus);
List<Integer> status = new ArrayList<>();
status.add(MemberStatus.NORMAL.getCode());
status.add(MemberStatus.TURN_IN.getCode());
status.add(MemberStatus.RESTORE.getCode());
// status.add(MemberStatus.NORMAL.getCode());
// status.add(MemberStatus.TURN_IN.getCode());
// status.add(MemberStatus.RESTORE.getCode());
if (memberStatus == null || status.contains(memberStatus)) {
cnd.andEX("member", "=", 1);
@@ -148,7 +149,7 @@ public class MemberMakeController {
@RequiresPermissions("member.info.make")
public Object joinMemberFamily(Sys_user sys_user) {
memberService.transactional(() -> {
sysUserService.update(Chain.make("memberOrigin", MemberOrigin.MAKE.getCode()), Cnd.where("id", "=", sys_user.getId()));
// sysUserService.update(Chain.make("memberOrigin", MemberOrigin.MAKE.getCode()), Cnd.where("id", "=", sys_user.getId()));
UserMode.addMemberRole(sys_user.getId());
@@ -157,26 +158,26 @@ public class MemberMakeController {
UserHistory userHistory = new UserHistory();
BeanUtils.copyProperties(new_user, userHistory);
userHistory.setChangeTime(new Date());
userHistory.setChangeType(UserChangeType.NEW.getCode());
// userHistory.setChangeType(UserChangeType.NEW.getCode());
historyUserService.insert(userHistory);
//添加到会员变更表
MemberChangeRecord record = new MemberChangeRecord();
record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
record.setType(UserChangeType.NEW.getCode());
record.setUserId(new_user.getId());
record.setCurrentUnitId(sys_user.getUnitid());
record.setCurrentUnionId(sys_user.getUnionid());
record.setApplyTime(new Date());
// record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
// record.setType(UserChangeType.NEW.getCode());
// record.setUserId(new_user.getId());
// record.setCurrentUnitId(sys_user.getUnitid());
// record.setCurrentUnionId(sys_user.getUnionid());
// record.setApplyTime(new Date());
if (ShiroUtil.hasAnyRoles("sysadmin,A06,H03")) {
record.setApplyOrigin(MemberChangeOrigin.SCHOOL.getCode());
// record.setApplyOrigin(MemberChangeOrigin.SCHOOL.getCode());
} else if (ShiroUtil.hasAnyRoles("H04")) {
record.setApplyOrigin(MemberChangeOrigin.UNION.getCode());
// record.setApplyOrigin(MemberChangeOrigin.UNION.getCode());
} else {
record.setApplyOrigin(MemberChangeOrigin.UNION_GROUP.getCode());
// record.setApplyOrigin(MemberChangeOrigin.UNION_GROUP.getCode());
}
record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
record.setStateId(MemberChangeApplyState.SUCCESS);
// record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
// record.setStateId(MemberChangeApplyState.SUCCESS);
historyUserService.insert(record);
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.member.controller.info;
package io.v.nutz.zhgh.staffmanage.member.controller.info;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.ioc.loader.annotation.IocBean;
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.member.controller.inquire;
package io.v.nutz.zhgh.staffmanage.member.controller.inquire;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
@@ -7,7 +7,7 @@ import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.base.utils.ViTool;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.member.service.MemberService;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
@@ -33,7 +33,7 @@ import java.util.stream.Collectors;
public class MemberAnalysisController {
@Inject
private MemberService memberService;
private MemberCommonService memberService;
@At("")
@Ok("beetl:/platform/member/inquire/Analysis.html")
@@ -1,8 +1,8 @@
package io.v.nutz.zhgh.member.controller.inquire;
package io.v.nutz.zhgh.staffmanage.member.controller.inquire;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.utils.DateUtil;
import io.v.nutz.zhgh.member.service.MemberService;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.dao.Sqls;
import org.nutz.dao.entity.Record;
@@ -35,7 +35,7 @@ public class MemberDataBoardController {
}
@Inject
private MemberService memberService;
private MemberCommonService memberService;
/**
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.member.controller.inquire;
package io.v.nutz.zhgh.staffmanage.member.controller.inquire;
import cn.hutool.core.util.StrUtil;
import io.v.nutz.base.annontation.ViReturn;
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.member.controller.inquire;
package io.v.nutz.zhgh.staffmanage.member.controller.inquire;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.annotation.Excel;
@@ -13,9 +13,9 @@ import io.v.nutz.base.utils.Vi;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.sys.services.SysUserService;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.member.constant.MemberStatus;
import io.v.nutz.zhgh.member.service.MemberService;
import io.v.nutz.zhgh.member.utils.MemberUtils;
//import io.v.nutz.zhgh.member.constant.MemberStatus;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService;
import io.v.nutz.zhgh.staffmanage.member.utils.MemberUtils;
import lombok.Data;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -57,7 +57,7 @@ public class MemberInquireIntegrateController {
}
@Inject
private MemberService memberService;
private MemberCommonService memberService;
@Inject
private SysUserService sysUserService;
@@ -123,9 +123,9 @@ public class MemberInquireIntegrateController {
}
List<Integer> status = new ArrayList<>();
status.add(MemberStatus.NORMAL.getCode());
status.add(MemberStatus.TURN_IN.getCode());
status.add(MemberStatus.RESTORE.getCode());
// status.add(MemberStatus.NORMAL.getCode());
// status.add(MemberStatus.TURN_IN.getCode());
// status.add(MemberStatus.RESTORE.getCode());
// if (memberStatus != null && memberStatus.length > 0) {
// cnd.andEX("memberStatus", "in", memberStatus);
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.member.controller.inquire;
package io.v.nutz.zhgh.staffmanage.member.controller.inquire;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.member.controller.inquire;
package io.v.nutz.zhgh.staffmanage.member.controller.inquire;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
@@ -8,7 +8,7 @@ import io.v.nutz.base.utils.Vi;
import io.v.nutz.sys.models.Sys_dict;
import io.v.nutz.sys.services.SysDictService;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.member.service.MemberService;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.dao.Sqls;
@@ -32,7 +32,7 @@ import java.util.stream.Collectors;
public class MemberUserTypeController {
@Inject
private MemberService memberService;
private MemberCommonService memberService;
@Inject
private SysDictService sysDictService;
@@ -1,13 +1,13 @@
package io.v.nutz.zhgh.member.handle;
package io.v.nutz.zhgh.staffmanage.member.handle;
import io.v.nutz.base.utils.ViResource;
import io.v.nutz.sys.models.User;
import io.v.nutz.sys.services.SysLocalProcessService;
import io.v.nutz.sys.services.impl.SysLocalProcessServiceImpl;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.member.model.MemberApplyRecord;
import io.v.nutz.zhgh.member.service.MemberService;
import io.v.nutz.zhgh.member.service.impl.MemberServiceImpl;
import io.v.nutz.zhgh.staffmanage.member.model.MemberApplyRecord;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService;
import io.v.nutz.zhgh.staffmanage.member.service.impl.MemberCommonServiceImpl;
import lombok.Getter;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
@@ -18,6 +18,14 @@ import org.nutz.lang.util.NutMap;
import java.util.List;
import java.util.stream.Collectors;
/**
* @version 1.0
* @Author zzr
* @nameMemberApplyController
* @Date 2025/1/20 19:01
* @注释 会员申请流程
*/
@Getter
public enum MemberApplyToDoHandler {
@@ -28,54 +36,41 @@ public enum MemberApplyToDoHandler {
@Override
public void exec(MemberApplyRecord record, NutMap extra) {
User user = dao.fetch(User.class, Cnd.where("id", "=", record.getUserId()));
// Sql sql = Sqls.fetchString(Sqls.create("select username from sys_user where id = @id").setParam("id", record.getUserId()).toString());
// dao.execute(sql);
// String username = sql.getString();
localProcessService.startProcess(
user.getUnionname() + "" + user.getUsername() + ")【会员入会】申请",
"member_apply_record@" + record.getId(),
"【会员入会申请】" + user.getUsername(),
"MEMBER_APPLY@" + record.getId(),
"",
record.getUserId(),
"/platform/member/apply/submit",
"/platform/member/apply/submit"
"/platform/member/apply",
"/platform/member/apply/h5"
);
}
},
/**
* 审核拒绝
*/
REFUSE_UNION_TASK(){
@Override
public void exec(MemberApplyRecord record, NutMap extra) {
localProcessService.refuseProcess("member_apply_record@" + record.getId(),extra.getString("nodeName"));
}
},
/**
* 审核退回重新修改申请
* 审核拒绝重新修改申请
*/
CREATE_APPLY_RE_MODIFY_TASK() {
@Override
public void exec(MemberApplyRecord record, NutMap extra) {
String nodeName = extra.getString("nodeName");
Sql sql = Sqls.fetchString(Sqls.create("select loginname from sys_user where id = @id").setParam("id", record.getUserId()).toString());
dao.execute(sql);
String loginname = sql.getString();
localProcessService.createTask(
"member_apply_record@" + record.getId(),
"member_apply_record_back",
nodeName,
"MEMBER_APPLY@" + record.getId(),
"MEMBER_APPLY_BACK",
"退回重新修改",
ShiroUtil.getUserId(),
List.of(loginname),
"/platform/member/apply/submit",
"/platform/member/apply/submit",
"/platform/member/apply/submit",
"/platform/member/apply/submit"
"/platform/member/apply",
"/platform/member/apply",
"/platform/member/apply",
"/platform/member/apply"
);
localProcessService.updateProcessNodeName("member_apply_record@" + record.getId(), nodeName);
localProcessService.updateProcessNodeName("MEMBER_APPLY@" + record.getId(), "退回重新修改");
}
},
@@ -87,36 +82,79 @@ public enum MemberApplyToDoHandler {
public void exec(MemberApplyRecord record, NutMap extra) {
String nodeName = extra.getString("nodeName");
localProcessService.completeTask(
"member_apply_record_back",
"member_apply_record@" + record.getId(),
"MEMBER_APPLY_BACK",
"MEMBER_APPLY@" + record.getId(),
ShiroUtil.getUserId(),
nodeName
);
localProcessService.updateProcessNodeName("member_apply_record@" + record.getId(), nodeName);
localProcessService.updateProcessNodeName("MEMBER_APPLY@" + record.getId(), nodeName);
}
},
/**
* 创建校工会任务
*/
CREATE_SCHOOL_TASK() {
@Override
public void exec(MemberApplyRecord record, NutMap extra) {
// 获取校工会会员管理员
List<String> schoolLeaderLoginNames = memberService.getSchoolOrBranchUnionMemberAdminLoginNames("school", record.getUserId());
localProcessService.createTask(
"MEMBER_APPLY@" + record.getId(),
"MEMBER_APPLY_SCHOOL_AUDIT",
"校工会审核",
ShiroUtil.getUserId(),
schoolLeaderLoginNames,
"/platform/member/apply/audit/school",
"/platform/member/apply/audit/school",
"/platform/member/apply/audit/school",
"/platform/member/apply/audit/school"
);
localProcessService.updateProcessNodeName("MEMBER_APPLY@" + record.getId(), "校工会审核");
}
},
/**
* 校工会完成
*/
COMPLETE_SCHOOL_TASK() {
@Override
public void exec(MemberApplyRecord record, NutMap extra) {
String nodeName = extra.getString("nodeName");
localProcessService.completeTask(
"MEMBER_APPLY_SCHOOL_AUDIT",
"MEMBER_APPLY@" + record.getId(),
ShiroUtil.getUserId(),
nodeName
);
localProcessService.updateProcessNodeName("MEMBER_APPLY@" + record.getId(), nodeName);
}
},
/**
* 创建分工会任务
*/
CREATE_UNION_TASK() {
@Override
public void exec(MemberApplyRecord record, NutMap extra) {
List<NutMap> mapList = extra.getAsList("unionLeader", NutMap.class);
List<String> unionLeader = mapList.stream().map(v -> v.getString("loginname")).collect(Collectors.toList());
List<String> unionLeaderLoginNames = extra.getAsList("unionLeaderLoginNames", String.class);
localProcessService.createTask(
"member_apply_record@" + record.getId(),
"member_apply_union_audit",
"基层工会审核",
"MEMBER_APPLY@" + record.getId(),
"MEMBER_APPLY_UNION_AUDIT",
"工会审核",
ShiroUtil.getUserId(),
unionLeader,
unionLeaderLoginNames,
"/platform/member/apply/audit/union",
"/platform/member/apply/audit/union",
"/platform/member/apply/audit/union",
"/platform/member/apply/audit/union"
);
localProcessService.updateProcessNodeName("member_apply_record@" + record.getId(), "基层工会审核");
localProcessService.updateProcessNodeName("MEMBER_APPLY@" + record.getId(), "工会审核");
}
},
@@ -128,55 +166,26 @@ public enum MemberApplyToDoHandler {
public void exec(MemberApplyRecord record, NutMap extra) {
String nodeName = extra.getString("nodeName");
localProcessService.completeTask(
"member_apply_union_audit",
"member_apply_record@" + record.getId(),
"MEMBER_APPLY_UNION_AUDIT",
"MEMBER_APPLY@" + record.getId(),
ShiroUtil.getUserId(),
nodeName
);
localProcessService.updateProcessNodeName("member_apply_record@" + record.getId(), nodeName);
localProcessService.updateProcessNodeName("MEMBER_APPLY@" + record.getId(), nodeName);
}
},
/**
* 创建校工会任务
* 审核拒绝
*/
CREATE_SCHOOL_TASK() {
REFUSE_UNION_TASK(){
@Override
public void exec(MemberApplyRecord record, NutMap extra) {
List<NutMap> mapList = extra.getAsList("schoolLeader", NutMap.class);
List<String> schoolLeader = mapList.stream().map(v -> v.getString("loginname")).collect(Collectors.toList());
localProcessService.createTask(
"member_apply_record@" + record.getId(),
"member_apply_school_audit",
"校工会审核",
ShiroUtil.getUserId(),
schoolLeader,
"/platform/member/apply/audit/school",
"/platform/member/apply/audit/school",
"/platform/member/apply/audit/school",
"/platform/member/apply/audit/school"
);
localProcessService.updateProcessNodeName("member_apply_record@" + record.getId(), "校工会审核");
localProcessService.refuseProcess("MEMBER_APPLY@" + record.getId(),extra.getString("nodeName"));
}
},
/**
* 校工会完成
*/
COMPLETE_SCHOOL_TASK() {
@Override
public void exec(MemberApplyRecord record, NutMap extra) {
String nodeName = extra.getString("nodeName");
localProcessService.completeTask(
"member_apply_school_audit",
"member_apply_record@" + record.getId(),
ShiroUtil.getUserId(),
nodeName
);
localProcessService.updateProcessNodeName("member_apply_record@" + record.getId(), nodeName);
}
},
/**
* 流程结束
@@ -184,7 +193,8 @@ public enum MemberApplyToDoHandler {
COMPLETE_PROCESS() {
@Override
public void exec(MemberApplyRecord record, NutMap extra) {
localProcessService.completeProcess("member_apply_record@" + record.getId());
localProcessService.completeProcess("MEMBER_APPLY@" + record.getId());
localProcessService.updateProcessNodeName("MEMBER_APPLY@" + record.getId(), "审核通过");
}
};
@@ -192,6 +202,6 @@ public enum MemberApplyToDoHandler {
public abstract void exec(MemberApplyRecord record, NutMap extra);
public Dao dao = ViResource.dao;
public MemberService memberService = ViResource.ioc.get(MemberServiceImpl.class);
public MemberCommonService memberService = ViResource.ioc.get(MemberCommonServiceImpl.class);
public SysLocalProcessService localProcessService = ViResource.ioc.get(SysLocalProcessServiceImpl.class);
}
@@ -1,15 +1,13 @@
package io.v.nutz.zhgh.member.handle;
package io.v.nutz.zhgh.staffmanage.member.handle;
import io.v.nutz.base.utils.Roles;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.base.utils.ViResource;
import io.v.nutz.sys.models.User;
import io.v.nutz.sys.services.SysLocalProcessService;
import io.v.nutz.sys.services.impl.SysLocalProcessServiceImpl;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.member.model.MemberChangeRecord;
import io.v.nutz.zhgh.member.service.MemberService;
import io.v.nutz.zhgh.member.service.impl.MemberServiceImpl;
import io.v.nutz.zhgh.staffmanage.member.model.MemberChangeRecord;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService;
import io.v.nutz.zhgh.staffmanage.member.service.impl.MemberCommonServiceImpl;
import lombok.Getter;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
@@ -31,12 +29,9 @@ public enum MemberChangeToDoHandler {
@Override
public void exec(MemberChangeRecord record, NutMap extra) {
User user = dao.fetch(User.class, Cnd.where("id", "=", record.getUserId()));
// Sql sql = Sqls.fetchString(Sqls.create("select username from sys_user where id = @id").setParam("id", record.getUserId()).toString());
// dao.execute(sql);
// String username = sql.getString();
localProcessService.startProcess(
user.getUnionname() + "" + user.getUsername() + ")【会员变更】申请",
"member_change_record@" + record.getId(),
"【会员变更】" + user.getUsername(),
"MEMBER_CHANGE@" + record.getId(),
"",
record.getUserId(),
"/platform/member/change/apply",
@@ -51,7 +46,7 @@ public enum MemberChangeToDoHandler {
REFUSE_UNION_TASK(){
@Override
public void exec(MemberChangeRecord record, NutMap extra) {
localProcessService.refuseProcess("member_change_record@" + record.getId(),extra.getString("nodeName"));
localProcessService.refuseProcess("MEMBER_CHANGE@" + record.getId(),extra.getString("nodeName"));
}
},
@@ -67,8 +62,8 @@ public enum MemberChangeToDoHandler {
String loginname = sql.getString();
localProcessService.createTask(
"member_change_record@" + record.getId(),
"member_change_record_back",
"MEMBER_CHANGE@" + record.getId(),
"MEMBER_CHANGE_BACK",
nodeName,
ShiroUtil.getUserId(),
List.of(loginname),
@@ -78,7 +73,7 @@ public enum MemberChangeToDoHandler {
"/platform/member/change/apply"
);
localProcessService.updateProcessNodeName("member_change_record@" + record.getId(), nodeName);
localProcessService.updateProcessNodeName("MEMBER_CHANGE@" + record.getId(), nodeName);
}
},
@@ -90,13 +85,13 @@ public enum MemberChangeToDoHandler {
public void exec(MemberChangeRecord record, NutMap extra) {
String nodeName = extra.getString("nodeName");
localProcessService.completeTask(
"member_change_record_back",
"member_change_record@" + record.getId(),
"MEMBER_CHANGE_BACK",
"MEMBER_CHANGE@" + record.getId(),
ShiroUtil.getUserId(),
nodeName
);
localProcessService.updateProcessNodeName("member_change_record@" + record.getId(), nodeName);
localProcessService.updateProcessNodeName("MEMBER_CHANGE@" + record.getId(), nodeName);
}
},
@@ -106,21 +101,20 @@ public enum MemberChangeToDoHandler {
CREATE_UNION_TASK() {
@Override
public void exec(MemberChangeRecord record, NutMap extra) {
// List<String> unionLeader = Vi.getUnionLeader(record.getUserId());
List<String> branchLeaders = memberService.getSchoolOrBranchUnionMemberAdminLoginNames("branch", record.getUserId());
localProcessService.createTask(
"MEMBER_CHANGE@" + record.getId(),
"MEMBER_CHANGE_BRANCH_UNION_AUDIT",
"分工会审核",
ShiroUtil.getUserId(),
branchLeaders,
"/platform/member/change/audit/union",
"/platform/member/change/audit/union",
"/platform/member/change/audit/union",
"/platform/member/change/audit/union"
);
// localProcessService.createTask(
// "member_change_record@" + record.getId(),
// "member_change_record_union_audit",
// "基层工会审核",
// ShiroUtil.getUserId(),
// unionLeader,
// "/platform/member/change/audit/union",
// "/platform/member/change/audit/union",
// "/platform/member/change/audit/union",
// "/platform/member/change/audit/union"
// );
localProcessService.updateProcessNodeName("member_change_record@" + record.getId(), "基层工会审核");
localProcessService.updateProcessNodeName("MEMBER_CHANGE@" + record.getId(), "分工会审核");
}
},
@@ -133,13 +127,13 @@ public enum MemberChangeToDoHandler {
public void exec(MemberChangeRecord record, NutMap extra) {
String nodeName = extra.getString("nodeName");
localProcessService.completeTask(
"member_change_record_union_audit",
"member_change_record@" + record.getId(),
"MEMBER_CHANGE_BRANCH_UNION_AUDIT",
"MEMBER_CHANGE@" + record.getId(),
ShiroUtil.getUserId(),
nodeName
);
localProcessService.updateProcessNodeName("member_change_record@" + record.getId(), nodeName);
localProcessService.updateProcessNodeName("MEMBER_CHANGE@" + record.getId(), nodeName);
}
},
@@ -149,32 +143,20 @@ public enum MemberChangeToDoHandler {
CREATE_SCHOOL_TASK() {
@Override
public void exec(MemberChangeRecord record, NutMap extra) {
// Sql sql = Sqls.create("""
// SELECT
// u.loginname
// FROM
// sys_user_role sur
// LEFT JOIN sys_user u ON u.id = sur.userid
// WHERE
// sur.roleId = @roleId
// GROUP BY
// sur.userId
// """).setParam("roleId", Roles.H03);
// List<NutMap> list = (List<NutMap>) Daos.query(dao, sql.toString(), Sqls.callback.maps());
// List<String> schoolLeader = list.stream().map(v -> v.getString("loginname")).collect(Collectors.toList());
// localProcessService.createTask(
// "member_change_record@" + record.getId(),
// "member_change_record_school_audit",
// "校工会审核",
// ShiroUtil.getUserId(),
// schoolLeader,
// "/platform/member/change/audit/school",
// "/platform/member/change/audit/school",
// "/platform/member/change/audit/school",
// "/platform/member/change/audit/school"
// );
//
// localProcessService.updateProcessNodeName("member_change_record@" + record.getId(), "校工会审核");
List<String> schoolLeaders = memberService.getSchoolOrBranchUnionMemberAdminLoginNames("school", record.getUserId());
localProcessService.createTask(
"MEMBER_CHANGE@" + record.getId(),
"MEMBER_CHANGE_SCHOOL_UNION_AUDIT",
"校工会审核",
ShiroUtil.getUserId(),
schoolLeaders,
"/platform/member/change/audit/school",
"/platform/member/change/audit/school",
"/platform/member/change/audit/school",
"/platform/member/change/audit/school"
);
localProcessService.updateProcessNodeName("MEMBER_CHANGE@" + record.getId(), "校工会审核");
}
},
@@ -186,12 +168,12 @@ public enum MemberChangeToDoHandler {
public void exec(MemberChangeRecord record, NutMap extra) {
String nodeName = extra.getString("nodeName");
localProcessService.completeTask(
"member_change_record_school_audit",
"member_change_record@" + record.getId(),
"MEMBER_CHANGE_SCHOOL_UNION_AUDIT",
"MEMBER_CHANGE@" + record.getId(),
ShiroUtil.getUserId(),
nodeName
);
localProcessService.updateProcessNodeName("member_change_record@" + record.getId(), nodeName);
localProcessService.updateProcessNodeName("MEMBER_CHANGE@" + record.getId(), nodeName);
}
},
@@ -201,7 +183,8 @@ public enum MemberChangeToDoHandler {
COMPLETE_PROCESS() {
@Override
public void exec(MemberChangeRecord record, NutMap extra) {
localProcessService.completeProcess("member_change_record@" + record.getId());
localProcessService.completeProcess("MEMBER_CHANGE@" + record.getId());
localProcessService.updateProcessNodeName("MEMBER_CHANGE@" + record.getId(), "审核通过");
}
},
@@ -212,7 +195,7 @@ public enum MemberChangeToDoHandler {
DELETE_PROCESS_AND_TASK() {
@Override
public void exec(MemberChangeRecord record, NutMap extra) {
localProcessService.deleteProcessInstance("member_change_record@" + record.getId());
localProcessService.deleteProcessInstance("MEMBER_CHANGE@" + record.getId());
}
};
@@ -220,6 +203,6 @@ public enum MemberChangeToDoHandler {
public abstract void exec(MemberChangeRecord record, NutMap extra);
public Dao dao = ViResource.dao;
public MemberService memberService = ViResource.ioc.get(MemberServiceImpl.class);
public MemberCommonService memberService = ViResource.ioc.get(MemberCommonServiceImpl.class);
public SysLocalProcessService localProcessService = ViResource.ioc.get(SysLocalProcessServiceImpl.class);
}
@@ -1,6 +1,6 @@
package io.v.nutz.zhgh.member.job;
package io.v.nutz.zhgh.staffmanage.member.job;
import io.v.nutz.zhgh.member.service.MemberHistoryService;
import io.v.nutz.zhgh.staffmanage.member.service.MemberHistoryService;
import lombok.extern.slf4j.Slf4j;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
@@ -0,0 +1,220 @@
package io.v.nutz.zhgh.staffmanage.member.model;
import cn.hutool.json.JSONObject;
import lombok.Data;
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_apply_record")
public class MemberApplyRecord {
@Name
@Comment("ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
@PrevInsert(uu32 = true)
private String id;
@Column
@Comment("用户id")
@ColDefine(type = ColType.VARCHAR, width = 32)
@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("出生日期")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String birthday;
@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 = 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.MYSQL_JSON)
private List<JSONObject> families;
@Column
@Comment("个人简况")
@ColDefine(type = ColType.VARCHAR, customType = "text")
private String vita;
@Column
@Comment("备注")
@ColDefine(type = ColType.VARCHAR, width = 255)
private String notes;
@Column
@Comment("当前状态")
@ColDefine(type = ColType.INT)
private Integer applyStateId;
@Column
@Comment("校工会审核id")
@ColDefine(type = ColType.VARCHAR, width = 255)
private String schoolUnionAuditId;
@Column
@Comment("分工会审核id")
@ColDefine(type = ColType.VARCHAR, width = 255)
private String branchUnionAuditId;
@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 allocationUnionId;
}
@@ -0,0 +1,238 @@
package io.v.nutz.zhgh.staffmanage.member.model;
import cn.hutool.json.JSONObject;
import lombok.Data;
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")
public class MemberChangeRecord {
@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.MYSQL_JSON)
private List<JSONObject> families;
@Column
@Comment("个人简况")
@ColDefine(type = ColType.VARCHAR, customType = "text")
private String vita;
@Column
@Comment("备注")
@ColDefine(type = ColType.VARCHAR, width = 255)
private String notes;
@Column
@Comment("当前状态")
@ColDefine(type = ColType.INT)
private Integer applyStateId;
@Column
@Comment("校工会审核id")
@ColDefine(type = ColType.VARCHAR, width = 255)
private String schoolUnionAuditId;
@Column
@Comment("分工会审核id")
@ColDefine(type = ColType.VARCHAR, width = 255)
private String branchUnionAuditId;
@Column
@Comment("是否加入会员组别")
@ColDefine(type = ColType.BOOLEAN)
private Boolean isJoinActivityMemberScope;
@Column
@Comment("是否退出会员组别")
@ColDefine(type = ColType.BOOLEAN)
private Boolean isExitActivityMemberScope;
@Column
@Comment("是否加入福利项目")
@ColDefine(type = ColType.BOOLEAN)
private Boolean isJoinWelfareProject;
@Column
@Comment("福利项目id")
@ColDefine(type = ColType.VARCHAR, width = 255)
private String welfareProjectId;
@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;
private Boolean edit;
}
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.member.model;
package io.v.nutz.zhgh.staffmanage.member.model;
import cn.wizzer.framework.base.model.BaseModel;
import lombok.Data;
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.member.model;
package io.v.nutz.zhgh.staffmanage.member.model;
import cn.wizzer.framework.base.model.BaseModel;
import lombok.Data;
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.member.model;
package io.v.nutz.zhgh.staffmanage.member.model;
import cn.wizzer.framework.base.model.BaseModel;
import lombok.Data;
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.member.model;
package io.v.nutz.zhgh.staffmanage.member.model;
import io.v.nutz.sys.models.Sys_user;
import lombok.Data;
@@ -0,0 +1,54 @@
package io.v.nutz.zhgh.staffmanage.member.param.pageForm;
import cn.hutool.core.util.StrUtil;
import io.v.nutz.base.query.PageForm;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.Cnd;
import org.nutz.dao.util.cri.SqlExpressionGroup;
/**
* @version 1.0
* @Author zzr
* @nameMemberApplyPageForm
* @Date 2025/2/12 16:09
* @注释 会员入会查询表单
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class MemberApplyPageForm extends PageForm {
// 是否审核
private Boolean audit;
// 工会id
private String unionId;
// 单位id
private String unitId;
// 在职状态
private String userState;
// 人员类型
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 + "personType", "=", this.getPersonType());
}
}
@@ -0,0 +1,54 @@
package io.v.nutz.zhgh.staffmanage.member.param.pageForm;
import cn.hutool.core.util.StrUtil;
import io.v.nutz.base.query.PageForm;
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 {
// 是否审核
private Boolean audit;
// 工会id
private String unionId;
// 单位id
private String unitId;
// 在职状态
private String userState;
// 人员类型
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 + "personType", "=", this.getPersonType());
}
}
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.member.service;
package io.v.nutz.zhgh.staffmanage.member.service;
import io.v.nutz.base.service.ViService;
@@ -0,0 +1,99 @@
package io.v.nutz.zhgh.staffmanage.member.service;
import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.dao.CndPlus;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.ViService;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.sys.models.User;
import io.v.nutz.zhgh.staffmanage.member.model.MemberChangeRecord;
import org.nutz.lang.util.NutMap;
import java.util.List;
import java.util.Map;
/**
* Todo
*
* @author: 1V
* @date: 2021/1/25
* @since 1.0
*/
public interface MemberCommonService extends ViService<Sys_user> {
/**
* 会员变更记录
*
* @param userId
* @return
*/
List<NutMap> memberChangeRecords(String userId);
/**
* 会员变更记录
*
* @param cnd
* @return
*/
Pagination memberChangeRecords(PageForm pageForm, CndPlus cnd);
/**
* 某会员历史变更记录
* @param userId
* @return
*/
List<NutMap> memberHistoryRecordsByUserId(String userId);
/**
* 获取校工会或分工会会员管理员的工号
* queryType 传 school 查询校工会会员管理员工号,branch 查询分工会会员管理员工号
* @return
*/
List<String> getSchoolOrBranchUnionMemberAdminLoginNames(String queryType, String userId);
NutMap getDictAllowChangeFields();
/**
* 获取变更详情
* @param recordId 变更记录id
* @return
*/
List<NutMap> getChangeInfos(String recordId);
List<NutMap> getChangeInfos(MemberChangeRecord record);
/**
* 比较有哪些变更类型
* @param record
* @param user
* @return
*/
List<String> compareChangeType(MemberChangeRecord record, User user);
/**
* 存储比较变更信息并更新会员信息
* @param recordId
*/
void compareChangeInfoAndUpdateMember(String recordId);
/**
* 获取会员的变更信息
* @param userId
* @return
*/
List<NutMap> getAllChangeInfo(String userId);
/**
* 比较两个对象,并记录变更的字段工具
*
* @param newMap 新数据
* @param sourceMap 原数据
* @param fieldsMap 变更字段
* @param changeList 变更集合
*/
void extractChange(NutMap newMap, NutMap sourceMap, String fieldName, Map<String, String> fieldsMap, List<NutMap> changeList);
}
@@ -1,7 +1,7 @@
package io.v.nutz.zhgh.member.service;
package io.v.nutz.zhgh.staffmanage.member.service;
import io.v.nutz.base.service.ViService;
import io.v.nutz.zhgh.member.model.MemberHistory;
import io.v.nutz.zhgh.staffmanage.member.model.MemberHistory;
/**
* Todo
@@ -1,7 +1,7 @@
package io.v.nutz.zhgh.member.service.impl;
package io.v.nutz.zhgh.staffmanage.member.service.impl;
import io.v.nutz.base.service.impl.ViServiceImpl;
import io.v.nutz.zhgh.member.service.MemberCheckPersonalService;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCheckPersonalService;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.IocBean;
@@ -0,0 +1,442 @@
package io.v.nutz.zhgh.staffmanage.member.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HtmlUtil;
import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.dao.CndPlus;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.impl.ViServiceImpl;
import io.v.nutz.base.utils.Roles;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.sys.models.*;
import io.v.nutz.sys.services.SysDictService;
import io.v.nutz.sys.services.SysRoleService;
import io.v.nutz.sys.services.SysUserService;
import io.v.nutz.zhgh.activity.models.ActivityUserScope;
import io.v.nutz.zhgh.data.model.UserHistory;
import io.v.nutz.zhgh.staffmanage.member.constant.MemberChangeOrigin;
import io.v.nutz.zhgh.staffmanage.member.constant.MemberChangeType;
import io.v.nutz.zhgh.staffmanage.member.model.MemberChangeRecord;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService;
import io.v.nutz.zhgh.staffmanage.specialstaff.model.SpecialStaff;
import io.v.nutz.zhgh.welfare.model.WelfareList;
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.random.R;
import org.nutz.lang.util.NutMap;
import org.nutz.plugins.wkcache.annotation.CacheDefaults;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author 1V
*/
@Slf4j
@IocBean(args = {"refer:dao"})
@CacheDefaults(cacheName = "member")
public class MemberCommonServiceImpl extends ViServiceImpl<Sys_user> implements MemberCommonService {
public MemberCommonServiceImpl(Dao dao) {
super(dao);
}
@Inject
private SysDictService sysDictService;
@Inject
private SysUserService sysUserService;
@Inject
private SysRoleService sysRoleService;
private final String MEMBER_CHANGE_RECORDS = """
SELECT
mcr.*,
u.unitname AS userUnitName,
u.unionname AS userUnionName,
u.threeUnitName AS userThreeUnitName,
u.unionGroupName AS userUnionGroupName,
state.stateId,
state.stateName,
state.stateColor
FROM
member_change_record mcr
LEFT JOIN `user` u ON mcr.userId = u.id
LEFT JOIN audit_state state ON mcr.applyStateId = state.stateId
$condition
""";
@Override
public List<NutMap> memberChangeRecords(String userId) {
Sql sql = Sqls.create(MEMBER_CHANGE_RECORDS);
sql.setCondition(Cnd.where("mcr.userId", "=", userId).desc("mcr.applyTime"));
return listMap(sql);
}
@Override
public Pagination memberChangeRecords(PageForm pageForm, CndPlus cnd) {
Sql sql = Sqls.create(MEMBER_CHANGE_RECORDS).setCondition(cnd);
return list(pageForm, sql);
}
@Override
public List<NutMap> memberHistoryRecordsByUserId(String userId) {
Sql sql = Sqls.create("""
SELECT
his.id,
his.changeTime,
his.loginname,
his.username,
his.mobile,
his.birthday,
his.userState,
his.personType,
his.sex,
his.changeTypes,
his.changeOrigin,
his.changeOperator,
his.memberChangeRecordId,
his.changeReason,
his.lastHistoryId,
u.unitname,
u.unionname,
mcr.stateId,
state.stateName,
state.stateColor
FROM
`user_history` his
LEFT JOIN member_change_record mcr ON mcr.id = his.memberChangeRecordId
LEFT JOIN audit_state state ON mcr.stateId = state.stateId
LEFT JOIN `user` u ON u.loginname = his.loginname
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("u.id", "=", userId);
cnd.desc("his.changeTime");
sql.setCondition(cnd);
return listMap(sql);
}
@Override
public List<String> getSchoolOrBranchUnionMemberAdminLoginNames(String queryType, String userId) {
Sql sql = Sqls.create("""
SELECT
u.loginname
FROM
`sys_user_role` userRole
LEFT JOIN sys_role role ON role.id = userRole.roleId
LEFT JOIN `user` u ON u.id = userRole.userId
$condition
""");
Cnd cnd = Cnd.NEW();
if ("school".equals(queryType)) {
cnd.and("role.`code`", "=", "SchoolUnionMemberAdmin");
} else {
Sql sqlUnionId = Sqls.fetchString(Sqls.create("select unionid from `user` where id = @id").setParam("id", userId).toString());
dao().execute(sqlUnionId);
String unionid = sql.getString();
cnd.and("u.unionid", "=",unionid);
cnd.and("role.`code`", "=", "BranchUnionMemberAdmin");
}
sql.setCondition(cnd);
sql.setCallback(Sqls.callback.strList());
dao().execute(sql);
return sql.getList(String.class);
}
@Override
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");
allowChangeFieldNames.add("welfareMember");
Map<String, String> dictMap = dictList.stream().collect(Collectors.toMap(Sys_dict::getCode, Sys_dict::getName));
dictMap.put("member", "会员状态");
dictMap.put("welfareMember", "福利会员状态");
return NutMap.NEW().addv("allowChangeFieldNames", allowChangeFieldNames).addv("dictMap", dictMap);
}
/**
* 获取变更记录详情
*
* @param recordId 变更记录id
* @return
*/
@Override
public List<NutMap> getChangeInfos(String recordId) {
UserHistory history = dao().fetch(UserHistory.class, Cnd.where("recordId", "=", recordId));
if (Lang.isNotEmpty(history)) {
return history.getChangeInfos();
} else {
MemberChangeRecord record = dao().fetch(MemberChangeRecord.class, recordId);
return getChangeInfos(record);
}
}
@Override
public List<NutMap> getChangeInfos(MemberChangeRecord record) {
User info = dao().fetch(User.class, Cnd.where("id", "=", record.getUserId()));
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<>();
for (String fieldName : allowChangeFieldNames) {
extractChange(newMap, sourceMap, fieldName, dictMap, changeList);
}
return changeList;
}
@Override
public List<String> compareChangeType(MemberChangeRecord record, User user) {
List<String> changeTypes = new ArrayList<>();
changeTypes.add(MemberChangeType.BASIC_CHANGE.getType());
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).getType());
}
}
if (!ObjectUtil.equals(user.getMember() == 1, record.getMember())){
if (record.getMember()) {
changeTypes.add(MemberChangeType.RESTORE.getType());
} else {
changeTypes.add(MemberChangeType.WITHDRAWAL.getType());
}
}
if (!ObjectUtil.equals(user.getUnitid(), record.getUnitId())) {
changeTypes.add(MemberChangeType.UNIT_CHANGE.getType());
}
if (!ObjectUtil.equals(user.getUnionid(), record.getUnionId())) {
changeTypes.add(MemberChangeType.UNION_CHANGE.getType());
}
return changeTypes;
}
@Override
public void compareChangeInfoAndUpdateMember(String recordId) {
MemberChangeRecord record = dao().fetch(MemberChangeRecord.class, recordId);
List<NutMap> changeList = getChangeInfos(record);
// 如果有工会关系人员,这个user用来存储数据
User user = dao().fetch(User.class, Cnd.where("id", "=", record.getUserId()));
// 获取会员信息,用于存储变更记录
Sys_user info = dao().fetch(Sys_user.class, Cnd.where("id", "=", record.getUserId()));
String userId = info.getId();
UserHistory history = new UserHistory();
if (Lang.isNotEmpty(changeList)) {
BeanUtil.copyProperties(info, history);
}
if (Lang.isNotEmpty(history)) {
history.setRecordId(recordId);
history.setChangeTime(DateUtil.date());
history.setChangeTypes(record.getChangeTypes());
history.setChangeOrigin(record.getChangeOrigin());
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);
// 加入会员
if (record.getMember()) {
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", "=", Roles.MEMBER));
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(Roles.MEMBER);
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);
}
// 到此,表明审核通过,需要存储历史数据,并修改用户数据
BeanUtil.copyProperties(record, info);
info.setId(userId);
info.setIdcard(record.getIdCard());
// 如果有单位变更,则需要记录单位关系
if (record.getChangeTypes().contains(MemberChangeType.UNIT_CHANGE.getType())) {
info.setUnitid(record.getUnitId());
}
// 如果工会发生变更了,就是工会关系变更,记录到特殊人员表中
if (record.getChangeTypes().contains(MemberChangeType.UNION_CHANGE.getType())) {
Sys_union union = dao().fetch(Sys_union.class, Cnd.where("id", "=", record.getUnionId()));
SpecialStaff staff = new SpecialStaff();
staff.setUserId(userId);
staff.setPersonnelRelationUnitId(user.getUnitid());
staff.setPersonnelRelationUnitName(user.getUnitname());
staff.setUnionRelationUnionId(union.getId());
staff.setUnionRelationUnionName(union.getUnionname());
staff.setIsManyUnit(false);
staff.setSpecialStaffType("HMC_RELATION");
dao().insert(staff);
}
dao().updateIgnoreNull(info);
dao().insert(history);
sysUserService.clearCache();
sysRoleService.clearCache();
}
}
/**
* 获取所有变更记录
* @param userId
* @return
*/
@Override
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<UserHistory> historyList = dao().query(UserHistory.class, Cnd.where("loginname", "=", loginName)
.and("changeInfos", "is not", null).desc("changeTime"));
List<String> recordList = historyList.stream().map(UserHistory::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);
}
for (UserHistory 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 resultMapList;
}
/**
* 比较两个对象,并记录变更的字段工具
*
* @param newMap 新数据
* @param sourceMap 原数据
* @param fieldsMap 变更字段
* @param changeList 变更集合
*/
@Override
public void extractChange(NutMap newMap, NutMap sourceMap, String fieldName, Map<String, String> fieldsMap, List<NutMap> changeList) {
try {
Object currentValue = this.booleanVerification(newMap.get(fieldName));
Object previousValue = this.booleanVerification(sourceMap.get(fieldName));
if (!ObjectUtil.equals(currentValue, previousValue)) {
String name = fieldsMap.getOrDefault(fieldName, fieldName);
if ("unitId".equals(fieldName)) {
List<Sys_unit> unitList = dao().query(Sys_unit.class,
Cnd.where("id", "in", List.of(previousValue, currentValue)));
Object finalPreviousValue = previousValue;
previousValue = unitList.stream().filter(v -> v.getId().equals(String.valueOf(finalPreviousValue)))
.findFirst().orElse(new Sys_unit()).getName();
Object finalCurrentValue = currentValue;
currentValue = unitList.stream().filter(v -> v.getId().equals(String.valueOf(finalCurrentValue)))
.findFirst().orElse(new Sys_unit()).getName();
}
changeList.add(NutMap.NEW()
.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);
}
}
/**
* 处理布尔值和数值类型
*
* @param value
* @return
*/
private String booleanVerification(Object value) {
// 检查是否为null或空字符串
if (ObjectUtil.isAllEmpty(value, "")) {
return "无数据";
}
// 处理布尔值
if (value instanceof Boolean) {
return ((Boolean) value) ? "" : "";
}
// 处理数值类型
if (value instanceof Number && List.of(0, 1).contains((Integer) value)) {
return ((Number) value).intValue() != 0 ? "" : "";
}
// 其他对象,返回其字符串表示
if (value instanceof Date) {
return DateUtil.format((Date) value, "yyyy-MM-dd");
}
return value.toString();
}
}
@@ -1,11 +1,11 @@
package io.v.nutz.zhgh.member.service.impl;
package io.v.nutz.zhgh.staffmanage.member.service.impl;
import io.v.nutz.base.service.AsyncService;
import io.v.nutz.base.service.impl.ViServiceImpl;
import io.v.nutz.sys.services.SysRoleService;
import io.v.nutz.sys.services.SysUserService;
import io.v.nutz.zhgh.member.model.MemberHistory;
import io.v.nutz.zhgh.member.service.MemberHistoryService;
import io.v.nutz.zhgh.staffmanage.member.model.MemberHistory;
import io.v.nutz.zhgh.staffmanage.member.service.MemberHistoryService;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.member.template;
package io.v.nutz.zhgh.staffmanage.member.template;
import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.Data;
@@ -1,12 +1,8 @@
package io.v.nutz.zhgh.member.utils;
package io.v.nutz.zhgh.staffmanage.member.utils;
import cn.hutool.core.util.StrUtil;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.zhgh.activity.models.ActivityUserCnd;
import io.v.nutz.zhgh.data.constant.UserChangeType;
import io.v.nutz.zhgh.member.MemberMode;
import io.v.nutz.zhgh.member.constant.MemberStatus;
import org.apache.commons.lang.ArrayUtils;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
@@ -23,43 +19,6 @@ import org.nutz.lang.Strings;
**/
public class MemberUtils {
public static void memberCorrespondence(Integer type, Sys_user user) {
int member = MemberMode.NONE.getCode();
int memberStatus = 0;
if (type == UserChangeType.UNIT_CHANGE.getCode()) {
member = MemberMode.NORMAL.getCode();
memberStatus = MemberStatus.TURN_IN.getCode();
}
if (type == UserChangeType.NEW.getCode()) {
member = MemberMode.NORMAL.getCode();
memberStatus = MemberStatus.NORMAL.getCode();
}
if (type == UserChangeType.RESIGN.getCode()) {
member = MemberMode.NONE.getCode();
memberStatus = MemberStatus.TURN_OUT.getCode();
}
if (type == UserChangeType.RETIREMENT.getCode()) {
member = MemberMode.NONE.getCode();
memberStatus = MemberStatus.KEEP.getCode();
}
// if (type == UserChangeType.EXPELLED.getCode()) {
// member = MemberMode.NONE.getCode();
// memberStatus = MemberStatus.EXPELLED.getCode();
// }
if (type == UserChangeType.RESTORE.getCode()) {
member = MemberMode.NORMAL.getCode();
memberStatus = MemberStatus.RESTORE.getCode();
}
if (type == UserChangeType.WITHDRAWAL.getCode()) {
member = MemberMode.NONE.getCode();
memberStatus = MemberStatus.WITHDRAWAL.getCode();
}
user.setMember(member).setMemberStatus(memberStatus);
}
public static Cnd getCnd(PageForm pageForm,
String startDate,
String endDate,
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.single.controller;
package io.v.nutz.zhgh.staffmanage.single.controller;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
@@ -10,10 +10,10 @@ import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.result.Result;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.web.commons.slog.annotation.SLog;
import io.v.nutz.zhgh.single.service.SingleUserService;
import io.v.nutz.zhgh.staffmanage.single.service.SingleUserService;
import io.v.nutz.base.utils.ViTool;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.zhgh.thirtyteach.template.ThirtyTeachTemp;
import io.v.nutz.zhgh.staffmanage.thirtyteach.template.ThirtyTeachTemp;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.dao.Chain;
@@ -30,7 +30,6 @@ 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.IOException;
import java.util.ArrayList;
@@ -1,10 +1,10 @@
package io.v.nutz.zhgh.single.controller;
package io.v.nutz.zhgh.staffmanage.single.controller;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.zhgh.single.service.SingleUserService;
import io.v.nutz.zhgh.staffmanage.single.service.SingleUserService;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.ioc.loader.annotation.Inject;
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.single.service;
package io.v.nutz.zhgh.staffmanage.single.service;
import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.service.ViService;
@@ -1,11 +1,11 @@
package io.v.nutz.zhgh.single.service.impl;
package io.v.nutz.zhgh.staffmanage.single.service.impl;
import cn.hutool.core.util.StrUtil;
import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.base.dao.CndPlus;
import io.v.nutz.base.service.impl.ViServiceImpl;
import io.v.nutz.zhgh.single.service.SingleUserService;
import io.v.nutz.zhgh.staffmanage.single.service.SingleUserService;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.web.commons.utils.ShiroUtil;
import org.apache.commons.lang.StringUtils;
@@ -0,0 +1,83 @@
package io.v.nutz.zhgh.staffmanage.sourcechange.controller;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.sys.services.SysUserService;
import io.v.nutz.zhgh.staffmanage.sourcechange.model.SourceChangeConfig;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameSourceChangeConfigController
* @Date 2025/2/13 15:45
* @注释 会员更新配置
*/
@IocBean
@Ok("json:full")
@At("/platform/sourcechange/config")
public class SourceChangeConfigController {
@Inject
private Dao dao;
@Inject
private SysUserService sysUserService;
@At("/")
@Ok("beetl:/platform/sourcechange/config/index.html")
@RequiresPermissions("sourcechange.config")
public void index() {}
@At
@ViReturn
@RequiresPermissions("sourcechange.config")
public Object getSourceChangeConfig(){
SourceChangeConfig config = dao.fetch(SourceChangeConfig.class, Cnd.NEW());
List<SourceChangeConfig.MemberSift> memberSiftList = config.getMemberSiftList();
for (SourceChangeConfig.MemberSift sift : memberSiftList) {
Object siftValue = sift.getSiftValue();
System.out.println(siftValue);
List<String> list = (List<String>) siftValue;
System.out.println(list);
}
return null;
}
@At
@ViReturn
@RequiresPermissions("sourcechange.config")
public Object doAddOrModify(@Param("data") SourceChangeConfig config){
System.out.println(config);
dao.insertOrUpdate(config);
return null;
}
@At
@ViReturn
@RequiresPermissions("sourcechange.config")
public Object getRemoteSearchUser(String query){
Sql sql = Sqls.create("select id,loginname,username,unitname,unionname from `user` $condition");
Cnd cnd = Cnd.NEW();
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("loginname", query);
seg.orLike("username", query);
cnd.and(seg);
sql.setCondition(cnd);
return sysUserService.listPageMap(1, 10, sql);
}
}
@@ -0,0 +1,153 @@
package io.v.nutz.zhgh.staffmanage.sourcechange.controller;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.utils.PageUtil;
import io.v.nutz.sys.models.Sys_dict;
import io.v.nutz.sys.models.User;
import io.v.nutz.sys.services.SysDictService;
import io.v.nutz.web.commons.slog.annotation.SLog;
import io.v.nutz.zhgh.staffmanage.member.constant.MemberChangeType;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService;
import io.v.nutz.zhgh.staffmanage.sourcechange.model.SourceChangeMiddleTable;
import io.v.nutz.zhgh.staffmanage.sourcechange.param.pageform.SourceChangePageForm;
import io.v.nutz.zhgh.staffmanage.sourcechange.service.SourceChangeManageService;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.dao.util.cri.Static;
import org.nutz.ioc.loader.annotation.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.*;
import java.util.stream.Collectors;
/**
* @version 1.0
* @Author zzr
* @nameSourceChangeManageController
* @Date 2025/2/17 16:08
* @注释 人员异动查看
*/
@Slf4j
@IocBean
@Ok("json")
@At("/platform/sourcechange/manage")
public class SourceChangeManageController {
@Inject
private Dao dao;
@Inject
private MemberCommonService commonService;
@Inject
private SourceChangeManageService sourceChangeManageService;
@At("")
@Ok("beetl:/platform/sourcechange/manage/index.html")
@RequiresPermissions("sourcechange.manage")
public void index() {
}
@At
@ViReturn
@RequiresPermissions("sourcechange.manage")
public Object pageData(SourceChangePageForm pageForm){
Sql sql = Sqls.create("""
SELECT
scmt.id,
scmt.loginname,
scmt.username,
u.sex,
u.unitName,
u.unionName,
scmt.userState,
scmt.personType,
scmt.preparedBy,
scmt.changeTime,
scmt.changeTypes,
scmt.changeOrigin,
scmt.isOperate,
u.id AS userId
FROM
source_change_middle_table scmt
LEFT JOIN `user` u ON scmt.loginname = u.loginname
$condition
""");
Cnd cnd = Cnd.NEW();
if(StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("username",pageForm.getSearchKeyword());
seg.orLike("loginname",pageForm.getSearchKeyword());
cnd.and(seg);
}
if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
} else {
cnd.desc("changeTime");
}
if (Lang.isNotEmpty(pageForm.getChangeTypes())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
for (String type : pageForm.getChangeTypes()) {
seg.or(new Static("JSON_CONTAINS(scmt.changeTypes, JSON_QUOTE('%s'), '$')".formatted(type)));
}
cnd.and(seg);
}
cnd.andEX("unionId", "=", pageForm.getUnionId());
cnd.andEX("unitId", "=", pageForm.getUnitId());
cnd.andEX("sex", "=", pageForm.getSex());
cnd.andEX("personType", "=", pageForm.getPersonType());
cnd.andEX("preparedBy", "=", pageForm.getPreparedBy());
cnd.andEX("userState", "=", pageForm.getUserState());
cnd.andEX("isOperate", "=", pageForm.getIsOperate());
if (StrUtil.isAllNotBlank(pageForm.getChangeDateBefore(), pageForm.getChangeDateEnd())) {
cnd.and(new Static(String.format("Date(changeTime) >= '%s' and Date(changeTime) <= '%s'", pageForm.getChangeDateBefore(), pageForm.getChangeDateEnd())));
} else {
cnd.and("Date(changeTime)", "=", DateUtil.today());
}
sql.setCondition(cnd);
return commonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
/**
* 获取比变更信息和当前人员信息
* @param sourceChangeId
* @return
*/
@At
@ViReturn
@RequiresPermissions("sourcechange.manage")
public Object getSourceChangeAndCurrent(String sourceChangeId){
SourceChangeMiddleTable middleTable = dao.fetch(SourceChangeMiddleTable.class, sourceChangeId);
User user = dao.fetch(User.class, Cnd.where("loginname", "=", middleTable.getLoginname()));
NutMap map = NutMap.NEW();
map.put("middleTable", middleTable);
map.put("userData", user);
return map;
}
@At
@ViReturn
@RequiresPermissions("sourcechange.manage")
@SLog(tag = "人员变更管理", msg = "手动提交变更")
public Object doSubmit(SourceChangeMiddleTable middleTable) {
sourceChangeManageService.doSourceChange(middleTable);
return null;
}
}
@@ -0,0 +1,79 @@
package io.v.nutz.zhgh.staffmanage.sourcechange.model;
import lombok.Data;
import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert;
import java.io.Serializable;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameSourceChangeConfig
* @Date 2025/2/12 10:48
* @注释 更新配置
*/
@Data
@Table
public class SourceChangeConfig {
@Name
@Comment("ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
@PrevInsert(uu32 = true)
private String id;
@Column
@Comment("人员更新模式(自动、手动)")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String sourceChangeType;
// ========================================= 会员相关 start
@Column
@Comment("会员区分")
@ColDefine(type = ColType.MYSQL_JSON)
private List<MemberSift> memberSiftList;
@Data
public static class MemberSift implements Serializable {
// 筛选名称
private String siftName;
// 筛选值
private Object siftValue;
}
@Column
@Comment("新进职工是否加入会员组别")
@ColDefine(type = ColType.BOOLEAN)
private Boolean isJoinMemberActivityScope;
@Column
@Comment("非会员是否剔除会员组别")
@ColDefine(type = ColType.BOOLEAN)
private Boolean isDeleteMemberActivityScope;
// ========================================= 会员相关 end
// ========================================= 福利会员相关 start
@Column
@Comment("福利会员区分")
@ColDefine(type = ColType.MYSQL_JSON)
private List<WelfareMemberSift> welfareMemberSiftList;
@Data
public static class WelfareMemberSift implements Serializable {
// 筛选名称
private String siftName;
// 筛选编码
private String siftCode;
// 筛选值
private Object siftValue;
}
@Column
@Comment("新进职工是否加入正在进行中的福利项目")
@ColDefine(type = ColType.BOOLEAN)
private Boolean isJoinWelfareProject;
// ========================================= 福利会员相关 end
}
@@ -0,0 +1,92 @@
package io.v.nutz.zhgh.staffmanage.sourcechange.model;
import io.v.nutz.sys.models.Sys_user;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert;
import org.nutz.lang.util.NutMap;
import java.util.Date;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameSourceChangeMiddleTable
* @Date 2025/2/17 17:24
* @注释
*/
@Data
@Table
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableIndexes({
@Index(name = "INDEX_HISTORY_USER_LOGIN_NAME", fields = {"loginname"}, unique = false),
@Index(name = "INDEX_HISTORY_USER_UNIT", fields = {"unitid"}, unique = false),
@Index(name = "INDEX_HISTORY_USER_UNION", fields = {"unionid"}, unique = false),
})
public class SourceChangeMiddleTable extends Sys_user {
@Name
@Column
@Comment("ID")
@PrevInsert(uu32 = true)
@ColDefine(type = ColType.VARCHAR, width = 32)
private String id;
@Column
@Comment("是否加入会员组别")
@ColDefine(type = ColType.BOOLEAN)
private Boolean isJoinActivityMemberScope;
@Column
@Comment("是否退出会员组别")
@ColDefine(type = ColType.BOOLEAN)
private Boolean isExitActivityMemberScope;
@Column
@Comment("是否加入福利项目")
@ColDefine(type = ColType.BOOLEAN)
private Boolean isJoinWelfareProject;
@Column
@Comment("福利项目id")
@ColDefine(type = ColType.VARCHAR, width = 255)
private String welfareProjectId;
@Column
@Comment("更新时间")
@ColDefine(type = ColType.DATETIME)
private Date changeTime;
/**
* @see io.v.nutz.zhgh.staffmanage.member.constant.MemberChangeType
*/
@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.MYSQL_JSON)
private List<NutMap> changeInfos;
@Column
@Comment("详细变更记录,文本类型,可用于导出")
@ColDefine(type = ColType.TEXT)
private String changeInfosStr;
@Column
@Comment("是否操作")
@ColDefine(type = ColType.BOOLEAN)
private Boolean isOperate;
}
@@ -0,0 +1,49 @@
package io.v.nutz.zhgh.staffmanage.sourcechange.param.pageform;
import io.v.nutz.base.query.PageForm;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameSourceChangePageForm
* @Date 2025/2/17 17:20
* @注释
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class SourceChangePageForm extends PageForm {
// 工会id
private String unionId;
// 单位id
private String unitId;
// 性别
private String sex;
// 人员类型
private String personType;
// 杭医是人员区分,其他为人员编制
private String preparedBy;
// 在职状态
private String userState;
//变更状态数组
private List<String> changeTypes;
// 变更开始查询时间
private String changeDateBefore;
// 变更结束查询时间
private String changeDateEnd;
// 是否操作
private Boolean isOperate;
}
@@ -0,0 +1,20 @@
package io.v.nutz.zhgh.staffmanage.sourcechange.service;
import io.v.nutz.base.service.BaseService;
import io.v.nutz.zhgh.staffmanage.sourcechange.model.SourceChangeMiddleTable;
/**
* @version 1.0
* @Author zzr
* @nameSourceChangeManageService
* @Date 2025/2/19 14:54
* @注释 :人员变更管理
*/
public interface SourceChangeManageService extends BaseService<SourceChangeMiddleTable> {
/**
* 人工变更,做变更
* @param middleTable
*/
void doSourceChange(SourceChangeMiddleTable middleTable);
}
@@ -0,0 +1,195 @@
package io.v.nutz.zhgh.staffmanage.sourcechange.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HtmlUtil;
import io.v.nutz.base.service.impl.BaseServiceImpl;
import io.v.nutz.base.utils.Roles;
import io.v.nutz.sys.models.Sys_union;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.sys.models.Sys_user_role;
import io.v.nutz.sys.models.User;
import io.v.nutz.sys.services.SysRoleService;
import io.v.nutz.sys.services.SysUserService;
import io.v.nutz.zhgh.activity.models.ActivityUserScope;
import io.v.nutz.zhgh.data.model.UserHistory;
import io.v.nutz.zhgh.staffmanage.member.constant.MemberChangeOrigin;
import io.v.nutz.zhgh.staffmanage.member.constant.MemberChangeType;
import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService;
import io.v.nutz.zhgh.staffmanage.sourcechange.model.SourceChangeMiddleTable;
import io.v.nutz.zhgh.staffmanage.sourcechange.service.SourceChangeManageService;
import io.v.nutz.zhgh.staffmanage.specialstaff.model.SpecialStaff;
import io.v.nutz.zhgh.welfare.model.WelfareList;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.lang.random.R;
import org.nutz.lang.util.NutMap;
import java.util.*;
import java.util.stream.Collectors;
/**
* @version 1.0
* @Author zzr
* @nameSourceChangeManageServiceImpl
* @Date 2025/2/19 14:55
* @注释
*/
@IocBean(args = {"refer:dao"})
public class SourceChangeManageServiceImpl extends BaseServiceImpl<SourceChangeMiddleTable> implements SourceChangeManageService {
public SourceChangeManageServiceImpl(Dao dao) {
super(dao);
}
@Inject
private MemberCommonService commonService;
@Inject
private SysRoleService sysRoleService;
@Inject
private SysUserService sysUserService;
@Override
@Aop(TransAop.READ_COMMITTED)
public void doSourceChange(SourceChangeMiddleTable middleTable) {
User user = dao().fetch(User.class, Cnd.where("loginname", "=", middleTable.getLoginname()));
//获取可变更字段
NutMap map = commonService.getDictAllowChangeFields();
Set<String> allowChangeFieldNames = map.getAs("allowChangeFieldNames", Set.class);
Map<String, String> dictMap = map.getAs("dictMap", Map.class);
// 新数据
NutMap newMap = Lang.obj2nutmap(middleTable);
// 原数据
NutMap sourceMap = Lang.obj2nutmap(user);
List<NutMap> changeList = new ArrayList<>();
for (String fieldName : allowChangeFieldNames) {
commonService.extractChange(newMap, sourceMap, fieldName, dictMap, changeList);
}
List<String> changeTypes = new ArrayList<>();
changeTypes.add(MemberChangeType.BASIC_CHANGE.getType());
if (!ObjectUtil.equals(user.getUserState(), middleTable.getUserState())) {
List<MemberChangeType> list = Arrays.stream(MemberChangeType.values())
.filter(v -> v.getChangeTypeName().equals(middleTable.getUserState())).toList();
if (Lang.isNotEmpty(list)) {
changeTypes.add(list.get(0).getType());
}
}
if (!ObjectUtil.equals(user.getMember(), middleTable.getMember())){
if (middleTable.getMember() == 1) {
changeTypes.add(MemberChangeType.RESTORE.getType());
} else {
changeTypes.add(MemberChangeType.WITHDRAWAL.getType());
}
}
Sys_user info = dao().fetch(Sys_user.class, Cnd.where("loginname", "=", middleTable.getLoginname()));
String userId = info.getId();
UserHistory history = new UserHistory();
if (Lang.isNotEmpty(changeList)) {
BeanUtil.copyProperties(info, history);
}
if (Lang.isNotEmpty(history)) {
history.setChangeTime(DateUtil.date());
history.setChangeOrigin(MemberChangeOrigin.HAND_MOVEMENT.name());
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);
// 加入会员
if (middleTable.getMember() == 1) {
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", "=", Roles.MEMBER));
if (activityCount <= 0) {
// 取消或加入会员组别
if (middleTable.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(Roles.MEMBER);
dao().insert(userRole);
}
// 杭医特有,其他学校请删除
middleTable.setPreparedBy("会员");
} else {
if (middleTable.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));
// 杭医特有,其他学校请删除
middleTable.setPreparedBy("教职工");
}
// 加入福利会员 是否加入福利项目
if (middleTable.getWelfareMember() == 1 && middleTable.getIsJoinWelfareProject()) {
WelfareList welfareList = new WelfareList();
welfareList.setId(R.UU32());
welfareList.setProjectId(middleTable.getWelfareProjectId());
welfareList.setUserId(userId);
welfareList.setIsReceive(false);
welfareList.setIsAutoSelect(false);
welfareList.setUserState(middleTable.getUserState());
welfareList.setPersonType(middleTable.getPersonType());
welfareList.setWelfareUnitId(middleTable.getUnitid());
dao().insert(welfareList);
}
// 到此,表明审核通过,需要存储历史数据,并修改用户数据
BeanUtil.copyProperties(middleTable, info);
info.setId(userId);
info.setIdcard(middleTable.getIdcard());
// 如果有单位变更,则需要记录单位关系
if (!ObjectUtil.equals(user.getUnitid(), middleTable.getUnitid())) {
changeTypes.add(MemberChangeType.UNIT_CHANGE.getType());
info.setUnitid(middleTable.getUnitid());
}
// 如果工会发生变更了,就是工会关系变更,记录到特殊人员表中
if (!ObjectUtil.equals(user.getUnionid(), middleTable.getUnionid())) {
changeTypes.add(MemberChangeType.UNION_CHANGE.getType());
Sys_union union = dao().fetch(Sys_union.class, Cnd.where("id", "=", middleTable.getUnionid()));
SpecialStaff staff = new SpecialStaff();
staff.setUserId(userId);
staff.setPersonnelRelationUnitId(user.getUnitid());
staff.setPersonnelRelationUnitName(user.getUnitname());
staff.setUnionRelationUnionId(union.getId());
staff.setUnionRelationUnionName(union.getUnionname());
staff.setIsManyUnit(false);
staff.setSpecialStaffType("HMC_RELATION");
dao().insert(staff);
}
dao().updateIgnoreNull(info);
history.setChangeTypes(changeTypes);
dao().insert(history);
dao().update(SourceChangeMiddleTable.class, Chain.make("isOperate", 2), Cnd.where("id", "=", middleTable.getId()));
sysUserService.clearCache();
sysRoleService.clearCache();
}
}
}
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.specialstaff.controller;
package io.v.nutz.zhgh.staffmanage.specialstaff.controller;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
@@ -6,10 +6,10 @@ import io.v.nutz.base.page.Pagination;
import io.v.nutz.base.result.Result;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.sys.models.User;
import io.v.nutz.zhgh.specialstaff.model.SpecialStaff;
import io.v.nutz.zhgh.specialstaff.param.SpecialStaffPageForm;
import io.v.nutz.zhgh.specialstaff.service.SpecialStaffManageService;
import io.v.nutz.zhgh.specialstaff.vo.SpecialStaffVo;
import io.v.nutz.zhgh.staffmanage.specialstaff.model.SpecialStaff;
import io.v.nutz.zhgh.staffmanage.specialstaff.param.SpecialStaffPageForm;
import io.v.nutz.zhgh.staffmanage.specialstaff.service.SpecialStaffManageService;
import io.v.nutz.zhgh.staffmanage.specialstaff.vo.SpecialStaffVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.aop.interceptor.ioc.TransAop;
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.specialstaff.model;
package io.v.nutz.zhgh.staffmanage.specialstaff.model;
import io.v.nutz.base.model.BaseModel;
import lombok.Data;
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.specialstaff.param;
package io.v.nutz.zhgh.staffmanage.specialstaff.param;
import io.v.nutz.base.query.PageForm;
import lombok.Data;
@@ -1,9 +1,9 @@
package io.v.nutz.zhgh.specialstaff.service;
package io.v.nutz.zhgh.staffmanage.specialstaff.service;
import io.v.nutz.base.page.Pagination;
import io.v.nutz.base.service.BaseService;
import io.v.nutz.zhgh.specialstaff.model.SpecialStaff;
import io.v.nutz.zhgh.specialstaff.param.SpecialStaffPageForm;
import io.v.nutz.zhgh.staffmanage.specialstaff.model.SpecialStaff;
import io.v.nutz.zhgh.staffmanage.specialstaff.param.SpecialStaffPageForm;
import org.nutz.lang.util.NutMap;
/**
@@ -1,4 +1,4 @@
package io.v.nutz.zhgh.specialstaff.service.impl;
package io.v.nutz.zhgh.staffmanage.specialstaff.service.impl;
import cn.hutool.core.util.StrUtil;
import io.v.nutz.base.page.Pagination;
@@ -6,9 +6,9 @@ import io.v.nutz.base.service.impl.BaseServiceImpl;
import io.v.nutz.base.utils.PageUtil;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.specialstaff.model.SpecialStaff;
import io.v.nutz.zhgh.specialstaff.param.SpecialStaffPageForm;
import io.v.nutz.zhgh.specialstaff.service.SpecialStaffManageService;
import io.v.nutz.zhgh.staffmanage.specialstaff.model.SpecialStaff;
import io.v.nutz.zhgh.staffmanage.specialstaff.param.SpecialStaffPageForm;
import io.v.nutz.zhgh.staffmanage.specialstaff.service.SpecialStaffManageService;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;

Some files were not shown because too many files have changed in this diff Show More