/*
 * Author: wangjian
 * 生成mapper
 */
package com.tofly.watermeter.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tofly.watermeter.custom.dto.ForeignYhQyQdDto;
import com.tofly.watermeter.custom.entity.meterRead.Allocation;
import com.tofly.watermeter.custom.entity.meterRead.AppRead;
import com.tofly.watermeter.custom.vo.ForeignYhQyQdVo;
import com.tofly.watermeter.custom.vo.YhQyQdInfoVo;
import com.tofly.watermeter.entity.Qfcbplandetails;
import com.tofly.watermeter.entity.Readmeterhis;
import com.tofly.watermeter.entity.Yhbingqy;
import org.apache.ibatis.annotations.Param;

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

/**
 * 用户编号与区域、区域段绑定中间表
 *
 * @author wangjieliu
 * @date Mon Jun 07 00:00:00 CST 2021
 */
public interface YhbingqyMapper extends BaseMapper<Yhbingqy> {
    String getMaxYhByTime(@Param("qydbm") Long qydbm);

    IPage<Map> allocationPage(Page<Map> page, @Param("yhbh") String yhbh,
                              @Param("qybm") String qybm, @Param("qydbm") String qydbm,
                              @Param("yhxm") String yhxm, @Param("pqList") List<String> pqList,
                              @Param("cbbList") List<String> cbbList, @Param("yhdz") String yhdz,
                              @Param("inputcontent") String inputcontent);

    List<Map> allocationPage(@Param("yhbh") String yhbh,
                             @Param("qybm") String qybm, @Param("qydbm") String qydbm,
                             @Param("yhxm") String yhxm, @Param("pqList") List<String> pqList,
                             @Param("cbbList") List<String> cbbList, @Param("yhdz") String yhdz,
                             @Param("inputcontent") String inputcontent);

    IPage<Map> getNoAllocationTwo(Page page, @Param("allocation") Allocation allocation,
                                  @Param("pqList") List<String> pqList,
                                  @Param("cbbList") List<String> cbbList,
                                  @Param("sbcjList") List<String> sbcjList);

    List<String> getallFpYh(@Param("allocation") Allocation allocation,
                            @Param("pqList") List<String> pqList,
                            @Param("cbbList") List<String> cbbList,
                            @Param("sbcjList") List<String> sbcjList);


    List<AppRead> getCbryXY(@Param("cbry") Long cbry, @Param("startDate") Date startDate, @Param("endDate") Date endDate);


    List<Map> getQyCllect(@Param("inputcontent") String inputcontent);

    void updateBingAndXh(@Param("list") List<Yhbingqy> yhbingqyList);

    IPage<Map> getNoOrderYh(Page<Map> page, @Param("list") List<String> yhbhList,
                            @Param("qydbm") String qydbm, @Param("inputcontent") String inputcontent,@Param("qybm") String qybm);

    IPage<Map> getNoOrderYhPlan(Page<Map> page, @Param("list") List<String> yhbhList, @Param("qydbm") String qydbm,
                                @Param("inputcontent") String inputcontent, @Param("month") String month,@Param("qybm") String qybm);

    /**
     * 初始化每月生成抄表月计划数据
     *
     * @param shouldDown     生成的用户
     * @param qfcbplandetail 计划信息
     * @param monthPlan      下一月计划
     * @return
     */
    boolean insertShouldCbYh(@Param("list") List<Readmeterhis> shouldDown, @Param("qfcbplandetail") Qfcbplandetails qfcbplandetail,
                             @Param("monthPlan") String monthPlan);

    /**
     * 获取抄表本或者片区
     *
     * @param cbpq      抄表片区：用于筛选抄表本
     * @param isPqOrCbb 0：查询片区；1：查询抄表本
     * @return
     */
    List<Map> getCbbOrCbpq(@Param("cbpq") String cbpq, @Param("isPqOrcbb") String isPqOrCbb);

    Integer getMaxCbxh(@Param("qydbm") String qydbm);

    Page<ForeignYhQyQdVo> loadQy(Page page, @Param("dto") ForeignYhQyQdDto dto);

    List<YhQyQdInfoVo> getYhQyAndQydInfo(@Param("row") int row);

    void aginSort(@Param("qydbm") String qydbm);

    /**
     * 查询未分配用户
     * @return list
     */
    List<Map<String,String>> notAssignedClient();

}
