/// <summary>
        /// 根据应用,分组,用户查询
        /// </summary>
        /// <param name="user_id"></param>
        /// <param name="group_id"></param>
        /// <param name="secret_id"></param>
        /// <returns></returns>
        public static async Task <List <user_face_storage> > GetUserList_By_UGS(string user_id, List <long> group_ids, string secret_id)
        {
            string where = @" AND api_user_id = @user_id AND api_group_id = ANY(@group_ids) AND secret_id = @secret_id AND is_delete=@is_delete";

            return(await SqlDapperHelper.ExecuteReaderRetListAsync <user_face_storage>(Select + where,
                                                                                       new { user_id, group_ids, secret_id, is_delete = false }));
        }
        /// <summary>
        /// 根据 应用ID 和 分组ID 查询用户
        /// </summary>
        /// <param name="secret_id"></param>
        /// <param name="group_id"></param>
        /// <param name="start"></param>
        /// <param name="length"></param>
        /// <returns></returns>
        public static async Task <List <user_face_storage> > GetUser_Face_Storage_By_UGS_Asunc_All(string secret_id, List <long> group_ids)
        {
            string sql = "SELECT PUBLIC.user_face_storage.api_user_id FROM PUBLIC.user_face_storage WHERE 1 = 1 ";

            string where = " AND secret_id = @secret_id  AND api_group_id = ANY(@group_ids) AND is_delete = @is_delete";
            return(await SqlDapperHelper.ExecuteReaderRetListAsync <user_face_storage>(sql + where, new { secret_id, group_ids, is_delete = false }));
        }
        /// <summary>
        /// 根据应用ID 查询分组
        /// </summary>
        /// <param name="secret_id"></param>
        /// <param name="start"></param>
        /// <param name="length"></param>
        /// <returns></returns>
        public static async Task <List <user_face_storage_group> > GetUser_Face_Storage_Groups_BySecretIdAsunc(string secret_id, int start, int length)
        {
            string where = " AND secret_id = @secret_id AND is_delete = @is_delete";
            string limit = " limit @length offset @start ";

            return(await SqlDapperHelper.ExecuteReaderRetListAsync <user_face_storage_group>(SelectSql + where + limit, new { secret_id, length, start, is_delete = false }));
        }
        /// <summary>
        /// 根据应用,分组,用户查询
        /// </summary>
        /// <param name="user_id"></param>
        /// <param name="secret_id"></param>
        /// <returns></returns>
        public static async Task <List <T> > GetStorage_By_UGS_ALL <T>(string user_id, string secret_id)
        {
            string sql = "SELECT * FROM PUBLIC.user_face_storage S left join PUBLIC.user_face_storage_group G on S.api_group_id=G.id WHERE 1 = 1";

            string where = " AND S.api_user_id = @user_id AND S.secret_id = @secret_id AND S.is_delete=@is_delete";
            return(await SqlDapperHelper.ExecuteReaderRetListAsync <T>(sql + where,
                                                                       new { user_id, secret_id, is_delete = false }));
        }
        /// <summary>
        /// 根据 应用ID 和 分组ID 查询用户
        /// </summary>
        /// <param name="secret_id"></param>
        /// <param name="group_id"></param>
        /// <param name="start"></param>
        /// <param name="length"></param>
        /// <returns></returns>
        public static async Task <List <user_face_storage> > GetUser_Face_Storage_By_UGS_Asunc(string secret_id, long group_id, int start, int length)
        {
            string sql = "SELECT PUBLIC.user_face_storage.api_user_id FROM PUBLIC.user_face_storage WHERE 1 = 1 ";

            string where = " AND secret_id = @secret_id  AND api_group_id = @group_id AND is_delete = @is_delete";
            string limit = " limit @length offset @start ";

            return(await SqlDapperHelper.ExecuteReaderRetListAsync <user_face_storage>(sql + where + limit, new { secret_id, group_id, length, start, is_delete = false }));
        }
        /// <summary>
        /// 根据应用ID和分组 查找数据
        /// </summary>
        /// <returns></returns>
        public static async Task <List <user_face_storage_group> > Get_storage_group_BySecretGroupAsync(string secret_id, IEnumerable <string> group_names)
        {
            string where = " AND is_delete=@is_delete AND secret_id = @secret_id AND group_name = ANY(@group_names)";

            return(await SqlDapperHelper.ExecuteReaderRetListAsync <user_face_storage_group>(SelectSql + where, new { secret_id, group_names, is_delete = false }));
        }