wangzhuo преди 1 година
родител
ревизия
26d43f9f13

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

@@ -5,6 +5,7 @@ import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.page.PageDomain;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.core.page.TableSupport;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.web.controller.iot.domain.Device;
 import com.ruoyi.web.controller.iot.domain.Order;
 import com.ruoyi.web.controller.iot.domain.ProductOrder;
@@ -14,7 +15,6 @@ import com.ruoyi.web.dataBase.DatabaseConnectionMap;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.jdbc.datasource.DriverManagerDataSource;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 
@@ -70,7 +70,8 @@ public class OrderServiceImpl implements IOrderService {
         }
         Integer count = 0;
         try {
-            JdbcTemplate template = databaseConnectionMap.getJdbcTemplate("boyo_fb4a88d6f6f24d67953f68c4fe829f63");
+            List<JdbcTemplate> jdbcTemplate = databaseConnectionMap.getJdbcTemplate();
+            JdbcTemplate template = jdbcTemplate.get(0);
 //            DriverManagerDataSource dataSource = new DriverManagerDataSource();
 //            dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
 //            dataSource.setUrl("jdbc:mysql://47.94.195.4:3525/boyo_fb4a88d6f6f24d67953f68c4fe829f63?useUnicode=true&useSSL=false&characterEncoding=utf8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai");
@@ -113,7 +114,8 @@ public class OrderServiceImpl implements IOrderService {
     public AjaxResult details(Order order) {
         Order detail = new Order();
         try {
-            JdbcTemplate template = databaseConnectionMap.getJdbcTemplate("boyo_fb4a88d6f6f24d67953f68c4fe829f63");
+            List<JdbcTemplate> jdbcTemplate = databaseConnectionMap.getJdbcTemplate();
+            JdbcTemplate template = jdbcTemplate.get(0);
 //            DriverManagerDataSource dataSource = new DriverManagerDataSource();
 //            dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
 //            dataSource.setUrl("jdbc:mysql://47.94.195.4:3525/boyo_fb4a88d6f6f24d67953f68c4fe829f63?useUnicode=true&useSSL=false&characterEncoding=utf8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai");
@@ -166,7 +168,8 @@ public class OrderServiceImpl implements IOrderService {
         }
         Integer count = 0;
         try {
-            JdbcTemplate template = databaseConnectionMap.getJdbcTemplate("boyo_fb4a88d6f6f24d67953f68c4fe829f63");
+            List<JdbcTemplate> jdbcTemplate = databaseConnectionMap.getJdbcTemplate();
+            JdbcTemplate template = jdbcTemplate.get(0);
 //            DriverManagerDataSource dataSource = new DriverManagerDataSource();
 //            dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
 //            dataSource.setUrl("jdbc:mysql://47.94.195.4:3525/boyo_fb4a88d6f6f24d67953f68c4fe829f63?useUnicode=true&useSSL=false&characterEncoding=utf8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai");
@@ -195,7 +198,8 @@ public class OrderServiceImpl implements IOrderService {
     public AjaxResult accounting() {
         Map<String, String> map = new HashMap<>();
         try {
-            JdbcTemplate template = databaseConnectionMap.getJdbcTemplate("boyo_fb4a88d6f6f24d67953f68c4fe829f63");
+            List<JdbcTemplate> jdbcTemplate = databaseConnectionMap.getJdbcTemplate();
+            JdbcTemplate template = jdbcTemplate.get(0);
 //            DriverManagerDataSource dataSource = new DriverManagerDataSource();
 //            dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
 //            dataSource.setUrl("jdbc:mysql://47.94.195.4:3525/boyo_fb4a88d6f6f24d67953f68c4fe829f63?useUnicode=true&useSSL=false&characterEncoding=utf8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai");

+ 78 - 23
ruoyi-admin/src/main/java/com/ruoyi/web/dataBase/DatabaseConnectionMap.java

@@ -1,45 +1,100 @@
 package com.ruoyi.web.dataBase;
 
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.system.domain.dto.UserEnterpriseRelation;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.datasource.DriverManagerDataSource;
 import org.springframework.stereotype.Component;
 
+import javax.annotation.PostConstruct;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
 
 @Component
 public class DatabaseConnectionMap {
 
-    private ConcurrentHashMap<String, JdbcTemplate> databaseConnectionMap = new ConcurrentHashMap<>();
+
+    private static ConcurrentHashMap<Long, List<JdbcTemplate>> databaseConnectionMap = new ConcurrentHashMap<>();
+
+    private JdbcTemplate iotDataBast;
+
+
+
+    @PostConstruct
+    public void postConstructDataBase() {
+        System.out.println("连接数据库");
+        connectIotDatabases();
+        System.out.println("存储连接");
+        connectToAllDatabase(null);
+    }
 
     /**
-     * 获取数据库连接
-     * @param dataBaseName 数据库名
+     * 连接iot数据库
      */
-    public JdbcTemplate getJdbcTemplate(String dataBaseName) {
-        JdbcTemplate jdbcTemplate = databaseConnectionMap.get(dataBaseName);
+    public void connectIotDatabases() {
+        DriverManagerDataSource dataSource = new DriverManagerDataSource();
+        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
+        dataSource.setUrl("jdbc:mysql://47.94.195.4:3525/iot?useUnicode=true&useSSL=false&characterEncoding=utf8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai");
+        dataSource.setUsername("wdy_iot");
+        dataSource.setPassword("DF5!Oe^NJj7$f2vY");
+        iotDataBast = new JdbcTemplate(dataSource);
+    }
 
-        // 连接不存在则连接数据库
-        if (jdbcTemplate == null) {
-            DriverManagerDataSource dataSource = new DriverManagerDataSource();
-            dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
-            dataSource.setUrl("jdbc:mysql://47.94.195.4:3525/" + dataBaseName + "?useUnicode=true&useSSL=false&characterEncoding=utf8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai");
-            dataSource.setUsername("db_cdyq6tkqn1ioja179i8b");
-            dataSource.setPassword("By@#5c9i75sgtx3b620g6m6e");
-            JdbcTemplate template = new JdbcTemplate(dataSource);
-            jdbcTemplate = template;
+    /**
+     * 数据库
+     */
+    public void connectToAllDatabase(Long standingId) {
+        String sql = "select ue.enterprise_database_driver, ue.enterprise_database_url, ue.enterprise_database_username, ue.enterprise_database_password , uer.standing_id  from t_sys_enterprise ue inner join user_enterprise_relation uer on ue.enterprise_openid = uer.enterprise_open_id where ue.factory_status = 1";
+        if (standingId != null) {
+            sql += " and standing_id = " + standingId;
+        }
+        List<UserEnterpriseRelation> query = iotDataBast.query(sql, new BeanPropertyRowMapper<>(UserEnterpriseRelation.class));
+        for (UserEnterpriseRelation userEnterpriseRelation : query) {
+            List<JdbcTemplate> jdbcTemplates = new ArrayList<>();
+            for (UserEnterpriseRelation enterpriseRelation : query) {
+                if (userEnterpriseRelation.getStandingId() == enterpriseRelation.getStandingId()) {
+                    jdbcTemplates.add(connectDatabases(enterpriseRelation));
+                };
+            }
             // map中存值
-            databaseConnectionMap.put(dataBaseName, template);
+            databaseConnectionMap.put(userEnterpriseRelation.getStandingId(), jdbcTemplates);
         }
+    }
 
-        // 测试连接
-        try {
-            int count = jdbcTemplate.queryForObject("SELECT 1 FROM DUAL" , Integer.class);
-        } catch (Exception e) {
-            // 移除连接失败的数据源
-            databaseConnectionMap.remove(dataBaseName);
-            throw new RuntimeException(e.getMessage());
+    /**
+     * 连接数据库
+     *
+     * @param userEnterpriseRelation 连接信息
+     * @return
+     */
+    private JdbcTemplate connectDatabases(UserEnterpriseRelation userEnterpriseRelation) {
+        DriverManagerDataSource dataSource = new DriverManagerDataSource();
+        dataSource.setDriverClassName(userEnterpriseRelation.getEnterpriseDatabaseDriver());
+        dataSource.setUrl(userEnterpriseRelation.getEnterpriseDatabaseUrl());
+        dataSource.setUsername(userEnterpriseRelation.getEnterpriseDatabaseUsername());
+        dataSource.setPassword(userEnterpriseRelation.getEnterpriseDatabasePassword());
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+        int count = jdbcTemplate.queryForObject("SELECT 1 FROM DUAL", Integer.class);
+        return jdbcTemplate;
+    }
+
+
+    /**
+     * 获取数据库连接
+     */
+    public List<JdbcTemplate> getJdbcTemplate() {
+        SysUser user = SecurityUtils.getLoginUser().getUser();
+        List<JdbcTemplate> jdbcTemplateList = databaseConnectionMap.get(user.getDeptId());
+
+        // 连接不存在则连接数据库
+        if (jdbcTemplateList == null) {
+            connectToAllDatabase(user.getDeptId());
+            jdbcTemplateList = databaseConnectionMap.get(user.getDeptId());
         }
 
-        return jdbcTemplate;
+        return jdbcTemplateList;
     }
 }

+ 51 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/UserEnterpriseRelation.java

@@ -0,0 +1,51 @@
+package com.ruoyi.system.domain.dto;
+
+
+public class UserEnterpriseRelation {
+
+    private Long standingId;
+    private String enterpriseDatabaseDriver;
+    private String enterpriseDatabaseUrl;
+    private String enterpriseDatabaseUsername;
+    private String enterpriseDatabasePassword;
+
+    public Long getStandingId() {
+        return standingId;
+    }
+
+    public void setStandingId(Long standingDd) {
+        this.standingId = standingDd;
+    }
+
+    public String getEnterpriseDatabaseDriver() {
+        return enterpriseDatabaseDriver;
+    }
+
+    public void setEnterpriseDatabaseDriver(String enterpriseDatabaseDriver) {
+        this.enterpriseDatabaseDriver = enterpriseDatabaseDriver;
+    }
+
+    public String getEnterpriseDatabaseUrl() {
+        return enterpriseDatabaseUrl;
+    }
+
+    public void setEnterpriseDatabaseUrl(String enterpriseDatabaseUrl) {
+        this.enterpriseDatabaseUrl = enterpriseDatabaseUrl;
+    }
+
+    public String getEnterpriseDatabaseUsername() {
+        return enterpriseDatabaseUsername;
+    }
+
+    public void setEnterpriseDatabaseUsername(String enterpriseDatabaseUsername) {
+        this.enterpriseDatabaseUsername = enterpriseDatabaseUsername;
+    }
+
+    public String getEnterpriseDatabasePassword() {
+        return enterpriseDatabasePassword;
+    }
+
+    public void setEnterpriseDatabasePassword(String enterpriseDatabasePassword) {
+        this.enterpriseDatabasePassword = enterpriseDatabasePassword;
+    }
+}

+ 10 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysEnterpriseMapper.java

@@ -0,0 +1,10 @@
+package com.ruoyi.system.mapper;
+
+import com.ruoyi.system.domain.dto.UserEnterpriseRelation;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+public interface SysEnterpriseMapper {
+    List<UserEnterpriseRelation> getjoinuserEnterpriseRelationList();
+}

+ 18 - 0
ruoyi-system/src/main/resources/mapper/system/SysEnterpriseMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.system.mapper.SysEnterpriseMapper">
+
+
+    <select id="getjoinuserEnterpriseRelationList"
+            resultType="com.ruoyi.system.domain.dto.UserEnterpriseRelation">
+        select ue.enterprise_database_driver,
+               ue.enterprise_database_url,
+               ue.enterprise_database_username,
+               ue.enterprise_database_password
+        from t_sys_enterprise ue
+                 inner join user_enterprise_relation uer on ue.enterprise_openid = uer.enterprise_open_id
+        where ue.factory_status = 1
+    </select>
+</mapper>