This commit is contained in:
2026-06-11 17:26:11 +08:00
parent ec1d9f1aa1
commit 67bf620d01
9 changed files with 227 additions and 19 deletions
+120 -2
View File
@@ -1,21 +1,39 @@
package com.budwk.app;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.sms.SmsService;
import com.budwk.app.flow.constant.FlowConst;
import com.budwk.app.flow.engine.FlowEngine;
import com.budwk.app.flow.engine.model.*;
import com.budwk.app.flow.entity.ProcessTask;
import com.budwk.app.flow.enums.ProcessSubmitTypeEnum;
import com.budwk.app.sys.models.Sys_role;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.sys.models.Sys_user_role;
import com.budwk.app.sys.services.SysRoleService;
import lombok.Data;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.boot.test.junit4.NbJUnit4Runner;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import java.util.List;
import java.util.Set;
import java.io.File;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@IocBean
@RunWith(NbJUnit4Runner.class)
@@ -23,6 +41,12 @@ public class FlowTest {
@Inject
private FlowEngine flowEngine;
@Inject
private Dao dao;
@Inject
private SmsService smsService;
@Inject
private SysRoleService sysRoleService;
@Test
@Aop(TransAop.READ_COMMITTED)
@@ -91,4 +115,98 @@ public class FlowTest {
}
@Test
public void importZJIPCMemberRoster() {
File dir = new File("C:\\Users\\mayn\\Desktop\\客户\\浙江工业职业学院\\基础数据\\浙江工业职业技术学院最新会员名册");
File[] files = dir.listFiles((file, name) -> name.endsWith(".xls") || name.endsWith(".xlsx"));
if (files == null || files.length == 0) {
System.out.println("未找到会员名单 Excel 文件");
return;
}
Arrays.sort(files, Comparator.comparing(File::getName));
ImportParams importParams = new ImportParams();
importParams.setTitleRows(1);
importParams.setHeadRows(1);
List<MemberRosterImportTemp> importList = new ArrayList<>();
for (File file : files) {
List<MemberRosterImportTemp> rows = ExcelImportUtil.importExcel(file, MemberRosterImportTemp.class, importParams);
importList.addAll(rows.stream()
.filter(row -> StrUtil.isNotBlank(row.getLoginName()))
.toList());
}
List<String> loginNames = importList.stream()
.map(MemberRosterImportTemp::getLoginName)
.map(String::trim)
.distinct()
.toList();
if (Lang.isEmpty(loginNames)) {
System.out.println("Excel 中未读取到有效教工号");
return;
}
Sys_role memberRole = sysRoleService.getByCode(RoleConstant.MEMBER);
if (memberRole == null) {
System.out.println("会员角色不存在");
return;
}
List<Sys_user> users = dao.query(Sys_user.class, Cnd.where(Sys_user::getLoginname, "in", loginNames));
Map<String, Sys_user> userMap = users.stream().collect(Collectors.toMap(Sys_user::getLoginname, Function.identity(), (a, b) -> a));
List<String> missingLoginNames = loginNames.stream()
.filter(loginName -> !userMap.containsKey(loginName))
.toList();
if (Lang.isNotEmpty(missingLoginNames)) {
System.out.println("系统中未匹配到的教工号:" + missingLoginNames);
}
List<String> userIds = users.stream().map(Sys_user::getId).distinct().toList();
if (Lang.isEmpty(userIds)) {
System.out.println("没有可导入为会员的用户");
return;
}
// 模仿 /platform/member/info/batchMake/batchMake:设置会员状态和入会时间。
dao.update(Sys_user.class, Chain.make("member", true)
.add("memberTime", DateUtil.now()),
Cnd.where(Sys_user::getId, "in", userIds));
List<Sys_user_role> existingRoles = dao.query(Sys_user_role.class, Cnd.where(Sys_user_role::getUserId, "in", userIds)
.and(Sys_user_role::getRoleId, "=", memberRole.getId()));
Set<String> hasRoleUserIds = existingRoles.stream().map(Sys_user_role::getUserId).collect(Collectors.toSet());
List<Sys_user_role> roleList = userIds.stream()
.filter(userId -> !hasRoleUserIds.contains(userId))
.map(userId -> {
Sys_user_role userRole = new Sys_user_role();
userRole.setUserId(userId);
userRole.setRoleId(memberRole.getId());
return userRole;
})
.toList();
if (Lang.isNotEmpty(roleList)) {
dao.insert(roleList);
}
System.out.println("Excel 读取人数:" + importList.size());
System.out.println("有效教工号数:" + loginNames.size());
System.out.println("匹配并设置会员人数:" + userIds.size());
System.out.println("新增会员角色人数:" + roleList.size());
}
@Data
public static class MemberRosterImportTemp {
@Excel(name = "姓名")
private String userName;
@Excel(name = "部门")
private String unitName;
@Excel(name = "教工号")
private String loginName;
@Excel(name = "联系电话")
private String mobile;
}
}