123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- package order
- import (
- "errors"
- logger "eta/eta_mini_ht_api/common/component/log"
- "eta/eta_mini_ht_api/common/exception"
- productService "eta/eta_mini_ht_api/domian/merchant"
- orderService "eta/eta_mini_ht_api/domian/order"
- userService "eta/eta_mini_ht_api/domian/user"
- "eta/eta_mini_ht_api/service/user"
- "gorm.io/gorm"
- "time"
- )
- type ProductOrderInfo struct {
- Buyer BuyerInfo `json:"buyer"`
- ProductInfo ProductInfo `json:"productInfo"`
- OrderNo string `json:"orderNo"`
- }
- type ProductInfo struct {
- Name string
- Type string
- Price string
- BeginDate string
- EndDate string
- }
- type BuyerInfo struct {
- Name string
- Mobile string
- AreaCode string
- }
- func GenerateProductOrderNo() string {
- return orderService.GenerateProductOrderNo()
- }
- func CreateProductOrder(templateUser user.User, productId int, orderNo string) (orderInfo ProductOrderInfo, err error) {
- if productId <= 0 {
- err = exception.New(exception.IllegalProductId)
- }
- productInfo, err := productService.GetMerchantProductById(productId)
- if err != nil {
- err = exception.NewWithException(exception.ProductInfoError, err.Error())
- return
- }
- officialUser, err := userService.GetUserByTemplateUserId(templateUser.Id)
- if err != nil {
- if errors.Is(err, gorm.ErrRecordNotFound) {
- err = exception.New(exception.OfficialUserNotFound)
- } else {
- err = exception.NewWithException(exception.OfficialUserFoundError, err.Error())
- }
- return
- }
- orderNo, err = orderService.CreateProductOrder(orderService.ProductOrderDTO{
- OrderID: orderNo,
- UserID: templateUser.Id,
- ProductID: productId,
- TotalAmount: productInfo.Price.String(),
- })
- if err != nil {
- logger.Error("创建订单失败:%v", err)
- if errors.Is(err, gorm.ErrDuplicatedKey) {
- err = exception.NewWithException(exception.SubscribeFailed, "请勿重复下单")
- return
- }
- err = exception.NewWithException(exception.SubscribeFailed, err.Error())
- return
- }
- buyer := BuyerInfo{
- Name: officialUser.RealName,
- Mobile: templateUser.Mobile,
- AreaCode: templateUser.AreaCode,
- }
- product := ProductInfo{
- Name: productInfo.Title,
- Type: productInfo.Type,
- Price: productInfo.Price.String(),
- BeginDate: time.Now().Format(time.DateOnly),
- EndDate: time.Now().Add(time.Duration(productInfo.ValidDays*24) * time.Hour).Format(time.DateOnly),
- }
- orderInfo = ProductOrderInfo{
- Buyer: buyer,
- ProductInfo: product,
- OrderNo: orderNo,
- }
- return
- }
|