| | |
| | | |
| | | 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; |
| | |
| | | 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.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 |
| | |
| | | */ |
| | | @Autowired |
| | | private WebPwdStrategyQueryServiceI smPwdStrategyQueryService; |
| | | |
| | | /** |
| | | * 文件的卷服务 |
| | | */ |
| | | @Autowired |
| | | private VciFileVolumeServiceI vciFileVolumeServiceI; |
| | | |
| | | /** |
| | | * 版本和对象操作类 |
| | | */ |
| | | @Autowired(required = false) |
| | | private RevisionModelUtil revisionModelUtil; |
| | | |
| | | /** |
| | | * 配置对象 |
| | | */ |
| | | @Autowired |
| | | private WebProperties webProperties; |
| | | |
| | | /** |
| | | * 使用角色的属性查询用户时 |
| | |
| | | * 日志 |
| | | */ |
| | | private Logger logger = LoggerFactory.getLogger(getClass()); |
| | | |
| | | /** |
| | | * 文件上传业务层 |
| | | */ |
| | | @Autowired |
| | | private VciFileUploadServiceI vciFileUploadServiceI; |
| | | |
| | | /** |
| | | * 文件信息数据层 |
| | | */ |
| | | @Resource |
| | | private VciFileObjectDaoI vciFileObjectMapper; |
| | | |
| | | /** |
| | | * 平台配置 |
| | |
| | | smUserVO.setLastModifier(userInfo.updateUser); |
| | | smUserVO.setLastLoginTime(VciDateUtil.long2Date(userInfo.updateTime)); |
| | | smUserVO.setLastModifyPasswordTime(VciDateUtil.long2Date(userInfo.pwdUpdateTime)); |
| | | smUserVO.setPhoto(userInfo.photo); |
| | | return smUserVO; |
| | | } |
| | | |
| | |
| | | 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");// 生成密匙 |
| | | //对查询出来的密码解密 |
| | | 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; |
| | | } |
| | |
| | | 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; |
| | | } |
| | | |
| | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public boolean stopUsers(String[] ids, boolean flag) throws PLException { |
| | | VciBaseUtil.alertNotNull(ids,"停用/启用的用户id列表"); |
| | | return platformClientUtil.getFrameworkService().stopUsers(ids, flag,null); |
| | | |
| | | return platformClientUtil.getFrameworkService().stopUsers(ids, flag,new UserEntityInfo(WebUtil.getCurrentUserId(),"用户管理")); |
| | | } |
| | | |
| | | /** |
| | |
| | | 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); |
| | | //写excel |
| | | 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; |
| | | } |
| | | |
| | | } |