lixing 3 éve
szülő
commit
4c8f66a3c1
36 módosított fájl, 240 hozzáadás és 30 törlés
  1. 13 6
      pom.xml
  2. 5 5
      src/main/java/com/persagy/apm/report/common/config/FeignRequestHeaderInterceptor.java
  3. 30 0
      src/main/java/com/persagy/apm/report/common/config/TenantConfiguration.java
  4. 2 0
      src/main/java/com/persagy/apm/report/common/constants/FeignClientNameConstants.java
  5. 26 0
      src/main/java/com/persagy/apm/report/common/schedule/ReportGenerateFailScheduleTask.java
  6. 3 2
      src/main/java/com/persagy/apm/report/common/utils/HttpUtils.java
  7. 3 3
      src/main/java/com/persagy/apm/report/dependencies/dmpalarm/service/AlarmServiceImpl.java
  8. 3 4
      src/main/java/com/persagy/apm/report/dependencies/iotdataanalysis/service/impl/IDataAnalysisWebServiceImpl.java
  9. 7 0
      src/main/java/com/persagy/apm/report/dependencies/saasweb/client/SaasWebClient.java
  10. 14 0
      src/main/java/com/persagy/apm/report/dependencies/saasweb/model/vo/GroupCodeVO.java
  11. 8 0
      src/main/java/com/persagy/apm/report/dependencies/saasweb/service/ISaasWebService.java
  12. 15 0
      src/main/java/com/persagy/apm/report/dependencies/saasweb/service/impl/SaasWebClientWrapper.java
  13. 9 3
      src/main/java/com/persagy/apm/report/dependencies/saasweb/service/impl/SaasWebServiceImpl.java
  14. 1 0
      src/main/java/com/persagy/apm/report/detail/paragraphvalue/dao/ReportParagraphValueMapper.java
  15. 1 0
      src/main/java/com/persagy/apm/report/detail/paragraphvalue/model/ReportParagraphValue.java
  16. 3 0
      src/main/java/com/persagy/apm/report/detail/paragraphvalue/service/impl/ReportParagraphValueServiceImpl.java
  17. 2 0
      src/main/java/com/persagy/apm/report/indicator/manualfilling/dao/ManualFillingDataMapper.java
  18. 1 0
      src/main/java/com/persagy/apm/report/indicator/manualfilling/model/ManualFillingData.java
  19. 3 0
      src/main/java/com/persagy/apm/report/indicator/manualfilling/service/impl/ManualFillingDataServiceImpl.java
  20. 2 0
      src/main/java/com/persagy/apm/report/outline/dao/ReportOutlineMapper.java
  21. 1 0
      src/main/java/com/persagy/apm/report/outline/model/ReportOutline.java
  22. 6 6
      src/main/java/com/persagy/apm/report/outline/service/impl/GenerateReportThreadPool.java
  23. 3 1
      src/main/java/com/persagy/apm/report/outline/service/impl/ReportOutlineServiceImpl.java
  24. 2 0
      src/main/java/com/persagy/apm/report/userconfig/function/dao/FunctionMapper.java
  25. 1 0
      src/main/java/com/persagy/apm/report/userconfig/function/model/Function.java
  26. 3 0
      src/main/java/com/persagy/apm/report/userconfig/function/service/impl/FunctionServiceImpl.java
  27. 2 0
      src/main/java/com/persagy/apm/report/userconfig/functiongroup/dao/FunctionGroupMapper.java
  28. 1 0
      src/main/java/com/persagy/apm/report/userconfig/functiongroup/model/FunctionGroup.java
  29. 3 0
      src/main/java/com/persagy/apm/report/userconfig/functiongroup/service/impl/FunctionGroupServiceImpl.java
  30. 2 0
      src/main/java/com/persagy/apm/report/userconfig/paragraph/dao/ParagraphMapper.java
  31. 1 0
      src/main/java/com/persagy/apm/report/userconfig/paragraph/model/Paragraph.java
  32. 3 0
      src/main/java/com/persagy/apm/report/userconfig/paragraph/service/impl/ParagraphServiceImpl.java
  33. 2 0
      src/main/java/com/persagy/apm/report/userconfig/paragraphcustom/dao/ParagraphCustomMapper.java
  34. 1 0
      src/main/java/com/persagy/apm/report/userconfig/paragraphcustom/model/ParagraphCustom.java
  35. 3 0
      src/main/java/com/persagy/apm/report/userconfig/paragraphcustom/service/impl/ParagraphCustomServiceImpl.java
  36. 55 0
      src/main/resources/bootstrap.yml

+ 13 - 6
pom.xml

@@ -134,12 +134,6 @@
         <dependency>
             <groupId>com.persagy</groupId>
             <artifactId>apm-mybatis</artifactId>
-            <exclusions>
-                <exclusion>
-                    <groupId>com.baomidou</groupId>
-                    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
 
         <dependency>
@@ -147,5 +141,18 @@
             <artifactId>poi</artifactId>
             <version>4.1.2</version>
         </dependency>
+
+        <!--多租户改造-->
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>mybatis-tenant-datasource-db-starter</artifactId>
+            <version>1.1.4</version>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>transmittable-thread-local</artifactId>
+            <version>2.12.4</version>
+        </dependency>
+        <!--多租户改造-->
     </dependencies>
 </project>

+ 5 - 5
src/main/java/com/persagy/apm/report/common/config/FeignRequestHeaderInterceptor.java

@@ -1,5 +1,7 @@
 package com.persagy.apm.report.common.config;
 
+import com.persagy.apm.report.common.constants.FeignClientNameConstants;
+import com.persagy.framework.tenant.mybatis.datasource.db.holder.SaasContext;
 import feign.RequestInterceptor;
 import feign.RequestTemplate;
 import org.springframework.beans.factory.annotation.Value;
@@ -11,14 +13,12 @@ import org.springframework.context.annotation.Configuration;
  * @author lixing
  * @version V1.0 2022/4/23 19:31
  **/
-@Configuration
+// TODO: 2022/5/9 移除此类
+//@Configuration
 public class FeignRequestHeaderInterceptor implements RequestInterceptor {
 
-    @Value("${defaultGroupCode:YL}")
-    private String defaultGroupCode;
-
     @Override
     public void apply(RequestTemplate template) {
-        template.header("groupCode", defaultGroupCode);
+//        template.header(FeignClientNameConstants.HEADER_KEY_GROUP_CODE, SaasContext.getContextGroupCode());
     }
 }

+ 30 - 0
src/main/java/com/persagy/apm/report/common/config/TenantConfiguration.java

@@ -0,0 +1,30 @@
+package com.persagy.apm.report.common.config;
+
+import com.persagy.framework.tenant.mybatis.datasource.db.provider.SimpleJdbcTenantProvider;
+import com.persagy.framework.tenant.mybatis.datasource.db.provider.TenantProvider;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import com.persagy.framework.tenant.mybatis.datasource.db.config.TenantDataSourceDbProperties;
+
+import javax.annotation.Resource;
+
+/**
+ * 多租户配置类
+ *
+ * @author lixing
+ * @version V1.0 2022/5/9 14:40
+ **/
+@Configuration
+public class TenantConfiguration {
+
+    @Resource
+    private DataSourceProperties dataSourceProperties;
+    @Resource
+    private TenantDataSourceDbProperties tenantBasicsProperties;
+
+    @Bean
+    public TenantProvider tenantProvider() {
+        return new SimpleJdbcTenantProvider(tenantBasicsProperties,dataSourceProperties);
+    }
+}

+ 2 - 0
src/main/java/com/persagy/apm/report/common/constants/FeignClientNameConstants.java

@@ -21,4 +21,6 @@ public class FeignClientNameConstants {
 
     public static final String ENERGY_EFFICIENCY = "energy-efficiency";
 
+    public static final String HEADER_KEY_GROUP_CODE = "groupCode";
+
 }

+ 26 - 0
src/main/java/com/persagy/apm/report/common/schedule/ReportGenerateFailScheduleTask.java

@@ -2,10 +2,13 @@ package com.persagy.apm.report.common.schedule;
 
 
 import com.persagy.apm.report.common.utils.DateUtils;
+import com.persagy.apm.report.dependencies.saasweb.model.vo.GroupCodeVO;
+import com.persagy.apm.report.dependencies.saasweb.service.ISaasWebService;
 import com.persagy.apm.report.outline.constants.enums.ReportStateEnum;
 import com.persagy.apm.report.outline.model.ReportOutline;
 import com.persagy.apm.report.outline.model.dto.QueryReportOutlineDTO;
 import com.persagy.apm.report.outline.service.IReportOutlineService;
+import com.persagy.framework.tenant.mybatis.datasource.db.holder.SaasContext;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -32,6 +35,9 @@ public class ReportGenerateFailScheduleTask {
     private int maxGenerateMinutes;
     @Value("${failReportPeriod:600000}")
     private String failReportPeriod;
+    
+    @Autowired
+    private ISaasWebService saasWebService;
 
     /**
      * 定时更新还未生成成功的报告状态为生成失败(目的是为了处理宕机引起的报告状态一直处于生成中的问题)
@@ -42,6 +48,26 @@ public class ReportGenerateFailScheduleTask {
     @Scheduled(fixedRateString = "${failReportPeriod:600000}")
     public void checkAndFailReportGenerateState() {
         log.info("开始检查生成时间超过{}ms, 依然处于生成中的报告", failReportPeriod);
+        List<GroupCodeVO> groupList = saasWebService.getGroupList();
+        for (GroupCodeVO groupCodeVO : groupList) {
+            SaasContext.setContextGroupCode(groupCodeVO.getCode());
+            try {
+                queryAndFailReports();
+            } catch (Exception e) {
+                log.error("{}集团更新未生成成功的报告状态为生成失败的定时任务执行失败", groupCodeVO.getCode(), e);
+            }
+        }
+
+    }
+
+    /**
+     * 定时更新还未生成成功的报告状态为生成失败
+     * 根据线程中的集团编码更新对应集团的数据,一次只能更新一个集团的数据
+     *
+     * @author lixing
+     * @version V1.0 2021/8/9 12:01 下午
+     */
+    private void queryAndFailReports() {
         // 查询生成状态为生成中的报告
         QueryReportOutlineDTO queryReportOutlineDTO = new QueryReportOutlineDTO();
         queryReportOutlineDTO.setStatus(ReportStateEnum.BUILDING.getType());

+ 3 - 2
src/main/java/com/persagy/apm/report/common/utils/HttpUtils.java

@@ -1,5 +1,6 @@
 package com.persagy.apm.report.common.utils;
 
+import com.persagy.framework.tenant.mybatis.datasource.db.holder.SaasContext;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpVersion;
 import org.apache.http.client.config.RequestConfig;
@@ -34,12 +35,12 @@ public class HttpUtils {
                 .setDefaultRequestConfig(requestConfig).build();
     }
 
-    public static String postJson(String url, String body, String groupCode) throws Exception {
+    public static String postJson(String url, String body) throws Exception {
         HttpPost httpPost = new HttpPost(url);
         //使用http1.0协议
         httpPost.setProtocolVersion(HttpVersion.HTTP_1_0);
         httpPost.addHeader("Content-type", "application/json");
-        httpPost.addHeader("groupCode", groupCode);
+        httpPost.addHeader("groupCode", SaasContext.getContextGroupCode());
         httpPost.setEntity(new StringEntity(body, Charset.forName("UTF-8")));
         CloseableHttpResponse response = HTTP_CLIENT.execute(httpPost);
         int statusCode = response.getStatusLine().getStatusCode();

+ 3 - 3
src/main/java/com/persagy/apm/report/dependencies/dmpalarm/service/AlarmServiceImpl.java

@@ -10,6 +10,7 @@ import com.persagy.apm.report.dependencies.dmpalarm.model.AlarmRecord;
 import com.persagy.apm.report.dependencies.dmpalarm.model.dto.AlarmRecordCriteria;
 import com.persagy.apm.report.dependencies.dmpalarm.model.dto.AlarmUrlParam;
 import com.persagy.apm.report.dependencies.dmpalarm.model.dto.QueryAlarmRecordDTO;
+import com.persagy.framework.tenant.mybatis.datasource.db.holder.SaasContext;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -27,8 +28,6 @@ import java.util.List;
 public class AlarmServiceImpl {
     @Autowired
     DmpAlarmClient dmpAlarmClient;
-    @Value("${group.code}")
-    private String groupCode;
 
     /**
      * 根据项目id,报警条目和月份查询报警
@@ -43,7 +42,8 @@ public class AlarmServiceImpl {
     public List<AlarmRecord> queryAlarmByProjectIdAndItemCodesAndMonth(
             String projectId, List<String> itemCodes, Date month) {
         // 查询条件 params
-        AlarmUrlParam alarmUrlParam = new AlarmUrlParam(DataConstants.USER_ID, groupCode, projectId, "0");
+        AlarmUrlParam alarmUrlParam = new AlarmUrlParam(
+                DataConstants.USER_ID, SaasContext.getContextGroupCode(), projectId, "0");
         // 查询条件 body
         AlarmRecordCriteria alarmRecordCriteria = new AlarmRecordCriteria();
         alarmRecordCriteria.setItemCode(itemCodes);

+ 3 - 4
src/main/java/com/persagy/apm/report/dependencies/iotdataanalysis/service/impl/IDataAnalysisWebServiceImpl.java

@@ -6,6 +6,7 @@ import com.persagy.apm.report.common.utils.DataUtils;
 import com.persagy.apm.report.common.utils.DateUtils;
 import com.persagy.apm.report.common.utils.HttpUtils;
 import com.persagy.apm.report.dependencies.iotdataanalysis.service.IDataAnalysisWebService;
+import com.persagy.framework.tenant.mybatis.datasource.db.holder.SaasContext;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
 import org.assertj.core.util.Lists;
@@ -22,8 +23,6 @@ public class IDataAnalysisWebServiceImpl implements IDataAnalysisWebService {
 
     @Value("${iot.data.analysis.url}")
     private String iotDataAnalysisUrl;
-    @Value("${group.code}")
-    private String groupCode;
 
     @Override
     public Double getTargetValue(String projectId, Date date, String targetCode) {
@@ -32,7 +31,7 @@ public class IDataAnalysisWebServiceImpl implements IDataAnalysisWebService {
             paramObject.put("userId", DataConstants.USER_ID);
             //                        paramObject.put("groupCode", "BL");
             //                        projectId = "Pj1101080259";
-            paramObject.put("groupCode", groupCode);
+            paramObject.put("groupCode", SaasContext.getContextGroupCode());
             paramObject.put("projectIdList", Lists.newArrayList(projectId));
             // 加入分页条件,接口要求分页条件必传
             paramObject.put("pageIndex", 1);
@@ -42,7 +41,7 @@ public class IDataAnalysisWebServiceImpl implements IDataAnalysisWebService {
             paramObject.put("alarmStartTime", startTime);
             paramObject.put("alarmEndTime", endTime);
             String url = iotDataAnalysisUrl + "/alarm/show/view/queryList";
-            String response = HttpUtils.postJson(url, paramObject.toString(), groupCode);
+            String response = HttpUtils.postJson(url, paramObject.toString());
             JSONObject responseObject = JSONObject.parseObject(response);
             if (DataConstants.SUCCESS.equals(responseObject.getString("respMsg"))) {
                 List<Map> content = (List<Map>) responseObject.get("content");

+ 7 - 0
src/main/java/com/persagy/apm/report/dependencies/saasweb/client/SaasWebClient.java

@@ -9,6 +9,7 @@ import feign.Headers;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
 /**
@@ -107,4 +108,10 @@ public interface SaasWebClient {
 
     @GetMapping("test")
     void test();
+
+    /**
+     *查询集团编码
+     */
+    @PostMapping("/rwd/groupAndSchema/admin/queryGroupList")
+    PoemsFeignResponse<GroupCodeVO> queryGroupList(@RequestBody String jsonString);
 }

+ 14 - 0
src/main/java/com/persagy/apm/report/dependencies/saasweb/model/vo/GroupCodeVO.java

@@ -0,0 +1,14 @@
+package com.persagy.apm.report.dependencies.saasweb.model.vo;
+
+import lombok.Data;
+
+/**
+ * 集团编码VO类
+ *
+ * @author lixing
+ * @version V1.0 2022/5/10 10:24
+ **/
+@Data
+public class GroupCodeVO {
+    private String code;
+}

+ 8 - 0
src/main/java/com/persagy/apm/report/dependencies/saasweb/service/ISaasWebService.java

@@ -309,4 +309,12 @@ public interface ISaasWebService {
      * @version V1.0 2021/7/22 10:21 上午
      */
     List<PartitionVO> getSonAreas(List<String> buildingTypes, String areaId);
+
+    /**
+     * 获取集团列表
+     *
+     * @return 集团列表
+     * @author lixing 2022/5/10 10:31
+     */
+    List<GroupCodeVO> getGroupList();
 }

+ 15 - 0
src/main/java/com/persagy/apm/report/dependencies/saasweb/service/impl/SaasWebClientWrapper.java

@@ -1,6 +1,7 @@
 package com.persagy.apm.report.dependencies.saasweb.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.persagy.apm.common.model.dto.PoemsFeignBaseDTO;
 import com.persagy.apm.common.response.PoemsFeignResponse;
 import com.persagy.apm.report.dependencies.saasweb.client.SaasWebClient;
@@ -124,4 +125,18 @@ public class SaasWebClientWrapper {
     public PoemsFeignResponse<FunctionTypeVO> getAllProjectFunctionTypes(PoemsFeignBaseDTO poemsFeignBaseDTO) {
         return saasWebClient.getAllProjectFunctionTypes(JSON.toJSONString(poemsFeignBaseDTO));
     }
+
+    /**
+     * 获取集团列表
+     *
+     * @return 集团列表
+     * @author lixing 2022/5/10 10:31
+     */
+    public PoemsFeignResponse<GroupCodeVO> queryGroupList() {
+        JSONObject body = new JSONObject();
+        // 1为生效
+        body.put("status", 1);
+        return saasWebClient.queryGroupList(body.toJSONString());
+    }
+
 }

+ 9 - 3
src/main/java/com/persagy/apm/report/dependencies/saasweb/service/impl/SaasWebServiceImpl.java

@@ -3,7 +3,8 @@ package com.persagy.apm.report.dependencies.saasweb.service.impl;
 import com.google.common.collect.Maps;
 import com.persagy.apm.common.model.dto.PoemsFeignBaseDTO;
 import com.persagy.apm.common.response.PoemsFeignResponse;
-import com.persagy.apm.report.userconfig.reporttype.service.IReportTypeService;
+import com.persagy.apm.report.common.utils.DataUtils;
+import com.persagy.apm.report.common.utils.DateUtils;
 import com.persagy.apm.report.dependencies.saasweb.constants.SaaswebConstants;
 import com.persagy.apm.report.dependencies.saasweb.constants.enums.AreaTypeEnum;
 import com.persagy.apm.report.dependencies.saasweb.model.ConvertSaasWebTool;
@@ -12,8 +13,7 @@ import com.persagy.apm.report.dependencies.saasweb.model.dto.QueryPartitionDTO;
 import com.persagy.apm.report.dependencies.saasweb.model.dto.QueryProjectDTO;
 import com.persagy.apm.report.dependencies.saasweb.model.vo.*;
 import com.persagy.apm.report.dependencies.saasweb.service.ISaasWebService;
-import com.persagy.apm.report.common.utils.DataUtils;
-import com.persagy.apm.report.common.utils.DateUtils;
+import com.persagy.apm.report.userconfig.reporttype.service.IReportTypeService;
 import io.swagger.annotations.Api;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
@@ -996,4 +996,10 @@ public class SaasWebServiceImpl implements ISaasWebService {
         }
         return result;
     }
+
+    @Override
+    public List<GroupCodeVO> getGroupList() {
+        PoemsFeignResponse<GroupCodeVO> response = saasWebClientWrapper.queryGroupList();
+        return response.getContent();
+    }
 }

+ 1 - 0
src/main/java/com/persagy/apm/report/detail/paragraphvalue/dao/ReportParagraphValueMapper.java

@@ -11,6 +11,7 @@ import org.apache.ibatis.annotations.Mapper;
  * @version V1.0 2021-07-14 16:59:57
  */
 @Mapper
+
 public interface ReportParagraphValueMapper extends BaseMapper<ReportParagraphValue> {
 
 }

+ 1 - 0
src/main/java/com/persagy/apm/report/detail/paragraphvalue/model/ReportParagraphValue.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
 import com.persagy.apm.report.detail.model.vo.AttrValueVO;
 import com.persagy.apm.report.detail.paragraphvalue.model.vo.ParagraphContentVO;
+import com.persagy.framework.tenant.mybatis.datasource.db.annotation.Db;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;

+ 3 - 0
src/main/java/com/persagy/apm/report/detail/paragraphvalue/service/impl/ReportParagraphValueServiceImpl.java

@@ -1,5 +1,6 @@
 package com.persagy.apm.report.detail.paragraphvalue.service.impl;
 
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.persagy.apm.common.context.AppContext;
 import com.persagy.apm.report.detail.model.vo.AttrValueVO;
@@ -7,6 +8,7 @@ import com.persagy.apm.report.detail.paragraphvalue.dao.ReportParagraphValueMapp
 import com.persagy.apm.report.detail.paragraphvalue.model.vo.ReportParagraphValueItemVO;
 import com.persagy.apm.report.detail.paragraphvalue.service.IReportParagraphValueService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.persagy.framework.tenant.mybatis.datasource.db.config.DsThreadLocalProcessor;
 import org.springframework.stereotype.Service;
 import org.apache.commons.lang.StringUtils;
 import com.persagy.apm.common.constant.enums.ValidEnum;
@@ -29,6 +31,7 @@ import org.springframework.util.CollectionUtils;
  * @version V1.0 2021-07-14 16:59:57
  */
 @Service
+@DS(DsThreadLocalProcessor.HEADER_PREFIX)
 public class ReportParagraphValueServiceImpl extends ServiceImpl<ReportParagraphValueMapper, ReportParagraphValue>
         implements IReportParagraphValueService {
 

+ 2 - 0
src/main/java/com/persagy/apm/report/indicator/manualfilling/dao/ManualFillingDataMapper.java

@@ -2,6 +2,7 @@ package com.persagy.apm.report.indicator.manualfilling.dao;
 
 import com.persagy.apm.report.indicator.manualfilling.model.ManualFillingData;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.framework.tenant.mybatis.datasource.db.annotation.Db;
 import org.apache.ibatis.annotations.Mapper;
 
 /**
@@ -11,6 +12,7 @@ import org.apache.ibatis.annotations.Mapper;
  * @version V1.0 2021-07-27 09:52:20
  */
 @Mapper
+@Db("${persagy.db.report_factory}")
 public interface ManualFillingDataMapper extends BaseMapper<ManualFillingData> {
 
 }

+ 1 - 0
src/main/java/com/persagy/apm/report/indicator/manualfilling/model/ManualFillingData.java

@@ -1,5 +1,6 @@
 package com.persagy.apm.report.indicator.manualfilling.model;
 
+import com.persagy.framework.tenant.mybatis.datasource.db.annotation.Db;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;

+ 3 - 0
src/main/java/com/persagy/apm/report/indicator/manualfilling/service/impl/ManualFillingDataServiceImpl.java

@@ -1,5 +1,6 @@
 package com.persagy.apm.report.indicator.manualfilling.service.impl;
 
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -16,6 +17,7 @@ import com.persagy.apm.report.indicator.manualfilling.model.dto.PageQueryManualF
 import com.persagy.apm.report.indicator.manualfilling.model.dto.QueryManualFillingDataDTO;
 import com.persagy.apm.report.indicator.manualfilling.model.dto.UpdateManualFillingDataDTO;
 import com.persagy.apm.report.indicator.manualfilling.service.IManualFillingDataService;
+import com.persagy.framework.tenant.mybatis.datasource.db.config.DsThreadLocalProcessor;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -30,6 +32,7 @@ import java.util.List;
  * @version V1.0 2021-07-27 09:52:19
  */
 @Service
+@DS(DsThreadLocalProcessor.HEADER_PREFIX)
 public class ManualFillingDataServiceImpl extends ServiceImpl<ManualFillingDataMapper, ManualFillingData>
         implements IManualFillingDataService {
 

+ 2 - 0
src/main/java/com/persagy/apm/report/outline/dao/ReportOutlineMapper.java

@@ -2,6 +2,7 @@ package com.persagy.apm.report.outline.dao;
 
 import com.persagy.apm.report.outline.model.ReportOutline;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.framework.tenant.mybatis.datasource.db.annotation.Db;
 import org.apache.ibatis.annotations.Mapper;
 
 /**
@@ -11,6 +12,7 @@ import org.apache.ibatis.annotations.Mapper;
  * @version V1.0 2021-05-17 11:09:38
  */
 @Mapper
+@Db("${persagy.db.report_factory}")
 public interface ReportOutlineMapper extends BaseMapper<ReportOutline> {
 
 }

+ 1 - 0
src/main/java/com/persagy/apm/report/outline/model/ReportOutline.java

@@ -3,6 +3,7 @@ package com.persagy.apm.report.outline.model;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
+import com.persagy.framework.tenant.mybatis.datasource.db.annotation.Db;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;

+ 6 - 6
src/main/java/com/persagy/apm/report/outline/service/impl/GenerateReportThreadPool.java

@@ -30,19 +30,19 @@ public class GenerateReportThreadPool {
      */
     private final Integer maxGenerateTaskCount = 1000;
 
-    private final ExecutorService generateReportEs;
-    private final ExecutorService listenGenerateResultEs;
+    private final ExecutorService generateReportExecutor;
+    private final ExecutorService listenGenerateResultExecutor;
 
     public GenerateReportThreadPool() {
         // 初始化生成报告任务线程池
-        generateReportEs = ExecutorBuilder.create()
+        generateReportExecutor = ExecutorBuilder.create()
                 .setCorePoolSize(5)
                 .setMaxPoolSize(10)
                 .setWorkQueue(new LinkedBlockingQueue<>(maxGenerateTaskCount))
                 .setHandler(new ThreadPoolExecutor.AbortPolicy())
                 .build();
         // 初始化监测报告生成结果线程池
-        listenGenerateResultEs = ExecutorBuilder.create()
+        listenGenerateResultExecutor = ExecutorBuilder.create()
                 .setCorePoolSize(5)
                 .setMaxPoolSize(10)
                 .setWorkQueue(new LinkedBlockingQueue<>(maxGenerateTaskCount + 200))
@@ -71,8 +71,8 @@ public class GenerateReportThreadPool {
         });
 
         try {
-            generateReportEs.execute(future);
-            listenGenerateResultEs.execute(() -> {
+            generateReportExecutor.execute(future);
+            listenGenerateResultExecutor.execute(() -> {
                 try {
                     future.get(maxGenerateMinutes, TimeUnit.MINUTES);
                 } catch (InterruptedException | ExecutionException | TimeoutException e) {

+ 3 - 1
src/main/java/com/persagy/apm/report/outline/service/impl/ReportOutlineServiceImpl.java

@@ -1,5 +1,6 @@
 package com.persagy.apm.report.outline.service.impl;
 
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -39,6 +40,7 @@ import com.persagy.apm.report.userconfig.reporttype.model.ReportType;
 import com.persagy.apm.report.userconfig.reporttype.model.vo.ResponseReportTypeListItemVO;
 import com.persagy.apm.report.userconfig.reporttype.service.IReportTypeService;
 import com.persagy.common.exception.BusinessException;
+import com.persagy.framework.tenant.mybatis.datasource.db.config.DsThreadLocalProcessor;
 import org.apache.commons.lang.StringUtils;
 import org.assertj.core.util.Lists;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -50,7 +52,6 @@ import java.text.Collator;
 import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.Comparator;
-import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -61,6 +62,7 @@ import java.util.stream.Collectors;
  * @version V1.0 2021-05-17 11:09:37
  */
 @Service
+@DS(DsThreadLocalProcessor.HEADER_PREFIX)
 public class ReportOutlineServiceImpl extends ServiceImpl<ReportOutlineMapper, ReportOutline>
         implements IReportOutlineService {
     @Autowired

+ 2 - 0
src/main/java/com/persagy/apm/report/userconfig/function/dao/FunctionMapper.java

@@ -2,6 +2,7 @@ package com.persagy.apm.report.userconfig.function.dao;
 
 import com.persagy.apm.report.userconfig.function.model.Function;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.framework.tenant.mybatis.datasource.db.annotation.Db;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
@@ -14,6 +15,7 @@ import java.util.Map;
  * @version V1.0 2021-07-23 17:55:18
  */
 @Mapper
+@Db("${persagy.db.report_factory}")
 public interface FunctionMapper extends BaseMapper<Function> {
     /**
      * 根据指标定义查询符合条件的指标

+ 1 - 0
src/main/java/com/persagy/apm/report/userconfig/function/model/Function.java

@@ -1,5 +1,6 @@
 package com.persagy.apm.report.userconfig.function.model;
 
+import com.persagy.framework.tenant.mybatis.datasource.db.annotation.Db;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;

+ 3 - 0
src/main/java/com/persagy/apm/report/userconfig/function/service/impl/FunctionServiceImpl.java

@@ -1,9 +1,11 @@
 package com.persagy.apm.report.userconfig.function.service.impl;
 
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.persagy.apm.common.context.AppContext;
 import com.persagy.apm.report.userconfig.function.dao.FunctionMapper;
 import com.persagy.apm.report.userconfig.function.service.IFunctionService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.persagy.framework.tenant.mybatis.datasource.db.config.DsThreadLocalProcessor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.apache.commons.lang.StringUtils;
@@ -28,6 +30,7 @@ import org.springframework.util.CollectionUtils;
  * @version V1.0 2021-07-23 17:55:17
  */
 @Service
+@DS(DsThreadLocalProcessor.HEADER_PREFIX)
 public class FunctionServiceImpl extends ServiceImpl<FunctionMapper, Function>
         implements IFunctionService {
     @Autowired

+ 2 - 0
src/main/java/com/persagy/apm/report/userconfig/functiongroup/dao/FunctionGroupMapper.java

@@ -2,6 +2,7 @@ package com.persagy.apm.report.userconfig.functiongroup.dao;
 
 import com.persagy.apm.report.userconfig.functiongroup.model.FunctionGroup;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.framework.tenant.mybatis.datasource.db.annotation.Db;
 import org.apache.ibatis.annotations.Mapper;
 
 /**
@@ -11,6 +12,7 @@ import org.apache.ibatis.annotations.Mapper;
  * @version V1.0 2021-05-20 19:06:29
  */
 @Mapper
+@Db("${persagy.db.report_factory}")
 public interface FunctionGroupMapper extends BaseMapper<FunctionGroup> {
 
 }

+ 1 - 0
src/main/java/com/persagy/apm/report/userconfig/functiongroup/model/FunctionGroup.java

@@ -1,6 +1,7 @@
 package com.persagy.apm.report.userconfig.functiongroup.model;
 
 import com.persagy.apm.common.constant.enums.ValidEnum;
+import com.persagy.framework.tenant.mybatis.datasource.db.annotation.Db;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;

+ 3 - 0
src/main/java/com/persagy/apm/report/userconfig/functiongroup/service/impl/FunctionGroupServiceImpl.java

@@ -1,5 +1,6 @@
 package com.persagy.apm.report.userconfig.functiongroup.service.impl;
 
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -16,6 +17,7 @@ import com.persagy.apm.report.userconfig.functiongroup.model.dto.PageQueryFuncti
 import com.persagy.apm.report.userconfig.functiongroup.model.dto.QueryFunctionGroupDTO;
 import com.persagy.apm.report.userconfig.functiongroup.model.dto.UpdateFunctionGroupDTO;
 import com.persagy.apm.report.userconfig.functiongroup.service.IFunctionGroupService;
+import com.persagy.framework.tenant.mybatis.datasource.db.config.DsThreadLocalProcessor;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -29,6 +31,7 @@ import java.util.List;
  * @version V1.0 2021-05-20 19:06:29
  */
 @Service
+@DS(DsThreadLocalProcessor.HEADER_PREFIX)
 public class FunctionGroupServiceImpl extends ServiceImpl<FunctionGroupMapper, FunctionGroup>
         implements IFunctionGroupService {
 

+ 2 - 0
src/main/java/com/persagy/apm/report/userconfig/paragraph/dao/ParagraphMapper.java

@@ -2,6 +2,7 @@ package com.persagy.apm.report.userconfig.paragraph.dao;
 
 import com.persagy.apm.report.userconfig.paragraph.model.Paragraph;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.framework.tenant.mybatis.datasource.db.annotation.Db;
 import org.apache.ibatis.annotations.Mapper;
 
 /**
@@ -11,6 +12,7 @@ import org.apache.ibatis.annotations.Mapper;
  * @version V1.0 2021-07-15 17:46:12
  */
 @Mapper
+@Db("${persagy.db.report_factory}")
 public interface ParagraphMapper extends BaseMapper<Paragraph> {
 
 }

+ 1 - 0
src/main/java/com/persagy/apm/report/userconfig/paragraph/model/Paragraph.java

@@ -1,5 +1,6 @@
 package com.persagy.apm.report.userconfig.paragraph.model;
 
+import com.persagy.framework.tenant.mybatis.datasource.db.annotation.Db;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;

+ 3 - 0
src/main/java/com/persagy/apm/report/userconfig/paragraph/service/impl/ParagraphServiceImpl.java

@@ -1,5 +1,6 @@
 package com.persagy.apm.report.userconfig.paragraph.service.impl;
 
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -19,6 +20,7 @@ import com.persagy.apm.report.userconfig.paragraph.model.dto.UpdateParagraphDTO;
 import com.persagy.apm.report.userconfig.paragraph.service.IParagraphService;
 import com.persagy.apm.report.userconfig.pargraphdefine.model.ParagraphDefine;
 import com.persagy.apm.report.userconfig.pargraphdefine.service.IParagraphDefineService;
+import com.persagy.framework.tenant.mybatis.datasource.db.config.DsThreadLocalProcessor;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -33,6 +35,7 @@ import java.util.List;
  * @version V1.0 2021-07-15 17:46:12
  */
 @Service
+@DS(DsThreadLocalProcessor.HEADER_PREFIX)
 public class ParagraphServiceImpl extends ServiceImpl<ParagraphMapper, Paragraph>
         implements IParagraphService {
     @Autowired

+ 2 - 0
src/main/java/com/persagy/apm/report/userconfig/paragraphcustom/dao/ParagraphCustomMapper.java

@@ -2,6 +2,7 @@ package com.persagy.apm.report.userconfig.paragraphcustom.dao;
 
 import com.persagy.apm.report.userconfig.paragraphcustom.model.ParagraphCustom;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.framework.tenant.mybatis.datasource.db.annotation.Db;
 import org.apache.ibatis.annotations.Mapper;
 
 /**
@@ -11,6 +12,7 @@ import org.apache.ibatis.annotations.Mapper;
  * @version V1.0 2021-07-15 18:12:05
  */
 @Mapper
+@Db("${persagy.db.report_factory}")
 public interface ParagraphCustomMapper extends BaseMapper<ParagraphCustom> {
 
 }

+ 1 - 0
src/main/java/com/persagy/apm/report/userconfig/paragraphcustom/model/ParagraphCustom.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
 import com.persagy.apm.report.detail.model.vo.AttrDefineVO;
+import com.persagy.framework.tenant.mybatis.datasource.db.annotation.Db;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;

+ 3 - 0
src/main/java/com/persagy/apm/report/userconfig/paragraphcustom/service/impl/ParagraphCustomServiceImpl.java

@@ -1,9 +1,11 @@
 package com.persagy.apm.report.userconfig.paragraphcustom.service.impl;
 
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.persagy.apm.common.context.AppContext;
 import com.persagy.apm.report.userconfig.paragraphcustom.dao.ParagraphCustomMapper;
 import com.persagy.apm.report.userconfig.paragraphcustom.service.IParagraphCustomService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.persagy.framework.tenant.mybatis.datasource.db.config.DsThreadLocalProcessor;
 import org.springframework.stereotype.Service;
 import org.apache.commons.lang.StringUtils;
 import com.persagy.apm.common.constant.enums.ValidEnum;
@@ -26,6 +28,7 @@ import org.springframework.util.CollectionUtils;
  * @version V1.0 2021-07-15 18:12:04
  */
 @Service
+@DS(DsThreadLocalProcessor.HEADER_PREFIX)
 public class ParagraphCustomServiceImpl extends ServiceImpl<ParagraphCustomMapper, ParagraphCustom>
         implements IParagraphCustomService {
 

+ 55 - 0
src/main/resources/bootstrap.yml

@@ -1,6 +1,61 @@
 spring:
   application:
     name: report-factory
+  autoconfigure:
+    exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
+  datasource:
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    url: jdbc:mysql://${PERSAGY_REPORT_FACTORY_MYSQL_URL}/${persagy.db.tenant}?useSSL=false&useUnicode=false&autoReconnect=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
+    username: ${PERSAGY_MYSQL_USERNAME}
+    password: ${PERSAGY_MYSQL_PASSWORD}
+    # 指定使用 Druid 数据源
+    type: com.alibaba.druid.pool.DruidDataSource
+    druid:
+      initial-size: 50
+      min-idle: 100
+      max-active: 200
+      max-wait: 600000
+      pool-prepared-statements: true
+      max-pool-prepared-statement-per-connection-size: 20
+      validation-query: SELECT 1
+      test-while-idle: true
+      test-on-borrow: false
+      test-on-return: false
+      time-between-eviction-runs-millis: 5000
+      min-evictable-idle-time-millis: 100000
+      max-evictable-idle-time-millis: 200000
+      keep-alive: true
+      filters: stat,slf4j
+      remove-abandoned: true
+      remove-abandoned-timeout: 180
+      log-abandoned: true
+    dynamic:
+      #设置默认的数据源或者数据源组,默认值即为 master
+      primary: master
+      datasource:
+        master:
+          driverClassName: com.mysql.cj.jdbc.Driver
+          url: jdbc:mysql://${PERSAGY_REPORT_FACTORY_MYSQL_URL}/${persagy.db.report_factory}?useSSL=false&useUnicode=false&autoReconnect=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
+          username: ${PERSAGY_MYSQL_USERNAME}
+          password: ${PERSAGY_MYSQL_PASSWORD}
+
+
+tenant:
+  switchover:
+    datasource-db:
+      enable: true
+      interceptor-by-header: true
+      provider-by-jdbc-query-sql: select id,name,db_name,alias from t_tenant
+      feign-interceptor-enable: true
+package:
+  scan:
+    # 实体包路径
+    path: com.persagy.databillboardindicator.domain.pojo
+    # 是否进行扫描,默认true
+    flag: true
+    # 是否进行扫描对比,默认true
+    detailed: true
+
 
 EUREKA_CLIENT_DEFAULT_ZONE: http://frame:4M7RAaRV0SGbg36@bz-develop.persagy.com/integrated-eureka/eureka/
 #EUREKA_CLIENT_DEFAULT_ZONE: http://frame:Hv7MpxJ5pBckigB@47.117.93.148/integrated-eureka/eureka/