diff --git a/platform-biz-service/src/main/java/com/lyms/platform/permission/dao/master/MasterOrganizationMapper.java b/platform-biz-service/src/main/java/com/lyms/platform/permission/dao/master/MasterOrganizationMapper.java index cf754df..a3d2336 100644 --- a/platform-biz-service/src/main/java/com/lyms/platform/permission/dao/master/MasterOrganizationMapper.java +++ b/platform-biz-service/src/main/java/com/lyms/platform/permission/dao/master/MasterOrganizationMapper.java @@ -21,4 +21,6 @@ public interface MasterOrganizationMapper { List queryProvinceIdByOrgId(List orgList); List queryHospital(); + + void execSql(String sql); } \ No newline at end of file diff --git a/platform-biz-service/src/main/java/com/lyms/platform/permission/service/OrganizationService.java b/platform-biz-service/src/main/java/com/lyms/platform/permission/service/OrganizationService.java index af92f7d..f45b73c 100644 --- a/platform-biz-service/src/main/java/com/lyms/platform/permission/service/OrganizationService.java +++ b/platform-biz-service/src/main/java/com/lyms/platform/permission/service/OrganizationService.java @@ -29,4 +29,6 @@ public interface OrganizationService { public void rebuildDataPermissions(Integer userId); public void rebuildDefaultRoles(); + + void execSql(String sql); } \ No newline at end of file diff --git a/platform-biz-service/src/main/java/com/lyms/platform/permission/service/impl/OrganizationServiceImpl.java b/platform-biz-service/src/main/java/com/lyms/platform/permission/service/impl/OrganizationServiceImpl.java index 44250d3..2ec9780 100644 --- a/platform-biz-service/src/main/java/com/lyms/platform/permission/service/impl/OrganizationServiceImpl.java +++ b/platform-biz-service/src/main/java/com/lyms/platform/permission/service/impl/OrganizationServiceImpl.java @@ -77,6 +77,11 @@ public class OrganizationServiceImpl extends DataAccessLayerService implements O } } + @Override + public void execSql(String sql) { + masterOrganizationMapper.execSql(sql); + } + private void addDefaultRoles(Organization obj) { List rolesList = new ArrayList<>(); rolesList.add(rolesService.getRoles(87)); diff --git a/platform-biz-service/src/main/resources/mainOrm/master/MasterOrganization.xml b/platform-biz-service/src/main/resources/mainOrm/master/MasterOrganization.xml index 6888ee1..7143449 100644 --- a/platform-biz-service/src/main/resources/mainOrm/master/MasterOrganization.xml +++ b/platform-biz-service/src/main/resources/mainOrm/master/MasterOrganization.xml @@ -245,4 +245,9 @@ select id,name,type,level,area_manage,province_id,city_id,area_id,address,descri + + + \ No newline at end of file diff --git a/platform-common/src/main/java/com/lyms/platform/common/utils/IpUtils.java b/platform-common/src/main/java/com/lyms/platform/common/utils/IpUtils.java index 159376a..60a16e8 100644 --- a/platform-common/src/main/java/com/lyms/platform/common/utils/IpUtils.java +++ b/platform-common/src/main/java/com/lyms/platform/common/utils/IpUtils.java @@ -2,6 +2,7 @@ package com.lyms.platform.common.utils; import org.apache.commons.collections.CollectionUtils; +import javax.servlet.http.HttpServletRequest; import java.util.HashSet; import java.util.Set; @@ -22,9 +23,8 @@ public class IpUtils { } } - public static boolean isWhite(String ip) { - return ipSet.contains(ip); + public static boolean isWhite(HttpServletRequest request) { + return ipSet.contains(request.getRemoteHost()); } - } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/SyncDataController.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/SyncDataController.java index bd02b80..2cf1d23 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/SyncDataController.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/SyncDataController.java @@ -3,16 +3,21 @@ package com.lyms.platform.operate.web.controller; import com.lyms.platform.biz.service.SyncDataService; import com.lyms.platform.common.base.BaseController; import com.lyms.platform.common.pojo.SyncDataModel; -import com.lyms.platform.common.utils.Config; -import com.lyms.platform.common.utils.JsonUtil; -import com.lyms.platform.common.utils.LymsEncodeUtil; +import com.lyms.platform.common.utils.*; +import com.lyms.platform.operate.web.request.BabyCheckRequest; +import com.lyms.platform.operate.web.request.SqlRequest; +import com.lyms.platform.permission.service.OrganizationService; import com.lyms.platform.query.SyncDataQuery; +import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.List; @@ -27,6 +32,9 @@ public class SyncDataController extends BaseController { @Autowired private SyncDataService syncDataService; + @Autowired + private OrganizationService organizationService; + public static String mongo_crypto_key = Config.getItem("mongo_crypto_key", "0"); @RequestMapping(value = "/findSyncData", method = RequestMethod.POST) @@ -66,4 +74,38 @@ public class SyncDataController extends BaseController { } } + + /** + * 同步mysql的数据 + * 把线上执行的sql拿到区域上面执行 + * @param response + * @param sqlRequest + * @param request + */ + @RequestMapping(value = "/syncMysqlData", method = RequestMethod.POST) + public void updateSyncData(HttpServletResponse response, @RequestBody SqlRequest sqlRequest,HttpServletRequest request, + @RequestHeader("Authorization") String token) { + + if (!"3d19960bf3e81e7d816c4f26051c49ba".equals(token)) + { + ExceptionUtils.catchException("The request token is "+ token); + writeString(response, "Token is error"); + return; + } + + if (sqlRequest != null) { + String base64Sql = sqlRequest.getSql(); + if (StringUtils.isNotEmpty(base64Sql)) + { + String sqlId = sqlRequest.getSqlId(); + String sql = new String(Base64.decodeBase64(base64Sql)); + System.out.println("sqlId = " + sqlId+" : "+sql); + organizationService.execSql(sql); + } + writeString(response,"execSyncMysqlData success"); + } else { + writeString(response, "execSyncMysqlData fail"); + } + } + } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/inteceptor/MybatisSqlInterceptor.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/inteceptor/MybatisSqlInterceptor.java index 017ecec..562e568 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/inteceptor/MybatisSqlInterceptor.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/inteceptor/MybatisSqlInterceptor.java @@ -7,6 +7,7 @@ import java.util.List; import java.util.Locale; import java.util.Properties; +import com.lyms.platform.operate.web.utils.SendMysqlSyncDatUtil; import org.apache.ibatis.executor.Executor; import org.apache.ibatis.mapping.BoundSql; import org.apache.ibatis.mapping.MappedStatement; @@ -18,8 +19,6 @@ import org.apache.ibatis.plugin.Plugin; import org.apache.ibatis.plugin.Signature; import org.apache.ibatis.reflection.MetaObject; import org.apache.ibatis.session.Configuration; -import org.apache.ibatis.session.ResultHandler; -import org.apache.ibatis.session.RowBounds; import org.apache.ibatis.type.TypeHandlerRegistry; /** @@ -40,28 +39,16 @@ public class MybatisSqlInterceptor implements Interceptor { String sqlId = mappedStatement.getId(); BoundSql boundSql = mappedStatement.getBoundSql(parameter); Configuration configuration = mappedStatement.getConfiguration(); - Object returnValue = null; - long start = System.currentTimeMillis(); - returnValue = invocation.proceed(); - long end = System.currentTimeMillis(); - long time = (end - start); - if (time > 1) { - String sql = getSql(configuration, boundSql, sqlId, time); - System.err.println(sql); - } + Object returnValue = invocation.proceed(); + String sql = getSql(configuration, boundSql, sqlId); + System.out.println("mysql sql ======"+sql); return returnValue; } - public static String getSql(Configuration configuration, BoundSql boundSql, String sqlId, long time) { + public static String getSql(Configuration configuration, BoundSql boundSql, String sqlId) { String sql = showSql(configuration, boundSql); - StringBuilder str = new StringBuilder(100); - str.append(sqlId); - str.append(":"); - str.append(sql); - str.append(":"); - str.append(time); - str.append("ms"); - return str.toString(); + SendMysqlSyncDatUtil.sendSql(sql,sqlId); + return sql; } private static String getParameterValue(Object obj) { @@ -105,10 +92,14 @@ public class MybatisSqlInterceptor implements Interceptor { } } } - System.out.println("========"+sql); + return sql; } + + + + public Object plugin(Object target) { return Plugin.wrap(target, this); } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/request/SqlRequest.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/request/SqlRequest.java new file mode 100644 index 0000000..dd46636 --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/request/SqlRequest.java @@ -0,0 +1,27 @@ +package com.lyms.platform.operate.web.request; + +/** + * Created by Administrator on 2017-04-25. + */ +public class SqlRequest { + + private String sql; + + private String sqlId; + + public String getSqlId() { + return sqlId; + } + + public void setSqlId(String sqlId) { + this.sqlId = sqlId; + } + + public String getSql() { + return sql; + } + + public void setSql(String sql) { + this.sql = sql; + } +} diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/HttpClientUtil.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/HttpClientUtil.java index 422c11b..7b63e72 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/HttpClientUtil.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/HttpClientUtil.java @@ -3,17 +3,23 @@ package com.lyms.platform.operate.web.utils; /** * Created by Administrator on 2017-01-18. */ +import java.io.IOException; import java.util.*; import java.util.Map.Entry; import com.lyms.platform.common.pojo.SyncDataModel; +import com.lyms.platform.common.utils.ExceptionUtils; import com.lyms.platform.common.utils.JsonUtil; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; +import org.apache.http.HttpStatus; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; +import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; @@ -22,6 +28,30 @@ import org.apache.http.util.EntityUtils; */ public class HttpClientUtil { + + private static PoolingHttpClientConnectionManager connMgr; + private static RequestConfig requestConfig; + private static final int MAX_TIMEOUT = 7000; + + static { + // 设置连接池 + connMgr = new PoolingHttpClientConnectionManager(); + // 设置连接池大小 + connMgr.setMaxTotal(100); + connMgr.setDefaultMaxPerRoute(connMgr.getMaxTotal()); + + RequestConfig.Builder configBuilder = RequestConfig.custom(); + // 设置连接超时 + configBuilder.setConnectTimeout(MAX_TIMEOUT); + // 设置读取超时 + configBuilder.setSocketTimeout(MAX_TIMEOUT); + // 设置从连接池获取连接实例的超时 + configBuilder.setConnectionRequestTimeout(MAX_TIMEOUT); + // 在提交请求之前 测试连接是否可用 + configBuilder.setStaleConnectionCheckEnabled(true); + requestConfig = configBuilder.build(); + } + public static String doPost(String url,Map map,String charset){ HttpClient httpClient = null; HttpPost httpPost = null; @@ -53,6 +83,54 @@ public class HttpClientUtil { return result; } + + /** + * 发送 SSL POST 请求(HTTPS),JSON形式 + * @param apiUrl API接口URL + * @param json JSON对象 + * @return + */ + public static String doPostSSL(String apiUrl, Object json,String token) { + + HttpClient httpClient = null; + HttpPost httpPost = new HttpPost(apiUrl); + HttpResponse response = null; + String httpStr = null; + + try { + httpClient = new SSLClient(); + httpPost.addHeader("Authorization", token); + httpPost.setConfig(requestConfig); + StringEntity stringEntity = new StringEntity(json.toString(),"UTF-8");//解决中文乱码问题 + stringEntity.setContentEncoding("UTF-8"); + stringEntity.setContentType("application/json"); + httpPost.setEntity(stringEntity); + response = httpClient.execute(httpPost); + int statusCode = response.getStatusLine().getStatusCode(); + if (statusCode != HttpStatus.SC_OK) { + return null; + } + HttpEntity entity = response.getEntity(); + if (entity == null) { + return null; + } + httpStr = EntityUtils.toString(entity, "utf-8"); + } catch (Exception e) { + ExceptionUtils.catchException(e,"error https post "); + e.printStackTrace(); + } finally { + if (response != null) { + try { + EntityUtils.consume(response.getEntity()); + } catch (IOException e) { + ExceptionUtils.catchException(e, "error https post "); + e.printStackTrace(); + } + } + } + return httpStr; + } + public static void main(String[] args) throws Exception { long start = System.currentTimeMillis(); diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/SendMysqlSyncDatUtil.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/SendMysqlSyncDatUtil.java new file mode 100644 index 0000000..6095d03 --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/SendMysqlSyncDatUtil.java @@ -0,0 +1,49 @@ +package com.lyms.platform.operate.web.utils; + +import com.lyms.platform.common.utils.JsonUtil; +import com.lyms.platform.common.utils.PropertiesUtils; +import com.lyms.platform.common.utils.StringUtils; +import com.lyms.platform.operate.web.request.SqlRequest; +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.collections.CollectionUtils; + +import java.util.HashSet; +import java.util.Set; + +/** + * Created by Administrator on 2017-04-25. + */ +public class SendMysqlSyncDatUtil { + + private static Set urls = new HashSet<>(); + static + { + String sync_mysql_data_url = PropertiesUtils.getPropertyValue("sync_mysql_data_url"); + if (StringUtils.isNotEmpty(sync_mysql_data_url)) + { + String[] arrs = sync_mysql_data_url.split(","); + if (arrs != null && arrs.length > 0) + { + CollectionUtils.addAll(urls, arrs); + } + } + + } + + public static void sendSql(String sql ,String sqlId) + { + SqlRequest request = new SqlRequest(); + request.setSql(Base64.encodeBase64String(sql.getBytes())); + request.setSqlId(sqlId); + String json = JsonUtil.obj2Str(request); + if (CollectionUtils.isNotEmpty(urls)) + { + for(String url : urls) + { + System.out.println("sync mysql url = " + url); + HttpClientUtil.doPostSSL(url,json,"3d19960bf3e81e7d816c4f26051c49ba"); + } + } + + } +} diff --git a/platform-operate-api/src/main/resources/config.properties b/platform-operate-api/src/main/resources/config.properties index 1ee3ec1..e10e970 100644 --- a/platform-operate-api/src/main/resources/config.properties +++ b/platform-operate-api/src/main/resources/config.properties @@ -27,9 +27,8 @@ postser_url=http://devmmsapi.qinhuangdao.healthbaby.com.cn:18019/initdata/reser #区域统计地址 area_count_url=119.90.57.26:1522 -#app服务器端的ip白名单多个用逗号隔开 127.0.0.1,192.168.1.1 -app_server_ip_white= - +#同步mysql数据到各个区域的地址,多个用逗号隔开 如:https://area-qhd-api.healthbaby.com.cn:18019/syncMysqlData,https://area-dz-api.healthbaby.com.cn:12356/syncMysqlData +sync_mysql_data_url= #数据源相关配置 jdbc.0.driver=oracle.jdbc.driver.OracleDriver diff --git a/platform-operate-api/src/main/resources/mybatis.xml b/platform-operate-api/src/main/resources/mybatis.xml index 526a807..befdd96 100644 --- a/platform-operate-api/src/main/resources/mybatis.xml +++ b/platform-operate-api/src/main/resources/mybatis.xml @@ -11,6 +11,7 @@ +