package com.ltgk.boat.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ltgk.boat.domain.dto.*;
import com.ltgk.boat.domain.entity.DsBoatData;
import com.ltgk.boat.domain.entity.DsBoatInsurance;
import com.ltgk.boat.domain.vo.BoatInfoByBoatIdVO;
import com.ltgk.boat.domain.vo.BusinessIndexStatisticsVO;
import com.ltgk.boat.domain.vo.DsBoatCredentialVO;
import com.ltgk.boat.domain.vo.DsBoatCreditVO;
import com.ltgk.common.core.domain.AjaxResult;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * @Author: w1826
 * @Description: 渔船实现类
 * @Date: 2024/10/25 19:19
 * @Version: 1.0
 */
public interface DsBoatDataService extends IService<DsBoatData> {
    List<DsBoatData> getBoatList(GetBoatListReq getBoatListReq) throws Throwable;

    AjaxResult saveBoat(SaveBoatReq saveBoatReq);

    AjaxResult updateBoat(SaveBoatReq saveBoatReq);

    void export(HttpServletResponse response, GetBoatListReq getBoatListReq) throws Throwable;

    void importTemplate(HttpServletResponse response);

    AjaxResult importBoat(MultipartFile file) throws IOException;

    List<DsBoatCredentialVO> getBoatCredentialList(GetBoatCredentialListReq getBoatCredentialListReq);

    AjaxResult saveBoatCredential(SaveBoatCredentialReq saveBoatCredentialReq);

    List<DsBoatInsurance> getBoatInsuranceList(GetBoatInsuranceReq getBoatInsuranceReq);

    AjaxResult getBoatMessages(GetBoatMessagesReq getBoatMessagesReq);

    DsBoatData getBoatById(String boatId, String boatName);

    /**
     * 分页查询渔船信用列表
     *
     * @param req: 分页查询渔船信用列表请求参数
     * @return com.ltgk.common.core.page.TableDataInfo
     * @author Qi ChengBin
     * @date 2025/2/27
     */
    List<DsBoatCreditVO> findBoatCreditList(FindBoatCreditReq req);

    /**
     * 业务模块首页渔船查询数量视图
     *
     * @return com.ltgk.boat.domain.vo.BusinessIndexStatisticsVO
     * @author Qi ChengBin
     * @date 2025/3/4
     */
    BusinessIndexStatisticsVO getBusinessIndexStatistics();

    /**
     * 根据渔船id 获取渔船相关信息
     *
     * @param req:
     * @return com.ltgk.boat.domain.vo.GetBoatInfoByBoatIdVO
     * @author Qi ChengBin
     * @date 2025/4/2
     */
    BoatInfoByBoatIdVO GetBoatInfoByBoatId(GetBoatInfoByBoatIdReq req);

    /**
     * 查询海域渔船明细：
     * -- 因没有管辖海域，则使用港口信息来进行查询
     *
     * @param req：
     * @return com.ltgk.common.core.domain.AjaxResult
     * @author Qi ChengBin
     * @date 2025/5/19
     */
    List findSeaBoatList(FindSeaBoatListReq req);

    AjaxResult deleteBoat(DeleteByIdsReq deleteByIdsReq);
}
