|
@@ -0,0 +1,288 @@
|
|
|
+package cn.cslg.permission.service;
|
|
|
+
|
|
|
+import cn.cslg.permission.common.model.dto.QueryLoginRecordDTO;
|
|
|
+import cn.cslg.permission.common.model.dto.QueryRetrieveRecordDTO;
|
|
|
+import cn.cslg.permission.common.model.vo.*;
|
|
|
+import cn.cslg.permission.domain.LoginRecord;
|
|
|
+import cn.cslg.permission.domain.Personnel;
|
|
|
+import cn.cslg.permission.domain.Tenant;
|
|
|
+import cn.cslg.permission.exception.XiaoShiException;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.google.gson.Gson;
|
|
|
+import com.google.gson.reflect.TypeToken;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import okhttp3.MediaType;
|
|
|
+import okhttp3.OkHttpClient;
|
|
|
+import okhttp3.Request;
|
|
|
+import okhttp3.RequestBody;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.io.IOException;
|
|
|
+import java.lang.reflect.Type;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Comparator;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Objects;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 导出报表的数据跨系统获取并解析
|
|
|
+ * @Author xiexiang
|
|
|
+ * @Date 2023/9/18
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+@Service
|
|
|
+@RequiredArgsConstructor
|
|
|
+public class ParseOutDataForExcelService {
|
|
|
+ private final GetOutDataForParseService getOutDataForParseService;
|
|
|
+ private final TenantService tenantService;
|
|
|
+ private final PersonnelService personnelService;
|
|
|
+ private final LoginRecordService loginRecordService;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * PAS
|
|
|
+ * 检索历史
|
|
|
+ * @param queryRetrieveRecordDTO
|
|
|
+ * @return
|
|
|
+ * @throws IOException
|
|
|
+ */
|
|
|
+ public List<RetrieveRecordExportVO> getRetrieveRecords(QueryRetrieveRecordDTO queryRetrieveRecordDTO) throws IOException {
|
|
|
+ String data = getOutDataForParseService.getRetrieveRecords(queryRetrieveRecordDTO);
|
|
|
+ Gson gson = new Gson();
|
|
|
+ Type listType = new TypeToken<List<RetrieveRecordExportVO>>(){}.getType();
|
|
|
+ List<RetrieveRecordExportVO> retrieveRecordExportVOS = gson.fromJson(data, listType);
|
|
|
+ return retrieveRecordExportVOS;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * PAS
|
|
|
+ * 专题库
|
|
|
+ * @return
|
|
|
+ * @throws IOException
|
|
|
+ */
|
|
|
+ public List<ProjectUsedByTenantVO> getProjectData(List<Integer> tenantIds) throws IOException {
|
|
|
+ String data = getOutDataForParseService.getProjectUsedByTenant(tenantIds);
|
|
|
+ Gson gson = new Gson();
|
|
|
+ Type listType = new TypeToken<List<ProjectUsedByTenantVO>>(){}.getType();
|
|
|
+ List<ProjectUsedByTenantVO> projectUsedByTenantVOS = gson.fromJson(data, listType);
|
|
|
+
|
|
|
+ return projectUsedByTenantVOS;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * RMS
|
|
|
+ * 报告
|
|
|
+ * @return
|
|
|
+ * @throws IOException
|
|
|
+ */
|
|
|
+ public List<ReportUsedByTenantVO> reportStr2Object(List<Integer> tenantIds) throws IOException {
|
|
|
+ String reData = getOutDataForParseService.getReportData(tenantIds);
|
|
|
+ Gson gson = new Gson();
|
|
|
+ Type listType = new TypeToken<List<ReportUsedByTenantVO>>(){}.getType();
|
|
|
+ List<ReportUsedByTenantVO> reportUsedByTenantVOS = gson.fromJson(reData, listType);
|
|
|
+ return reportUsedByTenantVOS;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * PAS
|
|
|
+ * 被分享专题库
|
|
|
+ * @return
|
|
|
+ * @throws IOException
|
|
|
+ */
|
|
|
+ public List<ProjectSharedTenantVO> getProjectSharedData(List<Integer> tenantIds) throws IOException {
|
|
|
+ String data = getOutDataForParseService.getProjectSharedTenant(tenantIds);
|
|
|
+ Gson gson = new Gson();
|
|
|
+ Type listType = new TypeToken<List<ProjectSharedTenantVO>>(){}.getType();
|
|
|
+ List<ProjectSharedTenantVO> projectSharedTenantVOS = gson.fromJson(data, listType);
|
|
|
+ return projectSharedTenantVOS;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查出所有租户,并且查出租户下的人员
|
|
|
+ */
|
|
|
+ public List<ReportTenantVO> getTenantPerson(List<Integer> tenantIds){
|
|
|
+ List<ReportTenantVO> reportTenantVOS = new ArrayList<>();
|
|
|
+ //放入空集合,查询全部
|
|
|
+ List<Tenant> tenants = tenantService.getTenantIdAndName(tenantIds);
|
|
|
+ //遍历,装载
|
|
|
+ for(Tenant tenant : tenants){
|
|
|
+ ReportTenantVO reportTenantVO = new ReportTenantVO();
|
|
|
+ //租户id
|
|
|
+ reportTenantVO.setTenantId(tenant.getId());
|
|
|
+ //租户名
|
|
|
+ reportTenantVO.setTenantName(tenant.getTenantName());
|
|
|
+ //人员ids
|
|
|
+ LambdaQueryWrapper<Personnel> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper.eq(Personnel::getTenantId, tenant.getId());
|
|
|
+ List<Personnel> personnels = personnelService.list(queryWrapper);
|
|
|
+ List<Integer> personnelIds = personnels.stream().map(Personnel::getId).collect(Collectors.toList());
|
|
|
+ reportTenantVO.setPersonnelIds(personnelIds);
|
|
|
+ reportTenantVOS.add(reportTenantVO);
|
|
|
+ }
|
|
|
+ return reportTenantVOS;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询租户人员信息
|
|
|
+ * @param tenantIds
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public List<PersonnelNameVO> getPersonnelNameData(List<Integer> tenantIds){
|
|
|
+ List<PersonnelNameVO> personnelNameVOS = new ArrayList<>();
|
|
|
+ if(tenantIds.size() == 0){
|
|
|
+ List<Tenant> tenants = tenantService.list();
|
|
|
+ tenantIds = tenants.stream().map(Tenant::getId).collect(Collectors.toList());
|
|
|
+ System.out.println(tenantIds);
|
|
|
+ }
|
|
|
+ for(Integer tenantId : tenantIds){
|
|
|
+ //租户名
|
|
|
+ Tenant tenant = tenantService.getById(tenantId);
|
|
|
+ String tenantName = tenant.getTenantName();
|
|
|
+ LambdaQueryWrapper<Personnel> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper.eq(Personnel::getTenantId, tenantId);
|
|
|
+ Long count = personnelService.count(queryWrapper);
|
|
|
+ if(count > 0){
|
|
|
+ //人员数量
|
|
|
+ Integer personnelNum = Long.valueOf(count).intValue();
|
|
|
+ List<Personnel> personnels = personnelService.list(queryWrapper);
|
|
|
+ for(Personnel personnel : personnels){
|
|
|
+ PersonnelNameVO personnelNameVO = new PersonnelNameVO();
|
|
|
+ //租户
|
|
|
+ personnelNameVO.setTenantName(tenantName);
|
|
|
+ //人员数量
|
|
|
+ personnelNameVO.setPersonnelNum(personnelNum);
|
|
|
+ //人员名称
|
|
|
+ personnelNameVO.setPersonnelName(personnel.getPersonnelName());
|
|
|
+ //账号
|
|
|
+ personnelNameVO.setPersonnelUserName(personnel.getPersonnelUserName());
|
|
|
+ personnelNameVOS.add(personnelNameVO);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ PersonnelNameVO personnelNameVO = new PersonnelNameVO();
|
|
|
+ //租户
|
|
|
+ personnelNameVO.setTenantName(tenantName);
|
|
|
+ //人员数量
|
|
|
+ personnelNameVO.setPersonnelNum(0);
|
|
|
+ personnelNameVOS.add(personnelNameVO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return personnelNameVOS;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 装载单个租户的汇总报表数据
|
|
|
+ * @param tenantId
|
|
|
+ * @return
|
|
|
+ * @throws IOException
|
|
|
+ */
|
|
|
+ public TotalDataVO getTotalData(Integer tenantId) throws IOException {
|
|
|
+ TotalDataVO totalDataVO = new TotalDataVO();
|
|
|
+ Tenant tenant = tenantService.getById(tenantId);
|
|
|
+ if(tenant != null) {
|
|
|
+ List<Integer> tenantIds = new ArrayList<>();
|
|
|
+ tenantIds.add(tenant.getId());
|
|
|
+ //租户名
|
|
|
+ totalDataVO.setTenantName(tenant.getTenantName());
|
|
|
+ //租户下人员数量
|
|
|
+ List<PersonnelNameVO> personnelNameVOS = this.getPersonnelNameData(tenantIds);
|
|
|
+ totalDataVO.setPersonnelNum(personnelNameVOS.get(0).getPersonnelNum());
|
|
|
+ //报告数量
|
|
|
+ String reportNumStr = getOutDataForParseService.getReportNumOfTotal(tenantId);
|
|
|
+ Integer reportNum = Integer.parseInt(reportNumStr);
|
|
|
+ totalDataVO.setReportNum(reportNum);
|
|
|
+ //专题库数量
|
|
|
+ List<ProjectUsedByTenantVO> projectUsedByTenantVOS = this.getProjectData(tenantIds);
|
|
|
+ Integer projectNum = projectUsedByTenantVOS.get(0).getProjectNum();
|
|
|
+ totalDataVO.setProjectNum(projectNum);
|
|
|
+ //被分享专题库数量
|
|
|
+ List<ProjectSharedTenantVO> projectSharedTenantVOS = this.getProjectSharedData(tenantIds);
|
|
|
+ Integer projectSharedNum = projectSharedTenantVOS.get(0).getProjectNum();
|
|
|
+ totalDataVO.setProjectSharedNum(projectSharedNum);
|
|
|
+ }
|
|
|
+ return totalDataVO;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 装载登录日志Excel信息
|
|
|
+ * @param queryLoginRecordDTO
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public List<LoginRecordExportVO> loadLoginRecordData(QueryLoginRecordDTO queryLoginRecordDTO){
|
|
|
+ List<LoginRecordExportVO> loginRecordExportVOS = new ArrayList<>();
|
|
|
+ List<LoginRecord> loginRecords = new ArrayList<>();
|
|
|
+ if(queryLoginRecordDTO != null){
|
|
|
+ loginRecords = loginRecordService.getLoginRecord(queryLoginRecordDTO);
|
|
|
+ } else {
|
|
|
+ throw new XiaoShiException("导出失败");
|
|
|
+ }
|
|
|
+ for(LoginRecord loginRecord : loginRecords){
|
|
|
+ LoginRecordExportVO loginRecordExportVO = new LoginRecordExportVO();
|
|
|
+ if(loginRecord != null){
|
|
|
+ BeanUtils.copyProperties(loginRecord, loginRecordExportVO);
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ //创建时间
|
|
|
+ loginRecordExportVO.setCreateTime(sdf.format(loginRecord.getCreateTime()));
|
|
|
+ Tenant tenant = tenantService.getById(loginRecord.getTenantId());
|
|
|
+ //租户名称
|
|
|
+ loginRecordExportVO.setTenantName(tenant.getTenantName());
|
|
|
+ Personnel personnel = personnelService.getById(loginRecord.getPersonnelId());
|
|
|
+ //登陆人名称
|
|
|
+ loginRecordExportVO.setPersonnelUserName(personnel.getPersonnelUserName());
|
|
|
+ if(loginRecord.getLoginSystem() != null){
|
|
|
+ //登陆系统
|
|
|
+ if(loginRecord.getLoginSystem().equals(0)){
|
|
|
+ loginRecordExportVO.setLoginSystemName("权限系统");
|
|
|
+ loginRecordExportVOS.add(loginRecordExportVO);
|
|
|
+ } else if(loginRecord.getLoginSystem().equals(1)){
|
|
|
+ loginRecordExportVO.setLoginSystemName("分析系统");
|
|
|
+ loginRecordExportVOS.add(loginRecordExportVO);
|
|
|
+ } else if(loginRecord.getLoginSystem().equals(2)){
|
|
|
+ loginRecordExportVO.setLoginSystemName("报告系统");
|
|
|
+ loginRecordExportVOS.add(loginRecordExportVO);
|
|
|
+ } else {
|
|
|
+ loginRecordExportVO.setLoginSystemName(" ");
|
|
|
+ loginRecordExportVOS.add(loginRecordExportVO);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ loginRecordExportVO.setLoginSystemName(" ");
|
|
|
+ loginRecordExportVOS.add(loginRecordExportVO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return loginRecordExportVOS;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断需要查询的租户id数量,如果为空就是查询所有租户,并且装载租户名和用户名
|
|
|
+ * @param queryRetrieveRecordDTO
|
|
|
+ * @return
|
|
|
+ * @throws IOException
|
|
|
+ */
|
|
|
+ public List<RetrieveRecordExportVO> loadRetrieveRecords(QueryRetrieveRecordDTO queryRetrieveRecordDTO) throws IOException {
|
|
|
+ List<Integer> tenantIds = queryRetrieveRecordDTO.getTenantIds();
|
|
|
+ List<RetrieveRecordExportVO> retrieveRecordExportVOS = new ArrayList<>();
|
|
|
+ if(tenantIds.size() == 0){
|
|
|
+ List<Tenant> tenants = tenantService.getTenantIdAndName(tenantIds);
|
|
|
+ List<Integer> ids = tenants.stream().map(Tenant::getId).collect(Collectors.toList());
|
|
|
+ queryRetrieveRecordDTO.setTenantIds(ids);
|
|
|
+ retrieveRecordExportVOS = this.getRetrieveRecords(queryRetrieveRecordDTO);
|
|
|
+ } else {
|
|
|
+ retrieveRecordExportVOS = this.getRetrieveRecords(queryRetrieveRecordDTO);
|
|
|
+ }
|
|
|
+ retrieveRecordExportVOS.stream().forEach(retrieveRecordExportVO -> {
|
|
|
+ Tenant tenant = tenantService.getById(retrieveRecordExportVO.getTenantId());
|
|
|
+ retrieveRecordExportVO.setTenantName(tenant.getTenantName());
|
|
|
+ Personnel personnel = personnelService.getById(retrieveRecordExportVO.getCreateId());
|
|
|
+ retrieveRecordExportVO.setCreateName(personnel.getPersonnelName());
|
|
|
+ });
|
|
|
+ return retrieveRecordExportVOS;
|
|
|
+ }
|
|
|
+}
|