251023南昌大学交流文档整改

This commit is contained in:
Paidax
2025-10-30 11:40:25 +08:00
parent 291f307f04
commit 9bf2c1cae5
46 changed files with 3837 additions and 255 deletions
@@ -1,19 +1,24 @@
package com.budwk.app.sys.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.lang.tree.TreeNode;
import cn.hutool.core.lang.tree.TreeUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.constant.BpmProcessConstant;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.exception.BaseException;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.bpm.service.BpmService;
import com.budwk.app.base.utils.PageUtil;
import com.budwk.app.flow.constant.FlowConst;
import com.budwk.app.flow.engine.FlowEngine;
import com.budwk.app.flow.entity.ProcessInstance;
import com.budwk.app.flow.entity.ProcessTask;
import com.budwk.app.flow.enums.ProcessSubmitTypeEnum;
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
import com.budwk.app.sys.models.*;
import com.budwk.app.sys.services.*;
import com.budwk.app.sys.views.View_user;
@@ -41,35 +46,30 @@ import org.nutz.mvc.annotation.Param;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@IocBean
@At("/platform/sys/union")
@Ok("json:full")
@Api(tags = "分工会管理")
@At("/platform/sys/union")
public class SysUnionController {
@Inject
private SysUnionService sysUnionService;
private Dao dao;
@Inject
private FlowEngine flowEngine;
@Inject
private SysDictService sysDictService;
@Inject
private SysRoleService sysRoleService;
@Inject
private SysUserService sysUserService;
@Inject
private SysUnitService sysUnitService;
@Inject
private BpmService bpmService;
@Inject
private Dao dao;
private SysUnionService sysUnionService;
@At("")
@Ok("beetl:/platform/sys/union/index.html")
@@ -266,28 +266,43 @@ public class SysUnionController {
Sql sql = Sqls.create("""
SELECT
t1.userId,
t2.username,
t2.loginname,
t3.`code` AS roleCode,
t3.`name` AS roleName
info.*,
role.`name` AS roleName,
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
ins.variable instanceVariable,
ins.processDefineId instanceProcessDefineId,
t.id taskId,
t.taskName AS taskKey,
t.displayName taskName,
t.taskType,
t.performType taskPerformType,
t.taskState,
t.finishTime,
t.taskParentId,
t.variable taskVariable,
IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke,
(select MAX(id) from wf_process_task where processInstanceId = ins.id and taskName = 'startTask' AND taskState in (10,20)) AS startTaskId
FROM
sys_user_role t1
LEFT JOIN sys_user t2 ON t2.id = t1.userId
LEFT JOIN sys_role t3 ON t3.id = t1.roleId
sys_union_cadre info
LEFT JOIN sys_role role ON role.`code` = info.roleCode
LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id
LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
$condition
""");
Cnd cnd = Cnd.where("t3.`code`", "in", branchUnionRoleCodes);
cnd.and("t1.unionId", "=", unionId);
Cnd cnd = Cnd.where("role.`code`", "in", branchUnionRoleCodes);
cnd.and("info.unionId", "=", unionId);
if (StrUtil.isAllNotBlank(pageForm.getSearchName(), pageForm.getSearchKeyword())) {
switch (pageForm.getSearchName()) {
case "loginname" -> cnd.where().andLike("t2.loginname", pageForm.getSearchKeyword());
case "username" -> cnd.where().andLike("t2.username", pageForm.getSearchKeyword());
case "roleName" -> cnd.where().andLike("t3.`name`", pageForm.getSearchKeyword());
case "loginname" -> cnd.where().andLike("info.loginname", pageForm.getSearchKeyword());
case "username" -> cnd.where().andLike("info.username", pageForm.getSearchKeyword());
case "roleName" -> cnd.where().andLike("role.`name`", pageForm.getSearchKeyword());
}
}
// cnd.asc("t2.username");
cnd.and(new Static("1=1 order by field(t3.code," + branchUnionRoleCodes.stream().map(code -> "'" + code + "'").collect(Collectors.joining(",")) + ")"));
cnd.and(new Static("1=1 order by field(role.code," + branchUnionRoleCodes.stream().map(code -> "'" + code + "'").collect(Collectors.joining(",")) + ")"));
sql.setCondition(cnd);
List<NutMap> list = sysUserService.listMap(sql);
return Result.success(list);
@@ -319,16 +334,54 @@ public class SysUnionController {
// bpmService.startSubmitProcessInstance(BpmProcessConstant.BRANCH_UNION_WEIYUAN_AUTHORIZATION.name(), instanceName, permission.getId(), List.of("24017"), null);
sysRoleService.clear("sys_user_role", Cnd.where("roleId", "=", role.getId()).and("userId", "=", userId).and("unionId", "=", unionId));
sysRoleService.insert("sys_user_role", Chain.make("roleId", role.getId()).add("userId", userId).add("unionId", unionId));
sysRoleService.clearCache();
sysUserService.clearCache();
// sysRoleService.clear("sys_user_role", Cnd.where("roleId", "=", role.getId()).and("userId", "=", userId).and("unionId", "=", unionId));
// sysRoleService.insert("sys_user_role", Chain.make("roleId", role.getId()).add("userId", userId).add("unionId", unionId));
// sysRoleService.clearCache();
// sysUserService.clearCache();
// 构建表结构存储
View_user user = dao.fetch(View_user.class, Cnd.where("id", "=", userId));
Sys_union_cadre unionCadre = new Sys_union_cadre();
unionCadre.setUserId(userId);
unionCadre.setUnionId(unionId);
unionCadre.setMobile(user.getMobile());
unionCadre.setUnionName(user.getUnionName());
unionCadre.setLoginName(user.getLoginname());
unionCadre.setUserName(user.getUsername());
unionCadre.setRoleCode(roleCode);
unionCadre.setApplyDate(new Date());
unionCadre.setIsJoin(true);
dao.insert(unionCadre);
// 去走工作流
boolean isAdmin = AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name());
Dict args = Dict.create();
args.set("submit", isAdmin ? "admin" : "branch");
args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode());
args.set(FlowConst.FORM_DATA, unionCadre);
ProcessInstance instance = flowEngine.startProcessInstanceByKey("JCGHWY", unionCadre.getId(), SecurityUtil.getUserId(), args);
// 自动完成第一个申请任务
List<ProcessTask> doingTaskList = flowEngine.processTaskService().getDoingTaskList(instance.getId(), null);
for (ProcessTask task : doingTaskList) {
flowEngine.executeProcessTask(task.getId(), SecurityUtil.getUserId(), args);
}
if (isAdmin) {
// 如果是管理员,直接加角色
sysRoleService.clear("sys_user_role", Cnd.where("roleId", "=", role.getId()).and("userId", "=", userId).and("unionId", "=", unionId));
sysRoleService.insert("sys_user_role", Chain.make("roleId", role.getId()).add("userId", userId).add("unionId", unionId));
sysRoleService.clearCache();
sysUserService.clearCache();
}
return Result.success();
}
@At
@SaCheckPermission("sys.manager.union.branchOfficer")
@ApiOperation("删除分工会人员角色")
@SaCheckPermission("sys.manager.union.branchOfficer")
public Result deleteBranchUnionUserRole(String userId, String roleCode, String unionId) {
Sys_role role = sysRoleService.fetch(Cnd.where("code", "=", roleCode));
if (Lang.isEmpty(role)) {
@@ -344,6 +397,10 @@ public class SysUnionController {
cnd.and("unionId", "=", unionId);
sysRoleService.clear("sys_user_role", cnd);
dao.clear(Sys_union_cadre.class, Cnd.where("userId", "=", userId)
.and("unionId", "=", unionId).and("roleCode", "=", roleCode));
sysRoleService.clearCache();
sysUserService.clearCache();
return Result.success();
@@ -395,22 +452,78 @@ public class SysUnionController {
@At
@ApiOperation("按关键字查询分工会下的人员")
@Ok("json:{ignoreNull:true}")
@SaCheckPermission("sys.manager.union.partUnit")
@SaCheckPermission("sys.manager.union")
public Result listUserSelect(@Valid String unionId, @Valid String keyWord) {
Sql sql = Sqls.create("select id,loginname,username,unitname from vw_user $condition");
Sql sql = Sqls.create("select id,loginname,username,unitName from vw_user $condition");
Cnd cnd = Cnd.NEW();
cnd.and(View_user::getUnionId, "=", unionId);
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike(View_user::getLoginname, keyWord, true);
seg.orLike(View_user::getUsername, keyWord, true);
cnd.and(seg);
cnd.limit(1, 10);
sql.setCondition(cnd);
sql.setCallback(Sqls.callback.entities());
sql.setEntity(dao.getEntity(View_user.class));
dao.execute(sql);
List<View_user> list = sql.getList(View_user.class);
return Result.success(list);
Pagination pagination = sysUnionService.listPageMap(1, 10, sql);
return Result.success(pagination.getList());
}
/**
* 基层干部审核相关
*/
@At
@ApiOperation("基层干部审核菜单")
@SaCheckPermission("sys.manager.union")
public Result cadrePageData(PageForm pageForm, @Param("isJoin") Boolean isJoin) {
Sql sql = Sqls.create("""
SELECT
info.*,
role.`name` AS roleName,
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
ins.variable instanceVariable,
ins.processDefineId instanceProcessDefineId,
t.id taskId,
t.taskName AS taskKey,
t.displayName taskName,
t.taskType,
t.performType taskPerformType,
t.taskState,
t.finishTime,
t.taskParentId,
t.variable taskVariable,
IFNULL(GROUP_CONCAT(DISTINCT nt.displayName), '结束') curTaskName,
IF(rt.id IS NOT NULL, 1, 0) AS canRevoke
FROM
wf_process_task t
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
LEFT JOIN sys_union_cadre info ON info.id = ins.businessNo
LEFT JOIN sys_role role ON role.`code` = info.roleCode
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10
LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("t.taskName", "=", "2978a74a-75c1-4f95-99f9-9c08c480f1b5");
if (pageForm.getAudit()) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(),
ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
} else {
cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode());
}
cnd.andEX("info.isJoin", "=", isJoin);
if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
cnd.desc("t.createdAt");
cnd.desc("info.applyDate");
} else {
cnd.orderBy("info." + pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
}
cnd.groupBy("t.id");
sql.setCondition(cnd);
Pagination pagination = sysUnionService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
}
@@ -0,0 +1,53 @@
package com.budwk.app.sys.interceptor;
import cn.hutool.json.JSONUtil;
import com.budwk.app.flow.constant.FlowConst;
import com.budwk.app.flow.engine.FlowInterceptor;
import com.budwk.app.flow.engine.core.Execution;
import com.budwk.app.flow.engine.core.ServiceContext;
import com.budwk.app.flow.enums.ProcessSubmitTypeEnum;
import com.budwk.app.sys.models.Sys_role;
import com.budwk.app.sys.models.Sys_union_cadre;
import com.budwk.app.sys.services.SysRoleService;
import com.budwk.app.sys.services.SysUserService;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
/**
* @version 1.0
* @Author FKY
* @nameSysUnionSchoolAuditInterceptor
* @Date 2025/10/28 10:15
* @注释
*/
public class SysUnionSchoolAuditInterceptor implements FlowInterceptor {
@Override
public void intercept(Execution execution) {
// 是否审核通过
boolean submitType = execution.getArgs().getInt("submitType").equals(ProcessSubmitTypeEnum.AGREE.getCode());
if (submitType) {
// 审核通过,添加相应的角色
String formDataStr = execution.getArgs().getStr(FlowConst.FORM_DATA);
SysRoleService sysRoleService = ServiceContext.find(SysRoleService.class);
SysUserService sysUserService = ServiceContext.find(SysUserService.class);
// 表单数据
Sys_union_cadre unionBean = JSONUtil.toBean(formDataStr, Sys_union_cadre.class);
// 清除对应角色然后再新增
Sys_role role = sysRoleService.getByCode(unionBean.getRoleCode());
sysRoleService.clear("sys_user_role", Cnd.where("roleId", "=", role.getId())
.and("userId", "=", unionBean.getUserId()).and("unionId", "=", unionBean.getUnionId()));
sysRoleService.insert("sys_user_role", Chain.make("roleId", role.getId())
.add("userId", unionBean.getUserId()).add("unionId", unionBean.getUnionId()));
// 清除缓存
sysRoleService.clearCache();
sysUserService.clearCache();
}
// 未审核通过,不作操作
}
}
@@ -0,0 +1,73 @@
package com.budwk.app.sys.models;
import com.budwk.app.base.model.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert;
import java.util.Date;
/**
* @version 1.0
* @Author FKY
* @nameSys_union_cadre
* @Date 2025/10/28 10:22
* @注释
*/
@Data
@Table
@EqualsAndHashCode(callSuper = true)
public class Sys_union_cadre extends BaseModel {
@Name
@Comment("ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
@PrevInsert(uu32 = true)
private String id;
@Column
@Comment("工会Id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unionId;
@Column
@Comment("工会名称")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String unionName;
@Column
@Comment("用户Id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String userId;
@Column
@Comment("用户名称")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String userName;
@Column
@Comment("工号")
@ColDefine(type = ColType.VARCHAR, width = 20)
private String loginName;
@Column
@Comment("联系方式")
@ColDefine(type = ColType.VARCHAR, width = 20)
private String mobile;
@Column
@Comment("角色编码")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String roleCode;
@Column
@Comment("添加时间")
@ColDefine(type = ColType.DATETIME)
private Date applyDate;
@Column
@Comment("加入还是退出")
@ColDefine(type = ColType.BOOLEAN)
private Boolean isJoin;
}
@@ -258,6 +258,7 @@ public class Sys_user extends BaseModel implements Serializable {
private Integer loginCount;
@Column
@DataCenterColumn(name = "单位号", key = "dwh")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unitId;
@@ -114,8 +114,6 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl<Sys_user_source>
Map<String, List<Sys_data_dict>> dataDictMap = dataDictList.stream().collect(Collectors.groupingBy(Sys_data_dict::getParentCode));
Map<String, NutMap> financeUserMap = pullFinance();
// // 博士后进站日期数据
// Map<String, Date> doctoralData = pullPostDoctoral();
// 获取配置文件 接口地址 和 token
DataCenterProperties.Credential credential = dataCenterProperties.credential("teacher");
@@ -167,11 +165,15 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl<Sys_user_source>
// 特殊处理 根据身份证号获取性别和出生年月
if ("sfzjh".equals(mapping.field.getName())) {
String idCard = raw.getStr(mapping.key);
if (StrUtil.isNotBlank(idCard)) {
int gender = IdcardUtil.getGenderByIdCard(idCard);
// 性别(1 : 男 0 : 女)
sysUser.setSex(gender == 1 ? "" : "");
mapping.field.set(sysUser, raw.getStr(mapping.key));
if (StrUtil.isNotBlank(idCard) && IdcardUtil.isValidCard(idCard)) {
try {
int gender = IdcardUtil.getGenderByIdCard(idCard);
// 性别(1 : 男 0 : 女)
sysUser.setSex(gender == 1 ? "" : "");
mapping.field.set(sysUser, raw.getStr(mapping.key));
} catch (Exception e) {
sysUser.setSex(null);
}
}
} else {
mapping.field.set(sysUser, raw.getStr(mapping.key));
@@ -185,8 +187,7 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl<Sys_user_source>
}
}
// 设置单位相关信息
sysUser.setUnitId(raw.getStr("dwh"));
// 设置拉取时间
sysUser.setPullTime(nowDate);
// 判断财务信息有没有值,