ludc
2024-07-04 8c4b79d994c5a95dd33d4b0313e2f2d63985e074
角色管理、部门管理相关接口上传。
已修改15个文件
已添加2个文件
1536 ■■■■ 文件已修改
Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/ControllerUtil.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/OrgDeptQueryServiceI.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/SmRoleQueryServiceI.java 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/SmUserQueryServiceI.java 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/OrgDeptQueryServiceImpl.java 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmPwdStrategyQueryServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmRoleQueryServiceImpl.java 327 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmUserQueryServiceImpl.java 313 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/OrgDepartmentQueryController.java 89 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/SmPwdStrategyQueryController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/SmRoleQueryController.java 134 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/SmUserQueryController.java 140 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/model/SmRoleForPlatform1.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/model/dto/OrgDepartmentDTO.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/model/po/SmRolePO.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/pagemodel/SmRoleVO.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/pagemodel/SmUserVO.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/ControllerUtil.java
@@ -204,6 +204,7 @@
        }
        response.setContentType(contentType);
        response.setCharacterEncoding("UTF-8");
        //错误时也需要这个参数
        Cookie cookie = new Cookie("fileDownload", "true");
        cookie.setPath("/");
        response.addCookie(cookie);
@@ -217,6 +218,35 @@
            throw e;
        }
    }
    /**
     * å°†é”™è¯¯çš„信息输入流写入到返回流中
     * @param response  å“åº”对象
     * @param data æ•°æ®çš„信息
     * @throws IOException æ‹·è´å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常
     */
    public static void writeDataToResponse(HttpServletResponse response,String fileName,byte[] data,String contentType) throws IOException {
        if (StringUtils.isBlank(contentType)) {
            contentType = "application/force-download";
        }
        response.setContentType(contentType);
        response.setCharacterEncoding("UTF-8");
        //错误时也需要这个参数
        response.addHeader("Content-Disposition", "attachment; filename="+ fileName+ ";filename*=utf-8''" + fileName);
        Cookie cookie = new Cookie("fileDownload", "true");
        cookie.setPath("/");
        response.addCookie(cookie);
        try {
            response.getOutputStream().write(data);
        } catch (IOException e) {
            //有可能客户端的链接
            if (logger.isErrorEnabled()) {
                logger.error("写入文件到响应流出错", e);
            }
            throw e;
        }
    }
    /**
     * å°†çŽ¯å¢ƒå˜é‡ä¸­çš„æŸä¸ªæ–‡ä»¶å†™åˆ°è¿”å›žæµä¸­
     * @param response å“åº”对象
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/OrgDeptQueryServiceI.java
@@ -1,7 +1,7 @@
package com.vci.frameworkcore.compatibility;
import com.vci.corba.common.PLException;
import com.vci.corba.common.data.UserEntityInfo;
import com.vci.frameworkcore.model.dto.OrgDepartmentDTO;
import com.vci.frameworkcore.pagemodel.OrgDepartmentVO;
import com.vci.starter.web.exception.VciBaseException;
import com.vci.starter.web.pagemodel.DataGrid;
@@ -27,6 +27,15 @@
     * @throws VciBaseException å‚数为空或者数据库存在问题的时候会抛出异常
     */
    OrgDepartmentVO getDeptByDeptOid(String deptOid) throws VciBaseException;
    /**
     * æ ¹æ®çˆ¶éƒ¨é—¨ä¸»é”®èŽ·å–å’Œéƒ¨é—¨åç§°éƒ¨é—¨çš„ä¿¡æ¯
     * @param parentDeptOid çˆ¶éƒ¨é—¨ä¸»é”®
     * @param conditionMap æŸ¥è¯¢æ¡ä»¶
     * @return éƒ¨é—¨çš„æ˜¾ç¤ºå¯¹è±¡ï¼Œå¦‚果部门不存在则返回null,不会抛出异常
     * @throws VciBaseException å‚数为空或者数据库存在问题的时候会抛出异常
     */
    OrgDepartmentVO getDeptByDeptPOidAndCondition(String parentDeptOid,Map<String,String> conditionMap) throws VciBaseException;
    /**
     * æ‰¹é‡èŽ·å–éƒ¨é—¨çš„ä¿¡æ¯ ï¼ˆæ ¹æ®éƒ¨é—¨ä¸»é”®ï¼‰
@@ -94,7 +103,7 @@
    List<OrgDepartmentVO> listChildrenDeptByParentOid(String pkFatherDepartmment, Map<String, String> queryMap);
    /**
     * èŽ·å–æŸä¸ªéƒ¨é—¨çš„æ‰€æœ‰æ›¾ç»çš„ä¸‹çº§éƒ¨é—¨
     * èŽ·å–æŸä¸ªéƒ¨é—¨çš„æ‰€æœ‰å±‚çº§çš„ä¸‹çº§éƒ¨é—¨
     * @param pkFatherDepartmment éƒ¨é—¨çš„主键
     * @param queryMap æŸ¥è¯¢æ¡ä»¶
     * @return éƒ¨é—¨æ˜¾ç¤ºå¯¹è±¡
@@ -124,11 +133,25 @@
    boolean saveUsersDept(String[] userOIds, String deptId) throws PLException;
    /**
     * æ ¹æ®éƒ¨é—¨åç§°ç»„成的树路径,查询部门信息
     * @param deptTreeNameList éƒ¨é—¨åç§°(上下级部门之间以反斜杠隔开(/))
     * @return è¿”回的key为部门名称组成的上下级关系(deptTreeNameList中的每个元素),value为对应的部门信息
     * å¢žåŠ éƒ¨é—¨ä¿¡æ¯
     * @param orgDepartmentDTO
     * @return
     */
    //Map<String,String> getDeptByTreeName(/*请传去重后的list*/List<String> deptTreeNameList);
    boolean addDept(OrgDepartmentDTO orgDepartmentDTO) throws PLException;
    /**
     * ä¿®æ”¹éƒ¨é—¨ä¿¡æ¯
     * @param orgDepartmentDTO
     * @return
     */
    boolean updateDept(OrgDepartmentDTO orgDepartmentDTO) throws PLException;
    /**
     * åˆ é™¤éƒ¨é—¨
     * @param ids
     * @return
     */
    boolean deleteDept(String[] ids) throws PLException;
    /**
     * èŽ·å–æ‰€æœ‰éƒ¨é—¨çš„ä¿¡æ¯
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/SmRoleQueryServiceI.java
@@ -1,16 +1,16 @@
package com.vci.frameworkcore.compatibility;
import com.vci.corba.common.PLException;
import com.vci.frameworkcore.dto.SmRoleDTO;
import com.vci.frameworkcore.pagemodel.SmRoleVO;
import com.vci.starter.web.exception.VciBaseException;
import com.vci.starter.web.pagemodel.DataGrid;
import com.vci.starter.web.pagemodel.PageHelper;
import com.vci.starter.web.pagemodel.Tree;
import com.vci.starter.web.pagemodel.TreeQueryObject;
import com.vci.starter.web.pagemodel.*;
import java.io.File;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.concurrent.locks.Condition;
/**
 * è§’色的查询服务,兼容来平台,所有的接口都返回新的角色显示对象
@@ -21,11 +21,11 @@
    /**
     * æ ¹æ®è§’色主键获取角色的信息
     * @param roleOid è§’色主键
     * @param conditionMap è§’色主键
     * @return è§’色的显示对象,如果角色不存在则返回null,不会抛出异常
     * @throws VciBaseException å‚数为空或者数据库存在问题的时候会抛出异常
     */
    SmRoleVO getRoleByRoleOid(String roleOid) throws VciBaseException;
    SmRoleVO getRoleByConditionMap(Map<String,String> conditionMap) throws VciBaseException;
    /**
     * æ‰¹é‡èŽ·å–è§’è‰²çš„ä¿¡æ¯ ï¼ˆæ ¹æ®è§’色主键)
@@ -52,6 +52,14 @@
    String getRoleNameByRoleOid(String roleOid);
    /**
     * æ ¹æ®è§’色名查询角色信息
     * @param roleNameList
     * @param queryMap
     * @return
     */
    List<SmRoleVO> listRoleByRoleName(Collection<String> roleNameList, Map<String, String> queryMap);
    /**
     * æ ¹æ®ç”¨æˆ·ä¸»é”®èŽ·å–å…³è”çš„è§’è‰²
     * @param userOid ç”¨æˆ·ä¸»é”®
     * @param queryMap æŸ¥è¯¢æ¡ä»¶ï¼Œå¦‚果需要使用用户的属性来查询可以使用pkUser.xxxx
@@ -75,15 +83,6 @@
     * @return è§’色的显示对象
     */
    List<SmRoleVO> listRoleUnInUserOid(String userOid, Map<String, String> queryMap);
    /**
     * èŽ·å–æœªå…³è”æŸä¸ªç”¨æˆ·çš„è§’è‰²
     * @param userOid ç”¨æˆ·ä¸»é”®
     * @param queryMap æŸ¥è¯¢æ¡ä»¶ï¼Œå¦‚果需要使用用户的属性来查询可以使用pkUser.xxxx
     * @param pageHelper åˆ†é¡µå’ŒæŽ’序对象,老平台不支持使用角色编号来排序
     * @return è§’色的显示对象
     */
    DataGrid<SmRoleVO> gridRoleUninUserOid(String userOid, Map<String, String> queryMap, PageHelper pageHelper);
    /**
     * æ‰¹é‡æ ¹æ®ç”¨æˆ·çš„主键来获取角色
@@ -153,11 +152,41 @@
    List<Tree> refTreeRoles(TreeQueryObject treeQueryObject) throws VciBaseException;
    /**
     * è¯¥æ–¹æ³•只支持一次只允许单个用户分配多个角色,一对多
     * @param userOid
     * æ–°å¢žè§’色
     * @param smRoleDTO
     * @return true成功,false失败
     */
    boolean addRole(SmRoleDTO smRoleDTO) throws PLException;
    /**
     * ä¿®æ”¹è§’色
     * @param smRoleDTO
     * @return
     */
    boolean updateRole(SmRoleDTO smRoleDTO) throws PLException;
    /**
     * åˆ é™¤è§’色
     * @param ids
     * @return
     * @throws PLException
     */
    boolean deleteRole(String[] ids) throws PLException;
    /**
     * å¯¼å…¥è§’色
     * @param file
     * @return
     * @throws VciBaseException
     */
    BaseResult importRole(File file) throws VciBaseException;
    /**
     * ä¿å­˜ç”¨æˆ·è§’色关联关系
     * @param userOids
     * @param roleIds
     * @return
     */
    boolean saveRights(String userOid, String[] roleIds) throws PLException;
    boolean saveRights(String[] userOids, String[] roleIds) throws PLException;
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/SmUserQueryServiceI.java
@@ -63,15 +63,6 @@
    List<SmUserVO> listUserByUserOids(Collection<String> userOidCollections) throws VciBaseException;
    /**
     * èŽ·å–ç”¨æˆ·çš„åˆ—è¡¨ï¼Œé»˜è®¤ä¼šä»¥ç”¨æˆ·åå‡åºæŽ’åˆ—ï¼Œç”¨æˆ·çš„ç¼–è¾‘é¡µé¢åˆ—è¡¨ä¸è¦ä½¿ç”¨è¿™ä¸ªæŽ¥å£
     * @param queryMap æŸ¥è¯¢æ¡ä»¶
     * @param pageHelper åˆ†é¡µå’ŒæŽ’序的信息,在兼容老平台的时候会自动兼容,如果属性不存在会自动忽略
     * @return ç”¨æˆ·çš„æ˜¾ç¤ºå¯¹è±¡åˆ—表
     * @throws VciBaseException å‚数为空的时候会抛出异常
     */
    DataGrid<SmUserVO> gridUsers(Map<String, String> queryMap, PageHelper pageHelper) throws VciBaseException;
    /**
     * ç”¨æˆ·ç®¡ç†ç•Œé¢åˆ†é¡µæŸ¥è¯¢
     * @param conditionMap æŸ¥è¯¢æ¡ä»¶
     * @param pageHelper åˆ†é¡µå‚æ•°
@@ -94,6 +85,23 @@
    String getUserNameByUserOid(String userOid);
    /**
     * æ‰¹é‡æ ¹æ®éƒ¨é—¨çš„主键获取用户
     * @param deptOidCollection éƒ¨é—¨çš„主键集合
     * @return éƒ¨é—¨ä¸»é”®å’Œå¯¹åº”的用户显示对象列表的映射,key部门的主键,value是这个部门下的用户
     * @throws VciBaseException å‚数为空或者查询出错的时候会抛出异常
     */
    Map<String,List<SmUserVO>> batchListUserByDeptOids(Collection<String> deptOidCollection) throws VciBaseException;
    /**
     * ç»Ÿè®¡éƒ¨é—¨ä¸‹çš„用户:包含子部门下的用户
     * @param deptOid
     * @param queryMap
     * @return
     * @throws VciBaseException
     */
    List<SmUserVO> countSmUserByDeptOid(String deptOid, Map<String, String> queryMap) throws VciBaseException;
    /**
     * æŸ¥è¯¢æŸä¸ªéƒ¨é—¨ä¸‹çš„用户对象
     * @param deptOid éƒ¨é—¨çš„主键
     * @param queryMap æŸ¥è¯¢æ¡ä»¶ï¼Œå¦‚果是部门的某个属性作为查询条件,则可以使用pkDepartment.xxx这样的方式
@@ -101,24 +109,6 @@
     * @throws VciBaseException å‚数为空或者查询出错的时候会抛出异常
     */
    List<SmUserVO> listUserByDeptOid(String deptOid, Map<String, String> queryMap) throws VciBaseException;
    /**
     * æŸ¥è¯¢æŸä¸ªéƒ¨é—¨ä¸‹çš„用户对象列表
     * @param deptOid éƒ¨é—¨çš„主键
     * @param queryMap æŸ¥è¯¢æ¡ä»¶ï¼Œå¦‚果是部门的某个属性作为查询条件,则可以使用pkDepartment.xxx这样的方式
     * @param pageHelper åˆ†é¡µå’ŒæŽ’序信息,默认使用用户名升序排列
     * @return ç”¨æˆ·çš„æ˜¾ç¤ºå¯¹è±¡åˆ—表,默认使用用户名升序排列
     * @throws VciBaseException å‚数为空或者查询出错的时候会抛出异常
     */
    DataGrid<SmUserVO> gridUserByDeptOid(String deptOid, Map<String, String> queryMap, PageHelper pageHelper) throws VciBaseException;
    /**
     * æ‰¹é‡æ ¹æ®éƒ¨é—¨çš„主键获取用户
     * @param deptOidCollection éƒ¨é—¨çš„主键集合
     * @return éƒ¨é—¨ä¸»é”®å’Œå¯¹åº”的用户显示对象列表的映射,key部门的主键,value是这个部门下的用户
     * @throws VciBaseException å‚数为空或者查询出错的时候会抛出异常
     */
    Map<String,List<SmUserVO>> batchListUserByDeptOids(Collection<String> deptOidCollection) throws VciBaseException;
    /**
     * æŸ¥è¯¢ä¸åœ¨æŸä¸ªéƒ¨é—¨ä¸‹çš„用户对象列表
@@ -130,33 +120,13 @@
    List<SmUserVO> listUserUnInDeptOid(String deptOid, Map<String, String> queryMap) throws VciBaseException;
    /**
     * æŸ¥è¯¢ä¸åœ¨æŸä¸ªéƒ¨é—¨ä¸‹çš„用户对象列表
     * @param deptOid éƒ¨é—¨çš„主键
     * @param queryMap æŸ¥è¯¢æ¡ä»¶ï¼Œå¦‚果是部门的某个属性作为查询条件,则可以使用pkDepartment.xxx这样的方式
     * @param pageHelper åˆ†é¡µå’ŒæŽ’序信息,默认使用用户名升序排列
     * @return ç”¨æˆ·çš„æ˜¾ç¤ºå¯¹è±¡åˆ—表,默认使用用户名升序排列
     * @throws VciBaseException å‚数为空或者查询出错的时候会抛出异常
     */
    DataGrid<SmUserVO> gridUserUnInDeptOid(String deptOid, Map<String, String> queryMap, PageHelper pageHelper) throws VciBaseException;
    /**
     * æŸ¥è¯¢æŸä¸ªè§’色下的用户对象
     *  æŸ¥è¯¢æŸä¸ªè§’色下的用户对象列表
     * @param roleOid è§’色的主键
     * @param queryMap æŸ¥è¯¢æ¡ä»¶ï¼Œå¦‚果是角色的某个属性作为查询条件,则可以使用pkRole.xxx这样的方式
     * @return ç”¨æˆ·çš„æ˜¾ç¤ºå¯¹è±¡åˆ—表
     * @throws VciBaseException å‚数为空或者查询出错的时候会抛出异常
     */
    List<SmUserVO> listUserByRoleOid(String roleOid, Map<String, String> queryMap) throws VciBaseException;
    /**
     * æŸ¥è¯¢æŸä¸ªè§’色下的用户对象列表
     * @param roleOid è§’色的主键
     * @param queryMap æŸ¥è¯¢æ¡ä»¶ï¼Œå¦‚果是角色的某个属性作为查询条件,则可以使用pkRole.xxx这样的方式
     * @param pageHelper åˆ†é¡µå’ŒæŽ’序信息,默认使用用户名升序排列
     * @return ç”¨æˆ·çš„æ˜¾ç¤ºå¯¹è±¡åˆ—表,默认使用用户名升序排列
     * @throws VciBaseException å‚数为空或者查询出错的时候会抛出异常
     */
    DataGrid<SmUserVO> gridUserByRoleOid(String roleOid, Map<String, String> queryMap, PageHelper pageHelper) throws VciBaseException;
    /**
     * æŸ¥è¯¢ä¸åœ¨æŸä¸ªè§’色下的用户对象列表
@@ -166,16 +136,6 @@
     * @throws VciBaseException å‚数为空或者查询出错的时候会抛出异常
     */
    List<SmUserVO> listUserUnInRoleOid(String roleOid, Map<String, String> queryMap) throws VciBaseException;
    /**
     * æŸ¥è¯¢ä¸åœ¨æŸä¸ªè§’色下的用户对象列表
     * @param roleOid è§’色的主键
     * @param queryMap æŸ¥è¯¢æ¡ä»¶ï¼Œå¦‚果是角色的某个属性作为查询条件,则可以使用pkRole.xxx这样的方式
     * @param pageHelper åˆ†é¡µå’ŒæŽ’序信息,默认使用用户名升序排列
     * @return ç”¨æˆ·çš„æ˜¾ç¤ºå¯¹è±¡åˆ—表,默认使用用户名升序排列
     * @throws VciBaseException å‚数为空或者查询出错的时候会抛出异常
     */
    DataGrid<SmUserVO> gridUserUnInRoleOid(String roleOid, Map<String, String> queryMap, PageHelper pageHelper) throws VciBaseException;
    /**
     * æ‰¹é‡æ ¹æ®è§’色的主键获取用户
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/OrgDeptQueryServiceImpl.java
@@ -1,22 +1,20 @@
package com.vci.frameworkcore.compatibility.impl;
import com.vci.corba.common.PLException;
import com.vci.corba.common.data.UserEntityInfo;
import com.vci.corba.framework.data.DeptInfo;
import com.vci.corba.omd.data.BusinessObject;
import com.vci.frameworkcore.compatibility.OrgDeptQueryServiceI;
import com.vci.frameworkcore.model.dto.OrgDepartmentDTO;
import com.vci.frameworkcore.lcstatuspck.FrameworkDataLCStatus;
import com.vci.frameworkcore.model.OrgDeptForPlatform1;
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.revision.bo.TreeWrapperOptions;
import com.vci.starter.revision.service.RevisionModelUtil;
import com.vci.starter.web.constant.QueryOptionConstant;
import com.vci.starter.web.exception.VciBaseException;
import com.vci.starter.web.pagemodel.DataGrid;
import com.vci.starter.web.pagemodel.PageHelper;
import com.vci.starter.web.pagemodel.Tree;
import com.vci.starter.web.pagemodel.TreeQueryObject;
import com.vci.starter.web.pagemodel.*;
import com.vci.starter.web.util.BeanUtil;
import com.vci.starter.web.util.VciBaseUtil;
import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
@@ -67,13 +65,38 @@
     * @throws VciBaseException å‚数为空或者数据库存在问题的时候会抛出异常
     */
    @Override
    public OrgDepartmentVO getDeptByDeptOid(String deptOid)
            throws VciBaseException {
    public OrgDepartmentVO getDeptByDeptOid(String deptOid) throws VciBaseException {
        if(StringUtils.isBlank(deptOid)){
            return null;
        }
        OrgDeptForPlatform1 deptForPlatform1 = boService.selectByOid(deptOid, OrgDeptForPlatform1.class);
        return deptDO2VO(deptForPlatform1);
    }
    /**
     * æ ¹æ®çˆ¶éƒ¨é—¨ä¸»é”®èŽ·å–å’Œéƒ¨é—¨åç§°éƒ¨é—¨çš„ä¿¡æ¯
     * @param parentDeptOid çˆ¶éƒ¨é—¨ä¸»é”®
     * @param conditionMap éƒ¨é—¨åç§°
     * @return éƒ¨é—¨çš„æ˜¾ç¤ºå¯¹è±¡ï¼Œå¦‚果部门不存在则返回null,不会抛出异常
     * @throws VciBaseException å‚数为空或者数据库存在问题的时候会抛出异常
     */
    @Override
    public OrgDepartmentVO getDeptByDeptPOidAndCondition(String parentDeptOid,Map<String,String> conditionMap) throws VciBaseException {
        if(Func.isEmpty(conditionMap)){
            conditionMap = new HashMap();
        }
        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(new HashMap<>(),OrgDeptForPlatform1.class);
        //父主键为空查顶层
        if(Func.isBlank(parentDeptOid)){
            queryWrapper.isNull("plparentuid");
        }else{
            queryWrapper.eq("plparentuid",parentDeptOid);
        }
        List<OrgDeptForPlatform1> roleForPlatform1s = boService.selectByQueryWrapper(queryWrapper, OrgDeptForPlatform1.class);
        if(Func.isEmpty(roleForPlatform1s)){
            return null;
        }
        return deptDO2VO(roleForPlatform1s.get(0));
    }
    /**
@@ -137,7 +160,7 @@
                depts.addAll(roleForPlatform1s);
            }
        });
        return     deptDO2VOs(depts);
        return deptDO2VOs(depts);
    }
    /**
@@ -153,6 +176,7 @@
        if(pageHelper == null){
            pageHelper = new PageHelper(-1);
        }
        //根据部门编号排序
        pageHelper.addDefaultAsc("plnum");
        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(queryMap,OrgDeptForPlatform1.class,pageHelper);
        List<OrgDeptForPlatform1> deptForPlatform1s = boService.selectByQueryWrapper(queryWrapper, OrgDeptForPlatform1.class);
@@ -432,9 +456,6 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean saveUsersDept(String[] userOIds, String deptId) throws PLException {
        if(Func.isEmpty(userOIds) || Func.isBlank(deptId)){
            return false;
        }
        //先进性查重处理
        List<String> repeatUserOidList = new ArrayList<>();
        //循环进行查重,避免in大于1000
@@ -461,6 +482,110 @@
    }
    /**
     * å¢žåŠ éƒ¨é—¨ä¿¡æ¯
     * @param orgDepartmentDTO
     * @return
     */
    @Override
    public boolean addDept(OrgDepartmentDTO orgDepartmentDTO) throws PLException {
        //判空
        VciBaseUtil.alertNotNull(
                orgDepartmentDTO,"添加的部门对象",
                orgDepartmentDTO.getName(),"部门名");
        //部门名判重
        Map<String, String> conditionMap = new HashMap<>();
        conditionMap.put("plname",orgDepartmentDTO.getName());
        conditionMap.put("plnum",QueryOptionConstant.OR + orgDepartmentDTO.getId());
        OrgDepartmentVO departmentVO = getDeptByDeptPOidAndCondition(orgDepartmentDTO.getPkFatherDepartment(), conditionMap);
        if(Func.isNotEmpty(departmentVO)){
            throw new VciBaseException("同一父节点下该部门名称或编号已经存在,请修改!");
        }
        //SessionInfo loginUser = WebThreadLocalUtil.getCurrentUserSessionInfoInThread();
        String userId = "developer";//loginUser.getUserId();
        //生成存储的corba对象
        orgDepartmentDTO.setCreateTime(new Date());
        orgDepartmentDTO.setCreator(userId);
        orgDepartmentDTO.setLastModifier(userId);
        orgDepartmentDTO.setStatus((short) 0);
        DeptInfo deptInfo = changeOrgDeptDTOToDeptInfo(orgDepartmentDTO);
        UserEntityInfo userEntityInfo = new UserEntityInfo(userId, "");
        String oid = platformClientUtil.getFrameworkService().saveDepartment(deptInfo, userEntityInfo);
        if (Func.isEmpty(oid)) {
            return false;
        }
        return true;
    }
    /**
     * ä¿®æ”¹éƒ¨é—¨ä¿¡æ¯
     * @param orgDepartmentDTO
     * @return
     */
    @Override
    public boolean updateDept(OrgDepartmentDTO orgDepartmentDTO) throws PLException {
        //判空
        VciBaseUtil.alertNotNull(
                orgDepartmentDTO,"修改的部门对象",
                orgDepartmentDTO.getOid(),"用户主键",
                orgDepartmentDTO.getId(),"用户名"
        );
        //按oid查询数据库中已存在的
        OrgDepartmentVO departmentVO = getDeptByDeptOid(orgDepartmentDTO.getOid());
        //根据主键没查询到
        OrgDepartmentDTO orgDepartmentDTO1 = new OrgDepartmentDTO();
        //默认属性给赋值上
        //BeanUtil.convert(departmentVO,orgDepartmentDTO1);
        Func.copy(departmentVO,orgDepartmentDTO);
        //orgDepartmentDTO1.setName(orgDepartmentDTO.getName());
        //orgDepartmentDTO1.setCode(orgDepartmentDTO.getCode());
        //orgDepartmentDTO1.setDescription(orgDepartmentDTO.getDescription());
        String loginUserId = "developer";//WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
        orgDepartmentDTO1.setLastModifier(loginUserId);
        DeptInfo deptInfo = changeOrgDeptDTOToDeptInfo(orgDepartmentDTO1);
        boolean updateBoolean = platformClientUtil.getFrameworkService().updateDepartment(deptInfo, new UserEntityInfo(loginUserId, null));
        return updateBoolean;
    }
    /**
     * Dto对象转corb对象
     * @param orgDepartmentDTO
     * @return
     */
    public DeptInfo changeOrgDeptDTOToDeptInfo(OrgDepartmentDTO orgDepartmentDTO) {
        DeptInfo departmentInfo = new DeptInfo();
        departmentInfo.id = orgDepartmentDTO.getOid() == null ? "" : orgDepartmentDTO.getOid();
        departmentInfo.name = orgDepartmentDTO.getName() == null ? "" : orgDepartmentDTO.getName();
        departmentInfo.num = orgDepartmentDTO.getId() == null ? "" : orgDepartmentDTO.getId();
        departmentInfo.code = orgDepartmentDTO.getCode() == null ? "" : orgDepartmentDTO.getCode();
        departmentInfo.specialties = orgDepartmentDTO.getSpecialties() == null ? "" : orgDepartmentDTO.getSpecialties();
        departmentInfo.status = orgDepartmentDTO.getStatus() == 0 ? 0 : orgDepartmentDTO.getStatus();
        departmentInfo.description = orgDepartmentDTO.getDescription() == null ? "" : orgDepartmentDTO.getDescription();
        departmentInfo.parentId = orgDepartmentDTO.getPkFatherDepartment() == null ? "" : orgDepartmentDTO.getPkFatherDepartment();
        departmentInfo.createUser = orgDepartmentDTO.getCreator() == null ? "" : orgDepartmentDTO.getCreator();
        departmentInfo.createTime = orgDepartmentDTO.getCreateTime().getTime();
        departmentInfo.updateTime = System.currentTimeMillis();
        departmentInfo.updateUser = orgDepartmentDTO.getLastModifier() == null ? "" : orgDepartmentDTO.getLastModifier();
        //departmentInfo.grantor = orgDepartmentDTO.getGrantor() == null ? "" : orgDepartmentDTO.getGrantor();
        return departmentInfo;
    }
    /**
     * åˆ é™¤éƒ¨é—¨
     * @param ids
     * @return
     */
    @Override
    public boolean deleteDept(String[] ids) throws PLException {
        VciBaseUtil.alertNotNull(ids,"要删除的部门主键");
        //具备连带删除的功能,如角色菜单授权表里面的授权信息
        return platformClientUtil.getFrameworkService().deleteDepartment(
                ids,
                new UserEntityInfo("developer"/*WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId()*/, null)
        );
    }
    /**
     * èŽ·å–æ‰€æœ‰éƒ¨é—¨çš„ä¿¡æ¯
     * @return key:部门由名称组成的路径(/间隔),value对应最小层级的部门信息
     */
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmPwdStrategyQueryServiceImpl.java
@@ -20,6 +20,7 @@
import com.vci.starter.web.pagemodel.PageHelper;
import com.vci.starter.web.util.BeanUtil;
import com.vci.starter.web.util.VciBaseUtil;
import com.vci.starter.web.util.WebThreadLocalUtil;
import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
import com.vci.web.service.WebBoServiceI;
import com.vci.web.util.Func;
@@ -181,7 +182,11 @@
    public boolean saveUserPasswordStrateg(String[] userIds, String passwordStrategId) throws PLException {
        VciBaseUtil.alertNotNull(userIds,"用户主键",passwordStrategId,"密码安全策略主键");
        //TODO:这里没有做查重处理,明天记得验证一下这儿是不是会自动做saveOrUpdate的处理
        return platformClientUtil.getFrameworkService().saveUserPasswordStrateg(userIds,passwordStrategId,new UserEntityInfo());
        return platformClientUtil.getFrameworkService().saveUserPasswordStrateg(
                userIds,
                passwordStrategId,
                new UserEntityInfo(WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(),null)
        );
    }
    /**
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmRoleQueryServiceImpl.java
@@ -2,38 +2,51 @@
import com.vci.corba.common.PLException;
import com.vci.corba.common.data.UserEntityInfo;
import com.vci.corba.framework.data.RoleInfo;
import com.vci.corba.omd.data.BusinessObject;
import com.vci.frameworkcore.compatibility.SmRoleQueryServiceI;
import com.vci.frameworkcore.constant.FrameWorkBtmTypeConstant;
import com.vci.frameworkcore.dto.SmRoleDTO;
import com.vci.frameworkcore.enumpck.RoleClassifyEnum;
import com.vci.frameworkcore.enumpck.RoleControlAreaEnum;
import com.vci.frameworkcore.model.SmRoleForPlatform1;
import com.vci.frameworkcore.model.dto.SmUserDTO;
import com.vci.frameworkcore.model.po.SmRolePO;
import com.vci.frameworkcore.model.po.SmUserPO;
import com.vci.frameworkcore.pagemodel.OrgDepartmentVO;
import com.vci.frameworkcore.pagemodel.SmRoleVO;
import com.vci.frameworkcore.pagemodel.SmUserVO;
import com.vci.frameworkcore.properties.ConfigReader;
import com.vci.omd.utils.ObjectTool;
import com.vci.starter.poi.bo.ReadExcelOption;
import com.vci.starter.poi.constant.ExcelLangCodeConstant;
import com.vci.starter.poi.util.ExcelUtil;
import com.vci.starter.web.constant.QueryOptionConstant;
import com.vci.starter.web.enumpck.UserSecretEnum;
import com.vci.starter.web.exception.VciBaseException;
import com.vci.starter.web.pagemodel.DataGrid;
import com.vci.starter.web.pagemodel.PageHelper;
import com.vci.starter.web.pagemodel.Tree;
import com.vci.starter.web.pagemodel.TreeQueryObject;
import com.vci.starter.web.pagemodel.*;
import com.vci.starter.web.util.LangBaseUtil;
import com.vci.web.util.BeanUtil;
import com.vci.starter.web.util.VciBaseUtil;
import com.vci.starter.web.util.WebThreadLocalUtil;
import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
import com.vci.web.properties.WebProperties;
import com.vci.web.enumpck.UserTypeEnum;
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;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.io.File;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
/**
 * è§’色的查询服务,兼容来平台,素有的接口都返回新的角色显示对象
@@ -55,22 +68,31 @@
    @Autowired
    private PlatformClientUtil platformClientUtil;
    private final Integer QUERY_IN_LIMIT = 1000;
    /**
     * æ—¥å¿—
     */
    private Logger logger = LoggerFactory.getLogger(getClass());
    /**
     * æ ¹æ®è§’色主键获取角色的信息
     * @param roleOid è§’色主键
     * @param conditionMap è§’色主键
     * @return è§’色的显示对象,如果角色不存在则返回null,不会抛出异常
     * @throws VciBaseException å‚数为空或者数据库存在问题的时候会抛出异常
     */
    @Override
    public SmRoleVO getRoleByRoleOid(String roleOid) throws VciBaseException {
        if(StringUtils.isBlank(roleOid)){
    public SmRoleVO getRoleByConditionMap(Map<String,String> conditionMap) throws VciBaseException {
        if(Func.isEmpty(conditionMap)){
            return null;
        }
        SmRoleForPlatform1 role = boService.selectByOid(roleOid, SmRoleForPlatform1.class);
        if(role == null || StringUtils.isBlank(role.getPluid())){
            throw new VciBaseException(DATA_OID_NOT_EXIST);
        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(conditionMap,SmRoleForPlatform1.class);
        List<SmRoleForPlatform1> smRoleForPlatform1s = boService.selectByQueryWrapper(queryWrapper, SmRoleForPlatform1.class);
        if(Func.isNotEmpty(smRoleForPlatform1s) && Func.isNotBlank(smRoleForPlatform1s.get(0).getPluid())){
            //角色名不能重复所以直接取第一个元素
            return platformRole2SmRoleVO(smRoleForPlatform1s.get(0));
        }
        return platformRole2SmRoleVO(role);
        return null;
    }
    /**
@@ -111,7 +133,6 @@
        }
        pageHelper.addDefaultAsc("plname");
        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(queryMap,SmRoleForPlatform1.class,pageHelper);
        //queryWrapper.eq("pltype","2");
        List<SmRoleForPlatform1> roleForPlatform1s = boService.selectByQueryWrapper(queryWrapper, SmRoleForPlatform1.class);
        DataGrid<SmRoleVO> dataGrid = new DataGrid<>();
        if(!CollectionUtils.isEmpty(roleForPlatform1s)){
@@ -129,10 +150,52 @@
    @Override
    public String getRoleNameByRoleOid(String roleOid) {
        WebUtil.alertNotNull(roleOid,"角色主键");
        return getRoleByRoleOid(roleOid).getName();
        Map<String, String> conditionMap = new HashMap<>();
        conditionMap.put("pluid",roleOid);
        return getRoleByConditionMap(conditionMap).getName();
    }
     /**
    /**
     * æ ¹æ®è§’色名查询角色信息
     * @param roleNameList
     * @param queryMap
     * @return
     */
    @Override
    public List<SmRoleVO> listRoleByRoleName(Collection<String> roleNameList, Map<String, String> queryMap) {
        if(Func.isEmpty(roleNameList)){
            return new ArrayList<>();
        }
        if(queryMap == null){
            queryMap = new HashMap<>();
        }
        List<SmRoleForPlatform1> roles = new ArrayList<>();
        if(roleNameList.size() > QUERY_IN_LIMIT){
            Map<String, String> finalQueryMap = queryMap;
            WebUtil.switchCollectionForOracleIn(roleNameList).stream().forEach(roleNames->{
                Map<String,String> conditionMap = new HashMap<>();
                finalQueryMap.forEach((key,value)->{
                    conditionMap.put(key,value);
                });
                conditionMap.put("plname", QueryOptionConstant.IN + WebUtil.toInSql(roleNames.toArray(new String[0])));
                VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(conditionMap,SmRoleForPlatform1.class);
                List<SmRoleForPlatform1> roleForPlatform1s = boService.selectByQueryWrapper(queryWrapper, SmRoleForPlatform1.class);
                if(!CollectionUtils.isEmpty(roleForPlatform1s)){
                    roles.addAll(roleForPlatform1s);
                }
            });
        }else{
            queryMap.put("plname", QueryOptionConstant.IN + WebUtil.toInSql(roleNameList.toArray(new String[0])));
        }
        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(queryMap,SmRoleForPlatform1.class);
        List<SmRoleForPlatform1> roleForPlatform1s = boService.selectByQueryWrapper(queryWrapper, SmRoleForPlatform1.class);
        if(!CollectionUtils.isEmpty(roleForPlatform1s)){
            roles.addAll(roleForPlatform1s);
        }
        return platformRole2SmRoleVOs(roles);
    }
    /**
     * æ ¹æ®ç”¨æˆ·ä¸»é”®èŽ·å–å…³è”çš„è§’è‰²
     * @param userOid ç”¨æˆ·ä¸»é”®
     * @param queryMap æŸ¥è¯¢æ¡ä»¶ï¼Œå¦‚果需要使用用户的属性来查询可以使用pkUser.xxxx
@@ -234,20 +297,8 @@
    @Override
    public List<SmRoleVO> listRoleUnInUserOid(String userOid,
            Map<String, String> queryMap) {
        return listRoleByUserOid(userOid,queryMap,true);
    }
    /**
     * èŽ·å–æœªå…³è”æŸä¸ªç”¨æˆ·çš„è§’è‰²
     * @param userOid ç”¨æˆ·ä¸»é”®
     * @param queryMap æŸ¥è¯¢æ¡ä»¶ï¼Œå¦‚果需要使用用户的属性来查询可以使用pkUser.xxxx
     * @param pageHelper åˆ†é¡µå’ŒæŽ’序对象,老平台不支持使用角色编号来排序
     * @return è§’色的显示对象
     */
    @Override
    public DataGrid<SmRoleVO> gridRoleUninUserOid(String userOid,
            Map<String, String> queryMap, PageHelper pageHelper) {
        return gridRoleByUserOid(userOid,queryMap,pageHelper,true);
        return listRoleByUserOid(userOid,queryMap,true);
    }
      /**
@@ -467,7 +518,7 @@
    }
     /**
     * å‚照角色的列表,三员管理的三个角色不会显示
     * å‚照角色的列表,超管查全部,其他的都是查普通的(不包含三员)
     * @param queryMap æŸ¥è¯¢æ¡ä»¶
     * @param pageHelper åˆ†é¡µå’ŒæŽ’序的信息,在兼容老平台的时候会自动兼容,如果属性不存在会自动忽略
     * @return è§’色的显示对象列表
@@ -477,6 +528,11 @@
    public DataGrid<SmRoleVO> refGridRoles(Map<String, String> queryMap,
            PageHelper pageHelper) throws VciBaseException {
        //老平台没有生效状态
        //根据当前用户来决定能查那些角色:普通用户只能查普通角色,管理员和普通用户只能查普通角色
        String usertype = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUsertype();
        if(!UserTypeEnum.SUPPER_ADMIN.getValue().equals(usertype)){
            queryMap.put("pltype","2");
        }
        return gridRoles(queryMap, pageHelper);
    }
@@ -511,16 +567,208 @@
    }
    /**
     * è¯¥æ–¹æ³•只支持一次只允许单个用户分配多个角色,一对多
     * @param userOid
     * ä¿å­˜ç”¨æˆ·è§’色关联关系
     * @param userOids
     * @param roleIds
     * @return
     */
    @Override
    public boolean saveRights(String userOid, String[] roleIds) throws PLException {
        VciBaseUtil.alertNotNull(userOid,"用户主键");
    public boolean saveRights(String[] userOids, String[] roleIds) throws PLException {
        VciBaseUtil.alertNotNull(userOids,"用户主键");
        //roleIds允许为空,为空时清空当前用户的权限
        return platformClientUtil.getFrameworkService().saveRights(roleIds,new String[]{userOid},new UserEntityInfo());
        return platformClientUtil.getFrameworkService().saveRights(roleIds,userOids,new UserEntityInfo());
    }
    /**
     * æ–°å¢žè§’色
     * @param smRoleDTO
     * @return true成功,false失败
     */
    @Override
    public boolean addRole(SmRoleDTO smRoleDTO) throws PLException {
        //判空
        VciBaseUtil.alertNotNull(
                smRoleDTO,"添加的角色对象",
                smRoleDTO.getName(),"角色名");
        //角色名判重
        Map<String, String> conditionMap = new HashMap<>();
        conditionMap.put("plname",smRoleDTO.getName());
        SmRoleVO dbSmRoleVO = getRoleByConditionMap(conditionMap);
        if(Func.isNotEmpty(dbSmRoleVO)){
            throw new VciBaseException("该角色名称已经存在,请修改!");
        }
        SessionInfo loginUser = WebThreadLocalUtil.getCurrentUserSessionInfoInThread();
        String userId = loginUser.getUserId();
        //角色类型,这里设置了会在changeRoleObjectToRoleInfo中转换
        if(UserTypeEnum.SUPPER_ADMIN.getValue().equals(loginUser.getUsertype())){
            smRoleDTO.setRoleClassify(RoleClassifyEnum.MANAGE.getValue());
        }else {
            smRoleDTO.setRoleClassify(RoleClassifyEnum.BUSINESS.getValue());
        }
        //生成存储的corba对象
        Date date = new Date();
        smRoleDTO.setCreateTime(date);
        smRoleDTO.setCreator(userId);
        smRoleDTO.setLastModifier(userId);
        RoleInfo roleInfo = changeSmRoleDTOToRoleInfo(smRoleDTO);
        UserEntityInfo userEntityInfo = new UserEntityInfo(userId, "");
        String oid = platformClientUtil.getFrameworkService().saveRole(roleInfo, userEntityInfo,null);
        if (Func.isEmpty(oid)) {
            return false;
        }
        return true;
    }
    /**
     * ä¿®æ”¹è§’色
     * @param smRoleDTO
     * @return
     */
    @Override
    public boolean updateRole(SmRoleDTO smRoleDTO) throws PLException {
        //判空
        VciBaseUtil.alertNotNull(
                smRoleDTO,"添加的角色对象",
                smRoleDTO.getName(),"角色名");
        //查询数据库中的,根据角色名查
        Map<String, String> conditionMap = new HashMap<>();
        conditionMap.put("pluid",smRoleDTO.getOid());
        SmRoleVO dbSmRoleVO = getRoleByConditionMap(conditionMap);
        //根据主键没查询到了用户
        if(Func.isEmpty(dbSmRoleVO) || Func.isBlank(dbSmRoleVO.getOid())){
            throw new PLException("500", new String[] { "当前修改的角色不存在!"});
        }
        //角色名相等,但是主键不相等,说明修改为的角色名已存在,不能重复
        if(dbSmRoleVO.getName().equals(smRoleDTO.getName()) && !dbSmRoleVO.getOid().equals(smRoleDTO.getOid())){
            throw new PLException("500", new String[] { "该角色名称已经存在,请修改!"});
        }
        SmRoleDTO smRoleDTO1 = new SmRoleDTO();
        BeanUtil.copy(dbSmRoleVO,smRoleDTO1);
        smRoleDTO1.setName(smRoleDTO.getName());
        smRoleDTO1.setDescription(smRoleDTO.getDescription());
        String loginUserId = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();; //"developer"
        smRoleDTO.setLastModifier(loginUserId);
        RoleInfo roleInfo = changeSmRoleDTOToRoleInfo(smRoleDTO1);
        boolean updateBoolean = platformClientUtil.getFrameworkService().updateRole(roleInfo, new UserEntityInfo(loginUserId, null));
        return updateBoolean;
    }
    /**
     * åˆ é™¤è§’色
     * @param ids
     * @return
     * @throws PLException
     */
    @Override
    public boolean deleteRole(String[] ids) throws PLException {
        VciBaseUtil.alertNotNull(ids,"要删除的角色主键");
        //具备连带删除的功能,如角色菜单授权表里面的授权信息
        return platformClientUtil.getFrameworkService().deleteRole(
                ids,
                new UserEntityInfo(WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(), null)
        );
    }
    /**
     * å¯¼å…¥è§’色
     * @param file
     * @return
     * @throws VciBaseException
     */
    @Override
    public BaseResult importRole(File file) throws VciBaseException {
        VciBaseUtil.alertNotNull(file,"excel文件");
        if(!file.exists()){
            throw new VciBaseException("导入的excel文件不存在,{0}",new String[]{file.getPath()});
        }
        try{
            //1、读取excel中的数据,组成对象
            ReadExcelOption excelOption = new ReadExcelOption();
            //读取excel转换为po对象
            List<SmRolePO> poList = ExcelUtil.readDataObjectFromExcel(file, SmRolePO.class,excelOption,(value, po, fieldName)->{});
            //去除都是空的情况
            if(CollectionUtils.isEmpty(poList)){
                return BaseResult.fail(ExcelLangCodeConstant.IMPORT_CONTENT_NULL,new String[]{});
            }
            //数据库查询是否有已存在的角色名,方便后续做判重处理
            List<SmRoleVO> smRoleVOList = this.listRoleByRoleName(poList.stream().map(SmRolePO::getName).collect(Collectors.toSet()),null);
            List<String> repeatRoleName = new ArrayList<>();
            if(Func.isNotEmpty(smRoleVOList)){
                repeatRoleName = smRoleVOList.stream().map(SmRoleVO::getName).collect(Collectors.toList());
            }
            //当前excel中是否重复用的判重Map:(key:账号,value:行号)
            Map<String, String> excelReapeat = new HashMap<>();
            //判断必填属性是否为空,角色是否已存在,以及表格内是否重复
            List<String> finalRepeatroleName = repeatRoleName;
            poList.stream().forEach(smRolePO -> {
                //先对必填属性判空处理
                if(Func.isBlank(smRolePO.getName())){
                    throw new VciBaseException("第【"+smRolePO.getRowIndex()+"】行,rolenameerror");
                }else if(finalRepeatroleName.contains(smRolePO.getName())){//判断角色名是否与库中重复
                    throw new VciBaseException("第【"+smRolePO.getRowIndex()+"】行,角色名在系统中已经存在,请修改!");
                }else if(excelReapeat.containsKey(smRolePO.getName())){//表格中判重
                    throw new VciBaseException("第【"+excelReapeat.get(smRolePO.getName())+"】行和第【"+smRolePO.getRowIndex()+"】行数据,角色名重复");
                }
                excelReapeat.put(smRolePO.getName(),smRolePO.getRowIndex());
            });
            //保存逻辑
            poList.stream().forEach(smRolePO->{
                try {
                    SmRoleDTO smRoleDTO = new SmRoleDTO();
                    BeanUtil.copy(smRolePO,smRoleDTO);
                    //SessionInfo loginUser = WebThreadLocalUtil.getCurrentUserSessionInfoInThread();
                    String userId = "developer";//loginUser.getUserId();
                    //角色类型,这里设置了会在changeRoleObjectToRoleInfo中转换
                    if(UserTypeEnum.SUPPER_ADMIN.getValue().equals("0")){
                        smRoleDTO.setRoleClassify(RoleClassifyEnum.MANAGE.getValue());
                    }else {
                        smRoleDTO.setRoleClassify(RoleClassifyEnum.BUSINESS.getValue());
                    }
                    //生成存储的corba对象
                    Date date = new Date();
                    smRoleDTO.setCreateTime(date);
                    smRoleDTO.setCreator(userId);
                    smRoleDTO.setLastModifier(userId);
                    RoleInfo roleInfo = changeSmRoleDTOToRoleInfo(smRoleDTO);
                    UserEntityInfo userEntityInfo = new UserEntityInfo(userId, "");
                    //执行保存
                    platformClientUtil.getFrameworkService().saveRole(roleInfo, userEntityInfo);
                } catch (PLException e) {
                    e.printStackTrace();
                    throw new VciBaseException("执行到第【"+smRolePO.getRowIndex()+"】行保存逻辑时出现错误,原因:" + VciBaseUtil.getExceptionMessage(e));
                }
            });
        }catch (Exception e){
            if(logger.isErrorEnabled()){
                logger.error("读取excel内容时或保存角色信息时出现了错误,具体原因:",e.getMessage());
            }
            e.printStackTrace();
            return BaseResult.fail(LangBaseUtil.getErrorMsg(e),new String[]{},e);
        }
        return BaseResult.success("角色导入成功!");
    }
    /**
     * è§’色DTO对象转corba对象
     * @param role
     * @return
     */
    public RoleInfo changeSmRoleDTOToRoleInfo(SmRoleDTO role) {
        RoleInfo roleInfo = new RoleInfo();
        roleInfo.id = role.getOid() == null ? "" : role.getOid();
        roleInfo.name = role.getName();
        roleInfo.description = role.getDescription() == null ? "" : role.getDescription();
        //管理员角色默认为1,普通角色默认为2,但是都需要设置小一个,因为后台判断当type<2时会拿type+1
        if(RoleClassifyEnum.MANAGE.getValue().equals(role.getRoleClassify())){
            roleInfo.type = 0;
        }else{
            roleInfo.type = 1;
        }
        roleInfo.createTime = role.getCreateTime().getTime();
        roleInfo.createUser = role.getCreator() == null ? "" : role.getCreator();
        roleInfo.updateTime = System.currentTimeMillis();
        roleInfo.updateUser = role.getLastModifier() == null ? "" : role.getLastModifier();
        return roleInfo;
    }
    /**
@@ -532,7 +780,7 @@
        List<SmRoleVO> roleVOList = new ArrayList<>();
        if(!CollectionUtils.isEmpty(roleForPlatform1List)){
            roleForPlatform1List.stream().forEach(s -> {
                roleVOList.add( platformRole2SmRoleVO(s));
                roleVOList.add(platformRole2SmRoleVO(s));
            });
        }
        return roleVOList;
@@ -555,11 +803,12 @@
        }
        roleVO.setRoleClassifyText(RoleClassifyEnum.getTextByValue(roleVO.getRoleClassify()));
        roleVO.setRoleControlArea(RoleControlAreaEnum.BS.getValue());
        roleVO.setRoleClassifyText(RoleControlAreaEnum.BS.getText());
        roleVO.setCreateTime(roleForPlatform1.getPlcreatetime());
        roleVO.setRoleControlAreaText(RoleControlAreaEnum.BS.getText());
        roleVO.setDescription(roleForPlatform1.getPldesc());
        roleVO.setCreateTime(new Date(roleForPlatform1.getPlcreatetime()));
        roleVO.setCreator(roleForPlatform1.getPlcreateuser());
        roleVO.setLastModifier(roleForPlatform1.getPlupdateuser());
        roleVO.setLastModifyTime(roleForPlatform1.getPlupdatetime());
        roleVO.setLastModifyTime(new Date(roleForPlatform1.getPlupdatetime()));
        roleVO.setBtmname(FrameWorkBtmTypeConstant.SM_ROLE_BTM_TYPE);
        roleVO.setOwner(roleVO.getCreator());
        roleVO.setTs(roleVO.getLastModifyTime());
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmUserQueryServiceImpl.java
@@ -30,6 +30,7 @@
import com.vci.starter.web.util.*;
import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
import com.vci.web.enumpck.UserTypeEnum;
import com.vci.web.model.WFProcessClassifyDO;
import com.vci.web.service.WebBoServiceI;
import com.vci.web.util.Func;
import com.vci.web.util.PlatformClientUtil;
@@ -320,6 +321,7 @@
        smUserVO.setEmail(userInfo.email);
        smUserVO.setStatus(userInfo.status);
        smUserVO.setPassword(userInfo.pwd);
        smUserVO.setConfirmPassword(userInfo.pwd);
        //用户所属部门的查询设置
        List<OrgDepartmentVO> orgDepartmentVOList;
        //查看全局变量中是否存在部门信息,存在的情况最主要是针对多条用户查询的时候避免重复查询的
@@ -508,19 +510,6 @@
    }
    /**
     * èŽ·å–ç”¨æˆ·çš„åˆ—è¡¨ï¼Œé»˜è®¤ä¼šä»¥ç”¨æˆ·åå‡åºæŽ’åˆ—ï¼Œç”¨æˆ·çš„ç¼–è¾‘é¡µé¢åˆ—è¡¨ä¸è¦ä½¿ç”¨è¿™ä¸ªæŽ¥å£
     * @param queryMap æŸ¥è¯¢æ¡ä»¶
     * @param pageHelper åˆ†é¡µå’ŒæŽ’序的信息,在兼容老平台的时候会自动兼容,如果属性不存在会自动忽略
     * @return ç”¨æˆ·çš„æ˜¾ç¤ºå¯¹è±¡åˆ—表
     * @throws VciBaseException å‚数为空的时候会抛出异常
     */
    @Override
    public DataGrid<SmUserVO> gridUsers(Map<String, String> queryMap,
                                        PageHelper pageHelper) throws VciBaseException {
        return gridUserByQueryField(null,null,queryMap,pageHelper,false);
    }
    /**
     * ç”¨æˆ·ç®¡ç†ç•Œé¢åˆ†é¡µæŸ¥è¯¢
     * @param conditionMap æŸ¥è¯¢æ¡ä»¶
     * @param pageHelper åˆ†é¡µå‚æ•°
@@ -532,8 +521,8 @@
            pageHelper = new PageHelper(-1);
        }
        pageHelper.addDefaultAsc("PLTRUENAME");
        //TODO:为了方便调试,所以这儿先注释写死后面记得更改
        String loginUserId = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
        //String loginUserId = "Ludc";
        //分页查询
        UserInfo[] userInfos = platformClientUtil.getFrameworkService().fetchUserInfoByCondition(
                conditionMap.get("name"),
@@ -551,6 +540,7 @@
            smRoleVOMap = smRoleQueryService.batchListRoleByUserOids(idList,null);
            smPwdStrategyVOMap = smPwdStrategyQueryService.batchSmPwdStrategyByUserOids(idList);
            dataGrid.setData(userInfoArr2VO(userInfos));
            //TODO: è¿™ä¸ªç»Ÿè®¡æ€»æ•°æœ‰é—®é¢˜ï¼Œå¸¦è¿‡åŽ»çš„å‚æ•°ä¸èƒ½åƒä¸Šé¢é‚£ä¸ªfetchUserInfoByCondition查询一样统计增却的总数
            dataGrid.setTotal(
                    platformClientUtil.getFrameworkService().getUserTotalByCondition(
                        conditionMap.get("name"),
@@ -607,24 +597,110 @@
        return userVO.getName();
    }
    /**
     * ç»Ÿè®¡éƒ¨é—¨ä¸‹çš„用户:包含子部门下的用户
     * @param deptOid
     * @param queryMap
     * @return
     * @throws VciBaseException
     */
    @Override
    public List<SmUserVO> countSmUserByDeptOid(String deptOid, Map<String, String> queryMap) throws VciBaseException {
        //是否查询子部门下关联的用户
        List<OrgDepartmentVO> orgDepartmentVOList = orgDeptQueryService.listChildrenDeptByParentOid(deptOid, null);
        List<String> deptOidCollection = orgDepartmentVOList.stream().map(OrgDepartmentVO::getOid).collect(Collectors.toList());
        deptOidCollection.add(deptOid);//将当前层的oid也放进去
        return listUserVOByDeptOid(queryMap,deptOidCollection,false);
    }
     /**
     * æŸ¥è¯¢æŸä¸ªéƒ¨é—¨ä¸‹çš„用户对象
     * æŸ¥è¯¢åœ¨æŸä¸ªéƒ¨é—¨ä¸‹çš„用户对象
     * @param deptOid éƒ¨é—¨çš„主键
     * @param queryMap æŸ¥è¯¢æ¡ä»¶ï¼Œå¦‚果是部门的某个属性作为查询条件,则可以使用pkDepartment.xxx这样的方式
     * @return ç”¨æˆ·çš„æ˜¾ç¤ºå¯¹è±¡åˆ—表
     * @throws VciBaseException å‚数为空或者查询出错的时候会抛出异常
     */
    @Override
    public List<SmUserVO> listUserByDeptOid(String deptOid,
            Map<String, String> queryMap) throws VciBaseException {
        if(StringUtils.isBlank(deptOid)){
            return new ArrayList<>();
        }
        return listUserByQueryField(QUERY_FIELD_DEPARTMENT,deptOid,queryMap,false);
    public List<SmUserVO> listUserByDeptOid(String deptOid, Map<String, String> queryMap) throws VciBaseException {
        //查询当前选中的部门下的用户
        return listUserVOByDeptOid(queryMap,Arrays.asList(deptOid),false );
    }
    /**
     * èŽ·å–æŸ¥è¯¢å°è£…å™¨ï¼Œé»˜è®¤åªæŸ¥äº†plstatus=0和plusertype=2,排序默认plusername
     * æŸ¥è¯¢ä¸åœ¨æŸä¸ªéƒ¨é—¨ä¸‹çš„用户对象列表
     * @param deptOid éƒ¨é—¨çš„主键
     * @param queryMap æŸ¥è¯¢æ¡ä»¶ï¼Œå¦‚果是部门的某个属性作为查询条件,则可以使用pkDepartment.xxx这样的方式
     * @return ç”¨æˆ·çš„æ˜¾ç¤ºå¯¹è±¡åˆ—表,默认使用用户名升序排列
     * @throws VciBaseException å‚数为空或者查询出错的时候会抛出异常
     */
    @Override
    public List<SmUserVO> listUserUnInDeptOid(String deptOid, Map<String, String> queryMap) throws VciBaseException {
        // TODO:根据当前登录的用户决定能查那些用户
        String userType = "0";//WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUsertype();
        //根据当前登录的用户类型不同,查询不同的用户
        if(UserTypeEnum.SUPPER_ADMIN.getValue().equals(userType)){
            //超管用户只能查管理员用户
            queryMap.put("plusertype", "1");
        }else{
            //除了超管都只能查普通用户
            queryMap.put("plusertype", "2");
        }
        return listUserVOByDeptOid(queryMap,Arrays.asList(deptOid),true);
    }
    /**
     * ç”¨æˆ·æ ¹æ®éƒ¨é—¨æŸ¥è¯¢çš„统一方法
     * @param conditionMap æŸ¥è¯¢æ¡ä»¶
     * @param deptOidList éƒ¨é—¨ä¸»é”®
     * @param notIn true待选,false已选
     * @return
     */
    private List<SmUserVO> listUserVOByDeptOid(Map<String,String> conditionMap/*放置查询条件*/,List<String> deptOidList,boolean notIn){
        //先查询已选人员oid
        List<String> userOidList = new ArrayList<>();
        WebUtil.switchCollectionForOracleIn(deptOidList).stream().forEach(deptOids->{
            String sql = "select pluseruid,pldeptuid from pluserdept where pldeptuid in (" + WebUtil.toInSql(deptOids.toArray(new String[0])) + ")";
            List<BusinessObject> cbos = boService.queryBySql(sql, null);
            //遍历出用户主键
            cbos.stream().forEach(cbo->{
                userOidList.add(ObjectTool.getNewBOAttributeValue(cbo,"pluseruid"));
            });
        });
        //根据用户oid查询用户
        VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(conditionMap, SmUserDO.class);
        //添加连表查询条件
        queryWrapperForDO.setLinkTableSql(" left join pluserdept up on " + queryWrapperForDO.getTableNick() + ".pluid = up.pluseruid" +
                " left join pldept pkDepartment on  up.pldeptuid = pkDepartment.pluid " +
                " left join PLUSERPASSWORDSTRATEGY pkUserPassword on  " +queryWrapperForDO.getTableNick() + ".pluid = pkUserPassword.pluseruid ");
        List<SmUserDO> smUserDOList = new ArrayList<>();
        //userOidList为空时的两种情况
        if(Func.isEmpty(userOidList)){
            //如果是已选查询说明已选为空直接返回空
            if(!notIn){
                return new ArrayList<>();
            }
            //不是已选查询说明待选为空,直接查询用户
            smUserDOList.addAll(boService.selectByQueryWrapper(queryWrapperForDO, SmUserDO.class));
        }else{
            //已选查询,或待选查询,但是该部门存在相关配置
            WebUtil.switchCollectionForOracleIn(userOidList).stream().forEach(userOids->{
                //查询不在范围内的:待选人员
                if(notIn){
                    queryWrapperForDO.notIn(queryWrapperForDO.getTableNick()+".pluid",WebUtil.toInSql(userOids.toArray(new String[0])));
                }else{
                    //已选人员和统计
                    queryWrapperForDO.in(queryWrapperForDO.getTableNick()+".pluid",WebUtil.toInSql(userOids.toArray(new String[0])));
                }
                smUserDOList.addAll(boService.selectByQueryWrapper(queryWrapperForDO, SmUserDO.class));
            });
        }
        return smUserDO2VOs(smUserDOList);
    }
    /**
     * èŽ·å–æŸ¥è¯¢å°è£…å™¨ï¼Œé»˜è®¤åªæŸ¥äº†plstatus=0和plusertype=2(改成根据当前登录的用户来决定查什么类型的用户),
     * æŽ’序默认plusername
     * @param queryField æŸ¥è¯¢å±žæ€§
     * @param queryValue æŸ¥è¯¢çš„值
     * @param queryMap  æŸ¥è¯¢æ¡ä»¶ï¼Œå¦‚果是角色的属性,需要使用pkrole.xxx
@@ -655,24 +731,17 @@
        }
        addRoleQuerySql(queryMap,queryWrapperForDO);
        queryWrapperForDO.eq("plstatus", "0");
        queryWrapperForDO.eq("plusertype", "2");
        queryWrapperForDO.setDistinct(true);
        // TODO:根据当前登录的用户决定能查那些用户
        SessionInfo loginUser = WebThreadLocalUtil.getCurrentUserSessionInfoInThread();
        //根据当前登录的用户类型不同,查询不同的用户
        if(UserTypeEnum.SUPPER_ADMIN.getValue().equals(loginUser.getUsertype())){
            //超管用户只能查管理员用户
            queryMap.put("plusertype", "1");
        }else{
            //除了超管都只能查普通用户
            queryMap.put("plusertype", "2");
        }
        return queryWrapperForDO;
    }
    /**
     * æŸ¥è¯¢æŸä¸ªéƒ¨é—¨ä¸‹çš„用户对象列表
     * @param deptOid éƒ¨é—¨çš„主键
     * @param queryMap æŸ¥è¯¢æ¡ä»¶ï¼Œå¦‚果是部门的某个属性作为查询条件,则可以使用pkDepartment.xxx这样的方式
     * @param pageHelper åˆ†é¡µå’ŒæŽ’序信息,默认使用用户名升序排列
     * @return ç”¨æˆ·çš„æ˜¾ç¤ºå¯¹è±¡åˆ—表,默认使用用户名升序排列
     * @throws VciBaseException å‚数为空或者查询出错的时候会抛出异常
     */
    @Override
    public DataGrid<SmUserVO> gridUserByDeptOid(String deptOid,
            Map<String, String> queryMap, PageHelper pageHelper)
            throws VciBaseException {
        return gridUserByQueryField(QUERY_FIELD_DEPARTMENT,deptOid,queryMap,pageHelper,false);
    }
     /**
@@ -695,37 +764,6 @@
    }
    /**
     * æŸ¥è¯¢ä¸åœ¨æŸä¸ªéƒ¨é—¨ä¸‹çš„用户对象列表
     * @param deptOid éƒ¨é—¨çš„主键
     * @param queryMap æŸ¥è¯¢æ¡ä»¶ï¼Œå¦‚果是部门的某个属性作为查询条件,则可以使用pkDepartment.xxx这样的方式
     * @return ç”¨æˆ·çš„æ˜¾ç¤ºå¯¹è±¡åˆ—表,默认使用用户名升序排列
     * @throws VciBaseException å‚数为空或者查询出错的时候会抛出异常
     */
    @Override
    public List<SmUserVO> listUserUnInDeptOid(String deptOid,
            Map<String, String> queryMap) throws VciBaseException {
        if(StringUtils.isBlank(deptOid)){
            return new ArrayList<>();
        }
        return listUserByQueryField(QUERY_FIELD_DEPARTMENT,deptOid,queryMap,true);
    }
    /**
     * æŸ¥è¯¢ä¸åœ¨æŸä¸ªéƒ¨é—¨ä¸‹çš„用户对象列表
     * @param deptOid éƒ¨é—¨çš„主键
     * @param queryMap æŸ¥è¯¢æ¡ä»¶ï¼Œå¦‚果是部门的某个属性作为查询条件,则可以使用pkDepartment.xxx这样的方式
     * @param pageHelper åˆ†é¡µå’ŒæŽ’序信息,默认使用用户名升序排列
     * @return ç”¨æˆ·çš„æ˜¾ç¤ºå¯¹è±¡åˆ—表,默认使用用户名升序排列
     * @throws VciBaseException å‚数为空或者查询出错的时候会抛出异常
     */
    @Override
    public DataGrid<SmUserVO> gridUserUnInDeptOid(String deptOid,
            Map<String, String> queryMap, PageHelper pageHelper)
            throws VciBaseException {
        return gridUserByQueryField(QUERY_FIELD_DEPARTMENT,deptOid,queryMap,pageHelper,true);
    }
     /**
     * æŸ¥è¯¢æŸä¸ªè§’色下的用户对象
     * @param roleOid è§’色的主键
     * @param queryMap æŸ¥è¯¢æ¡ä»¶ï¼Œå¦‚果是角色的某个属性作为查询条件,则可以使用pkRole.xxx这样的方式
@@ -735,26 +773,7 @@
    @Override
    public List<SmUserVO> listUserByRoleOid(String roleOid,
            Map<String, String> queryMap) throws VciBaseException {
        if(StringUtils.isBlank(roleOid)){
            return new ArrayList<>();
        }
        return listUserByQueryField(QUERY_FIELD_ROLE,roleOid,queryMap,false);
    }
    /**
     * æŸ¥è¯¢æŸä¸ªè§’色下的用户对象列表
     * @param roleOid è§’色的主键
     * @param queryMap æŸ¥è¯¢æ¡ä»¶ï¼Œå¦‚果是角色的某个属性作为查询条件,则可以使用pkRole.xxx这样的方式
     * @param pageHelper åˆ†é¡µå’ŒæŽ’序信息,默认使用用户名升序排列
     * @return ç”¨æˆ·çš„æ˜¾ç¤ºå¯¹è±¡åˆ—表,默认使用用户名升序排列
     * @throws VciBaseException å‚数为空或者查询出错的时候会抛出异常
     */
    @Override
    public DataGrid<SmUserVO> gridUserByRoleOid(String roleOid,
            Map<String, String> queryMap, PageHelper pageHelper)
            throws VciBaseException {
        return gridUserByQueryField(QUERY_FIELD_ROLE,roleOid,queryMap,pageHelper,false);
        return listUserVOByRoleOid(queryMap,roleOid,false);
    }
    /**
@@ -767,25 +786,54 @@
    @Override
    public List<SmUserVO> listUserUnInRoleOid(String roleOid,
            Map<String, String> queryMap) throws VciBaseException {
        if(StringUtils.isBlank(roleOid)){
            return new ArrayList<>();
        // TODO:根据当前登录的用户决定能查那些用户
        String usertype = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUsertype();
        //根据当前登录的用户类型不同,查询不同的用户
        if(UserTypeEnum.SUPPER_ADMIN.getValue().equals(usertype)){
            //超管用户只能查管理员用户
            queryMap.put("plusertype", "1");
        }else{
            //除了超管都只能查普通用户
            queryMap.put("plusertype", "2");
        }
        return listUserByQueryField(QUERY_FIELD_ROLE,roleOid,queryMap,true);
        return listUserVOByRoleOid(queryMap,roleOid,true);
    }
     /**
     * æŸ¥è¯¢ä¸åœ¨æŸä¸ªè§’色下的用户对象列表
     * @param roleOid è§’色的主键
     * @param queryMap æŸ¥è¯¢æ¡ä»¶ï¼Œå¦‚果是角色的某个属性作为查询条件,则可以使用pkRole.xxx这样的方式
     * @param pageHelper åˆ†é¡µå’ŒæŽ’序信息,默认使用用户名升序排列
     * @return ç”¨æˆ·çš„æ˜¾ç¤ºå¯¹è±¡åˆ—表,默认使用用户名升序排列
     * @throws VciBaseException å‚数为空或者查询出错的时候会抛出异常
     */
    @Override
    public DataGrid<SmUserVO> gridUserUnInRoleOid(String roleOid,
            Map<String, String> queryMap, PageHelper pageHelper)
            throws VciBaseException {
        return gridUserByQueryField(QUERY_FIELD_ROLE,roleOid,queryMap,pageHelper,true);
    /**
     * ç”¨æˆ·æ ¹æ®è§’色查询的统一方法
     * @param conditionMap æŸ¥è¯¢æ¡ä»¶
     * @param roleOid è§’色主键
     * @param notIn true不在范围内,false再范围内
     * @return
     */
    private List<SmUserVO> listUserVOByRoleOid(Map<String,String> conditionMap,String roleOid,boolean notIn){
        //listUserByQueryField这个方法暂时不能满足我现在的查询需求,并且引用的地方较多,所以不太好改动
        //1、先查询与当前角色存在关联关系的用户
        String sql = "select pluseruid,plroleuid from pluserrole where plroleuid = '" + roleOid +"'";
        List<BusinessObject> cbos = boService.queryBySql(sql, null);
        List<String> userOidList = new ArrayList<>();
        if(CollectionUtils.isEmpty(cbos)){
            return new ArrayList<>();
        }
        //遍历出用户主键
        cbos.stream().forEach(cbo->{
            userOidList.add(ObjectTool.getNewBOAttributeValue(cbo,"pluseruid"));
        });
        //2、再查询用户
        VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(conditionMap, SmUserDO.class);
        List<SmUserDO> smUserDOS = new ArrayList<>();
        queryWrapperForDO.setLinkTableSql(" left join pluserdept up on " + queryWrapperForDO.getTableNick() + ".pluid = up.pluseruid" +
                " left join pldept pkDepartment on  up.pldeptuid = pkDepartment.pluid " +
                " left join PLUSERPASSWORDSTRATEGY pkUserPassword on  " +queryWrapperForDO.getTableNick() + ".pluid = pkUserPassword.pluseruid ");
        WebUtil.switchCollectionForOracleIn(userOidList).stream().forEach(userOids->{
            if(notIn){
                queryWrapperForDO.notIn("pluid",WebUtil.toInSql(userOids.toArray(new String[0])));
            }else{
                queryWrapperForDO.in("pluid",WebUtil.toInSql(userOids.toArray(new String[0])));
            }
            smUserDOS.addAll(boService.selectByQueryWrapper(queryWrapperForDO, SmUserDO.class));
        });
        return smUserDO2VOs(smUserDOS);
    }
    /**
@@ -1037,14 +1085,20 @@
        smUserDTO.setPwdUpdateTime(date);
        smUserDTO.setStatus((short) 0);
        smUserDTO.setCreateTime(date);
        smUserDTO.setLastModifyTime(date);
        String loginUserName = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
        smUserDTO.setCreator(loginUserName);
        //smUserDTO.setCreator("developer");
        smUserDTO.setLastModifier(loginUserName);
        //smUserDTO.setLastModifier("developer");
        SessionInfo loginUser = WebThreadLocalUtil.getCurrentUserSessionInfoInThread();
        String loginUserId = loginUser.getUserId();
        //用户类型,现在按照当前登录的用户决定他所添加的用户级别
        //超管添加的就是管理员
        if(UserTypeEnum.SUPPER_ADMIN.getValue().equals(loginUser.getUsertype())){
            smUserDTO.setUserType(Short.parseShort(UserTypeEnum.ADMIN.getValue()));
        }else {
            //管理员添加的就是普通用户
            smUserDTO.setUserType(Short.parseShort(UserTypeEnum.USER.getValue()));
        }
        smUserDTO.setCreator(loginUserId);
        smUserDTO.setLastModifier(loginUserId);
        UserInfo userInfo = changeSmUserDTOToUserInfo(smUserDTO);
        UserEntityInfo userEntityInfo = new UserEntityInfo(loginUserName, "");
        UserEntityInfo userEntityInfo = new UserEntityInfo(loginUserId, "");
        String oid = platformClientUtil.getFrameworkService().saveUser(userInfo, userEntityInfo);
        if (Func.isEmpty(oid)) {
            return false;
@@ -1052,7 +1106,6 @@
        if(Func.isNotBlank(smUserDTO.getPkDepartment())){
            //执行保存用户部门关联关系
            orgDeptQueryService.saveUsersDept(new String[]{oid},smUserDTO.getPkDepartment());
            //platformClientUtil.getFrameworkService().saveUserDept(new String[]{oid}, smUserDTO.getPkDepartment(), userEntityInfo);
        }
        return true;
    }
@@ -1082,14 +1135,16 @@
        if(Func.isEmpty(dbSmUserVO) || Func.isBlank(dbSmUserVO.getOid())){
            throw new PLException("500", new String[] { "当前修改的用户不存在"});
        }
        smUserDTO.setLastModifyTime(new Date());
        String loginUserName = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
        SessionInfo loginUser = WebThreadLocalUtil.getCurrentUserSessionInfoInThread();
        String loginUserName = loginUser.getUserId();
        smUserDTO.setLastModifier(loginUserName);
        smUserDTO.setUserType(Short.parseShort(dbSmUserVO.getUserType()));
        smUserDTO.setPwdUpdateTime(dbSmUserVO.getLastModifyPasswordTime());
        smUserDTO.setIsDeptLeader(smUserDTO.getIsDeptLeader().equals("不是") ? "0":"1");
        UserInfo userInfo = changeSmUserDTOToUserInfo(smUserDTO);
        boolean updateBoolean = platformClientUtil.getFrameworkService().updateUser(userInfo, new UserEntityInfo(loginUserName, null));
        //修改成功,并且用户关联部门有所更改
        if(updateBoolean && Func.isNotEmpty(smUserDTO.getPkDepartment()) && !smUserDTO.getPkDepartment().equals(dbSmUserVO.getPkDepartment())){
        if(updateBoolean && !smUserDTO.getPkDepartment().equals(dbSmUserVO.getPkDepartment())){
            //执行保存用户部门关联关系
            orgDeptQueryService.saveUsersDept(new String[]{dbSmUserVO.getOid()},smUserDTO.getPkDepartment());
        }
@@ -1144,8 +1199,8 @@
        //根据当前创建这个用户的人所绑定密码策略来进行密码校验
        try {
            //TODO:为了方便调试,所以这儿先注释写死后面记得更改
            //String userName = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
            String userName = "developer";
            String userName = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
            //String userName = "developer";
            String error = platformClientUtil.getFrameworkService().checkPasswordStrategyByUserId(userName, smUserDTO.getPassword(),null);
            if (!StringUtils.isBlank(error)) {
                throw new VciBaseException("当前设置的密码,密码策略校验未通过");
@@ -1175,7 +1230,7 @@
        userInfo.status = user.getStatus();
        userInfo.createTime = user.getCreateTime().getTime();
        userInfo.createUser = user.getCreator() == null ? "" : user.getCreator();
        userInfo.updateTime = user.getLastModifyTime().getTime();
        userInfo.updateTime = System.currentTimeMillis();
        userInfo.updateUser = user.getLastModifier() == null ? "" : user.getLastModifier();
        userInfo.pwdUpdateTime = user.getPwdUpdateTime().getTime();
        userInfo.grantor = user.getGrantor() == null ? "" : user.getGrantor();
@@ -1191,11 +1246,12 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean deleteUser(String[] ids) throws PLException {
        if(Func.isEmpty(ids)){
            throw new VciBaseException("待删除的用户id列表不能为空!");
        }
        VciBaseUtil.alertNotNull(ids,"要删除的用户主键");
        //调用platformClientUtil的删除用户的方法,会一起删除掉具备关联关系的一些信息,如部门
        return platformClientUtil.getFrameworkService().deleteUser(ids, null);
        return platformClientUtil.getFrameworkService().deleteUser(
                ids,
                new UserEntityInfo(WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(),null)
        );
    }
    /**
@@ -1219,6 +1275,8 @@
     */
    @Override
    public String downloadImportTemplate(String downloadFileName) {
        //界面没传名称,使用默认名称
        downloadFileName = Func.isBlank(downloadFileName) ?  "用户导入模板_" + Func.format(new Date(),"yyyy-MM-dd HHmmss.sss"):downloadFileName;
        // è®¾ç½®è¡¨å•列名
        List<String> columns = new ArrayList<>(Arrays.asList("账号", "密码", "姓名", "电子邮箱", "专业", "描述", "部门(上下级部门之间以反斜杠隔开(/))"));
        //获取是否导出密级配置项
@@ -1271,8 +1329,8 @@
            //1、读取excel中的数据,组成对象
            ReadExcelOption excelOption = new ReadExcelOption();
            //当前登录的用户账号
            //String loginUserId = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
            String loginUserId = "developer";
            String loginUserId = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
            //String loginUserId = "developer";
            UserEntityInfo userEntityInfo = new UserEntityInfo(loginUserId,null);
            //是否导入密级配置
            boolean exportSecretGrade = Boolean.parseBoolean(ConfigReader.getConfigValue("exportSecretGrade"));
@@ -1334,7 +1392,6 @@
                smUserDTO.setPwdUpdateTime(date);
                smUserDTO.setStatus((short) 0);
                smUserDTO.setCreateTime(date);
                smUserDTO.setLastModifyTime(date);
                smUserDTO.setCreator(loginUserId);
                smUserDTO.setLastModifier(loginUserId);
                //保存用户
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/OrgDepartmentQueryController.java
@@ -1,13 +1,16 @@
package com.vci.frameworkcore.controller;
import com.vci.frameworkcore.compatibility.OrgDeptQueryServiceI;
import com.vci.frameworkcore.model.dto.OrgDepartmentDTO;
import com.vci.frameworkcore.pagemodel.OrgDepartmentVO;
import com.vci.starter.web.annotation.controller.VciUnCheckRight;
import com.vci.starter.web.exception.VciBaseException;
import com.vci.starter.web.pagemodel.*;
import com.vci.starter.web.util.VciBaseUtil;
import com.vci.web.util.Func;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
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.RestController;
@@ -31,24 +34,28 @@
    private OrgDeptQueryServiceI deptQueryService;
    /**
     * éƒ¨é—¨çš„æ ‘形参照
     * éƒ¨é—¨çš„æ ‘形参照,部门管理也用的这个查询接口
     * @param treeQueryObject æ ‘形数据的查询对象,包括查询条件,上级主键,是否多选等,(extandParamsMap中添加"showAllDepartmentNode"为"true"时,并且parentOid为空,返回结果中会包含“所有部门”这个节点)
     * @return éƒ¨é—¨çš„æ ‘形参照,已经转换了上下级关系
     * @throws VciBaseException æŸ¥è¯¢å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常,如果是老的项目里不抛出异常
     */
    @RequestMapping(value = "/refTree",method = RequestMethod.GET)
    //@VciUnCheckRight
    public BaseResult<Tree> refTree(TreeQueryObject treeQueryObject) throws VciBaseException{
        List<Tree> deptTreeList = deptQueryService.refTreeDept(treeQueryObject);
        return  BaseResult.tree(deptTreeList);
        //老的项目依然是添加try catch,方法里不抛出异常
        //BaseResult.fail("这里返回前端的错误信息");
        try {
            List<Tree> deptTreeList = deptQueryService.refTreeDept(treeQueryObject);
            return  BaseResult.tree(deptTreeList);
        }catch (Exception e) {
            e.printStackTrace();
            String exceptionMessage = VciBaseUtil.getExceptionMessage(e);
            log.error("部门树查询时出现错误,原因:" + exceptionMessage);
            return BaseResult.fail("部门树查询时出现错误,原因:" + e.getMessage());
        }
    }
    /**
     * éƒ¨é—¨æŸ¥è¯¢ï¼Œå¸¦åˆ†é¡µ
     * éƒ¨é—¨åˆ—表查询,带分页
     * @param queryObject
     * @return
     * @return è¿”回的list不是tree结构的
     */
    @RequestMapping(value = "/refDataGrid",method = RequestMethod.GET)
    public BaseResult<OrgDepartmentVO> refDataGrid(BaseQueryObject queryObject){
@@ -57,20 +64,78 @@
    }
    /**
     * ä¿å­˜éƒ¨é—¨è§’色关联信息,带查重功能
     * ä¿å­˜éƒ¨é—¨ç”¨æˆ·å…³è”信息,平台自带查重功能
     * @param userOIds ç”¨æˆ·id
     * @param deptId éƒ¨é—¨oid
     * @return
     */
    @RequestMapping(value = "/saveUsersDepts",method = RequestMethod.POST)
    public BaseResult saveUsersDepts(String[] userOIds, String deptId){
        //不能同时为空
        if(Func.isEmpty(userOIds) && Func.isBlank(deptId)){
            return BaseResult.fail("角色主键和部门主键,参数不能同时为空!");
        }
        try {
            return deptQueryService.saveUsersDept(userOIds,deptId) ? BaseResult.success("角色分配成功!"):BaseResult.fail("角色分配失败!");
            return deptQueryService.saveUsersDept(userOIds,deptId) ? BaseResult.success("部门分配成功!"):BaseResult.fail("部门分配失败!");
        }catch (Exception e){
            e.printStackTrace();
            String exceptionMessage = VciBaseUtil.getExceptionMessage(e);
            log.error("根据用户主键获取,关联的角色时出现错误,原因:" + exceptionMessage);
            return BaseResult.fail("根据用户主键获取,关联的角色时出现错误,原因:" + exceptionMessage);
            log.error("关联的部门时出现错误,原因:" + exceptionMessage);
            return BaseResult.fail("关联的部门时出现错误,原因:" + exceptionMessage);
        }
    }
    /**
     * æ–°å¢žå•条部门
     * @param orgDepartmentDTO
     * @return
     */
    @RequestMapping(value = "/addDept",method = RequestMethod.POST)
    @VciUnCheckRight
    public BaseResult addDept(@RequestBody OrgDepartmentDTO orgDepartmentDTO){
        try {
            return deptQueryService.addDept(orgDepartmentDTO) ? BaseResult.success("部门添加成功!"):BaseResult.fail("部门添加失败!");
        }catch (Exception e){
            e.printStackTrace();
            String exceptionMessage = VciBaseUtil.getExceptionMessage(e);
            log.error("添加部门时出现错误,原因:" + exceptionMessage);
            return BaseResult.fail("添加部门时出现错误,原因:" + exceptionMessage);
        }
    }
    /**
     * ä¿®æ”¹éƒ¨é—¨ä¿¡æ¯
     * @param orgDepartmentDTO
     * @return
     */
    @RequestMapping(value = "/updateDept",method = RequestMethod.PUT)
    @VciUnCheckRight
    public BaseResult updateRole(@RequestBody OrgDepartmentDTO orgDepartmentDTO){
        try {
            return deptQueryService.updateDept(orgDepartmentDTO) ? BaseResult.success("部门修改成功!"):BaseResult.fail("部门修改失败!");
        }catch (Exception e){
            e.printStackTrace();
            String exceptionMessage = VciBaseUtil.getExceptionMessage(e);
            log.error("修改部门时出现错误,原因:" + exceptionMessage);
            return BaseResult.fail("修改部门时出现错误,原因:" + exceptionMessage);
        }
    }
    /**
     * åˆ é™¤éƒ¨é—¨
     * @param ids è¦åˆ é™¤çš„部门主键
     * @return
     */
    @RequestMapping(value = "/deleteDept",method = RequestMethod.DELETE)
    @VciUnCheckRight
    public BaseResult deleteDept(String[] ids){
        try {
            return deptQueryService.deleteDept(ids) ? BaseResult.success("删除部门成功!"):BaseResult.fail("删除部门失败!");
        }catch (Exception e){
            e.printStackTrace();
            String exceptionMessage = VciBaseUtil.getExceptionMessage(e);
            log.error("添加部门时出现错误,原因:" + exceptionMessage);
            return BaseResult.fail("添加部门时出现错误,原因:" + exceptionMessage);
        }
    }
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/SmPwdStrategyQueryController.java
@@ -74,6 +74,12 @@
        }
    }
    /**
     * ä¿å­˜ç”¨æˆ·å¯†ç ç­–略关联关系
     * @param userIds
     * @param passwordStrategId
     * @return
     */
    @RequestMapping(value = "/saveUserPasswordStrateg",method = RequestMethod.POST)
    public BaseResult saveUserPasswordStrateg(String[] userIds, String passwordStrategId){
        try {
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/SmRoleQueryController.java
@@ -1,19 +1,22 @@
package com.vci.frameworkcore.controller;
import com.vci.frameworkcore.compatibility.SmRoleQueryServiceI;
import com.vci.frameworkcore.constant.FrameWorkLangCodeConstant;
import com.vci.frameworkcore.dto.SmRoleDTO;
import com.vci.frameworkcore.pagemodel.SmRoleVO;
import com.vci.starter.web.annotation.controller.VciUnCheckRight;
import com.vci.starter.web.exception.VciBaseException;
import com.vci.starter.web.pagemodel.*;
import com.vci.starter.web.util.LocalFileUtil;
import com.vci.starter.web.util.VciBaseUtil;
import com.vci.starter.web.util.WebThreadLocalUtil;
import com.vci.web.enumpck.UserTypeEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.util.List;
import java.util.Map;
@@ -56,17 +59,23 @@
    }
    /**
     * è§’色的列表查询:用于下拉,还有列表等全查询场景
     * è§’色的列表查询:用于角色管理列表等查询场景:会根据当前登录的用户类型来决定查询那些角色
     * @param queryObject æŸ¥è¯¢å¯¹è±¡ï¼ŒåŒ…含了查询条件,分页,排序等,即允许使用SmRoleVO里的所有属性作为查询条件
     * @return åŒ…含三员的角色 çš„æ˜¾ç¤ºå¯¹è±¡åˆ—表数据,请获取其中的data属性
     * @throws VciBaseException æŸ¥è¯¢å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常,如果是老的项目里不抛出异常
     */
    @RequestMapping(value = "/gridRoles",method = RequestMethod.GET)
    //@VciUnCheckRight
    public BaseResult<SmRoleVO> gridRoles(BaseQueryObject queryObject) {
        try {
            if(queryObject == null){
                queryObject = new BaseQueryObject();
            }
            //根据当前用户来决定能查那些角色
            String usertype = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUsertype();
            if(UserTypeEnum.SUPPER_ADMIN.getValue().equals(usertype)){
                queryObject.getConditionMap().put("pltype","1");
            }else {
                queryObject.getConditionMap().put("pltype","2");
            }
            DataGrid<SmRoleVO> roleVOData = roleQueryService.gridRoles(queryObject.getConditionMap(),queryObject.getPageHelper());
            return BaseResult.dataGrid(roleVOData);
@@ -97,24 +106,6 @@
    }
    /**
     * åˆ†é…è§’色:保存用户角色关联关系
     * @param userOid
     * @param roleIds
     * @return
     */
    @RequestMapping(value = "/saveRights",method = RequestMethod.POST)
    public BaseResult saveRights(String userOid, String[] roleIds){
        try {
            return roleQueryService.saveRights(userOid,roleIds) ? BaseResult.success("角色分配成功!"):BaseResult.fail("角色分配失败!");
        }catch (Exception e){
            e.printStackTrace();
            String exceptionMessage = VciBaseUtil.getExceptionMessage(e);
            log.error("根据用户主键获取,关联的角色时出现错误,原因:" + exceptionMessage);
            return BaseResult.fail("根据用户主键获取,关联的角色时出现错误,原因:" + exceptionMessage);
        }
    }
    /**
     * è§’色的树形参照
     * @param treeQueryObject æ ‘形数据的查询对象,包括查询条件,上级主键,是否多选等,extandParamsMap中添加"showAllRoleNode"为"true"时,返回结果中会包含“所有角色”这个节点
     * @return è§’色的树形参照,无上下级关系
@@ -128,4 +119,97 @@
        //BaseResult.fail("这里返回前端的错误信息");
    }
    /**
     * æ–°å¢žå•条角色
     * @param smRoleDTO
     * @return
     */
    @RequestMapping(value = "/addRole",method = RequestMethod.POST)
    public BaseResult addRole(@RequestBody SmRoleDTO smRoleDTO){
        try {
            return roleQueryService.addRole(smRoleDTO) ? BaseResult.success("角色添加成功!"):BaseResult.fail("角色添加失败!");
        }catch (Exception e){
            e.printStackTrace();
            String exceptionMessage = VciBaseUtil.getExceptionMessage(e);
            log.error("添加角色时出现错误,原因:" + exceptionMessage);
            return BaseResult.fail("添加角色时出现错误,原因:" + exceptionMessage);
        }
    }
    /**
     * ä¿®æ”¹è§’色
     * @param smRoleDTO
     * @return
     */
    @RequestMapping(value = "/updateRole",method = RequestMethod.PUT)
    public BaseResult updateRole(@RequestBody SmRoleDTO smRoleDTO){
        try {
            return roleQueryService.updateRole(smRoleDTO) ? BaseResult.success("角色修改成功!"):BaseResult.fail("角色修改失败!");
        }catch (Exception e){
            e.printStackTrace();
            String exceptionMessage = VciBaseUtil.getExceptionMessage(e);
            log.error("修改角色时出现错误,原因:" + exceptionMessage);
            return BaseResult.fail("修改角色时出现错误,原因:" + exceptionMessage);
        }
    }
    /**
     * åˆ é™¤è§’色
     * @param ids
     * @return
     */
    @RequestMapping(value = "/deleteRole",method = RequestMethod.DELETE)
    public BaseResult deleteRole(String[] ids){
        try {
            return roleQueryService.deleteRole(ids) ? BaseResult.success("删除用户成功!"):BaseResult.fail("删除用户失败!");
        }catch (Exception e){
            e.printStackTrace();
            String exceptionMessage = VciBaseUtil.getExceptionMessage(e);
            log.error("添加用户时出现错误,原因:" + exceptionMessage);
            return BaseResult.fail("添加用户时出现错误,原因:" + exceptionMessage);
        }
    }
    /**
     * å¯¼å…¥è§’色
     * @param file
     * @return
     * @throws VciBaseException
     */
    @RequestMapping(value = "/importRole",method = RequestMethod.POST)
    public BaseResult importRole(MultipartFile file){
        String excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + LocalFileUtil.getFileNameForIE(file.getOriginalFilename());
        File file1 = new File(excelFileName);
        try {
            file.transferTo(new File(excelFileName));
            if (file != null) {
                return roleQueryService.importRole(file1);
            } else {
                return BaseResult.fail(FrameWorkLangCodeConstant.IMPORT_FAIL, new String[]{"无导入的文件"});
            }
        }catch (Throwable e) {
            throw new VciBaseException(e.getMessage(),new String[0],e);
        }finally {
            file1.delete();
        }
    }
    /**
     * åˆ†é…è§’色:保存用户角色关联关系,用户管理的分配角色和角色管理的分配成员共用
     * @param userOids
     * @param roleIds
     * @return
     */
    @RequestMapping(value = "/saveRights",method = RequestMethod.POST)
    public BaseResult saveRights(String[] userOids, String[] roleIds){
        try {
            return roleQueryService.saveRights(userOids,roleIds) ? BaseResult.success("角色分配成功!"):BaseResult.fail("角色分配失败!");
        }catch (Exception e){
            e.printStackTrace();
            String exceptionMessage = VciBaseUtil.getExceptionMessage(e);
            log.error("根据用户主键获取,关联的角色时出现错误,原因:" + exceptionMessage);
            return BaseResult.fail("根据用户主键获取,关联的角色时出现错误,原因:" + exceptionMessage);
        }
    }
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/SmUserQueryController.java
@@ -11,6 +11,7 @@
import com.vci.starter.web.util.LangBaseUtil;
import com.vci.starter.web.util.LocalFileUtil;
import com.vci.starter.web.util.VciBaseUtil;
import com.vci.web.util.Func;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -20,6 +21,7 @@
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.List;
/**
@@ -71,39 +73,126 @@
    }
    /**
     * ä½¿ç”¨éƒ¨é—¨æ¥èŽ·å–ç”¨æˆ·çš„å‚ç…§åˆ—è¡¨
     * éƒ¨é—¨ç®¡ç†ç»Ÿè®¡æŒ‰é’®ï¼ŒæŸ¥è¯¢æŽ¥å£
     * @param pkDepartment
     * @param queryObject
     * @return åŒ…含子部门下的用户
     * @throws VciBaseException
     */
    @RequestMapping(value = "/countSmUserByDeptOid",method = RequestMethod.GET)
    @VciUnCheckRight
    public BaseResult<List<SmUserVO>> countSmUserByDeptOid(String pkDepartment,BaseQueryObject queryObject) throws VciBaseException{
        VciBaseUtil.alertNotNull(pkDepartment,"部门主键");
        try {
            if(queryObject == null){
                queryObject = new BaseQueryObject();
            }
            List<SmUserVO> userVODataGrid = userQueryService.countSmUserByDeptOid(pkDepartment, queryObject.getConditionMap());
            return BaseResult.dataList(userVODataGrid);
        }catch (Exception e){
            e.printStackTrace();
            String exceptionMessage = VciBaseUtil.getExceptionMessage(e);
            log.error("通过部门主键获取在该部门下的,用户参照列表时出现错误,原因:" + exceptionMessage);
            return BaseResult.fail("通过部门主键获取在该部门下的,用户参照列表时出现错误,原因:" + exceptionMessage);
        }
    }
    /**
     * ä½¿ç”¨éƒ¨é—¨ä¸»é”®èŽ·å–ï¼Œåœ¨è¯¥éƒ¨é—¨ä¸‹çš„ç”¨æˆ·ç”¨æˆ·å‚ç…§åˆ—è¡¨
     * @param pkDepartment éƒ¨é—¨çš„主键,不能为空
     * @param queryObject æŸ¥è¯¢å¯¹è±¡ï¼ŒåŒ…含查询条件,分页,排序等,即允许使用SmUserVO里的所有属性作为查询条件,也可以使用pkRole.xxx,pkDepartment.xxx,pkDuty.xxx这样来查询
     * @return æ™®é€šç”¨æˆ·ï¼ˆä¸åŒ…含三员,也不包含停用的)的显示对象列表数据,请获取其中的data属性
     * @throws VciBaseException éƒ¨é—¨ä¸»é”®ä¸ºç©ºã€æŸ¥è¯¢å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常,如果是老的项目里不抛出异常
     */
    @RequestMapping(value = "/refDataGridByPkDepartment",method = RequestMethod.GET)
    public BaseResult<SmUserVO> refDataGridByPkDepartment(String pkDepartment,BaseQueryObject queryObject) throws VciBaseException{
        if(queryObject == null){
            queryObject = new BaseQueryObject();
    @RequestMapping(value = "/listUserByDeptOid",method = RequestMethod.GET)
    @VciUnCheckRight
    public BaseResult<List<SmUserVO>> listUserByDeptOid(String pkDepartment,BaseQueryObject queryObject) throws VciBaseException{
        VciBaseUtil.alertNotNull(pkDepartment,"部门主键");
        try {
            if(queryObject == null){
                queryObject = new BaseQueryObject();
            }
            List<SmUserVO> userVODataGrid = userQueryService.listUserByDeptOid(pkDepartment, queryObject.getConditionMap());
            return BaseResult.dataList(userVODataGrid);
        }catch (Exception e){
            e.printStackTrace();
            String exceptionMessage = VciBaseUtil.getExceptionMessage(e);
            log.error("通过部门主键获取在该部门下的,用户参照列表时出现错误,原因:" + exceptionMessage);
            return BaseResult.fail("通过部门主键获取在该部门下的,用户参照列表时出现错误,原因:" + exceptionMessage);
        }
        DataGrid<SmUserVO> userVODataGrid = userQueryService.gridUserByDeptOid(pkDepartment, queryObject.getConditionMap(), queryObject.getPageHelper());
        return BaseResult.dataGrid(userVODataGrid);
        //如果是老的项目,应该在gridUserByDeptOid上添加try,catch,然后catch里应该使用下面的代码
        //BaseResult.fail("这里返回前端的错误信息");
    }
    /**
     * ä½¿ç”¨è§’色来获取用户的参照列表
     * @param pkRole è§’色的主键,不能为空
     * ä½¿ç”¨éƒ¨é—¨ä¸»é”®èŽ·å–ï¼Œä¸åœ¨è¯¥éƒ¨é—¨ä¸‹çš„ç”¨æˆ·ç”¨æˆ·å‚ç…§åˆ—è¡¨
     * @param pkDepartment éƒ¨é—¨çš„主键,不能为空
     * @param queryObject æŸ¥è¯¢å¯¹è±¡ï¼ŒåŒ…含查询条件,分页,排序等,即允许使用SmUserVO里的所有属性作为查询条件,也可以使用pkRole.xxx,pkDepartment.xxx,pkDuty.xxx这样来查询
     * @return æ™®é€šç”¨æˆ·ï¼ˆä¸åŒ…含三员,也不包含停用的)的显示对象列表数据,请获取其中的data属性
     * @throws VciBaseException è§’色的主键为空、查询出错的时候会抛出异常,如果是老的项目里不抛出异常
     * @return æ ¹æ®å½“前登录的用户决定查那些用户出来,的显示对象列表数据,请获取其中的data属性
     * @throws VciBaseException éƒ¨é—¨ä¸»é”®ä¸ºç©ºã€æŸ¥è¯¢å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常,如果是老的项目里不抛出异常
     */
    @RequestMapping(value = "/refDataGridByPkRole",method = RequestMethod.GET)
    public BaseResult<SmUserVO> refDataGridByPkRole(String pkRole,BaseQueryObject queryObject) throws VciBaseException{
        if(queryObject == null){
            queryObject = new BaseQueryObject();
    @RequestMapping(value = "/listUserUnInDeptOid",method = RequestMethod.GET)
    @VciUnCheckRight
    public BaseResult<List<SmUserVO>> listUserUnInDeptOid(String pkDepartment,BaseQueryObject queryObject) throws VciBaseException{
        VciBaseUtil.alertNotNull(pkDepartment,"部门主键");
        try {
            if(queryObject == null){
                queryObject = new BaseQueryObject();
            }
            List<SmUserVO> userVODataGrid = userQueryService.listUserUnInDeptOid(pkDepartment, queryObject.getConditionMap());
            return BaseResult.dataList(userVODataGrid);
        }catch (Exception e){
            e.printStackTrace();
            String exceptionMessage = VciBaseUtil.getExceptionMessage(e);
            log.error("通过部门主键获取不在该部门下的,用户参照列表时出现错误,原因:" + exceptionMessage);
            return BaseResult.fail("通过部门主键获取不在该部门下的,用户参照列表时出现错误,原因:" + exceptionMessage);
        }
        DataGrid<SmUserVO> userVODataGrid = userQueryService.gridUserByRoleOid(pkRole, queryObject.getConditionMap(), queryObject.getPageHelper());
        return  BaseResult.dataGrid(userVODataGrid);
        //如果是老的项目,应该在gridUserByRoleOid上添加try,catch,然后catch里应该使用下面的代码
        //BaseResult.fail("这里返回前端的错误信息");
    }
    /**
     * ä½¿ç”¨è§’色获取关联的用户参照列表:被停用的用户也会查出来
     * @param pkRole è§’色的主键,不能为空
     * @param queryObject æŸ¥è¯¢å¯¹è±¡ï¼ŒåŒ…含查询条件,分页,排序等
     * @return
     * @throws VciBaseException
     */
    @RequestMapping(value = "/listUserByRoleOid",method = RequestMethod.GET)
    public BaseResult<List<SmUserVO>> listUserByRoleOid(String pkRole,BaseQueryObject queryObject) throws VciBaseException{
        VciBaseUtil.alertNotNull(pkRole,"角色主键");
        try {
            if(queryObject == null){
                queryObject = new BaseQueryObject();
            }
            List<SmUserVO> smUserVOList = userQueryService.listUserByRoleOid(pkRole, queryObject.getConditionMap());
            return  BaseResult.dataList(smUserVOList);
        }catch (Exception e){
            e.printStackTrace();
            String exceptionMessage = VciBaseUtil.getExceptionMessage(e);
            log.error("通过角色来获取用户的参照列表时出现错误,原因:" + exceptionMessage);
            return BaseResult.fail("通过角色来获取用户的参照列表时出现错误,原因:" + exceptionMessage);
        }
    }
    /**
     * ä½¿ç”¨è§’色获取不在某个角色下的用户参照列表
     * @param pkRole è§’色的主键,不能为空
     * @param queryObject æŸ¥è¯¢å¯¹è±¡ï¼ŒåŒ…含查询条件,分页,排序等
     * @return
     * @throws VciBaseException
     */
    @RequestMapping(value = "/listUserUnInRoleOid",method = RequestMethod.GET)
    public BaseResult<List<SmUserVO>> listUserUnInRoleOid(String pkRole,BaseQueryObject queryObject) throws VciBaseException{
        VciBaseUtil.alertNotNull(pkRole,"角色主键");
        try {
            if(queryObject == null){
                queryObject = new BaseQueryObject();
            }
            List<SmUserVO> smUserVOList = userQueryService.listUserUnInRoleOid(pkRole, queryObject.getConditionMap());
            return  BaseResult.dataList(smUserVOList);
        }catch (Exception e){
            e.printStackTrace();
            String exceptionMessage = VciBaseUtil.getExceptionMessage(e);
            log.error("获取不在当前角色下的,用户参照列表时出现错误,原因:" + exceptionMessage);
            return BaseResult.fail("获取不在当前角色下的,用户参照列表时出现错误,原因:" + exceptionMessage);
        }
    }
    /**
@@ -125,7 +214,7 @@
     * @throws VciBaseException æŸ¥è¯¢å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常,如果是老的项目里不抛出异常
     */
    @RequestMapping(value = "/getDataGridUsers",method = RequestMethod.GET)
    @VciUnCheckRight
    //@VciUnCheckRight
    public BaseResult<SmUserVO> getDataGridUsers(BaseQueryObject queryObject) throws VciBaseException {
        try {
            DataGrid<SmUserVO> userVODataGrid = userQueryService.getDataGridUsers(queryObject.getConditionMap(),queryObject.getPageHelper());
@@ -220,14 +309,14 @@
    @RequestMapping(value = "/downloadImportTemplate",method = RequestMethod.GET)
    @VciUnCheckRight
    public void downloadImportTemplate(String downloadFileName, HttpServletResponse response){
        String excelPath = userQueryService.downloadImportTemplate(downloadFileName);
        try {
            String excelPath = userQueryService.downloadImportTemplate(downloadFileName);
            ControllerUtil.writeFileToResponse(response,excelPath);
        } catch (IOException e) {
        } catch (Exception e) {
            String msg = "下载用户导入模板时出现错误,原因:" + LangBaseUtil.getErrorMsg(e);
            try {
                e.printStackTrace();
                ControllerUtil.writeDataToResponse(response, StringUtils.isNotBlank(msg)?msg.getBytes():new byte[0],null);
                ControllerUtil.writeDataToResponse(response,"error_" + Func.format(new Date(),"yyyy-MM-dd HHmmss.sss") + ".txt", StringUtils.isNotBlank(msg)?msg.getBytes():new byte[0],null);
            } catch (IOException ioException) {
                ioException.printStackTrace();
            }
@@ -238,7 +327,6 @@
     * äººå‘˜å¯¼å…¥
     */
    @RequestMapping(value = "/importUser",method = RequestMethod.POST)
    @VciUnCheckRight
    public BaseResult importUser(MultipartFile file){
        String excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + LocalFileUtil.getFileNameForIE(file.getOriginalFilename());
        File file1 = new File(excelFileName);
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/model/SmRoleForPlatform1.java
@@ -1,6 +1,6 @@
package com.vci.frameworkcore.model;
import com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant;
import com.vci.frameworkcore.constant.FrameWorkBtmTypeConstant;
import com.vci.starter.web.annotation.VciBtmType;
import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
@@ -11,7 +11,7 @@
 * @author weidy
 * @date 2020/2/27
 */
@VciBtmType(name = "role",text = "角色",tableName = "plrole",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
@VciBtmType(name = FrameWorkBtmTypeConstant.SM_ROLE_BTM_TYPE,tableName = "plrole",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
public class SmRoleForPlatform1 implements java.io.Serializable{
    /**
@@ -41,7 +41,7 @@
    /**
     * åˆ›å»ºæ—¶é—´
     */
    private Date plcreatetime;
    private Long plcreatetime;
    /**
     * åˆ›å»ºäºº
@@ -51,7 +51,7 @@
    /**
     * æœ€åŽä¿®æ”¹æ—¶é—´
     */
    private Date plupdatetime;
    private Long plupdatetime;
    /**
     * æœ€åŽä¿®æ”¹äºº
@@ -95,11 +95,11 @@
        this.pltype = pltype;
    }
    public Date getPlcreatetime() {
    public Long getPlcreatetime() {
        return plcreatetime;
    }
    public void setPlcreatetime(Date plcreatetime) {
    public void setPlcreatetime(Long plcreatetime) {
        this.plcreatetime = plcreatetime;
    }
@@ -111,11 +111,11 @@
        this.plcreateuser = plcreateuser == null ? null : plcreateuser.trim();
    }
    public Date getPlupdatetime() {
    public Long getPlupdatetime() {
        return plupdatetime;
    }
    public void setPlupdatetime(Date plupdatetime) {
    public void setPlupdatetime(Long plupdatetime) {
        this.plupdatetime = plupdatetime;
    }
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/model/dto/OrgDepartmentDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,93 @@
package com.vci.frameworkcore.model.dto;
import com.vci.starter.web.pagemodel.BaseModelVO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
 * éƒ¨é—¨æ•°æ®ä¼ è¾“对象
 * @author ludc
 * @date 2024/7/3 18:07
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class OrgDepartmentDTO extends BaseModelVO {
    /**
     * ç¦æ­¢ä¿®æ”¹è¯¥å€¼
     */
    private static final long serialVersionUID = 6241492355863644455L;
    /**
     * éƒ¨é—¨ç¼–号
     */
    private String id;
    /**
     * éƒ¨é—¨åç§°
     */
    private String name;
    /**
     * ä¸Šçº§éƒ¨é—¨
     */
    private String pkFatherDepartment;
    /**
     * ä¸Šçº§éƒ¨é—¨åç§°
     */
    private String pkFatherDepartmentName;
    /**
     * æ‰€å±žç»„织
     */
    private String pkOrganization;
    /**
     * æ‰€å±žç»„织名称
     */
    private String pkOrganizationName;
    /**
     * æŽ’序号
     */
    private Integer orderNum;
    /**
     * éƒ¨é—¨ä¸»ç®¡é¢†å¯¼
     */
    private String pkLeader;
    /**
     * éƒ¨é—¨ä¸»ç®¡é¢†å¯¼å§“名
     */
    private String pkLeaderName;
    /**
     * éƒ¨é—¨ä½ç½®
     */
    private String address;
    /**
     * éƒ¨é—¨è”系电话
     */
    private String tel;
    /**
     * éƒ¨é—¨ä»£å·ï¼Œå¯¹åº”表中plcode字段
     */
    private String code;
    /**
     * ä¸“业
     */
    public String specialties;
    /**
     * çŠ¶æ€
     */
    public short status;
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/model/po/SmRolePO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
package com.vci.frameworkcore.model.po;
import com.vci.starter.poi.annotation.ExcelColumn;
import com.vci.starter.web.pagemodel.BaseModelVO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
 * è§’色的导入导出对象
 * @author ludc
 * @date 2024/7/1 16:53
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SmRolePO extends BaseModelVO {
    /**
     * ç¦æ­¢ä¿®æ”¹è¿™ä¸ªå€¼
     */
    private static final long serialVersionUID = -2239512786206928201L;
    /**
     * æ‰€åœ¨æ•°æ®è¡Œ
     */
    @ExcelColumn(rowIndexColumn = true,value = "")
    private String rowIndex;
    /**
     * åç§°
     */
    @ExcelColumn(value="名称",nullable = false)
    private String name;
    /**
     * æè¿°
     */
    @ExcelColumn(value="描述")
    private String description;
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/pagemodel/SmRoleVO.java
@@ -29,7 +29,6 @@
     */
    private String roleClassify;
    /**
     * è§’色类型显示文本
     */
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/pagemodel/SmUserVO.java
@@ -116,6 +116,11 @@
    private String password;
    /**
     * ç¡®è®¤å¯†ç ï¼Œç”¨æ¥åœ¨ä¿®æ”¹ç”¨æˆ·ä¿¡æ¯ç•Œé¢å›žè°ƒçš„
     */
    private String confirmPassword;
    /**
     * å¯†ç é”™è¯¯æ¬¡æ•°
     */
    private Integer pwdWrongCount;
@@ -173,6 +178,14 @@
        this.password = password;
    }
    public String getConfirmPassword() {
        return confirmPassword;
    }
    public void setConfirmPassword(String confirmPassword) {
        this.confirmPassword = confirmPassword;
    }
    public void setStatus(short status) {
        this.status = status;
    }