ludc
2024-06-25 ca2d9c7e8746f81ad9a0f19e2a1ca6515c7ac931
用户管理:停用、启用、修改、删除
已修改5个文件
640 ■■■■ 文件已修改
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/SmUserQueryServiceI.java 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmRoleQueryServiceImpl.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmUserQueryServiceImpl.java 432 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/SmUserQueryController.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/pagemodel/SmUserVO.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/SmUserQueryServiceI.java
@@ -1,5 +1,7 @@
package com.vci.frameworkcore.compatibility;
import com.vci.corba.common.PLException;
import com.vci.frameworkcore.dto.SmUserDTO;
import com.vci.frameworkcore.pagemodel.SmPasswordStrategyVO;
import com.vci.frameworkcore.pagemodel.SmUserVO;
import com.vci.starter.web.exception.VciBaseException;
@@ -7,6 +9,7 @@
import com.vci.starter.web.pagemodel.PageHelper;
import com.vci.starter.web.pagemodel.Tree;
import com.vci.starter.web.pagemodel.TreeQueryObject;
import com.vci.web.model.SmUserDO;
import java.util.Collection;
import java.util.List;
@@ -20,6 +23,14 @@
 * @date 2020/3/1
 */
public interface SmUserQueryServiceI{
    /**
     * 检查用户是否存在,可以根据用户名,也可以根据用户oid
     * @param userName  传null,即用oid作为检查条件
     * @param oid    传null,即用userName作为检查条件
     * @return true存在,false不存在
     */
    boolean checkUserExist(String userName,String oid) throws PLException;
    /**
     *  根据用户名获取用户的对象,不区分大小写
@@ -61,6 +72,14 @@
     * @throws VciBaseException 参数为空的时候会抛出异常
     */
    DataGrid<SmUserVO> gridUsers(Map<String, String> queryMap, PageHelper pageHelper) throws VciBaseException;
    /**
     * 用户管理界面分页查询
     * @param conditionMap 查询条件
     * @param pageHelper 分页参数
     * @return
     */
    DataGrid<SmUserVO> getDataGridUsers(Map<String, String> conditionMap, PageHelper pageHelper) throws PLException;
    /**
     * 根据用户名获取用户的姓名
@@ -184,6 +203,7 @@
     * @throws VciBaseException 查询出错的时候会抛出异常
     */
    List<Tree> refTreeUsers(TreeQueryObject treeQueryObject) throws VciBaseException;
    /**
     * 校验密码是否相同,在新平台中存储的密码是两次md5
     * @param userOid 用户主键
@@ -199,14 +219,6 @@
     * @return true表示已经锁定
     */
    boolean checkUserLock(SmUserVO smUserVO, Integer wrongCount);
    /**
     * 根据用户的主键,获取用户的密码安全策略
     * @param userOid 用户的主键
     * @return 密码安全策略的显示对象,如果不存在则会返回Null
     * @throws VciBaseException 参数为空或者数据库查询出错的时候会抛出异常
     */
    SmPasswordStrategyVO getPasswordStrategyVOByUserOid(String userOid) throws VciBaseException;
    /**
     * 设置某个用户是锁定状态
@@ -243,4 +255,33 @@
     */
    void updateUserLoginTime(String userOid) throws VciBaseException;
    /**
     * 添加用户
     * @param smUserDTO
     * @return
     */
    boolean addUser(SmUserDTO smUserDTO) throws PLException;
    /**
     * 修改用户
     * @param smUserDTO
     * @return
     */
    boolean updateUser(SmUserDTO smUserDTO) throws PLException;
    /**
     * 删除用户
     * @param ids
     * @return
     */
    boolean deleteUser(String[] ids) throws PLException;
    /**
     * 用户停用/启用
     * @param ids
     * @param flag
     * @return
     */
    boolean disableOrEnableUsers(String[] ids,boolean flag) throws PLException;
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmRoleQueryServiceImpl.java
@@ -6,6 +6,7 @@
import com.vci.frameworkcore.enumpck.RoleClassifyEnum;
import com.vci.frameworkcore.enumpck.RoleControlAreaEnum;
import com.vci.frameworkcore.model.SmRoleForPlatform1;
import com.vci.frameworkcore.pagemodel.OrgDepartmentVO;
import com.vci.frameworkcore.pagemodel.SmRoleVO;
import com.vci.omd.utils.ObjectTool;
import com.vci.starter.web.constant.QueryOptionConstant;
@@ -26,6 +27,7 @@
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
@@ -61,6 +63,7 @@
        }
        return platformRole2SmRoleVO(role);
    }
    /**
     * 批量获取角色的信息 (根据角色主键)
     * @param roleOidCollections 角色主键的集合,可以超过1000个
@@ -84,6 +87,7 @@
        });
        return     platformRole2SmRoleVOs(roles);
    }
    /**
     * 获取角色的列表,默认会以角色名升序排列,角色的编辑页面列表不要使用这个接口
     * @param queryMap 查询条件
@@ -109,6 +113,7 @@
        }
        return dataGrid;
    }
     /**
     * 根据角色主键获取角色的姓名
     * @param roleOid 角色主键
@@ -119,6 +124,7 @@
        WebUtil.alertNotNull(roleOid,"角色主键");
        return getRoleByRoleOid(roleOid).getName();
    }
     /**
     * 根据用户主键获取关联的角色
     * @param userOid 用户主键
@@ -170,6 +176,7 @@
        }
        return platformRole2SmRoleVOs(roles);
    }
      /**
     * 根据用户主键获取关联的角色
     * @param userOid 用户主键
@@ -210,6 +217,7 @@
        }
        return gridRoles(queryMap,pageHelper);
    }
     /**
     * 获取未关联某个用户的角色
     * @param userOid 用户主键
@@ -221,6 +229,7 @@
            Map<String, String> queryMap) {
        return listRoleByUserOid(userOid,queryMap,true);
    }
    /**
     * 获取未关联某个用户的角色
     * @param userOid 用户主键
@@ -233,6 +242,7 @@
            Map<String, String> queryMap, PageHelper pageHelper) {
        return gridRoleByUserOid(userOid,queryMap,pageHelper,true);
    }
      /**
     * 批量根据用户的主键来获取角色
     * @param userOidCollection 用户主键集合
@@ -255,16 +265,19 @@
                List<BusinessObject> cbos = boService.queryBySql(sql, null);
                if(!CollectionUtils.isEmpty(cbos)){
                    cbos.stream().forEach(cbo->{
                        String userOid = ObjectTool.getBOAttributeValue(cbo,"pluseruid");
                        String userOid = ObjectTool.getNewBOAttributeValue(cbo,"pluseruid");
                        List<String> roleOids = userRoleOidMap.getOrDefault(userOid,new ArrayList<>());
                        roleOids.add(ObjectTool.getBOAttributeValue(cbo,"plroleuid"));
                        roleOids.add(ObjectTool.getNewBOAttributeValue(cbo,"plroleuid"));
                        userRoleOidMap.put(userOid,roleOids);
                    });
                }
            }
        });
        if(!CollectionUtils.isEmpty(roleVOList)){
            Map<String, SmRoleVO> roleVOMap = roleVOList.stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
            //这儿应该对roleVOList做一次去重处理,因为肯定会有重复的角色被查出来
            Map<String, SmRoleVO> roleVOMap = roleVOList.stream()
                    .collect(Collectors.toMap(SmRoleVO::getOid, Function.identity(), (existing, replacement) -> existing));
            //Map<String, SmRoleVO> roleVOMap = roleVOList.stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
            Map<String, List<SmRoleVO>> userRoleVOMap = new HashMap<>();
            userRoleOidMap.forEach((userOid,roleOids)->{
                List<SmRoleVO> roleVOS = new ArrayList<>();
@@ -279,6 +292,7 @@
        }
        return new HashMap<>();
    }
     /**
     * 根据权限主键获取关联的角色
     * @param functionOid 权限主键
@@ -444,6 +458,7 @@
        }
        return new HashMap<>();
    }
     /**
     * 参照角色的列表,三员管理的三个角色不会显示
     * @param queryMap 查询条件
@@ -457,6 +472,7 @@
        //老平台没有生效状态
        return gridRoles(queryMap, pageHelper);
    }
      /**
     * 角色的树形展示,常用于角色选择用户的页面使用
     * @param treeQueryObject 树查询对象
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);
    }
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/SmUserQueryController.java
@@ -1,11 +1,17 @@
package com.vci.frameworkcore.controller;
import com.vci.frameworkcore.compatibility.SmUserQueryServiceI;
import com.vci.frameworkcore.dto.SmUserDTO;
import com.vci.frameworkcore.pagemodel.SmUserVO;
import com.vci.starter.web.annotation.controller.VciUnCheckRight;
import com.vci.starter.web.exception.VciBaseException;
import com.vci.starter.web.pagemodel.*;
import com.vci.web.model.SmUserDO;
import com.zeroc.IceInternal.Ex;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@@ -19,6 +25,7 @@
 */
@Controller
@RequestMapping("/userQueryController")
@Slf4j
public class SmUserQueryController {
    /**
@@ -75,7 +82,7 @@
            queryObject = new BaseQueryObject();
        }
        DataGrid<SmUserVO> userVODataGrid = userQueryService.gridUserByDeptOid(pkDepartment, queryObject.getConditionMap(), queryObject.getPageHelper());
        return  BaseResult.dataGrid(userVODataGrid);
        return BaseResult.dataGrid(userVODataGrid);
        //如果是老的项目,应该在gridUserByDeptOid上添加try,catch,然后catch里应该使用下面的代码
        //BaseResult.fail("这里返回前端的错误信息");
    }
@@ -112,8 +119,99 @@
        return BaseResult.success("修改密码成功");
    }
    /**
     * 用户管理列表分页查询,平台是不查plusertype=0的成员,也就是developer和admin
     * @param queryObject 查询对象,包含了查询条件,分页,排序等,即允许使用SmUserVO里的所有属性作为查询条件,也可以使用pkRole.xxx,pkDepartment.xxx,pkDuty.xxx这样来查询
     * @return 全部用户显示对象列表数据,请获取其中的data属性
     * @throws VciBaseException 查询出错的时候会抛出异常,如果是老的项目里不抛出异常
     */
    @RequestMapping(value = "/getDataGridUsers",method = RequestMethod.GET)
    @ResponseBody
    @VciUnCheckRight
    public BaseResult<SmUserVO> getDataGridUsers(BaseQueryObject queryObject) throws VciBaseException {
        try {
            DataGrid<SmUserVO> userVODataGrid = userQueryService.getDataGridUsers(queryObject.getConditionMap(),queryObject.getPageHelper());
            return BaseResult.dataGrid(userVODataGrid);
        }catch (Exception e) {
            e.printStackTrace();
            log.error("用户管理列表查询时出现错误,原因:" + e.getMessage());
            return BaseResult.fail("用户管理列表查询时出现错误,原因:" + e.getMessage());
        }
    }
    /**
     * 添加用户
     * @param smUserDTO
     * @return
     */
    @RequestMapping(value = "/addUser",method = RequestMethod.POST)
    @ResponseBody
    @VciUnCheckRight
    public BaseResult addUser(@RequestBody SmUserDTO smUserDTO){
        try {
            return BaseResult.success(userQueryService.addUser(smUserDTO) ? "用户添加成功!":"用户添加失败!");
        }catch (Exception e){
            e.printStackTrace();
            log.error("添加用户时出现错误,原因:" + e.getMessage());
            return BaseResult.fail("添加用户时出现错误,原因:" + e.getMessage());
        }
    }
    /**
     * 修改用户信息
     * @param smUserDTO
     * @return
     */
    @RequestMapping(value = "/updateUser",method = RequestMethod.PUT)
    @ResponseBody
    @VciUnCheckRight
    public BaseResult updateUser(@RequestBody SmUserDTO smUserDTO){
        try {
            return BaseResult.success(userQueryService.updateUser(smUserDTO) ? "用户修改成功!":"用户修改失败!");
        }catch (Exception e){
            e.printStackTrace();
            log.error("修改用户时出现错误,原因:" + e.getMessage());
            return BaseResult.fail("修改用户时出现错误,原因:" + e.getMessage());
        }
    }
    /**
     * 删除用户
     * @param ids
     * @return
     */
    @RequestMapping(value = "/deleteUser",method = RequestMethod.DELETE)
    @ResponseBody
    //@VciUnCheckRight
    public BaseResult deleteUser(String[] ids){
        try {
            return BaseResult.success(userQueryService.deleteUser(ids) ? "删除用户成功!":"删除用户失败!");
        }catch (Exception e){
            e.printStackTrace();
            log.error("添加用户时出现错误,原因:" + e.getMessage());
            return BaseResult.fail("添加用户时出现错误,原因:" + e.getMessage());
        }
    }
    /**
     * 用户停用/启用
     * @param ids
     * @param flag
     * @return
     */
    @RequestMapping(value = "/stopUsers",method = RequestMethod.POST)
    @ResponseBody
    //@VciUnCheckRight
    public BaseResult disableOrEnableUsers(String[] ids,boolean flag){
        try {
            userQueryService.disableOrEnableUsers(ids,flag);
            return BaseResult.success("用户【停用/启用】成功!");
        }catch (Exception e){
            e.printStackTrace();
            log.error("用户【停用/启用】时出现错误,原因:" + e.getMessage());
            return BaseResult.fail("用户【停用/启用】时出现错误,原因:" + e.getMessage());
        }
    }
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/pagemodel/SmUserVO.java
@@ -1,4 +1,5 @@
package com.vci.frameworkcore.pagemodel;
import com.vci.common.annotaion.CustomAnnotaion;
import com.vci.starter.web.pagemodel.BaseModelVO;
import java.util.Date;
@@ -23,7 +24,6 @@
     * 用户姓名
     */
    private String name;
    /**
     * 用户类型
@@ -118,7 +118,6 @@
    /**
     * 性别
     */
    private String sex;
    /**
@@ -145,6 +144,24 @@
     * 头像
     */
    private String photo;
    /**
     * 是否是部门领导标识 1:是 0:不是
     */
    private String isDeptLeader = "0";
    /**
     * 专业
     */
    private String specialties;
    public void setSpecialties(String specialties) {
        this.specialties = specialties;
    }
    public String getSpecialties() {
        return specialties;
    }
    @Override
    public String getId() {
@@ -357,6 +374,14 @@
        this.photo = photo;
    }
    public void setIsDeptLeader(String isDeptLeader) {
        this.isDeptLeader = isDeptLeader;
    }
    public String getIsDeptLeader() {
        return isDeptLeader;
    }
    @Override
    public String toString() {
        return "SmUserVO{" +