Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserServiceImpl.java
@@ -45,6 +45,7 @@
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tenant.BladeTenantProperties;
import org.springblade.core.tool.api.R;
@@ -57,6 +58,8 @@
import org.springframework.util.DigestUtils;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static com.vci.ubcs.common.constant.CommonConstant.DEFAULT_PARAM_PASSWORD;
@@ -78,13 +81,16 @@
   //拿到配置的超管id
   @Value("${user-info.id}")
   private String adminUserId;
   @Value("${user-info.tenant-id}")
   private String tenantId;
   @Override
   @Transactional(rollbackFor = Exception.class)
   public boolean submit(User user) {
      if (StringUtil.isBlank(user.getTenantId())) {
         user.setTenantId(BladeConstant.ADMIN_TENANT_ID);
         // user.setTenantId(BladeConstant.ADMIN_TENANT_ID);
         // 默认设置为管理组下的用户
         user.setTenantId(this.tenantId);
      }
      String tenantId = user.getTenantId();
      //Tenant tenant = SysCache.getTenant(tenantId);
@@ -162,6 +168,13 @@
   }
   @Override
   public List<User> selectAllUser(User user, Long deptId){
      List<Long> deptIdList = SysCache.getDeptChildIds(deptId);
      List<User> users = baseMapper.selectUserPage(user, deptIdList, (AuthUtil.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? StringPool.EMPTY : AuthUtil.getTenantId()));
      return users;
   }
   @Override
   public IPage<UserVO> selectUserSearch(UserVO user, Query query) {
      LambdaQueryWrapper<User> queryWrapper = Wrappers.<User>query().lambda();
      String tenantId = AuthUtil.getTenantId();
@@ -206,13 +219,20 @@
   @Override
   public UserInfo userInfo(String tenantId, String account) {
      User user = baseMapper.getUser(tenantId, account);
      User user = baseMapper.getUser(tenantId, account,null);
      return buildUserInfo(user);
   }
   @Override
   public UserInfo userInfo(String tenantId, String account,String name) {
      User user = baseMapper.getUser(tenantId, account,name);
      UserInfo userInfo = buildUserInfo(user);
      return null;
   }
   @Override
   public UserInfo userInfo(String tenantId, String account, UserEnum userEnum) {
      User user = baseMapper.getUser(tenantId, account);
      User user = baseMapper.getUser(tenantId, account,null);
      return buildUserInfo(user, userEnum);
   }
@@ -224,6 +244,7 @@
      if (ObjectUtil.isEmpty(user)) {
         return null;
      }
      user.setDeptName(Func.join(SysCache.getDeptNames(user.getDeptId())));
      UserInfo userInfo = new UserInfo();
      userInfo.setUser(user);
      if (Func.isNotEmpty(user)) {
@@ -309,6 +330,7 @@
      }
      //获取用户采用的密码策略
      Strategy strategy = sysClient.getByUserId(userId).getData();
      // 几乎不会出现这种情况
      if(ObjectUtil.isEmpty(strategy)) {
         throw new ServiceException("当前用户未应用密码策略!");
      }
@@ -323,7 +345,7 @@
         if(reqType>=strategy.getRequiredType()){
            break;
         }
         if(!Func.isEmpty(RegexUtil.findResult(regexs.get(i),newPassword1))){
         if(RegexUtil.find(regexs.get(i),newPassword1)){
            reqType++;
         }
      }
@@ -331,12 +353,13 @@
      if(reqType<strategy.getRequiredType()){
         throw new ServiceException(resException);
      }
      // 是否属于组合方式中的类型
      // 是否属于组合方式中的类型,以前是密码必须是包含在组合方式中的类型
      String regex = sysClient.getRegex(Arrays.asList(strategy.getCombinationIds().split(","))).getData();
      regex = "^"+regex+"{"+strategy.getRequiredType()+",}$";
      boolean result = RegexUtil.find(regex, newPassword1);
      if(!result){
         throw new ServiceException(resException);
         throw new ServiceException("密码中只能存在【"+strategy.getCombinationNames()+"】中包含的字符!");
         //throw new ServiceException(resException);
      }
      //修改密码同时,改变用户信息中的密码修改状态字段,密码修改时间
      return this.update(Wrappers.<User>update().lambda()
@@ -422,6 +445,7 @@
      boolean oauthTemp = userOauthService.updateById(userOauth);
      return (userTemp && oauthTemp);
   }
   @Override
   public boolean updatePlatform(Long userId, Integer userType, String userExt) {
      if (userType.equals(UserEnum.WEB.getCategory())) {
@@ -515,7 +539,31 @@
   }
   /**
    * 时间格式转天
    * 获取到指定身份权限的用户列表
    * @param user 用户查询的用户信息,如租户信息,通常为自动注入,前端可选择不传
    * @param roleName 要查询的角色身份
    * @return
    */
   @Override
   public List<Map<String,String>> getByRoleUserList(BladeUser user, String roleName) {
      // 考虑到一个用户可以拥有多种角色权限,而用户关联角色权限是用role_id字段用逗号分隔角色id的,直接采用子查询来in查询不能实现,所以先查询角色id
      R<String> roleIds = sysClient.getRoleIds(user.getTenantId(), roleName);
      if(roleIds.getCode() != 200){
         throw new ServiceException("系统服务feign接口调用错误!");
      }
      if(Func.isBlank(roleIds.getData())){
         return new ArrayList<>();
      }
      List<Map<String,String>> list = new ArrayList<>();
      Arrays.stream(roleIds.getData().split(",")).forEach(item->{
         list.addAll(this.baseMapper.getUserMap(item,user.getUserId().toString()));
      });
      // 去除重复
      return list.stream().distinct().collect(Collectors.toList());
   }
   /**
    * 日期时间格式转天
    * @param date
    * @return
    */