models.py 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. # -*- coding: utf-8 -*-
  2. #!/usr/bin/env python
  3. """
  4. web.management.models
  5. ~~~~~~~~~
  6. """
  7. import logging
  8. import datetime
  9. from mongoengine import StringField, IntField, DateTimeField, DictField, BooleanField, ListField, DynamicDocument
  10. from django.conf import settings
  11. from apps.web.core.db import Searchable
  12. from apps.web.common.models import UserSearchable
  13. from apps.web.constant import Const, DEVICE_INCOME_STRATEGY
  14. logger = logging.getLogger('management.models')
  15. class DeviceMigrationHistory(Searchable):
  16. from_device = StringField(verbose_name="被迁移设备logicalCode")
  17. to_device = StringField(verbose_name="迁移目标设备logicalCode")
  18. from_device_raw = StringField(verbose_name="被迁移设备元数据 bson")
  19. to_device_raw = StringField(verbose_name="迁移目标设备元数据 bson")
  20. dateTimeAdded = DateTimeField(default=datetime.datetime.now, verbose_name='生成时间')
  21. meta = {'collection': 'device_migration_histories', 'db_alias': 'logdata'}
  22. class DeviceReplacement(Searchable):
  23. oldLogicalCode = StringField(verbose_name="旧设备编号")
  24. newLogicalCode = StringField(verbose_name="新设备编号")
  25. oldDevice = DictField()
  26. newDevice = DictField()
  27. revokedTime = DateTimeField()
  28. created = DateTimeField(default=datetime.datetime.now)
  29. replaceType = StringField(default = 'replace')
  30. search_fields = ('oldLogicalCode', 'newLogicalCode')
  31. meta = {
  32. 'collection': 'device_replacements',
  33. 'db_alias': 'logdata',
  34. 'ordering': ['-created']
  35. }
  36. def __repr__(self): return '<DeviceReplacement old=%s, new=%s>' % (self.oldLogicalCode, self.newLogicalCode)
  37. def set_revoke_time(self):
  38. return self.update(revokedTime=datetime.datetime.now())
  39. def to_dict(self):
  40. return {
  41. 'id': str(self.id),
  42. 'oldLogicalCode': self.oldLogicalCode,
  43. 'newLogicalCode': self.newLogicalCode,
  44. 'createdTime': self.created
  45. }
  46. class ManagerUpScoreRecord(Searchable):
  47. dealerTel = StringField(verbose_name='经销商电话')
  48. devNo = StringField(verbose_name='设备号')
  49. devTypeName = StringField(verbose_name='设备类型')
  50. logicalCode = StringField(verbose_name='逻辑编码')
  51. coins = IntField(verbose_name="上分数量", default=0)
  52. dealerName = StringField(verbose_name='经销商的名字')
  53. address = StringField(verbose_name='设备所在的地址')
  54. managerId = StringField(verbose_name='管理人员ID')
  55. groupName = StringField(verbose_name = "组名称", default = "")
  56. createdTime = DateTimeField(default=datetime.datetime.now, verbose_name='生成时间')
  57. meta = {'collection': 'manager_up_score_records', 'db_alias': 'logdata'}
  58. def to_dict(self):
  59. return {
  60. 'dealerTel': self.dealerTel,
  61. 'devNo': self.devNo,
  62. 'devTypeName': self.devTypeName,
  63. 'logicalCode': self.logicalCode,
  64. 'coins': self.coins,
  65. 'dealerName': self.dealerName,
  66. 'address': self.address,
  67. 'managerId': self.managerId,
  68. 'groupName': self.groupName,
  69. 'createdTime': self.createdTime
  70. }
  71. class Manager(UserSearchable):
  72. DEFAULT_CONFIG = {'adSwitch': False}
  73. domain = StringField(verbose_name = '所属域名', default = settings.MY_DOMAIN)
  74. # : 定制后台展现
  75. brandName = StringField(verbose_name = "管理后台名称", default = "")
  76. logo = StringField(verbose_name = "管理后台logo路径", default = "")
  77. #: 具备支配属性,旗下代理商和经销商都将
  78. configs = DictField(verbose_name="厂商自主定向配置", default = DEFAULT_CONFIG)
  79. #: 主代理商的ID。每个厂家必须要有一个主代理商
  80. primeAgentId = StringField(verbose_name="主代理商的ID", default="")
  81. adShow = BooleanField(verbose_name=u'是否参与广告', default=True)
  82. features = ListField(verbose_name=u'支持的特性', default=[])
  83. expressAddr = DictField(verbose_name=u'邮递收件地址', default={})
  84. deviceIncomeType = IntField(verbose_name="代理商参与设备分成的策略", default=DEVICE_INCOME_STRATEGY.AGENT_FIRST_LEDGER)
  85. meta = {
  86. 'indexes': [
  87. {
  88. 'fields': ['username', 'domain'], 'unique': True
  89. }
  90. ],
  91. 'collection': 'Manager',
  92. 'db_alias': 'default'
  93. }
  94. search_fields = ('username', 'nickname', 'remarks', 'brandName')
  95. @classmethod
  96. def create_or_get(cls, username, password, **attrs):
  97. manager = cls.objects(username = username, domain = settings.MY_DOMAIN).first()
  98. if manager:
  99. return manager
  100. else:
  101. return cls.create_user(username, password, **attrs)
  102. def set_configs(self, configs):
  103. self.configs.update(configs)
  104. return self.save()
  105. def to_dict(self, shadow = False):
  106. rv = super(Manager, self).to_dict(shadow = shadow)
  107. rv.update({
  108. 'id': str(self.id),
  109. 'adShow': self.adShow,
  110. 'domain': self.domain,
  111. 'logo': self.logo,
  112. 'brandName': self.brandName,
  113. 'featureList': self.feature_list,
  114. 'exchangeAddress':self.expressAddr
  115. })
  116. return rv
  117. @staticmethod
  118. def get_factory_addr(managerId):
  119. obj = Manager.objects.get(id = managerId)
  120. if obj.expressAddr and obj.expressAddr.has_key('name') and obj.expressAddr.has_key('addr') and obj.expressAddr.has_Key('tel'):
  121. return obj.expressAddr
  122. else:
  123. return {'name':Const.DEFAULT_NAME,'addr':Const.DEFAULT_ADDR,'tel':Const.DEFAULT_TELNO}
  124. @property
  125. def deviceIncomeShow(self):
  126. """
  127. 特性控制是否显示
  128. """
  129. return "deviceIncomeShow" in self.features
  130. class ManagementArchive(Searchable):
  131. """
  132. 管理档案
  133. """
  134. reason = StringField()
  135. title = StringField()
  136. content = StringField()
  137. meta = {'collection': 'management_archive', 'db_alias': 'default'}
  138. class DummyManagerData(DynamicDocument):
  139. managerId = StringField(verbose_name = u'managerid')
  140. dataKey = StringField(verbose_name = u'数据键')
  141. value = DictField(verbose_name = u'假数据')
  142. meta = {'collection': 'dummy_manager_data', 'db_alias': 'default'}