package com.ruoyi.device.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.device.dto.DeviceExaminePlanDetailsDto;
import com.ruoyi.device.dto.DeviceExaminePlanDto;
import com.ruoyi.device.pojo.Device;
import com.ruoyi.device.pojo.DeviceExamineAttachment;
import com.ruoyi.device.pojo.DeviceExaminePlan;
import com.ruoyi.device.pojo.DeviceExaminePlanDetails;
import org.springframework.web.multipart.MultipartFile;
import jakarta.servlet.http.HttpServletResponse;
import java.util.List;
/**
*
* 设备核查计划主表 服务类
*
*
* @author 江苏鵷雏网络科技有限公司
* @since 2024-12-16 07:14:04
*/
public interface DeviceExaminePlanService extends IService {
/**
* 新增设备核查计划
* @param examinePlanDto
* @return
*/
boolean addDeviceExaminePlan(DeviceExaminePlanDto examinePlanDto);
/**
* 导入设备核查计划
* @param file
* @return
*/
boolean importDeviceExaminePlan(MultipartFile file);
/**
* 提交批准
* @param deviceExaminePlan
* @return
*/
boolean submitRatifyDeviceExaminePlan(DeviceExaminePlan deviceExaminePlan);
/**
* 设备核查计划批准
* @param DeviceExaminePlan
* @return
*/
boolean ratifyDeviceExaminePlan(DeviceExaminePlan DeviceExaminePlan);
/**
* 设备核查计划列表
* @param page
* @param DeviceExaminePlan
* @return
*/
IPage pageDeviceExaminePlan(Page page, DeviceExaminePlan DeviceExaminePlan);
/**
* 设备核查计划详情列表
* @param page
* @param DeviceExaminePlanDetails
* @return
*/
IPage pageDeviceExaminePlanDetail(Page page, DeviceExaminePlanDetails DeviceExaminePlanDetails);
/**
* 导出设备核查计划
* @param deviceExaminePlanId 设备核查计划id
* @param response 响应
*/
void exportDeviceExaminePlanDetail(Integer deviceExaminePlanId, HttpServletResponse response);
/**
* 批量修改设备核查计划
* @param examinePlanDto
* @return
*/
boolean updateDeviceExaminePlan(DeviceExaminePlanDto examinePlanDto);
/**
* 查询设备核查计划详情
* @param planId
* @return
*/
DeviceExaminePlanDto getDeviceExaminePlan(Integer planId);
/**
* 按年份查询设备核查计划(不存在则自动创建),并自动补全已到点的设备明细
* @param planYear 年份
* @return 计划主表信息
*/
DeviceExaminePlanDto getOrCreatePlanByYear(String planYear);
/**
* 设备档案变更后,立即把设备登记到下次核查日期所在年份的设备核查计划明细
* @param device 设备
*/
void syncDeviceExamineDetail(Device device);
/**
* 核查记录复核通过后,滚动设备档案的最近/下次核查日期,并登记下一轮计划
* @param planDetailsId 计划明细id
*/
void updateDeviceExamineDate(Integer planDetailsId);
/**
* 为指定设备找一条可录入核查记录的计划明细,没有则新增本轮明细
* @param deviceId 设备id
* @param checkTime 核查月份(yyyy-MM),决定明细所属的计划年份
* @return 计划明细
*/
DeviceExaminePlanDetails resolveExaminePlanDetail(Integer deviceId, String checkTime);
/**
* 查找指定设备可复用的核查记录计划明细(只查询,不新增计划或明细)
* @param deviceId 设备id
* @param checkTime 核查月份(yyyy-MM)
* @return 可复用的计划明细,没有时返回 null
*/
DeviceExaminePlanDetails findExaminePlanDetail(Integer deviceId, String checkTime);
/**
* 修改计划明细(核查月份跨年时归到对应年份的计划)
* @param detail 计划明细
* @return 是否修改成功
*/
boolean updateExaminePlanDetail(DeviceExaminePlanDetails detail);
/**
* 删除计划明细(已有核查记录的不允许删除)
* @param planDetailsId 计划明细id
* @return 是否删除成功
*/
boolean removeExaminePlanDetail(Integer planDetailsId);
/**
* 查询核查记录的附件列表
* @param planDetailsId 计划明细id
* @return 附件列表
*/
List selectAttachments(Integer planDetailsId);
/**
* 上传核查记录的附件(支持任意格式,可多个)
* @param planDetailsId 计划明细id
* @param file 文件
* @return 附件信息
*/
DeviceExamineAttachment uploadAttachment(Integer planDetailsId, MultipartFile file);
/**
* 删除核查记录的附件
* @param id 附件id
* @return 是否删除成功
*/
boolean deleteAttachment(Long id);
}