miaolijing 2 лет назад
Родитель
Сommit
12d7cddf68

+ 17 - 1
pom.xml

@@ -4,7 +4,6 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
 
-
     <parent>
         <groupId>com.persagy</groupId>
         <artifactId>apm-package</artifactId>
@@ -200,5 +199,22 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-amqp</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>mybatis-tenant-datasource-db-starter</artifactId>
+            <version>1.1.4</version>
+        </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
+            <version>3.4.1</version>
+        </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.4.1</version>
+        </dependency>
+
     </dependencies>
 </project>

+ 36 - 0
src/main/java/com/persagy/apm/diagnose/config/FeignConfiguration.java

@@ -0,0 +1,36 @@
+package com.persagy.apm.diagnose.config;
+
+import feign.RequestInterceptor;
+import feign.RequestTemplate;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Enumeration;
+
+/**
+ * @author yuecaipu
+ * @version 1.0
+ * @description: Feign调用Header头参数传递
+ * @date 2022/3/21 15:33
+ */
+@Configuration
+public class FeignConfiguration implements RequestInterceptor {
+    @Override
+    public void apply(RequestTemplate requestTemplate) {
+        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
+                .getRequestAttributes();
+        if (attributes != null){
+            HttpServletRequest request = attributes.getRequest();
+            Enumeration<String> headerNames = request.getHeaderNames();
+            if (headerNames != null) {
+                while (headerNames.hasMoreElements()) {
+                    String name = headerNames.nextElement();
+                    String values = request.getHeader(name);
+                    requestTemplate.header(name, values);
+                }
+            }
+        }
+    }
+}

+ 3 - 1
src/main/java/com/persagy/apm/diagnose/config/RabbitConfig.java

@@ -1,6 +1,7 @@
 package com.persagy.apm.diagnose.config;
 
 import com.alibaba.fastjson.JSONArray;
+import com.persagy.framework.tenant.mybatis.datasource.db.holder.SaasContext;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.amqp.core.Binding;
 import org.springframework.amqp.core.BindingBuilder;
@@ -51,7 +52,8 @@ public class RabbitConfig {
     public void sendMsg(JSONArray contentArray) {
         CorrelationData correlationId = new CorrelationData(UUID.randomUUID().toString());
         //把消息放入routingKey_indicator对应的队列当中去,对应的是队列QUEUE_indicator
-        rabbitTemplate.convertAndSend(exchange, alarmDataRoutingKey, contentArray, correlationId);
+        String routingKey = SaasContext.getContextGroupCode()+"-"+alarmDataRoutingKey;
+        rabbitTemplate.convertAndSend(exchange, routingKey, contentArray, correlationId);
     }
 
 }

+ 25 - 0
src/main/java/com/persagy/apm/diagnose/config/TenantConfiguration.java

@@ -0,0 +1,25 @@
+package com.persagy.apm.diagnose.config;
+
+import com.persagy.framework.tenant.mybatis.datasource.db.config.TenantDataSourceDbProperties;
+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 javax.annotation.Resource;
+
+
+@Configuration
+public class TenantConfiguration {
+
+    @Resource
+    private DataSourceProperties dataSourceProperties;
+    @Resource
+    private TenantDataSourceDbProperties tenantBasicsProperties;
+
+    @Bean
+    public TenantProvider tenantProvider() {
+        return new SimpleJdbcTenantProvider(tenantBasicsProperties,dataSourceProperties);
+    }
+}

+ 34 - 0
src/main/java/com/persagy/apm/diagnose/constant/EnumValidType.java

@@ -0,0 +1,34 @@
+package com.persagy.apm.diagnose.constant;
+
+
+public enum EnumValidType {
+
+	YES(1, "有效"), NO(0, "无效");
+
+	private int code;
+	private String name;
+
+	public int getCode() {
+		return code;
+	}
+	public String getName() {
+		return name;
+	}
+	EnumValidType(int code, String name) {
+		this.code = code;
+		this.name = name;
+	}
+	/**
+	 * 根据编码获取ValidType枚举值
+	 * @param code
+	 * @return
+	 */
+	public static EnumValidType getEnumValidType(int code) {
+		for(EnumValidType item : EnumValidType.values()) {
+			if(item.getCode() == code) {
+				return item;
+			}
+		}
+		return null;
+	}
+}

+ 10 - 0
src/main/java/com/persagy/apm/diagnose/feign/client/SaasWebClient.java

@@ -1,5 +1,6 @@
 package com.persagy.apm.diagnose.feign.client;
 
+import com.alibaba.fastjson.JSONObject;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -33,4 +34,13 @@ public interface SaasWebClient {
     @PostMapping("/Spring/MVC/entrance/unifier/getProjectByIdService")
     @Headers({ "Content-Type: application/x-www-form-urlencoded" })
     String getProjectByIdService(@RequestParam("jsonString") String jsonString);
+
+    /**
+     * 查询有效集团编码列表
+     * @param param
+     * @return
+     */
+    @PostMapping("/rwd/groupAndSchema/admin/queryGroupList")
+    @Headers({ "Content-Type: application/x-www-form-urlencoded" })
+    String queryGroupList(JSONObject param);
 }

+ 11 - 10
src/main/java/com/persagy/apm/diagnose/maintenance/service/impl/ProjectDataRecordServiceImpl.java

@@ -37,6 +37,7 @@ import com.persagy.apm.energyalarmstarter.alarmdata.service.AlarmRecordServiceIm
 import com.persagy.framework.ems.data.core.enumeration.SpecialOperator;
 import com.persagy.framework.ems.data.mvc.dao.CoreDao;
 import com.persagy.framework.ems.data.pojo.hbase.MonitorIndicatorRecord;
+import com.persagy.framework.tenant.mybatis.datasource.db.holder.SaasContext;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.time.DateUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -61,14 +62,14 @@ import java.util.stream.Collectors;
 @Service
 public class ProjectDataRecordServiceImpl implements IProjectDataRecordService {
 
-    @Value(value = "${energy.eq.run.system.code}")
-    private String systemCode;
-
-    //测试环境  运行状态 上下限值
-    @Value(value = "${energy.eq.run.state.up.limit}")
-    private Double runStateUpLimit;
-    @Value(value = "${energy.eq.run.state.down.limit}")
-    private Double runStateDownLimit;
+//    @Value(value = "${energy.eq.run.system.code}")
+//    private String systemCode;
+//
+//    //测试环境  运行状态 上下限值
+//    @Value(value = "${energy.eq.run.state.up.limit}")
+//    private Double runStateUpLimit;
+//    @Value(value = "${energy.eq.run.state.down.limit}")
+//    private Double runStateDownLimit;
 
     //报警分类
     public final static String alarmSplit = "_";
@@ -241,7 +242,7 @@ public class ProjectDataRecordServiceImpl implements IProjectDataRecordService {
         alarmRecordItem.setClassCode(classCode);//对象类型编码
         alarmRecordItem.setLevel(EnumAlarmLevel.S.getCode());//严重程度
         alarmRecordItem.setProjectId(projectId);
-        alarmRecordItem.setGroupCode(systemCode);
+        alarmRecordItem.setGroupCode(SaasContext.getContextGroupCode());
         alarmRecordItem.setRemark("设备使用时间较长,请及时申请更换。");//报警描述
         alarmRecordItem.setName("设备更换");//报警名称
         alarmRecordItem.setCategory(EnumAlarmCategory.EQGH.getCode());//报警分类
@@ -1005,7 +1006,7 @@ public class ProjectDataRecordServiceImpl implements IProjectDataRecordService {
         List<String> cateGoryList = new ArrayList<>();
         cateGoryList.add(EnumAlarmCategory.EQGH.getCode());
         QueryAlarmRecordDTO queryAlarmRecordDTO = new QueryAlarmRecordDTO();
-        queryAlarmRecordDTO.setGroupCode(systemCode);
+        queryAlarmRecordDTO.setGroupCode(SaasContext.getContextGroupCode());
         queryAlarmRecordDTO.setProjectId(projectId);
         queryAlarmRecordDTO.setCategory(cateGoryList);
         DmpResult<List<AlarmRecordItem>> configItemResultList = alarmRecordService.query(queryAlarmRecordDTO);

+ 9 - 8
src/main/java/com/persagy/apm/diagnose/service/CenterDataService.java

@@ -14,6 +14,7 @@ import com.persagy.apm.diagnose.service.dto.TimeDataDTO;
 import com.persagy.apm.diagnose.utils.DataUtils;
 import com.persagy.apm.diagnose.utils.DateUtils;
 
+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;
@@ -25,8 +26,8 @@ import org.springframework.util.StringUtils;
 public class CenterDataService{
 
 
-	@Value(value = "${energy.eq.run.system.code}")
-	private String systemCode;
+//	@Value(value = "${energy.eq.run.system.code}")
+//	private String systemCode;
 
 	private static final String SUCCESS = "success";
 
@@ -40,7 +41,7 @@ public class CenterDataService{
 		Map<String, Object> requestMap = new HashMap<>();
 		try {
 			requestMap.put("projectId", projectId);
-			requestMap.put("groupCode", systemCode);
+			requestMap.put("groupCode", SaasContext.getContextGroupCode());
 			Map<String, Object> criteria = new HashMap<>();
 			criteria.put("classCode", classCodeList);
 			criteria.put("valid", 1);
@@ -83,7 +84,7 @@ public class CenterDataService{
 			criteria.put("id", objIdList);
 			criteria.put("valid", 1);
 			requestMap.put("criteria", criteria);
-			requestMap.put("groupCode", systemCode);
+			requestMap.put("groupCode", SaasContext.getContextGroupCode());
 			String result = centerMiddlewareClient.queryObject(requestMap);
 			JSONArray jsonArray = handleDataResult(result);
 
@@ -106,7 +107,7 @@ public class CenterDataService{
 		Map<String, Object> requestMap = new HashMap<>();
 		try {
 			requestMap.put("projectId", projectId);
-			requestMap.put("groupCode", systemCode);
+			requestMap.put("groupCode", SaasContext.getContextGroupCode());
 			Map<String, Object> criteria = new HashMap<>();
 			criteria.put("period", dataTimeType.getCode());
 			criteria.put("interpolation", false);
@@ -157,7 +158,7 @@ public class CenterDataService{
 		try {
 
 			requestMap.put("projectId", dto.getProjectId());
-			requestMap.put("groupCode", systemCode);
+			requestMap.put("groupCode", SaasContext.getContextGroupCode());
 			Map<String, Object> criteria = new HashMap<>(16);
 			Map<String, Object> relation = new HashMap<>(16);
 			relation.put("graphCode", dto.getGraphCode());
@@ -195,7 +196,7 @@ public class CenterDataService{
 		Map<String, Object> requestMap = new HashMap<>();
 		try {
 			requestMap.put("projectId", projectId);
-			requestMap.put("groupCode", systemCode);
+			requestMap.put("groupCode", SaasContext.getContextGroupCode());
 			Map<String, Object> criteria = new HashMap<>();
 			criteria.put("classCode", classCodeList);
 			Map<String, Object> like = new HashMap<>();
@@ -223,7 +224,7 @@ public class CenterDataService{
             List<String> typeList = new ArrayList<>();
             typeList.add("Pj");
             criteria.put("type",typeList);
-            criteria.put("groupCode", systemCode);
+            criteria.put("groupCode", SaasContext.getContextGroupCode());
             requestMap.put("criteria", criteria);
             String result = centerMiddlewareClient.queryProject(requestMap);
 

+ 11 - 10
src/main/java/com/persagy/apm/diagnose/service/EnergyAlarmServiceImpl.java

@@ -19,6 +19,7 @@ import com.persagy.apm.energyalarmstarter.alarmdata.feign.DmpResult;
 import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.alarmitem.QueryAlarmItemDTO;
 import com.persagy.apm.energyalarmstarter.alarmdata.model.vo.AlarmItem;
 import com.persagy.apm.energyalarmstarter.alarmdata.service.AlarmItemServiceImpl;
+import com.persagy.framework.tenant.mybatis.datasource.db.holder.SaasContext;
 import org.assertj.core.util.Lists;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -39,8 +40,8 @@ import java.util.stream.Collectors;
 @Service
 public class EnergyAlarmServiceImpl {
 
-    @Value(value = "${energy.eq.run.system.code}")
-    private String systemCode;
+//    @Value(value = "${energy.eq.run.system.code}")
+//    private String systemCode;
     @Autowired
     AlarmServiceClient alarmServiceClient;
     @Autowired
@@ -60,7 +61,7 @@ public class EnergyAlarmServiceImpl {
     public List<MonitorIndicatorConfigDTO> queryMonitorIndicatorConfigDTOList(String projectId) throws Exception {
         MonitorIndicatorConfigDTO monitorIndicatorConfigDTO = MonitorIndicatorConfigDTO.builder().build();
         monitorIndicatorConfigDTO.setProjectId(projectId);
-        monitorIndicatorConfigDTO.setGroupCode(systemCode);
+        monitorIndicatorConfigDTO.setGroupCode(SaasContext.getContextGroupCode());
         monitorIndicatorConfigDTO.setPd("asdasdasda");
         monitorIndicatorConfigDTO.setUserId("test");
         AlarmResult<JSONObject> result = alarmServiceClient.query(monitorIndicatorConfigDTO);
@@ -77,7 +78,7 @@ public class EnergyAlarmServiceImpl {
      * @return: java.util.Map<java.lang.String, com.persagy.apm.diagnose.service.dto.CalculateMethodDTO>
      */
     public Map<String, CalculateMethodDTO> queryCalculateMethods() throws Exception {
-        AlarmResult<JSONObject> result = alarmServiceClient.queryCalculateMethods(CalculateMethodDTO.builder().groupCode(systemCode).userId("test").pd("asdasdasdasdadsdasdasdasdasdasd").build());
+        AlarmResult<JSONObject> result = alarmServiceClient.queryCalculateMethods(CalculateMethodDTO.builder().groupCode(SaasContext.getContextGroupCode()).userId("test").pd("asdasdasdasdadsdasdasdasdasdasd").build());
         List<CalculateMethodDTO> records = AlarmResultUtil.getRecords(result, CalculateMethodDTO.class);
         return records.stream().collect(Collectors.toMap(CalculateMethodDTO::getId, Function.identity(), (key1, key2) -> key2));
     }
@@ -92,7 +93,7 @@ public class EnergyAlarmServiceImpl {
      * @updateTime 2021/9/27 11:54
      */
     public Map<String, String> queryObjId_indicatorAndMethodId(String projectId,String objId, List<String> indicatorIdList) throws Exception {
-        MonitorIndicatorConfigByEquipDTO build = MonitorIndicatorConfigByEquipDTO.builder().projectId(projectId).objId(objId).monitorIndicatorId(indicatorIdList).groupCode(systemCode).userId("test").pd("wwwwwwwwww").build();
+        MonitorIndicatorConfigByEquipDTO build = MonitorIndicatorConfigByEquipDTO.builder().projectId(projectId).objId(objId).monitorIndicatorId(indicatorIdList).groupCode(SaasContext.getContextGroupCode()).userId("test").pd("wwwwwwwwww").build();
         AlarmResult<JSONObject> result = alarmServiceClient.query_by_equip(build);
         JSONObject content = result.getContent();
         if (content == null) {
@@ -138,7 +139,7 @@ public class EnergyAlarmServiceImpl {
      * @updateTime 2021/9/27 11:54
      */
     public String queryObjIndicatorMethodId(String projectId,String objId, String indicatorId) throws Exception {
-        MonitorIndicatorConfigByEquipDTO build = MonitorIndicatorConfigByEquipDTO.builder().projectId(projectId).objId(objId).monitorIndicatorId(Arrays.asList(indicatorId)).groupCode(systemCode).userId("test").pd("wwwwwwwwww").build();
+        MonitorIndicatorConfigByEquipDTO build = MonitorIndicatorConfigByEquipDTO.builder().projectId(projectId).objId(objId).monitorIndicatorId(Arrays.asList(indicatorId)).groupCode(SaasContext.getContextGroupCode()).userId("test").pd("wwwwwwwwww").build();
         AlarmResult<JSONObject> result = alarmServiceClient.query_by_equip(build);
 
         List<MonitorIndicatorConfigVO> records = AlarmResultUtil.getRecords(result, MonitorIndicatorConfigVO.class);
@@ -167,7 +168,7 @@ public class EnergyAlarmServiceImpl {
     public List<AlarmRuleDTO> getProjectAlarmRules(String projectId) throws Exception {
         AlarmRuleDTO alarmRuleDTO = AlarmRuleDTO.builder().build();
         alarmRuleDTO.setProjectId(projectId);
-        alarmRuleDTO.setGroupCode(systemCode);
+        alarmRuleDTO.setGroupCode(SaasContext.getContextGroupCode());
         alarmRuleDTO.setPd("asdasdasda");
         alarmRuleDTO.setUserId("test");
         AlarmResult<JSONObject> result = alarmServiceClient.queryProjectAlarmRules(alarmRuleDTO);
@@ -189,7 +190,7 @@ public class EnergyAlarmServiceImpl {
             for (String code:alarmItemCodeList) {
                 AlarmRuleDTO alarmRuleDTO = AlarmRuleDTO.builder().build();
                 alarmRuleDTO.setProjectId(projectId);
-                alarmRuleDTO.setGroupCode(systemCode);
+                alarmRuleDTO.setGroupCode(SaasContext.getContextGroupCode());
                 alarmRuleDTO.setPd("asdasdasda");
                 alarmRuleDTO.setUserId("test");
                 alarmRuleDTO.setAlarmItemCode(code);
@@ -224,7 +225,7 @@ public class EnergyAlarmServiceImpl {
         selDTO.setObjId(objId);
         selDTO.setItemCode(itemCode);
         selDTO.setProjectId(projectId);
-        selDTO.setGroupCode(systemCode);
+        selDTO.setGroupCode(SaasContext.getContextGroupCode());
         selDTO.setPd("asdasdasda");
         selDTO.setUserId("test");
         AlarmResult<JSONObject> result = alarmServiceClient.queryByObjAndItemCode(selDTO);
@@ -233,7 +234,7 @@ public class EnergyAlarmServiceImpl {
 
     public List<AlarmProjectDTO> getAlarmProjectDTOList()throws Exception{
         QueryAlarmProjectDTO selDTO = QueryAlarmProjectDTO.builder().build();
-        selDTO.setGroupCode(systemCode);
+        selDTO.setGroupCode(SaasContext.getContextGroupCode());
         selDTO.setPd("123456");
         selDTO.setUserId("systemId");
         AlarmResult<JSONArray> result = alarmServiceClient.queryProject(selDTO);

+ 22 - 5
src/main/java/com/persagy/apm/diagnose/service/SaasWebServiceImpl.java

@@ -2,8 +2,11 @@ package com.persagy.apm.diagnose.service;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.persagy.apm.diagnose.constant.EnumValidType;
 import com.persagy.apm.diagnose.feign.client.SaasWebClient;
 import com.persagy.apm.diagnose.service.dto.ProjectDTO;
+import com.persagy.apm.diagnose.service.vo.GroupVO;
+import com.persagy.framework.tenant.mybatis.datasource.db.holder.SaasContext;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -26,8 +29,8 @@ public class SaasWebServiceImpl {
     private final static String LOGINDEVICE = "PC";
     public static final String DEFAULT_PD = "123456";
 
-    @Value(value = "${energy.eq.run.system.code}")
-    private String systemCode;
+//    @Value(value = "${energy.eq.run.system.code}")
+//    private String systemCode;
 
     @Autowired
     SaasWebClient saasWebClient;
@@ -47,7 +50,7 @@ public class SaasWebServiceImpl {
         puser.put("userId", USERID);
         puser.put("loginDevice", LOGINDEVICE);
         param.put("puser", puser);
-        param.put("groupCode", systemCode);
+        param.put("groupCode", SaasContext.getContextGroupCode());
         if (!CollectionUtils.isEmpty(projectIdList)) {
             param.put("projectIds", projectIdList);
         }
@@ -76,7 +79,7 @@ public class SaasWebServiceImpl {
         puser.put("userId", USERID);
         puser.put("loginDevice", LOGINDEVICE);
         param.put("puser", puser);
-        param.put("groupCode", systemCode);
+        param.put("groupCode", SaasContext.getContextGroupCode());
         if (!CollectionUtils.isEmpty(projectIdList)) {
             param.put("projectIds", projectIdList);
         }
@@ -106,7 +109,7 @@ public class SaasWebServiceImpl {
         puser.put("loginDevice", LOGINDEVICE);
         puser.put("pd", DEFAULT_PD);
         param.put("puser", puser);
-        param.put("groupCode", systemCode);
+        param.put("groupCode", SaasContext.getContextGroupCode());
         param.put("projectId", projectId);
         String resultStr = saasWebClient.getProjectByIdService(param.toJSONString());
         JSONObject parseObject = JSONObject.parseObject(resultStr);
@@ -127,4 +130,18 @@ public class SaasWebServiceImpl {
         return result;
     }
 
+    public List<GroupVO> queryValidGroupList() throws Exception {
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("status", EnumValidType.YES.getCode());
+        JSONObject result = JSONObject.parseObject(saasWebClient.queryGroupList(jsonObject));
+        if ("failure".equals(result.getString("Result"))) {
+            throw new Exception("查询集团失败:" + result.getString("ResultMsg"));
+        }
+        JSONArray groupJSONArray = result.getJSONArray("Content");
+        if (groupJSONArray.isEmpty()) {
+            return new ArrayList<>();
+        }
+        return JSONObject.parseArray(groupJSONArray.toJSONString(), GroupVO.class);
+    }
+
 }

+ 24 - 2
src/main/java/com/persagy/apm/diagnose/service/schedule/ComputeIndicatorData.java

@@ -1,12 +1,18 @@
 package com.persagy.apm.diagnose.service.schedule;
 
 import com.persagy.apm.diagnose.service.ComputeIndicatorDataService;
+import com.persagy.apm.diagnose.service.SaasWebServiceImpl;
+import com.persagy.apm.diagnose.service.vo.GroupVO;
+import com.persagy.framework.tenant.mybatis.datasource.db.holder.SaasContext;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 import lombok.extern.slf4j.Slf4j;
 
+import java.util.List;
+
 /**
  * @author king
  */
@@ -17,9 +23,10 @@ public class ComputeIndicatorData {
     @Value("${eyd.compute.indicator.data.enabel:false}")
     private boolean enable;
 
-
     @Autowired
     private ComputeIndicatorDataService computeIndicatorDataService;
+    @Autowired
+    private SaasWebServiceImpl saasWebService;
 
     @Scheduled(cron="${eyd.compute.indicator.data.cron:*/5 * * * * ?}")
     public void computeIndicatorData() throws Exception {
@@ -27,8 +34,23 @@ public class ComputeIndicatorData {
     	    //指标计算未开启
     	    return;
 		}
+        //获取有效集团编码
+        List<GroupVO> groupVOList = saasWebService.queryValidGroupList();
+        if (CollectionUtils.isEmpty(groupVOList)){
+            log.error("【监测指标数据计算线程】:无有效集团.......");
+            return;
+        }
         log.error("【监测指标数据计算线程】计算指标数据开始.........");
-        computeIndicatorDataService.computeIndicatorData();
+        for (GroupVO group:groupVOList) {
+            log.info("【监测指标数据计算线程】:集团{}开始.......",group.getCode());
+            try {
+                SaasContext.setContextGroupCode(group.getCode());
+            }catch (Exception e){
+                continue;
+            }
+            computeIndicatorDataService.computeIndicatorData();
+            log.info("【监测指标数据计算线程】:集团{}结束.......",group.getCode());
+        }
         log.error("【监测指标数据计算线程】计算指标数据结束.........");
     }
 }

+ 26 - 2
src/main/java/com/persagy/apm/diagnose/service/schedule/ComputeMaintenanceData.java

@@ -1,12 +1,18 @@
 package com.persagy.apm.diagnose.service.schedule;
 
 import com.persagy.apm.diagnose.service.MaintenanceDataService;
+import com.persagy.apm.diagnose.service.SaasWebServiceImpl;
+import com.persagy.apm.diagnose.service.vo.GroupVO;
+import com.persagy.framework.tenant.mybatis.datasource.db.holder.SaasContext;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * 计算 设备维保  日维度数据
  */
@@ -20,6 +26,8 @@ public class ComputeMaintenanceData {
 
     @Autowired
     private MaintenanceDataService maintenanceDataService;
+    @Autowired
+    private SaasWebServiceImpl saasWebService;
 
     @Scheduled(cron="${compute.maintenance.data.cron:0 10 0 * * ?}")
     public void computeMaintenanceData() throws Exception {
@@ -27,7 +35,23 @@ public class ComputeMaintenanceData {
             //计算未开启
             return;
         }
-        log.info("【计算设备维保日维度平均值数据线程】:计算数据开始.......");
-        maintenanceDataService.computeMaintenanceData();
+        //获取有效集团编码
+        List<GroupVO> groupVOList = saasWebService.queryValidGroupList();
+        if (CollectionUtils.isEmpty(groupVOList)){
+            log.error("【计算设备维保日维度平均值数据线程】:无有效集团.......");
+            return;
+        }
+        log.error("【计算设备维保日维度平均值数据线程】:计算数据开始.......");
+        for (GroupVO group:groupVOList) {
+            log.info("【计算设备维保日维度平均值数据线程】:集团{}开始.......",group.getCode());
+            try {
+                SaasContext.setContextGroupCode(group.getCode());
+            }catch (Exception e){
+                continue;
+            }
+            maintenanceDataService.computeMaintenanceData();
+            log.info("【计算设备维保日维度平均值数据线程】:集团{}结束.......",group.getCode());
+        }
+        log.error("【计算设备维保日维度平均值数据线程】:计算数据结束.......");
     }
 }

+ 24 - 2
src/main/java/com/persagy/apm/diagnose/service/schedule/SendIndicatorData.java

@@ -1,12 +1,18 @@
 package com.persagy.apm.diagnose.service.schedule;
 
 import com.persagy.apm.diagnose.service.ComputeIndicatorDataService;
+import com.persagy.apm.diagnose.service.SaasWebServiceImpl;
+import com.persagy.apm.diagnose.service.vo.GroupVO;
+import com.persagy.framework.tenant.mybatis.datasource.db.holder.SaasContext;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * @author king
  */
@@ -17,9 +23,10 @@ public class SendIndicatorData {
     @Value("${eyd.send.indicator.data.enabel:false}")
     private boolean enable;
 
-
     @Autowired
     private ComputeIndicatorDataService computeIndicatorDataService;
+    @Autowired
+    private SaasWebServiceImpl saasWebService;
 
     @Scheduled(cron="${eyd.send.indicator.data.cron:*/5 * * * * ?}")
     public void computeIndicatorData() throws Exception {
@@ -27,8 +34,23 @@ public class SendIndicatorData {
     	    //指标计算未开启
     	    return;
 		}
+        //获取有效集团编码
+        List<GroupVO> groupVOList = saasWebService.queryValidGroupList();
+        if (CollectionUtils.isEmpty(groupVOList)){
+            log.error("【发送监测指标数据线程】:无有效集团.......");
+            return;
+        }
         log.error("【发送监测指标数据线程】:发送指标数据开始.......");
-        computeIndicatorDataService.sendIndicatorData();
+        for (GroupVO group:groupVOList) {
+            log.info("【发送监测指标数据线程】:集团{}开始.......",group.getCode());
+            try {
+                SaasContext.setContextGroupCode(group.getCode());
+            }catch (Exception e){
+                continue;
+            }
+            computeIndicatorDataService.sendIndicatorData();
+            log.info("【发送监测指标数据线程】:集团{}结束.......",group.getCode());
+        }
         log.error("【发送监测指标数据线程】:发送指标数据结束.......");
     }
 }

+ 27 - 2
src/main/java/com/persagy/apm/diagnose/service/schedule/SendMaintenanceData.java

@@ -1,12 +1,19 @@
 package com.persagy.apm.diagnose.service.schedule;
 
 import com.persagy.apm.diagnose.service.MaintenanceDataService;
+import com.persagy.apm.diagnose.service.SaasWebServiceImpl;
+import com.persagy.apm.diagnose.service.vo.GroupVO;
+import com.persagy.framework.tenant.mybatis.datasource.db.holder.SaasContext;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
+import java.util.Collections;
+import java.util.List;
+
 /**
  * 发送 设备维保日维度数据
  */
@@ -19,6 +26,8 @@ public class SendMaintenanceData {
 
     @Autowired
     private MaintenanceDataService maintenanceDataService;
+    @Autowired
+    private SaasWebServiceImpl saasWebService;
 
     @Scheduled(cron="${send.maintenance.data.cron:0 10 4 * * ?}")
     public void sendMaintenanceData() throws Exception {
@@ -26,7 +35,23 @@ public class SendMaintenanceData {
             //发送未开启
             return;
         }
-        log.info("【发送设备维保日维度平均值数据线程】:发送数据开始.......");
-        maintenanceDataService.sendMaintenanceData();
+        //获取有效集团编码
+        List<GroupVO> groupVOList = saasWebService.queryValidGroupList();
+        if (CollectionUtils.isEmpty(groupVOList)){
+            log.error("【发送设备维保日维度平均值数据线程】:无有效集团.......");
+            return;
+        }
+        log.error("【发送设备维保日维度平均值数据线程】:发送数据开始.......");
+        for (GroupVO group:groupVOList) {
+            log.info("【发送设备维保日维度平均值数据线程】:集团{}开始.......",group.getCode());
+            try {
+                SaasContext.setContextGroupCode(group.getCode());
+            }catch (Exception e){
+                continue;
+            }
+            maintenanceDataService.sendMaintenanceData();
+            log.info("【发送设备维保日维度平均值数据线程】:集团{}结束.......",group.getCode());
+        }
+        log.error("【发送设备维保日维度平均值数据线程】:发送数据结束.......");
     }
 }

+ 26 - 2
src/main/java/com/persagy/apm/diagnose/service/schedule/SyncCheckGoingDestroyEquip.java

@@ -1,12 +1,18 @@
 package com.persagy.apm.diagnose.service.schedule;
 
 import com.persagy.apm.diagnose.service.MaintenanceDataService;
+import com.persagy.apm.diagnose.service.SaasWebServiceImpl;
+import com.persagy.apm.diagnose.service.vo.GroupVO;
+import com.persagy.framework.tenant.mybatis.datasource.db.holder.SaasContext;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * 同步 检查即将报废设备
  */
@@ -19,6 +25,8 @@ public class SyncCheckGoingDestroyEquip {
 
     @Autowired
     private MaintenanceDataService maintenanceDataService;
+    @Autowired
+    private SaasWebServiceImpl saasWebService;
 
     @Scheduled(cron="${sync.check.going.destroy.equip.cron:0 10 0 * * ?}")
     public void syncCheckGoingDestroyEquip() throws Exception {
@@ -26,7 +34,23 @@ public class SyncCheckGoingDestroyEquip {
             //同步未开启
             return;
         }
-        log.info("【同步检查即将报废设备线程】:同步检查即将报废设备开始.......");
-        maintenanceDataService.syncCheckGoingDestroyEquip();
+        //获取有效集团编码
+        List<GroupVO> groupVOList = saasWebService.queryValidGroupList();
+        if (CollectionUtils.isEmpty(groupVOList)){
+            log.error("【同步检查即将报废设备线程】:无有效集团.......");
+            return;
+        }
+        log.error("【同步检查即将报废设备线程】:同步检查即将报废设备开始.......");
+        for (GroupVO group:groupVOList) {
+            log.info("【同步检查即将报废设备线程】:集团{}开始.......",group.getCode());
+            try {
+                SaasContext.setContextGroupCode(group.getCode());
+            }catch (Exception e){
+                continue;
+            }
+            maintenanceDataService.syncCheckGoingDestroyEquip();
+            log.info("【同步检查即将报废设备线程】:集团{}结束.......",group.getCode());
+        }
+        log.error("【同步检查即将报废设备线程】:同步检查即将报废设备开始.......");
     }
 }

+ 34 - 0
src/main/java/com/persagy/apm/diagnose/service/vo/GroupVO.java

@@ -0,0 +1,34 @@
+package com.persagy.apm.diagnose.service.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+/**
+ * 集团信息
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@ApiModel(value = "集团列表返回结果参数")
+public class GroupVO {
+
+    /**
+     * 集团id
+     */
+    private String code;
+    /**
+     * 名称
+     */
+    private String name;
+    /**
+     * 状态
+     */
+    private Integer status;
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 47 - 4
src/main/resources/bootstrap.yml

@@ -7,11 +7,38 @@ spring:
   jackson:
     # 设置时间戳的时区
     time-zone: Asia/Shanghai
+  # 使用druid 尤其需要注意这个配置
+  autoconfigure:
+    exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
   datasource:
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    url: ${tenant.datasource.url}
+    username: ${tenant.datasource.username}
+    password: ${tenant.datasource.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:
-      enabled: true
-      primary: master #设置默认的数据源或者数据源组,默认值即为master
-      strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
+      #设置默认的数据源或者数据源组,默认值即为 master
+      primary: master
       datasource:
         master:
           url: ${spring.datasource.url}
@@ -22,6 +49,21 @@ spring:
           separator: ";"
           schema: classpath*:db/init/table.sql
 
+tenant:
+  switchover:
+    datasource-db:
+      #是否启动根据租户做数据源切换,如果是非SaaS版的独立部署此设置为false
+      enable: true
+      #是否从请求header中取集团编码
+      interceptor-by-header: true
+      #查询租户的sql,会从spring.datasource配置的数据源和数据库中读取
+      provider-by-jdbc-query-sql: select id,name,db_name,alias from t_tenant
+      #使用feign时自动在请求的header中加入租户信息(集团编码)
+      feign-interceptor-enable: true
+      #默认只使用Db注解指定的数据库,不做其他处理,如果是非SaaS版的独立部署此处配置为true
+      ignore-db-tenant: false
+
+
 # 日志管理方式使用集成框架的logback
 logging:
   config: classpath:logback-spring.xml
@@ -30,7 +72,8 @@ logging:
       persagy:
         apm: ${LOGGING_LEVEL:INFO}
 
-EUREKA_CLIENT_DEFAULT_ZONE: http://frame:123456@develop.persagy.com/integrated-eureka/eureka/
+EUREKA_CLIENT_DEFAULT_ZONE: http://frame:4M7RAaRV0SGbg36@bz-develop.persagy.com/integrated-eureka/eureka/
+## http://frame:123456@develop.persagy.com/integrated-eureka/eureka/
 
 mybatis-plus:
   configuration: