From ad64f9d240fb054856afe4ab9523062b2bc079b9 Mon Sep 17 00:00:00 2001
From: 移动系统liao <liaoxujun@qq.com>
Date: 星期三, 20 八月 2025 10:22:08 +0800
Subject: [PATCH] 完成客户企业资料改造和相关表修改和建立,基础APi建立完成

---
 Admin.NET/Admin.NET.Application/Configuration/Logging.json                           |    2 
 Admin.NET/FZCTB.NET.API.Application/Auth/DTO/CustomerLoginOutput.cs                  |   55 +
 Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_Customer.cs                                    |  223 ------
 Admin.NET/cylsg.utility/Extend/StringEx.cs                                           |   19 
 Admin.NET/FZCTB.NET.API.Application/Auth/AuthService.cs                              |  142 ++-
 Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_CustomerRole.cs                                |    2 
 Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/Dto/FBS_CusExtendInput.cs  |  179 +++-
 Admin.NET/Admin.NET.Core/Const/ClaimConst.cs                                         |    6 
 Admin.NET/FZCTB.NET.API.Application/User/DTO/DTOS.cs                                 |  264 +++++++
 Admin.NET/FZCZTB.NET.MD/CutomerMd/Extend/FBS_CusExtend.cs                            |   61 +
 Admin.NET/EzUpFile/UpFileController.cs                                               |    4 
 Admin.NET/FZCTB.NET.API.Application/FZCTB.NET.API.Application.csproj                 |    1 
 Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_CoutomerExRole.cs                              |   29 
 Admin.NET/FZCZTB.NET.SYSService/CustomerSYS/CustomerManagerS.cs                      |  137 +++
 Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_ExRole.cs                                      |    2 
 Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/FBS_CusExtendService.cs    |  234 ++++--
 Admin.NET/FZFCGDD.ORDER.Application/FZFCGDD.ORDER.Application.csproj                 |    4 
 Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/Dto/FBS_CusExtendOutput.cs |  128 +++
 Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/Dto/FBS_CusExtendDto.cs    |   17 
 Admin.NET/Admin.NET.Core/Const/CacheConst.cs                                         |    5 
 Admin.NET/FZCZTB.NET.MD/ConfigMd/FBS_EnterpriseType.cs                               |    2 
 Admin.NET/FZCTB.NET.API.Application/User/CustomerService.cs                          |  438 +++++++++---
 Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_CustormerUsers.cs                              |  128 +++
 Admin.NET/FZFCGDD.ORDER.Application/Service/ShouyeGonggao/ShouyeGonggaoService.cs    |   10 
 24 files changed, 1,489 insertions(+), 603 deletions(-)

diff --git a/Admin.NET/Admin.NET.Application/Configuration/Logging.json b/Admin.NET/Admin.NET.Application/Configuration/Logging.json
index 2f5be95..76decbb 100644
--- a/Admin.NET/Admin.NET.Application/Configuration/Logging.json
+++ b/Admin.NET/Admin.NET.Application/Configuration/Logging.json
@@ -43,7 +43,7 @@
       "JsonBehavior": "None", // 鏄惁杈撳嚭Json锛岄粯璁one(OnlyJson銆丄ll)
       "JsonIndented": false, // 鏄惁鏍煎紡鍖朖son
       "UseUtcTimestamp": false, // 鏃堕棿鏍煎紡UTC銆丩OCAL
-      "ConsoleLog": true // 鏄惁鏄剧ず鎺у埗鍙版棩蹇�
+      "ConsoleLog": false // 鏄惁鏄剧ず鎺у埗鍙版棩蹇�
     }
   }
 }
\ No newline at end of file
diff --git a/Admin.NET/Admin.NET.Core/Const/CacheConst.cs b/Admin.NET/Admin.NET.Core/Const/CacheConst.cs
index 3a0a3b9..7f547e0 100644
--- a/Admin.NET/Admin.NET.Core/Const/CacheConst.cs
+++ b/Admin.NET/Admin.NET.Core/Const/CacheConst.cs
@@ -42,6 +42,11 @@
     public const string KeyPhoneVerCode = "sys_phoneVerCode:";
 
     /// <summary>
+    /// 浜屾鐧婚檰楠岃瘉鐮�
+    /// </summary>
+    public const string KeyLogoVerCode = "sys_KeyLogoVerCode:";
+
+    /// <summary>
     /// 瀵嗙爜閿欒娆℃暟缂撳瓨
     /// </summary>
     public const string KeyPasswordErrorTimes = "sys_password_error_times:";
diff --git a/Admin.NET/Admin.NET.Core/Const/ClaimConst.cs b/Admin.NET/Admin.NET.Core/Const/ClaimConst.cs
index 18f48bb..7d58a33 100644
--- a/Admin.NET/Admin.NET.Core/Const/ClaimConst.cs
+++ b/Admin.NET/Admin.NET.Core/Const/ClaimConst.cs
@@ -77,4 +77,10 @@
     /// 瀹㈡埛鐧诲綍绫诲瀷
     /// </summary>
     public const string CustomerLogoinType = "CustomerLogoinType";
+
+
+    /// <summary>
+    /// 浼佷笟id
+    /// </summary>
+    public const string CustomerExId = "CustomerExId";
 }
\ No newline at end of file
diff --git a/Admin.NET/EzUpFile/UpFileController.cs b/Admin.NET/EzUpFile/UpFileController.cs
index 5028e5c..41c34ed 100644
--- a/Admin.NET/EzUpFile/UpFileController.cs
+++ b/Admin.NET/EzUpFile/UpFileController.cs
@@ -1,5 +1,6 @@
 锘縰sing EzTencentCloud;
 using Furion.FriendlyException;
+using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Http.HttpResults;
 using Microsoft.AspNetCore.Mvc;
@@ -38,6 +39,7 @@
         /// <param name="PageName"> 韬唤璇佹鍙嶉潰 FRONT 姝i潰  Back  鍥藉窘鍙嶉潰 </param>
         /// <returns></returns>
         [HttpPost]
+        [AllowAnonymous]
         public async Task<Object> UploadIdCord([FromServices] IEzFileUploadService fileUploadService,IFormFile file, [FromQuery] string PageName = "FRONT")
         {
 
@@ -52,6 +54,7 @@
         /// <param name="PageName"> 韬唤璇佹鍙嶉潰 FRONT 姝i潰  Back  鍥藉窘鍙嶉潰 </param>
         /// <returns></returns>
         [HttpPost]
+        [AllowAnonymous]
         public async Task<Object> UpBizLicense([FromServices] IEzFileUploadService fileUploadService, IFormFile file)
         {
 
@@ -110,6 +113,7 @@
         /// <param name="fileUploadService"></param>
         /// <returns></returns>
         [HttpPost]
+        [AllowAnonymous]
         public async Task<string> UpdateFile([FromServices] IEzFileUploadService fileUploadService, IFormFile file)
         {
             return await fileUploadService.UploadFiles();
diff --git a/Admin.NET/FZCTB.NET.API.Application/Auth/AuthService.cs b/Admin.NET/FZCTB.NET.API.Application/Auth/AuthService.cs
index 4c6b98e..b651365 100644
--- a/Admin.NET/FZCTB.NET.API.Application/Auth/AuthService.cs
+++ b/Admin.NET/FZCTB.NET.API.Application/Auth/AuthService.cs
@@ -21,6 +21,11 @@
 using FZCZTB.NET.SYSService.CustomerSYS;
 using Furion;
 using NewLife;
+using cylsg.utility.Extend;
+using static QRCoder.PayloadGenerator;
+using FZCZTB.NET.MD.CutomerMd.Extend;
+using Furion.DependencyInjection;
+using Microsoft.Extensions.Options;
 
 namespace FZCTB.NET.API.Application.Auth
 {
@@ -32,8 +37,10 @@
     {
 
 
-        private readonly UserManager _userManager;
-        private readonly SqlSugarRepository<FBS_Customer> _sysUserRep;
+        private readonly SMSConfigOptions _smsOptions;
+        private readonly SqlSugarRepository<FBS_CustormerUsers> _sysUserRep;
+        private readonly SqlSugarRepository<FBS_CoutomerExRole> _sysUserExRol;
+        private readonly SqlSugarRepository<FBS_ExRole> _sysExRol;
         private readonly IHttpContextAccessor _httpContextAccessor;
         private readonly SysMenuService _sysMenuService;
         private readonly SysOnlineUserService _sysOnlineUserService;
@@ -46,7 +53,8 @@
         private readonly SysCacheService _sysCacheService;
 
         public AuthService(
-            SqlSugarRepository<FBS_Customer> sysUserRep,
+            SqlSugarRepository<FBS_CustormerUsers> sysUserRep,
+             SqlSugarRepository<FBS_CoutomerExRole> sysUserExRol,
             IHttpContextAccessor httpContextAccessor,
             SysOnlineUserService sysOnlineUserService,
             SysConfigService sysConfigService,
@@ -56,12 +64,16 @@
             SysCacheService sysCacheService,
             SysMenuService sysMenuService,
             SysUserService sysUserService,
-            UserManager userManager,
-            ICaptcha captcha)
+            IOptions<SMSConfigOptions> smsConfigOptions,
+            SqlSugarRepository<FBS_ExRole> exrel,
+         
+            ICaptcha captcha
+            
+            )
         {
             _captcha = captcha;
             _sysUserRep = sysUserRep;
-            _userManager = userManager;
+       
             _sysSmsService = sysSmsService;
             _eventPublisher = eventPublisher;
             _sysUserService = sysUserService;
@@ -71,6 +83,9 @@
             _httpContextAccessor = httpContextAccessor;
             _sysOnlineUserService = sysOnlineUserService;
             _sysLdapService = sysLdapService;
+            _smsOptions = smsConfigOptions.Value;
+            _sysExRol = exrel;
+            _sysUserExRol = sysUserExRol;
         }
 
         /// <summary>
@@ -82,24 +97,67 @@
         [DisplayName("鎵嬫満鍙风櫥褰�")]
         public virtual async Task<CustomerLoginOutput> LoginPhone([Required] CustomerLoginPhoneInput input)
         {
+            if(input.Id>0)
+            {
+                //鏈�鍚庝竴娆$‘璁ょ櫥闄嗙姸鎬�
+                var verifyCode = _sysCacheService.Get<string>($"{CacheConst.KeyPhoneVerCode}{input.Phone}");
+                if (string.IsNullOrWhiteSpace(verifyCode)) throw Oops.Oh("楠岃瘉鐮佷笉瀛樺湪鎴栧凡澶辨晥锛岃閲嶆柊鑾峰彇锛�");
+               
+                _sysCacheService.Remove($"{CacheConst.KeyPhoneVerCode}{input.Phone}");
+                if (verifyCode != input.Code)
+                    throw Oops.Oh("鐧诲綍鐮佸け鏁�");
+                    var user = await _sysUserRep.AsQueryable().Where(x => x.Id == input.Id && x.IsEn == true).FirstAsync();
+                if(user == null)
+                    throw Oops.Oh("娌℃湁鎵惧埌璇ユ墜鏈虹敤鎴�");
+                return await CreateToken(user, input.ExRuleCode ?? "");
+            }
             if(input.Code!="TEST")
             // 鏍¢獙鐭俊楠岃瘉鐮�
             _sysSmsService.VerifyCode(new SmsVerifyCodeInput { Phone = input.Phone, Code = input.Code });
 
             // 鑾峰彇鐧诲綍绉熸埛鍜岀敤鎴�
             // 鑾峰彇鐧诲綍绉熸埛鍜岀敤鎴�
-            var user = await _sysUserRep.AsQueryable().Where(x => x.Account == input.Phone).Includes(x => x.CoutomerExRols, y => y.ExRole).FirstAsync();
-            if (user == null)
+            var userList = await _sysUserRep.AsQueryable().Where(x => x.PhoneNumber == input.Phone&&x.IsEn==true).Includes(x=>x.CusExtend).ToListAsync();
+            if (userList == null)
             {
-              throw    Oops.Oh("璇ョ敤鎴锋病鏈夋敞鍐�");
+              throw    Oops.Oh("娌℃湁鎵惧埌璇ユ墜鏈虹敤鎴�");
             }
-           if(user.Status== StatusEnum.Disable)
+            if(userList.Count>1)
             {
-                throw Oops.Oh("鐢ㄥ紓甯�");
-            }
+                // 鐢熸垚闅忔満楠岃瘉鐮�
+                var random = new Random();
+                var verifyCode = random.Next(100000, 999999);
+                //闇�瑕佷簩娆$櫥闄�
+                var aRet = new CustomerLoginOutput
+                {
+                    TheLastLogo = false,
+                    CustomerExs = new List<CustomerExVm>(),
+                    Code = verifyCode.ToString(),
+
+                  
+
+                };
+                _sysCacheService.Set($"{CacheConst.KeyPhoneVerCode}{input.Phone}", verifyCode.ToString(), TimeSpan.FromSeconds(_smsOptions.lingKai.VerifyTimeOut.ToInt()));
+                foreach (var item in userList)
+                {
+                    aRet.CustomerExs.Add(new CustomerExVm
+                    {
+                        CustomerUserID = item.Id,
+                        EnterpriseName = item.CusExtend.EnterpriseName,
+                        UnifiedSocialCreditCode = item.CusExtend.UnifiedSocialCreditCode.MaskMiddle(),
+                        IsManger = item.IsManager
 
 
-            return await CreateToken(user, input.ExRuleCode??"");
+                    });
+                }
+               return aRet;
+
+            }
+
+          
+
+
+            return await CreateToken(userList[0], input.ExRuleCode??"");
         }
 
         /// <summary>
@@ -114,19 +172,24 @@
                 throw Oops.Oh("鐢ㄦ埛鍑瘉閿欒");
 
             }
-            //
-      
+            var rols = await _sysExRol.GetFirstAsync(x => x.Code == RuleCode && x.Status == StatusEnum.Enable);
+            if(rols==null)
+                throw Oops.Oh("瑙掕壊宸茬粡涓嬬嚎");
+
             // 鑾峰彇鐧诲綍绉熸埛鍜岀敤鎴�
             // 鑾峰彇鐧诲綍绉熸埛鍜岀敤鎴�
-            var user = await _sysUserRep.AsQueryable().Where(x => x.Id == id).Includes(x => x.CoutomerExRols, y => y.ExRole).FirstAsync();
+            var user = await _sysUserRep.AsQueryable().Where(x => x.Id == id).FirstAsync();
             if (user == null)
             {
                 throw Oops.Oh("璇ョ敤鎴锋病鏈夋敞鍐�");
             }
-            if (user.Status == StatusEnum.Disable)
+            if (user.IsEn == false)
             {
                 throw Oops.Oh("鐢ㄥ紓甯�");
             }
+          var exr=  await  _sysUserExRol.GetFirstAsync(x=>x.CusExtendId==user.CusExtendId&&x.ExRoleId== rols.Id);
+            if (exr==null)
+                throw Oops.Oh("娌℃湁鐢宠璇ヨ鑹�");
 
             return await CreateToken(user, RuleCode);
 
@@ -141,18 +204,18 @@
         [DisplayName("寰俊鎵爜鐧诲綍")]
         public virtual async Task<CustomerLoginOutput> WeiXinLoginPhone([Required] CustomerLoginPhoneInput input)
         {
-            throw Oops.Oh("鍜嬩笉鏀寔寰俊鎵爜鐧诲綍");
+            throw Oops.Oh("鏆傛椂涓嶆敮鎸佸井淇℃壂鐮佺櫥褰�");
             // 鏍¢獙鐭俊楠岃瘉鐮�
-            _sysSmsService.VerifyCode(new SmsVerifyCodeInput { Phone = input.Phone, Code = input.Code });
+            //_sysSmsService.VerifyCode(new SmsVerifyCodeInput { Phone = input.Phone, Code = input.Code });
 
-            // 鑾峰彇鐧诲綍绉熸埛鍜岀敤鎴�
-            var user = await _sysUserRep.AsQueryable().Where(x=>x.Account==input.Phone).Includes(x => x.CoutomerExRols, y => y.ExRole).FirstAsync();
-            if(user==null)
-            {
+            //// 鑾峰彇鐧诲綍绉熸埛鍜岀敤鎴�
+            //var user = await _sysUserRep.AsQueryable().Where(x=>x.Account==input.Phone).Includes(x => x.CoutomerExRols, y => y.ExRole).FirstAsync();
+            //if(user==null)
+            //{
                 
-            }
+            //}
 
-            return await CreateToken(user, input.ExRuleCode );
+            //return await CreateToken(user, input.ExRuleCode );
         }
 
         /// <summary>
@@ -162,7 +225,7 @@
         /// <param name="sysUserEventTypeEnum"></param>\
         /// <returns></returns>
         [NonAction]
-        internal  async Task<CustomerLoginOutput> CreateToken(FBS_Customer user,string ExRuleCode, SysUserEventTypeEnum sysUserEventTypeEnum = SysUserEventTypeEnum.Login)
+        internal  async Task<CustomerLoginOutput> CreateToken(FBS_CustormerUsers user,string ExRuleCode, SysUserEventTypeEnum sysUserEventTypeEnum = SysUserEventTypeEnum.Login)
         {
             // 鍗曠敤鎴风櫥褰�
             await _sysOnlineUserService.SingleLogin(user.Id);
@@ -172,11 +235,12 @@
             var accessToken = JWTEncryption.Encrypt(new Dictionary<string, object>
         {
             { ClaimConst.UserId, user.Id },
-            { ClaimConst.TenantId, user.TenantId },
-            { ClaimConst.Account, user.Account },
-            { ClaimConst.RealName, user.RealName },        
+            { ClaimConst.TenantId, user.CusExtendId },
+            { ClaimConst.Account, user.PhoneNumber.PrivacyStr() },
+            { ClaimConst.RealName, user.Nickname??user.Name },        
          
             { ClaimConst.UserType, "Customer" },
+              { ClaimConst.CustomerExId, user.CusExtendId },
                 { ClaimConst.CustomerLogoinType, ExRuleCode },
         }, tokenExpire);
 
@@ -210,6 +274,8 @@
                 {
                     AccessToken = accessToken,
                     RefreshToken = refreshToken,
+                     TheLastLogo=true,
+                      
 
                      
                      
@@ -217,20 +283,20 @@
 
 
                 }
+ 
+               
             };
             payload.Output.ExRoles = new List<CustomerExRoleVm>();
 
-            foreach (var item in user.CoutomerExRols)
+
+            payload.Output.ExRoles = await _sysUserExRol.AsQueryable().Where(x => x.CusExtendId == user.CusExtendId).Includes(x => x.ExRole).Select(x => new CustomerExRoleVm
             {
+                Code = x.ExRole.Code,
+                HasFlsh = x.steps == CusExtendStep.Pass,
+                Name = x.ExRole.Name
+            }).ToListAsync();
 
-                payload.Output.ExRoles.Add(new CustomerExRoleVm
-                {
-                    Code = item.ExRole.Code,
-                    Name = item.ExRole.Name,
-                    HasFlsh = item.HasFlsh
-                });
-            }
-
+           
             //鏆傛椂涓嶅嚭鐢ㄦ埛浜嬩欢
             // 鍙戝竷绯荤粺鐢ㄦ埛鎿嶄綔浜嬩欢
             //await _eventPublisher.PublishAsync(sysUserEventTypeEnum, payload);
diff --git a/Admin.NET/FZCTB.NET.API.Application/Auth/DTO/CustomerLoginOutput.cs b/Admin.NET/FZCTB.NET.API.Application/Auth/DTO/CustomerLoginOutput.cs
index 1e2d66b..e120cf2 100644
--- a/Admin.NET/FZCTB.NET.API.Application/Auth/DTO/CustomerLoginOutput.cs
+++ b/Admin.NET/FZCTB.NET.API.Application/Auth/DTO/CustomerLoginOutput.cs
@@ -18,6 +18,10 @@
 public class CustomerLoginOutput
 {
     /// <summary>
+    /// 
+    /// </summary>
+    public bool TheLastLogo { get; set; }
+    /// <summary>
     /// 浠ょ墝Token
     /// </summary>
     public string AccessToken { get; set; }
@@ -31,6 +35,15 @@
     /// 鐢ㄦ埛瑙掕壊鍗冲畬鎴愭儏鍐�
     /// </summary>
     public List<CustomerExRoleVm>? ExRoles {  get; set; }
+
+    /// <summary>
+    /// 鍏宠仈浼佷笟鏈烘瀯
+    /// </summary>
+    public List<CustomerExVm>? CustomerExs {  get; set; }
+    /// <summary>
+    /// 涓存椂楠岃瘉鐮�
+    /// </summary>
+    public string? Code { get; set; }
 }
 
 /// <summary>
@@ -57,9 +70,14 @@
     /// </summary>
     public bool HasFlsh { get; set; } = false;
 
+    
+
 
 
 }
+
+
+
 
 public class CustomerLoginPhoneInput
 {
@@ -85,5 +103,42 @@
     /// </summary>
     public string? ExRuleCode { get; set; }
 
+    
+    /// <summary>
+    /// 绗簩娆$櫥闄嗙殑Id
+    /// </summary>
+    public long? Id {  get; set; }
+
 
 }
+
+/// <summary>
+/// 浼佷笟鏈烘瀯鍒楄〃
+/// </summary>
+public class CustomerExVm
+{
+    /// <summary>
+    /// 纭鐢ㄦ埛ID
+    /// </summary>
+    public long  CustomerUserID { get; set; }
+   
+    /// <summary>
+    /// 浼佷笟鍚嶇О
+    /// </summary>
+    [Required(ErrorMessage = "浼佷笟鍚嶇О涓哄繀濉」")]
+    [SugarColumn(ColumnDescription = "浼佷笟鍚嶇О")]
+    public string EnterpriseName { get; set; }
+
+    /// <summary>
+    /// 缁熶竴绀句細淇$敤浠g爜
+    /// </summary>
+    [Required(ErrorMessage = "缁熶竴绀句細淇$敤浠g爜涓哄繀濉」")]
+    [SugarColumn(ColumnDescription = "缁熶竴绀句細淇$敤浠g爜")]
+    public string UnifiedSocialCreditCode { get; set; }
+
+    /// <summary>
+    /// 鏄惁鏄鐞�
+    /// </summary>
+    public bool  IsManger { get; set; }
+
+}
\ No newline at end of file
diff --git a/Admin.NET/FZCTB.NET.API.Application/FZCTB.NET.API.Application.csproj b/Admin.NET/FZCTB.NET.API.Application/FZCTB.NET.API.Application.csproj
index c176c65..201f597 100644
--- a/Admin.NET/FZCTB.NET.API.Application/FZCTB.NET.API.Application.csproj
+++ b/Admin.NET/FZCTB.NET.API.Application/FZCTB.NET.API.Application.csproj
@@ -11,6 +11,7 @@
     <ProjectReference Include="..\Admin.NET.Application\Admin.NET.Application.csproj" />
     <ProjectReference Include="..\Admin.NET.Core\Admin.NET.Core.csproj" />
     <ProjectReference Include="..\EzUpFile\EzUpFile.csproj" />
+    <ProjectReference Include="..\FZCZTB.Net.CustomerSYSTem\FZCZTB.Net.CustomerSYSTem.csproj" />
     <ProjectReference Include="..\FZCZTB.NET.MD\FZCZTB.NET.MD.csproj" />
     <ProjectReference Include="..\FZCZTB.NET.SYSService\FZCZTB.NET.SYSService.csproj" />
   </ItemGroup>
diff --git a/Admin.NET/FZCTB.NET.API.Application/User/CustomerService.cs b/Admin.NET/FZCTB.NET.API.Application/User/CustomerService.cs
index 9635626..d641f88 100644
--- a/Admin.NET/FZCTB.NET.API.Application/User/CustomerService.cs
+++ b/Admin.NET/FZCTB.NET.API.Application/User/CustomerService.cs
@@ -6,15 +6,21 @@
 
 using Admin.NET.Core;
 using Admin.NET.Core.Service;
+using Aop.Api.Domain;
 using Dm.util;
 using Furion;
+using Furion.DependencyInjection;
 using Furion.DynamicApiController;
 using Furion.FriendlyException;
+using FZCTB.NET.API.Application.Auth;
+using FZCTB.NET.API.Application.Auth.DTO;
 using FZCTB.NET.API.Application.User.DTO;
+using FZCZTB.Net.CustomerSYSTem;
 using FZCZTB.NET.MD.ConfigMd;
 using FZCZTB.NET.MD.CutomerMd;
 using FZCZTB.NET.MD.CutomerMd.Extend;
 using FZCZTB.NET.SYSService.CustomerSYS;
+using Lazy.Captcha.Core.Generator.Image.Gif;
 using Mapster;
 using MapsterMapper;
 using Microsoft.AspNetCore.Authorization;
@@ -34,7 +40,7 @@
 /// 瀹㈡埛鎺у埗
 /// </summary>
 [ApiDescriptionSettings("FZCAPISYS", Order = 149)]
-public class CustomerService: IDynamicApiController
+public class CustomerService: IDynamicApiController,IScoped
 {
   private  readonly CustomerManagerS _customerManager;
 
@@ -43,6 +49,8 @@
     private readonly SqlSugarRepository<FBS_CoutomerExRole> _fBS_CustomerExRoleRep;
     private readonly SqlSugarRepository<FBS_EnterpriseType> _fBS_EnterpriseTypeRep;
     private readonly SqlSugarRepository<FBS_Customer> _fBS_CustomerRep;
+    private readonly SqlSugarRepository<FBS_CustormerUsers> _fBS_CustormerUsersRep;
+   
     /// <summary>
     /// 鐢ㄦ埛鎵╁睍
     /// </summary>
@@ -53,9 +61,12 @@
     /// 
     /// </summary>
     public CustomerService(SysCacheService cacheService, CustomerManagerS managerS,SqlSugarRepository<FBS_Customer>  repository
-        , SqlSugarRepository<FBS_EnterpriseType> fbsenrep,IMapper mapper,SqlSugarRepository<FBS_ExRole> exroles ,
+        , SqlSugarRepository<FBS_EnterpriseType> fbsenrep,IMapper mapper,
+        SqlSugarRepository<FBS_ExRole> exroles ,
         SqlSugarRepository<FBS_CusExtend> cusrep,
-        SqlSugarRepository<FBS_CoutomerExRole> cexrrep)
+        SqlSugarRepository<FBS_CoutomerExRole> cexrrep
+        , SqlSugarRepository<FBS_CustormerUsers> cusUser
+       )
     {
         _sysCacheService= cacheService;
          _customerManager = managerS;
@@ -65,6 +76,8 @@
         _fBS_CusExtendRep = cusrep;
         _mapper = mapper;
         _fBS_CustomerExRoleRep = cexrrep;
+        _fBS_CustormerUsersRep = cusUser;
+      
     }
 
     /// <summary>
@@ -73,7 +86,7 @@
     /// <returns></returns>
     [AllowAnonymous]
     [HttpPost]
-    public async Task<bool>  CustomerRegistration(CustomerRDto param )
+    public async Task<string>  CustomerRegistration(FBS_CusExtendVm param )
     {
         //_customerManager.
         var ExRole= (await _customerManager.GetExRole()).Where(x => x.Code == param.ExRoleCode).FirstOrDefault();
@@ -83,68 +96,98 @@
             throw Oops.Oh("璇烽�夋嫨涓�涓湁鏁堢殑瑙掕壊杩涜娉ㄥ唽");
         }
 
-        //宸查�夎鑹诧紝璇烽�夋嫨涓�涓敞鍐岃鑹�    
-       var data= await _fBS_CustomerRep.AsQueryable().Includes(X => X.CoutomerExRols,y=>y.ExRole).Where(x => x.Account == param.Account).FirstAsync();
-        if (data != null)
-        {
-            if (data.CoutomerExRols.Any(x => x.ExRole.Code == param.ExRoleCode))
-            {
-                throw Oops.Oh("宸茬粡娉ㄥ唽浜嗚瑙掕壊璇峰嬁閲嶅娉ㄥ唽");
-            }
+       // //宸查�夎鑹诧紝璇烽�夋嫨涓�涓敞鍐岃鑹�    
+       //var data= await _fBS_CustomerRep.AsQueryable().Includes(X => X.CoutomerExRols,y=>y.ExRole).Where(x => x.Account == param.Account).FirstAsync();
+       // if (data != null)
+       // {
+       //     if (data.CoutomerExRols.Any(x => x.ExRole.Code == param.ExRoleCode))
+       //     {
+       //         throw Oops.Oh("宸茬粡娉ㄥ唽浜嗚瑙掕壊璇峰嬁閲嶅娉ㄥ唽");
+       //     }
 
-            else
-            {
-                throw Oops.Oh("璇ョ敤鎴峰悕閲嶅锛屽鏋滈渶瑕佸璇ョ敤鎴锋坊鍔犵浉搴旇鑹诧紝璇风櫥褰曚换鎰忚鑹插悗娣诲姞");
-            }
+       //     else
+       //     {
+       //         throw Oops.Oh("璇ョ敤鎴峰悕閲嶅锛屽鏋滈渶瑕佸璇ョ敤鎴锋坊鍔犵浉搴旇鑹诧紝璇风櫥褰曚换鎰忚鑹插悗娣诲姞");
+       //     }
 
-        }
-       var vcode= _sysCacheService.Get<string>($"{CacheConst.KeyPhoneVerCode}{param.Phone}");
+       // }
+
+
+       var vcode= _sysCacheService.Get<string>($"{CacheConst.KeyPhoneVerCode}{param.OperatorPhone}");
          if(param.PhoneVCode!="TEST")
         if(vcode!=param.PhoneVCode)
         {
             //鎵嬫満楠岃瘉鐮侀敊璇�
             throw Oops.Oh("鎵嬫満楠岃瘉鐮侀敊璇紝璇疯緭鍏ユ纭殑鎵嬫満楠岃瘉鐮�");
         }
+
+
         //浣跨敤鍚庣珛鍗冲垹闄�
-        _sysCacheService.Remove($"{CacheConst.KeyPhoneVerCode}{param.Phone}");
-        var dd = param.Adapt<FBS_Customer>();
-        dd.RealName = dd.NickName;
-       
-        dd.Account = dd.Phone;
-        dd.Password = "";
-        dd.TenantId = 1300000000001;
+        _sysCacheService.Remove($"{CacheConst.KeyPhoneVerCode}{param.OperatorPhone}");
+
+
+        var cusex = await _fBS_CusExtendRep.GetFirstAsync(x => x.UnifiedSocialCreditCode == param.UnifiedSocialCreditCode);
+        if(cusex!=null)
+        {
+            throw Oops.Oh("璇ヤ紒涓氬凡缁忔敞鍐�");
+        }
+        var dd = param.Adapt<FBS_CusExtend>();
+
+        dd.TransactionCode = param.ExRoleCode;
+      
         dd.CreateTime = DateTime.Now;
         dd.CreateUserId = 0;
-        dd.CreateUserName = dd.NickName;
-        if(dd.CoutomerExRols==null)
+        dd.CreateUserName = "鐢ㄦ埛娉ㄥ唽";
+       await  _fBS_CusExtendRep.AsTenant().BeginTranAsync();
+        try
         {
-            new List<FBS_CoutomerExRole>()
-        {
-            new FBS_CoutomerExRole
+             dd = await _fBS_CusExtendRep.InsertReturnEntityAsync(dd);
+
+            FBS_CoutomerExRole rulse = new FBS_CoutomerExRole
             {
-                 ExRoleId= ExRole?.Id??0
+                CusExtendId = dd.Id,
+                ExRoleId = ExRole.Id ?? 0,
+                steps = CusExtendStep.UNExamine
 
 
-            }
+            };
+            await _fBS_CustomerExRoleRep.InsertAsync(rulse);
+
+            FBS_CustormerUsers user = new FBS_CustormerUsers
+            {
+                CusExtendId = dd.Id,
+                PhoneNumber = dd.OperatorPhone,
+                IsEn = true,
+                IsManager = true,
+                JobTitle = param.JobTitle,
+                Name = dd.OperatorName,
+                Nickname = param.Nickname,
+                CreateTime = dd.CreateTime,
+                CreateUserId = 0,
+                CreateUserName = "鐢ㄦ埛娉ㄥ唽",
+
+            };
+            await _fBS_CustormerUsersRep.InsertAsync(user);
+
+            await  _fBS_CusExtendRep.AsTenant().CommitTranAsync();
+            
+            return "娉ㄥ唽鎴愬姛";
+        }
+        catch (Exception)
+        {
+            await _fBS_CusExtendRep.AsTenant().RollbackTranAsync();
+            throw;
         };
-        }
-        else
-        {
-            dd.CoutomerExRols.add(new FBS_CoutomerExRole
-            {
-                ExRoleId = ExRole?.Id ?? 0
-            });
-        }
     
             
             
          
 
-      await   _fBS_CustomerRep.AsSugarClient().InsertNav(dd).Include(x=>x.CoutomerExRols).ExecuteCommandAsync();
+     
 
 
 
-        return true;
+       
     }
     /// <summary>
     /// 娉ㄥ唽鐧诲綍鍙�夎鑹�
@@ -169,8 +212,8 @@
     /// 娉ㄥ唽瑙掕壊鐢ㄦ埛璧勬枡
     /// </summary>
     /// <returns></returns>
-    [HttpPost]
-    public async Task<bool> CreaterExRolsInformation(CusExtendDto cusExtend )
+    [HttpGet]
+    public async Task<bool> CreaterExRolsInformation(string RuleCode)
     {
 
         var id = App.User.FindFirst(ClaimConst.UserId)?.Value.ToLong() ?? 0;
@@ -184,16 +227,16 @@
         {
             throw Oops.Oh("鐢ㄦ埛涓嶅瓨鍦�");
         }
-  
-       var rols= await  _fBS_ExRoleRep.GetFirstAsync(x => x.Code == cusExtend.TransactionCode && x.Status == StatusEnum.Enable);
+        var data = await _fBS_ExRoleRep.AsQueryable().ToListAsync();
+       var rols= await  _fBS_ExRoleRep.GetFirstAsync(x => x.Code == RuleCode && x.Status == StatusEnum.Enable);
         if(rols==null)
         {
             throw Oops.Oh("浜ゆ槗涓讳綋涓嶅瓨鍦�");
         }
-        var ExRoles = await _fBS_CustomerExRoleRep.GetListAsync(x => x.CustomerId == id);
+        var ExRoles = await _fBS_CustomerExRoleRep.GetListAsync(x => x.CusExtendId == user.CusExtendId);
         if (ExRoles != null)
         {
-            if (ExRoles?.Any(x => x.ExRoleId == rols.Id && x.HasFlsh == true) == true)
+            if (ExRoles?.Any(x => x.ExRoleId == rols.Id ) == true)
             {
                 throw Oops.Oh("鐢ㄦ埛宸茬粡娉ㄥ唽浜嗚涓讳綋");
             }
@@ -204,33 +247,14 @@
         await _fBS_CustomerExRoleRep.InsertAsync(new FBS_CoutomerExRole
         {
             ExRoleId = rols.Id,
-            CustomerId = id
+            CusExtendId = user.CusExtendId,
+            steps= CusExtendStep.UNExamine,
         });
 
 
-        var usdata = await _fBS_CusExtendRep.GetFirstAsync(x => x.CustomerId == id&&x.TransactionCode==cusExtend.TransactionCode);
-       
-        if (usdata!=null)
-        {
-            if (usdata.steps == CusExtendStep.Pass)
-            {
-                throw Oops.Oh("鐢ㄦ埛宸茬粡娉ㄥ唽浜嗚涓讳綋");
 
-            }
-            throw Oops.Oh("鐢ㄦ埛宸茬粡鐢宠浜嗚瑙掕壊锛岃璧颁慨鏀规祦绋�");
-        }
-       
-        var data= cusExtend.Adapt<FBS_CusExtend>();
 
-        data.steps = CusExtendStep.UNExamine;
-        data.CustomerId = id;
-        data.CreateTime = DateTime.Now;
-        
-        data.CreateUserName = user.NickName;
-        data.TransactionCode = rols.Code;
-
-        
-      return   await _fBS_CusExtendRep.InsertAsync(data);
+        return true;
 
 
 
@@ -265,12 +289,12 @@
         {
             throw Oops.Oh("鐧诲綍浜ゆ槗涓讳綋鏃犳晥");
         }
-       var tab= (await _fBS_CusExtendRep.GetFirstAsync(x => x.CustomerId == id && x.TransactionCode == typeCode)).Adapt<CusExtendDto>();
-        if(tab==null)
+
+     
+        return await _fBS_CusExtendRep.AsQueryable().Where(x => x.Id == user.CusExtendId).Includes(x => x.ExRoles, y => y.ExRole).Select(x => new CusExtendDto
         {
-            throw Oops.Oh("娌℃湁瀹屾垚淇℃伅褰曞叆");
-        }
-        return tab;
+            ExRoles = x.ExRoles.Adapt<List<FBS_CoutomerExRoleOutput>>()
+        }, true).FirstAsync();
         
        
     }
@@ -304,18 +328,14 @@
         {
             throw Oops.Oh("鐧诲綍浜ゆ槗涓讳綋鏃犳晥");
         }
-        var tab = await _fBS_CusExtendRep.GetFirstAsync(x => x.CustomerId == id && x.TransactionCode == typeCode);
+        var tab = await _fBS_CusExtendRep.GetFirstAsync(x => x.Id == user.CusExtendId );
         if (tab == null)
         {
             throw Oops.Oh("娌℃湁瀹屾垚淇℃伅褰曞叆");
         }
 
         bool  isChangeData = false;
-        if (tab.steps== CusExtendStep.Change)
-        {
-            isChangeData = true;
-        }
-
+     
 
 
         //娉曚汉
@@ -326,7 +346,7 @@
             tab.LegalRepresentativeName = InParam.LegalRepresentativeName;
             tab.LegalRepresentativePhone = InParam.LegalRepresentativePhone;
             //閲嶆柊瀹℃牳?
-            tab.steps = CusExtendStep.Change;
+            isChangeData=true;
         }
 
 
@@ -341,12 +361,12 @@
             tab.EnterpriseName = InParam.EnterpriseName;
             tab.BusinessLicense = InParam.BusinessLicense;
             //閲嶆柊瀹℃牳?
-            tab.steps = CusExtendStep.Change;
+            isChangeData = true;
         }
         if (tab.EnterpriseType != InParam.EnterpriseType)
         {
             tab.EnterpriseType = InParam.EnterpriseType;
-            tab.steps = CusExtendStep.Change;
+          
         }
 
         //鑱旂郴鐢佃瘽
@@ -355,15 +375,15 @@
 
         if (tab.BankAccount != InParam.BankAccount)
         {
-            //鑱旂郴鐢佃瘽
+           
             tab.BankAccount = InParam.BankAccount;
-            tab.steps = CusExtendStep.Change;
+            isChangeData = true;
 
         }
         if (tab.BankName != InParam.BankName)
         {
             tab.BankName = InParam.BankName;
-            tab.steps = CusExtendStep.Change;
+            isChangeData = true;
         }
         //閾惰鏄惁闇�瑕佷慨鏀�
         //tab.BankAccount = InParam.BankAccount;
@@ -377,40 +397,27 @@
             tab.OperatorIdNumber = InParam.OperatorIdNumber;
             tab.OperatorName = InParam.OperatorName;
             tab.OperatorPhone = InParam.OperatorPhone;
+            isChangeData = true;
         }
 
 
       await   _fBS_CusExtendRep.AsTenant().BeginTranAsync();
         try
         {
-            if((!isChangeData)&&tab.steps== CusExtendStep.Change)
+            if(!isChangeData)
             {
-                //鏄洿鏀癸紝闇�瑕佸伐鏀筩er鐨勫��
-             var exrolerep=     await   _fBS_CustomerExRoleRep.GetFirstAsync(x=>x.ExRoleId== rols.Id&&x.CustomerId==tab.CustomerId);
-                if(exrolerep!=null)
+                //鏄洿鏀癸紝闇�瑕佹洿璇ユ墍鏈塺oles鐨勫��
+             var exrolerep=     await   _fBS_CustomerExRoleRep.GetListAsync(x=>x.CusExtendId==user.CusExtendId);
+                foreach (var item in exrolerep)
                 {
-                    if (exrolerep.HasFlsh != false)
-                    {
-                        exrolerep.HasFlsh = false;
-                       
-                        //鏀瑰彉鐘舵��
-                        await _fBS_CustomerExRoleRep.UpdateAsync(exrolerep);
-                    };
-
-
+                    
+                        item.steps = CusExtendStep.Change;
+                        
+                    
                 }
-                else
-                {
-                    await _fBS_CustomerExRoleRep.InsertAsync(new FBS_CoutomerExRole
-                    {
-                        CustomerId = tab.CustomerId,
-                        ExRoleId = rols.Id,
-                        HasFlsh = false
-
-                    });
-                }
-               
+               await _fBS_CustomerExRoleRep.UpdateRangeAsync(exrolerep);
             }
+
             await _fBS_CusExtendRep.UpdateAsync(tab);
             await  _fBS_CusExtendRep.AsTenant().CommitTranAsync();
 
@@ -426,6 +433,215 @@
     }
 
 
+    /// <summary>
+    /// 鑾峰彇璐︽埛鍒楄〃
+    /// </summary>
+    /// <returns></returns>
+    [HttpGet]
+    public async Task<List<FBS_CustormerUsersOutput> > GetCustormerUsersList()
+    {
+        var id = App.User.FindFirst(ClaimConst.CustomerExId)?.Value.ToLong() ?? 0;
+        if (id == 0)
+        {
+            throw Oops.Oh("鐢ㄦ埛鍑瘉閿欒");
+
+        }
+        if (!await isManger())
+            throw Oops.Oh("鐢ㄦ埛娌℃湁鏉冮檺");
+         return (await  _fBS_CustormerUsersRep.GetListAsync(x => x.CusExtendId == id&&x.IsEn==true)).Adapt<List<FBS_CustormerUsersOutput>>();
+    }
+    public FBS_CustormerUsers? ThisUser { get; set; }
+    /// <summary>
+    ///  鏂板缓鍛樺伐鏁版嵁
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost]
+    public async Task<bool> CreatCustormerUsers(FBS_CustormerUsersVM param)
+    {
+        if (!await isManger())
+            throw Oops.Oh("鐢ㄦ埛娌℃湁鏉冮檺");
+        var cid = App.User.FindFirst(ClaimConst.CustomerExId)?.Value.ToLong() ?? 0;
+        if (cid == 0)
+        {
+            throw Oops.Oh("鐢ㄦ埛鍑瘉閿欒");
+
+        }
+     var count =  await  _fBS_CustormerUsersRep.CountAsync(x=>x.CusExtendId== cid);
+        if(count>10)
+        {
+            throw Oops.Oh("鍚屼竴缁勭粐鏈烘瀯鏈�澶氬彲浠ュ缓绔�10涓敤鎴�");
+        }
+
+ var User  = await _fBS_CustormerUsersRep.GetFirstAsync(x => x.CusExtendId == cid && x.PhoneNumber == param.PhoneNumber);
+        if(User!=null)
+        {
+            throw Oops.Oh("鍚屼竴瀹跺叕鍙歌处鎴蜂笉鑳藉悓鏃跺嚭鐜扮浉鍚岀殑鐢佃瘽鍙风爜");
+        }
+ 
+        User =  param.Adapt<FBS_CustormerUsers>();
+        User.CusExtendId = cid;
+        User.IsManager = false;
+        User.CreateTime = DateTime.Now;
+        User.CreateUserName ="浼佷笟鐢ㄦ埛:"+ ThisUser?.Name;
+        User.CreateUserId = ThisUser?.Id;
+        return await _fBS_CustormerUsersRep.InsertAsync(User);
+        
 
 
+       
+    }
+    /// <summary>
+    /// 鏇存敼绠$悊鍛�
+    /// </summary>
+    /// <param name="CustormerUserId"> UserList 鐨処D</param>
+    /// <returns></returns>
+    [HttpGet]
+    public async Task<bool> ChangeManager(long   CustormerUserId )
+    {
+        if (!await isManger())
+            throw Oops.Oh("鐢ㄦ埛娌℃湁鏉冮檺");
+        var cid = App.User.FindFirst(ClaimConst.CustomerExId)?.Value.ToLong() ?? 0;
+        if (cid == 0)
+        {
+            throw Oops.Oh("鐢ㄦ埛鍑瘉閿欒");
+
+        }
+        var uid = App.User.FindFirst(ClaimConst.UserId)?.Value.ToLong() ?? 0;
+        if (uid == 0)
+        {
+            throw Oops.Oh("鐢ㄦ埛鍑瘉閿欒");
+
+        }
+        if(CustormerUserId== uid)
+            return true;
+        if (ThisUser==null)
+        {
+          
+            ThisUser = await _fBS_CustormerUsersRep.GetFirstAsync(x => x.Id == uid && x.CusExtendId == cid && x.IsEn == true);
+          
+        }
+        var User = await _fBS_CustormerUsersRep.GetFirstAsync(x =>x.CusExtendId==ThisUser.CusExtendId &&x.Id== CustormerUserId);
+        if (User != null)
+        {
+            throw Oops.Oh("鐢ㄦ埛涓嶅瓨鍦�");
+        }
+        if(User.IsEn==false)
+            throw Oops.Oh("鏃犳晥鐢ㄦ埛涓嶅彲璁剧疆涓虹鐞嗗憳");
+
+        User.IsManager = true;
+        User.UpdateTime = DateTime.Now;
+        User.UpdateUserName= "浼佷笟鐢ㄦ埛:" + ThisUser?.Name;
+        User.UpdateUserId = ThisUser.Id;
+
+        //ThisUser.IsManager = false;
+        //ThisUser.UpdateTime = DateTime.Now;
+        //ThisUser.UpdateUserName = "浼佷笟鐢ㄦ埛:" + ThisUser?.Name;  //涓嶄簰鏂�
+        //ThisUser.UpdateUserId = ThisUser.Id;
+      await  _fBS_CustormerUsersRep.AsTenant().BeginTranAsync();
+        try
+        {
+            await _fBS_CustormerUsersRep.UpdateAsync(User);
+            //await _fBS_CustormerUsersRep.UpdateAsync(ThisUser); //涓嶄簰鏂�
+            await _fBS_CustormerUsersRep.AsTenant().CommitTranAsync();
+            return false;
+            
+        }
+        catch (Exception)
+        {
+            await _fBS_CustormerUsersRep.AsTenant().RollbackTranAsync();
+            throw;
+        }
+
+       
+    }
+
+    /// <summary>
+    /// 鏇存敼鍛樺伐淇℃伅
+    /// </summary>
+    /// <param name="CustormerUserId"> UserList 鐨処D</param>
+    /// <returns></returns>
+    [HttpPost]
+    public async Task<bool> UpdataCustormerUsers( FBS_CustormerUsersVM Param)
+    {
+        if (!await isManger())
+            throw Oops.Oh("鐢ㄦ埛娌℃湁鏉冮檺");
+        var cid = App.User.FindFirst(ClaimConst.CustomerExId)?.Value.ToLong() ?? 0;
+        if (cid == 0)
+        {
+            throw Oops.Oh("鐢ㄦ埛鍑瘉閿欒");
+
+        }
+        var uid = App.User.FindFirst(ClaimConst.UserId)?.Value.ToLong() ?? 0;
+        if (uid == 0)
+        {
+            throw Oops.Oh("鐢ㄦ埛鍑瘉閿欒");
+
+        }
+        if(Param.Id==null)
+        {
+            throw Oops.Oh("Id閿欒");
+        }
+        if(Param.CusExtendId!=Param.Id)
+        {
+            throw Oops.Oh("缁勭粐鏈烘瀯涓嶅悓涓嶅彲淇敼");
+        }
+    
+        var User = await _fBS_CustormerUsersRep.GetFirstAsync(x => x.CusExtendId == Param.CusExtendId && x.Id == Param.Id);
+        if (User != null)
+        {
+            throw Oops.Oh("鐢ㄦ埛涓嶅瓨鍦�");
+        }
+        User =  _mapper.Map(Param, User);
+
+        User.CreateTime = DateTime.Now;
+        User.CreateUserName = "浼佷笟鐢ㄦ埛:" + ThisUser?.Name;
+        User.CreateUserId = ThisUser?.Id;
+
+     return   await _fBS_CustormerUsersRep.UpdateAsync(User);
+
+
+
+    }
+    /// <summary>
+    /// 鏉冮檺楠岃瘉鏄惁鏄鐞嗗憳
+    /// </summary>
+    /// <returns></returns>
+    [NonAction]
+    public  async Task< bool> isManger()
+    {
+
+        if (ThisUser != null)
+            return ThisUser.IsManager;
+        //鐢ㄦ埛ID
+
+        var id = App.User.FindFirst(ClaimConst.UserId)?.Value.ToLong() ?? 0;
+        if (id == 0)
+        {
+            throw Oops.Oh("鐢ㄦ埛鍑瘉閿欒");
+
+        }
+        //浼佷笟ID
+        var CExid = App.User.FindFirst(ClaimConst.CustomerExId)?.Value.ToLong() ?? 0;
+        if (id == 0)
+        {
+            throw Oops.Oh("浼佷笟璧勬枡涓嶅尮閰�");
+
+        }
+
+
+       var user= await _fBS_CustormerUsersRep.GetFirstAsync(x => x.Id == id && x.CusExtendId == CExid && x.IsEn == true);
+        if(user==null)
+        {
+            throw Oops.Oh("鐢ㄦ埛涓嶅尮閰�");
+        }
+        ThisUser = user;
+        if (user.IsManager)
+        
+            return true;
+        
+        else return false;
+        
+
+
+    }
 }
diff --git a/Admin.NET/FZCTB.NET.API.Application/User/DTO/DTOS.cs b/Admin.NET/FZCTB.NET.API.Application/User/DTO/DTOS.cs
index 0711ba7..0f16da9 100644
--- a/Admin.NET/FZCTB.NET.API.Application/User/DTO/DTOS.cs
+++ b/Admin.NET/FZCTB.NET.API.Application/User/DTO/DTOS.cs
@@ -4,6 +4,9 @@
 //
 // 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
 
+using Admin.NET.Core;
+using Furion.DataValidation;
+using FZCZTB.Net.CustomerSYSTem;
 using FZCZTB.NET.MD.ConfigMd;
 using FZCZTB.NET.MD.CutomerMd.Extend;
 using SqlSugar;
@@ -123,7 +126,7 @@
     /// <summary>
     /// 娉曞畾浠h〃浜鸿仈绯荤數璇�
     /// </summary>
-    [Phone(ErrorMessage = "鑱旂郴鐢佃瘽鏍煎紡涓嶆纭�")]
+    [DataValidation(ValidationTypes.PhoneNumber, ErrorMessage = "鎵嬫満鍙风爜涓嶆纭�")]
 
     public string? LegalRepresentativePhone { get; set; }
 
@@ -137,7 +140,7 @@
     /// 浼佷笟鑱旂郴鐢佃瘽
     /// </summary>
 
-    [Phone(ErrorMessage = "鑱旂郴鐢佃瘽鏍煎紡涓嶆纭�")]
+    //[DataValidation(ValidationTypes.PhoneNumber, ErrorMessage = "鎵嬫満鍙风爜涓嶆纭�")]
     public string? EnterprisePhone { get; set; }
 
     /// <summary>
@@ -183,7 +186,7 @@
     /// 涓氬姟缁忓姙浜鸿仈绯荤數璇�
     /// </summary>
 
-    [Phone(ErrorMessage = "鑱旂郴鐢佃瘽鏍煎紡涓嶆纭�")]
+    [DataValidation(ValidationTypes.PhoneNumber, ErrorMessage = "鎵嬫満鍙风爜涓嶆纭�")]
     public string OperatorPhone { get; set; }
 
     /// <summary>
@@ -197,10 +200,259 @@
     /// 浼佷笟閾惰璐﹀彿
     /// </summary>
     public string BankAccount { get; set; }
+    /// <summary>
+    /// 閾惰鏀舵鐮�
+    /// </summary>
+
+ 
+    public string BankAccountIMG { get; set; }
+
 
     /// <summary>
-    /// 鐘舵��
+    /// 鐢ㄦ埛瑙掕壊
     /// </summary>
-    public CusExtendStep? steps { set; get; }
+    //public List<FBS_CoutomerExRoleOutput> ExRoles { get; set; }
+    public List<FBS_CoutomerExRoleOutput> ExRoles { get; set; }
+
+
 }
-  
\ No newline at end of file
+
+
+
+/// <summary>
+/// 浼佷笟璧勬枡鍩虹杈撳叆鍙傛暟
+/// </summary>
+public class FBS_CusExtendVm
+{
+    /// <summary>
+    /// 涓婚敭Id
+    /// </summary>
+    public virtual long? Id { get; set; }
+
+  
+    /// <summary>
+    /// 浼佷笟绫诲瀷 
+    /// </summary>
+    [Required(ErrorMessage = "浼佷笟绫诲瀷 涓嶈兘涓虹┖")]
+    public virtual string EnterpriseType { get; set; }
+
+    /// <summary>
+    /// 涓讳綋瑙掕壊浠g爜涓嶈兘浼┖ 鍘熷瓧娈� TransactionCode
+    /// </summary>
+    [Required(ErrorMessage = "瑙掕壊浠g爜 浣犺兘涓虹┖")]
+    public virtual string   ExRoleCode{ get; set; }
+
+    /// <summary>
+    /// 钀ヤ笟鎵х収鏂囦欢璺緞
+    /// </summary>
+    [Required(ErrorMessage = "钀ヤ笟鎵х収鏂囦欢璺緞涓嶈兘涓虹┖")]
+    public virtual string BusinessLicense { get; set; }
+
+    /// <summary>
+    /// 浼佷笟鍚嶇О
+    /// </summary>
+    [Required(ErrorMessage = "浼佷笟鍚嶇О涓嶈兘涓虹┖")]
+    public virtual string EnterpriseName { get; set; }
+
+    /// <summary>
+    /// 缁熶竴绀句細淇$敤浠g爜
+    /// </summary>
+    [Required(ErrorMessage = "缁熶竴绀句細淇$敤浠g爜涓嶈兘涓虹┖")]
+    public virtual string UnifiedSocialCreditCode { get; set; }
+
+    /// <summary>
+    /// 娉ㄥ唽璧勯噾
+    /// </summary>
+    [Required(ErrorMessage = "娉ㄥ唽璧勯噾涓嶈兘涓虹┖")]
+    public virtual string RegisteredCapital { get; set; }
+
+    /// <summary>
+    /// 娉曞畾浠h〃浜哄鍚�
+    /// </summary>
+    [Required(ErrorMessage = "娉曞畾浠h〃浜哄鍚嶄笉鑳戒负绌�")]
+    public virtual string LegalRepresentativeName { get; set; }
+
+    /// <summary>
+    /// 娉曞畾浠h〃浜鸿韩浠借瘉鏂囦欢璺緞
+    /// </summary>
+    [Required(ErrorMessage = "娉曞畾浠h〃浜鸿韩浠借瘉鏂囦欢璺緞涓嶈兘涓虹┖")]
+    public virtual string LegalRepresentativeIdCard { get; set; }
+
+    /// <summary>
+    /// 娉曞畾浠h〃浜哄鍚�
+    /// </summary>
+    [Required(ErrorMessage = "娉曞畾浠h〃浜哄鍚嶄笉鑳戒负绌�")]
+    public virtual string LegalRepresentativeIdNumber { get; set; }
+
+    /// <summary>
+    /// 娉曞畾浠h〃浜哄鍚�
+    /// </summary>
+    [Required(ErrorMessage = "娉曞畾浠h〃浜哄鍚嶄笉鑳戒负绌�")]
+    public virtual string LegalRepresentativePhone { get; set; }
+
+    /// <summary>
+    /// 浼佷笟浣忔墍
+    /// </summary>
+    [Required(ErrorMessage = "浼佷笟浣忔墍涓嶈兘涓虹┖")]
+    public virtual string Residence { get; set; }
+
+    /// <summary>
+    /// 浼佷笟鑱旂郴鐢佃瘽
+    /// </summary>
+    [Required(ErrorMessage = "浼佷笟鑱旂郴鐢佃瘽涓嶈兘涓虹┖")]
+    [DataValidation(ValidationTypes.PhoneNumber, ErrorMessage = "鎵嬫満鍙风爜涓嶆纭�")]
+    public virtual string EnterprisePhone { get; set; }
+
+    /// <summary>
+    /// 浼佷笟鎴愮珛鏃堕棿
+    /// </summary>
+    [Required(ErrorMessage = "浼佷笟鎴愮珛鏃堕棿涓嶈兘涓虹┖")]
+    public virtual DateTime EstablishmentTime { get; set; }
+
+    /// <summary>
+    /// 浼佷笟涓昏惀涓氬姟
+    /// </summary>
+    public virtual string? MainBusiness { get; set; }
+
+    /// <summary>
+    /// 浼佷笟閭
+    /// </summary>
+    [Required(ErrorMessage = "浼佷笟閭涓嶈兘涓虹┖")]
+    [DataValidation(ValidationTypes.EmailAddress, ErrorMessage = "鎵嬫満鍙风爜涓嶆纭�")]
+    public virtual string EnterpriseEmail { get; set; }
+
+    /// <summary>
+    /// 涓氬姟缁忓姙浜哄鍚嶃�佺鐞嗗憳濮撳悕
+    /// </summary>
+    [Required(ErrorMessage = "涓氬姟缁忓姙浜鸿韩浠借瘉涓嶈兘涓虹┖")]
+    public virtual string? OperatorName { get; set; }
+
+    /// <summary>
+    /// 涓氬姟缁忓姙浜鸿韩浠借瘉鏂囦欢璺緞鎴栨爣璇�
+    /// </summary>
+    [Required(ErrorMessage = "涓氬姟缁忓姙浜鸿韩浠借瘉涓嶈兘涓虹┖")]
+    public virtual string? OperatorIdCard { get; set; }
+
+    /// <summary>
+    /// 涓氬姟缁忓姙浜鸿韩浠借瘉鍙风爜
+    /// </summary>
+    [Required(ErrorMessage = "涓氬姟缁忓姙浜鸿韩浠借瘉鍙风爜")]
+    public virtual string? OperatorIdNumber { get; set; }
+
+    /// <summary>
+    /// 涓氬姟缁忓姙浜虹數璇�/绠$悊鍛樼數璇�
+    /// </summary>
+    [DataValidation(ValidationTypes.PhoneNumber, ErrorMessage = "鎵嬫満鍙风爜涓嶆纭�")]
+    public virtual string? OperatorPhone { get; set; }
+
+    /// <summary>
+    /// 寮�鎴疯鍚嶇О
+    /// </summary>
+    [Required(ErrorMessage = "寮�鎴疯鍚嶇О")]
+    public virtual string BankName { get; set; }
+
+    /// <summary>
+    ///寮�鎴疯璐﹀彿
+    /// </summary>
+    [Required(ErrorMessage = "寮�鎴疯璐﹀彿")]
+    public virtual string BankAccount { get; set; }
+
+    /// <summary>
+    /// 鐢佃瘽鍙风爜鏍¢獙鐮�
+    /// </summary>
+    [Required(ErrorMessage = "鐢佃瘽鍙风爜鏍¢獙鐮佷笉鑳戒负绌�")]
+    public string PhoneVCode { get; set; }
+
+    /// <summary>
+    /// 閾惰鏀舵鐮�
+    /// </summary>
+
+
+    public string BankAccountIMG { get; set; }
+    /// <summary>
+    /// 鑱屼綅
+    /// </summary>
+    public string JobTitle { get; internal set; }
+    /// <summary>
+    /// 鏄电О
+    /// </summary>
+    public string Nickname { get; internal set; }
+}
+
+
+
+/// <summary>
+/// 绠$悊鐢ㄦ埛璧勬枡
+/// </summary>
+public class FBS_CustormerUsersVM
+{
+
+    /// <summary>
+    /// ID
+    /// </summary>
+    public long? Id { get; set; }
+
+    /// <summary>
+    /// 缁勭粐鏈烘瀯ID
+    /// </summary>
+    [SugarColumn(ColumnDescription = "缁勭粐鏈烘瀯ID")]
+    public long? CusExtendId { get; set; }
+    /// <summary>
+    /// 濮撳悕
+    /// </summary>
+    public string Name { get; set; }
+    /// <summary>
+    /// 鏄电О
+    /// </summary>
+    public string? Nickname { get; set; }
+    /// <summary>
+    /// 鐢佃瘽鍙风爜
+    /// </summary>
+    public string PhoneNumber { get; set; }
+    /// <summary>
+    /// 澶囨敞
+    /// </summary> 
+    public string? Remarks { get; set; }
+    /// <summary>
+    /// 鑱屽姟
+    /// </summary>
+    public string? JobTitle { get; set; }
+    /// <summary>
+    /// 澶村儚
+    /// </summary>
+    public string? Avatar { get; set; }
+    /// <summary>
+    /// 鏄惁鏈夋晥
+    /// </summary> 
+    public bool IsEn { get; set; }
+    /// <summary>
+    /// 瀵嗙爜
+    /// </summary>
+
+    public string? PassWord { get; set; }
+    /// <summary>
+    /// 鏄惁鏄鐞嗗憳 鍏ㄦ潈闄�
+    /// </summary>
+    public bool IsManager { get; set; }
+
+    /// <summary>
+    /// 鐢靛瓙绛惧悕
+    /// </summary>
+
+    public string? Signature { get; set; }
+}
+
+/// <summary>
+/// 鏇存敼绠$悊鍛�
+/// </summary>
+public class ChangMamagerInput()
+{
+    /// <summary>
+    /// 鏂扮鐞嗗憳璐︽埛
+    /// </summary>
+    public long CustormerUserId { get; set; }
+
+
+
+
+}
\ No newline at end of file
diff --git a/Admin.NET/FZCZTB.NET.MD/ConfigMd/FBS_EnterpriseType.cs b/Admin.NET/FZCZTB.NET.MD/ConfigMd/FBS_EnterpriseType.cs
index b928eae..370b301 100644
--- a/Admin.NET/FZCZTB.NET.MD/ConfigMd/FBS_EnterpriseType.cs
+++ b/Admin.NET/FZCZTB.NET.MD/ConfigMd/FBS_EnterpriseType.cs
@@ -19,7 +19,7 @@
 [SugarTable("FBS_EnterpriseType", "浼佷笟绫婚厤缃〃")]
 [SugarIndex("index_{table}_A", nameof(Code), OrderByType.Asc)]
 [IncreTable]
-public class FBS_EnterpriseType: EntityBaseTenant
+public class FBS_EnterpriseType: EntityBase
 {
 
     /// <summary>
diff --git a/Admin.NET/FZCZTB.NET.MD/CutomerMd/Extend/FBS_CusExtend.cs b/Admin.NET/FZCZTB.NET.MD/CutomerMd/Extend/FBS_CusExtend.cs
index 6265897..faa2373 100644
--- a/Admin.NET/FZCZTB.NET.MD/CutomerMd/Extend/FBS_CusExtend.cs
+++ b/Admin.NET/FZCZTB.NET.MD/CutomerMd/Extend/FBS_CusExtend.cs
@@ -20,17 +20,25 @@
 /// </summary>
 [SugarTable("FBS_CusExtend", "浼佷笟璧勬枡")]
 [IncreTable]
-public class FBS_CusExtend: EntityBaseTenant
+public class FBS_CusExtend: EntityBase
 {
+
     /// <summary>
-    /// 鐢ㄦ埛ID
+    /// 娉ㄦ剰璇ュ瓧娈靛凡缁忓彇娑堬紝杩欓噷鍙槸鐢ㄦ潵灞忚斀婧愪唬鐮佷腑鐨勬姤閿欙紝淇敼瀹屽悗锛屽簲璇ュ垹闄よ瀛楁
     /// </summary>
-    [SugarColumn(ColumnDescription = "鐢ㄦ埛ID" )]
-    [Required(ErrorMessage = "鐢ㄦ埛ID 蹇呭~")]
+    [SugarColumn(IsIgnore =true)]
     public long  CustomerId { get; set; }
+    /// <summary>
+    /// 娉ㄦ剰璇ュ瓧娈靛凡缁忓彇娑堬紝杩欓噷鍙槸鐢ㄦ潵灞忚斀婧愪唬鐮佷腑鐨勬姤閿欙紝淇敼瀹屽悗锛屽簲璇ュ垹闄よ瀛楁
+    /// </summary>
+    [SugarColumn(IsIgnore = true)]
+    public string  TransactionCode { get; set; }
+    /// <summary>
+    /// 娉ㄦ剰璇ュ瓧娈靛凡缁忓彇娑堬紝杩欓噷鍙槸鐢ㄦ潵灞忚斀婧愪唬鐮佷腑鐨勬姤閿欙紝淇敼瀹屽悗锛屽簲璇ュ垹闄よ瀛楁
+    /// </summary>
+    [SugarColumn(IsIgnore = true)]
 
-
-  
+    public CusExtendStep steps { get; set; }
     /// <summary>
     /// 浼佷笟绫诲瀷 浠庝紒涓氱被鍨嬩腑閫夋嫨
     /// </summary>
@@ -39,18 +47,8 @@
     public string EnterpriseType { get; set; }
 
    
-    /// <summary>
-    /// 浜ゆ槗涓讳綋 浠g爜 鍚岃鑹蹭唬鐮�
-    /// </summary>
-    [Required(ErrorMessage = "浜ゆ槗涓讳綋浠g爜涓哄繀濉」")]
-    [SugarColumn(ColumnDescription = "浜ゆ槗涓讳綋code")]
-    public string TransactionCode { get; set; }
 
-    /// <summary>
-    /// 浜ゆ槗涓讳綋
-    /// </summary>
-    [Navigate(NavigateType.OneToOne, nameof(TransactionCode),nameof(FBS_ExRole.Code))]
-    public FBS_ExRole? TransactionRole { get; set; }
+
     /// <summary>
     /// 钀ヤ笟鎵х収鏂囦欢璺緞
     /// </summary>
@@ -195,12 +193,31 @@
     [Required(ErrorMessage = "閾惰璐﹀彿涓哄繀濉」")]
     [SugarColumn(ColumnDescription = "娉曞畾浠h〃浜哄鍚�")]
     public string BankAccount { get; set; }
-    /// <summary>
-    /// 瀹℃牳姝ラ
-    /// </summary>
 
-    [SugarColumn(ColumnDescription = "瀹℃牳姝ラ")]
-    public CusExtendStep steps { set; get; } = CusExtendStep.UNExamine;
+    /// <summary>
+    /// /宀椾綅鑱岃矗
+    /// </summary>
+    [SugarColumn(ColumnDescription = "宀椾綅鑱岃矗", IsNullable = true)]
+    public string JobTitle { get; set; } 
+
+
+    /// <summary>
+    /// 閾惰鏀舵鐮�
+    /// </summary>
+    
+    [SugarColumn(ColumnDescription = "閾惰鏀舵鐮�")]
+    public string BankAccountIMG { get; set; }
+    /// <summary>
+    /// 鐢ㄦ埛绠$悊鍛樺垪琛�
+    /// </summary>
+    [Navigate(NavigateType.OneToMany,nameof(FBS_CustormerUsers.CusExtendId),nameof(Id))]
+    public List< FBS_CustormerUsers> CustormerUsers { get; set; }
+    /// <summary>
+    /// 鐢ㄦ埛瑙掕壊
+    /// </summary>
+    [Navigate(NavigateType.OneToMany, nameof(FBS_CoutomerExRole.CusExtendId), nameof(Id))]
+    public List<FBS_CoutomerExRole> ExRoles { get; set; }
+
 }
 
 /// <summary>
diff --git a/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_CoutomerExRole.cs b/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_CoutomerExRole.cs
index 30e17a6..bdc68c6 100644
--- a/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_CoutomerExRole.cs
+++ b/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_CoutomerExRole.cs
@@ -5,6 +5,7 @@
 // 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
 
 using Admin.NET.Core;
+using FZCZTB.NET.MD.CutomerMd.Extend;
 using SqlSugar;
 using System;
 using System.Collections.Generic;
@@ -14,28 +15,36 @@
 
 namespace FZCZTB.NET.MD.CutomerMd;
 /// <summary>
-/// 澶栭儴瑙掕壊琛�
+/// 涓昏鑹茶〃
 /// </summary>
-[SugarTable("FBS_CoutomerExRole", "澶栭儴瑙掕壊琛�")]
+[SugarTable("FBS_CoutomerExRole", "涓昏鑹茶〃")]
 [IncreTable]
 public class FBS_CoutomerExRole: EntityBaseId
 {
-    //瀹㈡埛ID
-    public long CustomerId { get; set; }
+    /// <summary>
+    /// 缁勭粐鏈烘瀯ID
+    /// </summary>
+    public long CusExtendId { get; set; }
 
     /// <summary>
     ///  澶栭儴瑙掕壊
     /// </summary>
-    public long ExRoleId { get; set; }
-
-    /// <summary>
-    /// 鏄惁瀹屾垚瑙掕壊鍒涘缓
-    /// </summary>
-    public bool HasFlsh { get; set; }= false;
+    public long ExRoleId { get; set; }  
 
     /// <summary>
     /// 澶栭儴瑙掕壊
     /// </summary>
     [Navigate(NavigateType.OneToOne, nameof(ExRoleId))]
     public FBS_ExRole ExRole { get; set; }
+    /// <summary>
+    /// 缁勭粐鏈烘瀯
+    /// </summary>
+    [Navigate(NavigateType.OneToOne, nameof(CusExtendId))]
+    public FBS_CusExtend CusExtend { get; set; }
+
+    /// <summary>
+    /// 瑙掕壊瀹℃牳姝ラ
+    /// </summary>
+    [SugarColumn(ColumnDescription = "瀹℃牳姝ラ")]
+    public CusExtendStep steps { set; get; } = CusExtendStep.UNExamine;
 }
diff --git a/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_Customer.cs b/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_Customer.cs
index cd6db14..57af734 100644
--- a/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_Customer.cs
+++ b/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_Customer.cs
@@ -60,30 +60,7 @@
     [MaxLength(512)]
     public string? Avatar { get; set; }
 
-    ///// <summary>
-    ///// 鎬у埆-鐢穇1銆佸コ_2
-    ///// </summary>
-    //[SugarColumn(ColumnDescription = "鎬у埆")]
-    //public GenderEnum Sex { get; set; } = GenderEnum.Male;
-
-    ///// <summary>
-    ///// 骞撮緞
-    ///// </summary>
-    //[SugarColumn(ColumnDescription = "骞撮緞")]
-    //public int Age { get; set; }
-
-    ///// <summary>
-    ///// 鍑虹敓鏃ユ湡
-    ///// </summary>
-    //[SugarColumn(ColumnDescription = "鍑虹敓鏃ユ湡")]
-    //public DateTime? Birthday { get; set; }
-
-    ///// <summary>
-    ///// 姘戞棌
-    ///// </summary>
-    //[SugarColumn(ColumnDescription = "姘戞棌", Length = 32)]
-    //[MaxLength(32)]
-    //public string? Nation { get; set; }
+    
 
     /// <summary>
     /// 鎵嬫満鍙风爜
@@ -92,26 +69,7 @@
     [MaxLength(16)]
     public string? Phone { get; set; }
 
-    ///// <summary>
-    ///// 璇佷欢绫诲瀷
-    ///// </summary>
-    //[SugarColumn(ColumnDescription = "璇佷欢绫诲瀷")]
-    //public CardTypeEnum CardType { get; set; }
-
-    ///// <summary>
-    ///// 韬唤璇佸彿
-    ///// </summary>
-    //[SugarColumn(ColumnDescription = "韬唤璇佸彿", Length = 32)]
-    //[MaxLength(32)]
-    //public string? IdCardNum { get; set; }
-
-
-    ///// <summary>
-    ///// 韬唤璇佸彿
-    ///// </summary>
-    //[SugarColumn(ColumnDescription = "韬唤璇�", Length = 512)]
-    //[MaxLength(512)]
-    //public string? IdCardPath { get; set; }
+   
 
     /// <summary>
     /// 閭
@@ -120,73 +78,6 @@
     [MaxLength(64)]
     public string? Email { get; set; }
 
-    ///// <summary>
-    ///// 鍦板潃
-    ///// </summary>
-    //[SugarColumn(ColumnDescription = "鍦板潃", Length = 256)]
-    //[MaxLength(256)]
-    //public string? Address { get; set; }
-
-    ///// <summary>
-    ///// 鏂囧寲绋嬪害
-    ///// </summary>
-    //[SugarColumn(ColumnDescription = "鏂囧寲绋嬪害")]
-    //public CultureLevelEnum CultureLevel { get; set; }
-
-    ///// <summary>
-    ///// 鏀挎不闈㈣矊
-    ///// </summary>
-    //[SugarColumn(ColumnDescription = "鏀挎不闈㈣矊", Length = 16)]
-    //[MaxLength(16)]
-    //public string? PoliticalOutlook { get; set; }
-
-    ///// <summary>
-    ///// 姣曚笟闄㈡牎
-    ///// </summary>COLLEGE
-    //[SugarColumn(ColumnDescription = "姣曚笟闄㈡牎", Length = 128)]
-    //[MaxLength(128)]
-    //public string? College { get; set; }
-
-    ///// <summary>
-    ///// 鍔炲叕鐢佃瘽
-    ///// </summary>
-    //[SugarColumn(ColumnDescription = "鍔炲叕鐢佃瘽", Length = 16)]
-    //[MaxLength(16)]
-    //public string? OfficePhone { get; set; }
-
-    ///// <summary>
-    ///// 绱ф�ヨ仈绯讳汉
-    ///// </summary>
-    //[SugarColumn(ColumnDescription = "绱ф�ヨ仈绯讳汉", Length = 32)]
-    //[MaxLength(32)]
-    //public string? EmergencyContact { get; set; }
-
-    ///// <summary>
-    ///// 绱ф�ヨ仈绯讳汉鐢佃瘽
-    ///// </summary>
-    //[SugarColumn(ColumnDescription = "绱ф�ヨ仈绯讳汉鐢佃瘽", Length = 16)]
-    //[MaxLength(16)]
-    //public string? EmergencyPhone { get; set; }
-
-    ///// <summary>
-    ///// 绱ф�ヨ仈绯讳汉鍦板潃
-    ///// </summary>
-    //[SugarColumn(ColumnDescription = "绱ф�ヨ仈绯讳汉鍦板潃", Length = 256)]
-    //[MaxLength(256)]
-    //public string? EmergencyAddress { get; set; }
-
-    ///// <summary>
-    ///// 涓汉绠�浠�
-    ///// </summary>
-    //[SugarColumn(ColumnDescription = "涓汉绠�浠�", Length = 512)]
-    //[MaxLength(512)]
-    //public string? Introduction { get; set; }
-
-    ///// <summary>
-    ///// 鎺掑簭
-    ///// </summary>
-    //[SugarColumn(ColumnDescription = "鎺掑簭")]
-    //public int OrderNo { get; set; } = 100;
 
     /// <summary>
     /// 鐘舵��
@@ -201,99 +92,7 @@
     [MaxLength(256)]
     public string? Remark { get; set; }
 
-    ///// <summary>
-    ///// 璐﹀彿绫诲瀷
-    ///// </summary>
-    //[SugarColumn(ColumnDescription = "璐﹀彿绫诲瀷")]
-    //public AccountTypeEnum AccountType { get; set; } = AccountTypeEnum.NormalUser;
-
-    ///// <summary>
-    ///// 鐩村睘鏈烘瀯Id
-    ///// </summary>
-    //[SugarColumn(ColumnDescription = "鐩村睘鏈烘瀯Id")]
-    //public long OrgId { get; set; }
-
-    /// <summary>
-    /// 鐩村睘鏈烘瀯
-    /// </summary>
-    //[Navigate(NavigateType.OneToOne, nameof(OrgId))]
-    //public SysOrg SysOrg { get; set; }
-
-    /// <summary>
-    /// 鐩村睘涓荤Id
-    /// </summary>
-    //[SugarColumn(ColumnDescription = "鐩村睘涓荤Id")]
-    //public long? ManagerUserId { get; set; }
-
-    /// <summary>
-    /// 鐩村睘涓荤
-    /// </summary>
-    //[Newtonsoft.Json.JsonIgnore]
-    //[System.Text.Json.Serialization.JsonIgnore]
-    //[Navigate(NavigateType.OneToOne, nameof(ManagerUserId))]
-    //public SysUser ManagerUser { get; set; }
-
-    ///// <summary>
-    ///// 鑱屼綅Id
-    ///// </summary>
-    //[SugarColumn(ColumnDescription = "鑱屼綅Id")]
-    //public long PosId { get; set; }
-
-    ///// <summary>
-    ///// 鑱屼綅
-    ///// </summary>
-    //[Newtonsoft.Json.JsonIgnore]
-    //[System.Text.Json.Serialization.JsonIgnore]
-    //[Navigate(NavigateType.OneToOne, nameof(PosId))]
-    //public SysPos SysPos { get; set; }
-
-    ///// <summary>
-    ///// 宸ュ彿
-    ///// </summary>
-    //[SugarColumn(ColumnDescription = "宸ュ彿", Length = 32)]
-    //[MaxLength(32)]
-    //public string? JobNum { get; set; }
-
-    ///// <summary>
-    ///// 鑱岀骇
-    ///// </summary>
-    //[SugarColumn(ColumnDescription = "鑱岀骇", Length = 32)]
-    //[MaxLength(32)]
-    //public string? PosLevel { get; set; }
-
-    ///// <summary>
-    ///// 鑱岀О
-    ///// </summary>
-    //[SugarColumn(ColumnDescription = "鑱岀О", Length = 32)]
-    //[MaxLength(32)]
-    //public string? PosTitle { get; set; }
-
-    ///// <summary>
-    ///// 鎿呴暱棰嗗煙
-    ///// </summary>
-    //[SugarColumn(ColumnDescription = "鎿呴暱棰嗗煙", Length = 32)]
-    //[MaxLength(32)]
-    //public string? Expertise { get; set; }
-
-    ///// <summary>
-    ///// 鍔炲叕鍖哄煙
-    ///// </summary>
-    //[SugarColumn(ColumnDescription = "鍔炲叕鍖哄煙", Length = 32)]
-    //[MaxLength(32)]
-    //public string? OfficeZone { get; set; }
-
-    ///// <summary>
-    ///// 鍔炲叕瀹�
-    ///// </summary>
-    //[SugarColumn(ColumnDescription = "鍔炲叕瀹�", Length = 32)]
-    //[MaxLength(32)]
-    //public string? Office { get; set; }
-
-    ///// <summary>
-    ///// 鍏ヨ亴鏃ユ湡
-    ///// </summary>
-    //[SugarColumn(ColumnDescription = "鍏ヨ亴鏃ユ湡")]
-    //public DateTime? JoinDate { get; set; }
+    
 
     /// <summary>
     /// 鏈�鏂扮櫥褰旾p
@@ -329,23 +128,7 @@
     [MaxLength(512)]
     public string? Signature { get; set; }
 
-    /// <summary>
-    /// 澶栭儴瑙勫垯锛岀櫥褰曡鑹�
-    /// </summary>
-    [Navigate(NavigateType.OneToMany, nameof(FBS_CoutomerExRole.CustomerId))]
-    public List<FBS_CoutomerExRole> CoutomerExRols { set; get; }
 
-    ///// <summary>
-    ///// 楠岃瘉瓒呯骇绠$悊鍛樼被鍨嬶紝鑻ヨ处鍙风被鍨嬩负瓒呯骇绠$悊鍛樺垯鎶ラ敊
-    ///// </summary>
-    ///// <param name="errorMsg">鑷畾涔夐敊璇秷鎭�</param>
-    //public void ValidateIsSuperAdminAccountType(ErrorCodeEnum? errorMsg = ErrorCodeEnum.D1014)
-    //{
-    //    if (AccountType == AccountTypeEnum.SuperAdmin)
-    //    {
-    //        throw Oops.Oh(errorMsg);
-    //    }
-    //}
 
     /// <summary>
     /// 楠岃瘉鐢ㄦ埛Id鏄惁鐩稿悓锛岃嫢鐢ㄦ埛Id鐩稿悓鍒欐姤閿�
diff --git a/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_CustomerRole.cs b/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_CustomerRole.cs
index 12037b4..1bab262 100644
--- a/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_CustomerRole.cs
+++ b/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_CustomerRole.cs
@@ -29,7 +29,7 @@
     [Newtonsoft.Json.JsonIgnore]
     [System.Text.Json.Serialization.JsonIgnore]
     [Navigate(NavigateType.OneToOne, nameof(CutomerId))]
-    public SysUser SysUser { get; set; }
+    public FBS_CustomerRole SysUser { get; set; }
 
     /// <summary>
     /// 瑙掕壊Id
diff --git a/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_CustormerUsers.cs b/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_CustormerUsers.cs
new file mode 100644
index 0000000..3046e30
--- /dev/null
+++ b/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_CustormerUsers.cs
@@ -0,0 +1,128 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+using Admin.NET.Core;
+using Furion.DataValidation;
+using FZCZTB.NET.MD.CutomerMd.Extend;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FZCZTB.NET.MD.CutomerMd;
+/// <summary>
+/// 瀹㈡埛绠$悊鍛樿〃
+/// </summary>
+[IncreTable]
+[SugarTable( TableDescription ="瀹㈡埛绉熸埛绠$悊鍛樿〃")]
+public class FBS_CustormerUsers: EntityBase
+{
+
+    /// <summary>
+    /// 缁勭粐鏈烘瀯ID
+    /// </summary>
+    [SugarColumn(ColumnDescription = "瀹㈡埛ID")]
+    public long CusExtendId { get; set; }
+
+    /// <summary>
+    /// 缁勭粐鏈烘瀯
+    /// </summary>
+    [Navigate(NavigateType.OneToOne,nameof(CusExtendId))]
+    public FBS_CusExtend CusExtend { get; set; }
+
+    /// <summary>
+    /// 濮撳悕
+    /// </summary>
+    [SugarColumn(ColumnDescription = "鑱旂郴浜虹殑姝e紡濮撳悕", Length = 50, IsNullable = false)]
+    public  string Name { get; set; }
+
+    /// <summary>
+    /// 鏄电О
+    /// </summary>
+    [SugarColumn(ColumnDescription = "鑱旂郴浜虹殑闈炴寮忕О鍛兼垨鍒悕", Length = 50, IsNullable = true)]
+    public string? Nickname { get; set; }
+
+    /// <summary>
+    /// 鐢佃瘽鍙风爜
+    /// </summary>
+    //[DataValidation(ValidationTypes.PhoneNumber, ErrorMessage = "涓嶆槸涓�涓纭殑{0}")]
+    [SugarColumn(ColumnDescription = "鑱旂郴浜虹殑鑱旂郴鐢佃瘽", Length = 20, IsNullable = false)]
+    public  string PhoneNumber { get; set; }
+
+    /// <summary>
+    /// 澶囨敞
+    /// </summary>
+    [SugarColumn(ColumnDescription = "鍏充簬鑱旂郴浜虹殑棰濆璇存槑淇℃伅", Length = 500, IsNullable = true)]
+    public string? Remarks { get; set; }
+
+    /// <summary>
+    /// 鑱屽姟
+    /// </summary>
+    [SugarColumn(ColumnDescription = "鑱旂郴浜虹殑宸ヤ綔鑱屼綅鎴栧ご琛�", Length = 100, IsNullable = true)]
+    public string? JobTitle { get; set; }
+
+    /// <summary>
+    /// 澶村儚
+    /// </summary>
+    [SugarColumn(ColumnDescription = "鑱旂郴浜哄ご鍍忕殑瀛樺偍璺緞鎴朥RL", Length = 255, IsNullable = true)]
+    public string? Avatar { get; set; }
+
+    /// <summary>
+    /// 鏄惁鏈夋晥
+    /// </summary>
+    [SugarColumn(ColumnDescription = "鏄惁鏈夋晥", Length = 255, IsNullable = true)]
+    public bool IsEn { get; set; } 
+
+    /// <summary>
+    /// 瀵嗙爜
+    /// </summary>
+    [SugarColumn(ColumnDescription = "瀵嗙爜", Length = 255, IsNullable = true)]
+    public string?  PassWord { get; set; }
+
+    /// <summary>
+    /// 鏄惁鏄鐞嗗憳 鍏ㄦ潈闄�
+    /// </summary>
+    [SugarColumn(ColumnDescription = "鏄惁鏄鐞嗗憳", Length = 255, IsNullable = true)]
+    public bool IsManager { get; set; }
+
+
+    /// <summary>
+    /// 鏈�鏂扮櫥褰旾p
+    /// </summary>
+    [SugarColumn(ColumnDescription = "鏈�鏂扮櫥褰旾p", Length = 256)]
+    [MaxLength(256)]
+    public string? LastLoginIp { get; set; }
+
+    /// <summary>
+    /// 鏈�鏂扮櫥褰曞湴鐐�
+    /// </summary>
+    [SugarColumn(ColumnDescription = "鏈�鏂扮櫥褰曞湴鐐�", Length = 128)]
+    [MaxLength(128)]
+    public string? LastLoginAddress { get; set; }
+
+    /// <summary>
+    /// 鏈�鏂扮櫥褰曟椂闂�
+    /// </summary>
+    [SugarColumn(ColumnDescription = "鏈�鏂扮櫥褰曟椂闂�")]
+    public DateTime? LastLoginTime { get; set; }
+
+    /// <summary>
+    /// 鏈�鏂扮櫥褰曡澶�
+    /// </summary>
+    [SugarColumn(ColumnDescription = "鏈�鏂扮櫥褰曡澶�", Length = 128)]
+    [MaxLength(128)]
+    public string? LastLoginDevice { get; set; }
+
+    /// <summary>
+    /// 鐢靛瓙绛惧悕
+    /// </summary>
+    [SugarColumn(ColumnDescription = "鐢靛瓙绛惧悕", Length = 512)]
+    [MaxLength(512)]
+    public string? Signature { get; set; }
+}
diff --git a/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_ExRole.cs b/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_ExRole.cs
index a9a32cb..014259a 100644
--- a/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_ExRole.cs
+++ b/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_ExRole.cs
@@ -22,7 +22,7 @@
 [SugarIndex("index_{table}_N", nameof(Name), OrderByType.Asc)]
 [SugarIndex("index_{table}_C", nameof(Code), OrderByType.Asc)]
 [IncreTable]
-public class FBS_ExRole: EntityBaseTenant
+public class FBS_ExRole: EntityBase
 {
     /// <summary>
     /// 鍚嶇О
diff --git a/Admin.NET/FZCZTB.NET.SYSService/CustomerSYS/CustomerManagerS.cs b/Admin.NET/FZCZTB.NET.SYSService/CustomerSYS/CustomerManagerS.cs
index ab8c7ca..0f32f48 100644
--- a/Admin.NET/FZCZTB.NET.SYSService/CustomerSYS/CustomerManagerS.cs
+++ b/Admin.NET/FZCZTB.NET.SYSService/CustomerSYS/CustomerManagerS.cs
@@ -3,6 +3,7 @@
 using Furion.DependencyInjection;
 using Furion.FriendlyException;
 using FZCZTB.NET.MD.CutomerMd;
+using FZCZTB.NET.MD.CutomerMd.Extend;
 using Mapster;
 using SqlSugar;
 using System;
@@ -20,12 +21,12 @@
     public class CustomerManagerS: IScoped
     {
         private readonly SqlSugarRepository<FBS_ExRole> _fBS_ExRoleRep;
-        private readonly SqlSugarRepository<FBS_Customer> _fBS_CustomerRep;
+        private readonly SqlSugarRepository<FBS_CustormerUsers> _fBS_CustomerRep;
         private readonly SysCacheService _sysCacheService;
 
         public CustomerManagerS(SysCacheService sysCacheService,
             SqlSugarRepository<FBS_ExRole> fBS_ExRoleRep,
-            SqlSugarRepository<FBS_Customer> fBS_CustomerRep)
+            SqlSugarRepository<FBS_CustormerUsers> fBS_CustomerRep)
         {
             _sysCacheService = sysCacheService;
             _fBS_ExRoleRep = fBS_ExRoleRep;
@@ -46,12 +47,13 @@
         /// 杩斿洖褰撳墠鍙敤鐨勭敤鎴疯鑹� 鍐嶆敞鍐屽拰鐧诲綍鏃堕渶瑕佽繑鍥炵紪鐮�
         /// </summary>
         /// <returns></returns>
-        public async Task<CustomerRDto> GetCustomer(long  id)
+        public async Task<FBS_CustormerUsers> GetCustomer(long  id)
         {
 
    
-            return await _fBS_CustomerRep.AsQueryable().Where(x=>x.Id==id&&x.Status== StatusEnum.Enable).Includes(x=>x.CoutomerExRols,y=>y.ExRole)
-           .Select<CustomerRDto>().WithCache(20).FirstAsync();
+            return await _fBS_CustomerRep.AsQueryable().Where(x=>x.Id==id&&x.IsEn== true)
+                //.Includes(x=>x.CoutomerExRols,y=>y.ExRole)
+           .WithCache(20).FirstAsync();
             //return (await _fBS_CustomerRep.GetFirstAsync(x => x.Id == id && x.Status == StatusEnum.Enable)).Adapt<CustomerRDto>();
 
 
@@ -61,22 +63,22 @@
         }
 
 
-        /// <summary>
-        /// 杩斿洖褰撳墠鍙敤鐨勭敤鎴疯鑹� 鍐嶆敞鍐屽拰鐧诲綍鏃堕渶瑕佽繑鍥炵紪鐮�
-        /// </summary>
-        /// <returns></returns>
-        public async Task<CustomerRDto> UpDataCustomer(int id)
-        {
+        ///// <summary>
+        ///// 杩斿洖褰撳墠鍙敤鐨勭敤鎴疯鑹� 鍐嶆敞鍐屽拰鐧诲綍鏃堕渶瑕佽繑鍥炵紪鐮�
+        ///// </summary>
+        ///// <returns></returns>
+        //public async Task<CustomerRDto> UpDataCustomer(int id)
+        //{
 
 
 
-            return (await _fBS_CustomerRep.GetFirstAsync(x => x.Id == id && x.Status == StatusEnum.Enable)).Adapt<CustomerRDto>();
+        //    return (await _fBS_CustomerRep.GetFirstAsync(x => x.Id == id && x.Status == StatusEnum.Enable)).Adapt<CustomerRDto>();
 
 
 
 
 
-        }
+        //}
 
 
      
@@ -131,7 +133,7 @@
 
     }
 
-
+   
     /// <summary>
     /// 瀹㈡埛琛ㄨ緭鍑哄弬鏁�
     /// </summary>
@@ -209,11 +211,11 @@
        
         public string? Signature { get; set; }
 
-        /// <summary>
-        /// 鐧诲綍瑙掕壊
-        /// </summary>
-        [Navigate(NavigateType.OneToMany, nameof(FBS_CoutomerExRole.CustomerId))]
-        public List<FBS_CoutomerExRole> CoutomerExRols { set; get; }
+        ///// <summary>
+        ///// 鐧诲綍瑙掕壊
+        ///// </summary>
+        //[Navigate(NavigateType.OneToMany, nameof(FBS_CoutomerExRole.CustomerId))]
+        //public List<FBS_CoutomerExRole> CoutomerExRols { set; get; }
 
         /// <summary>
         /// 娉ㄥ唽鐢ㄦ埛瑙掕壊  
@@ -226,4 +228,101 @@
         public string? PhoneVCode {  get; set; }
 
     }
+
+
+
+    /// <summary>
+    /// 瀹㈡埛琛ㄨ緭鍑哄弬鏁�
+    /// </summary>
+    public class Cu
+    {
+        /// <summary>
+        /// 璐﹀彿
+        /// </summary>
+
+        public virtual string Account { get; set; }
+
+        /// <summary>
+        /// 瀵嗙爜
+        /// </summary>
+
+        [MaxLength(512)]
+
+        public virtual string Password { get; set; }
+
+        /// <summary>
+        /// 鐪熷疄濮撳悕
+        /// </summary>
+
+        [MaxLength(32)]
+        public virtual string RealName { get; set; }
+
+        /// <summary>
+        /// 鏄电О
+        /// </summary>
+
+        [MaxLength(32)]
+        public string? NickName { get; set; }
+
+        /// <summary>
+        /// 澶村儚
+        /// </summary>
+
+        [MaxLength(512)]
+        public string? Avatar { get; set; }
+
+
+
+        /// <summary>
+        /// 鎵嬫満鍙风爜
+        /// </summary>
+
+        [MaxLength(16)]
+        public string? Phone { get; set; }
+
+
+
+        /// <summary>
+        /// 閭
+        /// </summary>
+
+        [MaxLength(64)]
+        public string? Email { get; set; }
+
+
+
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+
+        [MaxLength(256)]
+        public string? Remark { get; set; }
+
+
+
+
+        /// <summary>
+        /// 鐢靛瓙绛惧悕
+        /// </summary>
+
+        public string? Signature { get; set; }
+
+        ///// <summary>
+        ///// 鐧诲綍瑙掕壊
+        ///// </summary>
+        //[Navigate(NavigateType.OneToMany, nameof(FBS_CoutomerExRole.CustomerId))]
+        //public List<FBS_CoutomerExRole> CoutomerExRols { set; get; }
+
+        /// <summary>
+        /// 娉ㄥ唽鐢ㄦ埛瑙掕壊  
+        /// </summary>
+        public string? ExRoleCode { get; set; }
+
+        /// <summary>
+        /// 鐢ㄦ埛娉ㄥ唽鎵嬫満楠岃瘉鐮�
+        /// </summary>
+        public string? PhoneVCode { get; set; }
+
+    }
 }
diff --git a/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/Dto/FBS_CusExtendDto.cs b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/Dto/FBS_CusExtendDto.cs
index 3e33051..11409ac 100644
--- a/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/Dto/FBS_CusExtendDto.cs
+++ b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/Dto/FBS_CusExtendDto.cs
@@ -16,10 +16,7 @@
     /// </summary>
     public long Id { get; set; }
     
-    /// <summary>
-    /// 鐢ㄦ埛ID
-    /// </summary>
-    public long CustomerId { get; set; }
+ 
     
     /// <summary>
     /// 浼佷笟绫诲瀷 
@@ -165,5 +162,15 @@
     /// 淇敼鑰呭鍚�
     /// </summary>
     public string? UpdateUserName { get; set; }
-    
+
+    /// <summary>
+    /// 鐢ㄦ埛绠$悊鍛樺垪琛�
+    /// </summary>
+
+    public List<FBS_CustormerUsersOutput> CustormerUsers { get; set; }
+    /// <summary>
+    /// 鐢ㄦ埛瑙掕壊
+    /// </summary>
+    public List<FBS_CoutomerExRoleOutput> ExRoles { get; set; }
+
 }
diff --git a/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/Dto/FBS_CusExtendInput.cs b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/Dto/FBS_CusExtendInput.cs
index b708cd7..8e66f0a 100644
--- a/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/Dto/FBS_CusExtendInput.cs
+++ b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/Dto/FBS_CusExtendInput.cs
@@ -9,6 +9,9 @@
 using Magicodes.ExporterAndImporter.Core;
 using Magicodes.ExporterAndImporter.Excel;
 using FZCZTB.NET.MD.CutomerMd.Extend;
+using FZCZTB.NET.MD.CutomerMd;
+using SqlSugar;
+using Furion.DataValidation;
 
 namespace FZCZTB.Net.CustomerSYSTem;
 
@@ -149,12 +152,7 @@
     [Required(ErrorMessage = "娉曞畾浠h〃浜哄鍚嶄笉鑳戒负绌�")]
     public virtual string BankAccount { get; set; }
     
-    /// <summary>
-    /// 瀹℃牳姝ラ
-    /// </summary>
-    [Dict("CusExtendStep", AllowNullValue=true)]
-    [Required(ErrorMessage = "瀹℃牳姝ラ涓嶈兘涓虹┖")]
-    public virtual int? steps { get; set; }
+  
     
 }
 
@@ -163,21 +161,19 @@
 /// </summary>
 public class PageFBS_CusExtendInput : BasePageInput
 {
-    /// <summary>
-    /// 鐢ㄦ埛ID
-    /// </summary>
-    public long? CustomerId { get; set; }
+   
     
     /// <summary>
     /// 浼佷笟绫诲瀷 
     /// </summary>
     public string EnterpriseType { get; set; }
-    
+
     /// <summary>
-    /// 浜ゆ槗涓讳綋code
+    /// 宸茬敵璇疯鑹�
     /// </summary>
     public string TransactionCode { get; set; }
-    
+
+
     /// <summary>
     /// 钀ヤ笟鎵х収鏂囦欢璺緞
     /// </summary>
@@ -273,11 +269,7 @@
     /// </summary>
     public string BankAccount { get; set; }
     
-    /// <summary>
-    /// 瀹℃牳姝ラ
-    /// </summary>
-
-    public CusExtendStep? steps { get; set; }
+    
     
     /// <summary>
     /// 閫変腑涓婚敭鍒楄〃
@@ -290,11 +282,7 @@
 /// </summary>
 public class AddFBS_CusExtendInput
 {
-    /// <summary>
-    /// 鐢ㄦ埛ID
-    /// </summary>
-    [Required(ErrorMessage = "鐢ㄦ埛ID涓嶈兘涓虹┖")]
-    public long? CustomerId { get; set; }
+    
     
     /// <summary>
     /// 浼佷笟绫诲瀷 
@@ -303,12 +291,7 @@
     [MaxLength(255, ErrorMessage = "浼佷笟绫诲瀷 瀛楃闀垮害涓嶈兘瓒呰繃255")]
     public string EnterpriseType { get; set; }
     
-    /// <summary>
-    /// 浜ゆ槗涓讳綋code
-    /// </summary>
-    [Required(ErrorMessage = "浜ゆ槗涓讳綋code涓嶈兘涓虹┖")]
-    [MaxLength(255, ErrorMessage = "浜ゆ槗涓讳綋code瀛楃闀垮害涓嶈兘瓒呰繃255")]
-    public string TransactionCode { get; set; }
+    
     
     /// <summary>
     /// 钀ヤ笟鎵х収鏂囦欢璺緞
@@ -435,14 +418,17 @@
     [Required(ErrorMessage = "娉曞畾浠h〃浜哄鍚嶄笉鑳戒负绌�")]
     [MaxLength(255, ErrorMessage = "娉曞畾浠h〃浜哄鍚嶅瓧绗﹂暱搴︿笉鑳借秴杩�255")]
     public string BankAccount { get; set; }
-    
+
     /// <summary>
-    /// 瀹℃牳姝ラ
+    /// 鐢ㄦ埛绠$悊鍛樺垪琛�
     /// </summary>
-    [Dict("CusExtendStep", AllowNullValue=true)]
-    [Required(ErrorMessage = "瀹℃牳姝ラ涓嶈兘涓虹┖")]
-    public int? steps { get; set; }
-    
+
+    public List<FBS_CustormerUsersOutput> CustormerUsers { get; set; }
+    /// <summary>
+    /// 鐢ㄦ埛瑙掕壊
+    /// </summary>
+    public List<FBS_CoutomerExRoleOutput> ExRoles { get; set; }
+
 }
 
 /// <summary>
@@ -469,11 +455,7 @@
     [Required(ErrorMessage = "涓婚敭Id涓嶈兘涓虹┖")]
     public long? Id { get; set; }
     
-    /// <summary>
-    /// 鐢ㄦ埛ID
-    /// </summary>    
-    [Required(ErrorMessage = "鐢ㄦ埛ID涓嶈兘涓虹┖")]
-    public long? CustomerId { get; set; }
+
     
     /// <summary>
     /// 浼佷笟绫诲瀷 
@@ -614,14 +596,17 @@
     [Required(ErrorMessage = "娉曞畾浠h〃浜哄鍚嶄笉鑳戒负绌�")]
     [MaxLength(255, ErrorMessage = "娉曞畾浠h〃浜哄鍚嶅瓧绗﹂暱搴︿笉鑳借秴杩�255")]
     public string BankAccount { get; set; }
-    
+
     /// <summary>
-    /// 瀹℃牳姝ラ
-    /// </summary>    
-    [Dict("CusExtendStep", AllowNullValue=true)]
-    [Required(ErrorMessage = "瀹℃牳姝ラ涓嶈兘涓虹┖")]
-    public CusExtendStep? steps { get; set; }
-    
+    /// 鐢ㄦ埛绠$悊鍛樺垪琛�
+    /// </summary>
+
+    public List<FBS_CustormerUsersOutput> CustormerUsers { get; set; }
+    /// <summary>
+    /// 鐢ㄦ埛瑙掕壊
+    /// </summary>
+    public List<FBS_CoutomerExRoleOutput> ExRoles { get; set; }
+
 }
 
 /// <summary>
@@ -637,12 +622,7 @@
 [ExcelImporter(SheetIndex = 1, IsOnlyErrorRows = true)]
 public class ImportFBS_CusExtendInput : BaseImportInput
 {
-    /// <summary>
-    /// 鐢ㄦ埛ID
-    /// </summary>
-    [ImporterHeader(Name = "*鐢ㄦ埛ID")]
-    [ExporterHeader("*鐢ㄦ埛ID", Format = "", Width = 25, IsBold = true)]
-    public long? CustomerId { get; set; }
+  
     
     /// <summary>
     /// 浼佷笟绫诲瀷 
@@ -791,12 +771,12 @@
     [ExporterHeader("*娉曞畾浠h〃浜哄鍚�", Format = "", Width = 25, IsBold = true)]
     public string BankAccount { get; set; }
     
-    /// <summary>
-    /// 瀹℃牳姝ラ 鍏宠仈鍊�
-    /// </summary>
-    [ImporterHeader(IsIgnore = true)]
-    [ExporterHeader(IsIgnore = true)]
-    public CusExtendStep? steps { get; set; }
+    ///// <summary>
+    ///// 瀹℃牳姝ラ 鍏宠仈鍊�
+    ///// </summary>
+    //[ImporterHeader(IsIgnore = true)]
+    //[ExporterHeader(IsIgnore = true)]
+    //public CusExtendStep? steps { get; set; }
     
     ///// <summary>
     ///// 瀹℃牳姝ラ 鏂囨湰
@@ -807,3 +787,84 @@
     //public string stepsDictLabel { get; set; }
     
 }
+
+
+/// <summary>
+/// 
+/// </summary>
+public class FBS_CustormerUsersInPut 
+{
+    /// <summary>
+    /// id
+    /// </summary>
+    public  long?  Id { get; set; }
+    /// <summary>
+    /// 缁勭粐鏈烘瀯ID
+    /// </summary>
+    [Required]
+    public long CusExtendId { get; set; }
+
+
+
+    /// <summary>
+    /// 濮撳悕
+    /// </summary>
+
+    public string Name { get; set; }
+
+    /// <summary>
+    /// 鏄电О
+    /// </summary>
+   
+    public string? Nickname { get; set; }
+
+    /// <summary>
+    /// 鐢佃瘽鍙风爜
+    /// </summary>
+    [DataValidation(ValidationTypes.PhoneNumber, ErrorMessage = "涓嶆槸涓�涓纭殑{0}")]
+    [Required]
+    public string PhoneNumber { get; set; }
+
+    /// <summary>
+    /// 澶囨敞
+    /// </summary>
+
+    public string? Remarks { get; set; }
+
+    /// <summary>
+    /// 鑱屽姟
+    /// </summary>
+  
+    public string? JobTitle { get; set; }
+
+    /// <summary>
+    /// 澶村儚
+    /// </summary>
+    
+    public string? Avatar { get; set; }
+
+    /// <summary>
+    /// 鏄惁鏈夋晥
+    /// </summary>
+    
+    public bool IsEn { get; set; }
+
+    /// <summary>
+    /// 瀵嗙爜
+    /// </summary>
+ 
+    public string? PassWord { get; set; }
+
+    /// <summary>
+    /// 鏄惁鏄鐞嗗憳 鍏ㄦ潈闄�
+    /// </summary>
+
+    public bool IsManager { get; set; }
+
+    /// <summary>
+    /// 鐢靛瓙绛惧悕
+    /// </summary>
+    [SugarColumn(ColumnDescription = "鐢靛瓙绛惧悕", Length = 512)]
+    [MaxLength(512)]
+    public string? Signature { get; set; }
+}
\ No newline at end of file
diff --git a/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/Dto/FBS_CusExtendOutput.cs b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/Dto/FBS_CusExtendOutput.cs
index a5f705f..48fbdd9 100644
--- a/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/Dto/FBS_CusExtendOutput.cs
+++ b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/Dto/FBS_CusExtendOutput.cs
@@ -7,6 +7,7 @@
 namespace FZCZTB.Net.CustomerSYSTem;
 
 using cylsg.utility;
+using FZCZTB.NET.MD.CutomerMd;
 using FZCZTB.NET.MD.CutomerMd.Extend;
 
 /// <summary>
@@ -17,12 +18,8 @@
     /// <summary>
     /// 涓婚敭Id
     /// </summary>
-    public long Id { get; set; }    
-    
-    /// <summary>
-    /// 鐢ㄦ埛ID
-    /// </summary>
-    public long CustomerId { get; set; }
+    public long Id { get; set; }     
+  
 
     /// <summary>
     /// 鐢ㄦ埛鍚�
@@ -133,10 +130,7 @@
     /// </summary>
     public string BankAccount { get; set; }    
     
-    /// <summary>
-    /// 瀹℃牳姝ラ
-    /// </summary>
-    public CusExtendStep steps { get; set; }    
+      
     
     /// <summary>
     /// 绉熸埛Id
@@ -171,10 +165,22 @@
     /// <summary>
     /// 淇敼鑰呭鍚�
     /// </summary>
-    public string? UpdateUserName { get; set; }    
+    public string? UpdateUserName { get; set; }
 
-   
 
+
+
+    /// <summary>
+    /// 鐢ㄦ埛绠$悊鍛樺垪琛�
+    /// </summary>
+
+    //public List<FBS_CustormerUsersOutput> CustormerUsers { get; set; }
+    public List<FBS_CustormerUsersOutput> CustormerUsers { get; set; }
+    /// <summary>
+    /// 鐢ㄦ埛瑙掕壊
+    /// </summary>
+    //public List<FBS_CoutomerExRoleOutput> ExRoles { get; set; }
+    public List<FBS_CoutomerExRoleOutput> ExRoles { get; set; }
 
 }
 
@@ -202,4 +208,102 @@
     /// </summary>
     public  List<FBS_EnterpriseTypeOutput>  EnterpriseTypes{ get; set; }
 
+}
+
+
+/// <summary>
+/// 绠$悊鐢ㄦ埛璧勬枡
+/// </summary>
+public class FBS_CustormerUsersOutput
+{
+
+    /// <summary>
+    /// ID
+    /// </summary>
+    public long? Id  { get; set;}
+    
+    /// <summary>
+    /// 缁勭粐鏈烘瀯ID
+    /// </summary>
+    public long CusExtendId { get; set; }
+    /// <summary>
+    /// 濮撳悕
+    /// </summary>
+    public string Name { get; set; }
+    /// <summary>
+    /// 鏄电О
+    /// </summary>
+    public string? Nickname { get; set; }
+   /// <summary>
+   /// 鐢佃瘽鍙风爜
+   /// </summary>
+    public string PhoneNumber { get; set; }
+    /// <summary>
+    /// 澶囨敞
+    /// </summary> 
+    public string? Remarks { get; set; }
+    /// <summary>
+    /// 鑱屽姟
+    /// </summary>
+    public string? JobTitle { get; set; }
+    /// <summary>
+    /// 澶村儚
+    /// </summary>
+    public string? Avatar { get; set; }
+    /// <summary>
+    /// 鏄惁鏈夋晥
+    /// </summary> 
+    public bool IsEn { get; set; }
+    /// <summary>
+    /// 瀵嗙爜
+    /// </summary>
+ 
+    public string? PassWord { get; set; }
+    /// <summary>
+    /// 鏄惁鏄鐞嗗憳 鍏ㄦ潈闄�
+    /// </summary>
+    public bool IsManager { get; set; }   
+
+    /// <summary>
+    /// 鐢靛瓙绛惧悕
+    /// </summary>
+  
+    public string? Signature { get; set; }
+}
+
+/// <summary>
+/// 瑙掕壊绠$悊
+/// </summary>
+public class FBS_CoutomerExRoleOutput
+{
+    /// <summary>
+    /// ID
+    /// </summary>
+    public long?  Id { get; set; }
+    /// <summary>
+    /// 缁勭粐鏈烘瀯ID
+    /// </summary>
+    public long CusExtendId { get; set; }
+
+    /// <summary>
+    ///  澶栭儴瑙掕壊
+    /// </summary>
+    public long ExRoleId { get; set; }
+
+    /// <summary>
+    /// 澶栭儴瑙掕壊
+    /// </summary>
+  
+    public FBS_ExRole ExRole { get; set; }
+    /// <summary>
+    /// 缁勭粐鏈烘瀯
+    /// </summary>
+
+    public FBS_CusExtend CusExtend { get; set; }
+
+    /// <summary>
+    /// 瑙掕壊瀹℃牳姝ラ
+    /// </summary>
+
+    public CusExtendStep steps { set; get; } = CusExtendStep.UNExamine;
 }
\ No newline at end of file
diff --git a/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/FBS_CusExtendService.cs b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/FBS_CusExtendService.cs
index 18d4555..636b6ec 100644
--- a/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/FBS_CusExtendService.cs
+++ b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/FBS_CusExtendService.cs
@@ -20,6 +20,8 @@
 using cylsg.utility;
 using FZCZTB.NET.MD.CutomerMd;
 using Furion.Logging.Extensions;
+using FZCZTB.Net.CustomerSYSTem.Service.FBS_ExRole.Dto;
+using MapsterMapper;
 namespace FZCZTB.Net.CustomerSYSTem;
 
 /// <summary>
@@ -33,19 +35,25 @@
     private readonly ISqlSugarClient _sqlSugarClient;
     private readonly SysDictTypeService _sysDictTypeService;
     private readonly FBS_EnterpriseTypeService _EnterpriseTypeService;
+    public readonly SqlSugarRepository<FBS_CustormerUsers> _fBS_CustormerUsersRep;
+    private readonly IMapper _mapper;
 
 
     public FBS_CusExtendService(SqlSugarRepository<FBS_CusExtend> fBS_CusExtendRep,
         ISqlSugarClient sqlSugarClient,
         SysDictTypeService sysDictTypeService,
         FBS_EnterpriseTypeService fBS_EnterpriseTypeService,
-         SqlSugarRepository<FBS_CoutomerExRole> cerRep)
+         SqlSugarRepository<FBS_CoutomerExRole> cerRep,
+         IMapper mapper,
+         SqlSugarRepository<FBS_CustormerUsers> fbscu)
     {
         _fBS_CusExtendRep = fBS_CusExtendRep;
         _sqlSugarClient = sqlSugarClient;
         _sysDictTypeService = sysDictTypeService;
         _EnterpriseTypeService = fBS_EnterpriseTypeService;
         _fBS_CoutomerExRoleRep = cerRep;
+        _mapper = mapper;
+        _fBS_CustormerUsersRep = fbscu;
     }
     /// <summary>
     /// 
@@ -71,11 +79,13 @@
     [ApiDescriptionSettings(Name = "Page"), HttpPost]
     public async Task<SqlSugarPagedList<FBS_CusExtendOutput>> Page(PageFBS_CusExtendInput input)
     {
+
+        //var data            = await _fBS_CusExtendRep.AsQueryable().Includes(u => u.ExRoles, y => y.ExRole).Includes(u => u.CustormerUsers).ToListAsync();
         input.Keyword = input.Keyword?.Trim();
-        var query = _fBS_CusExtendRep.AsQueryable()
-            .WhereIF(!string.IsNullOrWhiteSpace(input.Keyword), u => u.EnterpriseType.Contains(input.Keyword) || u.TransactionCode.Contains(input.Keyword) || u.BusinessLicense.Contains(input.Keyword) || u.EnterpriseName.Contains(input.Keyword) || u.UnifiedSocialCreditCode.Contains(input.Keyword) || u.RegisteredCapital.Contains(input.Keyword) || u.LegalRepresentativeName.Contains(input.Keyword) || u.LegalRepresentativeIdCard.Contains(input.Keyword) || u.LegalRepresentativeIdNumber.Contains(input.Keyword) || u.LegalRepresentativePhone.Contains(input.Keyword) || u.Residence.Contains(input.Keyword) || u.EnterprisePhone.Contains(input.Keyword) || u.MainBusiness.Contains(input.Keyword) || u.EnterpriseEmail.Contains(input.Keyword) || u.OperatorName.Contains(input.Keyword) || u.OperatorIdCard.Contains(input.Keyword) || u.OperatorIdNumber.Contains(input.Keyword) || u.OperatorPhone.Contains(input.Keyword) || u.BankName.Contains(input.Keyword) || u.BankAccount.Contains(input.Keyword))
+        var query = _fBS_CusExtendRep.AsQueryable().Includes(u => u.ExRoles, y => y.ExRole).Includes(u => u.CustormerUsers)
+            .WhereIF(!string.IsNullOrWhiteSpace(input.Keyword), u => u.EnterpriseType.Contains(input.Keyword) || u.BusinessLicense.Contains(input.Keyword) || u.EnterpriseName.Contains(input.Keyword) || u.UnifiedSocialCreditCode.Contains(input.Keyword) || u.RegisteredCapital.Contains(input.Keyword) || u.LegalRepresentativeName.Contains(input.Keyword) || u.LegalRepresentativeIdCard.Contains(input.Keyword) || u.LegalRepresentativeIdNumber.Contains(input.Keyword) || u.LegalRepresentativePhone.Contains(input.Keyword) || u.Residence.Contains(input.Keyword) || u.EnterprisePhone.Contains(input.Keyword) || u.MainBusiness.Contains(input.Keyword) || u.EnterpriseEmail.Contains(input.Keyword) || u.OperatorName.Contains(input.Keyword) || u.OperatorIdCard.Contains(input.Keyword) || u.OperatorIdNumber.Contains(input.Keyword) || u.OperatorPhone.Contains(input.Keyword) || u.BankName.Contains(input.Keyword) || u.BankAccount.Contains(input.Keyword))
             .WhereIF(!string.IsNullOrWhiteSpace(input.EnterpriseType), u => u.EnterpriseType.Contains(input.EnterpriseType.Trim()))
-            .WhereIF(!string.IsNullOrWhiteSpace(input.TransactionCode), u => u.TransactionCode.Contains(input.TransactionCode.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.TransactionCode), u => u.ExRoles.Any(x => x.ExRole.Code == input.TransactionCode))
             .WhereIF(!string.IsNullOrWhiteSpace(input.BusinessLicense), u => u.BusinessLicense.Contains(input.BusinessLicense.Trim()))
             .WhereIF(!string.IsNullOrWhiteSpace(input.EnterpriseName), u => u.EnterpriseName.Contains(input.EnterpriseName.Trim()))
             .WhereIF(!string.IsNullOrWhiteSpace(input.UnifiedSocialCreditCode), u => u.UnifiedSocialCreditCode.Contains(input.UnifiedSocialCreditCode.Trim()))
@@ -94,87 +104,36 @@
             .WhereIF(!string.IsNullOrWhiteSpace(input.OperatorPhone), u => u.OperatorPhone.Contains(input.OperatorPhone.Trim()))
             .WhereIF(!string.IsNullOrWhiteSpace(input.BankName), u => u.BankName.Contains(input.BankName.Trim()))
             .WhereIF(!string.IsNullOrWhiteSpace(input.BankAccount), u => u.BankAccount.Contains(input.BankAccount.Trim()))
-            .WhereIF(input.CustomerId != null, u => u.CustomerId == input.CustomerId)
             .WhereIF(input.EstablishmentTimeRange?.Length == 2, u => u.EstablishmentTime >= input.EstablishmentTimeRange[0] && u.EstablishmentTime <= input.EstablishmentTimeRange[1])
-            .WhereIF(input.steps != null, u => u.steps == input.steps)
-            .Select<FBS_CusExtendOutput>();
+
+            .Select(u => new FBS_CusExtendOutput
+            {
+                ExRoles = u.ExRoles.Adapt<List<FBS_CoutomerExRoleOutput>>(),
+                CustormerUsers = u.CustormerUsers.Adapt<List<FBS_CustormerUsersOutput>>()
+            },true);
 		return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize);
     }
-  /// <summary>
-  /// 鏇存敼瀹℃牳鐘舵��
-  /// </summary>
-  /// <param name="id">瑕佹洿鏀圭殑鐢ㄦ埛瑙掕壊璧勬枡Id</param>
-  /// <param name="step">瑕佹洿鏀圭殑鐘舵��</param>
-  /// <returns></returns>
+    /// <summary>
+    /// 鏇存敼瀹℃牳鐘舵��
+    /// </summary>
+    /// <param name="CoutomerExRolesId">璇D鏄敤鎴疯鑹插垪琛ㄤ腑鐨処d</param>
+    /// <param name="step">瑕佹洿鏀圭殑鐘舵��</param>
+    /// <returns></returns>
     [HttpGet]
-    public async  Task<bool > ChangeSteps (long id, CusExtendStep step)
+    public async  Task<int  > ChangeSteps (long CoutomerExRolesId, CusExtendStep step)
     {
 
-        var data=await  _fBS_CusExtendRep.AsQueryable().Includes(x=>x.TransactionRole).Where(x=>x.Id==id).FirstAsync();
+        var data=await  _fBS_CoutomerExRoleRep.AsQueryable().Where(x=>x.Id== CoutomerExRolesId).FirstAsync();
         if (data == null)
         {
             throw Oops.Oh("鏁版嵁涓嶅瓨鍦�");
         };
         if(data.steps== step)
         {
-            return true;
+            return 1;
         }
-        try
-        {
-            await _fBS_CusExtendRep.AsTenant().BeginTranAsync();
-            if (step == CusExtendStep.Pass)
-            {
-                //鏄鏍搁�氳繃
-
-                if (data.TransactionRole == null)
-                {
-                    throw Oops.Oh("鐢ㄦ埛鍏宠仈瑙掕壊澶辫触锛岀敤鎴锋病鏈夌敵璇疯瑙掕壊锛岃閲嶆柊鐢宠瑙掕壊");
-                }
-
-                var exrles = await _fBS_CoutomerExRoleRep.GetFirstAsync(x => x.CustomerId == data.CustomerId && x.ExRoleId == data.TransactionRole.Id);
-                if (exrles == null)
-                    throw Oops.Oh("鐢ㄦ埛鍏宠仈瑙掕壊澶辫触锛岀敤鎴锋病鏈夌敵璇疯瑙掕壊锛岃閲嶆柊鐢宠瑙掕壊");
-
-                exrles.HasFlsh = true;
-                await _fBS_CoutomerExRoleRep.UpdateAsync(exrles);
-
-               
-
-          
-
-            }
-            else
-                if(data.steps==  CusExtendStep.Pass)
-            {
-                //鏇存敼涓烘湭閫氳繃
-
-                if (data.TransactionRole == null)
-                {
-                    throw Oops.Oh("鐢ㄦ埛鍏宠仈瑙掕壊澶辫触锛岀敤鎴锋病鏈夌敵璇疯瑙掕壊锛岃閲嶆柊鐢宠瑙掕壊");
-                }
-                var exrles = await _fBS_CoutomerExRoleRep.GetFirstAsync(x => x.CustomerId == data.CustomerId && x.ExRoleId == data.TransactionRole.Id);
-                if (exrles == null)
-                    throw Oops.Oh("鐢ㄦ埛鍏宠仈瑙掕壊澶辫触锛岀敤鎴锋病鏈夌敵璇疯瑙掕壊锛岃閲嶆柊鐢宠瑙掕壊");
-
-                exrles.HasFlsh = false;
-                await _fBS_CoutomerExRoleRep.UpdateAsync(exrles);
-
-           
-
-              
-            }
-            data.steps = step;
-            await _fBS_CusExtendRep.AsUpdateable(data).ExecuteCommandAsync();
-            await _fBS_CusExtendRep.AsTenant().CommitTranAsync();
-            return true;
-
-        }
-        catch (Exception e)
-        {
-            await _fBS_CusExtendRep.AsTenant().RollbackTranAsync();
-            e.Message.LogError();
-             throw Oops.Oh("鏇存敼瀹℃牳鐘舵�佸け璐�"); ;
-        }
+        data.steps = step;
+       return await  _fBS_CoutomerExRoleRep.AsUpdateable(data).ExecuteCommandAsync();
    
     }
 
@@ -229,19 +188,19 @@
      await    _fBS_CusExtendRep.AsTenant().BeginTranAsync();
         try
         {
-            var entity = await _fBS_CusExtendRep.AsQueryable().Includes(x => x.TransactionRole).Where(x => x.Id == input.Id).FirstAsync() ?? throw Oops.Oh(ErrorCodeEnum.D1002);
-            if (entity != null)
-            {
-                var exrles = await _fBS_CoutomerExRoleRep.GetFirstAsync(x => x.CustomerId == entity.CustomerId && x.ExRoleId == entity.TransactionRole.Id);
-                if (exrles != null)
-                {
-                    await _fBS_CoutomerExRoleRep.DeleteAsync(exrles);
-                }
+            //var entity = await _fBS_CusExtendRep.AsQueryable().Includes(x => x.TransactionRole).Where(x => x.Id == input.Id).FirstAsync() ?? throw Oops.Oh(ErrorCodeEnum.D1002);
+            //if (entity != null)
+            //{
+            //    var exrles = await _fBS_CoutomerExRoleRep.GetFirstAsync(x => x.CustomerId == entity.CustomerId && x.ExRoleId == entity.TransactionRole.Id);
+            //    if (exrles != null)
+            //    {
+            //        await _fBS_CoutomerExRoleRep.DeleteAsync(exrles);
+            //    }
 
-                //await _fBS_CusExtendRep.FakeDeleteAsync(entity);   //鍋囧垹闄�
+            //    //await _fBS_CusExtendRep.FakeDeleteAsync(entity);   //鍋囧垹闄�
 
-                await _fBS_CusExtendRep.DeleteAsync(entity);   //鐪熷垹闄�
-            }
+            //    await _fBS_CusExtendRep.DeleteAsync(entity);   //鐪熷垹闄�
+            //}
 
           await   _fBS_CusExtendRep.AsTenant().CommitTranAsync();
         }
@@ -326,15 +285,15 @@
                     // 鏍¢獙骞惰繃婊ゅ繀濉熀鏈被鍨嬩负null鐨勫瓧娈�
                     var rows = pageItems.Where(x => {
                         if (!string.IsNullOrWhiteSpace(x.Error)) return false;
-                        if (x.CustomerId == null){
-                            x.Error = "鐢ㄦ埛ID涓嶈兘涓虹┖";
-                            return false;
-                        }
-                        if (!string.IsNullOrWhiteSpace(x.Error)) return false;
-                        if (x.steps == null){
-                            x.Error = "瀹℃牳姝ラ涓嶈兘涓虹┖";
-                            return false;
-                        }
+                        //if (x.CustomerId == null){
+                        //    x.Error = "鐢ㄦ埛ID涓嶈兘涓虹┖";
+                        //    return false;
+                        //}
+                        //if (!string.IsNullOrWhiteSpace(x.Error)) return false;
+                        //if (x.steps == null){
+                        //    x.Error = "瀹℃牳姝ラ涓嶈兘涓虹┖";
+                        //    return false;
+                        //}
                         return true;
                     }).Adapt<List<FBS_CusExtend>>();
                     
@@ -387,4 +346,95 @@
             return stream;
         }
     }
+
+    /// <summary>
+    /// 淇敼鐢ㄦ埛
+    /// </summary>
+    /// <param name="Param"></param>
+    /// <returns></returns>
+    [HttpPost]
+    public  async Task<int > UpDataCustormerUser(FBS_CustormerUsersInPut Param)
+    {
+        if(Param.Id==null)
+        {
+            throw Oops.Oh("Id涓虹┖");
+        }
+
+
+     var Data=   await  _fBS_CustormerUsersRep.GetFirstAsync(x => x.Id == Param.Id && x.CusExtendId == Param.CusExtendId);
+        if(Data==null)
+        {
+            throw Oops.Oh("鏁版嵁涓嶅瓨鍦�");
+        }
+
+       
+            Data = _mapper.Map(Param, Data);
+      
+
+     return  await   _fBS_CustormerUsersRep.AsUpdateable(Data).ExecuteCommandAsync();
+     
+    }
+
+
+    /// <summary>
+    /// 鑾峰彇鐢ㄦ埛淇℃伅
+    /// </summary>
+    /// <param name="CustormerUserId">杩欎釜鏄垪琛ㄤ腑琚佸紭鐢ㄦ埛琛ㄤ腑鐨処d</param>
+    /// <returns></returns>
+    [HttpGet]
+    public async Task<FBS_CustormerUsersOutput> GetCustormerUserInfo(long  CustormerUserId)
+    {
+        if (CustormerUserId == null)
+        {
+            throw Oops.Oh("Id涓虹┖");
+        }
+
+
+        var Data = await _fBS_CustormerUsersRep.GetFirstAsync(x => x.Id == CustormerUserId );
+        if (Data == null)
+        {
+            throw Oops.Oh("鏁版嵁涓嶅瓨鍦�");
+        }
+
+
+       
+
+
+        return Data.Adapt<FBS_CustormerUsersOutput>();
+
+    }
+
+    /// <summary>
+    /// 淇敼鐢ㄦ埛
+    /// </summary>
+    /// <param name="Param"></param>
+    /// <returns></returns>
+    [HttpPost]
+    public async Task<int> CareCustormerUser(FBS_CustormerUsersInPut Param)
+    {
+ 
+
+        var Data = await _fBS_CustormerUsersRep.GetFirstAsync(x => x.CusExtendId == Param.CusExtendId && x.PhoneNumber == Param.PhoneNumber);
+
+        if (Data != null)
+        {
+            throw Oops.Oh("鍚屼竴涓叕鍙镐笅鎵嬫満鍙蜂笉鑳介噸澶�");
+        }
+        Data = Param.Adapt<FBS_CustormerUsers>();
+        return await _fBS_CustormerUsersRep.AsInsertable(Data).ExecuteCommandAsync();
+
+    }
+    /// <summary>
+    /// 鍒犻櫎涓�涓敤鎴峰憳宸�
+    /// </summary>
+    /// <param name="CustormerUserId">杩欎釜鏄垪琛ㄤ腑琚佸紭鐢ㄦ埛琛ㄤ腑鐨処d</param>
+    /// <returns></returns>
+    [HttpDelete]
+    public async Task<bool> DelCustormerUser(long CustormerUserId)
+    {
+      
+        return await _fBS_CustormerUsersRep.DeleteByIdAsync(CustormerUserId);
+
+    }
+
 }
diff --git a/Admin.NET/FZFCGDD.ORDER.Application/FZFCGDD.ORDER.Application.csproj b/Admin.NET/FZFCGDD.ORDER.Application/FZFCGDD.ORDER.Application.csproj
index 0b5a247..1489422 100644
--- a/Admin.NET/FZFCGDD.ORDER.Application/FZFCGDD.ORDER.Application.csproj
+++ b/Admin.NET/FZFCGDD.ORDER.Application/FZFCGDD.ORDER.Application.csproj
@@ -16,4 +16,8 @@
     <ProjectReference Include="..\Plugins\Admin.NET.Plugin.GoView\Admin.NET.Plugin.GoView.csproj" />
   </ItemGroup>
 
+  <ItemGroup>
+    <Folder Include="Service\ShouyeGonggao\" />
+  </ItemGroup>
+
 </Project>
diff --git a/Admin.NET/FZFCGDD.ORDER.Application/Service/ShouyeGonggao/ShouyeGonggaoService.cs b/Admin.NET/FZFCGDD.ORDER.Application/Service/ShouyeGonggao/ShouyeGonggaoService.cs
index 607d374..2382839 100644
--- a/Admin.NET/FZFCGDD.ORDER.Application/Service/ShouyeGonggao/ShouyeGonggaoService.cs
+++ b/Admin.NET/FZFCGDD.ORDER.Application/Service/ShouyeGonggao/ShouyeGonggaoService.cs
@@ -590,11 +590,11 @@
                 {
                     tenderOrderBiddingOutput.IsTransferName = "鍚�";
                 }
-                var cusExtend = await _sqlSugarClient.Queryable<FBS_CusExtend>().Where(x => x.CustomerId == tenderOrderBiddingOutput.CreateUserId && x.TransactionCode == "GYS" && x.steps == CusExtendStep.Pass).FirstAsync();
-                if (cusExtend != null)
-                {
-                    tenderOrderBiddingOutput.ChangshangName = cusExtend.EnterpriseName;
-                }
+                //var cusExtend = await _sqlSugarClient.Queryable<FBS_CusExtend>().Where(x => x.cus == tenderOrderBiddingOutput.CreateUserId && x.TransactionCode == "GYS" && x.steps == CusExtendStep.Pass).FirstAsync();
+                //if (cusExtend != null)
+                //{
+                //    tenderOrderBiddingOutput.ChangshangName = cusExtend.EnterpriseName;
+                //}
 
             }
         }
diff --git a/Admin.NET/cylsg.utility/Extend/StringEx.cs b/Admin.NET/cylsg.utility/Extend/StringEx.cs
index 095dbcc..7d99980 100644
--- a/Admin.NET/cylsg.utility/Extend/StringEx.cs
+++ b/Admin.NET/cylsg.utility/Extend/StringEx.cs
@@ -133,7 +133,26 @@
                 return masked;
             }
         }
+        /// <summary>
+        /// 鎺╃爜涓棿瀛楃锛堜繚鐣欏墠3浣嶅拰鍚�4浣嶏紝涓棿鐢�*浠f浛锛�
+        /// </summary>
+        /// <param name="input">鍘熷瀛楃涓�</param>
+        /// <param name="keepStart">淇濈暀寮�澶村瓧绗︽暟锛堥粯璁�3锛�</param>
+        /// <param name="keepEnd">淇濈暀缁撳熬瀛楃鏁帮紙榛樿4锛�</param>
+        /// <param name="maskChar">鎺╃爜瀛楃锛堥粯璁�*锛�</param>
+        /// <returns>澶勭悊鍚庣殑鎺╃爜瀛楃涓�</returns>
+        public static string MaskMiddle(this string input, int keepStart = 3, int keepEnd = 4, char maskChar = '*')
+        {
+            // 绌哄�兼垨闀垮害涓嶈冻鏃剁洿鎺ヨ繑鍥炲師濮嬪��
+            if (string.IsNullOrEmpty(input) || input.Length <= keepStart + keepEnd)
+                return $"{input.Substring(0, 1)}*{input.Substring(input.Length - 1, 1)}";
 
+            // 璁$畻闇�瑕佹帺鐮佺殑瀛楃鏁�
+            int maskLength = input.Length - keepStart - keepEnd;
+
+            // 鎷兼帴缁撴灉锛氬墠3浣� + maskLength涓�* + 鍚�4浣�
+            return $"{input.Substring(0, keepStart)}{new string(maskChar, maskLength)}{input.Substring(input.Length - keepEnd)}";
+        }
 
         #region 鏃堕棿鍖洪棿瀛楃涓茶浆鍏跺疄鍜岀粨鏉熸椂闂�
         /// <summary>

--
Gitblit v1.9.1