From 391eec3114a17e68652434c6eae610799d80290e Mon Sep 17 00:00:00 2001 From: ludc <ludc@vci-tech.com> Date: 星期四, 16 一月 2025 11:13:43 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/service/impl/SmUserQueryServiceImpl.java | 294 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 272 insertions(+), 22 deletions(-) diff --git a/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/service/impl/SmUserQueryServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/service/impl/SmUserQueryServiceImpl.java index 5cca29c..1b5d344 100644 --- a/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/service/impl/SmUserQueryServiceImpl.java +++ b/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/service/impl/SmUserQueryServiceImpl.java @@ -2,24 +2,27 @@ import com.vci.common.util.ThreeDES; import com.vci.common.utility.ObjectUtility; +import com.vci.constant.FrameWorkLangCodeConstant; +import com.vci.constant.WebLangCodeConstant; import com.vci.corba.common.PLException; import com.vci.corba.common.data.UserEntityInfo; -import com.vci.corba.framework.data.DeptInfo; -import com.vci.corba.framework.data.RoleInfo; -import com.vci.corba.framework.data.UserInfo; -import com.vci.corba.framework.data.UserLogonInfo; +import com.vci.corba.framework.data.*; import com.vci.corba.omd.data.BusinessObject; import com.vci.corba.omd.etm.EnumItem; import com.vci.corba.omd.etm.EnumType; +import com.vci.corba.volume.VolumeServicePrx; import com.vci.dto.SmUserDTO; +import com.vci.dto.VciFileObjectDTO; import com.vci.enumpck.UI.OrgTypeEnum; +import com.vci.enumpck.UI.VciFileTransProtocolEnum; import com.vci.enumpck.UserTypeEnum; +import com.vci.lcstatuspck.FileLCStatus; import com.vci.model.SmUserDO; +import com.vci.model.VciFileDocClassifyDO; +import com.vci.model.VciFileObjectDO; +import com.vci.model.VciFileVolumeDO; import com.vci.omd.utils.ObjectTool; -import com.vci.pagemodel.OrgDepartmentVO; -import com.vci.pagemodel.SmPasswordStrategyVO; -import com.vci.pagemodel.SmRoleVO; -import com.vci.pagemodel.SmUserVO; +import com.vci.pagemodel.*; import com.vci.po.SmUserPO; import com.vci.properties.OsConfig; import com.vci.starter.poi.bo.ReadExcelOption; @@ -27,16 +30,21 @@ 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.service.RevisionModelUtil; import com.vci.starter.web.enumpck.BooleanEnum; +import com.vci.starter.web.enumpck.DataSecretEnum; 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.*; import com.vci.starter.web.util.Lcm.Func; import com.vci.starter.web.wrapper.VciQueryWrapperForDO; +import com.vci.web.dao.VciFileObjectDaoI; +import com.vci.web.properties.WebProperties; import com.vci.web.service.*; import com.vci.web.util.PlatformClientUtil; import com.vci.web.util.WebUtil; +import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.util.HSSFColor; import org.slf4j.Logger; @@ -45,10 +53,14 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; -import java.io.File; +import javax.annotation.Resource; +import java.io.*; import java.util.*; import java.util.stream.Collectors; + +import static com.vci.constant.FrameWorkLangCodeConstant.UPLOAD_FAIL; /** * 鐢ㄦ埛鐨勬煡璇㈢浉鍏崇殑鏈嶅姟锛屽彲浠ュ吋瀹硅�佸钩鍙板拰鑰佺殑pdm @@ -89,6 +101,24 @@ */ @Autowired private WebPwdStrategyQueryServiceI smPwdStrategyQueryService; + + /** + * 鏂囦欢鐨勫嵎鏈嶅姟 + */ + @Autowired + private VciFileVolumeServiceI vciFileVolumeServiceI; + + /** + * 鐗堟湰鍜屽璞℃搷浣滅被 + */ + @Autowired(required = false) + private RevisionModelUtil revisionModelUtil; + + /** + * 閰嶇疆瀵硅薄 + */ + @Autowired + private WebProperties webProperties; /** * 浣跨敤瑙掕壊鐨勫睘鎬ф煡璇㈢敤鎴锋椂 @@ -144,6 +174,18 @@ * 鏃ュ織 */ private Logger logger = LoggerFactory.getLogger(getClass()); + + /** + * 鏂囦欢涓婁紶涓氬姟灞� + */ + @Autowired + private VciFileUploadServiceI vciFileUploadServiceI; + + /** + * 鏂囦欢淇℃伅鏁版嵁灞� + */ + @Resource + private VciFileObjectDaoI vciFileObjectMapper; /** * 骞冲彴閰嶇疆 @@ -393,6 +435,7 @@ smUserVO.setLastModifier(userInfo.updateUser); smUserVO.setLastLoginTime(VciDateUtil.long2Date(userInfo.updateTime)); smUserVO.setLastModifyPasswordTime(VciDateUtil.long2Date(userInfo.pwdUpdateTime)); + smUserVO.setPhoto(userInfo.photo); return smUserVO; } @@ -959,7 +1002,7 @@ tree.setOid(cbo.oid); tree.setText(cbo.id + " " + cbo.name); Map<String,String> attributeMap = new HashMap<>(); - WebUtil.copyValueToCboFromMap(cbo,attributeMap); + WebUtil.copyValueToMapFromBos(cbo,attributeMap); tree.setAttributes(attributeMap); tree.setLeaf(true); treeList.add(tree); @@ -1141,19 +1184,21 @@ if(StringUtils.isBlank(md5Password) || StringUtils.isBlank(userName)){ return false; } - String sql = " select plpassword from pluser where plusername = :userName"; + /*String sql = " select plpassword from pluser where plusername = :userName"; Map<String,String> conditionMap = new HashMap<>(); - conditionMap.put("userName",userName.trim()); - List<BusinessObject> BusinessObjectList = boService.queryBySql(sql, conditionMap); - if(CollectionUtils.isEmpty(BusinessObjectList)){ + conditionMap.put("userName",userName.trim());*/ + SmUserVO userVO = this.getUserByUserId(userName); + //List<BusinessObject> BusinessObjectList = boService.queryBySql(sql, conditionMap); + if(Func.isEmpty(userVO) || Func.isBlank(userVO.getOid())){ return false; } - ThreeDES des = new ThreeDES();// 瀹炰緥鍖栦竴涓锟�? - des.getKey("daliantan0v0");// 鐢熸垚瀵嗗寵 + //ThreeDES des = new ThreeDES();// 瀹炰緥鍖栦竴涓锟�? + //des.getKey("daliantan0v0");// 鐢熸垚瀵嗗寵 //瀵规煡璇㈠嚭鏉ョ殑瀵嗙爜瑙e瘑 - String plpassword = ObjectTool.getNewBOAttributeValue(BusinessObjectList.get(0), "plpassword"); - plpassword = des.getDesString(plpassword); + //String plpassword = ObjectTool.getNewBOAttributeValue(BusinessObjectList.get(0), "plpassword"); + String plpassword = userVO.getPassword(); + //plpassword = des.getDesString(plpassword); if(md5Password.equals(plpassword)){ return true; } @@ -1456,8 +1501,9 @@ userInfo.updateUser = user.getLastModifier() == null ? "" : user.getLastModifier(); userInfo.pwdUpdateTime = user.getPwdUpdateTime().getTime(); userInfo.grantor = user.getGrantor() == null ? "" : user.getGrantor(); - userInfo.secretGrade = user.getSecretGrade() == null ? 2 : Integer.valueOf(user.getGrantor()); + userInfo.secretGrade = user.getSecretGrade() == null ? 2 : Integer.valueOf(user.getSecretGrade()); userInfo.isDeptLeader = user.getIsDeptLeader() == null ? "0" : user.getIsDeptLeader(); + userInfo.photo = user.getPhoto() == null ? "" : user.getPhoto(); return userInfo; } @@ -1487,7 +1533,8 @@ @Transactional(rollbackFor = Exception.class) public boolean stopUsers(String[] ids, boolean flag) throws PLException { VciBaseUtil.alertNotNull(ids,"鍋滅敤/鍚敤鐨勭敤鎴穒d鍒楄〃"); - return platformClientUtil.getFrameworkService().stopUsers(ids, flag,null); + + return platformClientUtil.getFrameworkService().stopUsers(ids, flag,new UserEntityInfo(WebUtil.getCurrentUserId(),"鐢ㄦ埛绠$悊")); } /** @@ -1671,13 +1718,216 @@ * @throws VciBaseException */ @Override - public List<SmUserVO> listUserByUserType() throws PLException { + public List<SmUserVO> listUserByUserType(Integer type) throws PLException { try { - UserInfo[] userInfo = platformClientUtil.getFrameworkService().fetchUserInfoByType(Short.parseShort(WebUtil.getCurrentUserSessionInfo().getUsertype())); + UserInfo[] userInfo = platformClientUtil.getFrameworkService().fetchUserInfoByType(type != null ? type.shortValue() :Short.parseShort(WebUtil.getCurrentUserSessionInfo().getUsertype())); return userInfoArr2VO(userInfo); } catch (PLException e) { throw new VciBaseException("鐧诲綍鏃讹紝鑾峰彇鐢ㄦ埛淇℃伅澶辫触锛�"+e.getMessage()); } } + /** + * 瀵煎嚭鐢ㄦ埛鍒楄〃涓夊憳璐﹀彿闄ゅ + * @return + */ + @Override + public String expUser() throws PLException { + // 璁剧疆琛ㄥ崟鍒楀悕 + List<String> columns = new ArrayList<>(Arrays.asList("濮撳悕, 璐﹀彿, 鐘舵��, 瀵嗙爜绛栫暐, 閿佸畾鐘舵��, 鎵�灞為儴闂�, 涓撲笟, 瑙掕壊, 鐢靛瓙閭欢, 鎻忚堪, 閮ㄩ棬棰嗗, 瀵嗙骇".split(","))); + //璁剧疆蹇呭~鍒� + ColumnNameisRed.clear(); + ColumnNameisRed.add(0); + ColumnNameisRed.add(1); + ColumnNameisRed.add(2); + //鍐檈xcel + String excelPath = LocalFileUtil.getDefaultTempFolder() + File.separator + "userList.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))); + } + } + UserInfo[] userInfos = platformClientUtil.getFrameworkService().fetchUserInfoWithOutSanYuan(); + //閮ㄩ棬淇℃伅闆嗗悎 + Hashtable<String, String> deptHashTable = new Hashtable<String, String>(); + for(int index = 1; index <= userInfos.length; index++){ + UserInfo userInfo = userInfos[index-1]; + excelDataList.add(new WriteExcelData(index,0, userInfo.trueName)); + excelDataList.add(new WriteExcelData(index,1, userInfo.userName)); + excelDataList.add(new WriteExcelData(index,2, userInfo.status==1 ? "鍋滅敤":"鍚敤")); + /**瀵嗙爜绛栫暐**/ + PasswordStrategyInfo pwsObj = platformClientUtil.getFrameworkService().fetchPasswordStrategyByUserId(userInfo.id); + excelDataList.add(new WriteExcelData(index,3, pwsObj.name)); + /**閿佸畾鐘舵��**/ + UserLogonInfo lockObj = platformClientUtil.getFrameworkService().fetchUserLogonObj(userInfo.id); + if (pwsObj != null) + excelDataList.add(new WriteExcelData(index,4, (pwsObj.retryTime > 0 && lockObj.plWrongNum >= pwsObj.retryTime) ? "閿佸畾" : "鏈攣瀹�")); + else + excelDataList.add(new WriteExcelData(index,4, "鏈攣瀹�")); + DeptInfo obj = null; + RoleInfo[] roles = null; + String deptName = ""; + obj = platformClientUtil.getFrameworkService().fetchDeptByUserId(userInfo.id); + if (obj != null){ + if(!deptHashTable.containsKey((obj.id))){ + deptName = getDeptObjectAllByDeptId(obj); + deptHashTable.put(obj.id, deptName); + }else{ + deptName = deptHashTable.get(obj.id); + } + } + roles = platformClientUtil.getFrameworkService().fetchRoleInfoByUserId(userInfo.id); + excelDataList.add(new WriteExcelData(index,5, deptName)); + excelDataList.add(new WriteExcelData(index,6, userInfo.specialties)); + String roleNames = ""; + if (roles.length != 0){ + for(int j = 0 ; j < roles.length ; j ++){ + if (j < roles.length -1){ + roleNames += roles[j].name + ","; + }else { + roleNames += roles[j].name; + } + } + } + excelDataList.add(new WriteExcelData(index,7, roleNames)); + excelDataList.add(new WriteExcelData(index,8, userInfo.email)); + excelDataList.add(new WriteExcelData(index,9, userInfo.desc)); + excelDataList.add(new WriteExcelData(index,10, userInfo.isDeptLeader.equals("1") ? "鏄�" : "鍚�")); + String secretGrade = String.valueOf(userInfo.secretGrade); + try { + EnumType item = platformClientUtil.getEnumService().getEnumTypeByName(ENUM_USERSECURITYENUM); + EnumItem[] children = item.items; + String securityShowName = ""; + for(EnumItem child: children){ + if(child.value.equals(secretGrade)){ + securityShowName = child.name; + break; + } + } + excelDataList.add(new WriteExcelData(index,11, securityShowName)); + } catch (PLException e) { + e.printStackTrace(); + } + } + WriteExcelOption excelOption = new WriteExcelOption(excelDataList); + ExcelUtil.writeDataToFile(excelPath, excelOption); + return excelPath; + } + /** + * 淇敼鐢ㄦ埛澶村儚 + * @param file 鏂囦欢 + * @return + */ + @Override + public boolean updateUserPhoto(MultipartFile file) throws PLException { + //鑾峰彇鏂囦欢浠撲綅缃� + VciFileVolumeDO vciFileVolumeDO = vciFileVolumeServiceI.getUploadVolume(); + String volumeName = vciFileVolumeDO.getName(); + VolumeServicePrx volumnCorbaService = platformClientUtil.getVolumeService(volumeName); + if(volumnCorbaService == null){ + throw new VciBaseException("娌℃湁鑾峰彇鍒板嵎鏈嶅姟"); + } + InputStream in = null; + String path = vciFileVolumeDO.getId() + ":/userphoto/" + WebUtil.getSessionInfo().getUserOid() + "." + + FilenameUtils.getExtension(file.getOriginalFilename()); + UserInfo userInfo = platformClientUtil.getFrameworkService().getUserObjectByoid(WebUtil.getSessionInfo().getUserOid()); + if(StringUtils.isNotBlank(userInfo.photo)){ + volumnCorbaService.deleteFile(userInfo.photo); + } + try{ + long currentTime = volumnCorbaService.getCurrrentTimeMillions(); + in = file.getInputStream(); + long fileSize = file.getSize(); + int blockSize = webProperties.getBlockLength()*1024; + byte[] buffer = new byte[blockSize]; + long temp =0L; + for(temp = 0L; temp < fileSize - (long)blockSize; temp += (long)blockSize) { + in.read(buffer, 0, blockSize); + volumnCorbaService.receiveFile(path, buffer, temp, currentTime, fileSize); + } + int remainSize = (int)(fileSize - temp); + buffer = new byte[remainSize]; + in.read(buffer, 0, remainSize); + volumnCorbaService.receiveFile(path, buffer, temp, currentTime, fileSize); + }catch(IOException e){ + throw new VciBaseException("璇诲彇鏂囦欢[" + file.getName() + "]鍑虹幇浜嗛敊璇紝" + e.getMessage() ,new String[0],e); + }catch(Exception e){ + throw new VciBaseException("澶勭悊涓婁紶鏂囦欢[" + file.getName() + "]鍑虹幇浜嗛敊璇紝" + e.getMessage() ,new String[0],e); + }finally { + if(in!=null){ + try { + in.close(); + } catch (IOException e) { + } + } + } + userInfo.photo = path; + boolean b = platformClientUtil.getFrameworkService().updateUser(userInfo, new UserEntityInfo(WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(), null)); + if(!b){ + return false; + } + return true; + } + + @Override + public String getUserPhoto() throws PLException { + //鑾峰彇鏂囦欢浠撲綅缃� + VciFileVolumeDO vciFileVolumeDO = vciFileVolumeServiceI.getUploadVolume(); + String volumeName = vciFileVolumeDO.getName(); + VolumeServicePrx volumnCorbaService = platformClientUtil.getVolumeService(volumeName); + if(volumnCorbaService == null){ + throw new VciBaseException("娌℃湁鑾峰彇鍒板嵎鏈嶅姟"); + } + UserInfo userInfo = platformClientUtil.getFrameworkService().getUserObjectByoid(WebUtil.getSessionInfo().getUserOid()); + String serverPath = userInfo.photo; + String tempFilePath = LocalFileUtil.getDefaultTempFolder() + File.separator+serverPath.substring(serverPath.lastIndexOf("/") + 1); + try { + FileOutputStream destFileOs = new FileOutputStream(tempFilePath); + long blockSize = webProperties.getBlockLength()*1024; + if(blockSize> Integer.MAX_VALUE){ + blockSize = Integer.MAX_VALUE; + } + long fileSize = volumnCorbaService.getFileSize(serverPath); + long temp = 0; + while (fileSize - temp > blockSize) { + destFileOs.write(volumnCorbaService.sendFile(serverPath, temp)); + temp += blockSize; + } + destFileOs.write(volumnCorbaService.sendFile(serverPath, temp)); + destFileOs.flush(); + destFileOs.close(); + } catch (FileNotFoundException e) { + throw new VciBaseException("瑕佸啓鍏ョ殑鏂囦欢娌℃湁鎵惧埌",new String[]{tempFilePath},e); + } catch (IOException e) { + throw new VciBaseException("鍐欏叆鏂囦欢鍑洪敊" + e.getMessage(),new String[]{tempFilePath},e); + } catch (Exception e){ + throw new VciBaseException("鍗锋湇鍔′紶杈撴枃浠舵椂鍑虹幇浜嗛敊璇�" + e.getMessage(),new String[0],e); + } + return tempFilePath; + } + + //鏍规嵁瀛愰儴闂ㄦ煡璇㈡墍灞炵殑鐖剁被閮ㄩ棬锛屽苟鎷兼帴鎴愬瓧绗︿覆褰㈠紡锛岃繑鍥� + public String getDeptObjectAllByDeptId(DeptInfo obj) throws PLException { + String fetchDepName = ""; + DeptInfo[] depObjectAll = platformClientUtil.getFrameworkService().fetchDepartmentInfosBySonId(obj.id); + for(int i=depObjectAll.length-1;i>=0; i--){ + fetchDepName += depObjectAll[i].name+"/"; + } + if(fetchDepName.length() != 0){ + fetchDepName = fetchDepName.substring(0, fetchDepName.length() - 1); + } + return fetchDepName; + } } -- Gitblit v1.9.3