models.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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. from apps.order.models import ProgressDetails
  10. class UploadManager(models.Manager):
  11. # def employee_addnew(self, employee, type, file):
  12. # return self._addnew(employee.tenant, employee.user, type, file)
  13. #
  14. # def customer_addnew(self, customer, type, file):
  15. # return self._addnew(customer.tenant, customer.user, type, file)
  16. def _addnew(self, store, progress_details, user, file):
  17. width = None
  18. height = None
  19. path = UploadManager.calculatePath(store.id)
  20. filename = UploadFile(file, path, user.id)
  21. fullname = "%s%s" % (settings.MEDIA_ROOT, filename)
  22. size = os.path.getsize(fullname)
  23. try:
  24. img = Image.open(fullname)
  25. width, height = img.size
  26. # 缩略图压缩宽或高最大200
  27. if width > 1440:
  28. img = img.resize((1440, int((height / width) * 1440)), Image.ANTIALIAS)
  29. img.save(fullname)
  30. width, height = img.size
  31. except:
  32. pass
  33. instance = self.model(
  34. store=store,
  35. progress_details=progress_details,
  36. user=user,
  37. name=file.name,
  38. picture="%s%s" % (settings.MEDIA_URL, filename),
  39. width=width,
  40. height=height,
  41. file_size="%.2f" % (float(size)/1024),
  42. )
  43. instance.save()
  44. return instance
  45. def _addnew_voice(self, store, user, file, time):
  46. path = UploadManager.calculatePath(store.id)
  47. filename = UploadFile(file, path, user.id)
  48. fullname = "%s%s" % (settings.MEDIA_ROOT, filename)
  49. size = os.path.getsize(fullname)
  50. instance = self.model(
  51. store=store,
  52. user=user,
  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(store_id):
  64. return order_image + str(store_id) + '/'
  65. order_image = "order/"
  66. class Upload(models.Model):
  67. store = models.ForeignKey(Store, verbose_name=u'门店', on_delete=models.PROTECT)
  68. progress_details = models.ForeignKey(ProgressDetails, verbose_name=u'进度明细', on_delete=models.PROTECT)
  69. user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'操作人', on_delete=models.PROTECT)
  70. name = models.CharField(verbose_name=u'图片名', max_length=250)
  71. picture = models.CharField(verbose_name=u'图片路径', max_length=250)
  72. width = models.IntegerField(verbose_name=u"图片宽度", blank=True, default=0)
  73. height = models.IntegerField(verbose_name=u"图片高度", blank=True, default=0)
  74. create_time = models.DateTimeField(verbose_name=u'上传时间', auto_now_add=True, editable=False)
  75. file_size = models.FloatField(verbose_name="文件大小",blank=True, default=0)
  76. objects = UploadManager()
  77. class Meta:
  78. db_table = 'system_upload'
  79. verbose_name = u'文件上传'
  80. ordering = ['-create_time']
  81. index_together = (
  82. 'create_time',
  83. )
  84. default_permissions = ()
  85. def del_images(self):
  86. picture = self.picture
  87. self.delete()
  88. DeleteFile(picture)
  89. def get_path(self):
  90. return '%s%s' % (settings.SERVER_DOMAIN, self.picture)