From 79aef24a785581d95343ccd99e9cb362b2bc9c97 Mon Sep 17 00:00:00 2001 From: yinbentan <yinbentan@live.com> Date: 星期六, 06 七月 2024 21:31:59 +0800 Subject: [PATCH] 调整库存商品位置错误 --- controllers/product_controller.go | 190 ++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 185 insertions(+), 5 deletions(-) diff --git a/controllers/product_controller.go b/controllers/product_controller.go index dea98e2..56f6e68 100644 --- a/controllers/product_controller.go +++ b/controllers/product_controller.go @@ -7,6 +7,8 @@ "github.com/shopspring/decimal" "github.com/spf13/cast" "gorm.io/gorm" + "io" + "net/url" "strconv" "time" "wms/constvar" @@ -20,6 +22,7 @@ "wms/request" "wms/response" "wms/service" + "wms/utils/http" ) type ProductController struct { @@ -53,6 +56,13 @@ if params.Unit == "" { util.ResponseFormat(c, code.RequestParamError, "鍗曚綅涓嶈兘涓虹┖") return + } + if params.BarCode != "" { + m, err := models.NewMaterialSearch().SetBarCode(params.BarCode).First() + if err == nil && m.ID != "" { //鏌ュ嚭鐗╂枡琛ㄦ槸鐗╂枡宸插瓨鍦� + util.ResponseFormat(c, code.RequestParamError, "鏉″舰鐮佸凡缁忚浣跨敤") + return + } } //params.ID = utils.GetUUID() @@ -218,8 +228,9 @@ // GetProductDetails // @Tags 浜у搧 -// @Summary 鑾峰彇浜у搧璇︽儏 +// @Summary 閫氳繃浜у搧/鍟嗗搧/鐗╂枡 ID鑾峰彇浜у搧璇︽儏 // @Produce application/json +// @Param Authorization header string true "token" // @Param id path string true "id" "鏌ヨ鍙傛暟" // @Success 200 {object} util.Response{data=models.Material} "鎴愬姛" // @Router /api-wms/v1/product/getProductDetails/{id} [get] @@ -233,6 +244,96 @@ if err != nil { util.ResponseFormat(c, code.RequestParamError, "鏌ユ壘澶辫触") return + } + attributeValues, err := models.NewAttributeValueSearch().SetEntityID(material.ID).FindNotTotal() + if err != nil { + util.ResponseFormat(c, code.RequestParamError, "鏌ユ壘澶辫触") + return + } + aids := make([]uint, 0) + for _, v := range attributeValues { + aids = append(aids, v.AttributeID) + } + attributes, err := models.NewAttributeSearch().SetIDs(aids).FindNotTotal() + attributesMap := make(map[uint]*models.Attribute, len(attributes)) + for _, v := range attributes { + attributesMap[v.ID] = v + } + if err != nil { + util.ResponseFormat(c, code.RequestParamError, "鏈煡鍔ㄦ�佸睘鎬�") + } + for _, v1 := range attributeValues { + attribute := attributesMap[v1.AttributeID] + if attribute == nil { + continue + } + //product.Attributes = append(product.Attributes,v1) + material.Attributes = append(material.Attributes, models.Attribute{ + Model: gorm.Model{ID: v1.ID, CreatedAt: v1.CreatedAt, UpdatedAt: v1.UpdatedAt, DeletedAt: v1.DeletedAt}, + Name: attribute.Name, + DataType: attribute.DataType, + EntityType: attribute.EntityType, + SelectValues: attribute.SelectValues, + SelectValue: attribute.SelectValue, + //Value: v1.Value, + Value: v1.Value, + }) + } + util.ResponseFormat(c, code.Success, material) +} + +// GetProductDetailsByBarCode +// @Tags 浜у搧 +// @Summary 閫氳繃浜у搧/鍟嗗搧/鐗╂枡 鏉″舰鐮� 鑾峰彇浜у搧璇︽儏 +// @Produce application/json +// @Param Authorization header string true "token" +// @Param barCode path string true "barCode" "鏌ヨ鍙傛暟" +// @Success 200 {object} util.Response{data=models.Material} "鎴愬姛" +// @Router /api-wms/v1/product/getProductDetailsByBarCode/{barCode} [get] +func (slf ProductController) GetProductDetailsByBarCode(c *gin.Context) { + barCode := c.Param("barCode") + if barCode == "" { + util.ResponseFormat(c, code.RequestParamError, "鏃犳晥鏉″舰鐮�") + return + } + material, err := models.NewMaterialSearch().SetBarCode(barCode).SetPreload(true).First() + if err != nil { + util.ResponseFormat(c, code.RequestParamError, "鏌ユ壘澶辫触") + return + } + attributeValues, err := models.NewAttributeValueSearch().SetEntityID(material.ID).FindNotTotal() + if err != nil { + util.ResponseFormat(c, code.RequestParamError, "鏌ユ壘澶辫触") + return + } + aids := make([]uint, 0) + for _, v := range attributeValues { + aids = append(aids, v.AttributeID) + } + attributes, err := models.NewAttributeSearch().SetIDs(aids).FindNotTotal() + attributesMap := make(map[uint]*models.Attribute, len(attributes)) + for _, v := range attributes { + attributesMap[v.ID] = v + } + if err != nil { + util.ResponseFormat(c, code.RequestParamError, "鏈煡鍔ㄦ�佸睘鎬�") + } + for _, v1 := range attributeValues { + attribute := attributesMap[v1.AttributeID] + if attribute == nil { + continue + } + //product.Attributes = append(product.Attributes,v1) + material.Attributes = append(material.Attributes, models.Attribute{ + Model: gorm.Model{ID: v1.ID, CreatedAt: v1.CreatedAt, UpdatedAt: v1.UpdatedAt, DeletedAt: v1.DeletedAt}, + Name: attribute.Name, + DataType: attribute.DataType, + EntityType: attribute.EntityType, + SelectValues: attribute.SelectValues, + SelectValue: attribute.SelectValue, + //Value: v1.Value, + Value: v1.Value, + }) } util.ResponseFormat(c, code.Success, material) } @@ -261,6 +362,13 @@ if params.Unit == "" { util.ResponseFormat(c, code.RequestParamError, "鍗曚綅涓嶈兘涓虹┖") return + } + if params.BarCode != "" { + m, err := models.NewMaterialSearch().SetBarCode(params.BarCode).First() + if err == nil && m.ID != params.ID { //鏌ュ嚭鐗╂枡涓擨D涓嶄竴鏍�, + util.ResponseFormat(c, code.RequestParamError, "鏉″舰鐮佸凡缁忚浣跨敤") + return + } } err := models.NewMaterialSearch().SetID(params.ID).Save(¶ms) if err != nil { @@ -330,7 +438,7 @@ // DeleteProduct // @Tags 浜у搧 -// @Summary 鍒犻櫎浜у搧 +// @Summary 閫氳繃浜у搧/鍟嗗搧/鐗╂枡 ID鍒犻櫎浜у搧 // @Produce application/json // @Param id path string true "id" "鏌ヨ鍙傛暟" // @Success 200 {object} util.Response "鎴愬姛" @@ -341,7 +449,37 @@ util.ResponseFormat(c, code.RequestParamError, "鏃犳晥id") return } - err := models.NewMaterialSearch().SetID(id).Delete() + err := models.WithTransaction(func(tx *gorm.DB) error { + if err := models.NewMaterialSearch().SetOrm(tx).SetID(id).Delete(); err != nil { + return err + } + if err := models.NewAttributeValueSearch().SetOrm(tx).SetEntityID(id).Delete(); err != nil { //鍒犻櫎鐗╂枡瀵瑰簲鐨勫姩鎬佸睘鎬� + return err + } + return nil + }) + + if err != nil { + util.ResponseFormat(c, code.RequestParamError, "鍒犻櫎澶辫触") + return + } + util.ResponseFormat(c, code.Success, "鍒犻櫎鎴愬姛") +} + +// DeleteProductByBarCode +// @Tags 浜у搧 +// @Summary 閫氳繃浜у搧/鍟嗗搧/鐗╂枡 鏉″舰鐮佸垹闄や骇鍝� +// @Produce application/json +// @Param barCode path string true "barCode" "鏌ヨ鍙傛暟" +// @Success 200 {object} util.Response "鎴愬姛" +// @Router /api-wms/v1/product/deleteProductByBarCode/{barCode} [delete] +func (slf ProductController) DeleteProductByBarCode(c *gin.Context) { + barCode := c.Param("barCode") + if barCode == "" { + util.ResponseFormat(c, code.RequestParamError, "鏃犳晥id") + return + } + err := models.NewMaterialSearch().SetBarCode(barCode).Delete() if err != nil { util.ResponseFormat(c, code.RequestParamError, "鍒犻櫎澶辫触") return @@ -910,8 +1048,13 @@ // InputProduct // -// @Tags 鐗╂枡绠$悊 -// @Summary 瀵煎叆鐗╂枡 +// @Tags 浜у搧 +// @Summary 瀵煎叆鐗╂枡/浜у搧 +// +// @Accept multipart/form-data +// @Param file formData file true "file" +// @Param Authorization header string true "token" +// // @Produce application/xlsx // @Success 200 {object} util.Response "鎴愬姛" // @Router /api-wms/v1/product/inputProduct [post] @@ -932,3 +1075,40 @@ resp.InputCount = insertCount util.ResponseFormat(c, code.Success, resp) } + +// DownloadInputFormat +// +// @Tags 浜у搧 +// @Summary 涓嬭浇瀵煎叆鐗╂枡/浜у搧妯℃澘 +// +// @Param Authorization header string true "token" +// +// @Success 200 {object} util.Response "鎴愬姛" +// @Router /api-wms/v1/product/downloadInputFormat [get] +func (slf ProductController) DownloadInputFormat(c *gin.Context) { + template, err := models.NewFileTemplateAttachmentSearch().SetCategory(constvar.FileWarehouseCategory_JialianInput3).First() //鐗╂枡瀵煎叆妯℃澘 + if err != nil { + util.ResponseFormat(c, code.NoTemplateError, "鑾峰彇妯$増璁板綍澶辫触:"+err.Error()) + return + } + readerCloser, err := http.HttpGetWithReadCloser(template.FileUrl) + if err != nil { + util.ResponseFormat(c, code.NoTemplateError, "鑾峰彇妯$増璁板綍澶辫触:"+err.Error()) + return + } + + fileContentDisposition := "attachment;filename=\"" + url.QueryEscape("鐗╂枡瀵煎叆.xlsx") + "\"" + w := c.Writer + w.Header().Set("Content-Type", "application/octet-stream") + w.Header().Set("Content-Disposition", fileContentDisposition) + w.Header().Set("Content-Transfer-Encoding", "binary") + w.Header().Set("Cache-Control", "no-cache") + _, err = io.Copy(w, readerCloser) + if err != nil { + util.ResponseFormat(c, code.NoTemplateError, "涓嬭浇澶辫触:"+err.Error()) + return + } + w.Flush() + _ = readerCloser.Close() + util.ResponseFormat(c, code.Success, "") +} -- Gitblit v1.8.0