def get_all_not_pour_info(app_id): # 添加这一行声明 global task_before, half_volume, artifact_timestamps headers = {"AppID": app_id} response = requests.get(NOT_POUR_INFO_URL, headers=headers) if response.status_code == 200: data = response.json() if data.get("Code") == 200: artifact_list = data["Data"] send_list = [] tasks = [] if not artifact_list: return tasks if task_before is not None: # 这里可以处理上一条任务的逻辑 print(f"上一条任务: {task_before}") # 记录F块位置 f_positions = get_f_block_positions(artifact_list) # 统计F块数量和总方量 f_blocks = [artifact for artifact in artifact_list if artifact.get("BlockNumber") == "F"] f_block_count = len(f_blocks) total_f_volume = sum(artifact["BetonVolume"] for artifact in f_blocks) # 处理最上面一条 latest_artifact = artifact_list[0] beton_task_id = latest_artifact["BetonTaskID"] beton_volume = latest_artifact["BetonVolume"] artifact_id = latest_artifact["ArtifactActionID"] block_number = latest_artifact.get("BlockNumber", "") task_before = { "beton_task_id": latest_artifact["BetonTaskID"], "beton_volume": latest_artifact["BetonVolume"], "artifact_id": latest_artifact["ArtifactActionID"], "block_number": latest_artifact.get("BlockNumber", "") } task_data = get_task_info(app_id, beton_task_id) if f_block_count == 1 and f_positions == [2]: f_volume = f_blocks.get("BetonVolume") half_volume[0] = round(total_f_volume / 2, 2) half_volume[1] = f_volume - half_volume[0] # 如果有多个F块,先派当前任务,再创建补方任务 if f_block_count > 2: adjusted_volume = total_f_volume - half_volume[0] tasks.append({ "beton_task_id": beton_task_id, "beton_volume": adjusted_volume, "artifact_id": artifact_id, "block_number": block_number, }) send_list.append({ "beton_task_id": beton_task_id, "beton_volume": adjusted_volume, "artifact_id": artifact_id, "block_number": block_number, "beton_grade": task_data["BetonGrade"], "mix_id": task_data["MixID"], "time": artifact_timestamps.get(artifact_id, datetime.now()) }) dispatch_list_second = artifact_list[1] task_data_second = get_task_info(app_id, dispatch_list_second["BetonTaskID"]) dispatch_list_third = artifact_list[2] task_data_third = get_task_info(app_id, dispatch_list_third["BetonTaskID"]) send_list.append({ "beton_task_id": dispatch_list_second["BetonTaskID"], "beton_volume": 0, "artifact_id": dispatch_list_second["ArtifactActionID"], "block_number": dispatch_list_second["BlockNumber"], "beton_grade": task_data_second["BetonGrade"], "mix_id": task_data_second["MixID"], "time": artifact_timestamps.get(dispatch_list_second["ArtifactActionID"], datetime.now()) }) send_list.append({ "beton_task_id": dispatch_list_third["BetonTaskID"], "beton_volume": 0, "artifact_id": dispatch_list_third["ArtifactActionID"], "block_number": dispatch_list_third["BlockNumber"], "beton_grade": task_data_third["BetonGrade"], "mix_id": task_data_third["MixID"], "time": artifact_timestamps.get(dispatch_list_third["ArtifactActionID"], datetime.now()) }) # 更新新出现的 artifact_id 的时间戳 current_artifact_ids = {item["artifact_id"] for item in send_list} for artifact_id in current_artifact_ids: if artifact_id not in artifact_timestamps: artifact_timestamps[artifact_id] = datetime.now() return tasks, artifact_list, send_list, half_volume elif f_block_count == 2 and f_positions == [0, 1] and task_before.block_number == "F": adjusted_volume = 0 tasks.append({ "beton_task_id": beton_task_id, "beton_volume": adjusted_volume, "artifact_id": artifact_id, "block_number": "补方", }) send_list.append({ "beton_task_id": beton_task_id, "beton_volume": adjusted_volume, "artifact_id": artifact_id, "block_number": block_number, "beton_grade": task_data["BetonGrade"], "mix_id": task_data["MixID"], "time": artifact_timestamps.get(artifact_id, datetime.now()) }) dispatch_list_second = artifact_list[1] task_data_second = get_task_info(app_id, dispatch_list_second["BetonTaskID"]) dispatch_list_third = artifact_list[2] task_data_third = get_task_info(app_id, dispatch_list_third["BetonTaskID"]) send_list.append({ "beton_task_id": dispatch_list_second["BetonTaskID"], "beton_volume": adjusted_volume, "artifact_id": dispatch_list_second["ArtifactActionID"], "block_number": dispatch_list_second["BlockNumber"], "beton_grade": task_data_second["BetonGrade"], "mix_id": task_data_second["MixID"], "time": artifact_timestamps.get(dispatch_list_second["ArtifactActionID"], datetime.now()) }) send_list.append({ "beton_task_id": dispatch_list_third["BetonTaskID"], "beton_volume": dispatch_list_third["BetonVolume"], "artifact_id": dispatch_list_third["ArtifactActionID"], "block_number": dispatch_list_third["BlockNumber"], "beton_grade": task_data_third["BetonGrade"], "mix_id": task_data_third["MixID"], "time": artifact_timestamps.get(dispatch_list_third["ArtifactActionID"], datetime.now()) }) # 更新新出现的 artifact_id 的时间戳 current_artifact_ids = {item["artifact_id"] for item in send_list} for artifact_id in current_artifact_ids: if artifact_id not in artifact_timestamps: artifact_timestamps[artifact_id] = datetime.now() return tasks, artifact_list, send_list, half_volume elif f_block_count == 2 and f_positions == [1, 2]: adjusted_volume = total_f_volume - half_volume[0] tasks.append({ "beton_task_id": beton_task_id, "beton_volume": beton_volume, "artifact_id": artifact_id, "block_number": block_number, }) send_list.append({ "beton_task_id": beton_task_id, "beton_volume": beton_volume, "artifact_id": artifact_id, "block_number": block_number, "beton_grade": task_data["BetonGrade"], "mix_id": task_data["MixID"], "time": artifact_timestamps.get(artifact_id, datetime.now()) }) dispatch_list_second = artifact_list[1] task_data_second = get_task_info(app_id, dispatch_list_second["BetonTaskID"]) dispatch_list_third = artifact_list[2] task_data_third = get_task_info(app_id, dispatch_list_third["BetonTaskID"]) send_list.append({ "beton_task_id": dispatch_list_second["BetonTaskID"], "beton_volume": adjusted_volume, "artifact_id": dispatch_list_second["ArtifactActionID"], "block_number": dispatch_list_second["BlockNumber"], "beton_grade": task_data_second["BetonGrade"], "mix_id": task_data_second["MixID"], "time": artifact_timestamps.get(dispatch_list_second["ArtifactActionID"], datetime.now()) }) send_list.append({ "beton_task_id": dispatch_list_third["BetonTaskID"], "beton_volume": 0, "artifact_id": dispatch_list_third["ArtifactActionID"], "block_number": dispatch_list_third["BlockNumber"], "beton_grade": task_data_third["BetonGrade"], "mix_id": task_data_third["MixID"], "time": artifact_timestamps.get(dispatch_list_third["ArtifactActionID"], datetime.now()) }) # 更新新出现的 artifact_id 的时间戳 current_artifact_ids = {item["artifact_id"] for item in send_list} for artifact_id in current_artifact_ids: if artifact_id not in artifact_timestamps: artifact_timestamps[artifact_id] = datetime.now() return tasks, artifact_list, send_list, half_volume elif f_block_count == 2 and f_positions == [0, 1] and task_before.block_number != "F": adjusted_volume = total_f_volume - half_volume[0] tasks.append({ "beton_task_id": beton_task_id, "beton_volume": adjusted_volume, "artifact_id": artifact_id, "block_number": block_number, }) send_list.append({ "beton_task_id": beton_task_id, "beton_volume": adjusted_volume, "artifact_id": artifact_id, "block_number": block_number, "beton_grade": task_data["BetonGrade"], "mix_id": task_data["MixID"], "time": artifact_timestamps.get(artifact_id, datetime.now()) }) dispatch_list_second = artifact_list[1] task_data_second = get_task_info(app_id, dispatch_list_second["BetonTaskID"]) dispatch_list_third = artifact_list[2] task_data_third = get_task_info(app_id, dispatch_list_third["BetonTaskID"]) send_list.append({ "beton_task_id": dispatch_list_second["BetonTaskID"], "beton_volume": 0, "artifact_id": dispatch_list_second["ArtifactActionID"], "block_number": dispatch_list_second["BlockNumber"], "beton_grade": task_data_second["BetonGrade"], "mix_id": task_data_second["MixID"], "time": artifact_timestamps.get(dispatch_list_second["ArtifactActionID"], datetime.now()) }) send_list.append({ "beton_task_id": dispatch_list_third["BetonTaskID"], "beton_volume": dispatch_list_third["BetonVolume"], "artifact_id": dispatch_list_third["ArtifactActionID"], "block_number": dispatch_list_third["BlockNumber"], "beton_grade": task_data_third["BetonGrade"], "mix_id": task_data_third["MixID"], "time": artifact_timestamps.get(dispatch_list_third["ArtifactActionID"], datetime.now()) }) # 更新新出现的 artifact_id 的时间戳 current_artifact_ids = {item["artifact_id"] for item in send_list} for artifact_id in current_artifact_ids: if artifact_id not in artifact_timestamps: artifact_timestamps[artifact_id] = datetime.now() return tasks, artifact_list, send_list, half_volume elif f_block_count == 1 and f_positions == [2]: adjusted_volume = beton_volume + half_volume[0] tasks.append({ "beton_task_id": beton_task_id, "beton_volume": adjusted_volume, "artifact_id": artifact_id, "block_number": block_number, }) send_list.append({ "beton_task_id": beton_task_id, "beton_volume": adjusted_volume, "artifact_id": artifact_id, "block_number": block_number, "beton_grade": task_data["BetonGrade"], "mix_id": task_data["MixID"], "time": artifact_timestamps.get(artifact_id, datetime.now()) }) dispatch_list_second = artifact_list[1] task_data_second = get_task_info(app_id, dispatch_list_second["BetonTaskID"]) dispatch_list_third = artifact_list[2] task_data_third = get_task_info(app_id, dispatch_list_third["BetonTaskID"]) send_list.append({ "beton_task_id": dispatch_list_second["BetonTaskID"], "beton_volume": beton_volume + half_volume[1], "artifact_id": dispatch_list_second["ArtifactActionID"], "block_number": dispatch_list_second["BlockNumber"], "beton_grade": task_data_second["BetonGrade"], "mix_id": task_data_second["MixID"], "time": artifact_timestamps.get(dispatch_list_second["ArtifactActionID"], datetime.now()) }) send_list.append({ "beton_task_id": dispatch_list_third["BetonTaskID"], "beton_volume": dispatch_list_third["BetonVolume"], "artifact_id": dispatch_list_third["ArtifactActionID"], "block_number": dispatch_list_third["BlockNumber"], "beton_grade": task_data_third["BetonGrade"], "mix_id": task_data_third["MixID"], "time": artifact_timestamps.get(dispatch_list_third["ArtifactActionID"], datetime.now()) }) # 更新新出现的 artifact_id 的时间戳 current_artifact_ids = {item["artifact_id"] for item in send_list} for artifact_id in current_artifact_ids: if artifact_id not in artifact_timestamps: artifact_timestamps[artifact_id] = datetime.now() return tasks, artifact_list, send_list, half_volume elif f_block_count == 1 and f_positions == [1]: adjusted_volume = beton_volume + half_volume[1] tasks.append({ "beton_task_id": beton_task_id, "beton_volume": adjusted_volume, "artifact_id": artifact_id, "block_number": block_number, }) send_list.append({ "beton_task_id": beton_task_id, "beton_volume": adjusted_volume, "artifact_id": artifact_id, "block_number": block_number, "beton_grade": task_data["BetonGrade"], "mix_id": task_data["MixID"], "time": artifact_timestamps.get(artifact_id, datetime.now()) }) dispatch_list_second = artifact_list[1] task_data_second = get_task_info(app_id, dispatch_list_second["BetonTaskID"]) dispatch_list_third = artifact_list[2] task_data_third = get_task_info(app_id, dispatch_list_third["BetonTaskID"]) send_list.append({ "beton_task_id": dispatch_list_second["BetonTaskID"], "beton_volume": dispatch_list_third["BetonVolume"], "artifact_id": dispatch_list_second["ArtifactActionID"], "block_number": dispatch_list_second["BlockNumber"], "beton_grade": task_data_second["BetonGrade"], "mix_id": task_data_second["MixID"], "time": artifact_timestamps.get(dispatch_list_second["ArtifactActionID"], datetime.now()) }) send_list.append({ "beton_task_id": dispatch_list_third["BetonTaskID"], "beton_volume": dispatch_list_third["BetonVolume"], "artifact_id": dispatch_list_third["ArtifactActionID"], "block_number": dispatch_list_third["BlockNumber"], "beton_grade": task_data_third["BetonGrade"], "mix_id": task_data_third["MixID"], "time": artifact_timestamps.get(dispatch_list_third["ArtifactActionID"], datetime.now()) }) # 更新新出现的 artifact_id 的时间戳 current_artifact_ids = {item["artifact_id"] for item in send_list} for artifact_id in current_artifact_ids: if artifact_id not in artifact_timestamps: artifact_timestamps[artifact_id] = datetime.now() return tasks, artifact_list, send_list, half_volume elif f_block_count == 1 and f_positions == [0]: adjusted_volume = 0 tasks.append({ "beton_task_id": beton_task_id, "beton_volume": adjusted_volume, "artifact_id": artifact_id, "block_number": "补方", }) send_list.append({ "beton_task_id": beton_task_id, "beton_volume": adjusted_volume, "artifact_id": artifact_id, "block_number": block_number, "beton_grade": task_data["BetonGrade"], "mix_id": task_data["MixID"], "time": artifact_timestamps.get(artifact_id, datetime.now()) }) dispatch_list_second = artifact_list[1] task_data_second = get_task_info(app_id, dispatch_list_second["BetonTaskID"]) dispatch_list_third = artifact_list[2] task_data_third = get_task_info(app_id, dispatch_list_third["BetonTaskID"]) send_list.append({ "beton_task_id": dispatch_list_second["BetonTaskID"], "beton_volume": dispatch_list_third["BetonVolume"], "artifact_id": dispatch_list_second["ArtifactActionID"], "block_number": dispatch_list_second["BlockNumber"], "beton_grade": task_data_second["BetonGrade"], "mix_id": task_data_second["MixID"], "time": artifact_timestamps.get(dispatch_list_second["ArtifactActionID"], datetime.now()) }) send_list.append({ "beton_task_id": dispatch_list_third["BetonTaskID"], "beton_volume": dispatch_list_third["BetonVolume"], "artifact_id": dispatch_list_third["ArtifactActionID"], "block_number": dispatch_list_third["BlockNumber"], "beton_grade": task_data_third["BetonGrade"], "mix_id": task_data_third["MixID"], "time": artifact_timestamps.get(dispatch_list_third["ArtifactActionID"], datetime.now()) }) # 更新新出现的 artifact_id 的时间戳 current_artifact_ids = {item["artifact_id"] for item in send_list} for artifact_id in current_artifact_ids: if artifact_id not in artifact_timestamps: artifact_timestamps[artifact_id] = datetime.now() return tasks, artifact_list, send_list, half_volume elif f_block_count == 0: adjusted_volume = beton_volume tasks.append({ "beton_task_id": beton_task_id, "beton_volume": adjusted_volume, "artifact_id": artifact_id, "block_number": block_number, }) send_list.append({ "beton_task_id": beton_task_id, "beton_volume": adjusted_volume, "artifact_id": artifact_id, "block_number": block_number, "beton_grade": task_data["BetonGrade"], "mix_id": task_data["MixID"], "time": artifact_timestamps.get(artifact_id, datetime.now()) }) dispatch_list_second = artifact_list[1] task_data_second = get_task_info(app_id, dispatch_list_second["BetonTaskID"]) dispatch_list_third = artifact_list[2] task_data_third = get_task_info(app_id, dispatch_list_third["BetonTaskID"]) send_list.append({ "beton_task_id": dispatch_list_second["BetonTaskID"], "beton_volume": dispatch_list_third["BetonVolume"], "artifact_id": dispatch_list_second["ArtifactActionID"], "block_number": dispatch_list_second["BlockNumber"], "beton_grade": task_data_second["BetonGrade"], "mix_id": task_data_second["MixID"], "time": artifact_timestamps.get(dispatch_list_second["ArtifactActionID"], datetime.now()) }) send_list.append({ "beton_task_id": dispatch_list_third["BetonTaskID"], "beton_volume": dispatch_list_third["BetonVolume"], "artifact_id": dispatch_list_third["ArtifactActionID"], "block_number": dispatch_list_third["BlockNumber"], "beton_grade": task_data_third["BetonGrade"], "mix_id": task_data_third["MixID"], "time": artifact_timestamps.get(dispatch_list_third["ArtifactActionID"], datetime.now()) }) # 更新新出现的 artifact_id 的时间戳 current_artifact_ids = {item["artifact_id"] for item in send_list} for artifact_id in current_artifact_ids: if artifact_id not in artifact_timestamps: artifact_timestamps[artifact_id] = datetime.now() return tasks, artifact_list, send_list, half_volume else: print("报警") raise Exception("获取未浇筑信息失败") { "ArtifactID": "QR1B32000153AD", "ArtifactActionID": 346482967298140, "ArtifactIDVice1": "Q00001AD", "ProduceRingNumber": 1, "MouldCode": "SHR2B3-9", "SkeletonID": "QR1B2000048A", "RingTypeCode": "R22", "SizeSpecification": "6900*1500", "BuriedDepth": "中埋", "BlockNumber": "F", "HoleRingMarking": "否", "GroutingPipeMarking": "否", "PolypropyleneFiberMarking": "否", "BetonVolume": 0.6, "BetonTaskID": "20251020-01" },