移动系统liao
2025-08-20 ad64f9d240fb054856afe4ab9523062b2bc079b9
完成客户企业资料改造和相关表修改和建立,基础APi建立完成
23个文件已修改
1个文件已添加
2092 ■■■■ 已修改文件
Admin.NET/Admin.NET.Application/Configuration/Logging.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/Admin.NET.Core/Const/CacheConst.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/Admin.NET.Core/Const/ClaimConst.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/EzUpFile/UpFileController.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCTB.NET.API.Application/Auth/AuthService.cs 142 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCTB.NET.API.Application/Auth/DTO/CustomerLoginOutput.cs 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCTB.NET.API.Application/FZCTB.NET.API.Application.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCTB.NET.API.Application/User/CustomerService.cs 438 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCTB.NET.API.Application/User/DTO/DTOS.cs 264 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.NET.MD/ConfigMd/FBS_EnterpriseType.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.NET.MD/CutomerMd/Extend/FBS_CusExtend.cs 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_CoutomerExRole.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_Customer.cs 223 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_CustomerRole.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_CustormerUsers.cs 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_ExRole.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.NET.SYSService/CustomerSYS/CustomerManagerS.cs 137 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/Dto/FBS_CusExtendDto.cs 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/Dto/FBS_CusExtendInput.cs 179 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/Dto/FBS_CusExtendOutput.cs 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/FBS_CusExtendService.cs 234 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZFCGDD.ORDER.Application/FZFCGDD.ORDER.Application.csproj 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZFCGDD.ORDER.Application/Service/ShouyeGonggao/ShouyeGonggaoService.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/cylsg.utility/Extend/StringEx.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/Admin.NET.Application/Configuration/Logging.json
@@ -43,7 +43,7 @@
      "JsonBehavior": "None", // 是否输出Json,默认None(OnlyJson、All)
      "JsonIndented": false, // 是否格式化Json
      "UseUtcTimestamp": false, // 时间格式UTC、LOCAL
      "ConsoleLog": true // 是否显示控制台日志
      "ConsoleLog": false // 是否显示控制台日志
    }
  }
}
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:";
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";
}
Admin.NET/EzUpFile/UpFileController.cs
@@ -1,5 +1,6 @@
using 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 正面  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 正面  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();
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);
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>
    /// 统一社会信用代码
    /// </summary>
    [Required(ErrorMessage = "统一社会信用代码为必填项")]
    [SugarColumn(ColumnDescription = "统一社会信用代码")]
    public string UnifiedSocialCreditCode { get; set; }
    /// <summary>
    /// 是否是管理
    /// </summary>
    public bool  IsManger { get; set; }
}
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>
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)
            {
                //是更改,需要工改cer的值
             var exrolerep=     await   _fBS_CustomerExRoleRep.GetFirstAsync(x=>x.ExRoleId== rols.Id&&x.CustomerId==tab.CustomerId);
                if(exrolerep!=null)
                //是更改,需要更该所有roles的值
             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 的ID</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 的ID</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;
    }
}
Admin.NET/FZCTB.NET.API.Application/User/DTO/DTOS.cs
@@ -4,6 +4,9 @@
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
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>
    /// 法定代表人联系电话
    /// </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; }
}
/// <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>
    /// 主体角色代码不能伪空 原字段 TransactionCode
    /// </summary>
    [Required(ErrorMessage = "角色代码 你能为空")]
    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>
    /// 统一社会信用代码
    /// </summary>
    [Required(ErrorMessage = "统一社会信用代码不能为空")]
    public virtual string UnifiedSocialCreditCode { get; set; }
    /// <summary>
    /// 注册资金
    /// </summary>
    [Required(ErrorMessage = "注册资金不能为空")]
    public virtual string RegisteredCapital { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [Required(ErrorMessage = "法定代表人姓名不能为空")]
    public virtual string LegalRepresentativeName { get; set; }
    /// <summary>
    /// 法定代表人身份证文件路径
    /// </summary>
    [Required(ErrorMessage = "法定代表人身份证文件路径不能为空")]
    public virtual string LegalRepresentativeIdCard { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [Required(ErrorMessage = "法定代表人姓名不能为空")]
    public virtual string LegalRepresentativeIdNumber { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [Required(ErrorMessage = "法定代表人姓名不能为空")]
    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; }
}
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>
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>
    /// 交易主体 代码 同角色代码
    /// </summary>
    [Required(ErrorMessage = "交易主体代码为必填项")]
    [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 = "法定代表人姓名")]
    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>
Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_CoutomerExRole.cs
@@ -5,6 +5,7 @@
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
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;
}
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>
    /// 最新登录Ip
@@ -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相同则报错
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
Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_CustormerUsers.cs
New file
@@ -0,0 +1,128 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
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 = "联系人的正式姓名", 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 = "联系人头像的存储路径或URL", 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>
    /// 最新登录Ip
    /// </summary>
    [SugarColumn(ColumnDescription = "最新登录Ip", 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; }
}
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>
    /// 名称
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; }
    }
}
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; }
}
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 = "法定代表人姓名不能为空")]
    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 = "法定代表人姓名不能为空")]
    [MaxLength(255, ErrorMessage = "法定代表人姓名字符长度不能超过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 = "法定代表人姓名不能为空")]
    [MaxLength(255, ErrorMessage = "法定代表人姓名字符长度不能超过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("*法定代表人姓名", 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; }
}
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;
}
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">该ID是用户角色列表中的Id</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">这个是列表中袁弘用户表中的Id</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">这个是列表中袁弘用户表中的Id</param>
    /// <returns></returns>
    [HttpDelete]
    public async Task<bool> DelCustormerUser(long CustormerUserId)
    {
        return await _fBS_CustormerUsersRep.DeleteByIdAsync(CustormerUserId);
    }
}
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>
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;
                //}
            }
        }
Admin.NET/cylsg.utility/Extend/StringEx.cs
@@ -133,7 +133,26 @@
                return masked;
            }
        }
        /// <summary>
        /// 掩码中间字符(保留前3位和后4位,中间用*代替)
        /// </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>