def get_weizoom_card_rules(request): count_per_page = int(request.GET.get('count_per_page', '1')) cur_page = int(request.GET.get('page', '1')) weizoom_card_rule_id = int(request.GET.get('weizoom_card_rule_id', '-1')) weizoom_card_rules = WeizoomCardRule.objects.filter(owner=request.user).order_by('-created_at') pageinfo, weizoom_card_rules = paginator.paginate(weizoom_card_rules, cur_page, count_per_page, query_string=request.META['QUERY_STRING']) cur_weizoom_card_rules = [] for c in weizoom_card_rules: cur_weizoom_card_rule = JsonResponse() cur_weizoom_card_rule.id = c.id cur_weizoom_card_rule.name = c.name cur_weizoom_card_rule.count = c.count cur_weizoom_card_rule.remark = c.remark cur_weizoom_card_rule.money = '%.2f' % c.money cur_weizoom_card_rule.expired_time = datetime.strftime(c.expired_time, '%Y-%m-%d %H:%M') cur_weizoom_card_rule.created_at = datetime.strftime(c.created_at, '%Y-%m-%d %H:%M') cur_weizoom_card_rules.append(cur_weizoom_card_rule) response = create_response(200) response.data.items = cur_weizoom_card_rules response.data.sortAttr = request.GET.get('sort_attr', '-created_at') response.data.pageinfo = paginator.to_dict(pageinfo) return response.get_response()
def get_order(request): id = request.GET.get('id') order = Order.objects.get(id=id) order_has_products = OrderHasProduct.objects.filter(order=order) number = 0 cur_order = JsonResponse() for order_has_product in order_has_products: number += order_has_product.number cur_order.number = number cur_order.statu = get_order_status_text(order.status) cur_order.express_company_name = get_name_by_value( order.express_company_name) cur_order.type = order.type cur_order.express_number = order.express_number cur_order.leader_name = order.leader_name cur_order.integral = order.integral cur_order.bill_type = order.bill_type cur_order.bill = order.bill cur_order.order_id = order.order_id cur_order.final_price = '%.2f' % order.final_price cur_order.postage = '%.2f' % order.postage cur_order.ship_name = order.ship_name cur_order.ship_tel = order.ship_tel cur_order.area = regional_util.get_str_value_by_string_ids(order.area) cur_order.ship_address = order.ship_address cur_order.customer_message = order.customer_message cur_order.created_at = __data_format(order.created_at) cur_order.action = get_order_actions(order) cur_order.reason = order.reason #关联的优惠券 coupon = order.get_coupon() if coupon: cur_coupon = JsonResponse() cur_coupon.coupon_id = coupon.coupon_id cur_coupon.coupon_rule_name = coupon.coupon_rule.name cur_coupon.money = str(coupon.money) cur_order.coupon = cur_coupon else: cur_order.coupon = None products = mall_api.get_order_products(order) #商品 cur_product_json = [] for product in products: cur_product = JsonResponse() cur_product.name = product['name'] cur_product.count = product['count'] cur_product.total_price = product['total_price'] cur_product.thumbnails_url = product['thumbnails_url'] cur_product.is_deleted = product['is_deleted'] properties = product['custom_model_properties'] if properties: for product_property in properties: cur_product.property_name = product_property['name'] cur_product.property_value = product_property['property_value'] cur_product_json.append(cur_product) response = create_response(200) response.data.order = cur_order response.data.products = cur_product_json return response.get_jsonp_response(request)
def get_channel_qrcode_settings(request): """ 获取渠道扫码配置列表 """ #处理搜索 query = request.GET.get('query', '').strip() if query: settings = ChannelQrcodeSettings.objects.filter(owner=request.user, name__contains=query) else: settings = ChannelQrcodeSettings.objects.filter(owner=request.user) setting_ids = [s.id for s in settings] relations = ChannelQrcodeHasMember.objects.filter( channel_qrcode_id__in=setting_ids) setting_id2count = {} member_id2setting_id = {} member_ids = [] for r in relations: member_ids.append(r.member_id) member_id2setting_id[r.member_id] = r.channel_qrcode_id if r.channel_qrcode_id in setting_id2count: setting_id2count[r.channel_qrcode_id] += 1 else: setting_id2count[r.channel_qrcode_id] = 1 webapp_users = member_model.WebAppUser.objects.filter( member_id__in=member_ids) webapp_user_id2member_id = dict([(u.id, u.member_id) for u in webapp_users]) webapp_user_ids = set(webapp_user_id2member_id.keys()) orders = mall_model.Order.by_webapp_user_id(webapp_user_ids).filter( status=mall_model.ORDER_STATUS_SUCCESSED) member_id2total_final_price = {} for order in orders: member_id = webapp_user_id2member_id[order.webapp_user_id] if member_id in member_id2total_final_price: member_id2total_final_price[member_id] += order.final_price else: member_id2total_final_price[member_id] = order.final_price setting_id2total_final_price = {} for member_id in member_id2total_final_price.keys(): final_price = member_id2total_final_price[member_id] setting_id = member_id2setting_id[member_id] if setting_id in setting_id2total_final_price: setting_id2total_final_price[setting_id] += final_price else: setting_id2total_final_price[setting_id] = final_price response = create_response(200) response.data.items = [] items = [] mp_user = get_binding_weixin_mpuser(request.user) mpuser_access_token = get_mpuser_accesstoken(mp_user) for setting in settings: cur_setting = JsonResponse() prize_info = decode_json_str(setting.award_prize_info) if prize_info['name'] == '_score-prize_': setting.cur_prize = '[%s]%d' % (prize_info['type'], prize_info['id']) elif prize_info['name'] == 'non-prize': setting.cur_prize = prize_info['type'] else: setting.cur_prize = '[%s]%s' % (prize_info['type'], prize_info['name']) if setting.id in setting_id2count: setting.count = setting_id2count[setting.id] else: setting.count = 0 if setting.id in setting_id2total_final_price: setting.total_final_price = setting_id2total_final_price[ setting.id] else: setting.total_final_price = 0 #如果没有ticket信息则获取ticket信息 if not setting.ticket: try: if mp_user.is_certified and mp_user.is_service and mpuser_access_token.is_active: weixin_api = get_weixin_api(mpuser_access_token) qrcode_ticket = weixin_api.create_qrcode_ticket( int(setting.id), QrcodeTicket.PERMANENT) try: ticket = qrcode_ticket.ticket except: ticket = '' setting.ticket = ticket setting.save() except: pass cur_setting.id = setting.id cur_setting.name = setting.name cur_setting.count = setting.count cur_setting.total_final_price = round(setting.total_final_price, 2) cur_setting.cur_prize = setting.cur_prize cur_setting.ticket = setting.ticket cur_setting.remark = setting.remark items.append(cur_setting) #进行分页 response.data.sortAttr = request.GET.get('sort_attr', 'count') if '-' in response.data.sortAttr: sorter = response.data.sortAttr[1:] is_reverse = True else: sorter = response.data.sortAttr is_reverse = False items = sorted(items, reverse=is_reverse, key=lambda b: getattr(b, sorter)) count_per_page = int(request.GET.get('count_per_page', 15)) cur_page = int(request.GET.get('page', '1')) pageinfo, items = paginator.paginate( items, cur_page, count_per_page, query_string=request.META['QUERY_STRING']) # response.data.items = items response.data.pageinfo = paginator.to_dict(pageinfo) return response.get_response()
def _get_channel_qrcode_items(request): #处理搜索 from mall.models import * query = request.GET.get('query', '').strip() sort_attr = request.GET.get('sort_attr', '-created_at') created_at = '-created_at' if 'created_at' in sort_attr: created_at = sort_attr setting = MemberChannelQrcodeSettings.objects.filter(owner=request.manager) if setting.count() > 0: member_channel_qrcodes = MemberChannelQrcode.objects.filter( member_channel_qrcode_setting=setting[0]) if query: member_ids = [ qrcode.member_id for qrcode in member_channel_qrcodes ] query_hex = byte_to_hex(query) members = member_model.Member.objects.filter( id__in=member_ids).filter(username_hexstr__contains=query_hex) member_ids = [m.id for m in members] member_channel_qrcodes = member_channel_qrcodes.filter( member_id__in=member_ids) else: return create_response(500).get_response() member_channel_qrcode_ids = [ qrcode.id for qrcode in member_channel_qrcodes ] relations = MemberChannelQrcodeHasMember.objects.filter( member_channel_qrcode__in=member_channel_qrcode_ids) member_channel_qrcode_id2count = {} member_id2member_channel_qrcode_id = {} member_id2relation = {} member_ids = [] for r in relations: member_ids.append(r.member_id) member_id2member_channel_qrcode_id[ r.member_id] = r.member_channel_qrcode_id member_id2relation[r.member_id] = r if r.member_channel_qrcode_id in member_channel_qrcode_id2count: member_channel_qrcode_id2count[r.member_channel_qrcode_id] += 1 else: member_channel_qrcode_id2count[r.member_channel_qrcode_id] = 1 webapp_users = member_model.WebAppUser.objects.filter( member_id__in=member_ids) webapp_user_id2member_id = dict([(u.id, u.member_id) for u in webapp_users]) webapp_user_ids = set(webapp_user_id2member_id.keys()) orders = Order.by_webapp_user_id(webapp_user_ids).filter( status__in=(ORDER_STATUS_PAYED_SUCCESSED, ORDER_STATUS_PAYED_NOT_SHIP, ORDER_STATUS_PAYED_SHIPED, ORDER_STATUS_SUCCESSED)) member_id2total_final_price = {} member_id2cash_money = {} member_id2weizoom_card_money = {} for order in orders: member_id = webapp_user_id2member_id[order.webapp_user_id] if member_id2relation[member_id].is_new or member_id2relation[ member_id].created_at <= order.created_at: if member_id in member_id2total_final_price: member_id2total_final_price[ member_id] += order.final_price + order.weizoom_card_money member_id2cash_money[member_id] += order.final_price member_id2weizoom_card_money[ member_id] += order.weizoom_card_money else: member_id2total_final_price[ member_id] = order.final_price + order.weizoom_card_money member_id2cash_money[member_id] = order.final_price member_id2weizoom_card_money[ member_id] = order.weizoom_card_money member_channel_qrcode_id2total_final_price = {} member_channel_qrcode_id2cash_money = {} member_channel_qrcode_id2weizoom_card_money = {} for member_id in member_id2total_final_price.keys(): final_price = member_id2total_final_price[member_id] cash_money = member_id2cash_money[member_id] weizoom_card_money = member_id2weizoom_card_money[member_id] member_channel_qrcode_id = member_id2member_channel_qrcode_id[ member_id] if member_channel_qrcode_id in member_channel_qrcode_id2total_final_price: member_channel_qrcode_id2total_final_price[ member_channel_qrcode_id] += final_price member_channel_qrcode_id2cash_money[ member_channel_qrcode_id] += cash_money member_channel_qrcode_id2weizoom_card_money[ member_channel_qrcode_id] += weizoom_card_money else: member_channel_qrcode_id2total_final_price[ member_channel_qrcode_id] = final_price member_channel_qrcode_id2cash_money[ member_channel_qrcode_id] = cash_money member_channel_qrcode_id2weizoom_card_money[ member_channel_qrcode_id] = weizoom_card_money response = create_response(200) #response.data.items = [] items = [] mp_user = get_binding_weixin_mpuser(request.manager) mpuser_access_token = get_mpuser_accesstoken(mp_user) for qrcode in member_channel_qrcodes: current_qrcode = JsonResponse() if qrcode.id in member_channel_qrcode_id2count: qrcode.count = member_channel_qrcode_id2count[qrcode.id] else: qrcode.count = 0 if qrcode.id in member_channel_qrcode_id2total_final_price: qrcode.total_final_price = member_channel_qrcode_id2total_final_price[ qrcode.id] qrcode.cash_money = member_channel_qrcode_id2cash_money[qrcode.id] qrcode.weizoom_card_money = member_channel_qrcode_id2weizoom_card_money[ qrcode.id] else: qrcode.total_final_price = 0 qrcode.cash_money = 0 qrcode.weizoom_card_money = 0 #如果没有ticket信息则获取ticket信息 if not qrcode.ticket: try: if mp_user.is_certified and mp_user.is_service and mpuser_access_token.is_active: weixin_api = get_weixin_api(mpuser_access_token) qrcode_ticket = weixin_api.create_qrcode_ticket( int(qrcode.id), QrcodeTicket.PERMANENT) try: ticket = qrcode_ticket.ticket except: ticket = '' qrcode.ticket = ticket qrcode.save() except: pass current_qrcode.id = qrcode.id current_qrcode.name = qrcode.member.username_for_html current_qrcode.count = qrcode.count current_qrcode.total_final_price = round(qrcode.total_final_price, 2) current_qrcode.ticket = qrcode.ticket current_qrcode.created_at = qrcode.created_at.strftime( '%Y-%m-%d %H:%M:%S') items.append(current_qrcode) return items
def get_cards(request): """ 卡规则列表 """ count_per_page = int(request.GET.get('count_per_page', '1')) cur_page = int(request.GET.get('page', '1')) card_name = request.GET.get('cardName', '').strip() weizoom_card_rule_id = int(request.GET.get('weizoom_card_rule_id', '-1')) weizoom_card_rules = WeizoomCardRule.objects.all().order_by('-created_at') weizoomcardpermission = WeiZoomCardPermission.objects.filter( user_id=request.user.id) can_export_batch_card = 0 can_delay_card = 0 if weizoomcardpermission: can_export_batch_card = weizoomcardpermission[0].can_export_batch_card can_delay_card = weizoomcardpermission[0].can_delay_card if card_name: weizoom_card_rules = weizoom_card_rules.filter( name__icontains=card_name) # 时间区间 date_interval = request.GET.get('date_interval', '') if date_interval: date_interval = get_datetime_from_date_interval(date_interval) weizoom_card_rules = weizoom_card_rules.filter( valid_time_from__gte=date_interval[0], valid_time_to__lte=date_interval[1]) filter_value = request.GET.get('filter_value', '') card_type = _get_type_value(filter_value) card_attr = _get_attr_value(filter_value) if card_type != -1: weizoom_card_rules = weizoom_card_rules.filter(card_type=card_type) if card_attr != -1: weizoom_card_rules = weizoom_card_rules.filter(card_attr=card_attr) #卡号区间查询 card_num_min = request.GET.get('card_num_min', '') card_num_max = request.GET.get('card_num_max', '') if card_num_min or card_num_max: card_rule_ids = [int(r.id) for r in weizoom_card_rules] all_cards = WeizoomCard.objects.filter( weizoom_card_rule_id__in=card_rule_ids) rule_id2cards = {} for c in all_cards: card_rule_id = c.weizoom_card_rule_id if card_rule_id not in rule_id2cards: rule_id2cards[card_rule_id] = [c] else: rule_id2cards[card_rule_id].append(c) weizoom_card_id2rule_ids = {} for rule_id in rule_id2cards: for card in rule_id2cards[rule_id]: weizoom_card_id2rule_ids[card.weizoom_card_id] = rule_id card_num_set = set(int(i) for i in weizoom_card_id2rule_ids.keys()) if card_num_min and card_num_max: max_num = int(card_num_max) min_num = int(card_num_min) search_set = set(range(min_num, max_num + 1)) elif card_num_max: search_set = set([int(card_num_max)]) elif card_num_min: search_set = set([int(card_num_min)]) else: search_set = set([]) result_set = search_set & card_num_set result_list = list(result_set) if len(result_list) > 0: filter_cards_id_list = [] for card_num in result_list: filter_cards_id_list.append(u'%07d' % card_num) filter_rule_ids = [] for card in filter_cards_id_list: r_id = weizoom_card_id2rule_ids[card] filter_rule_ids.append(r_id) filter_rule_ids = list(set(filter_rule_ids)) weizoom_card_rules = weizoom_card_rules.filter( id__in=filter_rule_ids) if len(result_list) == 0: weizoom_card_rules = [] pageinfo, weizoom_card_rules = paginator.paginate( weizoom_card_rules, cur_page, count_per_page, query_string=request.META['QUERY_STRING']) card_rule_ids = [] user_ids = [] for r in weizoom_card_rules: card_rule_ids.append(int(r.id)) belong_to_owner_list = str(r.shop_limit_list).split(',') for a in belong_to_owner_list: if a != '-1': user_ids.append(a) user_id2store_name = {} user_profiles = UserProfile.objects.filter(user_id__in=user_ids) for user_profile in user_profiles: if user_profile.store_name: user_id2store_name[str( user_profile.user_id)] = user_profile.store_name all_cards = WeizoomCard.objects.filter( weizoom_card_rule_id__in=card_rule_ids) rule_id2card_ids = {} rule_id2cards = {} for c in all_cards: card_rule_id = c.weizoom_card_rule_id if card_rule_id not in rule_id2cards: rule_id2cards[card_rule_id] = [c] else: rule_id2cards[card_rule_id].append(c) for r_id in card_rule_ids: if r_id in rule_id2cards: weizoom_cards = rule_id2cards[r_id] weizoom_card_ids = [ int(weizoom_cards[0].weizoom_card_id), int(weizoom_cards[::-1][0].weizoom_card_id) ] rule_id2card_ids[r_id] = weizoom_card_ids cur_weizoom_card_rules = [] for rule in weizoom_card_rules: belong_to_owner_list2store_names = [] belong_to_owner_list = str(rule.shop_limit_list).split(',') for a in belong_to_owner_list: if a != '-1': belong_to_owner_list2store_name = user_id2store_name.get( a, None) belong_to_owner_list2store_names.append( belong_to_owner_list2store_name) cur_weizoom_card_rule = JsonResponse() cur_weizoom_card_rule.id = rule.id cur_weizoom_card_rule.name = rule.name cur_weizoom_card_rule.count = rule.count cur_weizoom_card_rule.remark = rule.remark cur_weizoom_card_rule.money = '%.2f' % rule.money cur_weizoom_card_rule.card_type = rule.card_type cur_weizoom_card_rule.is_new_member_special = rule.is_new_member_special cur_weizoom_card_rule.card_attr = rule.card_attr cur_weizoom_card_rule.belong_to_owner = belong_to_owner_list2store_names cur_weizoom_card_rule.valid_time_from = rule.valid_time_from.strftime( '%Y-%m-%d %H:%M') cur_weizoom_card_rule.valid_time_to = rule.valid_time_to.strftime( '%Y-%m-%d %H:%M') cur_weizoom_card_rule.created_at = rule.created_at.strftime( '%Y-%m-%d %H:%M') #卡号区间 try: weizoom_card_ids = rule_id2card_ids[cur_weizoom_card_rule.id] weizoom_card_id_start = weizoom_card_ids[0] weizoom_card_id_end = weizoom_card_ids[1] card_num_range = '%07d-%07d' % (weizoom_card_id_start, weizoom_card_id_end) cur_weizoom_card_rule.card_range = card_num_range except: pass # 卡类型 if cur_weizoom_card_rule.card_type == WEIZOOM_CARD_EXTERNAL: cur_weizoom_card_rule.card_type = TYPE2NAME[ 'WEIZOOM_CARD_EXTERNAL'] elif cur_weizoom_card_rule.card_type == WEIZOOM_CARD_INTERNAL: cur_weizoom_card_rule.card_type = TYPE2NAME[ 'WEIZOOM_CARD_INTERNAL'] else: cur_weizoom_card_rule.card_type = TYPE2NAME['WEIZOOM_CARD_GIFT'] cur_weizoom_card_rules.append(cur_weizoom_card_rule) response = create_response(200) response.data.items = cur_weizoom_card_rules response.data.sortAttr = request.GET.get('sort_attr', '-created_at') response.data.pageinfo = paginator.to_dict(pageinfo) response.data.can_delay_card = can_delay_card response.data.can_export_batch_card = can_export_batch_card return response.get_response()