|  | @@ -1,7 +1,6 @@
 | 
	
		
			
				|  |  | -# Generated by Django 4.1.2 on 2025-04-15 19:55
 | 
	
		
			
				|  |  | +# Generated by Django 4.1.2 on 2025-04-16 22:09
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  from django.db import migrations, models
 | 
	
		
			
				|  |  | -import django.db.models.deletion
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  class Migration(migrations.Migration):
 | 
	
	
		
			
				|  | @@ -9,10 +8,43 @@ class Migration(migrations.Migration):
 | 
	
		
			
				|  |  |      initial = True
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      dependencies = [
 | 
	
		
			
				|  |  | -        ('container', '0002_containerwcsmodel_tasknumber'),
 | 
	
		
			
				|  |  |      ]
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      operations = [
 | 
	
		
			
				|  |  | +        migrations.CreateModel(
 | 
	
		
			
				|  |  | +            name='DeviceModel',
 | 
	
		
			
				|  |  | +            fields=[
 | 
	
		
			
				|  |  | +                ('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')),
 | 
	
		
			
				|  |  | +            ],
 | 
	
		
			
				|  |  | +            options={
 | 
	
		
			
				|  |  | +                'verbose_name': 'Device',
 | 
	
		
			
				|  |  | +                'verbose_name_plural': 'Device',
 | 
	
		
			
				|  |  | +                'db_table': 'device',
 | 
	
		
			
				|  |  | +                'ordering': ['-id'],
 | 
	
		
			
				|  |  | +            },
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +        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='操作时间')),
 | 
	
		
			
				|  |  | +            ],
 | 
	
		
			
				|  |  | +            options={
 | 
	
		
			
				|  |  | +                'verbose_name': 'Location Change Log',
 | 
	
		
			
				|  |  | +                'verbose_name_plural': 'Location Change Log',
 | 
	
		
			
				|  |  | +                'db_table': 'location_change_log',
 | 
	
		
			
				|  |  | +                'ordering': ['-id'],
 | 
	
		
			
				|  |  | +            },
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  |          migrations.CreateModel(
 | 
	
		
			
				|  |  |              name='LocationContainerLink',
 | 
	
		
			
				|  |  |              fields=[
 | 
	
	
		
			
				|  | @@ -20,7 +52,6 @@ class Migration(migrations.Migration):
 | 
	
		
			
				|  |  |                  ('put_time', models.DateTimeField(auto_now_add=True, verbose_name='上架时间')),
 | 
	
		
			
				|  |  |                  ('operator', models.CharField(max_length=50, verbose_name='操作人')),
 | 
	
		
			
				|  |  |                  ('is_active', models.BooleanField(default=True, verbose_name='是否有效')),
 | 
	
		
			
				|  |  | -                ('container', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='container.containerlistmodel')),
 | 
	
		
			
				|  |  |              ],
 | 
	
		
			
				|  |  |              options={
 | 
	
		
			
				|  |  |                  'verbose_name': 'Location-Container Link',
 | 
	
	
		
			
				|  | @@ -29,6 +60,28 @@ class Migration(migrations.Migration):
 | 
	
		
			
				|  |  |                  'ordering': ['-id'],
 | 
	
		
			
				|  |  |              },
 | 
	
		
			
				|  |  |          ),
 | 
	
		
			
				|  |  | +        migrations.CreateModel(
 | 
	
		
			
				|  |  | +            name='LocationGroupModel',
 | 
	
		
			
				|  |  | +            fields=[
 | 
	
		
			
				|  |  | +                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 | 
	
		
			
				|  |  | +                ('warehouse_code', 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_code', models.CharField(max_length=50, 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='当前托盘数')),
 | 
	
		
			
				|  |  | +                ('current_goods_quantity', models.PositiveIntegerField(default=0, verbose_name='当前货物数')),
 | 
	
		
			
				|  |  | +                ('current_batch', models.CharField(default='', max_length=50, verbose_name='当前批次')),
 | 
	
		
			
				|  |  | +                ('current_goods_code', models.CharField(default='', max_length=50, verbose_name='当前货物编码')),
 | 
	
		
			
				|  |  | +            ],
 | 
	
		
			
				|  |  | +            options={
 | 
	
		
			
				|  |  | +                'verbose_name': 'Location Group',
 | 
	
		
			
				|  |  | +                'verbose_name_plural': 'Location Group',
 | 
	
		
			
				|  |  | +                'db_table': 'location_group',
 | 
	
		
			
				|  |  | +                'ordering': ['-id'],
 | 
	
		
			
				|  |  | +            },
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  |          migrations.CreateModel(
 | 
	
		
			
				|  |  |              name='LocationModel',
 | 
	
		
			
				|  |  |              fields=[
 | 
	
	
		
			
				|  | @@ -42,69 +95,21 @@ class Migration(migrations.Migration):
 | 
	
		
			
				|  |  |                  ('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_type', models.CharField(choices=[('T5', '5货位'), ('T4', '4货位'), ('T2', '2货位'), ('S1', '散货位'), ('M', '通道区'), ('E', '提升机'), ('C', '输送机')], max_length=3, 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='三维坐标')),
 | 
	
		
			
				|  |  | -                ('current_containers', models.ManyToManyField(through='bin.LocationContainerLink', to='container.containerlistmodel', verbose_name='当前存放托盘')),
 | 
	
		
			
				|  |  | +                ('access_priority', models.IntegerField(default=0, help_text='值越大表示越远离主通道,应优先使用', verbose_name='访问优先级')),
 | 
	
		
			
				|  |  | +                ('is_active', models.BooleanField(default=True, 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'),
 | 
	
		
			
				|  |  | -        ),
 | 
	
		
			
				|  |  | -        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='操作时间')),
 | 
	
		
			
				|  |  | -                ('operator', models.CharField(max_length=50, verbose_name='操作人')),
 | 
	
		
			
				|  |  | -                ('wcs_task_id', models.CharField(max_length=50, null=True, verbose_name='WCS任务ID')),
 | 
	
		
			
				|  |  | -                ('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='关联库位')),
 | 
	
		
			
				|  |  | -            ],
 | 
	
		
			
				|  |  | -            options={
 | 
	
		
			
				|  |  | -                'verbose_name': 'Location Change Log',
 | 
	
		
			
				|  |  | -                'verbose_name_plural': 'Location Change Log',
 | 
	
		
			
				|  |  | -                'db_table': 'location_change_log',
 | 
	
		
			
				|  |  | -                'ordering': ['-id'],
 | 
	
		
			
				|  |  | -            },
 | 
	
		
			
				|  |  | -        ),
 | 
	
		
			
				|  |  | -        migrations.AlterUniqueTogether(
 | 
	
		
			
				|  |  | -            name='locationcontainerlink',
 | 
	
		
			
				|  |  | -            unique_together={('location', 'container')},
 | 
	
		
			
				|  |  | -        ),
 | 
	
		
			
				|  |  | -        migrations.CreateModel(
 | 
	
		
			
				|  |  | -            name='DeviceModel',
 | 
	
		
			
				|  |  | -            fields=[
 | 
	
		
			
				|  |  | -                ('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')),
 | 
	
		
			
				|  |  | -                ('location', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='bin.locationmodel')),
 | 
	
		
			
				|  |  | -            ],
 | 
	
		
			
				|  |  | -            options={
 | 
	
		
			
				|  |  | -                'verbose_name': 'Device',
 | 
	
		
			
				|  |  | -                'verbose_name_plural': 'Device',
 | 
	
		
			
				|  |  | -                'db_table': 'device',
 | 
	
		
			
				|  |  | -                'ordering': ['-id'],
 | 
	
		
			
				|  |  | -                'unique_together': {('device_id',)},
 | 
	
		
			
				|  |  |              },
 | 
	
		
			
				|  |  |          ),
 | 
	
		
			
				|  |  |      ]
 |