models.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. from django.db import models
  2. from bound.models import BoundBatchModel,BoundDetailModel
  3. # Create your models here.
  4. # 主表:托盘数据
  5. class ContainerListModel(models.Model):
  6. CONTAINER_STATUS = (
  7. (0, '空置'),
  8. (1, '入库中'),
  9. (2, '在库'),
  10. (3, '出库中'),
  11. (4, '已出库')
  12. )
  13. container_code = models.IntegerField( verbose_name='托盘编号')
  14. current_location = models.CharField(max_length=50, verbose_name='当前库位', default='N/A')
  15. target_location = models.CharField(max_length=50, verbose_name='目标库位', default='N/A')
  16. status = models.IntegerField(choices=CONTAINER_STATUS, default=0, verbose_name='托盘状态')
  17. last_operation = models.DateTimeField(auto_now=True, verbose_name='最后操作时间')
  18. class Meta:
  19. db_table = 'container_list'
  20. verbose_name = 'ContainerList'
  21. verbose_name_plural = "ContainerList"
  22. ordering = ['-container_code']
  23. # 明细表:托盘详细数据记录当前组盘的 批次 数量 使用托盘码和状态来获取、托盘上的物料信息,
  24. class ContainerDetailModel(models.Model):
  25. BATCH_STATUS=(
  26. (0, '空盘'),
  27. (1, '组盘'),
  28. (2, '已出库')
  29. )
  30. month = models.IntegerField(verbose_name='月份')
  31. container = models.ForeignKey(ContainerListModel, on_delete=models.CASCADE, related_name='details')
  32. batch = models.ForeignKey(BoundBatchModel, on_delete=models.CASCADE, verbose_name='批次')
  33. goods_code = models.CharField(max_length=50, verbose_name='货品编码')
  34. goods_desc = models.CharField(max_length=100, verbose_name='货品描述')
  35. goods_qty = models.IntegerField(verbose_name='数量')
  36. goods_weight = models.DecimalField(max_digits=10, decimal_places=3, verbose_name='重量')
  37. status = models.IntegerField(choices=BATCH_STATUS,default=0, verbose_name='状态') # 0: 未使用 1: 使用中 2: 已出库
  38. creater = models.CharField(max_length=50, verbose_name='创建人')
  39. create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
  40. update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
  41. is_delete = models.BooleanField(default=False, verbose_name='是否删除')
  42. class Meta:
  43. db_table = 'container_detail'
  44. verbose_name = 'ContainerDetail'
  45. verbose_name_plural = "ContainerDetail"
  46. ordering = ['-id']
  47. # 明细表:操作记录 记录每次出入库的记录,使用goods来进行盘点,使用托盘码来进行托盘的操作记录
  48. class ContainerOperationModel(models.Model):
  49. OPERATION_TYPES = (
  50. ('container','组盘'),
  51. ('inbound', '入库'),
  52. ('outbound', '出库'),
  53. ('adjust', '调整'),
  54. )
  55. month = models.IntegerField(verbose_name='月份')
  56. container = models.ForeignKey(ContainerListModel, on_delete=models.CASCADE, related_name='operations')
  57. operation_type = models.CharField(max_length=20, choices=OPERATION_TYPES, verbose_name='操作类型')
  58. batch = models.ForeignKey(BoundBatchModel, on_delete=models.CASCADE, verbose_name='批次')
  59. goods_code = models.CharField(max_length=50, verbose_name='货品编码')
  60. goods_desc = models.CharField(max_length=100, verbose_name='货品描述')
  61. goods_qty = models.IntegerField(verbose_name='数量')
  62. goods_weight = models.DecimalField(max_digits=10, decimal_places=3, verbose_name='重量')
  63. operator = models.CharField(max_length=50, verbose_name='操作人')
  64. timestamp = models.DateTimeField(auto_now_add=True, verbose_name='操作时间')
  65. from_location = models.CharField(max_length=50, null=True, verbose_name='原库位')
  66. to_location = models.CharField(max_length=50, null=True, verbose_name='目标库位')
  67. memo = models.TextField(null=True, verbose_name='备注')
  68. is_delete = models.BooleanField(default=False, verbose_name='是否删除')
  69. class Meta:
  70. db_table = 'container_operation'
  71. verbose_name = 'ContainerOperation'
  72. verbose_name_plural = "ContainerOperation"
  73. ordering = ['-timestamp']
  74. class ContainerWCSModel(models.Model):
  75. taskid = models.CharField(max_length=50, verbose_name='任务ID')
  76. month = models.IntegerField(verbose_name='月份')
  77. tasktype = models.CharField(max_length=50, verbose_name='任务类型')
  78. tasknumber = models.IntegerField(verbose_name='任务号')
  79. container = models.CharField(max_length=50, verbose_name='托盘号')
  80. current_location = models.CharField(max_length=50, verbose_name='当前库位')
  81. target_location = models.CharField(max_length=50, verbose_name='目标库位')
  82. message = models.TextField(verbose_name='消息')
  83. status = models.IntegerField(verbose_name='状态')
  84. create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
  85. is_delete = models.BooleanField(default=False, verbose_name='是否删除')
  86. class Meta:
  87. db_table = 'container_wcs'
  88. verbose_name = 'ContainerWCS'
  89. verbose_name_plural = "ContainerWCS"
  90. ordering = ['-create_time']
  91. def to_dict(self):
  92. return {
  93. 'container': self.container,
  94. 'current_location': self.current_location,
  95. 'month' : self.month,
  96. 'target_location': self.target_location,
  97. 'tasktype': self.tasktype,
  98. 'taskid': self.taskid,
  99. 'taskNumber': self.tasknumber,
  100. 'message': self.message,
  101. 'container': self.container,
  102. 'status': self.status
  103. }
  104. # 这里的批次详情是主入库申请单下的子批次
  105. class TaskModel(models.Model):
  106. task_wcs = models.ForeignKey(ContainerWCSModel, on_delete=models.CASCADE, related_name='tasks')
  107. batch_detail = models.ForeignKey(BoundDetailModel, on_delete=models.CASCADE, verbose_name='批次详情')
  108. container_detail = models.ForeignKey(ContainerDetailModel, on_delete=models.CASCADE, verbose_name='托盘明细')
  109. class Meta:
  110. db_table = 'task'
  111. verbose_name = 'Task'
  112. verbose_name_plural = "Task"
  113. ordering = ['-id']