sunpengfei
2025-08-06 c914975bffe90f808a05dba2c53d4a750e8403c0
feat:企业开发
4个文件已添加
1个文件已删除
9个文件已修改
1017 ■■■■ 已修改文件
FlexJobApi.Core/FlexJobApi.Core.xml 355 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/Common/DictionaryDataQueryResult.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/Main/Dictionaries/Queries/GetDictionaryDatasQuery.cs 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/User/Enterprises/Commands/SaveEnterpriseCommand.cs 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/User/Enterprises/Queries/GetEnterpriseElectronSignSettingQuery.cs 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/User/Enterprises/Queries/GetEnterpriseQuery.cs 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/User/Enterprises/Queries/GetEnterpriseSmsSettingQuery.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/User/Enterprises/Queries/GetEnterprisesQuery.cs 101 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/User/UserInfos/Queries/GetOperationUserInfosQuery.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Utils/DbUtils/DbUtils.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Utils/JsonUtils/JsonSerializerProvider.cs 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.User.Application/Enterprises/Commands/EnterpriseCommandHandler.cs 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.User.Application/Enterprises/Queries/EnterprisesQueryHandler.cs 122 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.User.Application/FlexJobApi.User.Application.xml 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/FlexJobApi.Core.xml
@@ -2165,16 +2165,6 @@
            编号
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.DictionaryDataQueryResult">
            <summary>
            数据字典查询结果
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.DictionaryDataQueryResult.Content">
            <summary>
            内容
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.DeleteDictionaryCategoryCommand">
            <summary>
            删除数据字典类别
@@ -2455,11 +2445,6 @@
            类别名称
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetDictionaryDatasQueryResultItem.Category">
            <summary>
            类别
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetDictionaryDatasQueryResultItem.ParentId">
            <summary>
            上级Id
@@ -2590,6 +2575,26 @@
            保存企业
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SaveEnterpriseCommand.EnterpriseName">
            <summary>
            企业全称
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SaveEnterpriseCommand.SocietyCreditCode">
            <summary>
            统一社会信用代码
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SaveEnterpriseCommand.LegalPerson">
            <summary>
            法人姓名
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SaveEnterpriseCommand.LegalIdentity">
            <summary>
            法人身份证号
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SaveEnterpriseCommand.EnterpriseAuth">
            <summary>
            企业认证
@@ -2600,29 +2605,14 @@
            所在省份Id
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SaveEnterpriseCommand.Province">
            <summary>
            所在省份
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SaveEnterpriseCommand.CityId">
            <summary>
            所在城市Id
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SaveEnterpriseCommand.City">
            <summary>
            所在城市
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SaveEnterpriseCommand.IndustryTypeId">
            <summary>
            所属行业Id
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SaveEnterpriseCommand.IndustryType">
            <summary>
            所属行业
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.SaveEnterpriseCommand.MainBusiness">
@@ -2730,6 +2720,181 @@
            短信费用
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.GetEnterpriseElectronSignSettingQuery">
            <summary>
            查询企业电子签配置
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseElectronSignSettingQuery.Id">
            <summary>
            Id
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseElectronSignSettingQueryResult.Id">
            <summary>
            Id
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseElectronSignSettingQueryResult.RealAccess">
            <summary>
            实名通道
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseElectronSignSettingQueryResult.RealVerifyCost">
            <summary>
            实名费用
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseElectronSignSettingQueryResult.SignCost">
            <summary>
            签约费用
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseElectronSignSettingQueryResult.MergeSignCost">
            <summary>
            一口价
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.GetEnterpriseQuery">
            <summary>
            查询企业详情
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseQuery.Id">
            <summary>
            Id
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.GetEnterpriseQueryResult">
            <summary>
            查询企业详情-结果
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseQueryResult.Id">
            <summary>
            Id
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseQueryResult.EnterpriseName">
            <summary>
            企业全称
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseQueryResult.SocietyCreditCode">
            <summary>
            统一社会信用代码
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseQueryResult.LegalPerson">
            <summary>
            法人姓名
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseQueryResult.LegalIdentity">
            <summary>
            法人身份证号
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseQueryResult.EnterpriseAuth">
            <summary>
            企业认证
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseQueryResult.ProvinceContent">
            <summary>
            所在省份
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseQueryResult.CityContent">
            <summary>
            所在城市
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseQueryResult.IndustryTypeContent">
            <summary>
            所属行业
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseQueryResult.MainBusiness">
            <summary>
            主营业务
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseQueryResult.Contacts">
            <summary>
            联系人
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseQueryResult.ContactPhoneNumber">
            <summary>
            联系电话
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseQueryResult.ContactEmail">
            <summary>
            联系邮箱
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseQueryResult.UserName">
            <summary>
            账号
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.GetEnterpriseQueryResultAuth">
            <summary>
            查询企业详情-结果-企业认证
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseQueryResultAuth.EnterpriseName">
            <summary>
            企业全称
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseQueryResultAuth.SocietyCreditCode">
            <summary>
            统一社会信用代码
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseQueryResultAuth.LegalPerson">
            <summary>
            法人姓名
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseQueryResultAuth.LegalIdentity">
            <summary>
            法人身份证号
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.GetEnterpriseSmsSettingQuery">
            <summary>
            查询企业短信配置
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseSmsSettingQuery.Id">
            <summary>
            Id
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.GetEnterpriseSmsSettingQueryResult">
            <summary>
            查询企业短信配置-结果
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseSmsSettingQueryResult.Id">
            <summary>
            Id
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseSmsSettingQueryResult.SmsAccess">
            <summary>
            短信通道
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseSmsSettingQueryResult.SmsCost">
            <summary>
            短信费用
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.GetEnterprisesQuery">
            <summary>
            查询企业信息分页列表数据
@@ -2755,89 +2920,54 @@
            Id
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterprisesQueryResultItem.EnterpriseName">
            <summary>
            企业全称
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterprisesQueryResultItem.LegalPerson">
            <summary>
            法人姓名
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterprisesQueryResultItem.SocietyCreditCode">
            <summary>
            统一社会信用代码
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterprisesQueryResultItem.IsReal">
            <summary>
            是否实名
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterprisesQueryResultItem.Contacts">
            <summary>
            联系人
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterprisesQueryResultItem.ContactNumber">
        <member name="P:FlexJobApi.Core.GetEnterprisesQueryResultItem.ContactPhoneNumber">
            <summary>
            联系电话
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterprisesQueryResultItem.ProvinceId">
            <summary>
            所在省份Id
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterprisesQueryResultItem.Province">
        <member name="P:FlexJobApi.Core.GetEnterprisesQueryResultItem.ProvinceContent">
            <summary>
            所在省份
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterprisesQueryResultItem.CityId">
            <summary>
            所在城市Id
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterprisesQueryResultItem.City">
        <member name="P:FlexJobApi.Core.GetEnterprisesQueryResultItem.CityContent">
            <summary>
            所在城市
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterprisesQueryResultItem.IndustryTypeId">
            <summary>
            所属行业Id
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterprisesQueryResultItem.IndustryType">
        <member name="P:FlexJobApi.Core.GetEnterprisesQueryResultItem.IndustryTypeContent">
            <summary>
            所属行业
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterprisesQueryResultItem.IsCheckedBankCard">
            <summary>
            是否已校验银行账户
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterprisesQueryResultItem.RealAccess">
            <summary>
            实名通道
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterprisesQueryResultItem.SmsAccess">
            <summary>
            短信通道
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterprisesQueryResultItem.IsConfigured">
            <summary>
            是否已配置
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.GetEnterprisesQueryResultItemAuth">
            <summary>
            查询企业信息分页列表数据-结果-项-认证
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterprisesQueryResultItemAuth.EnterpriseName">
            <summary>
            企业全称
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterprisesQueryResultItemAuth.LegalPerson">
            <summary>
            法人姓名
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterprisesQueryResultItemAuth.SocietyCreditCode">
            <summary>
            统一社会信用代码
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterprisesQueryResultItemAuth.IsReal">
            <summary>
            是否实名
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.DeleteMenuCommand">
@@ -4205,6 +4335,16 @@
            <param name="cancellationToken"></param>
            <returns></returns>
        </member>
        <member name="M:FlexJobApi.Core.DbUtils.GetPagedListAsync``1(FlexJobApi.Core.PagedListQueryPageModel,System.Linq.IQueryable{``0},System.Threading.CancellationToken)">
            <summary>
            查询分页列表数据
            </summary>
            <typeparam name="TItem"></typeparam>
            <param name="page"></param>
            <param name="q"></param>
            <param name="cancellationToken"></param>
            <returns></returns>
        </member>
        <member name="M:FlexJobApi.Core.DbUtils.OrderBy``1(System.Linq.IQueryable{``0},System.Collections.Generic.List{FlexJobApi.Core.PagedListQueryPageModelOrderInput})">
            <summary>
            排序
@@ -4633,6 +4773,43 @@
            <param name="errors"></param>
            <returns></returns>
        </member>
        <member name="T:FlexJobApi.Core.Utils.JsonUtils.NewtonsoftJsonSerializerProvider">
            <summary>
            Newtonsoft.Json 实现
            </summary>
        </member>
        <member name="M:FlexJobApi.Core.Utils.JsonUtils.NewtonsoftJsonSerializerProvider.Serialize(System.Object,System.Object)">
            <summary>
            序列化对象
            </summary>
            <param name="value"></param>
            <param name="jsonSerializerOptions"></param>
            <returns></returns>
        </member>
        <member name="M:FlexJobApi.Core.Utils.JsonUtils.NewtonsoftJsonSerializerProvider.Deserialize``1(System.String,System.Object)">
            <summary>
            反序列化字符串
            </summary>
            <typeparam name="T"></typeparam>
            <param name="json"></param>
            <param name="jsonSerializerOptions"></param>
            <returns></returns>
        </member>
        <member name="M:FlexJobApi.Core.Utils.JsonUtils.NewtonsoftJsonSerializerProvider.Deserialize(System.String,System.Type,System.Object)">
            <summary>
            反序列化字符串
            </summary>
            <param name="json"></param>
            <param name="returnType"></param>
            <param name="jsonSerializerOptions"></param>
            <returns></returns>
        </member>
        <member name="M:FlexJobApi.Core.Utils.JsonUtils.NewtonsoftJsonSerializerProvider.GetSerializerOptions">
            <summary>
            返回读取全局配置的 JSON 选项
            </summary>
            <returns></returns>
        </member>
        <member name="P:FlexJobApi.Core.CurrentLogier.UserInfoId">
            <summary>
            用户Id
FlexJobApi.Core/Models/Common/DictionaryDataQueryResult.cs
File was deleted
FlexJobApi.Core/Models/Main/Dictionaries/Queries/GetDictionaryDatasQuery.cs
@@ -49,19 +49,12 @@
        /// <summary>
        /// 类别编号
        /// </summary>
        [AdaptIgnore]
        public string CategoryCode => Category?.Code;
        public string CategoryCode { get; set; }
        /// <summary>
        /// 类别名称
        /// </summary>
        [AdaptIgnore]
        public string CategoryName => Category?.Name;
        /// <summary>
        /// 类别
        /// </summary>
        public GetDictionaryDatasQueryResultItemCategory Category { get; set; }
        public string CategoryName { get; set; }
        /// <summary>
        /// 上级Id
FlexJobApi.Core/Models/User/Enterprises/Commands/SaveEnterpriseCommand.cs
@@ -1,4 +1,5 @@
using System;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
@@ -14,10 +15,42 @@
    public class SaveEnterpriseCommand : SaveDataCommand
    {
        /// <summary>
        /// 企业认证
        /// 企业全称
        /// </summary>
        [Required]
        public SaveEnterpriseCommandAuth EnterpriseAuth { get; set; }
        [MaxLength(128)]
        public string EnterpriseName { get; set; }
        /// <summary>
        /// 统一社会信用代码
        /// </summary>
        [Required]
        [MaxLength(18)]
        public string SocietyCreditCode { get; set; }
        /// <summary>
        /// 法人姓名
        /// </summary>
        [MaxLength(32)]
        public string LegalPerson { get; set; }
        /// <summary>
        /// 法人身份证号
        /// </summary>
        [MaxLength(18)]
        public string LegalIdentity { get; set; }
        /// <summary>
        /// 企业认证
        /// </summary>
        [Newtonsoft.Json.JsonIgnore, Swashbuckle.AspNetCore.Annotations.SwaggerIgnore]
        public SaveEnterpriseCommandAuth EnterpriseAuth => new SaveEnterpriseCommandAuth
        {
            EnterpriseName = EnterpriseName,
            SocietyCreditCode = SocietyCreditCode,
            LegalPerson = LegalPerson,
            LegalIdentity = LegalIdentity,
        };
        /// <summary>
        /// 所在省份Id
@@ -25,29 +58,14 @@
        public Guid? ProvinceId { get; set; }
        /// <summary>
        /// 所在省份
        /// </summary>
        public DictionaryData Province { get; set; }
        /// <summary>
        /// 所在城市Id
        /// </summary>
        public Guid? CityId { get; set; }
        /// <summary>
        /// 所在城市
        /// </summary>
        public DictionaryData City { get; set; }
        /// <summary>
        /// 所属行业Id
        /// </summary>
        public Guid? IndustryTypeId { get; set; }
        /// <summary>
        /// 所属行业
        /// </summary>
        public DictionaryData IndustryType { get; set; }
        /// <summary>
        /// 主营业务
FlexJobApi.Core/Models/User/Enterprises/Queries/GetEnterpriseElectronSignSettingQuery.cs
New file
@@ -0,0 +1,49 @@
using MediatR;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FlexJobApi.Core
{
    /// <summary>
    /// 查询企业电子签配置
    /// </summary>
    [Resource([EnumResourceController.Enterprise])]
    public class GetEnterpriseElectronSignSettingQuery : IRequest<GetEnterpriseElectronSignSettingQueryResult>
    {
        /// <summary>
        /// Id
        /// </summary>
        public Guid Id { get; set; }
    }
    public class GetEnterpriseElectronSignSettingQueryResult
    {
        /// <summary>
        /// Id
        /// </summary>
        public Guid Id { 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; }
    }
}
FlexJobApi.Core/Models/User/Enterprises/Queries/GetEnterpriseQuery.cs
New file
@@ -0,0 +1,130 @@
using Mapster;
using MediatR;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FlexJobApi.Core
{
    /// <summary>
    /// 查询企业详情
    /// </summary>
    [Resource([EnumResourceController.Enterprise])]
    public class GetEnterpriseQuery : IRequest<GetEnterpriseQueryResult>
    {
        /// <summary>
        /// Id
        /// </summary>
        public Guid Id { get; set; }
    }
    /// <summary>
    /// 查询企业详情-结果
    /// </summary>
    public class GetEnterpriseQueryResult
    {
        /// <summary>
        /// Id
        /// </summary>
        public Guid Id { get; set; }
        /// <summary>
        /// 企业全称
        /// </summary>
        [AdaptIgnore]
        public string EnterpriseName => EnterpriseAuth.EnterpriseName;
        /// <summary>
        /// 统一社会信用代码
        /// </summary>
        [AdaptIgnore]
        public string SocietyCreditCode => EnterpriseAuth.SocietyCreditCode;
        /// <summary>
        /// 法人姓名
        /// </summary>
        [AdaptIgnore]
        public string LegalPerson => EnterpriseAuth.LegalPerson;
        /// <summary>
        /// 法人身份证号
        /// </summary>
        [AdaptIgnore]
        public string LegalIdentity => EnterpriseAuth.LegalIdentity;
        /// <summary>
        /// 企业认证
        /// </summary>
        [Newtonsoft.Json.JsonIgnore, Swashbuckle.AspNetCore.Annotations.SwaggerIgnore]
        public SaveEnterpriseCommandAuth EnterpriseAuth { get; set; }
        /// <summary>
        /// 所在省份
        /// </summary>
        public string ProvinceContent { get; set; }
        /// <summary>
        /// 所在城市
        /// </summary>
        public string CityContent { get; set; }
        /// <summary>
        /// 所属行业
        /// </summary>
        public string IndustryTypeContent { get; set; }
        /// <summary>
        /// 主营业务
        /// </summary>
        public string MainBusiness { get; set; }
        /// <summary>
        /// 联系人
        /// </summary>
        public string Contacts { get; set; }
        /// <summary>
        /// 联系电话
        /// </summary>
        public string ContactPhoneNumber { get; set; }
        /// <summary>
        /// 联系邮箱
        /// </summary>
        public string ContactEmail { get; set; }
        /// <summary>
        /// 账号
        /// </summary>
        public string UserName { get; set; }
    }
    /// <summary>
    /// 查询企业详情-结果-企业认证
    /// </summary>
    public class GetEnterpriseQueryResultAuth
    {
        /// <summary>
        /// 企业全称
        /// </summary>
        public string EnterpriseName { get; set; }
        /// <summary>
        /// 统一社会信用代码
        /// </summary>
        public string SocietyCreditCode { get; set; }
        /// <summary>
        /// 法人姓名
        /// </summary>
        public string LegalPerson { get; set; }
        /// <summary>
        /// 法人身份证号
        /// </summary>
        public string LegalIdentity { get; set; }
    }
}
FlexJobApi.Core/Models/User/Enterprises/Queries/GetEnterpriseSmsSettingQuery.cs
New file
@@ -0,0 +1,42 @@
using MediatR;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FlexJobApi.Core
{
    /// <summary>
    /// 查询企业短信配置
    /// </summary>
    [Resource([EnumResourceController.Enterprise])]
    public class GetEnterpriseSmsSettingQuery : IRequest<GetEnterpriseSmsSettingQueryResult>
    {
        /// <summary>
        /// Id
        /// </summary>
        public Guid Id { get; set; }
    }
    /// <summary>
    /// 查询企业短信配置-结果
    /// </summary>
    public class GetEnterpriseSmsSettingQueryResult
    {
        /// <summary>
        /// Id
        /// </summary>
        public Guid Id { get; set; }
        /// <summary>
        /// 短信通道
        /// </summary>
        public EnumSmsAccess? SmsAccess { get; set; }
        /// <summary>
        /// 短信费用
        /// </summary>
        public decimal SmsCost { get; set; }
    }
}
FlexJobApi.Core/Models/User/Enterprises/Queries/GetEnterprisesQuery.cs
@@ -1,6 +1,5 @@
using Mapster;
using MediatR;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
@@ -38,76 +37,6 @@
        public Guid Id { get; set; }
        /// <summary>
        /// 联系人
        /// </summary>
        public string Contacts { get; set; }
        /// <summary>
        /// 联系电话
        /// </summary>
        public string ContactNumber { get; set; }
        /// <summary>
        /// 所在省份Id
        /// </summary>
        public Guid? ProvinceId { get; set; }
        /// <summary>
        /// 所在省份
        /// </summary>
        public DictionaryDataQueryResult Province { get; set; }
        /// <summary>
        /// 所在城市Id
        /// </summary>
        public Guid? CityId { get; set; }
        /// <summary>
        /// 所在城市
        /// </summary>
        public DictionaryDataQueryResult City { get; set; }
        /// <summary>
        /// 所属行业Id
        /// </summary>
        public Guid? IndustryTypeId { get; set; }
        /// <summary>
        /// 所属行业
        /// </summary>
        public DictionaryDataQueryResult IndustryType { get; set; }
        /// <summary>
        /// 是否已校验银行账户
        /// </summary>
        [JsonIgnore]
        public bool IsCheckedBankCard { get; set; }
        /// <summary>
        /// 实名通道
        /// </summary>
        [JsonIgnore]
        public EnumRealAccess? RealAccess { get; set; }
        /// <summary>
        /// 短信通道
        /// </summary>
        [JsonIgnore]
        public EnumSmsAccess? SmsAccess { get; set; }
        /// <summary>
        /// 是否已配置
        /// </summary>
        [AdaptIgnore]
        public bool IsConfigured => IsCheckedBankCard && RealAccess.HasValue && SmsAccess.HasValue;
    }
    /// <summary>
    /// 查询企业信息分页列表数据-结果-项-认证
    /// </summary>
    public class GetEnterprisesQueryResultItemAuth
    {
        /// <summary>
        /// 企业全称
        /// </summary>
        public string EnterpriseName { get; set; }
@@ -126,5 +55,35 @@
        /// 是否实名
        /// </summary>
        public bool IsReal { get; set; }
        /// <summary>
        /// 联系人
        /// </summary>
        public string Contacts { get; set; }
        /// <summary>
        /// 联系电话
        /// </summary>
        public string ContactPhoneNumber { get; set; }
        /// <summary>
        /// 所在省份
        /// </summary>
        public string ProvinceContent { get; set; }
        /// <summary>
        /// 所在城市
        /// </summary>
        public string CityContent { get; set; }
        /// <summary>
        /// 所属行业
        /// </summary>
        public string IndustryTypeContent { get; set; }
        /// <summary>
        /// 是否已配置
        /// </summary>
        public bool IsConfigured { get; set; }
    }
}
FlexJobApi.Core/Models/User/UserInfos/Queries/GetOperationUserInfosQuery.cs
@@ -75,7 +75,7 @@
        /// <summary>
        /// 用户Id
        /// </summary>
        [JsonIgnore]
        [Newtonsoft.Json.JsonIgnore, Swashbuckle.AspNetCore.Annotations.SwaggerIgnore]
        public Guid UserInfoId { get; set; }
        /// <summary>
FlexJobApi.Core/Utils/DbUtils/DbUtils.cs
@@ -1,4 +1,5 @@
using Furion;
using Consul.Filtering;
using Furion;
using Furion.DatabaseAccessor;
using Furion.DistributedIDGenerator;
using Furion.FriendlyException;
@@ -160,6 +161,30 @@
        }
        /// <summary>
        /// 查询分页列表数据
        /// </summary>
        /// <typeparam name="TItem"></typeparam>
        /// <param name="page"></param>
        /// <param name="q"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public static async Task<PagedListQueryResult<TItem>> GetPagedListAsync<TItem>(
            this PagedListQueryPageModel page,
            IQueryable<TItem> q,
            CancellationToken cancellationToken = default)
            where TItem : class, new()
        {
            q = q.OrderBy(page.OrderInput);
            var pagedList = await q.ToPagedListAsync(page.Page, page.Rows, cancellationToken);
            var result = new PagedListQueryResult<TItem>();
            result.PageModel = page.Adapt<PagedListQueryResultPageModel>();
            result.PageModel.TotalCount = pagedList.TotalCount;
            result.PageModel.TotalPage = pagedList.TotalPages;
            result.Data = pagedList.Items.ToList();
            return result;
        }
        /// <summary>
        /// 排序
        /// </summary>
        /// <typeparam name="T"></typeparam>
FlexJobApi.Core/Utils/JsonUtils/JsonSerializerProvider.cs
New file
@@ -0,0 +1,63 @@
using Furion;
using Furion.DependencyInjection;
using Furion.JsonSerialization;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FlexJobApi.Core.Utils.JsonUtils
{
    /// <summary>
    /// Newtonsoft.Json 实现
    /// </summary>
    public class NewtonsoftJsonSerializerProvider : IJsonSerializerProvider, ISingleton
    {
        /// <summary>
        /// 序列化对象
        /// </summary>
        /// <param name="value"></param>
        /// <param name="jsonSerializerOptions"></param>
        /// <returns></returns>
        public string Serialize(object value, object jsonSerializerOptions = null)
        {
            return JsonConvert.SerializeObject(value, (jsonSerializerOptions ?? GetSerializerOptions()) as JsonSerializerSettings);
        }
        /// <summary>
        /// 反序列化字符串
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="json"></param>
        /// <param name="jsonSerializerOptions"></param>
        /// <returns></returns>
        public T Deserialize<T>(string json, object jsonSerializerOptions = null)
        {
            return JsonConvert.DeserializeObject<T>(json, (jsonSerializerOptions ?? GetSerializerOptions()) as JsonSerializerSettings);
        }
        /// <summary>
        /// 反序列化字符串
        /// </summary>
        /// <param name="json"></param>
        /// <param name="returnType"></param>
        /// <param name="jsonSerializerOptions"></param>
        /// <returns></returns>
        public object Deserialize(string json, Type returnType, object jsonSerializerOptions = null)
        {
            return JsonConvert.DeserializeObject(json, returnType, (jsonSerializerOptions ?? GetSerializerOptions()) as JsonSerializerSettings);
        }
        /// <summary>
        /// 返回读取全局配置的 JSON 选项
        /// </summary>
        /// <returns></returns>
        public object GetSerializerOptions()
        {
            return App.GetOptions<MvcNewtonsoftJsonOptions>()?.SerializerSettings;
        }
    }
}
FlexJobApi.User.Application/Enterprises/Commands/EnterpriseCommandHandler.cs
@@ -52,11 +52,18 @@
                await rep.UpdateAsync(entity);
            }
            var checkExist = await repUserInfo.AsQueryable()
                .AnyAsync(it =>
                    it.Type == EnumUserType.Enterprise
                    && it.EnterpriseId != entity.Id
                    && it.UserAuth.UserName == request.UserName);
            if (checkExist) throw Oops.Oh(EnumErrorCodeType.s405, "该账号");
            var userInfo = await repUserInfo.AsQueryable()
                .Include(it => it.UserAuth)
                .FirstOrDefaultAsync(it =>
                    it.Type == EnumUserType.Enterprise
                    && it.UserAuth.UserName == request.UserName);
                    && it.EnterpriseId == entity.Id);
            if (userInfo == null)
            {
                userInfo = new UserInfo
@@ -66,16 +73,16 @@
                    Status = EnumUserInfoStatus.Normal,
                    UserAuth = new UserAuth
                    {
                        Name = request.Contacts,
                        UserName = request.UserName,
                        PhoneNumber = request.ContactPhoneNumber,
                        Password = PBKDF2Encryption.Encrypt(request.Password)
                        Password = PBKDF2Encryption.Encrypt(MD5Encryption.Encrypt(request.Password))
                    }
                };
                await repUserInfo.InsertAsync(userInfo);
            }
            else
            {
                if (userInfo.EnterpriseId != entity.Id) throw Oops.Oh(EnumErrorCodeType.s405, "该账号");
                userInfo.UserAuth.PhoneNumber = request.ContactPhoneNumber;
                await repUserInfo.UpdateAsync(userInfo);
            }
FlexJobApi.User.Application/Enterprises/Queries/EnterprisesQueryHandler.cs
@@ -1,5 +1,9 @@
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;
@@ -11,9 +15,19 @@
    /// <summary>
    /// 企业查询处理器
    /// </summary>
    public class EnterprisesQueryHandler
        : IRequestHandler<GetEnterprisesQuery, PagedListQueryResult<GetEnterprisesQueryResultItem>>
    public class EnterprisesQueryHandler(
            IRepository<Enterprise> rep,
            IRepository<EnterpriseAuth> repEnterpriseAuth,
            IRepository<DictionaryData> repDictionaryData
        ) :
        IRequestHandler<GetEnterprisesQuery, PagedListQueryResult<GetEnterprisesQueryResultItem>>,
        IRequestHandler<GetEnterpriseQuery, GetEnterpriseQueryResult>,
        IRequestHandler<GetEnterpriseElectronSignSettingQuery, GetEnterpriseElectronSignSettingQueryResult>,
        IRequestHandler<GetEnterpriseSmsSettingQuery, GetEnterpriseSmsSettingQueryResult>
    {
        private readonly IRepository<Enterprise> rep = rep;
        private readonly IRepository<EnterpriseAuth> repEnterpriseAuth = repEnterpriseAuth;
        /// <summary>
        /// 查询企业信息分页列表数据
        /// </summary>
@@ -22,22 +36,94 @@
        /// <returns></returns>
        public Task<PagedListQueryResult<GetEnterprisesQueryResultItem>> Handle(GetEnterprisesQuery request, CancellationToken cancellationToken)
        {
            return request.PageModel.GetPagedListAsync<Enterprise, GetEnterprisesQueryResultItem>(
                q =>
                {
                    if (request.Keywords.IsNotNull())
                    {
                        q = q.Where(it =>
                            it.EnterpriseAuth.EnterpriseName.Contains(request.Keywords)
                            || it.EnterpriseAuth.LegalPerson.Contains(request.Keywords)
                            || it.Contacts.Contains(request.Keywords));
                    }
                    if (request.IsConfigured.HasValue)
                    {
                        q = q.Where(it => (it.IsCheckedBankCard && it.RealAccess.HasValue && it.SmsAccess.HasValue) == request.IsConfigured);
                    }
                    return q;
                }, cancellationToken: cancellationToken);
            var q = rep.AsQueryable().AsNoTracking();
            if (request.Keywords.IsNotNull())
            {
                q = q.Where(it =>
                    it.EnterpriseAuth.EnterpriseName.Contains(request.Keywords)
                    || it.EnterpriseAuth.LegalPerson.Contains(request.Keywords)
                    || it.Contacts.Contains(request.Keywords));
            }
            if (request.IsConfigured.HasValue)
            {
                q = q.Where(it => (it.IsCheckedBankCard && it.RealAccess.HasValue && it.SmsAccess.HasValue) == request.IsConfigured);
            }
            var s = (from e in q
                     join a in repEnterpriseAuth.AsQueryable().AsNoTracking() on e.EnterpriseAuthId equals a.Id
                     join p in repDictionaryData.AsQueryable().AsNoTracking() on e.ProvinceId equals p.Id into pg
                     from pgi in pg.DefaultIfEmpty()
                     join c in repDictionaryData.AsQueryable().AsNoTracking() on e.CityId equals c.Id into cg
                     from cgi in cg.DefaultIfEmpty()
                     join i in repDictionaryData.AsQueryable().AsNoTracking() on e.IndustryTypeId equals i.Id into ig
                     from igi in ig.DefaultIfEmpty()
                     select new GetEnterprisesQueryResultItem
                     {
                         Id = e.Id,
                         EnterpriseName = a.EnterpriseName,
                         LegalPerson = a.LegalPerson,
                         SocietyCreditCode = a.SocietyCreditCode,
                         Contacts = e.Contacts,
                         ContactPhoneNumber = e.ContactPhoneNumber,
                         ProvinceContent = pgi.Content,
                         CityContent = cgi.Content,
                         IndustryTypeContent = igi.Content,
                         IsReal = a.IsReal,
                         IsConfigured = e.IsCheckedBankCard && e.RealAccess.HasValue && e.SmsAccess.HasValue
                     });
            return request.PageModel.GetPagedListAsync(s, cancellationToken: cancellationToken);
        }
        /// <summary>
        /// 查询企业详情
        /// </summary>
        /// <param name="request"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task<GetEnterpriseQueryResult> Handle(GetEnterpriseQuery request, CancellationToken cancellationToken)
        {
            var model = await rep.AsQueryable().AsNoTracking()
                .Where(it => it.Id == request.Id)
                .ProjectToType<GetEnterpriseQueryResult>()
                .FirstOrDefaultAsync(cancellationToken);
            if (model == null) throw Oops.Oh(EnumErrorCodeType.s404, "该企业");
            model.UserName = await rep.Change<UserInfo>().AsQueryable().AsNoTracking()
                 .Include(it => it.UserAuth)
                 .Where(it => it.EnterpriseId == model.Id)
                 .Select(it => it.UserAuth.UserName)
                 .FirstOrDefaultAsync(cancellationToken);
            return model;
        }
        /// <summary>
        /// 查询企业电子签配置
        /// </summary>
        /// <param name="request"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task<GetEnterpriseElectronSignSettingQueryResult> Handle(GetEnterpriseElectronSignSettingQuery request, CancellationToken cancellationToken)
        {
            var model = await rep.AsQueryable().AsNoTracking()
                .Where(it => it.Id == request.Id)
                .ProjectToType<GetEnterpriseElectronSignSettingQueryResult>()
                .FirstOrDefaultAsync(cancellationToken);
            if (model == null) throw Oops.Oh(EnumErrorCodeType.s404, "该企业");
            return model;
        }
        /// <summary>
        /// 查询企业短信配置
        /// </summary>
        /// <param name="request"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task<GetEnterpriseSmsSettingQueryResult> Handle(GetEnterpriseSmsSettingQuery request, CancellationToken cancellationToken)
        {
            var model = await rep.AsQueryable().AsNoTracking()
                .Where(it => it.Id == request.Id)
                .ProjectToType<GetEnterpriseSmsSettingQueryResult>()
                .FirstOrDefaultAsync(cancellationToken);
            if (model == null) throw Oops.Oh(EnumErrorCodeType.s404, "该企业");
            return model;
        }
    }
}
FlexJobApi.User.Application/FlexJobApi.User.Application.xml
@@ -98,6 +98,11 @@
            企业查询处理器
            </summary>
        </member>
        <member name="M:FlexJobApi.User.Application.EnterprisesQueryHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.Enterprise},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseAuth},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.DictionaryData})">
            <summary>
            企业查询处理器
            </summary>
        </member>
        <member name="M:FlexJobApi.User.Application.EnterprisesQueryHandler.Handle(FlexJobApi.Core.GetEnterprisesQuery,System.Threading.CancellationToken)">
            <summary>
            查询企业信息分页列表数据
@@ -106,6 +111,30 @@
            <param name="cancellationToken"></param>
            <returns></returns>
        </member>
        <member name="M:FlexJobApi.User.Application.EnterprisesQueryHandler.Handle(FlexJobApi.Core.GetEnterpriseQuery,System.Threading.CancellationToken)">
            <summary>
            查询企业详情
            </summary>
            <param name="request"></param>
            <param name="cancellationToken"></param>
            <returns></returns>
        </member>
        <member name="M:FlexJobApi.User.Application.EnterprisesQueryHandler.Handle(FlexJobApi.Core.GetEnterpriseElectronSignSettingQuery,System.Threading.CancellationToken)">
            <summary>
            查询企业电子签配置
            </summary>
            <param name="request"></param>
            <param name="cancellationToken"></param>
            <returns></returns>
        </member>
        <member name="M:FlexJobApi.User.Application.EnterprisesQueryHandler.Handle(FlexJobApi.Core.GetEnterpriseSmsSettingQuery,System.Threading.CancellationToken)">
            <summary>
            查询企业短信配置
            </summary>
            <param name="request"></param>
            <param name="cancellationToken"></param>
            <returns></returns>
        </member>
        <member name="F:FlexJobApi.User.Application.EnumUserErrorCodeType.u1000">
            <summary>
            账号或密码不存在