Browse Source

Merge branch 'master' of https://git.zhongjie51.com/zhongjie51/99ditui

lifa 2 years ago
parent
commit
1e539018ae
29 changed files with 1378 additions and 0 deletions
  1. 30 0
      src/platform/ZhonTai.Admin/Domain/Article/AriticleEntity.cs
  2. 14 0
      src/platform/ZhonTai.Admin/Domain/Article/IAriticleRepository.cs
  3. 46 0
      src/platform/ZhonTai.Admin/Domain/Banner/BannerEntity.cs
  4. 14 0
      src/platform/ZhonTai.Admin/Domain/Banner/IBannerRepository.cs
  5. 15 0
      src/platform/ZhonTai.Admin/Domain/Project/IProjectStatRepository.cs
  6. 62 0
      src/platform/ZhonTai.Admin/Domain/Project/ProjectStatEntity.cs
  7. 4 0
      src/platform/ZhonTai.Admin/Domain/ProjectLink/ProjectLinkEntity.cs
  8. 18 0
      src/platform/ZhonTai.Admin/Repositories/Article/AriticleRepository.cs
  9. 18 0
      src/platform/ZhonTai.Admin/Repositories/Banner/BannerRepository.cs
  10. 18 0
      src/platform/ZhonTai.Admin/Repositories/Project/ProjectStatRepository.cs
  11. 104 0
      src/platform/ZhonTai.Admin/Services/Article/ArticleService.cs
  12. 24 0
      src/platform/ZhonTai.Admin/Services/Article/Dto/AriticleAddInput.cs
  13. 12 0
      src/platform/ZhonTai.Admin/Services/Article/Dto/AriticleGetOutput.cs
  14. 12 0
      src/platform/ZhonTai.Admin/Services/Article/Dto/AriticleGetPageDto.cs
  15. 12 0
      src/platform/ZhonTai.Admin/Services/Article/Dto/AriticleListOutput.cs
  16. 13 0
      src/platform/ZhonTai.Admin/Services/Article/Dto/AriticleUpdateInput.cs
  17. 12 0
      src/platform/ZhonTai.Admin/Services/Article/IArticleService.cs
  18. 110 0
      src/platform/ZhonTai.Admin/Services/Banner/BannerService.cs
  19. 40 0
      src/platform/ZhonTai.Admin/Services/Banner/Dto/BannerAddInput.cs
  20. 12 0
      src/platform/ZhonTai.Admin/Services/Banner/Dto/BannerGetOutput.cs
  21. 13 0
      src/platform/ZhonTai.Admin/Services/Banner/Dto/BannerGetPageDto.cs
  22. 36 0
      src/platform/ZhonTai.Admin/Services/Banner/Dto/BannerListOutput.cs
  23. 13 0
      src/platform/ZhonTai.Admin/Services/Banner/Dto/BannerUpdateInput.cs
  24. 11 0
      src/platform/ZhonTai.Admin/Services/Banner/IBannerService.cs
  25. 29 0
      src/platform/ZhonTai.Admin/Services/ProjectStat/Dto/ProjectStatManagePageInput.cs
  26. 42 0
      src/platform/ZhonTai.Admin/Services/ProjectStat/Dto/ProjectStatManagePageOutput.cs
  27. 12 0
      src/platform/ZhonTai.Admin/Services/ProjectStat/IProjectStatService.cs
  28. 276 0
      src/platform/ZhonTai.Admin/Services/ProjectStat/ProjectStatService.cs
  29. 356 0
      src/platform/ZhonTai.Admin/ZhonTai.Admin.xml

+ 30 - 0
src/platform/ZhonTai.Admin/Domain/Article/AriticleEntity.cs

@@ -0,0 +1,30 @@
+using FreeSql.DataAnnotations;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using ZhonTai.Admin.Core.Entities;
+
+namespace ZhonTai.Admin.Domain.Ariticle
+{
+    /// <summary>
+    /// 数据字典
+    /// </summary>
+    [Table(Name = "ditui_banner")]    
+    public class AriticleEntity:EntityTenant
+    {
+        /// <summary>
+        /// 文章标题
+        /// </summary>
+        public string Title { get; set; }
+        /// <summary>
+        /// 文章内容
+        /// </summary>
+        public string SkipContent { get; set; }       
+        /// <summary>
+        /// 排序 数值越大越靠前
+        /// </summary>
+        public int Rank { get; set; }
+    }
+}

+ 14 - 0
src/platform/ZhonTai.Admin/Domain/Article/IAriticleRepository.cs

@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using ZhonTai.Admin.Core.Repositories;
+using ZhonTai.Admin.Domain.Dict;
+
+namespace ZhonTai.Admin.Domain.Ariticle
+{
+    public interface IAriticleRepository : IRepositoryBase<AriticleEntity>
+    {
+    }
+}

+ 46 - 0
src/platform/ZhonTai.Admin/Domain/Banner/BannerEntity.cs

@@ -0,0 +1,46 @@
+using FreeSql.DataAnnotations;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using ZhonTai.Admin.Core.Entities;
+
+namespace ZhonTai.Admin.Domain.Banner
+{
+    /// <summary>
+    /// 数据字典
+    /// </summary>
+    [Table(Name = "ditui_banner")]    
+    public class BannerEntity:EntityTenant
+    {
+        /// <summary>
+        /// 活动名称
+        /// </summary>
+        public string Name { get; set; }
+        /// <summary>
+        /// 跳转方式
+        /// </summary>
+        public int SkipWay { get; set; }
+        /// <summary>
+        /// 跳转参数 文章Id或项目Id
+        /// </summary>
+        public string SkipContent { get; set; }
+        /// <summary>
+        /// 活动图片
+        /// </summary>
+        public string ImgUrl { get; set; }
+        /// <summary>
+        /// 开始时间
+        /// </summary>
+        public DateTime? BeginTime { get; set; }
+        /// <summary>
+        /// 结束时间
+        /// </summary>
+        public DateTime? EndTime { get; set; }
+        /// <summary>
+        /// 排序 数值越大越靠前
+        /// </summary>
+        public int Rank { get; set; }
+    }
+}

+ 14 - 0
src/platform/ZhonTai.Admin/Domain/Banner/IBannerRepository.cs

@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using ZhonTai.Admin.Core.Repositories;
+using ZhonTai.Admin.Domain.Dict;
+
+namespace ZhonTai.Admin.Domain.Banner
+{
+    public interface IBannerRepository : IRepositoryBase<BannerEntity>
+    {
+    }
+}

+ 15 - 0
src/platform/ZhonTai.Admin/Domain/Project/IProjectStatRepository.cs

@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using ZhonTai.Admin.Core.Repositories;
+
+namespace ZhonTai.Admin.Domain.Project
+{
+    public interface IProjectStatRepository : IRepositoryBase<ProjectStatEntity>
+    {
+
+    }
+}
+

+ 62 - 0
src/platform/ZhonTai.Admin/Domain/Project/ProjectStatEntity.cs

@@ -0,0 +1,62 @@
+using FreeSql.DataAnnotations;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using ZhonTai.Admin.Core.Entities;
+
+namespace ZhonTai.Admin.Domain.Project
+{
+    /// <summary>
+    /// 项目统计
+    /// </summary>
+    [Table(Name = "ditui_project_stat")]
+    public class ProjectStatEntity : EntityTenant
+    {
+        /// <summary>
+        /// 用户ID
+        /// </summary>
+        public long UsedUserId { get; set; }
+        /// <summary>
+        /// 项目Id
+        /// </summary>
+        public long ProjectId { get; set; }
+        /// <summary>
+        /// 编号
+        /// </summary>
+        public string Num { get; set; }
+        /// <summary>
+        /// 作业日期
+        /// </summary>
+        public DateTime EffectDate { get; set; }
+        /// <summary>
+        /// 作业日期
+        /// </summary>
+        public int EffectDateNum { get; set; }        
+        /// <summary>
+        /// 项目价格Id
+        /// </summary>
+        public long ProjectPriceId { get; set; }
+        /// <summary>
+        /// 结算标准
+        /// </summary>
+        public string Name { get; set; }
+        /// <summary>
+        /// 有效数量
+        /// </summary>
+        public int ValidCount { get; set; }
+        /// <summary>
+        /// 佣金单价
+        /// </summary>
+        public decimal CommissionPrice { get; set; }
+        /// <summary>
+        /// 是否结算 1结算 0未结算
+        /// </summary>
+        public int IsSettle { get; set; } = 0;
+        /// <summary>
+        /// 结算时间
+        /// </summary>
+        public DateTime? SettleTime { get; set; }
+    }
+}

+ 4 - 0
src/platform/ZhonTai.Admin/Domain/ProjectLink/ProjectLinkEntity.cs

@@ -76,6 +76,10 @@ namespace ZhonTai.Admin.Domain.ProjectLink
         /// 查单链接
         /// </summary>
         public string QueryUrl { get; set; }
+        /// <summary>
+        /// 用户ID
+        /// </summary>
+        public long? UsedUserId { get; set; }
 
     }
 }

+ 18 - 0
src/platform/ZhonTai.Admin/Repositories/Article/AriticleRepository.cs

@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using ZhonTai.Admin.Core.Db.Transaction;
+using ZhonTai.Admin.Domain.Ariticle;
+using ZhonTai.Admin.Domain.Dict;
+
+namespace ZhonTai.Admin.Repositories.Article
+{
+    public class AriticleRepository : AdminRepositoryBase<AriticleEntity>, IAriticleRepository
+    {
+        public AriticleRepository(UnitOfWorkManagerCloud uowm) : base(uowm)
+        {
+        }
+    }
+}

+ 18 - 0
src/platform/ZhonTai.Admin/Repositories/Banner/BannerRepository.cs

@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using ZhonTai.Admin.Core.Db.Transaction;
+using ZhonTai.Admin.Domain.Banner;
+using ZhonTai.Admin.Domain.Dict;
+
+namespace ZhonTai.Admin.Repositories.Banner
+{
+    public class BannerRepository : AdminRepositoryBase<BannerEntity>, IBannerRepository
+    {
+        public BannerRepository(UnitOfWorkManagerCloud uowm) : base(uowm)
+        {
+        }
+    }
+}

+ 18 - 0
src/platform/ZhonTai.Admin/Repositories/Project/ProjectStatRepository.cs

@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using ZhonTai.Admin.Core.Db.Transaction;
+using ZhonTai.Admin.Domain.Project;
+
+namespace ZhonTai.Admin.Repositories.Project
+{
+    public class ProjectStatRepository : AdminRepositoryBase<ProjectStatEntity>, IProjectStatRepository
+    {
+        public ProjectStatRepository(UnitOfWorkManagerCloud muowm) : base(muowm)
+        {
+
+        }
+    }
+}

+ 104 - 0
src/platform/ZhonTai.Admin/Services/Article/ArticleService.cs

@@ -0,0 +1,104 @@
+using Microsoft.AspNetCore.Mvc;
+using NPOI.SS.Formula.PTG;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using ZhonTai.Admin.Core.Consts;
+using ZhonTai.Admin.Core.Dto;
+using ZhonTai.Admin.Domain.Ariticle;
+using ZhonTai.DynamicApi.Attributes;
+using ZhonTai.DynamicApi;
+using ZhonTai.Admin.Services.Article.Dto;
+
+namespace ZhonTai.Admin.Services.Article
+{    
+   /// <summary>
+   /// 文章服务
+   /// </summary>
+    [DynamicApi(Area = AdminConsts.AreaName)]
+    public class ArticleService : BaseService, IArticleService, IDynamicApi
+    {
+        private IAriticleRepository  _ariticleRepository => LazyGetRequiredService<IAriticleRepository>();
+
+        public ArticleService()
+        {
+        }
+
+        /// <summary>
+        /// 查询模块
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        public async Task<AriticleGetOutput> GetAsync(long id)
+        {
+            var result = await _ariticleRepository.GetAsync<AriticleGetOutput>(id);
+            return result;
+        }
+
+        /// <summary>
+        /// 查询分页
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<PageOutput<AriticleListOutput>> GetPageAsync(PageInput<AriticleGetPageDto> input)
+        {            
+            var list = await _ariticleRepository.Select            
+            .Count(out var total)
+            .OrderByDescending(true, c => c.Rank)
+            .OrderByDescending(true, c => c.Id)
+            .Page(input.CurrentPage, input.PageSize)
+            .ToListAsync<AriticleListOutput>();
+
+            var data = new PageOutput<AriticleListOutput>()
+            {
+                List = list,
+                Total = total
+            };
+
+            return data;
+        }
+
+        /// <summary>
+        /// 新增
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        public async Task<long> AddAsync(AriticleAddInput input)
+        {
+            var entity = Mapper.Map<AriticleEntity>(input);
+            await _ariticleRepository.InsertAsync(entity);
+
+            return entity.Id;
+        }
+
+        /// <summary>
+        /// 修改
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        public async Task UpdateAsync(AriticleUpdateInput input)
+        {
+            var entity = await _ariticleRepository.GetAsync(input.Id);
+            if (!(entity?.Id > 0))
+            {
+                throw ResultOutput.Exception("文章信息不存在");
+            }
+
+            Mapper.Map(input, entity);
+            await _ariticleRepository.UpdateAsync(entity);
+        }
+
+        /// <summary>
+        /// 删除
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        public async Task SoftDeleteAsync(long id)
+        {
+            await _ariticleRepository.SoftDeleteAsync(id);
+        }
+    }
+}

+ 24 - 0
src/platform/ZhonTai.Admin/Services/Article/Dto/AriticleAddInput.cs

@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ZhonTai.Admin.Services.Article.Dto
+{
+    public class AriticleAddInput
+    {
+        /// <summary>
+        /// 文章标题
+        /// </summary>
+        public string Title { get; set; }
+        /// <summary>
+        /// 文章内容
+        /// </summary>
+        public string SkipContent { get; set; }
+        /// <summary>
+        /// 排序 数值越大越靠前
+        /// </summary>
+        public int Rank { get; set; }
+    }
+}

+ 12 - 0
src/platform/ZhonTai.Admin/Services/Article/Dto/AriticleGetOutput.cs

@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ZhonTai.Admin.Services.Article.Dto
+{
+    public class AriticleGetOutput
+    {
+    }
+}

+ 12 - 0
src/platform/ZhonTai.Admin/Services/Article/Dto/AriticleGetPageDto.cs

@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ZhonTai.Admin.Services.Article.Dto
+{
+    public class AriticleGetPageDto
+    {
+    }
+}

+ 12 - 0
src/platform/ZhonTai.Admin/Services/Article/Dto/AriticleListOutput.cs

@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ZhonTai.Admin.Services.Article.Dto
+{
+    public class AriticleListOutput
+    {
+    }
+}

+ 13 - 0
src/platform/ZhonTai.Admin/Services/Article/Dto/AriticleUpdateInput.cs

@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ZhonTai.Admin.Services.Article.Dto
+{
+    public class AriticleUpdateInput:AriticleAddInput
+    {
+        public long Id { get; set; }
+    }
+}

+ 12 - 0
src/platform/ZhonTai.Admin/Services/Article/IArticleService.cs

@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ZhonTai.Admin.Services.Article
+{
+    public interface IArticleService
+    {
+    }
+}

+ 110 - 0
src/platform/ZhonTai.Admin/Services/Banner/BannerService.cs

@@ -0,0 +1,110 @@
+using Microsoft.AspNetCore.Mvc;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using ZhonTai.Admin.Core.Consts;
+using ZhonTai.Admin.Core.Dto;
+using ZhonTai.Admin.Domain.Banner;
+using ZhonTai.Admin.Services.Banner.Dto;
+using ZhonTai.DynamicApi;
+using ZhonTai.DynamicApi.Attributes;
+
+namespace ZhonTai.Admin.Services.Banner
+{
+    /// <summary>
+    /// 轮播图服务
+    /// </summary>
+    [DynamicApi(Area = AdminConsts.AreaName)]
+    public class BannerService : BaseService, IBannerService, IDynamicApi
+    {
+        private IBannerRepository _bannerRepository => LazyGetRequiredService<IBannerRepository>();
+
+        public BannerService()
+        {
+        }
+
+        /// <summary>
+        /// 查询模块
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        public async Task<BannerGetOutput> GetAsync(long id)
+        {
+            var result = await _bannerRepository.GetAsync<BannerGetOutput>(id);
+            return result;
+        }
+
+        /// <summary>
+        /// 查询分页
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<PageOutput<BannerListOutput>> GetPageAsync(PageInput<BannerGetPageDto> input)
+        {
+            //1未开始 2进行中 3已结束
+            var status = input.Filter?.Status;
+            DateTime dtnow = DateTime.Now;
+
+            var list = await _bannerRepository.Select
+            .WhereIf(status.HasValue&&status==1, a => a.BeginTime> dtnow)
+            .WhereIf(status.HasValue && status == 2, a => a.BeginTime < dtnow && a.EndTime> dtnow)
+            .WhereIf(status.HasValue && status == 3, a => a.EndTime < dtnow)
+            .Count(out var total)
+            .OrderByDescending(true, c => c.Rank)
+            .OrderByDescending(true, c => c.Id)
+            .Page(input.CurrentPage, input.PageSize)
+            .ToListAsync<BannerListOutput>();
+
+            var data = new PageOutput<BannerListOutput>()
+            {
+                List = list,
+                Total = total
+            };
+
+            return data;
+        }
+
+        /// <summary>
+        /// 新增
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        public async Task<long> AddAsync(BannerAddInput input)
+        {
+            var entity = Mapper.Map<BannerEntity>(input);
+            await _bannerRepository.InsertAsync(entity);
+
+            return entity.Id;
+        }
+
+        /// <summary>
+        /// 修改
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        public async Task UpdateAsync(BannerUpdateInput input)
+        {
+            var entity = await _bannerRepository.GetAsync(input.Id);
+            if (!(entity?.Id > 0))
+            {
+                throw ResultOutput.Exception("轮播图信息不存在");
+            }
+
+            Mapper.Map(input, entity);
+            await _bannerRepository.UpdateAsync(entity);
+        }        
+
+        /// <summary>
+        /// 删除
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        public async Task SoftDeleteAsync(long id)
+        {
+            await _bannerRepository.SoftDeleteAsync(id);
+        }       
+    }
+}

+ 40 - 0
src/platform/ZhonTai.Admin/Services/Banner/Dto/BannerAddInput.cs

@@ -0,0 +1,40 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ZhonTai.Admin.Services.Banner.Dto
+{
+    public class BannerAddInput
+    {
+        /// <summary>
+        /// 活动名称
+        /// </summary>
+        public string Name { get; set; }
+        /// <summary>
+        /// 跳转方式
+        /// </summary>
+        public int SkipWay { get; set; }
+        /// <summary>
+        /// 跳转参数 文章Id或项目Id
+        /// </summary>
+        public string SkipContent { get; set; }
+        /// <summary>
+        /// 活动图片
+        /// </summary>
+        public string ImgUrl { get; set; }
+        /// <summary>
+        /// 开始时间
+        /// </summary>
+        public DateTime? BeginTime { get; set; }
+        /// <summary>
+        /// 结束时间
+        /// </summary>
+        public DateTime? EndTime { get; set; }
+        /// <summary>
+        /// 排序 数值越大越靠前
+        /// </summary>
+        public int Rank { get; set; }
+    }
+}

+ 12 - 0
src/platform/ZhonTai.Admin/Services/Banner/Dto/BannerGetOutput.cs

@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ZhonTai.Admin.Services.Banner.Dto
+{
+    public class BannerGetOutput:BannerUpdateInput
+    {
+    }
+}

+ 13 - 0
src/platform/ZhonTai.Admin/Services/Banner/Dto/BannerGetPageDto.cs

@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ZhonTai.Admin.Services.Banner.Dto
+{
+    public class BannerGetPageDto
+    {
+        public int? Status { get; set; }
+    }
+}

+ 36 - 0
src/platform/ZhonTai.Admin/Services/Banner/Dto/BannerListOutput.cs

@@ -0,0 +1,36 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ZhonTai.Admin.Services.Banner.Dto
+{
+    public class BannerListOutput
+    {
+        /// <summary>
+        /// id
+        /// </summary>
+        public long Id { get; set; }
+        /// <summary>
+        /// 活动名称
+        /// </summary>
+        public string Name { get; set; }                
+        /// <summary>
+        /// 活动图片
+        /// </summary>
+        public string ImgUrl { get; set; }
+        /// <summary>
+        /// 开始时间
+        /// </summary>
+        public DateTime? BeginTime { get; set; }
+        /// <summary>
+        /// 结束时间
+        /// </summary>
+        public DateTime? EndTime { get; set; }
+        /// <summary>
+        /// 排序 数值越大越靠前
+        /// </summary>
+        public int Rank { get; set; }
+    }
+}

+ 13 - 0
src/platform/ZhonTai.Admin/Services/Banner/Dto/BannerUpdateInput.cs

@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ZhonTai.Admin.Services.Banner.Dto
+{
+    public class BannerUpdateInput:BannerAddInput
+    {
+        public long Id { get; set; }
+    }
+}

+ 11 - 0
src/platform/ZhonTai.Admin/Services/Banner/IBannerService.cs

@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ZhonTai.Admin.Services.Banner
+{
+    public interface IBannerService
+    { }
+}

+ 29 - 0
src/platform/ZhonTai.Admin/Services/ProjectStat/Dto/ProjectStatManagePageInput.cs

@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ZhonTai.Admin.Services.ProjectStat.Dto
+{
+    public class ProjectStatManagePageInput
+    {
+        /// <summary>
+        /// 项目Id
+        /// </summary>
+        public long ProjectId { get; set; }
+        /// <summary>
+        /// 平台Id
+        /// </summary>
+        public long TenantId { get; set; }
+        /// <summary>
+        /// 结算状态
+        /// </summary>
+        public int? IsSettele { get; set; }
+        /// <summary>
+        /// 作业时间
+        /// </summary>
+        public DateTime? EffectDate { get; set; }
+       
+    }
+}

+ 42 - 0
src/platform/ZhonTai.Admin/Services/ProjectStat/Dto/ProjectStatManagePageOutput.cs

@@ -0,0 +1,42 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ZhonTai.Admin.Services.ProjectStat.Dto
+{
+    public class ProjectStatManagePageOutput
+    {
+        public long ProjectId { get; set; }
+        public long TenantId { get; set; }
+        /// <summary>
+        /// 项目
+        /// </summary>
+        public string ProjectName { get; set; }
+        /// <summary>
+        /// 平台
+        /// </summary>
+        public string OrgName { get; set; }
+        /// <summary>
+        /// 作业时间
+        /// </summary>
+        public DateTime EffectDate { get; set; }
+        /// <summary>
+        /// 有效数量
+        /// </summary>
+        public decimal VaildCount { get; set; }
+        /// <summary>
+        /// 总数
+        /// </summary>
+        public decimal Count { get; set; }
+        /// <summary>
+        /// 佣金
+        /// </summary>
+        public decimal TotalCommission { get; set; }
+        /// <summary>
+        /// 结算状态
+        /// </summary>
+        public int IsSettle { get; set; }
+    }
+}

+ 12 - 0
src/platform/ZhonTai.Admin/Services/ProjectStat/IProjectStatService.cs

@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ZhonTai.Admin.Services.ProjectStat
+{
+    public interface IProjectStatService
+    {
+    }
+}

+ 276 - 0
src/platform/ZhonTai.Admin/Services/ProjectStat/ProjectStatService.cs

@@ -0,0 +1,276 @@
+using NPOI.SS.Formula.PTG;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using ZhonTai.Admin.Core.Consts;
+using ZhonTai.Admin.Services.ProjectLink;
+using ZhonTai.DynamicApi.Attributes;
+using ZhonTai.DynamicApi;
+using ZhonTai.Admin.Domain.Project;
+using Microsoft.AspNetCore.Mvc;
+using ZhonTai.Admin.Core.Dto;
+using ZhonTai.Admin.Services.ProjectStat.Dto;
+using ZhonTai.Admin.Domain.Org;
+using System.ComponentModel.DataAnnotations;
+using Microsoft.AspNetCore.Http;
+using ZhonTai.Admin.Core.Configs;
+using Microsoft.Extensions.Options;
+using System.IO;
+using ZhonTai.Common.Files;
+using ZhonTai.Admin.Core.Helpers;
+using Microsoft.AspNetCore.Hosting;
+using System.Data;
+using ZhonTai.Admin.Domain.ProjectLink;
+using ZhonTai.Common.Extensions;
+
+namespace ZhonTai.Admin.Services.ProjectStat
+{
+    /// <summary>
+    /// 项目统计服务
+    /// </summary>
+    [Order(10)]
+    [DynamicApi(Area = AdminConsts.AreaName)]
+    public class ProjectStatService : BaseService, IProjectStatService, IDynamicApi
+    {
+        private IProjectStatRepository _projectStatRepository => LazyGetRequiredService<IProjectStatRepository>();
+        private IProjectRepository _projectRepository => LazyGetRequiredService<IProjectRepository>();
+        private IProjectPriceRepository _projectPriceRepository => LazyGetRequiredService<IProjectPriceRepository>();
+        private IOrgRepository _orgRepository => LazyGetRequiredService<IOrgRepository>();
+        private OSSConfig _oSSConfig => LazyGetRequiredService<IOptions<OSSConfig>>().Value;
+        private IHttpContextAccessor _httpContextAccessor => LazyGetRequiredService<IHttpContextAccessor>();
+        private IProjectLinkRepository _projectLinkRepository => LazyGetRequiredService<IProjectLinkRepository>();
+
+        public ProjectStatService()
+        {
+        }
+        /// <summary>
+        /// 查询统计管理分页
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<PageOutput<ProjectStatManagePageOutput>> GetManagePageAsync(PageInput<ProjectStatManagePageInput> input)
+        {
+            var ProjectId = input.Filter?.ProjectId;
+            var TenantId = input.Filter?.TenantId;
+            var IsSettele = input.Filter?.IsSettele;
+            var EffectDate = input.Filter?.EffectDate;
+
+            var list = _projectStatRepository.Select.DisableGlobalFilter(FilterNames.Tenant)
+                .WhereIf(ProjectId.HasValue && ProjectId.Value > 0, a => a.ProjectId == ProjectId)
+                .WhereIf(TenantId.HasValue && TenantId.Value > 0, a => a.TenantId == TenantId)
+                .WhereIf(IsSettele.HasValue, a => a.IsSettle == IsSettele)
+                .WhereIf(EffectDate.HasValue, a => a.EffectDate == EffectDate)
+                .GroupBy(m => new { m.ProjectId, m.TenantId, m.EffectDate })
+            .Count(out var total)
+            .Page(input.CurrentPage, input.PageSize)
+            .ToList(m => new ProjectStatManagePageOutput()
+            {
+                ProjectId = m.Key.ProjectId,
+                TenantId = m.Key.TenantId.Value,
+                EffectDate = m.Key.EffectDate,
+                VaildCount = m.Sum(m.Value.ValidCount),
+                Count = m.Sum(m.Value.ValidCount),
+                IsSettle = m.Sum(m.Value.IsSettle) > 0 ? 1 : 0,
+                ProjectName = "",
+                OrgName = "",
+                TotalCommission = m.Sum(m.Value.CommissionPrice * m.Value.ValidCount),
+            });
+            //项目名称
+            var listProjectId = list.Select(m => m.ProjectId).Distinct().ToList();
+            if (listProjectId.Count() > 0)
+            {
+                var listProject = await _projectRepository.Select.DisableGlobalFilter(FilterNames.Tenant).Where(m => listProjectId.Contains(m.Id)).ToListAsync(m => new
+                {
+                    m.Id,
+                    m.Name
+                });
+                foreach (var item in list)
+                {
+                    var project = listProject.FirstOrDefault(m => m.Id == item.ProjectId);
+                    if (project != null)
+                        item.ProjectName = project.Name;
+                }
+            }
+            //平台
+            var listTenantId = list.Select(m => m.TenantId).Distinct().ToList();
+            if (listTenantId.Count() > 0)
+            {
+                var listTenant = await _orgRepository.Select.DisableGlobalFilter(FilterNames.Tenant).Where(m => listTenantId.Contains(m.TenantId.Value)).ToListAsync(m => new
+                {
+                    m.TenantId,
+                    m.Name
+                });
+                foreach (var item in list)
+                {
+                    var model = listTenant.FirstOrDefault(m => m.TenantId == item.TenantId);
+                    if (model != null)
+                        item.OrgName = model.Name;
+                }
+            }
+            var data = new PageOutput<ProjectStatManagePageOutput>()
+            {
+                List = list,
+                Total = total
+            };
+
+            return data;
+        }
+
+        private static object locker = new object();//创建锁
+        private static List<long> ProjectIds = new List<long>();//项目
+        /// <summary>
+        /// 上传统计文件
+        /// </summary>
+        /// <param name="file">文件</param>
+        /// <param name="ProjectId">文件目录</param>      
+        /// <returns></returns>            
+        public async Task UploadAsync([Required] IFormFile file, [Required] long ProjectId)
+        {
+            try
+            {
+                lock (locker)//加锁
+                {
+                    if (ProjectIds.Contains(ProjectId))
+                    {
+                        throw new Exception("该项目统计数据正在上传,请稍后");
+                    }
+                }
+                var localUploadConfig = _oSSConfig.LocalUploadConfig;
+
+                var extention = Path.GetExtension(file.FileName).ToLower();
+                if (extention != ".xlsx")
+                {
+                    throw new Exception($"请上传.xlsx格式文件");
+                }
+                var fileLenth = file.Length;
+                if (fileLenth <= 0)
+                {
+                    throw new Exception("文件不能为空");
+                }
+                if (fileLenth > localUploadConfig.MaxSize)
+                {
+                    throw new Exception($"文件大小不能超过{new FileSize(localUploadConfig.MaxSize)}");
+                }
+                if (ProjectId <= 0)
+                {
+                    throw new Exception($"请输入有效项目Id");
+                }
+
+                string fileDirectory = "stat";
+
+                string SaveFileName = FreeUtil.NewMongodbId().ToString();
+
+                var filePath = Path.Combine(fileDirectory, SaveFileName + extention).ToPath();
+
+                var uploadHelper = LazyGetRequiredService<UploadHelper>();
+                var env = LazyGetRequiredService<IWebHostEnvironment>();
+                fileDirectory = Path.Combine(env.WebRootPath, fileDirectory).ToPath();
+                if (!Directory.Exists(fileDirectory))
+                {
+                    Directory.CreateDirectory(fileDirectory);
+                }
+                filePath = Path.Combine(env.WebRootPath, filePath).ToPath();
+                await uploadHelper.SaveAsync(file, filePath);
+
+                //导入数据
+                var datatable = NOPIHelper.ReadExcel(filePath);
+                if (datatable == null || datatable.Rows.Count <= 0)
+                {
+                    throw new Exception($"文件不能为空");
+                }
+                var listPrice = await _projectPriceRepository.Select.DisableGlobalFilter(FilterNames.Tenant).Where(m => m.ProjectId == ProjectId).ToListAsync();
+                if (listPrice.Count() <= 0)
+                {
+                    throw new Exception($"项目不存在");
+                }
+                bool IsComplete = true; //标准是否完整 true完整 false不完整
+                foreach (var item in listPrice)
+                {
+                    if (datatable.Columns[item.Name] == null)
+                    {
+                        IsComplete = false;
+                        break;
+                    }
+                }
+                if (datatable.Columns["二维码编号"] == null || datatable.Columns["作业日期"] == null|| !IsComplete)
+                {
+                    throw new Exception($"导入格式不正确");
+                }
+                List<string> listDate = (from d in datatable.AsEnumerable() select d.Field<string>("作业日期")).ToList();
+                var listDateInt = listDate.Select(m => int.Parse(m.Replace("-", "")));
+                //已结算数据是否存在
+                var count = await _projectStatRepository.Select.DisableGlobalFilter(FilterNames.Tenant).Where(m => m.ProjectId == ProjectId && listDateInt.Contains(m.EffectDateNum) && m.IsSettle == 1).CountAsync();
+                if (count > 0)
+                {
+                    throw new Exception($"请删除作业时间已结算的数据");
+                }
+                //是否有覆盖数据存在
+                var listFuGai = await _projectStatRepository.Select.DisableGlobalFilter(FilterNames.Tenant).Where(m => m.ProjectId == ProjectId && listDateInt.Contains(m.EffectDateNum) && m.IsSettle == 0).ToListAsync(m=>m.EffectDateNum);
+                if (listFuGai.Count() > 0)
+                {
+                     listFuGai = listFuGai.Distinct().ToList();
+                     await _projectStatRepository.UpdateDiy.Set(m=>m.IsDeleted,true).Where(m => listFuGai.Contains(m.EffectDateNum)).ExecuteUpdatedAsync();
+                }
+                List<ProjectStatEntity> list = new List<ProjectStatEntity>();
+                foreach (DataRow row in datatable.Rows)
+                {
+                    string num = row["二维码编号"]?.ToString();
+                    DateTime EffectDate = row["作业日期"].ToDateTime();
+                    int EffectDateNum = EffectDate.ToString("yyyyMMdd").ToInt();
+
+                    var link = await _projectLinkRepository.Select.DisableGlobalFilter(FilterNames.Tenant).Where(m => m.ProjectId == ProjectId && m.Num==num ).ToOneAsync();                    
+                    foreach (var price in listPrice)
+                    {
+                        var model=new ProjectStatEntity()
+                        {
+                            Num = num,
+                            EffectDate = EffectDate,
+                            EffectDateNum = EffectDateNum,
+                            ProjectPriceId = price.Id,
+                            ProjectId = price.ProjectId,
+                            ValidCount = row[price.Name].ToInt(),
+                            Name = price.Name,
+                            CommissionPrice = 0,
+                            IsSettle = 0,
+                            TenantId = link?.TenantId,
+                        };
+                        list.Add(model);
+                    }
+                }
+                await _projectStatRepository.InsertAsync(list);
+            }
+            catch (Exception ex)
+            {
+                throw new Exception($"导入项目统计异常");
+            }
+            finally
+            {
+                ProjectIds.Remove(ProjectId);
+            }
+        }
+        /// <summary>
+        /// 下载项目统计模板
+        /// </summary>        
+        /// <returns></returns>        
+        [HttpGet]
+        public string DownLinkCodeAsync()
+        {
+            string fileDirectory = "stat";
+            var filePath = Path.Combine(fileDirectory, "statcode.xlsx").ToPath();
+
+            var env = LazyGetRequiredService<IWebHostEnvironment>();
+            var file = Path.Combine(env.WebRootPath, filePath).ToPath();
+            if (!System.IO.File.Exists(file))
+            {
+                throw new Exception($"项目统计模板文件不存在");
+            }
+
+            var linkUrl = $"{_httpContextAccessor.HttpContext.Request.Scheme}://{_httpContextAccessor.HttpContext.Request.Host.Value}/{filePath}";
+
+            return linkUrl;
+        }
+    }
+}

+ 356 - 0
src/platform/ZhonTai.Admin/ZhonTai.Admin.xml

@@ -2257,6 +2257,66 @@
             主键Id
             </summary>
         </member>
+        <member name="T:ZhonTai.Admin.Domain.Ariticle.AriticleEntity">
+            <summary>
+            数据字典
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Ariticle.AriticleEntity.Title">
+            <summary>
+            文章标题
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Ariticle.AriticleEntity.SkipContent">
+            <summary>
+            文章内容
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Ariticle.AriticleEntity.Rank">
+            <summary>
+            排序 数值越大越靠前
+            </summary>
+        </member>
+        <member name="T:ZhonTai.Admin.Domain.Banner.BannerEntity">
+            <summary>
+            数据字典
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Banner.BannerEntity.Name">
+            <summary>
+            活动名称
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Banner.BannerEntity.SkipWay">
+            <summary>
+            跳转方式
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Banner.BannerEntity.SkipContent">
+            <summary>
+            跳转参数 文章Id或项目Id
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Banner.BannerEntity.ImgUrl">
+            <summary>
+            活动图片
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Banner.BannerEntity.BeginTime">
+            <summary>
+            开始时间
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Banner.BannerEntity.EndTime">
+            <summary>
+            结束时间
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Banner.BannerEntity.Rank">
+            <summary>
+            排序 数值越大越靠前
+            </summary>
+        </member>
         <member name="T:ZhonTai.Admin.Domain.DictType.DictTypeEntity">
             <summary>
             数据字典类型
@@ -3219,6 +3279,61 @@
             同项目状态
             </summary>
         </member>
+        <member name="T:ZhonTai.Admin.Domain.Project.ProjectStatEntity">
+            <summary>
+            项目统计
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Project.ProjectStatEntity.ProjectId">
+            <summary>
+            项目Id
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Project.ProjectStatEntity.Num">
+            <summary>
+            编号
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Project.ProjectStatEntity.EffectDate">
+            <summary>
+            作业日期
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Project.ProjectStatEntity.EffectDateNum">
+            <summary>
+            作业日期
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Project.ProjectStatEntity.ProjectPriceId">
+            <summary>
+            项目价格Id
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Project.ProjectStatEntity.Name">
+            <summary>
+            结算标准
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Project.ProjectStatEntity.ValidCount">
+            <summary>
+            有效数量
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Project.ProjectStatEntity.CommissionPrice">
+            <summary>
+            佣金单价
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Project.ProjectStatEntity.IsSettle">
+            <summary>
+            是否结算 1结算 0未结算
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Project.ProjectStatEntity.SettleTime">
+            <summary>
+            结算时间
+            </summary>
+        </member>
         <member name="T:ZhonTai.Admin.Domain.RoleOrgEntity">
             <summary>
             角色部门
@@ -4515,6 +4630,61 @@
             api接口
             </summary>
         </member>
+        <member name="T:ZhonTai.Admin.Services.Article.ArticleService">
+            <summary>
+            文章服务
+            </summary>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.Article.ArticleService.GetAsync(System.Int64)">
+            <summary>
+            查询模块
+            </summary>
+            <param name="id"></param>
+            <returns></returns>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.Article.ArticleService.GetPageAsync(ZhonTai.Admin.Core.Dto.PageInput{ZhonTai.Admin.Services.Article.Dto.AriticleGetPageDto})">
+            <summary>
+            查询分页
+            </summary>
+            <param name="input"></param>
+            <returns></returns>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.Article.ArticleService.AddAsync(ZhonTai.Admin.Services.Article.Dto.AriticleAddInput)">
+            <summary>
+            新增
+            </summary>
+            <param name="input"></param>
+            <returns></returns>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.Article.ArticleService.UpdateAsync(ZhonTai.Admin.Services.Article.Dto.AriticleUpdateInput)">
+            <summary>
+            修改
+            </summary>
+            <param name="input"></param>
+            <returns></returns>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.Article.ArticleService.SoftDeleteAsync(System.Int64)">
+            <summary>
+            删除
+            </summary>
+            <param name="id"></param>
+            <returns></returns>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Article.Dto.AriticleAddInput.Title">
+            <summary>
+            文章标题
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Article.Dto.AriticleAddInput.SkipContent">
+            <summary>
+            文章内容
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Article.Dto.AriticleAddInput.Rank">
+            <summary>
+            排序 数值越大越靠前
+            </summary>
+        </member>
         <member name="T:ZhonTai.Admin.Services.Auth.AuthService">
             <summary>
             认证授权服务
@@ -4855,6 +5025,111 @@
             认证授权接口
             </summary>
         </member>
+        <member name="T:ZhonTai.Admin.Services.Banner.BannerService">
+            <summary>
+            轮播图服务
+            </summary>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.Banner.BannerService.GetAsync(System.Int64)">
+            <summary>
+            查询模块
+            </summary>
+            <param name="id"></param>
+            <returns></returns>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.Banner.BannerService.GetPageAsync(ZhonTai.Admin.Core.Dto.PageInput{ZhonTai.Admin.Services.Banner.Dto.BannerGetPageDto})">
+            <summary>
+            查询分页
+            </summary>
+            <param name="input"></param>
+            <returns></returns>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.Banner.BannerService.AddAsync(ZhonTai.Admin.Services.Banner.Dto.BannerAddInput)">
+            <summary>
+            新增
+            </summary>
+            <param name="input"></param>
+            <returns></returns>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.Banner.BannerService.UpdateAsync(ZhonTai.Admin.Services.Banner.Dto.BannerUpdateInput)">
+            <summary>
+            修改
+            </summary>
+            <param name="input"></param>
+            <returns></returns>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.Banner.BannerService.SoftDeleteAsync(System.Int64)">
+            <summary>
+            删除
+            </summary>
+            <param name="id"></param>
+            <returns></returns>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Banner.Dto.BannerAddInput.Name">
+            <summary>
+            活动名称
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Banner.Dto.BannerAddInput.SkipWay">
+            <summary>
+            跳转方式
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Banner.Dto.BannerAddInput.SkipContent">
+            <summary>
+            跳转参数 文章Id或项目Id
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Banner.Dto.BannerAddInput.ImgUrl">
+            <summary>
+            活动图片
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Banner.Dto.BannerAddInput.BeginTime">
+            <summary>
+            开始时间
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Banner.Dto.BannerAddInput.EndTime">
+            <summary>
+            结束时间
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Banner.Dto.BannerAddInput.Rank">
+            <summary>
+            排序 数值越大越靠前
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Banner.Dto.BannerListOutput.Id">
+            <summary>
+            id
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Banner.Dto.BannerListOutput.Name">
+            <summary>
+            活动名称
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Banner.Dto.BannerListOutput.ImgUrl">
+            <summary>
+            活动图片
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Banner.Dto.BannerListOutput.BeginTime">
+            <summary>
+            开始时间
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Banner.Dto.BannerListOutput.EndTime">
+            <summary>
+            结束时间
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Banner.Dto.BannerListOutput.Rank">
+            <summary>
+            排序 数值越大越靠前
+            </summary>
+        </member>
         <member name="P:ZhonTai.Admin.Services.BaseService.Cache">
             <summary>
             缓存
@@ -7784,6 +8059,87 @@
             </summary>        
             <returns></returns>        
         </member>
+        <member name="P:ZhonTai.Admin.Services.ProjectStat.Dto.ProjectStatManagePageInput.ProjectId">
+            <summary>
+            项目Id
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.ProjectStat.Dto.ProjectStatManagePageInput.TenantId">
+            <summary>
+            平台Id
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.ProjectStat.Dto.ProjectStatManagePageInput.IsSettele">
+            <summary>
+            结算状态
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.ProjectStat.Dto.ProjectStatManagePageInput.EffectDate">
+            <summary>
+            作业时间
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.ProjectStat.Dto.ProjectStatManagePageOutput.ProjectName">
+            <summary>
+            项目
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.ProjectStat.Dto.ProjectStatManagePageOutput.OrgName">
+            <summary>
+            平台
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.ProjectStat.Dto.ProjectStatManagePageOutput.EffectDate">
+            <summary>
+            作业时间
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.ProjectStat.Dto.ProjectStatManagePageOutput.VaildCount">
+            <summary>
+            有效数量
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.ProjectStat.Dto.ProjectStatManagePageOutput.Count">
+            <summary>
+            总数
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.ProjectStat.Dto.ProjectStatManagePageOutput.TotalCommission">
+            <summary>
+            佣金
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.ProjectStat.Dto.ProjectStatManagePageOutput.IsSettle">
+            <summary>
+            结算状态
+            </summary>
+        </member>
+        <member name="T:ZhonTai.Admin.Services.ProjectStat.ProjectStatService">
+            <summary>
+            项目统计服务
+            </summary>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.ProjectStat.ProjectStatService.GetManagePageAsync(ZhonTai.Admin.Core.Dto.PageInput{ZhonTai.Admin.Services.ProjectStat.Dto.ProjectStatManagePageInput})">
+            <summary>
+            查询统计管理分页
+            </summary>
+            <param name="input"></param>
+            <returns></returns>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.ProjectStat.ProjectStatService.UploadAsync(Microsoft.AspNetCore.Http.IFormFile,System.Int64)">
+            <summary>
+            上传统计文件
+            </summary>
+            <param name="file">文件</param>
+            <param name="ProjectId">文件目录</param>      
+            <returns></returns>            
+        </member>
+        <member name="M:ZhonTai.Admin.Services.ProjectStat.ProjectStatService.DownLinkCodeAsync">
+            <summary>
+            下载项目统计模板
+            </summary>        
+            <returns></returns>        
+        </member>
         <member name="P:ZhonTai.Admin.Services.Project.Dto.CompanyDrawInput.DrawRatio">
             <summary>
             抽成比例