package com.brilliance.isc.mda.dao;

import com.brilliance.isc.bo.Que;
import com.brilliance.isc.vo.component.que.QueInfoVo;
import com.brilliance.isc.vo.component.que.QueParamVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

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

@Mapper
public interface QueMapper {

    int insert(Que record);

    int insertSelective(Que record);

    int updateByPrimaryKeySelective(Que record);

    int updateByPrimaryKey(Que record);

    int updateHlddattimbyObjInr(Que record);

    int deleteByPrimaryKey(Que record);

    int deleteByIds(Collection<Object> collection);

    Que selectByPrimaryKey(Que record);

    int dyncDelete(Map<String,Object> dyncMap);

    List<Que> dyncRead(Map<String,Object> dyncMap);

    int holdUpdate(@Param("dattim") java.util.Date date, @Param("ssninr") String ssninr);

    Que selectByObjTypeInrSubId(@Param("objtyp") String objtyp,@Param("objinr") String objinr,@Param("objsubid") String objsubid);

    List<Que> selectConditionList(Que que);

    Que selectByCondition(Que que);

    Que selectByObjtypAndObjinr(@Param("objtyp") String objtyp, @Param("objinr") String objinr);

    Que selectByObjtypAndObjinrAndBchkeyinr(@Param("objtyp") String objtyp, @Param("objinr") String objinr, @Param("bchkeyinr") String bchkeyinr);

    List<Que> selectAllByStatus(@Param("status") String status);

    List<Que> selectAllByUsrAndStatus(@Param("usr") String usr, @Param("status") String status);

    List<Que> selectAllByBranchinrAndStatus(@Param("branchinr") String branchinr, @Param("status") String status);

    int updateUsrAndStatusAndUpdateTimeByInr(@Param("inr") String inr, @Param("usr") String usr, @Param("status") String status, @Param("updateTime") Date updateTime,@Param("distMethod") String distMethod,@Param("distStatus") String distStatus);

    Que selectOneByInr(@Param("inr") String inr);

    int updatePinflgAndUpdateTimeByInr(@Param("inr") String inr, @Param("pinflg") String pinflg, @Param("updateTime") Date updateTime);

    List<Que> selectTodoTasks(@Param("usr") String usr);

    List<Que> selectUsrTodoTasks(@Param("usr") String usr);

    List<Que> selectAvailableTasks(@Param("bchkeyinr") String bchkeyinr);

    int countOccupiedLimit(@Param("usr") String usr);

    int selectSptCount(@Param("param")QueParamVo param,@Param("list") List<String> list);

    int selectTrnCount(@Param("param")QueParamVo param,@Param("list") List<String> list);

    int selectDiaCount(@Param("param")QueParamVo param,@Param("list") List<String> list);

    int selectDiaWeekCount(@Param("param")QueParamVo param,@Param("list") List<String> list);

    /**
     * 待办查询语句
     * @param param 查询条件
     * @param list  机构范围
     * @return 待办记录
     */
    List<QueInfoVo> selectList(@Param("param")QueParamVo param,@Param("list") List<String> list);

    /**
     * 待办查询语句-汇款自动化
     * @param param 查询条件
     * @param list  机构范围
     * @return 待办记录
     */
    List<QueInfoVo> selectListAuto(@Param("param")QueParamVo param,@Param("list") List<String> list);

    /**
     * 待办列表归档查询
     * @param param 查询条件
     * @param list  机构范围
     * @return 归档记录
     */
    List<QueInfoVo> selectListFold(@Param("param")QueParamVo param,@Param("list") List<String> list);

    /**
     * 垃圾篓查询
     * @param param 查询条件
     * @param list  机构范围
     * @return 删除记录
     */
    List<QueInfoVo> selectListReject(@Param("param")QueParamVo param,@Param("list") List<String> list);

    /**
     * 任务管理查询语句
     * @param param 查询条件
     * @param list  机构范围
     * @return 任务记录
     */
    List<QueInfoVo> selectAssignList(@Param("param")QueParamVo param,@Param("list") List<String> list);

    /**
     * 未完成列表查询语句
     * @param param 查询条件
     * @param list  机构范围
     * @return 未完成列表
     */
    List<QueInfoVo> selectIncompleteList(@Param("param")QueParamVo param,@Param("list") List<String> list);

    int updateHldflgByObjrefAndFrm(@Param("hldflg") String hldflg, @Param("objref") String objref, @Param("frm") String frm);

    int updateHldflgByObjtypAndObjinr(@Param("hldflg") String hldflg, @Param("objtyp") String objtyp, @Param("objinr") String objinr);

    List<Que> selectByObjref(@Param("que") Que que, @Param("subobjref") String subobjref);

    List<Que> selectListByCondition(@Param("param")Que que,@Param("inidatfro") String inidatfro, @Param("inidattil") String inidattil);

    Que selectByObjtypAndObjinrAndStatus(@Param("objtyp") String objtyp, @Param("objinr") String objinr, @Param("status") String status);

    Que selectByObjtypAndObjinrAndBchkeyinrAndStatus(@Param("objtyp") String objtyp, @Param("objinr") String objinr, @Param("bchkeyinr") String bchkeyinr, @Param("status") String status);

    List<QueInfoVo> selectByInrList(@Param("list") List<String> list);

    List<Que> getUnAssignData();

    /**
     * 押汇中心经办 退回分行后，分行经办重新提交查询原始 总行经办柜员
     * @param objref
     * @param frm
     * @param bchkeyinr
     * @return 柜员信息列表
     */
    List<Que> getOldAssignUsrQueList(@Param("objref") String objref, @Param("frm") String frm, @Param("bchkeyinr") String bchkeyinr);

    /**
     * 根据creobjtyp和creobjinr合并查询总行已分配的数据
     * @param creobjtyp  关联creobjtyp
     * @param creobjinr  关联creobjinr
     * @return que信息
     */
    Que selectByCreobjtypAndCreobjinr(@Param("creobjtyp") String creobjtyp, @Param("creobjinr") String creobjinr);

    Que selectByQueAndCpd(Que que);

    int updateEciflgByObjtypAndObjinr(@Param("eciflg") String eciflg, @Param("objtyp") String objtyp, @Param("objinr") String objinr);


    List<QueInfoVo> selectByConObjinrs(@Param("list") List<String> list);
}