def update_models_use_webapp_user(current_webapp_user, expired_webapp_user): if current_webapp_user is None and expired_webapp_user is None: return None from mall.models import Order if current_webapp_user.webapp_id == expired_webapp_user.webapp_id: Order.by_webapp_user_id(expired_webapp_user.id).filter( webapp_id=current_webapp_user.webapp_id).update( webapp_user_id=current_webapp_user.id)
def __get_member_orders(member): if member is None: return None webapp_user = WebAppUser.from_member(member) if webapp_user is None: notify_message = u"获取会员对应webappuser失败,member id:{}".format(member.id) watchdog_error(notify_message) return None return Order.by_webapp_user_id(webapp_user.id).order_by("-created_at")
def _is_buyed(member): webapp_user = WebAppUser.from_member(member) #这种方式无法正确的判断是否购买过, 如果数据被删除则积分计算会出现问题 by bert # if webapp_user: # return webapp_user.has_purchased # else: # return False if webapp_user: return True if Order.by_webapp_user_id(webapp_user.id).filter( status__gte=2).count() > 0 else False else: return False
def api_get(request): webapp_id = request.user_profile.webapp_id member_id = request.GET.get('id', None) cur_page = int(request.GET.get('page', '1')) count = int(request.GET.get('count_per_page', COUNT_PER_PAGE)) orders = [] if member_id: member = Member.objects.get(id=member_id, webapp_id=webapp_id) webapp_user_ids = member.get_webapp_user_ids orders = Order.by_webapp_user_id(webapp_user_ids).order_by( "-created_at", "-id") pay_money = 0 orders_valid = orders.filter(status=ORDER_STATUS_SUCCESSED) for order in orders_valid: order_final_price = order.final_price + order.weizoom_card_money pay_money += order_final_price total_count = orders.count() pageinfo, orders = paginator.paginate(orders, cur_page, count) items = [] for order in orders: items.append({ "id": order.id, "order_id": order.order_id, "final_price": float('%.2f' % (order.final_price + order.weizoom_card_money)), "created_at": datetime.strftime(order.created_at, '%Y-%m-%d %H:%M:%S'), "order_status": order.status, }) response = create_response(200) response.data = { 'items': items, 'pageinfo': paginator.to_dict(pageinfo), 'pay_money': '%.2f' % pay_money, } return response.get_response()
def _is_buyed(member): return True if Order.by_webapp_user_id(member.get_webapp_user_ids).filter( status__gte=2).count() > 0 else False
def get_channel_qrcode_stats(setting_id): """ 渠道扫码的分析结果 """ relations = ChannelQrcodeHasMember.objects.filter( channel_qrcode=setting_id, is_new=True) member_num = relations.count() member_with_order_num = 0 order_num = 0 order_amount = 0.0 repurchase_member_num = 0 repurchase_order_num = 0 repurchase_order_amount = 0.0 for relation in relations: orders = Order.by_webapp_user_id( relation.member.get_webapp_user_ids).filter( status__in=QUALIFIED_ORDER_STATUS).order_by('created_at') order_count = orders.count() if order_count > 0: total_paid_amount = 0.0 first_paid_amount = None for order in orders: current_paid_amount = float(order.final_price) + float( order.weizoom_card_money) total_paid_amount += current_paid_amount if first_paid_amount == None: first_paid_amount = current_paid_amount order_amount += total_paid_amount member_with_order_num += 1 order_num += order_count if order_count >= 2: repurchase_member_num += 1 # 复购订单统计不计第一张订单 repurchase_order_num += order_count - 1 repurchase_order_amount += total_paid_amount - first_paid_amount if member_num > 0: transform_ratio = "%.2f%%" % float( float(member_with_order_num) / float(member_num) * 100) else: transform_ratio = '0.00%' # 被推荐用户数 stats = [{ "name": "被推荐用户数", "value": member_num }, { "name": "被推荐用户下单人数", "value": member_with_order_num }, { "name": "被推荐用户下单单数", "value": order_num }, { "name": "被推荐用户下单金额", "value": '%.2f' % order_amount }, { "name": "推荐扫码下单转换率", "value": transform_ratio }, { "name": "复购用户数", "value": repurchase_member_num }, { "name": "复购订单数", "value": repurchase_order_num }, { "name": "复购总金额", "value": '%.2f' % repurchase_order_amount }] return stats
def auto_update_grade(webapp_user_id=None, member=None, delete=False, **kwargs): """ :param webapp_user_id: :param member: :param delete: :param kwargs: :return:是否改变了等级 """ is_change = False if webapp_user_id: member = WebAppUser.get_member_by_webapp_user_id(webapp_user_id) if not isinstance(member, Member): return if not member: return False if not member.grade.is_auto_upgrade and not delete: return is_change webapp_id = member.webapp_id webapp_owner_id = webapp_models.WebApp.objects.get( appid=webapp_id).owner_id webapp_user_ids = member.get_webapp_user_ids # 获取会员数据 paid_orders = Order.by_webapp_user_id(webapp_user_ids).filter( status=mall_models.ORDER_STATUS_SUCCESSED, origin_order_id__lte=0) pay_times = paid_orders.count() bound = member.experience pay_money = 0 for order in paid_orders: pay_money += order.get_final_price( webapp_id) + order.weizoom_card_money if delete: grades_list = MemberGrade.objects.filter( webapp_id=webapp_id, is_auto_upgrade=True).exclude(id=member.grade_id).order_by('-id') else: grades_list = MemberGrade.objects.filter( webapp_id=webapp_id, is_auto_upgrade=True, id__gt=member.grade_id).order_by('-id') from cache.webapp_owner_cache import get_webapp_owner_info # 此处import写在文件头会报错 is_all_conditions = get_webapp_owner_info( webapp_owner_id).integral_strategy_settings.is_all_conditions # 计算条件 if is_all_conditions: for grade in grades_list: # if pay_money >= grade.pay_money and pay_times >= grade.pay_times and bound >= grade.upgrade_lower_bound: if pay_money >= grade.pay_money and pay_times >= grade.pay_times: is_change = True new_grade = grade break else: for grade in grades_list: # if pay_money >= grade.pay_money or pay_times >= grade.pay_times or bound >= grade.upgrade_lower_bound: if pay_money >= grade.pay_money or pay_times >= grade.pay_times: is_change = True new_grade = grade break if is_change: Member.objects.filter(id=member.id).update(grade=new_grade) return is_change
def get_member_orders(member): if member is None: return None webapp_user_ids = member.get_webapp_user_ids return Order.by_webapp_user_id(webapp_user_ids).order_by("-created_at")