From 92b8a49f972e6a6b887745f4d2cc2c0cac704a96 Mon Sep 17 00:00:00 2001 From: Lius <Lius2225@163.com> Date: 星期二, 24 六月 2025 09:33:02 +0800 Subject: [PATCH] 两网数据交互 --- lxzn-module-system/lxzn-system-start/src/main/resources/application-dev.yml | 5 + lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/LogTableMapper.java | 11 ++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/LogTableServiceImpl.java | 80 ++++++++++++++++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/SqlExecutor.java | 29 +++++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/LogTable.java | 39 +++++++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/LogTableMapper.xml | 5 + lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/ILogTableService.java | 17 +++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/ImportXmlToDataJob.java | 62 ++++++++++++ 8 files changed, 248 insertions(+), 0 deletions(-) diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/LogTable.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/LogTable.java new file mode 100644 index 0000000..d522be5 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/LogTable.java @@ -0,0 +1,39 @@ +package org.jeecg.modules.mdc.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author Lius + * @date 2024/12/18 14:19 + */ +@Data +@TableName("log_table") +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value = "log_table瀵硅薄", description = "sql璁板綍琛�") +public class LogTable implements Serializable { + + private static final long serialVersionUID = 953864495681756550L; + + /** + * 鎿嶄綔绫诲瀷锛圛NSERT / UPDATE / DELETE锛� + */ + private String action; + + /** + * 鍒涘缓鏃堕棿 + */ + private Date createTime; + + /** + * sql璁板綍 + */ + private String sqlLog; +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/ImportXmlToDataJob.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/ImportXmlToDataJob.java new file mode 100644 index 0000000..2dee55d --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/ImportXmlToDataJob.java @@ -0,0 +1,62 @@ +package org.jeecg.modules.mdc.job; + +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.util.DateUtils; +import org.jeecg.modules.mdc.service.ILogTableService; +import org.jeecg.modules.mdc.util.ThrowableUtil; +import org.jeecg.modules.quartz.entity.QuartzJob; +import org.jeecg.modules.quartz.entity.SysQuartzLog; +import org.jeecg.modules.quartz.service.IQuartzJobService; +import org.jeecg.modules.quartz.service.ISysQuartzLogService; +import org.jeecg.modules.system.service.ISysAnnouncementService; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; + +/** + * @author Lius + * @date 2024/12/19 16:43 + */ +@Slf4j +public class ImportXmlToDataJob implements Job { + + @Resource + private ISysQuartzLogService sysQuartzLogService; + + @Resource + private IQuartzJobService quartzJobService; + + @Resource + private ISysAnnouncementService sysAnnouncementService; + + @Resource + private ILogTableService logTableService; + + @Override + public void execute(JobExecutionContext context) throws JobExecutionException { + SysQuartzLog quartzLog = new SysQuartzLog(); + quartzLog.setCreateTime(new Date()); + List<QuartzJob> byJobClassName = this.quartzJobService.findByJobClassName(this.getClass().getName()); + if (byJobClassName != null && !byJobClassName.isEmpty()) { + quartzLog.setJobId(byJobClassName.get(0).getId()); + } + log.info("瀹氭椂瀵煎叆sql鏁版嵁浠诲姟 ImportXmlToDataJob start! 鏃堕棿:" + DateUtils.now()); + long startTime = System.currentTimeMillis(); + try { + logTableService.importXmlToData(); + quartzLog.setIsSuccess(0); + } catch (Exception e) { + quartzLog.setIsSuccess(-1); + quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e)); + // 鍙戦�佹秷鎭�氱煡 + sysAnnouncementService.jobSendMessage("瀹氭椂瀵煎叆sql鏁版嵁浠诲姟", quartzLog.getExceptionDetail()); + } + long endTime = System.currentTimeMillis(); + quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime))); + sysQuartzLogService.save(quartzLog); + } +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/LogTableMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/LogTableMapper.java new file mode 100644 index 0000000..98cc17f --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/LogTableMapper.java @@ -0,0 +1,11 @@ +package org.jeecg.modules.mdc.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.mdc.entity.LogTable; + +/** + * @author Lius + * @date 2024/12/18 14:24 + */ +public interface LogTableMapper extends BaseMapper<LogTable> { +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/LogTableMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/LogTableMapper.xml new file mode 100644 index 0000000..3d79dd7 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/LogTableMapper.xml @@ -0,0 +1,5 @@ +<?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="org.jeecg.modules.mdc.mapper.LogTableMapper"> + +</mapper> \ No newline at end of file diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/ILogTableService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/ILogTableService.java new file mode 100644 index 0000000..9e9f887 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/ILogTableService.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.mdc.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.mdc.entity.LogTable; + +/** + * @author Lius + * @date 2024/12/18 14:29 + */ +public interface ILogTableService extends IService<LogTable> { + + /** + * 瀵煎叆鍚屾鏁版嵁sql鎵ц鍒版暟鎹簱 + */ + void importXmlToData(); + +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/LogTableServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/LogTableServiceImpl.java new file mode 100644 index 0000000..8f5d25e --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/LogTableServiceImpl.java @@ -0,0 +1,80 @@ +package org.jeecg.modules.mdc.service.impl; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileReader; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.exception.JeecgBootException; +import org.jeecg.modules.mdc.entity.LogTable; +import org.jeecg.modules.mdc.mapper.LogTableMapper; +import org.jeecg.modules.mdc.service.ILogTableService; +import org.jeecg.modules.mdc.util.SqlExecutor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +/** + * @author Lius + * @date 2024/12/18 14:29 + */ +@Service +@Slf4j +public class LogTableServiceImpl extends ServiceImpl<LogTableMapper, LogTable> implements ILogTableService { + + @Value("${fileService.localFilePath}") + private String localFilePath; + + @Value("${fileService.newFilePath}") + private String newFilePath; + + @Value("${fileService.failedLocFilePath}") + private String failedLocFilePath; + + @Resource + private SqlExecutor sqlExecutor; + + /** + * 瀵煎叆鍚屾鏁版嵁sql鎵ц鍒版暟鎹簱 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void importXmlToData() { + File[] files = FileUtil.ls(localFilePath); + List<String> failedSqlList = new ArrayList<>(); // 鐢ㄤ簬瀛樺偍鎵ц澶辫触鐨� SQL + for (File file : files) { + if (file.isFile()) { + String loFilePath = localFilePath + file.getName(); + FileReader fileReader = new FileReader(loFilePath); + List<String> sqlList = fileReader.readLines(); + log.info("鎴愬姛璇诲彇鍒皗}鏉ql,鎵ц鎿嶄綔", sqlList.size()); + for (String sql : sqlList) { + try { + sqlExecutor.execute(sql); + } catch (Exception e) { + failedSqlList.add(sql); + } + } + if (!failedSqlList.isEmpty()) { + try { + FileUtil.appendLines(failedSqlList, failedLocFilePath, "UTF-8"); + } catch (Exception e) { + throw new JeecgBootException("鏁版嵁鍐欏叆鏂囦欢澶辫触锛�"); + } + } + + if (Integer.parseInt(file.getName().substring(file.getName().length() - 10, file.getName().length() - 4)) == 1) { + // 鍒犻櫎鍘嗗彶鏂囦欢 + FileUtil.clean(newFilePath); + } + + // 澶囦唤 + FileUtil.move(new File(loFilePath), new File(newFilePath + file.getName()), true); + } + } + } +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/SqlExecutor.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/SqlExecutor.java new file mode 100644 index 0000000..646dc55 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/SqlExecutor.java @@ -0,0 +1,29 @@ +package org.jeecg.modules.mdc.util; + +import org.apache.ibatis.jdbc.SqlRunner; +import org.apache.ibatis.session.SqlSession; +import org.apache.ibatis.session.SqlSessionFactory; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * @author Lius + * @date 2025/1/3 13:26 + */ +@Component +public class SqlExecutor { + + @Resource + private SqlSessionFactory sqlSessionFactory; + + public void execute(String sql) { + try (SqlSession sqlSession = sqlSessionFactory.openSession(true)) { + SqlRunner runner = new SqlRunner(sqlSession.getConnection()); + runner.run(sql); + } catch (Exception e) { +// e.printStackTrace(); + throw new RuntimeException("Error executing SQL: " + sql, e); + } + } +} diff --git a/lxzn-module-system/lxzn-system-start/src/main/resources/application-dev.yml b/lxzn-module-system/lxzn-system-start/src/main/resources/application-dev.yml index 682766c..127a534 100644 --- a/lxzn-module-system/lxzn-system-start/src/main/resources/application-dev.yml +++ b/lxzn-module-system/lxzn-system-start/src/main/resources/application-dev.yml @@ -321,3 +321,8 @@ interval: 10000 # 鐩戞帶闂撮殧(ms) security: encryption-key: 1234567890abcdef # 鍔犺В瀵嗙閽� +#mdc鏂囦欢璺緞閰嶇疆 +fileService: + localFilePath: D:/data/sql/ #鏈湴鏂囦欢璺緞 + newFilePath: D:/data/bak/ #澶囦唤鏂囦欢璺緞 + failedLocFilePath: D:/data/failed/failed.sql #澶辫触鏂囦欢璺緞 -- Gitblit v1.9.3