订单微服务模块初始化

Administrator 0 2023-09-29

1.在WeifuwuDemo.Order.Domain中新建Orders项目文件夹并创建聚合根对象:

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text;
using Volo.Abp.Domain.Entities.Auditing;

namespace WeifuwuDemo.Order.Orders
{
    /// <summary>
    /// 订单模型
    /// </summary>
    public class OrderInfo:FullAuditedAggregateRoot<Guid>
    {
        // public Guid Id { set; get; } // 商品主键
        public string OrderType { set; get; } // 订单类型
                                              // public  OrdstringerFlag { set; get; } // 订单标志
        public Guid UserId { set; get; } // 用户Id
        public string OrderSn { set; get; }// 订单号
        public string OrderTotalPrice { set; get; } // 订单总价
        public DateTime Createtime { set; get; } // 创建时间
        public DateTime Updatetime { set; get; } // 更新时间
        public DateTime Paytime { set; get; }// 支付时间
        public DateTime Sendtime { set; get; }// 发货时间
        public DateTime Successtime { set; get; }// 订单完成时间
        public int OrderStatus { set; get; } // 订单状态
        public string OrderName { set; get; } // 订单名称
        public string OrderTel { set; get; } // 订单电话
        public string OrderAddress { set; get; } // 订单地址
        public string OrderRemark { set; get; }// 订单备注

        public virtual ICollection<OrderInfoItem> OrderItems { get; set; }

        public OrderInfo()
        {
            OrderItems = new Collection<OrderInfoItem>();
        }

        public OrderInfo(Guid id) : base(id)
        {
            OrderItems = new Collection<OrderInfoItem>();
        }
    }
}
using System;
using System.Collections.Generic;
using System.Text;
using Volo.Abp.Domain.Entities.Auditing;

namespace WeifuwuDemo.Order.Orders
{
    public class OrderInfoItem:FullAuditedEntity<Guid>
    {
        public Guid OrderId { set; get; } // 订单编号
        public string OrderSn { set; get; } // 订单号
        public Guid ProductId { set; get; } // 商品编号
        public string OrderUrl { set; get; } // 商品主图
        public string OrderName { set; get; }// 商品名称
        public decimal ItemPrice { set; get; }  // 订单项单价
        public int ItemCount { set; get; } // 订单项数量
        public decimal ItemTotalPrice { set; get; } // 订单项总价

        public OrderInfoItem()
        {
        }

        public OrderInfoItem(Guid id) : base(id)
        {

        }
    }
}

2.在WeifuwuDemo.Order.EntityFrameworkCore中的OrderDbContext文件中添加:

public DbSet<OrderInfo> OrderInfo { get; set; }

在OrderDbContextModelCreatingExtensions中添加:

// 3、订单领域创建
        builder.Entity<OrderInfo>(b =>
        {
            b.ConfigureByConvention();
            b.HasMany(u => u.OrderItems).WithOne().HasForeignKey(ur => ur.ProductId).IsRequired();
        });

4.在 WeifuwuDemo.Order.HttpApi.Host的文件夹cmd命令中执行迁移命令:

dotnet ef migrations add ordertable

dotnet ef database update

完成数据库迁移

5.在WeifuwuDemo.Order.Domain下Orders文件夹下创建仓储接口:

using System;
using System.Collections.Generic;
using System.Text;
using Volo.Abp.Domain.Repositories;

namespace WeifuwuDemo.Order.Orders
{
    public interface IOrderInfoAbpRepository:IRepository<OrderInfo,Guid>
    {

    }
}

6.在WeifuwuDemo.Order.EntityFrameworkCore项目下新建Orders文件夹,实现仓储接口:

using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
using WeifuwuDemo.Order.EntityFrameworkCore;

namespace WeifuwuDemo.Order.Orders
{
    public class OrderInfoAbpRepository:EfCoreRepository<OrderDbContext,OrderInfo,Guid>,IOrderInfoAbpRepository
    {
        public OrderInfoAbpRepository(IDbContextProvider<OrderDbContext> dbContextProvider):base(dbContextProvider)
        {
            
        }

        public override async Task<OrderInfo> GetAsync(Guid id, bool includeDetails = true, CancellationToken cancellationToken = default)
        {
            DbSet<OrderInfo> Orders = await GetDbSetAsync();
            return Orders.Include(p => p.OrderItems).Where(p => p.Id == id).FirstOrDefault();
        }
    }
}

7.在WeifuwuDemo.Order.Application.Contracts项目中新建Orders文件夹,创建服务接口及dto:

using System;
using System.Collections.Generic;
using System.Text;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;

namespace WeifuwuDemo.Order.Orders
{
    public interface IOrderInfoAppService:ICrudAppService<OrderInfoDto,Guid,PagedAndSortedResultRequestDto,CreateOrderInfoDto,UpdateOrderInfoDto>
    {

    }
}
using System;
using System.Collections.Generic;
using System.Text;

namespace WeifuwuDemo.Order.Orders
{
    public class CreateOrderInfoDto
    {
        public decimal OrderTotalPrice { set; get; } // 订单价格

        public int ProductCount { set; get; }// 商品数量
        public Guid UserId { set; get; }

        public CreateOrderInfoItemDto[] OrderItems { set; get; } // 订单项集合
    }
    public class CreateOrderInfoItemDto
    {
        /*public CreateOrderItemDto()
        {
            Id = Guid.NewGuid();
        }
        public Guid Id { set; get; } // Guid*/
        public Guid ProductId { set; get; } // 商品编号
        public string ProductName { set; get; } // 商品名称

    }
}
using System;
using System.Collections.Generic;
using System.Text;

namespace WeifuwuDemo.Order.Orders
{
    public class DeleteOrderInfoDto
    {
        public string OrderUrl { set; get; }         // 商品主图
        public string OrderTitle { set; get; }       //商品标题
        public string OrderDescription { set; get; }     // 图文描述
        public decimal OrderVirtualprice { set; get; } //商品虚拟价格
        public decimal OrderPrice { set; get; }       //价格
    }
    public class DeleteOrderInfoImageDto
    {
        public Guid OrderImageId { set; get; }         // 商品图片
    }

}
using System;
using System.Collections.Generic;
using System.Text;

namespace WeifuwuDemo.Order.Orders
{
    public class OrderInfoAttrQueryDto
    {
        public string OrderName { set; get; }
    }
}
using System;
using System.Collections.Generic;
using System.Text;
using Volo.Abp.Application.Dtos;

namespace WeifuwuDemo.Order.Orders
{
    /// <summary>
    /// 订单Dto
    /// </summary>
    public class OrderInfoDto:EntityDto<Guid>
    {
        public string OrderType { set; get; } // 订单类型
        public Guid UserId { set; get; } // 用户Id
        public string OrderSn { set; get; }// 订单号
        public string OrderTotalPrice { set; get; } // 订单总价
        public DateTime Createtime { set; get; } // 创建时间
        public DateTime Updatetime { set; get; } // 更新时间
        public DateTime Paytime { set; get; }// 支付时间
        public DateTime Sendtime { set; get; }// 发货时间
        public DateTime Successtime { set; get; }// 订单完成时间
        public int OrderStatus { set; get; } // 订单状态
        public string OrderName { set; get; } // 订单名称
        public string OrderTel { set; get; } // 订单电话
        public string OrderAddress { set; get; } // 订单地址
        public string OrderRemark { set; get; }// 订单备注

        public OrderInfoItemDto[] OrderItems { set; get; }// 订单项集合
    }
    public class OrderInfoItemDto
    {
        public Guid OrderId { set; get; } // 订单编号
        public string OrderSn { set; get; } // 订单号
        public Guid ProductId { set; get; } // 商品编号
        public string ProductUrl { set; get; } // 商品主图
        public string ProductName { set; get; }// 商品名称
        public decimal ItemPrice { set; get; }  // 订单项单价
        public int ItemCount { set; get; } // 订单项数量
        public decimal ItemTotalPrice { set; get; } // 订单项总价
    }
}
using System;
using System.Collections.Generic;
using System.Text;

namespace WeifuwuDemo.Order.Orders
{
    public class OrderInfoTotaLDto
    {
    }
}
using System;
using System.Collections.Generic;
using System.Text;

namespace WeifuwuDemo.Order.Orders
{
    public class UpdateOrderInfoDto
    {
        public string OrderUrl { set; get; }         // 商品主图
        public string OrderTitle { set; get; }       //商品标题
        public string OrderDescription { set; get; }     // 图文描述
        public decimal OrderVirtualprice { set; get; } //商品虚拟价格
        public decimal OrderPrice { set; get; }       //价格

        public int OrderStock { set; get; }       //商品库存
    }
}
using System;
using System.Collections.Generic;
using System.Text;

namespace WeifuwuDemo.Order.Orders
{
    /// <summary>
    /// 更新商品库存
    /// </summary>
    public class UpdateOrderInfoStockDto
    {
        // 商品编号
        public Guid OrderId { set; get; }
        // 商品数量
        public int OrderCount { set; get; }
    }
}

8.在WeifuwuDemo.Order.Application中创建项目文件夹Orders并实现服务接口:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;

namespace WeifuwuDemo.Order.Orders
{
    /// <summary>
    /// 商品服务实现
    /// </summary>
    [RemoteService(IsEnabled = false)]
    public class OrderInfoAppService:CrudAppService<OrderInfo,OrderInfoDto,Guid,PagedAndSortedResultRequestDto,CreateOrderInfoDto,UpdateOrderInfoDto>,IOrderInfoAppService
    {
        private readonly IOrderInfoAbpRepository _orderInfoAbpRepository;

        public OrderInfoAppService(IOrderInfoAbpRepository orderInfoAbpRepository):base(orderInfoAbpRepository)
        {
            _orderInfoAbpRepository = orderInfoAbpRepository;
        }
    }
}

并且在OrderApplicationAutoMapperProfile文件中添加映射关系:

CreateMap<OrderInfo, OrderInfoDto>();
        CreateMap<PagedAndSortedResultRequestDto, OrderInfo>();
        CreateMap<CreateOrderInfoDto, OrderInfo>();
        CreateMap<UpdateOrderInfoDto, OrderInfo>();
        CreateMap<OrderInfoAttrQueryDto, OrderInfo>();
        CreateMap<OrderInfoItemDto, OrderInfoItem>();
        CreateMap<OrderInfoItem, OrderInfoItemDto>();
        CreateMap<CreateOrderInfoItemDto, OrderInfoItem>();

在OrderApplicationModule中将验证实体和dto改为false:

using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AutoMapper;
using Volo.Abp.Modularity;
using Volo.Abp.Application;

namespace WeifuwuDemo.Order;

[DependsOn(
    typeof(OrderDomainModule),
    typeof(OrderApplicationContractsModule),
    typeof(AbpDddApplicationModule),
    typeof(AbpAutoMapperModule)
    )]
public class OrderApplicationModule : AbpModule
{
    public override void ConfigureServices(ServiceConfigurationContext context)
    {
        context.Services.AddAutoMapperObjectMapper<OrderApplicationModule>();
        Configure<AbpAutoMapperOptions>(options =>
        {
            options.AddMaps<OrderApplicationModule>(validate: false);
        });
    }
}

8.在WeifuwuDemo.Order.HttpApi中添加项目文件夹Orders并添加controller:

using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;

namespace WeifuwuDemo.Order.Orders
{
    [ApiController]
    [Route("api/[controller]/[action]")]
    public class OrderInfoController:OrderController,IOrderInfoAppService
    {
        private readonly IOrderInfoAppService _orderInfoAppService;

        public OrderInfoController(IOrderInfoAppService orderInfoAppService)
        {
            _orderInfoAppService = orderInfoAppService;
        }
        /// <summary>
        /// 查询商品列表
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet]
        public async Task<PagedResultDto<OrderInfoDto>> GetListAsync([FromQuery] PagedAndSortedResultRequestDto input)
        {
            return await _orderInfoAppService.GetListAsync(input);
        }

        /// <summary>
        /// 查询单个商品
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpGet("{id}")]
        public async Task<OrderInfoDto> GetAsync(Guid id)
        {
            var Order = await _orderInfoAppService.GetAsync(id);
            return Order;
        }

        /// <summary>
        /// 更新商品
        /// </summary>
        /// <param name="id"></param>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPut("{id}")]
        public async Task<OrderInfoDto> UpdateAsync(Guid id, UpdateOrderInfoDto input)
        {
            return await _orderInfoAppService.UpdateAsync(id, input);
        }

        /// <summary>
        /// 创建商品
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<OrderInfoDto> CreateAsync(CreateOrderInfoDto input)
        {
            return await _orderInfoAppService.CreateAsync(input);
        }

        /// <summary>
        /// 删除商品
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpDelete("{id}")]
        public async Task DeleteAsync(Guid id)
        {
            await _orderInfoAppService.DeleteAsync(id);
        }

    }
}