models.py 4.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import random
  2. import string
  3. from django.utils import timezone
  4. from django.conf import settings
  5. from django.db import models
  6. from apps.tenant.models import Tenant
  7. from apps.tenant.option.models import Option
  8. from apps.upload.models import Upload
  9. from apps.tenant.repair_order.models import RepairOrder
  10. from utils.exceptions import CustomError
  11. from apps.tenant.device.models import DeviceModel
  12. class InspectionOrder(models.Model):
  13. NOT_REPAIR = 1
  14. HAS_REPAIR = 2
  15. REPAIR = 3
  16. STATUS_CHOICES = (
  17. (NOT_REPAIR, '巡检正常'),
  18. (HAS_REPAIR, '已报修'),
  19. (REPAIR, '已修复'),
  20. )
  21. device = models.ForeignKey(DeviceModel, verbose_name='设备', on_delete=models.PROTECT, blank=True, null=True)
  22. device_name = models.CharField(max_length=100, verbose_name='设备名称')
  23. device_address = models.CharField(max_length=200, verbose_name='设备地址')
  24. no = models.CharField(max_length=50, verbose_name=u'编号', blank=True)
  25. status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name=u'状态', default=NOT_REPAIR)
  26. tenant = models.ForeignKey(Tenant, verbose_name=u'企业', on_delete=models.PROTECT, blank=True)
  27. user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u"巡检人员", on_delete=models.PROTECT,
  28. editable=False, related_name='inspection_order_user')
  29. problem = models.CharField(max_length=500, verbose_name=u'巡检问题')
  30. create_time = models.DateTimeField(verbose_name=u'巡检时间', auto_now_add=True)
  31. images = models.ManyToManyField(Upload, verbose_name=u'图片', blank=True)
  32. repair_type = models.ForeignKey(Option, verbose_name=u'报修类型', on_delete=models.PROTECT, null=True)
  33. repair_order = models.ForeignKey(RepairOrder, verbose_name=u'转报修', on_delete=models.PROTECT, null=True)
  34. turn_repair_time = models.DateTimeField(verbose_name=u'转报修时间', null=True)
  35. turn_repair_user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u"转报修人", on_delete=models.PROTECT,
  36. null=True, related_name='turn_repair_user')
  37. class Meta:
  38. db_table = 'inspection_order'
  39. verbose_name = '巡检工单'
  40. ordering = ['-create_time']
  41. index_together = (
  42. 'status',
  43. 'create_time',
  44. )
  45. default_permissions = ()
  46. permissions = [
  47. ('browse_inspection_order', u'查看'),
  48. ('add_inspection_order', u'添加'),
  49. ('delete_inspection_order', u'删除'),
  50. ('dturn_repair_inspection_order', u'转报修'),
  51. ]
  52. @staticmethod
  53. def get_instance_by_id(id, tenant):
  54. try:
  55. id = int(id)
  56. except:
  57. raise CustomError('无效的inspection_order_id')
  58. instance = InspectionOrder.objects.filter(pk=id, tenant=tenant).first()
  59. if not instance:
  60. raise CustomError('未找到对应的巡检工单实例')
  61. return instance
  62. def get_no(self):
  63. now = timezone.now()
  64. no = '%s%d-%s' % ('XJ', self.tenant.id, now.strftime('%Y%m%d%H%M%S'))
  65. return no
  66. def turn_repair(self, user):
  67. # 巡检转报修
  68. repair_order = RepairOrder.objects.create(tenant=self.tenant, device=self.device,
  69. fault_des=self.problem, repair_type=self.repair_type, user=self.user,
  70. tel=self.user.employee.tel,name=self.user.employee.name,
  71. order_type=RepairOrder.INSPECTION_ORDER)
  72. repair_order.no = repair_order.get_no()
  73. images = self.images.all()
  74. for image in images:
  75. repair_order.images.add(image.id)
  76. repair_order.save()
  77. if repair_order.device:
  78. repair_order.device.repair_count += 1
  79. repair_order.device.status = DeviceModel.BAD
  80. repair_order.device.save()
  81. self.status = InspectionOrder.HAS_REPAIR
  82. self.repair_order = repair_order
  83. self.turn_repair_time = timezone.now()
  84. self.turn_repair_user = user
  85. self.save()
  86. return repair_order