liujiandao
2024-04-07 4630cbf64d1d4f33376efaaec7b4fcb90b01bf05
api/v1/test/product.go
@@ -3,11 +3,14 @@
import (
   "github.com/gin-gonic/gin"
   "go.uber.org/zap"
   "google.golang.org/grpc"
   "google.golang.org/grpc/credentials/insecure"
   "srm/global"
   "srm/model/common/request"
   "srm/model/common/response"
   "srm/model/test"
   testReq "srm/model/test/request"
   testResp "srm/model/test/response"
   "srm/service"
)
@@ -22,17 +25,30 @@
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Param data body test.Product true "创建Product"
// @Param data body request.ProductCreate true "创建Product"
// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
// @Router /p/createProduct [post]
func (pApi *ProductApi) CreateProduct(c *gin.Context) {
   var p test.Product
   var p testReq.ProductCreate
   err := c.ShouldBindJSON(&p)
   if err != nil {
      response.FailWithMessage(err.Error(), c)
      return
   }
   if err := pService.CreateProduct(&p); err != nil {
   for _, t := range p.List {
      var num int64
      db := global.GVA_DB.Model(&test.SupplierMaterial{})
      err := db.Where("number = ?", t.Number).Where("supplier_id = ?", t.SupplierId).Count(&num).Error
      if err != nil {
         response.FailWithMessage(err.Error(), c)
         return
      }
      if num > 0 {
         response.FailWithMessage("当前供应商已经提供此产品", c)
         return
      }
   }
   if err := pService.CreateProduct(p.List); err != nil {
      global.GVA_LOG.Error("创建失败!", zap.Error(err))
      response.FailWithMessage("创建失败", c)
   } else {
@@ -46,17 +62,17 @@
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Param data body test.Product true "删除Product"
// @Param data body request.GetById true "删除Product"
// @Success 200 {string} string "{"success":true,"data":{},"msg":"删除成功"}"
// @Router /p/deleteProduct [delete]
func (pApi *ProductApi) DeleteProduct(c *gin.Context) {
   var p test.Product
   var p request.GetById
   err := c.ShouldBindJSON(&p)
   if err != nil {
      response.FailWithMessage(err.Error(), c)
      return
   }
   if err := pService.DeleteProduct(p); err != nil {
   if err := pService.DeleteProduct(p.ID); err != nil {
      global.GVA_LOG.Error("删除失败!", zap.Error(err))
      response.FailWithMessage("删除失败", c)
   } else {
@@ -94,11 +110,11 @@
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Param data body test.Product true "更新Product"
// @Param data body test.SupplierMaterial true "更新Product"
// @Success 200 {string} string "{"success":true,"data":{},"msg":"更新成功"}"
// @Router /p/updateProduct [put]
func (pApi *ProductApi) UpdateProduct(c *gin.Context) {
   var p test.Product
   var p test.SupplierMaterial
   err := c.ShouldBindJSON(&p)
   if err != nil {
      response.FailWithMessage(err.Error(), c)
@@ -118,11 +134,11 @@
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Param data query test.Product true "用id查询Product"
// @Param data query request.GetById true "用id查询Product"
// @Success 200 {string} string "{"success":true,"data":{},"msg":"查询成功"}"
// @Router /p/findProduct [get]
func (pApi *ProductApi) FindProduct(c *gin.Context) {
   var p test.Product
   var p request.GetById
   err := c.ShouldBindQuery(&p)
   if err != nil {
      response.FailWithMessage(err.Error(), c)
@@ -143,24 +159,100 @@
// @accept application/json
// @Produce application/json
// @Param data query testReq.ProductSearch true "分页获取Product列表"
// @Param Authorization   header string true "token"
// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
// @Router /p/getProductList [get]
func (pApi *ProductApi) GetProductList(c *gin.Context) {
   var params testReq.ProductSearch
   err := c.ShouldBindQuery(&params)
   if err != nil {
      response.FailWithMessage(err.Error(), c)
      return
   }
   list, total, err := pService.GetProductInfoList(params)
   if err != nil {
      global.GVA_LOG.Error("获取失败!", zap.Error(err))
      response.FailWithMessage("获取失败", c)
      return
   }
   response.OkWithDetailed(response.PageResult{
      List:     list,
      Total:    total,
      Page:     params.Page,
      PageSize: params.PageSize,
   }, "获取成功", c)
}
var (
   productServiceConn *grpc.ClientConn
)
func InitProductServiceConn() {
   var err error
   productServiceConn, err = grpc.Dial(global.GVA_CONFIG.System.GrpcUrl, 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()
   }
}
// GetProductListFromGrpc 分页获取Product列表
// @Tags Product
// @Summary 分页获取Product列表
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Param data query testReq.ProductSearch true "分页获取Product列表"
// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
// @Router /p/getProductListFromGrpc [get]
func (pApi *ProductApi) GetProductListFromGrpc(c *gin.Context) {
   var pageInfo testReq.ProductSearch
   err := c.ShouldBindQuery(&pageInfo)
   if err != nil {
      response.FailWithMessage(err.Error(), c)
      return
   }
   if list, total, err := pService.GetProductInfoList(pageInfo); err != nil {
   list, total, err := pService.GetMaterials(pageInfo)
   if err != nil {
      global.GVA_LOG.Error("获取失败!", zap.Error(err))
      response.FailWithMessage("获取失败", c)
   } else {
      response.OkWithDetailed(response.PageResult{
         List:     list,
         Total:    total,
         Page:     pageInfo.Page,
         PageSize: pageInfo.PageSize,
      }, "获取成功", c)
      return
   }
   productList := make([]testResp.Material, 0)
   for _, item := range list {
      productList = append(productList, testResp.Material{
         Name:           item.Name,
         Number:         item.ID,
         Unit:           item.Unit,
         Specifications: item.Specs,
         ModelNumber:    item.Type,
         MinimumStock:   item.MinInventory.IntPart(),
         MaximumStock:   item.MaxInventory.IntPart(),
         Remark:         "",
         CategoryName:   item.CategoryName,
      })
   }
   if err != nil {
      global.GVA_LOG.Error("获取失败!", zap.Error(err))
      response.FailWithMessage("获取失败", c)
   }
   response.OkWithDetailed(response.PageResult{
      List:     productList,
      Total:    total,
      Page:     pageInfo.Page,
      PageSize: pageInfo.PageSize,
   }, "获取成功", c)
}