From a9f563a1f242e1f64ca79a76d7033278dd471425 Mon Sep 17 00:00:00 2001
From: Rodney Chen <rodney.chen@hotmail.com>
Date: 星期三, 07 五月 2025 22:03:20 +0800
Subject: [PATCH] 优化了一些已知问题

---
 /dev/null |   15 ---------------
 1 files changed, 0 insertions(+), 15 deletions(-)

diff --git a/Tiger.Api.Core/Tiger.Api.Core.csproj b/Tiger.Api.Core/Tiger.Api.Core.csproj
deleted file mode 100644
index 73ce076..0000000
--- a/Tiger.Api.Core/Tiger.Api.Core.csproj
+++ /dev/null
@@ -1,12 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
-    <ImplicitUsings>enable</ImplicitUsings>
-    <Nullable>enable</Nullable>
-    <Authors>TigerClouds Team</Authors>
-    <Company>娣卞湷甯傞挍鏍间簯绉戞妧鏈夐檺鍏徃 (SZ TigerClouds Technology Co.,Ltd.)</Company>
-    <Copyright>Copyright 漏 2020-2025 SZ TigerClouds Technology Co.,Ltd.. All rights reserved.</Copyright>
-  </PropertyGroup>
-
-</Project>
diff --git a/Tiger.Business.MengQi/Mq.Customer.cs b/Tiger.Business.MengQi/Mq.Customer.cs
deleted file mode 100644
index f982e68..0000000
--- a/Tiger.Business.MengQi/Mq.Customer.cs
+++ /dev/null
@@ -1,110 +0,0 @@
-锘縰sing Rhea.Common;
-using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Tiger.IBusiness;
-using Tiger.Model;
-
-namespace Tiger.Business.MengQi
-{
-    /// <summary>
-    /// 瀹㈡埛
-    /// </summary>
-    public partial class MqCustomer : ICustomer
-    {
-        /// <summary>
-        /// 鑾峰彇鍒嗛〉
-        /// </summary>
-        /// <param name="pageList"></param>
-        /// <returns></returns>
-        public async Task<ApiAction<PageAble<Customer>>> GetCustomers(PageAble<Customer> pageList)
-        {
-            var res = new ApiAction<PageAble<Customer>>();
-            try
-            {
-                RefAsync<int> total = 0;
-                pageList.data = await Biz.Db.Queryable<Customer>().WhereIF(!string.IsNullOrEmpty(pageList.sqlcmd), x => x.CustomerCode.Contains(pageList.sqlcmd)).OrderBy(x => x.CustomerCode).ToPageListAsync(pageList.pageIndex, pageList.pageSize, total);
-                pageList.totals = total;
-            }
-            catch (Exception ex)
-            {
-                res.CatchExceptionWithLog(ex, "鑾峰彇瀹㈡埛淇℃伅寮傚父");
-            }
-            res.Data = pageList;
-            return res;
-        }
-
-        /// <summary>
-        /// 鑾峰彇瀹㈡埛淇℃伅
-        /// </summary>
-        /// <returns></returns>
-        public async Task<ApiAction<List<Customer>>> GetCustomerInfo()
-        {
-            var res = new ApiAction<List<Customer>>();
-            try
-            {
-                List<Customer> result = await Biz.Db.Queryable<Customer>().ToListAsync();
-                res.Data = result;
-            }
-            catch (Exception ex)
-            {
-                res.CatchExceptionWithLog(ex, "鑾峰彇瀹㈡埛淇℃伅寮傚父");
-            }
-            return res;
-        }
-
-        public async Task<ApiAction> SaveImportCustomerInfo(List<Customer> list)
-        {
-            var res = new ApiAction();
-            //鏇存柊瀹㈡埛璁板綍
-            var db = Biz.Db;
-            var dbTran = await db.UseTranAsync(async () =>
-            {
-                await db.Saveable(list).ExecuteCommandAsync();
-            });
-            if (!dbTran.IsSuccess)
-            {
-                res.IsSuccessed = false;
-                res.Message = $"瀵煎叆寮傚父";
-            }
-            return res;
-        }
-
-        /// <summary>
-        /// 淇濆瓨瀹㈡埛
-        /// </summary>
-        /// <param name="user"></param>
-        /// <returns></returns>
-        public async Task<ApiAction> SaveCustomer(Customer customer)
-        {
-            var result = new ApiAction();
-            try
-            {
-
-                var db = Biz.Db;
-                var dbTran = db.UseTran(() =>
-                {
-                    var y = db.Storageable(customer)
-                       .WhereColumns(t => new { t.CustomerCode })
-                       .ToStorage();
-                    y.AsInsertable.ExecuteCommand();
-                    y.AsUpdateable.ExecuteCommand();
-                });
-                if (!dbTran.IsSuccess)
-                {
-                    result.IsSuccessed = false;
-                    result.Message = $"瀵煎叆寮傚父";
-                }
-            }
-            catch (Exception ex)
-            {
-                result.CatchExceptionWithLog(ex, "淇濆瓨瀹㈡埛寮傚父");
-            }
-            return result;
-        }
-    }
-}
diff --git a/Tiger.Business.MengQi/Mq.ModelInfo.cs b/Tiger.Business.MengQi/Mq.ModelInfo.cs
deleted file mode 100644
index f009ea6..0000000
--- a/Tiger.Business.MengQi/Mq.ModelInfo.cs
+++ /dev/null
@@ -1,96 +0,0 @@
-锘縰sing Rhea.Common;
-using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Tiger.IBusiness;
-using Tiger.Model;
-
-namespace Tiger.Business.MengQi
-{
-    /// <summary>
-    /// 瀹㈡埛
-    /// </summary>
-    public partial class MqModelInfo : IModelInfo
-    {
-        /// <summary>
-        /// 鑾峰彇鍒嗛〉
-        /// </summary>
-        /// <param name="pageList"></param>
-        /// <returns></returns>
-        public async Task<ApiAction<PageAble<ModelInfo>>> GetModelInfo(PageAble<ModelInfo> pageList)
-        {
-            var res = new ApiAction<PageAble<ModelInfo>>();
-            try
-            {
-                RefAsync<int> total = 0;
-                pageList.data = await Biz.Db.Queryable<ModelInfo>().WhereIF(!string.IsNullOrEmpty(pageList.sqlcmd), x => x.Model.Contains(pageList.sqlcmd)).OrderBy(x => x.Model).ToPageListAsync(pageList.pageIndex, pageList.pageSize, total);
-                pageList.totals = total;
-            }
-            catch (Exception ex)
-            {
-                res.CatchExceptionWithLog(ex, "鑾峰彇浜у搧淇℃伅寮傚父");
-            }
-            res.Data = pageList;
-            return res;
-        }
-
-        /// <summary>
-        /// 瀵煎叆
-        /// </summary>
-        /// <param name="list"></param>
-        /// <returns></returns>
-        public async Task<ApiAction> SaveImportModelInfo(List<ModelInfo> list)
-        {
-            var res = new ApiAction();
-            //鏇存柊鏈哄瀷璁板綍
-            var db = Biz.Db;
-            var dbTran = await db.UseTranAsync(async () =>
-            {
-                await db.Saveable(list).ExecuteCommandAsync();
-            });
-            if (!dbTran.IsSuccess)
-            {
-                res.IsSuccessed = false;
-                res.Message = $"瀵煎叆寮傚父";
-            }
-            return res;
-        }
-
-        /// <summary>
-        /// 淇濆瓨鏈哄瀷
-        /// </summary>
-        /// <param name="user"></param>
-        /// <returns></returns>
-        public async Task<ApiAction> SaveModel(ModelInfo modelInfo)
-        {
-            var result = new ApiAction();
-            try
-            {
-
-                var db = Biz.Db;
-                var dbTran = db.UseTran(() =>
-                {
-                    var y = db.Storageable(modelInfo)
-                       .WhereColumns(t => new { t.Model })
-                       .ToStorage();
-                    y.AsInsertable.ExecuteCommand();
-                    y.AsUpdateable.ExecuteCommand();
-                });
-                if (!dbTran.IsSuccess)
-                {
-                    result.IsSuccessed = false;
-                    result.Message = $"瀵煎叆寮傚父";
-                }
-            }
-            catch (Exception ex)
-            {
-                result.CatchExceptionWithLog(ex, "淇濆瓨鏈哄瀷寮傚父");
-            }
-            return result;
-        }
-    }
-}
diff --git a/Tiger.Business.MengQi/Mq.SNData.cs b/Tiger.Business.MengQi/Mq.SNData.cs
deleted file mode 100644
index 067ed5f..0000000
--- a/Tiger.Business.MengQi/Mq.SNData.cs
+++ /dev/null
@@ -1,202 +0,0 @@
-锘縰sing Rhea.Common;
-using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Tiger.IBusiness;
-using Tiger.Model;
-
-namespace Tiger.Business.MengQi
-{
-    /// <summary>
-    /// SN鎿嶄綔
-    /// </summary>
-    public partial class MqSNData : IMqSNData
-    {
-        /// <summary>
-        /// 閫�鍥炲垹闄ゆ潯鐮�
-        /// </summary>
-        /// <param name="barcode"></param>
-        /// <returns></returns>
-        public async Task<ApiAction> ReturnSN(string barcode)
-        {
-            var result = new ApiAction();
-            try
-            {
-                SNData_His data_His = await Biz.Db.Queryable<SNData_His>().Where(x => x.OriginalSN == barcode).FirstAsync();
-                if (data_His == null)
-                {
-                    result.IsSuccessed = false;
-                    result.Message = $"閫�鍥炲垹闄ゆ潯鐮佷笉瀛樺湪";
-                    return result;
-                }
-                List<SNData> sndatas = await Biz.Db.Queryable<SNData>().Where(x => x.SN == barcode || x.SN == data_His.SN).ToListAsync();
-                if (sndatas == null && sndatas.Count > 0)
-                {
-                    result.IsSuccessed = false;
-                    result.Message = $"閫�鍥炲垹闄ゆ潯鐮佷笉瀛樺湪";
-                    return result;
-                }
-                result.Data = data_His.DeliveryNo;
-                var db = Biz.Db;
-                var dbTran = db.UseTran(() =>
-                {
-                    db.Deleteable(data_His).ExecuteCommand();
-                    db.Deleteable(sndatas).ExecuteCommand();
-                });
-                if (!dbTran.IsSuccess)
-                {
-                    result.IsSuccessed = false;
-                    result.Message = $"閫�鍥炲垹闄ゆ潯鐮佸紓甯�";
-                }
-            }
-            catch (Exception ex)
-            {
-                result.CatchExceptionWithLog(ex, "閫�鍥炲垹闄ゆ潯鐮佸紓甯�");
-            }
-            return result;
-        }
-
-        /// <summary>
-        /// 鏁村崟閫�鍥�
-        /// </summary>
-        /// <param name="deliveryNo"></param>
-        /// <returns></returns>
-        public async Task<ApiAction> ReturnWhole(string deliveryNo)
-        {
-            var result = new ApiAction();
-            try
-            {
-                List<SNData_His> listHis = await Biz.Db.Queryable<SNData_His>().Where(x => x.DeliveryNo == deliveryNo).ToListAsync();
-                if (listHis.Count == 0)
-                {
-                    result.IsSuccessed = false;
-                    result.Message = $"閫�鍥為�佽揣鍗昜{deliveryNo}]鏌ヤ笉鍒拌鍒犻櫎鐨勬潯鐮�";
-                    return result;
-                }
-                List<SNData> sndatas = await Biz.Db.Queryable<SNData>().Where(x => x.DeliveryNo == deliveryNo).ToListAsync();
-                if (sndatas.Count == 0)
-                {
-                    result.IsSuccessed = false;
-                    result.Message = $"閫�鍥為�佽揣鍗昜{deliveryNo}]鏌ヤ笉鍒拌鍒犻櫎鐨勬潯鐮�";
-                    return result;
-                }
-                var db = Biz.Db;
-                var dbTran = db.UseTran(() =>
-                {
-                    db.Deleteable(listHis).ExecuteCommand();
-                    db.Deleteable(sndatas).ExecuteCommand();
-                });
-                if (!dbTran.IsSuccess)
-                {
-                    result.IsSuccessed = false;
-                    result.Message = $"閫�鍥炲垹闄ゆ潯鐮佸紓甯�";
-                }
-            }
-            catch (Exception ex)
-            {
-                result.CatchExceptionWithLog(ex, "閫�鍥炲垹闄ゆ潯鐮佸紓甯�");
-            }
-            return result;
-        }
-
-        /// <summary>
-        /// 鍒嗛〉
-        /// </summary>
-        /// <param name="pageList"></param>
-        /// <returns></returns>
-        public async Task<ApiAction<PageAble<SNData_His>>> GetSNDataHis(PageAble<SNData_His> pageList)
-        {
-            var res = new ApiAction<PageAble<SNData_His>>();
-            try
-            {
-                string[] strTime = pageList.sqlcmd?.Split(',');
-                RefAsync<int> total = 0;
-                pageList.data = await Biz.Db.Queryable<SNData_His>()
-                    .WhereIF(!string.IsNullOrEmpty(strTime[0]), x => Convert.ToDateTime(x.ScanTime) > Convert.ToDateTime(strTime[0]))
-                    .WhereIF(!string.IsNullOrEmpty(strTime[1]) && strTime.Length == 2, x => Convert.ToDateTime(x.ScanTime) < Convert.ToDateTime(strTime[1]))
-                    .WhereIF(!string.IsNullOrEmpty(strTime[2]), x => x.ModelCode.Equals(strTime[2]))
-                    .WhereIF(!string.IsNullOrEmpty(strTime[3]), x => x.CustomerCode.Equals(strTime[3]))
-                    .WhereIF(!string.IsNullOrEmpty(strTime[4]), x => x.DeliveryNo.Equals(strTime[4]))
-                    .WhereIF(!string.IsNullOrEmpty(strTime[5]), x => x.CustModel.Equals(strTime[5]))
-                    .ToPageListAsync(pageList.pageIndex, pageList.pageSize, total);
-                pageList.totals = total;
-            }
-            catch (Exception ex)
-            {
-                res.CatchExceptionWithLog(ex, "鏌ヨ寮傚父");
-            }
-            res.Data = pageList;
-            return res;
-        }
-
-        /// <summary>
-        /// 鑾峰彇鎵�鏈夋潯鐮侊紝鍘熷巶鏉$爜鍜屽鎴锋潯鐮佸湪鍚屼竴琛岋紝鎸夋潯浠�
-        /// </summary>
-        /// <param name="where"></param>
-        /// <returns></returns>
-        public async Task<ApiAction<List<SNData_His>>> GetAllSNDataHis(SNDataWhere where)
-        {
-            var res = new ApiAction<List<SNData_His>>();
-            List<SNData_His> list = new List<SNData_His>();
-            try
-            {
-                DateTime StartTime = DateTime.Now;
-                DateTime EndTime = DateTime.Now;
-                string[] strTime = where.strStartEnd?.Split(',');
-                if (!string.IsNullOrEmpty(where.strStartEnd)) { StartTime = Convert.ToDateTime(strTime[0].ToString()); EndTime = strTime.Length == 2 ? Convert.ToDateTime(strTime[1].ToString()) : DateTime.MinValue; }
-                RefAsync<int> total = 0;
-                list = await Biz.Db.Queryable<SNData_His>()
-                    .WhereIF(!string.IsNullOrEmpty(where.strStartEnd), x => Convert.ToDateTime(x.ScanTime) > StartTime)
-                    .WhereIF(!string.IsNullOrEmpty(where.strStartEnd) && strTime.Length == 2, x => Convert.ToDateTime(x.ScanTime) < EndTime)
-                    .WhereIF(!string.IsNullOrEmpty(where.model), x => x.ModelCode == where.model)
-                    .WhereIF(!string.IsNullOrEmpty(where.customerCode), x => x.CustomerCode.Equals(where.customerCode))
-                    .WhereIF(!string.IsNullOrEmpty(where.deliveryNo), x => x.DeliveryNo.Equals(where.deliveryNo))
-                    .WhereIF(!string.IsNullOrEmpty(where.custParam1), x => x.CustModel.Equals(where.custParam1))
-                    .ToListAsync();
-            }
-            catch (Exception ex)
-            {
-                res.CatchExceptionWithLog(ex, "鏌ヨ寮傚父");
-            }
-            res.Data = list;
-            return res;
-        }
-
-        /// <summary>
-        /// 鑾峰彇鎵�鏈夋潯鐮侊紝鍘熷巶鏉$爜鍜屽鎴锋潯鐮佸垎寮�涓よ锛屾寜鏉′欢
-        /// </summary>
-        /// <param name="where"></param>
-        /// <returns></returns>
-        public async Task<ApiAction<List<SNData>>> GetAllSNData(SNDataWhere where)
-        {
-            var res = new ApiAction<List<SNData>>();
-            List<SNData> list = new List<SNData>();
-            try
-            {
-                DateTime StartTime = DateTime.Now;
-                DateTime EndTime = DateTime.Now;
-                string[] strTime = where.strStartEnd?.Split(',');
-                if (!string.IsNullOrEmpty(where.strStartEnd)) { StartTime = Convert.ToDateTime(strTime[0].ToString()); EndTime = strTime.Length == 2 ? Convert.ToDateTime(strTime[1].ToString()) : DateTime.MinValue; }
-                RefAsync<int> total = 0;
-                list = await Biz.Db.Queryable<SNData>()
-                    .WhereIF(!string.IsNullOrEmpty(where.strStartEnd), x => Convert.ToDateTime(x.CREATE_TIME) > StartTime)
-                    .WhereIF(!string.IsNullOrEmpty(where.strStartEnd) && strTime.Length == 2, x => Convert.ToDateTime(x.CREATE_TIME) < EndTime)
-                    .WhereIF(!string.IsNullOrEmpty(where.model), x => x.ItemCode == where.model)
-                    .WhereIF(!string.IsNullOrEmpty(where.customerCode), x => x.CustomerCode.Equals(where.customerCode))
-                    .WhereIF(!string.IsNullOrEmpty(where.deliveryNo), x => x.DeliveryNo.Equals(where.deliveryNo))
-                    .WhereIF(!string.IsNullOrEmpty(where.custParam1), x => x.CustModel.Equals(where.custParam1))
-                    .OrderBy(x => x.CREATE_TIME).OrderBy(x => x.Scanner).ToListAsync();
-            }
-            catch (Exception ex)
-            {
-                res.CatchExceptionWithLog(ex, "鏌ヨ寮傚父");
-            }
-            res.Data = list;
-            return res;
-        }
-    }
-}
diff --git a/Tiger.Business.MengQi/Tiger.Business.MengQi.csproj b/Tiger.Business.MengQi/Tiger.Business.MengQi.csproj
deleted file mode 100644
index 5d4e322..0000000
--- a/Tiger.Business.MengQi/Tiger.Business.MengQi.csproj
+++ /dev/null
@@ -1,22 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
-    <ImplicitUsings>enable</ImplicitUsings>
-    <Nullable>enable</Nullable>
-    <Authors>TigerClouds Team</Authors>
-    <Company>娣卞湷甯傞挍鏍间簯绉戞妧鏈夐檺鍏徃 (SZ TigerClouds Technology Co.,Ltd.)</Company>
-    <Copyright>Copyright 漏 2020-2025 SZ TigerClouds Technology Co.,Ltd.. All rights reserved.</Copyright>
-  </PropertyGroup>
-
-  <Target Name="PostBuild" AfterTargets="PostBuildEvent">
-    <Exec Command="xcopy /r/y/i $(ProjectDir)$(OutDir)$(AssemblyName).dll $(SolutionDir)Tiger.Api\$(OutDir)&#xD;&#xA;xcopy /r/y/i $(ProjectDir)$(OutDir)$(AssemblyName).pdb $(SolutionDir)Tiger.Api\$(OutDir)" />
-  </Target>
-
-  <ItemGroup>
-    <ProjectReference Include="..\Tiger.Business\Tiger.Business.csproj" />
-    <ProjectReference Include="..\Tiger.IBusiness.WMS\Tiger.IBusiness.WMS.csproj" />
-    <ProjectReference Include="..\Tiger.IBusiness\Tiger.IBusiness.csproj" />
-  </ItemGroup>
-
-</Project>
diff --git a/Tiger.Business.MengQi/User.cs b/Tiger.Business.MengQi/User.cs
deleted file mode 100644
index 4b05348..0000000
--- a/Tiger.Business.MengQi/User.cs
+++ /dev/null
@@ -1,140 +0,0 @@
-锘縰sing Rhea.Common;
-using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Tiger.IBusiness;
-using Tiger.Model;
-
-namespace Tiger.Business.MengQi
-{
-    /// <summary>
-    /// 鐢ㄦ埛
-    /// </summary>
-    public partial class Users : IUser
-    {
-        /// <summary>
-        /// 鑾峰彇鐢ㄦ埛淇℃伅
-        /// </summary>
-        /// <param name="pageList"></param>
-        /// <returns></returns>
-        /// <exception cref="NotImplementedException"></exception>
-        public async Task<PageAble<User>> GetUserInfo(PageAble<User> pageList)
-        {
-            RefAsync<int> total = 0;
-            pageList.data = await Biz.Db.Queryable<User>().WhereIF(!string.IsNullOrEmpty(pageList.sqlcmd), x => x.UserCode.Contains(pageList.sqlcmd)).ToPageListAsync(pageList.pageIndex, pageList.pageSize, total);
-            pageList.totals = total;
-            return pageList;
-        }
-
-        /// <summary>
-        /// 鐢ㄦ埛鐧诲綍
-        /// </summary>
-        /// <param name="userInfo"></param>
-        /// <returns></returns>
-        public async Task<ApiAction<User>> Login(User userInfo)
-        {
-            var res = new ApiAction<User>();
-            try
-            {
-                string usercode = userInfo.UserCode;
-                if (userInfo.UserCode == "鍝佽川鐢ㄦ埛")
-                {
-                    var user = await Biz.Db.Queryable<User>().Where(x => x.RoleCode == "鍝佽川").FirstAsync();
-                    if (user != null) { usercode = user.UserCode; }
-                }
-                if (!Biz.Db.Queryable<User>().Where(x => x.UserCode == usercode && x.Password == userInfo.Password).Any())
-                {
-                    //result = new(Result.Flags.Failed, "鐢ㄦ埛娌℃湁鏉冮檺鎴栬�呯敤鎴峰悕鍜屽瘑鐮侀敊璇紒");
-                    userInfo = new();
-                }
-                else
-                {
-                    userInfo = await Biz.Db.Queryable<User>().Where(x => x.UserCode == usercode && x.Password == userInfo.Password).FirstAsync();
-                }
-                res.Data = userInfo;
-            }
-            catch (Exception ex)
-            {
-                res.CatchExceptionWithLog(ex, "鐧诲綍寮傚父");
-            }
-            return res;
-        }
-
-        /// <summary>
-        /// 
-        /// </summary>
-        /// <param name="dt"></param>
-        /// <returns></returns>
-        public async Task<Result> SaveImportUserInfo(DataTable dt)
-        {
-
-            Result result = new Result(Result.Flags.Success, $"瀵煎叆鎴愬姛");
-            List<User> list = new();
-            for (int i = 0; i < dt.Rows.Count; i++)
-            {
-                User item = new()
-                {
-                    id = Guid.NewGuid().ToString("N"),
-                    UserCode = dt.Rows[i]["鐢ㄦ埛ID"].ToString(),
-                    UserName = dt.Rows[i]["鐢ㄦ埛鍚嶇О"].ToString(),
-                    RoleCode = dt.Rows[i]["鐢ㄦ埛瑙掕壊"].ToString(),
-                };
-                var info = Biz.Db.Queryable<User>().Where(x => x.UserCode == dt.Rows[i]["鐢ㄦ埛ID"].ToString()).First();
-                if (info != null)
-                {
-                    item.id = info.id;
-                }
-                list.Add(item);
-            }
-            //鏇存柊鏈哄瀷璁板綍
-            var db = Biz.Db;
-            var dbTran = await db.UseTranAsync(async () =>
-            {
-                await db.Saveable(list).ExecuteCommandAsync();
-            });
-            if (!dbTran.IsSuccess)
-            {
-                result.Flag = Result.Flags.Failed;
-                result.Message = $"瀵煎叆寮傚父";
-            }
-            return result;
-        }
-
-        /// <summary>
-        /// 淇濆瓨鐢ㄦ埛
-        /// </summary>
-        /// <param name="user"></param>
-        /// <returns></returns>
-        public async Task<ApiAction> SaveUser(User user)
-        {
-            var result = new ApiAction();
-            try
-            {
-
-                var db = Biz.Db;
-                var dbTran = db.UseTran(() =>
-                {
-                    var y = db.Storageable(user)
-                       .WhereColumns(t => new { t.UserCode })
-                       .ToStorage();
-                    y.AsInsertable.ExecuteCommand();
-                    y.AsUpdateable.ExecuteCommand();
-                });
-                if (!dbTran.IsSuccess)
-                {
-                    result.IsSuccessed = false;
-                    result.Message = $"瀵煎叆寮傚父";
-                }
-            }
-            catch (Exception ex)
-            {
-                result.CatchExceptionWithLog(ex, "淇濆瓨鐢ㄦ埛寮傚父");
-            }
-            return result;
-        }
-    }
-}
diff --git a/Tiger.Business/Biz.cs b/Tiger.Business/Biz.cs
deleted file mode 100644
index a20e1a6..0000000
--- a/Tiger.Business/Biz.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-锘縰sing Apache.NMS;
-using Apache.NMS.ActiveMQ;
-using Tiger.Model;
-using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Linq.Expressions;
-using System.Text;
-using System.Threading.Tasks;
-using Rhea.Common;
-using Microsoft.Extensions.Configuration;
-using Tiger.IBusiness;
-using Autofac;
-
-namespace Tiger.Business
-{
-    public partial class Biz : IBiz
-    {
-        /// <summary>
-        /// 鏁版嵁婧�
-        /// </summary>
-        public static DataSource DataSource { get => DataSource.CreateInstance(BizConfig.Configuration); }
-        
-
-        /// <summary>
-        /// 涓绘暟鎹簱瀹㈡埛绔�
-        /// </summary>
-        public static DbClient Db { get =>ApiConfig.IsTestServer? DataSource["Test"]?.Client: DataSource["Main"]?.Client; }
-
-        /// <summary>
-        /// 涓绘暟鎹簱鍩虹鏂规硶
-        /// </summary>
-        public static DbBase Base { get => ApiConfig.IsTestServer ? DataSource["Test"]?.Base: DataSource["Main"]?.Base; }
-
-        #region 浜у搧鏁版嵁搴�
-
-        #endregion
-
-        /// <summary>
-        /// 鏍规嵁鏁版嵁搴撳悕鑾峰彇鏁版嵁搴撳璞�
-        /// </summary>
-        /// <param name="name">閰嶇疆鏂囦欢涓殑鏁版嵁搴撳悕</param>
-        /// <returns></returns>
-        public DbClient DB(string name = "")
-        {
-            if (name.IsNullOrEmpty())
-            {
-                return Db;
-            }
-            else
-            {
-                return DataSource[name]?.Client;
-            }
-        }
-
-        /// <summary>
-        /// 鏍规嵁鏁版嵁搴撳悕鑾峰彇鏁版嵁搴撳熀纭�鏂规硶
-        /// </summary>
-        /// <param name="name">閰嶇疆鏂囦欢涓殑鏁版嵁搴撳悕</param>
-        /// <returns></returns>
-        public IDbBase DbBase(string name = "")
-        {
-            if (name.IsNullOrEmpty())
-            {
-                return Base;
-            }
-            else
-            {
-                return DataSource[name]?.Base;
-            }
-        }
-
-        public void SetContainer(IContainer container)
-        {
-            BizContext.Container = container;
-        }
-    }//endClass
-}
\ No newline at end of file
diff --git a/Tiger.Business/BizContext.cs b/Tiger.Business/BizContext.cs
deleted file mode 100644
index d4fdd5a..0000000
--- a/Tiger.Business/BizContext.cs
+++ /dev/null
@@ -1,101 +0,0 @@
-锘縰sing Autofac;
-using Microsoft.AspNetCore.Http;
-using MySqlConnector;
-using Rhea.Common;
-using Rhea.Common.Authorization;
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection;
-using Tiger.IBusiness;
-
-namespace Tiger.Business
-{
-    /// <summary>
-    /// 涓婁笅鏂�
-    /// </summary>
-    public class BizContext : IBizContext
-    {
-        //鏌ョ湅绫诲叏鍚�
-        public static string _fullname = typeof(MySqlConnection).FullName;
-
-        /// <summary>
-        /// 褰撳墠椤圭洰
-        /// </summary>
-        public static string CurrentProject => BizConfig.Configuration["CurrentProject"];
-        public string GetCurrentProject() => CurrentProject;
-        /// <summary>
-        /// 鏈嶅姟鍣ㄦ満鍣ㄧ爜
-        /// </summary>
-        public static string MachineCode = $"{Base.Hardware.CPU_ID}";//-{Base.Hardware.HDD_SN}";
-        public string GetMachineCode() => MachineCode;
-        /// <summary>
-        /// Tiger 椤圭洰婵�娲诲疄浣�
-        /// </summary>
-        public static TigerActive TigerActive = new();
-        public ITigerActive GetTigerActive() => TigerActive;
-        /// <summary>
-        /// 鎺ュ彛浠诲姟鏈嶅姟
-        /// </summary>
-        public static IInterfaceService InterfaceService;
-        public IInterfaceService GetInterfaceService() => InterfaceService;
-
-        /// <summary>
-        /// DI Container
-        /// </summary>
-        public static IContainer Container;
-
-        #region 浜嬪姟绠$悊
-
-        /// <summary>
-        /// WMS浜嬪姟瀛楀吀
-        /// </summary>
-        public static Dictionary<string, ITransaction> TransactionDic = new Dictionary<string, ITransaction>();
-
-        /// <summary>
-        /// 鍒涘缓涓�涓柊浜嬪姟锛屽苟鍔犲埌浜嬪姟鍒楄〃
-        /// </summary>
-        /// <param name="context">璇锋眰鐨凥ttpContext</param>
-        /// <param name="trans">鏂扮殑浜嬪姟</param>
-        /// <param name="IsUniqueInSameClient">鐩稿悓瀹㈡埛绔槸鍚﹀彧鍏佽寮�鍚竴涓悓绫诲瀷浜嬪姟</param>
-        public static void NewTransaction(HttpContext context, ITransaction trans, bool IsUniqueInSameClient = true)
-        {
-            trans.RemoteAddress = $"[{context.Connection.RemoteIpAddress}]:{context.Connection.RemotePort}";
-            trans.ApiHost = context.Request.Host.ToString();
-            if (IsUniqueInSameClient)
-            {
-                //鏌ユ壘鏈夋病鏈夌浉鍚屽鎴风寮�鍚殑鍚岀被鍨嬩簨鍔★紝鏈夌殑璇濋兘鍏抽棴鎺�
-                var sameTrans = TransactionDic.Where(q => !q.Value.IsFinished && q.Value.GetType() == trans.GetType() && q.Value.RemoteAddress == trans.RemoteAddress);
-                foreach (var item in sameTrans)
-                {
-                    try
-                    {
-                        TransactionDic[item.Key].Close();
-                    }
-                    catch (System.Exception ex)
-                    {
-                        Logger.Console.Fatal(ex, $"鍒犻櫎鍚屽鎴风鍚岀被鍨嬩簨鍔ransaction[{item.Key}]({TransactionDic[item.Key].GetType().FullName})寮傚父");
-                    }
-                }
-            }
-            TransactionDic.Add(trans.TransID, trans);
-        }
-
-        #endregion 浜嬪姟绠$悊
-    }
-
-    /// <summary>
-    /// DI鍏敤鏂规硶
-    /// </summary>
-    public static class DI
-    {
-        public static T Resolve<T>() where T : notnull
-        {
-            return BizContext.Container.Resolve<T>();
-        }
-
-        public static dynamic Resolve(string typeFullName)
-        {
-            return BizContext.Container.Resolve(System.Type.GetType(typeFullName, true));
-        }
-    }
-}
\ No newline at end of file
diff --git a/Tiger.Business/Common/ApiConfig.cs b/Tiger.Business/Common/ApiConfig.cs
deleted file mode 100644
index 9530607..0000000
--- a/Tiger.Business/Common/ApiConfig.cs
+++ /dev/null
@@ -1,195 +0,0 @@
-锘縰sing Microsoft.AspNetCore.Http;
-using Microsoft.Extensions.Configuration;
-using Rhea.Common;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace Tiger.Business
-{
-    public class ApiConfig
-    {
-        public static IServiceProvider ServiceProvider;
-        public static IConfiguration Configuration;
-
-        public static void InitConfig(IConfiguration _configuration)
-        {
-            Configuration = _configuration;
-
-            //鏌ョ湅绫诲叏鍚�
-            var fullname = typeof(Biz.iWMS).FullName;
-        }
-
-        private static string _AllowUrl = string.Empty;
-        /// <summary>
-        /// 閾炬帴鐧藉悕鍗曪紙鍙笉鍋氳韩浠介獙璇侊級
-        /// </summary>
-        public static List<string> AllowUrl
-        {
-            get
-            {
-                if (string.IsNullOrEmpty(_AllowUrl))
-                {
-                    _AllowUrl = Configuration["AllowUrl"];
-                }
-                List<string> listUrls = new List<string>();
-                if (!string.IsNullOrEmpty(_AllowUrl))
-                {
-                    string[] urls = System.Text.RegularExpressions.Regex.Split(_AllowUrl, ",");
-                    if (urls.Length > 0)
-                    {
-                        foreach (string url in urls)
-                        {
-                            if (!listUrls.Contains(url))
-                            {
-                                listUrls.Add(url);
-                            }
-                        }
-                    }
-
-                }
-                return listUrls;
-            }
-        }
-
-        private static string _FilePath = string.Empty;
-        /// <summary>
-        /// 鏂囦欢璺緞
-        /// </summary>
-        public static string FilePath
-        {
-            get
-            {
-                if (string.IsNullOrEmpty(_FilePath))
-                {
-                    _FilePath = Configuration["CommonSettings:FilePath"];
-                }
-                return _FilePath;
-            }
-        }
-
-
-        /// <summary>
-        /// 鏇存柊璺緞
-        /// </summary>
-        public static string UpgradePath => (string.IsNullOrEmpty(Configuration["Upgrade:Path"]) ? (AppDomain.CurrentDomain.BaseDirectory + "Upgrade") : Configuration["Upgrade:Path"]) + "\\";
-
-        private static string _IsOpenCache = string.Empty;
-        /// <summary>
-        /// 鏄惁浣跨敤Redis
-        /// </summary>
-        public static bool IsOpenCache
-        {
-            get
-            {
-                if (string.IsNullOrEmpty(_IsOpenCache))
-                {
-                    _IsOpenCache = Configuration["Redis:IsOpenRedis"];
-                }
-                if (_IsOpenCache.ToLower() == "true")
-                {
-                    return true;
-                }
-                return false;
-            }
-        }
-
-        private static string _RedisConnectionString = string.Empty;
-        /// <summary>
-        /// Redis榛樿杩炴帴涓�
-        /// </summary>
-        public static string RedisConnectionString
-        {
-            get
-            {
-                if (string.IsNullOrEmpty(_RedisConnectionString))
-                {
-                    _RedisConnectionString = Configuration["Redis:ConnectionString"];
-                }
-                return _RedisConnectionString;
-            }
-        }
-
-        /// <summary>
-        /// 缁熶竴璇锋眰椤甸潰瀹炰綋
-        /// </summary>
-        public static HttpContext HttpCurrent
-        {
-            get
-            {
-                object factory = ServiceProvider.GetService(typeof(IHttpContextAccessor));
-                HttpContext context = ((IHttpContextAccessor)factory).HttpContext;
-                return context;
-            }
-        }
-
-        /// <summary>
-        /// 浜嬪姟瓒呮椂灏忔椂鏁�
-        /// </summary>
-        public static int Transaction_TimeoutHours
-        {
-            get => Convert.ToInt32(Configuration["Transaction:TimeoutHours"] ?? "12");
-        }
-
-        /// <summary>
-        /// 浜嬪姟瓒呮椂鍒嗛挓鏁�
-        /// </summary>
-        public static double Client_TimeoutMinutes
-        {
-            get => Convert.ToDouble(Configuration["Timeout:Client_Minutes"] ?? "60");
-        }
-
-        /// <summary>
-        /// 鏄惁娴嬭瘯鐗堟湰
-        /// </summary>
-        public static bool IsTestVersion
-        {
-            get => Configuration.AsEnumerable().Where(q => q.Key.StartsWith("StartUpSetting:UseUrls") && q.Value == "http://*:9520").Any();
-        }
-
-        /// <summary>
-        /// 鏃х郴缁熺増鏈� 
-        /// </summary>
-        public static bool IsOldVersion
-        {
-            get => Configuration.AsEnumerable().Where(q => q.Key.StartsWith("StartUpSetting:UseUrls") && q.Value == "http://*:9527").Any();
-        }
-
-        /// <summary>
-        /// 鏄惁寮�鍙戠増鏈�
-        /// </summary>
-        public static bool IsDevVersion
-        {
-            get => Configuration.AsEnumerable().Where(q => q.Key.StartsWith("StartUpSetting:UseUrls") && q.Value == "http://*:9510").Any();
-        }
-
-        /// <summary>
-        /// RunInterface
-        /// </summary>
-        public static bool RunInterface
-        {
-            get => (Configuration["RunInterface"] ?? "").ToLower() == "true";
-        }
-
-        public static bool IsTestServer
-        {
-            get => (BizConfig.Configuration["IsTestServer"] ?? "").ToLower() == "true";
-        }
-    }
-
-    public class BizConfig
-    {
-        public static IConfiguration Configuration => RheaConfig.Configuration;
-        public static string DB_ModelAssembly => RheaConfig.DB_ModelAssembly;
-        public static string MQTTService_IPAddress => RheaConfig.MQTTService_IPAddress;
-        public static string DefaultLanguage => Configuration["DefaultLanguage"] ?? "en";
-        public static void InitConfig(IConfiguration _configuration)
-        {
-            //Init Rhea
-            Rhea.Common.RheaConfig.InitConfig(_configuration);
-            Rhea.Common.Language.Default = DefaultLanguage;
-            Rhea.Common.Language.Dictionary = Biz.Language.Dictionary;
-        }
-    }
-}
diff --git a/Tiger.Business/Common/ApiSearcher.cs b/Tiger.Business/Common/ApiSearcher.cs
deleted file mode 100644
index 8761c80..0000000
--- a/Tiger.Business/Common/ApiSearcher.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.IO;
-using System.Text;
-using NLog;
-
-namespace Tiger.Business
-{
-    /// <summary>
-    /// Api 鎼滅储鍣�
-    /// </summary>
-    public class ApiSearcher<T>
-    {
-        public string DbFilePath { get; set; }
-        public T Condition { get; set; }
-    }
-}
diff --git a/Tiger.Business/Common/DbBackup.cs b/Tiger.Business/Common/DbBackup.cs
deleted file mode 100644
index d2c3fe0..0000000
--- a/Tiger.Business/Common/DbBackup.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-锘縰sing Apache.NMS.ActiveMQ.Commands;
-using Rhea.Common;
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Tiger.IBusiness;
-
-namespace Tiger.Business
-{
-    public class DbBackup : IDbBackup
-    {
-        /// <summary>
-        /// 杩愯澶囦唤鏁版嵁搴揵at鏂囦欢
-        /// </summary>
-        /// <param name="path"></param>
-        /// <exception cref="NotImplementedException"></exception>
-        public async Task<ApiAction> ExcuteBackupBat(string path)
-        {
-            var action = new ApiAction();
-            if (!File.Exists(path))
-            {
-                //Console.WriteLine("鏂囦欢涓嶅瓨鍦紒");
-                return null;
-            }
-
-            StringBuilder builder = new StringBuilder();
-            try
-            {
-                Process process = new Process();
-                FileInfo fileInfo = new FileInfo(path);
-                process.StartInfo.WorkingDirectory = fileInfo.Directory.FullName;
-                //鍏抽棴 shell 鏂囦欢璺緞涓嶄竴鏍�
-                process.StartInfo.FileName = path;
-                process.StartInfo.UseShellExecute = false;
-                process.StartInfo.RedirectStandardInput = true; //閲嶅畾鍚戣緭鍏�
-                process.StartInfo.RedirectStandardOutput = true; //閲嶅畾鍚戞爣鍑嗚緭鍑� 
-                process.StartInfo.RedirectStandardError = true; //閲嶅畾鍚戦敊璇緭鍑�
-                process.StartInfo.CreateNoWindow = true;
-                process.Start();
-
-                //
-                StreamReader reader = process.StandardOutput;
-                string line = "";//姣忔璇诲彇涓�琛�
-                while ((line = reader.ReadLine()) != null)
-                {
-                    //Console.WriteLine("message:" + line);
-                    builder.AppendLine(line);
-                }
-
-                process.WaitForExit();
-                process.Close();
-                reader.Close();
-                action.Message = builder.ToString();
-                Logger.Interface.Info($"鎵ц澶囦唤鏁版嵁搴撴壒澶勭悊鑴氭湰淇℃伅: {builder}");
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"鎵ц澶囦唤鏁版嵁搴撴壒澶勭悊鑴氭湰鍑洪敊");
-            }
-            return action;
-        }
-    }
-}
diff --git a/Tiger.Business/Common/ImportExcel.cs b/Tiger.Business/Common/ImportExcel.cs
deleted file mode 100644
index 1300ea9..0000000
--- a/Tiger.Business/Common/ImportExcel.cs
+++ /dev/null
@@ -1,123 +0,0 @@
-锘縰sing Apache.NMS.ActiveMQ.Commands;
-using Rhea.Common;
-using System;
-using System.Collections.Generic;
-using Newtonsoft.Json;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Tiger.IBusiness;
-using Tiger.Model.Minsun;
-using Tiger.Model;
-using Tiger.Model.Entitys.MES.U9C;
-using System.Reflection;
-using Dm.filter;
-using System.Dynamic;
-
-namespace Tiger.Business
-{
-    /// <summary>
-    /// 閫氱敤瀵煎叆Excel
-    /// </summary>
-    public class ImportExcel : ICommonImportExcel
-    {
-        /// <summary>
-        /// 瀵煎叆
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="newEntity"></param>
-        /// <param name="input"></param>
-        /// <returns></returns>
-        public async Task<ApiAction> Import<T>(T newEntity, ImportInput input) where T : class, new()
-        {
-            var result = new ApiAction();
-            try
-            {
-
-                List<T> list = JsonConvert.DeserializeObject<List<T>>(input.EntityJson);
-                DbClient db = Biz.Db;
-                if (list.Any())
-                {
-                    if (list.Count > 100)
-                    {
-                        db.Utilities.PageEach(list, 100, pageList =>
-                        {
-                            var y = db.Storageable(pageList)
-                                   .ToStorage();
-                            y.AsInsertable.ExecuteCommand();
-                            y.AsUpdateable.ExecuteCommand();
-                        });
-                    }
-                    else
-                    {
-                        var s = db.Storageable(list)
-                               .ToStorage();
-                        s.AsInsertable.ExecuteCommand();
-                        s.AsUpdateable.ExecuteCommand();
-                    }
-                }
-
-
-            }
-            catch (Exception ex)
-            {
-                result.CatchException(ex, $"楠岃瘉瀵煎叆寮傚父");
-            }
-            return result;
-        }
-
-        /// <summary>
-        /// 瀵煎叆Excel鍓嶉獙璇�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="newEntity"></param>
-        /// <param name="input"></param>
-        /// <returns></returns>
-        public async Task<ApiAction<List<T>>> ValidateTableImport<T>(T newEntity, ImportValidateInput input) {
-            var result = new ApiAction<List<T>>();
-            try
-            {
-                List<T> list = JsonConvert.DeserializeObject<List<T>>(input.EntityJson);
-                List<string> chkColumns = JsonConvert.DeserializeObject<List<string>>(input.CheckJson);
-                List<string> wheres = JsonConvert.DeserializeObject<List<string>>(input.where); //鐩墠鍙湁=锛屼互鍚庡彲浠ュ鍔犲叾浠栫殑鏌ヨ鏉′欢
-                Type entityType = typeof(T); //T娉涘瀷 
-                //閫氳繃灞炴�у悕鑾峰彇灞炴�у��  鈥淰ALIDATION_TYPE鈥濆睘鎬у悕绉�
-                PropertyInfo typeInfo = entityType.GetProperty("VALIDATION_TYPE");
-                //閫氳繃灞炴�у悕鑾峰彇灞炴�у��  鈥淰ALIDATION_RESULT鈥濆睘鎬у悕绉�
-                PropertyInfo retInfo = entityType.GetProperty("VALIDATION_RESULT");
-                foreach (var item in list)
-                {
-                    string where = " 1=1 ";
-                    typeInfo.SetValue(item, "鏂板");
-                    retInfo.SetValue(item, "");
-                    foreach (var col in chkColumns)
-                    {
-                        PropertyInfo colInfo = entityType.GetProperty(col);
-                        if (!colInfo.IsNullOrEmpty() && colInfo.GetValue(item).IsNullOrEmpty()) {
-                            typeInfo.SetValue(item, "鏁版嵁寮傚父");
-                            retInfo.SetValue(item, "鍊间负绌烘垨涓嶅瓨鍦�");
-                        }
-                    }
-                    foreach (var w in wheres)
-                    {
-                        PropertyInfo wInfo = entityType.GetProperty(w);
-                        where += $"AND {w} = '{wInfo.GetValue(item)}'";
-                    }
-                    if (await Biz.Db.Queryable<T>().Where(where).AnyAsync())
-                    {
-                        typeInfo.SetValue(item, "淇敼");
-                        retInfo.SetValue(item, "鏁版嵁宸茬粡瀛樺湪锛屼娇鐢ㄦ洿鏂�");
-                    }
-                }
-                result.Data = list;
-            }
-            catch (Exception ex)
-            {
-                result.CatchException(ex, $"楠岃瘉瀵煎叆寮傚父");
-            }
-            return result;
-        }
-    }
-}
diff --git a/Tiger.Business/Common/Logger.cs b/Tiger.Business/Common/Logger.cs
deleted file mode 100644
index e323e3e..0000000
--- a/Tiger.Business/Common/Logger.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.IO;
-using System.Text;
-using NLog;
-
-namespace Tiger.Business
-{
-    /// <summary>
-    /// 鏃ュ織妯″潡
-    /// </summary>
-    public class Logger
-    {
-        /// <summary>
-        /// 璁板綍绯荤粺鏃ュ織
-        /// </summary>
-        public static NLog.Logger Default => IBusiness.Logger.Default;
-        /// <summary>
-        /// 璁板綍Http璁块棶鏃ュ織
-        /// </summary>
-        public static NLog.Logger Http => IBusiness.Logger.Http;
-        /// <summary>
-        /// 璁板綍绯荤粺鏃ュ織骞舵姏鍑哄埌鎺у埗鍙�
-        /// </summary>
-        public static NLog.Logger Console => IBusiness.Logger.Console;
-        /// <summary>
-        /// 璁板綍鏃ュ織锛屼笉璁板綍璋冪敤鑰�
-        /// </summary>
-        public static NLog.Logger NoCaller => IBusiness.Logger.NoCaller;
-        /// <summary>
-        /// 璁板綍璁″垝浠诲姟鏃ュ織
-        /// </summary>
-        public static NLog.Logger Scheduler => IBusiness.Logger.Scheduler;
-        /// <summary>
-        /// 璁板綍鎺ュ彛鏃ュ織
-        /// </summary>
-        public static NLog.Logger Interface => IBusiness.Logger.Interface;
-        /// <summary>
-        /// 璐ф灦鎺ュ彛鏃ュ織
-        /// </summary>
-        public static NLog.Logger Shelf => IBusiness.Logger.Shelf;
-    }
-}
diff --git a/Tiger.Business/DbBase.cs b/Tiger.Business/DbBase.cs
deleted file mode 100644
index e5175c0..0000000
--- a/Tiger.Business/DbBase.cs
+++ /dev/null
@@ -1,918 +0,0 @@
-锘縰sing Apache.NMS;
-using Apache.NMS.ActiveMQ;
-using Rhea.Common;
-using SqlSugar;
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Data.SqlTypes;
-using System.Linq;
-using System.Linq.Expressions;
-using System.Text;
-using System.Threading.Tasks;
-using Tiger.IBusiness;
-using Tiger.Model;
-
-namespace Tiger.Business
-{
-    /// <summary>
-    /// 鏁版嵁搴撴搷浣滃熀纭�绫�
-    /// </summary>
-    public class DbBase : Rhea.Common.DbBase, IDbBase//Rhea.Common.DbBase
-    {
-        /// <summary>
-        /// 鏁版嵁搴撴搷浣滃熀纭�绫�
-        /// </summary>
-        /// <param name="db"></param>
-        public DbBase(DbClient db) : base(db)
-        {
-        }
-
-        #region 娣诲姞鎿嶄綔
-
-        /// <summary>
-        /// 鎶婂崟涓疄浣撳線鏁版嵁搴撴坊鍔犱竴琛屾暟鎹�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="entity">瀹炰綋</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public new async Task<ApiAction<T>> AddAsync<T>(T entity, bool isAsync = true) where T : class, new()
-        {
-            var action = new ApiAction<T>();
-            try
-            {
-                var dbres = isAsync ? await Db.Insertable<T>(entity).ExecuteCommandAsync() : Db.Insertable<T>(entity).ExecuteCommand();
-                action.Message = $"Insert {typeof(T).Name} entity into database success";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Insert {typeof(T).Name} entity into database exception");
-            }
-            return action;
-        }
-
-        /// <summary>
-        /// 鎶婂疄浣揕ist寰�鏁版嵁搴撴壒閲忔坊鍔犳暟鎹�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="list">瀹炰綋List</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public new async Task<ApiAction<T>> AddListAsync<T>(List<T> list, bool isAsync = true) where T : class, new()
-        {
-            var action = new ApiAction<T>();
-            try
-            {
-                var dbres = isAsync ? await Db.Insertable<T>(list).ExecuteCommandAsync() : Db.Insertable<T>(list).ExecuteCommand();
-                action.Message = $"Insert {typeof(T).Name} entity list into database success";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Insert {typeof(T).Name} entity list into database exception.");
-            }
-            return action;
-        }
-
-        #endregion 娣诲姞鎿嶄綔
-
-        #region 淇濆瓨鎿嶄綔
-
-        /// <summary>
-        /// 鎶婂崟涓疄浣撳線鏁版嵁搴撲繚瀛樹竴琛屾暟鎹紝濡傛灉瀛樺湪灏辨洿鏂帮紝涓嶅瓨鍦ㄥ氨鎻掑叆
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="entity">瀹炰綋</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public new async Task<ApiAction<T>> SaveAsync<T>(T entity, bool isAsync = true) where T : class, new()
-        {
-            var action = new ApiAction<T>();
-            try
-            {
-                var dbres = isAsync ? await Db.Saveable<T>(entity).ExecuteCommandAsync() : Db.Saveable<T>(entity).ExecuteCommand();
-                action.Message = $"Save {typeof(T).Name} entity into database success";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Save {typeof(T).Name} entity into database exception");
-            }
-            return action;
-        }
-
-        /// <summary>
-        /// 鎶婂疄浣揕ist寰�鏁版嵁搴撴壒閲忎繚瀛樻暟鎹紝濡傛灉瀛樺湪灏辨洿鏂帮紝涓嶅瓨鍦ㄥ氨鎻掑叆
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="list">瀹炰綋List</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public new async Task<ApiAction<T>> SaveListAsync<T>(List<T> list, bool isAsync = true) where T : class, new()
-        {
-            var action = new ApiAction<T>();
-            try
-            {
-                var dbres = isAsync ? await Db.Saveable<T>(list).ExecuteCommandAsync() : Db.Saveable<T>(list).ExecuteCommand();
-                action.Message = $"Save {typeof(T).Name} entity list into database success";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Save {typeof(T).Name} entity list into database exception.");
-            }
-            return action;
-        }
-
-        /// <summary>
-        /// 鎶婂崟涓疄浣撳線鏁版嵁搴撲繚瀛樹竴琛屾暟鎹紝濡傛灉瀛樺湪灏辨洿鏂帮紝涓嶅瓨鍦ㄥ氨鎻掑叆
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="entity">瀹炰綋</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public async Task<ApiAction<T>> StorageableAsync<T>(T entity, bool isAsync = true) where T : class, new()
-        {
-            var action = new ApiAction<T>();
-            try
-            {
-                var dbres = isAsync ? await Db.Storageable<T>(entity).ExecuteCommandAsync() : Db.Storageable<T>(entity).ExecuteCommand();
-                action.Message = $"Storageable {typeof(T).Name} entity into database success";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Storageable {typeof(T).Name} entity into database exception");
-            }
-            return action;
-        }
-
-        /// <summary>
-        /// 鎶婂疄浣揕ist寰�鏁版嵁搴撴壒閲忎繚瀛樻暟鎹紝濡傛灉瀛樺湪灏辨洿鏂帮紝涓嶅瓨鍦ㄥ氨鎻掑叆
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="list">瀹炰綋List</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public async Task<ApiAction<T>> StorageableListAsync<T>(List<T> list, bool isAsync = true) where T : class, new()
-        {
-            var action = new ApiAction<T>();
-            try
-            {
-                var dbres = isAsync ? await Db.Storageable<T>(list).ExecuteCommandAsync() : Db.Storageable<T>(list).ExecuteCommand();
-                action.Message = $"Storageable {typeof(T).Name} entity list into database success";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Storageable {typeof(T).Name} entity list into database exception.");
-            }
-            return action;
-        }
-
-        #endregion 淇濆瓨鎿嶄綔
-
-        #region 淇敼鎿嶄綔
-
-        /// <summary>
-        /// 浠庢暟鎹簱涓慨鏀瑰崟涓疄浣�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="entity">瀹炰綋</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public new async Task<ApiAction> UpdateAsync<T>(T entity, bool isAsync = true) where T : class, new()
-        {
-            var action = new ApiAction();
-            try
-            {
-                var dbres = isAsync ? await Db.Updateable<T>(entity).ExecuteCommandAsync() : Db.Updateable<T>(entity).ExecuteCommand();
-                action.Message = $"Update {typeof(T).Name} entity from database success";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Update {typeof(T).Name} entity from database exception");
-            }
-            return action;
-        }
-
-        /// <summary>
-        /// 鏍规嵁瀹炰綋List鍦ㄦ暟鎹簱鎵归噺淇敼鏁版嵁
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="list">瀹炰綋List</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public new async Task<ApiAction> UpdateAsync<T>(List<T> list, bool isAsync = true) where T : class, new()
-        {
-            var action = new ApiAction();
-            try
-            {
-                var dbres = isAsync ? await Db.Updateable<T>(list).ExecuteCommandAsync() : Db.Updateable<T>(list).ExecuteCommand();
-                action.Message = $"Update {typeof(T).Name} entity list from database success";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Update {typeof(T).Name} entity list from database exception.");
-            }
-            return action;
-        }
-
-        /// <summary>
-        /// 鎸塙pdaterAble&lt;T>瀵硅薄浠庢暟鎹簱涓慨鏀瑰涓疄浣撶殑鏌愪簺瀛楁
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="updater">瀹炰綋List</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public new async Task<ApiAction> UpdateAsync<T>(UpdateAble<T> updater, bool isAsync = true) where T : class, new()
-        {
-            var action = new ApiAction();
-            try
-            {
-                var dbres = isAsync ? await Db.Updateable<T>(updater.Items).UpdateColumns(updater.UpdateColumnList).ExecuteCommandAsync() : Db.Updateable<T>(updater.Items).UpdateColumns(updater.UpdateColumnList).ExecuteCommand();
-                action.Message = $"Update some columns of {typeof(T).Name} entity list from database success";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Update some columns of {typeof(T).Name} entity list from database exception");
-            }
-            return action;
-        }
-
-        #endregion 淇敼鎿嶄綔
-
-        #region 鍒犻櫎鎿嶄綔
-
-        /// <summary>
-        /// 浠庢暟鎹簱涓垹闄ゅ涓疄浣�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="newEntity">鍥哄畾鐢ㄦ硶锛氶�氳繃ApiAction.NewDataEntity()鍒涘缓ApiAction涓寚瀹氱被鍨嬪璞�</param>
-        /// <param name="primaryKeys">瀹炰綋鐨勪富閿甀D鏁扮粍</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public new async Task<ApiAction> DeleteAsync<T>(T newEntity, string[] primaryKeys, bool isAsync = true) where T : class, new()
-        {
-            var action = new ApiAction(false);
-            try
-            {
-                var dbres = isAsync ? await Db.Deleteable<T>().In(primaryKeys).ExecuteCommandAsync() : Db.Deleteable<T>().In(primaryKeys).ExecuteCommand();
-                action.Message = $"Delete {typeof(T).Name} entity by primary keys from database success";
-                action.IsSuccessed = true;
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Delete {typeof(T).Name} entity by primary keys from database exception");
-            }
-            return action;
-        }
-
-        /// <summary>
-        /// 浠庢暟鎹簱涓垹闄ゅ崟涓疄浣�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="entity">瀹炰綋</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public new async Task<ApiAction> DeleteAsync<T>(T entity, bool isAsync = true) where T : class, new()
-        {
-            var action = new ApiAction(false);
-            try
-            {
-                var dbres = isAsync ? await Db.Deleteable<T>().Where(entity).ExecuteCommandAsync() : Db.Deleteable<T>().Where(entity).ExecuteCommand();
-                action.Message = $"Delete {typeof(T).Name} entity from database success";
-                action.IsSuccessed = true;
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Delete {typeof(T).Name} entity from database exception");
-            }
-            return action;
-        }
-
-        /// <summary>
-        /// 浠庢暟鎹簱涓垹闄ゅ疄浣揕ist
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="list">瀹炰綋List</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public new async Task<ApiAction> DeleteAsync<T>(List<T> list, bool isAsync = true) where T : class, new()
-        {
-            var action = new ApiAction();
-            try
-            {
-                var dbres = isAsync ? await Db.Deleteable<T>().Where(list).ExecuteCommandAsync() : Db.Deleteable<T>().Where(list).ExecuteCommand();
-                action.Message = $"Delete {typeof(T).Name} entity list from database success";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Delete {typeof(T).Name} entity list from database exception");
-            }
-            return action;
-        }
-
-        /// <summary>
-        /// 鏍规嵁Where璇彞鍒犻櫎婊¤冻鏉′欢鐨勬暟鎹�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="newEntity">鍥哄畾鐢ㄦ硶锛氶�氳繃ApiAction.NewDataEntity()鍒涘缓ApiAction涓寚瀹氱被鍨嬪璞�</param>
-        /// <param name="where">Where璇彞</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public new async Task<ApiAction> DeleteAsync<T>(T newEntity, string where, bool isAsync = true) where T : class, new()
-        {
-            var action = new ApiAction();
-            try
-            {
-                var dbres = isAsync ? await Db.Deleteable<T>().Where(where).ExecuteCommandAsync() : Db.Deleteable<T>().Where(where).ExecuteCommand();
-                action.Message = $"Delete {typeof(T).Name} entity by where from database success";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Delete {typeof(T).Name} entity by where from database exception");
-            }
-            return action;
-        }
-
-        #endregion 鍒犻櫎鎿嶄綔
-
-        #region 鏌ヨ鎿嶄綔
-
-        /// <summary>
-        /// 浠庢暟鎹簱涓煡璇㈠疄浣�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="newEntity">鍥哄畾鐢ㄦ硶锛氶�氳繃ApiAction.NewDataEntity()鍒涘缓ApiAction涓寚瀹氱被鍨嬪璞�</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <param name="needInclude">鏄惁闇�瑕佸鑸煡璇�</param>
-        /// <returns></returns>
-        public async Task<ApiAction<List<T>>> QueryAsync<T>(T newEntity, bool isAsync = true, bool needInclude = false)
-        {
-            var action = new ApiAction<List<T>>();
-            try
-            {
-                var queryable = Db.Queryable<T>();
-                if (needInclude)
-                {
-                    queryable = queryable.IncludesAllFirstLayer();
-                }
-                action.Data = isAsync ? await queryable.ToListAsync() : queryable.ToList();
-                action.Message = $"Query {typeof(T).Name} entity list from database success";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Query {typeof(T).Name} entity list from database exception");
-            }
-            return action;
-        }
-
-        /// <summary>
-        /// 鏍规嵁Where璇彞浠庢暟鎹簱涓煡璇㈠疄浣�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="newEntity">鍥哄畾鐢ㄦ硶锛氶�氳繃ApiAction.NewDataEntity()鍒涘缓ApiAction涓寚瀹氱被鍨嬪璞�</param>
-        /// <param name="where">Where璇彞</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <param name="needInclude">鏄惁闇�瑕佸鑸煡璇�</param>
-        /// <returns></returns>
-        public async Task<ApiAction<List<T>>> QueryAsync<T>(T newEntity, string where, bool isAsync = true, bool needInclude = false) where T : class, new()
-        {
-            var action = new ApiAction<List<T>>();
-            try
-            {
-                var queryable = Db.Queryable<T>().Where(where);
-                if (needInclude)
-                {
-                    queryable = queryable.IncludesAllFirstLayer();
-                }
-                action.Data = isAsync ? await queryable.ToListAsync() : queryable.ToList();
-                action.Message = $"Query {typeof(T).Name} entity list by where from database success";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Query {typeof(T).Name} entity list by where from database exception");
-            }
-            return action;
-        }
-
-        /// <summary>
-        /// 鎸塒ageAble&lt;T>瀵硅薄杩斿洖瀹炰綋褰撳墠Page鐨勬暟鎹�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="page">鍒嗛〉鐨勫弬鏁板疄浣�</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <param name="needInclude">鏄惁闇�瑕佸鑸煡璇�</param>
-        /// <returns></returns>
-        public async Task<ApiAction<PageAble<T>>> QueryAsync<T>(PageAble<T> page, bool isAsync = true, bool needInclude = false)
-        {
-            var action = new ApiAction<PageAble<T>>();
-            try
-            {
-                var queryable = Db.Queryable<T>();
-                if (needInclude)
-                {
-                    queryable = queryable.IncludesAllFirstLayer();
-                }
-                action.Data = isAsync ? await queryable.ToPageAsync(page.pageIndex, page.pageSize) : queryable.ToPage(page.pageIndex, page.pageSize);
-                action.Message = $"Query {typeof(T).Name} entity page from database success";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Query {typeof(T).Name} entity page from database exception");
-            }
-            return action;
-        }
-
-        /// <summary>
-        /// 鍒嗛〉鐩存帴杩斿洖PageAble&lt;T>
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="page"></param>
-        /// <param name="isAsync"></param>
-        /// <param name="needInclude">鏄惁闇�瑕佸鑸煡璇�</param>
-        /// <returns></returns>
-        public async Task<ApiAction<PageAble<T>>> QueryPageAsync<T>(PageAble<T> page, bool isAsync = true, bool needInclude = false)
-        {
-            var action = new ApiAction<PageAble<T>>();
-            try
-            {
-                string where = page.sqlcmd;
-                var queryable = Db.Queryable<T>().Where(where);
-                if (needInclude)
-                {
-                    queryable = queryable.IncludesAllFirstLayer();
-                }
-                action.Data = isAsync ? await queryable.ToPageAsync(page.pageIndex, page.pageSize) : queryable.ToPage(page.pageIndex, page.pageSize);
-                action.Data.draw = page.draw;
-                action.Message = $"Query {typeof(T).Name} entity page from database success";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Query {typeof(T).Name} entity page from database exception");
-            }
-            return action;
-        }
-
-        /// <summary>
-        /// 鎸塓ueryAble&lt;T>瀵硅薄浠庢暟鎹簱鏌ヨ婊¤冻鏉′欢鐨勬暟鎹�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="query">QueryAble鐨勫弬鏁板疄浣�</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <param name="needInclude">鏄惁闇�瑕佸鑸煡璇�</param>
-        /// <returns></returns>
-        public async Task<ApiAction<QueryAble<T>>> QueryAsync<T>(QueryAble<T> query, bool isAsync = true, bool needInclude = false)
-        {
-            var action = new ApiAction<QueryAble<T>>();
-            try
-            {
-                var queryable = Db.Queryable<T>().WhereIF(!query.where.IsNullOrEmpty(), query.where).OrderByIF(!query.order.IsNullOrEmpty(), query.order);
-                if (needInclude)
-                {
-                    queryable = queryable.IncludesAllFirstLayer();
-                }
-                if (query.page == null)
-                {
-                    query.Items = isAsync ? await queryable.ToListAsync() : queryable.ToList();
-                }
-                else
-                {
-                    query.page = isAsync ? (await queryable.ToPageAsync(query.page.pageIndex, query.page.pageSize)) : queryable.ToPage(query.page.pageIndex, query.page.pageSize);
-                    query.Items = query.page.data;
-                }
-                action.Data = query;
-                action.Message = $"Query {typeof(T).Name} entity by QueryAble from database success";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Query {typeof(T).Name} entity by QueryAble from database exception");
-            }
-            return action;
-        }
-
-        /// <summary>
-        /// 鏍规嵁SQL璇彞浠庢暟鎹簱涓煡璇㈠疄浣�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="newEntity">鍥哄畾鐢ㄦ硶锛氶�氳繃ApiAction.NewDataEntity()鍒涘缓ApiAction涓寚瀹氱被鍨嬪璞�</param>
-        /// <param name="sqlcmd">SQL璇彞</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <param name="needInclude">鏄惁闇�瑕佸鑸煡璇�</param>
-        /// <returns></returns>
-        public async Task<ApiAction<List<T>>> QuerySqlAsync<T>(T newEntity, string sqlcmd, bool isAsync = true, bool needInclude = false) where T : class, new()
-        {
-            var action = new ApiAction<List<T>>();
-            try
-            {
-                var queryable = Db.SqlQueryable<T>(sqlcmd);
-                if (needInclude)
-                {
-                    queryable = queryable.IncludesAllFirstLayer();
-                }
-                action.Data = isAsync ? await queryable.ToListAsync() : queryable.ToList();
-                action.Message = $"Query {typeof(T).Name} entity list from database by sql command success";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Query {typeof(T).Name} entity list from database by sql command exception");
-            }
-            return action;
-        }
-
-        /// <summary>
-        /// 鏍规嵁SQL璇彞浠庢暟鎹簱涓煡璇㈠苟鎸塒ageAble&lt;T>瀵硅薄杩斿洖褰撳墠Page鐨勬暟鎹�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="page">鍒嗛〉鐨勫弬鏁板疄浣�</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <param name="needInclude">鏄惁闇�瑕佸鑸煡璇�</param>
-        /// <returns></returns>
-        public async Task<ApiAction<PageAble<T>>> QuerySqlAsync<T>(PageAble<T> page, bool isAsync = true, bool needInclude = false) where T : class, new()
-        {
-            var action = new ApiAction<PageAble<T>>();
-            try
-            {
-                var queryable = Db.SqlQueryable<T>(page.sqlcmd);
-                if (needInclude)
-                {
-                    queryable = queryable.IncludesAllFirstLayer();
-                }
-                action.Data = isAsync ? await queryable.ToPageAsync(page.pageIndex, page.pageSize) : queryable.ToPage(page.pageIndex, page.pageSize);
-                action.Data.draw = page.draw;
-                action.Message = $"Query {typeof(T).Name} entity page from database by sql command success";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Query {typeof(T).Name} entity page from database by sql command exception");
-            }
-            return action;
-        }
-
-        /// <summary>
-        /// 浠庢暟鎹簱涓煡璇㈠疄浣�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="newEntity">鍥哄畾鐢ㄦ硶锛氶�氳繃ApiAction.NewDataEntity()鍒涘缓ApiAction涓寚瀹氱被鍨嬪璞�</param>
-        /// <param name="options">鎺堟潈鏌ヨ閰嶇疆椤�</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <param name="needInclude">鏄惁闇�瑕佸鑸煡璇�</param>
-        /// <returns></returns>
-        public async Task<ApiAction<List<T>>> QueryByAuthAsync<T>(T newEntity, AuthOption options, bool isAsync = true, bool needInclude = false) where T : iTableHasAuth, new()
-        {
-            var action = new ApiAction<List<T>>();
-            try
-            {
-                var queryable = Db.Queryable<T>().ByAuth(options);
-                if (needInclude)
-                {
-                    queryable = queryable.IncludesAllFirstLayer();
-                }
-                action.Data = isAsync ? await queryable.ToListAsync() : queryable.ToList();
-                action.Message = $"Query {typeof(T).Name} entity list from database success";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Query {typeof(T).Name} entity list from database exception");
-            }
-            return action;
-        }
-
-        /// <summary>
-        /// 鏍规嵁Where璇彞浠庢暟鎹簱涓煡璇㈠疄浣�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="newEntity">鍥哄畾鐢ㄦ硶锛氶�氳繃ApiAction.NewDataEntity()鍒涘缓ApiAction涓寚瀹氱被鍨嬪璞�</param>
-        /// <param name="where">Where璇彞</param>
-        /// <param name="options">鎺堟潈鏌ヨ閰嶇疆椤�</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <param name="needInclude">鏄惁闇�瑕佸鑸煡璇�</param>
-        /// <returns></returns>
-        public async Task<ApiAction<List<T>>> QueryByAuthAsync<T>(T newEntity, string where, AuthOption options, bool isAsync = true, bool needInclude = false) where T : iTableHasAuth, new()
-        {
-            var action = new ApiAction<List<T>>();
-            try
-            {
-                var queryable = Db.Queryable<T>().ByAuth(options).Where(where);
-                if (needInclude)
-                {
-                    queryable = queryable.IncludesAllFirstLayer();
-                }
-                action.Data = isAsync ? await queryable.ToListAsync() : queryable.ToList();
-                action.Message = $"Query {typeof(T).Name} entity list by where from database success";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Query {typeof(T).Name} entity list by where from database exception");
-            }
-            return action;
-        }
-
-        /// <summary>
-        /// 鎸塒ageAble&lt;T>瀵硅薄杩斿洖瀹炰綋褰撳墠Page鐨勬暟鎹�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="page">鍒嗛〉鐨勫弬鏁板疄浣�</param>
-        /// <param name="options">鎺堟潈鏌ヨ閰嶇疆椤�</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <param name="needInclude">鏄惁闇�瑕佸鑸煡璇�</param>
-        /// <returns></returns>
-        public async Task<ApiAction<PageAble<T>>> QueryByAuthAsync<T>(PageAble<T> page, AuthOption options, bool isAsync = true, bool needInclude = false) where T : iTableHasAuth, new()
-        {
-            var action = new ApiAction<PageAble<T>>();
-            try
-            {
-                var queryable = Db.Queryable<T>().ByAuth(options);
-                if (needInclude)
-                {
-                    queryable = queryable.IncludesAllFirstLayer();
-                }
-                action.Data = isAsync ? await queryable.ToPageAsync(page.pageIndex, page.pageSize) : queryable.ToPage(page.pageIndex, page.pageSize);
-                action.Message = $"Query {typeof(T).Name} entity page from database success";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Query {typeof(T).Name} entity page from database exception");
-            }
-            return action;
-        }
-
-        /// <summary>
-        /// 鍒嗛〉鐩存帴杩斿洖PageAble&lt;T>
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="page"></param>
-        /// <param name="options">鎺堟潈鏌ヨ閰嶇疆椤�</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <param name="needInclude">鏄惁闇�瑕佸鑸煡璇�</param>
-        /// <returns></returns>
-        public async Task<ApiAction<PageAble<T>>> QueryByAuthPageAsync<T>(PageAble<T> page, AuthOption options, bool isAsync = true, bool needInclude = false) where T : iTableHasAuth, new()
-        {
-            var action = new ApiAction<PageAble<T>>();
-            try
-            {
-                string where = page.sqlcmd;
-                var queryable = Db.Queryable<T>().ByAuth(options).Where(where);
-                if (needInclude)
-                {
-                    queryable = queryable.IncludesAllFirstLayer();
-                }
-                action.Data = isAsync ? await queryable.ToPageAsync(page.pageIndex, page.pageSize) : queryable.ToPage(page.pageIndex, page.pageSize);
-                action.Data.draw = page.draw;
-                action.Message = $"Query {typeof(T).Name} entity page from database success";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Query {typeof(T).Name} entity page from database exception");
-            }
-            return action;
-        }
-
-        /// <summary>
-        /// 鎸塓ueryAble&lt;T>瀵硅薄浠庢暟鎹簱鏌ヨ婊¤冻鏉′欢鐨勬暟鎹�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="query">QueryAble鐨勫弬鏁板疄浣�</param>
-        /// <param name="options">鎺堟潈鏌ヨ閰嶇疆椤�</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <param name="needInclude">鏄惁闇�瑕佸鑸煡璇�</param>
-        /// <returns></returns>
-        public async Task<ApiAction<QueryAble<T>>> QueryByAuthAsync<T>(QueryAble<T> query, AuthOption options, bool isAsync = true, bool needInclude = false) where T : iTableHasAuth, new()
-        {
-            var action = new ApiAction<QueryAble<T>>();
-            try
-            {
-                var queryable = Db.Queryable<T>().ByAuth(options).WhereIF(!query.where.IsNullOrEmpty(), query.where).OrderByIF(!query.order.IsNullOrEmpty(), query.order);
-                if (needInclude)
-                {
-                    queryable = queryable.IncludesAllFirstLayer();
-                }
-                if (query.page == null)
-                {
-                    query.Items = isAsync ? await queryable.ToListAsync() : queryable.ToList();
-                }
-                else
-                {
-                    query.page = isAsync ? (await queryable.ToPageAsync(query.page.pageIndex, query.page.pageSize)) : queryable.ToPage(query.page.pageIndex, query.page.pageSize);
-                    query.Items = query.page.data;
-                }
-                action.Data = query;
-                action.Message = $"Query {typeof(T).Name} entity by QueryAble from database success";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Query {typeof(T).Name} entity by QueryAble from database exception");
-            }
-            return action;
-        }
-
-        #endregion 鏌ヨ鎿嶄綔
-
-        #region 鏌ヨ Count
-
-        /// <summary>
-        /// 鏍规嵁Where璇彞鏌ヨ婊¤冻鏉′欢鐨勫疄浣撶殑Count鏁伴噺
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="newEntity">鍥哄畾鐢ㄦ硶锛氶�氳繃ApiAction.NewDataEntity()鍒涘缓ApiAction涓寚瀹氱被鍨嬪璞�</param>
-        /// <param name="where">Where璇彞</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public new async Task<ApiAction> CountAsync<T>(T newEntity, string where, bool isAsync = true)
-        {
-            var action = new ApiAction();
-            try
-            {
-                action.Data = isAsync ? await Db.Queryable<T>().Where(where).CountAsync() : Db.Queryable<T>().Where(where).Count();
-                action.Message = $"Select Count[{typeof(T).Name} entity) success";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Select Count[{typeof(T).Name} entity) exception");
-            }
-            return action;
-        }
-
-        /// <summary>
-        /// 鏍规嵁Where璇彞鏌ヨ婊¤冻鏉′欢鐨勫疄浣撶殑Count鏁伴噺
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="newEntity">鍥哄畾鐢ㄦ硶锛氶�氳繃ApiAction.NewDataEntity()鍒涘缓ApiAction涓寚瀹氱被鍨嬪璞�</param>
-        /// <param name="where">Where璇彞</param>
-        /// <param name="options">鎺堟潈鏌ヨ閰嶇疆椤�</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public async Task<ApiAction> CountByAuthAsync<T>(T newEntity, string where, AuthOption options, bool isAsync = true) where T : iTableHasAuth, new()
-        {
-            var action = new ApiAction();
-            try
-            {
-                action.Data = isAsync ? await Db.Queryable<T>().ByAuth(options).Where(where).CountAsync() : Db.Queryable<T>().ByAuth(options).Where(where).Count();
-                action.Message = $"Select Count[{typeof(T).Name} entity) success";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Select Count[{typeof(T).Name} entity) exception");
-            }
-            return action;
-        }
-
-        #endregion 鏌ヨ Count
-
-        #region 鏌ヨ Exist
-
-        /// <summary>
-        /// 鏍规嵁Where璇彞鏌ヨ婊¤冻鏉′欢鐨凞ata瀹炰綋鏄惁瀛樺湪
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="newEntity">鍥哄畾鐢ㄦ硶锛氶�氳繃ApiAction.NewDataEntity()鍒涘缓ApiAction涓寚瀹氱被鍨嬪璞�</param>
-        /// <param name="where">Where璇彞</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public new async Task<ApiAction> IsExistAsync<T>(T newEntity, string where, bool isAsync = true)
-        {
-            var action = new ApiAction();
-            try
-            {
-                action.Data = isAsync ? await Db.Queryable<T>().Where(where).AnyAsync() : Db.Queryable<T>().Where(where).Any();
-                action.Message = $"Check {typeof(T).Name} entity is exist success";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Check {typeof(T).Name} entity is exist exception");
-            }
-            return action;
-        }
-
-        /// <summary>
-        /// 鏍规嵁Where璇彞鏌ヨ婊¤冻鏉′欢鐨凞ata瀹炰綋鏄惁瀛樺湪
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="newEntity">鍥哄畾鐢ㄦ硶锛氶�氳繃ApiAction.NewDataEntity()鍒涘缓ApiAction涓寚瀹氱被鍨嬪璞�</param>
-        /// <param name="where">Where璇彞</param>
-        /// <param name="options">鎺堟潈鏌ヨ閰嶇疆椤�</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public async Task<ApiAction> IsExistByAuthAsync<T>(T newEntity, string where, AuthOption options, bool isAsync = true) where T : iTableHasAuth, new()
-        {
-            var action = new ApiAction();
-            try
-            {
-                action.Data = isAsync ? await Db.Queryable<T>().ByAuth(options).Where(where).AnyAsync() : Db.Queryable<T>().ByAuth(options).Where(where).Any();
-                action.Message = $"Check {typeof(T).Name} entity is exist success";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Check {typeof(T).Name} entity is exist exception");
-            }
-            return action;
-        }
-
-        #endregion 鏌ヨ Exist
-
-        #region 鎵цSQL
-
-        /// <summary>
-        /// 鎵цSQL璇彞杩斿洖褰卞搷琛屾暟
-        /// </summary>
-        /// <param name="sqlcmd">瑕佹墽琛岀殑SQL璇彞</param>
-        /// <param name="parameters">SQL璇彞鐨勫弬鏁�</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public new async Task<ApiAction> ExecuteSqlCommandAsync(string sqlcmd, List<SugarParameter> parameters, bool isAsync = true)
-        {
-            var action = new ApiAction();
-            try
-            {
-                action.Data = isAsync ? await Db.Ado.ExecuteCommandAsync(sqlcmd, parameters) : Db.Ado.ExecuteCommand(sqlcmd, parameters);
-                action.Message = $"Execute command success(SQL:{sqlcmd}, Params:{Db.Utilities.SerializeObject(parameters.Select(q => new { ParameterName = q.ParameterName, Value = q.Value }))})";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Execute command success(SQL:{sqlcmd}, Params:{Db.Utilities.SerializeObject(parameters)})");
-            }
-            return action;
-        }
-
-        /// <summary>
-        /// 鎵цSQL璇彞杩斿洖褰卞搷琛屾暟
-        /// </summary>
-        /// <param name="sqlcmd">瑕佹墽琛岀殑SQL璇彞</param>
-        /// <param name="parameters">SQL璇彞鐨勫弬鏁�</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public new async Task<ApiAction> ExecuteSqlCommandAsync(string sqlcmd, bool isAsync = true, params SugarParameter[] parameters)
-        {
-            var action = new ApiAction();
-            try
-            {
-                action.Data = isAsync ? await Db.Ado.ExecuteCommandAsync(sqlcmd, parameters) : Db.Ado.ExecuteCommand(sqlcmd, parameters);
-                action.Message = $"Execute command success(SQL:{sqlcmd}, Params:{Db.Utilities.SerializeObject(parameters.ToDictionary(it => it.ParameterName, it => it.Value))})";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Execute command success(SQL:{sqlcmd}, Params:{Db.Utilities.SerializeObject(parameters.ToDictionary(it => it.ParameterName, it => it.Value))})");
-            }
-            return action;
-        }
-
-        /// <summary>
-        /// 寮傛鏂瑰紡鎵цSQL璇彞杩斿洖褰卞搷琛屾暟
-        /// </summary>
-        /// <param name="sqlcmd">瑕佹墽琛岀殑SQL璇彞</param>
-        /// <param name="parameters">SQL璇彞鐨勫弬鏁�</param>
-        /// <returns></returns>
-        public new async Task<ApiAction> ExecuteSqlCommandAsync(string sqlcmd, params SugarParameter[] parameters)
-        {
-            var action = new ApiAction();
-            try
-            {
-                action.Data = await Db.Ado.ExecuteCommandAsync(sqlcmd, parameters);
-                action.Message = $"Execute command success(SQL:{sqlcmd}, Params:{Db.Utilities.SerializeObject(parameters.ToDictionary(it => it.ParameterName, it => it.Value))})";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Execute command success(SQL:{sqlcmd}, Params:{Db.Utilities.SerializeObject(parameters.ToDictionary(it => it.ParameterName, it => it.Value))})");
-            }
-            return action;
-        }
-
-        #endregion 鎵цSQL
-
-        #region 鍏堝垹闄ゅ悗鏂板
-        /// <summary>
-        /// 鍒犻櫎瀹屾洿鏂�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="query"></param>
-        /// <param name="list"></param>
-        /// <returns></returns>
-        public new async Task<ApiAction> AddAfterDeleteAsync<T>(QueryAble<T> query) where T : class, new()
-        {
-            var action = new ApiAction();
-            try
-            {
-                //淇濆瓨鍒版暟鎹簱
-                var db = Business.Biz.Db;
-                var dbTran = db.UseTran(() =>
-                {
-                    var dbres = !query.where.IsNullOrEmpty() ? db.Deleteable<T>().Where(query.where).ExecuteCommand() : db.Deleteable<T>().ExecuteCommand();
-                    if (query.Items.Count > 0)
-                    {
-                        db.Insertable<T>(query.Items).ExecuteCommand();
-                    }
-                });
-                if (!dbTran.IsSuccess)
-                {
-                    action.GetResponse().CatchExceptionWithLog(dbTran.ErrorException, $"浣滀笟淇濆瓨鍒版暟鎹簱寮傚父");
-                }
-                action.Message = $"Delete {typeof(T).Name} entity by where and add list in database success";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"Delete {typeof(T).Name} entity by where and add list in database exception");
-            }
-            return action;
-        }
-
-        #endregion
-
-    }//endClass
-}
\ No newline at end of file
diff --git a/Tiger.Business/DbCache/Biz.CodeRule.cs b/Tiger.Business/DbCache/Biz.CodeRule.cs
deleted file mode 100644
index 6b1800f..0000000
--- a/Tiger.Business/DbCache/Biz.CodeRule.cs
+++ /dev/null
@@ -1,220 +0,0 @@
-锘縰sing Tiger.Model;
-using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.Linq.Expressions;
-using System.Text;
-using System.Threading.Tasks;
-using Rhea.Common;
-using System.Net;
-using System.Linq;
-using Newtonsoft.Json;
-using Tiger.Business.DbCache;
-using System.Text.RegularExpressions;
-using System.Diagnostics;
-using System.Threading;
-using System.Data;
-using Tiger.IBusiness;
-
-namespace Tiger.Business
-{
-    /// <summary>
-    /// BAS_CODE_RULE 鎵╁睍绫�
-    /// </summary>
-    public static class BAS_CODE_RULEExtension
-    {
-        /// <summary>
-        /// 瑙勫垯楠岃瘉
-        /// </summary>
-        /// <param name="rule"></param>
-        /// <param name="sn"></param>
-        /// <returns></returns>
-        public static Result Verify(this BAS_CODE_RULE rule, string sn)
-        {
-            return Cache.CodeRule.Verify(sn, rule);
-        }
-
-        /// <summary>
-        /// 鐢熸垚鏉$爜
-        /// </summary>
-        /// <param name="rule"></param>
-        /// <param name="args"></param>
-        /// <returns></returns>
-        public static Result Generate(this BAS_CODE_RULE rule, params object?[] args)
-        {
-            return Cache.CodeRule.Generate(rule.RULE_CODE, args);
-        }
-
-        /// <summary>
-        /// 灏濊瘯鐢熸垚鏉$爜锛屼笉淇濆瓨鍒版暟鎹簱
-        /// </summary>
-        /// <param name="rule"></param>
-        /// <param name="args"></param>
-        /// <returns></returns>
-        public static Result TryGenerate(this BAS_CODE_RULE rule, params object?[] args)
-        {
-            return Cache.CodeRule.TryGenerate(rule.RULE_CODE, args);
-        }
-    }//endClass
-
-    /// <summary>
-    /// 鏉$爜瑙勫垯楠岃瘉绫�
-    /// </summary>
-    public class RuleVerifier
-    {
-        public RuleVerifier(BAS_CODE_RULE rule)
-        {
-            Rule = rule;
-        }
-
-        public BAS_CODE_RULE Rule { get; set; }
-        /// <summary>
-        /// 鏄惁瀹屾垚楠岃瘉
-        /// </summary>
-        public bool isFinish { get; set; } = false;
-        /// <summary>
-        /// 鏄惁鍖归厤鎴愬姛
-        /// </summary>
-        public bool IsMatch { get; set; } = false;
-        /// <summary>
-        /// 鏄惁楠岃瘉寮傚父
-        /// </summary>
-        public bool IsException { get; set; } = false;
-        /// <summary>
-        /// 楠岃瘉寮傚父
-        /// </summary>
-        public Exception MatchException { get; set; }
-
-        /// <summary>
-        /// 鏁版嵁搴撳叧鑱旈獙璇�
-        /// </summary>
-        public static bool CheckDB(string key, BAS_CODE_DTL ruleDtl)
-        {
-            return ruleDtl.DATA_TYPE == BAS_CODE_DTL.DATA_TYPEs.DbCheck.GetValue() ? Biz.Db.Queryable(ruleDtl.CHECK_TABLE, "t").Where($"{ruleDtl.CHECK_FIELD} = '{key}'").Any() : true;
-        }
-
-        /// <summary>
-        /// 瑙勫垯楠岃瘉
-        /// </summary>
-        /// <param name="code"></param>
-        /// <returns></returns>
-        public RuleVerifier Verify(string code)
-        {
-            //Debug.WriteLine($"{Rule.RULE_CODE} verify begin");
-            IsMatch = true;
-            IsException = false;
-            isFinish = false;
-            try
-            {
-                var match = Rule.GroupRegex.Match(code);
-                IsMatch = match.Success;
-                if (IsMatch)
-                {
-                    foreach (var item in Rule.Details)
-                    {
-                        item.CodeValue = match.Groups[item.RULE_SEQ.ToString()].Value;
-                        //鍒ゆ柇娴佹按鍙锋槸鍚︾鍚堣鍒�
-                        if (IsMatch && item.DATA_TYPE == BAS_CODE_DTL.DATA_TYPEs.SerialCode.GetValue())
-                        {
-                            //鎸夊彇鍊艰寖鍥村垽鏂綋鍓嶆祦姘村彿鏄惁鍦ㄨ寖鍥村唴
-                            IsMatch &= item.SERIAL_MIN <= item.CodeValue.ToInt32() && item.CodeValue.ToInt32() <= item.SERIAL_MAX;
-                            //褰撳墠娴佹按鍙锋槸鍚︽寜璁剧疆闂撮殧鍥哄畾鏁板��
-                            IsMatch &= (item.CodeValue.ToInt32() - item.SERIAL_MIN) % item.SERIAL_INTERVAL == 0;
-                            //鍒ゆ柇褰撳墠娴佹按鍙锋槸鍚﹁烦杩囦互璁剧疆鍙风爜缁撳熬鐨勬祦姘村彿
-                            if (!item.SERIAL_IGNORE.IsNullOrEmpty())
-                            {
-                                var ignoreList = item.SERIAL_IGNORE.Split(',');
-                                foreach (var num in ignoreList)
-                                {
-                                    IsMatch &= !item.CodeValue.EndsWith(num);
-                                }
-                            }
-                        }
-                    }
-                    //鍒ゆ柇鍏宠仈瀛楁鏄惁绗﹀悎瑙勫垯
-                    if (IsMatch)
-                    {
-                        foreach (var item in Rule.Details.Where(q => q.DATA_TYPE == BAS_CODE_DTL.DATA_TYPEs.DbCheck.GetValue()))
-                        {
-                            IsMatch &= CheckDB(item.CodeValue, item);
-                        }
-                    }
-                }
-            }
-            catch (Exception ex)
-            {
-                IsMatch = false;
-                IsException = true;
-                MatchException = ex;
-            }
-            finally
-            {
-                isFinish = true;
-            }
-            //var sleep = new Random().Next(1, 5);
-            //Thread.Sleep(sleep * 1000);
-            //Debug.WriteLine($"{Rule.RULE_CODE} verify end, verify {(isFinish ? "Finish" : "not finish")}, match {(IsMatch ? "success" : "failed")}, sleep {sleep} seconds");
-
-            return this;
-        }
-    }
-
-    /// <summary>
-    /// 鏉$爜楠岃瘉绫�
-    /// </summary>
-    public class CodeVerifier
-    {
-        /// <summary>
-        /// 鏉$爜楠岃瘉绫�
-        /// </summary>
-        /// <param name="code"></param>
-        /// <param name="predicate"></param>
-        public CodeVerifier(string code, Func<BAS_CODE_RULE, bool> predicate = null)
-        {
-            Code = code;
-            Predicate = predicate;
-        }
-
-        public string Code { get; set; }
-        public Func<BAS_CODE_RULE, bool> Predicate { get; set; }
-        public Expression<Func<BAS_CODE_RULE, bool>> Expression { get; set; }
-        public Exception VerifyException { get; set; }
-        private List<RuleVerifier> _Verifiers = new();
-        public List<RuleVerifier> Verifiers => _Verifiers.IsNullOrEmpty() ? Cache.CodeRule.Rules.WhereIF(!Predicate.IsNullOrEmpty(), Predicate).Select(q => new RuleVerifier(q)).ToList() : _Verifiers;
-        /// <summary>
-        /// 鏄惁瀹屾垚楠岃瘉
-        /// </summary>
-        public bool isFinish => !Verifiers.Any(q => !q.isFinish);
-        /// <summary>
-        /// 鏄惁鍖归厤鎴愬姛
-        /// </summary>
-        public bool IsMatch => Verifiers.Any(q => q.IsMatch);
-        /// <summary>
-        /// 鑰楄垂鏃堕棿
-        /// </summary>
-        public double ElapsedTime { get; set; }
-        /// <summary>
-        /// 鍖归厤鎴愬姛鐨勮鍒�
-        /// </summary>
-        public List<RuleVerifier> Matches => Verifiers.Where(q => q.IsMatch).OrderBy(q => q.Rule.PRIORITY).ToList();
-
-        /// <summary>
-        /// 楠岃瘉鎵�鏈夎鍒�
-        /// </summary>
-        public void DoVerify()
-        {
-            var begin = DateTime.Now;
-            ElapsedTime = 0;
-            //Debug.WriteLine($"{Code} verify begin at {begin:T}");
-            _Verifiers = Cache.CodeRule.Rules.WhereIF(!Predicate.IsNullOrEmpty(), Predicate).Select(q => new RuleVerifier(q)).ToList();
-            foreach (var item in Verifiers)
-            {
-                Work.DoAsync(() => { item.Verify(Code); });
-                //item.Verify(Code);
-            }
-            while (!isFinish) ;
-            ElapsedTime = (DateTime.Now - begin).TotalSeconds;
-            //Debug.WriteLine($"{Code} verify end, elapsed total {ElapsedTime} seconds");
-        }
-    }
-}
diff --git a/Tiger.Business/DbCache/Cache.cs b/Tiger.Business/DbCache/Cache.cs
deleted file mode 100644
index c85e2c8..0000000
--- a/Tiger.Business/DbCache/Cache.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-锘縰sing Tiger.Model;
-using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.Linq.Expressions;
-using System.Text;
-using System.Threading.Tasks;
-using Rhea.Common;
-using System.Net;
-using System.Linq;
-using Newtonsoft.Json;
-using Tiger.Business.DbCache;
-using Tiger.IBusiness;
-
-namespace Tiger.Business
-{
-    public partial class Cache
-    {
-        /// <summary>
-        /// 鑾峰彇鏉$爜瑙勫垯缂撳瓨
-        /// </summary>
-        public static ICodeRuleCache CodeRule => DI.Resolve<ICodeRuleCache>();
-        /// <summary>
-        /// 鑾峰彇绯荤粺鍙傛暟缂撳瓨
-        /// </summary>
-        public static ISysParamCache SysParam => DI.Resolve<ISysParamCache>();
-    }//endClass
-}
diff --git a/Tiger.Business/DbCache/CodeRuleCache.cs b/Tiger.Business/DbCache/CodeRuleCache.cs
deleted file mode 100644
index b0a3693..0000000
--- a/Tiger.Business/DbCache/CodeRuleCache.cs
+++ /dev/null
@@ -1,530 +0,0 @@
-锘縰sing Newtonsoft.Json.Linq;
-using Rhea.Common;
-using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.Data;
-using System.Data.Entity;
-using System.Linq;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-using Tiger.IBusiness;
-using Tiger.Model;
-
-namespace Tiger.Business.DbCache
-{
-    /// <summary>
-    /// 鏉$爜瑙勫垯鏁版嵁搴撴暟鎹紦瀛�
-    /// </summary>
-    public class CodeRuleCache : ICodeRuleCache
-    {
-        #region Variables
-        private WhileThread AutoUpdateThread;
-        private DateTime LastUpdateTime = DateTime.MinValue;
-        #endregion
-
-        #region Propertys
-        public string Id { get; set; } = Guid.NewGuid().ToString("N");
-        public string Tag { get; set; } = "CodeRuleCache";
-        public string Name { get; set; } = "CodeRuleCache";
-        public bool IsRunning { get; set; }
-        private List<BAS_CODE_RULE> _Rules = new();
-        public List<BAS_CODE_RULE> Rules { get { Update(); return _Rules; } set => _Rules = value; }
-        public BAS_CODE_RULE this[string ruleCode] { get { Update(); return _Rules.FirstOrDefault(q => q.RULE_CODE == ruleCode); } }
-        #endregion
-
-        #region Functions
-        /// <summary>
-        /// 鍚姩鑷姩鏇存柊缂撳瓨
-        /// </summary>
-        public void Start()
-        {
-            try
-            {
-                AutoUpdateThread = new(AutoUpdate);
-                AutoUpdateThread.Start();
-                Logger.Default.Info("Start CodeRule Cache Auto Update Thread");
-            }
-            catch (System.Exception ex)
-            {
-                Logger.Default.Fatal(ex, "Start CodeRule Cache Auto Update Thread Exception");
-            }
-        }
-
-        /// <summary>
-        /// 鍏抽棴鑷姩鏇存柊缂撳瓨
-        /// </summary>
-        public void Stop()
-        {
-            try
-            {
-                AutoUpdateThread?.Stop();
-                Logger.Console.Info("Stop CodeRule Cache Auto Update Thread");
-            }
-            catch (System.Exception ex)
-            {
-                Logger.Console.Fatal(ex, "Stop CodeRule Cache Auto Update Thread Exception");
-            }
-        }
-
-        /// <summary>
-        /// 鏇存柊鏁版嵁缂撳瓨
-        /// </summary>
-        public void Update()
-        {
-            var lastUpdate = Biz.Db.Queryable<BAS_CODE_DTL>().Max(q => q.UPDATE_TIME);
-            if (LastUpdateTime < lastUpdate)
-            {
-                _Rules = Biz.Db.Queryable<BAS_CODE_RULE>().IncludesAllFirstLayer().ToList();
-                LastUpdateTime = lastUpdate;
-                Logger.Console.Info($"Get CodeRule successful, total {Rules.Count}, last update time is {LastUpdateTime:yyyy-MM-dd HH:mm:ss}");
-            }
-        }
-
-        /// <summary>
-        /// 鑷姩鏇存柊
-        /// </summary>
-        private void AutoUpdate()
-        {
-            try
-            {
-                Update();
-            }
-            catch (System.Exception ex)
-            {
-                Logger.Console.Fatal(ex, "CodeRule Cache Auto Update Exception");
-                LastUpdateTime = DateTime.MinValue;
-            }
-
-            //浼戠湢30鍒嗛挓
-            Thread.Sleep(30 * 60 * 1000);//
-        }
-
-        /// <summary>
-        /// 浣跨敤鎸囧畾瑙勫垯楠岃瘉浼犲叆缂栫爜
-        /// </summary>
-        /// <param name="code">闇�瑕侀獙璇佺殑鏉$爜</param>
-        /// <param name="rule">鎸囧畾鐢ㄤ簬楠岃瘉鐨勬潯鐮佽鍒�</param>
-        /// <returns>Result.Data is RuleVerifier</returns>
-        public Result Verify(string code, BAS_CODE_RULE rule)
-        {
-            Result result = new(Result.Flags.Success);
-            try
-            {
-                var rv = new RuleVerifier(rule);
-                rv.Verify(code);
-                result.Flag = rv.IsMatch ? Result.Flags.Success : Result.Flags.Failed;
-                result.Data = rv;
-            }
-            catch (System.Exception ex)
-            {
-                result.CatchExceptionWithLog(ex, Biz.L("BAS.CodeRule.VerifyException", code));
-            }
-            return result;
-        }
-
-        /// <summary>
-        /// 浣跨敤绗﹀悎浼犲叆鏉′欢鐨勮鍒欓獙璇佷紶鍏ョ紪鐮�
-        /// </summary>
-        /// <param name="code">闇�瑕侀獙璇佺殑鏉$爜</param>
-        /// <param name="predicate">鐢ㄤ簬楠岃瘉鏉$爜瑙勫垯鐨勮繃婊ゆ潯浠�</param>
-        /// <returns>Result.Data is List&lt;RuleVerifier></returns>
-        public Result Verify(string code, Func<BAS_CODE_RULE, bool> predicate = null)
-        {
-            Result result = new(Result.Flags.Success);
-            try
-            {
-                var cv = new CodeVerifier(code, predicate);
-                cv.DoVerify();
-                result.Flag = cv.IsMatch ? Result.Flags.Success : Result.Flags.Failed;
-                result.Data = cv.Matches;
-            }
-            catch (System.Exception ex)
-            {
-                result.CatchExceptionWithLog(ex, Biz.L("BAS.CodeRule.VerifyException", code));
-            }
-            return result;
-        }
-
-        /// <summary>
-        /// 鏉$爜娴佹按鐮佸彇鍙�
-        /// </summary>
-        /// <param name="key"></param>
-        /// <param name="rule"></param>
-        /// <param name="hisID">鍙栧彿鐨勬祦姘村彿鐢熸垚鍘嗗彶ID</param>
-        /// <param name="isTry">鏄惁灏濊瘯鍙栧彿锛屼笉淇濆瓨鍒版暟鎹簱</param>
-        /// <returns></returns>
-        private int FetchSerialNo(string key, BAS_CODE_DTL rule, string hisID, bool isTry = false)
-        {
-            var db = Biz.Db;
-            var failCount = 0;
-            while (true)
-            {
-                try
-                {
-                    var next = 0;
-                    db.BeginTran();
-                    //鏌ヨ鏉′欢璁板綍鍚庡姞琛岀瓑寰呴攣
-                    var serialGen = db.Queryable<BAS_CODE_GEN>().TranLock(DbLockType.Wait).Where(q => q.RULE_DTL_ID == rule.ID && q.SERIAL_KEY == key).First();
-                    if (serialGen.IsNullOrEmpty())
-                    {
-                        serialGen = new()
-                        {
-                            RULE_ID = rule.RULE_ID,
-                            RULE_DTL_ID = rule.ID,
-                            SERIAL_KEY = key,
-                            SERIAL_DATE = DateTime.Now,
-                            SERIAL_VALUE = rule.SERIAL_MIN,
-                            LAST_GEN_DATE = DateTime.Now,
-                            LAST_HIS_ID = hisID,
-                        };
-                        if (!isTry)
-                        {
-                            db.Insertable(serialGen).ExecuteCommand();
-                        }
-                        next = serialGen.SERIAL_VALUE;
-                        //Console.WriteLine($"{hisID}: {DateTime.Now:HH:mm:ss.fff} > 绗竴娆″彇鍙锋垚鍔焄{next}]锛屼紤鎭�5000ms");
-                        //Thread.Sleep(5000);
-                    }
-                    else
-                    {
-                        next = serialGen.SERIAL_VALUE;
-                        //璺宠繃浠ヨ缃彿鐮佺粨灏剧殑娴佹按鍙�
-                        var ignoreList = (rule.SERIAL_IGNORE ?? "").Split(',', StringSplitOptions.RemoveEmptyEntries);
-                        var isIgnore = false;
-                        do
-                        {
-                            next += rule.SERIAL_INTERVAL;
-                            foreach (var num in ignoreList)
-                            {
-                                isIgnore |= next.ToString().EndsWith(num);
-                            }
-                        } while (isIgnore && !ignoreList.IsNullOrEmpty());
-                        //娴佹按鍙烽噸缃�
-                        switch (rule.SERIAL_RESET.GetEnum<BAS_CODE_DTL.SERIAL_RESETs>())
-                        {
-                            case BAS_CODE_DTL.SERIAL_RESETs.Default:
-                                if (next > rule.SERIAL_MAX)
-                                {
-                                    next = rule.SERIAL_MIN;
-                                    serialGen.SERIAL_DATE = DateTime.Now;
-                                }
-                                break;
-                            case BAS_CODE_DTL.SERIAL_RESETs.Year:
-                                if (serialGen.SERIAL_DATE.Year != DateTime.Now.Year)
-                                {
-                                    next = rule.SERIAL_MIN;
-                                    serialGen.SERIAL_DATE = DateTime.Now;
-                                }
-                                break;
-                            case BAS_CODE_DTL.SERIAL_RESETs.Month:
-                                if (serialGen.SERIAL_DATE.Month != DateTime.Now.Month)
-                                {
-                                    next = rule.SERIAL_MIN;
-                                    serialGen.SERIAL_DATE = DateTime.Now;
-                                }
-                                break;
-                            case BAS_CODE_DTL.SERIAL_RESETs.Week:
-                                if ((serialGen.SERIAL_DATE.Date.DayOfWeek.GetValue() > 0 && DateTime.Now.Date.DayOfWeek.GetValue() == 0)
-                                    || (DateTime.Now.Date - serialGen.SERIAL_DATE.Date).TotalDays >= 7)
-                                {
-                                    next = rule.SERIAL_MIN;
-                                    serialGen.SERIAL_DATE = DateTime.Now;
-                                }
-                                break;
-                            case BAS_CODE_DTL.SERIAL_RESETs.Day:
-                                if (serialGen.SERIAL_DATE.Date != DateTime.Now.Date)
-                                {
-                                    next = rule.SERIAL_MIN;
-                                    serialGen.SERIAL_DATE = DateTime.Now;
-                                }
-                                break;
-                            case BAS_CODE_DTL.SERIAL_RESETs.NotReset:
-                                break;
-                        }
-
-                        //娴佹按鍙峰彇鍙�
-                        if (next <= rule.SERIAL_MAX)
-                        {
-                            serialGen.SERIAL_VALUE = next;
-                            serialGen.LAST_GEN_DATE = DateTime.Now;
-                            serialGen.LAST_HIS_ID = hisID;
-                        }
-                        else
-                        {
-                            throw new Exception($"The serial number has reached its max value[{rule.SERIAL_MAX}], waiting for reset");
-                        }
-
-                        if (!isTry)
-                        {
-                            db.Updateable(serialGen, "system").UpdateColumns(q => new { q.SERIAL_VALUE, q.SERIAL_DATE, q.LAST_GEN_DATE, q.LAST_HIS_ID }).ExecuteCommand();
-                        }
-                        //Debug.WriteLine($"{hisID}: {DateTime.Now:HH:mm:ss.fff} > 缁х画鍙栧彿鎴愬姛[{next}]锛屼紤鎭�1000ms");
-                        //Thread.Sleep(1000);
-                    }
-                    db.CommitTran();
-                    return next;
-                }
-                catch (Exception ex)
-                {
-                    db.RollbackTran();
-                    //Debug.WriteLine($"{hisID}: {DateTime.Now:HH:mm:ss.fff} > 绗瑊failCount + 1}娆″皾璇曞彇鍙峰紓甯革細{ex.Message}");
-                    if (++failCount >= 10)
-                    {
-                        throw;
-                    }
-                    Thread.Sleep(500);
-                }
-            }
-        }
-
-        /// <summary>
-        /// 鐢熸垚鏉$爜
-        /// </summary>
-        /// <param name="ruleCode"></param>
-        /// <param name="args"></param>
-        /// <returns></returns>
-        public Result Generate(string ruleCode, params object?[] args)
-        {
-            Result result = new(Result.Flags.Success);
-            try
-            {
-                var rule = Biz.Db.Queryable<BAS_CODE_RULE>().Where(q => q.RULE_CODE == ruleCode).IncludesAllFirstLayer().First();
-                if (rule.IsNullOrEmpty())
-                {
-                    result.Flag = Result.Flags.Failed;
-                    result.LocaleMsg = new("BAS.CodeRule.GenerateFailed.NotFound", ruleCode, string.Join(", ", args));
-                }
-                else
-                {
-                    var argsIndex = 0;
-                    var his = new BAS_CODE_HIS();
-                    foreach (var item in rule.Details.OrderBy(q => q.RULE_SEQ))
-                    {
-                        switch (item.DATA_TYPE.GetEnum<BAS_CODE_DTL.DATA_TYPEs>())
-                        {
-                            case BAS_CODE_DTL.DATA_TYPEs.Character:
-                            case BAS_CODE_DTL.DATA_TYPEs.Numeric:
-                            case BAS_CODE_DTL.DATA_TYPEs.FixedCode:
-                            case BAS_CODE_DTL.DATA_TYPEs.DbCheck:
-                            case BAS_CODE_DTL.DATA_TYPEs.NoCheck:
-                                if (argsIndex >= args.Length)
-                                {
-                                    result.Flag = Result.Flags.Failed;
-                                    result.LocaleMsg = new("BAS.CodeRule.GenerateFailed.NotEnoughArgs", ruleCode, string.Join(", ", args), item.RULE_SEQ);
-                                    return result;
-                                }
-                                var value = args[argsIndex++].ToString();//.Substring(0, item.CHECK_LENGTH);
-                                if (item.Regex.IsMatch(value) && RuleVerifier.CheckDB(value, item))
-                                {
-                                    for (int i = 0; i < item.REPEAT_TIMES; i++)
-                                    {
-                                        item.CodeValue += value;
-                                    }
-                                }
-                                else
-                                {
-                                    result.Flag = Result.Flags.Failed;
-                                    result.LocaleMsg = new("BAS.CodeRule.GenerateFailed.NotPassValidation", ruleCode, string.Join(", ", args), value, item.RULE_SEQ);
-                                    return result;
-                                }
-                                break;
-                            case BAS_CODE_DTL.DATA_TYPEs.DateCode:
-                            case BAS_CODE_DTL.DATA_TYPEs.TimeCode:
-                                value = "";
-                                switch (item.DATA_CASE)
-                                {
-                                    case "yyyy":
-                                    case "yy":
-                                    case "dd":
-                                    case "ss":
-                                    case "fff":
-                                        value = DateTime.Now.ToString(item.DATA_CASE);
-                                        break;
-                                    case "q":
-                                        value = Math.Ceiling(DateTime.Now.Month * 1.0 / 3).ToString();
-                                        break;
-                                    case "hh":
-                                    case "mm":
-                                        value = DateTime.Now.ToString(item.DATA_CASE.ToUpper());
-                                        break;
-                                    case "m":
-                                        var month = DateTime.Now.Month;
-                                        value = month == 10 ? "A" : (month == 11 ? "B" : (month == 12 ? "C" : DateTime.Now.Month.ToString()));
-                                        break;
-                                    case "ww":
-                                        value = Math.Ceiling((DateTime.Now.DayOfYear + new DateTime(DateTime.Now.Year, 1, 1).DayOfWeek.ToInt32()) * 1.0 / 7).ToString("00");
-                                        break;
-                                    case "dy":
-                                        value = DateTime.Now.DayOfWeek.ToInt32().ToString();
-                                        break;
-                                    case "mi":
-                                        value = DateTime.Now.ToString("mm");
-                                        break;
-                                }
-                                for (int i = 0; i < item.REPEAT_TIMES; i++)
-                                {
-                                    item.CodeValue += value;
-                                }
-                                break;
-                        }
-                    }
-                    //娴佹按鍙风敓鎴�
-                    var serialRules = rule.Details.Where(q => q.DATA_TYPE == BAS_CODE_DTL.DATA_TYPEs.SerialCode.GetValue()).OrderBy(q => q.RULE_SEQ);
-                    var serialKey = string.Join("|", rule.Details.Where(q => q.DATA_TYPE == BAS_CODE_DTL.DATA_TYPEs.DbCheck.GetValue()).Select(q => q.CodeValue));
-                    foreach (var item in serialRules)
-                    {
-                        var serialGen = FetchSerialNo(serialKey, item, his.ID);
-                        var value = serialGen.ToString().PadLeft(item.CHECK_LENGTH, '0');
-                        for (int i = 0; i < item.REPEAT_TIMES; i++)
-                        {
-                            item.CodeValue += value;
-                        }
-                    }
-
-                    his.RULE_ID = rule.ID;
-                    his.GEN_CODE = string.Concat(rule.Details.OrderBy(q => q.RULE_SEQ).Select(q => q.CodeValue));
-                    his.GEN_DATE = DateTime.Now;
-                    try
-                    {
-                    	Biz.Db.Insertable(his).ExecuteCommand();
-                    }
-                    catch (System.Exception ex)
-                    {
-                        throw new DataException(his.GEN_CODE, ex);
-                    }
-                    result.Data = his.GEN_CODE;
-                }
-            }
-            catch (DataException ex)
-            {
-                result.CatchExceptionWithLog(ex.InnerException, Biz.L("BAS.CodeRule.GenerateSnHisException", ruleCode, ex.Message));
-            }
-            catch (System.Exception ex)
-            {
-                result.CatchExceptionWithLog(ex, Biz.L("BAS.CodeRule.GenerateException", ruleCode, string.Join(", ", args)));
-            }
-            return result;
-        }
-
-        /// <summary>
-        /// 灏濊瘯鐢熸垚鏉$爜锛屼笉淇濆瓨鍒版暟鎹簱
-        /// </summary>
-        /// <param name="ruleCode"></param>
-        /// <param name="args"></param>
-        /// <returns></returns>
-        public Result TryGenerate(string ruleCode, params object?[] args)
-        {
-            Result result = new(Result.Flags.Success);
-            try
-            {
-                var rule = Biz.Db.Queryable<BAS_CODE_RULE>().Where(q => q.RULE_CODE == ruleCode).IncludesAllFirstLayer().First();
-                if (rule.IsNullOrEmpty())
-                {
-                    result.Flag = Result.Flags.Failed;
-                    result.LocaleMsg = new("BAS.CodeRule.GenerateFailed.NotFound", ruleCode, string.Join(", ", args));
-                }
-                else
-                {
-                    var argsIndex = 0;
-                    var his = new BAS_CODE_HIS();
-                    foreach (var item in rule.Details.OrderBy(q => q.RULE_SEQ))
-                    {
-                        switch (item.DATA_TYPE.GetEnum<BAS_CODE_DTL.DATA_TYPEs>())
-                        {
-                            case BAS_CODE_DTL.DATA_TYPEs.Character:
-                            case BAS_CODE_DTL.DATA_TYPEs.Numeric:
-                            case BAS_CODE_DTL.DATA_TYPEs.FixedCode:
-                            case BAS_CODE_DTL.DATA_TYPEs.DbCheck:
-                            case BAS_CODE_DTL.DATA_TYPEs.NoCheck:
-                                if (argsIndex >= args.Length)
-                                {
-                                    result.Flag = Result.Flags.Failed;
-                                    result.LocaleMsg = new("BAS.CodeRule.GenerateFailed.NotEnoughArgs", ruleCode, string.Join(", ", args), item.RULE_SEQ);
-                                    return result;
-                                }
-                                var value = args[argsIndex++].ToString();//.Substring(0, item.CHECK_LENGTH);
-                                if (item.Regex.IsMatch(value) && RuleVerifier.CheckDB(value, item))
-                                {
-                                    for (int i = 0; i < item.REPEAT_TIMES; i++)
-                                    {
-                                        item.CodeValue += value;
-                                    }
-                                }
-                                else
-                                {
-                                    result.Flag = Result.Flags.Failed;
-                                    result.LocaleMsg = new("BAS.CodeRule.GenerateFailed.NotPassValidation", ruleCode, string.Join(", ", args), value, item.RULE_SEQ);
-                                    return result;
-                                }
-                                break;
-                            case BAS_CODE_DTL.DATA_TYPEs.DateCode:
-                            case BAS_CODE_DTL.DATA_TYPEs.TimeCode:
-                                value = "";
-                                switch (item.DATA_CASE)
-                                {
-                                    case "yyyy":
-                                    case "yy":
-                                    case "dd":
-                                    case "ss":
-                                    case "fff":
-                                        value = DateTime.Now.ToString(item.DATA_CASE);
-                                        break;
-                                    case "q":
-                                        value = Math.Ceiling(DateTime.Now.Month * 1.0 / 3).ToString();
-                                        break;
-                                    case "hh":
-                                    case "mm":
-                                        value = DateTime.Now.ToString(item.DATA_CASE.ToUpper());
-                                        break;
-                                    case "m":
-                                        var month = DateTime.Now.Month;
-                                        value = month == 10 ? "A" : (month == 11 ? "B" : (month == 12 ? "C" : DateTime.Now.Month.ToString()));
-                                        break;
-                                    case "ww":
-                                        value = Math.Ceiling((DateTime.Now.DayOfYear + new DateTime(DateTime.Now.Year, 1, 1).DayOfWeek.ToInt32()) * 1.0 / 7).ToString("00");
-                                        break;
-                                    case "dy":
-                                        value = DateTime.Now.DayOfWeek.ToInt32().ToString();
-                                        break;
-                                    case "mi":
-                                        value = DateTime.Now.ToString("mm");
-                                        break;
-                                }
-                                for (int i = 0; i < item.REPEAT_TIMES; i++)
-                                {
-                                    item.CodeValue += value;
-                                }
-                                break;
-                        }
-                    }
-                    //娴佹按鍙风敓鎴�
-                    var serialRules = rule.Details.Where(q => q.DATA_TYPE == BAS_CODE_DTL.DATA_TYPEs.SerialCode.GetValue()).OrderBy(q => q.RULE_SEQ);
-                    var serialKey = string.Join("|", rule.Details.Where(q => q.DATA_TYPE == BAS_CODE_DTL.DATA_TYPEs.DbCheck.GetValue()).Select(q => q.CodeValue));
-                    foreach (var item in serialRules)
-                    {
-                        var serialGen = FetchSerialNo(serialKey, item, his.ID, true);
-                        var value = serialGen.ToString().PadLeft(item.CHECK_LENGTH, '0');
-                        for (int i = 0; i < item.REPEAT_TIMES; i++)
-                        {
-                            item.CodeValue += value;
-                        }
-                    }
-
-                    his.RULE_ID = rule.ID;
-                    his.GEN_CODE = string.Concat(rule.Details.OrderBy(q => q.RULE_SEQ).Select(q => q.CodeValue));
-                    his.GEN_DATE = DateTime.Now;
-                    result.Data = his.GEN_CODE;
-                }
-            }
-            catch (System.Exception ex)
-            {
-                result.CatchExceptionWithLog(ex, Biz.L("BAS.CodeRule.GenerateException", ruleCode, string.Join(", ", args)));
-            }
-            return result;
-        }
-        #endregion
-    }
-}
\ No newline at end of file
diff --git a/Tiger.Business/DbCache/SysParamCache.cs b/Tiger.Business/DbCache/SysParamCache.cs
deleted file mode 100644
index a740aa1..0000000
--- a/Tiger.Business/DbCache/SysParamCache.cs
+++ /dev/null
@@ -1,112 +0,0 @@
-锘縰sing Rhea.Common;
-using System;
-using System.Collections.Generic;
-using System.Data.Entity;
-using System.Linq;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-using Tiger.IBusiness;
-using Tiger.Model;
-
-namespace Tiger.Business.DbCache
-{
-    /// <summary>
-    /// 绯荤粺鍙傛暟鏁版嵁搴撴暟鎹紦瀛�
-    /// </summary>
-    public class SysParamCache : ISysParamCache
-    {
-        #region Variables
-        private WhileThread AutoUpdateThread;
-        private DateTime LastUpdateTime = DateTime.MinValue;
-        #endregion
-
-        #region Propertys
-        public string Id { get; set; } = Guid.NewGuid().ToString("N");
-        public string Tag { get; set; } = "SysParamCache";
-        public string Name { get; set; } = "SysParamCache";
-        public bool IsRunning { get; set; }
-        private List<SYS_PARAMGROUP> _groups = new();
-        public List<SYS_PARAMGROUP> Groups { get { Update(); return _groups; } set => _groups = value; }
-        private List<SYS_PARAM> _params = new();
-        public List<SYS_PARAM> Params { get { Update(); return _params; } set => _params = value; }
-        public SYS_PARAM this[string code, string group = null] { get { Update(); return _params.FirstOrDefault(q => q.PARAM_CODE == code && (group.IsNullOrEmpty() || q.PRMG_CODE == group)); } }
-        #endregion
-
-        #region Functions
-        /// <summary>
-        /// 鍚姩鑷姩鏇存柊缂撳瓨
-        /// </summary>
-        public void Start()
-        {
-            try
-            {
-                AutoUpdateThread = new(AutoUpdate);
-                AutoUpdateThread.Start();
-                Logger.Default.Info("Start SysParam Cache Auto Update Thread");
-            }
-            catch (System.Exception ex)
-            {
-                Logger.Default.Fatal(ex, "Start SysParam Cache Auto Update Thread Exception");
-            }
-        }
-
-        /// <summary>
-        /// 鍏抽棴鑷姩鏇存柊缂撳瓨
-        /// </summary>
-        public void Stop()
-        {
-            try
-            {
-                AutoUpdateThread?.Stop();
-                Logger.Console.Info("Stop SysParam Cache Auto Update Thread");
-            }
-            catch (System.Exception ex)
-            {
-                Logger.Console.Fatal(ex, "Stop SysParam Cache Auto Update Thread Exception");
-            }
-        }
-
-        /// <summary>
-        /// 鏇存柊鏁版嵁缂撳瓨
-        /// </summary>
-        public void Update()
-        {
-            var lastUpdate = Biz.Db.Queryable<SYS_PARAM>().Max(q => q.UPDATE_TIME);
-            if (LastUpdateTime < lastUpdate)
-            {
-                _groups = Biz.Db.Queryable<SYS_PARAMGROUP>().IncludesAllFirstLayer().ToList();
-                var paramList = new List<SYS_PARAM>();
-                foreach (var group in _groups)
-                {
-                    paramList.AddRange(group.Params);
-                }
-                _params = paramList;
-                LastUpdateTime = paramList.Max(q => q.UPDATE_TIME);
-                Logger.Console.Info($"Get SysParam successful, total {Params.Count} params in {Groups.Count} groups, last update time is {LastUpdateTime:yyyy-MM-dd HH:mm:ss}");
-            }
-        }
-
-        /// <summary>
-        /// 鑷姩鏇存柊
-        /// </summary>
-        private void AutoUpdate()
-        {
-            try
-            {
-                Update();
-            }
-            catch (System.Exception ex)
-            {
-                Logger.Console.Fatal(ex, "SysParam Cache Auto Update Exception");
-                LastUpdateTime = DateTime.MinValue;
-            }
-
-            //浼戠湢30鍒嗛挓
-            Thread.Sleep(30 * 60 * 1000);//
-        }
-
-
-        #endregion
-    }
-}
diff --git a/Tiger.Business/DbContext.cs b/Tiger.Business/DbContext.cs
deleted file mode 100644
index f178332..0000000
--- a/Tiger.Business/DbContext.cs
+++ /dev/null
@@ -1,275 +0,0 @@
-锘縰sing Microsoft.Extensions.Configuration;
-using Rhea.Common;
-using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
-using System.Text.RegularExpressions;
-
-namespace Tiger.Business
-{
-    /// <summary>
-    /// 鏁版嵁婧�
-    /// </summary>
-    public class DataSource
-    {
-        /// <summary>
-        /// 鏁版嵁婧�
-        /// </summary>
-        /// <param name="config"></param>
-        private DataSource(IConfiguration config)
-        {
-            var dbs = config.AsEnumerable().Where(q => q.Key.StartsWith("Databases:") && q.Value.IsNullOrEmpty());
-            foreach (var item in dbs)
-            {
-                try
-                {
-                    Add(new Database()
-                    {
-                        Name = item.Key.Replace("Databases:", ""),
-                        Type = Enum.Parse<DbType>(config[$"{item.Key}:DbType"]),
-                        ConnectionString = config[$"{item.Key}:ConnectionString"],
-                    });
-                }
-                catch (System.Exception ex)
-                {
-                    Logger.Console.Fatal(ex, $"Add Database[{item.Key.Replace("Databases:", "")}] to DataSource Exception");
-                }
-            }
-        }
-        #region 鍗曚緥
-        private static DataSource _DataSource = null;
-        /// <summary>
-        /// 鍒涘缓鏁版嵁婧愬崟渚�
-        /// </summary>
-        /// <param name="_configuration"></param>
-        /// <returns></returns>
-        public static DataSource CreateInstance(IConfiguration _configuration)
-        {
-            if (_DataSource == null)
-            {
-                _DataSource = new DataSource(_configuration);
-            }
-            return _DataSource;
-        }
-        #endregion
-        /// <summary>
-        /// 鏁版嵁搴撳垪琛�
-        /// </summary>
-        public List<Database> Databases = new List<Database>();
-        /// <summary>
-        /// 鎸夋暟鎹簱鍚嶇О鑾峰彇鏁版嵁搴撳疄渚�
-        /// </summary>
-        /// <param name="name"></param>
-        /// <returns></returns>
-        public Database this[string name] => Databases.FirstOrDefault(q => q.Name == name);
-        /// <summary>
-        /// 鎸塈ndex鑾峰彇鏁版嵁搴撳疄渚�
-        /// </summary>
-        /// <param name="index"></param>
-        /// <returns></returns>
-        public Database this[int index] => (Databases.Count > index && index >= 0) ? Databases[index] : null;
-        /// <summary>
-        /// 鏄惁瀛樺湪浼犲叆鍚嶇О鐨勬暟鎹簱瀹炰緥
-        /// </summary>
-        /// <param name="name"></param>
-        /// <returns></returns>
-        public bool Exists(string name)
-        {
-            return Databases.Any(q => q.Name == name);
-        }
-        /// <summary>
-        /// 娣诲姞鏁版嵁搴撳埌鏁版嵁婧愶紝濡傛灉宸插瓨鍦ㄧ浉鍚屽悕绉扮殑鏁版嵁搴撳垯鏇挎崲
-        /// </summary>
-        /// <param name="database"></param>
-        /// <returns></returns>
-        public DataSource Add(Database database)
-        {
-            Databases.RemoveAll(q => q.Name == database.Name);
-            Databases.Add(database);
-            return this;
-        }
-        /// <summary>
-        /// 鎸夋暟鎹簱鍚嶇О浠庢暟鎹簮绉婚櫎鏁版嵁搴�
-        /// </summary>
-        /// <param name="name"></param>
-        /// <returns></returns>
-        public DataSource Remove(string name)
-        {
-            Databases.RemoveAll(q => q.Name == name);
-            return this;
-        }
-    }
-
-    /// <summary>
-    /// 鏁版嵁搴�
-    /// </summary>
-    public class Database
-    {
-        /// <summary>
-        /// 鏁版嵁鍚嶇О
-        /// </summary>
-        public string Name { get; set; }
-        /// <summary>
-        /// 鏁版嵁搴撶被鍨�
-        /// </summary>
-        public DbType Type { get; set; }
-        /// <summary>
-        /// 杩炴帴瀛楃涓�
-        /// </summary>
-        public string ConnectionString { get; set; }
-        /// <summary>
-        /// 鏁版嵁搴撳鎴风
-        /// </summary>
-        public DbClient Client { get => CreateContext().Db; }
-        /// <summary>
-        /// 鏁版嵁搴撳熀纭�鏂规硶
-        /// </summary>
-        public DbBase Base { get => new DbBase(Client); }
-        /// <summary>
-        /// 鍒涘缓鏁版嵁搴撲笂涓嬫枃
-        /// </summary>
-        /// <returns></returns>
-        public DbContext CreateContext()
-        {
-            DbContext context = null;
-            switch (Type)
-            {
-                case DbType.Sqlite:
-                    context = new DbContext(ConnectionString.Replace("..\\", AppDomain.CurrentDomain.BaseDirectory), DbType.Sqlite);
-                    break;
-                default:
-                    context = new DbContext(ConnectionString, Type);
-                    break;
-            }
-            return context;
-        }
-    }
-
-    /// <summary>
-    /// 鏁版嵁搴撲笂涓嬫枃
-    /// </summary>
-    public class DbContext
-    {
-        /// <summary>
-        /// 鏁版嵁搴撳鎴风
-        /// </summary>
-        public DbClient Db;//鐢ㄦ潵澶勭悊浜嬪姟澶氳〃鏌ヨ鍜屽鏉傜殑鎿嶄綔
-
-        /// <summary>
-        /// 鏋勯�犲嚱鏁�
-        /// </summary>
-        /// <param name="connStr">鏁版嵁搴撹繛鎺ュ瓧绗︿覆</param>
-        /// <param name="dbType">鏁版嵁搴撶被鍨�</param>
-        public DbContext(string connStr, DbType dbType)
-        {
-            InitDataBase(connStr, dbType);
-        }
-
-        /// <summary>
-        /// 鍒濆鍖栨暟鎹簱杩炴帴
-        /// </summary>
-        /// <param name="connStr">鏁版嵁搴撹繛鎺ュ瓧绗︿覆</param>
-        /// <param name="dbType">鏁版嵁搴撶被鍨�</param>
-        private void InitDataBase(string connStr, DbType dbType)
-        {
-            Db = new DbClient(new ConnectionConfig()
-            {
-                ConnectionString = connStr,
-                DbType = dbType,
-                IsAutoCloseConnection = true,
-                //MoreSettings = new ConnMoreSettings() { DbMinDate = DateTime.MinValue }
-            });
-            Db.Ado.CommandTimeOut = 30000;//璁剧疆瓒呮椂鏃堕棿
-            Db.Aop.OnLogExecuted = (sql, pars) => //SQL鎵ц瀹屼簨浠�
-            {
-                //杩欓噷鍙互鏌ョ湅鎵ц鐨剆ql璇彞璺熷弬鏁�
-            };
-            Db.Aop.OnLogExecuting = (sql, pars) => //SQL鎵ц鍓嶄簨浠�
-            {
-                //杩欓噷鍙互鏌ョ湅鎵ц鐨剆ql璇彞璺熷弬鏁� ConsoleExt.WriteLine
-                //Debug.WriteLine($"****************************************** Sql Trace {DateTime.Now.ToString("HH:mm:ss")} ******************************************" +
-                //                $"\r\n{sql};{(pars.Length == 0 ? "" : "\r\n--Params锛�" + Db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)))}\r\n");
-                var sqlTrace = $"------------------------------------------ Sql Trace {DateTime.Now.ToString("HH:mm:ss")} ------------------------------------------";
-                var sqlcmd = sql.ToUpper();
-                foreach (var par in pars.OrderByDescending(q => q.ParameterName.Length))
-                {
-                    sqlcmd = sqlcmd.Replace(par.ParameterName.ToUpper(), $"'{par.Value}'", StringComparison.CurrentCultureIgnoreCase);
-                }
-                sqlTrace += $"\r\n{sqlcmd.Replace("\r", "").Replace("\n", "")};\r\n-- SQL锛歿sql.Replace("\r", "").Replace("\n", "")}{(pars.Length == 0 ? "" : "\r\n-- Params锛�" + Db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)))}\r\n";
-                if (!sqlTrace.Contains("LOG_API_ACCESS"))
-                {
-                    Debug.WriteLine(sqlTrace);
-                }
-            };
-            Db.Aop.OnError = (exp) =>//鎵цSQL 閿欒浜嬩欢
-            {
-                //杩欓噷鍙互鏌ョ湅鎵ц鐨剆ql璇彞璺熷弬鏁�
-            };
-            Db.Aop.OnExecutingChangeSql = (sql, pars) => //SQL鎵ц鍓� 鍙互淇敼SQL
-            {
-                if (pars != null)
-                {
-                    foreach (var par in pars)
-                    {
-                        var dbMinDate = (Db.CurrentConnectionConfig.MoreSettings?.DbMinDate ?? Convert.ToDateTime("1900-01-01"));
-                        if (par.DbType == System.Data.DbType.Int16 && (par.Value?.Equals(Int16.MinValue) ?? false))
-                        {
-                            par.Value = null;
-                        }
-                        if (par.DbType == System.Data.DbType.Int32 && (par.Value?.Equals(Int32.MinValue) ?? false))
-                        {
-                            par.Value = null;
-                        }
-                        if (par.DbType == System.Data.DbType.Int64 && (par.Value?.Equals(Int64.MinValue) ?? false))
-                        {
-                            par.Value = null;
-                        }
-                        if (par.DbType == System.Data.DbType.Single && (par.Value?.Equals(Single.MinValue) ?? false))
-                        {
-                            par.Value = null;
-                        }
-                        if (par.DbType == System.Data.DbType.Decimal && (par.Value?.Equals(Decimal.MinValue) ?? false))
-                        {
-                            par.Value = null;
-                        }
-                        if (par.DbType == System.Data.DbType.Double && (par.Value?.Equals(Double.MinValue) ?? false))
-                        {
-                            par.Value = null;
-                        }
-                        if (par.DbType == System.Data.DbType.Date && ((par.Value?.Equals(DateTime.MinValue) ?? false) || (par.Value?.Equals(dbMinDate) ?? false)))
-                        {
-                            par.Value = null;
-                        }
-                        if (par.DbType == System.Data.DbType.Time && ((par.Value?.Equals(DateTime.MinValue) ?? false) || (par.Value?.Equals(dbMinDate) ?? false)))
-                        {
-                            par.Value = null;
-                        }
-                        if (par.DbType == System.Data.DbType.DateTime && ((par.Value?.Equals(DateTime.MinValue) ?? false) || (par.Value?.Equals(dbMinDate) ?? false)))
-                        {
-                            par.Value = null;
-                        }
-                        if (par.DbType == System.Data.DbType.DateTime2 && ((par.Value?.Equals(DateTime.MinValue) ?? false) || (par.Value?.Equals(dbMinDate) ?? false)))
-                        {
-                            par.Value = null;
-                        }
-                    }
-                }
-                //閫傜敤Oracle锛氬鏋滅瓑浜庣殑鍊煎墠闈㈠甫N鍒欏幓鎺�
-                if (sql.Contains("=N'"))
-                {
-                    sql = sql.Replace("=N'", "='");
-                    Debug.WriteLine("閫傜敤Oracle锛氬鏋滅瓑浜庣殑鍊煎墠闈㈠甫N鍒欏幓鎺夛紝鎶婂瓨鍦ㄧ殑瀛楃[=N']鏇挎崲涓篬=']");
-                }
-                //閫傜敤Oracle,Sqlite锛氬鏋淚D瀛楁鍦║pdate璇彞鐨凷et涓垯鍒犳帀锛屼笉鏇存柊ID瀛楁鐨勫��
-                if ((sql.StartsWith("Begin\r\nUPDATE") || sql.StartsWith("UPDATE")) && Regex.Match(sql, @"(""|`)ID(""|`)[ ]?=[ ]?('([^']*)'|:ID|@ID),", RegexOptions.Multiline).Success)
-                {
-                    sql = Regex.Replace(sql, @"(""|`)ID(""|`)[ ]?=[ ]?('([^']*)'|:ID|@ID),", "", RegexOptions.Multiline);
-                    Debug.WriteLine("閫傜敤Oracle,Sqlite锛欼D瀛楁鍦║pdate璇彞鐨凷et涓垯鍒犳帀锛屼笉闇�鏇存柊ID瀛楁鐨勫�硷紝鎶婂瓨鍦ㄧ殑瀛楃[`ID`=@ID,]鏇挎崲涓虹┖[]");
-                }
-                return new KeyValuePair<string, SugarParameter[]>(sql, pars);
-            };
-        }
-    }
-}
diff --git a/Tiger.Business/Email/MailMessage.cs b/Tiger.Business/Email/MailMessage.cs
deleted file mode 100644
index c83baa3..0000000
--- a/Tiger.Business/Email/MailMessage.cs
+++ /dev/null
@@ -1,166 +0,0 @@
-锘縰sing MailKit.Net.Smtp;
-using MimeKit;
-using MimeKit.Text;
-using Rhea.Common;
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Tiger.Model;
-
-namespace Tiger.Business
-{
-    /// <summary>
-    /// 閭欢淇℃伅
-    /// </summary>
-    public static class MailMessage
-    {
-        /// <summary>
-        /// 缁勮閭欢鏂囨湰/闄勪欢閭欢淇℃伅
-        /// </summary>
-        /// <param name="mailBodyEntity">閭欢娑堟伅瀹炰綋</param>
-        /// <returns></returns>
-        public static MimeMessage AssemblyMailMessage(MailBodyEntity mailBodyEntity)
-        {
-            if (mailBodyEntity == null)
-            {
-                throw new ArgumentNullException(nameof(mailBodyEntity));
-            }
-
-            var message = new MimeMessage();
-
-            //璁剧疆閭欢鍩烘湰淇℃伅
-            SetMailBaseMessage(message, mailBodyEntity);
-
-            var multipart = new Multipart("mixed");
-
-            //鎻掑叆鏂囨湰娑堟伅
-            if (string.IsNullOrEmpty(mailBodyEntity.MailTextBody) == false)
-            {
-                var alternative = new MultipartAlternative
-                {
-                    AssemblyMailTextMessage(mailBodyEntity.MailTextBody, mailBodyEntity.MailBodyType)
-                 };
-
-                multipart.Add(alternative);
-            }
-
-            //鎻掑叆闄勪欢
-            if (mailBodyEntity.MailFilePath != null && File.Exists(mailBodyEntity.MailFilePath) == false)
-            {
-                var mimePart = AssemblyMailAttachmentMessage(mailBodyEntity.MailFileType, mailBodyEntity.MailFileSubType,
-                     mailBodyEntity.MailFilePath);
-
-                multipart.Add(mimePart);
-            }
-
-            //缁勫悎閭欢鍐呭
-            message.Body = multipart;
-
-            return message;
-        }
-
-        /// <summary>
-        /// 璁剧疆閭欢鍩虹淇℃伅
-        /// </summary>
-        /// <param name="minMessag"></param>
-        /// <param name="mailBodyEntity"></param>
-        /// <returns></returns>
-        public static MimeMessage SetMailBaseMessage(MimeMessage minMessag, MailBodyEntity mailBodyEntity)
-        {
-            if (minMessag == null)
-            {
-                throw new ArgumentNullException();
-            }
-
-            if (mailBodyEntity == null)
-            {
-                throw new ArgumentNullException();
-            }
-
-            //鎻掑叆鍙戜欢浜�
-            minMessag.From.Add(new MailboxAddress(mailBodyEntity.Sender, mailBodyEntity.SenderAddress));
-
-            //鎻掑叆鏀朵欢浜�
-            foreach (var recipients in mailBodyEntity.Recipients)
-            {
-                minMessag.To.Add(new MailboxAddress(recipients, recipients));
-            }
-
-            //鎻掑叆鎶勯�佷汉
-            foreach (var cC in mailBodyEntity.Cc)
-            {
-                minMessag.Cc.Add(new MailboxAddress(cC, cC));
-            }
-
-            //鎻掑叆涓婚
-            minMessag.Subject = mailBodyEntity.Subject;
-
-            return minMessag;
-        }
-
-        /// <summary>
-        /// 缁勮閭欢鏂囨湰淇℃伅
-        /// </summary>
-        /// <param name="mailBody">閭欢鏂囨湰鍐呭</param>
-        /// <param name="textPartType">閭欢鏂囨湰绫诲瀷(plain,html,rtf,xml)</param>
-        /// <returns></returns>
-        public static TextPart AssemblyMailTextMessage(string mailBody, string textPartType)
-        {
-            if (string.IsNullOrEmpty(mailBody))
-            {
-                throw new ArgumentNullException();
-            }
-
-            if (string.IsNullOrEmpty(textPartType))
-            {
-                throw new ArgumentNullException();
-            }
-
-            var textBody = new TextPart(textPartType)
-            {
-                Text = mailBody
-            };
-
-            return textBody;
-        }
-
-        /// <summary>
-        /// 缁勮閭欢闄勪欢淇℃伅
-        /// </summary>
-        /// <param name="fileAttachmentType">闄勪欢绫诲瀷(image,application)</param>
-        /// <param name="fileAttachmentSubType">闄勪欢瀛愮被鍨� </param>
-        /// <param name="fileAttachmentPath">闄勪欢璺緞</param>
-        /// <returns></returns>
-        public static MimePart AssemblyMailAttachmentMessage(string fileAttachmentType, string fileAttachmentSubType, string fileAttachmentPath)
-        {
-            if (string.IsNullOrEmpty(fileAttachmentSubType))
-            {
-                throw new ArgumentNullException();
-            }
-
-            if (string.IsNullOrEmpty(fileAttachmentType))
-            {
-                throw new ArgumentNullException();
-            }
-
-            if (string.IsNullOrEmpty(fileAttachmentPath))
-            {
-                throw new ArgumentNullException();
-            }
-
-            var attachment = new MimePart(fileAttachmentType, fileAttachmentSubType)
-            {
-                Content = new MimeContent(File.OpenRead(fileAttachmentPath)),
-                ContentDisposition = new ContentDisposition(ContentDisposition.Attachment),
-                ContentTransferEncoding = ContentEncoding.Base64,
-                FileName = Path.GetFileName(fileAttachmentPath)
-            };
-
-            return attachment;
-        }
-
-    }
-}
diff --git a/Tiger.Business/Email/MailServiceApi.cs b/Tiger.Business/Email/MailServiceApi.cs
deleted file mode 100644
index 548a41e..0000000
--- a/Tiger.Business/Email/MailServiceApi.cs
+++ /dev/null
@@ -1,217 +0,0 @@
-锘縰sing MailKit;
-using MailKit.Net.Smtp;
-using MailKit.Security;
-using MimeKit;
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Tiger.IBusiness;
-using Tiger.Model;
-
-namespace Tiger.Business
-{
-    /// <summary>
-    /// 閭欢鏈嶅姟API
-    /// </summary>
-    public class MailServiceApi: IMailServiceApi
-    {
-        /// <summary>
-        /// 鍙戦�侀偖浠�
-        /// </summary>
-        /// <param name="mailBodyEntity">閭欢鍩虹淇℃伅</param>
-        /// <param name="sendServerConfiguration">鍙戜欢浜哄熀纭�淇℃伅</param>
-        public SendResultEntity SendMail(MailBodyEntity mailBodyEntity,
-            SendServerConfigurationEntity sendServerConfiguration)
-        {
-            if (sendServerConfiguration == null)
-            {
-                throw new ArgumentNullException();
-            }
-
-            if (sendServerConfiguration == null)
-            {
-                throw new ArgumentNullException();
-            }
-
-            var sendResultEntity = new SendResultEntity();
-
-            using (var client = new SmtpClient()) //new SmtpClient(new ProtocolLogger(CreateMailLog())))
-            {
-                client.ServerCertificateValidationCallback = (s, c, h, e) => true;
-
-                Connection(mailBodyEntity, sendServerConfiguration, client, sendResultEntity);
-
-                if (sendResultEntity.ResultStatus == false)
-                {
-                    return sendResultEntity;
-                }
-
-                SmtpClientBaseMessage(client);
-
-                Authenticate(mailBodyEntity, sendServerConfiguration, client, sendResultEntity);
-
-                if (sendResultEntity.ResultStatus == false)
-                {
-                    return sendResultEntity;
-                }
-
-                Send(mailBodyEntity, sendServerConfiguration, client, sendResultEntity);
-
-                if (sendResultEntity.ResultStatus == false)
-                {
-                    return sendResultEntity;
-                }
-
-                client.Disconnect(true);
-            }
-
-            return sendResultEntity;
-        }
-
-
-        /// <summary>
-        /// 杩炴帴鏈嶅姟鍣�
-        /// </summary>
-        /// <param name="mailBodyEntity">閭欢鍐呭</param>
-        /// <param name="sendServerConfiguration">鍙戦�侀厤缃�</param>
-        /// <param name="client">瀹㈡埛绔璞�</param>
-        /// <param name="sendResultEntity">鍙戦�佺粨鏋�</param>
-        public void Connection(MailBodyEntity mailBodyEntity, SendServerConfigurationEntity sendServerConfiguration,SmtpClient client, SendResultEntity sendResultEntity)
-        {
-            try
-            {
-                client.Connect(sendServerConfiguration.SmtpHost, sendServerConfiguration.SmtpPort);
-            }
-            catch (SmtpCommandException ex)
-            {
-                sendResultEntity.ResultInformation = $"灏濊瘯杩炴帴鏃跺嚭閿�:{0}" + ex.Message;
-                sendResultEntity.ResultStatus = false;
-            }
-            catch (SmtpProtocolException ex)
-            {
-                sendResultEntity.ResultInformation = $"灏濊瘯杩炴帴鏃剁殑鍗忚閿欒:{0}" + ex.Message;
-                sendResultEntity.ResultStatus = false;
-            }
-            catch (Exception ex)
-            {
-                sendResultEntity.ResultInformation = $"鏈嶅姟鍣ㄨ繛鎺ラ敊璇�:{0}" + ex.Message;
-                sendResultEntity.ResultStatus = false;
-            }
-        }
-
-        /// <summary>
-        /// 璐︽埛璁よ瘉
-        /// </summary>
-        /// <param name="mailBodyEntity">閭欢鍐呭</param>
-        /// <param name="sendServerConfiguration">鍙戦�侀厤缃�</param>
-        /// <param name="client">瀹㈡埛绔璞�</param>
-        /// <param name="sendResultEntity">鍙戦�佺粨鏋�</param>
-        public void Authenticate(MailBodyEntity mailBodyEntity, SendServerConfigurationEntity sendServerConfiguration,
-            SmtpClient client, SendResultEntity sendResultEntity)
-        {
-            try
-            {
-                client.Authenticate(sendServerConfiguration.SenderAccount, sendServerConfiguration.SenderPassword);
-            }
-            catch (AuthenticationException ex)
-            {
-                sendResultEntity.ResultInformation = $"鏃犳晥鐨勭敤鎴峰悕鎴栧瘑鐮�:{0}" + ex.Message;
-                sendResultEntity.ResultStatus = false;
-            }
-            catch (SmtpCommandException ex)
-            {
-                sendResultEntity.ResultInformation = $"灏濊瘯楠岃瘉閿欒:{0}" + ex.Message;
-                sendResultEntity.ResultStatus = false;
-            }
-            catch (SmtpProtocolException ex)
-            {
-                sendResultEntity.ResultInformation = $"灏濊瘯楠岃瘉鏃剁殑鍗忚閿欒:{0}" + ex.Message;
-                sendResultEntity.ResultStatus = false;
-            }
-            catch (Exception ex)
-            {
-                sendResultEntity.ResultInformation = $"璐︽埛璁よ瘉閿欒:{0}" + ex.Message;
-                sendResultEntity.ResultStatus = false;
-            }
-        }
-
-        /// <summary>
-        /// 鍙戦�侀偖浠�
-        /// </summary>
-        /// <param name="mailBodyEntity">閭欢鍐呭</param>
-        /// <param name="sendServerConfiguration">鍙戦�侀厤缃�</param>
-        /// <param name="client">瀹㈡埛绔璞�</param>
-        /// <param name="sendResultEntity">鍙戦�佺粨鏋�</param>
-        public void Send(MailBodyEntity mailBodyEntity, SendServerConfigurationEntity sendServerConfiguration,
-            SmtpClient client, SendResultEntity sendResultEntity)
-        {
-            try
-            {
-                client.Send(MailMessage.AssemblyMailMessage(mailBodyEntity));
-            }
-            catch (SmtpCommandException ex)
-            {
-                switch (ex.ErrorCode)
-                {
-                    case SmtpErrorCode.RecipientNotAccepted:
-                        sendResultEntity.ResultInformation = $"鏀朵欢浜烘湭琚帴鍙�:{ex.Message}";
-                        break;
-                    case SmtpErrorCode.SenderNotAccepted:
-                        sendResultEntity.ResultInformation = $"鍙戜欢浜烘湭琚帴鍙�:{ex.Message}";
-                        break;
-                    case SmtpErrorCode.MessageNotAccepted:
-                        sendResultEntity.ResultInformation = $"娑堟伅鏈鎺ュ彈:{ex.Message}";
-                        break;
-                }
-                sendResultEntity.ResultStatus = false;
-            }
-            catch (SmtpProtocolException ex)
-            {
-                sendResultEntity.ResultInformation = $"鍙戦�佹秷鎭椂鐨勫崗璁敊璇�:{ex.Message}";
-                sendResultEntity.ResultStatus = false;
-            }
-            catch (Exception ex)
-            {
-                sendResultEntity.ResultInformation = $"閭欢鎺ユ敹澶辫触:{ex.Message}";
-                sendResultEntity.ResultStatus = false;
-            }
-        }
-
-        /// <summary>
-        /// 鑾峰彇SMTP鍩虹淇℃伅
-        /// </summary>
-        /// <param name="client">瀹㈡埛绔璞�</param>
-        /// <returns></returns>
-        public MailServerInformation SmtpClientBaseMessage(SmtpClient client)
-        {
-            var mailServerInformation = new MailServerInformation
-            {
-                Authentication = client.Capabilities.HasFlag(SmtpCapabilities.Authentication),
-                BinaryMime = client.Capabilities.HasFlag(SmtpCapabilities.BinaryMime),
-                Dsn = client.Capabilities.HasFlag(SmtpCapabilities.Dsn),
-                EightBitMime = client.Capabilities.HasFlag(SmtpCapabilities.EightBitMime),
-                Size = client.MaxSize
-            };
-
-            return mailServerInformation;
-        }
-
-        /// <summary>
-        /// 鍒涘缓閭欢鏃ュ織鏂囦欢
-        /// </summary>
-        /// <returns></returns>
-        public string CreateMailLog()
-        {
-            var logPath = AppDomain.CurrentDomain.BaseDirectory + "/Logs/" +
-                Guid.NewGuid() + ".txt";
-
-            if (File.Exists(logPath)) return logPath;
-            var fs = File.Create(logPath);
-            fs.Close();
-            return logPath;
-        }
-    }
-}
diff --git a/Tiger.Business/Email/ReceiveEmailServiceApi.cs b/Tiger.Business/Email/ReceiveEmailServiceApi.cs
deleted file mode 100644
index 184c76a..0000000
--- a/Tiger.Business/Email/ReceiveEmailServiceApi.cs
+++ /dev/null
@@ -1,162 +0,0 @@
-锘縰sing MailKit.Net.Imap;
-using MailKit.Search;
-using MailKit.Security;
-using MailKit;
-using MimeKit;
-using System;
-using System.Collections.Generic;
-using System.Globalization;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Tiger.Model;
-using System.Configuration;
-
-namespace Tiger.Business
-{
-    /// <summary>
-    /// 璺熸姇閭欢鏈嶅姟API
-    /// </summary>
-    public static class ReceiveEmailServiceApi
-    {
-        /// <summary>
-        /// 璁剧疆鍙戜欢浜轰俊鎭�
-        /// </summary>
-        /// <returns></returns>
-        public static SendServerConfigurationEntity SetSendMessage()
-        {
-            var sendServerConfiguration = new SendServerConfigurationEntity
-            {
-                SmtpHost = ConfigurationManager.AppSettings["SmtpServer"],
-                SmtpPort = int.Parse(ConfigurationManager.AppSettings["SmtpPort"]),
-                IsSsl = Convert.ToBoolean(ConfigurationManager.AppSettings["IsSsl"]),
-                MailEncoding = ConfigurationManager.AppSettings["MailEncoding"],
-                SenderAccount = ConfigurationManager.AppSettings["SenderAccount"],
-                SenderPassword = ConfigurationManager.AppSettings["SenderPassword"]
-            };
-            return sendServerConfiguration;
-        }
-
-
-        /// <summary>
-        /// 鎺ユ敹閭欢
-        /// </summary>
-        public static void ReceiveEmail()
-        {
-            var sendServerConfiguration = SetSendMessage();
-
-            if (sendServerConfiguration == null)
-            {
-                throw new ArgumentNullException();
-            }
-
-            using (var client = new ImapClient(new ProtocolLogger(CreateMailLog())))
-            {
-                client.Connect(sendServerConfiguration.SmtpHost, sendServerConfiguration.SmtpPort,
-                    SecureSocketOptions.SslOnConnect);
-                client.Authenticate(sendServerConfiguration.SenderAccount, sendServerConfiguration.SenderPassword);
-                client.Inbox.Open(FolderAccess.ReadOnly);
-                var uids = client.Inbox.Search(SearchQuery.All);
-                foreach (var uid in uids)
-                {
-                    var message = client.Inbox.GetMessage(uid);
-                    message.WriteTo($"{uid}.eml");
-                }
-
-                client.Disconnect(true);
-            }
-        }
-
-        /// <summary>
-        /// 涓嬭浇閭欢鍐呭
-        /// </summary>
-        public static void DownloadBodyParts()
-        {
-            var sendServerConfiguration = SetSendMessage();
-
-            using (var client = new ImapClient())
-            {
-                client.Connect(sendServerConfiguration.SmtpHost, sendServerConfiguration.SmtpPort,
-                    SecureSocketOptions.SslOnConnect);
-                client.Authenticate(sendServerConfiguration.SenderAccount, sendServerConfiguration.SenderPassword);
-                client.Inbox.Open(FolderAccess.ReadOnly);
-
-                // 鎼滅储Subject鏍囬鍖呭惈鈥淢imeKit鈥濇垨鈥淢ailKit鈥濈殑閭欢
-                var query = SearchQuery.SubjectContains("MimeKit").Or(SearchQuery.SubjectContains("MailKit"));
-                var uids = client.Inbox.Search(query);
-
-                // 鑾峰彇鎼滅储缁撴灉鐨勬憳瑕佷俊鎭紙鎴戜滑闇�瑕乁ID鍜孊ODYSTRUCTURE姣忔潯娑堟伅锛屼互渚挎垜浠彲浠ユ彁鍙栨枃鏈鏂囧拰闄勪欢锛�
-                var items = client.Inbox.Fetch(uids, MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure);
-
-                foreach (var item in items)
-                {
-                    // 纭畾涓�涓洰褰曟潵淇濆瓨鍐呭
-                    var directory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "/MailBody", item.UniqueId.ToString());
-
-                    Directory.CreateDirectory(directory);
-
-                    // IMessageSummary.TextBody鏄竴涓究鍒╃殑灞炴�э紝鍙互涓烘垜浠壘鍒扳�滄枃鏈�/绾枃鏈�濈殑姝f枃閮ㄥ垎
-                    var bodyPart = item.TextBody;
-
-                    // 涓嬭浇'text / plain'姝f枃閮ㄥ垎
-                    var body = (TextPart)client.Inbox.GetBodyPart(item.UniqueId, bodyPart);
-
-                    // TextPart.Text鏄竴涓究鍒╃殑灞炴�э紝瀹冭В鐮佸唴瀹瑰苟灏嗙粨鏋滆浆鎹负鎴戜滑鐨勫瓧绗︿覆
-                    var text = body.Text;
-
-                    File.WriteAllText(Path.Combine(directory, "body.txt"), text);
-
-                    // 鐜板湪閬嶅巻鎵�鏈夐檮浠跺苟灏嗗叾淇濆瓨鍒扮鐩�
-                    foreach (var attachment in item.Attachments)
-                    {
-                        // 鍍忔垜浠鍐呭鎵�鍋氱殑閭f牱涓嬭浇闄勪欢
-                        var entity = client.Inbox.GetBodyPart(item.UniqueId, attachment);
-
-                        // 闄勪欢鍙互鏄痬essage / rfc822閮ㄤ欢鎴栧父瑙凪IME閮ㄤ欢
-                        var messagePart = entity as MessagePart;
-                        if (messagePart != null)
-                        {
-                            var rfc822 = messagePart;
-
-                            var path = Path.Combine(directory, attachment.PartSpecifier + ".eml");
-
-                            rfc822.Message.WriteTo(path);
-                        }
-                        else
-                        {
-                            var part = (MimePart)entity;
-
-                            // 娉ㄦ剰锛氳繖鍙兘鏄┖鐨勶紝浣嗗ぇ澶氭暟浼氭寚瀹氫竴涓枃浠跺悕
-                            var fileName = part.FileName;
-
-                            var path = Path.Combine(directory, fileName);
-
-                            // decode and save the content to a file
-                            using (var stream = File.Create(path))
-                                part.Content.DecodeTo(stream);
-                        }
-                    }
-                }
-
-                client.Disconnect(true);
-            }
-        }
-
-        /// <summary>
-        /// 鍒涘缓閭欢鏃ュ織鏂囦欢
-        /// </summary>
-        /// <returns></returns>
-        public static string CreateMailLog()
-        {
-            var logPath = AppDomain.CurrentDomain.BaseDirectory + "/DocumentLog/" +
-                DateTime.Now.ToUniversalTime().ToString(CultureInfo.InvariantCulture) + ".txt";
-
-            if (File.Exists(logPath)) return logPath;
-            var fs = File.Create(logPath);
-            fs.Close();
-            return logPath;
-
-        }
-    }
-}
diff --git a/Tiger.Business/Language/BAS/CodeRule.json b/Tiger.Business/Language/BAS/CodeRule.json
deleted file mode 100644
index 05fceac..0000000
--- a/Tiger.Business/Language/BAS/CodeRule.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-  "VerifyException": {
-    "en": "Code[{0}] Rule Verify Exception",
-    "zh-CN": "鏉$爜[{0}]瑙勫垯楠岃瘉寮傚父"
-  },
-  "GenerateException": {
-    "en": "Rule[{0}] Generate Code Exception(Params[{1}])",
-    "zh-CN": "瑙勫垯[{0}]鐢熸垚鏉$爜寮傚父(Params[{1}])"
-  },
-  "GenerateFailed": {
-    "NotFound": {
-      "en": "Rule[{0}] Generate Code Failed(Params[{1}]): Rule[{0}] cannot be found in \"CodeRule\" setting",
-      "zh-CN": "瑙勫垯[{0}]鐢熸垚鏉$爜澶辫触(Params[{1}])锛氳鍒欒缃腑鎵句笉鍒拌鏉$爜瑙勫垯[{0}]"
-    },
-    "NotEnoughArgs": {
-      "en": "Rule[{0}] Generate Code Failed(Params[{1}]): Not enough parameters for generate code(index: {2})",
-      "zh-CN": "瑙勫垯[{0}]鐢熸垚鏉$爜澶辫触(Params[{1}])锛氭彁渚涚殑鍙傛暟涓嶈冻锛屾棤娉曠敓鎴愭潯鐮�(index: {2})"
-    },
-    "NotPassValidation": {
-      "en": "Rule[{0}] Generate Code Failed(Params[{1}]): Parameter [{2}] did not pass rule(index: {3}) validation",
-      "zh-CN": "瑙勫垯[{0}]鐢熸垚鏉$爜澶辫触(Params[{1}])锛氭彁渚涚殑鍙傛暟[{2}]鏈�氳繃瑙勫垯(index: {3})楠岃瘉"
-    }
-  }
-}
\ No newline at end of file
diff --git a/Tiger.Business/Language/Biz.Language.cs b/Tiger.Business/Language/Biz.Language.cs
deleted file mode 100644
index 154016c..0000000
--- a/Tiger.Business/Language/Biz.Language.cs
+++ /dev/null
@@ -1,342 +0,0 @@
-锘縰sing Tiger.Model;
-using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.Linq.Expressions;
-using System.Text;
-using System.Threading.Tasks;
-using Rhea.Common;
-using System.Net;
-using System.Net.Http;
-using System.Reflection;
-using System.Linq;
-using Apache.NMS.ActiveMQ.Commands;
-using System.IO;
-using Newtonsoft.Json.Linq;
-using NetTaste;
-using System.Xml.Linq;
-using Tiger.IBusiness;
-using System.Data;
-using Tiger.Model.Entitys.MES.Position;
-
-namespace Tiger.Business
-{
-    public partial class Biz
-    {
-        /// <summary>
-        /// 澶氳瑷�缈昏瘧锛屾寜BizSettings璁剧疆鐨勯粯璁よ瑷�(DefaultLanguage)缈昏瘧
-        /// </summary>
-        /// <param name="key"></param>
-        /// <param name="args"></param>
-        /// <returns></returns>
-        public static string T(string key, params object?[] args) => new Locale(key, args).Default();
-        /// <summary>
-        /// 澶氳瑷�缈昏瘧锛屾寜浼犲叆鐨勮瑷�缈昏瘧锛屼紶鍏ヨ瑷�涓虹┖鍒欐寜BizSettings璁剧疆鐨勯粯璁よ瑷�(DefaultLanguage)缈昏瘧
-        /// </summary>
-        /// <param name="locale"></param>
-        /// <param name="language"></param>
-        /// <returns></returns>
-        public static string T(Locale locale, string language) => language.IsNullOrEmpty() ? locale.Default() : locale[language];
-        /// <summary>
-        /// 澶氳瑷�瀵硅薄(鏈炕璇�)
-        /// </summary>
-        /// <param name="key"></param>
-        /// <param name="args"></param>
-        /// <returns></returns>
-        public static Locale L(string key, params object?[] args) => new Locale(key, args);
-        /// <summary>
-        /// 鍥介檯鍖栬瑷�鍖�
-        /// </summary>
-        public class Language : ILanguage
-        {
-            private static string curLocale => BizConfig.DefaultLanguage;
-            private static DataTable langDT;
-            private static Dictionary<string, Dictionary<string, string>> _dictionary = InitDictionary();
-            public static Dictionary<string, Dictionary<string, string>> Dictionary => _dictionary;
-            public Dictionary<string, Dictionary<string, string>> GetDictionary() => InitDictionary();
-            /// <summary>
-            /// 鑾峰彇璇█鍖呭瓧鍏�
-            /// </summary>
-            /// <returns></returns>
-            public static Dictionary<string, Dictionary<string, string>> InitDictionary()
-            {
-                _dictionary = new();
-                try
-                {
-                    #region From Resource
-                    //var assembly = Assembly.GetExecutingAssembly();
-                    //var declaringType = MethodBase.GetCurrentMethod().DeclaringType;
-                    //var resource = assembly.GetManifestResourceNames().ToList();
-                    //var langs = resource.Where(q => q.StartsWith($"{declaringType.Namespace}.{declaringType.Name}")).OrderBy(q => q).ToList();
-                    //foreach (var lang in langs)
-                    //{
-                    //    var prefix = lang.Replace($"{declaringType.Namespace}.{declaringType.Name}.", "").Replace($".json", "");
-                    //    using (StreamReader reader = new StreamReader(assembly.GetManifestResourceStream(lang), Encoding.UTF8))
-                    //    {
-                    //        string langJson = reader.ReadToEnd();
-                    //        if (!langJson.IsNullOrEmpty())
-                    //        {
-                    //        	GetDicItem(JObject.Parse(langJson), prefix);
-                    //        }
-                    //    }
-                    //}
-                    #endregion
-
-                    #region From DB
-                    var langFile = new FileInfo(@$"{AppDomain.CurrentDomain.BaseDirectory}Language.db");
-                    var db = new Database() { Name = langFile.Name, Type = SqlSugar.DbType.Sqlite, ConnectionString = @$"DataSource={langFile.FullName}" }.Client;
-                    
-                    langDT = db.Queryable<dynamic>().AS("Dictionary").ToDataTable();
-                    foreach (DataRow row in langDT.Rows)
-                    {
-                        var key = row["Key"].ToString();
-                        var dic = new Dictionary<string, string>();
-                        foreach (DataColumn col in langDT.Columns)
-                        {
-                            if (col.ColumnName.StartsWith("L@"))
-                            {
-                                dic.Add(col.ColumnName.Replace("L@", ""), row[col].ToString());
-                            }
-                        }
-                        if (_dictionary.ContainsKey(key))
-                        {
-                            _dictionary[key] = dic;
-                        }
-                        else
-                        {
-                            _dictionary.Add(key, dic);
-                        }
-                    }
-                    #endregion
-                    return _dictionary;
-                }
-                catch (Exception ex)
-                {
-                    Logger.Default.Fatal(ex, "鑾峰彇璇█鍖呭瓧鍏稿紓甯�");
-                    return new();
-                }
-            }
-
-            /// <summary>
-            /// 鑾峰彇瀛楀吀璇嶆潯
-            /// </summary>
-            /// <param name="root"></param>
-            /// <param name="prefix"></param>
-            /// <returns></returns>
-            private static void GetDicItem(JToken root, string prefix)
-            {
-                if (root.Type == JTokenType.Object)
-                {
-                    foreach (var property in root.Children<JProperty>())
-                    {
-                        GetDicItem(property.Value, prefix);
-                    }
-                }
-                else if (root.Type == JTokenType.Array)
-                {
-                    foreach (var item in root.Children<JToken>())
-                    {
-                        GetDicItem(item, prefix);
-                    }
-                }
-                else //if (root.Type == JTokenType.Property || root.Type == JTokenType.String || root.Type == JTokenType.Integer || root.Type == JTokenType.Float || root.Type == JTokenType.Boolean || root.Type == JTokenType.Date || root.Type == JTokenType.Bytes)
-                {
-                    var prefixs = ($"{prefix}.{root.Path}").Split('.');
-                    var key = string.Join(".", prefixs.SkipLast(1));
-                    if (!_dictionary.ContainsKey(key))
-                    {
-                        _dictionary.Add(key, new());
-                    }
-                    var keyDic = _dictionary[key];
-                    if (_dictionary.ContainsKey(prefixs.Last()))
-                    {
-                        keyDic[prefixs.Last()] = root.ToString();
-                    }
-                    else
-                    {
-                        keyDic.Add(prefixs.Last(), root.ToString());
-                    }
-                }
-            }
-
-            /// <summary>
-            /// 鑾峰彇璇█鍖�
-            /// </summary>
-            /// <param name="locale"></param>
-            /// <returns></returns>
-            public string GetJson(string locale)
-            {
-                //return GetJsonFromResource(locale);
-                return GetJsonFromDB(locale);
-            }
-
-            /// <summary>
-            /// 鑾峰彇璇█鍖�
-            /// </summary>
-            /// <param name="locale"></param>
-            /// <returns></returns>
-            public string GetJsonFromResource(string locale)
-            {
-                var result = new JObject();
-                try
-                {
-	                var assembly = Assembly.GetExecutingAssembly();
-	                var declaringType = MethodBase.GetCurrentMethod().DeclaringType;
-	                var resource = assembly.GetManifestResourceNames().ToList();
-	                var langs = resource.Where(q => q.StartsWith($"{declaringType.Namespace}.{declaringType.Name}")).OrderBy(q => q).ToList();
-	                foreach (var lang in langs)
-	                {
-	                    var parent = lang.Replace($"{declaringType.Namespace}.{declaringType.Name}.", "").Replace($".json", "").Split(".", StringSplitOptions.RemoveEmptyEntries);
-	                    var node = result;
-	                    foreach (var item in parent)
-	                    {
-	                        if (node.ContainsKey(item))
-	                        {
-	                            node = node[item] as JObject;
-	                        }
-	                        else
-	                        {
-	                            var itemNode = new JObject();
-	                            node.Add(item, itemNode);
-	                            node = itemNode;
-	                        }
-	                    }
-	                    using (StreamReader reader = new StreamReader(assembly.GetManifestResourceStream(lang), Encoding.UTF8))
-	                    {
-	                        string langJson = reader.ReadToEnd();
-                            if (!langJson.IsNullOrEmpty())
-                            {
-                                JObject objs = SelectLocale(JObject.Parse(langJson), locale ?? "");
-                                foreach (var obj in objs)
-                                {
-                                    node.Add(obj.Key, obj.Value);
-                                }
-                            }
-                        }
-	                }
-                    return result.ToString();
-                }
-                catch (Exception ex)
-                {
-                    return ex.StackTraceMessage();
-                }
-            }
-
-            /// <summary>
-            /// 鑾峰彇鏈湴璇█鍖�
-            /// </summary>
-            /// <param name="locale"></param>
-            /// <returns></returns>
-            public static string GetJsonFromDB(string locale)
-            {
-                try
-                {
-                    //浠庢湰鍦拌幏鍙栬瑷�鍖�
-                    var result = new JObject();
-                    var langFile = new FileInfo(@$"{AppDomain.CurrentDomain.BaseDirectory}Language.db");
-                    if (!Biz.DataSource.Exists(langFile.Name))
-                    {
-                        Biz.DataSource.Add(new Database()
-                        {
-                            Name = langFile.Name,
-                            Type = SqlSugar.DbType.Sqlite,
-                            ConnectionString = @$"DataSource={langFile.FullName}",
-                        });
-                    }
-                    var db = Biz.DataSource[langFile.Name].Client;
-                    langDT = db.Queryable<dynamic>().AS("Dictionary").ToDataTable();
-                    foreach (DataRow row in langDT.Rows)
-                    {
-                        var key = row["Key"].ToString();
-                        if (key == "routes.demo.editor.editor")
-                        {
-                            ;
-                        }
-                        var parent = key.Split(".", StringSplitOptions.RemoveEmptyEntries);
-                        var node = result;
-                        var dic = new Dictionary<string, string>();
-                        foreach (DataColumn col in langDT.Columns)
-                        {
-                            if (col.ColumnName.StartsWith("L@"))
-                            {
-                                dic.Add(col.ColumnName.Replace("L@", ""), row[col].ToString());
-                            }
-                        }
-                        if (_dictionary.ContainsKey(key))
-                        {
-                            _dictionary[key] = dic;
-                        }
-                        else
-                        {
-                            _dictionary.Add(key, dic);
-                        }
-                        for (int i = 0; i < parent.Length; i++)
-                        {
-                            if (node.ContainsKey(parent[i]))
-                            {
-                                node = node[parent[i]] as JObject;
-                            }
-                            else
-                            {
-                                if (i + 1 == parent.Length)
-                                {
-                                    var value = dic.ContainsKey(locale) ? dic[locale] : dic.First().Value;
-                                    node.Add(parent[i], value.ToString());
-                                }
-                                else
-                                {
-                                    var itemNode = new JObject();
-                                    node.Add(parent[i], itemNode);
-                                    node = itemNode;
-                                }
-                            }
-                        }
-                    }
-                    return result.ToString();
-                }
-                catch (Exception ex)
-                {
-                    return ex.StackTraceMessage();
-                }
-            }
-
-            /// <summary>
-            /// 閫夋嫨璇█
-            /// </summary>
-            /// <param name="json"></param>
-            /// <param name="locale"></param>
-            /// <returns></returns>
-            private static JObject SelectLocale(JObject json, string locale)
-            {
-                var result = new JObject();
-                foreach (var obj in json)
-                {
-                    if (obj.Value.HasValues && obj.Value.First().HasValues && !obj.Value.First().First().HasValues)
-                    {
-                        if((obj.Value as JObject).ContainsKey(locale))
-                        {
-                            result.Add(obj.Key, obj.Value[locale].ToString());
-                        }
-                        else
-                        {
-                            result.Add(obj.Key, obj.Value.First().First().ToString());
-                            //result.Add(obj.Key, SelectLocale(obj.Value as JObject, locale));
-                        }
-                    }
-                    else
-                    {
-                        if (obj.Value.Type == JTokenType.Object)
-                        {
-                            result.Add(obj.Key, SelectLocale(obj.Value as JObject, locale));
-                        }
-                        else
-                        {
-                            result.Add(obj.Key, obj.Value?.ToString());
-                        }
-                    }
-                }
-                return result;
-            }
-        }
-    }
-}
diff --git a/Tiger.Business/Language/LanguageEntity.cs b/Tiger.Business/Language/LanguageEntity.cs
deleted file mode 100644
index b1096cd..0000000
--- a/Tiger.Business/Language/LanguageEntity.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-锘縰sing Rhea.Common;
-using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Tiger.Business
-{
-    ///// <summary>
-    ///// 澶氳瑷�瀹炰綋
-    ///// </summary>
-    //public class Lang
-    //{
-    //    public Lang(string key, params object?[] args) {
-    //        Key = key;
-    //        Args = args;
-    //        Dic = Language.Dictionary.ContainsKey(key) ? Language.Dictionary[key] : new();
-    //    }
-    //    public string Key { get; set; }
-    //    public object[] Args { get; set; }
-    //    public Dictionary<string, string> Dic { get; set; } = new Dictionary<string, string>();
-    //    public string this[string language] => string.Format(Dic.ContainsKey(language) ? Dic[language] : Key, Args);
-    //    public string Cur => Dic.Any() ? this[ApiConfig.DefaultLanguage.IsNullOrEmpty(Dic.First().Key)] : null;
-    //}
-}
diff --git a/Tiger.Business/Language/SYS/Login.json b/Tiger.Business/Language/SYS/Login.json
deleted file mode 100644
index 012f492..0000000
--- a/Tiger.Business/Language/SYS/Login.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
-  "dbTranError": {
-    "en": "System transaction error, data has been rolled back",
-    "zh-CN": "绯荤粺浜嬪姟閿欒锛屾暟鎹凡缁忓洖婊氾紒"
-  },
-  "UserDisabaleError": {
-    "en": "User disabaled",
-    "zh-CN": "鐢ㄦ埛宸茬鐢紒"
-  },
-  "errMsg401": {
-    "en": "The user does not have permission (token, user name, password error)!",
-    "zh-CN": "鐢ㄦ埛娌℃湁鏉冮檺锛堜护鐗屻�佺敤鎴峰悕銆佸瘑鐮侀敊璇級!"
-  },
-  "isNotOrgCode": {
-    "en": "The user does not have permission for this site!",
-    "zh-CN": "鐢ㄦ埛娌℃湁璇ユ嵁鐐圭殑鏉冮檺!"
-  },
-  "language-change-confirm": {
-    "en": "Applying this setting will restart the app",
-    "zh-CN": "搴旂敤姝よ缃皢閲嶅惎App!"
-  },
-  "comfirmLogout": {
-    "en": "Are you sure to exit the current login account?",
-    "zh-CN": "纭閫�鍑哄綋鍓嶇櫥褰曡处鍙峰悧锛�"
-  }
-}
\ No newline at end of file
diff --git a/Tiger.Business/Language/SYS/Menu.json b/Tiger.Business/Language/SYS/Menu.json
deleted file mode 100644
index 432a247..0000000
--- a/Tiger.Business/Language/SYS/Menu.json
+++ /dev/null
@@ -1,157 +0,0 @@
-{
-  "language": {
-    "en": "Language",
-    "zh-CN": "璇█"
-  },
-  "en": {
-    "en": "English",
-    "zh-CN": "鑻辨枃"
-  },
-  "zh-hans": {
-    "en": "Simplified Chinese",
-    "zh-CN": "绠�浣撲腑鏂�"
-  },
-  "about": {
-    "en": "About",
-    "zh-CN": "鍏充簬"
-  },
-  "company": {
-    "en": "Company",
-    "zh-CN": "鎹偣"
-  },
-  "line": {
-    "en": "Line",
-    "zh-CN": "浜х嚎"
-  },
-
-  "personal": {
-    "en": "Personal",
-    "zh-CN": "涓汉"
-  },
-  "our": {
-    "en": "Our",
-    "zh-CN": "鎴戜滑"
-  },
-  "role": {
-    "en": "Role",
-    "zh-CN": "瑙掕壊"
-  },
-  "admin": {
-    "en": "Admin",
-    "zh-CN": "绠$悊鍛�"
-  },
-  "function": {
-    "en": "Function",
-    "zh-CN": "鍔熻兘"
-  },
-  "iMes": {
-    "en": "iMes System",
-    "zh-CN": "iMes 绯荤粺"
-  },
-  "logout": {
-    "en": "Logout",
-    "zh-CN": "閫�鍑虹櫥褰�"
-  },
-  "noPermissionMsg": {
-    "en": "Do not have permission to access the company {0}",
-    "zh-CN": "娌℃湁鎹偣{0}鐨勬潈闄�"
-  },
-
-  /* 鑿滃崟鐩稿叧*/
-  "production-related": {
-    "en": "Production out put and in storage",
-    "zh-CN": "鐢熶骇鍑哄叆搴�"
-  },
-  "putaway": {
-    "en": "Putaway",
-    "zh-CN": "鏉ユ枡鍏ュ簱"
-  },
-  "putaway2": {
-    "en": "Return PutOn",
-    "zh-CN": "閫�鏂欏叆搴�"
-  },
-  "putonshelf": {
-    "en": "Put On Shelf",
-    "zh-CN": "鎴愬搧鍏ュ簱"
-  },
-  "putonshelf2": {
-    "en": "Other PutOn",
-    "zh-CN": "鍏朵粬鍏ュ簱"
-  },
-  "offshelf": {
-    "en": "Off Shelf",
-    "zh-CN": "涓嬫灦"
-  },
-  "Production-stock": {
-    "en": "Production Stock",
-    "zh-CN": "鐢熶骇澶囨枡"
-  },
-  "requisition-sheet": {
-    "en": "Requisition Sheet",
-    "zh-CN": "鐢熶骇棰嗘枡"
-  },
-  "hierarchical-packaging": {
-    "en": "Hierarchical Packaging",
-    "zh-CN": "灞傜骇鍖呰"
-  },
-  "stocking": {
-    "en": "Stocking",
-    "zh-CN": "鐩樼偣"
-  },
-  "storage-query": {
-    "en": "Storage Query",
-    "zh-CN": "搴撳瓨鏌ヨ"
-  },
-  "split": {
-    "en": "Split",
-    "zh-CN": "鎷嗗寘"
-  },
-  "transfer": {
-    "en": "Transfer",
-    "zh-CN": "璋冩嫧"
-  },
-  "base-related": {
-    "en": "Material out put and in storage",
-    "zh-CN": "鏉ユ枡鍑哄叆搴�"
-  },
-  "incomming-checking": {
-    "en": "Inventroy Check",
-    "zh-CN": "鏉ユ枡娓呯偣"
-  },
-  "other-checking": {
-    "en": "Other Check",
-    "zh-CN": "鍏朵粬鍏ュ簱娓呯偣"
-  },
-  "return-checking": {
-    "en": "Return Check",
-    "zh-CN": "閫�鏂欐竻鐐�"
-  },
-  "fg-checking": {
-    "en": "FG Check",
-    "zh-CN": "鎴愬搧娓呯偣"
-  },
-  "fg-related": {
-    "en": "FG out put and in storage",
-    "zh-CN": "鎴愬搧鍑哄叆搴�"
-  },
-  "inv-related": {
-    "en": "Inventory Related",
-    "zh-CN": "搴撳瓨绠$悊"
-  },
-  "custSupplyChecking": {
-    "en": "Customer Supply Checking",
-    "zh-CN": "瀹緵鏂欐竻鐐�"
-  },
-  "ScannedRecord": {
-    "en": "Scanned barcode list",
-    "zh-CN": "宸叉壂鏉$爜"
-  },
-  "custSupplyIn": {
-    "en": "Customer Supply In Storage",
-    "zh-CN": "瀹緵鏂欏叆搴�"
-  },
-  "smt-production-management": {
-    "en": "SMT Production Management",
-    "zh-CN": "SMT鐢熶骇绠$悊"
-  }
-}
diff --git a/Tiger.Business/Language/Test.json b/Tiger.Business/Language/Test.json
deleted file mode 100644
index 0e0dcd2..0000000
--- a/Tiger.Business/Language/Test.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-
-}
\ No newline at end of file
diff --git a/Tiger.Business/Language/WMS/Count.json b/Tiger.Business/Language/WMS/Count.json
deleted file mode 100644
index 21fb5b8..0000000
--- a/Tiger.Business/Language/WMS/Count.json
+++ /dev/null
@@ -1,272 +0,0 @@
-{
-  "鎻愪氦": {
-    "en": "Submit",
-    "zh-CN": "鎻愪氦"
-  },
-  "鎿嶄綔": {
-    "en": "Operate",
-    "zh-CN": "鎿嶄綔"
-  },
-  "鎼滅储": {
-    "en": "Search",
-    "zh-CN": "鎼滅储"
-  },
-  "鍙栨秷": {
-    "en": "Cancel",
-    "zh-CN": "鍙栨秷"
-  },
-  "鐩樼偣鍗曞垪琛�": {
-    "en": "Count List",
-    "zh-CN": "鐩樼偣鍗曞垪琛�"
-  },
-  "鏌ョ湅浠诲姟璇︽儏": {
-    "en": "View Task Details",
-    "zh-CN": "鏌ョ湅浠诲姟璇︽儏"
-  },
-  "鐩樼偣绠$悊": {
-    "en": "Count Manage",
-    "zh-CN": "鐩樼偣绠$悊"
-  },
-  "鎿嶄綔鏃堕棿": {
-    "en": "DoTime",
-    "zh-CN": "鎿嶄綔鏃堕棿"
-  },
-  "杩欐槸鐩樼偣绠$悊椤甸潰銆�": {
-    "en": "This Is Count Manage Page",
-    "zh-CN": "杩欐槸鐩樼偣绠$悊椤甸潰銆�"
-  },
-  "姹囨�荤洏鐐规槑缁嗗垪琛�": {
-    "en": "Summary Detail List",
-    "zh-CN": "姹囨�荤洏鐐规槑缁嗗垪琛ㄣ��"
-  },
-  "鐗╁搧鐩樼偣鏄庣粏鍒楄〃": {
-    "en": "Item Detail List",
-    "zh-CN": "鐗╁搧鐩樼偣鏄庣粏鍒楄〃銆�"
-  },
-  "鍌ㄤ綅鐩樼偣鏄庣粏鍒楄〃": {
-    "en": "Location Detail List",
-    "zh-CN": "鍌ㄤ綅鐩樼偣鏄庣粏鍒楄〃銆�"
-  },
-  "鐩樼偣淇℃伅": {
-    "en": "Count Info",
-    "zh-CN": "鐩樼偣淇℃伅"
-  },
-  "鏂板鐩樼偣鍗�": {
-    "en": "Add Count",
-    "zh-CN": "鏂板鐩樼偣鍗�"
-  },
-  "鐩樼偣鏄庣粏": {
-    "en": "Count Detail",
-    "zh-CN": "鐩樼偣鏄庣粏"
-  },
-  "鍒涘缓鑰�": {
-    "en": "CreateUser",
-    "zh-CN": "鍒涘缓鑰�"
-  },
-  "鐩樼偣鍚姩": {
-    "en": "Start",
-    "zh-CN": "鍚姩"
-  },
-  "鐩樼偣鏆傚仠": {
-    "en": "Pause",
-    "zh-CN": "鏆傚仠"
-  },
-  "鐩樼偣缁撴潫": {
-    "en": "Stop",
-    "zh-CN": "缁撴潫"
-  },
-  "鐩樼偣浣滃簾": {
-    "en": "Cancel",
-    "zh-CN": "浣滃簾"
-  },
-  "鍚姩鎴愬姛": {
-    "en": "Start Success",
-    "zh-CN": "鍚姩鎴愬姛"
-  },
-  "宸叉殏鍋�": {
-    "en": "Paused",
-    "zh-CN": "宸叉殏鍋�"
-  },
-  "缁撴潫鎴愬姛": {
-    "en": "Stop Success",
-    "zh-CN": "缁撴潫鎴愬姛"
-  },
-  "浣滃簾鎴愬姛": {
-    "en": "Cancel Success",
-    "zh-CN": "浣滃簾鎴愬姛"
-  },
-  "鐢熸垚": {
-    "en": "Generate",
-    "zh-CN": "鐢熸垚"
-  },
-  "棰勮": {
-    "en": "Generate",
-    "zh-CN": "棰勮"
-  },
-  "宸茬敓鎴�": {
-    "en": "Generated",
-    "zh-CN": "宸茬敓鎴�"
-  },
-  "鐗╁搧鏄庣粏": {
-    "en": "Item Details",
-    "zh-CN": "鐗╁搧鏄庣粏"
-  },
-  "鍌ㄤ綅鏄庣粏": {
-    "en": "Location Details",
-    "zh-CN": "鍌ㄤ綅鏄庣粏"
-  },
-  "缁撴灉姹囨��": {
-    "en": "Results Summary",
-    "zh-CN": "缁撴灉姹囨��"
-  },
-  "鐗╂枡鍒楄〃": {
-    "en": "Item List",
-    "zh-CN": "鐗╂枡鍒楄〃"
-  },
-  "鏂板鐩樼偣": {
-    "en": "Add Count",
-    "zh-CN": "鏂板鐩樼偣"
-  },
-  "缂栬緫鐩樼偣": {
-    "en": "Edit Count",
-    "zh-CN": "缂栬緫鐩樼偣"
-  },
-  "鐩樼偣鍗曚繚瀛樻垚鍔�": {
-    "en": "Save Success",
-    "zh-CN": "淇濆瓨鎴愬姛"
-  },
-  "鐩樼偣鍗曟槑缁嗕繚瀛樻垚鍔�": {
-    "en": "Detil Save Seccess",
-    "zh-CN": "鏄庣粏淇濆瓨鎴愬姛"
-  },
-  //vue涓璬ata澶氳瑷�
-  "鍗曟嵁缂栫爜": {
-    "en": "CountNo",
-    "zh-CN": "鍗曟嵁缂栫爜"
-  },
-  "鐗╂枡鍚嶇О": {
-    "en": "ItemName",
-    "zh-CN": "鐗╂枡鍚嶇О"
-  },
-  "宸紓鏁伴噺": {
-    "en": "NotCountNumber",
-    "zh-CN": "宸紓鏁伴噺"
-  },
-  "搴撳瓨鏁伴噺": {
-    "en": "ItemNumber",
-    "zh-CN": "搴撳瓨鏁伴噺"
-  },
-  "鐩樼偣鍗曞彿": {
-    "en": "CountNumber",
-    "zh-CN": "鐩樼偣鍗曞彿"
-  },
-  "鐩樼偣鏁伴噺": {
-    "en": "CountNumber",
-    "zh-CN": "鐩樼偣鏁伴噺"
-  },
-  "ERP涓庡簱瀛樺樊寮傛暟閲�": {
-    "en": "NoterpAnditemNumber",
-    "zh-CN": "ERP涓庡簱瀛樺樊寮傛暟閲�"
-  },
-  "鏉$爜搴撳瓨鏁伴噺": {
-    "en": "BarcodeItemNumber",
-    "zh-CN": "鏉$爜搴撳瓨鏁伴噺"
-  },
-  "鏉$爜鐩樼偣鏁伴噺": {
-    "en": "BarcodeCountNumber",
-    "zh-CN": "鏉$爜鐩樼偣鏁伴噺"
-  },
-  "鐗╂枡缂栫爜": {
-    "en": "ItemCode",
-    "zh-CN": "鐗╂枡缂栫爜"
-  },
-  "鍌ㄤ綅浠g爜": {
-    "en": "LocationCode",
-    "zh-CN": "鍌ㄤ綅浠g爜"
-  },
-  "鏉$爜": {
-    "en": "BarCode",
-    "zh-CN": "鏉$爜"
-  },
-  "鐩樼偣妯″紡": {
-    "en": "CountMode",
-    "zh-CN": "鐩樼偣妯″紡"
-  },
-  "鐩樼偣绫诲瀷": {
-    "en": "CountType",
-    "zh-CN": "鐩樼偣绫诲瀷"
-  },
-  "闀滃儚鏃堕棿": {
-    "en": "MirrorDate",
-    "zh-CN": "闀滃儚鏃堕棿"
-  },
-  "浠撳簱": {
-    "en": "WareHouseCode",
-    "zh-CN": "浠撳簱"
-  },
-  "鐘舵��": {
-    "en": "Status",
-    "zh-CN": "鐘舵��"
-  },
-  "鐩樼偣寮�濮嬫椂闂�": {
-    "en": "BeginDate",
-    "zh-CN": "鐩樼偣寮�濮嬫椂闂�"
-  },
-  "鐩樼偣缁撴潫鏃堕棿": {
-    "en": "EndDate",
-    "zh-CN": "鐩樼偣缁撴潫鏃堕棿"
-  },
-  "澶囨敞": {
-    "en": "Remark",
-    "zh-CN": "澶囨敞"
-  },
-  "鐗╂枡缂栫爜鍒楄〃": {
-    "en": "ItemCodeList",
-    "zh-CN": "鐗╂枡缂栫爜鍒楄〃"
-  },
-  "鐗╂枡鎻忚堪": {
-    "en": "ItemDescribe",
-    "zh-CN": "鐗╂枡鎻忚堪"
-  },
-  "鏁伴噺": {
-    "en": "Number",
-    "zh-CN": "鏁伴噺"
-  },
-  "鏉$爜鏁伴噺": {
-    "en": "BarCodeNumber",
-    "zh-CN": "鏉$爜鏁伴噺"
-  },
-  "缁撴灉": {
-    "en": "Result",
-    "zh-CN": "缁撴灉"
-  },
-  "鍌ㄤ綅": {
-    "en": "LocationCode",
-    "zh-CN": "鍌ㄤ綅"
-  },
-  "ERP鏁伴噺": {
-    "en": "ERP_QTY",
-    "zh-CN": "ERP鏁伴噺"
-  },
-  "ERP浠撳簱": {
-    "en": "ERP_Warehouse",
-    "zh-CN": "ERP浠撳簱"
-  },
-  //渚嬪瓙
-  "妫�鏌ュ偍浣嶅垵濮嬪寲": {
-    "en": "Shelf[{0}] Rule Verify Exception",
-    "zh-CN": "璐ф灦[{0}]杩樻湁鏈笅鏋剁殑鐗╁搧锛屼笉鑳藉垵濮嬪寲锛�"
-  },
-  "灞�": {
-    "en": "Floor {0}",
-    "zh-CN": "{0}灞�"
-  },
-  "鎻愮ず": {
-    "en": "Prompt",
-    "zh-CN": "鎻愮ず"
-  },
-  "鏄惁鍒濆鍖栵紝閲嶆柊鐢熸垚鍌ㄤ綅": {
-    "en": "Regeneration Location",
-    "zh-CN": "鏄惁鍒濆鍖栵紝閲嶆柊鐢熸垚鍌ㄤ綅"
-  }
-}
\ No newline at end of file
diff --git a/Tiger.Business/Language/WMS/CustSupChk.json b/Tiger.Business/Language/WMS/CustSupChk.json
deleted file mode 100644
index 78e8c9d..0000000
--- a/Tiger.Business/Language/WMS/CustSupChk.json
+++ /dev/null
@@ -1,104 +0,0 @@
-{
-  "ScanItem": {
-    //"GetSuccess": {
-    //  "en": "Get barcode[{0}] inventory information success",
-    //  "zh-CN": "鑾峰彇鏉$爜[{0}]搴撳瓨淇℃伅鎴愬姛"
-    //},
-    //"GetUnPackSuccess": {
-    //  "en": "Get barcode[{0}] inventory information success, and do unpack from its packaging [{1}]",
-    //  "zh-CN": "瑙i櫎涓庣埗鍖呰鏉$爜[{1}]鍏崇郴鍚庯紝鑾峰彇鏉$爜[{0}]搴撳瓨淇℃伅鎴愬姛"
-    //},
-    "NotFound": {
-      "en": "Can not found the item code[{0}] information, please scan again",
-      "zh-CN": "鏈壘鍒扮墿鏂橻{0}]鐨勪俊鎭紝璇烽噸鏂版壂鎻�"
-    },
-    "NotQrCode": {
-      "en": "The scanned barcode[{0}] is not a QR code, please rescan",
-      "zh-CN": "鎵弿鐨勬潯鐮乕{0}]涓嶆槸浜岀淮鐮侊紝璇烽噸鏂版壂鎻�"
-    },
-    "ExistItem": {
-      "en": "Barcode[{0}] has been in store or checked, Do not allow duplicate scanning for storage",
-      "zh-CN": "鏉$爜[{0}]宸茬粡鍏ヨ繃搴撴垨鑰呭凡娓呯偣杩囷紝涓嶅厑璁搁噸澶嶆壂鎻忓叆搴�"
-    },
-    "NotExist": {
-      "en": "Warehouse[{0}] does not exists",
-      "zh-CN": "搴撲綅[{0}]涓嶅瓨鍦�"
-    },
-    "WhExist": {
-      "en": "Warehouse[{0}] already scanned, please scan the material qr code",
-      "zh-CN": "搴撲綅[{0}]宸茬粡鎵弿锛岃鎵弿鐗╂枡浜岀淮鐮�"
-    },
-    "SnEmptyFailure": {
-      "en": "Barcode cannot be empty",
-      "zh-CN": "鏉$爜涓嶈兘涓虹┖"
-    },
-    "WhEmptyFailure": {
-      "en": "Warehouse cannot be empty",
-      "zh-CN": "搴撲綅涓嶈兘涓虹┖"
-    },
-    "LocationEmptyFailure": {
-      "en": "Location cannot be empty",
-      "zh-CN": "鍌ㄤ綅涓嶈兘涓虹┖"
-    },
-    "LocationSingleFailure": {
-      "en": "Only one materail can be stored in this location",
-      "zh-CN": "鍌ㄤ綅鍙兘鍗曟斁涓�涓墿鏂�"
-    },
-    "ShelfEmptyFailure": {
-      "en": "Shelf cannot be empty",
-      "zh-CN": "璐ф灦涓嶈兘涓虹┖"
-    },
-    "BarcodeCounted": {
-      "en": "The barcode has been counted",
-      "zh-CN": "鏉$爜宸插仛杩囨竻鐐�"
-    },
-    "GetException": {
-      "en": "Get barcode[{0}] inventory information exception",
-      "zh-CN": "鑾峰彇鏉$爜[{0}]搴撳瓨淇℃伅寮傚父"
-    },
-    "ScanException": {
-      "en": "Scan barcode[{0}] review exception",
-      "zh-CN": "鎵弿鐗╂枡[{0}]澶嶆牳寮傚父"
-    },
-    "NotDataToSubmit": {
-      "en": "There is no data to submit",
-      "zh-CN": "娌℃湁鍙互鎻愪氦鐨勬竻鐐规暟鎹�"
-    },
-    "NotAllowIn": {
-      "en": "Do not allow split label to do counting, please scan again",
-      "zh-CN": "鎷嗗垎鎴枡鐨勬爣绛句笉鑳芥竻鐐癸紝璇烽噸鏂版壂鎻�"
-    },
-    "GetWhSuccess": {
-      "en": "Get warehouse code {0} success",
-      "zh-CN": "杩斿洖浠撳簱[{0}]鎴愬姛锛�"
-    },
-    "CountSuccess": {
-      "en": "The barcode[{0}] count success",
-      "zh-CN": "鏉$爜[{0}]娓呯偣鎴愬姛锛�"
-    },
-    "ShelfCanNotEmpty": {
-      "en": "Please enter or scan a valid shelf/location code",
-      "zh-CN": "璇疯緭鍏ユ垨鎵弿鏈夋晥鐨勮揣鏋�/鍌ㄤ綅鐮�"
-    },
-    "ShelfOrLocationDisabled": {
-      "en": "The scanned storage location is disabled",
-      "zh-CN": "鎵弿鐨勫簱浣嶆湭鍚敤"
-    },
-    "StatusException": {
-      "en": "Status [{0}] exception, please scan again",
-      "zh-CN": "鐘舵�乕{0}]寮傚父锛岃閲嶆柊鎵弿"
-    },
-    "NotCounted": {
-      "en": "The barcode [{0}] do not count, can not in store",
-      "zh-CN": "姝ょ墿鏂欐潯鐮乕{0}]鏈仛娓呯偣锛屼笉鑳藉叆搴�"
-    },
-    "NotGenerateBill": {
-      "en": "The barcode [{0}] do not generate bill number, can not in store",
-      "zh-CN": "姝ょ墿鏂欐潯鐮乕{0}]鏈敓鎴愬簱瀛樺崟鎹紝涓嶈兘鍏ュ簱"
-    },
-    "DiffQty": {
-      "en": "The barcode [{0}] quantity received is different from the counted quantity , can not in store",
-      "zh-CN": "姝ょ墿鏂欐潯鐮乕{0}]鍏ュ簱鏁伴噺涓庢竻鐐规暟閲忎笉鍚岋紝涓嶈兘鍏ュ簱"
-    }
-  }
-}
diff --git a/Tiger.Business/Language/WMS/InProductionReturn.json b/Tiger.Business/Language/WMS/InProductionReturn.json
deleted file mode 100644
index c95dd9f..0000000
--- a/Tiger.Business/Language/WMS/InProductionReturn.json
+++ /dev/null
@@ -1,100 +0,0 @@
-{
-  "ScanItem": {
-    "NotFound": {
-      "en": "Can not found the item code[{0}] information, please scan again",
-      "zh-CN": "鏈壘鍒扮墿鏂橻{0}]鐨勪俊鎭紝璇烽噸鏂版壂鎻�"
-    },
-    "ExistItem": {
-      "en": "Barcode[{0}] has been in store or checked, Do not allow duplicate scanning for storage",
-      "zh-CN": "鏉$爜[{0}]宸茬粡鍏ヨ繃搴撴垨鑰呭凡娓呯偣杩囷紝涓嶅厑璁搁噸澶嶆壂鎻忓叆搴�"
-    },
-    "NotExist": {
-      "en": "Barcode [{0}] does not exists in system",
-      "zh-CN": "鏉$爜[{0}]涓嶅瓨鍦ㄤ簬绯荤粺涓�"
-    },
-    "PoNotExist": {
-      "en": "Po number [{0}] does not exists in system",
-      "zh-CN": "閲囪喘鍗昜{0}]涓嶅瓨鍦ㄤ簬绯荤粺涓�"
-    },
-    "鎿嶄綔鏃堕棿": {
-      "en": "DoTime",
-      "zh-CN": "鎿嶄綔鏃堕棿"
-    },
-    "WhExist": {
-      "en": "Warehouse[{0}] already scanned, please scan the material qr code",
-      "zh-CN": "搴撲綅[{0}]宸茬粡鎵弿锛岃鎵弿鐗╂枡浜岀淮鐮�"
-    },
-    "SnEmptyFailure": {
-      "en": "Barcode cannot be empty",
-      "zh-CN": "鏉$爜涓嶈兘涓虹┖"
-    },
-    "WhEmptyFailure": {
-      "en": "Warehouse cannot be empty",
-      "zh-CN": "搴撲綅涓嶈兘涓虹┖"
-    },
-    "LocationEmptyFailure": {
-      "en": "Location cannot be empty",
-      "zh-CN": "鍌ㄤ綅涓嶈兘涓虹┖"
-    },
-    "LocationSingleFailure": {
-      "en": "Only one materail can be stored in this location",
-      "zh-CN": "鍌ㄤ綅鍙兘鍗曟斁涓�涓墿鏂�"
-    },
-    "ShelfEmptyFailure": {
-      "en": "Shelf cannot be empty",
-      "zh-CN": "璐ф灦涓嶈兘涓虹┖"
-    },
-    "BarcodeCounted": {
-      "en": "The barcode has been counted",
-      "zh-CN": "鏉$爜宸插仛杩囨竻鐐�"
-    },
-    "GetException": {
-      "en": "Get barcode[{0}] inventory information exception",
-      "zh-CN": "鑾峰彇鏉$爜[{0}]搴撳瓨淇℃伅寮傚父"
-    },
-    "ScanException": {
-      "en": "Scan barcode[{0}] review exception",
-      "zh-CN": "鎵弿鐗╂枡[{0}]澶嶆牳寮傚父"
-    },
-    "NotDataToSubmit": {
-      "en": "There is no data to submit",
-      "zh-CN": "娌℃湁鍙互鎻愪氦鐨勬竻鐐规暟鎹�"
-    },
-    "NotAllowIn": {
-      "en": "Do not allow split label to do counting, please scan again",
-      "zh-CN": "鎷嗗垎鎴枡鐨勬爣绛句笉鑳芥竻鐐癸紝璇烽噸鏂版壂鎻�"
-    },
-    "GetWhSuccess": {
-      "en": "Get warehouse code {0} success",
-      "zh-CN": "杩斿洖浠撳簱[{0}]鎴愬姛锛�"
-    },
-    "CountSuccess": {
-      "en": "The barcode[{0}] count success",
-      "zh-CN": "鏉$爜[{0}]娓呯偣鎴愬姛锛�"
-    },
-    "ShelfCanNotEmpty": {
-      "en": "Please enter or scan a valid shelf/location code",
-      "zh-CN": "璇疯緭鍏ユ垨鎵弿鏈夋晥鐨勮揣鏋�/鍌ㄤ綅鐮�"
-    },
-    "ShelfOrLocationDisabled": {
-      "en": "The scanned storage location is disabled",
-      "zh-CN": "鎵弿鐨勫簱浣嶆湭鍚敤"
-    },
-    "StatusException": {
-      "en": "Status [{0}] exception, please scan again",
-      "zh-CN": "鐘舵�乕{0}]寮傚父锛岃閲嶆柊鎵弿"
-    },
-    "NotCounted": {
-      "en": "The barcode [{0}] do not count, can not in store",
-      "zh-CN": "姝ょ墿鏂欐潯鐮乕{0}]鏈仛娓呯偣锛屼笉鑳藉叆搴�"
-    },
-    "NotGenerateBill": {
-      "en": "The barcode [{0}] do not generate bill number, can not in store",
-      "zh-CN": "姝ょ墿鏂欐潯鐮乕{0}]鏈敓鎴愬簱瀛樺崟鎹紝涓嶈兘鍏ュ簱"
-    },
-    "DiffQty": {
-      "en": "The barcode [{0}] quantity received is different from the counted quantity , can not in store",
-      "zh-CN": "姝ょ墿鏂欐潯鐮乕{0}]鍏ュ簱鏁伴噺涓庢竻鐐规暟閲忎笉鍚岋紝涓嶈兘鍏ュ簱"
-    }
-  }
-}
diff --git a/Tiger.Business/Language/WMS/InReceipt.json b/Tiger.Business/Language/WMS/InReceipt.json
deleted file mode 100644
index e4d21c6..0000000
--- a/Tiger.Business/Language/WMS/InReceipt.json
+++ /dev/null
@@ -1,96 +0,0 @@
-{
-  "ScanItem": {
-    "NotFound": {
-      "en": "Can not found the item code[{0}] information, please scan again",
-      "zh-CN": "鏈壘鍒扮墿鏂橻{0}]鐨勪俊鎭紝璇烽噸鏂版壂鎻�"
-    },
-    "ExistItem": {
-      "en": "Barcode[{0}] has been in store or checked, Do not allow duplicate scanning for storage",
-      "zh-CN": "鏉$爜[{0}]宸茬粡鍏ヨ繃搴撴垨鑰呭凡娓呯偣杩囷紝涓嶅厑璁搁噸澶嶆壂鎻忓叆搴�"
-    },
-    "NotExist": {
-      "en": "Barcode [{0}] does not exists in system",
-      "zh-CN": "鏉$爜[{0}]涓嶅瓨鍦ㄤ簬绯荤粺涓�"
-    },
-    "PoNotExist": {
-      "en": "Po number [{0}] does not exists in system",
-      "zh-CN": "閲囪喘鍗昜{0}]涓嶅瓨鍦ㄤ簬绯荤粺涓�"
-    },
-    "鎿嶄綔鏃堕棿": {
-      "en": "DoTime",
-      "zh-CN": "鎿嶄綔鏃堕棿"
-    },
-    "WhExist": {
-      "en": "Warehouse[{0}] already scanned, please scan the material qr code",
-      "zh-CN": "搴撲綅[{0}]宸茬粡鎵弿锛岃鎵弿鐗╂枡浜岀淮鐮�"
-    },
-    "SnEmptyFailure": {
-      "en": "Barcode cannot be empty",
-      "zh-CN": "鏉$爜涓嶈兘涓虹┖"
-    },
-    "WhEmptyFailure": {
-      "en": "Warehouse cannot be empty",
-      "zh-CN": "搴撲綅涓嶈兘涓虹┖"
-    },
-    "LocationEmptyFailure": {
-      "en": "Location cannot be empty",
-      "zh-CN": "鍌ㄤ綅涓嶈兘涓虹┖"
-    },
-    "ShelfEmptyFailure": {
-      "en": "Shelf cannot be empty",
-      "zh-CN": "璐ф灦涓嶈兘涓虹┖"
-    },
-    "BarcodeCounted": {
-      "en": "The barcode has been counted",
-      "zh-CN": "鏉$爜宸插仛杩囨竻鐐�"
-    },
-    "GetException": {
-      "en": "Get barcode[{0}] inventory information exception",
-      "zh-CN": "鑾峰彇鏉$爜[{0}]搴撳瓨淇℃伅寮傚父"
-    },
-    "ScanException": {
-      "en": "Scan barcode[{0}] review exception",
-      "zh-CN": "鎵弿鐗╂枡[{0}]澶嶆牳寮傚父"
-    },
-    "NotDataToSubmit": {
-      "en": "There is no data to submit",
-      "zh-CN": "娌℃湁鍙互鎻愪氦鐨勬竻鐐规暟鎹�"
-    },
-    "NotAllowIn": {
-      "en": "Do not allow split label to do counting, please scan again",
-      "zh-CN": "鎷嗗垎鎴枡鐨勬爣绛句笉鑳芥竻鐐癸紝璇烽噸鏂版壂鎻�"
-    },
-    "GetWhSuccess": {
-      "en": "Get warehouse code {0} success",
-      "zh-CN": "杩斿洖浠撳簱[{0}]鎴愬姛锛�"
-    },
-    "CountSuccess": {
-      "en": "The barcode[{0}] count success",
-      "zh-CN": "鏉$爜[{0}]娓呯偣鎴愬姛锛�"
-    },
-    "ShelfCanNotEmpty": {
-      "en": "Please enter or scan a valid shelf/location code",
-      "zh-CN": "璇疯緭鍏ユ垨鎵弿鏈夋晥鐨勮揣鏋�/鍌ㄤ綅鐮�"
-    },
-    "ShelfOrLocationDisabled": {
-      "en": "The scanned storage location is disabled",
-      "zh-CN": "鎵弿鐨勫簱浣嶆湭鍚敤"
-    },
-    "StatusException": {
-      "en": "Status [{0}] exception, please scan again",
-      "zh-CN": "鐘舵�乕{0}]寮傚父锛岃閲嶆柊鎵弿"
-    },
-    "NotCounted": {
-      "en": "The barcode [{0}] do not count, can not in store",
-      "zh-CN": "姝ょ墿鏂欐潯鐮乕{0}]鏈仛娓呯偣锛屼笉鑳藉叆搴�"
-    },
-    "NotGenerateBill": {
-      "en": "The barcode [{0}] do not generate bill number, can not in store",
-      "zh-CN": "姝ょ墿鏂欐潯鐮乕{0}]鏈敓鎴愬簱瀛樺崟鎹紝涓嶈兘鍏ュ簱"
-    },
-    "DiffQty": {
-      "en": "The barcode [{0}] quantity received is different from the counted quantity , can not in store",
-      "zh-CN": "姝ょ墿鏂欐潯鐮乕{0}]鍏ュ簱鏁伴噺涓庢竻鐐规暟閲忎笉鍚岋紝涓嶈兘鍏ュ簱"
-    }
-  }
-}
diff --git a/Tiger.Business/Language/WMS/Inspection.json b/Tiger.Business/Language/WMS/Inspection.json
deleted file mode 100644
index e4d0d89..0000000
--- a/Tiger.Business/Language/WMS/Inspection.json
+++ /dev/null
@@ -1,74 +0,0 @@
-{
-  "閫佹鍗曞垪琛�": {
-    "en": "InspectionList",
-    "zh-CN": "閫佹鍗曞垪琛�"
-  },
-  "鍗曟嵁浠g爜": {
-    "en": "DocumentCode",
-    "zh-CN": "鍗曟嵁浠g爜"
-  },
-  "鎺ユ敹鏁伴噺": {
-    "en": "ReceiveNumber",
-    "zh-CN": "鎺ユ敹鏁伴噺"
-  },
-  "澶嶆牳鏁伴噺": {
-    "en": "ReviewNumber",
-    "zh-CN": "澶嶆牳鏁伴噺"
-  },
-  "鎶芥牱鏁伴噺": {
-    "en": "SampleNumber",
-    "zh-CN": "鎶芥牱鏁伴噺"
-  },
-  "閫氳繃鏁伴噺": {
-    "en": "SamplePassNumber",
-    "zh-CN": "閫氳繃鏁伴噺"
-  },
-  "鎿嶄綔鏃堕棿": {
-    "en": "DoTime",
-    "zh-CN": "鎿嶄綔鏃堕棿"
-  },
-  "T100鍗曟嵁浠g爜": {
-    "en": "DoTime",
-    "zh-CN": "鎿嶄綔鏃堕棿"
-  },
-  "鎶芥牱瀹屾垚鏁伴噺": {
-    "en": "SamplEngNumber",
-    "zh-CN": "鎶芥牱瀹屾垚鏁伴噺"
-  },
-  "寮�濮嬫暟閲�": {
-    "en": "BeginNumber",
-    "zh-CN": "寮�濮嬫暟閲�"
-  },
-  "缁撴潫鏁伴噺": {
-    "en": "EndNumber",
-    "zh-CN": "缁撴潫鏁伴噺"
-  },
-  "閲嶅ぇ缂洪櫡": {
-    "en": "FatalNumber",
-    "zh-CN": "閲嶅ぇ缂洪櫡"
-  },
-  "涓ラ噸缂洪櫡鏁伴噺": {
-    "en": "SeriousNumber",
-    "zh-CN": "涓ラ噸缂洪櫡鏁伴噺Number"
-  },
-  "涓�鑸己闄锋暟閲�": {
-    "en": "CommonlyNumber",
-    "zh-CN": "涓�鑸己闄锋暟閲�"
-  },
-  "杞诲井缂洪櫡鏁伴噺": {
-    "en": "SlightNumber",
-    "zh-CN": "杞诲井缂洪櫡鏁伴噺"
-  },
-  "妫�楠屾暟閲�": {
-    "en": "InspectNumber",
-    "zh-CN": "妫�楠屾暟閲�"
-  },
-  "鎷掔粷鏁伴噺": {
-    "en": "RejectNumber",
-    "zh-CN": "鎷掔粷鏁伴噺"
-  },
-  "鍏ュ簱鏁伴噺": {
-    "en": "InstockNumber",
-    "zh-CN": "鍏ュ簱鏁伴噺"
-  }
-}
\ No newline at end of file
diff --git a/Tiger.Business/Language/WMS/Material.json b/Tiger.Business/Language/WMS/Material.json
deleted file mode 100644
index ced7afd..0000000
--- a/Tiger.Business/Language/WMS/Material.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "鍗曟嵁浠g爜": {
-    "en": "Document Code",
-    "zh-CN": "鍗曟嵁浠g爜"
-  },
-  "鍗曟嵁鏃ユ湡": {
-    "en": "Document Date",
-    "zh-CN": "鍗曟嵁鏃ユ湡"
-  }
-}
\ No newline at end of file
diff --git a/Tiger.Business/Language/WMS/Materialreq.json b/Tiger.Business/Language/WMS/Materialreq.json
deleted file mode 100644
index 2241305..0000000
--- a/Tiger.Business/Language/WMS/Materialreq.json
+++ /dev/null
@@ -1,230 +0,0 @@
-{
-  "鍗曟嵁浠g爜": {
-    "en": "Document Code",
-    "zh-CN": "鍗曟嵁浠g爜"
-  },
-  "鍗曟嵁鏃ユ湡": {
-    "en": "Document Date",
-    "zh-CN": "鍗曟嵁鏃ユ湡"
-  },
-  "鍗曟嵁绫诲瀷": {
-    "en": "Document Type",
-    "zh-CN": "鍗曟嵁绫诲瀷"
-  },
-  "鐘舵��": {
-    "en": "Status",
-    "zh-CN": "鐘舵��"
-  },
-  "閲囪喘": {
-    "en": "Procure",
-    "zh-CN": "閲囪喘"
-  },
-  "涓嶅瓨鍦�": {
-    "en": "Absent",
-    "zh-CN": "涓嶅瓨鍦�"
-  },
-  "閫佽揣涓�": {
-    "en": "Deliver",
-    "zh-CN": "閫佽揣涓�"
-  },
-  "寰呮楠�": {
-    "en": "PendingInspect",
-    "zh-CN": "寰呮楠�"
-  },
-  "寰呭叆搴�": {
-    "en": "PendingIn",
-    "zh-CN": "寰呭叆搴�"
-  },
-  "鍦ㄥ簱涓�": {
-    "en": "InStore",
-    "zh-CN": "鍦ㄥ簱涓�"
-  },
-  "宸蹭笅鏋�": {
-    "en": "OffShelf",
-    "zh-CN": "宸蹭笅鏋�"
-  },
-  "宸插彂鏂�": {
-    "en": "IssuedMat",
-    "zh-CN": "宸插彂鏂�"
-  },
-  "宸蹭笂鏂�": {
-    "en": "Loaded",
-    "zh-CN": "宸蹭笂鏂�"
-  },
-  "宸茶�楀敖": {
-    "en": "Exhausted",
-    "zh-CN": "宸茶�楀敖"
-  },
-  "鎿嶄綔鏃堕棿": {
-    "en": "DoTime",
-    "zh-CN": "鎿嶄綔鏃堕棿"
-  },
-  "ERP鐘舵��": {
-    "en": "ErpStatus",
-    "zh-CN": "ERP鐘舵��"
-  },
-  "ERP鎻愮ず淇℃伅": {
-    "en": "ErpInfo",
-    "zh-CN": "ERP鎻愮ず淇℃伅"
-  },
-  "T100鍗曟嵁浠g爜": {
-    "en": " T100 BillCode",
-    "zh-CN": "T100鍗曟嵁浠g爜"
-  },
-  "濮斿": {
-    "en": "Outsourcing",
-    "zh-CN": "濮斿"
-  },
-  "鑷埗": {
-    "en": "Self-Control",
-    "zh-CN": "鑷埗"
-  },
-  "鍒濆鍖�": {
-    "en": "Init",
-    "zh-CN": "鍒濆鍖�"
-  },
-  "娓呯偣涓�": {
-    "en": "Inventory",
-    "zh-CN": "娓呯偣涓�"
-  },
-  "浣滀笟涓�": {
-    "en": "Working",
-    "zh-CN": "浣滀笟涓�"
-  },
-  "瓒呭彂": {
-    "en": "Exceed",
-    "zh-CN": "瓒呭彂"
-  },
-  "瀹屾垚": {
-    "en": "Complete",
-    "zh-CN": "瀹屾垚"
-  },
-  "浠撳簱鍚嶇О": {
-    "en": "WareHouse",
-    "zh-CN": "浠撳簱鍚嶇О"
-  },
-  "鍒涘缓浜�": {
-    "en": "CreateUser",
-    "zh-CN": "鍒涘缓浜�"
-  },
-  "棰嗘枡鍗曞垪琛�": {
-    "en": "Materialreq List",
-    "zh-CN": "棰嗘枡鍗曞垪琛�"
-  },
-  "鎿嶄綔": {
-    "en": "Operate",
-    "zh-CN": "鎿嶄綔"
-  },
-  "鏌ョ湅鍗曟嵁璇︽儏": {
-    "en": "View Document Detail",
-    "zh-CN": "鏌ョ湅鍗曟嵁璇︽儏"
-  },
-  "杩欐槸棰嗘枡鍗曡鎯呴〉闈€��": {
-    "en": "This is Materialreq Detail Page.",
-    "zh-CN": "杩欐槸棰嗘枡鍗曡鎯呴〉闈€��"
-  },
-  "鍗曟嵁璇︽儏": {
-    "en": "Document Detail",
-    "zh-CN": "鍗曟嵁璇︽儏"
-  },
-  "鏉$爜璇︽儏": {
-    "en": "BarCode Detail",
-    "zh-CN": "鏉$爜璇︽儏"
-  },
-  "閲嶆柊杩囪处": {
-    "en": "Repost",
-    "zh-CN": "閲嶆柊杩囪处"
-  },
-  "宸叉墜宸ヨ繃璐�": {
-    "en": "Manually Posted",
-    "zh-CN": "宸叉墜鍔ㄨ繃璐�"
-  },
-  "鐗╂枡缂栫爜": {
-    "en": "ItemCoee",
-    "zh-CN": "鐗╂枡缂栫爜"
-  },
-  "闇�姹傛暟閲�": {
-    "en": "Demand Number",
-    "zh-CN": "闇�姹傛暟閲�"
-  },
-  "搴撳瓨鏁伴噺": {
-    "en": "Item Number",
-    "zh-CN": "搴撳瓨鏁伴噺"
-  },
-  "鍙戞枡鏁伴噺": {
-    "en": " Alloc Qty",
-    "zh-CN": "鍙戞枡鏁伴噺"
-  },
-  "鍗曟嵁璇︽儏鍒楄〃": {
-    "en": "Document Detail List",
-    "zh-CN": "鍗曟嵁璇︽儏鍒楄〃"
-  },
-  "鏉$爜璇︽儏鍒楄〃": {
-    "en": "BarCode Detail List",
-    "zh-CN": "鏉$爜璇︽儏鍒楄〃"
-  },
-  "鏉$爜": {
-    "en": "BarCode",
-    "zh-CN": "鏉$爜"
-  },
-  "搴忓彿": {
-    "en": "No",
-    "zh-CN": "搴忓彿"
-  },
-  "鏂欏彿": {
-    "en": "ItemNumber",
-    "zh-CN": "鏂欏彿"
-  },
-  "鐗╂枡鎻忚堪": {
-    "en": "MarterielDes",
-    "zh-CN": "鐗╂枡鎻忚堪"
-  },
-  "浠撳簱": {
-    "en": "WareHouse",
-    "zh-CN": "浠撳簱"
-  },
-  "宸插彂鏁伴噺": {
-    "en": "IssuedNumber",
-    "zh-CN": "宸插彂鏁伴噺"
-  },
-  "娆犲彂鏁伴噺": {
-    "en": "OweNumber",
-    "zh-CN": "娆犲彂鏁伴噺"
-  },
-  "鍒涘缓鏃堕棿": {
-    "en": "CreateTime",
-    "zh-CN": "鍒涘缓鏃堕棿"
-  },
-  "鐗╂枡鍚嶇О": {
-    "en": "ItemName",
-    "zh-CN": "鐗╂枡鍚嶇О"
-  },
-  "淇敼鏃堕棿": {
-    "en": "UpdateTime",
-    "zh-CN": "淇敼鏃堕棿"
-  },
-  "棰嗘枡鍗曠殑璧勬枡": {
-    "en": "Materialreq {0} Information",
-    "zh-CN": "棰嗘枡鍗晎0}鐨勮祫鏂�"
-  },
-  "鏌ョ湅鏉$爜璇︽儏": {
-    "en": "View BarCode Detail",
-    "zh-CN": "鏌ョ湅鏉$爜璇︽儏"
-  },
-  "璇︽儏锛氬崟鎹�": {
-    "en": "Detail:Document",
-    "zh-CN": "璇︽儏锛氬崟鎹�"
-  },
-  "鐢熶骇鏃ユ湡": {
-    "en": "PROD_DATE",
-    "zh-CN": "鐢熶骇鏃ユ湡"
-  },
-  "渚涘簲鍟嗘枡鍙�": {
-    "en": "SUPP_ITEM_CODE",
-    "zh-CN": "渚涘簲鍟嗘枡鍙�"
-  },
-  "鎵规鍙�": {
-    "en": "SUPP_LOTNO",
-    "zh-CN": "鎵规鍙�"
-  }
-}
\ No newline at end of file
diff --git a/Tiger.Business/Language/WMS/Otheroutorder.json b/Tiger.Business/Language/WMS/Otheroutorder.json
deleted file mode 100644
index 731eb9e..0000000
--- a/Tiger.Business/Language/WMS/Otheroutorder.json
+++ /dev/null
@@ -1,179 +0,0 @@
-{
-  "鍗曟嵁浠g爜": {
-    "en": "Document Code",
-    "zh-CN": "鍗曟嵁浠g爜"
-  },
-  "鍗曟嵁鏃ユ湡": {
-    "en": "Document Date",
-    "zh-CN": "鍗曟嵁鏃ユ湡"
-  },
-  "鍒涘缓鏃堕棿": {
-    "en": "CreateTime",
-    "zh-CN": "鍒涘缓鏃堕棿"
-  },
-  "鐘舵��": {
-    "en": "Status",
-    "zh-CN": "鐘舵��"
-  },
-  "鏂板": {
-    "en": "Add",
-    "zh-CN": "鏂板"
-  },
-  "宸插彂鏁伴噺": {
-    "en": "IssuedNumber",
-    "zh-CN": "宸插彂鏁伴噺"
-  },
-  "浣滀笟涓�": {
-    "en": "Working",
-    "zh-CN": "浣滀笟涓�"
-  },
-  "鎿嶄綔鏃堕棿": {
-    "en": "DoTime",
-    "zh-CN": "鎿嶄綔鏃堕棿"
-  },
-  "瀹屾垚": {
-    "en": "Complete",
-    "zh-CN": "瀹屾垚"
-  },
-  "浠撳簱鍚嶇О": {
-    "en": "WareHouse",
-    "zh-CN": "浠撳簱鍚嶇О"
-  },
-  "鍒涘缓浜�": {
-    "en": "CreateUser",
-    "zh-CN": "鍒涘缓浜�"
-  },
-  "淇敼鏃堕棿": {
-    "en": "CreateUser",
-    "zh-CN": "鍒涘缓浜�"
-  },
-  "鍙戝嚭鏁伴噺": {
-    "en": "OutQty",
-    "zh-CN": "鍙戝嚭鏁伴噺"
-  },
-  "鍏朵粬鍑哄簱鍗曞垪琛�": {
-    "en": "Ortheroutorder List",
-    "zh-CN": "鍏朵粬鍑哄簱鍗曞垪琛�"
-  },
-  "鎿嶄綔": {
-    "en": "Operate",
-    "zh-CN": "鎿嶄綔"
-  },
-  "鏌ョ湅鍗曟嵁璇︽儏": {
-    "en": "View Document Detail",
-    "zh-CN": "鏌ョ湅鍗曟嵁璇︽儏"
-  },
-  "杩欐槸鍏朵粬鍑哄簱鍗曡鎯呴〉闈€��": {
-    "en": "This is Ortheroutorder Detail Page.",
-    "zh-CN": "杩欐槸鍏朵粬鍑哄簱鍗曡鎯呴〉闈€��"
-  },
-  "鍗曟嵁璇︽儏": {
-    "en": "Document Detail",
-    "zh-CN": "鍗曟嵁璇︽儏"
-  },
-  "鏉$爜璇︽儏": {
-    "en": "BarCode Detail",
-    "zh-CN": "鏉$爜璇︽儏"
-  },
-  "鐗╂枡缂栫爜": {
-    "en": "ItemCoee",
-    "zh-CN": "鐗╂枡缂栫爜"
-  },
-  "闇�姹傛暟閲�": {
-    "en": "Demand Number",
-    "zh-CN": "闇�姹傛暟閲�"
-  },
-  "鏁伴噺": {
-    "en": "Number",
-    "zh-CN": "鏁伴噺"
-  },
-  "鍗曟嵁璇︽儏鍒楄〃": {
-    "en": "Document Detail List",
-    "zh-CN": "鍗曟嵁璇︽儏鍒楄〃"
-  },
-  "鏉$爜璇︽儏鍒楄〃": {
-    "en": "BarCode Detail List",
-    "zh-CN": "鏉$爜璇︽儏鍒楄〃"
-  },
-  "鏉$爜": {
-    "en": "BarCode",
-    "zh-CN": "鏉$爜"
-  },
-  "鍏朵粬鍑哄簱鍗曠殑璧勬枡": {
-    "en": "Otheroutorder {0} Information",
-    "zh-CN": "鍏朵粬鍑哄簱鍗晎0}鐨勮祫鏂�"
-  },
-  "鏌ョ湅鏉$爜璇︽儏": {
-    "en": "View BarCode Detail",
-    "zh-CN": "鏌ョ湅鏉$爜璇︽儏"
-  },
-  "璇︽儏锛氬崟鎹�": {
-    "en": "Detail:Document",
-    "zh-CN": "璇︽儏锛氬崟鎹�"
-  },
-  "鐗╂枡鍚嶇О": {
-    "en": "ItemName",
-    "zh-CN": "鐗╂枡鍚嶇О"
-  },
-  "娆犲彂鏁伴噺": {
-    "en": "OweNumber",
-    "zh-CN": "娆犲彂鏁伴噺"
-  },
-  "瀹炲彂鏁伴噺": {
-    "en": "IssuedQuantity",
-    "zh-CN": "瀹炲彂鏁伴噺"
-  },
-  "搴忓彿": {
-    "en": "No",
-    "zh-CN": "搴忓彿"
-  },
-  "涓嶅瓨鍦�": {
-    "en": "Absent",
-    "zh-CN": "涓嶅瓨鍦�"
-  },
-  "閫佽揣涓�": {
-    "en": "Deliver",
-    "zh-CN": "閫佽揣涓�"
-  },
-  "寰呮楠�": {
-    "en": "PendingInspect",
-    "zh-CN": "寰呮楠�"
-  },
-  "寰呭叆搴�": {
-    "en": "PendingIn",
-    "zh-CN": "寰呭叆搴�"
-  },
-  "鍦ㄥ簱涓�": {
-    "en": "InStore",
-    "zh-CN": "鍦ㄥ簱涓�"
-  },
-  "宸蹭笅鏋�": {
-    "en": "OffShelf",
-    "zh-CN": "宸蹭笅鏋�"
-  },
-  "宸插彂鏂�": {
-    "en": "IssuedMat",
-    "zh-CN": "宸插彂鏂�"
-  },
-  "宸蹭笂鏂�": {
-    "en": "Loaded",
-    "zh-CN": "宸蹭笂鏂�"
-  },
-  "宸茶�楀敖": {
-    "en": "Exhausted",
-    "zh-CN": "宸茶�楀敖"
-  },
-  "T100鍗曟嵁浠g爜": {
-    "en": "DoTime",
-    "zh-CN": "鎿嶄綔鏃堕棿"
-  },
-  "宸查��鏂�": {
-    "en": "Returned",
-    "zh-CN": "宸查��鏂�"
-  },
-  "宸插彂璐�": {
-    "en": "Shipped",
-    "zh-CN": "宸插彂璐�"
-  }
-
-}
\ No newline at end of file
diff --git a/Tiger.Business/Language/WMS/ProdMReq.json b/Tiger.Business/Language/WMS/ProdMReq.json
deleted file mode 100644
index c4fdb3e..0000000
--- a/Tiger.Business/Language/WMS/ProdMReq.json
+++ /dev/null
@@ -1,110 +0,0 @@
-{
-  "ScanItem": {
-    "NotFound": {
-      "en": "Can not found the item code[{0}] information, please scan again",
-      "zh-CN": "鏈壘鍒扮墿鏂橻{0}]鐨勪俊鎭紝璇烽噸鏂版壂鎻�"
-    },
-    "ExistItem": {
-      "en": "Barcode[{0}] has been in store or checked, Do not allow duplicate scanning for storage",
-      "zh-CN": "鏉$爜[{0}]宸茬粡鍏ヨ繃搴撴垨鑰呭凡娓呯偣杩囷紝涓嶅厑璁搁噸澶嶆壂鎻忓叆搴�"
-    },
-    "NotExist": {
-      "en": "Warehouse[{0}] does not exists",
-      "zh-CN": "搴撲綅[{0}]涓嶅瓨鍦�"
-    },
-    "WhExist": {
-      "en": "Warehouse[{0}] already scanned, please scan the material qr code",
-      "zh-CN": "搴撲綅[{0}]宸茬粡鎵弿锛岃鎵弿鐗╂枡浜岀淮鐮�"
-    },
-    "SnEmptyFailure": {
-      "en": "Barcode cannot be empty",
-      "zh-CN": "鏉$爜涓嶈兘涓虹┖"
-    },
-    "WhEmptyFailure": {
-      "en": "Warehouse cannot be empty",
-      "zh-CN": "搴撲綅涓嶈兘涓虹┖"
-    },
-    "鎿嶄綔鏃堕棿": {
-      "en": "DoTime",
-      "zh-CN": "鎿嶄綔鏃堕棿"
-    },
-    "T100鍗曟嵁浠g爜": {
-      "en": "DoTime",
-      "zh-CN": "鎿嶄綔鏃堕棿"
-    },
-    "LocationEmptyFailure": {
-      "en": "Location cannot be empty",
-      "zh-CN": "鍌ㄤ綅涓嶈兘涓虹┖"
-    },
-    "ShelfEmptyFailure": {
-      "en": "Shelf cannot be empty",
-      "zh-CN": "璐ф灦涓嶈兘涓虹┖"
-    },
-    "BarcodeCounted": {
-      "en": "The barcode has been counted",
-      "zh-CN": "鏉$爜宸插仛杩囨竻鐐�"
-    },
-    "GetException": {
-      "en": "Get barcode[{0}] inventory information exception",
-      "zh-CN": "鑾峰彇鏉$爜[{0}]搴撳瓨淇℃伅寮傚父"
-    },
-    "LocationIsNull": {
-      "en": "Barcode[{0}] inventory information exception: Location is null, please put on shelf first.(Location Id: {1})",
-      "zh-CN": "鏉$爜[{0}]搴撳瓨淇℃伅寮傚父: 娌℃湁鍌ㄤ綅淇℃伅锛岃鍏堜笂鏋跺悗鍐嶆壂鎻�(鍌ㄤ綅Id: {1})"
-    },
-    "ItemCodeNotExistsOrNotActive": {
-      "en": "The material code[{0}] not exists or not active",
-      "zh-CN": "鐗╂枡缂栫爜[{0}]涓嶅瓨鍦ㄦ垨鑰呰鐗╂枡鏈惎鐢�"
-    },
-    "ScanException": {
-      "en": "Scan barcode[{0}] review exception",
-      "zh-CN": "鎵弿鐗╂枡[{0}]澶嶆牳寮傚父"
-    },
-    "NotDataToSubmit": {
-      "en": "There is no data to submit",
-      "zh-CN": "娌℃湁鍙互鎻愪氦鐨勬竻鐐规暟鎹�"
-    },
-    "NotAllowIn": {
-      "en": "Do not allow split label to do counting, please scan again",
-      "zh-CN": "鎷嗗垎鎴枡鐨勬爣绛句笉鑳芥竻鐐癸紝璇烽噸鏂版壂鎻�"
-    },
-    "GetWhSuccess": {
-      "en": "Get warehouse code {0} success",
-      "zh-CN": "杩斿洖浠撳簱[{0}]鎴愬姛锛�"
-    },
-    "CountSuccess": {
-      "en": "The barcode[{0}] count success",
-      "zh-CN": "鏉$爜[{0}]娓呯偣鎴愬姛锛�"
-    },
-    "ShelfCanNotEmpty": {
-      "en": "Please enter or scan a valid shelf/location code",
-      "zh-CN": "璇疯緭鍏ユ垨鎵弿鏈夋晥鐨勮揣鏋�/鍌ㄤ綅鐮�"
-    },
-    "ShelfOrLocationDisabled": {
-      "en": "The scanned storage location is disabled",
-      "zh-CN": "鎵弿鐨勫簱浣嶆湭鍚敤"
-    },
-    "StatusException": {
-      "en": "Status [{0}] exception, please scan again",
-      "zh-CN": "鐘舵�乕{0}]寮傚父锛岃閲嶆柊鎵弿"
-    },
-    "NotCounted": {
-      "en": "The barcode [{0}] do not count, can not in store",
-      "zh-CN": "姝ょ墿鏂欐潯鐮乕{0}]鏈仛娓呯偣锛屼笉鑳藉叆搴�"
-    },
-    "NotGenerateBill": {
-      "en": "The barcode [{0}] do not generate bill number, can not in store",
-      "zh-CN": "姝ょ墿鏂欐潯鐮乕{0}]鏈敓鎴愬簱瀛樺崟鎹紝涓嶈兘鍏ュ簱"
-    },
-    "DiffQty": {
-      "en": "The barcode [{0}] quantity received is different from the counted quantity , can not in store",
-      "zh-CN": "姝ょ墿鏂欐潯鐮乕{0}]鍏ュ簱鏁伴噺涓庢竻鐐规暟閲忎笉鍚岋紝涓嶈兘鍏ュ簱"
-    }
-  },
-  "SelectOrder": {
-    "DtlsException": {
-      "en": "Order[{0}] have no detail information, please confirm if this order in T100 are normal",
-      "zh-CN": "鍗曟嵁[{0}]娌℃湁鏄庣粏淇℃伅锛岃纭T100鐨勫崟鎹槸鍚︽甯�"
-    }
-  }
-}
\ No newline at end of file
diff --git a/Tiger.Business/Language/WMS/Salebackorder.json b/Tiger.Business/Language/WMS/Salebackorder.json
deleted file mode 100644
index 71120bb..0000000
--- a/Tiger.Business/Language/WMS/Salebackorder.json
+++ /dev/null
@@ -1,122 +0,0 @@
-{
-  "鍗曟嵁浠g爜": {
-    "en": "Document Code",
-    "zh-CN": "鍗曟嵁浠g爜"
-  },
-  "鍗曟嵁鏃ユ湡": {
-    "en": "Document Date",
-    "zh-CN": "鍗曟嵁鏃ユ湡"
-  },
-  "鍒涘缓鏃堕棿": {
-    "en": "CreateTime",
-    "zh-CN": "鍒涘缓鏃堕棿"
-  },
-  "鐘舵��": {
-    "en": "Status",
-    "zh-CN": "鐘舵��"
-  },
-  "鏂板": {
-    "en": "Add",
-    "zh-CN": "鏂板"
-  },
-  "寰呰川妫�": {
-    "en": "Quality",
-    "zh-CN": "寰呰川妫�"
-  },
-  "璐ㄦ瀹屾垚": {
-    "en": "Qualitied",
-    "zh-CN": "璐ㄦ瀹屾垚"
-  },
-  "鎿嶄綔鏃堕棿": {
-    "en": "DoTime",
-    "zh-CN": "鎿嶄綔鏃堕棿"
-  },
-  "T100鍗曟嵁浠g爜": {
-    "en": "DoTime",
-    "zh-CN": "鎿嶄綔鏃堕棿"
-  },
-  "宸叉竻鐐�": {
-    "en": "Dounted",
-    "zh-CN": "宸叉竻鐐�"
-  },
-  "宸插鏍�": {
-    "en": "Audited",
-    "zh-CN": "宸插鏍�"
-  },
-  "浣滀笟涓�": {
-    "en": "Working",
-    "zh-CN": "浣滀笟涓�"
-  },
-  "瀹屾垚": {
-    "en": "Complete",
-    "zh-CN": "瀹屾垚"
-  },
-  "浠撳簱鍚嶇О": {
-    "en": "WareHouse",
-    "zh-CN": "浠撳簱鍚嶇О"
-  },
-  "鍒涘缓浜�": {
-    "en": "CreateUser",
-    "zh-CN": "鍒涘缓浜�"
-  },
-  "閿�鍞��璐у崟鍒楄〃": {
-    "en": "Salebackorder List",
-    "zh-CN": "閿�鍞��璐у崟鍒楄〃"
-  },
-  "鎿嶄綔": {
-    "en": "Operate",
-    "zh-CN": "鎿嶄綔"
-  },
-  "鏌ョ湅鍗曟嵁璇︽儏": {
-    "en": "View Document Detail",
-    "zh-CN": "鏌ョ湅鍗曟嵁璇︽儏"
-  },
-  "杩欐槸閿�鍞��璐у崟璇︽儏椤甸潰銆�": {
-    "en": "This is Salebackorder Detail Page.",
-    "zh-CN": "杩欐槸閿�鍞��璐у崟璇︽儏椤甸潰銆�"
-  },
-  "鍗曟嵁璇︽儏": {
-    "en": "Document Detail",
-    "zh-CN": "鍗曟嵁璇︽儏"
-  },
-  "鏉$爜璇︽儏": {
-    "en": "BarCode Detail",
-    "zh-CN": "鏉$爜璇︽儏"
-  },
-  "鐗╂枡缂栫爜": {
-    "en": "ItemCoee",
-    "zh-CN": "鐗╂枡缂栫爜"
-  },
-  "闇�姹傛暟閲�": {
-    "en": "Demand Number",
-    "zh-CN": "闇�姹傛暟閲�"
-  },
-  "鏁伴噺": {
-    "en": "Number",
-    "zh-CN": "鏁伴噺"
-  },
-  "鍗曟嵁璇︽儏鍒楄〃": {
-    "en": "Document Detail List",
-    "zh-CN": "鍗曟嵁璇︽儏鍒楄〃"
-  },
-  "鏉$爜璇︽儏鍒楄〃": {
-    "en": "BarCode Detail List",
-    "zh-CN": "鏉$爜璇︽儏鍒楄〃"
-  },
-  "鏉$爜": {
-    "en": "BarCode",
-    "zh-CN": "鏉$爜"
-  },
-  "閿�鍞��璐у崟鐨勮祫鏂�": {
-    "en": "Salebackorder {0} Information",
-    "zh-CN": "閿�鍞��璐у崟{0}鐨勮祫鏂�"
-  },
-  "鏌ョ湅鏉$爜璇︽儏": {
-    "en": "View BarCode Detail",
-    "zh-CN": "鏌ョ湅鏉$爜璇︽儏"
-  },
-  "璇︽儏锛氬崟鎹�": {
-    "en": "Detail:Document",
-    "zh-CN": "璇︽儏锛氬崟鎹�"
-  }
-}
\ No newline at end of file
diff --git a/Tiger.Business/Language/WMS/Saleoutorder.json b/Tiger.Business/Language/WMS/Saleoutorder.json
deleted file mode 100644
index d43e9f3..0000000
--- a/Tiger.Business/Language/WMS/Saleoutorder.json
+++ /dev/null
@@ -1,126 +0,0 @@
-{
-  "鍗曟嵁浠g爜": {
-    "en": "Document Code",
-    "zh-CN": "鍗曟嵁浠g爜"
-  },
-  "鍗曟嵁鏃ユ湡": {
-    "en": "Document Date",
-    "zh-CN": "鍗曟嵁鏃ユ湡"
-  },
-  "鍒涘缓鏃堕棿": {
-    "en": "CreateTime",
-    "zh-CN": "鍒涘缓鏃堕棿"
-  },
-  "鐘舵��": {
-    "en": "Status",
-    "zh-CN": "鐘舵��"
-  },
-  "鏂板": {
-    "en": "Add",
-    "zh-CN": "鏂板"
-  },
-  "浣滀笟涓�": {
-    "en": "Working",
-    "zh-CN": "浣滀笟涓�"
-  },
-  "瀹屾垚": {
-    "en": "Complete",
-    "zh-CN": "瀹屾垚"
-  },
-  "鎿嶄綔鏃堕棿": {
-    "en": "DoTime",
-    "zh-CN": "鎿嶄綔鏃堕棿"
-  },
-  "T100鍗曟嵁浠g爜": {
-    "en": "T100 BillCode",
-    "zh-CN": "T100鍗曟嵁浠g爜"
-  },
-  "浠撳簱鍚嶇О": {
-    "en": "WareHouse",
-    "zh-CN": "浠撳簱鍚嶇О"
-  },
-  "鍒涘缓浜�": {
-    "en": "CreateUser",
-    "zh-CN": "鍒涘缓浜�"
-  },
-  "閿�鍞嚭搴撳崟鍒楄〃": {
-    "en": "Saleoutorder List",
-    "zh-CN": "閿�鍞嚭搴撳崟鍒楄〃"
-  },
-  "鎿嶄綔": {
-    "en": "Operate",
-    "zh-CN": "鎿嶄綔"
-  },
-  "鏌ョ湅鍗曟嵁璇︽儏": {
-    "en": "View Document Detail",
-    "zh-CN": "鏌ョ湅鍗曟嵁璇︽儏"
-  },
-  "杩欐槸閿�鍞嚭搴撳崟璇︽儏椤甸潰銆�": {
-    "en": "This is Saleoutorder Detail Page.",
-    "zh-CN": "杩欐槸閿�鍞嚭搴撳崟璇︽儏椤甸潰銆�"
-  },
-  "鍗曟嵁璇︽儏": {
-    "en": "Document Detail",
-    "zh-CN": "鍗曟嵁璇︽儏"
-  },
-  "鏉$爜璇︽儏": {
-    "en": "BarCode Detail",
-    "zh-CN": "鏉$爜璇︽儏"
-  },
-  "鐗╂枡缂栫爜": {
-    "en": "ItemCoee",
-    "zh-CN": "鐗╂枡缂栫爜"
-  },
-  "闇�姹傛暟閲�": {
-    "en": "Demand Number",
-    "zh-CN": "闇�姹傛暟閲�"
-  },
-  "鏁伴噺": {
-    "en": "Number",
-    "zh-CN": "鏁伴噺"
-  },
-  "鍗曟嵁璇︽儏鍒楄〃": {
-    "en": "Document Detail List",
-    "zh-CN": "鍗曟嵁璇︽儏鍒楄〃"
-  },
-  "鏉$爜璇︽儏鍒楄〃": {
-    "en": "BarCode Detail List",
-    "zh-CN": "鏉$爜璇︽儏鍒楄〃"
-  },
-  "鏉$爜": {
-    "en": "BarCode",
-    "zh-CN": "鏉$爜"
-  },
-  "閿�鍞嚭搴撳崟鐨勮祫鏂�": {
-    "en": "Saleoutorder {0} Information",
-    "zh-CN": "閿�鍞嚭搴撳崟{0}鐨勮祫鏂�"
-  },
-  "鏌ョ湅鏉$爜璇︽儏": {
-    "en": "View BarCode Detail",
-    "zh-CN": "鏌ョ湅鏉$爜璇︽儏"
-  },
-  "璇︽儏锛氬崟鎹�": {
-    "en": "Detail:Document",
-    "zh-CN": "璇︽儏锛氬崟鎹�"
-  },
-  "鐗╂枡鍚嶇О": {
-    "en": "ItemName",
-    "zh-CN": "鐗╂枡鍚嶇О"
-  },
-  "娆犲彂鏁伴噺": {
-    "en": "OweNumber",
-    "zh-CN": "娆犲彂鏁伴噺"
-  },
-  "瀹炲彂鏁伴噺": {
-    "en": "IssuedQuantity",
-    "zh-CN": "瀹炲彂鏁伴噺"
-  },
-  "搴忓彿": {
-    "en": "No",
-    "zh-CN": "搴忓彿"
-  },
-  "淇敼鏃堕棿": {
-    "en": "UpdateTime",
-    "zh-CN": "淇敼鏃堕棿"
-  }
-}
\ No newline at end of file
diff --git a/Tiger.Business/Language/WMS/Transfer.json b/Tiger.Business/Language/WMS/Transfer.json
deleted file mode 100644
index 16ef653..0000000
--- a/Tiger.Business/Language/WMS/Transfer.json
+++ /dev/null
@@ -1,166 +0,0 @@
-{
-  "鍗曟嵁浠g爜": {
-    "en": "Document Code",
-    "zh-CN": "鍗曟嵁浠g爜"
-  },
-  "鍗曟嵁鏃ユ湡": {
-    "en": "Document Date",
-    "zh-CN": "鍗曟嵁鏃ユ湡"
-  },
-  "鐘舵��": {
-    "en": "Status",
-    "zh-CN": "鐘舵��"
-  },
-  "鏂板": {
-    "en": "Add",
-    "zh-CN": "鏂板"
-  },
-  "鎵嬪姩鏂板": {
-    "en": "MenaulAdd",
-    "zh-CN": "鎵嬪姩鏂板"
-  },
-  "鎿嶄綔": {
-    "en": "Operate",
-    "zh-CN": "鎿嶄綔"
-  },
-  "浣滀笟涓�": {
-    "en": "Working",
-    "zh-CN": "浣滀笟涓�"
-  },
-  "瀹屾垚": {
-    "en": "Complete",
-    "zh-CN": "瀹屾垚"
-  },
-  "鎿嶄綔鏃堕棿": {
-    "en": "DoTime",
-    "zh-CN": "鎿嶄綔鏃堕棿"
-  },
-  "瑙勬牸": {
-    "en": "Unit",
-    "zh-CN": "瑙勬牸"
-  },
-  "T100鍗曟嵁浠g爜": {
-    "en": "T100 BillCode",
-    "zh-CN": "T100鍗曟嵁浠g爜"
-  },
-  "璋冩嫧瀹屾垚": {
-    "en": "Finished",
-    "zh-CN": "璋冩嫧瀹屾垚"
-  },
-  "璋冨嚭浠撳簱": {
-    "en": "OutWareHouse",
-    "zh-CN": "璋冨嚭浠撳簱"
-  },
-  "璋冨叆浠撳簱": {
-    "en": "InWareHouse",
-    "zh-CN": "璋冨叆浠撳簱"
-  },
-  "鎵嬪姩涓嬫灦瀹屾垚": {
-    "en": "MANUALCOMPLETE",
-    "zh-CN": "鎵嬪姩涓嬫灦瀹屾垚"
-  },
-  "璋冨嚭": {
-    "en": "OutTranfer",
-    "zh-CN": "璋冨嚭"
-  },
-  "鍒涘缓浜�": {
-    "en": "CreateUser",
-    "zh-CN": "鍒涘缓浜�"
-  },
-  "鍒涘缓鏃堕棿": {
-    "en": "CreateTime",
-    "zh-CN": "鍒涘缓鏃堕棿"
-  },
-  "璋冩嫧鍗曞垪琛�": {
-    "en": "Transfer List",
-    "zh-CN": "璋冩嫧鍗曞垪琛�"
-  },
-  "杩欐槸璋冩嫧鍗曡鎯呴〉闈€��": {
-    "en": "This is Transfer Detail Page.",
-    "zh-CN": "杩欐槸璋冩嫧鍗曡鎯呴〉闈€��"
-  },
-  "鍗曟嵁璇︽儏": {
-    "en": "Document Detail",
-    "zh-CN": "鍗曟嵁璇︽儏"
-  },
-  "鏉$爜璇︽儏": {
-    "en": "BarCode Detail",
-    "zh-CN": "鏉$爜璇︽儏"
-  },
-  "鐗╂枡缂栫爜": {
-    "en": "ItemCoee",
-    "zh-CN": "鐗╂枡缂栫爜"
-  },
-  "鍑哄簱浠撳簱": {
-    "en": "Out WareHouse",
-    "zh-CN": "鍑哄簱浠撳簱浠g爜"
-  },
-  "鍏ュ簱浠撳簱": {
-    "en": "In WareHouse",
-    "zh-CN": "鍑哄簱浠撳簱浠g爜"
-  },
-  "鍑哄簱鏁伴噺": {
-    "en": "Out Number",
-    "zh-CN": "鍑哄簱鏁伴噺"
-  },
-  "鍏ュ簱鏁伴噺": {
-    "en": "In Number",
-    "zh-CN": "鍏ュ簱鏁伴噺"
-  },
-  "闇�姹傛暟閲�": {
-    "en": "Demand Number",
-    "zh-CN": "闇�姹傛暟閲�"
-  },
-  "鏁伴噺": {
-    "en": "Number",
-    "zh-CN": "鏁伴噺"
-  },
-  "鍗曟嵁璇︽儏鍒楄〃": {
-    "en": "Document Detail List",
-    "zh-CN": "鍗曟嵁璇︽儏鍒楄〃"
-  },
-  "鏉$爜璇︽儏鍒楄〃": {
-    "en": "BarCode Detail List",
-    "zh-CN": "鏉$爜璇︽儏鍒楄〃"
-  },
-  "鏉$爜": {
-    "en": "BarCode",
-    "zh-CN": "鏉$爜"
-  },
-  "璋冩嫧鍗曡祫鏂�": {
-    "en": "Transfer {0} Information",
-    "zh-CN": "璋冩嫧鍗晎0}鐨勮祫鏂�"
-  },
-  "鏌ョ湅鍗曟嵁璇︽儏": {
-    "en": "View Document Detail",
-    "zh-CN": "鏌ョ湅鍗曟嵁璇︽儏"
-  },
-  "鏌ョ湅鏉$爜璇︽儏": {
-    "en": "View BarCode Detail",
-    "zh-CN": "鏌ョ湅鏉$爜璇︽儏"
-  },
-  "璇︽儏锛氬崟鎹�": {
-    "en": "Detail:Document",
-    "zh-CN": "璇︽儏锛氬崟鎹�"
-  },
-  "搴忓彿": {
-    "en": "No",
-    "zh-CN": "搴忓彿"
-  },
-  "淇敼鏃堕棿": {
-    "en": "UpdateTime",
-    "zh-CN": "淇敼鏃堕棿"
-  },
-  "鐗╂枡鍚嶇О": {
-    "en": "ItemName",
-    "zh-CN": "鐗╂枡鍚嶇О"
-  },
-  "鍙戝嚭鏁伴噺": {
-    "en": "OutQty",
-    "zh-CN": "鍙戝嚭鏁伴噺"
-  },
-  "杞叆鏁伴噺": {
-    "en": "InQty",
-    "zh-CN": "杞叆鏁伴噺"
-  }
-}
\ No newline at end of file
diff --git a/Tiger.Business/Language/WMS/WareHouse.json b/Tiger.Business/Language/WMS/WareHouse.json
deleted file mode 100644
index 30ec939..0000000
--- a/Tiger.Business/Language/WMS/WareHouse.json
+++ /dev/null
@@ -1,228 +0,0 @@
-{
-  "妫�鏌ュ偍浣嶅垵濮嬪寲": {
-    "en": "Shelf[{0}] Rule Verify Exception",
-    "zh-CN": "璐ф灦[{0}]杩樻湁鏈笅鏋剁殑鐗╁搧锛屼笉鑳藉垵濮嬪寲锛�"
-  },
-  "榛樿璋冩嫧T100搴撲綅": {
-    "en": "Defaut100WareHouse",
-    "zh-CN": "榛樿璋冩嫧T100搴撲綅"
-  },
-  "鏄惁鎴噸鎵�": {
-    "en": "SCAN_AF_CUT",
-    "zh-CN": "鏄惁鎴枡閲嶆壂"
-  },
-  "鎻愪氦": {
-    "en": "Submit",
-    "zh-CN": "鎻愪氦"
-  },
-  "鐢熸垚鍌ㄤ綅": {
-    "en": "Generate Location",
-    "zh-CN": "鐢熸垚鍌ㄤ綅"
-  },
-  "姣忓眰鍌ㄤ綅鏁�": {
-    "en": "Location Number",
-    "zh-CN": "姣忓眰鍌ㄤ綅鏁�"
-  },
-  "灞�": {
-    "en": "Floor {0}",
-    "zh-CN": "{0}灞�"
-  },
-  "鎻愮ず": {
-    "en": "Prompt",
-    "zh-CN": "鎻愮ず"
-  },
-  "鏄惁鍒濆鍖栵紝閲嶆柊鐢熸垚鍌ㄤ綅": {
-    "en": "Regeneration Location",
-    "zh-CN": "鏄惁鍒濆鍖栵紝閲嶆柊鐢熸垚鍌ㄤ綅"
-  },
-  "閰嶇疆鍙傛暟": {
-    "en": "Config Parameter",
-    "zh-CN": "閰嶇疆鍙傛暟"
-  },
-  "瑕嗙洊榛樿鐢熸垚鐨勬牎楠屼俊鎭�": {
-    "en": "Overwrite the default generated verification information",
-    "zh-CN": "瑕嗙洊榛樿鐢熸垚鐨勬牎楠屼俊鎭�"
-  },
-  "淇濆瓨": {
-    "en": "Save",
-    "zh-CN": "淇濆瓨"
-  },
-  "鎿嶄綔": {
-    "en": "Operate",
-    "zh-CN": "鎿嶄綔"
-  },
-  "淇濆瓨鎴愬姛": {
-    "en": "Save Success",
-    "zh-CN": "淇濆瓨鎴愬姛"
-  },
-  "淇濆瓨澶辫触": {
-    "en": "Save Fail",
-    "zh-CN": "淇濆瓨澶辫触"
-  },
-  "鏄�": {
-    "en": "Y",
-    "zh-CN": "鏄�"
-  },
-  "鍚�": {
-    "en": "N",
-    "zh-CN": "鍚�"
-  },
-  "淇敼鍌ㄤ綅": {
-    "en": "Edit Location",
-    "zh-CN": "淇敼鍌ㄤ綅"
-  },
-  "鍌ㄥ尯鍚嶇О": {
-    "en": "RegionName",
-    "zh-CN": "鍌ㄥ尯鍚嶇О"
-  },
-  "鍌ㄥ尯浠g爜": {
-    "en": "RegionCode",
-    "zh-CN": "鍌ㄥ尯浠g爜"
-  },
-  "娣诲姞鍌ㄥ尯": {
-    "en": "AddRegion",
-    "zh-CN": "娣诲姞鍌ㄥ尯"
-  },
-  "璐ф灦": {
-    "en": "Shelf",
-    "zh-CN": "璐ф灦"
-  },
-  "璐ф灦浠g爜": {
-    "en": "ShelfCode",
-    "zh-CN": "璐ф灦浠g爜"
-  },
-  "璐ф灦鍚嶇О": {
-    "en": "ShelfName",
-    "zh-CN": "璐ф灦鍚嶇О"
-  },
-  "灞傛暟": {
-    "en": "Floors",
-    "zh-CN": "灞傛暟"
-  },
-  "璐ф灦绫诲瀷": {
-    "en": "ShelfType",
-    "zh-CN": "璐ф灦绫诲瀷"
-  },
-  "瑙勫垯": {
-    "en": "Rule",
-    "zh-CN": "瑙勫垯"
-  },
-  "鍖哄煙": {
-    "en": "Region",
-    "zh-CN": "鍖哄煙"
-  },
-  "灞傛暟浣嶆暟": {
-    "en": "StoreyNumber",
-    "zh-CN": "灞傛暟浣嶆暟"
-  },
-  "搴忓垪鍙蜂綅鏁�": {
-    "en": "NumberNo",
-    "zh-CN": "搴忓垪鍙蜂綅鏁�"
-  },
-  "蹇呴』澶т簬0": {
-    "en": "Not Null",
-    "zh-CN": "浣嶆暟蹇呴』澶т簬0"
-  },
-  "浣嶆暟涓嶈冻,璇疯皟鏁村ぇ涓�鐐�": {
-    "en": "Digit Insufficient",
-    "zh-CN": "浣嶆暟涓嶈冻,璇疯皟鏁村ぇ涓�鐐�"
-  },
-  "灞傛暟蹇呴』澶т簬0": {
-    "en": "Not Null",
-    "zh-CN": "灞傛暟蹇呴』澶т簬0"
-  },
-  "鍌ㄤ綅鏁颁笉瓒�,璇疯皟鏁村ぇ涓�鐐�": {
-    "en": "Digit Insufficient",
-    "zh-CN": "鍌ㄤ綅鏁颁笉瓒�,璇疯皟鏁村ぇ涓�鐐�"
-  },
-  "杩炴帴绗�": {
-    "en": "Connector",
-    "zh-CN": "杩炴帴绗�"
-  },
-  "绀轰緥": {
-    "en": "Example",
-    "zh-CN": "绀轰緥"
-  },
-  "鏄惁鍗曟斁": {
-    "en": "SingleIsNo",
-    "zh-CN": "鏄惁鍗曟斁"
-  },
-  "鏄惁鐗╂枡娣锋斁": {
-    "en": "MixingMatIsNo",
-    "zh-CN": "鏄惁鐗╂枡娣锋斁"
-  },
-  "鏄惁鎻愪氦": {
-    "en": "Submit or not",
-    "zh-CN": "鏄惁鎻愪氦"
-  },
-  "娌℃湁鐢熸垚鍌ㄤ綅锛屾槸鍚︽彁浜�": {
-    "en": "Not Location ,Submit or not",
-    "zh-CN": "娌℃湁鐢熸垚鍌ㄤ綅锛屾槸鍚︽彁浜�"
-  },
-  "娣诲姞璐ф灦": {
-    "en": "AddShelf",
-    "zh-CN": "娣诲姞璐ф灦"
-  },
-  "鍌ㄥ尯": {
-    "en": "Regin",
-    "zh-CN": "鍌ㄥ尯"
-  },
-  //WareHouseModal
-  "浠撳簱浠g爜": {
-    "en": "WareHouseCode",
-    "zh-CN": "浠撳簱浠g爜"
-  },
-  "浠撳簱鍚嶇О": {
-    "en": "WareHouseName",
-    "zh-CN": "浠撳簱鍚嶇О"
-  },
-  "澶囨敞": {
-    "en": "Remark",
-    "zh-CN": "澶囨敞"
-  },
-  "鏄惁鍚敤": {
-    "en": "IsActive",
-    "zh-CN": "鏄惁鍚敤"
-  },
-  "鎹偣": {
-    "en": "OrgCode",
-    "zh-CN": "鎹偣"
-  },
-  "娣诲姞浠撳簱": {
-    "en": "Add WareHouse",
-    "zh-CN": "娣诲姞浠撳簱"
-  },
-  "娣诲姞鎴愬姛": {
-    "en": "Add Success",
-    "zh-CN": "娣诲姞鎴愬姛"
-  },
-  "娣诲姞澶辫触,浠g爜宸蹭娇鐢�": {
-    "en": "Add Fail",
-    "zh-CN": "娣诲姞澶辫触,浠g爜宸蹭娇鐢�"
-  },
-  //WareHouseTree
-  "浠撳簱": {
-    "en": "WareHouse",
-    "zh-CN": "浠撳簱"
-  },
-  "鏂板鍌ㄥ尯": {
-    "en": "AddRegion",
-    "zh-CN": "鏂板鍌ㄥ尯"
-  },
-  "鏂板璐ф灦": {
-    "en": "AddShelf",
-    "zh-CN": "鏂板璐ф灦"
-  },
-  "鍒犻櫎": {
-    "en": "Delete",
-    "zh-CN": "鍒犻櫎"
-  },
-  "鍒犻櫎鎴愬姛": {
-    "en": "Delete Success",
-    "zh-CN": "鍒犻櫎鎴愬姛"
-  },
-  "鍒犻櫎澶辫触": {
-    "en": "Delete Fail",
-    "zh-CN": "鍒犻櫎澶辫触"
-  }
-}
\ No newline at end of file
diff --git a/Tiger.Business/Language/WMS/WmsCount.json b/Tiger.Business/Language/WMS/WmsCount.json
deleted file mode 100644
index edfbbc9..0000000
--- a/Tiger.Business/Language/WMS/WmsCount.json
+++ /dev/null
@@ -1,106 +0,0 @@
-{
-  "ScanItem": {
-    "NotFound": {
-      "en": "Can not found the item code[{0}] information, please scan again",
-      "zh-CN": "鏈壘鍒扮墿鏂橻{0}]鐨勪俊鎭紝璇烽噸鏂版壂鎻�"
-    },
-    "ExistItem": {
-      "en": "Barcode[{0}] has been in store or checked, Do not allow duplicate scanning for storage",
-      "zh-CN": "鏉$爜[{0}]宸茬粡鍏ヨ繃搴撴垨鑰呭凡娓呯偣杩囷紝涓嶅厑璁搁噸澶嶆壂鎻忓叆搴�"
-    },
-    "NotExist": {
-      "en": "Warehouse[{0}] does not exists",
-      "zh-CN": "搴撲綅[{0}]涓嶅瓨鍦�"
-    },
-    "WhExist": {
-      "en": "Warehouse[{0}] already scanned, please scan the material qr code",
-      "zh-CN": "搴撲綅[{0}]宸茬粡鎵弿锛岃鎵弿鐗╂枡浜岀淮鐮�"
-    },
-    "SnEmptyFailure": {
-      "en": "Barcode cannot be empty",
-      "zh-CN": "鏉$爜涓嶈兘涓虹┖"
-    },
-    "WhEmptyFailure": {
-      "en": "Warehouse cannot be empty",
-      "zh-CN": "搴撲綅涓嶈兘涓虹┖"
-    },
-    "鎿嶄綔鏃堕棿": {
-      "en": "DoTime",
-      "zh-CN": "鎿嶄綔鏃堕棿"
-    },
-    "LocationEmptyFailure": {
-      "en": "Location cannot be empty",
-      "zh-CN": "鍌ㄤ綅涓嶈兘涓虹┖"
-    },
-    "ShelfEmptyFailure": {
-      "en": "Shelf cannot be empty",
-      "zh-CN": "璐ф灦涓嶈兘涓虹┖"
-    },
-    "BarcodeCounted": {
-      "en": "The barcode has been counted",
-      "zh-CN": "鏉$爜宸插仛杩囨竻鐐�"
-    },
-    "GetException": {
-      "en": "Get barcode[{0}] inventory information exception",
-      "zh-CN": "鑾峰彇鏉$爜[{0}]搴撳瓨淇℃伅寮傚父"
-    },
-    "LocationIsNull": {
-      "en": "Barcode[{0}] inventory information exception: Location is null, please put on shelf first.(Location Id: {1})",
-      "zh-CN": "鏉$爜[{0}]搴撳瓨淇℃伅寮傚父: 娌℃湁鍌ㄤ綅淇℃伅锛岃鍏堜笂鏋跺悗鍐嶆壂鎻�(鍌ㄤ綅Id: {1})"
-    },
-    "ItemCodeNotExistsOrNotActive": {
-      "en": "The material code[{0}] not exists or not active",
-      "zh-CN": "鐗╂枡缂栫爜[{0}]涓嶅瓨鍦ㄦ垨鑰呰鐗╂枡鏈惎鐢�"
-    },
-    "ScanException": {
-      "en": "Scan barcode[{0}] review exception",
-      "zh-CN": "鎵弿鐗╂枡[{0}]澶嶆牳寮傚父"
-    },
-    "NotDataToSubmit": {
-      "en": "There is no data to submit",
-      "zh-CN": "娌℃湁鍙互鎻愪氦鐨勬竻鐐规暟鎹�"
-    },
-    "NotAllowIn": {
-      "en": "Do not allow split label to do counting, please scan again",
-      "zh-CN": "鎷嗗垎鎴枡鐨勬爣绛句笉鑳芥竻鐐癸紝璇烽噸鏂版壂鎻�"
-    },
-    "GetWhSuccess": {
-      "en": "Get warehouse code {0} success",
-      "zh-CN": "杩斿洖浠撳簱[{0}]鎴愬姛锛�"
-    },
-    "CountSuccess": {
-      "en": "The barcode[{0}] count success",
-      "zh-CN": "鏉$爜[{0}]娓呯偣鎴愬姛锛�"
-    },
-    "ShelfCanNotEmpty": {
-      "en": "Please enter or scan a valid shelf/location code",
-      "zh-CN": "璇疯緭鍏ユ垨鎵弿鏈夋晥鐨勮揣鏋�/鍌ㄤ綅鐮�"
-    },
-    "ShelfOrLocationDisabled": {
-      "en": "The scanned storage location is disabled",
-      "zh-CN": "鎵弿鐨勫簱浣嶆湭鍚敤"
-    },
-    "StatusException": {
-      "en": "Status [{0}] exception, please scan again",
-      "zh-CN": "鐘舵�乕{0}]寮傚父锛岃閲嶆柊鎵弿"
-    },
-    "NotCounted": {
-      "en": "The barcode [{0}] do not count, can not in store",
-      "zh-CN": "姝ょ墿鏂欐潯鐮乕{0}]鏈仛娓呯偣锛屼笉鑳藉叆搴�"
-    },
-    "NotGenerateBill": {
-      "en": "The barcode [{0}] do not generate bill number, can not in store",
-      "zh-CN": "姝ょ墿鏂欐潯鐮乕{0}]鏈敓鎴愬簱瀛樺崟鎹紝涓嶈兘鍏ュ簱"
-    },
-    "DiffQty": {
-      "en": "The barcode [{0}] quantity received is different from the counted quantity , can not in store",
-      "zh-CN": "姝ょ墿鏂欐潯鐮乕{0}]鍏ュ簱鏁伴噺涓庢竻鐐规暟閲忎笉鍚岋紝涓嶈兘鍏ュ簱"
-    }
-  },
-  "SelectOrder": {
-    "DtlsException": {
-      "en": "Order[{0}] have no detail information, please confirm if this order in T100 are normal",
-      "zh-CN": "鍗曟嵁[{0}]娌℃湁鏄庣粏淇℃伅锛岃纭T100鐨勫崟鎹槸鍚︽甯�"
-    }
-  }
-}
\ No newline at end of file
diff --git a/Tiger.Business/Language/WMS/WmsItem.json b/Tiger.Business/Language/WMS/WmsItem.json
deleted file mode 100644
index 8e2c674..0000000
--- a/Tiger.Business/Language/WMS/WmsItem.json
+++ /dev/null
@@ -1,70 +0,0 @@
-{
-  "Barcode": {
-    "GetSuccess": {
-      "en": "Get barcode[{0}] inventory information success",
-      "zh-CN": "鑾峰彇鏉$爜[{0}]搴撳瓨淇℃伅鎴愬姛"
-    },
-    "GetUnPackSuccess": {
-      "en": "Get barcode[{0}] inventory information success, and do unpack from its packaging [{1}]",
-      "zh-CN": "瑙i櫎涓庣埗鍖呰鏉$爜[{1}]鍏崇郴鍚庯紝鑾峰彇鏉$爜[{0}]搴撳瓨淇℃伅鎴愬姛"
-    },
-    "NotFound": {
-      "en": "Can not found the barcode[{0}] information from inventory",
-      "zh-CN": "搴撳瓨涓壘涓嶅埌鏉$爜[{0}]鐨勪俊鎭�"
-    },
-    "EmptyFailure": {
-      "en": "Barcode cannot be empty",
-      "zh-CN": "鏉$爜涓嶈兘涓虹┖"
-    },
-    "IllegalFailure": {
-      "en": "Barcode is illegal",
-      "zh-CN": "鏉$爜涓洪潪娉曟潯鐮�"
-    },
-    "GetException": {
-      "en": "Get barcode[{0}] inventory information exception",
-      "zh-CN": "鑾峰彇鏉$爜[{0}]搴撳瓨淇℃伅寮傚父"
-    }
-  },
-  "鎿嶄綔鏃堕棿": {
-    "en": "DoTime",
-    "zh-CN": "鎿嶄綔鏃堕棿"
-  },
-  "PutOn": {
-    "LocationNotExists": {
-      "en": "Location[{0}] not exists",
-      "zh-CN": "鍌ㄤ綅[{0}]涓嶅瓨鍦�"
-    },
-    "Exception": {
-      "en": "Barcode[{0}] put on to location[{1}] exception",
-      "zh-CN": "鏉$爜[{0}]涓婃灦鍒板偍浣峓{1}]寮傚父"
-    }
-  },
-  "TakeDown": {
-    "LocationNotExists": {
-      "en": "Get barcode[{0}] inventory information success",
-      "zh-CN": "鑾峰彇鏉$爜[{0}]搴撳瓨淇℃伅鎴愬姛"
-    },
-    "Exception": {
-      "en": "Barcode[{0}] take down from location[{1}] exception",
-      "zh-CN": "鏉$爜[{0}]浠庡偍浣峓{1}]涓嬫灦寮傚父"
-    }
-  },
-  "Suggest": {
-    "Success": {
-      "en": "Material off shelf suggestion uccess",
-      "zh-CN": "鐗╂枡涓嬫灦鎺ㄨ崘鎴愬姛"
-    },
-    "Warning": {
-      "en": "Material off shelf suggestion warning",
-      "zh-CN": "鐗╂枡涓嬫灦鎺ㄨ崘鎴愬姛浣嗘湁璀﹀憡锛岀墿鏂欏垎閰嶄笉瓒筹細{0}"
-    },
-    "Failed": {
-      "en": "Material off shelf suggestion failed",
-      "zh-CN": "鐗╂枡涓嬫灦鎺ㄨ崘澶辫触锛氬簱瀛樹腑鎵句笉鍒板悎閫傜殑鐗╂枡"
-    },
-    "Exception": {
-      "en": "Material off shelf suggestion exception",
-      "zh-CN": "鐗╂枡涓嬫灦鎺ㄨ崘寮傚父"
-    }
-  }
-}
\ No newline at end of file
diff --git a/Tiger.Business/Language/common.json b/Tiger.Business/Language/common.json
deleted file mode 100644
index c50f000..0000000
--- a/Tiger.Business/Language/common.json
+++ /dev/null
@@ -1,70 +0,0 @@
-{
-  "okText": {
-    "en": "OK",
-    "zh-CN": "纭"
-  },
-  "closeText": {
-    "en": "Close",
-    "zh-CN": "鍏抽棴"
-  },
-  "cancelText": {
-    "en": "Cancel",
-    "zh-CN": "鍙栨秷"
-  },
-  "loadingText": {
-    "en": "Loading...",
-    "zh-CN": "鍔犺浇涓�..."
-  },
-  "saveText": {
-    "en": "Save",
-    "zh-CN": "淇濆瓨"
-  },
-  "delText": {
-    "en": "Delete",
-    "zh-CN": "鍒犻櫎"
-  },
-  "resetText": {
-    "en": "Reset",
-    "zh-CN": "閲嶇疆"
-  },
-  "searchText": {
-    "en": "Search",
-    "zh-CN": "鎼滅储"
-  },
-  "queryText": {
-    "en": "Search",
-    "zh-CN": "鏌ヨ"
-  },
-  "inputText": {
-    "en": "Please enter",
-    "zh-CN": "璇疯緭鍏�"
-  },
-  "chooseText": {
-    "en": "Please choose",
-    "zh-CN": "璇烽�夋嫨"
-  },
-  "redo": {
-    "en": "Refresh",
-    "zh-CN": "鍒锋柊"
-  },
-  "back": {
-    "en": "Back",
-    "zh-CN": "杩斿洖"
-  },
-  "light": {
-    "en": "Light",
-    "zh-CN": "浜壊涓婚"
-  },
-  "dark": {
-    "en": "Dark",
-    "zh-CN": "榛戞殫涓婚"
-  },
-  "鎴愬姛": {
-    "en": "OK.mp3",
-    "zh-CN": "cnSuccess.mp3"
-  },
-  "澶辫触": {
-    "en": "Fail.mp3",
-    "zh-CN": "cnFail.mp3"
-  }
-}
\ No newline at end of file
diff --git a/Tiger.Business/Language/component.json b/Tiger.Business/Language/component.json
deleted file mode 100644
index e72e5f3..0000000
--- a/Tiger.Business/Language/component.json
+++ /dev/null
@@ -1,402 +0,0 @@
-{
-  "app": {
-    "searchNotData": {
-      "en": "No search results yet",
-      "zh-CN": "鏆傛棤鎼滅储缁撴灉"
-    },
-    "toSearch": {
-      "en": "to search",
-      "zh-CN": "纭"
-    },
-    "toNavigate": {
-      "en": "to navigate",
-      "zh-CN": "鍒囨崲"
-    }
-  },
-  "countdown": {
-    "normalText": {
-      "en": "Get SMS code",
-      "zh-CN": "鑾峰彇楠岃瘉鐮�"
-    },
-    "sendText": {
-      "en": "Reacquire in {0}s",
-      "zh-CN": "{0}绉掑悗閲嶆柊鑾峰彇"
-    }
-  },
-  "cropper": {
-    "selectImage": {
-      "en": "Select Image",
-      "zh-CN": "閫夋嫨鍥剧墖"
-    },
-    "uploadSuccess": {
-      "en": "Uploaded success!",
-      "zh-CN": "涓婁紶鎴愬姛"
-    },
-    "modalTitle": {
-      "en": "Avatar upload",
-      "zh-CN": "澶村儚涓婁紶"
-    },
-    "okText": {
-      "en": "Confirm and upload",
-      "zh-CN": "纭骞朵笂浼�"
-    },
-    "btn_reset": {
-      "en": "Reset",
-      "zh-CN": "閲嶇疆"
-    },
-    "btn_rotate_left": {
-      "en": "Counterclockwise rotation",
-      "zh-CN": "閫嗘椂閽堟棆杞�"
-    },
-    "btn_rotate_right": {
-      "en": "Clockwise rotation",
-      "zh-CN": "椤烘椂閽堟棆杞�"
-    },
-    "btn_scale_x": {
-      "en": "Flip horizontal",
-      "zh-CN": "姘村钩缈昏浆"
-    },
-    "btn_scale_y": {
-      "en": "Flip vertical",
-      "zh-CN": "鍨傜洿缈昏浆"
-    },
-    "btn_zoom_in": {
-      "en": "Zoom in",
-      "zh-CN": "鏀惧ぇ"
-    },
-    "btn_zoom_out": {
-      "en": "Zoom out",
-      "zh-CN": "缂╁皬"
-    },
-    "preview": {
-      "en": "Preivew",
-      "zh-CN": "棰勮"
-    }
-  },
-  "drawer": {
-    "loadingText": {
-      "en": "Loading...",
-      "zh-CN": "鍔犺浇涓�..."
-    },
-    "cancelText": {
-      "en": "Close",
-      "zh-CN": "鍏抽棴"
-    },
-    "okText": {
-      "en": "Confirm",
-      "zh-CN": "纭"
-    }
-  },
-  "excel": {
-    "exportModalTitle": {
-      "en": "Export data",
-      "zh-CN": "瀵煎嚭鏁版嵁"
-    },
-    "fileType": {
-      "en": "File type",
-      "zh-CN": "鏂囦欢绫诲瀷"
-    },
-    "fileName": {
-      "en": "File name",
-      "zh-CN": "鏂囦欢鍚�"
-    }
-  },
-  "form": {
-    "putAway": {
-      "en": "Put away",
-      "zh-CN": "鏀惰捣"
-    },
-    "unfold": {
-      "en": "Unfold",
-      "zh-CN": "灞曞紑"
-    },
-    "maxTip": {
-      "en": "The number of characters should be less than {0}",
-      "zh-CN": "瀛楃鏁板簲灏忎簬{0}浣�"
-    },
-    "apiSelectNotFound": {
-      "en": "Wait for data loading to complete...",
-      "zh-CN": "璇风瓑寰呮暟鎹姞杞藉畬鎴�..."
-    }
-  },
-  "icon": {
-    "placeholder": {
-      "en": "Click the select icon",
-      "zh-CN": "鐐瑰嚮閫夋嫨鍥炬爣"
-    },
-    "search": {
-      "en": "Search icon",
-      "zh-CN": "鎼滅储鍥炬爣"
-    },
-    "copy": {
-      "en": "Copy icon successfully!",
-      "zh-CN": "澶嶅埗鍥炬爣鎴愬姛!"
-    }
-  },
-  "menu": {
-    "search": {
-      "en": "Menu search",
-      "zh-CN": "鑿滃崟鎼滅储"
-    }
-  },
-  "modal": {
-    "cancelText": {
-      "en": "Close",
-      "zh-CN": "鍏抽棴"
-    },
-    "okText": {
-      "en": "Confirm",
-      "zh-CN": "纭"
-    },
-    "close": {
-      "en": "Close",
-      "zh-CN": "鍏抽棴"
-    },
-    "maximize": {
-      "en": "Maximize",
-      "zh-CN": "鏈�澶у寲"
-    },
-    "restore": {
-      "en": "Restore",
-      "zh-CN": "杩樺師"
-    }
-  },
-  "table": {
-    "settingDens": {
-      "en": "Density",
-      "zh-CN": "瀵嗗害"
-    },
-    "settingDensDefault": {
-      "en": "Default",
-      "zh-CN": "榛樿"
-    },
-    "settingDensMiddle": {
-      "en": "Middle",
-      "zh-CN": "涓瓑"
-    },
-    "settingDensSmall": {
-      "en": "Compact",
-      "zh-CN": "绱у噾"
-    },
-    "settingColumn": {
-      "en": "Column settings",
-      "zh-CN": "鍒楄缃�"
-    },
-    "settingColumnShow": {
-      "en": "Column display",
-      "zh-CN": "鍒楀睍绀�"
-    },
-    "settingIndexColumnShow": {
-      "en": "Index Column",
-      "zh-CN": "搴忓彿鍒�"
-    },
-    "settingSelectColumnShow": {
-      "en": "Selection Column",
-      "zh-CN": "鍕鹃�夊垪"
-    },
-    "settingFixedLeft": {
-      "en": "Fixed Left",
-      "zh-CN": "鍥哄畾鍒板乏渚�"
-    },
-    "settingFixedRight": {
-      "en": "Fixed Right",
-      "zh-CN": "鍥哄畾鍒板彸渚�"
-    },
-    "settingFullScreen": {
-      "en": "Full Screen",
-      "zh-CN": "鍏ㄥ睆"
-    },
-    "index": {
-      "en": "Index",
-      "zh-CN": "搴忓彿"
-    },
-    "total": {
-      "en": "total of {total}",
-      "zh-CN": "鍏� {total} 鏉℃暟鎹�"
-    }
-  },
-  "time": {
-    "before": {
-      "en": " ago",
-      "zh-CN": "鍓�"
-    },
-    "after": {
-      "en": " after",
-      "zh-CN": "鍚�"
-    },
-    "just": {
-      "en": "just now",
-      "zh-CN": "鍒氬垰"
-    },
-    "seconds": {
-      "en": " seconds",
-      "zh-CN": "绉�"
-    },
-    "minutes": {
-      "en": " minutes",
-      "zh-CN": "鍒嗛挓"
-    },
-    "hours": {
-      "en": " hours",
-      "zh-CN": "灏忔椂"
-    },
-    "days": {
-      "en": " days",
-      "zh-CN": "澶�"
-    }
-  },
-  "tree": {
-    "selectAll": {
-      "en": "Select All",
-      "zh-CN": "閫夋嫨鍏ㄩ儴"
-    },
-    "unSelectAll": {
-      "en": "Cancel Select",
-      "zh-CN": "鍙栨秷閫夋嫨"
-    },
-    "expandAll": {
-      "en": "Expand All",
-      "zh-CN": "灞曞紑鍏ㄩ儴"
-    },
-    "unExpandAll": {
-      "en": "Collapse all",
-      "zh-CN": "鎶樺彔鍏ㄩ儴"
-    },
-    "checkStrictly": {
-      "en": "Hierarchical association",
-      "zh-CN": "灞傜骇鍏宠仈"
-    },
-    "checkUnStrictly": {
-      "en": "Hierarchical independence",
-      "zh-CN": "灞傜骇鐙珛"
-    }
-  },
-  "upload": {
-    "save": {
-      "en": "Save",
-      "zh-CN": "淇濆瓨"
-    },
-    "upload": {
-      "en": "Upload",
-      "zh-CN": "涓婁紶"
-    },
-    "imgUpload": {
-      "en": "ImageUpload",
-      "zh-CN": "鍥剧墖涓婁紶"
-    },
-    "uploaded": {
-      "en": "Uploaded",
-      "zh-CN": "宸蹭笂浼�"
-    },
-    "operating": {
-      "en": "Operating",
-      "zh-CN": "鎿嶄綔"
-    },
-    "del": {
-      "en": "Delete",
-      "zh-CN": "鍒犻櫎"
-    },
-    "download": {
-      "en": "download",
-      "zh-CN": "涓嬭浇"
-    },
-    "saveWarn": {
-      "en": "Please wait for the file to upload and save!",
-      "zh-CN": "璇风瓑寰呮枃浠朵笂浼犲悗锛屼繚瀛�!"
-    },
-    "saveError": {
-      "en": "There is no file successfully uploaded and cannot be saved!",
-      "zh-CN": "娌℃湁涓婁紶鎴愬姛鐨勬枃浠讹紝鏃犳硶淇濆瓨!"
-    },
-    "preview": {
-      "en": "Preview",
-      "zh-CN": "棰勮"
-    },
-    "choose": {
-      "en": "Select the file",
-      "zh-CN": "閫夋嫨鏂囦欢"
-    },
-    "accept": {
-      "en": "Support {0} format",
-      "zh-CN": "鏀寔{0}鏍煎紡"
-    },
-    "acceptUpload": {
-      "en": "Only upload files in {0} format",
-      "zh-CN": "鍙兘涓婁紶{0}鏍煎紡鏂囦欢"
-    },
-    "maxSize": {
-      "en": "A single file does not exceed {0}MB ",
-      "zh-CN": "鍗曚釜鏂囦欢涓嶈秴杩噞0}MB"
-    },
-    "maxSizeMultiple": {
-      "en": "Only upload files up to {0}MB!",
-      "zh-CN": "鍙兘涓婁紶涓嶈秴杩噞0}MB鐨勬枃浠�!"
-    },
-    "maxNumber": {
-      "en": "Only upload up to {0} files",
-      "zh-CN": "鏈�澶氬彧鑳戒笂浼爗0}涓枃浠�"
-    },
-    "legend": {
-      "en": "Legend",
-      "zh-CN": "鐣ョ缉鍥�"
-    },
-    "fileName": {
-      "en": "File name",
-      "zh-CN": "鏂囦欢鍚�"
-    },
-    "fileSize": {
-      "en": "File size",
-      "zh-CN": "鏂囦欢澶у皬"
-    },
-    "fileStatue": {
-      "en": "File status",
-      "zh-CN": "鐘舵��"
-    },
-    "startUpload": {
-      "en": "Start upload",
-      "zh-CN": "寮�濮嬩笂浼�"
-    },
-    "uploadSuccess": {
-      "en": "Upload successfully",
-      "zh-CN": "涓婁紶鎴愬姛"
-    },
-    "uploadError": {
-      "en": "Upload failed",
-      "zh-CN": "涓婁紶澶辫触"
-    },
-    "uploading": {
-      "en": "Uploading",
-      "zh-CN": "涓婁紶涓�"
-    },
-    "uploadWait": {
-      "en": "Please wait for the file upload to finish",
-      "zh-CN": "璇风瓑寰呮枃浠朵笂浼犵粨鏉熷悗鎿嶄綔"
-    },
-    "reUploadFailed": {
-      "en": "Re-upload failed files",
-      "zh-CN": "閲嶆柊涓婁紶澶辫触鏂囦欢"
-    }
-  },
-  "verify": {
-    "error": {
-      "en": "verification failed锛�",
-      "zh-CN": "楠岃瘉澶辫触锛�"
-    },
-    "time": {
-      "en": "The verification is successful and it takes {time} seconds锛�",
-      "zh-CN": "楠岃瘉鏍¢獙鎴愬姛,鑰楁椂{time}绉掞紒"
-    },
-    "redoTip": {
-      "en": "Click the picture to refresh",
-      "zh-CN": "鐐瑰嚮鍥剧墖鍙埛鏂�"
-    },
-    "dragText": {
-      "en": "Hold down the slider and drag",
-      "zh-CN": "璇锋寜浣忔粦鍧楁嫋鍔�"
-    },
-    "successText": {
-      "en": "Verified",
-      "zh-CN": "楠岃瘉閫氳繃"
-    }
-  }
-}
\ No newline at end of file
diff --git a/Tiger.Business/Language/layout.json b/Tiger.Business/Language/layout.json
deleted file mode 100644
index 1ffac78..0000000
--- a/Tiger.Business/Language/layout.json
+++ /dev/null
@@ -1,346 +0,0 @@
-{
-  "footer": {
-    "onlinePreview": {
-      "en": "Preview",
-      "zh-CN": "鍦ㄧ嚎棰勮"
-    },
-    "onlineDocument": {
-      "en": "Document",
-      "zh-CN": "鍦ㄧ嚎鏂囨。"
-    }
-  },
-  "header": {
-    "dropdownItemDoc": {
-      "en": "Document",
-      "zh-CN": "鏂囨。"
-    },
-    "dropdownItemLoginOut": {
-      "en": "Login Out",
-      "zh-CN": "閫�鍑虹郴缁�"
-    },
-    "tooltipErrorLog": {
-      "en": "Error log",
-      "zh-CN": "閿欒鏃ュ織"
-    },
-    "tooltipLock": {
-      "en": "Lock screen",
-      "zh-CN": "閿佸畾灞忓箷"
-    },
-    "tooltipNotify": {
-      "en": "Notification",
-      "zh-CN": "娑堟伅閫氱煡"
-    },
-    "tooltipEntryFull": {
-      "en": "Full Screen",
-      "zh-CN": "鍏ㄥ睆"
-    },
-    "tooltipExitFull": {
-      "en": "Exit Full Screen",
-      "zh-CN": "閫�鍑哄叏灞�"
-    },
-    "lockScreenPassword": {
-      "en": "Lock screen password",
-      "zh-CN": "閿佸睆瀵嗙爜"
-    },
-    "lockScreen": {
-      "en": "Lock screen",
-      "zh-CN": "閿佸畾灞忓箷"
-    },
-    "lockScreenBtn": {
-      "en": "Locking",
-      "zh-CN": "閿佸畾"
-    },
-    "home": {
-      "en": "Home",
-      "zh-CN": "棣栭〉"
-    }
-  },
-  "multipleTab": {
-    "reload": {
-      "en": "Refresh current",
-      "zh-CN": "閲嶆柊鍔犺浇"
-    },
-    "close": {
-      "en": "Close current",
-      "zh-CN": "鍏抽棴鏍囩椤�"
-    },
-    "closeLeft": {
-      "en": "Close Left",
-      "zh-CN": "鍏抽棴宸︿晶鏍囩椤�"
-    },
-    "closeRight": {
-      "en": "Close Right",
-      "zh-CN": "鍏抽棴鍙充晶鏍囩椤�"
-    },
-    "closeOther": {
-      "en": "Close Other",
-      "zh-CN": "鍏抽棴鍏跺畠鏍囩椤�"
-    },
-    "closeAll": {
-      "en": "Close All",
-      "zh-CN": "鍏抽棴鍏ㄩ儴鏍囩椤�"
-    }
-  },
-  "setting": {
-    "contentModeFull": {
-      "en": "Full",
-      "zh-CN": "娴佸紡"
-    },
-    "contentModeFixed": {
-      "en": "Fixed width",
-      "zh-CN": "瀹氬"
-    },
-    "topMenuAlignLeft": {
-      "en": "Left",
-      "zh-CN": "灞呭乏"
-    },
-    "topMenuAlignRight": {
-      "en": "Center",
-      "zh-CN": "灞呬腑"
-    },
-    "topMenuAlignCenter": {
-      "en": "Right",
-      "zh-CN": "灞呭彸"
-    },
-    "menuTriggerNone": {
-      "en": "Not Show",
-      "zh-CN": "涓嶆樉绀�"
-    },
-    "menuTriggerBottom": {
-      "en": "Bottom",
-      "zh-CN": "搴曢儴"
-    },
-    "menuTriggerTop": {
-      "en": "Top",
-      "zh-CN": "椤堕儴"
-    },
-    "menuTypeSidebar": {
-      "en": "Left menu mode",
-      "zh-CN": "宸︿晶鑿滃崟妯″紡"
-    },
-    "menuTypeMixSidebar": {
-      "en": "Left menu mixed mode",
-      "zh-CN": "宸︿晶鑿滃崟娣峰悎妯″紡"
-    },
-    "menuTypeMix": {
-      "en": "Top Menu Mix mode",
-      "zh-CN": "椤堕儴鑿滃崟娣峰悎妯″紡"
-    },
-    "menuTypeTopMenu": {
-      "en": "Top menu mode",
-      "zh-CN": "椤堕儴鑿滃崟妯″紡"
-    },
-    "on": {
-      "en": "On",
-      "zh-CN": "寮�"
-    },
-    "off": {
-      "en": "Off",
-      "zh-CN": "鍏�"
-    },
-    "minute": {
-      "en": "Minute",
-      "zh-CN": "鍒嗛挓"
-    },
-    "operatingTitle": {
-      "en": "Successful!",
-      "zh-CN": "鎿嶄綔鎴愬姛"
-    },
-    "operatingContent": {
-      "en": "The copy is successful, please go to src/settings/projectSetting.ts to modify the configuration!",
-      "zh-CN": "澶嶅埗鎴愬姛,璇峰埌 src/settings/projectSetting.ts 涓慨鏀归厤缃紒"
-    },
-    "resetSuccess": {
-      "en": "Successfully reset!",
-      "zh-CN": "閲嶇疆鎴愬姛锛�"
-    },
-    "copyBtn": {
-      "en": "Copy",
-      "zh-CN": "鎷疯礉"
-    },
-    "clearBtn": {
-      "en": "Clear cache and to the login page",
-      "zh-CN": "娓呯┖缂撳瓨骞惰繑鍥炵櫥褰曢〉"
-    },
-    "drawerTitle": {
-      "en": "Configuration",
-      "zh-CN": "椤圭洰閰嶇疆"
-    },
-    "darkMode": {
-      "en": "Dark mode",
-      "zh-CN": "涓婚"
-    },
-    "navMode": {
-      "en": "Navigation mode",
-      "zh-CN": "瀵艰埅鏍忔ā寮�"
-    },
-    "interfaceFunction": {
-      "en": "Interface function",
-      "zh-CN": "鐣岄潰鍔熻兘"
-    },
-    "interfaceDisplay": {
-      "en": "Interface display",
-      "zh-CN": "鐣岄潰鏄剧ず"
-    },
-    "animation": {
-      "en": "Animation",
-      "zh-CN": "鍔ㄧ敾"
-    },
-    "splitMenu": {
-      "en": "Split menu",
-      "zh-CN": "鍒嗗壊鑿滃崟"
-    },
-    "closeMixSidebarOnChange": {
-      "en": "Switch page to close menu",
-      "zh-CN": "鍒囨崲椤甸潰鍏抽棴鑿滃崟"
-    },
-    "sysTheme": {
-      "en": "System theme",
-      "zh-CN": "绯荤粺涓婚"
-    },
-    "headerTheme": {
-      "en": "Header theme",
-      "zh-CN": "椤舵爮涓婚"
-    },
-    "sidebarTheme": {
-      "en": "Menu theme",
-      "zh-CN": "鑿滃崟涓婚"
-    },
-    "menuDrag": {
-      "en": "Drag Sidebar",
-      "zh-CN": "渚ц竟鑿滃崟鎷栨嫿"
-    },
-    "menuSearch": {
-      "en": "Menu search",
-      "zh-CN": "鑿滃崟鎼滅储"
-    },
-    "menuAccordion": {
-      "en": "Sidebar accordion",
-      "zh-CN": "渚ц竟鑿滃崟鎵嬮鐞存ā寮�"
-    },
-    "menuCollapse": {
-      "en": "Collapse menu",
-      "zh-CN": "鎶樺彔鑿滃崟"
-    },
-    "collapseMenuDisplayName": {
-      "en": "Collapse menu display name",
-      "zh-CN": "鎶樺彔鑿滃崟鏄剧ず鍚嶇О"
-    },
-    "topMenuLayout": {
-      "en": "Top menu layout",
-      "zh-CN": "椤堕儴鑿滃崟甯冨眬"
-    },
-    "menuCollapseButton": {
-      "en": "Menu collapse button",
-      "zh-CN": "鑿滃崟鎶樺彔鎸夐挳"
-    },
-    "contentMode": {
-      "en": "Content area width",
-      "zh-CN": "鍐呭鍖哄煙瀹藉害"
-    },
-    "expandedMenuWidth": {
-      "en": "Expanded menu width",
-      "zh-CN": "鑿滃崟灞曞紑瀹藉害"
-    },
-    "breadcrumb": {
-      "en": "Breadcrumbs",
-      "zh-CN": "闈㈠寘灞�"
-    },
-    "breadcrumbIcon": {
-      "en": "Breadcrumbs Icon",
-      "zh-CN": "闈㈠寘灞戝浘鏍�"
-    },
-    "tabs": {
-      "en": "Tabs",
-      "zh-CN": "鏍囩椤�"
-    },
-    "tabDetail": {
-      "en": "Tab Detail",
-      "zh-CN": "鏍囩璇︽儏椤�"
-    },
-    "tabsQuickBtn": {
-      "en": "Tabs quick button",
-      "zh-CN": "鏍囩椤靛揩鎹锋寜閽�"
-    },
-    "tabsRedoBtn": {
-      "en": "Tabs redo button",
-      "zh-CN": "鏍囩椤靛埛鏂版寜閽�"
-    },
-    "tabsFoldBtn": {
-      "en": "Tabs flod button",
-      "zh-CN": "鏍囩椤垫姌鍙犳寜閽�"
-    },
-    "sidebar": {
-      "en": "Sidebar",
-      "zh-CN": "宸︿晶鑿滃崟"
-    },
-    "header": {
-      "en": "Header",
-      "zh-CN": "椤舵爮"
-    },
-    "footer": {
-      "en": "Footer",
-      "zh-CN": "椤佃剼"
-    },
-    "fullContent": {
-      "en": "Full content",
-      "zh-CN": "鍏ㄥ睆鍐呭"
-    },
-    "grayMode": {
-      "en": "Gray mode",
-      "zh-CN": "鐏拌壊妯″紡"
-    },
-    "colorWeak": {
-      "en": "Color Weak Mode",
-      "zh-CN": "鑹插急妯″紡"
-    },
-    "progress": {
-      "en": "Progress",
-      "zh-CN": "椤堕儴杩涘害鏉�"
-    },
-    "switchLoading": {
-      "en": "Switch Loading",
-      "zh-CN": "鍒囨崲loading"
-    },
-    "switchAnimation": {
-      "en": "Switch animation",
-      "zh-CN": "鍒囨崲鍔ㄧ敾"
-    },
-    "animationType": {
-      "en": "Animation type",
-      "zh-CN": "鍔ㄧ敾绫诲瀷"
-    },
-    "autoScreenLock": {
-      "en": "Auto screen lock",
-      "zh-CN": "鑷姩閿佸睆"
-    },
-    "notAutoScreenLock": {
-      "en": "Not auto lock",
-      "zh-CN": "涓嶈嚜鍔ㄩ攣灞�"
-    },
-    "fixedHeader": {
-      "en": "Fixed header",
-      "zh-CN": "鍥哄畾header"
-    },
-    "fixedSideBar": {
-      "en": "Fixed Sidebar",
-      "zh-CN": "鍥哄畾Sidebar"
-    },
-    "mixSidebarTrigger": {
-      "en": "Mixed menu Trigger",
-      "zh-CN": "娣峰悎鑿滃崟瑙﹀彂鏂瑰紡"
-    },
-    "triggerHover": {
-      "en": "Hover",
-      "zh-CN": "鎮仠"
-    },
-    "triggerClick": {
-      "en": "Click",
-      "zh-CN": "鐐瑰嚮"
-    },
-    "mixSidebarFixed": {
-      "en": "Fixed expanded menu",
-      "zh-CN": "鍥哄畾灞曞紑鑿滃崟"
-    }
-  }
-}
\ No newline at end of file
diff --git a/Tiger.Business/Language/routes/basic.json b/Tiger.Business/Language/routes/basic.json
deleted file mode 100644
index 3df7854..0000000
--- a/Tiger.Business/Language/routes/basic.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "login": {
-    "en": "Login",
-    "zh-CN": "鐧诲綍"
-  },
-  "errorLogList": {
-    "en": "Error Log",
-    "zh-CN": "閿欒鏃ュ織鍒楄〃"
-  }
-}
\ No newline at end of file
diff --git a/Tiger.Business/Language/routes/dashboard.json b/Tiger.Business/Language/routes/dashboard.json
deleted file mode 100644
index ba05bfe..0000000
--- a/Tiger.Business/Language/routes/dashboard.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
-  "dashboard": {
-    "en": "Dashboard",
-    "zh-CN": "Dashboard"
-  },
-  "about": {
-    "en": "About",
-    "zh-CN": "鍏充簬"
-  },
-  "workbench": {
-    "en": "Workbench",
-    "zh-CN": "宸ヤ綔鍙�"
-  },
-  "analysis": {
-    "en": "Analysis",
-    "zh-CN": "鍒嗘瀽椤�"
-  }
-}
\ No newline at end of file
diff --git a/Tiger.Business/Language/routes/demo.json b/Tiger.Business/Language/routes/demo.json
deleted file mode 100644
index 3122b2d..0000000
--- a/Tiger.Business/Language/routes/demo.json
+++ /dev/null
@@ -1,614 +0,0 @@
-{
-  "charts": {
-    "baiduMap": {
-      "en": "Baidu map",
-      "zh-CN": "鐧惧害鍦板浘"
-    },
-    "aMap": {
-      "en": "A map",
-      "zh-CN": "楂樺痉鍦板浘"
-    },
-    "googleMap": {
-      "en": "Google map",
-      "zh-CN": "璋锋瓕鍦板浘"
-    },
-    "charts": {
-      "en": "Chart",
-      "zh-CN": "鍥捐〃"
-    },
-    "map": {
-      "en": "Map",
-      "zh-CN": "鍦板浘"
-    },
-    "line": {
-      "en": "Line",
-      "zh-CN": "鎶樼嚎鍥�"
-    },
-    "pie": {
-      "en": "Pie",
-      "zh-CN": "楗煎浘"
-    }
-  },
-  "comp": {
-    "comp": {
-      "en": "Component",
-      "zh-CN": "缁勪欢"
-    },
-    "basic": {
-      "en": "Basic",
-      "zh-CN": "鍩虹缁勪欢"
-    },
-    "transition": {
-      "en": "Animation",
-      "zh-CN": "鍔ㄧ敾缁勪欢"
-    },
-    "countTo": {
-      "en": "Count To",
-      "zh-CN": "鏁板瓧鍔ㄧ敾"
-    },
-    "scroll": {
-      "en": "Scroll",
-      "zh-CN": "婊氬姩缁勪欢"
-    },
-    "scrollBasic": {
-      "en": "Basic",
-      "zh-CN": "鍩虹婊氬姩"
-    },
-    "scrollAction": {
-      "en": "Scroll Function",
-      "zh-CN": "婊氬姩鍑芥暟"
-    },
-    "virtualScroll": {
-      "en": "Virtual Scroll",
-      "zh-CN": "铏氭嫙婊氬姩"
-    },
-    "tree": {
-      "en": "Tree",
-      "zh-CN": "Tree"
-    },
-    "treeBasic": {
-      "en": "Basic",
-      "zh-CN": "鍩虹鏍�"
-    },
-    "editTree": {
-      "en": "Searchable/toolbar",
-      "zh-CN": "鍙悳绱�/宸ュ叿鏍�"
-    },
-    "actionTree": {
-      "en": "Function operation",
-      "zh-CN": "鍑芥暟鎿嶄綔绀轰緥"
-    },
-    "modal": {
-      "en": "Modal",
-      "zh-CN": "寮圭獥鎵╁睍"
-    },
-    "drawer": {
-      "en": "Drawer",
-      "zh-CN": "鎶藉眽鎵╁睍"
-    },
-    "desc": {
-      "en": "Desc",
-      "zh-CN": "璇︽儏缁勪欢"
-    },
-    "lazy": {
-      "en": "Lazy",
-      "zh-CN": "鎳掑姞杞界粍浠�"
-    },
-    "lazyBasic": {
-      "en": "Basic",
-      "zh-CN": "鍩虹绀轰緥"
-    },
-    "lazyTransition": {
-      "en": "Animation",
-      "zh-CN": "鍔ㄧ敾鏁堟灉"
-    },
-    "verify": {
-      "en": "Verify",
-      "zh-CN": "楠岃瘉缁勪欢"
-    },
-    "verifyDrag": {
-      "en": "Drag ",
-      "zh-CN": "鎷栨嫿鏍¢獙"
-    },
-    "verifyRotate": {
-      "en": "Picture Restore",
-      "zh-CN": "鍥剧墖杩樺師"
-    },
-    "qrcode": {
-      "en": "QR code",
-      "zh-CN": "浜岀淮鐮佺粍浠�"
-    },
-    "strength": {
-      "en": "Password strength",
-      "zh-CN": "瀵嗙爜寮哄害缁勪欢"
-    },
-    "upload": {
-      "en": "Upload",
-      "zh-CN": "涓婁紶缁勪欢"
-    },
-    "loading": {
-      "en": "Loading",
-      "zh-CN": "Loading"
-    },
-    "time": {
-      "en": "Relative Time",
-      "zh-CN": "鐩稿鏃堕棿"
-    },
-    "cropperImage": {
-      "en": "Cropper Image",
-      "zh-CN": "鍥剧墖瑁佸壀"
-    },
-    "cardList": {
-      "en": "Card List",
-      "zh-CN": "鍗$墖鍒楄〃"
-    }
-  },
-  "editor": {
-    "editor": {
-      "en": "Editor",
-      "zh-CN": "缂栬緫鍣�"
-    },
-    "jsonEditor": {
-      "en": "Json editor",
-      "zh-CN": "Json缂栬緫鍣�"
-    },
-    "markdown": {
-      "en": "Markdown editor",
-      "zh-CN": "markdown缂栬緫鍣�"
-    },
-    "tinymce": {
-      "en": "Rich text",
-      "zh-CN": "瀵屾枃鏈�"
-    },
-    "tinymceBasic": {
-      "en": "Basic",
-      "zh-CN": "鍩虹浣跨敤"
-    },
-    "tinymceForm": {
-      "en": "embedded form",
-      "zh-CN": "宓屽叆form"
-    }
-  },
-  "excel": {
-    "excel": {
-      "en": "Excel",
-      "zh-CN": "Excel"
-    },
-    "customExport": {
-      "en": "Select export format",
-      "zh-CN": "閫夋嫨瀵煎嚭鏍煎紡"
-    },
-    "jsonExport": {
-      "en": "JSON data export",
-      "zh-CN": "JSON鏁版嵁瀵煎嚭"
-    },
-    "arrayExport": {
-      "en": "Array data export",
-      "zh-CN": "Array鏁版嵁瀵煎嚭"
-    },
-    "importExcel": {
-      "en": "Import",
-      "zh-CN": "瀵煎叆"
-    }
-  },
-  "feat": {
-    "feat": {
-      "en": "Page Function",
-      "zh-CN": "鍔熻兘"
-    },
-    "icon": {
-      "en": "Icon",
-      "zh-CN": "鍥炬爣"
-    },
-    "tabs": {
-      "en": "Tabs",
-      "zh-CN": "鏍囩椤垫搷浣�"
-    },
-    "tabDetail": {
-      "en": "Tab Detail",
-      "zh-CN": "鏍囩璇︽儏椤�"
-    },
-    "sessionTimeout": {
-      "en": "Session Timeout",
-      "zh-CN": "鐧诲綍杩囨湡"
-    },
-    "print": {
-      "en": "Print",
-      "zh-CN": "鎵撳嵃"
-    },
-    "contextMenu": {
-      "en": "Context Menu",
-      "zh-CN": "鍙抽敭鑿滃崟"
-    },
-    "download": {
-      "en": "Download",
-      "zh-CN": "鏂囦欢涓嬭浇"
-    },
-    "clickOutSide": {
-      "en": "ClickOutSide",
-      "zh-CN": "ClickOutSide缁勪欢"
-    },
-    "imgPreview": {
-      "en": "Picture Preview",
-      "zh-CN": "鍥剧墖棰勮"
-    },
-    "copy": {
-      "en": "Clipboard",
-      "zh-CN": "鍓垏鏉�"
-    },
-    "msg": {
-      "en": "Message prompt",
-      "zh-CN": "娑堟伅鎻愮ず"
-    },
-    "watermark": {
-      "en": "Watermark",
-      "zh-CN": "姘村嵃"
-    },
-    "ripple": {
-      "en": "Ripple",
-      "zh-CN": "姘存尝绾�"
-    },
-    "fullScreen": {
-      "en": "Full Screen",
-      "zh-CN": "鍏ㄥ睆"
-    },
-    "errorLog": {
-      "en": "Error Log",
-      "zh-CN": "閿欒鏃ュ織"
-    },
-    "tab": {
-      "en": "Tab with parameters",
-      "zh-CN": "Tab甯﹀弬"
-    },
-    "tab1": {
-      "en": "Tab with parameter 1",
-      "zh-CN": "Tab甯﹀弬1"
-    },
-    "tab2": {
-      "en": "Tab with parameter 2",
-      "zh-CN": "Tab甯﹀弬2"
-    },
-    "menu": {
-      "en": "Menu with parameters",
-      "zh-CN": "Menu甯﹀弬"
-    },
-    "menu1": {
-      "en": "Menu with parameters 1",
-      "zh-CN": "Menu甯﹀弬1"
-    },
-    "menu2": {
-      "en": "Menu with parameters 2",
-      "zh-CN": "Menu甯﹀弬2"
-    },
-    "ws": {
-      "en": "Websocket test",
-      "zh-CN": "websocket娴嬭瘯"
-    },
-    "breadcrumb": {
-      "en": "Breadcrumbs",
-      "zh-CN": "闈㈠寘灞戝鑸�"
-    },
-    "breadcrumbFlat": {
-      "en": "Flat Mode",
-      "zh-CN": "骞崇骇妯″紡"
-    },
-    "breadcrumbFlatDetail": {
-      "en": "Flat mode details",
-      "zh-CN": "骞崇骇璇︽儏"
-    },
-    "breadcrumbChildren": {
-      "en": "Level mode",
-      "zh-CN": "灞傜骇妯″紡"
-    },
-    "breadcrumbChildrenDetail": {
-      "en": "Level mode detail",
-      "zh-CN": "灞傜骇璇︽儏"
-    }
-  },
-  "flow": {
-    "name": {
-      "en": "Graphics editor",
-      "zh-CN": "鍥惧舰缂栬緫鍣�"
-    },
-    "flowChart": {
-      "en": "FlowChart",
-      "zh-CN": "娴佺▼鍥�"
-    }
-  },
-  "form": {
-    "form": {
-      "en": "Form",
-      "zh-CN": "Form"
-    },
-    "basic": {
-      "en": "Basic",
-      "zh-CN": "鍩虹琛ㄥ崟"
-    },
-    "useForm": {
-      "en": "useForm",
-      "zh-CN": "useForm"
-    },
-    "refForm": {
-      "en": "RefForm",
-      "zh-CN": "RefForm"
-    },
-    "advancedForm": {
-      "en": "Shrinkable",
-      "zh-CN": "鍙敹缂╄〃鍗�"
-    },
-    "ruleForm": {
-      "en": "Form validation",
-      "zh-CN": "琛ㄥ崟楠岃瘉"
-    },
-    "dynamicForm": {
-      "en": "Dynamic",
-      "zh-CN": "鍔ㄦ�佽〃鍗�"
-    },
-    "customerForm": {
-      "en": "Custom",
-      "zh-CN": "鑷畾涔夌粍浠�"
-    },
-    "appendForm": {
-      "en": "Append",
-      "zh-CN": "琛ㄥ崟澧炲垹绀轰緥"
-    }
-  },
-  "iframe": {
-    "frame": {
-      "en": "External",
-      "zh-CN": "澶栭儴椤甸潰"
-    },
-    "antv": {
-      "en": "antVue doc (embedded)",
-      "zh-CN": "antVue鏂囨。(鍐呭祵)"
-    },
-    "doc": {
-      "en": "Project doc (embedded)",
-      "zh-CN": "椤圭洰鏂囨。(鍐呭祵)"
-    },
-    "docExternal": {
-      "en": "Project doc (external)",
-      "zh-CN": "椤圭洰鏂囨。(澶栭摼)"
-    }
-  },
-  "level": {
-    "level": {
-      "en": "MultiMenu",
-      "zh-CN": "澶氱骇鑿滃崟"
-    }
-  },
-  "page": {
-    "page": {
-      "en": "Page",
-      "zh-CN": "椤甸潰"
-    },
-    "form": {
-      "en": "Form",
-      "zh-CN": "琛ㄥ崟椤�"
-    },
-    "formBasic": {
-      "en": "Basic Form",
-      "zh-CN": "鍩虹琛ㄥ崟"
-    },
-    "formStep": {
-      "en": "Step Form",
-      "zh-CN": "鍒嗘琛ㄥ崟"
-    },
-    "formHigh": {
-      "en": "Advanced Form",
-      "zh-CN": "楂樼骇琛ㄥ崟"
-    },
-    "desc": {
-      "en": "Details",
-      "zh-CN": "璇︽儏椤�"
-    },
-    "descBasic": {
-      "en": "Basic Details",
-      "zh-CN": "鍩虹璇︽儏椤�"
-    },
-    "descHigh": {
-      "en": "Advanced Details",
-      "zh-CN": "楂樼骇璇︽儏椤�"
-    },
-    "result": {
-      "en": "Result",
-      "zh-CN": "缁撴灉椤�"
-    },
-    "resultSuccess": {
-      "en": "Success",
-      "zh-CN": "鎴愬姛椤�"
-    },
-    "resultFail": {
-      "en": "Failed",
-      "zh-CN": "澶辫触椤�"
-    },
-    "account": {
-      "en": "Personal",
-      "zh-CN": "涓汉椤�"
-    },
-    "accountCenter": {
-      "en": "Personal Center",
-      "zh-CN": "涓汉涓績"
-    },
-    "accountSetting": {
-      "en": "Personal Settings",
-      "zh-CN": "涓汉璁剧疆"
-    },
-    "exception": {
-      "en": "Exception",
-      "zh-CN": "寮傚父椤�"
-    },
-    "netWorkError": {
-      "en": "Network Error",
-      "zh-CN": "缃戠粶閿欒"
-    },
-    "notData": {
-      "en": "No data",
-      "zh-CN": "鏃犳暟鎹�"
-    },
-    "list": {
-      "en": "List page",
-      "zh-CN": "鍒楄〃椤�"
-    },
-    "listCard": {
-      "en": "Card list",
-      "zh-CN": "鍗$墖鍒楄〃"
-    },
-    "listBasic": {
-      "en": "Basic list",
-      "zh-CN": "鏍囧噯鍒楄〃"
-    },
-    "listSearch": {
-      "en": "Search list",
-      "zh-CN": "鎼滅储鍒楄〃"
-    }
-  },
-  "permission": {
-    "permission": {
-      "en": "Permission",
-      "zh-CN": "鏉冮檺绠$悊"
-    },
-    "front": {
-      "en": "front-end",
-      "zh-CN": "鍩轰簬鍓嶇鏉冮檺"
-    },
-    "frontPage": {
-      "en": "Page",
-      "zh-CN": "椤甸潰鏉冮檺"
-    },
-    "frontBtn": {
-      "en": "Button",
-      "zh-CN": "鎸夐挳鏉冮檺"
-    },
-    "frontTestA": {
-      "en": "Test page A",
-      "zh-CN": "鏉冮檺娴嬭瘯椤礎"
-    },
-    "frontTestB": {
-      "en": "Test page B",
-      "zh-CN": "鏉冮檺娴嬭瘯椤礏"
-    },
-    "back": {
-      "en": "background",
-      "zh-CN": "鍩轰簬鍚庡彴鏉冮檺"
-    },
-    "backPage": {
-      "en": "Page",
-      "zh-CN": "椤甸潰鏉冮檺"
-    },
-    "backBtn": {
-      "en": "Button",
-      "zh-CN": "鎸夐挳鏉冮檺"
-    }
-  },
-  "setup": {
-    "page": {
-      "en": "Intro page",
-      "zh-CN": "寮曞椤�"
-    }
-  },
-  "system": {
-    "moduleName": {
-      "en": "System management",
-      "zh-CN": "绯荤粺绠$悊"
-    },
-    "account": {
-      "en": "Account management",
-      "zh-CN": "璐﹀彿绠$悊"
-    },
-    "account_detail": {
-      "en": "Account detail",
-      "zh-CN": "璐﹀彿璇︽儏"
-    },
-    "password": {
-      "en": "Change password",
-      "zh-CN": "淇敼瀵嗙爜"
-    },
-    "dept": {
-      "en": "Department management",
-      "zh-CN": "閮ㄩ棬绠$悊"
-    },
-    "menu": {
-      "en": "Menu management",
-      "zh-CN": "鑿滃崟绠$悊"
-    },
-    "role": {
-      "en": "Role management",
-      "zh-CN": "瑙掕壊绠$悊"
-    }
-  },
-  "table": {
-    "table": {
-      "en": "Table",
-      "zh-CN": "Table"
-    },
-    "basic": {
-      "en": "Basic",
-      "zh-CN": "鍩虹琛ㄦ牸"
-    },
-    "treeTable": {
-      "en": "Tree",
-      "zh-CN": "鏍戝舰琛ㄦ牸"
-    },
-    "fetchTable": {
-      "en": "Remote loading",
-      "zh-CN": "杩滅▼鍔犺浇绀轰緥"
-    },
-    "fixedColumn": {
-      "en": "Fixed column",
-      "zh-CN": "鍥哄畾鍒�"
-    },
-    "customerCell": {
-      "en": "Custom column",
-      "zh-CN": "鑷畾涔夊垪"
-    },
-    "formTable": {
-      "en": "Open search",
-      "zh-CN": "寮�鍚悳绱㈠尯鍩�"
-    },
-    "useTable": {
-      "en": "UseTable",
-      "zh-CN": "UseTable"
-    },
-    "refTable": {
-      "en": "RefTable",
-      "zh-CN": "RefTable"
-    },
-    "multipleHeader": {
-      "en": "MultiLevel header",
-      "zh-CN": "澶氱骇琛ㄥご"
-    },
-    "mergeHeader": {
-      "en": "Merge cells",
-      "zh-CN": "鍚堝苟鍗曞厓鏍�"
-    },
-    "expandTable": {
-      "en": "Expandable table",
-      "zh-CN": "鍙睍寮�琛ㄦ牸"
-    },
-    "fixedHeight": {
-      "en": "Fixed height",
-      "zh-CN": "瀹氶珮/澶撮儴鑷畾涔�"
-    },
-    "footerTable": {
-      "en": "Footer",
-      "zh-CN": "琛ㄥ熬琛屽悎璁�"
-    },
-    "editCellTable": {
-      "en": "Editable cell",
-      "zh-CN": "鍙紪杈戝崟鍏冩牸"
-    },
-    "editRowTable": {
-      "en": "Editable row",
-      "zh-CN": "鍙紪杈戣"
-    },
-    "authColumn": {
-      "en": "Auth column",
-      "zh-CN": "鏉冮檺鍒�"
-    },
-    "resizeParentHeightTable": {
-      "en": "resizeParentHeightTable",
-      "zh-CN": "缁ф壙鐖跺厓绱犻珮搴�"
-    }
-  }
-}
\ No newline at end of file
diff --git a/Tiger.Business/Language/sys.json b/Tiger.Business/Language/sys.json
deleted file mode 100644
index 08646fd..0000000
--- a/Tiger.Business/Language/sys.json
+++ /dev/null
@@ -1,326 +0,0 @@
-{
-  "language": {
-    "en": "English",
-    "zh-CN": "涓枃"
-  },
-  "api": {
-    "operationFailed": {
-      "en": "Operation failed",
-      "zh-CN": "鎿嶄綔澶辫触"
-    },
-    "errorTip": {
-      "en": "Error Tip",
-      "zh-CN": "閿欒鎻愮ず"
-    },
-    "errorMessage": {
-      "en": "The operation failed, the system is abnormal!",
-      "zh-CN": "鎿嶄綔澶辫触,绯荤粺寮傚父!"
-    },
-    "timeoutMessage": {
-      "en": "Login timed out, please log in again!",
-      "zh-CN": "鐧诲綍瓒呮椂,璇烽噸鏂扮櫥褰�!"
-    },
-    "apiTimeoutMessage": {
-      "en": "The interface request timed out, please refresh the page and try again!",
-      "zh-CN": "鎺ュ彛璇锋眰瓒呮椂,璇峰埛鏂伴〉闈㈤噸璇�!"
-    },
-    "apiRequestFailed": {
-      "en": "The interface request failed, please try again later!",
-      "zh-CN": "璇锋眰鍑洪敊锛岃绋嶅�欓噸璇�"
-    },
-    "networkException": {
-      "en": "network anomaly",
-      "zh-CN": "缃戠粶寮傚父"
-    },
-    "networkExceptionMsg": {
-      "en": "Please check if your network connection is normal! The network is abnormal",
-      "zh-CN": "缃戠粶寮傚父锛岃妫�鏌ユ偍鐨勭綉缁滆繛鎺ユ槸鍚︽甯�!"
-    },
-    "errMsg401": {
-      "en": "The user does not have permission (token, user name, password error)!",
-      "zh-CN": "鐢ㄦ埛娌℃湁鏉冮檺锛堜护鐗屻�佺敤鎴峰悕銆佸瘑鐮侀敊璇級!"
-    },
-    "errMsg403": {
-      "en": "The user is authorized, but access is forbidden!",
-      "zh-CN": "鐢ㄦ埛寰楀埌鎺堟潈锛屼絾鏄闂槸琚姝㈢殑銆�!"
-    },
-    "errMsg404": {
-      "en": "Network request error, the resource was not found!",
-      "zh-CN": "缃戠粶璇锋眰閿欒,鏈壘鍒拌璧勬簮!"
-    },
-    "errMsg405": {
-      "en": "Network request error, request method not allowed!",
-      "zh-CN": "缃戠粶璇锋眰閿欒,璇锋眰鏂规硶鏈厑璁�!"
-    },
-    "errMsg408": {
-      "en": "Network request timed out!",
-      "zh-CN": "缃戠粶璇锋眰瓒呮椂!"
-    },
-    "errMsg500": {
-      "en": "Server error, please contact the administrator!",
-      "zh-CN": "鏈嶅姟鍣ㄩ敊璇�,璇疯仈绯荤鐞嗗憳!"
-    },
-    "errMsg501": {
-      "en": "The network is not implemented!",
-      "zh-CN": "缃戠粶鏈疄鐜�!"
-    },
-    "errMsg502": {
-      "en": "Network Error!",
-      "zh-CN": "缃戠粶閿欒!"
-    },
-    "errMsg503": {
-      "en": "The service is unavailable, the server is temporarily overloaded or maintained!",
-      "zh-CN": "鏈嶅姟涓嶅彲鐢紝鏈嶅姟鍣ㄦ殏鏃惰繃杞芥垨缁存姢!"
-    },
-    "errMsg504": {
-      "en": "Network timeout!",
-      "zh-CN": "缃戠粶瓒呮椂!"
-    },
-    "errMsg505": {
-      "en": "The http version does not support the request!",
-      "zh-CN": "http鐗堟湰涓嶆敮鎸佽璇锋眰!"
-    }
-  },
-  "app": {
-    "logoutTip": {
-      "en": "Reminder",
-      "zh-CN": "娓╅Θ鎻愰啋"
-    },
-    "logoutMessage": {
-      "en": "Confirm to exit the system?",
-      "zh-CN": "鏄惁纭閫�鍑虹郴缁�?"
-    },
-    "menuLoading": {
-      "en": "Menu loading...",
-      "zh-CN": "鑿滃崟鍔犺浇涓�..."
-    }
-  },
-  "errorLog": {
-    "tableTitle": {
-      "en": "Error log list",
-      "zh-CN": "閿欒鏃ュ織鍒楄〃"
-    },
-    "tableColumnType": {
-      "en": "Type",
-      "zh-CN": "绫诲瀷"
-    },
-    "tableColumnDate": {
-      "en": "Time",
-      "zh-CN": "鏃堕棿"
-    },
-    "tableColumnFile": {
-      "en": "File",
-      "zh-CN": "鏂囦欢"
-    },
-    "tableColumnMsg": {
-      "en": "Error message",
-      "zh-CN": "閿欒淇℃伅"
-    },
-    "tableColumnStackMsg": {
-      "en": "Stack info",
-      "zh-CN": "stack淇℃伅"
-    },
-    "tableActionDesc": {
-      "en": "Details",
-      "zh-CN": "璇︽儏"
-    },
-    "modalTitle": {
-      "en": "Error details",
-      "zh-CN": "閿欒璇︽儏"
-    },
-    "fireVueError": {
-      "en": "Fire vue error",
-      "zh-CN": "鐐瑰嚮瑙﹀彂vue閿欒"
-    },
-    "fireResourceError": {
-      "en": "Fire resource error",
-      "zh-CN": "鐐瑰嚮瑙﹀彂璧勬簮鍔犺浇閿欒"
-    },
-    "fireAjaxError": {
-      "en": "Fire ajax error",
-      "zh-CN": "鐐瑰嚮瑙﹀彂ajax閿欒"
-    },
-    "enableMessage": {
-      "en": "Only effective when useErrorHandle=true in `/src/settings/projectSetting.ts`.",
-      "zh-CN": "鍙湪`/src/settings/projectSetting.ts` 鍐呯殑useErrorHandle=true鏃剁敓鏁�."
-    }
-  },
-  "exception": {
-    "backLogin": {
-      "en": "Back Login",
-      "zh-CN": "杩斿洖鐧诲綍"
-    },
-    "backHome": {
-      "en": "Back Home",
-      "zh-CN": "杩斿洖棣栭〉"
-    },
-    "subTitle403": {
-      "en": "Sorry, you don't have access to this page.",
-      "zh-CN": "鎶辨瓑锛屾偍鏃犳潈璁块棶姝ら〉闈€��"
-    },
-    "subTitle404": {
-      "en": "Sorry, the page you visited does not exist.",
-      "zh-CN": "鎶辨瓑锛屾偍璁块棶鐨勯〉闈笉瀛樺湪銆�"
-    },
-    "subTitle500": {
-      "en": "Sorry, the server is reporting an error.",
-      "zh-CN": "鎶辨瓑锛屾湇鍔″櫒鎶ュ憡閿欒銆�"
-    },
-    "noDataTitle": {
-      "en": "No data on the current page.",
-      "zh-CN": "褰撳墠椤垫棤鏁版嵁"
-    },
-    "networkErrorTitle": {
-      "en": "Network Error",
-      "zh-CN": "缃戠粶閿欒"
-    },
-    "networkErrorSubTitle": {
-      "en": "Sorry锛孻our network connection has been disconnected, please check your network!",
-      "zh-CN": "鎶辨瓑锛屾偍鐨勭綉缁滆繛鎺ュ凡鏂紑锛岃妫�鏌ユ偍鐨勭綉缁滐紒"
-    }
-  },
-  "lock": {
-    "unlock": {
-      "en": "Click to unlock",
-      "zh-CN": "鐐瑰嚮瑙i攣"
-    },
-    "alert": {
-      "en": "Lock screen password error",
-      "zh-CN": "閿佸睆瀵嗙爜閿欒"
-    },
-    "backToLogin": {
-      "en": "Back to login",
-      "zh-CN": "杩斿洖鐧诲綍"
-    },
-    "entry": {
-      "en": "Enter the system",
-      "zh-CN": "杩涘叆绯荤粺"
-    },
-    "placeholder": {
-      "en": "Please enter the lock screen password or user password",
-      "zh-CN": "璇疯緭鍏ラ攣灞忓瘑鐮佹垨鑰呯敤鎴峰瘑鐮�"
-    }
-  },
-  "login": {
-    "backSignIn": {
-      "en": "Back sign in",
-      "zh-CN": "杩斿洖"
-    },
-    "mobileSignInFormTitle": {
-      "en": "Mobile sign in",
-      "zh-CN": "鎵嬫満鐧诲綍"
-    },
-    "qrSignInFormTitle": {
-      "en": "Qr code sign in",
-      "zh-CN": "浜岀淮鐮佺櫥褰�"
-    },
-    "signInFormTitle": {
-      "en": "Sign in",
-      "zh-CN": "鐧诲綍"
-    },
-    "welcomeLoginButton": {
-      "en": "Welcome to sign in wms system",
-      "zh-CN": "娆㈣繋鐧诲綍"
-    },
-    "signUpFormTitle": {
-      "en": "Sign up",
-      "zh-CN": "娉ㄥ唽"
-    },
-    "forgetFormTitle": {
-      "en": "Reset password",
-      "zh-CN": "閲嶇疆瀵嗙爜"
-    },
-    "signInTitle": {
-      "en": "Backstage management system",
-      "zh-CN": "鍗忓垱鏁版嵁WMS绯荤粺鐧诲綍"
-    },
-    "signInDesc": {
-      "en": "Enter your personal details and get started!",
-      "zh-CN": "鍗忓悓鈥㈠垱閫犳墦閫犳櫤鑳藉埗閫犱粨鍌ㄧ鐞嗙郴缁�" //"涓撴敞宸ヤ笟鏅鸿兘鍒堕�狅紝鑷姩鍖栭泦鎴愭湇鍔★紒鎵撻�犺嚜鍔ㄥ寲銆佹櫤鑳藉寲鐨勫伐涓�4.0涓灑绁炵粡绯荤粺锛�"
-    },
-    "policy": {
-      "en": "I agree to the xxx Privacy Policy",
-      "zh-CN": "鎴戝悓鎰弜xx闅愮鏀跨瓥"
-    },
-    "scanSign": {
-      "en": "scanning the code to complete the login",
-      "zh-CN": "鎵爜鍚庣偣鍑籠"纭\"锛屽嵆鍙畬鎴愮櫥褰�"
-    },
-    "loginButton": {
-      "en": "Sign in",
-      "zh-CN": "鐧诲綍"
-    },
-    "registerButton": {
-      "en": "Sign up",
-      "zh-CN": "娉ㄥ唽"
-    },
-    "rememberMe": {
-      "en": "Remember me",
-      "zh-CN": "璁颁綇鎴�"
-    },
-    "forgetPassword": {
-      "en": "Forget Password?",
-      "zh-CN": "蹇樿瀵嗙爜?"
-    },
-    "otherSignIn": {
-      "en": "Sign in with",
-      "zh-CN": "鍏朵粬鐧诲綍鏂瑰紡"
-    },
-    "loginSuccessTitle": {
-      "en": "Login successful",
-      "zh-CN": "鐧诲綍鎴愬姛"
-    },
-    "loginSuccessDesc": {
-      "en": "Welcome back",
-      "zh-CN": "娆㈣繋鍥炴潵"
-    },
-    "accountPlaceholder": {
-      "en": "Please input username",
-      "zh-CN": "璇疯緭鍏ヨ处鍙�"
-    },
-    "passwordPlaceholder": {
-      "en": "Please input password",
-      "zh-CN": "璇疯緭鍏ュ瘑鐮�"
-    },
-    "smsPlaceholder": {
-      "en": "Please input sms code",
-      "zh-CN": "璇疯緭鍏ラ獙璇佺爜"
-    },
-    "mobilePlaceholder": {
-      "en": "Please input mobile",
-      "zh-CN": "璇疯緭鍏ユ墜鏈哄彿鐮�"
-    },
-    "policyPlaceholder": {
-      "en": "Register after checking",
-      "zh-CN": "鍕鹃�夊悗鎵嶈兘娉ㄥ唽"
-    },
-    "diffPwd": {
-      "en": "The two passwords are inconsistent",
-      "zh-CN": "涓ゆ杈撳叆瀵嗙爜涓嶄竴鑷�"
-    },
-    "userName": {
-      "en": "Username",
-      "zh-CN": "璐﹀彿"
-    },
-    "password": {
-      "en": "Password",
-      "zh-CN": "瀵嗙爜"
-    },
-    "confirmPassword": {
-      "en": "Confirm Password",
-      "zh-CN": "纭瀵嗙爜"
-    },
-    "email": {
-      "en": "Email",
-      "zh-CN": "閭"
-    },
-    "smsCode": {
-      "en": "SMS code",
-      "zh-CN": "鐭俊楠岃瘉鐮�"
-    },
-    "mobile": {
-      "en": "Mobile",
-      "zh-CN": "鎵嬫満鍙风爜"
-    }
-  }
-}
\ No newline at end of file
diff --git a/Tiger.Business/MES/Biz.Route.cs b/Tiger.Business/MES/Biz.Route.cs
deleted file mode 100644
index 24cc730..0000000
--- a/Tiger.Business/MES/Biz.Route.cs
+++ /dev/null
@@ -1,1064 +0,0 @@
-锘縰sing Tiger.Model;
-using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.Linq.Expressions;
-using System.Text;
-using System.Threading.Tasks;
-using Rhea.Common;
-using System.Net;
-using System.Linq;
-using Newtonsoft.Json;
-using Tiger.IBusiness;
-using Microsoft.AspNetCore.Http;
-using Tiger.Model.Entitys.WMS.DTOS;
-using static Tiger.Model.BIZ_MES_WO;
-using Tiger.Model.Entitys.MES.Position;
-using System.Security.Cryptography;
-
-namespace Tiger.Business
-{
-    public partial class Biz
-    {
-        /// <summary>
-        /// 宸ヨ壓璺嚎
-        /// </summary>
-        public partial class Route : IRoute
-        {
-            /// <summary>
-            /// 鑾峰彇宸ヨ壓璺嚎
-            /// </summary>
-            /// <param name="routerCode"></param>
-            /// <returns></returns>
-            public async Task<ApiAction<List<MES_ROUTE>>> GetRoute(string routerCode)
-            {
-                var res = new ApiAction<List<MES_ROUTE>>();
-                List<MES_ROUTE> list = new List<MES_ROUTE>();
-                try
-                {
-                    list = await Db.Queryable<MES_ROUTE>()
-                        .WhereIF(!string.IsNullOrEmpty(routerCode), x => x.ROT_CODE.Equals(routerCode))
-                        .OrderBy(x => x.CREATE_TIME).ToListAsync();
-                }
-                catch (Exception ex)
-                {
-                    res.CatchExceptionWithLog(ex, "鏌ヨ寮傚父");
-                }
-                res.Data = list;
-                return res;
-            }
-
-            /// <summary>
-            /// 鑾峰彇宸ヨ壓璺嚎鍥惧舰鏁版嵁
-            /// </summary>
-            /// <param name="routerId"></param>
-            /// <returns></returns>
-            public async Task<ApiAction<RouteData>> GetRouteData(string routerId)
-            {
-                var res = new ApiAction<RouteData>();
-                RouteData rotData = new RouteData();
-                try
-                {
-                    if (string.IsNullOrEmpty(routerId))
-                    {
-                        res.IsSuccessed = false;
-                        res.LocaleMsg = new($"浼犲叆鐨勫伐鑹鸿矾绾縄D涓虹┖锛屼笉鑳芥煡鎵惧伐鑹鸿矾绾匡紒");
-                        return res;
-                    }
-                    //宸ヨ壓璺嚎
-                    var route = await Db.Queryable<MES_ROUTE>()
-                        .WhereIF(!string.IsNullOrEmpty(routerId), x => x.ID.Equals(routerId) || x.ROT_CODE == routerId)
-                        .OrderBy(x => x.CREATE_TIME).FirstAsync();
-                    rotData.route = route;
-                    if (route == null)
-                    {
-                        res.IsSuccessed = false;
-                        res.LocaleMsg = new($"涓嶈兘鏌ユ壘鍒板伐鑹鸿矾绾匡紒");
-                        return res;
-                    }
-                    //鑺傜偣
-                    var nodes = await Db.Queryable<MES_ROUTE_NODE>()
-                        .WhereIF(!string.IsNullOrEmpty(route.ID), x => x.ROT_ID.Equals(route.ID))
-                        .ToListAsync();
-                    foreach (var node in nodes)
-                    {
-                        node.node = new()
-                        {
-                            id = node.ID,
-                            type = node.GPH_TYPE,
-                            x = node.GPH_X,
-                            y = node.GPH_Y,
-                            properties = node.GPH_PROP,
-                            text = new()
-                            {
-                                x = node.GPH_X,
-                                y = node.GPH_Y,
-                                value = node.GPH_TEXT
-                            }
-                        };
-                    }
-                    rotData.nodes = nodes;
-
-                    var acts = await Db.Queryable<MES_ROUTE_NODE_ACT>()
-                        .WhereIF(!string.IsNullOrEmpty(route.ID), x => x.ROT_ID.Equals(route.ID))
-                        .ToListAsync();
-                    foreach (var act in acts)
-                    {
-                        act.node = new()
-                        {
-                            id = act.ID,
-                            type = act.GPH_TYPE,
-                            x = act.GPH_X,
-                            y = act.GPH_Y,
-                            properties = act.GPH_PROP,
-                            text = new()
-                            {
-                                x = act.GPH_X,
-                                y = act.GPH_Y,
-                                value = act.GPH_TEXT
-                            }
-                        };
-                    }
-                    rotData.acts = acts;
-
-                    //杈�
-                    var edges = await Db.Queryable<MES_ROUTE_EDGE>()
-                        .WhereIF(!string.IsNullOrEmpty(route.ID), x => x.ROT_ID.Equals(route.ID))
-                        .ToListAsync();
-                    foreach (var edge in edges)
-                    {
-                        edge.edge = new()
-                        {
-                            id = edge.ID,
-                            type = edge.GPH_TYPE,
-                            sourceNodeId = edge.SRC_NODE,
-                            targetNodeId = edge.TGT_NODE,
-                            properties = edge.GPH_PROP,
-                            startPoint = new()
-                            {
-                                x = edge.GPH_SRC_X,
-                                y = edge.GPH_SRC_Y,
-                            },
-                            endPoint = new()
-                            {
-                                x = edge.GPH_TGT_X,
-                                y = edge.GPH_TGT_Y,
-                            },
-                            pointsList = new()
-                            {
-                                new(){
-                                    x = edge.GPH_SRC_X,
-                                    y = edge.GPH_SRC_Y,
-                                },
-                                new(){
-                                    x = edge.GPH_TGT_X,
-                                    y = edge.GPH_TGT_Y,
-                                }
-                            }
-                        };
-                    }
-                    rotData.edges = edges;
-                }
-                catch (Exception ex)
-                {
-                    res.CatchExceptionWithLog(ex, "鏌ヨ寮傚父");
-                }
-                res.Data = rotData;
-                return res;
-            }
-
-            /// <summary>
-            /// 淇濆瓨杈规暟鎹�
-            /// </summary>
-            /// <param name="routeEdge"></param>
-            /// <returns></returns>
-            public async Task<ApiAction> SaveEdges(List<MES_ROUTE_EDGE> routeEdge)
-            {
-                var result = new ApiAction();
-                try
-                {
-                    var db = Db;
-                    var dbTran = db.UseTran(() =>
-                    {
-                        var y = db.Storageable(routeEdge)
-                           .WhereColumns(t => new { t.ID, t.GHOST_ROW })
-                           .ToStorage();
-                        y.AsInsertable.ExecuteCommand();
-                        y.AsUpdateable.ExecuteCommand();
-                    });
-                    if (!dbTran.IsSuccess)
-                    {
-                        result.IsSuccessed = false;
-                        result.LocaleMsg = new($"淇濆瓨杈规暟鎹紓甯�");
-                    }
-                }
-                catch (Exception ex)
-                {
-                    result.CatchExceptionWithLog(ex, "淇濆瓨杈规暟鎹紓甯�");
-                }
-                return await Task.FromResult(result);
-            }
-
-            /// <summary>
-            /// 淇濆瓨鑺傜偣鏁版嵁
-            /// </summary>
-            /// <param name="routeNode"></param>
-            /// <returns></returns>
-            public async Task<ApiAction> SaveNodes(List<MES_ROUTE_NODE> routeNode)
-            {
-                var result = new ApiAction();
-                try
-                {
-                    var db = Db;
-                    var dbTran = db.UseTran(() =>
-                    {
-                        var y = db.Storageable(routeNode)
-                           .WhereColumns(t => new { t.ID, t.GHOST_ROW })
-                           .ToStorage();
-                        y.AsInsertable.ExecuteCommand();
-                        y.AsUpdateable.ExecuteCommand();
-                    });
-                    if (!dbTran.IsSuccess)
-                    {
-                        result.IsSuccessed = false;
-                        result.LocaleMsg = new($"淇濆瓨鑺傜偣鏁版嵁寮傚父");
-                    }
-                }
-                catch (Exception ex)
-                {
-                    result.CatchExceptionWithLog(ex, "淇濆瓨鑺傜偣鏁版嵁寮傚父");
-                }
-                return await Task.FromResult(result);
-            }
-
-            /// <summary>
-            /// 淇濆瓨琛屼负
-            /// </summary>
-            /// <param name="routeAct"></param>
-            /// <returns></returns>
-            public async Task<ApiAction> SaveActs(List<MES_ROUTE_NODE_ACT> routeAct)
-            {
-                var result = new ApiAction();
-                try
-                {
-                    var db = Db;
-                    var dbTran = db.UseTran(() =>
-                    {
-                        var y = db.Storageable(routeAct)
-                           .WhereColumns(t => new { t.ID, t.GHOST_ROW })
-                           .ToStorage();
-                        y.AsInsertable.ExecuteCommand();
-                        y.AsUpdateable.ExecuteCommand();
-                    });
-                    if (!dbTran.IsSuccess)
-                    {
-                        result.IsSuccessed = false;
-                        result.LocaleMsg = new($"淇濆瓨琛屼负鏁版嵁寮傚父");
-                    }
-                }
-                catch (Exception ex)
-                {
-                    result.CatchExceptionWithLog(ex, "淇濆瓨琛屼负鏁版嵁寮傚父");
-                }
-                return await Task.FromResult(result);
-            }
-
-            /// <summary>
-            /// 淇濆瓨
-            /// </summary>
-            /// <param name="route"></param>
-            /// <returns></returns>
-            public async Task<ApiAction> SaveRoute(MES_ROUTE route)
-            {
-                var result = new ApiAction();
-                try
-                {
-                    var _route = Db.Queryable<MES_ROUTE>().Where(x => x.ROT_CODE == route.ROT_CODE).First();
-                    //if (_route != null && Db.Queryable<MES_ROUTE_NODE>().Where(x => x.ROT_ID == _route.ID).Any())
-                    //{
-                    //    result.IsSuccessed = false;
-                    //    result.LocaleMsg = new($"宸ヨ壓璺嚎宸茬粡鏈夎璁¤褰曪紝涓嶈兘淇濆瓨锛�");
-                    //    return result;
-                    //}
-                    if (_route != null && Db.Queryable<MES_PROD_OPER>().Where(x => x.ROT_ID == _route.ID).Any())
-                    {
-                        result.IsSuccessed = false;
-                        result.LocaleMsg = new($"宸ヨ壓璺嚎宸茬粡鏈夌粦瀹氳褰曪紝涓嶈兘淇濆瓨锛�");
-                        return result;
-                    }
-                    var db = Db;
-                    var dbTran = db.UseTran(() =>
-                    {
-                        var y = db.Storageable(route)
-                           //.WhereColumns(t => new { t.ROT_CODE, t.GHOST_ROW })
-                           .ToStorage();
-                        y.AsInsertable.ExecuteCommand();
-                        y.AsUpdateable.ExecuteCommand();
-                    });
-                    if (!dbTran.IsSuccess)
-                    {
-                        result.IsSuccessed = false;
-                        result.Message = $"淇濆瓨宸ヨ壓璺嚎寮傚父";
-                    }
-                }
-                catch (Exception ex)
-                {
-                    result.CatchExceptionWithLog(ex, "淇濆瓨宸ヨ壓璺嚎寮傚父");
-                }
-                return await Task.FromResult(result);
-            }
-
-            /// <summary>
-            /// 淇濆瓨宸ヨ壓璺嚎鍥惧舰鏁版嵁
-            /// </summary>
-            /// <param name="routeData"></param>
-            /// <returns></returns>
-            public async Task<ApiAction> SaveRouteData(RouteData routeData)
-            {
-                var result = new ApiAction();
-                try
-                {
-                    var nodeIds = routeData.nodes.Select(x => x.ID).ToList();
-                    var actIds = routeData.acts.Select(x => x.ID).ToList();
-                    //濡傛灉宸ュ簭鑺傜偣ID娌″湪浜у搧宸ュ簭閲屽氨鏂板
-                    List<MES_PROD_OPER> operList = new List<MES_PROD_OPER>();
-                    foreach (var node in routeData.nodes)
-                    {
-                        if (!Db.Queryable<MES_PROD_OPER>().Any(q => q.NODE_ID == node.ID && q.ROT_ID == routeData.route.ID))
-                        {
-                            operList.Add(new()
-                            {
-                                PROD_CODE = routeData.route.PROD_CODE,
-                                CUST_CODE = routeData.route.CUST_CODE,
-                                NODE_ID = node.ID,
-                                NODE_NAME = node.NODE_NAME,
-                                ROT_ID = node.ROT_ID,
-                                OPER_CODE = node.OPER_CODE,
-                                IS_ACTIVE = "Y",
-                                CAN_SKIP = "N",
-                                IS_CALC_FPY = "N",
-                                ALLOW_DFT_IN = "N",
-                                IS_INPUT = "N",
-                                IS_OUTPUT = "N",
-                                AUTH_ORG = node.AUTH_ORG,
-                                AUTH_PROD = node.AUTH_PROD,
-                                AUTH_WH = node.AUTH_WH,
-                            });
-                        }
-                    }
-                    //濡傛灉琛屼负鑺傜偣ID娌″湪浜у搧琛屼负閲屽氨鏂板
-                    List<MES_PROD_ACTION> actList = new List<MES_PROD_ACTION>();
-                    foreach (var act in routeData.acts)
-                    {
-                        if (!Db.Queryable<MES_PROD_ACTION>().Any(q => q.ACT_ID == act.ID && q.ROT_ID == routeData.route.ID))
-                        {
-                            actList.Add(new()
-                            {
-                                PROD_CODE = routeData.route.PROD_CODE,
-                                CUST_CODE = routeData.route.CUST_CODE,
-                                NODE_ID = act.NODE_ID,
-                                ACT_ID = act.ID,
-                                ACT_TYPE = act.ACT_TYPE,
-                                ROT_ID = act.ROT_ID,
-                                ACT_CODE = act.ACT_CODE,
-                                RULE_CODE = "",
-                                ITEM_CODE = "",
-                                TEST_CODE = "",
-                                SAPL_CODE = "",
-                                LABEL_CODE = "",
-                                PKG_CODE = "",
-                                IS_ACTIVE = "Y",
-                                SETUP_FINISH = "N",
-                                AUTH_ORG = act.AUTH_ORG,
-                                AUTH_PROD = act.AUTH_PROD,
-                                AUTH_WH = act.AUTH_WH,
-                            });
-                        }
-                    }
-                    var db = Db;
-                    var dbTran = db.UseTran(() =>
-                    {
-                        if (routeData.route != null)
-                        {
-                            var y = db.Storageable(routeData.route)
-                               .WhereColumns(t => new { t.ROT_CODE, t.GHOST_ROW })
-                               .ToStorage();
-                            y.AsInsertable.ExecuteCommand();
-                            y.AsUpdateable.IgnoreColumns(x => x.ID).ExecuteCommand();
-                        }
-                        if (!routeData.route.PROD_CODE.IsNullOrEmpty())
-                        {
-                            db.Deleteable<MES_PROD_OPER>().Where(x => x.ROT_ID == routeData.route.ID && x.PROD_CODE == routeData.route.PROD_CODE && !SqlFunc.ContainsArray(nodeIds, x.NODE_ID)).ExecuteCommand();
-                            db.Deleteable<MES_PROD_ACTION>().Where(x => x.ROT_ID == routeData.route.ID && x.PROD_CODE == routeData.route.PROD_CODE && !SqlFunc.ContainsArray(actIds, x.ACT_ID)).ExecuteCommand();
-                        }
-                        db.Deleteable<MES_ROUTE_NODE>(false).Where(x => x.ROT_ID == routeData.route.ID).ExecuteCommand();
-                        db.Deleteable<MES_ROUTE_EDGE>(false).Where(x => x.ROT_ID == routeData.route.ID).ExecuteCommand();
-                        db.Deleteable<MES_ROUTE_NODE_ACT>(false).Where(x => x.ROT_ID == routeData.route.ID).ExecuteCommand();
-                        if (routeData.nodes != null)
-                        {
-                            db.Insertable(routeData.nodes).ExecuteCommand();
-                        }
-                        if (routeData.edges != null)
-                        {
-                            db.Insertable(routeData.edges).ExecuteCommand();
-                        }
-                        if (routeData.acts != null)
-                        {
-                            db.Insertable(routeData.acts).ExecuteCommand();
-                        }
-                        if (!routeData.route.PROD_CODE.IsNullOrEmpty())
-                        {
-                            if (operList.Count > 0)
-                            {
-                                db.Insertable(operList).ExecuteCommand();
-                            }
-                            if (actList.Count > 0)
-                            {
-                                db.Insertable(actList).ExecuteCommand();
-                            }
-                        }
-                    });
-                    if (!dbTran.IsSuccess)
-                    {
-                        result.IsSuccessed = false;
-                        result.LocaleMsg = new($"淇濆瓨宸ヨ壓璺嚎鍥惧舰鏁版嵁寮傚父");
-                    }
-                }
-                catch (Exception ex)
-                {
-                    result.CatchExceptionWithLog(ex, "淇濆瓨宸ヨ壓璺嚎鍥惧舰鏁版嵁寮傚父");
-                }
-                return await Task.FromResult(result);
-            }
-
-            /// <summary>
-            /// 鍒犻櫎宸ヨ壓璺嚎
-            /// </summary>
-            /// <param name="routeId"></param>
-            /// <returns></returns>
-            public async Task<ApiAction> DeleteRoute(string routeId)
-            {
-                var result = new ApiAction();
-                try
-                {
-                    //鏌ヨ鏄惁宸茬粡鏈夊伐鍗曞湪鐢ㄦ垨鑰呮湁缁戝畾浜у搧
-                    if (Biz.Db.Queryable<MES_PROD_OPER>().Any(q=>q.ROT_ID == routeId))
-                    {
-                        result.IsSuccessed = false;
-                        result.LocaleMsg = new($"宸ヨ壓璺嚎宸茬粡缁戝畾浜嗕骇鍝侊紝涓嶈兘鍒犻櫎宸ヨ壓璺嚎");
-                        return result;
-                    }
-
-                    var db = Db;
-                    var dbTran = db.UseTran(() =>
-                    {
-                        db.Deleteable<MES_ROUTE_NODE>(false).Where(x => x.ROT_ID == routeId).ExecuteCommand();
-                        db.Deleteable<MES_ROUTE_EDGE>(false).Where(x => x.ROT_ID == routeId).ExecuteCommand();
-                        db.Deleteable<MES_ROUTE_NODE_ACT>(false).Where(x => x.ROT_ID == routeId).ExecuteCommand();
-                        db.Deleteable<MES_ROUTE>().Where(x => x.ID == routeId).ExecuteCommand();
-                    });
-                    if (!dbTran.IsSuccess)
-                    {
-                        result.IsSuccessed = false;
-                        result.LocaleMsg = new($"鍒犻櫎宸ヨ壓璺嚎寮傚父");
-                    }
-                }
-                catch (Exception ex)
-                {
-                    result.CatchExceptionWithLog(ex, "鍒犻櫎宸ヨ壓璺嚎寮傚父");
-                }
-                return await Task.FromResult(result);
-            }
-
-            /// <summary>
-            /// 淇濆瓨鑺傜偣宀椾綅璧勬簮
-            /// </summary>
-            /// <param name="nodePost"></param>
-            /// <returns></returns>
-            public async Task<ApiAction> SaveRouteNodePost(List<MES_ROUTE_NODE_POST> nodePost)
-            {
-                var result = new ApiAction();
-                try
-                {
-                    var db = Db;
-                    var dbTran = db.UseTran(() =>
-                    {
-                        var y = db.Storageable(nodePost)
-                           .ToStorage();
-                        y.AsInsertable.ExecuteCommand();
-                        y.AsUpdateable.ExecuteCommand();
-                    });
-                    if (!dbTran.IsSuccess)
-                    {
-                        result.IsSuccessed = false;
-                        result.LocaleMsg = new($"淇濆瓨鑺傜偣宀椾綅璧勬簮鏁版嵁寮傚父");
-                    }
-                }
-                catch (Exception ex)
-                {
-                    result.CatchExceptionWithLog(ex, "淇濆瓨鑺傜偣宀椾綅璧勬簮鏁版嵁寮傚父");
-                }
-                return await Task.FromResult(result);
-            }
-
-            /// <summary>
-            /// 鍒犻櫎浜у搧缁戝畾鐨勫伐鑹鸿矾绾�
-            /// </summary>
-            /// <param name="input"></param>
-            /// <returns></returns>
-            /// <exception cref="NotImplementedException"></exception>
-            public async Task<ApiAction> DeleteProdRoute(DelProdRotInput input)
-            {
-                var result = new ApiAction();
-                try
-                {
-                    var expable = Expressionable.Create<MES_PROD_ACTION>();
-                    var expableOper = Expressionable.Create<MES_PROD_OPER>();
-                    if (!input.rotId.IsNullOrEmpty())
-                    {
-                        expable.And(x => x.ROT_ID == input.rotId);
-                        expableOper.And(x => x.ROT_ID == input.rotId);
-                    }
-                    else if (!input.rotCode.IsNullOrEmpty())
-                    {
-                        var item = await Db.Queryable<MES_ROUTE>().Where(x => x.ROT_CODE == input.rotCode).FirstAsync();
-                        if (item != null)
-                        {
-                            expable.And(x => x.ROT_ID == item.ID);
-                            expableOper.And(x => x.ROT_ID == item.ID);
-                        }
-                    }
-                    if (!input.prodCode.IsNullOrEmpty())
-                    {
-                        expable.And(x => x.PROD_CODE == input.prodCode );
-                        expableOper.And(x => x.PROD_CODE == input.prodCode);
-                    }
-                    if (!input.custCode.IsNullOrEmpty())
-                    {
-                        expable.And(x => x.CUST_CODE == input.custCode);
-                        expableOper.And(x => x.CUST_CODE == input.custCode);
-                    }
-
-                    var exp = expable.ToExpression();
-                    var expOper = expableOper.ToExpression();
-                    var db = Db;
-                    var dbTran = db.UseTran(() =>
-                    {
-                        if (!input.prodCode.IsNullOrEmpty())
-                        {
-                            db.Deleteable<MES_PROD_ACTION>().Where(exp).ExecuteCommand();
-                            db.Deleteable<MES_PROD_OPER>().Where(expOper).ExecuteCommand();
-                        }
-                        if (input.prodCode.IsNullOrEmpty() && !input.custCode.IsNullOrEmpty())
-                        {
-                            db.Updateable<MES_PROD_ACTION>().SetColumns(x => x.CUST_CODE == "").Where(exp).ExecuteCommand();
-                            db.Updateable<MES_PROD_OPER>().SetColumns(x => x.CUST_CODE == "").Where(expOper).ExecuteCommand();
-                        }
-                    });
-                    if (!dbTran.IsSuccess)
-                    {
-                        result.IsSuccessed = false;
-                        result.LocaleMsg = new($"鍒犻櫎宸ヨ壓璺嚎寮傚父");
-                    }
-                }
-                catch (Exception ex)
-                {
-                    result.CatchExceptionWithLog(ex, "鍒犻櫎宸ヨ壓璺嚎寮傚父");
-                }
-                return result;
-            }
-
-            /// <summary>
-            /// 鍒犻櫎宸ュ崟缁戝畾鐨勫伐鑹鸿矾绾�
-            /// </summary>
-            /// <param name="input"></param>
-            /// <returns></returns>
-            /// <exception cref="NotImplementedException"></exception>
-            public async Task<ApiAction> DeleteWoRoute(DelWoRotInput input)
-            {
-                var result = new ApiAction();
-                try
-                {
-                    var bizMesWo = await Db.Queryable<BIZ_MES_WO>().Where(x => x.ORDER_NO == input.wo).FirstAsync();
-                    if (bizMesWo != null && bizMesWo.STATUS > (int)STATUSs.Imported && bizMesWo.STATUS < (int)STATUSs.Closed)
-                    {
-                        result.IsSuccessed = false;
-                        result.LocaleMsg = new($"宸ュ崟鐘舵�佷负[{EnumHelper.GetDesc(EnumHelper.GetEnum<STATUSs>(bizMesWo.STATUS))}]锛屼笉鑳藉垹闄ゅ伐鑹鸿矾绾�");
-                        return result;
-                    }
-                    var expableNode = Expressionable.Create<MES_WO_NODE>();
-                    var expableEdge = Expressionable.Create<MES_WO_EDGE>();
-                    var expableAct = Expressionable.Create<MES_WO_NODE_ACT>();
-                    var expable = Expressionable.Create<MES_WO_ACTION>();
-                    var expableOper = Expressionable.Create<MES_WO_OPER>();
-                    var _rotId = input.rotId;
-                    if (!string.IsNullOrEmpty(input.rotId))
-                    {
-                        expable.And(x => x.ROT_ID == input.rotId);
-                        expableOper.And(x => x.ROT_ID == input.rotId);
-                        expableNode.And(x => x.ROT_ID == input.rotId);
-                        expableEdge.And(x => x.ROT_ID == input.rotId);
-                        expableAct.And(x => x.ROT_ID == input.rotId);
-                    }
-                    else if (!string.IsNullOrEmpty(input.rotCode))
-                    {
-                        var item = await Db.Queryable<MES_ROUTE>().Where(x => x.ROT_CODE == input.rotCode).FirstAsync();
-                        if (item != null)
-                        {
-                            _rotId = item.ID;
-                            expable.And(x => x.ROT_ID == item.ID);
-                            expableOper.And(x => x.ROT_ID == item.ID);
-                            expableNode.And(x => x.ROT_ID == item.ID);
-                            expableEdge.And(x => x.ROT_ID == item.ID);
-                            expableAct.And(x => x.ROT_ID == item.ID);
-                        }
-                    }
-                    //濡傛灉闄や簡鍒犻櫎鐨勫綋鍓嶅伐鑹鸿矾绾夸笉瀛樺湪鍏朵粬缁戝畾鐨勫伐鑹鸿矾绾匡紝鍒欐洿鏂扮姸鎬�
-                    if (bizMesWo != null && !Db.Queryable<MES_WO_NODE>().Where(x => x.WORK_ORDER == input.wo && x.ROT_ID != _rotId).Any())
-                    {
-                        bizMesWo.ROUTE_STATUS = (int)ROUTE_STATUSs.WaitSet;
-                        bizMesWo.STATUS = (int)STATUSs.Init;
-                        bizMesWo.ROUTE_CODE = "";
-                    }
-                    if (!string.IsNullOrEmpty(input.wo))
-                    {
-                        expable.And(x => x.WORK_ORDER == input.wo);
-                        expableOper.And(x => x.WORK_ORDER == input.wo);
-                        expableNode.And(x => x.WORK_ORDER == input.wo);
-                        expableEdge.And(x => x.WORK_ORDER == input.wo);
-                        expableAct.And(x => x.WORK_ORDER == input.wo);
-                    }
-                    var exp = expable.ToExpression();
-                    var expOper = expableOper.ToExpression();
-                    var expNode = expableNode.ToExpression();
-                    var expEdge = expableEdge.ToExpression();
-                    var expAct = expableAct.ToExpression();
-                    var db = Db;
-                    var dbTran = db.UseTran(() =>
-                    {
-                        db.Deleteable<MES_WO_ACTION>().Where(exp).ExecuteCommand();
-                        db.Deleteable<MES_WO_OPER>().Where(expOper).ExecuteCommand();
-                        db.Deleteable<MES_WO_NODE>().Where(expNode).ExecuteCommand();
-                        db.Deleteable<MES_WO_EDGE>().Where(expEdge).ExecuteCommand();
-                        db.Deleteable<MES_WO_NODE_ACT>().Where(expAct).ExecuteCommand();
-                        db.Updateable(bizMesWo).ExecuteCommand();
-                    });
-                    if (!dbTran.IsSuccess)
-                    {
-                        result.IsSuccessed = false;
-                        result.LocaleMsg = new($"鍒犻櫎宸ヨ壓璺嚎寮傚父");
-                    }
-                }
-                catch (Exception ex)
-                {
-                    result.CatchExceptionWithLog(ex, "鍒犻櫎宸ヨ壓璺嚎寮傚父");
-                }
-                return result;
-            }
-
-            /// <summary>
-            /// 淇濆瓨榛樿宸ヨ壓璺嚎鍒颁骇鍝�
-            /// </summary>
-            /// <param name="input"></param>
-            /// <returns></returns>
-            public async Task<ApiAction> SetDefaultRoute(ProdRotInput input)
-            {
-                var result = new ApiAction();
-                try
-                {
-                    var item = await Biz.Db.Queryable<BAS_ITEM>().ByAuth(input.options).Where(x => x.ITEM_CODE == input.prodCode).FirstAsync();
-                    if (item == null)
-                    {
-                        result.IsSuccessed = false;
-                        result.LocaleMsg = new($"浜у搧[{input.prodCode}]涓嶅瓨鍦紒");
-                        return result;
-                    }
-                    item.DEFAULT_ROUTE = input.isDefault ? input.rotCode : "";
-                    var db = Db;
-                    var dbTran = db.UseTran(() =>
-                    {
-                        db.Updateable(item).UpdateColumns(q => new { q.DEFAULT_ROUTE }).ExecuteCommand();
-                    });
-                    if (!dbTran.IsSuccess)
-                    {
-                        result.IsSuccessed = false;
-                        result.LocaleMsg = new($"淇濆瓨榛樿宸ヨ壓璺嚎鍒颁骇鍝佸紓甯�");
-                    }
-                }
-                catch (Exception ex)
-                {
-                    result.CatchExceptionWithLog(ex, "淇濆瓨榛樿宸ヨ壓璺嚎鍒颁骇鍝佸紓甯�");
-                }
-                return result;
-            }
-
-            #region 宸ュ崟宸ヨ壓璺嚎鐩稿叧
-
-
-            /// <summary>
-            /// 鑾峰彇宸ュ崟宸ヨ壓璺嚎鍥惧舰鏁版嵁
-            /// </summary>
-            /// <param name="workorder"></param>
-            /// <returns></returns>
-            public async Task<ApiAction<WoRouteData>> GetWoRouteData(string workorder)
-            {
-                var res = new ApiAction<WoRouteData>();
-                WoRouteData rotData = new WoRouteData();
-                try
-                {
-                    if (string.IsNullOrEmpty(workorder))
-                    {
-                        res.IsSuccessed = false;
-                        res.LocaleMsg = new($"浼犲叆鐨勫伐鑹鸿矾绾縄D涓虹┖锛屼笉鑳芥煡鎵惧伐鑹鸿矾绾匡紒");
-                        return res;
-                    }
-                    //宸ヨ壓璺嚎
-                    var route = await Db.Queryable<BIZ_MES_WO, MES_ROUTE>((q, s) => new JoinQueryInfos(JoinType.Inner, q.ROUTE_CODE == s.ROT_CODE))
-                    .Where((q, s) => q.ID.Equals(workorder) || q.ORDER_NO == workorder).Select((q, s) => new MES_ROUTE
-                    {
-                        ID = s.ID,
-                        ROT_CODE = s.ROT_CODE,
-                        ROT_NAME = s.ROT_NAME,
-                        ROT_TYPE = s.ROT_TYPE,
-                        ROT_VER = s.ROT_VER,
-                        IS_ACTIVE = s.IS_ACTIVE,
-                        REMARK = s.REMARK,
-                        WORK_ORDER = q.ORDER_NO,
-                        PROD_CODE = q.ITEM_CODE,
-                        CUST_CODE = q.CUST_CODE,
-                    }).FirstAsync();
-                    rotData.route = route;
-                    if (route == null)
-                    {
-                        res.IsSuccessed = false;
-                        res.LocaleMsg = new($"涓嶈兘鏌ユ壘鍒板伐鍗曞伐鑹鸿矾绾匡紒");
-                        return res;
-                    }
-                    //鑺傜偣
-                    var nodes = await Db.Queryable<MES_WO_NODE>()
-                        .WhereIF(!string.IsNullOrEmpty(route.ID), x => x.WORK_ORDER.Equals(route.WORK_ORDER))
-                        .ToListAsync();
-                    foreach (var node in nodes)
-                    {
-                        node.node = new()
-                        {
-                            id = node.ID,
-                            type = node.GPH_TYPE,
-                            x = node.GPH_X,
-                            y = node.GPH_Y,
-                            properties = node.GPH_PROP,
-                            text = new()
-                            {
-                                x = node.GPH_X,
-                                y = node.GPH_Y,
-                                value = node.GPH_TEXT
-                            }
-                        };
-                    }
-                    rotData.nodes = nodes;
-
-                    var acts = await Db.Queryable<MES_WO_NODE_ACT>()
-                        .WhereIF(!string.IsNullOrEmpty(route.ID), x => x.WORK_ORDER.Equals(route.WORK_ORDER))
-                        .ToListAsync();
-                    foreach (var act in acts)
-                    {
-                        act.node = new()
-                        {
-                            id = act.ID,
-                            type = act.GPH_TYPE,
-                            x = act.GPH_X,
-                            y = act.GPH_Y,
-                            properties = act.GPH_PROP,
-                            text = new()
-                            {
-                                x = act.GPH_X,
-                                y = act.GPH_Y,
-                                value = act.GPH_TEXT
-                            }
-                        };
-                    }
-                    rotData.acts = acts;
-
-                    //杈�
-                    var edges = await Db.Queryable<MES_WO_EDGE>()
-                        .WhereIF(!string.IsNullOrEmpty(route.ID), x => x.WORK_ORDER.Equals(route.WORK_ORDER))
-                        .ToListAsync();
-                    foreach (var edge in edges)
-                    {
-                        edge.edge = new()
-                        {
-                            id = edge.ID,
-                            type = edge.GPH_TYPE,
-                            sourceNodeId = edge.SRC_NODE,
-                            targetNodeId = edge.TGT_NODE,
-                            properties = edge.GPH_PROP,
-                            startPoint = new()
-                            {
-                                x = edge.GPH_SRC_X,
-                                y = edge.GPH_SRC_Y,
-                            },
-                            endPoint = new()
-                            {
-                                x = edge.GPH_TGT_X,
-                                y = edge.GPH_TGT_Y,
-                            },
-                            pointsList = new()
-                            {
-                                new(){
-                                    x = edge.GPH_SRC_X,
-                                    y = edge.GPH_SRC_Y,
-                                },
-                                new(){
-                                    x = edge.GPH_TGT_X,
-                                    y = edge.GPH_TGT_Y,
-                                }
-                            }
-                        };
-                    }
-                    rotData.edges = edges;
-                }
-                catch (Exception ex)
-                {
-                    res.CatchExceptionWithLog(ex, "鏌ヨ寮傚父");
-                }
-                res.Data = rotData;
-                return res;
-            }
-
-            /// <summary>
-            /// 淇濆瓨宸ュ崟宸ヨ壓璺嚎鍥惧舰鏁版嵁
-            /// </summary>
-            /// <param name="routeData"></param>
-            /// <returns></returns>
-            public async Task<ApiAction> SaveWoRouteData(WoRouteData routeData)
-            {
-                var result = new ApiAction();
-                try
-                {
-                    var nodeIds = routeData.nodes.Select(x => x.ID).ToList();
-                    var actIds = routeData.acts.Select(x => x.ID).ToList();
-                    //濡傛灉宸ュ簭鑺傜偣ID娌″湪宸ュ崟宸ュ簭閲屽氨鏂板
-                    List<MES_WO_OPER> operList = new List<MES_WO_OPER>();
-                    foreach (var node in routeData.nodes)
-                    {
-                        if (!Db.Queryable<MES_WO_OPER>().Any(q => q.NODE_ID == node.ID))
-                        {
-                            operList.Add(new()
-                            {
-                                WORK_ORDER = node.WORK_ORDER,
-                                PROD_CODE = node.PROD_CODE,
-                                CUST_CODE = node.CUST_CODE,
-                                NODE_ID = node.ID,
-                                NODE_NAME = node.NODE_NAME,
-                                ROT_ID = node.ROT_ID,
-                                OPER_CODE = node.OPER_CODE,
-                                IS_ACTIVE = "Y",
-                                CAN_SKIP = "N",
-                                IS_CALC_FPY = "N",
-                                ALLOW_DFT_IN = "N",
-                                IS_INPUT = "N",
-                                IS_OUTPUT = "N",
-                                AUTH_ORG = node.AUTH_ORG,
-                                AUTH_PROD = node.AUTH_PROD,
-                                AUTH_WH = node.AUTH_WH,
-                            });
-                        }
-                    }
-                    //濡傛灉琛屼负鑺傜偣ID娌″湪宸ュ崟琛屼负閲屽氨鏂板
-                    List<MES_WO_ACTION> actList = new List<MES_WO_ACTION>();
-                    foreach (var act in routeData.acts)
-                    {
-                        if (!Db.Queryable<MES_WO_ACTION>().Any(q => q.ACT_ID == act.ID))
-                        {
-                            actList.Add(new()
-                            {
-                                WORK_ORDER = act.WORK_ORDER,
-                                PROD_CODE = act.PROD_CODE,
-                                CUST_CODE = act.CUST_CODE,
-                                NODE_ID = act.NODE_ID,
-                                ACT_ID = act.ID,
-                                ACT_TYPE = act.ACT_TYPE,
-                                ROT_ID = act.ROT_ID,
-                                ACT_CODE = act.ACT_CODE,
-                                RULE_CODE = "",
-                                ITEM_CODE = "",
-                                TEST_CODE = "",
-                                SAPL_CODE = "",
-                                LABEL_CODE = "",
-                                PKG_CODE = "",
-                                IS_ACTIVE = "Y",
-                                SETUP_FINISH = "N",
-                                AUTH_ORG = act.AUTH_ORG,
-                                AUTH_PROD = act.AUTH_PROD,
-                                AUTH_WH = act.AUTH_WH,
-                            });
-                        }
-                    }
-                    var db = Db;
-                    var dbTran = db.UseTran(() =>
-                    {
-                        //if (routeData.route != null)
-                        //{
-                        //    var y = db.Storageable(routeData.route)
-                        //       .WhereColumns(t => new { t.ROT_CODE, t.GHOST_ROW })
-                        //       .ToStorage();
-                        //    y.AsInsertable.ExecuteCommand();
-                        //    y.AsUpdateable.IgnoreColumns(x => x.ID).ExecuteCommand();
-                        //}
-                        db.Deleteable<MES_WO_OPER>().Where(x => x.WORK_ORDER == routeData.route.WORK_ORDER && !SqlFunc.ContainsArray(nodeIds, x.NODE_ID)).ExecuteCommand();
-                        db.Deleteable<MES_WO_ACTION>().Where(x => x.WORK_ORDER == routeData.route.WORK_ORDER && !SqlFunc.ContainsArray(actIds, x.ACT_ID)).ExecuteCommand();
-                        db.Deleteable<MES_WO_NODE>(false).Where(x => x.WORK_ORDER == routeData.route.WORK_ORDER).ExecuteCommand();
-                        db.Deleteable<MES_WO_EDGE>(false).Where(x => x.WORK_ORDER == routeData.route.WORK_ORDER).ExecuteCommand();
-                        db.Deleteable<MES_WO_NODE_ACT>(false).Where(x => x.WORK_ORDER == routeData.route.WORK_ORDER).ExecuteCommand();
-                        if (routeData.nodes != null)
-                        {
-                            db.Insertable(routeData.nodes).ExecuteCommand();
-                        }
-                        if (routeData.edges != null)
-                        {
-                            db.Insertable(routeData.edges).ExecuteCommand();
-                        }
-                        if (routeData.acts != null)
-                        {
-                            db.Insertable(routeData.acts).ExecuteCommand();
-                        }
-                        if (operList.Count > 0)
-                        {
-                            db.Insertable(operList).ExecuteCommand();
-                        }
-                        if (actList.Count > 0)
-                        {
-                            db.Insertable(actList).ExecuteCommand();
-                        }
-                    });
-                    if (!dbTran.IsSuccess)
-                    {
-                        result.IsSuccessed = false;
-                        result.LocaleMsg = new($"淇濆瓨宸ュ崟宸ヨ壓璺嚎鍥惧舰鏁版嵁寮傚父");
-                    }
-                }
-                catch (Exception ex)
-                {
-                    result.CatchExceptionWithLog(ex, "淇濆瓨宸ュ崟宸ヨ壓璺嚎鍥惧舰鏁版嵁寮傚父");
-                }
-                return await Task.FromResult(result);
-            }
-
-            /// <summary>
-            /// 淇濆瓨宸ュ崟宸ヨ壓鑺傜偣宀椾綅璧勬簮
-            /// </summary>
-            /// <param name="nodePost"></param>
-            /// <returns></returns>
-            public async Task<ApiAction> SaveWoRouteNodePost(List<MES_WO_NODE_POST> nodePost)
-            {
-                var result = new ApiAction();
-                try
-                {
-                    var db = Db;
-                    var dbTran = db.UseTran(() =>
-                    {
-                        var y = db.Storageable(nodePost)
-                           .ToStorage();
-                        y.AsInsertable.ExecuteCommand();
-                        y.AsUpdateable.ExecuteCommand();
-                    });
-                    if (!dbTran.IsSuccess)
-                    {
-                        result.IsSuccessed = false;
-                        result.LocaleMsg = new($"淇濆瓨宸ュ崟宸ヨ壓鑺傜偣宀椾綅璧勬簮鏁版嵁寮傚父");
-                    }
-                }
-                catch (Exception ex)
-                {
-                    result.CatchExceptionWithLog(ex, "淇濆瓨宸ュ崟宸ヨ壓鑺傜偣宀椾綅璧勬簮鏁版嵁寮傚父");
-                }
-                return await Task.FromResult(result);
-            }
-            #endregion
-            /// <summary>
-            /// 鑾峰彇宸ヨ壓璺嚎鏍戝舰缁撴瀯
-            /// </summary>
-            /// <param name="prodCode"></param>
-            /// <param name="orgCode"></param>
-            /// <returns></returns>
-            public async Task<List<V_MES_ROUTE_PTREE>> GetRoutePTree(string prodCode, string orgCode)
-            {
-                var result = new List<V_MES_ROUTE_PTREE>();
-                try
-                {
-
-                    SugarParameter[] pars = Biz.Db.Ado.GetParameters(new { PROD_CODE = prodCode, ORG_CODE = orgCode });
-                    result = Biz.Db.Ado.UseStoredProcedure().SqlQuery<V_MES_ROUTE_PTREE>("SP_MES_GET_ROUTE_PTREE", pars);//杩斿洖List
-                    var item = await Db.Queryable<BAS_ITEM>().Where(q => q.ITEM_CODE == prodCode).FirstAsync();
-                    if (item != null && !item.DEFAULT_ROUTE.IsNullOrEmpty())
-                    {
-                        var pid = result.Where(q => q.code == $"DefaultRoute_{orgCode}_{prodCode}").Select(q => q.tid).FirstOrDefault();
-                        result.ForEach(d =>
-                        {
-                            if (d.pid == pid && d.code == item.DEFAULT_ROUTE)
-                            {
-                                d.isDefault = true;
-                            }
-                            else
-                            {
-                                d.isDefault = false;
-                            }
-                        });
-                    }
-                }
-                catch (Exception ex)
-                {
-                    Logger.Default.Error(ex, "淇濆瓨榛樿宸ヨ壓璺嚎鍒颁骇鍝佸紓甯�");
-                }
-                return result;
-            }
-
-            /// <summary>
-            /// 娣诲姞宸ュ崟宸ヨ壓璺嚎
-            /// </summary>
-            /// <param name="input"></param>
-            /// <returns></returns>
-            public async Task<ApiAction> ProdRouteToWo(WoRotInput input)
-            {
-                var result = new ApiAction();
-                try
-                {
-                    //淇濆瓨鍓嶅垽鏂�
-                    if (Db.Queryable<BIZ_MES_WO>().Any(x => x.ORDER_NO == input.wo && x.STATUS > STATUSs.Init.GetValue() && x.STATUS < STATUSs.Closed.GetValue())) {
-
-                        result.IsSuccessed = false;
-                        result.LocaleMsg = new($"宸ュ崟[{input.wo}]鐘舵�佷笉鏄垵濮嬪寲鎴栬�呭畬鎴愶紝涓嶅彲浠ヤ慨鏀瑰伐鑹鸿矾绾匡紒");
-                        return result;
-                    }
-
-                    var wo = await Db.Queryable<BIZ_MES_WO>().Where(x => x.ORDER_NO == input.wo).FirstAsync();
-                    wo.ROUTE_STATUS = ROUTE_STATUSs.Finish.GetValue();
-
-                    SugarParameter[] pars = Biz.Db.Ado.GetParameters(new { ROT_ID = input.rotId, WO = input.wo, ERR_CODE = 0, ERR_MSG = "" });
-                    pars[2].Direction = System.Data.ParameterDirection.Output;
-                    pars[3].Direction = System.Data.ParameterDirection.Output;
-                    Biz.Db.Ado.UseStoredProcedure().ExecuteCommand("SP_MES_PROD2WO", pars);
-                    result.Data = pars[2].Value;
-                    result.IsSuccessed = pars[2].Value.ToInt32() == 0 ? true : false;
-                    result.LocaleMsg = new(pars[3].Value.ToString());
-
-                    var db = Db;
-                    var dbTran = db.UseTran(() =>
-                    {
-                        db.Updateable(wo, input.userId).UpdateColumns(x => new { x.ROUTE_STATUS, x.UPDATE_USER, x.UPDATE_TIME }).ExecuteCommand();
-                    });
-                    if (!dbTran.IsSuccess)
-                    {
-                        result.IsSuccessed = false;
-                        result.LocaleMsg = new($"娣诲姞宸ュ崟宸ヨ壓璺嚎寮傚父");
-                    }
-                }
-                catch (Exception ex)
-                {
-                    result.CatchExceptionWithLog(ex, "娣诲姞宸ュ崟宸ヨ壓璺嚎寮傚父");
-                }
-                return result;
-            }
-        } //endClass Route
-    } //endClass Biz
-}
diff --git a/Tiger.Business/Model/TigerActive.cs b/Tiger.Business/Model/TigerActive.cs
deleted file mode 100644
index 2386bdb..0000000
--- a/Tiger.Business/Model/TigerActive.cs
+++ /dev/null
@@ -1,184 +0,0 @@
-锘縰sing Rhea.Common;
-using Rhea.Common.Authorization;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Tiger.IBusiness;
-
-namespace Tiger.Business
-{
-    /// <summary>
-    /// Tiger 椤圭洰婵�娲荤被锛屽寘鎷互涓嬫枃浠讹細
-    /// <br/>"椤圭洰鍚�.cer"(Certification)锛氬寘鍚湁鍏挜鐨勬暟瀛楄瘉涔︼紝浠ml鏍煎紡瀛樺偍
-    /// <br/>"椤圭洰鍚�.act"(ActivationCode)锛氬寘鍚湁婵�娲荤爜瀛楃鐨勬枃妗�
-    ///  <br/>"椤圭洰鍚�.req"(RequestCode)锛氬寘鍚湁璇锋眰鐮佸瓧绗︾殑鏂囨。
-    /// </summary>
-    public class TigerActive : Activation, ITigerActive
-    {
-        /// <summary>
-        /// 浣跨敤婵�娲荤爜婵�娲荤▼搴�
-        /// </summary>
-        /// <param name="activationCode">婵�娲荤爜</param>
-        /// <returns></returns>
-        public override Result Active(string activationCode)
-        {
-            Result result = new(Result.Flags.Success, "杞欢婵�娲绘垚鍔燂紒");
-            try
-            {
-                License license = DecryptLicense(activationCode, GetCertification());
-                if (license.IsNullOrEmpty())
-                {
-                    result.Flag = Result.Flags.Failed;
-                    result.Message = $"婵�娲诲け璐ワ紝楠岃瘉鐮佽В鏋愬嚭閿欍��";
-                }
-                else
-                {
-                    //椤圭洰鍚� ProjectName
-                    if (license.ProjectName != BizContext.CurrentProject)
-                    {
-                        result.Flag = Result.Flags.Failed;
-                        result.Message = $"婵�娲诲け璐ワ紝楠岃瘉鐮佷笉閫傜敤浜庢湰椤圭洰銆�";
-                    }
-                    //鏈哄櫒鐮� MachineCode
-                    if (license.MachineCode != BizContext.MachineCode)
-                    {
-                        result.Flag = Result.Flags.Failed;
-                        result.Message = $"婵�娲诲け璐ワ紝楠岃瘉鐮佷笉閫傜敤浜庢湰杞欢銆�";
-                    }
-                    //鏈夋晥鏈熸埅鑷虫棩鏈� ExpiryDate
-                    if ((license.ExpiryDate.Date - DateTime.Now.Date).TotalMilliseconds < 0)
-                    {
-                        result.Flag = Result.Flags.Warning;
-                        result.Message = $"婵�娲诲け璐ワ紝楠岃瘉鐮佸凡杩囨湡銆�";
-                    }
-                }
-                if (!result.IsFailed)
-                {
-                    //淇濆瓨婵�娲荤爜鍒版敞鍐岃〃
-                    SetActivationCode(activationCode);
-                }
-
-                if (result.IsSuccessed)
-                {
-                    Verify();
-                }
-            }
-            catch (System.UnauthorizedAccessException ex)
-            {
-                result.CatchExceptionWithLog(ex, $"鏉冮檺涓嶈冻锛岃浣跨敤绠$悊鍛樿繍琛屽悗鍐嶆縺娲�");
-            }
-            catch (System.Exception ex)
-            {
-                result.CatchExceptionWithLog(ex, $"杞欢婵�娲诲紓甯�");
-            }
-            return result;
-        }
-
-        /// <summary>
-        /// 楠岃瘉褰撳墠绋嬪簭鏄惁宸叉縺娲�
-        /// </summary>
-        /// <returns></returns>
-        public override Result Verify()
-        {
-            Result result = new(Result.Flags.Success, "鎺堟潈楠岃瘉閫氳繃锛�");
-            try
-            {
-                var license = GetCurLicense();
-                if (license.IsNullOrEmpty())
-                {
-                    result.Flag = Result.Flags.Failed;
-                    result.Message = $"鎺堟潈楠岃瘉澶辫触锛屾湭鎵惧埌璁稿彲淇℃伅銆�";
-                }
-                else
-                {
-                    //椤圭洰鍚� ProjectName
-                    if (!license.ProjectName.IsNullOrEmpty() && license.ProjectName != BizContext.CurrentProject)
-                    {
-                        result.Flag = Result.Flags.Failed;
-                        result.Message = $"鎺堟潈楠岃瘉澶辫触锛岄」鐩湭鎺堟潈";
-                    }
-                    //鏈哄櫒鐮� MachineCode
-                    if (!license.MachineCode.IsNullOrEmpty() && license.MachineCode != BizContext.MachineCode)
-                    {
-                        result.Flag = Result.Flags.Failed;
-                        result.Message = $"鎺堟潈楠岃瘉澶辫触锛岀數鑴戞湭鎺堟潈銆�";
-                    }
-                    //鏈夋晥鏈熸埅鑷虫棩鏈� ExpiryDate
-                    if (license.ExpiryDate != DateTime.MaxValue && (license.ExpiryDate.Date - DateTime.Now.Date).TotalMilliseconds < 0)
-                    {
-                        result.Flag = Result.Flags.Failed;
-                        result.Message = $"鎺堟潈楠岃瘉澶辫触锛屾巿鏉冨凡杩囨湡銆�";
-                    }
-                    //宸ョ珯瀛楀吀锛宬ey锛氬伐绔橧D锛寁alue锛氬厑璁稿悓鏃跺紑鍚殑鏁伴噺 StationDict
-                    if (!license.StationDict.IsNullOrEmpty())
-                    {
-
-                    }
-                    //璇曠敤鏈熸埅鑷虫棩鏈� TrialExpiryDate
-                    if (!result.IsSuccessed && (license.TrialExpiryDate - DateTime.Now).TotalMilliseconds > 0)
-                    {
-                        result.Flag = Result.Flags.Success;
-                        result.Message = $"鎺堟潈楠岃瘉閫氳繃锛屽湪璇曠敤鏈熷唴銆�";
-                    }
-                }
-            }
-            catch (System.Exception ex)
-            {
-                result.CatchExceptionWithLog(ex, $"鎺堟潈楠岃瘉寮傚父");
-            }
-            return result;
-        }
-
-        /// <summary>
-        /// 鍦ㄦ敞鍐岃〃HKEY_LOCAL_MACHINE\SOFTWARE\TigerClouds鑺傜偣涓鍙栧瘑閽ヨ瘉涔�
-        /// </summary>
-        /// <returns></returns>
-        public string GetCertification()
-        {
-            Base.Regedit tc = new Base.Regedit(Base.Regedit.BaseKeys.LocalMachine, @"SOFTWARE\TigerClouds");
-            return tc.Read("Certification");
-        }
-
-        /// <summary>
-        /// 鍦ㄦ敞鍐岃〃HKEY_LOCAL_MACHINE\SOFTWARE\TigerClouds鑺傜偣涓啓鍏ュ瘑閽ヨ瘉涔�
-        /// </summary>
-        /// <param name="key">鍏挜</param>
-        public void SetCertification(string key)
-        {
-            Base.Regedit tc = new Base.Regedit(Base.Regedit.BaseKeys.LocalMachine, @"SOFTWARE\TigerClouds");
-            tc.Write("Certification", key);
-        }
-
-        /// <summary>
-        /// 鍦ㄦ敞鍐岃〃HKEY_LOCAL_MACHINE\SOFTWARE\TigerClouds鑺傜偣涓鍙栨縺娲荤爜
-        /// </summary>
-        /// <returns></returns>
-        public string GetActivationCode()
-        {
-            Base.Regedit tc = new Base.Regedit(Base.Regedit.BaseKeys.LocalMachine, @"SOFTWARE\TigerClouds");
-            return tc.Read("ActivationCode");
-        }
-
-        /// <summary>
-        /// 鍦ㄦ敞鍐岃〃HKEY_LOCAL_MACHINE\SOFTWARE\TigerClouds鑺傜偣涓啓鍏ユ縺娲荤爜
-        /// </summary>
-        /// <param name="code">婵�娲荤爜</param>
-        public void SetActivationCode(string code)
-        {
-            Base.Regedit tc = new Base.Regedit(Base.Regedit.BaseKeys.LocalMachine, @"SOFTWARE\TigerClouds");
-            tc.Write("ActivationCode", code);
-        }
-
-        /// <summary>
-        /// 鑾峰彇褰撳墠璁稿彲淇℃伅
-        /// </summary>
-        /// <returns></returns>
-        public License GetCurLicense()
-        {
-            return DecryptLicense(GetActivationCode(), GetCertification());
-        }
-
-    }
-}
diff --git a/Tiger.Business/Model/TransactionBase.cs b/Tiger.Business/Model/TransactionBase.cs
deleted file mode 100644
index 0101577..0000000
--- a/Tiger.Business/Model/TransactionBase.cs
+++ /dev/null
@@ -1,113 +0,0 @@
-锘縰sing Rhea.Common;
-using Tiger.Model;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-using System.IO;
-using Newtonsoft.Json;
-using Tiger.IBusiness;
-
-namespace Tiger.Business
-{
-    /// <summary>
-    /// 浜嬪姟鍩虹被
-    /// </summary>
-    public abstract class TransactionBase : IDisposable, ITransaction
-    {
-        /// <summary>
-        /// 浜嬪姟鍩虹被
-        /// </summary>
-        public TransactionBase()
-        {
-        }
-        /// <summary>
-        /// 浜嬪姟ID
-        /// </summary>
-        public string TransID { get; set; }
-        /// <summary>
-        /// Api Host
-        /// </summary>
-        public string ApiHost { get; set; }
-        /// <summary>
-        /// Remote Address
-        /// </summary>
-        public string RemoteAddress { get; set; }
-        /// <summary>
-        /// 浜嬪姟閿�
-        /// </summary>
-        public object TransLock { get; } = new object();
-        /// <summary>
-        /// ApiAction鍘嗗彶璁板綍
-        /// </summary>
-        protected Dictionary<string, ActionHistory> ActionHistoryList = new Dictionary<string, ActionHistory>();
-        /// <summary>
-        /// 鏈�鍚庢搷浣滅殑鏃堕棿
-        /// </summary>
-        public DateTime LastActionTime { get; set; }
-        /// <summary>
-        /// 浜嬪姟鏄惁瀹屾垚
-        /// </summary>
-        public bool IsFinished { get; set; }
-
-        /// <summary>
-        /// 娣诲姞涓�涓狝piAction鐨勫巻鍙茶褰�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="request"></param>
-        /// <param name="action"></param>
-        public virtual void AddHistory<T>(Microsoft.AspNetCore.Http.HttpRequest request, ApiAction<T> action)
-        {
-            try
-            {
-                ActionHistoryList.Add($"{request.HttpContext.TraceIdentifier} at {action.Timestamp:yyyy/MM/dd HH:mm:ss.fff}: {request.Path}", action.History());
-            }
-            catch (System.Exception ex)
-            {
-                Logger.Default.Fatal(ex, "娣诲姞ApiAction鍘嗗彶璁板綍寮傚父");
-            }
-            LastActionTime = DateTime.Now;
-        }
-
-        /// <summary>
-        /// 淇濆瓨ApiAction鐨勫巻鍙茶褰曞埌鏂囦欢
-        /// </summary>
-        public virtual void SaveHistory()
-        {
-            DirectoryInfo di = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory + "\\Logs\\Transaction");
-            if (!di.Exists)
-            {
-                di.Create();
-            }
-            var log = new FileInfo(di.FullName + @$"\{this.TransID}.log");
-            File.AppendAllText(log.FullName, "{");
-            File.AppendAllText(log.FullName, "\"Transaction Data\":");
-            File.AppendAllText(log.FullName, JsonConvert.SerializeObject(this) + "\r\n");
-            File.AppendAllText(log.FullName, ",\"Transaction History\":");
-            File.AppendAllText(log.FullName, JsonConvert.SerializeObject(ActionHistoryList) + "\r\n");
-            File.AppendAllText(log.FullName, "}\r\n");
-        }
-
-        /// <summary>
-        /// 鍏抽棴浜嬪姟
-        /// </summary>
-        /// <param name="needSaveHistoryLog"></param>
-        /// <returns></returns>
-        public virtual bool Close(bool needSaveHistoryLog = false)
-        {
-            if (needSaveHistoryLog)
-            {
-                SaveHistory();
-            }
-            Dispose();
-            return true;
-        }
-
-        public virtual void Dispose()
-        {
-            BizContext.TransactionDic.Remove(TransID);
-        }
-    }
-}
diff --git a/Tiger.Business/Monitors/ClientMonitor.cs b/Tiger.Business/Monitors/ClientMonitor.cs
deleted file mode 100644
index 4968341..0000000
--- a/Tiger.Business/Monitors/ClientMonitor.cs
+++ /dev/null
@@ -1,115 +0,0 @@
-锘縰sing Rhea.Common;
-using Rhea.Common.Interface;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-using Tiger.IBusiness;
-
-namespace Tiger.Business
-{
-    /// <summary>
-    /// Client鐩戞帶绾跨▼
-    /// </summary>
-    public class ClientMonitor : IClientMonitor
-    {
-        #region Variables
-        private WhileThread ClientMonitorThread;
-        #endregion
-
-        #region Propertys
-        public string Id { get; set; } = Guid.NewGuid().ToString("N");
-        public string Tag { get; set; } = "ClientMonitor";
-        public string Name { get; set; } = "ClientMonitor";
-        public bool IsRunning { get; set; }
-        public List<Client> OnlineClients { get; set; } = new();
-        #endregion
-
-        #region Functions
-        public void Start()
-        {
-            try
-            {
-                ClientMonitorThread = new(ClientMonitoring);
-                ClientMonitorThread.Start();
-                Logger.Default.Info("Start Client Monitoring Thread");
-            }
-            catch (System.Exception ex)
-            {
-                Logger.Default.Fatal(ex, "Start Client Monitoring Thread Exception");
-            }
-        }
-
-        public void Stop()
-        {
-            try
-            {
-                ClientMonitorThread?.Stop();
-                Logger.Console.Info("Stop Client Monitoring Thread");
-            }
-            catch (System.Exception ex)
-            {
-                Logger.Console.Fatal(ex, "Stop Client Monitoring Thread Exception");
-            }
-        }
-
-        private void ClientMonitoring()
-        {
-            try
-            {
-                var clients = OnlineClients.Where(q => (DateTime.Now - q.LastAccessTime).TotalMinutes > ApiConfig.Client_TimeoutMinutes);
-                foreach (var client in clients)
-                {
-                    Logger.Console.Info($"Client[{client.IP}] timeout for {(DateTime.Now - client.LastAccessTime).TotalMinutes} minutes.(id: {client.Id})");
-                }
-                OnlineClients.RemoveAll(q => !q.IsLive || (DateTime.Now - q.LastAccessTime).TotalMinutes > ApiConfig.Client_TimeoutMinutes);
-            }
-            catch (System.Exception ex)
-            {
-                Logger.Console.Fatal(ex, "瀹㈡埛绔洃鎺х嚎绋嬪紓甯革紝閲嶇疆鎵�鏈夊鎴风");
-                OnlineClients.Clear();
-            }
-
-            //浼戠湢10鍒嗛挓
-            Thread.Sleep(5 * 60 * 1000);//
-        }
-
-        /// <summary>
-        /// 瀹㈡埛绔績璺充笂閫�
-        /// </summary>
-        /// <param name="client"></param>
-        /// <param name="clientIP"></param>
-        /// <returns></returns>
-        public async Task<ApiAction> Heartbeat(Client client, string clientIP)
-        {
-            var action = new ApiAction();
-            try
-            {
-                if (!OnlineClients.Any(q => q.Id == client.Id))
-                {
-                    OnlineClients.Add(client);
-                    Logger.Console.Info($"Client[{clientIP}] online.(id: {client.Id})");
-                }
-                var online = OnlineClients.FirstOrDefault(q => q.Id == client.Id);
-                online.IsLive = true;
-                online.IP = clientIP.Split(':')[0].IsNullOrEmpty() ? clientIP : clientIP.Split(':')[0];
-                online.LastAccessTime = DateTime.Now;
-                if (client.HeartbeatRate <= 0)
-                {
-                    online.IsLive = false;
-                    Logger.Console.Info($"Client[{clientIP}] offline.(id: {online.Id})");
-                }
-                action.Message = online.IP;
-                action.Data = online;
-            }
-            catch (System.Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, "瀹㈡埛绔績璺充笂閫佸紓甯�");
-            }
-            return action;
-        }
-        #endregion
-    }
-}
diff --git a/Tiger.Business/Monitors/DbMonitor.cs b/Tiger.Business/Monitors/DbMonitor.cs
deleted file mode 100644
index a26b93f..0000000
--- a/Tiger.Business/Monitors/DbMonitor.cs
+++ /dev/null
@@ -1,102 +0,0 @@
-锘縰sing Rhea.Common;
-using Rhea.Common.Interface;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Tiger.Business
-{
-    /// <summary>
-    /// DB鐩戞帶绾跨▼
-    /// </summary>
-    public class DbMonitor : ITigerMonitor
-    {
-        #region Variables
-        private WhileThread DbMonitorThread;
-        #endregion
-
-        #region Propertys
-        public string Id { get; set; } = Guid.NewGuid().ToString("N");
-        public string Tag { get; set; } = "DbMonitor";
-        public string Name { get; set; } = "DbMonitor";
-        public bool IsRunning { get; set; }
-        #endregion
-
-        #region Functions
-        public void Start()
-        {
-            try
-            {
-                DbMonitorThread = new(DbMonitoring);
-                DbMonitorThread.Start();
-                Logger.Default.Info("Start Db Monitoring Thread");
-            }
-            catch (System.Exception ex)
-            {
-                Logger.Default.Fatal(ex, "Start Db Monitoring Thread Exception");
-            }
-        }
-
-        public void Stop()
-        {
-            try
-            {
-                DbMonitorThread?.Stop();
-                Logger.Console.Info("Stop Db Monitoring Thread");
-            }
-            catch (System.Exception ex)
-            {
-                Logger.Console.Fatal(ex, "Stop Db Monitoring Thread Exception");
-            }
-        }
-
-        private void DbMonitoring()
-        {
-            try
-            {
-                //switch (BizConfig.Configuration["CurrentProject"])
-                //{
-                //    case "JXAH2021_M10"://濂ユ捣10绾�
-                //        {
-                //            //鎸夎鍒掑垹闄IP_SN鏃ф暟鎹�
-                //            Biz.WIP_SN_DeleteOldData(1).Wait();
-                //        }
-                //        break;
-                //    case "GZhGB2021_01"://椤圭洰GZhGB2021_01
-                //        {
-                //            //鎸夎鍒掑垹闄IP_SN鏃ф暟鎹�
-                //            Biz.WIP_SN_DeleteOldData(3).Wait();
-                //        }
-                //        break;
-                //    case "GXSALCOMP2021_93":
-                //        {
-                //            //鎸夎鍒掑垹闄IP_SN鏃ф暟鎹�
-                //            Biz.WIP_SN_DeleteOldData(5).Wait();
-                //            //鎸夎鍒掑浠絎IP_SN鏃ф暟鎹�
-                //            //Biz.WIP_SN_BackupOldData(5).Wait();
-                //        }
-                //        break;
-                //    default:
-                //        {
-                //            //鎸夎鍒掑垹闄�10澶╁墠鐨凷NData鏃ф暟鎹�
-                //            Biz.ScheduledDeletion().Wait();
-                //            //鎸夎鍒掑垹闄IP_SN鏃ф暟鎹�
-                //            Biz.WIP_SN_DeleteOldData(2).Wait();
-                //        }
-                //        break;
-                //}
-            }
-            catch (System.Exception ex)
-            {
-                Logger.Console.Fatal(ex, "DbMonitoring Exception");
-            }
-
-            //浼戠湢24灏忔椂
-            Thread.Sleep(24 * 60 * 60 * 1000);
-        }
-        #endregion
-    }
-}
diff --git a/Tiger.Business/Monitors/MonitorsBus.cs b/Tiger.Business/Monitors/MonitorsBus.cs
deleted file mode 100644
index c82b4cc..0000000
--- a/Tiger.Business/Monitors/MonitorsBus.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-锘縰sing Rhea.Common;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-using Tiger.IBusiness;
-
-namespace Tiger.Business
-{
-    /// <summary>
-    /// 鐩戞帶鎬绘帶
-    /// </summary>
-    public class MonitorBus : IMonitorBus
-    {
-        public static TransactionMonitor WMSTransactionMonitor = new();
-        public static ClientMonitor ClientMonitor = new();
-        public static DbMonitor DbMonitor = new();
-        #region Functions
-        public IClientMonitor GetClientMonitor() => ClientMonitor;
-        public void StartMonitors()
-        {
-            //寮�鍚疻MS浜嬪姟鐩戞帶
-            WMSTransactionMonitor.Start();
-            ConsoleExt.WriteLine("Start Transaction Monitoring Thread..........", ConsoleColor.Yellow);
-            //寮�鍚疍B鐩戞帶
-            DbMonitor.Start();
-            ConsoleExt.WriteLine("Start Db Monitoring Thread..........", ConsoleColor.Yellow);
-            //寮�鍚鎴风鐩戞帶
-            ClientMonitor.Start();
-            ConsoleExt.WriteLine("Start Client Monitoring Thread..........", ConsoleColor.Yellow);
-        }
-
-        public void StopMonitors()
-        {
-            //鍏抽棴WMS浜嬪姟鐩戞帶
-            WMSTransactionMonitor.Stop();
-            //鍏抽棴DB鐩戞帶
-            DbMonitor.Stop();
-            //鍏抽棴瀹㈡埛绔洃鎺�
-            ClientMonitor.Stop();
-        }
-        #endregion
-    }
-}
diff --git a/Tiger.Business/Monitors/TransactionMonitor.cs b/Tiger.Business/Monitors/TransactionMonitor.cs
deleted file mode 100644
index b5f28b8..0000000
--- a/Tiger.Business/Monitors/TransactionMonitor.cs
+++ /dev/null
@@ -1,87 +0,0 @@
-锘縰sing Rhea.Common;
-using Rhea.Common.Interface;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-using Tiger.IBusiness;
-
-namespace Tiger.Business
-{
-    /// <summary>
-    /// 浜嬪姟鐩戞帶绾跨▼
-    /// </summary>
-    public class TransactionMonitor : ITigerMonitor
-    {
-        #region Variables
-        private WhileThread TransactionMonitorThread;
-        #endregion
-
-        #region Propertys
-        public string Id { get; set; } = Guid.NewGuid().ToString("N");
-        public string Tag { get; set; } = "WMSTransactionMonitor";
-        public string Name { get; set; } = "WMSTransactionMonitor";
-        public bool IsRunning { get; set; }
-        #endregion
-
-        #region Functions
-        public void Start()
-        {
-            try
-            {
-	            TransactionMonitorThread = new(TransactionMonitoring);
-	            TransactionMonitorThread.Start();
-	            Logger.Default.Info("Start Transaction Monitoring Thread");
-            }
-            catch (System.Exception ex)
-            {
-                Logger.Console.Fatal(ex, "Start Transaction Monitoring Thread Exception");
-            }
-        }
-        public void Stop()
-        {
-            try
-            {
-                TransactionMonitorThread?.Stop();
-                Logger.Console.Info("Stop Transaction Monitoring Thread");
-            }
-            catch (System.Exception ex)
-            {
-                Logger.Console.Fatal(ex, "Stop Transaction Monitoring Thread Exception");
-            }
-        }
-        private void TransactionMonitoring()
-        {
-            //Logger.Console.Info("Exec Transaction Monitoring Action");
-            //瀹氭椂鍒犻櫎瓒呮椂鐨凾ransaction
-            try
-            {
-                var timeOutTrans = BizContext.TransactionDic.Where(q => (DateTime.Now - q.Value.LastActionTime).TotalHours > ApiConfig.Transaction_TimeoutHours || q.Value.IsFinished).Select(q => q.Key);
-                if (timeOutTrans.Count() > 0)
-                {
-                    foreach (var key in timeOutTrans)
-                    {
-                        try
-                        {
-                            BizContext.TransactionDic[key].Close();
-                        }
-                        catch (System.Exception ex)
-                        {
-                            Logger.Console.Fatal(ex, $"鍒犻櫎瓒呮椂鐨凾ransaction[{key}]({BizContext.TransactionDic[key].GetType().FullName})寮傚父");
-                        }
-                    }
-                }
-            }
-            catch (System.Exception ex)
-            {
-                Logger.Console.Fatal(ex, "浜嬪姟鐩戞帶绾跨▼寮傚父");
-            }
-
-            //浼戠湢10鍒嗛挓
-            Thread.Sleep(10 * 60 * 1000);
-        }
-        #endregion
-    }
-}
diff --git a/Tiger.Business/SYS/Biz.SYS_BS_LOGIN.cs b/Tiger.Business/SYS/Biz.SYS_BS_LOGIN.cs
deleted file mode 100644
index 57eb9f7..0000000
--- a/Tiger.Business/SYS/Biz.SYS_BS_LOGIN.cs
+++ /dev/null
@@ -1,232 +0,0 @@
-锘縰sing Tiger.Model;
-using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.Linq.Expressions;
-using System.Text;
-using System.Threading.Tasks;
-using Rhea.Common;
-using Tiger.IBusiness;
-using Dm.filter.log;
-
-namespace Tiger.Business
-{
-    public partial class Biz : ILogin
-    {
-        /// <summary>
-        /// 鑾峰彇鐧诲綍淇℃伅
-        /// </summary>
-        /// <param name="token"></param>
-        /// <param name="Async"></param>
-        /// <returns></returns>
-        public async Task<SYS_BS_LOGIN> GetBSLoginInfo(string token, bool Async = true)
-        {
-            SYS_BS_LOGIN query = null;
-            try
-            {
-                query = Db.Queryable<SYS_BS_LOGIN>().Where(x => x.TOKEN == token).First();
-                if (query != null)
-                {
-                    //瓒呰繃8灏忔椂鍒犻櫎鐧诲綍
-                    if ((DateTime.Now - query.LAST_ACCESS).Hours > 4)
-                    {
-                        Db.Deleteable(query).ExecuteCommand();
-                        return null;
-                    }
-                }
-
-            }
-            catch (System.Exception ex)
-            {
-
-            }
-            return await Task.FromResult(query);
-        }
-
-        /// <summary>
-        /// 娣诲姞璁板綍
-        /// </summary>
-        /// <param name="parm"></param>
-        /// <param name="Async"></param>
-        /// <returns></returns>
-        public async Task<ApiAction> AddLOG_BS_LOGINAsync(SYS_BS_LOGIN parm, bool Async = true)
-        {
-            var res = new ApiAction();
-            try
-            {
-                var dbres = Async ? await Db.Insertable(parm).ExecuteCommandAsync() : Db.Insertable(parm).ExecuteCommand();
-                res.Data = dbres.ToString();
-            }
-            catch (Exception ex)
-            {
-                res.CatchExceptionWithLog(ex, "澧炲姞鐧诲綍淇℃伅寮傚父");
-            }
-            return res;
-        }
-
-        /// <summary>
-        /// 鐧诲綍
-        /// </summary>
-        /// <param name="action"></param>
-        /// <param name="Async"></param>
-        /// <returns></returns>
-        public async Task<ApiAction<SYS_BS_LOGIN>> BSLogin(ApiAction<UserInfo> action, bool Async = true)
-        {
-            var res = new ApiAction<SYS_BS_LOGIN>();
-            try
-            {
-                UserInfo userInfo = action.Data;
-                var user = Db.Queryable<SYS_USER>()
-                            .Where(x => x.USER_ID == userInfo.USER_CODE && x.USER_PWD == userInfo.PASSWORD).First();
-                if (user != null)
-                {
-                    if (user.STATUS_CODE == "ENABLE")
-                    {
-                        MES_FACTORY _factory = Db.Queryable<MES_FACTORY>()
-                                                .WhereIF(!userInfo.FTY_CODE.IsNullOrEmpty(),x => x.FTY_CODE == userInfo.FTY_CODE)
-                                                .First();
-
-                        SYS_BS_LOGIN logininfo = new SYS_BS_LOGIN
-                        {
-                            USER_ID = user.USER_ID,
-                            USER_NAME = user.USER_NAME,
-                            LAST_ACCESS = DateTime.Now,
-                            CREATE_TIME = DateTime.Now,
-                            STATUS_CODE = user.STATUS_CODE,
-                            CLIENT_IP = userInfo?.ip,
-                            FTY_CODE = _factory?.FTY_CODE,
-                            FTY_NAME = _factory?.FTY_NAME,
-                            TOKEN = userInfo.Token ?? Guid.NewGuid().ToString("N"),
-                            ID = Guid.NewGuid().ToString("N"),
-                            ACCOUNT_TYPE = 0,
-                            ORG_CODE = userInfo.ORG_CODE
-                        };
-                        var org_code=Db.Queryable<V_USER_ORG>().Where(q=>q.USER_ID == userInfo.USER_CODE && q.ORG_CODE==userInfo.ORG_CODE).First();
-                        if (org_code != null)
-                        {
-                            logininfo.ORG_CODE = org_code.ORG_CODE;
-                        }
-                        else
-                        {
-                            var prod_code = Db.Queryable<V_USER_PROD>().Where(q => q.USER_ID == userInfo.USER_CODE && q.PROD_CODE == userInfo.PROD_CODE).First();
-                            if (prod_code != null)
-                            {
-                                logininfo.FTY_CODE = prod_code.PROD_CODE;
-                                logininfo.FTY_NAME = prod_code.PROD_NAME;
-                            }
-                            else
-                            {
-                                res.IsSuccessed = false;
-                                res.Data = null;
-                                res.LocaleMsg = L("SYS.Login.isNotOrgCode");//鐢ㄦ埛娌℃湁璇ユ嵁鐐圭殑鏉冮檺 }
-                            }
-                        }
-                        LOG_BS_LOGIN loginlog = new()
-                        {
-                            //FACTORY = _factory.FTY_CODE,
-                            USER_ID = user.USER_ID,
-                            LOGIN_FROM = $"{userInfo?.ad_info?.nation}->{userInfo?.ad_info?.province}->{userInfo?.ad_info?.city};IP:{userInfo?.ip}",
-                            LOGIN_TIME = DateTime.Now
-
-                        };
-                        //淇濆瓨鐧诲綍鏃ュ織
-                        var db = Business.Biz.Db;
-                        var dbTran = db.UseTran(() =>
-                        {
-                            db.Insertable(loginlog).ExecuteCommand();
-
-                            if (logininfo != null)
-                            {
-                                var deres = db.Storageable(logininfo).ExecuteCommand();
-                            }
-                            res.Data = logininfo;
-                        });
-                        if (!dbTran.IsSuccess)
-                        {
-                            res.IsSuccessed = false;
-                            res.Data = null;
-                            res.LocaleMsg = L("SYS.Login.dbTranError");
-                        }
-                        res.Data = logininfo;
-                    }
-                    else
-                    {
-                        res.IsSuccessed = false;
-                        res.Data = null;
-                        res.LocaleMsg = L("SYS.Login.dbTranError");//鐢ㄦ埛宸茬鐢�
-                    }
-                }
-                else
-                {
-                    res.IsSuccessed = false;
-                    res.Data = null;
-                    res.LocaleMsg = L("SYS.Login.errMsg401");//鐢ㄦ埛娌℃湁鏉冮檺锛堜护鐗屻�佺敤鎴峰悕銆佸瘑鐮侀敊璇級!
-                }
-            }
-            catch (Exception ex)
-            {
-                res.CatchExceptionWithLog(ex, "鐧诲綍寮傚父");
-            }
-            return await Task.FromResult(res);
-        }
-
-        /// <summary>
-        /// 鍒囨崲鎹偣
-        /// </summary>
-        /// <param name="action"></param>
-        /// <param name="Async"></param>
-        /// <returns></returns>
-        public async Task<ApiAction> BSSwitchOrgCode(string token,string org, string fty)
-        {
-            var action = new ApiAction();
-            try
-            {
-                //鏌ュ洖鏉�
-                var  query = Db.Queryable<SYS_BS_LOGIN>().Where(x => x.TOKEN == token).First();
-
-                query.ORG_CODE = org;
-                query.FTY_CODE = fty;
-                var db = Business.Biz.Db;
-                var dbTran = db.UseTran(() =>
-                {
-                    db.Updateable(query).ExecuteCommand();
-                });
-                if (!dbTran.IsSuccess)
-                {
-                    action.IsSuccessed = false;
-                    action.Data = null;
-                    action.LocaleMsg = L("SYS.Login.dbTranError");
-                }
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, "鍒囨崲寮傚父");
-            }
-            return action;
-        }
-
-        /// <summary>
-        /// 娉ㄩ攢
-        /// </summary>
-        /// <param name="token"></param>
-        /// <returns></returns>
-        public async Task<ApiAction> BSLogout(string token)
-        {
-            var res = new ApiAction();
-            try
-            {
-                var query = Db.Queryable<SYS_BS_LOGIN>().Where(x => x.TOKEN == token).First();
-                if (query != null)
-                {
-                    Db.Deleteable(query).ExecuteCommand();
-                    return res;
-                }
-            }
-            catch (Exception ex)
-            {
-                res.CatchExceptionWithLog(ex, "娉ㄩ攢鐧诲綍寮傚父");
-            }
-            return await Task.FromResult(res);
-        }
-    }
-}
diff --git a/Tiger.Business/SYS/Biz.SYS_CS_LOGIN.cs b/Tiger.Business/SYS/Biz.SYS_CS_LOGIN.cs
deleted file mode 100644
index d49ca2a..0000000
--- a/Tiger.Business/SYS/Biz.SYS_CS_LOGIN.cs
+++ /dev/null
@@ -1,172 +0,0 @@
-锘縰sing Tiger.Model;
-using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.Linq.Expressions;
-using System.Text;
-using System.Threading.Tasks;
-using Rhea.Common;
-using Tiger.IBusiness;
-using Dm.filter.log;
-
-namespace Tiger.Business
-{
-    public partial class Biz : ILogin
-    {
-        /// <summary>
-        /// 鑾峰彇CS鐧诲綍淇℃伅
-        /// </summary>
-        /// <param name="token"></param>
-        /// <param name="Async"></param>
-        /// <returns></returns>
-        public async Task<SYS_CS_LOGIN> GetCSLoginInfo(string token, bool Async = true)
-        {
-            SYS_CS_LOGIN query = null;
-            try
-            {
-                query = Db.Queryable<SYS_CS_LOGIN>().Where(x => x.TOKEN == token).First();
-                if (query != null)
-                {
-                    //瓒呰繃8灏忔椂鍒犻櫎鐧诲綍
-                    if ((DateTime.Now - query.LAST_ACCESS).Hours > 4)
-                    {
-                        Db.Deleteable(query).ExecuteCommand();
-                        return null;
-                    }
-                }
-            }
-            catch (System.Exception ex)
-            {
-
-            }
-            return await Task.FromResult(query);
-        }
-
-        /// <summary>
-        /// CS鐧诲綍
-        /// </summary>
-        /// <param name="action"></param>
-        /// <param name="Async"></param>
-        /// <returns></returns>
-        public async Task<ApiAction<SYS_CS_LOGIN>> CSLogin(ApiAction<UserInfo> action, bool Async = true)
-        {
-            var res = new ApiAction<SYS_CS_LOGIN>();
-            try
-            {
-                UserInfo userInfo = action.Data;
-                var user = Db.Queryable<SYS_USER>().Where(x => x.USER_ID == userInfo.USER_CODE && x.USER_PWD == userInfo.PASSWORD).First();
-                if (user != null)
-                {
-                    if (user.STATUS_CODE == "ENABLE")
-                    {
-                        MES_FACTORY _factory = Db.Queryable<MES_FACTORY>()
-                                                .WhereIF(!userInfo.FTY_CODE.IsNullOrEmpty(),x => x.FTY_CODE == userInfo.FTY_CODE)
-                                                .First();
-
-                        SYS_CS_LOGIN logininfo = new SYS_CS_LOGIN
-                        {
-                            USER_ID = user.USER_ID,
-                            USER_NAME = user.USER_NAME,
-                            LAST_ACCESS = DateTime.Now,
-                            CREATE_TIME = DateTime.Now,
-                            STATUS_CODE = user.STATUS_CODE,
-                            CLIENT_IP = userInfo?.ip,
-                            TOKEN = userInfo.Token ?? Guid.NewGuid().ToString("N"),
-                            ID = Guid.NewGuid().ToString("N"),
-                            ACCOUNT_TYPE = 0,
-                            ORG_CODE = userInfo.ORG_CODE,
-                            PROD_CODE = _factory?.FTY_CODE,
-                        };
-                        var org_code=Db.Queryable<V_USER_ORG>().Where(q=>q.USER_ID == userInfo.USER_CODE && q.ORG_CODE==userInfo.ORG_CODE).First();
-                        if (org_code != null)
-                        {
-                            logininfo.ORG_CODE = org_code.ORG_CODE;
-                        }
-                        else
-                        {
-                            var prod_code = Db.Queryable<V_USER_PROD>().Where(q => q.USER_ID == userInfo.USER_CODE && q.PROD_CODE == userInfo.PROD_CODE).First();
-                            if (prod_code != null)
-                            {
-                                logininfo.PROD_CODE = prod_code.PROD_CODE;
-                            }
-                            else
-                            {
-                                res.IsSuccessed = false;
-                                res.Data = null;
-                                res.LocaleMsg = L("SYS.Login.isNotOrgCode");//鐢ㄦ埛娌℃湁璇ユ嵁鐐圭殑鏉冮檺 }
-                            }
-                        }
-                        LOG_CS_LOGIN loginlog = new()
-                        {
-                            USER_ID = user.USER_ID,
-                            LOGIN_FROM = $"{userInfo?.ad_info?.nation}->{userInfo?.ad_info?.province}->{userInfo?.ad_info?.city};IP:{userInfo?.ip}",
-                            LOGIN_TIME = DateTime.Now,
-                            ORG_CODE = userInfo.ORG_CODE,
-                            PROD_CODE = _factory?.FTY_CODE,
-                        };
-                        //淇濆瓨鐧诲綍鏃ュ織
-                        var db = Business.Biz.Db;
-                        var dbTran = db.UseTran(() =>
-                        {
-                            db.Insertable(loginlog).ExecuteCommand();
-
-                            if (logininfo != null)
-                            {
-                                var deres = db.Storageable(logininfo).ExecuteCommand();
-                            }
-                            res.Data = logininfo;
-                        });
-                        if (!dbTran.IsSuccess)
-                        {
-                            res.IsSuccessed = false;
-                            res.Data = null;
-                            res.LocaleMsg = L("SYS.Login.dbTranError");
-                        }
-                        res.Data = logininfo;
-                    }
-                    else
-                    {
-                        res.IsSuccessed = false;
-                        res.Data = null;
-                        res.LocaleMsg = L("SYS.Login.dbTranError");//鐢ㄦ埛宸茬鐢�
-                    }
-                }
-                else
-                {
-                    res.IsSuccessed = false;
-                    res.Data = null;
-                    res.LocaleMsg = L("SYS.Login.errMsg401");//鐢ㄦ埛娌℃湁鏉冮檺锛堜护鐗屻�佺敤鎴峰悕銆佸瘑鐮侀敊璇級!
-                }
-            }
-            catch (Exception ex)
-            {
-                res.CatchExceptionWithLog(ex, "鐧诲綍寮傚父");
-            }
-            return await Task.FromResult(res);
-        }
-
-        /// <summary>
-        /// CS鐧诲嚭
-        /// </summary>
-        /// <param name="token"></param>
-        /// <returns></returns>
-        public async Task<ApiAction> CSLogout(string token)
-        {
-            var res = new ApiAction();
-            try
-            {
-                var query = Db.Queryable<SYS_CS_LOGIN>().Where(x => x.TOKEN == token).First();
-                if (query != null)
-                {
-                    Db.Deleteable(query).ExecuteCommand();
-                    return res;
-                }
-            }
-            catch (Exception ex)
-            {
-                res.CatchExceptionWithLog(ex, "娉ㄩ攢鐧诲綍寮傚父");
-            }
-            return await Task.FromResult(res);
-        }
-    }
-}
diff --git a/Tiger.Business/SYS/Biz.SYS_MENU.cs b/Tiger.Business/SYS/Biz.SYS_MENU.cs
deleted file mode 100644
index 85b388d..0000000
--- a/Tiger.Business/SYS/Biz.SYS_MENU.cs
+++ /dev/null
@@ -1,378 +0,0 @@
-锘縰sing Tiger.Model;
-using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.Linq.Expressions;
-using System.Text;
-using System.Threading.Tasks;
-using Rhea.Common;
-using System.Net;
-using System.Linq;
-using Newtonsoft.Json;
-
-namespace Tiger.Business
-{
-    public partial class Biz
-    {
-        /// <summary>
-        /// 鑾峰彇鑿滃崟鍒楄〃
-        /// </summary>
-        /// <param name="userid"></param>
-        /// <returns></returns>
-        public async Task<string> getMenuList(string userid, string rootCode)
-        {
-            var data = new List<MenuItem>();
-            var query = Biz.Db.Queryable<SYS_USER, SYS_USERINGROUP, SYS_USERGROUP, SYS_USERGROUP_ROLE, SYS_ROLE_MENU, SYS_MENU>((t, p, g, r, m, f) =>
-                                    new JoinQueryInfos(
-                                        JoinType.Inner, t.ID == p.USER_ID,
-                                        JoinType.Inner, p.USERGROUP_CODE == g.ID,
-                                        JoinType.Inner, p.USERGROUP_CODE == r.USERGROUP_CODE,
-                                        JoinType.Inner, r.ROLE_CODE == m.ROLE_CODE,
-                                        JoinType.Inner, m.FUNC_CODE == f.ID))
-                                .WhereIF(!string.IsNullOrEmpty(userid), (t, p, g, r, m, f) => t.USER_ID == userid && f.IS_USE == "1" && f.FUNC_TYPE != "2")
-                                .Select((t, p, g, r, m, f) => new SYS_MENU
-                                {
-                                    ID = f.ID,
-                                    FUNC_CODE = f.FUNC_CODE,
-                                    FUNC_NAME = f.FUNC_NAME,
-                                    FUNC_DESC = f.FUNC_DESC,
-                                    FUNC_GROUP = f.FUNC_GROUP,
-                                    FUNC_TYPE = f.FUNC_TYPE,
-                                    PFUNC_CODE = f.PFUNC_CODE,
-                                    FUNC_CLASS = f.FUNC_CLASS,
-                                    PATH = f.PATH,
-                                    ICON_URL = f.ICON_URL,
-                                    SEQ_NO = f.SEQ_NO,
-                                    OPEN_MODE = f.OPEN_MODE,
-                                    IS_USE = f.IS_USE,
-                                    OPER_CODE = f.OPER_CODE,
-                                    CREATE_USER = f.CREATE_USER,
-                                    CREATE_TIME = f.CREATE_TIME,
-                                    UPDATE_USER = f.UPDATE_USER,
-                                    UPDATE_TIME = f.UPDATE_TIME,
-                                    SYMBOLIC_NAME = f.SYMBOLIC_NAME,
-                                    COMPONENT = f.COMPONENT,
-                                    CURRENTACTIVEMENU = f.CURRENTACTIVEMENU,
-                                    SHOW = f.SHOW,
-                                    IGNOREKEEPALIVE = f.IGNOREKEEPALIVE,
-                                    IGNOREAUTH = f.IGNOREAUTH,
-                                    BUTTON_TYPE = f.BUTTON_TYPE,
-                                    DO_METHOD = f.DO_METHOD,
-                                });
-            var items = await query.Distinct().ToListAsync();
-            List<SYS_MENU> entities = items.OrderBy(x => x.SEQ_NO).ToList().FindAll(t => t.PFUNC_CODE == rootCode); //"23858079-7241-4e64-b0cf-eb5dbe84a9d6"
-            foreach (var item in entities)
-            {
-                MenuItem menuItem = new();
-                menuItem.id = item.ID;
-                menuItem.func_code = item.FUNC_CODE;
-                menuItem.path = (item.PATH ?? "").StartsWith("/dashboard") ? "/dashboard" : $"{item.PATH}";
-                menuItem.name = item.FUNC_NAME;
-                menuItem.component = (item.PATH == null || item.PATH == "#") ? "LAYOUT" : item.COMPONENT;
-                if (item.FUNC_CLASS == "PDA")
-                {
-                    menuItem.pages = menuItem.component;
-                    menuItem.url = item.ICON_URL;
-                }
-                menuItem.meta = new();
-                menuItem.meta.icon = item.ICON_URL;  // item.ICON_URL;
-                menuItem.meta.orderNo = item.SEQ_NO;
-                menuItem.meta.title = item.FUNC_NAME;
-                menuItem.meta.menuId = item.ID;
-                menuItem.meta.menuCode = item.FUNC_CODE;
-                menuItem.btnType = item.BUTTON_TYPE;
-                menuItem.meta.btnType = item.BUTTON_TYPE;
-                menuItem.meta.doMethod = item.DO_METHOD;
-                if (!string.IsNullOrEmpty(item.IGNOREKEEPALIVE))
-                {
-                    menuItem.meta.ignoreKeepAlive = item.IGNOREKEEPALIVE == "0" ? true : false;
-                }
-                if (!string.IsNullOrEmpty(item.CURRENTACTIVEMENU))
-                {
-                    menuItem.meta.currentActiveMenu = item.CURRENTACTIVEMENU;
-                }
-                if (!string.IsNullOrEmpty(item.SHOW))
-                {
-                    menuItem.meta.hideMenu = item.SHOW == "1" ? true : false;
-                    menuItem.meta.showMenu = item.SHOW == "0" ? true : false;
-                }
-                if (!string.IsNullOrEmpty(item.IGNOREAUTH))
-                {
-                    menuItem.meta.ignoreAuth = item.IGNOREAUTH == "Y";
-                }
-                menuItem.keepalive = item.IGNOREKEEPALIVE;
-                menuItem.show = item.SHOW;
-                menuItem.menuName = item.FUNC_NAME;
-                menuItem.status = item.IS_USE;
-                menuItem.btnType = item.BUTTON_TYPE;
-                menuItem.func_group = item.FUNC_GROUP;
-                menuItem.children = new();
-                GetMenuItem(items.ToList(), item.FUNC_CODE, ref menuItem);
-                data.Add(menuItem);
-            }
-            //杞崲Json鏃讹紝鍘婚櫎鍊间负null鐨勫睘鎬�
-            var jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
-            var json = JsonConvert.SerializeObject(data, Formatting.Indented, jsonSetting);
-            return json;
-        }
-
-        /// <summary>
-        /// 鑾峰彇鎵�鏈夎彍鍗曞垪琛�
-        /// </summary>
-        /// <returns></returns>
-        public async Task<string> getMenuListAll(string menuName, string status)
-        {
-            var data = new List<MenuItem>();
-            SYS_MENU func = null;
-            if (!string.IsNullOrEmpty(menuName))
-            {
-                string name = menuName.StartsWith("BS")?"BS": menuName;
-                func = Biz.Db.Queryable<SYS_MENU>().Where(x => x.FUNC_NAME == name).First();
-            }
-            if (func != null)
-            {
-                var items = await Biz.Db.Queryable<SYS_MENU>()
-                    .WhereIF(!string.IsNullOrEmpty(status), q => q.IS_USE == status)
-                    .OrderBy(x => x.SEQ_NO)
-                    .Distinct().ToListAsync();
-                List<SYS_MENU> entities = items.OrderBy(x => x.SEQ_NO).ToList().FindAll(t => t.PFUNC_CODE == func.FUNC_CODE);
-                foreach (var item in entities)
-                {
-                    MenuItem menuItem = new();
-                    menuItem.id = item.ID;
-                    menuItem.func_code = item.FUNC_CODE;
-                    menuItem.path = (item.PATH ?? "").StartsWith("/dashboard") ? "/dashboard" : $"{item.PATH}";
-                    menuItem.name = item.FUNC_NAME;
-                    menuItem.component = (item.PATH == null || item.PATH == "#") ? "LAYOUT" : item.COMPONENT;
-                    if (item.FUNC_CLASS == "PDA")
-                    {
-                        menuItem.pages = menuItem.component;
-                        menuItem.url = item.ICON_URL;
-                    }
-                    menuItem.meta = new();
-                    menuItem.meta.icon = item.ICON_URL;  // item.ICON_URL;
-                    menuItem.meta.orderNo = item.SEQ_NO;
-                    menuItem.meta.title = item.FUNC_NAME;
-                    menuItem.meta.menuId = item.ID;
-                    menuItem.meta.menuCode = item.FUNC_CODE;
-                    menuItem.meta.btnType = item.BUTTON_TYPE;
-                    menuItem.meta.doMethod = item.DO_METHOD;
-                    if (!string.IsNullOrEmpty(item.IGNOREKEEPALIVE))
-                    {
-                        menuItem.meta.ignoreKeepAlive = item.IGNOREKEEPALIVE == "0" ? true : false;
-                    }
-                    if (!string.IsNullOrEmpty(item.CURRENTACTIVEMENU))
-                    {
-                        menuItem.meta.currentActiveMenu = item.CURRENTACTIVEMENU;
-                    }
-                    if (!string.IsNullOrEmpty(item.SHOW))
-                    {
-                        menuItem.meta.hideMenu = item.SHOW == "1" ? true : false;
-                        menuItem.meta.showMenu = item.SHOW == "0" ? true : false;
-                    }
-                    if (!string.IsNullOrEmpty(item.IGNOREAUTH))
-                    {
-                        menuItem.meta.ignoreAuth = item.IGNOREAUTH == "Y";
-                    }
-                    menuItem.keepalive = item.IGNOREKEEPALIVE;
-                    menuItem.show = item.SHOW;
-                    menuItem.menuName = item.FUNC_NAME;
-                    menuItem.createTime = item.CREATE_TIME;
-                    menuItem.status = item.IS_USE;
-                    menuItem.icon = menuItem.meta.icon;
-                    menuItem.func_type = item.FUNC_TYPE;
-                    menuItem.func_group = item.FUNC_GROUP;
-                    menuItem.btnType = item.BUTTON_TYPE;
-                    menuItem.parentMenu = item.PFUNC_CODE;
-                    menuItem.orderNo = item.SEQ_NO;
-                    menuItem.children = null;
-                    GetMenuItem(items, item.FUNC_CODE, ref menuItem);
-                    data.Add(menuItem);
-                }
-            };
-
-            //杞崲Json鏃讹紝鍘婚櫎鍊间负null鐨勫睘鎬�
-            var jsonSetting = new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Ignore, NullValueHandling = NullValueHandling.Ignore };
-            var json = JsonConvert.SerializeObject(data, Formatting.Indented, jsonSetting);
-            return json;
-        }
-
-        /// <summary>
-        /// 淇濆瓨鑿滃崟
-        /// </summary>
-        /// <param name="action"></param>
-        /// <param name="Async"></param>
-        /// <returns></returns>
-        public async Task<ApiAction> SaveMenu(ApiAction<SaveMenuParams> action, bool Async = true)
-        {
-            var apiAction = new ApiAction();
-            try
-            {
-                SaveMenuParams data = action.Data;
-                //淇濆瓨鍒版暟鎹簱
-                var db = Business.Biz.Db;
-                var dbTran = db.UseTran(() =>
-                {
-                    SYS_MENU func = Biz.Db.Queryable<SYS_MENU>().Where(x => x.ID == data.id).First();
-                    if (func != null)
-                    {
-                        func.FUNC_NAME = data.menuName;
-                        func.IS_USE = data.status;
-                        func.PFUNC_CODE = data.parentMenu;
-                        func.PATH = data.path;
-                        func.ICON_URL = data.icon;
-                        func.SEQ_NO = (int)data.orderNo;
-                        func.FUNC_TYPE = data.func_type;
-                        func.BUTTON_TYPE = data.btnType;
-                        func.DO_METHOD = data.doMethod;
-                        func.COMPONENT = string.IsNullOrEmpty(data.component) && data.func_type == "0" ? "LAYOUT" : data.component;
-                        func.IGNOREKEEPALIVE = data.keepalive;
-                        func.SHOW = data.show;
-                        func.FUNC_GROUP = data.func_group;
-                        //func.CURRENTACTIVEMENU = data.keepalive
-                    }
-                    else
-                    {
-                        func = new()
-                        {
-                            ID = data.id ?? Guid.NewGuid().ToString("N"),
-                            FUNC_CODE = Guid.NewGuid().ToString("N"),
-                            FUNC_NAME = data.menuName,
-                            FUNC_DESC = data.menuName,
-                            FUNC_GROUP = data.func_group,
-                            FUNC_TYPE = data.func_type,
-                            BUTTON_TYPE = data.btnType,
-                            DO_METHOD = data.doMethod,
-                            PFUNC_CODE = data.parentMenu,
-                            FUNC_CLASS = data.func_class?? "BS",
-                            PATH = data.path,
-                            ICON_URL = data.icon,
-                            SEQ_NO = (int)data.orderNo,
-                            IS_USE = data.status,
-                            COMPONENT = string.IsNullOrEmpty(data.component) && data.func_type == "0" ? "LAYOUT" : data.component,
-                            IGNOREKEEPALIVE = data.keepalive,
-                            SHOW = data.show
-                        };
-                    }
-                    //鏇存柊
-                    if (data != null && data.isUpdate)
-                    {
-                        db.Updateable(func, "system").ExecuteCommand();
-                    }
-                    //鏂板
-                    else
-                    {
-                        db.Insertable(func, "system").ExecuteCommand();
-                        //濡傛灉鏄柊澧炵殑鑿滃崟锛屾煡鍑烘墍鏈夌埗绾ф洿鏂颁负鍗婇��
-                        List<SYS_MENU> menus = new();
-                        GetRootMenu(func, ref menus);
-                        var roles = menus.Select(x => x.ID).ToList();
-                        db.Updateable<SYS_ROLE_MENU>().SetColumns(t => t.HALF_CHECK == "Y").Where(x => roles.Contains(x.FUNC_CODE) || x.FUNC_CODE == "system").ExecuteCommand();
-                    }
-                });
-                if (!dbTran.IsSuccess)
-                {
-                    apiAction.Data = null;
-                    apiAction.IsSuccessed = false;
-                    apiAction.Message += $"淇濆瓨鏁版嵁澶辫触锛歿dbTran.ErrorMessage}";
-                    return apiAction;
-                }
-            }
-            catch (System.Exception ex)
-            {
-
-            }
-            return apiAction;
-        }
-
-        /// <summary>
-        /// 閫掑綊杩斿洖鑿滃崟
-        /// </summary>
-        /// <param name="data"></param>
-        /// <param name="parent"></param>
-        /// <param name="pMenuItem"></param>
-        private static void GetMenuItem(List<SYS_MENU> data, string parent, ref MenuItem pMenuItem)
-        {
-            List<SYS_MENU> entities = data.OrderBy(x => x.SEQ_NO).ToList().FindAll(t => t.PFUNC_CODE == parent).Distinct().ToList();
-            if (entities.Count > 0)
-            {
-                foreach (var item in entities)
-                {
-                    MenuItem menuItem = new();
-                    menuItem.id = item.ID;
-                    menuItem.func_code = item.FUNC_CODE;
-                    menuItem.path = (item.PATH ?? "").StartsWith("/dashboard") ? "/dashboard" : $"{item.PATH}";
-                    menuItem.name = item.FUNC_NAME;
-                    menuItem.component = (item.PATH == null || item.PATH == "#") ? "LAYOUT" : item.COMPONENT;
-                    if (item.FUNC_CLASS == "PDA")
-                    {
-                        menuItem.pages = menuItem.component;
-                        menuItem.url = item.ICON_URL;
-                    }
-                    menuItem.meta = new();
-                    menuItem.meta.icon = item.ICON_URL;  //item.ICON_URL;
-                    menuItem.meta.orderNo = item.SEQ_NO;
-                    menuItem.meta.title = item.FUNC_NAME;
-                    menuItem.meta.menuId = item.ID;
-                    menuItem.meta.menuCode = item.FUNC_CODE;
-                    menuItem.meta.btnType = item.BUTTON_TYPE;
-                    menuItem.meta.doMethod = item.DO_METHOD;
-                    if (!string.IsNullOrEmpty(item.IGNOREKEEPALIVE))
-                    {
-                        menuItem.meta.ignoreKeepAlive = item.IGNOREKEEPALIVE == "0" ? true : false;
-                    }
-                    if (!string.IsNullOrEmpty(item.CURRENTACTIVEMENU))
-                    {
-                        menuItem.meta.currentActiveMenu = item.CURRENTACTIVEMENU;
-                    }
-                    if (!string.IsNullOrEmpty(item.SHOW))
-                    {
-                        menuItem.meta.hideMenu = item.SHOW == "1" ? true : false;
-                        menuItem.meta.showMenu = item.SHOW == "0" ? true : false;
-                    }
-                    if (!string.IsNullOrEmpty(item.IGNOREAUTH))
-                    {
-                        menuItem.meta.ignoreAuth = item.IGNOREAUTH == "Y";
-                    }
-                    menuItem.keepalive = item.IGNOREKEEPALIVE;
-                    menuItem.show = item.SHOW;
-                    menuItem.menuName = item.FUNC_NAME;
-                    menuItem.createTime = item.CREATE_TIME;
-                    menuItem.icon = menuItem.meta.icon;
-                    menuItem.func_type = item.FUNC_TYPE;
-                    menuItem.btnType = item.BUTTON_TYPE;
-                    menuItem.doMethod = item.DO_METHOD;
-                    menuItem.parentMenu = item.PFUNC_CODE;
-                    menuItem.func_group = item.FUNC_GROUP;
-                    menuItem.orderNo = item.SEQ_NO;
-                    menuItem.status = item.IS_USE;
-                    menuItem.children = null;
-                    GetMenuItem(data, item.FUNC_CODE, ref menuItem);
-                    if (pMenuItem.children == null) { pMenuItem.children = new(); }
-                    pMenuItem.children.Add(menuItem);
-                }
-            }
-        }
-
-        private static void GetRootMenu(SYS_MENU menu, ref List<SYS_MENU> items)
-        {
-            SYS_MENU menuRet = null;
-            try
-            {
-                menuRet = Biz.Db.Queryable<SYS_MENU>().Where(q => q.FUNC_CODE == menu.PFUNC_CODE && q.FUNC_CODE != "system01").Single(); //23858079-7241-4e64-b0cf-eb5dbe84a9d6
-                if (menuRet != null)
-                {
-                    if (!items.Where(x => x.FUNC_CODE == menuRet.FUNC_CODE).Any())
-                    {
-                        items.Add(menuRet);
-                    }
-                    GetRootMenu(menuRet, ref items);
-                }
-            }
-            catch (System.Exception ex)
-            {
-                Logger.Default.Fatal($"鑾峰彇鑿滃崟[{menu.FUNC_CODE}]鐨剅oot鑿滃崟寮傚父: {ex.Message}");
-            }
-        }
-    }
-}
diff --git a/Tiger.Business/SYS/Biz.SYS_ORGANIZATION.cs b/Tiger.Business/SYS/Biz.SYS_ORGANIZATION.cs
deleted file mode 100644
index 0a903c6..0000000
--- a/Tiger.Business/SYS/Biz.SYS_ORGANIZATION.cs
+++ /dev/null
@@ -1,168 +0,0 @@
-锘縰sing Tiger.Model;
-using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.Linq.Expressions;
-using System.Text;
-using System.Threading.Tasks;
-using Rhea.Common;
-using System.Net;
-using System.Linq;
-using Newtonsoft.Json;
-
-namespace Tiger.Business
-{
-    public partial class Biz
-    {
-        /// <summary>
-        /// 鑾峰彇鎵�鏈夌粍缁囨満鏋勫垪琛�
-        /// </summary>
-        /// <returns></returns>
-        public async Task<string> getOrgTreeList(string orgName, string status)
-        {
-            var data = new List<OrgItem>();
-            SYS_ORGANIZATION func = null;
-            if (!string.IsNullOrEmpty(orgName))
-            {
-                func = Biz.Db.Queryable<SYS_ORGANIZATION>().Where(x=>x.ORG_NAME == orgName).First();
-            }
-            var items = await Biz.Db.Queryable<SYS_ORGANIZATION>()
-                .WhereIF(!string.IsNullOrEmpty(status),q=>q.STATUS == Convert.ToInt32(status))
-                .OrderBy(x => x.SEQ_NO)
-                .Distinct().ToListAsync();
-            //娌℃湁鏌ヨ鐨勬椂鍊�
-            if (func == null)
-            {
-                List<SYS_ORGANIZATION> entities = items.OrderBy(x => x.SEQ_NO).ToList().FindAll(t => t.PARENT.IsNullOrEmpty());
-                foreach (var item in entities)
-                {
-                    OrgItem deptItem = new();
-                    deptItem.id = item.ID;
-                    deptItem.deptCode = item.ORG_CODE;
-                    deptItem.deptName = item.ORG_NAME;
-                    deptItem.PARENT = item.PARENT;
-                    deptItem.createTime = item.CREATE_TIME.ToString("yyyy-MM-dd mm:dd:ss");
-                    deptItem.status = item.STATUS;
-                    deptItem.remark = item.REMARK;
-                    deptItem.orderNo= item.SEQ_NO;
-                    deptItem.children = new();
-                    deptItem.DefaultApi = item.DEFAULTAPI;
-                    GetOrgItem(items, item.ORG_CODE, ref deptItem);
-                    data.Add(deptItem);
-                }
-            }
-            //鏈夋煡璇㈡潯浠剁殑鏃跺��
-            else { 
-                
-            }
-
-            //string where = page.sqlcmd;
-            //action.Data = isAsync ? await Db.Queryable<T>().Where(where).ToPageAsync(page.pageIndex, page.pageSize) : Db.Queryable<T>().Where(where).ToPage(page.pageIndex, page.pageSize);
-            //action.Data.draw = page.draw;
-            //action.Message = $"Query {typeof(T).Name} entity page from database success";
-
-            //杞崲Json鏃讹紝鍘婚櫎鍊间负null鐨勫睘鎬�
-            var jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
-            var json = JsonConvert.SerializeObject(data, Formatting.Indented, jsonSetting);
-            return json;
-        }
-
-
-        /// <summary>
-        /// 閫掑綊杩斿洖缁勭粐鏈烘瀯
-        /// </summary>
-        /// <param name="data"></param>
-        /// <param name="parent"></param>
-        /// <param name="pOrgItem"></param>
-        private static void GetOrgItem(List<SYS_ORGANIZATION> data, string parent, ref OrgItem pOrgItem)
-        {
-            List<SYS_ORGANIZATION> entities = data.OrderBy(x => x.SEQ_NO).ToList().FindAll(t => t.PARENT == parent).Distinct().ToList();
-            if (entities.Count > 0)
-            {
-                foreach (var item in entities)
-                {
-                    OrgItem deptItem = new();
-                    deptItem.id = item.ID;
-                    deptItem.deptCode = item.ORG_CODE;
-                    deptItem.deptName = item.ORG_NAME;
-                    deptItem.PARENT = item.PARENT;
-                    deptItem.createTime = item.CREATE_TIME.ToString("yyyy-MM-dd mm:dd:ss");
-                    deptItem.status = item.STATUS;
-                    deptItem.remark = item.REMARK;
-                    deptItem.orderNo = item.SEQ_NO;
-                    deptItem.children = new();
-                    deptItem.DefaultApi = item.DEFAULTAPI;
-                    GetOrgItem(data, item.ORG_CODE, ref deptItem);
-                    pOrgItem.children.Add(deptItem);
-                }
-            }
-        }
-
-        public async Task<string> getProdTreeList(string prodName)
-        {
-            var data = new List<OrgItem>();
-            MES_FACTORY func = null;
-            if (!string.IsNullOrEmpty(prodName))
-            {
-                func = Biz.Db.Queryable<MES_FACTORY>().Where(x => x.FTY_CODE == prodName).First();
-            }
-            var items = await Biz.Db.Queryable<MES_FACTORY>()
-                .Distinct().ToListAsync();
-            //娌℃湁鏌ヨ鐨勬椂鍊�
-            if (func == null)
-            {
-                int i = 0;
-                foreach (var item in items)
-                {
-                    OrgItem deptItem = new();
-                    deptItem.id = item.ID;
-                    deptItem.deptCode = item.FTY_CODE;
-                    deptItem.deptName = item.FTY_NAME;
-                    deptItem.PARENT = "";
-                    deptItem.createTime = item.CREATE_TIME.ToString("yyyy-MM-dd mm:dd:ss");
-                    deptItem.status = 0;
-                    deptItem.remark = item.REMARK;
-                    deptItem.orderNo = i++;
-                    deptItem.children = new();
-                    deptItem.DefaultApi = "";
-                    data.Add(deptItem);
-                }
-            }
-            //鏈夋煡璇㈡潯浠剁殑鏃跺��
-            else
-            {
-
-            }
-
-            //string where = page.sqlcmd;
-            //action.Data = isAsync ? await Db.Queryable<T>().Where(where).ToPageAsync(page.pageIndex, page.pageSize) : Db.Queryable<T>().Where(where).ToPage(page.pageIndex, page.pageSize);
-            //action.Data.draw = page.draw;
-            //action.Message = $"Query {typeof(T).Name} entity page from database success";
-
-            //杞崲Json鏃讹紝鍘婚櫎鍊间负null鐨勫睘鎬�
-            var jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
-            var json = JsonConvert.SerializeObject(data, Formatting.Indented, jsonSetting);
-            return json;
-        }
-
-    }
-
-
-    /// <summary>
-    /// 閮ㄩ棬鏍戝舰鍒楄〃
-    /// </summary>
-    public class OrgItem
-    {
-        public List<OrgItem> children { get; set; }
-        public int? status { get; set; }
-        public string PARENT { get; set; }
-        public string deptCode { get; set; }
-        public string deptName { get; set; }
-        public string createTime { get; set; }
-        public int? orderNo { get; set; }
-        public string remark { get; set; }
-        public string id { get; set; }
-        public string DefaultApi { get; set; }
-        
-    }
-}
diff --git a/Tiger.Business/SYS/Biz.SYS_ROLE.cs b/Tiger.Business/SYS/Biz.SYS_ROLE.cs
deleted file mode 100644
index 71f431e..0000000
--- a/Tiger.Business/SYS/Biz.SYS_ROLE.cs
+++ /dev/null
@@ -1,269 +0,0 @@
-锘縰sing Tiger.Model;
-using SqlSugar;
-using System;
-using System.Collections.Generic;
-using Tiger.IBusiness;
-using System.Threading.Tasks;
-using Rhea.Common;
-using System.Net;
-using System.Linq;
-using Newtonsoft.Json;
-
-namespace Tiger.Business
-{
-    public partial class Biz
-    {
-        /// <summary>
-        /// 淇濆瓨瑙掕壊
-        /// </summary>
-        /// <param name="action"></param>
-        /// <param name="Async"></param>
-        /// <returns></returns>
-        public async Task<ApiAction> SaveRole(ApiAction<SaveRoleStrictlyParams> action)
-        {
-            var apiAction = new ApiAction();
-            try
-            {
-                SaveRoleStrictlyParams data = action.Data;
-                SYS_ROLE func = Biz.Db.Queryable<SYS_ROLE>().Where(x => x.ID == data.ID).First();
-                if (func != null)
-                {
-                    func.ROLE_CODE = data.ROLE_CODE;
-                    func.ROLE_DESC = data.ROLE_DESC;
-                    func.IS_ACTIVE = data.IS_ACTIVE;
-                }
-                else
-                {
-                    func = new()
-                    {
-                        ID = Guid.NewGuid().ToString("N"),
-                        ROLE_CODE = data.ROLE_CODE,
-                        ROLE_DESC = data.ROLE_DESC,
-                        IS_ACTIVE = data.IS_ACTIVE
-                    };
-                }
-                //淇濆瓨瑙掕壊鑿滃崟
-                List<SYS_ROLE_MENU> roleMenuList = new List<SYS_ROLE_MENU>();
-                if (data.menu.Checked != null)
-                {
-                    foreach (var item in data.menu.Checked)
-                    {
-                        SYS_ROLE_MENU roleMenu = new()
-                        {
-                            ROLE_CODE = func.ID,
-                            FUNC_CODE = item,
-                            HALF_CHECK = "N"
-                        };
-                        roleMenuList.Add(roleMenu);
-                    }
-                }
-                if (data.menu.halfChecked != null)
-                {
-                    foreach (var item in data.menu.halfChecked)
-                    {
-                        SYS_ROLE_MENU roleMenu = new()
-                        {
-                            ROLE_CODE = func.ID,
-                            FUNC_CODE = item,
-                            HALF_CHECK = "Y"
-                        };
-                        roleMenuList.Add(roleMenu);
-                    }
-                }
-                //淇濆瓨瑙掕壊缁勭粐
-                List<SYS_ROLE_ORG> roleOrgList = new List<SYS_ROLE_ORG>();
-                if (data.org.Checked != null)
-                {
-                    foreach (var item in data.org.Checked)
-                    {
-                        SYS_ROLE_ORG roleOrg = new()
-                        {
-                            ROLE_CODE = func.ID,
-                            ORG_CODE = item,
-                            HALF_CHECK = "N"
-                        };
-                        roleOrgList.Add(roleOrg);
-                    }
-                }
-                if (data.org.halfChecked != null)
-                {
-                    foreach (var item in data.org.halfChecked)
-                    {
-                        SYS_ROLE_ORG roleOrg = new()
-                        {
-                            ROLE_CODE = func.ID,
-                            ORG_CODE = item,
-                            HALF_CHECK = "Y"
-                        };
-                        roleOrgList.Add(roleOrg);
-                    }
-                }
-
-                //淇濆瓨瑙掕壊浠撳簱
-                List<SYS_ROLE_WH> roleWhList = new List<SYS_ROLE_WH>();
-                if (data.wh.Checked != null)
-                {
-                    foreach (var item in data.wh.Checked)
-                    {
-                        SYS_ROLE_WH roleWh = new()
-                        {
-                            ROLE_CODE = func.ID,
-                            WH_CODE = item,
-                            HALF_CHECK = "N"
-                        };
-                        roleWhList.Add(roleWh);
-                    }
-                }
-                if (data.wh.halfChecked != null)
-                {
-                    foreach (var item in data.wh.halfChecked)
-                    {
-                        SYS_ROLE_WH roleWh = new()
-                        {
-                            ROLE_CODE = func.ID,
-                            WH_CODE = item,
-                            HALF_CHECK = "Y"
-                        };
-                        roleWhList.Add(roleWh);
-                    }
-                }
-
-                //淇濆瓨瑙掕壊宸ュ巶
-                List<SYS_ROLE_PROD> rolePrdList = new List<SYS_ROLE_PROD>();
-                if (data.fty.Checked != null)
-                {
-                    foreach (var item in data.fty.Checked)
-                    {
-                        SYS_ROLE_PROD roleFty = new()
-                        {
-                            ROLE_CODE = func.ID,
-                            PROD_CODE = item,
-                            HALF_CHECK = "N"
-                        };
-                        rolePrdList.Add(roleFty);
-                    }
-                }
-                if (data.fty.halfChecked != null)
-                {
-                    foreach (var item in data.fty.halfChecked)
-                    {
-                        SYS_ROLE_PROD roleFty = new()
-                        {
-                            ROLE_CODE = func.ID,
-                            PROD_CODE = item,
-                            HALF_CHECK = "Y"
-                        };
-                        rolePrdList.Add(roleFty);
-                    }
-                }
-
-                //淇濆瓨鍒版暟鎹簱
-                var db = Business.Biz.Db;
-                var dbTran = db.UseTran(() =>
-                {
-                    //鏇存柊
-                    if (data != null && data.isUpdate)
-                    {
-                        db.Updateable(func, "system").ExecuteCommand();
-                    }
-                    //鏂板
-                    else
-                    {
-                        db.Insertable(func, "system").ExecuteCommand();
-                    }
-
-                    if (roleMenuList.Count > 0)
-                    {
-                        if (!string.IsNullOrEmpty(data.ID))
-                        {
-                            db.Deleteable<SYS_ROLE_MENU>().Where(x => x.ROLE_CODE == data.ID).ExecuteCommand();
-                        }
-                        db.Storageable(roleMenuList, "system").ExecuteCommand();
-                    }
-                    if (roleOrgList.Count > 0)
-                    {
-                        if (!string.IsNullOrEmpty(data.ID))
-                        {
-                            db.Deleteable<SYS_ROLE_ORG>().Where(x => x.ROLE_CODE == data.ID).ExecuteCommand();
-                        }
-                        db.Storageable(roleOrgList, "system").ExecuteCommand();
-                    }
-                    if (rolePrdList.Count > 0)
-                    {
-                        if (!string.IsNullOrEmpty(data.ID))
-                        {
-                            db.Deleteable<SYS_ROLE_PROD>().Where(x => x.ROLE_CODE == data.ID).ExecuteCommand();
-                        }
-                        db.Storageable(rolePrdList, "system").ExecuteCommand();
-                    }
-                    if (roleWhList.Count > 0)
-                    {
-                        if (!string.IsNullOrEmpty(data.ID))
-                        {
-                            db.Deleteable<SYS_ROLE_WH>().Where(x => x.ROLE_CODE == data.ID).ExecuteCommand();
-                        }
-                        db.Storageable(roleWhList, "system").ExecuteCommand();
-                    }
-                });
-                if (!dbTran.IsSuccess)
-                {
-                    apiAction.Data = null;
-                    apiAction.IsSuccessed = false;
-                    apiAction.Message += $"淇濆瓨鏁版嵁澶辫触锛歿dbTran.ErrorMessage}";
-                    return apiAction;
-                }
-            }
-            catch (System.Exception ex)
-            {
-
-            }
-            return apiAction;
-        }
-
-        /// <summary>
-        /// 鐢ㄦ埛缁勫叧鑱旇鑹蹭繚瀛樻柟娉�
-        /// </summary>
-        /// <param name="roleIdIn"></param>
-        /// <param name="userGroupId"></param>
-        /// <returns></returns>
-        public async Task<ApiAction> SetRoleToGroupAsync( string roleIdIn, string userGroupId)
-        {
-            var action = new ApiAction();
-            try
-            {
-                var userIds = roleIdIn.Split(',').ToList();
-                List<SYS_ROLE> list = await Biz.Db.Queryable<SYS_ROLE>().Where(x => userIds.Contains(x.ROLE_CODE)).ToListAsync();
-
-                //淇濆瓨鍒版暟鎹簱
-                var db = Business.Biz.Db;
-                var dbTran = db.UseTran(() =>
-                {
-                    List<SYS_USERGROUP_ROLE> roleingroupList = new();
-                    db.Deleteable<SYS_USERGROUP_ROLE>().Where(x => x.USERGROUP_CODE == userGroupId).ExecuteCommand();
-                    if (list != null && list.Count > 0)
-                    {
-                        foreach (var item in list)
-                        {
-                            SYS_USERGROUP_ROLE g = new SYS_USERGROUP_ROLE();
-                            g.ROLE_CODE = item.ID;
-                            g.USERGROUP_CODE = userGroupId;
-                            roleingroupList.Add(g);
-                        }
-                        db.Insertable(roleingroupList, "admin").ExecuteCommand();
-                    }
-                });
-                if (!dbTran.IsSuccess)
-                {
-                    throw dbTran.ErrorException;
-                }
-                action.IsSuccessed = true;
-                action.Message = $"淇濆瓨鐢ㄦ埛缁勪腑鐨勮鑹插垪琛ㄦ垚鍔熴��";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"淇濆瓨鐢ㄦ埛缁勪腑鐨勮鑹插垪琛ㄥ紓甯�");
-            }
-            return action;
-        }
-    }
-}
diff --git a/Tiger.Business/SYS/Biz.SYS_USERGROUP.cs b/Tiger.Business/SYS/Biz.SYS_USERGROUP.cs
deleted file mode 100644
index c5c3840..0000000
--- a/Tiger.Business/SYS/Biz.SYS_USERGROUP.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-锘縰sing Rhea.Common;
-using Tiger.Model;
-using Newtonsoft.Json;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Net;
-using System.Text;
-using System.Threading.Tasks;
-using Tiger.IBusiness;
-
-namespace Tiger.Business
-{
-    public partial class Biz : ISystem
-    {
-        /// <summary>
-        /// 淇濆瓨鐢ㄦ埛缁勪腑鐨勭敤鎴峰垪琛�
-        /// </summary>
-        /// <param name="userIdNotIn"></param>
-        /// <param name="userIdIn"></param>
-        /// <param name="userGroupId"></param>
-        /// <returns></returns>
-        public async Task<ApiAction> SetSysUserToGroupAsync(string userIdNotIn, string userIdIn,string userGroupId)
-        {
-            var action = new ApiAction();
-            try
-            {
-                var userIds = userIdIn.Split(',').ToList();
-                List<SYS_USER> list = await Biz.Db.Queryable<SYS_USER>().Where(x=> userIds.Contains(x.USER_ID)).ToListAsync();
-
-                //淇濆瓨鍒版暟鎹簱
-                var db = Business.Biz.Db;
-                var dbTran = db.UseTran(() =>
-                {
-                    List<SYS_USERINGROUP> useringroupList = new();
-                    db.Deleteable<SYS_USERINGROUP>().Where(x=>x.USERGROUP_CODE == userGroupId).ExecuteCommand();
-                    if (list != null && list.Count > 0)
-                    {
-                        foreach (var item in list)
-                        {
-                            SYS_USERINGROUP g = new SYS_USERINGROUP();
-                            g.USER_ID = item.ID;
-                            g.USERGROUP_CODE = userGroupId;
-                            useringroupList.Add(g);
-                        }
-                        db.Insertable(useringroupList, "admin").ExecuteCommand();
-                    }
-                });
-                if (!dbTran.IsSuccess)
-                {
-                    throw dbTran.ErrorException;
-                }
-                action.IsSuccessed = true;
-                action.Message = $"淇濆瓨鐢ㄦ埛缁勪腑鐨勭敤鎴峰垪琛ㄦ垚鍔熴��";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"淇濆瓨鐢ㄦ埛缁勪腑鐨勭敤鎴峰垪琛ㄥ紓甯�");
-            }
-            return action;
-        }
-    }
-}
diff --git a/Tiger.Business/SYS/Biz.Sys_Params.cs b/Tiger.Business/SYS/Biz.Sys_Params.cs
deleted file mode 100644
index dba0035..0000000
--- a/Tiger.Business/SYS/Biz.Sys_Params.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-锘縰sing Tiger.Model;
-using SqlSugar;
-using System;
-using System.Collections.Generic;
-using Tiger.IBusiness;
-using System.Threading.Tasks;
-using Rhea.Common;
-using System.Net;
-using System.Linq;
-using Newtonsoft.Json;
-
-namespace Tiger.Business
-{
-    public partial class Biz
-    {
-        /// <summary>
-        /// 鑾峰彇鍙傛暟
-        /// </summary>
-        /// <param name="group"></param>
-        /// <param name="code"></param>
-        /// <returns></returns>
-        public async Task<ApiAction<List<SYS_PARAM>>> getSysParam( string group, string code)
-        {
-            var action = new ApiAction<List<SYS_PARAM>>();
-            try
-            {
-                action.Data = code.IsNullOrEmpty()? Cache.SysParam.Params.Where(x=>x.PRMG_CODE == group).ToList(): new List<SYS_PARAM>() { Cache.SysParam[code, group] } ;
-                action.Message = $"鑾峰彇鍙傛暟鎴愬姛銆�";
-            }
-            catch (Exception ex)
-            {
-                action.CatchExceptionWithLog(ex, $"鑾峰彇鍙傛暟寮傚父");
-            }
-            return action;
-        }
-    }
-}
diff --git a/Tiger.Business/Services/Base/InterfaceService.cs b/Tiger.Business/Services/Base/InterfaceService.cs
deleted file mode 100644
index b904103..0000000
--- a/Tiger.Business/Services/Base/InterfaceService.cs
+++ /dev/null
@@ -1,194 +0,0 @@
-锘縰sing Apache.NMS.ActiveMQ.Threads;
-using FluentScheduler;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Logging;
-using Newtonsoft.Json;
-using Rhea.Common;
-using SqlSugar;
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-using Tiger.IBusiness;
-using Tiger.Model;
-using Tiger.Model.Minsun;
-
-namespace Tiger.Business
-{
-    /// <summary>
-    /// 鎺ュ彛鏈嶅姟
-    /// </summary>
-    public class InterfaceService: IInterfaceService
-    {
-        public Sundial.ISchedulerFactory _schedulerFactory { get; set; }
-        /// <summary>
-        /// 璁剧疆璁″垝浠诲姟宸ュ巶绫�
-        /// </summary>
-        /// <param name="schedulerFactory"></param>
-        public void SetSchedulerFactory(Sundial.ISchedulerFactory schedulerFactory)
-        {
-            _schedulerFactory = schedulerFactory;
-        }
-
-        /// <summary>
-        /// 鏍规嵁瀹炰綋绫诲悕鍙婁綔涓氬悕绉版坊鍔犱綔涓�
-        /// </summary>
-        /// <typeparam name="TJob"></typeparam>
-        /// <param name="newEntity"></param>
-        /// <param name="jobParam"></param>
-        public ApiAction AddJob<TJob>(TJob newEntity, TskJobParam jobParam) where TJob : class, Sundial.IJob
-        {
-            ApiAction apiAction = new();
-            Sundial.TriggerBuilder triggerBuilder = Sundial.Triggers.Period(jobParam.Period * 60 * 1000).LoadFrom(new
-            {
-                TriggerId = jobParam.JobName + "_trigger1",
-            });
-            _schedulerFactory.AddJob<TJob>(jobParam.JobName, triggerBuilder);
-            return apiAction;
-        }
-
-        /// <summary>
-        /// 鏍规嵁浣滀笟鍚嶇О娣诲姞浣滀笟
-        /// </summary>
-        /// <typeparam name="TJob"></typeparam>
-        /// <param name="jobname"></param>
-        /// <param name="triggerBuilders"></param>
-        public ApiAction AddJob<TJob>(string jobname, params Sundial.TriggerBuilder[] triggerBuilders) where TJob : class, Sundial.IJob
-        {
-            ApiAction apiAction = new();
-            triggerBuilders[0].LoadFrom(new
-            {
-                TriggerId = jobname + "_trigger1",
-            });
-            _schedulerFactory.AddJob<TJob>(jobname, triggerBuilders);
-            var trigger = GetJob(jobname).GetTrigger($"{jobname}_trigger1");
-            return apiAction;
-        }
-
-        /// <summary>
-        /// 鏇存柊浣滀笟
-        /// </summary>
-        /// <param name="job"></param>
-        /// <returns></returns>
-        public ApiAction UpdateJob(TSK_JOB job)
-        {
-            ApiAction apiAction = new ApiAction();
-            Sundial.IScheduler scheduler = GetJob(job.JobName);
-            var trigger = scheduler.GetTrigger($"{job.JobName}_trigger1");
-            if (trigger.Status == Sundial.TriggerStatus.Running)
-            {
-                apiAction.IsSuccessed = false;
-                apiAction.Message = $"浣滀笟[{job.JobName}]姝e湪杩愯涓嶈兘缂栬緫";
-            }
-            
-            //鏇存柊瑙﹀彂鍣ㄥ懆鏈�
-            scheduler.UpdateTrigger($"{job.JobName}_trigger1", triggerBuilder =>
-            {
-                triggerBuilder.SetArgs(job.uPeriod*60*1000);
-            }); ;
-            return apiAction;
-        }
-
-        private TSK_JOB ReturnDetail(string jobname)
-        {
-            var jobDetail = GetJob(jobname).GetJobDetail();
-            return JsonConvert.DeserializeObject<TSK_JOB>(JsonConvert.SerializeObject(jobDetail));
-        }
-
-        /// <summary>
-        /// 鍚姩鎵�鏈変綔涓�
-        /// </summary>
-        public void StartAllJob()
-        {
-            _schedulerFactory.StartAll();
-        }
-
-        /// <summary>
-        /// 鍚姩鍗曚釜浣滀笟
-        /// </summary>
-        /// <param name="jobname"></param>
-        public void StartJob(string jobname)
-        {
-            // 甯﹁繑鍥炲��
-            Sundial.IScheduler scheduler;
-            var scheduleResult = _schedulerFactory.TryRunJob(jobname, out scheduler);
-        }
-
-        /// <summary>
-        /// 鑾峰彇鍗曚釜浣滀笟
-        /// </summary>
-        /// <param name="jobname"></param>
-        /// <returns></returns>
-        public Sundial.IScheduler GetJob(string jobname)
-        {
-            Sundial.IScheduler scheduler;
-            var scheduleResult = _schedulerFactory.TryGetJob(jobname, out scheduler);
-            return scheduler;
-        }
-
-        /// <summary>
-        /// 鑾峰彇鎵�鏈変綔涓�
-        /// </summary>
-        /// <returns></returns>
-        public List<Sundial.IScheduler> GetJobs()
-        {
-            return _schedulerFactory.GetJobs().ToList();
-        }
-
-        /// <summary>
-        /// 鏆傚仠浣滀笟
-        /// </summary>
-        /// <param name="jobname"></param>
-        public void PauseJob(string jobname)
-        {
-            var scheduler = GetJob(jobname);
-            if (scheduler != null)
-            {
-                scheduler.Pause();
-            }
-        }
-        /// <summary>
-        /// 鍒犻櫎浣滀笟
-        /// </summary>
-        /// <param name="jobname"></param>
-        public void RemoveJob(string jobname)
-        {
-            var scheduler = GetJob(jobname);
-            if (scheduler != null)
-            {
-                scheduler.Remove();
-            }
-        }
-
-        /// <summary>
-        /// 浠庢暟鎹簱鍔犺浇浣滀笟
-        /// </summary>
-        public void AddJobFromDB()
-        {
-            ;
-        }
-
-        public void JobInitialize()
-        {
-            JobManager.Initialize();
-        }
-
-        ApiAction IInterfaceService.AddTskJob<TJob>(TJob newEntity, FluentJobParam jobParam)
-        {
-            throw new NotImplementedException();
-        }
-
-        public void RemovefJob(string jobname)
-        {
-            throw new NotImplementedException();
-        }
-
-        ApiAction IInterfaceService.ImmediateRun<TJob>(TJob newEntity, string jobname)
-        {
-            throw new NotImplementedException();
-        }
-    }
-}
diff --git a/Tiger.Business/Services/Base/InterfaceServiceNew.cs b/Tiger.Business/Services/Base/InterfaceServiceNew.cs
deleted file mode 100644
index d67e481..0000000
--- a/Tiger.Business/Services/Base/InterfaceServiceNew.cs
+++ /dev/null
@@ -1,600 +0,0 @@
-锘縰sing FluentScheduler;
-using Newtonsoft.Json;
-using Rhea.Common;
-using Sundial;
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection;
-using System.Security.Cryptography;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-using Tiger.IBusiness;
-using Tiger.Model;
-using Tiger.Model.Entitys.MES.Position;
-using Tiger.Model.Minsun;
-using static Microsoft.CodeAnalysis.CSharp.SyntaxTokenParser;
-using static Tiger.Model.TrigArgs;
-
-namespace Tiger.Business
-{
-    /// <summary>
-    /// 
-    /// </summary>
-    public class InterfaceServiceNew : IInterfaceService
-    {
-        #region Sundial璁″垝璋冨害 鏃х増鏈娇鐢�
-
-        public Sundial.ISchedulerFactory _schedulerFactory { get; set; }
-        /// <summary>
-        /// 璁剧疆璁″垝浠诲姟宸ュ巶绫�
-        /// </summary>
-        /// <param name="schedulerFactory"></param>
-        public void SetSchedulerFactory(Sundial.ISchedulerFactory schedulerFactory)
-        {
-            _schedulerFactory = schedulerFactory;
-        }
-
-        /// <summary>
-        /// 鏍规嵁瀹炰綋绫诲悕鍙婁綔涓氬悕绉版坊鍔犱綔涓�
-        /// </summary>
-        /// <typeparam name="TJob"></typeparam>
-        /// <param name="newEntity"></param>
-        /// <param name="jobParam"></param>
-        public ApiAction AddJob<TJob>(TJob newEntity, TskJobParam jobParam) where TJob : class, Sundial.IJob
-        {
-            ApiAction apiAction = new();
-            Sundial.TriggerBuilder triggerBuilder = Sundial.Triggers.Period(jobParam.Period * 60 * 1000).LoadFrom(new
-            {
-                TriggerId = jobParam.JobName + "_trigger1",
-            });
-            _schedulerFactory.AddJob<TJob>(jobParam.JobName, triggerBuilder);
-            var trigger = GetJob(jobParam.JobName).GetTrigger($"{jobParam.JobName}_trigger1");
-            TSK_JOB entity = ReturnDetail(jobParam.JobName);
-            entity.Remark = jobParam.Remark;
-            entity.JobType = typeof(TJob).Name;
-            entity.JobName = jobParam.JobName;
-            entity.TriggersWithGhost = new List<TSK_TRIG> { JsonConvert.DeserializeObject<TSK_TRIG>(JsonConvert.SerializeObject(trigger)) };
-            entity.Triggers[0].Args = jobParam.Period.ToString();
-            apiAction = SaveJob(entity);
-            apiAction.Data = entity;
-            return apiAction;
-        }
-
-        /// <summary>
-        /// 鏍规嵁浣滀笟鍚嶇О娣诲姞浣滀笟
-        /// </summary>
-        /// <typeparam name="TJob"></typeparam>
-        /// <param name="jobname"></param>
-        /// <param name="triggerBuilders"></param>
-        public ApiAction AddJob<TJob>(string jobname, params Sundial.TriggerBuilder[] triggerBuilders) where TJob : class, Sundial.IJob
-        {
-            ApiAction apiAction = new();
-            triggerBuilders[0].LoadFrom(new
-            {
-                TriggerId = jobname + "_trigger1",
-            });
-            _schedulerFactory.AddJob<TJob>(jobname, triggerBuilders);
-            var trigger = GetJob(jobname).GetTrigger($"{jobname}_trigger1");
-            TSK_JOB entity = ReturnDetail(jobname);
-            entity.TriggersWithGhost = new List<TSK_TRIG> { JsonConvert.DeserializeObject<TSK_TRIG>(JsonConvert.SerializeObject(trigger)) };
-            apiAction = SaveJob(entity);
-            apiAction.Data = entity;
-            return apiAction;
-        }
-
-        /// <summary>
-        /// 鏇存柊浣滀笟
-        /// </summary>
-        /// <param name="job"></param>
-        /// <returns></returns>
-        public ApiAction UpdateJob(TSK_JOB job)
-        {
-            ApiAction apiAction = new ApiAction();
-            Sundial.IScheduler scheduler = GetJob(job.JobName);
-            var trigger = scheduler.GetTrigger($"{job.JobName}_trigger1");
-            if (trigger.Status == Sundial.TriggerStatus.Running)
-            {
-                apiAction.IsSuccessed = false;
-                apiAction.Message = $"浣滀笟[{job.JobName}]姝e湪杩愯涓嶈兘缂栬緫";
-            }
-            var triggerEntity = Biz.Db.Queryable<TSK_TRIG>().Where(x => x.JobId == job.ID).First();
-            if (triggerEntity != null)
-            {
-                triggerEntity.Status = (int)trigger.Status;
-                triggerEntity.Args = job.uPeriod.ToString();
-            }
-            var db = Business.Biz.Db;
-            //淇濆瓨鍒版暟鎹簱
-            var dbTran = db.UseTran(() =>
-            {
-                if (job != null)
-                {
-                    db.Updateable(job, "system").ExecuteCommand();
-                }
-                if (triggerEntity != null)
-                {
-                    db.Updateable(triggerEntity, "system").ExecuteCommand();
-                }
-            });
-            if (!dbTran.IsSuccess)
-            {
-                apiAction.GetResponse().CatchExceptionWithLog(dbTran.ErrorException, $"浣滀笟淇濆瓨鍒版暟鎹簱寮傚父");
-            }
-            //鏇存柊瑙﹀彂鍣ㄥ懆鏈�
-            scheduler.UpdateTrigger($"{job.JobName}_trigger1", triggerBuilder =>
-            {
-                triggerBuilder.SetArgs(job.uPeriod * 60 * 1000);
-            }); ;
-            return apiAction;
-        }
-
-        private TSK_JOB ReturnDetail(string jobname)
-        {
-            var jobDetail = GetJob(jobname).GetJobDetail();
-            return JsonConvert.DeserializeObject<TSK_JOB>(JsonConvert.SerializeObject(jobDetail));
-        }
-
-        /// <summary>
-        /// 鍚姩鎵�鏈変綔涓�
-        /// </summary>
-        public void StartAllJob()
-        {
-            _schedulerFactory.StartAll();
-        }
-
-        /// <summary>
-        /// 鍚姩鍗曚釜浣滀笟
-        /// </summary>
-        /// <param name="jobname"></param>
-        public void StartJob(string jobname)
-        {
-            // 甯﹁繑鍥炲��
-            Sundial.IScheduler scheduler;
-            var scheduleResult = _schedulerFactory.TryRunJob(jobname, out scheduler);
-        }
-
-        /// <summary>
-        /// 鑾峰彇鍗曚釜浣滀笟
-        /// </summary>
-        /// <param name="jobname"></param>
-        /// <returns></returns>
-        public Sundial.IScheduler GetJob(string jobname)
-        {
-            Sundial.IScheduler scheduler;
-            var scheduleResult = _schedulerFactory.TryGetJob(jobname, out scheduler);
-            return scheduler;
-        }
-
-        /// <summary>
-        /// 鑾峰彇鎵�鏈変綔涓�
-        /// </summary>
-        /// <returns></returns>
-        public List<Sundial.IScheduler> GetJobs()
-        {
-            return _schedulerFactory.GetJobs().ToList();
-        }
-
-        /// <summary>
-        /// 鏆傚仠浣滀笟
-        /// </summary>
-        /// <param name="jobname"></param>
-        public void PauseJob(string jobname)
-        {
-            var scheduler = GetJob(jobname);
-            if (scheduler != null)
-            {
-                scheduler.Pause();
-            }
-        }
-        /// <summary>
-        /// 鍒犻櫎浣滀笟
-        /// </summary>
-        /// <param name="jobname"></param>
-        public void RemoveJob(string jobname)
-        {
-            var scheduler = GetJob(jobname);
-            if (scheduler != null)
-            {
-                scheduler.Remove();
-            }
-        }
-
-        /// <summary>
-        /// 浠庢暟鎹簱鍔犺浇浣滀笟
-        /// </summary>
-        public void AddJobFromDB()
-        {
-            try
-            {
-                var jobs = Biz.Db.Queryable<TSK_JOB>().IncludesAllFirstLayer().ToList();
-                foreach (var job in jobs)
-                {
-                    Type type = Type.GetType($"{job.AssemblyName}.{job.JobType},{job.AssemblyName}", throwOnError: true);
-                    _schedulerFactory.AddJob(type, job.JobName, Sundial.Triggers.Period(Convert.ToInt32(job.Triggers?[0].Args ?? "3") * 60 * 1000));
-                    if (job.Triggers[0]?.Status == 3)
-                    {
-                        Work.DoAsync(() =>
-                        {
-                            Thread.Sleep(2000);
-                            PauseJob(job.JobName);
-                        });
-                    }
-                }
-            }
-            catch (System.Exception ex)
-            {
-                Logger.Console.Fatal(ex, "Add Job From DB Exception");
-            }
-        }
-
-        /// <summary>
-        /// 浣滀笟淇濆瓨鍒版暟鎹簱
-        /// </summary>
-        /// <param name="entity"></param>
-        private ApiAction SaveJob(TSK_JOB entity)
-        {
-            var action = new ApiAction();
-            entity.ID = Guid.NewGuid().ToString("N");
-            entity.Triggers[0].JobId = entity.ID;
-            if (Biz.Db.Queryable<TSK_JOB>().Where(x => x.JobName == entity.JobName && x.JobType == entity.JobType && x.AssemblyName == entity.AssemblyName).Any())
-            {
-                action.IsSuccessed = false;
-                action.Message = $"浣滀笟宸茬粡瀛樺湪锛屼笉鑳戒繚瀛樻暟鎹�";
-                return action;
-            }
-            var db = Business.Biz.Db;
-            //淇濆瓨鍒版暟鎹簱
-            var dbTran = db.UseTran(() =>
-            {
-                if (entity != null)
-                {
-                    db.Insertable(entity, "system").ExecuteCommand();
-                }
-                if (entity.Triggers.Any())
-                {
-                    db.Insertable(entity.Triggers, "system").ExecuteCommand();
-                }
-            });
-            if (!dbTran.IsSuccess)
-            {
-                action.GetResponse().CatchExceptionWithLog(dbTran.ErrorException, $"浣滀笟淇濆瓨鍒版暟鎹簱寮傚父");
-            }
-            return action;
-        }
-        #endregion
-
-        #region 鏂扮増鏈鍒掕皟搴� FluentScheduler
-        /// <summary>
-        /// 鍒濆鍖栬鍒掕皟搴�
-        /// </summary>
-        public void JobInitialize()
-        {
-            JobManager.Initialize(AddJobsFromDB());
-            JobManager.JobException += info => Logger.Scheduler.Error("An error just happened with a scheduled job: " + info.Exception);
-            JobManager.JobStart += info => Logger.Scheduler.Info($"{info.Name}: started\r\n");
-            JobManager.JobEnd += info => Logger.Scheduler.Info($"{info.Name}: ended ({info.Duration})\r\n");
-            SaveRunningStatus(); //淇濆瓨鐘舵��
-        }
-
-        private void SaveRunningStatus()
-        {
-            List<TSK_TRIG> listTrig = new List<TSK_TRIG>();
-            foreach (var schedule in JobManager.RunningSchedules)
-            {
-                var job = Biz.Db.Queryable<TSK_JOB>().Where(q => q.JobName == schedule.Name).First();
-                if (job != null)
-                {
-                    TSK_TRIG trig = new TSK_TRIG();
-                    trig = Biz.Db.Queryable<TSK_TRIG>().Where(q => q.JobId == job.ID).First();
-                    trig.Status = TSK_TRIG.Statuss.Running.GetValue();
-                    trig.StartTime = DateTime.Now;
-                    trig.NextRunTime = schedule.NextRun;
-                    listTrig.Add(trig);
-                }
-            }
-            var db = Biz.Db;
-            //淇濆瓨鍒版暟鎹簱
-            var dbTran = db.UseTran(() =>
-            {
-                if (listTrig.Count > 0)
-                {
-                    db.Updateable(listTrig, "system").UpdateColumns(q => new { q.Status, q.UPDATE_USER, q.UPDATE_TIME }).ExecuteCommand();
-                }
-            });
-            if (!dbTran.IsSuccess)
-            {
-                Logger.Scheduler.Trace(dbTran.ErrorException, $"浣滀笟淇濆瓨鍒版暟鎹簱寮傚父");
-            }
-        }
-
-        /// <summary>
-        /// 娣诲姞宸ヤ綔浠诲姟
-        /// </summary>
-        /// <typeparam name="TJob"></typeparam>
-        /// <param name="newEntity"></param>
-        /// <param name="jobParam"></param>
-        /// <returns></returns>
-        public ApiAction AddTskJob<TJob>(TJob newEntity, FluentJobParam jobParam) where TJob : class, ITJob
-        {
-            ApiAction apiAction = new();
-            try
-            {
-                if (!JobManager.AllSchedules.Any(q => q.Name == jobParam.JobName))
-                {
-                    JobManager.AddJob<TJob>((s) => GenerateSchedule(jobParam.Args, s.WithName(jobParam.JobName)));
-                    string guid = Guid.NewGuid().ToString("N");
-                    if (Biz.Db.Queryable<TSK_JOB>().Any(x => 
-                    (x.JobName != jobParam.JobName && x.JobType == jobParam.DataType) || 
-                    (x.JobName == jobParam.JobName && x.JobType != jobParam.DataType)))
-                    {
-                        apiAction.IsSuccessed = false;
-                        apiAction.LocaleMsg = new($"鐩稿悓鐨勭被鍚嶄笉鑳芥湁涓嶅悓鐨勪换鍔″悕鎴栬�呯浉鍚岀殑浠诲姟鍚嶄笉鑳芥湁涓嶅悓鐨勭被鍚�");
-                        return apiAction;
-                    }
-                    TSK_JOB job = Biz.Db.Queryable<TSK_JOB>().Where(x => x.JobName == jobParam.JobName && x.JobType == jobParam.DataType).First() ?? new()
-                    {
-                        ID = guid,
-                    };
-                    job.Remark = jobParam.Remark;
-                    job.JobType = jobParam.DataType;
-                    job.AssemblyName = jobParam.AssemblyName;
-                    job.JobName = jobParam.JobName;
-                    var trigger = Biz.Db.Queryable<TSK_TRIG>().Where(x => x.JobId == job.ID).First() ?? new TSK_TRIG()
-                    {
-                        JobId = guid,
-                        StartTime = DateTime.Now,
-                        NumberOfRuns = 1,
-                    };
-                    trigger.Args = JsonConvert.SerializeObject(jobParam.Args);
-                    trigger.Status = TSK_TRIG.Statuss.Running.GetValue();
-                    var db = Biz.Db;
-                    //淇濆瓨鍒版暟鎹簱
-                    var dbTran = db.UseTran(() =>
-                    {
-                        var y = db.Storageable(job)
-                           .WhereColumns(t => new { t.JobName,t.JobType, t.GHOST_ROW })
-                           .ToStorage();
-                        y.AsInsertable.ExecuteCommand();
-                        y.AsUpdateable.IgnoreColumns(x => x.ID).ExecuteCommand();
-
-                        var z = db.Storageable(trigger)
-                           .WhereColumns(t => new { t.JobId, t.GHOST_ROW })
-                           .ToStorage();
-                        z.AsInsertable.ExecuteCommand();
-                        z.AsUpdateable.IgnoreColumns(x => x.ID).ExecuteCommand();
-                    });
-                    if (!dbTran.IsSuccess)
-                    {
-                        apiAction.CatchExceptionWithLog(dbTran.ErrorException, $"娣诲姞宸ヤ綔浠诲姟鏃朵繚瀛樺埌鏁版嵁搴撳紓甯�");
-                    }
-                }
-
-            }
-            catch (System.Exception ex)
-            {
-                apiAction.CatchExceptionWithLog(ex);
-            }
-            if (!apiAction.IsSuccessed) { JobManager.RemoveJob(jobParam.JobName); }
-            return apiAction;
-        }
-
-        /// <summary>
-        /// 鍒犻櫎浣滀笟
-        /// </summary>
-        /// <param name="jobname"></param>
-        public void RemovefJob(string jobname)
-        {
-            if (JobManager.AllSchedules.Any(q => q.Name == jobname))
-            {
-                string guid = Guid.NewGuid().ToString("N");
-                TSK_JOB job = Biz.Db.Queryable<TSK_JOB>().Where(x => x.JobName == jobname).First();
-                var trigger = Biz.Db.Queryable<TSK_TRIG>().Where(x => x.JobId == job.ID).First();
-                trigger.Status = TSK_TRIG.Statuss.Stop.GetValue();
-                var db = Biz.Db;
-                //淇濆瓨鍒版暟鎹簱
-                var dbTran = db.UseTran(() =>
-                {
-                    db.Updateable(trigger, "system_job").UpdateColumns(q=>new { q.Status,q.UPDATE_TIME,q.UPDATE_USER}).ExecuteCommand();
-                });
-                if (!dbTran.IsSuccess)
-                {
-                    Logger.Scheduler.Fatal(dbTran.ErrorException, $"娣诲姞宸ヤ綔浠诲姟鏃朵繚瀛樺埌鏁版嵁搴撳紓甯�");
-                }
-            }
-            JobManager.RemoveJob(jobname);
-        }
-
-        /// <summary>
-        /// 浠庢暟鎹簱鎵归噺娣诲姞浠诲姟
-        /// </summary>
-        public Registry AddJobsFromDB()
-        {
-            // 澹版槑涓�涓猂egistry绫�
-            var registry = new Registry();
-            try
-            {
-                var jobs = Biz.Db.Queryable<TSK_JOB>().IncludesAllFirstLayer().ToList();
-                foreach (var job in jobs)
-                {
-                    Type type = Type.GetType($"{job.AssemblyName}.{job.JobType},{job.AssemblyName}", throwOnError: true);
-                    dynamic _type = Activator.CreateInstance(type);
-                    TrigArgs args = JsonConvert.DeserializeObject<TrigArgs>(job.Triggers[0].Args);
-                    Schedule schedule = Schedule(_type, job.JobName, registry);
-                    //鐢熸垚璁″垝
-                    GenerateSchedule(args, schedule);
-                }
-            }
-            catch (System.Exception ex)
-            {
-                Logger.Console.Fatal(ex, "Add Job From DB Exception");
-            }
-            return registry;
-        }
-
-        /// <summary>
-        /// 鏍规嵁瀹炰綋鍚嶆敞鍐岃鍒�
-        /// </summary>
-        /// <typeparam name="TJob"></typeparam>
-        /// <param name="entity"></param>
-        /// <param name="JobName"></param>
-        /// <param name="registry"></param>
-        /// <returns></returns>
-        private Schedule Schedule<TJob>(TJob entity, string JobName, Registry registry) where TJob : class, ITJob
-        {
-            return registry.Schedule<TJob>().WithName(JobName);
-        }
-
-        /// <summary>
-        /// 鐢熸垚璁″垝
-        /// </summary>
-        /// <param name="args"></param>
-        /// <param name="schedule"></param>
-        private void GenerateSchedule(TrigArgs args, Schedule schedule)
-        {
-            SpecificTimeUnit specificTimeUnit = null;
-            TimeUnit timeUnit = null;
-            if (args.NonReentrant == "Y") { schedule = schedule.NonReentrant(); } //灏辨槸鏄惁璺熶箣鍓嶇殑杩樻病杩愯瀹岀殑璁″垝鍚屾椂杩愯銆�
-            switch (args.runType)
-            {
-                case RunType.ToRunNow:
-                    specificTimeUnit = schedule.ToRunNow(); //椹笂杩愯
-                    break;
-                case RunType.ToRunOnceAt:
-                    specificTimeUnit = schedule.ToRunOnceAt(args.ToRunOnceAtDt.AddMinutes(args.NowAddMinutes)); //杩愯涓�娆″湪鍝釜鏃堕棿,
-                    break;
-                case RunType.ToRunOnceIn:
-                    timeUnit = schedule.ToRunOnceIn(args.ToRunOnceIn); //鍦ㄥ灏戝悗杩愯涓�娆�
-                    break;
-                case RunType.ToRunEvery:
-                    timeUnit = schedule.ToRunEvery(args.ToRunEvery); //姣忛殧澶氬皯杩愯涓�鍥�
-                    break;
-            }
-            if (specificTimeUnit != null) { timeUnit = specificTimeUnit.AndEvery(args.ToRunEvery); } //姣忛殧澶氬皯杩愯涓�鍥烇紝鍔犲湪ToRunNow銆乀oRunOnceAt鍚庨潰
-            //鎸夋椂闂寸被鍨嬫潵杩愯
-            switch (args.Type)
-            {
-                case TrigArgs.EveryType.Milliseconds:
-                    timeUnit.Milliseconds();
-                    break;
-                case TrigArgs.EveryType.Seconds:
-                    timeUnit.Seconds(); //琛ㄧず鎸夌锛屽灏戠瑕佺湅鍓嶉潰Every鐨勬暟锛屾瘮濡傦細ToRunEvery(5).Seconds() 杩欎釜灏辫〃绀� 闅�5绉掕繍琛屼竴娆�
-                    break;
-                case TrigArgs.EveryType.Minutes:
-                    timeUnit.Minutes();
-                    break;
-                case TrigArgs.EveryType.Hours:
-                    if (args.Minutes > 0)
-                    {
-                        timeUnit.Hours().At(args.Minutes); //琛ㄧず鎸夋瘡灏忔椂鐨勫垎閽燂紝澶氬皯鍒嗚鐪嬪墠闈very鐨勬暟锛屾瘮濡傦細ToRunEvery(1).Hours().At(5) 杩欎釜灏辫〃绀� 闅�1灏忔椂鐨勭5鍒嗛挓杩愯涓�娆�
-                    }
-                    else
-                    {
-                        timeUnit.Hours();
-                    }
-                    break;
-                case TrigArgs.EveryType.Days:
-                    if (args.Hours > 0)
-                    {
-                        timeUnit.Days().At(args.Hours, args.Minutes); //琛ㄧず鎸夊ぉ锛屽灏戝ぉ瑕佺湅鍓嶉潰Every鐨勬暟锛屾瘮濡傦細ToRunEvery(2).Days().At(14, 15) 杩欎釜灏辫〃绀� 闅�2澶╃殑14:15杩愯涓�娆�
-                    }
-                    else
-                    {
-                        timeUnit.Days();
-                    }
-                    break;
-                case TrigArgs.EveryType.Weeks:
-                    if (args.Hours > 0)
-                    {
-                        timeUnit.Weeks().At(args.Hours, args.Minutes); //琛ㄧず鎸夊懆锛屽灏戝懆瑕佺湅鍓嶉潰Every鐨勬暟锛屾瘮濡傦細ToRunEvery(1).Weeks().At(14, 15) 杩欎釜灏辫〃绀� 闅�1鍛ㄧ殑14:15杩愯涓�娆�
-                    }
-                    else
-                    {
-                        timeUnit.Weeks();
-                    }
-                    break;
-                case TrigArgs.EveryType.Weekdays:
-                    if (args.Hours > 0)
-                    {
-                        timeUnit.Weekdays().At(args.Hours, args.Minutes);
-                    }
-                    else
-                    {
-                        timeUnit.Weekdays();
-                    }
-                    break;
-                case TrigArgs.EveryType.Months:
-                    if (args.Days > 0 && args.Hours > 0)
-                    {
-                        timeUnit.Months().On(args.Days).At(args.Hours, args.Minutes);
-                    }
-                    else
-                    {
-                        timeUnit.Months();
-                    }
-                    break;
-            }
-        }
-
-        /// <summary>
-        /// 绔嬪嵆杩愯
-        /// </summary>
-        /// <param name="jobname"></param>
-        public ApiAction ImmediateRun<TJob>(TJob newEntity, string jobname) where TJob : class, ITJob
-        {
-            ApiAction apiAction = new();
-            try
-            {
-                if (JobManager.AllSchedules.Any(q => q.Name == jobname))
-                {
-                    JobManager.RemoveJob(jobname);
-                    string guid = Guid.NewGuid().ToString("N");
-                    TSK_JOB job = Biz.Db.Queryable<TSK_JOB>().Where(x => x.JobName == jobname).IncludesAllFirstLayer().First();
-                    var trigger = job.Triggers[0];
-                    TrigArgs args = JsonConvert.DeserializeObject<TrigArgs>(job.Triggers[0].Args);
-                    args.runType = RunType.ToRunNow;
-                    JobManager.AddJob<TJob>((s) => GenerateSchedule(args, s.WithName(jobname)));
-                    trigger.Status = TSK_TRIG.Statuss.Running.GetValue();
-                    trigger.Args = JsonConvert.SerializeObject(args);
-
-                    var db = Biz.Db;
-                    //淇濆瓨鍒版暟鎹簱
-                    var dbTran = db.UseTran(() =>
-                    {
-                        db.Updateable(trigger, "system_ImmediateRun_job").UpdateColumns(q => new { q.Status, q.Args, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand();
-                    });
-                    if (!dbTran.IsSuccess)
-                    {
-                        Logger.Scheduler.Fatal(dbTran.ErrorException, $"绔嬪嵆杩愯宸ヤ綔浠诲姟鏃朵繚瀛樼姸鎬佸埌鏁版嵁搴撳紓甯�");
-                    }
-                    apiAction.LocaleMsg = new($"绔嬪嵆杩愯宸ヤ綔浠诲姟鎴愬姛");
-                }
-            }
-            catch (System.Exception ex)
-            {
-                apiAction.CatchExceptionWithLog(ex);
-            }
-            return apiAction;
-        }
-
-        /// <summary>
-        /// 鍋滄鏈嶅姟
-        /// </summary>
-        public void Stop()
-        {
-            JobManager.Stop();
-        }
-
-        /// <summary>
-        /// 鍦ㄤ换鍔″畬鎴愬悗绛夊緟鎴栬�呭仠姝�
-        /// </summary>
-        public void StopAndBlock()
-        {
-            JobManager.StopAndBlock();
-        }
-
-        #endregion
-    }
-}
diff --git a/Tiger.Business/Services/Base/TestService.cs b/Tiger.Business/Services/Base/TestService.cs
deleted file mode 100644
index fbb020c..0000000
--- a/Tiger.Business/Services/Base/TestService.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Tiger.IBusiness;
-
-namespace Tiger.Business
-{
-    public class TestService : ITest
-    {
-        private string Msg = "鏈祴鍊�";
-        public string show()
-        {
-            return Msg;
-        }
-        public void set(string msg)
-        {
-            Msg = msg;
-        }
-    }
-}
diff --git a/Tiger.Business/Services/Base/Test_Z.cs b/Tiger.Business/Services/Base/Test_Z.cs
deleted file mode 100644
index 9a46303..0000000
--- a/Tiger.Business/Services/Base/Test_Z.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Tiger.IBusiness;
-
-namespace Tiger.Business
-{
-    public class Test_Z : ITest_Z
-    {
-        public void ZTest()
-        {
-            var aa = "123";
-        }
-    }
-}
diff --git a/Tiger.Business/Services/Base/TigerJobBase.cs b/Tiger.Business/Services/Base/TigerJobBase.cs
deleted file mode 100644
index 26c6bc2..0000000
--- a/Tiger.Business/Services/Base/TigerJobBase.cs
+++ /dev/null
@@ -1,208 +0,0 @@
-锘縰sing FluentScheduler;
-using Newtonsoft.Json;
-using Rhea.Common;
-using Sundial;
-using System;
-using Tiger.IBusiness;
-using Tiger.Model;
-using Tiger.Model.Entitys.MES.Position;
-
-namespace Tiger.Business
-{
-    /// <summary>
-    /// 浣滀笟鍩虹被
-    /// </summary>
-    public class TigerJobBase
-    {
-        public Schedule Schedule;
-        public TSK_JOB Job = new TSK_JOB();
-        public TSK_TRIG Trig = new TSK_TRIG();
-        public TrigArgs Args = new TrigArgs();
-        /// <summary>
-        /// 寮�濮嬫椂闂�
-        /// </summary>
-        public DateTime StartTime { get; set; }
-        /// <summary>
-        /// 淇濆瓨鏃ュ織
-        /// </summary>
-        public ApiAction SaveLog(JobExecutingContext context, string remark)
-        {
-            ApiAction action = new ApiAction();
-            Type type = Type.GetType(context.JobDetail.JobType, throwOnError: true);
-            var job = Biz.Db.Queryable<TSK_JOB>().Where(x => x.JobName == context.JobId && x.JobType == type.Name).First();
-            var logentity = new TSK_LOG
-            {
-                JobId = job.ID,
-                TriggerType = context.JobDetail.JobType,
-                AssemblyName = context.JobDetail.AssemblyName,
-                Args = context.Trigger.Args,
-                Operation = context.Trigger.Status.ToString(),
-                Status = "Successed",
-                StartTime = StartTime,
-                EndTime = context.Trigger.EndTime,
-                ElapsedTime = context.Trigger.ElapsedTime,
-                Remark = remark
-            };
-
-            var db = Business.Biz.Db;
-            //淇濆瓨鍒版暟鎹簱
-            var dbTran = db.UseTran(() =>
-            {
-                db.Insertable(logentity).ExecuteCommand();
-            });
-            if (!dbTran.IsSuccess)
-            {
-                action.GetResponse().CatchExceptionWithLog(dbTran.ErrorException, $"浣滀笟淇濆瓨鍒版暟鎹簱寮傚父");
-            }
-            return action;
-        }
-
-        /// <summary>
-        /// 淇濆瓨鏃ュ織
-        /// </summary>
-        /// <param name="JobName"></param>
-        /// <param name="remark"></param>
-        /// <returns></returns>
-        public ApiAction SaveFluentSchedulerLog(string status, string remark)
-        {
-            ApiAction action = new ApiAction();
-            if (Trig != null)
-            {
-                Trig.ElapsedTime = (long)Math.Ceiling((DateTime.Now - StartTime).TotalMilliseconds);
-                Trig.StartTime = StartTime;
-                Trig.EndTime = DateTime.Now;
-            }
-            else
-            {
-                action.IsSuccessed = false;
-                action.LocaleMsg = new($"宸ヤ綔浠诲姟涓嶅瓨鍦�");
-                Logger.Scheduler.Error("宸ヤ綔浠诲姟涓嶅瓨鍦╘r\n");
-                return action;
-            }
-            var logentity = new TSK_LOG
-            {
-                JobId = Job.ID,
-                AssemblyName = Job.AssemblyName,
-                Args = Trig.Args,
-                //Operation = job.Triggers?[0].Status.ToString(),
-                Status = status, //job.Triggers?[0].Status.ToString(),
-                StartTime = Trig.StartTime,
-                EndTime = Trig.EndTime,
-                ElapsedTime = Trig.ElapsedTime,
-                Remark = remark
-            };
-
-            var db = Business.Biz.Db;
-            //淇濆瓨鍒版暟鎹簱
-            var dbTran = db.UseTran(() =>
-            {
-                db.Updateable(Trig, "System_Job").UpdateColumns(q => new { q.StartTime, q.LastRunTime, q.ElapsedTime, q.UpdatedTime, q.UPDATE_USER }).ExecuteCommand();
-                db.Insertable(logentity).ExecuteCommand();
-            });
-            if (!dbTran.IsSuccess)
-            {
-                action.GetResponse().CatchExceptionWithLog(dbTran.ErrorException, $"浣滀笟鏃ュ織淇濆瓨鍒版暟鎹簱寮傚父");
-            }
-            Logger.Scheduler.Info($"璁″垝璋冨害(鍚嶇О:{Job.JobName})浣滀笟鏃ュ織淇濆瓨鍒版暟鎹簱瀹屾垚\r\n");
-            return action;
-        }
-
-        /// <summary>
-        /// 鑾峰彇浠诲姟
-        /// </summary>
-        public void GetJob(string jobType)
-        {
-            Job = Biz.Db.Queryable<TSK_JOB>().Where(q => q.JobType == jobType).IncludesAllFirstLayer().First();
-            Args = JsonConvert.DeserializeObject<TrigArgs>(Job.Triggers[0].Args);
-            Trig = Job.Triggers[0];
-        }
-
-        /// <summary>
-        /// 鍒ゆ柇鏃堕棿锛岃繑鍥炴槸鍚﹀彲浠ョ户缁伐浣滀换鍔�
-        /// </summary>
-        /// <returns></returns>
-        public TskJobInput CheckHowToDo()
-        {
-            TskJobInput tskJobInput = new TskJobInput();
-            var dateTime = DateTime.Now;
-
-            //鎸夋椂闂寸被鍨嬫潵杩愯
-            switch (Args.Type)
-            {
-                case TrigArgs.EveryType.Milliseconds:
-                    dateTime = Trig.LastRunTime ?? DateTime.Now.AddMilliseconds(-Args.ToRunEvery);
-                    tskJobInput.result = Args.Interval > 0 ? true : (DateTime.Now - dateTime).TotalMilliseconds > Args.ToRunEvery;
-                    tskJobInput.input = new()
-                    {
-                        startTime = Args.Interval > 0 ? ((DateTime)Trig.LastRunTime).AddHours(-Args.Interval).ToString("yyyy-MM-dd HH:mm:ss") : dateTime.ToString("yyyy-MM-dd HH:mm:ss"),
-                        endTime = Args.ByInterval == "Y"? dateTime.ToString("yyyy-MM-dd HH:mm:ss") : dateTime.AddMilliseconds(Args.ToRunEvery).ToString("yyyy-MM-dd HH:mm:ss"),
-                    };
-                    break;
-                case TrigArgs.EveryType.Seconds:
-                    dateTime = Trig.LastRunTime ?? DateTime.Now.AddSeconds(-Args.ToRunEvery);
-                    tskJobInput.result = Args.Interval > 0 ? true : (DateTime.Now - dateTime).TotalSeconds > Args.ToRunEvery;
-                    tskJobInput.input = new()
-                    {
-                        startTime = Args.Interval > 0 ? ((DateTime)Trig.LastRunTime).AddHours(-Args.Interval).ToString("yyyy-MM-dd HH:mm:ss") : dateTime.ToString("yyyy-MM-dd HH:mm:ss"),
-                        endTime = Args.ByInterval == "Y" ? dateTime.ToString("yyyy-MM-dd HH:mm:ss") : dateTime.AddSeconds(Args.ToRunEvery).ToString("yyyy-MM-dd HH:mm:ss"),
-                    };
-                    break;
-                case TrigArgs.EveryType.Minutes:
-                    dateTime = Trig.LastRunTime ?? DateTime.Now.AddMinutes(-Args.ToRunEvery);
-                    tskJobInput.result = Args.Interval > 0 ? true : (DateTime.Now - dateTime).TotalMinutes > Args.ToRunEvery;
-                    tskJobInput.input = new()
-                    {
-                        startTime = Args.Interval > 0 ? ((DateTime)Trig.LastRunTime).AddHours(-Args.Interval).ToString("yyyy-MM-dd HH:mm:ss") : dateTime.ToString("yyyy-MM-dd HH:mm:ss"),
-                        endTime = Args.ByInterval == "Y" ? dateTime.ToString("yyyy-MM-dd HH:mm:ss") : dateTime.AddMinutes(Args.ToRunEvery).ToString("yyyy-MM-dd HH:mm:ss"),
-                    };
-                    break;
-                case TrigArgs.EveryType.Hours:
-                    dateTime = Trig.LastRunTime ?? DateTime.Now.AddHours(-Args.ToRunEvery);
-                    tskJobInput.result = Args.Interval > 0 ? true : (DateTime.Now - dateTime).TotalHours > Args.ToRunEvery;
-                    tskJobInput.input = new()
-                    {
-                        startTime = Args.Interval > 0 ? ((DateTime)Trig.LastRunTime).AddHours(-Args.Interval).ToString("yyyy-MM-dd HH:mm:ss") : dateTime.ToString("yyyy-MM-dd HH:mm:ss"),
-                        endTime = Args.ByInterval == "Y" ? dateTime.ToString("yyyy-MM-dd HH:mm:ss") : dateTime.AddHours(Args.ToRunEvery).ToString("yyyy-MM-dd HH:mm:ss"),
-                    };
-                    break;
-                case TrigArgs.EveryType.Days:
-                    dateTime = Trig.LastRunTime ?? DateTime.Now.AddDays(-Args.ToRunEvery);
-                    tskJobInput.result = Args.Interval > 0 ? true : (DateTime.Now - dateTime).TotalDays > Args.ToRunEvery;
-                    tskJobInput.input = new()
-                    {
-                        startTime = Args.Interval > 0 ? ((DateTime)Trig.LastRunTime).AddHours(-Args.Interval).ToString("yyyy-MM-dd HH:mm:ss") : dateTime.ToString("yyyy-MM-dd HH:mm:ss"),
-                        endTime = Args.ByInterval == "Y" ? dateTime.ToString("yyyy-MM-dd HH:mm:ss") : dateTime.AddDays(Args.ToRunEvery).ToString("yyyy-MM-dd HH:mm:ss"),
-                    };
-                    break;
-                case TrigArgs.EveryType.Weeks:
-                    dateTime = Trig.LastRunTime ?? DateTime.Now.AddDays(-7);
-                    tskJobInput.result = Args.Interval > 0 ? true : (DateTime.Now - dateTime).TotalDays > Args.ToRunEvery * 7;
-                    tskJobInput.input = new()
-                    {
-                        startTime = Args.Interval > 0 ? ((DateTime)Trig.LastRunTime).AddHours(-Args.Interval).ToString("yyyy-MM-dd HH:mm:ss") : dateTime.ToString("yyyy-MM-dd HH:mm:ss"),
-                        endTime = Args.ByInterval == "Y" ? dateTime.ToString("yyyy-MM-dd HH:mm:ss") : dateTime.AddDays(Args.ToRunEvery).ToString("yyyy-MM-dd HH:mm:ss"),
-                    };
-                    break;
-                case TrigArgs.EveryType.Weekdays:
-                    dateTime = Trig.LastRunTime ?? DateTime.Now.AddDays(-Args.ToRunEvery);
-                    tskJobInput.result = Args.Interval > 0 ? true : (DateTime.Now - dateTime).TotalDays > Args.ToRunEvery;
-                    tskJobInput.input = new()
-                    {
-                        startTime = Args.Interval > 0 ? ((DateTime)Trig.LastRunTime).AddHours(-Args.Interval).ToString("yyyy-MM-dd HH:mm:ss") : dateTime.ToString("yyyy-MM-dd HH:mm:ss"),
-                        endTime = Args.ByInterval == "Y" ? dateTime.ToString("yyyy-MM-dd HH:mm:ss") : dateTime.AddDays(Args.ToRunEvery).ToString("yyyy-MM-dd HH:mm:ss"),
-                    };
-                    break;
-                case TrigArgs.EveryType.Months:
-                    dateTime = Trig.LastRunTime ?? DateTime.Now.AddMonths(-Args.ToRunEvery);
-                    tskJobInput.result = Args.Interval > 0 ? true : (DateTime.Now - dateTime).TotalDays > Args.ToRunEvery * DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);
-                    tskJobInput.input = new()
-                    {
-                        startTime = Args.Interval > 0 ? ((DateTime)Trig.LastRunTime).AddHours(-Args.Interval).ToString("yyyy-MM-dd HH:mm:ss") : dateTime.ToString("yyyy-MM-dd HH:mm:ss"),
-                        endTime = Args.ByInterval == "Y" ? dateTime.ToString("yyyy-MM-dd HH:mm:ss") : dateTime.AddMonths(Args.ToRunEvery).ToString("yyyy-MM-dd HH:mm:ss"),
-                    };
-                    break;
-            }
-            return tskJobInput;
-        }
-    }
-}
diff --git a/Tiger.Business/Services/ServicesBus.cs b/Tiger.Business/Services/ServicesBus.cs
deleted file mode 100644
index db5d5b0..0000000
--- a/Tiger.Business/Services/ServicesBus.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-锘縰sing Microsoft.Extensions.DependencyInjection;
-using Rhea.Common;
-using Sundial;
-using Autofac;
-using System;
-using System.ComponentModel;
-using Tiger.IBusiness;
-using Tiger.Model;
-
-namespace Tiger.Business
-{
-    /// <summary>
-    /// 鏈嶅姟鎬绘帶
-    /// </summary>
-    public class ServicesBus : IServicesBus
-    {
-
-        #region Functions
-        public void StartServices(ISchedulerFactory schedulerFactory)
-        {
-            if (ApiConfig.RunInterface)
-            {
-                BizContext.InterfaceService = DI.Resolve<IInterfaceService>();
-                //BizContext.InterfaceService.SetSchedulerFactory(schedulerFactory);
-                ////鍚姩鏃朵粠鏈嶅姟鍣ㄥ姞杞芥墍鏈変綔涓�
-                //BizContext.InterfaceService.AddJobFromDB();
-
-                //鏂扮増鏈鍒掕皟璇曞垵濮嬪寲
-                BizContext.InterfaceService.JobInitialize();
-
-                ConsoleExt.WriteLine("Start Interface Service..........", ConsoleColor.Yellow);
-            }
-        }
-
-        public void StopServices()
-        {
-            ////鍏抽棴瀹㈡埛绔洃鎺�
-            //if (ApiConfig.RunMesInterface)
-            //{
-            //    MesInterfaceService.Stop();
-            //    ConsoleExt.WriteLine("Stop MES Interface Service..........", ConsoleColor.Yellow);
-            //}
-            //if (ApiConfig.RunSrmInterface)
-            //{
-            //    SrmInterfaceService.Stop();
-            //    ConsoleExt.WriteLine("Stop SRM Interface Service..........", ConsoleColor.Yellow);
-            //}
-        }
-        #endregion
-    }
-}
diff --git a/Tiger.Business/Tiger.Business.csproj b/Tiger.Business/Tiger.Business.csproj
deleted file mode 100644
index c4dd6f9..0000000
--- a/Tiger.Business/Tiger.Business.csproj
+++ /dev/null
@@ -1,157 +0,0 @@
-锘�<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup Label="Globals">
-    <SccProjectName></SccProjectName>
-    <SccProvider></SccProvider>
-    <SccAuxPath></SccAuxPath>
-    <SccLocalPath></SccLocalPath>
-    <Platforms>AnyCPU;x86</Platforms>
-  </PropertyGroup>
-
-  <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
-    <Version>1.0.3.1106</Version>
-    <AssemblyVersion>1.0.3.1106</AssemblyVersion>
-    <Authors>TigerClouds Team</Authors>
-    <Company>娣卞湷甯傞挍鏍间簯绉戞妧鏈夐檺鍏徃 (SZ TigerClouds Technology Co.,Ltd.)</Company>
-    <Copyright>Copyright 漏 2020-2025 SZ TigerClouds Technology Co.,Ltd.. All rights reserved.</Copyright>
-    <Description>Tiger Business Class Library Base on .Net 5</Description>
-  </PropertyGroup>
-
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
-    <DocumentationFile>D:\Projects\TigerClouds\TigerApi\Api\Tiger.Business\Tiger.Business.xml</DocumentationFile>
-  </PropertyGroup>
-
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'">
-    <DocumentationFile>D:\Projects\TigerClouds\TigerApi\Api\Tiger.Business\Tiger.Business.xml</DocumentationFile>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <Compile Remove="BAS\**" />
-    <Compile Remove="EMS\**" />
-    <Compile Remove="Language\Automate\**" />
-    <Compile Remove="Language\Common\**" />
-    <Compile Remove="Language\EMS\**" />
-    <Compile Remove="Language\MES\**" />
-    <Compile Remove="Language\Monitors\**" />
-    <Compile Remove="Language\QMS\**" />
-    <Compile Remove="Language\TSK\**" />
-    <Compile Remove="QMS\**" />
-    <Compile Remove="RTest\**" />
-    <EmbeddedResource Remove="BAS\**" />
-    <EmbeddedResource Remove="EMS\**" />
-    <EmbeddedResource Remove="Language\Automate\**" />
-    <EmbeddedResource Remove="Language\Common\**" />
-    <EmbeddedResource Remove="Language\EMS\**" />
-    <EmbeddedResource Remove="Language\MES\**" />
-    <EmbeddedResource Remove="Language\Monitors\**" />
-    <EmbeddedResource Remove="Language\QMS\**" />
-    <EmbeddedResource Remove="Language\TSK\**" />
-    <EmbeddedResource Remove="QMS\**" />
-    <EmbeddedResource Remove="RTest\**" />
-    <None Remove="BAS\**" />
-    <None Remove="EMS\**" />
-    <None Remove="Language\Automate\**" />
-    <None Remove="Language\Common\**" />
-    <None Remove="Language\EMS\**" />
-    <None Remove="Language\MES\**" />
-    <None Remove="Language\Monitors\**" />
-    <None Remove="Language\QMS\**" />
-    <None Remove="Language\TSK\**" />
-    <None Remove="QMS\**" />
-    <None Remove="RTest\**" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <Compile Remove="BaseService.cs" />
-    <Compile Remove="Common\ApiConfig.cs" />
-    <Compile Remove="DbBaseR.cs" />
-    <Compile Remove="DbCache\DbCacheBus.cs" />
-    <Compile Remove="DbClientR.cs" />
-    <Compile Remove="MES\Biz.WorkAction.cs" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <None Remove="Language\BAS\CodeRule.json" />
-    <None Remove="Language\SYS\Login.json" />
-    <None Remove="Language\SYS\Menu.json" />
-    <None Remove="Language\WMS\Common.json" />
-    <None Remove="Language\WMS\Count.json" />
-    <None Remove="Language\WMS\CustSupChk.json" />
-    <None Remove="Language\WMS\InProductionReturn.json" />
-    <None Remove="Language\WMS\InReceipt.json" />
-    <None Remove="Language\WMS\Inspection.json" />
-    <None Remove="Language\WMS\Material.json" />
-    <None Remove="Language\WMS\Materialreq.json" />
-    <None Remove="Language\WMS\Otheroutorder.json" />
-    <None Remove="Language\WMS\ProdMReq.json" />
-    <None Remove="Language\WMS\Salebackorder.json" />
-    <None Remove="Language\WMS\Saleoutorder.json" />
-    <None Remove="Language\WMS\Transfer.json" />
-    <None Remove="Language\WMS\WareHouse.json" />
-    <None Remove="Language\WMS\WmsCount.json" />
-    <None Remove="Language\WMS\WmsItem.json" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <EmbeddedResource Include="Language\BAS\CodeRule.json" />
-    <EmbeddedResource Include="Language\component.json" />
-    <EmbeddedResource Include="Language\layout.json" />
-    <EmbeddedResource Include="Language\routes\dashboard.json" />
-    <EmbeddedResource Include="Language\routes\demo.json" />
-    <EmbeddedResource Include="Language\sys.json" />
-    <EmbeddedResource Include="Language\SYS\Login.json" />
-    <EmbeddedResource Include="Language\SYS\Menu.json" />
-    <EmbeddedResource Include="Language\WMS\InProductionReturn.json">
-      <CopyToOutputDirectory>Never</CopyToOutputDirectory>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Language\WMS\WmsCount.json">
-      <CopyToOutputDirectory>Never</CopyToOutputDirectory>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Language\WMS\ProdMReq.json">
-      <CopyToOutputDirectory>Never</CopyToOutputDirectory>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Language\WMS\InReceipt.json">
-      <CopyToOutputDirectory>Never</CopyToOutputDirectory>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Language\WMS\CustSupChk.json">
-      <CopyToOutputDirectory>Never</CopyToOutputDirectory>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Language\WMS\Saleoutorder.json" />
-    <EmbeddedResource Include="Language\WMS\Otheroutorder.json" />
-    <EmbeddedResource Include="Language\WMS\Salebackorder.json" />
-    <EmbeddedResource Include="Language\WMS\Material.json" />
-    <EmbeddedResource Include="Language\WMS\WmsItem.json" />
-    <EmbeddedResource Include="Language\WMS\Materialreq.json" />
-    <EmbeddedResource Include="Language\WMS\Transfer.json" />
-    <EmbeddedResource Include="Language\WMS\Inspection.json" />
-    <EmbeddedResource Include="Language\WMS\Count.json" />
-    <EmbeddedResource Include="Language\WMS\WareHouse.json" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\Tiger.IBusiness\Tiger.IBusiness.csproj" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <Folder Include="RTest\" />
-    <Folder Include="WMS\" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <EmbeddedResource Include="Language\routes\basic.json">
-      <CopyToOutputDirectory>Never</CopyToOutputDirectory>
-    </EmbeddedResource>
-  </ItemGroup>
-
-  <ItemGroup>
-    <EmbeddedResource Include="Language\common.json" />
-  </ItemGroup>
-
-  <ProjectExtensions><VisualStudio><UserProperties /></VisualStudio></ProjectExtensions>
-
-  <Target Name="PostBuild" AfterTargets="PostBuildEvent">
-    <Exec Command="xcopy /r/y/i $(ProjectDir)$(OutDir)$(AssemblyName).dll $(SolutionDir)Tiger.Api\$(OutDir)&#xD;&#xA;xcopy /r/y/i $(ProjectDir)$(OutDir)$(AssemblyName).pdb $(SolutionDir)Tiger.Api\$(OutDir)" />
-  </Target>
-
-</Project>
diff --git a/Tiger.Business/Tiger.Business.xml b/Tiger.Business/Tiger.Business.xml
deleted file mode 100644
index 90c51a5..0000000
--- a/Tiger.Business/Tiger.Business.xml
+++ /dev/null
@@ -1,1871 +0,0 @@
-<?xml version="1.0"?>
-<doc>
-    <assembly>
-        <name>Tiger.Business</name>
-    </assembly>
-    <members>
-        <member name="T:Tiger.Business.Auto.AutoContext">
-            <summary>
-            鑷姩鍖栦笂涓嬫枃
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.Auto.AutoContext.CurrentProject">
-            <summary>
-            褰撳墠椤圭洰
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetSNInfo(System.String)">
-            <summary>
-            閫氳繃杞藉叿ID杩斿洖SNInfo
-            </summary>
-            <param name="vechicle_id"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.BindingVechicleAndSN(System.String,System.String)">
-            <summary>
-            缁戝畾杞藉叿ID锛屽苟淇濆瓨SNData
-            </summary>
-            <param name="entityStr"></param>
-            <param name="vechicle_id"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.UpdateVechicleAndSN(System.String)">
-            <summary>
-            鏇存柊杞藉叿ID缁戝畾鐨勬潯鐮侊紝骞朵繚瀛楽NData
-            </summary>
-            <param name="entityStr"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.ScheduledDeletion">
-            <summary>
-            璁″垝鍒犻櫎SN鏁版嵁
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.CheckApi">
-            <summary>
-            妫�鏌ユ槸鍚﹁繛鎺PI
-            </summary>
-            <returns></returns>
-        </member>
-        <!-- Badly formed XML comment ignored for member "M:Tiger.Business.Biz.GetSnByVechicle(System.String)" -->
-        <member name="M:Tiger.Business.Biz.UpdateVechicleSn(System.String,System.String)">
-            <summary>
-            鏇存柊WIP_SN涓璖N鐨勮浇鍏风紪鍙凤紝閲嶆柊缁戝畾杞藉叿
-            </summary>
-            <param name="snList"></param>
-            <param name="vechicleSn"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.UpdateEntity(System.String,System.String)">
-            <summary>
-            鏇存柊瀹炰綋
-            </summary>
-            <param name="EntityStr"></param>
-            <param name="vechicleSn"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.DeleteVechicleSn(System.String)">
-            <summary>
-            鍒犻櫎杞藉叿鍏崇郴
-            </summary>
-            <param name="vechicleSn"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.WIP_SN_DeleteOldData(System.Int32)">
-            <summary>
-            鍒犻櫎浼犲叆鎸囧畾澶╂暟鍓嶆棫鏁版嵁
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.WIP_SN_BackupOldData(System.Int32)">
-            <summary>
-            澶囦唤浼犲叆鎸囧畾澶╂暟鍓嶆棫鏁版嵁
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetBackupWIP_SN(System.String)">
-            <summary>
-            浠庡浠芥暟鎹腑鏌ヨWIP_SN瀹炰綋
-            </summary>
-            <param name="sn"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetSysParam(System.String,System.String)">
-            <summary>
-            鑾峰彇鍙傛暟
-            </summary>
-            <param name="param_code"></param>
-            <param name="prgm_code"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.UpdateSysParam(System.String,System.String,System.String)">
-            <summary>
-            鏇存柊鍙傛暟鍊�
-            </summary>
-            <param name="param_code"></param>
-            <param name="prgm_code"></param>
-            <param name="value"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.UpdateSn(System.String,System.String,System.String,System.String,System.Int32)">
-            <summary>
-            鎹㈡潯鐮佷笓鐢�
-            </summary>
-            <param name="outerSn"></param>
-            <param name="sn"></param>
-            <param name="vechicleSn"></param>
-            <param name="outerVechicle"></param>
-            <param name="seqNo"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.UpdateSnStatus(System.String,System.String)">
-            <summary>
-            鏇存柊WIP_SN涓璖N鐨勪骇鍝佺姸鎬�
-            </summary>
-            <param name="snList">"12345;PASS,23456;FAIL"</param>
-            <param name="vechicleSn"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.UpdateInnerOuterSn(System.String,System.String,System.String,System.String)">
-            <summary>
-            鏇存柊鏉$爜鐨勫唴澶栫爜
-            </summary>
-            <param name="sn"></param>
-            <param name="vechicleSn"></param>
-            <param name="innerSn"></param>
-            <param name="outerSn"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.SaveSn(System.String)">
-            <summary>
-            淇濆瓨鏉$爜
-            </summary>
-            <param name="WipSn"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.DeleteSnResult(System.String,System.String)">
-            <summary>
-            鍒犻櫎娴嬭瘯缁撴灉
-            </summary>
-            <param name="sn"></param>
-            <param name="currOpers"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.SaveLiteonEntity``1(``0)">
-            <summary>
-            淇濆瓨鍏夊疂瀹炰綋
-            </summary>
-            <param name="entity"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.UpdateLiteonEntity``1(Rhea.Common.UpdateAble{``0})">
-            <summary>
-            淇濆瓨鍏夊疂瀹炰綋
-            </summary>
-            <param name="entity"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.SaveSnResult(System.String)">
-            <summary>
-            淇濆瓨鏉$爜娴嬭瘯缁撴灉
-            </summary>
-            <param name="WipSnResultList"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.SaveToLiteonReportDbByDate(System.Collections.Generic.List{Tiger.Model.WIP_SNResult})">
-            <summary>
-            淇濆瓨鏉$爜娴嬭瘯缁撴灉鍒版姤琛ㄦ暟鎹簱
-            </summary>
-            <param name="data"></param>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetLiteonLogsTree">
-            <summary>
-            鑾峰彇Liteon鎶ヨ〃鏍�
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetLiteonLogsTreeItem(System.IO.DirectoryInfo)">
-            <summary>
-            鑾峰彇Liteon鎶ヨ〃鏍�
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.getDeptTreeList(System.String,System.String)">
-            <summary>
-            鑾峰彇鎵�鏈夐儴闂ㄥ垪琛�
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetDeptItem(System.Collections.Generic.List{Tiger.Model.SYS_DEPT},System.String,Tiger.Business.DeptItem@)">
-            <summary>
-            閫掑綊杩斿洖閮ㄩ棬
-            </summary>
-            <param name="data"></param>
-            <param name="parent"></param>
-            <param name="pDeptItem"></param>
-        </member>
-        <member name="M:Tiger.Business.Biz.AddFACTORYAsync(Tiger.Model.FACTORY,System.Boolean)">
-            <summary>
-            娣诲姞璁板綍
-            </summary>
-            <param name="parm"></param>
-            <param name="Async"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetLoginInfo(System.String,System.Boolean)">
-            <summary>
-            鑾峰彇鐧诲綍淇℃伅
-            </summary>
-            <param name="user"></param>
-            <param name="Async"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.AddLOGININFOAsync(Tiger.Model.LOGININFO,System.Boolean)">
-            <summary>
-            娣诲姞璁板綍
-            </summary>
-            <param name="parm"></param>
-            <param name="Async"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.getMenuList(System.String)">
-            <summary>
-            鑾峰彇鑿滃崟鍒楄〃
-            </summary>
-            <param name="userid"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.getMenuListAll(System.String,System.String)">
-            <summary>
-            鑾峰彇鎵�鏈夎彍鍗曞垪琛�
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.SaveMenu(Rhea.Common.ApiAction{Tiger.Model.SaveMenuParams},System.Boolean)">
-            <summary>
-            淇濆瓨鑿滃崟
-            </summary>
-            <param name="action"></param>
-            <param name="Async"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetMenuItem(System.Collections.Generic.List{Tiger.Model.SYS_FUNC},System.String,Tiger.Model.MenuItem@)">
-            <summary>
-            閫掑綊杩斿洖鑿滃崟
-            </summary>
-            <param name="data"></param>
-            <param name="parent"></param>
-            <param name="pMenuItem"></param>
-        </member>
-        <member name="M:Tiger.Business.Biz.SaveRole(Rhea.Common.ApiAction{Tiger.Model.SaveRoleParams})">
-            <summary>
-            淇濆瓨瑙掕壊
-            </summary>
-            <param name="action"></param>
-            <param name="Async"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.SetSysUserAsync(System.String,System.String,System.String)">
-            <summary>
-            淇濆瓨鐢ㄦ埛缁勪腑鐨勭敤鎴峰垪琛�
-            </summary>
-            <param name="parm"></param>
-            <param name="Async"></param>
-            <returns></returns>
-        </member>
-        <member name="P:Tiger.Business.Biz.DataSource">
-            <summary>
-            鏁版嵁婧�
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.Biz.Db">
-            <summary>
-            涓绘暟鎹簱瀹㈡埛绔�
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.Biz.Base">
-            <summary>
-            涓绘暟鎹簱鍩虹鏂规硶
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetCBASLINEList(System.String,System.String)">
-            <summary>
-            鑾峰彇宸ュ巶鍚嶇О鍜岃溅闂村悕绉�
-            </summary>
-            <param name="code"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetCBASPLANTList(System.String,System.String)">
-            <summary>
-            鑾峰彇宸ュ巶浠g爜鍜屽伐鍘傚悕绉�
-            </summary>
-            <param name="code"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetWMS_REQList(System.String)">
-            <summary>
-            鑾峰彇棰嗘枡鍗�
-            </summary>
-            <param name="code"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.DeleteMaterailReq(System.String,System.String)">
-            <summary>
-            鍒犻櫎棰嗘枡鍗曡褰�
-            </summary>
-            <param name="entity"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.MaterailReqTransfer(System.String,System.String,System.String,System.String)">
-            <summary>
-            宸ュ崟鐗╂枡鍙戞枡杞Щ
-            </summary>
-            <param name="Id"></param>
-            <param name="UserId"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.MaterailReqReturn(System.String)">
-            <summary>
-            鏁村崟閫�鏂�
-            </summary>
-            <param name="wo"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.TransferParent(System.String,System.Int32@)">
-            <summary>
-            鏌ヨ杞Щ鍗曞彿,寰�涓婃煡
-            </summary>
-            <param name="no"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.TransferChild(System.String,System.Int32@)">
-            <summary>
-            鏌ヨ杞Щ鍗曞彿,寰�涓嬫煡
-            </summary>
-            <param name="no"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.TransferRoot(System.String,System.String)">
-            <summary>
-            鏌ヨ杞Щ鐩爣鍗曞彿鏄惁涓鸿杞Щ鐨勫伐鍗曠殑鐖惰緢浠ヤ笂宸ュ崟
-            </summary>
-            <param name="no"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.SaveImportBarCodeData(System.String,System.String)">
-            <summary>
-            淇濆瓨瀵煎叆鏉$爜鏁版嵁
-            </summary>
-            <param name="json"></param>
-            <param name="userId"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GenerateCartonNumber(System.String,System.String)">
-            <summary>
-            渚涘簲鍟嗙鏉$爜鐢熸垚
-            </summary>
-            <param name="json"></param>
-            <param name="userId"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.SaveGenerateBarCodeData(System.String,System.String)">
-            <summary>
-            渚涘簲鍟嗘潯鐮佺敓鎴�
-            </summary>
-            <param name="json"></param>
-            <param name="userId"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetOriginalSn(System.String,System.String,System.String,System.Int32)">
-            <summary>
-            寰楀埌鏉$爜澶村墠缂�
-            </summary>
-            <param name="ItemCode"></param>
-            <param name="ProdDate"></param>
-            <param name="SupplierCode"></param>
-            <param name="TmplType"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetSeq(System.String,System.String,System.String,System.Int32)">
-            <summary>
-            鍙栧緱搴忓垪鍙�
-            </summary>
-            <param name="original_sn"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetSeqAddN(System.String,System.String,System.Int32,System.Boolean,System.Int32,System.String)">
-            <summary>
-            寰楀埌搴忓垪鍙�+n鐨勫簭鍒楀彿
-            </summary>
-            <param name="seq"></param>
-            <param name="n"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.ChangeQty(System.String)">
-            <summary>
-            杞崲鏁伴噺
-            </summary>
-            <param name="qty"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetWMS_COUNTList(System.String)">
-            <summary>
-            鑾峰彇鐩樼偣鍗�
-            </summary>
-            <param name="code"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.SaveWMS_COUNT(Tiger.Model.WMS_COUNT)">
-            <summary>
-            淇濆瓨鐩樼偣鍗曟暟鎹�
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.Biz.EditWMS_DELIVERY_TIME(System.String,System.String,System.String)">
-            <summary>
-            淇敼閫佽揣浜ゆ湡
-            </summary>
-            <param name="json"></param>
-            <param name="userId"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.EditMultipleDlvyTime(System.String,System.String,System.String,System.String)">
-            <summary>
-            澶氶�夌紪杈戜繚瀛樺悓涓�浜ゆ湡
-            </summary>
-            <param name="json"></param>
-            <param name="expectDate"></param>
-            <param name="id"></param>
-            <param name="userId"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetInspectionDtlList(Tiger.Model.QueryInspectionEntity)">
-            <summary>
-            鑾峰彇閫佹鍗曟槑缁嗗垪琛�
-            </summary>
-            <param name="INSPECTION_NO"></param>
-            <param name="Item_Code"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetPutawaySetting">
-            <summary>
-            鑾峰彇鍏ュ簱涓婃灦璁剧疆
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetWMS_ITEM_Ext(System.String,System.String)">
-            <summary>
-            鑾峰彇璐х墿鍌ㄥ瓨淇℃伅瀹炰綋鍏宠仈浠撳簱锛屽偍鍖猴紝璐ф灦锛屽偍浣嶏紝鐗╂枡鏄庣粏
-            </summary>
-            <param name="code"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetWMS_ITEM_ExtList(System.Collections.Generic.List{System.String})">
-            <summary>
-            鑾峰彇璐х墿鍌ㄥ瓨淇℃伅瀹炰綋鍏宠仈浠撳簱锛屽偍鍖猴紝璐ф灦锛屽偍浣嶏紝鐗╂枡鏄庣粏
-            </summary>
-            <param name="code"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetWMS_ITEM_DTL_Ext(System.String,System.Boolean,System.String)">
-            <summary>
-            鏍规嵁鐗╂枡鏄庣粏鏉$爜鑾峰彇鐗╂枡淇℃伅锛屽鏋滆В鍖呭垯杩斿洖sn鐨刉MS_ITEM_Ext瀵硅薄锛屽惁鍒欒繑鍥瀞n鐨剅oot鑺傜偣鐨刉MS_ITEM_Ext瀵硅薄
-            </summary>
-            <param name="sn"></param>
-            <param name="doUnPack"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetWMS_ITEM_DTL_Ext(System.String,Tiger.Model.WMS_ITEM@,System.Boolean,System.String)">
-            <summary>
-            鏍规嵁鐗╂枡鏄庣粏鏉$爜鑾峰彇鐗╂枡淇℃伅锛屽鏋滆В鍖呭垯杩斿洖sn鐨刉MS_ITEM_Ext瀵硅薄锛屽惁鍒欒繑鍥瀞n鐨剅oot鑺傜偣鐨刉MS_ITEM_Ext瀵硅薄锛屽苟杩斿洖鏍圭墿鏂欏璞�
-            </summary>
-            <param name="sn"></param>
-            <param name="doUnPack"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetRootItem(Tiger.Model.WMS_ITEM_DTL)">
-            <summary>
-            鑾峰彇鐗╂枡鐨剅oot鐗╂枡
-            </summary>
-            <param name="sn"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetRootItem(System.String)">
-            <summary>
-            鑾峰彇鐗╂枡鐨剅oot鐗╂枡
-            </summary>
-            <param name="sn"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetAllWMS_ITEM_DTLs(System.String)">
-            <summary>
-            鑾峰彇璐х墿鐨勬墍鏈夌墿鏂欐槑缁�
-            </summary>
-            <param name="sn"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.WMS_ITEM_PACKAGING(System.String,System.String,System.String)">
-            <summary>
-            鐗╂枡灞傜骇鍖呰
-            </summary>
-            <param name="cartonsn"></param>
-            <param name="sn"></param>
-            <param name="userId"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetWMS_ITEM_SPLIT_Ext(System.String)">
-            <summary>
-            鑾峰彇璐х墿鍌ㄥ瓨淇℃伅瀹炰綋鍏宠仈渚涘簲鍟嗭紝澶囨枡锛岄鏂欎俊鎭�
-            </summary>
-            <param name="sn"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetWMS_LOCATION_Ext(System.String)">
-            <summary>
-            鑾峰彇鍌ㄤ綅瀹炰綋鍏宠仈浠撳簱锛屽偍鍖猴紝璐ф灦锛岀墿鏂�
-            </summary>
-            <param name="code"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetWMS_LOCATION_ExtList(System.Collections.Generic.List{System.String})">
-            <summary>
-            鑾峰彇鍌ㄤ綅瀹炰綋鍏宠仈浠撳簱锛屽偍鍖猴紝璐ф灦锛岀墿鏂�
-            </summary>
-            <param name="code"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetWMS_LOCATION_ExtList(System.String,System.Collections.Generic.List{System.Int32})">
-            <summary>
-            鑾峰彇鍌ㄤ綅瀹炰綋鍏宠仈浠撳簱锛屽偍鍖猴紝璐ф灦锛岀墿鏂�
-            </summary>
-            <param name="ShelfCode"></param>
-            <param name="itemStatusList"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.RecommendLocation(Tiger.Model.WMS_LOCATION)">
-            <summary>
-            鍦ㄦ櫤鑳借揣鏋朵笂鎸夊偍浣嶅氨杩戝師鍒欒幏鍙栨帹鑽愬偍浣�(鍦ㄦ湰鍌ㄤ綅鐨勫悓涓�渚э紝鑰屼笖鍌ㄤ綅搴忓彿鐨勫樊鍊肩殑缁濆鍊兼渶灏忕殑涓�涓偍浣�)
-            </summary>
-            <param name="location"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.RecommendLocation(System.String)">
-            <summary>
-            鎺ㄨ崘鏅�氬偍浣�(鍏堟帹鑽怟寮�澶寸殑鍌ㄤ綅锛屽鏋滃崱鏉夸笂娌℃湁杩欎釜鏂欏啀鎺ㄨ崘E寮�澶寸殑鍌ㄤ綅)
-            </summary>
-            <param name="itemcode"></param>
-            <returns>鍙繑鍥炲墠5涓粨鏋�</returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.RecommendLocation_QRCode(System.String)">
-            <summary>
-            鍦ㄦ櫤鑳借揣鏋朵笂鎸夋枡鍙锋壘宸茬粡涓婃灦鐨勫悓绫绘枡鍙烽檮浠剁殑绌轰綅鎺ㄨ崘锛屾寜璐ф灦鐨勭紪鍙烽『搴忔煡鎵惧彲鐢ㄧ殑璐ф灦涓婄殑鐗╂枡鐨勫偍浣嶅彿
-            </summary>
-            <param name="itemcode"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.RecommendLocation_Last(System.String)">
-            <summary>
-            鎺ㄨ崘璇ョ墿鏂欐渶鍚庡瓨鍌ㄧ殑鏅�氬偍浣�(浼樺厛鎺ㄨ崘E寮�澶寸殑鍌ㄤ綅锛屼究浜庣墿鏂欏憳鎵惧埌鎵嬪啓搴撳瓨鍗�)
-            </summary>
-            <param name="itemcode"></param>
-            <returns>鍙繑鍥炲墠5涓粨鏋�</returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetPreparationList(System.String,System.Collections.Generic.List{System.Int32},System.Collections.Generic.List{System.Int32})">
-            <summary>
-            鑾峰彇澶囨枡鍗�
-            </summary>
-            <param name="code"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetPrepViewList(System.String,System.Collections.Generic.List{System.Int32},System.Collections.Generic.List{System.Int32},System.String)">
-            <summary>
-            鑾峰彇澶囨枡鍗曡鍥�
-            </summary>
-            <param name="code"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetProdLineList(System.String,System.String)">
-            <summary>
-            鑾峰彇浜х嚎
-            </summary>
-            <param name="code"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.DlvyRepalceItem(Tiger.Model.WMS_REQ_DLVY_Ext,System.String,System.String)">
-            <summary>
-            棰嗘枡鍗曠墿鏂欏彂鏂欐浛鎹笅鏋讹紝鍙鏂欏彿鐩稿悓鍒欒涓虹敤浜庡彲浠ユ浛鎹㈠師鏈垎閰嶇殑鐗╂枡涓嬫灦
-            </summary>
-            <param name="reqDlvy"></param>
-            <param name="replaceSN"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.DlvyRepalceItem(Tiger.Model.WMS_PREP_DD_Ext,System.String,System.String)">
-            <summary>
-            澶囨枡鍗曠墿鏂欏彂鏂欐浛鎹笅鏋讹紝濡傛灉鏂欏彿锛屾暟閲忎竴鑷村垯璁や负鐢ㄤ簬鍙互鏇挎崲鍘熸湰鍒嗛厤鐨勭墿鏂欎笅鏋�
-            </summary>
-            <param name="prepDlvy"></param>
-            <param name="replaceSN"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetShelfList(System.Collections.Generic.List{System.String},System.Collections.Generic.List{System.Int32})">
-            <summary>
-            鑾峰彇璐ф灦
-            </summary>
-            <param name="code"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.SetShelfWebHook(System.String,System.String,System.Boolean)">
-            <summary>
-            璁剧疆鏂欒溅涓婃姤WebHook
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.Biz.UnboundShelfCar(System.String,System.Boolean)">
-            <summary>
-            瑙g粦鏂欒溅
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.Biz.ValidateDTLImport(System.String,System.String[])">
-            <summary>
-            閫佽揣鏄庣粏瀵煎叆
-            </summary>
-            <param name="json"></param>
-            <param name="parms"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.AddWMS_SUPP_DELIVERY_DTL(System.String,System.String)">
-            <summary>
-            鏂板閫佽揣鍗曟槑缁�
-            </summary>
-            <param name="json"></param>
-            <param name="userId"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.GetWMS_WAREHOUSE(System.String)">
-            <summary>
-            鑾峰彇鍒楄〃
-            </summary>
-            <param name="code"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.AddWMS_WAREHOUSEAsync(Tiger.Model.WMS_WAREHOUSE,System.Boolean)">
-            <summary>
-            娣诲姞璁板綍
-            </summary>
-            <param name="parm"></param>
-            <param name="Async"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.AddWMS_WAREHOUSEListAsync(System.Collections.Generic.List{Tiger.Model.WMS_WAREHOUSE},System.Boolean)">
-            <summary>
-            鎵归噺娣诲姞
-            </summary>
-            <param name="parm"></param>
-            <param name="Async"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.UpdateWMS_WAREHOUSEAsync(Tiger.Model.WMS_WAREHOUSE,System.Boolean)">
-            <summary>
-            淇敼涓�鏉℃暟鎹�
-            </summary>
-            <param name="parm">T</param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.Biz.DeleteWMS_WAREHOUSEAsync(System.String,System.Boolean)">
-            <summary>
-            鍒犻櫎涓�鏉℃垨澶氭潯鏁版嵁
-            </summary>
-            <param name="parm">string</param>
-            <returns></returns>
-        </member>
-        <!-- Badly formed XML comment ignored for member "M:Tiger.Business.Biz.DeleteWMS_WAREHOUSEAsync(System.Linq.Expressions.Expression{System.Func{Tiger.Model.WMS_WAREHOUSE,System.Boolean}},System.Boolean)" -->
-        <member name="T:Tiger.Business.DeptItem">
-            <summary>
-            閮ㄩ棬鏍戝舰鍒楄〃
-            </summary>
-        </member>
-        <member name="T:Tiger.Business.BizContext">
-            <summary>
-            涓婁笅鏂�
-            </summary>
-        </member>
-        <member name="F:Tiger.Business.BizContext.MachineCode">
-            <summary>
-            鏈嶅姟鍣ㄦ満鍣ㄧ爜
-            </summary>
-        </member>
-        <member name="F:Tiger.Business.BizContext.TigerActive">
-            <summary>
-            Tiger 椤圭洰婵�娲诲疄浣�
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.ApiConfig.AllowUrl">
-            <summary>
-            閾炬帴鐧藉悕鍗曪紙鍙笉鍋氳韩浠介獙璇侊級
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.ApiConfig.FilePath">
-            <summary>
-            鏂囦欢璺緞
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.ApiConfig.UpgradePath">
-            <summary>
-            鏇存柊璺緞
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.ApiConfig.IsOpenCache">
-            <summary>
-            鏄惁浣跨敤Redis
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.ApiConfig.RedisConnectionString">
-            <summary>
-            Redis榛樿杩炴帴涓�
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.ApiConfig.HttpCurrent">
-            <summary>
-            缁熶竴璇锋眰椤甸潰瀹炰綋
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.ApiConfig.Transaction_TimeoutHours">
-            <summary>
-            浜嬪姟瓒呮椂灏忔椂鏁�
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.ApiConfig.Client_TimeoutMinutes">
-            <summary>
-            浜嬪姟瓒呮椂鍒嗛挓鏁�
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.ApiConfig.IsTestVersion">
-            <summary>
-            鏄惁娴嬭瘯鐗堟湰
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.ApiConfig.IsDevVersion">
-            <summary>
-            鏄惁寮�鍙戠増鏈�
-            </summary>
-        </member>
-        <member name="T:Tiger.Business.ApiSearcher`1">
-            <summary>
-            Api 鎼滅储鍣�
-            </summary>
-        </member>
-        <member name="T:Tiger.Business.Logger">
-            <summary>
-            鏃ュ織妯″潡
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.Logger.Default">
-            <summary>
-            璁板綍绯荤粺鏃ュ織
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.Logger.Http">
-            <summary>
-            璁板綍Http璁块棶鏃ュ織
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.Logger.Console">
-            <summary>
-            璁板綍绯荤粺鏃ュ織骞舵姏鍑哄埌鎺у埗鍙�
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.Logger.NoCaller">
-            <summary>
-            璁板綍鏃ュ織锛屼笉璁板綍璋冪敤鑰�
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.UpgradeFileSystem.UpgradeRootPath">
-            <summary>
-            绋嬪簭鏇存柊鏍圭洰褰�
-            </summary>
-        </member>
-        <member name="T:Tiger.Business.DataSource">
-            <summary>
-            鏁版嵁婧�
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.DataSource.#ctor(Microsoft.Extensions.Configuration.IConfiguration)">
-            <summary>
-            鏁版嵁婧�
-            </summary>
-            <param name="config"></param>
-        </member>
-        <member name="M:Tiger.Business.DataSource.CreateInstance(Microsoft.Extensions.Configuration.IConfiguration)">
-            <summary>
-            鍒涘缓鏁版嵁婧愬崟渚�
-            </summary>
-            <param name="_configuration"></param>
-            <returns></returns>
-        </member>
-        <member name="F:Tiger.Business.DataSource.Databases">
-            <summary>
-            鏁版嵁搴撳垪琛�
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.DataSource.Item(System.String)">
-            <summary>
-            鎸夋暟鎹簱鍚嶇О鑾峰彇鏁版嵁搴撳疄渚�
-            </summary>
-            <param name="name"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.DataSource.Exists(System.String)">
-            <summary>
-            鏄惁瀛樺湪浼犲叆鍚嶇О鐨勬暟鎹簱瀹炰緥
-            </summary>
-            <param name="name"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.DataSource.Add(Tiger.Business.Database)">
-            <summary>
-            娣诲姞鏁版嵁搴撳埌鏁版嵁婧愶紝濡傛灉宸插瓨鍦ㄧ浉鍚屽悕绉扮殑鏁版嵁搴撳垯鏇挎崲
-            </summary>
-            <param name="database"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.DataSource.Remove(System.String)">
-            <summary>
-            鎸夋暟鎹簱鍚嶇О浠庢暟鎹簮绉婚櫎鏁版嵁搴�
-            </summary>
-            <param name="name"></param>
-            <returns></returns>
-        </member>
-        <member name="T:Tiger.Business.Database">
-            <summary>
-            鏁版嵁搴�
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.Database.Name">
-            <summary>
-            鏁版嵁鍚嶇О
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.Database.Type">
-            <summary>
-            鏁版嵁搴撶被鍨�
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.Database.ConnectionString">
-            <summary>
-            杩炴帴瀛楃涓�
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.Database.Client">
-            <summary>
-            鏁版嵁搴撳鎴风
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.Database.Base">
-            <summary>
-            鏁版嵁搴撳熀纭�鏂规硶
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.Database.CreateContext">
-            <summary>
-            鍒涘缓鏁版嵁搴撲笂涓嬫枃
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="T:Tiger.Business.DbContext">
-            <summary>
-            鏁版嵁搴撲笂涓嬫枃
-            </summary>
-        </member>
-        <member name="F:Tiger.Business.DbContext.Db">
-            <summary>
-            鏁版嵁搴撳鎴风
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.DbContext.#ctor(System.String,SqlSugar.DbType)">
-            <summary>
-            鏋勯�犲嚱鏁�
-            </summary>
-            <param name="connStr">鏁版嵁搴撹繛鎺ュ瓧绗︿覆</param>
-            <param name="dbType">鏁版嵁搴撶被鍨�</param>
-        </member>
-        <member name="M:Tiger.Business.DbContext.InitDataBase(System.String,SqlSugar.DbType)">
-            <summary>
-            鍒濆鍖栨暟鎹簱杩炴帴
-            </summary>
-            <param name="connStr">鏁版嵁搴撹繛鎺ュ瓧绗︿覆</param>
-            <param name="dbType">鏁版嵁搴撶被鍨�</param>
-        </member>
-        <member name="T:Tiger.Business.TigerActive">
-            <summary>
-            Tiger 椤圭洰婵�娲荤被锛屽寘鎷互涓嬫枃浠讹細
-            <br/>"椤圭洰鍚�.cer"(Certification)锛氬寘鍚湁鍏挜鐨勬暟瀛楄瘉涔︼紝浠ml鏍煎紡瀛樺偍
-            <br/>"椤圭洰鍚�.act"(ActivationCode)锛氬寘鍚湁婵�娲荤爜瀛楃鐨勬枃妗�
-             <br/>"椤圭洰鍚�.req"(RequestCode)锛氬寘鍚湁璇锋眰鐮佸瓧绗︾殑鏂囨。
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.TigerActive.Active(System.String)">
-            <summary>
-            浣跨敤婵�娲荤爜婵�娲荤▼搴�
-            </summary>
-            <param name="activationCode">婵�娲荤爜</param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.TigerActive.Verify">
-            <summary>
-            楠岃瘉褰撳墠绋嬪簭鏄惁宸叉縺娲�
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.TigerActive.GetCertification">
-            <summary>
-            鍦ㄦ敞鍐岃〃HKEY_LOCAL_MACHINE\SOFTWARE\TigerClouds鑺傜偣涓鍙栧瘑閽ヨ瘉涔�
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.TigerActive.SetCertification(System.String)">
-            <summary>
-            鍦ㄦ敞鍐岃〃HKEY_LOCAL_MACHINE\SOFTWARE\TigerClouds鑺傜偣涓啓鍏ュ瘑閽ヨ瘉涔�
-            </summary>
-            <param name="key">鍏挜</param>
-        </member>
-        <member name="M:Tiger.Business.TigerActive.GetActivationCode">
-            <summary>
-            鍦ㄦ敞鍐岃〃HKEY_LOCAL_MACHINE\SOFTWARE\TigerClouds鑺傜偣涓鍙栨縺娲荤爜
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.TigerActive.SetActivationCode(System.String)">
-            <summary>
-            鍦ㄦ敞鍐岃〃HKEY_LOCAL_MACHINE\SOFTWARE\TigerClouds鑺傜偣涓啓鍏ユ縺娲荤爜
-            </summary>
-            <param name="code">婵�娲荤爜</param>
-        </member>
-        <member name="M:Tiger.Business.TigerActive.GetCurLicense">
-            <summary>
-            鑾峰彇褰撳墠璁稿彲淇℃伅
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="T:Tiger.Business.ClientMonitor">
-            <summary>
-            Client鐩戞帶绾跨▼
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.ClientMonitor.Heartbeat(Rhea.Common.Client,System.String)">
-            <summary>
-            瀹㈡埛绔績璺充笂閫�
-            </summary>
-            <param name="client"></param>
-            <param name="clientIP"></param>
-            <returns></returns>
-        </member>
-        <member name="T:Tiger.Business.DbMonitor">
-            <summary>
-            DB鐩戞帶绾跨▼
-            </summary>
-        </member>
-        <member name="T:Tiger.Business.MonitorBus">
-            <summary>
-            鐩戞帶鎬绘帶
-            </summary>
-        </member>
-        <member name="T:Tiger.Business.WMSTransactionMonitor">
-            <summary>
-            浜嬪姟鐩戞帶绾跨▼
-            </summary>
-        </member>
-        <member name="T:Tiger.Business.WMS.Seastone.RackApi">
-            <summary>
-            鏅鸿兘鏂欐灦鏁版嵁鎺ュ彛
-            </summary>
-        </member>
-        <member name="T:Tiger.Business.WMS.Seastone.RackApi.APIStatus">
-            <summary>
-            鑾峰彇褰撳墠绯荤粺淇℃伅涓庤繍琛岀姸鎬�
-            </summary>
-        </member>
-        <member name="T:Tiger.Business.WMS.Seastone.RackApi.QRCodeRack">
-            <summary>
-            浜岀淮鐮佹枡鏋�
-            </summary>
-        </member>
-        <member name="T:Tiger.Business.WMS.Seastone.RackApi.QRCodeRack.SetAllSlotLightStatus">
-            <summary>
-            璁剧疆鍏ㄩ儴鍌ㄤ綅鐏姸鎬�
-            </summary>
-        </member>
-        <member name="T:Tiger.Business.WMS.Seastone.RackApi.QRCodeRack.SetIndicatorStatus">
-            <summary>
-            璁剧疆璀︾ず鐏姸鎬�
-            </summary>
-        </member>
-        <member name="T:Tiger.Business.WMS.Seastone.RackApi.QRCodeRack.SetSlotLightStatusList">
-            <summary>
-            鎵归噺璁剧疆鍌ㄤ綅鐏姸鎬�
-            </summary>
-        </member>
-        <member name="T:Tiger.Business.WMS.Seastone.RackApi.QRCodeRack.SetSlotLightStatus">
-            <summary>
-            璁剧疆鍌ㄤ綅鐏姸鎬�
-            </summary>
-        </member>
-        <member name="T:Tiger.Business.WMS.Seastone.RackApi.QRCodeRack.TurnOffAllSlotLightStatus">
-            <summary>
-            鍏抽棴鎵�鏈夊偍浣嶇伅
-            </summary>
-        </member>
-        <member name="T:Tiger.Business.WMS.Seastone.RackApi.QRCodeRack.TurnOffIndicatorStatus">
-            <summary>
-            鍏抽棴鍏ㄩ儴璀︾ず鐏�
-            </summary>
-        </member>
-        <member name="T:Tiger.Business.WMS.Seastone.RackApi.SmartRack">
-            <summary>
-            鎰熷簲寮忔櫤鑳芥枡鏋�
-            </summary>
-        </member>
-        <member name="T:Tiger.Business.WMS.Seastone.RackApi.SmartRack.SetRackStatus">
-            <summary>
-            鏂欐灦鎺у埗鎺ュ彛
-            </summary>
-        </member>
-        <member name="T:Tiger.Business.WMS.Seastone.RackApi.SmartRack.WebHook">
-            <summary>
-            璁剧疆涓婃姤WebHook
-            </summary>
-        </member>
-        <member name="T:Tiger.Business.WMS.Seastone.RackApi.SmartRack.RackTest">
-            <summary>
-            鏂欐灦娴嬭瘯
-            </summary>
-        </member>
-        <member name="T:Tiger.Business.WMS.Transaction.FirstFeeding">
-            <summary>
-            棣栧涓婃枡浜嬪姟
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.FirstFeeding.BindingShelfCar(System.String,System.String)">
-            <summary>
-            缁戝畾鎿嶄綔鏂欒溅
-            </summary>
-            <param name="shelfCode"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.FirstFeeding.LightShelfs(System.Boolean)">
-            <summary>
-            鏂欒溅鐗╂枡浜伅
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.FirstFeeding.ShelfCarOnChanged(Tiger.Model.SeaStone.Shelf.SlotChanged)">
-            <summary>
-            鏂欒溅澶嶆牳
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.FirstFeeding.ScanItem(System.String)">
-            <summary>
-            鎵弿鐗╂枡骞跺鏍�
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.FirstFeeding.ScanLocation(System.String)">
-            <summary>
-            鎵弿鍌ㄤ綅澶嶆牳
-            </summary>
-        </member>
-        <member name="T:Tiger.Business.WMS.Transaction.HierarchicalPackaging">
-            <summary>
-            灞傜骇鍖呰浜嬪姟
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.WMS.Transaction.HierarchicalPackaging.CurItem">
-            <summary>
-            姝e父鎿嶄綔鎵嶈祴鍊肩殑褰撳墠鎿嶄綔鐗╂枡
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.HierarchicalPackaging.ScanItem(System.String,System.Nullable{System.Int32},System.Nullable{System.Int32})">
-            <summary>
-            鎵弿鐗╂枡鍔犲叆鍖呰绠�
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.HierarchicalPackaging.ScanCartonNumber(System.String,System.Nullable{System.Int32})">
-            <summary>
-            鎵弿鍖呰鏉$爜
-            </summary>
-            <param name="sn"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.Import.ValidateDataImport``1(``0,System.String,System.String[])">
-            <summary>
-            瀵煎叆楠岃瘉
-            </summary>
-            <typeparam name="T"></typeparam>
-            <param name="newEntity"></param>
-            <param name="json"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.Import.SaveImportData``1(``0)">
-            <summary>
-            瀵煎叆淇濆瓨
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="T:Tiger.Business.WMS.Transaction.InventoryCount">
-            <summary>
-            鐩樼偣浜嬪姟
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.InventoryCount.SelectWMS_COUNT(System.String,System.Int32)">
-            <summary>
-            閫夋嫨鐩樼偣鍗�
-            </summary>
-            <param name="countNO"></param>
-            <param name="countMode"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.InventoryCount.SearchItemList(System.String,System.String,System.String)">
-            <summary>
-            鏌ヨ鐩樼偣鐗╂枡鏄庣粏
-            </summary>
-            <param name="code"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.InventoryCount.RefreshItemList">
-            <summary>
-            鍒锋柊鐩樼偣鐗╂枡鏄庣粏
-            </summary>
-            <param name="code"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.InventoryCount.SearchLocationList(System.String,System.String,System.String)">
-            <summary>
-            鏌ヨ鐩樼偣搴撲綅鏄庣粏
-            </summary>
-            <param name="code"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.InventoryCount.RefreshLocationList">
-            <summary>
-            鍒锋柊鐩樼偣搴撲綅鏄庣粏
-            </summary>
-            <param name="code"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.InventoryCount.LightShelfs(System.String,System.String)">
-            <summary>
-            璐ф灦鎸夌収鍙戞枡鏄庣粏鎵�鏈夌墿鏂欎寒鐏�
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.InventoryCount.ScanItem(System.String)">
-            <summary>
-            鎵弿鐗╂枡鐩樼偣
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.InventoryCount.ScanLocation(System.String,System.String,System.Nullable{System.Int32})">
-            <summary>
-            鎵弿搴撲綅鐩樼偣
-            </summary>
-        </member>
-        <member name="T:Tiger.Business.WMS.Transaction.LocationTransfer">
-            <summary>
-            涓�鑸Щ搴撲簨鍔�
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.WMS.Transaction.LocationTransfer.CurItem">
-            <summary>
-            姝e父鎿嶄綔鎵嶈祴鍊肩殑褰撳墠鎿嶄綔鐗╂枡
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.WMS.Transaction.LocationTransfer.TargetLocation">
-            <summary>
-            閿欒鎿嶄綔鎴栬�呮贩鏀炬ā寮忎娇鐢ㄧ殑鐩爣鍌ㄤ綅
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.LocationTransfer.ScanItem(System.String)">
-            <summary>
-            鎵弿鐗╂枡骞跺鏍革紝濡傛灉鐗╂枡宸茬粡瀹屾垚绉诲簱鍒欒揣鏋朵笂浜伅鎻愰啋鍌ㄤ綅
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.LocationTransfer.ScanLocation(System.String)">
-            <summary>
-            鎵弿鐗╂枡澶嶆牳
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.WMS.Transaction.MaterialBatchPrint.CurItem_Ext">
-            <summary>
-            姝e父鎿嶄綔鎵嶈祴鍊肩殑褰撳墠鎿嶄綔鐗╂枡
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialBatchPrint.Save(System.String,System.String,System.String,System.String,System.String,System.Int32)">
-            <summary>
-            鎵归噺鎵撳嵃淇濆瓨
-            </summary>
-            <param name="sn"></param>
-            <param name="qty"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialBatchPrint.GenerateSn(System.String,System.String,System.String,System.String)">
-            <summary>
-            鐢熸垚鏉$爜
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialBatchPrint.GetOriginalSn(System.String,System.String,System.String,System.String)">
-            <summary>
-            寰楀埌鏉$爜澶村墠缂�
-            </summary>
-            <param name="ItemCode"></param>
-            <param name="ProdDate"></param>
-            <param name="SupplierCode"></param>
-            <param name="TmplType"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialBatchPrint.GetSeq(System.String,System.String,System.String,System.String)">
-            <summary>
-            鍙栧緱搴忓垪鍙�
-            </summary>
-            <param name="original_sn"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialBatchPrint.GetSeqAddN(System.String,System.String,System.Int32,System.Boolean,System.String)">
-            <summary>
-            寰楀埌搴忓垪鍙�+n鐨勫簭鍒楀彿
-            </summary>
-            <param name="seq"></param>
-            <param name="n"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialBatchPrint.ChangeQty(System.String)">
-            <summary>
-            杞崲鏁伴噺
-            </summary>
-            <param name="qty"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialBatchPrint.GetProdDate(System.String)">
-            <summary>
-            鏍规嵁浼犲叆鐨�6涓烘棩鏈熺紪鐮佽繑鍥炵敓浜ф棩鏈�
-            </summary>
-            <param name="dateStr"></param>
-            <returns></returns>
-        </member>
-        <member name="P:Tiger.Business.WMS.Transaction.MaterialCutting.CurItem_Ext">
-            <summary>
-            姝e父鎿嶄綔鎵嶈祴鍊肩殑褰撳墠鎿嶄綔鐗╂枡
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialCutting.ScanItem(System.String,System.String,System.String)">
-            <summary>
-            鎵弿鐗╂枡
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialCutting.Save">
-            <summary>
-            鍙戞枡鎴枡淇濆瓨
-            </summary>
-            <param name="sn"></param>
-            <param name="qty"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialCutting.GenerateSn(System.String,System.String,System.String,System.String)">
-            <summary>
-            鐢熸垚鏉$爜
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialCutting.GenerateSeq(System.String,System.String)">
-            <summary>
-            鐢熸垚搴忓垪鍙�
-            </summary>
-            <param name="original_sn"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialCutting.ChangeQty(System.String)">
-            <summary>
-            杞崲鏁伴噺
-            </summary>
-            <param name="qty"></param>
-            <returns></returns>
-        </member>
-        <member name="T:Tiger.Business.WMS.Transaction.MaterialDistribution">
-            <summary>
-            鍙戞枡閰嶉�佷簨鍔�
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialDistribution.SelectProdLine(System.String)">
-            <summary>
-            閫夋嫨澶囨枡鍗�
-            </summary>
-            <param name="prepNo"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialDistribution.BindingFeedingShelfCar(System.String,System.String)">
-            <summary>
-            缁戝畾鎿嶄綔閫佹枡鏂欒溅
-            </summary>
-            <param name="shelfCode"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialDistribution.BindingProdShelfCar(System.String,System.String)">
-            <summary>
-            缁戝畾鎿嶄綔鐢熶骇涓撶敤鏂欒溅
-            </summary>
-            <param name="shelfCode"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialDistribution.FirstDelivery">
-            <summary>
-            鏂欒溅棣栧閰嶉�佹帴鏀�
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialDistribution.LightFeedShelfCar(System.Boolean)">
-            <summary>
-            閫佹枡鏂欒溅鎸夌収鍙戞枡鏄庣粏鎵�鏈夌墿鏂欎寒钃濈伅
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialDistribution.ScanItem(System.String)">
-            <summary>
-            鎵弿鐗╂枡澶嶆牳
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialDistribution.ScanLocation(System.String)">
-            <summary>
-            鎵弿鐗╂枡澶嶆牳
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialDistribution.ShelfCarOnChanged(Tiger.Model.SeaStone.Shelf.SlotChanged)">
-            <summary>
-            鏂欒溅澶嶆牳
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialDistribution.FeedShelfCarOnChanged(Tiger.Model.SeaStone.Shelf.SlotChanged)">
-            <summary>
-            閫佹枡鏂欒溅澶嶆牳
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialDistribution.ProdShelfCarOnChanged(Tiger.Model.SeaStone.Shelf.SlotChanged)">
-            <summary>
-            鐢熶骇涓撶敤鏂欒溅澶嶆牳
-            </summary>
-        </member>
-        <member name="T:Tiger.Business.WMS.Transaction.MaterialPreparation">
-            <summary>
-            鐢熶骇澶囨枡浜嬪姟
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialPreparation.SelectPreparation(System.String)">
-            <summary>
-            閫夋嫨澶囨枡鍗�
-            </summary>
-            <param name="prepNo"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialPreparation.GetPREP_DELIVERY_DTLs">
-            <summary>
-            鑾峰彇澶囨枡鍗曞彂鏂欐槑缁嗕俊鎭�
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialPreparation.BindingShelfCar(System.String,System.String,System.String)">
-            <summary>
-            缁戝畾鎿嶄綔鏂欒溅
-            </summary>
-            <param name="shelfCode"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialPreparation.GetTargetLocation(System.Collections.Generic.List{Tiger.Model.WMS_LOCATION}@,System.Collections.Generic.List{Tiger.Model.WMS_LOCATION}@,Tiger.Model.WMS_PREP_DD_Ext)">
-            <summary>
-            鎸夌墿鏂欒鏍煎垎閰嶅偍浣�
-            </summary>
-            <param name="locationList"></param>
-            <param name="curItem"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialPreparation.GetPrepDtlList(System.String)">
-            <summary>
-            鑾峰彇澶囨枡鍗曞彂鏂欐槑缁�
-            </summary>
-            <param name="code"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialPreparation.GetDlvyDtlList(Tiger.Model.LightShelfsEntity)">
-            <summary>
-            鑾峰彇澶囨枡鍗曞彂鏂欐槑缁�
-            </summary>
-            <param name="code"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialPreparation.LightShelfs(Tiger.Model.LightShelfsEntity)">
-            <summary>
-            璐ф灦鎸夌収鍙戞枡鏄庣粏鎵�鏈夌墿鏂欎寒鐏�
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialPreparation.ScanItem(System.String)">
-            <summary>
-            鎵弿鐗╂枡骞跺鏍革紝濡傛灉鐗╂枡宸茬粡瀹屾垚涓嬫灦鍒欐枡杞︿笂浜伅鎻愰啋鍌ㄤ綅
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialPreparation.ScanLocation(System.String)">
-            <summary>
-            鎵弿鐗╂枡澶嶆牳
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialPreparation.ShelfCarOnChanged(Tiger.Model.SeaStone.Shelf.SlotChanged)">
-            <summary>
-            鏂欒溅澶嶆牳
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialPreparation.PreparationFinish">
-            <summary>
-            澶囨枡瀹屾垚
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialPreparation.GetQtyTips(System.Int32)">
-            <summary>
-            鑾峰彇鏁伴噺鐨勬彁绀轰俊鎭�
-            </summary>
-            <param name="actReqQty"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialPreparation.CheckCanBeFirst(Tiger.Model.WMS_PREP_DD)">
-            <summary>
-            妫�鏌ユ槸鍚﹀彲浠ヨ璁剧疆涓洪濂楃墿鏂欙細绗竴涓笂杞︽垨鑰呯敤棣栫洏妯″紡鎵弿鎵嶆爣璁颁负棣栫洏锛屼笖棣栫洏鐗╂枡涓嶈兘鏄寘瑁呯殑鏉$爜
-            </summary>
-            <param name="dlvyDtl"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialPreparation.CallingMaterial(Tiger.Model.V_XW_SCHED_ORDER,System.Boolean)">
-            <summary>
-            鎸夌収璋冨害鍗曞彨鏂�
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialPreparation.CancelCalling(System.String)">
-            <summary>
-            璋冨害鍗曞彇娑堝鏂欙紝骞堕噴鏀炬病鏈夊彂鐢熶骇鐨勬墍鏈夌墿鏂�
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialPreparation.ReleaseMaterial(System.String)">
-            <summary>
-            閲婃斁澶囨枡鍗曞湪鐗╂枡姹犲拰鍙戞枡娓呭崟涓姸鎬佷负寰呭鏂欒�屼笖鏈笅鏋剁殑鐗╂枡
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialPreparation.DeletePrepDD(System.Collections.Generic.List{System.String})">
-            <summary>
-            鍒犻櫎澶囨枡鍗曠墿鏂�
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialPreparation.AddHistory``1(Microsoft.AspNetCore.Http.HttpRequest,Rhea.Common.ApiAction{``0})">
-            <summary>
-            娣诲姞涓�涓狝piAction鐨勫巻鍙茶褰�
-            </summary>
-            <param name="action"></param>
-        </member>
-        <member name="T:Tiger.Business.WMS.Transaction.MaterialPreparation_Req">
-            <summary>
-            鐢熶骇澶囨枡浜嬪姟
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialPreparation_Req.SelectREQ(System.String,System.String,System.String,System.String,System.String)">
-            <summary>
-            閫夋嫨棰嗘枡鍗�
-            </summary>
-            <param name="prepNo"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialPreparation_Req.GetReqDlvyList(System.Boolean,System.String,System.String,System.String)">
-            <summary>
-            鑾峰彇棰嗘枡鍗曞彂鏂欐槑缁�
-            </summary>
-            <param name="code"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialPreparation_Req.SearchReqList(System.String)">
-            <summary>
-            鏌ヨ棰嗘枡鍗曟槑缁�
-            </summary>
-            <param name="code"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialPreparation_Req.RefreshReqList">
-            <summary>
-            鍒锋柊棰嗘枡鍗曟槑缁�
-            </summary>
-            <param name="code"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialPreparation_Req.LightShelfs(System.String,System.String)">
-            <summary>
-            璐ф灦鎸夌収鍙戞枡鏄庣粏鎵�鏈夌墿鏂欎寒鐏�
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialPreparation_Req.ScanItem(System.String)">
-            <summary>
-            鎵弿鐗╂枡骞跺鏍革紝濡傛灉鐗╂枡宸茬粡瀹屾垚涓嬫灦鍒欒揣鏋朵笂浜伅鎻愰啋鍌ㄤ綅
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialPreparation_Req.ScanLocation(System.String)">
-            <summary>
-            鎵弿鐗╂枡澶嶆牳
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialPreparation_Req.SubmitBatchItem(System.String,System.Int32)">
-            <summary>
-            鎻愪氦鎵规鐗╂枡鐨勪笅鏋舵暟閲�
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.WMS.Transaction.MaterialReturn.CurItem">
-            <summary>
-            姝e父鎿嶄綔鎵嶈祴鍊肩殑褰撳墠鎿嶄綔鐗╂枡
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialReturn.ScanReturnMaterial(System.String,System.Int32,System.String,Tiger.Model.Models.ReturnType)">
-            <summary>
-            鎵弿鐗╂枡
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialReturn.Save(System.String,System.Int32)">
-            <summary>
-            閫�鏂欎繚瀛�
-            </summary>
-            <param name="sn"></param>
-            <param name="qty"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialReturn.WriteToK3(System.String)">
-            <summary>
-            鍙嶅啓K3瓒呴鍗�
-            </summary>
-            <param name="req_no"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialReturn.GenerateFbillno(System.String,System.String)">
-            <summary>
-            鐢熸垚鍗曟嵁鍙�
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialReturn.GenerateSerialNumber(System.String)">
-            <summary>
-            鐢熸垚搴忓垪鍙�
-            </summary>
-            <param name="original_sn"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialReturn.TransferRoot(System.String,System.String)">
-            <summary>
-            鏌ヨ杞Щ鍗曞彿鏈�鍒濇簮璁板綍
-            </summary>
-            <param name="no"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialReturn.TransferChildToString(System.String,System.String@)">
-            <summary>
-            鏌ヨ杞Щ鍗曞彿锛屽線涓嬫煡锛岃繑鍥炴墍鏈変笅闃跺崟鍙�
-            </summary>
-            <param name="no"></param>
-            <param name="reqBillNos"></param>
-            <returns></returns>
-        </member>
-        <member name="P:Tiger.Business.WMS.Transaction.MaterialSplit.CurItem_Ext">
-            <summary>
-            姝e父鎿嶄綔鎵嶈祴鍊肩殑褰撳墠鎿嶄綔鐗╂枡
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialSplit.ScanItem(System.String,System.String,System.String)">
-            <summary>
-            鎵弿鐗╂枡
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialSplit.Save">
-            <summary>
-            鐗╂枡鎷嗗垎淇濆瓨
-            </summary>
-            <param name="sn"></param>
-            <param name="qty"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialSplit.GenerateSn(System.String,System.String,System.String,System.String)">
-            <summary>
-            鐢熸垚鏉$爜
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialSplit.GenerateSeq(System.String,System.String)">
-            <summary>
-            鐢熸垚搴忓垪鍙�
-            </summary>
-            <param name="original_sn"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialSplit.ChangeQty(System.String)">
-            <summary>
-            杞崲鏁伴噺
-            </summary>
-            <param name="qty"></param>
-            <returns></returns>
-        </member>
-        <member name="T:Tiger.Business.WMS.Transaction.MaterialSupplement">
-            <summary>
-            鐢熶骇鎹㈡枡浜嬪姟
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialSupplement.BindingShelfCar(System.String,System.String)">
-            <summary>
-            缁戝畾鎿嶄綔鏂欒溅
-            </summary>
-            <param name="shelfCode"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialSupplement.ShelfCarOnChanged(Tiger.Model.SeaStone.Shelf.SlotChanged)">
-            <summary>
-            鏂欒溅澶嶆牳
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialSupplement.ScanItem(System.String)">
-            <summary>
-            鎵弿鐗╂枡骞跺鏍�
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialSupplement.ScanLocation(System.String)">
-            <summary>
-            鎵弿鐗╂枡澶嶆牳
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.MaterialSupplement.CallingStrategy(Tiger.Model.V_XW_SCHED_ORDER)">
-            <summary>
-            鍙枡绛栫暐锛氭牴鎹缃殑绛栫暐鍒ゆ柇鏄惁闇�瑕佸彨鏂�
-            </summary>
-        </member>
-        <member name="T:Tiger.Business.WMS.Transaction.OffShelf">
-            <summary>
-            涓�鑸笅鏋朵簨鍔�
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.OffShelf.SearchItemList(System.String,System.String,System.String,System.String)">
-            <summary>
-            鏌ヨ鐗╂枡鏄庣粏
-            </summary>
-            <param name="code"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.OffShelf.RefreshItemList">
-            <summary>
-            鏌ヨ鐗╂枡鏄庣粏
-            </summary>
-            <param name="code"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.OffShelf.LightShelfs(System.String,System.String)">
-            <summary>
-            璐ф灦鎸夌収鍙戞枡鏄庣粏鎵�鏈夌墿鏂欎寒鐏�
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.OffShelf.ScanItem(System.String)">
-            <summary>
-            鎵弿鐗╂枡骞跺鏍革紝濡傛灉鐗╂枡宸茬粡瀹屾垚涓嬫灦鍒欒揣鏋朵笂浜伅鎻愰啋鍌ㄤ綅
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.OffShelf.ScanLocation(System.String)">
-            <summary>
-            鎵弿鐗╂枡澶嶆牳
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.Putaway.SelectComming(System.String)">
-            <summary>
-            閫夋嫨鍏ュ簱鍗�
-            </summary>
-            <param name="fbillNo"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.Putaway.CloseLight">
-            <summary>
-            鍏崇伅鎿嶄綔
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.Putaway.ScanItem(System.String)">
-            <summary>
-            鎵弿鐗╂枡
-            </summary>
-            <param name="sn"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.Putaway.ScanLocation(Tiger.Model.SnLocation)">
-            <summary>
-            鎵弿鍌ㄤ綅
-            </summary>
-            <param name="sn"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.Putaway.LightsAndSave(System.String,System.String)">
-            <summary>
-            鎵弿鍌ㄤ綅浜伅淇濆瓨
-            </summary>
-            <param name="sn"></param>
-            <param name="locationcode"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.Putaway.ScanReel(System.String)">
-            <summary>
-            鎵弿鐗╂枡
-            </summary>
-            <param name="sn"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.Putaway.InspectionUpdate(Tiger.Model.Barcode,Rhea.Common.ApiAction)">
-            <summary>
-            鏇存柊閫佹鍗曪紝鍒ゆ柇鏄惁鏈夎法鍗曞苟鐢熸垚鏉$爜璁板綍
-            </summary>
-            <param name="sn"></param>
-            <param name="barcode"></param>
-            <param name="action"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.Putaway.InspectionSubmit(System.String)">
-            <summary>
-            閫佹鍗曡法鍗曟暟鎹彁浜�
-            </summary>
-            <param name="inspecton_no"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.Putaway.ManualRecommendLocation(System.String)">
-            <summary>
-            鎵嬪姩鎺ㄨ崘鍌ㄤ綅
-            </summary>
-            <param name="inspecton_no"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.Putaway.Complete">
-            <summary>
-            涓婃灦鏈�鍚庡畬鎴愭搷浣�
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="T:Tiger.Business.WMS.Transaction.PutOnShelf">
-            <summary>
-            涓�鑸笂鏋朵簨鍔�
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.WMS.Transaction.PutOnShelf.CurItem">
-            <summary>
-            姝e父鎿嶄綔鎵嶈祴鍊肩殑褰撳墠鎿嶄綔鐗╂枡
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.WMS.Transaction.PutOnShelf.TargetLocation">
-            <summary>
-            鎺ㄨ崘鍌ㄤ綅锛岄敊璇搷浣滃偍浣嶆垨鑰呮贩鏀炬ā寮忎娇鐢ㄧ殑鐩爣鍌ㄤ綅
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.PutOnShelf.ScanItem(System.String,System.Nullable{System.Int32})">
-            <summary>
-            鎵弿鐗╂枡骞跺鏍革紝濡傛灉鐗╂枡宸茬粡瀹屾垚涓婃灦鍒欒揣鏋朵笂浜伅鎻愰啋鍌ㄤ綅
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.PutOnShelf.ScanLocation(System.String)">
-            <summary>
-            鎵弿鐗╂枡澶嶆牳
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.PutOnShelf.ShelfCarOnChanged(Tiger.Model.SeaStone.Shelf.SlotChanged)">
-            <summary>
-            鏂欒溅澶嶆牳
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.WMS.Transaction.WMSTransactionBase.TransID">
-            <summary>
-            浜嬪姟ID
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.WMS.Transaction.WMSTransactionBase.ApiHost">
-            <summary>
-            Api Host
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.WMS.Transaction.WMSTransactionBase.TransLock">
-            <summary>
-            浜嬪姟閿�
-            </summary>
-        </member>
-        <member name="F:Tiger.Business.WMS.Transaction.WMSTransactionBase.ActionHistoryList">
-            <summary>
-            ApiAction鍘嗗彶璁板綍
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.WMS.Transaction.WMSTransactionBase.LastActionTime">
-            <summary>
-            鏈�鍚庢搷浣滅殑鏃堕棿
-            </summary>
-        </member>
-        <member name="P:Tiger.Business.WMS.Transaction.WMSTransactionBase.IsFinished">
-            <summary>
-            浜嬪姟鏄惁瀹屾垚
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.WMSTransactionBase.AddHistory``1(Microsoft.AspNetCore.Http.HttpRequest,Rhea.Common.ApiAction{``0})">
-            <summary>
-            娣诲姞涓�涓狝piAction鐨勫巻鍙茶褰�
-            </summary>
-            <param name="action"></param>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.WMSTransactionBase.SaveHistory">
-            <summary>
-            淇濆瓨ApiAction鐨勫巻鍙茶褰曞埌鏂囦欢
-            </summary>
-            <param name="action"></param>
-        </member>
-        <member name="P:Tiger.Business.WMS.Transaction.WMSTransactionBase.CurMode">
-            <summary>
-            褰撳墠鐨勭墿鏂欎笂鏂欐ā寮�
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.WMSTransactionBase.TargetLightOff(Tiger.Model.WMS_PREP_DD_Ext,Tiger.Model.WMS_LOCATION)">
-            <summary>
-            鍏抽棴鍌ㄤ綅鐏伅
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.WMSTransactionBase.LocationLightOff(Tiger.Model.WMS_PREP_DD_Ext)">
-            <summary>
-            鍏抽棴鍌ㄤ綅鐏伅
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.WMSTransactionBase.LocationLightOff(Tiger.Model.WMS_ITEM_Ext)">
-            <summary>
-            鍏抽棴鍌ㄤ綅鐏伅
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.WMSTransactionBase.LocationLightOff(Tiger.Model.WMS_LOCATION_Ext)">
-            <summary>
-            鍏抽棴鍌ㄤ綅鐏伅
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.WMSTransactionBase.LocationLightOff(Tiger.Model.WMS_LOCATION,Tiger.Model.WMS_SHELF)">
-            <summary>
-            鍏抽棴鍌ㄤ綅鐏伅
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.WMSTransactionBase.LocationLightOff(Tiger.Model.WMS_COUNT_MDTL_Ext)">
-            <summary>
-            鐩樼偣鍌ㄤ綅鐏伅
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="F:Tiger.Business.WMS.Transaction.WMSTransactionBase.ShelfCarList">
-            <summary>
-            缁戝畾鐨勬枡杞ACKID鍒楄〃
-            </summary>
-        </member>
-        <member name="M:Tiger.Business.WMS.Transaction.WMSTransactionBase.ShelfCarOnChanged(Tiger.Model.SeaStone.Shelf.SlotChanged)">
-            <summary>
-            鏂欒溅涓婃姤鏁版嵁澶勭悊
-            </summary>
-            <param name="param"></param>
-            <returns></returns>
-        </member>
-        <member name="T:Tiger.Business.WMS.WMSContext">
-            <summary>
-            WMS涓婁笅鏂�
-            </summary>
-        </member>
-    </members>
-</doc>
diff --git a/Tiger.Controllers.System/Controllers/BAS/BASController.cs b/Tiger.Controllers.System/Controllers/BAS/BASController.cs
deleted file mode 100644
index ccdea6c..0000000
--- a/Tiger.Controllers.System/Controllers/BAS/BASController.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using Rhea.Common;
-using Tiger.Model;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Newtonsoft.Json;
-using Microsoft.AspNetCore.Cors;
-
-namespace Tiger.Api.Controllers.BAS
-{
-    /// <summary>
-    /// 
-    /// </summary>
-    [Route("api/[controller]/[action]")]
-    [EnableCors("Any")]
-    [ApiController]
-    public partial class BASController : ControllerBase
-    {
-
-    }
-}
\ No newline at end of file
diff --git a/Tiger.Controllers.System/Controllers/Base/BaseController.cs b/Tiger.Controllers.System/Controllers/Base/BaseController.cs
deleted file mode 100644
index 8f3399b..0000000
--- a/Tiger.Controllers.System/Controllers/Base/BaseController.cs
+++ /dev/null
@@ -1,617 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using Rhea.Common;
-using Tiger.Model;
-using Microsoft.AspNetCore.Cors;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Newtonsoft.Json;
-using Tiger.IBusiness;
-using Tiger.Api.iBiz;
-using System.IO;
-
-namespace Tiger.Api.Controllers.Base
-{
-    /// <summary>
-    /// Api鍩虹鏈嶅姟
-    /// </summary>
-    [Route("api/[controller]/[action]")]
-    [EnableCors("Any")]
-    [ApiController]
-    public partial class BaseController : ControllerBase
-    {
-        #region 娣诲姞鎿嶄綔
-        /// <summary>
-        /// Add(ApiAction) 锛氭妸ApiAction.Data涓殑鍗曚釜瀹炰綋寰�鏁版嵁搴撴坊鍔犱竴琛屾暟鎹�
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> Add([FromBody] ApiAction action)
-        {
-            ApiAction response;
-            try
-            {
-                response = action.GetResponse(await Biz.Base.AddAsync(action.GetDataEntity(), action.IsAsync));
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// AddList(ApiAction) 锛氭妸ApiAction.Data涓殑澶氫釜瀹炰綋寰�鏁版嵁搴撴壒閲忔坊鍔犳暟鎹�
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> AddList([FromBody] ApiAction action)//<List<object>>
-        {
-            ApiAction response;
-            try
-            {
-                response = action.GetResponse(await Biz.Base.AddListAsync(action.GetDataEntity(), action.IsAsync));
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-        #endregion
-
-        #region 淇濆瓨鎿嶄綔
-        /// <summary>
-        /// Save(ApiAction) 锛氭妸ApiAction.Data涓殑鍗曚釜瀹炰綋寰�鏁版嵁搴撲繚瀛樹竴琛屾暟鎹紝濡傛灉瀛樺湪灏辨洿鏂帮紝涓嶅瓨鍦ㄥ氨鎻掑叆
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> Save([FromBody] ApiAction action)
-        {
-            ApiAction response;
-            try
-            {
-                response = action.GetResponse(await Biz.Base.SaveAsync(action.GetDataEntity(), action.IsAsync));
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// SaveList(ApiAction) 锛氭妸ApiAction.Data涓殑澶氫釜瀹炰綋寰�鏁版嵁搴撴壒閲忎繚瀛樻暟鎹紝濡傛灉瀛樺湪灏辨洿鏂帮紝涓嶅瓨鍦ㄥ氨鎻掑叆
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> SaveList([FromBody] ApiAction action)
-        {
-            ApiAction response;
-            try
-            {
-                response = action.GetResponse(await Biz.Base.SaveListAsync(action.GetDataEntity(), action.IsAsync));
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-        #endregion
-
-        #region 淇敼鎿嶄綔
-        /// <summary>
-        /// Update(ApiAction) 锛氫粠鏁版嵁搴撲腑淇敼ApiAction.Data涓殑鍗曚釜瀹炰綋
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> Update([FromBody] ApiAction action)
-        {
-            ApiAction response;
-            try
-            {
-                response = action.GetResponse(await Biz.Base.UpdateAsync(action.GetDataEntity(), action.IsAsync));
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// UpdateList(ApiAction) 锛氫粠鏁版嵁搴撲腑淇敼ApiAction.Data涓殑澶氫釜瀹炰綋
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> UpdateList([FromBody] ApiAction action)
-        {
-            ApiAction response;
-            try
-            {
-                response = action.GetResponse(await Biz.Base.UpdateAsync(action.GetDataEntity(), action.IsAsync));
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// UpdateByColumn(ApiAction) 锛氭寜ApiAction.Data涓璘pdateAble瀵硅薄浠庢暟鎹簱涓慨鏀瑰涓疄浣撶殑鏌愪簺瀛楁
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> UpdateByColumn([FromBody] ApiAction action)
-        {
-            ApiAction response;
-            try
-            {
-                response = action.GetResponse(await Biz.Base.UpdateAsync(action.GetDataEntity(), action.IsAsync));
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-        #endregion
-
-        #region 鍒犻櫎鎿嶄綔
-        /// <summary>
-        /// Delete(ApiAction) 锛氫粠鏁版嵁搴撲腑鎶夾piAction.Data涓殑鍗曚釜瀹炰綋鍒犻櫎
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> Delete([FromBody] ApiAction action)
-        {
-            ApiAction response;
-            try
-            {
-                response = action.GetResponse(await Biz.Base.DeleteAsync(action.GetDataEntity(), action.IsAsync));
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// DeleteList(ApiAction) 锛氫粠鏁版嵁搴撲腑鎶夾piAction.Data涓殑澶氫釜瀹炰綋鍒犻櫎
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> DeleteList([FromBody] ApiAction action)//<List<object>>
-        {
-            ApiAction response;
-            try
-            {
-                response = action.GetResponse(await Biz.Base.DeleteAsync(action.GetDataEntity(), action.IsAsync));
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// DeleteWhere(ApiAction) 锛氭牴鎹瓵piAction.Data涓璚here璇彞浠庢暟鎹簱涓垹闄ゆ弧瓒虫潯浠剁殑Data瀹炰綋
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> DeleteWhere([FromBody] ApiAction action)
-        {
-            ApiAction response;
-            try
-            {
-                response = action.GetResponse(await Biz.Base.DeleteAsync(action.NewDataEntity(), action.GetDataEntity(), action.IsAsync));
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-      
-        #endregion
-
-        #region 鏌ヨ鎿嶄綔
-        private T TryDeserializeJson<T>(string json)
-        {
-            try
-            {
-            	return JsonConvert.DeserializeObject<T>(json);
-            }
-            catch (Exception)
-            {
-                return default(T);
-            }
-        }
-
-        /// <summary>
-        /// Query(ApiAction) 锛氫粠鏁版嵁搴撲腑鏌ヨData瀹炰綋鐨勬暣琛ㄦ暟鎹�
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> Query([FromBody] ApiActionExt action)
-        {
-            ApiAction response;
-            try
-            {
-                var options = TryDeserializeJson<AuthOption>(action.Options?.ToString());
-                if (options.IsNullOrEmpty())
-                {
-                    response = action.ToApiAction().GetResponse(await Biz.Base.QueryAsync(action.GetDataEntity(), action.IsAsync, action.NeedInclude));
-                }
-                else
-                {
-                    response = action.ToApiAction().GetResponse(await Biz.Base.QueryByAuthAsync(action.GetDataEntity(), options, action.IsAsync, action.NeedInclude));
-                }
-            }
-            catch (System.Exception ex)
-            {
-                response = action.ToApiAction().GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// QueryWhere(ApiAction) 锛氭牴鎹瓵piAction.Data涓璚here璇彞浠庢暟鎹簱涓煡璇㈡弧瓒虫潯浠剁殑Data瀹炰綋鏁版嵁
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> QueryWhere([FromBody] ApiActionExt action)
-        {
-            ApiAction response;
-            try
-            {
-                var options = TryDeserializeJson<AuthOption>(action.Options?.ToString());
-                if (options.IsNullOrEmpty())
-                {
-                    response = action.ToApiAction().GetResponse(await Biz.Base.QueryAsync(action.NewDataEntity(), action.GetDataEntity(), action.IsAsync, action.NeedInclude));
-                }
-                else
-                {
-                    response = action.ToApiAction().GetResponse(await Biz.Base.QueryByAuthAsync(action.NewDataEntity(), action.GetDataEntity(), options, action.IsAsync, action.NeedInclude));
-                }
-            }
-            catch (System.Exception ex)
-            {
-                response = action.ToApiAction().GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// QueryPage(ApiAction) 锛氭寜ApiAction.Data涓璓ageAble瀵硅薄杩斿洖Data瀹炰綋褰撳墠Page鐨勬暟鎹�
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> QueryPage([FromBody] ApiActionExt action)
-        {
-            ApiAction response;
-            try
-            {
-                var options = TryDeserializeJson<AuthOption>(action.Options?.ToString());
-                if (options.IsNullOrEmpty())
-                {
-                    response = action.ToApiAction().GetResponse(await Biz.Base.QueryAsync(action.GetDataEntity(), action.IsAsync, action.NeedInclude));
-                }
-                else
-                {
-                    response = action.ToApiAction().GetResponse(await Biz.Base.QueryByAuthAsync(action.GetDataEntity(), options, action.IsAsync, action.NeedInclude));
-                }
-            }
-            catch (System.Exception ex)
-            {
-                response = action.ToApiAction().GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// 鍒嗛〉鐩存帴杩斿洖PageAble
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> QueryCustomPage([FromBody] ApiActionExt action)
-        {
-            dynamic response;
-            try
-            {
-                var options = TryDeserializeJson<AuthOption>(action.Options?.ToString());
-                if (options.IsNullOrEmpty())
-                {
-                    response = action.ToApiAction().GetResponse(await Biz.Base.QueryPageAsync(action.GetDataEntity(), action.IsAsync, action.NeedInclude));
-                }
-                else
-                {
-                    response = action.ToApiAction().GetResponse(await Biz.Base.QueryByAuthPageAsync(action.GetDataEntity(), options, action.IsAsync, action.NeedInclude));
-                }
-            }
-            catch (System.Exception ex)
-            {
-                response = action.ToApiAction().GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// QueryCustom(ApiAction) 锛氭寜ApiAction.Data涓璔ueryAble瀵硅薄浠庢暟鎹簱鏌ヨ婊¤冻鏉′欢鐨勬暟鎹�
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> QueryCustom([FromBody] ApiActionExt action)
-        {
-            ApiAction response;
-            try
-            {
-                var options = TryDeserializeJson<AuthOption>(action.Options?.ToString());
-                if (options.IsNullOrEmpty())
-                {
-                    response = action.ToApiAction().GetResponse(await Biz.Base.QueryAsync(action.GetDataEntity(), action.IsAsync, action.NeedInclude));
-                }
-                else
-                {
-                    response = action.ToApiAction().GetResponse(await Biz.Base.QueryByAuthAsync(action.GetDataEntity(), options, action.IsAsync, action.NeedInclude));
-                }
-            }
-            catch (System.Exception ex)
-            {
-                response = action.ToApiAction().GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// QuerySQL(ApiAction) 锛氭寜ApiAction.Data涓璖QL璇彞浠庢暟鎹簱涓煡璇㈡弧瓒虫潯浠剁殑鏁版嵁
-        /// 涓嶆敮鎸丄uthOptions璁剧疆
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> QuerySQL([FromBody] ApiActionExt action)
-        {
-            ApiAction response;
-            try
-            {
-                response = action.ToApiAction().GetResponse(await Biz.Base.QuerySqlAsync(action.NewDataEntity(), action.GetDataEntity(), action.IsAsync, action.NeedInclude));
-            }
-            catch (System.Exception ex)
-            {
-                response = action.ToApiAction().GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// QuerySQL(ApiAction) 锛氭寜ApiAction.Data涓璖QL璇彞浠庢暟鎹簱涓煡璇㈠苟鎸塒ageAble瀵硅薄杩斿洖褰撳墠Page鐨勬暟鎹�
-        /// 涓嶆敮鎸丄uthOptions璁剧疆
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> QuerySQLPage([FromBody] ApiActionExt action)
-        {
-            ApiAction response;
-            try
-            {
-                response = action.ToApiAction().GetResponse(await Biz.Base.QuerySqlAsync(action.GetDataEntity(), action.IsAsync, action.NeedInclude));
-            }
-            catch (System.Exception ex)
-            {
-                response = action.ToApiAction().GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-        #endregion
-
-        #region 鏌ヨCount
-        /// <summary>
-        /// Count(ApiAction) 锛氭牴鎹瓵piAction.Data涓璚here璇彞鏌ヨ婊¤冻鏉′欢鐨凞ata瀹炰綋鐨凜ount鏁伴噺
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> Count([FromBody] ApiAction action)
-        {
-            ApiAction response;
-            try
-            {
-                var options = TryDeserializeJson<AuthOption>(action.Options?.ToString());
-                if (options.IsNullOrEmpty())
-                {
-                    response = action.GetResponse(await Biz.Base.CountAsync(action.NewDataEntity(), action.GetDataEntity(), action.IsAsync));
-                }
-                else
-                {
-                    response = action.GetResponse(await Biz.Base.CountByAuthAsync(action.NewDataEntity(), action.GetDataEntity(), options, action.IsAsync));
-                }
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-        #endregion
-
-        #region 鏄惁瀛樺湪
-        /// <summary>
-        /// IsExist(ApiAction) 锛氭牴鎹瓵piAction.Data涓璚here璇彞鏌ヨ婊¤冻鏉′欢鐨凞ata瀹炰綋鏄惁瀛樺湪
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> IsExist([FromBody] ApiAction action)
-        {
-            ApiAction response;
-            try
-            {
-                var options = TryDeserializeJson<AuthOption>(action.Options?.ToString());
-                if (options.IsNullOrEmpty())
-                {
-                    response = action.GetResponse(await Biz.Base.IsExistAsync(action.NewDataEntity(), action.GetDataEntity(), action.IsAsync));
-                }
-                else
-                {
-                    response = action.GetResponse(await Biz.Base.IsExistByAuthAsync(action.NewDataEntity(), action.GetDataEntity(), options, action.IsAsync));
-                }
-                
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-        #endregion
-
-        #region 鎵цSQL
-        /// <summary>
-        /// ExecuteSqlCommand(ApiAction(Data:SQLCmd)) 锛氭墽琛孲QL璇彞杩斿洖褰卞搷琛屾暟
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> ExecuteSqlCommand([FromBody] ApiAction action)
-        {
-            ApiAction response;
-            try
-            {
-                response = action.GetResponse(await Biz.Base.ExecuteSqlCommandAsync(action.Data?.ToString(), action.IsAsync));
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-        #endregion
-
-        #region 鏋氫妇鏌ヨ
-        /// <summary>
-        /// QueryEnum(ApiAction) 锛氭煡璇㈡灇涓惧垪琛�
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public IActionResult QueryEnum([FromBody] ApiAction action)
-        {
-            ApiAction response;
-            try
-            {
-                response = string.IsNullOrEmpty(action.Data?.ToString())? action.GetResponse(EnumHelper.GetList(action.NewDataEntity())): action.GetResponse(EnumHelper.GetList(action.NewDataEntity(), action.Data?.ToString()));
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-        #endregion
-
-        #region 鍏堝垹闄ゅ悗鏂板
-        [HttpPost]
-        public async Task<IActionResult> AddAfterDeleteAsync([FromBody] ApiAction action)
-        {
-            ApiAction response;
-            try
-            {
-                response = action.GetResponse(await Biz.Base.AddAfterDeleteAsync(action.GetDataEntity()));
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-
-        #endregion
-
-        #region 鏂囦欢涓婁紶
-        /// <summary>
-        /// 鏂囦欢涓婁紶
-        /// </summary>
-        /// <param name="file"></param>
-        /// <param name="entityName"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> Upload([FromForm]string entityName, IFormFile file)
-        {
-            if (file == null || file.Length == 0)
-                return BadRequest("No file uploaded.");
-            var folderName = entityName == "BAS_LABEL_TEMP" || entityName == "BAS_LABEL_VAR" ? "upload/Template": "upload";
-            var path = Path.Combine($@"{BizConfig.Configuration["UploadAddress"]}", folderName, file.FileName);
-
-            using (var stream = new FileStream(path, FileMode.Create))
-            {
-                await file.CopyToAsync(stream);
-            }
-            var downloadAddress = entityName == "BAS_LABEL_TEMP" || entityName == "BAS_LABEL_VAR" ? "/Template" : "";
-            return Ok(new { file.FileName, file.ContentType, file.Length, url= $@"{BizConfig.Configuration["DownloadAddress"]}{downloadAddress}/"+ file.FileName });
-        }
-
-        #endregion
-
-        #region 瀵煎叆Excel
-        [HttpPost]
-        public async Task<IActionResult> ImportExcel([FromBody] ApiAction<ImportInput> action)
-        {
-            ApiAction response;
-            try
-            {
-                IImportExcel import = DI.Resolve(action.Data.typeFullName) as IImportExcel;
-                response = action.GetResponse(await import.Import(action.NewDataEntity(),action.Data));
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// 瀵煎叆Excel鍓嶉獙璇�
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> ValidateTableImport([FromBody] ApiAction<ImportValidateInput> action)
-        {
-            ApiAction response;
-            try
-            {
-                IImportExcel import = DI.Resolve(action.Data.typeFullName) as IImportExcel;
-                response = action.GetResponse(await import.ValidateTableImport(action.NewDataEntity(), action.Data));
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-        #endregion
-    }
-}
\ No newline at end of file
diff --git a/Tiger.Controllers.System/Controllers/Base/CacheController.CodeRule.cs b/Tiger.Controllers.System/Controllers/Base/CacheController.CodeRule.cs
deleted file mode 100644
index 9891a95..0000000
--- a/Tiger.Controllers.System/Controllers/Base/CacheController.CodeRule.cs
+++ /dev/null
@@ -1,129 +0,0 @@
-锘縰sing Rhea.Common;
-using Microsoft.AspNetCore.Mvc;
-using System;
-using Tiger.IBusiness;
-using System.Linq;
-using System.Threading.Tasks;
-using Tiger.Model;
-using System.Linq.Expressions;
-using Tiger.Api.DbCache;
-
-namespace Tiger.Api.Controllers.Base
-{
-    public partial class CacheController : ControllerBase
-    {
-        /// <summary>
-        /// GetCodeRule(ApiAction(Data:RULE_CODE))
-        /// 鏍规嵁鏉$爜瑙勫垯浠g爜杩斿洖鏉$爜瑙勫垯瀵硅薄
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> GetCodeRule([FromBody] ApiAction action)
-        {
-            ApiAction response;
-            try
-            {
-                response = action.GetResponse(Cache.CodeRule[action.Data?.ToString() ?? ""]);
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// GetCodeRuleType(ApiAction(Data:RULE_TYPE))
-        /// 鏍规嵁瑙勫垯绫诲瀷杩斿洖鏉$爜瑙勫垯瀵硅薄鍒楄〃
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> GetCodeRuleType([FromBody] ApiAction action)
-        {
-            ApiAction response;
-            try
-            {
-                response = action.GetResponse(Cache.CodeRule.Rules.Where(q => q.RULE_TYPE == (action.Data?.ToInt32() ?? -1)).ToList());
-            }
-            catch (Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// TryGenerateCode(ApiAction(Data:{ RuleCode : "ruleCode", Args : ["arg1", "arg2"] }))
-        /// 灏濊瘯鐢熸垚鏉$爜锛屼笉淇濆瓨鍒版暟鎹簱
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> TryGenerateCode([FromBody] ApiAction<GenerateCodeEntity> action)
-        {
-            ApiAction response;
-            try
-            {
-                response = action.GetResponse(Cache.CodeRule.TryGenerate(action.Data?.RuleCode, action.Data?.Args));
-            }
-            catch (Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// GenerateCode(ApiAction(Data:{ RuleCode : "ruleCode", Args : ["arg1", "arg2"] }))
-        /// 鐢熸垚鏉$爜
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> GenerateCode([FromBody] ApiAction<GenerateCodeEntity> action)
-        {
-            ApiAction response;
-            try
-            {
-                response = action.GetResponse(Cache.CodeRule.Generate(action.Data?.RuleCode, action.Data?.Args));
-            }
-            catch (Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// VerifyCode(ApiAction(Data:{ Code : "code", RuleCode : "ruleCode", RuleType : 0 }))
-        /// 鏍规嵁瑙勫垯绫诲瀷杩斿洖鏉$爜瑙勫垯瀵硅薄鍒楄〃
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> VerifyCode([FromBody] ApiAction<VerifyCodeEntity> action)
-        {
-            ApiAction response;
-            try
-            {
-                Expression<Func<BAS_CODE_RULE, bool>> predicate = q => true;
-                if (!(action.Data?.RuleCode).IsNullOrEmpty())
-                {
-                    predicate = predicate.And(q => q.RULE_CODE == action.Data.RuleCode);
-                }
-                if (!(action.Data?.RuleType).IsNullOrEmpty())
-                {
-                    predicate = predicate.And(q => q.RULE_TYPE == action.Data.RuleType);
-                }
-                response = action.GetResponse(Cache.CodeRule.Verify(action.Data?.Code, predicate.Compile()));
-            }
-            catch (Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-    }
-}
\ No newline at end of file
diff --git a/Tiger.Controllers.System/Controllers/Base/CacheController.SysParam.cs b/Tiger.Controllers.System/Controllers/Base/CacheController.SysParam.cs
deleted file mode 100644
index 156a085..0000000
--- a/Tiger.Controllers.System/Controllers/Base/CacheController.SysParam.cs
+++ /dev/null
@@ -1,76 +0,0 @@
-锘縰sing Rhea.Common;
-using Microsoft.AspNetCore.Mvc;
-using System;
-using Tiger.IBusiness;
-using System.Linq;
-using System.Threading.Tasks;
-using Tiger.Api.DbCache;
-
-namespace Tiger.Api.Controllers.Base
-{
-    public partial class CacheController : ControllerBase
-    {
-        /// <summary>
-        /// GetSysParam(ApiAction(Data:PARAM_CODE))
-        /// 鏍规嵁绯荤粺鍙傛暟浠g爜杩斿洖绯荤粺鍙傛暟瀵硅薄
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> GetSysParam([FromBody] ApiAction action)
-        {
-            ApiAction response;
-            try
-            {
-                response = action.GetResponse(Cache.SysParam[action.Data?.ToString() ?? ""]);
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// GetSysParamGroup(ApiAction(Data:PRMG_CODE))
-        /// 鏍规嵁绯荤粺鍙傛暟缁勪唬鐮佽繑鍥炵郴缁熷弬鏁扮粍瀵硅薄
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> GetSysParamGroup([FromBody] ApiAction action)
-        {
-            ApiAction response;
-            try
-            {
-                response = action.GetResponse(Cache.SysParam.Groups.FirstOrDefault(q => q.PRMG_CODE == (action.Data?.ToString() ?? "")));
-            }
-            catch (Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// GetSysParamType(ApiAction(Data:PRMG_TYPE))
-        /// 鏍规嵁绯荤粺鍙傛暟缁勭被鍨嬭繑鍥炵郴缁熷弬鏁扮粍鍒楄〃
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> GetSysParamType([FromBody] ApiAction action)
-        {
-            ApiAction response;
-            try
-            {
-                response = action.GetResponse(Cache.SysParam.Groups.Where(q => q.PRMG_TYPE == (action.Data?.ToString() ?? "")).ToList());
-            }
-            catch (Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-    }
-}
diff --git a/Tiger.Controllers.System/Controllers/Base/CacheController.cs b/Tiger.Controllers.System/Controllers/Base/CacheController.cs
deleted file mode 100644
index b451f4c..0000000
--- a/Tiger.Controllers.System/Controllers/Base/CacheController.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-锘縰sing Microsoft.AspNetCore.Cors;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace Tiger.Api.Controllers.Base
-{
-    /// <summary>
-    /// CacheController
-    /// </summary>
-    [Route("api/[controller]/[action]")]
-    [EnableCors("Any")]
-    [ApiController]
-    public partial class CacheController : ControllerBase
-    {
-    }
-}
diff --git a/Tiger.Controllers.System/Controllers/Base/ClientController.cs b/Tiger.Controllers.System/Controllers/Base/ClientController.cs
deleted file mode 100644
index 06bf211..0000000
--- a/Tiger.Controllers.System/Controllers/Base/ClientController.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using Rhea.Common;
-using Tiger.Model;
-using Microsoft.AspNetCore.Cors;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Tiger.IBusiness;
-
-namespace Tiger.Api.Controllers.Base
-{
-    /// <summary>
-    /// 绯荤粺瀹㈡埛绔鐞嗘湇鍔�
-    /// </summary>
-    [Route("System/[controller]/[action]")]
-    [EnableCors("Any")]
-    [ApiController]
-    public partial class ClientController : ControllerBase
-    {
-        /// <summary>
-        /// Heartbeat(ApiAction(Data:Client))
-        /// 瀹㈡埛绔績璺充笂閫丄pi
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> Heartbeat([FromBody] ApiAction<Client> action)
-        {
-            ApiAction response;
-            try
-            {
-                //context.Connection.RemoteIpAddress
-                var clientIP = Request.HttpContext.Connection.RemoteIpAddress.ToString().Replace("::ffff:", "");
-                //response = action.GetResponse(await MonitorBus.ClientMonitor.Heartbeat(action.Data, clientIP));
-                response = action.GetResponse(await DI.Resolve<IMonitorBus>().GetClientMonitor().Heartbeat(action.Data, clientIP));
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-    }//endClass
-}
\ No newline at end of file
diff --git a/Tiger.Controllers.System/Controllers/Base/LanguageController.cs b/Tiger.Controllers.System/Controllers/Base/LanguageController.cs
deleted file mode 100644
index b3e4515..0000000
--- a/Tiger.Controllers.System/Controllers/Base/LanguageController.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using Rhea.Common;
-using Tiger.Model;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Tiger.IBusiness;
-
-namespace Tiger.Api.Controllers.Base
-{
-    /// <summary>
-    /// 鍥介檯鍖栬瑷�
-    /// </summary>
-    [Route("api/[controller]/[action]")]
-    [ApiController]
-    public class Language : ControllerBase
-    {
-        /// <summary>
-        /// 鑾峰彇璇█鍖匤son
-        /// </summary>
-        /// <param name="locale"></param>
-        /// <returns></returns>
-        [HttpGet]
-        public async Task<IActionResult> Get(string? locale)
-        {
-            //return Ok(Biz.Language.GetJson(locale));
-            return Ok(DI.Resolve<ILanguage>().GetJson(locale));
-        }
-    }
-}
\ No newline at end of file
diff --git a/Tiger.Controllers.System/Controllers/Base/LoginController.cs b/Tiger.Controllers.System/Controllers/Base/LoginController.cs
deleted file mode 100644
index c6b3adf..0000000
--- a/Tiger.Controllers.System/Controllers/Base/LoginController.cs
+++ /dev/null
@@ -1,101 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using Rhea.Common;
-using Tiger.Model;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Tiger.IBusiness;
-
-namespace Tiger.Api.Controllers.Base
-{
-    /// <summary>
-    /// 
-    /// </summary>
-    [Route("api/[controller]/[action]")]
-    [ApiController]
-    public class LoginController : ControllerBase
-    {
-        #region BS
-        /// <summary>
-        /// 鐧诲綍
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> LoginAsync([FromBody] ApiAction<UserInfo> action)
-        {
-            return Ok(await DI.Resolve<ILogin>().BSLogin(action));
-        }
-        /// <summary>
-        /// 鍒囨崲鎹偣
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpGet]
-        public async Task<IActionResult> SwitchOrgCode(string? token, string? org, string? fty)
-        {
-            return Ok(await DI.Resolve<ILogin>().BSSwitchOrgCode(token,org, fty));
-        }
-        /// <summary>
-        /// 鑾峰彇鐧诲綍淇℃伅
-        /// </summary>
-        /// <param name="token"></param>
-        /// <returns></returns>
-        [HttpGet]
-        public async Task<IActionResult> GetLoginInfo(string? token)
-        {
-            var _token =string.IsNullOrEmpty(token)?Request.Headers["Authorization"].ToString(): token;
-            return Ok(await DI.Resolve<ILogin>().GetBSLoginInfo(_token));
-        }
-
-        /// <summary>
-        /// 娉ㄩ攢
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> LogoutAsync([FromBody] ApiAction action)
-        {
-            return Ok(await DI.Resolve<ILogin>().BSLogout(action.Data?.ToString()));
-        }
-        #endregion
-
-        #region CS
-        /// <summary>
-        /// CS鐧诲綍
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> CSLoginAsync([FromBody] ApiAction<UserInfo> action)
-        {
-            return Ok(await DI.Resolve<ILogin>().CSLogin(action));
-        }
-
-        /// <summary>
-        /// 鑾峰彇CS鐧诲綍淇℃伅
-        /// </summary>
-        /// <param name="token"></param>
-        /// <returns></returns>
-        [HttpGet]
-        public async Task<IActionResult> CSGetLoginInfo(string? token)
-        {
-            var _token = string.IsNullOrEmpty(token) ? Request.Headers["Authorization"].ToString() : token;
-            return Ok(await DI.Resolve<ILogin>().GetCSLoginInfo(_token));
-        }
-
-        /// <summary>
-        /// CS鐧诲嚭
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> CSLogoutAsync([FromBody] ApiAction action)
-        {
-            return Ok(await DI.Resolve<ILogin>().CSLogout(action.Data?.ToString()));
-        }
-        #endregion
-    }
-}
\ No newline at end of file
diff --git a/Tiger.Controllers.System/Controllers/Base/SystemController.cs b/Tiger.Controllers.System/Controllers/Base/SystemController.cs
deleted file mode 100644
index 71b2260..0000000
--- a/Tiger.Controllers.System/Controllers/Base/SystemController.cs
+++ /dev/null
@@ -1,424 +0,0 @@
-锘縰sing System;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Cors;
-using Microsoft.AspNetCore.Mvc;
-using System.IO;
-using System.Reflection;
-using Rhea.Common;
-using Tiger.IBusiness;
-using System.Threading;
-using System.Linq;
-using Tiger.Model;
-using System.Xml.Linq;
-using System.ComponentModel;
-
-namespace Tiger.Api.Controllers.Base
-{
-    /// <summary>
-    /// Api绯荤粺鏈嶅姟
-    /// </summary>
-    [EnableCors("Any")]
-    [ApiController]
-    public partial class SystemController : ControllerBase
-    {
-        /// <summary>
-        /// 鑾峰彇Api鐨勭數鑴戞椂闂�
-        /// </summary>
-        /// <returns></returns>
-        [HttpGet]
-        [Route("System/Base/[action]")]
-        public IActionResult GetApiTimeAsync()
-        {
-            return Ok(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.fff"));
-        }
-
-        /// <summary>
-        /// 鑾峰彇Api鐗堟湰
-        /// </summary>
-        /// <returns></returns>
-        [HttpGet]
-        [Route("System/Base/[action]")]
-        public IActionResult GetVersion()
-        {
-            return Ok(Assembly.GetExecutingAssembly().GetName().Version.ToString());
-        }
-
-        /// <summary>
-        /// 鑾峰彇Api鍏徃
-        /// </summary>
-        /// <returns></returns>
-        [HttpGet]
-        [Route("System/Base/[action]")]
-        public IActionResult GetCompany()
-        {
-            return Ok((Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof(AssemblyCompanyAttribute)) as AssemblyCompanyAttribute).Company);
-        }
-
-        /// <summary>
-        /// 鑾峰彇Api鐗堟潈
-        /// </summary>
-        /// <returns></returns>
-        [HttpGet]
-        [Route("System/Base/[action]")]
-        public IActionResult GetCopyright()
-        {
-            return Ok((Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof(AssemblyCopyrightAttribute)) as AssemblyCopyrightAttribute).Copyright);
-        }
-
-        /// <summary>
-        /// 鑾峰彇Api璇存槑
-        /// </summary>
-        /// <returns></returns>
-        [HttpGet]
-        [Route("System/Base/[action]")]
-        public IActionResult GetDescription()
-        {
-            return Ok((Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof(AssemblyDescriptionAttribute)) as AssemblyDescriptionAttribute).Description);
-        }
-
-        /// <summary>
-        /// 鑾峰彇Api浜у搧
-        /// </summary>
-        /// <returns></returns>
-        [HttpGet]
-        [Route("System/Base/[action]")]
-        public IActionResult GetProduct()
-        {
-            return Ok((Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof(AssemblyProductAttribute)) as AssemblyProductAttribute).Product);
-        }
-
-        /// <summary>
-        /// 鑾峰彇Api浜у搧
-        /// </summary>
-        /// <returns></returns>
-        [HttpGet]
-        [Route("System/Base/[action]")]
-        public IActionResult GetMachineCode()
-        {
-            return Ok(DI.Resolve<IBizContext>().GetMachineCode());
-        }
-
-        /// <summary>
-        /// 鑾峰彇Api浜у搧
-        /// </summary>
-        /// <returns></returns>
-        [HttpGet]
-        [Route("System/Entitys/Get")]
-        public IActionResult GetEntitys(string? Namespace, string? StartWith)
-        {
-            Assembly assembly = Assembly.Load("Tiger.Model");
-            Type[] types = assembly.GetTypes();
-            var entitys = types.Where(q => q.IsClass && q.GetInterfaces().Contains(typeof(Model.iEntity)) //&& q.Namespace != "Tiger.Model.Minsun"
-                                                       && (Namespace.IsNullOrEmpty() || q.Namespace == Namespace) 
-                                                       && (StartWith.IsNullOrEmpty() || q.Name.StartsWith(StartWith))
-                                                       && !q.GetCustomAttributes(typeof(EntityBase), false).Any()).ToList();
-            var data = new
-            {
-                Total = entitys.Count,
-                Data = entitys.Select(q => new
-                {
-                    q.FullName,
-                    q.Namespace,
-                    q.Name,
-                    DisplayName = (q.GetCustomAttribute(typeof(DisplayNameAttribute)) as DisplayNameAttribute)?.DisplayName,
-                    Properties = q.GetProperties().Select(p => new { 
-                        p.Name, 
-                        DisplayName = (p.GetCustomAttribute(typeof(DisplayNameAttribute)) as DisplayNameAttribute)?.DisplayName,
-                        Type = p.PropertyType.Name }).ToList()
-                })
-            };
-            return Ok(data);
-        }
-
-        /// <summary>
-        /// GetCertification(ApiAction)
-        /// 鍦ㄦ敞鍐岃〃HKEY_LOCAL_MACHINE\SOFTWARE\TigerClouds鑺傜偣涓鍙栧瘑閽ヨ瘉涔�
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        [Route("System/Authorization/[action]")]
-        public IActionResult GetCertification([FromBody] ApiAction action)
-        {
-            ApiAction response;
-            try
-            {
-                var cer = DI.Resolve<IBizContext>().GetTigerActive().GetCertification();
-                response = action.GetResponse(new ApiAction(cer.IsNullOrEmpty() ? "鏈壘鍒板瘑閽ヨ瘉涔�" : "鑾峰彇瀵嗛挜璇佷功鎴愬姛", cer));
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex, "鑾峰彇瀵嗛挜璇佷功寮傚父", null);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// SetCertification(ApiAction(Data:key))
-        /// 鍦ㄦ敞鍐岃〃HKEY_LOCAL_MACHINE\SOFTWARE\TigerClouds鑺傜偣涓啓鍏ュ瘑閽ヨ瘉涔�
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        [Route("System/Authorization/[action]")]
-        public IActionResult SetCertification([FromBody] ApiAction action)
-        {
-            ApiAction response;
-            try
-            {
-                DI.Resolve<IBizContext>().GetTigerActive().SetCertification(action.Data?.ToString());
-                response = action.GetResponse(new ApiAction("鍐欏叆瀵嗛挜璇佷功鎴愬姛"));
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex, "鍐欏叆瀵嗛挜璇佷功寮傚父", null);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// GetActivationCode(ApiAction)
-        /// 鍦ㄦ敞鍐岃〃HKEY_LOCAL_MACHINE\SOFTWARE\TigerClouds鑺傜偣涓鍙栨縺娲荤爜
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        [Route("System/Authorization/[action]")]
-        public IActionResult GetActivationCode([FromBody] ApiAction action)
-        {
-            ApiAction response;
-            try
-            {
-                var cer = DI.Resolve<IBizContext>().GetTigerActive().GetActivationCode();
-                response = action.GetResponse(new ApiAction(cer.IsNullOrEmpty() ? "鏈壘鍒版縺娲荤爜" : "鑾峰彇婵�娲荤爜鎴愬姛", cer));
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex, "鑾峰彇婵�娲荤爜寮傚父", null);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// SetActivationCode(ApiAction(Data:code))
-        /// 鍦ㄦ敞鍐岃〃HKEY_LOCAL_MACHINE\SOFTWARE\TigerClouds鑺傜偣涓啓鍏ユ縺娲荤爜
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        [Route("System/Authorization/[action]")]
-        public IActionResult SetActivationCode([FromBody] ApiAction action)
-        {
-            ApiAction response;
-            try
-            {
-                DI.Resolve<IBizContext>().GetTigerActive().SetActivationCode(action.Data?.ToString());
-                response = action.GetResponse(new ApiAction("鍐欏叆婵�娲荤爜鎴愬姛"));
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex, "鍐欏叆婵�娲荤爜寮傚父", null);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// GetCurLicense(ApiAction)
-        /// 鑾峰彇璁稿彲淇℃伅
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        [Route("System/Authorization/[action]")]
-        public IActionResult GetCurLicense([FromBody] ApiAction action)
-        {
-            ApiAction response;
-            try
-            {
-                response = action.GetResponse("鑾峰彇璁稿彲淇℃伅鎴愬姛", data: DI.Resolve<IBizContext>().GetTigerActive().GetCurLicense());
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex, "鑾峰彇璁稿彲淇℃伅寮傚父", null);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// Active(ApiAction(Data:activationCode))
-        /// 婵�娲籄pi
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        [Route("System/Authorization/[action]")]
-        public IActionResult Active([FromBody] ApiAction action)
-        {
-            ApiAction response;
-            try
-            {
-                response = action.GetResponse(DI.Resolve<IBizContext>().GetTigerActive().Active(action.Data?.ToString()));
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex, "婵�娲籄pi寮傚父");
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// Verify(ApiAction)
-        /// 楠岃瘉Api鏄惁宸叉縺娲�
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        [Route("System/Authorization/[action]")]
-        public IActionResult Verify([FromBody] ApiAction action)
-        {
-            ApiAction response;
-            try
-            {
-                response = action.GetResponse(DI.Resolve<IBizContext>().GetTigerActive().Verify());
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex, "楠岃瘉Api鏄惁宸叉縺娲诲紓甯�");
-            }
-            return Ok(response);
-        }
-
-        #region Function
-        /// <summary>
-        /// 鑾峰彇鍒版枃浠舵祦缁撴灉
-        /// </summary>
-        /// <param name="fileInfo">FileInfo鏂囦欢</param>
-        /// <returns>杩斿洖FileStreamResult</returns>
-        private async Task<IActionResult> GetFileStreamResultAsync(FileInfo fileInfo)
-        {
-            if (fileInfo == null) return NotFound();
-
-            var memoryStream = new MemoryStream();
-            using (var stream = new FileStream(fileInfo.FullName, FileMode.Open))
-            {
-                await stream.CopyToAsync(memoryStream);
-            }
-            memoryStream.Seek(0, SeekOrigin.Begin);
-
-            //鏂囦欢鍚嶅繀椤荤紪鐮侊紝鍚﹀垯浼氭湁鐗规畩瀛楃(濡備腑鏂�)鏃犳硶鍦ㄦ涓嬭浇銆�
-            string encodeFilename = System.Net.WebUtility.UrlEncode(fileInfo.Name);
-            Response.Headers.Add("Content-Disposition", "attachment; filename=" + encodeFilename);
-            return new FileStreamResult(memoryStream, "application/octet-stream");//鏂囦欢娴佹柟寮忥紝鎸囧畾鏂囦欢娴佸搴旂殑ContenType銆�
-        }
-
-        /// <summary>
-        /// 鑾峰彇鍒版枃浠舵祦缁撴灉
-        /// </summary>
-        /// <param name="fileInfo">FileInfo鏂囦欢</param>
-        /// <returns>杩斿洖FileStreamResult</returns>
-        private IActionResult GetFileStreamResult(FileInfo fileInfo)
-        {
-            if (fileInfo == null) return NotFound();
-
-            var memoryStream = new MemoryStream();
-            using (var stream = new FileStream(fileInfo.FullName, FileMode.Open))
-            {
-                stream.CopyTo(memoryStream);
-            }
-            memoryStream.Seek(0, SeekOrigin.Begin);
-
-            //鏂囦欢鍚嶅繀椤荤紪鐮侊紝鍚﹀垯浼氭湁鐗规畩瀛楃(濡備腑鏂�)鏃犳硶鍦ㄦ涓嬭浇銆�
-            string encodeFilename = System.Net.WebUtility.UrlEncode(fileInfo.Name);
-            Response.Headers.Add("Content-Disposition", "attachment; filename=" + encodeFilename);
-            return new FileStreamResult(memoryStream, "application/octet-stream");//鏂囦欢娴佹柟寮忥紝鎸囧畾鏂囦欢娴佸搴旂殑ContenType銆�
-        }
-
-        /// <summary>
-        /// 鍒嗘涓嬭浇鏁版嵁
-        /// </summary>
-        /// <param name="fileInfo">FileInfo鏂囦欢</param>
-        /// <returns>杩斿洖鍝嶅簲缁撴灉</returns>
-        private async Task<IActionResult> SegmentDownloadFileAsync(FileInfo fileInfo)
-        {
-            if (fileInfo == null) return NotFound();
-
-            int index = 0;
-
-            using (FileStream fs = new FileStream(fileInfo.FullName, FileMode.Open))
-            {
-                if (fs.Length <= 0)
-                {
-                    return Ok(new { code = -1, msg = "鏂囦欢灏氭湭澶勭悊" });
-                }
-                int shardSize = 1 * 1024 * 1024;//涓�娆�1M
-                int count = (int)(fs.Length / shardSize);
-
-                if ((fs.Length % shardSize) > 0)
-                {
-                    count += 1;
-                }
-                if (index > count - 1)
-                {
-                    return Ok(new { code = -1, msg = "鏃犳晥鐨勪笅鏍�" });
-                }
-
-                fs.Seek(index * shardSize, SeekOrigin.Begin);
-
-                if (index == count - 1)
-                {
-                    //鏈�鍚庝竴鐗� = 鎬婚暱 - (姣忔鐗囨澶у皬 * 宸蹭笅杞界墖娈典釜鏁�)
-                    shardSize = (int)(fs.Length - (shardSize * index));
-                }
-                byte[] datas = new byte[shardSize];
-                await fs.ReadAsync(datas.AsMemory(0, datas.Length));
-
-                return File(datas, "application/octet-stream");
-            }
-        }
-
-        /// <summary>
-        /// 鍒嗘涓嬭浇鏁版嵁
-        /// </summary>
-        /// <param name="fileInfo">FileInfo鏂囦欢</param>
-        /// <returns>杩斿洖鍝嶅簲缁撴灉</returns>
-        private IActionResult SegmentDownloadFile(FileInfo fileInfo)
-        {
-            if (fileInfo == null) return NotFound();
-
-            int index = 0;
-
-            using (FileStream fs = new FileStream(fileInfo.FullName, FileMode.Open))
-            {
-                if (fs.Length <= 0)
-                {
-                    return Ok(new { code = -1, msg = "鏂囦欢灏氭湭澶勭悊" });
-                }
-                int shardSize = 1 * 1024 * 1024;//涓�娆�1M
-                int count = (int)(fs.Length / shardSize);
-
-                if ((fs.Length % shardSize) > 0)
-                {
-                    count += 1;
-                }
-                if (index > count - 1)
-                {
-                    return Ok(new { code = -1, msg = "鏃犳晥鐨勪笅鏍�" });
-                }
-
-                fs.Seek(index * shardSize, SeekOrigin.Begin);
-
-                if (index == count - 1)
-                {
-                    //鏈�鍚庝竴鐗� = 鎬婚暱 - (姣忔鐗囨澶у皬 * 宸蹭笅杞界墖娈典釜鏁�)
-                    shardSize = (int)(fs.Length - (shardSize * index));
-                }
-                byte[] datas = new byte[shardSize];
-                fs.Read(datas, 0, datas.Length);
-
-                return File(datas, "application/octet-stream");
-            }
-        }
-        #endregion
-
-    }//endClass
-}
\ No newline at end of file
diff --git a/Tiger.Controllers.System/Controllers/Base/UpgradeController.cs b/Tiger.Controllers.System/Controllers/Base/UpgradeController.cs
deleted file mode 100644
index a47b8e3..0000000
--- a/Tiger.Controllers.System/Controllers/Base/UpgradeController.cs
+++ /dev/null
@@ -1,335 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using Rhea.Common;
-using Microsoft.AspNetCore.Cors;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Newtonsoft.Json;
-using System.IO;
-using ICSharpCode.SharpZipLib.Zip;
-using Tiger.IBusiness;
-
-namespace Tiger.Api.Controllers.Base
-{
-    /// <summary>
-    /// Api鑷姩鏇存柊鏈嶅姟
-    /// </summary>
-    [Route("api/[controller]/[action]")]
-    [EnableCors("Any")]
-    [ApiController]
-    public partial class UpgradeController : ControllerBase
-    {
-        /// <summary>
-        /// 鑾峰彇鏂囦欢鍒楄〃
-        /// </summary>
-        /// <param name="path"></param>
-        /// <returns></returns>
-        [HttpGet]
-        public async Task<IActionResult> GetFileListAsync(string? path)
-        {
-            var filePath = UpgradeFileSystem.UpgradeRootPath + path;
-            var allFiles = new List<UpgradeFileSystem>();
-            await Task.Run(() =>
-            {
-                if (Directory.Exists(filePath))
-                {
-                    allFiles = new UpgradeFileSystem(new DirectoryInfo(filePath)).ChildNodes;
-                }
-                else if (System.IO.File.Exists(filePath))
-                {
-                    allFiles.Add(new UpgradeFileSystem(new FileInfo(filePath)));
-                }
-            });
-            return Ok(allFiles);
-        }
-
-        /// <summary>
-        /// 鑾峰彇鏂囦欢
-        /// </summary>
-        /// <param name="path"></param>
-        /// <returns></returns>
-        [HttpGet]
-        public async Task<IActionResult> GetFileAsync(string? path)
-        {
-            var filePath = UpgradeFileSystem.UpgradeRootPath + path;
-            if (System.IO.File.Exists(filePath))
-            {
-                return await GetFileStreamResultAsync(new FileInfo(filePath));
-                //return await SegmentDownloadFileAsync(new FileInfo(filePath));
-            }
-            return Ok(null);
-        }
-
-        /// <summary>
-        /// 鑾峰彇..\AutoUpgrade.exe
-        /// </summary>
-        /// <param name="path"></param>
-        /// <returns></returns>
-        [HttpGet]
-        public async Task<IActionResult> GetAutoUpgradeProgramAsync()
-        {
-            var filePath = UpgradeFileSystem.UpgradeRootPath + "AutoUpgrade.exe";
-            if (System.IO.File.Exists(filePath))
-            {
-                return await GetFileStreamResultAsync(new FileInfo(filePath));
-            }
-            return Ok($"璇峰厛鎶夾utoUpgrade.exe鏀惧埌鏇存柊鐩綍鐨刐{UpgradeFileSystem.UpgradeRootPath}]鏍圭洰褰曚笅");
-        }
-
-        /// <summary>
-        /// 鑾峰彇..\AutoUpgrade.exe.config
-        /// </summary>
-        /// <param name="path"></param>
-        /// <returns></returns>
-        [HttpGet]
-        public async Task<IActionResult> GetAutoUpgradeConfigAsync()
-        {
-            var filePath = UpgradeFileSystem.UpgradeRootPath + "AutoUpgrade.exe.config";
-            if (System.IO.File.Exists(filePath))
-            {
-                return await GetFileStreamResultAsync(new FileInfo(filePath));
-            }
-            return Ok($"璇峰厛鎶夾utoUpgrade.exe.config鏀惧埌鏇存柊鐩綍鐨刐{UpgradeFileSystem.UpgradeRootPath}]鏍圭洰褰曚笅");
-        }
-
-        /// <summary>
-        /// 涓婁紶鏂囦欢
-        /// </summary>
-        /// <param name="fileName"></param>
-        /// <param name="filePath"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public JsonResult UploadFile([FromForm] string fileName, [FromForm] string filePath)
-        {
-            var files = Request.Form.Files;
-            var msgResult = new List<string>();
-            if (files.Count > 0)
-            {
-                foreach (var formFile in files)
-                {
-                    var fullPath = $"{filePath}\\{fileName}";
-                    //save
-                    using var stream = new FileStream(fullPath, FileMode.Create);
-                    formFile.CopyTo(stream);
-                    stream.Close();
-                    stream.Dispose();
-                    //unzip
-                    var unZipDir = fullPath.Replace(Path.GetFileName(fullPath), "").Trim('\\');
-                    //System.IO.Compression.ZipFile.ExtractToDirectory(fullPath, unZipDir);
-                    var isOK = UnZip(fullPath, unZipDir);
-                    //delete compress package
-                    System.IO.File.Delete(fullPath);
-                    msgResult.Add($"銆恵fileName}銆戜笂浼犳垚鍔燂紝{(isOK ? "瑙e帇鎴愬姛" : "瑙e帇澶辫触")}");
-                }
-            }
-            return new JsonResult(msgResult);
-        }
-
-        #region Function
-        /// <summary>
-        /// 鑾峰彇鍒版枃浠舵祦缁撴灉
-        /// </summary>
-        /// <param name="fileInfo">FileInfo鏂囦欢</param>
-        /// <returns>杩斿洖FileStreamResult</returns>
-        private async Task<IActionResult> GetFileStreamResultAsync(FileInfo fileInfo)
-        {
-            if (fileInfo == null) return NotFound();
-
-            var memoryStream = new MemoryStream();
-            using (var stream = new FileStream(fileInfo.FullName, FileMode.Open))
-            {
-                await stream.CopyToAsync(memoryStream);
-            }
-            memoryStream.Seek(0, SeekOrigin.Begin);
-
-            //鏂囦欢鍚嶅繀椤荤紪鐮侊紝鍚﹀垯浼氭湁鐗规畩瀛楃(濡備腑鏂�)鏃犳硶鍦ㄦ涓嬭浇銆�
-            string encodeFilename = System.Net.WebUtility.UrlEncode(fileInfo.Name);
-            Response.Headers.Add("Content-Disposition", "attachment; filename=" + encodeFilename);
-            return new FileStreamResult(memoryStream, "application/octet-stream");//鏂囦欢娴佹柟寮忥紝鎸囧畾鏂囦欢娴佸搴旂殑ContenType銆�
-        }
-
-        /// <summary>
-        /// 鑾峰彇鍒版枃浠舵祦缁撴灉
-        /// </summary>
-        /// <param name="fileInfo">FileInfo鏂囦欢</param>
-        /// <returns>杩斿洖FileStreamResult</returns>
-        private IActionResult GetFileStreamResult(FileInfo fileInfo)
-        {
-            if (fileInfo == null) return NotFound();
-
-            var memoryStream = new MemoryStream();
-            using (var stream = new FileStream(fileInfo.FullName, FileMode.Open))
-            {
-                stream.CopyTo(memoryStream);
-            }
-            memoryStream.Seek(0, SeekOrigin.Begin);
-
-            //鏂囦欢鍚嶅繀椤荤紪鐮侊紝鍚﹀垯浼氭湁鐗规畩瀛楃(濡備腑鏂�)鏃犳硶鍦ㄦ涓嬭浇銆�
-            string encodeFilename = System.Net.WebUtility.UrlEncode(fileInfo.Name);
-            Response.Headers.Add("Content-Disposition", "attachment; filename=" + encodeFilename);
-            return new FileStreamResult(memoryStream, "application/octet-stream");//鏂囦欢娴佹柟寮忥紝鎸囧畾鏂囦欢娴佸搴旂殑ContenType銆�
-        }
-
-        /// <summary>
-        /// 寮傛鍒嗘涓嬭浇鏁版嵁
-        /// </summary>
-        /// <param name="fileInfo">FileInfo鏂囦欢</param>
-        /// <returns>杩斿洖鍝嶅簲缁撴灉</returns>
-        private async Task<IActionResult> SegmentDownloadFileAsync(FileInfo fileInfo)
-        {
-            if (fileInfo == null) return NotFound();
-
-            int index = 0;
-
-            using (FileStream fs = new FileStream(fileInfo.FullName, FileMode.Open))
-            {
-                if (fs.Length <= 0)
-                {
-                    return Ok(new { code = -1, msg = "鏂囦欢灏氭湭澶勭悊" });
-                }
-                int shardSize = 1 * 1024 * 1024;//涓�娆�1M
-                int count = (int)(fs.Length / shardSize);
-
-                if ((fs.Length % shardSize) > 0)
-                {
-                    count += 1;
-                }
-                if (index > count - 1)
-                {
-                    return Ok(new { code = -1, msg = "鏃犳晥鐨勪笅鏍�" });
-                }
-
-                fs.Seek(index * shardSize, SeekOrigin.Begin);
-
-                if (index == count - 1)
-                {
-                    //鏈�鍚庝竴鐗� = 鎬婚暱 - (姣忔鐗囨澶у皬 * 宸蹭笅杞界墖娈典釜鏁�)
-                    shardSize = (int)(fs.Length - (shardSize * index));
-                }
-                byte[] datas = new byte[shardSize];
-                await fs.ReadAsync(datas.AsMemory(0, datas.Length));
-
-                return File(datas, "application/octet-stream");
-            }
-        }
-
-        /// <summary>
-        /// 鍒嗘涓嬭浇鏁版嵁
-        /// </summary>
-        /// <param name="fileInfo">FileInfo鏂囦欢</param>
-        /// <returns>杩斿洖鍝嶅簲缁撴灉</returns>
-        private IActionResult SegmentDownloadFile(FileInfo fileInfo)
-        {
-            if (fileInfo == null) return NotFound();
-
-            int index = 0;
-
-            using (FileStream fs = new FileStream(fileInfo.FullName, FileMode.Open))
-            {
-                if (fs.Length <= 0)
-                {
-                    return Ok(new { code = -1, msg = "鏂囦欢灏氭湭澶勭悊" });
-                }
-                int shardSize = 1 * 1024 * 1024;//涓�娆�1M
-                int count = (int)(fs.Length / shardSize);
-
-                if ((fs.Length % shardSize) > 0)
-                {
-                    count += 1;
-                }
-                if (index > count - 1)
-                {
-                    return Ok(new { code = -1, msg = "鏃犳晥鐨勪笅鏍�" });
-                }
-
-                fs.Seek(index * shardSize, SeekOrigin.Begin);
-
-                if (index == count - 1)
-                {
-                    //鏈�鍚庝竴鐗� = 鎬婚暱 - (姣忔鐗囨澶у皬 * 宸蹭笅杞界墖娈典釜鏁�)
-                    shardSize = (int)(fs.Length - (shardSize * index));
-                }
-                byte[] datas = new byte[shardSize];
-                fs.Read(datas, 0, datas.Length);
-
-                return File(datas, "application/octet-stream");
-            }
-        }
-        /// <summary>  
-        /// 鍔熻兘锛氳В鍘媧ip鏍煎紡鐨勬枃浠躲��  
-        /// </summary>  
-        /// <param name="zipFilePath">鍘嬬缉鏂囦欢璺緞</param>  
-        /// <param name="unZipDir">瑙e帇鏂囦欢瀛樻斁璺緞,涓虹┖鏃堕粯璁や笌鍘嬬缉鏂囦欢鍚屼竴绾х洰褰曚笅锛岃窡鍘嬬缉鏂囦欢鍚屽悕鐨勬枃浠跺す</param>  
-        /// <returns>瑙e帇鏄惁鎴愬姛</returns>  
-        private bool UnZip(string zipFilePath, string unZipDir)
-        {
-            try
-            {
-                if (zipFilePath == string.Empty)
-                {
-                    throw new Exception("鍘嬬缉鏂囦欢涓嶈兘涓虹┖锛�");
-                }
-                if (!System.IO.File.Exists(zipFilePath))
-                {
-                    throw new FileNotFoundException("鍘嬬缉鏂囦欢涓嶅瓨鍦紒");
-                }
-                //瑙e帇鏂囦欢澶逛负绌烘椂榛樿涓庡帇缂╂枃浠跺悓涓�绾х洰褰曚笅锛岃窡鍘嬬缉鏂囦欢鍚屽悕鐨勬枃浠跺す  
-                if (unZipDir == string.Empty)
-                    unZipDir = zipFilePath.Replace(Path.GetFileName(zipFilePath), Path.GetFileNameWithoutExtension(zipFilePath));
-                if (!unZipDir.EndsWith("/"))
-                    unZipDir += "/";
-                if (!Directory.Exists(unZipDir))
-                    Directory.CreateDirectory(unZipDir);
-                using (var s = new ZipInputStream(System.IO.File.OpenRead(zipFilePath)))
-                {
-
-                    ZipEntry theEntry;
-                    while ((theEntry = s.GetNextEntry()) != null)
-                    {
-                        string directoryName = Path.GetDirectoryName(theEntry.Name);
-                        string fileName = Path.GetFileName(theEntry.Name);
-                        if (!string.IsNullOrEmpty(directoryName))
-                        {
-                            Directory.CreateDirectory(unZipDir + directoryName);
-                        }
-                        if (directoryName != null && !directoryName.EndsWith("/"))
-                        {
-                        }
-                        if (fileName != string.Empty)
-                        {
-                            using FileStream streamWriter = System.IO.File.Create(unZipDir + theEntry.Name);
-
-                            int size;
-                            byte[] data = new byte[2048];
-                            while (true)
-                            {
-                                size = s.Read(data, 0, data.Length);
-                                if (size > 0)
-                                {
-                                    streamWriter.Write(data, 0, size);
-                                }
-                                else
-                                {
-                                    break;
-                                }
-                            }
-                        }
-                    }
-                }
-                return true;
-            }
-            catch (Exception ex)
-            {
-                //_logger.LogError(ex, $"瑙e帇zip鏍煎紡鐨勬枃浠跺け璐ワ細{zipFilePath}");
-                return false;
-            }
-        }
-
-
-        #endregion
-
-    }//endClass
-
-}
\ No newline at end of file
diff --git a/Tiger.Controllers.System/Controllers/SYS/SYSController.Menu.cs b/Tiger.Controllers.System/Controllers/SYS/SYSController.Menu.cs
deleted file mode 100644
index 67ba62e..0000000
--- a/Tiger.Controllers.System/Controllers/SYS/SYSController.Menu.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-锘縰sing Rhea.Common;
-using Microsoft.AspNetCore.Mvc;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using Tiger.Model;
-using Tiger.IBusiness;
-
-namespace Tiger.Api.Controllers.SYS
-{
-    public partial class SYSController : ControllerBase
-    {
-        [HttpGet]
-        public async Task<IActionResult> getMenuList(string? userId,string? rootCode)
-        {
-            return Ok(await DI.Resolve<ISystem>().getMenuList(userId, rootCode));
-        }
-
-        [HttpGet]
-        public async Task<IActionResult> getMenuListAll(string? menuName, string? status)
-        {
-            return Ok(await DI.Resolve<ISystem>().getMenuListAll(menuName, status));
-        }
-
-        [HttpPost]
-        public async Task<IActionResult> SaveMenuAsync([FromBody] ApiAction<SaveMenuParams> action)
-        {
-            return Ok(await DI.Resolve<ISystem>().SaveMenu(action));
-        }
-    }
-}
diff --git a/Tiger.Controllers.System/Controllers/SYS/SYSController.Org.cs b/Tiger.Controllers.System/Controllers/SYS/SYSController.Org.cs
deleted file mode 100644
index eaf10d1..0000000
--- a/Tiger.Controllers.System/Controllers/SYS/SYSController.Org.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-锘縰sing Rhea.Common;
-using Microsoft.AspNetCore.Mvc;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using Tiger.Model;
-using Tiger.IBusiness;
-
-namespace Tiger.Api.Controllers.SYS
-{
-    public partial class SYSController : ControllerBase
-    {
-        /// <summary>
-        /// 鑾峰彇缁勭粐鏈烘瀯鏍戝舰鍒楄〃
-        /// </summary>
-        /// <param name="deptName"></param>
-        /// <param name="status"></param>
-        /// <returns></returns>
-        [HttpGet]
-        public async Task<IActionResult> getOrgTreeList(string? deptName, string? status)
-        {
-            return Ok(await DI.Resolve<ISystem>().getOrgTreeList(deptName, status));
-        }
-
-        /// <summary>
-        /// 鑾峰彇宸ュ巶鏍戝舰鍒楄〃
-        /// </summary>
-        /// <param name="deptName"></param>
-        /// <param name="status"></param>
-        /// <returns></returns>
-        [HttpGet]
-        public async Task<IActionResult> getProdTreeList(string? deptName)
-        {
-            return Ok(await DI.Resolve<ISystem>().getProdTreeList(deptName));
-        }
-    }
-}
diff --git a/Tiger.Controllers.System/Controllers/SYS/SYSController.Role.cs b/Tiger.Controllers.System/Controllers/SYS/SYSController.Role.cs
deleted file mode 100644
index 7b9c0bb..0000000
--- a/Tiger.Controllers.System/Controllers/SYS/SYSController.Role.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-锘縰sing Rhea.Common;
-using Microsoft.AspNetCore.Mvc;
-using Tiger.IBusiness;
-using System.Threading.Tasks;
-using Tiger.Model;
-
-namespace Tiger.Api.Controllers.SYS
-{
-    public partial class SYSController : ControllerBase
-    {
-        [HttpPost]
-        public async Task<IActionResult> SaveRoleAsync([FromBody] ApiAction<SaveRoleStrictlyParams> action)
-        {
-            return Ok(DI.Resolve<ISystem>().SaveRole(action));
-        }
-
-        [HttpPost]
-        public async Task<IActionResult> SetRoleToGroupAsync([FromBody] ApiAction<SpecificEntity> action)
-        {
-            ApiAction response;
-            try
-            {
-                response = action.GetResponse(await DI.Resolve<ISystem>().SetRoleToGroupAsync(action.Data?.Extend1, action.Data?.Extend2));
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-    }
-}
diff --git a/Tiger.Controllers.System/Controllers/SYS/SYSController.Sys_Params.cs b/Tiger.Controllers.System/Controllers/SYS/SYSController.Sys_Params.cs
deleted file mode 100644
index 3763981..0000000
--- a/Tiger.Controllers.System/Controllers/SYS/SYSController.Sys_Params.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-锘縰sing Rhea.Common;
-using Microsoft.AspNetCore.Mvc;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using Tiger.Model;
-using Tiger.IBusiness;
-
-namespace Tiger.Api.Controllers.SYS
-{
-    public partial class SYSController : ControllerBase
-    {
-        /// <summary>
-        /// 鑾峰彇鍙傛暟
-        /// </summary>
-        /// <param name="group"></param>
-        /// <param name="code"></param>
-        /// <returns></returns>
-        [HttpGet]
-        public async Task<IActionResult> getSysParam(string? group, string? code)
-        {
-            return Ok(await DI.Resolve<ISystem>().getSysParam(group, code));
-        }
-    }
-}
diff --git a/Tiger.Controllers.System/Controllers/SYS/SYSController.User.cs b/Tiger.Controllers.System/Controllers/SYS/SYSController.User.cs
deleted file mode 100644
index 8cfe3fa..0000000
--- a/Tiger.Controllers.System/Controllers/SYS/SYSController.User.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-锘縰sing Rhea.Common;
-using Microsoft.AspNetCore.Mvc;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using Tiger.IBusiness;
-
-namespace Tiger.Api.Controllers.SYS
-{
-    /// <summary>
-    /// 鐢ㄦ埛缁勭浉鍏�
-    /// </summary>
-    public partial class SYSController : ControllerBase
-    {
-        /// <summary>
-        /// SetSysUser(ApiAction) 锛氫繚瀛樼敤鎴风粍涓殑鐢ㄦ埛鍒楄〃
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> SetSysUserToGroup([FromBody] ApiAction<SpecificEntity> action)
-        {
-            ApiAction response;
-            try
-            {
-                response = action.GetResponse(await DI.Resolve<ISystem>().SetSysUserToGroupAsync(action.Data?.Extend1, action.Data?.Extend2, action.Data?.Extend3));
-            }
-            catch (System.Exception ex)
-            {
-                response = action.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-    }
-
-    public class SpecificEntity
-    {
-        public string EntityStr { get; set; }
-        public string ID { get; set; }
-        public string UserId { set; get; }
-        public string Extend1 { set; get; }
-        public string Extend2 { set; get; }
-        public string Extend3 { set; get; }
-    }
-}
diff --git a/Tiger.Controllers.System/Controllers/SYS/SYSController.cs b/Tiger.Controllers.System/Controllers/SYS/SYSController.cs
deleted file mode 100644
index 1d743fa..0000000
--- a/Tiger.Controllers.System/Controllers/SYS/SYSController.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-锘縰sing Microsoft.AspNetCore.Cors;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace Tiger.Api.Controllers.SYS
-{
-    /// <summary>
-    /// SYSController
-    /// </summary>
-    [Route("api/[controller]/[action]")]
-    [EnableCors("Any")]
-    [ApiController]
-    public partial class SYSController : ControllerBase
-    {
-    }
-}
diff --git a/Tiger.Controllers.System/Controllers/TSK/TskController.Base.cs b/Tiger.Controllers.System/Controllers/TSK/TskController.Base.cs
deleted file mode 100644
index 889ee9a..0000000
--- a/Tiger.Controllers.System/Controllers/TSK/TskController.Base.cs
+++ /dev/null
@@ -1,239 +0,0 @@
-锘縰sing Microsoft.AspNetCore.Mvc;
-using Rhea.Common;
-using Tiger.IBusiness;
-using System.Threading.Tasks;
-using Tiger.Model;
-
-namespace Tiger.Api.Controllers.TSK
-{
-    public partial class TskController : ControllerBase
-    {
-        /// <summary>
-        /// 鏍规嵁Job瀹炰綋鍚嶇О鍜孞ob鍚嶇О娣诲姞浠诲姟
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        [Route("api/[controller]/[action]")]
-        public async Task<IActionResult> AddJob(ApiAction<TskJobParam> action)
-        {
-            ApiAction response = new();
-            try
-            {
-                response = response.GetResponse(DI.Resolve<IBizContext>().GetInterfaceService()?.AddJob(action.NewDataEntity(), action.Data)?? new ApiAction($"浠诲姟鏈惎鐢�", false));
-            }
-            catch (System.Exception ex)
-            {
-                response = response.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-
-        [HttpPost]
-        [Route("api/[controller]/[action]")]
-        public async Task<IActionResult> UpdateJob(ApiAction<TSK_JOB> action)
-        {
-            ApiAction response = new();
-            try
-            {
-                response = response.GetResponse(DI.Resolve<IBizContext>().GetInterfaceService()?.UpdateJob( action.Data)??new ApiAction($"浠诲姟鏈惎鐢�", false));
-            }
-            catch (System.Exception ex)
-            {
-                response = response.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// 鏍规嵁Job鍚嶇О鍚姩浠诲姟
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        [Route("api/[controller]/[action]")]
-        public async Task<IActionResult> StartJob(ApiAction action)
-        {
-            ApiAction response = new();
-            try
-            {
-                DI.Resolve<IBizContext>().GetInterfaceService()?.StartJob(action.Data?.ToString());
-            }
-            catch (System.Exception ex)
-            {
-                response = response.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-        /// <summary>
-        /// 鑾峰彇鍗曚釜浣滀笟
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        [Route("api/[controller]/[action]")]
-        public async Task<IActionResult> GetJob(ApiAction action)
-        {
-            ApiAction response = new();
-            try
-            {
-                response = response.GetResponse(DI.Resolve<IBizContext>().GetInterfaceService()?.GetJob(action.Data?.ToString()));
-            }
-            catch (System.Exception ex)
-            {
-                response = response.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-        /// <summary>
-        /// 鑾峰彇鎵�鏈変綔涓�
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        [Route("api/[controller]/[action]")]
-        public async Task<IActionResult> GetJobs(ApiAction action)
-        {
-            ApiAction response = new();
-            try
-            {
-                response = response.GetResponse(DI.Resolve<IBizContext>().GetInterfaceService()?.GetJobs());
-            }
-            catch (System.Exception ex)
-            {
-                response = response.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// 鏆傚仠浣滀笟
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        [Route("api/[controller]/[action]")]
-        public async Task<IActionResult> PauseJob(ApiAction action)
-        {
-            ApiAction response = new();
-            try
-            {
-                DI.Resolve<IBizContext>().GetInterfaceService()?.PauseJob(action.Data?.ToString());
-            }
-            catch (System.Exception ex)
-            {
-                response = response.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// 鍒犻櫎浣滀笟
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        [Route("api/[controller]/[action]")]
-        public async Task<IActionResult> RemoveJob(ApiAction action)
-        {
-            ApiAction response = new();
-            try
-            {
-                DI.Resolve<IBizContext>().GetInterfaceService()?.RemoveJob(action.Data?.ToString());
-            }
-            catch (System.Exception ex)
-            {
-                response = response.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// 淇濆瓨浣滀笟
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        [Route("api/[controller]/[action]")]
-        public async Task<IActionResult> SaveTskJob(ApiAction<TskParameter> action)
-        {
-            ApiAction response = new();
-            try
-            {
-                response = response.GetResponse(DI.Resolve<ITskJob>().SaveTskJob(action.Data));
-            }
-            catch (System.Exception ex)
-            {
-                response = response.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-
-        #region 鏂扮増璁″垝浠诲姟
-
-
-        /// <summary>
-        /// 鏍规嵁Job瀹炰綋鍚嶇О鍜孞ob鍚嶇О娣诲姞浠诲姟
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        [Route("api/[controller]/[action]")]
-        public async Task<IActionResult> AddTskJob(ApiAction<FluentJobParam> action)
-        {
-            ApiAction response = new();
-            try
-            {
-                response = response.GetResponse(DI.Resolve<IBizContext>().GetInterfaceService()?.AddTskJob(action.NewDataEntity(), action.Data) ?? new ApiAction($"浠诲姟鏈惎鐢�", false));
-            }
-            catch (System.Exception ex)
-            {
-                response = response.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// 绔嬪嵆杩愯浠诲姟
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        [Route("api/[controller]/[action]")]
-        public async Task<IActionResult> ImmediateRun(ApiAction action)
-        {
-            ApiAction response = new();
-            try
-            {
-                response = response.GetResponse(DI.Resolve<IBizContext>().GetInterfaceService()?.ImmediateRun(action.NewDataEntity(), action.Data?.ToString()) ?? new ApiAction($"浠诲姟鏈惎鐢�", false));
-            }
-            catch (System.Exception ex)
-            {
-                response = response.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-
-        /// <summary>
-        /// 鍒犻櫎浣滀笟
-        /// </summary>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        [HttpPost]
-        [Route("api/[controller]/[action]")]
-        public async Task<IActionResult> RemoveTskJob(ApiAction action)
-        {
-            ApiAction response = new();
-            try
-            {
-                DI.Resolve<IBizContext>().GetInterfaceService()?.RemovefJob(action.Data?.ToString());
-            }
-            catch (System.Exception ex)
-            {
-                response = response.GetResponse().CatchExceptionWithLog(ex);
-            }
-            return Ok(response);
-        }
-        #endregion
-    }
-}
diff --git a/Tiger.Controllers.System/Controllers/TSK/TskController.QQTSrm.cs b/Tiger.Controllers.System/Controllers/TSK/TskController.QQTSrm.cs
deleted file mode 100644
index be70f30..0000000
--- a/Tiger.Controllers.System/Controllers/TSK/TskController.QQTSrm.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-锘縰sing Microsoft.AspNetCore.Mvc;
-using Rhea.Common;
-using Sundial;
-using System;
-using System.Threading.Tasks;
-using Tiger.Model;
-
-namespace Tiger.Api.Controllers.TSK
-{
-    public partial class TskController : ControllerBase
-    {
-    }
-}
diff --git a/Tiger.Controllers.System/Controllers/TSK/TskController.cs b/Tiger.Controllers.System/Controllers/TSK/TskController.cs
deleted file mode 100644
index dac5d32..0000000
--- a/Tiger.Controllers.System/Controllers/TSK/TskController.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using Rhea.Common;
-using Tiger.Model;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.AspNetCore.Cors;
-
-namespace Tiger.Api.Controllers.TSK
-{
-    /// <summary>
-    /// 璁″垝浠诲姟
-    /// </summary>
-    [EnableCors("Any")]
-    [ApiController]
-    public partial class TskController : ControllerBase
-    {
-
-    }
-}
diff --git a/Tiger.Controllers.System/Tiger.Controllers.System.csproj b/Tiger.Controllers.System/Tiger.Controllers.System.csproj
deleted file mode 100644
index 30360a6..0000000
--- a/Tiger.Controllers.System/Tiger.Controllers.System.csproj
+++ /dev/null
@@ -1,24 +0,0 @@
-锘�<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
-    <ImplicitUsings>enable</ImplicitUsings>
-    <Nullable>enable</Nullable>
-    <Authors>TigerClouds Team</Authors>
-    <Company>娣卞湷甯傞挍鏍间簯绉戞妧鏈夐檺鍏徃 (SZ TigerClouds Technology Co.,Ltd.)</Company>
-    <Copyright>Copyright 漏 2020-2025 SZ TigerClouds Technology Co.,Ltd.. All rights reserved.</Copyright>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\Tiger.Api\Tiger.Api.csproj" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <Folder Include="Autofac\" />
-  </ItemGroup>
-
-  <Target Name="PostBuild" AfterTargets="PostBuildEvent">
-    <Exec Command="xcopy /r/y/i $(ProjectDir)$(OutDir)$(AssemblyName).dll $(SolutionDir)Tiger.Api\$(OutDir)&#xD;&#xA;xcopy /r/y/i $(ProjectDir)$(OutDir)$(AssemblyName).pdb $(SolutionDir)Tiger.Api\$(OutDir)" />
-  </Target>
-
-</Project>
diff --git a/Tiger.Core/Tiger.Core.csproj b/Tiger.Core/Tiger.Core.csproj
deleted file mode 100644
index 6e396a2..0000000
--- a/Tiger.Core/Tiger.Core.csproj
+++ /dev/null
@@ -1,15 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
-    <ImplicitUsings>enable</ImplicitUsings>
-    <Nullable>enable</Nullable>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <Reference Include="Tiger.Business">
-      <HintPath>..\Lib\Tiger.Business.dll</HintPath>
-    </Reference>
-  </ItemGroup>
-
-</Project>
diff --git a/Tiger.IBusiness/Common/IBiz.cs b/Tiger.IBusiness/Common/IBiz.cs
deleted file mode 100644
index 13963da..0000000
--- a/Tiger.IBusiness/Common/IBiz.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-锘縰sing Autofac;
-using Rhea.Common;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Tiger.IBusiness
-{
-    public interface IBiz
-    {
-        /// <summary>
-        /// 鏍规嵁鏁版嵁搴撳悕鑾峰彇鏁版嵁搴撳璞�
-        /// </summary>
-        /// <param name="name">閰嶇疆鏂囦欢涓殑鏁版嵁搴撳悕</param>
-        /// <returns></returns>
-        public DbClient DB(string name = "");
-
-        /// <summary>
-        /// 鏍规嵁鏁版嵁搴撳悕鑾峰彇鏁版嵁搴撳熀纭�鏂规硶
-        /// </summary>
-        /// <param name="name">閰嶇疆鏂囦欢涓殑鏁版嵁搴撳悕</param>
-        /// <returns></returns>
-        public IDbBase DbBase(string name = "");
-
-        public void SetContainer(IContainer container);
-    }
-}
diff --git a/Tiger.IBusiness/Common/IBizContext.cs b/Tiger.IBusiness/Common/IBizContext.cs
deleted file mode 100644
index c55ad9d..0000000
--- a/Tiger.IBusiness/Common/IBizContext.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-锘縰sing Autofac;
-using Rhea.Common;
-using Rhea.Common.Authorization;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Tiger.IBusiness
-{
-    public interface IBizContext
-    {
-        /// <summary>
-        /// 褰撳墠椤圭洰
-        /// </summary>
-        public string GetCurrentProject();
-        /// <summary>
-        /// 鏈嶅姟鍣ㄦ満鍣ㄧ爜
-        /// </summary>
-        public string GetMachineCode();
-        /// <summary>
-        /// Tiger 椤圭洰婵�娲诲疄浣�
-        /// </summary>
-        public ITigerActive GetTigerActive();
-        /// <summary>
-        /// 鎺ュ彛浠诲姟鏈嶅姟
-        /// </summary>
-        public IInterfaceService GetInterfaceService();
-    }
-}
diff --git a/Tiger.IBusiness/Common/ICommonImportExcel.cs b/Tiger.IBusiness/Common/ICommonImportExcel.cs
deleted file mode 100644
index ee5d9ce..0000000
--- a/Tiger.IBusiness/Common/ICommonImportExcel.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-锘縰sing Rhea.Common;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Tiger.Model;
-
-namespace Tiger.IBusiness
-{
-    public interface ICommonImportExcel: IImportExcel
-    {
-    }
-}
diff --git a/Tiger.IBusiness/Common/IDbBackup.cs b/Tiger.IBusiness/Common/IDbBackup.cs
deleted file mode 100644
index d1e2cdb..0000000
--- a/Tiger.IBusiness/Common/IDbBackup.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-锘縰sing Rhea.Common;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Tiger.IBusiness
-{
-    public interface IDbBackup
-    {
-        public Task<ApiAction> ExcuteBackupBat(string path);
-    }
-}
diff --git a/Tiger.IBusiness/Common/IDbBase.cs b/Tiger.IBusiness/Common/IDbBase.cs
deleted file mode 100644
index 25b13b1..0000000
--- a/Tiger.IBusiness/Common/IDbBase.cs
+++ /dev/null
@@ -1,344 +0,0 @@
-锘縰sing Rhea.Common;
-using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Management;
-using System.Text;
-using System.Threading.Tasks;
-using Tiger.Model;
-
-namespace Tiger.IBusiness
-{
-    /// <summary>
-    /// 鏁版嵁搴撴搷浣滃熀纭�绫�
-    /// </summary>
-    public interface IDbBase
-    {
-        #region 娣诲姞鎿嶄綔
-        /// <summary>
-        /// 鎶婂崟涓疄浣撳線鏁版嵁搴撴坊鍔犱竴琛屾暟鎹�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="entity">瀹炰綋</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction<T>> AddAsync<T>(T entity, bool isAsync = true) where T : class, new();
-
-        /// <summary>
-        /// 鎶婂疄浣揕ist寰�鏁版嵁搴撴壒閲忔坊鍔犳暟鎹�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="list">瀹炰綋List</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction<T>> AddListAsync<T>(List<T> list, bool isAsync = true) where T : class, new();
-        #endregion
-
-        #region 淇濆瓨鎿嶄綔
-        /// <summary>
-        /// 鎶婂崟涓疄浣撳線鏁版嵁搴撲繚瀛樹竴琛屾暟鎹紝濡傛灉瀛樺湪灏辨洿鏂帮紝涓嶅瓨鍦ㄥ氨鎻掑叆
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="entity">瀹炰綋</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction<T>> SaveAsync<T>(T entity, bool isAsync = true) where T : class, new();
-
-        /// <summary>
-        /// 鎶婂疄浣揕ist寰�鏁版嵁搴撴壒閲忎繚瀛樻暟鎹紝濡傛灉瀛樺湪灏辨洿鏂帮紝涓嶅瓨鍦ㄥ氨鎻掑叆
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="list">瀹炰綋List</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction<T>> SaveListAsync<T>(List<T> list, bool isAsync = true) where T : class, new();
-
-        /// <summary>
-        /// 鎶婂崟涓疄浣撳線鏁版嵁搴撲繚瀛樹竴琛屾暟鎹紝濡傛灉瀛樺湪灏辨洿鏂帮紝涓嶅瓨鍦ㄥ氨鎻掑叆
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="entity">瀹炰綋</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction<T>> StorageableAsync<T>(T entity, bool isAsync = true) where T : class, new();
-
-        /// <summary>
-        /// 鎶婂疄浣揕ist寰�鏁版嵁搴撴壒閲忎繚瀛樻暟鎹紝濡傛灉瀛樺湪灏辨洿鏂帮紝涓嶅瓨鍦ㄥ氨鎻掑叆
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="list">瀹炰綋List</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction<T>> StorageableListAsync<T>(List<T> list, bool isAsync = true) where T : class, new();
-        #endregion
-
-        #region 淇敼鎿嶄綔
-        /// <summary>
-        /// 浠庢暟鎹簱涓慨鏀瑰崟涓疄浣�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="entity">瀹炰綋</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction> UpdateAsync<T>(T entity, bool isAsync = true) where T : class, new();
-
-        /// <summary>
-        /// 鏍规嵁瀹炰綋List鍦ㄦ暟鎹簱鎵归噺淇敼鏁版嵁
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="list">瀹炰綋List</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction> UpdateAsync<T>(List<T> list, bool isAsync = true) where T : class, new();
-
-        /// <summary>
-        /// 鎸塙pdaterAble&lt;T>瀵硅薄浠庢暟鎹簱涓慨鏀瑰涓疄浣撶殑鏌愪簺瀛楁
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="updater">瀹炰綋List</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction> UpdateAsync<T>(UpdateAble<T> updater, bool isAsync = true) where T : class, new();
-        #endregion
-
-        #region 鍒犻櫎鎿嶄綔
-        /// <summary>
-        /// 浠庢暟鎹簱涓垹闄ゅ涓疄浣�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="newEntity">鍥哄畾鐢ㄦ硶锛氶�氳繃ApiAction.NewDataEntity()鍒涘缓ApiAction涓寚瀹氱被鍨嬪璞�</param>
-        /// <param name="primaryKeys">瀹炰綋鐨勪富閿甀D鏁扮粍</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction> DeleteAsync<T>(T newEntity, string[] primaryKeys, bool isAsync = true) where T : class, new();
-
-        /// <summary>
-        /// 浠庢暟鎹簱涓垹闄ゅ崟涓疄浣�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="entity">瀹炰綋</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction> DeleteAsync<T>(T entity, bool isAsync = true) where T : class, new();
-
-        /// <summary>
-        /// 浠庢暟鎹簱涓垹闄ゅ疄浣揕ist
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="list">瀹炰綋List</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction> DeleteAsync<T>(List<T> list, bool isAsync = true) where T : class, new();
-
-        /// <summary>
-        /// 鏍规嵁Where璇彞鍒犻櫎婊¤冻鏉′欢鐨勬暟鎹�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="newEntity">鍥哄畾鐢ㄦ硶锛氶�氳繃ApiAction.NewDataEntity()鍒涘缓ApiAction涓寚瀹氱被鍨嬪璞�</param>
-        /// <param name="where">Where璇彞</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction> DeleteAsync<T>(T newEntity, string where, bool isAsync = true) where T : class, new();
-        #endregion
-
-        #region 鏌ヨ鎿嶄綔
-        /// <summary>
-        /// 浠庢暟鎹簱涓煡璇㈠疄浣�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="newEntity">鍥哄畾鐢ㄦ硶锛氶�氳繃ApiAction.NewDataEntity()鍒涘缓ApiAction涓寚瀹氱被鍨嬪璞�</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction<List<T>>> QueryAsync<T>(T newEntity, bool isAsync = true, bool needInclude = false);
-
-        /// <summary>
-        /// 鏍规嵁Where璇彞浠庢暟鎹簱涓煡璇㈠疄浣�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="newEntity">鍥哄畾鐢ㄦ硶锛氶�氳繃ApiAction.NewDataEntity()鍒涘缓ApiAction涓寚瀹氱被鍨嬪璞�</param>
-        /// <param name="where">Where璇彞</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction<List<T>>> QueryAsync<T>(T newEntity, string where, bool isAsync = true, bool needInclude = false) where T : class, new();
-
-        /// <summary>
-        /// 鎸塒ageAble&lt;T>瀵硅薄杩斿洖瀹炰綋褰撳墠Page鐨勬暟鎹�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="page">鍒嗛〉鐨勫弬鏁板疄浣�</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction<PageAble<T>>> QueryAsync<T>(PageAble<T> page, bool isAsync = true, bool needInclude = false);
-
-        /// <summary>
-        /// 鍒嗛〉鐩存帴杩斿洖PageAble&lt;T>
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="page"></param>
-        /// <param name="isAsync"></param>
-        /// <returns></returns>
-        public Task<ApiAction<PageAble<T>>> QueryPageAsync<T>(PageAble<T> page, bool isAsync = true, bool needInclude = false);
-
-        /// <summary>
-        /// 鎸塓ueryAble&lt;T>瀵硅薄浠庢暟鎹簱鏌ヨ婊¤冻鏉′欢鐨勬暟鎹�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="query">QueryAble鐨勫弬鏁板疄浣�</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction<QueryAble<T>>> QueryAsync<T>(QueryAble<T> query, bool isAsync = true, bool needInclude = false);
-
-        /// <summary>
-        /// 鏍规嵁SQL璇彞浠庢暟鎹簱涓煡璇㈠疄浣�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="newEntity">鍥哄畾鐢ㄦ硶锛氶�氳繃ApiAction.NewDataEntity()鍒涘缓ApiAction涓寚瀹氱被鍨嬪璞�</param>
-        /// <param name="sqlcmd">SQL璇彞</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction<List<T>>> QuerySqlAsync<T>(T newEntity, string sqlcmd, bool isAsync = true, bool needInclude = false) where T : class, new();
-
-        /// <summary>
-        /// 鏍规嵁SQL璇彞浠庢暟鎹簱涓煡璇㈠苟鎸塒ageAble&lt;T>瀵硅薄杩斿洖褰撳墠Page鐨勬暟鎹�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="page">鍒嗛〉鐨勫弬鏁板疄浣�</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction<PageAble<T>>> QuerySqlAsync<T>(PageAble<T> page, bool isAsync = true, bool needInclude = false) where T : class, new();
-
-        /// <summary>
-        /// 浠庢暟鎹簱涓煡璇㈠疄浣�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="newEntity">鍥哄畾鐢ㄦ硶锛氶�氳繃ApiAction.NewDataEntity()鍒涘缓ApiAction涓寚瀹氱被鍨嬪璞�</param>
-        /// <param name="options">鎺堟潈鏌ヨ閰嶇疆椤�</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction<List<T>>> QueryByAuthAsync<T>(T newEntity, AuthOption options, bool isAsync = true, bool needInclude = false) where T : iTableHasAuth, new();
-
-        /// <summary>
-        /// 鏍规嵁Where璇彞浠庢暟鎹簱涓煡璇㈠疄浣�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="newEntity">鍥哄畾鐢ㄦ硶锛氶�氳繃ApiAction.NewDataEntity()鍒涘缓ApiAction涓寚瀹氱被鍨嬪璞�</param>
-        /// <param name="where">Where璇彞</param>
-        /// <param name="options">鎺堟潈鏌ヨ閰嶇疆椤�</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction<List<T>>> QueryByAuthAsync<T>(T newEntity, string where, AuthOption options, bool isAsync = true, bool needInclude = false) where T : iTableHasAuth, new();
-
-        /// <summary>
-        /// 鎸塒ageAble&lt;T>瀵硅薄杩斿洖瀹炰綋褰撳墠Page鐨勬暟鎹�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="page">鍒嗛〉鐨勫弬鏁板疄浣�</param>
-        /// <param name="options">鎺堟潈鏌ヨ閰嶇疆椤�</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction<PageAble<T>>> QueryByAuthAsync<T>(PageAble<T> page, AuthOption options, bool isAsync = true, bool needInclude = false) where T : iTableHasAuth, new();
-
-        /// <summary>
-        /// 鍒嗛〉鐩存帴杩斿洖PageAble&lt;T>
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="page"></param>
-        /// <param name="options">鎺堟潈鏌ヨ閰嶇疆椤�</param>
-        /// <param name="isAsync"></param>
-        /// <returns></returns>
-        public Task<ApiAction<PageAble<T>>> QueryByAuthPageAsync<T>(PageAble<T> page, AuthOption options, bool isAsync = true, bool needInclude = false) where T : iTableHasAuth, new();
-
-        /// <summary>
-        /// 鎸塓ueryAble&lt;T>瀵硅薄浠庢暟鎹簱鏌ヨ婊¤冻鏉′欢鐨勬暟鎹�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="query">QueryAble鐨勫弬鏁板疄浣�</param>
-        /// <param name="options">鎺堟潈鏌ヨ閰嶇疆椤�</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction<QueryAble<T>>> QueryByAuthAsync<T>(QueryAble<T> query, AuthOption options, bool isAsync = true, bool needInclude = false) where T : iTableHasAuth, new();
-
-        #endregion
-
-        #region 鏌ヨ Count
-        /// <summary>
-        /// 鏍规嵁Where璇彞鏌ヨ婊¤冻鏉′欢鐨勫疄浣撶殑Count鏁伴噺
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="newEntity">鍥哄畾鐢ㄦ硶锛氶�氳繃ApiAction.NewDataEntity()鍒涘缓ApiAction涓寚瀹氱被鍨嬪璞�</param>
-        /// <param name="where">Where璇彞</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction> CountAsync<T>(T newEntity, string where, bool isAsync = true);
-
-        /// <summary>
-        /// 鏍规嵁Where璇彞鏌ヨ婊¤冻鏉′欢鐨勫疄浣撶殑Count鏁伴噺
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="newEntity">鍥哄畾鐢ㄦ硶锛氶�氳繃ApiAction.NewDataEntity()鍒涘缓ApiAction涓寚瀹氱被鍨嬪璞�</param>
-        /// <param name="where">Where璇彞</param>
-        /// <param name="options">鎺堟潈鏌ヨ閰嶇疆椤�</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction> CountByAuthAsync<T>(T newEntity, string where, AuthOption options, bool isAsync = true) where T : iTableHasAuth, new();
-        #endregion
-
-        #region 鏌ヨ Exist
-        /// <summary>
-        /// 鏍规嵁Where璇彞鏌ヨ婊¤冻鏉′欢鐨凞ata瀹炰綋鏄惁瀛樺湪
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="newEntity">鍥哄畾鐢ㄦ硶锛氶�氳繃ApiAction.NewDataEntity()鍒涘缓ApiAction涓寚瀹氱被鍨嬪璞�</param>
-        /// <param name="where">Where璇彞</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction> IsExistAsync<T>(T newEntity, string where, bool isAsync = true);
-
-        /// <summary>
-        /// 鏍规嵁Where璇彞鏌ヨ婊¤冻鏉′欢鐨凞ata瀹炰綋鏄惁瀛樺湪
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="newEntity">鍥哄畾鐢ㄦ硶锛氶�氳繃ApiAction.NewDataEntity()鍒涘缓ApiAction涓寚瀹氱被鍨嬪璞�</param>
-        /// <param name="where">Where璇彞</param>
-        /// <param name="options">鎺堟潈鏌ヨ閰嶇疆椤�</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction> IsExistByAuthAsync<T>(T newEntity, string where, AuthOption options, bool isAsync = true) where T : iTableHasAuth, new();
-        #endregion
-
-        #region 鎵цSQL
-        /// <summary>
-        /// 鎵цSQL璇彞杩斿洖褰卞搷琛屾暟
-        /// </summary>
-        /// <param name="sqlcmd">瑕佹墽琛岀殑SQL璇彞</param>
-        /// <param name="parameters">SQL璇彞鐨勫弬鏁�</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction> ExecuteSqlCommandAsync(string sqlcmd, List<SugarParameter> parameters, bool isAsync = true);
-
-        /// <summary>
-        /// 鎵цSQL璇彞杩斿洖褰卞搷琛屾暟
-        /// </summary>
-        /// <param name="sqlcmd">瑕佹墽琛岀殑SQL璇彞</param>
-        /// <param name="parameters">SQL璇彞鐨勫弬鏁�</param>
-        /// <param name="isAsync">鏄惁浠ュ紓姝ユ柟寮忔墽琛�</param>
-        /// <returns></returns>
-        public Task<ApiAction> ExecuteSqlCommandAsync(string sqlcmd, bool isAsync = true, params SugarParameter[] parameters);
-
-        /// <summary>
-        /// 寮傛鏂瑰紡鎵цSQL璇彞杩斿洖褰卞搷琛屾暟
-        /// </summary>
-        /// <param name="sqlcmd">瑕佹墽琛岀殑SQL璇彞</param>
-        /// <param name="parameters">SQL璇彞鐨勫弬鏁�</param>
-        /// <returns></returns>
-        public Task<ApiAction> ExecuteSqlCommandAsync(string sqlcmd, params SugarParameter[] parameters);
-        #endregion
-
-        #region 鍏堝垹闄ゅ悗鏂板
-        public Task<ApiAction> AddAfterDeleteAsync<T>(QueryAble<T> query) where T : class, new();
-
-        #endregion
-
-    }
-}
diff --git a/Tiger.IBusiness/Common/IImportExcel.cs b/Tiger.IBusiness/Common/IImportExcel.cs
deleted file mode 100644
index 2ba96f0..0000000
--- a/Tiger.IBusiness/Common/IImportExcel.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-锘縰sing Rhea.Common;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Tiger.Model;
-
-namespace Tiger.IBusiness
-{
-    public interface IImportExcel
-    {
-        public Task<ApiAction> Import<T>(T newEntity, ImportInput input) where T : class, new();
-        public Task<ApiAction<List<T>>> ValidateTableImport<T>(T newEntity, ImportValidateInput input);
-    }
-}
diff --git a/Tiger.IBusiness/Common/ILanguage.cs b/Tiger.IBusiness/Common/ILanguage.cs
deleted file mode 100644
index 1ffb47b..0000000
--- a/Tiger.IBusiness/Common/ILanguage.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-锘縰sing Autofac;
-using Rhea.Common;
-using Sundial;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Tiger.IBusiness
-{
-    public interface ILanguage
-    {
-        public Dictionary<string, Dictionary<string, string>> GetDictionary();
-        /// <summary>
-        /// 鑾峰彇璇█鍖�
-        /// </summary>
-        /// <param name="locale"></param>
-        /// <returns></returns>
-        public string GetJson(string locale);
-    }
-}
diff --git a/Tiger.IBusiness/Common/ILogin.cs b/Tiger.IBusiness/Common/ILogin.cs
deleted file mode 100644
index b5651cc..0000000
--- a/Tiger.IBusiness/Common/ILogin.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-锘縰sing Autofac;
-using Rhea.Common;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Tiger.Model;
-
-namespace Tiger.IBusiness
-{
-    public interface ILogin
-    {
-        #region BS
-        /// <summary>
-        /// 鑾峰彇鐧诲綍淇℃伅
-        /// </summary>
-        /// <param name="token"></param>
-        /// <param name="Async"></param>
-        /// <returns></returns>
-        public Task<SYS_BS_LOGIN> GetBSLoginInfo(string token, bool Async = true);
-
-        /// <summary>
-        /// 娣诲姞璁板綍
-        /// </summary>
-        /// <param name="parm"></param>
-        /// <param name="Async"></param>
-        /// <returns></returns>
-        public Task<ApiAction> AddLOG_BS_LOGINAsync(SYS_BS_LOGIN parm, bool Async = true);
-
-        /// <summary>
-        /// 鐧诲綍
-        /// </summary>
-        /// <param name="action"></param>
-        /// <param name="Async"></param>
-        /// <returns></returns>
-        public Task<ApiAction<SYS_BS_LOGIN>> BSLogin(ApiAction<UserInfo> action, bool Async = true);
-        /// <summary>
-        /// 鍒囨崲鎹偣
-        /// </summary>
-        /// <param name="action"></param>
-        /// <param name="Async"></param>
-        /// <returns></returns>
-        public Task<ApiAction> BSSwitchOrgCode(string token, string org, string fty);
-
-        /// <summary>
-        /// 娉ㄩ攢
-        /// </summary>
-        /// <param name="token"></param>
-        /// <returns></returns>
-        public Task<ApiAction> BSLogout(string token);
-        #endregion
-
-        #region CS
-        /// <summary>
-        /// 鑾峰彇鐧诲綍淇℃伅
-        /// </summary>
-        /// <param name="token"></param>
-        /// <param name="Async"></param>
-        /// <returns></returns>
-        public Task<SYS_CS_LOGIN> GetCSLoginInfo(string token, bool Async = true);
-
-        /// <summary>
-        /// 鐧诲綍
-        /// </summary>
-        /// <param name="action"></param>
-        /// <param name="Async"></param>
-        /// <returns></returns>
-        public Task<ApiAction<SYS_CS_LOGIN>> CSLogin(ApiAction<UserInfo> action, bool Async = true);
-
-        /// <summary>
-        /// 娉ㄩ攢
-        /// </summary>
-        /// <param name="token"></param>
-        /// <returns></returns>
-        public Task<ApiAction> CSLogout(string token);
-        #endregion
-    }
-}
diff --git a/Tiger.IBusiness/Common/IServicesBus.cs b/Tiger.IBusiness/Common/IServicesBus.cs
deleted file mode 100644
index 1c4f116..0000000
--- a/Tiger.IBusiness/Common/IServicesBus.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-锘縰sing Autofac;
-using Rhea.Common;
-using Sundial;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Tiger.IBusiness
-{
-    public interface IServicesBus
-    {
-        public void StartServices(ISchedulerFactory schedulerFactory);
-
-        public void StopServices();
-    }
-}
diff --git a/Tiger.IBusiness/Common/IStep.cs b/Tiger.IBusiness/Common/IStep.cs
deleted file mode 100644
index 6824063..0000000
--- a/Tiger.IBusiness/Common/IStep.cs
+++ /dev/null
@@ -1,78 +0,0 @@
-锘縰sing Newtonsoft.Json;
-using Rhea.Common;
-using System;
-using System.ComponentModel;
-using Tiger.Model;
-using Tiger.Model.Entitys.MES.Position;
-
-namespace Tiger.IBusiness
-{
-    /// <summary>
-    /// 姝ラ鍩虹被
-    /// </summary>
-    public interface IStep<InputT, OutputT>
-    {
-        #region Propertys & Variables
-        /// <summary>
-        /// 姝ラID
-        /// </summary>
-        public string ID { get; set; }
-        /// <summary>
-        /// 姝ラ鍚嶇О
-        /// </summary>
-        public string Name { get; set; }
-        /// <summary>
-        /// 姝ラ搴忓彿
-        /// </summary>
-        public int Sequence { get; set; }
-        /// <summary>
-        /// 姝ラ鐘舵��
-        /// </summary>
-        public StepStatus Status { get; set; }
-        /// <summary>
-        /// 姝ラ娑堟伅
-        /// </summary>
-        public Locale Message { get; set; }
-        /// <summary>
-        /// 姝ラ娑堟伅鍘嗗彶
-        /// </summary>
-        public List<Locale> MsgHistory { get; }
-        #endregion Propertys & Variables
-
-        #region Functions
-        /// <summary>
-        /// 灏濊瘯寮�濮嬫墽琛�
-        /// </summary>
-        /// <returns></returns>
-        public abstract ApiAction<OutputT> TryBegin(InputT input);
-        /// <summary>
-        /// 鎻愪氦鏁版嵁
-        /// </summary>
-        /// <param name="input"></param>
-        /// <returns></returns>
-        public abstract ApiAction<OutputT> Submit(InputT input);
-        /// <summary>
-        /// 缁撴潫鎵ц
-        /// </summary>
-        /// <returns></returns>
-        public abstract ApiAction<OutputT> End(InputT input);
-
-        #endregion Functions
-    }
-
-    public enum StepStatus
-    {
-        [Description("绂佺敤")]
-        InActive,
-        [Description("姝e父")]
-        Normal,
-        [Description("鎴愬姛")]
-        Success,
-        [Description("閿欒")]
-        Error,
-        [Description("璀﹀憡")]
-        Warning,
-        [Description("瀹屾垚")]
-        Finished,
-    }
-}
diff --git a/Tiger.IBusiness/Common/ISystem.cs b/Tiger.IBusiness/Common/ISystem.cs
deleted file mode 100644
index 31c7e06..0000000
--- a/Tiger.IBusiness/Common/ISystem.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-锘縰sing Autofac;
-using Newtonsoft.Json;
-using Rhea.Common;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Tiger.Model;
-
-namespace Tiger.IBusiness
-{
-    public interface ISystem
-    {
-        /// <summary>
-        /// 淇濆瓨鐢ㄦ埛缁勪腑鐨勭敤鎴峰垪琛�
-        /// </summary>
-        /// <param name="userIdNotIn"></param>
-        /// <param name="userIdIn"></param>
-        /// <param name="userGroupId"></param>
-        /// <returns></returns>
-        public Task<ApiAction> SetSysUserToGroupAsync(string userIdNotIn, string userIdIn, string userGroupId);
-        /// <summary>
-        /// 淇濆瓨瑙掕壊
-        /// </summary>
-        /// <param name="action"></param>
-        /// <param name="Async"></param>
-        /// <returns></returns>
-        public Task<ApiAction> SaveRole(ApiAction<SaveRoleStrictlyParams> action);
-        /// <summary>
-        /// 鐢ㄦ埛缁勫叧鑱旇鑹蹭繚瀛樻柟娉�
-        /// </summary>
-        /// <param name="roleIdIn"></param>
-        /// <param name="userGroupId"></param>
-        /// <returns></returns>
-        public Task<ApiAction> SetRoleToGroupAsync(string roleIdIn, string userGroupId);
-        /// <summary>
-        /// 鑾峰彇鎵�鏈夌粍缁囨満鏋勫垪琛�
-        /// </summary>
-        /// <returns></returns>
-        public Task<string> getOrgTreeList(string orgName, string status);
-        /// <summary>
-        /// 鑾峰彇鎵�鏈夊伐鍘傚垪琛�
-        /// </summary>
-        /// <returns></returns>
-        public Task<string> getProdTreeList(string orgName);
-        /// <summary>
-        /// 鑾峰彇鑿滃崟鍒楄〃
-        /// </summary>
-        /// <param name="userid"></param>
-        /// <returns></returns>
-        public Task<string> getMenuList(string userid, string rootCode);
-
-        /// <summary>
-        /// 鑾峰彇鎵�鏈夎彍鍗曞垪琛�
-        /// </summary>
-        /// <returns></returns>
-        public Task<string> getMenuListAll(string menuName, string status);
-
-        /// <summary>
-        /// 淇濆瓨鑿滃崟
-        /// </summary>
-        /// <param name="action"></param>
-        /// <param name="Async"></param>
-        /// <returns></returns>
-        public Task<ApiAction> SaveMenu(ApiAction<SaveMenuParams> action, bool Async = true);
-
-        public Task<ApiAction<List<SYS_PARAM>>> getSysParam(string group, string code);
-    }
-}
diff --git a/Tiger.IBusiness/Common/ITigerActive.cs b/Tiger.IBusiness/Common/ITigerActive.cs
deleted file mode 100644
index 84fe417..0000000
--- a/Tiger.IBusiness/Common/ITigerActive.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-锘縰sing Autofac;
-using Rhea.Common;
-using Rhea.Common.Authorization;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Tiger.IBusiness
-{
-    public interface ITigerActive
-    {
-        /// <summary>
-        /// 浣跨敤婵�娲荤爜婵�娲荤▼搴�
-        /// </summary>
-        /// <param name="activationCode">婵�娲荤爜</param>
-        /// <returns></returns>
-        public Result Active(string activationCode);
-
-        /// <summary>
-        /// 楠岃瘉褰撳墠绋嬪簭鏄惁宸叉縺娲�
-        /// </summary>
-        /// <returns></returns>
-        public Result Verify();
-
-        /// <summary>
-        /// 鍦ㄦ敞鍐岃〃HKEY_LOCAL_MACHINE\SOFTWARE\TigerClouds鑺傜偣涓鍙栧瘑閽ヨ瘉涔�
-        /// </summary>
-        /// <returns></returns>
-        public string GetCertification();
-
-        /// <summary>
-        /// 鍦ㄦ敞鍐岃〃HKEY_LOCAL_MACHINE\SOFTWARE\TigerClouds鑺傜偣涓啓鍏ュ瘑閽ヨ瘉涔�
-        /// </summary>
-        /// <param name="key">鍏挜</param>
-        public void SetCertification(string key);
-
-        /// <summary>
-        /// 鍦ㄦ敞鍐岃〃HKEY_LOCAL_MACHINE\SOFTWARE\TigerClouds鑺傜偣涓鍙栨縺娲荤爜
-        /// </summary>
-        /// <returns></returns>
-        public string GetActivationCode();
-
-        /// <summary>
-        /// 鍦ㄦ敞鍐岃〃HKEY_LOCAL_MACHINE\SOFTWARE\TigerClouds鑺傜偣涓啓鍏ユ縺娲荤爜
-        /// </summary>
-        /// <param name="code">婵�娲荤爜</param>
-        public void SetActivationCode(string code);
-
-        /// <summary>
-        /// 鑾峰彇褰撳墠璁稿彲淇℃伅
-        /// </summary>
-        /// <returns></returns>
-        public License GetCurLicense();
-    }
-}
diff --git a/Tiger.IBusiness/Common/ITransaction.cs b/Tiger.IBusiness/Common/ITransaction.cs
deleted file mode 100644
index 5767dee..0000000
--- a/Tiger.IBusiness/Common/ITransaction.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-锘縰sing Newtonsoft.Json;
-using Rhea.Common;
-using System;
-
-namespace Tiger.IBusiness
-{
-    /// <summary>
-    /// 浜嬪姟鍩虹被
-    /// </summary>
-    public interface ITransaction
-    {
-        /// <summary>
-        /// 浜嬪姟ID
-        /// </summary>
-        public string TransID { get; set; }
-        /// <summary>
-        /// Api Host
-        /// </summary>
-        public string ApiHost { get; set; }
-        /// <summary>
-        /// Remote Address
-        /// </summary>
-        public string RemoteAddress { get; set; }
-        /// <summary>
-        /// 浜嬪姟閿�
-        /// </summary>
-        public object TransLock { get; }
-        /// <summary>
-        /// 鏈�鍚庢搷浣滅殑鏃堕棿
-        /// </summary>
-        public DateTime LastActionTime { get; set; }
-        /// <summary>
-        /// 浜嬪姟鏄惁瀹屾垚
-        /// </summary>
-        public bool IsFinished { get; set; }
-
-        /// <summary>
-        /// 娣诲姞涓�涓狝piAction鐨勫巻鍙茶褰�
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="request"></param>
-        /// <param name="action"></param>
-        public abstract void AddHistory<T>(Microsoft.AspNetCore.Http.HttpRequest request, ApiAction<T> action);
-
-        /// <summary>
-        /// 淇濆瓨ApiAction鐨勫巻鍙茶褰曞埌鏂囦欢
-        /// </summary>
-        public abstract void SaveHistory();
-
-        /// <summary>
-        /// 鍏抽棴浜嬪姟
-        /// </summary>
-        /// <param name="needSaveHistoryLog"></param>
-        /// <returns></returns>
-        public abstract bool Close(bool needSaveHistoryLog = false);
-    }
-}
diff --git a/Tiger.IBusiness/Core/ApiConfig.cs b/Tiger.IBusiness/Core/ApiConfig.cs
deleted file mode 100644
index 0d50b5c..0000000
--- a/Tiger.IBusiness/Core/ApiConfig.cs
+++ /dev/null
@@ -1,192 +0,0 @@
-锘縰sing Microsoft.AspNetCore.Http;
-using Microsoft.Extensions.Configuration;
-using Rhea.Common;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Security.AccessControl;
-using System.Text;
-
-namespace Tiger.IBusiness
-{
-    public class ApiConfig
-    {
-        public static IServiceProvider ServiceProvider;
-        public static IConfiguration Configuration;
-
-        public static void InitConfig(IConfiguration _configuration)
-        {
-            Configuration = _configuration;
-        }
-
-        private static string _AllowUrl = string.Empty;
-        /// <summary>
-        /// 閾炬帴鐧藉悕鍗曪紙鍙笉鍋氳韩浠介獙璇侊級
-        /// </summary>
-        public static List<string> AllowUrl
-        {
-            get
-            {
-                if (string.IsNullOrEmpty(_AllowUrl))
-                {
-                    _AllowUrl = Configuration["AllowUrl"];
-                }
-                List<string> listUrls = new List<string>();
-                if (!string.IsNullOrEmpty(_AllowUrl))
-                {
-                    string[] urls = System.Text.RegularExpressions.Regex.Split(_AllowUrl, ",");
-                    if (urls.Length > 0)
-                    {
-                        foreach (string url in urls)
-                        {
-                            if (!listUrls.Contains(url))
-                            {
-                                listUrls.Add(url);
-                            }
-                        }
-                    }
-
-                }
-                return listUrls;
-            }
-        }
-
-        private static string _FilePath = string.Empty;
-        /// <summary>
-        /// 鏂囦欢璺緞
-        /// </summary>
-        public static string FilePath
-        {
-            get
-            {
-                if (string.IsNullOrEmpty(_FilePath))
-                {
-                    _FilePath = Configuration["CommonSettings:FilePath"];
-                }
-                return _FilePath;
-            }
-        }
-
-
-        /// <summary>
-        /// 鏇存柊璺緞
-        /// </summary>
-        public static string UpgradePath => (string.IsNullOrEmpty(Configuration["Upgrade:Path"]) ? (AppDomain.CurrentDomain.BaseDirectory + "Upgrade") : Configuration["Upgrade:Path"]) + "\\";
-
-        private static string _IsOpenCache = string.Empty;
-        /// <summary>
-        /// 鏄惁浣跨敤Redis
-        /// </summary>
-        public static bool IsOpenCache
-        {
-            get
-            {
-                if (string.IsNullOrEmpty(_IsOpenCache))
-                {
-                    _IsOpenCache = Configuration["Redis:IsOpenRedis"];
-                }
-                if (_IsOpenCache.ToLower() == "true")
-                {
-                    return true;
-                }
-                return false;
-            }
-        }
-
-        private static string _RedisConnectionString = string.Empty;
-        /// <summary>
-        /// Redis榛樿杩炴帴涓�
-        /// </summary>
-        public static string RedisConnectionString
-        {
-            get
-            {
-                if (string.IsNullOrEmpty(_RedisConnectionString))
-                {
-                    _RedisConnectionString = Configuration["Redis:ConnectionString"];
-                }
-                return _RedisConnectionString;
-            }
-        }
-
-        /// <summary>
-        /// 缁熶竴璇锋眰椤甸潰瀹炰綋
-        /// </summary>
-        public static HttpContext HttpCurrent
-        {
-            get
-            {
-                object factory = ServiceProvider.GetService(typeof(IHttpContextAccessor));
-                HttpContext context = ((IHttpContextAccessor)factory).HttpContext;
-                return context;
-            }
-        }
-
-        /// <summary>
-        /// 浜嬪姟瓒呮椂灏忔椂鏁�
-        /// </summary>
-        public static int Transaction_TimeoutHours
-        {
-            get => Convert.ToInt32(Configuration["Transaction:TimeoutHours"] ?? "12");
-        }
-
-        /// <summary>
-        /// 浜嬪姟瓒呮椂鍒嗛挓鏁�
-        /// </summary>
-        public static double Client_TimeoutMinutes
-        {
-            get => Convert.ToDouble(Configuration["Timeout:Client_Minutes"] ?? "60");
-        }
-
-        /// <summary>
-        /// 鏄惁娴嬭瘯鐗堟湰
-        /// </summary>
-        public static bool IsTestVersion
-        {
-            get => Configuration.AsEnumerable().Where(q => q.Key.StartsWith("StartUpSetting:UseUrls") && q.Value == "http://*:9520").Any();
-        }
-
-        /// <summary>
-        /// 鏃х郴缁熺増鏈� 
-        /// </summary>
-        public static bool IsOldVersion
-        {
-            get => Configuration.AsEnumerable().Where(q => q.Key.StartsWith("StartUpSetting:UseUrls") && q.Value == "http://*:9527").Any();
-        }
-
-        /// <summary>
-        /// 鏄惁寮�鍙戠増鏈�
-        /// </summary>
-        public static bool IsDevVersion
-        {
-            get => Configuration.AsEnumerable().Where(q => q.Key.StartsWith("StartUpSetting:UseUrls") && q.Value == "http://*:9510").Any();
-        }
-
-        /// <summary>
-        /// RunInterface
-        /// </summary>
-        public static bool RunInterface
-        {
-            get => (Configuration["RunInterface"] ?? "").ToLower() == "true";
-        }
-
-        public static bool IsTestServer
-        {
-            get => (BizConfig.Configuration["IsTestServer"] ?? "").ToLower() == "true";
-        }
-    }
-
-    public class BizConfig
-    {
-        public static IConfiguration Configuration => RheaConfig.Configuration;
-        public static string DB_ModelAssembly => RheaConfig.DB_ModelAssembly;
-        public static string DefaultLanguage => Configuration?["DefaultLanguage"] ?? "zh-cn";
-        public static void InitConfig(IConfiguration _configuration, Dictionary<string, Dictionary<string, string>> language)
-        {
-            //Init Rhea
-            Rhea.Common.RheaConfig.InitConfig(_configuration);
-            Rhea.Common.Language.Default = DefaultLanguage;
-            Rhea.Common.Language.Dictionary = language;
-        }
-    }
-}
diff --git a/Tiger.IBusiness/Core/Logger.cs b/Tiger.IBusiness/Core/Logger.cs
deleted file mode 100644
index 9f97ef5..0000000
--- a/Tiger.IBusiness/Core/Logger.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.IO;
-using System.Text;
-using NLog;
-
-namespace Tiger.IBusiness
-{
-    /// <summary>
-    /// 鏃ュ織妯″潡
-    /// </summary>
-    public class Logger
-    {
-        /// <summary>
-        /// 璁板綍绯荤粺鏃ュ織
-        /// </summary>
-        public static NLog.Logger Default => LogManager.GetLogger("default");
-        public NLog.Logger GetDefault() => Default;
-        /// <summary>
-        /// 璁板綍Http璁块棶鏃ュ織
-        /// </summary>
-        public static NLog.Logger Http => LogManager.GetLogger("http");
-        public NLog.Logger GetHttp() => Http;
-        /// <summary>
-        /// 璁板綍绯荤粺鏃ュ織骞舵姏鍑哄埌鎺у埗鍙�
-        /// </summary>
-        public static NLog.Logger Console => LogManager.GetLogger("console");
-        public NLog.Logger GetConsole() => Console;
-        /// <summary>
-        /// 璁板綍鏃ュ織锛屼笉璁板綍璋冪敤鑰�
-        /// </summary>
-        public static NLog.Logger NoCaller => LogManager.GetLogger("noCaller");
-        public NLog.Logger GetNoCaller() => NoCaller;
-        /// <summary>
-        /// 璁板綍璁″垝浠诲姟鏃ュ織
-        /// </summary>
-        public static NLog.Logger Scheduler => LogManager.GetLogger("scheduler");
-        public NLog.Logger GetScheduler() => Scheduler;
-        /// <summary>
-        /// 璁板綍鎺ュ彛鏃ュ織
-        /// </summary>
-        public static NLog.Logger Interface => LogManager.GetLogger("Interface");
-        public NLog.Logger GetInterface() => Interface;
-        /// <summary>
-        /// 璐ф灦鎺ュ彛鏃ュ織
-        /// </summary>
-        public static NLog.Logger Shelf => LogManager.GetLogger("shelf");
-        public NLog.Logger GetShelf() => Shelf;
-    }
-}
diff --git a/Tiger.IBusiness/Core/MQTTHelper.cs b/Tiger.IBusiness/Core/MQTTHelper.cs
deleted file mode 100644
index 2e045a6..0000000
--- a/Tiger.IBusiness/Core/MQTTHelper.cs
+++ /dev/null
@@ -1,332 +0,0 @@
-锘縰sing Microsoft.Extensions.Configuration;
-using MQTTnet;
-using MQTTnet.Client;
-using MQTTnet.Protocol;
-using MQTTnet.Server;
-using Newtonsoft.Json;
-using Rhea.Common;
-using System;
-using System.Collections.Generic;
-using System.Net;
-using System.Net.Http;
-using System.Net.Http.Headers;
-using System.Security.Policy;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Tiger.IBusiness.Utility
-{
-    /// <summary>
-    /// MQTTHelper
-    /// </summary>
-    public static class MQTTHelper
-    {
-        #region Variables
-        private static IConfiguration Setting = ApiConfig.Configuration;
-        #endregion
-
-        #region Propertys
-
-        #endregion
-
-        #region Functions
-        public static void Start()
-        {
-            try
-            {
-                if (Setting["MQTT:Enable"].ToBoolean() == true)
-                {
-
-                    ConsoleExt.WriteLine("Start MQTT Service..........", ConsoleColor.Yellow);
-                    Logger.Default.Info("Start MQTT Service");
-                }
-            }
-            catch (System.Exception ex)
-            {
-                Logger.Default.Fatal(ex, "Start MQTT Service Exception");
-            }
-        }
-
-        public static void Stop()
-        {
-            try
-            {
-
-                Logger.Console.Info("Stop MQTT Service");
-            }
-            catch (System.Exception ex)
-            {
-                Logger.Console.Fatal(ex, "Stop MQTT Service Exception");
-            }
-        }
-
-
-        #endregion
-    }
-    /// <summary>
-    /// EMQX 甯姪绫�
-    /// </summary>
-    public class EMQX : IDisposable
-    {
-        public EMQX(string address, string username, string password) 
-        { 
-            Address = address;
-            Username = username;
-            Password = password;
-        }
-
-        public EMQX(string address, int port, string username, string password)
-        {
-            Address = address;
-            Port = port;
-            Username = username;
-            Password = password;
-        }
-
-        #region Variables
-        private List<string> TopicList = new();
-        #endregion
-
-        #region Propertys
-        public string Id { get; set; } = Guid.NewGuid().ToString("N");
-        public string Tag { get; set; } = "ClientMonitor";
-        public string Name { get; set; } = "ClientMonitor";
-        public bool IsRunning { get; set; }
-        public IMqttClient Client { get; set; } = new MqttFactory().CreateMqttClient();//MQTT瀹㈡埛绔�
-        public string Address { get; set; }
-        public int Port { get; set; } = 1883;
-        public string ClientId { get; set; } = $"{Environment.MachineName}-ApiClient-{Guid.NewGuid():N}";
-        public string Username { get; set; }
-        public string Password { get; set; }
-        public int ApiPort { get; set; } = 18083;
-        public string ApiKey { get; set; }
-        public string ApiSecretKey { get; set; }
-        public string ApiCredentials => Convert.ToBase64String(Encoding.ASCII.GetBytes($"{ApiKey}:{ApiSecretKey}"));
-        //閬楀槺娑堟伅
-        public string WillMsgTopic { get; set; }
-        public MqttQualityOfServiceLevel WillMsgQos { get; set; }
-        public bool WillMsgRetain { get; set; }
-        public string WillMsgPayload { get; set; }
-        public int? WillMsgDelay { get; set; }
-        public int? WillMsgExpiry { get; set; }
-        #endregion
-
-
-        public Result<IMqttClient> Connect(string clientId = null)
-        {
-            Result<IMqttClient> result = new();
-            if (!Address.IsNullOrEmpty())
-            {
-                ClientId = clientId.IsNullOrEmpty(ClientId);
-                var options = new MqttClientOptionsBuilder()
-                    .WithTcpServer(Address, Port) // MQTT broker address and port
-                    .WithCredentials(Username, Password) // Set username and password
-                    .WithClientId(ClientId)
-                    .WithCleanSession()
-                    .Build();
-                var connectResult = Client.ConnectAsync(options).Result;
-                if (connectResult.ResultCode == MqttClientConnectResultCode.Success)
-                {
-                    result.Flag = Result.Flags.Success;
-                    result.Data = Client;
-                    result.Message = "Connect to MQTT server success.";
-                }
-                else
-                {
-                    result.Flag = Result.Flags.Failed;
-                    result.Data = null;
-                    result.Message = $"Failed to connect to MQTT server: {connectResult.ResultCode}";
-                }
-            }
-            else
-            {
-                result.Flag = Result.Flags.Failed;
-                result.Data = null;
-                result.Message = $"Failed to connect to MQTT server: no server address.";
-            }
-            return result;
-        }
-
-        public void Disconnect()
-        {
-            foreach (var topic in TopicList)
-            {
-                Client.UnsubscribeAsync(topic).Wait();
-            }
-            Client.DisconnectAsync().Wait();
-        }
-
-        public void Dispose()
-        {
-            Disconnect();
-        }
-
-        public bool Subscribe(string topic, Action<MqttApplicationMessageReceivedEventArgs> onReceive, MqttQualityOfServiceLevel QoS = MqttQualityOfServiceLevel.AtMostOnce)
-        {
-            if (TopicList.Contains(topic))
-            {
-                return true;
-            }
-            else
-            { 
-	            try
-	            {
-                    if (!Client.IsConnected)
-                    {
-                        Client.ReconnectAsync().Wait();
-                    }
-
-                    // Subscribe to a topic
-                    Client.SubscribeAsync(topic, QoS).Wait();
-	                TopicList.Add(topic);
-	
-	                // Callback function when a message is received
-	                Client.ApplicationMessageReceivedAsync += e =>
-	                {
-	                    onReceive.Invoke(e);
-	                    return Task.CompletedTask;
-	                };
-	
-	                return true;
-	            }
-	            catch (System.Exception ex)
-	            {
-	                return false;
-	            }
-            }
-        }
-
-        public void Unsubscribe(string topic)
-        {
-            // Unsubscribe
-            Client.UnsubscribeAsync(topic).Wait();
-            TopicList.Remove(topic);
-        }
-
-        /// <summary>
-        /// 鍙戦�佷竴涓狹Q娑堟伅
-        /// </summary>
-        /// <param name="msg">娑堟伅</param>
-        /// <param name="topic">娑堟伅鐨凾opic锛岀Щ鍔ㄧ鏍规嵁杩欎釜Topic鏉ユ帴鏀舵秷鎭�<param>
-        public async Task<bool> SendAsync(string topic, string msg, MqttQualityOfServiceLevel QoS)
-        {
-            bool isFinish = false;
-            int doTimes = 0;
-            do
-            {
-                doTimes++;
-                try
-                {
-                    if (!Client.IsConnected)
-                    {
-                        await Client.ReconnectAsync();
-                    }
-                    
-                    // Publish a message
-                    await Client.PublishAsync(new MqttApplicationMessageBuilder()
-                        .WithTopic(topic)
-                        .WithPayload(msg)
-                        .WithQualityOfServiceLevel(QoS)
-                        .WithRetainFlag()
-                        .Build());
-
-                    isFinish = true;
-                }
-                catch (System.Exception ex)
-                {
-                    //Logger.Console.Fatal(ex, $"Send MQTT Message[{sessionId}] Exception(Text: {msg})");
-                }
-            } while (!isFinish && doTimes < 3);
-            return isFinish;
-        }
-
-        /// <summary>
-        /// 鍙戦�佷竴涓唴瀹规槸ApiAction鐨凪Q娑堟伅锛屼互ApiAction鐨処D浣滀负娑堟伅鐨凾opic
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="action"></param>
-        /// <returns></returns>
-        public ApiAction<T> Send<T>(ApiAction<T> action, MqttQualityOfServiceLevel QoS = MqttQualityOfServiceLevel.AtLeastOnce)
-        {
-            MQTTMessage message = new MQTTMessage();
-            message.IsVoice = !action.IsSuccessed;
-            message.IsSuccessed = action.IsSuccessed;
-            message.Content = action.Message;
-            message.Color = action.IsSuccessed ? "#878787" : "#880000";
-            SendAsync(JsonConvert.SerializeObject(message), action.ID, QoS).Wait();
-            return action;
-        }
-
-        public bool Send<T>(string topic, Result<T> result, string msgTitle, MqttQualityOfServiceLevel QoS = MqttQualityOfServiceLevel.AtLeastOnce)
-        {
-            try
-            {
-                MQTTMessage message = new MQTTMessage();
-                message.IsVoice = !result.IsSuccessed;
-                message.IsSuccessed = result.IsSuccessed;
-                message.Content = msgTitle + "锛�" + result.Message;
-                message.Color = result.IsSuccessed ? "#878787" : "#880000";
-                return SendAsync(topic, JsonConvert.SerializeObject(message), QoS).Result;
-            }
-            catch (System.Exception ex)
-            {
-                return false;
-            }
-        }
-
-        public bool Send(string topic, MQTTMessage msg, MqttQualityOfServiceLevel QoS = MqttQualityOfServiceLevel.AtLeastOnce)
-        {
-            try
-            {
-                return SendAsync(topic, JsonConvert.SerializeObject(msg), QoS).Result;
-            }
-            catch (System.Exception ex)
-            {
-                return false;
-            }
-        }
-
-        public HttpResponseMessage GetTopicList(string topic = "")
-        {
-            //var content = new StringContent(json);
-            //content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
-
-            //var client = new HttpClient();
-            //var response = client.PostAsync(url, content).Result;
-
-            ApiKey = "ee26b0dd4af7e749";
-            ApiSecretKey = "XHOUC9BQSoa0j0jRINQEkQanIR1nzDQUY8GnYtaktEQJ";
-            string credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{ApiKey}:{ApiSecretKey}"));
-
-            var client = new HttpClient();
-            client.DefaultRequestHeaders.Add("Content-Type", "application/json");
-            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", ApiCredentials);// 娣诲姞鍩烘湰璁よ瘉澶�
-
-            string url = $"http://{Address}:{ApiPort}/api/v5/topics/";
-            var response = client.GetAsync(url).Result;
-            return response;
-        }
-
-        public bool DeleteTopic(string sessionId)
-        {
-            int doTimes = 0;
-            bool isFinish = false;
-            do
-            {
-                doTimes++;
-                try
-                {
-                    
-
-                    isFinish = true;
-                }
-                catch (Exception ex)
-                {
-                    //Logger.Console.Fatal(ex, $"Delete MQTT Topic[{sessionId}] Exception");
-                }
-            } while (!isFinish && doTimes < 3);
-            return isFinish;
-        }
-    }
-
-}
diff --git a/Tiger.IBusiness/Core/UpgradeFileSystem.cs b/Tiger.IBusiness/Core/UpgradeFileSystem.cs
deleted file mode 100644
index 0cf2d3b..0000000
--- a/Tiger.IBusiness/Core/UpgradeFileSystem.cs
+++ /dev/null
@@ -1,66 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.IO;
-using System.Text;
-using Tiger.IBusiness;
-
-namespace Tiger.IBusiness
-{
-    public class UpgradeFileSystem
-    {
-        public UpgradeFileSystem()
-        {
-        }
-        public UpgradeFileSystem(FileInfo fi)
-        {
-            Name = fi.Name;
-            FullName = fi.FullName.Replace(UpgradeRootPath, "");
-            Path = fi.DirectoryName.Replace(UpgradeRootPath, "");
-            Extension = fi.Extension;
-            IsDirectory = false;
-            LastWriteTime = fi.LastWriteTime;
-            Length = fi.Length;
-        }
-        public UpgradeFileSystem(DirectoryInfo di)
-        {
-            Name = di.Name;
-            FullName = di.FullName.Replace(UpgradeRootPath, "");
-            Path = di.FullName.Replace(UpgradeRootPath, "");
-            Extension = di.Extension;
-            IsDirectory = true;
-            LastWriteTime = di.LastWriteTime;
-            Length = 0;
-            ChildNodes = GetAllFiles(di);
-        }
-        /// <summary>
-        /// 绋嬪簭鏇存柊鏍圭洰褰�
-        /// </summary>
-        public static string UpgradeRootPath => ApiConfig.UpgradePath;
-        public string Name { set; get; }
-        public string Path { set; get; }
-        public string FullName { set; get; }
-        public long Length { set; get; }
-        public string Extension { set; get; }
-        public DateTime LastWriteTime { set; get; }
-        public bool IsDirectory { set; get; }
-        public List<UpgradeFileSystem> ChildNodes { set; get; } = new List<UpgradeFileSystem>();
-
-        private List<UpgradeFileSystem> GetAllFiles(DirectoryInfo di)
-        {
-            var allFiles = new List<UpgradeFileSystem>();
-
-            foreach (var item in di.GetDirectories())
-            {
-                allFiles.Add(new UpgradeFileSystem(new DirectoryInfo(item.FullName)));
-            }
-
-            foreach (var item in di.GetFiles())
-            {
-                allFiles.Add(new UpgradeFileSystem(new FileInfo(item.FullName)));
-            }
-
-            return allFiles;
-        }
-
-    }//endCLass
-}
diff --git a/Tiger.IBusiness/DbCache/ICodeRuleCache.cs b/Tiger.IBusiness/DbCache/ICodeRuleCache.cs
deleted file mode 100644
index d5cf3e6..0000000
--- a/Tiger.IBusiness/DbCache/ICodeRuleCache.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-锘縰sing Autofac;
-using Rhea.Common;
-using Rhea.Common.Interface;
-using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-using Tiger.Model;
-
-namespace Tiger.IBusiness
-{
-    public interface ICodeRuleCache : ITigerCache
-    {
-        public List<BAS_CODE_RULE> Rules { get; set; }
-        public BAS_CODE_RULE this[string ruleCode] { get; }
-
-        /// <summary>
-        /// 浣跨敤鎸囧畾瑙勫垯楠岃瘉浼犲叆缂栫爜
-        /// </summary>
-        /// <param name="code">闇�瑕侀獙璇佺殑鏉$爜</param>
-        /// <param name="rule">鎸囧畾鐢ㄤ簬楠岃瘉鐨勬潯鐮佽鍒�</param>
-        /// <returns>Result.Data is RuleVerifier</returns>
-        public Result Verify(string code, BAS_CODE_RULE rule);
-
-        /// <summary>
-        /// 浣跨敤绗﹀悎浼犲叆鏉′欢鐨勮鍒欓獙璇佷紶鍏ョ紪鐮�
-        /// </summary>
-        /// <param name="code">闇�瑕侀獙璇佺殑鏉$爜</param>
-        /// <param name="predicate">鐢ㄤ簬楠岃瘉鏉$爜瑙勫垯鐨勮繃婊ゆ潯浠�</param>
-        /// <returns>Result.Data is List&lt;RuleVerifier></returns>
-        public Result Verify(string code, Func<BAS_CODE_RULE, bool> predicate = null);
-
-        /// <summary>
-        /// 鐢熸垚鏉$爜
-        /// </summary>
-        /// <param name="ruleCode"></param>
-        /// <param name="args"></param>
-        /// <returns></returns>
-        public Result Generate(string ruleCode, params object?[] args);
-
-        /// <summary>
-        /// 灏濊瘯鐢熸垚鏉$爜锛屼笉淇濆瓨鍒版暟鎹簱
-        /// </summary>
-        /// <param name="ruleCode"></param>
-        /// <param name="args"></param>
-        /// <returns></returns>
-        public Result TryGenerate(string ruleCode, params object?[] args);
-
-    }
-}
diff --git a/Tiger.IBusiness/DbCache/IMesDefectCache.cs b/Tiger.IBusiness/DbCache/IMesDefectCache.cs
deleted file mode 100644
index a598a2e..0000000
--- a/Tiger.IBusiness/DbCache/IMesDefectCache.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-锘縰sing Autofac;
-using Rhea.Common;
-using Rhea.Common.Interface;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.Threading;
-using System.Threading.Tasks;
-using Tiger.Model;
-
-namespace Tiger.IBusiness
-{
-    public interface IMesDefectCache : ITigerCache
-    {
-        public List<BAS_DEFECT_GRP> Groups { get; set; }
-        public List<BAS_DEFECT> Defects { get; set; }
-        public BAS_DEFECT this[string code, string group = null] { get; }
-    }
-}
diff --git a/Tiger.IBusiness/DbCache/IMesPositionCache.cs b/Tiger.IBusiness/DbCache/IMesPositionCache.cs
deleted file mode 100644
index ad7baf7..0000000
--- a/Tiger.IBusiness/DbCache/IMesPositionCache.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-锘縰sing Autofac;
-using Rhea.Common;
-using Rhea.Common.Interface;
-using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-using Tiger.Model;
-
-namespace Tiger.IBusiness
-{
-    public interface IMesPositionCache : ITigerCache
-    {
-        public List<MES_POSITION> Positions { get; set; }
-        public MES_POSITION this[string code] { get; }
-
-    }
-}
diff --git a/Tiger.IBusiness/DbCache/ISysParamCache.cs b/Tiger.IBusiness/DbCache/ISysParamCache.cs
deleted file mode 100644
index 4bdb90f..0000000
--- a/Tiger.IBusiness/DbCache/ISysParamCache.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-锘縰sing Autofac;
-using Rhea.Common;
-using Rhea.Common.Interface;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.Threading;
-using System.Threading.Tasks;
-using Tiger.Model;
-
-namespace Tiger.IBusiness
-{
-    public interface ISysParamCache : ITigerCache
-    {
-        public List<SYS_PARAMGROUP> Groups { get; set; }
-        public List<SYS_PARAM> Params { get; set; }
-        public SYS_PARAM this[string code, string group = null] { get; }
-    }
-}
diff --git a/Tiger.IBusiness/DbCache/ITigerCache.cs b/Tiger.IBusiness/DbCache/ITigerCache.cs
deleted file mode 100644
index f43bed0..0000000
--- a/Tiger.IBusiness/DbCache/ITigerCache.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-锘縰sing Sundial;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Tiger.IBusiness
-{
-    /// <summary>
-    /// 鏁版嵁搴撶紦瀛樺熀绫�
-    /// </summary>
-    public interface ITigerCache
-    {
-        #region Propertys
-        public string Id { get; set; }
-        public string Tag { get; set; }
-        public string Name { get; set; }
-        public bool IsRunning { get; set; }
-        #endregion
-
-        #region Methods
-        /// <summary>
-        /// 鍚姩鑷姩鏇存柊缂撳瓨
-        /// </summary>
-        public void Start();
-        /// <summary>
-        /// 鍏抽棴鑷姩鏇存柊缂撳瓨
-        /// </summary>
-        public void Stop();
-        /// <summary>
-        /// 鏇存柊鏁版嵁缂撳瓨
-        /// </summary>
-        public void Update();
-        #endregion
-    }
-}
diff --git a/Tiger.IBusiness/Email/IMailService.cs b/Tiger.IBusiness/Email/IMailService.cs
deleted file mode 100644
index 40da6d5..0000000
--- a/Tiger.IBusiness/Email/IMailService.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using MailKit;
-using MailKit.Net.Smtp;
-using MailKit.Security;
-using System.Text;
-using System.Threading.Tasks;
-using Tiger.Model;
-
-namespace Tiger.IBusiness
-{
-    public interface IMailServiceApi
-    {
-        public SendResultEntity SendMail(MailBodyEntity mailBodyEntity,
-            SendServerConfigurationEntity sendServerConfiguration);
-        public void Connection(MailBodyEntity mailBodyEntity, SendServerConfigurationEntity sendServerConfiguration,
-            SmtpClient client, SendResultEntity sendResultEntity);
-        public void Authenticate(MailBodyEntity mailBodyEntity, SendServerConfigurationEntity sendServerConfiguration,
-            SmtpClient client, SendResultEntity sendResultEntity);
-        public void Send(MailBodyEntity mailBodyEntity, SendServerConfigurationEntity sendServerConfiguration,
-            SmtpClient client, SendResultEntity sendResultEntity);
-        public MailServerInformation SmtpClientBaseMessage(SmtpClient client);
-    }
-}
diff --git a/Tiger.IBusiness/Extensions/ApiActionExtension.cs b/Tiger.IBusiness/Extensions/ApiActionExtension.cs
deleted file mode 100644
index 6e12f3a..0000000
--- a/Tiger.IBusiness/Extensions/ApiActionExtension.cs
+++ /dev/null
@@ -1,248 +0,0 @@
-锘縰sing Rhea.Common;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Tiger.IBusiness
-{
-    ///// <summary>
-    ///// API 杩斿洖 娉涘瀷鏍囧噯绫�
-    ///// </summary>
-    ///// <typeparam name="T">Data鏁版嵁绫诲瀷</typeparam>
-    //public class ApiAction<T> : Rhea.Common.ApiAction<T>
-    //{
-    //    /// <summary>
-    //    /// 杩斿洖鐨勬湰鍦板寲淇℃伅
-    //    /// </summary>
-    //    public AuthOptions Options { get; set; } = new();
-
-    //    /// <summary>
-    //    /// 鎹曡幏褰撳墠 Action 鐨勫紓甯革紝杩斿洖鏁版嵁鍜屾秷鎭紝 骞惰褰曟棩蹇�
-    //    /// </summary>
-    //    /// <param name="ex">鎹曡幏鍒扮殑寮傚父</param>
-    //    /// <param name="localeMsg">杩斿洖娑堟伅</param>
-    //    /// <param name="data">杩斿洖鏁版嵁</param>
-    //    /// <returns></returns>
-    //    public ApiAction<T> CatchExceptionWithLog(Exception ex, Locale localeMsg, T data)
-    //    {
-    //        Data = data;
-    //        return CatchExceptionWithLog(ex, localeMsg);
-    //    }
-
-    //    /// <summary>
-    //    /// 鎹曡幏褰撳墠 Action 鐨勫紓甯革紝杩斿洖娑堟伅锛� 骞惰褰曟棩蹇�
-    //    /// </summary>
-    //    /// <param name="ex">鎹曡幏鍒扮殑寮傚父</param>
-    //    /// <param name="localeMsg">杩斿洖娑堟伅</param>
-    //    public ApiAction<T> CatchExceptionWithLog(Exception ex, Locale localeMsg)
-    //    {
-    //        CatchException(ex, localeMsg);
-    //        Logger.Default.Fatal(ex, localeMsg.Default());
-    //        return this;
-    //    }
-
-    //    /// <summary>
-    //    /// 鎹曡幏褰撳墠 Action 鐨勫紓甯革紝杩斿洖鏁版嵁鍜屾秷鎭紝 骞惰褰曟棩蹇�
-    //    /// </summary>
-    //    /// <param name="ex">鎹曡幏鍒扮殑寮傚父</param>
-    //    /// <param name="msg">杩斿洖娑堟伅锛屾渶缁堟寜 "Catch ApiAction Exception : {msg}. {ex.Message}{ex.StackTrace}" 杩斿洖</param>
-    //    /// <param name="data">杩斿洖鏁版嵁</param>
-    //    /// <returns></returns>
-    //    public ApiAction<T> CatchExceptionWithLog(Exception ex, string msg, T data)
-    //    {
-    //        Data = data;
-    //        return CatchExceptionWithLog(ex, msg);
-    //    }
-
-    //    /// <summary>
-    //    /// 鎹曡幏褰撳墠 Action 鐨勫紓甯革紝杩斿洖娑堟伅锛� 骞惰褰曟棩蹇�
-    //    /// </summary>
-    //    /// <param name="ex">鎹曡幏鍒扮殑寮傚父</param>
-    //    /// <param name="msg">杩斿洖娑堟伅锛屾渶缁堟寜 "Catch ApiAction Exception : {msg}. {ex.Message}{ex.StackTrace}" 杩斿洖</param>
-    //    public ApiAction<T> CatchExceptionWithLog(Exception ex, string msg = null)
-    //    {
-    //        CatchException(ex, msg);
-    //        Logger.Default.Fatal(ex, msg);
-    //        return this;
-    //    }
-    //}
-
-    ///// <summary>
-    ///// API 杩斿洖 鏍囧噯绫�
-    ///// </summary>
-    //public class ApiAction : Rhea.Common.ApiAction
-    //{
-    //    /// <summary>
-    //    /// 杩斿洖鐨勬湰鍦板寲淇℃伅
-    //    /// </summary>
-    //    public AuthOptions Options { get; set; } = new();
-
-    //    /// <summary>
-    //    /// 鎹曡幏褰撳墠 Action 鐨勫紓甯革紝杩斿洖鏁版嵁鍜屾秷鎭紝 骞惰褰曟棩蹇�
-    //    /// </summary>
-    //    /// <param name="ex">鎹曡幏鍒扮殑寮傚父</param>
-    //    /// <param name="localeMsg">杩斿洖娑堟伅</param>
-    //    /// <param name="data">杩斿洖鏁版嵁</param>
-    //    /// <returns></returns>
-    //    public ApiAction CatchExceptionWithLog(Exception ex, Locale localeMsg, object data)
-    //    {
-    //        Data = data;
-    //        return CatchExceptionWithLog(ex, localeMsg);
-    //    }
-
-    //    /// <summary>
-    //    /// 鎹曡幏褰撳墠 Action 鐨勫紓甯革紝杩斿洖娑堟伅锛� 骞惰褰曟棩蹇�
-    //    /// </summary>
-    //    /// <param name="ex">鎹曡幏鍒扮殑寮傚父</param>
-    //    /// <param name="localeMsg">杩斿洖娑堟伅</param>
-    //    public ApiAction CatchExceptionWithLog(Exception ex, Locale localeMsg)
-    //    {
-    //        CatchException(ex, localeMsg);
-    //        Logger.Default.Fatal(ex, localeMsg.Default());
-    //        return this;
-    //    }
-
-    //    /// <summary>
-    //    /// 鎹曡幏褰撳墠 Action 鐨勫紓甯革紝杩斿洖鏁版嵁鍜屾秷鎭紝 骞惰褰曟棩蹇�
-    //    /// </summary>
-    //    /// <param name="ex">鎹曡幏鍒扮殑寮傚父</param>
-    //    /// <param name="msg">杩斿洖娑堟伅锛屾渶缁堟寜 "Catch ApiAction Exception : {msg}. {ex.Message}{ex.StackTrace}" 杩斿洖</param>
-    //    /// <param name="data">杩斿洖鏁版嵁</param>
-    //    /// <returns></returns>
-    //    public ApiAction CatchExceptionWithLog(Exception ex, string msg, object data)
-    //    {
-    //        Data = data;
-    //        return CatchExceptionWithLog(ex, msg);
-    //    }
-
-    //    /// <summary>
-    //    /// 鎹曡幏褰撳墠 Action 鐨勫紓甯革紝杩斿洖娑堟伅锛� 骞惰褰曟棩蹇�
-    //    /// </summary>
-    //    /// <param name="ex">鎹曡幏鍒扮殑寮傚父</param>
-    //    /// <param name="msg">杩斿洖娑堟伅锛屾渶缁堟寜 "Catch ApiAction Exception : {msg}. {ex.Message}{ex.StackTrace}" 杩斿洖</param>
-    //    public ApiAction CatchExceptionWithLog(Exception ex, string msg = null)
-    //    {
-    //        CatchException(ex, msg);
-    //        Logger.Default.Fatal(ex, msg);
-    //        return this;
-    //    }
-    //}
-
-    /// <summary>
-    /// ApiAction 鎵╁睍绫�
-    /// </summary>
-    public static class ApiActionExtension
-    {
-        /// <summary>
-        /// 鎹曡幏褰撳墠 Action 鐨勫紓甯革紝杩斿洖鏁版嵁鍜屾秷鎭紝 骞惰褰曟棩蹇�
-        /// </summary>
-        /// <param name="ex">鎹曡幏鍒扮殑寮傚父</param>
-        /// <param name="localeMsg">杩斿洖娑堟伅</param>
-        /// <param name="data">杩斿洖鏁版嵁</param>
-        /// <returns></returns>
-        public static ApiAction<T> CatchExceptionWithLog<T>(this ApiAction<T> action, Exception ex, Locale localeMsg, T data)
-        {
-            action.Data = data;
-            return CatchExceptionWithLog<T>(action, ex, localeMsg);
-        }
-
-        /// <summary>
-        /// 鎹曡幏褰撳墠 Action 鐨勫紓甯革紝杩斿洖娑堟伅锛� 骞惰褰曟棩蹇�
-        /// </summary>
-        /// <param name="ex">鎹曡幏鍒扮殑寮傚父</param>
-        /// <param name="localeMsg">杩斿洖娑堟伅</param>
-        public static ApiAction<T> CatchExceptionWithLog<T>(this ApiAction<T> action, Exception ex, Locale localeMsg)
-        {
-            action.CatchException(ex, localeMsg);
-            Logger.Default.Fatal(ex, localeMsg.Default());
-            return action;
-        }
-
-        /// <summary>
-        /// 鎹曡幏褰撳墠 Action 鐨勫紓甯革紝杩斿洖鏁版嵁鍜屾秷鎭紝 骞惰褰曟棩蹇�
-        /// </summary>
-        /// <param name="ex">鎹曡幏鍒扮殑寮傚父</param>
-        /// <param name="msg">杩斿洖娑堟伅锛屾渶缁堟寜 "Catch ApiAction Exception : {msg}. {ex.Message}{ex.StackTrace}" 杩斿洖</param>
-        /// <param name="data">杩斿洖鏁版嵁</param>
-        /// <returns></returns>
-        public static ApiAction<T> CatchExceptionWithLog<T>(this ApiAction<T> action, Exception ex, string msg, T data)
-        {
-            action.Data = data;
-            return CatchExceptionWithLog<T>(action, ex, msg);
-        }
-
-        /// <summary>
-        /// 鎹曡幏褰撳墠 Action 鐨勫紓甯革紝杩斿洖娑堟伅锛� 骞惰褰曟棩蹇�
-        /// </summary>
-        /// <param name="ex">鎹曡幏鍒扮殑寮傚父</param>
-        /// <param name="msg">杩斿洖娑堟伅锛屾渶缁堟寜 "Catch ApiAction Exception : {msg}. {ex.Message}{ex.StackTrace}" 杩斿洖</param>
-        public static ApiAction<T> CatchExceptionWithLog<T>(this ApiAction<T> action, Exception ex, string msg = null)
-        {
-            action.CatchException(ex, msg);
-            Logger.Default.Fatal(ex, msg);
-            return action;
-        }
-
-        /// <summary>
-        /// 鎹曡幏褰撳墠 Action 鐨勫紓甯革紝杩斿洖鏁版嵁鍜屾秷鎭紝 骞惰褰曟棩蹇�
-        /// </summary>
-        /// <param name="ex">鎹曡幏鍒扮殑寮傚父</param>
-        /// <param name="localeMsg">杩斿洖娑堟伅</param>
-        /// <param name="data">杩斿洖鏁版嵁</param>
-        public static ApiAction CatchExceptionWithLog(this ApiAction action, Exception ex, Locale localeMsg, object data)
-        {
-            action.Data = data;
-            return CatchExceptionWithLog(action, ex, localeMsg);
-        }
-
-        /// <summary>
-        /// 鎹曡幏褰撳墠 Action 鐨勫紓甯革紝杩斿洖娑堟伅锛� 骞惰褰曟棩蹇�
-        /// </summary>
-        /// <param name="ex">鎹曡幏鍒扮殑寮傚父</param>
-        /// <param name="localeMsg">杩斿洖娑堟伅</param>
-        public static ApiAction CatchExceptionWithLog(this ApiAction action, Exception ex, Locale localeMsg)
-        {
-            action.CatchException(ex, localeMsg);
-            Logger.Default.Fatal(ex, localeMsg.Default());
-            return action;
-        }
-
-
-        /// <summary>
-        /// 鎹曡幏褰撳墠 Action 鐨勫紓甯革紝杩斿洖鏁版嵁鍜屾秷鎭紝 骞惰褰曟棩蹇�
-        /// </summary>
-        /// <param name="ex">鎹曡幏鍒扮殑寮傚父</param>
-        /// <param name="msg">杩斿洖娑堟伅锛屾渶缁堟寜 "Catch ApiAction Exception : {msg}. {ex.Message}{ex.StackTrace}" 杩斿洖</param>
-        /// <param name="data">杩斿洖鏁版嵁</param>
-        public static ApiAction CatchExceptionWithLog(this ApiAction action, Exception ex, string msg, object data)
-        {
-            action.Data = data;
-            return CatchExceptionWithLog(action, ex, msg);
-        }
-
-        /// <summary>
-        /// 鎹曡幏褰撳墠 Action 鐨勫紓甯革紝杩斿洖娑堟伅锛� 骞惰褰曟棩蹇�
-        /// </summary>
-        /// <param name="ex">鎹曡幏鍒扮殑寮傚父</param>
-        /// <param name="msg">杩斿洖娑堟伅锛屾渶缁堟寜 "Catch ApiAction Exception : {msg}. {ex.Message}{ex.StackTrace}" 杩斿洖</param>
-        public static ApiAction CatchExceptionWithLog(this ApiAction action, Exception ex, string msg = null)
-        {
-            action.CatchException(ex, msg);
-            Logger.Default.Fatal(ex, msg);
-            return action;
-        }
-    }
-
-    /// <summary>
-    /// ApiAction 鎵╁睍瀹炰綋
-    /// </summary>
-    public class ApiActionExt : ApiAction
-    {
-        /// <summary>
-        /// SqlSugar IncludesAllFirstLayer
-        /// </summary>
-        public bool NeedInclude { get; set; } = false;
-    }
-}
diff --git a/Tiger.IBusiness/Extensions/DbExtension.cs b/Tiger.IBusiness/Extensions/DbExtension.cs
deleted file mode 100644
index 74255b5..0000000
--- a/Tiger.IBusiness/Extensions/DbExtension.cs
+++ /dev/null
@@ -1,752 +0,0 @@
-锘縰sing Rhea.Common;
-using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Linq;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.Threading.Tasks;
-using Tiger.Model;
-
-namespace Tiger.IBusiness
-{
-    /// <summary>
-    /// SqlSugar 鎵╁睍鏂规硶
-    /// </summary>
-    public static class DbExtension
-    {
-        /// <summary>
-        /// 閫氳繃鎺堟潈鏌ヨ鏁版嵁
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="queryable"></param>
-        /// <param name="userId"></param>
-        /// <param name="options"></param>
-        /// <returns></returns>
-        public static ISugarQueryable<T> ByAuth<T>(this ISugarQueryable<T> queryable, string userId, DbAuth options) where T : iTableHasAuth, new()
-        {
-            //缁勭粐鏈烘瀯鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Org) && !typeof(T).GetProperty("AUTH_ORG").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_ORG>().Where(authorization => authorization.USER_ID == userId && authorization.ORG_CODE == q.AUTH_ORG).Any());
-            }
-            //鐢熶骇鍗曞厓鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Prod) && !typeof(T).GetProperty("AUTH_PROD").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_PROD>().Where(authorization => authorization.USER_ID == userId && authorization.PROD_CODE == q.AUTH_PROD).Any());
-            }
-            //浠撳簱鍗曞厓鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Wh) && !typeof(T).GetProperty("AUTH_WH").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_WH>().Where(authorization => authorization.USER_ID == userId && authorization.WH_CODE == q.AUTH_WH).Any());
-            }
-
-            return queryable;
-        }
-
-        /// <summary>
-        /// 閫氳繃鎺堟潈鏌ヨ鏁版嵁
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="queryable"></param>
-        /// <param name="options"></param>
-        /// <returns></returns>
-        public static ISugarQueryable<T> ByAuth<T>(this ISugarQueryable<T> queryable, AuthOption options) where T : iTableHasAuth, new()
-        {
-            options.OrgCode = options.OrgCode.IsNullOrEmpty(options.CurOrg);
-            //缁勭粐鏈烘瀯鎺堟潈楠岃瘉
-            if (!options.OrgCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_ORG").IsNullOrEmpty())
-            {
-                var orgList = options.OrgCode.Split(",", StringSplitOptions.RemoveEmptyEntries);
-                queryable = queryable.Where(q => orgList.Any(authorization => authorization == q.AUTH_ORG));
-            }
-            //鐢熶骇鍗曞厓鎺堟潈楠岃瘉
-            if (!options.ProdCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_PROD").IsNullOrEmpty())
-            {
-                var prodList = options.ProdCode.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList();
-                queryable = queryable.Where(q => prodList.Any(authorization => authorization == q.AUTH_PROD));
-            }
-            //浠撳簱鍗曞厓鎺堟潈楠岃瘉
-            if (!options.WhCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_WH").IsNullOrEmpty())
-            {
-                var whList = options.WhCode.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList();
-                queryable = queryable.Where(q => whList.Any(authorization => authorization == q.AUTH_WH));
-            }
-            return queryable.ByAuth(options.UserId, options.GetOptions());
-        }
-
-        /// <summary>
-        /// 閫氳繃鎺堟潈鏌ヨ鏁版嵁<br/>
-        /// 娉ㄦ剰锛氳仈琛ㄦ巿鏉冩煡璇㈡椂锛屼富琛ㄧ殑鍒悕蹇呴』涓簈锛屼笉鐒朵細鍑洪敊
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <typeparam name="T2"></typeparam>
-        /// <param name="queryable"></param>
-        /// <param name="userId"></param>
-        /// <param name="options"></param>
-        /// <returns></returns>
-        public static ISugarQueryable<T, T2> ByAuth<T, T2>(this ISugarQueryable<T,T2> queryable, string userId, DbAuth options) where T : iTableHasAuth, new()
-        {
-            //缁勭粐鏈烘瀯鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Org) && !typeof(T).GetProperty("AUTH_ORG").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_ORG>().Where(authorization => authorization.USER_ID == userId && authorization.ORG_CODE == q.AUTH_ORG).Any());
-            }
-            //鐢熶骇鍗曞厓鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Prod) && !typeof(T).GetProperty("AUTH_PROD").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_PROD>().Where(authorization => authorization.USER_ID == userId && authorization.PROD_CODE == q.AUTH_PROD).Any());
-            }
-            //浠撳簱鍗曞厓鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Wh) && !typeof(T).GetProperty("AUTH_WH").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_WH>().Where(authorization => authorization.USER_ID == userId && authorization.WH_CODE == q.AUTH_WH).Any());
-            }
-
-            return queryable;
-        }
-
-        /// <summary>
-        /// 閫氳繃鎺堟潈鏌ヨ鏁版嵁<br/>
-        /// 娉ㄦ剰锛氳仈琛ㄦ巿鏉冩煡璇㈡椂锛屼富琛ㄧ殑鍒悕蹇呴』涓簈锛屼笉鐒朵細鍑洪敊
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <typeparam name="T2"></typeparam>
-        /// <param name="queryable"></param>
-        /// <param name="options"></param>
-        /// <returns></returns>
-        public static ISugarQueryable<T, T2> ByAuth<T, T2>(this ISugarQueryable<T, T2> queryable, AuthOption options) where T : iTableHasAuth, new()
-        {
-            //缁勭粐鏈烘瀯鎺堟潈楠岃瘉
-            if (!options.OrgCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_ORG").IsNullOrEmpty())
-            {
-                var orgList = options.OrgCode.Split(",", StringSplitOptions.RemoveEmptyEntries);
-                queryable = queryable.Where(q => orgList.Any(authorization => authorization == q.AUTH_ORG));
-            }
-            //鐢熶骇鍗曞厓鎺堟潈楠岃瘉
-            if (!options.ProdCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_PROD").IsNullOrEmpty())
-            {
-                var prodList = options.ProdCode.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList();
-                queryable = queryable.Where(q => prodList.Any(authorization => authorization == q.AUTH_PROD));
-            }
-            //浠撳簱鍗曞厓鎺堟潈楠岃瘉
-            if (!options.WhCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_WH").IsNullOrEmpty())
-            {
-                var whList = options.WhCode.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList();
-                queryable = queryable.Where(q => whList.Any(authorization => authorization == q.AUTH_WH));
-            }
-            return queryable.ByAuth(options.UserId, options.GetOptions());
-        }
-
-        /// <summary>
-        /// 閫氳繃鎺堟潈鏌ヨ鏁版嵁<br/>
-        /// 娉ㄦ剰锛氳仈琛ㄦ巿鏉冩煡璇㈡椂锛屼富琛ㄧ殑鍒悕蹇呴』涓簈锛屼笉鐒朵細鍑洪敊
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="queryable"></param>
-        /// <param name="userId"></param>
-        /// <param name="options"></param>
-        /// <returns></returns>
-        public static ISugarQueryable<T, T2, T3> ByAuth<T, T2, T3>(this ISugarQueryable<T, T2, T3> queryable, string userId, DbAuth options) where T : iTableHasAuth, new()
-        {
-            //缁勭粐鏈烘瀯鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Org) && !typeof(T).GetProperty("AUTH_ORG").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_ORG>().Where(authorization => authorization.USER_ID == userId && authorization.ORG_CODE == q.AUTH_ORG).Any());
-            }
-            //鐢熶骇鍗曞厓鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Prod) && !typeof(T).GetProperty("AUTH_PROD").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_PROD>().Where(authorization => authorization.USER_ID == userId && authorization.PROD_CODE == q.AUTH_PROD).Any());
-            }
-            //浠撳簱鍗曞厓鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Wh) && !typeof(T).GetProperty("AUTH_WH").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_WH>().Where(authorization => authorization.USER_ID == userId && authorization.WH_CODE == q.AUTH_WH).Any());
-            }
-
-            return queryable;
-        }
-
-        /// <summary>
-        /// 閫氳繃鎺堟潈鏌ヨ鏁版嵁<br/>
-        /// 娉ㄦ剰锛氳仈琛ㄦ巿鏉冩煡璇㈡椂锛屼富琛ㄧ殑鍒悕蹇呴』涓簈锛屼笉鐒朵細鍑洪敊
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="queryable"></param>
-        /// <param name="options"></param>
-        /// <returns></returns>
-        public static ISugarQueryable<T, T2, T3> ByAuth<T, T2, T3>(this ISugarQueryable<T, T2, T3> queryable, AuthOption options) where T : iTableHasAuth, new()
-        {
-            //缁勭粐鏈烘瀯鎺堟潈楠岃瘉
-            if (!options.OrgCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_ORG").IsNullOrEmpty())
-            {
-                var orgList = options.OrgCode.Split(",", StringSplitOptions.RemoveEmptyEntries);
-                queryable = queryable.Where(q => orgList.Any(authorization => authorization == q.AUTH_ORG));
-            }
-            //鐢熶骇鍗曞厓鎺堟潈楠岃瘉
-            if (!options.ProdCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_PROD").IsNullOrEmpty())
-            {
-                var prodList = options.ProdCode.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList();
-                queryable = queryable.Where(q => prodList.Any(authorization => authorization == q.AUTH_PROD));
-            }
-            //浠撳簱鍗曞厓鎺堟潈楠岃瘉
-            if (!options.WhCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_WH").IsNullOrEmpty())
-            {
-                var whList = options.WhCode.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList();
-                queryable = queryable.Where(q => whList.Any(authorization => authorization == q.AUTH_WH));
-            }
-            return queryable.ByAuth(options.UserId, options.GetOptions());
-        }
-
-        /// <summary>
-        /// 閫氳繃鎺堟潈鏌ヨ鏁版嵁<br/>
-        /// 娉ㄦ剰锛氳仈琛ㄦ巿鏉冩煡璇㈡椂锛屼富琛ㄧ殑鍒悕蹇呴』涓簈锛屼笉鐒朵細鍑洪敊
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="queryable"></param>
-        /// <param name="userId"></param>
-        /// <param name="options"></param>
-        /// <returns></returns>
-        public static ISugarQueryable<T, T2, T3, T4> ByAuth<T, T2, T3, T4>(this ISugarQueryable<T, T2, T3, T4> queryable, string userId, DbAuth options) where T : iTableHasAuth, new()
-        {
-            //缁勭粐鏈烘瀯鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Org) && !typeof(T).GetProperty("AUTH_ORG").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_ORG>().Where(authorization => authorization.USER_ID == userId && authorization.ORG_CODE == q.AUTH_ORG).Any());
-            }
-            //鐢熶骇鍗曞厓鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Prod) && !typeof(T).GetProperty("AUTH_PROD").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_PROD>().Where(authorization => authorization.USER_ID == userId && authorization.PROD_CODE == q.AUTH_PROD).Any());
-            }
-            //浠撳簱鍗曞厓鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Wh) && !typeof(T).GetProperty("AUTH_WH").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_WH>().Where(authorization => authorization.USER_ID == userId && authorization.WH_CODE == q.AUTH_WH).Any());
-            }
-
-            return queryable;
-        }
-
-        /// <summary>
-        /// 閫氳繃鎺堟潈鏌ヨ鏁版嵁<br/>
-        /// 娉ㄦ剰锛氳仈琛ㄦ巿鏉冩煡璇㈡椂锛屼富琛ㄧ殑鍒悕蹇呴』涓簈锛屼笉鐒朵細鍑洪敊
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="queryable"></param>
-        /// <param name="options"></param>
-        /// <returns></returns>
-        public static ISugarQueryable<T, T2, T3, T4> ByAuth<T, T2, T3, T4>(this ISugarQueryable<T, T2, T3, T4> queryable, AuthOption options) where T : iTableHasAuth, new()
-        {
-            //缁勭粐鏈烘瀯鎺堟潈楠岃瘉
-            if (!options.OrgCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_ORG").IsNullOrEmpty())
-            {
-                var orgList = options.OrgCode.Split(",", StringSplitOptions.RemoveEmptyEntries);
-                queryable = queryable.Where(q => orgList.Any(authorization => authorization == q.AUTH_ORG));
-            }
-            //鐢熶骇鍗曞厓鎺堟潈楠岃瘉
-            if (!options.ProdCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_PROD").IsNullOrEmpty())
-            {
-                var prodList = options.ProdCode.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList();
-                queryable = queryable.Where(q => prodList.Any(authorization => authorization == q.AUTH_PROD));
-            }
-            //浠撳簱鍗曞厓鎺堟潈楠岃瘉
-            if (!options.WhCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_WH").IsNullOrEmpty())
-            {
-                var whList = options.WhCode.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList();
-                queryable = queryable.Where(q => whList.Any(authorization => authorization == q.AUTH_WH));
-            }
-            return queryable.ByAuth(options.UserId, options.GetOptions());
-        }
-
-        /// <summary>
-        /// 閫氳繃鎺堟潈鏌ヨ鏁版嵁<br/>
-        /// 娉ㄦ剰锛氳仈琛ㄦ巿鏉冩煡璇㈡椂锛屼富琛ㄧ殑鍒悕蹇呴』涓簈锛屼笉鐒朵細鍑洪敊
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="queryable"></param>
-        /// <param name="userId"></param>
-        /// <param name="options"></param>
-        /// <returns></returns>
-        public static ISugarQueryable<T, T2, T3, T4, T5> ByAuth<T, T2, T3, T4, T5>(this ISugarQueryable<T, T2, T3, T4, T5> queryable, string userId, DbAuth options) where T : iTableHasAuth, new()
-        {
-            //缁勭粐鏈烘瀯鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Org) && !typeof(T).GetProperty("AUTH_ORG").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_ORG>().Where(authorization => authorization.USER_ID == userId && authorization.ORG_CODE == q.AUTH_ORG).Any());
-            }
-            //鐢熶骇鍗曞厓鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Prod) && !typeof(T).GetProperty("AUTH_PROD").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_PROD>().Where(authorization => authorization.USER_ID == userId && authorization.PROD_CODE == q.AUTH_PROD).Any());
-            }
-            //浠撳簱鍗曞厓鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Wh) && !typeof(T).GetProperty("AUTH_WH").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_WH>().Where(authorization => authorization.USER_ID == userId && authorization.WH_CODE == q.AUTH_WH).Any());
-            }
-
-            return queryable;
-        }
-
-        /// <summary>
-        /// 閫氳繃鎺堟潈鏌ヨ鏁版嵁<br/>
-        /// 娉ㄦ剰锛氳仈琛ㄦ巿鏉冩煡璇㈡椂锛屼富琛ㄧ殑鍒悕蹇呴』涓簈锛屼笉鐒朵細鍑洪敊
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="queryable"></param>
-        /// <param name="options"></param>
-        /// <returns></returns>
-        public static ISugarQueryable<T, T2, T3, T4, T5> ByAuth<T, T2, T3, T4, T5>(this ISugarQueryable<T, T2, T3, T4, T5> queryable, AuthOption options) where T : iTableHasAuth, new()
-        {
-            //缁勭粐鏈烘瀯鎺堟潈楠岃瘉
-            if (!options.OrgCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_ORG").IsNullOrEmpty())
-            {
-                var orgList = options.OrgCode.Split(",", StringSplitOptions.RemoveEmptyEntries);
-                queryable = queryable.Where(q => orgList.Any(authorization => authorization == q.AUTH_ORG));
-            }
-            //鐢熶骇鍗曞厓鎺堟潈楠岃瘉
-            if (!options.ProdCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_PROD").IsNullOrEmpty())
-            {
-                var prodList = options.ProdCode.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList();
-                queryable = queryable.Where(q => prodList.Any(authorization => authorization == q.AUTH_PROD));
-            }
-            //浠撳簱鍗曞厓鎺堟潈楠岃瘉
-            if (!options.WhCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_WH").IsNullOrEmpty())
-            {
-                var whList = options.WhCode.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList();
-                queryable = queryable.Where(q => whList.Any(authorization => authorization == q.AUTH_WH));
-            }
-            return queryable.ByAuth(options.UserId, options.GetOptions());
-        }
-
-        /// <summary>
-        /// 閫氳繃鎺堟潈鏌ヨ鏁版嵁<br/>
-        /// 娉ㄦ剰锛氳仈琛ㄦ巿鏉冩煡璇㈡椂锛屼富琛ㄧ殑鍒悕蹇呴』涓簈锛屼笉鐒朵細鍑洪敊
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="queryable"></param>
-        /// <param name="userId"></param>
-        /// <param name="options"></param>
-        /// <returns></returns>
-        public static ISugarQueryable<T, T2, T3, T4, T5, T6> ByAuth<T, T2, T3, T4, T5, T6>(this ISugarQueryable<T, T2, T3, T4, T5, T6> queryable, string userId, DbAuth options) where T : iTableHasAuth, new()
-        {
-            //缁勭粐鏈烘瀯鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Org) && !typeof(T).GetProperty("AUTH_ORG").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_ORG>().Where(authorization => authorization.USER_ID == userId && authorization.ORG_CODE == q.AUTH_ORG).Any());
-            }
-            //鐢熶骇鍗曞厓鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Prod) && !typeof(T).GetProperty("AUTH_PROD").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_PROD>().Where(authorization => authorization.USER_ID == userId && authorization.PROD_CODE == q.AUTH_PROD).Any());
-            }
-            //浠撳簱鍗曞厓鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Wh) && !typeof(T).GetProperty("AUTH_WH").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_WH>().Where(authorization => authorization.USER_ID == userId && authorization.WH_CODE == q.AUTH_WH).Any());
-            }
-
-            return queryable;
-        }
-
-        /// <summary>
-        /// 閫氳繃鎺堟潈鏌ヨ鏁版嵁<br/>
-        /// 娉ㄦ剰锛氳仈琛ㄦ巿鏉冩煡璇㈡椂锛屼富琛ㄧ殑鍒悕蹇呴』涓簈锛屼笉鐒朵細鍑洪敊
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="queryable"></param>
-        /// <param name="options"></param>
-        /// <returns></returns>
-        public static ISugarQueryable<T, T2, T3, T4, T5, T6> ByAuth<T, T2, T3, T4, T5, T6>(this ISugarQueryable<T, T2, T3, T4, T5, T6> queryable, AuthOption options) where T : iTableHasAuth, new()
-        {
-            //缁勭粐鏈烘瀯鎺堟潈楠岃瘉
-            if (!options.OrgCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_ORG").IsNullOrEmpty())
-            {
-                var orgList = options.OrgCode.Split(",", StringSplitOptions.RemoveEmptyEntries);
-                queryable = queryable.Where(q => orgList.Any(authorization => authorization == q.AUTH_ORG));
-            }
-            //鐢熶骇鍗曞厓鎺堟潈楠岃瘉
-            if (!options.ProdCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_PROD").IsNullOrEmpty())
-            {
-                var prodList = options.ProdCode.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList();
-                queryable = queryable.Where(q => prodList.Any(authorization => authorization == q.AUTH_PROD));
-            }
-            //浠撳簱鍗曞厓鎺堟潈楠岃瘉
-            if (!options.WhCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_WH").IsNullOrEmpty())
-            {
-                var whList = options.WhCode.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList();
-                queryable = queryable.Where(q => whList.Any(authorization => authorization == q.AUTH_WH));
-            }
-            return queryable.ByAuth(options.UserId, options.GetOptions());
-        }
-
-        /// <summary>
-        /// 閫氳繃鎺堟潈鏌ヨ鏁版嵁<br/>
-        /// 娉ㄦ剰锛氳仈琛ㄦ巿鏉冩煡璇㈡椂锛屼富琛ㄧ殑鍒悕蹇呴』涓簈锛屼笉鐒朵細鍑洪敊
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="queryable"></param>
-        /// <param name="userId"></param>
-        /// <param name="options"></param>
-        /// <returns></returns>
-        public static ISugarQueryable<T, T2, T3, T4, T5, T6, T7> ByAuth<T, T2, T3, T4, T5, T6, T7>(this ISugarQueryable<T, T2, T3, T4, T5, T6, T7> queryable, string userId, DbAuth options) where T : iTableHasAuth, new()
-        {
-            //缁勭粐鏈烘瀯鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Org) && !typeof(T).GetProperty("AUTH_ORG").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_ORG>().Where(authorization => authorization.USER_ID == userId && authorization.ORG_CODE == q.AUTH_ORG).Any());
-            }
-            //鐢熶骇鍗曞厓鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Prod) && !typeof(T).GetProperty("AUTH_PROD").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_PROD>().Where(authorization => authorization.USER_ID == userId && authorization.PROD_CODE == q.AUTH_PROD).Any());
-            }
-            //浠撳簱鍗曞厓鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Wh) && !typeof(T).GetProperty("AUTH_WH").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_WH>().Where(authorization => authorization.USER_ID == userId && authorization.WH_CODE == q.AUTH_WH).Any());
-            }
-
-            return queryable;
-        }
-
-        /// <summary>
-        /// 閫氳繃鎺堟潈鏌ヨ鏁版嵁<br/>
-        /// 娉ㄦ剰锛氳仈琛ㄦ巿鏉冩煡璇㈡椂锛屼富琛ㄧ殑鍒悕蹇呴』涓簈锛屼笉鐒朵細鍑洪敊
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="queryable"></param>
-        /// <param name="options"></param>
-        /// <returns></returns>
-        public static ISugarQueryable<T, T2, T3, T4, T5, T6, T7> ByAuth<T, T2, T3, T4, T5, T6, T7>(this ISugarQueryable<T, T2, T3, T4, T5, T6, T7> queryable, AuthOption options) where T : iTableHasAuth, new()
-        {
-            //缁勭粐鏈烘瀯鎺堟潈楠岃瘉
-            if (!options.OrgCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_ORG").IsNullOrEmpty())
-            {
-                var orgList = options.OrgCode.Split(",", StringSplitOptions.RemoveEmptyEntries);
-                queryable = queryable.Where(q => orgList.Any(authorization => authorization == q.AUTH_ORG));
-            }
-            //鐢熶骇鍗曞厓鎺堟潈楠岃瘉
-            if (!options.ProdCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_PROD").IsNullOrEmpty())
-            {
-                var prodList = options.ProdCode.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList();
-                queryable = queryable.Where(q => prodList.Any(authorization => authorization == q.AUTH_PROD));
-            }
-            //浠撳簱鍗曞厓鎺堟潈楠岃瘉
-            if (!options.WhCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_WH").IsNullOrEmpty())
-            {
-                var whList = options.WhCode.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList();
-                queryable = queryable.Where(q => whList.Any(authorization => authorization == q.AUTH_WH));
-            }
-            return queryable.ByAuth(options.UserId, options.GetOptions());
-        }
-
-        /// <summary>
-        /// 閫氳繃鎺堟潈鏌ヨ鏁版嵁<br/>
-        /// 娉ㄦ剰锛氳仈琛ㄦ巿鏉冩煡璇㈡椂锛屼富琛ㄧ殑鍒悕蹇呴』涓簈锛屼笉鐒朵細鍑洪敊
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="queryable"></param>
-        /// <param name="userId"></param>
-        /// <param name="options"></param>
-        /// <returns></returns>
-        public static ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8> ByAuth<T, T2, T3, T4, T5, T6, T7, T8>(this ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8> queryable, string userId, DbAuth options) where T : iTableHasAuth, new()
-        {
-            //缁勭粐鏈烘瀯鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Org) && !typeof(T).GetProperty("AUTH_ORG").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_ORG>().Where(authorization => authorization.USER_ID == userId && authorization.ORG_CODE == q.AUTH_ORG).Any());
-            }
-            //鐢熶骇鍗曞厓鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Prod) && !typeof(T).GetProperty("AUTH_PROD").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_PROD>().Where(authorization => authorization.USER_ID == userId && authorization.PROD_CODE == q.AUTH_PROD).Any());
-            }
-            //浠撳簱鍗曞厓鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Wh) && !typeof(T).GetProperty("AUTH_WH").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_WH>().Where(authorization => authorization.USER_ID == userId && authorization.WH_CODE == q.AUTH_WH).Any());
-            }
-
-            return queryable;
-        }
-
-        /// <summary>
-        /// 閫氳繃鎺堟潈鏌ヨ鏁版嵁<br/>
-        /// 娉ㄦ剰锛氳仈琛ㄦ巿鏉冩煡璇㈡椂锛屼富琛ㄧ殑鍒悕蹇呴』涓簈锛屼笉鐒朵細鍑洪敊
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="queryable"></param>
-        /// <param name="options"></param>
-        /// <returns></returns>
-        public static ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8> ByAuth<T, T2, T3, T4, T5, T6, T7, T8>(this ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8> queryable, AuthOption options) where T : iTableHasAuth, new()
-        {
-            //缁勭粐鏈烘瀯鎺堟潈楠岃瘉
-            if (!options.OrgCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_ORG").IsNullOrEmpty())
-            {
-                var orgList = options.OrgCode.Split(",", StringSplitOptions.RemoveEmptyEntries);
-                queryable = queryable.Where(q => orgList.Any(authorization => authorization == q.AUTH_ORG));
-            }
-            //鐢熶骇鍗曞厓鎺堟潈楠岃瘉
-            if (!options.ProdCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_PROD").IsNullOrEmpty())
-            {
-                var prodList = options.ProdCode.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList();
-                queryable = queryable.Where(q => prodList.Any(authorization => authorization == q.AUTH_PROD));
-            }
-            //浠撳簱鍗曞厓鎺堟潈楠岃瘉
-            if (!options.WhCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_WH").IsNullOrEmpty())
-            {
-                var whList = options.WhCode.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList();
-                queryable = queryable.Where(q => whList.Any(authorization => authorization == q.AUTH_WH));
-            }
-            return queryable.ByAuth(options.UserId, options.GetOptions());
-        }
-
-        /// <summary>
-        /// 閫氳繃鎺堟潈鏌ヨ鏁版嵁<br/>
-        /// 娉ㄦ剰锛氳仈琛ㄦ巿鏉冩煡璇㈡椂锛屼富琛ㄧ殑鍒悕蹇呴』涓簈锛屼笉鐒朵細鍑洪敊
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="queryable"></param>
-        /// <param name="userId"></param>
-        /// <param name="options"></param>
-        /// <returns></returns>
-        public static ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9> ByAuth<T, T2, T3, T4, T5, T6, T7, T8, T9>(this ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9> queryable, string userId, DbAuth options) where T : iTableHasAuth, new()
-        {
-            //缁勭粐鏈烘瀯鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Org) && !typeof(T).GetProperty("AUTH_ORG").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_ORG>().Where(authorization => authorization.USER_ID == userId && authorization.ORG_CODE == q.AUTH_ORG).Any());
-            }
-            //鐢熶骇鍗曞厓鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Prod) && !typeof(T).GetProperty("AUTH_PROD").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_PROD>().Where(authorization => authorization.USER_ID == userId && authorization.PROD_CODE == q.AUTH_PROD).Any());
-            }
-            //浠撳簱鍗曞厓鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Wh) && !typeof(T).GetProperty("AUTH_WH").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_WH>().Where(authorization => authorization.USER_ID == userId && authorization.WH_CODE == q.AUTH_WH).Any());
-            }
-
-            return queryable;
-        }
-
-        /// <summary>
-        /// 閫氳繃鎺堟潈鏌ヨ鏁版嵁<br/>
-        /// 娉ㄦ剰锛氳仈琛ㄦ巿鏉冩煡璇㈡椂锛屼富琛ㄧ殑鍒悕蹇呴』涓簈锛屼笉鐒朵細鍑洪敊
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="queryable"></param>
-        /// <param name="options"></param>
-        /// <returns></returns>
-        public static ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9> ByAuth<T, T2, T3, T4, T5, T6, T7, T8, T9>(this ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9> queryable, AuthOption options) where T : iTableHasAuth, new()
-        {
-            //缁勭粐鏈烘瀯鎺堟潈楠岃瘉
-            if (!options.OrgCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_ORG").IsNullOrEmpty())
-            {
-                var orgList = options.OrgCode.Split(",", StringSplitOptions.RemoveEmptyEntries);
-                queryable = queryable.Where(q => orgList.Any(authorization => authorization == q.AUTH_ORG));
-            }
-            //鐢熶骇鍗曞厓鎺堟潈楠岃瘉
-            if (!options.ProdCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_PROD").IsNullOrEmpty())
-            {
-                var prodList = options.ProdCode.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList();
-                queryable = queryable.Where(q => prodList.Any(authorization => authorization == q.AUTH_PROD));
-            }
-            //浠撳簱鍗曞厓鎺堟潈楠岃瘉
-            if (!options.WhCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_WH").IsNullOrEmpty())
-            {
-                var whList = options.WhCode.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList();
-                queryable = queryable.Where(q => whList.Any(authorization => authorization == q.AUTH_WH));
-            }
-            return queryable.ByAuth(options.UserId, options.GetOptions());
-        }
-
-        /// <summary>
-        /// 閫氳繃鎺堟潈鏌ヨ鏁版嵁<br/>
-        /// 娉ㄦ剰锛氳仈琛ㄦ巿鏉冩煡璇㈡椂锛屼富琛ㄧ殑鍒悕蹇呴』涓簈锛屼笉鐒朵細鍑洪敊
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="queryable"></param>
-        /// <param name="userId"></param>
-        /// <param name="options"></param>
-        /// <returns></returns>
-        public static ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10> ByAuth<T, T2, T3, T4, T5, T6, T7, T8, T9, T10>(this ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10> queryable, string userId, DbAuth options) where T : iTableHasAuth, new()
-        {
-            //缁勭粐鏈烘瀯鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Org) && !typeof(T).GetProperty("AUTH_ORG").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_ORG>().Where(authorization => authorization.USER_ID == userId && authorization.ORG_CODE == q.AUTH_ORG).Any());
-            }
-            //鐢熶骇鍗曞厓鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Prod) && !typeof(T).GetProperty("AUTH_PROD").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_PROD>().Where(authorization => authorization.USER_ID == userId && authorization.PROD_CODE == q.AUTH_PROD).Any());
-            }
-            //浠撳簱鍗曞厓鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Wh) && !typeof(T).GetProperty("AUTH_WH").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_WH>().Where(authorization => authorization.USER_ID == userId && authorization.WH_CODE == q.AUTH_WH).Any());
-            }
-
-            return queryable;
-        }
-
-        /// <summary>
-        /// 閫氳繃鎺堟潈鏌ヨ鏁版嵁<br/>
-        /// 娉ㄦ剰锛氳仈琛ㄦ巿鏉冩煡璇㈡椂锛屼富琛ㄧ殑鍒悕蹇呴』涓簈锛屼笉鐒朵細鍑洪敊
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="queryable"></param>
-        /// <param name="options"></param>
-        /// <returns></returns>
-        public static ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10> ByAuth<T, T2, T3, T4, T5, T6, T7, T8, T9, T10>(this ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10> queryable, AuthOption options) where T : iTableHasAuth, new()
-        {
-            //缁勭粐鏈烘瀯鎺堟潈楠岃瘉
-            if (!options.OrgCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_ORG").IsNullOrEmpty())
-            {
-                var orgList = options.OrgCode.Split(",", StringSplitOptions.RemoveEmptyEntries);
-                queryable = queryable.Where(q => orgList.Any(authorization => authorization == q.AUTH_ORG));
-            }
-            //鐢熶骇鍗曞厓鎺堟潈楠岃瘉
-            if (!options.ProdCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_PROD").IsNullOrEmpty())
-            {
-                var prodList = options.ProdCode.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList();
-                queryable = queryable.Where(q => prodList.Any(authorization => authorization == q.AUTH_PROD));
-            }
-            //浠撳簱鍗曞厓鎺堟潈楠岃瘉
-            if (!options.WhCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_WH").IsNullOrEmpty())
-            {
-                var whList = options.WhCode.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList();
-                queryable = queryable.Where(q => whList.Any(authorization => authorization == q.AUTH_WH));
-            }
-            return queryable.ByAuth(options.UserId, options.GetOptions());
-        }
-
-        /// <summary>
-        /// 閫氳繃鎺堟潈鏌ヨ鏁版嵁<br/>
-        /// 娉ㄦ剰锛氳仈琛ㄦ巿鏉冩煡璇㈡椂锛屼富琛ㄧ殑鍒悕蹇呴』涓簈锛屼笉鐒朵細鍑洪敊
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="queryable"></param>
-        /// <param name="userId"></param>
-        /// <param name="options"></param>
-        /// <returns></returns>
-        public static ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> ByAuth<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(this ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> queryable, string userId, DbAuth options) where T : iTableHasAuth, new()
-        {
-            //缁勭粐鏈烘瀯鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Org) && !typeof(T).GetProperty("AUTH_ORG").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_ORG>().Where(authorization => authorization.USER_ID == userId && authorization.ORG_CODE == q.AUTH_ORG).Any());
-            }
-            //鐢熶骇鍗曞厓鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Prod) && !typeof(T).GetProperty("AUTH_PROD").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_PROD>().Where(authorization => authorization.USER_ID == userId && authorization.PROD_CODE == q.AUTH_PROD).Any());
-            }
-            //浠撳簱鍗曞厓鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Wh) && !typeof(T).GetProperty("AUTH_WH").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_WH>().Where(authorization => authorization.USER_ID == userId && authorization.WH_CODE == q.AUTH_WH).Any());
-            }
-
-            return queryable;
-        }
-
-        /// <summary>
-        /// 閫氳繃鎺堟潈鏌ヨ鏁版嵁<br/>
-        /// 娉ㄦ剰锛氳仈琛ㄦ巿鏉冩煡璇㈡椂锛屼富琛ㄧ殑鍒悕蹇呴』涓簈锛屼笉鐒朵細鍑洪敊
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="queryable"></param>
-        /// <param name="options"></param>
-        /// <returns></returns>
-        public static ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> ByAuth<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(this ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> queryable, AuthOption options) where T : iTableHasAuth, new()
-        {
-            //缁勭粐鏈烘瀯鎺堟潈楠岃瘉
-            if (!options.OrgCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_ORG").IsNullOrEmpty())
-            {
-                var orgList = options.OrgCode.Split(",", StringSplitOptions.RemoveEmptyEntries);
-                queryable = queryable.Where(q => orgList.Any(authorization => authorization == q.AUTH_ORG));
-            }
-            //鐢熶骇鍗曞厓鎺堟潈楠岃瘉
-            if (!options.ProdCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_PROD").IsNullOrEmpty())
-            {
-                var prodList = options.ProdCode.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList();
-                queryable = queryable.Where(q => prodList.Any(authorization => authorization == q.AUTH_PROD));
-            }
-            //浠撳簱鍗曞厓鎺堟潈楠岃瘉
-            if (!options.WhCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_WH").IsNullOrEmpty())
-            {
-                var whList = options.WhCode.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList();
-                queryable = queryable.Where(q => whList.Any(authorization => authorization == q.AUTH_WH));
-            }
-            return queryable.ByAuth(options.UserId, options.GetOptions());
-        }
-
-        /// <summary>
-        /// 閫氳繃鎺堟潈鏌ヨ鏁版嵁<br/>
-        /// 娉ㄦ剰锛氳仈琛ㄦ巿鏉冩煡璇㈡椂锛屼富琛ㄧ殑鍒悕蹇呴』涓簈锛屼笉鐒朵細鍑洪敊
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="queryable"></param>
-        /// <param name="userId"></param>
-        /// <param name="options"></param>
-        /// <returns></returns>
-        public static ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> ByAuth<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(this ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> queryable, string userId, DbAuth options) where T : iTableHasAuth, new()
-        {
-            //缁勭粐鏈烘瀯鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Org) && !typeof(T).GetProperty("AUTH_ORG").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_ORG>().Where(authorization => authorization.USER_ID == userId && authorization.ORG_CODE == q.AUTH_ORG).Any());
-            }
-            //鐢熶骇鍗曞厓鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Prod) && !typeof(T).GetProperty("AUTH_PROD").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_PROD>().Where(authorization => authorization.USER_ID == userId && authorization.PROD_CODE == q.AUTH_PROD).Any());
-            }
-            //浠撳簱鍗曞厓鎺堟潈楠岃瘉
-            if (options.HasFlag(DbAuth.Wh) && !typeof(T).GetProperty("AUTH_WH").IsNullOrEmpty())
-            {
-                queryable = queryable.Where(q => SqlFunc.Subqueryable<V_USER_WH>().Where(authorization => authorization.USER_ID == userId && authorization.WH_CODE == q.AUTH_WH).Any());
-            }
-
-            return queryable;
-        }
-
-        /// <summary>
-        /// 閫氳繃鎺堟潈鏌ヨ鏁版嵁<br/>
-        /// 娉ㄦ剰锛氳仈琛ㄦ巿鏉冩煡璇㈡椂锛屼富琛ㄧ殑鍒悕蹇呴』涓簈锛屼笉鐒朵細鍑洪敊
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="queryable"></param>
-        /// <param name="options"></param>
-        /// <returns></returns>
-        public static ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> ByAuth<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(this ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> queryable, AuthOption options) where T : iTableHasAuth, new()
-        {
-            //缁勭粐鏈烘瀯鎺堟潈楠岃瘉
-            if (!options.OrgCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_ORG").IsNullOrEmpty())
-            {
-                var orgList = options.OrgCode.Split(",", StringSplitOptions.RemoveEmptyEntries);
-                queryable = queryable.Where(q => orgList.Any(authorization => authorization == q.AUTH_ORG));
-            }
-            //鐢熶骇鍗曞厓鎺堟潈楠岃瘉
-            if (!options.ProdCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_PROD").IsNullOrEmpty())
-            {
-                var prodList = options.ProdCode.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList();
-                queryable = queryable.Where(q => prodList.Any(authorization => authorization == q.AUTH_PROD));
-            }
-            //浠撳簱鍗曞厓鎺堟潈楠岃瘉
-            if (!options.WhCode.IsNullOrEmpty() && !typeof(T).GetProperty("AUTH_WH").IsNullOrEmpty())
-            {
-                var whList = options.WhCode.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList();
-                queryable = queryable.Where(q => whList.Any(authorization => authorization == q.AUTH_WH));
-            }
-            return queryable.ByAuth(options.UserId, options.GetOptions());
-        }
-    }//endClass
-}
diff --git a/Tiger.IBusiness/Extensions/ResultExtension.cs b/Tiger.IBusiness/Extensions/ResultExtension.cs
deleted file mode 100644
index c71f836..0000000
--- a/Tiger.IBusiness/Extensions/ResultExtension.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Rhea.Common;
-
-namespace Tiger.IBusiness
-{
-    public static class ResultExtension
-    {
-        public static Result<T> CatchExceptionWithLog<T>(this Result<T> result, Exception ex, Locale localeMsg, T data)
-        {
-            result.Data = data;
-            return CatchExceptionWithLog<T>(result, ex, localeMsg);
-        }
-
-        public static Result<T> CatchExceptionWithLog<T>(this Result<T> result, Exception ex, Locale localeMsg)
-        {
-            result.CatchException(ex, localeMsg);
-            Logger.Default.Fatal(ex, localeMsg.Default());
-            return result;
-        }
-
-        public static Result<T> CatchExceptionWithLog<T>(this Result<T> result, Exception ex, string msg, T data)
-        {
-            result.Data = data;
-            return CatchExceptionWithLog<T>(result, ex, msg);
-        }
-
-        public static Result<T> CatchExceptionWithLog<T>(this Result<T> result, Exception ex, string msg = null)
-        {
-            result.CatchException(ex, msg);
-            Logger.Default.Fatal(ex, msg);
-            return result;
-        }
-
-        public static Result CatchExceptionWithLog(this Result result, Exception ex, Locale localeMsg, object data)
-        {
-            result.Data = data;
-            return CatchExceptionWithLog(result, ex, localeMsg);
-        }
-
-        public static Result CatchExceptionWithLog(this Result result, Exception ex, Locale localeMsg)
-        {
-            result.CatchException(ex, localeMsg);
-            Logger.Default.Fatal(ex, localeMsg.Default());
-            return result;
-        }
-
-        public static Result CatchExceptionWithLog(this Result result, Exception ex, string msg, object data)
-        {
-            result.Data = data;
-            return CatchExceptionWithLog(result, ex, msg);
-        }
-
-        public static Result CatchExceptionWithLog(this Result result, Exception ex, string msg = null)
-        {
-            result.CatchException(ex, msg);
-            Logger.Default.Fatal(ex, msg);
-            return result;
-        }
-    }
-}
diff --git a/Tiger.IBusiness/ITest.cs b/Tiger.IBusiness/ITest.cs
deleted file mode 100644
index 1a9f464..0000000
--- a/Tiger.IBusiness/ITest.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Tiger.IBusiness
-{
-    public interface ITest: IDependency
-    {
-        public string show();
-        public void set(string msg);
-    }
-}
diff --git a/Tiger.IBusiness/ITest_Z.cs b/Tiger.IBusiness/ITest_Z.cs
deleted file mode 100644
index dd0e85a..0000000
--- a/Tiger.IBusiness/ITest_Z.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Tiger.IBusiness
-{
-    public interface ITest_Z: IDependency
-    {
-        public void ZTest();
-    }
-}
diff --git a/Tiger.IBusiness/MES/IRoute.cs b/Tiger.IBusiness/MES/IRoute.cs
deleted file mode 100644
index 69e3927..0000000
--- a/Tiger.IBusiness/MES/IRoute.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-锘縰sing Rhea.Common;
-using System;
-using System.Collections.Generic;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Tiger.Model;
-
-namespace Tiger.IBusiness
-{
-    public interface IRoute
-    {
-        public Task<ApiAction> SaveRoute(MES_ROUTE route);
-        public Task<ApiAction> SaveNodes(List<MES_ROUTE_NODE> routeNode);
-        public Task<ApiAction> SaveEdges(List<MES_ROUTE_EDGE> routeEdge);
-        public Task<ApiAction> SaveActs(List<MES_ROUTE_NODE_ACT> routeAct);
-        public Task<ApiAction> SaveRouteData(RouteData routeData);
-        public Task<ApiAction<List<MES_ROUTE>>> GetRoute(string routeCode);
-        public Task<ApiAction<RouteData>> GetRouteData(string routeCode);
-        public Task<ApiAction> DeleteRoute(string routeId);
-        public Task<ApiAction> SaveRouteNodePost(List<MES_ROUTE_NODE_POST> nodePost);
-        public Task<ApiAction> DeleteProdRoute(DelProdRotInput input);
-        public Task<ApiAction> DeleteWoRoute(DelWoRotInput input);
-        public Task<ApiAction<WoRouteData>> GetWoRouteData(string workorder);
-        public Task<ApiAction> SaveWoRouteNodePost(List<MES_WO_NODE_POST> nodePost);
-        public Task<ApiAction> SaveWoRouteData(WoRouteData routeData);
-        public Task<ApiAction> SetDefaultRoute(ProdRotInput input);
-        public Task<List<V_MES_ROUTE_PTREE>> GetRoutePTree(string? prodCode, string? orgCode);
-        public Task<ApiAction> ProdRouteToWo(WoRotInput input);
-    }
-}
diff --git a/Tiger.IBusiness/Monitors/IClientMonitor.cs b/Tiger.IBusiness/Monitors/IClientMonitor.cs
deleted file mode 100644
index 58af5d3..0000000
--- a/Tiger.IBusiness/Monitors/IClientMonitor.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-锘縰sing Autofac;
-using Rhea.Common;
-using Rhea.Common.Interface;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Tiger.IBusiness
-{
-    public interface IClientMonitor : ITigerMonitor
-    {
-        /// <summary>
-        /// 瀹㈡埛绔績璺充笂閫�
-        /// </summary>
-        /// <param name="client"></param>
-        /// <param name="clientIP"></param>
-        /// <returns></returns>
-        public Task<ApiAction> Heartbeat(Client client, string clientIP);
-    }
-}
diff --git a/Tiger.IBusiness/Monitors/IMonitorBus.cs b/Tiger.IBusiness/Monitors/IMonitorBus.cs
deleted file mode 100644
index 619f826..0000000
--- a/Tiger.IBusiness/Monitors/IMonitorBus.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-锘縰sing Autofac;
-using Rhea.Common;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Tiger.IBusiness
-{
-    public interface IMonitorBus
-    {
-        public void StartMonitors();
-        public void StopMonitors();
-        public IClientMonitor GetClientMonitor();
-    }
-}
diff --git a/Tiger.IBusiness/Service/IDependency.cs b/Tiger.IBusiness/Service/IDependency.cs
deleted file mode 100644
index e44e0c1..0000000
--- a/Tiger.IBusiness/Service/IDependency.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Tiger.IBusiness
-{
-    public interface IDependency
-    {
-    }
-}
diff --git a/Tiger.IBusiness/Service/IInterfaceService.cs b/Tiger.IBusiness/Service/IInterfaceService.cs
deleted file mode 100644
index cb0a794..0000000
--- a/Tiger.IBusiness/Service/IInterfaceService.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-锘縰sing FluentScheduler;
-using Rhea.Common;
-using Sundial;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Tiger.Model;
-
-namespace Tiger.IBusiness
-{
-    public interface IInterfaceService:IDependency
-    {
-        public void SetSchedulerFactory(Sundial.ISchedulerFactory schedulerFactory);
-        public ApiAction AddJob<TJob>(TJob newEntity, TskJobParam jobParam) where TJob : class, Sundial.IJob;
-        public ApiAction AddTskJob<TJob>(TJob newEntity, FluentJobParam jobParam) where TJob : class, ITJob;
-        public ApiAction ImmediateRun<TJob>(TJob newEntity, string jobname) where TJob : class, ITJob;
-        public ApiAction AddJob<TJob>(string jobname, params Sundial.TriggerBuilder[] triggerBuilders) where TJob : class, Sundial.IJob;
-        public ApiAction UpdateJob(TSK_JOB job);
-        public void StartAllJob();
-        public void StartJob(string jobname);
-        public Sundial.IScheduler GetJob(string jobname);
-        public List<Sundial.IScheduler> GetJobs();
-        public void PauseJob(string jobname);
-        public void RemoveJob(string jobname);
-        public void RemovefJob(string jobname);
-        public void AddJobFromDB();
-        public void JobInitialize();
-    }
-}
diff --git a/Tiger.IBusiness/Service/ITigerJob.cs b/Tiger.IBusiness/Service/ITigerJob.cs
deleted file mode 100644
index 5284c34..0000000
--- a/Tiger.IBusiness/Service/ITigerJob.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-锘縰sing FluentScheduler;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Tiger.IBusiness
-{
-    /// <summary>
-    /// Sundial浠诲姟鍩虹被
-    /// </summary>
-    public interface ITigerJob : Sundial.IJob
-    {
-        public string Id { get; set; }
-        public string Tag { get; set; }
-        public string Name { get; set; }
-    }
-
-    /// <summary>
-    /// FluentScheduler浠诲姟鍩虹被
-    /// </summary>
-    public interface ITJob : IJob
-    {
-        public string Id { get; set; }
-        public string Tag { get; set; }
-        public string Name { get; set; }
-    }
-}
diff --git a/Tiger.IBusiness/Tiger.IBusiness.csproj b/Tiger.IBusiness/Tiger.IBusiness.csproj
deleted file mode 100644
index c4a9de9..0000000
--- a/Tiger.IBusiness/Tiger.IBusiness.csproj
+++ /dev/null
@@ -1,21 +0,0 @@
-锘�<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
-    <ImplicitUsings>enable</ImplicitUsings>
-    <Nullable>enable</Nullable>
-    <Authors>TigerClouds Team</Authors>
-    <Company>娣卞湷甯傞挍鏍间簯绉戞妧鏈夐檺鍏徃 (SZ TigerClouds Technology Co.,Ltd.)</Company>
-    <Copyright>Copyright 漏 2020-2025 SZ TigerClouds Technology Co.,Ltd.. All rights reserved.</Copyright>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <Compile Remove="Common\ILogger.cs" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\Tiger.Dependencies\Tiger.Dependencies.csproj" />
-    <ProjectReference Include="..\Tiger.Model.Net\Tiger.Model.Net.csproj" />
-  </ItemGroup>
-
-</Project>
diff --git a/Tiger.IBusiness/iERP/IMES_U9C.cs b/Tiger.IBusiness/iERP/IMES_U9C.cs
deleted file mode 100644
index 6be85d3..0000000
--- a/Tiger.IBusiness/iERP/IMES_U9C.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-锘縰sing Rhea.Common;
-using System;
-using System.Collections.Generic;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Tiger.Model;
-using Tiger.Model.Entitys.MES.U9C;
-
-namespace Tiger.IBusiness
-{
-    public interface IMES_U9C
-    {
-        public Task<ApiAction<RcvRptDocCreateInput>> RcvRptDocCreate(RcvRptDocCreateInput input);
-        public Task<ApiAction<BarcodeCreateInput>> U9CBarcodeCreate(BarcodeCreateInput input);
-        public Task<ApiAction<List<string>>> U9CCreateBarCodeByAssignQty(BarcodeCreateByAssignQtyInput input);
-    }
-}
diff --git a/Tiger.IBusiness/iERP/IU9C_MES.cs b/Tiger.IBusiness/iERP/IU9C_MES.cs
deleted file mode 100644
index f6f9622..0000000
--- a/Tiger.IBusiness/iERP/IU9C_MES.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-锘縰sing Rhea.Common;
-using System;
-using System.Collections.Generic;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Tiger.Model;
-
-namespace Tiger.IBusiness
-{
-    public interface IU9C_MES
-    {
-        public ApiAction GetBasItem(U9C_Base_Input input);
-        public ApiAction GetCustomer(U9C_Base_Input input);
-        public ApiAction GetSupplier(U9C_Base_Input input);
-        public Task<ApiAction> GetBasWo(GetWoInput input);
-        public ApiAction GetCustBarCode(U9C_Base_Input input);
-        public ApiAction GetU9CBasWo(U9C_Base_Input input);
-
-    }
-}
diff --git a/Tiger.ICore/Tiger.ICore.csproj b/Tiger.ICore/Tiger.ICore.csproj
deleted file mode 100644
index 1bb04a7..0000000
--- a/Tiger.ICore/Tiger.ICore.csproj
+++ /dev/null
@@ -1,15 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
-    <ImplicitUsings>enable</ImplicitUsings>
-    <Nullable>enable</Nullable>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <Reference Include="Tiger.IBusiness">
-      <HintPath>..\Lib\Tiger.IBusiness.dll</HintPath>
-    </Reference>
-  </ItemGroup>
-
-</Project>

--
Gitblit v1.9.3