package com.mosty.qwzx.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.mosty.base.model.dto.qwzx.*;
import com.mosty.base.model.entity.qwzx.TbQwJl;
import com.mosty.base.model.entity.qwzx.TbQwXfbb;
import com.mosty.base.model.entity.qwzx.TbQwXfpbZq;
import com.mosty.base.model.query.qwzx.TbQwJmxzSearchDto;
import com.mosty.base.model.query.qwzx.TbQwXfbbJmxzQuery;
import com.mosty.base.model.query.qwzx.TbQwXfbbQuery;
import com.mosty.base.model.query.qwzx.TbQwxfbbDkQuery;
import com.mosty.base.model.query.sjzx.XfbbQuery;
import com.mosty.base.model.query.sjzx.XfbbTjQuery;
import com.mosty.base.model.vo.qwzx.TbQwxfbbDkVO;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 巡防报备表 服务类
 * </p>
 *
 * @author zengbo
 * @since 2022-06-27
 */
public interface TbQwXfbbService {

    @ApiOperation("查询巡防报备")
    IPage<TbQwXfbbVo> queryList(TbQwXfbbQuery xfbb);

    @ApiOperation("根据ID查询")
    TbQwXfbbVo selectById(String id);

    @ApiOperation("新增巡防报备")
    String addXfbb(TbQwXfbbVo xfbb);

    @ApiOperation("删除巡防报备")
    boolean deleteBatch(List<String> ids);

    @ApiOperation("id删除")
    boolean deleteById(String id);

    @ApiOperation("查询巡组")
    Map<String, Integer> selectDeck();

    @ApiOperation("查询巡组列表")
    IPage<TbQwXfbb> selectDeckList(TbQwXfbbJmxzQuery dto);

    @ApiOperation("查询周边巡组")
    List<TbQwXfbb> selectNearbyDeck(TbQwXfbb tbQwXfbb);

    @ApiOperation("查询巡防报备")
    IPage<TbQwXfbbVo> queryPage(TbQwXfbbQuery xfbb);

    @ApiOperation("开始、结束报备")
    int startOrEndBb(TbQwXfbbStartOrEndBbDto dto);

    @ApiOperation("大屏-计划街面巡组列表-分页")
    IPage<TbQwXfpbZq> selectJhjmxzList(TbQwXzSearchDto dto);

    @ApiOperation("大屏-实际街面巡组列表-分页")
    IPage<TbQwXfbb> selectSjjmxzList(TbQwXzSearchDto dto);

    @ApiOperation("大屏-街面力量-分页")
    IPage<TbQwJl> selectJmllList(TbQwJmllSearchDto dto);

    @ApiOperation("查询我今天的报备信息")
    TbQwXfbb getMybbTodayNew(String bblx);

    @ApiOperation("判断派出所、巡防区范围内是否有巡组")
    List<TbQwXfbb> getFjbbByYsId(String ysid);

    @ApiOperation("根据身份证号获取最后一次报备的数据")
    TbQwXfbb getMybbLastBySfzh(String sfzh);

    @ApiOperation("每半个小时查询已报备的状态，结束当前报备")
    void authJsbb();

    @ApiOperation("每周一凌晨结束特殊报备")
    void authJsbbTs();

    @ApiOperation("根据用户ID查询巡组下的人员列表")
    List<TbQwJlDto> getJlxxByBbid(String id);

    @ApiOperation("查询范围内的最近的巡组信息")
    TbQwXfbb getBbxxByJi(TbQwXfbbQueryByJlDto dto);

    @ApiOperation("app查询界面警力民警辅警数量")
    Map<String, Object> selectMfjCount(String bbrq);

    @ApiOperation("根据设备ID查询该设备所在的巡组")
    List<TbQwXfbb> getBbList(String sbid);

    @ApiOperation("根据车辆gpsID查询该设备所在的巡组")
    List<TbQwXfbb> getClBbList(String sbid);

    @ApiOperation("查询街面巡组")
    IPage<TbQwXfbb> selectJmxz(TbQwJmxzSearchDto dto);

    @ApiOperation("查询巡防报备打卡分页")
    IPage<TbQwxfbbDkVO> selectXfbbDkPage(TbQwxfbbDkQuery query);

    @ApiOperation("新增巡防报备打卡")
    void addXfbbDk(TbQwXfbbDkDto dto);

    @ApiOperation("统计巡防报备打卡数量")
    Integer selectXfbbDkCount(String ssbmdm, String isChild);

    @ApiOperation("判断当前位置是否再报备的巡防区内")
    boolean isDdWz(TbQwXfbbDkWzDto dto);

    @ApiOperation("根据ID查询报备信息")
    TbQwXfbb getBbxxInfo(String id);

    @ApiOperation("高新领导段-查询街面警力数量")
    Map<String, Object> getJmjlCount();

    @ApiOperation("计算巡防报备时长")
    void checkXfbbSc();

    @ApiOperation("查询巡组信息第三方")
    IPage<TbQwXfbb> selectDeckListOther(TbQwXfbbJmxzQuery dto);

    @ApiOperation("泸州态势统计-各区县巡防时长和里程")
    Map<String, Object> getXfscAndLc(XfbbQuery dto);

    @ApiOperation("查询部门的报备的数量")
    Integer getBbCount(String ssbmdm, String time);

    @ApiOperation("查询部门时长、里程")
    Map<String,Integer> getScLc(String ssbmdm, String time);

    @ApiOperation("根据警情信息 修改巡防状态")
    void updateXfzt();

    @ApiOperation("大屏巡防报备统计")
    Map<String, Integer> xfbbTj();

    @ApiOperation("部门统计")
    IPage<Object> bmtj(XfbbTjQuery query);

    @ApiOperation("部门统计")
    Object bmtjAll(XfbbTjQuery query);

    @ApiOperation("巡区统计")
    IPage<Object> xqtj(XfbbTjQuery query);

    @ApiOperation("巡区统计")
    IPage<Object> grtj(XfbbTjQuery query);

    @ApiOperation("根据巡区获取报备id")
    List<TbQwXfbb> getBbidByXq(String xqid);

    void delRedisXfwz();

    @ApiOperation("更新巡防里程")
    Integer updateXflc(String bbid);

    /**
     * 查询勤务警力信息（根据报备ID和巡防警力ID）
     * @param id 报备ID
     * @param xfllId 巡防警力ID
     * @return 勤务警力信息
     */
    TbQwJl selectQwJlByBbInfo(String id, String xfllId);

    Boolean updateBbJzwz(TbQwXfbbDkWzDto dto);

}
