def api_post(request): """ 更新关键词自动回复消息 """ id = int(request.POST.get('id', -1)) if id == -1: response = create_response(400) response.errMsg = u'托管消息id错误: %d,无法更新托管消息' % id else: answer = request.POST.get('answer', '') material_id = request.POST.get('material_id', 0) active_type = int(request.POST.get('active_type', 2)) active_days = request.POST.get('active_days', '') start_hour = request.POST.get('start_hour', '') end_hour = request.POST.get('end_hour', '') if is_valid_time(start_hour) and is_valid_time(end_hour): Rule.objects.filter(id=id).update( answer = answer, active_type = active_type, active_days = active_days, start_hour = start_hour, end_hour = end_hour, material_id = material_id ) #清除缓存 cache_key = 'auto_qa_message_webapp_id_%s_type_%s' % (request.user_profile.webapp_id, UNMATCH_TYPE) cache_util.delete_cache(cache_key) response = create_response(200) else: response = create_response(401) response.errMsg = u"非法起止时间:start_hour:%s,end_hour:%s" % (start_hour, end_hour) return response.get_response()
def api_post(request): """ 响应POST """ data = request_util.get_fields_to_be_save(request) data['qrcode'] = json.loads(request.POST['qrcode']) update_data = {} update_fields = set([ 'name', 'start_time', 'end_time', 'timing', 'desc', 'reply_content', 'material_image', 'qrcode' ]) # update_fields = data.keys() for key, value in data.items(): if key in update_fields: if key == "timing": value = bool2Bool(value) update_data['set__' + key] = value print key, value, "$$$$$$$$$" app_models.PowerMe.objects(id=request.POST['id']).update(**update_data) #更新后清除缓存 cache_key = 'apps_powerme_%s_html' % request.POST['id'] delete_cache(cache_key) response = create_response(200) return response.get_response()
def api_post(request): """ 响应POST """ if request.POST.get('status', None): status = 1 if request.POST['status'] == 'on' else 0 signs = app_models.Sign.objects(id=request.POST['signId']) signs.update(set__status=status) if status == 1 and signs.count() > 0: #将所有已签到用户的签到状态重置,作为一个新的签到 sign = signs[0] app_models.SignParticipance.objects( belong_to=str(sign.id)).update(set__serial_count=0, set__latest_date=None) # app_models.SignControl.objects.all().delete() cache_key = 'apps_sign_%s_html' % str(signs[0].owner_id) else: data = export.get_sing_fields_to_save(request) update_data = {} update_fields = set(['name', 'share', 'reply', 'prize_settings']) for key, value in data.items(): if key in update_fields: update_data['set__' + key] = value sign = app_models.Sign.objects(id=request.POST['signId']).first() sign.update(**update_data) cache_key = 'apps_sign_%s_html' % sign.owner_id #更新后清除redis缓存 delete_cache(cache_key) response = create_response(200) return response.get_response()
def update_webapp_order_cache(instance, **kwargs): """ Order.save时触发信号回调函数 @param instance Order的实例 @param kwargs 其他参数,包括'sender'、'created'、'signal'、'raw'、'using' 当在Django有Order.save的操作时会触发此函数。 如果instance是有效的Order,则取将Order.webapp_user_id对应用户的订单数据缓存删除。 """ if kwargs.get('created'): webapp_user_id = instance.webapp_user_id key = get_order_stats_cache_key(webapp_user_id) cache_util.delete_cache(key) elif not isinstance(instance, Order): from itertools import chain instances = chain(instance) for order in instances: webapp_user_id = order.webapp_user_id if webapp_user_id: try: key = get_order_stats_cache_key(webapp_user_id) cache_util.delete_cache(key) except: pass return
def update_webapp_order_by_review_picture_cache(instance, **kwargs): if hasattr(cache, 'request'): webapp_user_id = cache.request.webapp_user.id try: key = get_order_stats_cache_key(webapp_user_id) cache_util.delete_cache(key) except: pass
def api_post(request): """ 更新关键词自动回复消息的规则 """ id = int(request.POST.get('id', -1)) if id == -1: response = create_response(400) response.errMsg = u'关键词自动回复消息id错误: %d,无法更新关键词自动回复消息' % id else: rule_name = request.POST.get('rule_name', '') patterns = request.POST.get('patterns', None) if not patterns: raise Http404('invalid keywords') has_duplicate, duplicate_patterns = has_duplicate_pattern( request.manager, patterns, id) if has_duplicate: response = create_response(601) response.errMsg = u'下列关键词已经存在: %s' % duplicate_patterns[0] return response.get_response() answer = request.POST.get('answer', '') #将answer中的表情img标签转化为文字符号 by Eugene answers = json.loads(answer) for data in answers: if data['type'] == "text": data['content'] = emotion.change_img_to_emotion( data['content']) # 校验回复消息为图文时content不能为0 by Eugene if data['type'] == "news" and (data['content'] == "0" or not data["content"]): response = create_response(500) return response.get_response() answer = json.dumps(answers) material_id = int(request.POST.get('material_id', 0)) if material_id == 0: type = TEXT_TYPE else: type = NEWS_TYPE Rule.objects.filter(id=id).update(rule_name=rule_name, patterns=patterns, answer=answer, material_id=material_id, type=type) #修改后清除缓存,解决相同的关键字修改回复内容后微信端不生效的问题 add by aix 2016.8.15 cache_keys = [ 'auto_qa_message_webapp_id_%s_query_%s' % (request.user_profile.webapp_id, query['keyword']) for query in json.loads(patterns) ] for cache_key in cache_keys: cache_util.delete_cache(cache_key) response = create_response(200) return response.get_response()
def delete_webapp_page_cache(**kwargs): if hasattr(cache, 'request') and cache.request.user_profile: webapp_owner_id = cache.request.user_profile.user_id for project in webapp_models.Project.objects.filter( owner_id=webapp_owner_id, type='wepage'): key = 'termite_webapp_page_%s_%s' % (webapp_owner_id, project.id) cache_util.delete_cache(key) purge_webapp_page_from_varnish_cache.delay(webapp_owner_id, project.id)
def get_update_cache(request): owner_ids = request.GET.get('owner_ids', '') owner_ids = owner_ids.split(',') # owner_id2permissions = {str(ahwp.owner_id): ahwp for ahwp in AccountHasWeizoomCardPermissions.objects.filter(owner_id__in=owner_ids)} for owner_id in owner_ids: key = 'webapp_owner_info_{wo:%s}' % owner_id if cache_util.get_cache(key): cache_util.delete_cache(key) response = create_response(200) response.data = u'success' return response.get_response()
def update_product_cache(webapp_owner_id, product_id, deleteRedis=True, deleteVarnish=True, deleteVarnishList=True): if deleteRedis: key = 'webapp_product_detail_{wo:%s}_{pid:%s}' % (webapp_owner_id, product_id) cache_util.delete_cache(key) # key = 'webapp_products_categories_{wo:%s}' % webapp_owner_id # cache_util.delete_cache(key) update_product_list_cache(webapp_owner_id)
def update_product_list_cache(webapp_owner_id): # 先清缓存,以防异步任务失败 key = 'webapp_products_categories_{wo:%s}' % webapp_owner_id api_key = 'api' + key try: cache_util.delete_cache(key) cache_util.delete_cache(api_key) except: pass from cache.tasks import update_product_list_cache_task update_product_list_cache_task.delay(webapp_owner_id)
def update_red_envelope_cache(instance, **kwargs): if not instance: return key = None if len(instance): if isinstance(instance[0], promotion_models.RedEnvelopeRule): # 更新红包分享规则状态时,清空红包分享缓存 key = 'red_envelope_{wo:%s}' % instance[0].owner_id elif isinstance(instance[0], promotion_models.CouponRule) and ( instance[0].remained_count <= 0 or not instance[0].is_active): # 更新优惠券规则库存数量小于等于0时,清空红包分享缓存 key = 'red_envelope_{wo:%s}' % instance[0].owner_id if key: cache_util.delete_cache(key)
def update_forbidden_coupon_product_ids(instance, **kwargs): if hasattr(cache, 'request') and cache.request.user_profile and not kwargs.get( 'created', False): webapp_owner_id = cache.request.user_profile.user_id key = 'forbidden_coupon_products_%s' % webapp_owner_id cache_util.delete_cache(key) if isinstance(instance, promotion_models.ForbiddenCouponProduct): product_id = instance.product_id else: product_id = instance[0].product_id update_product_cache(webapp_owner_id, product_id, False, deleteVarnishList=False)
def update_webapp_product_model_properties_cache(**kwargs): """ 更新product model缓存 """ if hasattr(cache, 'request') and cache.request.user_profile: if cache.request.user_profile: webapp_owner_id = cache.request.user_profile.user_id key = 'webapp_product_model_properties_{wo:%s}' % webapp_owner_id cache_util.delete_cache(key) for weizoom_mall in WeizoomMall.objects.filter(is_active=True): user_profile = UserProfile.objects.filter( webapp_id=weizoom_mall.webapp_id) if user_profile.count() == 1: key = 'webapp_product_model_properties_{wo:%s}' % user_profile[ 0].user_id cache_util.delete_cache(key)
def update_webapp_category_cache(**kwargs): if hasattr(cache, 'request') and cache.request.user_profile: webapp_owner_id = cache.request.user_profile.user_id instance = kwargs.get('instance', None) sender = kwargs.get('sender', None) category_id = 0 if instance and sender == mall_models.ProductCategory: # 删除商品分类 if isinstance(instance, mall_models.ProductCategory): id = instance.id else: id = instance[0].id category_id = id categories_products_key = '{wo:%s}_{co:%s}_products' % ( webapp_owner_id, id) cache_util.delete_redis_key(categories_products_key) categories_key = '{wo:%s}_categories' % (webapp_owner_id) cache_util.delete_cache(categories_key) elif instance and sender == mall_models.CategoryHasProduct: # 删除商品分类中的商品 if isinstance(instance, mall_models.CategoryHasProduct): catory_id = instance.category_id product_id = instance.product_id else: product_id = instance[0].product_id catory_id = instance[0].category_id category_id = catory_id categories_products_key = '{wo:%s}_{co:%s}_products' % ( webapp_owner_id, catory_id) cache_util.rem_set_member_from_redis(categories_products_key, product_id) # todo zhaolei 清除对应的varnish缓存,需要重构 # if settings.EN_VARNISH: # if not settings.DEBUG: # url = 'http://%s/termite/workbench/jqm/preview/?woid=%s&module=mall&model=products&action=list&category_id=%s' % \ # (settings.DOMAIN, webapp_owner_id, category_id) # request = urllib2.Request(url) # request.get_method = lambda: 'PURGE' # urllib2.urlopen(request) # pattern_categories = "webapp_products_categories_{wo:%s}" % webapp_owner_id # cache_util.delete_pattern(pattern_categories) update_product_list_cache(webapp_owner_id)
def update_webapp_owner_info_cache_with_login(instance, **kwargs): if isinstance(instance, account_models.UserProfile): webapp_owner_id = instance.user_id elif isinstance(instance, AccountHasWeizoomCardPermissions): webapp_owner_id = instance.owner_id else: if cache.request.user_profile: webapp_owner_id = cache.request.user_profile.user_id else: return key = 'webapp_owner_info_{wo:%s}' % webapp_owner_id cache_util.delete_cache(key) key_termite_page = 'termite_webapp_page_%s_*' % webapp_owner_id cache_util.delete_pattern(key_termite_page) get_webapp_owner_info(webapp_owner_id) try: from termite2.tasks import purge_webapp_page_from_varnish_cache purge_webapp_page_from_varnish_cache.delay(webapp_owner_id) except: pass
def api_post(request): """ 响应POST """ data = request_util.get_fields_to_be_save(request) data['groups'] = json.loads(data['groups']) update_data = {} update_fields = set([ 'name', 'start_time', 'end_time', 'groups', 'description', 'rule', 'votecount_per_one', 'share_image', 'advertisement' ]) for key, value in data.items(): if key in update_fields: update_data['set__' + key] = value app_models.Shvote.objects(id=request.POST['id']).update(**update_data) #更新后清除缓存 cache_key = 'apps_shvote_%s_html' % request.POST['id'] delete_cache(cache_key) response = create_response(200) return response.get_response()
def api_post(request): """ 更新关注自动回复消息 """ id = int(request.POST.get('id', -1)) if id == -1: response = create_response(400) response.errMsg = u'关注自动回复消息id错误: %d,无法更新关注自动回复消息' % id else: answer = request.POST.get('answer', '') material_id = request.POST.get('material_id', 0) # 更新规则 Rule.objects.filter(id=id).update( answer = answer, material_id = material_id ) #清除缓存 cache_key = 'auto_qa_message_webapp_id_%s_type_%s' % (request.user_profile.webapp_id, FOLLOW_TYPE) cache_util.delete_cache(cache_key) response = create_response(200) return response.get_response()
def update_webapp_mall_config_cache(**kwargs): if hasattr(cache, 'request') and cache.request.user_profile: webapp_owner_id = cache.request.user_profile.user_id key = 'webapp_mall_config_{wo:%s}' % webapp_owner_id cache_util.delete_cache(key)
def update_webapp_product_cache(**kwargs): if hasattr(cache, 'request') and cache.request.user_profile: webapp_owner_id = cache.request.user_profile.user_id instance = kwargs.get('instance', None) before_instance = kwargs.get('before_instance', None) sender = kwargs.get('sender', None) if instance and sender == mall_models.Product: if isinstance(instance, mall_models.Product): product_id = instance.id shelve_type = instance.shelve_type is_deleted = instance.is_deleted # 微众商城代码 # weshop_status = instance.weshop_status # weshop_sync = instance.weshop_sync else: product_id = instance[0].id shelve_type = instance[0].shelve_type is_deleted = instance[0].is_deleted # 微众商城代码 # weshop_status = instance[0].weshop_status # weshop_sync = instance[0].weshop_sync if before_instance: # 微众商城代码 #微众商城下架处理 duhao 20151120 # if before_instance.weshop_status != weshop_status and mall_models.PRODUCT_SHELVE_TYPE_OFF == weshop_status: # cache_util.rem_set_member_by_patten_from_redis('{wo:216}_{co:*}_products',product_id) if before_instance.shelve_type != shelve_type and mall_models.PRODUCT_SHELVE_TYPE_OFF == shelve_type or is_deleted == True: #下架商品,清除redis中{wo:38}_{co:*}_products的数据项,批量更新 # 或者删除商品时 categories_products_key = '{wo:%s}_{co:*}_products' % ( webapp_owner_id) cache_util.rem_set_member_by_patten_from_redis( categories_products_key, product_id) # 微众商城代码 # if weshop_sync > 0: # #微众商城的缓存也要一起更新 duhao 20151120 # cache_util.rem_set_member_by_patten_from_redis('{wo:216}_{co:*}_products',product_id) elif before_instance.shelve_type != shelve_type and mall_models.PRODUCT_SHELVE_TYPE_ON == shelve_type: # 微众商城代码 # elif (before_instance.shelve_type != shelve_type or webapp_owner_id == 216) and mall_models.PRODUCT_SHELVE_TYPE_ON == shelve_type: #上架商品,确定该商品原来是否有category category_has_products = mall_models.CategoryHasProduct.objects.filter( product_id=product_id) if category_has_products: for category_has_pro in category_has_products: categories_products_key = '{wo:%s}_{co:%s}_products' % ( webapp_owner_id, category_has_pro.category.id) cache_util.add_set_to_redis( categories_products_key, category_has_pro.product_id) categories_products_key = '{wo:%s}_{co:0}_products' % ( webapp_owner_id) cache_util.delete_cache(categories_products_key) #todo zhaolei # cache_util.add_set_to_redis(categories_products_key,product_id) update_product_cache(webapp_owner_id, product_id) elif instance and sender == mall_models.CategoryHasProduct: # 商品分组中更新商品时 if isinstance(instance, mall_models.CategoryHasProduct): catory_id = instance.category_id product_id = instance.product_id else: catory_id = instance[0].category_id product_id = instance[0].product_id product = mall_models.Product.objects.filter(id=product_id).get() # 非待售添加 if product.shelve_type != mall_models.PRODUCT_SHELVE_TYPE_OFF: # 微众商城代码 # if product.shelve_type != mall_models.PRODUCT_SHELVE_TYPE_OFF and (webapp_owner_id != 216 or \ # (webapp_owner_id == 216 and product.weshop_status != mall_models.PRODUCT_SHELVE_TYPE_OFF)): #如果是微众商城过来的请求,则需要验证微众商城里的在售状态 duhao 20151120 # if product.shelve_type != mall_models.PRODUCT_SHELVE_TYPE_OFF: categories_products_key = '{wo:%s}_{co:%s}_products' % ( webapp_owner_id, catory_id) # todo zhaolei 会存在多次删除的情况 cache_util.delete_cache(categories_products_key) # todo zhaolei 清除对应的varnish缓存,需要重构 # if settings.EN_VARNISH: # if not settings.DEBUG: # url = 'http://%s/termite/workbench/jqm/preview/?woid=%s&module=mall&model=products&action=list&category_id=%s' % \ # (settings.DOMAIN, webapp_owner_id, catory_id) # request = urllib2.Request(url) # request.get_method = lambda: 'PURGE' # urllib2.urlopen(request) elif instance and sender == mall_models.ProductCategory: categories_key = '{wo:%s}_categories' % (webapp_owner_id) cache_util.delete_cache(categories_key) elif instance and sender == mall_models.ProductModel: if isinstance(instance, mall_models.ProductModel): #暂不处理 pass else: for ins in instance: product_id = ins.product_id key = 'webapp_product_detail_{wo:%s}_{pid:%s}' % ( webapp_owner_id, product_id) cache_util.delete_pattern(key) # pattern_categories = "webapp_products_categories_{wo:%s}" % webapp_owner_id # cache_util.delete_pattern(pattern_categories) update_product_list_cache(webapp_owner_id) key_termite_page = 'termite_webapp_page_%s_*' % webapp_owner_id cache_util.delete_pattern(key_termite_page) try: from termite2.tasks import purge_webapp_page_from_varnish_cache purge_webapp_page_from_varnish_cache.delay(webapp_owner_id) except: pass
def get_webapp_products_new(webapp_owner_user_profile, is_access_weizoom_mall, category_id): # 商城下分类对应的商品id categories_products_key = '{wo:%s}_{co:%s}_products' % ( webapp_owner_user_profile.user_id, category_id) category_pros_data = cache_util.get_set_from_redis(categories_products_key) if len(category_pros_data) == 0: # product.id,display_index productid_display_list = [] products = get_webapp_product_ids_from_db_new( webapp_owner_user_profile, is_access_weizoom_mall, category_id) if products: for product in products: productid_display_list.append(product.id) product.promotion = None # 添加promation cache_util.add_set_to_redis(categories_products_key, *productid_display_list) cache_products = products else: cache_products = get_webapp_products_detail( webapp_owner_user_profile.user_id, category_pros_data) products = get_webapp_product_ids_from_db_new( webapp_owner_user_profile, is_access_weizoom_mall, category_id) if products: if len(cache_products) == len(products): pass else: productid_display_list = [] if products: for product in products: productid_display_list.append(product.id) product.promotion = None # 添加promation cache_util.delete_cache(categories_products_key) cache_util.add_set_to_redis(categories_products_key, *productid_display_list) cache_products = products if category_id == 0: category = mall_models.ProductCategory() category.name = u'全部' else: categories_data = get_webapp_categories_from_cache( webapp_owner_user_profile) id2category_name = dict([(c["id"], c["name"]) for c in categories_data]) if category_id in id2category_name: category = mall_models.ProductCategory() category.id = category_id category.name = id2category_name[category_id] else: category = mall_models.ProductCategory() category.is_deleted = True category.name = u'已删除分类' mall_models.Product.fill_display_price(cache_products) # 分组商品排序,有商品分类和无商品分类的排序规则不同 if category_id != 0: products_id = map(lambda p: p.id, cache_products) chp_list = mall_models.CategoryHasProduct.objects.filter( category_id=category_id, product_id__in=products_id) product_id2chp = dict(map(lambda chp: (chp.product_id, chp), chp_list)) for product in cache_products: product.display_index = product_id2chp[product.id].display_index product.join_category_time = product_id2chp[product.id].created_at # 1.shelve_type, 2.display_index, 3.id products_is_0 = filter(lambda p: p.display_index == 0, cache_products) products_not_0 = filter(lambda p: p.display_index != 0, cache_products) products_is_0 = sorted(products_is_0, key=attrgetter('join_category_time', 'id'), reverse=True) products_not_0 = sorted(products_not_0, key=attrgetter('display_index')) cache_products = products_not_0 + products_is_0 else: products_is_0 = filter(lambda p: p.display_index == 0, cache_products) products_not_0 = filter(lambda p: p.display_index != 0, cache_products) products_is_0 = sorted(products_is_0, key=attrgetter('id'), reverse=True) products_not_0 = sorted(products_not_0, key=attrgetter('display_index')) cache_products = products_not_0 + products_is_0 return category, cache_products
def api_post(request): """ 响应POST """ data = request_util.get_fields_to_be_save(request) data['qrcode'] = json.loads(request.POST['qrcode']) pagestore = pagestore_manager.get_pagestore('mongo') project_id = request.GET.get('project_id', 0) _, app_name, real_project_id = project_id.split(':') page = pagestore.get_page(real_project_id, 1) update_data = {} update_fields = set([ 'name', 'start_time', 'end_time', 'timing', 'red_packet_type', 'random_total_money', 'random_packets_number', 'regular_packets_number', 'regular_per_money', 'money_range', 'reply_content', 'material_image', 'share_description', 'qrcode' ]) for key, value in data.items(): if key in update_fields: if key == "timing": value = bool2Bool(value) update_data['set__' + key] = value print key, value, "$$$$$$$$$" #清除红包类型选项下不需要再保存的两个字段 if key == "red_packet_type" and value == "random": update_data[ 'set__random_random_number_list'] = create_pop_list( data['random_total_money'], data['random_packets_number']) update_data['set__red_packet_remain_amount'] = int( data['random_packets_number']) update_data['set__regular_packets_number'] = '' update_data['set__regular_per_money'] = '' page['component']['components'][0]['model'][ 'regular_packets_number'] = '' page['component']['components'][0]['model'][ 'regular_per_money'] = '' if key == "red_packet_type" and value == "regular": update_data['set__red_packet_remain_amount'] = int( data['regular_packets_number']) update_data['set__random_total_money'] = '' update_data['set__random_packets_number'] = '' page['component']['components'][0]['model'][ 'random_total_money'] = '' page['component']['components'][0]['model'][ 'random_packets_number'] = '' app_models.RedPacket.objects(id=request.POST['id']).update( **update_data) #并发问题临时解决方案 ---start # app_models.RedPacketAmountControl.objects(belong_to=request.POST['id']).delete() # control_data = {} # control_data['belong_to'] = data['id'] # control_data['red_packet_amount'] = 0 # control = app_models.RedPacketAmountControl(**control_data) # control.save() # default_data = {} # default_data['belong_to'] = data['id'] # default_data['red_packet_amount'] = int(red_packet_amount) + 1 # default = app_models.RedPacketAmountControl(**default_data) # default.save() #并发问题临时解决方案 ---end pagestore.save_page(real_project_id, 1, page['component']) #更新后清除缓存 cache_key = 'apps_red_packet_%s_html' % request.POST['id'] delete_cache(cache_key) response = create_response(200) return response.get_response()
def delete_webapp_page_cache(webapp_owner_id, project_id): key = 'termite_webapp_page_%s_%s' % (webapp_owner_id, project_id) cache_util.delete_cache(key) purge_webapp_page_from_varnish_cache.delay(webapp_owner_id, project_id)
def delete_component_auth_cache(appid): today = datetime.today() date_str = datetime.today().strftime('%Y-%m-%d') key = 'component_{appid:%s}' % appid cache_util.delete_cache(key)
def update_unship_order_count(webapp_id): key = 'webapp_unread_order_count_{wa:%s}' % webapp_id cache_util.delete_cache(key)