package purchase_wms import ( "context" "errors" "fmt" "github.com/shopspring/decimal" "gorm.io/gorm" "srm/global" "srm/model/purchase" "srm/model/test" "time" ) type Server struct { UnimplementedPurchaseServiceServer } func (s *Server) UpdatePurchaseStatus(ctx context.Context, req *UpdatePurchaseStatusRequest) (*UpdatePurchaseStatusResponse, error) { if req.Number == "" { return nil, errors.New("采购编号不能为空") } err := global.GVA_DB.Model(&purchase.Purchase{}).Where("number = ?", req.Number). Updates(map[string]interface{}{"status": purchase.OrderStatusStored}).Error return new(UpdatePurchaseStatusResponse), err } func (s *Server) GetSupplierListByProductId(ctx context.Context, req *GetSupplierListByProductIdRequest) (*GetSupplierListByProductIdResponse, error) { if req.ProductId == "" { return nil, errors.New("产品编号不能为空") } var products []test.Product err := global.GVA_DB.Model(&test.Product{}).Where("number = ?", req.ProductId).Preload("Supplier").Find(&products).Error if err != nil { return nil, err } list := make([]*SupplierList, 0) for _, product := range products { if product.Supplier.Status != 1 { continue } var sl SupplierList sl.SupplierId = int64(product.SupplierId) sl.SupplierName = product.Supplier.Name sl.PurchasePrice = float32(product.PurchasePrice) list = append(list, &sl) } resp := new(GetSupplierListByProductIdResponse) resp.List = list return resp, nil } func (s *Server) CreatePurchaseByWms(ctx context.Context, req *CreatePurchaseByWmsRequest) (*CreatePurchaseByWmsResponse, error) { if req.SupplierId == 0 || req.ProductId == "" { return nil, errors.New("供应商id或产品id为空") } var pt purchase.PurchaseType err := global.GVA_DB.Model(&purchase.PurchaseType{}).First(&pt).Error if err != nil { return nil, err } var product test.Product err = global.GVA_DB.Model(&test.Product{}).Where("number = ? and supplier_id = ?", req.ProductId, req.SupplierId).First(&product).Error if err != nil { return nil, err } //采购单 var purchaseRecord purchase.Purchase purchaseRecord.PurchaseTypeId = int(pt.ID) purchaseRecord.SupplierId = int(req.SupplierId) purchaseRecord.OrderSource = "WMS推送" purchaseRecord.Name = "WMS补货" purchaseRecord.ID = 0 purchaseRecord.Status = purchase.OrderStatusConfirmed purchaseRecord.HandledBy = "admin" purchaseRecord.Creator = "admin" purchaseRecord.Number = fmt.Sprintf("CG%v", time.Now().Unix()) purchaseRecord.Principal = "admin" purchaseRecord.OrderType = "采购订单" purchaseRecord.Quantity = decimal.NewFromInt(req.Amount) purchaseRecord.TotalPrice = purchaseRecord.Quantity.Mul(decimal.NewFromFloat(product.PurchasePrice)) purchaseRecord.UnInvoiceAmount = purchaseRecord.TotalPrice purchaseRecord.ShouldPayAmount = purchaseRecord.TotalPrice //产品 var pp purchase.PurchaseProducts pp.ProductId = int(product.ID) pp.Amount = purchaseRecord.Quantity pp.Price = decimal.NewFromFloat(product.PurchasePrice) pp.Total = purchaseRecord.TotalPrice pp.Remark = "WMS补货" err = global.GVA_DB.Transaction(func(tx *gorm.DB) error { err = tx.Create(&purchaseRecord).Error if err != nil { return err } pp.PurchaseId = int(purchaseRecord.ID) return tx.Create(&pp).Error }) if err != nil { return nil, err } resp := new(CreatePurchaseByWmsResponse) resp.PurchaseNumber = purchaseRecord.Number return resp, nil }