liujiandao
2024-01-11 eaa4218d45fade3a9ac2cfb7ff81cbfceeb650cd
proto/purchase_wms/server.go
@@ -3,6 +3,7 @@
import (
   "context"
   "github.com/shopspring/decimal"
   "gorm.io/gorm"
   "strconv"
   "time"
   "wms/constvar"
@@ -22,6 +23,7 @@
   operation.Number = strconv.FormatInt(time.Now().Unix(), 10)
   operation.Status = constvar.OperationStatus_Ready
   operation.CompanyName = req.SupplierName
   operation.Source = req.Source
   warehouse, err := models.NewWarehouseSearch().First()
   if err != nil {
      return nil, err
@@ -36,19 +38,35 @@
   if err != nil {
      return nil, err
   }
   operation.ToLocationID = location.Id
   first, err := models.NewLocationSearch().SetType(int(constvar.LocationTypeVendor)).First()
   if err != nil {
      return nil, err
   }
   operation.FromLocationID = first.Id
   operation.LocationID = location.Id
   operation.BaseOperationType = constvar.BaseOperationTypeIncoming
   for _, product := range req.Product {
      var detail models.OperationDetails
      detail.ProductId = product.Id
      detail.Amount = decimal.NewFromInt(product.Amount)
      detail.FromLocationID = first.Id
      detail.ToLocationID = location.Id
      details = append(details, &detail)
   }
   err = models.NewOperationSearch().Create(&operation)
   return new(PurchaseToWmsResponse), err
   err = models.WithTransaction(func(db *gorm.DB) error {
      err := models.NewOperationSearch().SetOrm(db).Create(&operation)
      if err != nil {
         return err
      }
      for _, detail := range details {
         detail.OperationID = operation.Id
      }
      err = models.NewOperationDetailsSearch().SetOrm(db).CreateBatch(details)
      return err
   })
   if err != nil {
      return nil, err
   }
   resp := new(PurchaseToWmsResponse)
   resp.Warehouse = warehouse.Name
   return resp, nil
}