commit
This commit is contained in:
@@ -53,9 +53,9 @@ public class Globals {
|
||||
//项目短名称
|
||||
public static String AppShrotName = "";
|
||||
//项目域名 (设置一个默认的 为优先级考虑)
|
||||
public static String AppDomain = "https://zhgh.zufe.edu.cn";
|
||||
public static String AppDomain = "https://zhgh.hmc.edu.cn";
|
||||
//cas地址
|
||||
public static String CasAddress = "https://cas.zufe.edu.cn/cas";
|
||||
public static String CasAddress = "https://newca.hmc.edu.cn/cas";
|
||||
//文件访问域名
|
||||
public static String AppFileDomain = "";
|
||||
//文件上传路径
|
||||
@@ -69,7 +69,7 @@ public class Globals {
|
||||
//微信map
|
||||
public static NutMap WxMap = NutMap.NEW();
|
||||
//高校名称
|
||||
public static String schoolName = "浙江财经大学";
|
||||
public static String schoolName = "杭州医学院";
|
||||
|
||||
public static String BrandActivityName = "";
|
||||
|
||||
@@ -122,9 +122,11 @@ public class Globals {
|
||||
List<Sys_task> taskList = sysTaskService.query();
|
||||
for (Sys_task sysTask : taskList) {
|
||||
try {
|
||||
if (!sysTask.isDisabled())//不存在则新建
|
||||
if (!sysTask.isDisabled()) {
|
||||
//不存在则新建
|
||||
taskPlatformService.add(sysTask.getId(), sysTask.getId(), sysTask.getJobClass(), sysTask.getCron()
|
||||
, sysTask.getNote(), sysTask.getData());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ public interface SourceData {
|
||||
* @param jsonResult 接口返回数据
|
||||
*/
|
||||
private static void checkSuccess(NutMap jsonResult) {
|
||||
Assert.isTrue(jsonResult.getBoolean("success"), jsonResult.getString("data"));
|
||||
// Assert.isTrue(jsonResult.getBoolean("success"), jsonResult.getString("data"));
|
||||
}
|
||||
|
||||
/* *//**
|
||||
@@ -157,10 +157,8 @@ public interface SourceData {
|
||||
while (hasRecords) {
|
||||
String body = HttpUtil.createPost(DATA_URL).body(JSON.toJSONString(new NutMap().addv("address", "jzgjbxx").addv("params", new NutMap())
|
||||
.addv("token", "3318a5a9-c2f2-4c8b-a8ea-e99dd68c165c").addv("pageIndex", page).addv("pageSize", 1000))).execute().body();
|
||||
// String body = HttpUtil.get(DATA_URL, new NutMap().addv("address", "jzgjbxx").addv("params", new NutMap())
|
||||
// .addv("token", "3318a5a9-c2f2-4c8b-a8ea-e99dd68c165c").addv("pageIndex", page).addv("pageSize", 1000));
|
||||
NutMap map = Json.fromJson(NutMap.class, body);
|
||||
checkSuccess(map);
|
||||
// checkSuccess(map);
|
||||
List<NutMap> data = map.getAsList("data", NutMap.class);
|
||||
for (NutMap row : data) {
|
||||
Map entity = new HashMap(1000);
|
||||
@@ -179,7 +177,7 @@ public interface SourceData {
|
||||
users.add(BeanUtil.mapToBean(entity, UserSource.class, true));
|
||||
}
|
||||
int totalCount = map.getInt("totalCount");
|
||||
maxPage = (int) Math.ceil((double) totalCount / page);
|
||||
maxPage = (int) Math.ceil((double) totalCount / 1000);
|
||||
page++;
|
||||
if (page > maxPage) {
|
||||
hasRecords = false;
|
||||
@@ -212,11 +210,11 @@ public interface SourceData {
|
||||
List<Sys_unit> units = new ArrayList<>();
|
||||
int page = 1;
|
||||
String body = HttpUtil.createPost(DATA_URL).body(JSON.toJSONString(new NutMap().addv("address", "rsxt_dwjbsj").addv("params", new NutMap())
|
||||
.addv("token", "3318a5a9-c2f2-4c8b-a8ea-e99dd68c165c").addv("pageIndex", page).addv("pageSize", 1000))).execute().body();
|
||||
.addv("token", "3318a5a9-c2f2-4c8b-a8ea-e99dd68c165c").addv("pageIndex", page).addv("pageSize", 100))).execute().body();
|
||||
// String body = HttpUtil.get(DATA_URL, new NutMap().addv("address", "rsxt_dwjbsj").addv("params", new NutMap())
|
||||
// .addv("token", "3318a5a9-c2f2-4c8b-a8ea-e99dd68c165c").addv("pageIndex", page).addv("pageSize", 1000));
|
||||
NutMap map = Json.fromJson(NutMap.class, body);
|
||||
checkSuccess(map);
|
||||
// checkSuccess(map);
|
||||
List<NutMap> data = map.getAsList("data", NutMap.class);
|
||||
|
||||
for (NutMap row : data) {
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package io.v.nutz.zhgh.data.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
@@ -14,7 +13,6 @@ import io.v.nutz.zhgh.data.model.UserHistory;
|
||||
import io.v.nutz.zhgh.data.model.UserSource;
|
||||
import io.v.nutz.zhgh.data.service.HistoryUserService;
|
||||
import io.v.nutz.zhgh.data.service.SourceUserService;
|
||||
import io.v.nutz.base.lang.Enum;
|
||||
import io.v.nutz.zhgh.member.UserMode;
|
||||
import io.v.nutz.base.service.AsyncService;
|
||||
import io.v.nutz.base.service.impl.ViServiceImpl;
|
||||
@@ -30,7 +28,6 @@ import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.FieldFilter;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.entity.Record;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.Daos;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
@@ -47,9 +44,10 @@ import org.springframework.util.StringUtils;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.*;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import java.util.concurrent.locks.Lock;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
/**
|
||||
* @author 1V
|
||||
*/
|
||||
@@ -83,12 +81,6 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
|
||||
public void pullSourceData(Boolean isIncrement) {
|
||||
Date now = new Date();
|
||||
List<UserSource> users = SourceData.users();
|
||||
/* List<UserSource> userSourceList = users.stream().filter(v -> !v.getUserState().equals("离校")).collect(Collectors.toList());
|
||||
//离退休劳模,要更新到系统
|
||||
List<String> userPartUpLoginNameList = userPatUpService.query(Cnd.where("groupId", "=", 2)).stream().map(UserPartUp::getLoginname).collect(Collectors.toList());
|
||||
//离退休超过两年
|
||||
List<UserSource> retireUser = userSourceList.stream().filter(v -> v.getRetireDate() != null && DateUtil.betweenYear(v.getRetireDate(), DateUtil.date(), false) > 2L && !userPartUpLoginNameList.contains(v.getLoginname())).collect(Collectors.toList());
|
||||
users = userSourceList.stream().filter(v -> !retireUser.contains(v)).collect(Collectors.toList());*/
|
||||
asyncService.exe2(users, (user) -> {
|
||||
user.setPullTime(now);
|
||||
UserMode.initUser(user);
|
||||
@@ -176,7 +168,7 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
|
||||
}
|
||||
}
|
||||
|
||||
List<UserChangeType> changeTypes = getChangeTypes(source, user);
|
||||
List<UserChangeType> changeTypes = getChangeTypes(source, user, sourceType);
|
||||
if (changeTypes.contains(UserChangeType.NEW)) {
|
||||
user = UserMode.initUser(u);
|
||||
needInitUserList.add(user);
|
||||
@@ -220,6 +212,7 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
|
||||
// sysRoleService.clearCache();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
throw new RuntimeException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -237,35 +230,38 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
|
||||
dao().clear(UserSource.class, Cnd.where("DATE(pullTime)", "<", formatAgoWeekDate));
|
||||
}
|
||||
|
||||
private List<UserChangeType> getChangeTypes(Sys_user source, Sys_user user) {
|
||||
private List<UserChangeType> getChangeTypes(Sys_user source, Sys_user user, String sourceType) {
|
||||
List<UserChangeType> userChangeTypes = new ArrayList<>();
|
||||
if (user == null) {
|
||||
userChangeTypes.add(UserChangeType.NEW);
|
||||
return userChangeTypes;
|
||||
}
|
||||
if (!StringUtils.isEmpty(source.getUnitid()) && !source.getUnitid().equals(user.getUnitid())) {
|
||||
userChangeTypes.add(UserChangeType.UNIT_CHANGE);
|
||||
}
|
||||
if (!StringUtils.isEmpty(user.getUserState()) && StrUtil.isNotEmpty(source.getUserState()) && !source.getUserState().equals(user.getUserState())) {
|
||||
for (UserChangeType value : UserChangeType.values()) {
|
||||
if (value.getDescription().equals(source.getUserState())) {
|
||||
userChangeTypes.add(value);
|
||||
} else {
|
||||
if ("add".equals(sourceType)) {
|
||||
return userChangeTypes;
|
||||
}
|
||||
if (!StringUtils.isEmpty(source.getUnitid()) && !source.getUnitid().equals(user.getUnitid())) {
|
||||
userChangeTypes.add(UserChangeType.UNIT_CHANGE);
|
||||
}
|
||||
if (!StringUtils.isEmpty(user.getUserState()) && StrUtil.isNotEmpty(source.getUserState()) && !source.getUserState().equals(user.getUserState())) {
|
||||
for (UserChangeType value : UserChangeType.values()) {
|
||||
if (value.getDescription().equals(source.getUserState())) {
|
||||
userChangeTypes.add(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
List<String> columns = List.of("nation", "birthday", "personType", "political", "schoolTime", "jobTitle", "education", "academicDegree", "position", "leaveSchoolDate", "retireDate");
|
||||
for (String column : columns) {
|
||||
NutMap userSourceMap = Lang.obj2nutmap(source);
|
||||
NutMap userMap = Lang.obj2nutmap(user);
|
||||
String sourceValue = userSourceMap.getString(column, "");
|
||||
String value = userMap.getString(column, "");
|
||||
if (!sourceValue.equals(value) && StrUtil.isNotBlank(sourceValue)) {
|
||||
userChangeTypes.add(UserChangeType.BASIC_CHANGE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
List<String> columns = List.of("nation", "birthday", "personType", "political", "schoolTime", "jobTitle", "education", "academicDegree", "position", "leaveSchoolDate", "retireDate");
|
||||
for (String column : columns) {
|
||||
NutMap userSourceMap = Lang.obj2nutmap(source);
|
||||
NutMap userMap = Lang.obj2nutmap(user);
|
||||
String sourceValue = userSourceMap.getString(column, "");
|
||||
String value = userMap.getString(column, "");
|
||||
if (!sourceValue.equals(value) && StrUtil.isNotBlank(sourceValue)) {
|
||||
userChangeTypes.add(UserChangeType.BASIC_CHANGE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return userChangeTypes;
|
||||
}
|
||||
|
||||
@@ -304,53 +300,51 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
|
||||
* @param filterColumnDao 部分更新传递(部分更新存在过滤字段)
|
||||
*/
|
||||
private void massUpdatesAsync(List<Sys_user> needDoUpdateList, Boolean isPart, AtomicReference<Dao> filterColumnDao) {
|
||||
// 根据服务器性能和任务特性动态确定线程池大小;通常,线程池大小为CPU核心数的2倍
|
||||
// 创建一个CPU核心数的2倍的线程池
|
||||
int numberOfThreads = Runtime.getRuntime().availableProcessors() * 2;
|
||||
ExecutorService executorService = Executors.newFixedThreadPool(numberOfThreads);
|
||||
ExecutorCompletionService<Void> ecs = new ExecutorCompletionService<>(executorService);
|
||||
|
||||
// 每批处理的数据量
|
||||
int batchSize = 100;
|
||||
|
||||
int batchSize = 200;
|
||||
// 共享锁
|
||||
Lock lock = new ReentrantLock();
|
||||
try {
|
||||
// 将sources分成若干批
|
||||
for (int i = 0; i < needDoUpdateList.size(); i += batchSize) {
|
||||
final int end = Math.min(i + batchSize, needDoUpdateList.size());
|
||||
List<Sys_user> batch = needDoUpdateList.subList(i, end);
|
||||
|
||||
// 提交任务给线程池执行
|
||||
ecs.submit(() -> {
|
||||
Dao daoToUse = isPart ? filterColumnDao.get() : dao();
|
||||
// 执行数据库更新操作
|
||||
synchronized (daoToUse) {
|
||||
lock.lock();
|
||||
try {
|
||||
daoToUse.updateIgnoreNull(batch);
|
||||
} finally {
|
||||
lock.unlock();
|
||||
}
|
||||
return null; // CompletionService需要一个返回值,这里返回null
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
// 等待所有任务完成
|
||||
for (int i = 0; i < needDoUpdateList.size(); i += batchSize) {
|
||||
try {
|
||||
Future<Void> future = ecs.take();
|
||||
future.get(); // 等待任务完成
|
||||
future.get();
|
||||
} catch (InterruptedException | ExecutionException e) {
|
||||
Thread.currentThread().interrupt(); // 恢复中断状态
|
||||
throw new RuntimeException(e);
|
||||
Thread.currentThread().interrupt();
|
||||
throw new RuntimeException("Error during batch update", e);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
log.error("Error in massUpdatesAsync", e);
|
||||
throw new RuntimeException("Error in massUpdatesAsync", e);
|
||||
} finally {
|
||||
// 关闭线程池
|
||||
executorService.shutdown();
|
||||
try {
|
||||
// 设置合理的超时时间,防止无限期阻塞
|
||||
if (!executorService.awaitTermination(10, TimeUnit.SECONDS)) {
|
||||
executorService.shutdownNow(); // 如果超时,强制关闭
|
||||
executorService.shutdownNow();
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt(); // 恢复中断状态
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import io.v.nutz.sys.services.SysRoleService;
|
||||
import io.v.nutz.sys.services.SysUserService;
|
||||
import io.v.nutz.zhgh.data.constant.UserChangeType;
|
||||
import io.v.nutz.zhgh.data.model.UserHistory;
|
||||
import io.v.nutz.zhgh.member.MemberMode;
|
||||
import io.v.nutz.zhgh.member.UserMode;
|
||||
import io.v.nutz.zhgh.member.WelfareMemberMode;
|
||||
import io.v.nutz.zhgh.member.constant.MemberStatus;
|
||||
@@ -49,13 +50,10 @@ public enum MemberChangeHandle {
|
||||
@Override
|
||||
public void change(MemberChangeRecord record) {
|
||||
archive(record.getUserId(), UserChangeType.NEW);
|
||||
if (null != record.getInsertMember() && record.getInsertMember()){
|
||||
UserMode.addMemberRole(record.getUserId());
|
||||
if (null != record.getUpdateMember() && record.getUpdateMember()){
|
||||
sysUserService.update(Chain.make("schoolTime", DateUtil.today()),Cnd.where("id","=",record.getUserId()));
|
||||
}
|
||||
if (null != record.getUpdateWelfareMember() && record.getUpdateWelfareMember()) {
|
||||
sysUserService.update(Chain.make("welfareMember", WelfareMemberMode.NORMAL.getCode()).add("schoolTime", DateUtil.today()), Cnd.where("id", "=", record.getUserId()));
|
||||
}
|
||||
updateMemberAndWelfareMember(record);
|
||||
sysUserService.clearCache();
|
||||
sysRoleService.clearCache();
|
||||
}
|
||||
@@ -65,8 +63,8 @@ public enum MemberChangeHandle {
|
||||
public void change(MemberChangeRecord record) {
|
||||
archive(record.getUserId(), UserChangeType.RESIGN);
|
||||
UserMode.removeMemberRole(record.getUserId());
|
||||
updateWelfareMember(record);
|
||||
updateMemberStatus(MemberStatus.TURN_OUT, record.getUserId());
|
||||
updateMemberAndWelfareMember(record);
|
||||
// updateMemberStatus(MemberStatus.TURN_OUT, record.getUserId());
|
||||
updateUserStateAndPersonType(record);
|
||||
}
|
||||
},
|
||||
@@ -85,8 +83,8 @@ public enum MemberChangeHandle {
|
||||
public void change(MemberChangeRecord record) {
|
||||
archive(record.getUserId(), UserChangeType.RETIREMENT);
|
||||
UserMode.removeMemberRole(record.getUserId());
|
||||
updateWelfareMember(record);
|
||||
updateMemberStatus(MemberStatus.KEEP, record.getUserId());
|
||||
updateMemberAndWelfareMember(record);
|
||||
// updateMemberStatus(MemberStatus.KEEP, record.getUserId());
|
||||
updateUserStateAndPersonType(record);
|
||||
}
|
||||
},
|
||||
@@ -106,9 +104,7 @@ public enum MemberChangeHandle {
|
||||
archive(record.getUserId(), UserChangeType.RESTORE);
|
||||
UserMode.addMemberRole(record.getUserId());
|
||||
updateMemberStatus(MemberStatus.RESTORE, record.getUserId());
|
||||
if (record.getUpdateWelfareMember()) {
|
||||
sysUserService.update(Chain.make("welfareMember", WelfareMemberMode.NORMAL.getCode()), Cnd.where("id", "=", record.getUserId()));
|
||||
}
|
||||
updateMemberAndWelfareMember(record);
|
||||
}
|
||||
},
|
||||
WITHDRAWAL(UserChangeType.WITHDRAWAL.getCode()) {
|
||||
@@ -116,7 +112,7 @@ public enum MemberChangeHandle {
|
||||
public void change(MemberChangeRecord record) {
|
||||
archive(record.getUserId(), UserChangeType.WITHDRAWAL);
|
||||
UserMode.removeMemberRole(record.getUserId());
|
||||
updateWelfareMember(record);
|
||||
updateMemberAndWelfareMember(record);
|
||||
updateMemberStatus(MemberStatus.WITHDRAWAL, record.getUserId());
|
||||
updateUserStateAndPersonType(record);
|
||||
}
|
||||
@@ -171,14 +167,17 @@ public enum MemberChangeHandle {
|
||||
*
|
||||
* @param record 变更记录
|
||||
*/
|
||||
public static void updateWelfareMember(MemberChangeRecord record) {
|
||||
//record.getUpdateWelfareMember() (true:增加福利会员 false:取消福利会员);针对入会(恢复)
|
||||
if (null != record.getUpdateWelfareMember() && record.getUpdateWelfareMember()) {
|
||||
sysUserService.update(Chain.make("welfareMember", WelfareMemberMode.NORMAL.getCode()), Cnd.where("id", "=", record.getUserId()));
|
||||
public static void updateMemberAndWelfareMember(MemberChangeRecord record) {
|
||||
if (null != record.getUpdateWelfareMember()) {
|
||||
sysUserService.update(Chain.make("welfareMember", record.getUpdateWelfareMember() ? WelfareMemberMode.NORMAL.getCode() : WelfareMemberMode.NONE.getCode()), Cnd.where("id", "=", record.getUserId()));
|
||||
}
|
||||
//record.getUpdateWelfare() (true:取消 false:不取消);针对(退休、离职、退会、去世)
|
||||
if (null != record.getUpdateWelfare() && record.getUpdateWelfare()){
|
||||
sysUserService.update(Chain.make("welfareMember", WelfareMemberMode.NONE.getCode()), Cnd.where("id", "=", record.getUserId()));
|
||||
if (null != record.getUpdateMember()){
|
||||
sysUserService.update(Chain.make("member", record.getUpdateMember() ? MemberMode.NORMAL.getCode() : MemberMode.NONE.getCode()), Cnd.where("id", "=", record.getUserId()));
|
||||
}
|
||||
if (null != record.getUpdateMember() && record.getUpdateMember()) {
|
||||
UserMode.addMemberRole(record.getUserId());
|
||||
} else {
|
||||
UserMode.removeMemberRole(record.getUserId());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -199,13 +198,11 @@ public enum MemberChangeHandle {
|
||||
* @param record 变更记录
|
||||
*/
|
||||
public static void updateUserStateAndPersonType(MemberChangeRecord record){
|
||||
Chain chain = null;
|
||||
if (Strings.isNotBlank(record.getChangeUserState()) && Strings.isNotBlank(record.getChangePersonType())){
|
||||
chain = Chain.make("userState",record.getChangeUserState()).add("personType",record.getChangePersonType());
|
||||
} else if (Strings.isNotBlank(record.getChangeUserState()) && Strings.isBlank(record.getChangePersonType())){
|
||||
chain = Chain.make("userState",record.getChangeUserState());
|
||||
} else if (Strings.isBlank(record.getChangeUserState()) && Strings.isNotBlank(record.getChangePersonType())){
|
||||
chain = Chain.make("personType",record.getChangePersonType());
|
||||
Chain chain = Chain.make("eCard",null);
|
||||
if (Strings.isNotBlank(record.getChangeUserState())) {
|
||||
chain.add("userState", record.getChangeUserState());
|
||||
} else if (Strings.isNotBlank(record.getChangePersonType())) {
|
||||
chain.add("personType", record.getChangePersonType());
|
||||
}
|
||||
sysUserService.update(chain,Cnd.where("id","=",record.getUserId()));
|
||||
}
|
||||
|
||||
@@ -124,16 +124,6 @@ public class MemberChangeRecord {
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
private Boolean updateMember;
|
||||
|
||||
@Column
|
||||
@Comment("福利会员身份(true:取消 false:不取消);针对(退休、离职、退会、去世)")
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
private Boolean updateWelfare;
|
||||
|
||||
@Column
|
||||
@Comment("是否增加会员身份(true:增加 false:不增加)")
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
private Boolean insertMember;
|
||||
|
||||
@Column
|
||||
@Comment("身份证号异动")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
|
||||
Reference in New Issue
Block a user