Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciBaseUtil.java
@@ -1,6 +1,8 @@ package com.vci.starter.web.util; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.lang.Snowflake; import cn.hutool.core.util.IdUtil; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; import com.vci.common.exception.VciExceptionTool; @@ -81,6 +83,19 @@ } /** * éªè±ID * @return */ public static String getSnowflakePk() { return String.valueOf(getSnowflakePk(1,1)); } public static Long getSnowflakePk(long workerId,long dataCenterId){ Snowflake snowflake = IdUtil.getSnowflake(workerId,dataCenterId); return snowflake.nextId(); } /** * å符串转æ°å * @param string å符串 * @return æ°å Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/OrgDeptQueryServiceI.java
@@ -4,11 +4,9 @@ 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; 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; @@ -35,7 +33,7 @@ * @return é¨é¨çæ¾ç¤ºå¯¹è±¡ï¼å¦æé¨é¨ä¸åå¨åè¿ånullï¼ä¸ä¼æåºå¼å¸¸ * @throws VciBaseException åæ°ä¸ºç©ºæè æ°æ®åºåå¨é®é¢çæ¶å伿åºå¼å¸¸ */ OrgDepartmentVO getDeptByDeptPOidAndCondition(String parentDeptOid,Map<String,String> conditionMap) throws VciBaseException; List<OrgDepartmentVO> getDeptByDeptPOidAndCondition(String parentDeptOid,Map<String,String> conditionMap) throws VciBaseException; /** * æ¹éè·åé¨é¨çä¿¡æ¯ ï¼æ ¹æ®é¨é¨ä¸»é®ï¼ @@ -90,9 +88,17 @@ * æ¹éæ ¹æ®ç¨æ·ç䏻鮿¥è·åé¨é¨ * @param userOidCollection ç¨æ·ä¸»é®éå * @param queryMap æ¥è¯¢æ¡ä»¶ï¼å¦æéè¦ä½¿ç¨ç¨æ·ç屿§æ¥æ¥è¯¢å¯ä»¥ä½¿ç¨pkUser.xxxx * @return é¨é¨çæ¾ç¤ºå¯¹è±¡ï¼keyæ¯ç¨æ·ä¸»é®,valueæ¯è¿ä¸ªç¨æ·å ³èçé¨é¨ * @return é¨é¨çæ¾ç¤ºå¯¹è±¡ï¼keyæ¯ç¨æ·ä¸»é®,valueæ¯å ³èçé¨é¨ */ Map<String,List<OrgDepartmentVO>> batchListDeptByUserOids(Collection<String> userOidCollection, Map<String, String> queryMap); /** * æ¹éæ ¹æ®ç¨æ·ç䏻鮿¥è·åé¨é¨åç§°ï¼/é´éæ¹å¼ï¼ * @param userOidCollection ç¨æ·ä¸»é®éå * @param queryMap æ¥è¯¢æ¡ä»¶ï¼å¦æéè¦ä½¿ç¨ç¨æ·ç屿§æ¥æ¥è¯¢å¯ä»¥ä½¿ç¨pkUser.xxxx * @return é¨é¨çæ¾ç¤ºå¯¹è±¡ï¼keyæ¯ç¨æ·ä¸»é®,valueæ¯å ³èçé¨é¨ï¼key:å ³èçé¨é¨oid,value:å å«ç¶èç¹å¦å½åé¨é¨ä¸ºäººåèµæºé¨åå¼ä¸ºï¼550/人åèµæºé¨ï¼ */ Map<String,Map<String,String>> batchMapDeptNameByUserOids(Collection<String> userOidCollection, Map<String, String> queryMap); /** * è·åæä¸ªé¨é¨çç´å±ä¸çº§é¨é¨ @@ -159,4 +165,19 @@ */ Map<String,OrgDepartmentVO> getDeptAllTreeMap(); /** * ä¸è½½å¯¼å ¥é¨é¨çexcel模æ¿ã * @param downloadFileName * @return */ String downloadImportTemplate(String downloadFileName); /** * å¯¼å ¥é¨é¨ * @param file * @return * @throws VciBaseException */ BaseResult importDept(File file) throws VciBaseException; } Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/SmRoleQueryServiceI.java
@@ -182,11 +182,20 @@ BaseResult importRole(File file) throws VciBaseException; /** * ä¿åç¨æ·è§è²å ³èå ³ç³» * æå管çåé è§è²è°ç¨ï¼ä¿åç¨æ·è§è²å ³èå ³ç³» * @param userOids * @param roleIds * @return */ boolean saveRights(String[] userOids, String[] roleIds) throws PLException; /** * è§è²ç®¡çåé æåæ¥å£è°ç¨ * @param userOids * @param roleId * @return * @throws PLException */ boolean saveRight(String[] userOids, String roleId) throws PLException; } Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/OrgDeptQueryServiceImpl.java
@@ -8,26 +8,44 @@ import com.vci.frameworkcore.model.dto.OrgDepartmentDTO; import com.vci.frameworkcore.lcstatuspck.FrameworkDataLCStatus; import com.vci.frameworkcore.model.OrgDeptForPlatform1; import com.vci.frameworkcore.model.dto.SmUserDTO; import com.vci.frameworkcore.model.po.OrgDeptPO; import com.vci.frameworkcore.model.po.SmUserPO; import com.vci.frameworkcore.pagemodel.OrgDepartmentVO; 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.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.revision.bo.TreeWrapperOptions; import com.vci.starter.revision.service.RevisionModelUtil; 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.*; import com.vci.starter.web.util.BeanUtil; import com.vci.starter.web.util.VciBaseUtil; import com.vci.starter.web.util.*; import com.vci.starter.web.wrapper.VciQueryWrapperForDO; 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 org.springframework.web.util.WebUtils; import java.io.File; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -59,6 +77,16 @@ private RevisionModelUtil revisionModelUtil; /** * å¿ å¡«å */ private ArrayList<Integer> ColumnNameisRed = new ArrayList<Integer>(); /** * æ¥å¿ */ private Logger logger = LoggerFactory.getLogger(getClass()); /** * æ ¹æ®é¨é¨ä¸»é®è·åé¨é¨çä¿¡æ¯ * @param deptOid é¨é¨ä¸»é® * @return é¨é¨çæ¾ç¤ºå¯¹è±¡ï¼å¦æé¨é¨ä¸åå¨åè¿ånullï¼ä¸ä¼æåºå¼å¸¸ @@ -69,8 +97,14 @@ if(StringUtils.isBlank(deptOid)){ return null; } OrgDeptForPlatform1 deptForPlatform1 = boService.selectByOid(deptOid, OrgDeptForPlatform1.class); return deptDO2VO(deptForPlatform1); Map<String, String> conditionMap = new HashMap<>(); conditionMap.put("pluid",deptOid); VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(conditionMap,OrgDeptForPlatform1.class); List<OrgDeptForPlatform1> deptForPlatform1s = boService.selectByQueryWrapper(queryWrapper, OrgDeptForPlatform1.class); if(Func.isEmpty(deptForPlatform1s)){ return null; } return deptDO2VO(deptForPlatform1s.get(0)); } /** @@ -81,11 +115,11 @@ * @throws VciBaseException åæ°ä¸ºç©ºæè æ°æ®åºåå¨é®é¢çæ¶å伿åºå¼å¸¸ */ @Override public OrgDepartmentVO getDeptByDeptPOidAndCondition(String parentDeptOid,Map<String,String> conditionMap) throws VciBaseException { public List<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); VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(conditionMap,OrgDeptForPlatform1.class); //ç¶ä¸»é®ä¸ºç©ºæ¥é¡¶å± if(Func.isBlank(parentDeptOid)){ queryWrapper.isNull("plparentuid"); @@ -96,7 +130,7 @@ if(Func.isEmpty(roleForPlatform1s)){ return null; } return deptDO2VO(roleForPlatform1s.get(0)); return deptDO2VOs(roleForPlatform1s); } /** @@ -121,18 +155,23 @@ OrgDepartmentVO departmentVO = new OrgDepartmentVO(); if(deptForPlatform1!=null){ departmentVO.setOid(deptForPlatform1.getPluid()); // é¤é¨é¨ä¸»é®å¤çå¯ä¸æ è¯ï¼é¿åº¦ä¸ºDept:+8ä½å¯éè¿è¯¥åæ°åæ¨åé¨é¨ä¸»é®çhashç¼ç departmentVO.setUniqueId("Dept:"+Func.oidEnHash(deptForPlatform1.getPluid())); departmentVO.setId(deptForPlatform1.getPlnum()); departmentVO.setName(deptForPlatform1.getPlname()); departmentVO.setStatus(deptForPlatform1.getPlstatus()); if(0 == deptForPlatform1.getPlstatus()){ departmentVO.setLcStatus(FrameworkDataLCStatus.ENABLED.getValue()); departmentVO.setStatusText(FrameworkDataLCStatus.ENABLED.getValue()); }else{ departmentVO.setLcStatus(FrameworkDataLCStatus.DISABLED.getValue()); departmentVO.setStatusText(FrameworkDataLCStatus.DISABLED.getValue()); } departmentVO.setSpecialties(deptForPlatform1.getPlspecialties()); departmentVO.setCode(deptForPlatform1.getPlcode()); departmentVO.setPkFatherDepartment(deptForPlatform1.getPlparentuid()); departmentVO.setDescription(deptForPlatform1.getPldesc()); departmentVO.setCheckInTime(deptForPlatform1.getPlcreatetime()); departmentVO.setCreateTime(new Date(deptForPlatform1.getPlcreatetime())); departmentVO.setCreator(deptForPlatform1.getPlcreateuser()); departmentVO.setLastModifyTime(deptForPlatform1.getPlupdatetime()); departmentVO.setLastModifyTime(new Date(deptForPlatform1.getPlupdatetime())); departmentVO.setLastModifier(deptForPlatform1.getPlupdateuser()); } return departmentVO; @@ -312,7 +351,7 @@ * æ¹éæ ¹æ®ç¨æ·ç䏻鮿¥è·åé¨é¨ * @param userOidCollection ç¨æ·ä¸»é®éå * @param queryMap æ¥è¯¢æ¡ä»¶ï¼å¦æéè¦ä½¿ç¨ç¨æ·ç屿§æ¥æ¥è¯¢å¯ä»¥ä½¿ç¨pkUser.xxxx * @return é¨é¨çæ¾ç¤ºå¯¹è±¡ï¼keyæ¯ç¨æ·ä¸»é®,valueæ¯è¿ä¸ªç¨æ·å ³èçé¨é¨ * @return é¨é¨çæ¾ç¤ºå¯¹è±¡ï¼keyæ¯ç¨æ·ä¸»é®,valueæ¯å ³èçé¨é¨ */ @Override public Map<String, List<OrgDepartmentVO>> batchListDeptByUserOids( @@ -342,7 +381,6 @@ //è¿å¿åºè¯¥å¯¹deptVOListå䏿¬¡å»éå¤çï¼å 为è¯å®ä¼æéå¤çé¨é¨è¢«æ¥åºæ¥ Map<String, OrgDepartmentVO> deptVOMap = deptVOList.stream() .collect(Collectors.toMap(OrgDepartmentVO::getOid, Function.identity(), (existing, replacement) -> existing)); //Map<String, OrgDepartmentVO> deptVOMap = deptVOList.stream().distinct().collect(Collectors.toMap(s -> s.getOid(), t -> t)); Map<String, List<OrgDepartmentVO>> userDeptVOMap = new HashMap<>(); userDeptOidMap.forEach((userOid,deptOids)->{ List<OrgDepartmentVO> deptVOS = new ArrayList<>(); @@ -356,6 +394,62 @@ return userDeptVOMap; } return new HashMap<>(); } /** * æ¹éæ ¹æ®ç¨æ·ç䏻鮿¥è·åé¨é¨åç§°ï¼/é´éæ¹å¼ï¼ * @param userOidCollection ç¨æ·ä¸»é®éå * @param queryMap æ¥è¯¢æ¡ä»¶ï¼å¦æéè¦ä½¿ç¨ç¨æ·ç屿§æ¥æ¥è¯¢å¯ä»¥ä½¿ç¨pkUser.xxxx * @return é¨é¨çæ¾ç¤ºå¯¹è±¡ï¼keyæ¯ç¨æ·ä¸»é®,valueæ¯å ³èçé¨é¨ï¼å å«ç¶èç¹å¦å½åé¨é¨ä¸ºäººåèµæºé¨åå¼ä¸ºï¼550/人åèµæºé¨ï¼ */ @Override public Map<String,Map<String,String>> batchMapDeptNameByUserOids(Collection<String> userOidCollection, Map<String, String> queryMap) { if(CollectionUtils.isEmpty(userOidCollection)){ return new HashMap<>(); } Map<String,Map<String,String>> deptOidNameMap = new HashMap<>(); Map<String,Map<String,String>> userDeptOidMap = new HashMap<>(); WebUtil.switchCollectionForOracleIn(userOidCollection).stream().forEach(userOids->{ //1ãè¦å æ ¹æ®ç¨æ·ä¸»é®è·åå°å ³èçé¨é¨ä¸»é® String sql = "select pluseruid,pldeptuid from pluserdept where pluseruid in (" + WebUtil.toInSql(userOids.toArray(new String[0])) + ")"; List<BusinessObject> cbos = boService.queryBySql(sql, null); if(!CollectionUtils.isEmpty(cbos)){ cbos.stream().forEach(cbo->{ //è§è²ä¸»é® String userOid = ObjectTool.getNewBOAttributeValue(cbo,"pluseruid"); //é¨é¨ä¸»é® String deptUid = ObjectTool.getNewBOAttributeValue(cbo, "pldeptuid"); //2ãç¶åæ ¹æ®é¨é¨ä¸»é®è·åå°ç±é¨é¨åç§°/ç»æçå¼ //é¿å 夿¬¡æ¥è¯¢ï¼æè å¾ªç¯æ¥è¯¢ if(deptOidNameMap.containsKey(deptUid)){ userDeptOidMap.put(userOid,deptOidNameMap.get(deptUid)); }else { if(Func.isNotEmpty(deptUid)){ //2.1ãæ¥è¯¢é¨é¨oidï¼å½åé¨é¨å å«ç¶é¨é¨ String queryDeptSql = "select pluid,plname from pldept START with pluid = '" + deptUid + "' connect by prior plparentuid = pluid"; List<BusinessObject> cboDepts = boService.queryBySql(queryDeptSql, null); if(!CollectionUtils.isEmpty(cboDepts)){ StringBuilder sb = new StringBuilder(); for (int i = cboDepts.size()-1; i >=0; i--) { String deptName = ObjectTool.getNewBOAttributeValue(cboDepts.get(i),"plname"); sb.append(deptName); sb.append("/"); } //2.2ãé¿å åä¸é¨é¨å¤æ¬¡æ¥è¯¢ï¼è¿éåå¨å¨ä¸ä¸ªå ¬å ±éåä¸ï¼ä¾¿äºéå¤ä½¿ç¨ //å 餿åä¸ä¸ªææ sb.deleteCharAt(sb.length() - 1); Map<String,String> tempMap = new HashMap<>(); tempMap.put(deptUid,sb.toString()); deptOidNameMap.put(deptUid,tempMap); userDeptOidMap.put(userOid,tempMap); } } } }); } }); return userDeptOidMap; } /** @@ -400,6 +494,7 @@ public List<Tree> refTreeDept(TreeQueryObject treeQueryObject) { String pkFatherDepartmment=treeQueryObject.getParentOid(); Map<String, String> conditionMap = treeQueryObject.getConditionMap(); Map<String, String> extandParamsMap = treeQueryObject.getExtandParamsMap(); if(conditionMap==null){ conditionMap=new HashMap<String, String>(); } @@ -414,9 +509,27 @@ TreeWrapperOptions treeWrapperOptions = new TreeWrapperOptions(); BeanUtil.convert(treeQueryObject,treeWrapperOptions); treeWrapperOptions.setParentFieldName("pkFatherDepartment"); return revisionModelUtil.doList2Trees(orgDepartmentVOList,treeWrapperOptions,dept->{ List<Tree> trees = revisionModelUtil.doList2Trees(orgDepartmentVOList, treeWrapperOptions, dept -> { return dept.getId() + " " + dept.getName() + (FrameworkDataLCStatus.DISABLED.getValue().equals(dept.getLcStatus())?"ãåç¨ã":""); }); //extandParamsMap䏿·»å "showAllDepartmentNode"为"true"æ¶,å¹¶ä¸parentOid为空ï¼è¿åç»æä¸ä¼å å«âææé¨é¨âè¿ä¸ªèç¹ if(Func.isBlank(pkFatherDepartmment) && (Func.isNotEmpty(extandParamsMap) && Boolean.parseBoolean(extandParamsMap.getOrDefault("showAllDepartmentNode","false")))){ List<Tree> treeList = new ArrayList<>(); Tree tree = new Tree(); tree.setLeaf(false); tree.setParentId(null); //没æå®é ä½ç¨åªæ¯çé¢ä¸æ¸²æä½¿ç¨ tree.setOid(UUID.randomUUID().toString()); tree.setParentName(null); Map<String, String> map = new HashMap<>(); map.put("name","ææé¨é¨"); map.put("ALLDept","ALLDept"); tree.setAttributes(map); tree.setChildren(trees); treeList.add(tree); return treeList; } return trees; } /** @@ -476,7 +589,7 @@ tempList.removeAll(repeatUserOidList); userOIds = tempList.toArray(new String[tempList.size()]); if(Func.isNotEmpty(userOIds)){ platformClientUtil.getFrameworkService().saveUserDept(userOIds, deptId,null); platformClientUtil.getFrameworkService().saveUserDept(userOIds, deptId,new UserEntityInfo(WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(),null)); } return true; } @@ -492,16 +605,18 @@ VciBaseUtil.alertNotNull( orgDepartmentDTO,"æ·»å çé¨é¨å¯¹è±¡", orgDepartmentDTO.getName(),"é¨é¨å"); //é¨é¨åå¤é //é¨é¨ååç¼å·å¤é Map<String, String> conditionMap = new HashMap<>(); conditionMap.put("plname",orgDepartmentDTO.getName()); conditionMap.put("plname",QueryOptionConstant.OR + orgDepartmentDTO.getName()); if(Func.isNotBlank(orgDepartmentDTO.getId())){ conditionMap.put("plnum",QueryOptionConstant.OR + orgDepartmentDTO.getId()); OrgDepartmentVO departmentVO = getDeptByDeptPOidAndCondition(orgDepartmentDTO.getPkFatherDepartment(), conditionMap); if(Func.isNotEmpty(departmentVO)){ } List<OrgDepartmentVO> departmentVOS = getDeptByDeptPOidAndCondition(orgDepartmentDTO.getPkFatherDepartment(), conditionMap); if(Func.isNotEmpty(departmentVOS)){ throw new VciBaseException("åä¸ç¶èç¹ä¸è¯¥é¨é¨åç§°æç¼å·å·²ç»åå¨,请修æ¹!"); } //SessionInfo loginUser = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); String userId = "developer";//loginUser.getUserId(); SessionInfo loginUser = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); String userId = loginUser.getUserId(); //çæåå¨çcorba对象 orgDepartmentDTO.setCreateTime(new Date()); @@ -531,18 +646,37 @@ 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); OrgDepartmentVO dbDepartmentVO = getDeptByDeptOid(orgDepartmentDTO.getOid()); if(Func.isEmpty(dbDepartmentVO)){ throw new VciBaseException("ä¿®æ¹çé¨é¨ä¸åå¨ï¼"); } //é¨é¨ååç¼å·å¤é Map<String, String> conditionMap = new HashMap<>(); conditionMap.put("plname",QueryOptionConstant.OR + orgDepartmentDTO.getName()); if(Func.isNotBlank(orgDepartmentDTO.getId())){ conditionMap.put("plnum",QueryOptionConstant.OR + orgDepartmentDTO.getId()); } List<OrgDepartmentVO> repeatDepartmentVOS = getDeptByDeptPOidAndCondition(orgDepartmentDTO.getPkFatherDepartment(), conditionMap); repeatDepartmentVOS = repeatDepartmentVOS.stream().filter(item -> { if((item.getName().equals(orgDepartmentDTO.getName()) || item.getId().equals(orgDepartmentDTO.getId())) && !item.getOid().equals(orgDepartmentDTO.getOid())){ return true; } return false; }).collect(Collectors.toList()); if(Func.isNotEmpty(repeatDepartmentVOS) ){ throw new VciBaseException("åä¸ç¶èç¹ä¸è¯¥é¨é¨åç§°æç¼å·å·²ç»åå¨,请修æ¹!"); } OrgDepartmentDTO departmentDTO = new OrgDepartmentDTO(); BeanUtil.convert(dbDepartmentVO,departmentDTO); departmentDTO.setCode(orgDepartmentDTO.getCode()); departmentDTO.setId(orgDepartmentDTO.getId()); departmentDTO.setSpecialties(orgDepartmentDTO.getSpecialties()); departmentDTO.setDescription(orgDepartmentDTO.getDescription()); departmentDTO.setName(orgDepartmentDTO.getName()); String loginUserId = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(); orgDepartmentDTO.setLastModifier(loginUserId); DeptInfo deptInfo = changeOrgDeptDTOToDeptInfo(departmentDTO); boolean updateBoolean = platformClientUtil.getFrameworkService().updateDepartment(deptInfo, new UserEntityInfo(loginUserId, null)); return updateBoolean; } @@ -596,6 +730,176 @@ return stringOrgDepartmentVOMap; } /** * ä¸è½½å¯¼å ¥é¨é¨çexcel模æ¿ã * @param downloadFileName * @return */ @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("ID", "åç§°", "ç¼å·", "代å·", "ä¸ä¸", "ç¶IDï¼é¨é¨å¯ä¸æ è¯IDï¼", "æè¿°")); //è®¾ç½®å¿ å¡«å ColumnNameisRed.clear(); ColumnNameisRed.add(0); ColumnNameisRed.add(1); //åexcel 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 importDept(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(); //å½åç»å½çç¨æ·è´¦å· //String loginUserId = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(); String loginUserId = "developer"; UserEntityInfo userEntityInfo = new UserEntityInfo(loginUserId,null); List<OrgDeptPO> poList = ExcelUtil.readDataObjectFromExcel(file, OrgDeptPO.class,excelOption,(value, po, fieldName)->{}); //å»é¤é½æ¯ç©ºçæ åµ if(CollectionUtils.isEmpty(poList)){ return BaseResult.fail(ExcelLangCodeConstant.IMPORT_CONTENT_NULL,new String[]{}); } /*é¨é¨å¯¼å ¥å 个æ¯è¾éè¦çæ æ¯ï¼ 1ãå½åå¯¼å ¥çæ°æ®æ¯ä¸ä¸ªé¨é¨æ ç»æ(è¦å¤æç¨æ·æè¾çIDæ¯å¦åå¨éå¤ï¼è¾äºå°±è¦å¤ææ¯å¦å¨å½åè¡¨æ ¼ä¸éå¤ï¼ å¹¶ä¸ä¿åæ¶ä¸è½ä½¿ç¨ç¨æ·æè¾çIDï¼è¦æ ¹æ®æè¾IDåå®é åå¨OIDåå¯¹åºæ å°ï¼ å¹¶ä¸ä¸ç ´åè¡¨æ ¼ä¸é¨é¨æ ç»æï¼å¦ææ²¡æè¾IDå°±åªéè¦å ³æ³¨parentIdè¿ä¸ªå±æ§ï¼ å¹¶ä¸éè¦æ³¨æå¦ææçIDæï¼æç没æé£å°±éè¦æ³¨æï¼æ¢åå¨åç³»ç»ä¸ï¼ å ³èçé¨é¨æ ï¼ååå¨åå½åè¡¨æ ¼ä¸å ³èçé¨é¨æ )ã 2ãå½åå¯¼å ¥çæ°æ®ç¶idå ³èäºå·²åå¨çé¨é¨oid(è¦æ¥è¯¢ç¶idè¿ä¸ªé¨é¨æ¯å¦åå¨ï¼) è§£å³æè·¯ï¼æå¥½æ¯å°è¡¨æ ¼ä¸å¯è½æ¯é¨é¨æ çç»éåææ ï¼ç¶åå忥éå¥çå¤ç */ //2ãå¿ å¡«å¤ç©ºãå¤éï¼æ°æ®åºå¤éåexcelä¸å¤éï¼ï¼ç»è£ æä¿åç¨çæ°æ®å¯¹è±¡ List<DeptInfo> deptInfoList = new ArrayList<>(); //2.1ãç¨ä»¥åå¨excelä¸éå¤çæ°æ®ï¼ä¸ä¸ªä¸å¯éå¤çåæ®µï¼ï¼Nameä¸è½ä¸ºç©ºï¼NameãCodeåä¸ç¶é¨é¨ä¸å¯ä¸ï¼ List<String> repeatIdList = new ArrayList<>(); Map<String,String> repeatNameMap = new HashMap<>(); Map<String,String> repeatNumMap = new HashMap<>(); Map<String,String> indexMap = new HashMap<>(); //2.2ãåå¨ç¨æ·æè¾çoidåå®é åå¨oidçæ å°å ³ç³» Map<String, String> oidMap = new HashMap<>(); poList.stream().forEach(po->{ String parentId = Func.isBlank(po.getParentId()) ? "":po.getParentId(); //è¡¨æ ¼å å¤é //é¨é¨åç§°å¤ç©º if(Func.isEmpty(po.getName())){ throw new VciBaseException("第ã"+po.getRowIndex()+"ãè¡ï¼depterror,Reason:Name cannot be empty"); }else if(repeatNameMap.getOrDefault(po.getName(), "").equals(parentId)/*excelä¸åä¸é¨é¨ä¸Nameç¸ç*/){ //åä¸é¨é¨ä¸åç§°å¤é throw new VciBaseException("第ã"+po.getRowIndex()+"ãè¡ï¼deptnameerror,Reason: Names under the same department cannot be duplicated"); }else if(Func.isNotEmpty(po.getId()) && repeatIdList.equals(po.getId())){ throw new VciBaseException("第ã"+po.getRowIndex()+"ãè¡ï¼deptiderror,Reason: The primary key cannot be duplicated"); }else if(Func.isNotEmpty(po.getNum()) && repeatNumMap.getOrDefault(po.getNum(),"").equals(parentId)/*excelä¸åä¸é¨é¨ä¸ç¼å·åå¨ */){ throw new VciBaseException("第ã"+po.getRowIndex()+"ãè¡ï¼deptnumerror,Reason: The number cannot be duplicated"); }else{ //2.2ãæ¥è¯¢æ°æ®åºä¸çæ°æ®ï¼æ¥éIDåNUMï¼ï¼æ¯è¾éº»ç¦éè¦æ ¹æ®ParentIDæ¥è¯¢ï¼ææåªè½åæ¡æ¥è¯¢è¿è¡å¤éï¼ //ç»è£ æ¥éæ¡ä»¶:åä¸é¨é¨ä¸(parentIdç¸ç)ï¼nameæè numç¸ç HashMap<String, String> conditionMap = new HashMap<>(); conditionMap.put("plname",po.getName()); conditionMap.put("plnum",QueryOptionConstant.OR + po.getNum()); String pId = Func.isBlank(po.getParentId()) ? null:po.getParentId(); List<OrgDepartmentVO> repeatOrgDept = this.getDeptByDeptPOidAndCondition(pId, conditionMap); //åªè¦ä¸ä¸ºç©ºå°±è¯´æå½åè¡æ°æ®å¨ç³»ç»ä¸éå¤ if(Func.isNotEmpty(repeatOrgDept)){ throw new VciBaseException("第ã"+po.getRowIndex()+"ãè¡ï¼deptname or deptnum error,Reason: The name or number already exists in the system"); } } //å卿 ¡éªéè¿çæ°æ®ï¼ä»¥ä¾¿åç»excelæ¥é repeatNameMap.put(po.getName(),Func.isBlank(po.getParentId()) ? "":po.getParentId()); repeatIdList.add(po.getId()); repeatNumMap.put(po.getNum(),po.getParentId()); indexMap.put(po.getName(),po.getRowIndex()); //æ ¡éªæ°æ®å°±è¯¥ç»è£ æDTOæ°æ®å¯¹è±¡äº OrgDepartmentDTO dto = new OrgDepartmentDTO(); BeanUtil.convert(po,dto); dto.setOid(po.getId()); dto.setId(po.getNum()); dto.setPkFatherDepartment(po.getParentId()); dto.setCreateTime(new Date()); dto.setCreator(loginUserId); dto.setLastModifier(loginUserId); dto.setStatus((short) 0); //2.2ãè¿ç¨ä¸å¤ç主é®è½¬æ¢é®é¢æå¥½æ¯ä¸æ¡ä¸æ¡çå¤çIDæ¯å¦åå¨è¿æParentIDæ¯å¦åå¨çé®é¢ //å 夿æ¯å·²åå¨çé¨é¨IDï¼è¿æ¯ä¸åå¨çé¨é¨IDï¼å·²åå¨ç³»ç»ä¸çIDå°±æ¯ä¸ºDept:å¼å¤´ç String pId = dto.getPkFatherDepartment(); //æ¯å·²åå¨ç³»ç»ä¸çé¨é¨id if(pId.contains("Dept:")){ //è§£æåºçå®çoid String deParentId = Func.oidDeHash(pId.replace("Dept:", "").trim()); //è§£æåºæ¥çdeParentIdå¿ é¡»å¾å¨åºä¸åå¨ if(Func.isBlank(deParentId) || Func.isEmpty(this.getDeptByDeptOid(deParentId))){ throw new VciBaseException("第ã"+ po.getRowIndex() +"ãè¡ï¼deptparentiderror,Reason:Parent ID resolution error or does not exist in the system"); } //æ¿æ¢æä¸´æ¶ä½¿ç¨çé¨é¨å¯ä¸æ è¯ dto.setPkOrganizationName(deParentId); } //ç¨æ·æè¾äºé¨é¨oidï¼ä½æ¯é¿å oidä¸è§èéè¦ï¼ç¨è§èoidè¿è¡æ¿æ¢ï¼å¦ææ²¡è¾å ¥ä¿åæ¶ä¼èªå¨çæoid if(Func.isNotBlank(dto.getOid())){ String pkOid = VciBaseUtil.getPk(); dto.setOid(pkOid); //oidæ å°å ³ç³»ï¼åç»ç¨æ¥æ´æ°parentId oidMap.put(dto.getOid(),pkOid); } DeptInfo deptInfo = this.changeOrgDeptDTOToDeptInfo(dto); deptInfoList.add(deptInfo); }); //3ãå¤çidåparentIdçæ å°å ³ç³»:å°ç¨æ·æè¾çç¶IDè½¬æ¢æå®é åå¨çID List<DeptInfo> lastDeptInfoList = deptInfoList.stream().map(info -> { //parentIdä¸ä¸ºç©ºå¹¶ä¸æ²¡æDept:ç¸å ³çå符串,è¯´ææ¯ç¨æ·æè¾çParentId(å¯¼å ¥çæ°æ®å°±æ¯ä¸ä¸ªæ ç»æ) if (Func.isNotBlank(info.parentId) || info.parentId.contains("Dept:")) { //转æ¢ParentId为å®é è¦åå¨çé¨é¨ID info.parentId = oidMap.get(info.parentId); } return info; }).collect(Collectors.toList()); //4ã对æç»å¤ç好çé¨é¨æ°æ®ä¿åï¼å®ç°æç»ç»ä¸ä¿åï¼é¿å äºä¸é¨åæ°æ®è¿äºä¸é¨åæ°æ®å ä¸ºæ ¡éªæ²¡è¿æ²¡è¿åºçé®é¢ platformClientUtil.getFrameworkService().batchSaveDepart( lastDeptInfoList.toArray(new DeptInfo[lastDeptInfoList.size()]), userEntityInfo ); }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("é¨é¨å¯¼å ¥æåï¼"); } public Map<String, OrgDepartmentVO> convertToMap(List<OrgDepartmentVO> orgDepartmentVOList) { Map<String, OrgDepartmentVO> map = new HashMap<>(); for (OrgDepartmentVO orgDepartmentVO : orgDepartmentVOList) { Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmRoleQueryServiceImpl.java
@@ -567,7 +567,7 @@ } /** * ä¿åç¨æ·è§è²å ³èå ³ç³» * æå管çåé è§è²è°ç¨ï¼ä¿åç¨æ·è§è²å ³èå ³ç³» * @param userOids * @param roleIds * @return @@ -576,7 +576,23 @@ public boolean saveRights(String[] userOids, String[] roleIds) throws PLException { VciBaseUtil.alertNotNull(userOids,"ç¨æ·ä¸»é®"); //roleIdså 许为空ï¼ä¸ºç©ºæ¶æ¸ 空å½åç¨æ·çæé return platformClientUtil.getFrameworkService().saveRights(roleIds,userOids,new UserEntityInfo()); UserEntityInfo userEntityInfo = new UserEntityInfo(WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(),null); return platformClientUtil.getFrameworkService().saveRights(roleIds,userOids,userEntityInfo); } /** * è§è²ç®¡çåé æåæ¥å£è°ç¨ * @param userOids * @param roleId * @return * @throws PLException */ @Override public boolean saveRight(String[] userOids, String roleId) throws PLException { VciBaseUtil.alertNotNull(roleId,"è§è²ä¸»é®"); //roleIdså 许为空ï¼ä¸ºç©ºæ¶æ¸ 空å½åç¨æ·çæé UserEntityInfo userEntityInfo = new UserEntityInfo(WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(),null); return platformClientUtil.getFrameworkService().saveRight(roleId,userOids,userEntityInfo); } /** @@ -632,7 +648,7 @@ smRoleDTO.getName(),"è§è²å"); //æ¥è¯¢æ°æ®åºä¸çï¼æ ¹æ®è§è²åæ¥ Map<String, String> conditionMap = new HashMap<>(); conditionMap.put("pluid",smRoleDTO.getOid()); conditionMap.put("plname",smRoleDTO.getName()); SmRoleVO dbSmRoleVO = getRoleByConditionMap(conditionMap); //æ ¹æ®ä¸»é®æ²¡æ¥è¯¢å°äºç¨æ· if(Func.isEmpty(dbSmRoleVO) || Func.isBlank(dbSmRoleVO.getOid())){ Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmUserQueryServiceImpl.java
@@ -30,7 +30,6 @@ 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; @@ -123,7 +122,7 @@ /** * ç¨æ·å页æ¥è¯¢æ¶è·åé¨é¨æ¾å°è¿éé¿å é夿¥è¯¢ */ private Map<String,List<OrgDepartmentVO>> orgDepartmentVOMap; private Map<String,Map<String,String>> orgDepartmentVOMap; /** * ç¨æ·å页æ¥è¯¢æ¶è·åè§è²æ¾å°è¿éé¿å é夿¥è¯¢ @@ -323,21 +322,19 @@ smUserVO.setPassword(userInfo.pwd); smUserVO.setConfirmPassword(userInfo.pwd); //ç¨æ·æå±é¨é¨çæ¥è¯¢è®¾ç½® List<OrgDepartmentVO> orgDepartmentVOList; Map<String,String> orgDepartmentVOList; //æ¥çå ¨å±åé䏿¯å¦åå¨é¨é¨ä¿¡æ¯ï¼åå¨çæ åµæä¸»è¦æ¯é坹夿¡ç¨æ·æ¥è¯¢çæ¶åé¿å é夿¥è¯¢ç if(Func.isNotEmpty(orgDepartmentVOMap)){ orgDepartmentVOList = orgDepartmentVOMap.get(userInfo.id); orgDepartmentVOList = Func.isNotEmpty(orgDepartmentVOMap.get(userInfo.id)) ? orgDepartmentVOMap.get(userInfo.id):new HashMap<>(); }else { orgDepartmentVOList = orgDeptQueryService.listDeptByUserOid(userInfo.id,null); 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<>(); } 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(",")) ); //é¨é¨oidï¼æ£å¸¸æ åµä¸ä¸ä¸ªç¨æ·åªä¼åå¨ä¸ä¸ªé¨é¨ä¸ smUserVO.setPkDepartment(orgDepartmentVOList.keySet().stream().collect(Collectors.joining(","))); smUserVO.setPkDepartmentName(orgDepartmentVOList.values().stream().collect(Collectors.joining(","))); //å¯ç çç¥æ¥è¯¢è®¾ç½® SmPasswordStrategyVO smPasswordStrategyVO; if(Func.isNotEmpty(smPwdStrategyVOMap)){ @@ -536,7 +533,7 @@ 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)); @@ -607,10 +604,27 @@ @Override public List<SmUserVO> countSmUserByDeptOid(String deptOid, Map<String, String> queryMap) throws VciBaseException { //æ¯å¦æ¥è¯¢åé¨é¨ä¸å ³èçç¨æ· List<OrgDepartmentVO> orgDepartmentVOList = orgDeptQueryService.listChildrenDeptByParentOid(deptOid, null); List<OrgDepartmentVO> orgDepartmentVOList = orgDeptQueryService.listAllLevelChildrenDeptByParentOid(deptOid, null); List<String> deptOidCollection = orgDepartmentVOList.stream().map(OrgDepartmentVO::getOid).collect(Collectors.toList()); deptOidCollection.add(deptOid);//å°å½åå±çoid乿¾è¿å» return listUserVOByDeptOid(queryMap,deptOidCollection,false); 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; } /** @@ -672,6 +686,7 @@ 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)){ @@ -1198,9 +1213,7 @@ } //æ ¹æ®å½åå建è¿ä¸ªç¨æ·ç人æç»å®å¯ç çç¥æ¥è¿è¡å¯ç æ ¡éª try { //TODO:ä¸ºäºæ¹ä¾¿è°è¯ï¼æä»¥è¿å¿å 注éåæ»åé¢è®°å¾æ´æ¹ String userName = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(); //String userName = "developer"; String error = platformClientUtil.getFrameworkService().checkPasswordStrategyByUserId(userName, smUserDTO.getPassword(),null); if (!StringUtils.isBlank(error)) { throw new VciBaseException("å½å设置çå¯ç ï¼å¯ç çç¥æ ¡éªæªéè¿"); @@ -1330,7 +1343,6 @@ ReadExcelOption excelOption = new ReadExcelOption(); //å½åç»å½çç¨æ·è´¦å· String loginUserId = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(); //String loginUserId = "developer"; UserEntityInfo userEntityInfo = new UserEntityInfo(loginUserId,null); //æ¯å¦å¯¼å ¥å¯çº§é ç½® boolean exportSecretGrade = Boolean.parseBoolean(ConfigReader.getConfigValue("exportSecretGrade")); Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/OrgDepartmentQueryController.java
@@ -1,20 +1,34 @@ package com.vci.frameworkcore.controller; import com.vci.corba.common.PLException; import com.vci.corba.common.data.UserEntityInfo; import com.vci.corba.framework.data.DeptInfo; import com.vci.frameworkcore.compatibility.OrgDeptQueryServiceI; import com.vci.frameworkcore.constant.FrameWorkLangCodeConstant; 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.ControllerUtil; 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 com.vci.web.util.PlatformClientUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; 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; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.util.Date; import java.util.List; /** @@ -65,18 +79,18 @@ /** * ä¿åé¨é¨ç¨æ·å ³èä¿¡æ¯ï¼å¹³å°èªå¸¦æ¥éåè½ * @param userOIds ç¨æ·id * @param userOids ç¨æ·id * @param deptId é¨é¨oid * @return */ @RequestMapping(value = "/saveUsersDepts",method = RequestMethod.POST) public BaseResult saveUsersDepts(String[] userOIds, String deptId){ public BaseResult saveUsersDepts(String[] userOids, String deptId){ //ä¸è½åæ¶ä¸ºç©º if(Func.isEmpty(userOIds) && Func.isBlank(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); @@ -91,7 +105,6 @@ * @return */ @RequestMapping(value = "/addDept",method = RequestMethod.POST) @VciUnCheckRight public BaseResult addDept(@RequestBody OrgDepartmentDTO orgDepartmentDTO){ try { return deptQueryService.addDept(orgDepartmentDTO) ? BaseResult.success("é¨é¨æ·»å æåï¼"):BaseResult.fail("é¨é¨æ·»å 失败ï¼"); @@ -109,7 +122,6 @@ * @return */ @RequestMapping(value = "/updateDept",method = RequestMethod.PUT) @VciUnCheckRight public BaseResult updateRole(@RequestBody OrgDepartmentDTO orgDepartmentDTO){ try { return deptQueryService.updateDept(orgDepartmentDTO) ? BaseResult.success("é¨é¨ä¿®æ¹æåï¼"):BaseResult.fail("é¨é¨ä¿®æ¹å¤±è´¥ï¼"); @@ -127,7 +139,6 @@ * @return */ @RequestMapping(value = "/deleteDept",method = RequestMethod.DELETE) @VciUnCheckRight public BaseResult deleteDept(String[] ids){ try { return deptQueryService.deleteDept(ids) ? BaseResult.success("å é¤é¨é¨æåï¼"):BaseResult.fail("å é¤é¨é¨å¤±è´¥ï¼"); @@ -139,4 +150,50 @@ } } /** * ä¸è½½äººåå¯¼å ¥æ¨¡æ¿ * @param downloadFileName * @param response */ @RequestMapping(value = "/downloadImportTemplate",method = RequestMethod.GET) @VciUnCheckRight public void downloadImportTemplate(String downloadFileName, HttpServletResponse response){ try { String excelPath = deptQueryService.downloadImportTemplate(downloadFileName); ControllerUtil.writeFileToResponse(response,excelPath); } catch (Exception e) { String msg = "ä¸è½½é¨é¨å¯¼å ¥æ¨¡æ¿æ¶åºç°é误ï¼åå ï¼" + LangBaseUtil.getErrorMsg(e); try { e.printStackTrace(); 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(); } } } /** * é¨é¨å¯¼å ¥ * @param file * @return */ @RequestMapping(value = "/importDept",method = RequestMethod.POST) @VciUnCheckRight public BaseResult importUser(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 deptQueryService.importDept(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(); } } } Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/SmRoleQueryController.java
@@ -195,7 +195,7 @@ } /** * åé è§è²ï¼ä¿åç¨æ·è§è²å ³èå ³ç³»ï¼ç¨æ·ç®¡ççåé è§è²åè§è²ç®¡ççåé æåå ±ç¨ * æå管çåé è§è²ï¼ä¿åç¨æ·è§è²å ³èå ³ç³» * @param userOids * @param roleIds * @return @@ -207,8 +207,26 @@ }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 userOids * @param roleId * @return */ @RequestMapping(value = "/saveRight",method = RequestMethod.POST) public BaseResult saveRight(String[] userOids, String roleId){ try { return roleQueryService.saveRight(userOids,roleId) ? 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/model/OrgDeptForPlatform1.java
@@ -31,6 +31,16 @@ private String plnum; /** * é¨é¨ä»£å· */ private String plcode; /** * ä¸ä¸ */ private String plspecialties; /** * åç¨å¯ç¨ç¶æ */ private Short plstatus; @@ -48,7 +58,7 @@ /** * å建æ¶é´ */ private Date plcreatetime; private Long plcreatetime; /** * å建人 @@ -58,7 +68,7 @@ /** * æåä¿®æ¹æ¶é´ */ private Date plupdatetime; private Long plupdatetime; /** * æåä¿®æ¹äºº @@ -69,6 +79,22 @@ * ä¸ç¥éåå¥ç */ private String pllicensors; public String getPlspecialties() { return plspecialties; } public void setPlspecialties(String plspecialties) { this.plspecialties = plspecialties; } public String getPlcode() { return plcode; } public void setPlcode(String plcode) { this.plcode = plcode; } public String getPluid() { return pluid; @@ -118,11 +144,11 @@ this.pldesc = pldesc == null ? null : pldesc.trim(); } public Date getPlcreatetime() { public Long getPlcreatetime() { return plcreatetime; } public void setPlcreatetime(Date plcreatetime) { public void setPlcreatetime(Long plcreatetime) { this.plcreatetime = plcreatetime; } @@ -134,11 +160,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
@@ -83,11 +83,11 @@ /** * ä¸ä¸ */ public String specialties; private String specialties; /** * ç¶æ */ public short status; private short status; } Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/model/po/OrgDeptPO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,72 @@ 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/5 16:35 */ @Data @AllArgsConstructor @NoArgsConstructor public class OrgDeptPO extends BaseModelVO { /** * ç¦æ¢ä¿®æ¹è¿ä¸ªå¼ */ private static final long serialVersionUID = -2239512786206928201L; /** * æå¨æ°æ®è¡ */ @ExcelColumn(rowIndexColumn = true,value = "") private String rowIndex; /** * ä¸»é® */ @ExcelColumn(value="ID") private String id; /** * é¨é¨åç§° */ @ExcelColumn(value="åç§°",nullable = false) private String name; /** * ç¼å· */ @ExcelColumn(value="ç¼å·") private String num; /** * é¨é¨ä»£å·ï¼å¯¹åºè¡¨ä¸plcodeåæ®µ */ @ExcelColumn(value="代å·") private String code; /** * ä¸ä¸ */ @ExcelColumn(value="ä¸ä¸") private String specialties; /** * ç¶id */ @ExcelColumn(value="ç¶IDï¼é¨é¨å¯ä¸æ è¯IDï¼") private String parentId; /** * æè¿° */ @ExcelColumn(value="æè¿°") private String desc; } Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/pagemodel/OrgDepartmentVO.java
@@ -20,9 +20,34 @@ private String id; /** * é¤é¨é¨ä¸»é®å¤çå¯ä¸æ è¯ï¼é¿åº¦ä¸º8ä½ï¼å¯éè¿è¯¥åæ°åæ¨åé¨é¨ä¸»é®;主è¦ç¨äºå¯¼å ¥é¨é¨æ¶ä½¿ç¨ */ private String uniqueId; /** * é¨é¨åç§° */ private String name; /** * é¨é¨ä»£å· */ private String code; /** * ä¸ä¸ */ private String specialties; /** * åç¨å¯ç¨ç¶æ */ private Short status; /** * åç¨å¯ç¨ç¶ææ¾ç¤ºå¼ */ private String statusText; /** * é¨é¨çº§å« @@ -73,7 +98,49 @@ * é¨é¨èç³»çµè¯ */ private String tel; private int treelevel; public String getCode() { return code; } public String getSpecialties() { return specialties; } public Short getStatus() { return status; } public void setCode(String code) { this.code = code; } public void setSpecialties(String specialties) { this.specialties = specialties; } public void setStatus(Short status) { this.status = status; } public void setStatusText(String statusText) { this.statusText = statusText; } public String getStatusText() { return statusText; } public String getUniqueId() { return uniqueId; } public void setUniqueId(String uniqueId) { this.uniqueId = uniqueId; } @Override public String getId() { return id; Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/util/Func.java
@@ -40,6 +40,60 @@ public class Func { /** * é常ç¨äºå°ä¸»é®oidè½¬æ¢æ8ä½å¯ä¸hashç å¼ * @return */ public static String oidEnHash(String oid){ UUID originalUUID = UUID.fromString(oid); // 使ç¨Base64ç¼ç å°åå§UUID转æ¢ä¸ºè¾ççå符串 String base64String = Base64.getUrlEncoder().withoutPadding().encodeToString(new byte[] { (byte)(originalUUID.getMostSignificantBits()>>>56), (byte)(originalUUID.getMostSignificantBits()>>>48), (byte)(originalUUID.getMostSignificantBits()>>>40), (byte)(originalUUID.getMostSignificantBits()>>>32), (byte)(originalUUID.getMostSignificantBits()>>>24), (byte)(originalUUID.getMostSignificantBits()>>>16), (byte)(originalUUID.getMostSignificantBits()>>>8), (byte)(originalUUID.getMostSignificantBits()), (byte)(originalUUID.getLeastSignificantBits()>>>56), (byte)(originalUUID.getLeastSignificantBits()>>>48), (byte)(originalUUID.getLeastSignificantBits()>>>40), (byte)(originalUUID.getLeastSignificantBits()>>>32), (byte)(originalUUID.getLeastSignificantBits()>>>24), (byte)(originalUUID.getLeastSignificantBits()>>>16), (byte)(originalUUID.getLeastSignificantBits()>>>8), (byte)(originalUUID.getLeastSignificantBits())}); return base64String; } /** * é常ç¨äºå°ä¸»é®oidè½¬æ¢æç8ä½å¯ä¸hashç ï¼å转为oid * @param base64String * @return */ public static String oidDeHash(String base64String){ // 忍ååå§çUUIDå符串 byte[] bytes = Base64.getUrlDecoder().decode(base64String); UUID reconstructedUUID = new UUID(((long)(bytes[0] & 0xff) << 56) | ((long)(bytes[1] & 0xff) << 48) | ((long)(bytes[2] & 0xff) << 40) | ((long)(bytes[3] & 0xff) << 32) | ((long)(bytes[4] & 0xff) << 24) | ((long)(bytes[5] & 0xff) << 16) | ((long)(bytes[6] & 0xff) << 8) | (bytes[7] & 0xff), ((long)(bytes[8] & 0xff) << 56) | ((long)(bytes[9] & 0xff) << 48) | ((long)(bytes[10] & 0xff) << 40) | ((long)(bytes[11] & 0xff) << 32) | ((long)(bytes[12] & 0xff) << 24) | ((long)(bytes[13] & 0xff) << 16) | ((long)(bytes[14] & 0xff) << 8) | (bytes[15] & 0xff)); return reconstructedUUID.toString().toUpperCase(Locale.ROOT); } /** * æè¨ï¼å¿ é¡»ä¸è½ä¸º null * <blockquote><pre> * public Foo(Bar bar) {