package com.boman.web.core.mapper;

import com.alibaba.fastjson.JSONObject;
import com.boman.domain.Czrk;
import com.boman.domain.SysDept;
import com.boman.domain.VaccineInfoOperation;
import com.boman.web.core.domain.ConfirmInfoUser;
import org.apache.ibatis.annotations.Param;
import org.checkerframework.checker.units.qual.C;

import java.util.List;


/**
 * 常住人口Mapper接口
 *
 * @author ruoyi
 * @date 2022-01-14
 */
public interface CzrkMapper {
    /**
     * 查询czkr表人口
     *
     * @param id 常住人口主键
     * @return 常住人口
     */
    Czrk selectCzrkById(Long id);
    List<Czrk> selectCzrkByIds(@Param("ids") List<Long> ids);
    int countIdCard(String idCard);

    /**
     * 根据户主号查看是否有户主
     * @param code
     * @return
     */
    Czrk  selectCzrkByCode(String code);

    /**
     * 新增户籍人口
     *
     * @param czrk 户籍人口
     * @return 结果
     */
    int insertCzrk(Czrk czrk);

    /**
     * 修改户籍人口
     *
     * @param czrk 户籍人口
     * @return 结果
     */
    int updateCzrk(Czrk czrk);

    /**
     * 根据身份证修改户籍人口的核酸信息
     * @param czrk
     * @return
     */
    int updateCzrkByNucleicAcid(Czrk czrk);

    /**
     * 删除常住人口
     *
     * @param id 常住人口主键
     * @return 结果
     */
    int deleteCzrkById(Long id);

    int reduction(String id);


//    int deleteCzrk(Long[] ids);
    int deleteCzrk(Czrk czrk);

    /**
     * 查询户籍人口列表
     * @param czrk
     * @return
     */
    List<Czrk> listByCzrk(Czrk czrk);

    /**
     * 查询户籍人口列表,查询条件带居住地址
     * @param czrk
     * @return
     */
    List<Czrk> listCzrkByJzdz(Czrk czrk);

    List<Czrk> listByRlryRel(Czrk czrk);

    List<Czrk> listByXz(Czrk czrk);
    List<Czrk> listByJs(Czrk czrk);
//    int countByJs(Czrk czrk);
//    int countByXz(Czrk czrk);
    int countCzrk(@Param("type") int type, @Param("areaId") Long areaId);


    List<Czrk> listByCode(String code);

    List<Czrk> listByCodeSynchronization(String code);

    int stsByYrl(Czrk czrk);
    int stsByWrl(Czrk czrk);
    int stsByAll(Czrk czrk);

    List<Czrk> listIsRl(@Param("type") int type, @Param("areaId") Long areaId, @Param("userName") String userName);

//    int stsByWrl(@Param("deptIdList") List<Long> deptIdList, @Param("userName") String userName);


    /**
     *根据身份证号查询用户信息
     * @param czrk
     * @return
     */
   Czrk findHjInfo(Czrk czrk);
    List<Czrk> stsByAppletCz(@Param("type") int type, @Param("areaId") Long areaId, @Param("idCard") String idCard,@Param("userName") String userName, @Param("houseType") String houseType,@Param("isConfirm") String isConfirm);

    List<Czrk> listByCzXz(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("type") int type, @Param("areaId") Long areaId);
    List<Czrk> listByCzJs(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("type") int type, @Param("areaId") Long areaId);

    int countByCzXz(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("type") int type, @Param("areaId") Long areaId);
    int countByCzJs(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("type") int type, @Param("areaId") Long areaId);

    int countByHjXz(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("type") int type, @Param("areaId") Long areaId);
    List<Czrk>  listByHjXz(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("type") int type, @Param("areaId") Long areaId);

    int countByHjJs(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("type") int type, @Param("areaId") Long areaId);
    List<Czrk> listByHjJs(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("type") int type, @Param("areaId") Long areaId);

    int countHj(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("type") int type, @Param("areaId") Long areaId);

    int countAll();
    //分页查询
  List<Czrk>  selectCzrkListByPage(@Param("startNum") int startNum, @Param("endNum") int endNum);


  //查询部门表数据
  SysDept selectDeptNameById(@Param("id")Long id);

    int countHj1(@Param("deptIdList") List<Long> deptIdList);
    int countCz1(@Param("deptIdList") List<Long> deptIdList);

    int countByHjXz1(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("deptIdList") List<Long> deptIdList);
    int countByHjJs1(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("deptIdList") List<Long> deptIdList);
    List<Czrk> listByHjXz1(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("deptIdList") List<Long> deptIdList);
    List<Czrk> listByHjJs1(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("deptIdList") List<Long> deptIdList);

    int countByCzXz1(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("deptIdList") List<Long> deptIdList);
    List<Czrk> listByCzXz1(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("deptIdList") List<Long> deptIdList);
    int countByCzJs1(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("deptIdList") List<Long> deptIdList);
    List<Czrk> listByCzJs1(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("deptIdList") List<Long> deptIdList);

    //根据户籍号查询户主的信息
    Czrk getHzByCode(String code);

    JSONObject getColumnNamesByIdCard(@Param("columnNames") String columnNames, @Param("idCard") String idCard);

    /**
     * 一键确认家庭成员
     * @param ids
     * @return
     */
    int confirmInfoByIds(@Param("ids") Long[] ids, @Param("userName") String userName);

    int insertConfirmInfoUser(ConfirmInfoUser confirmInfoUser);

    int updateHouseholdRegister(@Param("czrk") Czrk czrk);

    /**
     * 变更
     * @param czrk
     * @return
     */
    int changeCzrk(Czrk czrk);

    /**
     * 根据身份证号码查询户籍信息
     * @param code
     * @return
     */
    Czrk selectCzrkByIdCard(String code);

    List<Czrk> selectLost();

    List<Czrk> selectCzrkListByDeptId(@Param("deptIdList") List<Long> deptIdList);

    List<Czrk> getAllCzrkRegionId(@Param("regionId") String regionId);

    /**
     * 查询非正常人员列表(死亡,失踪)
     * @param czrk
     * @return
     */
    List<Czrk> unusualList(Czrk czrk);

    /**
     * 2022/3/23重新修复的PC人员信息查看户籍人口接口
     * @param czrk
     * @return
     */
    List<Czrk> listByCzrkJzdz(Czrk czrk);

    /**
     * 2022/3/24修复人员认领接口列表,逻辑:所有人都能看到所有没有确认,没有认领的人员
     * @param czrk
     * @return
     */
    List<Czrk> selectCzrkByNotRl(Czrk czrk);

    /**
     * 2022/3/24修复常住人员认领接口列表
     * @param czrk
     * @return
     */
    List<Czrk> selectCzrkByNotRlCz(Czrk czrk);

    List<Czrk> getAllCzrk(Czrk czrk);

    List<Czrk> listByIdCard(@Param("czrkIdCardList")List<String> czrkIdCardList);


    /**
     * 小程序统计所有人员信息数量
     * @param czrk
     * @return
     */
    long selectCzrkCount(Czrk czrk);

    /**
     *小程序统计所有人员信息数量查询条件带居住地址
     * @param czrk
     * @return
     */
    long selectCzrkJzdzCount(Czrk czrk);


    Czrk getCzrkByIdCard(String idCard);

    List<Czrk> getAllCzrkVillageTownsId(String areaId);

    List<Czrk> getAllCzrkVillageId(String areaId);

    void updateCzrkHs(@Param("czrkList") List<Czrk> czrkList);

    List<Czrk> getAllCzrkNoTown();

    List<Czrk> getAllCzrkNoTownCz();

    List<Czrk> getAllCzrkHjVillage(Czrk czrk);

    int setNoRl(Czrk czrk);

    void updateCzrkByToQianshanPersonner(Czrk czrk);

    List<Czrk> getAllCzrkRegionIdHj(@Param("regionId") String regionId);
}
