commit
This commit is contained in:
@@ -146,20 +146,22 @@ public class SysUnitController {
|
|||||||
@At
|
@At
|
||||||
@ApiOperation("按关键字查询单位下的人员")
|
@ApiOperation("按关键字查询单位下的人员")
|
||||||
@Ok("json:{ignoreNull:true}")
|
@Ok("json:{ignoreNull:true}")
|
||||||
public Result listUserSelect(@Valid String unitId, @Valid String keyWord) {
|
public Result listUserSelect(@Valid String unitId, @Valid String keyWord, @Valid String roleCode) {
|
||||||
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 cnd = Cnd.NEW();
|
||||||
cnd.and(View_user::getUnitId, "=", unitId);
|
// cnd.and(View_user::getUnitId, "=", unitId);
|
||||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
// SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||||
seg.orLike(View_user::getLoginname, keyWord, true);
|
// seg.orLike(View_user::getLoginname, keyWord, true);
|
||||||
seg.orLike(View_user::getUsername, keyWord, true);
|
// seg.orLike(View_user::getUsername, keyWord, true);
|
||||||
cnd.and(seg);
|
// cnd.and(seg);
|
||||||
cnd.limit(1, 10);
|
// cnd.limit(1, 10);
|
||||||
sql.setCondition(cnd);
|
// sql.setCondition(cnd);
|
||||||
sql.setCallback(Sqls.callback.entities());
|
// sql.setCallback(Sqls.callback.entities());
|
||||||
sql.setEntity(sysUnitService.dao().getEntity(View_user.class));
|
// sql.setEntity(sysUnitService.dao().getEntity(View_user.class));
|
||||||
sysUnitService.dao().execute(sql);
|
// sysUnitService.dao().execute(sql);
|
||||||
List<View_user> list = sql.getList(View_user.class);
|
// List<View_user> list = sql.getList(View_user.class);
|
||||||
|
// 人员范围判断放到 service 层,便于按单位干部角色复用同一套查询规则。
|
||||||
|
List<View_user> list = sysUnitService.listUserSelect(unitId, keyWord, roleCode);
|
||||||
return Result.success(list);
|
return Result.success(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,9 @@ package com.budwk.app.sys.services;
|
|||||||
|
|
||||||
import com.budwk.app.base.service.BaseService;
|
import com.budwk.app.base.service.BaseService;
|
||||||
import com.budwk.app.sys.models.Sys_unit;
|
import com.budwk.app.sys.models.Sys_unit;
|
||||||
|
import com.budwk.app.sys.views.View_user;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by wizzer on 2016/12/22.
|
* Created by wizzer on 2016/12/22.
|
||||||
@@ -22,6 +25,16 @@ public interface SysUnitService extends BaseService<Sys_unit> {
|
|||||||
*/
|
*/
|
||||||
void deleteAndChild(Sys_unit unit);
|
void deleteAndChild(Sys_unit unit);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按单位干部角色查询可选择人员。
|
||||||
|
*
|
||||||
|
* @param unitId 当前单位ID
|
||||||
|
* @param keyWord 人员工号或姓名关键字
|
||||||
|
* @param roleCode 当前选择的单位干部角色编码
|
||||||
|
* @return 可选择人员列表
|
||||||
|
*/
|
||||||
|
List<View_user> listUserSelect(String unitId, String keyWord, String roleCode);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 清空缓存
|
* 清空缓存
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,21 +1,27 @@
|
|||||||
package com.budwk.app.sys.services.impl;
|
package com.budwk.app.sys.services.impl;
|
||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.budwk.app.base.constant.RoleConstant;
|
||||||
import com.budwk.app.base.constant.RedisConstant;
|
import com.budwk.app.base.constant.RedisConstant;
|
||||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||||
import com.budwk.app.sys.models.Sys_unit;
|
import com.budwk.app.sys.models.Sys_unit;
|
||||||
import com.budwk.app.sys.services.SysUnitService;
|
import com.budwk.app.sys.services.SysUnitService;
|
||||||
|
import com.budwk.app.sys.views.View_user;
|
||||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||||
import org.nutz.dao.Chain;
|
import org.nutz.dao.Chain;
|
||||||
import org.nutz.dao.Cnd;
|
import org.nutz.dao.Cnd;
|
||||||
import org.nutz.dao.Dao;
|
import org.nutz.dao.Dao;
|
||||||
import org.nutz.dao.Sqls;
|
import org.nutz.dao.Sqls;
|
||||||
|
import org.nutz.dao.sql.Sql;
|
||||||
|
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||||
import org.nutz.ioc.aop.Aop;
|
import org.nutz.ioc.aop.Aop;
|
||||||
import org.nutz.ioc.loader.annotation.IocBean;
|
import org.nutz.ioc.loader.annotation.IocBean;
|
||||||
import org.nutz.lang.Strings;
|
import org.nutz.lang.Strings;
|
||||||
import org.nutz.plugins.wkcache.annotation.CacheDefaults;
|
import org.nutz.plugins.wkcache.annotation.CacheDefaults;
|
||||||
import org.nutz.plugins.wkcache.annotation.CacheRemoveAll;
|
import org.nutz.plugins.wkcache.annotation.CacheRemoveAll;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by wizzer on 2016/12/22.
|
* Created by wizzer on 2016/12/22.
|
||||||
*/
|
*/
|
||||||
@@ -69,6 +75,71 @@ public class SysUnitServiceImpl extends BaseServiceImpl<Sys_unit> implements Sys
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按单位干部角色查询可选择人员。
|
||||||
|
* 选择单位党委书记时,人员范围放大到当前单位所属分工会下所有单位的人员;
|
||||||
|
* 选择单位分管校领导时,查询已关联单位分管校领导角色的人员;其他角色保持当前单位范围。
|
||||||
|
*
|
||||||
|
* @param unitId 当前单位ID
|
||||||
|
* @param keyWord 人员工号或姓名关键字
|
||||||
|
* @param roleCode 当前选择的单位干部角色编码
|
||||||
|
* @return 可选择人员列表
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<View_user> listUserSelect(String unitId, String keyWord, String roleCode) {
|
||||||
|
Sql sql;
|
||||||
|
Cnd cnd = Cnd.NEW();
|
||||||
|
if ("UNIT_SCHOOL_LEADER".equals(roleCode)) {
|
||||||
|
sql = Sqls.create("""
|
||||||
|
select distinct
|
||||||
|
u.id,
|
||||||
|
u.loginname,
|
||||||
|
u.username,
|
||||||
|
u.unitname
|
||||||
|
from vw_user u
|
||||||
|
inner join sys_user_role ur on ur.userId = u.id
|
||||||
|
inner join sys_role r on r.id = ur.roleId
|
||||||
|
$condition
|
||||||
|
""");
|
||||||
|
// 单位分管校领导从已绑定 UNIT_SCHOOL_LEADER 角色的人员中选择。
|
||||||
|
cnd.and("r.code", "=", "UNIT_SCHOOL_LEADER");
|
||||||
|
} else {
|
||||||
|
sql = Sqls.create("select id,loginname,username,unitname from vw_user $condition");
|
||||||
|
}
|
||||||
|
if (RoleConstant.UNIT_PARTY_SECRETARY.name().equals(roleCode)) {
|
||||||
|
Sys_unit unit = this.fetch(unitId);
|
||||||
|
if (unit != null && Strings.isNotBlank(unit.getUnionId())) {
|
||||||
|
SqlExpressionGroup scopeGroup = new SqlExpressionGroup();
|
||||||
|
// 单位党委书记可从当前单位所属分工会下选择人员,同时保留本单位人员兜底。
|
||||||
|
scopeGroup.or(View_user::getUnionId, "=", unit.getUnionId());
|
||||||
|
scopeGroup.or(View_user::getUnitId, "=", unitId);
|
||||||
|
cnd.and(scopeGroup);
|
||||||
|
} else {
|
||||||
|
// 当前单位未维护分工会时,至少保留本单位人员可选。
|
||||||
|
cnd.and(View_user::getUnitId, "=", unitId);
|
||||||
|
}
|
||||||
|
} else if ("UNIT_SCHOOL_LEADER".equals(roleCode)) {
|
||||||
|
// 角色范围已经通过 sys_user_role 与 sys_role 关联限定,这里不再叠加单位范围。
|
||||||
|
} else {
|
||||||
|
cnd.and(View_user::getUnitId, "=", unitId);
|
||||||
|
}
|
||||||
|
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||||
|
if ("UNIT_SCHOOL_LEADER".equals(roleCode)) {
|
||||||
|
seg.orLike("u.loginname", keyWord, true);
|
||||||
|
seg.orLike("u.username", keyWord, true);
|
||||||
|
} else {
|
||||||
|
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);
|
||||||
|
return sql.getList(View_user.class);
|
||||||
|
}
|
||||||
|
|
||||||
@CacheRemoveAll
|
@CacheRemoveAll
|
||||||
public void clearCache() {
|
public void clearCache() {
|
||||||
|
|
||||||
|
|||||||
+14
-2
@@ -207,17 +207,29 @@ public class TeacherCongressDelegateManageController {
|
|||||||
`sys_user` t1
|
`sys_user` t1
|
||||||
LEFT JOIN sys_unit t2 ON t2.id = t1.unitId
|
LEFT JOIN sys_unit t2 ON t2.id = t1.unitId
|
||||||
WHERE
|
WHERE
|
||||||
t1.id NOT IN ( SELECT userId FROM teacher_congress_delegate WHERE sessionId = @sessionId AND delegationId = @delegationId )
|
-- 原逻辑只排除当前代表团已有人员:t1.id NOT IN ( SELECT userId FROM teacher_congress_delegate WHERE sessionId = @sessionId AND delegationId = @delegationId )
|
||||||
|
t1.id NOT IN ( SELECT userId FROM teacher_congress_delegate WHERE sessionId = @sessionId )
|
||||||
AND
|
AND
|
||||||
t1.unitId in (@unitIds)
|
t1.unitId in (@unitIds)
|
||||||
AND
|
AND
|
||||||
(t1.loginname like @keyWord or username like @keyWord)
|
(t1.loginname like @keyWord or username like @keyWord)
|
||||||
""");
|
""");
|
||||||
sql.setParam("sessionId", param.getSessionId());
|
sql.setParam("sessionId", param.getSessionId());
|
||||||
sql.setParam("delegationId", param.getDelegationId());
|
|
||||||
sql.setParam("unitIds", unitIds);
|
sql.setParam("unitIds", unitIds);
|
||||||
sql.setParam("keyWord", "%" + param.getKeyWord() + "%");
|
sql.setParam("keyWord", "%" + param.getKeyWord() + "%");
|
||||||
Pagination pagination = sysUserService.listPageMap(1, 50, sql);
|
Pagination pagination = sysUserService.listPageMap(1, 50, sql);
|
||||||
|
if (ObjectUtil.isEmpty(pagination.getList())) {
|
||||||
|
// 可选人员为空时,额外检查当前关键字是否命中了已存在代表,给出重复新增提示。
|
||||||
|
List<Teacher_congress_delegate> repeatDelegates = dao.query(Teacher_congress_delegate.class,
|
||||||
|
Cnd.where(Teacher_congress_delegate::getSessionId, "=", param.getSessionId())
|
||||||
|
.and(Cnd.exps(Teacher_congress_delegate::getLoginName, "like", "%" + param.getKeyWord() + "%")
|
||||||
|
.or(Teacher_congress_delegate::getUserName, "like", "%" + param.getKeyWord() + "%"))
|
||||||
|
.limit(1, 1));
|
||||||
|
if (ObjectUtil.isNotEmpty(repeatDelegates)) {
|
||||||
|
Teacher_congress_delegate repeatDelegate = repeatDelegates.get(0);
|
||||||
|
return Result.error("工号" + repeatDelegate.getLoginName() + " " + repeatDelegate.getUserName() + "已是当前届次代表,不能重复新增");
|
||||||
|
}
|
||||||
|
}
|
||||||
return Result.success(pagination.getList());
|
return Result.success(pagination.getList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+25
@@ -21,6 +21,8 @@ import com.budwk.app.flow.service.FlowCommonService;
|
|||||||
import com.budwk.app.sys.models.Sys_role;
|
import com.budwk.app.sys.models.Sys_role;
|
||||||
import com.budwk.app.sys.models.Sys_user;
|
import com.budwk.app.sys.models.Sys_user;
|
||||||
import com.budwk.app.sys.models.Sys_user_role;
|
import com.budwk.app.sys.models.Sys_user_role;
|
||||||
|
import com.budwk.app.sys.services.SysRoleService;
|
||||||
|
import com.budwk.app.sys.services.SysUserService;
|
||||||
import com.budwk.app.sys.views.View_user;
|
import com.budwk.app.sys.views.View_user;
|
||||||
import com.budwk.app.zhgh.democratic.teachercongress.delegate.models.TeacherCongressDelegatePush;
|
import com.budwk.app.zhgh.democratic.teachercongress.delegate.models.TeacherCongressDelegatePush;
|
||||||
import com.budwk.app.zhgh.democratic.teachercongress.delegate.models.Teacher_congress_delegate;
|
import com.budwk.app.zhgh.democratic.teachercongress.delegate.models.Teacher_congress_delegate;
|
||||||
@@ -66,6 +68,10 @@ public class TeacherCongressDelegatePushZgAuditController {
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private FlowCommonService flowCommonService;
|
private FlowCommonService flowCommonService;
|
||||||
|
@Inject
|
||||||
|
private SysUserService sysUserService;
|
||||||
|
@Inject
|
||||||
|
private SysRoleService sysRoleService;
|
||||||
|
|
||||||
@At("")
|
@At("")
|
||||||
@Ok("beetl:/platform/zhgh/democratic/teachercongress/delegate/push/zcAudit.html")
|
@Ok("beetl:/platform/zhgh/democratic/teachercongress/delegate/push/zcAudit.html")
|
||||||
@@ -255,6 +261,8 @@ public class TeacherCongressDelegatePushZgAuditController {
|
|||||||
userRole.setTcSessionId(delegatePush.getSessionId());
|
userRole.setTcSessionId(delegatePush.getSessionId());
|
||||||
baseService.dao().insert(delegate);
|
baseService.dao().insert(delegate);
|
||||||
// baseService.dao().insert(userRole);
|
// baseService.dao().insert(userRole);
|
||||||
|
// 资格审查通过进入代表库后,同步设置教代会代表角色,保证用户立即拥有正式/列席代表权限。
|
||||||
|
insertDelegateUserRole(userRole);
|
||||||
|
|
||||||
// 去改改用户表的手机号
|
// 去改改用户表的手机号
|
||||||
baseService.dao().update(
|
baseService.dao().update(
|
||||||
@@ -337,6 +345,8 @@ public class TeacherCongressDelegatePushZgAuditController {
|
|||||||
userRole.setTcSessionId(delegatePush.getSessionId());
|
userRole.setTcSessionId(delegatePush.getSessionId());
|
||||||
|
|
||||||
baseService.dao().insert(delegate);
|
baseService.dao().insert(delegate);
|
||||||
|
// 资格审查批量通过进入代表库后,同步设置教代会代表角色,保证用户立即拥有正式/列席代表权限。
|
||||||
|
insertDelegateUserRole(userRole);
|
||||||
|
|
||||||
// 去改改用户表的手机号
|
// 去改改用户表的手机号
|
||||||
baseService.dao().update(
|
baseService.dao().update(
|
||||||
@@ -358,4 +368,19 @@ public class TeacherCongressDelegatePushZgAuditController {
|
|||||||
return Result.success();
|
return Result.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 同步代表角色关系。
|
||||||
|
* 资格审查通过后代表库会新增记录,这里补充 sys_user_role,避免用户已是代表但没有代表角色。
|
||||||
|
*
|
||||||
|
* @param userRole 待写入的代表角色关系,必须包含 userId、roleId、tcSessionId
|
||||||
|
*/
|
||||||
|
private void insertDelegateUserRole(Sys_user_role userRole) {
|
||||||
|
baseService.dao().clear(Sys_user_role.class, Cnd.where(Sys_user_role::getUserId, "=", userRole.getUserId())
|
||||||
|
.and(Sys_user_role::getRoleId, "=", userRole.getRoleId())
|
||||||
|
.and(Sys_user_role::getTcSessionId, "=", userRole.getTcSessionId()));
|
||||||
|
baseService.dao().insert(userRole);
|
||||||
|
sysUserService.clearCache();
|
||||||
|
sysRoleService.clearCache();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-4
@@ -190,8 +190,8 @@ public class TeacherCongressDelegateTransitionController {
|
|||||||
// 当前代表团
|
// 当前代表团
|
||||||
Teacher_congress_delegation delegation = dao.fetch(Teacher_congress_delegation.class, delegationId);
|
Teacher_congress_delegation delegation = dao.fetch(Teacher_congress_delegation.class, delegationId);
|
||||||
|
|
||||||
// 当前届次代表团代表
|
// 当前届次全部代表。转出人员本届已不在当前代表团,必须用全部代表与上一届代表做对比。
|
||||||
List<Teacher_congress_delegate> delegates = dao.query(Teacher_congress_delegate.class, Cnd.where(Teacher_congress_delegate::getSessionId, "=", sessionId).and(Teacher_congress_delegate::getDelegationId, "=", delegation.getId()));
|
List<Teacher_congress_delegate> delegates = dao.query(Teacher_congress_delegate.class, Cnd.where(Teacher_congress_delegate::getSessionId, "=", sessionId));
|
||||||
dao.fetchLinks(delegates, "delegation");
|
dao.fetchLinks(delegates, "delegation");
|
||||||
|
|
||||||
// 上一届次代表
|
// 上一届次代表
|
||||||
@@ -240,8 +240,8 @@ public class TeacherCongressDelegateTransitionController {
|
|||||||
// 减少代表数据 (上一届次是代表 本届次不是代表)
|
// 减少代表数据 (上一届次是代表 本届次不是代表)
|
||||||
List<NutMap> reduceUser = delegateFull.stream().filter(delegate -> delegate.getString("lastDelegationCode").equals(delegation.getCode()) && StrUtil.isBlank(delegate.getString("delegationCode"))).toList();
|
List<NutMap> reduceUser = delegateFull.stream().filter(delegate -> delegate.getString("lastDelegationCode").equals(delegation.getCode()) && StrUtil.isBlank(delegate.getString("delegationCode"))).toList();
|
||||||
|
|
||||||
// 当前代表人数
|
// 当前代表人数只统计本届仍在当前代表团的人员。
|
||||||
int currentCount = delegates.size();
|
long currentCount = delegateFull.stream().filter(delegate -> delegate.getString("delegationCode").equals(delegation.getCode())).count();
|
||||||
|
|
||||||
HashMap<String, Object> map = new HashMap<>();
|
HashMap<String, Object> map = new HashMap<>();
|
||||||
map.put("addUser", addUser);
|
map.put("addUser", addUser);
|
||||||
|
|||||||
@@ -36,15 +36,17 @@ const UNIT_LEADER_MANAGE_TEMPLATE = {
|
|||||||
<el-dialog title="添加" :visible.sync="dialogFormVisible" width="600px" :close-on-click-modal="false">
|
<el-dialog title="添加" :visible.sync="dialogFormVisible" width="600px" :close-on-click-modal="false">
|
||||||
<el-form :model="formData" ref="form" size="small" label-width="60px">
|
<el-form :model="formData" ref="form" size="small" label-width="60px">
|
||||||
<el-form-item prop="roleCode" label="角色">
|
<el-form-item prop="roleCode" label="角色">
|
||||||
<dict-select placeholder="请选择角色" v-model="formData.roleCode" code="UNIT_ROLES"></dict-select>
|
<!-- <dict-select placeholder="请选择角色" v-model="formData.roleCode" code="UNIT_ROLES"></dict-select> -->
|
||||||
|
<dict-select placeholder="请选择角色" v-model="formData.roleCode" code="UNIT_ROLES" @change="onRoleChange"></dict-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item prop="userId" label="人员">
|
<el-form-item prop="userId" label="人员">
|
||||||
|
<!-- 原人员查询范围只传当前单位::api_params="{ unitId: currentData?.id }" -->
|
||||||
<user-select
|
<user-select
|
||||||
placeholder="请选择人员"
|
placeholder="请选择人员"
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
v-model="formData.userId"
|
v-model="formData.userId"
|
||||||
api="/platform/sys/unit/listUserSelect"
|
api="/platform/sys/unit/listUserSelect"
|
||||||
:api_params="{ unitId: currentData?.id }"
|
:api_params="{ unitId: currentData?.id, roleCode: formData.roleCode }"
|
||||||
:option_label_func="
|
:option_label_func="
|
||||||
(item) => {
|
(item) => {
|
||||||
return item.username + item.loginname + '(' + item.unitName + ')'
|
return item.username + item.loginname + '(' + item.unitName + ')'
|
||||||
@@ -86,6 +88,10 @@ const UNIT_LEADER_MANAGE_TEMPLATE = {
|
|||||||
},
|
},
|
||||||
computed: {},
|
computed: {},
|
||||||
methods: {
|
methods: {
|
||||||
|
onRoleChange() {
|
||||||
|
// 切换角色后人员查询范围可能变化,清空已选人员避免保存到旧范围里的人员。
|
||||||
|
this.$set(this.formData, "userId", "")
|
||||||
|
},
|
||||||
doDelete({ userId, roleCode }) {
|
doDelete({ userId, roleCode }) {
|
||||||
this.$confirm("您确定要删除吗?", "提示", {
|
this.$confirm("您确定要删除吗?", "提示", {
|
||||||
confirmButtonText: "确定",
|
confirmButtonText: "确定",
|
||||||
|
|||||||
Reference in New Issue
Block a user