diff --git a/ruoyi-modules/hw-rfid/src/main/java/org/dromara/rfid/controller/RfidDowntimeRecordController.java b/ruoyi-modules/hw-rfid/src/main/java/org/dromara/rfid/controller/RfidDowntimeRecordController.java new file mode 100644 index 0000000..c76cfbf --- /dev/null +++ b/ruoyi-modules/hw-rfid/src/main/java/org/dromara/rfid/controller/RfidDowntimeRecordController.java @@ -0,0 +1,68 @@ +package org.dromara.rfid.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.rfid.domain.vo.RfidReadRecordVo; +import org.dromara.rfid.domain.vo.RfidDowntimeRecordVo; +import org.dromara.rfid.domain.bo.RfidReadRecordBo; +import org.dromara.rfid.service.IRfidReadRecordService; + +/** + * 停机记录 + *

+ * 上位机写入,web只读,不提供增删改接口。仅提供列表查询和导出。 + * 底层数据复用 rfid_read_record 分表,但业务语义为"停机记录"。 + *

+ * + * @author zch + * @date 2026-05-18 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/rfid/downtimeRecord") +public class RfidDowntimeRecordController extends BaseController { + + private final IRfidReadRecordService rfidReadRecordService; + + /** + * 查询停机记录列表 + */ + @SaCheckPermission("rfid:downtimeRecord:list") + @GetMapping("/list") + public TableDataInfo list(RfidReadRecordBo bo, PageQuery pageQuery) { + TableDataInfo result = rfidReadRecordService.queryPageList(bo, pageQuery); + List rows = result.getRows().stream() + .map(RfidDowntimeRecordVo::from) + .toList(); + TableDataInfo downtimeResult = new TableDataInfo<>(); + downtimeResult.setRows(rows); + downtimeResult.setTotal(result.getTotal()); + return downtimeResult; + } + + /** + * 导出停机记录列表 + */ + @SaCheckPermission("rfid:downtimeRecord:export") + @Log(title = "停机记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(RfidReadRecordBo bo, HttpServletResponse response) { + List list = rfidReadRecordService.queryList(bo); + List downtimeList = list.stream() + .map(RfidDowntimeRecordVo::from) + .toList(); + ExcelUtil.exportExcel(downtimeList, "停机记录", RfidDowntimeRecordVo.class, response); + } +} diff --git a/ruoyi-modules/hw-rfid/src/main/java/org/dromara/rfid/domain/vo/RfidDowntimeRecordVo.java b/ruoyi-modules/hw-rfid/src/main/java/org/dromara/rfid/domain/vo/RfidDowntimeRecordVo.java new file mode 100644 index 0000000..403d9c5 --- /dev/null +++ b/ruoyi-modules/hw-rfid/src/main/java/org/dromara/rfid/domain/vo/RfidDowntimeRecordVo.java @@ -0,0 +1,80 @@ +package org.dromara.rfid.domain.vo; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import lombok.Data; + +/** + * 停机记录视图对象 + *

+ * 上位机写入,web只读展示。仅暴露核心业务字段:设备编号、设备名称、读取状态、记录时间。 + * 底层数据复用 rfid_read_record 分表,但业务语义为"停机记录"。 + *

+ * + * @author zch + * @date 2026-05-18 + */ +@Data +@ExcelIgnoreUnannotated +public class RfidDowntimeRecordVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 标识 + */ + private Long id; + + /** + * 设备id,对应rfid_device.id + */ + private Long deviceId; + + /** + * 设备编号(连表 rfid_device.device_code) + */ + @ExcelProperty(value = "设备编号") + private String deviceCode; + + /** + * 设备名称(连表 rfid_device.device_name) + */ + @ExcelProperty(value = "设备名称") + private String deviceName; + + /** + * 读取状态(1-成功;0-失败) + */ + @ExcelProperty(value = "读取状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "read_status") + private String readStatus; + + /** + * 记录时间 + */ + @ExcelProperty(value = "记录时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date recordTime; + + /** + * 从 RfidReadRecordVo 转换为停机记录 VO(只取核心字段) + */ + public static RfidDowntimeRecordVo from(RfidReadRecordVo vo) { + RfidDowntimeRecordVo downtime = new RfidDowntimeRecordVo(); + downtime.setId(vo.getId()); + downtime.setDeviceId(vo.getDeviceId()); + downtime.setDeviceCode(vo.getDeviceCode()); + downtime.setDeviceName(vo.getDeviceName()); + downtime.setReadStatus(vo.getReadStatus()); + downtime.setRecordTime(vo.getRecordTime()); + return downtime; + } +}