Browse Source

Merge pull request 'dev-xjf' (#24) from dev-xjf into master

Reviewed-on: http://120.26.116.243:3000/root/alert-backend/pulls/24
YKS
xiaojinfei 2 weeks ago
parent
commit
f42ba68fdc
  1. 42
      yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/util/ExcelUtils.java
  2. 7
      yudao-framework/yudao-spring-boot-starter-mybatis/pom.xml
  3. 40
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/device/DeviceController.java
  4. 37
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/device/vo/DeviceRespVO.java
  5. 11
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/exa/EXAController.java
  6. 21
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/InstantCalcController.java
  7. 7
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantPageReqVO.java
  8. 46
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/device/DeviceDO.java
  9. 10
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/device/DeviceMapper.java
  10. 3
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/instant/InstantMapper.java
  11. 16
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/device/DeviceService.java
  12. 52
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/device/DeviceServiceImpl.java
  13. 14
      yudao-server/src/main/resources/application-local.yaml

42
yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/util/ExcelUtils.java

@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.util.http.HttpUtils;
import cn.iocoder.yudao.framework.excel.core.handler.SelectSheetWriteHandler;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.converters.longconverter.LongStringConverter;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;
@ -54,4 +55,45 @@ public class ExcelUtils {
.doReadAllSync();
}
/**
* 将列表以 CSV 响应给前端
*
* @param response 响应
* @param filename 文件名
* @param sheetName Excel sheet
* @param head Excel head
* @param data 数据列表哦
* @param <T> 泛型保证 head data 类型的一致性
* @throws IOException 写入失败的情况
*/
public static <T> void writeCSV(HttpServletResponse response, String filename, String sheetName,
Class<T> head, List<T> data) throws IOException {
response.setHeader("Content-Disposition", "attachment;filename=" + HttpUtils.encodeUtf8(filename));
// response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setContentType("application/vnd.opencmlformats-officedocument.spreadsheetml.sheet");
// 输出 Excel
EasyExcel.write(response.getOutputStream(), head)
.excelType(ExcelTypeEnum.CSV)
.autoCloseStream(false) // 不要自动关闭,交给 Servlet 自己处理
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 基于 column 长度,自动适配。最大 255 宽度
.registerWriteHandler(new SelectSheetWriteHandler(head)) // 基于固定 sheet 实现下拉框
.registerConverter(new LongStringConverter()) // 避免 Long 类型丢失精度
.sheet(sheetName).doWrite(data);
// 设置 header 和 contentType。写在最后的原因是,避免报错时,响应 contentType 已经被修改了
response.setHeader("Content-Disposition", "attachment;filename=" + HttpUtils.encodeUtf8(filename));
// response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setContentType("application/vnd.opencmlformats-officedocument.spreadsheetml.sheet");
}
public static <T> List<T> readCSV(MultipartFile file, Class<T> head) throws IOException {
return EasyExcel.read(file.getInputStream(), head, null)
.excelType(ExcelTypeEnum.CSV)
.autoCloseStream(false) // 不要自动关闭,交给 Servlet 自己处理
.doReadAllSync();
}
}

7
yudao-framework/yudao-spring-boot-starter-mybatis/pom.xml

@ -46,8 +46,15 @@
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>11.2.0.jre11</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
</dependency>
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>

40
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/device/DeviceController.java

@ -0,0 +1,40 @@
package cn.iocoder.yudao.module.alert.controller.admin.device;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.alert.controller.admin.calcgroup.vo.CalcGroupPageReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.calcgroup.vo.CalcGroupRespVO;
import cn.iocoder.yudao.module.alert.controller.admin.device.vo.DeviceRespVO;
import cn.iocoder.yudao.module.alert.dal.dataobject.calcgroup.CalcGroupDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.device.DeviceDO;
import cn.iocoder.yudao.module.alert.service.calcgroup.CalcGroupService;
import cn.iocoder.yudao.module.alert.service.device.DeviceService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Comparator;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Tag(name = "设备 - 设备首页")
@RestController
@RequestMapping("/device")
@Validated
public class DeviceController {
@Resource
private DeviceService deviceService;
@GetMapping("/info")
@Operation(summary = "获取页面属性", description = "用于构造前端页面")
public CommonResult<DeviceRespVO> getdeviceInfo(Long id) {
DeviceDO list = deviceService.getDeviceInfo(id);
return success(BeanUtils.toBean(list, DeviceRespVO.class));
}
}

37
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/device/vo/DeviceRespVO.java

@ -0,0 +1,37 @@
package cn.iocoder.yudao.module.alert.controller.admin.device.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "设备 - 设备首页")
@Data
@ExcelIgnoreUnannotated
public class DeviceRespVO {
@JsonProperty("ID")
@Schema(description = "id", example = "id")
private Long id;
@JsonProperty("Unit_ID")
@Schema(description = "机组id", example = "id")
private Long unitId;
@JsonProperty("System_ID")
@Schema(description = "系统id", example = "id")
private Long systemId;
@JsonProperty("Name")
@Schema(description = "页面名称", example = "yudao")
private String name;
@JsonProperty("Page_Content")
@Schema(description = "页面信息", example = "yudao")
private String pageContent;
}

11
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/exa/EXAController.java

@ -105,8 +105,13 @@ public class EXAController {
Point.builder().ItemName("gbqegj").GroupName("test").ItemType(5).Descriptor("fqnewfej")
.EngUnits("ge").Source("批量录入").AutoSave(true).build()
);
// 输出
ExcelUtils.write(response, "用户导入模板.xls", "测点列表", Point.class, list);
// 输出excel
// ExcelUtils.write(response, "用户导入模板.xls", "测点列表", Point.class, list);
//输出csv
ExcelUtils.writeCSV(response, "用户导入模板.csv", "测点列表", Point.class, list);
}
@PostMapping("/import")
@ -119,7 +124,7 @@ public class EXAController {
public CommonResult<EXAPointImportRespVO> importExcel(@RequestParam("file") MultipartFile file,
@RequestParam(value = "updateSupport", required = false, defaultValue = "false") Boolean updateSupport) throws Exception {
System.out.println(file);
List<Point> list = ExcelUtils.read(file, Point.class);
List<Point> list = ExcelUtils.readCSV(file, Point.class);
return success(exaService.importPointList(list, updateSupport));
}

21
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/InstantCalcController.java

@ -0,0 +1,21 @@
package cn.iocoder.yudao.module.alert.controller.admin.instant;
import cn.iocoder.yudao.module.alert.service.instant.InstantService;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Tag(name = "运行中心 - 模型实例-回算")
@RestController
@RequestMapping("/alert/instant/calc")
@Validated
public class InstantCalcController {
@Resource
private InstantService instantService;
}

7
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantPageReqVO.java

@ -10,8 +10,13 @@ import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
public class InstantPageReqVO extends PageParam {
@Schema(description = "机组id", example = "id")
private Integer unitId;
private Integer unit;
@Schema(description = "系统id", example = "id")
private Integer type;
@Schema(description = "子系统id", example = "id")
private Integer system;
@Schema(description = "系统id", example = "yudao")
private Integer modelId;

46
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/device/DeviceDO.java

@ -0,0 +1,46 @@
package cn.iocoder.yudao.module.alert.dal.dataobject.device;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@DS("slave")
@TableName(value = "Page_Display", autoResultMap = true)
@KeySequence("system_role_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = false)
public class DeviceDO {
@TableId("ID")
@Schema(description = "id", example = "id")
private Long id;
@TableField("Unit_ID")
@Schema(description = "机组id", example = "id")
private Long unitId;
@TableField("System_ID")
@Schema(description = "系统id", example = "id")
private Long systemId;
@TableField("Name")
@Schema(description = "页面名称", example = "yudao")
private String name;
@TableField("Page_Content")
@Schema(description = "页面信息", example = "yudao")
private String pageContent;
}

10
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/device/DeviceMapper.java

@ -0,0 +1,10 @@
package cn.iocoder.yudao.module.alert.dal.mysql.device;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.alert.dal.dataobject.device.DeviceDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.instant.InstantTableDO;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface DeviceMapper extends BaseMapperX<DeviceDO> {
}

3
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/instant/InstantMapper.java

@ -17,6 +17,9 @@ public interface InstantMapper extends BaseMapperX<InstantDO> {
.eqIfPresent(InstantDO::getIsUpdate,reqVO.getIsUpdate())
.eqIfPresent(InstantDO::getRunning,reqVO.getRunning())
.eqIfPresent(InstantDO::getRunningLog,reqVO.getRunningLog())
.eqIfPresent(InstantDO::getUnitId,reqVO.getUnit())
.eqIfPresent(InstantDO::getSystemTypeId,reqVO.getType())
.eqIfPresent(InstantDO::getSystemId,reqVO.getSystem())
.orderByAsc(InstantDO::getId));
}

16
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/device/DeviceService.java

@ -0,0 +1,16 @@
package cn.iocoder.yudao.module.alert.service.device;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.alert.controller.admin.instant.vo.*;
import cn.iocoder.yudao.module.alert.dal.dataobject.device.DeviceDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.instant.InstantDO;
import jakarta.validation.Valid;
import java.io.IOException;
import java.util.List;
public interface DeviceService {
DeviceDO getDeviceInfo(Long id);
}

52
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/device/DeviceServiceImpl.java

@ -0,0 +1,52 @@
package cn.iocoder.yudao.module.alert.service.device;
import cn.hutool.core.util.ObjUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.alert.controller.admin.exa.vo.Point;
import cn.iocoder.yudao.module.alert.controller.admin.instant.vo.*;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.RunModelInfoVO;
import cn.iocoder.yudao.module.alert.dal.dataobject.device.DeviceDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.instant.InstantDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.instant.InstantTableDO;
import cn.iocoder.yudao.module.alert.dal.mysql.device.DeviceMapper;
import cn.iocoder.yudao.module.alert.dal.mysql.instant.InstantMapper;
import cn.iocoder.yudao.module.alert.dal.mysql.instant.InstantTableMapper;
import cn.iocoder.yudao.module.alert.utils.EXAUtils;
import cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.dynamic.datasource.annotation.Slave;
import com.google.common.annotations.VisibleForTesting;
import com.mzt.logapi.context.LogRecordContext;
import com.mzt.logapi.service.impl.DiffParseFunction;
import com.mzt.logapi.starter.annotation.LogRecord;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.INSTANT_NOT_EXISTS;
import static cn.iocoder.yudao.module.system.enums.LogRecordConstants.*;
@Slave
@Service
@Slf4j
public class DeviceServiceImpl implements DeviceService {
@Resource
private DeviceMapper deviceMapper;
@Override
public DeviceDO getDeviceInfo(Long id) {
return deviceMapper.selectById(id);
}
}

14
yudao-server/src/main/resources/application-local.yaml

@ -40,7 +40,7 @@ spring:
time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
validation-query: SELECT 1 # 配置检测连接是否有效
test-while-idle: true
test-on-borrow: false
test-on-return: false
@ -64,10 +64,12 @@ spring:
# username: root # OpenGauss 连接的示例
# password: Yudao@2024 # OpenGauss 连接的示例
slave: # 模拟从库,可根据自己需要修改
lazy: true # 开启懒加载,保证启动速度
url: jdbc:mysql://120.26.116.243:3306/alert?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&nullCatalogMeansCurrent=true
username: root
password: 123456
# lazy: true # 开启懒加载,保证启动速度
# url: jdbc:mysql://120.26.116.243:3306/alert?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&nullCatalogMeansCurrent=true
url: jdbc:sqlserver://47.98.32.148:1433;DatabaseName=alert # SQLServer 连接的示例
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
username: sa
password: powerSIS#123
# tdengine: # IoT 数据库(需要 IoT 物联网再开启噢!)
# url: jdbc:TAOS-RS://127.0.0.1:6041/ruoyi_vue_pro
# driver-class-name: com.taosdata.jdbc.rs.RestfulDriver
@ -271,7 +273,7 @@ pf4j:
# pluginsDir: /tmp/
pluginsDir: ../plugins
EXA:
ip: 120.26.116.243
ip: 120.27.236.75
point:
head: XN.
algorithm:

Loading…
Cancel
Save