瀏覽代碼

修改操作为元操作

flower_mr 2 月之前
父節點
當前提交
cc90ec8057

+ 1 - 1
backend_start windows.ps1

@@ -2,4 +2,4 @@
 python manage.py makemigrations
 python manage.py migrate
 
-# daphne -b 0.0.0.0 -p 8008 greaterwms.asgi:application
+daphne -b 0.0.0.0 -p 8008 greaterwms.asgi:application

+ 11 - 0
bin/admin.py

@@ -1,3 +1,14 @@
 from django.contrib import admin
 
 # Register your models here.
+
+from .models import *
+
+admin.site.register(LocationModel)
+admin.site.register(LocationGroupModel)
+admin.site.register(LocationContainerLink)
+admin.site.register(DeviceModel)
+admin.site.register(LocationChangeLog)
+admin.site.register(base_location)
+admin.site.register(alloction_pre)
+admin.site.register(allocation_history)

+ 56 - 0
bin/algorithms.py

@@ -0,0 +1,56 @@
+import copy
+import json
+from collections import defaultdict
+
+class AllocationAlgorithm:
+    CAPACITY_MAP = {'T1':1, 'T2':2, 'T4':4, 'S4':4, 'T5':5}
+
+    @classmethod
+    def generate_plan(cls, total_pallets, layer_capacity, current_pressure):
+        def allocate(remain, path, pressure, layer_state, depth=0):
+            if remain <= 0:
+                return path, pressure
+                
+            balance_factor = 1.0 - (0.1 * min(depth, 5))
+            layer_priority = sorted(
+                enumerate(pressure),
+                key=lambda x: (x[1] * balance_factor, x[0])
+            )
+
+            for layer_idx, _ in layer_priority:
+                candidates = sorted(
+                    [(t, c) for t, c in cls.CAPACITY_MAP.items()
+                     if layer_state[layer_idx].get(t, 0) > 0],
+                    key=lambda x: (abs(x[1]-remain), -x[1])
+                )
+
+                for loc_type, cap in candidates:
+                    new_state = copy.deepcopy(layer_state)
+                    new_state[layer_idx][loc_type] -= 1
+                    
+                    new_pressure = [p-1 if p>0 else 0 for p in pressure]
+                    allocated = min(cap, remain)
+                    new_pressure[layer_idx] += allocated
+
+                    result = allocate(
+                        remain - allocated,
+                        path + [f"{layer_idx+1}_{loc_type}"],
+                        new_pressure,
+                        new_state,
+                        depth + 1
+                    )
+                    if result:
+                        return result
+            return None
+
+        return allocate(total_pallets, [], current_pressure, layer_capacity)
+
+    @staticmethod
+    def format_solution(solution):
+        result = defaultdict(lambda: defaultdict(int))
+        for item in solution:
+            parts = item.split('_')
+            if len(parts) == 2:
+                layer, loc_type = parts
+                result[layer][loc_type] += 1
+        return json.dumps(result)

+ 5 - 0
bin/exceptions.py

@@ -0,0 +1,5 @@
+class AllocationError(Exception):
+    def __init__(self, message, code=400):
+        super().__init__(message)
+        self.code = code
+        self.message = message

+ 46 - 0
bin/location_allocation.py

@@ -0,0 +1,46 @@
+from django.db import transaction
+
+import sys
+import os
+
+# 将当前脚本所在目录(bin)添加到 Python 路径
+current_dir = os.path.dirname(os.path.abspath(__file__))
+sys.path.append(current_dir)
+from .services import AllocationService
+from .exceptions import AllocationError
+from .models import *
+
+class LocationAllocation:
+    """
+    库位分配
+     functions:
+        process(container_code, start_point): 处理托盘分配
+            params: container_code: 托盘编号
+            params: start_point: 起始库位
+            return: dict
+        release(location_code): 释放库位
+            params: location_code: 库位编号
+            return: bool
+    """
+    def __init__(self):
+        self.service = AllocationService
+
+    def process(self, container_code, start_point='203'):
+        try:
+            with transaction.atomic():
+                return self.service.allocate(container_code, start_point)
+        except Exception as e:
+            raise AllocationError(f"分配失败: {str(e)}")
+
+    def release(self, location_code):
+        try:
+            location = LocationModel.objects.get(location_code=location_code)
+            link = LocationContainerLink.objects.get(
+                location=location, 
+                is_active=True
+            )
+            link.is_active = False
+            link.save()
+            return True
+        except Exception as e:
+            raise AllocationError(f"释放失败: {str(e)}")

+ 0 - 0
bin/location_allocator/__init__.py


+ 90 - 0
bin/queries.py

@@ -0,0 +1,90 @@
+from django.db import models
+from .models import *
+from container.models import *
+
+class LocationQueries:
+    """"
+    库位相关查询
+     functions:
+        get_container(container_code): 获取托盘信息
+            params: container_code: 托盘编号
+            return: ContainerListModel
+        get_active_container_details(container_id): 获取托盘详情
+            params: container_id: 托盘ID
+            return: ContainerDetailModel
+        get_active_container_details(container_id): 获取托盘详情
+            params: container_id: 托盘ID
+            return: ContainerDetailModel
+        get_batch_info(container_code): 获取托盘批次信息
+            params: container_code: 托盘编号
+            return: dict
+        get_batch_info(container_code): 获取托盘批次信息
+            params: container_code: 托盘编号
+            return: dict
+        get_group_capacity(): 获取库位组空闲容量
+            return: list
+        get_current_pressure(): 获取仓库当前工作压力
+            return: list
+        get_pallet_count(container_code): 获取托盘数量
+            params: container_code: 托盘编号
+            return: int
+    """
+    @staticmethod
+    def get_container(container_code):
+        return ContainerListModel.objects.filter(container_code=container_code).first()
+
+    @staticmethod
+    def get_active_container_details(container_id):
+        return ContainerDetailModel.objects.filter(
+            container=container_id
+        ).exclude(status=3).first()
+
+    @staticmethod
+    def get_batch_info(container_code):
+        container = ContainerListModel.objects.filter(
+            container_code=container_code
+        ).first()
+        if not container:
+            return None
+
+        detail = ContainerDetailModel.objects.filter(
+            container=container.id
+        ).exclude(status=3).first()
+        
+        return {
+            'status': detail.batch.status if detail else None,
+            'number': detail.batch.bound_number if detail else None,
+            'container': container
+        }
+
+    @staticmethod
+    def get_group_capacity():
+        groups = ['T1', 'T2', 'S4', 'T4', 'T5']
+        capacity = []
+        for layer in [1, 2, 3]:
+            layer_data = {}
+            for group in groups:
+                count = LocationGroupModel.objects.filter(
+                    group_type=group,
+                    layer=layer,
+                    status='available'
+                ).count()
+                layer_data[group] = count
+            capacity.append(layer_data)
+        return capacity
+
+    @staticmethod
+    def get_current_pressure():
+        pressure = base_location.objects.first()
+        if not pressure:
+            pressure = base_location.objects.create()
+        return [pressure.layer1_pressure, pressure.layer2_pressure, pressure.layer3_pressure]
+    
+    @staticmethod
+    def get_pallet_count(container_code):
+        container = ContainerListModel.objects.filter(
+            container_code=container_code
+        ).first()
+        if not container:
+            return 0
+        return container.details.count()

+ 45 - 0
bin/services.py

@@ -0,0 +1,45 @@
+from django.db import transaction
+from .queries import LocationQueries
+from .updates import LocationUpdates 
+from .algorithms import AllocationAlgorithm
+
+class AllocationService:
+    @classmethod
+    @transaction.atomic
+    def allocate(cls, container_code, start_point):
+        batch_info = LocationQueries.get_batch_info(container_code)
+        if not batch_info or not batch_info['number']:
+            raise ValueError("无效的容器或批次信息")
+
+        if batch_info['status'] == 1:
+            return cls._first_allocation(container_code, batch_info, start_point)
+        elif batch_info['status'] == 2:
+            return cls._subsequent_allocation(batch_info)
+        else:
+            raise ValueError("非法的批次状态")
+
+    @classmethod
+    @transaction.atomic
+    def _first_allocation(cls, container_code, batch_info, start_point):
+        total = LocationQueries.get_pallet_count(container_code)
+        layer_cap = LocationQueries.get_group_capacity()
+        pressure = LocationQueries.get_current_pressure()
+
+        solution, new_pressure = AllocationAlgorithm.generate_plan(total, layer_cap, pressure)
+        if not solution:
+            raise RuntimeError("无法生成有效分配方案")
+
+        formatted = AllocationAlgorithm.format_solution(solution)
+        LocationUpdates.save_allocation_plan(batch_info['number'], formatted, new_pressure)
+        
+        return cls._execute_allocation(formatted, start_point)
+
+    @classmethod
+    def _execute_allocation(cls, solution, start_point):
+        # 实际分配执行逻辑
+        pass
+
+    @classmethod
+    def _subsequent_allocation(cls, batch_info):
+        # 后续分配逻辑
+        pass

+ 64 - 0
bin/updates.py

@@ -0,0 +1,64 @@
+from django.db import transaction
+from .models import *
+from container.models import *
+
+class LocationUpdates:
+    """
+    库位相关更新
+     functions:
+        update_location_status(location_code, status): 更新库位状态
+        link_container(location_code, container_code): 关联托盘
+        update_batch_status(container_code, status): 更新批次状态
+        save_allocation_plan(batch_number, solution, pressure): 保存分配方案
+    """
+
+    @transaction.atomic
+    def link_container(location_code, container_code):
+        try:
+            location = LocationModel.objects.select_for_update().get(
+                location_code=location_code
+            )
+            container = ContainerListModel.objects.get(
+                container_code=container_code
+            )
+            
+            link, created = LocationContainerLink.objects.update_or_create(
+                location=location,
+                defaults={'container': container, 'is_active': True}
+            )
+            return True
+        except Exception as e:
+            raise RuntimeError(f"关联更新失败: {str(e)}")
+
+    @transaction.atomic
+    def update_batch_status(container_code, status):
+        try:
+            container = ContainerListModel.objects.get(
+                container_code=container_code
+            )
+            detail = ContainerDetailModel.objects.select_related('batch').get(
+                container=container.id,
+                status__in=[1, 2]
+            )
+            detail.batch.status = status
+            detail.batch.save()
+            return True
+        except Exception as e:
+            raise RuntimeError(f"批次状态更新失败: {str(e)}")
+
+    @transaction.atomic
+    def save_allocation_plan(batch_number, solution, pressure):
+        with transaction.atomic():
+            base_location.objects.update_or_create(
+                id=1,
+                defaults={
+                    'layer1_pressure': pressure[0],
+                    'layer2_pressure': pressure[1],
+                    'layer3_pressure': pressure[2]
+                }
+            )
+            
+            alloction_pre.objects.update_or_create(
+                batch_number=batch_number,
+                defaults={'layer_pre_type': solution}
+            )

+ 4 - 1
bound/admin.py

@@ -1,7 +1,10 @@
 from django.contrib import admin
-from .models import BoundListModel, BoundDetailModel,BoundBatchModel
+from .models import *
 
 admin.site.register(BoundListModel)
 admin.site.register(BoundDetailModel)
 admin.site.register(BoundBatchModel)
+admin.site.register(OutBoundDetailModel)
+admin.site.register(BatchLogModel)
+
 

+ 4 - 1
container/admin.py

@@ -1,7 +1,10 @@
 from django.contrib import admin
-from .models import ContainerListModel,ContainerDetailModel,ContainerOperationModel
+from .models import *
 
 admin.site.register(ContainerListModel)
 admin.site.register(ContainerDetailModel)
 admin.site.register(ContainerOperationModel)
+admin.site.register(ContainerWCSModel)
+admin.site.register(TaskModel)
+
 # Register your models here.

+ 380 - 0
container/container_operate.py

@@ -0,0 +1,380 @@
+from django.db import transaction
+from rest_framework.response import Response
+from rest_framework.views import APIView
+from django.utils import timezone
+from .models import ContainerListModel,ContainerDetailModel,ContainerOperationModel,TaskModel,ContainerWCSModel
+from bound.models import BoundBatchModel,BoundDetailModel,BoundListModel
+from .serializers import *
+
+class ContainerService:
+    """
+    托盘管理服务
+        function:
+            create_container_operation: 创建托盘操作记录
+
+    """
+    @staticmethod
+    @transaction.atomic
+    def create_container_operation(data, logger):
+     
+        # 初始化基础数据
+        data['month'] = timezone.now().strftime('%Y%m')
+        
+        # 处理容器
+        container = ContainerManager.get_or_create_container(
+            container_code=data.get('container'),
+            logger=logger
+        )
+        data['container_code'] = container.container_code
+
+        data['container'] = container.id
+
+        # 处理批次数据
+        if data.get('goods_class') == 2:
+            return BatchProcessor.handle_special_batches(data, logger)
+        return BatchProcessor.handle_normal_batches(data, logger)
+
+class ContainerManager:
+    @staticmethod
+    def get_or_create_container(container_code, logger):
+        """统一管理容器对象"""
+        if container := ContainerListModel.objects.filter(container_code=container_code).first():
+            logger.info(f"托盘 {container_code} 已存在")
+            return container
+            
+        logger.info(f"创建新托盘 {container_code}")
+        serializer = ContainerListPostSerializer(data={'container_code': container_code})
+        serializer.status = 5
+        serializer.is_valid(raise_exception=True)
+        serializer.save()
+        return ContainerListModel.objects.filter(container_code=container_code).first()
+
+class BatchProcessor:
+    @staticmethod
+    def handle_normal_batches(data, logger):
+        """标准批次处理流程"""
+        for batch in data.get('batches', []):
+            try:
+                BatchOperator.process_single_batch(data, batch, logger)
+            except Exception as e:
+                logger.error(f"批次处理失败: {str(e)}")
+                continue
+        return Response({"status": "success"})
+
+    @staticmethod
+    def handle_special_batches(data, logger):
+        """托盘组处理流程"""
+        for batch in data.get('batches', []):
+            try:
+                BatchOperator.process_single_container(data, batch, logger)
+            except Exception as e:
+                logger.error(f"托盘组处理失败: {str(e)}")
+                continue
+        return Response({"status": "success"})
+
+class BatchOperator:
+    @staticmethod
+    def process_single_container(data, batch, logger):
+        """单个批次处理托盘"""
+        # 获取批次对象
+        container_obj = ContainerManager.get_or_create_container(
+            batch.get('goods_code'), 
+            logger
+        )
+
+        # 更新批次状态
+        update_result = BatchStatusUpdater.update_container_status(
+            container_obj, 
+            5,
+            data.get('container_code'),
+        )
+        print(update_result)
+        # 创建托盘关联记录
+
+        RecordCreator.create_container_related_records(
+            data=data,
+            container_obj=container_obj
+        )
+
+    @staticmethod
+    def process_single_batch(data, batch, logger):
+        """单个批次处理批次"""
+        # 获取批次对象
+        bound_obj = BatchValidator.get_valid_batch(
+            batch.get('goods_code'), 
+            logger
+        )
+        
+        # 更新批次状态
+        update_result = BatchStatusUpdater.update_status(
+            bound_obj, 
+            batch['goods_qty'] * batch['goods_group'],
+            logger
+        )
+        
+        # 创建关联记录
+        RecordCreator.create_related_records(
+            data=data,
+            bound_obj=bound_obj,
+            qty_diff=update_result['added_qty'],
+            expected_qty=update_result['expected_qty'],
+            logger=logger
+        )
+
+class BatchValidator:
+    @staticmethod
+    def get_valid_batch(bound_number, logger):
+        """批次校验模块"""
+        if not (bound_obj := BoundBatchModel.objects.filter(bound_number=bound_number).first()):
+            logger.error(f"批次 {bound_number} 不存在")
+            raise ValueError("无效批次号")
+        return bound_obj
+
+class BatchStatusUpdater:
+    @staticmethod
+    def update_status(bound_obj, added_qty, logger):
+        """批次状态管理"""
+        last_qty = bound_obj.goods_in_qty
+        bound_obj.goods_in_qty += added_qty
+        
+        if bound_obj.goods_in_qty >= bound_obj.goods_qty:
+            FullBatchHandler.mark_as_completed(bound_obj, logger)
+        else:
+            bound_obj.status = 0
+        
+        bound_obj.save()
+        return {
+            'last_qty': last_qty,
+            'added_qty': added_qty,
+            'expected_qty': bound_obj.goods_qty
+        }
+    @staticmethod
+    def update_container_status(container_obj, status, container_code):
+        """批次状态管理""" 
+    
+        container_obj.status = status
+        container_obj.available = False
+        container_obj.current_location = '托盘'+str(container_code)
+        container_obj.save()
+        return {
+            'last_qty': 1,
+            'added_qty': 1,
+            'expected_qty': 1
+        }
+  
+
+class FullBatchHandler:
+    @staticmethod
+    def mark_as_completed(bound_obj, logger):
+        """满批次处理"""
+        # bound_obj.goods_in_qty = bound_obj.goods_qty
+        bound_obj.status = 1
+        BatchRelationUpdater.update_related_records(bound_obj, logger)
+
+class BatchRelationUpdater:
+    @staticmethod
+    def update_related_records(bound_obj, logger):
+        """更新关联单据"""
+        if detail := BoundDetailModel.objects.filter(bound_batch=bound_obj.id).first():
+            detail.status = 1
+            detail.save()
+            CompletionChecker.check_list_completion(detail.bound_list_id, logger)
+
+class CompletionChecker:
+    @staticmethod
+    def check_list_completion(list_id, logger):
+        """完成度检查"""
+        completed = BoundDetailModel.objects.filter(bound_list=list_id, status=1).count()
+        total = BoundDetailModel.objects.filter(bound_list=list_id).count()
+        
+        if completed == total:
+            ListStatusUpdater.update_list_status(list_id, 102, logger)
+
+class ListStatusUpdater:
+    @staticmethod
+    def update_list_status(list_id, status, logger):
+        """更新单据状态"""
+        if list_obj := BoundListModel.objects.filter(id=list_id).first():
+            list_obj.bound_status = status
+            list_obj.save()
+            logger.info("入库申请全部完成")
+
+class RecordCreator:
+    @staticmethod
+    def create_container_related_records(data, container_obj, qty_diff=1, expected_qty=1):
+        """记录创建批次"""
+        # 生成明细记录
+        detail_data = RecordBuilder.build_detail_data_container_group(
+            data=data,
+            container_obj=container_obj,
+            qty_diff=qty_diff
+        )
+
+        DetailRecordCreator.create_container_related_records(detail_data)
+        
+        # 生成操作记录
+        operation_data = RecordBuilder.build_operation_data_container_group(
+            detail_data=detail_data,
+            qty_diff=qty_diff,
+            expected_qty=expected_qty
+        )
+
+        OperationRecordCreator.create_container_related_operation_records(operation_data)
+
+    @staticmethod
+    def create_related_records(data, bound_obj, qty_diff, expected_qty, logger):
+        """记录创建批次"""
+        # 生成明细记录
+        detail_data = RecordBuilder.build_detail_data(
+            data=data,
+            bound_obj=bound_obj,
+            qty_diff=qty_diff
+        )
+        DetailRecordCreator.create_record(detail_data)
+        
+        # 生成操作记录
+        operation_data = RecordBuilder.build_operation_data(
+            detail_data=detail_data,
+            qty_diff=qty_diff,
+            expected_qty=expected_qty
+        )
+        OperationRecordCreator.create_operation_record(operation_data)
+
+
+
+class RecordBuilder:
+    @staticmethod
+    def build_detail_data(data, bound_obj, qty_diff):
+        """构建明细数据结构"""
+        return {
+            "container": data['container'],
+            "batch": bound_obj.id,
+            "goods_code": bound_obj.goods_code,
+            "goods_desc": bound_obj.goods_desc,
+            "goods_qty": qty_diff,
+            "goods_weight": bound_obj.goods_weight,
+            "status": 1,
+            "month": data['month'],
+            "creater": data.get('creater', 'zl')
+        }
+    
+    @staticmethod
+    def build_detail_data_container_group(data, container_obj, qty_diff=1):
+        """构建明细数据结构"""
+        return {
+            "container": data['container'],
+            "goods_code": container_obj.container_code,
+            "goods_desc": '托盘组',
+            "goods_qty": qty_diff,
+            "goods_weight": 0,
+            "status": 1,
+            "month": data['month'],
+            "creater": data.get('creater', 'zl')
+        }
+
+    @staticmethod
+    def build_operation_data(detail_data, qty_diff, expected_qty):
+        """构建操作记录数据"""
+        note_type = "(数量不一致)" if qty_diff != expected_qty else ""
+        return {
+            "month": detail_data['month'],
+            "container": detail_data['container'],
+            "operation_type": 'container',
+            "batch": detail_data['batch'],
+            "goods_code": detail_data['goods_code'],
+            "goods_desc": detail_data['goods_desc'],
+            "goods_qty": qty_diff,
+            "goods_weight": detail_data['goods_weight'],
+            "operator": detail_data['creater'],
+            "timestamp": timezone.now(),
+            "from_location": "container",
+            "to_location": "container",
+            "memo": f"每组数目{detail_data['goods_qty']}入库PDA组盘{note_type}{detail_data['goods_code']}数量{qty_diff}"
+        }
+    
+    def build_operation_data_container_group(detail_data, qty_diff, expected_qty):
+        """构建操作记录数据"""
+
+        return {
+            "month": detail_data['month'],
+            "container": detail_data['container'],
+            "operation_type": 'container',
+            "goods_code": detail_data['goods_code'],
+            "goods_desc": detail_data['goods_desc'],
+            "goods_qty": qty_diff,
+            "goods_weight": detail_data['goods_weight'],
+            "operator": detail_data['creater'],
+            "timestamp": timezone.now(),
+            "from_location": "container",
+            "to_location": "container",
+            "memo": f"托盘组下的:{detail_data['goods_code']}合盘"
+        }
+
+class DetailRecordCreator:
+    @staticmethod
+    def create_record(data):
+        """统一创建明细记录"""
+        serializer = ContainerDetailPostSerializer(data=data)
+        serializer.is_valid(raise_exception=True)
+        serializer.save()
+
+    def create_container_related_records(data):
+        """记录创建批次"""
+        # 生成明细记录
+        container_obj = ContainerListModel.objects.filter(id=data['container']).first()
+        container_obj.status = 5
+        container_obj.save()
+        if ContainerDetailModel.objects.filter(container=container_obj,goods_code=data['goods_code'],status=1).first():
+            return 
+        ContainerDetailModel.objects.create(
+            container=container_obj,
+            goods_code=data['goods_code'],
+            goods_desc=data['goods_desc'],
+            goods_qty=data['goods_qty'],
+            goods_weight=data['goods_weight'],
+            goods_class=2,
+            status=data['status'],
+            month=data['month'],
+            creater=data['creater']
+        )
+
+class OperationRecordCreator:
+    @staticmethod
+    def create_operation_record(data):
+        """统一创建操作记录"""
+        serializer = ContainerOperationPostSerializer(data=data)
+        serializer.is_valid(raise_exception=True)
+        serializer.save()
+    @staticmethod
+
+    def create_container_related_operation_records(data):
+        container_obj = ContainerListModel.objects.filter(id=data['container']).first()
+
+        if ContainerOperationModel.objects.filter(container_id=container_obj.id,goods_code=data['goods_code'],is_delete=False).first():
+            return 
+        ContainerOperationModel.objects.create(      
+            month=data['month'],
+            container_id=container_obj.id,
+            operation_type=data['operation_type'],
+            bound_id=None,
+            goods_code=data['goods_code'],
+            goods_desc=data['goods_desc'],
+            goods_qty=data['goods_qty'],
+            goods_weight=data['goods_weight'],
+            operator=data['operator'],
+            timestamp=data['timestamp'],
+            from_location=data['from_location'],
+            to_location=data['to_location'],
+            memo=data['memo']
+        )
+
+# 最终视图类
+class OperationView(APIView):
+    def create(self, request, *args, **kwargs):
+        try:
+            return ContainerService.create_container_operation(
+                data=request.data,
+                logger=self.get_logger()  # 假设有日志方法
+            )
+        except Exception as e:
+            return Response({"error": str(e)}, status=400)

+ 30 - 0
container/migrations/0013_containerdetailmodel_goods_class_and_more.py

@@ -0,0 +1,30 @@
+# Generated by Django 4.1.2 on 2025-05-14 15:11
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('bound', '0011_boundlistmodel_audit_status'),
+        ('container', '0012_alter_containerlistmodel_container_code'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='containerdetailmodel',
+            name='goods_class',
+            field=models.IntegerField(choices=[(1, '成品'), (2, '设备'), (3, '成品')], default=1, verbose_name='货品类别'),
+        ),
+        migrations.AlterField(
+            model_name='containerdetailmodel',
+            name='batch',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='bound.boundbatchmodel', verbose_name='批次'),
+        ),
+        migrations.AlterField(
+            model_name='containerlistmodel',
+            name='status',
+            field=models.IntegerField(choices=[(0, '空置'), (1, '入库中'), (2, '在库'), (3, '出库中'), (4, '已出库'), (5, '空托盘组')], default=0, verbose_name='托盘状态'),
+        ),
+    ]

+ 20 - 0
container/migrations/0014_alter_containeroperationmodel_batch.py

@@ -0,0 +1,20 @@
+# Generated by Django 4.1.2 on 2025-05-14 15:25
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('bound', '0011_boundlistmodel_audit_status'),
+        ('container', '0013_containerdetailmodel_goods_class_and_more'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='containeroperationmodel',
+            name='batch',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='bound.boundbatchmodel', verbose_name='批次'),
+        ),
+    ]

+ 18 - 0
container/migrations/0015_containerlistmodel_available.py

@@ -0,0 +1,18 @@
+# Generated by Django 4.1.2 on 2025-05-14 23:12
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('container', '0014_alter_containeroperationmodel_batch'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='containerlistmodel',
+            name='available',
+            field=models.BooleanField(default=True, verbose_name='可用'),
+        ),
+    ]

+ 12 - 4
container/models.py

@@ -10,12 +10,14 @@ class ContainerListModel(models.Model):
         (1, '入库中'),
         (2, '在库'),
         (3, '出库中'),
-        (4, '已出库')
+        (4, '已出库'),
+        (5, '空托盘组')
     )
    
     container_code = models.IntegerField( verbose_name='托盘编号',unique=True)
     current_location = models.CharField(max_length=50, verbose_name='当前库位', default='N/A')
     target_location = models.CharField(max_length=50, verbose_name='目标库位', default='N/A')
+    available= models.BooleanField(default=True, verbose_name='可用')
     status = models.IntegerField(choices=CONTAINER_STATUS, default=0, verbose_name='托盘状态')
     last_operation = models.DateTimeField(auto_now=True, verbose_name='最后操作时间')
 
@@ -33,15 +35,21 @@ class ContainerDetailModel(models.Model):
         (2, '在库'),
         (3, '已出库')
     )
+    BATCH_CLASS = (
+        (1, '成品'),
+        (2, '设备'),
+        (3, '成品'),
+    )
     month = models.IntegerField(verbose_name='月份')
     container = models.ForeignKey(ContainerListModel, on_delete=models.CASCADE, related_name='details')
-    batch = models.ForeignKey(BoundBatchModel, on_delete=models.CASCADE, verbose_name='批次')
+    batch = models.ForeignKey(BoundBatchModel, on_delete=models.CASCADE, verbose_name='批次',blank=True, null=True)
+    goods_class = models.IntegerField(verbose_name='货品类别',choices=BATCH_CLASS, default=1)
     goods_code = models.CharField(max_length=50, verbose_name='货品编码')
     goods_desc = models.CharField(max_length=100, verbose_name='货品描述')
     goods_qty = models.IntegerField(verbose_name='数量')
     goods_out_qty = models.IntegerField(verbose_name='出库数量', default=0)
     goods_weight = models.DecimalField(max_digits=10, decimal_places=3, verbose_name='重量')
-    status = models.IntegerField(choices=BATCH_STATUS,default=0, verbose_name='状态')           # 0: 未使用 1: 使用中 2: 已出库
+    status = models.IntegerField(choices=BATCH_STATUS,default=0, verbose_name='状态')          
     creater = models.CharField(max_length=50, verbose_name='创建人')
     create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
     update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
@@ -68,7 +76,7 @@ class ContainerOperationModel(models.Model):
     operation_type = models.CharField(max_length=20, choices=OPERATION_TYPES, verbose_name='操作类型')
     bound_id = models.IntegerField(verbose_name='出库申请', null=True, blank=True)
 
-    batch = models.ForeignKey(BoundBatchModel, on_delete=models.CASCADE, verbose_name='批次')
+    batch = models.ForeignKey(BoundBatchModel, on_delete=models.CASCADE, verbose_name='批次',null=True, blank=True)
     goods_code = models.CharField(max_length=50, verbose_name='货品编码')
     goods_desc = models.CharField(max_length=100, verbose_name='货品描述')
     goods_qty = models.IntegerField(verbose_name='数量')

+ 2 - 2
container/serializers.py

@@ -79,7 +79,7 @@ class ContainerDetailPostSerializer(serializers.ModelSerializer):
     batch = serializers.PrimaryKeyRelatedField(queryset=BoundBatchModel.objects.all(),
     help_text='关联的批次',
     error_messages = {
-        'null': '请选择关联的批次',
+        
         'does_not_exist': '关联的批次不存在',
         'incorrect_type': '关联的批次格式错误'
     },
@@ -152,7 +152,7 @@ class ContainerOperationPostSerializer(serializers.ModelSerializer):
         'does_not_exist': '关联的批次不存在',
         'incorrect_type': '关联的批次格式错误'
     },
-    required=True, validators=[datasolve.data_validate])
+    required=False, validators=[datasolve.data_validate])
     goods_code = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
     goods_desc = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
     goods_qty = serializers.IntegerField(read_only=False, required=True, validators=[datasolve.data_validate])

+ 2 - 140
container/views.py

@@ -722,7 +722,6 @@ class ContainerWCSViewSet(viewsets.ModelViewSet):
                 container_obj.status = 3
                 container_obj.save()
 
-   
 
             return True
         except Exception as e:
@@ -820,145 +819,8 @@ class ContainerDetailViewSet(viewsets.ModelViewSet):
 
     def create(self, request, *args, **kwargs):
         data = self.request.data 
-        order_month = str(timezone.now().strftime('%Y%m'))
-        data['month'] = order_month
-        container_code = data.get('container')
-        batches = data.get('batches', [])  # 确保有默认空列表
-        print('扫描到的托盘编码', container_code)
-        
-        # 处理托盘对象
-        container_obj = ContainerListModel.objects.filter(container_code=container_code).first()
-        if container_obj:
-            data['container'] = container_obj.id
-            logger.info(f"托盘 {container_code} 已存在")
-    
-        else:
-            logger.info(f"托盘 {container_code} 不存在,创建托盘对象")
-            serializer_list = ContainerListPostSerializer(data={'container_code': container_code})
-            serializer_list.is_valid(raise_exception=True)
-            serializer_list.save()
-            data['container'] = serializer_list.data.get('id')
-        
-        # 循环处理每个批次
-        for batch in batches:
-            bound_number = batch.get('goods_code')
-            goods_group_qty = batch.get('goods_qty',0)
-            goods_group_number = batch.get('goods_group',0)
-            goods_qty = goods_group_number * goods_group_qty
-
-            # 查询商品对象
-            bound_obj = BoundBatchModel.objects.filter(bound_number=bound_number).first()
-
-            if not bound_obj:
-                # 如果商品不存在,返回错误,这里暂时在程序中进行提醒,后续需要改为前端弹窗提醒
-                logger.error(f"批次 {bound_number} 不存在")
-                # 跳出此次循环
-                continue
-                # return Response({"error": f"商品编码 {bound_number} 不存在"}, status=400)
-            # 3. 更新批次数据(根据业务规则)
-            try:
-                last_qty = bound_obj.goods_in_qty
-                bound_obj.goods_in_qty += goods_qty
-                if bound_obj.goods_in_qty >= bound_obj.goods_qty:
-                    bound_obj.goods_in_qty = bound_obj.goods_qty
-                    bound_obj.status = 1 # 批次状态为组盘完成
-                    print('批次id',bound_obj.id) 
-                    bound_detail_obj = BoundDetailModel.objects.filter(bound_batch=bound_obj.id).first()
-                    if bound_detail_obj:
-                        bound_detail_obj.status = 1
-                        bound_detail_obj.save()
-                        print('入库申请id',bound_detail_obj.bound_list_id)
-                        # 入库申请全部批次入库完成
-                        bound_batch_all = BoundDetailModel.objects.filter(bound_list=bound_detail_obj.bound_list_id).all()
-                        if bound_batch_all.count() == bound_batch_all.filter(status=1).count():
-                            bound_list_obj = BoundListModel.objects.filter(id=bound_detail_obj.bound_list_id).first()
-                            print('当前状态',bound_list_obj.bound_status)
-                            bound_list_obj.bound_status = 102
-                            print('更新状态',bound_list_obj.bound_status)
-                            bound_list_obj.save()
-                            print('入库申请全部批次组盘完成')
-                        else:
-                            print('入库申请部分批次组盘完成')
-                else:
-                    bound_obj.status = 0
-                
-                bound_obj.save()  # 保存到数据库
-                # 创建托盘详情记录(每个批次独立)
-                print('新增个数',bound_obj.goods_in_qty-last_qty)
-                if bound_obj.goods_in_qty-last_qty == goods_qty:
-                    detail_data = {
-                        "container": data['container'],  # 托盘ID
-                        "batch": bound_obj.id,  # 外键关联批次
-                        "goods_code": bound_obj.goods_code,
-                        "goods_desc": bound_obj.goods_desc,
-                        "goods_qty": goods_qty,
-                        "goods_weight": bound_obj.goods_weight,
-                        "status": 1,
-                        "month": data['month'],
-                        "creater": data.get('creater', 'zl')  # 默认值兜底
-                    }
-                    serializer = self.get_serializer(data=detail_data)
-                    serializer.is_valid(raise_exception=True)
-                    serializer.save()  # 必须保存到数据库
-                    operate_data = {
-                        "month" : data['month'],
-                        "container": data['container'],  # 托盘ID
-                        "operation_type" : 'container',
-                        "batch" : bound_obj.id,  # 外键关联批次
-                        "goods_code": bound_obj.goods_code,
-                        "goods_desc": bound_obj.goods_desc,
-                        "goods_qty": goods_qty,
-                        "goods_weight": bound_obj.goods_weight,
-                        "operator": data.get('creater', 'zl'),  # 默认值兜底
-                        "timestamp": timezone.now(),
-                        "from_location": "container",
-                        "to_location": "container",
-                        "memo": "每组数目"+str(goods_group_qty)+"入库PDA组盘"+str(bound_obj.goods_code)+"数量"+str(goods_qty)
-                    }
-                    serializer_operate = ContainerOperationPostSerializer(data=operate_data)
-                    serializer_operate.is_valid(raise_exception=True)
-                    serializer_operate.save()  # 必须保存到数据库
-
-                elif bound_obj.goods_in_qty-last_qty > 0:
-                    print('批次数量不一致')
-                    detail_data = {
-                        "container": data['container'],  # 托盘ID
-                        "batch": bound_obj.id,  # 外键关联批次
-                        "goods_code": bound_obj.goods_code,
-                        "goods_desc": bound_obj.goods_desc,
-                        "goods_qty": bound_obj.goods_in_qty-last_qty,
-                        "goods_weight": bound_obj.goods_weight,
-                        "status": 1,
-                        "month": data['month'],
-                        "creater": data.get('creater', 'zl')  # 默认值兜底
-                    }
-                    serializer = self.get_serializer(data=detail_data)
-                    serializer.is_valid(raise_exception=True)
-                    serializer.save()  # 必须保存到数据库
-                    operate_data = {
-                        "month" : data['month'],
-                        "container": data['container'],  # 托盘ID
-                        "operation_type" : 'container',
-                        "batch" : bound_obj.id,  # 外键关联批次
-                        "goods_code": bound_obj.goods_code,
-                        "goods_desc": bound_obj.goods_desc,
-                        "goods_qty": bound_obj.goods_in_qty-last_qty,
-                        "goods_weight": bound_obj.goods_weight,
-                        "operator": data.get('creater', 'zl'),  # 默认值兜底
-                        "timestamp": timezone.now(),
-                        "from_location": "container",
-                        "to_location": "container",
-                        "memo": "每组数目"+str(goods_group_qty)+"入库PDA组盘(数量不一致)"+str(bound_obj.goods_code)+"数量"+str(goods_qty)
-                    }
-                    serializer_operate = ContainerOperationPostSerializer(data=operate_data)
-                    serializer_operate.is_valid(raise_exception=True)
-                    serializer_operate.save()  # 必须保存到数据库
-                else :
-                    print('重复组盘')
-                    
-            except Exception as e:
-                print(f"更新批次 {bound_number} 失败: {str(e)}")
-                continue
+        from .container_operate import ContainerService
+        ContainerService.create_container_operation(data,logger=logger)
 
         # 将处理后的数据返回(或根据业务需求保存到数据库)
         res_data={

+ 28 - 0
data_base/test_location.py

@@ -0,0 +1,28 @@
+# generate_locations.py
+import os
+import django
+import sys
+
+def setup_django():
+    # 使用原始字符串处理Windows路径
+    project_path = "D:/Document/code/vue/greater_wms"
+    sys.path.append(project_path)
+    # 根据实际目录名设置
+    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'greaterwms.settings')
+    django.setup()
+
+def main():
+
+    from bin.location_allocation import LocationAllocation
+    from bin.exceptions import AllocationError
+    allocator = LocationAllocation()
+
+    try:
+        result = allocator.process('12345')
+        print('result:', result)
+    except AllocationError as e:
+        print('error:', e)
+
+if __name__ == "__main__":
+    setup_django()
+    main()

+ 163 - 0
logs/error.log

@@ -5497,3 +5497,166 @@ Traceback (most recent call last):
     data['bound_batch_number'] = OutBatchModel.objects.get(id=data['bound_batch']).batch_number.id
 KeyError: 'bound_batch'
 [2025-05-12 16:55:52,916][django.server.log_message():187] [ERROR] "POST /bound/outdetail/ HTTP/1.1" 500 112485
+[2025-05-13 23:00:48,098][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\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 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-05-13 23:00:53,159][django.request.log_response():241] [ERROR] Internal Server Error: /wms/inboundBills/
+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\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 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-05-14 15:05:51,991][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+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 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\container\views.py", line 822, in create
+    from .container_operate import ContainerService
+  File "D:\Document\code\vue\greater_wms\container\container_operate.py", line 309
+    month=data['month'],
+    ^
+SyntaxError: keyword argument repeated
+[2025-05-14 15:05:51,995][django.server.log_message():187] [ERROR] "POST /container/detail/ HTTP/1.1" 500 111433
+[2025-05-14 23:10:24,786][django.request.log_response():241] [ERROR] Internal Server Error: /container/container_wcs/
+[2025-05-14 23:10:24,787][django.server.log_message():187] [ERROR] "GET /container/container_wcs/ HTTP/1.1" 500 60

+ 786 - 0
logs/server.log

@@ -16946,3 +16946,789 @@ KeyError: 'bound_batch'
 [2025-05-13 15:11:18,633][django.server.log_message():187] [INFO] "GET /bin/?layer=1&warehouse_code=W01&max_page=1000&shelf_name=A%E5%8C%BA%E8%B4%A7%E6%9E%B6 HTTP/1.1" 200 180389
 [2025-05-13 15:11:35,184][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
 [2025-05-13 15:11:35,207][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 19:53:16,767][django.server.log_message():187] [INFO] "OPTIONS /staff/?staff_name=1 HTTP/1.1" 200 0
+[2025-05-13 19:53:16,767][django.server.log_message():187] [INFO] "OPTIONS /warehouse/multiple/?max_page=30 HTTP/1.1" 200 0
+[2025-05-13 19:53:16,767][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-13 19:53:16,768][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-13 19:53:16,803][django.server.log_message():187] [INFO] "GET /warehouse/multiple/?max_page=30 HTTP/1.1" 200 52
+[2025-05-13 19:53:16,805][django.server.log_message():187] [INFO] "GET /staff/?staff_name=1 HTTP/1.1" 200 51
+[2025-05-13 19:53:16,805][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 51
+[2025-05-13 19:53:16,816][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 51
+[2025-05-13 19:53:27,697][django.server.log_message():187] [INFO] "OPTIONS /register/ HTTP/1.1" 200 0
+[2025-05-13 19:53:28,059][django.server.log_message():187] [INFO] "POST /register/ HTTP/1.1" 200 210
+[2025-05-13 19:53:28,091][django.server.log_message():187] [INFO] "GET /staff/?staff_name=1 HTTP/1.1" 200 307
+[2025-05-13 19:53:28,875][django.server.log_message():187] [INFO] "GET /warehouse/multiple/?max_page=30 HTTP/1.1" 200 52
+[2025-05-13 19:53:28,927][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 19:53:28,960][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 19:53:28,985][django.server.log_message():187] [INFO] "GET /staff/?staff_name=1 HTTP/1.1" 200 307
+[2025-05-13 19:53:30,741][django.server.log_message():187] [INFO] "OPTIONS /bin/?layer=1&warehouse_code=W01&max_page=1000&shelf_name=A%E5%8C%BA%E8%B4%A7%E6%9E%B6 HTTP/1.1" 200 0
+[2025-05-13 19:53:30,778][django.server.log_message():187] [INFO] "GET /bin/?layer=1&warehouse_code=W01&max_page=1000&shelf_name=A%E5%8C%BA%E8%B4%A7%E6%9E%B6 HTTP/1.1" 200 52
+[2025-05-13 19:53:31,649][django.server.log_message():187] [INFO] "OPTIONS /warehouse/boundcodetype/ HTTP/1.1" 200 0
+[2025-05-13 19:53:31,649][django.server.log_message():187] [INFO] "OPTIONS /warehouse/boundtype/ HTTP/1.1" 200 0
+[2025-05-13 19:53:31,649][django.server.log_message():187] [INFO] "OPTIONS /warehouse/department/ HTTP/1.1" 200 0
+[2025-05-13 19:53:31,649][django.server.log_message():187] [INFO] "OPTIONS /warehouse/boundbusiness/ HTTP/1.1" 200 0
+[2025-05-13 19:53:31,650][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 0
+[2025-05-13 19:53:31,701][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 52
+[2025-05-13 19:53:31,753][django.server.log_message():187] [INFO] "GET /warehouse/department/ HTTP/1.1" 200 52
+[2025-05-13 19:53:31,795][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 52
+[2025-05-13 19:53:31,819][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 52
+[2025-05-13 19:53:31,843][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 52
+[2025-05-13 19:53:33,518][django.server.log_message():187] [INFO] "GET /bin/?layer=1&warehouse_code=W01&max_page=1000&shelf_name=A%E5%8C%BA%E8%B4%A7%E6%9E%B6 HTTP/1.1" 200 52
+[2025-05-13 19:53:35,564][django.server.log_message():187] [INFO] "GET /bin/?layer=1&warehouse_code=W01&max_page=1000&shelf_name=A%E5%8C%BA%E8%B4%A7%E6%9E%B6 HTTP/1.1" 200 52
+[2025-05-13 19:54:17,981][django.server.log_message():187] [INFO] "GET /bin/?layer=1&warehouse_code=W01&max_page=1000&shelf_name=A%E5%8C%BA%E8%B4%A7%E6%9E%B6 HTTP/1.1" 200 180082
+[2025-05-13 19:54:23,867][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-13 19:54:23,900][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-13 19:54:23,944][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 52
+[2025-05-13 19:54:23,944][django.server.log_message():187] [INFO] "GET /warehouse/department/ HTTP/1.1" 200 2858
+[2025-05-13 19:54:23,976][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-13 19:54:28,665][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 0
+[2025-05-13 19:54:28,828][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-13 19:54:28,849][django.server.log_message():187] [INFO] "GET /warehouse/department/ HTTP/1.1" 200 2858
+[2025-05-13 19:54:28,906][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-13 19:54:28,928][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 52
+[2025-05-13 19:54:28,928][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-13 19:54:29,317][django.server.log_message():187] [INFO] "OPTIONS /container/task/?page=1&page_size=11 HTTP/1.1" 200 0
+[2025-05-13 19:54:29,338][django.server.log_message():187] [INFO] "GET /container/task/?page=1&page_size=11 HTTP/1.1" 200 52
+[2025-05-13 19:54:30,212][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-13 19:54:30,212][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-13 19:54:30,237][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 52
+[2025-05-13 19:54:30,310][django.server.log_message():187] [INFO] "GET /warehouse/department/ HTTP/1.1" 200 2858
+[2025-05-13 19:54:30,314][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-13 19:54:32,048][django.server.log_message():187] [INFO] "OPTIONS /bound/list/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 0
+[2025-05-13 19:54:32,048][django.server.log_message():187] [INFO] "OPTIONS /warehouse/department/?max_page=1000 HTTP/1.1" 200 0
+[2025-05-13 19:54:32,049][django.server.log_message():187] [INFO] "OPTIONS /warehouse/status/ HTTP/1.1" 200 0
+[2025-05-13 19:54:32,117][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-13 19:54:32,192][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-13 19:54:32,200][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-13 19:54:32,219][django.server.log_message():187] [INFO] "GET /warehouse/department/?max_page=1000 HTTP/1.1" 200 9376
+[2025-05-13 19:54:32,306][django.server.log_message():187] [INFO] "GET /warehouse/status/ HTTP/1.1" 200 600
+[2025-05-13 19:54:32,308][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 52
+[2025-05-13 19:55:02,935][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 52
+[2025-05-13 19:55:03,016][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-13 19:55:03,043][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-13 19:55:03,088][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-13 19:55:03,092][django.server.log_message():187] [INFO] "GET /warehouse/department/ HTTP/1.1" 200 2858
+[2025-05-13 19:55:08,911][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 19:55:08,911][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 19:56:09,751][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 52
+[2025-05-13 19:56:09,752][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-13 19:56:09,779][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-13 19:56:09,793][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-13 19:56:09,834][django.server.log_message():187] [INFO] "GET /warehouse/department/?max_page=1000 HTTP/1.1" 200 9376
+[2025-05-13 19:56:09,856][django.server.log_message():187] [INFO] "GET /warehouse/status/ HTTP/1.1" 200 600
+[2025-05-13 19:56:48,937][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 19:56:48,961][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 19:57:41,491][django.server.log_message():187] [INFO] "OPTIONS /warehouse/department/?page=1 HTTP/1.1" 200 0
+[2025-05-13 19:57:41,538][django.server.log_message():187] [INFO] "GET /warehouse/department/?page=1 HTTP/1.1" 200 2858
+[2025-05-13 19:57:44,250][django.server.log_message():187] [INFO] "OPTIONS /warehouse/boundcodetype/?page=1 HTTP/1.1" 200 0
+[2025-05-13 19:57:44,272][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/?page=1 HTTP/1.1" 200 250
+[2025-05-13 19:58:08,268][django.server.log_message():187] [INFO] "GET /bin/?layer=1&warehouse_code=W01&max_page=1000&shelf_name=A%E5%8C%BA%E8%B4%A7%E6%9E%B6 HTTP/1.1" 200 180082
+[2025-05-13 19:58:09,793][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-13 19:58:09,863][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-13 19:58:09,870][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-13 19:58:09,886][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 52
+[2025-05-13 19:58:09,899][django.server.log_message():187] [INFO] "GET /warehouse/department/ HTTP/1.1" 200 2858
+[2025-05-13 19:58:11,321][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 52
+[2025-05-13 19:58:11,323][django.server.log_message():187] [INFO] "GET /warehouse/department/?max_page=1000 HTTP/1.1" 200 9376
+[2025-05-13 19:58:11,356][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-13 19:58:11,397][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-13 19:58:11,425][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-13 19:58:11,462][django.server.log_message():187] [INFO] "GET /warehouse/status/ HTTP/1.1" 200 600
+[2025-05-13 19:58:28,919][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 19:58:28,985][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 19:58:49,415][django.server.log_message():187] [INFO] "OPTIONS /staff/?page=1 HTTP/1.1" 200 0
+[2025-05-13 19:58:49,446][django.server.log_message():187] [INFO] "GET /staff/?page=1 HTTP/1.1" 200 777
+[2025-05-13 19:58:52,660][django.server.log_message():187] [INFO] "GET /staff/?page=1 HTTP/1.1" 200 777
+[2025-05-13 19:58:55,486][django.server.log_message():187] [INFO] "GET /staff/?page=1 HTTP/1.1" 200 777
+[2025-05-13 19:58:59,433][django.server.log_message():187] [INFO] "OPTIONS /staff/type/?page=1 HTTP/1.1" 200 0
+[2025-05-13 19:58:59,468][django.server.log_message():187] [INFO] "GET /staff/type/?page=1 HTTP/1.1" 200 951
+[2025-05-13 19:59:19,245][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-13 19:59:19,271][django.server.log_message():187] [INFO] "GET /warehouse/department/ HTTP/1.1" 200 2858
+[2025-05-13 19:59:19,291][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 52
+[2025-05-13 19:59:19,303][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-13 19:59:19,335][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-13 19:59:21,151][django.server.log_message():187] [INFO] "GET /bin/?layer=1&warehouse_code=W01&max_page=1000&shelf_name=A%E5%8C%BA%E8%B4%A7%E6%9E%B6 HTTP/1.1" 200 180082
+[2025-05-13 19:59:35,209][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 52
+[2025-05-13 19:59:35,230][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-13 19:59:35,261][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-13 19:59:35,355][django.server.log_message():187] [INFO] "GET /warehouse/department/?max_page=1000 HTTP/1.1" 200 9376
+[2025-05-13 19:59:35,356][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-13 19:59:35,378][django.server.log_message():187] [INFO] "GET /warehouse/status/ HTTP/1.1" 200 600
+[2025-05-13 20:00:08,930][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:00:08,964][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:00:13,208][django.server.log_message():187] [INFO] "OPTIONS /bound/list/ HTTP/1.1" 200 0
+[2025-05-13 20:00:13,262][django.server.log_message():187] [INFO] "POST /bound/list/ HTTP/1.1" 200 474
+[2025-05-13 20:00:13,370][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 450
+[2025-05-13 20:01:48,825][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-13 20:01:48,825][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-13 20:01:48,897][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:01:48,923][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:02:03,982][django.server.log_message():187] [INFO] "OPTIONS /login/ HTTP/1.1" 200 0
+[2025-05-13 20:02:04,128][django.server.log_message():187] [INFO] "POST /login/ HTTP/1.1" 200 159
+[2025-05-13 20:02:06,115][django.server.log_message():187] [INFO] "OPTIONS /staff/?staff_name=PDA1 HTTP/1.1" 200 0
+[2025-05-13 20:02:06,115][django.server.log_message():187] [INFO] "OPTIONS /warehouse/multiple/?max_page=30 HTTP/1.1" 200 0
+[2025-05-13 20:02:06,115][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-13 20:02:06,115][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-13 20:02:06,137][django.server.log_message():187] [INFO] "GET /warehouse/multiple/?max_page=30 HTTP/1.1" 200 371
+[2025-05-13 20:02:06,186][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:02:06,230][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:02:06,246][django.server.log_message():187] [INFO] "GET /staff/?staff_name=PDA1 HTTP/1.1" 200 286
+[2025-05-13 20:02:16,361][django.server.log_message():187] [INFO] "OPTIONS /bound/list/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 0
+[2025-05-13 20:02:16,361][django.server.log_message():187] [INFO] "OPTIONS /warehouse/boundcodetype/ HTTP/1.1" 200 0
+[2025-05-13 20:02:16,361][django.server.log_message():187] [INFO] "OPTIONS /warehouse/department/?max_page=1000 HTTP/1.1" 200 0
+[2025-05-13 20:02:16,361][django.server.log_message():187] [INFO] "OPTIONS /warehouse/boundtype/ HTTP/1.1" 200 0
+[2025-05-13 20:02:16,361][django.server.log_message():187] [INFO] "OPTIONS /warehouse/boundbusiness/ HTTP/1.1" 200 0
+[2025-05-13 20:02:16,364][django.server.log_message():187] [INFO] "OPTIONS /warehouse/status/ HTTP/1.1" 200 0
+[2025-05-13 20:02:16,417][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-13 20:02:16,455][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-13 20:02:16,551][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-13 20:02:16,566][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 450
+[2025-05-13 20:02:16,587][django.server.log_message():187] [INFO] "GET /warehouse/department/?max_page=1000 HTTP/1.1" 200 9376
+[2025-05-13 20:02:16,587][django.server.log_message():187] [INFO] "GET /warehouse/status/ HTTP/1.1" 200 600
+[2025-05-13 20:03:37,834][django.server.log_message():187] [INFO] "OPTIONS /bound/list/1/ HTTP/1.1" 200 0
+[2025-05-13 20:03:37,834][django.server.log_message():187] [INFO] "OPTIONS /bound/detail/?bound_list=1 HTTP/1.1" 200 0
+[2025-05-13 20:03:37,909][django.server.log_message():187] [INFO] "GET /bound/list/1/ HTTP/1.1" 200 398
+[2025-05-13 20:03:37,954][django.server.log_message():187] [INFO] "GET /bound/detail/?bound_list=1 HTTP/1.1" 200 52
+[2025-05-13 20:03:46,126][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-13 20:03:46,127][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-13 20:03:46,246][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:03:46,263][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:05:14,249][django.server.log_message():187] [INFO] "OPTIONS /bound/detail/?bound_list=1 HTTP/1.1" 200 0
+[2025-05-13 20:05:14,249][django.server.log_message():187] [INFO] "OPTIONS /bound/list/1/ HTTP/1.1" 200 0
+[2025-05-13 20:05:14,333][django.server.log_message():187] [INFO] "GET /bound/list/1/ HTTP/1.1" 200 398
+[2025-05-13 20:05:14,386][django.server.log_message():187] [INFO] "GET /bound/detail/?bound_list=1 HTTP/1.1" 200 52
+[2025-05-13 20:05:18,029][django.server.log_message():187] [INFO] "OPTIONS /container/task/?page=1&page_size=11 HTTP/1.1" 200 0
+[2025-05-13 20:05:18,074][django.server.log_message():187] [INFO] "GET /container/task/?page=1&page_size=11 HTTP/1.1" 200 52
+[2025-05-13 20:05:23,566][django.server.log_message():187] [INFO] "OPTIONS /bound/list/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 0
+[2025-05-13 20:05:23,567][django.server.log_message():187] [INFO] "OPTIONS /warehouse/boundtype/ HTTP/1.1" 200 0
+[2025-05-13 20:05:23,573][django.server.log_message():187] [INFO] "OPTIONS /warehouse/department/?max_page=1000 HTTP/1.1" 200 0
+[2025-05-13 20:05:23,573][django.server.log_message():187] [INFO] "OPTIONS /warehouse/boundbusiness/ HTTP/1.1" 200 0
+[2025-05-13 20:05:23,575][django.server.log_message():187] [INFO] "OPTIONS /warehouse/boundcodetype/ HTTP/1.1" 200 0
+[2025-05-13 20:05:23,578][django.server.log_message():187] [INFO] "OPTIONS /warehouse/status/ HTTP/1.1" 200 0
+[2025-05-13 20:05:23,611][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-13 20:05:23,715][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 450
+[2025-05-13 20:05:23,747][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-13 20:05:23,770][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-13 20:05:23,819][django.server.log_message():187] [INFO] "GET /warehouse/department/?max_page=1000 HTTP/1.1" 200 9376
+[2025-05-13 20:05:23,833][django.server.log_message():187] [INFO] "GET /warehouse/status/ HTTP/1.1" 200 600
+[2025-05-13 20:05:26,117][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-13 20:05:26,118][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-13 20:05:26,240][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:05:26,283][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:05:35,585][django.server.log_message():187] [INFO] "OPTIONS /bound/detail/?bound_list=1 HTTP/1.1" 200 0
+[2025-05-13 20:05:35,586][django.server.log_message():187] [INFO] "OPTIONS /bound/list/1/ HTTP/1.1" 200 0
+[2025-05-13 20:05:35,702][django.server.log_message():187] [INFO] "GET /bound/list/1/ HTTP/1.1" 200 398
+[2025-05-13 20:05:35,757][django.server.log_message():187] [INFO] "GET /bound/detail/?bound_list=1 HTTP/1.1" 200 52
+[2025-05-13 20:05:48,675][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-13 20:05:48,681][django.server.log_message():187] [INFO] "GET /warehouse/department/ HTTP/1.1" 200 2858
+[2025-05-13 20:05:48,738][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-13 20:05:48,738][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 52
+[2025-05-13 20:05:48,755][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-13 20:05:49,757][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-13 20:05:49,932][django.server.log_message():187] [INFO] "GET /warehouse/status/ HTTP/1.1" 200 600
+[2025-05-13 20:05:49,941][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 450
+[2025-05-13 20:05:49,942][django.server.log_message():187] [INFO] "GET /warehouse/department/?max_page=1000 HTTP/1.1" 200 9376
+[2025-05-13 20:05:49,998][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-13 20:05:50,015][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-13 20:07:06,207][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:07:06,226][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:08:47,107][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:08:47,128][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:10:56,122][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:10:56,150][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:12:56,130][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:12:56,149][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:13:56,141][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:13:56,174][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:15:31,310][django.server.log_message():187] [INFO] "POST /login/ HTTP/1.1" 200 215
+[2025-05-13 20:15:56,205][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:15:56,205][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:17:13,046][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:17:13,062][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:18:02,978][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 52
+[2025-05-13 20:18:03,011][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-13 20:18:03,025][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-13 20:18:03,054][django.server.log_message():187] [INFO] "GET /warehouse/department/ HTTP/1.1" 200 2858
+[2025-05-13 20:18:03,071][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-13 20:18:06,576][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-13 20:18:06,764][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-13 20:18:06,783][django.server.log_message():187] [INFO] "GET /warehouse/status/ HTTP/1.1" 200 600
+[2025-05-13 20:18:06,864][django.server.log_message():187] [INFO] "GET /warehouse/department/?max_page=1000 HTTP/1.1" 200 9376
+[2025-05-13 20:18:06,895][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 450
+[2025-05-13 20:18:06,901][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-13 20:18:46,200][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:18:46,233][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:19:33,155][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-13 20:19:33,189][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 52
+[2025-05-13 20:19:33,203][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-13 20:19:33,222][django.server.log_message():187] [INFO] "GET /warehouse/department/ HTTP/1.1" 200 2858
+[2025-05-13 20:19:33,289][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-13 20:19:35,980][django.server.log_message():187] [INFO] "OPTIONS /cyclecount/qtyrecorviewset/?page=1 HTTP/1.1" 200 0
+[2025-05-13 20:19:36,005][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-05-13 20:19:36,006][django.server.log_message():187] [WARNING] "GET /cyclecount/qtyrecorviewset/?page=1 HTTP/1.1" 404 4475
+[2025-05-13 20:19:36,887][django.server.log_message():187] [INFO] "OPTIONS /reportcenter/flow/?page=1&page_size=11 HTTP/1.1" 200 0
+[2025-05-13 20:19:36,963][django.server.log_message():187] [INFO] "GET /reportcenter/flow/?page=1&page_size=11 HTTP/1.1" 200 5699
+[2025-05-13 20:19:45,188][django.server.log_message():187] [INFO] "OPTIONS /reportcenter/flow/?page=4&page_size=11 HTTP/1.1" 200 0
+[2025-05-13 20:19:45,230][django.server.log_message():187] [INFO] "GET /reportcenter/flow/?page=4&page_size=11 HTTP/1.1" 200 5720
+[2025-05-13 20:19:48,545][django.server.log_message():187] [INFO] "OPTIONS /reportcenter/flow/?page=5&page_size=11 HTTP/1.1" 200 0
+[2025-05-13 20:19:48,575][django.server.log_message():187] [INFO] "GET /reportcenter/flow/?page=5&page_size=11 HTTP/1.1" 200 5765
+[2025-05-13 20:19:51,747][django.server.log_message():187] [INFO] "OPTIONS /reportcenter/flow/?page=18&page_size=11 HTTP/1.1" 200 0
+[2025-05-13 20:19:51,772][django.server.log_message():187] [INFO] "GET /reportcenter/flow/?page=18&page_size=11 HTTP/1.1" 200 1165
+[2025-05-13 20:20:02,710][django.server.log_message():187] [INFO] "OPTIONS /reportcenter/flow/?page=14&page_size=11 HTTP/1.1" 200 0
+[2025-05-13 20:20:02,745][django.server.log_message():187] [INFO] "GET /reportcenter/flow/?page=14&page_size=11 HTTP/1.1" 200 5692
+[2025-05-13 20:20:05,135][django.server.log_message():187] [INFO] "OPTIONS /reportcenter/flow/?page=15&page_size=11 HTTP/1.1" 200 0
+[2025-05-13 20:20:05,164][django.server.log_message():187] [INFO] "GET /reportcenter/flow/?page=15&page_size=11 HTTP/1.1" 200 5631
+[2025-05-13 20:20:06,434][django.server.log_message():187] [INFO] "OPTIONS /reportcenter/flow/?page=17&page_size=11 HTTP/1.1" 200 0
+[2025-05-13 20:20:06,461][django.server.log_message():187] [INFO] "GET /reportcenter/flow/?page=17&page_size=11 HTTP/1.1" 200 5676
+[2025-05-13 20:20:07,229][django.server.log_message():187] [INFO] "GET /reportcenter/flow/?page=18&page_size=11 HTTP/1.1" 200 1165
+[2025-05-13 20:20:10,419][django.server.log_message():187] [INFO] "GET /reportcenter/flow/?page=1&page_size=11 HTTP/1.1" 200 5699
+[2025-05-13 20:20:26,173][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:20:26,194][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:20:34,730][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-13 20:20:34,749][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 450
+[2025-05-13 20:20:34,810][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-13 20:20:34,829][django.server.log_message():187] [INFO] "GET /warehouse/department/?max_page=1000 HTTP/1.1" 200 9376
+[2025-05-13 20:20:34,876][django.server.log_message():187] [INFO] "GET /warehouse/status/ HTTP/1.1" 200 600
+[2025-05-13 20:20:34,879][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-13 20:20:37,391][django.server.log_message():187] [INFO] "GET /bound/detail/?bound_list=1 HTTP/1.1" 200 52
+[2025-05-13 20:20:37,437][django.server.log_message():187] [INFO] "GET /bound/list/1/ HTTP/1.1" 200 398
+[2025-05-13 20:20:57,466][django.server.log_message():187] [INFO] "OPTIONS /container/list/?page=1&page_size=11 HTTP/1.1" 200 0
+[2025-05-13 20:20:57,494][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 52
+[2025-05-13 20:21:00,800][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-05-13 20:21:00,801][django.server.log_message():187] [WARNING] "GET /cyclecount/qtyrecorviewset/?page=1 HTTP/1.1" 404 4475
+[2025-05-13 20:21:01,627][django.server.log_message():187] [INFO] "GET /reportcenter/flow/?page=1&page_size=11 HTTP/1.1" 200 5699
+[2025-05-13 20:21:55,773][django.server.log_message():187] [INFO] "OPTIONS /reportcenter/flow/?page=2&page_size=11 HTTP/1.1" 200 0
+[2025-05-13 20:21:55,807][django.server.log_message():187] [INFO] "GET /reportcenter/flow/?page=2&page_size=11 HTTP/1.1" 200 5721
+[2025-05-13 20:22:06,151][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:22:06,167][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:23:46,154][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:23:46,171][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:24:19,549][django.server.log_message():187] [INFO] "OPTIONS /bin/?layer=1&warehouse_code=&max_page=1000&shelf_name=A%E5%8C%BA%E8%B4%A7%E6%9E%B6 HTTP/1.1" 200 0
+[2025-05-13 20:24:19,657][django.server.log_message():187] [INFO] "GET /bin/?layer=1&warehouse_code=&max_page=1000&shelf_name=A%E5%8C%BA%E8%B4%A7%E6%9E%B6 HTTP/1.1" 200 180082
+[2025-05-13 20:24:22,137][django.server.log_message():187] [INFO] "OPTIONS /bin/667/ HTTP/1.1" 200 0
+[2025-05-13 20:24:22,138][django.server.log_message():187] [INFO] "OPTIONS /bin/667/ HTTP/1.1" 200 0
+[2025-05-13 20:24:22,169][django.server.log_message():187] [INFO] "GET /bin/667/ HTTP/1.1" 200 396
+[2025-05-13 20:24:22,190][django.server.log_message():187] [INFO] "GET /bin/667/ HTTP/1.1" 200 396
+[2025-05-13 20:24:25,038][django.server.log_message():187] [INFO] "OPTIONS /bin/541/ HTTP/1.1" 200 0
+[2025-05-13 20:24:25,080][django.server.log_message():187] [INFO] "GET /bin/541/ HTTP/1.1" 200 396
+[2025-05-13 20:24:29,048][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-13 20:24:29,086][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-13 20:24:29,133][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-13 20:24:29,167][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 52
+[2025-05-13 20:24:29,167][django.server.log_message():187] [INFO] "GET /warehouse/department/ HTTP/1.1" 200 2858
+[2025-05-13 20:24:29,904][django.server.log_message():187] [INFO] "GET /bin/?layer=1&warehouse_code=&max_page=1000&shelf_name=A%E5%8C%BA%E8%B4%A7%E6%9E%B6 HTTP/1.1" 200 180082
+[2025-05-13 20:24:31,966][django.server.log_message():187] [INFO] "GET /bin/667/ HTTP/1.1" 200 396
+[2025-05-13 20:24:31,988][django.server.log_message():187] [INFO] "GET /bin/667/ HTTP/1.1" 200 396
+[2025-05-13 20:25:26,171][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:25:26,197][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:27:56,129][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:27:56,149][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:28:56,115][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 20:28:56,132][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 22:40:56,405][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-13 22:40:56,408][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-13 22:40:56,487][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 22:40:56,504][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-13 23:00:48,098][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\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 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-05-13 23:00:53,159][django.request.log_response():241] [ERROR] Internal Server Error: /wms/inboundBills/
+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\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 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-05-13 23:34:17,621][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-05-14 11:15:05,765][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 186
+[2025-05-14 11:15:43,507][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 11:15:43,509][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 11:15:43,567][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 11:15:43,594][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 11:16:06,903][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 175
+[2025-05-14 11:18:16,820][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 11:18:16,953][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 11:18:22,174][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 175
+[2025-05-14 11:18:32,260][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 11:18:32,287][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 11:19:24,303][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 11:20:06,230][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 11:20:06,250][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 11:22:23,218][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 11:26:27,662][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 11:28:16,751][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 11:31:48,760][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 11:31:57,792][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 11:34:43,780][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 11:35:02,565][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 11:37:06,207][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 11:37:59,370][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 14:02:55,525][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 14:33:15,340][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 14:36:08,840][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 14:38:00,721][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 14:38:27,675][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 14:42:07,096][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 14:47:21,986][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 14:50:09,674][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 14:54:18,747][django.server.log_message():187] [INFO] "GET / HTTP/1.1" 200 679
+[2025-05-14 14:54:18,790][django.server.log_message():187] [INFO] "GET /css/app.45730797.css HTTP/1.1" 200 1376
+[2025-05-14 14:54:18,792][django.server.log_message():187] [INFO] "GET /css/vendor.2ac1ba6a.css HTTP/1.1" 200 208815
+[2025-05-14 14:54:19,010][django.server.log_message():187] [INFO] "GET /js/vendor.f24ebbef.js HTTP/1.1" 200 2288008
+[2025-05-14 14:54:19,109][django.server.log_message():187] [INFO] "GET /js/app.bf455109.js HTTP/1.1" 200 48446
+[2025-05-14 14:54:19,497][django.server.log_message():187] [INFO] "GET /css/17.8f3f6188.css HTTP/1.1" 200 884
+[2025-05-14 14:54:19,500][django.server.log_message():187] [INFO] "GET /fonts/KFOmCnqEu92Fr1Mu4mxM.f1e2a767.woff HTTP/1.1" 200 20344
+[2025-05-14 14:54:19,502][django.server.log_message():187] [INFO] "GET /js/17.4754b111.js HTTP/1.1" 200 24117
+[2025-05-14 14:54:19,509][django.server.log_message():187] [INFO] "GET /js/1.66e8190d.js HTTP/1.1" 200 1492399
+[2025-05-14 14:54:19,766][django.server.log_message():187] [INFO] "GET /fonts/KFOlCnqEu92Fr1MmWUlfBBc-.77ecb942.woff HTTP/1.1" 200 20408
+[2025-05-14 14:54:19,766][django.server.log_message():187] [INFO] "GET /fonts/KFOkCnqEu92Fr1MmgVxIIzQ.68bb21d0.woff HTTP/1.1" 200 20436
+[2025-05-14 14:54:19,805][django.server.log_message():187] [INFO] "GET /js/63.64e6b6c8.js HTTP/1.1" 200 1977
+[2025-05-14 14:54:20,851][django.server.log_message():187] [INFO] "GET /fonts/KFOlCnqEu92Fr1MmEU9fBBc-.48af7707.woff HTTP/1.1" 200 20544
+[2025-05-14 14:54:20,852][django.server.log_message():187] [INFO] "GET /statics/outbound/outbound.png HTTP/1.1" 200 5681
+[2025-05-14 14:54:20,854][django.server.log_message():187] [INFO] "GET /statics/outbound/picked.png HTTP/1.1" 200 4644
+[2025-05-14 14:54:20,856][django.server.log_message():187] [INFO] "GET /fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.c08197a9.woff2 HTTP/1.1" 200 128264
+[2025-05-14 14:54:21,093][django.server.log_message():187] [INFO] "GET /statics/icons/logo.png HTTP/1.1" 200 8634
+[2025-05-14 14:54:32,736][django.server.log_message():187] [INFO] "GET / HTTP/1.1" 200 679
+[2025-05-14 14:54:32,782][django.server.log_message():187] [INFO] "GET /css/vendor.2ac1ba6a.css HTTP/1.1" 200 208815
+[2025-05-14 14:54:33,036][django.server.log_message():187] [INFO] "GET /css/app.45730797.css HTTP/1.1" 200 1376
+[2025-05-14 14:54:33,108][django.server.log_message():187] [INFO] "GET /js/app.bf455109.js HTTP/1.1" 200 48446
+[2025-05-14 14:54:33,126][django.server.log_message():187] [INFO] "GET /js/vendor.f24ebbef.js HTTP/1.1" 200 2288008
+[2025-05-14 14:54:33,582][django.server.log_message():187] [INFO] "GET /css/17.8f3f6188.css HTTP/1.1" 200 884
+[2025-05-14 14:54:33,587][django.server.log_message():187] [INFO] "GET /fonts/KFOmCnqEu92Fr1Mu4mxM.f1e2a767.woff HTTP/1.1" 200 20344
+[2025-05-14 14:54:33,596][django.server.log_message():187] [INFO] "GET /js/17.4754b111.js HTTP/1.1" 200 24117
+[2025-05-14 14:54:33,614][django.server.log_message():187] [INFO] "GET /js/1.66e8190d.js HTTP/1.1" 200 1492399
+[2025-05-14 14:54:33,830][django.server.log_message():187] [INFO] "GET /fonts/KFOlCnqEu92Fr1MmWUlfBBc-.77ecb942.woff HTTP/1.1" 200 20408
+[2025-05-14 14:54:33,831][django.server.log_message():187] [INFO] "GET /fonts/KFOkCnqEu92Fr1MmgVxIIzQ.68bb21d0.woff HTTP/1.1" 200 20436
+[2025-05-14 14:54:33,908][django.server.log_message():187] [INFO] "GET /js/63.64e6b6c8.js HTTP/1.1" 200 1977
+[2025-05-14 14:54:34,278][django.server.log_message():187] [INFO] "GET /fonts/KFOlCnqEu92Fr1MmEU9fBBc-.48af7707.woff HTTP/1.1" 200 20544
+[2025-05-14 14:54:34,280][django.server.log_message():187] [INFO] "GET /fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.c08197a9.woff2 HTTP/1.1" 200 128264
+[2025-05-14 14:54:34,534][django.server.log_message():187] [INFO] "GET /statics/outbound/outbound.png HTTP/1.1" 200 5681
+[2025-05-14 14:54:34,838][django.server.log_message():187] [INFO] "GET /statics/outbound/picked.png HTTP/1.1" 200 4644
+[2025-05-14 14:54:35,165][django.server.log_message():187] [INFO] "GET /statics/icons/logo.png HTTP/1.1" 200 8634
+[2025-05-14 14:55:14,060][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 14:55:17,981][django.server.log_message():187] [INFO] "OPTIONS /staff/?staff_name=PDA1 HTTP/1.1" 200 0
+[2025-05-14 14:55:17,985][django.server.log_message():187] [INFO] "OPTIONS /warehouse/multiple/?max_page=30 HTTP/1.1" 200 0
+[2025-05-14 14:55:18,000][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 14:55:18,011][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 14:55:18,011][django.server.log_message():187] [INFO] "GET /warehouse/multiple/?max_page=30 HTTP/1.1" 200 371
+[2025-05-14 14:55:18,049][django.server.log_message():187] [INFO] "GET /staff/?staff_name=PDA1 HTTP/1.1" 200 286
+[2025-05-14 14:55:18,071][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 14:55:18,086][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 14:55:19,341][django.server.log_message():187] [INFO] "OPTIONS /bound/list/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 0
+[2025-05-14 14:55:19,341][django.server.log_message():187] [INFO] "OPTIONS /warehouse/department/?max_page=1000 HTTP/1.1" 200 0
+[2025-05-14 14:55:19,341][django.server.log_message():187] [INFO] "OPTIONS /warehouse/boundcodetype/ HTTP/1.1" 200 0
+[2025-05-14 14:55:19,341][django.server.log_message():187] [INFO] "OPTIONS /warehouse/boundtype/ HTTP/1.1" 200 0
+[2025-05-14 14:55:19,341][django.server.log_message():187] [INFO] "OPTIONS /warehouse/boundbusiness/ HTTP/1.1" 200 0
+[2025-05-14 14:55:19,344][django.server.log_message():187] [INFO] "OPTIONS /warehouse/status/ HTTP/1.1" 200 0
+[2025-05-14 14:55:19,459][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-14 14:55:19,459][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 450
+[2025-05-14 14:55:19,474][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-14 14:55:19,516][django.server.log_message():187] [INFO] "GET /warehouse/status/ HTTP/1.1" 200 600
+[2025-05-14 14:55:19,577][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-14 14:55:19,595][django.server.log_message():187] [INFO] "GET /warehouse/department/?max_page=1000 HTTP/1.1" 200 9376
+[2025-05-14 14:55:20,638][django.server.log_message():187] [INFO] "OPTIONS /bound/list/1/ HTTP/1.1" 200 0
+[2025-05-14 14:55:20,639][django.server.log_message():187] [INFO] "OPTIONS /bound/detail/?bound_list=1 HTTP/1.1" 200 0
+[2025-05-14 14:55:20,848][django.server.log_message():187] [INFO] "GET /bound/detail/?bound_list=1 HTTP/1.1" 200 1157
+[2025-05-14 14:55:20,851][django.server.log_message():187] [INFO] "GET /bound/list/1/ HTTP/1.1" 200 398
+[2025-05-14 14:55:35,683][django.server.log_message():187] [INFO] "POST /login/ HTTP/1.1" 200 215
+[2025-05-14 14:56:11,570][django.server.log_message():187] [INFO] "OPTIONS /container/list/?page=1&page_size=11 HTTP/1.1" 200 0
+[2025-05-14 14:56:11,609][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 295
+[2025-05-14 14:56:25,384][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 166
+[2025-05-14 14:56:31,080][django.server.log_message():187] [INFO] "OPTIONS /container/detail/?status__lte=2&container=1 HTTP/1.1" 200 0
+[2025-05-14 14:56:31,082][django.server.log_message():187] [INFO] "OPTIONS /container/operate/?status=1&container=1 HTTP/1.1" 200 0
+[2025-05-14 14:56:31,135][django.server.log_message():187] [INFO] "GET /container/detail/?status__lte=2&container=1 HTTP/1.1" 200 52
+[2025-05-14 14:56:31,150][django.server.log_message():187] [INFO] "GET /container/operate/?status=1&container=1 HTTP/1.1" 200 52
+[2025-05-14 14:56:57,726][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 14:56:57,769][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 14:58:13,490][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 104
+[2025-05-14 15:00:43,480][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 15:00:43,528][django.server.handle_error():80] [INFO] - Broken pipe from ('127.0.0.1', 10480)
+[2025-05-14 15:00:43,612][django.server.handle_error():80] [INFO] - Broken pipe from ('127.0.0.1', 10482)
+[2025-05-14 15:05:51,991][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+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 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\container\views.py", line 822, in create
+    from .container_operate import ContainerService
+  File "D:\Document\code\vue\greater_wms\container\container_operate.py", line 309
+    month=data['month'],
+    ^
+SyntaxError: keyword argument repeated
+[2025-05-14 15:05:51,995][django.server.log_message():187] [ERROR] "POST /container/detail/ HTTP/1.1" 500 111433
+[2025-05-14 15:07:58,709][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 15:10:03,137][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 15:11:55,166][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 15:13:54,037][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 15:17:42,501][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 15:24:42,516][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 22:19:34,503][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 22:19:51,183][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 22:20:39,372][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 22:22:47,710][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 22:22:57,531][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 22:24:46,616][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 22:25:14,187][django.server.log_message():187] [INFO] "OPTIONS /staff/?staff_name=PDA1 HTTP/1.1" 200 0
+[2025-05-14 22:25:14,190][django.server.log_message():187] [INFO] "OPTIONS /warehouse/multiple/?max_page=30 HTTP/1.1" 200 0
+[2025-05-14 22:25:14,193][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:25:14,206][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:25:14,215][django.server.log_message():187] [INFO] "GET /warehouse/multiple/?max_page=30 HTTP/1.1" 200 371
+[2025-05-14 22:25:14,259][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:25:14,281][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:25:14,303][django.server.log_message():187] [INFO] "GET /staff/?staff_name=PDA1 HTTP/1.1" 200 286
+[2025-05-14 22:25:41,998][django.server.log_message():187] [INFO] "OPTIONS /container/list/?page=1&page_size=11 HTTP/1.1" 200 0
+[2025-05-14 22:25:42,027][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 295
+[2025-05-14 22:25:43,180][django.server.log_message():187] [INFO] "OPTIONS /container/detail/?status__lte=2&container=1 HTTP/1.1" 200 0
+[2025-05-14 22:25:43,181][django.server.log_message():187] [INFO] "OPTIONS /container/operate/?status=1&container=1 HTTP/1.1" 200 0
+[2025-05-14 22:25:43,227][django.server.log_message():187] [INFO] "GET /container/detail/?status__lte=2&container=1 HTTP/1.1" 200 589
+[2025-05-14 22:25:43,246][django.server.log_message():187] [INFO] "GET /container/operate/?status=1&container=1 HTTP/1.1" 200 52
+[2025-05-14 22:25:50,031][django.server.log_message():187] [INFO] "OPTIONS /container/operate/?status=1&container=2 HTTP/1.1" 200 0
+[2025-05-14 22:25:50,032][django.server.log_message():187] [INFO] "OPTIONS /container/detail/?status__lte=2&container=2 HTTP/1.1" 200 0
+[2025-05-14 22:25:50,129][django.server.log_message():187] [INFO] "GET /container/detail/?status__lte=2&container=2 HTTP/1.1" 200 52
+[2025-05-14 22:25:50,169][django.server.log_message():187] [INFO] "GET /container/operate/?status=1&container=2 HTTP/1.1" 200 673
+[2025-05-14 22:25:52,006][django.server.log_message():187] [INFO] "GET /container/operate/?status=1&container=1 HTTP/1.1" 200 52
+[2025-05-14 22:25:52,015][django.server.log_message():187] [INFO] "GET /container/detail/?status__lte=2&container=1 HTTP/1.1" 200 589
+[2025-05-14 22:26:03,029][django.server.log_message():187] [INFO] "OPTIONS /container/detail/?status__lte=2&container=1 HTTP/1.1" 200 0
+[2025-05-14 22:26:03,030][django.server.log_message():187] [INFO] "OPTIONS /container/operate/?status=1&container=1 HTTP/1.1" 200 0
+[2025-05-14 22:26:03,133][django.server.log_message():187] [INFO] "GET /container/operate/?status=1&container=1 HTTP/1.1" 200 52
+[2025-05-14 22:26:03,143][django.server.log_message():187] [INFO] "GET /container/detail/?status__lte=2&container=1 HTTP/1.1" 200 589
+[2025-05-14 22:26:54,926][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:26:54,926][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:26:54,988][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:26:55,012][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:28:00,841][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 22:28:08,530][django.server.log_message():187] [INFO] "OPTIONS /container/detail/?status__lte=2&container=1 HTTP/1.1" 200 0
+[2025-05-14 22:28:08,530][django.server.log_message():187] [INFO] "OPTIONS /container/operate/?status=1&container=1 HTTP/1.1" 200 0
+[2025-05-14 22:28:08,600][django.server.log_message():187] [INFO] "GET /container/operate/?status=1&container=1 HTTP/1.1" 200 52
+[2025-05-14 22:28:08,606][django.server.log_message():187] [INFO] "GET /container/detail/?status__lte=2&container=1 HTTP/1.1" 200 1127
+[2025-05-14 22:28:33,889][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:28:33,890][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:28:33,947][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:28:33,989][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:29:14,204][django.server.log_message():187] [INFO] "OPTIONS /container/list/?page=1&page_size=11 HTTP/1.1" 200 0
+[2025-05-14 22:29:14,238][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 417
+[2025-05-14 22:29:16,478][django.server.log_message():187] [INFO] "OPTIONS /container/detail/?status__lte=2&container=2 HTTP/1.1" 200 0
+[2025-05-14 22:29:16,479][django.server.log_message():187] [INFO] "OPTIONS /container/operate/?status=1&container=2 HTTP/1.1" 200 0
+[2025-05-14 22:29:16,533][django.server.log_message():187] [INFO] "GET /container/detail/?status__lte=2&container=2 HTTP/1.1" 200 52
+[2025-05-14 22:29:16,552][django.server.log_message():187] [INFO] "GET /container/operate/?status=1&container=2 HTTP/1.1" 200 673
+[2025-05-14 22:30:13,894][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:30:13,895][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:30:13,955][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:30:13,980][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:31:53,883][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:31:53,884][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:31:53,963][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:31:53,967][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:33:34,192][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:33:34,193][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:33:34,269][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:33:34,286][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:34:55,533][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 22:35:06,121][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 22:35:14,333][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:35:14,338][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:35:14,423][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:35:14,453][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:35:47,575][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 22:36:04,651][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 22:36:22,250][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 22:36:33,410][django.server.log_message():187] [INFO] "OPTIONS /container/list/?page=1&page_size=11 HTTP/1.1" 200 0
+[2025-05-14 22:36:33,452][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 417
+[2025-05-14 22:36:53,893][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:36:53,894][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:36:53,967][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:36:53,991][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:38:34,187][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:38:34,194][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:38:34,249][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:38:34,266][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:40:13,877][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:40:13,880][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:40:13,924][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:40:13,949][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:40:29,503][django.server.log_message():187] [INFO] "OPTIONS /container/list/?page=1&page_size=11 HTTP/1.1" 200 0
+[2025-05-14 22:40:29,561][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 417
+[2025-05-14 22:40:33,376][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 22:42:26,841][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 22:42:45,318][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:42:45,319][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:42:45,370][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:42:45,385][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:43:45,021][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:43:45,021][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:43:45,071][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:43:45,088][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:45:45,337][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:45:45,337][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:45:45,438][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:45:45,466][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:46:07,974][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 22:46:22,000][django.server.log_message():187] [INFO] "OPTIONS /container/list/?page=1&page_size=11 HTTP/1.1" 200 0
+[2025-05-14 22:46:22,041][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 295
+[2025-05-14 22:46:53,888][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:46:53,889][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:46:53,933][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:46:53,951][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:48:09,440][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 22:48:13,917][django.server.log_message():187] [INFO] "OPTIONS /container/list/?page=1&page_size=11 HTTP/1.1" 200 0
+[2025-05-14 22:48:13,960][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 295
+[2025-05-14 22:48:33,877][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:48:33,878][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:48:33,920][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:48:33,936][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:50:13,880][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:50:13,880][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:50:13,932][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:50:13,950][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:51:54,327][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:51:54,328][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:51:54,421][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:51:54,456][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:51:55,145][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 22:51:57,936][django.server.log_message():187] [INFO] "OPTIONS /container/list/?page=1&page_size=11 HTTP/1.1" 200 0
+[2025-05-14 22:51:57,977][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 295
+[2025-05-14 22:51:59,095][django.server.log_message():187] [INFO] "OPTIONS /container/list/?page=1&page_size=11 HTTP/1.1" 200 0
+[2025-05-14 22:51:59,123][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 295
+[2025-05-14 22:51:59,279][django.server.log_message():187] [INFO] "OPTIONS /container/list/?page=1&page_size=11 HTTP/1.1" 200 0
+[2025-05-14 22:51:59,310][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 295
+[2025-05-14 22:51:59,452][django.server.log_message():187] [INFO] "OPTIONS /container/list/?page=1&page_size=11 HTTP/1.1" 200 0
+[2025-05-14 22:51:59,478][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 295
+[2025-05-14 22:51:59,627][django.server.log_message():187] [INFO] "OPTIONS /container/list/?page=1&page_size=11 HTTP/1.1" 200 0
+[2025-05-14 22:51:59,653][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 295
+[2025-05-14 22:52:19,898][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 22:52:23,551][django.server.log_message():187] [INFO] "OPTIONS /container/list/?page=1&page_size=11 HTTP/1.1" 200 0
+[2025-05-14 22:52:23,614][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 295
+[2025-05-14 22:52:26,916][django.server.log_message():187] [INFO] "OPTIONS /container/detail/?status__lte=2&container=6 HTTP/1.1" 200 0
+[2025-05-14 22:52:26,916][django.server.log_message():187] [INFO] "OPTIONS /container/operate/?status=1&container=6 HTTP/1.1" 200 0
+[2025-05-14 22:52:26,965][django.server.log_message():187] [INFO] "GET /container/detail/?status__lte=2&container=6 HTTP/1.1" 200 597
+[2025-05-14 22:52:26,980][django.server.log_message():187] [INFO] "GET /container/operate/?status=1&container=6 HTTP/1.1" 200 52
+[2025-05-14 22:52:28,664][django.server.log_message():187] [INFO] "OPTIONS /container/operate/?status=1&container=7 HTTP/1.1" 200 0
+[2025-05-14 22:52:28,664][django.server.log_message():187] [INFO] "OPTIONS /container/detail/?status__lte=2&container=7 HTTP/1.1" 200 0
+[2025-05-14 22:52:28,707][django.server.log_message():187] [INFO] "GET /container/operate/?status=1&container=7 HTTP/1.1" 200 681
+[2025-05-14 22:52:28,724][django.server.log_message():187] [INFO] "GET /container/detail/?status__lte=2&container=7 HTTP/1.1" 200 52
+[2025-05-14 22:53:33,886][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:53:33,886][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:53:33,945][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:53:33,962][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:53:39,366][django.server.log_message():187] [INFO] "OPTIONS /container/detail/?status__lte=2&container=6 HTTP/1.1" 200 0
+[2025-05-14 22:53:39,366][django.server.log_message():187] [INFO] "OPTIONS /container/operate/?status=1&container=6 HTTP/1.1" 200 0
+[2025-05-14 22:53:39,468][django.server.log_message():187] [INFO] "GET /container/operate/?status=1&container=6 HTTP/1.1" 200 52
+[2025-05-14 22:53:39,471][django.server.log_message():187] [INFO] "GET /container/detail/?status__lte=2&container=6 HTTP/1.1" 200 597
+[2025-05-14 22:53:43,570][django.server.log_message():187] [INFO] "OPTIONS /container/operate/?status=1&container=7 HTTP/1.1" 200 0
+[2025-05-14 22:53:43,570][django.server.log_message():187] [INFO] "OPTIONS /container/detail/?status__lte=2&container=7 HTTP/1.1" 200 0
+[2025-05-14 22:53:43,643][django.server.log_message():187] [INFO] "GET /container/detail/?status__lte=2&container=7 HTTP/1.1" 200 52
+[2025-05-14 22:53:43,646][django.server.log_message():187] [INFO] "GET /container/operate/?status=1&container=7 HTTP/1.1" 200 681
+[2025-05-14 22:53:57,791][django.server.log_message():187] [INFO] "OPTIONS /container/detail/?status__lte=2&container=6 HTTP/1.1" 200 0
+[2025-05-14 22:53:57,792][django.server.log_message():187] [INFO] "OPTIONS /container/operate/?status=1&container=6 HTTP/1.1" 200 0
+[2025-05-14 22:53:57,878][django.server.log_message():187] [INFO] "GET /container/detail/?status__lte=2&container=6 HTTP/1.1" 200 597
+[2025-05-14 22:53:57,901][django.server.log_message():187] [INFO] "GET /container/operate/?status=1&container=6 HTTP/1.1" 200 52
+[2025-05-14 22:54:04,536][django.server.log_message():187] [INFO] "OPTIONS /container/detail/?status__lte=2&container=7 HTTP/1.1" 200 0
+[2025-05-14 22:54:04,537][django.server.log_message():187] [INFO] "OPTIONS /container/operate/?status=1&container=7 HTTP/1.1" 200 0
+[2025-05-14 22:54:04,639][django.server.log_message():187] [INFO] "GET /container/detail/?status__lte=2&container=7 HTTP/1.1" 200 52
+[2025-05-14 22:54:04,664][django.server.log_message():187] [INFO] "GET /container/operate/?status=1&container=7 HTTP/1.1" 200 681
+[2025-05-14 22:55:13,888][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:55:13,889][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:55:13,935][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:55:13,958][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:56:53,891][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:56:53,891][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:56:53,936][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:56:53,951][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:57:49,764][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 22:58:06,884][django.server.log_message():187] [INFO] "OPTIONS /container/detail/?status__lte=2&container=6 HTTP/1.1" 200 0
+[2025-05-14 22:58:06,894][django.server.log_message():187] [INFO] "OPTIONS /container/operate/?status=1&container=6 HTTP/1.1" 200 0
+[2025-05-14 22:58:06,942][django.server.log_message():187] [INFO] "GET /container/detail/?status__lte=2&container=6 HTTP/1.1" 200 597
+[2025-05-14 22:58:06,961][django.server.log_message():187] [INFO] "GET /container/operate/?status=1&container=6 HTTP/1.1" 200 681
+[2025-05-14 22:58:27,695][django.server.log_message():187] [INFO] "OPTIONS /container/detail/?status__lte=2&container=7 HTTP/1.1" 200 0
+[2025-05-14 22:58:27,696][django.server.log_message():187] [INFO] "OPTIONS /container/operate/?status=1&container=7 HTTP/1.1" 200 0
+[2025-05-14 22:58:27,772][django.server.log_message():187] [INFO] "GET /container/operate/?status=1&container=7 HTTP/1.1" 200 52
+[2025-05-14 22:58:27,777][django.server.log_message():187] [INFO] "GET /container/detail/?status__lte=2&container=7 HTTP/1.1" 200 52
+[2025-05-14 22:58:33,875][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:58:33,875][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 22:58:33,940][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:58:33,960][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 22:58:35,411][django.server.log_message():187] [INFO] "OPTIONS /container/operate/?status=1&container=7 HTTP/1.1" 200 0
+[2025-05-14 22:58:35,411][django.server.log_message():187] [INFO] "OPTIONS /container/detail/?status__lte=2&container=7 HTTP/1.1" 200 0
+[2025-05-14 22:58:35,475][django.server.log_message():187] [INFO] "GET /container/operate/?status=1&container=7 HTTP/1.1" 200 52
+[2025-05-14 22:58:35,499][django.server.log_message():187] [INFO] "GET /container/detail/?status__lte=2&container=7 HTTP/1.1" 200 52
+[2025-05-14 23:00:13,884][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 23:00:13,884][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 23:00:13,952][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 23:00:13,995][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 23:01:54,017][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 23:01:54,017][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 23:01:54,069][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 23:01:54,090][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 23:02:15,526][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 173
+[2025-05-14 23:02:19,815][django.server.log_message():187] [INFO] "OPTIONS /container/list/?page=1&page_size=11 HTTP/1.1" 200 0
+[2025-05-14 23:02:19,851][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 299
+[2025-05-14 23:03:34,011][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 23:03:34,014][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 23:03:34,049][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 23:03:34,081][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 23:05:25,306][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 23:05:25,309][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 23:05:25,383][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 23:05:25,406][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 23:05:30,441][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 196
+[2025-05-14 23:05:33,246][django.server.log_message():187] [INFO] "OPTIONS /container/list/?page=1&page_size=11 HTTP/1.1" 200 0
+[2025-05-14 23:05:33,291][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 303
+[2025-05-14 23:06:53,880][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 23:06:53,881][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 23:06:53,928][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 23:06:53,944][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 23:08:33,884][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 23:08:33,884][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 23:08:33,960][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 23:08:33,977][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 23:09:56,658][django.server.log_message():187] [INFO] "OPTIONS /container/detail/?page=1&page_size=11 HTTP/1.1" 200 0
+[2025-05-14 23:09:56,698][django.server.log_message():187] [INFO] "GET /container/detail/?page=1&page_size=11 HTTP/1.1" 200 597
+[2025-05-14 23:10:13,880][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 23:10:13,881][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 23:10:13,962][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 23:10:13,987][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 23:10:24,786][django.request.log_response():241] [ERROR] Internal Server Error: /container/container_wcs/
+[2025-05-14 23:10:24,787][django.server.log_message():187] [ERROR] "GET /container/container_wcs/ HTTP/1.1" 500 60
+[2025-05-14 23:11:53,877][django.server.log_message():187] [INFO] "OPTIONS /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 23:11:53,877][django.server.log_message():187] [INFO] "OPTIONS /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 0
+[2025-05-14 23:11:53,941][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 52
+[2025-05-14 23:11:53,965][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 52