README.md
@@ -4,8 +4,3 @@ ## ä¾èµäºæ å产åçæ¬v1.0.0 ## å端项ç®çæ¬ä¸ºv2.0.0 ### æ´æ°æ¥å¿ #### 2023å¹´6æ30æ¥ 1.æ°å¢æ¥å¿çæ§æ¥å£ product-server-data-center/src/main/java/com/product/data/center/service/DataArchivingQueue.java
@@ -1,5 +1,6 @@ package com.product.data.center.service; import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.RandomUtil; import com.google.common.collect.Maps; import com.google.common.collect.Sets; @@ -34,385 +35,399 @@ */ @Service public class DataArchivingQueue extends AbstractBaseService { // æ¥è¯¢éåmapï¼map<表åï¼dteéå> private static Map<String, LinkedBlockingQueue<DataTableEntity>> queryMap = new ConcurrentHashMap<>(); // æ¥è¯¢åæ´»mapï¼æ£å¨æ§è¡æ¥è¯¢ç表ï¼å¯¹åºçå¼ä¸ºæ§è¡ççº¿ç¨æ°ï¼ä¸º0æ è¯å·²ç»æ§è¡å®æ private static Map<String, Set<String>> existsQueryMap = Maps.newHashMap(); // æ¥è¯¢çº¿ç¨map private static Map<String, ExecutorService> queryThreadMap = Maps.newHashMap(); // é误æ¥å¿map private static Map<String, StringBuilder> errorLogMap = Maps.newHashMap(); // å表æ¥è¯¢æå¤§çº¿ç¨æ° private static final int QUERY_THREAD_COUNT = 3; // å表éªè¯æ¥è¯¢æå¤§æ¹æ¬¡ï¼å表æ¥è¯¢æå¤§æ¹æ¬¡=å表éªè¯æ¥è¯¢æå¤§æ¹æ¬¡ + å表æ¥è¯¢æå¤§çº¿ç¨æ°ï¼ private static final int QUERY_MAX_BATCH_COUNT = 4; // æ¥è¯¢æ¯é¡µå¤§å° private static final int QUERY_PAGE_SIZE = 50000; // æå ¥æ¯é¡µå¤§å° public static final int INSERT_PAGE_SIZE = 5000; // æ¥è¯¢éåmapï¼map<表åï¼dteéå> private static Map<String, LinkedBlockingQueue<DataTableEntity>> queryMap = new ConcurrentHashMap<>(); // æ¥è¯¢åæ´»mapï¼æ£å¨æ§è¡æ¥è¯¢ç表ï¼å¯¹åºçå¼ä¸ºæ§è¡ççº¿ç¨æ°ï¼ä¸º0æ è¯å·²ç»æ§è¡å®æ private static Map<String, Set<String>> existsQueryMap = Maps.newHashMap(); // æ¥è¯¢çº¿ç¨map private static Map<String, ExecutorService> queryThreadMap = Maps.newHashMap(); // é误æ¥å¿map private static Map<String, StringBuilder> errorLogMap = Maps.newHashMap(); // å表æ¥è¯¢æå¤§çº¿ç¨æ° private static final int QUERY_THREAD_COUNT = 3; // å表éªè¯æ¥è¯¢æå¤§æ¹æ¬¡ï¼å表æ¥è¯¢æå¤§æ¹æ¬¡=å表éªè¯æ¥è¯¢æå¤§æ¹æ¬¡ + å表æ¥è¯¢æå¤§çº¿ç¨æ°ï¼ private static final int QUERY_MAX_BATCH_COUNT = 4; // æ¥è¯¢æ¯é¡µå¤§å° private static final int QUERY_PAGE_SIZE = 50000; // æå ¥æ¯é¡µå¤§å° public static final int INSERT_PAGE_SIZE = 5000; /** * æ¥è¯¢ * * @param sourceDbe * @param sourceTable * @param filter * @param params * @param uniqueField 主é®ï¼ä¸ä» ä¼ç¨äºè¯å«è¿ä¼ç¨äºæåºé²æ¢oracleå页è·åå°é夿°æ® * @param minID */ public void query(DataBaseEntity sourceDbe, String sourceTable, String filter, Object[] params, String uniqueField, String minID) { Dao sourceDao = null; try { StringBuilder countSql = new StringBuilder(128); countSql.append("select count(*) count_value from ").append(sourceTable); if (!StringUtils.isEmpty(filter)) { countSql.append(" where ").append(filter); } sourceDao = sourceDbe.newDao(); FieldSetEntity countFse = sourceDao.getOne(countSql.toString(), params); int totalCount = StringUtils.isEmpty(countFse.getString("count_value")) ? 0 : countFse.getInteger("count_value"); int partCount = getPartCount(totalCount); shutdownQueryThread(sourceTable); ExecutorService executorService = Executors.newWorkStealingPool(QUERY_THREAD_COUNT); queryThreadMap.put(sourceTable, executorService); StringBuilder rangeSql = new StringBuilder(128); String tempPartMinID = minID; int partSize = partCount * QUERY_PAGE_SIZE; int count = ceilPage(totalCount, partSize); for (int i = 1; i <= count; i++) { rangeSql.setLength(0); if (!StringUtils.isEmpty(filter)) { rangeSql.append(filter).append(" and "); } rangeSql.append(uniqueField).append(">='").append(tempPartMinID).append("'"); DataTableEntity rangeDte = sourceDao.getList(getSql(uniqueField, sourceTable, rangeSql.toString(), sourceDbe.getDbType().getValue(), 1, partSize), params); if (DataTableEntity.isEmpty(rangeDte)) { continue; } FieldSetEntity rangeFse = rangeDte.getFieldSetEntity(0); String curPartMaxID = rangeFse.getString("max_id"); String curPartMinID = tempPartMinID; executorService.submit(() -> { String threadInfo = String.valueOf(Thread.currentThread().getId()); Dao threadSourceDao = null; String thisPartMinID = curPartMinID; try { threadSourceDao = sourceDbe.newDao(); startQuery(sourceTable, threadInfo); int totalPage = ceilPage(partSize, QUERY_PAGE_SIZE); StringBuilder tempFilter = new StringBuilder(128); for (int j = 0; j < totalPage; j++) { while (!allowQuery(sourceTable)) { Thread.sleep(RandomUtil.randomInt(800, 1200)); } tempFilter.setLength(0); tempFilter.append(uniqueField); WriteUtil.append("DA-threadInfo:" + threadInfo + "-thisPartMinID:" + thisPartMinID); if (minID.equals(thisPartMinID)) { tempFilter.append(">="); } else { tempFilter.append(">"); } tempFilter.append("'").append(thisPartMinID).append("'").append(" and ").append(uniqueField).append("<='").append(curPartMaxID).append("'"); if (!StringUtils.isEmpty(filter)) { tempFilter.append(" and ").append(filter); } WriteUtil.append("DA-threadInfo:" + threadInfo + "-currentPageï¼" + (j + 1) + "-pageSizeï¼" + QUERY_PAGE_SIZE + "-filterï¼" + tempFilter); DataTableEntity allDte = threadSourceDao.getList(sourceTable, tempFilter.toString(), params, uniqueField, 1, QUERY_PAGE_SIZE); if (!DataTableEntity.isEmpty(allDte)) { add(sourceTable, allDte); thisPartMinID = allDte.getFieldSetEntity(allDte.getRows() - 1).getString(uniqueField); } else { break; } } } catch (Exception e) { appendErrorLog(sourceTable, SpringUtils.getBean(JournalManagerService.class).getStackTrace(e).trim()); SpringMVCContextHolder.getSystemLogger().error(e); clear(sourceTable); } finally { if (threadSourceDao != null) { threadSourceDao.closeConnection(); } finalQuery(sourceTable, threadInfo); } }); tempPartMinID = curPartMaxID; } } catch (Exception e) { throw e; } finally { if (sourceDao != null) { sourceDao.closeConnection(); } } } /** * æ¥è¯¢ * * @param sourceDbe * @param sourceTable * @param filter * @param params * @param uniqueField 主é®ï¼ä¸ä» ä¼ç¨äºè¯å«è¿ä¼ç¨äºæåºé²æ¢oracleå页è·åå°é夿°æ® * @param minID */ public void query(DataBaseEntity sourceDbe, String sourceTable, String filter, Object[] params, String uniqueField, String minID) { Dao sourceDao = null; try { StringBuilder countSql = new StringBuilder(128); countSql.append("select count(*) count_value from ").append(sourceTable); if (!StringUtils.isEmpty(filter)) { countSql.append(" where ").append(filter); } sourceDao = sourceDbe.newDao(); FieldSetEntity countFse = sourceDao.getOne(countSql.toString(), params); int totalCount = StringUtils.isEmpty(countFse.getString("count_value")) ? 0 : countFse.getInteger("count_value"); int partCount = getPartCount(totalCount); shutdownQueryThread(sourceTable); ExecutorService executorService = Executors.newWorkStealingPool(QUERY_THREAD_COUNT); queryThreadMap.put(sourceTable, executorService); StringBuilder rangeSql = new StringBuilder(128); String tempPartMinID = minID; int partSize = partCount * QUERY_PAGE_SIZE; int count = ceilPage(totalCount, partSize); for (int i = 1; i <= count; i++) { rangeSql.setLength(0); if (!StringUtils.isEmpty(filter)) { rangeSql.append(filter).append(" and "); } rangeSql.append(uniqueField).append(">='").append(tempPartMinID).append("'"); DataTableEntity rangeDte = sourceDao.getList(getSql(uniqueField, sourceTable, rangeSql.toString(), sourceDbe.getDbType().getValue(), 1, partSize), params); if (DataTableEntity.isEmpty(rangeDte)) { continue; } FieldSetEntity rangeFse = rangeDte.getFieldSetEntity(0); String curPartMaxID = rangeFse.getString("max_id"); String curPartMinID = tempPartMinID; executorService.submit(() -> { String threadInfo = String.valueOf(Thread.currentThread().getId()); Dao threadSourceDao = null; String thisPartMinID = curPartMinID; try { threadSourceDao = sourceDbe.newDao(); startQuery(sourceTable, threadInfo); int totalPage = ceilPage(partSize, QUERY_PAGE_SIZE); StringBuilder tempFilter = new StringBuilder(128); for (int j = 0; j < totalPage; j++) { //æ¥è¯¢æ¶æ£æ¥éåæ°éï¼å¦æè¶ è¿æå¤§å¼åçå¾ checkQueueCount(sourceTable); while (!allowQuery(sourceTable)) { Thread.sleep(RandomUtil.randomInt(800, 1200)); } tempFilter.setLength(0); tempFilter.append(uniqueField); WriteUtil.append("DA-threadInfo:" + threadInfo + "-thisPartMinID:" + thisPartMinID); if (minID.equals(thisPartMinID)) { tempFilter.append(">="); } else { tempFilter.append(">"); } tempFilter.append("'").append(thisPartMinID).append("'").append(" and ").append(uniqueField).append("<='").append(curPartMaxID).append("'"); if (!StringUtils.isEmpty(filter)) { tempFilter.append(" and ").append(filter); } WriteUtil.append("DA-threadInfo:" + threadInfo + "-currentPageï¼" + (j + 1) + "-pageSizeï¼" + QUERY_PAGE_SIZE + "-filterï¼" + tempFilter); DataTableEntity allDte = threadSourceDao.getList(sourceTable, tempFilter.toString(), params, uniqueField, 1, QUERY_PAGE_SIZE); if (!DataTableEntity.isEmpty(allDte)) { add(sourceTable, allDte); thisPartMinID = allDte.getFieldSetEntity(allDte.getRows() - 1).getString(uniqueField); } else { break; } } } catch (Exception e) { appendErrorLog(sourceTable, SpringUtils.getBean(JournalManagerService.class).getStackTrace(e).trim()); SpringMVCContextHolder.getSystemLogger().error(e); clear(sourceTable); } finally { if (threadSourceDao != null) { threadSourceDao.closeConnection(); } finalQuery(sourceTable, threadInfo); } }); tempPartMinID = curPartMaxID; } } catch (Exception e) { throw e; } finally { if (sourceDao != null) { sourceDao.closeConnection(); } } } /** * ä»éåä¸è·å * * @param tableName * @return */ public DataTableEntity get(String tableName) { WriteUtil.append("DA-ä»éåä¸è·å-表åï¼" + tableName); synchronized (tableName.intern()) { LinkedBlockingQueue<DataTableEntity> queryQueue = queryMap.get(tableName); if (queryQueue == null) { return null; } return queryQueue.poll(); } } /** * ä»éåä¸è·å * * @param tableName * @return */ public DataTableEntity get(String tableName) { WriteUtil.append("DA-ä»éåä¸è·å-表åï¼" + tableName); synchronized (tableName.intern()) { LinkedBlockingQueue<DataTableEntity> queryQueue = queryMap.get(tableName); if (queryQueue == null) { return null; } return queryQueue.poll(); } } /** * å¤å®æ¯å¦æ¥è¯¢å®æ¯ * * @param tableName * @return */ public boolean checkQueryFinish(String tableName) { WriteUtil.append("DA-å¤å®æ¯å¦æ¥è¯¢å®æ¯"); Set<String> set = existsQueryMap.get(tableName); return set == null || set.isEmpty(); } /** * å¤å®æ¯å¦æ¥è¯¢å®æ¯ * * @param tableName * @return */ public boolean checkQueryFinish(String tableName) { WriteUtil.append("DA-å¤å®æ¯å¦æ¥è¯¢å®æ¯"); Set<String> set = existsQueryMap.get(tableName); return set == null || set.isEmpty(); } /** * å¤å®æå ¥éåï¼æ¥è¯¢å®æåæ¾å ¥çéåï¼æ¯å¦ä¸ºç©º * * @param tableName * @return */ public boolean checkInsertQueueEmpty(String tableName) { WriteUtil.append("DA-å¤å®æå ¥éåï¼æ¥è¯¢å®æåæ¾å ¥çéåï¼æ¯å¦ä¸ºç©º"); return queryMap == null || queryMap.get(tableName) == null || queryMap.get(tableName).isEmpty(); } /** * å¤å®æå ¥éåï¼æ¥è¯¢å®æåæ¾å ¥çéåï¼æ¯å¦ä¸ºç©º * * @param tableName * @return */ public boolean checkInsertQueueEmpty(String tableName) { WriteUtil.append("DA-å¤å®æå ¥éåï¼æ¥è¯¢å®æåæ¾å ¥çéåï¼æ¯å¦ä¸ºç©º"); return queryMap == null || queryMap.get(tableName) == null || queryMap.get(tableName).isEmpty(); } /** * å ³éæ¥è¯¢çº¿ç¨ * * @param tableName */ public void shutdownQueryThread(String tableName) { synchronized (tableName.intern()) { ExecutorService executorService = queryThreadMap.get(tableName); if (executorService != null) { if (!executorService.isShutdown()) { executorService.shutdown(); } queryThreadMap.remove(tableName); } } } /** * å ³éæ¥è¯¢çº¿ç¨ * * @param tableName */ public void shutdownQueryThread(String tableName) { synchronized (tableName.intern()) { ExecutorService executorService = queryThreadMap.get(tableName); if (executorService != null) { if (!executorService.isShutdown()) { executorService.shutdown(); } queryThreadMap.remove(tableName); } } } /** * æ¸ ç * * @param tableName */ public void clear(String tableName) { synchronized (tableName.intern()) { queryMap.remove(tableName); shutdownQueryThread(tableName); } } /** * æ¸ ç * * @param tableName */ public void clear(String tableName) { synchronized (tableName.intern()) { queryMap.remove(tableName); shutdownQueryThread(tableName); } } /** * æåé误æ¥å¿ï¼åªè½æå䏿¬¡ï¼æååä¼ç´æ¥æ¸ 空 * * @param tableName * @return */ public String getErrorLog(String tableName) { synchronized (tableName.intern()) { if (errorLogMap == null) { return null; } else { StringBuilder result = errorLogMap.get(tableName); errorLogMap.remove(tableName); return result == null ? null : result.toString(); } } } /** * æåé误æ¥å¿ï¼åªè½æå䏿¬¡ï¼æååä¼ç´æ¥æ¸ 空 * * @param tableName * @return */ public String getErrorLog(String tableName) { synchronized (tableName.intern()) { if (errorLogMap == null) { return null; } else { StringBuilder result = errorLogMap.get(tableName); errorLogMap.remove(tableName); return result == null ? null : result.toString(); } } } /** * è·ååæ®µçæ°éï¼æå¤16ï¼æå°ä¸º0ï¼ä¸º0表示ç¨ä¸ä¸ææççº¿ç¨ * * @param totalCount * @return */ private int getPartCount(int totalCount) { int num = QUERY_THREAD_COUNT * QUERY_PAGE_SIZE; int partCount = totalCount / num + (totalCount % num == 0 ? 0 : 1); if (partCount >= 16) { return 16; } else if (partCount >= 8) { return 8; } else if (partCount >= 4) { return 4; } else if (partCount >= 2) { return 2; } else if (partCount >= 1) { return 1; } else { return 0; } } /** * è·ååæ®µçæ°éï¼æå¤16ï¼æå°ä¸º0ï¼ä¸º0表示ç¨ä¸ä¸ææççº¿ç¨ * * @param totalCount * @return */ private int getPartCount(int totalCount) { int num = QUERY_THREAD_COUNT * QUERY_PAGE_SIZE; int partCount = totalCount / num + (totalCount % num == 0 ? 0 : 1); if (partCount >= 16) { return 16; } else if (partCount >= 8) { return 8; } else if (partCount >= 4) { return 4; } else if (partCount >= 2) { return 2; } else if (partCount >= 1) { return 1; } else { return 0; } } /** * è·åsqlï¼æ¥è¯¢èå´å çæå¤§idå¼ * * @param uniqueField * @param sourceTable * @param filter * @param dbType * @param pageIndex * @param pageSize * @return */ private String getSql(String uniqueField, String sourceTable, String filter, int dbType, int pageIndex, int pageSize) { int startIndex = (Math.max(pageIndex, 1) - 1) * pageSize; int finalIndex = startIndex + pageSize; StringBuilder sql = new StringBuilder(128); if (DataBaseType.MYSQL.getValue() == dbType) { sql.append("select max(").append(uniqueField).append(") max_id from ("); sql.append("\n select ").append(uniqueField).append(" from ").append(sourceTable); if (!StringUtils.isEmpty(filter)) { sql.append("\n where ").append(filter); } sql.append("\n order by ").append(uniqueField); sql.append("\n limit ").append(startIndex).append(",").append(pageSize); sql.append("\n) t"); } else if (DataBaseType.ORACLE.getValue() == dbType) { sql.append("SELECT MAX(").append(uniqueField).append(") max_id FROM ("); sql.append("\n SELECT ").append(uniqueField).append(",ROWNUM R FROM ("); sql.append("\n SELECT ").append(uniqueField).append(" FROM ").append(sourceTable); if (!StringUtils.isEmpty(filter)) { sql.append("\n WHERE ").append(filter); } sql.append("\n ORDER BY ").append(uniqueField); sql.append("\n ) T1"); sql.append("\n WHERE ROWNUM<=").append(finalIndex); sql.append("\n) T2"); sql.append("\nWHERE R>").append(startIndex); } return sql.toString(); } /** * è·åsqlï¼æ¥è¯¢èå´å çæå¤§idå¼ * * @param uniqueField * @param sourceTable * @param filter * @param dbType * @param pageIndex * @param pageSize * @return */ private String getSql(String uniqueField, String sourceTable, String filter, int dbType, int pageIndex, int pageSize) { int startIndex = (Math.max(pageIndex, 1) - 1) * pageSize; int finalIndex = startIndex + pageSize; StringBuilder sql = new StringBuilder(128); if (DataBaseType.MYSQL.getValue() == dbType) { sql.append("select max(").append(uniqueField).append(") max_id from ("); sql.append("\n select ").append(uniqueField).append(" from ").append(sourceTable); if (!StringUtils.isEmpty(filter)) { sql.append("\n where ").append(filter); } sql.append("\n order by ").append(uniqueField); sql.append("\n limit ").append(startIndex).append(",").append(pageSize); sql.append("\n) t"); } else if (DataBaseType.ORACLE.getValue() == dbType) { sql.append("SELECT MAX(").append(uniqueField).append(") max_id FROM ("); sql.append("\n SELECT ").append(uniqueField).append(",ROWNUM R FROM ("); sql.append("\n SELECT ").append(uniqueField).append(" FROM ").append(sourceTable); if (!StringUtils.isEmpty(filter)) { sql.append("\n WHERE ").append(filter); } sql.append("\n ORDER BY ").append(uniqueField); sql.append("\n ) T1"); sql.append("\n WHERE ROWNUM<=").append(finalIndex); sql.append("\n) T2"); sql.append("\nWHERE R>").append(startIndex); } return sql.toString(); } /** * æ¾å ¥éå * * @param tableName * @param dte */ private void add(String tableName, DataTableEntity dte) { synchronized (tableName.intern()) { LinkedBlockingQueue<DataTableEntity> queryQueue = queryMap.get(tableName); if (queryQueue == null) { queryQueue = new LinkedBlockingQueue<>(); queryMap.put(tableName, queryQueue); } if (tableName.endsWith("BAK20230823")) { //æ£æ¥dteä¸çsource_info å pre_master_key æ¯å¦ä¸ºç©º for (int i = 0; i < dte.getRows(); i++) { String sourceInfo = dte.getString(i, "source_info"); String preMasterKey = dte.getString(i, "pre_master_key"); if (StringUtils.isEmpty(sourceInfo) || StringUtils.isEmpty(preMasterKey)) { dte.setFieldValue(i, "source_info", "ch-kt"); String idFiledName = tableName.toLowerCase(Locale.ROOT).startsWith("t_wip_detail") ? "wip_detail_id" : tableName.toLowerCase(Locale.ROOT).startsWith("t_wip_product_keyp") ? "pk_id" : "wip_id"; dte.setFieldValue(i, "pre_master_key", dte.getString(i, idFiledName)); } } } /** * æ£æ¥éåæ°é */ private void checkQueueCount(String tableName) { //åå§æ¶é´ long startTime = System.currentTimeMillis(); while (queryMap.get(tableName) != null && queryMap.get(tableName).size() >= 10) { //ä¸åå§æ¶é´æ¯è¾ï¼å¦æè¶ è¿10åéåæå° if (System.currentTimeMillis() - startTime > 600000) { WriteUtil.append("DA-éåæ°éè¶ è¿10ï¼å½åæ°éï¼" + queryMap.get(tableName).size()); startTime = System.currentTimeMillis(); } ThreadUtil.sleep(10000); } } queryQueue.add(dte); WriteUtil.append("DA-æåæ¾å ¥éå-" + tableName + "-å½åå©ä½éåæ°ï¼" + queryQueue.size()); while (queryQueue.size() >= 10) { SpringMVCContextHolder.getSystemLogger().error("DA-éå已满-" + tableName + "-å½åå©ä½éåæ°ï¼" + queryQueue.size()); } } } /** * æ¾å ¥éå * * @param tableName * @param dte */ private void add(String tableName, DataTableEntity dte) { synchronized (tableName.intern()) { LinkedBlockingQueue<DataTableEntity> queryQueue = queryMap.get(tableName); if (queryQueue == null) { queryQueue = new LinkedBlockingQueue<>(); queryMap.put(tableName, queryQueue); } if (tableName.endsWith("BAK20230823")) { //æ£æ¥dteä¸çsource_info å pre_master_key æ¯å¦ä¸ºç©º for (int i = 0; i < dte.getRows(); i++) { String sourceInfo = dte.getString(i, "source_info"); String preMasterKey = dte.getString(i, "pre_master_key"); if (StringUtils.isEmpty(sourceInfo) || StringUtils.isEmpty(preMasterKey)) { dte.setFieldValue(i, "source_info", "ch-kt"); String idFiledName = tableName.toLowerCase(Locale.ROOT).startsWith("t_wip_detail") ? "wip_detail_id" : tableName.toLowerCase(Locale.ROOT).startsWith("t_wip_product_keyp") ? "pk_id" : "wip_id"; dte.setFieldValue(i, "pre_master_key", dte.getString(i, idFiledName)); } } } queryQueue.add(dte); WriteUtil.append("DA-æåæ¾å ¥éå-" + tableName + "-å½åå©ä½éåæ°ï¼" + queryQueue.size()); } } /** * æ¥è¯¢å¼å§ï¼ååæ´»map䏿·»å 1 * * @param tableName */ private void startQuery(String tableName, String threadInfo) { synchronized (tableName.intern()) { Set<String> set = existsQueryMap.computeIfAbsent(tableName, k -> Sets.newLinkedHashSet()); set.add(threadInfo); } } /** * æ¥è¯¢å¼å§ï¼ååæ´»map䏿·»å 1 * * @param tableName */ private void startQuery(String tableName, String threadInfo) { synchronized (tableName.intern()) { Set<String> set = existsQueryMap.computeIfAbsent(tableName, k -> Sets.newLinkedHashSet()); set.add(threadInfo); } } /** * æ¥è¯¢ç»æï¼ååæ´»mapä¸åå°1 * * @param tableName */ private void finalQuery(String tableName, String threadInfo) { synchronized (tableName.intern()) { Set<String> set = existsQueryMap.get(tableName); if (set == null || !set.contains(threadInfo)) { throw new BaseException(ErrorCode.DATA_ARCHIVE_QUERY_THREAD_COUNT_ERROR.getValue(), ErrorCode.DATA_ARCHIVE_QUERY_THREAD_COUNT_ERROR.getText() + " table_name: " + tableName); } set.remove(threadInfo); if (set.isEmpty()) { existsQueryMap.remove(tableName); } } } /** * æ¥è¯¢ç»æï¼ååæ´»mapä¸åå°1 * * @param tableName */ private void finalQuery(String tableName, String threadInfo) { synchronized (tableName.intern()) { Set<String> set = existsQueryMap.get(tableName); if (set == null || !set.contains(threadInfo)) { throw new BaseException(ErrorCode.DATA_ARCHIVE_QUERY_THREAD_COUNT_ERROR.getValue(), ErrorCode.DATA_ARCHIVE_QUERY_THREAD_COUNT_ERROR.getText() + " table_name: " + tableName); } set.remove(threadInfo); if (set.isEmpty()) { existsQueryMap.remove(tableName); } } } /** * å 许æ§è¡æ¥è¯¢ï¼é¿å éåä¸çå¾ æå ¥ç太å¤ï¼å¯¼è´å åæº¢åºï¼ * * @param tableName * @return */ private boolean allowQuery(String tableName) { synchronized (tableName.intern()) { return queryMap.get(tableName) == null || queryMap.get(tableName).size() <= QUERY_MAX_BATCH_COUNT; } } /** * å 许æ§è¡æ¥è¯¢ï¼é¿å éåä¸çå¾ æå ¥ç太å¤ï¼å¯¼è´å åæº¢åºï¼ * * @param tableName * @return */ private boolean allowQuery(String tableName) { synchronized (tableName.intern()) { return queryMap.get(tableName) == null || queryMap.get(tableName).size() <= QUERY_MAX_BATCH_COUNT; } } /** * æå ¥é误æ¥å¿ * * @param tableName * @param error */ private void appendErrorLog(String tableName, String error) { synchronized (tableName.intern()) { StringBuilder errorSb = errorLogMap.get(tableName); if (errorSb == null) { errorSb = new StringBuilder(128); errorLogMap.put(tableName, errorSb); } if (errorSb.length() > 0) { errorSb.append("\n"); } if (errorSb.length() < 2000) { errorSb.append(error); } } } /** * æå ¥é误æ¥å¿ * * @param tableName * @param error */ private void appendErrorLog(String tableName, String error) { synchronized (tableName.intern()) { StringBuilder errorSb = errorLogMap.get(tableName); if (errorSb == null) { errorSb = new StringBuilder(128); errorLogMap.put(tableName, errorSb); } if (errorSb.length() > 0) { errorSb.append("\n"); } if (errorSb.length() < 2000) { errorSb.append(error); } } } /** * è·å页æ°ï¼åä¸åæ´ * * @param count * @param size * @return */ private int ceilPage(int count, int size) { if (size == 0) { if (count == 0) { return 0; } else { throw new BaseException(ErrorCode.ARCHIVE_PAGE_CALCULATE_ERROR); } } return count / size + (count % size == 0 ? 0 : 1); } /** * è·å页æ°ï¼åä¸åæ´ * * @param count * @param size * @return */ private int ceilPage(int count, int size) { if (size == 0) { if (count == 0) { return 0; } else { throw new BaseException(ErrorCode.ARCHIVE_PAGE_CALCULATE_ERROR); } } return count / size + (count % size == 0 ? 0 : 1); } } product-server-data-center/src/main/java/com/product/data/center/service/DataArchivingService.java
@@ -390,6 +390,8 @@ String maxID = paramFse.getString("max_id"); String minID = paramFse.getString("min_id"); String splitTableType = "1".equals(configFse.getString("split_table_type")) ? "1" : "0"; //å¼å¯éåæ¥è¯¢æ¶ï¼å æ¸ ç©ºéå鲿¢ä¸æ¬¡æªå¤çå®çæ°æ®å ç¨å å dataArchivingQueue.clear(sourceTable); dataArchivingQueue.query(sourceDbe, sourceTable, filterSb.toString(), null, uniqueField, minID); DataTableEntity allDte; Map<String, List<DataTableEntity>> groupDteMap; product-server-datasource/src/main/java/com/product/datasource/connection/ConnectionManager.java
@@ -200,46 +200,48 @@ } Boolean enabling = Global.getPropertyToBoolean("data.system.oracle.connection-pool.enabling", "false"); if (enabling) { DruidDataSource druidDataSource = DB_DRUID_DATA_SOURCE_MAP.get(ArrayUtil.join(params, ",")); if (druidDataSource == null || druidDataSource.isClosed()) { druidDataSource = new DruidDataSource(); druidDataSource.setUrl(url); druidDataSource.setUsername(dbe.getUserName()); druidDataSource.setPassword(dbe.getPassWord()); // åå§åæ¶å»ºç«ç©çè¿æ¥çä¸ªæ° druidDataSource.setInitialSize(getProperty("data.system.oracle.connection-pool.initial-size", 10)); // æå¤§æ´»å¨è¿æ¥æ° druidDataSource.setMaxActive(getProperty("data.system.oracle.connection-pool.max-active", 100)); // æå°ç©ºé²è¿æ¥æ° druidDataSource.setMinIdle(getProperty("data.system.oracle.connection-pool.min-idle", 20)); // æ ¡éªæ¥è¯¢è¯å¥ druidDataSource.setValidationQuery(dbe.getDataBaseType().getValidationQuery()); // å½è¿æ¥ç©ºé²æ¶æ¯å¦æµè¯è¿æ¥æææ§ druidDataSource.setTestWhileIdle(true); // 两次空é²è¿æ¥æ¸ é¤ä¹é´çæ¶é´é´é druidDataSource.setTimeBetweenEvictionRunsMillis(60000); druidDataSource.setMaxWait(60 * 1000); druidDataSource.setPoolPreparedStatements(true); druidDataSource.setMaxPoolPreparedStatementPerConnectionSize(100); druidDataSource.setRemoveAbandoned(true); //åå°æ¶å¼ºå¶å½è¿è¿æ¥ druidDataSource.setRemoveAbandonedTimeout(60 * 30); DB_DRUID_DATA_SOURCE_MAP.put(ArrayUtil.join(params, ","), druidDataSource); try { //è·è·åè¿æ¥ Connection connection = druidDataSource.getConnection(); //æµè¯è¿æ¥ if (!connectionValidity(connection, dbe.getDataBaseType())) { synchronized (url.intern()){ DruidDataSource druidDataSource = DB_DRUID_DATA_SOURCE_MAP.get(ArrayUtil.join(params, ",")); if (druidDataSource == null || druidDataSource.isClosed()) { druidDataSource = new DruidDataSource(); druidDataSource.setUrl(url); druidDataSource.setUsername(dbe.getUserName()); druidDataSource.setPassword(dbe.getPassWord()); // åå§åæ¶å»ºç«ç©çè¿æ¥çä¸ªæ° druidDataSource.setInitialSize(getProperty("data.system.oracle.connection-pool.initial-size", 10)); // æå¤§æ´»å¨è¿æ¥æ° druidDataSource.setMaxActive(getProperty("data.system.oracle.connection-pool.max-active", 100)); // æå°ç©ºé²è¿æ¥æ° druidDataSource.setMinIdle(getProperty("data.system.oracle.connection-pool.min-idle", 20)); // æ ¡éªæ¥è¯¢è¯å¥ druidDataSource.setValidationQuery(dbe.getDataBaseType().getValidationQuery()); // å½è¿æ¥ç©ºé²æ¶æ¯å¦æµè¯è¿æ¥æææ§ druidDataSource.setTestWhileIdle(true); // 两次空é²è¿æ¥æ¸ é¤ä¹é´çæ¶é´é´é druidDataSource.setTimeBetweenEvictionRunsMillis(60000); druidDataSource.setMaxWait(60 * 1000); druidDataSource.setPoolPreparedStatements(true); druidDataSource.setMaxPoolPreparedStatementPerConnectionSize(100); druidDataSource.setRemoveAbandoned(true); //åå°æ¶å¼ºå¶å½è¿è¿æ¥ druidDataSource.setRemoveAbandonedTimeout(60 * 30); DB_DRUID_DATA_SOURCE_MAP.put(ArrayUtil.join(params, ","), druidDataSource); try { //è·è·åè¿æ¥ Connection connection = druidDataSource.getConnection(); //æµè¯è¿æ¥ if (!connectionValidity(connection, dbe.getDataBaseType())) { throw new BaseException(ErrorCode.GET_CONNECTION_FAIL); } return connection; } catch (BaseException e) { throw e; } catch (Exception e) { e.printStackTrace(); log.error("è·å龿¥å¤±è´¥", e); log.error(url); throw new BaseException(ErrorCode.GET_CONNECTION_FAIL); } return connection; } catch (BaseException e) { throw e; } catch (Exception e) { e.printStackTrace(); log.error("è·å龿¥å¤±è´¥", e); log.error(url); throw new BaseException(ErrorCode.GET_CONNECTION_FAIL); } } } product-server-report_v2/pom.xml
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/config/CmnConst.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/config/ReportCode.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/config/SystemCode.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/config/SystemParamSet.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/controller/ChartPropertyConfigController.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/controller/DataListReportController.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/controller/EChartsReportConfigController.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/controller/GenerateEChartController.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/controller/ListReportConfigController.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/controller/ReportConfigController.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/controller/ReportDatasourceController.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/controller/ReportTypeController.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/controller/TestDao.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/patch/PatchService.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/quartz/ReportDataProcessQuartz.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/quartz/ViewDataConvertService.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/service/ChartPropertyConfigService.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/service/CommonReportService.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/service/DataListReportService.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/service/EChartsReportConfigServiceimple.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/service/GenerateEChartService.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/service/GroupReportService.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/service/ListReportConfigService.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/service/ListReportConfigServiceImple.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/service/ListReportServer.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/service/Report.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/service/ReportConfigService.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/service/ReportDatasourceService.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/service/ReportServerNew.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/service/ReportTypeService.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/service/idel/EChartsReportConfigService.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/service/idel/IChartPropertyConfigService.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/service/idel/IGenerateEChartService.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/service/idel/IReportConfigService.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/service/idel/IReportDatasourceService.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/service/idel/IReportTypeService.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/service/idel/IViewDataConvertService.java
ÎļþÒÑɾ³ý product-server-report_v2/src/main/java/com/product/server/report/service/idel/ListReportConfigService.java
ÎļþÒÑɾ³ý product-server-report_v2/src/test/java/com/product/server/report/AppTest.java
ÎļþÒÑɾ³ý product-server-report_v2/src/test/java/com/product/server/report/GenerateEChartTest.java
ÎļþÒÑɾ³ý product-server-report_v2/src/test/java/com/product/server/report/ReportConfigTest.java
ÎļþÒÑɾ³ý product-server-report_v2/src/test/java/com/product/server/report/ReportDatasourceTest.java
ÎļþÒÑɾ³ý product-server-report_v2/src/test/java/com/product/server/report/ReportTypeTest.java
ÎļþÒÑɾ³ý product-server-web/doc/ϵͳÉè¼Æ
@@ -1,8 +1,5 @@ ï»¿çæ¬æ§å¶ï¼ å½å产åçæ¬1.0.0 è¡ç项ç®çæ¬ 1.1.0 piccï¼ç»µé³äººä¿ï¼ 1.2.0 xn 详ç»è§£é ï¼1ï¼ç®åççæ¬å·å ±æ3çº§ï¼æ åçæç §1.0.0 ï¼2ï¼ç¬¬ä¸ä½ä½ä¸ºäº§åå¤§çæ¬ @@ -16,7 +13,7 @@ å¿ é¡»é ç½®é»è®¤çæ°æ®æºï¼åç§°å¿ é¡»ä¸ºdefault,è§application.properties sourceName=default 2.表设计 idåæ®µ: ç±»å=bigint ï¼é¿åº¦11 idåæ®µ: ç±»å=bigint ï¼é¿åº¦11 uuidåæ®µãuuidå¼ç¨å段ï¼ï¼é¿åº¦é½æ¯80 åæ®µç±»åé¤äºéç¨String...å¤ï¼è¿æä¸ä¸ªç±»å:parentuuid,ç¨æ¤å段表示主å表çå ³ç³»ï¼ åæ¶è¿å¿ é¡»é å ³èçç¶è¡¨åç§°ï¼åä¸ä¸ªå ³èç¶è¡¨ï¼åªè½é ä¸ä¸ªparentuuidç±»åçåæ®µï¼å¦ææ¯æ®é主å¤é®å ³èï¼å°±ä¸ç¨parentuuid @@ -27,13 +24,13 @@ ...... function_uuid parentuuid mrbase_sys_datamodel_table(ä¿å表çuuidï¼æ¾ç¤ºè¡¨çåç§°ï¼é»è®¤å ³è主表çuuid) åæ®µçé¿åº¦ä¸ºä¸æéæ©ï¼æ ¹æ®ä¸åçæ°æ®ç±»åï¼å®ä¹ä¸åçé¿åº¦é项ï¼å¦ï¼10ã20ã50ã100ç åæ®µç±»åï¼ é¤æ åçstring datetime int double ,è¿æç¹æ®ï¼parentuuid(主åè¡¨å ³ç³»ï¼è®°å½ç¶è¡¨uuid)ãcode(ç¼ç åæ®µ 000-000-002)ãserialNumber(GXD201209020001) åæ®µç±»å=parentuuidæ¶ï¼å¿ é¡»field_relation_tableåæ®µå¡«åç¶è¡¨çuuidå¦åä¹ä¸è½ä½ä¸ºä¸»å表ä¿å ææç±»åï¼stringãintãnumber(å°æ°)ãdatetimeãparentuuidãcodeãserialNumberãidcardãurlãipãmacãemailãuseridãorgUuidãfileãflowStatusãtable_name 3.ç¼åæ°æ® * ç¼åé 置表ï¼SYS_CACHE_CONFIG * åæ®µï¼IDãuuidãcache_nameãTABLENAME(S200)ãCACHEFIELD(å级ç¼ååæ®µï¼éå·åé),FIELDS(S4000,åæ®µåï¼éå·åé)ãfilter(S4000)ã夿³¨è¯´æ.... @@ -50,10 +47,10 @@ table_name=mrbase_sys_datamodel_field | cache_fields=* | group_field=table_uuid table_name=mrbase_sys_datamodel_field | cache_fields=* | filter=field_type='parentUuid' table_name=mrbase_function_permission | cache_fields=role_uuid,function_uuid,button_uuid | group_field=role_uuid *ç¼åå·æ°ï¼æ°æ®æ°å¢ãä¿®æ¹ãå 餿¶é½ä¼å·æ°å¯¹åºçè¯¥è¡¨çææç¼åé ç½®ï¼è¿å¯ä»¥è°èªå®ä¹ç代ç è¿è¡å·æ°ï¼bean_nameãbean_method(String uuid) åæ°æ¯æä½æ°æ®çuuid ,bean_method() å¯å¨æ¶ä¼è°æ¤æ¹æ³ï¼å¿ é¡»å®ä¹ä¸¤ä¸ªæ¹æ³ ï¼ *ç¼åçä½¿ç¨æ¥è¯¢æ¹æ³ï¼ æåç»ï¼åç»å段ï¼å¯¹åºå¼ æåç»ï¼åç»å段ï¼å¯¹åºå¼ 对åºç¼åä¸å¯¹åºçåç»åæ®µï¼æ´ä¸ªåæ°ä¸ºè¿ï¼è¡¨ç¤ºæ²¡æåç»ï¼åªè½åé¢ä¸ä¸ºç©ºï¼ä¸è½åé¢ä¸ºç©ºï¼ä¾å¦ï¼ ç¼åçåç»å段ï¼field1ãfield2ãfield3 ,è·åæ¶åæ°å¼ï¼åªè½ä¸ç§æ åµï¼{value1,null,null}ã{value1,value2,null}ã{value1,value2,value2}, ä¸è½åºç° {value1,null,value3} ã{null,null,value3} ã{null,value2,value3} çæ åµ @@ -87,7 +84,7 @@ åªæå 餿¶ç¨è¿ä¸ªå段æ¥åºå,å³~type~=del ä¿®æ¹ä¸»åè¡¨æ°æ® ä¸»è¡¨å¿ é¡»æuuidåæ®µï¼åè¡¨æ°æ®ä¸ä¸ä¸ªç§æ åµï¼æ°å¢ ~type~="",uuid="",ä¿®æ¹ï¼~type~="",uuid="ä¸ä¸ºç©º"ï¼å é¤ï¼~type~="del",uuid="ä¸ä¸ºç©º" åè¡¨åæ°è¦ä¸è´ 5.ææå®ä½ç±»åï¼é½å¿ é¡»æä¸ªå段 table_nameï¼å表åç§° ,å¯ä»¥å®ä½ç±»ä¸å®ä¹æå¸¸é 6.API请æ±åæ° @@ -95,7 +92,7 @@ RequestParameterEntity å°è£ ææåæ°è¯·æ±ï¼è¯¦ç»è§è¯¥ç±» Object bean=request.getAttribute("requestPara"); String accessToken = null; if(bean !=null) { if(bean !=null) { RequestParameterEntity reqp=(RequestParameterEntity)bean; accessToken=reqp.getToken(); } @@ -114,7 +111,7 @@ æ¥è¯¢è¿å OK_List(FieldSetEntity fs) OK_List(DataTableEntity dt) éç¨é误è¿åï¼ æ°å¢ãä¿®æ¹ãå é¤ãæ¥è¯¢å¤±è´¥ public String error(String code,String msg ) @@ -124,8 +121,8 @@ */ @Autowired public BaseDao baseDao = null; 10.~table~ 忰卿°å¢ãä¿®æ¹æ¥å£æ¶å¿ é¡»æ¾å°æ°æ®çåé¢ï¼ä»¥æ¤æ¥é¦å è·åå° 10.~table~ 忰卿°å¢ãä¿®æ¹æ¥å£æ¶å¿ é¡»æ¾å°æ°æ®çåé¢ï¼ä»¥æ¤æ¥é¦å è·åå° 13.é«çº§åç §ä¸ææ¡æ¥å£æ°æ® { @@ -158,16 +155,16 @@ å ¶ä¸filteråæ®µï¼æ¯é 置人åæåçsqlæ¡ä»¶ï¼å符串ä¸å¯è½é ç½®å¨æåæ°ï¼æ ¼å¼ä¸ºï¼~åæ°åç§°~ï¼å端è°ç¨æ¤åç §æ¶ï¼ä¹å¿ é¡»ä¼ å¯¹åºçåæ°å¼ ï¼ä¾å¦ï¼ é ç½®filter: uuid=~cust_uuid~ and name like '%~cust_name~%' åç«¯åæ°ï¼{cust_uuid="sdgeasge",cust_name="ä¸å½"} filteråæ®µä¸è¿å¯ä»¥é 置系ç»åéï¼å¦ï¼is_used=1 and uuid in (select language_uuid from mrbase_sys_company_language where org_level_uuid='{{COMPANY_UUID}}') filteråæ®µä¸è¿å¯ä»¥é 置系ç»åéï¼å¦ï¼is_used=1 and uuid in (select language_uuid from mrbase_sys_company_language where org_level_uuid='{{COMPANY_UUID}}') {{COMPANY_UUID}}:å½åç»å½äººåçå ¬å¸UUID. display_typeï¼ 1:å表 2:æ ç»æï¼å½çäº2表示æ¤åç §æ°æ®æ¾ç¤ºæ åï¼åæ¶ code_fieldãparent_code_field ãdelay_loadè¦å¿ å¡«ï¼ code_fieldï¼ä¸ä¸çº§å ³ç³»è¡¨ä¸ç ç¼ç åæ®µï¼001ï¼æ¤å段ä¹å¤çåæ¾å°select_fieldsåæ®µä¸å»ï¼çæ xxxxx code,æ¤å端å¨ç¹å»ä¸ä¸ªèç¹æ¶ï¼åcodeçå¼ä¼ ç»æ¥å£ï¼æ¥è¿åå ¶ä¸é¢çåæ°æ® parent_code_fieldï¼ç¶ç¼ç åæ®µï¼001 org_filter_fieldï¼æ ¹æ®è¡¨ä¸çå ¬å¸å段è¿è¡æ°æ®è¿æ»¤ï¼å¤ä¸ªä»¥éå·åé usr_filter_fieldï¼äººåæ°æ®è¿æ»¤æ¡ä»¶å段ï¼å¿ é¡»æ¯æ°æ®æºè¡¨ä¸ç人ååæ®µï¼å¯ä»¥å¤ä¸ªï¼éå·åéï¼ 14.1 䏿åç §(é«çº§åç §ãæ°æ®åå ¸)å¨åè¡¨ä¸æ¾ç¤ºï¼ é ç½®mrbase_sys_datamodel_field.field_referenceåæ®µï¼é åç §åç§°ææ°æ®åå ¸åç§°ï¼å¦ææ¯æ°æ®åå ¸åç§°å 书åå·æ¬èµ·æ¥,å¦ï¼ãgenderã å¨åè¡¨çæ¥è¯¢æ¹æ³ï¼å¯¹åè¡¨æ°æ®è¿è¡å°è£ 䏿¬¡ï¼baseDao.loadPromptData(dt); @@ -198,8 +195,8 @@ SystemUser user = SpringMVCContextHolder.getCurrentUser(); 25.è·åå½årequestãreponseãsessionç SpringMVCContextHolder.getHttpxxxx() 26.å¯¹æ°æ®çæä½ï¼å¯ä»¥åè代ç ï¼JsonUtilï¼å¦ä½çæç FieldSetEnttiy,å¦ä½å¨fsä¸è·åå表ï¼DataTableEntityï¼ï¼å¦ä½è·åfsä¸çåæ®µå¼ï¼å¦ä½å¨DataTableEntityä¸è·å䏿¡è®°å½ï¼å䏿¡è®°å½ä¸çåæ®µå¼ 26.å¯¹æ°æ®çæä½ï¼å¯ä»¥åè代ç ï¼JsonUtilï¼å¦ä½çæç FieldSetEnttiy,å¦ä½å¨fsä¸è·åå表ï¼DataTableEntityï¼ï¼å¦ä½è·åfsä¸çåæ®µå¼ï¼å¦ä½å¨DataTableEntityä¸è·å䏿¡è®°å½ï¼å䏿¡è®°å½ä¸çåæ®µå¼ 27.坹䏿¡è®°å½ç读åæä½ @@ -242,18 +239,18 @@ ----------------------------------------------------------------- controllerä¸çå ·ä½è°ç¨ï¼ æ systemClientsService.addClient(fse); æ¹æä»¥ä¸ä»£ç /**äºå¡å¤çå®ç°**/ ISystemClientsService service=(ISystemClientsService)getProxyInstance(systemClientsService); String uuid = service.addClient(fse); ISystemClientsService ï¼serviceç±»çæ¥å£ç±» systemClientsServiceï¼springæ³¨å ¥çserviceç±» ------------------------------------------------------------------- ------------------------------------------------------------------- 30.æ¥è¯¢å表ä¸å å«åè¡¨æ°æ® /** * * * @param tableName * @param filter * @param para @@ -269,7 +266,7 @@ /** * @ æ¥è¯¢åè¡¨æ°æ®çææåè¡¨æ°æ® String 1=æ¯æ¡è®°å½uuidï¼String 2= å表åç§° * @ æ¥è¯¢åè¡¨æ°æ®çææåè¡¨æ°æ® String 1=æ¯æ¡è®°å½uuidï¼String 2= å表åç§° * @param uuids éå·åé ç¶å表uuids * @param table_name * @return @@ -278,18 +275,18 @@ 31.å ³äºéä»¶è·åæä½ RequestParameterEntity.getFormData().getString(éä»¶åæ®µ);//ä¸ä¼ çåå§æä»¶åï¼å¤ä¸ªä»¥éå·åé RequestParameterEntity.getFiles().get(åå§æä»¶å); //对åºçæä»¶ï¼æä»¶åï¼uuid+"_"+æä»¶çåå§åç§° ï¼ä¸æ¬¡åªè½è·åä¸ä¸ª 32.å ³äºæåsqlè¯å¥æ¥è¯¢åå页çè¦æ± select TIMESTAMPDIFF(YEAR,aciwe.start_datetime,aciwe.end_datetime) AS start_datetime from a,b where f1=f2 æ a left join b on f1=f2 åæ®µå«åå¿ é¡»æ¯è¡¨ä¸çåæ®µï¼å¦åæ æ³è·åå°å¯¹åºå段ç表åååæ®µä¿¡æ¯å®ä¹ï¼å¦ï¼ start_datetime å¿ é¡»æ¯ a表æb表ä¸çä¸ä¸ªå段 å¤è¡¨å ³èæ¥è¯¢ï¼è¡¨å®ä¹ï¼a,b æ a left join b on f1=f2 æ´ä¸ªå为表 æ¡ä»¶å®ä¹ï¼where åé¢ ï¼ f1=f2 33.妿¥sqlè¯å¥ä¸æ²¡æuuidåæ®µï¼æ æ³æ¥è¯¢åºå表 æ¡ä»¶å®ä¹ï¼where åé¢ ï¼ f1=f2 33.妿¥sqlè¯å¥ä¸æ²¡æuuidåæ®µï¼æ æ³æ¥è¯¢åºå表 34.ç³»ç»é误说æ ç³»ç»é误å为两ç§ï¼ä¸»å¨æåºé误ãæè·é误 䏻卿åºï¼ /** @@ -300,7 +297,7 @@ * @param method é误åçæ¹æ³ */ public BaseException(String code,String error,Class c,String method); æè·é误: /** * æé 彿°ï¼è®°å½é误å°åº---æè·çé误 @@ -308,7 +305,7 @@ * @param exc æè·çé误 */ public BaseException(String code,String error,Class c,String method,Exception sysExc) 35.liceseæ¯æ 硬件信æ¯è¯»ååºæä»¶ï¼ä¸è½½å°åï¼http://sigar.hyperic.com/ windowsç macç linuxç @@ -323,7 +320,7 @@ String code=codeService.createCode(fse.getString("table_name"), fse.getString("field_name"), fse.getString("parentCode")==null?"":fse.getString("parentCode")); 卿°å¢çcontrollerä¸è°ç¨ï¼å¨åºå±Daoä¸çä¿åæ¹æ³ä¸è·åè·åç临æ¶ç¼ç å»éªè¯æ¯å¦è¢«å ç¨ï¼å ç¨åéæ°çæï¼ä¿è¯å¯ä¸æ§ è¿åjsonå¼ä¸codeçå¼å³ä¸ºçæçç¼ç å¼ 37.éç¨åæ°éªè¯ãæ°æ®ä¿åéªè¯ åæ°éªè¯ï¼com.lx..module.sys.config.RegistValidateç±» å¨registValidateParameteræ¹æ³ä¸æ·»å éªè¯ä»£ç ï¼å¦ï¼ @@ -334,7 +331,7 @@ æ°æ®ä¿åéªè¯ï¼å¨coreå ä¸çdaoä¸èªå¨æ ¹æ®æ°æ®è¡¨å段çé ç½®éªè¯ï¼é常ä¸ç¨é ï¼ä½å¦ææå ¶å®éªè¯ï¼ä¹å¯ä»¥å¨ä¿ååä¿®æ¹æ¥å£ä¸é ç½®ï¼å¦åä¿ååä¿®æ¹æ¥å£ä¸ç¨é æ ¹æ®å段类åè¿è¡éªè¯ï¼å¦ï¼å段æ¯mailï¼mrbase_sys_datamodel_field.field_type=email,ç°åªæ¯æï¼ intãnumber(å°æ°)ãidcardãurlãipãmacãdatetimeãlengthãemail 38.propertiesé ç½®æä»¶åæ°è·å è°ç¨ï¼ Global.getPropertyToBoolean("druid.datasource.testOnBorrow", "false") @@ -365,7 +362,7 @@ /** * è·å人åçæ°æ®æéï¼æ»å ¥å£ ï¼è¿æ»¤æå®äººååæ®µï¼ä½¿ç¨é»è®¤å ¬å¸å段è¿è¡è¿æ»¤-org_level_uuid * @tableName 人åè¿æ»¤ç表 * @param staff_fields * @param staff_fields * @return */ public String getDataFilter(String tableName,String staff_fields) @@ -377,8 +374,8 @@ * @return */ public String getDataFilter(String tableName,String staff_fields,String org_fields) 40.å ³äºæµæ°´å· 40.å ³äºæµæ°´å· åªéè¦å¨é ç½®ä¸é ç½®æµæ°´å·,è§è¡¨mrbase_sys_swift_config 表ä¸åæ¾æµæ°´å·çåæ®µï¼å¿ é¡»å¨mrbase_sys_datamodel_field表ä¸è¯¥å段çfield_type=serialNumber ï¼ç¤ºä¾è§test表 çé¢è°ç¨æ¥å£è·åç¼ç ï¼/api/common/createSerialNumberï¼è§æµè¯ç±»CodeTestï¼å¿ ä¼ åæ°ï¼serialNumberNameï¼å¯¹åºè¡¨æµæ°´å·é 置表ä¸çswift_config_nameåæ®µå¼ @@ -426,7 +423,7 @@ /api/language/load-international-info/{version} å è½½æå®å®¢æ·ç«¯ãçæ¬å·ãé»è®¤è¯è¨çææå½é åæ°æ® å®¢æ·ç«¯ãçæ¬å·ãé»è®¤è¯è¨æ¥å£åæ°ä¸ä¼ value: 1ãé¦å é 置表ãåæ®µä¸ºå½é ååæ®µ 2ãåç«¯è°æ¥å£è·ååªäºè¡¨æåªäºå½é ååæ®µï¼å¨çé¢çä¸å¯¹åºå ç´ å颿·»å å°ç徿 ï¼ç¹å¾æ å¼¹åºå½é åå½å ¥ @@ -486,17 +483,17 @@ /** * ä¸å¡ä»£ç å±è°ç¨ * è·åä¸å¡å¯¹åºå段çå½é åæ°æ®,妿language_codeä¸ä¸ºç©ºï¼è¡¨ææ¯ææºç«¯ * @param dt ä¸å¡è¡¨æ°æ® * @param dt ä¸å¡è¡¨æ°æ® * @param language_code ä¸ä¸ºç©ºåä¸ºææºç«¯ * @return */ DataTableEntity baseDao.listInternationDataTable(DataTableEntity dt,String language_code ) å°è£ å½é åæ°æ®å°æ¯æ¡è®°å½çæ¯ä¸ªå½é ååæ®µã FieldSetEntity baseDao.listInternationDataTable(FieldSetEntity fs,String language_code ) å°è£ å½é åæ°æ®å°åæ¡è®°å½çæ¯ä¸ªå½é ååæ®µã //baseDao.processInternationDataTable(DataTableEntity dt,String language_code ),å½é ååæ®µä¸æ¯æ°ç»æ ¼å¼ //baseDao.processInternationDataTable(FieldSetEntity fs,String language_code ) å½é ååæ®µä¸æ¯æ°ç»æ ¼å¼ è¿åjsonæ ¼å¼ï¼ {     "code":"200",     "data":[ @@ -528,7 +525,7 @@     "msg":"æå",     "status":"success" } 5ãä¿®æ¹ä¿åæ°æ®jsonæ ¼å¼ï¼ {     "token":"11111-æ°å¢æäº¤æ°æ®", @@ -562,7 +559,7 @@     ],     "phone":"18123938722" } 6.ä¸è½å½é åçè¡¨ï¼ mrbase_sys_cache_config ç¼åé ç½® mrbase_sys_data_sources æ°æ®åºè¿æ¥é ç½® @@ -649,7 +646,7 @@ æ ¸å¿ï¼éè¦sigar-amd64-winnt.dllæè sigar-x86-winnt.dllæä»¶ç½®äºjdkçbin䏿è cçwindows/system32 ä¸ä¼ ç®å½é ç½®ï¼è§propertiesæä»¶ä¸çupload.fileãxxxx å 个ç¸å ³åæ° ä¸ä¼ æä»¶èªå¨åå°ç®å½ä¸ï¼å¨controlleræserviceå±ä¸è¯»åæä½ã 46.æ¶æ¯æå¡ 1.æ°å»ºéå public static void createQueue(String queue_name) @@ -694,9 +691,9 @@ language:value //å½é åè¯è¨ } è¿åå¼ï¼list<String> uuids 彿¥è¯¢è¯åï¼ä½¿ç¨å¤è¡¨èåæ¥è¯¢ï¼å¹¶ä½¿ç¨äºå«åæ¶ï¼éè¦æ·»å 表å«åãåæ®µå«å设置ï¼å¹¶æsqlè¯å¥ä½¿ç¨select * from (æ¥è¯¢è¯å¥+æ°æ®æéæ¡ä»¶+é«çº§æ¥è¯¢æ¡ä»¶) b æ¬èµ·æ¥ï¼æ³¨æ 48.以ä¸å 容忴 48.以ä¸å 容忴 1.coreå å¼å ¥åæ´ <dependency> <groupId>com.lx</groupId> @@ -728,13 +725,13 @@ public String DataTableEntity.getUuids() å ï¼æ¹ä¸ºä»¥ä¸ æå®è¡¨çææuuid,è¿åæ°ç» -> public Object[] getUuids(Object tableName) -> public Object[] getUuids(Object tableName) æå®è¡¨çææuuidï¼è¿åéå·åéçå符串 -> public String getUuidsToString(Object tableName) -> public String getUuidsToString(Object tableName) è¿åé»è®¤è¡¨çææuuid,è¿åæ°ç» -> public Object[] getUuids() è¿åé»è®¤è¡¨çææuuid,è¿åéå·åéçå符串 -> public String getUuidsToString() -> public String getUuidsToString() 8.ç»å½ä¸ä¼ åºå®åæ° system_language_code è¯è¨ç¼ç zh en system_client_type 客æ·ç±»å @@ -781,7 +778,7 @@ baseDao.update(DataTableEntity fs,String language_code) æ°æ®æ¥è¯¢ï¼ FieldSetEntity listInternationDataTable(FieldSetEntity fs,String language_code ) DataTableEntity listInternationDataTable(DataTableEntity dt,String language_code ) DataTableEntity listInternationDataTable(DataTableEntity dt,String language_code ) 49.å端é误信æ¯å½é å 1)éè¯¯ä¿¡æ¯æä¸¾ç±»æ³¨å ¥ï¼å¯å¨ç±»ä¸æ·»å æ³¨å ¥ä»£ç ï¼ DataPoolCacheImpl.getInstance() @@ -790,11 +787,11 @@ .appendErrorEnumClass("com.lx.base.module.sys.config.SystemErrorCode"); 2)ç¹æ®æ åµè°ç¨ï¼AbstractBaseController.error()ãBaseException.getMessage()ãgetMessageInfo()å·²å®ç°ï¼ String message=DataPoolCacheImpl.getInstance().getErrorLanguageInternation(code, language_code); 50.é«çº§åç §æ°æ®è¿åè§å 1)ææåä½é«çº§åç §æ°æ® f1 å ¨ç§° f2 çç¼ç 2)ææé¨é¨é«çº§åç §æ°æ® f1 å ¨ç§° f2 çç¼ç 3)ææå²ä½é«çº§åç §æ°æ® f1 å ¨ç§° 3)ææå²ä½é«çº§åç §æ°æ® f1 å ¨ç§° 4)ææå²ä½ç级é«çº§åç §æ°æ® f1 ççº§çº§å« f2 ç»å 5)æææ¨¡åé«çº§åç §æ°æ® f1 çç¼ç 6)ææåè½é«çº§åç §æ°æ® f1 çç¼ç @@ -820,7 +817,7 @@ 52.åè½æééªè¯ å¿ é¡»é ç½®mrbase_sys_function_buttons.api_urlé ç½®æé®å¯¹åºå端æ¥å£å°åï¼å¤ä¸ªéå·åé,ä¸è½å«çæ¬å·ï¼å¦ï¼ æ¥å£å°åï¼/api/management/delete-user/v1 é ç½®å°åï¼/api/management/delete-user 53.æ°æ®æä½æééªè¯ 主è¦éå¯¹åæ¡æ°æ®çå ãæ¹ ãæ¥æä½ï¼å¨å ãæ¹ ãæ¥çç¸åºæ¥å£è°ç¨ å¿ é¡»è®¾ç½®mrbase_sys_datamodel_field.field_type,useridï¼åæ¾äººåçåæ®µç±»åï¼orgUuidï¼åæ¾ç»ç»æºæçåæ®µç±»å @@ -837,7 +834,7 @@ /** * å¯¹åæ¡æ°æ®è¿è¡æä½çæééªè¯ * @param fs ä¸ä¼ æ°æ®ï¼å¿ é¡»å å«è¡¨å uuid ,å¦ä¸å¾éè¿ * @param type éªè¯ç±»å 1=人åéªè¯ 2= çº§ç»æºæéªè¯ 3 两è é½éªè¯ * @param type éªè¯ç±»å 1=人åéªè¯ 2= çº§ç»æºæéªè¯ 3 两è é½éªè¯ * @return */ public boolean validDataPermission(FieldSetEntity fs ,int type) @@ -845,14 +842,14 @@ * å¯¹åæ¡æ°æ®è¿è¡æä½çæééªè¯ ,ç¹æ®æéæ¡ä»¶ ï¼ä¸æ ¹æ®äºº ç»ç»æºæè¿æ»¤ * @param tableName 表å * @param uuid uuid * @param filter ç¹æ®æéæ¡ä»¶ * @param filter ç¹æ®æéæ¡ä»¶ * @return */ public boolean validDataPermission(String tableName,String uuid,String filter) /** * å¯¹åæ¡æ°æ®è¿è¡æä½çæééªè¯ ,ç¹æ®æéæ¡ä»¶ ï¼ä¸æ ¹æ®äºº ç»ç»æºæè¿æ»¤ * @param fs ä¸ä¼ æ°æ®ï¼å¿ é¡»å å«è¡¨å uuid ,å¦ä¸å¾éè¿ * @param filter ç¹æ®æéæ¡ä»¶ * @param filter ç¹æ®æéæ¡ä»¶ * @return */ public boolean validDataPermission(FieldSetEntity fs ,String filter) @@ -863,7 +860,7 @@ SystemErrorCode.SYSTEM_NOT_OPER_PERMISSION.getText()); return this.error(SystemErrorCode.SYSTEM_NOT_OPER_PERMISSION.getValue(), SystemErrorCode.SYSTEM_NOT_OPER_PERMISSION.getText()); } 4)æäººåãç»ç»æºæéªè¯æ°æ®æéè°ç¨ç¤ºä¾ å¿ é¡»è®¾ç½®mrbase_sys_datamodel_field.field_type,useridï¼åæ¾äººåçåæ®µç±»åï¼orgUuidï¼åæ¾ç»ç»æºæçåæ®µç±»å if(!permissionService.validDataPermission(fse,CoreConst.DATA_PERMISSION_VALID_TYPE_ALL)) { @@ -879,7 +876,7 @@ this.staffBusinessService.addBalance(fs); this.logger.info(" "); } 54.æ¶æ¯çæ /** * ææåºç¨æå¡çææ¶æ¯è°äºæ¹æ³å»æ·»å æ¶æ¯ @@ -890,30 +887,30 @@ * @param content æ¶æ¯å 容 ä¸å¿ å¡« * @param title æ¶æ¯æ é¢ å¿ å¡« * @param send_user_id æ¶æ¯åé人 å¿ å¡« * @param message_type æ¶æ¯ç±»å å¿ å¡« * @param message_type æ¶æ¯ç±»å å¿ å¡« * @param url æ¶æ¯é¾æ¥å°å ä¸å¿ å¡« * @param source_table ä¸å¡æ°æ®è¡¨ ä¸å¿ å¡« * @param source_uuid ä¸å¡æ°æ®è¡¨uuid ä¸å¿ å¡« * @param create_by å建人 userid å¿ å¡« * @param create_by å建人 userid å¿ å¡« * @param is_send_mail æ¯å¦åéé®ä»¶ 0:å¦ 1ï¼æ¯ å¿ å¡« * @param is_send_sms æ¯å¦åéçä¿¡ 0:å¦ 1ï¼æ¯ å¿ å¡« */ WebsocketMesssageServiceThread.getInstance().appendMessage(String ....); WebsocketMesssageServiceThread.getInstance().appendMessage(String ....); //æ¶æ¯ç±»å //表å常éå®ä¹ public static final int MESSAGE_TOP_TYPE_SYSTEM =1; //"ç³»ç»æ¶æ¯"; public static final int MESSAGE_TOP_TYPE_SYSTEM =1; //"ç³»ç»æ¶æ¯"; public static final int MESSAGE_TYPE_ANNOUNCEMENT =11; //"å ¬åæ¶æ¯"; public static final int MESSAGE_TOP_TYPE_TASK =2; //"任塿¶æ¯"; public static final int MESSAGE_TYPE_APPROVE =21; //"å¾ åæ¶æ¯"; public static final int MESSAGE_TYPE_APPROVE =21; //"å¾ åæ¶æ¯"; public static final int MESSAGE_TYPE_COORDINATION =22; //"ååæ¶æ¯"; public static final int MESSAGE_TYPE_TASK = 23;// "任塿¨¡åæ¶æ¯"; public static final int MESSAGE_TOP_TYPE_WARNING =3; //"é¢è¦æ¶æ¯"; public static final int MESSAGE_TYPE_WARNING =31; //"é¢è¦æ¶æ¯"; 55.å表æåºè§å,䏿¬å·å 表示å表æåº æ¾å°orderbyåæ°ä¸ 55.å表æåºè§å,䏿¬å·å 表示å表æåº æ¾å°orderbyåæ°ä¸ String s="main_field1,main_field2,{sub_table1:sub_table1_field1 desc,sub_table1_field2},{sub_table2:sub_table2_field1 desc,sub_table2_field2}" 56.é误信æ¯ä¸ç卿åéæ¿æ¢ æ¿å使ç¨{}æåéåæ¬èµ·æ¥ï¼æ¤åéåå°å¨Exceptionä¸è·åï¼DATA_VERIFY_UNIQUE_ERROR("æ°æ®ä¸æ¯å¯ä¸ï¼{value}", ModuleEnum.CORE.getValue() + "097"), @@ -924,7 +921,7 @@ 56.åå°å¼ç¨bean :com.product.core.util.ReflectUtil /** * * * @param beanName 被代ç对åbean åç§° * @param methodName æ¹æ³åç§° * @param objects åæ° @@ -961,7 +958,7 @@ jaré¨ç½²ï¼æå¼å·¥ç¨çpom.mxl,å³é®->Run as -> Maven install->è¿å ¥å·¥ç¨ç®å½->targetç®å½->copy æå®å çå·¥ç¨jarï¼æ¾å°æå¡å¨çè¿è¡ç®å½ä¸çlibç®å½ä¸ï¼ä¾å¦200ä¸ï¼D:\LXServer\product-server\libï¼ å端æä»¶é¨ç½²ï¼è¿å ¥lx-webå¹¶è¿è¡packed.batï¼éæ°çædistç®å½->è¿å ¥distç®å½copyé¤baseUrl.js以å¤çæææä»¶ï¼æ¾å°æå¡å¨çè¿è¡ç®å½ä¸çwebç®å½ä¸ã éå¯ï¼è¿è¡æ¡é¢å¿«æ·é®ï¼ 60.å页æ¥è¯¢sql select '6973' as staff_uuid è¿ç§æ²¡æfromçè¯å¥,è¦æ·»å from dualï¼å¦åå页æ¥è¯¢ä¼åºé product-server-web/doc/ϵͳ²¿Êð.docxBinary files differ
product-server-web/doc/´íÎó´úÂëÏêϸ˵Ã÷.docxBinary files differ
product-server-web/imp_temp/¹ú¼Ê»¯LabelÄ£°å.xlsBinary files differ
product-server-web/imp_temp/¸Úλģ°å.xlsBinary files differ
product-server-web/imp_temp/¸ÚλµÈ¼¶Ä£°å.xlsBinary files differ
product-server-web/imp_temp/³É±¾ÖÐÐÄÄ£°å.xlsxBinary files differ
product-server-web/imp_temp/Óû§ÐÅÏ¢.xlsBinary files differ
product-server-web/imp_temp/×éÖ¯»ú¹¹Ä£°å.xlsBinary files differ
product-server-web/jdbcDriver/JDBC.3.50.JCinfomix.tarBinary files differ
product-server-web/jdbcDriver/JDBC.3.50.JCinfomix/doc/install.txt
ÎļþÒÑɾ³ý product-server-web/jdbcDriver/JDBC.3.50.JCinfomix/doc/jdbcrel.htm
ÎļþÒÑɾ³ý product-server-web/jdbcDriver/JDBC.3.50.JCinfomix/doc/patchinfo.htm
ÎļþÒÑɾ³ý product-server-web/jdbcDriver/JDBC.3.50.JCinfomix/setup.jarBinary files differ
product-server-web/lib/mrc-ess-server-util-1.0.0-SNAPSHOT.jarBinary files differ
product-server-web/resources/LicenseKey.dat
@@ -1 +1 @@ 7B6D2332DBB13421010AC91951B73AEE393AA4F5E45D8A81A6572ED29A0FB4447DF3FE2BEC7CD96B066B1AE8A658B97478DCAB2B59F0971241263C69679C721A8AF5514BD65B339FAA7B3034926730E3C0A10BE750BEFD02EF5E6D69BC6C0FB8C1C348F8AC9A60FC4AB8FB2FEA42C50CAB06A195F98259C08B6C31D545887F18799794981CB48507331CED6BEB79F5906E4004B0AC2F98E0EFD14C077055804FC7CEC36666395AD381078F5E8FB364798D6C34BDEA2C8A6093268E09421A203464C23223A30D8931DBC483E47344CF423031D5AF976CDB0FFA21F5B6B628B6849AF9155D68993343EC171BCAADEDBAABE9D583A4A011414F37B7AA8E1D4A6430845B63042C6A1344FBBEB1A94FB4011BB62C489CBCD7701D080AB8E175C45B74DB215C8C4DB5DC38B302550F805E6D3F9C86C247339259CBE2CF1AB21F676ED7BCFE01765BFC566E1A297633E94FF59CF3EAC9D0F54C6CB7BC55018A276886773A9FEB7C620BF276B43B068619ACB745A41F663CDCAF8EFF977E29E4FBCA0F18 704F16B1D215BC04042005365EB2001E3324D7BEEBA9206CA1F670D493A7874D7C65C473EBDEBD0C0EF47C7DAA7F2BF77CAEEAD85E4F681748A2D3CD6A86DF628FF6A90AD4E28B7DA66B8EA0915E4F4DC5DAAC065A7B746CEE1E7533BE0918A4C79FBCDEA24B82014A01B6D8E3A52BBDAC3DAA66FE9FDE3E8D92ACB54DA1746779BBD63F16726C6330140ED5EF0D1974692C5AABA9DBB6BFE742983374187BC2C0BF118861E3A0D68EF1CCBA87CA33988FB2F40FEE7ACFF8952DDCAC47AD42976792F264AC0C6C90D698959D70638E1C38307B559BB540F0F978D3F8B663E7D59E4143B96D5A6C02E5D5086BA3858386E638D338AA4353193CF6FDCC122CF6D68768ACF82104FB2AFF7BC993427E0A2CBD0DD5F1BF735AAC085FB9987E6CA983DB4C45064137A400B6F3DA128276ED819B65241830F4C8B5E849C75F16C93A17B11FE7195A7DF875199562CBE01186A6F4E87FFFF487D09BB4D1887F23C681DB31D998DB659BD4CAB381937A188CEF2DAA2F7065D5A5D42D9697A6E6F00BA3E9 product-server-web/sql_patch/update_sql20220107_001.sql
ÎļþÒÑɾ³ý product-server-web/sql_patch/update_sql20220107_002.sql
ÎļþÒÑɾ³ý product-server-web/sql_patch/update_sql20220108_001.sql
ÎļþÒÑɾ³ý product-server-web/src/main/resources/application-dev.properties
@@ -76,19 +76,8 @@ data.source.type=mysql data.source.driver=com.mysql.cj.jdbc.Driver #################local############################### #data.source.url=jdbc:mysql://110.185.195.204:9092/ch_kt_mes_apply?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useNewIO=true&useSSL=false&serverTimezone=Asia/Shanghai #data.source.url=jdbc:mysql://192.168.137.1:3306/ch_kt_mes_apply?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useNewIO=true&useSSL=false&serverTimezone=Asia/Shanghai # \u672C\u5730mysql8 #data.source.url=jdbc:mysql://127.0.0.1:3308/ch_kt_mes_apply?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useNewIO=true&useSSL=false&serverTimezone=Asia/Shanghai # \u6D4B\u8BD5\u670D\u52A1\u5668 #data.source.url=jdbc:mysql://10.4.69.68:3306/ch_kt_mes_apply?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useNewIO=true&useSSL=false&serverTimezone=Asia/Shanghai # \u6B63\u5F0F\u670D\u52A1\u5668-\u91C7\u96C6 #data.source.url=jdbc:mysql://10.13.1.39:3306/ch_kt_mes_apply?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useNewIO=true&useSSL=false&serverTimezone=Asia/Shanghai # \u6B63\u5F0F\u670D\u52A1\u5668-\u62A5\u8868 data.source.url=jdbc:mysql://10.13.1.39:3306/ch_kt_mes_apply?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useNewIO=true&useSSL=false&serverTimezone=Asia/Shanghai data.source.user=root #data.source.password=root123 #data.source.password=a123 data.source.password=CHKTADMIN ##################local############################### #-------------------------druid\u8FDE\u63A5\u6C60\u7684\u914D\u7F6E\u4FE1\u606F------------------------ product-server-web/src/main/resources/application.properties
@@ -1,5 +1,5 @@ # dev prod spring.profiles.active=dev spring.profiles.active=prod # *********server log start ************** server.tomcat.access-log-pattern=%h %D %m %l %u %t "%r" %s %b product-server-web/src/main/resources/logback-spring.xml
@@ -1,8 +1,9 @@ <configuration> <property name="LOG_HOME" value="./logs/backend" /> <property name="LOG_HOME" value="./logs/backend"/> <timestamp key="byDate" datePattern="yyyy-MM-dd"/> <!--æ ¼å¼åè¾åºï¼%dè¡¨ç¤ºæ¥æï¼%thread表示线ç¨åï¼%-5levelï¼çº§å«ä»å·¦æ¾ç¤º5个å符宽度%msgï¼æ¥å¿æ¶æ¯ï¼%næ¯æ¢è¡ç¬¦--> <property name="MESSAGE_FILE_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}.%M - %msg%n" /> <property name="MESSAGE_FILE_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}.%M - %msg%n"/> <!-- æ¥å¿æä»¶ä¿çæ¶é¿ --> <property name="maxhistory" value="60"/> <!-- æ¥å¿æä»¶åå²å¤§å° --> @@ -81,12 +82,12 @@ <logger name="java.sql.Statement" level="INFO"/> <logger name="java.sql.PreparedStatement" level="INFO"/> <logger name="org.springframework" level="INFO"/> <!-- ç产ç¯å¢ --> <springProfile name="prod"> <root level="info"> <appender-ref ref="consoleAppender"/> <!-- ç¦ç¨æ§å¶å°æå°--> <appender-ref ref="errorAppender"/> <appender-ref ref="infoAppender"/> </root> @@ -110,5 +111,5 @@ <appender-ref ref="debugAppender"/> </root> </springProfile> <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/> <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/> </configuration>