Ejemplo n.º 1
0
def mama_pay_deposit(customer_id, deposit_type, referrer, trade_id, oid=None):
    # type: (int, int, int, int, Optional[text_type]) -> None
    """用户支付押金妈妈记录相关处理
    """
    customer = get_customer_by_id(customer_id)
    xlmm = customer.get_xiaolumm()
    if not xlmm:
        return
    if deposit_type not in [1, 99, 188]:
        return
    if deposit_type == 1:
        renew_days = XiaoluMama.TRIAL
        if not xlmm.is_trialable():
            return  # 不可以试用
        # create_potential_mama(xlmm, referrer)  # 创建潜在妈妈记录
    elif deposit_type == 99:
        renew_days = XiaoluMama.HALF
    elif deposit_type == 188:
        renew_days = XiaoluMama.FULL
    mama_charged = xlmm.chargemama()  # 接管妈妈
    sys_oa = get_systemoa_user()
    if mama_charged:
        log_action(sys_oa, xlmm, CHANGE, u'代理接管成功')
    xlmm.update_renew_day(renew_days)  # 修改下次续费时间
    xlmm.deposit_pay()  # 支付押金
    log_action(sys_oa, xlmm, CHANGE, u'支付押金')
    release_coupon_for_deposit(customer_id, deposit_type, trade_id=trade_id)  # 发送押金优惠券给用户
    update_potential_by_deposit(xlmm.id, renew_days, referrer_mama_id=referrer, oid=oid)  # 更新潜在关系记录
    signal_xiaolumama_register_success.send_robust(sender=XiaoluMama, xiaolumama=xlmm, renew=True)  # 发送信号
Ejemplo n.º 2
0
    def change_pwd_code(self, request):
        """忘记密码时获取验证码"""
        mobile = request.data['vmobile']
        already_exist = Customer.objects.filter(mobile=mobile).exclude(status=Customer.DELETE)
        current_time = datetime.datetime.now()
        last_send_time = current_time - datetime.timedelta(seconds=TIME_LIMIT)
        if already_exist.count() == 0:
            return Response({"result": "1"})  # 尚无用户或者手机未绑定
        if mobile == "" or not re.match(PHONE_NUM_RE, mobile):  # 进行正则判断
            return Response({"result": "false"})

        sysoa_user = get_systemoa_user()
        reg = Register.objects.filter(vmobile=mobile)
        if reg.count() == 0:
            new_reg = Register(vmobile=mobile)
            new_reg.verify_code = new_reg.genValidCode()
            new_reg.verify_count = 0
            new_reg.mobile_pass = True
            new_reg.code_time = current_time
            new_reg.save()
            log_action(sysoa_user.id, new_reg, ADDITION, u'新建,忘记密码验证码')
            task_register_code.delay(mobile, "2")
            return Response({"result": "0"})
        else:
            reg_temp = reg[0]
            if check_day_limit(reg_temp):
                return Response({"result": "2"})  # 当日验证次数超过5
            if reg_temp.code_time and reg_temp.code_time > last_send_time:
                return Response({"result": "3"})  # 180s内已经发送过
            reg_temp.verify_code = reg_temp.genValidCode()
            reg_temp.code_time = current_time
            reg_temp.save()
            log_action(sysoa_user.id, reg_temp, CHANGE, u'修改,忘记密码验证码')
            task_register_code.delay(mobile, "2")
        return Response({"result": "0"})
Ejemplo n.º 3
0
def comfirm_get(out_sid, status):  #根据物流状态自动确认收货
    out_sid = str(out_sid)
    confirm_psi_finish(out_sid=out_sid, status=status)
    logging.warn("comfirm_get")
    logger.warn({'action': "kdn", 'info': "start_comfirm_get:" + out_sid})
    tradewuliu = TradeWuliu.objects.filter(out_sid=out_sid).order_by("-id")
    confirm_get_by_content(out_sid, tradewuliu.first().content)
    packageskuitem = PackageSkuItem.objects.filter(
        out_sid=out_sid).values("oid")
    logger.warn({
        'action': "kdn",
        'info': "oid_by_out_sid:" + json.dumps(list(packageskuitem))
    })
    if packageskuitem and int(status) == 3:
        logger.warn({'action': "kdn", 'info': "exp_num:" + out_sid})
        packageskuitem = [i['oid'] for i in packageskuitem]
        so = SaleOrder.objects.filter(
            oid__in=packageskuitem, status=SaleOrder.WAIT_BUYER_CONFIRM_GOODS)
        if so:
            for i in so:
                logger.warn({
                    'action': "kdn",
                    'info': "change_get_goods:" + out_sid
                })
                i.confirm_sign_order()
                from core.options import log_action, CHANGE, ADDITION, get_systemoa_user
                sys_oa = get_systemoa_user()
                log_action(sys_oa, i, CHANGE,
                           u'confirm_sign_order comfirm_get')
Ejemplo n.º 4
0
def task_update_trial_mama_full_member_by_condition(mama):
    """
    检查该妈妈的推荐人是否是 试用用户 
    如果是 试用用户数 
    满足邀请三个188 或者 
    这里用续费天数 判断
    """
    if True:
        return
    trial_mama = XiaoluMama.objects.filter(mobile=mama.referal_from,
                                           status=XiaoluMama.EFFECT,  # 自接管后 15天 变为冻结
                                           last_renew_type=XiaoluMama.TRIAL).first()  # 推荐人(试用用户并且是有效状态的)
    if not trial_mama:
        return
    join_mamas = XiaoluMama.objects.filter(referal_from=trial_mama.mobile,
                                           status=XiaoluMama.EFFECT,
                                           last_renew_type=XiaoluMama.FULL,  # 邀请的是188
                                           agencylevel__gte=XiaoluMama.VIP_LEVEL,
                                           charge_status=XiaoluMama.CHARGED)  # 推荐人邀请的正式妈妈
    if join_mamas.count() >= 3:  # 满足条件
        trial_mama.last_renew_type = XiaoluMama.HALF  # 转正为半年的类型
        trial_mama.renew_time = trial_mama.renew_time + datetime.timedelta(days=XiaoluMama.HALF)
        trial_mama.save(update_fields=['last_renew_type', 'renew_time'])
        sys_oa = get_systemoa_user()
        log_action(sys_oa, trial_mama, CHANGE, u'满足转正条件,转为正式妈妈')
        # 修改潜在小鹿妈妈列表中的 转正状态

        potential = PotentialMama.objects.filter(potential_mama=trial_mama.id, is_full_member=False).first()
        if potential:
            potential.is_full_member = True
            potential.save(update_fields=['is_full_member'])
            log_action(sys_oa, potential, CHANGE, u'满足转正条件,转为正式妈妈')
Ejemplo n.º 5
0
def confirm_get_by_content(out_sid, content):  #根据物流内容自动确认收货
    out_sid = str(out_sid)
    confirm_psi_finish(out_sid=out_sid, content=content)
    logging.warn("confirm_get_by_content")
    logger.warn({'action': "kdn", 'info': "confirm_get_by_content:" + out_sid})
    if content.find("\u5df2\u7b7e\u6536") != -1 or content.find(
            "\u59a5\u6295") != -1:
        packageskuitem = PackageSkuItem.objects.filter(
            out_sid=out_sid).values("oid")
        if packageskuitem:
            packageskuitem = [i['oid'] for i in packageskuitem]
            so = SaleOrder.objects.filter(
                oid__in=packageskuitem,
                status=SaleOrder.WAIT_BUYER_CONFIRM_GOODS)
            if so:
                for i in so:
                    logger.warn({
                        'action': "kdn",
                        'info': "confirm_sign_order:" + out_sid
                    })
                    i.confirm_sign_order()
                    from core.options import log_action, CHANGE, ADDITION, get_systemoa_user
                    sys_oa = get_systemoa_user()
                    log_action(sys_oa, i, CHANGE,
                               u'confirm_sign_order confirm_get_by_content')
Ejemplo n.º 6
0
def confirm_get_by_state(out_sid, status):
    out_sid = str(out_sid)
    status = int(status)
    if not out_sid or not status or status != 3:
        return
    psi = PackageSkuItem.objects.filter(out_sid=out_sid).first()
    if psi:
        logger.warn({
            'action': "kd100",
            'info': "confirm_psi_finish_kd100:" + str(out_sid)
        })
        pid = psi.package_order_pid
        PackageOrder.objects.filter(pid=pid).update(
            sys_status=PackageOrder.FINISHED_STATUS)
        psi.set_status_finish()

    packageskuitem = PackageSkuItem.objects.filter(
        out_sid=out_sid).values("oid")
    if packageskuitem:
        packageskuitem = [i['oid'] for i in packageskuitem]
        so = SaleOrder.objects.filter(
            oid__in=packageskuitem, status=SaleOrder.WAIT_BUYER_CONFIRM_GOODS)
        if so:
            for i in so:
                logger.warn({
                    'action': "kd100",
                    'info': "confirm_sign_order_kd100:" + str(out_sid)
                })
                i.confirm_sign_order()
                from core.options import log_action, CHANGE, ADDITION, get_systemoa_user
                sys_oa = get_systemoa_user()
                log_action(sys_oa, i, CHANGE, u'confirm_sign_order_kd100')
Ejemplo n.º 7
0
    def create(self, request, *args, **kwargs):
        """发送验证码时候新建register对象"""
        mobile = request.data.get('vmobile')
        current_time = datetime.datetime.now()
        last_send_time = current_time - datetime.timedelta(seconds=TIME_LIMIT)
        if not mobile or not re.match(PHONE_NUM_RE, mobile):  # 进行正则判断
            raise exceptions.APIException(u'手机号码格式不对')

        ip = get_client_ip(request)
        get_agent_src = self.get_agent_src(request)
        logger.debug('register: %s, %s, %s' % (ip, mobile, get_agent_src))

        if get_agent_src == 'windows':
            import random
            rnum = random.randint(1, 10)
            if rnum % 2 == 1:
                return Response({"result": "0", "code": 0, "info": "手机已注册"})
            else:
                return Response({"result": "OK", "code": 0, "info": "OK"})

        customers = Customer.objects.filter(mobile=mobile).exclude(status=Customer.DELETE)
        if customers.exists():
            return Response({"result": "0", "code": 0, "info": "手机已注册"})

        sysoa_user = get_systemoa_user()
        reg = Register.objects.filter(vmobile=mobile)
        if reg.count() > 0:
            temp_reg = reg[0]
            reg_pass = reg.filter(mobile_pass=True)
            if reg_pass.count() > 0:
                return Response({"result": "0", "code": 0, "info": "手机已注册"})  # 已经注册过
            if check_day_limit(temp_reg):
                return Response({"result": "2", "code": 2, "info": "当日验证次数超过5"})  # 当日验证次数超过5
            if temp_reg.code_time and temp_reg.code_time > last_send_time:
                return Response({"result": "1", "code": 1, "info": "180s内已经发送过"})  # 180s内已经发送过
            else:
                temp_reg.verify_code = temp_reg.genValidCode()
                temp_reg.code_time = current_time
                temp_reg.save()
                log_action(sysoa_user.id, temp_reg, CHANGE, u'修改,注册手机验证码')
                task_register_code.delay(mobile, "1")
                return Response({"result": "OK", "code": 0, "info": "OK"})
        else:
            try:
                new_reg = Register(vmobile=mobile)
                new_reg.verify_code = new_reg.genValidCode()
                new_reg.verify_count = 0
                new_reg.code_time = current_time
                new_reg.save()
            except IntegrityError:
                return Response({"result": "0", "code": 0, "info": "请勿重复点击"})
            log_action(sysoa_user.id, new_reg, ADDITION, u'新建,注册手机验证码')
            task_register_code.delay(mobile, "1")
            return Response({"result": "OK", "code": 0, "info": "OK"})
Ejemplo n.º 8
0
def update_model_product_shelf_time(sender, instance, raw, *args, **kwargs):
    from flashsale.pay.models import ModelProduct

    if not instance.lock_status:  # do not sync shelf time and schedule type if this instance not locked
        return
    action_user = get_systemoa_user()
    sale_product_ids = instance.manage_schedule.values('sale_product_id')
    is_topic = False if instance.schedule_type == SaleProductManage.SP_SALE else True
    is_topic = False if instance.is_sale_show else is_topic
    ModelProduct.update_schedule_manager_info(action_user, sale_product_ids,
                                              instance.upshelf_time,
                                              instance.offshelf_time, is_topic)
Ejemplo n.º 9
0
def check_xlmm_ordercarry(recent_days):
    results = []

    tt = datetime.datetime.now()
    tf = tt - datetime.timedelta(days=recent_days)
    from flashsale.pay.models.trade import SaleOrder, SaleTrade, Customer
    queryset = SaleOrder.objects.filter(status__in=[
        SaleOrder.WAIT_SELLER_SEND_GOODS, SaleOrder.WAIT_BUYER_CONFIRM_GOODS,
        SaleOrder.TRADE_BUYER_SIGNED, SaleOrder.TRADE_FINISHED,
        SaleOrder.TRADE_CLOSED, SaleOrder.TRADE_CLOSED_BY_SYS
    ],
                                        created__gte=tf)

    for order in queryset.iterator():
        # 特卖订单有ordercarry或inderect mama 虚拟订单有
        indirect_mama = False
        from flashsale.xiaolumm.models import XiaoluMama
        if order.sale_trade.order_type == SaleTrade.ELECTRONIC_GOODS_ORDER:
            customer = Customer.objects.get(id=order.buyer_id)
            to_mama = customer.get_xiaolumm()
            if to_mama and to_mama.referal_from == XiaoluMama.INDIRECT:
                indirect_mama = True
        if order.sale_trade.order_type == SaleTrade.SALE_ORDER or indirect_mama:
            order_carry_qs = OrderCarry.objects.filter(order_id=order.oid)
            if not order_carry_qs:
                from flashsale.xiaolumm.tasks import task_order_trigger
                task_order_trigger(order)
                order_carry_qs = OrderCarry.objects.filter(order_id=order.oid)
                if order_carry_qs:
                    results.append(order.oid)
                continue
            status = OrderCarry.STAGING  # unpaid
            if order.need_send():
                status = OrderCarry.ESTIMATE
            elif order.is_confirmed():
                status = OrderCarry.CONFIRM
            elif order.is_canceled():
                status = OrderCarry.CANCEL

            update_fields = ['status', 'modified']
            for order_carry in order_carry_qs:
                if status != order_carry.status:
                    from core.options import log_action, CHANGE, get_systemoa_user
                    logmsg = 'status not equal to saleorder|status:%s->%s' % (
                        order_carry.status, status)
                    order_carry.status = status
                    order_carry.save(update_fields=update_fields)
                    sys_oa = get_systemoa_user()
                    log_action(sys_oa, order_carry, CHANGE, logmsg)
                    results.append(order.oid)
    return results
Ejemplo n.º 10
0
    def handle(self, *args, **options):

        # task_fresh_elitemama_active_status()
        now = datetime.datetime.now()
        sys_oa = get_systemoa_user()

        effect_elite_mms = XiaoluMama.objects.filter(
            status=XiaoluMama.EFFECT,
            last_renew_type=XiaoluMama.SCAN)
        for emm in effect_elite_mms.iterator():
            try:
                emm.status = XiaoluMama.FROZEN
                emm.save(update_fields=['status'])
                log_action(sys_oa, emm, CHANGE, u'schedule task: renew timeout,chg to frozen')
            except TypeError as e:
                logger.error(u" FROZEN mama:%s, error info: %s" % (emm.id, e))
Ejemplo n.º 11
0
    def change_user_pwd(self, request):
        """手机校验修改密码"""
        mobile = request.data['username']
        passwd1 = request.data['password1']
        passwd2 = request.data['password2']
        verify_code = request.data['valid_code']
        current_time = datetime.datetime.now()
        last_send_time = current_time - datetime.timedelta(seconds=TIME_LIMIT)

        if not mobile or not passwd1 or not passwd2 or not verify_code or passwd2 != passwd1:
            return Response({"result": "2"})
        already_exist = Customer.objects.filter(mobile=mobile).exclude(status=Customer.DELETE)
        if not already_exist.exists():
            user = request.user
            if not user or user.is_anonymous:
                return Response({"result": "1"})  # 尚无用户或者手机未绑定
            already_exist = Customer.objects.filter(user=user).exclude(status=Customer.DELETE)
        customer = already_exist[0]
        reg = Register.objects.filter(vmobile=mobile)
        if reg.count() == 0:
            return Response({"result": "3"})  # 未获取验证码
        reg_temp = reg[0]
        verify_code_server = reg_temp.verify_code
        reg_temp.submit_count += 1  # 提交次数加一
        reg_temp.save()
        if reg_temp.code_time and reg_temp.code_time < last_send_time:
            return Response({"result": "4"})
        if verify_code_server != verify_code:
            return Response({"result": "3"})  # 验证码不对

        sysoa_user = get_systemoa_user()
        try:
            system_user = customer.user
            system_user.set_password(passwd1)
            system_user.save()
            reg_temp.cus_uid = already_exist[0].id
            reg_temp.save()
            if self.is_login(request):
                customer.mobile = mobile
                customer.save()
            log_action(sysoa_user.id, already_exist[0], CHANGE, u'忘记密码,修改成功')
            log_action(sysoa_user.id, reg_temp, CHANGE, u'忘记密码,修改成功')
        except:
            return Response({"result": "5"})
        return Response({"result": "0"})
Ejemplo n.º 12
0
def task_dinghuo_supplier():
    """将供应商名字写入订货表"""
    since_time = datetime.date(2015, 9, 20)
    all_dinghuo = OrderList.objects.filter(created__gt=since_time, supplier_shop="")
    for one_dinghuo in all_dinghuo:
        all_product = [detail.product_id for detail in one_dinghuo.order_list.all()]
        supplier = ""
        for one_product in all_product:
            try:
                a = Product.objects.get(id=one_product)
                sale_product = SaleProduct.objects.get(id=a.sale_product)
                supplier = sale_product.sale_supplier.supplier_name
                break
            except:
                continue
        if supplier != "":
            one_dinghuo.supplier_shop = supplier
            one_dinghuo.save()
            log_action(get_systemoa_user().id, one_dinghuo, CHANGE, u'修改供应商')
Ejemplo n.º 13
0
 def create(ibds, optimize_forecast_id, express_no, type):
     now = datetime.datetime.now()
     tmp = ['-->%s %s: 创建入仓单' % (now.strftime('%m月%d %H:%M'), "系统")]
     from shopback.forecast.models.forecast import ForecastInbound
     forecast = ForecastInbound.objects.get(
         forecast_no=optimize_forecast_id)
     supplier_id = forecast.supplier_id
     orderlist_id = forecast.orderlist_id
     inbound = InBound(supplier_id=supplier_id,
                       express_no=express_no,
                       forecast_inbound_id=forecast.id,
                       ware_by=forecast.ware_house,
                       ori_orderlist_id=orderlist_id,
                       memo='\n'.join(tmp),
                       creator=get_systemoa_user(),
                       type=type)
     inbound.save()
     for ibd in ibds:
         ibd.inbound = inbound
         ibd.save()
     if inbound.type == InBound.AUTOMATIC:
         inbound.allocate()  # 此处会创建 预测单
         inbound.finish_check()
     return inbound
Ejemplo n.º 14
0
def off_the_shelf_func(sender, product_list, *args, **kwargs):
    from core.options import log_action, CHANGE, get_systemoa_user
    from .trade import SaleTrade
    from flashsale.pay.tasks import notifyTradePayTask
    sysoa_user = get_systemoa_user()
    for pro_bean in product_list:
        all_cart = ShoppingCart.objects.filter(item_id=pro_bean.id,
                                               status=ShoppingCart.NORMAL,
                                               type=0)
        for cart in all_cart:
            cart.close_cart()
            log_action(sysoa_user.id, cart, CHANGE, u'下架后更新')
        all_trade = SaleTrade.objects.filter(sale_orders__item_id=pro_bean.id,
                                             status=SaleTrade.WAIT_BUYER_PAY)
        for trade in all_trade:
            try:
                charge = xiaolupay.Charge.retrieve(trade.tid)
                if charge and charge.paid:
                    notifyTradePayTask.delay(charge)
                else:
                    trade.close_trade()
                    log_action(sysoa_user.id, trade, CHANGE, u'系统更新待付款状态到交易关闭')
            except Exception, exc:
                logger.error(exc.message, exc_info=True)
Ejemplo n.º 15
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),
        })
Ejemplo n.º 16
0
def task_period_check_mama_renew_state():
    """
    定时检查代理是否需要续费 
    1. 如果当前时间大于下次续费时间 修改 状态到冻结状态
    """
    now = datetime.datetime.now()
    sys_oa = get_systemoa_user()

    # 续费 状态处理
    effect_elite_mms = XiaoluMama.objects.filter(
        status=XiaoluMama.EFFECT,
        charge_status=XiaoluMama.CHARGED,
        referal_from__in=[XiaoluMama.DIRECT, XiaoluMama.INDIRECT]).exclude(last_renew_type=XiaoluMama.ELITE)  # 有效并接管的
    for emm in effect_elite_mms.iterator():
        try:
            if (emm.renew_time and now >= emm.renew_time) or (not emm.renew_time):
                # 2017-2-7 精英妈妈不冻结,变为单纯精英妈妈,老的99/188妈妈冻结
                if emm.last_renew_type != XiaoluMama.ELITE:
                    emm.last_renew_type = XiaoluMama.ELITE
                    emm.save(update_fields=['last_renew_type'])
                    log_action(sys_oa, emm, CHANGE, u'schedule task: renew timeout,chg to elitemama')
        except TypeError as e:
            logger.error(u"task_period_check_mama_renew_state FROZEN mama:%s, error info: %s" % (emm.id, e))

    max_mmid = 0
    effect_no_elite_mms = XiaoluMama.objects.filter(
        status=XiaoluMama.EFFECT,
        charge_status=XiaoluMama.CHARGED).exclude(referal_from__in=[XiaoluMama.DIRECT, XiaoluMama.INDIRECT])

    max_mmid = XiaoluMama.objects.all().count()

    if effect_no_elite_mms.count() < 10000:
        for emm in effect_no_elite_mms.iterator():
            try:
                if (emm.renew_time and now >= emm.renew_time) or ((not emm.renew_time) and emm.last_renew_type < XiaoluMama.ELITE):
                    emm.status = XiaoluMama.FROZEN
                    emm.save(update_fields=['status'])
                    log_action(sys_oa, emm, CHANGE, u'schedule task: renew timeout,chg to frozen')
            except TypeError as e:
                logger.error(u"task_period_check_mama_renew_state FROZEN mama:%s, error info: %s" % (emm.id, e))
    else:
        mmid = 100000
        while True:
            effect_no_elite_mms = XiaoluMama.objects.filter(
                status=XiaoluMama.EFFECT,
                charge_status=XiaoluMama.CHARGED,
                id__lte=mmid).exclude(
                referal_from__in=[XiaoluMama.DIRECT, XiaoluMama.INDIRECT])
            for emm in effect_no_elite_mms.iterator():
                try:
                    if (emm.renew_time and now >= emm.renew_time) or (
                        (not emm.renew_time) and emm.last_renew_type < XiaoluMama.ELITE):
                        emm.status = XiaoluMama.FROZEN
                        emm.save(update_fields=['status'])
                        log_action(sys_oa, emm, CHANGE, u'schedule task: renew timeout,chg to frozen')
                except TypeError as e:
                    logger.error(u"task_period_check_mama_renew_state FROZEN mama:%s, error info: %s" % (emm.id, e))
            if mmid < max_mmid:
                mmid += 100000
            else:
                break
Ejemplo n.º 17
0
def double_mama_score():
    from flashsale.coupon.models.transfer_coupon import CouponTransferRecord
    from_time = datetime.datetime(2017, 2, 8, 23, 0, 0, 0)
    to_time = datetime.datetime(2017, 2, 8, 23, 30, 0, 0)
    has_add = CouponTransferRecord.objects.filter(
        transfer_status=CouponTransferRecord.DELIVERED,
        transfer_type__in=[CouponTransferRecord.IN_GIFT_COUPON],
        created__range=(from_time, to_time)
    )

    has_add_mms = [p['coupon_to_mama_id'] for p in has_add.values('coupon_to_mama_id')]

    from flashsale.xiaolumm.models import XiaoluMama
    mamas = XiaoluMama.objects.filter(referal_from__in=[XiaoluMama.DIRECT, XiaoluMama.INDIRECT], status=XiaoluMama.EFFECT,
                                      charge_status=XiaoluMama.CHARGED, elite_score__gt=0)
    for mama in mamas.iterator():
        origin_score = mama.elite_score
        score = mama.elite_score
        if mama.id in has_add_mms:
            gift_ct = CouponTransferRecord.objects.filter(
                coupon_to_mama_id=mama.id,
                transfer_status=CouponTransferRecord.DELIVERED,
                transfer_type__in=[CouponTransferRecord.IN_GIFT_COUPON],
                created__range=(from_time, to_time)
            ).first()
            if mama.elite_score >= 600 and mama.elite_score < 2000:
                score = 600 - gift_ct.elite_score + 300
            elif mama.elite_score >= 2000 and mama.elite_score < 6000:
                score = 2000 - gift_ct.elite_score + 1000
            elif mama.elite_score >= 6000 and mama.elite_score < 20000:
                score = 6000 - gift_ct.elite_score + 3000
            elif mama.elite_score >= 20000:
                score = 20000 - gift_ct.elite_score + 10000
        else:
            if score >= 600 and score < 1000:
                score += 300
            elif score >= 2000 and score < 3000:
                score += 1000
            elif score >= 6000 and score < 10000:
                score += 3000

        if mama.elite_score != score:
            mama.elite_score = score
            mama.save()
            from core.options import log_action, CHANGE, ADDITION, get_systemoa_user
            sys_oa = get_systemoa_user()
            log_action(sys_oa, mama, CHANGE, u'0208升级分数翻倍修改用户积分从%s到%s' % (origin_score, score))

        try:
            from flashsale.coupon.apis.v1.transfer import create_present_elite_score
            from flashsale.coupon.apis.v1.coupontemplate import get_coupon_template_by_id
            from flashsale.pay.apis.v1.customer import get_customer_by_id

            if score > origin_score:
                template = get_coupon_template_by_id(id=374)
                customer = get_customer_by_id(mama.customer_id)
                transfer_in = create_present_elite_score(customer, int(score - origin_score), template, 1)
                log_action(sys_oa, transfer_in, ADDITION, '0208升级分数翻倍赠送积分: 赠送')
                # log_action(sys_oa, transfer_out, ADDITION, '0208升级分数翻倍赠送积分: 消耗')
        except Exception as e:
            pass
Ejemplo n.º 18
0
def task_referal_update_awardcarry(relationship):
    # print "%s, mama_id: %s" % (get_cur_info(), relationship.referal_from_mama_id)

    if relationship.referal_type == XiaoluMama.ELITE:
        return

    from_mama_id = relationship.referal_from_mama_id
    to_mama_id = relationship.referal_to_mama_id
    carry_type = 1  # 直接推荐

    # uni_key = util_unikey.gen_awardcarry_unikey(from_mama_id, to_mama_id)
    uni_key = AwardCarry.gen_uni_key(to_mama_id, carry_type)

    rr_cnt = ReferalRelationship.objects.filter(
        referal_from_mama_id=from_mama_id,
        referal_type__gte=XiaoluMama.HALF).exclude(
            referal_to_mama_id=to_mama_id).count()
    rr_cnt += 1

    carry_num = utils.get_award_carry_num(rr_cnt, relationship.referal_type)

    status = 1
    carry_description = u'加入正式会员,奖金就会确认哦!'

    if relationship.is_confirmed():
        status = 2  # confirmed
        carry_description = util_description.get_awardcarry_description(
            carry_type)
    else:
        # 20161229 delete试用3的邀请奖励预计收益,只有正式的才有
        return

    award_carry = AwardCarry.objects.filter(uni_key=uni_key).first()
    if award_carry:
        from core.options import log_action, CHANGE, get_systemoa_user
        logmsg = 'mama_id:%s->%s|carry_num:%s->%s|status:%s->%s' % (
            award_carry.mama_id, from_mama_id, award_carry.carry_num,
            carry_num, award_carry.status, status)
        update_fields = []
        if award_carry.mama_id != from_mama_id:
            award_carry.mama_id = from_mama_id
            update_fields.append('mama_id')
        if award_carry.carry_num != carry_num:
            award_carry.carry_num = carry_num
            update_fields.append('carry_num')
        if award_carry.status != status:
            award_carry.status = status
            update_fields.append('status')
            if status == 2:
                award_carry.date_field = datetime.date.today()
                update_fields.append('date_field')
        if award_carry.carry_description != carry_description:
            award_carry.carry_description = carry_description
            update_fields.append('carry_description')
        if update_fields:
            update_fields.append('modified')
            award_carry.save(update_fields=update_fields)
            sys_oa = get_systemoa_user()
            log_action(sys_oa, award_carry, CHANGE, logmsg)
        return

    if not award_carry:
        date_field = relationship.created.date()
        award_carry = AwardCarry(
            mama_id=from_mama_id,
            carry_num=carry_num,
            carry_type=carry_type,
            carry_description=carry_description,
            contributor_nick=relationship.referal_to_mama_nick,
            contributor_img=relationship.referal_to_mama_img,
            contributor_mama_id=relationship.referal_to_mama_id,
            date_field=date_field,
            uni_key=uni_key,
            status=status)
        award_carry.save()
Ejemplo n.º 19
0
def task_update_group_awardcarry(relationship):
    from flashsale.xiaolumm.models.models_fortune import AwardCarry, ReferalRelationship, GroupRelationship

    if relationship.referal_type == XiaoluMama.ELITE:
        return

    from_mama_id = relationship.referal_from_grandma_id
    to_mama_id = relationship.referal_to_mama_id
    carry_type = 2  # 团队推荐

    status = 1
    carry_description = u'%s推荐,加入正式会员,奖金就会确认哦!' % relationship.referal_from_mama_id

    if relationship.is_confirmed():
        status = 2  # confirmed
        carry_description = util_description.get_awardcarry_description(
            carry_type)
    else:
        # 20161229 delete试用3的邀请奖励预计收益,只有正式的才有
        return

    direct_referal_num = ReferalRelationship.objects.filter(
        referal_from_mama_id=from_mama_id,
        referal_type__gte=XiaoluMama.HALF).count()
    group_referal_num = ReferalRelationship.objects.filter(
        referal_from_grandma_id=from_mama_id,
        referal_type__gte=XiaoluMama.HALF).exclude(
            referal_to_mama_id=to_mama_id).count()
    group_num = direct_referal_num + group_referal_num + 1
    carry_num = utils.get_group_carry_num(group_num)

    # if direct_referal_num >= 15, at least get 1000 cents for group referal
    if carry_num <= 0 and direct_referal_num >= 15:
        carry_num = 1000

    if carry_num <= 0:
        return

    uni_key = AwardCarry.gen_uni_key(to_mama_id, carry_type)
    award_carry = AwardCarry.objects.filter(uni_key=uni_key).first()

    if award_carry:
        from core.options import log_action, CHANGE, get_systemoa_user
        logmsg = 'mama_id:%s->%s|carry_num:%s->%s|status:%s->%s' % (
            award_carry.mama_id, from_mama_id, award_carry.carry_num,
            carry_num, award_carry.status, status)
        update_fields = []
        if award_carry.mama_id != from_mama_id:
            award_carry.mama_id = from_mama_id
            update_fields.append('mama_id')
        if award_carry.carry_num != carry_num:
            award_carry.carry_num = carry_num
            update_fields.append('carry_num')
        if award_carry.status != status:
            award_carry.status = status
            update_fields.append('status')
            if status == 2:
                award_carry.date_field = datetime.date.today()
                update_fields.append('date_field')
        if award_carry.carry_description != carry_description:
            award_carry.carry_description = carry_description
            update_fields.append('carry_description')
        if update_fields:
            update_fields.append('modified')
            award_carry.save(update_fields=update_fields)
            sys_oa = get_systemoa_user()
            log_action(sys_oa, award_carry, CHANGE, logmsg)
        return

    date_field = relationship.created.date()
    award_carry = AwardCarry(
        mama_id=from_mama_id,
        carry_num=carry_num,
        carry_type=carry_type,
        contributor_nick=relationship.referal_to_mama_nick,
        contributor_img=relationship.referal_to_mama_img,
        contributor_mama_id=relationship.referal_to_mama_id,
        date_field=date_field,
        uni_key=uni_key,
        status=status)
    award_carry.save()
Ejemplo n.º 20
0
def task_auto_shelf_prods():
    """
    1. 自动上架产品: 已经审核的产品 并且在下架状态的产品 修改状态到上架
    2. 自动下架产品: 并且在上架状态的产品 修改状态到下架状态
    """
    try:
        from pms.supplier.models import SaleProductManage, SaleProductManageDetail
        today = datetime.date.today()
        t1 = datetime.datetime(today.year, today.month, today.day, 0, 0, 0)
        t2 = datetime.datetime(today.year, today.month, today.day, 23, 59, 59)
        schedules = SaleProductManage.objects.filter(upshelf_time__gte=t1, upshelf_time__lte=t2)
        sale_product_ids = []  # 要上架的排期管理选品id
        for schedule in schedules:
            sale_product_ids += [d.sale_product_id for d in
                                 schedule.manage_schedule.filter(today_use_status=SaleProductManageDetail.NORMAL)]

        systemoa = get_systemoa_user()
        offshelf_models = ModelProduct.offshelf_right_now_models()
        onshelf_models = ModelProduct.upshelf_right_now_models()
        onshelf_models = onshelf_models.filter(saleproduct_id__in=sale_product_ids)

        offshelf_pros = Product.offshelf_right_now_products()  # 要立即下架的产品
        onshelf_pros = Product.upshelf_right_now_products()  # 要立即上架的产品
        onshelf_pros = onshelf_pros.filter(sale_product__in=sale_product_ids)

        logger.warn({
            'action': 'auto_off_shelf_models',
            'auto_off_shelf_models_ids': ','.join([str(x[0]) for x in offshelf_models.values_list('id')]),
            'auto_off_shelf_models_count': offshelf_models.count()})  # 下架款式log记录

        for off_md in offshelf_models.iterator():
            state_off = off_md.offshelf_model()
            if state_off:
                log_action(systemoa, off_md, CHANGE, u'系统自动下架款式')

        logger.warn({
            'action': 'auto_off_shelf_pros',
            'auto_off_shelf_pros_ids': ','.join([str(x[0]) for x in offshelf_pros.values_list('id')]),
            'auto_off_shelf_pros_count': offshelf_pros.count()
        })  # 下架产品log记录

        for off_pro in offshelf_pros.iterator():
            state = off_pro.offshelf_product()  # 执行下架动作
            if state:  # 上架成功 打log
                log_action(systemoa, off_pro, CHANGE, u'系统自动下架修改该产品到下架状态')

        logger.warn({
            'action': 'auto_on_shelf_models',
            'auto_on_shelf_models_ids': ','.join([str(x[0]) for x in onshelf_models.values_list('id')]),
            'auto_on_shelf_models_count': onshelf_models.count()
        })  # 上架款式log记录

        for on_md in onshelf_models.iterator():
            state_on = on_md.upshelf_model()
            if state_on:
                log_action(systemoa, on_md, CHANGE, u'系统自动上架款式')

        logger.warn({
            'action': 'auto_on_shelf_prods',
            'auto_on_shelf_prods_ids': ','.join([str(x[0]) for x in onshelf_pros.values_list('id')]),
            'auto_on_shelf_prods_count': onshelf_pros.count()
        })

        for on_pro in onshelf_pros.iterator():
            state = on_pro.upshelf_product()  # 执行上架动作
            if state:  # 上架成功 打log
                log_action(systemoa, on_pro, CHANGE, u'系统自动上架修改该产品到上架状态')

    except Exception as exc:
        raise task_auto_shelf_prods.retry(countdown=60 * 5, exc=exc)