From 4fbb9c22b723c1768feaaa539089451a1604020f Mon Sep 17 00:00:00 2001 From: "wenhua.zhou" Date: Wed, 29 Nov 2023 09:03:04 +0800 Subject: [PATCH] ok --- .idea/.gitignore | 3 + .idea/compiler.xml | 19 ++ .idea/encodings.xml | 8 + .idea/inspectionProfiles/Project_Default.xml | 6 + .idea/jarRepositories.xml | 20 ++ .idea/misc.xml | 13 + .idea/uiDesigner.xml | 124 +++++++ .idea/vcs.xml | 6 + pom.xml | 8 +- .../com/xydl/service/impl/EiaServiceImpl.java | 302 ++++++++++++------ src/main/java/com/xydl/util/FormatUtil.java | 11 +- target/classes/application.yml | 27 ++ target/classes/com/xydl/mapper/EaifMapper.xml | 62 ++++ target/classes/com/xydl/mapper/EiaMapper.xml | 69 ++++ target/classes/com/xydl/mapper/EpaMapper.xml | 86 +++++ target/classes/com/xydl/mapper/EtpMapper.xml | 69 ++++ target/classes/com/xydl/mapper/MicMapper.xml | 70 ++++ target/classes/com/xydl/mapper/MoaMapper.xml | 68 ++++ target/classes/com/xydl/mapper/PdMapper.xml | 69 ++++ .../com/xydl/mapper/RptTemperMapper.xml | 68 ++++ target/classes/com/xydl/mapper/ScurMapper.xml | 68 ++++ target/classes/com/xydl/mapper/Sf6Mapper.xml | 67 ++++ .../classes/com/xydl/mapper/Sf6envMapper.xml | 68 ++++ target/classes/templates/a.html | 12 + target/maven-archiver/pom.properties | 3 + target/mqtt-1.0-SNAPSHOT.jar.original | Bin 0 -> 26260 bytes 26 files changed, 1214 insertions(+), 112 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/uiDesigner.xml create mode 100644 .idea/vcs.xml create mode 100644 target/classes/application.yml create mode 100644 target/classes/com/xydl/mapper/EaifMapper.xml create mode 100644 target/classes/com/xydl/mapper/EiaMapper.xml create mode 100644 target/classes/com/xydl/mapper/EpaMapper.xml create mode 100644 target/classes/com/xydl/mapper/EtpMapper.xml create mode 100644 target/classes/com/xydl/mapper/MicMapper.xml create mode 100644 target/classes/com/xydl/mapper/MoaMapper.xml create mode 100644 target/classes/com/xydl/mapper/PdMapper.xml create mode 100644 target/classes/com/xydl/mapper/RptTemperMapper.xml create mode 100644 target/classes/com/xydl/mapper/ScurMapper.xml create mode 100644 target/classes/com/xydl/mapper/Sf6Mapper.xml create mode 100644 target/classes/com/xydl/mapper/Sf6envMapper.xml create mode 100644 target/classes/templates/a.html create mode 100644 target/maven-archiver/pom.properties create mode 100644 target/mqtt-1.0-SNAPSHOT.jar.original diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..359bb53 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..357b45b --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..63574ec --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..4b4cb0e --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..712ab9d --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..6f5230a --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 905408c..a386647 100644 --- a/pom.xml +++ b/pom.xml @@ -24,6 +24,12 @@ + + com.auth0 + java-jwt + 3.4.0 + + org.springframework.boot spring-boot-starter-web @@ -108,6 +114,6 @@ spring-boot-maven-plugin - + \ No newline at end of file diff --git a/src/main/java/com/xydl/service/impl/EiaServiceImpl.java b/src/main/java/com/xydl/service/impl/EiaServiceImpl.java index 4acda12..6ae87fa 100644 --- a/src/main/java/com/xydl/service/impl/EiaServiceImpl.java +++ b/src/main/java/com/xydl/service/impl/EiaServiceImpl.java @@ -146,7 +146,7 @@ public class EiaServiceImpl implements EiaService { List tableNames = new ArrayList<>(); try { conn = DataSourceUtils.getConnection(); - String sql = "select DISTINCT table_name from sync_tables_info"; + String sql = "select table_name from sync_tables_info"; pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); @@ -189,45 +189,69 @@ public class EiaServiceImpl implements EiaService { return fieldsMap; } - public String getLastRecordTimeSended(String tableName,String deviceId) { - Connection conn = null; - PreparedStatement pstmt = null; - ResultSet rs = null; - Timestamp timeStamp = null; - try { - conn = DataSourceUtils.getConnection(); - String sql = "select field_val2 from sync_records where table_name =? and devid_val=?"; - pstmt = conn.prepareStatement(sql); - pstmt.setString(1, tableName); - pstmt.setString(2, deviceId); - rs = pstmt.executeQuery(); - if(rs.next()){ - timeStamp = rs.getTimestamp("field_val2"); - - } - } catch (SQLException e) { - logger.error("execute sql exception:", e); - } finally { - DataSourceUtils.closeResource(rs, pstmt, conn); - } - - return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(timeStamp); - } +// public String getLastRecordTimeSended(String tableName,String deviceId) { +// Connection conn = null; +// PreparedStatement pstmt = null; +// ResultSet rs = null; +// Timestamp timeStamp = null; +// try { +// conn = DataSourceUtils.getConnection(); +// String sql = "select field_val2 from sync_records where table_name =? and devid_val=?"; +// pstmt = conn.prepareStatement(sql); +// pstmt.setString(1, tableName); +// pstmt.setString(2, deviceId); +// rs = pstmt.executeQuery(); +// if(rs.next()){ +// timeStamp = rs.getTimestamp("field_val2"); +// +// } +// } catch (SQLException e) { +// logger.error("execute sql exception:", e); +// } finally { +// DataSourceUtils.closeResource(rs, pstmt, conn); +// } +// +// return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(timeStamp); +// } + +// public List getDeviceID(String tableName) { +// Connection conn = null; +// PreparedStatement pstmt = null; +// ResultSet rs = null; +// String sqlExecuting = null ; +// List deviceIDs = new ArrayList<>(); +// try { +// conn = DataSourceUtils.getConnection(); +// String sql = "select distinct devid_val from sync_records where table_name =?"; +// pstmt = conn.prepareStatement(sql); +// pstmt.setString(1, tableName); +// rs = pstmt.executeQuery(); +// while(rs.next()){ +// deviceIDs.add(rs.getString("devid_val")); +// } +// } catch (SQLException e) { +// logger.error("execute sql exception:", e); +// } finally { +// DataSourceUtils.closeResource(rs, pstmt, conn); +// } +// +// return deviceIDs; +// } - public List getDeviceID(String tableName) { + public Map getDeviceID1(String tableName) { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; String sqlExecuting = null ; - List deviceIDs = new ArrayList<>(); + Map devIDTimeMap = new HashMap<>(); try { conn = DataSourceUtils.getConnection(); - String sql = "select distinct devid_val from sync_records where table_name =?"; + String sql = "select devid_val,field_val2 from sync_records where table_name =?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, tableName); rs = pstmt.executeQuery(); while(rs.next()){ - deviceIDs.add(rs.getString("devid_val")); + devIDTimeMap.put(rs.getString("devid_val"),rs.getString("field_val2")); } } catch (SQLException e) { logger.error("execute sql exception:", e); @@ -235,7 +259,7 @@ public class EiaServiceImpl implements EiaService { DataSourceUtils.closeResource(rs, pstmt, conn); } - return deviceIDs; + return devIDTimeMap; } public String getSQL(String tableName) { @@ -293,111 +317,177 @@ public class EiaServiceImpl implements EiaService { } +// @Scheduled(initialDelay=1000, fixedRate = 1000 * 3600) //通过@Scheduled声明该方法是计划任务,使用fixedRate属性每隔固定时间执行 +// public void reportRecord(){ +// List allTableNames = getAllTableName(); +// Map> tableFieldMap = new HashMap<>(); +// Map>>>> allTableData = new HashMap<>(); +// for(String tablenName : allTableNames){ +// //if用来测试 +// if(!"data_eaif_h".equals(tablenName)){ +// Map fieldMap = getFieldMap(tablenName); +// tableFieldMap.put(tablenName,fieldMap); +// +// String sqlExecuting = getSQL(tablenName); +// List deviceIDs = getDeviceID(tablenName); +// List>>> dataOfoneTable = new ArrayList<>(); +// for(String deviceID : deviceIDs){ +// Map>> deviceIDMap = new HashMap<>(); +// String timeStamp = getLastRecordTimeSended(tablenName,deviceID); +// List> dataOfoneDeviceID = getData(sqlExecuting,deviceID,timeStamp); +// +// deviceIDMap.put(deviceID,dataOfoneDeviceID); +// dataOfoneTable.add(deviceIDMap); +// } +// allTableData.put(tablenName,dataOfoneTable); +// } +// +// } +// System.out.println("旧数据: "+allTableData); +// System.out.println("==============================="); +// +// +// Map>>>> newAllData = new HashMap<>(); +// for(Map.Entry>>>> dataEntry : allTableData.entrySet()){ +// List>>> newRecords = transformFields(dataEntry.getKey(),tableFieldMap,dataEntry.getValue()); +// newAllData.put(dataEntry.getKey(),newRecords); +// } +// +// for(String tableName : newAllData.keySet()){ +// List>>> records = newAllData.get(tableName); +// String jsonStringData = FormatUtil.list2Json(records); +// if(MqttUtil.publish2MQTT(jsonStringData)){ +// updateLastRecordTimeSended(tableName,records); +// }else{ +// System.out.println("消息推送失败"); +// } +// } +// +// } + @Scheduled(initialDelay=1000, fixedRate = 1000 * 3600) //通过@Scheduled声明该方法是计划任务,使用fixedRate属性每隔固定时间执行 - public void reportRecord(){ + public void reportRecord1(){ List allTableNames = getAllTableName(); Map> tableFieldMap = new HashMap<>(); Map>>>> allTableData = new HashMap<>(); - for(String tablenName : allTableNames){ + for(String tableName : allTableNames){ //if用来测试 - if(!"data_eaif_h".equals(tablenName)){ - Map fieldMap = getFieldMap(tablenName); - tableFieldMap.put(tablenName,fieldMap); - - String sqlExecuting = getSQL(tablenName); - List deviceIDs = getDeviceID(tablenName); - List>>> dataOfoneTable = new ArrayList<>(); - for(String deviceID : deviceIDs){ - Map>> deviceIDMap = new HashMap<>(); - String timeStamp = getLastRecordTimeSended(tablenName,deviceID); - List> dataOfoneDeviceID = getData(sqlExecuting,deviceID,timeStamp); - deviceIDMap.put(deviceID,dataOfoneDeviceID); - dataOfoneTable.add(deviceIDMap); + if(!"data_eaif_h".equals(tableName)){ + Map fieldMap = getFieldMap(tableName); + String sqlExecuting = getSQL(tableName); + Map devIDLastTimeMap = getDeviceID1(tableName); + for(String deviceID : devIDLastTimeMap.keySet()){ + List> dataOfoneDeviceID = getData(sqlExecuting,deviceID, (String) devIDLastTimeMap.get(deviceID)); + + List> newDataOfoneDeviceID = transformList(fieldMap,dataOfoneDeviceID); + + String jsonStringData = FormatUtil.list2Json(newDataOfoneDeviceID); + if(MqttUtil.publish2MQTT(jsonStringData)){ + updateSyncRecordsTable(tableName,deviceID, (String) devIDLastTimeMap.get(deviceID)); + }else{ + System.out.println("消息推送失败"); + } } - allTableData.put(tablenName,dataOfoneTable); } - } - System.out.println("旧数据: "+allTableData); - System.out.println("==============================="); +// System.out.println("旧数据: "+allTableData); +// System.out.println("==============================="); - Map>>>> newAllData = new HashMap<>(); - for(Map.Entry>>>> dataEntry : allTableData.entrySet()){ - List>>> newRecords = transformFields(dataEntry.getKey(),tableFieldMap,dataEntry.getValue()); - newAllData.put(dataEntry.getKey(),newRecords); - } +// Map>>>> newAllData = new HashMap<>(); +// for(Map.Entry>>>> dataEntry : allTableData.entrySet()){ +// List>>> newRecords = transformFields(dataEntry.getKey(),tableFieldMap,dataEntry.getValue()); +// newAllData.put(dataEntry.getKey(),newRecords); +// } - for(String tableName : newAllData.keySet()){ - List>>> records = newAllData.get(tableName); - String jsonStringData = FormatUtil.list2Json(records); - if(MqttUtil.publish2MQTT(jsonStringData)){ - updateLastRecordTimeSended(tableName,records); - }else{ - System.out.println("消息推送失败"); - } - } +// for(String tableName : newAllData.keySet()){ +// List>>> records = newAllData.get(tableName); +// String jsonStringData = FormatUtil.list2Json(records); +// if(MqttUtil.publish2MQTT(jsonStringData)){ +// updateLastRecordTimeSended(tableName,records); +// }else{ +// System.out.println("消息推送失败"); +// } +// } } - //返回替换字段名的records - private List>>> transformFields(String recordTableName, Map> tableFieldMap, List>>> records) { - List>>> newRecords = new ArrayList<>(); - if(tableFieldMap.containsKey(recordTableName)){ - for(Map>> record : records ){ - newRecords.add(transformMore(tableFieldMap.get(recordTableName),record)); - } - } - return newRecords; - } - - private Map>> transformMore(Map fieldMap, Map>> deviceIDDataMap) { - Map>> newDeviceIDData = new HashMap<>(); - for(Map.Entry>> entry : deviceIDDataMap.entrySet()){ - newDeviceIDData.put(entry.getKey(),transformMoreAgain(fieldMap, entry.getValue())); - } - return newDeviceIDData; - } +// //返回替换字段名的records +// private List>>> transformFields(String recordTableName, Map> tableFieldMap, List>>> records) { +// List>>> newRecords = new ArrayList<>(); +// if(tableFieldMap.containsKey(recordTableName)){ +// for(Map>> record : records ){ +// newRecords.add(transformMore(tableFieldMap.get(recordTableName),record)); +// } +// } +// return newRecords; +// } +// +// private Map>> transformMore(Map fieldMap, Map>> deviceIDDataMap) { +// Map>> newDeviceIDData = new HashMap<>(); +// for(Map.Entry>> entry : deviceIDDataMap.entrySet()){ +// newDeviceIDData.put(entry.getKey(),transformMoreAgain(fieldMap, entry.getValue())); +// } +// return newDeviceIDData; +// } +// +// private List> transformMoreAgain(Map fieldMap, List> deviceIDData) { +// List> newDeviceIDData = new ArrayList<>(); +// for(Map fieldValueMap : deviceIDData){ +// newDeviceIDData.add(transformMoreAgain2(fieldMap,fieldValueMap)); +// } +// return newDeviceIDData; +// } +// +// private Map transformMoreAgain2(Map fieldMap, Map fieldValueMap) { +// Map newFieldValueMap = new HashMap<>(); +// for(String field : fieldMap.keySet()){ +// for(String columnName : fieldValueMap.keySet() ){ +// if(Objects.equals(field,columnName)){ +// newFieldValueMap.put(fieldMap.get(field),fieldValueMap.get(columnName) ); +// } +// } +// } +// return newFieldValueMap; +// } - private List> transformMoreAgain(Map fieldMap, List> deviceIDData) { + private List> transformList(Map fieldMap, List> deviceIDData) { List> newDeviceIDData = new ArrayList<>(); for(Map fieldValueMap : deviceIDData){ - newDeviceIDData.add(transformMoreAgain2(fieldMap,fieldValueMap)); + newDeviceIDData.add(transformOneRecord(fieldMap,fieldValueMap)); } return newDeviceIDData; } - private Map transformMoreAgain2(Map fieldMap, Map fieldValueMap) { + private Map transformOneRecord(Map fieldMap, Map fieldValueMap) { Map newFieldValueMap = new HashMap<>(); for(String field : fieldMap.keySet()){ - for(String columnName : fieldValueMap.keySet() ){ - if(Objects.equals(field,columnName)){ - newFieldValueMap.put(fieldMap.get(field),fieldValueMap.get(columnName) ); - } + if(fieldValueMap.containsKey(field)){ + newFieldValueMap.put(fieldMap.get(field),fieldValueMap.get(field) ); } } return newFieldValueMap; } - - public void updateLastRecordTimeSended(String tableName, List>>> records) { - List deviceIDs = getDeviceID(tableName); - for(String deviceID : deviceIDs){ - String lastRecordTimesJustSended = null; - for(Map>> recordMap : records){ - if(recordMap.get(deviceID) != null){ - List> deviceIDData = recordMap.get(deviceID); - lastRecordTimesJustSended = (String) deviceIDData.get(deviceIDData.size()-1).get("AcquisitionTime"); - System.out.println(tableName+"表"+deviceID+"最后一条记录时间: "+lastRecordTimesJustSended); - } - - } -// updateSyncRecordsTable(tableName, deviceID, lastRecordTimesJustSended); - - } - - } +// +// public void updateLastRecordTimeSended(String tableName, List>>> records) { +// List deviceIDs = getDeviceID(tableName); +// for(String deviceID : deviceIDs){ +// String lastRecordTimesJustSended = null; +// for(Map>> recordMap : records){ +// if(recordMap.get(deviceID) != null){ +// List> deviceIDData = recordMap.get(deviceID); +// lastRecordTimesJustSended = (String) deviceIDData.get(deviceIDData.size()-1).get("AcquisitionTime"); +// System.out.println(tableName+"表"+deviceID+"最后一条记录时间: "+lastRecordTimesJustSended); +// } +// +// } +//// updateSyncRecordsTable(tableName, deviceID, lastRecordTimesJustSended); +// +// } +// +// } public boolean updateSyncRecordsTable(String tableName, String deviceID, String time) { diff --git a/src/main/java/com/xydl/util/FormatUtil.java b/src/main/java/com/xydl/util/FormatUtil.java index bc0fdad..efb79b7 100644 --- a/src/main/java/com/xydl/util/FormatUtil.java +++ b/src/main/java/com/xydl/util/FormatUtil.java @@ -3,10 +3,7 @@ package com.xydl.util; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; public class FormatUtil { @@ -16,7 +13,7 @@ public class FormatUtil { assetList.add(new HashMap(){{ put("AssetCode","ironCore"); put("AttributeList",list); - put("Timestamp", 1606800979591089792L); + put("Timestamp", new Date().getTime()); }}); Map resultMap = new HashMap(){{ put("AssetList",assetList); @@ -30,5 +27,9 @@ public class FormatUtil { return jsonString; } + public static void main(String[] args) { + System.out.println(new Date().getTime()); + } + } diff --git a/target/classes/application.yml b/target/classes/application.yml new file mode 100644 index 0000000..f57d40d --- /dev/null +++ b/target/classes/application.yml @@ -0,0 +1,27 @@ +#端口号 +server: + port: 8088 + + #数据源配置 +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/cac?characterEncoding=utf-8&serverTimezone=UTC + username: root + password: root + #sql: + #init: + #指定脚本文件位置 + #schema-locations: classpath:user.sql + #初始化方式 + #mode: always + #设置数据源类型C + type: com.alibaba.druid.pool.DruidDataSource +mybatis: + configuration: + map-underscore-to-camel-case: true + #mybatis: + #指定mybatis配置文件的位置 + #config-location: classpath:mybatis/mybatis-config.xml + #指定映射文件的位置 + mapper-locations: classpath:mybatis/mapper/*.xml \ No newline at end of file diff --git a/target/classes/com/xydl/mapper/EaifMapper.xml b/target/classes/com/xydl/mapper/EaifMapper.xml new file mode 100644 index 0000000..6d2fe78 --- /dev/null +++ b/target/classes/com/xydl/mapper/EaifMapper.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + insert into employee values (#{id},#{lastName},#{email},#{gender},#{department.id}) + + + + update employee + + + last_name=#{employee.lastName}, + + + email=#{employee.email}, + + + gender=#{employee.gender}, + + + d_id=#{employee.department.id} + + + where id = #{id} + + + + delete from employee where id=#{id} + + \ No newline at end of file diff --git a/target/classes/com/xydl/mapper/EiaMapper.xml b/target/classes/com/xydl/mapper/EiaMapper.xml new file mode 100644 index 0000000..5372a41 --- /dev/null +++ b/target/classes/com/xydl/mapper/EiaMapper.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + insert into employee values (#{id},#{lastName},#{email},#{gender},#{department.id}) + + + + update employee + + + last_name=#{employee.lastName}, + + + email=#{employee.email}, + + + gender=#{employee.gender}, + + + d_id=#{employee.department.id} + + + where id = #{id} + + + + delete from employee where id=#{id} + + \ No newline at end of file diff --git a/target/classes/com/xydl/mapper/EpaMapper.xml b/target/classes/com/xydl/mapper/EpaMapper.xml new file mode 100644 index 0000000..c5d0e4f --- /dev/null +++ b/target/classes/com/xydl/mapper/EpaMapper.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + insert into employee values (#{id},#{lastName},#{email},#{gender},#{department.id}) + + + + update employee + + + last_name=#{employee.lastName}, + + + email=#{employee.email}, + + + gender=#{employee.gender}, + + + d_id=#{employee.department.id} + + + where id = #{id} + + + + delete from employee where id=#{id} + + \ No newline at end of file diff --git a/target/classes/com/xydl/mapper/EtpMapper.xml b/target/classes/com/xydl/mapper/EtpMapper.xml new file mode 100644 index 0000000..c80f768 --- /dev/null +++ b/target/classes/com/xydl/mapper/EtpMapper.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + insert into employee values (#{id},#{lastName},#{email},#{gender},#{department.id}) + + + + update employee + + + last_name=#{employee.lastName}, + + + email=#{employee.email}, + + + gender=#{employee.gender}, + + + d_id=#{employee.department.id} + + + where id = #{id} + + + + delete from employee where id=#{id} + + \ No newline at end of file diff --git a/target/classes/com/xydl/mapper/MicMapper.xml b/target/classes/com/xydl/mapper/MicMapper.xml new file mode 100644 index 0000000..6ad6a16 --- /dev/null +++ b/target/classes/com/xydl/mapper/MicMapper.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + insert into employee values (#{id},#{lastName},#{email},#{gender},#{department.id}) + + + + update employee + + + last_name=#{employee.lastName}, + + + email=#{employee.email}, + + + gender=#{employee.gender}, + + + d_id=#{employee.department.id} + + + where id = #{id} + + + + delete from employee where id=#{id} + + \ No newline at end of file diff --git a/target/classes/com/xydl/mapper/MoaMapper.xml b/target/classes/com/xydl/mapper/MoaMapper.xml new file mode 100644 index 0000000..e7d9436 --- /dev/null +++ b/target/classes/com/xydl/mapper/MoaMapper.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + insert into employee values (#{id},#{lastName},#{email},#{gender},#{department.id}) + + + + update employee + + + last_name=#{employee.lastName}, + + + email=#{employee.email}, + + + gender=#{employee.gender}, + + + d_id=#{employee.department.id} + + + where id = #{id} + + + + delete from employee where id=#{id} + + \ No newline at end of file diff --git a/target/classes/com/xydl/mapper/PdMapper.xml b/target/classes/com/xydl/mapper/PdMapper.xml new file mode 100644 index 0000000..e20de19 --- /dev/null +++ b/target/classes/com/xydl/mapper/PdMapper.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + insert into employee values (#{id},#{lastName},#{email},#{gender},#{department.id}) + + + + update employee + + + last_name=#{employee.lastName}, + + + email=#{employee.email}, + + + gender=#{employee.gender}, + + + d_id=#{employee.department.id} + + + where id = #{id} + + + + delete from employee where id=#{id} + + \ No newline at end of file diff --git a/target/classes/com/xydl/mapper/RptTemperMapper.xml b/target/classes/com/xydl/mapper/RptTemperMapper.xml new file mode 100644 index 0000000..35b33cb --- /dev/null +++ b/target/classes/com/xydl/mapper/RptTemperMapper.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + insert into employee values (#{id},#{lastName},#{email},#{gender},#{department.id}) + + + + update employee + + + last_name=#{employee.lastName}, + + + email=#{employee.email}, + + + gender=#{employee.gender}, + + + d_id=#{employee.department.id} + + + where id = #{id} + + + + delete from employee where id=#{id} + + \ No newline at end of file diff --git a/target/classes/com/xydl/mapper/ScurMapper.xml b/target/classes/com/xydl/mapper/ScurMapper.xml new file mode 100644 index 0000000..4ec60a1 --- /dev/null +++ b/target/classes/com/xydl/mapper/ScurMapper.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + insert into employee values (#{id},#{lastName},#{email},#{gender},#{department.id}) + + + + update employee + + + last_name=#{employee.lastName}, + + + email=#{employee.email}, + + + gender=#{employee.gender}, + + + d_id=#{employee.department.id} + + + where id = #{id} + + + + delete from employee where id=#{id} + + \ No newline at end of file diff --git a/target/classes/com/xydl/mapper/Sf6Mapper.xml b/target/classes/com/xydl/mapper/Sf6Mapper.xml new file mode 100644 index 0000000..c334cd5 --- /dev/null +++ b/target/classes/com/xydl/mapper/Sf6Mapper.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + insert into employee values (#{id},#{lastName},#{email},#{gender},#{department.id}) + + + + update employee + + + last_name=#{employee.lastName}, + + + email=#{employee.email}, + + + gender=#{employee.gender}, + + + d_id=#{employee.department.id} + + + where id = #{id} + + + + delete from employee where id=#{id} + + \ No newline at end of file diff --git a/target/classes/com/xydl/mapper/Sf6envMapper.xml b/target/classes/com/xydl/mapper/Sf6envMapper.xml new file mode 100644 index 0000000..35d414f --- /dev/null +++ b/target/classes/com/xydl/mapper/Sf6envMapper.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + insert into employee values (#{id},#{lastName},#{email},#{gender},#{department.id}) + + + + update employee + + + last_name=#{employee.lastName}, + + + email=#{employee.email}, + + + gender=#{employee.gender}, + + + d_id=#{employee.department.id} + + + where id = #{id} + + + + delete from employee where id=#{id} + + \ No newline at end of file diff --git a/target/classes/templates/a.html b/target/classes/templates/a.html new file mode 100644 index 0000000..ebd090b --- /dev/null +++ b/target/classes/templates/a.html @@ -0,0 +1,12 @@ + + + + + Title + + +

${list}

+

${name}

+ + + \ No newline at end of file diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties new file mode 100644 index 0000000..a94a1ca --- /dev/null +++ b/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=mqtt +groupId=com.xydl +version=1.0-SNAPSHOT diff --git a/target/mqtt-1.0-SNAPSHOT.jar.original b/target/mqtt-1.0-SNAPSHOT.jar.original new file mode 100644 index 0000000000000000000000000000000000000000..d18847174e456f0045249c4f3f265fc0cb561f71 GIT binary patch literal 26260 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

O~L@{K732l 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 z