feat(data): 添加 MES 系统数据对接功能
- 新增 MES 数据源配置和映射接口- 实现 MES 数据获取和处理的定时任务 - 添加数据保存和缓存功能dev
parent
be933f2a99
commit
4f11b686c5
|
@ -0,0 +1,66 @@
|
|||
package com.zcloud.config;
|
||||
|
||||
import com.alibaba.druid.pool.DruidDataSource;
|
||||
import org.apache.ibatis.session.SqlSessionFactory;
|
||||
import org.mybatis.spring.SqlSessionFactoryBean;
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.io.DefaultResourceLoader;
|
||||
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
|
||||
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.sql.SQLException;
|
||||
|
||||
/**
|
||||
* 说明:MES数据源配置
|
||||
*/
|
||||
@Configuration
|
||||
@MapperScan(basePackages = MesDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "mesSqlSessionFactory")
|
||||
public class MesDataSourceConfig {
|
||||
|
||||
static final String PACKAGE = "com.zcloud.mapper.dsno2.monitoring"; //mapper 目录
|
||||
static final String MAPPER_LOCATION = "classpath:mybatis/dsno2/monitoring/*.xml"; //扫描的 xml 目录
|
||||
static final String CONFIG_LOCATION = "classpath:mybatis/dsno2/mybatis-config.xml"; //自定义的mybatis config 文件位置
|
||||
static final String TYPE_ALIASES_PACKAGE = "com.zcloud.entity"; //扫描的 实体类 目录
|
||||
|
||||
@Value("${datasource.mes.url}")
|
||||
private String url;
|
||||
|
||||
@Value("${datasource.mes.username}")
|
||||
private String user;
|
||||
|
||||
@Value("${datasource.mes.password}")
|
||||
private String password;
|
||||
|
||||
@Value("${datasource.mes.driver-class-name}")
|
||||
private String driverClass;
|
||||
|
||||
@Bean(name = "mesDataSource")
|
||||
public DataSource mesDataSource() throws SQLException {
|
||||
DruidDataSource dataSource = new DruidDataSource();
|
||||
dataSource.setDriverClassName(driverClass);
|
||||
dataSource.setUrl(url);
|
||||
dataSource.setUsername(user);
|
||||
dataSource.setPassword(password);
|
||||
return dataSource;
|
||||
}
|
||||
|
||||
@Bean(name = "mesTransactionManager")
|
||||
public DataSourceTransactionManager mesTransactionManager() throws SQLException {
|
||||
return new DataSourceTransactionManager(mesDataSource());
|
||||
}
|
||||
|
||||
@Bean(name = "mesSqlSessionFactory")
|
||||
public SqlSessionFactory mesSqlSessionFactory(@Qualifier("mesDataSource") DataSource mesDataSource) throws Exception {
|
||||
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
|
||||
sessionFactory.setDataSource(mesDataSource);
|
||||
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MesDataSourceConfig.MAPPER_LOCATION));
|
||||
sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(MesDataSourceConfig.CONFIG_LOCATION));
|
||||
sessionFactory.setTypeAliasesPackage(MesDataSourceConfig.TYPE_ALIASES_PACKAGE);
|
||||
return sessionFactory.getObject();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
package com.zcloud.mapper.dsno2.monitoring;
|
||||
|
||||
import com.zcloud.entity.PageData;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* MES数据访问接口
|
||||
*/
|
||||
@Repository
|
||||
public interface MesDataMapper {
|
||||
|
||||
/**
|
||||
* 获取MES系统中的所有数据点
|
||||
* @return 数据点列表
|
||||
*/
|
||||
List<Map<String, Object>> listAllMesData();
|
||||
|
||||
/**
|
||||
* 根据条件查询MES数据
|
||||
* @param pd 查询条件
|
||||
* @return 数据列表
|
||||
*/
|
||||
List<PageData> listMesDataByCondition(PageData pd);
|
||||
|
||||
/**
|
||||
* 批量保存从MES获取的数据
|
||||
* @param dataList 数据列表
|
||||
*/
|
||||
void saveBatchFromMes(List<Map<String, Object>> dataList);
|
||||
}
|
|
@ -0,0 +1,93 @@
|
|||
package com.zcloud.scheduled.dataDocking;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.xxl.job.core.context.XxlJobHelper;
|
||||
import com.xxl.job.core.handler.IJobHandler;
|
||||
import com.xxl.job.core.handler.annotation.XxlJob;
|
||||
import com.zcloud.mapper.dsno2.monitoring.MesDataMapper;
|
||||
import com.zcloud.util.DateUtil;
|
||||
import com.zcloud.util.RedisUtil;
|
||||
import com.zcloud.util.UuidUtil;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* MES系统数据对接定时任务
|
||||
* 从MES系统的Oracle数据库视图中获取数据
|
||||
*
|
||||
* @author
|
||||
*/
|
||||
@Component
|
||||
public class MesDataScheduled extends IJobHandler {
|
||||
|
||||
@Resource
|
||||
private MesDataMapper mesDataMapper;
|
||||
|
||||
@Resource
|
||||
private RedisUtil redisUtil;
|
||||
|
||||
@Override
|
||||
@XxlJob(value = "mesDataJob")
|
||||
public void execute() throws Exception {
|
||||
XxlJobHelper.log("开始执行MES系统数据对接任务");
|
||||
|
||||
// 处理批次 ID
|
||||
String processingBatchId = UuidUtil.get32UUID();
|
||||
// 批处理时间
|
||||
String processingTime = DateUtil.date2Str(new Date());
|
||||
|
||||
try {
|
||||
// 从MES系统获取数据
|
||||
List<Map<String, Object>> mesDataList = mesDataMapper.listAllMesData();
|
||||
XxlJobHelper.log("从MES系统获取到{}条数据", mesDataList.size());
|
||||
|
||||
// 处理数据
|
||||
for (Map<String, Object> item : mesDataList) {
|
||||
// 添加处理时间和批次ID
|
||||
item.put("PROCESSING_TIME", processingTime);
|
||||
item.put("PROCESSING_BATCH_ID", processingBatchId);
|
||||
|
||||
// 处理空值
|
||||
item.replaceAll((k, v) -> v == null ? "" : v);
|
||||
}
|
||||
|
||||
// 保存数据到数据库
|
||||
// if (!mesDataList.isEmpty()) {
|
||||
// mesDataMapper.saveBatchFromMes(mesDataList);
|
||||
// XxlJobHelper.log("成功保存{}条MES数据到本地数据库", mesDataList.size());
|
||||
//
|
||||
// // 将数据存入Redis缓存
|
||||
// redisUtil.set("MES_DATA_LIST", JSONObject.toJSONString(mesDataList));
|
||||
// XxlJobHelper.log("已将MES数据存入Redis缓存");
|
||||
// }
|
||||
|
||||
XxlJobHelper.log("MES系统数据对接任务执行完成");
|
||||
} catch (Exception e) {
|
||||
XxlJobHelper.log("MES系统数据对接任务执行异常: {}", e.getMessage());
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
// 初始化操作
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
// 销毁操作
|
||||
}
|
||||
|
||||
@Scheduled(cron ="*/5 * * * * ?")
|
||||
public void scheduled(){
|
||||
try {
|
||||
System.out.println( "============定时查询MES数据==========");
|
||||
List<Map<String, Object>> mesDataList = mesDataMapper.listAllMesData();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
datasource.no1.driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
datasource.no1.url=jdbc:mysql://127.0.0.1:3306/integrated_yjb?allowPublicKeyRetrieval=true&serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf-8
|
||||
datasource.no1.username=root
|
||||
datasource.no1.password=Mysql@zcloud33080
|
||||
#
|
||||
datasource.no2.driver-class-name:org.postgresql.Driver
|
||||
datasource.no2.url=jdbc:postgresql://127.0.0.1:3306/postgres?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=UTC
|
||||
datasource.no2.username=postgres
|
||||
datasource.no2.password=DjIGYM8k0h
|
||||
#MES系统数据库配置
|
||||
datasource.mes.driver-class-name=oracle.jdbc.OracleDriver
|
||||
datasource.mes.url=jdbc:oracle:thin:@172.16.90.252:1521/jymes
|
||||
datasource.mes.username=drzf
|
||||
datasource.mes.password=drzf
|
||||
#redis
|
||||
spring.redis.host=10.199.64.30
|
||||
spring.redis.password=5.5pYdZqHxpR#9%W.
|
||||
spring.redis.database=4
|
||||
spring.redis.port=16379
|
||||
|
||||
#druidè¿æ¥æ±
|
||||
spring.datasource.type:com.alibaba.druid.pool.DruidDataSource
|
||||
#æå¤§æ´»è·æ°
|
||||
spring.datasource.maxActive:20
|
||||
#åå§åæ°é
|
||||
spring.datasource.initialSize:1
|
||||
#æå¤§è¿æ¥çå¾
è¶
æ¶æ¶é´
|
||||
spring.datasource.maxWait:60000
|
||||
#æå¼PSCacheï¼å¹¶ä¸æå®æ¯ä¸ªè¿æ¥PSCacheç大å°
|
||||
spring.datasource.poolPreparedStatements:true
|
||||
spring.datasource.maxPoolPreparedStatementPerConnectionSize:20
|
||||
#éè¿connectionProperties屿§æ¥æå¼mergeSqlåè½ï¼æ
¢SQLè®°å½
|
||||
#connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
|
||||
spring.datasource.minIdle:1
|
||||
spring.datasource.timeBetweenEvictionRunsMillis:60000
|
||||
spring.datasource.minEvictableIdleTimeMillis:300000
|
||||
spring.datasource.validationQuery:select 1 from dual
|
||||
spring.datasource.testWhileIdle:true
|
||||
spring.datasource.testOnBorrow:false
|
||||
spring.datasource.testOnReturn:false
|
||||
#é
ç½®çæ§ç»è®¡æ¦æªçfiltersï¼å»æåçæ§çé¢sqlå°æ æ³ç»è®¡,'wall'ç¨äºé²ç«å¢
|
||||
filters:stat, wall, log4j
|
||||
#ç¼åé
ç½®æä»¶ä½ç½®
|
||||
spring.cache.ehcache.cofnig=ehcache.xml
|
||||
#é
ç½®è¿å¥è¯,æ§å¶å°è¾åºsqlè¯å¥
|
||||
logging.level.com.zcloud.mapper=debug
|
||||
#ä¸ä¼ æä»¶å¤§å°éå¶
|
||||
spring.servlet.multipart.max-file-size=500MB
|
||||
spring.servlet.multipart.max-request-size=500MB
|
||||
#activitiæ¨¡åæ£æµ
|
||||
spring.activiti.check-process-definitions=false
|
||||
#å符
|
||||
server.servlet.encoding.charset=UTF-8
|
||||
server.servlet.encoding.force=true
|
||||
server.servlet.encoding.enabled=true
|
||||
spring.main.banner-mode=off
|
||||
|
||||
xxl.job.admin.addresses=http://192.168.20.230:28080/xxl-job-admin
|
||||
xxl.job.accessToken=yjb.prod
|
||||
xxl.job.port=1211
|
||||
xxl.job.executor.appname=yjb-job-normal-task
|
||||
xxl.job.executor.logretentiondays=30
|
|
@ -1,5 +1,5 @@
|
|||
spring.application.name=integrated_whb_scheduled
|
||||
server.port=19099
|
||||
spring.profiles.active=master
|
||||
spring.profiles.active=local
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
<?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.zcloud.mapper.dsno2.monitoring.MesDataMapper">
|
||||
|
||||
<!-- 查询所有MES数据,使用MyBatis自动映射功能 -->
|
||||
<select id="listAllMesData" resultType="java.util.HashMap">
|
||||
select * from drzf_view
|
||||
</select>
|
||||
|
||||
<!-- 根据条件查询MES数据 -->
|
||||
<select id="listMesDataByCondition" parameterType="com.zcloud.entity.PageData" resultType="com.zcloud.entity.PageData">
|
||||
SELECT * FROM mes_data_view
|
||||
WHERE 1=1
|
||||
<if test="deviceId != null and deviceId != ''">
|
||||
AND DEVICE_ID = #{deviceId}
|
||||
</if>
|
||||
<if test="deviceName != null and deviceName != ''">
|
||||
AND DEVICE_NAME LIKE CONCAT('%', #{deviceName}, '%')
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<!-- 批量保存从MES获取的数据 -->
|
||||
<insert id="saveBatchFromMes" parameterType="java.util.List">
|
||||
INSERT INTO target_table (
|
||||
ID,
|
||||
DEVICE_ID,
|
||||
DEVICE_NAME,
|
||||
CURRENT_VALUE,
|
||||
GATHER_TIME,
|
||||
PROCESSING_TIME,
|
||||
PROCESSING_BATCH_ID
|
||||
) VALUES
|
||||
<foreach collection="list" item="item" separator=",">
|
||||
(
|
||||
#{item.ID, jdbcType=VARCHAR},
|
||||
#{item.DEVICE_ID, jdbcType=VARCHAR},
|
||||
#{item.DEVICE_NAME, jdbcType=VARCHAR},
|
||||
#{item.CURRENT_VALUE, jdbcType=VARCHAR},
|
||||
#{item.GATHER_TIME, jdbcType=TIMESTAMP},
|
||||
#{item.PROCESSING_TIME, jdbcType=TIMESTAMP},
|
||||
#{item.PROCESSING_BATCH_ID, jdbcType=VARCHAR}
|
||||
)
|
||||
</foreach>
|
||||
</insert>
|
||||
|
||||
</mapper>
|
Loading…
Reference in New Issue