ludc
2024-10-23 49f13be32b8c3a0742df021f13300f34d86c9b89
日志导出接口上传
已修改6个文件
121 ■■■■■ 文件已修改
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/LogQueryCriteriaDTO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/LogBasicController.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsAttributeController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/LogBasicServiceI.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LogBasicServiceImpl.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/LogQueryCriteriaDTO.java
@@ -38,7 +38,7 @@
    String roleType;
    /**
     * 根绝roleType查询出来的用户名,后续根据这个参数查询指定的日志
     * 根据roleType查询出来的用户名,后续根据这个参数查询指定的日志
     */
    private List<String> userNameList;
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/LogBasicController.java
@@ -4,13 +4,20 @@
import com.vci.starter.web.annotation.log.VciBusinessLog;
import com.vci.starter.web.exception.VciBaseException;
import com.vci.starter.web.pagemodel.BaseResult;
import com.vci.starter.web.util.ControllerUtil;
import com.vci.starter.web.util.VciBaseUtil;
import com.vci.web.service.LogBasicServiceI;
import com.vci.web.util.Func;
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.Controller;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;
/**
 * 平台日志控制器
@@ -125,4 +132,28 @@
            throw new VciBaseException(errorMsg);
        }
    }
    /**
     * 导出日志
     * @param dto 导出查询传参数对象
     * @param response
     */
    @PostMapping( "/exportLogs")
    @VciBusinessLog(operateName = "导出日志")
    public void exportLogs(@RequestBody LogQueryCriteriaDTO dto, HttpServletResponse response){
        try {
            String excelPath = logBasicServiceI.exportLogs(dto);
            ControllerUtil.writeFileToResponse(response,excelPath);
        } catch (Exception e) {
            String msg = "导出日志时出现错误,原因:" + VciBaseUtil.getExceptionMessage(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();
            }
        }
    }
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsAttributeController.java
@@ -191,7 +191,7 @@
            String excelPath = attributeService.exportAttributes(exportFileName,attrNames,false);
            ControllerUtil.writeFileToResponse(response,excelPath);
        } catch (Exception e) {
            String msg = "导出枚举时出现错误,原因:" + VciBaseUtil.getExceptionMessage(e);
            String msg = "导出属性时出现错误,原因:" + VciBaseUtil.getExceptionMessage(e);
            try {
                //出错时
                e.printStackTrace();
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/LogBasicServiceI.java
@@ -16,18 +16,21 @@
     * @return 查询结果
     */
    BaseResult getPeroid() throws PLException;
    /**
     * 保存期限设置
     * period 期限编码
     * @return 保存结果
     */
    BaseResult savePeriod(String period) throws PLException;
    /**
     * 删除日志
     * period 期限编码
     * @return 保存结果
     */
    BaseResult deleteLog(String deleteDate) throws PLException;
    /**
     * 查询日志
     * @param dto 查询条件传输对象
@@ -35,8 +38,12 @@
     * @throws PLException
     */
    BaseResult getLogListByContion(LogQueryCriteriaDTO dto) throws PLException;
    /**
     * 操作用户获取
     */
    BaseResult getOperatingUsers() throws PLException;
    String exportLogs(LogQueryCriteriaDTO dto) throws PLException;
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LogBasicServiceImpl.java
@@ -10,7 +10,14 @@
import com.vci.dto.LogPeriodInfoDTO;
import com.vci.dto.LogQueryCriteriaDTO;
import com.vci.frameworkcore.compatibility.SmUserQueryServiceI;
import com.vci.starter.poi.bo.WriteExcelData;
import com.vci.starter.poi.bo.WriteExcelOption;
import com.vci.starter.poi.util.ExcelUtil;
import com.vci.starter.web.exception.VciBaseException;
import com.vci.starter.web.pagemodel.BaseResult;
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.service.*;
import com.vci.web.util.*;
import org.apache.commons.lang3.StringUtils;
@@ -19,9 +26,11 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.File;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/**
@@ -136,6 +145,7 @@
     */
    @Override
    public BaseResult getLogListByContion(LogQueryCriteriaDTO queryDto) throws PLException {
        VciBaseUtil.alertNotNull(queryDto,"日志查询参数对象");
        List<String> userNameList = userQueryServiceI.queryUserNameByRoleType(queryDto.getRoleType());
        queryDto.setUserNameList(userNameList);
        String querySql = getSQL(queryDto);
@@ -188,13 +198,66 @@
    }
    /**
     * 导出日志
     * @param dto 导出的文件名
     * @return
     */
    @Override
    public String exportLogs(LogQueryCriteriaDTO dto) throws PLException{
        BaseResult logListByContion = this.getLogListByContion(dto);
        Collection<LogInfoDTO> logList = logListByContion.getData();
        //界面没传名称,使用默认导出名称
        String exportFileName = "日志导出_" + Func.format(new Date(),"yyyy-MM-dd HHmmss.sss");
        //设置列名
        List<String> columns = new ArrayList<>(
                Arrays.asList("用户名", "姓名", "用户ip","模块", "操作", "时间", "操作结果","描述")
        );
        //写excel
        String excelPath = LocalFileUtil.getDefaultTempFolder() + File.separator + exportFileName +  ".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++) {
            excelDataList.add(new WriteExcelData(0,index, columns.get(index)));
        }
        if(Func.isEmpty(logList)){
            excelDataList.add(new WriteExcelData(1,1, "导出的日志列表为空!"));
        }else{
            //先按照属性类型排序,不同属性类型导出的数据乱的效果
            AtomicInteger i = new AtomicInteger();
            logList.stream().forEach(log->{
                excelDataList.add(new WriteExcelData(i.get() +1,0, log.getUsername()));
                excelDataList.add(new WriteExcelData(i.get() +1,1, log.getTruename()));
                excelDataList.add(new WriteExcelData(i.get() +1,2, log.getUserIp()));
                excelDataList.add(new WriteExcelData(i.get() +1,3, log.getModuleName()));
                excelDataList.add(new WriteExcelData(i.get() +1,4, log.getType()));
                excelDataList.add(new WriteExcelData(i.get() +1,5, log.getDate()));
                excelDataList.add(new WriteExcelData(i.get() +1,6, log.getLogType()));
                excelDataList.add(new WriteExcelData(i.get() +1,7, log.getResult()));
                i.getAndIncrement();
            });
        }
        WriteExcelOption excelOption = new WriteExcelOption(excelDataList);
        ExcelUtil.writeDataToFile(excelPath, excelOption);
        return excelPath;
    }
    /**
     * 获取用户信息
     * @param userNames 用户名称
     * @return 用户信息
     * @throws PLException
     */
    private List<UserObject> getUsersByUserNames(List<String> userNames) throws PLException {
        List<UserObject> userList = new ArrayList<UserObject>();
        List<UserObject> userList = new ArrayList<>();
        for(String userName : userNames){
            UserInfo userInfo = platformClientUtil.getFrameworkService().fetchUserInfoByName(userName);
            UserObject user = new UserObject();
@@ -250,7 +313,7 @@
    public String getSQL(LogQueryCriteriaDTO dto) throws PLException {
        StringBuffer sql = new StringBuffer("");
        // int period = getPeriod(LOG_SAVE_PERIOD);//获取保存期限,以月为单位
        int period = platformClientUtil.getLogService().getCurPeriod();;//获取保存期限,以月为单位
        int period = platformClientUtil.getLogService().getCurPeriod();//获取保存期限,以月为单位
        //下面是拼出SQL
        if(period != 0){
            sql.append(" to_date(PLDATE) >= add_months(to_date(sysdate),"+(-period)+")");
@@ -413,4 +476,6 @@
        res = true;
        return res;
    }
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java
@@ -1792,13 +1792,9 @@
            List<Tree> selectTreeList = uiAuthorDTO.getSelectTreeList();
            List<Tree> filterSelectTreeList = this.authTreeListConvert(selectTreeList);
            //过滤出选择的按钮
            List<String> checkButtonList = new ArrayList<>();
            selectTreeList.stream().forEach(item->{
                Object data = item.getData();
                if(data instanceof PLTabButton || item.isLeaf()){
                    checkButtonList.add(item.getOid());
                }
            });
            List<String> checkButtonList = selectTreeList.stream()
                    .filter(item -> item.getData() instanceof PLTabButton || item.isLeaf())
                    .map(item -> item.getOid()).collect(Collectors.toList());
            getSelectedRoleRightObjs(uiAuthorDTO.getRoleId(),filterSelectTreeList,checkButtonList,allTreeMap,roleRightDTOList);
            SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread();