人员管理
This commit is contained in:
@@ -529,7 +529,7 @@ public class Sys_user extends BaseModel implements Serializable {
|
||||
private String electronicCardNumberTime;
|
||||
|
||||
@Column
|
||||
@Comment("个人身份")
|
||||
@Comment("个人身份(费用类型)")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String personalStatus;
|
||||
|
||||
@@ -657,6 +657,11 @@ public class Sys_user extends BaseModel implements Serializable {
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String administrativeLevel;
|
||||
|
||||
@Column
|
||||
@Comment("福利享受截止日期")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String welfareStopDate;
|
||||
|
||||
@Column
|
||||
@Comment("专业技术级别")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package io.v.nutz.task.job.sourcechange;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import io.v.nutz.base.utils.MsgApi;
|
||||
import io.v.nutz.zhgh.staffmanage.member.constant.MemberChangeType;
|
||||
import io.v.nutz.zhgh.staffmanage.sourcechange.model.SourceChangeMiddleTable;
|
||||
@@ -7,6 +8,7 @@ import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.quartz.Job;
|
||||
import org.quartz.JobExecutionContext;
|
||||
@@ -15,6 +17,7 @@ import org.quartz.JobExecutionException;
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@IocBean
|
||||
public class SourceChangeJob implements Job {
|
||||
@@ -25,52 +28,36 @@ public class SourceChangeJob implements Job {
|
||||
|
||||
@Override
|
||||
public void execute(JobExecutionContext context) throws JobExecutionException {
|
||||
// 获取当前日期
|
||||
LocalDate currentDate = LocalDate.now();
|
||||
// 今天的日期,yyyy-MM-dd格式
|
||||
String today = DateUtil.today();
|
||||
// 查询出今天的变更记录
|
||||
List<SourceChangeMiddleTable> list = dao.query(SourceChangeMiddleTable.class,
|
||||
Cnd.where("DATE_FORMAT(changeTime, '%Y-%m-%d')", "=", today));
|
||||
// 抽出所有的变更类型
|
||||
List<String> changeTypeList = list.stream().map(SourceChangeMiddleTable::getChangeTypes).flatMap(List::stream).toList();
|
||||
// 各类型的对应list,例如 NEW -> List<NEW>
|
||||
Map<String, List<String>> collect = changeTypeList.stream().collect(Collectors.groupingBy(item -> item));
|
||||
|
||||
// 定义日期格式
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||
// 获取变更的枚举
|
||||
Map<String, String> map = Arrays.stream(MemberChangeType.values())
|
||||
.collect(Collectors.toMap(MemberChangeType::getType, MemberChangeType::getChangeTypeName));
|
||||
|
||||
// 格式化日期
|
||||
String formattedDate = currentDate.format(formatter);
|
||||
|
||||
List<SourceChangeMiddleTable> list = dao.query(SourceChangeMiddleTable.class, Cnd.NEW().and("changeTime", "like", formattedDate));
|
||||
|
||||
// 统计各类型人数
|
||||
Map<MemberChangeType, Integer> countMap = new HashMap<>();
|
||||
for (MemberChangeType type : MemberChangeType.values()) {
|
||||
countMap.put(type, 0);
|
||||
}
|
||||
for (SourceChangeMiddleTable item : list) {
|
||||
for (MemberChangeType type : MemberChangeType.values()) {
|
||||
if (item.getChangeTypes().contains(type.getType())) {
|
||||
countMap.put(type, countMap.get(type) + 1);
|
||||
}
|
||||
// 更新的变更类型的人数
|
||||
List<NutMap> updateDataList = new ArrayList<>();
|
||||
collect.forEach((key, value) -> {
|
||||
if (map.containsKey(key)) {
|
||||
updateDataList.add(NutMap.NEW().addv("changeType", map.get(key)).addv("count", value.size()));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
StringBuffer msg = new StringBuffer();
|
||||
msg.append("日期:"+formattedDate);
|
||||
appendIfPositive(msg, "新入职", countMap.get(MemberChangeType.NEW));
|
||||
appendIfPositive(msg, "在职", countMap.get(MemberChangeType.WORK));
|
||||
appendIfPositive(msg, "离校", countMap.get(MemberChangeType.LEAVE_SCHOOL));
|
||||
appendIfPositive(msg, "退休", countMap.get(MemberChangeType.RETIRE));
|
||||
appendIfPositive(msg, "辞职", countMap.get(MemberChangeType.RESIGN));
|
||||
appendIfPositive(msg, "调出", countMap.get(MemberChangeType.OUT));
|
||||
appendIfPositive(msg, "离职", countMap.get(MemberChangeType.LEAVE_OFFICE));
|
||||
appendIfPositive(msg, "其它", countMap.get(MemberChangeType.OTHER));
|
||||
appendIfPositive(msg, "单位异动", countMap.get(MemberChangeType.UNIT_CHANGE));
|
||||
appendIfPositive(msg, "基本信息异动", countMap.get(MemberChangeType.BASIC_CHANGE));
|
||||
if (Lang.isNotEmpty(updateDataList)) {
|
||||
// 收集成发送短信内容
|
||||
String updateDataStr = updateDataList.stream().map(v -> {
|
||||
return v.getString("changeType") + ":" + v.getInt("count") + "人";
|
||||
}).collect(Collectors.joining(","));
|
||||
String content = "智慧工会" + today + "数据更新汇总:" + updateDataStr;
|
||||
|
||||
List<String> channels=new ArrayList<>();
|
||||
channels.add("DingTalk");
|
||||
|
||||
//msgApi.sendMsg(channels, "", 1,"0",msg.toString(),null,null);
|
||||
}
|
||||
|
||||
private void appendIfPositive(StringBuffer msg, String label, Integer count) {
|
||||
if (count > 0) {
|
||||
msg.append("," + label + ":" + count + "人");
|
||||
// msgApi.sendMsg(List.of("DingTalk"), "2004000022", 1, "数据更新汇总", content, "", "");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+86
-43
@@ -85,36 +85,38 @@ 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("USER_STATE");
|
||||
|
||||
//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("USER_STATE");
|
||||
Sys_dict userState = dao().fetch(Sys_dict.class, Cnd.where("code", "=", "USER_STATE"));
|
||||
|
||||
if (Lang.isNotEmpty(userState)) {
|
||||
//获取在职状态名
|
||||
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.getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//人员类型
|
||||
Sql personTypeSql = Sqls.create("select personType from `user` where personType is not null and personType !='' group by personType");
|
||||
@@ -134,23 +136,64 @@ public class UserPartUpServiceImpl extends ViServiceImpl<UserPartUp> implements
|
||||
|
||||
//获取删除dict后的personType
|
||||
List<Sys_dict> deleteRenewPersonTypeList = sysDictService.getSubListByCode("PERSON_TYPE");
|
||||
Sys_dict personType = deleteRenewPersonTypeList.stream().findFirst().orElse(null);
|
||||
assert personType != null;
|
||||
//获取personType
|
||||
List<String> dictPersonTypeNameList = deleteRenewPersonTypeList.stream().map(Sys_dict::getName).collect(Collectors.toList());
|
||||
//如果user表中有personType, 删除personType后的dict表中没有,就需要新增
|
||||
List<String> insertPersonTypeList = personTypes.stream().filter(v -> !dictPersonTypeNameList.contains(v)).collect(Collectors.toList());
|
||||
Sys_dict personType = dao().fetch(Sys_dict.class, Cnd.where("code", "=", "PERSON_TYPE"));
|
||||
|
||||
insertPersonTypeList = insertPersonTypeList.stream().distinct().collect(Collectors.toList());
|
||||
if (Lang.isNotEmpty(insertPersonTypeList)) {
|
||||
for (String item : insertPersonTypeList) {
|
||||
Sys_dict dict = new Sys_dict();
|
||||
dict.setCode(item);
|
||||
dict.setName(item);
|
||||
sysDictService.save(dict, personType.getParentId());
|
||||
if (Lang.isNotEmpty(personType)) {
|
||||
//获取personType
|
||||
List<String> dictPersonTypeNameList = deleteRenewPersonTypeList.stream().map(Sys_dict::getName).collect(Collectors.toList());
|
||||
//如果user表中有personType, 删除personType后的dict表中没有,就需要新增
|
||||
List<String> insertPersonTypeList = personTypes.stream().filter(v -> !dictPersonTypeNameList.contains(v)).collect(Collectors.toList());
|
||||
|
||||
insertPersonTypeList = insertPersonTypeList.stream().distinct().collect(Collectors.toList());
|
||||
if (Lang.isNotEmpty(insertPersonTypeList)) {
|
||||
for (String item : insertPersonTypeList) {
|
||||
Sys_dict dict = new Sys_dict();
|
||||
dict.setCode(item);
|
||||
dict.setName(item);
|
||||
sysDictService.save(dict, personType.getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 人事编制 preparedBy
|
||||
Sql preparedBySql = Sqls.create("select preparedBy from `user` where preparedBy is not null and preparedBy !='' group by preparedBy");
|
||||
List<String> preparedBys = sysDictService.listMap(preparedBySql).stream().map(v -> v.getString("preparedBy")).collect(Collectors.toList());
|
||||
List<Sys_dict> preparedByList = sysDictService.getSubListByCode("PREPARED_BY");
|
||||
if (Lang.isEmpty(preparedByList)) {
|
||||
return;
|
||||
}
|
||||
|
||||
//dict中的preparedBy,在user表中没有,这一部分删除
|
||||
List<Sys_dict> deletePreparedBy = preparedByList.stream().filter(v -> !preparedBys.contains(v.getName())).collect(Collectors.toList());
|
||||
List<String> deletePreparedBys = deletePreparedBy.stream().map(Sys_dict::getId).collect(Collectors.toList());
|
||||
|
||||
if (Lang.isNotEmpty(deletePreparedBys)) {
|
||||
sysDictService.delete(deletePreparedBys);
|
||||
}
|
||||
|
||||
//获取删除dict后的 preparedBy
|
||||
List<Sys_dict> deleteRenewPreparedByList = sysDictService.getSubListByCode("PREPARED_BY");
|
||||
Sys_dict preparedBy = dao().fetch(Sys_dict.class, Cnd.where("code", "=", "PREPARED_BY"));
|
||||
|
||||
if (Lang.isNotEmpty(preparedBy)) {
|
||||
//获取preparedBy
|
||||
List<String> dictPreparedByNameList = deleteRenewPreparedByList.stream().map(Sys_dict::getName).collect(Collectors.toList());
|
||||
//如果user表中有preparedBy, 删除preparedBy后的dict表中没有,就需要新增
|
||||
List<String> insertPreparedByList = preparedBys.stream().filter(v -> !dictPreparedByNameList.contains(v)).collect(Collectors.toList());
|
||||
|
||||
insertPreparedByList = insertPreparedByList.stream().distinct().collect(Collectors.toList());
|
||||
if (Lang.isNotEmpty(insertPreparedByList)) {
|
||||
for (String item : insertPreparedByList) {
|
||||
Sys_dict dict = new Sys_dict();
|
||||
dict.setCode(item);
|
||||
dict.setName(item);
|
||||
sysDictService.save(dict, preparedBy.getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sysDictService.clearCache();
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ package io.v.nutz.zhgh.data.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 io.v.nutz.base.annontation.ViReturn;
|
||||
import io.v.nutz.base.dao.CndPlus;
|
||||
import io.v.nutz.base.utils.ViResource;
|
||||
@@ -77,12 +78,14 @@ public class UpdateUserController {
|
||||
CndPlus cnd = CndPlus.create();
|
||||
cnd.and(pageForm);
|
||||
|
||||
cnd.andEx("u.unitid", "=", unitId);
|
||||
cnd.andEx("u.personType", "=", personType);
|
||||
cnd.andEx("u.userState", "=", userState);
|
||||
cnd.andEX("u.unitid", "=", unitId);
|
||||
cnd.andEX("u.personType", "=", personType);
|
||||
cnd.andEX("u.userState", "=", userState);
|
||||
|
||||
cnd.andEx("Date(his.changeTime)", "=", changeDate);
|
||||
cnd.andEx("his.changeType", "=", changeType);
|
||||
if (StrUtil.isNotBlank(changeDate)) {
|
||||
cnd.and("DATE(his.changeTime)", "=", changeDate);
|
||||
}
|
||||
cnd.andEX("his.changeType", "=", changeType);
|
||||
|
||||
sql.setCondition(cnd);
|
||||
|
||||
|
||||
@@ -72,6 +72,12 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
|
||||
super(dao);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final List<String> RESIGN_AND_OUT_WORK = List.of(
|
||||
"离职", "不在职"
|
||||
);
|
||||
|
||||
@Inject
|
||||
private AsyncService asyncService;
|
||||
@@ -113,11 +119,14 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
|
||||
source.setEducation(o.getString("XL"));
|
||||
source.setPullTime(new DateTime());
|
||||
source.setMobile(o.getString("SJH"));
|
||||
source.setUserState(o.getString("DQZT"));
|
||||
source.setPolitical(o.getString("ZZMMM"));
|
||||
// source.setIdcard(o.getString("SFZJH"));
|
||||
source.setPreparedBy(o.getString("JZGRYLB"));
|
||||
source.setPersonType(o.getString("LXLX"));
|
||||
source.setUserState(o.getString("LXLX"));
|
||||
source.setPreparedBy(o.getString("DQZT"));
|
||||
source.setPersonType(o.getString("JZGRYLB"));
|
||||
// source.setUserState(o.getString("DQZT"));
|
||||
// source.setPreparedBy(o.getString("JZGRYLB"));
|
||||
// source.setPersonType(o.getString("LXLX"));
|
||||
return source;
|
||||
}).collect(Collectors.toList());
|
||||
asyncService.exe2(users, (user) -> {
|
||||
@@ -245,7 +254,9 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
|
||||
if (Lang.isEmpty(history)) {
|
||||
continue;
|
||||
}
|
||||
histories.add(history);
|
||||
if (user != null) {
|
||||
histories.add(history);
|
||||
}
|
||||
if (history.getChangeTypes().contains(MemberChangeType.NEW.getType())) {
|
||||
needInitUserList.add(u);
|
||||
}
|
||||
@@ -254,7 +265,9 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
|
||||
if (Lang.isEmpty(table)) {
|
||||
continue;
|
||||
}
|
||||
middleTables.add(table);
|
||||
if (user != null && Lang.isNotEmpty(table.getChangeTypes())) {
|
||||
middleTables.add(table);
|
||||
}
|
||||
if (table.getChangeTypes().contains(MemberChangeType.NEW.getType())) {
|
||||
needInitUserList.add(u);
|
||||
}
|
||||
@@ -282,11 +295,10 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
|
||||
addMemberUser(addMemberUserIds, changeConfig.getIsJoinMemberActivityScope());
|
||||
// 删除会员
|
||||
deleteMemberUser(deleteMemberUserIds, changeConfig.getIsDeleteMemberActivityScope());
|
||||
|
||||
// 加入进行中的福利项目,暂时没写
|
||||
|
||||
|
||||
// 历史记录表插入数据
|
||||
// 历史记录表插入数据 automatic 自动,artificial 手动
|
||||
if ("automatic".equals(changeConfig.getSourceChangeType())) {
|
||||
// 自动更新,修改数据表,存储历史记录
|
||||
if ("part".equals(sourceType)) {
|
||||
@@ -297,20 +309,21 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
|
||||
|
||||
manyAddOrRenewUtil.asyncExecuteFastInsert(histories, 200);
|
||||
// 人员状态及在职状态更新
|
||||
// 在职状态关乎变更类型,建议自己手动更新,不要使用自动更新功能,硬要使用,请点进 renewUserState 打开注释
|
||||
userPatUpService.renewUserState();
|
||||
|
||||
// 修改不在人事库的人员,删除角色
|
||||
// userPatUpService.deleteNotInSourceUser(true);
|
||||
//清除缓存
|
||||
sysUserService.clearCache();
|
||||
sysRoleService.clearCache();
|
||||
|
||||
} else {
|
||||
List<String> loginNameList = middleTables.stream().map(SourceChangeMiddleTable::getLoginname).toList();
|
||||
dao().clear(SourceChangeMiddleTable.class, Cnd.where("loginname", "in", loginNameList).and("isOperate", "=", false));
|
||||
manyAddOrRenewUtil.asyncExecuteFastInsert(middleTables, 200);
|
||||
}
|
||||
|
||||
// 在职状态关乎变更类型,建议自己手动更新,不要使用自动更新功能,硬要使用,请点进 renewUserState 打开注释
|
||||
userPatUpService.renewUserState();
|
||||
|
||||
// 修改不在人事库的人员,删除角色
|
||||
// userPatUpService.deleteNotInSourceUser(true);
|
||||
//清除缓存
|
||||
sysUserService.clearCache();
|
||||
sysRoleService.clearCache();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
throw new RuntimeException(e.getMessage());
|
||||
@@ -514,7 +527,7 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
|
||||
// 新入职教职工
|
||||
if (user == null) {
|
||||
changeTypes.add(MemberChangeType.NEW.getType());
|
||||
table.setChangeTypes(changeTypes);
|
||||
table.setChangeTypes(RESIGN_AND_OUT_WORK.contains(source.getUserState()) ? changeTypes : null);
|
||||
table.setChangeInfosStr("新入职");
|
||||
return table;
|
||||
}
|
||||
@@ -530,6 +543,9 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
|
||||
// 变更记录
|
||||
List<NutMap> changeList = new ArrayList<>();
|
||||
for (String fieldName : allowChangeFieldNames) {
|
||||
if (allowChangeFieldNames.contains("retireDate") || allowChangeFieldNames.contains("welfareStopDate")) {
|
||||
continue;
|
||||
}
|
||||
memberCommonService.extractChange(newMap, sourceMap, fieldName, dictMap, changeList);
|
||||
}
|
||||
if (Lang.isEmpty(changeList)) {
|
||||
@@ -567,7 +583,7 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
|
||||
history.setChangeOrigin(MemberChangeOrigin.SYSTEM.name());
|
||||
if (user == null) {
|
||||
changeTypes.add(MemberChangeType.NEW.getType());
|
||||
history.setChangeTypes(changeTypes);
|
||||
history.setChangeTypes(RESIGN_AND_OUT_WORK.contains(source.getUserState()) ? changeTypes : null);
|
||||
return history;
|
||||
}
|
||||
// 获取变更记录
|
||||
@@ -578,6 +594,9 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
|
||||
}
|
||||
List<NutMap> changeList = new ArrayList<>();
|
||||
for (String fieldName : allowChangeFieldNames) {
|
||||
if (allowChangeFieldNames.contains("retireDate") || allowChangeFieldNames.contains("welfareStopDate")) {
|
||||
continue;
|
||||
}
|
||||
memberCommonService.extractChange(newMap, sourceMap, fieldName, dictMap, changeList);
|
||||
}
|
||||
if (Lang.isEmpty(changeList)) {
|
||||
|
||||
@@ -21,12 +21,15 @@ public enum MemberChangeType {
|
||||
RESTORE("RESTORE","入会"),
|
||||
WITHDRAWAL("WITHDRAWAL","退会"),
|
||||
WORK("WORK","在职"),
|
||||
LEAVE_SCHOOL("LEAVE_SCHOOL","离校"),
|
||||
MATERNITY_LEAVE("MATERNITY_LEAVE","产假"),
|
||||
LONG_SICK_LEAVE("LONG_SICK_LEAVE","长病假"),
|
||||
RETIRE("RETIRE","退休"),
|
||||
RESIGN("RESIGN","辞职"),
|
||||
OUT("OUT","调出"),
|
||||
RESIGN("RESIGN","辞职"),
|
||||
LEAVE_OFFICE("LEAVE_OFFICE","离职"),
|
||||
DEATH("DEATH","死亡"),
|
||||
OTHER("OTHER","其他"),
|
||||
END_OF_SECONDMENT("END_OF_SECONDMENT","挂职结束"),
|
||||
UNIT_CHANGE("UNIT_CHANGE","单位异动"),
|
||||
UNION_CHANGE("UNION_CHANGE","工会关系异动"),
|
||||
BASIC_CHANGE("BASIC_CHANGE","基本信息异动");
|
||||
|
||||
+5
-1
@@ -112,6 +112,7 @@ public class MemberChangeManageController {
|
||||
@Param(value = "personType", required = false) String personType,
|
||||
@Param(value = "userState", required = false) String userState,
|
||||
@Param(value = "preparedBy", required = false) String preparedBy,
|
||||
@Param(value = "personalStatus", required = false) String personalStatus,
|
||||
@Param(value = "changeDate", required = false) String changeDate,
|
||||
@Param(value = "changeTypes", required = false) String[] changeTypes,
|
||||
@Param(value = "changed", required = false) Integer changed,
|
||||
@@ -166,6 +167,7 @@ public class MemberChangeManageController {
|
||||
cnd.andEX("u.personType", "=", personType);
|
||||
cnd.andEX("u.userState", "=", userState);
|
||||
cnd.andEX("u.preparedBy", "=", preparedBy);
|
||||
cnd.andEX("u.personalStatus", "=", personalStatus);
|
||||
|
||||
if (StrUtil.isAllNotBlank(pageForm.getSearchName(), pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
@@ -362,12 +364,14 @@ public class MemberChangeManageController {
|
||||
public Object allIsWelfareMember(PageForm pageForm,
|
||||
@Param(value = "startDate", required = false) String startDate,
|
||||
@Param(value = "endDate", required = false) String endDate,
|
||||
@Param(value = "birthMonth", required = false) String birthMonth,
|
||||
@Param(value = "year", required = false) Integer year,
|
||||
@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 = "personTypes", required = false) String[] personTypes,
|
||||
@Param(value = "personalStatus", required = false) String[] personalStatus,
|
||||
@Param(value = "userStates", required = false) String[] userStates,
|
||||
@Param(value = "memberStatus", required = false) String[] memberStatus,
|
||||
@Param(value = "campus", required = false) String campus,
|
||||
@@ -380,7 +384,7 @@ public class MemberChangeManageController {
|
||||
@Param(value = "memberSearchKeyWord", required = false) String memberSearchKeyWord,
|
||||
@Param(value = "isAppendWelfareMember", required = false) Boolean isAppendWelfareMember) {
|
||||
int yyyy = Calendar.getInstance().get(Calendar.YEAR);
|
||||
Cnd cnd = MemberUtils.getCnd(pageForm, startDate, endDate, unionId, unitId, personTypes, userStates, null, memberTypes, sexTypes, age, null, roleIds, null, null, memberStatus, threeUnitId, unionGroupId, reverseSelection, null, null, campus);
|
||||
Cnd cnd = MemberUtils.getCnd(pageForm, startDate, endDate, birthMonth, unionId, unitId, personTypes, personalStatus, userStates, null, memberTypes, sexTypes, age, null, roleIds, null, null, memberStatus, threeUnitId, unionGroupId, reverseSelection, null, null, campus);
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT u.* from $table
|
||||
LEFT JOIN sys_user_role sur ON sur.userid = u.id
|
||||
|
||||
+6
-2
@@ -73,12 +73,14 @@ public class MemberInquireIntegrateController {
|
||||
@Param(value = "isUnion", required = false) String isUnion,
|
||||
@Param(value = "startDate", required = false) String startDate,
|
||||
@Param(value = "endDate", required = false) String endDate,
|
||||
@Param(value = "birthMonth", required = false) String birthMonth,
|
||||
@Param(value = "year", required = false) Integer year,
|
||||
@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 = "personTypes", required = false) String[] personTypes,
|
||||
@Param(value = "personalStatus", required = false) String[] personalStatus,
|
||||
@Param(value = "userStates", required = false) String[] userStates,
|
||||
@Param(value = "preparedBys", required = false) String[] preparedBys,
|
||||
@Param(value = "memberStatus", required = false) String[] memberStatus,
|
||||
@@ -93,7 +95,7 @@ public class MemberInquireIntegrateController {
|
||||
@Param(value = "memberSearchKeyWord", required = false) String memberSearchKeyWord) {
|
||||
int yyyy = Calendar.getInstance().get(Calendar.YEAR);
|
||||
|
||||
Cnd cnd = MemberUtils.getCnd(pageForm, startDate, endDate, unionId, unitId, personTypes, userStates, preparedBys, memberTypes, sexTypes, age, null, roleIds, null, null, memberStatus, threeUnitId, unionGroupId, reverseSelection, null, null, campus);
|
||||
Cnd cnd = MemberUtils.getCnd(pageForm, startDate, endDate, birthMonth, unionId, unitId, personTypes, personalStatus, userStates, preparedBys, memberTypes, sexTypes, age, null, roleIds, null, null, memberStatus, threeUnitId, unionGroupId, reverseSelection, null, null, campus);
|
||||
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT u.* from $table
|
||||
@@ -442,12 +444,14 @@ public class MemberInquireIntegrateController {
|
||||
@Param(value = "searchKeyword", required = false) String searchKeyword,
|
||||
@Param(value = "startDate", required = false) String startDate,
|
||||
@Param(value = "endDate", required = false) String endDate,
|
||||
@Param(value = "birthMonth", required = false) String birthMonth,
|
||||
@Param(value = "year", required = false) Integer year,
|
||||
@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 = "personTypes", required = false) String[] personTypes,
|
||||
@Param(value = "personalStatus", required = false) String[] personalStatus,
|
||||
@Param(value = "userStates", required = false) String[] userStates,
|
||||
@Param(value = "preparedBys", required = false) String[] preparedBys,
|
||||
@Param(value = "memberStatus", required = false) String[] memberStatus,
|
||||
@@ -464,7 +468,7 @@ public class MemberInquireIntegrateController {
|
||||
try {
|
||||
int yyyy = Calendar.getInstance().get(Calendar.YEAR);
|
||||
|
||||
Cnd cnd = MemberUtils.getCnd(null, startDate, endDate, unionId, unitId, personTypes, userStates, preparedBys, memberTypes, sexTypes, age, null, roleIds, null, null, memberStatus, threeUnitId, unionGroupId, reverseSelection, null, null, campus);
|
||||
Cnd cnd = MemberUtils.getCnd(null, startDate, endDate, birthMonth, unionId, unitId, personTypes, personalStatus, userStates, preparedBys, memberTypes, sexTypes, age, null, roleIds, null, null, memberStatus, threeUnitId, unionGroupId, reverseSelection, null, null, campus);
|
||||
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT u.* from $table
|
||||
|
||||
+5
-4
@@ -20,6 +20,7 @@ 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.sourcechange.model.SourceChangeMiddleTable;
|
||||
import io.v.nutz.zhgh.staffmanage.specialstaff.model.SpecialStaff;
|
||||
import io.v.nutz.zhgh.welfare.model.WelfareList;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -280,15 +281,11 @@ public class MemberCommonServiceImpl extends ViServiceImpl<Sys_user> implements
|
||||
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("教职工");
|
||||
}
|
||||
|
||||
// 加入福利会员 是否加入福利项目
|
||||
@@ -356,6 +353,10 @@ public class MemberCommonServiceImpl extends ViServiceImpl<Sys_user> implements
|
||||
sysUserService.clearCache();
|
||||
sysRoleService.clearCache();
|
||||
|
||||
// 去查询手动更新记录表,删除状态是未操作,变更类型是新入职的
|
||||
dao().clear(SourceChangeMiddleTable.class, Cnd.where("loginname", "=", history.getLoginname())
|
||||
.and("changeInfoStr", "=", "新入职").and("isOperate", "=", 0));
|
||||
|
||||
sysUserService.deleteCacheAndUpdate(info.getId());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package io.v.nutz.zhgh.staffmanage.member.utils;
|
||||
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import io.v.nutz.base.query.PageForm;
|
||||
import io.v.nutz.zhgh.activity.models.ActivityUserCnd;
|
||||
@@ -22,9 +23,11 @@ public class MemberUtils {
|
||||
public static Cnd getCnd(PageForm pageForm,
|
||||
String startDate,
|
||||
String endDate,
|
||||
String birthMonth,
|
||||
String[] unionId,
|
||||
String[] unitId,
|
||||
String[] personTypes,
|
||||
String[] personalStatus,
|
||||
String[] userStates,
|
||||
String[] preparedBys,
|
||||
String[] memberTypes,
|
||||
@@ -117,12 +120,16 @@ public class MemberUtils {
|
||||
cnd.and(group);*/
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(birthMonth)) {
|
||||
cnd.and("MONTH(birthday)", EQ_OR_NEQ_OP, NumberUtil.parseInt(birthMonth));
|
||||
}
|
||||
cnd.andEX("u.unionid", IN_OR_NIN_OP, unionId);
|
||||
cnd.andEX("u.unitid", IN_OR_NIN_OP, unitId);
|
||||
cnd.andEX("u.threeUnitId", IN_OR_NIN_OP, threeUnitId);
|
||||
cnd.andEX("u.unionGroupId", IN_OR_NIN_OP, unionGroupId);
|
||||
cnd.andEX("u.campus", EQ_OR_NEQ_OP, campus);
|
||||
cnd.andEX("u.personType", IN_OR_NIN_OP, personTypes);
|
||||
cnd.andEX("u.personalStatus", IN_OR_NIN_OP, personalStatus);
|
||||
cnd.andEX("u.userState", IN_OR_NIN_OP, userStates);
|
||||
cnd.andEX("u.preparedBy", IN_OR_NIN_OP, preparedBys);
|
||||
cnd.andEX("u.sex", IN_OR_NIN_OP, sexTypes);
|
||||
|
||||
+7
-7
@@ -106,13 +106,13 @@ public class SourceChangeManageController {
|
||||
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());
|
||||
cnd.andEX("u.unionId", "=", pageForm.getUnionId());
|
||||
cnd.andEX("u.unitId", "=", pageForm.getUnitId());
|
||||
cnd.andEX("u.sex", "=", pageForm.getSex());
|
||||
cnd.andEX("scmt.personType", "=", pageForm.getPersonType());
|
||||
cnd.andEX("scmt.preparedBy", "=", pageForm.getPreparedBy());
|
||||
cnd.andEX("scmt.userState", "=", pageForm.getUserState());
|
||||
cnd.andEX("scmt.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 {
|
||||
|
||||
+16
-7
@@ -69,6 +69,19 @@ public class SourceChangeManageServiceImpl extends BaseServiceImpl<SourceChangeM
|
||||
@Override
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public void doSourceChange(SourceChangeMiddleTable middleTable) {
|
||||
// 是不是退休,退休就去设置成非会员
|
||||
if ("退休".equals(middleTable.getUserState())) {
|
||||
middleTable.setMember(0);
|
||||
middleTable.setIsExitActivityMemberScope(true);
|
||||
|
||||
if (DateUtil.parseDate(middleTable.getWelfareStopDate()).isAfter(DateUtil.date())) {
|
||||
middleTable.setWelfareMember(1);
|
||||
} else {
|
||||
middleTable.setWelfareMember(0);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 记录当前操作的时间,用于后续区分短信通知
|
||||
Date date = DateUtil.date();
|
||||
// 是否新入职
|
||||
@@ -145,15 +158,11 @@ public class SourceChangeManageServiceImpl extends BaseServiceImpl<SourceChangeM
|
||||
userRole.setRoleId(Roles.MEMBER);
|
||||
dao().insert(userRole);
|
||||
}
|
||||
// 杭医特有,其他学校请删除
|
||||
middleTable.setPreparedBy("会员");
|
||||
} else {
|
||||
if (middleTable.getIsExitActivityMemberScope() != null && 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("教职工");
|
||||
}
|
||||
|
||||
// 加入福利会员 是否加入福利项目
|
||||
@@ -253,9 +262,9 @@ public class SourceChangeManageServiceImpl extends BaseServiceImpl<SourceChangeM
|
||||
*/
|
||||
@Override
|
||||
public void sendMsgToNewTeacher(SourceChangeMiddleTable middleTable) {
|
||||
String context = "尊敬的%s老师,欢迎您加入杭州医学院大家庭,请您点击此条信息或登录“智慧工会”平台申请成为杭医工会会员!"
|
||||
.formatted(middleTable.getUsername());
|
||||
String link = Globals.AppDomain + "/platform/member/apply/submit/h5";
|
||||
// String context = "尊敬的%s老师,欢迎您加入杭州医学院大家庭,请您点击此条信息或登录“智慧工会”平台申请成为杭医工会会员!"
|
||||
// .formatted(middleTable.getUsername());
|
||||
// String link = Globals.AppDomain + "/platform/member/apply/submit/h5";
|
||||
// msgApi.sendMsg(List.of("DingTalk"), middleTable.getLoginname(), 2, "入会邀请", context, "", link);
|
||||
}
|
||||
|
||||
|
||||
@@ -285,6 +285,7 @@ layout("/layouts/platform.html"){
|
||||
const resp = await $.post(loc() + '/pull')
|
||||
this.pullLoading = false
|
||||
if(resp.code===0){
|
||||
await this.getLatelyUpdateTimes()
|
||||
this.pageData()
|
||||
}else{
|
||||
this.notifyWarning(resp.msg)
|
||||
|
||||
@@ -100,6 +100,7 @@ layout("/layouts/platform.html"){
|
||||
style="width: 200px"
|
||||
v-model="pageForm.changeDate"
|
||||
type="date"
|
||||
@change="doSearch"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="更新日期">
|
||||
</el-date-picker>
|
||||
|
||||
@@ -134,26 +134,43 @@ const MEMBER_CHANGE = {
|
||||
:disabled="allowFields('userState')" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<template v-if="formData.userState == '退休'">
|
||||
<el-descriptions-item label="退休日期">
|
||||
<el-form-item prop="retireDate">
|
||||
<el-date-picker v-model="formData.retireDate"
|
||||
type="date"
|
||||
placeholder="请选择出生日期"
|
||||
format="yyyy-MM-dd"
|
||||
value-format="yyyy-MM-dd"
|
||||
style="width: 100%"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<el-descriptions-item label="人员类型">
|
||||
<el-form-item prop="personType">
|
||||
<dict-select v-model="formData.personType" code="PERSON_TYPE"
|
||||
:disabled="allowFields('personType')" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item v-if="formData.userState == null || formData.userState != '退休'"></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="费用类型">
|
||||
<el-form-item prop="personType">
|
||||
<dict-select v-model="formData.personalStatus" code="USER_PERSONAL_STATUS"
|
||||
:disabled="allowFields('personalStatus')" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<template v-if="formData.userState == '退休' && $auth.hasRoleOr('sysadmin, SchoolUnionMemberAdmin, SchoolUnionAdmin')">
|
||||
<el-descriptions-item label="退休日期">
|
||||
<el-form-item prop="retireDate">
|
||||
<el-date-picker v-model="formData.retireDate"
|
||||
type="date"
|
||||
placeholder="请选择退休日期"
|
||||
format="yyyy-MM-dd"
|
||||
value-format="yyyy-MM-dd"
|
||||
style="width: 100%"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="福利享受截止日期">
|
||||
<el-form-item prop="welfareStopDate">
|
||||
<el-date-picker v-model="formData.welfareStopDate"
|
||||
type="date"
|
||||
placeholder="请选择福利享受截止日期"
|
||||
format="yyyy-MM-dd"
|
||||
value-format="yyyy-MM-dd"
|
||||
style="width: 100%"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
</template>
|
||||
|
||||
<el-descriptions-item label="会员状态">
|
||||
<el-form-item prop="member">
|
||||
<el-radio-group v-model="formData.member" size="small">
|
||||
|
||||
@@ -88,7 +88,7 @@ layout("/layouts/platform.html"){
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">人员类型:</div>
|
||||
<div class="search-item-label">人员性质:</div>
|
||||
<div class="search-item-option">
|
||||
<dict-select v-model="pageForm.preparedBy"
|
||||
style="width: 100%"
|
||||
@@ -97,14 +97,24 @@ layout("/layouts/platform.html"){
|
||||
code="PREPARED_BY"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">费用类型:</div>
|
||||
<div class="search-item-option">
|
||||
<dict-select v-model="pageForm.personalStatus"
|
||||
style="width: 100%"
|
||||
clearable
|
||||
placeholder="费用类型"
|
||||
code="USER_PERSONAL_STATUS"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">变更类型:</div>
|
||||
<div class="search-item-option">
|
||||
<enum-select v-model="pageForm.changeTypes"
|
||||
enum="MemberChangeType"
|
||||
label="changeTypeName"
|
||||
multiple
|
||||
value="type"
|
||||
style="width: 100%"
|
||||
clearable
|
||||
|
||||
@@ -53,6 +53,13 @@ layout("/layouts/platform.html"){
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.monthStyle{
|
||||
.el-date-picker__header--bordered {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
@@ -181,30 +188,30 @@ layout("/layouts/platform.html"){
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row type="flex" align="middle" class="query-row">
|
||||
<el-col class="query-row-title">会员状态:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-tag
|
||||
style="margin-right: 10px;cursor: pointer"
|
||||
v-for="item in memberStatusOptions"
|
||||
:key="item.code"
|
||||
:type="item.name"
|
||||
:effect="pageForm.memberStatus.includes(item.code)?'dark':'plain'"
|
||||
@click="checkMemberStatusType(item.code)">
|
||||
{{ item.name }}
|
||||
</el-tag>
|
||||
<!-- <el-row type="flex" align="middle" class="query-row">-->
|
||||
<!-- <el-col class="query-row-title">会员状态:</el-col>-->
|
||||
<!-- <el-col class="query-row-content">-->
|
||||
<!-- <el-tag-->
|
||||
<!-- style="margin-right: 10px;cursor: pointer"-->
|
||||
<!-- v-for="item in memberStatusOptions"-->
|
||||
<!-- :key="item.code"-->
|
||||
<!-- :type="item.name"-->
|
||||
<!-- :effect="pageForm.memberStatus.includes(item.code)?'dark':'plain'"-->
|
||||
<!-- @click="checkMemberStatusType(item.code)">-->
|
||||
<!-- {{ item.name }}-->
|
||||
<!-- </el-tag>-->
|
||||
|
||||
<el-link type="danger"
|
||||
v-if="memberStatusOptions.length&&pageForm.memberStatus.length"
|
||||
:underline="false"
|
||||
@click="pageForm.memberStatus=[];doSearch()">清空
|
||||
</el-link>
|
||||
<el-link :underline="false"
|
||||
@click="pageForm.memberStatus=memberStatusOptions.map(p=>p.code);doSearch()"
|
||||
type="success">全部
|
||||
</el-link>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<!-- <el-link type="danger"-->
|
||||
<!-- v-if="memberStatusOptions.length&&pageForm.memberStatus.length"-->
|
||||
<!-- :underline="false"-->
|
||||
<!-- @click="pageForm.memberStatus=[];doSearch()">清空-->
|
||||
<!-- </el-link>-->
|
||||
<!-- <el-link :underline="false"-->
|
||||
<!-- @click="pageForm.memberStatus=memberStatusOptions.map(p=>p.code);doSearch()"-->
|
||||
<!-- type="success">全部-->
|
||||
<!-- </el-link>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- </el-row>-->
|
||||
<el-row type="flex" align="middle" class="query-row">
|
||||
<el-col class="query-row-title">人员类型:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
@@ -280,7 +287,33 @@ layout("/layouts/platform.html"){
|
||||
</el-link>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
|
||||
<el-row type="flex" align="middle" class="query-row">
|
||||
<el-col class="query-row-title">费用类型:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-tag
|
||||
style="margin-right: 10px;cursor: pointer"
|
||||
v-for="item in personalStatusOptions"
|
||||
:key="item.code"
|
||||
:type="item.name"
|
||||
:effect="pageForm.personalStatus.includes(item.name)?'dark':'plain'"
|
||||
@click="tagClick('personalStatus',item.name)">
|
||||
{{ item.name }}
|
||||
</el-tag>
|
||||
|
||||
<el-link type="danger"
|
||||
v-if="personalStatusOptions.length&&pageForm.personalStatus.length"
|
||||
:underline="false"
|
||||
@click="pageForm.personalStatus=[];doSearch()">清空
|
||||
</el-link>
|
||||
<el-link :underline="false"
|
||||
@click="pageForm.personalStatus=personalStatusOptions.map(p=>p.code);doSearch()"
|
||||
type="success">全部
|
||||
</el-link>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row type="flex" align="middle" class="query-row">
|
||||
<el-col class="query-row-title">系统角色:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
@@ -334,14 +367,23 @@ layout("/layouts/platform.html"){
|
||||
v-model="pageForm.startDate"
|
||||
type="date"
|
||||
@change="determineStartDate"
|
||||
placeholder="选择开始日期">
|
||||
placeholder="选择出生开始日期">
|
||||
</el-date-picker>
|
||||
<el-date-picker
|
||||
v-model="pageForm.endDate"
|
||||
type="date"
|
||||
@change="determineEndDate"
|
||||
placeholder="选择结束日期">
|
||||
placeholder="选择出生结束日期">
|
||||
</el-date-picker>
|
||||
<el-date-picker
|
||||
v-model="pageForm.birthMonth"
|
||||
popper-class="monthStyle"
|
||||
value-format="MM"
|
||||
format="MM"
|
||||
@change="doSearch"
|
||||
type="month"
|
||||
placeholder="请选择月度">
|
||||
</el-date-picker>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
@@ -560,6 +602,7 @@ layout("/layouts/platform.html"){
|
||||
personTypes: [],
|
||||
userStates: [],
|
||||
preparedBys: [],
|
||||
personalStatus: [],
|
||||
memberStatus: [],
|
||||
year: moment().format('YYYY'),
|
||||
roleIds: [],
|
||||
@@ -573,9 +616,11 @@ layout("/layouts/platform.html"){
|
||||
startDate: '',
|
||||
endDate: '',
|
||||
memberType:2,
|
||||
birthMonth: '',
|
||||
},
|
||||
|
||||
personTypeOptions: [],
|
||||
personalStatusOptions: [],
|
||||
userStateOptions: [],
|
||||
preparedByOptions: [],
|
||||
memberStatusOptions: [],
|
||||
@@ -645,6 +690,7 @@ layout("/layouts/platform.html"){
|
||||
pageForm.personTypes = JSON.stringify(pageForm.personTypes)
|
||||
pageForm.userStates = JSON.stringify(pageForm.userStates)
|
||||
pageForm.preparedBys = JSON.stringify(pageForm.preparedBys)
|
||||
pageForm.personalStatus = JSON.stringify(pageForm.personalStatus)
|
||||
pageForm.memberStatus = JSON.stringify(pageForm.memberStatus)
|
||||
|
||||
pageForm.memberTypes = JSON.stringify(pageForm.memberTypes)
|
||||
@@ -667,18 +713,22 @@ layout("/layouts/platform.html"){
|
||||
const personTypes = JSON.stringify(this.pageForm.personTypes)
|
||||
const userStates = JSON.stringify(this.pageForm.userStates)
|
||||
const preparedBys = JSON.stringify(this.pageForm.preparedBys)
|
||||
const personalStatus = JSON.stringify(this.pageForm.personalStatus)
|
||||
window.location.href = loc() + "/doExport?unionId=" + this.pageForm.unionId + "&unitId=" + this.pageForm.unitId
|
||||
+ "&year=" + this.pageForm.year
|
||||
+ "&birthMonth=" + this.pageForm.birthMonth
|
||||
+ "&memberStatus=" + memberStatus
|
||||
+ "&personTypes=" + personTypes
|
||||
+ "&userStates=" + userStates
|
||||
+ "&preparedBys=" + preparedBys
|
||||
+ "&personalStatus=" + personalStatus
|
||||
},
|
||||
doExportByUnion() {
|
||||
const memberStatus = JSON.stringify(this.pageForm.memberStatus)
|
||||
const personTypes = JSON.stringify(this.pageForm.personTypes)
|
||||
const userStates = JSON.stringify(this.pageForm.userStates)
|
||||
const preparedBys = JSON.stringify(this.pageForm.preparedBys)
|
||||
const personalStatus = JSON.stringify(this.pageForm.personalStatus)
|
||||
const unionId = JSON.stringify(this.pageForm.unionId)
|
||||
const unitId = JSON.stringify(this.pageForm.unitId)
|
||||
const unionGroupId = JSON.stringify(this.pageForm.unionGroupId)
|
||||
@@ -695,6 +745,7 @@ layout("/layouts/platform.html"){
|
||||
const {
|
||||
startDate,
|
||||
endDate,
|
||||
birthMonth,
|
||||
campus,
|
||||
memberType,
|
||||
reverseSelection,
|
||||
@@ -705,11 +756,11 @@ layout("/layouts/platform.html"){
|
||||
window.location.href = loc() + "/doExportByUnion?=searchName=" + this.pageForm.searchName
|
||||
+ "&searchKeyword=" + this.pageForm.searchKeyword + "&unitId=" + unitId + "&unionId=" + unionId
|
||||
+ "&unionGroupId=" + unionGroupId + "&threeUnitId=" + threeUnitId + "&sexTypes=" + sexTypes + "&memberType=" + memberType
|
||||
+ "&roleIds=" + roleIds + "&age=" + age + "&year=" + this.pageForm.year + "&memberStatus=" + memberStatus
|
||||
+ "&roleIds=" + roleIds + "&age=" + age + "&year=" + this.pageForm.year + "&memberStatus=" + memberStatus + "&birthMonth=" + birthMonth
|
||||
+ "&startDate=" + (startDate ? this.getDate(startDate) : '') + "&endDate=" + (endDate ? this.getDate(endDate) : '') + "&campus=" + (campus ? campus : '')
|
||||
+ "&reverseSelection=" + (reverseSelection ? reverseSelection : '') + "&memberSearchName=" + (memberSearchName ? memberSearchName : '')
|
||||
+ "&memberSearchKeyWord=" + (memberSearchKeyWord ? memberSearchKeyWord : '') + "&personTypes=" + personTypes
|
||||
+ "&userStates=" + userStates + "&preparedBys=" + preparedBys + "&props=" + JSON.stringify(props)
|
||||
+ "&userStates=" + userStates + "&preparedBys=" + preparedBys + "&personalStatus=" + personalStatus + "&props=" + JSON.stringify(props)
|
||||
},
|
||||
getDate(date) {
|
||||
let year = date.getFullYear();
|
||||
@@ -796,6 +847,7 @@ layout("/layouts/platform.html"){
|
||||
pageForm.personTypes = JSON.stringify(pageForm.personTypes)
|
||||
pageForm.userStates = JSON.stringify(pageForm.userStates)
|
||||
pageForm.preparedBys = JSON.stringify(pageForm.preparedBys)
|
||||
pageForm.personalStatus = JSON.stringify(pageForm.personalStatus)
|
||||
pageForm.memberStatus = JSON.stringify(pageForm.memberStatus)
|
||||
|
||||
pageForm.memberTypes = JSON.stringify(pageForm.memberTypes)
|
||||
@@ -844,6 +896,7 @@ layout("/layouts/platform.html"){
|
||||
this.pageForm.personTypes = []
|
||||
this.pageForm.userStates = []
|
||||
this.pageForm.preparedBys = []
|
||||
this.pageForm.personalStatus = []
|
||||
this.pageForm.unionId = []
|
||||
this.pageForm.unitId = []
|
||||
this.pageForm.activityGroupId = []
|
||||
@@ -858,6 +911,7 @@ layout("/layouts/platform.html"){
|
||||
this.pageForm.reverseSelection = false
|
||||
this.pageForm.startDate = ''
|
||||
this.pageForm.endDate = ''
|
||||
this.pageForm.birthMonth = ''
|
||||
this.doSearch()
|
||||
},
|
||||
tagClick(key, val) {
|
||||
@@ -897,6 +951,7 @@ layout("/layouts/platform.html"){
|
||||
this.flushUnits()
|
||||
}
|
||||
this.personTypeOptions = await getDictOptions("PERSON_TYPE")
|
||||
this.personalStatusOptions = await getDictOptions("USER_PERSONAL_STATUS")
|
||||
this.userStateOptions = await getDictOptions("USER_STATE")
|
||||
this.preparedByOptions = await getDictOptions("PREPARED_BY")
|
||||
this.memberStatusOptions = await getDictOptions("memberStatusText")
|
||||
|
||||
@@ -43,10 +43,10 @@ const COMMON_QUERY = {
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">人员类型</div>
|
||||
<div class="search-item-label">人员性质</div>
|
||||
<div class="search-item-option">
|
||||
<dict-select v-model="pageForm.personType" style="width: 100%" placeholder="人员类型" @change="doSearch"
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
<dict-select v-model="pageForm.preparedBy" style="width: 100%" placeholder="人员性质" @change="doSearch"
|
||||
code="PREPARED_BY"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
|
||||
@@ -153,25 +153,26 @@ layout("/layouts/platform.html"){
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
const url = "/platform/sourcechange/manage/doBatchChange"
|
||||
let isSendMsg = false
|
||||
const isHasNewTeacher = this.checkUsers.some(v=> v.changeInfosStr === '新入职')
|
||||
|
||||
const ids = this.checkUsers.map(item => item.id)
|
||||
if (isHasNewTeacher) {
|
||||
this.$confirm('勾选用户中有新入职教工,是否对新入职教职工发送入会邀请?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
isSendMsg = true
|
||||
this.doOperate(url, ids, isSendMsg)
|
||||
}).catch(() => {
|
||||
isSendMsg = false
|
||||
this.doOperate(url, ids, isSendMsg)
|
||||
})
|
||||
} else {
|
||||
await this.doOperate(url, ids, isSendMsg)
|
||||
}
|
||||
await this.doOperate(url, ids, false)
|
||||
// let isSendMsg = false
|
||||
// const isHasNewTeacher = this.checkUsers.some(v=> v.changeInfosStr === '新入职')
|
||||
//
|
||||
// const ids = this.checkUsers.map(item => item.id)
|
||||
// if (isHasNewTeacher) {
|
||||
// this.$confirm('勾选用户中有新入职教工,是否对新入职教职工发送入会邀请?', '提示', {
|
||||
// confirmButtonText: '确定',
|
||||
// cancelButtonText: '取消',
|
||||
// type: 'warning'
|
||||
// }).then(() => {
|
||||
// isSendMsg = true
|
||||
// this.doOperate(url, ids, isSendMsg)
|
||||
// }).catch(() => {
|
||||
// isSendMsg = false
|
||||
// this.doOperate(url, ids, isSendMsg)
|
||||
// })
|
||||
// } else {
|
||||
// await this.doOperate(url, ids, isSendMsg)
|
||||
// }
|
||||
})
|
||||
},
|
||||
tableHandleSelectionChange(val){
|
||||
@@ -179,22 +180,23 @@ layout("/layouts/platform.html"){
|
||||
},
|
||||
async doSubmit(formData){
|
||||
const url = "/platform/sourcechange/manage/doSubmit"
|
||||
let isSendMsg = false;
|
||||
if (formData.changeInfosStr === '新入职') {
|
||||
this.$confirm('该职工是新入职职工,是否发送入会邀请?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
isSendMsg = true
|
||||
await this.doOperate(url, formData, isSendMsg)
|
||||
}).catch(async () => {
|
||||
isSendMsg = false
|
||||
await this.doOperate(url, formData, isSendMsg)
|
||||
})
|
||||
} else {
|
||||
await this.doOperate(url, formData, isSendMsg)
|
||||
}
|
||||
await this.doOperate(url, formData, false)
|
||||
// let isSendMsg = false;
|
||||
// if (formData.changeInfosStr === '新入职') {
|
||||
// this.$confirm('该职工是新入职职工,是否发送入会邀请?', '提示', {
|
||||
// confirmButtonText: '确定',
|
||||
// cancelButtonText: '取消',
|
||||
// type: 'warning'
|
||||
// }).then(async () => {
|
||||
// isSendMsg = true
|
||||
// await this.doOperate(url, formData, isSendMsg)
|
||||
// }).catch(async () => {
|
||||
// isSendMsg = false
|
||||
// await this.doOperate(url, formData, isSendMsg)
|
||||
// })
|
||||
// } else {
|
||||
// await this.doOperate(url, formData, isSendMsg)
|
||||
// }
|
||||
},
|
||||
async doOperate(url, data, isSendMsg) {
|
||||
const loading = this.$loading({
|
||||
|
||||
@@ -26,8 +26,14 @@ const USER_CHANGE_INFO = {
|
||||
|
||||
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="进校时间">{{ viewData.schoolTime }}</el-descriptions-item>
|
||||
|
||||
<template v-if="viewData.userState == '退休'">
|
||||
<el-descriptions-item label="退休日期">{{ viewData.retireDate ? moment(viewData.retireDate).format("YYYY-MM-DD") : '暂无' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="福利享受截止日期">{{ moment(viewData.welfareStopDate).format("YYYY-MM-DD") }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
</template>
|
||||
|
||||
<el-descriptions-item label="会员状态">{{ viewData.member ? '会员' : '非会员' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="福利会员状态">{{ viewData.welfareMember ? '福利会员' : '非福利会员' }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
@@ -189,26 +195,18 @@ const USER_CHANGE_INFO = {
|
||||
:disabled="allowFields('userState')" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<template v-if="formData.userState == '退休'">
|
||||
<el-descriptions-item label="退休日期">
|
||||
<el-form-item prop="retireDate">
|
||||
<el-date-picker v-model="formData.retireDate"
|
||||
type="date"
|
||||
:disabled="isView"
|
||||
placeholder="请选择出生日期"
|
||||
format="yyyy-MM-dd"
|
||||
value-format="yyyy-MM-dd"
|
||||
style="width: 100%"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<el-descriptions-item label="人员类型">
|
||||
<el-form-item prop="personType">
|
||||
<dict-select v-model="formData.personType" code="PERSON_TYPE"
|
||||
:disabled="allowFields('personType')" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item v-if="formData.userState == null || formData.userState != '退休'"></el-descriptions-item>
|
||||
<el-descriptions-item label="费用类型">
|
||||
<el-form-item prop="personalStatus">
|
||||
<dict-select v-model="formData.personalStatus" code="USER_PERSONAL_STATUS"
|
||||
:disabled="allowFields('personalStatus')" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="会员状态">
|
||||
<el-form-item prop="member">
|
||||
@@ -229,8 +227,34 @@ const USER_CHANGE_INFO = {
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
|
||||
|
||||
<template v-if="formData.userState == '退休'">
|
||||
<el-descriptions-item label="退休日期">
|
||||
<el-form-item prop="retireDate">
|
||||
<el-date-picker v-model="formData.retireDate"
|
||||
type="date"
|
||||
:disabled="isView"
|
||||
placeholder="请选择退休日期"
|
||||
format="yyyy-MM-dd"
|
||||
value-format="yyyy-MM-dd"
|
||||
style="width: 100%"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="福利享受截止日期">
|
||||
<el-form-item prop="welfareStopDate">
|
||||
<el-date-picker v-model="formData.welfareStopDate"
|
||||
type="date"
|
||||
:disabled="isView"
|
||||
placeholder="请选择福利享受截止日期"
|
||||
format="yyyy-MM-dd"
|
||||
value-format="yyyy-MM-dd"
|
||||
style="width: 100%"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
</template>
|
||||
|
||||
<template v-if="formData.member == 1 && !isView">
|
||||
<el-descriptions-item label="是否加入会员组别">
|
||||
<el-form-item prop="member">
|
||||
|
||||
Reference in New Issue
Block a user