models.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. # coding=utf-8
  2. import os
  3. from PIL import Image
  4. from django.conf import settings
  5. from django.db import models
  6. from utils.file_operation import UploadFile, DeleteFile
  7. from django.utils import timezone
  8. from apps.agent.models import Store
  9. class UploadManager(models.Manager):
  10. # def employee_addnew(self, employee, type, file):
  11. # return self._addnew(employee.tenant, employee.user, type, file)
  12. #
  13. # def customer_addnew(self, customer, type, file):
  14. # return self._addnew(customer.tenant, customer.user, type, file)
  15. def _addnew(self, tenant, user, type, file):
  16. width = None
  17. height = None
  18. path = UploadManager.calculatePath(type, tenant.id)
  19. filename = UploadFile(file, path, user.id)
  20. fullname = "%s%s" % (settings.MEDIA_ROOT, filename)
  21. size = os.path.getsize(fullname)
  22. try:
  23. img = Image.open(fullname)
  24. width, height = img.size
  25. # 缩略图压缩宽或高最大200
  26. if width > 1440:
  27. img = img.resize((1440, int((height / width) * 1440)), Image.ANTIALIAS)
  28. img.save(fullname)
  29. width, height = img.size
  30. except:
  31. pass
  32. instance = self.model(
  33. tenant=tenant,
  34. user=user,
  35. type=type,
  36. name=file.name,
  37. picture="%s%s" % (settings.MEDIA_URL, filename),
  38. width=width,
  39. height=height,
  40. file_size="%.2f" % (float(size)/1024),
  41. )
  42. instance.save()
  43. return instance
  44. def _addnew_voice(self, tenant, user, type, file, time):
  45. path = UploadManager.calculatePath(type, tenant.id)
  46. filename = UploadFile(file, path, user.id)
  47. fullname = "%s%s" % (settings.MEDIA_ROOT, filename)
  48. size = os.path.getsize(fullname)
  49. instance = self.model(
  50. tenant=tenant,
  51. user=user,
  52. type=type,
  53. name=file.name,
  54. picture="%s%s" % (settings.MEDIA_URL, filename),
  55. width=200,
  56. height=200,
  57. file_size="%.2f" % (float(size)/1024),
  58. voice_time=time,
  59. )
  60. instance.save()
  61. return instance
  62. @staticmethod
  63. def calculatePath(type, tenant_id):
  64. path_map = {
  65. Upload.REPAIR_IMAGE: repair_image,
  66. Upload.INSPECTION_IMAGE: inspection_image,
  67. Upload.COMPANY_IMAGE: company_image,
  68. Upload.REPAIR_VOICE:repair_image,
  69. }
  70. return path_map[type] + str(tenant_id) + '/'
  71. repair_image = "repair/"
  72. inspection_image = "inspection/"
  73. company_image = "company/"
  74. class Upload(models.Model):
  75. REPAIR_IMAGE = 1
  76. INSPECTION_IMAGE = 2
  77. COMPANY_IMAGE = 3
  78. REPAIR_VOICE = 4
  79. TYPE_CHOICES = (
  80. (REPAIR_IMAGE, u'报修图片'),
  81. (INSPECTION_IMAGE, u'巡检图片'),
  82. (COMPANY_IMAGE, u'营业执照图片'),
  83. (REPAIR_VOICE, u'报修语音')
  84. )
  85. store = models.ForeignKey(Store, verbose_name=u'门店', on_delete=models.PROTECT)
  86. user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'操作人', on_delete=models.PROTECT)
  87. type = models.PositiveSmallIntegerField(choices=TYPE_CHOICES, verbose_name=u"类型")
  88. name = models.CharField(verbose_name=u'图片名', max_length=250)
  89. picture = models.CharField(verbose_name=u'图片路径', max_length=250)
  90. width = models.IntegerField(verbose_name=u"图片宽度", blank=True, default=0)
  91. height = models.IntegerField(verbose_name=u"图片高度", blank=True, default=0)
  92. create_time = models.DateTimeField(verbose_name=u'上传时间', auto_now_add=True, editable=False)
  93. file_size = models.FloatField(verbose_name="文件大小",blank=True, default=0)
  94. objects = UploadManager()
  95. class Meta:
  96. db_table = 'system_upload'
  97. verbose_name = u'文件上传'
  98. ordering = ['-create_time']
  99. index_together = (
  100. 'type',
  101. 'create_time',
  102. )
  103. default_permissions = ()
  104. def del_images(self):
  105. picture = self.picture
  106. self.delete()
  107. DeleteFile(picture)
  108. def get_path(self):
  109. return '%s%s' % (settings.SERVER_DOMAIN, self.picture)