FreeSql仓储封装类

  • binGe博客
  • FreeSql
  • 2022/10/19 11:34:00
  • 人已阅读
简介FreeSql新封装类:自带Creator信息和假删除设置
using FreeSql;
using FreeSql.Internal.Model;
using Microsoft.Data.SqlClient;
using DeYi.NuGet.JwtToken;
using DeYi.NuGet.Other;
using DeYi.NuGet.PagedData;
using DeYi.NuGet.SnowFlake.Single;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Linq.Expressions;
using System.Text;
using OCR.Domain.Dto;
using OCR.Domain.Common;
using DeYi.NuGet;
using OCR.Domain.Enum;

namespace OCR.WebAPI.System.FreeSql
{
    /// 
    /// FreeSql新封装类:自带Creator信息和假删除设置
    /// 
    public static class FreeSqlNew
    {
        /// 
        ///  重写freesql:新增单个
        /// 
        /// 
        /// 
        public static IInsert InsertOne(this IFreeSql FreeSql, TEntity T, ISnowFlake snowFlake) where TEntity : BaseEntity
        {
            T.ID = snowFlake.NextId();
            T.CreatorID = CurrentUser.UserID;
            T.CreatorName = CurrentUser.UserName;
            T.CreateDate = DateTime.Now;
            T.IsDelete = false;
            T.Terminal = EnumHelper.GetModel((int)(CurrentUser.Terminal ?? 10));
            return FreeSql.Insert(T);
        }


        /// 
        ///  重写freesql:新增多个:待测
        /// 
        /// 
        /// 
        public static IInsert InsertMany(this IFreeSql FreeSql, List list, ISnowFlake snowFlake) where TEntity : BaseEntity
        {
            foreach (var T in list)
            {
                T.ID = snowFlake.NextId();
                T.CreatorID = CurrentUser.UserID;
                T.CreatorName = CurrentUser.UserName;
                T.CreateDate = DateTime.Now;
                T.IsDelete = false;
                T.Terminal = EnumHelper.GetModel((int)CurrentUser.Terminal);
            }

            return FreeSql.Insert(list);
        }


        /// 
        /// 重写freesql:修改(仅实体)
        /// 
        /// 
        /// 
        public static IUpdate UpdateOne(this IFreeSql FreeSql, TEntity T) where TEntity : BaseEntity
        {
            T.LastModifierID = CurrentUser.UserID;
            T.LastModifierName = CurrentUser.UserName;
            T.LastModificationTime = DateTime.Now;
            return FreeSql.Update().SetSource(T);
        }

        /// 
        /// 重写freesql:修改(仅实体 + 自动附加Modify等字段)多个
        /// 
        /// 
        /// 
        public static IUpdate UpdateMany(this IFreeSql FreeSql, List list) where TEntity : BaseEntity
        {
            foreach (var T in list)
            {
                T.LastModifierID = CurrentUser.UserID;
                T.LastModifierName = CurrentUser.UserName;
                T.LastModificationTime = DateTime.Now;
            }

            return FreeSql.Update().SetSource(list);
        }


        /// 
        /// 重写freesql:修改(仅指定字段 + 自动附加Modify等字段)
        /// 
        /// 
        /// 
        /// Lambda条件
        /// 
        /// 
        public static IUpdate UpdateBy(this IFreeSql FreeSql, Expression> Predicate, Expression> Content) where TEntity : BaseEntity, new()
        {
            return FreeSql.Update().Set(Content).Set(e => new TEntity
            {
                LastModifierID = CurrentUser.UserID,
                LastModifierName = CurrentUser.UserName,
                LastModificationTime = DateTime.Now
            }).Where(Predicate);
        }



        /// 
        /// 重写freesql:删除单个,无需实现ExecuteAffrowsAsync
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public static async Task DeleteOne(this IFreeSql FreeSql, long ID, bool isTrueDelete = false) where TEntity : BaseEntity, new()
        {
            if (isTrueDelete)
            {
                return await FreeSql.Delete(ID).ExecuteAffrowsAsync();
            }
            return await FreeSql.Update().Set(e => new TEntity
            {
                LastModifierID = CurrentUser.UserID,
                LastModifierName = CurrentUser.UserName,
                LastModificationTime = DateTime.Now,
                IsDelete = true,
            }).Where(e => e.ID == ID).ExecuteAffrowsAsync();
        }


        /// 
        /// 重写freesql:删除ByFilter,无需实现ExecuteAffrowsAsync
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public static async Task DeleteMany(this IFreeSql FreeSql, Expression> filter, bool isTrueDelete = false) where TEntity : BaseEntity, new()
        {
            if (isTrueDelete)
            {
                return await FreeSql.Delete(filter).ExecuteAffrowsAsync();
            }
            return await FreeSql.Update().Set(e => new TEntity
            {
                LastModifierID = CurrentUser.UserID,
                LastModifierName = CurrentUser.UserName,
                LastModificationTime = DateTime.Now,
                IsDelete = true,
            }).Where(filter).ExecuteAffrowsAsync();
        }



        /// 
        /// 执行存储过程
        /// 
        /// 
        /// 
        /// 
        public static async Task> DoStoredProcedure(IFreeSql FreeSql, DoStoredProcedureInputDto Input)
        {
            List ResultData = new();
            List SqlParameterList = new();
            Input.ParameterList.ForEach(item =>
            {
                string[] Parameter = item.Split('=');
                SqlParameterList.Add(new SqlParameter(Parameter[0], Parameter[1]));
            });
            SqlParameterList.Add(new SqlParameter($"IdentityUserId", CurrentUser.UserID));
            //SqlParameterList.Add(new SqlParameter($"ResultStatus", SqlDbType.Int) { Direction = ParameterDirection.Output, Size = int.MaxValue });
            //SqlParameterList.Add(new SqlParameter($"Msg", SqlDbType.NVarChar) { Direction = ParameterDirection.Output, Size = int.MaxValue });

            //委托方法
            Func, Task> func = e =>
            {
                var DataReader = e.Object;
                do
                {
                    string ResultDataItem = ToJson(DataReader);
                    if (!ResultDataItem.IsNullOrEmpty())
                        ResultData.Add(ResultDataItem);
                } while (DataReader.NextResult());

                return Task.CompletedTask;
            };
            //读取DataReader并执行委托方法func
            await FreeSql.Ado.ExecuteReaderAsync(func, CommandType.StoredProcedure, Input.ActionName, SqlParameterList.ToArray());

            return ResultData;
        }

        #region private lib
        private static string ToJson(DbDataReader dataReader)
        {
            StringBuilder jsonString = new StringBuilder();
            jsonString.Append('[');
            while (dataReader.Read())
            {
                jsonString.Append('{');
                for (int i = 0; i < dataReader.FieldCount; i++)
                {
                    Type type = dataReader.GetFieldType(i);
                    string strKey = dataReader.GetName(i);
                    string strValue = dataReader[i].ToString();
                    jsonString.Append("\"" + strKey + "\":");
                    strValue = StringFormat(strValue, type);
                    if (i < dataReader.FieldCount - 1)
                    {
                        jsonString.Append(strValue + ",");
                    }
                    else
                    {
                        jsonString.Append(strValue);
                    }
                }
                jsonString.Append("},");
            }
            jsonString.Remove(jsonString.Length - 1, 1);
            if (jsonString.Length > 0)
                jsonString.Append(']');
            else
                jsonString.Append("[]");
            return jsonString.ToString();
        }

        private static string StringFormat(string str, Type type)
        {
            if (string.IsNullOrEmpty(str)) return "\"\"";
            if (type == typeof(string))
            {
                str = "\"" + ConvertStrToSpecificationStrs(str) + "\"";
            }
            else if (type == typeof(DateTime))
            {
                str = "\"" + Convert.ToDateTime(str).ToString("yyyy-MM-dd HH:mm:ss") + "\"";
            }
            else if (type == typeof(Guid))
            {
                str = "\"" + str + "\"";
            }
            else if (type == typeof(bool))
            {
                str = str.ToLower();
            }
            return str;
        }

        private static string ConvertStrToSpecificationStrs(string str)
        {
            if (string.IsNullOrEmpty(str)) return "";
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < str.Length; i++)
            {
                char cStr = str.ToCharArray()[i];

                switch (cStr)
                {
                    case '\"':
                        sb.Append("\\\""); break;
                    case '\\':
                        sb.Append("\\\\"); break;
                    case '/':
                        sb.Append("\\/"); break;
                    case '\b':
                        sb.Append("\\b"); break;
                    case '\f':
                        sb.Append("\\f"); break;
                    case '\n':
                        sb.Append("\\n"); break;
                    case '\r':
                        sb.Append("\\r"); break;
                    case '\t':
                        sb.Append("\\t"); break;
                    default:
                        sb.Append(cStr); break;
                }
            }
            return sb.ToString();
        }
        #endregion private lib
    }
}

文章评论

评论
  • 消灭零回复
Top