Browse Source

出入库升级

flower_mr 1 day ago
parent
commit
31836909f6

+ 17 - 0
bound/migrations/0021_alter_boundlistmodel_options.py

@@ -0,0 +1,17 @@
+# Generated by Django 4.1.2 on 2025-06-12 14:03
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('bound', '0020_rename_goods_actual_qty_boundbatchmodel_goods_reserve_qty'),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name='boundlistmodel',
+            options={'ordering': ['-id'], 'verbose_name': 'Bound List', 'verbose_name_plural': 'Bound List'},
+        ),
+    ]

+ 1 - 1
bound/models.py

@@ -41,7 +41,7 @@ class BoundListModel(models.Model):
         db_table = 'boundlist'
         verbose_name = 'Bound List'
         verbose_name_plural = "Bound List"
-        ordering = ['bound_status','-id']
+        ordering = ['-id']
 
 class BoundBatchModel(models.Model):
 

+ 19 - 8
bound/views.py

@@ -461,15 +461,26 @@ class BoundListViewSet(viewsets.ModelViewSet):
 
     def destroy(self, request, pk):
         qs = self.get_object()
-        if qs.openid != self.request.auth.openid:
-            raise APIException({"detail": "该入库非您所属,禁止删除,您可以进行编辑"})
+        # if qs.openid != self.request.auth.openid:
+        #     raise APIException({"detail": "该入库非您所属,禁止删除,您可以进行编辑"})
+        # else:
+        qs.is_delete = True
+        qs.bound_code =qs.bound_code+'-delete'+str(timezone.now().strftime('%Y%m%d%H%M%S'))
+        qs.save()
+        if qs.bound_type == 'in':
+            BoundDetailModel.objects.filter(bound_list=qs.id).update(is_delete=True)
+            if qs.relate_bill:
+                qs.relate_bill.bound_status = 0
+                qs.relate_bill.save()
         else:
-            qs.is_delete = True
-            qs.bound_code =qs.bound_code+'-delete'+str(timezone.now().strftime('%Y%m%d%H%M%S'))
-            qs.save()
-            serializer = self.get_serializer(qs, many=False)
-            headers = self.get_success_headers(serializer.data)
-            return Response(serializer.data, status=200, headers=headers)
+            OutBoundDemandModel.objects.filter(bound_list=qs.id).update(is_delete=True)
+            if qs.relate_out_bill:
+                qs.relate_out_bill.bound_status = 0
+                qs.relate_out_bill.save()
+        serializer = self.get_serializer(qs, many=False)
+        headers = self.get_success_headers(serializer.data)
+        
+        return Response(serializer.data, status=200, headers=headers)
 
 # 入库批次类视图
 class BoundBatchViewSet(viewsets.ModelViewSet):

+ 33 - 0
erp/migrations/0023_materialdetail_material_batch_order_and_more.py

@@ -0,0 +1,33 @@
+# Generated by Django 4.1.2 on 2025-06-12 13:56
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('erp', '0022_alter_inboundbilloperatelog_log_type'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='materialdetail',
+            name='material_batch_order',
+            field=models.CharField(blank=True, default='', max_length=20, null=True, verbose_name='物料批次'),
+        ),
+        migrations.AddField(
+            model_name='materialdetail',
+            name='material_goods_code',
+            field=models.CharField(blank=True, default='', max_length=20, null=True, verbose_name='物料编码'),
+        ),
+        migrations.AddField(
+            model_name='outmaterialdetail',
+            name='material_batch_order',
+            field=models.CharField(blank=True, default='', max_length=20, null=True, verbose_name='物料批次'),
+        ),
+        migrations.AddField(
+            model_name='outmaterialdetail',
+            name='material_goods_code',
+            field=models.CharField(blank=True, default='', max_length=20, null=True, verbose_name='物料编码'),
+        ),
+    ]

+ 18 - 0
erp/migrations/0024_alter_inboundbill_bound_status.py

@@ -0,0 +1,18 @@
+# Generated by Django 4.1.2 on 2025-06-12 14:22
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('erp', '0023_materialdetail_material_batch_order_and_more'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='inboundbill',
+            name='bound_status',
+            field=models.IntegerField(choices=[(0, '草稿'), (1, '汇报')], default=0, verbose_name='状态'),
+        ),
+    ]

+ 43 - 0
erp/migrations/0025_inboundbill_audit_status_inboundbill_qc_status_and_more.py

@@ -0,0 +1,43 @@
+# Generated by Django 4.1.2 on 2025-06-12 15:57
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('erp', '0024_alter_inboundbill_bound_status'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='inboundbill',
+            name='audit_status',
+            field=models.IntegerField(default=0, verbose_name='审核状态'),
+        ),
+        migrations.AddField(
+            model_name='inboundbill',
+            name='qc_status',
+            field=models.IntegerField(choices=[(0, '未质检'), (1, '部分质检'), (2, '全部质检'), (3, '无需质检'), (4, '质检不通过')], default=0, verbose_name='质检状态'),
+        ),
+        migrations.AddField(
+            model_name='inboundbill',
+            name='save_status',
+            field=models.IntegerField(default=0, verbose_name='保存状态'),
+        ),
+        migrations.AddField(
+            model_name='outboundbill',
+            name='audit_status',
+            field=models.IntegerField(default=0, verbose_name='审核状态'),
+        ),
+        migrations.AddField(
+            model_name='outboundbill',
+            name='qc_status',
+            field=models.IntegerField(choices=[(0, '未质检'), (1, '部分质检'), (2, '全部质检'), (3, '无需质检'), (4, '质检不通过')], default=0, verbose_name='质检状态'),
+        ),
+        migrations.AddField(
+            model_name='outboundbill',
+            name='save_status',
+            field=models.IntegerField(default=0, verbose_name='保存状态'),
+        ),
+    ]

+ 26 - 5
erp/models.py

@@ -10,10 +10,15 @@ class InboundBill(models.Model):
     STATUS_CHOICES = (
         (0, '草稿'),
         (1, '汇报'),
-        (2, '审核'),
-        (3, '部分入库'),
-        (4, '全部入库'),
-        (404, '取消'),
+
+    )
+    # 质检状态:0 质检 1 部分质检 2 全部质检 3 无需质检 4 质检不通过
+    QC_STATUS_CHOICES = (
+        (0, '未质检'),
+        (1, '部分质检'),
+        (2, '全部质检'),
+        (3, '无需质检'),
+        (4, '质检不通过'),
     )
     billId = models.BigIntegerField(primary_key=True,verbose_name='原始单据ID')
     number = models.CharField(max_length=50, unique=True, verbose_name='单据编号')
@@ -28,6 +33,9 @@ class InboundBill(models.Model):
     update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
     bound_status = models.IntegerField(default=0,choices=STATUS_CHOICES, verbose_name='状态')
     is_delete = models.BooleanField(default=False, verbose_name='是否删除')
+    audit_status = models.IntegerField(default=0, verbose_name='审核状态')
+    save_status = models.IntegerField(default=0, verbose_name='保存状态')
+    qc_status = models.IntegerField(default=0,choices=QC_STATUS_CHOICES, verbose_name='质检状态')
     erp_audit_id = models.CharField(max_length=1000,null=True, verbose_name='ERP审核ID')  
     erp_save_id = models.CharField(max_length=1000,null=True, verbose_name='ERP保存ID')  
     class Meta:
@@ -84,7 +92,13 @@ class OutboundBill(models.Model):
         (2, '已入库'),
         (3, '已取消'),
     )
-
+    QC_STATUS_CHOICES = (
+        (0, '未质检'),
+        (1, '部分质检'),
+        (2, '全部质检'),
+        (3, '无需质检'),
+        (4, '质检不通过'),
+    )
     billId = models.BigIntegerField(primary_key=True,verbose_name='原始单据ID')
     number = models.CharField(max_length=50, unique=True, verbose_name='单据编号')
     type = models.IntegerField(choices=BOUND_TYPE, verbose_name='绑定类型')
@@ -98,6 +112,9 @@ class OutboundBill(models.Model):
     update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
     bound_status = models.IntegerField(default=0, choices=STATUS_CHOICES,verbose_name='状态')
     is_delete = models.BooleanField(default=False, verbose_name='是否删除')
+    audit_status = models.IntegerField(default=0, verbose_name='审核状态')
+    save_status = models.IntegerField(default=0, verbose_name='保存状态')
+    qc_status = models.IntegerField(default=0,choices=QC_STATUS_CHOICES, verbose_name='质检状态')
     erp_audit_id = models.CharField(max_length=1000,null=True, verbose_name='ERP审核ID')  
     erp_save_id = models.CharField(max_length=1000,null=True, verbose_name='ERP保存ID')  
 
@@ -139,6 +156,8 @@ class MaterialDetail(models.Model):
     )
     entryIds = models.BigIntegerField(verbose_name='分录ID')
     production_batch = models.CharField(max_length=50, verbose_name='生产批次')
+    material_goods_code = models.CharField(max_length=20, default='', verbose_name='物料编码', null=True, blank=True)
+    material_batch_order = models.CharField(max_length=20, default='', verbose_name='物料批次', null=True, blank=True)
     goods_code = models.CharField(max_length=20, verbose_name='商品编码')
     goods_name = models.CharField(max_length=100, verbose_name='商品名称')
     goods_std = models.CharField(max_length=50, verbose_name='商品规格')
@@ -177,6 +196,8 @@ class OutMaterialDetail(models.Model):
     )
     entryIds = models.BigIntegerField(verbose_name='分录ID')
     production_batch = models.CharField(max_length=50, verbose_name='生产批次')
+    material_goods_code = models.CharField(max_length=20, default='', verbose_name='物料编码', null=True, blank=True)
+    material_batch_order = models.CharField(max_length=20, default='', verbose_name='物料批次', null=True, blank=True)
     goods_code = models.CharField(max_length=20, verbose_name='商品编码')
     goods_name = models.CharField(max_length=100, verbose_name='商品名称')
 

+ 157 - 76
erp/views.py

@@ -366,7 +366,8 @@ class GenerateInbound(APIView):
         # 关联单据校验(双重校验机制)
         existing_bound = BoundListModel.objects.filter(
             Q(bound_desc__contains=f"生产入库单{bill_obj.number}") |
-            Q(relate_bill=bill_obj)
+            Q(relate_bill=bill_obj),
+            is_delete=False
         ).first()
 
         if existing_bound:
@@ -389,50 +390,68 @@ class GenerateInbound(APIView):
         batch_list = []
         detail_list = []
         log_list = []
-        goods_counter = defaultdict(int)
-        order_day=str(timezone.now().strftime('-%Y%m'))
-        order_month=str(timezone.now().strftime('%Y%m'))
-        for idx, material in enumerate(materials, 1):
-            # 生成批次
-            data = {}
-            qs_set = BoundBatchModel.objects.filter( goods_code=material.goods_code, bound_month=order_month,  is_delete=False)
-            goods_code = material.goods_code
-            goods_counter[goods_code] += 1
-            len_qs_set = len(qs_set) + goods_counter[goods_code]
-            print("len_qs_set", len_qs_set)
-            data['bound_batch_order'] = int(order_day.split('-')[-1])*100 + len_qs_set
-            data['bound_number'] = material.goods_code + order_day + str(len_qs_set).zfill(2)
-  
+        order_month = str(timezone.now().strftime('%Y%m'))  # 修正变量名
+
+        for material in materials:
+            # 规范批次号处理(支持7位和9位格式)
+            try:
+                # 拆分生产批次(物料代码-批次号)
+                parts = material.production_batch.split('-')
+                if len(parts) < 2:
+                    raise ValueError(f"无效的生产批次格式: {material.production_batch}")
+                    
+                material_goods_code = parts[0]
+                batch_str = parts[1]
+                
+                # 标准化批次号处理
+                if len(batch_str) == 7:  # 2508001 格式
+                    # 添加"20"前缀转为9位格式: 202508001
+                    standardized_batch = "20" + batch_str
+                elif len(batch_str) == 9:  # 202508001 格式
+                    standardized_batch = batch_str
+                else:
+                    raise ValueError(f"无效的批次号长度: {batch_str}")
+                    
+                # 创建规范化的bound_number(物料代码-标准批次号)
+                bound_number = f"{material_goods_code}-{standardized_batch}"
+                material.material_goods_code = material_goods_code
+                material.material_batch_order = standardized_batch
+                material.save(update_fields=['material_goods_code','material_batch_order'])
+                
+            except (IndexError, ValueError) as e:
+                raise Exception(f"物料批次处理错误: {e}")
+
+            # 创建批次记录
             batch = BoundBatchModel(
-                bound_number=data['bound_number'],
-                sourced_number = material.production_batch,
+                bound_number=bound_number,  # 使用规范化的批次号
+                sourced_number=material.production_batch,  # 保留原始批次号
                 bound_month=bound_list.bound_month,
-                bound_batch_order=data['bound_batch_order'],
+                bound_batch_order=standardized_batch,  # 存储标准化批次号
                 warehouse_code='W01',
                 warehouse_name='立体仓',
                 goods_code=material.goods_code,
                 goods_desc=material.goods_name,
-                goods_std=(material.goods_std if material.goods_std else ''),
+                goods_std=material.goods_std or '',  # 处理空值
                 goods_unit=material.goods_unit,
                 goods_qty=material.plan_qty,
                 goods_weight=float(material.goods_weight),
                 goods_total_weight=float(material.goods_total_weight),
                 creater=bound_list.creater,
                 openid=bound_list.openid,
-                relate_material=material
+                relate_material=material  # 关联原始物料
             )
             batch_list.append(batch)
 
-            # 生成明细
+            # 创建明细记录
             detail_list.append(BoundDetailModel(
                 bound_list=bound_list,
                 bound_batch=batch,
-                detail_code=f"{batch.bound_number}-DET",
+                detail_code=f"{bound_number}-DET",  # 使用规范化的批次号
                 creater=bound_list.creater,
                 openid=bound_list.openid
             ))
 
-            # 生成日志
+            # 创建日志记录
             log_list.append(BatchLogModel(
                 batch_id=batch,
                 log_type=0,
@@ -446,15 +465,19 @@ class GenerateInbound(APIView):
             ))
 
         # 批量写入数据库
-        BoundBatchModel.objects.bulk_create(batch_list)
-        BoundDetailModel.objects.bulk_create(detail_list)
-        BatchLogModel.objects.bulk_create(log_list)
-
+        try:
+            with transaction.atomic():
+                BoundBatchModel.objects.bulk_create(batch_list)
+                BoundDetailModel.objects.bulk_create(detail_list)
+                BatchLogModel.objects.bulk_create(log_list)
+        except Exception as e:
+            raise Exception(f"批次数据保存失败: {str(e)}")
+ 
     def create_bound_list(self, bill_obj):
      
         """创建出入库主单(带来源标识)"""
-        if BoundListModel.objects.filter(relate_bill=bill_obj).exists():
-            return BoundListModel.objects.get(relate_bill=bill_obj)
+        if BoundListModel.objects.filter(relate_bill=bill_obj, is_delete=False).exists():
+            return BoundListModel.objects.get(relate_bill=bill_obj,is_delete=False)
         if bill_obj.type == 1:
             bound_desc = f"生产入库单{bill_obj.number}"
         elif bill_obj.type == 2:
@@ -575,7 +598,8 @@ class GenerateOutbound(APIView):
         # 关联单据校验(双重校验机制)
         existing_bound = BoundListModel.objects.filter(
             Q(bound_desc__contains=f"生产出库单{bill_obj.number}") |
-            Q(relate_out_bill=bill_obj)
+            Q(relate_out_bill=bill_obj),
+            is_delete=False
         ).first()
 
         if existing_bound:
@@ -585,11 +609,11 @@ class GenerateOutbound(APIView):
         return bill_obj, None
 
     def process_materials(self, bill_obj, bound_list):
-        """批量处理物料明细"""
+        """批量处理物料明细 - 出库版本"""
         materials = OutMaterialDetail.objects.filter(
             bound_billId=bill_obj,
             is_delete=False
-        ).select_related('bound_billId')
+        ).select_related('bound_billId', 'Material_entryIds')
 
         if not materials:
             raise Exception("出库单没有有效物料明细")
@@ -598,77 +622,112 @@ class GenerateOutbound(APIView):
         batch_list = []
         detail_list = []
         log_list = []
-       
-        for idx, material in enumerate(materials, 1):
-            # 生成批次
-            MaterialDetail_obj = MaterialDetail.objects.get(entryIds=material.Material_entryIds.entryIds)
-            batch_obj = BoundBatchModel.objects.get(relate_material=MaterialDetail_obj)
-
-            batch = OutBatchModel(
-                out_number = MaterialDetail_obj.production_batch,
-       
-                batch_number = batch_obj,
-                out_date = timezone.now().strftime("%Y-%m-%d %H:%M:%S"),
+        
+        for material in materials:
+            # 直接使用关联的入库明细,避免额外查询
+            try:
+                # 拆分生产批次(物料代码-批次号)
+                parts = material.production_batch.split('-')
+                if len(parts) < 2:
+                    raise ValueError(f"无效的生产批次格式: {material.production_batch}")
+                    
+                material_goods_code = parts[0]
+                batch_str = parts[1]
                 
-                out_type = bill_obj.type,
-                out_note = bill_obj.note,
+                # 标准化批次号处理
+                if len(batch_str) == 7:  # 2508001 格式
+                    # 添加"20"前缀转为9位格式: 202508001
+                    standardized_batch = "20" + batch_str
+                elif len(batch_str) == 9:  # 202508001 格式
+                    standardized_batch = batch_str
+                else:
+                    raise ValueError(f"无效的批次号长度: {batch_str}")
+                    
+                # 创建规范化的bound_number(物料代码-标准批次号)
+                bound_number = f"{material_goods_code}-{standardized_batch}"
+                material.material_goods_code = material_goods_code
+                material.material_batch_order = standardized_batch
+                material.save(update_fields=['material_goods_code','material_batch_order'])
                 
+            except (IndexError, ValueError) as e:
+                raise Exception(f"物料批次处理错误: {e}")
+
+            
+            # 获取关联的入库批次
+            try:
+                batch_obj = BoundBatchModel.objects.get(goods_code = material.material_goods_code, bound_batch_order = material.material_batch_order)
+            except BoundBatchModel.DoesNotExist:
+                raise Exception(f"入库物料ID:{material.material_goods_code}-{ material.material_batch_order}构成的批次未找到关联批次记录")
+            except BoundBatchModel.MultipleObjectsReturned:
+                raise Exception(f"入库物料ID:{material.material_goods_code}-{ material.material_batch_order}构成的批次关联多个批次记录")
+
+            # 计算重量 - 使用入库单件的重量进行计算
+            unit_weight = batch_obj.goods_weight or 1  # 避免除零错误
+            out_qty = material.goods_out_qty
+            total_weight = unit_weight * out_qty
+
+            # 创建出库批次记录
+            batch = OutBatchModel(
+                out_number=batch_obj.bound_number,  # 使用标准化的入库批次号
+                batch_number=batch_obj,
+                out_date=timezone.now().strftime("%Y-%m-%d %H:%M:%S"),
+                out_type=bill_obj.type,
+                out_note=bill_obj.note,
                 warehouse_code='W01',
                 warehouse_name='立体仓',
-                
-                goods_code=MaterialDetail_obj.goods_code,
-                goods_desc=MaterialDetail_obj.goods_name,
-                goods_std=MaterialDetail_obj.goods_std,
-                goods_unit=MaterialDetail_obj.goods_unit,
-
-                goods_qty=batch_obj.goods_qty,
-                goods_out_qty=material.goods_out_qty,
-
-                status = 0,
-                container_number = 0,
-
-                goods_weight = 1,
-                goods_total_weight = material.goods_out_qty,
-
+                goods_code=batch_obj.goods_code,
+                goods_desc=batch_obj.goods_desc,
+                goods_std=batch_obj.goods_std or '',  # 处理空值
+                goods_unit=batch_obj.goods_unit,
+                goods_qty=batch_obj.goods_qty,  # 批次总量
+                goods_out_qty=out_qty,          # 本次出库量
+                status=0,
+                container_number=0,             # 初始化为空字符串
+                goods_weight=unit_weight,         # 使用实际重量
+                goods_total_weight=total_weight,  # 计算总重量
                 creater=bill_obj.creater,
-                openid='ERP',
-
-                relate_material=material
+                openid='ERP',  # 使用单据中的openid
+                relate_material=material,
+                bound_list = bound_list,
             )
             batch_list.append(batch)
 
-            # 生成明细
+            # 生成出库明细记录
             detail_list.append(OutBoundDetailModel(
                 bound_list=bound_list,
                 bound_batch=batch,
-                bound_batch_number = batch_obj,
-                detail_code=f"{batch.out_number}-ODET",
+                bound_batch_number=batch_obj,
+                detail_code=f"{batch_obj.bound_number}-ODET-{material.id}",
                 creater=bound_list.creater,
                 openid=bound_list.openid
             ))
 
-            # 生成日志
+            # 生成批次操作日志
             log_list.append(BatchLogModel(
                 batch_id=batch_obj,
                 log_type=1,
                 log_date=timezone.now(),
                 goods_code=batch_obj.goods_code,
                 goods_desc=batch_obj.goods_desc,
-                goods_qty=batch.goods_out_qty,
-                log_content=f"生产出库批次创建,来源单据:{bill_obj.number},出库件数:{batch.goods_out_qty}",
+                goods_qty=-out_qty,  # 出库为负值,表示减少库存
+                log_content=f"生产出库批次创建,来源单据:{bill_obj.number},出库数量:{out_qty}",
                 creater=batch.creater,
                 openid=batch.openid
             ))
 
-        # 批量写入数据库
-        OutBatchModel.objects.bulk_create(batch_list)
-        OutBoundDetailModel.objects.bulk_create(detail_list)
-        BatchLogModel.objects.bulk_create(log_list)
+        # 批量写入数据库(使用事务保证一致性)
+        try:
+            with transaction.atomic():
+                OutBatchModel.objects.bulk_create(batch_list)
+                OutBoundDetailModel.objects.bulk_create(detail_list)
+                BatchLogModel.objects.bulk_create(log_list)
+        except Exception as e:
+            raise Exception(f"出库批次数据保存失败: {str(e)}")
 
     def create_bound_list(self, bill_obj):
      
         """创建出入库主单(带来源标识)"""
-        if BoundListModel.objects.filter(relate_out_bill=bill_obj).exists():
+        if BoundListModel.objects.filter(relate_out_bill=bill_obj,is_delete=False).exists():
             return BoundListModel.objects.get(relate_out_bill=bill_obj)
         if bill_obj.type == 1:
             bound_desc = f"销售出库单{bill_obj.number}"
@@ -718,7 +777,7 @@ class OutboundApplyCreate(APIView):
     permission_classes = [AllowAny]
 
     def post(self, request):
-        logger.info('生产出库申请请求 | 原始数据: %s', request.data)
+        logger.info('出库申请请求 | 原始数据: %s', request.data)
         
         try:
             total_count = len(request.data.get('materials', []))
@@ -1083,7 +1142,7 @@ class BatchUpdate(APIView):
                             logger.info("[1]入库单号%s,物料明细%s,更新状态,审核通过%s",bill_obj.number,material_entryId,material_audit_id)   
                             logger.info("[2]入库单号%s,物料明细%s,更新状态,审核通过%s",bill_obj.number,material_entryId,bill_obj.erp_audit_id) 
                             
-
+                            
                             instance.save()
                             bill_obj.save()
                             success_count += 1
@@ -1289,6 +1348,9 @@ class ProductionInboundAuditSync(ERPSyncBase):
 
     def process_erp_response(self, response):
         logger.info("ERP审核响应:",response)
+        if response['status']:
+            self.wms_bill.audit_status = 1
+            self.wms_bill.save()
         return response['status']
 """采购收料入库审核"""      
 class PurchaseInboundAuditSync(ERPSyncBase):
@@ -1318,6 +1380,9 @@ class PurchaseInboundAuditSync(ERPSyncBase):
 
     def process_erp_response(self, response):
         logger.info("ERP审核响应:",response)
+        if response['status']:
+            self.wms_bill.audit_status = 1
+            self.wms_bill.save()
         return response['status']
 """其他入库审核"""
 class OtherInboundAuditSync(ERPSyncBase):
@@ -1347,6 +1412,9 @@ class OtherInboundAuditSync(ERPSyncBase):
 
     def process_erp_response(self, response):
         logger.info("ERP审核响应:",response['message'])
+        if response['status']:
+            self.wms_bill.audit_status = 1
+            self.wms_bill.save()
         return response['status']
 """调拨入库审核"""
 class TransferInboundAuditSync(ERPSyncBase):
@@ -1377,6 +1445,9 @@ class TransferInboundAuditSync(ERPSyncBase):
 
     def process_erp_response(self, response):
         logger.info("ERP审核响应:",response)
+        if response['status']:
+            self.wms_bill.audit_status = 1
+            self.wms_bill.save()
         return response['status']
 """其他出库审核"""
 class OtherOutboundAuditSync(ERPSyncBase):
@@ -1406,6 +1477,9 @@ class OtherOutboundAuditSync(ERPSyncBase):
 
     def process_erp_response(self, response):
         logger.info("ERP审核响应:",response)
+        if response['status']:
+            self.wms_bill.audit_status = 1
+            self.wms_bill.save()
         return response['status']
 """生产领料出库审核"""
 class ProductionOutboundAuditSync(ERPSyncBase):
@@ -1435,6 +1509,9 @@ class ProductionOutboundAuditSync(ERPSyncBase):
 
     def process_erp_response(self, response):
         logger.info("ERP审核响应:",response['message'],response['status'])
+        if response['status']:
+            self.wms_bill.audit_status = 1
+            self.wms_bill.save()
         return response['status']
 
 """采购入库保存"""
@@ -1472,6 +1549,8 @@ class PurchaseInboundSaveSync(ERPSyncBase):
                 log_type ='erp_save',
                 log_content = f"保存入库单{self.wms_bill.number}信息",
             )
+            self.wms_bill.save_status = 1
+            self.wms_bill.save()
             
         return response['status']
 """销售出库保存"""
@@ -1509,6 +1588,8 @@ class SaleOutboundSaveSync(ERPSyncBase):
                 log_type ='erp_save',
                 log_content = f"保存出库单{self.wms_bill.number}信息",
             )
+            self.wms_bill.save_status = 1
+            self.wms_bill.save()
 
         return response['status']
 

File diff suppressed because it is too large
+ 329 - 0
logs/boundBill.log


+ 254 - 0
logs/error.log

@@ -11823,3 +11823,257 @@ Traceback (most recent call last):
     raise FieldDoesNotExist(
 django.core.exceptions.FieldDoesNotExist: ContainerDetailModel has no field named 'skip_class_update'
 [2025-06-12 09:56:00,525][django.server.log_message():187] [ERROR] "DELETE /container/detail/2023/ HTTP/1.1" 500 139037
+[2025-06-12 14:30:51,593][django.request.log_response():241] [ERROR] Internal Server Error: /wms/outboundBills/
+Traceback (most recent call last):
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+sqlite3.OperationalError: database is locked
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\exception.py", line 55, in inner
+    response = get_response(request)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 497, in dispatch
+    self.initial(request, *args, **kwargs)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 416, in initial
+    self.check_throttles(request)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 359, in check_throttles
+    if not throttle.allow_request(request, self):
+  File "D:\Document\code\vue\greater_wms\utils\throttle.py", line 27, in allow_request
+    i.delete()
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\base.py", line 1118, in delete
+    return collector.delete()
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\deletion.py", line 448, in delete
+    count = sql.DeleteQuery(model).delete_batch(
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\subqueries.py", line 42, in delete_batch
+    num_deleted += self.do_query(
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\subqueries.py", line 20, in do_query
+    cursor = self.get_compiler(using).execute_sql(CURSOR)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\compiler.py", line 1398, in execute_sql
+    cursor.execute(sql, params)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 103, in execute
+    return super().execute(sql, params)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 67, in execute
+    return self._execute_with_wrappers(
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 80, in _execute_with_wrappers
+    return executor(sql, params, many, context)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\utils.py", line 91, in __exit__
+    raise dj_exc_value.with_traceback(traceback) from exc_value
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+django.db.utils.OperationalError: database is locked
+[2025-06-12 14:30:51,602][django.server.log_message():187] [ERROR] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 500 185489
+[2025-06-12 14:31:15,212][django.request.log_response():241] [ERROR] Internal Server Error: /wms/outboundBills/
+Traceback (most recent call last):
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+sqlite3.OperationalError: database is locked
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\exception.py", line 55, in inner
+    response = get_response(request)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 497, in dispatch
+    self.initial(request, *args, **kwargs)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 416, in initial
+    self.check_throttles(request)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 359, in check_throttles
+    if not throttle.allow_request(request, self):
+  File "D:\Document\code\vue\greater_wms\utils\throttle.py", line 27, in allow_request
+    i.delete()
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\base.py", line 1118, in delete
+    return collector.delete()
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\deletion.py", line 448, in delete
+    count = sql.DeleteQuery(model).delete_batch(
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\subqueries.py", line 42, in delete_batch
+    num_deleted += self.do_query(
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\subqueries.py", line 20, in do_query
+    cursor = self.get_compiler(using).execute_sql(CURSOR)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\compiler.py", line 1398, in execute_sql
+    cursor.execute(sql, params)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 103, in execute
+    return super().execute(sql, params)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 67, in execute
+    return self._execute_with_wrappers(
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 80, in _execute_with_wrappers
+    return executor(sql, params, many, context)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\utils.py", line 91, in __exit__
+    raise dj_exc_value.with_traceback(traceback) from exc_value
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+django.db.utils.OperationalError: database is locked
+[2025-06-12 14:31:15,238][django.server.log_message():187] [ERROR] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 500 185489
+[2025-06-12 15:43:01,064][django.request.log_response():241] [ERROR] Internal Server Error: /wms/materials/
+Traceback (most recent call last):
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+sqlite3.OperationalError: no such column: erp_materialdetail.material_goods_code
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "D:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "D:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\mixins.py", line 40, in list
+    page = self.paginate_queryset(queryset)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\generics.py", line 171, in paginate_queryset
+    return self.paginator.paginate_queryset(queryset, self.request, view=self)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\pagination.py", line 216, in paginate_queryset
+    return list(self.page)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\core\paginator.py", line 177, in __len__
+    return len(self.object_list)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\query.py", line 376, in __len__
+    self._fetch_all()
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\query.py", line 1866, in _fetch_all
+    self._result_cache = list(self._iterable_class(self))
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\query.py", line 87, in __iter__
+    results = compiler.execute_sql(
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\compiler.py", line 1398, in execute_sql
+    cursor.execute(sql, params)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 103, in execute
+    return super().execute(sql, params)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 67, in execute
+    return self._execute_with_wrappers(
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 80, in _execute_with_wrappers
+    return executor(sql, params, many, context)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\utils.py", line 91, in __exit__
+    raise dj_exc_value.with_traceback(traceback) from exc_value
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+django.db.utils.OperationalError: no such column: erp_materialdetail.material_goods_code
+[2025-06-12 15:43:05,422][django.request.log_response():241] [ERROR] Internal Server Error: /wms/materials/
+Traceback (most recent call last):
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+sqlite3.OperationalError: no such column: erp_materialdetail.material_goods_code
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "D:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "D:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\mixins.py", line 40, in list
+    page = self.paginate_queryset(queryset)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\generics.py", line 171, in paginate_queryset
+    return self.paginator.paginate_queryset(queryset, self.request, view=self)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\pagination.py", line 216, in paginate_queryset
+    return list(self.page)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\core\paginator.py", line 177, in __len__
+    return len(self.object_list)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\query.py", line 376, in __len__
+    self._fetch_all()
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\query.py", line 1866, in _fetch_all
+    self._result_cache = list(self._iterable_class(self))
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\query.py", line 87, in __iter__
+    results = compiler.execute_sql(
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\compiler.py", line 1398, in execute_sql
+    cursor.execute(sql, params)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 103, in execute
+    return super().execute(sql, params)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 67, in execute
+    return self._execute_with_wrappers(
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 80, in _execute_with_wrappers
+    return executor(sql, params, many, context)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\utils.py", line 91, in __exit__
+    raise dj_exc_value.with_traceback(traceback) from exc_value
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+django.db.utils.OperationalError: no such column: erp_materialdetail.material_goods_code

+ 592 - 0
logs/server.log

@@ -32878,3 +32878,595 @@ django.core.exceptions.FieldDoesNotExist: ContainerDetailModel has no field name
 [2025-06-12 10:01:07,046][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 412
 [2025-06-12 10:01:17,030][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 412
 [2025-06-12 10:01:17,057][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 14:26:47,041][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:26:47,041][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:26:47,101][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 14:26:47,119][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 817
+[2025-06-12 14:26:49,963][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 0
+[2025-06-12 14:26:50,025][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 1192
+[2025-06-12 14:26:52,465][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/2234780719127776256/ HTTP/1.1" 200 0
+[2025-06-12 14:26:52,466][django.server.log_message():187] [INFO] "OPTIONS /wms/materials/?bound_billId=2234780719127776256 HTTP/1.1" 200 0
+[2025-06-12 14:26:52,467][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/log/?billid=2234780719127776256 HTTP/1.1" 200 0
+[2025-06-12 14:26:52,468][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/number/ HTTP/1.1" 200 0
+[2025-06-12 14:26:52,504][django.server.log_message():187] [INFO] "GET /wms/inboundBills/2234780719127776256/ HTTP/1.1" 200 378
+[2025-06-12 14:26:52,516][django.server.log_message():187] [INFO] "GET /wms/inboundBills/log/?billid=2234780719127776256 HTTP/1.1" 200 818
+[2025-06-12 14:26:52,564][django.server.log_message():187] [INFO] "GET /wms/materials/?bound_billId=2234780719127776256 HTTP/1.1" 200 482
+[2025-06-12 14:26:52,575][django.server.log_message():187] [INFO] "POST /wms/inboundBills/number/ HTTP/1.1" 200 138
+[2025-06-12 14:26:54,196][django.server.log_message():187] [INFO] "OPTIONS /wms/generateinbound HTTP/1.1" 200 0
+[2025-06-12 14:26:54,243][django.server.log_message():187] [INFO] "POST /wms/generateinbound HTTP/1.1" 200 53
+[2025-06-12 14:26:54,262][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 0
+[2025-06-12 14:26:54,349][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 1192
+[2025-06-12 14:26:56,706][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:26:56,708][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:26:56,755][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 14:26:56,773][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 817
+[2025-06-12 14:27:06,435][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/2234780719127776256/ HTTP/1.1" 200 0
+[2025-06-12 14:27:06,437][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/log/?billid=2234780719127776256 HTTP/1.1" 200 0
+[2025-06-12 14:27:06,438][django.server.log_message():187] [INFO] "OPTIONS /wms/materials/?bound_billId=2234780719127776256 HTTP/1.1" 200 0
+[2025-06-12 14:27:06,446][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/number/ HTTP/1.1" 200 0
+[2025-06-12 14:27:06,527][django.server.log_message():187] [INFO] "POST /wms/inboundBills/number/ HTTP/1.1" 200 138
+[2025-06-12 14:27:06,559][django.server.log_message():187] [INFO] "GET /wms/inboundBills/log/?billid=2234780719127776256 HTTP/1.1" 200 818
+[2025-06-12 14:27:06,628][django.server.log_message():187] [INFO] "GET /wms/inboundBills/2234780719127776256/ HTTP/1.1" 200 378
+[2025-06-12 14:27:06,631][django.server.log_message():187] [INFO] "GET /wms/materials/?bound_billId=2234780719127776256 HTTP/1.1" 200 482
+[2025-06-12 14:27:06,706][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:27:06,706][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:27:06,745][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 14:27:06,763][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 817
+[2025-06-12 14:27:10,512][django.server.log_message():187] [INFO] "OPTIONS /wms/generateinbound HTTP/1.1" 200 0
+[2025-06-12 14:27:10,565][django.server.log_message():187] [INFO] "POST /wms/generateinbound HTTP/1.1" 200 53
+[2025-06-12 14:27:10,579][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 0
+[2025-06-12 14:27:10,715][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 1192
+[2025-06-12 14:27:16,729][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:27:16,731][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:27:16,771][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 14:27:16,791][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 817
+[2025-06-12 14:27:26,726][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:27:26,727][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:27:26,806][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 817
+[2025-06-12 14:27:26,856][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 14:27:36,717][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:27:36,722][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:27:36,796][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 14:27:36,824][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 817
+[2025-06-12 14:27:36,963][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/2234780719127776256/ HTTP/1.1" 200 0
+[2025-06-12 14:27:36,966][django.server.log_message():187] [INFO] "OPTIONS /wms/materials/?bound_billId=2234780719127776256 HTTP/1.1" 200 0
+[2025-06-12 14:27:36,971][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/number/ HTTP/1.1" 200 0
+[2025-06-12 14:27:36,975][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/log/?billid=2234780719127776256 HTTP/1.1" 200 0
+[2025-06-12 14:27:37,050][django.server.log_message():187] [INFO] "GET /wms/inboundBills/log/?billid=2234780719127776256 HTTP/1.1" 200 818
+[2025-06-12 14:27:37,063][django.server.log_message():187] [INFO] "GET /wms/materials/?bound_billId=2234780719127776256 HTTP/1.1" 200 482
+[2025-06-12 14:27:37,124][django.server.log_message():187] [INFO] "GET /wms/inboundBills/2234780719127776256/ HTTP/1.1" 200 378
+[2025-06-12 14:27:37,130][django.server.log_message():187] [INFO] "POST /wms/inboundBills/number/ HTTP/1.1" 200 138
+[2025-06-12 14:27:38,124][django.server.log_message():187] [INFO] "OPTIONS /wms/generateinbound HTTP/1.1" 200 0
+[2025-06-12 14:27:38,158][django.server.log_message():187] [INFO] "POST /wms/generateinbound HTTP/1.1" 200 53
+[2025-06-12 14:27:38,170][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 0
+[2025-06-12 14:27:38,270][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 1192
+[2025-06-12 14:27:43,859][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/2234770311557986304/ HTTP/1.1" 200 0
+[2025-06-12 14:27:43,869][django.server.log_message():187] [INFO] "OPTIONS /wms/materials/?bound_billId=2234770311557986304 HTTP/1.1" 200 0
+[2025-06-12 14:27:43,869][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/log/?billid=2234770311557986304 HTTP/1.1" 200 0
+[2025-06-12 14:27:43,871][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/number/ HTTP/1.1" 200 0
+[2025-06-12 14:27:44,028][django.server.log_message():187] [INFO] "GET /wms/inboundBills/2234770311557986304/ HTTP/1.1" 200 378
+[2025-06-12 14:27:44,035][django.server.log_message():187] [INFO] "GET /wms/inboundBills/log/?billid=2234770311557986304 HTTP/1.1" 200 818
+[2025-06-12 14:27:44,065][django.server.log_message():187] [INFO] "POST /wms/inboundBills/number/ HTTP/1.1" 200 138
+[2025-06-12 14:27:44,127][django.server.log_message():187] [INFO] "GET /wms/materials/?bound_billId=2234770311557986304 HTTP/1.1" 200 494
+[2025-06-12 14:27:46,726][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:27:46,731][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:27:46,786][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 817
+[2025-06-12 14:27:46,809][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 14:27:47,825][django.server.log_message():187] [INFO] "OPTIONS /wms/generateinbound HTTP/1.1" 200 0
+[2025-06-12 14:27:47,858][django.server.log_message():187] [INFO] "POST /wms/generateinbound HTTP/1.1" 200 53
+[2025-06-12 14:27:47,871][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 0
+[2025-06-12 14:27:47,934][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 1192
+[2025-06-12 14:27:56,715][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:27:56,716][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:27:56,758][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 14:27:56,775][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 817
+[2025-06-12 14:28:04,821][django.server.log_message():187] [INFO] "OPTIONS /warehouse/boundtype/ HTTP/1.1" 200 0
+[2025-06-12 14:28:04,823][django.server.log_message():187] [INFO] "OPTIONS /warehouse/department/ HTTP/1.1" 200 0
+[2025-06-12 14:28:04,845][django.server.log_message():187] [INFO] "OPTIONS /warehouse/boundbusiness/ HTTP/1.1" 200 0
+[2025-06-12 14:28:04,849][django.server.log_message():187] [INFO] "OPTIONS /warehouse/boundcodetype/ HTTP/1.1" 200 0
+[2025-06-12 14:28:04,860][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 0
+[2025-06-12 14:28:04,938][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-06-12 14:28:04,940][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-06-12 14:28:04,984][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 817
+[2025-06-12 14:28:04,988][django.server.log_message():187] [INFO] "GET /warehouse/department/ HTTP/1.1" 200 2858
+[2025-06-12 14:28:05,005][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-06-12 14:28:06,728][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:28:06,729][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:28:06,793][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 817
+[2025-06-12 14:28:06,814][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 14:28:08,905][django.server.log_message():187] [INFO] "OPTIONS /wms/outmaterials/?bound_billId=2234789443355593728 HTTP/1.1" 200 0
+[2025-06-12 14:28:08,908][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/number/ HTTP/1.1" 200 0
+[2025-06-12 14:28:08,913][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/log/?billid=2234789443355593728 HTTP/1.1" 200 0
+[2025-06-12 14:28:08,914][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/2234789443355593728/ HTTP/1.1" 200 0
+[2025-06-12 14:28:08,991][django.server.log_message():187] [INFO] "GET /wms/outmaterials/?bound_billId=2234789443355593728 HTTP/1.1" 200 479
+[2025-06-12 14:28:09,015][django.server.log_message():187] [INFO] "POST /wms/outboundBills/number/ HTTP/1.1" 200 134
+[2025-06-12 14:28:09,039][django.server.log_message():187] [INFO] "GET /wms/outboundBills/log/?billid=2234789443355593728 HTTP/1.1" 200 453
+[2025-06-12 14:28:09,087][django.server.log_message():187] [INFO] "GET /wms/outboundBills/2234789443355593728/ HTTP/1.1" 200 382
+[2025-06-12 14:28:10,322][django.server.log_message():187] [INFO] "OPTIONS /wms/generateoutbound HTTP/1.1" 200 0
+[2025-06-12 14:28:16,071][django.server.log_message():187] [INFO] "POST /wms/generateoutbound HTTP/1.1" 200 70
+[2025-06-12 14:28:16,088][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 0
+[2025-06-12 14:28:16,136][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 817
+[2025-06-12 14:28:16,715][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:28:16,715][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:28:16,772][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 817
+[2025-06-12 14:28:16,773][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 14:28:26,722][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:28:26,722][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:28:26,791][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 817
+[2025-06-12 14:28:26,813][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 14:28:36,712][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:28:36,712][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:28:36,763][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 14:28:36,787][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 817
+[2025-06-12 14:28:46,316][django.server.log_message():187] [INFO] "OPTIONS /container/list/?page=1&page_size=11 HTTP/1.1" 200 0
+[2025-06-12 14:28:46,353][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 1809
+[2025-06-12 14:28:46,721][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:28:46,721][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:28:46,767][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 14:28:46,785][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 817
+[2025-06-12 14:28:47,826][django.server.log_message():187] [INFO] "OPTIONS /warehouse/boundcodetype/ HTTP/1.1" 200 0
+[2025-06-12 14:28:47,828][django.server.log_message():187] [INFO] "OPTIONS /bound/list/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 0
+[2025-06-12 14:28:47,829][django.server.log_message():187] [INFO] "OPTIONS /warehouse/department/?max_page=1000 HTTP/1.1" 200 0
+[2025-06-12 14:28:47,832][django.server.log_message():187] [INFO] "OPTIONS /warehouse/boundtype/ HTTP/1.1" 200 0
+[2025-06-12 14:28:47,833][django.server.log_message():187] [INFO] "OPTIONS /warehouse/boundbusiness/ HTTP/1.1" 200 0
+[2025-06-12 14:28:47,833][django.server.log_message():187] [INFO] "OPTIONS /warehouse/status/ HTTP/1.1" 200 0
+[2025-06-12 14:28:47,892][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-06-12 14:28:48,121][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 4706
+[2025-06-12 14:28:48,141][django.server.log_message():187] [INFO] "GET /warehouse/status/ HTTP/1.1" 200 600
+[2025-06-12 14:28:48,168][django.server.log_message():187] [INFO] "GET /warehouse/department/?max_page=1000 HTTP/1.1" 200 9376
+[2025-06-12 14:28:48,186][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-06-12 14:28:48,204][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-06-12 14:28:49,862][django.server.log_message():187] [INFO] "OPTIONS /bound/list/?page=1&base_type=1&page_size=11 HTTP/1.1" 200 0
+[2025-06-12 14:28:49,862][django.server.log_message():187] [INFO] "OPTIONS /warehouse/boundcodetype/ HTTP/1.1" 200 0
+[2025-06-12 14:28:49,862][django.server.log_message():187] [INFO] "OPTIONS /warehouse/department/ HTTP/1.1" 200 0
+[2025-06-12 14:28:49,862][django.server.log_message():187] [INFO] "OPTIONS /warehouse/boundbusiness/ HTTP/1.1" 200 0
+[2025-06-12 14:28:49,865][django.server.log_message():187] [INFO] "OPTIONS /warehouse/boundtype/ HTTP/1.1" 200 0
+[2025-06-12 14:28:49,867][django.server.log_message():187] [INFO] "OPTIONS /warehouse/status/ HTTP/1.1" 200 0
+[2025-06-12 14:28:49,956][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-06-12 14:28:50,095][django.server.log_message():187] [INFO] "GET /warehouse/status/ HTTP/1.1" 200 600
+[2025-06-12 14:28:50,114][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-06-12 14:28:50,138][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=1&page_size=11 HTTP/1.1" 200 4571
+[2025-06-12 14:28:50,192][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-06-12 14:28:50,198][django.server.log_message():187] [INFO] "GET /warehouse/department/ HTTP/1.1" 200 2858
+[2025-06-12 14:28:53,806][django.server.log_message():187] [INFO] "OPTIONS /warehouse/department/ HTTP/1.1" 200 0
+[2025-06-12 14:28:53,807][django.server.log_message():187] [INFO] "OPTIONS /warehouse/boundcodetype/ HTTP/1.1" 200 0
+[2025-06-12 14:28:53,807][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 0
+[2025-06-12 14:28:53,808][django.server.log_message():187] [INFO] "OPTIONS /warehouse/boundtype/ HTTP/1.1" 200 0
+[2025-06-12 14:28:53,809][django.server.log_message():187] [INFO] "OPTIONS /warehouse/boundbusiness/ HTTP/1.1" 200 0
+[2025-06-12 14:28:53,887][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-06-12 14:28:53,941][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-06-12 14:28:54,006][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 1192
+[2025-06-12 14:28:54,022][django.server.log_message():187] [INFO] "GET /warehouse/department/ HTTP/1.1" 200 2858
+[2025-06-12 14:28:54,054][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-06-12 14:28:56,707][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:28:56,716][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:28:56,771][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 14:28:56,790][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 817
+[2025-06-12 14:29:03,688][django.server.log_message():187] [INFO] "OPTIONS /wms/materials/?bound_billId=2234770311557986304 HTTP/1.1" 200 0
+[2025-06-12 14:29:03,693][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/log/?billid=2234770311557986304 HTTP/1.1" 200 0
+[2025-06-12 14:29:03,704][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/number/ HTTP/1.1" 200 0
+[2025-06-12 14:29:03,705][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/2234770311557986304/ HTTP/1.1" 200 0
+[2025-06-12 14:29:03,816][django.server.log_message():187] [INFO] "GET /wms/inboundBills/2234770311557986304/ HTTP/1.1" 200 378
+[2025-06-12 14:29:03,826][django.server.log_message():187] [INFO] "GET /wms/inboundBills/log/?billid=2234770311557986304 HTTP/1.1" 200 818
+[2025-06-12 14:29:03,829][django.server.log_message():187] [INFO] "GET /wms/materials/?bound_billId=2234770311557986304 HTTP/1.1" 200 494
+[2025-06-12 14:29:03,841][django.server.log_message():187] [INFO] "POST /wms/inboundBills/number/ HTTP/1.1" 200 138
+[2025-06-12 14:29:06,707][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:29:06,708][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:29:06,789][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 817
+[2025-06-12 14:29:06,840][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 14:29:07,137][django.server.log_message():187] [INFO] "OPTIONS /wms/materials/?bound_billId=2234770311557986304 HTTP/1.1" 200 0
+[2025-06-12 14:29:07,139][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/2234770311557986304/ HTTP/1.1" 200 0
+[2025-06-12 14:29:07,139][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/number/ HTTP/1.1" 200 0
+[2025-06-12 14:29:07,141][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/log/?billid=2234770311557986304 HTTP/1.1" 200 0
+[2025-06-12 14:29:07,181][django.server.log_message():187] [INFO] "GET /wms/inboundBills/2234770311557986304/ HTTP/1.1" 200 378
+[2025-06-12 14:29:07,200][django.server.log_message():187] [INFO] "POST /wms/inboundBills/number/ HTTP/1.1" 200 138
+[2025-06-12 14:29:07,245][django.server.log_message():187] [INFO] "GET /wms/materials/?bound_billId=2234770311557986304 HTTP/1.1" 200 494
+[2025-06-12 14:29:07,251][django.server.log_message():187] [INFO] "GET /wms/inboundBills/log/?billid=2234770311557986304 HTTP/1.1" 200 818
+[2025-06-12 14:29:08,352][django.server.log_message():187] [INFO] "OPTIONS /wms/generateinbound HTTP/1.1" 200 0
+[2025-06-12 14:29:08,384][django.server.log_message():187] [INFO] "POST /wms/generateinbound HTTP/1.1" 200 53
+[2025-06-12 14:29:08,394][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 0
+[2025-06-12 14:29:08,468][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 1192
+[2025-06-12 14:29:13,164][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 0
+[2025-06-12 14:29:13,167][django.server.log_message():187] [INFO] "OPTIONS /warehouse/boundcodetype/ HTTP/1.1" 200 0
+[2025-06-12 14:29:13,167][django.server.log_message():187] [INFO] "OPTIONS /warehouse/boundtype/ HTTP/1.1" 200 0
+[2025-06-12 14:29:13,167][django.server.log_message():187] [INFO] "OPTIONS /warehouse/boundbusiness/ HTTP/1.1" 200 0
+[2025-06-12 14:29:13,177][django.server.log_message():187] [INFO] "OPTIONS /warehouse/department/ HTTP/1.1" 200 0
+[2025-06-12 14:29:13,242][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-06-12 14:29:13,304][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 817
+[2025-06-12 14:29:13,306][django.server.log_message():187] [INFO] "GET /warehouse/department/ HTTP/1.1" 200 2858
+[2025-06-12 14:29:13,369][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-06-12 14:29:13,375][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-06-12 14:29:15,816][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/number/ HTTP/1.1" 200 0
+[2025-06-12 14:29:15,817][django.server.log_message():187] [INFO] "OPTIONS /wms/outmaterials/?bound_billId=2234784318872404992 HTTP/1.1" 200 0
+[2025-06-12 14:29:15,817][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/log/?billid=2234784318872404992 HTTP/1.1" 200 0
+[2025-06-12 14:29:15,817][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/2234784318872404992/ HTTP/1.1" 200 0
+[2025-06-12 14:29:15,921][django.server.log_message():187] [INFO] "POST /wms/outboundBills/number/ HTTP/1.1" 200 134
+[2025-06-12 14:29:15,975][django.server.log_message():187] [INFO] "GET /wms/outboundBills/2234784318872404992/ HTTP/1.1" 200 382
+[2025-06-12 14:29:16,004][django.server.log_message():187] [INFO] "GET /wms/outboundBills/log/?billid=2234784318872404992 HTTP/1.1" 200 453
+[2025-06-12 14:29:16,042][django.server.log_message():187] [INFO] "GET /wms/outmaterials/?bound_billId=2234784318872404992 HTTP/1.1" 200 472
+[2025-06-12 14:29:16,713][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:29:16,713][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:29:16,754][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 14:29:16,774][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 817
+[2025-06-12 14:29:18,409][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/2234789443355593728/ HTTP/1.1" 200 0
+[2025-06-12 14:29:18,412][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/log/?billid=2234789443355593728 HTTP/1.1" 200 0
+[2025-06-12 14:29:18,415][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/number/ HTTP/1.1" 200 0
+[2025-06-12 14:29:18,415][django.server.log_message():187] [INFO] "OPTIONS /wms/outmaterials/?bound_billId=2234789443355593728 HTTP/1.1" 200 0
+[2025-06-12 14:29:18,559][django.server.log_message():187] [INFO] "GET /wms/outboundBills/2234789443355593728/ HTTP/1.1" 200 382
+[2025-06-12 14:29:18,581][django.server.log_message():187] [INFO] "POST /wms/outboundBills/number/ HTTP/1.1" 200 134
+[2025-06-12 14:29:18,604][django.server.log_message():187] [INFO] "GET /wms/outboundBills/log/?billid=2234789443355593728 HTTP/1.1" 200 453
+[2025-06-12 14:29:18,650][django.server.log_message():187] [INFO] "GET /wms/outmaterials/?bound_billId=2234789443355593728 HTTP/1.1" 200 479
+[2025-06-12 14:29:20,594][django.server.log_message():187] [INFO] "OPTIONS /wms/outmaterials/?bound_billId=2234789443355593728 HTTP/1.1" 200 0
+[2025-06-12 14:29:20,595][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/2234789443355593728/ HTTP/1.1" 200 0
+[2025-06-12 14:29:20,596][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/number/ HTTP/1.1" 200 0
+[2025-06-12 14:29:20,596][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/log/?billid=2234789443355593728 HTTP/1.1" 200 0
+[2025-06-12 14:29:20,703][django.server.log_message():187] [INFO] "POST /wms/outboundBills/number/ HTTP/1.1" 200 134
+[2025-06-12 14:29:20,760][django.server.log_message():187] [INFO] "GET /wms/outboundBills/log/?billid=2234789443355593728 HTTP/1.1" 200 453
+[2025-06-12 14:29:20,822][django.server.log_message():187] [INFO] "GET /wms/outboundBills/2234789443355593728/ HTTP/1.1" 200 382
+[2025-06-12 14:29:20,855][django.server.log_message():187] [INFO] "GET /wms/outmaterials/?bound_billId=2234789443355593728 HTTP/1.1" 200 479
+[2025-06-12 14:29:21,730][django.server.log_message():187] [INFO] "OPTIONS /wms/generateoutbound HTTP/1.1" 200 0
+[2025-06-12 14:29:26,719][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:29:26,719][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:29:36,722][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:29:36,725][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:29:46,714][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:29:46,720][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:30:51,593][django.request.log_response():241] [ERROR] Internal Server Error: /wms/outboundBills/
+Traceback (most recent call last):
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+sqlite3.OperationalError: database is locked
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\exception.py", line 55, in inner
+    response = get_response(request)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 497, in dispatch
+    self.initial(request, *args, **kwargs)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 416, in initial
+    self.check_throttles(request)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 359, in check_throttles
+    if not throttle.allow_request(request, self):
+  File "D:\Document\code\vue\greater_wms\utils\throttle.py", line 27, in allow_request
+    i.delete()
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\base.py", line 1118, in delete
+    return collector.delete()
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\deletion.py", line 448, in delete
+    count = sql.DeleteQuery(model).delete_batch(
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\subqueries.py", line 42, in delete_batch
+    num_deleted += self.do_query(
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\subqueries.py", line 20, in do_query
+    cursor = self.get_compiler(using).execute_sql(CURSOR)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\compiler.py", line 1398, in execute_sql
+    cursor.execute(sql, params)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 103, in execute
+    return super().execute(sql, params)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 67, in execute
+    return self._execute_with_wrappers(
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 80, in _execute_with_wrappers
+    return executor(sql, params, many, context)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\utils.py", line 91, in __exit__
+    raise dj_exc_value.with_traceback(traceback) from exc_value
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+django.db.utils.OperationalError: database is locked
+[2025-06-12 14:30:51,602][django.server.log_message():187] [ERROR] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 500 185489
+[2025-06-12 14:31:15,212][django.request.log_response():241] [ERROR] Internal Server Error: /wms/outboundBills/
+Traceback (most recent call last):
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+sqlite3.OperationalError: database is locked
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\exception.py", line 55, in inner
+    response = get_response(request)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 497, in dispatch
+    self.initial(request, *args, **kwargs)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 416, in initial
+    self.check_throttles(request)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 359, in check_throttles
+    if not throttle.allow_request(request, self):
+  File "D:\Document\code\vue\greater_wms\utils\throttle.py", line 27, in allow_request
+    i.delete()
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\base.py", line 1118, in delete
+    return collector.delete()
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\deletion.py", line 448, in delete
+    count = sql.DeleteQuery(model).delete_batch(
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\subqueries.py", line 42, in delete_batch
+    num_deleted += self.do_query(
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\subqueries.py", line 20, in do_query
+    cursor = self.get_compiler(using).execute_sql(CURSOR)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\compiler.py", line 1398, in execute_sql
+    cursor.execute(sql, params)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 103, in execute
+    return super().execute(sql, params)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 67, in execute
+    return self._execute_with_wrappers(
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 80, in _execute_with_wrappers
+    return executor(sql, params, many, context)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\utils.py", line 91, in __exit__
+    raise dj_exc_value.with_traceback(traceback) from exc_value
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+django.db.utils.OperationalError: database is locked
+[2025-06-12 14:31:15,238][django.server.log_message():187] [ERROR] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 500 185489
+[2025-06-12 14:31:15,245][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:31:15,248][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:31:15,258][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:31:15,286][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:31:15,288][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:31:15,291][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:31:15,297][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:31:15,298][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:31:15,300][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:31:15,303][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:31:15,306][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:31:15,309][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:31:15,311][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:31:15,313][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:31:15,316][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:31:15,318][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:31:16,392][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 14:31:16,495][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 817
+[2025-06-12 14:31:16,517][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 14:31:16,518][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 817
+[2025-06-12 14:31:16,525][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 14:31:18,325][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 14:31:18,354][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 14:31:18,379][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 817
+[2025-06-12 14:31:18,424][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 14:31:18,428][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 14:31:21,295][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 817
+[2025-06-12 14:31:21,371][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 14:31:21,402][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 14:31:21,433][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 817
+[2025-06-12 14:31:21,469][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 817
+[2025-06-12 14:31:21,483][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 817
+[2025-06-12 14:31:21,489][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:31:21,491][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 14:31:22,167][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 817
+[2025-06-12 14:31:22,196][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 817
+[2025-06-12 15:06:16,261][django.request.log_response():241] [WARNING] Not Found: /container/out_task/
+[2025-06-12 15:06:34,995][django.request.log_response():241] [WARNING] Not Found: /container/out_task/
+[2025-06-12 15:08:20,640][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:08:20,644][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:08:20,699][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 15:08:20,729][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 434
+[2025-06-12 15:08:22,327][django.server.log_message():187] [INFO] "OPTIONS /container/out_task/ HTTP/1.1" 200 0
+[2025-06-12 15:08:28,505][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:08:28,508][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:08:28,802][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 15:08:28,830][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 434
+[2025-06-12 15:08:37,797][django.request.log_response():241] [WARNING] Not Found: /container/out_task/
+[2025-06-12 15:08:37,801][django.server.log_message():187] [WARNING] "POST /container/out_task/ HTTP/1.1" 404 50
+[2025-06-12 15:08:38,507][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:08:38,509][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:08:48,515][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:08:48,515][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:08:58,520][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:08:58,538][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:08:58,912][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 434
+[2025-06-12 15:09:08,518][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:09:08,522][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:09:08,555][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 15:09:08,581][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 434
+[2025-06-12 15:09:18,507][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:09:18,511][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:09:18,635][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 15:09:18,666][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 434
+[2025-06-12 15:09:28,519][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:09:28,525][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:09:28,569][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 15:09:28,597][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 434
+[2025-06-12 15:09:38,516][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:09:38,521][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:09:38,561][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 15:09:38,585][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 434
+[2025-06-12 15:09:48,513][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:09:48,517][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:09:48,566][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 15:09:48,600][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 434
+[2025-06-12 15:09:58,507][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:09:58,509][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:09:58,549][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 15:09:58,576][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 434
+[2025-06-12 15:10:08,513][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:10:08,517][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:10:08,571][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 15:10:08,601][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 434
+[2025-06-12 15:10:18,511][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:10:18,514][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:10:18,569][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 15:10:18,623][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 434
+[2025-06-12 15:10:28,520][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:10:28,524][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:10:28,571][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 15:10:28,603][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 434
+[2025-06-12 15:10:38,518][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:10:38,522][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:10:38,572][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 15:10:38,601][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 434
+[2025-06-12 15:10:48,520][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:10:48,524][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:10:48,576][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 15:10:48,603][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 434
+[2025-06-12 15:10:58,511][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:10:58,529][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-06-12 15:10:58,585][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-06-12 15:10:58,609][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 434
+[2025-06-12 15:10:59,938][django.server.log_message():187] [INFO] "OPTIONS /container/out_task/ HTTP/1.1" 200 0
+[2025-06-12 15:43:01,064][django.request.log_response():241] [ERROR] Internal Server Error: /wms/materials/
+Traceback (most recent call last):
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+sqlite3.OperationalError: no such column: erp_materialdetail.material_goods_code
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "D:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "D:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\mixins.py", line 40, in list
+    page = self.paginate_queryset(queryset)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\generics.py", line 171, in paginate_queryset
+    return self.paginator.paginate_queryset(queryset, self.request, view=self)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\pagination.py", line 216, in paginate_queryset
+    return list(self.page)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\core\paginator.py", line 177, in __len__
+    return len(self.object_list)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\query.py", line 376, in __len__
+    self._fetch_all()
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\query.py", line 1866, in _fetch_all
+    self._result_cache = list(self._iterable_class(self))
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\query.py", line 87, in __iter__
+    results = compiler.execute_sql(
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\compiler.py", line 1398, in execute_sql
+    cursor.execute(sql, params)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 103, in execute
+    return super().execute(sql, params)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 67, in execute
+    return self._execute_with_wrappers(
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 80, in _execute_with_wrappers
+    return executor(sql, params, many, context)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\utils.py", line 91, in __exit__
+    raise dj_exc_value.with_traceback(traceback) from exc_value
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+django.db.utils.OperationalError: no such column: erp_materialdetail.material_goods_code
+[2025-06-12 15:43:05,422][django.request.log_response():241] [ERROR] Internal Server Error: /wms/materials/
+Traceback (most recent call last):
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+sqlite3.OperationalError: no such column: erp_materialdetail.material_goods_code
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "D:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "D:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\mixins.py", line 40, in list
+    page = self.paginate_queryset(queryset)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\generics.py", line 171, in paginate_queryset
+    return self.paginator.paginate_queryset(queryset, self.request, view=self)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\pagination.py", line 216, in paginate_queryset
+    return list(self.page)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\core\paginator.py", line 177, in __len__
+    return len(self.object_list)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\query.py", line 376, in __len__
+    self._fetch_all()
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\query.py", line 1866, in _fetch_all
+    self._result_cache = list(self._iterable_class(self))
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\query.py", line 87, in __iter__
+    results = compiler.execute_sql(
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\compiler.py", line 1398, in execute_sql
+    cursor.execute(sql, params)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 103, in execute
+    return super().execute(sql, params)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 67, in execute
+    return self._execute_with_wrappers(
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 80, in _execute_with_wrappers
+    return executor(sql, params, many, context)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\utils.py", line 91, in __exit__
+    raise dj_exc_value.with_traceback(traceback) from exc_value
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "D:\Document\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+django.db.utils.OperationalError: no such column: erp_materialdetail.material_goods_code

File diff suppressed because it is too large
+ 1 - 0
templates/dist/spa/css/12.55c98dcd.css


File diff suppressed because it is too large
+ 0 - 1
templates/dist/spa/css/12.659f915f.css


File diff suppressed because it is too large
+ 1 - 0
templates/dist/spa/css/8.07a28878.css


File diff suppressed because it is too large
+ 0 - 1
templates/dist/spa/css/8.be050028.css


File diff suppressed because it is too large
+ 1 - 1
templates/dist/spa/index.html


File diff suppressed because it is too large
+ 1 - 0
templates/dist/spa/js/12.2aa51f64.js


BIN
templates/dist/spa/js/12.2aa51f64.js.gz


File diff suppressed because it is too large
+ 0 - 1
templates/dist/spa/js/12.f89c097d.js


BIN
templates/dist/spa/js/12.f89c097d.js.gz


File diff suppressed because it is too large
+ 1 - 0
templates/dist/spa/js/8.0a90d787.js


BIN
templates/dist/spa/js/8.0a90d787.js.gz


File diff suppressed because it is too large
+ 0 - 1
templates/dist/spa/js/8.e373083e.js


BIN
templates/dist/spa/js/8.e373083e.js.gz


BIN
templates/dist/spa/js/app.3ebeea24.js.gz


File diff suppressed because it is too large
+ 1 - 1
templates/dist/spa/js/app.3ebeea24.js


BIN
templates/dist/spa/js/app.c4679eb7.js.gz


+ 25 - 0
templates/src/pages/erp/erpasn.vue

@@ -154,6 +154,19 @@
                 }}</q-td
               >
             </template>
+            
+            <template v-if="props.row.id === editid">
+              <q-td key="audit_status" :props="props">{{ props.row.audit_status }}</q-td>
+            </template>
+            <template v-else-if="props.row.id !== editid">
+              <q-td key="audit_status" :props="props">{{ props.row.audit_status }}</q-td>
+            </template>
+            <template v-if="props.row.id === editid">
+              <q-td key="save_status" :props="props">{{ props.row.save_status }}</q-td>
+            </template>
+            <template v-else-if="props.row.id !== editid">
+              <q-td key="save_status" :props="props">{{ props.row.save_status }}</q-td>
+            </template>
 
             <template v-if="props.row.id === editid">
               <q-td key="date" :props="props">{{ props.row.date }}</q-td>
@@ -603,6 +616,18 @@ export default {
           field: 'department',
           align: 'center'
         },
+        {
+          name: 'audit_status',
+          label: '审核状态',
+          field: 'audit_status',
+          align: 'center'
+        },
+                {
+          name: 'save_status',
+          label: '保存状态',
+          field: 'save_status',
+          align: 'center'
+        },
         { name: 'date', label: '单据日期', field: 'date', align: 'center' },
         { name: 'creater', label: '经办人', field: 'creater', align: 'center' },
         {

+ 15 - 0
templates/src/pages/inbound/asn.vue

@@ -285,6 +285,21 @@
                     content-style="font-size: 12px"
                     >一键分拣</q-tooltip
                   >
+                </q-btn>
+                                <q-btn
+                  round
+                  flat
+                  push
+                  color="dark"
+                  icon="delete"
+                  @click="deleteData(props.row.id)"
+                >
+                  <q-tooltip
+                    content-class="bg-amber text-black shadow-4"
+                    :offset="[10, 10]"
+                    content-style="font-size: 12px"
+                    >{{ $t("delete") }}</q-tooltip
+                  >
                 </q-btn>
               </q-td>
             </template>