diff --git a/src/Shentun.Peis.Application.Contracts/GetReportInFilterDto.cs b/src/Shentun.Peis.Application.Contracts/GetReportInFilterDto.cs
new file mode 100644
index 0000000..184614f
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/GetReportInFilterDto.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Text;
+using Volo.Abp.Application.Dtos;
+
+namespace Shentun.Peis
+{
+    public class GetReportInFilterDto : PagedAndSortedResultRequestDto
+    {
+        [Required]
+        public string ReportId { get; set; }
+
+        [Required]
+        public string DataSetJson { get; set; }
+
+        public string ParameterJson { get; set; }
+    }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/ReportFormatTemplates/CreateReportFormatTemplateDto.cs b/src/Shentun.Peis.Application.Contracts/ReportFormatTemplates/CreateReportFormatTemplateDto.cs
new file mode 100644
index 0000000..74da0ec
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/ReportFormatTemplates/CreateReportFormatTemplateDto.cs
@@ -0,0 +1,43 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.Peis.ReportFormatTemplates
+{
+    public class CreateReportFormatTemplateDto
+    {
+        public string Id { get; set; }
+
+        /// 
+        /// 报表格式ID
+        /// 
+        public string ReportFormatId { get; set; }
+
+        /// 
+        /// 格式名称
+        /// 
+        public string DisplayName { get; set; }
+
+        /// 
+        /// 模板文件类型 0:fastereport 1:Grid++Report
+        /// 
+        public char TemplateFileType { get; set; }
+
+        /// 
+        /// 模板文件
+        /// 
+        public string TemplateFile { get; set; }
+
+        public string DataSetJson { get; set; }
+
+        /// 
+        /// 是否系统自定义(Y:是,N:否)
+        /// 
+        public char IsSystem { get; set; }
+
+        /// 
+        /// 是否默认(Y:是,N:否)
+        /// 
+        public char IsDefault { get; set; }
+    }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/ReportFormatTemplates/ReportFormatTemplateDto.cs b/src/Shentun.Peis.Application.Contracts/ReportFormatTemplates/ReportFormatTemplateDto.cs
new file mode 100644
index 0000000..247c0ad
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/ReportFormatTemplates/ReportFormatTemplateDto.cs
@@ -0,0 +1,59 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Volo.Abp.Application.Dtos;
+
+namespace Shentun.Peis.ReportFormatTemplates
+{
+    public class ReportFormatTemplateDto : AuditedEntityDto
+    {
+        /// 
+        /// 报表格式ID
+        /// 
+        public string ReportFormatId { get; set; }
+
+        /// 
+        /// 格式名称
+        /// 
+        public string DisplayName { get; set; }
+
+        /// 
+        /// 模板文件类型 0:fastereport 1:Grid++Report
+        /// 
+        public char TemplateFileType { get; set; }
+
+        /// 
+        /// 模板文件
+        /// 
+        public string TemplateFile { get; set; }
+
+        /// 
+        /// 数据集Json
+        /// 
+        public string DataSetJson { get; set; }
+
+        /// 
+        /// 是否系统自定义(Y:是,N:否)
+        /// 
+        public char IsSystem { get; set; }
+
+        public bool IsSystemed { get; set; }
+
+        /// 
+        /// 是否默认(Y:是,N:否)
+        /// 
+        public char IsDefault { get; set; }
+
+        public bool IsDefaulted { get; set; }
+
+        /// 
+        /// 创建者
+        /// 
+        public string CreatorName { get; set; }
+
+        /// 
+        /// 最后修改者
+        /// 
+        public string LastModifierName { get; set; }
+    }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/ReportFormatTemplates/UpdateReportFormatTemplateDto.cs b/src/Shentun.Peis.Application.Contracts/ReportFormatTemplates/UpdateReportFormatTemplateDto.cs
new file mode 100644
index 0000000..33dfdc4
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/ReportFormatTemplates/UpdateReportFormatTemplateDto.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.Peis.ReportFormatTemplates
+{
+    public class UpdateReportFormatTemplateDto
+    {
+
+        public string ReportFormatId { get; set; }
+
+        public string DisplayName { get; set; }
+
+        public char TemplateFileType { get; set; }
+
+        public string TemplateFile { get; set; }
+
+        public string DataSetJson { get; set; }
+
+        public char IsSystem { get; set; }
+
+        public char IsDefault { get; set; }
+    }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/ReportFormats/CreateReportFormatDto.cs b/src/Shentun.Peis.Application.Contracts/ReportFormats/CreateReportFormatDto.cs
new file mode 100644
index 0000000..fc05ccb
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/ReportFormats/CreateReportFormatDto.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.Peis.ReportFormats
+{
+    public class CreateReportFormatDto
+    {
+        public string Id { get; set; }
+
+        /// 
+        /// 报表名称
+        /// 
+        public string DisplayName { get; set; }
+
+        /// 
+        /// 报表名称
+        /// 
+        public char IsDefault { get; set; }
+
+        /// 
+        /// 报表ID
+        /// 
+        public string ReportId { get; set; }
+    }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/ReportFormats/ReportFormatDto.cs b/src/Shentun.Peis.Application.Contracts/ReportFormats/ReportFormatDto.cs
new file mode 100644
index 0000000..6ea1f02
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/ReportFormats/ReportFormatDto.cs
@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Volo.Abp.Application.Dtos;
+
+namespace Shentun.Peis.ReportFormats
+{
+    public class ReportFormatDto : AuditedEntityDto
+    {
+        /// 
+        /// 报表名称
+        /// 
+        public string DisplayName { get; set; }
+
+        /// 
+        /// 报表名称
+        /// 
+        public char IsDefault { get; set; }
+
+        public bool IsDefaulted { get; set; }
+
+        /// 
+        /// 报表ID
+        /// 
+        public string ReportId { get; set; }
+
+        /// 
+        /// 创建者
+        /// 
+        public string CreatorName { get; set; }
+
+        /// 
+        /// 最后修改者
+        /// 
+        public string LastModifierName { get; set; }
+    }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/ReportFormats/UpdateReportFormatDto.cs b/src/Shentun.Peis.Application.Contracts/ReportFormats/UpdateReportFormatDto.cs
new file mode 100644
index 0000000..c2f7251
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/ReportFormats/UpdateReportFormatDto.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.Peis.ReportFormats
+{
+    public class UpdateReportFormatDto
+    {
+        /// 
+        /// 报表名称
+        /// 
+        public string DisplayName { get; set; }
+
+        /// 
+        /// 报表名称
+        /// 
+        public char IsDefault { get; set; }
+
+        /// 
+        /// 报表ID
+        /// 
+        public string ReportId { get; set; }
+    }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/ReportPrinters/CreateReportPrinterDto.cs b/src/Shentun.Peis.Application.Contracts/ReportPrinters/CreateReportPrinterDto.cs
new file mode 100644
index 0000000..a5ad8ac
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/ReportPrinters/CreateReportPrinterDto.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.Peis.ReportPrinters
+{
+    public class CreateReportPrinterDto
+    {
+        public string Id { get; set; }
+
+        /// 
+        /// 报表ID
+        /// 
+        public string ReportId { get; set; }
+
+        /// 
+        /// 计算机名称
+        /// 
+        public string ComputerName { get; set; }
+
+        /// 
+        /// 打印机名称
+        /// 
+        public string PrinterName { get; set; }
+    }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/ReportPrinters/ReportPrinterDto.cs b/src/Shentun.Peis.Application.Contracts/ReportPrinters/ReportPrinterDto.cs
new file mode 100644
index 0000000..ee68e17
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/ReportPrinters/ReportPrinterDto.cs
@@ -0,0 +1,35 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Volo.Abp.Application.Dtos;
+
+namespace Shentun.Peis.ReportPrinters
+{
+    public class ReportPrinterDto:AuditedEntityDto
+    {
+        /// 
+        /// 计算机名称
+        /// 
+        public string ComputerName { get; set; }
+
+        /// 
+        /// 打印机名称
+        /// 
+        public string PrinterName { get; set; }
+
+        /// 
+        /// 报表ID
+        /// 
+        public string ReportId { get; set; }
+
+        /// 
+        /// 创建者
+        /// 
+        public string CreatorName { get; set; }
+
+        /// 
+        /// 最后修改者
+        /// 
+        public string LastModifierName { get; set; }
+    }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/ReportPrinters/UpdateReportPrinterDto.cs b/src/Shentun.Peis.Application.Contracts/ReportPrinters/UpdateReportPrinterDto.cs
new file mode 100644
index 0000000..6812c09
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/ReportPrinters/UpdateReportPrinterDto.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.Peis.ReportPrinters
+{
+    public class UpdateReportPrinterDto
+    {
+        /// 
+        /// 报表ID
+        /// 
+        public string ReportId { get; set; }
+        /// 
+        /// 计算机名称
+        /// 
+        public string ComputerName { get; set; }
+
+        /// 
+        /// 打印机名称
+        /// 
+        public string PrinterName { get; set; }
+    }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/Reports/CreateReportDto.cs b/src/Shentun.Peis.Application.Contracts/Reports/CreateReportDto.cs
new file mode 100644
index 0000000..46ac46c
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/Reports/CreateReportDto.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.Peis.Reports
+{
+    public class CreateReportDto
+    {
+        public string Id { get; set; }
+
+        public string DisplayName { get; set; }
+
+        public char IsActive { get; set; }
+    }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/Reports/PrintParameterDto.cs b/src/Shentun.Peis.Application.Contracts/Reports/PrintParameterDto.cs
new file mode 100644
index 0000000..9a3a2a1
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/Reports/PrintParameterDto.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.Peis.Reports
+{
+    public class PrintParameterDto
+    {
+        public List Parameters { get; set; }
+    }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/Reports/ReportDto.cs b/src/Shentun.Peis.Application.Contracts/Reports/ReportDto.cs
new file mode 100644
index 0000000..c9aebea
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/Reports/ReportDto.cs
@@ -0,0 +1,35 @@
+using JetBrains.Annotations;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Text;
+using Volo.Abp.Application.Dtos;
+
+namespace Shentun.Peis.Reports
+{
+    public class ReportDto:AuditedEntityDto
+    {
+        /// 
+        /// 报表名称
+        /// 
+        public string DisplayName { get; set; }
+
+        /// 
+        /// 启用
+        /// 
+        public char IsActive { get; set; }
+
+
+        public bool IsActived { get; set; }
+
+        /// 
+        /// 创建者
+        /// 
+        public string CreatorName { get; set; }
+
+        /// 
+        /// 最后修改者
+        /// 
+        public string LastModifierName { get; set; }
+    }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/Reports/ReportFileDto.cs b/src/Shentun.Peis.Application.Contracts/Reports/ReportFileDto.cs
new file mode 100644
index 0000000..10c45d6
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/Reports/ReportFileDto.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+
+namespace Shentun.Peis.Reports
+{
+    public class ReportFileDto
+    {
+        public string FilePath { get; set; }
+        public byte[] Bytes { get; set; }
+    }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/Reports/ReportParameterDto.cs b/src/Shentun.Peis.Application.Contracts/Reports/ReportParameterDto.cs
new file mode 100644
index 0000000..4618299
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/Reports/ReportParameterDto.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.Peis.Reports
+{
+    public class ReportParameterDto
+    {
+        public string Name { get; set; }
+
+        public string Value { get; set; }
+    }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/Reports/UpdateReportDto.cs b/src/Shentun.Peis.Application.Contracts/Reports/UpdateReportDto.cs
new file mode 100644
index 0000000..e00f3d5
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/Reports/UpdateReportDto.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.Peis.Reports
+{
+    public class UpdateReportDto
+    {
+        public string DisplayName { get; set; }
+
+        public char IsActive { get; set; }
+    }
+}
diff --git a/src/Shentun.Peis.Application/PeisApplicationAutoMapperProfile.cs b/src/Shentun.Peis.Application/PeisApplicationAutoMapperProfile.cs
index 6c02ea5..7c0dfc0 100644
--- a/src/Shentun.Peis.Application/PeisApplicationAutoMapperProfile.cs
+++ b/src/Shentun.Peis.Application/PeisApplicationAutoMapperProfile.cs
@@ -1,4 +1,4 @@
-using AutoMapper;
+using AutoMapper;
 using Shentun.Peis.AsbitemDetails;
 using Shentun.Peis.AsbitemGuides;
 using Shentun.Peis.Asbitems;
diff --git a/src/Shentun.Peis.Application/ReportFormatTemplates/ReportFormatTemplateAppService.cs b/src/Shentun.Peis.Application/ReportFormatTemplates/ReportFormatTemplateAppService.cs
new file mode 100644
index 0000000..f81c880
--- /dev/null
+++ b/src/Shentun.Peis.Application/ReportFormatTemplates/ReportFormatTemplateAppService.cs
@@ -0,0 +1,197 @@
+using Microsoft.AspNetCore.Mvc;
+using Shentun.Peis.Models;
+using Shentun.Peis.ReportFormats;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp.Application.Dtos;
+using Volo.Abp.Application.Services;
+using Volo.Abp.Domain.Repositories;
+using Volo.Abp.Identity;
+using Volo.Abp.ObjectMapping;
+using static Org.BouncyCastle.Bcpg.Attr.ImageAttrib;
+
+namespace Shentun.Peis.ReportFormatTemplates
+{
+    public class ReportFormatTemplateAppService : CrudAppService<
+            ReportFormatTemplate, //The Book entity
+            ReportFormatTemplateDto, //Used to show books
+            string, //Primary key of the book entity
+            PagedAndSortedResultRequestDto, //Used for paging/sorting
+            CreateReportFormatTemplateDto,
+            UpdateReportFormatTemplateDto>
+    {
+        private readonly IRepository _userRepository;
+        private readonly ReportFormatTemplateManager _manager;
+        public ReportFormatTemplateAppService(
+            IRepository repository,
+            IRepository userRepository,
+            ReportFormatTemplateManager manager)
+            : base(repository)
+        {
+            _userRepository = userRepository;
+            _manager = manager;
+        }
+
+        /// 
+        /// 获取通过主键
+        /// 
+        /// 
+        /// 
+        public override async Task GetAsync(string id)
+        {
+            var entity= await base.GetAsync(id);
+            entity.IsDefaulted = entity.IsDefault.Equals('Y');
+            entity.IsSystemed = entity.IsSystem.Equals('Y');
+            entity.CreatorName = EntityHelper.GetUserName(_userRepository, entity.CreatorId);
+            entity.LastModifierName = EntityHelper.GetUserName(_userRepository, entity.LastModifierId);
+            return entity;
+        }
+
+        public async Task GetMaxByIdAsync()
+        {
+            var ent = (await Repository.GetListAsync()).Max(x => x.Id);
+            var entdto = new ReportFormatTemplateDto
+            {
+                Id = !string.IsNullOrEmpty(ent)?ent:"0001"
+            };
+            return entdto;
+        }
+
+        public async Task GetDefaultAsync(string formatId)
+        {
+            var ent = await _manager.GetDefaultAsync(formatId);
+
+            if (ent != null)
+            {
+                var entdto = new ReportFormatTemplateDto
+                {
+                    CreationTime = ent.CreationTime,
+                    CreatorId = ent.CreatorId,
+                    DisplayName = ent.DisplayName,
+                    Id = ent.Id,
+                    ReportFormatId = ent.ReportFormatId,
+                    LastModificationTime = ent.LastModificationTime,
+                    LastModifierId = ent.LastModifierId,
+                    IsDefault = ent.IsDefault,
+                    IsSystem = ent.IsSystem,
+                    IsDefaulted = ent.IsDefault.Equals('Y'),
+                    IsSystemed = ent.IsSystem.Equals('Y'),
+                    TemplateFile=ent.TemplateFile,
+                    DataSetJson = ent.DataSetJson,
+                    CreatorName = EntityHelper.GetUserName(_userRepository, ent.CreatorId),
+                    LastModifierName = EntityHelper.GetUserName(_userRepository, ent.LastModifierId)
+                };
+
+                return entdto;
+            }
+            else
+            {
+                return null;
+            }
+        }
+
+        /// 
+        /// 获取列表  项目
+        /// 
+        /// 
+        /// 
+        public override async Task> GetListAsync(PagedAndSortedResultRequestDto input)
+        {
+            return await base.GetListAsync(input);
+        }
+
+        /// 
+        /// 获取列表  项目 可以带格式ID搜索
+        /// 
+        /// 
+        /// 
+        public async Task> GetListInReportFormatAsync(string reportFormatId)
+        {
+            int totalCount = 0;
+            var entlist = (await Repository.GetListAsync()).Where(m => m.ReportFormatId == reportFormatId);
+          
+            totalCount = entlist.Count();
+
+            var entdto = entlist.Select(s => new ReportFormatTemplateDto
+            {
+                CreationTime = s.CreationTime,
+                CreatorId = s.CreatorId,
+                DisplayName = s.DisplayName,
+                Id = s.Id,
+                ReportFormatId = s.ReportFormatId,
+                LastModificationTime = s.LastModificationTime,
+                LastModifierId = s.LastModifierId,
+                IsDefault = s.IsDefault,
+                IsSystem=s.IsSystem,
+                IsDefaulted=s.IsDefault.Equals('Y'),
+                IsSystemed=s.IsSystem.Equals('Y'),
+                CreatorName = EntityHelper.GetUserName(_userRepository, s.CreatorId),
+                LastModifierName = EntityHelper.GetUserName(_userRepository, s.LastModifierId)
+            }).ToList();
+
+            return new PagedResultDto(totalCount, entdto);
+
+
+        }
+
+        /// 
+        /// 创建
+        /// 
+        /// 
+        /// 
+        public override async Task CreateAsync(CreateReportFormatTemplateDto input)
+        {
+            var createEntity = ObjectMapper.Map(input);
+            var entity = await _manager.CreateAsync(createEntity);
+            entity = await Repository.InsertAsync(entity);
+            var dto = ObjectMapper.Map(entity);
+            return dto;
+        }
+
+        public async Task CopyCreateAsync(string id,string newId)
+        {
+            var entity = await _manager.CopyCreateAsync(id,newId);
+            entity = await Repository.InsertAsync(entity);
+            var dto = ObjectMapper.Map(entity);
+            return dto;
+        }
+
+        /// 
+        /// 更新
+        /// 
+        /// 
+        /// 
+        /// 
+        public override async Task UpdateAsync(string id, UpdateReportFormatTemplateDto input)
+        {
+            var entity = await Repository.GetAsync(id);
+            var sourceEntity = ObjectMapper.Map(input);
+            await _manager.UpdateAsync(sourceEntity, entity);
+            entity = await Repository.UpdateAsync(entity);
+            var  dto= ObjectMapper.Map(entity);
+            dto.IsDefaulted = entity.IsDefault.Equals('Y');
+            dto.IsSystemed= entity.IsSystem.Equals('Y');
+            dto.CreatorName = EntityHelper.GetUserName(_userRepository, entity.CreatorId);
+            dto.LastModifierName = EntityHelper.GetUserName(_userRepository, entity.LastModifierId);
+            return dto;
+        }
+        /// 
+        /// 删除
+        /// 
+        /// 
+        /// 
+        public override Task DeleteAsync(string id)
+        {
+            return base.DeleteAsync(id);
+        }
+
+        [HttpPut("api/app/reportfomattemplate/updatedefault")]
+        public async Task UpdateDefaultAsync(string id)
+        {
+           await _manager.UpdateDefaultAsync(id);
+        }
+    }
+}
diff --git a/src/Shentun.Peis.Application/ReportFormats/ReportFormatAppService.cs b/src/Shentun.Peis.Application/ReportFormats/ReportFormatAppService.cs
new file mode 100644
index 0000000..b5bb307
--- /dev/null
+++ b/src/Shentun.Peis.Application/ReportFormats/ReportFormatAppService.cs
@@ -0,0 +1,182 @@
+using Microsoft.AspNetCore.Mvc;
+using Shentun.Peis.Models;
+using Shentun.Peis.ReportPrinters;
+using Shentun.Peis.Reports;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp.Application.Dtos;
+using Volo.Abp.Application.Services;
+using Volo.Abp.Domain.Repositories;
+using Volo.Abp.Identity;
+using Volo.Abp.ObjectMapping;
+
+namespace Shentun.Peis.ReportFormats
+{
+    public class ReportFormatAppService : CrudAppService<
+            ReportFormat, //The Book entity
+            ReportFormatDto, //Used to show books
+            string, //Primary key of the book entity
+            PagedAndSortedResultRequestDto, //Used for paging/sorting
+            CreateReportFormatDto,
+            UpdateReportFormatDto>
+    {
+        private readonly IRepository _userRepository;
+        private readonly ReportFormatManager _manager;
+        public ReportFormatAppService(
+            IRepository repository,
+            IRepository userRepository,
+            ReportFormatManager manager)
+            : base(repository)
+        {
+            _userRepository = userRepository;
+            _manager = manager;
+        }
+
+        /// 
+        /// 获取通过主键
+        /// 
+        /// 
+        /// 
+        public override async Task GetAsync(string id)
+        {
+            var entity = await base.GetAsync(id);
+            entity.IsDefaulted = entity.IsDefault.Equals('Y');
+            entity.CreatorName = EntityHelper.GetUserName(_userRepository, entity.CreatorId);
+            entity.LastModifierName = EntityHelper.GetUserName(_userRepository, entity.LastModifierId);
+            return entity;
+        }
+
+        public async Task GetMaxByIdAsync()
+        {
+            var ent = (await Repository.GetListAsync()).Max(x => x.Id);
+            var entdto = new ReportFormatDto
+            {
+                Id = !string.IsNullOrEmpty(ent) ? ent : "0001"
+            };
+            return entdto;
+        }
+
+        public async Task GetDefaultAsync(string reportId)
+        {
+            var ent = await _manager.GetDefaultAsync(reportId);
+
+            if (ent!=null)
+            {
+                var entdto = new ReportFormatDto
+                {
+                    CreationTime = ent.CreationTime,
+                    CreatorId = ent.CreatorId,
+                    DisplayName = ent.DisplayName,
+                    Id = ent.Id,
+                    ReportId = ent.ReportId,
+                    LastModificationTime = ent.LastModificationTime,
+                    LastModifierId = ent.LastModifierId,
+                    IsDefault = ent.IsDefault,
+                    IsDefaulted = ent.IsDefault.Equals('Y'),
+                    CreatorName = EntityHelper.GetUserName(_userRepository, ent.CreatorId),
+                    LastModifierName = EntityHelper.GetUserName(_userRepository, ent.LastModifierId)
+                };
+
+                return entdto;
+            }
+            else
+            {
+                return null;
+            }
+        }
+
+        /// 
+        /// 获取列表  项目
+        /// 
+        /// 
+        /// 
+        public override async Task> GetListAsync(PagedAndSortedResultRequestDto input)
+        {
+            return await base.GetListAsync(input);
+        }
+
+        /// 
+        /// 获取列表  项目 可以带报表ID搜索
+        /// 
+        /// 
+        /// 
+        public async Task> GetListInReportAsync(string reportId)
+        {
+            int totalCount = 0;
+
+            var entlist = (await Repository.GetListAsync()).Where(m => m.ReportId == reportId);
+
+            totalCount = entlist.Count();
+
+            var entdto = entlist.Select(s => new ReportFormatDto
+            {
+                CreationTime = s.CreationTime,
+                CreatorId = s.CreatorId,
+                DisplayName = s.DisplayName,
+                Id = s.Id,
+                ReportId=s.ReportId,
+                LastModificationTime = s.LastModificationTime,
+                LastModifierId = s.LastModifierId,
+                IsDefault = s.IsDefault,
+                IsDefaulted=s.IsDefault.Equals('Y'),
+                CreatorName = EntityHelper.GetUserName(_userRepository, s.CreatorId),
+                LastModifierName = EntityHelper.GetUserName(_userRepository, s.LastModifierId)
+            }).ToList();
+
+            return new PagedResultDto(totalCount, entdto);
+
+
+        }
+
+        /// 
+        /// 创建
+        /// 
+        /// 
+        /// 
+        public override async Task CreateAsync(CreateReportFormatDto input)
+        {
+            var createEntity = ObjectMapper.Map(input);
+            var entity = await _manager.CreateAsync(createEntity);
+            entity = await Repository.InsertAsync(entity);
+            var dto = ObjectMapper.Map(entity);
+            return dto;
+        }
+
+        /// 
+        /// 更新
+        /// 
+        /// 
+        /// 
+        /// 
+        public override async Task UpdateAsync(string id, UpdateReportFormatDto input)
+        {
+            var entity = await Repository.GetAsync(id);
+            var sourceEntity = ObjectMapper.Map(input);
+            await _manager.UpdateAsync(sourceEntity, entity);
+            entity = await Repository.UpdateAsync(entity);
+            var dto= ObjectMapper.Map(entity);
+            dto.IsDefaulted= entity.IsDefault.Equals('Y');
+            dto.CreatorName = EntityHelper.GetUserName(_userRepository, entity.CreatorId);
+            dto.LastModifierName = EntityHelper.GetUserName(_userRepository, entity.LastModifierId);
+            return dto;
+        }
+        /// 
+        /// 删除
+        /// 
+        /// 
+        /// 
+        public override Task DeleteAsync(string id)
+        {
+            return base.DeleteAsync(id);
+        }
+
+        [HttpPut("api/app/reportfomat/updatedefault")]
+        public async Task UpdateDefaultAsync(string id)
+        {
+            await _manager.UpdateDefaultAsync(id);
+        }
+    }
+}
diff --git a/src/Shentun.Peis.Application/ReportPrinters/ReportPrinterAppService.cs b/src/Shentun.Peis.Application/ReportPrinters/ReportPrinterAppService.cs
new file mode 100644
index 0000000..0ffb484
--- /dev/null
+++ b/src/Shentun.Peis.Application/ReportPrinters/ReportPrinterAppService.cs
@@ -0,0 +1,162 @@
+using Shentun.Peis.Models;
+using Shentun.Peis.ReportFormats;
+using Shentun.Peis.ReportFormatTemplates;
+using Shentun.Peis.Reports;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp.Application.Dtos;
+using Volo.Abp.Application.Services;
+using Volo.Abp.Domain.Repositories;
+using Volo.Abp.Identity;
+using Volo.Abp.ObjectMapping;
+
+namespace Shentun.Peis.ReportPrinters
+{
+    public class ReportPrinterAppService : CrudAppService<
+            ReportPrinter, //The Book entity
+            ReportPrinterDto, //Used to show books
+            string, //Primary key of the book entity
+            PagedAndSortedResultRequestDto, //Used for paging/sorting
+            CreateReportPrinterDto,
+            UpdateReportPrinterDto>
+    {
+        private readonly IRepository _userRepository;
+        private readonly ReportPrinterManager _manager;
+        public ReportPrinterAppService(
+            IRepository repository,
+            IRepository userRepository,
+            ReportPrinterManager manager)
+            : base(repository)
+        {
+            _userRepository = userRepository;
+            _manager = manager;
+        }
+
+        /// 
+        /// 获取通过主键
+        /// 
+        /// 
+        /// 
+        public override async Task GetAsync(string id)
+        {
+            return await base.GetAsync(id);
+        }
+
+        public async Task GetMaxByIdAsync()
+        {
+            var ent = (await Repository.GetListAsync()).Max(x => x.Id);
+            var entdto = new ReportPrinterDto
+            {
+                Id = !string.IsNullOrEmpty(ent) ? ent : "0001"
+            };
+            return entdto;
+        }
+
+        public async Task GetLocalPrinter(string reportId,string computerName)
+        {
+            var ent = (await Repository.GetListAsync()).Where(m => m.ReportId == reportId && m.ComputerName.Equals(computerName)).FirstOrDefault();
+            if (ent != null)
+            {
+                var dto = new ReportPrinterDto
+                {
+                    CreationTime = ent.CreationTime,
+                    CreatorId = ent.CreatorId,
+                    ComputerName = ent.ComputerName,
+                    Id = ent.Id,
+                    ReportId = ent.ReportId,
+                    LastModificationTime = ent.LastModificationTime,
+                    LastModifierId = ent.LastModifierId,
+                    PrinterName = ent.PrinterName,
+                    CreatorName = EntityHelper.GetUserName(_userRepository, ent.CreatorId),
+                    LastModifierName = EntityHelper.GetUserName(_userRepository, ent.LastModifierId)
+                };
+                return dto;
+            }
+            else
+            {
+                return null;
+            }
+        }
+
+        /// 
+        /// 获取列表  项目
+        /// 
+        /// 
+        /// 
+        public override async Task> GetListAsync(PagedAndSortedResultRequestDto input)
+        {
+            return await base.GetListAsync(input);
+        }
+
+        public async Task> GetListInReportAsync(string reportId)
+        {
+            int totalCount = 0;
+
+            var entlist = (await Repository.GetListAsync()).Where(m => m.ReportId == reportId);
+
+            totalCount = entlist.Count();
+
+            var entdto = entlist.Select(s => new ReportPrinterDto
+            {
+                CreationTime = s.CreationTime,
+                CreatorId = s.CreatorId,
+                ComputerName = s.ComputerName,
+                Id = s.Id,
+                ReportId = s.ReportId,
+                LastModificationTime = s.LastModificationTime,
+                LastModifierId = s.LastModifierId,
+                PrinterName = s.PrinterName,
+                CreatorName = EntityHelper.GetUserName(_userRepository, s.CreatorId),
+                LastModifierName = EntityHelper.GetUserName(_userRepository, s.LastModifierId)
+            }).ToList();
+
+            return new PagedResultDto(totalCount, entdto);
+
+
+        }
+
+        /// 
+        /// 创建
+        /// 
+        /// 
+        /// 
+        public override async Task CreateAsync(CreateReportPrinterDto input)
+        {
+            var createEntity = ObjectMapper.Map(input);
+            var entity = await _manager.CreateAsync(createEntity);
+            entity = await Repository.InsertAsync(entity);
+            var dto = ObjectMapper.Map(entity);
+            return dto;
+        }
+
+        /// 
+        /// 更新
+        /// 
+        /// 
+        /// 
+        /// 
+        public override async Task UpdateAsync(string id, UpdateReportPrinterDto input)
+        {
+            var entity = await Repository.GetAsync(id);
+            var sourceEntity = ObjectMapper.Map< UpdateReportPrinterDto, ReportPrinter>(input);
+            await _manager.UpdateAsync(sourceEntity, entity);
+            entity = await Repository.UpdateAsync(entity);
+            var dto= ObjectMapper.Map(entity);
+            dto.CreatorName = EntityHelper.GetUserName(_userRepository, entity.CreatorId);
+            dto.LastModifierName = EntityHelper.GetUserName(_userRepository, entity.LastModifierId);
+            return dto;
+        }
+        /// 
+        /// 删除
+        /// 
+        /// 
+        /// 
+        public override Task DeleteAsync(string id)
+        {
+            return base.DeleteAsync(id);
+        }
+    }
+}
diff --git a/src/Shentun.Peis.Application/Reports/ReportAppService.cs b/src/Shentun.Peis.Application/Reports/ReportAppService.cs
new file mode 100644
index 0000000..8d7d1f1
--- /dev/null
+++ b/src/Shentun.Peis.Application/Reports/ReportAppService.cs
@@ -0,0 +1,208 @@
+using Shentun.Peis.Items;
+using Shentun.Peis.Models;
+using Shentun.Peis.ReportFormatTemplates;
+using Shentun.Peis.SampleTypes;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp.Application.Dtos;
+using Volo.Abp.Application.Services;
+using Volo.Abp.Domain.Repositories;
+using Volo.Abp.Identity;
+//using FastReport.Web;
+using Newtonsoft.Json;
+using System.Data;
+using TencentCloud.Mrs.V20200910.Models;
+//using FastReport.Export;
+//using FastReport.Export.PdfSimple;
+using System.IO;
+
+namespace Shentun.Peis.Reports
+{
+    public class ReportAppService : CrudAppService<
+            Report, //The Book entity
+            ReportDto, //Used to show books
+            string, //Primary key of the book entity
+            PagedAndSortedResultRequestDto, //Used for paging/sorting
+            CreateReportDto,
+            UpdateReportDto>
+    {
+        private readonly IRepository _userRepository;
+        private readonly IRepository _reportFormatRepository;
+        private readonly IRepository _reportFormatTemplateRepository;
+        private readonly ReportManager _manager;
+        public ReportAppService(
+            IRepository repository,
+            IRepository userRepository,
+            ReportManager manager,
+            IRepository reportFormatRepository,
+            IRepository reportFormatTemplateRepository)
+            : base(repository)
+        {
+            _userRepository = userRepository;
+            _manager = manager;
+            _reportFormatRepository = reportFormatRepository;
+            _reportFormatTemplateRepository = reportFormatTemplateRepository;
+        }
+
+        /// 
+        /// 获取通过主键
+        /// 
+        /// 
+        /// 
+        public override async Task GetAsync(string id)
+        {
+            //return await base.GetAsync(id);
+            var entity= await base.GetAsync(id);
+            entity.IsActived = entity.IsActive.Equals('Y');
+            entity.CreatorName = EntityHelper.GetUserName(_userRepository, entity.CreatorId);
+           
+            entity.LastModifierName = EntityHelper.GetUserName(_userRepository, entity.LastModifierId);
+            return entity;
+        }
+
+        /// 
+        /// 获取列表  项目
+        /// 
+        /// 
+        /// 
+        public override async Task> GetListAsync(PagedAndSortedResultRequestDto input)
+        {
+            return await base.GetListAsync(input);
+        }
+
+        public async Task GetMaxByIdAsync()
+        {
+            var ent = (await Repository.GetListAsync()).Max(x => x.Id);
+            var entdto = new ReportDto
+            {
+                Id = !string.IsNullOrEmpty(ent) ? ent : "0001"
+            };
+            return entdto;
+        }
+        /*
+        public async Task GetPrintReport(GetReportInFilterDto input)
+        {
+            var entity = await base.GetAsync(input.ReportId);
+            if (entity == null) return null;
+            if (!entity.IsActive.Equals('Y'))
+                throw new Volo.Abp.UserFriendlyException($"报表:'{entity.DisplayName}'未启用,请启用后再操作");
+
+            var dtoformat = await _reportFormatRepository.GetAsync(p => p.ReportId.Equals(entity.Id) && p.IsDefault.Equals('Y'));
+            if (dtoformat == null)
+                throw new Volo.Abp.UserFriendlyException($"报表:'{entity.DisplayName}'的格式中未找到默认格式,请设置默认后再操作");
+
+            var dtotmp = await _reportFormatTemplateRepository.GetAsync(p => p.ReportFormatId.Equals(dtoformat.Id) && p.IsDefault.Equals('Y'));
+            if (dtotmp == null)
+                throw new Volo.Abp.UserFriendlyException($"报表:'{entity.DisplayName}'的模板中未找到默认模板,请设置默认后再操作");
+
+            if (string.IsNullOrEmpty(dtotmp.TemplateFile))
+                throw new Volo.Abp.UserFriendlyException($"模板:'{dtotmp.DisplayName}'的报表模板未设置,请设置后再操作");
+
+            if (string.IsNullOrEmpty(dtotmp.DataSetJson))
+                throw new Volo.Abp.UserFriendlyException($"模板:'{dtotmp.DisplayName}'的数据集未设置,请设置后再操作");
+
+            FastReport.Report report = new FastReport.Report();
+            report.LoadFromString(dtotmp.TemplateFile);
+
+            DataSet ds = JsonConvert.DeserializeObject(input.DataSetJson);
+            report.RegisterData(ds);
+
+            PrintParameterDto para = JsonConvert.DeserializeObject(input.ParameterJson);
+            Dictionary dict = new Dictionary();
+            foreach (var item in para.Parameters)
+            {
+                report.SetParameterValue(item.Name, item.Value);
+            }
+
+            report.Prepare();
+
+            MemoryStream ms = new MemoryStream();
+            PDFSimpleExport pdfExport = new PDFSimpleExport();
+            pdfExport.Export(report, ms);
+            ms.Flush();
+            
+            return null;
+        }
+        */
+        /// 
+        /// 获取列表  项目 可以带名称搜索
+        /// 
+        /// 
+        /// 
+        public async Task> GetListInFilterNotOrderAsync(GetListInFilterDto input)
+        {
+            int totalCount = 0;
+
+            if (!string.IsNullOrEmpty(input.Filter))
+                totalCount = (await Repository.GetListAsync()).Where(m => m.DisplayName.Contains(input.Filter)).Count();
+            else
+                totalCount = await Repository.CountAsync();
+
+
+            var entlist = await PageHelper.GetPageListInFitlerNotOrder(Repository, _userRepository, input);
+
+            var entdto = entlist.Select(s => new ReportDto
+            {
+                CreationTime = s.CreationTime,
+                CreatorId = s.CreatorId,
+                DisplayName = s.DisplayName,
+                Id = s.Id,
+                LastModificationTime = s.LastModificationTime,
+                LastModifierId = s.LastModifierId,
+                IsActive = s.IsActive,
+                IsActived=s.IsActive.Equals('Y'),
+                CreatorName = EntityHelper.GetUserName(_userRepository, s.CreatorId),
+                LastModifierName = EntityHelper.GetUserName(_userRepository, s.LastModifierId)
+            }).ToList();
+
+            return new PagedResultDto(totalCount, entdto);
+
+
+        }
+
+        /// 
+        /// 创建
+        /// 
+        /// 
+        /// 
+        public override async Task CreateAsync(CreateReportDto input)
+        {
+            var createEntity = ObjectMapper.Map(input);
+            var entity = await _manager.CreateAsync(createEntity);
+            entity = await Repository.InsertAsync(entity);
+            var dto = ObjectMapper.Map(entity);
+            return dto;
+        }
+
+        /// 
+        /// 更新
+        /// 
+        /// 
+        /// 
+        /// 
+        public override async Task UpdateAsync(string id, UpdateReportDto input)
+        {
+            var entity = await Repository.GetAsync(id);
+            var sourceEntity = ObjectMapper.Map(input);
+            await _manager.UpdateAsync(sourceEntity, entity);
+            entity = await Repository.UpdateAsync(entity);
+            var dto = ObjectMapper.Map(entity);
+            dto.IsActived = entity.IsActive.Equals('Y');
+            dto.CreatorName = EntityHelper.GetUserName(_userRepository, entity.CreatorId);
+            dto.LastModifierName = EntityHelper.GetUserName(_userRepository, entity.LastModifierId);
+            return dto;
+        }
+        /// 
+        /// 删除
+        /// 
+        /// 
+        /// 
+        public override Task DeleteAsync(string id)
+        {
+            return base.DeleteAsync(id);
+        }
+    }
+}
diff --git a/src/Shentun.Peis.Domain/EntityHelper.cs b/src/Shentun.Peis.Domain/EntityHelper.cs
index a8793ac..3f6a9d3 100644
--- a/src/Shentun.Peis.Domain/EntityHelper.cs
+++ b/src/Shentun.Peis.Domain/EntityHelper.cs
@@ -192,6 +192,43 @@ namespace Shentun.Peis
             }
         }
 
+        public static async Task CheckEqualsId(IRepository repository, string Id)
+            where TEntity : class, IEntity
+        {
+            Check.NotNullOrWhiteSpace(Id, nameof(Id));
+
+            TEntity existEntity;
+
+            existEntity = await repository.FindAsync(o => o.Id.Equals(Id));
+           
+            if (existEntity != null)
+            {
+                throw new UserFriendlyException($"主键冲突:'{Id}'已存在,请核对本地起始号是否重复");
+            }
+        }
+
+        public static async Task CheckEqualsName(IRepository repository, string name, TEntity updatedEntity = null)
+            where TEntity : class, IEntity, IDisplayName
+        {
+            Check.NotNullOrWhiteSpace(name, nameof(name));
+            TEntity existEntity;
+
+            if (updatedEntity == null)
+            {
+                existEntity = await repository.FindAsync(o => o.DisplayName == name);
+            }
+            else
+            {
+                existEntity = await repository.FindAsync(o => !(o.Id.Equals(updatedEntity.Id)) && o.DisplayName == name);
+            }
+
+
+            if (existEntity != null)
+            {
+                throw new UserFriendlyException($"名称:'{name}'已存在");
+            }
+        }
+
 
         /// 
         /// 检查国家标准码同名
diff --git a/src/Shentun.Peis.Domain/Models/Report.cs b/src/Shentun.Peis.Domain/Models/Report.cs
new file mode 100644
index 0000000..0e830a8
--- /dev/null
+++ b/src/Shentun.Peis.Domain/Models/Report.cs
@@ -0,0 +1,44 @@
+using Microsoft.EntityFrameworkCore;
+using NPOI.SS.Formula.Functions;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp.Domain.Entities.Auditing;
+
+namespace Shentun.Peis.Models
+{
+    [Table("report")]
+    public class Report:AuditedEntity, IDisplayName
+    {
+        public Report() {
+
+        }
+
+        [Column("Id")]
+        [Comment("主键Id")]
+        [StringLength(16)]
+        public override string Id { get => base.Id; protected set => base.Id = value; }
+
+        [Column("display_name")]
+        [Comment("报表名称")]
+        [StringLength(64)]
+        public string DisplayName { get; set; } = null!;
+
+        [Column("isActive")]
+        [Comment("启用标志(N:禁用,Y:启用)")]
+        [Required]
+        [MaxLength(1)]
+        [DefaultValue('N')]
+        public char IsActive { get; set; }
+
+        public void SetId(string id)
+        {
+            Id = id;
+        }
+    }
+}
diff --git a/src/Shentun.Peis.Domain/Models/ReportFormat.cs b/src/Shentun.Peis.Domain/Models/ReportFormat.cs
new file mode 100644
index 0000000..1493035
--- /dev/null
+++ b/src/Shentun.Peis.Domain/Models/ReportFormat.cs
@@ -0,0 +1,52 @@
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp.Domain.Entities.Auditing;
+
+namespace Shentun.Peis.Models
+{
+    [Table("report_format")]
+    public class ReportFormat:AuditedEntity, IDisplayName
+    {
+
+       public ReportFormat() {
+
+        }
+
+        [Column("Id")]
+        [Comment("主键Id")]
+        [StringLength(16)]
+        public override string Id { get => base.Id; protected set => base.Id = value; }
+
+        [Column("display_name")]
+        [Comment("格式名称")]
+        [StringLength(64)]
+        public string DisplayName { get; set; } = null!;
+
+        [Column("isDefault")]
+        [Comment("默认标志(N:不默认,Y:默认)")]
+        [Required]
+        [MaxLength(1)]
+        [DefaultValue('N')]
+        public char IsDefault { get; set; }
+
+        [ForeignKey("ReportId")]
+        public Report Report { get; set; }
+
+        [Column("report_id")]
+        [Comment("报表ID")]
+        public string ReportId { get; set; }
+
+
+        public void SetId(string id)
+        {
+            Id = id;
+        }
+    }
+}
diff --git a/src/Shentun.Peis.Domain/Models/ReportFormatTemplate.cs b/src/Shentun.Peis.Domain/Models/ReportFormatTemplate.cs
new file mode 100644
index 0000000..60d14a9
--- /dev/null
+++ b/src/Shentun.Peis.Domain/Models/ReportFormatTemplate.cs
@@ -0,0 +1,69 @@
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp.Domain.Entities.Auditing;
+
+namespace Shentun.Peis.Models
+{
+    [Table("report_format_template")]
+    public class ReportFormatTemplate:AuditedEntity, IDisplayName
+    {
+
+        [Column("Id")]
+        [Comment("主键Id")]
+        [StringLength(16)]
+        public override string Id { get => base.Id; protected set => base.Id = value; }
+
+        [ForeignKey("ReportFormatId")]
+        public ReportFormat ReportFormat { get; set; }
+
+        [Column("report_format_id")]
+        [Comment("报表格式ID")]
+        public string ReportFormatId { get; set; }
+
+        [Column("display_name")]
+        [Comment("模板名称")]
+        [MaxLength(128)]
+        public string DisplayName { get; set; }
+
+        [Column("template_file_type")]
+        [Comment("模板文件类型(0:FastReport,1:Grid++Report)")]
+        [Required]
+        [MaxLength(1)]
+        [DefaultValue('0')]
+        public char TemplateFileType { get; set; }
+
+        [Column("template_file")]
+        [Comment("模板文件")]
+        public string TemplateFile { get; set; }
+
+        [Column("data_set_json")]
+        [Comment("模板文件")]
+        public string DataSetJson { get; set; }
+
+        [Column("isSystem")]
+        [Comment("是否系统自定义(N:停用,Y:启用)")]
+        [Required]
+        [MaxLength(1)]
+        [DefaultValue('N')]
+        public char IsSystem { get; set; }
+
+        [Column("isDefault")]
+        [Comment("是否默认(N:不默认,Y:默认)")]
+        [Required]
+        [MaxLength(1)]
+        [DefaultValue('N')]
+        public char IsDefault { get; set; }
+
+        public void SetId(string id)
+        {
+            Id = id;
+        }
+    }
+}
diff --git a/src/Shentun.Peis.Domain/Models/ReportPrinter.cs b/src/Shentun.Peis.Domain/Models/ReportPrinter.cs
new file mode 100644
index 0000000..2dc8604
--- /dev/null
+++ b/src/Shentun.Peis.Domain/Models/ReportPrinter.cs
@@ -0,0 +1,43 @@
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp.Domain.Entities.Auditing;
+
+namespace Shentun.Peis.Models
+{
+    [Table("report_printer")]
+    public class ReportPrinter:AuditedEntity
+    {
+        [Column("Id")]
+        [Comment("主键Id")]
+        [StringLength(16)]
+        public override string Id { get => base.Id; protected set => base.Id = value; }
+
+        [Column("pc_name")]
+        [Comment("计算机名称")]
+        [StringLength(64)]
+        public string ComputerName { get; set; } = null!;
+
+        [Column("printer_name")]
+        [Comment("打印机名称")]
+        [StringLength(64)]
+        public string PrinterName { get; set; } = null!;
+
+        [ForeignKey("ReportId")]
+        public Report Report { get; set; }
+
+        [Column("report_id")]
+        [Comment("报表ID")]
+        public string ReportId { get; set; }
+
+        public void SetId(string id)
+        {
+            Id= id;
+        }
+    }
+}
diff --git a/src/Shentun.Peis.Domain/ReportFormatTemplates/ReportFormatTemplateManager.cs b/src/Shentun.Peis.Domain/ReportFormatTemplates/ReportFormatTemplateManager.cs
new file mode 100644
index 0000000..ddffb93
--- /dev/null
+++ b/src/Shentun.Peis.Domain/ReportFormatTemplates/ReportFormatTemplateManager.cs
@@ -0,0 +1,104 @@
+using Shentun.Peis.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp;
+using Volo.Abp.Domain.Repositories;
+using Volo.Abp.Domain.Services;
+
+namespace Shentun.Peis.ReportFormatTemplates
+{
+    public class ReportFormatTemplateManager : DomainService
+    {
+        private readonly IRepository _repository;
+        public ReportFormatTemplateManager(IRepository repository)
+        {
+            _repository = repository;
+        }
+
+        public async Task GetDefaultAsync(string formatId)
+        {
+            var ent = (await _repository.GetListAsync()).Where(m => m.ReportFormatId == formatId && m.IsDefault.Equals('Y')).FirstOrDefault();
+
+            return ent;
+        }
+
+        public async Task CreateAsync(
+        ReportFormatTemplate entity
+       )
+        {
+            Check.NotNullOrWhiteSpace(entity.DisplayName, nameof(entity.DisplayName));
+            await EntityHelper.CheckEqualsId(_repository, entity.Id);
+            await EntityHelper.CheckEqualsName(_repository, entity.DisplayName);
+            var var = new ReportFormatTemplate()
+            {
+                DisplayName = entity.DisplayName,
+                IsDefault = entity.IsDefault,
+                ReportFormatId = entity.ReportFormatId,
+                TemplateFileType = entity.TemplateFileType,
+                TemplateFile=entity.TemplateFile,
+                IsSystem=entity.IsSystem,
+                DataSetJson=entity.DataSetJson,
+            };
+            var.SetId(entity.Id);
+            return var;
+        }
+
+        public async Task CopyCreateAsync(string id,string newId)
+        {
+            var ent = (await _repository.GetListAsync()).Where(m => m.Id == id).First();
+
+            var var = new ReportFormatTemplate()
+            {
+                DisplayName = ent.DisplayName+"复制",
+                IsDefault = 'N',
+                ReportFormatId = ent.ReportFormatId,
+                TemplateFileType = ent.TemplateFileType,
+                TemplateFile = ent.TemplateFile,
+                IsSystem = 'N',
+                DataSetJson = ent.DataSetJson,
+            };
+            var.SetId(newId);
+            return var;
+        }
+
+        public async Task UpdateAsync(
+           ReportFormatTemplate sourceEntity,
+           ReportFormatTemplate targetEntity
+          )
+        {
+            Check.NotNullOrWhiteSpace(sourceEntity.DisplayName, nameof(sourceEntity.DisplayName));
+            if (sourceEntity.DisplayName != targetEntity.DisplayName)
+            {
+                await EntityHelper.CheckEqualsName(_repository, sourceEntity.DisplayName, targetEntity);
+                targetEntity.DisplayName = sourceEntity.DisplayName;
+            }
+            targetEntity.TemplateFileType = sourceEntity.TemplateFileType;
+            targetEntity.TemplateFile = sourceEntity.TemplateFile;
+            targetEntity.DataSetJson=sourceEntity.DataSetJson;
+        }
+
+        public async Task UpdateDefaultAsync(string id)
+        {
+            var entity = await _repository.GetAsync(id);
+            if (entity != null)
+            {
+                entity.IsDefault = 'Y';
+
+                List UptList = new List();
+                UptList = await _repository.GetListAsync(o => o.ReportFormatId == entity.ReportFormatId && o.Id != id && o.IsDefault == 'Y');
+                foreach (var upt in UptList)
+                {
+                    upt.IsDefault = 'N';
+                }
+
+                UptList.Add(entity);
+
+
+                await _repository.UpdateManyAsync(UptList);
+            }
+        }
+    }
+}
diff --git a/src/Shentun.Peis.Domain/ReportFormats/ReportFormatManager.cs b/src/Shentun.Peis.Domain/ReportFormats/ReportFormatManager.cs
new file mode 100644
index 0000000..92e2e02
--- /dev/null
+++ b/src/Shentun.Peis.Domain/ReportFormats/ReportFormatManager.cs
@@ -0,0 +1,82 @@
+using Shentun.Peis.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp;
+using Volo.Abp.Domain.Repositories;
+using Volo.Abp.Domain.Services;
+
+namespace Shentun.Peis.ReportFormats
+{
+    public class ReportFormatManager : DomainService
+    {
+        private readonly IRepository _repository;
+        public ReportFormatManager(IRepository repository)
+        {
+            _repository = repository;
+        }
+
+        public async Task GetDefaultAsync(string reportId)
+        {
+            var ent = (await _repository.GetListAsync()).Where(m => m.ReportId == reportId && m.IsDefault.Equals('Y')).FirstOrDefault();
+
+            return ent;
+        }
+
+        public async Task CreateAsync(
+         ReportFormat entity
+        )
+        {
+            Check.NotNullOrWhiteSpace(entity.DisplayName, nameof(entity.DisplayName));
+            await EntityHelper.CheckEqualsId(_repository, entity.Id);
+            await EntityHelper.CheckEqualsName(_repository, entity.DisplayName);
+            var var = new ReportFormat()
+            {
+                DisplayName = entity.DisplayName,
+                IsDefault= entity.IsDefault,
+                ReportId= entity.ReportId
+            };
+            var.SetId(entity.Id);
+            return var;
+        }
+
+        public async Task UpdateAsync(
+           ReportFormat sourceEntity,
+           ReportFormat targetEntity
+          )
+        {
+            Check.NotNullOrWhiteSpace(sourceEntity.DisplayName, nameof(sourceEntity.DisplayName));
+            if (sourceEntity.DisplayName != targetEntity.DisplayName)
+            {
+                await EntityHelper.CheckEqualsName(_repository, sourceEntity.DisplayName, targetEntity);
+                targetEntity.DisplayName = sourceEntity.DisplayName;
+            }
+        }
+
+        public async Task UpdateDefaultAsync(string id)
+        {
+            var entity = await _repository.GetAsync(id);
+            if (entity != null)
+            {
+                entity.IsDefault = 'Y';
+
+                List UptList = new List();
+                UptList = await _repository.GetListAsync(o => o.ReportId == entity.ReportId && o.Id != id && o.IsDefault == 'Y');
+                foreach (var upt in UptList)
+                {
+                    upt.IsDefault = 'N';
+                }
+
+                UptList.Add(entity);
+
+
+                await _repository.UpdateManyAsync(UptList);
+            }
+        }
+
+
+
+    }
+}
diff --git a/src/Shentun.Peis.Domain/ReportPrinters/ReportPrinterManager.cs b/src/Shentun.Peis.Domain/ReportPrinters/ReportPrinterManager.cs
new file mode 100644
index 0000000..4310f86
--- /dev/null
+++ b/src/Shentun.Peis.Domain/ReportPrinters/ReportPrinterManager.cs
@@ -0,0 +1,67 @@
+using Shentun.Peis.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp;
+using Volo.Abp.Domain.Repositories;
+using Volo.Abp.Domain.Services;
+
+namespace Shentun.Peis.ReportPrinters
+{
+    public class ReportPrinterManager : DomainService
+    {
+        private readonly IRepository _repository;
+        public ReportPrinterManager(IRepository repository)
+        {
+            _repository = repository;
+        }
+
+
+        private async Task ExistsAsync(ReportPrinter entity)
+        {
+            var cnt = await _repository.CountAsync(p => p.ReportId == entity.ReportId && p.ComputerName.Equals(entity.ComputerName) && p.PrinterName.Equals(entity.PrinterName));
+            if (cnt > 0)
+                throw new UserFriendlyException($"打印机名称:'{entity.PrinterName}'在计算机:'{entity.ComputerName}'中已存在");
+
+            cnt = await _repository.CountAsync(p => p.ReportId == entity.ReportId && p.ComputerName.Equals(entity.ComputerName));
+            if (cnt > 0)
+                throw new UserFriendlyException($"本地打印机限制一台打印机对应一张报表");
+        }
+
+        public async Task CreateAsync(ReportPrinter entity)
+        {
+            Check.NotNullOrWhiteSpace(entity.ComputerName, nameof(entity.ComputerName));
+            Check.NotNullOrWhiteSpace(entity.PrinterName, nameof(entity.PrinterName));
+            await EntityHelper.CheckEqualsId(_repository, entity.Id);
+
+            await ExistsAsync(entity);
+
+            var var = new ReportPrinter()
+            {
+                ComputerName = entity.ComputerName,
+                PrinterName = entity.PrinterName,
+                ReportId= entity.ReportId
+            };
+            var.SetId(entity.Id);
+           return  var;
+        }
+
+        public async Task UpdateAsync(
+           ReportPrinter sourceEntity,
+           ReportPrinter targetEntity
+          )
+        {
+            Check.NotNullOrWhiteSpace(sourceEntity.ComputerName, nameof(sourceEntity.ComputerName));
+            Check.NotNullOrWhiteSpace(sourceEntity.PrinterName, nameof(sourceEntity.PrinterName));
+
+            if (sourceEntity.PrinterName != targetEntity.PrinterName)
+            {
+                await ExistsAsync(sourceEntity);
+                targetEntity.PrinterName = sourceEntity.PrinterName;
+            }
+        }
+
+    }
+}
diff --git a/src/Shentun.Peis.Domain/Reports/ReportManager.cs b/src/Shentun.Peis.Domain/Reports/ReportManager.cs
new file mode 100644
index 0000000..49ef57a
--- /dev/null
+++ b/src/Shentun.Peis.Domain/Reports/ReportManager.cs
@@ -0,0 +1,55 @@
+using Shentun.Peis.Models;
+using Shentun.Utilities;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Text;
+using System.Threading.Tasks;
+using TencentCloud.Sts.V20180813.Models;
+using Volo.Abp;
+using Volo.Abp.Domain.Repositories;
+using Volo.Abp.Domain.Services;
+
+namespace Shentun.Peis.Reports
+{
+    public class ReportManager:DomainService
+    {
+        private readonly IRepository _repository;
+        public ReportManager(IRepository repository)
+        {
+            _repository = repository;
+        }
+
+        public async Task CreateAsync(
+         Report entity
+        )
+        {
+            Check.NotNullOrWhiteSpace(entity.DisplayName, nameof(entity.DisplayName));
+            await EntityHelper.CheckEqualsId(_repository, entity.Id);
+
+            await EntityHelper.CheckEqualsName(_repository, entity.DisplayName);
+            var report = new Report()
+            {
+                DisplayName = entity.DisplayName,
+                IsActive = entity.IsActive
+            };
+            report.SetId(entity.Id);
+            return report;
+        }
+
+        public async Task UpdateAsync(
+           Report sourceEntity,
+           Report targetEntity
+          )
+        {
+            Check.NotNullOrWhiteSpace(sourceEntity.DisplayName, nameof(sourceEntity.DisplayName));
+            if (sourceEntity.DisplayName != targetEntity.DisplayName)
+            {
+                await EntityHelper.CheckEqualsName(_repository, sourceEntity.DisplayName, targetEntity);
+                targetEntity.DisplayName = sourceEntity.DisplayName;
+            }
+            targetEntity.IsActive = sourceEntity.IsActive;
+        }
+    }
+}