fuwencai 4 年之前
父節點
當前提交
219a72deee
共有 6 個文件被更改,包括 187 次插入85 次删除
  1. 25 34
      manage/product/product.go
  2. 5 18
      manage/user/user.go
  3. 90 12
      service/product.go
  4. 46 0
      service/user.go
  5. 20 20
      test/manage/product_test.go
  6. 1 1
      test/manage/user_test.go

+ 25 - 34
manage/product/product.go

@@ -4,7 +4,6 @@ import (
 	"github.com/gin-gonic/gin"
 	"go.uber.org/zap"
 	"sfbase/global"
-	"sfis/db"
 	"sfis/model"
 	"sfis/model/response"
 	"sfis/service"
@@ -27,60 +26,52 @@ 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)
+		response.FailWithMessage("参数错误", 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)
-	}
-
+	service.CreateProduct(product, context)
 }
 
 // 删除产品
 func productDelete(context *gin.Context) {
 	var product model.Product
 	if err := context.ShouldBind(&product); err != nil {
-		response.Fail(context)
+		response.FailWithMessage("参数错误", 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)
-	}
+	service.DeleteProduct(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)
+	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")
+	if id_ == "" {
+		response.FailWithMessage("缺少id", context)
 		return
 	}
+	id, _ := strconv.Atoi(id_)
+	p := gin.H{
+		"name":         name,
+		"url":          url,
+		"unit_price":   unitPrice,
+		"min_unit":     minUnit,
+		"product_type": productType,
+		"test_num":     testNum}
 
-	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)
-	}
+	global.Logger.Info("api userProjectChoose参数:", zap.Any("param", p))
+	service.UpdateProduct(p, id, context)
 }
 
 // 产品信息列表
 func productList(context *gin.Context) {
-
 	page, _ := strconv.Atoi(context.Query("page"))
 	limit, _ := strconv.Atoi(context.Query("limit"))
 	id := context.PostForm("id")
@@ -99,5 +90,5 @@ func productList(context *gin.Context) {
 		"product_type": productType,
 		"test_num":     testNum,
 	}
-	service.ListProduct(condMap,page,limit,context)
+	service.ListProduct(condMap, page, limit, context)
 }

+ 5 - 18
manage/user/user.go

@@ -8,14 +8,11 @@ import (
 	"sfbase/global"
 
 	sutils "sfbase/utils"
-	"sfis/db"
-	"sfis/lock"
 	"sfis/model"
 	"sfis/model/response"
 	"sfis/service"
 	"sfis/utils"
 	"strconv"
-	"sync"
 	"time"
 )
 
@@ -30,29 +27,19 @@ func DevUserManageRegister(router *gin.Engine) {
 }
 
 // 创建用户
-func userCreate(context *gin.Context) {
+func userCreate(c *gin.Context) {
 	var user model.User
-	if err := context.ShouldBind(&user); err != nil {
-		response.Fail(context)
+	if err := c.ShouldBind(&user); err != nil {
+		response.FailWithMessage("参数错误",c)
 		return
 	}
+	global.Logger.Info("manage userCreate接口参数:", zap.Any("param", user))
 	t := time.Now()
 	appId := utils.GetAppID(t.Unix())
 	key := sutils.GetComplexRandom(8, 3, 5)
 	user.SecretKey = key
 	user.AppID = appId
-	result := db.GetSFISDB().Create(&user)
-	if result.Error != nil {
-		global.Logger.Error("userCreate Error", zap.Any("user", user), zap.Any("error", result.Error))
-		response.Fail(context)
-	} else {
-		global.Logger.Info("userCreate Success", zap.Any("user", user))
-		// 生全局内存锁
-		lock.MainLock.Lock()
-		lock.UserLockMap[appId] = &sync.Mutex{}
-		lock.MainLock.Unlock()
-		response.OkWithData(user, context)
-	}
+	service.CreateUser(user,c)
 
 }
 

+ 90 - 12
service/product.go

@@ -4,14 +4,71 @@ import (
 	"fmt"
 	"github.com/gin-gonic/gin"
 	"go.uber.org/zap"
+	"net/http"
 	"sfbase/global"
 	"sfis/db"
 	"sfis/model"
 	"sfis/model/response"
+	"strconv"
 	"strings"
 )
 
-func ListProduct(condMap map[string]interface{},page int,limit int,context *gin.Context) {
+// 创建产品
+func CreateProduct(product model.Product, context *gin.Context) {
+	var tempProduct model.Product
+	// 判断用产品id是否重复
+	db.GetSFISDB().Where("id = ?", product.ID).Find(&tempProduct)
+	fmt.Println(tempProduct)
+	if tempProduct.ID > 0 {
+		response.FailWithMessage("产品id重复", 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.FailWithMessage("产品创建失败", context)
+	} else {
+		global.Logger.Info("productCreate Success", zap.Any("product", product))
+		response.OkWithMessage("产品创建成功", context)
+	}
+}
+
+// 删除产品
+func DeleteProduct(product model.Product, context *gin.Context) {
+	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.FailWithMessage("产品删除失败", context)
+	} else {
+		global.Logger.Info("productDelete Success", zap.Any("id", product.ID))
+		response.OkWithMessage("产品删除成功", context)
+	}
+}
+
+//更新产品
+func UpdateProduct(updateMap map[string]interface{}, id int, context *gin.Context) {
+	//移除map中为空串的key
+	for k, v := range updateMap {
+		if v == "" {
+			delete(updateMap, k)
+		} else if k == "unit_price" || k == "min_unit" || k == "product_type" || k == "test_num" {
+			strV, _ := strconv.Atoi(v.(string))
+			updateMap[k] = strV
+		}
+	}
+
+	result := db.GetSFISDB().Table("product").Where("id = ?", id).Updates(updateMap)
+	if result.Error != nil {
+		global.Logger.Error("productUpdate Error", zap.Any("updateMap", updateMap), zap.Any("error", result.Error))
+		response.FailWithMessage("产品更新失败", context)
+	} else {
+		global.Logger.Info("productUpdate Success", zap.Any("updateMap", updateMap))
+		response.OkWithMessage("产品更新成功", context)
+	}
+}
+
+// 查询产品
+func ListProduct(condMap map[string]interface{}, page int, limit int, context *gin.Context) {
 	// 拼查询sql
 	var products []model.Product
 	var key []string
@@ -21,25 +78,46 @@ func ListProduct(condMap map[string]interface{},page int,limit int,context *gin.
 			continue
 		}
 		var kStr string
-		if k=="name" || k=="url"{
-			kStr = fmt.Sprintf("%s like ?",k)
-			v = "%"+v.(string)+"%"
-		}else {
+		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)
+		key = append(key, kStr)
+		param = append(param, v)
 	}
-	sql := strings.Join(key," and ")
+	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)
+	errors := db.GetSFISDB().Table("product").Where(sql, param...).Count(&totalCount).Error
+	if errors != nil {
+		global.Logger.Error("productList search count Error", zap.Any("condMap", condMap), zap.Any("error", errors))
+		response.FailWithMessage("产品信息查询失败", context)
+	}
+	if totalCount == 0 {
+		context.JSON(http.StatusOK, map[string]interface{}{
+			"data":        products,
+			"msg":         "查询成功",
+			"total_count": 0,
+			"code":        response.SUCCESS,
+		})
+		//response.OkWithData(products, context)
+		return
+	}
+	result := db.GetSFISDB().Table("product").Where(sql, param...).Limit(limit).Offset((page - 1) * limit).Find(&products)
 	if result.Error != nil {
 		global.Logger.Error("productList Error", zap.Any("condMap", condMap), zap.Any("error", result.Error))
-		response.Fail(context)
+		response.FailWithMessage("产品信息查询失败", context)
 	} else {
 		global.Logger.Info("productList Success", zap.Any("condMap", condMap))
+		//response.OkWithData(products, context)
 		response.OkWithData(products, context)
+		context.JSON(http.StatusOK, map[string]interface{}{
+			"data":        products,
+			"msg":         "查询成功",
+			"total_count": totalCount,
+			"code":        response.SUCCESS,
+		})
 	}
 
-}
+}

+ 46 - 0
service/user.go

@@ -2,13 +2,17 @@ package service
 
 import (
 	"github.com/gin-gonic/gin"
+	"go.uber.org/zap"
 	"gorm.io/gorm"
 	"log"
+	"sfbase/global"
 	"sfis/db"
+	"sfis/lock"
 	"sfis/model"
 	"sfis/model/response"
 	"strconv"
 	"strings"
+	"sync"
 	"time"
 )
 
@@ -100,3 +104,45 @@ func UserProjectList(appId string, c *gin.Context) {
 		response.OkWithData(userProject, c)
 	}
 }
+
+//创建用户
+func CreateUser(user model.User, c *gin.Context) {
+	var tempUser []model.User
+	// 判断用户名是否重复
+	db.GetSFISDB().Where("name = ?", user.Name).Find(&tempUser)
+	if len(tempUser) > 0 {
+		response.FailWithMessage("用户名已存在", c)
+		global.Logger.Error("userCreate Error", zap.Any("user", user), zap.Any("error", "用户名已存在"))
+		return
+	}
+	errs := db.GetSFISDB().Transaction(func(tx *gorm.DB) error {
+		// 新增用户
+		err := tx.Create(&user).Error
+		if err != nil {
+			global.Logger.Error("userCreate Error", zap.Any("user", user), zap.Any("error", err))
+			tx.Rollback()
+			return err
+		}
+		// 初始化用户账户
+		userAccount := model.UserAccount{AppID: user.AppID, Money: 0}
+		err = tx.Create(&userAccount).Error
+		if err != nil {
+			global.Logger.Error("userAccountInit Error", zap.Any("user", user), zap.Any("userAccount", userAccount), zap.Any("error", err))
+			tx.Rollback()
+			return err
+		}
+		return nil
+	})
+	if errs != nil {
+		global.Logger.Error("userCreate Error", zap.Any("user", user), zap.Any("error", errs))
+		response.FailWithMessage("创建失败", c)
+	} else {
+		global.Logger.Info("userCreate Success", zap.Any("user", user))
+		// 生全局内存锁
+		lock.MainLock.Lock()
+		lock.UserLockMap[user.AppID] = &sync.Mutex{}
+		lock.MainLock.Unlock()
+		response.OkWithDetailed(user, "创建成功", c)
+	}
+
+}

+ 20 - 20
test/manage/product_test.go

@@ -12,8 +12,8 @@ import (
 // 新增产品测试用例
 func Test_CreateProduct(t *testing.T) {
 	product1 := &model.Product{
-		ID:          2006,
-		Name:        "行业中标数据",
+		ID:          2012,
+		Name:        "招标详细信息",
 		Path:        "/path2002",
 		UnitPrice:   50, //单价精确到分  5毛
 		MinUnit:     1,  //最小单位1,即 5毛/条
@@ -36,7 +36,7 @@ func Test_CreateProduct(t *testing.T) {
 
 // 删除产品 测试用例
 func Test_DeleteProduct(t *testing.T) {
-	productId := "2002"
+	productId := "2012"
 	log.Println("productDelete testing......")
 	data := make(url.Values)
 	data["id"] = []string{productId}
@@ -48,13 +48,13 @@ func Test_DeleteProduct(t *testing.T) {
 func Test_UpdateProduct(t *testing.T) {
 	log.Println("productUpdate testing......")
 	product1 := &model.Product{
-		ID:          2001,
-		Name:        "行业中标数据",
-		Path:        "/pathUpdate1",
+		ID:          2012,
+		Name:        "行业数据",
+		Path:        "/pathUpdate2",
 		UnitPrice:   50, //单价精确到分  5毛
-		MinUnit:     1,  //最小单位1,即 5毛/条
-		ProductType: 0,  //产品类型 0-按次 1-按条
-		TestNum:     200,
+		//MinUnit:     1,  //最小单位1,即 5毛/条
+		//ProductType: 1,  //产品类型 0-按次 1-按条
+		TestNum:     500,
 	}
 	data := make(url.Values)
 	data["id"] = []string{strconv.Itoa(product1.ID)}
@@ -72,18 +72,18 @@ func Test_UpdateProduct(t *testing.T) {
 
 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,
-	//}
+	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["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)}
@@ -91,7 +91,7 @@ func Test_ListProduct(t *testing.T) {
 	//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)
+	bs, _ := sutil.HttpPostForm("http://localhost:8080/manage/product/list", map[string]string{}, data)
 	log.Print(string(bs))
 }
 

+ 1 - 1
test/manage/user_test.go

@@ -43,7 +43,7 @@ func Test_CreateUser(t *testing.T) {
 	//secretKey := sutil.GetComplexRandom(8, 3, 5)
 
 	data := make(url.Values)
-	data["name"] = []string{"河南拓普"}
+	data["name"] = []string{"拓普公司测试2"}
 	data["phone"] = []string{"18238182402"}
 	data["ip_white_list"] = []string{"*"}