From a7b18ead641993787f29cfb3c143a39ef3e60b5e Mon Sep 17 00:00:00 2001
From: 许鹏程 <1821349743@qq.com>
Date: 星期一, 23 十月 2023 18:49:54 +0800
Subject: [PATCH] commit

---
 product-server-data-center/src/main/java/com/product/data/center/service/MesExternalService.java |  147 ++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 133 insertions(+), 14 deletions(-)

diff --git a/product-server-data-center/src/main/java/com/product/data/center/service/MesExternalService.java b/product-server-data-center/src/main/java/com/product/data/center/service/MesExternalService.java
index 8e98ecc..19092a8 100644
--- a/product-server-data-center/src/main/java/com/product/data/center/service/MesExternalService.java
+++ b/product-server-data-center/src/main/java/com/product/data/center/service/MesExternalService.java
@@ -3,13 +3,13 @@
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.date.LocalDateTimeUtil;
 import cn.hutool.core.thread.ThreadUtil;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.http.HttpRequest;
 import cn.hutool.http.HttpResponse;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.google.common.collect.Sets;
 import com.product.common.utils.spring.SpringUtils;
 import com.product.core.config.CoreConst;
 import com.product.core.config.Global;
@@ -43,10 +43,7 @@
 import java.sql.SQLException;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
-import java.util.concurrent.Callable;
-import java.util.concurrent.CompletionService;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
+import java.util.concurrent.*;
 import java.util.stream.Collectors;
 
 /**
@@ -69,6 +66,78 @@
 			this.commonService = SpringBeanUtil.getBean(CommonService.class);
 		}
 		return commonService;
+	}
+
+	public static void main(String[] args) {
+		Date parse = DateUtil.parse("2023-10-23 18:22:50", "yyyy-MM-dd HH:mm:ss");
+		Date parse1 = DateUtil.parse("2023-10-23 18:24:11", "yyyy-MM-dd HH:mm:ss");
+		Date parse2 = DateUtil.parse("2023-10-23 18:24:21", "yyyy-MM-dd HH:mm:ss");
+
+		Set<Date> set = Sets.newHashSet(parse, parse1, parse2);
+
+		List<Date> sets = CollectionUtil.toList(set.toArray(new Date[0]));
+
+		Optional<Date> max = sets.stream().max(Comparator.comparing((a) -> a.getTime()));
+		System.out.println(max.get());
+
+	}
+
+
+	public void splitTableData() {
+		FieldSetEntity reportDbConfig = getBaseDao().getFieldSetByFilter(CmnConst.PRODUCT_SYS_DATA_SYNC_MANAGER, "SYNC_NAME=?", new Object[]{"鎶ヨ〃鏁版嵁搴�"}, false);
+		if (FieldSetEntity.isEmpty(reportDbConfig)) {
+			throw new BaseException(ErrorCode.REPORT_DB_CONFIG_FAIL);
+		}
+		DataBaseEntity dbe = new DataBaseEntity(reportDbConfig);
+		Dao reportDao = dbe.getDao();
+		Set<String> trackingTableSet = QuerySqlParseUtil.getAllTableName(reportDao, dbe.getDbName(), "da_t_wip_tracking");
+
+		for (String tableName : trackingTableSet) {
+			//鑾峰彇骞翠唤浠庤〃鍚嶆渶鍚庝竴涓� 涓嬪垝绾垮紑濮嬫埅鍙�
+			String year = tableName.substring(tableName.lastIndexOf("_") + 1);
+			if (StringUtils.equalsAny(year, "2017", "2018") || year.length() > 4) {
+				continue;
+			}
+			//鑾峰彇琛ㄥ墠缂�
+			String tablePrefix = tableName.substring(0, tableName.lastIndexOf("_"));
+			ExecutorService executorService = Executors.newFixedThreadPool(12);
+			for (int i = 1; i <= 12; i++) {
+				if ("2023".equals(year) && i > 9) {
+					break;
+				}
+				final int finalI = i;
+				executorService.submit(() -> {
+					Dao currentDao = dbe.newDao();
+					//鑾峰彇褰撳墠鏈堜唤 浠M鏍煎紡鍖�
+					String month = String.format("%02d", finalI);
+					//妫�鏌ユ湀浠藉搴旂殑琛ㄦ槸鍚﹀瓨鍦�
+					String monthTableName = tablePrefix + "_" + year + month;
+					Set<String> allTableName = QuerySqlParseUtil.getAllTableName(reportDao, dbe.getDbName(), tablePrefix + "_" + year + month);
+					if (allTableName.size() == 0 || !allTableName.contains(monthTableName)) {
+						//鏍规嵁鍘熷琛ㄧ粨鏋勫垱寤烘柊琛�
+						String sql = "create table " + monthTableName + " like " + tableName;
+						currentDao.executeSql(sql);
+						SpringMVCContextHolder.getSystemLogger().info("鍒涘缓琛細" + monthTableName);
+					}
+					String sql = "INSERT INTO " + monthTableName + " SELECT * FROM " + tableName + " WHERE MONTH(update_date)=" + finalI;
+					currentDao.executeSql(sql);
+					currentDao.closeConnection();
+				});
+
+			}
+			executorService.shutdown();
+			while (true) {
+				try {
+					if (executorService.awaitTermination(5, TimeUnit.SECONDS)) break;
+					Thread.sleep(5000);
+					SpringMVCContextHolder.getSystemLogger().info("绾跨▼绛夊緟涓�...");
+				} catch (InterruptedException e) {
+					e.printStackTrace();
+				}
+
+			}
+		}
+		reportDao.closeConnection();
 	}
 
 	/**
@@ -130,6 +199,7 @@
 			success = true;
 			SpringMVCContextHolder.getSystemLogger().info("鍥炲啓鏈哄彿锛�" + serialNumber + "鎴愬姛");
 		} catch (Exception e) {
+			e.printStackTrace();
 			SpringMVCContextHolder.getSystemLogger().error("鍥炲啓鏈哄彿锛�" + serialNumber + "澶辫触");
 			SpringMVCContextHolder.getSystemLogger().error(e);
 			throw new BaseException(ErrorCode.INSERT_DATA_FAIL);
@@ -161,6 +231,7 @@
 		}
 	}
 
+
 	/**
 	 * 鎻掑叆鏁版嵁鍒颁富搴�
 	 *
@@ -176,7 +247,16 @@
 			if (DataTableEntity.isEmpty(masterDataTable)) {
 				continue;
 			}
-			Object[] objects = masterDataTable.getData().stream().map(item -> item.getString(historyEntity.getPrimaryField())).toArray();
+			Object[] objects = masterDataTable.getData().stream().map(item -> {
+				String primaryValue = item.getString(historyEntity.getPrimaryField());
+				//鍒ゆ柇鏄惁涓烘暟鍊间笖鍖呭惈灏忔暟鐐� 灏忔暟鐐瑰悗闈㈡槸鍚﹀叏鏄�0
+				if (NumberUtil.isNumber(primaryValue) && primaryValue.contains(".") && primaryValue.substring(primaryValue.
+						indexOf(".") + 1).matches("^0*$")) {
+					//杩斿洖鏁存暟瀛楃涓�
+					return primaryValue.substring(0, primaryValue.indexOf("."));
+				}
+				return primaryValue;
+			}).toArray();
 			//鏌ヨ涓诲簱鏁版嵁鏄惁瀛樺湪
 			DataTableEntity list = dao.getList(historyEntity.getTableName(),
 					BaseUtil.buildQuestionMarkFilter(historyEntity.getPrimaryField(), objects.length, true),
@@ -234,7 +314,16 @@
 					//鏌ヨ宸插瓨鍦ㄧ殑鏁版嵁
 					DataTableEntity list = dao.getList(historyEntity.getTableName(),
 							BaseUtil.buildQuestionMarkFilter(historyEntity.getPrimaryField(), value.size(), true),
-							value.stream().map(item -> item.getString(historyEntity.getPrimaryField())).toArray());
+							value.stream().map(item -> {
+								String primaryValue = item.getString(historyEntity.getPrimaryField());
+								//鍒ゆ柇鏄惁涓烘暟鍊间笖鍖呭惈灏忔暟鐐� 灏忔暟鐐瑰悗闈㈡槸鍚﹀叏鏄�0
+								if (NumberUtil.isNumber(primaryValue) && primaryValue.contains(".") && primaryValue.substring(primaryValue.
+										indexOf(".") + 1).matches("^0*$")) {
+									//杩斿洖鏁存暟瀛楃涓�
+									return primaryValue.substring(0, primaryValue.indexOf("."));
+								}
+								return primaryValue;
+							}).toArray());
 					List<String> existIds = DataTableEntity.isEmpty(list) ? null : list.getData().stream().map(item -> item.getString(historyEntity.getPrimaryField())).collect(Collectors.toList());
 					for (FieldSetEntity fieldSetEntity : value) {
 						String primaryValue = fieldSetEntity.getString(historyEntity.getPrimaryField());
@@ -298,11 +387,41 @@
 				}
 			}
 		}
+		if (CmnConst.T_WIP_TRACKING.equalsIgnoreCase(targetTableName) && dt.getRows() > 1) {
+			List<FieldSetEntity> data = dt.getData();
+			FieldSetEntity newData = null;
+			for (int i = 0; i < data.size(); i++) {
+				FieldSetEntity fieldSetEntity = data.get(i);
+				if ("ch-kt".equals(fieldSetEntity.getValue("pre_master_key"))) {
+					data.remove(i);
+					dt.removeFieldSetEntity(i);
+					break;
+				} else if (newData == null) {
+					newData = fieldSetEntity;
+					continue;
+				}
+
+				Date date = fieldSetEntity.getDate(historyEntity.getTimeField());
+				if (date.getTime() > newData.getDate(historyEntity.getTimeField()).getTime()) {
+					newData = fieldSetEntity;
+				}
+			}
+			if (newData != null) {
+				dt = new DataTableEntity();
+				dt.addFieldSetEntity(newData);
+			}
+			//鍦╨ist涓彇鍑烘椂闂存渶杩戠殑鏁版嵁
+			Optional<FieldSetEntity> max = data.stream().max(Comparator.comparing((a) -> a.getDate(historyEntity.getTimeField()).getTime()));
+
+		}
 		DataTableEntity subData = dt.clones();
 		DataTableEntity masterData = dt.clones();
 		for (int i = 0; i < subData.getRows(); i++) {
 			FieldSetEntity fs = subData.getFieldSetEntity(i);
 			String preMasterKey = fs.getString("pre_master_key");
+			if (historyEntity.getPrimaryField().equals(preMasterKey)) {
+				preMasterKey = null;
+			}
 			if ("ch-kt".equals(fs.getString("source_info")) && StringUtils.isEmpty(preMasterKey)) {
 				preMasterKey = fs.getString(historyEntity.getPrimaryField());
 			}
@@ -313,6 +432,11 @@
 			fs.remove("~table_name~");
 			masterData.getFieldSetEntity(i).remove("~table_name~");
 			masterData.setFieldValue(i, "pre_master_key", null);
+			if (StringUtils.isEmpty(historyEntity.getPrimaryField())) {
+				subData.removeFieldSetEntity(i);
+				masterData.removeFieldSetEntity(i);
+				i--;
+			}
 		}
 		historyEntity.setArchivedDataTable(dt);
 		historyEntity.setMasterDataTable(masterData);
@@ -329,17 +453,12 @@
 		CompletionService<DataTableEntity> objectCompletionService = ThreadUtil.newCompletionService();
 		//澶氱嚎绋嬫煡璇㈠崟寮犺〃锛岀瓑寰呮墍鏈夌嚎绋嬫煡璇㈠畬姣�
 		for (String tableName : tableArray) {
-			objectCompletionService.submit(() -> dao.getList("select a.*,'" + tableName + "' as '~table_name~'  from " + tableName + "a where " + filterFieldName + " = ?", new Object[]{serialNumber}));
+			objectCompletionService.submit(() -> dao.getList("select a.*,'" + tableName + "' as '~table_name~'  from " + tableName + " a where " + filterFieldName + " = ?", new Object[]{serialNumber}));
 		}
 		DataTableEntity data = new DataTableEntity();
-		Future<DataTableEntity> take = objectCompletionService.take();
 		for (int i = 0; i < tableArray.length; i++) {
-			DataTableEntity dataTableEntity = take.get();
+			DataTableEntity dataTableEntity = objectCompletionService.take().get();
 			BaseUtil.dataTableMerge(data, dataTableEntity);
-		}
-
-		if (DataTableEntity.isEmpty(data) && !"product_sn".equals(filterFieldName)) {
-			throw new BaseException(errorCodes[1]);
 		}
 		return data;
 	}

--
Gitblit v1.9.2