0001_initial.py 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. # Generated by Django 4.1.2 on 2025-04-24 23:03
  2. from django.db import migrations, models
  3. import django.db.models.deletion
  4. class Migration(migrations.Migration):
  5. initial = True
  6. dependencies = [
  7. ('container', '0001_initial'),
  8. ]
  9. operations = [
  10. migrations.CreateModel(
  11. name='alloction_pre',
  12. fields=[
  13. ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
  14. ('batch_number', models.CharField(max_length=255, verbose_name='批次号')),
  15. ('layer_pre_type', models.JSONField(default=list, verbose_name='预留方案')),
  16. ('layer_solution_type', models.JSONField(default=list, verbose_name='规划方案')),
  17. ('layer1_task_finish_number', models.IntegerField(default=0, verbose_name='第一层任务完成数')),
  18. ('layer2_task_finish_number', models.IntegerField(default=0, verbose_name='第二层任务完成数')),
  19. ('layer3_task_finish_number', models.IntegerField(default=0, verbose_name='第三层任务完成数')),
  20. ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
  21. ],
  22. options={
  23. 'verbose_name': 'Allocation_pre',
  24. 'verbose_name_plural': 'Allocation_pre',
  25. 'db_table': 'allocation_pre',
  26. 'ordering': ['-id'],
  27. },
  28. ),
  29. migrations.CreateModel(
  30. name='base_location',
  31. fields=[
  32. ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
  33. ('layer1_pressure', models.IntegerField(default=0, verbose_name='第一层工作压力')),
  34. ('layer2_pressure', models.IntegerField(default=0, verbose_name='第二层工作压力')),
  35. ('layer3_pressure', models.IntegerField(default=0, verbose_name='第三层工作压力')),
  36. ],
  37. options={
  38. 'verbose_name': 'Base_location',
  39. 'verbose_name_plural': 'Base_location',
  40. 'db_table': 'base_location',
  41. 'ordering': ['-id'],
  42. },
  43. ),
  44. migrations.CreateModel(
  45. name='LocationContainerLink',
  46. fields=[
  47. ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
  48. ('put_time', models.DateTimeField(auto_now_add=True, verbose_name='上架时间')),
  49. ('operator', models.CharField(max_length=50, verbose_name='操作人')),
  50. ('is_active', models.BooleanField(default=True, verbose_name='是否有效')),
  51. ('container', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='container.containerlistmodel')),
  52. ],
  53. options={
  54. 'verbose_name': 'Location-Container Link',
  55. 'verbose_name_plural': 'Location-Container Link',
  56. 'db_table': 'location_container_link',
  57. 'ordering': ['-id'],
  58. },
  59. ),
  60. migrations.CreateModel(
  61. name='LocationModel',
  62. fields=[
  63. ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
  64. ('warehouse_code', models.CharField(max_length=255, verbose_name='Warehouse code')),
  65. ('warehouse_name', models.CharField(max_length=255, verbose_name='Warehouse Name')),
  66. ('shelf_type', models.CharField(default='storage', max_length=255, verbose_name='Shelf Type')),
  67. ('row', models.IntegerField(verbose_name='Row')),
  68. ('col', models.IntegerField(verbose_name='Column')),
  69. ('layer', models.IntegerField(verbose_name='Layer')),
  70. ('update_time', models.DateTimeField(auto_now=True, null=True, verbose_name='Update Time')),
  71. ('empty_label', models.BooleanField(default=True, verbose_name='Empty Flag')),
  72. ('location_code', models.CharField(max_length=20, unique=True, verbose_name='库位编码')),
  73. ('location_group', models.CharField(max_length=20, verbose_name='库位组')),
  74. ('location_type', models.CharField(choices=[('T5', '5货位'), ('T4', '4货位'), ('S4', '4单货位'), ('T2', '2货位'), ('T1', '散货位'), ('M1', '通道区'), ('E1', '提升机'), ('C1', '输送机'), ('B1', '充电桩')], max_length=3, verbose_name='货位类型')),
  75. ('status', models.CharField(choices=[('available', '可用'), ('occupied', '占用'), ('disabled', '禁用'), ('reserved', '预留'), ('maintenance', '维护中')], default='available', max_length=20, verbose_name='库位状态')),
  76. ('max_capacity', models.PositiveIntegerField(verbose_name='最大容量')),
  77. ('current_quantity', models.PositiveIntegerField(default=0, verbose_name='当前数')),
  78. ('c_number', models.IntegerField(default=1, verbose_name='库位远近排序')),
  79. ('coordinate', models.CharField(max_length=50, verbose_name='三维坐标')),
  80. ('access_priority', models.IntegerField(default=0, help_text='值越大表示越远离主通道,应优先使用', verbose_name='访问优先级')),
  81. ('is_active', models.BooleanField(default=True, verbose_name='是否有效')),
  82. ('current_containers', models.ManyToManyField(through='bin.LocationContainerLink', to='container.containerlistmodel', verbose_name='当前存放托盘')),
  83. ],
  84. options={
  85. 'verbose_name': 'Location',
  86. 'verbose_name_plural': 'Location',
  87. 'db_table': 'location',
  88. 'ordering': ['-id'],
  89. 'unique_together': {('warehouse_code', 'row', 'col', 'layer')},
  90. },
  91. ),
  92. migrations.AddField(
  93. model_name='locationcontainerlink',
  94. name='location',
  95. field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='bin.locationmodel', verbose_name='库位'),
  96. ),
  97. migrations.AddField(
  98. model_name='locationcontainerlink',
  99. name='task_detail',
  100. field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='container.taskmodel'),
  101. ),
  102. migrations.AddField(
  103. model_name='locationcontainerlink',
  104. name='task_wcs',
  105. field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='container.containerwcsmodel'),
  106. ),
  107. migrations.CreateModel(
  108. name='LocationChangeLog',
  109. fields=[
  110. ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
  111. ('operation_type', models.CharField(choices=[('put', '上架'), ('pick', '下架'), ('move_in', '移入'), ('move_out', '移出')], max_length=10, verbose_name='操作类型')),
  112. ('timestamp', models.DateTimeField(auto_now_add=True, verbose_name='操作时间')),
  113. ('container', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='container.containerlistmodel', verbose_name='托盘')),
  114. ('location', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='bin.locationmodel', verbose_name='库位')),
  115. ('related_location', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='related_logs', to='bin.locationmodel', verbose_name='关联库位')),
  116. ('task_detail', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='container.taskmodel', verbose_name='批次详情')),
  117. ('task_wcs', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='container.containerwcsmodel', verbose_name='WCS任务')),
  118. ],
  119. options={
  120. 'verbose_name': 'Location Change Log',
  121. 'verbose_name_plural': 'Location Change Log',
  122. 'db_table': 'location_change_log',
  123. 'ordering': ['-id'],
  124. },
  125. ),
  126. migrations.CreateModel(
  127. name='allocation_history',
  128. fields=[
  129. ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
  130. ('operation_type', models.CharField(max_length=10, verbose_name='操作类型')),
  131. ('timestamp', models.DateTimeField(auto_now_add=True, verbose_name='操作时间')),
  132. ('container', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='container.containerlistmodel', verbose_name='托盘')),
  133. ('location', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='bin.locationmodel', verbose_name='库位')),
  134. ('related_location', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='related_logs_history', to='bin.locationmodel', verbose_name='关联库位')),
  135. ('task_detail', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='container.taskmodel', verbose_name='批次详情')),
  136. ('task_wcs', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='container.containerwcsmodel', verbose_name='WCS任务')),
  137. ],
  138. options={
  139. 'verbose_name': 'Allocation_history',
  140. 'verbose_name_plural': 'Allocation_history',
  141. 'db_table': 'allocation_history',
  142. 'ordering': ['-id'],
  143. },
  144. ),
  145. migrations.CreateModel(
  146. name='LocationGroupModel',
  147. fields=[
  148. ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
  149. ('warehouse_code', models.CharField(max_length=50, verbose_name='仓库编码')),
  150. ('group_name', models.CharField(max_length=50, verbose_name='库位组名称')),
  151. ('group_type', models.CharField(choices=[('T5', '5货位'), ('T4', '4货位'), ('S4', '4单货位'), ('T2', '2货位'), ('T1', '散货位')], max_length=50, verbose_name='库位组类型')),
  152. ('group_code', models.CharField(max_length=50, verbose_name='库位组编码')),
  153. ('layer', models.PositiveIntegerField(verbose_name='层数')),
  154. ('status', models.CharField(choices=[('available', '可用'), ('occupied', '占用'), ('full', '满'), ('disabled', '禁用'), ('reserved', '预留'), ('maintenance', '维护中')], default='available', max_length=20, verbose_name='库位状态')),
  155. ('max_capacity', models.PositiveIntegerField(verbose_name='最大容量')),
  156. ('current_quantity', models.PositiveIntegerField(default=0, verbose_name='当前托盘数')),
  157. ('current_goods_quantity', models.PositiveIntegerField(default=0, verbose_name='当前货物数')),
  158. ('current_batch', models.CharField(default='', max_length=50, verbose_name='当前批次')),
  159. ('current_goods_code', models.CharField(default='', max_length=50, verbose_name='当前货物编码')),
  160. ('access_priority', models.IntegerField(default=0, help_text='值越大表示越远离主通道,应优先使用', verbose_name='访问优先级')),
  161. ('left_priority', models.IntegerField(default=0, help_text='值越大表示越靠左,应优先使用', verbose_name='左侧优先级')),
  162. ('right_priority', models.IntegerField(default=0, help_text='值越大表示越靠右,应优先使用', verbose_name='右侧优先级')),
  163. ('is_active', models.BooleanField(default=True, verbose_name='是否有效')),
  164. ('location_items', models.ManyToManyField(to='bin.locationmodel', verbose_name='库位')),
  165. ],
  166. options={
  167. 'verbose_name': 'Location Group',
  168. 'verbose_name_plural': 'Location Group',
  169. 'db_table': 'location_group',
  170. 'ordering': ['-id'],
  171. 'unique_together': {('warehouse_code', 'group_code')},
  172. },
  173. ),
  174. migrations.AlterUniqueTogether(
  175. name='locationcontainerlink',
  176. unique_together={('location', 'container')},
  177. ),
  178. migrations.CreateModel(
  179. name='DeviceModel',
  180. fields=[
  181. ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
  182. ('device_id', models.CharField(max_length=255, verbose_name='Device ID')),
  183. ('device_name', models.CharField(max_length=255, verbose_name='Device Name')),
  184. ('device_type', models.CharField(max_length=255, verbose_name='Device Type')),
  185. ('ip_address', models.CharField(max_length=255, verbose_name='IP Address')),
  186. ('port', models.IntegerField(verbose_name='Port')),
  187. ('status', models.CharField(max_length=255, verbose_name='Status')),
  188. ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='Create Time')),
  189. ('update_time', models.DateTimeField(auto_now=True, null=True, verbose_name='Update Time')),
  190. ('location', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='bin.locationmodel')),
  191. ],
  192. options={
  193. 'verbose_name': 'Device',
  194. 'verbose_name_plural': 'Device',
  195. 'db_table': 'device',
  196. 'ordering': ['-id'],
  197. 'unique_together': {('location', 'device_id')},
  198. },
  199. ),
  200. ]