ludc
2024-06-25 ca2d9c7e8746f81ad9a0f19e2a1ca6515c7ac931
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmUserQueryServiceImpl.java
@@ -1,11 +1,19 @@
package com.vci.frameworkcore.compatibility.impl;
import com.vci.client.common.objects.UserObject;
import com.vci.client.common.providers.ClientServiceProvider;
import com.vci.common.util.ThreeDES;
import com.vci.corba.common.PLException;
import com.vci.corba.framework.data.UserInfo;
import com.vci.corba.omd.data.BusinessObject;
import com.vci.frameworkcore.compatibility.OrgDeptQueryServiceI;
import com.vci.frameworkcore.compatibility.SmPwdStrategyQueryServiceI;
import com.vci.frameworkcore.compatibility.SmRoleQueryServiceI;
import com.vci.frameworkcore.compatibility.SmUserQueryServiceI;
import com.vci.frameworkcore.dto.SmUserDTO;
import com.vci.frameworkcore.pagemodel.OrgDepartmentVO;
import com.vci.frameworkcore.pagemodel.SmPasswordStrategyVO;
import com.vci.frameworkcore.pagemodel.SmRoleVO;
import com.vci.frameworkcore.pagemodel.SmUserVO;
import com.vci.omd.utils.ObjectTool;
import com.vci.starter.web.enumpck.BooleanEnum;
@@ -18,11 +26,13 @@
import com.vci.starter.web.util.BeanUtil;
import com.vci.starter.web.util.VciBaseUtil;
import com.vci.starter.web.util.VciDateUtil;
import com.vci.starter.web.util.WebThreadLocalUtil;
import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
import com.vci.web.enumpck.UserTypeEnum;
import com.vci.web.model.SmPasswordStrategyDO;
import com.vci.web.model.SmUserDO;
import com.vci.web.service.WebBoServiceI;
import com.vci.web.util.Func;
import com.vci.web.util.PlatformClientUtil;
import com.vci.web.util.WebUtil;
import org.apache.commons.lang3.StringUtils;
@@ -59,6 +69,24 @@
   private WebBoServiceI boService;
   /**
    * 部门服务
    */
   @Autowired
   private OrgDeptQueryServiceI orgDeptQueryService;
   /**
    * 角色服务
    */
   @Autowired
   private SmRoleQueryServiceI smRoleQueryService;
   /**
    * 密码策略查询服务
    */
   @Autowired
   private SmPwdStrategyQueryServiceI smPwdStrategyQueryService;
   /**
    * 使用角色的属性查询用户时
    */
   private final static String QUERY_BY_ROLE_KEY_PREFIX = "pkrole.";
@@ -84,6 +112,41 @@
   public static final String QUERY_FIELD_ROLE = "roleUser.plroleuid";
   /**
    * 用户分页查询时获取部门放到这里避免重复查询
    */
   private Map<String,List<OrgDepartmentVO>> orgDepartmentVOMap;
   /**
    * 用户分页查询时获取角色放到这里避免重复查询
    */
   private Map<String,List<SmRoleVO>> smRoleVOMap;
   /**
    * 用户分页查询时获取密码策略放到这里避免多次查询
    */
   private Map<String,SmPasswordStrategyVO> smPwdStrategyVOMap;
   /**
    * 检查用户是否存在,可以根据用户名,也可以根据用户oid
    * @param userName  传null,即用oid作为检查条件
    * @param oid    传null,即用userName作为检查条件
    * @return true存在,false不存在
    */
   @Override
   public boolean checkUserExist(String userName, String oid) throws PLException {
      if(Func.isEmpty(userName) && Func.isEmpty(oid)){
         throw new PLException("检查用户是否存在时,传递的参数用户名和用户oid都为空!",new String[0]);
      }
      UserInfo userInfo = null;
      if(Func.isNotEmpty(userName)) {
         userInfo = platformClientUtil.getFrameworkService().getUserObjectByUserName(userName);
      }else{
         userInfo = platformClientUtil.getFrameworkService().getUserObjectByoid(oid);
      }
      return Func.isNotEmpty(userInfo);
   }
   /**
     *  根据用户名获取用户的对象,不区分大小写
     * @param userId 用户名
     * @return 用户的显示对象,如果用户不存在则返回null,不会抛出异常
@@ -98,35 +161,6 @@
        } catch (PLException e) {
            throw new VciBaseException("登录时,获取用户信息失败:"+e.getMessage());
        }
   }
   /**
    * 业务数据转换为显示对象
    * @param userInfo 平台返回的业务数据
    * @return 用户显示对象
    */
   private SmUserVO userInfo2VO(UserInfo userInfo) {
      SmUserVO smUserVO = new SmUserVO();
      smUserVO.setOid(userInfo.id);
      smUserVO.setId(userInfo.userName);
      smUserVO.setName(userInfo.trueName);
      smUserVO.setSecretGrade(userInfo.secretGrade);
      smUserVO.setSecretGradeText(UserSecretEnum.getSecretText(smUserVO.getSecretGrade()));
      smUserVO.setUserType(String.valueOf(userInfo.userType));
      smUserVO.setUserTypeText(UserTypeEnum.getTextByValue(smUserVO.getUserType()));
      smUserVO.setDescription(userInfo.desc);
      smUserVO.setEmail(userInfo.email);
      if(userInfo.status == 0){
         smUserVO.setLockFlag(false);
      }else{
         smUserVO.setLockFlag(true);
      }
      smUserVO.setCreator(userInfo.createUser);
      smUserVO.setCreateTime(VciDateUtil.long2Date(userInfo.createTime));
      smUserVO.setLastModifier(userInfo.updateUser);
      smUserVO.setLastLoginTime(VciDateUtil.long2Date(userInfo.updateTime));
      smUserVO.setLastModifyPasswordTime(VciDateUtil.long2Date(userInfo.pwdUpdateTime));
      return smUserVO;
   }
   /**
@@ -220,6 +254,7 @@
            throw new VciBaseException("获取用户失败:"+e.getMessage());
        }
   }
    /**
     * 批量获取用户的信息 (根据用户主键)
     * @param userOidCollections 用户主键的集合,可以超过1000个
@@ -227,8 +262,7 @@
     * @throws VciBaseException 参数为空或者数据库存在问题的时候会抛出异常
     */
   @Override
   public List<SmUserVO> listUserByUserOids(
         Collection<String> userOidCollections) throws VciBaseException {
   public List<SmUserVO> listUserByUserOids(Collection<String> userOidCollections) throws VciBaseException {
      WebUtil.alertNotNull(userOidCollections,"用户主键集合");
        try {
            UserInfo[] userInfoArr = platformClientUtil.getFrameworkService().getUserObjectByoids(VciBaseUtil.collection2StrArr(userOidCollections));
@@ -252,6 +286,63 @@
   }
   /**
    * 业务数据转换为显示对象
    * @param userInfo 平台返回的业务数据
    * @return 用户显示对象
    */
   private SmUserVO userInfo2VO(UserInfo userInfo) {
      SmUserVO smUserVO = new SmUserVO();
      smUserVO.setOid(userInfo.id);
      smUserVO.setId(userInfo.userName);
      smUserVO.setName(userInfo.trueName);
      smUserVO.setSecretGrade(userInfo.secretGrade);
      smUserVO.setSecretGradeText(UserSecretEnum.getSecretText(smUserVO.getSecretGrade()));
      smUserVO.setUserType(String.valueOf(userInfo.userType));
      smUserVO.setUserTypeText(UserTypeEnum.getTextByValue(smUserVO.getUserType()));
      smUserVO.setDescription(userInfo.desc);
      smUserVO.setEmail(userInfo.email);
      //用户所属部门的查询设置
      List<OrgDepartmentVO> orgDepartmentVOList = orgDepartmentVOMap.get(userInfo.id);
      smUserVO.setPkDepartment(
            Func.isEmpty(orgDepartmentVOList) ?
                  null:orgDepartmentVOList.stream().map(OrgDepartmentVO::getOid).collect(Collectors.joining(","))
      );
      smUserVO.setPkDepartmentName(
            Func.isEmpty(orgDepartmentVOList) ?
                  null:orgDepartmentVOList.stream().map(OrgDepartmentVO::getName).collect(Collectors.joining(","))
      );
      //密码策略查询设置
      SmPasswordStrategyVO smPasswordStrategyVO = smPwdStrategyVOMap.getOrDefault(userInfo.id,new SmPasswordStrategyVO());
      smUserVO.setPkPasswordStrategy(smPasswordStrategyVO.getOid());
      smUserVO.setPkPasswordStrategyName(smPasswordStrategyVO.getName());
      //角色查询设置
      List<SmRoleVO> smRoleVOList = smRoleVOMap.get(userInfo.id);
      smUserVO.setPkPerson(
            Func.isEmpty(smRoleVOList) ?
                  null:smRoleVOList.stream().map(SmRoleVO::getOid).collect(Collectors.joining(","))
      );
      smUserVO.setPkPersonName(
            Func.isEmpty(smRoleVOList) ?
                  null:smRoleVOList.stream().map(SmRoleVO::getName).collect(Collectors.joining(","))
      );
      //是否部门领导
      smUserVO.setIsDeptLeader(userInfo.isDeptLeader.equals("0") ? "不是":"是");
      //专业
      smUserVO.setSpecialties(userInfo.specialties);
      if(userInfo.status == 0){
         smUserVO.setLockFlag(false);
      }else{
         smUserVO.setLockFlag(true);
      }
      smUserVO.setCreator(userInfo.createUser);
      smUserVO.setCreateTime(VciDateUtil.long2Date(userInfo.createTime));
      smUserVO.setLastModifier(userInfo.updateUser);
      smUserVO.setLastLoginTime(VciDateUtil.long2Date(userInfo.updateTime));
      smUserVO.setLastModifyPasswordTime(VciDateUtil.long2Date(userInfo.pwdUpdateTime));
      return smUserVO;
   }
   /**
    * 用户的数据对象转换为显示对象
    * @param userDOS 用户
    * @return 显示对象
@@ -259,11 +350,20 @@
   private List<SmUserVO> smUserDO2VOs(List<SmUserDO> userDOS){
      List<SmUserVO> userVOList = new ArrayList<>();
      Optional.ofNullable(userDOS).orElseGet(()->new ArrayList<>()).stream().forEach(userDO->{
         SmUserVO userVO = new SmUserVO();
         BeanUtil.convert(userDO,userVO);
         userVOList.add(userVO);
         userVOList.add(smUserDO2VO(userDO));
      });
      return userVOList;
   }
   /**
    * 用户的数据对象转换为显示对象
    * @param smUserDO
    * @return
    */
   private SmUserVO smUserDO2VO(SmUserDO smUserDO){
      SmUserVO smUserVO = new SmUserVO();
      BeanUtil.convert(smUserDO,smUserVO);
      return smUserVO;
   }
   /**
@@ -324,9 +424,9 @@
    * @return 用户的显示对象的列表
    */
   private DataGrid<SmUserVO> gridUserByQueryField(String queryField,String queryValue, Map<String, String> queryMap, PageHelper pageHelper,boolean notIn){
      if(StringUtils.isBlank(queryValue)){
      /*if(StringUtils.isBlank(queryValue)){
         return new DataGrid<>();
      }
      }*/
      PageHelper newPageHelper = new PageHelper(-1);
      newPageHelper.setSort(pageHelper.getSort());
      newPageHelper.setOrder(pageHelper.getOrder());
@@ -369,6 +469,7 @@
      }
      return dataGrid;
   }
   /**
     * 获取用户的列表,默认会以用户名升序排列,用户的编辑页面列表不要使用这个接口
     * @param queryMap 查询条件
@@ -380,6 +481,49 @@
   public DataGrid<SmUserVO> gridUsers(Map<String, String> queryMap,
                              PageHelper pageHelper) throws VciBaseException {
      return gridUserByQueryField(null,null,queryMap,pageHelper,false);
   }
   /**
    * 用户管理界面分页查询
    * @param conditionMap 查询条件
    * @param pageHelper 分页参数
    * @return
    */
   @Override
   public DataGrid<SmUserVO> getDataGridUsers(Map<String, String> conditionMap, PageHelper pageHelper) throws PLException {
      if(pageHelper == null){
         pageHelper = new PageHelper(-1);
      }
      pageHelper.addDefaultAsc("PLTRUENAME");
      //String userName = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserName();
      //分页查询
      UserInfo[] userInfos = platformClientUtil.getFrameworkService().fetchUserInfoByCondition(
            conditionMap.get("name"),
            conditionMap.get("userName"),
            conditionMap.get("deptId"),
            conditionMap.get("roleId"),
            "developer",  //当前登录的用户名
            pageHelper.getPage(),
            pageHelper.getLimit()
      );
      DataGrid<SmUserVO> dataGrid = new DataGrid<>();
      if(Func.isNotEmpty(userInfos)){
         List<String> idList = Arrays.stream(userInfos).map(item -> item.id).collect(Collectors.toList());
         orgDepartmentVOMap = orgDeptQueryService.batchListDeptByUserOids(idList, null);
         smRoleVOMap = smRoleQueryService.batchListRoleByUserOids(idList,null);
         smPwdStrategyVOMap = smPwdStrategyQueryService.batchSmPwdStrategyByUserOids(idList);
         dataGrid.setData(userInfoArr2VO(userInfos));
         dataGrid.setTotal(
               platformClientUtil.getFrameworkService().getUserTotalByCondition(
                  conditionMap.get("name"),
                  conditionMap.get("userName"),
                  conditionMap.get("deptId"),
                  conditionMap.get("roleId"),
                  "developer"  //当前登录的用户名
               )
         );
      }
      return dataGrid;
   }
   /**
@@ -424,8 +568,6 @@
      return userVO.getName();
   }
    /**
     * 查询某个部门下的用户对象
     * @param deptOid 部门的主键
@@ -443,7 +585,7 @@
   }
   /**
    * 获取
    * 获取查询封装器,默认只查了plstatus=0和plusertype=2,排序默认plusername
    * @param queryField 查询属性
    * @param queryValue 查询的值
    * @param queryMap  查询条件,如果是角色的属性,需要使用pkrole.xxx
@@ -478,6 +620,43 @@
      queryWrapperForDO.setDistinct(true);
      return queryWrapperForDO;
   }
   /**
    * 获取查询封装器,默认只查plusertype!=1的
    * @param queryField 查询属性
    * @param queryValue 查询的值
    * @param queryMap  查询条件,如果是角色的属性,需要使用pkrole.xxx
    * @param pageHelper 分页对象
    * @param notIn 是否为不包含
    * @return 查询封装器
    */
   private VciQueryWrapperForDO getQueryWrapper2(String queryField,String queryValue,Map<String,String> queryMap,PageHelper pageHelper,boolean notIn){
      if(pageHelper == null){
         pageHelper = new PageHelper(-1);
      }
      pageHelper.addDefaultAsc("plusername");
      VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(queryMap,SmUserDO.class,pageHelper);
      if(StringUtils.isNotBlank(queryField)) {
         if (queryValue.contains(",")) {
            if (notIn) {
               queryWrapperForDO.notIn(queryField, VciBaseUtil.toInSql(VciBaseUtil.str2List(queryValue).toArray(new String[0])));
            } else {
               queryWrapperForDO.in(queryField, VciBaseUtil.toInSql(VciBaseUtil.str2List(queryValue).toArray(new String[0])));
            }
         } else {
            if (notIn) {
               queryWrapperForDO.neq(queryField, queryValue);
            } else {
               queryWrapperForDO.eq(queryField, queryValue);
            }
         }
      }
      addRoleQuerySql(queryMap,queryWrapperForDO);
      queryWrapperForDO.neq("plusertype", "2");
      queryWrapperForDO.setDistinct(true);
      return queryWrapperForDO;
   }
   /**
     * 查询某个部门下的用户对象列表
     * @param deptOid 部门的主键
@@ -492,6 +671,7 @@
         throws VciBaseException {
      return gridUserByQueryField(QUERY_FIELD_DEPARTMENT,deptOid,queryMap,pageHelper,false);
   }
    /**
     * 批量根据部门的主键获取用户
     * @param deptOidCollection 部门的主键集合
@@ -510,6 +690,7 @@
      }
      return new HashMap<>();
   }
   /**
     * 查询不在某个部门下的用户对象列表
     * @param deptOid 部门的主键
@@ -525,6 +706,7 @@
      }
      return listUserByQueryField(QUERY_FIELD_DEPARTMENT,deptOid,queryMap,true);
   }
   /**
     * 查询不在某个部门下的用户对象列表
     * @param deptOid 部门的主键
@@ -539,6 +721,7 @@
         throws VciBaseException {
      return gridUserByQueryField(QUERY_FIELD_DEPARTMENT,deptOid,queryMap,pageHelper,true);
   }
    /**
     * 查询某个角色下的用户对象
     * @param roleOid 角色的主键
@@ -555,6 +738,7 @@
      return listUserByQueryField(QUERY_FIELD_ROLE,roleOid,queryMap,false);
   }
   /**
     * 查询某个角色下的用户对象列表
     * @param roleOid 角色的主键
@@ -569,6 +753,7 @@
         throws VciBaseException {
      return gridUserByQueryField(QUERY_FIELD_ROLE,roleOid,queryMap,pageHelper,false);
   }
   /**
     * 查询不在某个角色下的用户对象列表
     * @param roleOid 角色的主键
@@ -584,6 +769,7 @@
      }
      return listUserByQueryField(QUERY_FIELD_ROLE,roleOid,queryMap,true);
   }
    /**
     * 查询不在某个角色下的用户对象列表
     * @param roleOid 角色的主键
@@ -598,6 +784,7 @@
         throws VciBaseException {
      return gridUserByQueryField(QUERY_FIELD_ROLE,roleOid,queryMap,pageHelper,true);
   }
   /**
     * 批量根据角色的主键获取用户
     * @param roleOidCollection 角色的主键集合
@@ -655,6 +842,7 @@
         PageHelper pageHelper) throws VciBaseException {
      return gridUserByQueryField(null,null,queryMap,pageHelper,false);
   }
   /**
     * 参照用户的树形显示
     * @param treeQueryObject 树型接口查询对象
@@ -687,6 +875,7 @@
      }
      return treeList;
   }
    /**
     * 校验密码是否相同,在新平台中存储的密码是两次md5
     * @param userOid 用户主键
@@ -714,6 +903,7 @@
      }
      return false;
   }
   /**
     * 校验用户是否锁定
     * @param smUserVO 用户对象
@@ -726,7 +916,9 @@
         return smUserVO.isLockFlag();
      }
      //查询密码策略
      SmPasswordStrategyVO passwordStrategyVO = getPasswordStrategyVOByOid(smUserVO.getPkPasswordStrategy());
      SmPasswordStrategyVO passwordStrategyVO = smPwdStrategyQueryService.getPasswordStrategyVOByOid(
            smUserVO.getPkPasswordStrategy()
      );
      if(passwordStrategyVO == null){
         throw new VciBaseException("系统里没有密码安全策略");
      }
@@ -736,57 +928,6 @@
      return false;
   }
   /**
    * 使用主键获取密码策略
    * @param oid 主键
    * @return 密码策略显示对象
    */
   public SmPasswordStrategyVO getPasswordStrategyVOByOid(String oid){
      VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(null, SmPasswordStrategyDO.class);
      queryWrapperForDO.eq("oid",oid.trim());
      List<BusinessObject> cboList = boService.queryBySql(queryWrapperForDO.getSelectFieldSql() + " from plpasswordstrategy " +
            queryWrapperForDO.getTableNick() + queryWrapperForDO.getLinkTableSql() +
            (StringUtils.isBlank(queryWrapperForDO.getWhereSql()) ? "" : (" where " + queryWrapperForDO.getWhereSql())), null);
      if(!CollectionUtils.isEmpty(cboList)){
         SmPasswordStrategyDO passwordStrategyDO = new SmPasswordStrategyDO();
         WebUtil.copyValueToObjectFromCbos(cboList.get(0),passwordStrategyDO);
         SmPasswordStrategyVO passwordStrategyVO = new SmPasswordStrategyVO();
         BeanUtil.convert(passwordStrategyDO,passwordStrategyVO);
         return passwordStrategyVO;
      }else{
         //获取默认的
         queryWrapperForDO = new VciQueryWrapperForDO(null, SmPasswordStrategyDO.class);
         queryWrapperForDO.eq("plisdefault","1");
         cboList = boService.queryBySql(queryWrapperForDO.getSelectFieldSql() + " from plpasswordstrategy " +
               queryWrapperForDO.getTableNick() + queryWrapperForDO.getLinkTableSql() +
               (StringUtils.isBlank(queryWrapperForDO.getWhereSql()) ? "" : (" where " + queryWrapperForDO.getWhereSql())), null);
         if(!CollectionUtils.isEmpty(cboList)){
            SmPasswordStrategyDO passwordStrategyDO = new SmPasswordStrategyDO();
            WebUtil.copyValueToObjectFromCbos(cboList.get(0),passwordStrategyDO);
            SmPasswordStrategyVO passwordStrategyVO = new SmPasswordStrategyVO();
            BeanUtil.convert(passwordStrategyDO,passwordStrategyVO);
            return passwordStrategyVO;
         }
      }
      return null;
   }
    /**
     * 根据用户的主键,获取用户的密码安全策略
     * @param userOid 用户的主键
     * @return 密码安全策略的显示对象,如果不存在则会返回Null
     * @throws VciBaseException 参数为空或者数据库查询出错的时候会抛出异常
     */
   @Override
   public SmPasswordStrategyVO getPasswordStrategyVOByUserOid(String userOid)
         throws VciBaseException {
      WebUtil.alertNotNull(userOid,"用户的主键");
      SmUserVO userVO = getUserByUserOid(userOid);
      if(userVO == null || StringUtils.isBlank(userVO.getOid())){
         throw new VciBaseException(DATA_OID_NOT_EXIST);
      }
      return getPasswordStrategyVOByOid(userVO.getPkPasswordStrategy());
   }
    /**
     * 设置某个用户是锁定状态
@@ -796,6 +937,7 @@
   public void lockUser(String userId) {
      //老的这个平台,是依靠锁定次数来判断的,所以这里没办法直接设置
   }
    /**
     * 设置某个用户不是锁定状态
     * @param userId 用户名
@@ -810,6 +952,7 @@
         throw WebUtil.getVciBaseException(vciError);
      }
   }
    /**
     * 修改密码
     * @param userOid 用户主键
@@ -833,6 +976,7 @@
         throw WebUtil.getVciBaseException(vciError);
      }
   }
   /**
     * 更新用户的密码错误次数
     * @param userOid 用户的主键
@@ -850,6 +994,7 @@
         throw WebUtil.getVciBaseException(vciError);
      }
   }
    /**
     * 更新用户的最后登录时间
     * @param userOid 用户的主键
@@ -865,4 +1010,109 @@
         throw WebUtil.getVciBaseException(vciError);
      }
   }
   /**
    * 添加用户
    * @param smUserDTO
    * @return
    */
   @Override
   public boolean addUser(SmUserDTO smUserDTO) throws PLException {
      VciBaseUtil.alertNotNull(
            smUserDTO,"添加的用户对象",
            smUserDTO.getId(),"账号",
            smUserDTO.getPassword(),"密码",
            smUserDTO.getConfirmPassword(),"确认密码",
            smUserDTO.getName(),"姓名"
      );
      //确认密码
      String confirmPassword = smUserDTO.getConfirmPassword();
      //比对密码是是否一致
      if(!smUserDTO.getPassword().equals(confirmPassword)){
         throw new VciBaseException("两次密码不一致,请重新填写!");
      }
      //先用户名(账号)查重
      SmUserVO dbSmUserVO = getUserByUserId(smUserDTO.getId());
      if(Func.isNotEmpty(dbSmUserVO) && Func.isNotBlank(dbSmUserVO.getOid())){
         throw new VciBaseException("该用户名在系统中已经存在,请修改!");
      }
      //密码加密
      ThreeDES des = new ThreeDES();
      des.getKey("daliantan0v0");// 生成密匙
      //第二次MD5加密
      String md5Password2 = des.getEncString(smUserDTO.getPassword());
      //生成存储的DO对象
      smUserDTO.setOid(VciBaseUtil.getPk());
      smUserDTO.setPassword(md5Password2);
      smUserDTO.setLockFlag("0");
      BusinessObject user = ClientServiceProvider.getBOFService().initBusinessObject("user");
      SmUserDO smUserDO = new SmUserDO();
      BeanUtil.convert(user,smUserDO);
      UserInfo userInfo = new UserInfo();
      BeanUtil.convert(smUserDO,userInfo);
      return platformClientUtil.getFrameworkService().saveOrUpdateUser(userInfo, null);
   }
   /**
    * 修改用户
    * @param smUserDTO
    * @return
    */
   @Override
   public boolean updateUser(SmUserDTO smUserDTO) throws PLException {
      UserInfo userInfo = new UserInfo();
      BeanUtil.convert(smUserDTO,userInfo);
      return platformClientUtil.getFrameworkService().updateUser(userInfo, null);
   }
   /***
    * 用户从客户端对象到corba对象
    *
    * @param user
    * @return
    */
   public UserInfo changeUserObjectToUserInfo(UserObject user) {
      UserInfo userInfo = new UserInfo();
      userInfo.id = user.getId() == null ? "" : user.getId();
      userInfo.userName = user.getUserName() == null ? "" : user.getUserName();
      userInfo.pwd = user.getPwd() == null ? "" : user.getPwd();
      userInfo.trueName = user.getTrueName() == null ? "" : user.getTrueName();
      userInfo.specialties = user.getSpecialties() == null ? "" : user.getSpecialties();
      userInfo.email = user.getEmail() == null ? "" : user.getEmail();
      userInfo.desc = user.getDesc() == null ? "" : user.getDesc();
      userInfo.userType = user.getUserType();
      userInfo.status = user.getStatus();
      userInfo.createTime = user.getCreateTime();
      userInfo.createUser = user.getCreateUser() == null ? "" : user.getCreateUser();
      userInfo.updateTime = user.getUpdateTime();
      userInfo.updateUser = user.getUpdateUser() == null ? "" : user.getUpdateUser();
      userInfo.pwdUpdateTime = user.getPwdUpdateTime();
      userInfo.grantor = user.getGrantor() == null ? "" : user.getGrantor();
      userInfo.isDeptLeader = user.getIsDeptLeader() == null ? "0" : user.getIsDeptLeader();
      return userInfo;
   }
   /**
    * 删除用户
    * @param ids
    * @return
    */
   @Override
   public boolean deleteUser(String[] ids) throws PLException {
      VciBaseUtil.alertNotNull(ids,"待删除的用户id列表不能为空!");
      return platformClientUtil.getFrameworkService().deleteUser(ids, null);
   }
   /**
    * 用户停用/启用
    * @param ids
    * @param flag
    * @return
    */
   @Override
   public boolean disableOrEnableUsers(String[] ids, boolean flag) throws PLException {
      VciBaseUtil.alertNotNull(ids,"停用/启用的用户id列表");
      return platformClientUtil.getFrameworkService().stopUsers(ids, flag,null);
   }
}