Browse Source

8/9 exportExcel

xiexiang 2 years ago
parent
commit
265454b5d0

+ 26 - 0
PAS/src/main/java/cn/cslg/pas/common/model/vo/ProjectSharedTenantVO.java

@@ -0,0 +1,26 @@
+package cn.cslg.pas.common.model.vo;
+
+import lombok.Data;
+
+/**
+ * 租户被分享专题库报表
+ * @Author xiexiang
+ * @Date 2023/8/3
+ */
+@Data
+public class ProjectSharedTenantVO {
+    /**
+     * 租户名
+     */
+    private String tenantName;
+
+    /**
+     * 被分享专题库数量
+     */
+    private Integer projectNum;
+
+    /**
+     * 被分享专题库名
+     */
+    private String projectName;
+}

+ 36 - 0
PAS/src/main/java/cn/cslg/pas/common/model/vo/ProjectUsedByTenantVO.java

@@ -0,0 +1,36 @@
+package cn.cslg.pas.common.model.vo;
+
+import lombok.Data;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/7/28
+ */
+@Data
+public class ProjectUsedByTenantVO {
+    /**
+     * 租户名
+     */
+    private String tenantName;
+
+    /**
+     * 专题库数量
+     */
+    private Integer projectNum;
+
+    /**
+     * 专题库id
+     */
+    private Integer projectId;
+
+    /**
+     * 专题库名
+     */
+    private String projectName;
+
+    /**
+     * 专利数量
+     */
+    private Integer patentNum;
+
+}

+ 5 - 1
PAS/src/main/java/cn/cslg/pas/common/model/vo/TenantVo.java

@@ -16,6 +16,11 @@ import lombok.experimental.Accessors;
 
 public class TenantVo  {
     /**
+     * 租户id
+     */
+    private Integer id;
+
+    /**
      * 租户名称
      */
 
@@ -76,5 +81,4 @@ public class TenantVo  {
     private Integer personnelId;
 
 
-
 }

+ 1 - 1
PAS/src/main/java/cn/cslg/pas/controller/ProjectImportController.java

@@ -58,7 +58,7 @@ public class ProjectImportController {
         if (params == null) {
             return Response.error("参数错误");
         }
-//        TaskParams taskParams = projectService.getImportPatentTaskParams(file, params.getProjectId());
+        TaskParams taskParams = projectService.getImportPatentTaskParams(file, params.getProjectId());
 //        uploadPatentBatchService.uploadPatentBatch(taskParams, params);
         //Excel导入专利
         uploadTaskService.addExcelTask(file, json);

+ 40 - 0
PAS/src/main/java/cn/cslg/pas/controller/ProjectUsedByTenantController.java

@@ -0,0 +1,40 @@
+package cn.cslg.pas.controller;
+
+import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.model.vo.ProjectSharedTenantVO;
+import cn.cslg.pas.common.model.vo.ProjectUsedByTenantVO;
+import cn.cslg.pas.service.ProjectUsedByTenantService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/7/28
+ */
+@Tag(name = "导出报表外部接口")
+@CrossOrigin
+@RestController
+@RequestMapping(Constants.API_VERSION_V2 + "/usedByTenant")
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class ProjectUsedByTenantController {
+    private final ProjectUsedByTenantService projectUsedByTenantService;
+
+    @Operation(summary = "查询")
+    @PostMapping("/query")
+    public List<ProjectUsedByTenantVO> projectUsedByTenant(@RequestBody List<Integer> tenantIds) throws IOException {
+        return projectUsedByTenantService.getProjectUsedByTenant(tenantIds);
+    }
+
+    @Operation(summary = "租户被分享专题库")
+    @PostMapping("/projectShared")
+    public List<ProjectSharedTenantVO> projectShared(@RequestBody List<Integer> tenantIds) throws IOException {
+        return projectUsedByTenantService.projectShared(tenantIds);
+    }
+
+}

+ 181 - 0
PAS/src/main/java/cn/cslg/pas/service/ProjectUsedByTenantService.java

@@ -0,0 +1,181 @@
+package cn.cslg.pas.service;
+
+import cn.cslg.pas.common.model.vo.ProjectSharedTenantVO;
+import cn.cslg.pas.common.model.vo.ProjectUsedByTenantVO;
+import cn.cslg.pas.common.model.vo.TenantVo;
+import cn.cslg.pas.domain.Project;
+import cn.cslg.pas.domain.ProjectPatentLink;
+import cn.cslg.pas.domain.ProjectUser;
+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.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/7/28
+ */
+@RequiredArgsConstructor
+@Slf4j
+@Service
+public class ProjectUsedByTenantService {
+    @Value("${authorUrl}")
+    private String PCSUrl;
+    private final ProjectService projectService;
+    private final ProjectPatentLinkService projectPatentLinkService;
+    private final ProjectUserService projectUserService;
+
+    /**
+     * 查询租户专题库使用情况
+     * @return
+     * @throws IOException
+     */
+    public List<ProjectUsedByTenantVO> getProjectUsedByTenant(List<Integer> tenantIds) throws IOException {
+        List<ProjectUsedByTenantVO> projectUsedByTenantVOS = new ArrayList<>();
+        //获取租户id和名称的集合
+        Map<Integer, String> tenantMap = this.getAllTenant(tenantIds);
+        tenantMap.forEach((key, value)->{
+            LambdaQueryWrapper<Project> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(Project::getTenantId,key);
+            //某一个租户id对应的专题库数量
+            Long count = projectService.count(queryWrapper);
+            Integer projectNum = Long.valueOf(count).intValue();
+            //专题库名称
+            List<Project> projects = projectService.list(queryWrapper);
+            if(projects.size() > 0){//租户下有专题库
+                //专题库id和名称组成map
+                Map<Integer, String> projectMaps = projects.stream().collect(Collectors.toMap(Project::getId, Project::getName));
+                //遍历
+                projectMaps.forEach((key1,value1)->{
+                    LambdaQueryWrapper<ProjectPatentLink> queryWrapper1 = new LambdaQueryWrapper<>();
+                    queryWrapper1.eq(ProjectPatentLink::getProjectId,key1);
+                    Long count1 = projectPatentLinkService.count(queryWrapper1);
+                    Integer patentNum = Long.valueOf(count1).intValue();
+                    ProjectUsedByTenantVO projectUsedByTenantVO = new ProjectUsedByTenantVO();
+                    projectUsedByTenantVO.setTenantName(value);
+                    projectUsedByTenantVO.setProjectNum(projectNum);
+                    projectUsedByTenantVO.setProjectId(key1);
+                    projectUsedByTenantVO.setProjectName(value1);
+                    projectUsedByTenantVO.setPatentNum(patentNum);
+                    projectUsedByTenantVOS.add(projectUsedByTenantVO);
+                });
+            } else {//租户下没有专题库
+                ProjectUsedByTenantVO projectUsedByTenantVO = new ProjectUsedByTenantVO();
+                projectUsedByTenantVO.setTenantName(value);
+                projectUsedByTenantVO.setProjectNum(0);
+                projectUsedByTenantVO.setProjectName(null);
+                projectUsedByTenantVO.setPatentNum(0);
+                projectUsedByTenantVOS.add(projectUsedByTenantVO);
+            }
+        });
+        return projectUsedByTenantVOS;
+    }
+
+    /**
+     * 查询所有租户
+     * @return
+     * @throws IOException
+     */
+    public Map<Integer, String> getAllTenant(List<Integer> tenantIds) throws IOException {
+        //调用权限系统查询租户信息接口
+        String str = this.getTenantFromPCS(tenantIds);
+        Gson gson = new Gson();
+        Type listType = new TypeToken<List<TenantVo>>(){}.getType();
+        List<TenantVo> tenantVos = gson.fromJson(str, listType);
+        Map<Integer,String> tenantMap = tenantVos.stream().collect(Collectors.toMap(TenantVo::getId, TenantVo::getTenantName));
+        return tenantMap;
+    }
+
+    /**
+     * 调用权限系统查询租户接口
+     * @return
+     * @throws IOException
+     */
+    public String getTenantFromPCS(List<Integer> tenantIds) throws IOException {
+        String param = new Gson().toJson(tenantIds);
+        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);
+        OkHttpClient okHttpClient = new OkHttpClient.Builder()
+                .connectTimeout(60, TimeUnit.SECONDS)
+                .writeTimeout(60, TimeUnit.SECONDS)
+                .readTimeout(60, TimeUnit.SECONDS)
+                .build();
+        Request request = new Request.Builder()
+                .url(PCSUrl + "/permission/api/tenant/getTenantIdAndName")
+                .post(requestBody)
+                .build();
+        return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+    }
+
+    /**
+     * 查询租户被分享的专题库名
+     * @return
+     * @throws IOException
+     */
+    public List<ProjectSharedTenantVO> projectShared(List<Integer> tenantIds) throws IOException {
+        List<ProjectSharedTenantVO> projectSharedTenantVOS = new ArrayList<>();
+        //获取租户id和名称的集合
+        Map<Integer, String> tenantMap = this.getAllTenant(tenantIds);
+        //遍历
+        tenantMap.forEach((key, value)->{
+            //根据租户id查询分享库中的专题库信息集合
+            LambdaQueryWrapper<ProjectUser> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(ProjectUser::getTenantId, key);
+            List<ProjectUser> projectUsers = projectUserService.list(queryWrapper);
+            //查询租户使用的专题库集合
+            LambdaQueryWrapper<Project> queryWrapper1 = new LambdaQueryWrapper<>();
+            queryWrapper1.eq(Project::getTenantId, key);
+//            List<Project> oldProjects = projectService.list(queryWrapper1);
+            //租户使用的专题库ids
+            List<Integer> oldProjectIds = projectService.list(queryWrapper1).stream().map(Project::getId).collect(Collectors.toList());
+            //过滤出分享库中 不在租户使用的专题库ids集合 (过滤条件:租户名下使用的专题库ids中不包含分享库中的专题库ids,如果包含则过滤掉)
+            List<Integer> ids = projectUsers.stream().filter(item -> !oldProjectIds.contains(item.getProjectId())).map(ProjectUser::getProjectId).collect(Collectors.toList());
+            if(ids.size() > 0) {
+                LambdaQueryWrapper<Project> queryWrapper2 = new LambdaQueryWrapper<>();
+                queryWrapper2.in(Project::getId,ids);
+                List<Project> projects = projectService.list(queryWrapper2);
+                if(projects.size() > 0) {
+                    //遍历专题库ids,取出专题库名称
+                    for(int i = 0; i < projects.size(); i++){
+                        ProjectSharedTenantVO projectSharedTenantVO = new ProjectSharedTenantVO();
+                        //租户名为value
+                        projectSharedTenantVO.setTenantName(value);
+                        //被分享专题库数量为ids的长度
+                        projectSharedTenantVO.setProjectNum(projects.size());
+                        //专题库名
+                        projectSharedTenantVO.setProjectName(projects.get(i).getName());
+                        projectSharedTenantVOS.add(projectSharedTenantVO);
+                    }
+                } else {//ids不为0,但是数据库中没有,脏数据容错
+                    ProjectSharedTenantVO projectSharedTenantVO = new ProjectSharedTenantVO();
+                    //租户名为value
+                    projectSharedTenantVO.setTenantName(value);
+                    projectSharedTenantVO.setProjectNum(0);
+                    projectSharedTenantVOS.add(projectSharedTenantVO);
+                }
+            } else {//专题库ids为0
+                ProjectSharedTenantVO projectSharedTenantVO = new ProjectSharedTenantVO();
+                //租户名为value
+                projectSharedTenantVO.setTenantName(value);
+                projectSharedTenantVO.setProjectNum(0);
+                projectSharedTenantVOS.add(projectSharedTenantVO);
+            }
+        });
+        return projectSharedTenantVOS;
+    }
+}

+ 1 - 0
PAS/src/main/java/cn/cslg/pas/service/RequestService.java

@@ -63,6 +63,7 @@ public class RequestService {
         map.put("uuid", uuid);
         map.put("username", username);
         map.put("password", password);
+        map.put("loginSystem", 1);
         JSONObject json = new JSONObject(map);
         RequestBody a = RequestBody.create(JSON1, String.valueOf(json));
         OkHttpClient okHttpClient = new OkHttpClient();