ludc
2024-10-23 49f13be32b8c3a0742df021f13300f34d86c9b89
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;
    }
}