|  | # -*- coding: utf-8 -*-
import logging
import time
from django_six import CompatibilityBaseCommand, close_old_connections
from TimeConvert import TimeConvert as tc
from account.models import UserInfo
from coupon.models import CouponInfo, UserCouponInfo
from member.models import RightInfo
from utils.redis.connect import r
from utils.redis.rkeys import MEMBER_SEND_COUPON_LIST
logger = logging.getLogger('console')
class Command(CompatibilityBaseCommand):
    def handle(self, *args, **options):
        logger.info('Member coupon is dealing')
        while True:
            # r.rpushjson('TEMPLET_CMD_KEY', {
            #     'brand_id': 'brand_id',
            #     'user_id': 'user_id',
            # })
            k, v = r.blpopjson(MEMBER_SEND_COUPON_LIST, 60)
            if not v:
                continue
            close_old_connections()
            logger.info(v)
            brand_id = v.get('brand_id', '')
            user_id = v.get('user_id', '')
            coupon_id = v.get('coupon_id', '')
            # TODO: Opt by delay execute
            time.sleep(5)
            try:
                user = UserInfo.objects.get(user_id=user_id)
            except UserInfo.DoesNotExist:
                continue
            if coupon_id:
                # 发放商城兑换券
                try:
                    coupon = CouponInfo.objects.get(coupon_id=coupon_id)
                except CouponInfo.DoesNotExist:
                    continue
                UserCouponInfo.objects.create(
                    brand_id=coupon.brand_id,
                    brand_name=coupon.brand_name,
                    coupon_id=coupon_id,
                    user_id=user_id,
                    coupon_title=coupon.coupon_title,
                    coupon_detail=coupon.coupon_detail,
                    coupon_value=coupon.coupon_value,
                    coupon_image=coupon.coupon_image,
                    coupon_from='INTEGRAL_MALL',
                    active_at=tc.utc_datetime(),
                    expire_at=tc.utc_datetime(days=coupon.coupon_valid_period) if coupon.coupon_expire_type == CouponInfo.CHANGED_EXPIRED_TIME else coupon.coupon_expire_at,
                    coupon_valid_period=coupon.coupon_valid_period,
                    coupon_limit_model_ids=coupon.coupon_limit_model_ids,
                    is_coupon_admin_writeoff=coupon.is_coupon_admin_writeoff,
                )
            else:
                # 发放会员权益
                active_at = tc.utc_datetime()
                expire_at = tc.utc_datetime(days=365)
                rights = RightInfo.objects.filter(is_send_coupon=True, status=True)
                for right in rights:
                    if user.level == UserInfo.MEMBER_LRC:
                        coupon_id = right.coupon_level1_id
                        coupon_num = right.coupon_level1_num
                    elif user.level == UserInfo.MEMBER_SILVER:
                        coupon_id = right.coupon_level2_id
                        coupon_num = right.coupon_level2_num
                    elif user.level == UserInfo.MEMBER_GOLD:
                        coupon_id = right.coupon_level3_id
                        coupon_num = right.coupon_level3_num
                    elif user.level == UserInfo.MEMBER_WHITE_GOLD:
                        coupon_id = right.coupon_level4_id
                        coupon_num = right.coupon_level4_num
                    elif user.level == UserInfo.MEMBER_BLACK_GOLD:
                        coupon_id = right.coupon_level5_id
                        coupon_num = right.coupon_level5_num
                    if not coupon_id:
                        continue
                    try:
                        coupon = CouponInfo.objects.get(coupon_id=coupon_id)
                    except CouponInfo.DoesNotExist:
                        continue
                    for _ in range(right.coupon_num or coupon_num):
                        UserCouponInfo.objects.create(
                            brand_id=coupon.brand_id,
                            brand_name=coupon.brand_name,
                            coupon_id=coupon_id,
                            user_id=user_id,
                            coupon_title=coupon.coupon_title,
                            coupon_detail=coupon.coupon_detail,
                            coupon_value=coupon.coupon_value,
                            coupon_image=coupon.coupon_image,
                            active_at=active_at,
                            expire_at=expire_at,
                            coupon_valid_period=coupon.coupon_valid_period,
                            coupon_limit_model_ids=coupon.coupon_limit_model_ids,
                        )
                user.coupon_expire_at = expire_at
                user.save()
            close_old_connections()
 |