sunpengfei
2025-08-15 49452eca97d0fa062d7180ab24d61f5e5f68c52c
feat:开发
2个文件已添加
10个文件已修改
590 ■■■■■ 已修改文件
FlexJobApi.Core/Entities/UserServer/Enterprises/Enterprise.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Entities/UserServer/Users/User.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Enums/Common/EnumErrorCodeType.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Enums/Users/EnumUserSource.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/FlexJobApi.Core.xml 231 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/UserServer/Users/Commands/SyncEnterpriseUserCommand.cs 197 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Utils/BaiduUtils/BaiduOcrBusinessLicenseResult.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Utils/BaiduUtils/BaiduOcrUtils.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.UserServer.Application/Users/Commands/SyncEnterpriseUserCommandHandler.cs 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.UserServer.Application/Users/Commands/UserInfoCommandHandler.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Web.Entry/appsettings.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Entities/UserServer/Enterprises/Enterprise.cs
@@ -88,7 +88,27 @@
        public DictionaryData IndustryType { get; set; }
        /// <summary>
        /// 主营业务
        /// 企业类型
        /// </summary>
        public string EnterpriseType { get; set; }
        /// <summary>
        /// 注册资本
        /// </summary>
        public string RegisteredCapital { get; set; }
        /// <summary>
        /// 成立日期
        /// </summary>
        public string EstablishmentDate { get; set; }
        /// <summary>
        /// 企业地址
        /// </summary>
        public string Address { get; set; }
        /// <summary>
        /// 经营范围
        /// </summary>
        public string MainBusiness { get; set; }
FlexJobApi.Core/Entities/UserServer/Users/User.cs
@@ -260,6 +260,16 @@
        /// </summary>
        public List<EnterpriseUserCollect> EnterpriseUserCollects { get; set; }
        /// <summary>
        /// 数据来源
        /// </summary>
        public EnumDataSource? DataSource { get; set; }
        /// <summary>
        /// 数据来源Id
        /// </summary>
        public Guid? DataSourceId { get; set; }
        public void Configure(EntityTypeBuilder<User> entityBuilder, DbContext dbContext, Type dbContextLocator)
        {
            entityBuilder
FlexJobApi.Core/Enums/Common/EnumErrorCodeType.cs
@@ -26,7 +26,7 @@
        [ErrorCodeItemMetadata("{0}不存在")]
        s404 = 404,
        /// <summary>
        /// 该{0}已存在,请确认后再试
        /// {0}已存在,请确认后再试
        /// </summary>
        [ErrorCodeItemMetadata("{0}已存在,请确认后再试")]
        s405 = 405,
FlexJobApi.Core/Enums/Users/EnumUserSource.cs
New file
@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FlexJobApi.Core
{
    /// <summary>
    /// 数据来源
    /// </summary>
    public enum EnumDataSource
    {
        /// <summary>
        /// 818
        /// </summary>
        HumanResources = 10
    }
}
FlexJobApi.Core/FlexJobApi.Core.xml
@@ -1244,9 +1244,29 @@
            所属行业
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.Enterprise.EnterpriseType">
            <summary>
            企业类型
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.Enterprise.RegisteredCapital">
            <summary>
            注册资本
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.Enterprise.EstablishmentDate">
            <summary>
            成立日期
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.Enterprise.Address">
            <summary>
            企业地址
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.Enterprise.MainBusiness">
            <summary>
            主营业务
            经营范围
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.Enterprise.Contacts">
@@ -2157,6 +2177,16 @@
            谁家企业收藏/联系我
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.User.DataSource">
            <summary>
            数据来源
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.User.DataSourceId">
            <summary>
            数据来源Id
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.UserAuth">
            <summary>
            用户认证
@@ -2284,7 +2314,7 @@
        </member>
        <member name="F:FlexJobApi.Core.EnumErrorCodeType.s405">
            <summary>
            该{0}已存在,请确认后再试
            {0}已存在,请确认后再试
            </summary>
        </member>
        <member name="F:FlexJobApi.Core.EnumErrorCodeType.s406">
@@ -3140,6 +3170,16 @@
        <member name="F:FlexJobApi.Core.EnumUserRealMethod.Face">
            <summary>
            刷脸认证
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.EnumDataSource">
            <summary>
            数据来源
            </summary>
        </member>
        <member name="F:FlexJobApi.Core.EnumDataSource.HumanResources">
            <summary>
            818
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.EnumUserStatus">
@@ -8509,6 +8549,191 @@
            状态
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.SyncEnterpriseUserCommand">
            <summary>
            同步企业用户
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommand.DataSource">
            <summary>
            数据来源
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommand.DataSourceId">
            <summary>
            数据来源Id
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommand.Password">
            <summary>
            密码
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommand.Name">
            <summary>
            姓名
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommand.UserName">
            <summary>
            用户名
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommand.PhoneNumber">
            <summary>
            手机号
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommand.Enterprise">
            <summary>
            企业
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise">
            <summary>
            同步企业用户
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise.EnterpriseName">
            <summary>
            企业全称
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise.SocietyCreditCode">
            <summary>
            统一社会信用代码
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise.LicenseImage">
            <summary>
            营业执照照片
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise.LegalPerson">
            <summary>
            法人姓名
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise.LegalIdentity">
            <summary>
            法人身份证号
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise.ProvinceCode">
            <summary>
            所在省份编号
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise.CityCode">
            <summary>
            所在城市编号
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise.IndustryTypeCode">
            <summary>
            所属行业编号
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise.EnterpriseType">
            <summary>
            企业类型
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise.RegisteredCapital">
            <summary>
            注册资本
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise.EstablishmentDate">
            <summary>
            成立日期
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise.Address">
            <summary>
            企业地址
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise.MainBusiness">
            <summary>
            经营范围
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise.Contacts">
            <summary>
            联系人
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise.ContactPhoneNumber">
            <summary>
            联系电话
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise.ContactEmail">
            <summary>
            联系邮箱
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise.PayAccess">
            <summary>
            支付通道
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise.BankName">
            <summary>
            开户总行
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise.BankBranchName">
            <summary>
            开户支行
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise.BankCard">
            <summary>
            银行账户
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise.IsCheckedBankCard">
            <summary>
            是否已校验银行账户
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise.RealAccess">
            <summary>
            实名通道
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise.RealVerifyCost">
            <summary>
            实名费用
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise.SignCost">
            <summary>
            签约费用
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise.MergeSignCost">
            <summary>
            一口价
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise.SmsAccess">
            <summary>
            短信通道
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise.SmsCost">
            <summary>
            短信费用
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterprise.IsReal">
            <summary>
            是否实名
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.GetEnterpriseLoginInfoQuery">
            <summary>
            查询企业用户登录信息
@@ -9099,7 +9324,7 @@
            企业地址
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.BaiduOcrBusinessLicenseResultModel.BusinessScope">
        <member name="P:FlexJobApi.Core.BaiduOcrBusinessLicenseResultModel.MainBusiness">
            <summary>
            经营范围
            </summary>
FlexJobApi.Core/Models/UserServer/Users/Commands/SyncEnterpriseUserCommand.cs
@@ -1,5 +1,8 @@
using System;
using Mapster;
using MediatR;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -9,8 +12,198 @@
    /// <summary>
    /// 同步企业用户
    /// </summary>
    public class SyncEnterpriseUserCommand
    [Resource([EnumResourceController.User])]
    public class SyncEnterpriseUserCommand : IRequest<Guid>
    {
        /// <summary>
        /// 数据来源
        /// </summary>
        public EnumDataSource? DataSource { get; set; }
        /// <summary>
        /// 数据来源Id
        /// </summary>
        public Guid? DataSourceId { get; set; }
        /// <summary>
        /// 密码
        /// </summary>
        public string Password { get; set; }
        /// <summary>
        /// 姓名
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 用户名
        /// </summary>
        public string UserName { get; set; }
        /// <summary>
        /// 手机号
        /// </summary>
        public string PhoneNumber { get; set; }
        /// <summary>
        /// 企业
        /// </summary>
        [AdaptIgnore]
        public SyncEnterpriseUserCommandEnterprise Enterprise { get; set; }
    }
    /// <summary>
    /// 同步企业用户
    /// </summary>
    public class SyncEnterpriseUserCommandEnterprise
    {
        /// <summary>
        /// 企业全称
        /// </summary>
        [Required]
        [MaxLength(128)]
        public string EnterpriseName { get; set; }
        /// <summary>
        /// 统一社会信用代码
        /// </summary>
        [Required]
        [MaxLength(18)]
        public string SocietyCreditCode { get; set; }
        /// <summary>
        /// 营业执照照片
        /// </summary>
        public string LicenseImage { get; set; }
        /// <summary>
        /// 法人姓名
        /// </summary>
        [MaxLength(32)]
        public string LegalPerson { get; set; }
        /// <summary>
        /// 法人身份证号
        /// </summary>
        [MaxLength(18)]
        public string LegalIdentity { get; set; }
        /// <summary>
        /// 所在省份编号
        /// </summary>
        public string ProvinceCode { get; set; }
        /// <summary>
        /// 所在城市编号
        /// </summary>
        public string CityCode { get; set; }
        /// <summary>
        /// 所属行业编号
        /// </summary>
        public string IndustryTypeCode { get; set; }
        /// <summary>
        /// 企业类型
        /// </summary>
        public string EnterpriseType { get; set; }
        /// <summary>
        /// 注册资本
        /// </summary>
        public string RegisteredCapital { get; set; }
        /// <summary>
        /// 成立日期
        /// </summary>
        public string EstablishmentDate { get; set; }
        /// <summary>
        /// 企业地址
        /// </summary>
        public string Address { get; set; }
        /// <summary>
        /// 经营范围
        /// </summary>
        public string MainBusiness { get; set; }
        /// <summary>
        /// 联系人
        /// </summary>
        [MaxLength(32)]
        public string Contacts { get; set; }
        /// <summary>
        /// 联系电话
        /// </summary>
        [MaxLength(11)]
        public string ContactPhoneNumber { get; set; }
        /// <summary>
        /// 联系邮箱
        /// </summary>
        public string ContactEmail { get; set; }
        /// <summary>
        /// 支付通道
        /// </summary>
        public EnumPayAccess? PayAccess { get; set; }
        /// <summary>
        /// 开户总行
        /// </summary>
        public string BankName { get; set; }
        /// <summary>
        /// 开户支行
        /// </summary>
        public string BankBranchName { get; set; }
        /// <summary>
        /// 银行账户
        /// </summary>
        [MaxLength(32)]
        public string BankCard { get; set; }
        /// <summary>
        /// 是否已校验银行账户
        /// </summary>
        public bool IsCheckedBankCard { get; set; }
        /// <summary>
        /// 实名通道
        /// </summary>
        public EnumRealAccess? RealAccess { get; set; }
        /// <summary>
        /// 实名费用
        /// </summary>
        public decimal? RealVerifyCost { get; set; }
        /// <summary>
        /// 签约费用
        /// </summary>
        public decimal? SignCost { get; set; }
        /// <summary>
        /// 一口价
        /// </summary>
        public decimal? MergeSignCost { get; set; }
        /// <summary>
        /// 短信通道
        /// </summary>
        public EnumSmsAccess? SmsAccess { get; set; }
        /// <summary>
        /// 短信费用
        /// </summary>
        public decimal SmsCost { get; set; }
        /// <summary>
        /// 是否实名
        /// </summary>
        public bool IsReal { get; set; }
    }
}
FlexJobApi.Core/Utils/BaiduUtils/BaiduOcrBusinessLicenseResult.cs
@@ -85,6 +85,6 @@
        /// <summary>
        /// 经营范围
        /// </summary>
        public string BusinessScope { get; set; }
        public string MainBusiness { get; set; }
    }
}
FlexJobApi.Core/Utils/BaiduUtils/BaiduOcrUtils.cs
@@ -61,7 +61,7 @@
                RegisteredCapital = result.WordsResult["注册资本"].Words,
                EstablishmentDate = result.WordsResult["成立日期"].Words,
                Address = result.WordsResult["地址"].Words,
                BusinessScope = result.WordsResult["经营范围"].Words,
                MainBusiness = result.WordsResult["经营范围"].Words,
            };
            return result;
        }
FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml
@@ -296,7 +296,7 @@
        </member>
        <member name="F:FlexJobApi.UserServer.Application.EnumUserErrorCodeType.u1010">
            <summary>
            该手机号已被注册
            手机号已被注册
            </summary>
        </member>
        <member name="F:FlexJobApi.UserServer.Application.EnumUserErrorCodeType.u1100">
@@ -687,6 +687,24 @@
            <param name="cancellationToken"></param>
            <returns></returns>
        </member>
        <member name="T:FlexJobApi.UserServer.Application.SyncEnterpriseUserCommandHandler">
            <summary>
            </summary>
        </member>
        <member name="M:FlexJobApi.UserServer.Application.SyncEnterpriseUserCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.User},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.Enterprise})">
            <summary>
            </summary>
        </member>
        <member name="M:FlexJobApi.UserServer.Application.SyncEnterpriseUserCommandHandler.Handle(FlexJobApi.Core.SyncEnterpriseUserCommand,System.Threading.CancellationToken)">
            <summary>
            同步企业用户
            </summary>
            <param name="request"></param>
            <param name="cancellationToken"></param>
            <returns></returns>
        </member>
        <member name="T:FlexJobApi.UserServer.Application.UserInfos.Commands.UserInfoCommandHandler">
            <summary>
            用户信息命令处理器
FlexJobApi.UserServer.Application/Users/Commands/SyncEnterpriseUserCommandHandler.cs
New file
@@ -0,0 +1,70 @@
using FlexJobApi.Core;
using Furion.DatabaseAccessor;
using Furion.FriendlyException;
using Mapster;
using MediatR;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FlexJobApi.UserServer.Application
{
    /// <summary>
    ///
    /// </summary>
    public class SyncEnterpriseUserCommandHandler(
            IRepository<User> repUser,
            IRepository<Enterprise> repEnterprise
        ) :
        IRequestHandler<SyncEnterpriseUserCommand, Guid>
    {
        private readonly IRepository<User> repUser = repUser;
        private readonly IRepository<Enterprise> repEnterprise = repEnterprise;
        /// <summary>
        /// 同步企业用户
        /// </summary>
        /// <param name="request"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task<Guid> Handle(SyncEnterpriseUserCommand request, CancellationToken cancellationToken)
        {
            var enterprise = await repEnterprise.AsQueryable()
                .Where(it => it.SocietyCreditCode == request.Enterprise.SocietyCreditCode)
                .FirstOrDefaultAsync(cancellationToken);
            if (enterprise == null)
            {
                enterprise = new Enterprise();
                request.Enterprise.Adapt(enterprise);
                await repEnterprise.InsertAsync(enterprise);
            }
            else
            {
                request.Enterprise.Adapt(enterprise);
                await repEnterprise.UpdateAsync(enterprise);
            }
            var user = await repUser.AsQueryable()
                .Where(it => it.Type == EnumUserType.Enterprise && it.EnterpriseId == enterprise.Id && it.UserName == request.UserName)
                .FirstOrDefaultAsync(cancellationToken);
            if (user == null)
            {
                var exist = await repUser.AsQueryable().AsNoTracking()
                    .AnyAsync(it => it.Type == EnumUserType.Enterprise && it.UserName == request.UserName);
                if (exist)
                    throw Oops.Oh(EnumErrorCodeType.s405, "账号");
                user = new User();
                request.Adapt(user);
                await repUser.InsertAsync(user);
            }
            else
            {
                request.Adapt(user);
                await repUser.UpdateAsync(user);
            }
            return user.Id;
        }
    }
}
FlexJobApi.UserServer.Application/Users/Commands/UserInfoCommandHandler.cs
@@ -62,5 +62,6 @@
            await rep.UpdateAsync(entity);
            return entity.UserRoles.Count;
        }
    }
}
FlexJobApi.Web.Entry/appsettings.json
@@ -42,13 +42,6 @@
      "RoleSessionName": "SessionTest",
      "Policy": "{\"Version\":\"1\",\"Statement\":[{\"Effect\":\"Allow\",\"Action\":\"oss:PutObject\",\"Resource\":[\"acs:oss:*:*:waterdroptest2/*\",\"acs:oss:*:*:parkmanagement/*\",\"acs:oss:*:*:jurenlian/*\"]}]}",
      "DurationSeconds": 3600
    }
  },
  "Baidu": {
    "Ocr": {
      "Key": "Htx3y6eFnlW92WvHx9aW44f8",
      "Secret": "k1rDa3vjVtArrQio9LtR5AjqARSw45WO"
    }
  },
  "SMS": {
    "Enable": true,
@@ -95,4 +88,11 @@
      "BankWalletAccountOpen": "SMS_473860301"
    }
  }
  },
  "Baidu": {
    "Ocr": {
      "Key": "Htx3y6eFnlW92WvHx9aW44f8",
      "Secret": "k1rDa3vjVtArrQio9LtR5AjqARSw45WO"
    }
  }
}