<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.iformall.mapper.WxOrderGroupMapper">
	<resultMap id="BaseResultMap" type="com.iformall.domain.po.WxOrderGroup">
		<id column="id" jdbcType="BIGINT" property="id"/>
		<result column="tenant_id" jdbcType="VARCHAR" property="tenantId"/>
		<result column="order_id" jdbcType="BIGINT" property="orderId"/>
		<result column="coupon_id" jdbcType="BIGINT" property="couponId"/>
		<result column="remain_people" jdbcType="INTEGER" property="remainPeople"/>
		<result column="create_date" jdbcType="TIMESTAMP" property="createDate"/>
		<result column="update_date" jdbcType="TIMESTAMP" property="createDate"/>
		<result column="expired_date" jdbcType="TIMESTAMP" property="createDate"/>
		<result column="status" jdbcType="SMALLINT" property="status"/>
		<result column="user_id" jdbcType="BIGINT" property="userId"/>
	
	</resultMap>
	
	<sql id="allColumns">
	    `id`,`tenant_id`,`order_id`,`coupon_id`,`remain_people`,`create_date`,`update_date`,`expired_date`,`status`,`user_id`
	</sql>
	
	<sql id="dynamicWhereConditions">
		where 1 = 1
		<if test=" null != id ">
			and `id` = #{id}
		</if>
		<if test=" null != tenantId ">
			and `tenant_id` = #{tenantId}
		</if>
		<if test=" null != orderId ">
			and `order_id` = #{orderId}
		</if>
		<if test=" null != userId ">
			and `coupon_id` = #{couponId}
		</if>
		<if test=" null != pressValue ">
			and `remain_people` = #{remainPeople}
		</if>
		<if test=" null != createDate ">
			and `create_date` = #{createDate}
		</if>
		<if test=" null != ids ">
			and id in
			<foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")">
				#{idItem}
			</foreach>
		</if>
		<if test=" null != sortColumns">order by ${sortColumns}</if>
	</sql>
	
	<select id="findList" parameterType="com.iformall.domain.po.WxOrderGroup" resultMap="BaseResultMap">
		select
		<include refid="allColumns"/>
		from wx_order_group
		<include refid="dynamicWhereConditions"/>
	</select>
	
	<select id="queryRemainOne" parameterType="com.iformall.domain.po.WxOrderGroup" resultType="hashmap">
	
		select o.press_end_date expiredDate,o.order_group_id orderGroupId,c.nick_name nickName,
		c.avatar_url avatarUrl,o.id orderId,o.product_id couponId
		from wx_order o
		left join wx_c_user c on o.c_user_id=c.id
		where o.tenant_id=#{tenantId} and o.id=#{orderId}
	
	</select>
	
	<select id="queryOrderGroup" parameterType="com.iformall.domain.po.WxOrder" resultType="hashmap">
		
		select o.id orderId,o.order_status orderStatus,o.order_group_id orderGroupId,c.title,c.sub_title subTitle,
		c.sale_price salePrice,c.cover_img coverImg,g.remain_people remainPeople,c.id couponId,g.expired_date
		expiredDate,g.status,g.user_id firstUser,u.nick_name nickName,u.avatar_url avatarUrl,o.tenant_id tenantId,
		o.coupon_channel_id couponChannelId,c.press_limit_num pressLimitNum,
		(select status from wx_coupon_channel where id=o.coupon_channel_id) couponStatus
		from wx_order o
		left join wx_coupon c on o.product_id=c.id
		left join wx_order_group g on o.order_group_id=g.id
		left join wx_c_user u on o.c_user_id=u.id
		where o.tenant_id=#{tenantId} and c.type=9
		<if test=" null != cUserId ">
			and o.c_user_id=#{cUserId}
		</if>
		<if test=" null != id ">
			and o.id=#{id}
		</if>
		<if test=" null != orderGroupId ">
			and o.order_group_id=#{orderGroupId}
		</if>
		and o.order_status in(10,11,12,13,14,15,16)
		order by o.id desc,o.order_status
	
	</select>
	
	<update id="updateOrderGroup" parameterType="com.iformall.domain.po.WxOrderGroup">
		update wx_order_group set remain_people=remain_people-1,update_date=#{updateDate} where id=#{id} and remain_people>0
	</update>
	
	
	<select id="queryOrderGroupMarketingList" parameterType="com.iformall.domain.vo.WxOrderGroupMarketing"
	        resultType="com.iformall.domain.vo.WxOrderGroupMarketing">
		select c.tenant_id,coupon_id,c.cover_img,title,c.price,c.sale_price,c.group_total_count,c.group_success_count,
		CONCAT(ROUND(IFNULL((c.group_success_count/c.group_total_count),0)*100),'%')
		group_transfer_ratio,c.success_people,c.verify_count,
		CONCAT(ROUND(IFNULL((verify_count/success_people),0)*100),'%') verify_ratio,c.total_people from(
		select tenant_id,id coupon_id,cover_img,title,FORMAT(price/100,2) price,FORMAT(sale_price/100,2) sale_price,
		(select count(*) total from wx_order_group where coupon_id=c.id) group_total_count,
		(select count(*) total from wx_order_group where status=11 and coupon_id=c.id) group_success_count,
		IFNULL((select count(*) from wx_order where order_status=11 and product_id=c.id),0) success_people,
		(select count(*) total
		from wx_coupon_order where coupon_type=9 and coupon_order_status=1 and coupon_id=c.id) verify_count,
		IFNULL((select count(*) from wx_order where order_group_id!=0 and product_id=c.id),0) total_people
		from wx_coupon c where type=9 order by c.status,c.id desc
		) c
		<where>
			<if test=" null != tenantId">
				and c.tenant_id=#{tenantId}
			</if>
			<if test=" null != couponId and ''!=couponId">
				and c.coupon_id=#{couponId}
			</if>
			<if test=" null != title and ''!=title">
				and c.title like concat('%',#{title},'%')
			</if>
		</where>
	</select>
	
	<select id="queryOrderGroupSuccessCountAndTime" parameterType="hashmap" resultType="hashmap">
		select count(*) total,DATE_FORMAT(create_date,'%Y-%m-%d') time from wx_coupon_order
		where coupon_type=9
		<if test=" null != tenantId">
			and tenant_id=#{tenantId}
		</if>
		<if test=" null != startdate and null!=enddate ">
			and create_date BETWEEN #{startdate} and #{enddate}
		</if>
		<if test=" null != couponId ">
			and coupon_id=#{couponId}
		</if>
		group by time
	</select>
	
	<select id="queryOrderGroupVerifyCountAndTime" parameterType="hashmap" resultType="hashmap">
		select count(*) total,DATE_FORMAT(create_date,'%Y-%m-%d') time
		from wx_coupon_order where coupon_type=9 and coupon_order_status=1
		<if test=" null != tenantId">
			and tenant_id=#{tenantId}
		</if>
		<if test=" null != startdate and null!=enddate ">
			and create_date BETWEEN #{startdate} and #{enddate}
		</if>
		<if test=" null != couponId ">
			and coupon_id=#{couponId}
		</if>
		group by time
	</select>
	
	<select id="queryOrderGroupCount" parameterType="hashmap" resultType="long">
		select count(*) total from wx_order_group
		<where>
			<if test=" null != tenantId">
				and tenant_id=#{tenantId}
			</if>
			<if test=" null != startdate and null!=enddate ">
				and create_date BETWEEN #{startdate} and #{enddate}
			</if>
		</where>
	</select>
	
	<select id="queryOrderGroupSuccessCount" parameterType="hashmap" resultType="long">
		select count(*) total from wx_order_group where status=11
		<if test=" null != tenantId">
			and tenant_id=#{tenantId}
		</if>
		<if test=" null != startdate and null!=enddate ">
			and create_date BETWEEN #{startdate} and #{enddate}
		</if>
	</select>
	
	<select id="queryOrderGroupPeopleCount" parameterType="hashmap" resultType="long">
		select count(*) from (select id from wx_order where order_group_id!=0
		<if test=" null != tenantId">
			and tenant_id=#{tenantId}
		</if>
		<if test=" null != startdate and null!=enddate ">
			and create_date BETWEEN #{startdate} and #{enddate}
		</if>
		) g
	</select>


</mapper>
