import json from config.minIO import get_temp_url from config.pgDb import pg_pool from utils import MyUtils def insert_ysa_image( file_name, resolution, size, cocoon_count, max_confidence, min_confidence, average_confidence, other_info, preprocess_time_ms, inference_time_ms, postprocess_time_ms, name, image_pre, image_after, created_by, ): with pg_pool.getConn() as conn: with conn.cursor() as cursor: other_info = json.dumps(other_info) cursor.execute( """ INSERT INTO image_sca ( upload_datetime, file_name, resolution, size, cocoon_count, max_confidence, min_confidence, average_confidence, other_info, preprocess_time_ms, inference_time_ms, postprocess_time_ms, name, image_pre, image_after, created_by ) VALUES (NOW(), %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s ) RETURNING id """, ( file_name, resolution, size, cocoon_count, max_confidence, min_confidence, average_confidence, other_info, preprocess_time_ms, inference_time_ms, postprocess_time_ms, name, image_pre, image_after, created_by, ), ) new_id = cursor.fetchone()[0] conn.commit() return new_id def get_ysa_image_list(user_id, name, page=1, page_size=10): """ 获取用户已分析图片列表,带分页 """ offset = (page - 1) * page_size with pg_pool.getConn() as conn: with conn.cursor() as cursor: # 1️⃣ 查询总条数 # ✅ 改进版:支持 name 为空时统计全部,不为空时模糊统计 cursor.execute( """ SELECT COUNT(*) FROM image_ysa WHERE created_by = %s AND (%s = '' OR name LIKE '%%' || %s || '%%') """, (user_id, name, name), ) total = cursor.fetchone()[0] # 2️⃣ 查询当前页数据 # ✅ 改进版 cursor.execute( """ SELECT id, name, upload_datetime, file_name, image_pre, image_after, resolution, size, silkworm_count, max_confidence, min_confidence, average_confidence, other_info, preprocess_time_ms, inference_time_ms, postprocess_time_ms FROM image_ysa WHERE created_by = %s AND (%s = '' OR name LIKE '%%' || %s || '%%') ORDER BY upload_datetime DESC LIMIT %s OFFSET %s """, (user_id, name, name, page_size, offset), ) rows = cursor.fetchall() result = [] for row in rows: result.append( { "id": row[0], "name": row[1], "upload_datetime": MyUtils.format_datetime(row[2]), "file_name": row[3], "image_pre": get_temp_url("image-ysa", "raw/" + row[4]), "image_after": get_temp_url("image-ysa", "ai/" + row[5]), "resolution": row[6], "size": MyUtils.safe_round(row[7] / 1024, 2), "silkworm_count": row[8], "max_confidence": row[9], "min_confidence": row[10], "average_confidence": row[11], "other_info": row[12], "preprocess_time_ms": MyUtils.safe_round(row[13], 4), "inference_time_ms": MyUtils.safe_round(row[14], 4), "postprocess_time_ms": MyUtils.safe_round(row[15], 4), } ) return total, result