lingling
2025-03-14 53ae121a66b937b532ea762905aaa16953442ddc
添加地区逻辑
5个文件已添加
7个文件已修改
1590 ■■■■■ 已修改文件
LifePayment/LifePayment.Application.Contracts/Setting/CategoryDto.cs 718 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Application.Contracts/Setting/IAreaService.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Application.Contracts/User/IAccountService.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Application.Contracts/User/QrCodeLogin.cs 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Application/Setting/AreaService.cs 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Application/User/AccountService.cs 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Domain/Common/Area.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.EntityFrameworkCore/LifePaymentServicesDbContext.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml 555 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.HttpApi/LifePay/AccountController.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.HttpApi/LifePay/AreaController.cs 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Application.Contracts/Setting/CategoryDto.cs
New file
@@ -0,0 +1,718 @@
using DynamicQuery.Net.Dto.Input;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace LifePayment.Application.Contracts
{
    public class CategoryDto
    {
        /// <summary>
        /// 类别Id
        /// </summary>
        public Guid Id { get; set; }
        /// <summary>
        /// 名称
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 排序
        /// </summary>
        public int Sequence { get; set; }
        /// <summary>
        /// 简述
        /// </summary>
        public string Sketch { get; set; }
        /// <summary>
        /// 图标地址
        /// </summary>
        public string Icon { get; set; }
        /// <summary>
        /// 头部图标地址
        /// </summary>
        public string HeadIcon { get; set; }
        /// <summary>
        /// 是否显示,true显示,false隐藏
        /// </summary>
        public bool IsVisable { get; set; }
        /// <summary>
        /// 是否支持广告
        /// </summary>
        public bool? IsSupportAdvertise { get; set; }
        /// <summary>
        /// 序号Id
        /// </summary>
        public int? CategoryIntId { get; set; }
    }
    public class CategoryAllDto
    {
        /// <summary>
        /// 类别Id
        /// </summary>
        public Guid Id { get; set; }
        /// <summary>
        /// 名称
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 排序
        /// </summary>
        public int Sequence { get; set; }
        /// <summary>
        /// 序号Id
        /// </summary>
        public int? CategoryIntId { get; set; }
    }
    public class GetCategoriesInput
    {
        /// <summary>
        /// 类型:0产品类别,1资讯类别
        /// </summary>
        [RegularExpression(@"[0,1,2,3,4]{1}", ErrorMessage = "类别类型不正确")]
        public int Type { get; set; }
        /// <summary>
        /// 排序信息:默认按Sequence升序
        /// </summary>
        public List<OrderInput> OrderInput { get; set; } = new List<OrderInput>
        {
            new OrderInput
            {
                Property = "Sequence",
                Order = DynamicQuery.Net.Enums.OrderTypeEnum.Asc,
            },
        };
    }
    public class GetCategoryQueryInput
    {
        /// <summary>
        /// 类型:0产品类别,1资讯类别
        /// </summary>
        public int? Type { get; set; }
        /// <summary>
        /// 是否显示,true显示,false隐藏
        /// </summary>
        public bool? IsVisable { get; set; }
        public string Name { get; set; }
    }
    public class CreateOrUpdateCategoryInput
    {
        /// <summary>
        /// 类别Id
        /// </summary>
        public Guid? Id { get; set; }
        /// <summary>
        /// 类型:0产品类别,1资讯类别
        /// </summary>
        [RegularExpression(@"[0,1,2,3]{1}", ErrorMessage = "类别类型不正确")]
        public int Type { get; set; }
        /// <summary>
        /// 名称
        /// </summary>
        [Required]
        [MaxLength(8)]
        public string Name { get; set; }
        /// <summary>
        /// 类别Id
        /// </summary>
        public int? CategoryIntId { get; set; }
        /// <summary>
        /// 简述
        /// </summary>
        [Required]
        [MaxLength(50)]
        public string Sketch { get; set; }
        /// <summary>
        /// 排序
        /// </summary>
        public int Sequence { get; set; }
        /// <summary>
        /// 图标地址
        /// </summary>
        public string Icon { get; set; }
        /// <summary>
        /// 头部图标地址
        /// </summary>
        public string HeadIcon { get; set; }
        /// <summary>
        /// 是否支持广告
        /// </summary>
        public bool? IsSupportAdvertise { get; set; }
        /// <summary>
        /// 备选图片(封面信息)
        /// </summary>
        public List<CoverMsg> CoverInfo { get; set; }
    }
    public class SetCategoryVisInput
    {
        /// <summary>
        /// 类别Id
        /// </summary>
        public Guid Id { get; set; }
        /// <summary>
        /// 类型:0产品类别,1资讯类别
        /// </summary>
        [RegularExpression(@"[0,1,2,3]{1}", ErrorMessage = "类别类型不正确")]
        public int Type { get; set; }
    }
    public class CategoryMenu
    {
        /// <summary>
        /// 类别Id
        /// </summary>
        public Guid Id { get; set; }
        /// <summary>
        /// 名称
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 头部图标地址
        /// </summary>
        public string HeadIcon { get; set; }
        /// <summary>
        /// 图标地址
        /// </summary>
        public string Icon { get; set; }
        /// <summary>
        /// 封面信息
        /// </summary>
        public IEnumerable<CoverMsg> Covers { get; set; }
        /// <summary>
        /// 简述
        /// </summary>
        public string Sketch { get; set; }
        /// <summary>
        /// 排序
        /// </summary>
        public int Sequence { get; set; }
    }
    public class TagMenu
    {
        /// <summary>
        /// 标签Id
        /// </summary>
        public Guid Id { get; set; }
        /// <summary>
        /// 名称
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 类别Id
        /// </summary>
        public Guid CategoryId { get; set; }
    }
    public class CoverMsg
    {
        /// <summary>
        /// 封面地址
        /// </summary>
        public string Url { get; set; }
        /// <summary>
        /// 排序
        /// </summary>
        public int Sequence { get; set; }
    }
    public class TagDto
    {
        /// <summary>
        /// 标签Id
        /// </summary>
        public Guid Id { get; set; }
        /// <summary>
        /// 类别Id
        /// </summary>
        public Guid CategoryId { get; set; }
        /// <summary>
        ///  /// 行业服务 = 0 行业配套 = 1  甲方需求 = 2 行业资讯 = 3;
        /// </summary>
        public int? CategoryType { get; set; }
        /// <summary>
        /// 类别名称
        /// </summary>
        public string CategoryName { get; set; }
        /// <summary>
        /// 名称
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 排序
        /// </summary>
        public int Sequence { get; set; }
        /// <summary>
        /// 是否显示,默认为true 显示
        /// </summary>
        public bool IsVisable { get; set; }
        public Guid? CreatorId { get; set; }
    }
    public class GetTagsInput
    {
        /// <summary>
        /// 类型:0产品标签,1资讯标签,3快捷评论标签
        /// </summary>
        [RegularExpression(@"[0,1,2,3,4]{1}", ErrorMessage = "标签类型不正确")]
        public int Type { get; set; }
        /// <summary>
        /// 是否显示,true显示,false隐藏
        /// </summary>
        [System.Text.Json.Serialization.JsonIgnore]
        public bool? IsVisable { get; set; }
        /// <summary>
        /// 类别Id
        /// </summary>
        [System.Text.Json.Serialization.JsonIgnore]
        public Guid? CategoryId { get; set; }
        public int? CategoryType { get; set; }
        /// <summary>
        /// 排序信息:默认按Sequence升序
        /// </summary>
        public List<OrderInput> OrderInput { get; set; } = new List<OrderInput>
        {
            new OrderInput
            {
                Property = "Sequence",
                Order = DynamicQuery.Net.Enums.OrderTypeEnum.Asc,
            },
        };
    }
    public class SetTagVisInput
    {
        /// <summary>
        /// 类别Id
        /// </summary>
        public Guid Id { get; set; }
        /// <summary>
        /// 类型:0产品标签,1资讯标签,3快捷评论标签
        /// </summary>
        [RegularExpression(@"[0,1,2,3,4]{1}", ErrorMessage = "标签类型不正确")]
        public int Type { get; set; }
    }
    public class CreateOrUpdateTagInput
    {
        /// <summary>
        /// 标签Id
        /// </summary>
        public Guid? Id { get; set; }
        /// <summary>
        /// 类型:0产品标签,1资讯标签,2自定义标签,3快捷评论标签
        /// </summary>
        [RegularExpression(@"[0,1,2,3,4]{1}", ErrorMessage = "标签类型不正确")]
        public int Type { get; set; }
        /// <summary>
        /// 类别Id
        /// </summary>
        public Guid CategoryId { get; set; }
        /// <summary>
        /// 行业服务 = 0 行业配套 = 1  甲方需求 = 2 行业资讯 = 3;
        /// </summary>
        public int CategoryType { get; set; }
        /// <summary>
        /// 名称
        /// </summary>
        [Required]
        [MaxLength(8)]
        public string Name { get; set; }
        /// <summary>
        /// 排序
        /// </summary>
        public int Sequence { get; set; }
    }
    public class AreaDto
    {
        /// <summary>
        /// 编码
        /// </summary>
        public int AreaCode { get; set; }
        /// <summary>
        /// 父级编码
        /// </summary>
        public int? ParentCode { get; set; }
        /// <summary>
        /// 名称
        /// </summary>
        public string AreaName { get; set; }
        /// <summary>
        /// 1省 2市 3区 4镇
        /// </summary>
        public int? Layer { get; set; }
        /// <summary>
        /// 排序
        /// </summary>
        public int? Sort { get; set; }
    }
    public class GetAreaListInput
    {
        /// <summary>
        /// 1省 2市 3区 4镇
        /// </summary>
        public int? Layer { get; set; }
        /// <summary>
        /// 是否需要镇信息
        /// </summary>
        [System.Text.Json.Serialization.JsonIgnore]
        public bool NeedTown { get; set; }
        /// <summary>
        /// 父级编码
        /// </summary>
        public int? ParentCode { get; set; }
    }
    public class CategoryInfo : CategoryDto
    {
        /// <summary>
        /// 类型:0产品类别,1资讯类别
        /// </summary>
        public int Type { get; set; }
        /// <summary>
        /// 封面信息
        /// </summary>
        public IEnumerable<CoverMsg> Covers { get; set; }
    }
    public class AdvertisePriceInfo
    {
        /// <summary>
        /// 广告价位配置Id
        /// </summary>
        public Guid Id { get; set; }
        /// <summary>
        /// 广告类型:0产品服务,1行业资讯
        /// </summary>
        public int Type { get; set; }
        /// <summary>
        /// 广告位置:0首页一级,1首页二级,2详情页推荐
        /// </summary>
        public int Position { get; set; }
        /// <summary>
        /// 状态:-10已下架,10上架/显示中
        /// </summary>
        public int Status { get; set; }
        /// <summary>
        /// 价格信息
        /// </summary>
        public IEnumerable<PeriodPriceInfo> Prices { get; set; }
    }
    public class GetAdvertisePricesInput
    {
        /// <summary>
        /// 广告类型:0产品服务,1行业资讯
        /// </summary>
        public int? Type { get; set; }
        /// <summary>
        /// 广告位置:0首页一级,1首页二级,2详情页推荐
        /// </summary>
        public int? Position { get; set; }
    }
    public class PeriodPriceInfo
    {
        /// <summary>
        /// 投放周期类型:1天,7周,30月,90季,365年
        /// </summary>
        [RegularExpression(@"1|7|30|90|365", ErrorMessage = "投放周期类型不正确")]
        public int PeriodType { get; set; }
        /// <summary>
        /// 价格
        /// </summary>
        public decimal Price { get; set; }
    }
    public class CreateOrUpdateAdvertisePriceInput
    {
        /// <summary>
        /// 广告类型:0产品服务,1行业资讯
        /// </summary>
        [RegularExpression(@"0|1", ErrorMessage = "广告类型不正确")]
        public int Type { get; set; }
        /// <summary>
        /// 广告位置:0首页一级,1首页二级,2详情页推荐
        /// </summary>
        [RegularExpression(@"0|1|2", ErrorMessage = "广告位置不正确")]
        public int Position { get; set; }
        /// <summary>
        /// 价格信息
        /// </summary>
        public List<PeriodPriceInfo> Prices { get; set; }
    }
    public class GetAdvertisePriceInfosInput
    {
        /// <summary>
        /// 排序信息:默认按广告类型:Type、广告位置:Position升序
        /// </summary>
        public List<OrderInput> OrderInput { get; set; } = new List<OrderInput>
        {
            new OrderInput
            {
                Property = "Type",
                Order = DynamicQuery.Net.Enums.OrderTypeEnum.Asc,
            },
            new OrderInput
            {
                Property = "Position",
                Order = DynamicQuery.Net.Enums.OrderTypeEnum.Asc,
            },
        };
    }
    public class CreateOrUpdateRewardPercentageInput
    {
        /// <summary>
        /// Up主等级
        /// </summary>
        public int UpLevel { get; set; }
        /// <summary>
        /// Up主占比
        /// </summary>
        public decimal UpRatio { get; set; }
        /// <summary>
        /// 平台占比
        /// </summary>
        public decimal PlatformRatio { get; set; }
    }
    public class RewardPercentageInfo
    {
        /// <summary>
        /// Up主等级
        /// </summary>
        public int UpLevel { get; set; }
        /// <summary>
        /// Up主占比
        /// </summary>
        public decimal UpRatio { get; set; }
        /// <summary>
        /// 平台占比
        /// </summary>
        public decimal PlatformRatio { get; set; }
    }
    public class GetRewardPercentagesInput
    {
        /// <summary>
        /// 排序信息:默认按Up主等级:UpLevel升序
        /// </summary>
        public List<OrderInput> OrderInput { get; set; } = new List<OrderInput>
        {
            new OrderInput
            {
                Property = "UpLevel",
                Order = DynamicQuery.Net.Enums.OrderTypeEnum.Asc,
            },
        };
    }
    public class InitSettingInfo
    {
        /// <summary>
        /// 平台自营服务商名称
        /// </summary>
        public string SelfSupportingServiceName { get; set; }
        /// <summary>
        /// 平台服务电话
        /// </summary>
        public string PlatServicePhone { get; set; }
    }
    public class AreaInfo
    {
        public int AreaCode { get; set; }
        public int? ParentId { get; set; }
        public string AreaName { get; set; }
        /// <summary>
        /// 1省 2市 3区 4镇
        /// </summary>
        public int? Layer { get; set; }
        public int? Sort { get; set; }
        public List<AreaInfo> Children { get; set; }
        /// <summary>
        /// 简易拼音
        /// </summary>
        public string SimpleSpelling { get; set; }
        /// <summary>
        /// 快速检索
        /// </summary>
        public string QuickQuery { get; set; }
    }
    public class PlatformContactList
    {
        public Guid Id { get; set; }
        /// <summary>
        /// 行业服务 = 0 行业配套 = 1  甲方需求 = 2 行业资讯 = 3;
        /// </summary>
        [Required]
        public int CategoryType { get; set; }
        public Guid CategoryId { get; set; }
        public string CategoryName { get; set; }
        /// <summary>
        /// 联系方式
        /// </summary>
        [Required]
        public string ContactPhone { get; set; }
    }
    public class CreateOrEditPlatformContactInput
    {
        public Guid? Id { get; set; }
        /// <summary>
        ///  行业服务 = 0 行业配套 = 1  甲方需求 = 2 行业资讯 = 3;
        /// </summary>
        [Required]
        public int CategoryType { get; set; }
        public Guid CategoryId { get; set; }
        /// <summary>
        /// 联系方式
        /// </summary>
        [Required]
        public string ContactPhone { get; set; }
    }
    /// <summary>
    /// 用户认证相关配置参数
    /// </summary>
    public class UserCertificationSettingInfo
    {
        /// <summary>
        /// 收款账号
        /// </summary>
        public string ReceivingAccount { get; set; }
        /// <summary>
        /// 收款公司名
        /// </summary>
        public string ReceivingCompanyName { get; set; }
        /// <summary>
        /// 收款开户银行
        /// </summary>
        public string ReceivingBankName { get; set; }
        /// <summary>
        /// 用户认证费用
        /// </summary>
        public decimal UserCertificationAmount { get; set; }
        /// <summary>
        /// 用户认证收款备注
        /// </summary>
        public string UserCertificationReceivingRemark { get; set; }
        public string EnterprisePowerAttorneyTempPath { get; set; }
        public string AuthenticationHelpUrl { get; set; }
        public string IDPhoteTempPath { get; set; }
        /// <summary>
        /// 线下支付汇款天数(单位:天)
        /// </summary>
        public int OfflinePayEndDays { get; set; } = 3;
        /// <summary>
        /// 线下支付汇款最晚时间
        /// </summary>
        public DateTime OfflinePayEndTime { get; set; }
    }
}
LifePayment/LifePayment.Application.Contracts/Setting/IAreaService.cs
New file
@@ -0,0 +1,13 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
namespace LifePayment.Application.Contracts
{
    public interface IAreaService : IApplicationService
    {
        Task<List<AreaDto>> GetAreaList(GetAreaListInput input);
        Task<List<AreaInfo>> GetRegionalManagementList();
    }
}
LifePayment/LifePayment.Application.Contracts/User/IAccountService.cs
@@ -10,6 +10,7 @@
        #region life pay
        Task<WxMiniAppIndentityInfo> GetLifePayWxIndentity(string code);
        /// <summary>
        /// 手机验证码登录
LifePayment/LifePayment.Application.Contracts/User/QrCodeLogin.cs
@@ -15,13 +15,28 @@
        [Required(ErrorMessage = "{0}不能为空")]
        [RegularExpression(LifePaymentConstant.RegularExpression.PhoneNumberRegEx, ErrorMessage = "{0}格式错误")]
        public string PhoneNumber { get; set; }
        /// <summary>
        /// 验证码
        /// </summary>
        //[Required]
        //public string Code { get; set; }
    }
    public class WxMiniAppIndentityInfo
    {
        /// <summary>
        /// 会话密钥
        /// </summary>
        public string SessionKey { get; set; }
        /// <summary>
        /// 小程序OpenId
        /// </summary>
        public string OpenId { get; set; }
        /// <summary>
        /// 用户名(该值为空则需手机授权登录,不为空则已有该小程序用户)
        /// </summary>
        public string UserName { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string UnionId { get; set; }
    }
}
LifePayment/LifePayment.Application/Setting/AreaService.cs
New file
@@ -0,0 +1,96 @@
using LifePayment.Application.Contracts;
using LifePayment.Domain.Models;
using LifePayment.Domain.Shared;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Repositories;
namespace LifePayment.Application
{
    public class AreaService : ApplicationService, IAreaService
    {
        private readonly IRepository<Area, Guid> _areaRepository;
        public AreaService(
               IRepository<Area, Guid> areaRepository)
        {
            _areaRepository = areaRepository;
        }
        public async Task<List<AreaDto>> GetAreaList(GetAreaListInput input)
        {
            var query = _areaRepository.Where(s => (input.NeedTown || s.Layer != LifePaymentConstant.AreaLayerType.镇) && s.IsEnable).Select(r => new AreaDto
            {
                AreaCode = r.AreaCode,
                ParentCode = r.ParentId,
                AreaName = r.AreaName,
                Layer = r.Layer,
                Sort = r.Sort,
            });
            if (input != null)
            {
                if (input.Layer.HasValue)
                {
                    query = query.Where(s => s.Layer == input.Layer);
                }
                if (input.ParentCode.HasValue)
                {
                    query = query.Where(s => s.ParentCode == input.ParentCode);
                }
            }
            return await query.ToListAsync();
        }
        public async Task<List<AreaInfo>> GetRegionalManagementList()
        {
            var result = new List<AreaInfo>();
            var area = await _areaRepository.Where(r => r.Layer != LifePaymentConstant.AreaLayerType.镇 && r.IsEnable).Select(s => new
            {
                s.AreaCode,
                s.AreaName,
                s.Layer,
                s.Sort,
                s.ParentId,
                s.QuickQuery,
                s.SimpleSpelling
            }).ToListAsync();
            result = area.Where(r => r.Layer == LifePaymentConstant.AreaLayerType.省).Select(s => new AreaInfo
            {
                AreaCode = s.AreaCode,
                AreaName = s.AreaName,
                Layer = s.Layer,
                Sort = s.Sort,
                ParentId = s.ParentId,
                QuickQuery = s.QuickQuery,
                SimpleSpelling = s.SimpleSpelling,
                Children = area.Where(r => r.Layer == LifePaymentConstant.AreaLayerType.市 && r.ParentId == s.AreaCode).Select(s => new AreaInfo
                {
                    AreaCode = s.AreaCode,
                    AreaName = s.AreaName,
                    Layer = s.Layer,
                    Sort = s.Sort,
                    ParentId = s.ParentId,
                    QuickQuery = s.QuickQuery,
                    SimpleSpelling = s.SimpleSpelling,
                    Children = area.Where(d => d.Layer == LifePaymentConstant.AreaLayerType.区县 && d.ParentId == s.AreaCode).Select(s => new AreaInfo
                    {
                        AreaCode = s.AreaCode,
                        AreaName = s.AreaName,
                        Layer = s.Layer,
                        Sort = s.Sort,
                        ParentId = s.ParentId,
                        QuickQuery = s.QuickQuery,
                        SimpleSpelling = s.SimpleSpelling,
                    }).ToList()
                }).ToList()
            }).ToList();
            return result;
        }
    }
}
LifePayment/LifePayment.Application/User/AccountService.cs
@@ -1,4 +1,5 @@
using LifePayment.Application.Contracts;
using LifePayment.Domain;
using LifePayment.Domain.Models;
using Microsoft.EntityFrameworkCore;
using System;
@@ -9,31 +10,44 @@
using Volo.Abp.Domain.Repositories;
using ZeroD.Util;
namespace HumanResourcesServices.Application
namespace LifePayment.Application
{
    public class AccountService : ApplicationService, IAccountService
    {
        private readonly IWxManager _wxManager;
        private readonly IRepository<LifePayUser, Guid> _lifePayUserRepository;
        public AccountService(
               IWxManager wxManager,
               IRepository<LifePayUser, Guid> lifePayUserRepository
)
        {
            _wxManager = wxManager;
            _lifePayUserRepository = lifePayUserRepository;
        }
        #region 查询
        public async Task<WxMiniAppIndentityInfo> GetLifePayWxIndentity(string code)
        {
            var res = await _wxManager.GetWxOauth2AccessToken(code);
            var result = new WxMiniAppIndentityInfo
            {
                SessionKey = res.SessionKey,
                OpenId = res.OpenId,
                UnionId = res.UnionId
            };
            return result;
        }
        #endregion
        #region 操作
        #region life pay
LifePayment/LifePayment.Domain/Common/Area.cs
New file
@@ -0,0 +1,28 @@
using System;
using Volo.Abp.Domain.Entities.Auditing;
namespace LifePayment.Domain.Models
{
    public class Area : FullAuditedAggregateRoot<Guid>
    {
        public int? ParentId { get; set; }
        public int AreaCode { get; set; }
        public string AreaName { get; set; }
        public string QuickQuery { get; set; }
        public string Description { get; set; }
        public int Layer { get; set; }
        public int? SortCode { get; set; }
        public int? Sort { get; set; }
        public string SimpleSpelling { get; set; }
        public bool IsEnable { get; set; }
    }
}
LifePayment/LifePayment.EntityFrameworkCore/LifePaymentServicesDbContext.cs
@@ -22,7 +22,7 @@
        public virtual DbSet<LifePayRate> LifePayRate { get; set; }
        public virtual DbSet<Area> Area { get; set; }
        public virtual DbSet<LifePayChannles> LifePayChannles { get; set; }
LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml
@@ -4,6 +4,13 @@
        <name>LifePayment.HttpApi</name>
    </assembly>
    <members>
        <member name="M:LifePayment.HttpApi.AccountController.GetLifePayWxIndentity(System.String)">
            <summary>
            获取生活缴费用户身份会话信息
            </summary>
            <param name="code">用户登录凭证</param>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.AccountController.LifePayPhoneMesssageCodeLogin(LifePayment.Application.Contracts.LifePayPhoneMesssageCodeLoginInput)">
            <summary>
            life pay手机验证码登录
@@ -12,6 +19,31 @@
            <returns></returns>
            <exception cref="T:Volo.Abp.UserFriendlyException"></exception>
        </member>
        <member name="M:LifePayment.HttpApi.AreaController.GetAreaList">
            <summary>
            获取省市区
            </summary>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.AreaController.GetApplicableAreaList">
            <summary>
            资讯管理--适用区域
            </summary>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.AreaController.GetAreas(LifePayment.Application.Contracts.GetAreaListInput)">
            <summary>
            获取区域列表(省、市、区)
            </summary>
            <param name="input"></param>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.AreaController.GetRegionalManagementList">
            <summary>
            搜索管理--列表(区域管理)
            </summary>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.GetElectricParValue(LifePayment.Domain.Shared.ChannelsBaseInput)">
            <summary>
            获取电费面值
LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml
@@ -763,6 +763,541 @@
            用户id
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CategoryDto.Id">
            <summary>
            类别Id
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CategoryDto.Name">
            <summary>
            名称
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CategoryDto.Sequence">
            <summary>
            排序
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CategoryDto.Sketch">
            <summary>
            简述
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CategoryDto.Icon">
            <summary>
            图标地址
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CategoryDto.HeadIcon">
            <summary>
            头部图标地址
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CategoryDto.IsVisable">
            <summary>
            是否显示,true显示,false隐藏
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CategoryDto.IsSupportAdvertise">
            <summary>
            是否支持广告
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CategoryDto.CategoryIntId">
            <summary>
            序号Id
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CategoryAllDto.Id">
            <summary>
            类别Id
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CategoryAllDto.Name">
            <summary>
            名称
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CategoryAllDto.Sequence">
            <summary>
            排序
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CategoryAllDto.CategoryIntId">
            <summary>
            序号Id
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.GetCategoriesInput.Type">
            <summary>
            类型:0产品类别,1资讯类别
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.GetCategoriesInput.OrderInput">
            <summary>
            排序信息:默认按Sequence升序
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.GetCategoryQueryInput.Type">
            <summary>
            类型:0产品类别,1资讯类别
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.GetCategoryQueryInput.IsVisable">
            <summary>
            是否显示,true显示,false隐藏
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CreateOrUpdateCategoryInput.Id">
            <summary>
            类别Id
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CreateOrUpdateCategoryInput.Type">
            <summary>
            类型:0产品类别,1资讯类别
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CreateOrUpdateCategoryInput.Name">
            <summary>
            名称
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CreateOrUpdateCategoryInput.CategoryIntId">
            <summary>
            类别Id
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CreateOrUpdateCategoryInput.Sketch">
            <summary>
            简述
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CreateOrUpdateCategoryInput.Sequence">
            <summary>
            排序
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CreateOrUpdateCategoryInput.Icon">
            <summary>
            图标地址
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CreateOrUpdateCategoryInput.HeadIcon">
            <summary>
            头部图标地址
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CreateOrUpdateCategoryInput.IsSupportAdvertise">
            <summary>
            是否支持广告
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CreateOrUpdateCategoryInput.CoverInfo">
            <summary>
            备选图片(封面信息)
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.SetCategoryVisInput.Id">
            <summary>
            类别Id
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.SetCategoryVisInput.Type">
            <summary>
            类型:0产品类别,1资讯类别
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CategoryMenu.Id">
            <summary>
            类别Id
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CategoryMenu.Name">
            <summary>
            名称
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CategoryMenu.HeadIcon">
            <summary>
            头部图标地址
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CategoryMenu.Icon">
            <summary>
            图标地址
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CategoryMenu.Covers">
            <summary>
            封面信息
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CategoryMenu.Sketch">
            <summary>
            简述
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CategoryMenu.Sequence">
            <summary>
            排序
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.TagMenu.Id">
            <summary>
            标签Id
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.TagMenu.Name">
            <summary>
            名称
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.TagMenu.CategoryId">
            <summary>
            类别Id
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CoverMsg.Url">
            <summary>
            封面地址
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CoverMsg.Sequence">
            <summary>
            排序
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.TagDto.Id">
            <summary>
            标签Id
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.TagDto.CategoryId">
            <summary>
            类别Id
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.TagDto.CategoryType">
            <summary>
             /// 行业服务 = 0 行业配套 = 1  甲方需求 = 2 行业资讯 = 3;
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.TagDto.CategoryName">
            <summary>
            类别名称
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.TagDto.Name">
            <summary>
            名称
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.TagDto.Sequence">
            <summary>
            排序
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.TagDto.IsVisable">
            <summary>
            是否显示,默认为true 显示
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.GetTagsInput.Type">
            <summary>
            类型:0产品标签,1资讯标签,3快捷评论标签
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.GetTagsInput.IsVisable">
            <summary>
            是否显示,true显示,false隐藏
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.GetTagsInput.CategoryId">
            <summary>
            类别Id
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.GetTagsInput.OrderInput">
            <summary>
            排序信息:默认按Sequence升序
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.SetTagVisInput.Id">
            <summary>
            类别Id
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.SetTagVisInput.Type">
            <summary>
            类型:0产品标签,1资讯标签,3快捷评论标签
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CreateOrUpdateTagInput.Id">
            <summary>
            标签Id
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CreateOrUpdateTagInput.Type">
            <summary>
            类型:0产品标签,1资讯标签,2自定义标签,3快捷评论标签
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CreateOrUpdateTagInput.CategoryId">
            <summary>
            类别Id
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CreateOrUpdateTagInput.CategoryType">
            <summary>
            行业服务 = 0 行业配套 = 1  甲方需求 = 2 行业资讯 = 3;
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CreateOrUpdateTagInput.Name">
            <summary>
            名称
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CreateOrUpdateTagInput.Sequence">
            <summary>
            排序
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.AreaDto.AreaCode">
            <summary>
            编码
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.AreaDto.ParentCode">
            <summary>
            父级编码
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.AreaDto.AreaName">
            <summary>
            名称
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.AreaDto.Layer">
            <summary>
            1省 2市 3区 4镇
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.AreaDto.Sort">
            <summary>
            排序
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.GetAreaListInput.Layer">
            <summary>
            1省 2市 3区 4镇
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.GetAreaListInput.NeedTown">
            <summary>
            是否需要镇信息
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.GetAreaListInput.ParentCode">
            <summary>
            父级编码
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CategoryInfo.Type">
            <summary>
            类型:0产品类别,1资讯类别
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CategoryInfo.Covers">
            <summary>
            封面信息
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.AdvertisePriceInfo.Id">
            <summary>
            广告价位配置Id
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.AdvertisePriceInfo.Type">
            <summary>
            广告类型:0产品服务,1行业资讯
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.AdvertisePriceInfo.Position">
            <summary>
            广告位置:0首页一级,1首页二级,2详情页推荐
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.AdvertisePriceInfo.Status">
            <summary>
            状态:-10已下架,10上架/显示中
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.AdvertisePriceInfo.Prices">
            <summary>
            价格信息
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.GetAdvertisePricesInput.Type">
            <summary>
            广告类型:0产品服务,1行业资讯
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.GetAdvertisePricesInput.Position">
            <summary>
            广告位置:0首页一级,1首页二级,2详情页推荐
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.PeriodPriceInfo.PeriodType">
            <summary>
            投放周期类型:1天,7周,30月,90季,365年
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.PeriodPriceInfo.Price">
            <summary>
            价格
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CreateOrUpdateAdvertisePriceInput.Type">
            <summary>
            广告类型:0产品服务,1行业资讯
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CreateOrUpdateAdvertisePriceInput.Position">
            <summary>
            广告位置:0首页一级,1首页二级,2详情页推荐
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CreateOrUpdateAdvertisePriceInput.Prices">
            <summary>
            价格信息
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.GetAdvertisePriceInfosInput.OrderInput">
            <summary>
            排序信息:默认按广告类型:Type、广告位置:Position升序
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CreateOrUpdateRewardPercentageInput.UpLevel">
            <summary>
            Up主等级
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CreateOrUpdateRewardPercentageInput.UpRatio">
            <summary>
            Up主占比
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CreateOrUpdateRewardPercentageInput.PlatformRatio">
            <summary>
            平台占比
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.RewardPercentageInfo.UpLevel">
            <summary>
            Up主等级
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.RewardPercentageInfo.UpRatio">
            <summary>
            Up主占比
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.RewardPercentageInfo.PlatformRatio">
            <summary>
            平台占比
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.GetRewardPercentagesInput.OrderInput">
            <summary>
            排序信息:默认按Up主等级:UpLevel升序
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.InitSettingInfo.SelfSupportingServiceName">
            <summary>
            平台自营服务商名称
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.InitSettingInfo.PlatServicePhone">
            <summary>
            平台服务电话
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.AreaInfo.Layer">
            <summary>
            1省 2市 3区 4镇
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.AreaInfo.SimpleSpelling">
            <summary>
            简易拼音
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.AreaInfo.QuickQuery">
            <summary>
            快速检索
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.PlatformContactList.CategoryType">
            <summary>
            行业服务 = 0 行业配套 = 1  甲方需求 = 2 行业资讯 = 3;
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.PlatformContactList.ContactPhone">
            <summary>
            联系方式
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CreateOrEditPlatformContactInput.CategoryType">
            <summary>
             行业服务 = 0 行业配套 = 1  甲方需求 = 2 行业资讯 = 3;
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CreateOrEditPlatformContactInput.ContactPhone">
            <summary>
            联系方式
            </summary>
        </member>
        <member name="T:LifePayment.Application.Contracts.UserCertificationSettingInfo">
            <summary>
            用户认证相关配置参数
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.UserCertificationSettingInfo.ReceivingAccount">
            <summary>
            收款账号
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.UserCertificationSettingInfo.ReceivingCompanyName">
            <summary>
            收款公司名
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.UserCertificationSettingInfo.ReceivingBankName">
            <summary>
            收款开户银行
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.UserCertificationSettingInfo.UserCertificationAmount">
            <summary>
            用户认证费用
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.UserCertificationSettingInfo.UserCertificationReceivingRemark">
            <summary>
            用户认证收款备注
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.UserCertificationSettingInfo.OfflinePayEndDays">
            <summary>
            线下支付汇款天数(单位:天)
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.UserCertificationSettingInfo.OfflinePayEndTime">
            <summary>
            线下支付汇款最晚时间
            </summary>
        </member>
        <member name="M:LifePayment.Application.Contracts.IAccountService.LifePayPhoneMesssageCodeLogin(LifePayment.Application.Contracts.LifePayPhoneMesssageCodeLoginInput)">
            <summary>
            手机验证码登录
@@ -777,5 +1312,25 @@
            手机号
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.WxMiniAppIndentityInfo.SessionKey">
            <summary>
            会话密钥
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.WxMiniAppIndentityInfo.OpenId">
            <summary>
            小程序OpenId
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.WxMiniAppIndentityInfo.UserName">
            <summary>
            用户名(该值为空则需手机授权登录,不为空则已有该小程序用户)
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.WxMiniAppIndentityInfo.UnionId">
            <summary>
            </summary>
        </member>
    </members>
</doc>
LifePayment/LifePayment.HttpApi/LifePay/AccountController.cs
@@ -34,6 +34,17 @@
        #region life pay
        /// <summary>
        /// 获取生活缴费用户身份会话信息
        /// </summary>
        /// <param name="code">用户登录凭证</param>
        /// <returns></returns>
        [HttpGet]
        [AllowAnonymous]
        public async Task<WxMiniAppIndentityInfo> GetLifePayWxIndentity(string code)
        {
            return await _accountService.GetLifePayWxIndentity(code);
        }
        /// <summary>
        /// life pay手机验证码登录
LifePayment/LifePayment.HttpApi/LifePay/AreaController.cs
New file
@@ -0,0 +1,85 @@
using LifePayment.Application.Contracts;
using LifePayment.Domain.Shared;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Caching;
using Volo.Abp.Uow;
namespace LifePayment.HttpApi
{
    [Route("api/[controller]/[action]")]
    [ApiController]
    [Authorize]
    public class AreaController : AbpController
    {
        private readonly IAreaService _areaService;
        private readonly IDistributedCache<List<AreaInfo>> _distributedCache;
        private readonly IDistributedCache<List<AreaDto>> _distributedAreaCache;
        public AreaController(
               IDistributedCache<List<AreaInfo>> distributedCache,
               IDistributedCache<List<AreaDto>> distributedAreaCache,
               IAreaService areaService)
        {
            _areaService = areaService;
            _distributedCache = distributedCache;
            _distributedAreaCache = distributedAreaCache;
        }
        /// <summary>
        /// 获取省市区
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [AllowAnonymous]
        public async Task<List<AreaDto>> GetAreaList()
        {
            return await _distributedAreaCache.GetOrAddAsync(LifePaymentConstant.区域信息缓存key, async () =>
            {
                return await _areaService.GetAreaList(new GetAreaListInput());
            });
        }
        /// <summary>
        /// 资讯管理--适用区域
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public async Task<List<AreaDto>> GetApplicableAreaList()
        {
            return await _areaService.GetAreaList(new GetAreaListInput
            {
                Layer = LifePaymentConstant.AreaLayerType.省,
            });
        }
        /// <summary>
        /// 获取区域列表(省、市、区)
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost]
        [UnitOfWork(IsDisabled = true)]
        public async Task<List<AreaDto>> GetAreas(GetAreaListInput input)
        {
            return await _areaService.GetAreaList(input);
        }
        /// <summary>
        /// 搜索管理--列表(区域管理)
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [AllowAnonymous]
        public async Task<List<AreaInfo>> GetRegionalManagementList()
        {
            return await _distributedCache.GetOrAddAsync(LifePaymentConstant.区域信息缓存key2, async () =>
            {
                return await _areaService.GetRegionalManagementList();
            });
        }
    }
}