package com.chinacreator.video.mapper;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.List;

/**
 * 券码开发
 * @author zhengrong.yan
 * @date 20210622
 */
@Component
public interface CouponDao {

	/*
	 * 获取流水号
	 * @return
	 */
	String getNo();

	/**
	 * 添加记录
	 * @param hm
	 */
	void addCouponRec(HashMap hm);

	List<HashMap>  findOrderRela(String userid);

	HashMap findCouponRec(@Param("userid")String userid, @Param("orderid") String orderid,@Param("couponmonth") String couponmonth);

	List<HashMap> findCouponRec(@Param("userid")String userid, @Param("orderid") String orderid,@Param("couponmonth") String couponmonth,String type);

	//用于展示给合作方的最终数据
	List<HashMap> getCouponRec(@Param("userid")String userid);

	//用于调试状态
	List<HashMap> getCouponRec2(@Param("userid")String userid);

    HashMap findCouponRec2(@Param("userid")String userid, @Param("id") String id);

	String getStatus(@Param("userid")String userid, @Param("spid") String spid,@Param("couponmonth") String couponmonth);

	//type=1时查的是带美团券的数据 会出现多条
	List<HashMap> getStatus_cap(@Param("userid")String userid, @Param("spid") String spid,@Param("couponmonth") String couponmonth);

	//根据id获得status 当前的
	String getStatusById(@Param("id")String id);

	/*根据orderid更新，更新状态，starttime，endtime等*/
	//void upCouponRec(HashMap hm);

	/*根据orderid更新，仅更新状态*/
	void upCouponRec2(HashMap hm);

	/*最后重新遍历时根据券码id更新*/
    void upCouponRec3(HashMap hm);

    void verifyCoupon(HashMap hm);

	List<HashMap> findOrderLog(@Param("userid")String userid,@Param("spid")String spid,@Param("checkmonth")String checkmonth);

	List<HashMap> hasRec();

	HashMap getRecentStatus(HashMap hm);

	//查询cap时的数据
	HashMap getRecentStatus_Cap(HashMap hm);

	/*用于查询此spid的是否有券码*/
	List<HashMap> hasRec2(@Param("userid")String userid,@Param("spid")String spid);

	/*用于查询此spid的是否有券码（实时的券码是否有生成）*/
	List<HashMap> hasRec3(@Param("userid")String userid,@Param("spid")String spid);

	/*用于查询此spid的订购关系（二次验证）*/
	List<HashMap> secondverify(@Param("userid")String userid,@Param("spid")String spid,
						 @Param("verifymonth")String verifymonth,@Param("starttime")String starttime,@Param("endtime")String endtime);

	/*用于查询此spid的订购关系（二次验证） 即时生成，只看范围时间内的订购记录*/
	String secondverify_timely(@Param("userid")String userid,@Param("spid")String spid);

	/*用于查询此spid的开始时间和结束时间（*/
	HashMap activetime(@Param("spid")String spid,@Param("isunique")String isunique);

	/*用于查询此spid的反向通知数据 是否可以发放券码（*/
	List<HashMap> capProductCheck(@Param("spid")String spid,@Param("userid")String userid);

	/*用于查询此spid是否需要发放美团券码（*/
	String meituanCheck(@Param("spid")String spid,@Param("starttime")String starttime);

	/*生成美团券码 6张*/
	void addMeiTuan(HashMap hm);

	/*用于查询此spid的反向通知数据 (查log表的staffid是否对应)是否可以发放券码（*/
	List<HashMap> findOrderLogCap(@Param("userid")String userid,@Param("spid")String spid,@Param("checkmonth")String checkmonth);

	/*用于查询此spid的log日志最近是否有退订 在活动范围之间，有的话不再生成券码（*/
	String findOrderLogCapSpid(@Param("userid")String userid,@Param("spid")String spid,@Param("lastmonth")String lastmonth);

	/*查看最早的退订时间（活动范围之内）是否等于当前传过来的日期*/
	String findEarlyCancelMonth(@Param("userid")String userid,@Param("spid")String spid);

	/*查看最近一次的订购时间*/
	String getTheLastOrder(@Param("userid")String userid,@Param("spid")String spid,@Param("lastmonth")String lastmonth);

	/*查看当前数据库的日期*/
	String getSqlSysDate();

	/*查看活动范围内最早一次的订购时间*/
	String getTheEarlyOrder(@Param("userid")String userid,@Param("spid")String spid);

	/*查看活动范围内最早一次的订购时间（退订月份之前）*/
	String getTheEarlyOrderByMonth(@Param("userid")String userid,@Param("spid")String spid,@Param("earlycancelmonth")String earlycancelmonth);

	/*查看活动范围内最早一次的订购时间*/
	String getTheEarlyOrderTime(@Param("userid")String userid,@Param("spid")String spid);

	/*查看活动范围内最早一次的和退订时间*/
	String getTheEarlyCancelTime(@Param("userid")String userid,@Param("spid")String spid);

	/*查看活动范围内订购时间正序*/
	List<HashMap> getTheEarlyOrderTimeMaps(@Param("userid")String userid,@Param("spid")String spid);

	/*查看活动范围内退订时间正序*/
	List<HashMap> getTheEarlyCancelTimeMaps(@Param("userid")String userid,@Param("spid")String spid);

	/*查看当前查询时间是否是当月*/
	HashMap activeTimeCap(@Param("spid")String spid,@Param("nowmonth")String nowmonth);

	List<String> getHasMonthCoupon(@Param("spid")String spid,@Param("userid")String userid);

	//是否是指定渠道数据，是则返回订购关系，否则为空
	HashMap isAssignChanneldata(@Param("orderid")String orderid,@Param("spid")String spid);

    //是否是指定渠道数据，是则返回订购关系，否则为空（订购日志表）
    HashMap isAssignChanneldataByLog(@Param("userid")String userid,@Param("spid")String spid);

    List<HashMap> getTimelyCoupon(@Param("userid")String userid);

    //表唯一索引 月 券码id spid userid
	HashMap findCouponRec_new(@Param("userid")String userid, @Param("id") String id);

	//表唯一索引 券码id spid userid  （用户一个产品只能生成一张券）
	HashMap findCouponRec_reflow(@Param("userid")String userid, @Param("id") String id);

	//表唯一索引 券码id spid userid,couponid （用户一个产品只能生成一张券 次月生效）
	HashMap findCouponRec_telecom(@Param("userid")String userid, @Param("id") String id);

	HashMap findCouponRec_cancel(@Param("userid") String userid, @Param("id") String id);

	void verifyCoupon_new(HashMap hm);

	//核销回流表的数据
	void verifyCoupon_reflow(HashMap hm);

	//核销电信活动的数据
	void verifyCoupon_telecom(HashMap hm);

	//核销千人千面活动的数据
	void verifyCoupon_cancel(HashMap hm);

	/*最后重新遍历时根据券码id更新*/
	void upCouponRec_new(HashMap hm);

	/*最后重新遍历时根据券码id更新reflow*/
	void upCouponRec_reflow(HashMap hm);

	/*最后重新遍历时根据券码id更新reflow*/
	void upCouponRec_telecom(HashMap hm);

	/*最后重新遍历时根据券码id更新cancel*/
	void upCouponRec_cancel(HashMap hm);

	//用于调试状态
	List<HashMap> getCouponRec_new(@Param("userid")String userid);

	//用于展示给合作方的最终数据
	List<HashMap> getCouponRec_show(@Param("userid")String userid);

	//优酷： 表唯一索引 月 券码id  userid
	HashMap findCouponRec_youtu(@Param("userid")String userid, @Param("id") String id);

	/*优酷：最后重新遍历时根据券码id更新*/
	void upCouponRec_youtu(HashMap hm);

	/*优酷：券码领取*/
	void verifyCoupon_youtu(HashMap hm);

}
