¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.web.service.impl; |
| | | import com.vci.client.common.objects.UserObject; |
| | | import com.vci.corba.common.PLException; |
| | | import com.vci.corba.common.data.UserEntityInfo; |
| | | import com.vci.corba.framework.data.UserInfo; |
| | | import com.vci.corba.pllog.data.LogInfo; |
| | | import com.vci.corba.pllog.data.LogPeriodInfo; |
| | | import com.vci.corba.pllog.data.LogType; |
| | | import com.vci.dto.LogInfoDTO; |
| | | import com.vci.dto.LogPeriodInfoDTO; |
| | | import com.vci.dto.LogQueryCriteriaDTO; |
| | | import com.vci.starter.web.pagemodel.BaseResult; |
| | | import com.vci.web.service.*; |
| | | import com.vci.web.util.*; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * ä¸å¡ç±»åæå¡ |
| | | * @author yuxc |
| | | * @date 2024-9-11 |
| | | */ |
| | | @Service |
| | | public class LogBasicServiceImpl implements LogBasicServiceI { |
| | | |
| | | /** |
| | | * æ¥å¿ |
| | | */ |
| | | private Logger logger = LoggerFactory.getLogger(getClass()); |
| | | |
| | | /** |
| | | * å¹³å°çè°ç¨å·¥å
·ç±» |
| | | */ |
| | | @Autowired |
| | | private PlatformClientUtil platformClientUtil; |
| | | public static final String UTF8_BOM="\uFEFF"; |
| | | private final String LOG_SAVE_PERIOD = "logSavePeriod";//æ¥å¿ä¿åæé |
| | | |
| | | /** |
| | | * è·åæ¥æä¿åæé䏿åè¡¨æ¡ |
| | | * @return æ¥è¯¢ç»æ |
| | | */ |
| | | @Override |
| | | public BaseResult getPeroid() throws PLException { |
| | | //è·åå½åæé设置 |
| | | int curPeriod = platformClientUtil.getLogService().getCurPeriod(); |
| | | LogPeriodInfo[] periods = platformClientUtil.getLogService().getPeriods(); |
| | | List<LogPeriodInfoDTO> logDTOs = new ArrayList<>(); |
| | | for (LogPeriodInfo period : periods) { |
| | | LogPeriodInfoDTO dto = new LogPeriodInfoDTO(); |
| | | dto.setValue(period.value); |
| | | if(period.code.startsWith(UTF8_BOM)) { |
| | | period.code=period.code.substring(1); |
| | | } |
| | | if (Integer.valueOf(period.code) == curPeriod){ |
| | | dto.setChoose(true); |
| | | } |
| | | dto.setCode(period.code); |
| | | logDTOs.add(dto); |
| | | } |
| | | return BaseResult.dataList(logDTOs); |
| | | } |
| | | |
| | | /** |
| | | * ä¿åæé设置 |
| | | * period æéç¼ç |
| | | * @return ä¿åç»æ |
| | | */ |
| | | @Override |
| | | public BaseResult savePeriod(String period) throws PLException { |
| | | UserEntityInfo userEntityInfo = new UserEntityInfo(); |
| | | userEntityInfo.setModules("com.vci.client.log.ui.LogBasicConfPanel"); |
| | | userEntityInfo.setUserName(WebUtil.getCurrentUserId()); |
| | | boolean b = platformClientUtil.getLogService().savePeriod(period, userEntityInfo); |
| | | if(!b){ |
| | | return BaseResult.fail("ä¿å失败ï¼"); |
| | | } |
| | | return BaseResult.success("ä¿åæåï¼"); |
| | | } |
| | | |
| | | /** |
| | | * å 餿¥å¿ |
| | | * @param deleteDate å é¤çæ¥æ |
| | | * @return å é¤ç»æ |
| | | * @throws PLException |
| | | */ |
| | | @Override |
| | | public BaseResult deleteLog(String deleteDate) throws PLException { |
| | | if(StringUtils.isBlank(deleteDate)){ |
| | | throw new PLException("500", new String[]{"æ¥æä¸è½ä¸ºç©ºï¼"}); |
| | | } |
| | | //è·åå½åæé设置 |
| | | int curSavePeriod = platformClientUtil.getLogService().getCurPeriod(); |
| | | int monthSpan = 1; |
| | | String monthLabel = ""; |
| | | LogPeriodInfo[] periods = platformClientUtil.getLogService().getPeriods(); |
| | | Map<String, String> periodMap = Arrays.stream(periods).collect(Collectors.toMap(e -> e.code, e -> e.value)); |
| | | |
| | | |
| | | if(curSavePeriod <= 0){ |
| | | // æªé
ç½®æ¶ï¼åªè½å é¤ |
| | | monthLabel = periods[0].value; |
| | | monthSpan = Integer.valueOf(periods[0].code); |
| | | } else { |
| | | monthSpan = curSavePeriod;//æécode |
| | | monthLabel = periodMap.get(String.valueOf(curSavePeriod));//æéæ¾ç¤ºå¼ |
| | | } |
| | | //æ£æ¥å é¤é»è¾ |
| | | checkCanDelete(deleteDate, monthSpan, monthLabel); |
| | | boolean res = false; |
| | | res = platformClientUtil.getLogService().deleteLog(getDeleteDateString(deleteDate));//å 餿¥å¿ |
| | | if(!res){ |
| | | return BaseResult.fail("å é¤å¤±è´¥ï¼"); |
| | | } |
| | | return BaseResult.success("å 餿åï¼"); |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢æ¥å¿ |
| | | * @param queryDto æ¥è¯¢æ¡ä»¶ä¼ è¾å¯¹è±¡ |
| | | * @return æ¥è¯¢æ°æ® |
| | | * @throws PLException |
| | | */ |
| | | @Override |
| | | public BaseResult getLogListByContion(LogQueryCriteriaDTO queryDto) throws PLException { |
| | | String querySql = getSQL(queryDto); |
| | | LogInfo[] logInfos = platformClientUtil.getLogService().getLogListByContion(queryDto.getPageNo(),queryDto.getPageSize(),querySql); |
| | | List<LogInfoDTO> dtos = new ArrayList<>(); |
| | | for (LogInfo logInfo : logInfos) { |
| | | LogInfoDTO dto = new LogInfoDTO(); |
| | | dto.setLogType(logInfo.logType); |
| | | dto.setDate(logInfo.date); |
| | | dto.setContent(logInfo.content); |
| | | dto.setPuid(logInfo.puid); |
| | | dto.setModuleName(logInfo.moduleName); |
| | | dto.setEntityDesc(logInfo.entityDesc); |
| | | dto.setResult(logInfo.result); |
| | | dto.setType(logInfo.type); |
| | | dto.setProperty(logInfo.property); |
| | | dto.setTruename(logInfo.truename); |
| | | dto.setNewVal(logInfo.newVal); |
| | | dto.setUserIp(logInfo.userIp); |
| | | dto.setUsername(logInfo.username); |
| | | dto.setPreviousVal(logInfo.previousVal); |
| | | dtos.add(dto); |
| | | } |
| | | long sumLogRows = platformClientUtil.getLogService().getSumLogRows(querySql); |
| | | BaseResult result = new BaseResult(); |
| | | result.setSuccess(true); |
| | | result.setCode(200); |
| | | result.setData(dtos); |
| | | result.setTotal(sumLogRows); |
| | | return result; |
| | | } |
| | | /** |
| | | * æä½ç¨æ·è·å |
| | | */ |
| | | @Override |
| | | public BaseResult getOperatingUsers() throws PLException { |
| | | List<UserObject> users = new ArrayList<UserObject>(); |
| | | if("secAdmin".equals(WebUtil.getCurrentUserId())){ |
| | | users.addAll(getUsersByUserNames(Arrays.asList("auditAdmin"))); |
| | | users.addAll(getUsersByUserNames(getUserNameByUserType(2))); |
| | | } |
| | | else if("auditAdmin".equals(WebUtil.getCurrentUserId())){ |
| | | users.addAll(getUsersByUserNames(Arrays.asList("secAdmin", "sysAdmin"))); |
| | | } else if("sysAdmin".equals(WebUtil.getCurrentUserId())){ |
| | | |
| | | } |
| | | return BaseResult.dataList(users); |
| | | } |
| | | |
| | | /** |
| | | * è·åç¨æ·ä¿¡æ¯ |
| | | * @param userNames ç¨æ·åç§° |
| | | * @return ç¨æ·ä¿¡æ¯ |
| | | * @throws PLException |
| | | */ |
| | | private List<UserObject> getUsersByUserNames(List<String> userNames) throws PLException { |
| | | List<UserObject> userList = new ArrayList<UserObject>(); |
| | | for(String userName : userNames){ |
| | | UserInfo userInfo = platformClientUtil.getFrameworkService().fetchUserInfoByName(userName); |
| | | UserObject user = new UserObject(); |
| | | user.setId(userInfo.id); |
| | | user.setUserName(userInfo.userName); |
| | | user.setPwd(userInfo.pwd); |
| | | user.setEmail(userInfo.email); |
| | | user.setTrueName(userInfo.trueName); |
| | | user.setSpecialties(userInfo.specialties); |
| | | user.setDesc(userInfo.desc); |
| | | user.setUserType(userInfo.userType); |
| | | user.setStatus(userInfo.status); |
| | | user.setCreateTime(userInfo.createTime); |
| | | user.setCreateUser(userInfo.createUser); |
| | | user.setUpdateTime(userInfo.updateTime); |
| | | user.setUpdateUser(userInfo.updateUser); |
| | | user.setPwdUpdateTime(userInfo.pwdUpdateTime); |
| | | user.setGrantor(userInfo.grantor); |
| | | user.setSecretGrade(userInfo.secretGrade); |
| | | user.setIsDeptLeader(userInfo.isDeptLeader); |
| | | userList.add(user); |
| | | } |
| | | |
| | | Collections.sort(userList, new Comparator<UserObject>(){ |
| | | @Override |
| | | public int compare(UserObject o1, UserObject o2) { |
| | | return o1.getUserName().compareTo(o2.getUserName()); |
| | | } |
| | | }); |
| | | return userList; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®ç¨æ·ç±»åè·åç¨æ·æ°æ® |
| | | * @param userType ç¨æ·ç±»å |
| | | * @return ç¨æ·æ°æ® |
| | | * @throws PLException |
| | | */ |
| | | private List<String> getUserNameByUserType(int userType) throws PLException{ |
| | | List<String> userNames = new ArrayList<String>(); |
| | | String sql = "select plusername,pltruename from pluser u where u.plusertype = " + String.valueOf(userType); |
| | | String[][] valss = platformClientUtil.getQueryService().queryBySqlWithoutKey(sql); |
| | | for(String[] vals : valss){ |
| | | userNames.add(vals[0]); |
| | | } |
| | | return userNames; |
| | | } |
| | | /** |
| | | * è·åæ¥è¯¢æ¡ä»¶å¹¶æ¼æSQLï¼åªæ¼whereåå¥åé¢çSQL |
| | | * @return |
| | | */ |
| | | public String getSQL(LogQueryCriteriaDTO dto) throws PLException { |
| | | StringBuffer sql = new StringBuffer(""); |
| | | // int period = getPeriod(LOG_SAVE_PERIOD);//è·åä¿åæéï¼ä»¥æä¸ºåä½ |
| | | int period = platformClientUtil.getLogService().getCurPeriod();;//è·åä¿åæéï¼ä»¥æä¸ºåä½ |
| | | //ä¸é¢æ¯æ¼åºSQL |
| | | if(period != 0){ |
| | | sql.append(" to_date(PLDATE) >= add_months(to_date(sysdate),"+(-period)+")"); |
| | | } |
| | | if(dto.getStartDate()!=null&&!dto.getStartDate().trim().equals("")&&!dto.getStartDate().equals("null")){//èµ·å§æ¥æ |
| | | if(!sql.toString().equals("")){ |
| | | sql.append(" and "); |
| | | } |
| | | sql.append(" to_date(PLDATE) >= to_date('"+dto.getStartDate().trim()+"','yyyy-MM-dd') "); |
| | | } |
| | | if(dto.getEndDate()!=null&&!dto.getEndDate().trim().equals("")&&!dto.getEndDate().equals("null")){//ç»ææ¥æ |
| | | if(!sql.toString().equals("")){ |
| | | sql.append(" and "); |
| | | } |
| | | sql.append(" trunc(PLDATE) <= to_date('"+dto.getEndDate().trim()+"','yyyy-MM-dd')"); |
| | | } |
| | | |
| | | if(dto.getLogType() == LogType.Login.value()) {//ç»å
¥ç»åºæ¥å¿ |
| | | if(!sql.toString().equals("")){ |
| | | sql.append(" and "); |
| | | } |
| | | sql.append("PLLOGTYPE in ('" + getLogTypeString(LogType.Login) +"','" + getLogTypeString(LogType.Logout)+ "')"); |
| | | } else if(dto.getLogType() == LogType.Grant.value()) {//æææ¥å¿ |
| | | if(!sql.toString().equals("")){ |
| | | sql.append(" and "); |
| | | } |
| | | sql.append("PLLOGTYPE in('" + getLogTypeString(LogType.Grant) + "')"); |
| | | } else if(dto.getLogType() == LogType.General.value()) {//ä¸è¬æä½æ¥å¿ |
| | | if(!sql.toString().equals("")){ |
| | | sql.append(" and "); |
| | | } |
| | | sql.append("PLLOGTYPE in('" + getLogTypeString(LogType.General) + "')"); |
| | | } |
| | | if(StringUtils.isNotBlank(dto.getUserName())){//æä½ç¨æ· |
| | | if(!dto.getUserName().trim().equals("")){//å¦æç¨æ·åä¸ºç©ºæ ¼åä¸å ç¨æ·æ¡ä»¶ |
| | | if(!sql.toString().equals("")){ |
| | | sql.append(" and "); |
| | | } |
| | | if(dto.getUserName().contains("*")){ |
| | | dto.setUserName(dto.getUserName().trim().replaceAll("\\*", "%")); |
| | | sql.append(" PLUSER like '").append(dto.getUserName().trim()).append("'"); |
| | | }else{ |
| | | sql.append(" PLUSER = '").append(dto.getUserName().trim()).append("'"); |
| | | } |
| | | } |
| | | } |
| | | //æIPæ¥è¯¢ |
| | | if(StringUtils.isNotBlank(dto.getIpText())){ |
| | | String ip = dto.getIpText().trim(); |
| | | if(!sql.toString().equals("")){ |
| | | sql.append(" and "); |
| | | } |
| | | if(ip.trim().contains("*")){//æ¨¡ç³æ¥è¯¢ |
| | | ip = ip.trim().replaceAll("\\*", "%"); |
| | | sql.append(" PLIP like '").append(ip.trim()).append("'"); |
| | | }else{ |
| | | sql.append(" PLIP = '").append(ip.trim()).append("'"); |
| | | } |
| | | } |
| | | if(StringUtils.isNotBlank(dto.getTypeText())){ |
| | | String typeValue = dto.getTypeText(); |
| | | sql.append(" and pltype like '%").append(typeValue).append("%'"); |
| | | } |
| | | //è¿æ»¤æadminådeveloperç¨æ·çæ¥å¿è®°å½ |
| | | sql.append(" and PLUSER !='admin' and PLUSER !='developer' "); |
| | | |
| | | sql.append(" and pluser != '" + WebUtil.getCurrentUserId() + "' "); |
| | | |
| | | |
| | | // å®å
¨ä¿å¯åä¸çç³»ç»ç®¡çåçæ¥å¿ |
| | | if("secAdmin".equals(WebUtil.getCurrentUserId())){ |
| | | sql.append(" and pluser != 'sysAdmin' "); |
| | | } |
| | | // 审计管çååªçç³»ç»ç®¡çååå®å
¨ä¿å¯åçæ¥å¿ |
| | | else if("auditAdmin".equals(WebUtil.getCurrentUserId())){ |
| | | sql.append(" and pluser in ('secAdmin', 'sysAdmin')"); |
| | | } |
| | | return sql.toString(); |
| | | } |
| | | protected String getLogTypeString(LogType logType){ |
| | | String res = ""; |
| | | if(logType == LogType.Login) { |
| | | res = "ç»å½"; |
| | | } else if(logType == LogType.Logout) { |
| | | res = "ç»åº"; |
| | | } else if(logType == LogType.Grant) { |
| | | res = "ææ"; |
| | | } else if(logType == LogType.General) { |
| | | res = "ä¸è¬æä½"; |
| | | } else if(logType == LogType.Integration) { |
| | | res = "éæåºç¨"; |
| | | } |
| | | return res; |
| | | } |
| | | |
| | | /** |
| | | * æ¥æå符串å¤ç |
| | | * @param deleteDate æ¥æå符串 |
| | | * @return å¤çå®æçæ¥æå符串 |
| | | */ |
| | | protected String getDeleteDateString(String deleteDate){ |
| | | int s = Integer.parseInt(deleteDate.substring(8))+1; |
| | | StringBuffer buff = new StringBuffer(); |
| | | buff.append(deleteDate.substring(0, 8)); |
| | | if(("0"+s).length()>2){ |
| | | buff.append(s+""); |
| | | }else{ |
| | | buff.append("0"+s); |
| | | } |
| | | return buff.toString(); |
| | | } |
| | | |
| | | /** |
| | | * å é¤é»è¾æ£æ¥ |
| | | * @param deleteDate æ¥æå符串 |
| | | * @param monthSpan æécode |
| | | * @param monthLabel æéæ¾ç¤ºå¼ |
| | | * @return |
| | | * @throws PLException |
| | | */ |
| | | private boolean checkCanDelete(String deleteDate, int monthSpan, String monthLabel) throws PLException { |
| | | boolean res = false; |
| | | try { |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); |
| | | sdf.parse(deleteDate); |
| | | } catch (ParseException e1) { |
| | | throw new PLException("500", new String[]{"å°" + deleteDate + "è½¬æ¢æ¥ææ¶åçé误ï¼"}); |
| | | } |
| | | String sql = "SELECT FLOOR(MONTHS_BETWEEN(SYSDATE, to_date('" + deleteDate + "','yyyy-mm-dd'))) from dual"; |
| | | String[][] vals; |
| | | try { |
| | | vals = platformClientUtil.getQueryService().queryBySqlWithoutKey(sql); |
| | | if(vals != null && vals.length > 0 && vals[0].length > 0){ |
| | | int spval = Integer.valueOf(vals[0][0]); |
| | | if(spval <= monthSpan){ |
| | | throw new PLException("500", new String[]{"åªè½å é¤ " + monthLabel + " ä¹åçæ°æ®ï¼"}); |
| | | } |
| | | } |
| | | } catch (PLException e) { |
| | | e.printStackTrace(); |
| | | e.messages[0] += "è®¡ç®æ¯å¦å¯ä»¥å 餿宿¥æä¹åçæ°æ®æ¶åçé误ï¼"; |
| | | throw new PLException("500", e.messages); |
| | | } |
| | | res = true; |
| | | return res; |
| | | } |
| | | } |