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