diff --git a/stwzhj-modules/stwzhj-baseToSt/pom.xml b/stwzhj-modules/stwzhj-baseToSt/pom.xml index c8b07318..2d4967d3 100644 --- a/stwzhj-modules/stwzhj-baseToSt/pom.xml +++ b/stwzhj-modules/stwzhj-baseToSt/pom.xml @@ -29,15 +29,20 @@ ${dynamic-ds.version} - - org.dromara - stwzhj-common-log + org.projectlombok + lombok - org.dromara - stwzhj-common-dict + cn.hutool + hutool-all + 5.4.0 + + + + ch.qos.logback + logback-classic @@ -50,7 +55,7 @@ org.springframework.boot spring-boot-starter-web - + org.springframework.boot diff --git a/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/config/DeviceSyncConfig.java b/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/config/DeviceSyncConfig.java index 367f3dda..1a29b157 100644 --- a/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/config/DeviceSyncConfig.java +++ b/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/config/DeviceSyncConfig.java @@ -16,7 +16,7 @@ public class DeviceSyncConfig { /** * 信息来源标识 - 每个地市配置不同的info_source */ - private String infoSource = "3418"; + private String infoSource = "3416"; /** * 设备类型映射字典类型 diff --git a/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/entity/Device.java b/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/entity/Device.java index 6865f5ec..ef9e19eb 100644 --- a/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/entity/Device.java +++ b/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/entity/Device.java @@ -26,14 +26,7 @@ public class Device implements AbstractGpsEntity, Serializable { @Column(name = "device_code") private String deviceCode; - /** - * - * - * - * - * - * - */ + @Column(name = "device_type") private String deviceType; @@ -52,19 +45,19 @@ public class Device implements AbstractGpsEntity, Serializable { /** * 警号(若有) */ - @Column(name = "policeNo") + @Column(name = "police_no") private String policeNo; /** * 姓名(若有) */ - @Column(name = "policeName") + @Column(name = "police_name") private String policeName; /** * 联系电话(若有) */ - @Column(name = "phoneNum") + @Column(name = "phone_num") private String phoneNum; /** diff --git a/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/handler/AbstractAsyncHandler.java b/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/handler/AbstractAsyncHandler.java deleted file mode 100644 index 3f845bb1..00000000 --- a/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/handler/AbstractAsyncHandler.java +++ /dev/null @@ -1,129 +0,0 @@ -package org.dromara.basetost.handler; - -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.date.DateUtil; -import org.dromara.basetost.entity.AbstractGpsEntity; -import org.dromara.basetost.entity.Device; -import org.dromara.basetost.entity.DictData; -import org.dromara.basetost.repository.DictDataRepository; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.system.api.domain.bo.RemoteDeviceBo; -import org.dromara.system.api.domain.bo.RemoteDeviceToStBo; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; - -import java.util.*; - -/** - *

description:

- * - * @author chenle - * @date 2022-08-05 16:48 - */ -@Component -public abstract class AbstractAsyncHandler { - - private Logger logger = LoggerFactory.getLogger(AsyncHandler.class); - @Autowired - AsyncHandler asyncHandler; - - @Autowired - DictDataRepository dictDataRepository; - - - - private String lastUpdateTime; - - - public boolean saveBaseToST(){ - - - try { -// lastUpdateTime = PathUtil.getValueFromProperties("lastUpdateTime"); - lastUpdateTime = "2024-11-23 11:20:32"; - }catch (Exception e){ - logger.info("lastUpdateTime={},lastUpdateTimeError={}",lastUpdateTime,e.getMessage()); - return false; - } - - List data = getGpsInfoByTime(lastUpdateTime); - logger.info("dataSize={}",data.size()); - if(CollectionUtils.isEmpty(data)){ - logger.info("此时无数据={}",lastUpdateTime); - return true; - } - requestToData2es(data); - return true; - } - - private void requestToData2es(List data){ - String infoSource = "3418"; -// bo.setInfoSource(PathUtil.getValueFromProperties("infoSource")); - boolean b = true; - int size = data.size(); - for (AbstractGpsEntity datum : data) { - Device device = (Device) datum; - DictData dictData = dictDataRepository.findDictDataByDictTypeAndDictLabel("device_type_tost", String.valueOf(device.getDeviceType())); - String dictValue = null; - if(!Objects.isNull(dictData)){ - dictValue = dictData.getDictValue(); - } - if(StringUtils.isEmpty(dictValue)){ - dictValue = "99"; - } - - device.setDeviceType(dictValue); - } - int forCount = size / 50; - for (int i = 0; i <= forCount; i++) { - List singleList = new ArrayList<>(); - - int fromIndex = i * 50; - int endIndex = (i == forCount ? size: (i+1)*50); - singleList = data.subList(fromIndex,endIndex); -// BeanUtil.copyToList(singleList, RemoteDeviceBo.class) - List list = new ArrayList<>(); - -// bo.setDeviceBoList(); - boolean singleB = asyncHandler.saveGpsAsync(infoSource,BeanUtil.copyToList(singleList, RemoteDeviceBo.class)); - if(!singleB){ - b = false; - } - } - if(b){ - AbstractGpsEntity abstractGpsEntity = data.get(size - 1); - Device lastDevice = (Device) abstractGpsEntity; - resetUpdateTime(lastDevice.getUpdateTime()); - } - - } - - - - - private void resetUpdateTime(Date gpsTime) { - try { - lastUpdateTime = DateUtil.format(gpsTime,"yyyy-MM-dd HH:mm:ss"); -// PathUtil.updateProperties("lastUpdateTime",lastUpdateTime,"ruansi.properties"); - }catch (Exception e){ - logger.info("lastTime reset error"+e.getMessage()); - e.printStackTrace(); - } - } - - - - - protected Device produceGpsInfo(AbstractGpsEntity gpsInfo){ - return null; - }; - - protected boolean checkNullOrEmpty(AbstractGpsEntity gpsInfo) { - return false; - }; - - protected abstract List getGpsInfoByTime(String lastUpdateTime); -} diff --git a/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/handler/AsyncHandler.java b/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/handler/AsyncHandler.java deleted file mode 100644 index 4fb1a980..00000000 --- a/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/handler/AsyncHandler.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.dromara.basetost.handler; - -import org.dromara.common.core.domain.R; -import org.dromara.system.api.RemoteDeviceService; -import org.dromara.system.api.domain.bo.RemoteDeviceBo; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; - -import java.util.List; -import java.util.Map; -import java.util.Objects; - -/** - *

description:

- * - * @author chenle - * @date 2021-09-29 9:34 - */ -@Component -public class AsyncHandler { - - private Logger logger = LoggerFactory.getLogger(AsyncHandler.class); - - private RemoteDeviceService deviceService; - - -// @Async(value = "myCacheExecutor") - boolean saveGpsAsync(String infoSource, List list) { - R response = deviceService.saveDeviceToSt(infoSource,list); - if(Objects.isNull(response) || Objects.isNull(response.getCode())){ - assert response != null; - logger.info("返回null,message={}",response.getMsg()); - return false; - } - if(200 == response.getCode()){ - logger.info("success"); - }else{ - logger.info("fail,message={},data={}",response.getMsg(),response.getData()); - return false; - } - return true; - } -} diff --git a/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/handler/PDTHandler.java b/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/handler/PDTHandler.java deleted file mode 100644 index bfff71d3..00000000 --- a/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/handler/PDTHandler.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.dromara.basetost.handler; - -import cn.hutool.core.date.DateUtil; -import org.dromara.basetost.entity.AbstractGpsEntity; -import org.dromara.basetost.entity.Device; -import org.dromara.basetost.repository.DeviceRepository; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.List; - -/** - *

description:

- * - * @author chenle - * @date 2022-08-05 17:32 - */ -@Component("pdthandler") -public class PDTHandler extends AbstractAsyncHandler { - - private Logger logger = LoggerFactory.getLogger(AbstractAsyncHandler.class); - - @Autowired - DeviceRepository deviceRepository; - - public PDTHandler() { - super(); - } - - - @Override - protected List getGpsInfoByTime(String lastUpdateTime) { - - - return deviceRepository.findDeviceByUpdateTimeAfterOrderByUpdateTimeAsc(DateUtil.parse(lastUpdateTime)); -// return deviceRepository.findDeviceByUpdateTimeAfterOrderByUpdateTimeAsc(lastUpdateTime); - } - - -} diff --git a/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/handler/PathUtil.java b/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/handler/PathUtil.java deleted file mode 100644 index ab0a41a3..00000000 --- a/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/handler/PathUtil.java +++ /dev/null @@ -1,90 +0,0 @@ -package org.dromara.basetost.handler; - -/** - *

description:

- * - * @author chenle - * @date 2022-08-05 12:00 - */ - -import cn.hutool.core.date.DateTime; -import cn.hutool.core.date.DateUtil; -import org.dromara.basetost.response.MyBusinessException; -import org.dromara.common.core.utils.StringUtils; - -import java.io.*; -import java.util.Objects; -import java.util.Properties; - -public class PathUtil { - - static String outpath = System.getProperty("user.dir")+File.separator+"conf"+File.separator;//先读取config目录的,没有再加载classpath的 - - private static Properties getProperties(String fileName) { - - try { - Properties properties = new Properties(); - InputStream in = new FileInputStream(new File(outpath + fileName)); - properties.load(in); - return properties; - } catch (IOException e) { - try { - Properties properties = new Properties(); - InputStream in = PathUtil.class.getClassLoader().getResourceAsStream(fileName);//默认加载classpath的 - if(Objects.isNull(in)){ - return null; - } - properties.load(in); - return properties; - } catch (IOException es) { - return null; - } - } - } - - - - /** - * 更新properties文件的键值对 - * 如果该主键已经存在,更新该主键的值; - * 如果该主键不存在,则插件一对键值。 - * @param keyname 键名 - * @param keyvalue 键值 - */ - public static void updateProperties( String keyname, String keyvalue, String fileName) throws IOException { - - // 调用 Hashtable 的方法 put,使用 getProperty 方法提供并行性。 - // 强制要求为属性的键和值使用字符串。返回值是 Hashtable 调用 put 的结果。 - Properties props = PathUtil.getProperties(fileName); - OutputStream fos = new FileOutputStream(outpath + fileName); - props.setProperty(keyname, keyvalue); - // 以适合使用 load 方法加载到 Properties 表中的格式, - // 将此 Properties 表中的属性列表(键和元素对)写入输出流 - props.store(fos, "Update '" + keyname + "' value"); - - } - - public static String getValueFromProperties(String propertiesName) { - Properties properties = PathUtil.getProperties("ruansi.properties"); - if(Objects.isNull(properties)){ - throw new MyBusinessException("jar包所在文件夹下conf子目录下缺少[ruansi.properties] 文件,请新建"); - } - String lastUpdateTime = properties.getProperty(propertiesName); - if(StringUtils.isEmpty(lastUpdateTime)){ - throw new MyBusinessException("[ruansi.properties]文件内缺少["+propertiesName+"]属性"); - } - //checkTimeFormatter(lastUpdateTime); - return lastUpdateTime; - } - - private static void checkTimeFormatter(String lastUpdateTime) { - try { - DateTime parse = DateUtil.parse(lastUpdateTime, "yyyy-MM-dd HH:mm:ss"); - }catch (Exception e){ - throw new RuntimeException(e.getMessage()); - } - } - - - -} diff --git a/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/repository/DeviceRepository.java b/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/repository/DeviceRepository.java index 4cc80876..404066e6 100644 --- a/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/repository/DeviceRepository.java +++ b/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/repository/DeviceRepository.java @@ -20,6 +20,8 @@ public interface DeviceRepository extends JpaRepository, JpaSpe */ Device findByDeviceCodeAndInfoSource(String deviceCode, String infoSource); + + /** * 查询指定信息来源的最新更新时间 * @param infoSource 信息来源 diff --git a/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/repository/DictDataRepository.java b/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/repository/DictDataRepository.java index e8db242e..198ab98d 100644 --- a/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/repository/DictDataRepository.java +++ b/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/repository/DictDataRepository.java @@ -3,10 +3,16 @@ package org.dromara.basetost.repository; import org.dromara.basetost.entity.DictData; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; public interface DictDataRepository extends JpaRepository, JpaSpecificationExecutor { DictData findDictDataByDictTypeAndDictLabel(String dictType, String dictLabel); + @Query(value = "SELECT * FROM sys_dict_data WHERE dict_type = :dictType AND dict_label = :dictLabel", + nativeQuery = true) + DictData findByNativeSQL(@Param("dictType") String dictType, @Param("dictLabel") String dictLabel); + /** * 根据字典类型和字典值查询字典数据 * @param dictType 字典类型 diff --git a/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/schedule/BaseToSTSchedule.java b/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/schedule/BaseToSTSchedule.java index 453cabf6..1125027d 100644 --- a/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/schedule/BaseToSTSchedule.java +++ b/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/schedule/BaseToSTSchedule.java @@ -1,9 +1,7 @@ package org.dromara.basetost.schedule; -import org.dromara.basetost.handler.AbstractAsyncHandler; import org.dromara.basetost.service.DeviceSyncService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -16,20 +14,10 @@ import org.springframework.stereotype.Component; @Component public class BaseToSTSchedule { - @Autowired - @Qualifier(value = "pdthandler") - private AbstractAsyncHandler abstractAsyncHandler; @Autowired private DeviceSyncService deviceSyncService; - /** - * 设备数据同步到省厅 - */ - @Scheduled(cron = "${devicecorn:0/30 * * * * ?}") - public void sendToSt() { - abstractAsyncHandler.saveBaseToST(); - } /** * 从源数据库同步设备数据 diff --git a/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/service/DeviceSyncService.java b/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/service/DeviceSyncService.java index 1f2f04a8..e906fd71 100644 --- a/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/service/DeviceSyncService.java +++ b/stwzhj-modules/stwzhj-baseToSt/src/main/java/org/dromara/basetost/service/DeviceSyncService.java @@ -54,7 +54,6 @@ public class DeviceSyncService { * 从源数据库同步设备数据 */ @DS("target") - @Transactional(rollbackFor = Exception.class) public void syncDevices() { logger.info("开始同步设备数据,infoSource: {}", deviceSyncConfig.getInfoSource()); @@ -140,25 +139,32 @@ public class DeviceSyncService { * 处理设备类型映射 * @param sourceDevices 源设备列表 */ + @DS("source") private void mapDeviceTypes(List sourceDevices) { - for (SourceDevice sourceDevice : sourceDevices) { - String sourceDeviceType = sourceDevice.getDeviceType(); - if (sourceDeviceType == null || sourceDeviceType.isEmpty()) { - continue; - } + DataSourceContextHolder.setDataSource("source"); + try { + for (SourceDevice sourceDevice : sourceDevices) { + String sourceDeviceType = sourceDevice.getDeviceType(); + if (sourceDeviceType == null || sourceDeviceType.isEmpty()) { + continue; + } - // 从字典表查询设备类型映射 - // dict_value是源表的device_type值,dict_label是目标表的device_type值 - DictData dictData = dictDataRepository.findDictDataByDictTypeAndDictLabel( + // 从字典表查询设备类型映射 + // dict_value是源表的device_type值,dict_label是目标表的device_type值 + DictData dictData = dictDataRepository.findByNativeSQL( deviceSyncConfig.getDictType(), sourceDeviceType); + String targetDeviceType = "99"; // 默认值为"99"(其他) + if (!Objects.isNull(dictData) && dictData.getDictValue() != null) { + targetDeviceType = dictData.getDictValue(); + } - String targetDeviceType = "99"; // 默认值为"99"(其他) - if (!Objects.isNull(dictData) && dictData.getDictValue() != null) { - targetDeviceType = dictData.getDictValue(); + sourceDevice.setDeviceType(targetDeviceType); } - - sourceDevice.setDeviceType(targetDeviceType); + logger.info("已处理完类型转换数据:{}",sourceDevices.size()); + }finally { + DataSourceContextHolder.clearDataSource(); } + } /** @@ -166,7 +172,6 @@ public class DeviceSyncService { * @param sourceDevices 源设备列表 */ @DS("target") - @Transactional(rollbackFor = Exception.class) public void syncDevicesToTarget(List sourceDevices) { if (CollectionUtils.isEmpty(sourceDevices)) { return; diff --git a/stwzhj-modules/stwzhj-baseToSt/src/main/resources/application.yml b/stwzhj-modules/stwzhj-baseToSt/src/main/resources/application.yml index f4332b22..ccd0c18e 100644 --- a/stwzhj-modules/stwzhj-baseToSt/src/main/resources/application.yml +++ b/stwzhj-modules/stwzhj-baseToSt/src/main/resources/application.yml @@ -8,9 +8,6 @@ spring: application: # 应用名称 name: stwzhj-basetost - profiles: - # 环境配置 - active: dev datasource: dynamic: primary: target #设置默认数据源为目标数据库 @@ -29,12 +26,14 @@ spring: password: ycgis driver-class-name: org.postgresql.Driver jpa: - show-sql: true + show-sql: false hibernate: naming: physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl properties: hibernate: + format_sql: true # 格式化 SQL,便于阅读 + use_sql_comments: true # 添加注释,显示这是什么操作 dialect: org.hibernate.dialect.PostgreSQLDialect # 设备数据同步配置 @@ -52,3 +51,16 @@ device-sync: # 定时任务cron表达式 cron: 0 0/10 * * * ? +# 日志配置 +logging: + level: + org.springframework: warn + org.mybatis.spring.mapper: error + org.springframework.context.support.PostProcessorRegistrationDelegate: error + # JPA 日志配置 + org.hibernate.SQL: debug + org.hibernate.orm.jdbc.bind: trace # Hibernate 6 + # 如果你还在使用 Hibernate 5,取消下面的注释 + # org.hibernate.type.descriptor.sql.BasicBinder: trace + config: classpath:logback-plus.xml +