product-server-data-center/src/main/java/com/product/data/center/controller/MesExternalController.java
@@ -77,6 +77,13 @@ } } @PostMapping("/split-table-data/{version}") @ApiVersion(1) public String splitTableData(HttpServletRequest request) { mesExternalService.splitTableData(); return OK(); } @PostMapping("rehandle-error/{version}") @ApiVersion(1) public String rehandleError(HttpServletRequest request) { product-server-data-center/src/main/java/com/product/data/center/entity/SNAssociatedItemEntity.java
@@ -21,7 +21,7 @@ @ExcelProperty("å æº/夿ºSN") private String pkProductSn; @ExcelProperty("ç¹å»MN") @ExcelProperty("çµæºMN") private String dj; @ExcelProperty("å缩æºSN") 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(); //è·åå½åæä»½ 以MMæ ¼å¼å 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); } //å¨listä¸ååºæ¶é´æè¿çæ°æ® 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); @@ -332,14 +456,9 @@ 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; } product-server-data-center/src/main/java/com/product/data/center/service/MesExternalService1.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,977 @@ //package com.product.data.center.service; // //import cn.hutool.core.collection.CollectionUtil; //import cn.hutool.core.date.DateTime; //import cn.hutool.core.date.DateUtil; //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.product.common.utils.spring.SpringUtils; //import com.product.core.config.CoreConst; //import com.product.core.config.Global; //import com.product.core.entity.DataTableEntity; //import com.product.core.entity.FieldSetEntity; //import com.product.core.exception.BaseException; //import com.product.core.service.support.AbstractBaseService; //import com.product.core.sign.SignUtil; //import com.product.core.spring.context.SpringBeanUtil; //import com.product.core.spring.context.SpringMVCContextHolder; //import com.product.core.transfer.Transactional; //import com.product.core.util.JsonUtil; //import com.product.data.center.config.CmnConst; //import com.product.data.center.config.ErrorCode; //import com.product.data.center.entity.HistoryEntity; //import com.product.data.center.service.ide.IMesExternalService; //import com.product.data.center.utils.QuerySqlParseUtil; //import com.product.datasource.dao.Dao; //import com.product.datasource.dao.impl.OracleDaoImpl; //import com.product.datasource.entity.DataBaseEntity; //import com.product.quartz.service.IRemoteService; //import com.product.util.BaseUtil; //import oracle.jdbc.internal.OracleTypes; //import org.apache.commons.lang3.StringUtils; //import org.springframework.beans.factory.annotation.Value; //import org.springframework.stereotype.Service; // //import javax.servlet.http.HttpServletRequest; //import java.sql.CallableStatement; //import java.sql.Connection; //import java.sql.SQLException; //import java.util.*; //import java.util.concurrent.CompletionService; //import java.util.concurrent.ExecutionException; //import java.util.concurrent.Future; //import java.util.stream.Collectors; // ///** // * @Author cheng // * @Date 2022/12/16 13:20 // * @Desc MESå¤é¨æ¥å£ // */ //@Service //public class MesExternalService1 extends AbstractBaseService implements IMesExternalService, IRemoteService, com.product.data.service.impl.IRemoteService { // // @Value("${data.system.name}") // private String dataSystemName; // // private CommonService commonService = null; // // private FieldSetEntity collectLogCache = null; // // public CommonService getCommonService() { // if (this.commonService == null) { // this.commonService = SpringBeanUtil.getBean(CommonService.class); // } // return commonService; // } // // /** // * è·åå岿°æ® // */ // public void getHistoryData(FieldSetEntity fse) throws BaseException, ExecutionException, InterruptedException { // // //æºå· // String serialNumber = fse.getString("serial_number"); // SpringMVCContextHolder.getSystemLogger().info("åå¤ååæºå·æ°æ®ï¼" + serialNumber); // if (StringUtils.isEmpty(serialNumber)) { // throw new BaseException(ErrorCode.SERIAL_NUMBER_IS_NULL); // } // // FieldSetEntity fs = getBaseDao().getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_DATA_SYNC_MES, "LENGTH(data_source)>1 limit 1", null, false); // if (FieldSetEntity.isEmpty(fs)) { // throw new BaseException(ErrorCode.MO_NUMBER_SYNC_DATASOURCE_ERROR); // } // 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); // } // DataTableEntity dt = getBaseDao().listTable(CmnConst.PRODUCT_SYS_DATA_COLLECT, "upper(source_table) in ('T_WIP_TRACKING','T_WIP_PRODUCT_KEYP','T_WIP_DETAIL','T_PM_PRODUCT_SN') and data_source in (select uuid from product_sys_data_sync_manager)", new Object[]{}, new Object[]{"uuid,id,data_source,source_table"}); // // Map<String, List<FieldSetEntity>> groupByCollectId = dt.getData().stream().collect(Collectors.groupingBy(item -> item.getString("id"))); // Map<String, List<FieldSetEntity>> groupBySourceTable = dt.getData().stream().collect(Collectors.groupingBy(item -> item.getString("source_table"))); // // DataBaseEntity dbe = new DataBaseEntity(reportDbConfig); // Dao reportDao = dbe.getDao(); // String reportDbName = dbe.getDbName(); // Set<String> trackingTableSet = QuerySqlParseUtil.getAllTableName(reportDao, reportDbName, "da_t_wip_tracking"); // HistoryEntity trackingData = historyBeforeDispose(getData(reportDao, trackingTableSet, "serial_number", // serialNumber, new ErrorCode[]{ErrorCode.TRACKING_TABLE_NOT_EXISTS, ErrorCode.NOT_FOUND_SERIAL_NUMBER}), CmnConst.T_WIP_TRACKING); // // Set<String> keypTableSet = QuerySqlParseUtil.getAllTableName(reportDao, reportDbName, "da_t_wip_product_keyp"); // HistoryEntity keypData = historyBeforeDispose(getData(reportDao, keypTableSet, "pk_product_sn", serialNumber, new ErrorCode[]{ErrorCode.KEYP_TABLE_NOT_EXISTS, ErrorCode.KEYP_DATA_NOT_FOUND}), CmnConst.T_WIP_PRODUCT_KEYP); // // Set<String> detailTableSet = QuerySqlParseUtil.getAllTableName(reportDao, reportDbName, "da_t_wip_detail"); // HistoryEntity detailData = historyBeforeDispose(getData(reportDao, detailTableSet, "serial_number", serialNumber, new ErrorCode[]{ErrorCode.DETAIL_TABLE_NOT_EXISTS, ErrorCode.DETAIL_DATA_NOT_FOUND}), CmnConst.T_WIP_DETAIL); // //// Set<String> productSnTableSet = QuerySqlParseUtil.getAllTableName(reportDao, reportDbName, "da_t_pm_product_sn"); //// HistoryEntity productSnData = historyBeforeDispose(getData(reportDao, productSnTableSet, "product_sn", serialNumber, new ErrorCode[]{ErrorCode.PRODUCT_SN_TABLE_NOT_EXISTS, ErrorCode.PRODUCT_SN_DATA_NOT_FOUND}), CmnConst.T_PM_PRODUCT_SN); // // // //ä¸»åºæ°æ®æºé ç½® // String masterDataSource = fs.getString("data_source"); // dbe = new DataBaseEntity(masterDataSource); // Map<String, Dao> groupDao = new HashMap<>(); // Dao dao = dbe.getDao(); // boolean success = false; // try { // Connection connection = dao.getConnection(); // connection.setAutoCommit(false); // HistoryEntity[] historyEntities = {trackingData, keypData, detailData}; // insertMasterTableData(dao, historyEntities); // insertSubTableData(groupDao, groupByCollectId, groupBySourceTable, historyEntities); // connection.commit(); // batchCommit(groupDao); // success = true; // SpringMVCContextHolder.getSystemLogger().info("ååæºå·ï¼" + serialNumber + "æå"); // } catch (Exception e) { // SpringMVCContextHolder.getSystemLogger().error("ååæºå·ï¼" + serialNumber + "失败"); // SpringMVCContextHolder.getSystemLogger().error(e); // throw new BaseException(ErrorCode.INSERT_DATA_FAIL); // } finally { // try { // if (!success && !dao.getConnection().getAutoCommit()) { // dao.getConnection().rollback(); // } // dao.closeConnection(); // for (Dao value : groupDao.values()) { // try (Connection connection = value.getConnection()) { // if (!connection.getAutoCommit()) { // connection.rollback(); // } // } // value.closeConnection(); // // } // } catch (Exception e) { // e.printStackTrace(); // SpringMVCContextHolder.getSystemLogger().error(e); // } // } // } // // public void batchCommit(Map<String, Dao> groupDao) throws SQLException { // for (Dao value : groupDao.values()) { // value.getConnection().commit(); // } // } // // /** // * æå ¥æ°æ®å°ä¸»åº // * // * @param dao // * @param historyEntities // */ // public void insertMasterTableData(Dao dao, HistoryEntity[] historyEntities) { // for (HistoryEntity historyEntity : historyEntities) { // if (historyEntity == null) { // continue; // } // DataTableEntity masterDataTable = historyEntity.getMasterDataTable(); // if (DataTableEntity.isEmpty(masterDataTable)) { // continue; // } // Object[] objects = masterDataTable.getData().stream().map(item -> item.getString(historyEntity.getPrimaryField())).toArray(); // //æ¥è¯¢ä¸»åºæ°æ®æ¯å¦åå¨ // DataTableEntity list = dao.getList(historyEntity.getTableName(), // BaseUtil.buildQuestionMarkFilter(historyEntity.getPrimaryField(), objects.length, true), // new String[]{historyEntity.getPrimaryField()}, objects); // List<String> existsPrimaryValues = null; // if (!DataTableEntity.isEmpty(list)) { // existsPrimaryValues = list.getData().stream().map(item -> item.getString(historyEntity.getPrimaryField())).collect(Collectors.toList()); // } // for (int i = 0; i < masterDataTable.getRows(); i++) { // String primaryValue = masterDataTable.getString(i, historyEntity.getPrimaryField()); // if (existsPrimaryValues != null && existsPrimaryValues.contains(primaryValue)) { // //æ°æ®åå¨è·³è¿è¯¥æ°æ® // continue; // } // FieldSetEntity fieldSetEntity = masterDataTable.getFieldSetEntity(i); // fieldSetEntity.getMeta().setTableName(new Object[]{historyEntity.getTableName()}); // fieldSetEntity.remove("~table_name~"); // dao.add(fieldSetEntity); // } // } // } // // // /** // * æå ¥ååºè¡¨æ°æ® // * // * @param groupDao ååºdao // * @param groupByCollectId ééé ç½®æééidåç» // * @param groupBySourceTable ééé ç½®æè¡¨ååç» // * @param historyEntities å岿°æ® // */ // public void insertSubTableData(Map<String, Dao> groupDao, Map<String, List<FieldSetEntity>> groupByCollectId, // Map<String, List<FieldSetEntity>> groupBySourceTable, HistoryEntity[] historyEntities) throws Exception { // for (HistoryEntity historyEntity : historyEntities) { // if (historyEntity == null) { // continue; // } // Map<String, List<FieldSetEntity>> groupData = historyEntity.getGroupData(); // if (groupData == null || groupData.isEmpty()) { // continue; // } // for (Map.Entry<String, List<FieldSetEntity>> entry : groupData.entrySet()) { // List<Dao> daoList = new ArrayList<>(); // if ("ch-kt".equals(entry.getKey())) { // List<FieldSetEntity> fieldSetEntityList = groupBySourceTable.get(historyEntity.getTableName().toLowerCase()); // Set<String> dataSourceSet = fieldSetEntityList.stream().map(item -> item.getString("data_source")).collect(Collectors.toSet()); // for (String sourceUuid : dataSourceSet) { // daoList.add(getDao(groupDao, sourceUuid)); // } // } else { // daoList.add(getDao(groupDao, groupByCollectId.get(entry.getKey()).get(0).getString("data_source"))); // } // for (Dao dao : daoList) { // List<FieldSetEntity> value = entry.getValue(); // //æ¥è¯¢å·²åå¨çæ°æ® // DataTableEntity list = dao.getList(historyEntity.getTableName(), // BaseUtil.buildQuestionMarkFilter(historyEntity.getPrimaryField(), value.size(), true), // value.stream().map(item -> item.getString(historyEntity.getPrimaryField())).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()); // if (existIds != null && existIds.contains(NumberUtil.parseNumber(primaryValue).toString())) { // continue; // } // fieldSetEntity.getMeta().setTableName(new Object[]{historyEntity.getTableName()}); // fieldSetEntity.remove("~table_name~"); // dao.add(fieldSetEntity); // } // } // } // } // } // // public Dao getDao(Map<String, Dao> groupDao, String sourceUuid) throws Exception { // Dao dao = groupDao.get(sourceUuid); // if (null == dao) { // DataBaseEntity dbe = new DataBaseEntity(sourceUuid); // dao = dbe.getDao(); // dao.getConnection().setAutoCommit(false); // groupDao.put(sourceUuid, dao); // } // return dao; // } // // public HistoryEntity historyBeforeDispose(DataTableEntity dt, String targetTableName) { // if (DataTableEntity.isEmpty(dt)) { // return null; // } // HistoryEntity historyEntity = new HistoryEntity(); // historyEntity.setMoNumberField("mo_number"); // if (CmnConst.T_WIP_TRACKING.equalsIgnoreCase(targetTableName)) { // historyEntity.setPrimaryField("wip_id"); // historyEntity.setTimeField("update_date"); // } else if (CmnConst.T_WIP_PRODUCT_KEYP.equalsIgnoreCase(targetTableName)) { // historyEntity.setPrimaryField("pk_id"); // historyEntity.setTimeField("pk_loadtime"); // // historyEntity.setMoNumberField("pk_mo"); // } else if (CmnConst.T_WIP_DETAIL.equalsIgnoreCase(targetTableName)) { // historyEntity.setPrimaryField("wip_detail_id"); // historyEntity.setTimeField("update_date"); // } else if (CmnConst.T_PM_PRODUCT_SN.equalsIgnoreCase(targetTableName)) { // historyEntity.setPrimaryField("row_id"); // historyEntity.setTimeField("update_date"); // } else { // return null; // } // historyEntity.setTableName(targetTableName.toUpperCase()); // Date now = new Date(); // for (int i = 0; i < dt.getRows(); i++) { // Map<Object, Object> values = dt.getFieldSetEntity(i).getValues(); // //éåmapä¸çvalueæ¯å¦ä¸ºæ°åï¼å¦ææ¯æ°å夿尿°ç¹å颿¯å¦æå¼ï¼å¦ææ²¡æå¼å转æ¢ä¸ºæ´æ° // for (Map.Entry<Object, Object> entry : values.entrySet()) { // if (entry.getValue() instanceof Number) { // Number number = (Number) entry.getValue(); // if (number.doubleValue() == number.intValue()) { // entry.setValue(number.intValue()); // } // } // } // } // 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 ("ch-kt".equals(fs.getString("source_info")) && StringUtils.isEmpty(preMasterKey)) { // preMasterKey = fs.getString(historyEntity.getPrimaryField()); // } // fs.setValue(historyEntity.getPrimaryField(), preMasterKey); // fs.setValue("pre_master_key", preMasterKey); // masterData.setFieldValue(i, historyEntity.getTimeField(), now); // fs.setValue(historyEntity.getTimeField(), now); // fs.remove("~table_name~"); // masterData.getFieldSetEntity(i).remove("~table_name~"); // masterData.setFieldValue(i, "pre_master_key", null); // } // historyEntity.setArchivedDataTable(dt); // historyEntity.setMasterDataTable(masterData); // historyEntity.setSubDataTable(subData); // return historyEntity; // } // // public DataTableEntity getData(Dao dao, Set<String> tableSet, String filterFieldName, String // serialNumber, ErrorCode[] errorCodes) throws InterruptedException, ExecutionException { // if (CollectionUtil.isEmpty(tableSet)) { // throw new BaseException(errorCodes[0]); // } // String[] tableArray = tableSet.toArray(new String[]{}); // 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})); // } // DataTableEntity data = new DataTableEntity(); // Future<DataTableEntity> take = objectCompletionService.take(); // for (int i = 0; i < tableArray.length; i++) { // DataTableEntity dataTableEntity = take.get(); // BaseUtil.dataTableMerge(data, dataTableEntity); // } // // if (DataTableEntity.isEmpty(data) && !"product_sn".equals(filterFieldName)) { // throw new BaseException(errorCodes[1]); // } // return data; // } // // // /** // * åå§åå¶ä»¤å // * // * @param moNumbers // * @throws BaseException // */ // public void initMoBase(String[] moNumbers) throws BaseException { // FieldSetEntity fs = getBaseDao().getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_DATA_SYNC_MES, "LENGTH(data_source)>1 limit 1", null, false); // if (FieldSetEntity.isEmpty(fs)) { // throw new BaseException(ErrorCode.MO_NUMBER_SYNC_DATASOURCE_ERROR); // } // // String[] targetDataSource = fs.getString("target_data_source").split(","); // // Dao[] targetDao = Arrays.stream(targetDataSource).map(item -> new DataBaseEntity(item).getDao()).toArray(Dao[]::new); // StringBuilder errorMsg = new StringBuilder(); // for (Dao dao : targetDao) { // for (String moNumber : moNumbers) { // synchronized (moNumber.intern()) { // try (Connection connection = dao.getConnection(); // CallableStatement callableStatement = connection.prepareCall( // "{CALL SMT_T_PM_MO_BASE(?,?,?,?,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,?,null,null" + // ",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null)}")) { // callableStatement.setInt(1, 5); // callableStatement.registerOutParameter(2, OracleTypes.SMALLINT); // callableStatement.registerOutParameter(3, OracleTypes.VARCHAR); // callableStatement.setString(4, moNumber); // callableStatement.setString(5, "1"); // callableStatement.execute(); // //æ§è¡åè¿åçé误ç // int errorCode = callableStatement.getInt(2); // //æ§è¡åè¿åçéè¯¯ä¿¡æ¯ // String errorText = callableStatement.getString(3); // if (errorCode != 0) { // //é误ç // errorMsg.append("å¶ä»¤åå·:").append(moNumber); // errorMsg.append("\nerrorCodeï¼").append(errorCode); // errorMsg.append("\nerrorText:").append(errorText); // } // } catch (Exception e) { // SpringMVCContextHolder.getSystemLogger().error(e); // e.printStackTrace(); // errorMsg.append("å¶ä»¤åå·:").append(moNumber); // errorMsg.append("\næ§è¡æ¶æªç¥é误ï¼").append(e.getMessage()); // } // } // } // } // if (errorMsg.length() > 0) { // throw new BaseException(ErrorCode.SUB_MO_BASE_INI_FAIL.getValue(), ErrorCode.SUB_MO_BASE_INI_FAIL.getText() + "ã\n" + errorMsg); // } // } // // /** // * @param moNumbers å¶ä»¤åå·,å¤ä¸ªéå·åé // * @param type æä½ç±»å 1 å建å¶ä»¤å 2 æ´æ°å¶ä»¤åä¸çæå®å段 // * @throws BaseException // */ // public void updateMoBase(String[] moNumbers, int type) throws BaseException { // FieldSetEntity fs = getBaseDao().getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_DATA_SYNC_MES, "LENGTH(data_source)>1 limit 1", null, false); // if (FieldSetEntity.isEmpty(fs)) { // throw new BaseException(ErrorCode.MO_NUMBER_SYNC_DATASOURCE_ERROR); // } // String dataSource = fs.getString("data_source"); // String[] targetDataSource = fs.getString("target_data_source").split(","); // StringBuilder errorMessage = new StringBuilder(); // DataBaseEntity dbe = new DataBaseEntity(dataSource); // for (int i = 0; i < moNumbers.length; i++) { // String moNumber = moNumbers[i]; // try { // synchronized (moNumber.intern()) { // Dao dao = dbe.getDao(); // FieldSetEntity one = dao.getOne("T_PM_MO_BASE", "MO_NUMBER=?", new Object[]{moNumber}); // if (FieldSetEntity.isEmpty(one)) { // throw new BaseException(ErrorCode.MO_NUMBER_RECORD_SELECT_EMPTY); // } // one.setTableName("T_PM_MO_BASE"); // dao.closeConnection(); // Dao[] targetDao = Arrays.stream(targetDataSource).map(item -> new DataBaseEntity(item).getDao()).toArray(Dao[]::new); // StringBuilder errorMsg = new StringBuilder(); // try { // if (1 == type) { // createMoBase(errorMsg, one, targetDao); // } else if (2 == type) { // updateMoBase(errorMsg, one, targetDao); // } // if (errorMsg.length() > 0) { // //æé误 // throw new BaseException(ErrorCode.SUB_MO_BASE_CREATE_OR_UPDATE_FAIL.getValue(), ErrorCode.SUB_MO_BASE_CREATE_OR_UPDATE_FAIL.getText() + "ã\n" + errorMsg); // } // } finally { // for (Dao dao1 : targetDao) { // dao1.closeConnection(); // } // } // } // } catch (Exception e) { // e.printStackTrace(); // SpringMVCContextHolder.getSystemLogger().error(e); // errorMessage.append(e.getMessage()).append("\n"); // } // // } // if (errorMessage.length() > 0) { // throw new BaseException(ErrorCode.SUB_MO_BASE_CREATE_OR_UPDATE_FAIL.getValue(), ErrorCode.SUB_MO_BASE_CREATE_OR_UPDATE_FAIL.getText() + "ã\n" + errorMessage); // } // } // // /** // * å建å¶ä»¤å // * // * @param errorMsg // * @param moBase // * @param subDao // */ // private void createMoBase(StringBuilder errorMsg, FieldSetEntity moBase, Dao[] subDao) { // String moNumber = moBase.getString("mo_number"); // for (int i = 0; i < subDao.length; i++) { // Dao dao = subDao[i]; // try { // //æ£æ¥å·¥å表æ¯å¦åå¨ // FieldSetEntity projectBase = dao.getOne("T_PM_PROJECT_BASE", "PROJECT_ID = ? ", new Object[]{moNumber}); // if (FieldSetEntity.isEmpty(projectBase)) { // throw new BaseException(ErrorCode.SUB_PROJECT_BASE_CAN_NOT_EMPTY); // } // //æ£æ¥å¶ä»¤å表æ¯å¦å·²åå¨ // FieldSetEntity fs = dao.getOne(moBase.getTableName(), "mo_number = ? ", new Object[]{moNumber}); // if (!FieldSetEntity.isEmpty(fs)) { // //è¿è¡æ´æ°æä½ // updateMoBase(errorMsg, moBase, new Dao[]{dao}); // continue; // } // //å° T_PM_MO_BASE.PROJECT_ID æ´æ¹ä¸ºååºä¸å¯¹åº T_PM_PROJECT_BASE.PROJECT_BASE_ID // moBase.setValue("project_id", projectBase.getString("project_base_id")); //// moBase.setValue("row_id", -1); // dao.add(moBase); // } catch (BaseException e) { // errorMsg.append("å¶ä»¤åå·ï¼[ " + moNumber + " ]IP:[").append(getIp(dao)). // append("]").append(e.getMessageInfo()); // e.printStackTrace(); // SpringMVCContextHolder.getSystemLogger().error(e); // } catch (Exception e) { // errorMsg.append("å¶ä»¤åå·ï¼[ " + moNumber + " ]IP:[").append(getIp(dao)).append("]").append("å建å¶ä»¤åå¤±è´¥ï¼æªç¥çé误"); // e.printStackTrace(); // SpringMVCContextHolder.getSystemLogger().error(e); // } // } // } // // /** // * æ´æ°å¶ä»¤å // * // * @param errorMsg // * @param moBase // * @param subDao // */ // private void updateMoBase(StringBuilder errorMsg, FieldSetEntity moBase, Dao[] subDao) { // String moNumber = moBase.getString("mo_number"); // for (int i = 0; i < subDao.length; i++) { // Dao dao = subDao[i]; // try { // //æ£æ¥å¶ä»¤å表æ¯å¦å·²åå¨ // FieldSetEntity fs = dao.getOne(moBase.getTableName(), "mo_number = ? ", new Object[]{moNumber}); // if (FieldSetEntity.isEmpty(fs)) { // //è¿è¡å建æä½ // createMoBase(errorMsg, moBase, new Dao[]{dao}); // continue; // } // // å½ååºä¸å¶ä»¤å input_qty åæ®µä¸º 0 æè 为 null æ¶ æ´æ°å¤ä¸ªå段ï¼å¦ååªæ´æ°target_qty åæ®µ // String[] updateField = StringUtils.isEmpty(fs.getString("input_qty")) || "0".equals(fs.getString("input_qty")) ? // new String[]{"target_qty", "owner", "mo_create_date", "mo_schedule_date", "mo_due_date", "areaid", "technicsid", "close_flag", "default_group", "end_group"} // : new String[]{"target_qty"}; // StringBuilder sql = new StringBuilder(); // sql.append(" UPDATE T_PM_MO_BASE SET "); // Object[] params = new Object[updateField.length + 1]; // for (int k = 0; k < updateField.length; k++) { // if (k > 0) { // sql.append(","); // } // params[k] = moBase.getObject(updateField[k]); // sql.append(updateField[k].toUpperCase()).append(" = ? "); // } // params[updateField.length] = moNumber; // sql.append(" WHERE MO_NUMBER = ? "); // dao.executeSql(sql.toString(), params); // } catch (BaseException e) { // errorMsg.append("å¶ä»¤åå·ï¼[ " + moNumber + " ]IP:[").append(getIp(dao)). // append("]").append(e.getMessageInfo()); // e.printStackTrace(); // SpringMVCContextHolder.getSystemLogger().error(e); // } catch (Exception e) { // errorMsg.append("å¶ä»¤åå·ï¼[ " + moNumber + " ]IP:[").append(getIp(dao)).append("]").append("æ´æ°å¶ä»¤åå¤±è´¥ï¼æªç¥çé误"); // e.printStackTrace(); // SpringMVCContextHolder.getSystemLogger().error(e); // } // } // } // // private String getIp(Dao dao) { // return ((OracleDaoImpl) dao).getDataBaseEntity().getIp(); // } // // /** // * ééé ç½®ä¿å // * // * @param request // * @throws BaseException // */ // @Override // @Transactional // public void saveCollectConfig(HttpServletRequest request) throws BaseException { // //æå¡åç§° // String serverName = request.getHeader("server-name"); // if (StringUtils.isEmpty(serverName)) { // throw new BaseException(ErrorCode.SERVER_NAME_CAN_NOT_EMPTY); // } // FieldSetEntity fse = BaseUtil.getFieldSetEntity(request, CmnConst.PRODUCT_SYS_DATA_COLLECT); // //ééæ¥æº // String sourceInfo = fse.getString("id"); // if (StringUtils.isEmpty(sourceInfo) || StringUtils.contains(sourceInfo, dataSystemName)) { // throw new BaseException(ErrorCode.COLLECT_SOURCE_VALUE); // } // commonSave(fse); // } // // /** // * æåé ç½®ä¿å // * // * @param fse // * @throws BaseException // */ // @Override // @Transactional // public void saveExtractConfig(FieldSetEntity fse) throws BaseException { // String dataSource = fse.getString(CmnConst.TABLE_SYNC_MANAGER); // if (!StringUtils.isEmpty(dataSource)) { // FieldSetEntity fs = JsonUtil.pareseJsonToFieldSetEntity(dataSource); // if (!FieldSetEntity.isEmpty(fs)) { // commonSave(fs); // } // } // commonSave(fse); // getCommonService().saveDelRecordConfig(2, fse.getUUID()); // } // // /** // * 彿¡£é ç½®ä¿å // * // * @param fse // * @throws BaseException // */ // @Override // @Transactional // public void saveArchiveConfig(FieldSetEntity fse) throws BaseException { // commonSave(fse); // } // // /** // * @param fse // * @throws BaseException // */ // @Override // public void saveCollectLog(FieldSetEntity fse) throws BaseException { // this.commonSave(fse); // } // // /** // * @param fse // * @throws BaseException // */ // @Override // public void saveExtractLog(FieldSetEntity fse) throws BaseException { // this.commonSave(fse); // } // // /** // * æ°æ®æºä¿åä¼è°ç¨è¯¥æ¹æ³ // * // * @param fse // * @throws BaseException // */ // @Override // public void saveSyncConnectionConfig(FieldSetEntity fse) throws BaseException { // //åæå¡ä¿åæ°æ®åºè¿æ¥é ç½®åè°ç¨è¯¥æ¹æ³ï¼ä¼ è¾æ°æ®å°ä¸»æå¡ // //TODO // } // // /** // * 宿¶ä»»å¡çææ¥å¿ä¼è°ç¨è¯¥æ¹æ³ // * // * @param fse // * @throws BaseException // */ // @Override // public void saveTimeLog(FieldSetEntity fse) throws BaseException { // //主æå¡æåæ¥å¿ä¿ååè°ç¨è¯¥æ¹æ³ä¼ è¾å°åæå¡ // //TODO // // } // // private void commonSave(FieldSetEntity fse) throws BaseException { // String uuid = fse.getUUID(); // FieldSetEntity fs = getBaseDao().getFieldSetEntity(fse.getTableName(), new String[]{CmnConst.UUID}, uuid, false); // Map<String, DataTableEntity> subData = fse.getSubData(); // if (!CollectionUtil.isEmpty(subData)) { // DataTableEntity addDt = new DataTableEntity(); // DataTableEntity updateDt = new DataTableEntity(); // for (Map.Entry<String, DataTableEntity> entry : subData.entrySet()) { // String tableName = entry.getKey(); // DataTableEntity value = entry.getValue(); // if (DataTableEntity.isEmpty(value)) { // continue; // } // Object[] uuids = value.getUuids(); // DataTableEntity dt = getBaseDao().listTable(tableName, BaseUtil.buildQuestionMarkFilter(CmnConst.UUID, uuids.length, true), uuids, new String[]{CmnConst.UUID}); // for (int i = 0; i < value.getRows(); i++) { // uuid = value.getString(i, CmnConst.UUID); // List<FieldSetEntity> fieldSetEntity = dt.getFieldSetEntity(uuid); // if (CollectionUtil.isEmpty(fieldSetEntity)) { // addDt.addFieldSetEntity(value.getFieldSetEntity(i)); // value.setFieldValue(i, CoreConst.SYSTEM_DATA_OPERATE_TYPE, "add"); // } else { // addDt.addFieldSetEntity(updateDt.getFieldSetEntity(i)); // value.setFieldValue(i, CoreConst.SYSTEM_DATA_OPERATE_TYPE, "update"); // } // } // if (!DataTableEntity.isEmpty(addDt)) { // getBaseDao().add(addDt); // } // if (!DataTableEntity.isEmpty(updateDt)) { // getBaseDao().update(updateDt); // } // } // } // if (FieldSetEntity.isEmpty(fs)) { // getBaseDao().add(fse, false); // } else { // getBaseDao().update(fse, false); // } // } // // /** // * è°ç¨è¿ç¨ä¸»æå¡å¨ééä¿å // * // * @param fse // * @return // * @throws BaseException // */ // public FieldSetEntity remoteSaveCollectConfig(FieldSetEntity fse) throws BaseException { // if ("ch-kt".equals(dataSystemName)) { // return fse; // } // FieldSetEntity fs = getBaseDao().getFieldSetByFilter(CmnConst.PRODUCT_MES_SERVER, "server_type=0", null, false); // if (FieldSetEntity.isEmpty(fs)) { // throw new BaseException(ErrorCode.REMOTE_SERVER_CONFIG_EMPTY); // } // //æå¡ååçç«¯å£ // String ipPort = fs.getString("server_url"); // String serverName = fs.getString("server_name"); // String serverUrl = ipPort + CmnConst.SAVE_COLLECT_URL; // FieldSetEntity res = doPost(serverUrl, serverName, fse); // return res; // } // // /** // * 主æå¡æåä¿åæ¥å¿åè°ç¨è¯¥æ¹æ³ä¼ å ¥å°åæå¡ä¿å // * // * @param fse // * @return // * @throws BaseException // */ // public void remoteSaveExtractLog(FieldSetEntity fse) throws BaseException { // try { // if ("ch-kt".equals(dataSystemName)) { // //主æå¡é鿥å¿uuid // String preStepUuid = fse.getString(CmnConst.PRE_STEP_UUID); // StringBuilder sql = new StringBuilder(); // sql.append("\nSELECT "); // sql.append("\nserver.* "); // sql.append("\nFROM ").append(CmnConst.PRODUCT_SYS_DATA_COLLECT).append(" collect "); // sql.append("\nJOIN ").append(CmnConst.PRODUCT_SYS_DATA_CENTER_LOG).append(" log "); // sql.append("\nON log.config_uuid=collect.uuid and log.type=1 "); // sql.append("\nJOIN ").append(CmnConst.PRODUCT_MES_SERVER).append(" server "); // sql.append("\nON collect.id like concat(server.server_name,'%') "); // sql.append("\nWHERE log.uuid=? and collect.id not like concat(?,'%') limit 1"); // FieldSetEntity fs = getBaseDao().getFieldSetBySQL(sql.toString(), new Object[]{preStepUuid, dataSystemName}, false); // if (FieldSetEntity.isEmpty(fs)) { // return; // } // String ipPort = fs.getString("server_url"); // String serverName = fs.getString("server_name"); // String serverUrl = ipPort + CmnConst.SAVE_EXTRACT_LOG_URL; // doPostAsync(serverUrl, serverName, fse); // } // } catch (Exception e) { // //æè·å¼å¸¸ä¸ºäºä½¿éé宿¶ä»»å¡æ£å¸¸è¿è¡ // SpringMVCContextHolder.getSystemLogger().error(e); // e.printStackTrace(); // } // } // // /** // * è°ç¨è¿ç¨ä¸»æå¡å¨ä¿å // * // * @param fse // * @return // * @throws BaseException // */ // public void remoteSaveExtractConfig(FieldSetEntity fse) throws BaseException { // DataTableEntity dt = getRemoteSubServer(); // if (DataTableEntity.isEmpty(dt)) { // return; // } // FieldSetEntity extractTargetSource = getBaseDao().getFieldSetEntity(CmnConst.TABLE_SYNC_MANAGER, fse.getString("extract_target_source"), false); // if (!FieldSetEntity.isEmpty(extractTargetSource)) { // extractTargetSource.setValue(CoreConst.SYSTEM_TABLE_NAME_LABEL, CmnConst.TABLE_SYNC_MANAGER); // fse.setValue(CmnConst.TABLE_SYNC_MANAGER, BaseUtil.fieldSetEntityToJson(extractTargetSource)); // } // for (int i = 0; i < dt.getRows(); i++) { // FieldSetEntity fs = dt.getFieldSetEntity(i); // //æå¡ååçç«¯å£ // String ipPort = fs.getString("server_url"); // String serverName = fs.getString("server_name"); // String serverUrl = ipPort + CmnConst.SAVE_EXTRACT_URL; // doPost(serverUrl, serverName, fse); // } // } // // /** // * è°ç¨è¿ç¨ä¸»æå¡å¨ä¿å // * // * @param fse // * @return // * @throws BaseException // */ // public void remoteSaveArchiveConfig(FieldSetEntity fse) throws BaseException { // DataTableEntity dt = getRemoteSubServer(); // if (DataTableEntity.isEmpty(dt)) { // return; // } // for (int i = 0; i < dt.getRows(); i++) { // FieldSetEntity fs = dt.getFieldSetEntity(i); // //æå¡ååçç«¯å£ // String ipPort = fs.getString("server_url"); // String serverName = fs.getString("server_name"); // String serverUrl = ipPort + CmnConst.SAVE_ARCHIVE_URL; // doPost(serverUrl, serverName, fse); // } // } // // /** // * è°ç¨è¿ç¨ä¸»æå¡å¨ä¿å // * // * @param fse // * @return // * @throws BaseException // */ // public void remoteSaveCollectLog(FieldSetEntity fse) throws BaseException { // if ("ch-kt".equals(dataSystemName) || FieldSetEntity.isEmpty(fse)) { // return; // } // FieldSetEntity fs = getBaseDao().getFieldSetByFilter(CmnConst.PRODUCT_MES_SERVER, "server_type=0", null, false); // if (FieldSetEntity.isEmpty(fs)) { // throw new BaseException(ErrorCode.REMOTE_SERVER_CONFIG_EMPTY); // } // //æå¡ååçç«¯å£ // String ipPort = fs.getString("server_url"); // String serverName = fs.getString("server_name"); // String serverUrl = ipPort + CmnConst.SAVE_COLLECT_LOG_URL; // doPost(serverUrl, serverName, fse); // } // // // /** // * è·ååæå¡é ç½® // * // * @return // * @throws BaseException // */ // private DataTableEntity getRemoteSubServer() throws BaseException { // return getBaseDao().listTable(CmnConst.PRODUCT_MES_SERVER, "server_type!=0"); // } // // // @Async // void doPostAsync(String url, String serverName, FieldSetEntity fse) throws BaseException { // doPost(url, serverName, fse); // } // // public String getDataSystemName() { // return dataSystemName; // } // // public boolean remoteRehandle(FieldSetEntity fse) { // String type = fse.getString(CmnConst.TYPE);//ç±»å // String logUuid; // if ("2".equals(type)) { // logUuid = fse.getString(CmnConst.PRE_STEP_UUID); // } else if ("1".equals(type)) { // logUuid = fse.getUUID(); // } else { // return false; // } // FieldSetEntity fs = getBaseDao().getFieldSetByFilter(CmnConst.PRODUCT_SYS_DATA_COLLECT, "uuid =(select config_uuid FROM product_sys_data_center_log where uuid=?)", new Object[]{logUuid}, false); // if (!FieldSetEntity.isEmpty(fs)) { // //ééid // String collectId = fs.getString(CmnConst.ID); // if (collectId.indexOf(dataSystemName) == -1) { // fs = getBaseDao().getFieldSetByFilter(CmnConst.PRODUCT_MES_SERVER, "server_type=1 and ? like concat(server_name,'%')", new Object[]{collectId}, false); // if (!FieldSetEntity.isEmpty(fs)) { // //æå¡ååçç«¯å£ // String ipPort = fs.getString("server_url"); // String serverName = fs.getString("server_name"); // String serverUrl = ipPort + CmnConst.REHANDLE_ERROR_URL; // doPost(serverUrl, serverName, fse); // //æ è®°æ¥å¿æå // JournalManagerService journalManagerService = SpringUtils.getBean(JournalManagerService.class); // journalManagerService.writeBackReDealResult(fse, true); // } // return true; // } // } // return false; // } // // /** // * post è¯·æ± // * // * @param url // * @param serverName // * @param fse // * @throws BaseException // */ // private FieldSetEntity doPost(String url, String serverName, FieldSetEntity fse) throws BaseException { // fse.setValue(CoreConst.SYSTEM_TABLE_NAME_LABEL, fse.getTableName()); // JSONObject requestBody = BaseUtil.fieldSetEntityToJson(fse); // String requestData = requestBody.toJSONString(); // //ç¾å // String signature = SignUtil.getHmacSHA1(requestData, Global.getSystemConfig("signature.key", "")); // try (HttpResponse response = HttpRequest.post(url) // .contentType("application/x-www-form-urlencoded") // .header(CoreConst.SYSTEM_LANGUAGE_CODE_, "zh-CN") //è¯è¨ç¼ç // .header(CoreConst.SYSTEM_CLIENT_TYPE_, "Web") //客æ·ç«¯ç±»å // .header(CoreConst.SYSTEM_CLIENT_VERSION_, "1.0.0") //客æ·ç«¯çæ¬ // .header("server-name", serverName) //ç³»ç»åç§° // .header("signature", signature) //ç¾å // .body("formData=" + requestData).execute()) { // if (response.getStatus() == 200) { // //è¯·æ±æå // String res = response.body(); // if (!StringUtils.isEmpty(res)) { // JSONObject resBody = JSON.parseObject(res); // if (resBody != null) { // String code = resBody.getString(CoreConst.API_RETURN_KEY_CODE); // if (!CoreConst.API_RETURN_VALUE_CODE_200.equals(code)) { // //æå¡å 鍿åºçé误 // throw new BaseException("è°ç¨æ¥å£å¤±è´¥ï¼", resBody.getString(CoreConst.API_RETURN_KEY_MSG)); // } // String formData = resBody.getString(CoreConst.API_RETURN_KEY_DATA); // if (StringUtils.isEmpty(formData)) { // return null; // } // FieldSetEntity result = JsonUtil.pareseJsonToFieldSetEntity(formData); // return result; // } // } // } // throw new BaseException(ErrorCode.OPEN_API_REQUEST_FAIL); // } // // } // // /** // * è·åééæ¥å¿ // * // * @return // */ // public FieldSetEntity getCollectLog() { // collectLogCache = null; // if (collectLogCache == null) { // loadCollectLogCache(); // } // // return collectLogCache; // } // // public void loadCollectLogCache() { // StringBuilder sql = new StringBuilder(); // sql.append("\n with no_extract as ( "); // sql.append("\n SELECT "); // sql.append("\n a.* "); // sql.append("\n FROM "); // sql.append("\n product_sys_data_center_log A "); // sql.append("\n LEFT JOIN product_sys_data_center_log b ON a.uuid = b.pre_step_uuid "); // sql.append("\n WHERE "); // sql.append("\n a.type = 1 "); // sql.append("\n and a.result=1 and (a.deal_flag is null or a.deal_flag =0) "); // sql.append("\n AND ( "); // sql.append("\n b.pre_step_uuid IS NULL "); // sql.append("\n OR "); // sql.append("\n ( "); // sql.append("\n b.pre_step_uuid=a.uuid "); // sql.append("\n AND "); // sql.append("\n (b.result=0 and (b.deal_result = 0 or b.deal_flag is null)) "); // sql.append("\n ) "); // sql.append("\n ) "); // sql.append("\n ), "); // sql.append("\n last_run_log as ( "); // sql.append("\n select max(created_utc_datetime) last_time,config_uuid from product_sys_data_center_log where type=1 and result=1 and deal_flag=0 GROUP BY config_uuid "); // sql.append("\n ) "); // sql.append("\n "); // sql.append("\n SELECT ifnull(COUNT(no_extract.uuid),0) unextracted_batch ,ifnull(sum(no_extract.count),0) unextracted_total_count,b.`name`,(select last_time from last_run_log where b.uuid=last_run_log.config_uuid) last_success_time FROM product_sys_data_collect b "); // sql.append("\n left join no_extract on no_extract.config_uuid=b.uuid "); // sql.append("\n GROUP BY b.uuid "); // sql.append("\n order by b.`name` "); // // FieldSetEntity fse = new FieldSetEntity(); // fse.setTableName("temp"); // fse.setValue("load_log_time", DateTime.now().toString()); // DataTableEntity dataTableEntity = getBaseDao().listTable(sql.toString(), new Object[]{}); // if (!DataTableEntity.isEmpty(dataTableEntity)) { // fse.setValue("list", BaseUtil.dataTableEntityToJson(dataTableEntity, f -> { // JSONObject jsonObject = f[0]; // Date lastSuccessTime = jsonObject.getDate("last_success_time"); // if (lastSuccessTime != null) { // jsonObject.put("last_success_time", DateUtil.format(lastSuccessTime, "yyyy-MM-dd HH:mm:ss")); // } // })); // } else { // fse.setValue("list", "[]"); // } // this.collectLogCache = fse; // } //} product-server-data-center/src/main/java/com/product/data/center/service/ProductionRealTimeInfoService.java
@@ -212,37 +212,42 @@ sql.append(",tp_number,mo_create_date,mo_start_date,mo_due_date,mo_close_date"); sql.append(",close_flag,mo_number}"); boolean isF = false; if ("1".equals(queryTime) && (StringUtils.isEmpty(timeValue) || !"1".equals(timeFilter))) { //æ²¡ææ¶é´æ¡ä»¶ä¸å¾éäºåªæ¥çè¿ä¸¤å¹´çæ°æ® // DateTime offset = DateUtil.offset(new Date(), DateField.YEAR, -2); // sql.append(" {where ( mo_create_date >= str_to_date('" + DateUtil.format(offset, "yyyy-MM-dd") + "','%Y-%m-%d') )}"); // filterParams.add(DateUtil.format(offset, "yyyy-MM-dd")); } else if (!StringUtils.isEmpty(timeValue) && "1".equals(timeFilter)) { // if ("1".equals(queryTime) && (StringUtils.isEmpty(timeValue) || !"1".equals(timeFilter))) { // //æ²¡ææ¶é´æ¡ä»¶ä¸å¾éäºåªæ¥çè¿ä¸¤å¹´çæ°æ® //// DateTime offset = DateUtil.offset(new Date(), DateField.YEAR, -2); //// sql.append(" {where ( mo_create_date >= str_to_date('" + DateUtil.format(offset, "yyyy-MM-dd") + "','%Y-%m-%d') )}"); //// filterParams.add(DateUtil.format(offset, "yyyy-MM-dd")); // } else if (!StringUtils.isEmpty(timeValue) && "1".equals(timeFilter)) { //ææ¶é´æ¡ä»¶æ ¹æ®ç¨æ·éæ©çæ¶é´è¿æ»¤ String[] times = timeValue.split(","); String startTime = times[0]; String endTime = times[1]; sql.append(" {WHERE"); if ("production_time".equals(timeField)) { //ç¹æ®ï¼ ç产æ¶é´ sql.append(" (mo_number in (SELECT mo_number from [={da_t_wip_station_rec}{mo_number}"); sql.append("{where create_date >=str_to_date('" + startTime + "','%Y-%m-%d %H:%i:%s') and create_date<=str_to_date('" + endTime + "','%Y-%m-%d %H:%i:%s')}=] "); sql.append(" ) "); } else { // sql.append(" (mo_number in (SELECT mo_number from [={da_t_wip_station_rec}{mo_number}"); // sql.append("{where create_date >=str_to_date('" + startTime + "','%Y-%m-%d %H:%i:%s') and create_date<=str_to_date('" + endTime + "','%Y-%m-%d %H:%i:%s')}=] "); // sql.append(" ) "); //æ¶é´æ¡ä»¶ if (!"production_time".equals(timeField)) { sql.append(" {WHERE"); sql.append("\n (").append(timeField).append(">= str_to_date('" + startTime + "','%Y-%m-%d %H:%i:%s')"); sql.append("\n and ").append(timeField).append("<=str_to_date('" + endTime + "','%Y-%m-%d %H:%i:%s') )"); } sql.append("}"); sql.append("}=] t"); if ("production_time".equals(timeField)) { //ç¹æ®ï¼ ç产æ¶é´ sql.append(" JOIN [={da_t_wip_station_rec}{mo_number}{where create_date >=str_to_date('" + startTime + "','%Y-%m-%d %H:%i:%s') and create_date<=str_to_date('" + endTime + "','%Y-%m-%d %H:%i:%s')}=] rec ON rec.mo_number = t.mo_number "); } } else { sql.append("=] t "); } // sql.append("\n left join [=da_t_co_customer=] c on t.cust_code = c.cust_code "); sql.append("\n left join da_t_co_area a on t.areaid = a.areaid "); sql.append("\n left join [={da_t_pm_project_base}{project_base_id,product_material"); sql.append(",project_id,destroy_no,product_count"); sql.append("}=] p on p.project_base_id = t.project_id "); sql.append("\n left join [={da_t_co_item}{co_item_code,co_item_name,co_item_spec}=] m on p.product_material = m.co_item_code "); boolean isFilter = false; StringBuilder sqlFilter = new StringBuilder(); List<Object> filterParams = new ArrayList<>(); @@ -258,6 +263,7 @@ sql.append(" where (").append(sqlFilter).append(") "); } sql.append(" order by mo_create_date"); System.out.println(sql); String parseSql = QuerySqlParseUtil.parseSplitTableSql(getBaseDao(), sql.toString(), 2); DataTableEntity dataTableEntity = getBaseDao().listTable(parseSql, filterParams.toArray(), pageSize, cpage); @@ -265,11 +271,7 @@ } public DataTableEntity getProductSheet(FieldSetEntity fse) throws BaseException { String bak = fse.getString("~bak~"); String trackingTable = "da_t_wip_tracking"; if ("1".equals(bak)) { trackingTable = "da_t_wip_tracking_bak"; } String groupNext = fse.getString("group_next"); String moNumber = fse.getString("mo_number"); StringBuilder sql = new StringBuilder(64); @@ -429,13 +431,8 @@ * @throws BaseException */ public DataTableEntity getProcessSheet(FieldSetEntity fse) throws BaseException { String bak = fse.getString("~bak~"); String detailTable = "da_t_wip_detail"; String trackTable = "da_t_wip_tracking"; if ("1".equals(bak)) { detailTable = "da_t_wip_detail_bak"; trackTable = "da_t_wip_tracking_bak"; } //å¶ä»¤åå· String moNumber = fse.getString("mo_number"); //å·¥åº product-server-data-center/src/main/java/com/product/data/center/service/SNAssociatedItemService.java
@@ -2,15 +2,14 @@ import java.io.IOException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import java.text.DateFormat; import java.util.*; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import cn.hutool.core.date.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -32,8 +31,8 @@ /** * SNå ³èç©æ * @author 86151 * * @author 86151 */ @Component public class SNAssociatedItemService extends AbstractBaseService{ @@ -44,6 +43,7 @@ /** * è¿ç«ä¿¡æ¯ * * @param fse * @return */ @@ -52,12 +52,12 @@ JSONObject jsonReturn=new JSONObject(); String isBakTable = fse.getString(CmnConst.IS_BAK_TABLE); //æ¯å¦å表 Integer isRecentData = fse.getInteger(CmnConst.IS_RECENT_DATA);//æ¯å¦è¿ææ°æ® boolean isRecentData = fse.getBoolean(CmnConst.IS_RECENT_DATA) == true;//æ¯å¦è¿ææ°æ® Integer pageSize = fse.getInteger(CmnConst.PAGESIZE); //页æ°å¤§å° Integer cpage = fse.getInteger(CmnConst.CPAGE); //ç®æ 页 //å建tracking表SQLï¼å¹¶è·åè¿æ»¤çæ°æ® String parseTrackingSql=createTrackingSql(fse, isBakTable); String parseTrackingSql = createTrackingSql(fse, isBakTable, isRecentData); DataTableEntity dtTracking= baseDao.listTable(parseTrackingSql, new Object[] {}, pageSize, cpage); if (!BaseUtil.dataTableIsEmpty(dtTracking)) { @@ -71,8 +71,7 @@ //éè¿trackingè¿æ»¤keyp //Method1:使ç¨ORæ¥è¯¢ Object [] serialNumbers = dtTracking.getUuids(); String keypSql = createKeypSql(serialNumbers, isBakTable); System.out.println(keypSql); String keypSql = createKeypSql(serialNumbers, isBakTable, isRecentData); DataTableEntity dtKeyp=baseDao.listTable(keypSql, new Object[] {}); if (!BaseUtil.dataTableIsEmpty(dtKeyp)) { @@ -93,75 +92,69 @@ /** * æ ¹æ®tacking表çSNè§£ækeyp表 * * @param serialNumbers * @param isBakTable æ¯å¦BAK表 * @return */ public String createKeypSql(Object[] serialNumbers, String isBakTable, boolean isRecentData) { String keypFilter = BaseUtil.buildQuestionMarkFilter(CmnConst.PK_PRODUCT_SN, serialNumbers, true); StringBuilder keypSql = new StringBuilder(2056); keypSql.append(" SELECT ") .append(" t.pk_product_sn AS pk_product_sn,b1.zj,c.dj,b.ysj, ") .append(" d1.ysjmn,d.dk,e1.xsq,x1.ykq,c1.xfzj, ") .append(" REGEXP_SUBSTR(d.dk, '[^|]+', 1, 5) zbrj, ") .append(" e.mk,f.fjd,h.ccpg ") .append(" FROM(SELECT DISTINCT pk_product_sn FROM [={"); keypSql.append("da_t_wip_product_keyp"); keypSql.append("}{pk_product_sn,pk_keyp_sn,pk_item_source_type}{") .append(" WHERE instr( pk_mo,'DK' )=0 AND ") .append(keypFilter) .append("}=]) t ") .append(" LEFT JOIN(SELECT u.pk_product_sn, u.pk_keyp_sn ysj FROM ").append("da_t_wip_product_keyp").append(" u WHERE u.pk_item_source_type= 'YSJ' AND u.pk_keyp_sn NOT LIKE 'R_%') b ON t.pk_product_sn = b.pk_product_sn ") .append(" LEFT JOIN(SELECT v.pk_product_sn, v.pk_keyp_sn dj FROM ").append("da_t_wip_product_keyp").append(" v WHERE v.pk_item_source_type= 'DJ' AND v.pk_keyp_sn NOT LIKE 'R_%') c ON t.pk_product_sn = c.pk_product_sn ") .append(" LEFT JOIN(SELECT w.pk_product_sn, w.pk_keyp_sn dk FROM ").append("da_t_wip_product_keyp").append(" w WHERE w.pk_item_source_type= 'DK' AND w.pk_keyp_sn NOT LIKE 'R_%') d ON t.pk_product_sn = d.pk_product_sn ") .append(" LEFT JOIN(SELECT x.pk_product_sn, x.pk_keyp_sn mk FROM ").append("da_t_wip_product_keyp").append(" x WHERE x.pk_item_source_type= 'MK' AND x.pk_keyp_sn NOT LIKE 'R_%') e ON t.pk_product_sn = e.pk_product_sn ") .append(" LEFT JOIN(SELECT y.pk_product_sn, y.pk_keyp_sn fjd FROM ").append("da_t_wip_product_keyp").append(" y WHERE y.pk_item_source_type= 'FJD' AND y.pk_keyp_sn NOT LIKE 'R_%') f ON t.pk_product_sn = f.pk_product_sn ") .append(" LEFT JOIN(SELECT z.pk_product_sn, z.pk_keyp_sn zj FROM ").append("da_t_wip_product_keyp").append(" z WHERE (z.pk_item_source_type= 'ZJNJMN' or z.pk_item_source_type= 'ZJWJMN') AND z.pk_keyp_sn NOT LIKE 'R_%') b1 ON t.pk_product_sn = b1.pk_product_sn ") .append(" LEFT JOIN(SELECT v1.pk_product_sn, v1.pk_keyp_sn ysjmn FROM ").append("da_t_wip_product_keyp").append(" v1 WHERE v1.pk_item_source_type= 'YSJMN' AND v1.pk_keyp_sn NOT LIKE 'R_%') d1 ON t.pk_product_sn = d1.pk_product_sn ") .append(" LEFT JOIN(SELECT w1.pk_product_sn, w1.pk_keyp_sn xsq FROM ").append("da_t_wip_product_keyp").append(" w1 WHERE w1.pk_item_source_type= 'XSQ' AND w1.pk_keyp_sn NOT LIKE 'R_%') e1 ON t.pk_product_sn = e1.pk_product_sn ") .append(" LEFT JOIN(SELECT x1.pk_product_sn, x1.pk_keyp_sn ykq FROM ").append("da_t_wip_product_keyp").append(" x1 WHERE x1.pk_item_source_type= 'YKQ' AND x1.pk_keyp_sn NOT LIKE 'R_%') x1 ON t.pk_product_sn = x1.pk_product_sn ") .append(" LEFT JOIN(SELECT x1.pk_product_sn, x1.pk_keyp_sn xfzj FROM ").append("da_t_wip_product_keyp").append(" x1 WHERE x1.pk_item_source_type= 'XFZJ' AND x1.pk_keyp_sn NOT LIKE 'R_%') c1 ON t.pk_product_sn = c1.pk_product_sn ") .append(" LEFT JOIN (SELECT x1.pk_product_sn, x1.pk_keyp_sn ccpg FROM ").append("da_t_wip_product_keyp").append(" x1 WHERE x1.pk_item_source_type = 'CCPG' AND x1.pk_keyp_sn NOT LIKE 'R_%') h ON t.pk_product_sn = h.pk_product_sn "); String parseKeypSql = QuerySqlParseUtil.parseSplitTableSql(getBaseDao(), keypSql.toString(), isRecentData ? 2 : 0, false); return parseKeypSql; } /** * æ ¹æ®è¿æ»¤æ¡ä»¶è§£ætackingçSQL * * @param fse * @param isBakTable æ¯å¦BAK表 * @return */ public String createTrackingSql(FieldSetEntity fse, String isBakTable) { public String createTrackingSql(FieldSetEntity fse, String isBakTable, boolean isRecentData) { StringBuilder trackingSql=new StringBuilder(256); trackingSql.append("SELECT a.mo_number AS moNumber,a.in_line_time AS inLineTime,a.area_name AS areaName,a.serial_number AS uuid,a.technicsid ") .append(" FROM [={"); if ("1".equals(isBakTable)) { trackingSql.append("da_t_wip_tracking_bak"); }else { trackingSql.append("da_t_wip_tracking"); } trackingSql.append("}{mo_number,in_line_time,area_name,serial_number,technicsid}{") .append(" FROM [={da_t_wip_tracking}"); trackingSql.append("{mo_number,in_line_time,area_name,serial_number,technicsid}{") .append(parseCondition(fse,0)) .append("}=] a") .append(" JOIN da_t_smo_technics h ON a.technicsid =h.technicsid ") .append(parseCondition(fse,1)); //è§£æSQL String parseTrackingSql= QuerySqlParseUtil.parseSplitTableSql(getBaseDao(), trackingSql.toString(), 2, false); String parseTrackingSql = QuerySqlParseUtil.parseSplitTableSql(getBaseDao(), trackingSql.toString(), isRecentData ? 2 : 0, false); return parseTrackingSql; } /** * æ ¹æ®tacking表çSNè§£ækeyp表 * @param serialNumbers * @param isBakTable æ¯å¦BAK表 * @return */ public String createKeypSql(Object[] serialNumbers, String isBakTable) { String keypFilter = BaseUtil.buildQuestionMarkFilter(CmnConst.PK_PRODUCT_SN, serialNumbers, true); StringBuilder keypSql = new StringBuilder(2056); keypSql.append(" SELECT ") .append(" t.pk_product_sn AS pkProductSn,b1.zj,c.dj,b.ysj, ") .append(" d1.ysjmn,d.dk,e1.xsq,x1.ykq,c1.xfzj, ") .append(" REGEXP_SUBSTR(d.dk, '[^|]+', 1, 5) zbrj, ") .append(" e.mk,f.fjd,h.ccpg ") .append(" FROM(SELECT DISTINCT pk_product_sn FROM [={"); if ("1".equals(isBakTable)) { keypSql.append("da_t_wip_product_keyp_bak"); }else { keypSql.append("da_t_wip_product_keyp"); } keypSql.append("}{pk_product_sn,pk_keyp_sn,pk_item_source_type}{") .append(" WHERE instr( pk_mo,'DK' )=0 AND ") .append(keypFilter) .append("}=]) t ") .append(" LEFT JOIN(SELECT u.pk_product_sn, u.pk_keyp_sn ysj FROM ").append("1".equals(isBakTable)?"da_t_wip_product_keyp_bak":"da_t_wip_product_keyp").append(" u WHERE u.pk_item_source_type= 'YSJ' AND u.pk_keyp_sn NOT LIKE 'R_%') b ON t.pk_product_sn = b.pk_product_sn ") .append(" LEFT JOIN(SELECT v.pk_product_sn, v.pk_keyp_sn dj FROM ").append("1".equals(isBakTable)?"da_t_wip_product_keyp_bak":"da_t_wip_product_keyp").append(" v WHERE v.pk_item_source_type= 'DJ' AND v.pk_keyp_sn NOT LIKE 'R_%') c ON t.pk_product_sn = c.pk_product_sn ") .append(" LEFT JOIN(SELECT w.pk_product_sn, w.pk_keyp_sn dk FROM ").append("1".equals(isBakTable)?"da_t_wip_product_keyp_bak":"da_t_wip_product_keyp").append(" w WHERE w.pk_item_source_type= 'DK' AND w.pk_keyp_sn NOT LIKE 'R_%') d ON t.pk_product_sn = d.pk_product_sn ") .append(" LEFT JOIN(SELECT x.pk_product_sn, x.pk_keyp_sn mk FROM ").append("1".equals(isBakTable)?"da_t_wip_product_keyp_bak":"da_t_wip_product_keyp").append(" x WHERE x.pk_item_source_type= 'MK' AND x.pk_keyp_sn NOT LIKE 'R_%') e ON t.pk_product_sn = e.pk_product_sn ") .append(" LEFT JOIN(SELECT y.pk_product_sn, y.pk_keyp_sn fjd FROM ").append("1".equals(isBakTable)?"da_t_wip_product_keyp_bak":"da_t_wip_product_keyp").append(" y WHERE y.pk_item_source_type= 'FJD' AND y.pk_keyp_sn NOT LIKE 'R_%') f ON t.pk_product_sn = f.pk_product_sn ") .append(" LEFT JOIN(SELECT z.pk_product_sn, z.pk_keyp_sn zj FROM ").append("1".equals(isBakTable)?"da_t_wip_product_keyp_bak":"da_t_wip_product_keyp").append(" z WHERE (z.pk_item_source_type= 'ZJNJMN' or z.pk_item_source_type= 'ZJWJMN') AND z.pk_keyp_sn NOT LIKE 'R_%') b1 ON t.pk_product_sn = b1.pk_product_sn ") .append(" LEFT JOIN(SELECT v1.pk_product_sn, v1.pk_keyp_sn ysjmn FROM ").append("1".equals(isBakTable)?"da_t_wip_product_keyp_bak":"da_t_wip_product_keyp").append(" v1 WHERE v1.pk_item_source_type= 'YSJMN' AND v1.pk_keyp_sn NOT LIKE 'R_%') d1 ON t.pk_product_sn = d1.pk_product_sn ") .append(" LEFT JOIN(SELECT w1.pk_product_sn, w1.pk_keyp_sn xsq FROM ").append("1".equals(isBakTable)?"da_t_wip_product_keyp_bak":"da_t_wip_product_keyp").append(" w1 WHERE w1.pk_item_source_type= 'XSQ' AND w1.pk_keyp_sn NOT LIKE 'R_%') e1 ON t.pk_product_sn = e1.pk_product_sn ") .append(" LEFT JOIN(SELECT x1.pk_product_sn, x1.pk_keyp_sn ykq FROM ").append("1".equals(isBakTable)?"da_t_wip_product_keyp_bak":"da_t_wip_product_keyp").append(" x1 WHERE x1.pk_item_source_type= 'YKQ' AND x1.pk_keyp_sn NOT LIKE 'R_%') x1 ON t.pk_product_sn = x1.pk_product_sn ") .append(" LEFT JOIN(SELECT x1.pk_product_sn, x1.pk_keyp_sn xfzj FROM ").append("1".equals(isBakTable)?"da_t_wip_product_keyp_bak":"da_t_wip_product_keyp").append(" x1 WHERE x1.pk_item_source_type= 'XFZJ' AND x1.pk_keyp_sn NOT LIKE 'R_%') c1 ON t.pk_product_sn = c1.pk_product_sn ") .append(" LEFT JOIN (SELECT x1.pk_product_sn, x1.pk_keyp_sn ccpg FROM ").append("1".equals(isBakTable)?"da_t_wip_product_keyp_bak":"da_t_wip_product_keyp").append(" x1 WHERE x1.pk_item_source_type = 'CCPG' AND x1.pk_keyp_sn NOT LIKE 'R_%') h ON t.pk_product_sn = h.pk_product_sn "); String parseKeypSql= QuerySqlParseUtil.parseSplitTableSql(getBaseDao(), keypSql.toString(), 2, false); return parseKeypSql; } /** * trackingä¿¡æ¯è½¬å * * @param dtTracking * @return */ @@ -183,25 +176,28 @@ /** * å°trackingä¿¡æ¯æ·»å è³keyp * * @param json * @param dtKeyp */ public void addKeypInfo(JSONObject json, DataTableEntity dtKeyp) { for (int i = 0; i < dtKeyp.getRows(); i++) { FieldSetEntity fseKeyp=dtKeyp.getFieldSetEntity(i); String pkProductSN=fseKeyp.getString(CmnConst.PKPRODUCTSN); String pkProductSN = fseKeyp.getString("pk_product_sn"); fseKeyp.setValue(CmnConst.PKPRODUCTSN, pkProductSN); @SuppressWarnings("unchecked") List<String> trackInfo = (List<String>) json.get(pkProductSN); if (trackInfo.size()==3) { fseKeyp.setValue(CmnConst.AREANAME, trackInfo.get(0)); fseKeyp.setValue(CmnConst.MONUMBER, trackInfo.get(1)); fseKeyp.setValue(CmnConst.INLINETIME, trackInfo.get(2)); fseKeyp.setValue("area_name", trackInfo.get(0)); fseKeyp.setValue("mo_number", trackInfo.get(1)); fseKeyp.setValue("in_line_time", trackInfo.get(2)); } } } /** * è§£ææ¥è¡¨è¿æ»¤æ¡ä»¶ * * @param fse * @return */ @@ -223,8 +219,8 @@ String moNumber = fse.getString(CmnConst.MO_NUMBER); //å·¥åå· String factory = fse.getString(CmnConst.FACTORY); //åå« String areasn = fse.getString(CmnConst.AREA_SN); //çº¿ä½ String startTime = fse.getString(CmnConst.START_TIME); //å¼å§æ¶é´ String endTime = fse.getString(CmnConst.END_TIME); //ç»ææ¶é´ Date startTime = fse.getDate(CmnConst.START_TIME); //å¼å§æ¶é´ Date endTime = fse.getDate(CmnConst.END_TIME); //ç»ææ¶é´ if(!BaseUtil.strIsNull(moNumber)) { sqlFilter.append(" AND mo_number = '") @@ -248,15 +244,25 @@ } } if(!BaseUtil.strIsNull(startTime)) { sqlFilter.append(" AND in_station_time >STR_TO_DATE('") .append(startTime) if (startTime != null) { sqlFilter.append(" AND in_station_time >=STR_TO_DATE('") .append(DateUtil.format(startTime, "yyyy-MM-dd HH:mm:ss")) .append("','%Y-%m-%d %H:%i:%s')"); } if (!BaseUtil.strIsNull(endTime)) { sqlFilter.append(" AND in_station_time <STR_TO_DATE('") .append(endTime) if (endTime != null) { //å¤æç»ææ¶é´æ¯å¦ä¸ºå½å¤©çå¼å§æ¶é´ 00:00:00 DateTime dateTime = new DateTime(endTime); Calendar calendar = dateTime.toCalendar(); if (calendar.get(Calendar.HOUR_OF_DAY) == 0 && calendar.get(Calendar.MINUTE) == 0 && calendar.get(Calendar.SECOND) == 0) { //设置为23:59:59 calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); endTime = calendar.getTime(); } sqlFilter.append(" AND in_station_time <=STR_TO_DATE('") .append(DateUtil.format(endTime, "yyyy-MM-dd HH:mm:ss")) .append("','%Y-%m-%d %H:%i:%s')"); } } @@ -266,6 +272,7 @@ /** * çæEXCELä¿¡æ¯ * * @param request * @param response * @throws IOException @@ -304,29 +311,30 @@ /** * è¿ç«ä¿¡æ¯ * * @param fse * @return */ public DataTableEntity dtSNItemInfo(FieldSetEntity fse) { String isBakTable = fse.getString(CmnConst.IS_BAK_TABLE); Integer isRecentData = fse.getInteger(CmnConst.IS_RECENT_DATA);//æ¯å¦è¿ææ°æ® boolean isRecentData = fse.getBoolean(CmnConst.IS_RECENT_DATA) == true;//æ¯å¦è¿ææ°æ® Integer pageSize = fse.getInteger(CmnConst.PAGESIZE); //页æ°å¤§å° Integer cpage = fse.getInteger(CmnConst.CPAGE); //ç®æ 页 //å建tracking表SQLï¼å¹¶è·åè¿æ»¤çæ°æ® String parseTrackingSql=createTrackingSql(fse, isBakTable); String parseTrackingSql = createTrackingSql(fse, isBakTable, isRecentData); DataTableEntity dtTracking= baseDao.listTable(parseTrackingSql, new Object[] {}, pageSize, cpage); if (!BaseUtil.dataTableIsEmpty(dtTracking)) { //è·åæ»æ¡æ° String totalTrackingSql="SELECT COUNT(*)count_total FROM ("+parseTrackingSql+")t"; FieldSetEntity fseTotalTracking=baseDao.getFieldSetBySQL(totalTrackingSql, new Object[] {}, false); // FieldSetEntity fseTotalTracking = baseDao.getFieldSetBySQL(totalTrackingSql, new Object[]{}, false); //éè¿trackingè¿æ»¤keyp //Method1:使ç¨ORæ¥è¯¢ Object [] serialNumbers = dtTracking.getUuids(); String keypSql = createKeypSql(serialNumbers, isBakTable); String keypSql = createKeypSql(serialNumbers, isBakTable, isRecentData); System.out.println(keypSql); DataTableEntity dtKeyp=baseDao.listTable(keypSql, new Object[] {}); product-server-data-center/src/main/java/com/product/data/center/service/TraceToSourceService.java
@@ -36,8 +36,8 @@ /** * SN追溯æ¥è¯¢ * @author du * * @author du */ @Service public class TraceToSourceService extends AbstractBaseService{ @@ -47,6 +47,7 @@ /** * ç©æSNå追溯å岿¥è¯¢ * * @param querySNSN 主件SN * @param isBakTable æ¯å¦BAK表 * @return @@ -55,12 +56,7 @@ JSONObject jsonInfo=new JSONObject(); //æ¥è¯¢å ³é®ä»¶ï¼è·åæºå·SN String currentSql = ""; if ("1".equals(isBakTable)) { currentSql = "SELECT DISTINCT pk_product_sn FROM [={da_t_wip_product_keyp_bak}{}{WHERE pk_keyp_sn = '"+querySN+"' }=]"; }else { currentSql = "SELECT DISTINCT pk_product_sn FROM [={da_t_wip_product_keyp}{}{WHERE pk_keyp_sn = '"+querySN+"' }=]"; } String currentSql = "SELECT DISTINCT pk_product_sn FROM [={da_t_wip_product_keyp}{}{WHERE pk_keyp_sn = '" + querySN + "' }=]"; String parseSql = QuerySqlParseUtil.parseSplitTableSql(getBaseDao(), currentSql); FieldSetEntity fse=baseDao.getFieldSetBySQL(parseSql, new Object[] {}, false); @@ -72,6 +68,7 @@ /** * SN追溯å岿¥è¯¢ * * @param æºå¨SN æºå¨åºåå· * @param isBakTable æ¯å¦BAK表 * @return @@ -90,6 +87,7 @@ /** * è·åå¶ä»¤åä¿¡æ¯ * * @param querySN * @param isBakTable æ¯å¦BAK表 * @return @@ -107,11 +105,7 @@ .append(" (CASE t.error_flag WHEN '0' THEN 'æ£å¸¸' WHEN '1' THEN 'ä¸è¯' WHEN '3' THEN 'æ¥åº' ELSE 'N/A' END) error_flag ") .append("") .append(" FROM [=da_t_pm_mo_base=] p,[={"); if ("1".equals(isBakTable)) { sb1.append("da_t_wip_tracking_bak"); }else { sb1.append("da_t_wip_tracking"); } sb1.append("}{}{WHERE serial_number = '") .append(querySN) @@ -133,6 +127,7 @@ /** * è·åæå¤å±å®¹å¨SN * * @param querySN * @return */ @@ -191,6 +186,7 @@ /** * è·åå·¥ä½ä¸å¿ç©æä½ä¸ä¿¡æ¯ * * @param querySN * @param isBakTable æ¯å¦BAK表 * @return @@ -207,11 +203,7 @@ .append(" (SELECT d.emp_name FROM da_t_co_emp_desc d WHERE d.emp_no=l.pk_empno)empName, ") .append(" (CASE 0 WHEN 0 THEN '䏿' WHEN '1' THEN '䏿' WHEN '2' THEN 'æ¢æ' WHEN '3' THEN 'å¼å¸¸æ¢æ' ELSE '' END) actionType ") .append(" FROM [={"); if ("1".equals(isBakTable)) { sb2.append("da_t_wip_product_keyp_bak"); }else { sb2.append("da_t_wip_product_keyp"); } sb2.append("}{}{ WHERE pk_replace_flag='N' AND pk_product_sn='") .append(querySN) .append("'}=] l ") @@ -226,6 +218,7 @@ /** * è·ååå²è¿ç«ä¿¡æ¯ * * @param querySN * @param isBakTable æ¯å¦BAK表 * @return @@ -240,11 +233,7 @@ .append(" DATE_FORMAT(t.in_station_time, '%Y-%m-%d %H:%i:%s') AS in_station_time, ") .append(" (CASE t.error_flag WHEN '0' THEN 'æ£å¸¸' WHEN '1' THEN 'ä¸è¯' WHEN '3' THEN 'æ¥åº' ELSE 'N/A' END) error_flag ") .append(" FROM [={"); if ("1".equals(isBakTable)) { sb3.append("da_t_wip_detail_bak"); }else { sb3.append("da_t_wip_detail"); } sb3.append("}{}{") .append(" WHERE serial_number = ( ") .append(" SELECT '") @@ -269,6 +258,7 @@ /** * è·ååå²ç»´ä¿®è®°å½ * * @param querySN * @return */ @@ -301,6 +291,7 @@ /** * çæEXCELæ°æ® * * @param request * @param response * @throws IOException product-server-web/lib/product-server-core-1.0.0-releases.jarBinary files differ
product-server-web/resources/LicenseKey.dat
@@ -1 +1 @@ 01BC8AA83EB75F3C5839DC34763D25F9D4D7FBE3E961E786868CEC17D5F70B3AAF8239EC0E6754FA3A085623FAC377E3ACB89C05E0F2369E682EB5881EF53A954E6B6E917A8CA6708C379DA4090E4E655E2C546FC3FC644A4BADB3359AFE99E8A889304A8155AEB75382886DC57D7A63796F92E21337F8E2842F2CF17A5BB62C1A856ED7AEE240FEA701250B93D8403C7F7EA3581674312703FFD3953564AB0F9B00A5F9F08DC5EC628BEB28348C02A8C5A7B5788F2CD34C4757ADD7F5223C46384B9F6A7C541AD86558D4937138AD973655178E6CFA438F09BD89489B7FA4D6DD2920ECB70ABD68148F451457536976F5414DE01F0D0E7CEA698A627163D3095B54815CC86C8B9DCE2EB3602BB1586ECBD959D2DBFFF4163734D296FC84B2D0ED10777F225FB2F854B674A6F34E28F36E2F3A4035C20690AD5AF663138301456E3CEA67E17FECEA06309BC40BD6734A563736D2E3EA9DBC9DCA7B4AE23BD8C77E98F44943CC3C12ECA786DAF17BACE8567D4C901608BFAF520C052FF71DDEE8DD268EC0DAF9DCE22435FB828644CB17380A3FF81E6FA2B68B49559D93D8BA869E2D14E374B9CFB9E80C3097A9B60CBD55E7B495163D5DAE0A55888814F148ED1EAF1B9DF0B639568374FEA4298860562870523730EA0518BD5DF6E9796FFB32D4019A616A60E217C74AD441A6270DBB649BB56EE06F56CCCDB40A1EC774A921 7373F609D2DCF63105362A4556F3DBD03DDE005CE3839FE2A1D4AB8895082B9F7F2B031AEB44487E0CF23020A8DD4ACC7CC7BEBB55AADBB2411DE029662CF6B08EA69D97D0284FC0ABC6C02D9EA17A2EC33300DD5B6135DCE70B7EB3B37B7600C13EEC15A033E5D9437680A4ED29851BA3C7679EF8E3B3C3847F5DB74B653D2B796A087D1FA30D733682F393E31E05E06A241230AE9FCFE6E34219F57C272CA9C9F0E52A66744A2D8117F8718385612183BD0164E2B448069D9814704BA67F8565F27D0CA38A290AD162721E7FAD62DE3210BED393072644FE40B200B69A97D89184CE5F636AA949E7AFF39BAD0FB851E2BFAF32ADEA42CC37FAABAD1D972C6086C7F28F21A916E6F00CA3544C99FAC2B4DECD74B9D8A4E80CF7510C7A46B7CDD078DF9142713F03B30CE81D8861F5CD951E3A2B3A024E08ECE6918910FF2029B96CE9BC55CECD331DBD75EEE04BD985F27AF348FA79FA1EBF33942F29C52B10395E294F65FA2149B10458EE1C246CA6A0359442D610188B98C0E927FD6A6DF7 product-server-web/resources/license001.datBinary files differ
product-server-web/src/main/java/com/product/Application.java
@@ -37,7 +37,7 @@ SpringApplication.run(Application.class, args); boolean cacheFlat = DataPoolCacheImpl.getInstance().cacheALLData(); boolean codeFlat = DataPoolCacheImpl.getInstance().initCodeManager(); boolean serialFlat = DataPoolCacheImpl.getInstance().initSerialNumberManager(); // boolean serialFlat = DataPoolCacheImpl.getInstance().initSerialNumberManager(); RegistValidate.getInstance().registValidateParameter(); boolean connFlat = DataSourceManager.getInstance().initClientConnectionPool(); InitialLoad.runInitialization(); @@ -46,7 +46,7 @@ Global.setPropertyValue("jdk.home", System.getProperties().getProperty("java.home")); SpringMVCContextHolder.getSystemLogger().info("root.path:" + rootPath); SpringMVCContextHolder.getSystemLogger().info("jdk.home:" + System.getProperties().getProperty("java.home")); if (cacheFlat && codeFlat && serialFlat && connFlat) { if (cacheFlat && codeFlat && connFlat) { SpringMVCContextHolder.getSystemLogger().info("Successful System Startup ! "); } else { System.err.println("System startup failed, Please contact the administrator!"); product-server-web/src/main/resources/application-dev.properties
@@ -15,7 +15,7 @@ #\u662F\u5426\u542F\u7528\u63A5\u53E3\u7B7E\u540D\u8BA4\u8BC1 signature.isEnable=true #\u5728\u542F\u7528\u63A5\u53E3\u7B7E\u540D\u8BA4\u8BC1\u65F6\uFF0C\u6392\u9664\u6307\u5B9A\u63A5\u53E3\u65E0\u9700\u7B7E\u540D\u8BA4\u8BC1 signature.exclude.path=/api/rsa/getKey/v1,/api/token/refresh/v1,/api/mobile/network/check/v1,/api/system/config/info/v1,/api/fileManager/get-static-file,/api/mes/sync-data/v1,/static/**,/api/open-mes/update-mo-base/v1,/api/open-mes/get-history-data/v1,/api/open-mes/get-collect-log/v1 signature.exclude.path=/api/rsa/getKey/v1,/api/token/refresh/v1,/api/mobile/network/check/v1,/api/system/config/info/v1,/api/fileManager/get-static-file,/api/mes/sync-data/v1,/static/**,/api/open-mes/update-mo-base/v1,/api/open-mes/get-history-data/v1,/api/open-mes/get-collect-log/v1,/api/open-mes/split-table-data/v1 #\u7B7E\u540D\u8BA4\u8BC1Key signature.key=299cb5bb4c9040a29c58304c25001d72 #\u63A5\u53E3\u7B7E\u540D\u8BA4\u8BC1\u6709\u6548\u671F\uFF0C\u5355\u4F4D\u79D2,0\u8868\u793A\u4E0D\u9A8C\u8BC1 @@ -83,9 +83,9 @@ # \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 #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:3307/ch_kt_mes_apply?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useNewIO=true&useSSL=false&serverTimezone=Asia/Shanghai 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 product-server-web/src/main/resources/application-prod.properties
@@ -1,6 +1,8 @@ #======================================# #=============\u7CFB\u7EDF\u53C2\u6570 \u76F8\u5173\u914D\u7F6E==============# #======================================# #æ°æ®ç³»ç»åç§°ç¨äºéé åç§°å¼åªè½å å«è±æå "-" data.system.name=ch-kt #\u4E0A\u4F20\u6587\u4EF6\u8DEF\u5F84,\u7EDD\u5BF9 #\u542F\u7528\u65E5\u5FD7\u6253\u5370 logger.isEnable=true @@ -74,9 +76,9 @@ data.source.type=mysql data.source.driver=com.mysql.jdbc.Driver ##################local############################### data.source.url=jdbc:mysql://127.0.0.1:3306/lx_product_db?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useNewIO=true&useSSL=false&serverTimezone=Asia/Shanghai data.source.url=jdbc:mysql://10.13.1.39:3307/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=CHKTADMIN #-------------------------druid\u8FDE\u63A5\u6C60\u7684\u914D\u7F6E\u4FE1\u606F------------------------ # \u521D\u59CB\u5316\u5927\u5C0F\uFF0C\u6700\u5C0F\uFF0C\u6700\u5927 druid.datasource.initialSize=5 @@ -118,7 +120,7 @@ #========== Server settings ===========# #======================================# server.servlet.context-path=/lx server.port=9998 server.port=9999 #HTTP encoding spring.servlet.multipart.enabled=false spring.http.encoding.force=true @@ -215,7 +217,7 @@ source_domain=https://www.baidu.com default_domain=https://lx.blob.core.windows.net # \u7B49\u4E8Etrue \u5B9A\u65F6\u4EFB\u52A1\u624D\u80FD\u542F\u52A8 org.quartz.task.isEnable=true org.quartz.task.isEnable=false #============================================================== #Configure Main Scheduler Properties #============================================================== resources/LicenseKey.dat
¶Ô±ÈÐÂÎļþ @@ -0,0 +1 @@ 765F1622DAEEB425045CAFA1545A6874332D8A7EE7F3587DA9645C9B9265C9547E5B5060EE4F70F60D064222A282FC7777D0F53750264B4942D65D176E58795C83401C1BD80B932DA12493F898FD6F6CC37F50CA5F543603ED6B4229BEBCA889C64FA4BDA7F7226546A53583EE651D26A270CD31F2235B898FB4B1E7469EF82C78AFF86F18B075713B64C13EEC4536EB6DDC0EF9AB8280CAE3752F317099E9A7C1AF508F6AA26D0E807A023385E916B084777CD5EAC8FCA89AFD5F4749B6EC8C6977311EA003E212D6AE396B7A66D3AA3C3EA57D9AA6A74EFD564337B752D837969554716558C03FEFADCDF6A6B759A6E9D86332A78F0A7E30A899E51E8141B683A39ED426712403FCC1D1C24B86ED5BBCD7426DB0AB6CAD0D5A32817ADC01F1D713D92B4FCE4094B66994498B650698960EC7B93EDDD860EB136C7516105499B43CED2F5C45529B1EBD0A3CE54EEC97FC6651E8F907F626B250FC2626ADDF88394847CA62F84626BA753435178F973EABFD2F85D84D998099C97332F46E3551