From 3d04e41bfc6ddb50e014967ff64fc8100d46bf6d Mon Sep 17 00:00:00 2001 From: XMnhwj_BackTechnologyDevelopment <3512363680@qq.com> Date: Mon, 15 May 2023 17:31:38 +0800 Subject: [PATCH] =?UTF-8?q?2023-05-15=2017:30:15=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=AE=8C=E5=96=84=E8=AE=BE=E5=A4=87=E7=AE=A1=E7=90=86=E7=9A=84?= =?UTF-8?q?=E5=A2=9E=E3=80=81=E5=88=A0=E3=80=81=E6=94=B9=E3=80=81=E6=9F=A5?= =?UTF-8?q?=E3=80=81=E5=AF=BC=E5=85=A5=E3=80=81=E6=A8=A1=E6=9D=BF=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=E3=80=81=E5=AF=BC=E5=87=BA=E6=8E=A5=E5=8F=A3!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/psdc/entity/PsdcDevice.java | 4 +- .../service/impl/PsdcDeviceServiceImpl.java | 17 +++----- .../mapper/business/PsdcDeviceMapper.xml | 9 +++++ .../manager/PsdcDeviceController.java | 38 +++++++++--------- .../resources/template/AllDevicesData.xlsx | Bin 9027 -> 9046 bytes 5 files changed, 33 insertions(+), 35 deletions(-) diff --git a/psdc-business/src/main/java/com/psdc/entity/PsdcDevice.java b/psdc-business/src/main/java/com/psdc/entity/PsdcDevice.java index cfa55f7..7f4a8dc 100644 --- a/psdc-business/src/main/java/com/psdc/entity/PsdcDevice.java +++ b/psdc-business/src/main/java/com/psdc/entity/PsdcDevice.java @@ -24,9 +24,6 @@ public class PsdcDevice { private Integer parentId; /** 用户id */ private Integer userId ; - /** 用户名称 */ - @Excel(name = "用户名称") - private String userName ; /** 设备是否可控 */ private Integer isControl; @@ -51,6 +48,7 @@ public class PsdcDevice { @Excel(name = "启用时间") private String startTime ; /** 设备模型 */ + @Excel(name = "设备模型") private String deviceModel; /** 设备状态:1-未激活,2-禁用,3-在线,4-离线 */ diff --git a/psdc-business/src/main/java/com/psdc/service/impl/PsdcDeviceServiceImpl.java b/psdc-business/src/main/java/com/psdc/service/impl/PsdcDeviceServiceImpl.java index d216f1e..89f0acd 100644 --- a/psdc-business/src/main/java/com/psdc/service/impl/PsdcDeviceServiceImpl.java +++ b/psdc-business/src/main/java/com/psdc/service/impl/PsdcDeviceServiceImpl.java @@ -87,7 +87,6 @@ public class PsdcDeviceServiceImpl implements IPsdcDeviceService { public List queryAllByLimit(PsdcDevice psdcDevice) { List list = psdcDeviceMapper.queryAllByLimit(psdcDevice); List ary = new ArrayList<>(); - List removeList = new ArrayList<>(); for (PsdcDeviceInfoRes dev : list){ // 导出时转换为String if (null != dev){ @@ -98,16 +97,6 @@ public class PsdcDeviceServiceImpl implements IPsdcDeviceService { } } } -// for (PsdcDeviceInfoRes dev : list){ -// // 剔除多设备父模型 -// for (Integer pId : ary){ -// if (dev.getDeviceId() == pId){ -// removeList.add(dev); -// } -// } -// } -// -// list.removeAll(removeList); return list; } @@ -143,12 +132,16 @@ public class PsdcDeviceServiceImpl implements IPsdcDeviceService { for (PsdcDevice pd : devices){ pd.setCreateBy(cjr); pd.setCreateTime(new Date()); - // pd.setDeviceType(Integer.parseInt(pd.getDevType())); + // 添加新设备时,默认父模型为根目录 + pd.setParentId(0); // 新导入的设备默认状态为: 未激活 // 新导入的设备默认启动时间为null,请在设备激活后手动修改! pd.setDeviceStatus(1); + // 添加新设备时,默认可以在能源监测设备列表显示,可以自己手动修改 + pd.setDeviceType(2); // 新导入的设备默认运行状态为: 关闭 pd.setDeviceRunstatus(2); + System.out.println("设备Infos: " + pd + "\n"); } psdcDeviceMapper.saveDevicesData(devices); return true; diff --git a/psdc-business/src/main/resources/mapper/business/PsdcDeviceMapper.xml b/psdc-business/src/main/resources/mapper/business/PsdcDeviceMapper.xml index b86b868..1c478ad 100644 --- a/psdc-business/src/main/resources/mapper/business/PsdcDeviceMapper.xml +++ b/psdc-business/src/main/resources/mapper/business/PsdcDeviceMapper.xml @@ -251,9 +251,15 @@ user_id = #{userId}, + + parent_id = #{parentId}, + device_type = #{deviceType}, + + device_model = #{deviceModel}, + device_sn = #{deviceSn}, @@ -281,6 +287,9 @@ photo_url = #{photoUrl}, + + is_control = #{isControl}, + create_by = #{createBy}, diff --git a/psdc-web/src/main/java/com/psdc/controller/manager/PsdcDeviceController.java b/psdc-web/src/main/java/com/psdc/controller/manager/PsdcDeviceController.java index e87e3f0..2a3fff9 100644 --- a/psdc-web/src/main/java/com/psdc/controller/manager/PsdcDeviceController.java +++ b/psdc-web/src/main/java/com/psdc/controller/manager/PsdcDeviceController.java @@ -108,12 +108,12 @@ public class PsdcDeviceController extends BaseController { @Log(title = "设备管理", businessType = BusinessType.EXPORT) @RequestMapping(value = "/daochuDevs", method = RequestMethod.POST) public void daochuDevDta(HttpServletResponse response, @RequestBody PsdcDevice pd) { -// List list = psdcDeviceService.queryAllByLimit(pd); -// for (PsdcDevice dev : list){ -// dev.setUserName(sysUserService.selectUserById(Long.valueOf(dev.getUserId())).getUserName()); -// } -// ExcelUtil util = new ExcelUtil<>(PsdcDevice.class); -// util.exportExcel(response, list, "角色数据"); + List list = psdcDeviceService.queryAllByLimit(pd); + for (PsdcDeviceInfoRes dev : list){ + dev.setUserName(sysUserService.selectUserById(Long.valueOf(dev.getUserId())).getUserName()); + } + ExcelUtil util = new ExcelUtil<>(PsdcDeviceInfoRes.class); + util.exportExcel(response, list, "设备信息数据"); } /** @@ -132,21 +132,19 @@ public class PsdcDeviceController extends BaseController { response.setContentType("application/vnd.ms-template;charset=UTF-8"); // 获取文件的路径 try (InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("template/AllDevicesData.xlsx")) { - //读取excel模板 + // 读取excel模板 XSSFWorkbook wb = new XSSFWorkbook(inputStream); - wb.setSelectedTab(1); - XSSFSheet sheet = wb.createSheet("设备类型表"); - XSSFRow row0 = sheet.createRow(0); - XSSFRow row1 = sheet.createRow(1); - XSSFRow row2 = sheet.createRow(2); - row0.createCell(0).setCellValue("设备类型Id"); - row0.createCell(1).setCellValue("设备类型名称"); - row1.createCell(0).setCellValue("1"); - row1.createCell(1).setCellValue("监测设备"); - row2.createCell(0).setCellValue("2"); - row2.createCell(1).setCellValue("运行设备"); - - +// wb.setSelectedTab(1); +// XSSFSheet sheet = wb.createSheet("设备类型表"); +// XSSFRow row0 = sheet.createRow(0); +// XSSFRow row1 = sheet.createRow(1); +// XSSFRow row2 = sheet.createRow(2); +// row0.createCell(0).setCellValue("设备类型Id"); +// row0.createCell(1).setCellValue("设备类型名称"); +// row1.createCell(0).setCellValue("1"); +// row1.createCell(1).setCellValue("监测设备"); +// row2.createCell(0).setCellValue("2"); +// row2.createCell(1).setCellValue("运行设备"); OutputStream os = new BufferedOutputStream(response.getOutputStream()); wb.write(os); os.flush(); diff --git a/psdc-web/src/main/resources/template/AllDevicesData.xlsx b/psdc-web/src/main/resources/template/AllDevicesData.xlsx index 7f033176e082e58fe64ea5b37d591fa18d79000f..b4c68f14d48ce9a53844939f0f28550f42aaff2b 100644 GIT binary patch delta 4706 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 B!aD!} delta 4635 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 C6tG4B