人员管理

This commit is contained in:
Paidax
2025-04-18 11:48:59 +08:00
parent 236f32a741
commit 300286fa58
20 changed files with 426 additions and 231 deletions
@@ -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, "", "");
}
}
}
@@ -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","基本信息异动");
@@ -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
@@ -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
@@ -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);
@@ -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 {
@@ -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">