From 19e16471545a28063b4dce323781b9abf23230c6 Mon Sep 17 00:00:00 2001 From: chenlin Date: Wed, 20 Nov 2024 16:17:53 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=95=86=E5=93=81=E8=B5=84=E6=96=99?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E2=80=9C=E5=81=9C=E6=AD=A2=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E2=80=9D=E7=9A=84=E7=AD=9B=E9=80=89=EF=BC=9B=202=E3=80=81?= =?UTF-8?q?=E5=BA=93=E5=AD=98=E8=AF=A6=E6=83=85=E6=94=AF=E6=8C=81=E9=97=A8?= =?UTF-8?q?=E5=BA=97=E5=A4=8D=E9=80=89=EF=BC=9B=EF=BC=88=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=89=203=E3=80=81=E9=9B=B6=E5=94=AE?= =?UTF-8?q?=E6=98=8E=E7=BB=86=E3=80=81=E9=94=80=E5=94=AE=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E9=97=A8=E5=BA=97=E5=A4=8D=E9=80=89=EF=BC=9B?= =?UTF-8?q?=204=E3=80=81=E9=87=87=E8=B4=AD=E9=9C=80=E6=B1=82=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=8D=95=E7=8B=AC=E7=AD=9B=E9=80=89=E9=97=A8=E5=BA=97?= =?UTF-8?q?=EF=BC=9B=EF=BC=88=E5=A4=8D=E9=80=89=EF=BC=89=205=E3=80=81?= =?UTF-8?q?=E9=87=87=E8=B4=AD=E6=8A=A5=E8=A1=A8=E6=8C=89=E5=8D=95=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E5=A2=9E=E5=8A=A0=E5=85=A5=E5=BA=93=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E7=AD=9B=E9=80=89=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/apis/inventorymanage/Inventory.go | 29 +++ app/admin/models/commodity.go | 246 ++++++++++++++++++++ app/admin/models/erp_order.go | 56 ++--- app/admin/models/purchase.go | 210 ++++++++++------- app/admin/router/inventory.go | 17 +- docs/docs.go | 170 ++++++++++++-- docs/swagger.json | 170 ++++++++++++-- docs/swagger.yaml | 127 ++++++++-- 8 files changed, 842 insertions(+), 183 deletions(-) diff --git a/app/admin/apis/inventorymanage/Inventory.go b/app/admin/apis/inventorymanage/Inventory.go index e2fbda7..7074f06 100644 --- a/app/admin/apis/inventorymanage/Inventory.go +++ b/app/admin/apis/inventorymanage/Inventory.go @@ -115,6 +115,35 @@ func GetInventoryDetail(c *gin.Context) { return } +// GetInventoryDetailNew 查询库存详情(详情页专用,门店复选) +// @Summary 查询库存详情(详情页专用,门店复选) +// @Tags 库存管理 +// @Produce json +// @Accept json +// @Param request body models.NewErpStockCommodityListReq true "查询库存详情模型" +// @Success 200 {object} models.ErpStockCommodityListResp +// @Router /api/v1/inventory/detail [post] +func GetInventoryDetailNew(c *gin.Context) { + req := &models.NewErpStockCommodityListReq{} + if err := c.ShouldBindJSON(&req); err != nil { + app.Error(c, http.StatusBadRequest, errors.New("param err"), "参数错误") + return + } + + list, err := req.GetDetailListNew(c) + if err != nil { + if err.Error() == "该商品在调拨中" { + app.Error(c, http.StatusInternalServerError, err, err.Error()) + } else { + app.Error(c, http.StatusInternalServerError, err, "查询失败:"+err.Error()) + } + return + } + + app.OK(c, list, "OK") + return +} + // DeliveryCargo 出库 // @Summary 出库 // @Tags 库存管理 diff --git a/app/admin/models/commodity.go b/app/admin/models/commodity.go index d577b05..91ca573 100644 --- a/app/admin/models/commodity.go +++ b/app/admin/models/commodity.go @@ -310,6 +310,7 @@ type ErpCommodityListReq struct { IMEI string `json:"imei"` // 串码 ErpBarcode string `json:"erp_barcode"` // 商品条码 ErpSupplierId uint32 `json:"erp_supplier_id"` // 供应商id + PurchaseType uint32 `json:"purchase_type"` // 0-全部,1-正常采购,2-停止采购 PageIndex int `json:"pageIndex"` // 页码 PageSize int `json:"pageSize"` // 每页展示数据条数 IsExport uint32 `json:"is_export"` // 1-导出 @@ -453,6 +454,14 @@ func (m *ErpCommodityListReq) List() (*ErpCommodityListResp, error) { if m.ErpBarcode != "" { qs = qs.Where("erp_barcode LIKE ?", "%"+m.ErpBarcode+"%") } + if m.PurchaseType != 0 { + switch m.PurchaseType { + case 1: // 正常采购 + qs = qs.Where("stop_purchase = ?", 0) + case 2: // 停止采购 + qs = qs.Where("stop_purchase = ?", 1) + } + } var count int64 err := qs.Count(&count).Error @@ -2653,6 +2662,32 @@ type ErpStockCommodityListReq struct { //Sn string `json:"sn"` // 首次入库订单编号 } +// NewErpStockCommodityListReq 库存详情接口请求参数 +type NewErpStockCommodityListReq struct { + ScanCode string `json:"scan_code"` // 扫码枪扫码数据:串码/条码 + 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 + IsIMEI uint32 `json:"is_imei"` // 是否串码:0-查全部 1-查串码类 2-查非串码 + IMEI string `json:"imei"` // 串码 + StoreId []uint32 `json:"store_id"` // 门店编号 + SupplierId uint32 `json:"supplier_id"` // 供应商id + State []uint32 `json:"state"` // 库存状态:1-在库 2-已售 3-采购退货 4-调拨中 5-出库(前端只看1,4) + OriginalSn string `json:"original_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"` // 总库龄 + PageIndex int `json:"pageIndex"` // 页码 + PageSize int `json:"pageSize"` // 每页展示数据条数 + IsExport uint32 `json:"is_export"` // 是否导出excel:1-导出 + StockSortFlag uint32 `json:"stock_sort_flag"` // 排序方式:0-按入库时间降序排列(默认),1-按入库时间升序排列 + //Sn string `json:"sn"` // 首次入库订单编号 +} + // ErpStockCommodityListResp 库存详情接口响应参数 type ErpStockCommodityListResp struct { List []ErpStockCommodity `json:"list"` @@ -2776,6 +2811,217 @@ func (m *ErpStockCommodityListReq) GetDetailList(c *gin.Context, nType uint32) ( return resp, nil } +// GetDetailListNew 查看库存详情 +func (m *NewErpStockCommodityListReq) GetDetailListNew(c *gin.Context) (*ErpStockCommodityListResp, error) { + resp := &ErpStockCommodityListResp{ + PageIndex: m.PageIndex, + PageSize: m.PageSize, + } + page := m.PageIndex - 1 + if page < 0 { + page = 0 + } + if m.PageSize == 0 { + m.PageSize = 10 + } + + if m.ErpStockId != 0 { + updateCommodityStock(m.ErpStockId) // 同步详情表的库存id + } + + // 出库数据不查询 + qs := orm.Eloquent.Table("erp_stock_commodity") + + // 非管理员才判断所属门店 + if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") { + sysUser, err := GetSysUserByCtx(c) + if err != nil { + return nil, err + } + + // 返回sysUser未过期的门店id列表 + storeList := GetValidStoreIDs(sysUser.StoreData) + if len(m.StoreId) != 0 { + if len(CompareLists(storeList, m.StoreId)) == 0 { + return nil, errors.New("您没有该门店权限") + } + } else { + if len(storeList) > 0 { + if len(storeList) == 1 { + qs = qs.Where("store_id = ?", storeList[0]) + } else { + qs = qs.Where("store_id IN (?)", storeList) + } + } else { + return nil, errors.New("用户未绑定门店") + } + } + } + + // 构建查询条件 + m.buildQueryConditionsNew(qs) + es := qs + + var count int64 + if err := qs.Count(&count).Error; err != nil { + logger.Error("count err:", logger.Field("err", err)) + return resp, err + } + + nTotalCount := &struct { + TotalWholesalePrice float64 `json:"total_wholesale_price"` + TotalStaffCostPrice float64 `json:"total_staff_cost_price"` + }{} + err := es.Debug().Select("SUM(wholesale_price) as total_wholesale_price, SUM(staff_cost_price) as total_staff_cost_price"). + Scan(&nTotalCount).Error + if err != nil { + logger.Error("count err:", logger.Field("err", err)) + return resp, err + } + + //获取库存商品列表 + var commodities []ErpStockCommodity + if m.IsExport == 1 { + err := qs.Find(&commodities).Order("stock_time DESC,id DESC").Error + if err != nil && !errors.Is(err, RecordNotFound) { + logger.Error("find err:", logger.Field("err", err)) + return resp, err + } + ErpStockCommodityListSetAge(commodities) + + listExport, err := InventoryDetailListExport(commodities, c) + if err != nil { + //logger.Error("list export err:", err) + } + resp.ExportUrl = listExport + } else { + if m.StockSortFlag == 1 { + err = qs.Offset(page * m.PageSize).Limit(m.PageSize).Order("stock_time ASC,id ASC").Find(&commodities).Error + } else { + err = qs.Offset(page * m.PageSize).Limit(m.PageSize).Order("stock_time DESC,id DESC").Find(&commodities).Error + } + if err != nil && !errors.Is(err, RecordNotFound) { + //logger.Error("erp commodity list err:", err) + return resp, err + } + ErpStockCommodityListSetAge(commodities) + ErpStockCommodityListSetCategoryNumber(commodities) + resp.List = commodities + } + + if len(commodities) == 1 && commodities[0].State == InAllot && m.ScanCode != "" { + return nil, errors.New("该商品在调拨中") + } + + //跟之前保持一致 + resp.Total = int(count) + resp.PageIndex = page + 1 + resp.PageSize = m.PageSize + resp.TotalWholesalePrice = math.Round(nTotalCount.TotalWholesalePrice*100) / 100 + resp.TotalStaffPrice = math.Round((nTotalCount.TotalStaffCostPrice+nTotalCount.TotalWholesalePrice)*100) / 100 + + return resp, nil +} + +// buildQueryConditions 根据请求参数构建查询条件 +func (m *NewErpStockCommodityListReq) buildQueryConditionsNew(qs *gorm.DB) { + if m.ScanCode != "" { + qs = qs.Where("erp_barcode = ? or imei = ?", m.ScanCode, m.ScanCode) + qs = qs.Where("state in (?)", []uint32{InStock, InAllot}) + } else { + qs = qs.Where("state in (?)", []uint32{InStock, InAllot}) + 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.IsIMEI != 0 { // 是否串码 + if m.IsIMEI == 1 { // 查串码数据 + qs = qs.Where("imei_type != ?", NoIMEICommodity) + } else if m.IsIMEI == 2 { // 查非串码数据 + qs = qs.Where("imei_type = ?", NoIMEICommodity) + } + } + + if m.SerialNumber != "" { //商品编号 + qs = qs.Where("commodity_serial_number=?", m.SerialNumber) + } + + if len(m.CommodityName) != 0 { //商品名称 + qs = qs.Where("erp_commodity_name IN (?)", m.CommodityName) + } + + if m.ErpCategoryId != 0 { //商品分类id + categoryList, _ := GetSubcategoryIds(m.ErpCategoryId) + if categoryList == nil { + categoryList = append(categoryList, m.ErpCategoryId) + } + + qs = qs.Where("erp_category_id in ?", categoryList) + } + + if m.IMEI != "" { //商品串码 + qs = qs.Where("imei=?", m.IMEI) + } + + if len(m.StoreId) != 0 { //门店编号 + qs = qs.Where("store_id in ?", m.StoreId) + } + + if m.SupplierId != 0 { //供应商id + qs = qs.Where("erp_supplier_id=?", m.SupplierId) + } + + defaultStates := []int{1, 4} + if len(m.State) != 0 { + if len(m.State) == 1 { + qs = qs.Where("state = ?", m.State[0]) + } else { + qs = qs.Where("state IN (?)", m.State) + } + } else { + qs = qs.Where("state IN (?)", defaultStates) + } + + if m.OriginalSn != "" { //首次入库订单编号 + qs = qs.Where("original_sn=?", m.OriginalSn) + } + + if m.StorageType != 0 { //首次入库方式 + qs = qs.Where("storage_type=?", m.StorageType) + } + + if m.StockTimeStart != "" { //最近入库开始时间 + startTime, err := time.Parse(QueryTimeFormat, m.StockTimeStart) + if err == nil { + qs = qs.Where("stock_time>?", startTime) + } else { + //logger.Error("stock time start parse err:", err) + } + } + + if m.StockTimeEnd != "" { //最近入库结束时间 + endTime, err := time.Parse(QueryTimeFormat, m.StockTimeEnd) + if err == nil { + qs = qs.Where("stock_time 1 { err = orm.Eloquent.Table("erp_stock_commodity"). Where("state = ? AND updated_at BETWEEN ? AND ? AND store_id in (?) AND erp_commodity_id IN (?)", @@ -2283,7 +2288,7 @@ func getErpPurchaseDemandHide(req *GetErpPurchaseDemandReq, c *gin.Context) (*Ge } // 批量查询门店信息 - stores, err := GetOnlineStores(c) + stores, err := GetOnlineStores(c, req.StoreId) if err != nil { return nil, err } @@ -2714,59 +2719,80 @@ func GetLastMonthRange() (time.Time, time.Time) { } // GetOnlineStores 查询有效门店信息 -func GetOnlineStores(c *gin.Context) ([]Store, error) { +func GetOnlineStores(c *gin.Context, reqStoreList []uint32) ([]Store, error) { user, err := GetSysUserByCtx(c) if err != nil { return nil, err } + var stores []Store if user.RoleId == 1 { // 系统管理员 - var stores []Store err = orm.Eloquent.Table("store").Where("cooperative_business_id = ? ", user.CooperativeBusinessId).Find(&stores).Error if err != nil { return nil, err } - return stores, nil - } - - // 解析门店数据 - if err := json.Unmarshal([]byte(user.StoreData), &user.StoreList); err != nil { - return nil, err - } - - if len(user.StoreList) == 0 { - return nil, errors.New("no stores found") - } - - // 当前时间 - now := time.Now() - - // 过滤掉过期的门店 - validStores := make([]Store, 0) - for _, store := range user.StoreList { - expireTime, err := time.Parse(StoreDateTimeFormat, store.ExpireTime) - if err != nil { - log.Println("Error parsing time:", err, "ExpireTime:", store.ExpireTime) - continue + } else { + // 解析门店数据 + if err = json.Unmarshal([]byte(user.StoreData), &user.StoreList); err != nil { + return nil, err } - // 包含当天有效时间 - expireTime = expireTime.Add(24*time.Hour - time.Second) - if expireTime.After(now) { - tempStore := Store{ - Name: store.StoreName, + if len(user.StoreList) == 0 { + return nil, errors.New("no stores found") + } + + // 当前时间 + now := time.Now() + + // 过滤掉过期的门店 + validStores := make([]Store, 0) + for _, store := range user.StoreList { + expireTime, err := time.Parse(StoreDateTimeFormat, store.ExpireTime) + if err != nil { + log.Println("Error parsing time:", err, "ExpireTime:", store.ExpireTime) + continue + } + + // 包含当天有效时间 + expireTime = expireTime.Add(24*time.Hour - time.Second) + if expireTime.After(now) { + tempStore := Store{ + Name: store.StoreName, + } + tempStore.ID = uint32(store.StoreID) + stores = append(validStores, tempStore) } - tempStore.ID = uint32(store.StoreID) - validStores = append(validStores, tempStore) } } - if len(validStores) == 0 { + if len(stores) == 0 { return nil, nil } - return validStores, nil + // 如果 reqStoreList 不为空,筛选匹配的门店 + if len(reqStoreList) > 0 { + reqStoreSet := make(map[uint32]struct{}, len(reqStoreList)) + for _, storeID := range reqStoreList { + reqStoreSet[storeID] = struct{}{} + } + + var matchedStores []Store + for _, store := range stores { + if _, exists := reqStoreSet[store.ID]; exists { + matchedStores = append(matchedStores, store) + } + } + + // 如果没有匹配的门店,返回空结果 + if len(matchedStores) == 0 { + return nil, nil + } + + return matchedStores, nil + } + + return stores, nil } type Result struct { @@ -3465,7 +3491,7 @@ func getReportByOrderFromCommon(req *ErpPurchaseReportByOrderReq, c *gin.Context logger.Errorf("erpPurchaseOrderList err:", err) return nil, err } - qs = qs.Where("erp_purchase_order.audit_time > ?", parse) + qs = qs.Where("erp_purchase_order.audit_time >= ?", parse) } if req.AuditTimeEnd != "" { // 审核结束时间 parse, err := time.Parse(QueryTimeFormat, req.AuditTimeEnd) @@ -3474,7 +3500,7 @@ func getReportByOrderFromCommon(req *ErpPurchaseReportByOrderReq, c *gin.Context return nil, err } //parse = parse.AddDate(0, 0, 1) - qs = qs.Where("erp_purchase_order.audit_time < ?", parse) + qs = qs.Where("erp_purchase_order.audit_time <= ?", parse) } if req.ErpCommodityName != "" { // 商品名称 qs = qs.Where("erp_purchase_commodity.erp_commodity_name=?", req.ErpCommodityName) @@ -3495,7 +3521,7 @@ func getReportByOrderFromCommon(req *ErpPurchaseReportByOrderReq, c *gin.Context } resp.Total = int(count) var orders []ErpPurchaseOrder - if req.ErpCategoryID != 0 || req.ErpCommodityName != "" || req.IsExport == 1 { + if req.ErpCategoryID != 0 || req.ErpCommodityName != "" || req.InventoryTimeStart != "" || req.IsExport == 1 { err = qs.Order("erp_purchase_order.id DESC").Distinct("erp_purchase_order.*").Find(&orders).Error } else { err = qs.Order("erp_purchase_order.id DESC").Distinct("erp_purchase_order.*"). @@ -3548,9 +3574,10 @@ func getReportByOrderFromCommon(req *ErpPurchaseReportByOrderReq, c *gin.Context if err != nil { return nil, err } - //if reportByOrderData.CommodityData == nil { - // continue - //} + + if reportByOrderData.CommodityData == nil && req.InventoryTimeStart != "" { + continue + } reportByOrderData.Amount = nAmount reportByOrderData.Amount = math.Round(reportByOrderData.Amount*100) / 100 @@ -3564,7 +3591,19 @@ func getReportByOrderFromCommon(req *ErpPurchaseReportByOrderReq, c *gin.Context nTotalCount += nCount } - if req.ErpCategoryID != 0 || req.ErpCommodityName != "" { + if req.IsExport == 1 { + resp.Total = len(reportByOrderDataList) + resp.List = reportByOrderDataList + nTotalAmount = math.Round(nTotalAmount*100) / 100 + resp.Amount = nTotalAmount + resp.Count = nTotalCount + filePath, err := reportByOrderExport(resp) + if err != nil { + return nil, err + } + resp = &ErpPurchaseReportByOrderResp{} + resp.ExportUrl = filePath + } else if req.ErpCategoryID != 0 || req.ErpCommodityName != "" || req.InventoryTimeStart != "" { resp.Total = len(reportByOrderDataList) // 计算分页所需的切片索引 startIndex := page * req.PageSize @@ -3588,15 +3627,6 @@ func getReportByOrderFromCommon(req *ErpPurchaseReportByOrderReq, c *gin.Context resp.Count = totalCount } - if req.IsExport == 1 { - filePath, err := reportByOrderExport(resp) - if err != nil { - return nil, err - } - resp = &ErpPurchaseReportByOrderResp{} - resp.ExportUrl = filePath - } - return resp, nil } @@ -3685,6 +3715,22 @@ func getOrderInventoryInfo(req *ErpPurchaseReportByOrderReq, erpPurchaseOrderId } qs = qs.Where("commodity_serial_number LIKE ?", categoryInfo.Number+"%") } + if req.InventoryTimeStart != "" { // 入库开始时间 + parse, err := time.Parse(QueryTimeFormat, req.InventoryTimeStart) + if err != nil { + logger.Errorf("erpPurchaseOrderList err:", err) + return nil, 0, 0, err + } + qs = qs.Where("created_at >= ?", parse) + } + if req.InventoryTimeEnd != "" { // 入库结束时间 + parse, err := time.Parse(QueryTimeFormat, req.InventoryTimeEnd) + if err != nil { + logger.Errorf("erpPurchaseOrderList err:", err) + return nil, 0, 0, err + } + qs = qs.Where("created_at <= ?", parse) + } err := qs.Find(&inventoryList).Error if err != nil { @@ -3697,6 +3743,10 @@ func getOrderInventoryInfo(req *ErpPurchaseReportByOrderReq, erpPurchaseOrderId // return nil, 0, 0, nil //} + if len(inventoryList) == 0 && req.InventoryTimeStart != "" { + return nil, 0, 0, nil + } + // 使用 map 来组合相同 ErpCommodityId 的数据 //commodityMap := make(map[uint32]ErpPurchaseCommodityData) commodityMap := make(map[uint32]map[time.Time]ErpPurchaseCommodityData) diff --git a/app/admin/router/inventory.go b/app/admin/router/inventory.go index dca2e22..93988e4 100644 --- a/app/admin/router/inventory.go +++ b/app/admin/router/inventory.go @@ -9,14 +9,15 @@ import ( func registerInventoryManageRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) { r := v1.Group("/inventory").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()) - r.POST("list", inventorymanage.GetInventoryList) // 库存列表 - r.POST("detail", inventorymanage.GetInventoryDetail) // 库存详情 - r.POST("delivery", inventorymanage.DeliveryCargo) // 出库 - r.POST("print", inventorymanage.BatchPrint) // 批量打印 - r.POST("import", inventorymanage.BatchImport) // 库存导入 - r.POST("add_remark", inventorymanage.AddRemark) // 添加备注 - r.POST("query_code", inventorymanage.QueryCode) // 查询商品串码或者条码 - r.POST("query_name", inventorymanage.QueryName) // 通过名称模糊查询商品库存详情 + r.POST("list", inventorymanage.GetInventoryList) // 库存列表 + r.POST("detail", inventorymanage.GetInventoryDetail) // 库存详情 + r.POST("detail_new", inventorymanage.GetInventoryDetailNew) // 库存详情页专用接口,门店复选 + r.POST("delivery", inventorymanage.DeliveryCargo) // 出库 + r.POST("print", inventorymanage.BatchPrint) // 批量打印 + r.POST("import", inventorymanage.BatchImport) // 库存导入 + r.POST("add_remark", inventorymanage.AddRemark) // 添加备注 + r.POST("query_code", inventorymanage.QueryCode) // 查询商品串码或者条码 + r.POST("query_name", inventorymanage.QueryName) // 通过名称模糊查询商品库存详情 // 产品入库 r1 := v1.Group("/inventory/product").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()) diff --git a/docs/docs.go b/docs/docs.go index ef1dab1..0f6a720 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -3420,7 +3420,7 @@ const docTemplate = `{ "tags": [ "库存管理" ], - "summary": "查询库存详情", + "summary": "查询库存详情(详情页专用,门店复选)", "parameters": [ { "description": "查询库存详情模型", @@ -3428,7 +3428,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.ErpStockCommodityListReq" + "$ref": "#/definitions/models.NewErpStockCommodityListReq" } } ], @@ -8604,6 +8604,10 @@ const docTemplate = `{ "description": "每页展示数据条数", "type": "integer" }, + "purchase_type": { + "description": "0-全部,1-正常采购,2-停止采购", + "type": "integer" + }, "serial_number": { "description": "商品编号", "type": "string" @@ -10101,7 +10105,10 @@ const docTemplate = `{ }, "store_id": { "description": "门店ID", - "type": "integer" + "type": "array", + "items": { + "type": "integer" + } }, "tel": { "description": "客户手机号", @@ -10316,7 +10323,10 @@ const docTemplate = `{ }, "store_id": { "description": "门店ID", - "type": "integer" + "type": "array", + "items": { + "type": "integer" + } }, "tel": { "description": "客户手机号", @@ -10979,6 +10989,10 @@ const docTemplate = `{ "description": "收款人", "type": "string" }, + "amount": { + "description": "计划采购金额", + "type": "number" + }, "audit_time": { "description": "审核时间", "type": "string" @@ -11331,6 +11345,14 @@ const docTemplate = `{ "description": "经手人id", "type": "integer" }, + "inventory_time_end": { + "description": "入库结束时间", + "type": "string" + }, + "inventory_time_start": { + "description": "入库开始时间", + "type": "string" + }, "is_export": { "description": "1-导出", "type": "integer" @@ -11977,6 +11999,10 @@ const docTemplate = `{ "description": "商品分类", "type": "integer" }, + "is_export": { + "description": "1-导出", + "type": "integer" + }, "is_imei": { "description": "是否串码:0-查全部 1-查串码类 2-查非串码", "type": "integer" @@ -12543,6 +12569,13 @@ const docTemplate = `{ "sort_type": { "description": "排序类型:desc 降序、asc 升序", "type": "string" + }, + "store_id": { + "description": "门店id", + "type": "array", + "items": { + "type": "integer" + } } } }, @@ -14229,6 +14262,104 @@ const docTemplate = `{ } } }, + "models.NewErpStockCommodityListReq": { + "type": "object", + "properties": { + "age": { + "description": "最近库龄", + "type": "integer" + }, + "all_age": { + "description": "总库龄", + "type": "integer" + }, + "commodity_name": { + "description": "商品名称", + "type": "array", + "items": { + "type": "string" + } + }, + "erp_category_id": { + "description": "商品分类Id", + "type": "integer" + }, + "erp_commodity_id": { + "description": "商品id", + "type": "integer" + }, + "erp_stock_id": { + "description": "库存id", + "type": "integer" + }, + "imei": { + "description": "串码", + "type": "string" + }, + "is_export": { + "description": "是否导出excel:1-导出", + "type": "integer" + }, + "is_imei": { + "description": "是否串码:0-查全部 1-查串码类 2-查非串码", + "type": "integer" + }, + "original_sn": { + "description": "首次入库订单编号", + "type": "string" + }, + "pageIndex": { + "description": "页码", + "type": "integer" + }, + "pageSize": { + "description": "每页展示数据条数", + "type": "integer" + }, + "scan_code": { + "description": "扫码枪扫码数据:串码/条码", + "type": "string" + }, + "serial_number": { + "description": "商品编号", + "type": "string" + }, + "state": { + "description": "库存状态:1-在库 2-已售 3-采购退货 4-调拨中 5-出库(前端只看1,4)", + "type": "array", + "items": { + "type": "integer" + } + }, + "stock_sort_flag": { + "description": "排序方式:0-按入库时间降序排列(默认),1-按入库时间升序排列", + "type": "integer" + }, + "stock_time_end": { + "description": "最近入库结束时间", + "type": "string" + }, + "stock_time_start": { + "description": "最近入库开始时间", + "type": "string" + }, + "storage_type": { + "description": "首次入库方式:1-系统入库 2-采购入库", + "type": "integer" + }, + "store_id": { + "description": "门店编号", + "type": "array", + "items": { + "type": "integer" + } + }, + "supplier_id": { + "description": "供应商id", + "type": "integer" + } + } + }, "models.NewUserInviteRecordReq": { "type": "object", "properties": { @@ -15536,6 +15667,10 @@ const docTemplate = `{ "models.ReportAllotDetailData": { "type": "object", "properties": { + "allot_amount": { + "description": "调拨金额", + "type": "number" + }, "audit_time": { "description": "审核时间", "type": "string" @@ -16078,10 +16213,6 @@ const docTemplate = `{ "description": "实际零售价", "type": "number" }, - "cash_amount": { - "description": "现金收款", - "type": "number" - }, "count": { "description": "销售数量", "type": "integer" @@ -16094,14 +16225,6 @@ const docTemplate = `{ "description": "会员优惠", "type": "number" }, - "other_amount": { - "description": "其他付款方式", - "type": "number" - }, - "pos_amount": { - "description": "pos机收款", - "type": "number" - }, "retail_price": { "description": "指导零售价", "type": "number" @@ -16122,10 +16245,6 @@ const docTemplate = `{ "description": "销售员提成", "type": "number" }, - "scan_amount": { - "description": "扫码付", - "type": "number" - }, "staff_price": { "description": "员工成本价", "type": "number" @@ -16138,14 +16257,17 @@ const docTemplate = `{ "description": "门店提成", "type": "number" }, - "store_vm_amount": { - "description": "商场积分抵扣", - "type": "number" - }, "total_amount": { "description": "订单实收金额", "type": "number" }, + "total_cashier_data": { + "description": "TotalCashierData", + "type": "array", + "items": { + "$ref": "#/definitions/models.ErpOrderCashier" + } + }, "total_discount": { "description": "订单总优惠:订单所有商品零售优惠+会员优惠+会员积分抵扣之和", "type": "number" diff --git a/docs/swagger.json b/docs/swagger.json index 6a3e8d7..04c3b1c 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -3409,7 +3409,7 @@ "tags": [ "库存管理" ], - "summary": "查询库存详情", + "summary": "查询库存详情(详情页专用,门店复选)", "parameters": [ { "description": "查询库存详情模型", @@ -3417,7 +3417,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.ErpStockCommodityListReq" + "$ref": "#/definitions/models.NewErpStockCommodityListReq" } } ], @@ -8593,6 +8593,10 @@ "description": "每页展示数据条数", "type": "integer" }, + "purchase_type": { + "description": "0-全部,1-正常采购,2-停止采购", + "type": "integer" + }, "serial_number": { "description": "商品编号", "type": "string" @@ -10090,7 +10094,10 @@ }, "store_id": { "description": "门店ID", - "type": "integer" + "type": "array", + "items": { + "type": "integer" + } }, "tel": { "description": "客户手机号", @@ -10305,7 +10312,10 @@ }, "store_id": { "description": "门店ID", - "type": "integer" + "type": "array", + "items": { + "type": "integer" + } }, "tel": { "description": "客户手机号", @@ -10968,6 +10978,10 @@ "description": "收款人", "type": "string" }, + "amount": { + "description": "计划采购金额", + "type": "number" + }, "audit_time": { "description": "审核时间", "type": "string" @@ -11320,6 +11334,14 @@ "description": "经手人id", "type": "integer" }, + "inventory_time_end": { + "description": "入库结束时间", + "type": "string" + }, + "inventory_time_start": { + "description": "入库开始时间", + "type": "string" + }, "is_export": { "description": "1-导出", "type": "integer" @@ -11966,6 +11988,10 @@ "description": "商品分类", "type": "integer" }, + "is_export": { + "description": "1-导出", + "type": "integer" + }, "is_imei": { "description": "是否串码:0-查全部 1-查串码类 2-查非串码", "type": "integer" @@ -12532,6 +12558,13 @@ "sort_type": { "description": "排序类型:desc 降序、asc 升序", "type": "string" + }, + "store_id": { + "description": "门店id", + "type": "array", + "items": { + "type": "integer" + } } } }, @@ -14218,6 +14251,104 @@ } } }, + "models.NewErpStockCommodityListReq": { + "type": "object", + "properties": { + "age": { + "description": "最近库龄", + "type": "integer" + }, + "all_age": { + "description": "总库龄", + "type": "integer" + }, + "commodity_name": { + "description": "商品名称", + "type": "array", + "items": { + "type": "string" + } + }, + "erp_category_id": { + "description": "商品分类Id", + "type": "integer" + }, + "erp_commodity_id": { + "description": "商品id", + "type": "integer" + }, + "erp_stock_id": { + "description": "库存id", + "type": "integer" + }, + "imei": { + "description": "串码", + "type": "string" + }, + "is_export": { + "description": "是否导出excel:1-导出", + "type": "integer" + }, + "is_imei": { + "description": "是否串码:0-查全部 1-查串码类 2-查非串码", + "type": "integer" + }, + "original_sn": { + "description": "首次入库订单编号", + "type": "string" + }, + "pageIndex": { + "description": "页码", + "type": "integer" + }, + "pageSize": { + "description": "每页展示数据条数", + "type": "integer" + }, + "scan_code": { + "description": "扫码枪扫码数据:串码/条码", + "type": "string" + }, + "serial_number": { + "description": "商品编号", + "type": "string" + }, + "state": { + "description": "库存状态:1-在库 2-已售 3-采购退货 4-调拨中 5-出库(前端只看1,4)", + "type": "array", + "items": { + "type": "integer" + } + }, + "stock_sort_flag": { + "description": "排序方式:0-按入库时间降序排列(默认),1-按入库时间升序排列", + "type": "integer" + }, + "stock_time_end": { + "description": "最近入库结束时间", + "type": "string" + }, + "stock_time_start": { + "description": "最近入库开始时间", + "type": "string" + }, + "storage_type": { + "description": "首次入库方式:1-系统入库 2-采购入库", + "type": "integer" + }, + "store_id": { + "description": "门店编号", + "type": "array", + "items": { + "type": "integer" + } + }, + "supplier_id": { + "description": "供应商id", + "type": "integer" + } + } + }, "models.NewUserInviteRecordReq": { "type": "object", "properties": { @@ -15525,6 +15656,10 @@ "models.ReportAllotDetailData": { "type": "object", "properties": { + "allot_amount": { + "description": "调拨金额", + "type": "number" + }, "audit_time": { "description": "审核时间", "type": "string" @@ -16067,10 +16202,6 @@ "description": "实际零售价", "type": "number" }, - "cash_amount": { - "description": "现金收款", - "type": "number" - }, "count": { "description": "销售数量", "type": "integer" @@ -16083,14 +16214,6 @@ "description": "会员优惠", "type": "number" }, - "other_amount": { - "description": "其他付款方式", - "type": "number" - }, - "pos_amount": { - "description": "pos机收款", - "type": "number" - }, "retail_price": { "description": "指导零售价", "type": "number" @@ -16111,10 +16234,6 @@ "description": "销售员提成", "type": "number" }, - "scan_amount": { - "description": "扫码付", - "type": "number" - }, "staff_price": { "description": "员工成本价", "type": "number" @@ -16127,14 +16246,17 @@ "description": "门店提成", "type": "number" }, - "store_vm_amount": { - "description": "商场积分抵扣", - "type": "number" - }, "total_amount": { "description": "订单实收金额", "type": "number" }, + "total_cashier_data": { + "description": "TotalCashierData", + "type": "array", + "items": { + "$ref": "#/definitions/models.ErpOrderCashier" + } + }, "total_discount": { "description": "订单总优惠:订单所有商品零售优惠+会员优惠+会员积分抵扣之和", "type": "number" diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 1a66916..915f43e 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -1620,6 +1620,9 @@ definitions: pageSize: description: 每页展示数据条数 type: integer + purchase_type: + description: 0-全部,1-正常采购,2-停止采购 + type: integer serial_number: description: 商品编号 type: string @@ -2717,7 +2720,9 @@ definitions: type: string store_id: description: 门店ID - type: integer + items: + type: integer + type: array tel: description: 客户手机号 type: string @@ -2871,7 +2876,9 @@ definitions: type: string store_id: description: 门店ID - type: integer + items: + type: integer + type: array tel: description: 客户手机号 type: string @@ -3354,6 +3361,9 @@ definitions: account_holder: description: 收款人 type: string + amount: + description: 计划采购金额 + type: number audit_time: description: 审核时间 type: string @@ -3612,6 +3622,12 @@ definitions: handler_id: description: 经手人id type: integer + inventory_time_end: + description: 入库结束时间 + type: string + inventory_time_start: + description: 入库开始时间 + type: string is_export: description: 1-导出 type: integer @@ -4084,6 +4100,9 @@ definitions: erp_category_id: description: 商品分类 type: integer + is_export: + description: 1-导出 + type: integer is_imei: description: 是否串码:0-查全部 1-查串码类 2-查非串码 type: integer @@ -4488,6 +4507,11 @@ definitions: sort_type: description: 排序类型:desc 降序、asc 升序 type: string + store_id: + description: 门店id + items: + type: integer + type: array type: object models.GetErpPurchaseDemandResp: properties: @@ -5694,6 +5718,78 @@ definitions: visible: type: string type: object + models.NewErpStockCommodityListReq: + properties: + age: + description: 最近库龄 + type: integer + all_age: + description: 总库龄 + type: integer + commodity_name: + description: 商品名称 + items: + type: string + type: array + erp_category_id: + description: 商品分类Id + type: integer + erp_commodity_id: + description: 商品id + type: integer + erp_stock_id: + description: 库存id + type: integer + imei: + description: 串码 + type: string + is_export: + description: 是否导出excel:1-导出 + type: integer + is_imei: + description: 是否串码:0-查全部 1-查串码类 2-查非串码 + type: integer + original_sn: + description: 首次入库订单编号 + type: string + pageIndex: + description: 页码 + type: integer + pageSize: + description: 每页展示数据条数 + type: integer + scan_code: + description: 扫码枪扫码数据:串码/条码 + type: string + serial_number: + description: 商品编号 + type: string + state: + description: 库存状态:1-在库 2-已售 3-采购退货 4-调拨中 5-出库(前端只看1,4) + items: + type: integer + type: array + stock_sort_flag: + description: 排序方式:0-按入库时间降序排列(默认),1-按入库时间升序排列 + type: integer + stock_time_end: + description: 最近入库结束时间 + type: string + stock_time_start: + description: 最近入库开始时间 + type: string + storage_type: + description: 首次入库方式:1-系统入库 2-采购入库 + type: integer + store_id: + description: 门店编号 + items: + type: integer + type: array + supplier_id: + description: 供应商id + type: integer + type: object models.NewUserInviteRecordReq: properties: create_end_time: @@ -6629,6 +6725,9 @@ definitions: type: object models.ReportAllotDetailData: properties: + allot_amount: + description: 调拨金额 + type: number audit_time: description: 审核时间 type: string @@ -7029,9 +7128,6 @@ definitions: amount: description: 实际零售价 type: number - cash_amount: - description: 现金收款 - type: number count: description: 销售数量 type: integer @@ -7041,12 +7137,6 @@ definitions: member_discount: description: 会员优惠 type: number - other_amount: - description: 其他付款方式 - type: number - pos_amount: - description: pos机收款 - type: number retail_price: description: 指导零售价 type: number @@ -7062,9 +7152,6 @@ definitions: salesman_per: description: 销售员提成 type: number - scan_amount: - description: 扫码付 - type: number staff_price: description: 员工成本价 type: number @@ -7074,12 +7161,14 @@ definitions: store_per: description: 门店提成 type: number - store_vm_amount: - description: 商场积分抵扣 - type: number total_amount: description: 订单实收金额 type: number + total_cashier_data: + description: TotalCashierData + items: + $ref: '#/definitions/models.ErpOrderCashier' + type: array total_discount: description: 订单总优惠:订单所有商品零售优惠+会员优惠+会员积分抵扣之和 type: number @@ -10735,7 +10824,7 @@ paths: name: request required: true schema: - $ref: '#/definitions/models.ErpStockCommodityListReq' + $ref: '#/definitions/models.NewErpStockCommodityListReq' produces: - application/json responses: @@ -10743,7 +10832,7 @@ paths: description: OK schema: $ref: '#/definitions/models.ErpStockCommodityListResp' - summary: 查询库存详情 + summary: 查询库存详情(详情页专用,门店复选) tags: - 库存管理 /api/v1/inventory/import: