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