Showing
1 changed file
with
72 additions
and
0 deletions
@@ -5,10 +5,16 @@ import io.swagger.annotations.ApiOperation; | @@ -5,10 +5,16 @@ import io.swagger.annotations.ApiOperation; | ||
5 | import lombok.RequiredArgsConstructor; | 5 | import lombok.RequiredArgsConstructor; |
6 | import lombok.extern.slf4j.Slf4j; | 6 | import lombok.extern.slf4j.Slf4j; |
7 | import org.apache.commons.lang3.StringUtils; | 7 | import org.apache.commons.lang3.StringUtils; |
8 | +import org.apache.poi.ss.usermodel.Cell; | ||
9 | +import org.apache.poi.ss.usermodel.Row; | ||
10 | +import org.apache.poi.ss.usermodel.Sheet; | ||
11 | +import org.apache.poi.ss.usermodel.Workbook; | ||
12 | +import org.apache.poi.xssf.usermodel.XSSFWorkbook; | ||
8 | import org.springframework.http.ResponseEntity; | 13 | import org.springframework.http.ResponseEntity; |
9 | import org.springframework.security.access.prepost.PreAuthorize; | 14 | import org.springframework.security.access.prepost.PreAuthorize; |
10 | import org.springframework.validation.annotation.Validated; | 15 | import org.springframework.validation.annotation.Validated; |
11 | import org.springframework.web.bind.annotation.*; | 16 | import org.springframework.web.bind.annotation.*; |
17 | +import org.springframework.web.multipart.MultipartFile; | ||
12 | import org.thingsboard.server.common.data.exception.ThingsboardException; | 18 | import org.thingsboard.server.common.data.exception.ThingsboardException; |
13 | import org.thingsboard.server.common.data.yunteng.common.DeleteGroup; | 19 | import org.thingsboard.server.common.data.yunteng.common.DeleteGroup; |
14 | import org.thingsboard.server.common.data.yunteng.dto.BrainDeviceDTO; | 20 | import org.thingsboard.server.common.data.yunteng.dto.BrainDeviceDTO; |
@@ -18,7 +24,10 @@ import org.thingsboard.server.controller.BaseController; | @@ -18,7 +24,10 @@ import org.thingsboard.server.controller.BaseController; | ||
18 | import org.thingsboard.server.dao.yunteng.service.BrainDeviceService; | 24 | import org.thingsboard.server.dao.yunteng.service.BrainDeviceService; |
19 | import org.thingsboard.server.queue.util.TbCoreComponent; | 25 | import org.thingsboard.server.queue.util.TbCoreComponent; |
20 | 26 | ||
27 | +import java.io.InputStream; | ||
28 | +import java.util.ArrayList; | ||
21 | import java.util.HashMap; | 29 | import java.util.HashMap; |
30 | +import java.util.List; | ||
22 | import java.util.Map; | 31 | import java.util.Map; |
23 | 32 | ||
24 | import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.PAGE; | 33 | import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.PAGE; |
@@ -91,4 +100,67 @@ public class BrainDeviceController extends BaseController { | @@ -91,4 +100,67 @@ public class BrainDeviceController extends BaseController { | ||
91 | return ResponseResult.success(true); | 100 | return ResponseResult.success(true); |
92 | } | 101 | } |
93 | 102 | ||
103 | + @PostMapping("/import") | ||
104 | + public Map<String, Object> importDevices(@RequestParam("file") MultipartFile file) { | ||
105 | + Map<String, Object> result = new HashMap<>(); | ||
106 | + List<String> errors = new ArrayList<>(); | ||
107 | + int successCount = 0; | ||
108 | + //此接口未完成 | ||
109 | + try (InputStream inputStream = file.getInputStream()) { | ||
110 | + Workbook workbook = new XSSFWorkbook(inputStream); | ||
111 | + Sheet sheet = workbook.getSheetAt(0); | ||
112 | + | ||
113 | + for (int i = 1; i <= sheet.getLastRowNum(); i++) { | ||
114 | + Row row = sheet.getRow(i); | ||
115 | + if (row == null) { | ||
116 | + continue; | ||
117 | + } | ||
118 | + try { | ||
119 | + // 4. 解析单元格 | ||
120 | + String deviceId = getCellValue(row.getCell(0)); | ||
121 | + String deviceName = getCellValue(row.getCell(1)); | ||
122 | + String deviceType = getCellValue(row.getCell(2)); | ||
123 | + | ||
124 | + // 5. 数据校验逻辑 | ||
125 | + if(deviceId.isEmpty() || deviceName.isEmpty()){ | ||
126 | + throw new Exception("必填字段为空"); | ||
127 | + } | ||
128 | + | ||
129 | + // 6. 调用Service层保存设备(伪代码) | ||
130 | + // deviceService.save(new Device(deviceId, deviceName, deviceType)); | ||
131 | + successCount++; | ||
132 | + | ||
133 | + } catch (Exception e) { | ||
134 | + errors.add("第" + (i+1) + "行数据异常:" + e.getMessage()); | ||
135 | + } | ||
136 | + } | ||
137 | + result.put("success", true); | ||
138 | + result.put("total", successCount + errors.size()); | ||
139 | + result.put("successCount", successCount); | ||
140 | + result.put("errorList", errors); | ||
141 | + | ||
142 | + } catch (Exception e) { | ||
143 | + result.put("success", false); | ||
144 | + result.put("message", "文件处理失败:" + e.getMessage()); | ||
145 | + } | ||
146 | + return result; | ||
147 | + } | ||
148 | + | ||
149 | + // 通用单元格值获取方法 | ||
150 | + private String getCellValue(Cell cell) { | ||
151 | + if (cell == null) return ""; | ||
152 | + | ||
153 | + switch (cell.getCellType()) { | ||
154 | + case STRING: | ||
155 | + return cell.getStringCellValue().trim(); | ||
156 | + case NUMERIC: | ||
157 | + return String.valueOf((int)cell.getNumericCellValue()); | ||
158 | + case BOOLEAN: | ||
159 | + return String.valueOf(cell.getBooleanCellValue()); | ||
160 | + default: | ||
161 | + return ""; | ||
162 | + } | ||
163 | + } | ||
164 | + | ||
165 | + | ||
94 | } | 166 | } |