diff --git a/pasd-fire/pom.xml b/pasd-fire/pom.xml
index 478c782..cbc0036 100644
--- a/pasd-fire/pom.xml
+++ b/pasd-fire/pom.xml
@@ -11,18 +11,34 @@
pasd-fire
pasd-fire
-
- 消防设施管理模块
-
+ http://maven.apache.org
-
-
com.ruoyi
ruoyi-common
+
+ org.projectlombok
+ lombok
+
+
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ 3.5.3
+
+
+
+
+ com.baomidou
+ mybatis-plus-annotation
+ 3.5.3
+
-
+
+
+
\ No newline at end of file
diff --git a/pasd-fire/src/main/java/com/ruoyi/fire/controller/FireFacilityController.java b/pasd-fire/src/main/java/com/ruoyi/fire/controller/FireFacilityController.java
index 840209a..3135bf8 100644
--- a/pasd-fire/src/main/java/com/ruoyi/fire/controller/FireFacilityController.java
+++ b/pasd-fire/src/main/java/com/ruoyi/fire/controller/FireFacilityController.java
@@ -1,26 +1,24 @@
package com.ruoyi.fire.controller;
-import java.util.List;
-import javax.servlet.http.HttpServletResponse;
-import org.springframework.security.access.prepost.PreAuthorize;
-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.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.PageDomain;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.page.TableSupport;
import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.fire.domain.FireFacility;
import com.ruoyi.fire.service.IFireFacilityService;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.common.core.page.TableDataInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
/**
* facilitiesController
@@ -28,39 +26,86 @@ import com.ruoyi.common.core.page.TableDataInfo;
* @author Junhua
* @date 2025-07-15
*/
+@Anonymous
@RestController
@RequestMapping("/fire/facility")
public class FireFacilityController extends BaseController {
+
+
@Autowired
private IFireFacilityService fireFacilityService;
/**
- * 查询facilities列表
+ * 检查并更新设施状态
*/
- @PreAuthorize("@ss.hasPermi('fire:facility:list')")
- @GetMapping("/list")
- public TableDataInfo list(FireFacility fireFacility) {
+ @GetMapping("/check-status/{id}")
+ public AjaxResult checkAndUpdateStatus(@PathVariable Long id) {
+
+
+
+ int result = fireFacilityService.checkAndUpdateStatus(id);
+
+
+ if (result > 0) {
+ return AjaxResult.success("状态已更新");
+ }
+ return AjaxResult.success("状态无需更新");
+ }
+
+
+/// 获取所有设施列表
+
+
+
+@GetMapping("/list")
+public TableDataInfo list(FireFacility fireFacility) {
+ // 获取当前分页信息
+ PageDomain pageDomain = TableSupport.buildPageRequest();
+ Integer pageNum = pageDomain.getPageNum();
+ Integer pageSize = pageDomain.getPageSize();
+
+ // 传递分页参数到状态更新方法
+ fireFacilityService.checkAndUpdateExpirationStatus(fireFacility, pageNum, pageSize);
+
+ // 执行分页查询
+ startPage();
+ List list = fireFacilityService.selectFireFacilityList(fireFacility);
+
+ return getDataTable(list);
+}
+
+ /**
+ * 查询根据id查询设施列表
+ */
+// @PreAuthorize("@ss.hasPermi('fire:facility:list')")
+ @GetMapping("/details")
+ public TableDataInfo getDetails(FireFacility fireFacility) {
startPage();
- List list = fireFacilityService.selectFireFacilityList(fireFacility);
+ List list = fireFacilityService.getDetails(fireFacility);
return getDataTable(list);
}
/**
* 导出facilities列表
*/
- @PreAuthorize("@ss.hasPermi('fire:facility:export')")
+// @PreAuthorize("@ss.hasPermi('fire:facility:export')")
@Log(title = "facilities", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, FireFacility fireFacility) {
+
List list = fireFacilityService.selectFireFacilityList(fireFacility);
ExcelUtil util = new ExcelUtil(FireFacility.class);
+ // 调试:打印前 5 条数据的 remark 值
+ list.stream().limit(5).forEach(f -> {
+ System.out.println("ID: " + f.getId() + ", Remark: " + f.getRemark());
+ });
util.exportExcel(response, list, "facilities数据");
}
/**
* 获取facilities详细信息
*/
- @PreAuthorize("@ss.hasPermi('fire:facility:query')")
+// @PreAuthorize("@ss.hasPermi('fire:facility:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id) {
return success(fireFacilityService.selectFireFacilityById(id));
@@ -69,7 +114,7 @@ public class FireFacilityController extends BaseController {
/**
* 新增facilities
*/
- @PreAuthorize("@ss.hasPermi('fire:facility:add')")
+// @PreAuthorize("@ss.hasPermi('fire:facility:add')")
@Log(title = "facilities", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody FireFacility fireFacility) {
@@ -79,7 +124,7 @@ public class FireFacilityController extends BaseController {
/**
* 修改facilities
*/
- @PreAuthorize("@ss.hasPermi('fire:facility:edit')")
+// @PreAuthorize("@ss.hasPermi('fire:facility:edit')")
@Log(title = "facilities", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody FireFacility fireFacility) {
@@ -89,10 +134,34 @@ public class FireFacilityController extends BaseController {
/**
* 删除facilities
*/
- @PreAuthorize("@ss.hasPermi('fire:facility:remove')")
+// @PreAuthorize("@ss.hasPermi('fire:facility:remove')")
@Log(title = "facilities", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids) {
return toAjax(fireFacilityService.deleteFireFacilityByIds(ids));
}
+ /**
+ * 导入Excel数据
+ * @param file Excel文件
+ * @param updateSupport 是否支持更新(1=支持,0=不支持)
+ * @return 导入结果
+ */
+ @Log(title = "消防设施", businessType = BusinessType.IMPORT)
+ @PostMapping("/importData")
+ public AjaxResult importData(MultipartFile file, @RequestParam(defaultValue = "0") String updateSupport) throws Exception {
+
+ boolean isUpdate = "1".equals(updateSupport); // 1表示支持更新,0表示仅新增
+ String result = fireFacilityService.importFireFacility(file, isUpdate);
+ return success(result);
+ }
+
+ /**
+ * 下载导入模板
+ * @param response 响应对象
+ */
+ @GetMapping("/importTemplate")
+ public void importTemplate(HttpServletResponse response) {
+ ExcelUtil util = new ExcelUtil<>(FireFacility.class);
+ util.exportExcel(response, null, "消防设施导入模板");
+ }
}
diff --git a/pasd-fire/src/main/java/com/ruoyi/fire/controller/FireFacilityRepairController.java b/pasd-fire/src/main/java/com/ruoyi/fire/controller/FireFacilityRepairController.java
new file mode 100644
index 0000000..18aad02
--- /dev/null
+++ b/pasd-fire/src/main/java/com/ruoyi/fire/controller/FireFacilityRepairController.java
@@ -0,0 +1,104 @@
+package com.ruoyi.fire.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+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.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.fire.domain.FireFacilityRepair;
+import com.ruoyi.fire.service.IFireFacilityRepairService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 消防设施维修记录Controller
+ *
+ * @author Junhua
+ * @date 2025-07-16
+ */
+@RestController
+@RequestMapping("/fire_facility_repair/repair")
+public class FireFacilityRepairController extends BaseController
+{
+ @Autowired
+ private IFireFacilityRepairService fireFacilityRepairService;
+
+ /**
+ * 查询消防设施维修记录列表
+ */
+ @PreAuthorize("@ss.hasPermi('fire_facility_repair:repair:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(FireFacilityRepair fireFacilityRepair)
+ {
+ startPage();
+ List list = fireFacilityRepairService.selectFireFacilityRepairList(fireFacilityRepair);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出消防设施维修记录列表
+ */
+ @PreAuthorize("@ss.hasPermi('fire_facility_repair:repair:export')")
+ @Log(title = "消防设施维修记录", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, FireFacilityRepair fireFacilityRepair)
+ {
+ List list = fireFacilityRepairService.selectFireFacilityRepairList(fireFacilityRepair);
+ ExcelUtil util = new ExcelUtil(FireFacilityRepair.class);
+ util.exportExcel(response, list, "消防设施维修记录数据");
+ }
+
+ /**
+ * 获取消防设施维修记录详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('fire_facility_repair:repair:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return success(fireFacilityRepairService.selectFireFacilityRepairById(id));
+ }
+
+ /**
+ * 新增消防设施维修记录
+ */
+ @PreAuthorize("@ss.hasPermi('fire_facility_repair:repair:add')")
+ @Log(title = "消防设施维修记录", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody FireFacilityRepair fireFacilityRepair)
+ {
+ return toAjax(fireFacilityRepairService.insertFireFacilityRepair(fireFacilityRepair));
+ }
+
+ /**
+ * 修改消防设施维修记录
+ */
+ @PreAuthorize("@ss.hasPermi('fire_facility_repair:repair:edit')")
+ @Log(title = "消防设施维修记录", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody FireFacilityRepair fireFacilityRepair)
+ {
+ return toAjax(fireFacilityRepairService.updateFireFacilityRepair(fireFacilityRepair));
+ }
+
+ /**
+ * 删除消防设施维修记录
+ */
+ @PreAuthorize("@ss.hasPermi('fire_facility_repair:repair:remove')")
+ @Log(title = "消防设施维修记录", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable Long[] ids)
+ {
+ return toAjax(fireFacilityRepairService.deleteFireFacilityRepairByIds(ids));
+ }
+}
diff --git a/pasd-fire/src/main/java/com/ruoyi/fire/controller/FireFacilityReplacementController.java b/pasd-fire/src/main/java/com/ruoyi/fire/controller/FireFacilityReplacementController.java
new file mode 100644
index 0000000..5c16101
--- /dev/null
+++ b/pasd-fire/src/main/java/com/ruoyi/fire/controller/FireFacilityReplacementController.java
@@ -0,0 +1,104 @@
+package com.ruoyi.fire.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+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.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.fire.domain.FireFacilityReplacement;
+import com.ruoyi.fire.service.IFireFacilityReplacementService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 消防设施更换记录Controller
+ *
+ * @author Junhau
+ * @date 2025-07-17
+ */
+@RestController
+@RequestMapping("/fire_facility_replacement/replacement")
+public class FireFacilityReplacementController extends BaseController
+{
+ @Autowired
+ private IFireFacilityReplacementService fireFacilityReplacementService;
+
+ /**
+ * 查询消防设施更换记录列表
+ */
+ @PreAuthorize("@ss.hasPermi('fire_facility_replacement:replacement:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(FireFacilityReplacement fireFacilityReplacement)
+ {
+ startPage();
+ List list = fireFacilityReplacementService.selectFireFacilityReplacementList(fireFacilityReplacement);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出消防设施更换记录列表
+ */
+ @PreAuthorize("@ss.hasPermi('fire_facility_replacement:replacement:export')")
+ @Log(title = "消防设施更换记录", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, FireFacilityReplacement fireFacilityReplacement)
+ {
+ List list = fireFacilityReplacementService.selectFireFacilityReplacementList(fireFacilityReplacement);
+ ExcelUtil util = new ExcelUtil(FireFacilityReplacement.class);
+ util.exportExcel(response, list, "消防设施更换记录数据");
+ }
+
+ /**
+ * 获取消防设施更换记录详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('fire_facility_replacement:replacement:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return success(fireFacilityReplacementService.selectFireFacilityReplacementById(id));
+ }
+
+ /**
+ * 新增消防设施更换记录
+ */
+ @PreAuthorize("@ss.hasPermi('fire_facility_replacement:replacement:add')")
+ @Log(title = "消防设施更换记录", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody FireFacilityReplacement fireFacilityReplacement)
+ {
+ return toAjax(fireFacilityReplacementService.insertFireFacilityReplacement(fireFacilityReplacement));
+ }
+
+ /**
+ * 修改消防设施更换记录
+ */
+ @PreAuthorize("@ss.hasPermi('fire_facility_replacement:replacement:edit')")
+ @Log(title = "消防设施更换记录", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody FireFacilityReplacement fireFacilityReplacement)
+ {
+ return toAjax(fireFacilityReplacementService.updateFireFacilityReplacement(fireFacilityReplacement));
+ }
+
+ /**
+ * 删除消防设施更换记录
+ */
+ @PreAuthorize("@ss.hasPermi('fire_facility_replacement:replacement:remove')")
+ @Log(title = "消防设施更换记录", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable Long[] ids)
+ {
+ return toAjax(fireFacilityReplacementService.deleteFireFacilityReplacementByIds(ids));
+ }
+}
diff --git a/pasd-fire/src/main/java/com/ruoyi/fire/controller/FireFacilityReportController.java b/pasd-fire/src/main/java/com/ruoyi/fire/controller/FireFacilityReportController.java
new file mode 100644
index 0000000..55ba155
--- /dev/null
+++ b/pasd-fire/src/main/java/com/ruoyi/fire/controller/FireFacilityReportController.java
@@ -0,0 +1,104 @@
+package com.ruoyi.fire.controller;
+
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.fire.domain.FireFacilityReport;
+import com.ruoyi.fire.service.IFireFacilityReportService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.HashMap;
+
+@RestController
+@RequestMapping("/fire/facility-report")
+public class FireFacilityReportController extends BaseController {
+
+ @Autowired
+ private IFireFacilityReportService fireFacilityReportService;
+
+ /**
+ * 按设施类型筛选统计数据
+ */
+ @GetMapping("/report")
+ public AjaxResult getReport(@RequestParam(required = false) String facilityType) {
+ return AjaxResult.success(fireFacilityReportService.getReportData(facilityType));
+ }
+
+ /**
+ * 获取指定状态+设施类型的详情数据
+ */
+ @GetMapping("/detail")
+ public AjaxResult getDetail(
+ @RequestParam Integer status,
+ @RequestParam(required = false) String facilityType,
+ @RequestParam(defaultValue = "1") int pageNum,
+ @RequestParam(defaultValue = "10") int pageSize) {
+
+ FireFacilityReport query = new FireFacilityReport();
+ query.setFacilityType(facilityType);
+
+ // 1. 查询所有数据
+ List facilityList = fireFacilityReportService.selectFireFacilityReportList(query);
+
+ // 2. 筛选出所有符合状态条件的数据
+ List filteredList = facilityList.stream()
+ .map(facility -> {
+ Integer dynamicStatus = fireFacilityReportService.calculateDynamicStatus(
+ facility.getExpiryDate(),
+ facility.getStatus()
+ );
+ facility.setDynamicStatus(dynamicStatus);
+ facility.setStatusText(fireFacilityReportService.getStatusText(dynamicStatus));
+ return facility;
+ })
+ .filter(facility -> Objects.equals(facility.getDynamicStatus(), status))
+ .collect(Collectors.toList());
+
+ // 3. 计算总条数(关键:用于前端分页控件)
+ int total = filteredList.size();
+
+ // 4. 执行分页逻辑
+ int start = (pageNum - 1) * pageSize;
+ // 处理边界情况:当start超过列表长度时,返回空列表
+ if (start >= filteredList.size()) {
+ Map result = new HashMap<>();
+ result.put("list", Collections.emptyList());
+ result.put("total", total);
+ return AjaxResult.success(result);
+ }
+
+ int end = Math.min(start + pageSize, filteredList.size());
+ List pagedList = filteredList.subList(start, end);
+
+ // 5. 返回分页数据和总条数
+ Map result = new HashMap<>();
+ result.put("list", pagedList);
+ result.put("total", total);
+ return AjaxResult.success(result);
+ }
+
+ /**
+ * 获取所有状态的设施数据(支持按类型筛选)
+ */
+ @GetMapping("/all")
+ public AjaxResult getAllData(@RequestParam(required = false) String facilityType) {
+ FireFacilityReport query = new FireFacilityReport();
+ query.setFacilityType(facilityType);
+
+ List list = fireFacilityReportService.selectFireFacilityReportList(query);
+ list.forEach(facility -> {
+ Integer dynamicStatus = fireFacilityReportService.calculateDynamicStatus(
+ facility.getExpiryDate(),
+ facility.getStatus()
+ );
+ facility.setDynamicStatus(dynamicStatus);
+ facility.setStatusText(fireFacilityReportService.getStatusText(dynamicStatus));
+ });
+ return AjaxResult.success(list);
+ }
+}
diff --git a/pasd-fire/src/main/java/com/ruoyi/fire/domain/FireFacility.java b/pasd-fire/src/main/java/com/ruoyi/fire/domain/FireFacility.java
index 94efa9e..0f81630 100644
--- a/pasd-fire/src/main/java/com/ruoyi/fire/domain/FireFacility.java
+++ b/pasd-fire/src/main/java/com/ruoyi/fire/domain/FireFacility.java
@@ -1,6 +1,10 @@
+
+
package com.ruoyi.fire.domain;
import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
@@ -14,154 +18,170 @@ import com.ruoyi.common.core.domain.BaseEntity;
* @author Junhua
* @date 2025-07-15
*/
-public class FireFacility extends BaseEntity {
+public class FireFacility extends BaseEntity
+{
private static final long serialVersionUID = 1L;
- /**
- * 设施ID,自增主键
- */
+ private transient String statusName;
+
+ public String getStatusName() {
+ return statusName;
+ }
+
+ public void setStatusName(String statusName) {
+ this.statusName = statusName;
+ }
+
+
+ /** 设施ID,自增主键 */
@Excel(name = "设施ID,自增主键")
private Long id;
- /**
- * 位置ID(字符串描述,如"A101")
- */
- @Excel(name = "位置ID", readConverterExp = "字=符串描述,如A101")
+ /** 位置ID(字符串描述,如"A101") */
+ @Excel(name = "位置ID")
private String locationId;
- /**
- * 设施名称(如"干粉灭火器")
- */
- @Excel(name = "设施名称", readConverterExp = "如=干粉灭火器")
+ /** 设施名称(如"干粉灭火器") */
+ @Excel(name = "设施名称")
private String facilityName;
- /**
- * 设施类型(如"灭火器/消防栓")
- */
- @Excel(name = "设施类型", readConverterExp = "如=灭火器/消防栓")
+ /** 设施类型(如"灭火器/消防栓") */
+ @Excel(name = "设施类型")
private String facilityType;
- /**
- * 型号规格
- */
+ /** 型号规格 */
@Excel(name = "型号规格")
private String modelNumber;
- /**
- * 数量(通常≤10,用tinyint节省空间)
- */
- @Excel(name = "数量", readConverterExp = "通=常≤10,用tinyint节省空间")
+ /** 数量(通常≤10,用tinyint节省空间) */
+ @Excel(name = "数量")
private Integer quantity;
- /**
- * 入库时间(默认当前日期)
- */
- @Excel(name = "入库时间", readConverterExp = "默=认当前日期")
+ /** 入库时间(默认当前日期) */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "入库时间",width = 30, dateFormat = "yyyy-MM-dd")
private Date entryDate;
- /**
- * 生产日期
- */
+ /** 生产日期 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "生产日期", width = 30, dateFormat = "yyyy-MM-dd")
private Date productionDate;
- /**
- * 过期日期
- */
+ /** 过期日期 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "过期日期", width = 30, dateFormat = "yyyy-MM-dd")
private Date expiryDate;
- /**
- * 状态(0=正常,1=即将过期,2=已过期,3=维修中,4=已更换,5=已报废)
- */
- @Excel(name = "状态", readConverterExp = "0==正常,1=即将过期,2=已过期,3=维修中,4=已更换,5=已报废")
+ /** 备注 */
+ @Excel(name = "备注")
+ private String remark;
+
+ /** 状态(0=正常,1=即将过期,2=已过期,3=维修中,4=已更换,5=已报废) */
+ @Excel(name = "状态", dictType = "fire_facility_status")
private Integer status;
- public void setId(Long id) {
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public void setId(Long id)
+ {
this.id = id;
}
- public Long getId() {
+ public Long getId()
+ {
return id;
}
-
- public void setLocationId(String locationId) {
+ public void setLocationId(String locationId)
+ {
this.locationId = locationId;
}
- public String getLocationId() {
+ public String getLocationId()
+ {
return locationId;
}
-
- public void setFacilityName(String facilityName) {
+ public void setFacilityName(String facilityName)
+ {
this.facilityName = facilityName;
}
- public String getFacilityName() {
+ public String getFacilityName()
+ {
return facilityName;
}
-
- public void setFacilityType(String facilityType) {
+ public void setFacilityType(String facilityType)
+ {
this.facilityType = facilityType;
}
- public String getFacilityType() {
+ public String getFacilityType()
+ {
return facilityType;
}
-
- public void setModelNumber(String modelNumber) {
+ public void setModelNumber(String modelNumber)
+ {
this.modelNumber = modelNumber;
}
- public String getModelNumber() {
+ public String getModelNumber()
+ {
return modelNumber;
}
-
- public void setQuantity(Integer quantity) {
+ public void setQuantity(Integer quantity)
+ {
this.quantity = quantity;
}
- public Integer getQuantity() {
+ public Integer getQuantity()
+ {
return quantity;
}
-
- public void setEntryDate(Date entryDate) {
+ public void setEntryDate(Date entryDate)
+ {
this.entryDate = entryDate;
}
- public Date getEntryDate() {
+ public Date getEntryDate()
+ {
return entryDate;
}
-
- public void setProductionDate(Date productionDate) {
+ public void setProductionDate(Date productionDate)
+ {
this.productionDate = productionDate;
}
- public Date getProductionDate() {
+ public Date getProductionDate()
+ {
return productionDate;
}
-
- public void setExpiryDate(Date expiryDate) {
+ public void setExpiryDate(Date expiryDate)
+ {
this.expiryDate = expiryDate;
}
- public Date getExpiryDate() {
+ public Date getExpiryDate()
+ {
return expiryDate;
}
-
- public void setStatus(Integer status) {
+ public void setStatus(Integer status)
+ {
this.status = status;
}
- public Integer getStatus() {
+ public Integer getStatus()
+ {
return status;
}
@Override
public String toString() {
- return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("locationId", getLocationId())
.append("facilityName", getFacilityName())
@@ -177,4 +197,16 @@ public class FireFacility extends BaseEntity {
.append("updateTime", getUpdateTime())
.toString();
}
+
+
+
+
+
+
+
+
+
+
+
+
}
diff --git a/pasd-fire/src/main/java/com/ruoyi/fire/domain/FireFacilityRepair.java b/pasd-fire/src/main/java/com/ruoyi/fire/domain/FireFacilityRepair.java
new file mode 100644
index 0000000..689bdae
--- /dev/null
+++ b/pasd-fire/src/main/java/com/ruoyi/fire/domain/FireFacilityRepair.java
@@ -0,0 +1,152 @@
+package com.ruoyi.fire.domain;
+import java.util.Date;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+
+ 消防设施维修记录对象 fire_facility_repair
+ @author Junhua
+ @date 2025-07-16
+ */
+public class FireFacilityRepair extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+ /** 维修 ID,自增主键 */
+ private Long id;
+ /** 设施 ID(逻辑关联 fire_facilities.id) */
+ @Excel (name = "设施 ID")
+ @NotNull (message = "设施 ID 不能为空")
+ private Long facilityId;
+ /** 维修日期 */
+ @JsonFormat (pattern = "yyyy-MM-dd")
+ @Excel (name = "维修日期", width = 30, dateFormat = "yyyy-MM-dd")
+ @NotNull (message = "维修日期不能为空")
+ private Date repairDate;
+ /** 维修内容(详细描述) */
+ @Excel (name = "维修内容")
+ @NotBlank (message = "维修内容不能为空")
+ @Size (max = 500, message = "维修内容不能超过 500 个字符")
+ private String repairContent;
+ /**
+ 维修结果(0 = 成功,1 = 失败,2 = 部分解决)
+ 通过 dictType 关联数据字典,实现 Excel 导出时的文本映射
+ */
+ @Excel (name = "维修结果", dictType = "fire_repair_result") // 核心修改:添加 dictType 关联字典
+ @NotNull (message = "维修结果不能为空")
+ private Integer repairResult;
+ /** 操作人员(工号 || 姓名) */
+ @Excel (name = "操作人员")
+ @NotBlank (message = "操作人员不能为空")
+ @Size (max = 20, message = "操作人员姓名不能超过 20 个字符")
+ private String replacePerson;
+ /** 下次检查日期 */
+ @JsonFormat (pattern = "yyyy-MM-dd")
+ @Excel (name = "下次检查日期", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date nextCheckDate;
+ /** 创建时间 */
+ @JsonFormat (pattern = "yyyy-MM-dd HH:mm:ss")
+ @Excel (name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+ /** 备注 */
+ @Excel (name = "备注")
+ @Size (max = 200, message = "备注不能超过 200 个字符")
+ private String remark;
+ // 以下为 getter/setter 方法(保持不变)
+ public void setId (Long id)
+ {
+ this.id = id;
+ }
+ public Long getId()
+ {
+ return id;
+ }
+ public void setFacilityId(Long facilityId)
+ {
+ this.facilityId = facilityId;
+ }
+ public Long getFacilityId()
+ {
+ return facilityId;
+ }
+ public void setRepairDate(Date repairDate)
+ {
+ this.repairDate = repairDate;
+ }
+ public Date getRepairDate()
+ {
+ return repairDate;
+ }
+ public void setRepairContent(String repairContent)
+ {
+ this.repairContent = repairContent;
+ }
+ public String getRepairContent()
+ {
+ return repairContent;
+ }
+ public void setRepairResult(Integer repairResult)
+ {
+ this.repairResult = repairResult;
+ }
+ public Integer getRepairResult()
+ {
+ return repairResult;
+ }
+ public void setReplacePerson(String replacePerson)
+ {
+ this.replacePerson = replacePerson;
+ }
+ public String getReplacePerson()
+ {
+ return replacePerson;
+ }
+ public void setNextCheckDate(Date nextCheckDate)
+ {
+ this.nextCheckDate = nextCheckDate;
+ }
+ public Date getNextCheckDate()
+ {
+ return nextCheckDate;
+ }
+ @Override
+ public void setRemark(String remark)
+ {
+ this.remark = remark;
+ }
+ @Override
+ public String getRemark()
+ {
+ return remark;
+ }
+ @Override
+ public void setCreateTime(Date createTime)
+ {
+ this.createTime = createTime;
+ }
+ @Override
+ public Date getCreateTime()
+ {
+ return createTime;
+ }
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+ .append("id", getId())
+ .append("facilityId", getFacilityId())
+ .append("repairDate", getRepairDate())
+ .append("repairContent", getRepairContent())
+ .append("repairResult", getRepairResult())
+ .append("replacePerson", getReplacePerson())
+ .append("nextCheckDate", getNextCheckDate())
+ .append("remark", getRemark())
+ .append("createTime", getCreateTime())
+ .toString();
+ }
+}
diff --git a/pasd-fire/src/main/java/com/ruoyi/fire/domain/FireFacilityReplacement.java b/pasd-fire/src/main/java/com/ruoyi/fire/domain/FireFacilityReplacement.java
new file mode 100644
index 0000000..75b1913
--- /dev/null
+++ b/pasd-fire/src/main/java/com/ruoyi/fire/domain/FireFacilityReplacement.java
@@ -0,0 +1,164 @@
+package com.ruoyi.fire.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+/**
+ * 消防设施更换记录对象 fire_facility_replacement
+ *
+ * @author system
+ * @date 2025-07-22
+ */
+public class FireFacilityReplacement extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 设施ID,自增主键 */
+ @Excel(name = "设施ID,自增主键")
+ private Long id;
+
+ /** 原设施ID(逻辑关联fire_facilities.id) */
+ @Excel(name = "原设施ID")
+ @NotNull(message = "原设施ID不能为空")
+ private Long oldFacilityId;
+
+ /** 新设施ID(逻辑关联fire_facilities.id) */
+ @Excel(name = "新设施ID")
+ @NotNull(message = "新设施ID不能为空")
+ private Long newFacilityId;
+
+ /** 更换日期 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "更换日期", width = 30, dateFormat = "yyyy-MM-dd")
+ @NotNull(message = "更换日期不能为空")
+ private Date replaceDate;
+
+ /** 更换原因(详细说明) */
+ @Excel(name = "更换原因")
+ @NotBlank(message = "更换原因不能为空")
+ @Size(max = 200, message = "更换原因长度不能超过200个字符")
+ private String replaceReason;
+
+ /** 更换人(操作人员) */
+ @Excel(name = "更换人")
+ @NotBlank(message = "更换人不能为空")
+ @Size(max = 20, message = "更换人姓名长度不能超过20个字符")
+ private String replacePerson;
+
+ /** 备注 */
+ @Excel(name = "备注")
+ @Size(max = 200, message = "备注长度不能超过200个字符")
+ private String remark;
+
+ /** 创建时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+
+ // 以下为所有字段的getter和setter方法,确保每个字段都能被正确访问和设置
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+
+ public void setOldFacilityId(Long oldFacilityId)
+ {
+ this.oldFacilityId = oldFacilityId;
+ }
+
+ public Long getOldFacilityId()
+ {
+ return oldFacilityId;
+ }
+
+ public void setNewFacilityId(Long newFacilityId)
+ {
+ this.newFacilityId = newFacilityId;
+ }
+
+ public Long getNewFacilityId()
+ {
+ return newFacilityId;
+ }
+
+ public void setReplaceDate(Date replaceDate)
+ {
+ this.replaceDate = replaceDate;
+ }
+
+ public Date getReplaceDate()
+ {
+ return replaceDate;
+ }
+
+ public void setReplaceReason(String replaceReason)
+ {
+ this.replaceReason = replaceReason;
+ }
+
+ public String getReplaceReason()
+ {
+ return replaceReason;
+ }
+
+ public void setReplacePerson(String replacePerson)
+ {
+ this.replacePerson = replacePerson;
+ }
+
+ public String getReplacePerson()
+ {
+ return replacePerson;
+ }
+
+ @Override
+ public void setRemark(String remark)
+ {
+ this.remark = remark;
+ }
+
+ @Override
+ public String getRemark()
+ {
+ return remark;
+ }
+
+ @Override
+ public void setCreateTime(Date createTime)
+ {
+ this.createTime = createTime;
+ }
+
+ @Override
+ public Date getCreateTime()
+ {
+ return createTime;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+ .append("id", getId())
+ .append("oldFacilityId", getOldFacilityId())
+ .append("newFacilityId", getNewFacilityId())
+ .append("replaceDate", getReplaceDate())
+ .append("replaceReason", getReplaceReason())
+ .append("replacePerson", getReplacePerson())
+ .append("remark", getRemark())
+ .append("createTime", getCreateTime())
+ .toString();
+ }
+}
diff --git a/pasd-fire/src/main/java/com/ruoyi/fire/domain/FireFacilityReport.java b/pasd-fire/src/main/java/com/ruoyi/fire/domain/FireFacilityReport.java
new file mode 100644
index 0000000..55ba1f2
--- /dev/null
+++ b/pasd-fire/src/main/java/com/ruoyi/fire/domain/FireFacilityReport.java
@@ -0,0 +1,57 @@
+package com.ruoyi.fire.domain;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import java.util.Date;
+
+public class FireFacilityReport extends BaseEntity {
+ private Long id;
+ private String locationId;
+ private String facilityName;
+ private String facilityType;
+ private String modelNumber;
+ private Integer quantity;
+ private Date entryDate;
+ private Date productionDate;
+ private Date expiryDate;
+ private Integer status;
+ private String remark;
+ private Date createTime;
+ private Date updateTime;
+
+ // 动态计算的状态
+ private Integer dynamicStatus;
+ // 状态文本
+ private String statusText;
+
+ // Getters and Setters
+ public Long getId() { return id; }
+ public void setId(Long id) { this.id = id; }
+ public String getLocationId() { return locationId; }
+ public void setLocationId(String locationId) { this.locationId = locationId; }
+ public String getFacilityName() { return facilityName; }
+ public void setFacilityName(String facilityName) { this.facilityName = facilityName; }
+ public String getFacilityType() { return facilityType; }
+ public void setFacilityType(String facilityType) { this.facilityType = facilityType; }
+ public String getModelNumber() { return modelNumber; }
+ public void setModelNumber(String modelNumber) { this.modelNumber = modelNumber; }
+ public Integer getQuantity() { return quantity; }
+ public void setQuantity(Integer quantity) { this.quantity = quantity; }
+ public Date getEntryDate() { return entryDate; }
+ public void setEntryDate(Date entryDate) { this.entryDate = entryDate; }
+ public Date getProductionDate() { return productionDate; }
+ public void setProductionDate(Date productionDate) { this.productionDate = productionDate; }
+ public Date getExpiryDate() { return expiryDate; }
+ public void setExpiryDate(Date expiryDate) { this.expiryDate = expiryDate; }
+ public Integer getStatus() { return status; }
+ public void setStatus(Integer status) { this.status = status; }
+ public String getRemark() { return remark; }
+ public void setRemark(String remark) { this.remark = remark; }
+ public Date getCreateTime() { return createTime; }
+ public void setCreateTime(Date createTime) { this.createTime = createTime; }
+ public Date getUpdateTime() { return updateTime; }
+ public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }
+ public Integer getDynamicStatus() { return dynamicStatus; }
+ public void setDynamicStatus(Integer dynamicStatus) { this.dynamicStatus = dynamicStatus; }
+ public String getStatusText() { return statusText; }
+ public void setStatusText(String statusText) { this.statusText = statusText; }
+}
\ No newline at end of file
diff --git a/pasd-fire/src/main/java/com/ruoyi/fire/mapper/FireFacilityMapper.java b/pasd-fire/src/main/java/com/ruoyi/fire/mapper/FireFacilityMapper.java
index 6000a08..d3c5c3a 100644
--- a/pasd-fire/src/main/java/com/ruoyi/fire/mapper/FireFacilityMapper.java
+++ b/pasd-fire/src/main/java/com/ruoyi/fire/mapper/FireFacilityMapper.java
@@ -1,19 +1,23 @@
package com.ruoyi.fire.mapper;
+import java.util.Date;
import java.util.List;
+import java.util.Map;
import com.ruoyi.fire.domain.FireFacility;
+import org.apache.ibatis.annotations.Param;
/**
* facilitiesMapper接口
- *
+ *
* @author Junhua
* @date 2025-07-15
*/
-public interface FireFacilityMapper {
+public interface FireFacilityMapper
+{
/**
* 查询facilities
- *
+ *
* @param id facilities主键
* @return facilities
*/
@@ -21,7 +25,7 @@ public interface FireFacilityMapper {
/**
* 查询facilities列表
- *
+ *
* @param fireFacility facilities
* @return facilities集合
*/
@@ -29,7 +33,7 @@ public interface FireFacilityMapper {
/**
* 新增facilities
- *
+ *
* @param fireFacility facilities
* @return 结果
*/
@@ -37,7 +41,7 @@ public interface FireFacilityMapper {
/**
* 修改facilities
- *
+ *
* @param fireFacility facilities
* @return 结果
*/
@@ -45,7 +49,7 @@ public interface FireFacilityMapper {
/**
* 删除facilities
- *
+ *
* @param id facilities主键
* @return 结果
*/
@@ -53,9 +57,26 @@ public interface FireFacilityMapper {
/**
* 批量删除facilities
- *
+ *
* @param ids 需要删除的数据主键集合
* @return 结果
*/
public int deleteFireFacilityByIds(Long[] ids);
+
+ /**
+ * 根据位置ID和设施名称查询(用于校验重复)
+ * @param locationId 位置ID
+ * @param facilityName 设施名称
+ * @return 消防设施对象
+ */
+ FireFacility selectByLocationAndName(
+ @Param("locationId") String locationId,
+ @Param("facilityName") String facilityName);
+
+ /**
+ * 查询根据id查询设施列表
+ */
+ List getDetails(FireFacility fireFacility);
+
}
+
diff --git a/pasd-fire/src/main/java/com/ruoyi/fire/mapper/FireFacilityRepairMapper.java b/pasd-fire/src/main/java/com/ruoyi/fire/mapper/FireFacilityRepairMapper.java
new file mode 100644
index 0000000..99d627e
--- /dev/null
+++ b/pasd-fire/src/main/java/com/ruoyi/fire/mapper/FireFacilityRepairMapper.java
@@ -0,0 +1,61 @@
+package com.ruoyi.fire.mapper;
+
+import java.util.List;
+import com.ruoyi.fire.domain.FireFacilityRepair;
+
+/**
+ * 消防设施维修记录Mapper接口
+ *
+ * @author Junhua
+ * @date 2025-07-16
+ */
+public interface FireFacilityRepairMapper
+{
+ /**
+ * 查询消防设施维修记录
+ *
+ * @param id 消防设施维修记录主键
+ * @return 消防设施维修记录
+ */
+ public FireFacilityRepair selectFireFacilityRepairById(Long id);
+
+ /**
+ * 查询消防设施维修记录列表
+ *
+ * @param fireFacilityRepair 消防设施维修记录
+ * @return 消防设施维修记录集合
+ */
+ public List selectFireFacilityRepairList(FireFacilityRepair fireFacilityRepair);
+
+ /**
+ * 新增消防设施维修记录
+ *
+ * @param fireFacilityRepair 消防设施维修记录
+ * @return 结果
+ */
+ public int insertFireFacilityRepair(FireFacilityRepair fireFacilityRepair);
+
+ /**
+ * 修改消防设施维修记录
+ *
+ * @param fireFacilityRepair 消防设施维修记录
+ * @return 结果
+ */
+ public int updateFireFacilityRepair(FireFacilityRepair fireFacilityRepair);
+
+ /**
+ * 删除消防设施维修记录
+ *
+ * @param id 消防设施维修记录主键
+ * @return 结果
+ */
+ public int deleteFireFacilityRepairById(Long id);
+
+ /**
+ * 批量删除消防设施维修记录
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteFireFacilityRepairByIds(Long[] ids);
+}
diff --git a/pasd-fire/src/main/java/com/ruoyi/fire/mapper/FireFacilityReplacementMapper.java b/pasd-fire/src/main/java/com/ruoyi/fire/mapper/FireFacilityReplacementMapper.java
new file mode 100644
index 0000000..2d28d09
--- /dev/null
+++ b/pasd-fire/src/main/java/com/ruoyi/fire/mapper/FireFacilityReplacementMapper.java
@@ -0,0 +1,61 @@
+package com.ruoyi.fire.mapper;
+
+import java.util.List;
+import com.ruoyi.fire.domain.FireFacilityReplacement;
+
+/**
+ * 消防设施更换记录Mapper接口
+ *
+ * @author Junhau
+ * @date 2025-07-17
+ */
+public interface FireFacilityReplacementMapper
+{
+ /**
+ * 查询消防设施更换记录
+ *
+ * @param id 消防设施更换记录主键
+ * @return 消防设施更换记录
+ */
+ public FireFacilityReplacement selectFireFacilityReplacementById(Long id);
+
+ /**
+ * 查询消防设施更换记录列表
+ *
+ * @param fireFacilityReplacement 消防设施更换记录
+ * @return 消防设施更换记录集合
+ */
+ public List selectFireFacilityReplacementList(FireFacilityReplacement fireFacilityReplacement);
+
+ /**
+ * 新增消防设施更换记录
+ *
+ * @param fireFacilityReplacement 消防设施更换记录
+ * @return 结果
+ */
+ public int insertFireFacilityReplacement(FireFacilityReplacement fireFacilityReplacement);
+
+ /**
+ * 修改消防设施更换记录
+ *
+ * @param fireFacilityReplacement 消防设施更换记录
+ * @return 结果
+ */
+ public int updateFireFacilityReplacement(FireFacilityReplacement fireFacilityReplacement);
+
+ /**
+ * 删除消防设施更换记录
+ *
+ * @param id 消防设施更换记录主键
+ * @return 结果
+ */
+ public int deleteFireFacilityReplacementById(Long id);
+
+ /**
+ * 批量删除消防设施更换记录
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteFireFacilityReplacementByIds(Long[] ids);
+}
diff --git a/pasd-fire/src/main/java/com/ruoyi/fire/mapper/FireFacilityReportMapper.java b/pasd-fire/src/main/java/com/ruoyi/fire/mapper/FireFacilityReportMapper.java
new file mode 100644
index 0000000..844009b
--- /dev/null
+++ b/pasd-fire/src/main/java/com/ruoyi/fire/mapper/FireFacilityReportMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.fire.mapper;
+
+// 移除错误的Lettuce导入,改为MyBatis的Param注解
+import org.apache.ibatis.annotations.Param; // 正确的导入
+import org.apache.ibatis.annotations.Mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.fire.domain.FireFacilityReport;
+import java.util.List;
+
+@Mapper
+public interface FireFacilityReportMapper extends BaseMapper {
+ List selectFireFacilityReportList(FireFacilityReport fireFacilityReport);
+
+ // 使用MyBatis的@Param注解绑定参数名称
+ int batchUpdateStatus(@Param("ids") List ids, @Param("newStatus") Integer newStatus);
+}
\ No newline at end of file
diff --git a/pasd-fire/src/main/java/com/ruoyi/fire/service/IFireFacilityRepairService.java b/pasd-fire/src/main/java/com/ruoyi/fire/service/IFireFacilityRepairService.java
new file mode 100644
index 0000000..25a7efc
--- /dev/null
+++ b/pasd-fire/src/main/java/com/ruoyi/fire/service/IFireFacilityRepairService.java
@@ -0,0 +1,61 @@
+package com.ruoyi.fire.service;
+
+import java.util.List;
+import com.ruoyi.fire.domain.FireFacilityRepair;
+
+/**
+ * 消防设施维修记录Service接口
+ *
+ * @author Junhua
+ * @date 2025-07-16
+ */
+public interface IFireFacilityRepairService
+{
+ /**
+ * 查询消防设施维修记录
+ *
+ * @param id 消防设施维修记录主键
+ * @return 消防设施维修记录
+ */
+ public FireFacilityRepair selectFireFacilityRepairById(Long id);
+
+ /**
+ * 查询消防设施维修记录列表
+ *
+ * @param fireFacilityRepair 消防设施维修记录
+ * @return 消防设施维修记录集合
+ */
+ public List selectFireFacilityRepairList(FireFacilityRepair fireFacilityRepair);
+
+ /**
+ * 新增消防设施维修记录
+ *
+ * @param fireFacilityRepair 消防设施维修记录
+ * @return 结果
+ */
+ public int insertFireFacilityRepair(FireFacilityRepair fireFacilityRepair);
+
+ /**
+ * 修改消防设施维修记录
+ *
+ * @param fireFacilityRepair 消防设施维修记录
+ * @return 结果
+ */
+ public int updateFireFacilityRepair(FireFacilityRepair fireFacilityRepair);
+
+ /**
+ * 批量删除消防设施维修记录
+ *
+ * @param ids 需要删除的消防设施维修记录主键集合
+ * @return 结果
+ */
+ public int deleteFireFacilityRepairByIds(Long[] ids);
+
+ /**
+ * 删除消防设施维修记录信息
+ *
+ * @param id 消防设施维修记录主键
+ * @return 结果
+ */
+ public int deleteFireFacilityRepairById(Long id);
+}
diff --git a/pasd-fire/src/main/java/com/ruoyi/fire/service/IFireFacilityReplacementService.java b/pasd-fire/src/main/java/com/ruoyi/fire/service/IFireFacilityReplacementService.java
new file mode 100644
index 0000000..d647f58
--- /dev/null
+++ b/pasd-fire/src/main/java/com/ruoyi/fire/service/IFireFacilityReplacementService.java
@@ -0,0 +1,61 @@
+package com.ruoyi.fire.service;
+
+import java.util.List;
+import com.ruoyi.fire.domain.FireFacilityReplacement;
+
+/**
+ * 消防设施更换记录Service接口
+ *
+ * @author Junhau
+ * @date 2025-07-17
+ */
+public interface IFireFacilityReplacementService
+{
+ /**
+ * 查询消防设施更换记录
+ *
+ * @param id 消防设施更换记录主键
+ * @return 消防设施更换记录
+ */
+ public FireFacilityReplacement selectFireFacilityReplacementById(Long id);
+
+ /**
+ * 查询消防设施更换记录列表
+ *
+ * @param fireFacilityReplacement 消防设施更换记录
+ * @return 消防设施更换记录集合
+ */
+ public List selectFireFacilityReplacementList(FireFacilityReplacement fireFacilityReplacement);
+
+ /**
+ * 新增消防设施更换记录
+ *
+ * @param fireFacilityReplacement 消防设施更换记录
+ * @return 结果
+ */
+ public int insertFireFacilityReplacement(FireFacilityReplacement fireFacilityReplacement);
+
+ /**
+ * 修改消防设施更换记录
+ *
+ * @param fireFacilityReplacement 消防设施更换记录
+ * @return 结果
+ */
+ public int updateFireFacilityReplacement(FireFacilityReplacement fireFacilityReplacement);
+
+ /**
+ * 批量删除消防设施更换记录
+ *
+ * @param ids 需要删除的消防设施更换记录主键集合
+ * @return 结果
+ */
+ public int deleteFireFacilityReplacementByIds(Long[] ids);
+
+ /**
+ * 删除消防设施更换记录信息
+ *
+ * @param id 消防设施更换记录主键
+ * @return 结果
+ */
+ public int deleteFireFacilityReplacementById(Long id);
+}
diff --git a/pasd-fire/src/main/java/com/ruoyi/fire/service/IFireFacilityReportService.java b/pasd-fire/src/main/java/com/ruoyi/fire/service/IFireFacilityReportService.java
new file mode 100644
index 0000000..7d1ef8c
--- /dev/null
+++ b/pasd-fire/src/main/java/com/ruoyi/fire/service/IFireFacilityReportService.java
@@ -0,0 +1,22 @@
+package com.ruoyi.fire.service;
+
+import com.ruoyi.fire.domain.FireFacilityReport;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+public interface IFireFacilityReportService {
+ List selectFireFacilityReportList(FireFacilityReport fireFacilityReport);
+ int updateExpiryStatus();
+ List