From f43b7df8400f4fcffc9f19dca0888d61e2b33d5f Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期三, 12 三月 2025 18:41:52 +0800
Subject: [PATCH] WMS系统添加PDA权限,PDA程序

---
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/ServiceBase.cs |  691 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 691 insertions(+), 0 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/ServiceBase.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/ServiceBase.cs"
new file mode 100644
index 0000000..2db7ace
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/ServiceBase.cs"
@@ -0,0 +1,691 @@
+锘縰sing Magicodes.ExporterAndImporter.Core;
+using Magicodes.ExporterAndImporter.Core.Models;
+using Magicodes.ExporterAndImporter.Excel;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc.RazorPages;
+using Microsoft.Extensions.Options;
+using Newtonsoft.Json;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
+using SqlSugar;
+using System.Drawing.Drawing2D;
+using System.Dynamic;
+using System.Linq.Expressions;
+using System.Reflection;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.Utilities;
+using static OfficeOpenXml.ExcelErrorValue;
+
+namespace WIDESEA_Core.BaseServices
+{
+    public class ServiceBase<TEntity, TRepository> : ServiceFunFilter<TEntity>, IService<TEntity>
+         where TEntity : class, new()
+         where TRepository : IRepository<TEntity>
+
+    {
+        public ServiceBase(TRepository BaseDal)
+        {
+            this.BaseDal = BaseDal;
+        }
+
+        public TRepository BaseDal { get; set; } //閫氳繃鍦ㄥ瓙绫荤殑鏋勯�犲嚱鏁颁腑娉ㄥ叆锛岃繖閲屾槸鍩虹被锛屼笉鐢ㄦ瀯閫犲嚱鏁�
+
+        public ISqlSugarClient Db => BaseDal.Db;
+
+        private PropertyInfo[] _propertyInfo { get; set; } = null;
+        public PropertyInfo[] TProperties
+        {
+            get
+            {
+                if (_propertyInfo != null)
+                {
+                    return _propertyInfo;
+                }
+                _propertyInfo = typeof(TEntity).GetProperties();
+                return _propertyInfo;
+            }
+        }
+
+        public virtual PageGridData<TEntity> GetPageData(PageDataOptions options)
+        {
+            string wheres = options.ValidatePageOptions(TProperties);
+            //鑾峰彇鎺掑簭瀛楁
+            Dictionary<string, OrderByType> orderbyDic = options.GetPageDataSort(TProperties);
+
+            PageGridData<TEntity> pageGridData = new PageGridData<TEntity>();
+            pageGridData = BaseDal.QueryPage(wheres, options.Page, options.Rows, orderbyDic);
+
+            return pageGridData;
+        }
+        public string ValidatePageOptions(PageDataOptions options)
+        {
+            options = options ?? new PageDataOptions();
+            string text = "";
+            List<SearchParameters> searchParametersList = new List<SearchParameters>();
+            if (options.Filter != null && options.Filter.Count > 0)
+            {
+                searchParametersList.AddRange(options.Filter);
+            }
+            else if (!string.IsNullOrEmpty(options.Wheres))
+            {
+                try
+                {
+                    searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>();
+                    options.Filter = searchParametersList;
+                }
+                catch
+                {
+                }
+            }
+
+            base.QueryRelativeList?.Invoke(searchParametersList);
+            int i;
+            for (i = 0; i < searchParametersList.Count; i++)
+            {
+                if (string.IsNullOrEmpty(searchParametersList[i].Value))
+                {
+                    continue;
+                }
+
+                PropertyInfo propertyInfo = TProperties.Where((PropertyInfo c) => c.Name.ToUpper() == searchParametersList[i].Name.ToUpper()).FirstOrDefault();
+                if (propertyInfo == null)
+                {
+                    continue;
+                }
+
+                object[] values = searchParametersList[i].Value.Split(',');
+                List<(bool, string, object)> list = propertyInfo.ValidationValueForDbType(values).ToList();
+                if (list == null || list.Count() == 0)
+                {
+                    continue;
+                }
+
+                for (int j = 0; j < list.Count(); j++)
+                {
+                    if (j == 0)
+                    {
+                        text += "(";
+                    }
+
+                    text = ((searchParametersList[i].DisplayType.GetLinqCondition() != 0) ? (text + $"{searchParametersList[i].Name} {searchParametersList[i].DisplayType} '{list[j].Item3}'") : (text + $"{searchParametersList[i].Name} = '{list[j].Item3}'"));
+                    text = ((j != list.Count() - 1) ? (text + " or ") : (text + ")"));
+                }
+
+                if (i < searchParametersList.Count - 1)
+                {
+                    text += " and ";
+                }
+            }
+
+            return text;
+        }
+
+        public virtual object GetDetailPage(PageDataOptions pageData)
+        {
+            Type t = typeof(TEntity);
+
+            if (pageData.Value == null) return new PageGridData<object>(total: 0, null);
+            string keyName = t.GetKeyName();
+            ////鐢熸垚鏌ヨ鏉′欢
+            //Expression<Func<TEntity, bool>> whereExpression = keyName.CreateExpression<TEntity>(pageData.Value, LinqExpressionType.Equal);
+            int totalCount = 0;
+            PropertyInfo propertyInfo = t.GetProperties().FirstOrDefault(x => x.GetCustomAttribute<Navigate>() != null);
+            if (propertyInfo != null)
+            {
+                Type detailType = propertyInfo.PropertyType.GetGenericArguments()[0];
+                Navigate navigate = propertyInfo.GetCustomAttribute<Navigate>();
+                List<ExpandoObject> list = BaseDal.Db.Queryable(detailType.Name, "detail").Where(navigate.GetName(), "=", pageData.Value).ToPageList(pageData.Page, pageData.Rows, ref totalCount);
+                return new PageGridData<ExpandoObject>(totalCount, list);
+            }
+            return new PageGridData<object>(total: 0, null);
+        }
+
+        /// <summary>
+        /// 娣诲姞鏁版嵁
+        /// </summary>
+        /// <param name="entity">鍗曚釜瀹炰綋</param>
+        /// <returns></returns>
+        public virtual WebResponseContent AddData(TEntity entity)
+        {
+            try
+            {
+                return BaseDal.AddData(entity) > 0 ? WebResponseContent.Instance.OK() : WebResponseContent.Instance.Error();
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        /// <summary>
+        /// 娣诲姞鏁版嵁
+        /// </summary>
+        /// <param name="entities">瀹炰綋闆嗗悎</param>
+        /// <returns></returns>
+        public virtual WebResponseContent AddData(List<TEntity> entities)
+        {
+            try
+            {
+                return BaseDal.AddData(entities) > 0 ? WebResponseContent.Instance.OK() : WebResponseContent.Instance.Error();
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        /// <summary>
+        /// 娣诲姞鏁版嵁
+        /// </summary>
+        /// <param name="saveModel"></param>
+        /// <returns></returns>
+        public virtual WebResponseContent AddData(SaveModel saveModel)
+        {
+            try
+            {
+                if (saveModel == null || saveModel.MainData == null || saveModel.MainData.Count == 0)//鍒ゆ柇鍙傛暟鏄惁浼犲叆
+                {
+                    return WebResponseContent.Instance.Error("浼犲弬閿欒,鍙傛暟涓嶈兘涓虹┖");
+                }
+                string validResult = typeof(TEntity).ValidateDicInEntity(saveModel.MainData, true, TProperties);
+
+                if (!string.IsNullOrEmpty(validResult))
+                {
+                    return WebResponseContent.Instance.Error(validResult);
+                }
+
+                PropertyInfo keyPro = typeof(TEntity).GetKeyProperty();
+                if (keyPro == null)
+                {
+                    return WebResponseContent.Instance.Error("璇峰厛璁剧疆涓婚敭");
+                }
+                if (keyPro.PropertyType == typeof(Guid))
+                {
+                    saveModel.MainData.Add(keyPro.Name, Guid.NewGuid());
+                }
+                else if (keyPro.PropertyType == typeof(int) || keyPro.PropertyType == typeof(long))
+                {
+                    SugarColumn? sugarColumn = keyPro.GetCustomAttribute<SugarColumn>();
+                    if (sugarColumn?.IsIdentity ?? true)
+                    {
+                        saveModel.MainData.Remove(keyPro.Name.FirstLetterToUpper());
+                        saveModel.MainData.Remove(keyPro.Name.FirstLetterToLower());
+                    }
+                }
+                TEntity entity = saveModel.MainData.DicToModel<TEntity>();
+                if (saveModel.DetailData == null || saveModel.DetailData.Count == 0)
+                {
+                    BaseDal.AddData(entity);
+                    return WebResponseContent.Instance.OK();
+                }
+
+                if (typeof(TEntity).GetNavigatePro() == null)
+                {
+                    return WebResponseContent.Instance.Error("鏈厤缃鑸睘鎬�");
+                }
+
+                Type detailType = typeof(TEntity).GetDetailType();
+                MethodInfo? methodInfo = GetType().GetMethod("AddDataIncludesDetail");
+                methodInfo = methodInfo?.MakeGenericMethod(new Type[] { detailType });
+                object? obj = methodInfo?.Invoke(this, new object[] { entity, detailType, saveModel.DetailData });
+                return obj as WebResponseContent;
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        public WebResponseContent AddDataIncludesDetail<TDetail>(TEntity entity, Type detailType, List<Dictionary<string, object>> detailDics) where TDetail : class, new()
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                string name = typeof(TEntity).GetMainIdByDetail();
+                string reslut = detailType.ValidateDicInEntity(detailDics, true, new string[] { name });
+                if (reslut != string.Empty)
+                    return WebResponseContent.Instance.Error(reslut);
+
+                List<TDetail> list = detailDics.DicToIEnumerable<TDetail>();
+
+                ((SqlSugarClient)BaseDal.Db).BeginTran();
+
+                int id = BaseDal.Db.Insertable(entity).ExecuteReturnIdentity();
+
+                for (int i = 0; i < list.Count; i++)
+                {
+                    TDetail detail = list[i];
+                    typeof(TDetail).SetDetailId(detail, id, name);
+                }
+
+                BaseDal.Db.Insertable(list).ExecuteCommand();
+
+                ((SqlSugarClient)BaseDal.Db).CommitTran();
+
+                content = WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                ((SqlSugarClient)BaseDal.Db).RollbackTran();
+                content = WebResponseContent.Instance.Error(ex.Message);
+            }
+            return content;
+        }
+
+        /// <summary>
+        /// 淇敼鏁版嵁
+        /// </summary>
+        /// <param name="entity">鍗曚釜瀹炰綋</param>
+        /// <returns></returns>
+        public virtual WebResponseContent UpdateData(TEntity entity)
+        {
+            try
+            {
+                return BaseDal.UpdateData(entity) ? WebResponseContent.Instance.OK() : WebResponseContent.Instance.Error();
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        /// <summary>
+        /// 淇敼鏁版嵁
+        /// </summary>
+        /// <param name="entities">瀹炰綋闆嗗悎</param>
+        /// <returns></returns>
+        public virtual WebResponseContent UpdateData(List<TEntity> entities)
+        {
+            try
+            {
+                return BaseDal.UpdateData(entities) ? WebResponseContent.Instance.OK() : WebResponseContent.Instance.Error();
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        /// <summary>
+        /// 淇敼鏁版嵁
+        /// </summary>
+        /// <param name="saveModel"></param>
+        /// <returns></returns>
+        public virtual WebResponseContent UpdateData(SaveModel saveModel)
+        {
+            try
+            {
+                List<string>? list = UpdateIgnoreColOnExecute?.Invoke(saveModel);
+                if (saveModel == null || saveModel.MainData == null || saveModel.MainData.Count == 0)//鍒ゆ柇鍙傛暟鏄惁浼犲叆
+                {
+                    return WebResponseContent.Instance.Error("浼犲弬閿欒,鍙傛暟涓嶈兘涓虹┖");
+                }
+                string validResult = typeof(TEntity).ValidateDicInEntity(saveModel.MainData, false, TProperties, list?.ToArray() ?? null);
+
+                if (!string.IsNullOrEmpty(validResult))
+                {
+                    return WebResponseContent.Instance.Error(validResult);
+                }
+
+                PropertyInfo keyPro = typeof(TEntity).GetKeyProperty();
+                if (keyPro == null)
+                {
+                    return WebResponseContent.Instance.Error("璇峰厛璁剧疆涓婚敭");
+                }
+
+                TEntity entity = saveModel.MainData.DicToModel<TEntity>();
+
+                List<string> listCol = new List<string>();
+                foreach (var item in saveModel.MainData)
+                {
+                    PropertyInfo? propertyInfo = typeof(TEntity).GetProperty(item.Key);
+                    if (propertyInfo == null)
+                    {
+                        propertyInfo = typeof(TEntity).GetProperty(item.Key.FirstLetterToLower());
+                        if (propertyInfo == null)
+                        {
+                            propertyInfo = typeof(TEntity).GetProperty(item.Key.FirstLetterToUpper());
+                        }
+                    }
+
+                    listCol.Add(propertyInfo?.Name);
+                }
+
+                if (saveModel.DetailData == null || saveModel.DetailData.Count == 0)
+                {
+                    //if (list != null)
+                    //    listCol = listCol.Where(x => !list.Contains(x)).ToList();
+                    bool result = BaseDal.UpdateData(entity/*, listCol, list*/);
+                    return WebResponseContent.Instance.OK();
+                }
+
+                if (typeof(TEntity).GetNavigatePro() == null)
+                {
+                    return WebResponseContent.Instance.Error("鏈厤缃鑸睘鎬�");
+                }
+
+                Type detailType = typeof(TEntity).GetDetailType();
+                MethodInfo? methodInfo = GetType().GetMethod("UpdateDataInculdesDetail");
+                methodInfo = methodInfo?.MakeGenericMethod(new Type[] { detailType });
+                object? obj = methodInfo?.Invoke(this, new object[] { entity, detailType, saveModel.DetailData, saveModel.DelKeys });
+                return obj as WebResponseContent;
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        public WebResponseContent UpdateDataInculdesDetail<TDetail>(TEntity entity, Type detailType, List<Dictionary<string, object>> detailDics, List<object> delKeys) where TDetail : class, new()
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                string name = typeof(TEntity).GetMainIdByDetail();
+                string reslut = detailType.ValidateDicInEntity(detailDics, true, new string[] { name });
+                if (reslut != string.Empty)
+                    return WebResponseContent.Instance.Error(reslut);
+
+                List<TDetail> list = detailDics.DicToIEnumerable<TDetail>();
+
+                List<object> dynamicDelKeys = new List<object>();
+                if (delKeys != null)
+                {
+                    for (int i = 0; i < delKeys.Count; i++)
+                    {
+                        dynamicDelKeys.Add(delKeys[i]);
+                    }
+                }
+
+                List<TDetail> updateRows = new List<TDetail>();
+                List<TDetail> addRows = new List<TDetail>();
+
+                for (int i = 0; i < list.Count; i++)
+                {
+                    object detailId = typeof(TDetail).GetPropertyValue(list[i], typeof(TDetail).GetKeyName());
+                    if (detailId != null)
+                    {
+                        if (detailId.ToString() != "0")
+                        {
+                            updateRows.Add(list[i]);
+                        }
+                        else
+                        {
+                            addRows.Add(list[i]);
+                        }
+                    }
+                }
+
+                object mainId = typeof(TEntity).GetPropertyValue(entity, typeof(TEntity).GetKeyName());
+                if (mainId != null)
+                {
+                    ((SqlSugarClient)BaseDal.Db).BeginTran();
+
+                    if (dynamicDelKeys.Count > 0)
+                        BaseDal.Db.Deleteable<object>().AS(detailType.Name).Where($"{detailType.GetKeyName()} in (@id)", new { id = dynamicDelKeys.ToArray() }).ExecuteCommandHasChange();
+
+                    BaseDal.Db.Updateable(entity).ExecuteCommandHasChange();
+
+                    BaseDal.Db.Updateable(updateRows).ExecuteCommand();
+
+                    for (int i = 0; i < addRows.Count; i++)
+                    {
+                        TDetail detail = addRows[i];
+                        typeof(TDetail).SetDetailId(detail, mainId, name);
+                    }
+
+                    BaseDal.Db.Insertable(addRows).ExecuteCommand();
+
+                    ((SqlSugarClient)BaseDal.Db).CommitTran();
+
+                    content = WebResponseContent.Instance.OK();
+                }
+                else
+                {
+                    content = WebResponseContent.Instance.Error("鏈壘鍒颁富琛ㄤ富閿��");
+                }
+
+            }
+            catch (Exception ex)
+            {
+                ((SqlSugarClient)BaseDal.Db).RollbackTran();
+                content = WebResponseContent.Instance.Error(ex.Message);
+            }
+            return content;
+        }
+
+        /// <summary>
+        /// 鍒犻櫎鏁版嵁
+        /// </summary>
+        /// <param name="key">涓婚敭</param>
+        /// <returns></returns>
+        public virtual WebResponseContent DeleteData(object key)
+        {
+            try
+            {
+                return BaseDal.DeleteDataById(key) ? WebResponseContent.Instance.OK() : WebResponseContent.Instance.Error();
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        /// <summary>
+        /// 鍒犻櫎鏁版嵁
+        /// </summary>
+        /// <param name="keys">涓婚敭鏁扮粍</param>
+        /// <returns></returns>
+        public virtual WebResponseContent DeleteData(object[] keys)
+        {
+            try
+            {
+                if (typeof(TEntity).GetNavigatePro() == null)
+                    return BaseDal.DeleteDataByIds(keys) ? WebResponseContent.Instance.OK() : WebResponseContent.Instance.Error();
+                else
+                {
+                    if (keys != null)
+                    {
+                        Type detailType = typeof(TEntity).GetDetailType();
+                        string name = typeof(TEntity).GetMainIdByDetail();
+                        List<object> dynamicDelKeys = new List<object>();
+
+                        for (int i = 0; i < keys.Length; i++)
+                        {
+                            dynamicDelKeys.Add(keys[i]);
+                        }
+                        ((SqlSugarClient)BaseDal.Db).BeginTran();
+
+                        if (dynamicDelKeys.Count > 0)
+                            BaseDal.Db.Deleteable<object>().AS(detailType.Name).Where($"{name} in (@id)", new { id = dynamicDelKeys.ToArray() }).ExecuteCommandHasChange();
+
+                        BaseDal.DeleteDataByIds(keys);
+
+                        ((SqlSugarClient)BaseDal.Db).CommitTran();
+
+                        return WebResponseContent.Instance.OK();
+                    }
+                    else
+                    {
+                        return WebResponseContent.Instance.Error("鍙傛暟閿欒");
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                ((SqlSugarClient)BaseDal.Db).RollbackTran();
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        /// <summary>
+        /// 鍒犻櫎鏁版嵁
+        /// </summary>
+        /// <param name="entity">鍗曚釜瀹炰綋</param>
+        /// <returns></returns>
+        public virtual WebResponseContent DeleteData(TEntity entity)
+        {
+            try
+            {
+                return BaseDal.DeleteData(entity) ? WebResponseContent.Instance.OK() : WebResponseContent.Instance.Error();
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        /// <summary>
+        /// 鍒犻櫎鏁版嵁
+        /// </summary>
+        /// <param name="entities">瀹炰綋闆嗗悎</param>
+        /// <returns></returns>
+        public virtual WebResponseContent DeleteData(List<TEntity> entities)
+        {
+            try
+            {
+                return BaseDal.DeleteData(entities) ? WebResponseContent.Instance.OK() : WebResponseContent.Instance.Error();
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        /// <summary>
+        /// 瀵煎嚭鏁版嵁
+        /// </summary>
+        /// <param name="pageData"></param>
+        /// <returns></returns>
+        public virtual WebResponseContent Export(PageDataOptions options)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                Type t = typeof(TEntity);
+
+                string savePath = AppDomain.CurrentDomain.BaseDirectory + $"ExcelExport";
+                IExporter exporter = new ExcelExporter();
+                string wheres = options.ValidatePageOptions(TProperties);
+                //鑾峰彇鎺掑簭瀛楁
+                Dictionary<string, OrderByType> orderbyDic = options.GetPageDataSort(TProperties);
+
+                List<TEntity> entities = BaseDal.QueryData(wheres, orderbyDic);
+
+                byte[] data = exporter.ExportAsByteArray(entities).Result;
+
+                string fileName = "";
+                SugarTable sugarTable = t.GetCustomAttribute<SugarTable>();
+                if (sugarTable != null)
+                {
+                    fileName = sugarTable.TableDescription + ".xlsx";
+                }
+                else
+                {
+                    fileName = nameof(TEntity) + ".xlsx";
+                }
+
+                FileHelper.WriteFile(savePath, fileName, data);
+
+                content = WebResponseContent.Instance.OK(data: savePath + "\\" + fileName);
+            }
+            catch (Exception ex)
+            {
+                content = WebResponseContent.Instance.Error(ex.Message);
+            }
+            return content;
+        }
+
+        /// <summary>
+        /// 瀵煎叆鏁版嵁
+        /// </summary>
+        /// <param name="files"></param>
+        /// <returns></returns>
+        public virtual WebResponseContent Import(List<IFormFile> files)
+        {
+            try
+            {
+                if (files == null || files.Count == 0)
+                    return new WebResponseContent { Status = true, Message = "璇烽�夋嫨涓婁紶鐨勬枃浠�" };
+                Microsoft.AspNetCore.Http.IFormFile formFile = files[0];
+                string dicPath = AppDomain.CurrentDomain.BaseDirectory + $"ExcelImprot/{DateTime.Now.ToString("yyyMMdd")}/{typeof(TEntity).Name}/";
+                if (!Directory.Exists(dicPath)) Directory.CreateDirectory(dicPath);
+                string fileName = $"{Guid.NewGuid()}_{formFile.FileName}";
+                dicPath = $"{dicPath}{fileName}";
+                using (FileStream stream = new FileStream(dicPath, FileMode.Create))
+                {
+                    formFile.CopyTo(stream);
+                }
+                ExcelImporter importer = new ExcelImporter();
+                ImportResult<TEntity> importResult = importer.Import<TEntity>(dicPath, "").Result;
+                if (importResult.HasError)
+                {
+                    return WebResponseContent.Instance.Error(importResult.TemplateErrors.Serialize());
+                }
+                BaseDal.AddData(importResult.Data.ToList());
+                return WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        /// <summary>
+        /// 涓婁紶鏂囦欢
+        /// </summary>
+        /// <param name="files"></param>
+        /// <returns></returns>
+        public virtual WebResponseContent Upload(List<IFormFile> files)
+        {
+            throw new NotImplementedException();
+        }
+
+        /// <summary>
+        /// 妯℃澘涓嬭浇
+        /// </summary>
+        /// <returns></returns>
+        public virtual WebResponseContent DownLoadTemplate()
+        {
+            WebResponseContent content = new WebResponseContent();
+            Type t = typeof(TEntity);
+            IExporter exporter = new ExcelExporter();
+            byte[] data = exporter.ExportHeaderAsByteArray(new TEntity()).Result;
+            string fileName = "";
+            SugarTable sugarTable = t.GetCustomAttribute<SugarTable>();
+            if (sugarTable != null)
+            {
+                fileName = sugarTable.TableDescription + "瀵煎叆妯℃澘.xlsx";
+            }
+            else
+            {
+                fileName = nameof(TEntity) + "瀵煎叆妯℃澘.xlsx";
+            }
+            string savePath = AppDomain.CurrentDomain.BaseDirectory + $"ExcelImprotTemplate";
+            FileHelper.WriteFile(savePath, fileName, data);
+
+            content = WebResponseContent.Instance.OK(data: savePath + "\\" + fileName);
+            return content;
+        }
+
+        public WebResponseContent ExportSeedData()
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                string seedDataFolder = $"WIDESEA_DB.DBSeed.Json/{typeof(TEntity).Name}.tsv";
+                List<TEntity> deviceInfos = BaseDal.QueryData();
+                string str = JsonConvert.SerializeObject(deviceInfos, Formatting.Indented);
+                List<Dictionary<string, object>> keyValuePairs = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(str);
+                FileHelper.WriteFileAndDelOldFile($"{AppDomain.CurrentDomain.BaseDirectory}wwwroot/{seedDataFolder}", str);
+                content = WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                content = WebResponseContent.Instance.Error(ex.Message);
+            }
+            return content;
+        }
+    }
+}

--
Gitblit v1.9.3