|
@@ -1,6 +1,7 @@
|
|
-# Generated by Django 4.1.2 on 2025-04-16 22:09
|
|
|
|
|
|
+# Generated by Django 4.1.2 on 2025-04-24 23:03
|
|
|
|
|
|
from django.db import migrations, models
|
|
from django.db import migrations, models
|
|
|
|
+import django.db.models.deletion
|
|
|
|
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
class Migration(migrations.Migration):
|
|
@@ -8,40 +9,41 @@ class Migration(migrations.Migration):
|
|
initial = True
|
|
initial = True
|
|
|
|
|
|
dependencies = [
|
|
dependencies = [
|
|
|
|
+ ('container', '0001_initial'),
|
|
]
|
|
]
|
|
|
|
|
|
operations = [
|
|
operations = [
|
|
migrations.CreateModel(
|
|
migrations.CreateModel(
|
|
- name='DeviceModel',
|
|
|
|
|
|
+ name='alloction_pre',
|
|
fields=[
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
- ('device_id', models.CharField(max_length=255, verbose_name='Device ID')),
|
|
|
|
- ('device_name', models.CharField(max_length=255, verbose_name='Device Name')),
|
|
|
|
- ('device_type', models.CharField(max_length=255, verbose_name='Device Type')),
|
|
|
|
- ('ip_address', models.CharField(max_length=255, verbose_name='IP Address')),
|
|
|
|
- ('port', models.IntegerField(verbose_name='Port')),
|
|
|
|
- ('status', models.CharField(max_length=255, verbose_name='Status')),
|
|
|
|
- ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='Create Time')),
|
|
|
|
- ('update_time', models.DateTimeField(auto_now=True, null=True, verbose_name='Update Time')),
|
|
|
|
|
|
+ ('batch_number', models.CharField(max_length=255, verbose_name='批次号')),
|
|
|
|
+ ('layer_pre_type', models.JSONField(default=list, verbose_name='预留方案')),
|
|
|
|
+ ('layer_solution_type', models.JSONField(default=list, verbose_name='规划方案')),
|
|
|
|
+ ('layer1_task_finish_number', models.IntegerField(default=0, verbose_name='第一层任务完成数')),
|
|
|
|
+ ('layer2_task_finish_number', models.IntegerField(default=0, verbose_name='第二层任务完成数')),
|
|
|
|
+ ('layer3_task_finish_number', models.IntegerField(default=0, verbose_name='第三层任务完成数')),
|
|
|
|
+ ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
|
],
|
|
],
|
|
options={
|
|
options={
|
|
- 'verbose_name': 'Device',
|
|
|
|
- 'verbose_name_plural': 'Device',
|
|
|
|
- 'db_table': 'device',
|
|
|
|
|
|
+ 'verbose_name': 'Allocation_pre',
|
|
|
|
+ 'verbose_name_plural': 'Allocation_pre',
|
|
|
|
+ 'db_table': 'allocation_pre',
|
|
'ordering': ['-id'],
|
|
'ordering': ['-id'],
|
|
},
|
|
},
|
|
),
|
|
),
|
|
migrations.CreateModel(
|
|
migrations.CreateModel(
|
|
- name='LocationChangeLog',
|
|
|
|
|
|
+ name='base_location',
|
|
fields=[
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
- ('operation_type', models.CharField(choices=[('put', '上架'), ('pick', '下架'), ('move_in', '移入'), ('move_out', '移出')], max_length=10, verbose_name='操作类型')),
|
|
|
|
- ('timestamp', models.DateTimeField(auto_now_add=True, verbose_name='操作时间')),
|
|
|
|
|
|
+ ('layer1_pressure', models.IntegerField(default=0, verbose_name='第一层工作压力')),
|
|
|
|
+ ('layer2_pressure', models.IntegerField(default=0, verbose_name='第二层工作压力')),
|
|
|
|
+ ('layer3_pressure', models.IntegerField(default=0, verbose_name='第三层工作压力')),
|
|
],
|
|
],
|
|
options={
|
|
options={
|
|
- 'verbose_name': 'Location Change Log',
|
|
|
|
- 'verbose_name_plural': 'Location Change Log',
|
|
|
|
- 'db_table': 'location_change_log',
|
|
|
|
|
|
+ 'verbose_name': 'Base_location',
|
|
|
|
+ 'verbose_name_plural': 'Base_location',
|
|
|
|
+ 'db_table': 'base_location',
|
|
'ordering': ['-id'],
|
|
'ordering': ['-id'],
|
|
},
|
|
},
|
|
),
|
|
),
|
|
@@ -52,6 +54,7 @@ class Migration(migrations.Migration):
|
|
('put_time', models.DateTimeField(auto_now_add=True, verbose_name='上架时间')),
|
|
('put_time', models.DateTimeField(auto_now_add=True, verbose_name='上架时间')),
|
|
('operator', models.CharField(max_length=50, verbose_name='操作人')),
|
|
('operator', models.CharField(max_length=50, verbose_name='操作人')),
|
|
('is_active', models.BooleanField(default=True, verbose_name='是否有效')),
|
|
('is_active', models.BooleanField(default=True, verbose_name='是否有效')),
|
|
|
|
+ ('container', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='container.containerlistmodel')),
|
|
],
|
|
],
|
|
options={
|
|
options={
|
|
'verbose_name': 'Location-Container Link',
|
|
'verbose_name': 'Location-Container Link',
|
|
@@ -60,6 +63,91 @@ class Migration(migrations.Migration):
|
|
'ordering': ['-id'],
|
|
'ordering': ['-id'],
|
|
},
|
|
},
|
|
),
|
|
),
|
|
|
|
+ migrations.CreateModel(
|
|
|
|
+ name='LocationModel',
|
|
|
|
+ fields=[
|
|
|
|
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
|
|
+ ('warehouse_code', models.CharField(max_length=255, verbose_name='Warehouse code')),
|
|
|
|
+ ('warehouse_name', models.CharField(max_length=255, verbose_name='Warehouse Name')),
|
|
|
|
+ ('shelf_type', models.CharField(default='storage', max_length=255, verbose_name='Shelf Type')),
|
|
|
|
+ ('row', models.IntegerField(verbose_name='Row')),
|
|
|
|
+ ('col', models.IntegerField(verbose_name='Column')),
|
|
|
|
+ ('layer', models.IntegerField(verbose_name='Layer')),
|
|
|
|
+ ('update_time', models.DateTimeField(auto_now=True, null=True, verbose_name='Update Time')),
|
|
|
|
+ ('empty_label', models.BooleanField(default=True, verbose_name='Empty Flag')),
|
|
|
|
+ ('location_code', models.CharField(max_length=20, unique=True, verbose_name='库位编码')),
|
|
|
|
+ ('location_group', models.CharField(max_length=20, verbose_name='库位组')),
|
|
|
|
+ ('location_type', models.CharField(choices=[('T5', '5货位'), ('T4', '4货位'), ('S4', '4单货位'), ('T2', '2货位'), ('T1', '散货位'), ('M1', '通道区'), ('E1', '提升机'), ('C1', '输送机'), ('B1', '充电桩')], max_length=3, verbose_name='货位类型')),
|
|
|
|
+ ('status', models.CharField(choices=[('available', '可用'), ('occupied', '占用'), ('disabled', '禁用'), ('reserved', '预留'), ('maintenance', '维护中')], default='available', max_length=20, verbose_name='库位状态')),
|
|
|
|
+ ('max_capacity', models.PositiveIntegerField(verbose_name='最大容量')),
|
|
|
|
+ ('current_quantity', models.PositiveIntegerField(default=0, verbose_name='当前数')),
|
|
|
|
+ ('c_number', models.IntegerField(default=1, verbose_name='库位远近排序')),
|
|
|
|
+ ('coordinate', models.CharField(max_length=50, verbose_name='三维坐标')),
|
|
|
|
+ ('access_priority', models.IntegerField(default=0, help_text='值越大表示越远离主通道,应优先使用', verbose_name='访问优先级')),
|
|
|
|
+ ('is_active', models.BooleanField(default=True, verbose_name='是否有效')),
|
|
|
|
+ ('current_containers', models.ManyToManyField(through='bin.LocationContainerLink', to='container.containerlistmodel', verbose_name='当前存放托盘')),
|
|
|
|
+ ],
|
|
|
|
+ options={
|
|
|
|
+ 'verbose_name': 'Location',
|
|
|
|
+ 'verbose_name_plural': 'Location',
|
|
|
|
+ 'db_table': 'location',
|
|
|
|
+ 'ordering': ['-id'],
|
|
|
|
+ 'unique_together': {('warehouse_code', 'row', 'col', 'layer')},
|
|
|
|
+ },
|
|
|
|
+ ),
|
|
|
|
+ migrations.AddField(
|
|
|
|
+ model_name='locationcontainerlink',
|
|
|
|
+ name='location',
|
|
|
|
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='bin.locationmodel', verbose_name='库位'),
|
|
|
|
+ ),
|
|
|
|
+ migrations.AddField(
|
|
|
|
+ model_name='locationcontainerlink',
|
|
|
|
+ name='task_detail',
|
|
|
|
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='container.taskmodel'),
|
|
|
|
+ ),
|
|
|
|
+ migrations.AddField(
|
|
|
|
+ model_name='locationcontainerlink',
|
|
|
|
+ name='task_wcs',
|
|
|
|
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='container.containerwcsmodel'),
|
|
|
|
+ ),
|
|
|
|
+ migrations.CreateModel(
|
|
|
|
+ name='LocationChangeLog',
|
|
|
|
+ fields=[
|
|
|
|
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
|
|
+ ('operation_type', models.CharField(choices=[('put', '上架'), ('pick', '下架'), ('move_in', '移入'), ('move_out', '移出')], max_length=10, verbose_name='操作类型')),
|
|
|
|
+ ('timestamp', models.DateTimeField(auto_now_add=True, verbose_name='操作时间')),
|
|
|
|
+ ('container', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='container.containerlistmodel', verbose_name='托盘')),
|
|
|
|
+ ('location', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='bin.locationmodel', verbose_name='库位')),
|
|
|
|
+ ('related_location', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='related_logs', to='bin.locationmodel', verbose_name='关联库位')),
|
|
|
|
+ ('task_detail', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='container.taskmodel', verbose_name='批次详情')),
|
|
|
|
+ ('task_wcs', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='container.containerwcsmodel', verbose_name='WCS任务')),
|
|
|
|
+ ],
|
|
|
|
+ options={
|
|
|
|
+ 'verbose_name': 'Location Change Log',
|
|
|
|
+ 'verbose_name_plural': 'Location Change Log',
|
|
|
|
+ 'db_table': 'location_change_log',
|
|
|
|
+ 'ordering': ['-id'],
|
|
|
|
+ },
|
|
|
|
+ ),
|
|
|
|
+ migrations.CreateModel(
|
|
|
|
+ name='allocation_history',
|
|
|
|
+ fields=[
|
|
|
|
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
|
|
+ ('operation_type', models.CharField(max_length=10, verbose_name='操作类型')),
|
|
|
|
+ ('timestamp', models.DateTimeField(auto_now_add=True, verbose_name='操作时间')),
|
|
|
|
+ ('container', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='container.containerlistmodel', verbose_name='托盘')),
|
|
|
|
+ ('location', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='bin.locationmodel', verbose_name='库位')),
|
|
|
|
+ ('related_location', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='related_logs_history', to='bin.locationmodel', verbose_name='关联库位')),
|
|
|
|
+ ('task_detail', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='container.taskmodel', verbose_name='批次详情')),
|
|
|
|
+ ('task_wcs', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='container.containerwcsmodel', verbose_name='WCS任务')),
|
|
|
|
+ ],
|
|
|
|
+ options={
|
|
|
|
+ 'verbose_name': 'Allocation_history',
|
|
|
|
+ 'verbose_name_plural': 'Allocation_history',
|
|
|
|
+ 'db_table': 'allocation_history',
|
|
|
|
+ 'ordering': ['-id'],
|
|
|
|
+ },
|
|
|
|
+ ),
|
|
migrations.CreateModel(
|
|
migrations.CreateModel(
|
|
name='LocationGroupModel',
|
|
name='LocationGroupModel',
|
|
fields=[
|
|
fields=[
|
|
@@ -68,48 +156,51 @@ class Migration(migrations.Migration):
|
|
('group_name', models.CharField(max_length=50, verbose_name='库位组名称')),
|
|
('group_name', models.CharField(max_length=50, verbose_name='库位组名称')),
|
|
('group_type', models.CharField(choices=[('T5', '5货位'), ('T4', '4货位'), ('S4', '4单货位'), ('T2', '2货位'), ('T1', '散货位')], max_length=50, verbose_name='库位组类型')),
|
|
('group_type', models.CharField(choices=[('T5', '5货位'), ('T4', '4货位'), ('S4', '4单货位'), ('T2', '2货位'), ('T1', '散货位')], max_length=50, verbose_name='库位组类型')),
|
|
('group_code', models.CharField(max_length=50, verbose_name='库位组编码')),
|
|
('group_code', models.CharField(max_length=50, verbose_name='库位组编码')),
|
|
- ('status', models.CharField(choices=[('available', '可用'), ('occupied', '占用'), ('disabled', '禁用'), ('reserved', '预留'), ('maintenance', '维护中')], default='available', max_length=20, verbose_name='库位状态')),
|
|
|
|
|
|
+ ('layer', models.PositiveIntegerField(verbose_name='层数')),
|
|
|
|
+ ('status', models.CharField(choices=[('available', '可用'), ('occupied', '占用'), ('full', '满'), ('disabled', '禁用'), ('reserved', '预留'), ('maintenance', '维护中')], default='available', max_length=20, verbose_name='库位状态')),
|
|
('max_capacity', models.PositiveIntegerField(verbose_name='最大容量')),
|
|
('max_capacity', models.PositiveIntegerField(verbose_name='最大容量')),
|
|
('current_quantity', models.PositiveIntegerField(default=0, verbose_name='当前托盘数')),
|
|
('current_quantity', models.PositiveIntegerField(default=0, verbose_name='当前托盘数')),
|
|
('current_goods_quantity', models.PositiveIntegerField(default=0, verbose_name='当前货物数')),
|
|
('current_goods_quantity', models.PositiveIntegerField(default=0, verbose_name='当前货物数')),
|
|
('current_batch', models.CharField(default='', max_length=50, verbose_name='当前批次')),
|
|
('current_batch', models.CharField(default='', max_length=50, verbose_name='当前批次')),
|
|
('current_goods_code', models.CharField(default='', max_length=50, verbose_name='当前货物编码')),
|
|
('current_goods_code', models.CharField(default='', max_length=50, verbose_name='当前货物编码')),
|
|
|
|
+ ('access_priority', models.IntegerField(default=0, help_text='值越大表示越远离主通道,应优先使用', verbose_name='访问优先级')),
|
|
|
|
+ ('left_priority', models.IntegerField(default=0, help_text='值越大表示越靠左,应优先使用', verbose_name='左侧优先级')),
|
|
|
|
+ ('right_priority', models.IntegerField(default=0, help_text='值越大表示越靠右,应优先使用', verbose_name='右侧优先级')),
|
|
|
|
+ ('is_active', models.BooleanField(default=True, verbose_name='是否有效')),
|
|
|
|
+ ('location_items', models.ManyToManyField(to='bin.locationmodel', verbose_name='库位')),
|
|
],
|
|
],
|
|
options={
|
|
options={
|
|
'verbose_name': 'Location Group',
|
|
'verbose_name': 'Location Group',
|
|
'verbose_name_plural': 'Location Group',
|
|
'verbose_name_plural': 'Location Group',
|
|
'db_table': 'location_group',
|
|
'db_table': 'location_group',
|
|
'ordering': ['-id'],
|
|
'ordering': ['-id'],
|
|
|
|
+ 'unique_together': {('warehouse_code', 'group_code')},
|
|
},
|
|
},
|
|
),
|
|
),
|
|
|
|
+ migrations.AlterUniqueTogether(
|
|
|
|
+ name='locationcontainerlink',
|
|
|
|
+ unique_together={('location', 'container')},
|
|
|
|
+ ),
|
|
migrations.CreateModel(
|
|
migrations.CreateModel(
|
|
- name='LocationModel',
|
|
|
|
|
|
+ name='DeviceModel',
|
|
fields=[
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
- ('warehouse_code', models.CharField(max_length=255, verbose_name='Warehouse code')),
|
|
|
|
- ('warehouse_name', models.CharField(max_length=255, verbose_name='Warehouse Name')),
|
|
|
|
- ('shelf_type', models.CharField(default='storage', max_length=255, verbose_name='Shelf Type')),
|
|
|
|
- ('row', models.IntegerField(verbose_name='Row')),
|
|
|
|
- ('col', models.IntegerField(verbose_name='Column')),
|
|
|
|
- ('layer', models.IntegerField(verbose_name='Layer')),
|
|
|
|
|
|
+ ('device_id', models.CharField(max_length=255, verbose_name='Device ID')),
|
|
|
|
+ ('device_name', models.CharField(max_length=255, verbose_name='Device Name')),
|
|
|
|
+ ('device_type', models.CharField(max_length=255, verbose_name='Device Type')),
|
|
|
|
+ ('ip_address', models.CharField(max_length=255, verbose_name='IP Address')),
|
|
|
|
+ ('port', models.IntegerField(verbose_name='Port')),
|
|
|
|
+ ('status', models.CharField(max_length=255, verbose_name='Status')),
|
|
|
|
+ ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='Create Time')),
|
|
('update_time', models.DateTimeField(auto_now=True, null=True, verbose_name='Update Time')),
|
|
('update_time', models.DateTimeField(auto_now=True, null=True, verbose_name='Update Time')),
|
|
- ('empty_label', models.BooleanField(default=True, verbose_name='Empty Flag')),
|
|
|
|
- ('location_code', models.CharField(max_length=20, unique=True, verbose_name='库位编码')),
|
|
|
|
- ('location_group', models.CharField(max_length=20, verbose_name='库位组')),
|
|
|
|
- ('location_type', models.CharField(choices=[('T5', '5货位'), ('T4', '4货位'), ('S4', '4单货位'), ('T2', '2货位'), ('T1', '散货位'), ('M1', '通道区'), ('E1', '提升机'), ('C1', '输送机'), ('B1', '充电桩')], max_length=3, verbose_name='货位类型')),
|
|
|
|
- ('status', models.CharField(choices=[('available', '可用'), ('occupied', '占用'), ('disabled', '禁用'), ('reserved', '预留'), ('maintenance', '维护中')], default='available', max_length=20, verbose_name='库位状态')),
|
|
|
|
- ('max_capacity', models.PositiveIntegerField(verbose_name='最大容量')),
|
|
|
|
- ('current_quantity', models.PositiveIntegerField(default=0, verbose_name='当前托盘数')),
|
|
|
|
- ('c_number', models.IntegerField(default=1, verbose_name='库位远近排序')),
|
|
|
|
- ('coordinate', models.CharField(max_length=50, verbose_name='三维坐标')),
|
|
|
|
- ('access_priority', models.IntegerField(default=0, help_text='值越大表示越远离主通道,应优先使用', verbose_name='访问优先级')),
|
|
|
|
- ('is_active', models.BooleanField(default=True, verbose_name='是否有效')),
|
|
|
|
|
|
+ ('location', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='bin.locationmodel')),
|
|
],
|
|
],
|
|
options={
|
|
options={
|
|
- 'verbose_name': 'Location',
|
|
|
|
- 'verbose_name_plural': 'Location',
|
|
|
|
- 'db_table': 'location',
|
|
|
|
|
|
+ 'verbose_name': 'Device',
|
|
|
|
+ 'verbose_name_plural': 'Device',
|
|
|
|
+ 'db_table': 'device',
|
|
'ordering': ['-id'],
|
|
'ordering': ['-id'],
|
|
|
|
+ 'unique_together': {('location', 'device_id')},
|
|
},
|
|
},
|
|
),
|
|
),
|
|
]
|
|
]
|