From 4738292c4762419696bee8962db7b7b7a0057c57 Mon Sep 17 00:00:00 2001 From: jiangshuai <291802688@qq.com> Date: 星期二, 26 九月 2023 19:30:12 +0800 Subject: [PATCH] 1.二期一部分代码 --- controllers/product_controller.go | 21 controllers/operation.go | 12 models/location_product_amount.go | 176 +++++++++++++ models/operation.go | 9 controllers/location_product.go | 160 ++++++++++++ request/operation.go | 37 +- router/router.go | 9 constvar/const.go | 2 models/location_product.go | 174 +++++++++++++ request/location_product.go | 16 + request/location_product_amount.go | 15 + request/product_request.go | 21 controllers/location_product_amount.go | 102 +++++++ 13 files changed, 704 insertions(+), 50 deletions(-) diff --git a/constvar/const.go b/constvar/const.go index 42221db..f92ca9a 100644 --- a/constvar/const.go +++ b/constvar/const.go @@ -6,6 +6,8 @@ BaseOperationTypeIncoming BaseOperationType = iota + 1 //鏀惰揣 BaseOperationTypeOutgoing //浜よ揣 BaseOperationTypeInternal //鍐呴儴璋冩嫧 + BaseOperationTypeDisuse //鎶ュ簾 + BaseOperationTypeAdjust //搴撳瓨鐩樼偣 ) func (slf BaseOperationType) IsValid() bool { diff --git a/controllers/location_product.go b/controllers/location_product.go new file mode 100644 index 0000000..07d012b --- /dev/null +++ b/controllers/location_product.go @@ -0,0 +1,160 @@ +package controllers + +import ( + "github.com/gin-gonic/gin" + "strconv" + "wms/extend/code" + "wms/extend/util" + "wms/models" + "wms/pkg/logx" + "wms/pkg/structx" + "wms/request" +) + +type LocationProductController struct { +} + +// Add +// @Tags 涓婃灦瑙勫垯 +// @Summary 娣诲姞涓婃灦瑙勫垯 +// @Produce application/json +// @Param object body request.AddLocationProduct true "鏂板涓婃灦瑙勫垯" +// @Success 200 {object} util.Response "鎴愬姛" +// @Router /api-wms/v1/locationProduct/add [post] +func (slf LocationProductController) Add(c *gin.Context) { + var reqParams request.AddLocationProduct + var params models.LocationProduct + if err := c.BindJSON(&reqParams); err != nil { + util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�") + return + } + if err := structx.AssignTo(reqParams, ¶ms); err != nil { + util.ResponseFormat(c, code.RequestParamError, "鏁版嵁杞崲閿欒"+err.Error()) + return + } + if params.AreaId == 0 { + util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨鍖哄煙") + return + } + if params.LocationId == 0 { + util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浣嶇疆") + return + } + if params.ProductId == "" { + util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浜у搧") + return + } + if params.ProductCategoryID == 0 { + util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浜у搧绫诲埆") + return + } + if err := models.NewLocationProductSearch().Create(¶ms); err != nil { + logx.Errorf("Operation create err: %v", err) + util.ResponseFormat(c, code.SaveFail, "娣诲姞澶辫触锛�"+err.Error()) + return + } + util.ResponseFormat(c, code.Success, "娣诲姞鎴愬姛") +} + +// List +// @Tags 涓婃灦瑙勫垯 +// @Summary 涓婃灦瑙勫垯鍒楄〃 +// @Produce application/json +// @Param object body request.PageInfo true "鏌ヨ鍙傛暟" +// @Success 200 {object} util.Response "鎴愬姛" +// @Router /api-wms/v1/locationProduct/list [post] +func (slf LocationProductController) List(c *gin.Context) { + var params request.PageInfo + if err := c.BindJSON(¶ms); err != nil { + util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�:"+err.Error()) + return + } + if params.Check() { + util.ResponseFormat(c, code.RequestParamError, "鍙傛暟寮傚父") + return + } + + search := models.NewLocationProductSearch() + search.SetPage(params.Page, params.PageSize) + list, total, err := search.SetPreload(true).SetOrder("created_at desc").FindByPage() + if err != nil { + util.ResponseFormat(c, code.RequestError, "鏌ユ壘澶辫触:"+err.Error()) + return + } + + util.ResponseFormatListWithPage(c, code.Success, list, int(total), params.Page, params.PageSize) +} + +// Update +// @Tags 涓婃灦瑙勫垯 +// @Summary 淇敼涓婃灦瑙勫垯 +// @Produce application/json +// @Param object body request.UpdateLocationProduct true "鍏ュ簱淇℃伅" +// @Success 200 {object} util.Response "鎴愬姛" +// @Router /api-wms/v1/locationProduct/update [post] +func (slf LocationProductController) Update(c *gin.Context) { + var reqParams request.UpdateLocationProduct + var params models.LocationProduct + if err := c.BindJSON(&reqParams); err != nil { + util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇細"+err.Error()) + return + } + if reqParams.Id == 0 { + util.ResponseFormat(c, code.RequestParamError, "id涓�0") + return + } + if err := structx.AssignTo(reqParams, ¶ms); err != nil { + util.ResponseFormat(c, code.RequestParamError, "鏁版嵁杞崲閿欒"+err.Error()) + return + } + if params.AreaId == 0 { + util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨鍖哄煙") + return + } + if params.LocationId == 0 { + util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浣嶇疆") + return + } + if params.ProductId == "" { + util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浜у搧") + return + } + if params.ProductCategoryID == 0 { + util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浜у搧绫诲埆") + return + } + if err := models.NewLocationProductSearch().SetID(params.Id).Update(¶ms); err != nil { + logx.Errorf("LocationProduct update err: %v", err) + util.ResponseFormat(c, code.SaveFail, "淇敼澶辫触锛�"+err.Error()) + return + } + + util.ResponseFormat(c, code.Success, "淇敼鎴愬姛") +} + +// Delete +// +// @Tags 涓婃灦瑙勫垯 +// @Summary 鍒犻櫎涓婃灦瑙勫垯 +// @Produce application/json +// @Param id path int true "id" +// @Success 200 {object} util.Response "鎴愬姛" +// @Router /api-wms/v1/locationProduct/delete/{id} [delete] +func (slf LocationProductController) Delete(c *gin.Context) { + id, err := strconv.Atoi(c.Param("id")) + if err != nil { + util.ResponseFormat(c, code.RequestParamError, "閿欒鐨刬d鍊�") + return + } + if id == 0 { + util.ResponseFormat(c, code.RequestParamError, "id涓�0") + return + } + //TODO:姝ゅ鍙兘闇�瑕佸鍔犻檺鍒讹紝濡傛灉璇ヤ笂鏋惰鍒欏鏋滃凡缁忎骇鐢熶簡搴撳瓨鏁伴噺锛屽垹闄や細閫犳垚搴撳瓨鏌ヤ笉鍒扮殑褰卞搷 + if err := models.NewLocationProductSearch().SetID(id).Delete(); err != nil { + logx.Errorf("LocationProduct delete err: %v", err) + util.ResponseFormat(c, code.SaveFail, "鍒犻櫎澶辫触锛�"+err.Error()) + return + } + util.ResponseFormat(c, code.Success, "鍒犻櫎鎴愬姛") +} diff --git a/controllers/location_product_amount.go b/controllers/location_product_amount.go new file mode 100644 index 0000000..701a205 --- /dev/null +++ b/controllers/location_product_amount.go @@ -0,0 +1,102 @@ +package controllers + +import ( + "fmt" + "github.com/gin-gonic/gin" + "wms/constvar" + "wms/extend/code" + "wms/extend/util" + "wms/models" + "wms/request" +) + +type LocationProductAmountController struct { +} + +// List +// @Tags 搴撳瓨鐩樼偣 +// @Summary 搴撳瓨鐩樼偣鍒楄〃 +// @Produce application/json +// @Param object body request.PageInfo true "鏌ヨ鍙傛暟" +// @Success 200 {object} util.Response "鎴愬姛" +// @Router /api-wms/v1/locationProduct/list [post] +func (slf LocationProductAmountController) List(c *gin.Context) { + var params request.PageInfo + if err := c.BindJSON(¶ms); err != nil { + util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�:"+err.Error()) + return + } + if params.Check() { + util.ResponseFormat(c, code.RequestParamError, "鍙傛暟寮傚父") + return + } + + search := models.NewLocationProductAmountSearch() + search.SetPage(params.Page, params.PageSize) + + search.Orm = search.Orm.Model(&models.LocationProductAmountWithOperation{}).Table("wms_location_product_amount").Select("wms_location_product_amount.*,wms_operation.amount as adjust_amount").InnerJoins("inner join wms_location_product on wms_location_product.id=wms_location_product_amount.location_product_id").InnerJoins("inner join wms_operation_details on wms_operation_details.product_id=wms_location_product.product_id").InnerJoins("inner join wms_operation on wms_operation.id=wms_operation_details.operation_id").Where("wms_operation.base_operation_type=?", constvar.BaseOperationTypeAdjust) + + var ( + records = make([]*models.ResponseDisuseList, 0) + total int64 + ) + + if err := search.Orm.Count(&total).Error; err != nil { + util.ResponseFormat(c, code.RequestError, fmt.Errorf("find count err: %v", err)) + return + } + search.Orm = search.Orm.Preload("LocationProduct").Preload("LocationProduct.Location").Preload("LocationProduct.Product") + if params.Page*params.PageSize > 0 { + search.Orm = search.Orm.Offset((params.Page - 1) * params.PageSize).Limit(params.PageSize) + } + if err := search.Orm.Find(&records).Error; err != nil { + util.ResponseFormat(c, code.RequestError, fmt.Errorf("find count err: %v", err)) + return + } + + util.ResponseFormatListWithPage(c, code.Success, records, int(total), params.Page, params.PageSize) +} + +// Add +// @Tags 搴撳瓨鐩樼偣 +// @Summary 娣诲姞搴撳瓨鐩樼偣淇℃伅 +// @Produce application/json +// @Param object body request.AddLocationProductAmount true "鍏ュ簱/鍑哄簱淇℃伅" +// @Success 200 {object} util.Response "鎴愬姛" +// @Router /api-wms/v1/operation/operation [post] +//func (slf LocationProductAmountController) Add(c *gin.Context) { +// var reqParams request.AddLocationProductAmount +// if err := c.BindJSON(&reqParams); err != nil { +// util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�") +// return +// } +// if reqParams.LocationProductAmountId==0 { +// util.ResponseFormat(c, code.RequestParamError, "鍙傛暟寮傚父锛宭ocationProductAmountId涓�0") +// return +// } +// locAmount:=models.LocationProductAmount{ +// LocationProductId: reqParams.LocationProductAmountId +// } +// operationType, err := models.NewOperationTypeSearch().SetID(uint(params.OperationTypeId)).First() +// if err != nil { +// util.ResponseFormat(c, code.RequestParamError, err.Error()) +// return +// } +// ////// +// if location, err := models.NewLocationSearch().SetType(int(constvar.LocationTypeCustomer)).First(); err != nil { +// return err +// } else { +// params.ToLocationID = location.Id +// } +// +// +// params.Status = constvar.OperationStatus_Ready +// params.Number = strconv.FormatInt(time.Now().Unix(), 10) +// params.BaseOperationType = operationType.BaseOperationType +// if err := models.NewOperationSearch().Create(¶ms); err != nil { +// logx.Errorf("Operation create err: %v", err) +// util.ResponseFormat(c, code.SaveFail, "娣诲姞澶辫触锛�"+err.Error()) +// return +// } +// util.ResponseFormat(c, code.Success, "娣诲姞鎴愬姛") +//} diff --git a/controllers/operation.go b/controllers/operation.go index 872fb4c..9a87ab0 100644 --- a/controllers/operation.go +++ b/controllers/operation.go @@ -46,9 +46,15 @@ util.ResponseFormat(c, code.RequestParamError, err.Error()) return } + operationType, err := models.NewOperationTypeSearch().SetID(uint(params.OperationTypeId)).First() + if err != nil { + util.ResponseFormat(c, code.RequestParamError, err.Error()) + return + } params.Status = constvar.OperationStatus_Ready params.Number = strconv.FormatInt(time.Now().Unix(), 10) + params.BaseOperationType = operationType.BaseOperationType if err := models.NewOperationSearch().Create(¶ms); err != nil { logx.Errorf("Operation create err: %v", err) util.ResponseFormat(c, code.SaveFail, "娣诲姞澶辫触锛�"+err.Error()) @@ -323,8 +329,14 @@ if err := tx.Save(listProdt[k]).Error; err != nil { return err } + //TODO:鍑哄叆搴撶殑finish鍜屾姤搴熺殑finish閮借澧炲姞瀵筶ocation_product_amount琛ㄦ暟閲忕殑鏇存柊,鍥犱负姝よ〃鏈塒roductCategory瀛楁锛屾墍浠peration_details琛ㄤ腑瑕佸鍔燩roductCategoryId瀛楁 + //var locAmount models.LocationProductAmount + //if err := models.NewLocationProductAmountSearch().Orm.Table("wms_location_produt_amount").Joins("inner join wms_location_product on wms_location_produt.id=wms_location_produt_amount.location_product_id").Where("wms_location_produt.product_id=? and wms_location_produt.location_id=?",operation.ToLocationID,v.ID).First(&locAmount).Error;err!=nil { + // return err + //} } } + } if operationType.BaseOperationType == constvar.BaseOperationTypeOutgoing { for k, v := range listProdt { diff --git a/controllers/product_controller.go b/controllers/product_controller.go index c5d99a2..c1f3d00 100644 --- a/controllers/product_controller.go +++ b/controllers/product_controller.go @@ -360,19 +360,18 @@ } detail := &models.OperationDetails{ ProductId: params.ProductId, - //ProductName: params.ProductName, - Amount: params.Amount, - //Unit: params.Unit, + Amount: params.Amount, } operation := models.Operation{ - Number: strconv.FormatInt(time.Now().Unix(), 10), - SourceNumber: params.SourceNumber, - OperationTypeId: 0, - Status: constvar.OperationStatus_Ready, - FromLocationID: params.FromLocationId, - ToLocationID: params.ToLocationId, - OperationDate: time.Now().Format("2006-01-02 15:04:05"), - Details: []*models.OperationDetails{detail}, + Number: strconv.FormatInt(time.Now().Unix(), 10), + SourceNumber: params.SourceNumber, + OperationTypeId: 0, + Status: constvar.OperationStatus_Ready, + FromLocationID: params.FromLocationId, + ToLocationID: params.ToLocationId, + OperationDate: time.Now().Format("2006-01-02 15:04:05"), + Details: []*models.OperationDetails{detail}, + BaseOperationType: constvar.BaseOperationTypeDisuse, } if err := models.NewOperationSearch().Create(&operation); err != nil { logx.Errorf("Operation create err: %v", err) diff --git a/models/location_product.go b/models/location_product.go new file mode 100644 index 0000000..b3edb61 --- /dev/null +++ b/models/location_product.go @@ -0,0 +1,174 @@ +package models + +import ( + "fmt" + "gorm.io/gorm" + "wms/pkg/mysqlx" +) + +type ( + LocationProduct struct { + WmsModel + Id int `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"` + LocationId int `json:"locationId" gorm:"type:int;not null;comment:浣嶇疆id"` //浣嶇疆id + Location Location `json:"location" gorm:"foreignKey:LocationId;references:id"` + AreaId int `json:"areaId" grom:"type:int;not null;comment:鍖哄煙id"` //鍖哄煙id + Area Location `json:"area" gorm:"foreignKey:AreaId;references:id"` + ProductCategoryID int `json:"productCategoryId" gorm:"type:int;not null;comment:浜у搧绉嶇被id"` //浜у搧绉嶇被id + ProductCategory ProductCategory `json:"productCategory"` + ProductId string `json:"productId" gorm:"type:varchar(191);not null;comment:浜у搧id"` //浜у搧id + Product Material `json:"product" gorm:"foreignKey:ProductId;references:ID"` + } + + LocationProductSearch struct { + LocationProduct + Order string + PageNum int + PageSize int + Keyword string + Orm *gorm.DB + Preload bool + } +) + +func (slf *LocationProduct) TableName() string { + return "wms_location_product" +} + +func NewLocationProductSearch() *LocationProductSearch { + return &LocationProductSearch{Orm: mysqlx.GetDB()} +} + +func (slf *LocationProductSearch) SetOrm(tx *gorm.DB) *LocationProductSearch { + slf.Orm = tx + return slf +} + +func (slf *LocationProductSearch) SetPage(page, size int) *LocationProductSearch { + slf.PageNum, slf.PageSize = page, size + return slf +} + +func (slf *LocationProductSearch) SetOrder(order string) *LocationProductSearch { + slf.Order = order + return slf +} + +func (slf *LocationProductSearch) SetID(id int) *LocationProductSearch { + slf.Id = id + return slf +} + +func (slf *LocationProductSearch) SetKeyword(keyword string) *LocationProductSearch { + slf.Keyword = keyword + return slf +} + +func (slf *LocationProductSearch) SetPreload(preload bool) *LocationProductSearch { + slf.Preload = preload + return slf +} + +func (slf *LocationProductSearch) build() *gorm.DB { + var db = slf.Orm.Model(&LocationProduct{}) + + if slf.Id != 0 { + db = db.Where("id = ?", slf.Id) + } + if slf.Order != "" { + db = db.Order(slf.Order) + } + + if slf.Keyword != "" { + db = db.Where("product_name like ?", fmt.Sprintf("%%%v%%", slf.Keyword)) + } + + if slf.Preload { + db = db.Model(&LocationProduct{}).Preload("Location").Preload("Area").Preload("ProductCategory").Preload("Product") + } + + return db +} + +// Create 鍗曟潯鎻掑叆 +func (slf *LocationProductSearch) Create(record *LocationProduct) error { + var db = slf.build() + + if err := db.Create(record).Error; err != nil { + return err + } + + return nil +} + +// CreateBatch 鎵归噺鎻掑叆 +func (slf *LocationProductSearch) CreateBatch(records []*LocationProduct) 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 *LocationProductSearch) Update(record *LocationProduct) error { + var db = slf.build() + + if err := db.Omit("CreatedAt").Updates(record).Error; err != nil { + return fmt.Errorf("save err: %v, record: %+v", err, record) + } + + return nil +} + +func (slf *LocationProductSearch) Delete() error { + var db = slf.build() + return db.Unscoped().Delete(&LocationProduct{}).Error +} + +func (slf *LocationProductSearch) First() (*LocationProduct, error) { + var ( + record = new(LocationProduct) + db = slf.build() + ) + + if err := db.First(record).Error; err != nil { + return record, err + } + + return record, nil +} + +func (slf *LocationProductSearch) FindByPage() ([]*LocationProduct, int64, error) { + var ( + records = make([]*LocationProduct, 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 *LocationProductSearch) Find() ([]*LocationProduct, error) { + var ( + records = make([]*LocationProduct, 0) + db = slf.build() + ) + + if err := db.Find(&records).Error; err != nil { + return records, fmt.Errorf("find records err: %v", err) + } + + return records, nil +} diff --git a/models/location_product_amount.go b/models/location_product_amount.go new file mode 100644 index 0000000..e8e0e7e --- /dev/null +++ b/models/location_product_amount.go @@ -0,0 +1,176 @@ +package models + +import ( + "fmt" + "github.com/shopspring/decimal" + "gorm.io/gorm" + "wms/pkg/mysqlx" +) + +type ( + LocationProductAmount struct { + WmsModel + Id int `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"` + LocationProductId int `json:"locationProductId" gorm:"type:int;not null;comment:涓婃灦瑙勫垯id"` //涓婃灦瑙勫垯id + LocationProduct LocationProduct `json:"locationProduct" gorm:"foreignKey:LocationProductId;references:Id"` + Amount decimal.Decimal `json:"amount" gorm:"type:decimal(20,2);not null;comment:搴撳瓨鏁伴噺"` //搴撳瓨鏁伴噺 + } + + LocationProductAmountSearch struct { + LocationProductAmount + Order string + PageNum int + PageSize int + Keyword string + Orm *gorm.DB + Preload bool + } + + LocationProductAmountWithOperation struct { + LocationProductAmount LocationProductAmount `json:"locationProductAmount"` + AdjustAmount decimal.Decimal `json:"adjustAmount" gorm:"column:adjust_amount"` + DifferenceAmount decimal.Decimal `json:"difference_amount"` + } +) + +func (slf *LocationProductAmount) TableName() string { + return "wms_location_product_amount" +} + +func NewLocationProductAmountSearch() *LocationProductAmountSearch { + return &LocationProductAmountSearch{Orm: mysqlx.GetDB()} +} + +func (slf *LocationProductAmountSearch) SetOrm(tx *gorm.DB) *LocationProductAmountSearch { + slf.Orm = tx + return slf +} + +func (slf *LocationProductAmountSearch) SetPage(page, size int) *LocationProductAmountSearch { + slf.PageNum, slf.PageSize = page, size + return slf +} + +func (slf *LocationProductAmountSearch) SetOrder(order string) *LocationProductAmountSearch { + slf.Order = order + return slf +} + +func (slf *LocationProductAmountSearch) SetID(id int) *LocationProductAmountSearch { + slf.Id = id + return slf +} + +func (slf *LocationProductAmountSearch) SetKeyword(keyword string) *LocationProductAmountSearch { + slf.Keyword = keyword + return slf +} + +func (slf *LocationProductAmountSearch) SetPreload(preload bool) *LocationProductAmountSearch { + slf.Preload = preload + return slf +} + +func (slf *LocationProductAmountSearch) build() *gorm.DB { + var db = slf.Orm.Model(&LocationProductAmount{}) + + if slf.Id != 0 { + db = db.Where("id = ?", slf.Id) + } + if slf.Order != "" { + db = db.Order(slf.Order) + } + + if slf.Keyword != "" { + db = db.Where("product_name like ?", fmt.Sprintf("%%%v%%", slf.Keyword)) + } + + if slf.Preload { + db = db.Model(&LocationProductAmount{}).Preload("LocationProduct").Preload("LocationProduct.Location").Preload("LocationProduct.Product") + } + + return db +} + +// Create 鍗曟潯鎻掑叆 +func (slf *LocationProductAmountSearch) Create(record *LocationProductAmount) error { + var db = slf.build() + + if err := db.Create(record).Error; err != nil { + return err + } + + return nil +} + +// CreateBatch 鎵归噺鎻掑叆 +func (slf *LocationProductAmountSearch) CreateBatch(records []*LocationProductAmount) 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 *LocationProductAmountSearch) Update(record *LocationProductAmount) error { + var db = slf.build() + + if err := db.Omit("CreatedAt").Updates(record).Error; err != nil { + return fmt.Errorf("save err: %v, record: %+v", err, record) + } + + return nil +} + +func (slf *LocationProductAmountSearch) Delete() error { + var db = slf.build() + return db.Unscoped().Delete(&LocationProductAmount{}).Error +} + +func (slf *LocationProductAmountSearch) First() (*LocationProductAmount, error) { + var ( + record = new(LocationProductAmount) + db = slf.build() + ) + + if err := db.First(record).Error; err != nil { + return record, err + } + + return record, nil +} + +func (slf *LocationProductAmountSearch) FindByPage() ([]*LocationProductAmount, int64, error) { + var ( + records = make([]*LocationProductAmount, 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 *LocationProductAmountSearch) Find() ([]*LocationProductAmount, error) { + var ( + records = make([]*LocationProductAmount, 0) + db = slf.build() + ) + + if err := db.Find(&records).Error; err != nil { + return records, fmt.Errorf("find records err: %v", err) + } + + return records, nil +} diff --git a/models/operation.go b/models/operation.go index 7f17d4a..5f20228 100644 --- a/models/operation.go +++ b/models/operation.go @@ -28,13 +28,8 @@ CompanyName string `json:"companyName" gorm:"type:varchar(127);comment:鍏徃鍚嶇О-瀹㈡埛"` Comment string `json:"comment" gorm:"type:text;comment:澶囨敞"` - Details []*OperationDetails `json:"details" gorm:"foreignKey:OperationID;references:Id"` - - //Weight decimal.Decimal `json:"weight" gorm:"type:decimal(20,2);comment:閲嶉噺(kg)"` - //TransferWeight decimal.Decimal `json:"transferWeight" gorm:"type:decimal(20,2);comment:鐗╂祦閲嶉噺(kg)"` - //CarrierID int `json:"carrierID" gorm:"type:int;comment:鎵胯繍鍟咺D"` - //CarrierName string `json:"carrierName" gorm:"type:varchar(63);comment:鎵胯繍鍟嗗悕绉�"` - //Tracking string `json:"tracking" gorm:"type:varchar(127);comment:杩借釜鍙傝��"` + Details []*OperationDetails `json:"details" gorm:"foreignKey:OperationID;references:Id"` + BaseOperationType constvar.BaseOperationType `json:"baseOperationType" gorm:"type:tinyint;not null;comment:鍩虹浣滀笟绫诲瀷"` //鍩虹浣滀笟绫诲瀷 } OperationSearch struct { diff --git a/request/location_product.go b/request/location_product.go new file mode 100644 index 0000000..feccc4f --- /dev/null +++ b/request/location_product.go @@ -0,0 +1,16 @@ +package request + +type AddLocationProduct struct { + LocationId int `json:"locationId"` //浣嶇疆id + ProductId string `json:"productId"` //浜у搧id + ProductCategoryId int `json:"productCategoryId"` //浜у搧绉嶇被id + AreaId int `json:"areaId"` //鍖哄煙id +} + +type UpdateLocationProduct struct { + Id int `json:"id"` + LocationId int `json:"locationId"` //浣嶇疆id + ProductId string `json:"productId"` //浜у搧id + ProductCategoryId int `json:"productCategoryId"` //浜у搧绉嶇被id + AreaId int `json:"areaId"` //鍖哄煙id +} diff --git a/request/location_product_amount.go b/request/location_product_amount.go new file mode 100644 index 0000000..bc7fa2d --- /dev/null +++ b/request/location_product_amount.go @@ -0,0 +1,15 @@ +package request + +import "github.com/shopspring/decimal" + +type AddLocationProductAmount struct { + LocationProductAmountId int `json:"locationProductAmountId"` //搴撳瓨鐩樼偣id + AdjustAmount decimal.Decimal `json:"adjustAmount" ` //宸�� + DifferenceAmount decimal.Decimal `json:"difference_amount"` //璁℃暟鏁伴噺 +} + +type UpdateLocationProductAmount struct { + LocationProductAmountId int `json:"locationProductAmountId"` //搴撳瓨鐩樼偣id + AdjustAmount decimal.Decimal `json:"adjustAmount" ` //宸�� + DifferenceAmount decimal.Decimal `json:"difference_amount"` //璁℃暟鏁伴噺 +} diff --git a/request/operation.go b/request/operation.go index 5f17078..cf73ffa 100644 --- a/request/operation.go +++ b/request/operation.go @@ -46,27 +46,22 @@ } type UpdateOperation struct { - ID int `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"` - Number string `json:"number" gorm:"column:number;type:varchar(255)"` //鍗曞彿 - SourceNumber string `json:"sourceNumber" gorm:"type:varchar(255)"` //婧愬崟鍙� - OperationTypeId int `json:"operationTypeId" gorm:"type:int;not null;comment:浣滀笟绫诲瀷id"` //浣滀笟绫诲瀷id - OperationTypeName string `json:"operationTypeName" gorm:"type:varchar(127);comment:浣滀笟绫诲瀷鍚嶇О"` //浣滀笟绫诲瀷鍚嶇О - Status constvar.OperationStatus `json:"status" gorm:"type:int(11);not null;comment:鐘舵��"` //鐘舵�� - FromLocationId int `json:"fromLocationId" gorm:"type:int;not null;comment:婧愪綅缃甶d"` //婧愪綅缃甶d - ToLocationId int `json:"toLocationId" gorm:"type:int;not null;comment:鐩爣浣嶇疆id"` //鐩爣浣嶇疆id - OperationDate string `json:"operationDate" gorm:"type:varchar(31);comment:瀹夋帓鏃ユ湡"` //瀹夋帓鏃ユ湡 - Details []*OperationDetails `json:"details"` - ContacterID int `json:"contacterID" gorm:"type:int;comment:鑱旂郴浜篒D"` //鑱旂郴浜篒D-闈炲繀濉� - ContacterName string `json:"contacterName" gorm:"type:varchar(63);comment:鑱旂郴浜哄鍚�"` //鑱旂郴浜哄鍚�-闈炲繀濉� - CompanyID int `json:"companyID" gorm:"type:int;comment:鍏徃ID"` //鍏徃ID-瀹㈡埛 - CompanyName string `json:"companyName" gorm:"type:varchar(127);comment:鍏徃鍚嶇О"` //鍏徃鍚嶇О-瀹㈡埛鍚嶇О - Comment string `json:"comment" gorm:"type:text;comment:澶囨敞"` //澶囨敞 - - //CarrierID int `json:"carrierID" gorm:"type:int;comment:鎵胯繍鍟咺D"` //鎵胯繍鍟咺D-闈炲繀濉� - //CarrierName string `json:"carrierName" gorm:"type:varchar(63);comment:鎵胯繍鍟嗗悕绉�"` //鎵胯繍鍟嗗悕绉�-闈炲繀濉� - //Tracking string `json:"tracking" gorm:"type:varchar(127);comment:杩借釜鍙傝��"` //杩借釜鍙傝��-闈炲繀濉� - //Weight decimal.Decimal `json:"weight" gorm:"type:decimal(20,2);comment:閲嶉噺(kg)"` //閲嶉噺(kg)-闈炲繀濉� - //TransferWeight decimal.Decimal `json:"transferWeight" gorm:"type:decimal(20,2);comment:鐗╂祦閲嶉噺(kg)"` //鐗╂祦閲嶉噺(kg)-闈炲繀濉� + ID int `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"` + Number string `json:"number" gorm:"column:number;type:varchar(255)"` //鍗曞彿 + SourceNumber string `json:"sourceNumber" gorm:"type:varchar(255)"` //婧愬崟鍙� + OperationTypeId int `json:"operationTypeId" gorm:"type:int;not null;comment:浣滀笟绫诲瀷id"` //浣滀笟绫诲瀷id + OperationTypeName string `json:"operationTypeName" gorm:"type:varchar(127);comment:浣滀笟绫诲瀷鍚嶇О"` //浣滀笟绫诲瀷鍚嶇О + Status constvar.OperationStatus `json:"status" gorm:"type:int(11);not null;comment:鐘舵��"` //鐘舵�� + FromLocationId int `json:"fromLocationId" gorm:"type:int;not null;comment:婧愪綅缃甶d"` //婧愪綅缃甶d + ToLocationId int `json:"toLocationId" gorm:"type:int;not null;comment:鐩爣浣嶇疆id"` //鐩爣浣嶇疆id + OperationDate string `json:"operationDate" gorm:"type:varchar(31);comment:瀹夋帓鏃ユ湡"` //瀹夋帓鏃ユ湡 + Details []*OperationDetails `json:"details"` + ContacterID int `json:"contacterID" gorm:"type:int;comment:鑱旂郴浜篒D"` //鑱旂郴浜篒D-闈炲繀濉� + ContacterName string `json:"contacterName" gorm:"type:varchar(63);comment:鑱旂郴浜哄鍚�"` //鑱旂郴浜哄鍚�-闈炲繀濉� + CompanyID int `json:"companyID" gorm:"type:int;comment:鍏徃ID"` //鍏徃ID-瀹㈡埛 + CompanyName string `json:"companyName" gorm:"type:varchar(127);comment:鍏徃鍚嶇О"` //鍏徃鍚嶇О-瀹㈡埛鍚嶇О + Comment string `json:"comment" gorm:"type:text;comment:澶囨敞"` //澶囨敞 + BaseOperationType constvar.BaseOperationType `json:"baseOperationType"` //鍩虹浣滀笟绫诲瀷 } type OperationAllList struct { diff --git a/request/product_request.go b/request/product_request.go index 2c91b79..c0e7ea7 100644 --- a/request/product_request.go +++ b/request/product_request.go @@ -33,15 +33,14 @@ } type UpdateDisuse struct { - Id int `json:"id"` - ProductId string `json:"productId"` - //ProductName string `json:"productName"` - Amount decimal.Decimal `json:"amount"` - FromLocationId int `json:"fromLocationId"` - ToLocationId int `json:"toLocationId"` - SourceNumber string `json:"sourceNumber"` - //Unit string `json:"unit"` - Number string `json:"number"` - Status constvar.OperationStatus `json:"status"` - OperationDate string `json:"operationDate"` + Id int `json:"id"` + ProductId string `json:"productId"` + Amount decimal.Decimal `json:"amount"` + FromLocationId int `json:"fromLocationId"` + ToLocationId int `json:"toLocationId"` + SourceNumber string `json:"sourceNumber"` + Number string `json:"number"` + Status constvar.OperationStatus `json:"status"` + OperationDate string `json:"operationDate"` + BaseOperationType constvar.BaseOperationType `json:"baseOperationType"` } diff --git a/router/router.go b/router/router.go index e912304..c23bd3d 100644 --- a/router/router.go +++ b/router/router.go @@ -107,7 +107,16 @@ productAPI.POST("listDisuse", productController.ListDisuse) //鏌ョ湅浜у搧鐨勫巻鍙插嚭鍏ュ簱淇℃伅 productAPI.PUT("finishDisuse/:id", productController.FinishDisuse) //鎶ュ簾楠岃瘉 productAPI.POST("updateDisuse", productController.UpdateDisuse) //淇敼鎶ュ簾淇℃伅 + } + // 涓婃灦瑙勫垯 + locationProductController := new(controllers.LocationProductController) + locationProductAPI := r.Group(urlPrefix + "/locationProduct") + { + locationProductAPI.GET("operationType", locationProductController.List) // 鑾峰彇涓婃灦瑙勫垯鍒楄〃 + locationProductAPI.POST("operationType", locationProductController.Add) // 鏂板涓婃灦瑙勫垯 + locationProductAPI.PUT("operationType/:id", locationProductController.Update) // 淇敼涓婃灦瑙勫垯 + locationProductAPI.DELETE("operationType/:id", locationProductController.Delete) // 鍒犻櫎涓婃灦瑙勫垯 } return r -- Gitblit v1.8.0