Browse Source

产品增删改查

fuwencai 4 years ago
parent
commit
6223c03d20
5 changed files with 253 additions and 6 deletions
  1. 102 0
      manage/product/product.go
  2. 7 6
      model/product.go
  3. 2 0
      router/route.go
  4. 45 0
      service/product.go
  5. 97 0
      test/manage/product_test.go

+ 102 - 0
manage/product/product.go

@@ -1 +1,103 @@
 package product
+
+import (
+	"github.com/gin-gonic/gin"
+	"go.uber.org/zap"
+	"sfbase/global"
+	"sfis/db"
+	"sfis/model"
+	"sfis/model/response"
+	"sfis/service"
+	"strconv"
+)
+
+func ProductManageRegister(router *gin.Engine) {
+	productGroup := router.Group("/manage/product/")
+	productGroup.Use()
+	{
+		productGroup.POST("/create", productCreate)
+		productGroup.POST("/delete", productDelete)
+		productGroup.POST("/update", productUpdate)
+		productGroup.POST("/list", productList)
+	}
+}
+
+// 创建产品
+func productCreate(context *gin.Context) {
+	var product model.Product
+	if err := context.ShouldBind(&product); err != nil {
+		global.Logger.Error("productCreate Bind Error", zap.Any("error", err))
+		response.Fail(context)
+		return
+	}
+	result := db.GetSFISDB().Create(&product)
+	if result.Error != nil {
+		global.Logger.Error("productCreate Error", zap.Any("product", product), zap.Any("error", result.Error))
+		response.Fail(context)
+	} else {
+		global.Logger.Info("productCreate Success", zap.Any("product", product))
+		response.OkWithData(product, context)
+	}
+
+}
+
+// 删除产品
+func productDelete(context *gin.Context) {
+	var product model.Product
+	if err := context.ShouldBind(&product); err != nil {
+		response.Fail(context)
+		global.Logger.Error("productDelete Bind Error", zap.Any("error", err))
+		return
+	}
+	result := db.GetSFISDB().Delete(&product)
+	if result.Error != nil {
+		global.Logger.Error("productDelete Error", zap.Any("id", product.ID), zap.Any("error", result.Error))
+		response.Fail(context)
+	} else {
+		global.Logger.Info("productDelete Success", zap.Any("id", product.ID))
+		response.OkWithData(product, context)
+	}
+}
+
+//更新产品信息
+func productUpdate(context *gin.Context) {
+	var product model.Product
+	if err := context.ShouldBind(&product); err != nil {
+		global.Logger.Error("productUpdate Bind Error", zap.Any("error", err))
+		response.Fail(context)
+		return
+	}
+
+	result := db.GetSFISDB().Table("product").Where("id = ?", product.ID).Updates(map[string]interface{}{"name": product.Name, "url": product.Path, "unit_price": product.UnitPrice, "min_unit": product.MinUnit, "product_type": product.ProductType, "test_num": product.TestNum})
+	if result.Error != nil {
+		global.Logger.Error("productUpdate Error", zap.Any("product", product), zap.Any("error", result.Error))
+		response.Fail(context)
+	} else {
+		global.Logger.Info("productUpdate Success", zap.Any("product", product))
+		response.OkWithData(product, context)
+	}
+}
+
+// 产品信息列表
+func productList(context *gin.Context) {
+
+	page, _ := strconv.Atoi(context.Query("page"))
+	limit, _ := strconv.Atoi(context.Query("limit"))
+	id := context.PostForm("id")
+	name := context.PostForm("name")
+	url := context.PostForm("url")
+	unitPrice := context.PostForm("unit_price")
+	minUnit := context.PostForm("min_unit")
+	productType := context.PostForm("product_type")
+	testNum := context.PostForm("test_num")
+	condMap := map[string]interface{}{
+		"id":           id,
+		"name":         name,
+		"url":          url,
+		"unit_price":   unitPrice,
+		"min_unit":     minUnit,
+		"product_type": productType,
+		"test_num":     testNum,
+	}
+	service.ListProduct(condMap,page,limit,context)
+}

+ 7 - 6
model/product.go

@@ -4,12 +4,13 @@ import "time"
 
 type Product struct {
 	BaseModel
-	Name        string `json:"name"`
-	Path        string `json:"url" gorm:"column:url"`
-	UnitPrice   int    `json:"unit_price"`   //单价
-	MinUnit     int    `json:"min_unit"`     //最小单位
-	ProductType int    `json:"product_type"` //产品类型 按次-0,按条-1
-	TestNum     int    `json:"test_num"`     //试用量
+	ID          int    `json:"id" form:"id" gorm:"primaryKey" binding:"required"`
+	Name        string `json:"name" form:"name"`
+	Path        string `json:"url" gorm:"column:url" form:"url"`
+	UnitPrice   int    `json:"unit_price" form:"unit_price"`     //单价
+	MinUnit     int    `json:"min_unit" form:"min_unit"`         //最小单位
+	ProductType int    `json:"product_type" form:"product_type"` //产品类型 按次-0,按条-1
+	TestNum     int    `json:"test_num" form:"test_num"`         //试用量
 }
 
 func (p *Product) TableName() string {

+ 2 - 0
router/route.go

@@ -3,6 +3,7 @@ package router
 import (
 	"github.com/gin-gonic/gin"
 	v1 "sfis/api/v1"
+	"sfis/manage/product"
 	"sfis/manage/user"
 )
 
@@ -16,5 +17,6 @@ func InitRouter(middleware ...gin.HandlerFunc) *gin.Engine {
 	})
 	v1.ProjectApiRegister(router)
 	user.DevUserManageRegister(router)
+	product.ProductManageRegister(router)
 	return router
 }

+ 45 - 0
service/product.go

@@ -0,0 +1,45 @@
+package service
+
+import (
+	"fmt"
+	"github.com/gin-gonic/gin"
+	"go.uber.org/zap"
+	"sfbase/global"
+	"sfis/db"
+	"sfis/model"
+	"sfis/model/response"
+	"strings"
+)
+
+func ListProduct(condMap map[string]interface{},page int,limit int,context *gin.Context) {
+	// 拼查询sql
+	var products []model.Product
+	var key []string
+	var param []interface{}
+	for k, v := range condMap {
+		if v == "" {
+			continue
+		}
+		var kStr string
+		if k=="name" || k=="url"{
+			kStr = fmt.Sprintf("%s like ?",k)
+			v = "%"+v.(string)+"%"
+		}else {
+			kStr = fmt.Sprintf("%s = ?", k)
+		}
+		key = append(key,kStr)
+		param = append(param,v)
+	}
+	sql := strings.Join(key," and ")
+	var totalCount int64
+	result := db.GetSFISDB().Table("product").Where(sql,param...).Limit(limit).Offset((page - 1) * limit).Find(&products)
+	db.GetSFISDB().Table("product").Where(sql,param...).Count(&totalCount)
+	if result.Error != nil {
+		global.Logger.Error("productList Error", zap.Any("condMap", condMap), zap.Any("error", result.Error))
+		response.Fail(context)
+	} else {
+		global.Logger.Info("productList Success", zap.Any("condMap", condMap))
+		response.OkWithData(products, context)
+	}
+
+}

+ 97 - 0
test/manage/product_test.go

@@ -0,0 +1,97 @@
+package manage
+
+import (
+	"log"
+	"net/url"
+	sutil "sfbase/utils"
+	"sfis/model"
+	"strconv"
+	"testing"
+)
+
+// 新增产品测试用例
+func Test_CreateProduct(t *testing.T) {
+	product1 := &model.Product{
+		ID:          2006,
+		Name:        "行业中标数据",
+		Path:        "/path2002",
+		UnitPrice:   50, //单价精确到分  5毛
+		MinUnit:     1,  //最小单位1,即 5毛/条
+		ProductType: 1,  //产品类型 0-按次 1-按条
+		TestNum:     200,
+	}
+	log.Println("productCreate testing......")
+	data := make(url.Values)
+	data["id"] = []string{strconv.Itoa(product1.ID)}
+	data["name"] = []string{product1.Name}
+	data["url"] = []string{product1.Path}
+	data["unit_price"] = []string{strconv.Itoa(product1.UnitPrice)}
+	data["min_unit"] = []string{strconv.Itoa(product1.MinUnit)}
+	data["product_type"] = []string{strconv.Itoa(product1.ProductType)}
+	data["test_num"] = []string{strconv.Itoa(product1.TestNum)}
+
+	bs, _ := sutil.HttpPostForm("http://localhost:8080/manage/product/create", map[string]string{}, data)
+	log.Print(string(bs))
+}
+
+// 删除产品 测试用例
+func Test_DeleteProduct(t *testing.T) {
+	productId := "2002"
+	log.Println("productDelete testing......")
+	data := make(url.Values)
+	data["id"] = []string{productId}
+	bs, _ := sutil.HttpPostForm("http://localhost:8080/manage/product/delete", map[string]string{}, data)
+	log.Print(string(bs))
+}
+
+// 修改产品信息测试
+func Test_UpdateProduct(t *testing.T) {
+	log.Println("productUpdate testing......")
+	product1 := &model.Product{
+		ID:          2001,
+		Name:        "行业中标数据",
+		Path:        "/pathUpdate1",
+		UnitPrice:   50, //单价精确到分  5毛
+		MinUnit:     1,  //最小单位1,即 5毛/条
+		ProductType: 0,  //产品类型 0-按次 1-按条
+		TestNum:     200,
+	}
+	data := make(url.Values)
+	data["id"] = []string{strconv.Itoa(product1.ID)}
+	data["name"] = []string{product1.Name}
+	data["url"] = []string{product1.Path}
+	data["unit_price"] = []string{strconv.Itoa(product1.UnitPrice)}
+	data["min_unit"] = []string{strconv.Itoa(product1.MinUnit)}
+	data["product_type"] = []string{strconv.Itoa(product1.ProductType)}
+	data["test_num"] = []string{strconv.Itoa(product1.TestNum)}
+
+
+	bs, _ := sutil.HttpPostForm("http://localhost:8080/manage/product/update", map[string]string{}, data)
+	log.Print(string(bs))
+}
+
+func Test_ListProduct(t *testing.T) {
+	log.Println("productList testing......")
+	//product1 := &model.Product{
+	//	ID:          2001,
+	//	Name:        "行业中标",
+	//	Path:        "/pathUpdate1",
+	//	UnitPrice:   50, //单价精确到分  5毛
+	//	MinUnit:     1,  //最小单位1,即 5毛/条
+	//	ProductType: 0,  //产品类型 0-按次 1-按条
+	//	TestNum:     200,
+	//}
+	data := make(url.Values)
+	//data["id"] = []string{strconv.Itoa(product1.ID)}
+	//data["name"] = []string{product1.Name}
+	//data["url"] = []string{product1.Path}
+	//data["unit_price"] = []string{strconv.Itoa(product1.UnitPrice)}
+	//data["min_unit"] = []string{strconv.Itoa(product1.MinUnit)}
+	//data["product_type"] = []string{strconv.Itoa(product1.ProductType)}
+	//data["test_num"] = []string{strconv.Itoa(product1.TestNum)}
+
+
+	bs, _ := sutil.HttpPostForm("http://localhost:8080/manage/product/list?page=1&&limit=3", map[string]string{}, data)
+	log.Print(string(bs))
+}
+