예제 #1
0
    def gen_recharge_record(cls, customer, order_oid, price, num):
        from flashsale.coupon.models import CouponTemplate

        coupon_from_mama_id = 0
        from_mama_thumbnail = 'http://7xogkj.com2.z0.glb.qiniucdn.com/222-ohmydeer.png?imageMogr2/thumbnail/60/format/png'
        from_mama_nick = 'SYSTEM'

        coupon_to_mama_id = customer.mama_id
        to_mama_thumbnail = customer.thumbnail
        to_mama_nick = customer.nick
        init_from_mama_id = coupon_to_mama_id
        order_no = order_oid

        transfer_type = CouponTransferRecord.IN_RECHARGE
        date_field = datetime.date.today()
        transfer_status = CouponTransferRecord.DELIVERED
        uni_key = "%s-%s-%s" % (coupon_to_mama_id, transfer_type, order_oid
                                )  # every trade, only return once.

        template_id = 374
        template = CouponTemplate.objects.get(id=template_id)
        coupon_value = template.value
        product_img = template.extras.get("product_img") or ''

        from flashsale.coupon.apis.v1.transfer import get_elite_score_by_templateid
        mama = customer.get_charged_mama()
        product_id, elite_score, agent_price = get_elite_score_by_templateid(
            template_id, mama)
        from flashsale.xiaolumm.apis.v1.xiaolumama import xlmm_recharge_cacl_score
        elite_score = num * xlmm_recharge_cacl_score(price)

        transfer = CouponTransferRecord(
            coupon_from_mama_id=coupon_from_mama_id,
            from_mama_thumbnail=from_mama_thumbnail,
            from_mama_nick=from_mama_nick,
            coupon_to_mama_id=coupon_to_mama_id,
            to_mama_thumbnail=to_mama_thumbnail,
            to_mama_nick=to_mama_nick,
            coupon_value=coupon_value,
            init_from_mama_id=init_from_mama_id,
            order_no=order_no,
            template_id=template_id,
            product_img=product_img,
            coupon_num=0,
            transfer_type=transfer_type,
            product_id=product_id,
            elite_score=elite_score,
            uni_key=uni_key,
            date_field=date_field,
            transfer_status=transfer_status,
            elite_level=mama.elite_level,
            to_mama_price=agent_price,
        )
        transfer.save()
        return transfer
예제 #2
0
    def gen_cancel_exchg_record(cls, customer, coupon_num, template_id,
                                order_oid):
        from flashsale.coupon.models import CouponTemplate

        coupon_from_mama_id = 0
        from_mama_thumbnail = 'http://7xogkj.com2.z0.glb.qiniucdn.com/222-ohmydeer.png?imageMogr2/thumbnail/60/format/png'
        from_mama_nick = 'SYSTEM'

        coupon_to_mama_id = customer.mama_id
        to_mama_thumbnail = customer.thumbnail
        to_mama_nick = customer.nick
        init_from_mama_id = coupon_to_mama_id
        order_no = order_oid

        transfer_type = CouponTransferRecord.IN_CANCEL_EXCHG
        date_field = datetime.date.today()
        transfer_status = CouponTransferRecord.DELIVERED

        idx = cls.objects.filter(coupon_from_mama_id=0,
                                 coupon_to_mama_id=coupon_to_mama_id,
                                 transfer_type=transfer_type,
                                 template_id=template_id,
                                 order_no=order_no,
                                 transfer_status__gte=cls.PROCESSED).count()
        uni_key = "%s-%s-%s-%s" % (coupon_to_mama_id, transfer_type, order_oid,
                                   idx + 1)  # every trade, only return once.

        template = CouponTemplate.objects.get(id=template_id)
        coupon_value = template.value
        product_img = template.extras.get("product_img") or ''

        from flashsale.coupon.apis.v1.transfer import get_elite_score_by_templateid
        mama = customer.get_charged_mama()
        product_id, elite_score, agent_price = get_elite_score_by_templateid(
            template_id, mama)
        elite_score *= int(coupon_num)

        transfer = CouponTransferRecord(
            coupon_from_mama_id=coupon_from_mama_id,
            from_mama_thumbnail=from_mama_thumbnail,
            from_mama_nick=from_mama_nick,
            coupon_to_mama_id=coupon_to_mama_id,
            to_mama_thumbnail=to_mama_thumbnail,
            to_mama_nick=to_mama_nick,
            coupon_value=coupon_value,
            init_from_mama_id=init_from_mama_id,
            order_no=order_no,
            template_id=template_id,
            product_img=product_img,
            coupon_num=coupon_num,
            transfer_type=transfer_type,
            product_id=product_id,
            elite_score=elite_score,
            uni_key=uni_key,
            date_field=date_field,
            transfer_status=transfer_status,
            elite_level=mama.elite_level,
            to_mama_price=agent_price,
        )
        transfer.save()
        return transfer
예제 #3
0
    def create_exchg_order_record(cls, customer, coupon_num, sale_order,
                                  template_id):
        from flashsale.coupon.models import CouponTemplate
        from flashsale.coupon.apis.v1.transfer import get_elite_score_by_templateid

        from_customer = customer
        from_mama = from_customer.get_charged_mama()
        coupon_from_mama_id = from_mama.id
        from_mama_nick = from_customer.nick
        from_mama_thumbnail = from_customer.thumbnail
        init_from_mama_id = from_mama.id

        coupon_to_mama_id = 0
        to_mama_nick = 'SYSTEM'
        to_mama_thumbnail = 'http://7xogkj.com2.z0.glb.qiniucdn.com/222-ohmydeer.png?imageMogr2/thumbnail/60/format/png'

        transfer_type = cls.OUT_EXCHG_SALEORDER
        date_field = datetime.date.today()

        uni_key = sale_order.oid
        order_no = sale_order.oid

        # coupon = cls.objects.filter(uni_key=uni_key).first()
        # if coupon:
        #     logger.warn({
        #         'message': u'create exchange order record:record already exist, order_id=%s ' % (
        #             sale_order.oid),
        #         'code': 3
        #     })
        #     raise exceptions.ValidationError(u'兑换记录已存在')

        ct = CouponTemplate.objects.filter(id=template_id).first()
        coupon_value = ct.value
        product_img = ct.extras.get("product_img") or ''

        product_id, elite_score, agent_price = get_elite_score_by_templateid(
            template_id, from_mama)
        elite_score *= int(coupon_num)

        transfer_status = cls.DELIVERED
        transfer = cls(coupon_from_mama_id=coupon_from_mama_id,
                       from_mama_thumbnail=from_mama_thumbnail,
                       from_mama_nick=from_mama_nick,
                       coupon_to_mama_id=coupon_to_mama_id,
                       to_mama_thumbnail=to_mama_thumbnail,
                       to_mama_nick=to_mama_nick,
                       coupon_value=coupon_value,
                       init_from_mama_id=init_from_mama_id,
                       order_no=order_no,
                       template_id=template_id,
                       product_img=product_img,
                       coupon_num=coupon_num,
                       transfer_type=transfer_type,
                       product_id=product_id,
                       elite_score=elite_score,
                       uni_key=uni_key,
                       date_field=date_field,
                       transfer_status=transfer_status,
                       from_mama_elite_level=from_mama.elite_level,
                       from_mama_price=agent_price)
        transfer.save()
        return transfer
예제 #4
0
    def gen_transfer_record(cls, request_user, reference_record):
        from flashsale.xiaolumm.models import XiaoluMama
        from flashsale.pay.models import Customer

        to_customer = Customer.objects.normal_customer.filter(
            user=request_user).first()
        to_mama = to_customer.get_charged_mama()

        if to_mama.can_buy_transfer_coupon():
            res = {"code": 2, "info": u"无需申请,请直接支付购券!"}
            return res

        elite_level = to_mama.elite_level
        to_mama_nick = to_customer.nick
        to_mama_thumbnail = to_customer.thumbnail

        coupon_to_mama_id = to_mama.id
        init_from_mama_id = reference_record.init_from_mama_id

        coupon_from_mama_id = get_referal_from_mama_id(coupon_to_mama_id)
        from_mama = XiaoluMama.objects.filter(id=coupon_from_mama_id).first()
        from_customer = Customer.objects.filter(
            unionid=from_mama.unionid).first()
        from_mama_thumbnail = from_customer.thumbnail
        from_mama_nick = from_customer.nick

        transfer_type = CouponTransferRecord.OUT_TRANSFER
        date_field = datetime.date.today()

        coupon_num = reference_record.coupon_num
        order_no = reference_record.order_no
        uni_key = CouponTransferRecord.gen_unikey_with_order_no(
            coupon_from_mama_id, coupon_to_mama_id, order_no)
        template_id = reference_record.template_id

        product_img = reference_record.product_img
        coupon_value = reference_record.coupon_value
        product_id = reference_record.product_id
        elite_score = reference_record.elite_score

        if not uni_key:
            res = {"code": 2, "info": u"记录已生成或申请已达当日上限!"}
            return res

        coupon = CouponTransferRecord.objects.filter(uni_key=uni_key).first()
        if coupon:
            res = {"code": 3, "info": u"同样的精品券申请记录已存在!"}
            return res

        from flashsale.coupon.apis.v1.transfer import get_elite_score_by_templateid
        _, _, agent_price = get_elite_score_by_templateid(template_id, to_mama)
        _, _, from_agent_price = get_elite_score_by_templateid(
            template_id, from_mama)

        coupon = CouponTransferRecord(
            coupon_from_mama_id=coupon_from_mama_id,
            from_mama_thumbnail=from_mama_thumbnail,
            from_mama_nick=from_mama_nick,
            coupon_to_mama_id=coupon_to_mama_id,
            to_mama_thumbnail=to_mama_thumbnail,
            to_mama_nick=to_mama_nick,
            coupon_value=coupon_value,
            init_from_mama_id=init_from_mama_id,
            order_no=order_no,
            template_id=template_id,
            product_img=product_img,
            coupon_num=coupon_num,
            elite_level=elite_level,
            product_id=product_id,
            elite_score=elite_score,
            transfer_type=transfer_type,
            uni_key=uni_key,
            date_field=date_field,
            to_mama_price=agent_price,
            from_mama_elite_level=from_mama.elite_level,
            from_mama_price=from_agent_price,
        )
        coupon.save()

        from flashsale.xiaolumm.tasks.tasks_mama_dailystats import task_calc_xlmm_elite_score
        task_calc_xlmm_elite_score(coupon_to_mama_id)  # 计算妈妈积分

        res = {"code": 0, "info": u"您手头精品券不足,向上级申请精品券成功!"}
        return res
예제 #5
0
    def create_consume_record(cls, coupon_num, buyer_id, tid, template_id):
        from flashsale.xiaolumm.models import XiaoluMama
        from flashsale.pay.models import Customer
        from flashsale.coupon.models import CouponTemplate

        from_customer_id = buyer_id
        from_customer = Customer.objects.filter(id=from_customer_id).first()
        from_mama = XiaoluMama.objects.filter(
            openid=from_customer.unionid).first()
        coupon_from_mama_id = from_mama.id
        from_mama_nick = from_customer.nick
        from_mama_thumbnail = from_customer.thumbnail
        init_from_mama_id = from_mama.id

        coupon_to_mama_id = 0
        to_mama_nick = 'SYSTEM'
        to_mama_thumbnail = 'http://7xogkj.com2.z0.glb.qiniucdn.com/222-ohmydeer.png?imageMogr2/thumbnail/60/format/png'

        transfer_type = cls.OUT_CONSUMED
        date_field = datetime.date.today()

        uni_key = tid
        order_no = tid

        coupon = cls.objects.filter(uni_key=uni_key).first()
        if coupon:
            res = {"code": 3, "info": u"记录已存在!"}
            return res

        ct = CouponTemplate.objects.filter(id=template_id).first()
        coupon_value = ct.value
        product_img = ct.extras.get("product_img") or ''

        from flashsale.coupon.apis.v1.transfer import get_elite_score_by_templateid
        product_id, elite_score, agent_price = get_elite_score_by_templateid(
            template_id, from_mama)

        elite_score *= int(coupon_num)

        transfer_status = cls.DELIVERED
        coupon = cls(
            coupon_from_mama_id=coupon_from_mama_id,
            from_mama_thumbnail=from_mama_thumbnail,
            from_mama_nick=from_mama_nick,
            coupon_to_mama_id=coupon_to_mama_id,
            to_mama_thumbnail=to_mama_thumbnail,
            to_mama_nick=to_mama_nick,
            coupon_value=coupon_value,
            init_from_mama_id=init_from_mama_id,
            order_no=order_no,
            template_id=template_id,
            product_img=product_img,
            coupon_num=coupon_num,
            transfer_type=transfer_type,
            product_id=product_id,
            elite_score=elite_score,
            uni_key=uni_key,
            date_field=date_field,
            transfer_status=transfer_status,
            from_mama_elite_level=from_mama.elite_level,
            from_mama_price=agent_price,
        )
        coupon.save()
        return coupon
예제 #6
0
def task_auto_exchg_xlmm_order():
    import datetime
    tt = datetime.datetime.now()
    tf = tt - datetime.timedelta(days=2)
    from flashsale.pay.models.trade import SaleOrder, SaleTrade, Customer
    from flashsale.xiaolumm.models import OrderCarry, XiaoluMama, ExchangeSaleOrder
    from flashsale.pay.models import ModelProduct
    exchg_orders = OrderCarry.objects.filter(
        carry_type=OrderCarry.REFERAL_ORDER,
        status__in=[OrderCarry.CONFIRM],
        created__range=(datetime.date(2017, 2, 1), tf))
    unexchg_coupon_num = 0
    autoexchg_coupon_num = 0
    if exchg_orders.exists():
        for entry in exchg_orders.iterator():
            sale_order = SaleOrder.objects.filter(oid=entry.order_id).first()
            exchg_sale_order = ExchangeSaleOrder.objects.filter(
                order_oid=entry.order_id).first()
            if not sale_order:
                continue
            if sale_order.extras.has_key('exchange') or (
                    exchg_sale_order and exchg_sale_order.has_exchanged):
                continue
            model_product = ModelProduct.objects.filter(
                id=sale_order.item_product.model_id,
                is_boutique=True,
                product_type=ModelProduct.VIRTUAL_TYPE).first()
            if model_product:
                from flashsale.pay.apis.v1.order import get_pay_type_from_trade
                if round(sale_order.payment / sale_order.price
                         ) > 0 and model_product.extras.has_key('template_id'):
                    unexchg_coupon_num += round(sale_order.payment /
                                                sale_order.price)
                    from flashsale.xiaolumm.apis.v1.xiaolumama import get_mama_by_id
                    level1_mama = get_mama_by_id(entry.contributor_id)
                    level2_mama = get_mama_by_id(entry.mama_id)
                    if level2_mama:
                        level3_mama = level2_mama.get_referal_from_mama()
                    if level1_mama and level2_mama \
                            and level1_mama.get_level_lowest_elite() >= level2_mama.get_level_lowest_elite():
                        from flashsale.coupon.apis.v1.transfer import create_present_elite_score, get_elite_score_by_templateid
                        from flashsale.coupon.apis.v1.coupontemplate import get_coupon_template_by_id
                        autoexchg_coupon_num += round(sale_order.payment /
                                                      sale_order.price)
                        customer = level2_mama.get_customer()
                        template = get_coupon_template_by_id(
                            model_product.extras['template_id'])
                        product_id, elite_score, agent_price = get_elite_score_by_templateid(
                            template.id, level2_mama)
                        elite_score *= round(sale_order.payment /
                                             sale_order.price)
                        uni_key_prefix = "autoexchg-%s" % (sale_order.id)
                        try:
                            create_present_elite_score(customer, elite_score,
                                                       template, '',
                                                       uni_key_prefix)
                        except IntegrityError:
                            logger.info({
                                'message':
                                u'task_auto_exchg_xlmm_order integrity err | oid=%s'
                                % (sale_order.oid),
                            })
                        if level2_mama.referal_from == XiaoluMama.INDIRECT and level3_mama and level3_mama.is_elite_mama:
                            entry.mama_id = level3_mama.id
                            entry.save(update_fields=['mama_id'])
                            from core.options import log_action, CHANGE, ADDITION, get_systemoa_user
                            sys_oa = get_systemoa_user()
                            log_action(
                                sys_oa, entry, CHANGE,
                                u'auto exchange ordercarry=%s,so=%s,level1 %s >= level2 %s,level2 %s to level3 %s'
                                % (entry.id, sale_order.oid,
                                   level1_mama.get_level_lowest_elite(),
                                   level2_mama.get_level_lowest_elite(),
                                   level2_mama.id, level3_mama.id))
                            # print 'add level3', sale_order.oid, level1_mama.id, level2_mama.id, level3_mama.id
                        else:
                            exchg_sale_order = ExchangeSaleOrder.objects.filter(
                                order_oid=entry.order_id).first()
                            if not exchg_sale_order:
                                exchg_record = ExchangeSaleOrder(
                                    order_oid=entry.order_id,
                                    has_exchanged=True,
                                    exchg_type=1,
                                    uni_key=entry.order_id)
                                exchg_record.save()
                            else:
                                exchg_sale_order.has_exchanged = True
                                exchg_sale_order.exchg_type = 1
                                exchg_sale_order.save()
                                from core.options import log_action, CHANGE, ADDITION, get_systemoa_user
                                sys_oa = get_systemoa_user()
                                log_action(
                                    sys_oa, exchg_sale_order, CHANGE,
                                    u'auto exchange ordercarry=%s,level1 %s >= level2 %s,level2 %s, level3 none or not elite, so %s exchg finish'
                                    % (entry.id,
                                       level1_mama.get_level_lowest_elite(),
                                       level2_mama.get_level_lowest_elite(),
                                       level2_mama.id, sale_order.oid))
                            # print 'chg so', sale_order.oid, level1_mama.id, level2_mama.id
        logger.info({
            'message':
            u'task_auto_exchg_xlmm_order | mama unexchg_coupon_num=%s autoexchg_coupon_num=%s'
            % (unexchg_coupon_num, autoexchg_coupon_num),
        })