Ver Fonte

库位算法更新

flower_mr há 2 semanas atrás
pai
commit
34f10cef80
6 ficheiros alterados com 277 adições e 52 exclusões
  1. 13 5
      bin/queries.py
  2. 46 46
      bin/services.py
  3. 2 0
      container/container_operate.py
  4. 1 1
      data_base/test_allocation.py
  5. 7 0
      logs/error.log
  6. 208 0
      logs/server.log

+ 13 - 5
bin/queries.py

@@ -51,7 +51,6 @@ class LocationQueries:
             container_code=container_code
         ).first()
 
-
         detail = ContainerDetailModel.objects.filter(
             container=container.id,is_delete=False
         ).exclude(status=3).first()
@@ -140,7 +139,7 @@ class LocationQueries:
 
     
     @staticmethod
-    def get_pallet_count_by_batch( container_code):
+    def get_pallet_count_by_batch(container_code):
         """
         根据托盘码查询批次下托盘总数
         :param container_code: 要查询的托盘码
@@ -172,8 +171,17 @@ class LocationQueries:
             if item.container_id not in container_ids: 
                 batch_container_count = batch_container_count + 1
                 container_ids.append(item.container_id)
-
-        return batch_container_count
+        batch_container_scatter = ContainerDetailModel.objects.filter(
+             batch = container_detail.batch.id,is_delete=False,goods_class=3
+        ).all().exclude(status = 3)
+        batch_container_scatter_count = 0
+        container_scatter_ids = []
+        for item in batch_container_scatter:
+            if item.container_id not in container_scatter_ids: 
+                batch_container_scatter_count = batch_container_scatter_count + 1
+                container_scatter_ids.append(item.container_id)
+
+        return batch_container_count,batch_container_scatter_count
     
 
     @staticmethod
@@ -184,7 +192,7 @@ class LocationQueries:
             return None
         solution = alloction_pre.objects.filter(batch_number=batch).first()
         if not solution:
-            return None
+            return [0,0,0]
 
         return [solution.layer1_task_finish_number,solution.layer2_task_finish_number,solution.layer3_task_finish_number] 
 

+ 46 - 46
bin/services.py

@@ -26,17 +26,17 @@ class AllocationService:
                 return cls._container_group_allocation(container_code,batch_info, start_point)
             else:
                 return cls._container_scattered_allocation(container_code,batch_info, start_point)
-        if batch_info['status'] == 1 or batch_info['status'] == 0:
-            return cls._first_allocation(container_code, batch_info, start_point)
-        elif batch_info['status'] == 2:
-            return cls._subsequent_allocation(container_code, batch_info, start_point)
-        else:
-            raise ValueError("非法的批次状态")
+        # if batch_info['status'] == 1 or batch_info['status'] == 0:
+        #     return cls._first_allocation(container_code, batch_info, start_point)
+        # elif batch_info['status'] == 2:
+        return cls._subsequent_allocation(container_code, batch_info, start_point)
+        # else:
+        #     raise ValueError("非法的批次状态")
 
     @classmethod
     @transaction.atomic
     def _first_allocation(cls, container_code, batch_info, start_point):
-        total = LocationQueries.get_pallet_count_by_batch(container_code)
+        total , scatter_total = LocationQueries.get_pallet_count_by_batch(container_code)
         current_total = LocationQueries.get_pallet_count(container_code)
         if not total:
                 raise ValueError("无效的容器或批次信息")
@@ -46,7 +46,7 @@ class AllocationService:
             layer_cap = LocationQueries.get_group_capacity()
             pressure = LocationQueries.get_current_pressure()
 
-            solution, new_pressure = AllocationAlgorithm.generate_plan(total, layer_cap, pressure)
+            solution, new_pressure = AllocationAlgorithm.generate_plan(total-scatter_total, layer_cap, pressure)
         
             if not solution:
                 raise RuntimeError("无法生成有效分配方案")
@@ -57,24 +57,25 @@ class AllocationService:
             locations = AllocationAlgorithm.allocation_plan_left_right(formatted,batch_info['number'] ,start_point, container_code)
             return cls._execute_allocation(locations, start_point,container_code,batch_info)
         else:
-            locations = LocationQueries.get_left_location_group(batch_info['number'])
-            if not locations:
-                layer_cap = LocationQueries.get_group_capacity()
-                pressure = LocationQueries.get_current_pressure()
-                finish_task_sum = sum(LocationQueries.get_current_finish_task(container_code,batch_info))
-                solution, new_pressure = AllocationAlgorithm.generate_plan(total-finish_task_sum, layer_cap, pressure)
+            return cls._subsequent_allocation(container_code, batch_info, start_point)
+            # locations = LocationQueries.get_left_location_group(batch_info['number'])
+            # if not locations:
+            #     layer_cap = LocationQueries.get_group_capacity()
+            #     pressure = LocationQueries.get_current_pressure()
+            #     finish_task_sum = sum(LocationQueries.get_current_finish_task(container_code,batch_info))
+
+            #     solution, new_pressure = AllocationAlgorithm.generate_plan(total-finish_task_sum, layer_cap, pressure)
                 
-                if not solution:
-                    raise RuntimeError("无法生成有效分配方案")
-
-                formatted = json.loads(AllocationAlgorithm.format_solution(solution))
-                LocationUpdates.save_allocation_plan(batch_info['number'], formatted, new_pressure)
-                # 使用距离最近的库位,增加切换
-                locations = AllocationAlgorithm.allocation_plan_left_right(formatted,batch_info['number'] ,start_point, container_code)
-                return cls._execute_allocation(locations, start_point,container_code,batch_info)
-            else:
-                return cls._execute_allocation(locations, start_point,container_code,batch_info)   
+            #     if not solution:
+            #         raise RuntimeError("无法生成有效分配方案")
 
+            #     formatted = json.loads(AllocationAlgorithm.format_solution(solution))
+            #     LocationUpdates.save_allocation_plan(batch_info['number'], formatted, new_pressure)
+            #     # 使用距离最近的库位,增加切换
+            #     locations = AllocationAlgorithm.allocation_plan_left_right(formatted,batch_info['number'] ,start_point, container_code)
+            #     return cls._execute_allocation(locations, start_point,container_code,batch_info)
+            # else:
+            #     return cls._execute_allocation(locations, start_point,container_code,batch_info)   
 
     @classmethod
     def _container_group_allocation(cls,container_code, batch_info, start_point):
@@ -195,29 +196,28 @@ class AllocationService:
 
     @classmethod
     def _subsequent_allocation(cls, container_code, batch_info, start_point):
-        # 后续分配逻辑
-        total = LocationQueries.get_pallet_count_by_batch(container_code)
-        current_total = LocationQueries.get_pallet_count(container_code)
+
+        total , scatter_total = LocationQueries.get_pallet_count_by_batch(container_code)
         LocationUpdates.update_pallet_count(total, batch_info['number'])
-        if total == current_total:
-            locations = LocationQueries.get_left_location_group(batch_info['number'])
-            if not locations:
-                layer_cap = LocationQueries.get_group_capacity()
-                pressure = LocationQueries.get_current_pressure()
-                finish_task_sum = sum(LocationQueries.get_current_finish_task(container_code,batch_info))
-                if finish_task_sum == total:
-                    total += 1
-                solution, new_pressure = AllocationAlgorithm.generate_plan(total-finish_task_sum, layer_cap, pressure)
-                if not solution:
-                    raise RuntimeError("无法生成有效分配方案")
-
-                formatted = json.loads(AllocationAlgorithm.format_solution(solution))
-                LocationUpdates.save_allocation_plan(batch_info['number'], formatted, new_pressure)
-                # 使用距离最近的库位,增加切换
-                locations = AllocationAlgorithm.allocation_plan_left_right(formatted,batch_info['number'] ,start_point, container_code)
-                return cls._execute_allocation(locations, start_point,container_code,batch_info)
-            else:
-                return cls._execute_allocation(locations, start_point,container_code,batch_info)
+        locations = LocationQueries.get_left_location_group(batch_info['number'])
+        if not locations:
+            layer_cap = LocationQueries.get_group_capacity()
+            pressure = LocationQueries.get_current_pressure()
+            finish_task_sum = sum(LocationQueries.get_current_finish_task(container_code,batch_info))
+            print(f"当前已完成任务: {finish_task_sum}, 总任务数: {total},散盘任务数: {scatter_total}")
+            if total-finish_task_sum-scatter_total == 0:
+                total += 1
+            solution, new_pressure = AllocationAlgorithm.generate_plan(total-finish_task_sum-scatter_total, layer_cap, pressure)
+            if not solution:
+                raise RuntimeError("无法生成有效分配方案")
+
+            formatted = json.loads(AllocationAlgorithm.format_solution(solution))
+            LocationUpdates.save_allocation_plan(batch_info['number'], formatted, new_pressure)
+            # 使用距离最近的库位,增加切换
+            locations = AllocationAlgorithm.allocation_plan_left_right(formatted,batch_info['number'] ,start_point, container_code)
+            return cls._execute_allocation(locations, start_point,container_code,batch_info)
+        else:
+            return cls._execute_allocation(locations, start_point,container_code,batch_info)
 
     @transaction.atomic
     def get_location_list_remainder(location_group_list,container_code,batch_info):

+ 2 - 0
container/container_operate.py

@@ -59,6 +59,8 @@ class BatchProcessor:
             except Exception as e:
                 logger.error(f"批次处理失败: {str(e)}")
                 continue
+        from bin.queries import LocationQueries
+        LocationQueries.get_batch_info(data.get('container_code'))
         return Response({"status": "success"})
 
     @staticmethod

+ 1 - 1
data_base/test_allocation.py

@@ -39,7 +39,7 @@ def main():
             #     print("❌ 库位类型获取失败,请检查托盘数量")
             #     return
             # print(f"库位类型:{location_type}")
-            number=allocator.get_pallet_count_by_batch(code) 
+            number =allocator.get_pallet_count_by_batch(code) 
             if number is None:
                 print("❌ 该批次下无托盘,请检查托盘编码")
                 return

+ 7 - 0
logs/error.log

@@ -8970,3 +8970,10 @@ Traceback (most recent call last):
     return Response(serializer.data, status=200, headers=headers)
 NameError: name 'serializer' is not defined
 [2025-05-22 00:08:59,623][django.server.log_message():187] [ERROR] "DELETE /container/detail/1562/ HTTP/1.1" 500 110491
+[2025-05-23 13:09:29,880][django.request.log_response():241] [ERROR] Internal Server Error: /container/container_wcs/
+[2025-05-23 13:15:00,284][django.request.log_response():241] [ERROR] Internal Server Error: /container/container_wcs/
+[2025-05-23 13:15:00,285][django.server.log_message():187] [ERROR] "GET /container/container_wcs/ HTTP/1.1" 500 60
+[2025-05-23 13:15:54,701][django.request.log_response():241] [ERROR] Internal Server Error: /container/container_wcs/
+[2025-05-23 13:15:54,701][django.server.log_message():187] [ERROR] "GET /container/container_wcs/ HTTP/1.1" 500 60
+[2025-05-23 13:26:07,453][django.request.log_response():241] [ERROR] Internal Server Error: /container/container_wcs/
+[2025-05-23 13:26:07,456][django.server.log_message():187] [ERROR] "GET /container/container_wcs/ HTTP/1.1" 500 60

+ 208 - 0
logs/server.log

@@ -25193,3 +25193,211 @@ NameError: name 'serializer' is not defined
 [2025-05-23 02:03:22,238][django.request.log_response():241] [WARNING] Not Found: /container/containerdetail/
 [2025-05-23 02:03:22,294][django.request.log_response():241] [WARNING] Not Found: /container/locationdetail/
 [2025-05-23 02:03:22,310][django.request.log_response():241] [WARNING] Not Found: /container/containerdetail/
+[2025-05-23 13:09:29,880][django.request.log_response():241] [ERROR] Internal Server Error: /container/container_wcs/
+[2025-05-23 13:13:15,945][django.server.log_message():187] [INFO] "GET /container/container_wcs/ HTTP/1.1" 200 255
+[2025-05-23 13:13:22,961][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 188320
+[2025-05-23 13:13:28,166][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 2063
+[2025-05-23 13:13:28,180][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-23 13:13:28,211][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-23 13:13:28,248][django.server.log_message():187] [INFO] "GET /warehouse/department/?max_page=1000 HTTP/1.1" 200 9376
+[2025-05-23 13:13:28,265][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-23 13:13:28,281][django.server.log_message():187] [INFO] "GET /warehouse/status/ HTTP/1.1" 200 600
+[2025-05-23 13:13:29,685][django.server.log_message():187] [INFO] "OPTIONS /bound/list/?page=1&base_type=1&page_size=11 HTTP/1.1" 200 0
+[2025-05-23 13:13:29,794][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-23 13:13:29,821][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-23 13:13:29,883][django.server.log_message():187] [INFO] "GET /warehouse/status/ HTTP/1.1" 200 600
+[2025-05-23 13:13:29,892][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=1&page_size=11 HTTP/1.1" 200 453
+[2025-05-23 13:13:29,917][django.server.log_message():187] [INFO] "GET /warehouse/department/ HTTP/1.1" 200 2858
+[2025-05-23 13:13:29,931][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-23 13:13:30,382][django.server.log_message():187] [INFO] "GET /container/wcs_task/?page=1&page_size=11 HTTP/1.1" 200 4746
+[2025-05-23 13:13:33,962][django.server.log_message():187] [INFO] "PUT /container/container_wcs/ HTTP/1.1" 200 150
+[2025-05-23 13:13:34,041][django.server.log_message():187] [INFO] "GET /container/wcs_task/?page=1&page_size=11 HTTP/1.1" 200 4761
+[2025-05-23 13:13:42,189][django.server.log_message():187] [INFO] "GET /container/container_wcs/ HTTP/1.1" 200 255
+[2025-05-23 13:13:47,045][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-23 13:13:47,048][django.server.log_message():187] [INFO] "GET /warehouse/status/ HTTP/1.1" 200 600
+[2025-05-23 13:13:47,053][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-23 13:13:47,156][django.server.log_message():187] [INFO] "GET /warehouse/department/?max_page=1000 HTTP/1.1" 200 9376
+[2025-05-23 13:13:47,181][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-23 13:13:47,188][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 2063
+[2025-05-23 13:13:48,578][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 1836
+[2025-05-23 13:13:50,772][django.server.log_message():187] [INFO] "GET /container/wcs_task/?page=1&page_size=11 HTTP/1.1" 200 4743
+[2025-05-23 13:13:53,613][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 188492
+[2025-05-23 13:13:57,384][django.server.log_message():187] [INFO] "GET /container/wcs_task/?page=1&page_size=11 HTTP/1.1" 200 4743
+[2025-05-23 13:14:00,118][django.server.log_message():187] [INFO] "PUT /container/container_wcs/ HTTP/1.1" 200 150
+[2025-05-23 13:14:00,191][django.server.log_message():187] [INFO] "GET /container/wcs_task/?page=1&page_size=11 HTTP/1.1" 200 4758
+[2025-05-23 13:14:04,590][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 188501
+[2025-05-23 13:14:06,184][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 1845
+[2025-05-23 13:14:07,671][django.server.log_message():187] [INFO] "POST /container/list/ HTTP/1.1" 201 139
+[2025-05-23 13:14:07,716][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 1827
+[2025-05-23 13:14:08,378][django.server.log_message():187] [INFO] "POST /container/list/ HTTP/1.1" 201 139
+[2025-05-23 13:14:08,419][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 1809
+[2025-05-23 13:14:09,993][django.server.log_message():187] [INFO] "OPTIONS /container/detail/?status__lte=2&container=50 HTTP/1.1" 200 0
+[2025-05-23 13:14:10,040][django.server.log_message():187] [INFO] "GET /container/detail/?status__lte=2&container=50 HTTP/1.1" 200 52
+[2025-05-23 13:14:27,428][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 188
+[2025-05-23 13:14:47,025][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 188
+[2025-05-23 13:15:00,284][django.request.log_response():241] [ERROR] Internal Server Error: /container/container_wcs/
+[2025-05-23 13:15:00,285][django.server.log_message():187] [ERROR] "GET /container/container_wcs/ HTTP/1.1" 500 60
+[2025-05-23 13:15:16,173][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 188655
+[2025-05-23 13:15:54,701][django.request.log_response():241] [ERROR] Internal Server Error: /container/container_wcs/
+[2025-05-23 13:15:54,701][django.server.log_message():187] [ERROR] "GET /container/container_wcs/ HTTP/1.1" 500 60
+[2025-05-23 13:16:20,937][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-23 13:16:21,013][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-23 13:16:21,042][django.server.log_message():187] [INFO] "GET /warehouse/status/ HTTP/1.1" 200 600
+[2025-05-23 13:16:21,048][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 2063
+[2025-05-23 13:16:21,062][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-23 13:16:21,083][django.server.log_message():187] [INFO] "GET /warehouse/department/?max_page=1000 HTTP/1.1" 200 9376
+[2025-05-23 13:16:22,566][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 1809
+[2025-05-23 13:16:24,848][django.server.log_message():187] [INFO] "GET /container/detail/?status__lte=2&container=50 HTTP/1.1" 200 1011
+[2025-05-23 13:16:24,893][django.server.log_message():187] [INFO] "OPTIONS /container/locationdetail/?container=50 HTTP/1.1" 200 0
+[2025-05-23 13:16:24,893][django.server.log_message():187] [INFO] "OPTIONS /container/operate/?status=1&container=50 HTTP/1.1" 200 0
+[2025-05-23 13:16:24,894][django.server.log_message():187] [INFO] "OPTIONS /container/containerdetail/?container=50 HTTP/1.1" 200 0
+[2025-05-23 13:16:24,930][django.server.log_message():187] [INFO] "GET /container/containerdetail/?container=50 HTTP/1.1" 200 351
+[2025-05-23 13:16:24,961][django.server.log_message():187] [INFO] "GET /container/locationdetail/?container=50 HTTP/1.1" 200 415
+[2025-05-23 13:16:24,988][django.server.log_message():187] [INFO] "GET /container/operate/?status=1&container=50 HTTP/1.1" 200 1109
+[2025-05-23 13:16:27,006][django.server.log_message():187] [INFO] "OPTIONS /container/detail/?status__lte=2&container=51 HTTP/1.1" 200 0
+[2025-05-23 13:16:27,100][django.server.log_message():187] [INFO] "GET /container/detail/?status__lte=2&container=51 HTTP/1.1" 200 1011
+[2025-05-23 13:16:27,125][django.server.log_message():187] [INFO] "OPTIONS /container/locationdetail/?container=51 HTTP/1.1" 200 0
+[2025-05-23 13:16:27,127][django.server.log_message():187] [INFO] "OPTIONS /container/operate/?status=1&container=51 HTTP/1.1" 200 0
+[2025-05-23 13:16:27,128][django.server.log_message():187] [INFO] "OPTIONS /container/containerdetail/?container=51 HTTP/1.1" 200 0
+[2025-05-23 13:16:27,165][django.server.log_message():187] [INFO] "GET /container/containerdetail/?container=50 HTTP/1.1" 200 351
+[2025-05-23 13:16:27,209][django.server.log_message():187] [INFO] "GET /container/operate/?status=1&container=50 HTTP/1.1" 200 1109
+[2025-05-23 13:16:27,228][django.server.log_message():187] [INFO] "GET /container/locationdetail/?container=50 HTTP/1.1" 200 415
+[2025-05-23 13:16:27,268][django.server.log_message():187] [INFO] "GET /container/operate/?status=1&container=51 HTTP/1.1" 200 1109
+[2025-05-23 13:16:27,278][django.server.log_message():187] [INFO] "GET /container/containerdetail/?container=51 HTTP/1.1" 200 351
+[2025-05-23 13:16:27,290][django.server.log_message():187] [INFO] "GET /container/locationdetail/?container=51 HTTP/1.1" 200 415
+[2025-05-23 13:16:32,889][django.server.log_message():187] [INFO] "GET /container/detail/?status__lte=2&container=50 HTTP/1.1" 200 1011
+[2025-05-23 13:16:32,961][django.server.log_message():187] [INFO] "GET /container/locationdetail/?container=50 HTTP/1.1" 200 415
+[2025-05-23 13:16:33,004][django.server.log_message():187] [INFO] "GET /container/operate/?status=1&container=50 HTTP/1.1" 200 1109
+[2025-05-23 13:16:33,022][django.server.log_message():187] [INFO] "GET /container/operate/?status=1&container=51 HTTP/1.1" 200 1109
+[2025-05-23 13:16:33,044][django.server.log_message():187] [INFO] "GET /container/locationdetail/?container=51 HTTP/1.1" 200 415
+[2025-05-23 13:16:33,060][django.server.log_message():187] [INFO] "GET /container/containerdetail/?container=51 HTTP/1.1" 200 351
+[2025-05-23 13:16:33,073][django.server.log_message():187] [INFO] "GET /container/containerdetail/?container=50 HTTP/1.1" 200 351
+[2025-05-23 13:17:02,524][django.server.log_message():187] [INFO] "GET /container/container_wcs/ HTTP/1.1" 200 255
+[2025-05-23 13:17:10,899][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-23 13:17:10,902][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-23 13:17:10,947][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 52
+[2025-05-23 13:17:10,968][django.server.log_message():187] [INFO] "GET /warehouse/department/ HTTP/1.1" 200 2858
+[2025-05-23 13:17:10,979][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-23 13:17:12,603][django.server.log_message():187] [INFO] "GET /container/wcs_task/?page=1&page_size=11 HTTP/1.1" 200 4740
+[2025-05-23 13:17:18,004][django.server.log_message():187] [INFO] "PUT /container/container_wcs/ HTTP/1.1" 200 150
+[2025-05-23 13:17:18,081][django.server.log_message():187] [INFO] "GET /container/wcs_task/?page=1&page_size=11 HTTP/1.1" 200 4755
+[2025-05-23 13:17:20,726][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 188999
+[2025-05-23 13:17:21,025][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-23 13:17:21,026][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-23 13:17:21,049][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 52
+[2025-05-23 13:17:21,075][django.server.log_message():187] [INFO] "GET /warehouse/department/ HTTP/1.1" 200 2858
+[2025-05-23 13:17:21,091][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-23 13:17:22,715][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 188999
+[2025-05-23 13:17:23,109][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-23 13:17:23,146][django.server.log_message():187] [INFO] "GET /warehouse/department/ HTTP/1.1" 200 2858
+[2025-05-23 13:17:23,171][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-23 13:17:23,187][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-23 13:17:23,205][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 52
+[2025-05-23 13:19:27,362][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-23 13:19:27,437][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-23 13:19:27,464][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-23 13:19:27,481][django.server.log_message():187] [INFO] "GET /warehouse/status/ HTTP/1.1" 200 600
+[2025-05-23 13:19:27,504][django.server.log_message():187] [INFO] "GET /warehouse/department/?max_page=1000 HTTP/1.1" 200 9376
+[2025-05-23 13:19:27,508][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 2063
+[2025-05-23 13:19:27,673][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 1827
+[2025-05-23 13:19:28,585][django.server.log_message():187] [INFO] "POST /container/list/ HTTP/1.1" 201 139
+[2025-05-23 13:19:28,643][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 1809
+[2025-05-23 13:19:42,339][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 188
+[2025-05-23 13:26:07,453][django.request.log_response():241] [ERROR] Internal Server Error: /container/container_wcs/
+[2025-05-23 13:26:07,456][django.server.log_message():187] [ERROR] "GET /container/container_wcs/ HTTP/1.1" 500 60
+[2025-05-23 13:29:35,009][django.server.log_message():187] [INFO] "GET /container/wcs_task/?page=1&page_size=11 HTTP/1.1" 200 4755
+[2025-05-23 13:29:37,079][django.server.log_message():187] [INFO] "GET /container/wcs_task/?page=1&page_size=11 HTTP/1.1" 200 4755
+[2025-05-23 13:29:42,945][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 189153
+[2025-05-23 13:29:46,268][django.server.log_message():187] [INFO] "GET /container/wcs_task/?page=1&page_size=11 HTTP/1.1" 200 4755
+[2025-05-23 13:30:22,986][django.server.log_message():187] [INFO] "GET /container/wcs_task/?page=1&page_size=11 HTTP/1.1" 200 4743
+[2025-05-23 13:30:25,801][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 52
+[2025-05-23 13:30:25,818][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-23 13:30:25,856][django.server.log_message():187] [INFO] "GET /warehouse/department/ HTTP/1.1" 200 2858
+[2025-05-23 13:30:25,878][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-23 13:30:25,892][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-23 13:30:28,229][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 187985
+[2025-05-23 13:30:30,384][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-23 13:30:30,449][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-23 13:30:30,476][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-23 13:30:30,479][django.server.log_message():187] [INFO] "GET /warehouse/department/ HTTP/1.1" 200 2858
+[2025-05-23 13:30:30,493][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 52
+[2025-05-23 13:30:31,771][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-23 13:30:31,813][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-23 13:30:31,886][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-23 13:30:31,949][django.server.log_message():187] [INFO] "GET /warehouse/status/ HTTP/1.1" 200 600
+[2025-05-23 13:30:31,956][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 1659
+[2025-05-23 13:30:31,988][django.server.log_message():187] [INFO] "GET /warehouse/department/?max_page=1000 HTTP/1.1" 200 9376
+[2025-05-23 13:30:40,291][django.server.log_message():187] [INFO] "POST /bound/list/ HTTP/1.1" 200 451
+[2025-05-23 13:30:40,375][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 2063
+[2025-05-23 13:30:42,200][django.server.log_message():187] [INFO] "GET /bound/list/6/ HTTP/1.1" 200 403
+[2025-05-23 13:30:42,229][django.server.log_message():187] [INFO] "GET /bound/detail/?max_page=1000&bound_list=6 HTTP/1.1" 200 52
+[2025-05-23 13:30:44,815][django.server.log_message():187] [INFO] "OPTIONS /warehouse/product/?product_name__icontains=1&max_page=1000 HTTP/1.1" 200 0
+[2025-05-23 13:30:44,850][django.server.log_message():187] [INFO] "GET /warehouse/product/?product_name__icontains=1&max_page=1000 HTTP/1.1" 200 1259
+[2025-05-23 13:30:53,289][django.server.log_message():187] [INFO] "POST /bound/batch/ HTTP/1.1" 200 659
+[2025-05-23 13:30:53,319][django.server.log_message():187] [INFO] "POST /bound/detail/ HTTP/1.1" 200 213
+[2025-05-23 13:30:53,390][django.server.log_message():187] [INFO] "GET /bound/list/6/ HTTP/1.1" 200 403
+[2025-05-23 13:30:53,425][django.server.log_message():187] [INFO] "GET /bound/detail/?max_page=1000&bound_list=6 HTTP/1.1" 200 1229
+[2025-05-23 13:30:58,270][django.server.log_message():187] [INFO] "POST /bound/batch/ HTTP/1.1" 200 659
+[2025-05-23 13:30:58,297][django.server.log_message():187] [INFO] "POST /bound/detail/ HTTP/1.1" 200 213
+[2025-05-23 13:30:58,388][django.server.log_message():187] [INFO] "GET /bound/list/6/ HTTP/1.1" 200 403
+[2025-05-23 13:30:58,431][django.server.log_message():187] [INFO] "GET /bound/detail/?max_page=1000&bound_list=6 HTTP/1.1" 200 2407
+[2025-05-23 13:31:14,196][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 1845
+[2025-05-23 13:31:16,189][django.server.log_message():187] [INFO] "POST /container/list/ HTTP/1.1" 201 139
+[2025-05-23 13:31:16,222][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 1827
+[2025-05-23 13:31:17,464][django.server.log_message():187] [INFO] "POST /container/list/ HTTP/1.1" 201 139
+[2025-05-23 13:31:17,498][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 1809
+[2025-05-23 13:31:18,164][django.server.log_message():187] [INFO] "POST /container/list/ HTTP/1.1" 201 139
+[2025-05-23 13:31:18,193][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 1791
+[2025-05-23 13:32:05,679][django.server.log_message():187] [INFO] "OPTIONS /container/detail/?status__lte=2&container=49 HTTP/1.1" 200 0
+[2025-05-23 13:32:05,719][django.server.log_message():187] [INFO] "GET /container/detail/?status__lte=2&container=49 HTTP/1.1" 200 52
+[2025-05-23 13:32:07,434][django.server.log_message():187] [INFO] "GET /warehouse/department/ HTTP/1.1" 200 2858
+[2025-05-23 13:32:07,460][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 52
+[2025-05-23 13:32:07,489][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-23 13:32:07,506][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-23 13:32:07,520][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-23 13:32:08,198][django.server.log_message():187] [INFO] "GET /warehouse/department/?max_page=1000 HTTP/1.1" 200 9376
+[2025-05-23 13:32:08,205][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 2063
+[2025-05-23 13:32:08,225][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-23 13:32:08,256][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-23 13:32:08,288][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-23 13:32:08,305][django.server.log_message():187] [INFO] "GET /warehouse/status/ HTTP/1.1" 200 600
+[2025-05-23 13:32:09,478][django.server.log_message():187] [INFO] "GET /bound/list/6/ HTTP/1.1" 200 403
+[2025-05-23 13:32:09,539][django.server.log_message():187] [INFO] "GET /bound/detail/?max_page=1000&bound_list=6 HTTP/1.1" 200 2407
+[2025-05-23 13:35:00,179][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-23 13:35:00,194][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-23 13:35:00,200][django.server.log_message():187] [INFO] "GET /warehouse/department/ HTTP/1.1" 200 2858
+[2025-05-23 13:35:00,211][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-23 13:35:00,229][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 52
+[2025-05-23 13:35:01,910][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 187985
+[2025-05-23 13:35:04,466][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-23 13:35:04,498][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-23 13:35:04,536][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-23 13:35:04,580][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 52
+[2025-05-23 13:35:04,580][django.server.log_message():187] [INFO] "GET /warehouse/department/ HTTP/1.1" 200 2858
+[2025-05-23 13:35:45,607][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 191
+[2025-05-23 13:35:50,761][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 191
+[2025-05-23 13:36:06,286][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-05-23 13:36:06,377][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 2063
+[2025-05-23 13:36:06,443][django.server.log_message():187] [INFO] "GET /warehouse/department/?max_page=1000 HTTP/1.1" 200 9376
+[2025-05-23 13:36:06,509][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-05-23 13:36:06,514][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-05-23 13:36:06,526][django.server.log_message():187] [INFO] "GET /warehouse/status/ HTTP/1.1" 200 600
+[2025-05-23 13:36:09,026][django.server.log_message():187] [INFO] "GET /bound/list/6/ HTTP/1.1" 200 403
+[2025-05-23 13:36:09,086][django.server.log_message():187] [INFO] "GET /bound/detail/?max_page=1000&bound_list=6 HTTP/1.1" 200 2409
+[2025-05-23 13:36:18,660][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 191
+[2025-05-23 13:36:30,574][django.server.log_message():187] [INFO] "POST /container/detail/ HTTP/1.1" 200 255
+[2025-05-23 13:36:49,653][django.server.log_message():187] [INFO] "GET /container/container_wcs/ HTTP/1.1" 200 255
+[2025-05-23 13:36:56,278][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 188148
+[2025-05-23 13:37:04,718][django.server.log_message():187] [INFO] "GET /container/container_wcs/ HTTP/1.1" 200 255
+[2025-05-23 13:37:10,982][django.server.log_message():187] [INFO] "GET /container/container_wcs/ HTTP/1.1" 200 255
+[2025-05-23 13:37:15,499][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 188474
+[2025-05-23 13:37:59,977][django.server.log_message():187] [INFO] "OPTIONS /bin/88/ HTTP/1.1" 200 0
+[2025-05-23 13:37:59,977][django.server.log_message():187] [INFO] "OPTIONS /bin/88/ HTTP/1.1" 200 0
+[2025-05-23 13:38:00,004][django.server.log_message():187] [INFO] "GET /bin/88/ HTTP/1.1" 200 556
+[2025-05-23 13:38:00,010][django.server.log_message():187] [INFO] "OPTIONS /container/locationdetail/?container=49 HTTP/1.1" 200 0
+[2025-05-23 13:38:00,028][django.server.log_message():187] [INFO] "GET /bin/88/ HTTP/1.1" 200 556
+[2025-05-23 13:38:00,044][django.server.log_message():187] [INFO] "GET /container/locationdetail/?container=49 HTTP/1.1" 200 830
+[2025-05-23 13:38:00,060][django.server.log_message():187] [INFO] "GET /container/locationdetail/?container=49 HTTP/1.1" 200 830
+[2025-05-23 13:38:28,254][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 188474
+[2025-05-23 13:38:31,851][django.server.log_message():187] [INFO] "OPTIONS /bin/79/ HTTP/1.1" 200 0
+[2025-05-23 13:38:31,894][django.server.log_message():187] [INFO] "GET /bin/79/ HTTP/1.1" 200 393