From 34c25ddf37a3eb8da9efb04efedad089f13efe83 Mon Sep 17 00:00:00 2001 From: ludc Date: 星期三, 24 七月 2024 18:20:27 +0800 Subject: [PATCH] 部门导入调整,按照部门名称/实现层级关系。枚举导入功能接口上传,属性池添加新增、查询、修改、导出、查看应用范围等接口。业务类型、链接类型、枚举类型增加等接口属性是否产生数据检查、根据属性名修改业务类型和连接类型中对应属性方法,以及属性池中需要的一些下拉查询接口。 --- Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmUserQueryServiceImpl.java | 825 +++++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 587 insertions(+), 238 deletions(-) diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmUserQueryServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmUserQueryServiceImpl.java index 2f5a410..d08bcbb 100644 --- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmUserQueryServiceImpl.java +++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmUserQueryServiceImpl.java @@ -1,49 +1,52 @@ package com.vci.frameworkcore.compatibility.impl; -import com.vci.client.common.objects.UserObject; -import com.vci.client.common.providers.ClientServiceProvider; +import com.vci.dto.SmUserDTO; import com.vci.common.util.ThreeDES; import com.vci.corba.common.PLException; +import com.vci.corba.common.data.UserEntityInfo; import com.vci.corba.framework.data.UserInfo; import com.vci.corba.omd.data.BusinessObject; import com.vci.frameworkcore.compatibility.OrgDeptQueryServiceI; import com.vci.frameworkcore.compatibility.SmPwdStrategyQueryServiceI; import com.vci.frameworkcore.compatibility.SmRoleQueryServiceI; import com.vci.frameworkcore.compatibility.SmUserQueryServiceI; -import com.vci.frameworkcore.dto.SmUserDTO; -import com.vci.frameworkcore.pagemodel.OrgDepartmentVO; -import com.vci.frameworkcore.pagemodel.SmPasswordStrategyVO; -import com.vci.frameworkcore.pagemodel.SmRoleVO; -import com.vci.frameworkcore.pagemodel.SmUserVO; +import com.vci.model.SmUserDO; +import com.vci.pagemodel.SmUserVO; +import com.vci.po.SmUserPO; +import com.vci.pagemodel.OrgDepartmentVO; +import com.vci.pagemodel.SmPasswordStrategyVO; +import com.vci.pagemodel.SmRoleVO; +import com.vci.frameworkcore.properties.ConfigCorbaReader; import com.vci.omd.utils.ObjectTool; +import com.vci.starter.poi.bo.ReadExcelOption; +import com.vci.starter.poi.bo.WriteExcelData; +import com.vci.starter.poi.bo.WriteExcelOption; +import com.vci.starter.poi.constant.ExcelLangCodeConstant; +import com.vci.starter.poi.util.ExcelUtil; import com.vci.starter.web.enumpck.BooleanEnum; 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.util.BeanUtil; -import com.vci.starter.web.util.VciBaseUtil; -import com.vci.starter.web.util.VciDateUtil; -import com.vci.starter.web.util.WebThreadLocalUtil; +import com.vci.starter.web.pagemodel.*; +import com.vci.starter.web.util.*; import com.vci.starter.web.wrapper.VciQueryWrapperForDO; import com.vci.web.enumpck.UserTypeEnum; -import com.vci.web.model.SmPasswordStrategyDO; -import com.vci.web.model.SmUserDO; import com.vci.web.service.WebBoServiceI; import com.vci.web.util.Func; import com.vci.web.util.PlatformClientUtil; import com.vci.web.util.WebUtil; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.hssf.util.HSSFColor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import java.io.File; import java.util.*; import java.util.stream.Collectors; -import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST; import static com.vci.web.util.WebUtil.arryAndSqlToBusinessObject; /** @@ -112,9 +115,14 @@ public static final String QUERY_FIELD_ROLE = "roleUser.plroleuid"; /** + * 蹇呭~鍒� + */ + private ArrayList<Integer> ColumnNameisRed = new ArrayList<Integer>(); + + /** * 鐢ㄦ埛鍒嗛〉鏌ヨ鏃惰幏鍙栭儴闂ㄦ斁鍒拌繖閲岄伩鍏嶉噸澶嶆煡璇� */ - private Map<String,List<OrgDepartmentVO>> orgDepartmentVOMap; + private Map<String,Map<String,String>> orgDepartmentVOMap; /** * 鐢ㄦ埛鍒嗛〉鏌ヨ鏃惰幏鍙栬鑹叉斁鍒拌繖閲岄伩鍏嶉噸澶嶆煡璇� @@ -127,6 +135,11 @@ private Map<String,SmPasswordStrategyVO> smPwdStrategyVOMap; /** + * 鏃ュ織 + */ + private Logger logger = LoggerFactory.getLogger(getClass()); + + /** * 妫�鏌ョ敤鎴锋槸鍚﹀瓨鍦紝鍙互鏍规嵁鐢ㄦ埛鍚嶏紝涔熷彲浠ユ牴鎹敤鎴穙id * @param userName 浼爊ull锛屽嵆鐢╫id浣滀负妫�鏌ユ潯浠� * @param oid 浼爊ull锛屽嵆鐢╱serName浣滀负妫�鏌ユ潯浠� @@ -135,7 +148,7 @@ @Override public boolean checkUserExist(String userName, String oid) throws PLException { if(Func.isEmpty(userName) && Func.isEmpty(oid)){ - throw new PLException("妫�鏌ョ敤鎴锋槸鍚﹀瓨鍦ㄦ椂锛屼紶閫掔殑鍙傛暟鐢ㄦ埛鍚嶅拰鐢ㄦ埛oid閮戒负绌猴紒",new String[0]); + throw new PLException("500", new String[] { "妫�鏌ョ敤鎴锋槸鍚﹀瓨鍦ㄦ椂锛屼紶閫掔殑鍙傛暟鐢ㄦ埛鍚嶅拰鐢ㄦ埛oid閮戒负绌猴紒"}); } UserInfo userInfo = null; if(Func.isNotEmpty(userName)) { @@ -170,8 +183,8 @@ * @return 鐢ㄦ埛鐨勪俊鎭� * @throws VciBaseException 鏌ヨ鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父 */ - private SmUserVO getUserByField(String queryField,String queryValue) throws VciBaseException{ - VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(null,SmUserDO.class,null,true); + private SmUserVO getUserByField(String queryField, String queryValue) throws VciBaseException{ + VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(null, SmUserDO.class,null,true); queryWrapper.eq(queryWrapper.getTableNick() + "." +queryField,queryValue); queryWrapper.setDistinct(true); queryWrapper.wrapperSql(); @@ -238,6 +251,7 @@ throw new VciBaseException("鑾峰彇鐢ㄦ埛澶辫触锛�"+e.getMessage()); } } + /** * 鏍规嵁鐢ㄦ埛涓婚敭鑾峰彇鐢ㄦ埛鐨勪俊鎭� * @param userOid 鐢ㄦ埛涓婚敭 @@ -277,7 +291,7 @@ * @param userInfoArr 涓氬姟鏁版嵁鏁扮粍 * @return 鏄剧ず瀵硅薄闆嗗悎 */ - private List<SmUserVO> userInfoArr2VO(UserInfo[] userInfoArr) { + private List<SmUserVO> userInfoArr2VO(UserInfo[] userInfoArr) throws PLException { List<SmUserVO> userVOList = new ArrayList<>(); for(UserInfo userInfo : userInfoArr){ userVOList.add(userInfo2VO(userInfo)); @@ -290,33 +304,55 @@ * @param userInfo 骞冲彴杩斿洖鐨勪笟鍔℃暟鎹� * @return 鐢ㄦ埛鏄剧ず瀵硅薄 */ - private SmUserVO userInfo2VO(UserInfo userInfo) { + private SmUserVO userInfo2VO(UserInfo userInfo) throws PLException { + if(Func.isBlank(userInfo.id)){ + return new SmUserVO(); + } SmUserVO smUserVO = new SmUserVO(); smUserVO.setOid(userInfo.id); smUserVO.setId(userInfo.userName); smUserVO.setName(userInfo.trueName); smUserVO.setSecretGrade(userInfo.secretGrade); - smUserVO.setSecretGradeText(UserSecretEnum.getSecretText(smUserVO.getSecretGrade())); + smUserVO.setSecretGradeText(UserSecretEnum.getSecretText(userInfo.secretGrade)); smUserVO.setUserType(String.valueOf(userInfo.userType)); - smUserVO.setUserTypeText(UserTypeEnum.getTextByValue(smUserVO.getUserType())); + smUserVO.setUserTypeText(UserTypeEnum.getTextByValue(String.valueOf(userInfo.userType))); smUserVO.setDescription(userInfo.desc); smUserVO.setEmail(userInfo.email); + smUserVO.setStatus(userInfo.status); + smUserVO.setPassword(userInfo.pwd); + smUserVO.setConfirmPassword(userInfo.pwd); //鐢ㄦ埛鎵�灞為儴闂ㄧ殑鏌ヨ璁剧疆 - List<OrgDepartmentVO> orgDepartmentVOList = orgDepartmentVOMap.get(userInfo.id); - smUserVO.setPkDepartment( - Func.isEmpty(orgDepartmentVOList) ? - null:orgDepartmentVOList.stream().map(OrgDepartmentVO::getOid).collect(Collectors.joining(",")) - ); - smUserVO.setPkDepartmentName( - Func.isEmpty(orgDepartmentVOList) ? - null:orgDepartmentVOList.stream().map(OrgDepartmentVO::getName).collect(Collectors.joining(",")) - ); + Map<String,String> orgDepartmentVOList; + //鏌ョ湅鍏ㄥ眬鍙橀噺涓槸鍚﹀瓨鍦ㄩ儴闂ㄤ俊鎭紝瀛樺湪鐨勬儏鍐垫渶涓昏鏄拡瀵瑰鏉$敤鎴锋煡璇㈢殑鏃跺�欓伩鍏嶉噸澶嶆煡璇㈢殑 + if(Func.isNotEmpty(orgDepartmentVOMap)){ + orgDepartmentVOList = Func.isNotEmpty(orgDepartmentVOMap.get(userInfo.id)) ? + orgDepartmentVOMap.get(userInfo.id):new HashMap<>(); + }else { + Map<String, Map<String, String>> tempDeptMap = orgDeptQueryService.batchMapDeptNameByUserOids(Arrays.asList(userInfo.id), null); + orgDepartmentVOList = Func.isNotEmpty(tempDeptMap.get(userInfo.id)) ? + tempDeptMap.get(userInfo.id):new HashMap<>(); + } + //閮ㄩ棬oid锛屾甯告儏鍐典笅涓�涓敤鎴峰彧浼氬瓨鍦ㄤ竴涓儴闂ㄤ笅 + smUserVO.setPkDepartment(orgDepartmentVOList.keySet().stream().collect(Collectors.joining(","))); + smUserVO.setPkDepartmentName(orgDepartmentVOList.values().stream().collect(Collectors.joining(","))); //瀵嗙爜绛栫暐鏌ヨ璁剧疆 - SmPasswordStrategyVO smPasswordStrategyVO = smPwdStrategyVOMap.getOrDefault(userInfo.id,new SmPasswordStrategyVO()); + SmPasswordStrategyVO smPasswordStrategyVO; + if(Func.isNotEmpty(smPwdStrategyVOMap)){ + smPasswordStrategyVO = smPwdStrategyVOMap.getOrDefault(userInfo.id,new SmPasswordStrategyVO()); + }else { + smPasswordStrategyVO = smPwdStrategyQueryService.getPasswordStrategyVOByUserOid(userInfo.id); + //濡傛灉涓嶅瓨鍦ㄥ氨鑾峰彇榛樿鐨� + smPasswordStrategyVO = Func.isNotEmpty(smPasswordStrategyVO) ? smPasswordStrategyVO:smPwdStrategyQueryService.getPasswordStrategyVOByDefault(); + } smUserVO.setPkPasswordStrategy(smPasswordStrategyVO.getOid()); smUserVO.setPkPasswordStrategyName(smPasswordStrategyVO.getName()); //瑙掕壊鏌ヨ璁剧疆 - List<SmRoleVO> smRoleVOList = smRoleVOMap.get(userInfo.id); + List<SmRoleVO> smRoleVOList; + if (Func.isNotEmpty(smRoleVOMap)) { + smRoleVOList = smRoleVOMap.get(userInfo.id); + }else { + smRoleVOList = smRoleQueryService.listRoleByUserOid(userInfo.id,null); + } smUserVO.setPkPerson( Func.isEmpty(smRoleVOList) ? null:smRoleVOList.stream().map(SmRoleVO::getOid).collect(Collectors.joining(",")) @@ -471,19 +507,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 鍒嗛〉鍙傛暟 @@ -495,31 +518,33 @@ pageHelper = new PageHelper(-1); } pageHelper.addDefaultAsc("PLTRUENAME"); - //String userName = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserName(); + String loginUserId = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(); + //String loginUserId = "Ludc"; //鍒嗛〉鏌ヨ UserInfo[] userInfos = platformClientUtil.getFrameworkService().fetchUserInfoByCondition( conditionMap.get("name"), - conditionMap.get("userName"), - conditionMap.get("deptId"), - conditionMap.get("roleId"), - "developer", //褰撳墠鐧诲綍鐨勭敤鎴峰悕 + conditionMap.get("id"), + conditionMap.get("pkDepartment"), + conditionMap.get("pkPerson"), + loginUserId, //褰撳墠鐧诲綍鐨勭敤鎴峰悕 pageHelper.getPage(), pageHelper.getLimit() ); DataGrid<SmUserVO> dataGrid = new DataGrid<>(); if(Func.isNotEmpty(userInfos)){ List<String> idList = Arrays.stream(userInfos).map(item -> item.id).collect(Collectors.toList()); - orgDepartmentVOMap = orgDeptQueryService.batchListDeptByUserOids(idList, null); + orgDepartmentVOMap = orgDeptQueryService.batchMapDeptNameByUserOids(idList, null); smRoleVOMap = smRoleQueryService.batchListRoleByUserOids(idList,null); smPwdStrategyVOMap = smPwdStrategyQueryService.batchSmPwdStrategyByUserOids(idList); dataGrid.setData(userInfoArr2VO(userInfos)); + //TODO: 杩欎釜缁熻鎬绘暟鏈夐棶棰橈紝甯﹁繃鍘荤殑鍙傛暟涓嶈兘鍍忎笂闈㈤偅涓猣etchUserInfoByCondition鏌ヨ涓�鏍风粺璁″鍗寸殑鎬绘暟 dataGrid.setTotal( platformClientUtil.getFrameworkService().getUserTotalByCondition( conditionMap.get("name"), - conditionMap.get("userName"), - conditionMap.get("deptId"), - conditionMap.get("roleId"), - "developer" //褰撳墠鐧诲綍鐨勭敤鎴峰悕 + conditionMap.get("id"), + conditionMap.get("pkDepartment"), + conditionMap.get("pkPerson"), + loginUserId //褰撳墠鐧诲綍鐨勭敤鎴峰悕 ) ); } @@ -557,6 +582,7 @@ SmUserVO userVO = getUserByUserId(userId); return userVO == null?"":userVO.getName(); } + /** * 鏍规嵁鐢ㄦ埛涓婚敭鑾峰彇鐢ㄦ埛鐨勫鍚� * @param userOid 鐢ㄦ埛涓婚敭 @@ -568,24 +594,128 @@ 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.listAllLevelChildrenDeptByParentOid(deptOid, null); + List<String> deptOidCollection = orgDepartmentVOList.stream().map(OrgDepartmentVO::getOid).collect(Collectors.toList()); + deptOidCollection.add(deptOid);//灏嗗綋鍓嶅眰鐨刼id涔熸斁杩涘幓 + List<SmUserVO> smUserVOList = listUserVOByDeptOid(queryMap, deptOidCollection, false); + if(Func.isEmpty(smUserVOList)){ + return new ArrayList<>(); + } + Map<String, List<SmRoleVO>> smRoleVOMap = smRoleQueryService.batchListRoleByUserOids(smUserVOList.stream().map(SmUserVO::getOid).collect(Collectors.toSet()), null); + smUserVOList = smUserVOList.stream().map(vo->{ + List<SmRoleVO> smRoleVOS = smRoleVOMap.get(vo.getOid()); + vo.setPkPerson( + Func.isEmpty(smRoleVOS) ? + null:smRoleVOS.stream().map(SmRoleVO::getOid).collect(Collectors.joining(",")) + ); + vo.setPkPersonName( + Func.isEmpty(smRoleVOS) ? + null:smRoleVOS.stream().map(SmRoleVO::getName).collect(Collectors.joining(",")) + ); + return vo; + }).collect(Collectors.toList()); + return smUserVOList; + } + /** - * 鏌ヨ鏌愪釜閮ㄩ棬涓嬬殑鐢ㄦ埛瀵硅薄 + * 鏌ヨ鍦ㄦ煇涓儴闂ㄤ笅鐨勭敤鎴峰璞� * @param deptOid 閮ㄩ棬鐨勪富閿� * @param queryMap 鏌ヨ鏉′欢锛屽鏋滄槸閮ㄩ棬鐨勬煇涓睘鎬т綔涓烘煡璇㈡潯浠讹紝鍒欏彲浠ヤ娇鐢╬kDepartment.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 ); } /** - * 鑾峰彇鏌ヨ灏佽鍣紝榛樿鍙煡浜唒lstatus=0鍜宲lusertype=2锛屾帓搴忛粯璁lusername + * 鏌ヨ涓嶅湪鏌愪釜閮ㄩ棬涓嬬殑鐢ㄦ埛瀵硅薄鍒楄〃 + * @param deptOid 閮ㄩ棬鐨勪富閿� + * @param queryMap 鏌ヨ鏉′欢锛屽鏋滄槸閮ㄩ棬鐨勬煇涓睘鎬т綔涓烘煡璇㈡潯浠讹紝鍒欏彲浠ヤ娇鐢╬kDepartment.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){ + //鍏堟煡璇㈠凡閫変汉鍛榦id + 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 "); + queryWrapperForDO.setOrderSql("order by " + queryWrapperForDO.getTableNick() + ".pltrueName"); + 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); + } + + /** + * 鑾峰彇鏌ヨ灏佽鍣紝榛樿鍙煡浜唒lstatus=0鍜宲lusertype=2锛堟敼鎴愭牴鎹綋鍓嶇櫥褰曠殑鐢ㄦ埛鏉ュ喅瀹氭煡浠�涔堢被鍨嬬殑鐢ㄦ埛锛夛紝 + * 鎺掑簭榛樿plusername * @param queryField 鏌ヨ灞炴�� * @param queryValue 鏌ヨ鐨勫�� * @param queryMap 鏌ヨ鏉′欢锛屽鏋滄槸瑙掕壊鐨勫睘鎬э紝闇�瑕佷娇鐢╬krole.xxx @@ -616,60 +746,17 @@ } addRoleQuerySql(queryMap,queryWrapperForDO); queryWrapperForDO.eq("plstatus", "0"); - queryWrapperForDO.eq("plusertype", "2"); - queryWrapperForDO.setDistinct(true); - return queryWrapperForDO; - } - - /** - * 鑾峰彇鏌ヨ灏佽鍣紝榛樿鍙煡plusertype!=1鐨� - * @param queryField 鏌ヨ灞炴�� - * @param queryValue 鏌ヨ鐨勫�� - * @param queryMap 鏌ヨ鏉′欢锛屽鏋滄槸瑙掕壊鐨勫睘鎬э紝闇�瑕佷娇鐢╬krole.xxx - * @param pageHelper 鍒嗛〉瀵硅薄 - * @param notIn 鏄惁涓轰笉鍖呭惈 - * @return 鏌ヨ灏佽鍣� - */ - private VciQueryWrapperForDO getQueryWrapper2(String queryField,String queryValue,Map<String,String> queryMap,PageHelper pageHelper,boolean notIn){ - if(pageHelper == null){ - pageHelper = new PageHelper(-1); + // TODO:鏍规嵁褰撳墠鐧诲綍鐨勭敤鎴峰喅瀹氳兘鏌ラ偅浜涚敤鎴� + SessionInfo loginUser = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); + //鏍规嵁褰撳墠鐧诲綍鐨勭敤鎴风被鍨嬩笉鍚岋紝鏌ヨ涓嶅悓鐨勭敤鎴� + if(UserTypeEnum.SUPPER_ADMIN.getValue().equals(loginUser.getUsertype())){ + //瓒呯鐢ㄦ埛鍙兘鏌ョ鐞嗗憳鐢ㄦ埛 + queryMap.put("plusertype", "1"); + }else{ + //闄や簡瓒呯閮藉彧鑳芥煡鏅�氱敤鎴� + queryMap.put("plusertype", "2"); } - pageHelper.addDefaultAsc("plusername"); - VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(queryMap,SmUserDO.class,pageHelper); - if(StringUtils.isNotBlank(queryField)) { - if (queryValue.contains(",")) { - if (notIn) { - queryWrapperForDO.notIn(queryField, VciBaseUtil.toInSql(VciBaseUtil.str2List(queryValue).toArray(new String[0]))); - } else { - queryWrapperForDO.in(queryField, VciBaseUtil.toInSql(VciBaseUtil.str2List(queryValue).toArray(new String[0]))); - } - } else { - if (notIn) { - queryWrapperForDO.neq(queryField, queryValue); - } else { - queryWrapperForDO.eq(queryField, queryValue); - } - } - } - addRoleQuerySql(queryMap,queryWrapperForDO); - queryWrapperForDO.neq("plusertype", "2"); - queryWrapperForDO.setDistinct(true); return queryWrapperForDO; - } - - /** - * 鏌ヨ鏌愪釜閮ㄩ棬涓嬬殑鐢ㄦ埛瀵硅薄鍒楄〃 - * @param deptOid 閮ㄩ棬鐨勪富閿� - * @param queryMap 鏌ヨ鏉′欢锛屽鏋滄槸閮ㄩ棬鐨勬煇涓睘鎬т綔涓烘煡璇㈡潯浠讹紝鍒欏彲浠ヤ娇鐢╬kDepartment.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); } /** @@ -692,37 +779,6 @@ } /** - * 鏌ヨ涓嶅湪鏌愪釜閮ㄩ棬涓嬬殑鐢ㄦ埛瀵硅薄鍒楄〃 - * @param deptOid 閮ㄩ棬鐨勪富閿� - * @param queryMap 鏌ヨ鏉′欢锛屽鏋滄槸閮ㄩ棬鐨勬煇涓睘鎬т綔涓烘煡璇㈡潯浠讹紝鍒欏彲浠ヤ娇鐢╬kDepartment.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 鏌ヨ鏉′欢锛屽鏋滄槸閮ㄩ棬鐨勬煇涓睘鎬т綔涓烘煡璇㈡潯浠讹紝鍒欏彲浠ヤ娇鐢╬kDepartment.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 鏌ヨ鏉′欢锛屽鏋滄槸瑙掕壊鐨勬煇涓睘鎬т綔涓烘煡璇㈡潯浠讹紝鍒欏彲浠ヤ娇鐢╬kRole.xxx杩欐牱鐨勬柟寮� @@ -732,26 +788,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 鏌ヨ鏉′欢锛屽鏋滄槸瑙掕壊鐨勬煇涓睘鎬т綔涓烘煡璇㈡潯浠讹紝鍒欏彲浠ヤ娇鐢╬kRole.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); } /** @@ -764,25 +801,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 鏌ヨ鏉′欢锛屽鏋滄槸瑙掕壊鐨勬煇涓睘鎬т綔涓烘煡璇㈡潯浠讹紝鍒欏彲浠ヤ娇鐢╬kRole.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); } /** @@ -928,7 +994,6 @@ return false; } - /** * 璁剧疆鏌愪釜鐢ㄦ埛鏄攣瀹氱姸鎬� * @param userId 鐢ㄦ埛鍚� @@ -956,22 +1021,52 @@ /** * 淇敼瀵嗙爜 * @param userOid 鐢ㄦ埛涓婚敭 + * @param oldPassword 鏃х殑瀵嗙爜 * @param password 鏂扮殑瀵嗙爜 * @param confirmPassword 纭瀵嗙爜 */ @Override - public void changePassword(String userOid, String password, - String confirmPassword) throws VciBaseException { - WebUtil.alertNotNull(userOid,"鐢ㄦ埛涓婚敭",password,"瀵嗙爜",confirmPassword,"纭瀵嗙爜"); + @Transactional(rollbackFor = Exception.class) + public boolean changePassword(String userOid,String oldPassword, String password, + String confirmPassword) throws Exception { + WebUtil.alertNotNull(userOid,"鐢ㄦ埛涓婚敭",oldPassword,"鐧诲綍瀵嗙爜",password,"瀵嗙爜",confirmPassword,"纭瀵嗙爜"); if(!password.equals(confirmPassword)){ throw new VciBaseException("瀵嗙爜鍜岀‘璁ゅ瘑鐮佷笉鐩哥瓑"); } + //瀵规棫瀵嗙爜鍜屽瘑鐮佽繘琛岃В瀵嗭紝渚夸簬姣斿瀵嗙爜鐢� + oldPassword = Func.decryptAes(oldPassword,"daliantan0v0vcip"); + password = Func.decryptAes(password,"daliantan0v0vcip"); + //瀵规瘮鏃у瘑鐮� + boolean b = this.checkPasswordEqual(oldPassword, userOid); + if(!b){ + throw new PLException("500", new String[] { "鎮ㄨ緭鍏ョ殑瀵嗙爜涓庣櫥褰曞瘑鐮佷笉涓�鑷�,璇烽噸鏂拌緭鍏�!"}); + } + SmUserVO smUserVO = getUserByUserOid(userOid); + if(Func.isEmpty(smUserVO)){ + throw new VciBaseException("褰撳墠淇敼鐨勭敤鎴蜂笉瀛樺湪锛�"); + } + //TODO:鏍¢獙瀵嗙爜鏄惁绗﹀悎绛栫暐 + String error = platformClientUtil.getFrameworkService().checkPasswordStrategyByUserId(smUserVO.getId(), password,null); + if (!StringUtils.isBlank(error)) { + throw new VciBaseException("褰撳墠璁剧疆鐨勫瘑鐮侊紝瀵嗙爜绛栫暐鏍¢獙鏈�氳繃!"); + } + + //TODO:鑰冭檻鏄惁闇�瑕佸皢淇敼鏂瑰紡鏀规垚鐩存帴璋冪敤骞冲彴鐨勬帴鍙o紝鍥犱负鐜板湪鐨勪慨鏀规柟寮忔病鑳芥纭殑鏇存柊缂撳瓨 + /*UserInfo userInfo = new UserInfo(); + userInfo.id = userOid.trim(); + userInfo.pwd = password; + userInfo.pwdUpdateTime = System.currentTimeMillis(); + boolean updateBoolean = platformClientUtil.getFrameworkService().updateUser(userInfo, new UserEntityInfo(WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(), null)); + return updateBoolean;*/ + ThreeDES des = new ThreeDES();// 瀹炰緥鍖栦竴涓锟�? des.getKey("daliantan0v0");// 鐢熸垚瀵嗗寵 String encPassword = des.getEncString(password); - String sql = "update pluser set plpassword = '" + encPassword + "' where pluid = '" + userOid.trim() + "'"; + //淇敼瀵嗙爜鐨勫悓鏃堕渶瑕佸皢瀵嗙爜淇敼鏃堕棿涔熸洿鏂� + String sql = "update pluser set plpassword = '" + encPassword + "', plpwdupdatetime = TO_DATE('" + + Func.format(new Date(),"yyyy-MM-dd HH:mm:ss") +"','yyyy-MM-dd hh24:mi:ss') where pluid = '" + userOid.trim() + "'"; try { - platformClientUtil.getBOFactoryService().executeUpdateSql(sql); + return platformClientUtil.getBOFactoryService().executeUpdateSql(sql); } catch (PLException vciError) { throw WebUtil.getVciBaseException(vciError); } @@ -1017,40 +1112,46 @@ * @return */ @Override + @Transactional(rollbackFor = Exception.class) public boolean addUser(SmUserDTO smUserDTO) throws PLException { + //鍒ょ┖ VciBaseUtil.alertNotNull( smUserDTO,"娣诲姞鐨勭敤鎴峰璞�", - smUserDTO.getId(),"璐﹀彿", + smUserDTO.getId(),"鐢ㄦ埛鍚�", smUserDTO.getPassword(),"瀵嗙爜", smUserDTO.getConfirmPassword(),"纭瀵嗙爜", smUserDTO.getName(),"濮撳悕" ); - //纭瀵嗙爜 - String confirmPassword = smUserDTO.getConfirmPassword(); - //姣斿瀵嗙爜鏄槸鍚︿竴鑷� - if(!smUserDTO.getPassword().equals(confirmPassword)){ - throw new VciBaseException("涓ゆ瀵嗙爜涓嶄竴鑷达紝璇烽噸鏂板~鍐�!"); - } - //鍏堢敤鎴峰悕锛堣处鍙凤級鏌ラ噸 - SmUserVO dbSmUserVO = getUserByUserId(smUserDTO.getId()); - if(Func.isNotEmpty(dbSmUserVO) && Func.isNotBlank(dbSmUserVO.getOid())){ - throw new VciBaseException("璇ョ敤鎴峰悕鍦ㄧ郴缁熶腑宸茬粡瀛樺湪,璇蜂慨鏀�!"); - } - //瀵嗙爜鍔犲瘑 - ThreeDES des = new ThreeDES(); - des.getKey("daliantan0v0");// 鐢熸垚瀵嗗寵 - //绗簩娆D5鍔犲瘑 - String md5Password2 = des.getEncString(smUserDTO.getPassword()); + //鏍¢獙 + check(smUserDTO,true,false); //鐢熸垚瀛樺偍鐨凞O瀵硅薄 - smUserDTO.setOid(VciBaseUtil.getPk()); - smUserDTO.setPassword(md5Password2); - smUserDTO.setLockFlag("0"); - BusinessObject user = ClientServiceProvider.getBOFService().initBusinessObject("user"); - SmUserDO smUserDO = new SmUserDO(); - BeanUtil.convert(user,smUserDO); - UserInfo userInfo = new UserInfo(); - BeanUtil.convert(smUserDO,userInfo); - return platformClientUtil.getFrameworkService().saveOrUpdateUser(userInfo, null); + Date date = new Date(); + smUserDTO.setPwdUpdateTime(date); + smUserDTO.setStatus((short) 0); + smUserDTO.setCreateTime(date); + 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(loginUserId, ""); + String oid = platformClientUtil.getFrameworkService().saveUser(userInfo, userEntityInfo); + if (Func.isEmpty(oid)) { + return false; + } + if(Func.isNotBlank(smUserDTO.getPkDepartment())){ + //鎵ц淇濆瓨鐢ㄦ埛閮ㄩ棬鍏宠仈鍏崇郴 + orgDeptQueryService.saveUsersDept(new String[]{oid},smUserDTO.getPkDepartment()); + } + return true; } /** @@ -1059,34 +1160,121 @@ * @return */ @Override + @Transactional(rollbackFor = Exception.class) public boolean updateUser(SmUserDTO smUserDTO) throws PLException { - UserInfo userInfo = new UserInfo(); - BeanUtil.convert(smUserDTO,userInfo); - return platformClientUtil.getFrameworkService().updateUser(userInfo, null); + //鍒ょ┖ + VciBaseUtil.alertNotNull( + smUserDTO,"淇敼鐨勭敤鎴峰璞�", + smUserDTO.getOid(),"鐢ㄦ埛涓婚敭", + smUserDTO.getId(),"鐢ㄦ埛鍚�", + smUserDTO.getPassword(),"瀵嗙爜", + smUserDTO.getConfirmPassword(),"纭瀵嗙爜", + smUserDTO.getName(),"濮撳悕" + ); + //鏍¢獙 + check(smUserDTO,false,false); + //鏌ヨ鏁版嵁搴撲腑鐨� + SmUserVO dbSmUserVO = getUserByUserOid(smUserDTO.getOid()); + //鏍规嵁涓婚敭娌℃煡璇㈠埌浜嗙敤鎴� + if(Func.isEmpty(dbSmUserVO) || Func.isBlank(dbSmUserVO.getOid())){ + throw new PLException("500", new String[] { "褰撳墠淇敼鐨勭敤鎴蜂笉瀛樺湪"}); + } + 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 && !smUserDTO.getPkDepartment().equals(dbSmUserVO.getPkDepartment())){ + //鎵ц淇濆瓨鐢ㄦ埛閮ㄩ棬鍏宠仈鍏崇郴 + orgDeptQueryService.saveUsersDept(new String[]{dbSmUserVO.getOid()},smUserDTO.getPkDepartment()); + } + return updateBoolean; + } + + /** + * 妫�鏌ョ敤鎴蜂俊鎭槸鍚︾鍚堣鑼� + * @param smUserDTO + * @param isAdd 鏄惁鏂板 + * @param isImport 鏄惁瀵煎叆 + */ + private void check(SmUserDTO smUserDTO, boolean isAdd,boolean isImport){ + //瀵煎叆鐨勬病鏈夌‘璁ゅ瘑鐮� + if(!isImport && !smUserDTO.getPassword().equals(smUserDTO.getConfirmPassword())){ + throw new VciBaseException("瀵嗙爜鍜岀‘璁ゅ瘑鐮佷笉鐩哥瓑"); + } + if(smUserDTO.getId().getBytes().length > 128){ + throw new VciBaseException("鐢ㄦ埛鍚嶉暱搴﹁秴杩囦笂闄�"); + } + if(smUserDTO.getPassword().getBytes().length > 128){ + throw new VciBaseException("瀵嗙爜闀垮害瓒呰繃涓婇檺"); + } + if(smUserDTO.getName().getBytes().length > 64){ + throw new VciBaseException("濮撳悕闀垮害瓒呰繃涓婇檺"); + } + if (Func.isNotBlank(smUserDTO.getSpecialties()) && smUserDTO.getSpecialties().getBytes().length > 255){ + throw new VciBaseException("涓撲笟闀垮害瓒呰繃涓婇檺"); + } + if (Func.isNotBlank(smUserDTO.getEmail()) && smUserDTO.getEmail().getBytes().length > 128){ + throw new VciBaseException("鐢靛瓙閭闀垮害瓒呰繃涓婇檺"); + } + if (Func.isNotBlank(smUserDTO.getDescription()) && smUserDTO.getDescription().getBytes().length > 255 ){ + throw new VciBaseException("鎻忚堪闀垮害瓒呰繃涓婇檺"); + } + if (!smUserDTO.getId().matches("^[A-Za-z0-9_]+$")) { + throw new VciBaseException("鐢ㄦ埛鍚嶅繀椤绘槸鐢盇-Z a-z 0-9 _缁勬垚"); + } + if (Func.isNotBlank(smUserDTO.getEmail()) && !smUserDTO.getEmail().matches("^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$")){ + throw new VciBaseException("鐢靛瓙閭鏍煎紡閿欒"); + } + /*鏄柊澧炴墠鍋氱敤鎴峰悕鏌ラ噸澶勭悊锛屼慨鏀逛笉闇�瑕佹煡閲嶏紙涓�缁忓垱寤轰笉鍏佽淇敼鐢ㄦ埛鍚嶏級锛� + 瀵煎叆鐨勪篃涓嶉渶瑕佸湪杩欏効鏌ラ噸锛屽洜涓哄湪瀵煎叆閫昏緫閲岄潰闇�瑕佽繑鍥為噸澶嶇殑琛� + */ + if(isAdd && !isImport){ + //鏍规嵁鐢ㄦ埛鍚嶏紙璐﹀彿锛夋煡閲� + SmUserVO dbSmUserVO = getUserByUserId(smUserDTO.getId()); + if(Func.isNotEmpty(dbSmUserVO) && Func.isNotBlank(dbSmUserVO.getOid())){ + throw new VciBaseException("璇ョ敤鎴峰悕鍦ㄧ郴缁熶腑宸茬粡瀛樺湪,璇蜂慨鏀�!"); + } + } + //鏍规嵁褰撳墠鍒涘缓杩欎釜鐢ㄦ埛鐨勪汉鎵�缁戝畾瀵嗙爜绛栫暐鏉ヨ繘琛屽瘑鐮佹牎楠� + try { + String userId = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(); + String error = platformClientUtil.getFrameworkService().checkPasswordStrategyByUserId(userId, smUserDTO.getPassword(),null); + if (!StringUtils.isBlank(error)) { + throw new VciBaseException("褰撳墠璁剧疆鐨勫瘑鐮侊紝瀵嗙爜绛栫暐鏍¢獙鏈�氳繃"); + } + } catch (PLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + throw new VciBaseException("妫�鏌ュ瘑鐮佺瓥鐣ョ鍚堟儏鍐靛け璐ワ紒2"); + } } /*** - * 鐢ㄦ埛浠庡鎴风瀵硅薄鍒癱orba瀵硅薄 - * + * 鐢ㄦ埛浠嶥TO瀵硅薄鍒癱orba瀵硅薄 * @param user * @return */ - public UserInfo changeUserObjectToUserInfo(UserObject user) { + public UserInfo changeSmUserDTOToUserInfo(SmUserDTO user) { UserInfo userInfo = new UserInfo(); - userInfo.id = user.getId() == null ? "" : user.getId(); - userInfo.userName = user.getUserName() == null ? "" : user.getUserName(); - userInfo.pwd = user.getPwd() == null ? "" : user.getPwd(); - userInfo.trueName = user.getTrueName() == null ? "" : user.getTrueName(); + userInfo.id = user.getOid() == null ? "" : user.getOid(); + userInfo.userName = user.getId() == null ? "" : user.getId(); + userInfo.pwd = user.getPassword() == null ? "" : user.getPassword(); + userInfo.trueName = user.getName() == null ? "" : user.getName(); userInfo.specialties = user.getSpecialties() == null ? "" : user.getSpecialties(); userInfo.email = user.getEmail() == null ? "" : user.getEmail(); - userInfo.desc = user.getDesc() == null ? "" : user.getDesc(); + userInfo.desc = user.getDescription() == null ? "" : user.getDescription(); userInfo.userType = user.getUserType(); userInfo.status = user.getStatus(); - userInfo.createTime = user.getCreateTime(); - userInfo.createUser = user.getCreateUser() == null ? "" : user.getCreateUser(); - userInfo.updateTime = user.getUpdateTime(); - userInfo.updateUser = user.getUpdateUser() == null ? "" : user.getUpdateUser(); - userInfo.pwdUpdateTime = user.getPwdUpdateTime(); + userInfo.createTime = user.getCreateTime().getTime(); + userInfo.createUser = user.getCreator() == null ? "" : user.getCreator(); + userInfo.updateTime = System.currentTimeMillis(); + userInfo.updateUser = user.getLastModifier() == null ? "" : user.getLastModifier(); + userInfo.pwdUpdateTime = user.getPwdUpdateTime().getTime(); userInfo.grantor = user.getGrantor() == null ? "" : user.getGrantor(); userInfo.isDeptLeader = user.getIsDeptLeader() == null ? "0" : user.getIsDeptLeader(); return userInfo; @@ -1098,9 +1286,14 @@ * @return */ @Override + @Transactional(rollbackFor = Exception.class) public boolean deleteUser(String[] ids) throws PLException { - VciBaseUtil.alertNotNull(ids,"寰呭垹闄ょ殑鐢ㄦ埛id鍒楄〃涓嶈兘涓虹┖锛�"); - return platformClientUtil.getFrameworkService().deleteUser(ids, null); + VciBaseUtil.alertNotNull(ids,"瑕佸垹闄ょ殑鐢ㄦ埛涓婚敭"); + //璋冪敤platformClientUtil鐨勫垹闄ょ敤鎴风殑鏂规硶锛屼細涓�璧峰垹闄ゆ帀鍏峰鍏宠仈鍏崇郴鐨勪竴浜涗俊鎭紝濡傞儴闂� + return platformClientUtil.getFrameworkService().deleteUser( + ids, + new UserEntityInfo(WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(),null) + ); } /** @@ -1110,9 +1303,165 @@ * @return */ @Override - public boolean disableOrEnableUsers(String[] ids, boolean flag) throws PLException { + @Transactional(rollbackFor = Exception.class) + public boolean stopUsers(String[] ids, boolean flag) throws PLException { VciBaseUtil.alertNotNull(ids,"鍋滅敤/鍚敤鐨勭敤鎴穒d鍒楄〃"); return platformClientUtil.getFrameworkService().stopUsers(ids, flag,null); } + /** + * 涓嬭浇瀵煎叆浜哄憳鐨別xcel妯℃澘銆� + * @param downloadFileName 涓嬭浇鏃剁晫闈紶杩囨潵鎸囧畾鏂囦欢鍚嶇殑 + * @return 鏂囦欢鍦ㄦ湰鍦扮殑鍏ㄨ矾寰� + * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮枃浠跺嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父 + */ + @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("璐﹀彿", "瀵嗙爜", "濮撳悕", "鐢靛瓙閭", "涓撲笟", "鎻忚堪", "閮ㄩ棬(涓婁笅绾ч儴闂ㄤ箣闂翠互鍙嶆枩鏉犻殧寮�(/))")); + //鑾峰彇鏄惁瀵煎嚭瀵嗙骇閰嶇疆椤� + String flag = ConfigCorbaReader.getConfigValue("exportSecretGrade"); + if (flag != null && flag.equalsIgnoreCase("true")) { + columns = new ArrayList<>(Arrays.asList("璐﹀彿", "瀵嗙爜", "濮撳悕", "鐢靛瓙閭", "涓撲笟", "鎻忚堪", "閮ㄩ棬(涓婁笅绾ч儴闂ㄤ箣闂翠互鍙嶆枩鏉犻殧寮�(/))" ,"瀵嗙骇")); + } + //璁剧疆蹇呭~鍒� + ColumnNameisRed.clear(); + ColumnNameisRed.add(0); + ColumnNameisRed.add(1); + ColumnNameisRed.add(2); + //鍐檈xcel + String excelPath = LocalFileUtil.getDefaultTempFolder() + File.separator + downloadFileName + ".xls"; + try { + new File(excelPath).createNewFile(); + } catch (Throwable e) { + throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{excelPath}, e); + } + //璁剧疆鍒� + List<WriteExcelData> excelDataList = new ArrayList<>(); + for (int index = 0; index < columns.size(); index++) { + //鍒ゆ柇鏄惁涓哄繀濉垪锛岀粰蹇呭~鍒楄缃鑹� + if(ColumnNameisRed.contains(index)){ + WriteExcelData excelData = new WriteExcelData(0, index, columns.get(index)); + excelData.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex())); + excelDataList.add(excelData); + }else{ + excelDataList.add(new WriteExcelData(0,index, columns.get(index))); + } + } + WriteExcelOption excelOption = new WriteExcelOption(excelDataList); + ExcelUtil.writeDataToFile(excelPath, excelOption); + return excelPath; + } + + /** + * 瀵煎叆鎴愬憳 + * @param file + * @return + * @throws VciBaseException + */ + @Override + public BaseResult importUser(File file) throws Exception { + VciBaseUtil.alertNotNull(file,"excel鏂囦欢"); + if(!file.exists()){ + throw new VciBaseException("瀵煎叆鐨別xcel鏂囦欢涓嶅瓨鍦�,{0}",new String[]{file.getPath()}); + } + try{ + //1銆佽鍙杄xcel涓殑鏁版嵁锛岀粍鎴愬璞� + ReadExcelOption excelOption = new ReadExcelOption(); + //褰撳墠鐧诲綍鐨勭敤鎴疯处鍙� + String loginUserId = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(); + UserEntityInfo userEntityInfo = new UserEntityInfo(loginUserId,null); + //鏄惁瀵煎叆瀵嗙骇閰嶇疆 + boolean exportSecretGrade = Boolean.parseBoolean(ConfigCorbaReader.getConfigValue("exportSecretGrade")); + List<SmUserPO> poList = ExcelUtil.readDataObjectFromExcel(file, SmUserPO.class,excelOption,(value, po, fieldName)->{ + Integer secretValue = UserSecretEnum.getSecretValueByText(po.getSecretGradeText()); + //鏄惁蹇呴』瀵煎叆瀵嗙骇 + if(exportSecretGrade){ + if(secretValue == null){ + throw new VciBaseException("浼犲叆鐨勫瘑绾т笉绗﹀悎瑙勫垯!"); + } + po.setSecretGrade(secretValue); + } + }); + //鍘婚櫎閮芥槸绌虹殑鎯呭喌 + if(CollectionUtils.isEmpty(poList)){ + return BaseResult.fail(ExcelLangCodeConstant.IMPORT_CONTENT_NULL,new String[]{}); + } + //鏁版嵁搴撴煡璇㈡槸鍚︽湁宸插瓨鍦ㄧ殑鐢ㄦ埛锛屾柟渚垮悗缁仛鍒ら噸澶勭悊 + List<SmUserVO> smUserVOList = this.listUserByUserIds(poList.stream().map(SmUserPO::getId).collect(Collectors.toSet())); + List<String> repeatUserId = new ArrayList<>(); + if(Func.isNotEmpty(smUserVOList)){ + repeatUserId = smUserVOList.stream().map(SmUserVO::getId).collect(Collectors.toList()); + } + //褰撳墠excel涓槸鍚﹂噸澶嶇敤鐨勫垽閲峂ap:锛坘ey锛氳处鍙凤紝value锛氳鍙凤級 + Map<String, String> excelReapeat = new HashMap<>(); + //鍏堣幏鍙栧叏閮ㄩ儴闂ㄥ悕绉扮殑鐖跺瓙瀵瑰簲鍏崇郴锛歬ey涓洪儴闂ㄥ瓙鐖剁骇鍚嶇О璺緞锛寁alue涓洪儴闂ㄤ俊鎭� + List<OrgDepartmentVO> orgDepartmentVOList = orgDeptQueryService.getDeptAllFullName(); + Map<String, OrgDepartmentVO> deptVOMap = orgDepartmentVOList.stream().collect(Collectors.toMap(OrgDepartmentVO::getFullDeptNamePath, s->s)); + //Map<String,OrgDepartmentVO> deptVOMap = orgDeptQueryService.getDeptAllTreeMap(); + //鍒ゆ柇蹇呭~灞炴�ф槸鍚︿负绌猴紝鐢ㄦ埛鏄惁宸插瓨鍦紝浠ュ強閮ㄩ棬鏄惁濉敊绛夋牎楠岄�昏緫 + List<String> finalRepeatUserId = repeatUserId; + poList.stream().forEach(smUserPO -> { + //鍏堝蹇呭~灞炴�у垽绌哄鐞� + if(Func.isBlank(smUserPO.getId())){ + throw new VciBaseException("绗��"+smUserPO.getRowIndex()+"銆戣锛寀sernameerror"); + }else if(Func.isBlank(smUserPO.getName())){ + throw new VciBaseException("绗��"+smUserPO.getRowIndex()+"銆戣锛宯ameerror"); + }else if(Func.isBlank(smUserPO.getPassword())){ + throw new VciBaseException("绗��"+smUserPO.getRowIndex()+"銆戣锛宲assworderror"); + }else if (Func.isNotEmpty(smUserVOList) && finalRepeatUserId.contains(smUserPO.getId())){//2銆佸垽鏂敤鎴峰悕鏄惁閲嶅 + throw new VciBaseException("绗��"+smUserPO.getRowIndex()+"銆戣锛岀敤鎴峰悕鍦ㄧ郴缁熶腑宸茬粡瀛樺湪,璇蜂慨鏀�!"); + }else if(Func.isNotBlank(smUserPO.getPkDepartmentName())){//澶勭悊濉啓浜嗛儴闂ㄧ殑鏁版嵁琛� + OrgDepartmentVO orgDepartmentVO = deptVOMap.get(smUserPO.getPkDepartmentName()); + //閮ㄩ棬涓虹┖灏辫鏄庣敤鎴峰~鍐欓敊璇� + if(Func.isEmpty(orgDepartmentVO) && Func.isBlank(orgDepartmentVO.getOid())){ + throw new VciBaseException("绗��"+smUserPO.getRowIndex()+"銆戣鏁版嵁锛岄儴闂ㄨ缃敊璇紝鍘熷洜锛氭湭鏌ヨ鍒拌璺緞涓嬬殑閮ㄩ棬"); + } + }else if(excelReapeat.containsKey(smUserPO.getId())){//琛ㄦ牸涓垽閲� + throw new VciBaseException("绗��"+excelReapeat.get(smUserPO.getId())+"銆戣鍜岀銆�"+smUserPO.getRowIndex()+"銆戣鏁版嵁锛岃处鍙烽噸澶�"); + } + excelReapeat.put(smUserPO.getId(),smUserPO.getRowIndex()); + }); + //淇濆瓨閫昏緫 + poList.stream().forEach(smUserPO->{ + SmUserDTO smUserDTO = new SmUserDTO(); + BeanUtil.convert(smUserPO,smUserDTO); + //鐢ㄦ埛淇℃伅鏄惁瑙勮寖妫�鏌� + this.check(smUserDTO,true,true); + //鐢熸垚瀛樺偍鐨凞O瀵硅薄 + Date date = new Date(); + smUserDTO.setPwdUpdateTime(date); + smUserDTO.setStatus((short) 0); + smUserDTO.setCreateTime(date); + smUserDTO.setCreator(loginUserId); + smUserDTO.setLastModifier(loginUserId); + //淇濆瓨鐢ㄦ埛 + String oid = null; + try { + //淇濆瓨鐢ㄦ埛鑾峰彇鍒扮敤鎴穙id + oid = platformClientUtil.getFrameworkService().saveUser(changeSmUserDTOToUserInfo(smUserDTO), userEntityInfo); + //淇濆瓨鐢ㄦ埛閮ㄩ棬鍏宠仈鍏崇郴 + if(Func.isNotBlank(oid) && Func.isNotBlank(smUserDTO.getPkDepartmentName())){ + orgDeptQueryService.saveUsersDept( + new String[]{oid}, + deptVOMap.get(smUserDTO.getPkDepartmentName()).getOid() + ); + } + } catch (PLException e) { + e.printStackTrace(); + throw new VciBaseException("鎵ц鍒扮銆�"+smUserPO.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("鐢ㄦ埛瀵煎叆鎴愬姛锛�"); + } + } -- Gitblit v1.9.3