def serve(request, args): event_specific_data = args['event_specific_data'] order_order_id = event_specific_data['order_order_id'] #记录日志 mall_api.record_operation_log(order_order_id, u'客户', u'支付') mall_api.record_status_log(order_order_id, u'客户', mall_models.ORDER_STATUS_NOT, mall_models.ORDER_STATUS_PAYED_NOT_SHIP) webapp_id = request.user_profile.webapp_id webapp_user = request.webapp_user order = mall_models.Order.objects.get(order_id=order_order_id) #支付完成之后的webapp_user操作 try: webapp_user.complete_payment(request, order) except: alert_message = u"post_pay_order service: 调用webapp_user.complete_payment失败, cause:\n{}".format(unicode_full_stack()) if hasattr(request, 'user'): watchdog_alert(alert_message, type='WEB', user_id=str(request.user.id)) else: watchdog_alert(alert_message, type='WEB') #发送模板消息 try: template_message_api.send_order_template_message(order.webapp_id, order.id, 0) except: alert_message = u"post_pay_order service: 发送模板消息失败, cause:\n{}".format(unicode_full_stack()) watchdog_warning(alert_message) #todo zhaolei 需要优化,这样写不容易排错 from webapp.handlers import event_handler_util from utils import json_util event_data = {'order':json.dumps(order.to_dict(),cls=json_util.DateEncoder)} event_handler_util.handle(event_data, 'send_order_email')
def create_stopped_app(request): appid = request.POST.get('id') try: app = CustomizedApp.objects.get(id=appid) except: response = create_response(500) response.errMsg = u'获取app失败,请稍后重试' response.innerErrMsg = unicode_full_stack() return response.get_response() #TODO 进行操作记录记录? if app.status in [ CustomizedappStatus.RUNNING, CustomizedappStatus.WITHERROR ]: try: manager.stop_app(app) except: alert_msg = u"停止app:{}失败,cause:\n{}".format( app.__unicode__(), unicode_full_stack()) watchdog_alert(alert_msg, app.owner.id) response = create_response(200) response.data.status = app.status return response.get_response()
def weizoom_card_expense_record(request, card_id): cards = WeizoomCard.objects.filter(id=card_id) if cards.count() == 0: watchdog_alert(u'微众卡的消费记录,不存在该微众卡号:{}'.format(card_num), user_id=request.user_profile.user_id) raise Http404(u"不存在该微众卡号") else: card = cards[0] expense_records = WeizoomCardHasOrder.objects.filter( card_id=card_id).order_by('created_at') for expense_record in expense_records: try: expense_record.true_order_id = get_order_id( expense_record.order_id) except: expense_record.true_order_id = None c = RequestContext( request, { 'first_nav_name': MARKET_TOOLS_NAV, 'second_navs': export.get_second_navs(request), 'second_nav_name': SECOND_NAV_NAME, 'card': card, 'expense_records': expense_records }) return render_to_response( 'weizoom_card/editor/weizoom_card_num_record.html', c)
def get_link_targets(request): if (request is None) or (not request.user.is_authenticated()): return [] try: app_name = __parse_request_appname(request) except: alert_msg = u"解析获取可链接目标的目标app名称失败,request:\n{}\ncause:\n{}".format( request.GET, unicode_full_stack()) watchdog_alert(alert_msg, request.user.id) return __build_empty_link_targets_response() try: app = CustomizedApp.objects.get(name=app_name) except: response = create_response(400) response.errMsg = u"不存在该定制APP" return response.get_response() app_module = manager.get_app_module(app) try: return app_module.export.get_link_targets(request) except: raise alert_msg = u"调用APP:{}的get_link_targets失败,cause:\n{}".format( app.__unicode__(), unicode_full_stack()) watchdog_alert(alert_msg, request.user.id) return __build_empty_link_targets_response()
def send_chargeback_message(phones, content, send_time='', sent_type=1, post_fix_number='', account=ACCOUNT, password=PASSWORD, user_id=USER_ID): params = urllib.urlencode({ 'UserID': user_id, 'Account': account, 'Password': password, 'Phones': phones, 'Content': content.encode("utf-8"), 'SendTime': send_time, 'SendType': sent_type, 'PostFixNumber': post_fix_number }) try: response = urllib.urlopen(URL % params) soup = BeautifulSoup(response.read()) if soup.retcode.text == SUCESS: return True else: return False except: notify_msg = u"发送退单信息失败\n{}".format(unicode_full_stack()) watchdog_alert(notify_msg) return False
def create_installed_app(request): appid = request.POST.get('id') try: app = CustomizedApp.objects.get(id=appid) except: response = create_response(500) response.errMsg = u'获取app失败,请稍后重试' response.innerErrMsg = unicode_full_stack() return response.get_response() #暂时关闭gevent的异步操作,直接修改数据库状态 #TODO 进行操作记录记录? # if app.status in [CustomizedappStatus.INACTIVE, CustomizedappStatus.UNINSTALLED]: # try: # manager.install_app_asyc(app) # except: # alert_msg = u"安装app:{}失败,cause:\n{}".format( # app.__unicode__(), # unicode_full_stack() # ) # watchdog_alert(alert_msg, app.owner.id) if app.status in [ CustomizedappStatus.INACTIVE, CustomizedappStatus.UNINSTALLED ]: try: manager.start_app(app) except: alert_msg = u"安装(直接启动)app:{}失败,cause:\n{}".format( app.__unicode__(), unicode_full_stack()) watchdog_alert(alert_msg, app.owner.id) response = create_response(200) response.data.status = app.status return response.get_response()
def appinfo(self): try: return CustomizedAppInfo.objects.get(customized_app_id=self.id) except: err_msg = u"获取appid为{}的应用信息失败,cause:\n{}".format( self.id, unicode_full_stack()) watchdog_alert(err_msg, self.owner.id) return None
def all_valid_apps_list(): try: return list( CustomizedApp.objects.exclude( status=CustomizedappStatus.INACTIVE)) except: err_msg = u"获取有效的app列表失败,cause:\n{}".format(unicode_full_stack()) watchdog_alert(err_msg) return []
def update_app(request, customized_app_info_id): all_users = [] for user in User.objects.all(): if user.username == 'manager': continue if user.username == 'admin': user.username = u'全部' all_users.append(user) try: customized_app_info = CustomizedAppInfo.objects.get( id=customized_app_info_id) except: notify_msg = u"定制化app修改时异常, customized_app_info_id={}, cause:\n{}".format( customized_app_info_id, unicode_full_stack()) watchdog_alert(notify_msg) raise Http404('不存在该app') if request.POST: app_name = request.POST.get('app_name', '') owner_id = int(request.POST.get('user_id', 0)) customized_app = customized_app_info.customized_app if owner_id == 0: owner_id = customized_app.owner_id customized_app.owner_id = owner_id customized_app.name = app_name customized_app.updated_time = datetime.now() customized_app.status = CustomizedappStatus.INACTIVE customized_app.save() customized_app_info.app_name = app_name customized_app_info.owner_id = owner_id customized_app_info.customized_app = customized_app customized_app_info.remark_name = request.POST.get('remark_name', '') customized_app_info.principal = request.POST.get('principal', '') customized_app_info.repository_path = request.POST.get( 'repository_path', '') customized_app_info.repository_username = request.POST.get( 'repository_username', '') customized_app_info.repository_passwd = request.POST.get( 'repository_passwd', '') customized_app_info.save() return HttpResponseRedirect('/apps/') else: c = RequestContext( request, { 'first_nav_name': FIRST_NAV_NAME, 'second_navs': None, 'all_users': all_users, 'customized_app_info': customized_app_info, 'is_super_user': request.user.is_manager }) return render_to_response('apps/edit_app.html', c)
def fill_order(self): is_time_card = False card = {} #基本信息 if self.cntrt_int02 == TIME_CARD: is_time_card = True terminat_date = '' try: terminat_date = self.cntrt_date01.strftime('%Y-%m-%d') except: pass order_time = '' try: order_time = self.contract_start_date.strftime('%Y-%m-%d') except: pass card['order_id'] = self.contract_id card['order_time'] = order_time card['valid_time'] = terminat_date card['study_times'] = int(self.cntrt_dec03) card['person_times'] = int(self.cntrt_dec08) card['surplus_times'] = int(self.cntrt_dec09) card['is_time_card'] = is_time_card card['status'] = self.get_order_status() card['contract_name'] = self.get_product_name() #已签到课程信息 course_info = {} try: course_info = self.get_course_info() card['course_info'] = course_info except: alert_message = u'根据订单:{} 获取已签到课程信息时失败.\n couse: {}'.format( self.contract_id, unicode_full_stack()) watchdog_alert(alert_message) #获取发票信息 bill_status = UNKNOW_BILL bill_info = u'未知' try: bill_status, bill_info, bill_company = self.get_bill_info() except: alert_message = u'根据订单:{} 获取发票信息时失败.\n couse: {}'.format( self.contract_id, unicode_full_stack()) watchdog_alert(alert_message) card['bill_status'] = bill_status card['bill_info'] = bill_info card['bill_company'] = bill_company return is_time_card, card
def install_all_apps(self): if self.has_installed: return all_apps = CustomizedApp.all_running_apps_list() failed_ops = self.__install_all_apps(all_apps) if len(failed_ops) > 0: notify_msges = [failed_op.unicode() for failed_op in failed_ops] watchdog_alert(u'\n\n'.join(notify_msges)) self.has_installed = True
def _is_valid_request(self): if self.verified_result_soup is None: return False else: try: return int(self.verified_result_soup.retcode.text) == 0 except: notify_message = u"解析财付通确认结果失败, 确认结果:{}, cause:\n"\ .format(self.verified_result_soup, unicode_full_stack()) watchdog_alert(notify_message) return False
def all_running_apps_list(user=None): try: if user is None: return list( CustomizedApp.objects.filter( status=CustomizedappStatus.RUNNING)) else: return list( CustomizedApp.objects.filter( owner_id=user.id, status=CustomizedappStatus.RUNNING)) except: err_msg = u"获取正在运行的app列表失败,cause:\n{}".format(unicode_full_stack()) watchdog_alert(err_msg) return []
def show_error_page(request, **param_dict): #先进行异常信息的记录 try: from django.views import debug settings.DEBUG = True debug_response = debug.technical_500_response(request, *sys.exc_info()) settings.DEBUG = False debug_html = debug_response.content if hasattr(request, 'user'): watchdog_alert(debug_html, type='WEB', user_id=str(request.user.id)) else: watchdog_alert(debug_html, type='WEB') except: alert_message = u"记录异常信息失败, cause:\n{}".format(unicode_full_stack()) if hasattr(request, 'user'): watchdog_alert(alert_message, type='WEB', user_id=str(request.user.id)) else: watchdog_alert(alert_message, type='WEB') is_mobile = ('/jqm/preview/' in request.META['PATH_INFO']) or ('/termite2/webapp_page/' in request.META['PATH_INFO']) if 'HTTP_REFERER' in request.META: c = RequestContext(request, { 'back_url': request.META['HTTP_REFERER'] }) else: c = RequestContext(request, { 'back_url': '#' }) if is_mobile: return render(request, 'mobile_error_info.html', c, status=404) else: return render(request, 'error_info.html', c, status=404)
def list_order(request): company = request.GET.get('company') #得到会员信息 member = None if hasattr(request, 'member'): member = request.member else: member_id = request.GET.get('member_id', '') try: member = member_module_api.get_member_by_id(int(member_id)) except: response = create_response(500) response.errmsg = u'获取不到会员信息' return response.get_response() binding_member, member_info = get_binding_info_by_member(member) if not crm_apis.is_leader(member_info.phone_number, company): response = create_response(200) data = {} data['is_leader'] = False data['info'] = u'您尚未购买盛景课程<br/>或者您不是企业决策人' response.data = data return response.get_response() order_status = request.GET.get('status', ORDER_USING) #订单状态 #获取人次卡 cards = None try: cards = crm_apis.get_time_person_cards(member_info.phone_number, company, int(order_status)) except: alert_message = u'获取时间卡信息失败.\n couse: {}'.format(unicode_full_stack()) watchdog_alert(alert_message) has_orders = True if cards == None or len(cards) == 0: has_orders = False response = create_response(200) data = {} data['has_orders'] = has_orders data['is_leader'] = True data['cards'] = cards response.data = data return response.get_response()
def get_str_value_by_string_ids(str_ids): try: if str_ids != '' and str_ids: cache = get_cache('mem') ship_address = cache.get(str_ids) if not ship_address: area_args = str_ids.split('_') ship_address = '' curren_area = '' for index, area in enumerate(area_args): if index == 0: try: curren_area = Province.objects.get(id=int(area)) except ValueError: pass elif index == 1: try: curren_area = City.objects.get(id=int(area)) except ValueError: pass elif index == 2: try: curren_area = District.objects.get(id=int(area)) except ValueError: pass if isinstance(curren_area, str): pass else: ship_address = ship_address + ' ' + curren_area.name cache.set(str_ids, ship_address) return u'{}'.format(ship_address.strip()) else: return None except: from core.exceptionutil import unicode_full_stack from watchdog.utils import watchdog_fatal, watchdog_error, watchdog_alert msg = { 'traceback': unicode_full_stack(), 'str_ids': str_ids, 'hint': u'解析收货地址异常' } watchdog_alert(msg) return ''
def show_news_detail(request, newsid): try: news = News.objects.get(id=newsid) #如果是weshop或weizoomjx帐号,title,Description的替换 if news.user.username in NEWS_TEXT_USERNAME: member_username = request.member.username_hexstr.decode( 'hex').decode('utf-8') re_str = ur'\{\{u\}\}|{{u}}' news.title = re.sub(re_str, member_username, news.title) news.text = re.sub(re_str, member_username, news.text) news.summary = re.sub(re_str, member_username, news.summary) # news.title = news.title.replace('{{username}}', member_username) # news.text = news.text.replace('{{username}}', member_username) # 为了支持是否显示点击关注的区域 settings = OperationSettings.get_settings_for_user(news.user.id) request.operation_settings = settings request.user_profile = news.user.get_profile() request.member = get_member(request) nick_name = get_mp_nick_name(news.user.id) #设置分享图片为默认头像 set_share_img(request) except: alert_message = u"显示图文详情异常,素材id:{}, cause:\n{}".format( newsid, unicode_full_stack()) watchdog_alert(alert_message) raise Http404(u'不存在该素材') c = RequestContext( request, { 'page_title': news.title, 'detail': news.text, 'pic_url': news.pic_url, 'is_show_cover_pic': news.is_show_cover_pic, 'date': news.created_at.strftime('%Y-%m-%d'), 'nick_name': nick_name if nick_name else '', 'hide_non_member_cover': True, 'share_page_desc': news.summary, 'share_img_url': news.pic_url }) return render_to_response('material/detail.html', c)
def delete_app(request): appid = request.POST.get('id') try: app = CustomizedApp.objects.get(id=appid) except: response = create_response(500) response.errMsg = u'获取app失败,请稍后重试' response.innerErrMsg = unicode_full_stack() return response.get_response() #TODO 进行操作记录记录? try: app.delete() except: alert_msg = u"删除app:{}失败,cause:\n{}".format(app.__unicode__(), unicode_full_stack()) watchdog_alert(alert_msg, app.owner.id) response = create_response(200) return response.get_response()
def create_weizoom_card_log(owner_id, order_id, event_type, card_id, money, member_integral_log_id=0): try: if money != 0: if event_type in TYPE_ZERO: money = 0 WeizoomCardHasOrder.objects.create( owner_id=owner_id, card_id=card_id, order_id=order_id, money=money, event_type=event_type, member_integral_log_id=member_integral_log_id) except: notify_msg = u"创建微众卡日志失败, card_id={},order_id={},event_type={}, money={}, cause:\n{}".format( card_id, order_id, event_type, money, unicode_full_stack()) watchdog_alert(notify_msg)
def __executor(self, executor_id): while self.is_running: try: deferred = self.deferred_queue.get(timeout=1) print('Worker %s got task %s' % (executor_id, deferred)) if deferred.is_canceled(): print(deferred, ' is canceled') continue self.run_task(deferred) gevent.sleep(0) except Empty: print('waiting for task!') self.pending_tasks_event.clear() self.pending_tasks_event.wait() except TaskExecuteCallbackError: alert_msg = u"执行任务:{}失败, cause:\n{}".format( deferred.task.__str__(), unicode_full_stack() ) watchdog_alert(alert_msg)
def api_put(request): """ 添加禁用商品 """ owner = request.manager products = request.POST.get('products', '') start_date = request.POST.get('start_date', '2000-01-01') end_date = request.POST.get('end_date', '2000-01-01') is_permanant_active = int(request.POST.get('is_permanant_active', '0')) product_ids = [] for product in json.loads(products): product_ids.append(product['id']) try: for product_id in product_ids: promotion_models.ForbiddenCouponProduct.objects.create( owner=owner, product_id=product_id, start_date=start_date, end_date=end_date, is_permanant_active=is_permanant_active) response = create_response(200) try: webapp_owner_id = owner.id key = 'forbidden_coupon_products_%s' % webapp_owner_id utils.cache_util.delete_cache(key) logging.info( u"'del forbidden_coupon_products cache,key:{}".format(key)) except: watchdog_alert( u'del forbidden_coupon_products cache error:{}'.format( unicode_full_stack())) except: response = create_response(500) return response.get_response()
def process_request(self, request): if settings.ENABLE_BACKUP_REPORT: watchdog_alert('nginx fcgi cluster down!!!') return None
def record_message(args): sender_username = args['sender_username'] sender_nickname = args['sender_nickname'] sender_fake_id = args['sender_fake_id'] sender_icon = args['sender_icon'] receiver_username = args['receiver_username'] receiver_nickname = args['receiver_nickname'] receiver_fake_id = args['receiver_fake_id'] receiver_icon = args['receiver_icon'] content = args['content'] mpuser = args['mpuser'] mode = args['mode'] weixin_created_at = args['weixin_created_at'] #add by bert at 20.0 msg_id = args['msg_id'] pic_url = args['pic_url'] message_type = args['message_type'] media_id = args['media_id'] is_un_read_msg = args['is_un_read_msg'] session = None sender = WeixinUser.objects.get(username=sender_username) if sender_fake_id and sender.fake_id != sender_fake_id: sender.fake_id = sender_fake_id sender.save() # try: # print sender_username,']]]]]]]]]]', WeixinUser.objects.get(username=sender_username).id # sender = WeixinUser.objects.get(username=sender_username) # if sender_fake_id and sender.fake_id != sender_fake_id: # sender.fake_id = sender_fake_id # sender.save() # print '1-----2' # print '1-----3' # except: # print '2-----1' # sender = WeixinUser.objects.create( # username = sender_username, # fake_id = sender_fake_id, # nick_name = byte_to_hex(sender_nickname), # weixin_user_icon = sender_icon # ) try: receiver = WeixinUser.objects.get(username=receiver_username) if receiver_fake_id and receiver.fake_id != receiver_fake_id: receiver.fake_id = receiver_fake_id receiver.save() except: receiver = WeixinUser.objects.create( username=receiver_username, fake_id=receiver_fake_id, nick_name=byte_to_hex(receiver_nickname), weixin_user_icon=receiver_icon) should_increase_realtime_unread_count = False should_increase_new_message_count = False try: session = Session.objects.get(weixin_user=sender, mpuser=mpuser) should_increase_realtime_unread_count = True should_increase_new_message_count = True session.latest_contact_content = content session.latest_contact_created_at = datetime.today() session.is_latest_contact_by_viper = False if is_un_read_msg: session.unread_count += 1 session.retry_count = 0 session.weixin_created_at = weixin_created_at #更新微信用户session信息, added by slzhu session.member_user = sender session.member_latest_content = content session.member_latest_created_at = weixin_created_at session.is_replied = False session.save() #通知客户端 #TODO 使用其它通知方式? # try: # notifyclient.send_notify_to_all_user( # "WEIXIN_MESSAGE", # u'[%s]: 用户%s发来新消息: %s' % (mpuser.owner.username, session.weixin_user_id, content), # 'http://%s/message/' % settings.DOMAIN # ) # except: # pass except: watchdog_alert(u'更新消息会话失败,改为创建,cause:\n{}'.format( unicode_full_stack())) if is_un_read_msg: unread_count = 1 else: unread_count = 0 if mode == 'test' or mode == 'develop': session = Session.objects.create( mpuser=mpuser, weixin_user=sender, weixin_created_at=weixin_created_at, latest_contact_content=content, unread_count=unread_count, is_show=False, member_user_username=sender.username, member_latest_content=content, member_latest_created_at=weixin_created_at, is_replied=False) request = HttpRequest() request.GET['id'] = session.id enable_session(request) else: #正式环境中,新会话为显示状态, 同时直接进行通知 session = Session.objects.create( mpuser=mpuser, weixin_user=sender, weixin_created_at=weixin_created_at, latest_contact_content=content, unread_count=unread_count, is_show=True, member_user_username=sender.username, member_latest_content=content, member_latest_created_at=weixin_created_at, is_replied=False) #增加未读数 # count = Message.objects.filter(session_id=session.id, is_reply=False).count() # RealTimeInfo.objects.filter(mpuser=mpuser).update(unread_count = F('unread_count') + count) # #增加首页显示的new message count # increase_new_message_count(user=mpuser.owner, count=session.unread_count) #通知客户端 #TODO 改用其他通知方式? # try: # notifyclient.send_notify_to_all_user( # "WEIXIN_MESSAGE", # u'[%s]: 用户%s发来新消息: %s' % (mpuser.owner.username, session.weixin_user_id, content), # 'http://%s/message/' % settings.DOMAIN # ) # except: # pass # try: # realtime_info = RealTimeInfo.objects.get(mpuser=mpuser) # if should_increase_realtime_unread_count: # RealTimeInfo.objects.filter(mpuser=mpuser).update(unread_count=F('unread_count')+1) # if should_increase_new_message_count: # increase_new_message_count(user=mpuser.owner, count=1) # except: # RealTimeInfo.objects.create(mpuser=mpuser, unread_count=0) if message_type == WeixinMessageTypes.VOICE: is_updated = False else: is_updated = True receive_message = Message.objects.create( mpuser=mpuser, session=session, from_weixin_user_username=sender_username, to_weixin_user_username=receiver_username, content=content, is_reply=False, #add by bert at 20 msg_id=msg_id, pic_url=pic_url, media_id=media_id, is_updated=is_updated, message_type=message_type) if pic_url: content = pic_url #added by slzhu Session.objects.filter(id=session.id).update( message_id=receive_message.id, latest_contact_content=content, member_message_id=receive_message.id) if message_type == WeixinMessageTypes.VOICE: try: queue = '/queue/jms.com.wintim.service.weapp.weixin_upload_audio' response = JsonResponse() response.message_id = receive_message.id message = response.get_json() send_message(queue, message) except: notify_message = u"record_message Session cause:\n{}".format( unicode_full_stack()) watchdog_warning(notify_message) return { 'mpuser': mpuser, 'session': session, 'receive_message': receive_message, 'receiver_username': receiver_username, 'sender_username': sender_username }
def get_time_person_cards(phone_number, company, status=0): try: if not CRMAccount.has_account(phone_number, company): return None #1、根据公司信息和手机号获取到account_id account_ids = get_account_attr_ids(phone_number) crm_accounts = CRMAccount.objects.using( crm_settings.SHENGJINGD_DB).filter( Q(account_mobile_phone__icontains=phone_number) | Q(account_id__in=account_ids), account_name=company) if crm_accounts.count() == 0: fatal_message = u'账单(获取时间卡、人次卡信息),未获取到CRMAccount phone:{}; account_ids: {}, company:{}'.format( phone_number, account_ids, company) watchdog_warning(fatal_message, user_id=211) return None crm_account = crm_accounts[0] #2、根据account_id获取到所有的订单 crm_contracts = None if CRMContract.exist_office_order(crm_account.account_id): crm_contracts = CRMContract.objects.using( crm_settings.SHENGJINGD_DB).filter( account_id=crm_account.account_id, contract_type=OFFICIAL_CONTRACT, close_flag=0, is_deleted=0) else: fatal_message = u'账单(获取时间卡、人次卡信息),未获取到账单 phone:{}; account_ids: {}, company:{}'.format( phone_number, account_ids, company) watchdog_warning(fatal_message, user_id=211) return None #对订单信息进行封装 cards = [] for crm_contract in crm_contracts: try: #对状态进行判断 is_time_card = False card = {} if status == ALL_STATUS: is_time_card, card = crm_contract.fill_order() else: order_status = crm_contract.get_order_status() if order_status == status: is_time_card, card = crm_contract.fill_order() else: continue cards.append(card) except: alert_message = u'封装时间卡:contract_id {} 信息失败.\n couse: {}'.format( crm_contract.contract_id, unicode_full_stack()) watchdog_alert(alert_message, user_id=211) print 'cards size: ', len(cards) if len(cards) > 0: cards = sorted( cards, cmp=lambda x, y: cmp(y['order_time'], x['order_time'])) return cards except: raise ValueError, u'获取时间卡信息失败.\n couse: {}'.format( unicode_full_stack())
def process_request(self, request): #added by duhao if is_product_stocks_request(request): return None # 如果是支付、WAPI等场景,则跳过 if is_pay_request(request) or is_wapi_request(request): return None #根据module判断访问的页面类型 module = request.GET.get('module', None) if not module: request.page_type = 'home_page' else: if 'market_tool:' in module: request.page_type = 'market_tool' elif 'apps' in module: request.page_type = 'apps' else: request.page_type = 'webapp' #支付宝在同步和异步回调属于webapp add by bert if request.get_full_path().find( 'mall/pay_notify_result/get') != -1 or request.get_full_path( ).find('mall/pay_result/get') != -1: request.page_type = 'webapp' #处理user profile webapp_owner_id = -1 request.user_profile = None if request.user.is_authenticated( ) and not request.user.is_superuser and not request.is_access_webapp and not request.is_access_webapp_api: if hasattr(request, 'manager'): request.user_profile = request.manager.get_profile() # else: # # request.user_profile = request.user.get_profile() # request.user_profile = request.webapp_owner_info.user_profile webapp_owner_id = request.user_profile.user_id else: webapp_owner_id = request.REQUEST.get('woid', -1) if webapp_owner_id == -1: webapp_owner_id = request.REQUEST.get('webapp_owner_id', -1) if webapp_owner_id == -1: #TODO: 消除project_id project_id = request.REQUEST.get('project_id', None) if project_id: if 'market_tool:' in project_id: _, market_tool, webapp_owner_id = project_id.split(':') elif 'apps' in project_id: _, app, webapp_owner_id = project_id.split(':') elif 'fake:wepage' in project_id: _, wepage, webapp_owner_id, _, page_id = project_id.split( ':') elif 'sign' in project_id: _, app_name, related_page_id = project_id.split(':') project = Sign.objects.get( related_page_id=related_page_id) webapp_owner_id = project.owner_id else: project = Project.objects.get(id=project_id) webapp_owner_id = project.owner_id if (webapp_owner_id == -1) and request.get_full_path().find( 'message/material/news_detail/mshow/') > -1: try: query_list = request.get_full_path().split('/') user = News.objects.get( id=query_list[query_list.index('mshow') + 1]).material.owner webapp_owner_id = user.id except: pass if (webapp_owner_id == -1) and request.get_full_path().find( 'mall/pay_notify_result/get') != -1 or request.get_full_path( ).find('mall/pay_result/get') != -1: try: request_url_split_list = request.get_full_path().split('/') webapp_owner_id = int( request_url_split_list[request_url_split_list.index('get') + 1]) except: error_msg = u"UserProfileMiddleware: get webapp_owner_id from pay url failed. {}: cause:\n{}"\ .format(int(request_url_split_list[request_url_split_list.index('get')+1]),unicode_full_stack()) watchdog_info(error_msg) #记录webapp_owner_id request.webapp_owner_id = webapp_owner_id if request.webapp_owner_id: request.webapp_owner_id = int(request.webapp_owner_id) #根据webapp_owner_id获取user_profile以及webapp_owner_info if request.webapp_owner_id != -1: if request.is_access_webapp or request.is_access_pay or request.is_access_paynotify_callback: try: request.webapp_owner_info = webapp_owner_cache.get_webapp_owner_info( webapp_owner_id) request.mall_data = webapp_cache.get_webapp_mall_data( webapp_owner_id) request.webapp_owner_info.mall_data = request.mall_data if not request.user_profile: request.user_profile = request.webapp_owner_info.user_profile except: if settings.DEBUG: raise else: alert_message = u"获取缓存信息失败, cause:\n{}".format( unicode_full_stack()) watchdog_alert(alert_message, type='WEB') request.webapp_owner_info = None request.mall_data = None request.user_profile = UserProfile.objects.get( user_id=webapp_owner_id) else: request.user_profile = UserProfile.objects.get( user_id=webapp_owner_id) request.webapp_owner_info = None else: request.webapp_owner_info = None request.user_profile = None #add by duhao 20150519 from account.account_util import get_token_for_logined_user request.user_token = get_token_for_logined_user(request.user) assert hasattr(request, 'user_token') assert hasattr(request, 'webapp_owner_id') assert hasattr(request, 'user_profile') assert hasattr(request, 'webapp_owner_info') return None
def api_post(request): """ 同步模版 从微信获取商家在公众号中配置的所有模板消息 """ mpuser_access_token = _get_mpuser_access_token(request.manager) response = create_response(500) print mpuser_access_token if mpuser_access_token: user_id = request.manager.id try: weixin_api = get_weixin_api(mpuser_access_token) curr_template_info = { t.template_id: t for t in weixin_models.UserHasTemplateMessages.objects. filter(owner_id=user_id) } result = weixin_api.get_all_template_messages(True) template_list = result['template_list'] need_create_list = [] #商家新配置的模版 changed_template_info = [ ] #有变化的模版,包括新增的和先删除后新增同一个模版后,template_id发生变化的模版 deleted_template_info = [] #商家删除的模版 all_sync_ids = [] #商家配置的所有模版id need_delete_ids = [] #商家删除的模版id for t in template_list: template_id = t['template_id'] all_sync_ids.append(template_id) title = t['title'] if template_id not in curr_template_info.keys(): need_create_list.append( weixin_models.UserHasTemplateMessages( owner_id=user_id, template_id=template_id, title=title, primary_industry=t['primary_industry'], deputy_industry=t['deputy_industry'], content=t['content'], example=t['example'])) changed_template_info.append({ 'template_id': template_id, 'title': title, 'status': False, 'first': '', 'remark': '', 'industry_name': '%s-%s' % (t['primary_industry'], t['deputy_industry']), 'example': t['example'] }) for t_id in curr_template_info.keys( ): #如果当前库里的template_id不在获取的信息之中,那么就是商家已删除的 if t_id not in all_sync_ids: template = curr_template_info[t_id] need_delete_ids.append(t_id) deleted_template_info.append({ 'template_id': template.template_id, 'title': template.title }) #删除模板库中的记录 weixin_models.UserHasTemplateMessages.objects.filter( owner_id=user_id, template_id__in=need_delete_ids).delete() #同时删除已配置过的模版 weixin_models.UserTemplateSettings.objects.filter( owner_id=user_id, template_id__in=need_delete_ids).delete() #新增模版 weixin_models.UserHasTemplateMessages.objects.bulk_create( need_create_list) #提醒用户这些模版已经发生变化 response = create_response(200) response.data = { 'changed': changed_template_info, 'deleted': deleted_template_info } return response.get_response() except: notify_message = u"获取模板列表异常, cause:\n{}".format( unicode_full_stack()) watchdog_alert(notify_message) response.errMsg = u"获取模板列表异常" response.innerErrMsg = notify_message return response.get_response() else: response.errMsg = u'微信接口异常' return response.get_response()