iailab-module-bpm/iailab-module-bpm-biz/src/main/resources/application-dev.yaml
@@ -39,7 +39,7 @@ primary: master datasource: master: url: jdbc:mysql://127.0.0.1:3306/iailab-plat?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 url: jdbc:mysql://127.0.0.1:3306/iailab_plat_system?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 # url: jdbc:mysql://127.0.0.1:3306/iailab-plat?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai # MySQL Connector/J 5.X 连接的示例 # url: jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro # PostgreSQL 连接的示例 # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/controller/admin/DaPointController.java
@@ -166,7 +166,7 @@ if (end == null) { queryDto.setEnd(new Date()); } else { queryDto.setStart(formatter.parse(end)); queryDto.setEnd(formatter.parse(end)); } } catch (ParseException e) { e.printStackTrace(); iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/video/hikvision/utils/HIKDevice.java
@@ -180,6 +180,7 @@ String tPath = tDatePath + "/" + tImageName; // 开始抓图 if (!hCNetSDK.NET_DVR_CaptureJPEGPicture(nlUserID, nChannel, lpJpegPara, tPath)) { VideoConfiguration.staticCameraService.setStatus(camera.getId(), CameraStatusEnum.OFFLINE.getCode()); return "失败编码:" + hCNetSDK.NET_DVR_GetLastError(); } else { Map<String, String> params = new HashMap<>(); iailab-module-model/iailab-module-model-biz/db/mysql.sql
@@ -590,7 +590,7 @@ `file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '文件名', `file_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '文件保存路径', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注', `create_time` timestamp NULL DEFAULT NULL COMMENT '生成时间', `create_time` datetime NULL DEFAULT NULL COMMENT '生成时间', PRIMARY KEY (`id`, `mdk_id`) USING BTREE, INDEX `del_code_history`(`mdk_id` ASC) USING BTREE, CONSTRAINT `del_code_history` FOREIGN KEY (`mdk_id`) REFERENCES `t_mpk_file` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT @@ -663,8 +663,8 @@ `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'id', `project_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '项目名称', `project_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '项目编码', `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间', `update_time` timestamp NULL DEFAULT NULL COMMENT '修改时间', `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '项目表' ROW_FORMAT = DYNAMIC; @@ -697,7 +697,7 @@ `version` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '版本号', `log` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '更新日志', `model_names` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '打包模型名称(“,”分割)', `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间', `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`, `project_id`) USING BTREE, INDEX `del_package_history`(`project_id` ASC) USING BTREE, CONSTRAINT `del_package_history` FOREIGN KEY (`project_id`) REFERENCES `t_mpk_project` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT @@ -802,8 +802,8 @@ `id` varchar(36) NOT NULL, `chart_name` varchar(100) DEFAULT NULL COMMENT '图表名称', `chart_code` varchar(100) DEFAULT NULL COMMENT '图表编码', `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间', `update_time` timestamp NULL DEFAULT NULL COMMENT '修改时间', `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_chart_code` (`chart_code`), KEY `index_id` (`id`) @@ -817,8 +817,8 @@ `param_code` varchar(100) DEFAULT NULL COMMENT '参数编码', `param_value` varchar(1000) DEFAULT NULL COMMENT '参数值', `remark` varchar(255) DEFAULT NULL COMMENT '备注', `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间', `update_time` timestamp NULL DEFAULT NULL COMMENT '修改时间', `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', PRIMARY KEY (`id`, `chart_id`) USING BTREE, KEY `index_chart_id` (`chart_id`), CONSTRAINT `chart_id` FOREIGN KEY (`chart_id`) REFERENCES `t_chart` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/controller/admin/McsApiController.java
@@ -1,20 +1,31 @@ package com.iailab.module.model.api.controller.admin; import com.iailab.framework.apilog.core.annotation.ApiAccessLog; import com.iailab.framework.common.pojo.CommonResult; import com.iailab.framework.excel.core.util.ExcelUtils; import com.iailab.module.data.api.point.dto.ApiPointValueQueryDTO; import com.iailab.module.model.api.mcs.McsApi; import com.iailab.module.model.api.mcs.dto.*; import com.iailab.module.model.common.utils.ApiSecurityUtils; import com.iailab.module.model.common.utils.ExcelUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.annotation.security.PermitAll; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.LinkedHashMap; import java.util.List; import static com.iailab.framework.apilog.core.enums.OperateTypeEnum.EXPORT; /** * @author PanZhibao @@ -77,4 +88,38 @@ PreDataItemChartRespVO respVO = mcsApi.getPreDataSingleChart(reqVO); return CommonResult.success(respVO); } @GetMapping("/predict-data/exportValue") @Operation(summary = "导出预测数据") @ApiAccessLog(operateType = EXPORT) public void exportPointValue(@RequestParam("itemId") String itemId, @RequestParam("startTime") String startTime, @RequestParam("endTime") String endTime, HttpServletResponse response) throws IOException { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); PreDataItemChartReqVO reqVO = new PreDataItemChartReqVO(); reqVO.setItemId(itemId); try { if (startTime == "") { reqVO.setStartTime(new Date((new Date()).getTime() - 60*60*1000)); } else { reqVO.setStartTime(formatter.parse(startTime)); } if (endTime == "") { reqVO.setEndTime(new Date((new Date()).getTime() + 60*60*1000)); } else { reqVO.setEndTime(formatter.parse(endTime)); } } catch (Exception e) { e.printStackTrace(); } PreDataItemChartRespVO respVO = mcsApi.getPreDataItemChart(reqVO); try { String sheetTitle = "sheet1"; ExcelUtil.exportchart(sheetTitle, respVO, response); } catch (Exception ex) { ex.printStackTrace(); } } } iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/utils/ExcelUtil.java
对比新文件 @@ -0,0 +1,292 @@ package com.iailab.module.model.common.utils; import com.iailab.module.model.api.mcs.dto.PreDataItemChartRespVO; import com.iailab.module.model.api.mcs.dto.PreDataSampleViewRespDTO; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.apache.poi.ss.usermodel.VerticalAlignment; import org.apache.poi.ss.util.CellRangeAddress; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.OutputStream; import java.lang.reflect.Field; import java.text.SimpleDateFormat; import java.util.Date; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; /** * Excel 导出通用工具类 * * @author PanZhibao * @date 2021年06月29日 9:06 */ public class ExcelUtil { /** * 导出PointValueExcel * * @param sheetTitle * @param title * @param list * @param response * @return */ public static byte[] exportPointValue(String sheetTitle, String[] title, List<Object> list, HttpServletResponse response) { HSSFWorkbook wb = new HSSFWorkbook();//创建excel表 HSSFSheet sheet = wb.createSheet(sheetTitle); sheet.setDefaultColumnWidth(20);//设置默认行宽 //表头样式(加粗,水平居中,垂直居中) HSSFCellStyle cellStyle = wb.createCellStyle(); cellStyle.setAlignment(HorizontalAlignment.CENTER);//水平居中 cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中 HSSFFont fontStyle = wb.createFont(); cellStyle.setFont(fontStyle); //标题样式(加粗,垂直居中) HSSFCellStyle cellStyle2 = wb.createCellStyle(); cellStyle2.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中 cellStyle2.setFont(fontStyle); //字段样式(垂直居中) HSSFCellStyle cellStyle3 = wb.createCellStyle(); cellStyle3.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中 //数字样式 HSSFCellStyle cellStyle4 = wb.createCellStyle(); HSSFDataFormat df = wb.createDataFormat(); // 此处设置数据格式 cellStyle4.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中 cellStyle4.setDataFormat(df.getFormat("#,##0.000000"));//设置数值类型格式为保留两位小数 //创建表头 HSSFRow row = sheet.createRow(0); //row.setHeightInPoints(20);//行高 HSSFCell cell = row.createCell(0); cell.setCellValue(sheetTitle); cell.setCellStyle(cellStyle); sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, (title.length - 1))); //创建标题 HSSFRow rowTitle = sheet.createRow(1); //rowTitle.setHeightInPoints(20); HSSFCell hc; for (int i = 0; i < title.length; i++) { hc = rowTitle.createCell(i); hc.setCellValue(title[i]); hc.setCellStyle(cellStyle2); } byte result[] = null; try { //创建表格数据 Field[] fields; int i = 2; for (Object obj : list) { fields = obj.getClass().getDeclaredFields(); HSSFRow rowBody = sheet.createRow(i); //rowBody.setHeightInPoints(20); int j = 0; for (Field f : fields) { f.setAccessible(true); Object va = f.get(obj); if (null == va) { va = ""; } hc = rowBody.createCell(j); if (j == 0) { hc.setCellValue(Double.parseDouble(va.toString())); hc.setCellStyle(cellStyle4); } else { hc.setCellValue(va.toString()); hc.setCellStyle(cellStyle3); } j++; } i++; } //设置Http响应头告诉浏览器下载这个附件 response.setHeader("Content-Disposition", "attachment;Filename=" + System.currentTimeMillis() + ".xls"); OutputStream outputStream = response.getOutputStream(); wb.write(outputStream); outputStream.close(); return wb.getBytes(); } catch (Exception ex) { Logger.getLogger(ExcelUtil.class.getName()).log(Level.SEVERE, null, ex); return result; } finally { try { wb.close(); } catch (IOException ex) { Logger.getLogger(ExcelUtil.class.getName()).log(Level.SEVERE, null, ex); } } } //预测图表数据转excel public static byte[] exportchart(String sheetTitle, PreDataItemChartRespVO respVO, HttpServletResponse response) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(sheetTitle); sheet.setDefaultColumnWidth(20);//设置默认行宽 // 表头样式(加粗,水平居中,垂直居中) HSSFCellStyle cellStyle = wb.createCellStyle(); cellStyle.setAlignment(HorizontalAlignment.CENTER); cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); HSSFFont fontStyle = wb.createFont(); cellStyle.setFont(fontStyle); // 标题样式(加粗,垂直居中) HSSFCellStyle cellStyle2 = wb.createCellStyle(); cellStyle2.setVerticalAlignment(VerticalAlignment.CENTER); cellStyle2.setFont(fontStyle); // 字段样式(垂直居中) HSSFCellStyle cellStyle3 = wb.createCellStyle(); cellStyle3.setVerticalAlignment(VerticalAlignment.CENTER); // 数字样式 HSSFCellStyle cellStyle4 = wb.createCellStyle(); HSSFDataFormat df = wb.createDataFormat(); cellStyle4.setVerticalAlignment(VerticalAlignment.CENTER); cellStyle4.setDataFormat(df.getFormat("#,##0.000000")); // 创建标题 String[] title = new String[respVO.getLegend().size() * 4]; for (int i = 0; respVO.getLegend().size() > i; i++) { title[i * 4] = "日期时间"; title[i * 4 + 1] = respVO.getLegend().get(i) + ":真实值"; title[i * 4 + 2] = "日期时间"; title[i * 4 + 3] = respVO.getLegend().get(i) + ":预测值"; } HSSFRow rowTitle = sheet.createRow(0); HSSFCell hc; for (int i = 0; i < title.length; i++) { hc = rowTitle.createCell(i); hc.setCellValue(title[i]); hc.setCellStyle(cellStyle2); } LinkedHashMap<String, PreDataSampleViewRespDTO> viewMap = respVO.getViewMap(); byte result[] = null; try { // 创建表格数据 //逐列插入 for (int j = 0; viewMap.size() > j; j++) { //去掉标题行,从第一行开始 //逐行插入 for (Map.Entry<String, PreDataSampleViewRespDTO> entry : viewMap.entrySet()) { //真实值 List<Object[]> realData = entry.getValue().getRealData(); //预测值 List<Object[]> preDataN = entry.getValue().getPreDataN(); HSSFRow rowBody; //插入真实值 for (int i = 0; realData.size() > i; i++) { //判断是否创建过行,如果没有创建行,否则更新行 if (sheet.getRow(i + 1) == null) { rowBody = sheet.createRow(i + 1); } else { rowBody = sheet.getRow(i + 1); } //插入时间 hc = rowBody.createCell(j * 4); if (realData.get(i)[0] != null) { if (realData.get(i)[0] instanceof Date) { String formattedDate = sdf.format(realData.get(i)[0]); hc.setCellValue(formattedDate); } else { hc.setCellValue(realData.get(i)[0].toString()); } hc.setCellStyle(cellStyle3); } else { hc.setCellValue(""); hc.setCellStyle(cellStyle3); } //插入值 hc = rowBody.createCell(j * 4 + 1); if (realData.get(i)[1] != null) { hc.setCellValue(realData.get(i)[1].toString()); hc.setCellStyle(cellStyle4); } else { hc.setCellValue(""); hc.setCellStyle(cellStyle4); } } //插入预测值 for (int i = 0; preDataN.size() > i; i++) { //判断是否创建过行,如果没有创建行,否则更新行 if (sheet.getRow(i + 1) == null) { rowBody = sheet.createRow(i + 1); } else { rowBody = sheet.getRow(i + 1); } //插入时间 hc = rowBody.createCell(j * 4 + 2); if (preDataN.get(i)[0] != null) { if (preDataN.get(i)[0] instanceof Date) { String formattedDate = sdf.format(preDataN.get(i)[0]); hc.setCellValue(formattedDate); } else { hc.setCellValue(preDataN.get(i)[0].toString()); } hc.setCellStyle(cellStyle3); } else { hc.setCellValue(""); hc.setCellStyle(cellStyle3); } //插入值 hc = rowBody.createCell(j * 4 + 3); if (preDataN.get(i)[1] != null) { hc.setCellValue(preDataN.get(i)[1].toString()); hc.setCellStyle(cellStyle4); } else { hc.setCellValue(""); hc.setCellStyle(cellStyle4); } } } } // 设置Http响应头告诉浏览器下载这个附件 response.setHeader("Content-Disposition", "attachment;Filename=" + System.currentTimeMillis() + ".xls"); OutputStream outputStream = response.getOutputStream(); wb.write(outputStream); outputStream.close(); return wb.getBytes(); } catch (Exception ex) { Logger.getLogger(ExcelUtil.class.getName()).log(Level.SEVERE, null, ex); return result; } finally { try { wb.close(); } catch (IOException ex) { Logger.getLogger(ExcelUtil.class.getName()).log(Level.SEVERE, null, ex); } } } } iailab-module-report/iailab-module-report-biz/src/main/resources/application-dev.yaml
@@ -39,7 +39,7 @@ primary: master datasource: master: url: jdbc:mysql://127.0.0.1:3306/iailab-plat?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 url: jdbc:mysql://127.0.0.1:3306/iailab_plat_system?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 username: root password: 123456 slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 @@ -50,10 +50,10 @@ # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 redis: host: 400-infra.server.iocoder.cn # 地址 host: 127.0.0.1 # 地址 port: 6379 # 端口 database: 1 # 数据库索引 # password: 123456 # 密码,建议生产环境开启 password: 123456 # 密码,建议生产环境开启 --- #################### MQ 消息队列相关配置 #################### iailab-module-report/iailab-module-report-biz/src/main/resources/application.yaml
@@ -3,7 +3,7 @@ name: report-server profiles: active: ${spring.profiles.active} active: @profiles.active@ cloud: nacos: iailab-module-report/iailab-module-report-biz/src/main/resources/bootstrap-local.yaml
文件已删除 iailab-module-report/iailab-module-report-biz/src/main/resources/bootstrap.yaml
文件已删除