!129 feat(sysuser): 新增按角色查询用户接口并使用优化版JOIN查询

* feat(sysuser): 新增按角色查询用户接口并使用优化版JOIN查询
* fix(bgpartymatter): 移除后端自动生成业务序号逻辑
This commit is contained in:
wsm
2026-08-14 07:15:16 +00:00
parent 06e253b18d
commit a5e4eebc71
6 changed files with 77 additions and 16 deletions
@@ -49,7 +49,6 @@ import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -155,7 +154,6 @@ public class BgPartymatterController extends JeecgController<BgPartymatter, IBgP
bgPartymatter.setBpmStatus("1");
}
fillDefaultMeetingTypeForCreate(bgPartymatter);
fillGeneratedNumber(bgPartymatter);
bgPartymatterService.save(bgPartymatter);
return Result.OK("添加成功!");
}
@@ -172,7 +170,6 @@ public class BgPartymatterController extends JeecgController<BgPartymatter, IBgP
@RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
public Result<String> edit(@RequestBody BgPartymatter bgPartymatter) {
fillMeetingTypeForUpdate(bgPartymatter);
fillGeneratedNumber(bgPartymatter);
bgPartymatterService.updateById(bgPartymatter);
return Result.OK("编辑成功!");
}
@@ -195,7 +192,6 @@ public class BgPartymatterController extends JeecgController<BgPartymatter, IBgP
}
String varField = oConvertUtils.isEmpty(dto.getVarField()) ? "json_data" : dto.getVarField();
fillMeetingTypeForUpdate(dto.getFormData());
fillGeneratedNumber(dto.getFormData());
bgPartymatterService.saveBpmFormAndSyncVariable(dto.getFormData(), dto.getProcessInstanceId(), varField,
JSONObject.toJSONString(dto.getFormData()));
return Result.OK("保存成功");
@@ -227,18 +223,6 @@ public class BgPartymatterController extends JeecgController<BgPartymatter, IBgP
bgPartymatter.setMeetingType(BgPartymatterConstant.MeetingType.PARTY);
}
/**
* 根据会议时间和议题序号生成业务序号,规则:yyyyMMdd-议题序号。
* 前端会即时回显,后端保存前再次生成,保证接口调用和流程保存数据一致。
*/
private void fillGeneratedNumber(BgPartymatter bgPartymatter) {
if (bgPartymatter == null || bgPartymatter.getMatterTime() == null || bgPartymatter.getItemNumber() == null) {
return;
}
String dateText = new SimpleDateFormat("yyyyMMdd").format(bgPartymatter.getMatterTime());
bgPartymatter.setNumber(dateText + "-" + bgPartymatter.getItemNumber());
}
/**
* 通过id删除
*
@@ -538,6 +538,31 @@ public class SysUserController {
return Result.OK(pageList);
}
/**
* 用户选择组件 专用 根据角色ID查询用户列表
* @param pageNo
* @param pageSize
* @param roleId
* @return
*/
@RequestMapping(value = "/queryUserByRoleId", method = RequestMethod.GET)
@Operation(summary = "根据角色ID查询用户列表", description = "根据输入的roleId返回该角色下的所有用户(分页)")
public Result<IPage<SysUser>> queryUserByRoleId(
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
@RequestParam(name = "departId", required = false) String departId,
@RequestParam(name = "roleId", required = false) String roleId,
@RequestParam(name="realname",required=false) String realname,
@RequestParam(name="username",required=false) String username,
@RequestParam(name="isMultiTranslate",required=false) String isMultiTranslate,
@RequestParam(name="id",required = false) String id,
@RequestParam(name="searchSecurityLevel",required = false) Integer searchSecurityLevel
) {
Page<SysUser> page = new Page<>(pageNo, pageSize);
IPage<SysUser> pageList = sysUserService.getUserByRoleIdOptimized(page, roleId, username);
return Result.OK(pageList);
}
/**
* 用户选择组件 专用 根据用户账号或部门,角色分页查询
* @param deptRoleVO
@@ -81,6 +81,15 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
*/
IPage<SysUser> getUserByRoleId(Page page, @Param("roleId") String roleId, @Param("username") String username);
/**
* 根据角色Id查询用户信息(优化版:INNER JOIN + DISTINCT,供专用接口使用)
* @param page
* @param roleId 角色id
* @param username 用户登录账户
* @return
*/
IPage<SysUser> getUserByRoleIdOptimized(Page page, @Param("roleId") String roleId, @Param("username") String username);
/**
* 根据角色Id查询带部门的用户信息
* @param page
@@ -59,6 +59,16 @@
</if>
</select>
<!-- 根据角色Id查询(优化版:INNER JOIN + DISTINCT,供专用接口使用) -->
<select id="getUserByRoleIdOptimized" resultType="org.jeecg.modules.system.entity.SysUser">
select distinct u.* from sys_user u
inner join sys_user_role ur on ur.user_id = u.id
where u.del_flag = 0 and ur.role_id = #{roleId}
<if test="username!=null and username!=''">
and u.username = #{username}
</if>
</select>
<!-- Multi-instance flow task query. Keep it separate from the overloaded getUserByRoleId statement. -->
<select id="getUsernamesByRoleId" resultType="java.lang.String">
select distinct u.username
@@ -184,6 +184,15 @@ public interface ISysUserService extends IService<SysUser> {
*/
public IPage<SysUser> getUserByRoleId(Page<SysUser> page,String roleId, String username);
/**
* 根据角色Id查询(优化版:INNER JOIN + DISTINCT,供专用接口使用)
* @param page
* @param roleId 角色id
* @param username 用户账户名称
* @return
*/
public IPage<SysUser> getUserByRoleIdOptimized(Page<SysUser> page,String roleId, String username);
/**
* 根据角色Id查询
* @param page
@@ -584,6 +584,30 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
//update-end---author:wangshuai ---date:20230220 for[QQYUN-3980]组织管理中 职位功能 职位表加租户id 加职位-用户关联表------------
}
/**
* 根据角色Id查询(优化版:INNER JOIN + DISTINCT,供专用接口使用)
* @param page
* @param roleId 角色id
* @param username 用户账户名称
* @return
*/
@Override
public IPage<SysUser> getUserByRoleIdOptimized(Page<SysUser> page, String roleId, String username) {
IPage<SysUser> userRoleList = userMapper.getUserByRoleIdOptimized(page, roleId, username);
List<SysUser> records = userRoleList.getRecords();
if (null != records && records.size() > 0) {
List<String> userIds = records.stream().map(SysUser::getId).collect(Collectors.toList());
Map<String, String> useDepNames = this.getDepNamesByUserIds(userIds);
for (SysUser sysUser : userRoleList.getRecords()) {
//设置部门
sysUser.setOrgCodeTxt(useDepNames.get(sysUser.getId()));
//设置用户职位id
this.userPositionId(sysUser);
}
}
return userRoleList;
}
/**
* 根据角色Id查询
* @param page