ソースを参照

Merge branch 'master' of http://39.106.8.246:3003/persagy/dmp

lixing 4 年 前
コミット
d6950293a4
22 ファイル変更1323 行追加435 行削除
  1. 257 0
      IOT调试工具接口文档.md
  2. 218 207
      dmp-common/src/main/java/com/persagy/dmp/common/excel/ExcelUtils.java
  3. 0 15
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/ClassDefChangeRecordController.java
  4. 56 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/DownloadController.java
  5. 0 16
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/FuncidDefChangeRecordController.java
  6. 31 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/UploadController.java
  7. 13 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/model/DownloadModel.java
  8. 0 70
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/ClassDefChangeRecordService.java
  9. 128 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/DownloadService.java
  10. 33 125
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/FuncidDefChangeRecordService.java
  11. 5 1
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/RwdeditVersionService.java
  12. 329 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/UploadService.java
  13. 1 1
      dmp-rwd-edit/src/main/resources/application.yml
  14. 59 0
      iot-admin/pom.xml
  15. 36 0
      iot-admin/src/main/java/com/persagy/dmp/admin/IotAdminApp.java
  16. 81 0
      iot-admin/src/main/java/com/persagy/dmp/admin/controller/DmpGatewayController.java
  17. 5 0
      iot-admin/src/main/resources/application-aliyun-test.yml
  18. 2 0
      iot-admin/src/main/resources/application-dev.yml
  19. 5 0
      iot-admin/src/main/resources/application-test.yml
  20. 8 0
      iot-admin/src/main/resources/application.yml
  21. 55 0
      iot-admin/src/main/resources/logback-spring.xml
  22. 1 0
      pom.xml

+ 257 - 0
IOT调试工具接口文档.md

@@ -0,0 +1,257 @@
+说明:地址路径必传:groupCode,dmpServer
+
+### 查询项目基本信息
+
+POST /admin/dmp/org/project/query?groupCode=WD
+
+```JSON
+{
+    "criteria": {
+        "id": "Pj1101050029"
+    }
+}
+```
+
+返回结果
+
+```
+{
+    "result": "success",
+    "data": [
+        {
+            "id": "Pj1101050029",
+            "name": "东坝万达",
+            "groupCode": "WD",
+            "status": 1,
+            "createUser": "system",
+            "createTime": 1604043512000,
+            "updateUser": "systemId ",
+            "updateTime": 1604044787000,
+            "remark": "cec"
+        }
+    ],
+    "count": 1
+}
+```
+
+### 查询所有系统
+
+POST /admin/dmp/rwd/def/class?projectId=Pj1101050029&groupCode=WD
+
+```json
+{
+    "criteria": {
+        "parentCode": "system"
+    }
+}
+```
+
+返回结果
+
+```json
+{
+    "result": "success",
+    "data": [
+        {
+            "id": "2a5932de25ce404bb47a9c6698278a48",
+            "code": "OTXX",
+            "objType": "system",
+            "name": "其他系统",
+            "aliasCode": "OTXX",
+            "aliasName": "其他系统",
+            "type": "common",
+            "groupCode": "0",
+            "projectId": "0",
+            "majorCode": "OT",
+            "parentCode": "system"
+        }
+    ]
+}
+```
+
+### 查询设备类别
+
+POST /admin/dmp/rwd/def/class?projectId=Pj1101050029&groupCode=WD
+
+```JSON
+{
+    "criteria": {
+        "parentCode": "equipment",
+        "systemCode": "OTXX"
+    }
+}
+```
+
+返回结果
+
+```json
+{
+    "result": "success",
+    "data": [
+        {
+            "id": "116ebeeb6a5344aa99e994fdb7913837",
+            "code": "OTXXEW",
+            "objType": "equipment",
+            "name": "洗眼器",
+            "aliasCode": "OTXXEW",
+            "aliasName": "洗眼器",
+            "type": "common",
+            "groupCode": "0",
+            "projectId": "0",
+            "majorCode": "OT",
+            "systemCode": "OTXX",
+            "parentCode": "equipment"
+        }
+    ]
+}
+```
+
+### 查询所有设备信息点
+
+POST /admin/dmp/rwd/def/funcid?projectId=Pj1101050029&groupCode=WD
+
+说明:字段含义参考文档:http://39.102.54.110:9003/rwd/def_funcid.html
+
+```json
+{
+    "criteria": {
+        "classCode": "ACATAH"
+    }
+}
+```
+
+返回结果
+
+```json
+{
+    "result": "success",
+    "data": [
+        {
+            "id": "6ecfd1728752496494543a0a4cda9046",
+            "code": "returnAirCO2Set",
+            "origCode": "ReturnAirCO2Set",
+            "name": "回风CO2浓度设定",
+            "aliasCode": "ReturnAirCO2Set",
+            "aliasName": "回风CO2浓度设定",
+            "classCode": "ACATAH",
+            "category": "GRADATION",
+            "type": "common",
+            "groupCode": "0",
+            "projectId": "0",
+            "firstTag": "设定参数",
+            "secondTag": "设定值",
+            "priority": "S",
+            "unit": "ppm",
+            "dataType": "DOUBLE",
+            "isMultiple": false,
+            "isRegion": false,
+            "subFlag": false,
+            "weakPoint": false
+        }
+    ]
+}
+```
+
+### 查询设备数据
+
+POST /dmp/rwd/instance/object/query?projectId=Pj1101050029&groupCode=WD
+
+```JSON
+{
+    "criteria":{
+        "objType":"equipment",
+        "classCode":"ACATAH"
+        //TODO 模糊查询
+    }
+}
+```
+
+ 返回结果
+
+```json
+{
+    "result": "success",
+    "data": [
+        {
+            "id": "Eq1101050029022eb5d30eff4d33b42f246874650da8",
+            "classCode": "ACATAH",
+            "projectId": "Pj1101050029",
+            "grouping": 1,
+            "objType": "equipment",
+            "valid": 1,
+            "name": "设备-UYLQY",
+            "localId": "ATAH-20",
+            "localName": "吊顶式空气处理机组-F3公共通道-36",
+            "createTime": 1604215886000,
+            "createApp": "datautils",
+            "updateTime": 1607945874000,
+            "updateApp": "datautils",
+            "virtualInfoCodes": [
+                "supplyAirTempSet",
+                "returnAirCO2Set",
+                "manualAutoSet",
+                "manualAutoSet",
+                "manualAutoSet"
+            ],
+            "returnAirCO2Set": "ACATAH_0_returnAirCO2Set-903",
+            "chillWaterValveOpening": "ACATAH_0_chillWaterValveOpening-901",
+            "bimId": "Pj110105002906aa718c846811eaad6087efe914ab5cF3:2258189",
+            "bimLocation": "92898.14,142160.46,13300.0",
+            "runStatus": "ACATAH_0_runStatus-901",
+            "chillWaterOutTemp": "ACATAH_0_chillWaterOutTemp-901",
+            "inCloudStatus": "ACATAH_0_inCloudStatus-901",
+            "supplyAirTempSet": "ACATAH_0_supplyAirTempSet-903",
+            "manualAutoSet": "Eq1101050029022eb5d30eff4d33b42f246874650da8-206569120",
+            "manualAutoStatus": "ACATAH_0_manualAutoStatus-901",
+            "bimFamilyName": "ATAH-吊顶式空气处理机组",
+            "freshAirValveOpening": "ACATAH_0_freshAirValveOpening-901",
+            "frozenAlarm": "ACATAH_0_frozenAlarm-902",
+            "equipSwitchSet": "ACATAH_0_equipSwitchSet-903",
+            "supplyAirTemp": "ACATAH_0_supplyAirTemp-901",
+            "bimFamilySymbol": "AHU-D2",
+            "primFilterAlarm": "ACATAH_0_primFilterAlarm-902",
+            "returnAirTemp": "ACATAH_0_returnAirTemp-901",
+            "returnAirTempSet": "ACATAH_0_returnAirTempSet-903",
+            "returnAirValveOpening": "ACATAH_0_returnAirValveOpening-901",
+            "cADID": "ATAH-20:吊顶式空气处理机组-F3公共通道-36",
+            "returnAirRH": "ACATAH_0_returnAirRH-901",
+            "onlineStatus": "ACATAH_0_onlineStatus-901",
+            "faultStatus": "ACATAH_0_faultStatus-901"
+        }
+    ],
+    "count": 170
+}
+```
+
+### 查询实时数据
+
+POST /admin/dmp/rwd/iot/data/current?projectId=Pj1101050029&groupCode=WD
+
+```json
+[
+    {
+        "objectId": "Eq1101050029022eb5d30eff4d33b42f246874650da8",//设备id
+        "infoCode": "runStatus"//信息点编码
+    }
+]
+```
+
+返回结果
+
+```json
+{
+    "result": "success",
+    "data": [
+        {
+            "objectId": "Eq110108025902ea357a35d94cbab6471b7ac64fd2da",//设备id
+            "infoCode": "concentrate",//信息点
+            "infoValue": "9931-11301",//表号功能号
+            "time": "20210322175936",//时间
+            "data": 1016.0,//值
+            "meter": "9931",//表号
+            "function": "11301"//功能号
+        }
+    ]
+}
+```
+

+ 218 - 207
dmp-common/src/main/java/com/persagy/dmp/common/excel/ExcelUtils.java

@@ -2,6 +2,7 @@ package com.persagy.dmp.common.excel;
 
 
 import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddressList;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 
 import java.io.InputStream;
@@ -9,211 +10,221 @@ import java.util.*;
 
 public class ExcelUtils {
 
-	public static Object parseCell(Cell cell, String type) {
-		CellType cellType = cell.getCellTypeEnum();
-		if ("string".equalsIgnoreCase(type)) {
-			if (cellType == CellType.STRING) {
-				return cell.getStringCellValue();
-			} else if (cellType == CellType.NUMERIC) {
-				return cell.getNumericCellValue();
-			}
-		} else if ("integer".equalsIgnoreCase(type)) {
-			if (cellType == CellType.STRING) {
-				String stringCellValue = cell.getStringCellValue();
-				return stringCellValue == null ? null : Double.valueOf(stringCellValue).intValue();
-			} else if (cellType == CellType.NUMERIC) {
-				return Double.valueOf(cell.getNumericCellValue()).intValue();
-			}
-		} else if ("double".equalsIgnoreCase(type)) {
-			if (cellType == CellType.STRING) {
-				String stringCellValue = cell.getStringCellValue();
-				return stringCellValue == null ? null : Double.valueOf(stringCellValue);
-			} else if (cellType == CellType.NUMERIC) {
-				return cell.getNumericCellValue();
-			}
-		} else if ("date".equalsIgnoreCase(type)) {
-			if (cellType == CellType.NUMERIC) {
-				Date dateCellValue = cell.getDateCellValue();
-				return dateCellValue == null ? null : dateCellValue;
-			} else if (cellType == CellType.NUMERIC) {
-				return cell.getNumericCellValue();
-			}
-		}
-		return null;
-	}
-
-	public static List<List<Map<String, Object>>> read(InputStream inputStream, List<SheetReadInfo> infos) {
-		List<List<Map<String, Object>>> answer = new ArrayList<>(infos.size());
-
-		try {
-			Workbook workbook = new XSSFWorkbook(inputStream);
-
-			for (int infoIndex = 0; infoIndex < infos.size(); infoIndex++) {
-				List<Map<String, Object>> result = new ArrayList<>();
-				answer.add(result);
-
-				Sheet sheet = workbook.getSheetAt(infoIndex);
-				SheetReadInfo info = infos.get(infoIndex);
-				Integer startRow = info.getStartRow();
-				List<Integer> columnIndexs = info.getColumnIndexs();
-				List<String> keys = info.getColumnKeys();
-				List<String> types = info.getColumnTypes();
-
-				int lastRowNum = sheet.getLastRowNum();
-				for (int rowIndex = startRow; rowIndex < lastRowNum + 1; rowIndex++) {
-					Row row = sheet.getRow(rowIndex);
-					if (null == row) {
-						System.err.println("==========rowIndex:" + rowIndex);
-						continue;
-					}
-					Map<String, Object> data = new HashMap<>();
-					for (int columnDefIndex = 0; columnDefIndex < columnIndexs.size(); columnDefIndex++) {
-						Integer columnIndex = columnIndexs.get(columnDefIndex);
-						String key = keys.get(columnDefIndex);
-						String type = types.get(columnDefIndex);
-						Cell cell = row.getCell(columnIndex);
-						if (null == cell) {
-							System.err.println("==========columnIndex:" + columnIndex);
-							continue;
-						}
-						Object value = parseCell(cell, type);
-						if (null != value) {
-							data.put(key, value);
-						}
-					}
-					if (0 < data.size()) {
-						data.put(info.getSeqKey(), rowIndex);
-						result.add(data);
-					}
-				}
-			}
-			workbook.close();
-		} catch (Exception e) {
-			e.printStackTrace();
-		} finally {
-		}
-		return answer;
-
-	}
-
-	public static List<Map<String, Object>> read(InputStream inputStream, SheetReadInfo info) {
-		List<List<Map<String, Object>>> read = read(inputStream, Arrays.asList(info));
-		return read.get(0);
-	}
-
-	public static Workbook createExcel(List<SheetWriteInfo> sheets) {
-		Workbook wb = new XSSFWorkbook();
-		CreationHelper createHelper = wb.getCreationHelper();  //创建帮助工具
-		for (SheetWriteInfo sheetInfo : sheets) {
-			Sheet sheet = wb.createSheet(sheetInfo.getSheetName());
-			List<String> headList = sheetInfo.getHeadList();
-			List<HorizontalAlignment> aligns = sheetInfo.getHorizontalAlignments();
-			List<String> props = sheetInfo.getProps();
-			List<String> types = sheetInfo.getDataTypes();
-			List<Integer> widths = sheetInfo.getWidths();
-			List data = sheetInfo.getData();
-			ExcelDataHandler handler = sheetInfo.getDataHandler();
-			setColumnWidth(sheet, widths);
-			CellStyle headerStyle = getHeaderStyle(wb);
-			Row headRow = sheet.createRow(0); //第一行为头
-			int columnSize = headList.size();
-			for (int i = 0; i < columnSize; i++) {  //遍历表头数据
-				Cell cell = headRow.createCell(i);  //创建单元格
-				cell.setCellValue(createHelper.createRichTextString(headList.get(i)));  //设置值
-				cell.setCellStyle(headerStyle);  //设置样式
-			}
-
-			List<CellStyle> dataStyles = new ArrayList<>(columnSize);
-			for (int i = 0; i < aligns.size(); i++) {
-				dataStyles.add(getDataStyle(wb, aligns.get(i)));
-			}
-
-			int rowIndex = 1;
-			if (data != null) {
-				for (Object datum : data) {
-					Row row = sheet.createRow(rowIndex++); //第一行为头
-					for (int j = 0; j < columnSize; j++) {  //编译每一行
-						Cell cell = row.createCell(j);
-						cell.setCellStyle(dataStyles.get(j));
-						String prop = props.get(j);
-						String type = types.get(j);
-						Object o = handler.get(datum, prop);
-						if (o != null) {
-							if (type.equalsIgnoreCase("string")) {
-								if (o == null) {
-									cell.setCellValue("");
-								} else {
-									String str = o.toString();
-									cell.setCellValue(str.length() > 3000 ? str.substring(0, 3000) : str);
-								}
-							} else if (type.equalsIgnoreCase("byte")) {
-								cell.setCellValue((byte) o);
-							} else if (type.equalsIgnoreCase("short")) {
-								cell.setCellValue((short) o);
-							} else if (type.equalsIgnoreCase("int")) {
-								cell.setCellValue((int) o);
-							} else if (type.equalsIgnoreCase("long")) {
-								cell.setCellValue((long) o);
-							} else if (type.equalsIgnoreCase("double")) {
-								cell.setCellValue((Double) o);
-							} else if (type.equalsIgnoreCase("date")) {
-								CellStyle cellStyle = dataStyles.get(j);
-								DataFormat df = wb.createDataFormat();
-								cellStyle.setDataFormat(df.getFormat("yyyy/m/d"));
-								cell.setCellValue((Date) o);
-								cell.setCellStyle(cellStyle);
-							} else {
-								cell.setCellValue(o.toString());
-							}
-						}
-					}
-				}
-			}
-		}
-		return wb;
-	}
-
-	private static void setColumnWidth(Sheet sheet, List<Integer> widths) {
-		for (int i = 0; i < widths.size(); i++) {
-			sheet.setColumnWidth(i, widths.get(i) * 256);
-		}
-	}
-
-	private static CellStyle getHeaderStyle(Workbook wb) {
-		//设置字体
-		Font headFont = wb.createFont();
-		headFont.setFontHeightInPoints((short) 14);
-		headFont.setFontName("Courier New");
-		headFont.setItalic(false);
-		headFont.setStrikeout(false);
-		//设置头部单元格样式
-		CellStyle headStyle = wb.createCellStyle();
-		headStyle.setBorderBottom(BorderStyle.THIN);  //设置单元格线条
-		headStyle.setBorderLeft(BorderStyle.THIN);
-		headStyle.setBorderRight(BorderStyle.THIN);
-		headStyle.setBorderTop(BorderStyle.THIN);
-		headStyle.setAlignment(HorizontalAlignment.CENTER);    //设置水平对齐方式
-		headStyle.setVerticalAlignment(VerticalAlignment.CENTER);  //设置垂直对齐方式
-		headStyle.setFont(headFont);  //设置字体
-		return headStyle;
-	}
-
-	private static CellStyle getDataStyle(Workbook wb, HorizontalAlignment horizontalAlignment) {
-		//设置字体
-		Font headFont = wb.createFont();
-		headFont.setFontHeightInPoints((short) 14);
-		headFont.setFontName("Courier New");
-		headFont.setItalic(false);
-		headFont.setStrikeout(false);
-		//设置头部单元格样式
-		CellStyle dataStyle = wb.createCellStyle();
-		dataStyle.setBorderBottom(BorderStyle.THIN);  //设置单元格线条
-		dataStyle.setBorderLeft(BorderStyle.THIN);
-		dataStyle.setBorderRight(BorderStyle.THIN);
-		dataStyle.setBorderTop(BorderStyle.THIN);
-		dataStyle.setAlignment(horizontalAlignment);    //设置水平对齐方式
-		dataStyle.setVerticalAlignment(VerticalAlignment.CENTER);  //设置垂直对齐方式
-		dataStyle.setFont(headFont);  //设置字体
-		return dataStyle;
-	}
+    public static Object parseCell(Cell cell, String type) {
+        CellType cellType = cell.getCellTypeEnum();
+        if ("string".equalsIgnoreCase(type)) {
+            if (cellType == CellType.STRING) {
+                return cell.getStringCellValue();
+            } else if (cellType == CellType.NUMERIC) {
+                return cell.getNumericCellValue();
+            }
+        } else if ("integer".equalsIgnoreCase(type)) {
+            if (cellType == CellType.STRING) {
+                String stringCellValue = cell.getStringCellValue();
+                return stringCellValue == null ? null : Double.valueOf(stringCellValue).intValue();
+            } else if (cellType == CellType.NUMERIC) {
+                return Double.valueOf(cell.getNumericCellValue()).intValue();
+            }
+        } else if ("double".equalsIgnoreCase(type)) {
+            if (cellType == CellType.STRING) {
+                String stringCellValue = cell.getStringCellValue();
+                return stringCellValue == null ? null : Double.valueOf(stringCellValue);
+            } else if (cellType == CellType.NUMERIC) {
+                return cell.getNumericCellValue();
+            }
+        } else if ("date".equalsIgnoreCase(type)) {
+            if (cellType == CellType.NUMERIC) {
+                Date dateCellValue = cell.getDateCellValue();
+                return dateCellValue == null ? null : dateCellValue;
+            } else if (cellType == CellType.NUMERIC) {
+                return cell.getNumericCellValue();
+            }
+        }
+        return null;
+    }
+
+    public static List<List<Map<String, Object>>> read(InputStream inputStream, List<SheetReadInfo> infos) {
+        List<List<Map<String, Object>>> answer = new ArrayList<>(infos.size());
+
+        try {
+            Workbook workbook = new XSSFWorkbook(inputStream);
+
+            for (int infoIndex = 0; infoIndex < infos.size(); infoIndex++) {
+                List<Map<String, Object>> result = new ArrayList<>();
+                answer.add(result);
+
+                Sheet sheet = workbook.getSheetAt(infoIndex);
+                SheetReadInfo info = infos.get(infoIndex);
+                Integer startRow = info.getStartRow();
+                List<Integer> columnIndexs = info.getColumnIndexs();
+                List<String> keys = info.getColumnKeys();
+                List<String> types = info.getColumnTypes();
+
+                int lastRowNum = sheet.getLastRowNum();
+                for (int rowIndex = startRow; rowIndex < lastRowNum + 1; rowIndex++) {
+                    Row row = sheet.getRow(rowIndex);
+                    if (null == row) {
+                        System.err.println("==========rowIndex:" + rowIndex);
+                        continue;
+                    }
+                    Map<String, Object> data = new HashMap<>();
+                    for (int columnDefIndex = 0; columnDefIndex < columnIndexs.size(); columnDefIndex++) {
+                        Integer columnIndex = columnIndexs.get(columnDefIndex);
+                        String key = keys.get(columnDefIndex);
+                        String type = types.get(columnDefIndex);
+                        Cell cell = row.getCell(columnIndex);
+                        if (null == cell) {
+                            System.err.println("==========columnIndex:" + columnIndex);
+                            continue;
+                        }
+                        Object value = parseCell(cell, type);
+                        if (null != value) {
+                            data.put(key, value);
+                        }
+                    }
+                    if (0 < data.size()) {
+                        data.put(info.getSeqKey(), rowIndex);
+                        result.add(data);
+                    }
+                }
+            }
+            workbook.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+        }
+        return answer;
+
+    }
+
+    public static List<Map<String, Object>> read(InputStream inputStream, SheetReadInfo info) {
+        List<List<Map<String, Object>>> read = read(inputStream, Arrays.asList(info));
+        return read.get(0);
+    }
+
+    public static Workbook createExcel(List<SheetWriteInfo> sheets) {
+        Workbook wb = new XSSFWorkbook();
+        CreationHelper createHelper = wb.getCreationHelper();  //创建帮助工具
+        for (SheetWriteInfo sheetInfo : sheets) {
+            Sheet sheet = wb.createSheet(sheetInfo.getSheetName());
+            List<String> headList = sheetInfo.getHeadList();
+            List<HorizontalAlignment> aligns = sheetInfo.getHorizontalAlignments();
+            List<String> props = sheetInfo.getProps();
+            List<String> types = sheetInfo.getDataTypes();
+            List<Integer> widths = sheetInfo.getWidths();
+            List data = sheetInfo.getData();
+            ExcelDataHandler handler = sheetInfo.getDataHandler();
+            setColumnWidth(sheet, widths);
+            CellStyle headerStyle = getHeaderStyle(wb);
+            Row headRow = sheet.createRow(0); //第一行为头
+            int columnSize = headList.size();
+            for (int i = 0; i < columnSize; i++) {  //遍历表头数据
+                Cell cell = headRow.createCell(i);  //创建单元格
+                cell.setCellValue(createHelper.createRichTextString(headList.get(i)));  //设置值
+                cell.setCellStyle(headerStyle);  //设置样式
+            }
+
+            List<CellStyle> dataStyles = new ArrayList<>(columnSize);
+            for (int i = 0; i < aligns.size(); i++) {
+                dataStyles.add(getDataStyle(wb, aligns.get(i)));
+            }
+
+            int rowIndex = 1;
+            if (data != null) {
+                for (Object datum : data) {
+                    Row row = sheet.createRow(rowIndex++); //第一行为头
+                    for (int j = 0; j < columnSize; j++) {  //编译每一行
+                        Cell cell = row.createCell(j);
+                        cell.setCellStyle(dataStyles.get(j));
+                        String prop = props.get(j);
+                        String type = types.get(j);
+                        Object o = handler.get(datum, prop);
+                        if (o != null) {
+                            if (type.equalsIgnoreCase("string")) {
+                                if (o == null) {
+                                    cell.setCellValue("");
+                                } else {
+                                    String str = o.toString();
+                                    cell.setCellValue(str.length() > 3000 ? str.substring(0, 3000) : str);
+                                }
+                            } else if (type.equalsIgnoreCase("byte")) {
+                                cell.setCellValue((byte) o);
+                            } else if (type.equalsIgnoreCase("short")) {
+                                cell.setCellValue((short) o);
+                            } else if (type.equalsIgnoreCase("int")) {
+                                cell.setCellValue((int) o);
+                            } else if (type.equalsIgnoreCase("long")) {
+                                cell.setCellValue((long) o);
+                            } else if (type.equalsIgnoreCase("double")) {
+                                cell.setCellValue((Double) o);
+                            } else if (type.equalsIgnoreCase("date")) {
+                                CellStyle cellStyle = dataStyles.get(j);
+                                DataFormat df = wb.createDataFormat();
+                                cellStyle.setDataFormat(df.getFormat("yyyy/m/d"));
+                                cell.setCellValue((Date) o);
+                                cell.setCellStyle(cellStyle);
+                            } else if (type.equalsIgnoreCase("array")) {
+                                String[] array = (String[]) o;
+                                DataValidationHelper helper = sheet.getDataValidationHelper();
+                                DataValidationConstraint constraint = helper.createExplicitListConstraint(array);
+                                constraint.setExplicitListValues(array);
+                                CellRangeAddressList regions = new CellRangeAddressList(1, cell.getRowIndex(), cell.getColumnIndex(), cell.getColumnIndex());
+                                DataValidation dataValidation = helper.createValidation(constraint, regions);
+                                dataValidation.createErrorBox("Error", "Error");
+                                dataValidation.createPromptBox("", null);
+                                sheet.addValidationData(dataValidation);
+                            } else {
+                                cell.setCellValue(o.toString());
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        return wb;
+    }
+
+    private static void setColumnWidth(Sheet sheet, List<Integer> widths) {
+        for (int i = 0; i < widths.size(); i++) {
+            sheet.setColumnWidth(i, widths.get(i) * 256);
+        }
+    }
+
+    private static CellStyle getHeaderStyle(Workbook wb) {
+        //设置字体
+        Font headFont = wb.createFont();
+        headFont.setFontHeightInPoints((short) 14);
+        headFont.setFontName("Courier New");
+        headFont.setItalic(false);
+        headFont.setStrikeout(false);
+        //设置头部单元格样式
+        CellStyle headStyle = wb.createCellStyle();
+        headStyle.setBorderBottom(BorderStyle.THIN);  //设置单元格线条
+        headStyle.setBorderLeft(BorderStyle.THIN);
+        headStyle.setBorderRight(BorderStyle.THIN);
+        headStyle.setBorderTop(BorderStyle.THIN);
+        headStyle.setAlignment(HorizontalAlignment.CENTER);    //设置水平对齐方式
+        headStyle.setVerticalAlignment(VerticalAlignment.CENTER);  //设置垂直对齐方式
+        headStyle.setFont(headFont);  //设置字体
+        return headStyle;
+    }
+
+    private static CellStyle getDataStyle(Workbook wb, HorizontalAlignment horizontalAlignment) {
+        //设置字体
+        Font headFont = wb.createFont();
+        headFont.setFontHeightInPoints((short) 14);
+        headFont.setFontName("Courier New");
+        headFont.setItalic(false);
+        headFont.setStrikeout(false);
+        //设置头部单元格样式
+        CellStyle dataStyle = wb.createCellStyle();
+        dataStyle.setBorderBottom(BorderStyle.THIN);  //设置单元格线条
+        dataStyle.setBorderLeft(BorderStyle.THIN);
+        dataStyle.setBorderRight(BorderStyle.THIN);
+        dataStyle.setBorderTop(BorderStyle.THIN);
+        dataStyle.setAlignment(horizontalAlignment);    //设置水平对齐方式
+        dataStyle.setVerticalAlignment(VerticalAlignment.CENTER);  //设置垂直对齐方式
+        dataStyle.setFont(headFont);  //设置字体
+        return dataStyle;
+    }
 }

+ 0 - 15
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/ClassDefChangeRecordController.java

@@ -43,19 +43,4 @@ public class ClassDefChangeRecordController {
     public MapResponse addVersion(@RequestParam String version, @RequestBody List<Integer> idList) {
         return service.addVersion(version, idList);
     }
-
-    @PostMapping("/uploadChangeRecord")
-    public MapResponse uploadChangeRecord(@RequestParam("file") MultipartFile file) {
-        List<ClassDefChangeRecord> classDefChangeRecordList = null;
-        try {
-            classDefChangeRecordList = service.CompareDataExcelRead(file);
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        for (ClassDefChangeRecord classDefChangeRecord : classDefChangeRecordList) {
-            service.create(classDefChangeRecord);
-        }
-        return new MapResponse();
-    }
-
 }

+ 56 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/DownloadController.java

@@ -0,0 +1,56 @@
+package com.persagy.dmp.rwd.edit.controller;
+
+import com.persagy.dmp.rwd.edit.model.DownloadModel;
+import com.persagy.dmp.rwd.edit.service.DownloadService;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+
+@RestController
+@RequestMapping("/rwdedit/common")
+public class DownloadController {
+
+    @Autowired
+    private DownloadService downloadService;
+
+    @GetMapping("/download")
+    private void download(@RequestParam String type, HttpServletResponse response) {
+        DownloadModel result = downloadService.download(type);
+        if ("workbook".equalsIgnoreCase(result.getType())) {
+            String fileName = result.getName();
+            downloadWorkbook(response, fileName, result.getWorkbook());
+        }
+    }
+
+    private void downloadWorkbook(HttpServletResponse resp, String fileName, Workbook workbook) {
+        OutputStream out = null;
+        try {
+            resp.reset();// 清空输出流
+            String resultFileName = URLEncoder.encode(fileName, "UTF-8");
+            resp.setCharacterEncoding("UTF-8");
+            resp.setHeader("Content-disposition", "attachment; filename=" + resultFileName);// 设定输出文件头
+            resp.setContentType("application/msexcel");// 定义输出类型
+            out = resp.getOutputStream();
+            workbook.write(out);
+            out.flush();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if (out != null) {
+                    out.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}

+ 0 - 16
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/FuncidDefChangeRecordController.java

@@ -7,9 +7,7 @@ import com.persagy.dmp.rwd.edit.entity.FuncidDefChangeRecord;
 import com.persagy.dmp.rwd.edit.service.FuncidDefChangeRecordService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
 
-import java.io.IOException;
 import java.util.List;
 
 @RestController
@@ -43,18 +41,4 @@ public class FuncidDefChangeRecordController {
     public MapResponse addVersion(@RequestParam String version, @RequestBody List<Integer> idList) {
         return service.addVersion(version, idList);
     }
-
-    @PostMapping("/uploadChangeRecord")
-    public MapResponse uploadChangeRecord(@RequestParam("file") MultipartFile file) {
-        List<FuncidDefChangeRecord> funcidDefChangeRecordList = null;
-        try {
-            funcidDefChangeRecordList = service.CompareDataExcelRead(file);
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        for (FuncidDefChangeRecord funcidDefChangeRecord : funcidDefChangeRecordList) {
-            service.create(funcidDefChangeRecord);
-        }
-        return new MapResponse();
-    }
 }

+ 31 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/UploadController.java

@@ -0,0 +1,31 @@
+package com.persagy.dmp.rwd.edit.controller;
+
+import com.persagy.common.web.MapResponse;
+import com.persagy.dmp.rwd.edit.service.UploadService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+@Slf4j
+@RestController
+@RequestMapping("/rwdedit/common")
+public class UploadController {
+
+    @Autowired
+    private UploadService uploadService;
+
+    @PostMapping("/upload")
+    public MapResponse upload(@RequestParam String type, @RequestParam("file") MultipartFile file) {
+        MapResponse response = new MapResponse();
+        try {
+            return uploadService.upload(type, file);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return response;
+    }
+}

+ 13 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/model/DownloadModel.java

@@ -0,0 +1,13 @@
+package com.persagy.dmp.rwd.edit.model;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.poi.ss.usermodel.Workbook;
+
+@Getter
+@Setter
+public class DownloadModel {
+    private String type;
+    private String name;
+    private Workbook workbook;
+}

+ 0 - 70
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/ClassDefChangeRecordService.java

@@ -6,8 +6,6 @@ import com.persagy.common.criteria.JacksonCriteria;
 import com.persagy.common.web.ListResponse;
 import com.persagy.common.web.MapResponse;
 import com.persagy.common.web.PagedResponse;
-import com.persagy.dmp.common.excel.ExcelUtils;
-import com.persagy.dmp.common.excel.SheetReadInfo;
 import com.persagy.dmp.rwd.edit.config.web.UserUtils;
 import com.persagy.dmp.rwd.edit.entity.ClassDef;
 import com.persagy.dmp.rwd.edit.entity.ClassDefChangeRecord;
@@ -16,18 +14,13 @@ import com.persagy.dmp.rwd.edit.enumeration.EnumOperationType;
 import com.persagy.dmp.rwd.edit.enumeration.EnumVersionState;
 import com.persagy.dmp.rwd.edit.repository.ClassDefChangeRecordRepository;
 import com.persagy.dmp.rwd.edit.repository.ClassDefRepository;
-import com.persagy.dmp.rwd.enums.ObjType;
 import com.persagy.dmp.rwd.model.ClassDefModel;
 import com.querydsl.core.types.dsl.BooleanExpression;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections.MapUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.web.multipart.MultipartFile;
 
 import javax.transaction.Transactional;
-import java.io.IOException;
-import java.io.InputStream;
 import java.util.*;
 
 @Slf4j
@@ -358,68 +351,5 @@ public class ClassDefChangeRecordService {
         List<ClassDefModel> data = query.getData();
         return data;
     }
-
-    public List<ClassDefChangeRecord> CompareDataExcelRead(MultipartFile file) throws IOException {
-        SheetReadInfo info = new SheetReadInfo();
-        info.setStartRow(1);
-        info.add(0, "code", "string");
-        info.add(1, "objType", "string");
-        info.add(2, "name", "string");
-        info.add(3, "aliasCode", "string");
-        info.add(4, "aliasName", "string");
-        info.add(5, "majorCode", "string");
-        info.add(6, "systemCode", "string");
-        info.add(7, "equipmentCode", "string");
-        info.add(8, "parentCode", "string");
-        info.add(9, "operationType", "string");
-
-        InputStream inputStream = file.getInputStream();
-        List<Map<String, Object>> result = ExcelUtils.read(inputStream, info);
-
-        List<ClassDefChangeRecord> classDefChangeRecordList = new ArrayList<>();
-        for (Map<String, Object> map : result) {
-            String code = MapUtils.getString(map, "code");
-            String objType = MapUtils.getString(map, "objType");
-            String name = MapUtils.getString(map, "name");
-            String aliasCode = MapUtils.getString(map, "aliasCode");
-            String aliasName = MapUtils.getString(map, "aliasName");
-            String majorCode = MapUtils.getString(map, "majorCode");
-            String systemCode = MapUtils.getString(map, "systemCode");
-            String equipmentCode = MapUtils.getString(map, "equipmentCode");
-            String parentCode = MapUtils.getString(map, "parentCode");
-            String operationType = MapUtils.getString(map, "operationType");
-            if (code == null) {
-                return null;
-            }
-            if (objType == null) {
-                return null;
-            }
-            if (operationType == null) {
-                return null;
-            }
-
-            ClassDefChangeRecord classDefChangeRecord = new ClassDefChangeRecord();
-            classDefChangeRecord.setCode(code);
-            classDefChangeRecord.setName(name);
-            classDefChangeRecord.setObjType(ObjType.valueOf(objType));
-            classDefChangeRecord.setAliasCode(aliasCode);
-            classDefChangeRecord.setAliasName(aliasName);
-            classDefChangeRecord.setMajorCode(majorCode);
-            classDefChangeRecord.setSystemCode(systemCode);
-            classDefChangeRecord.setEquipmentCode(equipmentCode);
-            classDefChangeRecord.setParentCode(parentCode);
-            classDefChangeRecord.setOperationType(EnumOperationType.valueOf(operationType));
-
-            classDefChangeRecord.setType("common");
-            classDefChangeRecord.setOperationUser(UserUtils.currentUserId() + "");
-            classDefChangeRecord.setOperationTime(new Date());
-            classDefChangeRecord.setValid(true);
-            classDefChangeRecord.setState(EnumVersionState.INIT);
-            classDefChangeRecord.setGroupCode("0");
-            classDefChangeRecord.setProjectId("0");
-            classDefChangeRecordList.add(classDefChangeRecord);
-        }
-        return classDefChangeRecordList;
-    }
 }
 

+ 128 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/DownloadService.java

@@ -0,0 +1,128 @@
+package com.persagy.dmp.rwd.edit.service;
+
+import com.persagy.dmp.common.excel.ExcelUtils;
+import com.persagy.dmp.common.excel.SheetWriteInfo;
+import com.persagy.dmp.rwd.edit.entity.ClassDefChangeRecord;
+import com.persagy.dmp.rwd.edit.entity.FuncidDefChangeRecord;
+import com.persagy.dmp.rwd.edit.model.DownloadModel;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+@Slf4j
+@Service
+public class DownloadService {
+
+    public DownloadModel download(String type) {
+        if ("changeDataTemplate".equals(type)) {
+            return downloadChangeDataTemplate();
+        }
+        return new DownloadModel();
+    }
+
+    private DownloadModel downloadChangeDataTemplate() {
+        DownloadModel result = new DownloadModel();
+        result.setType("workbook");
+        result.setName("批量上传变更记录.xlsx");
+
+        List<SheetWriteInfo> list = new ArrayList<>(2);
+        list.add(calendarReportPart1());
+        list.add(calendarReportPart2());
+        list.add(calendarReportPart3());
+        Workbook workbook = ExcelUtils.createExcel(list);
+        result.setWorkbook(workbook);
+        return result;
+    }
+
+    public SheetWriteInfo calendarReportPart1() {
+        SheetWriteInfo<String> info = new SheetWriteInfo<>();
+        List<String> list = new ArrayList<>();
+        list.add("1.不可合并单元格");
+        list.add("2.sheet1:类型变更");
+        list.add("3.sheet2:信息点变更");
+        list.add("4.sheet2-'字典选择'列:枚举类型用空格隔开;区间‘()’表示不包含‘[]’表示包含,例如:(10,20] [50,70],多个区间使用空格隔开");
+        list.add("5.sheet2-'信息点分类'列和'信息点类型'列:参考:http://39.102.54.110:9003/rwd/def_funcid.html 文档");
+        list.add("6.文件格式为:xlsx");
+        info.setData(list);
+        info.setSheetName("文件格式要求");
+        info.addColumn("文件格式要求", "type", "string", 120, HorizontalAlignment.LEFT);
+        info.setDataHandler((data, prop) -> {
+            return data;
+        });
+        return info;
+    }
+
+    public SheetWriteInfo calendarReportPart2() {
+        SheetWriteInfo<ClassDefChangeRecord> info = new SheetWriteInfo<>();
+        info.setData(Arrays.asList(new ClassDefChangeRecord()));
+        info.setSheetName("类型变更");
+        info.addColumn("专业编码", "name", "string", 10, HorizontalAlignment.CENTER);
+        info.addColumn("专业英文名称", "name", "string", 20, HorizontalAlignment.CENTER);
+        info.addColumn("专业名称", "name", "string", 10, HorizontalAlignment.CENTER);
+        info.addColumn("系统类编码", "name", "string", 20, HorizontalAlignment.CENTER);
+        info.addColumn("系统别编码", "name", "string", 20, HorizontalAlignment.CENTER);
+        info.addColumn("系统类英文名称", "name", "string", 20, HorizontalAlignment.CENTER);
+        info.addColumn("系统类名称", "name", "string", 20, HorizontalAlignment.CENTER);
+        info.addColumn("设备类编码", "name", "string", 20, HorizontalAlignment.CENTER);
+        info.addColumn("设备类别编码", "name", "string", 20, HorizontalAlignment.CENTER);
+        info.addColumn("设备类英文名称", "name", "string", 20, HorizontalAlignment.CENTER);
+        info.addColumn("设备类名称", "name", "string", 20, HorizontalAlignment.CENTER);
+        info.addColumn("部件类编码", "name", "string", 20, HorizontalAlignment.CENTER);
+        info.addColumn("部件别编码", "name", "string", 20, HorizontalAlignment.CENTER);
+        info.addColumn("部件类英文名称", "name", "string", 20, HorizontalAlignment.CENTER);
+        info.addColumn("部件类名称", "name", "string", 20, HorizontalAlignment.CENTER);
+        info.setDataHandler((data, prop) -> {
+            return null;
+        });
+        return info;
+    }
+
+    public SheetWriteInfo calendarReportPart3() {
+        SheetWriteInfo<FuncidDefChangeRecord> info = new SheetWriteInfo<>();
+        info.setData(Arrays.asList(new FuncidDefChangeRecord()));
+        info.setSheetName("信息点变更");
+        info.addColumn("类型编码", "name", "string", 10, HorizontalAlignment.CENTER);
+        info.addColumn("类型名称", "name", "string", 10, HorizontalAlignment.CENTER);
+        info.addColumn("一级标签", "name", "string", 10, HorizontalAlignment.CENTER);
+        info.addColumn("二级标签", "name", "string", 10, HorizontalAlignment.CENTER);
+        info.addColumn("信息点编码", "name", "string", 20, HorizontalAlignment.CENTER);
+        info.addColumn("信息点别编码", "name", "string", 20, HorizontalAlignment.CENTER);
+        info.addColumn("信息点名称", "name", "string", 20, HorizontalAlignment.CENTER);
+        info.addColumn("信息点分类", "category", "array", 20, HorizontalAlignment.CENTER);
+        info.addColumn("优先级", "priority", "array", 10, HorizontalAlignment.CENTER);
+        info.addColumn("单位", "name", "string", 10, HorizontalAlignment.CENTER);
+        info.addColumn("信息点类型", "dataType", "array", 20, HorizontalAlignment.CENTER);
+        info.addColumn("是否复数", "isMultiple", "array", 10, HorizontalAlignment.CENTER);
+        info.addColumn("是否区间", "isRegion", "array", 10, HorizontalAlignment.GENERAL);
+        info.addColumn("字典选择", "name", "string", 10, HorizontalAlignment.CENTER);
+        info.addColumn("数据格式", "name", "string", 10, HorizontalAlignment.CENTER);
+        info.addColumn("备注", "name", "string", 10, HorizontalAlignment.CENTER);
+        info.setDataHandler((data, prop) -> {
+            switch (prop) {
+                case ("dataType"): {
+                    return new String[]{"INTEGER", "DOUBLE", "BOOLEAN", "STRING", "DATETIME", "ENUM", "MENUM", "REFENMUM"};
+                }
+                case ("category"): {
+                    return new String[]{"STATIC", "PULSE", "SEQUENTIAL", "GRADATION"};
+                }
+                case ("priority"): {
+                    return new String[]{"A2", "D1", "M", "R", "S"};
+                }
+                case ("isRegion"):
+                case ("isMultiple"): {
+                    return new String[]{"1", "0"};
+                }
+                default: {
+                    return null;
+                }
+            }
+        });
+        return info;
+    }
+}
+

+ 33 - 125
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/FuncidDefChangeRecordService.java

@@ -8,8 +8,6 @@ import com.persagy.common.json.JacksonMapper;
 import com.persagy.common.web.ListResponse;
 import com.persagy.common.web.MapResponse;
 import com.persagy.common.web.PagedResponse;
-import com.persagy.dmp.common.excel.ExcelUtils;
-import com.persagy.dmp.common.excel.SheetReadInfo;
 import com.persagy.dmp.rwd.edit.config.web.UserUtils;
 import com.persagy.dmp.rwd.edit.entity.FuncidDef;
 import com.persagy.dmp.rwd.edit.entity.FuncidDefChangeRecord;
@@ -19,20 +17,15 @@ import com.persagy.dmp.rwd.edit.enumeration.EnumOperationType;
 import com.persagy.dmp.rwd.edit.enumeration.EnumVersionState;
 import com.persagy.dmp.rwd.edit.repository.FuncidDefChangeRecordRepository;
 import com.persagy.dmp.rwd.edit.repository.FuncidDefRepository;
-import com.persagy.dmp.rwd.enums.FuncidCategory;
 import com.persagy.dmp.rwd.enums.FuncidDataType;
 import com.persagy.dmp.rwd.model.ClassDefModel;
 import com.persagy.dmp.rwd.model.FuncidDefModel;
 import com.querydsl.core.types.dsl.BooleanExpression;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections.MapUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.web.multipart.MultipartFile;
 
 import javax.transaction.Transactional;
-import java.io.IOException;
-import java.io.InputStream;
 import java.util.*;
 
 @Slf4j
@@ -325,12 +318,17 @@ public class FuncidDefChangeRecordService {
                     if (changeRecord.getIsMultiple() == null) {
                         sql.append("null,");
                     } else {
-                        sql.append("'" + changeRecord.getIsMultiple() + "',");
+                        sql.append("" + changeRecord.getIsMultiple() + ",");
+                    }
+                    if (changeRecord.getIsRegion() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("" + changeRecord.getIsRegion() + ",");
                     }
                     if (changeRecord.getFormater() == null) {
                         sql.append("null,");
                     } else {
-                        sql.append("'" + changeRecord.getFormater() + "')");
+                        sql.append("'" + changeRecord.getFormater() + "',");
                     }
                     if (refenumBool) {
                         ArrayNode dataSource = changeRecord.getDataSource();
@@ -338,28 +336,35 @@ public class FuncidDefChangeRecordService {
                         JacksonCriteria queryRef = JacksonCriteria.newInstance();
                         queryRef.add("refKey", refKey);
                         List<RwdeditRefTypeInfos> refInfos = rwdeditRefTypeInfosService.query(queryRef).getData();
-                        sql.append("'" + JacksonMapper.toSimpleJson(refInfos) + "')");
+                        List<Map<String, Object>> list = new ArrayList<>();
+                        refInfos.forEach(item -> {
+                            Map<String, Object> refInfoMap = new HashMap<>();
+                            refInfoMap.put("code", item.getCode());
+                            refInfoMap.put("name", item.getName());
+                            list.add(refInfoMap);
+                        });
+                        sql.append("'" + JacksonMapper.toSimpleJson(list) + "',");
                     } else {
                         if (changeRecord.getDataSource() == null) {
                             sql.append("null,");
                         } else {
-                            sql.append("'" + JacksonMapper.toSimpleJson(changeRecord.getDataSource()) + "')");
+                            sql.append("'" + JacksonMapper.toSimpleJson(changeRecord.getDataSource()) + "',");
                         }
                     }
                     if (changeRecord.getNote() == null) {
                         sql.append("null,");
                     } else {
-                        sql.append("'" + changeRecord.getNote() + "')");
+                        sql.append("'" + changeRecord.getNote() + "',");
                     }
                     if (changeRecord.getSubFlag() == null) {
                         sql.append("null,");
                     } else {
-                        sql.append("'" + changeRecord.getSubFlag() + "')");
+                        sql.append("" + changeRecord.getSubFlag() + ",");
                     }
                     if (changeRecord.getWeakPoint() == null) {
                         sql.append("null);\n");
                     } else {
-                        sql.append("'" + changeRecord.getWeakPoint() + "');\n");
+                        sql.append("" + changeRecord.getWeakPoint() + ");\n");
                     }
                     break;
                 }
@@ -368,7 +373,7 @@ public class FuncidDefChangeRecordService {
                     sql.append(" `alias_code` = '" + changeRecord.getAliasCode() + "',");
                     sql.append(" `alias_name` = '" + changeRecord.getAliasName() + "'");
                     sql.append(" WHERE `code` = '" + changeRecord.getCode() + "'");
-                    sql.append(" WHERE `class_code` = '" + changeRecord.getClassCode() + "'");
+                    sql.append(" and `class_code` = '" + changeRecord.getClassCode() + "'");
                     sql.append(" and `group_code` = '" + changeRecord.getGroupCode() + "'");
                     sql.append(" and `project_id` = '" + changeRecord.getProjectId() + "';\n");
                     break;
@@ -376,7 +381,7 @@ public class FuncidDefChangeRecordService {
                 case delete: {
                     sql.append("DELETE FROM `rwd_def_funcid`");
                     sql.append(" WHERE `code` = '" + changeRecord.getCode() + "'");
-                    sql.append(" WHERE `class_code` = '" + changeRecord.getClassCode() + "'");
+                    sql.append(" and `class_code` = '" + changeRecord.getClassCode() + "'");
                     sql.append(" and `group_code` = '" + changeRecord.getGroupCode() + "'");
                     sql.append(" and `project_id` = '" + changeRecord.getProjectId() + "';\n");
                     break;
@@ -457,18 +462,18 @@ public class FuncidDefChangeRecordService {
             funcidDef.setNote(item.getNote());
             funcidDef.setSubFlag(item.getSubFlag());
             funcidDef.setWeakPoint(item.getWeakPoint());
-            if (!FuncidDataType.REFENUM.equals(item.getDataType())) {
-                funcidDef.setDataType(item.getDataType());
-                funcidDef.setDataSource(item.getDataSource());
-            } else {
-                funcidDef.setDataType(FuncidDataType.ENUM);
-                ArrayNode dataSource = item.getDataSource();
-                String refKey = dataSource.get(0).get("refKey").asText();
-                JacksonCriteria queryRef = JacksonCriteria.newInstance();
-                queryRef.add("refKey", refKey);
-                List<RwdeditRefTypeInfos> refInfos = rwdeditRefTypeInfosService.query(queryRef).getData();
-                funcidDef.setDataSource(JacksonMapper.toObject(JacksonMapper.toSimpleJson(refInfos), ArrayNode.class));
-            }
+//            if (!FuncidDataType.REFENUM.equals(item.getDataType())) {
+            funcidDef.setDataType(item.getDataType());
+            funcidDef.setDataSource(item.getDataSource());
+//            } else {
+//                funcidDef.setDataType(FuncidDataType.ENUM);
+//                ArrayNode dataSource = item.getDataSource();
+//                String refKey = dataSource.get(0).get("refKey").asText();
+//                JacksonCriteria queryRef = JacksonCriteria.newInstance();
+//                queryRef.add("refKey", refKey);
+//                List<RwdeditRefTypeInfos> refInfos = rwdeditRefTypeInfosService.query(queryRef).getData();
+//                funcidDef.setDataSource(JacksonMapper.toObject(JacksonMapper.toSimpleJson(refInfos), ArrayNode.class));
+//            }
             funcidDef.setIsUsed(1);//状态 0.历史版本 1.使用中
             funcidDef.setVersion(version);//版本
             funcidDef.setLastUpdateTime(new Date());//发布时间
@@ -517,102 +522,5 @@ public class FuncidDefChangeRecordService {
         }
         return null;
     }
-
-    public List<FuncidDefChangeRecord> CompareDataExcelRead(MultipartFile file) throws IOException {
-        SheetReadInfo info = new SheetReadInfo();
-        info.setStartRow(1);
-        info.add(0, "code", "string");
-        info.add(1, "name", "string");
-        info.add(2, "aliasCode", "string");
-        info.add(3, "aliasName", "string");
-        info.add(4, "classCode", "string");
-        info.add(5, "category", "string");
-        info.add(6, "firstTag", "string");
-        info.add(7, "secondTag", "string");
-        info.add(8, "priority", "string");
-        info.add(9, "inputMode", "string");
-        info.add(10, "unit", "string");
-        info.add(11, "dataType", "string");
-        info.add(12, "isMultiple", "integer");
-        info.add(13, "isRegion", "integer");
-        info.add(14, "formater", "string");
-        info.add(15, "dataSource", "string");
-        info.add(16, "note", "string");
-        info.add(17, "subFlag", "integer");
-        info.add(18, "weakPoint", "integer");
-        info.add(19, "operationType", "string");
-
-        InputStream inputStream = file.getInputStream();
-        List<Map<String, Object>> result = ExcelUtils.read(inputStream, info);
-
-        List<FuncidDefChangeRecord> funcidDefChangeRecordList = new ArrayList<>();
-        for (Map<String, Object> map : result) {
-            String code = MapUtils.getString(map, "code");
-            String name = MapUtils.getString(map, "name");
-            String aliasCode = MapUtils.getString(map, "aliasCode");
-            String aliasName = MapUtils.getString(map, "aliasName");
-            String classCode = MapUtils.getString(map, "classCode");
-            String category = MapUtils.getString(map, "category");
-            String firstTag = MapUtils.getString(map, "firstTag");
-            String secondTag = MapUtils.getString(map, "secondTag");
-            String priority = MapUtils.getString(map, "priority");
-            String inputMode = MapUtils.getString(map, "inputMode");
-            String unit = MapUtils.getString(map, "unit");
-            String dataType = MapUtils.getString(map, "dataType");
-            Boolean isMultiple = MapUtils.getBoolean(map, "isMultiple");
-            Boolean isRegion = MapUtils.getBoolean(map, "isRegion");
-            String formater = MapUtils.getString(map, "formater");
-            String dataSource = MapUtils.getString(map, "dataSource");
-            String note = MapUtils.getString(map, "note");
-            Boolean subFlag = MapUtils.getBoolean(map, "subFlag");
-            Boolean weakPoint = MapUtils.getBoolean(map, "weakPoint");
-            String operationType = MapUtils.getString(map, "operationType");
-            if (code == null) {
-                return null;
-            }
-            if (classCode == null) {
-                return null;
-            }
-            if (category == null) {
-                return null;
-            }
-            if (operationType == null) {
-                return null;
-            }
-
-            FuncidDefChangeRecord funcidDefChangeRecord = new FuncidDefChangeRecord();
-            funcidDefChangeRecord.setCode(code);
-            funcidDefChangeRecord.setName(name);
-            funcidDefChangeRecord.setAliasCode(aliasCode);
-            funcidDefChangeRecord.setAliasName(aliasName);
-            funcidDefChangeRecord.setClassCode(classCode);
-            funcidDefChangeRecord.setCategory(FuncidCategory.valueOf(category));
-            funcidDefChangeRecord.setFirstTag(firstTag);
-            funcidDefChangeRecord.setSecondTag(secondTag);
-            funcidDefChangeRecord.setPriority(priority);
-            funcidDefChangeRecord.setInputMode(inputMode);
-            funcidDefChangeRecord.setUnit(unit);
-            funcidDefChangeRecord.setDataType(FuncidDataType.valueOf(dataType));
-            funcidDefChangeRecord.setIsMultiple(isMultiple);
-            funcidDefChangeRecord.setIsRegion(isRegion);
-            funcidDefChangeRecord.setFormater(formater);
-            ArrayNode dataSourceArray = JacksonMapper.toObject(dataSource, ArrayNode.class);
-            funcidDefChangeRecord.setDataSource(dataSourceArray);
-            funcidDefChangeRecord.setNote(note);
-            funcidDefChangeRecord.setSubFlag(subFlag);
-            funcidDefChangeRecord.setWeakPoint(weakPoint);
-            funcidDefChangeRecord.setOperationType(EnumOperationType.valueOf(operationType));
-
-            funcidDefChangeRecord.setType("common");
-            funcidDefChangeRecord.setOperationUser(UserUtils.currentUserId() + "");
-            funcidDefChangeRecord.setOperationTime(new Date());
-            funcidDefChangeRecord.setValid(true);
-            funcidDefChangeRecord.setState(EnumVersionState.INIT);
-            funcidDefChangeRecord.setGroupCode("0");
-            funcidDefChangeRecord.setProjectId("0");
-            funcidDefChangeRecordList.add(funcidDefChangeRecord);
-        }
-        return funcidDefChangeRecordList;
-    }
 }
 

+ 5 - 1
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/RwdeditVersionService.java

@@ -263,7 +263,11 @@ public class RwdeditVersionService {
                 buff.append(addString(funcid.getCategory().name())).append(",");
                 buff.append(addString(funcid.getPriority())).append(",");
                 buff.append(addString(funcid.getUnit())).append(",");
-                buff.append(addString(funcid.getDataType().name())).append(",");
+                if (funcid.getDataType() == FuncidDataType.REFENUM) {
+                    buff.append(FuncidDataType.ENUM.name()).append(",");
+                } else {
+                    buff.append(addString(funcid.getDataType().name())).append(",");
+                }
                 buff.append(funcid.getIsMultiple() ? 1 : 0).append(",");
                 buff.append(funcid.getIsRegion() ? 1 : 0).append(",");
                 buff.append(addString(funcid.getFormater())).append(",");

+ 329 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/UploadService.java

@@ -0,0 +1,329 @@
+package com.persagy.dmp.rwd.edit.service;
+
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.json.JacksonMapper;
+import com.persagy.common.web.MapResponse;
+import com.persagy.dmp.common.excel.ExcelUtils;
+import com.persagy.dmp.common.excel.SheetReadInfo;
+import com.persagy.dmp.rwd.edit.config.web.UserUtils;
+import com.persagy.dmp.rwd.edit.entity.ClassDefChangeRecord;
+import com.persagy.dmp.rwd.edit.entity.FuncidDefChangeRecord;
+import com.persagy.dmp.rwd.edit.enumeration.EnumOperationType;
+import com.persagy.dmp.rwd.edit.enumeration.EnumVersionState;
+import com.persagy.dmp.rwd.enums.FuncidCategory;
+import com.persagy.dmp.rwd.enums.FuncidDataType;
+import com.persagy.dmp.rwd.enums.ObjType;
+import com.persagy.dmp.rwd.model.ClassDefModel;
+import com.persagy.dmp.rwd.model.FuncidDefModel;
+import org.apache.commons.collections.MapUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+@Service
+public class UploadService {
+
+    @Autowired
+    private ClassDefChangeRecordService classDefChangeRecordService;
+
+    @Autowired
+    private FuncidDefChangeRecordService funcidDefChangeRecordService;
+
+    @Autowired
+    private ClassDefService classDefService;
+
+    @Autowired
+    private FuncidDefService funcidDefService;
+
+    public MapResponse upload(String type, MultipartFile file) throws Exception {
+        MapResponse response = new MapResponse();
+        if ("changeDataSave".equals(type)) {
+            return uploadCalendarReportSave(file);
+        }
+        response.setFail("type不存在");
+        return response;
+    }
+
+    private MapResponse uploadCalendarReportSave(MultipartFile file) throws Exception {
+        Map<String, Object> result = calendarReportExcelRead(file);
+        List<ClassDefChangeRecord> classDefChangeRecordList = (List<ClassDefChangeRecord>) result.get("classDefChangeRecordList");
+        List<FuncidDefChangeRecord> funcidDefChangeRecordList = (List<FuncidDefChangeRecord>) result.get("funcidDefChangeRecordList");
+
+        for (ClassDefChangeRecord classDefChangeRecord : classDefChangeRecordList) {
+            classDefChangeRecordService.create(classDefChangeRecord);
+        }
+
+        for (FuncidDefChangeRecord funcidDefChangeRecord : funcidDefChangeRecordList) {
+            funcidDefChangeRecordService.create(funcidDefChangeRecord);
+        }
+        return new MapResponse();
+    }
+
+    private Map<String, Object> calendarReportExcelRead(MultipartFile file) throws Exception {
+
+        SheetReadInfo info1 = new SheetReadInfo();
+        info1.setStartRow(1);
+        info1.add(0, "majorCode", "string");
+        info1.add(2, "majorName", "string");
+        info1.add(3, "systemCode", "string");
+        info1.add(4, "systemAliasCode", "string");
+        info1.add(6, "systemName", "string");
+        info1.add(7, "equipmentCode", "string");
+        info1.add(8, "equipmentAliasCode", "string");
+        info1.add(10, "equipmentName", "string");
+        info1.add(11, "componentCode", "string");
+        info1.add(12, "componentAliasCode", "string");
+        info1.add(14, "componentName", "string");
+
+        SheetReadInfo info2 = new SheetReadInfo();
+        info2.setStartRow(1);
+        info2.add(0, "classCode", "string");
+        info2.add(2, "firstTag", "string");
+        info2.add(3, "secondTag", "string");
+        info2.add(4, "code", "string");
+        info2.add(5, "aliasCode", "string");
+        info2.add(6, "name", "string");
+        info2.add(7, "category", "string");
+        info2.add(8, "priority", "string");
+        info2.add(9, "unit", "string");
+        info2.add(10, "dataType", "string");
+        info2.add(11, "isMultiple", "integer");
+        info2.add(12, "isRegion", "integer");
+        info2.add(13, "dataSource", "string");
+        info2.add(14, "formater", "string");
+        info2.add(15, "note", "string");
+
+        List<List<Map<String, Object>>> result = ExcelUtils.read(file.getInputStream(), Arrays.asList(new SheetReadInfo(), info1, info2));
+        List<ClassDefChangeRecord> classDefChangeRecordList = compareDataExcelReadClass(result.get(1));
+        List<FuncidDefChangeRecord> funcidDefChangeRecordList = compareDataExcelReadFuncid(result.get(2));
+
+        Map<String, Object> map = new HashMap<>();
+        map.put("classDefChangeRecordList", classDefChangeRecordList);
+        map.put("funcidDefChangeRecordList", funcidDefChangeRecordList);
+        return map;
+    }
+
+    public List<ClassDefChangeRecord> compareDataExcelReadClass(List<Map<String, Object>> result) throws Exception {
+        JacksonCriteria criteria = JacksonCriteria.newInstance();
+        criteria.add("type", "common");
+        List<ClassDefModel> data = classDefService.queryClass(criteria).getData();
+        Map<String, ClassDefModel> classCodeMap = data.stream().collect(Collectors.toMap(ClassDefModel::getCode, Function.identity()));
+        List<ClassDefChangeRecord> classDefChangeRecordList = new ArrayList<>();
+        for (Map<String, Object> map : result) {
+            String majorCode = MapUtils.getString(map, "majorCode");
+            String systemCode = MapUtils.getString(map, "systemCode");
+            String systemAliasCode = MapUtils.getString(map, "systemAliasCode");
+            String systemName = MapUtils.getString(map, "systemName");
+            String equipmentCode = MapUtils.getString(map, "equipmentCode");
+            String equipmentAliasCode = MapUtils.getString(map, "equipmentAliasCode");
+            String equipmentName = MapUtils.getString(map, "equipmentName");
+            String componentCode = MapUtils.getString(map, "componentCode");
+            String componentAliasCode = MapUtils.getString(map, "componentAliasCode");
+            String componentName = MapUtils.getString(map, "componentName");
+            if (majorCode == null) {
+                throw new Exception("专业编码不可为空");
+            }
+
+            ClassDefChangeRecord changeRecord = new ClassDefChangeRecord();
+            if (componentCode != null) {
+                componentCode = majorCode + systemCode + equipmentCode + componentCode;
+                equipmentCode = majorCode + systemCode + equipmentCode;
+                systemCode = majorCode + systemCode;
+                getClassDefChangeRecord(classCodeMap, changeRecord, componentCode, componentName, componentAliasCode, componentName, ObjType.component, majorCode, systemCode, equipmentCode);
+            } else if (equipmentCode != null) {
+                equipmentCode = majorCode + systemCode + equipmentCode;
+                systemCode = majorCode + systemCode;
+                getClassDefChangeRecord(classCodeMap, changeRecord, equipmentCode, equipmentName, equipmentAliasCode, equipmentName, ObjType.equipment, majorCode, systemCode, null);
+            } else if (systemCode != null) {
+                systemCode = majorCode + systemCode;
+                getClassDefChangeRecord(classCodeMap, changeRecord, systemCode, systemName, systemAliasCode, systemName, ObjType.system, majorCode, null, null);
+            }
+            classDefChangeRecordList.add(changeRecord);
+        }
+        return classDefChangeRecordList;
+    }
+
+    public ClassDefChangeRecord getClassDefChangeRecord(Map<String, ClassDefModel> classCodeMap, ClassDefChangeRecord changeRecord,
+                                                        String code, String name, String aliasCode, String aliasName,
+                                                        ObjType objType, String majorCode, String systemCode, String equipmentCode) {
+        if (classCodeMap.containsKey(code)) {
+            ClassDefModel classDefModel = classCodeMap.get(code);
+            changeRecord.setCode(classDefModel.getCode());
+            changeRecord.setObjType(classDefModel.getObjType());
+            changeRecord.setName(classDefModel.getName());
+            changeRecord.setMajorCode(classDefModel.getMajorCode());
+            changeRecord.setSystemCode(classDefModel.getSystemCode());
+            changeRecord.setParentCode(classDefModel.getParentCode());
+            changeRecord.setType(classDefModel.getType());
+            changeRecord.setGroupCode(classDefModel.getGroupCode());
+            changeRecord.setProjectId(classDefModel.getProjectId());
+            changeRecord.setOperationUser(UserUtils.currentUserId() + "");
+            changeRecord.setOperationTime(new Date());
+            changeRecord.setValid(true);
+            changeRecord.setState(EnumVersionState.INIT);
+            changeRecord.setOperationType(EnumOperationType.update);
+        } else {
+            changeRecord.setCode(code);
+            changeRecord.setObjType(objType);
+            changeRecord.setName(name);
+            changeRecord.setMajorCode(majorCode);
+            changeRecord.setSystemCode(systemCode);
+            changeRecord.setEquipmentCode(equipmentCode);
+            changeRecord.setParentCode(objType.toString());
+            changeRecord.setType("common");
+            changeRecord.setGroupCode("0");
+            changeRecord.setProjectId("0");
+            changeRecord.setOperationUser(UserUtils.currentUserId() + "");
+            changeRecord.setOperationTime(new Date());
+            changeRecord.setValid(true);
+            changeRecord.setState(EnumVersionState.INIT);
+            changeRecord.setOperationType(EnumOperationType.create);
+        }
+        changeRecord.setAliasCode(aliasCode == null ? code : aliasCode);
+        changeRecord.setAliasName(aliasName);
+        return changeRecord;
+    }
+
+    public List<FuncidDefChangeRecord> compareDataExcelReadFuncid(List<Map<String, Object>> result) throws Exception {
+        Map<String, FuncidDefModel> funcidDefMap = new HashMap<>();
+        List<FuncidDefChangeRecord> funcidDefChangeRecordList = new ArrayList<>();
+        for (Map<String, Object> map : result) {
+            String classCode = MapUtils.getString(map, "classCode");
+            String firstTag = MapUtils.getString(map, "firstTag");
+            String secondTag = MapUtils.getString(map, "secondTag");
+            String code = MapUtils.getString(map, "code");
+            String aliasCode = MapUtils.getString(map, "aliasCode");
+            String name = MapUtils.getString(map, "name");
+            String category = MapUtils.getString(map, "category");
+            String priority = MapUtils.getString(map, "priority");
+            String unit = MapUtils.getString(map, "unit");
+            String dataType = MapUtils.getString(map, "dataType");
+            Boolean isMultiple = MapUtils.getBoolean(map, "isMultiple");
+            Boolean isRegion = MapUtils.getBoolean(map, "isRegion");
+            String dataSource = MapUtils.getString(map, "dataSource");
+            String formater = MapUtils.getString(map, "formater");
+            String note = MapUtils.getString(map, "note");
+
+            if (classCode == null) {
+                throw new Exception("类型编码不可为空");
+            }
+            if (code == null) {
+                throw new Exception("信息点编码不可为空");
+            }
+
+            if (!funcidDefMap.containsKey(code)) {
+                JacksonCriteria criteria = JacksonCriteria.newInstance();
+                criteria.add("type", "common");
+                criteria.add("code", code);
+                criteria.add("classCode", classCode);
+                List<FuncidDefModel> data = funcidDefService.queryFuncid(criteria).getData();
+                Map<String, FuncidDefModel> dataMap = data.stream().collect(Collectors.toMap(FuncidDefModel::getCode, Function.identity()));
+                funcidDefMap.putAll(dataMap);
+            }
+
+            FuncidDefChangeRecord changeRecord = new FuncidDefChangeRecord();
+            if (funcidDefMap.containsKey(code)) {
+                FuncidDefModel funcidDefModel = funcidDefMap.get(code);
+                changeRecord.setCode(funcidDefModel.getCode());
+                changeRecord.setName(funcidDefModel.getName());
+                changeRecord.setClassCode(funcidDefModel.getClassCode());
+                changeRecord.setCategory(funcidDefModel.getCategory());
+                changeRecord.setPriority(funcidDefModel.getPriority());
+                changeRecord.setUnit(funcidDefModel.getUnit());
+                changeRecord.setDataType(funcidDefModel.getDataType());
+                changeRecord.setIsMultiple(funcidDefModel.getIsMultiple());
+                changeRecord.setIsRegion(funcidDefModel.getIsRegion());
+                changeRecord.setFormater(funcidDefModel.getFormater());
+                changeRecord.setType(funcidDefModel.getType());
+                changeRecord.setGroupCode(funcidDefModel.getGroupCode());
+                changeRecord.setProjectId(funcidDefModel.getProjectId());
+                changeRecord.setOperationUser(UserUtils.currentUserId() + "");
+                changeRecord.setOperationTime(new Date());
+                changeRecord.setValid(true);
+                changeRecord.setState(EnumVersionState.INIT);
+                changeRecord.setOperationType(EnumOperationType.update);
+            } else {
+                changeRecord.setCode(code);
+                changeRecord.setName(name);
+                changeRecord.setClassCode(classCode);
+                changeRecord.setCategory(FuncidCategory.valueOf(category));
+                changeRecord.setPriority(priority);
+                changeRecord.setUnit(unit);
+                changeRecord.setDataType(FuncidDataType.valueOf(dataType));
+                changeRecord.setIsMultiple(isMultiple);
+                changeRecord.setIsRegion(isRegion);
+                changeRecord.setFormater(formater);
+                changeRecord.setType("common");
+                changeRecord.setGroupCode("0");
+                changeRecord.setProjectId("0");
+                changeRecord.setOperationUser(UserUtils.currentUserId() + "");
+                changeRecord.setOperationTime(new Date());
+                changeRecord.setValid(true);
+                changeRecord.setState(EnumVersionState.INIT);
+                changeRecord.setOperationType(EnumOperationType.create);
+
+                //处理数据源
+                if (dataSource != null) {
+                    dataSource = dataSource.replace(". ", ".");
+                    dataSource = dataSource.replace(",", ",");
+                    String[] split = dataSource.split(" ");
+                    if (split.length != 0) {
+                        ArrayNode array = JsonNodeFactory.instance.arrayNode();
+                        if (dataType.equals(FuncidDataType.ENUM.toString())) {
+                            for (int i = 0; i < split.length; i++) {
+                                String temp = split[i];
+                                int idx = temp.indexOf(".");
+                                if (idx == -1) {
+                                    continue;
+                                }
+                                String key = temp.substring(0, idx);
+                                String value = temp.substring(idx + 1);
+                                ObjectNode item = array.addObject();
+                                item.put("code", key);
+                                item.put("name", value);
+                            }
+                            changeRecord.setDataSource(array);
+                        } else {
+                            for (int i = 0; i < split.length; i++) {
+                                String temp = split[i];
+                                int idx = temp.indexOf(",");
+                                String key = temp.substring(0, idx);
+                                String value = temp.substring(idx + 1);
+                                ObjectNode item = array.addObject();
+                                if (key.startsWith("(")) {
+                                    key = key.replace("(", "");
+                                    item.put("$gt", key);
+                                } else if (key.startsWith("[")) {
+                                    key = key.replace("[", "");
+                                    item.put("$gte", key);
+                                }
+                                if (value.endsWith(")")) {
+                                    value = value.replace(")", "");
+                                    item.put("$lt", value);
+                                } else if (value.endsWith("]")) {
+                                    value = value.replace("]", "");
+                                    item.put("$lte", value);
+                                }
+                            }
+                            changeRecord.setDataSource(array);
+                        }
+                    }
+                }
+            }
+            changeRecord.setAliasCode(aliasCode);
+            changeRecord.setAliasName(name);
+            changeRecord.setNote(note);
+            changeRecord.setFirstTag(firstTag);
+            changeRecord.setSecondTag(secondTag);
+            funcidDefChangeRecordList.add(changeRecord);
+        }
+        return funcidDefChangeRecordList;
+    }
+}

+ 1 - 1
dmp-rwd-edit/src/main/resources/application.yml

@@ -28,7 +28,7 @@ spring:
     hibernate:
       ddl-auto: none
   redis:
-    database: 11
+    database: 10
     host: 172.17.100.14
     password: brzj123456
     port: 9944

+ 59 - 0
iot-admin/pom.xml

@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>dmp</artifactId>
+        <groupId>com.persagy</groupId>
+        <version>4.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>com.persagy</groupId>
+    <artifactId>iot-admin</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>dmp-common</artifactId>
+            <version>4.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <finalName>iot-admin</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <fork>true</fork>
+                    <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>

+ 36 - 0
iot-admin/src/main/java/com/persagy/dmp/admin/IotAdminApp.java

@@ -0,0 +1,36 @@
+package com.persagy.dmp.admin;
+
+import com.persagy.dmp.common.SpringUtils;
+import com.persagy.dmp.common.http.HttpUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.annotation.Bean;
+
+/**
+ * @author: yaoll
+ * @date: 2020-12-29
+ * @verison: 1.0
+ */
+@Slf4j
+@SpringBootApplication
+public class IotAdminApp {
+
+    public static void main(String[] args) {
+        SpringApplication app = new SpringApplication(IotAdminApp.class);
+        ConfigurableApplicationContext ctx = app.run(args);
+
+    }
+
+    @Bean
+    public HttpUtils httpUtils() {
+        return new HttpUtils();
+    }
+
+    @Bean
+    public SpringUtils springUtils() {
+        return new SpringUtils();
+    }
+
+}

+ 81 - 0
iot-admin/src/main/java/com/persagy/dmp/admin/controller/DmpGatewayController.java

@@ -0,0 +1,81 @@
+package com.persagy.dmp.admin.controller;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.ServletUtils;
+import com.persagy.dmp.common.http.HttpUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * @author: yaoll
+ * @date: 2020-12-29
+ * @verison: 1.0
+ */
+@RestController
+@RequestMapping("/admin/dmp")
+public class DmpGatewayController {
+
+    @Autowired
+    private HttpUtils httpUtils;
+
+    @PostMapping("/report/**")
+    public void report(HttpServletRequest request, HttpServletResponse response, @RequestBody JsonNode param) {
+        dispatch(request, response, param);
+    }
+
+    @PostMapping("/dic/**")
+    public void dic(HttpServletRequest request, HttpServletResponse response, @RequestBody JsonNode param) {
+        dispatch(request, response, param);
+    }
+
+    @PostMapping("/org/**")
+    public void org(HttpServletRequest request, HttpServletResponse response, @RequestBody JsonNode param) {
+        dispatch(request, response, param);
+    }
+
+    @PostMapping("/rwd/**")
+    public void rwd(HttpServletRequest request, HttpServletResponse response, @RequestBody JsonNode param) {
+        dispatch(request, response, param);
+    }
+
+    private void dispatch(HttpServletRequest request, HttpServletResponse response, @RequestBody JsonNode param) {
+        Map<String, String[]> parameterMap = request.getParameterMap();
+        String[] dmpServers = parameterMap.get("dmpServer");
+        if (dmpServers == null) {
+            MapResponse result = new MapResponse();
+            result.setFail("dmpServer不可为空");
+            ServletUtils.writeJson(response, result);
+            return;
+        }
+        StringBuilder url = new StringBuilder("http://" + dmpServers[0]);
+        String uri = request.getRequestURI().replace("/admin/dmp", "");
+        url.append(uri);
+        String queryString = request.getQueryString();
+        if (!"/rwd/def/class".equalsIgnoreCase(uri) && !"/rwd/def/funcid".equalsIgnoreCase(uri)) {
+            queryString = appendParamIfNotExists(queryString, "appId", "iotTool");
+            queryString = appendParamIfNotExists(queryString, "userId", "admin");
+        }
+        url.append("?").append(queryString);
+
+        HttpUtils.HttpResult post = httpUtils.post(url.toString(), param.toString(), 30000);
+        String content = post.getContent();
+        ServletUtils.writeJson(response, content);
+    }
+
+    private String appendParamIfNotExists(String queryString, String key, String value) {
+        if (queryString == null) {
+            return key + "=" + value;
+        } else {
+            return queryString + "&" + key + "=" + value;
+        }
+    }
+
+}

+ 5 - 0
iot-admin/src/main/resources/application-aliyun-test.yml

@@ -0,0 +1,5 @@
+server:
+  port: 8837
+spring:
+  application:
+    name: iot-admin

+ 2 - 0
iot-admin/src/main/resources/application-dev.yml

@@ -0,0 +1,2 @@
+server:
+  port: 8837

+ 5 - 0
iot-admin/src/main/resources/application-test.yml

@@ -0,0 +1,5 @@
+server:
+  port: 8837
+spring:
+  application:
+    name: iot-admin

+ 8 - 0
iot-admin/src/main/resources/application.yml

@@ -0,0 +1,8 @@
+server:
+  port: 8837
+spring:
+  application:
+    name: iot-admin
+  profiles:
+    active:
+    - dev,log-dev

+ 55 - 0
iot-admin/src/main/resources/logback-spring.xml

@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="60 seconds" debug="false">
+
+    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
+    <property name="log_pattern" value="%-30thread %d{yyyyMMdd HH:mm:ss.SSS} %-5level %logger{140} - %msg%n"/>
+    <property name="app_name" value="admin"/>
+    <springProperty scope="context" name="log_path" source="persagy.log.path"/>
+    <property name="log_file" value="${log_path}/${app_name}"/>
+    <contextName>${app_name}</contextName>
+
+    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
+        <layout class="ch.qos.logback.classic.PatternLayout">
+            <pattern>${log_pattern}</pattern>
+        </layout>
+    </appender>
+
+    <!-- 日志文件 -->
+    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${log_file}-%d{yyyyMMdd}.log</fileNamePattern>
+            <maxHistory>7</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log_pattern}</pattern>
+        </encoder>
+    </appender>
+
+    <logger name="org.hibernate" level="INFO"/>
+    <logger name="org.springframework" level="INFO"/>
+    <logger name="com.netflix" level="WARN"/>
+    <logger name="org.apache.http" level="INFO"/>
+
+    <springProfile name="log-dev">
+        <logger name="org.hibernate.SQL" level="DEBUG"/>
+        <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>
+        <root level="info">
+            <appender-ref ref="stdout"/>
+        </root>
+    </springProfile>
+
+    <springProfile name="log-test">
+        <logger name="org.hibernate.SQL" level="DEBUG"/>
+        <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>
+        <root level="info">
+            <appender-ref ref="file"/>
+        </root>
+    </springProfile>
+
+    <springProfile name="log-prod">
+        <root level="info">
+            <appender-ref ref="file"/>
+        </root>
+    </springProfile>
+
+</configuration> 

+ 1 - 0
pom.xml

@@ -20,6 +20,7 @@
         <module>dmp-alarm</module>
         <module>dmp-admin</module>
         <module>dmp-rwd-edit</module>
+        <module>iot-admin</module>
     </modules>
 
     <packaging>pom</packaging>