From e156b3d7d57d4a4b0e903090bd822b5863bb187e Mon Sep 17 00:00:00 2001 From: chenlin Date: Thu, 16 Nov 2023 18:09:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=9F=A5=E8=AF=A2=E5=BA=93?= =?UTF-8?q?=E5=AD=98=E5=88=97=E8=A1=A8=E5=92=8C=E8=AF=A6=E6=83=85=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/apis/basic/commodity.go | 32 +- app/admin/apis/inventory/Inventory.go | 63 +++ app/admin/models/commodity.go | 585 ++++++++------------------ app/admin/models/supplier.go | 2 +- app/admin/router/inventory.go | 14 + app/admin/router/router.go | 10 +- docs/docs.go | 427 ++++++++++++++++++- docs/swagger.json | 426 ++++++++++++++++++- docs/swagger.yaml | 305 +++++++++++++- 9 files changed, 1370 insertions(+), 494 deletions(-) create mode 100644 app/admin/apis/inventory/Inventory.go create mode 100644 app/admin/router/inventory.go diff --git a/app/admin/apis/basic/commodity.go b/app/admin/apis/basic/commodity.go index 3b689cb..af08968 100644 --- a/app/admin/apis/basic/commodity.go +++ b/app/admin/apis/basic/commodity.go @@ -37,6 +37,7 @@ type CommodityCreateRequest struct { // @Param request body CommodityCreateRequest true "商品新增模型" // @Success 200 {object} models.ErpCommodity // @Router /api/v1/commodity/create [post] +// 规则:商品名称/商品编号相同则为同一商品,创建的时候由于商品编号不重复,无需判断 func CommodityCreate(c *gin.Context) { var req = new(CommodityCreateRequest) @@ -90,19 +91,6 @@ func CommodityCreate(c *gin.Context) { } commodity.IdInit() - //var catCommodity models.ErpCommodity - //err = orm.Eloquent.Table("erp_commodity").Where("erp_category_id=?", req.ErpCategoryId). - // Order("id DESC").Limit(1).Find(&catCommodity).Error - //if err != nil && err != models.RecordNotFound { - // //logger.Error("cat erp commodity err:", err) - // app.Error(c, http.StatusInternalServerError, err, "创建失败") - // return - //} - //if catCommodity.Number != 0 { - // commodity.Number = catCommodity.Number + 1 - //} - //commodity.SerialNumber = fmt.Sprintf("%06d%04d", commodity.ErpCategory.FullNum, commodity.Number) - commodity.SerialNumber, err = models.GenerateSerialNumber(req.ErpCategoryId) if err != nil { app.Error(c, http.StatusInternalServerError, err, err.Error()) @@ -224,24 +212,6 @@ func CommodityEdit(c *gin.Context) { brokerage1Float := req.Brokerage1 brokerage2Float := req.Brokerage2 memberDiscountFloat := req.MemberDiscount - //brokerage1Float, err := strconv.ParseFloat(req.Brokerage1, 64) - //if err != nil { - // logger.Error("brokerage1 err:", err) - // app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误") - // return - //} - //brokerage2Float, err := strconv.ParseFloat(req.Brokerage2, 64) - //if err != nil { - // logger.Error("brokerage2 err:", err) - // app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误") - // return - //} - //memberDiscountFloat, err := strconv.ParseFloat(req.MemberDiscount, 64) - //if err != nil { - // logger.Error("member discount err:", err) - // app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误") - // return - //} commodity := &models.ErpCommodity{ Name: req.Name, diff --git a/app/admin/apis/inventory/Inventory.go b/app/admin/apis/inventory/Inventory.go new file mode 100644 index 0000000..1e7161f --- /dev/null +++ b/app/admin/apis/inventory/Inventory.go @@ -0,0 +1,63 @@ +package inventory + +import ( + "errors" + "github.com/gin-gonic/gin" + "go-admin/app/admin/models" + "go-admin/tools/app" + "net/http" +) + +// InventoryList 查询库存列表 +// @Summary 查询库存列表 +// @Tags 库存管理 +// @Produce json +// @Accept json +// @Param request body models.ErpStockListReq true "查询库存列表模型" +// @Success 200 {object} models.ErpStockListResp +// @Router /api/v1/inventory/list [post] +func GetInventoryList(c *gin.Context) { + req := &models.ErpStockListReq{} + if err := c.ShouldBindJSON(&req); err != nil { + //logger.Error(err) + app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误") + return + } + + resp, err := req.List() + if err != nil { + //logger.Error("erp commodity list err:", err) + app.Error(c, http.StatusInternalServerError, err, "获取失败") + return + } + + app.OK(c, resp, "OK") + return +} + +// InventoryDetail 查询库存详情 +// @Summary 查询库存详情 +// @Tags 库存管理 +// @Produce json +// @Accept json +// @Param request body models.ErpStockCommodityListReq true "查询库存详情模型" +// @Success 200 {object} models.ErpStockCommodityListResp +// @Router /api/v1/inventory/detail [post] +func GetInventoryDetail(c *gin.Context) { + req := &models.ErpStockCommodityListReq{} + if err := c.ShouldBindJSON(&req); err != nil { + //logger.Error(err) + app.Error(c, http.StatusBadRequest, errors.New("param err"), "参数错误") + return + } + + list, err := req.GetDetailList() + if err != nil { + //logger.Error("erp stock err:", err) + app.Error(c, http.StatusInternalServerError, err, "获取失败") + return + } + + app.OK(c, list, "OK") + return +} diff --git a/app/admin/models/commodity.go b/app/admin/models/commodity.go index 3f9628e..1df12a5 100644 --- a/app/admin/models/commodity.go +++ b/app/admin/models/commodity.go @@ -14,71 +14,62 @@ import ( "time" ) -// gen:qs +// ErpStock 库存表 // //go:generate goqueryset -in commodity.go type ErpStock struct { Model - StoreId uint32 `json:"store_id" gorm:"index"` - StoreName string `json:"store_name"` - ErpCommodityId uint32 `json:"erp_commodity_id" gorm:"index"` - ErpCommodityName string `json:"erp_commodity_name"` - ErpCategoryId uint32 `json:"erp_category_id" gorm:"index"` - ErpCategoryName string `json:"erp_category_name"` - CommoditySerialNumber string `json:"commodity_serial_number" gorm:"index"` - IMEIType uint32 `json:"imei_type"` // 1-无串码 2-串码(系统生成) 3-串码(手动添加) - RetailPrice uint32 `json:"retail_price"` - MinRetailPrice uint32 `json:"min_retail_price"` - Count uint32 `json:"count"` - DispatchCount uint32 `json:"dispatch_count"` - //ErpSupplierId uint32 `json:"erp_supplier_id" gorm:"index"` - //ErpSupplierName string `json:"erp_supplier_name"` - //IMEI string `json:"imei"` - //StockTime time.Time `json:"stock_time"` - //StaffCostPrice uint32 `json:"staff_cost_price"` - //WholesalePrice uint32 `json:"wholesale_price"` - //OriginalSn string `json:"original_sn" gorm:"index"` - Commodities []ErpStockCommodity `json:"commodities" gorm:"-"` - - // erp_stock + StoreId uint32 `json:"store_id" gorm:"index"` // 门店编号 + StoreName string `json:"store_name"` // 门店名称 + ErpCommodityId uint32 `json:"erp_commodity_id" gorm:"index"` // 商品id + ErpCommodityName string `json:"erp_commodity_name"` // 商品名称 + ErpCategoryId uint32 `json:"erp_category_id" gorm:"index"` // 分类id + ErpCategoryName string `json:"erp_category_name"` // 分类名称 + CommoditySerialNumber string `json:"commodity_serial_number" gorm:"index"` // 商品编码/串码 + IMEIType uint32 `json:"imei_type"` // 1-无串码 2-串码(系统生成) 3-串码(手动添加) + RetailPrice uint32 `json:"retail_price"` // 指导零售价 + MinRetailPrice uint32 `json:"min_retail_price"` // 最低零售价 + Count uint32 `json:"count"` // 数量 + DispatchCount uint32 `json:"dispatch_count"` // 调拨中数量 + Commodities []ErpStockCommodity `json:"commodities" gorm:"-"` } -// gen:qs +// ErpStockCommodity 库存详情 type ErpStockCommodity struct { Model - ErpStockId uint32 `json:"erp_stock_id" gorm:"index"` - StoreId uint32 `json:"store_id" gorm:"index"` - StoreName string `json:"store_name"` - ErpCommodityId uint32 `json:"erp_commodity_id" gorm:"index"` - ErpCommodityName string `json:"erp_commodity_name"` - CommoditySerialNumber string `json:"commodity_serial_number" gorm:"index"` - ErpCategoryId uint32 `json:"erp_category_id" gorm:"index"` - ErpCategoryName string `json:"erp_category_name"` - IMEIType uint32 `json:"imei_type"` // 1-无串码 2-串码(系统生成) 3-串码(手动添加) - IMEI string `json:"imei"` - ErpSupplierId uint32 `json:"erp_supplier_id" gorm:"index"` - ErpSupplierName string `json:"erp_supplier_name"` - StockTime time.Time `json:"stock_time"` - RetailPrice uint32 `json:"retail_price"` - MinRetailPrice uint32 `json:"min_retail_price"` - StaffCostPrice uint32 `json:"staff_cost_price"` - WholesalePrice uint32 `json:"wholesale_price"` - OriginalSn string `json:"original_sn" gorm:"index"` - State uint32 `json:"state"` // 状态:1-在库 2-已售 3-采购退货 4-调拨中 - Count uint32 `json:"count"` - StockSn string `json:"stock_sn"` - StorageType uint32 `json:"storage_type"` //1-系统入库 2-采购入库 - FirstStockTime time.Time `json:"first_stock_time"` - Age uint32 `json:"age" gorm:"-"` - AllAge uint32 `json:"all_age" gorm:"-"` - Commodity ErpCommodity `json:"commodity" gorm:"-"` - //DispatchCount uint32 `json:"dispatch_count"` - // erp_stock_commodity + ErpStockId uint32 `json:"erp_stock_id" gorm:"index"` // 库存id + StoreId uint32 `json:"store_id" gorm:"index"` // 门店id + StoreName string `json:"store_name"` // 门店名称 + ErpCommodityId uint32 `json:"erp_commodity_id" gorm:"index"` // 商品id + ErpCommodityName string `json:"erp_commodity_name"` // 商品名称 + CommoditySerialNumber string `json:"commodity_serial_number" gorm:"index"` // 商品编号 + ErpCategoryId uint32 `json:"erp_category_id" gorm:"index"` // 分类id + ErpCategoryName string `json:"erp_category_name"` // 分类名称 + IMEIType uint32 `json:"imei_type"` // 是否串码:1-无串码 2-串码(系统生成) 3-串码(手动添加) + IMEI string `json:"imei"` // 商品串码 + ErpSupplierId uint32 `json:"erp_supplier_id" gorm:"index"` // 供应商id + ErpSupplierName string `json:"erp_supplier_name"` // 供应商名称 + StockTime time.Time `json:"stock_time"` // 最近入库时间 + RetailPrice uint32 `json:"retail_price"` // 指导零售价 + MinRetailPrice uint32 `json:"min_retail_price"` // 最低零售价 + StaffCostPrice uint32 `json:"staff_cost_price"` // 员工成本价加价 + WholesalePrice uint32 `json:"wholesale_price"` // 指导采购价 + State uint32 `json:"state"` // 状态:1-在库 2-已售 3-采购退货 4-调拨中 + Count uint32 `json:"count"` // 数量 + StorageType uint32 `json:"storage_type"` // 入库方式:1-系统入库 2-采购入库 + FirstStockTime time.Time `json:"first_stock_time"` // 首次入库时间 + StockSn string `json:"stock_sn"` // 库存订单编号 + OriginalSn string `json:"original_sn" gorm:"index"` // 首次入库订单编号 + StockStartTime time.Time `json:"stock_start_time" gorm:"-"` // 最近入库开始时间 + StockEndTime time.Time `json:"stock_end_time" gorm:"-"` // 最近入库结束时间 + Age uint32 `json:"age" gorm:"-"` // 最近库龄 + AllAge uint32 `json:"all_age" gorm:"-"` // 总库龄 + //Commodity ErpCommodity `json:"commodity" gorm:"-"` } -// gen:qs +// ErpCommodity 商品表 type ErpCommodity struct { Model @@ -102,7 +93,6 @@ type ErpCommodity struct { Remark string `json:"remark" gorm:"type:varchar(512)"` // 备注 ErpCategory *ErpCategory `json:"erp_category" gorm:"-"` - // erp_commodity } // gen:qs @@ -526,122 +516,6 @@ type ErpCategorySub struct { //UnCodeMap map[string]uint32 } -func ErpCommodityFileExcelListProcessing(list []ErpCommodityFileExcel) { - allCategoriesMap, err := GetErpCategorySubMap() - if err != nil { - //logger.Error("all categories map err:", err) - return - } - fmt.Println("allCategoriesMap:", allCategoriesMap) - unCodeMap1 := make(map[string]string, 0) - unCodeMap2 := make(map[string]string, 0) - numberCount := &CommodityNumberCount{} - numberCount.NumberMap = make(map[uint32]uint32, 0) - - for i, _ := range list { - //if i == 0 { - // continue - //} - list[i].Processing() - cat1 := list[i].Category1 - unCode1, okUc1 := unCodeMap1[cat1] - if okUc1 { - cat1 = unCode1 - } - catSub, ok := allCategoriesMap[cat1] - if ok { - if list[i].Category2 != "" { - cat2 := list[i].Category2 - unCode2, okUc2 := unCodeMap2[cat2] - if okUc2 { - cat2 = unCode2 - } - sub, ok1 := catSub.SubMap[unCode2] - //unCodeCat, ok2 := unCodeMap2[list[i].Category2] - if ok1 { - list[i].ErpCommodity.ErpCategoryId = sub.ID - list[i].ErpCommodity.ErpCategory = &sub - numberCommodity, err := numberCount.GetErpCommodityNumberByCategoryId(sub.ID) - if err != nil { - //logger.Error("category2 create err:", err) - return - } - list[i].ErpCommodity.Number = numberCommodity - list[i].ErpCommodity.ErpCategoryName = cat2 - - } else { - category2, err := ErpCategoryCreate(list[i].Category2, catSub.Id) - if err != nil { - //logger.Error("category2 create err:", err) - return - } - fmt.Println("分类id", category2.ID) - list[i].ErpCommodity.ErpCategoryId = category2.ID - list[i].ErpCommodity.ErpCategory = category2 - allCategoriesMap, err = GetErpCategorySubMap() - if err != nil { - //logger.Error("all categories map err:", err) - return - } - numberCount.NumberMap[category2.ID] = 1 - list[i].ErpCommodity.Number = 1 - list[i].ErpCommodity.ErpCategoryName = cat2 - unCodeMap2[list[i].Category2] = category2.Name - } - } else { - list[i].ErpCommodity.ErpCategoryId = catSub.Id - list[i].ErpCommodity.ErpCategory = &ErpCategory{Number: catSub.FullNum} // TODO - numberCommodity, err := numberCount.GetErpCommodityNumberByCategoryId(catSub.Id) - if err != nil { - //logger.Error("category2 create err:", err) - return - } - list[i].ErpCommodity.Number = numberCommodity - list[i].ErpCommodity.ErpCategoryName = catSub.Name - } - - list[i].ErpCommodity.SerialNumber = fmt.Sprintf("%06d%04d", list[i].ErpCommodity.ErpCategory.FullNum, list[i].ErpCommodity.Number) - } else { - category1, err := ErpCategoryCreate(list[i].Category1, 0) - if err != nil { - //logger.Error("category1 create err:", err) - return - } - unCodeMap1[list[i].Category1] = category1.Name - if list[i].Category2 != "" { - category2, err := ErpCategoryCreate(list[i].Category2, category1.ID) - if err != nil { - //logger.Error("category2 create err:", err) - return - } - fmt.Println("分类id2", category2.ID) - list[i].ErpCommodity.ErpCategoryId = category2.ID - list[i].ErpCommodity.ErpCategoryName = list[i].Category2 - list[i].ErpCommodity.ErpCategory = category2 - unCodeMap2[list[i].Category2] = category2.Name - - numberCount.NumberMap[category2.ID] = 1 - list[i].ErpCommodity.Number = 1 - } else { - list[i].ErpCommodity.ErpCategoryId = category1.ID - list[i].ErpCommodity.ErpCategoryName = list[i].Category1 - list[i].ErpCommodity.ErpCategory = category1 - - numberCount.NumberMap[category1.ID] = 1 - list[i].ErpCommodity.Number = 1 - } - - list[i].ErpCommodity.SerialNumber = fmt.Sprintf("%06d%04d", list[i].ErpCommodity.ErpCategory.FullNum, list[i].ErpCommodity.Number) - allCategoriesMap, err = GetErpCategorySubMap() - if err != nil { - //logger.Error("all categories map err:", err) - return - } - } /**/ - } - -} - type CommodityNumberCount struct { NumberMap map[uint32]uint32 `json:"number_map"` } @@ -1196,61 +1070,6 @@ func ErpStockCommodityToInventory(inventoryStockIdMap map[string]uint32, list [] return inventoryList } -func GetErpCommodityMap(ids []uint32) (map[uint32]ErpCommodity, error) { - commodityMap := make(map[uint32]ErpCommodity, 0) - if len(ids) == 0 { - return commodityMap, nil - } - var commodities []ErpCommodity - err := orm.Eloquent.Table("erp_commodity").Where("id IN (?)", ids).Find(&commodities).Error - if err != nil { - //logger.Error("commodities err:", err) - return commodityMap, err - } - - for i, _ := range commodities { - commodityMap[commodities[i].ID] = commodities[i] - } - - return commodityMap, nil -} - -func ErpSupplierListExport(list []ErpSupplier) (string, error) { - file := excelize.NewFile() - streamWriter, err := file.NewStreamWriter("Sheet1") - if err != nil { - fmt.Println(err) - } - - url := "http://39.108.188.218:8000/img/export/" - fileName := time.Now().Format(TimeFormat) + "供应商" + ".xlsx" - - //title := []interface{}{"门店", "用户ID", "订单编号", "下单时间", "卡带", "说明", "回收价", "闲麦价", "审核时间", "审核人", "操作", "复核时间", "复核状态"} - title := []interface{}{"供应商编号", "供应商名称", "联系人", "手机号", "地址", "开户银行", "银行账号", "付款周期/天"} - cell, _ := excelize.CoordinatesToCellName(1, 1) - if err = streamWriter.SetRow(cell, title); err != nil { - fmt.Println(err) - } - var row []interface{} - for rowId := 0; rowId < len(list); rowId++ { - row = []interface{}{list[rowId].Number, list[rowId].Name, list[rowId].Contact, - list[rowId].Tel, list[rowId].Address, list[rowId].OpeningBank, - list[rowId].BankAccount, list[rowId].PaymentCycle} - cell, _ := excelize.CoordinatesToCellName(1, rowId+2) - if err := streamWriter.SetRow(cell, row); err != nil { - fmt.Println(err) - } - } - if err := streamWriter.Flush(); err != nil { - fmt.Println(err) - } - if err := file.SaveAs("/www/server/images/export/" + fileName); err != nil { - //if err := file.SaveAs("./" + fileName); err != nil { - fmt.Println(err) - } - return url + fileName, nil -} - func ErpCommodityListExport(list []ErpCommodity) (string, error) { file := excelize.NewFile() streamWriter, err := file.NewStreamWriter("Sheet1") @@ -1294,41 +1113,6 @@ func ErpCommodityListExport(list []ErpCommodity) (string, error) { return url + fileName, nil } -//func ErpStoreCashierListExport(list []ErpStoreCashier) (string, error) { -// file := excelize.NewFile() -// streamWriter, err := file.NewStreamWriter("Sheet1") -// if err != nil { -// fmt.Println(err) -// } -// -// url := "http://39.108.188.218:8000/img/export/" -// fileName := time.Now().Format(TimeFormat) + "支付账号" + ".xlsx" -// -// //title := []interface{}{"门店", "用户ID", "订单编号", "下单时间", "卡带", "说明", "回收价", "闲麦价", "审核时间", "审核人", "操作", "复核时间", "复核状态"} -// title := []interface{}{"所属门店", "账号名称", "银行全称", "银行账号"} -// cell, _ := excelize.CoordinatesToCellName(1, 1) -// if err = streamWriter.SetRow(cell, title); err != nil { -// fmt.Println(err) -// } -// var row []interface{} -// for rowId := 0; rowId < len(list); rowId++ { -// row = []interface{}{list[rowId].StoreName, list[rowId].Name, list[rowId].BankName, -// list[rowId].BankAccount} -// cell, _ := excelize.CoordinatesToCellName(1, rowId+2) -// if err := streamWriter.SetRow(cell, row); err != nil { -// fmt.Println(err) -// } -// } -// if err := streamWriter.Flush(); err != nil { -// fmt.Println(err) -// } -// if err := file.SaveAs("/www/server/images/export/" + fileName); err != nil { -// //if err := file.SaveAs("./" + fileName); err != nil { -// fmt.Println(err) -// } -// return url + fileName, nil -//} - func ErpCategoryListExport(list []ErpCategory) (string, error) { file := excelize.NewFile() streamWriter, err := file.NewStreamWriter("Sheet1") @@ -1373,13 +1157,14 @@ func ErpCategoryListExport(list []ErpCategory) (string, error) { } type ErpStockListReq struct { - SerialNumber string `json:"serial_number"` - CommodityName string `json:"commodity_name"` - ErpCategoryId uint32 `json:"erp_category_id"` - StockType uint32 `json:"stock_type"` // 库存:1-全部 2-有库存 3-无库存 - PageNum int `json:"page_num"` - PageSize int `json:"page_size"` - IsExport uint32 `json:"is_export"` // 1-导出 + SerialNumber string `json:"serial_number"` // 商品编号 + CommodityName string `json:"commodity_name"` // 商品名称 + ErpCategoryId uint32 `json:"erp_category_id"` // 商品分类 + StockType uint32 `json:"stock_type"` // 库存情况:1-全部 2-有库存 3-无库存 + StoreId uint32 `json:"store_id"` // 门店编号 + PageNum int `json:"page_num"` // 页面条数 + PageSize int `json:"page_size"` // 页码 + //IsExport uint32 `json:"is_export"` // 1-导出 } type ErpStockListResp struct { List []ErpStock `json:"list"` @@ -1411,42 +1196,30 @@ func (m *ErpStockListReq) List() (*ErpStockListResp, error) { if m.ErpCategoryId != 0 { qs = qs.Where("erp_category_id=?", m.ErpCategoryId) } - if m.StockType != 0 { - if m.StockType == 2 { - qs = qs.Where("count>0") - } else if m.StockType == 3 { - qs = qs.Where("count=0") - } + if m.StoreId != 0 { + qs = qs.Where("store_id=?", m.StoreId) } + switch m.StockType { + case 2: + qs = qs.Where("count > 0") + case 3: + qs = qs.Where("count = 0") + } + var count int64 - err := qs.Count(&count).Error - if err != nil { + if err := qs.Count(&count).Error; err != nil { //logger.Error("count err:", err) return resp, err } resp.Total = int(count)/m.PageSize + 1 + var commodities []ErpStock - - if m.IsExport == 1 { - err = qs.Order("id DESC").Find(&commodities).Error - if err != nil && err != RecordNotFound { - //logger.Error("dailys err:", err) - return resp, err - } - - //listExport, err := ErpCommodityListExport(commodities) - //if err != nil { - // logger.Error("list export err:", err) - //} - //resp.ExportUrl = listExport - } else { - err = qs.Order("id DESC").Offset(page * m.PageSize).Limit(m.PageSize).Find(&commodities).Error - if err != nil && err != RecordNotFound { - //logger.Error("erp commodity list err:", err) - return resp, err - } - resp.List = commodities + err := qs.Order("id DESC").Offset(page * m.PageSize).Limit(m.PageSize).Find(&commodities).Error + if err != nil && !errors.Is(err, RecordNotFound) { + //logger.Error("erp commodity list err:", err) + return resp, err } + resp.List = commodities return resp, nil } @@ -1467,22 +1240,26 @@ func ErpStockCommodityListSetCommodity(commodities []ErpStockCommodity) { } } +// ErpStockCommodityListReq 库存详情接口请求参数 type ErpStockCommodityListReq struct { - CommodityName string `json:"commodity_name"` - ErpCategoryId uint32 `json:"erp_category_id"` - SerialNumber string `json:"serial_number"` - StoreId uint32 `json:"store_id"` - IMEI string `json:"imei"` - State uint32 `json:"state"` - Sn string `json:"sn"` - StorageType uint32 `json:"storage_type"` - StockTimeStart string `json:"stock_time_start"` - StockTimeEnd string `json:"stock_time_end"` - Age uint32 `json:"age"` - AllAge uint32 `json:"all_age"` - PageNum int `json:"page_num"` - PageSize int `json:"page_size"` - IsExport uint32 `json:"is_export"` // 1-导出 + ErpStockId uint32 `json:"erp_stock_id"` // 库存id + ErpCommodityId uint32 `json:"erp_commodity_id"` // 商品id + SerialNumber string `json:"serial_number"` // 商品编号 + CommodityName string `json:"commodity_name"` // 商品名称 + ErpCategoryId uint32 `json:"erp_category_id"` // 商品分类Id + IMEI string `json:"imei"` // 串码 + StoreId uint32 `json:"store_id"` // 门店编号 + SupplierId uint32 `json:"supplier_id"` // 供应商id + State uint32 `json:"state"` // 库存状态:1-在库 2-已售 3-采购退货 4-调拨中 + Sn string `json:"sn"` // 首次入库订单编号 + StorageType uint32 `json:"storage_type"` // 首次入库方式:1-系统入库 2-采购入库 + StockTimeStart string `json:"stock_time_start"` // 最近入库开始时间 + StockTimeEnd string `json:"stock_time_end"` // 最近入库结束时间 + Age uint32 `json:"age"` // 最近库龄 + AllAge uint32 `json:"all_age"` // 总库龄 + PageNum int `json:"page_num"` // 页面条数 + PageSize int `json:"page_size"` // 页码 + IsExport uint32 `json:"is_export"` // 是否导出excel:1-导出 } type ErpStockCommodityListResp struct { List []ErpStockCommodity `json:"list"` @@ -1492,7 +1269,7 @@ type ErpStockCommodityListResp struct { ExportUrl string `json:"export_url"` } -func (m *ErpStockCommodityListReq) List() (*ErpStockCommodityListResp, error) { +func (m *ErpStockCommodityListReq) GetDetailList() (*ErpStockCommodityListResp, error) { resp := &ErpStockCommodityListResp{ PageNum: m.PageNum, PageSize: m.PageSize, @@ -1504,72 +1281,24 @@ func (m *ErpStockCommodityListReq) List() (*ErpStockCommodityListResp, error) { if m.PageSize == 0 { m.PageSize = 10 } - qs := orm.Eloquent.Table("erp_stock_commodity") - if m.SerialNumber != "" { - qs = qs.Where("commodity_serial_number=?", m.SerialNumber) - } - if m.CommodityName != "" { - qs = qs.Where("name Like %" + m.CommodityName + "%") - } - if m.ErpCategoryId != 0 { - qs = qs.Where("erp_category_id=?", m.ErpCategoryId) - } - if m.IMEI != "" { - qs = qs.Where("imei=?", m.IMEI) - } - if m.StoreId != 0 { - qs = qs.Where("store_id=?", m.StoreId) - } - if m.State != 0 { - qs = qs.Where("state=?", m.State) - } - if m.Sn != "" { - qs = qs.Where("stock_sn=?", m.Sn) - } - if m.StorageType != 0 { - qs = qs.Where("storage_type=?", m.StorageType) - } - if m.StockTimeStart != "" { - startTime, err := time.Parse(DateTimeFormat, m.StockTimeStart) - if err != nil { - //logger.Error("stock time start parse err:", err) - } else { - qs = qs.Where("first_stock_time>?", startTime) - } - } - if m.StockTimeEnd != "" { - endTime, err := time.Parse(DateTimeFormat, m.StockTimeEnd) - if err != nil { - //logger.Error("stock time end parse err:", err) - } else { - qs = qs.Where("first_stock_time0") - // } else if m.StockType == 3 { - // qs = qs.Where("count=0") - // } - //} + + qs := orm.Eloquent.Table("erp_stock_commodity").Order("id DESC") + + // 构建查询条件 + m.buildQueryConditions(qs) + var count int64 - err := qs.Count(&count).Error - if err != nil { + if err := qs.Count(&count).Error; err != nil { //logger.Error("count err:", err) return resp, err } resp.Total = int(count)/m.PageSize + 1 - var commodities []ErpStockCommodity + //获取库存商品列表 + var commodities []ErpStockCommodity if m.IsExport == 1 { - err = qs.Order("id DESC").Find(&commodities).Error - if err != nil && err != RecordNotFound { + err := qs.Find(&commodities).Error + if err != nil && !errors.Is(err, RecordNotFound) { //logger.Error("dailys err:", err) return resp, err } @@ -1580,8 +1309,8 @@ func (m *ErpStockCommodityListReq) List() (*ErpStockCommodityListResp, error) { //} //resp.ExportUrl = listExport } else { - err = qs.Order("id DESC").Offset(page * m.PageSize).Limit(m.PageSize).Find(&commodities).Error - if err != nil && err != RecordNotFound { + err := qs.Offset(page * m.PageSize).Limit(m.PageSize).Find(&commodities).Error + if err != nil && !errors.Is(err, RecordNotFound) { //logger.Error("erp commodity list err:", err) return resp, err } @@ -1592,47 +1321,71 @@ func (m *ErpStockCommodityListReq) List() (*ErpStockCommodityListResp, error) { return resp, nil } -//func ErpOrderListExport(list []ErpOrder) (string, error) { -// file := excelize.NewFile() -// streamWriter, err := file.NewStreamWriter("Sheet1") -// if err != nil { -// fmt.Println(err) -// } -// -// //url := "http://39.108.188.218:8000/img/export/" -// fileName := time.Now().Format(TimeFormat) + "零售订单" + ".xlsx" -// -// title := []interface{}{"单据编号", "类型", "手机号", "店铺名称", "制单人", "制单时间", "审核时间", "审核人", "状态"} -// cell, _ := excelize.CoordinatesToCellName(1, 1) -// if err = streamWriter.SetRow(cell, title); err != nil { -// fmt.Println(err) -// } -// var row []interface{} -// for rowId := 0; rowId < len(list); rowId++ { -// row = []interface{}{list[rowId].BillSn, list[rowId].RetailType, list[rowId].Tel, list[rowId].StoreName, -// list[rowId].MakerName, list[rowId].MakerId, list[rowId].MakerTime.Format(TimeFormat), -// list[rowId].AuditTime.Format(TimeFormat), list[rowId].AuditorName, ErpOrderStateToString(list[rowId].State), -// } -// cell, _ := excelize.CoordinatesToCellName(1, rowId+2) -// if err := streamWriter.SetRow(cell, row); err != nil { -// fmt.Println(err) -// } -// } -// if err := streamWriter.Flush(); err != nil { -// fmt.Println(err) -// } -// //if err := file.SaveAs("/www/server/images/export/" + fileName); err != nil { -// if err := file.SaveAs("./" + fileName); err != nil { -// fmt.Println(err) -// } -// return ExportBaseUrl + fileName, nil -//} -// -//func ErpOrderStateToString(state string) string { -// if state == ErpOrderStateUnAudit { -// return "未审核" -// } else if state == ErpOrderStateAudited { -// return "已审核" -// } -// return "" -//} +// buildQueryConditions 根据请求参数构建查询条件 +func (m *ErpStockCommodityListReq) buildQueryConditions(qs *gorm.DB) { + if m.ErpStockId != 0 { //库存id + qs = qs.Where("erp_stock_id=?", m.ErpStockId) + } + + if m.ErpCommodityId != 0 { //商品id + qs = qs.Where("erp_commodity_id=?", m.ErpCommodityId) + } + + if m.SerialNumber != "" { //商品编号 + qs = qs.Where("commodity_serial_number=?", m.SerialNumber) + } + + if m.CommodityName != "" { //商品名称 + qs = qs.Where("erp_commodity_name LIKE ?", "%"+m.CommodityName+"%") + } + + if m.ErpCategoryId != 0 { //商品分类id + qs = qs.Where("erp_category_id=?", m.ErpCategoryId) + } + + if m.IMEI != "" { //商品串码 + qs = qs.Where("imei=?", m.IMEI) + } + + if m.StoreId != 0 { //门店编号 + qs = qs.Where("store_id=?", m.StoreId) + } + + if m.State != 0 { //库存状态 + qs = qs.Where("state=?", m.State) + } + + if m.Sn != "" { //首次入库订单编号 + qs = qs.Where("stock_sn=?", m.Sn) + } + + if m.StorageType != 0 { //首次入库方式 + qs = qs.Where("storage_type=?", m.StorageType) + } + + if m.StockTimeStart != "" { //最近入库开始时间 + startTime, err := time.Parse(DateTimeFormat, m.StockTimeStart) + if err == nil { + qs = qs.Where("first_stock_time>?", startTime) + } else { + //logger.Error("stock time start parse err:", err) + } + } + + if m.StockTimeEnd != "" { //最近入库结束时间 + endTime, err := time.Parse(DateTimeFormat, m.StockTimeEnd) + if err == nil { + qs = qs.Where("first_stock_time