From 370bdb26ddaa827f89de5125dbe0d6d54bf19fa3 Mon Sep 17 00:00:00 2001 From: yinbentan <yinbentan@live.com> Date: 星期五, 28 六月 2024 16:05:35 +0800 Subject: [PATCH] 调拨、入库、出库按类型配置字典类(1 调拨 2 入库 3 出库) --- constvar/const.go | 15 + request/dict.go | 34 +++ models/mini_dict.go | 276 +++++++++++++++++++++++++++ controllers/dict_controller.go | 205 ++++++++++++++++++++ router/router.go | 11 + 5 files changed, 541 insertions(+), 0 deletions(-) diff --git a/constvar/const.go b/constvar/const.go index b965525..b7391e2 100644 --- a/constvar/const.go +++ b/constvar/const.go @@ -322,3 +322,18 @@ const ( SystemConfigTypeInventoryCutOffPoint SystemConfigType = 1 //搴撳瓨缁撶畻鏃堕棿鐐� ) + +type MiniDictType int + +const ( + TransferType MiniDictType = iota + 1 // 璋冩嫧绫诲瀷 + StorageType // 鍏ュ簱绫诲瀷 + StockoutType // 鍑哄簱绫诲瀷 +) + +func (t MiniDictType) Valid() bool { + if t <= 0 { + return false + } + return true +} diff --git a/controllers/dict_controller.go b/controllers/dict_controller.go new file mode 100644 index 0000000..8c8d8fb --- /dev/null +++ b/controllers/dict_controller.go @@ -0,0 +1,205 @@ +package controllers + +import ( + "github.com/gin-gonic/gin" + "gorm.io/gorm" + "strconv" + "wms/extend/code" + "wms/extend/util" + "wms/models" + "wms/pkg/logx" + "wms/request" +) + +type DictController struct{} + +// AddMiniDict +// +// @Tags 鏁版嵁瀛楀吀 +// @Summary 娣诲姞杩蜂綘瀛楀吀 +// @Produce application/json +// @Param object body request.AddMiniDict true "鍙傛暟" +// @Success 200 {object} util.Response "鎴愬姛" +// @Router /api-wms/v1/dict/add [post] +func (slf DictController) AddMiniDict(c *gin.Context) { + var params request.AddMiniDict + if err := c.BindJSON(¶ms); err != nil { + util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�") + return + } + + if !params.Type.Valid() { + util.ResponseFormat(c, code.RequestParamError, "瀛楀吀绫诲瀷閿欒") + return + } + + if len(params.Name) == 0 { + util.ResponseFormat(c, code.RequestParamError, "鍚嶇О涓虹┖") + return + } + + record := models.MiniDict{ + Type: params.Type, + Name: params.Name, + Value: params.Value, + IsDefault: params.IsDefault, + } + + if err := models.NewMiniDictSearch().Create(&record); err != nil { + logx.Errorf("MiniDict add err: %v", err) + util.ResponseFormat(c, code.RequestParamError, "娣诲姞澶辫触") + return + } + util.ResponseFormat(c, code.Success, "娣诲姞鎴愬姛") +} + +// EditMiniDict +// +// @Tags 鏁版嵁瀛楀吀 +// @Summary 缂栬緫杩蜂綘瀛楀吀 +// @Produce application/json +// @Param object body request.EditMiniDict true "鍙傛暟" +// @Success 200 {object} util.Response "鎴愬姛" +// @Router /api-wms/v1/dict/edit [post] +func (slf DictController) EditMiniDict(c *gin.Context) { + var params request.EditMiniDict + if err := c.BindJSON(¶ms); err != nil { + util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�") + return + } + + if params.ID == 0 { + util.ResponseFormat(c, code.RequestParamError, "鏃犳晥ID") + return + } + + if !params.Type.Valid() { + util.ResponseFormat(c, code.RequestParamError, "瀛楀吀绫诲瀷閿欒") + return + } + + if len(params.Name) == 0 { + util.ResponseFormat(c, code.RequestParamError, "鍚嶇О涓虹┖") + return + } + + record := models.MiniDict{ + Name: params.Name, + Value: params.Value, + IsDefault: params.IsDefault, + } + record.ID = uint(params.ID) + + if err := models.NewMiniDictSearch().SetID(uint(params.ID)).Save(&record); err != nil { + logx.Errorf("MiniDict edit err: %v", err) + util.ResponseFormat(c, code.RequestParamError, "缂栬緫澶辫触") + return + } + util.ResponseFormat(c, code.Success, "缂栬緫鎴愬姛") +} + +// DeleteMiniDict +// +// @Tags 灞炴�у�煎拰瀵硅薄 +// @Summary 鍒犻櫎灞炴�у�煎拰瀵硅薄 +// @Param id path string true "id" +// @Success 200 {object} util.Response "鎴愬姛" +// @Router /api-wms/v1/dict/delete/{id} [delete] +func (slf DictController) DeleteMiniDict(c *gin.Context) { + id, _ := strconv.ParseUint(c.Param("id"), 10, 64) + if id == 0 { + util.ResponseFormat(c, code.RequestParamError, "鏃犳晥ID") + return + } + err := models.NewMiniDictSearch().SetID(uint(id)).Delete() + if err != nil { + logx.Errorf("MiniDict delete err: %v", err) + util.ResponseFormat(c, code.RequestParamError, "鍒犻櫎澶辫触") + return + } + util.ResponseFormat(c, code.Success, "鍒犻櫎鎴愬姛") +} + +// SaveMiniDict +// +// @Tags 鏁版嵁瀛楀吀 +// @Summary 鎵归噺鏇存柊杩蜂綘瀛楀吀(浼氬垹闄ゅ師鏁版嵁) +// @Produce application/json +// @Param object body request.SaveMiniDict true "鍙傛暟" +// @Success 200 {object} util.Response "鎴愬姛" +// @Router /api-wms/v1/dict/save [post] +func (slf DictController) SaveMiniDict(c *gin.Context) { + var params request.SaveMiniDict + if err := c.BindJSON(¶ms); err != nil { + util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�") + return + } + + if !params.Type.Valid() { + util.ResponseFormat(c, code.RequestParamError, "瀛楀吀绫诲瀷閿欒") + return + } + + var records []*models.MiniDict + for _, v := range params.List { + if len(v.Name) == 0 { + util.ResponseFormat(c, code.RequestParamError, "鍚嶇О涓虹┖") + return + } + + records = append(records, &models.MiniDict{ + Type: params.Type, + Name: v.Name, + IsDefault: v.IsDefault, + Value: v.Value, + }) + } + + err := models.WithTransaction(func(tx *gorm.DB) error { + err := models.NewMiniDictSearch().SetOrm(tx).SetType(params.Type).Delete() + if err != nil { + return err + } + + err = models.NewMiniDictSearch().SetOrm(tx).CreateBatch(records) + if err != nil { + return err + } + return nil + }) + if err != nil { + util.ResponseFormat(c, code.RequestParamError, "淇濆瓨澶辫触") + return + } + + util.ResponseFormat(c, code.Success, "娣诲姞鎴愬姛") +} + +// GetMiniDictList +// +// @Tags 鏁版嵁瀛楀吀 +// @Summary 鑾峰彇杩蜂綘瀛楀吀鍒楄〃 +// @Produce application/json +// @Param object query request.GetMiniDictList true "鍙傛暟" +// @Success 200 {object} util.ResponseList{data=[]models.MiniDict} "鎴愬姛" +// @Router /api-wms/v1/dict/getDictList [get] +func (slf DictController) GetMiniDictList(c *gin.Context) { + var params request.GetMiniDictList + if err := c.BindJSON(¶ms); err != nil { + util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�") + return + } + + if !params.Type.Valid() { + util.ResponseFormat(c, code.RequestParamError, "瀛楀吀绫诲瀷閿欒") + return + } + + list, total, err := models.NewMiniDictSearch().SetType(params.Type).Find() + if err != nil { + util.ResponseFormat(c, code.RequestParamError, "鏌ユ壘澶辫触") + return + } + + util.ResponseFormatList(c, code.Success, list, int(total)) +} diff --git a/models/mini_dict.go b/models/mini_dict.go new file mode 100644 index 0000000..13eb8eb --- /dev/null +++ b/models/mini_dict.go @@ -0,0 +1,276 @@ +package models + +import ( + "fmt" + "gorm.io/gorm" + "wms/constvar" + "wms/pkg/mysqlx" +) + +type ( + // MiniDict 杩蜂綘瀛楀吀 + MiniDict struct { + BaseModelInt + Type constvar.MiniDictType `gorm:"uniqueIndex:idx_type_name;type:int(11);not null;comment:瀛楀吀绫诲瀷" json:"type"` // 瀛楀吀绫诲瀷 + Name string `gorm:"uniqueIndex:idx_type_name;;type:varchar(191);not null;comment:鍚嶇О" json:"name"` // 鍚嶇О + Code string `gorm:"type:varchar(64);;comment:缂栫爜" json:"code"` // 缂栫爜 + Value string `gorm:"type:varchar(255);;comment:鍊�" json:"value"` // 鍊� + IsDefault bool `gorm:"type:tinyint(1);comment:鏄惁榛樿" json:"isDefault"` // 鏄惁榛樿 + } + + MiniDictSearch struct { + MiniDict + Order string + PageNum int + PageSize int + Orm *gorm.DB + } +) + +func (slf MiniDict) TableName() string { + return "mini_dict" +} + +func NewMiniDictSearch() *MiniDictSearch { + return &MiniDictSearch{Orm: mysqlx.GetDB()} +} + +func (slf *MiniDictSearch) SetOrm(tx *gorm.DB) *MiniDictSearch { + slf.Orm = tx + return slf +} + +func (slf *MiniDictSearch) SetPage(page, size int) *MiniDictSearch { + slf.PageNum, slf.PageSize = page, size + return slf +} + +func (slf *MiniDictSearch) SetOrder(order string) *MiniDictSearch { + slf.Order = order + return slf +} + +func (slf *MiniDictSearch) SetID(id uint) *MiniDictSearch { + slf.ID = id + return slf +} + +func (slf *MiniDictSearch) SetType(tp constvar.MiniDictType) *MiniDictSearch { + slf.Type = tp + return slf +} + +func (slf *MiniDictSearch) SetName(name string) *MiniDictSearch { + slf.Name = name + return slf +} + +func (slf *MiniDictSearch) SetValue(value string) *MiniDictSearch { + slf.Value = value + return slf +} + +func (slf *MiniDictSearch) build() *gorm.DB { + var db = slf.Orm.Table(slf.TableName()) + + if slf.ID > 0 { + db = db.Where("id = ?", slf.ID) + } + + if slf.Type > 0 { + db = db.Where("type = ?", slf.Type) + } + + if slf.Name != "" { + db = db.Where("name = ?", slf.Name) + } + + if slf.Value != "" { + db = db.Where("value = ?", slf.Value) + } + + db.Where("1 = 1") + if slf.Order != "" { + db = db.Order(slf.Order) + } + + return db +} + +// Create 鍗曟潯鎻掑叆 +func (slf *MiniDictSearch) Create(record *MiniDict) error { + var db = slf.build() + + if err := db.Create(record).Error; err != nil { + return fmt.Errorf("create err: %v, record: %+v", err, record) + } + + return nil +} + +// CreateBatch 鎵归噺鎻掑叆 +func (slf *MiniDictSearch) CreateBatch(records []*MiniDict) error { + var db = slf.build() + + if err := db.Create(&records).Error; err != nil { + return fmt.Errorf("create batch err: %v, records: %+v", err, records) + } + + return nil +} + +func (slf *MiniDictSearch) Save(record *MiniDict) error { + var db = slf.build() + + if err := db.Omit("CreatedAt").Save(record).Error; err != nil { + return fmt.Errorf("save err: %v, record: %+v", err, record) + } + + return nil +} + +func (slf *MiniDictSearch) UpdateByMap(upMap map[string]interface{}) error { + var ( + db = slf.build() + ) + + if err := db.Updates(upMap).Error; err != nil { + return fmt.Errorf("update by map err: %v, upMap: %+v", err, upMap) + } + + return nil +} + +func (slf *MiniDictSearch) UpdateByQuery(query string, args []interface{}, upMap map[string]interface{}) error { + var ( + db = slf.Orm.Table(slf.TableName()).Where(query, args...) + ) + + if err := db.Updates(upMap).Error; err != nil { + return fmt.Errorf("update by query err: %v, query: %s, args: %+v, upMap: %+v", err, query, args, upMap) + } + + return nil +} + +func (slf *MiniDictSearch) Delete() error { + var db = slf.build() + + if err := db.Unscoped().Delete(&MiniDict{}).Error; err != nil { + return err + } + + return nil +} + +func (slf *MiniDictSearch) First() (*MiniDict, error) { + var ( + record = new(MiniDict) + db = slf.build() + ) + + if err := db.First(record).Error; err != nil { + return record, err + } + + return record, nil +} + +func (slf *MiniDictSearch) Find() ([]*MiniDict, int64, error) { + var ( + records = make([]*MiniDict, 0) + total int64 + db = slf.build() + ) + + if err := db.Count(&total).Error; err != nil { + return records, total, fmt.Errorf("find count err: %v", err) + } + if slf.PageNum*slf.PageSize > 0 { + db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize) + } + if err := db.Find(&records).Error; err != nil { + return records, total, fmt.Errorf("find records err: %v", err) + } + + return records, total, nil +} + +func (slf *MiniDictSearch) FindNotTotal() ([]*MiniDict, error) { + var ( + records = make([]*MiniDict, 0) + db = slf.build() + ) + + if slf.PageNum*slf.PageSize > 0 { + db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize) + } + if err := db.Find(&records).Error; err != nil { + return records, fmt.Errorf("find records err: %v", err) + } + + return records, nil +} + +// FindByQuery 鎸囧畾鏉′欢鏌ヨ. +func (slf *MiniDictSearch) FindByQuery(query string, args []interface{}) ([]*MiniDict, int64, error) { + var ( + records = make([]*MiniDict, 0) + total int64 + db = slf.Orm.Table(slf.TableName()).Where(query, args...) + ) + + if err := db.Count(&total).Error; err != nil { + return records, total, fmt.Errorf("find by query count err: %v", err) + } + if slf.PageNum*slf.PageSize > 0 { + db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize) + } + if err := db.Find(&records).Error; err != nil { + return records, total, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args) + } + + return records, total, nil +} + +// FindByQueryNotTotal 鎸囧畾鏉′欢鏌ヨ&涓嶆煡璇㈡�绘潯鏁�. +func (slf *MiniDictSearch) FindByQueryNotTotal(query string, args []interface{}) ([]*MiniDict, error) { + var ( + records = make([]*MiniDict, 0) + db = slf.Orm.Table(slf.TableName()).Where(query, args...) + ) + + if slf.PageNum*slf.PageSize > 0 { + db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize) + } + if err := db.Find(&records).Error; err != nil { + return records, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args) + } + + return records, nil +} + +// InitDefaultData 鍒濆鍖栨暟鎹� +func (slf *MiniDictSearch) InitDefaultData() error { + var ( + db = slf.Orm.Table(slf.TableName()) + total int64 = 0 + ) + if err := db.Count(&total).Error; err != nil { + return err + } + if total != 0 { + return nil + } + dict := make([]*MiniDict, 0) + dict = append(dict, &MiniDict{Type: constvar.TransferType, Name: "鍐呴儴璋冩嫧", Value: "1"}) + dict = append(dict, &MiniDict{Type: constvar.TransferType, Name: "澶栭儴璋冩嫧", Value: "2"}) + dict = append(dict, &MiniDict{Type: constvar.StorageType, Name: "閲囪喘", Value: "1"}) + dict = append(dict, &MiniDict{Type: constvar.StorageType, Name: "鍏朵粬", Value: "99"}) + dict = append(dict, &MiniDict{Type: constvar.StockoutType, Name: "灞曞巺", Value: "1"}) + dict = append(dict, &MiniDict{Type: constvar.StockoutType, Name: "缁忛攢鍟�", Value: "2"}) + dict = append(dict, &MiniDict{Type: constvar.StockoutType, Name: "閫�搴�", Value: "9"}) + dict = append(dict, &MiniDict{Type: constvar.StockoutType, Name: "鍏朵粬", Value: "99"}) + err := slf.CreateBatch(dict) + return err +} diff --git a/request/dict.go b/request/dict.go new file mode 100644 index 0000000..f7be713 --- /dev/null +++ b/request/dict.go @@ -0,0 +1,34 @@ +package request + +import "wms/constvar" + +type MiniDict struct { + Name string `json:"name"` // 鍚嶇О + Value string `json:"value"` // 鍊� + IsDefault bool `json:"isDefault"` // 鏄惁榛樿 +} + +type AddMiniDict struct { + MiniDict + Type constvar.MiniDictType `json:"type"` // 瀛楀吀绫诲瀷 +} + +type EditMiniDict struct { + MiniDict + ID int `json:"id"` // 瀛楀吀绫诲瀷 + Type constvar.MiniDictType `json:"type"` // 瀛楀吀绫诲瀷 +} + +type SaveMiniDict struct { + Type constvar.MiniDictType `json:"type"` // 瀛楀吀绫诲瀷 + List []*MiniDict `json:"list"` +} + +type GetMiniDict struct { + Type constvar.MiniDictType `json:"type"` // 瀛楀吀绫诲瀷 + Name string `json:"name"` // 瀛楀吀鍚嶇О +} + +type GetMiniDictList struct { + Type constvar.MiniDictType `json:"type"` // 瀛楀吀绫诲瀷 +} diff --git a/router/router.go b/router/router.go index d336bb3..20a0f55 100644 --- a/router/router.go +++ b/router/router.go @@ -214,6 +214,17 @@ attributeValueAPI.GET("primary/:id", attributeValueController.PrimaryAttributeValue) //鍒犻櫎 } + // 璋冩嫧銆佸嚭搴撳叆搴撳瓧鍏搁厤缃� + dictController := new(controllers.DictController) + dictApi := r.Group(urlPrefix + "/dict") + { + dictApi.POST("add", dictController.AddMiniDict) //淇濆瓨绯荤粺璁剧疆 + dictApi.POST("edit", dictController.EditMiniDict) //淇濆瓨绯荤粺璁剧疆 + dictApi.DELETE("delete/:id", dictController.DeleteMiniDict) //淇濆瓨绯荤粺璁剧疆 + dictApi.POST("save", dictController.SaveMiniDict) //淇濆瓨绯荤粺璁剧疆 + dictApi.POST("getDictList", dictController.GetMiniDictList) //鑾峰彇绯荤粺閰嶇疆 + } + //绯荤粺閰嶇疆 sysCfgCtl := new(controllers.SystemConfigController) sysCfgApi := r.Group(urlPrefix + "/systemConfig") -- Gitblit v1.8.0