liujiandao
2023-11-16 727d16a6d0336daa6c2f9541564d1500444e44a2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
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
}