From a0431deb4d557cd50d304df885a275edf1390f56 Mon Sep 17 00:00:00 2001
From: yuxc <yuxc@vci-tech.com>
Date: 星期四, 16 一月 2025 17:34:32 +0800
Subject: [PATCH] 1、修改属性报错修护。 2、修改用户信息增加个人信息处修改判断处理。

---
 Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/service/impl/SmUserQueryServiceImpl.java |  328 +++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 296 insertions(+), 32 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 ea8b652..bc6b3e2 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,28 +30,38 @@
 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;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
 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.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 +102,24 @@
 	 */
 	@Autowired
 	private WebPwdStrategyQueryServiceI smPwdStrategyQueryService;
+
+	/**
+	 * 鏂囦欢鐨勫嵎鏈嶅姟
+	 */
+	@Autowired
+	private VciFileVolumeServiceI vciFileVolumeServiceI;
+
+	/**
+	 * 鐗堟湰鍜屽璞℃搷浣滅被
+	 */
+	@Autowired(required = false)
+	private RevisionModelUtil revisionModelUtil;
+
+	/**
+	 * 閰嶇疆瀵硅薄
+	 */
+	@Autowired
+	private WebProperties webProperties;
 
 	/**
 	 * 浣跨敤瑙掕壊鐨勫睘鎬ф煡璇㈢敤鎴锋椂
@@ -144,6 +175,18 @@
 	 * 鏃ュ織
 	 */
 	private Logger logger = LoggerFactory.getLogger(getClass());
+
+	/**
+	 * 鏂囦欢涓婁紶涓氬姟灞�
+	 */
+	@Autowired
+	private VciFileUploadServiceI vciFileUploadServiceI;
+
+	/**
+	 * 鏂囦欢淇℃伅鏁版嵁灞�
+	 */
+	@Resource
+	private VciFileObjectDaoI vciFileObjectMapper;
 
 	/**
 	 * 骞冲彴閰嶇疆
@@ -393,6 +436,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 +1003,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 +1185,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;
 		}
@@ -1342,19 +1388,32 @@
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public boolean updateUser(SmUserDTO smUserDTO) throws PLException {
-		//鍒ょ┖
-		VciBaseUtil.alertNotNull(
-				smUserDTO,"淇敼鐨勭敤鎴峰璞�",
-				smUserDTO.getOid(),"鐢ㄦ埛涓婚敭",
-				smUserDTO.getId(),"鐢ㄦ埛鍚�",
-				smUserDTO.getPassword(),"瀵嗙爜",
-				smUserDTO.getConfirmPassword(),"纭瀵嗙爜",
-				smUserDTO.getName(),"濮撳悕"
-		);
-		//鏍¢獙
-		check(smUserDTO,false,false);
-		//鏌ヨ鏁版嵁搴撲腑鐨�
-		SmUserVO dbSmUserVO = getUserByUserOid(smUserDTO.getOid());
+		SmUserVO dbSmUserVO;
+		if(StringUtils.isBlank(smUserDTO.getId()) && StringUtils.isNotBlank(smUserDTO.getOid())
+				&& StringUtils.isNotBlank(smUserDTO.getName())){
+
+			//鏌ヨ鏁版嵁搴撲腑鐨�
+			dbSmUserVO = getUserByUserOid(smUserDTO.getOid());
+			dbSmUserVO.setName(smUserDTO.getName());
+			dbSmUserVO.setEmail(smUserDTO.getEmail());
+			BeanUtils.copyProperties(dbSmUserVO,smUserDTO);
+			//鏍¢獙
+			check(smUserDTO,false,false);
+		}else{
+			//鍒ょ┖
+			VciBaseUtil.alertNotNull(
+					smUserDTO,"淇敼鐨勭敤鎴峰璞�",
+					smUserDTO.getOid(),"鐢ㄦ埛涓婚敭",
+					smUserDTO.getId(),"鐢ㄦ埛鍚�",
+					smUserDTO.getPassword(),"瀵嗙爜",
+					smUserDTO.getConfirmPassword(),"纭瀵嗙爜",
+					smUserDTO.getName(),"濮撳悕"
+			);
+			//鏍¢獙
+			check(smUserDTO,false,false);
+			//鏌ヨ鏁版嵁搴撲腑鐨�
+			dbSmUserVO = getUserByUserOid(smUserDTO.getOid());
+		}
 		//鏍规嵁涓婚敭娌℃煡璇㈠埌浜嗙敤鎴�
 		if(Func.isEmpty(dbSmUserVO) || Func.isBlank(dbSmUserVO.getOid())){
 			throw new PLException("500", new String[] { "褰撳墠淇敼鐨勭敤鎴蜂笉瀛樺湪"});
@@ -1458,6 +1517,7 @@
 		userInfo.grantor = user.getGrantor() == null ? "" : 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 +1547,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(),"鐢ㄦ埛绠$悊"));
 	}
 
 	/**
@@ -1679,5 +1740,208 @@
 			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