From c14c24cad0f8ec362cacc1368c115bb5b4de9744 Mon Sep 17 00:00:00 2001
From: dsmzx <dsmzx@123.com>
Date: 星期五, 14 六月 2024 21:13:33 +0800
Subject: [PATCH] 属性信息(增删改查)操作

---
 controllers/attribute.go       |  186 ++++++++++++++++++++++++++++++++++++++++++++++
 models/attribute.go            |   11 ++
 request/attribute.go           |   19 ++++
 controllers/attribute_value.go |    6 
 router/router.go               |   11 ++
 5 files changed, 230 insertions(+), 3 deletions(-)

diff --git a/controllers/attribute.go b/controllers/attribute.go
new file mode 100644
index 0000000..5f94874
--- /dev/null
+++ b/controllers/attribute.go
@@ -0,0 +1,186 @@
+package controllers
+
+import (
+	"errors"
+	"fmt"
+	"github.com/gin-gonic/gin"
+	"github.com/spf13/cast"
+	"gorm.io/gorm"
+	"wms/extend/code"
+	"wms/extend/util"
+	"wms/models"
+	"wms/pkg/structx"
+	"wms/request"
+)
+
+type AttributeController struct{}
+
+// Add
+// @Tags      灞炴��
+// @Summary   娣诲姞灞炴��
+// @Produce   application/json
+// @Param     object  body  request.AddAttribute true  "灞炴�т俊鎭�"
+// @Param     Authorization	header string true "token"
+// @Success   200 {object} util.Response "鎴愬姛"
+// @Router    /api-wms/v1/attribute/attribute [post]
+func (slf *AttributeController) Add(c *gin.Context) {
+	var reqParams request.AddAttribute
+	var params models.Attribute
+	if err := c.BindJSON(&reqParams); err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�:"+err.Error())
+		return
+	}
+	if err := structx.AssignTo(reqParams, &params); err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鏁版嵁杞崲閿欒")
+		return
+	}
+	if err := slf.CheckAttribute(params); err != nil {
+		util.ResponseFormat(c, code.RequestParamError, err)
+		return
+	}
+	err := models.WithTransaction(func(tx *gorm.DB) error {
+		if err := models.NewAttributeSearch().BeforeCreate(tx); err != nil {
+			return err
+		}
+		if err := models.NewAttributeSearch().Create(&params); err != nil {
+			return err
+		}
+		return nil
+	})
+	if err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鍒涘缓澶辫触")
+		return
+	}
+	util.ResponseFormat(c, code.Success, "鍒涘缓鎴愬姛")
+}
+
+func (slf AttributeController) CheckAttribute(params models.Attribute) error {
+	if params.Name == "" {
+		return errors.New("鍚嶇О涓嶈兘涓虹┖")
+	}
+	if params.DataType == 0 {
+		return errors.New("浜у搧涓嶈兘涓虹┖")
+	}
+	if params.DataType == 3 && len(params.SelectValues) == 0 {
+		return errors.New("涓嬫媺妗嗗睘鎬у�间笉鑳戒负绌�")
+	}
+	return nil
+}
+
+// Update
+// @Tags      灞炴��
+// @Summary   缂栬緫灞炴��
+// @Produce   application/json
+// @Param     object  body request.UpdateAttribute true  "灞炴�т俊鎭�"
+// @Param     id  path string true  "灞炴�d"
+// @Param     Authorization	header string true "token"
+// @Success   200 {object} util.Response "鎴愬姛"
+// @Router    /api-wms/v1/attribute/updateAttribute/{id} [put]
+func (slf AttributeController) Update(c *gin.Context) {
+	id := cast.ToUint(c.Param("id"))
+	if id == 0 {
+		util.ResponseFormat(c, code.RequestParamError, "绌虹殑璁板綍id")
+		return
+	}
+	var (
+		reqParams request.UpdateAttribute
+		params    models.Attribute
+	)
+	if err := c.BindJSON(&reqParams); err != nil {
+		util.ResponseFormat(c, code.RequestParamError, fmt.Sprintf("鍙傛暟瑙f瀽澶辫触: %v"+err.Error()))
+		return
+	}
+	if err := structx.AssignTo(reqParams, &params); err != nil {
+		util.ResponseFormat(c, code.RequestParamError, fmt.Sprintf("鏁版嵁杞崲閿欒: %v", err.Error()))
+		return
+	}
+	params.ID = id
+	if _, err := models.NewAttributeSearch().SetID(params.ID).First(); errors.Is(err, gorm.ErrRecordNotFound) {
+		util.ResponseFormat(c, code.RequestParamError, fmt.Sprintf("璁板綍涓嶅瓨鍦�: %v", err))
+		return
+	}
+	err := models.WithTransaction(func(tx *gorm.DB) error {
+		if err := models.NewAttributeSearch().BeforeUpdate(tx); err != nil {
+			return err
+		}
+		if err := models.NewAttributeSearch().SetID(params.ID).Save(&params); err != nil {
+			return err
+		}
+		return nil
+	})
+	if err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "淇敼澶辫触")
+		return
+	}
+	util.ResponseFormat(c, code.UpdateSuccess, "鏇存柊鎴愬姛")
+}
+
+// Delete
+// @Tags      灞炴��
+// @Summary   鍒犻櫎灞炴��
+// @Produce   application/json
+// @Param     Authorization	header string true "token"
+// @Param     id  path string true  "灞炴�d"
+// @Success   200 {object} util.Response "鎴愬姛"
+// @Router    /api-wms/v1/attribute/delete/{id} [delete]
+func (slf AttributeController) Delete(c *gin.Context) {
+	id := cast.ToUint(c.Param("id"))
+	if id == 0 {
+		util.ResponseFormat(c, code.RequestParamError, "绌虹殑璁板綍id")
+		return
+	}
+	if _, err := models.NewAttributeSearch().SetID(id).First(); errors.Is(err, gorm.ErrRecordNotFound) {
+		util.ResponseFormat(c, code.RequestParamError, fmt.Sprintf("璁板綍涓嶅瓨鍦�: %v", err))
+		return
+	}
+	err := models.NewAttributeSearch().SetID(id).Delete()
+	if err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鍒犻櫎澶辫触")
+		return
+	}
+	util.ResponseFormat(c, code.UpdateSuccess, "鍒犻櫎鎴愬姛")
+}
+
+// List
+// @Tags      灞炴��
+// @Summary   鏌ヨ灞炴�у垪琛�
+// @Produce   application/json
+// @Param     object  query    request.GetAttributeList true  "鏌ヨ鍙傛暟"
+// @Param     Authorization	header string true "token"
+// @Success   200   {object}  util.ResponseList{data=[]models.Attribute}  "鎴愬姛"
+// @Router    /api-wms/v1/attribute/attribute [get]
+func (slf AttributeController) List(c *gin.Context) {
+	var params request.GetAttributeList
+	if err := c.ShouldBindQuery(&params); err != nil {
+		util.ResponseFormat(c, code.RequestParamError, err.Error())
+		return
+	}
+	list, count, err := models.NewAttributeSearch().SetPage(params.Page, params.PageSize).SetOrder("id desc").Find()
+	if err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鏌ヨ澶辫触")
+		return
+	}
+	util.ResponseFormatList(c, code.Success, list, cast.ToInt(count))
+}
+
+// GetAttributeDetail
+// @Tags      灞炴��
+// @Summary   鑾峰彇灞炴�ц鎯�
+// @Produce   application/json
+// @Param     id  path string true  "灞炴�d"
+// @Success   200   {object}  util.ResponseList{data=models.Attribute}  "鎴愬姛"
+// @Router    /api-wms/v1/attribute/attribute/{id} [get]
+//func (slf AttributeController) GetAttributeDetail(c *gin.Context) {
+//	id := cast.ToUint(c.Param("id"))
+//	if id == 0 {
+//		util.ResponseFormat(c, code.RequestParamError, "绌虹殑璁板綍id")
+//		return
+//	}
+//	first, err := models.NewAttributeSearch().SetID(id).First()
+//	if err != nil {
+//		util.ResponseFormat(c, code.RequestParamError, "鑾峰彇灞炴�т俊鎭け璐�")
+//		return
+//	}
+//
+//	util.ResponseFormat(c, code.UpdateSuccess, first)
+//}
diff --git a/controllers/attribute_value.go b/controllers/attribute_value.go
index 7e5cdf7..736b1d5 100644
--- a/controllers/attribute_value.go
+++ b/controllers/attribute_value.go
@@ -18,7 +18,7 @@
 // @Tags      灞炴�у�煎拰瀵硅薄
 // @Summary   娣诲姞灞炴�у�煎拰瀵硅薄
 // @Produce   application/json
-// @Param     object  body  request.AttributeValue true  "灞炴�у�煎拰瀵硅薄淇℃伅"
+// @Param     object  body  request.AddAttributeValue true  "灞炴�у�煎拰瀵硅薄淇℃伅"
 // @Success   200 {object} util.Response "鎴愬姛"
 // @Router    /api-wms/v1/attributeValue/add [post]
 func (slf *AttributeValueController) AddAttributeValue(c *gin.Context) {
@@ -55,7 +55,7 @@
 // @Tags      灞炴�у�煎拰瀵硅薄
 // @Summary   鏇存柊灞炴�у�煎拰瀵硅薄
 // @Produce   application/json
-// @Param     object  body  request.AttributeValue true  "灞炴�у�煎拰瀵硅薄淇℃伅"
+// @Param     object  body  request.UpdateAttributeValue true  "灞炴�у�煎拰瀵硅薄淇℃伅"
 // @Success   200 {object} util.Response "鎴愬姛"
 // @Router    /api-wms/v1/attributeValue/update [post]
 func (slf *AttributeValueController) UpdateAttributeValue(c *gin.Context) {
@@ -95,7 +95,7 @@
 // DeleteAttributeValue
 // @Tags      灞炴�у�煎拰瀵硅薄
 // @Summary   鍒犻櫎灞炴�у�煎拰瀵硅薄
-// @Param		id	path		unit			true	"id"
+// @Param		id	path		string			true	"id"
 // @Success   200 {object} util.Response "鎴愬姛"
 // @Router    /api-wms/v1/attributeValue/delete/{id} [delete]
 func (slf *AttributeValueController) DeleteAttributeValue(c *gin.Context) {
diff --git a/models/attribute.go b/models/attribute.go
index 19fc906..f3b0d13 100644
--- a/models/attribute.go
+++ b/models/attribute.go
@@ -57,6 +57,17 @@
 	return nil
 }
 
+func (slf *Attribute) BeforeUpdate(tx *gorm.DB) (err error) {
+	if len(slf.SelectValues) != 0 {
+		bts, err := json.Marshal(slf.SelectValues)
+		if err != nil {
+			return err
+		}
+		slf.SelectValue = string(bts)
+	}
+	return nil
+}
+
 func (slf *Attribute) AfterFind(tx *gorm.DB) (err error) {
 	if slf.SelectValue != "" {
 		var list []string
diff --git a/request/attribute.go b/request/attribute.go
new file mode 100644
index 0000000..d20032d
--- /dev/null
+++ b/request/attribute.go
@@ -0,0 +1,19 @@
+package request
+
+type GetAttributeList struct {
+	PageInfo
+	Keyword string `json:"keyword"`
+}
+
+type AddAttribute struct {
+	Name         string   `gorm:"type:varchar(100);not null;default:''" json:"name"` //灞炴�у悕绉�
+	DataType     int      `gorm:"type:tinyint;not null;default:0" json:"dataType"`   //鍊肩被鍨嬶紙1瀛楃涓� 2 int 3 涓嬫媺妗� 锛�
+	EntityType   int      `gorm:"type:tinyint;not null;default:0" json:"entityType"` //缁欒皝鐢ㄧ殑 1 鐗╂枡锛堜骇鍝侊級
+	SelectValues []string `json:"selectValues" gorm:"_"`
+	SelectValue  string   `json:"-" gorm:"type:text;"`
+}
+
+type UpdateAttribute struct {
+	ID uint `gorm:"comment:涓婚敭ID;primaryKey;" json:"id"`
+	AddAttribute
+}
diff --git a/router/router.go b/router/router.go
index f51224c..e6e6faf 100644
--- a/router/router.go
+++ b/router/router.go
@@ -66,6 +66,17 @@
 		locationAPI.GET("getLocationTreeList", locationController.GetLocationTreeList)   //鑾峰彇浣嶇疆鍒楄〃鏍�
 	}
 
+	// 灞炴�т俊鎭�
+	attributeController := new(controllers.AttributeController)
+	attributeAPI := r.Group(urlPrefix + "/attribute")
+	{
+		attributeAPI.POST("attribute", attributeController.Add)             // 娣诲姞灞炴��
+		attributeAPI.PUT("updateAttribute/:id", attributeController.Update) // 淇敼灞炴��
+		attributeAPI.DELETE("delete/:id", attributeController.Delete)       // 鍒犻櫎灞炴��
+		attributeAPI.GET("attribute", attributeController.List)             // 鑾峰彇灞炴��
+		//attributeAPI.GET("attribute/:id", attributeController.GetAttributeDetail) // 鑾峰彇灞炴��
+	}
+
 	// 涓氬姟绫诲瀷
 	operationTypeController := new(controllers.OperationTypeController)
 	operationTypeAPI := r.Group(urlPrefix + "/operationType")

--
Gitblit v1.8.0