From 303fb35ae9b82dba080430e5309504fbeff7582a Mon Sep 17 00:00:00 2001 From: lisai Date: Fri, 22 Jul 2022 12:19:58 +0800 Subject: [PATCH] . --- pom.xml | 5 + .../controller/DeviceInfoController.java | 22 ++- .../zhdbaqapi/mapper/DeviceInfoMapper.java | 16 ++ .../zhdbaqapi/model/dto/FindDeviceDto.java | 2 +- .../zhdbaqapi/model/dto/StationCodeDto.java | 6 +- .../zhdbaqapi/model/entity/DeviceInfo.java | 148 +++++++++++------- .../whdc/zhdbaqapi/model/vo/DeviceDataVo.java | 8 +- .../zhdbaqapi/model/vo/DeviceInfoImpVo.java | 33 ++++ .../zhdbaqapi/service/IDeviceInfoService.java | 10 ++ .../service/impl/DeviceDataServiceImpl.java | 2 +- .../service/impl/DeviceInfoServiceimpl.java | 84 +++++++++- .../resources/mapper/DeviceInfoMapper.xml | 14 ++ 12 files changed, 282 insertions(+), 68 deletions(-) create mode 100644 src/main/java/com/whdc/zhdbaqapi/model/vo/DeviceInfoImpVo.java diff --git a/pom.xml b/pom.xml index 6ba78a5..bbaf3d8 100644 --- a/pom.xml +++ b/pom.xml @@ -65,6 +65,11 @@ org.springframework.boot spring-boot-starter-cache + + cn.afterturn + easypoi-spring-boot-starter + 4.4.0 + diff --git a/src/main/java/com/whdc/zhdbaqapi/controller/DeviceInfoController.java b/src/main/java/com/whdc/zhdbaqapi/controller/DeviceInfoController.java index 2cc6d4b..8d1b913 100644 --- a/src/main/java/com/whdc/zhdbaqapi/controller/DeviceInfoController.java +++ b/src/main/java/com/whdc/zhdbaqapi/controller/DeviceInfoController.java @@ -1,20 +1,23 @@ package com.whdc.zhdbaqapi.controller; +import cn.afterturn.easypoi.excel.ExcelImportUtil; +import cn.afterturn.easypoi.excel.entity.ImportParams; import com.baomidou.mybatisplus.core.metadata.IPage; import com.whdc.zhdbaqapi.model.dto.FindDeviceDto; import com.whdc.zhdbaqapi.model.dto.IntegerIdDto; import com.whdc.zhdbaqapi.model.dto.StationCodeDto; import com.whdc.zhdbaqapi.model.entity.DeviceInfo; +import com.whdc.zhdbaqapi.model.vo.DeviceInfoImpVo; import com.whdc.zhdbaqapi.service.IDeviceInfoService; import com.whdc.zhdbaqapi.utils.ResultJson; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; -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 org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -25,6 +28,7 @@ import java.util.List; @Api(tags = "设备信息 - Controller") @RestController @RequestMapping("/v1/deviceInfo") +@Slf4j public class DeviceInfoController { @Autowired @@ -71,4 +75,14 @@ public class DeviceInfoController { public ResultJson> page(@RequestBody FindDeviceDto findDto) { return ResultJson.ok(iDeviceInfoService.page(findDto)); } + + @ApiOperation(value = "Excel数据导入") + @PostMapping("/imp") + public ResultJson imp(@RequestParam(value = "file") @RequestPart MultipartFile file) throws Exception { + if(file == null){ + return ResultJson.error("无效文件"); + } + + return ResultJson.ok(iDeviceInfoService.imp(file.getInputStream())); + } } diff --git a/src/main/java/com/whdc/zhdbaqapi/mapper/DeviceInfoMapper.java b/src/main/java/com/whdc/zhdbaqapi/mapper/DeviceInfoMapper.java index 768e70a..c51efba 100644 --- a/src/main/java/com/whdc/zhdbaqapi/mapper/DeviceInfoMapper.java +++ b/src/main/java/com/whdc/zhdbaqapi/mapper/DeviceInfoMapper.java @@ -8,6 +8,7 @@ import com.whdc.zhdbaqapi.model.entity.SysUser; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Set; /** * @author 李赛 @@ -32,4 +33,19 @@ public interface DeviceInfoMapper extends BaseMapper { * @return */ IPage page(@Param("page") IPage page, @Param("obj") FindDeviceDto findDto); + + /** + * 按 stationCode 查询 + * + * @param scs + * @return + */ + List listBySC(Set scs); + + /** + * 检查 station_code 是否有效 + * @param stationCode + * @return + */ + DeviceInfo checkValidStationCode(String stationCode); } diff --git a/src/main/java/com/whdc/zhdbaqapi/model/dto/FindDeviceDto.java b/src/main/java/com/whdc/zhdbaqapi/model/dto/FindDeviceDto.java index a5c9f17..7982f7e 100644 --- a/src/main/java/com/whdc/zhdbaqapi/model/dto/FindDeviceDto.java +++ b/src/main/java/com/whdc/zhdbaqapi/model/dto/FindDeviceDto.java @@ -12,6 +12,6 @@ public class FindDeviceDto extends FindPageDto { @ApiModelProperty(value = "站点编码", dataType = "java.lang.String") private String deviceId; - @ApiModelProperty(value = "测头编码", dataType = "java.lang.String") + @ApiModelProperty(value = "测点编号", dataType = "java.lang.String") private String stationCode; } diff --git a/src/main/java/com/whdc/zhdbaqapi/model/dto/StationCodeDto.java b/src/main/java/com/whdc/zhdbaqapi/model/dto/StationCodeDto.java index 5e045fb..7b64d55 100644 --- a/src/main/java/com/whdc/zhdbaqapi/model/dto/StationCodeDto.java +++ b/src/main/java/com/whdc/zhdbaqapi/model/dto/StationCodeDto.java @@ -15,8 +15,8 @@ import java.io.Serializable; public class StationCodeDto implements Serializable { private static final long serialVersionUID = 1L; - @ApiParam(value = "测头编码", example = "") - @ApiModelProperty(value = "测头编码", dataType = "java.lang.String") - @NotBlank(message = "测头编码") + @ApiParam(value = "测点编号", example = "") + @ApiModelProperty(value = "测点编号", dataType = "java.lang.String") + @NotBlank(message = "测点编号") private String stationCode; } diff --git a/src/main/java/com/whdc/zhdbaqapi/model/entity/DeviceInfo.java b/src/main/java/com/whdc/zhdbaqapi/model/entity/DeviceInfo.java index 27b280e..5b40fc3 100644 --- a/src/main/java/com/whdc/zhdbaqapi/model/entity/DeviceInfo.java +++ b/src/main/java/com/whdc/zhdbaqapi/model/entity/DeviceInfo.java @@ -1,5 +1,6 @@ package com.whdc.zhdbaqapi.model.entity; +import cn.afterturn.easypoi.excel.annotation.Excel; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -41,11 +42,12 @@ public class DeviceInfo implements Serializable { private Integer id; /** - * 测头编码 + * 测点编号 */ - @ApiParam(value = "测头编码") - @ApiModelProperty(value = "测头编码", dataType = "java.lang.String", required = true) - @NotEmpty(message = "测头编码必填") + @ApiParam(value = "测点编号") + @ApiModelProperty(value = "测点编号", dataType = "java.lang.String", required = true) + @Excel(name = "测点编号") + @NotEmpty(message = "测点编号必填") @TableField("STATION_CODE") private String stationCode; @@ -54,6 +56,7 @@ public class DeviceInfo implements Serializable { */ @ApiParam(value = "测站编码(MCU)") @ApiModelProperty(value = "测站编码(MCU)", dataType = "java.lang.String") + @Excel(name = "测站编码(MCU)") @NotEmpty(message = "测站编码(MCU)必填") @TableField("DEVICE_ID") private String deviceId; @@ -63,6 +66,7 @@ public class DeviceInfo implements Serializable { */ @ApiParam(value = "通道号") @ApiModelProperty(value = "通道号", dataType = "java.lang.Integer", required = true) + @Excel(name = "通道号") @NotNull(message = "通道号必填") @Max(message = "通道号最大值 7", value = 7) @Min(message = "通道号最小值 0", value = 0) @@ -72,9 +76,10 @@ public class DeviceInfo implements Serializable { /** * 温度率定系娄(K) */ - @ApiParam(value = "温度率定系娄(K)") - @ApiModelProperty(value = "温度率定系娄(K)", dataType = "java.math.BigDecimal", required = true) - @NotNull(message = "温度率定系娄(K)必填") + @ApiParam(value = "温度率定系娄(K)") + @ApiModelProperty(value = "温度率定系娄(K)", dataType = "java.math.BigDecimal", required = true) + @Excel(name = "温度率定系娄(K)") + @NotNull(message = "温度率定系娄(K)必填") @TableField("TEMPERATURE_K") private BigDecimal temperatureK; @@ -83,6 +88,7 @@ public class DeviceInfo implements Serializable { */ @ApiParam(value = "初始温度读数") @ApiModelProperty(value = "初始温度读数", dataType = "java.lang.Double", required = true) + @Excel(name = "初始温度读数") @NotNull(message = "初始温度读数必填") @TableField("START_TEMPERATURE") private BigDecimal startTemperature; @@ -90,9 +96,10 @@ public class DeviceInfo implements Serializable { /** * 率定系数(G) */ - @ApiParam(value = "率定系数(G)") - @ApiModelProperty(value = "率定系数(G)", dataType = "java.math.BigDecimal", required = true) - @NotNull(message = "率定系数(G)必填") + @ApiParam(value = "率定系数(G)") + @ApiModelProperty(value = "率定系数(G)", dataType = "java.math.BigDecimal", required = true) + @Excel(name = "率定系数(G)") + @NotNull(message = "率定系数(G)必填") @TableField("CALIBRATION_COEFFICIENT") private BigDecimal calibrationCoefficient; @@ -101,6 +108,7 @@ public class DeviceInfo implements Serializable { */ @ApiParam(value = "初始读数") @ApiModelProperty(value = "初始读数", notes = "单位是“模数”, 乘 1000 后开方得到频率值", dataType = "java.math.BigDecimal", required = true) + @Excel(name = "初始读数") @NotNull(message = "初始读数必填") @TableField("INITIAL_READING") private BigDecimal initialReading; @@ -110,6 +118,7 @@ public class DeviceInfo implements Serializable { */ @ApiParam(value = "项目名称") @ApiModelProperty(value = "项目名称", dataType = "java.lang.String") + @Excel(name = "工程或项目名称") @TableField("PROJECT_NAME") private String projectName; @@ -118,6 +127,7 @@ public class DeviceInfo implements Serializable { */ @ApiParam(value = "备注") @ApiModelProperty(value = "备注", dataType = "java.lang.String") + @Excel(name = "备注") @TableField("REMARK") private String remark; @@ -126,6 +136,7 @@ public class DeviceInfo implements Serializable { */ @ApiParam(value = "监理工程师") @ApiModelProperty(value = "监理工程师", dataType = "java.lang.String") + @Excel(name = "监理工程师") @TableField("SUPERVISOR") private String supervisor; @@ -160,6 +171,7 @@ public class DeviceInfo implements Serializable { */ @ApiParam(value = "埋设示意图") @ApiModelProperty(value = "埋设示意图", dataType = "java.lang.String") + @Excel(name = "埋设示意图说明") @TableField("SKETCH_MAP") private String sketchMap; @@ -169,6 +181,7 @@ public class DeviceInfo implements Serializable { @ApiParam(value = "日期") @ApiModelProperty(value = "日期", dataType = "java.util.Date") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @Excel(name = "日期") @TableField("CREATE_DATE") private Date createDate; @@ -177,6 +190,7 @@ public class DeviceInfo implements Serializable { */ @ApiParam(value = "埋设及填表人") @ApiModelProperty(value = "埋设及填表人", dataType = "java.lang.String") + @Excel(name = "埋设及填表人") @TableField("BURIED_PERSONNEL") private String buriedPersonnel; @@ -185,6 +199,7 @@ public class DeviceInfo implements Serializable { */ @ApiParam(value = "校验人") @ApiModelProperty(value = "校验人", dataType = "java.lang.String") + @Excel(name = "校验人") @TableField("CHECK_PERSONNEL") private String checkPersonnel; @@ -193,6 +208,7 @@ public class DeviceInfo implements Serializable { */ @ApiParam(value = "技术负责人") @ApiModelProperty(value = "技术负责人", dataType = "java.lang.String") + @Excel(name = "技术负责人") @TableField("TECHNICAL_DIRECTOR") private String technicalDirector; @@ -201,6 +217,7 @@ public class DeviceInfo implements Serializable { */ @ApiParam(value = "下游水位(m)") @ApiModelProperty(value = "下游水位(m)", dataType = "java.lang.Double") + @Excel(name = "下游水位") @TableField("TAILWATER_LEVEL") private Double tailwaterLevel; @@ -209,22 +226,25 @@ public class DeviceInfo implements Serializable { */ @ApiParam(value = "上游水位(m)") @ApiModelProperty(value = "上游水位(m)", dataType = "java.lang.Double") + @Excel(name = "上游水位") @TableField("HEADWATER_LEVEL") private Double headwaterLevel; /** - * 天气(℃) + * 天气 */ - @ApiParam(value = "天气(℃)") - @ApiModelProperty(value = "天气(℃)", dataType = "java.lang.Double") + @ApiParam(value = "天气") + @ApiModelProperty(value = "天气", dataType = "java.lang.String") + @Excel(name = "天气") @TableField("WEATHER") - private Double weather; + private String weather; /** * 气压 */ @ApiParam(value = "气压") @ApiModelProperty(value = "气压", dataType = "java.math.BigDecimal") + @Excel(name = "气压") @TableField("AIR_PRESSURE") private BigDecimal airPressure; @@ -233,6 +253,7 @@ public class DeviceInfo implements Serializable { */ @ApiParam(value = "气温") @ApiModelProperty(value = "气温", dataType = "java.math.BigDecimal") + @Excel(name = "气温") @TableField("AIR_TEMPERATURE") private BigDecimal airTemperature; @@ -241,79 +262,89 @@ public class DeviceInfo implements Serializable { */ @ApiParam(value = "埋设日期") @ApiModelProperty(value = "埋设日期", dataType = "java.util.Date") + @Excel(name = "埋设日期") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @TableField("EMBEDDING_DATE") private Date embeddingDate; /** - * 埋设完毕读数 + * 埋设完毕读数(Hz,kHz) */ - @ApiParam(value = "埋设完毕读数") - @ApiModelProperty(value = "埋设完毕读数", dataType = "java.math.BigDecimal") + @ApiParam(value = "埋设完毕读数(Hz,kHz)") + @ApiModelProperty(value = "埋设完毕读数(Hz,kHz)", dataType = "java.lang.String") + @Excel(name = "埋设完毕读数(Hz,kHz)") @TableField("EMBEDDING_FINISH_READING") - private BigDecimal embeddingFinishReading; + private String embeddingFinishReading; /** - * 零压读数 + * 零压读数(Hz,kHz) */ - @ApiParam(value = "零压读数") - @ApiModelProperty(value = "零压读数", dataType = "java.math.BigDecimal") + @ApiParam(value = "零压读数(Hz,kHz)") + @ApiModelProperty(value = "零压读数(Hz,kHz)", dataType = "java.math.BigDecimal") + @Excel(name = "零压读数(Hz,kHz)") @TableField("ZERO_PRESSURE_READINGS") private BigDecimal zeroPressureReadings; /** - * 就位后读数 + * 就位后读数(Hz,kHz) */ - @ApiParam(value = "就位后读数") - @ApiModelProperty(value = "就位后读数", dataType = "java.math.BigDecimal") + @ApiParam(value = "就位后读数(Hz,kHz)") + @ApiModelProperty(value = "就位后读数(Hz,kHz)", dataType = "java.math.BigDecimal") + @Excel(name = "就位后读数(Hz,kHz)") @TableField("END_READINGS") private BigDecimal endReadings; /** - * 入孔前读数 + * 入孔前读数(Hz,kHz) */ - @ApiParam(value = "入孔前读数") - @ApiModelProperty(value = "入孔前读数", dataType = "java.math.BigDecimal") + @ApiParam(value = "入孔前读数(Hz,kHz)") + @ApiModelProperty(value = "入孔前读数(Hz,kHz)", dataType = "java.lang.String") + @Excel(name = "入孔前读数(Hz,kHz)") @TableField("START_READINGS") - private BigDecimal startReadings; + private String startReadings; /** * 孔内水深 */ @ApiParam(value = "孔内水深") @ApiModelProperty(value = "孔内水深", dataType = "java.math.BigDecimal") + @Excel(name = "孔内水深") @TableField("DRAFT") private BigDecimal draft; /** - * 现场室内读数 + * 现场室内读数(Hz,kHz) */ - @ApiParam(value = "现场室内读数") - @ApiModelProperty(value = "现场室内读数", dataType = "java.math.BigDecimal") + @ApiParam(value = "现场室内读数(Hz,kHz)") + @ApiModelProperty(value = "现场室内读数(Hz,kHz)", dataType = "java.math.BigDecimal") + @Excel(name = "现场室内读数(Hz,kHz)") @TableField("READINGS") private BigDecimal readings; /** - * 大坝轴距 + * 坝轴距(m) */ - @ApiParam(value = "大坝轴距") - @ApiModelProperty(value = "大坝轴距", dataType = "java.math.BigDecimal") + @ApiParam(value = "坝轴距(m)") + @ApiModelProperty(value = "坝轴距(m)", dataType = "java.math.BigDecimal") + @Excel(name = "坝轴距(m)") @TableField("DAM_WHEELBASE") private BigDecimal damWheelbase; /** - * 柱号 + * 桩号(m) */ - @ApiParam(value = "柱号") - @ApiModelProperty(value = "柱号", dataType = "java.lang.String") + @ApiParam(value = "桩号(m)") + @ApiModelProperty(value = "桩号(m)", dataType = "java.lang.String") + @Excel(name = "桩号(m)") @TableField("COLUMN_NO") private String columnNo; /** - * 埋设高程 + * 埋设高程(m) */ - @ApiParam(value = "埋设高程") - @ApiModelProperty(value = "埋设高程", dataType = "java.math.BigDecimal") + @ApiParam(value = "埋设高程(m)") + @ApiModelProperty(value = "埋设高程(m)", dataType = "java.math.BigDecimal") + @Excel(name = "埋设高程(m)") @TableField("EMBEDDING_ELEVATION") private BigDecimal embeddingElevation; @@ -322,14 +353,16 @@ public class DeviceInfo implements Serializable { */ @ApiParam(value = "电缆长度标记") @ApiModelProperty(value = "电缆长度标记", dataType = "java.lang.String") + @Excel(name = "电缆长度标记(m)") @TableField("CABLE_LENGTH_MARK") private String cableLengthMark; /** - * 电缆长度 + * 电缆长度(m) */ - @ApiParam(value = "电缆长度") - @ApiModelProperty(value = "电缆长度", dataType = "java.math.BigDecimal") + @ApiParam(value = "电缆长度(m)") + @ApiModelProperty(value = "电缆长度(m)", dataType = "java.math.BigDecimal") + @Excel(name = "电缆长度(m)") @TableField("CABLE_LENGTH") private BigDecimal cableLength; @@ -337,23 +370,26 @@ public class DeviceInfo implements Serializable { * 测头内阻 */ @ApiParam(value = "测头内阻") - @ApiModelProperty(value = "测头内阻", dataType = "java.math.BigDecimal") + @ApiModelProperty(value = "测头内阻", dataType = "java.lang.String") + @Excel(name = "测头内阻") @TableField("RESISTANCE") - private BigDecimal resistance; + private String resistance; /** * 量程 */ @ApiParam(value = "量程") @ApiModelProperty(value = "量程", dataType = "java.math.BigDecimal") + @Excel(name = "量程") @TableField("RANGE") private BigDecimal range; /** - * 传感器系数 + * 传感器系数K(kpa/Hz,kHz) */ - @ApiParam(value = "传感器系数") - @ApiModelProperty(value = "传感器系数", dataType = "java.math.BigDecimal") + @ApiParam(value = "传感器系数K(kpa/Hz,kHz)") + @ApiModelProperty(value = "传感器系数K(kpa/Hz,kHz)", dataType = "java.math.BigDecimal") + @Excel(name = "传感器系数K(kpa/Hz,kHz)") @TableField("SENSOR_COEFFICIENT") private BigDecimal sensorCoefficient; @@ -362,6 +398,7 @@ public class DeviceInfo implements Serializable { */ @ApiParam(value = "生产厂家") @ApiModelProperty(value = "生产厂家", dataType = "java.lang.String") + @Excel(name = "生产厂家") @TableField("MANUFACTURER") private String manufacturer; @@ -370,6 +407,7 @@ public class DeviceInfo implements Serializable { */ @ApiParam(value = "测头编号") @ApiModelProperty(value = "测头编号", dataType = "java.lang.String") + @Excel(name = "测头编号") @TableField("MEASURING_PROBE_NO") private String measuringProbeNo; @@ -378,6 +416,7 @@ public class DeviceInfo implements Serializable { */ @ApiParam(value = "稳定水位") @ApiModelProperty(value = "稳定水位", dataType = "java.lang.Double") + @Excel(name = "稳定水位") @TableField("STEADY_WATER_LEVEL") private Double steadyWaterLevel; @@ -386,22 +425,25 @@ public class DeviceInfo implements Serializable { */ @ApiParam(value = "初见水位") @ApiModelProperty(value = "初见水位", dataType = "java.lang.Double") + @Excel(name = "初见水位") @TableField("INITIAL_WATER_LEVEL") private Double initialWaterLevel; /** * 钻孔直径 */ - @ApiParam(value = "钻孔直径") - @ApiModelProperty(value = "钻孔直径", dataType = "java.lang.String") + @ApiParam(value = "钻孔直径(mm)") + @ApiModelProperty(value = "钻孔直径(mm)", dataType = "java.lang.String") + @Excel(name = "钻孔直径(mm)") @TableField("DRILLING_SIZE") private String drillingSize; /** - * 转孔编号 + * 钻孔编号 */ - @ApiParam(value = "转孔编号") - @ApiModelProperty(value = "转孔编号", dataType = "java.lang.String") + @ApiParam(value = "钻孔编号") + @ApiModelProperty(value = "钻孔编号", dataType = "java.lang.String") + @Excel(name = "钻孔编号") @TableField("DRILLING_NO") private String drillingNo; diff --git a/src/main/java/com/whdc/zhdbaqapi/model/vo/DeviceDataVo.java b/src/main/java/com/whdc/zhdbaqapi/model/vo/DeviceDataVo.java index 8e69343..13d5ef6 100644 --- a/src/main/java/com/whdc/zhdbaqapi/model/vo/DeviceDataVo.java +++ b/src/main/java/com/whdc/zhdbaqapi/model/vo/DeviceDataVo.java @@ -94,11 +94,11 @@ public class DeviceDataVo { /** - * 测头编码 + * 测点编号 */ - @ApiParam(value = "测头编码") - @ApiModelProperty(value = "测头编码", dataType = "java.lang.String", required = true) - @NotEmpty(message = "测头编码必填") + @ApiParam(value = "测点编号") + @ApiModelProperty(value = "测点编号", dataType = "java.lang.String", required = true) + @NotEmpty(message = "测点编号必填") private String stationCode; /** diff --git a/src/main/java/com/whdc/zhdbaqapi/model/vo/DeviceInfoImpVo.java b/src/main/java/com/whdc/zhdbaqapi/model/vo/DeviceInfoImpVo.java new file mode 100644 index 0000000..ae0bb95 --- /dev/null +++ b/src/main/java/com/whdc/zhdbaqapi/model/vo/DeviceInfoImpVo.java @@ -0,0 +1,33 @@ +package com.whdc.zhdbaqapi.model.vo; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.whdc.zhdbaqapi.model.entity.DeviceInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * @author 李赛 + * @date 2022-07-22 11:42 + */ +@Data +@Accessors(chain = true) // chain = true 实现链式调用 +@JsonInclude(JsonInclude.Include.NON_NULL) // 表示序列化非null属性 +public class DeviceInfoImpVo { + @ApiModelProperty("成功读取记录条数") + private int load; + + @ApiModelProperty("成功入库记录条数") + private int success; + + @ApiModelProperty("入库失败记录条数") + private int fail; + + @ApiModelProperty("入库失败记录") + private List err; + + @ApiModelProperty("消息") + private String msg; +} diff --git a/src/main/java/com/whdc/zhdbaqapi/service/IDeviceInfoService.java b/src/main/java/com/whdc/zhdbaqapi/service/IDeviceInfoService.java index a867757..4af1417 100644 --- a/src/main/java/com/whdc/zhdbaqapi/service/IDeviceInfoService.java +++ b/src/main/java/com/whdc/zhdbaqapi/service/IDeviceInfoService.java @@ -4,7 +4,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import com.whdc.zhdbaqapi.model.dto.FindDeviceDto; import com.whdc.zhdbaqapi.model.entity.DeviceInfo; +import com.whdc.zhdbaqapi.model.vo.DeviceInfoImpVo; +import java.io.InputStream; import java.util.List; /** @@ -39,4 +41,12 @@ public interface IDeviceInfoService extends IService { * @return */ IPage page(FindDeviceDto findDto); + + /** + * 导入 + * + * @param file + * @return + */ + DeviceInfoImpVo imp(InputStream file); } diff --git a/src/main/java/com/whdc/zhdbaqapi/service/impl/DeviceDataServiceImpl.java b/src/main/java/com/whdc/zhdbaqapi/service/impl/DeviceDataServiceImpl.java index 5594bda..c08d6b1 100644 --- a/src/main/java/com/whdc/zhdbaqapi/service/impl/DeviceDataServiceImpl.java +++ b/src/main/java/com/whdc/zhdbaqapi/service/impl/DeviceDataServiceImpl.java @@ -115,7 +115,7 @@ public class DeviceDataServiceImpl extends ServiceImpl rows = getRemoteData(deviceId, di.getChannelNum(), lasttm); if (rows == null || rows.isEmpty()) { - log.debug("没有取到数据 " + deviceId); + log.debug("没有取到数据 " + deviceId + ", " + di.getChannelNum()); continue; } diff --git a/src/main/java/com/whdc/zhdbaqapi/service/impl/DeviceInfoServiceimpl.java b/src/main/java/com/whdc/zhdbaqapi/service/impl/DeviceInfoServiceimpl.java index 74e253f..0e7d006 100644 --- a/src/main/java/com/whdc/zhdbaqapi/service/impl/DeviceInfoServiceimpl.java +++ b/src/main/java/com/whdc/zhdbaqapi/service/impl/DeviceInfoServiceimpl.java @@ -1,19 +1,25 @@ package com.whdc.zhdbaqapi.service.impl; +import cn.afterturn.easypoi.excel.ExcelImportUtil; +import cn.afterturn.easypoi.excel.entity.ImportParams; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.whdc.zhdbaqapi.constant.Constants; +import com.whdc.zhdbaqapi.exception.MyException; import com.whdc.zhdbaqapi.mapper.DeviceInfoMapper; import com.whdc.zhdbaqapi.model.dto.FindDeviceDto; import com.whdc.zhdbaqapi.model.entity.DeviceInfo; +import com.whdc.zhdbaqapi.model.vo.DeviceInfoImpVo; import com.whdc.zhdbaqapi.service.IDeviceInfoService; +import org.apache.commons.lang3.StringUtils; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import java.io.InputStream; import java.io.Serializable; -import java.util.Date; -import java.util.List; +import java.util.*; /** * @author 李赛 @@ -30,6 +36,15 @@ public class DeviceInfoServiceimpl extends ServiceImpl list = ExcelImportUtil.importExcel(file, DeviceInfo.class, params); + + if (list == null || list.isEmpty()) { + return new DeviceInfoImpVo().setLoad(0).setSuccess(0).setFail(0).setMsg("没有读取有有效数据"); + } + + List err = new ArrayList<>(); + List impList = new ArrayList<>(); + Set scs = new HashSet<>(); + Map chkMap = new HashMap<>(); + + for (DeviceInfo di : list) { + if (StringUtils.isBlank(di.getStationCode())) { + err.add(di); + } else { + scs.add(di.getStationCode()); + } + } + + if (scs.isEmpty() || err.size() == list.size()) { + return new DeviceInfoImpVo().setLoad(list.size()).setSuccess(0).setFail(err.size()).setErr(err).setMsg("没有读取到有效的测点编号"); + } + + if (scs.size() != list.size()) { + return new DeviceInfoImpVo().setLoad(list.size()).setSuccess(0).setFail(err.size()).setErr(err).setMsg("有重复的测点编号,请检查后再导入"); + } + + List chkscs = baseMapper.listBySC(scs); + if (chkscs.size() == scs.size()) { + return new DeviceInfoImpVo().setLoad(list.size()).setSuccess(0).setFail(err.size()).setErr(err).setMsg("测点编号全部已存在"); + } + + for (DeviceInfo dbdi : chkscs) { + chkMap.put(dbdi.getStationCode(), dbdi); + } + + for (DeviceInfo di : list) { + if (chkMap.containsKey(di.getStationCode())) { + err.add(di); + } else { + impList.add(di); + } + } + + if (impList.isEmpty()) { + return new DeviceInfoImpVo().setLoad(list.size()).setSuccess(0).setFail(err.size()).setErr(err).setMsg("测点编号全部已存在"); + } + + if (super.saveBatch(impList)) { + return new DeviceInfoImpVo().setLoad(list.size()).setSuccess(impList.size()).setFail(err.size()).setErr(err).setMsg("成功"); + } else { + return new DeviceInfoImpVo().setLoad(list.size()).setSuccess(0).setFail(err.size()).setErr(err).setMsg("失败"); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new MyException("导入异常!" + e.getMessage()); + } + } + @Override @CacheEvict(Constants.CACHE_NAME) public boolean save(DeviceInfo entity) { diff --git a/src/main/resources/mapper/DeviceInfoMapper.xml b/src/main/resources/mapper/DeviceInfoMapper.xml index 6fc252d..5669b1b 100644 --- a/src/main/resources/mapper/DeviceInfoMapper.xml +++ b/src/main/resources/mapper/DeviceInfoMapper.xml @@ -32,4 +32,18 @@ + + +