コード例 #1
0
ファイル: tasks.py プロジェクト: chengdg/weizoom
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')
コード例 #2
0
ファイル: api_views.py プロジェクト: chengdg/weizoom
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()
コード例 #3
0
ファイル: views.py プロジェクト: chengdg/weizoom
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)
コード例 #4
0
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()
コード例 #5
0
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
コード例 #6
0
ファイル: api_views.py プロジェクト: chengdg/weizoom
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()
コード例 #7
0
 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
コード例 #8
0
 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 []
コード例 #9
0
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)
コード例 #10
0
ファイル: models.py プロジェクト: chengdg/weizoom
    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
コード例 #11
0
	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
コード例 #12
0
ファイル: tenpay_notify.py プロジェクト: chengdg/weizoom
	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
コード例 #13
0
 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 []
コード例 #14
0
ファイル: views.py プロジェクト: chengdg/weizoom
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)
コード例 #15
0
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()
コード例 #16
0
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 ''
コード例 #17
0
ファイル: views.py プロジェクト: chengdg/weizoom
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)
コード例 #18
0
ファイル: api_views.py プロジェクト: chengdg/weizoom
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()
コード例 #19
0
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)
コード例 #20
0
ファイル: task_executors.py プロジェクト: chengdg/weizoom
	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)
コード例 #21
0
    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()
コード例 #22
0
ファイル: middleware.py プロジェクト: chengdg/weizoom
	def process_request(self, request):
		if settings.ENABLE_BACKUP_REPORT:
			watchdog_alert('nginx fcgi cluster down!!!')
		return None
コード例 #23
0
ファイル: util.py プロジェクト: chengdg/weizoom
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
    }
コード例 #24
0
ファイル: api_views.py プロジェクト: chengdg/weizoom
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())
コード例 #25
0
ファイル: middleware.py プロジェクト: chengdg/weizoom
    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
コード例 #26
0
 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()