# -*- coding: utf-8 -*- #!/usr/bin/env python import datetime import logging from mongoengine import StringField, DateTimeField, ObjectIdField, BooleanField, IntField, ListField from mongoengine.fields import DictField from apilib.monetary import RMB from apps.web.core.db import Searchable, MonetaryField from apps.web.common.models import UserSearchable logger = logging.getLogger(__name__) class SuperManager(UserSearchable): brandName = StringField(verbose_name = '品牌名称', default = '') logo = StringField(verbose_name = '品牌LOGO', default = '') search_fields = ('username', 'nickname', 'remarks') meta = { 'collection': 'super_manager', 'db_alias': 'default' } def to_dict(self): rv = super(SuperManager, self).to_dict() rv.update({'brandName': self.brandName, 'logo': self.logo}) class WebLog(Searchable): title = StringField() content = StringField() superManagerId = ObjectIdField() createdTime = DateTimeField(default=datetime.datetime.now) search_fields = ('title', 'content') meta = {'collection': 'weblogs', 'db_alias': 'default'} def __repr__(self): return (u'' % (self.title,)).encode('utf-8') def to_dict(self): return { 'id': str(self.id), 'title': self.title, 'content': self.content, 'createdTime': self.createdTime } class SuperManagerRefundRecords(Searchable): refundType = StringField(verbose_name='退款类型 =: (simCard|others)', default='others') money = MonetaryField(verbose_name='充值', default=RMB('0.00')) refundDetail = DictField(verbose_name = '附带参数', default = {}) description = StringField(verbose_name='退款描述', default='') dateTimeAdded = DateTimeField(default=datetime.datetime.now) search_fields = ('refundType') meta = {'collection': 'super_manager_refund_records'} @classmethod def create_refund_records(cls, refundType, money, refundDetail, description): try: cls(refundType=refundType, money=money, refundDetail=refundDetail, description=description).save() except Exception, e: logger.exception(e) class UserComplaintRecord(Searchable): mchid = StringField(verbose_name=u'商户号', default='1510834731') complaint_id = StringField(verbose_name=u'投诉单号') complaint_detail = StringField(verbose_name=u'投诉详情', default='', max_length=300) complaint_state = StringField(verbose_name=u'投诉单状态(PENGING / PROCESSING / PROCESSED)', default='PENDING') payer_phone = StringField(verbose_name=u'投诉人联系方式', default='') payer_openid = StringField(verbose_name=u'投诉人openId', default='') complaint_full_refunded = BooleanField(verbose_name=u'是否已经退款', default=False) incoming_user_response = BooleanField(verbose_name=u'是否有未处理留言', default=False) user_complaint_times = IntField(verbose_name=u'用户投诉次数') complaint_order_info = ListField(verbose_name=u'投诉单号详情', default=[]) dateTimeAdded = DateTimeField(verbose_name=u'投诉时间', default=datetime.datetime.now) meta = {'collection': 'user_complaint_record'} search_fields = ('mchid', 'wxOrderNo', 'orderNo', 'complaint_id') @classmethod def create_user_complaint_record(cls, dataList): if dataList == []: return else: for cs in dataList: templateData = { 'complaint_id': '', 'complaint_detail': '', 'complaint_state:': '', 'payer_phone:': '', 'payer_openid': '', 'complaint_full_refunded:': False, 'incoming_user_response:': False, 'user_complaint_times:': 1, 'complaint_order_info': [] } for k, v in cs.items(): if k == 'complaint_id': templateData.update({'complaint_id': v}) if k == 'complaint_detail': templateData.update({'complaint_detail': v}) if k == 'complaint_state': templateData.update({'complaint_state': v}) if k == 'payer_phone': templateData.update({'payer_phone': v}) if k == 'payer_openid': templateData.update({'payer_openid': v}) if k == 'complaint_full_refunded': templateData.update({'complaint_full_refunded': v}) if k == 'incoming_user_response': templateData.update({'incoming_user_response': v}) if k == 'user_complaint_times': templateData.update({'user_complaint_times': v}) if k == 'complaint_full_refunded': templateData.update({'complaint_full_refunded': v}) if k == 'complaint_order_info': templateData.update({'complaint_order_info': v}) try: cls( complaint_id=templateData['complaint_id'], complaint_detail=templateData['complaint_detail'], complaint_state=templateData['complaint_state'], payer_phone=templateData['payer_phone'], payer_openid=templateData['payer_openid'], complaint_full_refunded=templateData['complaint_full_refunded'], incoming_user_response=templateData['incoming_user_response'], user_complaint_times=templateData['user_complaint_times'], complaint_order_info=templateData['complaint_order_info'] ).save() except Exception as e: logger.exception(e)