From 20c735f3df81e9e0a8946c71344fe62ddcee9d87 Mon Sep 17 00:00:00 2001
From: 移动系统liao <liaoxujun@qq.com>
Date: 星期三, 22 一月 2025 09:17:31 +0800
Subject: [PATCH] 临时工财务报销上线

---
 cylsg/cylsg.Application/Users/UserAppService.cs                 |   12 
 .gitignore                                                      |    2 
 cylsg/cylsg.Core/DbContext.cs                                   |   18 
 cylsg/cylsg.Web.Core/cylsg.Web.Core.csproj                      |    1 
 cylsg/cylsg.Model/ECTEModel/Sys_Permissions_RoleMenuRelation.cs |   47 
 cylsg/cylsg.Model/ECTEModel/OA_FirmAccount.cs                   |  117 ++
 cylsg/cylsg.sln                                                 |    8 
 cylsg/cylsg.Application/CyOS/CyOSSettingController.cs           |   55 +
 cylsg/ECTESTOA/OAServices.cs                                    |  113 ++
 cylsg/EzUpFile/EzFileUploadService.cs                           |    4 
 cylsg/cylsg.Model/ECTEModel/OaStaff.cs                          |  384 +++++++
 cylsg/ECTESTOA/ECTestOAconfig.json                              |    6 
 cylsg/cylsg.Web.Entry/appsettings.json                          |   19 
 cylsg/cylsg.Model/ECTEModel/OA_FirmRole.cs                      |   59 +
 cylsg/cylsg.Application/cylsg.Application.csproj                |    1 
 cylsg/ECTESTOA/IOAServices.cs                                   |   34 
 cylsg/cylsg.Model/ECTEModel/OaStaffRoleRel.cs                   |   25 
 cylsg/ECTESTOA/ECTESTOA.csproj                                  |   24 
 cylsg/cylsg.Application/CyOS/CyOSBaoXiaoJingLiController.cs     |  214 ++++
 cylsg/cylsg.Model/utilityViewModel/ECTESTOAPermissions.cs       |   78 +
 cylsg/cylsg.Model/ECTEModel/OaWorkPlanShenpi.cs                 |   83 +
 cylsg/cylsg.Core/cylsg.Core.csproj                              |    1 
 cylsg/cylsg.Model/ECTEModel/OaDepartment.cs                     |   61 +
 cylsg/cylsg.Model/ECTEModel/OaSubjectSet.cs                     |   68 +
 cylsg/cylsg.Application/CyOS/CyOSBaoXiaoCaiWuController.cs      |  261 +++++
 cylsg/cylsg.Model/ECTEModel/OA_FirmAccountRecord.cs             |  103 ++
 cylsg/cylsg.Model/ECTEModel/Sys_Permissions_Menu.cs             |   77 +
 cylsg/cylsg.Model/ECTEModel/OA_FirmRolePermissionsRel.cs        |   60 +
 cylsg/cylsg.Web.Entry/cylsg.Web.Entry.csproj                    |    1 
 cylsg/cylsg.Model/ECTEModel/OaWorkPlan.cs                       |  310 ++++++
 cylsg/cylsg.Core/SqlSugarRedisCache.cs                          |   79 +
 cylsg/cylsg.Model/ECTEModel/OaWorkPlanAttachment.cs             |   55 +
 cylsg/cylsg.Application/CyOS/CyOSBaoXiaoZHuGuanController.cs    |  232 ++++
 cylsg/cylsg.Application/Users/Dtos/UserDto.cs                   |    8 
 cylsg/cylsg.Application/CyOS/CyOSStaffController.cs             |  413 ++++++++
 35 files changed, 3,020 insertions(+), 13 deletions(-)

diff --git a/.gitignore b/.gitignore
index 4e41395..08af997 100644
--- a/.gitignore
+++ b/.gitignore
@@ -38,3 +38,5 @@
 cylsg/cylsg.Application/cylsg.Application.xml
 cylsg/cylsg.Web.Entry/application.log
 cylsg/cylsg.Web.Entry/Properties/PublishProfiles/FolderProfile.pubxml.user
+cylsg/ECTESTOA/obj/
+cylsg/ECTESTOA/bin/
diff --git a/cylsg/ECTESTOA/ECTESTOA.csproj b/cylsg/ECTESTOA/ECTESTOA.csproj
new file mode 100644
index 0000000..e521937
--- /dev/null
+++ b/cylsg/ECTESTOA/ECTESTOA.csproj
@@ -0,0 +1,24 @@
+锘�<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net8.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\cylsg.Core\cylsg.Core.csproj" />
+    <ProjectReference Include="..\Cylsg.Filter\Cylsg.Filter.csproj" />
+    <ProjectReference Include="..\cylsg.Model\cylsg.Model.csproj" />
+    <ProjectReference Include="..\cylsg.redis\cylsg.redis.csproj" />
+    <ProjectReference Include="..\cylsg.services\cylsg.services.csproj" />
+    <ProjectReference Include="..\cylsg.utility\cylsg.utility.csproj" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <None Update="ECTestOAconfig.json">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
+  </ItemGroup>
+
+</Project>
diff --git a/cylsg/ECTESTOA/ECTestOAconfig.json b/cylsg/ECTESTOA/ECTestOAconfig.json
new file mode 100644
index 0000000..b075b69
--- /dev/null
+++ b/cylsg/ECTESTOA/ECTestOAconfig.json
@@ -0,0 +1,6 @@
+{
+  "EcTestOAMenuName": {
+    "CaiWu": "鎶ラ攢浠樻"
+  }
+  
+}
diff --git a/cylsg/ECTESTOA/IOAServices.cs b/cylsg/ECTESTOA/IOAServices.cs
new file mode 100644
index 0000000..99c8fb0
--- /dev/null
+++ b/cylsg/ECTESTOA/IOAServices.cs
@@ -0,0 +1,34 @@
+锘縰sing cylsg.Model.ECTEModel;
+using cylsg.Model.utilityViewModel;
+using Furion.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ECTESTOA
+{
+    /// <summary>
+    /// 宸濆嵃OA鏁版嵁搴撴湇鍔�
+    /// </summary>
+    public interface IOAServices 
+    {
+
+        /// <summary>
+        /// 鑾稯A鍙栨潈闄愰厤缃�
+        /// </summary>
+        /// <returns></returns>
+         Task<ECTESTOAPermissions> GetOAPermissions();
+        /// <summary>
+        /// 鍥涘窛鍗板埛闆嗗洟 绉熸埛ID  鍥哄畾
+        /// </summary>
+        Guid firmId { get; }
+
+        Task<OaWorkPlan> GetWorkPlans();
+
+
+    }
+
+     
+}
diff --git a/cylsg/ECTESTOA/OAServices.cs b/cylsg/ECTESTOA/OAServices.cs
new file mode 100644
index 0000000..0f8cc41
--- /dev/null
+++ b/cylsg/ECTESTOA/OAServices.cs
@@ -0,0 +1,113 @@
+锘縰sing cylsg.Model.ECTEModel;
+using cylsg.Model.UserModel;
+using cylsg.Model.utilityViewModel;
+using cylsg.utility.Extend;
+using EzCoreNet.Redis;
+using Furion;
+using Furion.DependencyInjection;
+using Furion.FriendlyException;
+using Models;
+using SqlSugar;
+using System.Security.Claims;
+
+namespace ECTESTOA
+{
+    /// <summary>
+    /// 宸濆嵃鐩稿叧鐨凮A 鏈嶅姟
+    /// </summary>
+    public class OAServices : IOAServices, IScoped
+    {
+        private static  string ECTESTOAPermissionsKey= "ECTESTOAPermissionsKey:";
+
+
+        /// <summary>
+        /// redis鏈嶅姟
+        /// </summary>
+        private readonly IEzCoreNetRedisService _redisService;
+        private ISqlSugarClient _OAsqlSugarClient;
+        private ISqlSugarClient _sqlSugarClient;
+
+        public    Guid firmId => new Guid( "88B49967-D590-452C-93C6-0049A75FA5FF");
+
+
+        public OAServices ( IEzCoreNetRedisService ezCoreNetRedisService,ISqlSugarClient sqlSugarClient)
+        {
+            _redisService = ezCoreNetRedisService;
+            _sqlSugarClient = sqlSugarClient;
+             _OAsqlSugarClient = sqlSugarClient .AsTenant().GetConnection("ECTESTOADB");
+            
+        }
+       
+      public  async Task< ECTESTOAPermissions> GetOAPermissions()
+        {
+
+
+            var UserID = App.User?.FindFirstValue("UserID");
+            if(string.IsNullOrEmpty(UserID))
+            {
+                throw Oops.Oh("娌℃湁鐧诲綍淇℃伅锛屼笉鍙娇鐢�");
+            }
+            var ret=    _redisService.Get<ECTESTOAPermissions>(ECTESTOAPermissionsKey + UserID);
+            if(ret != null)
+            {
+                return ret;
+            }
+            
+            else
+            {
+                string CaiwuKey = App.Configuration["EcTestOAMenuName:CaiWu"] ?? "娌℃湁";
+
+
+               var CaiWUMenuiId= await  _OAsqlSugarClient.Queryable<Sys_Permissions_Menu>().Where(x => x.IsUsed == true && x.MenuName == CaiwuKey).Select(x=>x.Keyid).WithCache(600).FirstAsync();
+                int id = UserID?.toInt() ?? 0;
+                if (id == 0)
+                    throw Oops.Oh("鐧诲綍淇℃伅閿欒");
+                var user  = await _sqlSugarClient.Queryable<User>().Where(x => x.Id == id && x.IsEn == true && x.IsDeleted == false).WithCache(180).FirstAsync();
+                if (user==null)
+                {
+                    throw Oops.Oh("鐧诲綍淇℃伅閿欒,涓嶆槸鏈夋晥鐢ㄦ埛");
+                }
+                //閲嶆柊鑾峰彇鏉冮檺
+                ret = await _OAsqlSugarClient.Queryable<OaStaff>().Includes(x => x.Department).Where(x => x.MobieNum == user.ItCode && x.FirmId == firmId).Select(x => new ECTESTOAPermissions
+                {
+                    DepartmentName = x.Department.Name,
+                     DepartId=x.DepartmentId,
+
+                },true
+                ).FirstAsync();
+                if (ret == null)
+                {
+                    //涓嶆槸鐢ㄦ埛锛�3鍒嗛挓鍚庨噸鏂版煡璇�
+                    ret = new ECTESTOAPermissions();
+                    
+                }
+                else
+                {
+                    if (CaiWUMenuiId > 0&&ret.KeyId>0)
+                    {
+                     var Caiwu= await    _OAsqlSugarClient.Queryable<OA_StaffRoleRel, OA_FirmRole, OA_FirmRolePermissionsRel>((sr,fr,spr)=>new JoinQueryInfos(
+                            JoinType.Left,sr.RoleId==fr.Keyid&&fr.FirmId== firmId&& sr.FirmId==firmId&&fr.IsUsed==true,
+                            JoinType.Left,fr.Keyid==spr.RoleId
+
+                            ) ).Where((sr, fr, spr)=>spr.MenuIdThree== CaiWUMenuiId&&sr.StaffId==ret.KeyId).Select((sr, fr, spr) => spr.MenuIdThree).FirstAsync();
+                        if(Caiwu>0)
+                        {
+                            ret.BF_IsCaiWu = true;
+                        }
+                    }
+                }
+
+                _redisService.Add(ECTESTOAPermissionsKey + UserID, ret, 180);
+                
+
+            }
+            return ret;
+
+        }
+
+        public Task<OaWorkPlan> GetWorkPlans()
+        {
+            throw new NotImplementedException();
+        }
+    }
+}
diff --git a/cylsg/EzUpFile/EzFileUploadService.cs b/cylsg/EzUpFile/EzFileUploadService.cs
index f745f2e..e48e3c8 100644
--- a/cylsg/EzUpFile/EzFileUploadService.cs
+++ b/cylsg/EzUpFile/EzFileUploadService.cs
@@ -349,7 +349,7 @@
                 catch (Exception e)
                 {
 
-                    throw Oops.Oh(e.Message);
+                    throw Oops.Oh(e.Message+"鑵捐浜戯紝鎴栬�呴樋閲屼簯鎿嶄綔閿欒");
                 }
             }
             catch (Exception e)
@@ -371,7 +371,7 @@
 
                 if (FileData.Length > maxSize)
                 {
-                    throw Oops.Oh(" 涓婁紶鏂囦欢涓嶅彲瓒呭嚭500K");
+                    throw Oops.Oh(" 涓婁紶鏂囦欢涓嶅彲瓒呭嚭5M");
                 }
 
 
diff --git a/cylsg/cylsg.Application/CyOS/CyOSBaoXiaoCaiWuController.cs b/cylsg/cylsg.Application/CyOS/CyOSBaoXiaoCaiWuController.cs
new file mode 100644
index 0000000..f839286
--- /dev/null
+++ b/cylsg/cylsg.Application/CyOS/CyOSBaoXiaoCaiWuController.cs
@@ -0,0 +1,261 @@
+锘縰sing cylsg.Model.ECTEModel;
+using cylsg.Model.utilityViewModel;
+using ECTESTOA;
+using Furion.LinqBuilder;
+using Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Text;
+using System.Threading.Tasks;
+using static SKIT.FlurlHttpClient.Wechat.Api.Models.UnionShopTargetAddPlanRequest.Types;
+
+namespace cylsg.Application.CyOS
+{
+    /// <summary>
+    /// 璐㈠姟鎶ラ攢鎺у埗鍣�
+    /// </summary>
+    [Authorize]
+    public  class CyOSBaoXiaoCaiWuController: IDynamicApiController
+    {
+        private static readonly SemaphoreSlim _semaphore = new SemaphoreSlim(1);
+        private readonly IOAServices _OAServices;
+        private readonly ISqlSugarClient _SugarClient;
+        private ECTESTOAPermissions Permissions;
+        public CyOSBaoXiaoCaiWuController(IOAServices oaservices, ISqlSugarClient sugarClient)
+        {
+            _OAServices = oaservices;
+            _SugarClient = sugarClient.AsTenant().GetConnection("ECTESTOADB");
+        }
+
+
+        /// <summary>
+        ///  鏌ヨ
+        /// </summary>
+        [HttpPost]
+        public async Task<WorekPlandto> getplanelist(SearchOaWorekPlan param)
+        {
+            if (!await CheckRols())
+            {
+                throw Oops.Oh("娌℃湁鏉冮檺");
+            }
+
+            Expression<Func<OaWorkPlan, bool>> SearchList = (x) => true;
+
+            //宸濆嵃宸ヤ綔鍗�
+            SearchList = SearchList.And(x => x.MemberId == _OAServices.firmId);
+            SearchList = SearchList.And(x => x.PlanType == 3);
+            SearchList = SearchList.And(x => x.PlanDataType == 17);
+            //蹇呴』鏄鎵瑰畬鎴愬悗鐨勫崟
+            SearchList = SearchList.And(x=>x.ApprovalStatus== PlanStatusType.Yes);
+            if (!string.IsNullOrEmpty(param.StaffName))
+            {
+                SearchList = SearchList.And(x => x.SentStaff.Name.Contains(param.StaffName));
+            }
+            if (param.StaffMemberIdId != null)
+            {
+                SearchList = SearchList.And(x => x.SentStaffId == param.StaffMemberIdId);
+            }
+            if (param.PlanDataType > 0)
+            {
+                SearchList = SearchList.And(x => x.PlanDataType == param.PlanDataType);
+            }
+            if (param.PlanStartTimeStart != null)
+            {
+                SearchList = SearchList.And(x => x.PlanStartTime > param.PlanStartTimeStart);
+            }
+            if (param.PlanStartTimeEnd != null)
+            {
+                SearchList = SearchList.And(x => x.PlanStartTime <= param.PlanStartTimeEnd.Value.AddDays(1));
+            }
+            ////瀹℃壒鐘舵��
+            //if (param.ApprovalStatus != null)
+            //{
+
+            //    SearchList = SearchList.And(x => x.ApprovalStatus == param.ApprovalStatus);
+
+
+            //}
+
+            //鎶ラ攢鐘舵��
+            if (param.EvaluationStatus != null)
+            {
+                SearchList = SearchList.And(x => x.EvaluationStatus == param.EvaluationStatus);
+            }
+            //寮哄埗澧炲姞鍛樺伐杩囨护
+            RefAsync<int> totle = 0;
+            var data = await _SugarClient.Queryable<OaWorkPlan>().Includes(x => x.OaWorkPlanShenpis).Includes(x=>x.SentStaff)
+                .Where(SearchList).OrderByDescending(x => x.MemberId).ToPageListAsync(param.page.PageIndex, param.page.PageSize, totle);
+            
+            param.page.TotalCount = totle;
+            var sum = await _SugarClient.Queryable<OaWorkPlan>()
+                .Where(SearchList).SumAsync(x => x.PlanMoney);
+            return new WorekPlandto
+
+            {
+                list = data,
+                page = param.page,
+                TotalMoney = sum ?? 0
+            };
+
+
+        }
+
+        /// <summary>
+        ///  鑾峰彇鎶ラ攢鍗曡鎯�
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        [HttpGet]
+        public async Task<OaWorkPlan> GetPlanInfo(int id)
+        {
+            if (!await CheckRols())
+            {
+                throw Oops.Oh("娌℃湁鏉冮檺");
+            }
+            return await _SugarClient.Queryable<OaWorkPlan>().Includes(x => x.OaWorkPlanShenpis,y=>y.ApprovalStaff).Includes(x => x.SentStaff).Includes(x => x.Depart).Includes(x=>x.WorkPlanAttachments).Where(x => x.Keyid == id).FirstAsync();
+        }
+
+        /// <summary>
+        /// 鎶ラ攢
+        /// </summary>       
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<bool> ApprovalPlan(OaWorkPlan plan)
+        {
+
+
+            // 绛夊緟淇″彿閲�
+            await _semaphore.WaitAsync();
+            try
+            {
+                if (plan.Keyid == 0)
+                    throw Oops.Oh("ID閿欒");
+                if (plan.FirmAccountId == null)
+                    throw Oops.Oh("蹇呴』閫夋嫨閾惰璐﹀彿");
+
+                if (!await CheckRols())
+                {
+                    throw Oops.Oh("娌℃湁鏉冮檺");
+                }
+                var FirmAccount = await _SugarClient.Queryable<OA_FirmAccount>().Where(x => x.FirmId == _OAServices.firmId && x.Keyid == plan.FirmAccountId && x.Status == true).FirstAsync();
+                if (FirmAccount == null)
+                    throw Oops.Oh("璐﹀彿閿欒");
+                var data = await _SugarClient.Queryable<OaWorkPlan>().Includes(x => x.SentStaff).Where(x => x.Keyid == plan.Keyid).FirstAsync();
+                if (data == null)
+                    throw Oops.Oh("娌℃湁鎵惧埌鎶ラ攢鍗�");
+
+                if (data.ApprovalStatus != PlanStatusType.Yes)
+                    throw Oops.Oh("鏈鎵瑰畬鎴愶紝涓嶅彲鎶ラ攢");
+
+
+
+
+                if (data.EvaluationStatus != BaoxiaoStausType.Reimbursed)
+                {
+                    await _SugarClient.AsTenant().BeginTranAsync();
+                    try
+                    {
+                        data.EvaluationStatus = BaoxiaoStausType.Reimbursed;
+                        data.PlanContent = plan.PlanContent;
+                        data.LastUpdateTime = DateTime.Now;
+                        await _SugarClient.Updateable(data).ExecuteCommandAsync();
+
+                        FirmAccount.LastUpdateTime = DateTime.Now;
+                        FirmAccount.Balance -= (Math.Round(data.PlanMoney ?? 0, 2));
+                        FirmAccount.AllExpenses += (Math.Round(data.PlanMoney ?? 0, 2));
+
+                        await _SugarClient.Updateable(FirmAccount).ExecuteCommandAsync();
+                        OA_FirmAccountRecord rec = new OA_FirmAccountRecord
+                        {
+                            AccountId = FirmAccount.Keyid,
+                            Money = data.PlanMoney ?? 0,
+                            LastUpdateTime = DateTime.Now,
+                            Department = data.PlanContent,
+                            RecordTypeId = 2,
+                            SubjectId = 3,//鎶ラ攢蹇呴』涓�3
+                            Operator = Permissions.Name,
+                            PaymentUnit = data.SentStaff.Name,
+                            ResidualAmount = FirmAccount.Balance,
+                            OperationalMatters = data.PlanContent,
+
+
+                        };
+                        await _SugarClient.Insertable(rec).ExecuteCommandAsync();
+                        await _SugarClient.Updateable(data).ExecuteCommandAsync();
+                        await _SugarClient.AsTenant().CommitTranAsync();
+                        return true;
+                    }
+                    catch (Exception)
+                    {
+                        await _SugarClient.AsTenant().RollbackTranAsync();
+                        throw;
+                    }
+
+
+
+
+
+
+
+
+                }
+
+
+
+                return true;
+            }
+            catch(Exception e)
+            {
+                throw;
+            }
+            finally
+            {
+                // 閲婃斁淇″彿閲�
+                _semaphore.Release();
+            }
+
+         
+           
+
+        }
+        /// <summary>
+        /// 鑾峰彇璐︽埛鍒楄〃
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet]
+        public async Task<List<OA_FirmAccount>> GetFirmAccountList()
+        {
+            return await _SugarClient.Queryable<OA_FirmAccount>().Where(x => x.Status == true && x.FirmId == _OAServices.firmId).Select(x => new OA_FirmAccount
+            {
+                AccountName = x.AccountName,
+                 AccountType = x.AccountType,
+                  UserName = x.UserName,   
+                  Keyid=x.Keyid,
+               
+               
+            }).WithCache(3600).ToListAsync();
+        }
+
+        /// <summary>
+        /// 鍒ゆ柇鏄惁鍏锋湁鏉冮檺
+        /// </summary>
+        /// <returns></returns>
+        private async Task<bool> CheckRols()
+        {
+            var pr = await _OAServices.GetOAPermissions();
+            Permissions = pr;
+            if (pr != null && pr.MemberId != null)
+            {
+
+                if (pr.BF_IsCaiWu)
+                    return true;
+                else return false;
+
+            }
+            else
+                return false;
+        }
+    }
+}
diff --git a/cylsg/cylsg.Application/CyOS/CyOSBaoXiaoJingLiController.cs b/cylsg/cylsg.Application/CyOS/CyOSBaoXiaoJingLiController.cs
new file mode 100644
index 0000000..c4aa2a1
--- /dev/null
+++ b/cylsg/cylsg.Application/CyOS/CyOSBaoXiaoJingLiController.cs
@@ -0,0 +1,214 @@
+锘縰sing cylsg.Model.ECTEModel;
+using cylsg.Model.utilityViewModel;
+using ECTESTOA;
+using Furion.LinqBuilder;
+using Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace cylsg.Application.CyOS
+{
+    /// <summary>
+    /// 宸濆嵃鎶ラ攢缁忕悊API
+    /// </summary>
+    [Authorize]
+    public class CyOSBaoXiaoJingLiController: IDynamicApiController
+    {
+        private readonly IOAServices _OAServices;
+        private readonly ISqlSugarClient _SugarClient;
+        private ECTESTOAPermissions Permissions;
+        public CyOSBaoXiaoJingLiController(IOAServices oaservices, ISqlSugarClient sugarClient)
+        {
+            _OAServices = oaservices;
+            _SugarClient = sugarClient.AsTenant().GetConnection("ECTESTOADB");
+        }
+
+
+        /// <summary>
+        ///  鏌ヨ
+        /// </summary>
+        [HttpPost]
+        public async Task<WorekPlandto> getplanelist(SearchOaWorekPlan param)
+        {
+            if (!await CheckRols())
+            {
+                throw Oops.Oh("娌℃湁鏉冮檺");
+            }
+
+            Expression<Func<OaWorkPlan, bool>> SearchList = (x) => true;
+
+            //宸濆嵃宸ヤ綔鍗�
+            SearchList = SearchList.And(x => x.MemberId == _OAServices.firmId);
+            SearchList = SearchList.And(x => x.PlanType == 3);
+            SearchList = SearchList.And(x => x.PlanDataType == 17);
+            //蹇呴』鏈変袱涓汉瀹℃壒杩囦簡
+            SearchList = SearchList.And(x => x.OaWorkPlanShenpis.Count(y=>y.Buzhou==1)>1||(x.ApprovalStatus!= PlanStatusType.unApproval));
+            if (!string.IsNullOrEmpty(param.StaffName))
+            {
+                SearchList = SearchList.And(x => x.SentStaff.Name.Contains(param.StaffName));
+            }
+            if (param.StaffMemberIdId != null)
+            {
+                SearchList = SearchList.And(x => x.MemberId == param.StaffMemberIdId);
+            }
+            if (param.PlanDataType > 0)
+            {
+                SearchList = SearchList.And(x => x.PlanDataType == param.PlanDataType);
+            }
+            if (param.PlanStartTimeStart != null)
+            {
+                SearchList = SearchList.And(x => x.PlanStartTime >param.PlanStartTimeStart);
+            }
+            if (param.PlanStartTimeEnd != null)
+            {
+                SearchList = SearchList.And(x => x.PlanStartTime <= param.PlanStartTimeEnd.Value.AddDays(1));
+            }
+            //瀹℃壒鐘舵��
+            if (param.ApprovalStatus != null)
+            {
+               
+                    SearchList = SearchList.And(x => x.ApprovalStatus == param.ApprovalStatus);
+               
+
+            }
+
+            //鎶ラ攢鐘舵��
+            if (param.EvaluationStatus != null)
+            {
+                SearchList = SearchList.And(x => x.EvaluationStatus == param.EvaluationStatus);
+            }
+            //寮哄埗澧炲姞鍛樺伐杩囨护
+            RefAsync<int> totle = 0;
+            var data = await _SugarClient.Queryable<OaWorkPlan>().Includes(x => x.OaWorkPlanShenpis.Where(y=>y.Buzhou==1).ToList()).Includes(x => x.Depart)
+                .Where(SearchList).OrderByDescending(x => x.PlanStartTime).ToPageListAsync(param.page.PageIndex, param.page.PageSize, totle);
+
+
+            var sum = await _SugarClient.Queryable<OaWorkPlan>()
+                .Where(SearchList).SumAsync(x=>x.PlanMoney);
+            param.page.TotalCount = totle;
+            return new WorekPlandto
+
+            {
+                list = data,
+                page = param.page,
+                TotalMoney = sum ?? 0
+            };
+
+
+        }
+
+        /// <summary>
+        ///  鑾峰彇鎶ラ攢鍗曡鎯�
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        [HttpGet]
+        public async Task<OaWorkPlan> GetPlanInfo(int id)
+        {
+            if (!await CheckRols())
+            {
+                throw Oops.Oh("娌℃湁鏉冮檺");
+            }
+            return await _SugarClient.Queryable<OaWorkPlan>().Includes(x=>x.OaWorkPlanShenpis,y=>y.ApprovalStaff).Includes(x=>x.SentStaff).Includes(x=>x.Depart).Includes(x=>x.WorkPlanAttachments).Where(x => x.Keyid == id).FirstAsync();
+        }
+
+        /// <summary>
+        /// 瀹℃壒鏉冮檺
+        /// </summary>       
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<bool> BaoxiaoPlan(OaWorkPlanShenpi param)
+        {
+            if (param.ApprovalStatus == PlanStatusType.unApproval)
+                throw Oops.Oh("涓嶅彲璁剧疆涓烘湭瀹℃壒鐘舵��");
+
+            if (!await CheckRols())
+            {
+                throw Oops.Oh("娌℃湁鏉冮檺");
+            }
+            var data = await _SugarClient.Queryable<OaWorkPlan>().Includes(x => x.OaWorkPlanShenpis).Where(x => x.Keyid == param.OA_WorkPlanId).FirstAsync();
+            if (data == null)
+                throw Oops.Oh("娌℃湁鎵惧埌鎶ラ攢鍗�");
+            if ( data.ApprovalStatus != PlanStatusType.unApproval)
+                throw Oops.Oh("鎶ラ攢鍗曞凡缁忔壒澶嶅畬姣�");
+            OaWorkPlanShenpi shenpi = data.OaWorkPlanShenpis.Where(x => x.ApprovalStaffId == Permissions.MemberId&&x.Buzhou==2).FirstOrDefault();
+            await _SugarClient.AsTenant().BeginTranAsync();
+            try
+            {
+                if (shenpi != null)
+                {
+                    //宸茬粡鎵瑰
+                    throw Oops.Oh("鎶ラ攢鍗曞凡缁忔壒澶嶅畬姣� 涓嶅彲鏇存敼");
+                    //shenpi.ApprovalStatus = param.ApprovalStatus;
+                    //shenpi.Buzhou = 2;
+                    //shenpi.ApprovalTime = DateTime.Now;
+                    //shenpi.ApprovalContent = param.ApprovalContent;
+
+                    //await _SugarClient.Updateable(shenpi).ExecuteCommandAsync();
+
+                }
+                else
+                {
+                    shenpi = new OaWorkPlanShenpi()
+                    {
+                        ApprovalStaffId = Permissions.MemberId,
+                        ApprovalContent = param.ApprovalContent,
+                        ApprovalStatus = param.ApprovalStatus,
+                        ApprovalTime = DateTime.Now,
+                        ///鎬荤粡鐞嗗鎵逛负2
+                        Buzhou = 2,
+                        CreateTime = DateTime.Now,
+                        Operator = Permissions.Name,
+                        OA_WorkPlanId = param.OA_WorkPlanId,
+
+                    };
+                    await _SugarClient.Insertable(shenpi).ExecuteCommandAsync();
+                }
+
+                data.ApprovalTime = DateTime.Now;
+                data.ApprovalStatus = param.ApprovalStatus;
+                data.ApprovalContent = param.ApprovalContent;
+                data.LastUpdateTime = DateTime.Now;
+
+
+
+
+                await _SugarClient.Updateable(data).ExecuteCommandAsync();
+                await _SugarClient.AsTenant().CommitTranAsync();
+                return true;
+            }
+            catch (Exception e)
+            {
+
+                await _SugarClient.AsTenant().RollbackTranAsync();
+                throw;
+            }
+
+        }
+
+        /// <summary>
+        /// 鍒ゆ柇鏄惁鍏锋湁鏉冮檺
+        /// </summary>
+        /// <returns></returns>
+        private async Task<bool> CheckRols()
+        {
+            var pr = await _OAServices.GetOAPermissions();
+            Permissions = pr;
+            if (pr != null && pr.MemberId != null)
+            {
+
+                if (pr.BF_Isbaoxiaojingli)
+                    return true;
+                else return false;
+
+            }
+            else
+                return false;
+        }
+    }
+}
+
diff --git a/cylsg/cylsg.Application/CyOS/CyOSBaoXiaoZHuGuanController.cs b/cylsg/cylsg.Application/CyOS/CyOSBaoXiaoZHuGuanController.cs
new file mode 100644
index 0000000..d255339
--- /dev/null
+++ b/cylsg/cylsg.Application/CyOS/CyOSBaoXiaoZHuGuanController.cs
@@ -0,0 +1,232 @@
+锘縰sing cylsg.Model.ECTEModel;
+using cylsg.Model.utilityViewModel;
+using ECTESTOA;
+using Furion.LinqBuilder;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace cylsg.Application.CyOS
+{
+    /// <summary>
+    /// 鎶ラ攢涓荤鐩稿叧鎺у埗鍣�
+    /// </summary>
+    [Authorize]
+    public class CyOSBaoXiaoZHuGuanController: IDynamicApiController
+    {
+        private readonly IOAServices _OAServices;
+        private readonly ISqlSugarClient _SugarClient;
+        private ECTESTOAPermissions Permissions;
+        public CyOSBaoXiaoZHuGuanController(IOAServices oaservices, ISqlSugarClient sugarClient)
+        {
+            _OAServices = oaservices;
+            _SugarClient = sugarClient.AsTenant().GetConnection("ECTESTOADB");
+        }
+
+
+        /// <summary>
+        ///  鏌ヨ
+        /// </summary>
+        [HttpPost]
+        public async Task<WorekPlandto> getplanelist(SearchOaWorekPlan param)
+        {
+            if (!await CheckRols())
+            {
+                throw Oops.Oh("娌℃湁鏉冮檺");
+            }
+            
+            Expression<Func<OaWorkPlan, bool>> SearchList = (x) => true;
+
+            //宸濆嵃宸ヤ綔鍗�
+            SearchList = SearchList.And(x => x.MemberId == _OAServices.firmId);
+            SearchList = SearchList.And(x => x.PlanType == 3);
+            SearchList = SearchList.And(x => x.PlanDataType == 17);
+            //SearchList = SearchList.And(x =>  x.ApprovalStatus == PlanStatusType.unApproval);
+            //SearchList = SearchList.And(x =>  x.OaWorkPlanShenpis.Where(y => y.Buzhou == 1 && y.ApprovalStaffId == Permissions.MemberId).Count()<=0);
+            SearchList = SearchList.And(x => x.DepartId == Permissions.DepartId);
+            if (!string.IsNullOrEmpty(param.StaffName))
+            {
+                SearchList = SearchList.And(x => x.SentStaff.Name.Contains(param.StaffName));
+            }
+            if (param.StaffMemberIdId != null)
+            {
+                SearchList = SearchList.And(x => x.MemberId == param.StaffMemberIdId);
+            }
+            if (param.PlanDataType > 0)
+            {
+                SearchList = SearchList.And(x => x.PlanDataType == param.PlanDataType);
+            }
+            if (param.PlanStartTimeStart != null)
+            {
+                SearchList = SearchList.And(x => x.PlanStartTime > param.PlanStartTimeStart);
+            }
+            if (param.PlanStartTimeEnd != null)
+            {
+                SearchList = SearchList.And(x => x.PlanStartTime <= param.PlanStartTimeEnd.Value.AddDays(1));
+            }
+            //瀹℃壒鐘舵��
+            if (param.ApprovalStatus != null)
+            {
+                if (param.ApprovalStatus == PlanStatusType.Yes)
+                    SearchList = SearchList.And(x => x.ApprovalStatus == param.ApprovalStatus || ((x.OaWorkPlanShenpis.Count(y => y.ApprovalStatus == PlanStatusType.Yes&&y.ApprovalStaffId==Permissions.MemberId && y.Buzhou == 1) >0)));
+                else  if(param.ApprovalStatus == PlanStatusType.No)
+                {
+                    SearchList = SearchList.And(x => x.ApprovalStatus == param.ApprovalStatus );
+                }
+                else
+                {
+                    SearchList= SearchList.And(x=>x.ApprovalStatus== PlanStatusType.unApproval&&(x.OaWorkPlanShenpis.Count(y => y.Buzhou == 1&& y.ApprovalStaffId == Permissions.MemberId) <=0));
+                }
+
+            }
+            //鎶ラ攢鐘舵��
+            if (param.EvaluationStatus != null)
+            {
+                SearchList = SearchList.And(x => x.EvaluationStatus == param.EvaluationStatus);
+            }
+            RefAsync<int> totle = 0;
+
+            //寮哄埗澧炲姞鍛樺伐杩囨护
+
+            var data = await _SugarClient.Queryable<OaWorkPlan>().Includes(x=>x.Depart)
+                    .Includes(x=>x.OaWorkPlanShenpis.Where(y=>y.ApprovalStaffId==Permissions.MemberId&&y.Buzhou==1).ToList())
+                    .Where(SearchList).OrderByDescending(x => x.PlanStartTime).Mapper(
+                    x =>
+                    {
+                        if (x.ApprovalStatus == PlanStatusType.unApproval)
+                        {
+                            var oashenpi = x.OaWorkPlanShenpis?.FirstOrDefault();
+                            if (oashenpi != null)
+                                x.ApprovalStatus = oashenpi.ApprovalStatus;
+                            
+
+                        }
+                            ;
+                    }
+                    ).ToPageListAsync(param.page.PageIndex, param.page.PageSize, totle);
+
+
+            param.page.TotalCount = totle;
+            var sum = await _SugarClient.Queryable<OaWorkPlan>()
+             .Where(SearchList).SumAsync(x => x.PlanMoney);
+            return new WorekPlandto
+
+                {
+                    list = data,
+                    page = param.page,
+                TotalMoney = sum ?? 0
+            };
+           
+
+        }
+
+        /// <summary>
+        ///  鑾峰彇鎶ラ攢鍗曡鎯�
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        [HttpGet]
+        public async Task<OaWorkPlan> GetPlanInfo(int id)
+        {
+            if (!await CheckRols())
+            {
+                throw Oops.Oh("娌℃湁鏉冮檺");
+            }
+            return await _SugarClient.Queryable<OaWorkPlan>().Includes(x => x.OaWorkPlanShenpis.Where(y => y.Buzhou == 1).ToList(), y => y.ApprovalStaff).Includes(x => x.SentStaff).Includes(x => x.Depart).Includes(x => x.WorkPlanAttachments).Where(x=>x.Keyid==id).FirstAsync();
+        }
+
+        /// <summary>
+        /// 瀹℃壒鏉冮檺
+        /// </summary>       
+        /// <returns></returns>
+         [HttpPost]
+        public async Task<bool> ApprovalPlan(OaWorkPlanShenpi param)
+        {
+            if (param.ApprovalStatus == PlanStatusType.unApproval)
+                throw Oops.Oh("涓嶅彲璁剧疆涓烘湭瀹℃壒鐘舵��");
+
+            if (!await CheckRols())
+            {
+                throw Oops.Oh("娌℃湁鏉冮檺");
+            }
+            var data = await _SugarClient.Queryable<OaWorkPlan>().Includes(x=>x.OaWorkPlanShenpis).Where(x => x.Keyid == param.OA_WorkPlanId).FirstAsync();
+            if (data == null)
+                throw Oops.Oh("娌℃湁鎵惧埌鎶ラ攢鍗�");
+            if (data.ApprovalStatus != null && data.ApprovalStatus != PlanStatusType.unApproval)
+                throw Oops.Oh("鎶ラ攢鍗曞凡缁忔壒澶嶅畬姣�");
+            OaWorkPlanShenpi shenpi = data.OaWorkPlanShenpis.Where(x => x.ApprovalStaffId == Permissions.MemberId&&x.Buzhou==1).FirstOrDefault();
+             if (shenpi!=null)
+            {
+                //鑷繁宸茬粡鎵瑰锛屼笉鍙洿鏀�
+                throw Oops.Oh("鎶ラ攢鍗曞凡缁忔壒澶�");
+                //shenpi.ApprovalStatus = PlanStatusType.Yes;
+                //await _SugarClient.Updateable(shenpi).ExecuteCommandAsync();
+            }
+             else
+            {
+              await   _SugarClient.AsTenant().BeginTranAsync();
+                try
+                {
+                    if (param.ApprovalStatus == PlanStatusType.No)
+                    {
+                        //褰撴湁浜哄鎵规嫆缁濆悗鐩存帴灏嗙敵璇峰崟璁剧疆涓烘嫆缁濓紝涓嶅湪杩涜鍏朵粬瀹℃牳
+                        data.ApprovalStatus = PlanStatusType.No;
+                        data.ApprovalTime = DateTime.Now;
+                        data.LastUpdateTime = DateTime.Now;
+                        data.Operator = Permissions.Name;
+                       await  _SugarClient.Updateable(data).ExecuteCommandAsync();
+
+                    }
+
+                    shenpi = new OaWorkPlanShenpi()
+                    {
+                        ApprovalStaffId = Permissions.MemberId,
+                        ApprovalContent = param.ApprovalContent,
+                        ApprovalStatus = param.ApprovalStatus,
+                        ApprovalTime = DateTime.Now,
+                        Buzhou = 1,
+                        CreateTime = DateTime.Now,
+                        Operator = Permissions.Name,
+                        OA_WorkPlanId = param.OA_WorkPlanId,
+
+                    };
+                    await _SugarClient.Insertable(shenpi).ExecuteCommandAsync();
+
+                    await _SugarClient.AsTenant().CommitTranAsync();
+                }
+                catch (Exception)
+                {
+                    await _SugarClient.AsTenant().RollbackTranAsync();
+                    throw;
+                }
+             
+            }
+            return true;
+        }
+
+        /// <summary>
+        /// 鍒ゆ柇鏄惁鍏锋湁鏉冮檺
+        /// </summary>
+        /// <returns></returns>
+        private async Task<bool> CheckRols()
+        {
+            var pr = await _OAServices.GetOAPermissions();
+            Permissions = pr;
+            if (pr != null && pr.MemberId != null)
+            {
+
+                if ( pr.BF_IsBaoxiaozhuguan)
+                    return true;
+                else return false;
+
+            }
+            else
+                return false;
+        }
+    }
+
+   
+}
diff --git a/cylsg/cylsg.Application/CyOS/CyOSSettingController.cs b/cylsg/cylsg.Application/CyOS/CyOSSettingController.cs
new file mode 100644
index 0000000..8db3b42
--- /dev/null
+++ b/cylsg/cylsg.Application/CyOS/CyOSSettingController.cs
@@ -0,0 +1,55 @@
+锘縰sing cylsg.Model.ECTEModel;
+using ECTESTOA;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace cylsg.Application.CyOS
+{
+    /// <summary>
+    /// 宸濆嵃閫氱敤淇℃伅鑾峰彇
+    /// </summary>
+    public class CYOSSettingController: IDynamicApiController
+    {
+
+        private readonly ISqlSugarClient _client;
+        private readonly IOAServices _oAServices;
+        public CYOSSettingController( ISqlSugarClient client,IOAServices oAServices )
+        {
+            _client = client.AsTenant().GetConnection("ECTESTOADB");
+            _oAServices = oAServices;
+        }
+
+        /// <summary>
+        /// 鑾峰彇閮ㄩ棬鍒楄〃
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet]
+        public async Task< List<OaDepartment>> GetDepartLstt()
+        {
+            return await _client.Queryable<OaDepartment>().Where(x=>x.Status== "鍚敤"&&x.FirmId== _oAServices.firmId).Select(x=>new OaDepartment
+            {
+                  Name=x.Name,
+                    Keyid=x.Keyid,
+                     Remark=x.Remark,
+            }).WithCache(3600).ToListAsync();
+        }
+        /// <summary>
+        /// 鑾峰彇绉戠洰鍒楄〃
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet]
+        public async Task<List<OaSubjectSet>> getKeMuList()
+        {
+            return await _client.Queryable<OaSubjectSet>().Where(x => x.Status == true && x.FirmId == _oAServices.firmId&& x.SubjectType=="璐�").Select(x => new OaSubjectSet
+            {
+                SubjectName = x.SubjectName,
+                Keyid = x.Keyid,
+                Remark = x.Remark,
+            }).WithCache(3600).ToListAsync();
+        }
+
+    }
+}
diff --git a/cylsg/cylsg.Application/CyOS/CyOSStaffController.cs b/cylsg/cylsg.Application/CyOS/CyOSStaffController.cs
new file mode 100644
index 0000000..0c322a4
--- /dev/null
+++ b/cylsg/cylsg.Application/CyOS/CyOSStaffController.cs
@@ -0,0 +1,413 @@
+锘縰sing cylsg.Core;
+using cylsg.Model.ECTEModel;
+using cylsg.Model.TransferOrder;
+using cylsg.Model.utilityViewModel;
+using cylsg.utility.Extend;
+using Cylsg.Filter;
+using ECTESTOA;
+using Furion.LinqBuilder;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Text;
+using System.Threading.Tasks;
+using TencentCloud.Hunyuan.V20230901.Models;
+using TencentCloud.Mrs.V20200910.Models;
+
+namespace cylsg.Application.CyOS
+{
+    /// <summary>
+    /// 宸濆嵃鏅�氬憳宸ユ帶鍒跺櫒
+    /// </summary>
+    [Authorize]
+    public class CyOSStaffController : IDynamicApiController
+    {
+        private readonly IOAServices _OAServices;
+        private readonly ISqlSugarClient _SugarClient;
+
+        private  ECTESTOAPermissions Permissions;
+        public CyOSStaffController(IOAServices oaServices, ISqlSugarClient sugarClient)
+        {
+            _OAServices = oaServices;
+            _SugarClient = sugarClient.AsTenant().GetConnection("ECTESTOADB");
+        }
+
+        /// <summary>
+        /// 鏌ヨ
+        /// </summary>
+        [HttpPost]
+        public async Task<WorekPlandto> getplanelist(SearchOaWorekPlan param)
+        {
+            if(! await CheckRols())
+            {
+                throw Oops.Oh("娌℃湁鏉冮檺");
+            }
+            Expression<Func<OaWorkPlan, bool>> SearchList = (x) => true;
+
+            SearchList = SearchList.And(x => x.MemberId == _OAServices.firmId);
+            SearchList = SearchList.And(x => x.PlanType == 3);
+            SearchList = SearchList.And(x => x.PlanDataType == 17);
+            if (!string.IsNullOrEmpty(param.StaffName))
+            {
+                SearchList = SearchList.And(x => x.SentStaff.Name.Contains(param.StaffName));
+            }
+            if ( param.StaffMemberIdId !=null)
+            {
+                SearchList = SearchList.And(x => x.SentStaffId==param.StaffMemberIdId);
+            }
+            if(param.PlanDataType >0)
+            {
+                SearchList = SearchList.And(x => x.PlanDataType==param.PlanDataType);
+            }
+            if (param.PlanStartTimeStart !=null)
+            {
+                SearchList = SearchList.And(x => x.PlanStartTime> param.PlanStartTimeStart);
+            }
+            if (param.PlanStartTimeEnd != null)
+            {
+                SearchList = SearchList.And(x => x.PlanStartTime <= param.PlanStartTimeEnd.Value.AddDays(1));
+            }
+            //瀹℃壒鐘舵��
+            if (param.ApprovalStatus != null)
+            {
+                SearchList = SearchList.And(x => x.ApprovalStatus == param.ApprovalStatus);
+            }
+            //鎶ラ攢鐘舵��
+            if (param.EvaluationStatus != null)
+            {
+                SearchList = SearchList.And(x => x.EvaluationStatus == param.EvaluationStatus);
+            }
+            //寮哄埗澧炲姞鍛樺伐杩囨护
+            SearchList = SearchList.And(x => x.SentStaffId == Permissions.MemberId);
+            RefAsync<int> totle=0;
+         
+          var data= await    _SugarClient.Queryable< OaWorkPlan >().Includes(x=>x.SentStaff).Includes(x=>x.OaWorkPlanShenpis).Where(SearchList).OrderByDescending(x => x.PlanStartTime).ToPageListAsync(param.page.PageIndex,param.page.PageSize, totle);
+            param.page.TotalCount = totle;
+            var sum = await _SugarClient.Queryable<OaWorkPlan>().Includes(x => x.SentStaff).Where(SearchList).SumAsync(x => x.PlanMoney);
+            return new WorekPlandto
+
+            {
+                list = data,
+                page = param.page,
+                TotalMoney=sum??0
+            };
+
+        }
+
+        /// <summary>
+        /// 鍒涘缓鎶ラ攢鍗�
+        /// </summary>
+        /// <param name="pram"></param>
+        /// <returns></returns>
+        [LimitFilter(LimiType = Limttype.User, timespan = 10, ResponseMeg = "璇峰嬁鍦�10绉掑唴閲嶅鐢宠璇ユ帴鍙�")]
+        public  async Task<bool> CreatOderAsync(OaWorkPlan pram)
+        {
+            if (!await CheckRols())
+            {
+                throw Oops.Oh("娌℃湁鏉冮檺");
+            }
+            if(pram.PlanMoney<=0)
+            {
+                throw Oops.Oh("鎶ラ攢閲戦涓嶅彲灏忎簬绛変簬0");
+            }
+            if(string.IsNullOrEmpty(pram.PlanContent))
+            {
+                throw Oops.Oh("鎶ラ攢鎽樿涓嶅彲涓虹┖");
+            }
+
+            if(pram.HoubufapiaoStatus==null)
+            {
+                throw Oops.Oh("鍙戠エ鐘舵�佷笉鍙负绌�");
+            }
+             if(string.IsNullOrEmpty(pram.RewardResult))
+            {
+               
+                throw Oops.Oh("绉戠洰ID RewardResult涓嶈兘涓虹┖");
+            }
+            OaSubjectSet? kemu = null;
+            try
+            {
+             var kemuid=     pram.RewardResult.toInt();
+               kemu=  _SugarClient.Queryable<OaSubjectSet>().Where(x => x.Keyid == kemuid && x.FirmId == _OAServices.firmId && x.SubjectType == "璐�" && x.Status == true).First();
+                if(kemu==null)
+                    throw Oops.Oh("绉戠洰閫夋嫨閿欒锛屾垨鑰呭け鏁�");
+
+            }
+            catch (Exception)
+            {
+                throw Oops.Oh("绉戠洰 RewardResult 閫夋嫨閿欒锛屾垨鑰呭け鏁�");
+             
+            }
+            if(pram.HoubufapiaoStatus== HoubufapiaoStatusType.You)
+            {
+               if( pram.WorkPlanAttachments.Where(x=>x.AttachmentType==1).Count()<=0)
+                throw Oops.Oh("鏈夊彂绁ㄦ椂,蹇呴』涓婁紶鍙戠エ");
+            }
+            if (pram.WorkPlanAttachments?.Count > 0)
+            {
+                foreach (var item in pram.WorkPlanAttachments)
+                {
+                   if( item.AttachmentType<=0||item.AttachmentType>3)
+                        throw Oops.Oh("闄勪欢绫诲瀷AttachmentType閿欒");
+                   if(string.IsNullOrEmpty(item.PlanAttachment))
+                    {
+                        throw Oops.Oh("闄勪欢鍦板潃涓嶈兘涓虹┖");
+                    }
+                    item.CreateTime = DateTime.Now;
+                    item.Operator = Permissions.Name;
+                   
+                }
+            }
+            pram.PlanType = 3;//鍥哄畾涓�3
+            pram.MemberId = _OAServices.firmId;
+            pram.SentStaffId = Permissions.MemberId;
+            pram.ReciveStaffId = Permissions.MemberId;
+            pram.PlanDataType = 17;
+            pram.DepartId = Permissions.DepartId;
+            pram.PlanStartTime = DateTime.Now;
+            pram.RewardContent = kemu.SubjectName;
+            pram.LastUpdateTime = DateTime.Now;
+            pram.Operator = Permissions.Name;
+            pram.PlanTitle = "";
+            pram.PlanRunTime = DateTime.Now;
+            pram.PlanRemark = "";
+            pram.PlanPeople = Permissions.Name;
+            pram.PlanComplany = "";
+            pram.PlanStatus = PlanStatusType.unApproval;
+            pram.ApprovalStaffId = Guid.Empty;
+            pram.ApprovalTime=DateTime.Now;
+            pram.ApprovalContent = "";
+            pram.EvaluationContent = "";
+            pram.EvaluationStaffId = Guid.Empty;
+            pram.EvaluationTime = DateTime.Now;     
+            pram.RewardMoney = 0;
+            pram.RewardType = 1;
+         
+           
+
+
+
+
+
+            await  _SugarClient.InsertNav(pram).Include(x=>x.WorkPlanAttachments).ExecuteCommandAsync();
+            return true;
+            
+
+        }
+
+        /// <summary>
+        /// 鍒涘缓鎶ラ攢鍗�
+        /// </summary>
+        /// <param name="pram"></param>
+        /// <returns></returns>
+        [LimitFilter(LimiType = Limttype.User, timespan = 10, ResponseMeg = "璇峰嬁鍦�10绉掑唴閲嶅鐢宠璇ユ帴鍙�")]
+        public async Task<bool> EditOderAsync(OaWorkPlan pram)
+        {
+            if (!await CheckRols())
+            {
+                throw Oops.Oh("娌℃湁鏉冮檺");
+            }
+
+            if (pram.WorkPlanAttachments?.Count > 0)
+            {
+                foreach (var item in pram.WorkPlanAttachments)
+                {
+                    if (item.AttachmentType <= 0 || item.AttachmentType > 3)
+                        throw Oops.Oh("闄勪欢绫诲瀷AttachmentType閿欒");
+                    if (string.IsNullOrEmpty(item.PlanAttachment))
+                    {
+                        throw Oops.Oh("闄勪欢鍦板潃涓嶈兘涓虹┖");
+                    }
+                    if(item.CreateTime==null)
+                    item.CreateTime = DateTime.Now;
+                    if (item.Operator == null)
+                        item.Operator = Permissions.Name;
+
+                }
+            }
+            //鑾峰彇鍘熷鏁版嵁
+            var data= await _SugarClient.Queryable<OaWorkPlan>().Includes(x=>x.WorkPlanAttachments).Includes(x=>x.OaWorkPlanShenpis).Where(x=>x.Keyid==pram.Keyid&&x.SentStaffId==Permissions.MemberId).FirstAsync();
+            if(data==null)
+                throw Oops.Oh("娌℃湁鏉冮檺");
+            if(data.ApprovalStatus!= PlanStatusType.unApproval||data.OaWorkPlanShenpis.Count>0)
+            {
+                if(data.HoubufapiaoStatus == HoubufapiaoStatusType.HouBuFaPiao&&data.HoubufapiaoStatus== HoubufapiaoStatusType.HouBuFaPiao)
+                {
+                    //鍚庤ˉ鍙戠エ锛屽彧鑳戒慨鏀瑰彂绁ㄥ拰闄勪欢
+                    await _SugarClient.UpdateNav(data).Include(x => x.WorkPlanAttachments).ExecuteCommandAsync();
+                    return true;
+                }
+                else
+
+                throw Oops.Oh("宸茬粡杩涘叆瀹℃壒娴佺▼涓嶅彲淇敼");
+                
+            }
+
+            if (data.RewardResult != pram.RewardResult)
+            {
+                
+                try
+                {
+                    OaSubjectSet kemu = null;
+                    var kemuid = pram.RewardResult.toInt();
+                    kemu = _SugarClient.Queryable<OaSubjectSet>().Where(x => x.Keyid == kemuid && x.FirmId == _OAServices.firmId && x.SubjectType == "璐�" && x.Status == true).First();
+                    if (kemu == null)
+                        throw Oops.Oh("绉戠洰閫夋嫨閿欒锛屾垨鑰呭け鏁�");
+                    data.RewardResult = pram.RewardResult;
+                    data.RewardContent = kemu.SubjectName;
+
+                }
+                catch (Exception)
+                {
+                    throw Oops.Oh("绉戠洰 RewardResult 閫夋嫨閿欒锛屾垨鑰呭け鏁�");
+
+                }
+
+            }
+         
+             data.PlanMoney=pram.PlanMoney;
+            //鎽樿
+             data.PlanContent =pram.PlanContent;
+            //鍙戠エ鐘舵��
+              data.HoubufapiaoStatus = pram.HoubufapiaoStatus;
+
+            //闄勪欢
+              data.WorkPlanAttachments = pram.WorkPlanAttachments;
+
+            data.LastUpdateTime = DateTime.Now;
+             //data .PlanType 涓嶅彲鏇存敼 =3
+
+            await  _SugarClient.UpdateNav(data).Include(x => x.WorkPlanAttachments).ExecuteCommandAsync();
+            return true;
+
+
+        }
+        /// <summary>
+        /// 鑾峰彇璇︽儏
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        [HttpGet]
+        public async Task<OaWorkPlan> GetPlanInfo(int id)
+        {
+            if (!await CheckRols())
+            {
+                throw Oops.Oh("娌℃湁鏉冮檺");
+            }
+            return await _SugarClient.Queryable<OaWorkPlan>().Includes(x=>x.SentStaff).Includes(x=>x.Depart).Includes(x=>x.WorkPlanAttachments).Where(x => x.Keyid == id).FirstAsync();
+        }
+        /// <summary>
+        /// 鍒犻櫎
+        /// </summary>
+        /// <param name="pram"></param>
+        /// <returns></returns>
+        [HttpDelete]
+        public async Task<bool> DelOderAsync(int id )
+        {
+            if(id==0)
+            {
+                throw Oops.Oh("缂栧彿閿欒");
+            }
+            if (!await CheckRols())
+            {
+                throw Oops.Oh("娌℃湁鏉冮檺");
+            }
+            //鑾峰彇鍘熷鏁版嵁
+            var data = await _SugarClient.Queryable<OaWorkPlan>().Includes(x => x.WorkPlanAttachments).Includes(x => x.OaWorkPlanShenpis).Where(x => x.Keyid == id && x.MemberId == Permissions.MemberId).FirstAsync();
+            if (data == null)
+                throw Oops.Oh("娌℃壘鍒扮敵璇�");
+            if (data.ApprovalStatus == PlanStatusType.Yes || data.OaWorkPlanShenpis.Count > 0)
+            {
+                throw Oops.Oh("宸茬粡杩涘叆瀹℃壒娴佺▼涓嶅彲淇敼");
+            }
+
+            await _SugarClient.DeleteNav(data).Include(x => x.WorkPlanAttachments).ExecuteCommandAsync();
+            return true;
+        }
+
+
+        /// <summary>
+        /// 鍒ゆ柇鏄惁鍏锋湁鏉冮檺
+        /// </summary>
+        /// <returns></returns>
+        private async Task< bool> CheckRols()
+        {
+           var pr= await  _OAServices.GetOAPermissions();
+            Permissions = pr ;
+            if (pr != null &&pr.MemberId!=null)
+            {
+                
+                return true;
+
+            }
+            else
+                return false;
+        }
+
+    }
+    /// <summary>
+    /// //鎼滅储鍙傛暟
+    /// </summary>
+    public class SearchOaWorekPlan
+    {
+        /// <summary>
+        /// 椤甸潰鍙傛暟
+        /// </summary>
+        public PageModel page { get; set; }
+        /// <summary>
+        /// 鍛樺伐濮撳悕
+        /// </summary>
+        public string? StaffName { get; set; }
+        /// <summary>
+        /// 鍛樺伐Id
+        /// </summary>
+        public Guid? StaffMemberIdId { get; set; }
+        /// <summary>
+        /// 鐘舵�� 鏄惁瀹℃壒
+        /// </summary>
+        public PlanStatusType? ApprovalStatus { get; set; }
+
+        /// <summary>
+        /// 鏇存涓烘姤閿�鐘舵��
+        /// </summary>
+        public BaoxiaoStausType? EvaluationStatus { get; set; }
+
+        /// <summary>
+        /// 璧峰鏃堕棿
+        /// </summary>
+        public DateTime? PlanStartTimeStart { get; set; }
+
+        /// <summary>
+        /// 缁撴潫鏃堕棿
+        /// </summary>
+        public DateTime? PlanStartTimeEnd { get; set; }
+        /// <summary>
+        /// 绫诲埆锛岄粯璁や负17 鍙兘涓�17
+        /// </summary>
+        public int? PlanDataType { get;  set; }
+
+
+        
+
+    }
+
+
+    public class WorekPlandto
+    {
+        /// <summary>
+        /// 鏁版嵁
+        /// </summary>
+        public List< OaWorkPlan> list { get; set; }
+        /// <summary>
+        /// 椤甸潰缁熻
+        /// </summary>
+      public  PageModel page { get; set; }
+
+        /// <summary>
+        /// 缁熻
+        /// </summary>
+        public decimal TotalMoney { get; set; } = 0;
+
+    }
+}
diff --git a/cylsg/cylsg.Application/Users/Dtos/UserDto.cs b/cylsg/cylsg.Application/Users/Dtos/UserDto.cs
index effd240..6f84b9e 100644
--- a/cylsg/cylsg.Application/Users/Dtos/UserDto.cs
+++ b/cylsg/cylsg.Application/Users/Dtos/UserDto.cs
@@ -1,4 +1,5 @@
-锘縰sing System;
+锘縰sing cylsg.Model.utilityViewModel;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -57,7 +58,10 @@
         /// </summary>
         public UserCompanyDto userCompany { get; set; }
 
-
+        /// <summary>
+        /// 宸濆嵃鍛樺伐鏉冮檺
+        /// </summary>
+        public ECTESTOAPermissions OAPermissions { get; set; }
     }
 
     public class UserWorkerDto
diff --git a/cylsg/cylsg.Application/Users/UserAppService.cs b/cylsg/cylsg.Application/Users/UserAppService.cs
index 6e4b107..8582f0f 100644
--- a/cylsg/cylsg.Application/Users/UserAppService.cs
+++ b/cylsg/cylsg.Application/Users/UserAppService.cs
@@ -10,6 +10,8 @@
 using System.Security.Claims;
 using System.Runtime.Intrinsics.Arm;
 using MapsterMapper;
+using ECTESTOA;
+
 
 namespace cylsg.Application.Users
 {
@@ -22,11 +24,15 @@
         private readonly ISystemService _systemService;
         private ISqlSugarClient _sqlSugarClient;
         private IMapper _mapper;
-        public UserAppService(ISystemService systemService, ISqlSugarClient sqlSugarClient, IMapper mapper)
+        private readonly IOAServices _OAServices;
+        public UserAppService(ISystemService systemService, ISqlSugarClient sqlSugarClient, IMapper mapper 
+            ,IOAServices oAServices
+            )
         {
             _systemService = systemService;
             _sqlSugarClient = sqlSugarClient;
             _mapper = mapper;
+            _OAServices = oAServices;
         }
 
 
@@ -63,8 +69,8 @@
             {
                 userDto.userCompany = _mapper.Map<UserCompanyDto>(userCompany);
             }
-               
-
+            //澧炲姞宸濆嵃鏉冮檺鑾峰彇
+            userDto.OAPermissions= await _OAServices.GetOAPermissions();
 
 
             return userDto;
diff --git a/cylsg/cylsg.Application/cylsg.Application.csproj b/cylsg/cylsg.Application/cylsg.Application.csproj
index c961b51..979af2c 100644
--- a/cylsg/cylsg.Application/cylsg.Application.csproj
+++ b/cylsg/cylsg.Application/cylsg.Application.csproj
@@ -28,6 +28,7 @@
 		<ProjectReference Include="..\cylsg.Model\cylsg.Model.csproj" />
 		<ProjectReference Include="..\cylsg.redis\cylsg.redis.csproj" />
 		<ProjectReference Include="..\cylsg.utility\cylsg.utility.csproj" />
+		<ProjectReference Include="..\ECTESTOA\ECTESTOA.csproj" />
 		<ProjectReference Include="..\EzInitqMessageDef\EzInitqMessageDef.csproj" />
 		<ProjectReference Include="..\EzTencentCloud\EzTencentCloud.csproj" />
 		<ProjectReference Include="..\EzUpFile\EzUpFile.csproj" />
diff --git a/cylsg/cylsg.Core/DbContext.cs b/cylsg/cylsg.Core/DbContext.cs
index 004a656..cc2b67c 100644
--- a/cylsg/cylsg.Core/DbContext.cs
+++ b/cylsg/cylsg.Core/DbContext.cs
@@ -9,12 +9,28 @@
 /// </summary>
 public static class DbContext
 {
+    public static List<ConnectionConfig> connectionConfigs
+    {
+        get
+        {
+            var list = App.GetConfig<List<ConnectionConfig>>("ConnectionConfigs");
+            foreach (var config in list)
+            {
+                config.ConfigureExternalServices = new ConfigureExternalServices()
+                {
+                    DataInfoCacheService = new SqlSugarRedisCache()
+                };
+            }
+            return list;
+        }
+    }
     /// <summary>
     /// SqlSugar 鏁版嵁搴撳疄渚�
     /// </summary>
     public static readonly SqlSugarScope Instance = new(
         // 璇诲彇 appsettings.json 涓殑 ConnectionConfigs 閰嶇疆鑺傜偣
-        App.GetConfig<List<ConnectionConfig>>("ConnectionConfigs")
+        //App.GetConfig<List<ConnectionConfig>>("ConnectionConfigs")
+        connectionConfigs
         , db =>
         {
             // 杩欓噷閰嶇疆鍏ㄥ眬浜嬩欢锛屾瘮濡傛嫤鎴墽琛� SQL
diff --git a/cylsg/cylsg.Core/SqlSugarRedisCache.cs b/cylsg/cylsg.Core/SqlSugarRedisCache.cs
new file mode 100644
index 0000000..392cd26
--- /dev/null
+++ b/cylsg/cylsg.Core/SqlSugarRedisCache.cs
@@ -0,0 +1,79 @@
+锘縰sing Furion;
+using SqlSugar;
+using SugarRedis;
+
+//using SugarRedis;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace cylsg.Core
+{
+    public class SqlSugarRedisCache : ICacheService
+    {
+
+        //NUGET瀹夎 SugarRedis  锛堜篃鍙互鑷釜瀹炵幇锛�   
+        //娉ㄦ剰:SugarRedis 涓嶈鎵斿埌鏋勯�犲嚱鏁伴噷闈紝 涓�瀹氳鍗曚緥妯″紡  
+        public static SugarRedisClient _service = new SugarRedisClient(App.Configuration["RedisConfig:ConnectionString"] ?? "127.0.0.1:6379,password=,connectTimeout=3000,connectRetry=1,syncTimeout=10000,DefaultDatabase=0");
+
+
+        //+1閲嶈浇 new SugarRedisClient(瀛楃涓�)
+        //榛樿:127.0.0.1:6379,password=,connectTimeout=3000,connectRetry=1,syncTimeout=10000,DefaultDatabase=0
+
+        public void Add<V>(string key, V value)
+        {
+            _service.Set(key, value);
+        }
+
+        public void Add<V>(string key, V value, int cacheDurationInSeconds)
+        {
+            _service.SetBySeconds(key, value, cacheDurationInSeconds);
+        }
+
+        public bool ContainsKey<V>(string key)
+        {
+            return _service.Exists(key);
+        }
+
+        public V Get<V>(string key)
+        {
+            return _service.Get<V>(key);
+        }
+
+        public IEnumerable<string> GetAllKey<V>()
+        {
+            //鎬ц兘娉ㄦ剰: 鍙煡sqlsugar鐢ㄥ埌鐨刱ey 
+            return _service.SearchCacheRegex("SqlSugarDataCache.*");
+        }
+
+        public V GetOrCreate<V>(string cacheKey, Func<V> create, int cacheDurationInSeconds = int.MaxValue)
+        {
+
+            if (this.ContainsKey<V>(cacheKey))
+            {
+                var result = this.Get<V>(cacheKey);
+                if (result == null)
+                {
+                    return create();
+                }
+                else
+                {
+                    return result;
+                }
+            }
+            else
+            {
+                var result = create();
+                this.Add(cacheKey, result, cacheDurationInSeconds);
+                return result;
+            }
+        }
+
+        public void Remove<V>(string key)
+        {
+            _service.Remove(key);
+        }
+    }
+}
diff --git a/cylsg/cylsg.Core/cylsg.Core.csproj b/cylsg/cylsg.Core/cylsg.Core.csproj
index 8968473..30dd678 100644
--- a/cylsg/cylsg.Core/cylsg.Core.csproj
+++ b/cylsg/cylsg.Core/cylsg.Core.csproj
@@ -18,6 +18,7 @@
 		<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.5.3" />
 		<PackageReference Include="Furion.Pure" Version="4.9.5.3" />
 		<PackageReference Include="SqlSugarCore" Version="5.1.4.166" />
+		<PackageReference Include="SugarRedis" Version="1.5.0" />
 	</ItemGroup>
 
 	<ItemGroup>
diff --git a/cylsg/cylsg.Model/ECTEModel/OA_FirmAccount.cs b/cylsg/cylsg.Model/ECTEModel/OA_FirmAccount.cs
new file mode 100644
index 0000000..c7646c4
--- /dev/null
+++ b/cylsg/cylsg.Model/ECTEModel/OA_FirmAccount.cs
@@ -0,0 +1,117 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using SqlSugar;
+namespace Models
+{
+    /// <summary>
+    /// 鍔炲叕绯荤粺鍘傚晢璐︽埛琛�
+    ///</summary>
+    [SugarTable("OA_FirmAccount")]
+    [Tenant("ECTESTOADB")]
+    public class OA_FirmAccount
+    {
+        
+     
+        /// <summary>
+        /// 澶�  娉�:璐︽埛缂栧彿
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="Keyid" ,IsPrimaryKey = true,IsIdentity = true) ]
+        public int Keyid  { get; set;  } 
+     
+        /// <summary>
+        /// 澶�  娉�:鍘傚晢缂栧彿
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="FirmId" ) ]
+        public Guid FirmId  { get; set;  } 
+     
+        /// <summary>
+        /// 澶�  娉�:璐﹀悕
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="AccountName" ) ]
+        public string AccountName  { get; set;  } = null!;
+     
+        /// <summary>
+        /// 澶�  娉�:璐︽埛绫诲瀷
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="AccountType" ) ]
+        public string AccountType  { get; set;  } = null!;
+     
+        /// <summary>
+        /// 澶�  娉�:鎴峰悕
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="UserName" ) ]
+        public string UserName  { get; set;  } = null!;
+     
+        /// <summary>
+        /// 澶�  娉�:璐d换浜�
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="ResponsiblePerson" ) ]
+        public string? ResponsiblePerson  { get; set;  } 
+     
+        /// <summary>
+        /// 澶�  娉�:鐘舵��
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="Status" ) ]
+        public bool Status  { get; set;  } 
+     
+        /// <summary>
+        /// 澶�  娉�:浣欓
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="Balance" ) ]
+        public decimal Balance  { get; set;  } 
+     
+        /// <summary>
+        /// 澶�  娉�:鎬绘敹鍏�
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="AllIncome" ) ]
+        public decimal AllIncome  { get; set;  } 
+     
+        /// <summary>
+        /// 澶�  娉�:鎬绘敮鍑�
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="AllExpenses" ) ]
+        public decimal AllExpenses  { get; set;  } 
+     
+        /// <summary>
+        /// 澶�  娉�:鍒涘缓鏃堕棿
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="CreateTime" ) ]
+        public DateTime CreateTime  { get; set;  } 
+     
+        /// <summary>
+        /// 澶�  娉�:鏈�鍚庝慨鏀规椂闂�
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="LastUpdateTime" ) ]
+        public DateTime LastUpdateTime  { get; set;  } 
+     
+        /// <summary>
+        /// 澶�  娉�:鎿嶄綔浜�
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="Operator" ) ]
+        public string Operator  { get; set;  } = null!;
+     
+        /// <summary>
+        /// 澶�  娉�:澶囨敞
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="Remark" ) ]
+        public string? Remark  { get; set;  } 
+    
+
+    }
+    
+}
\ No newline at end of file
diff --git a/cylsg/cylsg.Model/ECTEModel/OA_FirmAccountRecord.cs b/cylsg/cylsg.Model/ECTEModel/OA_FirmAccountRecord.cs
new file mode 100644
index 0000000..f448703
--- /dev/null
+++ b/cylsg/cylsg.Model/ECTEModel/OA_FirmAccountRecord.cs
@@ -0,0 +1,103 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using SqlSugar;
+namespace Models
+{
+    /// <summary>
+    /// 鍔炲叕绯荤粺鍘傚晢璐︽埛鏀舵敮璁板綍
+    ///</summary>
+    [SugarTable("OA_FirmAccountRecord")]
+    [Tenant("ECTESTOADB")]
+    public class OA_FirmAccountRecord
+    {
+        
+     
+        /// <summary>
+        /// 澶�  娉�:璁板綍缂栧彿
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="Keyid" ,IsPrimaryKey = true,IsIdentity = true) ]
+        public int Keyid  { get; set;  } 
+     
+        /// <summary>
+        /// 澶�  娉�:绉戠洰缂栧彿
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="SubjectId" ) ]
+        public int SubjectId  { get; set;  } 
+     
+        /// <summary>
+        /// 澶�  娉�:璐︽埛缂栧彿
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="AccountId" ) ]
+        public int AccountId  { get; set;  } 
+     
+        /// <summary>
+        /// 澶�  娉�:鏀躲�佹敮
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="RecordTypeId" ) ]
+        public int RecordTypeId  { get; set;  } 
+     
+        /// <summary>
+        /// 澶�  娉�:鎿嶄綔閲戦
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="Money" ) ]
+        public decimal Money  { get; set;  } 
+     
+        /// <summary>
+        /// 澶�  娉�:鍚嶇О
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="PaymentUnit" ) ]
+        public string PaymentUnit  { get; set;  } = null!;
+     
+        /// <summary>
+        /// 澶�  娉�:璁板綍鏉ユ簮淇℃伅
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="OperationalMatters" ) ]
+        public string OperationalMatters  { get; set;  } = null!;
+     
+        /// <summary>
+        /// 澶�  娉�:鏈�鍚庝慨鏀规椂闂�
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="LastUpdateTime" ) ]
+        public DateTime LastUpdateTime  { get; set;  } 
+     
+        /// <summary>
+        /// 澶�  娉�:鎿嶄綔浜�
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="Operator" ) ]
+        public string Operator  { get; set;  } = null!;
+     
+        /// <summary>
+        /// 澶�  娉�:澶囨敞
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="Remark" ) ]
+        public string? Remark  { get; set;  } 
+     
+        /// <summary>
+        /// 澶�  娉�:
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="ResidualAmount" ) ]
+        public decimal? ResidualAmount  { get; set;  } 
+     
+        /// <summary>
+        /// 澶�  娉�:
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="Department" ) ]
+        public string? Department  { get; set;  } 
+    
+
+    }
+    
+}
\ No newline at end of file
diff --git a/cylsg/cylsg.Model/ECTEModel/OA_FirmRole.cs b/cylsg/cylsg.Model/ECTEModel/OA_FirmRole.cs
new file mode 100644
index 0000000..a48f21d
--- /dev/null
+++ b/cylsg/cylsg.Model/ECTEModel/OA_FirmRole.cs
@@ -0,0 +1,59 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace cylsg.Model.ECTEModel
+{
+    /// <summary>
+    /// 鍔炲叕绯荤粺鍘傚晢鍛樺伐瑙掕壊琛�
+    /// </summary>
+    [SugarTable("OA_FirmRole")]
+    [Tenant("ECTESTOADB")]
+    public class OA_FirmRole
+    {
+        /// <summary>
+        /// 淇℃伅缂栧彿
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+        public int Keyid { get; set; }
+
+        /// <summary>
+        /// 鎵�灞炲巶鍟嗙紪鍙�
+        /// </summary>
+        [SugarColumn(IsNullable = false)]
+        public Guid FirmId { get; set; }
+
+        /// <summary>
+        /// 瑙掕壊鍚嶇О
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDataType = "varchar(20)")]
+        public string RoleName { get; set; }
+
+        /// <summary>
+        /// 鏄惁鏈夋晥
+        /// </summary>
+        [SugarColumn(IsNullable = false)]
+        public bool IsUsed { get; set; }
+
+        /// <summary>
+        /// 鏈�鍚庝慨鏀规椂闂�
+        /// </summary>
+        [SugarColumn(IsNullable = false)]
+        public DateTime LastUpdateTime { get; set; }
+
+        /// <summary>
+        /// 鎿嶄綔浜�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDataType = "varchar(20)")]
+        public string Operator { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(200)")]
+        public string Remark { get; set; }
+    }
+}
diff --git a/cylsg/cylsg.Model/ECTEModel/OA_FirmRolePermissionsRel.cs b/cylsg/cylsg.Model/ECTEModel/OA_FirmRolePermissionsRel.cs
new file mode 100644
index 0000000..1065f7e
--- /dev/null
+++ b/cylsg/cylsg.Model/ECTEModel/OA_FirmRolePermissionsRel.cs
@@ -0,0 +1,60 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using SqlSugar;
+namespace Models
+{
+    /// <summary>
+    /// 鍔炲叕绯荤粺鍘傚晢瑙掕壊鏉冮檺鍏宠仈琛�
+    ///</summary>
+    [SugarTable("OA_FirmRolePermissionsRel")]
+    public class OA_FirmRolePermissionsRel
+    {
+        
+     
+        /// <summary>
+        /// 澶�  娉�:鎵�灞炲巶鍟嗙紪鍙�
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="FirmId" ) ]
+        public Guid? FirmId  { get; set;  } 
+     
+        /// <summary>
+        /// 澶�  娉�:瑙掕壊缂栧彿
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="RoleId" ) ]
+        public int RoleId  { get; set;  } 
+     
+        /// <summary>
+        /// 澶�  娉�:鍔熻兘缂栧彿缁�
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="FuncGroup" ) ]
+        public string? FuncGroup  { get; set;  } 
+     
+        /// <summary>
+        /// 澶�  娉�:涓�绾ц彍鍗曠紪鍙�
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="MenuIdOne" ) ]
+        public int? MenuIdOne  { get; set;  } 
+     
+        /// <summary>
+        /// 澶�  娉�:浜岀骇鑿滃崟缂栧彿
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="MenuIdTwo" ) ]
+        public int? MenuIdTwo  { get; set;  } 
+     
+        /// <summary>
+        /// 澶�  娉�:涓夌骇鑿滃崟缂栧彿
+        /// 榛樿鍊�:
+        ///</summary>
+        [SugarColumn(ColumnName="MenuIdThree" ) ]
+        public int? MenuIdThree  { get; set;  } 
+    
+
+    }
+    
+}
\ No newline at end of file
diff --git a/cylsg/cylsg.Model/ECTEModel/OaDepartment.cs b/cylsg/cylsg.Model/ECTEModel/OaDepartment.cs
new file mode 100644
index 0000000..761b6a8
--- /dev/null
+++ b/cylsg/cylsg.Model/ECTEModel/OaDepartment.cs
@@ -0,0 +1,61 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace cylsg.Model.ECTEModel
+{
+
+    /// <summary>
+    /// 鍘傚晢閮ㄩ棬琛�
+    /// </summary>
+    [Tenant("ECTESTOADB")]
+    [SugarTable("Oa_Department")]
+    public class OaDepartment
+        {
+            /// <summary>
+            /// 閮ㄩ棬缂栧彿
+            /// </summary>
+            [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+            public int Keyid { get; set; }
+
+            /// <summary>
+            /// 鎵�灞炲巶鍟嗙紪鍙�
+            /// </summary>
+            [SugarColumn(ColumnName = "FirmId")]
+            public Guid? FirmId { get; set; }
+
+            /// <summary>
+            /// 閮ㄩ棬鍚嶇О
+            /// </summary>
+            [SugarColumn(ColumnName = "Name", Length = 50)]
+            public string Name { get; set; }
+
+            /// <summary>
+            /// 鐘舵��
+            /// </summary>
+            [SugarColumn(ColumnName = "Status", Length = 50)]
+            public string Status { get; set; }
+
+            /// <summary>
+            /// 鏈�鍚庝慨鏀规椂闂�
+            /// </summary>
+            [SugarColumn(ColumnName = "LastUpdateTime")]
+            public DateTime? LastUpdateTime { get; set; }
+
+            /// <summary>
+            /// 鎿嶄綔浜�
+            /// </summary>
+            [SugarColumn(ColumnName = "Operator", Length = 50)]
+            public string Operator { get; set; }
+
+            /// <summary>
+            /// 澶囨敞
+            /// </summary>
+            [SugarColumn(ColumnName = "Remark", Length = 200)]
+            public string Remark { get; set; }
+        }
+    
+}
diff --git a/cylsg/cylsg.Model/ECTEModel/OaStaff.cs b/cylsg/cylsg.Model/ECTEModel/OaStaff.cs
new file mode 100644
index 0000000..27ba2d4
--- /dev/null
+++ b/cylsg/cylsg.Model/ECTEModel/OaStaff.cs
@@ -0,0 +1,384 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace cylsg.Model.ECTEModel
+{
+
+
+
+
+
+    /// <summary>
+    /// 鍔炲叕绯荤粺鍛樺伐琛�
+    /// </summary>       
+    [Tenant( "ECTESTOADB")]
+    [SugarTable("Oa_Staff")]
+        public class OaStaff
+        {
+            /// <summary>
+            /// 涓婚敭ID
+            /// </summary>
+            [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+            public int Keyid { get; set; }
+
+            /// <summary>
+            /// 鎵�灞炲巶鍟嗙紪鍙�
+            /// </summary>
+            [SugarColumn(ColumnName = "FirmId")]
+            public Guid FirmId { get; set; }
+
+            /// <summary>
+            /// 濮撳悕
+            /// </summary>
+            [SugarColumn(ColumnName = "Name", Length = 20)]
+            public string Name { get; set; }
+
+            /// <summary>
+            /// 鎬у埆
+            /// </summary>
+            [SugarColumn(ColumnName = "Sex", Length = 4)]
+            public string Sex { get; set; }
+
+            /// <summary>
+            /// 鐧诲綍璐﹀彿
+            /// </summary>
+            [SugarColumn(ColumnName = "StaffUserName", Length = 20)]
+            public string StaffUserName { get; set; }
+
+            /// <summary>
+            /// 瀵嗙爜
+            /// </summary>
+            [SugarColumn(ColumnName = "StaffUserPwd", Length = 20)]
+            public string StaffUserPwd { get; set; }
+
+            /// <summary>
+            /// 鎵嬫満 ==瀵瑰簲鐢ㄦ埛ITCode
+            /// </summary>
+            [SugarColumn(ColumnName = "MobieNum", Length = 20)]
+            public string MobieNum { get; set; } 
+
+            /// <summary>
+            /// QQ
+            /// </summary>
+            [SugarColumn(ColumnName = "QQ", Length = 20)]
+            public string QQ { get; set; }
+
+            /// <summary>
+            /// 鑱旂郴鐢佃瘽
+            /// </summary>
+            [SugarColumn(ColumnName = "PhoneNum", Length = 20)]
+            public string PhoneNum { get; set; }
+
+            /// <summary>
+            /// Email
+            /// </summary>
+            [SugarColumn(ColumnName = "Email", Length = 50)]
+            public string Email { get; set; }
+
+            /// <summary>
+            /// 鐘舵��
+            /// </summary>
+            [SugarColumn(ColumnName = "Status", Length = 10)]
+            public string Status { get; set; }
+
+            /// <summary>
+            /// 鏈�鍚庝慨鏀规椂闂�
+            /// </summary>
+            [SugarColumn(ColumnName = "LastUpdateTime")]
+            public DateTime LastUpdateTime { get; set; }
+
+            /// <summary>
+            /// 鎿嶄綔浜�
+            /// </summary>
+            [SugarColumn(ColumnName = "Operator", Length = 20)]
+            public string Operator { get; set; }
+
+            /// <summary>
+            /// 澶囨敞
+            /// </summary>
+            [SugarColumn(ColumnName = "Remark", Length = 200)]
+            public string Remark { get; set; }
+
+            /// <summary>
+            /// 鍏宠仈浼氬憳
+            /// </summary>
+            [SugarColumn(ColumnName = "MemberId")]
+            public Guid? MemberId { get; set; }
+
+            /// <summary>
+            /// 鏄惁涓轰笟鍔$粡鐞�
+            /// </summary>
+            [SugarColumn(ColumnName = "IsBusinessManager")]
+            public bool? IsBusinessManager { get; set; }
+
+            /// <summary>
+            /// 鏄惁涓鸿处鎴风粡鐞�
+            /// </summary>
+            [SugarColumn(ColumnName = "IsAccountManager")]
+            public bool? IsAccountManager { get; set; }
+
+            /// <summary>
+            /// 閮ㄩ棬ID
+            /// </summary>
+            [SugarColumn(ColumnName = "DepartmentId")]
+            public int? DepartmentId { get; set; }
+           /// <summary>
+          /// 閮ㄩ棬
+          /// </summary>
+           [Navigate(NavigateType.OneToOne,nameof( DepartmentId),nameof(OaDepartment.Keyid))]
+            public OaDepartment Department { get; set; }
+            /// <summary>
+            /// 涓汉妗f鍞竴缂栫爜
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_Number", Length = 50)]
+            public string SM_Number { get; set; }
+
+            /// <summary>
+            /// 鐖变汉濮撳悕
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_SpouseName", Length = 50)]
+            public string SM_SpouseName { get; set; }
+
+            /// <summary>
+            /// 鐖变汉鐢佃瘽
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_SpousePhone", Length = 50)]
+            public string SM_SpousePhone { get; set; }
+
+            /// <summary>
+            /// 鍏朵粬璁板綍
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_OtherLog")]
+            public string SM_OtherLog { get; set; }
+
+            /// <summary>
+            /// 鑱屽姟
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_Post", Length = 50)]
+            public string SM_Post { get; set; }
+
+            /// <summary>
+            /// 瀛﹀巻
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_Degree", Length = 50)]
+            public string SM_Degree { get; set; }
+
+            /// <summary>
+            /// 鍏ヨ亴鏃堕棿
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_StartWorkTime")]
+            public DateTime? SM_StartWorkTime { get; set; }
+
+            /// <summary>
+            /// 钖祫寰呴亣
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_Money", Length = 100)]
+            public string SM_Money { get; set; }
+
+            /// <summary>
+            /// 鏄惁璐拱绀句繚
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_IsSocialSecurity")]
+            public int? SM_IsSocialSecurity { get; set; }
+
+            /// <summary>
+            /// 绀句繚绫诲瀷
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_SocialSecurityType", Length = 50)]
+            public string SM_SocialSecurityType { get; set; }
+
+            /// <summary>
+            /// 绀句繚鍗″彿
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_SocialSecurityNumber", Length = 50)]
+            public string SM_SocialSecurityNumber { get; set; }
+
+            /// <summary>
+            /// 鏄惁绛捐鍚堝悓
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_IsContract")]
+            public int? SM_IsContract { get; set; }
+
+            /// <summary>
+            /// 鍚堝悓绛捐鏃堕棿
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_ContractStartTime")]
+            public DateTime? SM_ContractStartTime { get; set; }
+
+            /// <summary>
+            /// 鍚堝悓鍒版湡鏃堕棿
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_ContractEndTime")]
+            public DateTime? SM_ContractEndTime { get; set; }
+
+            /// <summary>
+            /// 绂昏亴瀹℃壒
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_EndWorkStatus")]
+            public int? SM_EndWorkStatus { get; set; }
+
+            /// <summary>
+            /// 绂昏亴鐢宠鏃堕棿
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_EndWorkStartTime")]
+            public DateTime? SM_EndWorkStartTime { get; set; }
+
+            /// <summary>
+            /// 绂昏亴鏃堕棿
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_EndWorkTime")]
+            public DateTime? SM_EndWorkTime { get; set; }
+
+            /// <summary>
+            /// 绂昏亴鍘熷洜
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_EndWorkContent", Length = 200)]
+            public string SM_EndWorkContent { get; set; }
+
+            /// <summary>
+            /// 閮ㄩ棬涓荤绛惧瓧
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_DepartmentHeads", Length = 50)]
+            public string SM_DepartmentHeads { get; set; }
+
+            /// <summary>
+            /// 琛屾斂閮ㄧ瀛�
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_AdministrationDepartment", Length = 50)]
+            public string SM_AdministrationDepartment { get; set; }
+
+            /// <summary>
+            /// 璐㈠姟閮ㄧ瀛�
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_MinistryFinance", Length = 50)]
+            public string SM_MinistryFinance { get; set; }
+
+            /// <summary>
+            /// 鎬荤粡鐞嗙瀛�
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_GeneralManager", Length = 50)]
+            public string SM_GeneralManager { get; set; }
+
+            /// <summary>
+            /// 鏄惁瀵煎叆
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_IsImporting")]
+            public int? SM_IsImporting { get; set; }
+
+            /// <summary>
+            /// 鏄惁鍒犻櫎
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_IsDelete")]
+            public int? SM_IsDelete { get; set; }
+
+            /// <summary>
+            /// 鍑虹敓鏃ユ湡
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_Birthday")]
+            public DateTime? SM_Birthday { get; set; }
+
+            /// <summary>
+            /// 韬唤璇佸彿鐮�
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_IDCardNum", Length = 50)]
+            public string SM_IDCardNum { get; set; }
+
+            /// <summary>
+            /// 韬唤璇佸浘鐗�
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_IDCardPic", Length = 200)]
+            public string SM_IDCardPic { get; set; }
+
+            /// <summary>
+            /// 璇佷功绫诲瀷
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_CertificateType")]
+            public string SM_CertificateType { get; set; }
+
+            /// <summary>
+            /// 璇佷功鍥剧墖
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_CertificatePic")]
+            public string SM_CertificatePic { get; set; }
+
+            /// <summary>
+            /// 鐜板眳鐪�
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_NowProvince", Length = 50)]
+            public string SM_NowProvince { get; set; }
+
+            /// <summary>
+            /// 鐜板眳甯�
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_NowCity", Length = 50)]
+            public string SM_NowCity { get; set; }
+
+            /// <summary>
+            /// 鐜板眳鍖�
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_NowArea", Length = 50)]
+            public string SM_NowArea { get; set; }
+
+            /// <summary>
+            /// 鐜板眳鍦板潃
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_NowAddress", Length = 50)]
+            public string SM_NowAddress { get; set; }
+
+            /// <summary>
+            /// 绫嶈疮鐪�
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_OldProvence", Length = 50)]
+            public string SM_OldProvence { get; set; }
+
+            /// <summary>
+            /// 绫嶈疮甯�
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_OldCity", Length = 50)]
+            public string SM_OldCity { get; set; }
+
+            /// <summary>
+            /// 绫嶈疮鍖�
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_OldArea", Length = 50)]
+            public string SM_OldArea { get; set; }
+
+            /// <summary>
+            /// 绫嶈疮鍦板潃
+            /// </summary>
+            [SugarColumn(ColumnName = "SM_OldAdress", Length = 50)]
+            public string SM_OldAdress { get; set; }
+
+            /// <summary>
+            /// 鏄惁鏄徃鏈�
+            /// </summary>
+            [SugarColumn(ColumnName = "BF_IsDriver")]
+            public bool BF_IsDriver { get; set; }
+
+            /// <summary>
+            /// 鏄惁鏄厤閫佺鐞嗗憳
+            /// </summary>
+            [SugarColumn(ColumnName = "BF_IsDeliverManage")]
+            public bool BF_IsDeliverManage { get; set; }
+
+            /// <summary>
+            /// 鏄惁涓烘姤閿�涓荤
+            /// </summary>
+            [SugarColumn(ColumnName = "BF_IsBaoxiaozhuguan")]
+            public bool BF_IsBaoxiaozhuguan { get; set; }
+
+            /// <summary>
+            /// 鏄惁涓烘姤閿�缁忕悊
+            /// </summary>
+            [SugarColumn(ColumnName = "BF_Isbaoxiaojingli")]
+            public bool BF_Isbaoxiaojingli { get; set; }
+
+            
+    }
+    
+
+}
diff --git a/cylsg/cylsg.Model/ECTEModel/OaStaffRoleRel.cs b/cylsg/cylsg.Model/ECTEModel/OaStaffRoleRel.cs
new file mode 100644
index 0000000..8d9a129
--- /dev/null
+++ b/cylsg/cylsg.Model/ECTEModel/OaStaffRoleRel.cs
@@ -0,0 +1,25 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using SqlSugar;
+
+namespace cylsg.Model.ECTEModel
+{
+    /// <summary>
+    /// 鍛樺伐瑙掕壊琛�
+    /// </summary>
+    [Tenant("ECTESTOADB")]
+    public class OA_StaffRoleRel
+    {
+           
+        public Guid FirmId { get; set; } 
+      
+        public int StaffId { get; set; }      
+
+        public int RoleId { get; set; }
+    }
+}
diff --git a/cylsg/cylsg.Model/ECTEModel/OaSubjectSet.cs b/cylsg/cylsg.Model/ECTEModel/OaSubjectSet.cs
new file mode 100644
index 0000000..13def09
--- /dev/null
+++ b/cylsg/cylsg.Model/ECTEModel/OaSubjectSet.cs
@@ -0,0 +1,68 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace cylsg.Model.ECTEModel
+{
+
+
+    /// <summary>
+    /// 鍔炲叕绯荤粺绉戠洰璁剧疆
+    /// </summary>
+    [Tenant("ECTESTOADB")]
+    [SugarTable("Oa_SubjectSet")]
+    public class OaSubjectSet
+        {
+            /// <summary>
+            /// 绉戠洰缂栧彿
+            /// </summary>
+            [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+            public int Keyid { get; set; }
+
+            /// <summary>
+            /// 鎵�灞炲巶鍟�   
+            /// </summary>
+            [SugarColumn(ColumnName = "FirmId")]
+            public Guid? FirmId { get; set; }
+
+            /// <summary>
+            /// 绉戠洰绫诲埆 杩囨护涓� 璐锋槸鏀嚭 鐨勭被鍒�
+            /// </summary>
+            [SugarColumn(ColumnName = "SubjectType", Length = 10)]
+            public string? SubjectType { get; set; }
+
+            /// <summary>
+            /// 绉戠洰鍚嶇О
+            /// </summary>
+            [SugarColumn(ColumnName = "SubjectName", Length = 50)]
+            public string SubjectName { get; set; }
+
+            /// <summary>
+            /// 鏈�鍚庝慨鏀规椂闂�
+            /// </summary>
+            [SugarColumn(ColumnName = "LastUpdateTime")]
+            public DateTime? LastUpdateTime { get; set; }
+
+            /// <summary>
+            /// 鎿嶄綔浜�
+            /// </summary>
+            [SugarColumn(ColumnName = "Operator", Length = 20)]
+            public string? Operator { get; set; }
+
+            /// <summary>
+            /// 澶囨敞
+            /// </summary>
+            [SugarColumn(ColumnName = "Remark", Length = 200)]
+            public string? Remark { get; set; }
+
+            /// <summary>
+            /// 鐘舵�� 1涓烘湁鏁�
+            /// </summary>
+            [SugarColumn(ColumnName = "Status")]
+            public bool? Status { get; set; }
+        }
+    
+}
diff --git a/cylsg/cylsg.Model/ECTEModel/OaWorkPlan.cs b/cylsg/cylsg.Model/ECTEModel/OaWorkPlan.cs
new file mode 100644
index 0000000..6c193c2
--- /dev/null
+++ b/cylsg/cylsg.Model/ECTEModel/OaWorkPlan.cs
@@ -0,0 +1,310 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace cylsg.Model.ECTEModel
+{
+
+    /// <summary>
+    /// 宸ヤ綔娴佺▼
+    /// </summary>
+    [Tenant("ECTESTOADB")]
+    [SugarTable("OA_WorkPlan")]
+    public  class  OaWorkPlan
+        {
+            /// <summary>
+            /// 缂栧彿
+            /// </summary>
+            [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+            public int? Keyid { get; set; }
+
+            /// <summary>
+            /// 浼氬憳缂栧彿
+            /// </summary>
+            [SugarColumn(ColumnName = "MemberId")]
+            public Guid? MemberId { get; set; }
+           
+            /// <summary>
+            /// 鍙戣捣浜虹紪鍙�
+            /// </summary>
+            [SugarColumn(ColumnName = "SentStaffId")]
+            public Guid? SentStaffId { get; set; }
+
+        /// <summary>
+        /// 鍛樺伐
+        /// </summary>
+        [Navigate(NavigateType.OneToOne, nameof(SentStaffId), nameof(OaStaff.MemberId))]
+        public OaStaff? SentStaff { get; set; }
+
+        /// <summary>
+        /// 閮ㄩ棬缂栧彿
+        /// </summary>
+        [SugarColumn(ColumnName = "DepartId")]
+            public int? DepartId { get; set; }
+          /// <summary>
+          /// 閮ㄩ棬
+          /// </summary>
+        [Navigate(NavigateType.OneToOne, nameof(DepartId), nameof(OaDepartment.Keyid))]
+        public OaDepartment? Depart { get; set; }
+        /// <summary>
+        /// 鎺ユ敹浜虹紪鍙�
+        /// </summary>
+        [SugarColumn(ColumnName = "ReciveStaffId")]
+            public Guid? ReciveStaffId { get; set; }
+
+            /// <summary>
+            /// 璁″垝绫诲瀷  鎶ラ攢绫讳负3
+            /// </summary>
+            [SugarColumn(ColumnName = "PlanType")]
+            public int? PlanType { get; set; }  
+
+            /// <summary>
+            /// 璁″垝鎬ц川 鎶ラ攢绫讳负17
+            /// </summary>
+            [SugarColumn(ColumnName = "PlanDataType")]
+            public int? PlanDataType { get; set; }
+
+            /// <summary>
+            /// 涓婚 鍜屽唴瀹逛竴鑷�
+            /// </summary>
+            [SugarColumn(ColumnName = "PlanTitle", Length = 200)]
+            public string? PlanTitle { get; set; }
+
+            /// <summary>
+            /// 鍐呭
+            /// </summary>
+            [SugarColumn(ColumnName = "PlanContent", Length = 500)]
+            public string? PlanContent { get; set; }
+
+            /// <summary>
+            /// 鎵ц鏃堕棿
+            /// </summary>
+            [SugarColumn(ColumnName = "PlanRunTime")]
+            public DateTime? PlanRunTime { get; set; }
+
+            /// <summary>
+            /// 鐢宠璐圭敤
+            /// </summary>
+            [SugarColumn(ColumnName = "PlanMoney")]
+            public decimal? PlanMoney { get; set; }
+
+            /// <summary>
+            /// 澶囨敞
+            /// </summary>
+            [SugarColumn(ColumnName = "PlanRemark", Length = 200)]
+            public string? PlanRemark { get; set; }
+
+            /// <summary>
+            /// 璁″垝娣诲姞鏃堕棿
+            /// </summary>
+            [SugarColumn(ColumnName = "PlanStartTime")]
+            public DateTime? PlanStartTime { get; set; }
+
+            /// <summary>
+            /// 璁″垝浜�
+            /// </summary>
+            [SugarColumn(ColumnName = "PlanPeople", Length = 50)]
+            public string? PlanPeople { get; set; }
+
+            /// <summary>
+            /// 瀵瑰彛鍗曚綅 
+            /// </summary>
+            [SugarColumn(ColumnName = "PlanComplany", Length = 50)]
+            public string? PlanComplany { get; set; }
+
+            /// <summary>
+            /// 璁″垝鐘舵�� 鏈敤
+            /// </summary>
+            [SugarColumn(ColumnName = "PlanStatus")]
+            public PlanStatusType? PlanStatus { get; set; }
+
+            /// <summary>
+            /// 瀹℃牳浜虹紪鍙�
+            /// </summary>
+            [SugarColumn(ColumnName = "ApprovalStaffId")]
+            public Guid? ApprovalStaffId { get; set; }
+
+        /// <summary>
+        /// 瀹℃壒鐘舵��
+        /// </summary>
+        [SugarColumn(ColumnName = "ApprovalStatus")]
+        public PlanStatusType? ApprovalStatus { get; set; } = PlanStatusType.unApproval;
+
+        /// <summary>
+        /// 瀹℃壒浜哄憳
+        /// </summary>       
+        [Navigate(NavigateType.OneToMany,  nameof(OaWorkPlanShenpi.OA_WorkPlanId), nameof(Keyid))]
+        public List<OaWorkPlanShenpi>? OaWorkPlanShenpis {  get; set; }
+            /// <summary>
+            /// 瀹℃牳鏃堕棿
+            /// </summary>
+            [SugarColumn(ColumnName = "ApprovalTime")]
+            public DateTime? ApprovalTime { get; set; }
+
+            /// <summary>
+            /// 瀹℃牳鎵瑰
+            /// </summary>
+            [SugarColumn(ColumnName = "ApprovalContent", Length = 100)]
+            public string? ApprovalContent { get; set; }
+
+            /// <summary>
+            /// 鏈�鍚庝慨鏀规椂闂�
+            /// </summary>
+            [SugarColumn(ColumnName = "LastUpdateTime")]
+            public DateTime? LastUpdateTime { get; set; }
+
+            /// <summary>
+            /// 鎿嶄綔浜�
+            /// </summary>
+            [SugarColumn(ColumnName = "Operator", Length = 20)]
+            public string? Operator { get; set; }
+
+        /// <summary>
+        /// 鑰冭瘎缁撴灉/  鏇存敼涓烘姤閿�鐘舵��  榛樿涓烘湭鎶ラ攢鐘舵��
+        /// </summary>
+        [SugarColumn(ColumnName = "EvaluationStatus")]
+        public BaoxiaoStausType? EvaluationStatus { get; set; } = BaoxiaoStausType.NotReimbursed;
+
+            /// <summary>
+            /// 鑰冭瘎鍐呭
+            /// </summary>
+            [SugarColumn(ColumnName = "EvaluationContent", Length = 200)]
+            public string? EvaluationContent { get; set; }
+
+            /// <summary>
+            /// 鑰冭瘎浜�
+            /// </summary>
+            [SugarColumn(ColumnName = "EvaluationStaffId")]
+            public Guid? EvaluationStaffId { get; set; }
+
+            /// <summary>
+            /// 鑰冭瘎鏃堕棿
+            /// </summary>
+            [SugarColumn(ColumnName = "EvaluationTime")]
+            public DateTime? EvaluationTime { get; set; }
+
+            /// <summary>
+            /// 濂栧姳绫诲瀷/褰撳墠姝ラ 锛�1鎴栬��2
+            /// </summary>
+            [SugarColumn(ColumnName = "RewardType")]
+            public int? RewardType { get; set; }
+
+            /// <summary>
+            /// 濂栧姳鍘熷洜 /涓烘洿姝g鐩悕绉�
+            /// </summary>
+            [SugarColumn(ColumnName = "RewardContent", Length = 200)]
+            public string? RewardContent { get; set; }
+
+        /// <summary>
+        /// 濂栧姳缁撴灉  /鏇存涓虹鐩甀D
+        /// </summary>
+        [SugarColumn(ColumnName = "RewardResult", Length = 200)]
+            public string? RewardResult { get; set; }  
+
+            /// <summary>
+            /// 濂栧姳閲戦 寮冪敤
+            /// </summary>
+            [SugarColumn(ColumnName = "RewardMoney")]
+            public decimal? RewardMoney { get; set; }
+
+
+        /// <summary>
+        /// 鏄惁鍚庤ˉ鍙戠エ 榛樿涓烘湁鍙戠エ
+        /// </summary>
+        public HoubufapiaoStatusType? HoubufapiaoStatus { get; set; } = HoubufapiaoStatusType.You;
+
+        /// <summary>
+        /// 闄勪欢锛屽寘鎷彂绁ㄥ拰闄勪欢锛岄渶瑕佸垎绫�
+        /// </summary>
+        [Navigate(NavigateType.OneToMany,  nameof(OaWorkPlanAttachment.OA_WorkPlanId),nameof(Keyid))]
+        public List< OaWorkPlanAttachment>? WorkPlanAttachments { get; set; }
+
+        ///// <summary>
+        ///// 鍗曠函鐨勯檮浠�
+        ///// </summary>
+        //[SugarColumn( IsIgnore =true)]
+        //public List<OaWorkPlanAttachment>? Attachments { get; set; }
+        ///// <summary>
+        ///// 鍙戠エ闄勪欢
+        ///// </summary>
+        //[SugarColumn(IsIgnore = true)]
+        //public List<OaWorkPlanAttachment>? Receipts { get; set; }
+        /// <summary>
+        /// 鎶ラ攢璐﹀彿
+        /// </summary>
+        [SugarColumn(IsIgnore =true)]
+        public int? FirmAccountId {  get; set; }
+    }
+    
+    public enum PlanStatusType
+    {
+        /// <summary>
+        /// 鐢宠
+        /// </summary>
+        [Description("鏈鎵�")]
+        unApproval,
+        /// <summary>
+        /// 閫氳繃
+        /// </summary>
+        [Description("閫氳繃")]
+        Yes ,
+        /// <summary>
+        /// 鍚﹀畾
+        /// </summary>
+        [Description("鍚﹀畾")]
+        No
+    }
+    /// <summary>
+    /// 鍚庤ˉ鍙戠エ鐘舵��
+    /// </summary>
+    public enum HoubufapiaoStatusType
+    {
+        /// <summary>
+        /// 鏈煡
+        /// </summary>
+        [Description("鏈煡")]
+        Unknown,
+        /// <summary>
+        /// 鏄�
+        /// </summary>
+          [Description("鏄�")]
+        You = 1,
+        /// <summary>
+        ///鍚庤ˉ鍙戠エ
+        /// </summary>
+        [Description("鍚庤ˉ鍙戠エ")]
+        HouBuFaPiao =2,
+        /// <summary>
+        /// 鏃犲彂绁�
+        /// </summary>
+        [Description("鏃犲彂绁�")]
+        Wu = 3
+
+    }
+
+
+
+    public enum BaoxiaoStausType
+    {
+        /// <summary>
+        /// 鏈煡
+        /// </summary>
+        [Description("鏈煡")]
+        Unknown,
+        /// <summary>
+        /// 宸叉姤閿�
+        /// </summary>
+        [Description("宸叉姤閿�")]
+        Reimbursed,
+        /// <summary>
+        /// 鏈姤閿�
+        /// </summary>
+        [Description("鏈姤閿�")]
+        NotReimbursed
+    }
+
+}
diff --git a/cylsg/cylsg.Model/ECTEModel/OaWorkPlanAttachment.cs b/cylsg/cylsg.Model/ECTEModel/OaWorkPlanAttachment.cs
new file mode 100644
index 0000000..845fcfb
--- /dev/null
+++ b/cylsg/cylsg.Model/ECTEModel/OaWorkPlanAttachment.cs
@@ -0,0 +1,55 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace cylsg.Model.ECTEModel
+{
+
+    /// <summary>
+    /// 宸ヤ綔璁″垝闄勪欢琛�
+    /// </summary>   
+    [Tenant("ECTESTOADB")]
+    [SugarTable("Oa_WorkPlan_Attachment")]
+    public class OaWorkPlanAttachment
+        {
+            /// <summary>
+            /// 涓婚敭ID
+            /// </summary>
+            [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+            public int? Keyid { get; set; }
+
+            /// <summary>
+            /// 宸ヤ綔璁″垝ID
+            /// </summary>
+            [SugarColumn(ColumnName = "OA_WorkPlanId")]
+            public int? OA_WorkPlanId { get; set; }
+
+            /// <summary>
+            /// 闄勪欢 
+            /// </summary>
+            [SugarColumn(ColumnName = "PlanAttachment", Length = 500)]
+            public string? PlanAttachment { get; set; }
+
+        /// <summary>
+        /// 闄勪欢绫诲瀷   1鏄彂绁� 2 鏄檮浠�
+        /// </summary>
+        [SugarColumn(ColumnName = "AttachmentType")]
+            public int? AttachmentType { get; set; }
+
+            /// <summary>
+            /// 鍒涘缓鏃堕棿
+            /// </summary>
+            [SugarColumn(ColumnName = "CreateTime")]
+            public DateTime? CreateTime { get; set; }
+
+            /// <summary>
+            /// 鎿嶄綔鍛�
+            /// </summary>
+            [SugarColumn(ColumnName = "Operator", Length = 20)]
+            public string? Operator { get; set; }
+        }
+    
+}
diff --git a/cylsg/cylsg.Model/ECTEModel/OaWorkPlanShenpi.cs b/cylsg/cylsg.Model/ECTEModel/OaWorkPlanShenpi.cs
new file mode 100644
index 0000000..151f147
--- /dev/null
+++ b/cylsg/cylsg.Model/ECTEModel/OaWorkPlanShenpi.cs
@@ -0,0 +1,83 @@
+锘縰sing Mapster;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace cylsg.Model.ECTEModel
+{
+
+
+    /// <summary>
+    /// 宸ヤ綔璁″垝瀹℃壒琛�
+    /// </summary>
+    [Tenant("ECTESTOADB")]
+    [SugarTable("Oa_WorkPlan_shenpi")]
+    public class OaWorkPlanShenpi
+        {
+            /// <summary>
+            /// 涓婚敭ID
+            /// </summary>
+            [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+            public int? Keyid { get; set; }
+
+            /// <summary>
+            /// 宸ヤ綔璁″垝ID 鎶ラ攢鍗旾D
+            /// </summary>
+            [SugarColumn(ColumnName = "OA_WorkPlanId")]
+          
+            public int? OA_WorkPlanId { get; set; }
+
+            /// <summary>
+            /// 瀹℃壒浜虹紪鍙�
+            /// </summary>
+            [SugarColumn(ColumnName = "ApprovalStaffId")]
+            public Guid? ApprovalStaffId { get; set; }
+        /// <summary>
+        /// 瀹℃壒浜�
+        /// </summary>
+         [Navigate(NavigateType.OneToOne, nameof(ApprovalStaffId), nameof(OaStaff.MemberId))]
+          public OaStaff? ApprovalStaff {  get; set; }
+
+            /// <summary>
+            /// 瀹℃壒鐘舵��
+            /// </summary>
+            [SugarColumn(ColumnName = "ApprovalStatus")]
+        [Required]
+        public PlanStatusType? ApprovalStatus { get; set; }
+
+            /// <summary>
+            /// 瀹℃壒鏃堕棿
+            /// </summary>
+            [SugarColumn(ColumnName = "ApprovalTime")]
+            public DateTime? ApprovalTime { get; set; }
+
+            /// <summary>
+            /// 瀹℃壒鍐呭
+            /// </summary>
+            [SugarColumn(ColumnName = "ApprovalContent", Length = 100)]
+            public string ApprovalContent { get; set; }
+
+            /// <summary>
+            /// 鍒涘缓鏃堕棿
+            /// </summary>
+            [SugarColumn(ColumnName = "CreateTime")]
+            public DateTime CreateTime { get; set; }
+
+            /// <summary>
+            /// 鎿嶄綔鍛�
+            /// </summary>
+            [SugarColumn(ColumnName = "Operator", Length = 20)]
+            public string Operator { get; set; }
+
+            /// <summary>
+            /// 瀹℃壒姝ラ
+            /// </summary>
+            [SugarColumn(ColumnName = "Buzhou")]
+            public int? Buzhou { get; set; }
+        }
+    
+}
diff --git a/cylsg/cylsg.Model/ECTEModel/Sys_Permissions_Menu.cs b/cylsg/cylsg.Model/ECTEModel/Sys_Permissions_Menu.cs
new file mode 100644
index 0000000..a956c0c
--- /dev/null
+++ b/cylsg/cylsg.Model/ECTEModel/Sys_Permissions_Menu.cs
@@ -0,0 +1,77 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace cylsg.Model.ECTEModel
+{
+    /// <summary>
+    /// 绯荤粺鏉冮檺鑿滃崟琛�
+    /// </summary>
+ 
+    [TenantAttribute("ECTESTOADB")]
+    public class Sys_Permissions_Menu
+    {
+        /// <summary>
+        /// 淇℃伅缂栧彿
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+        public int Keyid { get; set; }
+
+        /// <summary>
+        /// 鑿滃崟鍚嶇О
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDataType = "nvarchar(50)")]
+        public string MenuName { get; set; }
+
+        /// <summary>
+        /// 鐖惰彍鍗旾D
+        /// </summary>
+        [SugarColumn(IsNullable = true)]
+        public int? ParentId { get; set; }
+
+        /// <summary>
+        /// 鑿滃崟璺緞
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(200)")]
+        public string MenuPath { get; set; }
+
+        /// <summary>
+        /// 鑿滃崟鍥炬爣
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(200)")]
+        public string MenuIcon { get; set; }
+
+        /// <summary>
+        /// 鏄惁鏈夋晥
+        /// </summary>
+        [SugarColumn(IsNullable = false)]
+        public bool IsUsed { get; set; }
+
+        /// <summary>
+        /// 鎺掑簭鐮�
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(5)")]
+        public string OrderCode { get; set; }
+
+        /// <summary>
+        /// 鏈�鍚庝慨鏀规椂闂�
+        /// </summary>
+        [SugarColumn(IsNullable = false)]
+        public DateTime LastUpdateTime { get; set; }
+
+        /// <summary>
+        /// 鎿嶄綔浜�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDataType = "varchar(20)")]
+        public string Operator { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(200)")]
+        public string Remark { get; set; }
+    }
+}
diff --git a/cylsg/cylsg.Model/ECTEModel/Sys_Permissions_RoleMenuRelation.cs b/cylsg/cylsg.Model/ECTEModel/Sys_Permissions_RoleMenuRelation.cs
new file mode 100644
index 0000000..244c95e
--- /dev/null
+++ b/cylsg/cylsg.Model/ECTEModel/Sys_Permissions_RoleMenuRelation.cs
@@ -0,0 +1,47 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace cylsg.Model.ECTEModel
+{
+    /// <summary>
+      /// 绯荤粺鏉冮檺瑙掕壊鑿滃崟鍏崇郴琛�
+      /// </summary>
+    [SugarTable("Sys_Permissions_RoleMenuRelation")]
+    [Tenant("ECTESTOADB")]
+    public class Sys_Permissions_RoleMenuRelation
+    {
+        /// <summary>
+        /// 瑙掕壊ID
+        /// </summary>
+        [SugarColumn(IsNullable = true)]
+        public int? RoleId { get; set; }
+
+        /// <summary>
+        /// 鍔熻兘ID
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(200)")]
+        public string FuncId { get; set; }
+
+        /// <summary>
+        /// 涓�绾ц彍鍗旾D
+        /// </summary>
+        [SugarColumn(IsNullable = true)]
+        public int? MenuIdOne { get; set; }
+
+        /// <summary>
+        /// 浜岀骇鑿滃崟ID
+        /// </summary>
+        [SugarColumn(IsNullable = true)]
+        public int? MenuIdTwo { get; set; }
+
+        /// <summary>
+        /// 涓夌骇鑿滃崟ID
+        /// </summary>
+        [SugarColumn(IsNullable = true)]
+        public int? MenuIdThree { get; set; }
+    }
+}
diff --git a/cylsg/cylsg.Model/utilityViewModel/ECTESTOAPermissions.cs b/cylsg/cylsg.Model/utilityViewModel/ECTESTOAPermissions.cs
new file mode 100644
index 0000000..df66ddd
--- /dev/null
+++ b/cylsg/cylsg.Model/utilityViewModel/ECTESTOAPermissions.cs
@@ -0,0 +1,78 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace cylsg.Model.utilityViewModel
+{
+    /// <summary>
+    /// 宸濆嵃鏉冮檺妯″瀷
+    /// </summary>
+    public class ECTESTOAPermissions
+    {
+        /// <summary>
+        /// 鏄惁鏄徃鏈�
+        /// </summary>
+      
+        public bool BF_IsDriver { get; set; }=false;
+
+        /// <summary>
+        /// 鏄惁鏄厤閫佺鐞嗗憳
+        /// </summary>
+       
+        public bool BF_IsDeliverManage { get; set; } = false;
+
+        /// <summary>
+        /// 鏄惁涓烘姤閿�涓荤
+        /// </summary>
+      
+        public bool BF_IsBaoxiaozhuguan { get; set; } =false;
+
+        /// <summary>
+        /// 鏄惁涓烘姤閿�缁忕悊
+        /// </summary>       
+        public bool BF_Isbaoxiaojingli { get; set; } = false;
+        /// <summary>
+        /// 璐㈠姟
+        /// </summary>
+        public bool BF_IsCaiWu{ get; set; } = false;
+        /// <summary>
+        /// 鍛樺伐ID
+        /// </summary>
+        public Guid? MemberId { get; set; }
+
+        /// <summary>
+        /// 鍛樺伐KeyID
+        /// </summary>
+        public int KeyId { get; set; }
+
+        /// <summary>
+        /// 鍛樺伐濮撳悕
+        /// </summary>
+        public string? Name {  get; set; }
+
+        /// <summary>
+        /// 鍛樺伐鐢佃瘽
+        /// </summary>
+        public string? MobieNum { get; set; }
+
+        /// <summary>
+        /// 鑱屽姟鍚嶇О
+        /// </summary>
+        public string? SM_Post { get; set; }
+        /// <summary>
+        /// 閮ㄩ棬鍚嶇О
+        /// </summary>
+        public string? DepartmentName {  get; set; }
+
+        /// <summary>
+        /// 閮ㄩ棬鍚嶇О
+        /// </summary>
+        public int ? DepartId { get; set; }
+
+        
+
+    }
+}
diff --git a/cylsg/cylsg.Web.Core/cylsg.Web.Core.csproj b/cylsg/cylsg.Web.Core/cylsg.Web.Core.csproj
index 4b36e83..88cd94d 100644
--- a/cylsg/cylsg.Web.Core/cylsg.Web.Core.csproj
+++ b/cylsg/cylsg.Web.Core/cylsg.Web.Core.csproj
@@ -16,6 +16,7 @@
 	<ItemGroup>
 		<ProjectReference Include="..\cylsg.Application\cylsg.Application.csproj" />
 		<ProjectReference Include="..\cylsg.Authorization\cylsg.Authorization.csproj" />
+		<ProjectReference Include="..\ECTESTOA\ECTESTOA.csproj" />
 		<ProjectReference Include="..\EzInitqMessageDef\EzInitqMessageDef.csproj" />
 		<ProjectReference Include="..\EzInitQ\EzInitQ.csproj" />
 		<ProjectReference Include="..\EzJob\EzJob.csproj" />
diff --git a/cylsg/cylsg.Web.Entry/appsettings.json b/cylsg/cylsg.Web.Entry/appsettings.json
index 6982c20..7e2e8c1 100644
--- a/cylsg/cylsg.Web.Entry/appsettings.json
+++ b/cylsg/cylsg.Web.Entry/appsettings.json
@@ -11,8 +11,8 @@
       "FileName": "application.log", // 鏃ュ織鏂囦欢瀹屾暣璺緞鎴栨枃浠跺悕锛屾帹鑽� .log 浣滀负鎷撳睍鍚�
       "Append": true, // 杩藉姞鍒板凡瀛樺湪鏃ュ織鏂囦欢鎴栬鐩栧畠浠�
       "MinimumLevel": "Information", // 鏈�浣庢棩蹇楄褰曠骇鍒�
-      "FileSizeLimitBytes": 0, // 鎺у埗姣忎竴涓棩蹇楁枃浠舵渶澶у瓨鍌ㄥぇ灏忥紝鍗曚綅鏄� B锛屼篃灏辨槸 1024 鎵嶇瓑浜� 1KB锛岄粯璁ゆ棤闄愬埗锛屽鏋滄寚瀹氫簡璇ュ�硷紝閭d箞鏃ュ織鏂囦欢澶у皬瓒呭嚭浜嗚閰嶇疆灏变細鍒涘缓鏂扮殑鏃ュ織鏂囦欢锛屾柊鍒涘缓鐨勬棩蹇楁枃浠跺懡鍚嶈鍒欙細鏂囦欢鍚�+[閫掑搴忓彿].log
-      "MaxRollingFiles": 0 // 鎺у埗鏈�澶у垱寤虹殑鏃ュ織鏂囦欢鏁伴噺锛岄粯璁ゆ棤闄愬埗锛岄厤鍚� FileSizeLimitBytes 浣跨敤锛屽鏋滄寚瀹氫簡璇ュ�硷紝閭d箞瓒呭嚭璇ュ�煎皢浠庢渶鍒濇棩蹇楁枃浠朵腑浠庡ご鍐欏叆瑕嗙洊
+      "FileSizeLimitBytes": 1024, // 鎺у埗姣忎竴涓棩蹇楁枃浠舵渶澶у瓨鍌ㄥぇ灏忥紝鍗曚綅鏄� B锛屼篃灏辨槸 1024 鎵嶇瓑浜� 1KB锛岄粯璁ゆ棤闄愬埗锛屽鏋滄寚瀹氫簡璇ュ�硷紝閭d箞鏃ュ織鏂囦欢澶у皬瓒呭嚭浜嗚閰嶇疆灏变細鍒涘缓鏂扮殑鏃ュ織鏂囦欢锛屾柊鍒涘缓鐨勬棩蹇楁枃浠跺懡鍚嶈鍒欙細鏂囦欢鍚�+[閫掑搴忓彿].log
+      "MaxRollingFiles": 10 // 鎺у埗鏈�澶у垱寤虹殑鏃ュ織鏂囦欢鏁伴噺锛岄粯璁ゆ棤闄愬埗锛岄厤鍚� FileSizeLimitBytes 浣跨敤锛屽鏋滄寚瀹氫簡璇ュ�硷紝閭d箞瓒呭嚭璇ュ�煎皢浠庢渶鍒濇棩蹇楁枃浠朵腑浠庡ご鍐欏叆瑕嗙洊
     }
   },
   "AllowedHosts": "*",
@@ -27,8 +27,19 @@
       "DbType": "SqlServer", // "SqlServer" ,mysql,
       "IsAutoCloseConnection": true
     }
+    ,
+
+    {
+      //"ConnectionString": "Data Source=./Furion.db",
+      //"DbType": "Sqlite",
+      //"IsAutoCloseConnection": true
 
 
+      "ConnectionString": "Server=192.168.0.31;Database=ECTEST; MultipleActiveResultSets=true;pooling=true;min pool size=5;max pool size=32767;connect timeout=20;Encrypt=True;TrustServerCertificate=True;User Id=SA;Password=123456;",
+      "DbType": "SqlServer", // "SqlServer" ,mysql,
+      "IsAutoCloseConnection": true,
+      "ConfigId": "ECTESTOADB"
+    }
 
   ],
 
@@ -47,9 +58,9 @@
     "ValidateAudience": true, // 鏄惁楠岃瘉绛炬敹鏂癸紝bool 绫诲瀷锛岄粯璁rue
     "ValidAudience": "www.51zhengcai.com", // 绛炬敹鏂癸紝string 绫诲瀷
     "ValidateLifetime": true, // 鏄惁楠岃瘉杩囨湡鏃堕棿锛宐ool 绫诲瀷锛岄粯璁rue锛屽缓璁畉rue
-    "ExpiredTime": 1440, // 杩囨湡鏃堕棿锛宭ong 绫诲瀷锛屽崟浣嶅垎閽燂紝榛樿20鍒嗛挓
+    "ExpiredTime": 14400, // 杩囨湡鏃堕棿锛宭ong 绫诲瀷锛屽崟浣嶅垎閽燂紝榛樿20鍒嗛挓
     "ClockSkew": 5, // 杩囨湡鏃堕棿瀹归敊鍊硷紝long 绫诲瀷锛屽崟浣嶇锛岄粯璁� 5绉�
     "Algorithm": "HS256", // 鍔犲瘑绠楁硶锛宻tring 绫诲瀷锛岄粯璁� HS256
-    "RefreshTokenExpires": 1440 //鍒嗛挓 1澶� 1440鍒嗛挓
+    "RefreshTokenExpires": 14400 //鍒嗛挓 1澶� 1440鍒嗛挓
   }
 }
\ No newline at end of file
diff --git a/cylsg/cylsg.Web.Entry/cylsg.Web.Entry.csproj b/cylsg/cylsg.Web.Entry/cylsg.Web.Entry.csproj
index ecabffa..375e781 100644
--- a/cylsg/cylsg.Web.Entry/cylsg.Web.Entry.csproj
+++ b/cylsg/cylsg.Web.Entry/cylsg.Web.Entry.csproj
@@ -12,6 +12,7 @@
 
 	<ItemGroup>
 		<ProjectReference Include="..\cylsg.Web.Core\cylsg.Web.Core.csproj" />
+		<ProjectReference Include="..\ECTESTOA\ECTESTOA.csproj" />
 		<ProjectReference Include="..\EzWechat\EzWechat.csproj" />
 	</ItemGroup>
 
diff --git a/cylsg/cylsg.sln b/cylsg/cylsg.sln
index e2b0e88..5dc67de 100644
--- a/cylsg/cylsg.sln
+++ b/cylsg/cylsg.sln
@@ -33,7 +33,9 @@
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cylsg.Filter", "Cylsg.Filter\Cylsg.Filter.csproj", "{2A3AF5AA-E3BE-4C98-A3A7-185ED6F938FE}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EzJob", "EzJob\EzJob.csproj", "{EB4CED81-7245-4477-9541-8167BD522CC6}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EzJob", "EzJob\EzJob.csproj", "{EB4CED81-7245-4477-9541-8167BD522CC6}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ECTESTOA", "ECTESTOA\ECTESTOA.csproj", "{86D67CBF-50F3-470E-A11F-CAA3DF491995}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -105,6 +107,10 @@
 		{EB4CED81-7245-4477-9541-8167BD522CC6}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{EB4CED81-7245-4477-9541-8167BD522CC6}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{EB4CED81-7245-4477-9541-8167BD522CC6}.Release|Any CPU.Build.0 = Release|Any CPU
+		{86D67CBF-50F3-470E-A11F-CAA3DF491995}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{86D67CBF-50F3-470E-A11F-CAA3DF491995}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{86D67CBF-50F3-470E-A11F-CAA3DF491995}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{86D67CBF-50F3-470E-A11F-CAA3DF491995}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

--
Gitblit v1.9.1