diff --git a/maibu-common/src/main/java/com/maibu/core/enums/OtaOperate.java b/maibu-common/src/main/java/com/maibu/core/enums/OtaOperate.java new file mode 100644 index 0000000..05c2449 --- /dev/null +++ b/maibu-common/src/main/java/com/maibu/core/enums/OtaOperate.java @@ -0,0 +1,18 @@ +package com.maibu.core.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum OtaOperate { + + upload("upload", "上传"), + upgrade("upgrade", "升级"), + rollback("rollback", "回滚"), + reboot("reboot", "重启"); + + private final String name; + private final String value; + +} diff --git a/maibu-common/src/main/java/com/maibu/core/mq/message/DeviceData.java b/maibu-common/src/main/java/com/maibu/core/mq/message/DeviceData.java deleted file mode 100644 index f22beef..0000000 --- a/maibu-common/src/main/java/com/maibu/core/mq/message/DeviceData.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.maibu.core.mq.message; - -import com.maibu.core.ota.OtaPackageCode; -import com.maibu.core.protocol.Message; -import com.maibu.core.protocol.modbus.ModbusCode; -import io.netty.buffer.ByteBuf; -import lombok.Builder; -import lombok.Data; -import lombok.EqualsAndHashCode; - -/** - * 消息解析model - * @author gsb - * @date 2022/10/10 15:53 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Builder -public class DeviceData extends Message { - - /*topic*/ - private String topicName; - - /*设备编号*/ - private String serialNumber; - - /*原数据*/ - private byte[] data; - - private ByteBuf buf; - - private Object body; - /*MQTT OR 其他*/ - private int type; - /*Modbus*/ - private ModbusCode code; - /**产品id*/ - private Long productId; - - private OtaPackageCode netModbusCode; - - private int bitCount; -} diff --git a/maibu-common/src/main/java/com/maibu/core/mq/message/DeviceDownMessage.java b/maibu-common/src/main/java/com/maibu/core/mq/message/DeviceDownMessage.java deleted file mode 100644 index eb0d646..0000000 --- a/maibu-common/src/main/java/com/maibu/core/mq/message/DeviceDownMessage.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.maibu.core.mq.message; - -import com.maibu.core.protocol.modbus.ModbusCode; -import com.maibu.enums.ServerType; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -/** - * 设备下发指令model - * - * @author gsb - * @date 2022/10/10 16:18 - */ -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class DeviceDownMessage { - - private String messageId; - /** - * 时间戳,单位毫秒 - */ - private Long timestamp; - /** - * 消息体 - */ - private Object body; - /*下发的指令,服务调用的时候就是服务标识符*/ - private String identifier; - /*产品id*/ - private Long productId; - /** - * 设备编码 - */ - private String serialNumber; - /** - * 从机编号 - */ - private Integer slaveId; - private ModbusCode code; - private String protocolCode; - - private List values; - private String topic; - private String subCode; - private ServerType serverType; - - public DeviceDownMessage(List values, String topic, String subCode,String transport) { - this.values = values; - this.topic = topic; - this.subCode = subCode; - this.serverType = ServerType.explain(transport); - } -} diff --git a/maibu-common/src/main/java/com/maibu/core/mq/message/DeviceFunctionMessage.java b/maibu-common/src/main/java/com/maibu/core/mq/message/DeviceFunctionMessage.java deleted file mode 100644 index b0344c7..0000000 --- a/maibu-common/src/main/java/com/maibu/core/mq/message/DeviceFunctionMessage.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.maibu.core.mq.message; - -import lombok.Data; - -/** - * 平台下发指令数据model - * @author bill - */ -@Data -public class DeviceFunctionMessage { - - /*流水号,兼容modbus标准协议没有消息流水号*/ - private String seqNo; - /*平台时间*/ - private Long pfTimestamp; - /*下发的消息体*/ - private Object body; - /*下发的指令物模型标识符*/ - private String identifier; - /*下发的数据寄存器地址*/ - private String hexAddress; - /*产品ID*/ - private Long productId; - /*设备编号*/ - private String serialNumber; - /*网关设备编号*/ - private String protocolCode; - - /*是否有子设备 0-否,1-是*/ - private Integer hasSub; - /*子设备从机编号 例如 02 编号从机。通过主机集控下发的指定从机编号*/ - private String subDeviceCode; -} diff --git a/maibu-common/src/main/java/com/maibu/core/mq/message/DeviceMessage.java b/maibu-common/src/main/java/com/maibu/core/mq/message/DeviceMessage.java deleted file mode 100644 index ea594af..0000000 --- a/maibu-common/src/main/java/com/maibu/core/mq/message/DeviceMessage.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.maibu.core.mq.message; - -import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.annotation.JsonInclude; -import lombok.Data; - -import java.util.Date; - -/** - * 设备消息 - * @author bill - */ -@Data -@JsonInclude(JsonInclude.Include.NON_NULL) -public class DeviceMessage { - - /** 下发的数据*/ - private Object message; - - /** 下发的topic*/ - private String topicName; - - /** 设备编号*/ - private String serialNumber; - - private String dataType; - - /** 时间 */ - @JsonFormat(pattern ="yyyy-MM-dd HH:mm:ss:SSS") - private Date time; -} diff --git a/maibu-common/src/main/java/com/maibu/core/mq/message/FunctionCallBackBo.java b/maibu-common/src/main/java/com/maibu/core/mq/message/FunctionCallBackBo.java deleted file mode 100644 index 5e5be3e..0000000 --- a/maibu-common/src/main/java/com/maibu/core/mq/message/FunctionCallBackBo.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.maibu.core.mq.message; - -import lombok.Data; - -/** - * 指令下发组将的model - * @author bill - */ -@Data -public class FunctionCallBackBo { - - /*下发的数据*/ - private byte[] message; - - /*MQTt-下发的topic*/ - private String topicName; - - /*设备编号*/ - private String serialNumber; - /** - * 原数据包 - */ - private String sources; -} diff --git a/maibu-common/src/main/java/com/maibu/core/mq/message/InstructionsMessage.java b/maibu-common/src/main/java/com/maibu/core/mq/message/InstructionsMessage.java deleted file mode 100644 index d5e38fc..0000000 --- a/maibu-common/src/main/java/com/maibu/core/mq/message/InstructionsMessage.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.maibu.core.mq.message; - -import lombok.Data; - -/** - * 指令下发组将的model - * @author bill - */ -@Data -public class InstructionsMessage { - - /*下发的数据*/ - private byte[] message; - - /*MQTt-下发的topic*/ - private String topicName; - - /*设备编号*/ - private String serialNumber; -} diff --git a/maibu-common/src/main/java/com/maibu/core/mq/message/ModbusPollMsg.java b/maibu-common/src/main/java/com/maibu/core/mq/message/ModbusPollMsg.java deleted file mode 100644 index ad7c7f9..0000000 --- a/maibu-common/src/main/java/com/maibu/core/mq/message/ModbusPollMsg.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.maibu.core.mq.message; - -import lombok.Data; - -import java.util.List; - -/** - * @author gsb - * @date 2024/6/20 10:53 - */ -@Data -public class ModbusPollMsg { - - /** - * 下发指令 - */ - private List commandList; - /** - * 服务端类型 - */ - private Integer serverType; - /** - * 产品id - */ - private Long productId; - /** - * 设备编码 - */ - private String serialNumber; - - private String transport; -} diff --git a/maibu-common/src/main/java/com/maibu/core/mq/message/MqttBo.java b/maibu-common/src/main/java/com/maibu/core/mq/message/MqttBo.java deleted file mode 100644 index cfbe849..0000000 --- a/maibu-common/src/main/java/com/maibu/core/mq/message/MqttBo.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.maibu.core.mq.message; - -import com.fasterxml.jackson.annotation.JsonFormat; -import lombok.Data; - -import java.util.Date; - -/** - * @author bill - */ -@Data -public class MqttBo { - - /*主题*/ - private String topic; - /*数据*/ - private String data; - /*消息质量*/ - private int qos = 1; - /*发送方向*/ - private String direction; - /*时间*/ - @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private Date ts; -} - diff --git a/maibu-common/src/main/java/com/maibu/core/mq/message/PropRead.java b/maibu-common/src/main/java/com/maibu/core/mq/message/PropRead.java deleted file mode 100644 index e313202..0000000 --- a/maibu-common/src/main/java/com/maibu/core/mq/message/PropRead.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.maibu.core.mq.message; - -import com.maibu.core.protocol.modbus.ModbusCode; -import lombok.Data; - -/** - * @author gsb - * @date 2022/12/9 10:15 - */ -@Data -public class PropRead { - - /**设备编号*/ - private String serialNumber; - /**寄存器起始地址*/ - private int address; - /** - * 读取寄存器个数 - */ - private int count; - /**数据结果长度计算值*/ - private int length; - /** - * 从机地址 - */ - private int slaveId; - /** - * 读取个数 - */ - private int quantity; - /** - * 数据 - */ - private String data; - /** - * 功能码 - */ - private ModbusCode code; -} diff --git a/maibu-common/src/main/java/com/maibu/core/mq/message/ProtocolDto.java b/maibu-common/src/main/java/com/maibu/core/mq/message/ProtocolDto.java deleted file mode 100644 index 8194837..0000000 --- a/maibu-common/src/main/java/com/maibu/core/mq/message/ProtocolDto.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.maibu.core.mq.message; - -import lombok.Data; - -/** - * 协议bean - * @author gsb - * @date 2022/10/25 14:54 - */ -@Data -public class ProtocolDto { - - /**协议编号*/ - private String code; - private String name; - /*外部协议url*/ - private String protocolUrl; - private String description; - /**协议类型 协议类型 0:系统协议 1:jar,2.js,3.c*/ - private Integer protocolType; -} diff --git a/maibu-common/src/main/java/com/maibu/core/mq/message/SubDeviceMessage.java b/maibu-common/src/main/java/com/maibu/core/mq/message/SubDeviceMessage.java deleted file mode 100644 index b4b59da..0000000 --- a/maibu-common/src/main/java/com/maibu/core/mq/message/SubDeviceMessage.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.maibu.core.mq.message; - -import lombok.Data; - -/** - * 网关子设备model - * @author gsb - * @date 2022/10/10 10:18 - */ -@Data -public class SubDeviceMessage { - /*子设备编号或编码*/ - private String serialNumber; - /*数据*/ - private byte[] data; - /*消息id*/ - private String messageId; -} diff --git a/maibu-common/src/main/java/com/maibu/core/mq/ota/OtaReplyMessage.java b/maibu-common/src/main/java/com/maibu/core/mq/ota/OtaReplyMessage.java deleted file mode 100644 index 8f5cd6d..0000000 --- a/maibu-common/src/main/java/com/maibu/core/mq/ota/OtaReplyMessage.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.maibu.core.mq.ota; - -import com.fasterxml.jackson.annotation.JsonInclude; -import lombok.Data; - -import java.math.BigDecimal; - -/** - * OTA升级回复model - * @author gsb - * @date 2022/10/24 17:20 - */ -@Data -@JsonInclude(JsonInclude.Include.NON_EMPTY) -public class OtaReplyMessage { - - private Long taskId; - private BigDecimal version; - private int status; - private int progress; -} diff --git a/maibu-common/src/main/java/com/maibu/core/mq/ota/OtaUpgradeBo.java b/maibu-common/src/main/java/com/maibu/core/mq/ota/OtaUpgradeBo.java deleted file mode 100644 index d6f1a38..0000000 --- a/maibu-common/src/main/java/com/maibu/core/mq/ota/OtaUpgradeBo.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.maibu.core.mq.ota; - -import com.fasterxml.jackson.annotation.JsonInclude; -import lombok.Builder; -import lombok.Data; - -import java.math.BigDecimal; - -/** - * OTA远程升级 - * @author gsb - * @date 2022/10/10 10:22 - */ -@Data -@Builder -@JsonInclude(JsonInclude.Include.NON_EMPTY) -public class OtaUpgradeBo { - - // 设备编码 - private String serialNumber; - // 升级任务ID - private Long taskId; - // 消息内容 - private byte[] msg; - // 设备状态 - private int status; - // topic - private String topicName; - // 固件包版本 - private BigDecimal version; - // 固件包http地址 - private String url; - // 固件包分包传输大小 - private int packageSize; - // 固件包传输偏移量 - private int offset; - // 升级进度 - private int progress; - -} diff --git a/maibu-common/src/main/java/com/maibu/core/mq/ota/OtaUpgradeDelayTask.java b/maibu-common/src/main/java/com/maibu/core/mq/ota/OtaUpgradeDelayTask.java deleted file mode 100644 index 0e83aa3..0000000 --- a/maibu-common/src/main/java/com/maibu/core/mq/ota/OtaUpgradeDelayTask.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.maibu.core.mq.ota; - -import com.fasterxml.jackson.annotation.JsonFormat; -import com.maibu.utils.DateUtils; -import lombok.Data; - -import java.util.Date; -import java.util.List; -import java.util.concurrent.Delayed; -import java.util.concurrent.TimeUnit; - -/** - * ota升级发送,实现Delayed延时接口 - * - * @author bill - */ -@Data -public class OtaUpgradeDelayTask implements Delayed { - - /** - * 固件id - */ - private Long firmwareId; - /** - * 1:指定产品 2:指定设备 - */ - private Long upgradeType; - - private List devices; - /** - * 任务id - */ - private Long taskId; - /** - * 开始升级时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private Date startTime; - - - /** - * 设置延迟执行时间 开始升级时间 -当前时间 - * - * @param unit - * @return - */ - @Override - public long getDelay(TimeUnit unit) { - return startTime.getTime() - DateUtils.getTimestamp(); - } - - @Override - public int compareTo(Delayed o) { - OtaUpgradeDelayTask delayTask = (OtaUpgradeDelayTask) o; - //比较 - long diff = this.startTime.getTime() - delayTask.startTime.getTime(); - if (diff <= 0) { - return -1; - } else { - return 1; - } - } -} diff --git a/maibu-common/src/main/java/com/maibu/core/ota/DeviceOtaFirmware.java b/maibu-common/src/main/java/com/maibu/core/ota/DeviceOtaFirmware.java new file mode 100644 index 0000000..3728bdf --- /dev/null +++ b/maibu-common/src/main/java/com/maibu/core/ota/DeviceOtaFirmware.java @@ -0,0 +1,30 @@ +package com.maibu.core.ota; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.maibu.core.domain.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +@EqualsAndHashCode(callSuper = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +@Data +@TableName("iot_ota_firmware") +public class DeviceOtaFirmware extends BaseDO { + private static final long serialVersionUID = 1L; + + @TableId(type = IdType.AUTO) + private Long id; + + private String version; //版本号 + + private String fileName; //文件名 + + private String fileUrl; //存放地址 + + private String deviceType; + +} diff --git a/maibu-common/src/main/java/com/maibu/core/ota/DeviceOtaOperateRecord.java b/maibu-common/src/main/java/com/maibu/core/ota/DeviceOtaOperateRecord.java new file mode 100644 index 0000000..95422cd --- /dev/null +++ b/maibu-common/src/main/java/com/maibu/core/ota/DeviceOtaOperateRecord.java @@ -0,0 +1,38 @@ +package com.maibu.core.ota; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.maibu.core.domain.BaseDO; +import com.maibu.core.enums.OtaOperate; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + + +@EqualsAndHashCode(callSuper = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +@Data +@TableName(value = "iot_ota_operate_record", autoResultMap = true) +public class DeviceOtaOperateRecord extends BaseDO { + private static final long serialVersionUID = 1L; + + @TableId(type = IdType.AUTO) + private Long id; + + private OtaOperate operateType; //操作类型 + + @TableField(typeHandler = JacksonTypeHandler.class) + private List deviceIds; //文件名 + + private String fileName; //名称 + + private String firmwareId; //id + + private String deviceType; + +} diff --git a/maibu-common/src/main/java/com/maibu/core/ota/OtaPackageCode.java b/maibu-common/src/main/java/com/maibu/core/ota/OtaPackageCode.java deleted file mode 100644 index ea9ff87..0000000 --- a/maibu-common/src/main/java/com/maibu/core/ota/OtaPackageCode.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.maibu.core.ota; - -import com.maibu.exception.ServiceException; -import lombok.AllArgsConstructor; -import lombok.Getter; - -@Getter -@AllArgsConstructor -public enum OtaPackageCode { - - OTA_01("查询产品工装号",(byte) 0x01), - OTA_0A("OTA升级启动",(byte) 0x0A), - OTA_0B("OTA升级包传输",(byte) 0x0B) - ; - - private String desc; - private byte code; - - public static OtaPackageCode getInstance(int code) { - switch ((byte)code) { - case 0x01: - return OTA_01; - case 0x0A: - return OTA_0A; - case 0x0B: - return OTA_0B; - default: - throw new ServiceException("功能码[" + code + "],未定义"); - } - } - - public static String getDes(int code){ - switch ((byte)code) { - case 0x01: - return OTA_01.desc; - case 0x0A: - return OTA_0A.desc; - case 0x0B: - return OTA_0B.desc; - default: - return "UNKOWN"; - } - } - -} diff --git a/maibu-common/src/main/java/com/maibu/mapper/DeviceOtaFirmwareMapper.java b/maibu-common/src/main/java/com/maibu/mapper/DeviceOtaFirmwareMapper.java new file mode 100644 index 0000000..ebb936c --- /dev/null +++ b/maibu-common/src/main/java/com/maibu/mapper/DeviceOtaFirmwareMapper.java @@ -0,0 +1,11 @@ +package com.maibu.mapper; + +import com.maibu.core.ota.DeviceOtaFirmware; +import com.maibu.mybatis.mapper.BaseMapperX; +import org.springframework.stereotype.Repository; + + +@Repository +public interface DeviceOtaFirmwareMapper extends BaseMapperX { + +} diff --git a/maibu-common/src/main/java/com/maibu/mapper/DeviceOtaOperateRecordMapper.java b/maibu-common/src/main/java/com/maibu/mapper/DeviceOtaOperateRecordMapper.java new file mode 100644 index 0000000..8a3e0a2 --- /dev/null +++ b/maibu-common/src/main/java/com/maibu/mapper/DeviceOtaOperateRecordMapper.java @@ -0,0 +1,11 @@ +package com.maibu.mapper; + +import com.maibu.core.ota.DeviceOtaOperateRecord; +import com.maibu.mybatis.mapper.BaseMapperX; +import org.springframework.stereotype.Repository; + + +@Repository +public interface DeviceOtaOperateRecordMapper extends BaseMapperX { + +} diff --git a/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/DeviceOtaController.java b/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/DeviceOtaController.java new file mode 100644 index 0000000..3968888 --- /dev/null +++ b/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/DeviceOtaController.java @@ -0,0 +1,84 @@ +package com.maibu.controller; + +import java.util.List; + +import com.maibu.core.controller.BaseController; +import com.maibu.core.domain.AjaxResult; +import com.maibu.core.page.TableDataInfo; +import com.maibu.dto.BaseQueryDTO; +import com.maibu.core.ota.DeviceOtaFirmware; +import com.maibu.core.ota.DeviceOtaOperateRecord; +import com.maibu.service.impl.DeviceOtaService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +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.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "OTA固件管理") +@RestController +@RequestMapping("/iot/deviceOta") +public class DeviceOtaController extends BaseController { + + @Autowired + private DeviceOtaService service; + + // ==================== 固件管理 ==================== + + @ApiOperation("新增或修改固件") + @PostMapping("/firmware/save") + public AjaxResult saveFirmware(@RequestBody DeviceOtaFirmware firmware) { + return AjaxResult.success(service.saveFirmware(firmware)); + } + + @ApiOperation("固件分页列表") + @PostMapping("/firmware/list") + public TableDataInfo listFirmware() { + startPage(); + return getDataTable(service.listFirmware()); + } + + @ApiOperation("根据ID查询固件") + @GetMapping("/firmware/detail") + public AjaxResult selectFirmwareById(@RequestParam Long id) { + return AjaxResult.success(service.selectFirmwareById(id)); + } + + @ApiOperation("批量删除固件") + @PostMapping("/firmware/delete") + public AjaxResult deleteFirmware(@RequestBody List ids) { + return AjaxResult.success(service.deleteFirmware(ids)); + } + + // ==================== 操作记录管理 ==================== + + @ApiOperation("新增或修改操作记录") + @PostMapping("/record/save") + public AjaxResult saveOperateRecord(@RequestBody DeviceOtaOperateRecord record) { + return AjaxResult.success(service.saveOperateRecord(record)); + } + + @ApiOperation("操作记录分页列表") + @PostMapping("/record/list") + public TableDataInfo listOperateRecord(@RequestBody BaseQueryDTO dto) { + startPage(); + return getDataTable(service.listOperateRecord(dto)); + } + + @ApiOperation("根据ID查询操作记录") + @GetMapping("/record/detail") + public AjaxResult selectOperateRecordById(@RequestParam Long id) { + return AjaxResult.success(service.selectOperateRecordById(id)); + } + + @ApiOperation("批量删除操作记录") + @PostMapping("/record/delete") + public AjaxResult deleteOperateRecord(@RequestBody List ids) { + return AjaxResult.success(service.deleteOperateRecord(ids)); + } + +} \ No newline at end of file diff --git a/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/DeviceOtaService.java b/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/DeviceOtaService.java new file mode 100644 index 0000000..271e931 --- /dev/null +++ b/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/DeviceOtaService.java @@ -0,0 +1,74 @@ +package com.maibu.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.maibu.dto.BaseQueryDTO; +import com.maibu.mapper.DeviceOtaFirmwareMapper; +import com.maibu.mapper.DeviceOtaOperateRecordMapper; +import com.maibu.core.ota.DeviceOtaFirmware; +import com.maibu.core.ota.DeviceOtaOperateRecord; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.List; + +@Service +@Slf4j +public class DeviceOtaService { + + @Autowired + private DeviceOtaFirmwareMapper deviceOtaFirmwareMapper; + + @Autowired + private DeviceOtaOperateRecordMapper deviceOtaOperateRecordMapper; + + public boolean saveFirmware(DeviceOtaFirmware firmware) { + return deviceOtaFirmwareMapper.saveOrUpdate(firmware); + } + + public List listFirmware() { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.orderByDesc(DeviceOtaFirmware::getCreateTime); + return deviceOtaFirmwareMapper.selectList(queryWrapper); + } + + public DeviceOtaFirmware selectFirmwareById(Long id) { + return deviceOtaFirmwareMapper.selectById(id); + } + + public int deleteFirmware(List ids) { + if (CollectionUtils.isEmpty(ids)) { + return 0; + } + return deviceOtaFirmwareMapper.deleteBatchIds(ids); + } + + public boolean saveOperateRecord(DeviceOtaOperateRecord record) { + return deviceOtaOperateRecordMapper.saveOrUpdate(record); + } + + public List listOperateRecord(BaseQueryDTO dto) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + if (dto != null) { + if (!StringUtils.isEmpty(dto.getDeviceId())) { + queryWrapper.eq(DeviceOtaOperateRecord::getDeviceType, dto.getDeviceId()); + } + } + queryWrapper.orderByDesc(DeviceOtaOperateRecord::getCreateTime); + return deviceOtaOperateRecordMapper.selectList(queryWrapper); + } + + public DeviceOtaOperateRecord selectOperateRecordById(Long id) { + return deviceOtaOperateRecordMapper.selectById(id); + } + + public int deleteOperateRecord(List ids) { + if (CollectionUtils.isEmpty(ids)) { + return 0; + } + return deviceOtaOperateRecordMapper.deleteBatchIds(ids); + } + +} \ No newline at end of file