From 88de0b5169112f8ea908cc2c048bc34286f8851d Mon Sep 17 00:00:00 2001
From: lin <sbla5888@163.com>
Date: Mon, 26 Feb 2024 13:12:00 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/main/java/org/springblade/modules/place/service/impl/PlaceServiceImpl.java               |   22 +
 src/main/java/org/springblade/modules/property/mapper/PropertyCapitalApplyMapper.xml         |    1 
 src/main/resources/application-prod.yml                                                      |   13 
 src/main/java/org/springblade/modules/article/mapper/ArticleMapper.xml                       |   13 
 src/main/java/org/springblade/binlog/listener/BinlogListenerMixed.java                       |  131 +++++++++++
 src/main/resources/application-test.yml                                                      |    9 
 src/main/java/org/springblade/modules/property/entity/PropertyCapitalApplyEntity.java        |    2 
 src/main/java/org/springblade/modules/task/vo/TaskVO.java                                    |   16 +
 src/main/java/org/springblade/binlog/listener/MysqlBinLogListener.java                       |    7 
 src/main/java/org/springblade/modules/article/mapper/ArticleMapper.java                      |    2 
 src/main/java/org/springblade/modules/article/service/impl/ArticleServiceImpl.java           |    3 
 src/main/java/org/springblade/modules/place/mapper/PlaceMapper.xml                           |   61 ++++-
 src/main/java/org/springblade/modules/place/mapper/PlaceMapper.java                          |   32 +-
 src/main/java/org/springblade/modules/taskPlaceSelfCheck/mapper/TaskPlaceSelfCheckMapper.xml |    4 
 src/main/java/org/springblade/modules/task/controller/TaskBailReportingEventController.java  |    5 
 src/main/java/org/springblade/binlog/listener/TourBinLogListener.java                        |  132 +++++++++++
 src/main/java/org/springblade/binlog/client/MysqlClient.java                                 |  102 +++++++++
 src/main/java/org/springblade/binlog/util/BinLogUtils.java                                   |   68 +----
 src/main/java/org/springblade/modules/task/mapper/TaskMapper.xml                             |   17 +
 src/main/resources/application-dev.yml                                                       |    6 
 src/main/java/org/springblade/binlog/constant/BinLogConstants.java                           |    9 
 src/main/resources/application.yml                                                           |    3 
 22 files changed, 546 insertions(+), 112 deletions(-)

diff --git a/src/main/java/org/springblade/binlog/client/MysqlClient.java b/src/main/java/org/springblade/binlog/client/MysqlClient.java
new file mode 100644
index 0000000..8d8f720
--- /dev/null
+++ b/src/main/java/org/springblade/binlog/client/MysqlClient.java
@@ -0,0 +1,102 @@
+package org.springblade.binlog.client;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.binlog.constant.BinLogConstants;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+
+/**
+ * mysql 客户端连接
+ */
+@Slf4j
+@Component
+public class MysqlClient {
+
+	//声明对象
+	private static MysqlClient mysqlClient;
+
+
+	@Resource
+	private BinLogConstants binLogConstants;
+
+	/**
+	 * 初始化
+	 */
+	@PostConstruct
+	public void init(){
+		mysqlClient = this;
+		mysqlClient.binLogConstants = this.binLogConstants;
+	}
+
+	/**
+	 * sql 连接
+	 * @param sql
+	 */
+	public static void sqlConnect(String sql,Integer type){
+		String driver = "com.mysql.cj.jdbc.Driver";
+		String url = mysqlClient.binLogConstants.getFromUrl();
+		String user = mysqlClient.binLogConstants.getFromUsername();
+		String password = mysqlClient.binLogConstants.getFromPassword();
+		Connection conn = null;
+		PreparedStatement ps = null;
+		try {
+			Class.forName ( driver );
+			conn = (Connection) DriverManager.getConnection ( url, user, password );
+			if (!conn.isClosed ()) {
+				log.info( "数据库连接成功!" );
+				ps = conn.prepareStatement ( sql );
+				//判断是否为修改,删除
+				if (type==1){
+					//修改删除
+					ps.executeUpdate();
+					log.info( "数据已发送成功!" );
+				}else {
+					//新增
+					ps.execute();
+					log.info( "数据已发送成功!" );
+				}
+			}
+		} catch (ClassNotFoundException e) {
+			e.printStackTrace();
+		} catch (SQLException e) {
+			e.printStackTrace ();
+		}finally {
+			try {
+				ps.close();
+				conn.close();
+			} catch (SQLException throwables) {
+				throwables.printStackTrace();
+			}
+		}
+	}
+
+	/**
+	 * 连接mysql数据库 新增
+	 * @param sql
+	 */
+	public static void insert(String sql) {
+		sqlConnect(sql,2);
+	}
+
+	/**
+	 * 连接mysql数据库 修改
+	 * @param sql
+	 */
+	public static void update(String sql) {
+		sqlConnect(sql,1);
+	}
+
+	/**
+	 * 连接mysql数据库 删除
+	 * @param sql
+	 */
+	public static void delete(String sql) {
+		sqlConnect(sql,1);
+	}
+}
diff --git a/src/main/java/org/springblade/binlog/constant/BinLogConstants.java b/src/main/java/org/springblade/binlog/constant/BinLogConstants.java
index b22a685..797afc5 100644
--- a/src/main/java/org/springblade/binlog/constant/BinLogConstants.java
+++ b/src/main/java/org/springblade/binlog/constant/BinLogConstants.java
@@ -31,6 +31,15 @@
 	@Value("${binlog.table}")
 	private String table;
 
+	@Value("${binlog.from.datasource.url}")
+	private String fromUrl;
+
+	@Value("${binlog.from.datasource.username}")
+	private String fromUsername;
+
+	@Value("${binlog.from.datasource.password}")
+	private String fromPassword;
+
 	public static final int consumerThreads = 5;
 
 	public static final long queueSleep = 1000;
diff --git a/src/main/java/org/springblade/binlog/listener/BinlogListenerMixed.java b/src/main/java/org/springblade/binlog/listener/BinlogListenerMixed.java
new file mode 100644
index 0000000..4ecba8f
--- /dev/null
+++ b/src/main/java/org/springblade/binlog/listener/BinlogListenerMixed.java
@@ -0,0 +1,131 @@
+package org.springblade.binlog.listener;
+
+import com.github.shyiko.mysql.binlog.BinaryLogClient;
+import com.github.shyiko.mysql.binlog.event.Event;
+import com.github.shyiko.mysql.binlog.event.EventData;
+import com.github.shyiko.mysql.binlog.event.QueryEventData;
+import com.github.shyiko.mysql.binlog.event.TableMapEventData;
+import com.github.shyiko.mysql.binlog.event.WriteRowsEventData;
+import com.github.shyiko.mysql.binlog.event.deserialization.EventDeserializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.List;
+public class BinlogListenerMixed {
+
+	private static final Logger logger = LoggerFactory.getLogger(BinlogListenerMixed.class);
+
+	private static final String MYSQL_HOST = "127.0.0.1";
+	private static final int MYSQL_PORT = 3308;
+	private static final String MYSQL_USERNAME = "root";
+	private static final String MYSQL_PASSWORD = "root";
+
+	public static void main(String[] args) {
+		try {
+			BinaryLogClient client = new BinaryLogClient(MYSQL_HOST, MYSQL_PORT, MYSQL_USERNAME, MYSQL_PASSWORD);
+//            client.setBinlogFilename(null);
+//            client.setBinlogPosition(-1); // 或者设置为其他适当的初始位置
+//            client.setServerId(1);
+//            client.setBinlogFilename("mysql-bin.000005");
+//            client.setBinlogPosition(154);
+			EventDeserializer eventDeserializer = new EventDeserializer();
+			eventDeserializer.setCompatibilityMode(
+				EventDeserializer.CompatibilityMode.DATE_AND_TIME_AS_LONG
+				// EventDeserializer.CompatibilityMode.CHAR_AND_BINARY_AS_BYTE_ARRAY 该设置会将varchar 转为 byte[]
+			);
+			logger.info("使用主机={}, 端口={}, 用户名={}, 密码={} 连接到 MySQL", MYSQL_HOST, MYSQL_PORT, MYSQL_USERNAME, MYSQL_PASSWORD);
+			client.setEventDeserializer(eventDeserializer);
+			client.registerEventListener(BinlogListenerMixed::handleEvent);
+			client.registerLifecycleListener(new BinaryLogClient.LifecycleListener() {
+				@Override
+				public void onConnect(BinaryLogClient client) {
+					logger.info("Connected to MySQL server");
+				}
+
+				@Override
+				public void onCommunicationFailure(BinaryLogClient client, Exception ex) {
+					logger.error("Communication failure with MySQL server", ex);
+				}
+
+				@Override
+				public void onEventDeserializationFailure(BinaryLogClient client, Exception ex) {
+					logger.error("Event deserialization failure", ex);
+				}
+
+				@Override
+				public void onDisconnect(BinaryLogClient client) {
+					logger.warn("Disconnected from MySQL server");
+					// 在这里添加重新连接或其他处理逻辑
+				}
+			});
+
+			client.connect();
+		} catch (IOException e) {
+			logger.error("@@ 连接到 MySQL 时发生错误", e);
+			logger.error("@@ Error connecting to MySQL", e);
+		}
+	}
+
+	private static void handleEvent(Event event) {
+		logger.info("@@ 打印 event: {}", event);
+		logger.info("@@ Received event type: {}", event.getHeader().getEventType());
+
+		switch (event.getHeader().getEventType()) {
+			case WRITE_ROWS:
+			case EXT_WRITE_ROWS:
+				handleWriteRowsEvent((WriteRowsEventData) event.getData());
+				break;
+			case QUERY:
+				handleQueryEvent((QueryEventData) event.getData());
+				break;
+			case TABLE_MAP:
+				handleTableMapEvent((TableMapEventData) event.getData());
+				break;
+			// 其他事件处理...
+		}
+	}
+
+	private static void handleWriteRowsEvent(WriteRowsEventData eventData) {
+		List<Serializable[]> rows = eventData.getRows();
+
+		// 获取表名
+		String tableName = getTableName(eventData);
+
+		// 处理每一行数据
+		for (Serializable[] row : rows) {
+			// 根据需要调整以下代码以获取具体的列值
+			String column1Value = row[0].toString();
+			String column2Value = row[1].toString();
+			String url = row[2].toString();
+			logger.info(url);
+
+			// 将数据备份到另一个数据库
+			backupToAnotherDatabase(tableName, column1Value, column2Value);
+		}
+	}
+
+	private static void handleQueryEvent(QueryEventData eventData) {
+		String sql = eventData.getSql();
+		logger.info("@@ handleQueryEvent函数执行Query event SQL: {}", sql);
+
+		// 解析SQL语句,根据需要处理
+		// 例如,检查是否包含写入操作,然后执行相应的逻辑
+	}
+
+	private static void handleTableMapEvent(TableMapEventData eventData) {
+		// 获取表映射信息,根据需要处理
+		logger.info("@@ handleTableMapEvent函数执行TableMap event: {}", eventData);
+	}
+
+	private static String getTableName(EventData eventData) {
+		// 获取表名的逻辑,可以使用TableMapEventData等信息
+		// 根据实际情况实现
+		return "example_table";
+	}
+
+	private static void backupToAnotherDatabase(String tableName, String column1Value, String column2Value) {
+		// 将数据备份到另一个数据库的逻辑
+		logger.info("Backup to another database: Table={}, Column1={}, Column2={}", tableName, column1Value, column2Value);
+	}
+}
diff --git a/src/main/java/org/springblade/binlog/listener/MysqlBinLogListener.java b/src/main/java/org/springblade/binlog/listener/MysqlBinLogListener.java
index 994e185..3f11eab 100644
--- a/src/main/java/org/springblade/binlog/listener/MysqlBinLogListener.java
+++ b/src/main/java/org/springblade/binlog/listener/MysqlBinLogListener.java
@@ -50,11 +50,10 @@
 	 */
 	public MysqlBinLogListener(DataSourceConfig conf) {
 		BinaryLogClient client = new BinaryLogClient(conf.getHost(), conf.getPort(), conf.getUsername(), conf.getPassword());
+		// 序列化 EventDeserializer.CompatibilityMode.CHAR_AND_BINARY_AS_BYTE_ARRAY 该设置会将varchar 转为 byte[]
 		EventDeserializer eventDeserializer = new EventDeserializer();
-		//eventDeserializer.setCompatibilityMode(//序列化
-		//        EventDeserializer.CompatibilityMode.DATE_AND_TIME_AS_LONG,
-		//        EventDeserializer.CompatibilityMode.CHAR_AND_BINARY_AS_BYTE_ARRAY
-		//);
+			eventDeserializer.setCompatibilityMode(EventDeserializer.CompatibilityMode.DATE_AND_TIME_AS_LONG
+		);
 		client.setEventDeserializer(eventDeserializer);
 		this.parseClient = client;
 		this.queue = new ArrayBlockingQueue<>(1024);
diff --git a/src/main/java/org/springblade/binlog/listener/TourBinLogListener.java b/src/main/java/org/springblade/binlog/listener/TourBinLogListener.java
index 97c2a37..28139c3 100644
--- a/src/main/java/org/springblade/binlog/listener/TourBinLogListener.java
+++ b/src/main/java/org/springblade/binlog/listener/TourBinLogListener.java
@@ -1,19 +1,24 @@
 package org.springblade.binlog.listener;
 
-
 import cn.hutool.core.collection.CollectionUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.springblade.binlog.client.MysqlClient;
 import org.springblade.binlog.config.DataSourceConfig;
 import org.springblade.binlog.constant.BinLogConstants;
 import org.springblade.binlog.util.BinLogUtils;
+import org.springblade.binlog.vo.BinLogItem;
+import org.springblade.binlog.vo.DataProperty;
 import org.springframework.boot.CommandLineRunner;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.core.annotation.Order;
 import org.springframework.stereotype.Component;
-
 import javax.annotation.Resource;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 乐游监听器
@@ -58,7 +63,18 @@
 			log.info("注册监听信息,注册DB:" + binLogConstants.getDb() + ",注册表:" + table);
 			try {
 				mysqlBinLogListener.regListener(binLogConstants.getDb(), table, item -> {
-					log.info("监听逻辑处理");
+					if (item.getEventType().name().equals("EXT_WRITE_ROWS")){
+						// 新增处理逻辑
+						saveHandle(item);
+					}
+					if (item.getEventType().name().equals("EXT_UPDATE_ROWS")){
+						// 更新处理逻辑
+						updateHandle(item);
+					}
+					if (item.getEventType().name().equals("EXT_DELETE_ROWS")){
+						// 删除处理逻辑
+						deletedHandle(item);
+					}
 				});
 			} catch (Exception e) {
 				log.error("BinLog监听异常:" + e);
@@ -67,6 +83,116 @@
 		// 多线程消费
 		mysqlBinLogListener.parse();
 	}
+
+	/**
+	 * 新增处理逻辑
+	 * @param item
+	 */
+	private void saveHandle(BinLogItem item) {
+		String tableName = item.getDbTable().split("-")[1];
+		Map<String, Serializable> data = item.getAfter();
+		Map<String, DataProperty> dataProperty = item.getDataProperty();
+		// 创建更新对象
+		List<String> keyList = new ArrayList<>();
+		List<String> valueList = new ArrayList<>();
+		// 遍历匹配数据
+		dataProperty.forEach((key,value)->{
+//			log.info("数据类型 " + value.dataType);
+			if(null!=data.get(key)) {
+				keyList.add(key);
+				if (value.dataType.equals("varchar") ||
+					value.getDataType().equals("char")) {
+					valueList.add("'" + data.get(key).toString() + "'");
+				}else if(value.dataType.equals("text") ||
+					value.dataType.equals("mediumtext")) {
+					byte[] bytes = (byte[])data.get(key);
+					valueList.add("'" + new String(bytes) + "'");
+				}else if(value.dataType.equals("date") ||
+					value.getDataType().equals("datetime")) {
+					Long time = Long.parseLong(data.get(key).toString());
+					valueList.add("'" + BinLogUtils.getDateFormatStr(new Date(time)) + "'");
+				}else {
+					valueList.add(data.get(key).toString());
+				}
+			}
+		});
+		// 拼接sql
+		StringBuilder sqlBuilder = new StringBuilder();
+		sqlBuilder.append("insert into ")
+			.append(tableName)
+			.append("(")
+			.append(String.join(",",keyList))
+			.append(") ")
+			.append(" values (")
+			.append(String.join(",",valueList))
+			.append(");");
+		log.info("sql: " + sqlBuilder.toString());
+		// 同步到其他数据库
+		MysqlClient.insert(sqlBuilder.toString());
+	}
+
+	/**
+	 * 修改处理逻辑
+	 * @param item
+	 */
+	private void updateHandle(BinLogItem item) {
+		String tableName = item.getDbTable().split("-")[1];
+		Map<String, Serializable> data = item.getAfter();
+		Map<String, DataProperty> dataProperty = item.getDataProperty();
+		// 创建更新对象
+		List<String> updateList = new ArrayList<>();
+		// 遍历匹配数据
+		dataProperty.forEach((key,value)->{
+//			log.info("数据类型 " + value.dataType);
+			if(null!=data.get(key) && !key.equals("id")) {
+				if (value.dataType.equals("varchar") ||
+					value.getDataType().equals("char")) {
+					updateList.add(key + " = '" + data.get(key).toString() + "'");
+				}else if(value.dataType.equals("text") ||
+					value.dataType.equals("mediumtext")) {
+					byte[] bytes = (byte[])data.get(key);
+					updateList.add(key + " = '" + new String(bytes) + "'");
+				}else if(value.dataType.equals("date") ||
+					value.getDataType().equals("datetime")) {
+					Long time = Long.parseLong(data.get(key).toString());
+					updateList.add(key + " = '" + BinLogUtils.getDateFormatStr(new Date(time)) + "'");
+				}else {
+					updateList.add(key + " = " + data.get(key).toString());
+				}
+			}
+		});
+		// 拼接sql
+		StringBuilder sqlBuilder = new StringBuilder();
+		sqlBuilder.append("update ")
+			.append(tableName)
+			.append(" set ")
+			.append(String.join(",",updateList))
+			.append(" where id = ")
+			.append(data.get("id"))
+			.append(";");
+		log.info("sql: " + sqlBuilder.toString());
+		// 同步到其他数据库
+		MysqlClient.update(sqlBuilder.toString());
+	}
+
+	/**
+	 * 删除处理逻辑
+	 * @param item 数据
+	 */
+	private void deletedHandle(BinLogItem item) {
+		String tableName = item.getDbTable().split("-")[1];
+		Map<String, Serializable> data = item.getBefore();
+		// 拼接sql
+		StringBuilder sqlBuilder = new StringBuilder();
+		sqlBuilder.append("delete from ")
+			.append(tableName)
+			.append(" where id = ")
+			.append(data.get("id"))
+			.append(";");
+		log.info("sql: " + sqlBuilder.toString());
+		// 同步到其他数据库
+		MysqlClient.delete(sqlBuilder.toString());
+	}
 }
 
 
diff --git a/src/main/java/org/springblade/binlog/util/BinLogUtils.java b/src/main/java/org/springblade/binlog/util/BinLogUtils.java
index b477218..3620b12 100644
--- a/src/main/java/org/springblade/binlog/util/BinLogUtils.java
+++ b/src/main/java/org/springblade/binlog/util/BinLogUtils.java
@@ -8,11 +8,8 @@
 import org.springblade.binlog.config.DataSourceConfig;
 import org.springblade.binlog.vo.BinLogItem;
 import org.springblade.binlog.vo.DataProperty;
-import org.springblade.core.tool.utils.CollectionUtil;
 import org.springblade.core.tool.utils.DateUtil;
 import org.springframework.stereotype.Component;
-import javax.annotation.PostConstruct;
-import javax.annotation.Resource;
 import java.io.Serializable;
 import java.sql.*;
 import java.util.Arrays;
@@ -36,15 +33,6 @@
 public class BinLogUtils {
 
 	private static BinLogUtils binLogUtils;
-
-//	@Resource
-//	private SearchStoreLogoExtMapper searchStoreLogoExtMapper;
-
-//	@PostConstruct
-//	public void init() {
-//		binLogUtils = this;
-//		binLogUtils.searchStoreLogoExtMapper = this.searchStoreLogoExtMapper;
-//	}
 
 	/**
 	 * 拼接dbTable
@@ -90,26 +78,6 @@
 		}
 		return null;
 	}
-
-//	/**
-//	 * 根据table获取code
-//	 *
-//	 * @param table
-//	 * @return java.lang.Integer
-//	 */
-//	public static Integer getCodeByTable(String table) {
-//		if (StringUtils.isEmpty(table)) {
-//			return null;
-//		}
-//		return CategoryEnum.getCodeByTab(table);
-//	}
-
-//	public static String getMsgByTab(String table) {
-//		if (StringUtils.isEmpty(table)) {
-//			return null;
-//		}
-//		return CategoryEnum.getMsgByTab(table);
-//	}
 
 	/**
 	 * 根据DBTable获取table
@@ -181,28 +149,6 @@
 		return null;
 	}
 
-
-//	/**
-//	 * 根据storeId获取imgUrl
-//	 */
-//	public static String getImgUrl(Long storeId) {
-//
-//		if (storeId == null) {
-//			return "";
-//		}
-//		//获取url
-//		SearchStoreLogo searchStoreLogo = new SearchStoreLogo();
-//		searchStoreLogo.setStoreId(storeId);
-//		List<SearchStoreLogo> searchStoreLogos = binLogUtils.searchStoreLogoExtMapper.selectList(searchStoreLogo);
-//		if (CollectionUtil.isNotEmpty(searchStoreLogos)) {
-//			SearchStoreLogo storeLogo = searchStoreLogos.get(0);
-//			if (storeLogo != null) {
-//				return storeLogo.getStoreLogo();
-//			}
-//		}
-//		return "";
-//	}
-
 	/**
 	 * 格式化date
 	 *
@@ -222,6 +168,20 @@
 		Date formatDate = DateUtil.parse(strDate, dateFormat);
 		return formatDate;
 	}
+
+	/**
+	 * 格式化date
+	 *
+	 * @param date
+	 * @return java.util.Date
+	 */
+	public static String getDateFormatStr(Date date) {
+		if (date == null) {
+			return null;
+		}
+		String dateFormat = "yyyy-MM-dd HH:mm:ss";
+		return DateUtil.format(date, dateFormat);
+	}
 }
 
 
diff --git a/src/main/java/org/springblade/modules/article/mapper/ArticleMapper.java b/src/main/java/org/springblade/modules/article/mapper/ArticleMapper.java
index 380d1eb..7fb96a7 100644
--- a/src/main/java/org/springblade/modules/article/mapper/ArticleMapper.java
+++ b/src/main/java/org/springblade/modules/article/mapper/ArticleMapper.java
@@ -58,5 +58,5 @@
 
 	String getDistrictId(String houseCode);
 
-    List<ArticleVO> getArticleByDistrictId(ArticleVO article);
+    List<ArticleVO> getArticleByDistrictId(@Param("article") ArticleVO article);
 }
diff --git a/src/main/java/org/springblade/modules/article/mapper/ArticleMapper.xml b/src/main/java/org/springblade/modules/article/mapper/ArticleMapper.xml
index 7d0625e..56e3877 100644
--- a/src/main/java/org/springblade/modules/article/mapper/ArticleMapper.xml
+++ b/src/main/java/org/springblade/modules/article/mapper/ArticleMapper.xml
@@ -113,12 +113,12 @@
 
             <if test="article.districtId != null and article.districtId != ''">
                 and (ja.article_range like concat('%',#{article.districtId},'%')
-                or ja.article_range is null)
+                or ja.article_range is null or ja.article_range  = '')
             </if>
 
             <if test="article.userId != null">
-                and (jpd.appoint_user like concat('%',#{article.userId},'%')
-                or jpd.appoint_user is null)
+                and (jpd.user_ids like concat('%',#{article.userId},'%')
+                OR jpd.user_ids IS NULL or jpd.user_ids  = '')
             </if>
 
             <if test="article.building != null and article.building != ''">
@@ -545,8 +545,15 @@
         jczz_article ja
         LEFT JOIN jczz_district jd ON ja.district_id = jd.id
         LEFT JOIN blade_region br on br.`code` = jd.community_code
+        LEFT JOIN jczz_public_discuss jpd on jpd.article_id=ja.id
         where 1=1
         and ja.is_deleted = 0
+
+        <if test="article.eventType != null">
+            and jpd.event_type = #{article.eventType}
+            and jpd.end_time is not null
+        </if>
+
         <if test="article.propertyFlag!=null ">
             <if test="article.communityName!=null and article.communityName!=''">
                 and br.`village_name` like concat('%',#{article.communityName},'%')
diff --git a/src/main/java/org/springblade/modules/article/service/impl/ArticleServiceImpl.java b/src/main/java/org/springblade/modules/article/service/impl/ArticleServiceImpl.java
index 61fbb31..283b240 100644
--- a/src/main/java/org/springblade/modules/article/service/impl/ArticleServiceImpl.java
+++ b/src/main/java/org/springblade/modules/article/service/impl/ArticleServiceImpl.java
@@ -173,6 +173,9 @@
 
 	@Override
 	public List<ArticleVO> getArticleByDistrictId(ArticleVO article) {
+		List<String> objects = new ArrayList<>();
+		objects.add(article.getDistrictId());
+		article.setDistrictIdList(objects);
 		return baseMapper.getArticleByDistrictId(article);
 	}
 }
diff --git a/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.java b/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.java
index f05686b..6dfec06 100644
--- a/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.java
+++ b/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.java
@@ -36,6 +36,22 @@
 
 
 	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param place
+	 * @param houseCodeList
+	 * @param regionChildCodesList
+	 * @param isAdministrator
+	 * @return
+	 */
+	List<PlaceVO> selectPlacePage(IPage page,
+								  @Param("place") PlaceVO place,
+								  @Param("gridCodeList") List<String> gridCodeList,
+								  @Param("regionChildCodesList") List<String> regionChildCodesList,
+								  @Param("isAdministrator") Integer isAdministrator);
+
+	/**
 	 * 九小场所档案
 	 *
 	 * @param page
@@ -53,22 +69,6 @@
 								  @Param("isAdministrator") Integer isAdministrator,
 								  @Param("nineTypeList") List<String> nineTypeList);
 
-
-	/**
-	 * 自定义分页
-	 *
-	 * @param page
-	 * @param place
-	 * @param houseCodeList
-	 * @param regionChildCodesList
-	 * @param isAdministrator
-	 * @return
-	 */
-	List<PlaceVO> selectPlacePage(IPage page,
-								  @Param("place") PlaceVO place,
-								  @Param("houseCodeList") List<String> houseCodeList,
-								  @Param("regionChildCodesList") List<String> regionChildCodesList,
-								  @Param("isAdministrator") Integer isAdministrator);
 
 	/**
 	 * 查询场所集合信息
diff --git a/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.xml b/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.xml
index b016394..a15befb 100644
--- a/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.xml
+++ b/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.xml
@@ -73,22 +73,59 @@
         <if test="place.isPerfect==2">
             and jp.status = 2
         </if>
-        <if test="houseCodeList != null and houseCodeList.size()>0">
-            and jp.house_code in
-            <foreach collection="houseCodeList" item="houseCode" separator ="," open="("  close=")">
-                #{houseCode}
-            </foreach>
-        </if>
         <if test="isAdministrator==2">
             <choose>
-                <when test="regionChildCodesList !=null and regionChildCodesList.size()>0">
-                    and jg.grid_code in
-                    <foreach collection="regionChildCodesList" item="code" open="(" close=")" separator=",">
-                        #{code}
-                    </foreach>
+                <when test="place.roleName != null and place.roleName != ''">
+                    <if test="place.roleName=='wgy'">
+                        <choose>
+                            <when test="gridCodeList !=null and gridCodeList.size()>0">
+                                and jp.grid_code in
+                                <foreach collection="gridCodeList" item="code" open="(" close=")" separator=",">
+                                    #{code}
+                                </foreach>
+                            </when>
+                            <otherwise>
+                                and jp.grid_code in ('')
+                            </otherwise>
+                        </choose>
+                    </if>
+                    <if test="place.roleName=='mj'">
+                        <choose>
+                            <when test="regionChildCodesList !=null and regionChildCodesList.size()>0">
+                                and jpag.community_code in
+                                <foreach collection="regionChildCodesList" item="code" open="(" close=")" separator=",">
+                                    #{code}
+                                </foreach>
+                            </when>
+                            <otherwise>
+                                and jpag.community_code in ('')
+                            </otherwise>
+                        </choose>
+                    </if>
                 </when>
                 <otherwise>
-                    and jg.grid_code in ('')
+                    <choose>
+                        <when test="regionChildCodesList !=null and regionChildCodesList.size()>0">
+                            and
+                            (
+                            jg.grid_code in
+                            <foreach collection="regionChildCodesList" item="code" open="(" close=")" separator=",">
+                                #{code}
+                            </foreach>
+                            or
+                            jpag.community_code in
+                            <foreach collection="regionChildCodesList" item="code" open="(" close=")" separator=",">
+                                #{code}
+                            </foreach>
+                            )
+                        </when>
+                        <otherwise>
+                            and
+                            (
+                            jg.grid_code in ('') or jpag.community_code in ('')
+                            )
+                        </otherwise>
+                    </choose>
                 </otherwise>
             </choose>
         </if>
diff --git a/src/main/java/org/springblade/modules/place/service/impl/PlaceServiceImpl.java b/src/main/java/org/springblade/modules/place/service/impl/PlaceServiceImpl.java
index 199494d..59cdfe3 100644
--- a/src/main/java/org/springblade/modules/place/service/impl/PlaceServiceImpl.java
+++ b/src/main/java/org/springblade/modules/place/service/impl/PlaceServiceImpl.java
@@ -24,6 +24,7 @@
 import org.apache.logging.log4j.util.Strings;
 import org.springblade.common.cache.SysCache;
 import org.springblade.common.node.TreeStringNode;
+import org.springblade.common.param.CommonParamSet;
 import org.springblade.common.utils.IdUtils;
 import org.springblade.common.utils.SpringUtils;
 import org.springblade.core.mp.support.Condition;
@@ -48,6 +49,7 @@
 import org.springblade.modules.place.service.IPlaceExtService;
 import org.springblade.modules.place.service.IPlacePoiLabelService;
 import org.springblade.modules.place.service.IPlaceRelService;
+import org.springblade.modules.place.vo.PlaceCheckVO;
 import org.springblade.modules.place.vo.PlacePoiLabelVO;
 import org.springblade.modules.place.vo.PlaceVO;
 import org.springblade.modules.place.mapper.PlaceMapper;
@@ -119,16 +121,13 @@
 	 */
 	@Override
 	public IPage<PlaceVO> selectPlacePage(IPage<PlaceVO> page, PlaceVO place) {
-		List<String> regionChildCodesList = SysCache.getRegionChildCodesByDeptId(AuthUtil.getDeptId());
-		Integer isAdministrator = AuthUtil.isAdministrator() == true ? 1 : 2;
-		List<String> list = new ArrayList<>();
-		if (null != place.getRoleName() && !place.getRoleName().equals("")) {
-			if (place.getRoleName().equals("网格员")) {
-				// 查询对应的房屋地址code
-				list = gridService.getAddressCodeListByUserId(AuthUtil.getUserId());
-			}
-		}
-		List<PlaceVO> placeVOS = baseMapper.selectPlacePage(page, place, list, regionChildCodesList, isAdministrator);
+		// 公共参数设置
+		CommonParamSet commonParamSet = new CommonParamSet().invoke(PlaceVO.class,place);
+		List<PlaceVO> placeVOS = baseMapper.selectPlacePage(page,
+			place,
+			commonParamSet.getGridCodeList(),
+			commonParamSet.getRegionChildCodesList(),
+			commonParamSet.getIsAdministrator());
 		// 返回
 		return page.setRecords(placeVOS);
 	}
@@ -313,6 +312,7 @@
 			}
 		} else {
 			// 一对一,暂时不处理,后续考虑需加绑定关系表
+
 		}
 	}
 
@@ -327,6 +327,7 @@
 			&& !Strings.isBlank(placeVO.getLocation())
 			&& !Strings.isBlank(placeVO.getPlaceName())
 			&& !Strings.isBlank(placeVO.getImageUrls())
+			&& !Strings.isBlank(placeVO.getPrincipalIdCard())
 		) {
 			// 已完善
 			placeVO.setStatus(2);
@@ -792,6 +793,7 @@
 				if (null != addressEntity) {
 					placeVO = new PlaceVO();
 					placeVO.setDoorplateAddressEntity(addressEntity);
+					placeVO.setHouseCode(addressEntity.getAddressCode());
 					placeVO.setLng(addressEntity.getX());
 					placeVO.setLat(addressEntity.getY());
 					placeVO.setLocation(addressEntity.getAddressName());
diff --git a/src/main/java/org/springblade/modules/property/entity/PropertyCapitalApplyEntity.java b/src/main/java/org/springblade/modules/property/entity/PropertyCapitalApplyEntity.java
index bc786b9..66ad5b9 100644
--- a/src/main/java/org/springblade/modules/property/entity/PropertyCapitalApplyEntity.java
+++ b/src/main/java/org/springblade/modules/property/entity/PropertyCapitalApplyEntity.java
@@ -202,4 +202,6 @@
 
 	private String taskId;
 
+	private Integer articleId;
+
 }
diff --git a/src/main/java/org/springblade/modules/property/mapper/PropertyCapitalApplyMapper.xml b/src/main/java/org/springblade/modules/property/mapper/PropertyCapitalApplyMapper.xml
index 74362f3..f383b27 100644
--- a/src/main/java/org/springblade/modules/property/mapper/PropertyCapitalApplyMapper.xml
+++ b/src/main/java/org/springblade/modules/property/mapper/PropertyCapitalApplyMapper.xml
@@ -26,6 +26,7 @@
         <result column="update_user" property="updateUser"/>
         <result column="update_time" property="updateTime"/>
         <result column="is_deleted" property="isDeleted"/>
+        <result column="article_id" property="articleId"/>
     </resultMap>
 
     <!--自定义分页查询-->
diff --git a/src/main/java/org/springblade/modules/task/controller/TaskBailReportingEventController.java b/src/main/java/org/springblade/modules/task/controller/TaskBailReportingEventController.java
index 1899e4b..d633538 100644
--- a/src/main/java/org/springblade/modules/task/controller/TaskBailReportingEventController.java
+++ b/src/main/java/org/springblade/modules/task/controller/TaskBailReportingEventController.java
@@ -22,10 +22,12 @@
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
+import org.apache.commons.beanutils.BeanUtils;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.modules.task.dto.TaskBailReportingEventDTO;
 import org.springblade.modules.task.entity.TaskBailReportingEventEntity;
@@ -58,7 +60,8 @@
 	@ApiOperation(value = "详情", notes = "传入taskBailReportingEvent")
 	public R<TaskBailReportingEventVO> detail(TaskBailReportingEventEntity taskBailReportingEvent) {
 		TaskBailReportingEventEntity detail = taskBailReportingEventService.getOne(Condition.getQueryWrapper(taskBailReportingEvent));
-		return R.data(TaskBailReportingEventWrapper.build().entityVO(detail));
+		TaskBailReportingEventVO copy = BeanUtil.copy(detail, TaskBailReportingEventVO.class);
+		return R.data(copy);
 	}
 	/**
 	 * 取保候审任务 分页
diff --git a/src/main/java/org/springblade/modules/task/mapper/TaskMapper.xml b/src/main/java/org/springblade/modules/task/mapper/TaskMapper.xml
index 971cc51..ece7291 100644
--- a/src/main/java/org/springblade/modules/task/mapper/TaskMapper.xml
+++ b/src/main/java/org/springblade/modules/task/mapper/TaskMapper.xml
@@ -182,13 +182,17 @@
         jt.source,
         jt.is_deleted,
         jt.house_code,
-        jt.report_type
+        jt.report_type,
+        jtbre.start_time startTimes,
+        jtbre.reach_time,
+        jtbre.return_time
         FROM
         jczz_task jt
         LEFT JOIN jczz_house jh ON jt.house_code=jh.house_code and jh.is_deleted = 0
         LEFT JOIN blade_user bu on bu.id = jt.create_user and bu.is_deleted = 0
         LEFT JOIN jczz_grid jg on jg.grid_code = jh.grid_code and jg.is_deleted = 0
         LEFT JOIN blade_region br on br.code = jg.community_code
+        LEFT JOIN jczz_task_bail_reporting_event jtbre on jtbre.task_id = jt.id
         <where>
             <if test="task.roleName != null and task.roleName != ''">
                 <if test="task.roleName=='wgy'">
@@ -350,11 +354,15 @@
     <select id="selectTaskPageBy" resultType="org.springblade.modules.task.vo.TaskVO">
         SELECT
         jt.* ,
-        jda.address_name
+        jda.address_name,
+        jtbre.start_time startTimes,
+        jtbre.reach_time,
+        jtbre.return_time
         FROM
         jczz_task jt
         LEFT JOIN jczz_doorplate_address jda ON jt.house_code = jda.address_code
         LEFT JOIN jczz_community jc ON jc.CODE = jda.nei_code
+        LEFT JOIN jczz_task_bail_reporting_event jtbre on jtbre.task_id = jt.id
         <where>
             <if test="task.reportType != null and task.reportType != '' and task.reportType == 1">
                 AND jt.report_type = #{task.reportType}
@@ -405,7 +413,10 @@
         jt.source,
         jt.is_deleted,
         jt.house_code,
-        jt.report_type
+        jt.report_type,
+        jtbre.start_time startTimes,
+        jtbre.reach_time,
+        jtbre.return_time
         FROM
         jczz_task jt
         LEFT JOIN jczz_doorplate_address jda ON jda.address_code = jt.house_code
diff --git a/src/main/java/org/springblade/modules/task/vo/TaskVO.java b/src/main/java/org/springblade/modules/task/vo/TaskVO.java
index dd6dd24..b29345e 100644
--- a/src/main/java/org/springblade/modules/task/vo/TaskVO.java
+++ b/src/main/java/org/springblade/modules/task/vo/TaskVO.java
@@ -16,10 +16,14 @@
  */
 package org.springblade.modules.task.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.springblade.modules.task.entity.TaskEntity;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
 
 /**
  * 任务表 视图实体类
@@ -70,4 +74,16 @@
 
 	private String frontType;
 
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date startTimes;
+
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date reachTime;
+
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date returnTime;
+
 }
diff --git a/src/main/java/org/springblade/modules/taskPlaceSelfCheck/mapper/TaskPlaceSelfCheckMapper.xml b/src/main/java/org/springblade/modules/taskPlaceSelfCheck/mapper/TaskPlaceSelfCheckMapper.xml
index f329ed9..9b792d6 100644
--- a/src/main/java/org/springblade/modules/taskPlaceSelfCheck/mapper/TaskPlaceSelfCheckMapper.xml
+++ b/src/main/java/org/springblade/modules/taskPlaceSelfCheck/mapper/TaskPlaceSelfCheckMapper.xml
@@ -166,6 +166,7 @@
                 </choose>
             </if>
         </where>
+        order by jpc.create_time desc
     </select>
 
     <resultMap type="org.springblade.modules.taskPlaceSelfCheck.dto.TaskPlaceSelfCheckDTO"
@@ -347,7 +348,8 @@
 
 
     <!--导出消防自查信息-->
-    <select id="exportTaskPlaceSelfCheck" resultType="org.springblade.modules.taskPlaceSelfCheck.excel.TaskPlaceSelfCheckExcel">
+    <select id="exportTaskPlaceSelfCheck"
+            resultType="org.springblade.modules.taskPlaceSelfCheck.excel.TaskPlaceSelfCheckExcel">
         select
         jpc.id,
         case when jpc.status=1 then '待审核'
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 1ede24e..d907468 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -77,3 +77,9 @@
   db: jczz # 监听数据库
   table: jczz_house,jczz_household,jczz_place
   enabled: false
+  # 目标数据库
+  from:
+    datasource:
+      url: jdbc:mysql://106.225.193.35:3306/srjw?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
+      username: root
+      password: HCyj@2022
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
index 9562628..b57addc 100644
--- a/src/main/resources/application-prod.yml
+++ b/src/main/resources/application-prod.yml
@@ -57,10 +57,17 @@
 # binlog listener
 binlog:
   datasource: # 订阅binlog数据库连接信息,ip,端口,用户密码(用户必须要有权限)
-    host: 127.0.0.1
+    host: 172.16.50.240
     port: 3306
     username: root
     password: 1qaz@WSX3edc
   db: jczz # 监听数据库
-  table: jczz_house,jczz_household,jczz_place
-  enabled: false
+#  table: jczz_house,jczz_household,jczz_place,jczz_place_check,jczz_place_ext,jczz_place_poi_label,jczz_place_practitioner,jczz_police_affairs_grid,jczz_task_label_reporting_event,jczz_patrol_record,blade_attach_data
+  table: blade_attach_data
+  enabled: true
+  # 目标数据库
+  from:
+    datasource:
+      url: jdbc:mysql://czfw_wx_web.xzga.top:13005/srjw?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
+      username: ewm_user
+      password: ft@135246
diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml
index cd00316..ec5dff6 100644
--- a/src/main/resources/application-test.yml
+++ b/src/main/resources/application-test.yml
@@ -56,11 +56,18 @@
 
 # binlog listener
 binlog:
+  # 源数据库
   datasource:
     host: 127.0.0.1
     port: 3308
     username: root
     password: root
   db: jczz_test
-  table: jczz_house,jczz_household,jczz_place
+  table: jczz_house,jczz_household,jczz_place,jczz_place_ext,blade_attach_data
   enabled: false
+  # 目标数据库
+  from:
+    datasource:
+      url: jdbc:mysql://106.225.193.35:3306/srjw?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
+      username: root
+      password: HCyj@2022
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index cced279..5ae8ee6 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -250,11 +250,14 @@
 #      - /blade-taskReportForRepairs/**
 #      - /blade-placeExt/**
 #      - /blade-grid/**
+#      - /blade-community/**
 #      - /blade-gridman/**
 #      - /blade-propertyCompany/**
 #      - /blade-eCallEvent/**
 #      - /blade-system/**
 #      - /blade-propertyCompanyComment/**
+#      - /blade-policeStation/**
+#      - /blade-policeAffairsGrid/**
     #授权认证配置
     auth:
       - method: ALL

--
Gitblit v1.9.3