models.py 3.2 KB

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