From 89f6240481429718982bf83b7001bc514bda4295 Mon Sep 17 00:00:00 2001 From: zyd Date: Wed, 21 Sep 2022 22:59:52 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=BC=98=E5=8C=96=E6=9C=BA=E6=9E=84?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E7=94=A8=E6=88=B7=E9=80=9F=E5=BA=A6=E6=85=A2?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../slrs/sarPosition/dao/TsPositionDao.java | 6 + .../service/ITsPositionService.java | 6 + .../service/impl/TsPositionServiceImpl.java | 10 ++ .../adc/da/slrs/sarUser/dao/TsUserDao.java | 4 + .../adc/da/slrs/sarUser/entity/TsUser.java | 4 + .../service/impl/TsUserServiceImpl.java | 108 +++++++++++------- .../mapper/sarPosition/TsPositionMapper.xml | 7 ++ .../mybatis/mapper/sarUser/TsUserMapper.xml | 30 ++--- doc/sql/20220921-用户组织机构查询优化.sql | 1 + 9 files changed, 111 insertions(+), 65 deletions(-) create mode 100644 doc/sql/20220921-用户组织机构查询优化.sql diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarPosition/dao/TsPositionDao.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarPosition/dao/TsPositionDao.java index 8f0f9f1d..2708d80b 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarPosition/dao/TsPositionDao.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarPosition/dao/TsPositionDao.java @@ -51,6 +51,12 @@ public interface TsPositionDao extends BaseMapper { */ List getRole(String positionId); + /** + * 根据用户ID获取岗位信息 + * @param userId + * @return + */ + List getPositionDataByUserId(@Param("userId") String userId); /** * 查询岗位以及绑定的角色信息 * @param tsPosition:岗位信息 diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarPosition/service/ITsPositionService.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarPosition/service/ITsPositionService.java index 6089e2b4..87932f8c 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarPosition/service/ITsPositionService.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarPosition/service/ITsPositionService.java @@ -40,6 +40,12 @@ public interface ITsPositionService extends IService { */ List getRole(String positionId); + /** + * 根据用户ID获取岗位信息 + * @param userId + * @return + */ + List getPositionDataByUserId(String userId); /** * 添加岗位 * @param tsPosition:岗位信息 diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarPosition/service/impl/TsPositionServiceImpl.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarPosition/service/impl/TsPositionServiceImpl.java index d912d7a3..60489696 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarPosition/service/impl/TsPositionServiceImpl.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarPosition/service/impl/TsPositionServiceImpl.java @@ -108,6 +108,16 @@ public class TsPositionServiceImpl extends ServiceImpl getPositionDataByUserId(String userId) { + return tsPositionDao.getPositionDataByUserId(userId); + } + /** * 添加岗位 * @param tsPosition:岗位信息 diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarUser/dao/TsUserDao.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarUser/dao/TsUserDao.java index c2628318..b523c42a 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarUser/dao/TsUserDao.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarUser/dao/TsUserDao.java @@ -26,6 +26,10 @@ public interface TsUserDao extends BaseMapper { @Select("select position_id from ts_user_position where user_id=#{userId}") List selectPositionIds(String userId); + @Update("UPDATE ts_user SET SYS_POSITION_IDS =#{positionIds} WHERE USID = #{userId}") + void updateUserPositionIds(@Param("userId") String userId,@Param("positionIds")String positionIds); + + /** * 添加岗位 * @param userId:用户ID diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarUser/entity/TsUser.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarUser/entity/TsUser.java index 3b2bab67..6689c537 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarUser/entity/TsUser.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarUser/entity/TsUser.java @@ -138,6 +138,10 @@ public class TsUser extends BaseEntity { @TableField("SSO_ID") private String ssoId; + @ApiModelProperty(value = "系统设置岗位ID集合") + @TableField("SYS_POSITION_IDS") + private String sysPositionIds; + @ApiModelProperty(value = "岗位") @TableField(exist = false) private List positions; diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarUser/service/impl/TsUserServiceImpl.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarUser/service/impl/TsUserServiceImpl.java index 721e7ecf..cb59428d 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarUser/service/impl/TsUserServiceImpl.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarUser/service/impl/TsUserServiceImpl.java @@ -28,6 +28,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -135,8 +136,16 @@ public class TsUserServiceImpl extends ServiceImpl implements if(tsUser==null){ return Result.error("该用户不存在"); } + //此处更新user表中的岗位字段 + List positionIds = userPositionVO.getPositionIds(); + positionIds.removeIf(s -> null==s||""==s); + String optionsIdStr = StringUtils.join(positionIds, ","); + if(StringUtils.isBlank(optionsIdStr)){ + optionsIdStr = null; + } + tsUserDao.updateUserPositionIds(userPositionVO.getUserId(),optionsIdStr); List oldPositionIds=tsUserDao.selectPositionIds(userPositionVO.getUserId()); - Map> ids= ListUtil.difList(userPositionVO.getPositionIds(),oldPositionIds); + Map> ids= ListUtil.difList(positionIds,oldPositionIds); List insertIds=ids.get("insert"); List deleteIds=ids.get("delete"); if(insertIds!=null&&insertIds.size()>0){ @@ -163,7 +172,13 @@ public class TsUserServiceImpl extends ServiceImpl implements public ResponseMessage setPositionBatch(UserPositionBatchVO userPositionVO2) { boolean flag=true; - + //此处更新user表中的岗位字段 + List positionIds = userPositionVO2.getPositionIds(); + positionIds.removeIf(s -> null==s||""==s); + String optionsIdStr = StringUtils.join(positionIds, ","); + if(StringUtils.isBlank(optionsIdStr)){ + optionsIdStr = null; + } for (String s:userPositionVO2.getUserId()) { UserPositionVO userPositionVO=new UserPositionVO(); userPositionVO.setUserId(s); @@ -171,9 +186,11 @@ public class TsUserServiceImpl extends ServiceImpl implements TsUser tsUser=tsUserDao.selectById(userPositionVO.getUserId()); if(tsUser==null){ flag=false; + continue; } + tsUserDao.updateUserPositionIds(userPositionVO.getUserId(),optionsIdStr); List oldPositionIds=tsUserDao.selectPositionIds(userPositionVO.getUserId()); - Map> ids= ListUtil.difList(userPositionVO.getPositionIds(),oldPositionIds); + Map> ids= ListUtil.difList(positionIds,oldPositionIds); List insertIds=ids.get("insert"); List deleteIds=ids.get("delete"); if(insertIds!=null&&insertIds.size()>0){ @@ -210,6 +227,13 @@ public class TsUserServiceImpl extends ServiceImpl implements List middle=new ArrayList<>(); middle.addAll(orgIds); boolean Orgflag=true; + //此处更新user表中的岗位字段 + List positionIds = userPositionVO2.getPositionIds(); + positionIds.removeIf(s -> null==s||""==s); + String optionsIdStr = StringUtils.join(positionIds, ","); + if(StringUtils.isBlank(optionsIdStr)){ + optionsIdStr = null; + } while (Orgflag){ QueryWrapper queryWrapper=new QueryWrapper<>(); queryWrapper.in("parent_id",middle); @@ -234,25 +258,23 @@ public class TsUserServiceImpl extends ServiceImpl implements for (TsUser user : allUsers) { String userId = user.getUserId(); - UserPositionVO userPositionVO=new UserPositionVO(); - userPositionVO.setUserId(userId); - userPositionVO.setPositionIds(userPositionVO2.getPositionIds()); - TsUser tsUser=tsUserDao.selectById(userPositionVO.getUserId()); + TsUser tsUser=tsUserDao.selectById(userId); if(tsUser==null){ continue; } - List oldPositionIds=tsUserDao.selectPositionIds(userPositionVO.getUserId()); - Map> ids= ListUtil.difList(userPositionVO.getPositionIds(),oldPositionIds); + tsUserDao.updateUserPositionIds(userId,optionsIdStr); + List oldPositionIds=tsUserDao.selectPositionIds(userId); + Map> ids= ListUtil.difList(positionIds,oldPositionIds); List insertIds=ids.get("insert"); List deleteIds=ids.get("delete"); if(insertIds!=null&&insertIds.size()>0){ for(String positionId:insertIds){ - tsUserDao.addPosition(userPositionVO.getUserId(),positionId); + tsUserDao.addPosition(userId,positionId); } } if(deleteIds!=null&&deleteIds.size()>0){ for(String positionId:deleteIds){ - tsUserDao.delPosition(userPositionVO.getUserId(),positionId); + tsUserDao.delPosition(userId,positionId); } } } @@ -459,42 +481,44 @@ public class TsUserServiceImpl extends ServiceImpl implements @Override public IPage getAllUsers(TsUser tsUser) { List ids=new ArrayList<>(); - QueryWrapper queryWrapper=new QueryWrapper<>(); - queryWrapper.like("parent_id",tsUser.getInstitutionId()); - List tsmiddle=tsInstitutionService.list(queryWrapper); - if(tsmiddle!=null && !tsmiddle.isEmpty()){ - tsmiddle.forEach(tsInstitution -> { - ids.add(tsInstitution.getId()); - }); + ids.add(tsUser.getInstitutionId()); + List middle=new ArrayList<>(); + middle.addAll(ids); + boolean flag=true; + while (flag){ + QueryWrapper queryWrapper=new QueryWrapper<>(); + queryWrapper.in("parent_id",middle); + List tsmiddle=tsInstitutionService.list(queryWrapper); + if (tsmiddle.size()>0){ + tsmiddle.forEach(tsInstitution -> { + middle.add(tsInstitution.getId()); + }); + middle.removeAll(ids); + ids.addAll(middle); + }else { + tsmiddle.forEach(tsInstitution -> { + middle.add(tsInstitution.getId()); + }); + middle.removeAll(ids); + ids.addAll(middle); + flag=false; + } } -// List middle=new ArrayList<>(); -// middle.addAll(ids); -// boolean flag=true; -// while (flag){ -// QueryWrapper queryWrapper=new QueryWrapper<>(); -// queryWrapper.in("parent_id",middle); -// List tsmiddle=tsInstitutionService.list(queryWrapper); -// if (tsmiddle.size()>0){ -// tsmiddle.forEach(tsInstitution -> { -// middle.add(tsInstitution.getId()); -// }); -// middle.removeAll(ids); -// ids.addAll(middle); -// }else { -// tsmiddle.forEach(tsInstitution -> { -// middle.add(tsInstitution.getId()); -// }); -// middle.removeAll(ids); -// ids.addAll(middle); -// flag=false; -// } -// } -// ids.removeIf(s -> null==s); + ids.removeIf(s -> null==s); + List tsUsers = tsUserDao.userUnderInstitution((tsUser.getCurrent() - 1) * tsUser.getSize(), tsUser.getSize(), tsUser, ids); + if(tsUsers!=null && !tsUsers.isEmpty()){ + for (TsUser user:tsUsers) { + List positionList = tsPositionService.getPositionDataByUserId(user.getUserId()); + user.setPositions(positionList); + } + } + Page tsUserPage = new Page<>(); tsUserPage.setCurrent(tsUser.getCurrent()); tsUserPage.setSize(tsUser.getSize()); - tsUserPage.setRecords(tsUserDao.userUnderInstitution((tsUser.getCurrent()-1)*tsUser.getSize(),tsUser.getSize(),tsUser,ids)); + tsUserPage.setRecords(tsUsers); tsUserPage.setTotal(tsUserDao.userUnderInstitutionCount(tsUser,ids)); + return tsUserPage; } diff --git a/adc-da-slrs/src/main/resources/mybatis/mapper/sarPosition/TsPositionMapper.xml b/adc-da-slrs/src/main/resources/mybatis/mapper/sarPosition/TsPositionMapper.xml index 81f31e4b..44be1587 100644 --- a/adc-da-slrs/src/main/resources/mybatis/mapper/sarPosition/TsPositionMapper.xml +++ b/adc-da-slrs/src/main/resources/mybatis/mapper/sarPosition/TsPositionMapper.xml @@ -17,6 +17,7 @@ + + + select u.USID,u.ACCOUNT,u.PASSWORD,u.OPER_USER,u.UNAME,u.SEX,u.USER_SOURCE,u.PHONE,u.EMAIL,u.INSTITUTION_NAME,u.INSTITUTION_ID ,u.POSITION_NAME,u.STATE,u.POSITION_ID,u.WORK_NUM,u.EXT_INFO,u.CREATION_TIME,u.MODIFY_TIME,u.VALID_FLAG - ,u.DISABLE_FLAG,u.UNLOCK_FLAG,u.USER_TYPE,u.SSO_ID, - p.id p_id,p.name p_name from ts_user u - left join ts_user_position up - on u.usid=up.user_id - left join ts_position p - on up.position_id=p.id + ,u.DISABLE_FLAG,u.UNLOCK_FLAG,u.USER_TYPE,u.SSO_ID,u.SYS_POSITION_IDS + from ts_user u where 1=1 and INSTITUTION_ID in @@ -76,12 +73,7 @@ select count(u.USID) from ts_user u - left join ts_user_position up - on u.usid=up.user_id - left join ts_position p - on up.position_id=p.id where 1=1 and u.institution_id=#{TsUser.institutionId} diff --git a/doc/sql/20220921-用户组织机构查询优化.sql b/doc/sql/20220921-用户组织机构查询优化.sql new file mode 100644 index 00000000..aa9033fe --- /dev/null +++ b/doc/sql/20220921-用户组织机构查询优化.sql @@ -0,0 +1 @@ +ALTER TABLE `ts_user` ADD COLUMN `SYS_POSITION_IDS` varchar(2000) NULL COMMENT '设置的岗位ID集合' AFTER `SSO_ID`; \ No newline at end of file