wangting
2024-12-02 cdba4febf23c6f55346a474579361923aacf0bc9
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmUserQueryServiceImpl.java
@@ -1,7 +1,11 @@
package com.vci.frameworkcore.compatibility.impl;
import com.vci.common.utility.ObjectUtility;
import com.vci.corba.framework.data.DeptInfo;
import com.vci.corba.framework.data.RoleInfo;
import com.vci.corba.framework.data.UserLogonInfo;
import com.vci.corba.omd.etm.EnumItem;
import com.vci.corba.omd.etm.EnumType;
import com.vci.dto.SmUserDTO;
import com.vci.common.util.ThreeDES;
import com.vci.corba.common.PLException;
@@ -39,7 +43,6 @@
import com.vci.web.util.WebUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.formula.functions.T;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -117,6 +120,11 @@
    * 使用角色查询的时候的查询字段
    */
   public static final String QUERY_FIELD_ROLE = "roleUser.plroleuid";
   /**
    * 密级的枚举key
    */
   private static final String ENUM_USERSECURITYENUM = "usersecurityenum";
   /**
    * 必填列
@@ -317,7 +325,16 @@
      smUserVO.setId(userInfo.userName);
      smUserVO.setName(userInfo.trueName);
      smUserVO.setSecretGrade(userInfo.secretGrade);
      smUserVO.setSecretGradeText(UserSecretEnum.getSecretText(userInfo.secretGrade));
      //密级处理
      String secretGrade = "" + userInfo.secretGrade;
      EnumType item = platformClientUtil.getEnumService().getEnumTypeByName(ENUM_USERSECURITYENUM);
      EnumItem[] children = item.items;
      for(EnumItem child: children){
         if(child.value.equals(secretGrade)){
            smUserVO.setSecretGradeText(child.name);
            break;
         }
      }
      smUserVO.setUserType(String.valueOf(userInfo.userType));
      smUserVO.setUserTypeText(UserTypeEnum.getTextByValue(String.valueOf(userInfo.userType)));
      smUserVO.setDescription(userInfo.desc);
@@ -370,11 +387,8 @@
      smUserVO.setIsDeptLeader(userInfo.isDeptLeader.equals("0") ? "不是":"是");
      //专业
      smUserVO.setSpecialties(userInfo.specialties);
      if(userInfo.status == 0){
         smUserVO.setLockFlag(false);
      }else{
         smUserVO.setLockFlag(true);
      }
      UserLogonInfo lockObj = platformClientUtil.getFrameworkService().fetchUserLogonObj(userInfo.id);
      smUserVO.setLockFlag(lockObj.plWrongNum != 0);
      smUserVO.setCreator(userInfo.createUser);
      smUserVO.setCreateTime(VciDateUtil.long2Date(userInfo.createTime));
      smUserVO.setLastModifier(userInfo.updateUser);
@@ -1115,18 +1129,18 @@
   /**
     * 校验密码是否相同,在新平台中存储的密码是两次md5
     * @param userOid 用户主键
     * @param userName 用户名
     * @param md5Password 已经md5加密一次的密码--老的平台里不能加密
     * @return true 表示相等,false表示不相等
     */
   @Override
   public boolean checkPasswordEqual(String md5Password, String userOid) {
      if(StringUtils.isBlank(md5Password) || StringUtils.isBlank(userOid)){
   public boolean checkPasswordEqual(String md5Password, String userName) {
      if(StringUtils.isBlank(md5Password) || StringUtils.isBlank(userName)){
         return false;
      }
      String sql = " select plpassword from pluser where pluid = :userOid";
      String sql = " select plpassword from pluser where plusername = :userName";
      Map<String,String> conditionMap = new HashMap<>();
      conditionMap.put("userOid",userOid.trim());
      conditionMap.put("userName",userName.trim());
      List<BusinessObject> BusinessObjectList = boService.queryBySql(sql, conditionMap);
      if(CollectionUtils.isEmpty(BusinessObjectList)){
         return  false;
@@ -1134,8 +1148,10 @@
      ThreeDES des = new ThreeDES();// 实例化一个对�?
      des.getKey("daliantan0v0");// 生成密匙
      md5Password = des.getEncString(md5Password);
      if(md5Password.equals(ObjectTool.getNewBOAttributeValue(BusinessObjectList.get(0),"plpassword"))){
      //对查询出来的密码解密
      String plpassword = ObjectTool.getNewBOAttributeValue(BusinessObjectList.get(0), "plpassword");
      plpassword = des.getDesString(plpassword);
      if(md5Password.equals(plpassword)){
         return true;
      }
      return false;
@@ -1191,16 +1207,16 @@
    /**
     * 修改密码
     * @param userOid 用户主键
     * @param userName 用户主键
     * @param oldPassword 旧的密码
     * @param password 新的密码
     * @param confirmPassword 确认密码
     */
   @Override
   @Transactional(rollbackFor = Exception.class)
   public boolean changePassword(String userOid,String oldPassword, String password,
   public boolean changePassword(String userName,String oldPassword, String password,
         String confirmPassword) throws Exception {
      WebUtil.alertNotNull(userOid,"用户主键",oldPassword,"登录密码",password,"密码",confirmPassword,"确认密码");
      VciBaseUtil.alertNotNull(userName,"用户名",oldPassword,"登录密码",password,"密码",confirmPassword,"确认密码");
      if(!password.equals(confirmPassword)){
         throw new VciBaseException("密码和确认密码不相等");
      }
@@ -1208,39 +1224,27 @@
      oldPassword = Func.decryptAes(oldPassword,"daliantan0v0vcip");
      password = Func.decryptAes(password,"daliantan0v0vcip");
      //对比旧密码
      boolean b = this.checkPasswordEqual(oldPassword, userOid);
      boolean b = this.checkPasswordEqual(oldPassword, userName);
      if(!b){
         throw new PLException("500", new String[] { "您输入的密码与登录密码不一致,请重新输入!"});
      }
      SmUserVO smUserVO = getUserByUserOid(userOid);
      if(Func.isEmpty(smUserVO)){
      UserInfo userInfo = platformClientUtil.getFrameworkService().getUserObjectByUserName(userName);
      if(Func.isEmpty(userInfo) || Func.isBlank(userInfo.id)){
         throw new VciBaseException("当前修改的用户不存在!");
      }
      //TODO:校验密码是否符合策略
      String error = platformClientUtil.getFrameworkService().checkPasswordStrategyByUserId(smUserVO.getId(), password,null);
      String error = platformClientUtil.getFrameworkService().checkPasswordStrategyByUserId(userInfo.id, password,null);
      if (!StringUtils.isBlank(error)) {
         throw new VciBaseException("当前设置的密码,密码策略校验未通过!");
      }
      //TODO:考虑是否需要将修改方式改成直接调用平台的接口,因为现在的修改方式没能正确的更新缓存
      /*UserInfo userInfo = new UserInfo();
      userInfo.id = userOid.trim();
      userInfo.pwd = password;
      userInfo.pwdUpdateTime = System.currentTimeMillis();
      boolean updateBoolean = platformClientUtil.getFrameworkService().updateUser(userInfo, new UserEntityInfo(WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(), null));
      return updateBoolean;*/
      ThreeDES des = new ThreeDES();// 实例化一个对�?
      des.getKey("daliantan0v0");// 生成密匙
      String encPassword = des.getEncString(password);
      //修改密码的同时需要将密码修改时间也更新
      String sql = "update pluser set plpassword = '" + encPassword + "', plpwdupdatetime = TO_DATE('"
            + Func.format(new Date(),"yyyy-MM-dd HH:mm:ss") +"','yyyy-MM-dd hh24:mi:ss') where pluid = '" + userOid.trim() + "'";
      try {
         return platformClientUtil.getBOFactoryService().executeUpdateSql(sql);
      } catch (PLException vciError) {
         throw WebUtil.getVciBaseException(vciError);
      }
      boolean updateBoolean = platformClientUtil.getFrameworkService()
            .updateUser(userInfo, new UserEntityInfo(WebThreadLocalUtil.getCurrentUserSessionInfoInThread()== null ?
                  userName : WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(), null));
      return updateBoolean;
   }
   /**
@@ -1312,7 +1316,10 @@
      }
      smUserDTO.setCreator(loginUserId);
      smUserDTO.setLastModifier(loginUserId);
      smUserDTO.setOid(ObjectUtility.getNewObjectID36());
      UserInfo userInfo = changeSmUserDTOToUserInfo(smUserDTO);
      //管理员添加的用户初始密码修改时间都应该为0,因为涉及到后面用户首次登录自己修改密码
      userInfo.pwdUpdateTime = 0;
      UserEntityInfo userEntityInfo = new UserEntityInfo(loginUserId, "");
      String oid = platformClientUtil.getFrameworkService().saveUser(userInfo, userEntityInfo);
      if (Func.isEmpty(oid)) {
@@ -1421,7 +1428,7 @@
      } catch (PLException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
         throw new VciBaseException("检查密码策略符合情况失败!2");
         throw new VciBaseException("检查密码策略符合情况失败!");
      }
   }
@@ -1447,6 +1454,7 @@
      userInfo.updateUser = user.getLastModifier() == null ? "" : user.getLastModifier();
      userInfo.pwdUpdateTime = user.getPwdUpdateTime().getTime();
      userInfo.grantor = user.getGrantor() == null ? "" : user.getGrantor();
      userInfo.secretGrade = user.getSecretGrade() == null ? 2 : Integer.valueOf(user.getGrantor());
      userInfo.isDeptLeader = user.getIsDeptLeader() == null ? "0" : user.getIsDeptLeader();
      return userInfo;
   }
@@ -1656,4 +1664,19 @@
      return userNameList;
   }
   /**
    * 使用当前用户的类型查询用户
    * @return
    * @throws VciBaseException
    */
   @Override
   public List<SmUserVO> listUserByUserType() throws PLException {
      try {
         UserInfo[] userInfo = platformClientUtil.getFrameworkService().fetchUserInfoByType(Short.parseShort(WebUtil.getCurrentUserSessionInfo().getUsertype()));
         return userInfoArr2VO(userInfo);
      } catch (PLException e) {
         throw new VciBaseException("登录时,获取用户信息失败:"+e.getMessage());
      }
   }
}