diff --git a/src/Shentun.ProjectManager.Application.Contracts/Customers/CreateCustomerDtoInputDto.cs b/src/Shentun.ProjectManager.Application.Contracts/Customers/CreateCustomerDtoInputDto.cs new file mode 100644 index 0000000..9b864f9 --- /dev/null +++ b/src/Shentun.ProjectManager.Application.Contracts/Customers/CreateCustomerDtoInputDto.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.ProjectManager.Customers +{ + public class CreateCustomerDtoInputDto + { + /// + /// 名称 + /// + public string DisplayName { get; set; } + /// + /// 简称 + /// + public string ShortName { get; set; } + + + /// + /// 负责人 + /// + public string PersonInCharge { get; set; } + + + /// + /// 联系电话 + /// + public string ContactNumber { get; set; } + + + /// + /// 联系地址 + /// + public string ContactAddress { get; set; } + + /// + /// 是否启用 + /// + public char IsActive { get; set; } + } +} diff --git a/src/Shentun.ProjectManager.Application.Contracts/Customers/CustomerDto.cs b/src/Shentun.ProjectManager.Application.Contracts/Customers/CustomerDto.cs new file mode 100644 index 0000000..9af8124 --- /dev/null +++ b/src/Shentun.ProjectManager.Application.Contracts/Customers/CustomerDto.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Text; + +namespace Shentun.ProjectManager.Customers +{ + public class CustomerDto : AuditedEntityDtoName + { + /// + /// 名称 + /// + public string DisplayName { get; set; } + /// + /// 简称 + /// + public string ShortName { get; set; } + + + /// + /// 负责人 + /// + public string PersonInCharge { get; set; } + + + /// + /// 联系电话 + /// + public string ContactNumber { get; set; } + + + /// + /// 联系地址 + /// + public string ContactAddress { get; set; } + + /// + /// 是否启用 + /// + public char IsActive { get; set; } + } +} diff --git a/src/Shentun.ProjectManager.Application.Contracts/Customers/CustomerIdInputDto.cs b/src/Shentun.ProjectManager.Application.Contracts/Customers/CustomerIdInputDto.cs new file mode 100644 index 0000000..e53a599 --- /dev/null +++ b/src/Shentun.ProjectManager.Application.Contracts/Customers/CustomerIdInputDto.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.ProjectManager.Customers +{ + public class CustomerIdInputDto + { + public Guid CustomerId { get; set; } + } +} diff --git a/src/Shentun.ProjectManager.Application.Contracts/Customers/GetCustomerListInputDto.cs b/src/Shentun.ProjectManager.Application.Contracts/Customers/GetCustomerListInputDto.cs new file mode 100644 index 0000000..5f41222 --- /dev/null +++ b/src/Shentun.ProjectManager.Application.Contracts/Customers/GetCustomerListInputDto.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.ProjectManager.Customers +{ + public class GetCustomerListInputDto + { + /// + /// 名称 + /// + public string DisplayName { get; set; } + } +} diff --git a/src/Shentun.ProjectManager.Application.Contracts/Customers/UpdateCustomerDtoInputDto.cs b/src/Shentun.ProjectManager.Application.Contracts/Customers/UpdateCustomerDtoInputDto.cs new file mode 100644 index 0000000..cde91bf --- /dev/null +++ b/src/Shentun.ProjectManager.Application.Contracts/Customers/UpdateCustomerDtoInputDto.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.ProjectManager.Customers +{ + public class UpdateCustomerDtoInputDto + { + public Guid Id { get; set; } + + /// + /// 名称 + /// + public string DisplayName { get; set; } + /// + /// 简称 + /// + public string ShortName { get; set; } + + + /// + /// 负责人 + /// + public string PersonInCharge { get; set; } + + + /// + /// 联系电话 + /// + public string ContactNumber { get; set; } + + + /// + /// 联系地址 + /// + public string ContactAddress { get; set; } + + /// + /// 是否启用 + /// + public char IsActive { get; set; } + } +} diff --git a/src/Shentun.ProjectManager.Application.Contracts/Projects/CreateProjectInputDto.cs b/src/Shentun.ProjectManager.Application.Contracts/Projects/CreateProjectInputDto.cs index 02cf4d7..39c761a 100644 --- a/src/Shentun.ProjectManager.Application.Contracts/Projects/CreateProjectInputDto.cs +++ b/src/Shentun.ProjectManager.Application.Contracts/Projects/CreateProjectInputDto.cs @@ -52,5 +52,34 @@ namespace Shentun.ProjectManager.Projects /// 是否启用 /// public char IsActive { get; set; } + + /// + /// 完成状态 0=未完成 1=已完成 2=中止 + /// + public char CompleteFlag { get; set; } = '0'; + + + /// + /// 客户id + /// + public Guid CustomerId { get; set; } + + + /// + /// 负责人 + /// + public Guid LeaderId { get; set; } + + /// + /// 计划时间 + /// + public decimal PlanTime { get; set; } + + /// + /// 计划时间单位 0-天 1-小时 + /// + public char PlanUnit { get; set; } + + } } diff --git a/src/Shentun.ProjectManager.Application.Contracts/Projects/GetProjectListInputDto.cs b/src/Shentun.ProjectManager.Application.Contracts/Projects/GetProjectListInputDto.cs index 555333d..1b79654 100644 --- a/src/Shentun.ProjectManager.Application.Contracts/Projects/GetProjectListInputDto.cs +++ b/src/Shentun.ProjectManager.Application.Contracts/Projects/GetProjectListInputDto.cs @@ -10,5 +10,10 @@ namespace Shentun.ProjectManager.Projects /// 名称 模糊查找 /// public string DisplayName { get; set; } + + /// + /// 客户Id + /// + public Guid? CustomerId { get; set; } } } diff --git a/src/Shentun.ProjectManager.Application.Contracts/Projects/ProjectDto.cs b/src/Shentun.ProjectManager.Application.Contracts/Projects/ProjectDto.cs index 2c3297d..8359a0f 100644 --- a/src/Shentun.ProjectManager.Application.Contracts/Projects/ProjectDto.cs +++ b/src/Shentun.ProjectManager.Application.Contracts/Projects/ProjectDto.cs @@ -55,5 +55,40 @@ namespace Shentun.ProjectManager.Projects public char IsActive { get; set; } + + /// + /// 完成状态 0=未完成 1=已完成 2=中止 + /// + public char CompleteFlag { get; set; } + + + /// + /// 客户id + /// + public Guid CustomerId { get; set; } + + /// + /// 客户id + /// + public string CustomerName { get; set; } + + /// + /// 负责人Id + /// + public Guid LeaderId { get; set; } + + + + /// + /// 计划时间 + /// + public decimal PlanTime { get; set; } + + /// + /// 计划时间单位 0-天 1-小时 + /// + public char PlanUnit { get; set; } + + } } diff --git a/src/Shentun.ProjectManager.Application.Contracts/Projects/ProjectTreeDto.cs b/src/Shentun.ProjectManager.Application.Contracts/Projects/ProjectTreeDto.cs index 7b41675..9c249e5 100644 --- a/src/Shentun.ProjectManager.Application.Contracts/Projects/ProjectTreeDto.cs +++ b/src/Shentun.ProjectManager.Application.Contracts/Projects/ProjectTreeDto.cs @@ -53,6 +53,43 @@ namespace Shentun.ProjectManager.Projects /// public char IsActive { get; set; } + /// + /// 完成状态 0=未完成 1=已完成 2=中止 + /// + public char CompleteFlag { get; set; } + + + /// + /// 客户id + /// + public Guid CustomerId { get; set; } + + /// + /// 客户id + /// + public string CustomerName { get; set; } + + + /// + /// 负责人Id + /// + public Guid LeaderId { get; set; } + + /// + /// 负责人名称 + /// + public string LeaderName { get; set; } + + /// + /// 计划时间 + /// + public decimal PlanTime { get; set; } + + /// + /// 计划时间单位 0-天 1-小时 + /// + public string PlanUnit { get; set; } + public List TreeChildren { get; set; } } } diff --git a/src/Shentun.ProjectManager.Application.Contracts/Projects/UpdateProjectInputDto.cs b/src/Shentun.ProjectManager.Application.Contracts/Projects/UpdateProjectInputDto.cs index 4b2337b..bb5a6dd 100644 --- a/src/Shentun.ProjectManager.Application.Contracts/Projects/UpdateProjectInputDto.cs +++ b/src/Shentun.ProjectManager.Application.Contracts/Projects/UpdateProjectInputDto.cs @@ -53,5 +53,31 @@ namespace Shentun.ProjectManager.Projects /// 是否启用 /// public char IsActive { get; set; } + + /// + /// 完成状态 0=未完成 1=已完成 2=中止 + /// + public char CompleteFlag { get; set; } = '0'; + + + /// + /// 客户id + /// + public Guid CustomerId { get; set; } + + /// + /// 负责人 + /// + public Guid LeaderId { get; set; } + + /// + /// 计划时间 + /// + public decimal PlanTime { get; set; } + + /// + /// 计划时间单位 0-天 1-小时 + /// + public char PlanUnit { get; set; } } } diff --git a/src/Shentun.ProjectManager.Application/Customers/CustomerAppService.cs b/src/Shentun.ProjectManager.Application/Customers/CustomerAppService.cs new file mode 100644 index 0000000..6bc4632 --- /dev/null +++ b/src/Shentun.ProjectManager.Application/Customers/CustomerAppService.cs @@ -0,0 +1,182 @@ +using AutoMapper.Internal.Mappers; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Shentun.ProjectManager.Models; +using Shentun.ProjectManager.ProjectStaffFeedbacks; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Application.Services; +using Volo.Abp.Domain.Repositories; +using Volo.Abp.Guids; +using Volo.Abp.Identity; +using Volo.Abp.Users; +using Volo.Abp; + +namespace Shentun.ProjectManager.Customers +{ + + /// + /// 客户管理 + /// + [ApiExplorerSettings(GroupName = "Bus")] + [Authorize] + public class CustomerAppService : ApplicationService + { + + private readonly CacheService _cacheService; + private readonly IRepository _customerRepository; + private readonly IRepository _projectRepository; + private readonly IRepository _identityUserRepository; + private readonly CurrentUser _currentUser; + + public CustomerAppService( + CacheService cacheService, + IRepository projectRepository, + CurrentUser currentUser, + IRepository identityUserRepository, + IRepository customerRepository) + { + _cacheService = cacheService; + _projectRepository = projectRepository; + _currentUser = currentUser; + _identityUserRepository = identityUserRepository; + _customerRepository = customerRepository; + } + + + + /// + /// 查询单个详细信息 + /// + /// + /// + [HttpPost("api/app/Customer/Get")] + public async Task GetAsync(CustomerIdInputDto input) + { + var customerEnt = await _customerRepository.FirstOrDefaultAsync(f => f.Id == input.CustomerId); + var entDto = ObjectMapper.Map(customerEnt); + entDto.CreatorName = await _cacheService.GetNameAsync(entDto.CreatorId); + entDto.LastModifierName = await _cacheService.GetNameAsync(entDto.LastModifierId); + + return entDto; + } + + + /// + /// 查询客户列表记录 + /// + /// + [HttpPost("api/app/Customer/GetList")] + public async Task> GetListAsync(GetCustomerListInputDto input) + { + var query = await _customerRepository.GetQueryableAsync(); + + + + if (!string.IsNullOrWhiteSpace(input.DisplayName)) + { + query = query.Where(m => m.DisplayName == input.DisplayName); + } + + + var entListDto = query.Select(s => new CustomerDto + { + CreationTime = s.CreationTime, + CreatorId = s.CreatorId, + Id = s.Id, + LastModificationTime = s.LastModificationTime, + LastModifierId = s.LastModifierId, + CreatorName = _cacheService.GetNameAsync(s.CreatorId).GetAwaiter().GetResult(), + LastModifierName = _cacheService.GetNameAsync(s.LastModifierId).GetAwaiter().GetResult(), + ContactAddress = s.ContactAddress, + DisplayName = s.DisplayName, + ContactNumber = s.ContactNumber, + IsActive = s.IsActive, + PersonInCharge = s.PersonInCharge, + ShortName = s.ShortName + }).ToList(); + + + return entListDto; + + } + + + /// + /// 创建客户 + /// + /// + /// + [HttpPost("api/app/Customer/Create")] + public async Task CreateAsync(CreateCustomerDtoInputDto input) + { + if (string.IsNullOrWhiteSpace(input.DisplayName)) + { + throw new UserFriendlyException("名称不能为空"); + } + + var customerDto = new Customer(GuidGenerator.Create()) + { + ShortName = input.ShortName, + PersonInCharge = input.PersonInCharge, + IsActive = input.IsActive, + ContactNumber = input.ContactNumber, + DisplayName = input.DisplayName, + ContactAddress = input.ContactAddress + }; + + + + await _customerRepository.InsertAsync(customerDto); + } + + + /// + /// 修改客户 + /// + /// + /// + [HttpPost("api/app/Customer/Update")] + public async Task UpdateAsync(UpdateCustomerDtoInputDto input) + { + var customerEnt = await _customerRepository.FirstOrDefaultAsync(f => f.Id == input.Id); + + if (customerEnt == null) + { + throw new UserFriendlyException("信息不存在"); + } + + + customerEnt.ShortName = input.ShortName; + customerEnt.PersonInCharge = input.PersonInCharge; + customerEnt.IsActive = input.IsActive; + customerEnt.ContactNumber = input.ContactNumber; + customerEnt.DisplayName = input.DisplayName; + customerEnt.ContactAddress = input.ContactAddress; + + + await _customerRepository.UpdateAsync(customerEnt); + } + + /// + /// 删除客户 + /// + /// + /// + [HttpPost("api/app/Customer/Delete")] + public async Task DeleteAsync(CustomerIdInputDto input) + { + var customer = await _customerRepository.FirstOrDefaultAsync(f => f.Id == input.CustomerId); + if (customer == null) + { + throw new UserFriendlyException("记录不存在"); + } + + await _customerRepository.DeleteAsync(customer); + } + + } +} diff --git a/src/Shentun.ProjectManager.Application/ProjectManagerApplicationAutoMapperProfile.cs b/src/Shentun.ProjectManager.Application/ProjectManagerApplicationAutoMapperProfile.cs index 213212a..22b0887 100644 --- a/src/Shentun.ProjectManager.Application/ProjectManagerApplicationAutoMapperProfile.cs +++ b/src/Shentun.ProjectManager.Application/ProjectManagerApplicationAutoMapperProfile.cs @@ -1,5 +1,6 @@ using AutoMapper; using Microsoft.Extensions.Configuration.UserSecrets; +using Shentun.ProjectManager.Customers; using Shentun.ProjectManager.MenuInfos; using Shentun.ProjectManager.Models; using Shentun.ProjectManager.MyUsers; @@ -47,5 +48,8 @@ public class ProjectManagerApplicationAutoMapperProfile : Profile CreateMap(); + CreateMap(); + + } } diff --git a/src/Shentun.ProjectManager.Application/Projects/ProjectAppService.cs b/src/Shentun.ProjectManager.Application/Projects/ProjectAppService.cs index 20b385d..232c98a 100644 --- a/src/Shentun.ProjectManager.Application/Projects/ProjectAppService.cs +++ b/src/Shentun.ProjectManager.Application/Projects/ProjectAppService.cs @@ -28,17 +28,19 @@ namespace Shentun.ProjectManager.Projects private readonly CacheService _cacheService; private readonly IRepository _projectFolderRepository; private readonly IRepository _projectStaffRepository; + private readonly IRepository _customerRepository; public ProjectAppService( IRepository projectRepository, CacheService cacheService, IRepository projectFolderRepository, - IRepository projectStaffRepository - ) + IRepository projectStaffRepository, + IRepository customerRepository) { _projectRepository = projectRepository; _cacheService = cacheService; _projectFolderRepository = projectFolderRepository; _projectStaffRepository = projectStaffRepository; + _customerRepository = customerRepository; } /// @@ -57,79 +59,109 @@ namespace Shentun.ProjectManager.Projects } - /// - /// 查询项目列表 - /// - /// - [HttpPost("api/app/Project/GetList")] - public async Task> GetListAsync(GetProjectListInputDto input) - { - var query = await _projectRepository.GetQueryableAsync(); - if (!string.IsNullOrWhiteSpace(input.DisplayName)) - { - query = query.Where(m => m.DisplayName.Contains(input.DisplayName)); - } - - var entListDto = query.Select(s => new ProjectDto - { - DisplayName = s.DisplayName, - CompletionProgress = s.CompletionProgress, - CreationTime = s.CreationTime, - CreatorId = s.CreatorId, - FinishTime = DataHelper.ConversionDateToString(s.FinishTime), - Id = s.Id, - DemandContent = s.DemandContent, - IsActive = s.IsActive, - LastModificationTime = s.LastModificationTime, - LastModifierId = s.LastModifierId, - ParentId = s.ParentId, - PlanEndTime = DataHelper.ConversionDateToString(s.PlanEndTime), - PlanStartTime = DataHelper.ConversionDateToString(s.PlanStartTime), - ShortName = s.ShortName, - CreatorName = _cacheService.GetNameAsync(s.CreatorId).GetAwaiter().GetResult(), - LastModifierName = _cacheService.GetNameAsync(s.LastModifierId).GetAwaiter().GetResult() - }).ToList(); - - - return entListDto; - - } + ///// + ///// 查询项目列表 + ///// + ///// + //[HttpPost("api/app/Project/GetList")] + //public async Task> GetListAsync(GetProjectListInputDto input) + //{ + // var query = from project in await _projectRepository.GetQueryableAsync() + // join customer in await _customerRepository.GetQueryableAsync() on project.CustomerId equals customer.Id into customerTemp + // from customerEmpty in customerTemp.DefaultIfEmpty() + // select new + // { + // customerName = customerEmpty.DisplayName, + // project + // }; + // if (!string.IsNullOrWhiteSpace(input.DisplayName)) + // { + // query = query.Where(m => m.project.DisplayName.Contains(input.DisplayName)); + // } + // if (input.CustomerId != null) + // { + // query = query.Where(m => m.project.CustomerId == input.CustomerId); + // } + + // var entListDto = query.Select(s => new ProjectDto + // { + // DisplayName = s.DisplayName, + // CompletionProgress = s.CompletionProgress, + // CreationTime = s.CreationTime, + // CreatorId = s.CreatorId, + // FinishTime = DataHelper.ConversionDateToString(s.FinishTime), + // Id = s.Id, + // DemandContent = s.DemandContent, + // IsActive = s.IsActive, + // LastModificationTime = s.LastModificationTime, + // LastModifierId = s.LastModifierId, + // ParentId = s.ParentId, + // PlanEndTime = DataHelper.ConversionDateToString(s.PlanEndTime), + // PlanStartTime = DataHelper.ConversionDateToString(s.PlanStartTime), + // ShortName = s.ShortName, + // CreatorName = _cacheService.GetNameAsync(s.CreatorId).GetAwaiter().GetResult(), + // LastModifierName = _cacheService.GetNameAsync(s.LastModifierId).GetAwaiter().GetResult() + // }).ToList(); + + + // return entListDto; + + //} /// - /// 查询项目列表 树型结构 + /// 查询项目列表 树型结构 带客户id /// /// [HttpPost("api/app/Project/GetThreeList")] public async Task> GetThreeListAsync(GetProjectListInputDto input) { - var query = await _projectRepository.GetQueryableAsync(); + var query = from project in await _projectRepository.GetQueryableAsync() + join customer in await _customerRepository.GetQueryableAsync() on project.CustomerId equals customer.Id into customerTemp + from customerEmpty in customerTemp.DefaultIfEmpty() + select new + { + customerName = customerEmpty.DisplayName, + project + }; if (!string.IsNullOrWhiteSpace(input.DisplayName)) { - query = query.Where(m => m.DisplayName.Contains(input.DisplayName)); + query = query.Where(m => m.project.DisplayName.Contains(input.DisplayName)); + } + + if (input.CustomerId != null) + { + query = query.Where(m => m.project.CustomerId == input.CustomerId); } var projectList = query.ToList(); - var entListDto = from s in projectList.OrderBy(m => m.Id) + var entListDto = from s in projectList.OrderBy(m => m.project.Id) select new ProjectTreeDto() { - DisplayName = s.DisplayName, - CompletionProgress = s.CompletionProgress, - CreationTime = s.CreationTime, - CreatorId = s.CreatorId, - FinishTime = DataHelper.ConversionDateToString(s.FinishTime), - Id = s.Id, - DemandContent = s.DemandContent, - IsActive = s.IsActive, - LastModificationTime = s.LastModificationTime, - LastModifierId = s.LastModifierId, - ParentId = s.ParentId, - PlanEndTime = DataHelper.ConversionDateToString(s.PlanEndTime), - PlanStartTime = DataHelper.ConversionDateToString(s.PlanStartTime), - ShortName = s.ShortName, - CreatorName = _cacheService.GetNameAsync(s.CreatorId).GetAwaiter().GetResult(), - LastModifierName = _cacheService.GetNameAsync(s.LastModifierId).GetAwaiter().GetResult() + DisplayName = s.project.DisplayName, + CompletionProgress = s.project.CompletionProgress, + CreationTime = s.project.CreationTime, + CreatorId = s.project.CreatorId, + FinishTime = DataHelper.ConversionDateShortToString(s.project.FinishTime), + Id = s.project.Id, + DemandContent = s.project.DemandContent, + IsActive = s.project.IsActive, + LastModificationTime = s.project.LastModificationTime, + LastModifierId = s.project.LastModifierId, + ParentId = s.project.ParentId, + PlanEndTime = DataHelper.ConversionDateShortToString(s.project.PlanEndTime), + PlanStartTime = DataHelper.ConversionDateShortToString(s.project.PlanStartTime), + ShortName = s.project.ShortName, + CreatorName = _cacheService.GetNameAsync(s.project.CreatorId).GetAwaiter().GetResult(), + LastModifierName = _cacheService.GetNameAsync(s.project.LastModifierId).GetAwaiter().GetResult(), + CustomerId = s.project.CustomerId, + CompleteFlag = s.project.CompleteFlag, + CustomerName = s.customerName, + PlanTime = s.project.PlanTime, + PlanUnit = s.project.PlanUnit == '0' ? "天" : "小时", + LeaderName = _cacheService.GetNameAsync(s.project.LeaderId).GetAwaiter().GetResult(), + LeaderId = s.project.LeaderId }; @@ -169,6 +201,13 @@ namespace Shentun.ProjectManager.Projects PlanEndTime = p.PlanEndTime, PlanStartTime = p.PlanStartTime, ShortName = p.ShortName, + CompleteFlag = p.CompleteFlag, + CustomerName = p.CustomerName, + CustomerId = p.CustomerId, + LeaderId = p.LeaderId, + LeaderName = p.LeaderName, + PlanUnit = p.PlanUnit, + PlanTime = p.PlanTime, TreeChildren = subs.ToList() } ).ToList(); @@ -224,6 +263,20 @@ namespace Shentun.ProjectManager.Projects } } + if (input.CompleteFlag != '0' && input.CompleteFlag != '1' && input.CompleteFlag != '2') + { + throw new UserFriendlyException($"项目完成状态值:{input.CompleteFlag}无效"); + } + + var isCustomer = await _customerRepository.FirstOrDefaultAsync(f => f.Id == input.CustomerId); + if (isCustomer == null) + { + throw new UserFriendlyException($"客户Id:{input.CustomerId}无效"); + } + + + + var project = new Project(GuidGenerator.Create()) { CompletionProgress = input.CompletionProgress, @@ -234,7 +287,12 @@ namespace Shentun.ProjectManager.Projects PlanStartTime = planStartTime, PlanEndTime = planEndTime, FinishTime = finishTime, - DemandContent = input.DemandContent + DemandContent = input.DemandContent, + CompleteFlag = input.CompleteFlag, + CustomerId = input.CustomerId, + LeaderId = input.LeaderId, + PlanTime = input.PlanTime, + PlanUnit = input.PlanUnit }; await _projectRepository.InsertAsync(project); @@ -297,6 +355,18 @@ namespace Shentun.ProjectManager.Projects } } + if (input.CompleteFlag != '0' && input.CompleteFlag != '1' && input.CompleteFlag != '2') + { + throw new UserFriendlyException($"项目完成状态值:{input.CompleteFlag}无效"); + } + + var isCustomer = await _customerRepository.FirstOrDefaultAsync(f => f.Id == input.CustomerId); + if (isCustomer == null) + { + throw new UserFriendlyException($"客户Id:{input.CustomerId}无效"); + } + + project.FinishTime = finishTime; project.PlanStartTime = planStartTime; project.PlanEndTime = planEndTime; @@ -305,6 +375,11 @@ namespace Shentun.ProjectManager.Projects project.IsActive = input.IsActive; project.ShortName = input.ShortName; project.DemandContent = input.DemandContent; + project.CustomerId = input.CustomerId; + project.CompleteFlag = input.CompleteFlag; + project.PlanUnit = input.PlanUnit; + project.PlanTime = input.PlanTime; + project.LeaderId = input.LeaderId; await _projectRepository.UpdateAsync(project); } diff --git a/src/Shentun.ProjectManager.Domain/Projects/Project.cs b/src/Shentun.ProjectManager.Domain/Projects/Project.cs index d7cb94d..6c78562 100644 --- a/src/Shentun.ProjectManager.Domain/Projects/Project.cs +++ b/src/Shentun.ProjectManager.Domain/Projects/Project.cs @@ -87,6 +87,21 @@ namespace Shentun.ProjectManager.Models public Guid CustomerId { get; set; } + /// + /// 负责人 + /// + public Guid LeaderId { get; set; } + + /// + /// 计划时间 + /// + public decimal PlanTime { get; set; } + + /// + /// 计划时间单位 0-天 1-小时 + /// + public char PlanUnit { get; set; } + public string ConcurrencyStamp { get; set; } diff --git a/src/Shentun.ProjectManager.EntityFrameworkCore/Configures/ProjectConfigure.cs b/src/Shentun.ProjectManager.EntityFrameworkCore/Configures/ProjectConfigure.cs index 2e7e357..595821f 100644 --- a/src/Shentun.ProjectManager.EntityFrameworkCore/Configures/ProjectConfigure.cs +++ b/src/Shentun.ProjectManager.EntityFrameworkCore/Configures/ProjectConfigure.cs @@ -25,6 +25,9 @@ namespace Shentun.ProjectManager.Configures entity.Property(t => t.IsActive).HasComment("是否启用").IsRequired().HasDefaultValueSql("'Y'"); entity.Property(t => t.CompleteFlag).HasComment("完成状态 0=未完成 1=已完成 2=中止").IsRequired().HasDefaultValueSql("'0'"); entity.Property(t => t.CustomerId).HasComment("客户id").IsRequired(); + entity.Property(t => t.LeaderId).HasComment("负责人id").IsRequired(); + entity.Property(t => t.PlanTime).HasComment("计划时间").IsRequired().HasDefaultValue(0); + entity.Property(t => t.PlanUnit).HasComment("计划时间单位 0-天 1-小时").IsRequired().HasDefaultValueSql("'0'"); } } } diff --git a/src/Shentun.ProjectManager.EntityFrameworkCore/Migrations/20250828030313_insert_customer.Designer.cs b/src/Shentun.ProjectManager.EntityFrameworkCore/Migrations/20250828030313_insert_customer.Designer.cs new file mode 100644 index 0000000..d5eae11 --- /dev/null +++ b/src/Shentun.ProjectManager.EntityFrameworkCore/Migrations/20250828030313_insert_customer.Designer.cs @@ -0,0 +1,2380 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using Shentun.ProjectManager.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; + +#nullable disable + +namespace Shentun.ProjectManager.Migrations +{ + [DbContext(typeof(ProjectManagerDbContext))] + [Migration("20250828030313_insert_customer")] + partial class insert_customer + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.PostgreSql) + .HasAnnotation("ProductVersion", "6.0.5") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Shentun.ProjectManager.Models.Customer", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("ContactAddress") + .HasMaxLength(200) + .HasColumnType("character varying(200)") + .HasColumnName("contact_address") + .HasComment("联系地址"); + + b.Property("ContactNumber") + .HasMaxLength(20) + .HasColumnType("character varying(20)") + .HasColumnName("contact_number") + .HasComment("联系电话"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("display_name") + .HasComment("名称"); + + b.Property("IsActive") + .ValueGeneratedOnAdd() + .HasMaxLength(1) + .HasColumnType("character(1)") + .HasColumnName("is_active") + .HasDefaultValueSql("'Y'") + .HasComment("是否启用"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("PersonInCharge") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("person_in_charge") + .HasComment("负责人"); + + b.Property("ShortName") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("short_name") + .HasComment("简称"); + + b.HasKey("Id") + .HasName("pk_customer"); + + b.ToTable("customer", (string)null); + + b.HasComment("客户表"); + }); + + modelBuilder.Entity("Shentun.ProjectManager.Models.MenuInfo", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id") + .IsFixedLength(); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)") + .HasColumnName("display_name") + .HasComment("名称"); + + b.Property("DisplayOrder") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(999999) + .HasColumnName("display_order"); + + b.Property("IconName") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("icon_name") + .HasComment("菜单图标"); + + b.Property("IsActive") + .ValueGeneratedOnAdd() + .HasColumnType("character(1)") + .HasColumnName("is_active") + .HasDefaultValueSql("'Y'") + .HasComment("是否启用"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("MenuType") + .ValueGeneratedOnAdd() + .HasColumnType("character(1)") + .HasDefaultValue('1') + .HasColumnName("menu_type"); + + b.Property("ParentId") + .HasColumnType("uuid") + .HasColumnName("parent_id") + .IsFixedLength() + .HasComment("父id"); + + b.Property("RouteUrl") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("route_url") + .HasComment("路由地址"); + + b.Property("SimpleCode") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)") + .HasColumnName("simple_code") + .HasComment("自定义简码"); + + b.HasKey("Id") + .HasName("pk_menu_info"); + + b.ToTable("menu_info", (string)null); + + b.HasComment("菜单栏目"); + }); + + modelBuilder.Entity("Shentun.ProjectManager.Models.Project", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("CompleteFlag") + .ValueGeneratedOnAdd() + .HasMaxLength(1) + .HasColumnType("character(1)") + .HasColumnName("complete_flag") + .HasDefaultValueSql("'0'") + .HasComment("完成状态 0=未完成 1=已完成 2=中止"); + + b.Property("CompletionProgress") + .ValueGeneratedOnAdd() + .HasColumnType("smallint") + .HasDefaultValue((short)0) + .HasColumnName("completion_progress") + .HasComment("完成进度 0-100 整数"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("CustomerId") + .HasColumnType("uuid") + .HasColumnName("customer_id") + .HasComment("客户id"); + + b.Property("DemandContent") + .HasMaxLength(2000) + .HasColumnType("character varying(2000)") + .HasColumnName("demand_content") + .HasComment("需求内容"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("display_name") + .HasComment("名称"); + + b.Property("FinishTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("finish_time") + .HasComment("实际完成时间"); + + b.Property("IsActive") + .ValueGeneratedOnAdd() + .HasMaxLength(1) + .HasColumnType("character(1)") + .HasColumnName("is_active") + .HasDefaultValueSql("'Y'") + .HasComment("是否启用"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("ParentId") + .HasColumnType("uuid") + .HasColumnName("parent_id") + .HasComment("父项目id"); + + b.Property("PlanEndTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("plan_end_time") + .HasComment("计划结束时间"); + + b.Property("PlanStartTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("plan_start_time") + .HasComment("计划开始时间"); + + b.Property("ShortName") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("short_name") + .HasComment("简称"); + + b.HasKey("Id") + .HasName("pk_project"); + + b.ToTable("project", (string)null); + + b.HasComment("项目表"); + }); + + modelBuilder.Entity("Shentun.ProjectManager.Models.ProjectFile", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("display_name") + .HasComment("名称"); + + b.Property("EncryUserId") + .HasColumnType("uuid") + .HasColumnName("encry_user_id") + .HasComment("加密用户Id"); + + b.Property("FileData") + .HasColumnType("bytea") + .HasColumnName("file_data") + .HasComment("文件二进制数据"); + + b.Property("IsEncry") + .ValueGeneratedOnAdd() + .HasMaxLength(1) + .HasColumnType("character(1)") + .HasColumnName("is_encry") + .HasDefaultValueSql("'N'") + .HasComment("是否加密"); + + b.Property("IsLock") + .ValueGeneratedOnAdd() + .HasMaxLength(1) + .HasColumnType("character(1)") + .HasColumnName("is_lock") + .HasDefaultValueSql("'N'") + .HasComment("是否锁定"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("LockUserId") + .HasColumnType("uuid") + .HasColumnName("lock_user_id") + .HasComment("加锁用户id"); + + b.Property("ProjectFolderId") + .HasColumnType("uuid") + .HasColumnName("project_folder_id") + .HasComment("项目文件夹id"); + + b.Property("SuffixName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("suffix_name") + .HasComment("后缀名"); + + b.HasKey("Id") + .HasName("pk_project_file"); + + b.ToTable("project_file", (string)null); + + b.HasComment("项目文件表"); + }); + + modelBuilder.Entity("Shentun.ProjectManager.Models.ProjectFolder", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("display_name") + .HasComment("名称"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("ParentId") + .HasColumnType("uuid") + .HasColumnName("parent_id") + .HasComment("父项目文件夹id"); + + b.Property("ProjectId") + .HasColumnType("uuid") + .HasColumnName("project_id") + .HasComment("项目id"); + + b.HasKey("Id") + .HasName("pk_project_folder"); + + b.ToTable("project_folder", (string)null); + + b.HasComment("项目文件夹表"); + }); + + modelBuilder.Entity("Shentun.ProjectManager.Models.ProjectStaff", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("CompletionProgress") + .ValueGeneratedOnAdd() + .HasColumnType("smallint") + .HasDefaultValue((short)0) + .HasColumnName("completion_progress") + .HasComment("完成进度 0-100 整数"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DemandContent") + .HasMaxLength(2000) + .HasColumnType("character varying(2000)") + .HasColumnName("demand_content") + .HasComment("需求内容"); + + b.Property("FinishTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("finish_time") + .HasComment("实际完成时间"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("PlanEndTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("plan_end_time") + .HasComment("计划结束时间"); + + b.Property("PlanStartTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("plan_start_time") + .HasComment("计划开始时间"); + + b.Property("ProjectId") + .HasColumnType("uuid") + .HasColumnName("project_id") + .HasComment("项目id"); + + b.Property("RoleId") + .HasColumnType("uuid") + .HasColumnName("role_id") + .HasComment("角色id"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id") + .HasComment("用户id"); + + b.HasKey("Id") + .HasName("pk_project_staff"); + + b.ToTable("project_staff", (string)null); + + b.HasComment("项目人员表"); + }); + + modelBuilder.Entity("Shentun.ProjectManager.Models.ProjectStaffFeedback", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("FeedbackContent") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("character varying(1000)") + .HasColumnName("feedback_content") + .HasComment("反馈内容"); + + b.Property("FeedbackFlag") + .ValueGeneratedOnAdd() + .HasMaxLength(1) + .HasColumnType("character(1)") + .HasColumnName("feedback_flag") + .HasDefaultValueSql("'0'") + .HasComment("反馈类型 (0.反馈 1.建议 2.日志)"); + + b.Property("FeedbackTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("feedback_time") + .HasComment("反馈时间"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("ProjectStaffId") + .HasColumnType("uuid") + .HasColumnName("project_staff_id") + .HasComment("项目人员id"); + + b.HasKey("Id") + .HasName("pk_project_staff_feedback"); + + b.ToTable("project_staff_feedback", (string)null); + + b.HasComment("人员反馈、建议、日志表"); + }); + + modelBuilder.Entity("Shentun.ProjectManager.Models.RoleMenuInfo", b => + { + b.Property("RoleId") + .HasColumnType("uuid") + .HasColumnName("role_id") + .IsFixedLength(); + + b.Property("MenuInfoId") + .HasColumnType("uuid") + .HasColumnName("menu_info_id") + .IsFixedLength(); + + b.HasKey("RoleId", "MenuInfoId") + .HasName("pk_role_menuinfo"); + + b.ToTable("role_menu_info", (string)null); + + b.HasComment("角色对应菜单权限"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("character varying(96)") + .HasColumnName("application_name"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("browser_info"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("client_id"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("client_ip_address"); + + b.Property("ClientName") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("client_name"); + + b.Property("Comments") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("comments"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("correlation_id"); + + b.Property("Exceptions") + .HasColumnType("text") + .HasColumnName("exceptions"); + + b.Property("ExecutionDuration") + .HasColumnType("integer") + .HasColumnName("execution_duration"); + + b.Property("ExecutionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("execution_time"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("HttpMethod") + .HasMaxLength(16) + .HasColumnType("character varying(16)") + .HasColumnName("http_method"); + + b.Property("HttpStatusCode") + .HasColumnType("integer") + .HasColumnName("http_status_code"); + + b.Property("ImpersonatorTenantId") + .HasColumnType("uuid") + .HasColumnName("impersonator_tenant_id"); + + b.Property("ImpersonatorTenantName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("impersonator_tenant_name"); + + b.Property("ImpersonatorUserId") + .HasColumnType("uuid") + .HasColumnName("impersonator_user_id"); + + b.Property("ImpersonatorUserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("impersonator_user_name"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("tenant_name"); + + b.Property("Url") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("url"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("pk_abp_audit_logs"); + + b.HasIndex("TenantId", "ExecutionTime"); + + b.HasIndex("TenantId", "UserId", "ExecutionTime"); + + b.ToTable("abp_audit_logs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("AuditLogId") + .HasColumnType("uuid") + .HasColumnName("audit_log_id"); + + b.Property("ExecutionDuration") + .HasColumnType("integer") + .HasColumnName("execution_duration"); + + b.Property("ExecutionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("execution_time"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("MethodName") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("method_name"); + + b.Property("Parameters") + .HasMaxLength(2000) + .HasColumnType("character varying(2000)") + .HasColumnName("parameters"); + + b.Property("ServiceName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("service_name"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("Id") + .HasName("pk_abp_audit_log_actions"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); + + b.ToTable("abp_audit_log_actions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("AuditLogId") + .HasColumnType("uuid") + .HasColumnName("audit_log_id"); + + b.Property("ChangeTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("change_time"); + + b.Property("ChangeType") + .HasColumnType("smallint") + .HasColumnName("change_type"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("entity_id"); + + b.Property("EntityTenantId") + .HasColumnType("uuid") + .HasColumnName("entity_tenant_id"); + + b.Property("EntityTypeFullName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("entity_type_full_name"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("Id") + .HasName("pk_abp_entity_changes"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); + + b.ToTable("abp_entity_changes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("EntityChangeId") + .HasColumnType("uuid") + .HasColumnName("entity_change_id"); + + b.Property("NewValue") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("new_value"); + + b.Property("OriginalValue") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("original_value"); + + b.Property("PropertyName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("property_name"); + + b.Property("PropertyTypeFullName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("property_type_full_name"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("Id") + .HasName("pk_abp_entity_property_changes"); + + b.HasIndex("EntityChangeId"); + + b.ToTable("abp_entity_property_changes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.BackgroundJobs.BackgroundJobRecord", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsAbandoned") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_abandoned"); + + b.Property("JobArgs") + .IsRequired() + .HasMaxLength(1048576) + .HasColumnType("character varying(1048576)") + .HasColumnName("job_args"); + + b.Property("JobName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("job_name"); + + b.Property("LastTryTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_try_time"); + + b.Property("NextTryTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("next_try_time"); + + b.Property("Priority") + .ValueGeneratedOnAdd() + .HasColumnType("smallint") + .HasDefaultValue((byte)15) + .HasColumnName("priority"); + + b.Property("TryCount") + .ValueGeneratedOnAdd() + .HasColumnType("smallint") + .HasDefaultValue((short)0) + .HasColumnName("try_count"); + + b.HasKey("Id") + .HasName("pk_abp_background_jobs"); + + b.HasIndex("IsAbandoned", "NextTryTime"); + + b.ToTable("abp_background_jobs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("provider_key"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("provider_name"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("value"); + + b.HasKey("Id") + .HasName("pk_abp_feature_values"); + + b.HasIndex("Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("abp_feature_values", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("description"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsStatic") + .HasColumnType("boolean") + .HasColumnName("is_static"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("name"); + + b.Property("Regex") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("regex"); + + b.Property("RegexDescription") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("regex_description"); + + b.Property("Required") + .HasColumnType("boolean") + .HasColumnName("required"); + + b.Property("ValueType") + .HasColumnType("integer") + .HasColumnName("value_type"); + + b.HasKey("Id") + .HasName("pk_abp_claim_types"); + + b.ToTable("abp_claim_types", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("SourceTenantId") + .HasColumnType("uuid") + .HasColumnName("source_tenant_id"); + + b.Property("SourceUserId") + .HasColumnType("uuid") + .HasColumnName("source_user_id"); + + b.Property("TargetTenantId") + .HasColumnType("uuid") + .HasColumnName("target_tenant_id"); + + b.Property("TargetUserId") + .HasColumnType("uuid") + .HasColumnName("target_user_id"); + + b.HasKey("Id") + .HasName("pk_abp_link_users"); + + b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId") + .IsUnique(); + + b.ToTable("abp_link_users", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsDefault") + .HasColumnType("boolean") + .HasColumnName("is_default"); + + b.Property("IsPublic") + .HasColumnType("boolean") + .HasColumnName("is_public"); + + b.Property("IsStatic") + .HasColumnType("boolean") + .HasColumnName("is_static"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("name"); + + b.Property("NormalizedName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("normalized_name"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("Id") + .HasName("pk_abp_roles"); + + b.HasIndex("NormalizedName"); + + b.ToTable("abp_roles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("claim_type"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("claim_value"); + + b.Property("RoleId") + .HasColumnType("uuid") + .HasColumnName("role_id"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("Id") + .HasName("pk_abp_role_claims"); + + b.HasIndex("RoleId"); + + b.ToTable("abp_role_claims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("Action") + .HasMaxLength(96) + .HasColumnType("character varying(96)") + .HasColumnName("action"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("character varying(96)") + .HasColumnName("application_name"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("browser_info"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("client_id"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("client_ip_address"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("correlation_id"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("Identity") + .HasMaxLength(96) + .HasColumnType("character varying(96)") + .HasColumnName("identity"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("tenant_name"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("pk_abp_security_logs"); + + b.HasIndex("TenantId", "Action"); + + b.HasIndex("TenantId", "ApplicationName"); + + b.HasIndex("TenantId", "Identity"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("abp_security_logs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("AccessFailedCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("access_failed_count"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("deleter_id"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("deletion_time"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("email"); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("email_confirmed"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsActive") + .HasColumnType("boolean") + .HasColumnName("is_active"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_deleted"); + + b.Property("IsExternal") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_external"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("LockoutEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("lockout_enabled"); + + b.Property("LockoutEnd") + .HasColumnType("timestamp with time zone") + .HasColumnName("lockout_end"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("name"); + + b.Property("NormalizedEmail") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("normalized_email"); + + b.Property("NormalizedUserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("normalized_user_name"); + + b.Property("PasswordHash") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("password_hash"); + + b.Property("PhoneNumber") + .HasMaxLength(16) + .HasColumnType("character varying(16)") + .HasColumnName("phone_number"); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("phone_number_confirmed"); + + b.Property("SecurityStamp") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("security_stamp"); + + b.Property("Surname") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("surname"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("two_factor_enabled"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("pk_abp_users"); + + b.HasIndex("Email"); + + b.HasIndex("NormalizedEmail"); + + b.HasIndex("NormalizedUserName"); + + b.HasIndex("UserName"); + + b.ToTable("abp_users", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("claim_type"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("claim_value"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_abp_user_claims"); + + b.HasIndex("UserId"); + + b.ToTable("abp_user_claims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("login_provider"); + + b.Property("ProviderDisplayName") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("provider_display_name"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(196) + .HasColumnType("character varying(196)") + .HasColumnName("provider_key"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("UserId", "LoginProvider") + .HasName("pk_abp_user_logins"); + + b.HasIndex("LoginProvider", "ProviderKey"); + + b.ToTable("abp_user_logins", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uuid") + .HasColumnName("organization_unit_id"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("OrganizationUnitId", "UserId") + .HasName("pk_abp_user_organization_units"); + + b.HasIndex("UserId", "OrganizationUnitId"); + + b.ToTable("abp_user_organization_units", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("RoleId") + .HasColumnType("uuid") + .HasColumnName("role_id"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("UserId", "RoleId") + .HasName("pk_abp_user_roles"); + + b.HasIndex("RoleId", "UserId"); + + b.ToTable("abp_user_roles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("login_provider"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.Property("Value") + .HasColumnType("text") + .HasColumnName("value"); + + b.HasKey("UserId", "LoginProvider", "Name") + .HasName("pk_abp_user_tokens"); + + b.ToTable("abp_user_tokens", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(95) + .HasColumnType("character varying(95)") + .HasColumnName("code"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("deleter_id"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("deletion_time"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("display_name"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_deleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("ParentId") + .HasColumnType("uuid") + .HasColumnName("parent_id"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("Id") + .HasName("pk_abp_organization_units"); + + b.HasIndex("Code"); + + b.HasIndex("ParentId"); + + b.ToTable("abp_organization_units", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uuid") + .HasColumnName("organization_unit_id"); + + b.Property("RoleId") + .HasColumnType("uuid") + .HasColumnName("role_id"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("OrganizationUnitId", "RoleId") + .HasName("pk_abp_organization_unit_roles"); + + b.HasIndex("RoleId", "OrganizationUnitId"); + + b.ToTable("abp_organization_unit_roles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ClientId") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("client_id"); + + b.Property("ClientSecret") + .HasColumnType("text") + .HasColumnName("client_secret"); + + b.Property("ClientUri") + .HasColumnType("text") + .HasColumnName("client_uri"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("ConsentType") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("consent_type"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("deleter_id"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("deletion_time"); + + b.Property("DisplayName") + .HasColumnType("text") + .HasColumnName("display_name"); + + b.Property("DisplayNames") + .HasColumnType("text") + .HasColumnName("display_names"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_deleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("LogoUri") + .HasColumnType("text") + .HasColumnName("logo_uri"); + + b.Property("Permissions") + .HasColumnType("text") + .HasColumnName("permissions"); + + b.Property("PostLogoutRedirectUris") + .HasColumnType("text") + .HasColumnName("post_logout_redirect_uris"); + + b.Property("Properties") + .HasColumnType("text") + .HasColumnName("properties"); + + b.Property("RedirectUris") + .HasColumnType("text") + .HasColumnName("redirect_uris"); + + b.Property("Requirements") + .HasColumnType("text") + .HasColumnName("requirements"); + + b.Property("Type") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("type"); + + b.HasKey("Id") + .HasName("pk_open_iddict_applications"); + + b.HasIndex("ClientId"); + + b.ToTable("open_iddict_applications", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ApplicationId") + .HasColumnType("uuid") + .HasColumnName("application_id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationDate") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_date"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("deleter_id"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("deletion_time"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_deleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("Properties") + .HasColumnType("text") + .HasColumnName("properties"); + + b.Property("Scopes") + .HasColumnType("text") + .HasColumnName("scopes"); + + b.Property("Status") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("status"); + + b.Property("Subject") + .HasMaxLength(400) + .HasColumnType("character varying(400)") + .HasColumnName("subject"); + + b.Property("Type") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("type"); + + b.HasKey("Id") + .HasName("pk_open_iddict_authorizations"); + + b.HasIndex("ApplicationId", "Status", "Subject", "Type"); + + b.ToTable("open_iddict_authorizations", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Scopes.OpenIddictScope", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("deleter_id"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("deletion_time"); + + b.Property("Description") + .HasColumnType("text") + .HasColumnName("description"); + + b.Property("Descriptions") + .HasColumnType("text") + .HasColumnName("descriptions"); + + b.Property("DisplayName") + .HasColumnType("text") + .HasColumnName("display_name"); + + b.Property("DisplayNames") + .HasColumnType("text") + .HasColumnName("display_names"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_deleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("Name") + .HasMaxLength(200) + .HasColumnType("character varying(200)") + .HasColumnName("name"); + + b.Property("Properties") + .HasColumnType("text") + .HasColumnName("properties"); + + b.Property("Resources") + .HasColumnType("text") + .HasColumnName("resources"); + + b.HasKey("Id") + .HasName("pk_open_iddict_scopes"); + + b.HasIndex("Name"); + + b.ToTable("open_iddict_scopes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Tokens.OpenIddictToken", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ApplicationId") + .HasColumnType("uuid") + .HasColumnName("application_id"); + + b.Property("AuthorizationId") + .HasColumnType("uuid") + .HasColumnName("authorization_id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationDate") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_date"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("deleter_id"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("deletion_time"); + + b.Property("ExpirationDate") + .HasColumnType("timestamp without time zone") + .HasColumnName("expiration_date"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_deleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("Payload") + .HasColumnType("text") + .HasColumnName("payload"); + + b.Property("Properties") + .HasColumnType("text") + .HasColumnName("properties"); + + b.Property("RedemptionDate") + .HasColumnType("timestamp without time zone") + .HasColumnName("redemption_date"); + + b.Property("ReferenceId") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("reference_id"); + + b.Property("Status") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("status"); + + b.Property("Subject") + .HasMaxLength(400) + .HasColumnType("character varying(400)") + .HasColumnName("subject"); + + b.Property("Type") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("type"); + + b.HasKey("Id") + .HasName("pk_open_iddict_tokens"); + + b.HasIndex("AuthorizationId"); + + b.HasIndex("ReferenceId"); + + b.HasIndex("ApplicationId", "Status", "Subject", "Type"); + + b.ToTable("open_iddict_tokens", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("provider_key"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("provider_name"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("Id") + .HasName("pk_abp_permission_grants"); + + b.HasIndex("TenantId", "Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("abp_permission_grants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("provider_key"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("provider_name"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(2048) + .HasColumnType("character varying(2048)") + .HasColumnName("value"); + + b.HasKey("Id") + .HasName("pk_abp_settings"); + + b.HasIndex("Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("abp_settings", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("deleter_id"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("deletion_time"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_deleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("pk_abp_tenants"); + + b.HasIndex("Name"); + + b.ToTable("abp_tenants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("name"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("value"); + + b.HasKey("TenantId", "Name") + .HasName("pk_abp_tenant_connection_strings"); + + b.ToTable("abp_tenant_connection_strings", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("Actions") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_audit_log_actions_abp_audit_logs_audit_log_id"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("EntityChanges") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_entity_changes_abp_audit_logs_audit_log_id"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) + .WithMany("PropertyChanges") + .HasForeignKey("EntityChangeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_entity_property_changes_abp_entity_changes_entity_chang~"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany("Claims") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_role_claims_abp_roles_role_id"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Claims") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_user_claims_abp_users_user_id"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Logins") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_user_logins_abp_users_user_id"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_user_organization_units_abp_organization_units_organizati~"); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("OrganizationUnits") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_user_organization_units_abp_users_user_id"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_user_roles_abp_roles_role_id"); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Roles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_user_roles_abp_users_user_id"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Tokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_user_tokens_abp_users_user_id"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("ParentId") + .HasConstraintName("fk_abp_organization_units_abp_organization_units_parent_id"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany("Roles") + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_organization_unit_roles_abp_organization_units_organiza~"); + + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_organization_unit_roles_abp_roles_role_id"); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", b => + { + b.HasOne("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", null) + .WithMany() + .HasForeignKey("ApplicationId") + .HasConstraintName("fk_open_iddict_authorizations_open_iddict_applications_applica~"); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Tokens.OpenIddictToken", b => + { + b.HasOne("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", null) + .WithMany() + .HasForeignKey("ApplicationId") + .HasConstraintName("fk_open_iddict_tokens_open_iddict_applications_application_id"); + + b.HasOne("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", null) + .WithMany() + .HasForeignKey("AuthorizationId") + .HasConstraintName("fk_open_iddict_tokens_open_iddict_authorizations_authorization~"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.HasOne("Volo.Abp.TenantManagement.Tenant", null) + .WithMany("ConnectionStrings") + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_tenant_connection_strings_abp_tenants_tenant_id"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Navigation("Actions"); + + b.Navigation("EntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Navigation("PropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Navigation("Claims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Navigation("Claims"); + + b.Navigation("Logins"); + + b.Navigation("OrganizationUnits"); + + b.Navigation("Roles"); + + b.Navigation("Tokens"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Navigation("Roles"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Navigation("ConnectionStrings"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/Shentun.ProjectManager.EntityFrameworkCore/Migrations/20250828030313_insert_customer.cs b/src/Shentun.ProjectManager.EntityFrameworkCore/Migrations/20250828030313_insert_customer.cs new file mode 100644 index 0000000..8954d2a --- /dev/null +++ b/src/Shentun.ProjectManager.EntityFrameworkCore/Migrations/20250828030313_insert_customer.cs @@ -0,0 +1,67 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Shentun.ProjectManager.Migrations +{ + public partial class insert_customer : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "complete_flag", + table: "project", + type: "character(1)", + maxLength: 1, + nullable: false, + defaultValueSql: "'0'", + comment: "完成状态 0=未完成 1=已完成 2=中止"); + + migrationBuilder.AddColumn( + name: "customer_id", + table: "project", + type: "uuid", + nullable: false, + defaultValue: new Guid("00000000-0000-0000-0000-000000000000"), + comment: "客户id"); + + migrationBuilder.CreateTable( + name: "customer", + columns: table => new + { + id = table.Column(type: "uuid", nullable: false), + display_name = table.Column(type: "character varying(50)", maxLength: 50, nullable: false, comment: "名称"), + short_name = table.Column(type: "character varying(50)", maxLength: 50, nullable: true, comment: "简称"), + person_in_charge = table.Column(type: "character varying(50)", maxLength: 50, nullable: true, comment: "负责人"), + contact_number = table.Column(type: "character varying(20)", maxLength: 20, nullable: true, comment: "联系电话"), + contact_address = table.Column(type: "character varying(200)", maxLength: 200, nullable: true, comment: "联系地址"), + is_active = table.Column(type: "character(1)", maxLength: 1, nullable: false, defaultValueSql: "'Y'", comment: "是否启用"), + concurrency_stamp = table.Column(type: "character varying(40)", maxLength: 40, nullable: true), + creation_time = table.Column(type: "timestamp without time zone", nullable: false), + creator_id = table.Column(type: "uuid", nullable: true), + last_modification_time = table.Column(type: "timestamp without time zone", nullable: true), + last_modifier_id = table.Column(type: "uuid", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_customer", x => x.id); + }, + comment: "客户表"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "customer"); + + migrationBuilder.DropColumn( + name: "complete_flag", + table: "project"); + + migrationBuilder.DropColumn( + name: "customer_id", + table: "project"); + } + } +} diff --git a/src/Shentun.ProjectManager.EntityFrameworkCore/Migrations/20251125115551_update_project_add_plan.Designer.cs b/src/Shentun.ProjectManager.EntityFrameworkCore/Migrations/20251125115551_update_project_add_plan.Designer.cs new file mode 100644 index 0000000..6d0a335 --- /dev/null +++ b/src/Shentun.ProjectManager.EntityFrameworkCore/Migrations/20251125115551_update_project_add_plan.Designer.cs @@ -0,0 +1,2399 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using Shentun.ProjectManager.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; + +#nullable disable + +namespace Shentun.ProjectManager.Migrations +{ + [DbContext(typeof(ProjectManagerDbContext))] + [Migration("20251125115551_update_project_add_plan")] + partial class update_project_add_plan + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.PostgreSql) + .HasAnnotation("ProductVersion", "6.0.5") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Shentun.ProjectManager.Models.Customer", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("ContactAddress") + .HasMaxLength(200) + .HasColumnType("character varying(200)") + .HasColumnName("contact_address") + .HasComment("联系地址"); + + b.Property("ContactNumber") + .HasMaxLength(20) + .HasColumnType("character varying(20)") + .HasColumnName("contact_number") + .HasComment("联系电话"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("display_name") + .HasComment("名称"); + + b.Property("IsActive") + .ValueGeneratedOnAdd() + .HasMaxLength(1) + .HasColumnType("character(1)") + .HasColumnName("is_active") + .HasDefaultValueSql("'Y'") + .HasComment("是否启用"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("PersonInCharge") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("person_in_charge") + .HasComment("负责人"); + + b.Property("ShortName") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("short_name") + .HasComment("简称"); + + b.HasKey("Id") + .HasName("pk_customer"); + + b.ToTable("customer", (string)null); + + b.HasComment("客户表"); + }); + + modelBuilder.Entity("Shentun.ProjectManager.Models.MenuInfo", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id") + .IsFixedLength(); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)") + .HasColumnName("display_name") + .HasComment("名称"); + + b.Property("DisplayOrder") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(999999) + .HasColumnName("display_order"); + + b.Property("IconName") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("icon_name") + .HasComment("菜单图标"); + + b.Property("IsActive") + .ValueGeneratedOnAdd() + .HasColumnType("character(1)") + .HasColumnName("is_active") + .HasDefaultValueSql("'Y'") + .HasComment("是否启用"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("MenuType") + .ValueGeneratedOnAdd() + .HasColumnType("character(1)") + .HasDefaultValue('1') + .HasColumnName("menu_type"); + + b.Property("ParentId") + .HasColumnType("uuid") + .HasColumnName("parent_id") + .IsFixedLength() + .HasComment("父id"); + + b.Property("RouteUrl") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("route_url") + .HasComment("路由地址"); + + b.Property("SimpleCode") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)") + .HasColumnName("simple_code") + .HasComment("自定义简码"); + + b.HasKey("Id") + .HasName("pk_menu_info"); + + b.ToTable("menu_info", (string)null); + + b.HasComment("菜单栏目"); + }); + + modelBuilder.Entity("Shentun.ProjectManager.Models.Project", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("CompleteFlag") + .ValueGeneratedOnAdd() + .HasMaxLength(1) + .HasColumnType("character(1)") + .HasColumnName("complete_flag") + .HasDefaultValueSql("'0'") + .HasComment("完成状态 0=未完成 1=已完成 2=中止"); + + b.Property("CompletionProgress") + .ValueGeneratedOnAdd() + .HasColumnType("smallint") + .HasDefaultValue((short)0) + .HasColumnName("completion_progress") + .HasComment("完成进度 0-100 整数"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("CustomerId") + .HasColumnType("uuid") + .HasColumnName("customer_id") + .HasComment("客户id"); + + b.Property("DemandContent") + .HasMaxLength(2000) + .HasColumnType("character varying(2000)") + .HasColumnName("demand_content") + .HasComment("需求内容"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("display_name") + .HasComment("名称"); + + b.Property("FinishTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("finish_time") + .HasComment("实际完成时间"); + + b.Property("IsActive") + .ValueGeneratedOnAdd() + .HasMaxLength(1) + .HasColumnType("character(1)") + .HasColumnName("is_active") + .HasDefaultValueSql("'Y'") + .HasComment("是否启用"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("LeaderId") + .HasColumnType("uuid") + .HasColumnName("leader_id") + .HasComment("负责人id"); + + b.Property("ParentId") + .HasColumnType("uuid") + .HasColumnName("parent_id") + .HasComment("父项目id"); + + b.Property("PlanEndTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("plan_end_time") + .HasComment("计划结束时间"); + + b.Property("PlanStartTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("plan_start_time") + .HasComment("计划开始时间"); + + b.Property("PlanTime") + .ValueGeneratedOnAdd() + .HasColumnType("numeric") + .HasDefaultValue(0m) + .HasColumnName("plan_time") + .HasComment("计划时间"); + + b.Property("PlanUnit") + .ValueGeneratedOnAdd() + .HasColumnType("character(1)") + .HasColumnName("plan_unit") + .HasDefaultValueSql("'0'") + .HasComment("计划时间单位 0-天 1-小时"); + + b.Property("ShortName") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("short_name") + .HasComment("简称"); + + b.HasKey("Id") + .HasName("pk_project"); + + b.ToTable("project", (string)null); + + b.HasComment("项目表"); + }); + + modelBuilder.Entity("Shentun.ProjectManager.Models.ProjectFile", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("display_name") + .HasComment("名称"); + + b.Property("EncryUserId") + .HasColumnType("uuid") + .HasColumnName("encry_user_id") + .HasComment("加密用户Id"); + + b.Property("FileData") + .HasColumnType("bytea") + .HasColumnName("file_data") + .HasComment("文件二进制数据"); + + b.Property("IsEncry") + .ValueGeneratedOnAdd() + .HasMaxLength(1) + .HasColumnType("character(1)") + .HasColumnName("is_encry") + .HasDefaultValueSql("'N'") + .HasComment("是否加密"); + + b.Property("IsLock") + .ValueGeneratedOnAdd() + .HasMaxLength(1) + .HasColumnType("character(1)") + .HasColumnName("is_lock") + .HasDefaultValueSql("'N'") + .HasComment("是否锁定"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("LockUserId") + .HasColumnType("uuid") + .HasColumnName("lock_user_id") + .HasComment("加锁用户id"); + + b.Property("ProjectFolderId") + .HasColumnType("uuid") + .HasColumnName("project_folder_id") + .HasComment("项目文件夹id"); + + b.Property("SuffixName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("suffix_name") + .HasComment("后缀名"); + + b.HasKey("Id") + .HasName("pk_project_file"); + + b.ToTable("project_file", (string)null); + + b.HasComment("项目文件表"); + }); + + modelBuilder.Entity("Shentun.ProjectManager.Models.ProjectFolder", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("display_name") + .HasComment("名称"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("ParentId") + .HasColumnType("uuid") + .HasColumnName("parent_id") + .HasComment("父项目文件夹id"); + + b.Property("ProjectId") + .HasColumnType("uuid") + .HasColumnName("project_id") + .HasComment("项目id"); + + b.HasKey("Id") + .HasName("pk_project_folder"); + + b.ToTable("project_folder", (string)null); + + b.HasComment("项目文件夹表"); + }); + + modelBuilder.Entity("Shentun.ProjectManager.Models.ProjectStaff", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("CompletionProgress") + .ValueGeneratedOnAdd() + .HasColumnType("smallint") + .HasDefaultValue((short)0) + .HasColumnName("completion_progress") + .HasComment("完成进度 0-100 整数"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DemandContent") + .HasMaxLength(2000) + .HasColumnType("character varying(2000)") + .HasColumnName("demand_content") + .HasComment("需求内容"); + + b.Property("FinishTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("finish_time") + .HasComment("实际完成时间"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("PlanEndTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("plan_end_time") + .HasComment("计划结束时间"); + + b.Property("PlanStartTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("plan_start_time") + .HasComment("计划开始时间"); + + b.Property("ProjectId") + .HasColumnType("uuid") + .HasColumnName("project_id") + .HasComment("项目id"); + + b.Property("RoleId") + .HasColumnType("uuid") + .HasColumnName("role_id") + .HasComment("角色id"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id") + .HasComment("用户id"); + + b.HasKey("Id") + .HasName("pk_project_staff"); + + b.ToTable("project_staff", (string)null); + + b.HasComment("项目人员表"); + }); + + modelBuilder.Entity("Shentun.ProjectManager.Models.ProjectStaffFeedback", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("FeedbackContent") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("character varying(1000)") + .HasColumnName("feedback_content") + .HasComment("反馈内容"); + + b.Property("FeedbackFlag") + .ValueGeneratedOnAdd() + .HasMaxLength(1) + .HasColumnType("character(1)") + .HasColumnName("feedback_flag") + .HasDefaultValueSql("'0'") + .HasComment("反馈类型 (0.反馈 1.建议 2.日志)"); + + b.Property("FeedbackTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("feedback_time") + .HasComment("反馈时间"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("ProjectStaffId") + .HasColumnType("uuid") + .HasColumnName("project_staff_id") + .HasComment("项目人员id"); + + b.HasKey("Id") + .HasName("pk_project_staff_feedback"); + + b.ToTable("project_staff_feedback", (string)null); + + b.HasComment("人员反馈、建议、日志表"); + }); + + modelBuilder.Entity("Shentun.ProjectManager.Models.RoleMenuInfo", b => + { + b.Property("RoleId") + .HasColumnType("uuid") + .HasColumnName("role_id") + .IsFixedLength(); + + b.Property("MenuInfoId") + .HasColumnType("uuid") + .HasColumnName("menu_info_id") + .IsFixedLength(); + + b.HasKey("RoleId", "MenuInfoId") + .HasName("pk_role_menuinfo"); + + b.ToTable("role_menu_info", (string)null); + + b.HasComment("角色对应菜单权限"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("character varying(96)") + .HasColumnName("application_name"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("browser_info"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("client_id"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("client_ip_address"); + + b.Property("ClientName") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("client_name"); + + b.Property("Comments") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("comments"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("correlation_id"); + + b.Property("Exceptions") + .HasColumnType("text") + .HasColumnName("exceptions"); + + b.Property("ExecutionDuration") + .HasColumnType("integer") + .HasColumnName("execution_duration"); + + b.Property("ExecutionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("execution_time"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("HttpMethod") + .HasMaxLength(16) + .HasColumnType("character varying(16)") + .HasColumnName("http_method"); + + b.Property("HttpStatusCode") + .HasColumnType("integer") + .HasColumnName("http_status_code"); + + b.Property("ImpersonatorTenantId") + .HasColumnType("uuid") + .HasColumnName("impersonator_tenant_id"); + + b.Property("ImpersonatorTenantName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("impersonator_tenant_name"); + + b.Property("ImpersonatorUserId") + .HasColumnType("uuid") + .HasColumnName("impersonator_user_id"); + + b.Property("ImpersonatorUserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("impersonator_user_name"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("tenant_name"); + + b.Property("Url") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("url"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("pk_abp_audit_logs"); + + b.HasIndex("TenantId", "ExecutionTime"); + + b.HasIndex("TenantId", "UserId", "ExecutionTime"); + + b.ToTable("abp_audit_logs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("AuditLogId") + .HasColumnType("uuid") + .HasColumnName("audit_log_id"); + + b.Property("ExecutionDuration") + .HasColumnType("integer") + .HasColumnName("execution_duration"); + + b.Property("ExecutionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("execution_time"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("MethodName") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("method_name"); + + b.Property("Parameters") + .HasMaxLength(2000) + .HasColumnType("character varying(2000)") + .HasColumnName("parameters"); + + b.Property("ServiceName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("service_name"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("Id") + .HasName("pk_abp_audit_log_actions"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); + + b.ToTable("abp_audit_log_actions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("AuditLogId") + .HasColumnType("uuid") + .HasColumnName("audit_log_id"); + + b.Property("ChangeTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("change_time"); + + b.Property("ChangeType") + .HasColumnType("smallint") + .HasColumnName("change_type"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("entity_id"); + + b.Property("EntityTenantId") + .HasColumnType("uuid") + .HasColumnName("entity_tenant_id"); + + b.Property("EntityTypeFullName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("entity_type_full_name"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("Id") + .HasName("pk_abp_entity_changes"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); + + b.ToTable("abp_entity_changes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("EntityChangeId") + .HasColumnType("uuid") + .HasColumnName("entity_change_id"); + + b.Property("NewValue") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("new_value"); + + b.Property("OriginalValue") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("original_value"); + + b.Property("PropertyName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("property_name"); + + b.Property("PropertyTypeFullName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("property_type_full_name"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("Id") + .HasName("pk_abp_entity_property_changes"); + + b.HasIndex("EntityChangeId"); + + b.ToTable("abp_entity_property_changes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.BackgroundJobs.BackgroundJobRecord", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsAbandoned") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_abandoned"); + + b.Property("JobArgs") + .IsRequired() + .HasMaxLength(1048576) + .HasColumnType("character varying(1048576)") + .HasColumnName("job_args"); + + b.Property("JobName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("job_name"); + + b.Property("LastTryTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_try_time"); + + b.Property("NextTryTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("next_try_time"); + + b.Property("Priority") + .ValueGeneratedOnAdd() + .HasColumnType("smallint") + .HasDefaultValue((byte)15) + .HasColumnName("priority"); + + b.Property("TryCount") + .ValueGeneratedOnAdd() + .HasColumnType("smallint") + .HasDefaultValue((short)0) + .HasColumnName("try_count"); + + b.HasKey("Id") + .HasName("pk_abp_background_jobs"); + + b.HasIndex("IsAbandoned", "NextTryTime"); + + b.ToTable("abp_background_jobs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("provider_key"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("provider_name"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("value"); + + b.HasKey("Id") + .HasName("pk_abp_feature_values"); + + b.HasIndex("Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("abp_feature_values", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("description"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsStatic") + .HasColumnType("boolean") + .HasColumnName("is_static"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("name"); + + b.Property("Regex") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("regex"); + + b.Property("RegexDescription") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("regex_description"); + + b.Property("Required") + .HasColumnType("boolean") + .HasColumnName("required"); + + b.Property("ValueType") + .HasColumnType("integer") + .HasColumnName("value_type"); + + b.HasKey("Id") + .HasName("pk_abp_claim_types"); + + b.ToTable("abp_claim_types", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("SourceTenantId") + .HasColumnType("uuid") + .HasColumnName("source_tenant_id"); + + b.Property("SourceUserId") + .HasColumnType("uuid") + .HasColumnName("source_user_id"); + + b.Property("TargetTenantId") + .HasColumnType("uuid") + .HasColumnName("target_tenant_id"); + + b.Property("TargetUserId") + .HasColumnType("uuid") + .HasColumnName("target_user_id"); + + b.HasKey("Id") + .HasName("pk_abp_link_users"); + + b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId") + .IsUnique(); + + b.ToTable("abp_link_users", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsDefault") + .HasColumnType("boolean") + .HasColumnName("is_default"); + + b.Property("IsPublic") + .HasColumnType("boolean") + .HasColumnName("is_public"); + + b.Property("IsStatic") + .HasColumnType("boolean") + .HasColumnName("is_static"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("name"); + + b.Property("NormalizedName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("normalized_name"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("Id") + .HasName("pk_abp_roles"); + + b.HasIndex("NormalizedName"); + + b.ToTable("abp_roles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("claim_type"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("claim_value"); + + b.Property("RoleId") + .HasColumnType("uuid") + .HasColumnName("role_id"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("Id") + .HasName("pk_abp_role_claims"); + + b.HasIndex("RoleId"); + + b.ToTable("abp_role_claims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("Action") + .HasMaxLength(96) + .HasColumnType("character varying(96)") + .HasColumnName("action"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("character varying(96)") + .HasColumnName("application_name"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("browser_info"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("client_id"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("client_ip_address"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("correlation_id"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("Identity") + .HasMaxLength(96) + .HasColumnType("character varying(96)") + .HasColumnName("identity"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("tenant_name"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("pk_abp_security_logs"); + + b.HasIndex("TenantId", "Action"); + + b.HasIndex("TenantId", "ApplicationName"); + + b.HasIndex("TenantId", "Identity"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("abp_security_logs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("AccessFailedCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("access_failed_count"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("deleter_id"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("deletion_time"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("email"); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("email_confirmed"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsActive") + .HasColumnType("boolean") + .HasColumnName("is_active"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_deleted"); + + b.Property("IsExternal") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_external"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("LockoutEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("lockout_enabled"); + + b.Property("LockoutEnd") + .HasColumnType("timestamp with time zone") + .HasColumnName("lockout_end"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("name"); + + b.Property("NormalizedEmail") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("normalized_email"); + + b.Property("NormalizedUserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("normalized_user_name"); + + b.Property("PasswordHash") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("password_hash"); + + b.Property("PhoneNumber") + .HasMaxLength(16) + .HasColumnType("character varying(16)") + .HasColumnName("phone_number"); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("phone_number_confirmed"); + + b.Property("SecurityStamp") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("security_stamp"); + + b.Property("Surname") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("surname"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("two_factor_enabled"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("pk_abp_users"); + + b.HasIndex("Email"); + + b.HasIndex("NormalizedEmail"); + + b.HasIndex("NormalizedUserName"); + + b.HasIndex("UserName"); + + b.ToTable("abp_users", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("claim_type"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("claim_value"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_abp_user_claims"); + + b.HasIndex("UserId"); + + b.ToTable("abp_user_claims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("login_provider"); + + b.Property("ProviderDisplayName") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("provider_display_name"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(196) + .HasColumnType("character varying(196)") + .HasColumnName("provider_key"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("UserId", "LoginProvider") + .HasName("pk_abp_user_logins"); + + b.HasIndex("LoginProvider", "ProviderKey"); + + b.ToTable("abp_user_logins", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uuid") + .HasColumnName("organization_unit_id"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("OrganizationUnitId", "UserId") + .HasName("pk_abp_user_organization_units"); + + b.HasIndex("UserId", "OrganizationUnitId"); + + b.ToTable("abp_user_organization_units", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("RoleId") + .HasColumnType("uuid") + .HasColumnName("role_id"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("UserId", "RoleId") + .HasName("pk_abp_user_roles"); + + b.HasIndex("RoleId", "UserId"); + + b.ToTable("abp_user_roles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("login_provider"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.Property("Value") + .HasColumnType("text") + .HasColumnName("value"); + + b.HasKey("UserId", "LoginProvider", "Name") + .HasName("pk_abp_user_tokens"); + + b.ToTable("abp_user_tokens", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(95) + .HasColumnType("character varying(95)") + .HasColumnName("code"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("deleter_id"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("deletion_time"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("display_name"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_deleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("ParentId") + .HasColumnType("uuid") + .HasColumnName("parent_id"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("Id") + .HasName("pk_abp_organization_units"); + + b.HasIndex("Code"); + + b.HasIndex("ParentId"); + + b.ToTable("abp_organization_units", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uuid") + .HasColumnName("organization_unit_id"); + + b.Property("RoleId") + .HasColumnType("uuid") + .HasColumnName("role_id"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("OrganizationUnitId", "RoleId") + .HasName("pk_abp_organization_unit_roles"); + + b.HasIndex("RoleId", "OrganizationUnitId"); + + b.ToTable("abp_organization_unit_roles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ClientId") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("client_id"); + + b.Property("ClientSecret") + .HasColumnType("text") + .HasColumnName("client_secret"); + + b.Property("ClientUri") + .HasColumnType("text") + .HasColumnName("client_uri"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("ConsentType") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("consent_type"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("deleter_id"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("deletion_time"); + + b.Property("DisplayName") + .HasColumnType("text") + .HasColumnName("display_name"); + + b.Property("DisplayNames") + .HasColumnType("text") + .HasColumnName("display_names"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_deleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("LogoUri") + .HasColumnType("text") + .HasColumnName("logo_uri"); + + b.Property("Permissions") + .HasColumnType("text") + .HasColumnName("permissions"); + + b.Property("PostLogoutRedirectUris") + .HasColumnType("text") + .HasColumnName("post_logout_redirect_uris"); + + b.Property("Properties") + .HasColumnType("text") + .HasColumnName("properties"); + + b.Property("RedirectUris") + .HasColumnType("text") + .HasColumnName("redirect_uris"); + + b.Property("Requirements") + .HasColumnType("text") + .HasColumnName("requirements"); + + b.Property("Type") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("type"); + + b.HasKey("Id") + .HasName("pk_open_iddict_applications"); + + b.HasIndex("ClientId"); + + b.ToTable("open_iddict_applications", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ApplicationId") + .HasColumnType("uuid") + .HasColumnName("application_id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationDate") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_date"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("deleter_id"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("deletion_time"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_deleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("Properties") + .HasColumnType("text") + .HasColumnName("properties"); + + b.Property("Scopes") + .HasColumnType("text") + .HasColumnName("scopes"); + + b.Property("Status") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("status"); + + b.Property("Subject") + .HasMaxLength(400) + .HasColumnType("character varying(400)") + .HasColumnName("subject"); + + b.Property("Type") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("type"); + + b.HasKey("Id") + .HasName("pk_open_iddict_authorizations"); + + b.HasIndex("ApplicationId", "Status", "Subject", "Type"); + + b.ToTable("open_iddict_authorizations", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Scopes.OpenIddictScope", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("deleter_id"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("deletion_time"); + + b.Property("Description") + .HasColumnType("text") + .HasColumnName("description"); + + b.Property("Descriptions") + .HasColumnType("text") + .HasColumnName("descriptions"); + + b.Property("DisplayName") + .HasColumnType("text") + .HasColumnName("display_name"); + + b.Property("DisplayNames") + .HasColumnType("text") + .HasColumnName("display_names"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_deleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("Name") + .HasMaxLength(200) + .HasColumnType("character varying(200)") + .HasColumnName("name"); + + b.Property("Properties") + .HasColumnType("text") + .HasColumnName("properties"); + + b.Property("Resources") + .HasColumnType("text") + .HasColumnName("resources"); + + b.HasKey("Id") + .HasName("pk_open_iddict_scopes"); + + b.HasIndex("Name"); + + b.ToTable("open_iddict_scopes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Tokens.OpenIddictToken", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ApplicationId") + .HasColumnType("uuid") + .HasColumnName("application_id"); + + b.Property("AuthorizationId") + .HasColumnType("uuid") + .HasColumnName("authorization_id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationDate") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_date"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("deleter_id"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("deletion_time"); + + b.Property("ExpirationDate") + .HasColumnType("timestamp without time zone") + .HasColumnName("expiration_date"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_deleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("Payload") + .HasColumnType("text") + .HasColumnName("payload"); + + b.Property("Properties") + .HasColumnType("text") + .HasColumnName("properties"); + + b.Property("RedemptionDate") + .HasColumnType("timestamp without time zone") + .HasColumnName("redemption_date"); + + b.Property("ReferenceId") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("reference_id"); + + b.Property("Status") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("status"); + + b.Property("Subject") + .HasMaxLength(400) + .HasColumnType("character varying(400)") + .HasColumnName("subject"); + + b.Property("Type") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("type"); + + b.HasKey("Id") + .HasName("pk_open_iddict_tokens"); + + b.HasIndex("AuthorizationId"); + + b.HasIndex("ReferenceId"); + + b.HasIndex("ApplicationId", "Status", "Subject", "Type"); + + b.ToTable("open_iddict_tokens", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("provider_key"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("provider_name"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("Id") + .HasName("pk_abp_permission_grants"); + + b.HasIndex("TenantId", "Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("abp_permission_grants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("provider_key"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("provider_name"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(2048) + .HasColumnType("character varying(2048)") + .HasColumnName("value"); + + b.HasKey("Id") + .HasName("pk_abp_settings"); + + b.HasIndex("Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("abp_settings", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("deleter_id"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("deletion_time"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_deleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("pk_abp_tenants"); + + b.HasIndex("Name"); + + b.ToTable("abp_tenants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("name"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("value"); + + b.HasKey("TenantId", "Name") + .HasName("pk_abp_tenant_connection_strings"); + + b.ToTable("abp_tenant_connection_strings", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("Actions") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_audit_log_actions_abp_audit_logs_audit_log_id"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("EntityChanges") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_entity_changes_abp_audit_logs_audit_log_id"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) + .WithMany("PropertyChanges") + .HasForeignKey("EntityChangeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_entity_property_changes_abp_entity_changes_entity_chang~"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany("Claims") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_role_claims_abp_roles_role_id"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Claims") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_user_claims_abp_users_user_id"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Logins") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_user_logins_abp_users_user_id"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_user_organization_units_abp_organization_units_organizati~"); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("OrganizationUnits") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_user_organization_units_abp_users_user_id"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_user_roles_abp_roles_role_id"); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Roles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_user_roles_abp_users_user_id"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Tokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_user_tokens_abp_users_user_id"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("ParentId") + .HasConstraintName("fk_abp_organization_units_abp_organization_units_parent_id"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany("Roles") + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_organization_unit_roles_abp_organization_units_organiza~"); + + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_organization_unit_roles_abp_roles_role_id"); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", b => + { + b.HasOne("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", null) + .WithMany() + .HasForeignKey("ApplicationId") + .HasConstraintName("fk_open_iddict_authorizations_open_iddict_applications_applica~"); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Tokens.OpenIddictToken", b => + { + b.HasOne("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", null) + .WithMany() + .HasForeignKey("ApplicationId") + .HasConstraintName("fk_open_iddict_tokens_open_iddict_applications_application_id"); + + b.HasOne("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", null) + .WithMany() + .HasForeignKey("AuthorizationId") + .HasConstraintName("fk_open_iddict_tokens_open_iddict_authorizations_authorization~"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.HasOne("Volo.Abp.TenantManagement.Tenant", null) + .WithMany("ConnectionStrings") + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_tenant_connection_strings_abp_tenants_tenant_id"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Navigation("Actions"); + + b.Navigation("EntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Navigation("PropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Navigation("Claims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Navigation("Claims"); + + b.Navigation("Logins"); + + b.Navigation("OrganizationUnits"); + + b.Navigation("Roles"); + + b.Navigation("Tokens"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Navigation("Roles"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Navigation("ConnectionStrings"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/Shentun.ProjectManager.EntityFrameworkCore/Migrations/20251125115551_update_project_add_plan.cs b/src/Shentun.ProjectManager.EntityFrameworkCore/Migrations/20251125115551_update_project_add_plan.cs new file mode 100644 index 0000000..658c69a --- /dev/null +++ b/src/Shentun.ProjectManager.EntityFrameworkCore/Migrations/20251125115551_update_project_add_plan.cs @@ -0,0 +1,52 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Shentun.ProjectManager.Migrations +{ + public partial class update_project_add_plan : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "leader_id", + table: "project", + type: "uuid", + nullable: false, + defaultValue: new Guid("00000000-0000-0000-0000-000000000000"), + comment: "负责人id"); + + migrationBuilder.AddColumn( + name: "plan_time", + table: "project", + type: "numeric", + nullable: false, + defaultValue: 0m, + comment: "计划时间"); + + migrationBuilder.AddColumn( + name: "plan_unit", + table: "project", + type: "character(1)", + nullable: false, + defaultValueSql: "'0'", + comment: "计划时间单位 0-天 1-小时"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "leader_id", + table: "project"); + + migrationBuilder.DropColumn( + name: "plan_time", + table: "project"); + + migrationBuilder.DropColumn( + name: "plan_unit", + table: "project"); + } + } +} diff --git a/src/Shentun.ProjectManager.EntityFrameworkCore/Migrations/ProjectManagerDbContextModelSnapshot.cs b/src/Shentun.ProjectManager.EntityFrameworkCore/Migrations/ProjectManagerDbContextModelSnapshot.cs index b4f3b3e..5039dd9 100644 --- a/src/Shentun.ProjectManager.EntityFrameworkCore/Migrations/ProjectManagerDbContextModelSnapshot.cs +++ b/src/Shentun.ProjectManager.EntityFrameworkCore/Migrations/ProjectManagerDbContextModelSnapshot.cs @@ -24,6 +24,81 @@ namespace Shentun.ProjectManager.Migrations NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + modelBuilder.Entity("Shentun.ProjectManager.Models.Customer", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("ContactAddress") + .HasMaxLength(200) + .HasColumnType("character varying(200)") + .HasColumnName("contact_address") + .HasComment("联系地址"); + + b.Property("ContactNumber") + .HasMaxLength(20) + .HasColumnType("character varying(20)") + .HasColumnName("contact_number") + .HasComment("联系电话"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("display_name") + .HasComment("名称"); + + b.Property("IsActive") + .ValueGeneratedOnAdd() + .HasMaxLength(1) + .HasColumnType("character(1)") + .HasColumnName("is_active") + .HasDefaultValueSql("'Y'") + .HasComment("是否启用"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("PersonInCharge") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("person_in_charge") + .HasComment("负责人"); + + b.Property("ShortName") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("short_name") + .HasComment("简称"); + + b.HasKey("Id") + .HasName("pk_customer"); + + b.ToTable("customer", (string)null); + + b.HasComment("客户表"); + }); + modelBuilder.Entity("Shentun.ProjectManager.Models.MenuInfo", b => { b.Property("Id") @@ -118,6 +193,14 @@ namespace Shentun.ProjectManager.Migrations .HasColumnType("uuid") .HasColumnName("id"); + b.Property("CompleteFlag") + .ValueGeneratedOnAdd() + .HasMaxLength(1) + .HasColumnType("character(1)") + .HasColumnName("complete_flag") + .HasDefaultValueSql("'0'") + .HasComment("完成状态 0=未完成 1=已完成 2=中止"); + b.Property("CompletionProgress") .ValueGeneratedOnAdd() .HasColumnType("smallint") @@ -139,6 +222,11 @@ namespace Shentun.ProjectManager.Migrations .HasColumnType("uuid") .HasColumnName("creator_id"); + b.Property("CustomerId") + .HasColumnType("uuid") + .HasColumnName("customer_id") + .HasComment("客户id"); + b.Property("DemandContent") .HasMaxLength(2000) .HasColumnType("character varying(2000)") @@ -173,6 +261,11 @@ namespace Shentun.ProjectManager.Migrations .HasColumnType("uuid") .HasColumnName("last_modifier_id"); + b.Property("LeaderId") + .HasColumnType("uuid") + .HasColumnName("leader_id") + .HasComment("负责人id"); + b.Property("ParentId") .HasColumnType("uuid") .HasColumnName("parent_id") @@ -188,6 +281,20 @@ namespace Shentun.ProjectManager.Migrations .HasColumnName("plan_start_time") .HasComment("计划开始时间"); + b.Property("PlanTime") + .ValueGeneratedOnAdd() + .HasColumnType("numeric") + .HasDefaultValue(0m) + .HasColumnName("plan_time") + .HasComment("计划时间"); + + b.Property("PlanUnit") + .ValueGeneratedOnAdd() + .HasColumnType("character(1)") + .HasColumnName("plan_unit") + .HasDefaultValueSql("'0'") + .HasComment("计划时间单位 0-天 1-小时"); + b.Property("ShortName") .HasMaxLength(50) .HasColumnType("character varying(50)")