Ver Fonte

多数据源完善3

wangzhuo há 1 ano atrás
pai
commit
9929c6d5a8

+ 12 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/iot/domain/Device.java

@@ -9,6 +9,10 @@ import java.util.List;
 public class Device {
 
     /**
+     * 数据库url
+     */
+    private String url;
+    /**
      * 主键
      */
     private Long id;
@@ -71,6 +75,14 @@ public class Device {
      */
     private String deptId;
 
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
     public List<String> getConnectionTimeList() {
         return connectionTimeList;
     }

+ 14 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/iot/domain/Order.java

@@ -11,6 +11,11 @@ import java.util.List;
 public class Order {
 
     /**
+     * 数据库url
+     */
+    private String url;
+
+    /**
      * 主键
      */
     private Long id;
@@ -206,6 +211,15 @@ public class Order {
         this.orderStatus = orderStatus;
     }
 
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
     public String getStatus() {
         return status;
     }

+ 30 - 16
ruoyi-admin/src/main/java/com/ruoyi/web/controller/iot/service/impl/OrderServiceImpl.java

@@ -25,6 +25,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
+import java.util.*;
 
 /**
  * @author :jixinyuan
@@ -75,9 +76,12 @@ public class OrderServiceImpl implements IOrderService {
             condition += "and fo.end_time <= '" + order.getEndTime() + "'";
         }
         try {
-            List<JdbcTemplate> jdbcTemplate = databaseConnectionMap.getJdbcTemplate();
-            for (JdbcTemplate template : jdbcTemplate) {
-                List<Order> orders = template.query("SELECT fo.*,tto.shipping_status as status FROM t_factory_order fo left join t_transport_order tto on fo.order_num = tto.order_num where 1=1 "
+            Map<String, JdbcTemplate> jdbcTemplateMap = databaseConnectionMap.getJdbcTemplate();
+            Set<String> key = jdbcTemplateMap.keySet();
+
+            for (String keyUrl : key) {
+                JdbcTemplate template = jdbcTemplateMap.get(keyUrl);
+                List<Order> orders = template.query("SELECT fo.*,tto.shipping_status as status, '" + keyUrl + "' as url" + " FROM t_factory_order fo left join t_transport_order tto on fo.order_num = tto.order_num where 1=1 "
                                 + (ObjectUtils.isEmpty(condition) ? "" : condition) + ";",
                         new BeanPropertyRowMapper<Order>(Order.class));
                 for (Order item : orders) {
@@ -111,8 +115,8 @@ public class OrderServiceImpl implements IOrderService {
     public AjaxResult details(Order order) {
         Order detail = new Order();
         try {
-            List<JdbcTemplate> jdbcTemplate = databaseConnectionMap.getJdbcTemplate();
-            JdbcTemplate template = jdbcTemplate.get(0);
+            Map<String, JdbcTemplate> jdbcTemplateMap = databaseConnectionMap.getJdbcTemplate();
+            JdbcTemplate template = jdbcTemplateMap.get(order.getUrl());
             detail = template.queryForObject("SELECT * FROM t_factory_order where id = " + order.getId() + ";", new BeanPropertyRowMapper<Order>(Order.class));
             if (!ObjectUtils.isEmpty(detail)) {
                 List<ProductOrderDetail> productOrderDetailList = template.query("SELECT pod.* ,pp.process_name as processName FROM " +
@@ -158,9 +162,13 @@ public class OrderServiceImpl implements IOrderService {
             condition += "and equipment_code <= '" + device.getConnectionTimeList().get(1) + "'";
         }
         try {
-            List<JdbcTemplate> jdbcTemplate = databaseConnectionMap.getJdbcTemplate();
-            for (JdbcTemplate template : jdbcTemplate) {
-                List<Device> deviceList = template.query("SELECT ie.* ,it.tsl_name as tslName FROM iot_equipment ie " +
+
+            Map<String, JdbcTemplate> jdbcTemplateMap = databaseConnectionMap.getJdbcTemplate();
+            Set<String> key = jdbcTemplateMap.keySet();
+
+            for (String keyUrl : key) {
+                JdbcTemplate template = jdbcTemplateMap.get(keyUrl);
+                List<Device> deviceList = template.query("SELECT ie.* ,it.tsl_name as tslName, '" + keyUrl + "' as url" + " FROM iot_equipment ie " +
                                 "LEFT JOIN iot_tsl it ON ie.tsl_id = it.id " +
                                 " where 1=1 " + (ObjectUtils.isEmpty(condition) ? "" : condition) + ";",
                         new BeanPropertyRowMapper<Device>(Device.class));
@@ -186,8 +194,11 @@ public class OrderServiceImpl implements IOrderService {
         int count3 = 0;
         int count4 = 0;
         try {
-            List<JdbcTemplate> jdbcTemplate = databaseConnectionMap.getJdbcTemplate();
-            for (JdbcTemplate template : jdbcTemplate) {
+            Map<String, JdbcTemplate> jdbcTemplateMap = databaseConnectionMap.getJdbcTemplate();
+            Set<String> key = jdbcTemplateMap.keySet();
+
+            for (String keyUrl : key) {
+                JdbcTemplate template = jdbcTemplateMap.get(keyUrl);
                 count0 += template.queryForObject("SELECT count(*) as status FROM t_factory_order fo " +
                         "left join t_transport_order tto on fo.order_num = tto.order_num ;", Integer.class);
                 count1 += template.queryForObject("SELECT count(*) as status FROM t_factory_order fo " +
@@ -239,8 +250,11 @@ public class OrderServiceImpl implements IOrderService {
             condition += "and fo.end_time <= '" + order.getEndTime() + "'";
         }
         try {
-            List<JdbcTemplate> jdbcTemplate = databaseConnectionMap.getJdbcTemplate();
-            for (JdbcTemplate template : jdbcTemplate) {
+            Map<String, JdbcTemplate> jdbcTemplateMap = databaseConnectionMap.getJdbcTemplate();
+            Set<String> key = jdbcTemplateMap.keySet();
+
+            for (String keyUrl : key) {
+                JdbcTemplate template = jdbcTemplateMap.get(keyUrl);
                 List<Order> orders = template.query("SELECT fo.*,tto.shipping_status as status FROM t_factory_order fo left join t_transport_order tto on fo.order_num = tto.order_num where 1=1 "
                                 + (ObjectUtils.isEmpty(condition) ? "" : condition) + ";",
                         new BeanPropertyRowMapper<Order>(Order.class));
@@ -287,8 +301,8 @@ public class OrderServiceImpl implements IOrderService {
     public AjaxResult bankDetails(Order order) {
         Order detail = new Order();
         try {
-            List<JdbcTemplate> jdbcTemplate = databaseConnectionMap.getJdbcTemplate();
-            JdbcTemplate template = jdbcTemplate.get(0);
+            Map<String, JdbcTemplate> jdbcTemplateMap = databaseConnectionMap.getJdbcTemplate();
+            JdbcTemplate template = jdbcTemplateMap.get(order.getUrl());
             detail = template.queryForObject("SELECT * FROM t_factory_order where id = " + order.getId() + ";", new BeanPropertyRowMapper<Order>(Order.class));
             if (!ObjectUtils.isEmpty(detail)) {
                 List<ProductOrder> productOrderList = template.query("SELECT po.* ,pg.group_name as processGroupName FROM " +
@@ -328,8 +342,8 @@ public class OrderServiceImpl implements IOrderService {
     public AjaxResult deviceDetails(Device device) {
         List<IotRealData> iotRealDataList = new ArrayList<>();
         try {
-            List<JdbcTemplate> jdbcTemplate = databaseConnectionMap.getJdbcTemplate();
-            JdbcTemplate template = jdbcTemplate.get(0);
+            Map<String, JdbcTemplate> jdbcTemplateMap = databaseConnectionMap.getJdbcTemplate();
+            JdbcTemplate template = jdbcTemplateMap.get(device.getUrl());
             iotRealDataList = template.query("SELECT ird.*,ie.equipment_name AS deviceName," +
                             "ita.attr_name AS tagName " +
                             "FROM iot_real_data ird " +

+ 11 - 9
ruoyi-admin/src/main/java/com/ruoyi/web/dataBase/DatabaseConnectionMap.java

@@ -10,14 +10,16 @@ import org.springframework.stereotype.Component;
 
 import javax.annotation.PostConstruct;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 @Component
 public class DatabaseConnectionMap {
 
 
-    private static ConcurrentHashMap<Long, List<JdbcTemplate>> databaseConnectionMap = new ConcurrentHashMap<>();
+    private static ConcurrentHashMap<Long, Map<String, JdbcTemplate>> databaseConnectionMap = new ConcurrentHashMap<>();
 
     private JdbcTemplate iotDataBast;
 
@@ -53,14 +55,14 @@ public class DatabaseConnectionMap {
         }
         List<UserEnterpriseRelation> query = iotDataBast.query(sql, new BeanPropertyRowMapper<>(UserEnterpriseRelation.class));
         for (UserEnterpriseRelation userEnterpriseRelation : query) {
-            List<JdbcTemplate> jdbcTemplates = new ArrayList<>();
+            Map<String, JdbcTemplate> map = new HashMap<>();
             for (UserEnterpriseRelation enterpriseRelation : query) {
                 if (userEnterpriseRelation.getStandingId() == enterpriseRelation.getStandingId()) {
-                    jdbcTemplates.add(connectDatabases(enterpriseRelation));
+                    map.put(enterpriseRelation.getEnterpriseDatabaseUrl(), connectDatabases(enterpriseRelation));
                 };
             }
             // map中存值
-            databaseConnectionMap.put(userEnterpriseRelation.getStandingId(), jdbcTemplates);
+            databaseConnectionMap.put(userEnterpriseRelation.getStandingId(), map);
         }
     }
 
@@ -85,16 +87,16 @@ public class DatabaseConnectionMap {
     /**
      * 获取数据库连接
      */
-    public List<JdbcTemplate> getJdbcTemplate() {
+    public Map<String, JdbcTemplate> getJdbcTemplate() {
         SysUser user = SecurityUtils.getLoginUser().getUser();
-        List<JdbcTemplate> jdbcTemplateList = databaseConnectionMap.get(user.getDeptId());
+        Map<String, JdbcTemplate> map = databaseConnectionMap.get(user.getDeptId());
 
         // 连接不存在则连接数据库
-        if (jdbcTemplateList == null) {
+        if (map == null) {
             connectToAllDatabase(user.getDeptId());
-            jdbcTemplateList = databaseConnectionMap.get(user.getDeptId());
+            map = databaseConnectionMap.get(user.getDeptId());
         }
 
-        return jdbcTemplateList;
+        return map;
     }
 }