zhangqian
2023-10-12 4f6d9b1e7284831d8225ec207f0fa83e36b09b9d
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package v1
 
import (
    "aps_crm/conf"
    "aps_crm/model"
    "aps_crm/model/request"
    "aps_crm/model/response"
    "aps_crm/pkg/contextx"
    "aps_crm/pkg/ecode"
    "aps_crm/pkg/logx"
    "aps_crm/proto/product"
    "fmt"
    "github.com/gin-gonic/gin"
    "github.com/shopspring/decimal"
    "github.com/spf13/cast"
    "google.golang.org/grpc"
    "google.golang.org/grpc/credentials/insecure"
)
 
type ProductApi struct{}
 
var (
    productServiceConn *grpc.ClientConn
)
 
func InitProductServiceConn() {
    fmt.Println(conf.Conf.GrpcServiceAddr.Aps)
    var err error
    productServiceConn, err = grpc.Dial(conf.Conf.GrpcServiceAddr.Aps, grpc.WithTransportCredentials(insecure.NewCredentials()))
    if err != nil {
        logx.Errorf("grpc dial product service error: %v", err.Error())
        return
    }
}
 
func CloseProductServiceConn() {
    if productServiceConn != nil {
        productServiceConn.Close()
    }
}
 
// List
//
// @Tags        产品
// @Summary    获取产品列表
// @Produce    application/json
// @Param        object    query        request.GetProductList    true    "参数"
// @Success    200    {object}    response.ListResponse{data=[]product.Product}
//
//    @Router        /api/product/list [get]
func (ci *ProductApi) List(c *gin.Context) {
    var params request.GetProductList
    ctx, ok := contextx.NewContext(c, &params)
    if !ok {
        return
    }
    if !params.Check() {
        ctx.FailWithMsg(ecode.ParamsErr, "page, pageSize超出范围")
        return
    }
 
    cli := product.NewProductServiceClient(productServiceConn)
    getProductListResponse, err := cli.GetProductList(ctx.GetCtx(), &product.GetProductListRequest{
        Page:          cast.ToInt32(params.Page),
        PageSize:      cast.ToInt32(params.PageSize),
        ProductNumber: params.ProductNumber,
        ProductName:   params.ProductName,
    })
    rawProductList := getProductListResponse.List
    productList := make([]model.Product, len(rawProductList))
 
    for k, v := range rawProductList {
        productList[k].Number = v.Number
        productList[k].Name = v.Name
        productList[k].Price = decimal.NewFromFloat(v.SalePrice).Round(2)
        productList[k].Amount = decimal.NewFromFloat(1)
        productList[k].Total = productList[k].Price.Mul(productList[k].Amount).Round(2)
    }
 
    if err != nil {
        logx.Errorf("GetProductList err: %v", err.Error())
        ctx.FailWithMsg(ecode.UnknownErr, "内部错误")
        return
    }
    if getProductListResponse.Code != 0 {
        logx.Errorf("GetProductList err: %v", err.Error())
        ctx.FailWithMsg(ecode.UnknownErr, "内部错误")
        return
    }
    ctx.OkWithDetailed(response.ListResponse{
        Data:  productList,
        Count: getProductListResponse.Total,
    })
}
 
// Info
// @Tags        产品
// @Summary    获取产品详情
// @Produce    application/json
// @Param    productNumber query string         true    "参数"
// @Success    200     {object} contextx.Response{data=product.Product}    "成功"
// @Router        /api/product/info [get]
func (ci *ProductApi) Info(c *gin.Context) {
    ctx, ok := contextx.NewContext(c, nil)
    if !ok {
        return
    }
 
    // 获取产品ID
    productId := c.Query("productNumber")
    cli := product.NewProductServiceClient(productServiceConn)
 
    getProductInfoResponse, err := cli.GetProductInfo(ctx.GetCtx(), &product.GetProductInfoRequest{ProductId: productId})
    if err != nil {
        logx.Errorf("GetProductInfo err: %v", err.Error())
        ctx.FailWithMsg(ecode.UnknownErr, "内部错误")
        return
    }
    if getProductInfoResponse.Code != 0 {
        logx.Errorf("GetProductInfo err: %v", err.Error())
        ctx.FailWithMsg(ecode.UnknownErr, "内部错误")
        return
    }
    ctx.OkWithDetailed(getProductInfoResponse.Data)
}