From c7ab2b1957b7f8536b55e37a7f11158ee4e81c59 Mon Sep 17 00:00:00 2001 From: chenlin Date: Fri, 9 Aug 2024 19:23:21 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8D=E8=BF=9B=E9=94=80=E5=AD=98?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E6=97=B6=E9=97=B4=E6=AE=B5=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E4=B8=8D=E5=87=86=E7=A1=AE=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/models/decision.go | 703 +++++++++++++++++++++++++-------- app/admin/models/purchase.go | 71 ++-- app/admin/router/usermanage.go | 2 +- 3 files changed, 586 insertions(+), 190 deletions(-) diff --git a/app/admin/models/decision.go b/app/admin/models/decision.go index a18cd25..a74e559 100644 --- a/app/admin/models/decision.go +++ b/app/admin/models/decision.go @@ -122,7 +122,11 @@ func (m *ErpDecisionReportReq) DecisionReportList(c *gin.Context) (*ErpDecisionR for _, store := range m.StoreId { storeIDs = append(storeIDs, store) } - qs = qs.Where("store_id IN (?)", storeIDs) + if len(storeIDs) == 1 { + qs = qs.Where("store_id IN = ?", storeIDs[0]) + } else { + qs = qs.Where("store_id IN (?)", storeIDs) + } } if len(m.CommodityName) > 0 { // 商品名称 @@ -130,7 +134,11 @@ func (m *ErpDecisionReportReq) DecisionReportList(c *gin.Context) (*ErpDecisionR for _, commodityName := range m.CommodityName { commodityNames = append(commodityNames, commodityName) } - qs = qs.Where("erp_commodity_name IN (?)", commodityNames) + if len(commodityNames) == 1 { + qs = qs.Where("erp_commodity_name = ?", commodityNames[0]) + } else { + qs = qs.Where("erp_commodity_name IN (?)", commodityNames) + } } if len(m.CategoryID) > 0 { // 商品分类id @@ -138,7 +146,11 @@ func (m *ErpDecisionReportReq) DecisionReportList(c *gin.Context) (*ErpDecisionR for _, category := range m.CategoryID { categoryIDs = append(categoryIDs, category) } - qs = qs.Where("erp_category_id IN (?)", categoryIDs) + if len(categoryIDs) == 1 { + qs = qs.Where("erp_category_id = ?", categoryIDs[0]) + } else { + qs = qs.Where("erp_category_id IN (?)", categoryIDs) + } } var count int64 @@ -159,23 +171,30 @@ func (m *ErpDecisionReportReq) DecisionReportList(c *gin.Context) (*ErpDecisionR return nil, err } - if len(m.StoreId) != 1 && m.IsExport != 1 { // 查询所有门店数据 + if len(m.StoreId) != 1 && m.IsExport != 1 { // 查询多个or所有门店数据 // 剔除商品id重复的数据 - var trimCommodities []ErpStock - tempCommodityMap := make(map[uint32]ErpStock) + var tempCommodityMap = make(map[uint32]ErpStock) for i, item := range commodities { - if _, found := tempCommodityMap[item.ErpCommodityId]; found { - commodities[i].DecisionStoreId = append(commodities[i].DecisionStoreId, item.StoreId) - continue + if existingItem, found := tempCommodityMap[item.ErpCommodityId]; found { + // 在已有记录的 DecisionStoreId 中追加 StoreId + existingItem.DecisionStoreId = append(existingItem.DecisionStoreId, item.StoreId) + // 更新 map 中的记录 + tempCommodityMap[item.ErpCommodityId] = existingItem } else { if len(m.StoreId) != 0 { commodities[i].StoreId = 0 } commodities[i].DecisionStoreId = append(commodities[i].DecisionStoreId, item.StoreId) tempCommodityMap[item.ErpCommodityId] = commodities[i] - trimCommodities = append(trimCommodities, commodities[i]) } } + + // 从 map 中提取所有不重复的商品记录到 trimCommodities + trimCommodities := make([]ErpStock, 0, len(tempCommodityMap)) + for _, item := range tempCommodityMap { + trimCommodities = append(trimCommodities, item) + } + SortStockCommodities(trimCommodities) // 分页 @@ -203,58 +222,78 @@ func (m *ErpDecisionReportReq) DecisionReportList(c *gin.Context) (*ErpDecisionR go func(item ErpStock) { defer wg.Done() - var reportData DecisionReportData + //var reportData DecisionReportData + //reportData.CommodityId = item.ErpCommodityId + //reportData.CommodityName = item.ErpCommodityName + //reportData.CommoditySerialNumber = item.CommoditySerialNumber + //reportData.CategoryID = item.ErpCategoryId + //reportData.CategoryName = item.ErpCategoryName + // + //// 查询期初库存、期初金额 + //systemStartData, _ := getSystemStartCount(m, item) + //reportData.BeginStock = systemStartData.BeginStock + //reportData.BeginAmount = systemStartData.BeginAmount + // + //// 查询采购进货数量 + //purchaseStockData, _ := getPurchaseStockCount(m, item) + //reportData.PurchaseStock = purchaseStockData.PurchaseStock + // + //// 查询采购退货数量 + //purchaseReturnData, _ := getPurchaseReturnCount(m, item) + //reportData.PurchaseReturn = purchaseReturnData.PurchaseReturn + // + //// 查询零售销售数量 + //saleOutData, _ := getSaleOutCount(m, item) + //reportData.OrderSale = saleOutData.OrderSale + // + //// 查询零售退货数量 + //saleReturnData, _ := getSaleReturnCount(m, item) + //reportData.OrderReject = saleReturnData.OrderReject + // + //// 查询调拨入库数量 + //allotInData, _ := getAllotInCount(m, item) + //reportData.AllotIn = allotInData.AllotIn + // + //// 查询在途库存(入库)数量 + //allotWaitInData, _ := getAllotWaitInCount(m, item) + //reportData.AllotWaitIn = allotWaitInData.AllotWaitIn + // + //// 查询调拨出库数量 + //allotOutData, _ := getAllotOutCount(m, item) + //reportData.AllotOut = allotOutData.AllotOut + // + //// 查询在途库存(出库)数量 + //allotWaitOutData, _ := getAllotWaitOutCount(m, item) + //reportData.AllotWaitOut = allotWaitOutData.AllotWaitOut + // + //// 查询产品入库数量:产品入库 + //productData, _ := getProductCount(m, item) + //reportData.ProductIn = productData.ProductIn + // + //// 查询系统出库数据:系统出库 + //systemOutData, _ := getSystemOutCount(m, item) + //reportData.SystemOut = systemOutData.SystemOut + // + //// 查询盘点入库数量 + //changeAddData, _ := getChangeAddCount(m, item) + //reportData.CheckIn = changeAddData.CheckIn + // + //// 查询盘点出库数量 + //changeReduceData, _ := getChangeReduceCount(m, item) + //reportData.CheckOut = changeReduceData.CheckOut + // + //// 查询期末库存、期末金额 + //systemEndData, _ := getSystemEndCount(m, item) + //reportData.EndStock = systemEndData.EndStock + //reportData.EndAmount = systemEndData.EndAmount + + reportData, _ := calculateInventoryReport(m, item) reportData.CommodityId = item.ErpCommodityId reportData.CommodityName = item.ErpCommodityName reportData.CommoditySerialNumber = item.CommoditySerialNumber reportData.CategoryID = item.ErpCategoryId reportData.CategoryName = item.ErpCategoryName - // 查询各项数据 - systemStartData, _ := getSystemStartCount(m, item) - reportData.BeginStock = systemStartData.BeginStock - reportData.BeginAmount = systemStartData.BeginAmount - - purchaseStockData, _ := getPurchaseStockCount(m, item) - reportData.PurchaseStock = purchaseStockData.PurchaseStock - - purchaseReturnData, _ := getPurchaseReturnCount(m, item) - reportData.PurchaseReturn = purchaseReturnData.PurchaseReturn - - saleOutData, _ := getSaleOutCount(m, item) - reportData.OrderSale = saleOutData.OrderSale - - saleReturnData, _ := getSaleReturnCount(m, item) - reportData.OrderReject = saleReturnData.OrderReject - - allotInData, _ := getAllotInCount(m, item) - reportData.AllotIn = allotInData.AllotIn - - allotWaitInData, _ := getAllotWaitInCount(m, item) - reportData.AllotWaitIn = allotWaitInData.AllotWaitIn - - allotOutData, _ := getAllotOutCount(m, item) - reportData.AllotOut = allotOutData.AllotOut - - allotWaitOutData, _ := getAllotWaitOutCount(m, item) - reportData.AllotWaitOut = allotWaitOutData.AllotWaitOut - - productData, _ := getProductCount(m, item) - reportData.ProductIn = productData.ProductIn - - systemOutData, _ := getSystemOutCount(m, item) - reportData.SystemOut = systemOutData.SystemOut - - changeAddData, _ := getChangeAddCount(m, item) - reportData.CheckIn = changeAddData.CheckIn - - changeReduceData, _ := getChangeReduceCount(m, item) - reportData.CheckOut = changeReduceData.CheckOut - - systemEndData, _ := getSystemEndCount(m, item) - reportData.EndStock = systemEndData.EndStock - reportData.EndAmount = systemEndData.EndAmount - // 发送结果到通道 ch <- reportData }(item) @@ -331,57 +370,445 @@ func (m *ErpDecisionReportReq) DecisionReportList(c *gin.Context) (*ErpDecisionR return resp, nil } -// 查询期初库存、期初金额 -// 没有时间:默认为系统入库数量 -// 某一天:默认系统入库数量 - 某一天前的所有出库数量 + 某一天前的所有入库数量 -// 某个时间段:默认系统入库数量 - 开始时间前的所有出库数量 + 开始时间前的所有入库数量 -func getSystemStartCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionReportData, error) { +func calculateInventoryReport(m *ErpDecisionReportReq, item ErpStock) (DecisionReportData, error) { var reportData DecisionReportData - qs := orm.Eloquent.Debug().Table("erp_stock_commodity") - - // 进行条件查询 - if req.StartTime != "" { // 出入库开始时间 - parse, err := time.Parse(QueryTimeFormat, req.StartTime) - if err != nil { - logger.Errorf("getSystemStartCount err:", err) - return DecisionReportData{}, err - } - qs = qs.Where("created_at > ?", parse) - } - - if req.EndTime != "" { // 出入库结束时间 - parse, err := time.Parse(QueryTimeFormat, req.EndTime) - if err != nil { - logger.Errorf("getSystemStartCount err:", err) - return DecisionReportData{}, err - } - qs = qs.Where("created_at <= ?", parse) - } - - var err error - if stock.StoreId != 0 { - if len(stock.DecisionStoreId) > 1 { - err = qs.Select("SUM(count) as begin_stock, SUM(wholesale_price) as begin_amount"). - Where("storage_type = ? and store_id in (?) and erp_commodity_id = ?", SystemInventory, stock.DecisionStoreId, - stock.ErpCommodityId).Find(&reportData).Error - } else { - err = qs.Select("SUM(count) as begin_stock, SUM(wholesale_price) as begin_amount"). - Where("storage_type = ? and store_id = ? and erp_commodity_id = ?", SystemInventory, stock.StoreId, - stock.ErpCommodityId).Find(&reportData).Error - } - } else { - err = qs.Select("SUM(count) as begin_stock, SUM(wholesale_price) as begin_amount"). - Where("storage_type = ? and erp_commodity_id = ?", SystemInventory, stock.ErpCommodityId). - Find(&reportData).Error - } + // Step 1: 查询期初库存和金额 + systemStartData, err := getSystemStartCount(m, item) if err != nil { return DecisionReportData{}, err } + reportData.BeginStock = systemStartData.BeginStock + reportData.BeginAmount = systemStartData.BeginAmount + + // Step 2: 查询期末库存和金额 + systemEndData, err := getSystemEndCount(m, item) + if err != nil { + return DecisionReportData{}, err + } + reportData.EndStock = systemEndData.EndStock + reportData.EndAmount = systemEndData.EndAmount + + // Step 3: 查询期间内的各类库存变动数据 + purchaseStockData, err := getPurchaseStockCount(m, item) + if err != nil { + return DecisionReportData{}, err + } + reportData.PurchaseStock = purchaseStockData.PurchaseStock + + purchaseReturnData, err := getPurchaseReturnCount(m, item) + if err != nil { + return DecisionReportData{}, err + } + reportData.PurchaseReturn = purchaseReturnData.PurchaseReturn + + saleOutData, err := getSaleOutCount(m, item) + if err != nil { + return DecisionReportData{}, err + } + reportData.OrderSale = saleOutData.OrderSale + + saleReturnData, err := getSaleReturnCount(m, item) + if err != nil { + return DecisionReportData{}, err + } + reportData.OrderReject = saleReturnData.OrderReject + + allotInData, err := getAllotInCount(m, item) + if err != nil { + return DecisionReportData{}, err + } + reportData.AllotIn = allotInData.AllotIn + + allotWaitInData, err := getAllotWaitInCount(m, item) + if err != nil { + return DecisionReportData{}, err + } + reportData.AllotWaitIn = allotWaitInData.AllotWaitIn + + allotOutData, err := getAllotOutCount(m, item) + if err != nil { + return DecisionReportData{}, err + } + reportData.AllotOut = allotOutData.AllotOut + + allotWaitOutData, err := getAllotWaitOutCount(m, item) + if err != nil { + return DecisionReportData{}, err + } + reportData.AllotWaitOut = allotWaitOutData.AllotWaitOut + + productData, err := getProductCount(m, item) + if err != nil { + return DecisionReportData{}, err + } + reportData.ProductIn = productData.ProductIn + + systemOutData, err := getSystemOutCount(m, item) + if err != nil { + return DecisionReportData{}, err + } + reportData.SystemOut = systemOutData.SystemOut + + changeAddData, err := getChangeAddCount(m, item) + if err != nil { + return DecisionReportData{}, err + } + reportData.CheckIn = changeAddData.CheckIn + + changeReduceData, err := getChangeReduceCount(m, item) + if err != nil { + return DecisionReportData{}, err + } + reportData.CheckOut = changeReduceData.CheckOut + + // Step 4: 计算调整库存逻辑(期初+入库-出库) + reportData.EndStock = reportData.BeginStock + reportData.PurchaseStock + reportData.AllotIn + reportData.ProductIn + reportData.CheckIn + if reportData.EndStock < (reportData.PurchaseReturn + reportData.OrderSale + reportData.AllotOut + reportData.SystemOut + reportData.CheckOut) { + reportData.EndStock = 0 + reportData.EndAmount = 0 + } else { + reportData.EndStock -= reportData.PurchaseReturn + reportData.OrderSale + reportData.AllotOut + reportData.SystemOut + reportData.CheckOut + } return reportData, nil } +func getSystemStartCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionReportData, error) { + var reportData DecisionReportData + + if req.StartTime != "" { // 有开始时间 + startTime, err := time.Parse(QueryTimeFormat, req.StartTime) + if err != nil { + logger.Errorf("getSystemStartCount err:", err) + return DecisionReportData{}, err + } + + // 计算开始时间的前一天 + previousDay := startTime.AddDate(0, 0, -1) + + // 获取系统入库数量 + var systemStartData DecisionReportData + qs := orm.Eloquent.Debug().Table("erp_stock_commodity"). + Select("SUM(count) as begin_stock, SUM(wholesale_price) as begin_amount"). + Where("storage_type = ? and erp_commodity_id = ?", SystemInventory, stock.ErpCommodityId). + Where("created_at <= ?", previousDay) + + if stock.StoreId != 0 { + if len(stock.DecisionStoreId) > 1 { + qs = qs.Where("store_id in (?)", stock.DecisionStoreId) + } else { + qs = qs.Where("store_id = ?", stock.DecisionStoreId) + } + } + + err = qs.Find(&systemStartData).Error + if err != nil { + return DecisionReportData{}, err + } + + // 获取开始时间前一天的所有出库数量(包括销售出库、系统出库和盘点出库) + var outStockData struct { + SoldOut uint32 `json:"sold_out"` + SystemOut uint32 `json:"system_out"` + CheckOut uint32 `json:"check_out"` + } + es := orm.Eloquent.Debug().Table("erp_stock_commodity"). + Select("SUM(CASE WHEN state = ? THEN count ELSE 0 END) AS sold_out, "+ + "SUM(CASE WHEN state = ? THEN count ELSE 0 END) AS system_out, "+ + "SUM(CASE WHEN state = ? THEN count ELSE 0 END) AS check_out", + SoldOut, SystemOut, CheckOut). + Where("updated_at <= ?", previousDay). + Where("state IN (?)", []int{SoldOut, SystemOut, CheckOut}). + Where("erp_commodity_id = ?", stock.ErpCommodityId) + + if stock.StoreId != 0 { + if len(stock.DecisionStoreId) > 1 { + es = es.Where("store_id in (?)", stock.DecisionStoreId) + } else { + es = es.Where("store_id = ?", stock.DecisionStoreId) + } + } + + err = es.Find(&outStockData).Error + if err != nil { + return DecisionReportData{}, err + } + + // 获取开始时间前一天的所有入库数量(包括采购入库、产品入库和盘点入库) + var inStockData struct { + PurchaseIn uint32 `json:"purchase_in"` + ProductIn uint32 `json:"product_in"` + CheckIn uint32 `json:"check_in"` + } + ts := orm.Eloquent.Debug().Table("erp_stock_commodity"). + Select("SUM(CASE WHEN storage_type = ? THEN count ELSE 0 END) AS purchase_in, "+ + "SUM(CASE WHEN storage_type = ? THEN count ELSE 0 END) AS product_in, "+ + "SUM(CASE WHEN storage_type = ? THEN count ELSE 0 END) AS check_in", + PurchaseInventory, ProductInventory, CheckInventory). + Where("created_at <= ?", previousDay). + Where("erp_commodity_id = ?", stock.ErpCommodityId) + + if stock.StoreId != 0 { + if len(stock.DecisionStoreId) > 1 { + ts = ts.Where("store_id in (?)", stock.DecisionStoreId) + } else { + ts = ts.Where("store_id = ?", stock.DecisionStoreId) + } + } + + err = ts.Find(&inStockData).Error + if err != nil { + return DecisionReportData{}, err + } + + // 计算期初库存 + beginStock := int64(systemStartData.BeginStock) - int64(outStockData.SoldOut) - int64(outStockData.SystemOut) - int64(outStockData.CheckOut) + + int64(inStockData.PurchaseIn) + int64(inStockData.ProductIn) + int64(inStockData.CheckIn) + + if beginStock < 0 { + beginStock = 0 // 确保库存不会为负 + } + reportData.BeginStock = uint32(beginStock) + reportData.BeginAmount = systemStartData.BeginAmount + + } else { + // 如果没有开始时间,直接获取系统入库数量作为期初库存 + qs := orm.Eloquent.Debug().Table("erp_stock_commodity"). + Select("SUM(count) as begin_stock, SUM(wholesale_price) as begin_amount"). + Where("storage_type = ? and erp_commodity_id = ?", SystemInventory, stock.ErpCommodityId) + + if stock.StoreId != 0 { + if len(stock.DecisionStoreId) > 1 { + qs = qs.Where("store_id in (?)", stock.DecisionStoreId) + } else { + qs = qs.Where("store_id = ?", stock.DecisionStoreId) + } + } + err := qs.Find(&reportData).Error + if err != nil { + return DecisionReportData{}, err + } + } + + return reportData, nil +} + +func getSystemEndCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionReportData, error) { + var reportData DecisionReportData + + qs := orm.Eloquent.Debug().Table("erp_stock_commodity") + es := orm.Eloquent.Debug().Table("erp_stock_commodity") + + if req.EndTime != "" { // 有结束时间 + endTime, err := time.Parse(QueryTimeFormat, req.EndTime) + if err != nil { + logger.Errorf("getSystemEndCount err:", err) + return DecisionReportData{}, err + } + + // 获取结束时间之前的所有入库数量(包括系统入库、采购入库、产品入库和盘点入库) + var inStockData struct { + SystemIn uint32 `json:"system_in"` + PurchaseIn uint32 `json:"purchase_in"` + ProductIn uint32 `json:"product_in"` + CheckIn uint32 `json:"check_in"` + } + qs = qs.Select("SUM(CASE WHEN storage_type = ? THEN count ELSE 0 END) AS system_in, "+ + "SUM(CASE WHEN storage_type = ? THEN count ELSE 0 END) AS purchase_in, "+ + "SUM(CASE WHEN storage_type = ? THEN count ELSE 0 END) AS product_in, "+ + "SUM(CASE WHEN storage_type = ? THEN count ELSE 0 END) AS check_in", + SystemInventory, PurchaseInventory, ProductInventory, CheckInventory). + Where("updated_at <= ?", endTime) + + if stock.StoreId != 0 { + if len(stock.DecisionStoreId) > 1 { + qs = qs.Where("store_id in (?)", stock.DecisionStoreId) + } else { + qs = qs.Where("store_id = ?", stock.DecisionStoreId) + } + } + + err = qs.Find(&inStockData).Error + if err != nil { + return DecisionReportData{}, err + } + + // 获取结束时间之前的所有出库数量(包括销售出库、系统出库和盘点出库) + var outStockData struct { + SoldOut uint32 `json:"sold_out"` + SystemOut uint32 `json:"system_out"` + CheckOut uint32 `json:"check_out"` + } + es = es.Select("SUM(CASE WHEN state = ? THEN count ELSE 0 END) AS sold_out, "+ + "SUM(CASE WHEN state = ? THEN count ELSE 0 END) AS system_out, "+ + "SUM(CASE WHEN state = ? THEN count ELSE 0 END) AS check_out", + SoldOut, SystemOut, CheckOut). + Where("updated_at <= ?", endTime). + Where("state IN (?)", []int{SoldOut, SystemOut, CheckOut}) + + if stock.StoreId != 0 { + if len(stock.DecisionStoreId) > 1 { + es = es.Where("store_id in (?)", stock.DecisionStoreId) + } else { + es = es.Where("store_id = ?", stock.DecisionStoreId) + } + } + err = es.Find(&outStockData).Error + if err != nil { + return DecisionReportData{}, err + } + + // 计算期末库存 + endStock := int64(inStockData.SystemIn) + int64(inStockData.PurchaseIn) + int64(inStockData.ProductIn) + int64(inStockData.CheckIn) - + int64(outStockData.SoldOut) - int64(outStockData.SystemOut) - int64(outStockData.CheckOut) + + if endStock < 0 { + endStock = 0 // 确保库存不会为负 + } + reportData.EndStock = uint32(endStock) + + } else { + // 如果没有结束时间,直接获取系统入库数量作为期末库存 + qs = qs.Select("SUM(count) as end_stock, SUM(wholesale_price) as end_amount"). + Where("storage_type = ? and erp_commodity_id = ?", SystemInventory, stock.ErpCommodityId) + + if stock.StoreId != 0 { + if len(stock.DecisionStoreId) > 1 { + qs = qs.Where("store_id in (?)", stock.DecisionStoreId) + } else { + qs = qs.Where("store_id = ?", stock.DecisionStoreId) + } + } + err := qs.Find(&reportData).Error + if err != nil { + return DecisionReportData{}, err + } + } + + return reportData, nil +} + +////查询期初库存、期初金额 +////没有时间:默认为系统入库数量 +////某一天:默认系统入库数量 - 某一天前的所有出库数量 + 某一天前的所有入库数量 +////某个时间段:默认系统入库数量 - 开始时间前的所有出库数量 + 开始时间前的所有入库数量 +//func getSystemStartCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionReportData, error) { +// var reportData DecisionReportData +// +// qs := orm.Eloquent.Debug().Table("erp_stock_commodity") +// +// // 进行条件查询 +// if req.StartTime != "" { // 出入库开始时间 +// parse, err := time.Parse(QueryTimeFormat, req.StartTime) +// if err != nil { +// logger.Errorf("getSystemStartCount err:", err) +// return DecisionReportData{}, err +// } +// +// // 将时间往前推一天 +// previousDay := parse.AddDate(0, 0, -1) +// +// // 手动创建 req 的深拷贝 +// tempReq := &ErpDecisionReportReq{ +// StartTime: "", // 清空 StartTime +// EndTime: previousDay.Format(QueryTimeFormat), +// IsExport: req.IsExport, +// PageIndex: req.PageIndex, +// PageSize: req.PageSize, +// StoreId: req.StoreId, +// CommodityName: req.CommodityName, +// CategoryID: req.CategoryID, +// } +// +// tempReportData, err := getSystemEndCount(tempReq, stock) +// if err != nil { +// return DecisionReportData{}, err +// } +// reportData.BeginStock = tempReportData.EndStock +// reportData.BeginAmount = tempReportData.EndAmount +// } else { +// var err error +// if stock.StoreId != 0 { +// if len(stock.DecisionStoreId) > 1 { +// err = qs.Select("SUM(count) as begin_stock, SUM(wholesale_price) as begin_amount"). +// Where("storage_type = ? and store_id in (?) and erp_commodity_id = ?", SystemInventory, stock.DecisionStoreId, +// stock.ErpCommodityId).Find(&reportData).Error +// } else { +// err = qs.Select("SUM(count) as begin_stock, SUM(wholesale_price) as begin_amount"). +// Where("storage_type = ? and store_id = ? and erp_commodity_id = ?", SystemInventory, stock.StoreId, +// stock.ErpCommodityId).Find(&reportData).Error +// } +// } else { +// err = qs.Select("SUM(count) as begin_stock, SUM(wholesale_price) as begin_amount"). +// Where("storage_type = ? and erp_commodity_id = ?", SystemInventory, stock.ErpCommodityId). +// Find(&reportData).Error +// } +// if err != nil { +// return DecisionReportData{}, err +// } +// } +// +// //if req.EndTime != "" { // 出入库结束时间 +// // parse, err := time.Parse(QueryTimeFormat, req.EndTime) +// // if err != nil { +// // logger.Errorf("getSystemStartCount err:", err) +// // return DecisionReportData{}, err +// // } +// // qs = qs.Where("created_at <= ?", parse) +// //} +// +// return reportData, nil +//} +// +////查询期末库存、期末金额 +//func getSystemEndCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionReportData, error) { +// var reportData DecisionReportData +// +// qs := orm.Eloquent.Debug().Table("erp_stock_commodity") +// +// //// 进行条件查询 +// //if req.StartTime != "" { // 出入库开始时间 +// // parse, err := time.Parse(QueryTimeFormat, req.StartTime) +// // if err != nil { +// // logger.Errorf("getSystemStartCount err:", err) +// // return DecisionReportData{}, err +// // } +// // qs = qs.Where("created_at > ?", parse) +// //} +// +// if req.EndTime != "" { // 出入库结束时间 +// parse, err := time.Parse(QueryTimeFormat, req.EndTime) +// if err != nil { +// logger.Errorf("getSystemStartCount err:", err) +// return DecisionReportData{}, err +// } +// qs = qs.Where("created_at <= ?", parse) +// } +// +// var err error +// if stock.StoreId != 0 { +// if len(stock.DecisionStoreId) > 1 { +// err = qs.Select("SUM(count) as end_stock, SUM(wholesale_price) as end_amount"). +// Where("state in (?) and store_id in (?) and erp_commodity_id = ?", []uint32{InStock, InAllot}, stock.DecisionStoreId, +// stock.ErpCommodityId).Find(&reportData).Error +// } else { +// err = qs.Select("SUM(count) as end_stock, SUM(wholesale_price) as end_amount"). +// Where("state in (?) and store_id = ? and erp_commodity_id = ?", []uint32{InStock, InAllot}, stock.StoreId, +// stock.ErpCommodityId).Find(&reportData).Error +// } +// } else { +// err = qs.Select("SUM(count) as end_stock, SUM(wholesale_price) as end_amount"). +// Where("state in (?) and erp_commodity_id = ?", []uint32{InStock, InAllot}, +// stock.ErpCommodityId).Find(&reportData).Error +// } +// if err != nil { +// return DecisionReportData{}, err +// } +// +// return reportData, nil +//} + // 查询采购进货数量 func getPurchaseStockCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionReportData, error) { var reportData DecisionReportData @@ -395,7 +822,7 @@ func getPurchaseStockCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionR logger.Errorf("getPurchaseCount err:", err) return DecisionReportData{}, err } - qs = qs.Where("erp_purchase_inventory.created_at > ?", parse) + qs = qs.Where("erp_purchase_inventory.updated_at > ?", parse) } if req.EndTime != "" { // 出入库结束时间 @@ -404,7 +831,7 @@ func getPurchaseStockCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionR logger.Errorf("getPurchaseCount err:", err) return DecisionReportData{}, err } - qs = qs.Where("erp_purchase_inventory.created_at <= ?", parse) + qs = qs.Where("erp_purchase_inventory.updated_at <= ?", parse) } var err error @@ -449,7 +876,7 @@ func getPurchaseReturnCount(req *ErpDecisionReportReq, stock ErpStock) (Decision logger.Errorf("getSystemStartCount err:", err) return DecisionReportData{}, err } - qs = qs.Where("created_at > ?", parse) + qs = qs.Where("updated_at > ?", parse) } if req.EndTime != "" { // 出入库结束时间 @@ -458,7 +885,7 @@ func getPurchaseReturnCount(req *ErpDecisionReportReq, stock ErpStock) (Decision logger.Errorf("getSystemStartCount err:", err) return DecisionReportData{}, err } - qs = qs.Where("created_at <= ?", parse) + qs = qs.Where("updated_at <= ?", parse) } var err error @@ -641,7 +1068,7 @@ func getChangeAddCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionRepor logger.Errorf("getChangeAddCount err:", err) return DecisionReportData{}, err } - qs = qs.Where("erp_inventory_change_order.created_at > ?", parse) + qs = qs.Where("erp_inventory_change_order.updated_at > ?", parse) } if req.EndTime != "" { // 出入库结束时间 @@ -650,7 +1077,7 @@ func getChangeAddCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionRepor logger.Errorf("getChangeAddCount err:", err) return DecisionReportData{}, err } - qs = qs.Where("erp_inventory_change_order.created_at <= ?", parse) + qs = qs.Where("erp_inventory_change_order.updated_at <= ?", parse) } var err error @@ -701,7 +1128,7 @@ func getChangeReduceCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionRe logger.Errorf("getChangeAddCount err:", err) return DecisionReportData{}, err } - qs = qs.Where("erp_inventory_change_order.created_at > ?", parse) + qs = qs.Where("erp_inventory_change_order.updated_at > ?", parse) } if req.EndTime != "" { // 出入库结束时间 @@ -710,7 +1137,7 @@ func getChangeReduceCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionRe logger.Errorf("getChangeAddCount err:", err) return DecisionReportData{}, err } - qs = qs.Where("erp_inventory_change_order.created_at <= ?", parse) + qs = qs.Where("erp_inventory_change_order.updated_at <= ?", parse) } var err error @@ -761,7 +1188,7 @@ func getSystemOutCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionRepor logger.Errorf("getSystemStartCount err:", err) return DecisionReportData{}, err } - qs = qs.Where("created_at > ?", parse) + qs = qs.Where("updated_at > ?", parse) } if req.EndTime != "" { // 出入库结束时间 @@ -770,7 +1197,7 @@ func getSystemOutCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionRepor logger.Errorf("getSystemStartCount err:", err) return DecisionReportData{}, err } - qs = qs.Where("created_at <= ?", parse) + qs = qs.Where("updated_at <= ?", parse) } var err error @@ -851,7 +1278,7 @@ func getAllotWaitOutCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionRe logger.Errorf("getAllotOutCount err:", err) return DecisionReportData{}, err } - qs = qs.Where("erp_inventory_allot_commodity.created_at > ?", parse) + qs = qs.Where("erp_inventory_allot_commodity.updated_at > ?", parse) } if req.EndTime != "" { // 出入库结束时间 @@ -860,7 +1287,7 @@ func getAllotWaitOutCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionRe logger.Errorf("getAllotOutCount err:", err) return DecisionReportData{}, err } - qs = qs.Where("erp_inventory_allot_commodity.created_at <= ?", parse) + qs = qs.Where("erp_inventory_allot_commodity.updated_at <= ?", parse) } var err error @@ -911,7 +1338,7 @@ func getAllotInCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionReportD logger.Errorf("getChangeAddCount err:", err) return DecisionReportData{}, err } - qs = qs.Where("erp_inventory_allot_commodity.created_at > ?", parse) + qs = qs.Where("erp_inventory_allot_commodity.updated_at > ?", parse) } if req.EndTime != "" { // 出入库结束时间 @@ -920,7 +1347,7 @@ func getAllotInCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionReportD logger.Errorf("getChangeAddCount err:", err) return DecisionReportData{}, err } - qs = qs.Where("erp_inventory_allot_commodity.created_at <= ?", parse) + qs = qs.Where("erp_inventory_allot_commodity.updated_at <= ?", parse) } var err error @@ -971,7 +1398,7 @@ func getAllotOutCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionReport logger.Errorf("getAllotOutCount err:", err) return DecisionReportData{}, err } - qs = qs.Where("erp_inventory_allot_commodity.created_at > ?", parse) + qs = qs.Where("erp_inventory_allot_commodity.updated_at > ?", parse) } if req.EndTime != "" { // 出入库结束时间 @@ -980,7 +1407,7 @@ func getAllotOutCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionReport logger.Errorf("getAllotOutCount err:", err) return DecisionReportData{}, err } - qs = qs.Where("erp_inventory_allot_commodity.created_at <= ?", parse) + qs = qs.Where("erp_inventory_allot_commodity.updated_at <= ?", parse) } var err error @@ -1018,54 +1445,6 @@ func getAllotOutCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionReport return reportData, nil } -// 查询期末库存、期末金额 -func getSystemEndCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionReportData, error) { - var reportData DecisionReportData - - qs := orm.Eloquent.Debug().Table("erp_stock_commodity") - - // 进行条件查询 - if req.StartTime != "" { // 出入库开始时间 - parse, err := time.Parse(QueryTimeFormat, req.StartTime) - if err != nil { - logger.Errorf("getSystemStartCount err:", err) - return DecisionReportData{}, err - } - qs = qs.Where("created_at > ?", parse) - } - - if req.EndTime != "" { // 出入库结束时间 - parse, err := time.Parse(QueryTimeFormat, req.EndTime) - if err != nil { - logger.Errorf("getSystemStartCount err:", err) - return DecisionReportData{}, err - } - qs = qs.Where("created_at <= ?", parse) - } - - var err error - if stock.StoreId != 0 { - if len(stock.DecisionStoreId) > 1 { - err = qs.Select("SUM(count) as end_stock, SUM(wholesale_price) as end_amount"). - Where("state in (?) and store_id in (?) and erp_commodity_id = ?", []uint32{InStock, InAllot}, stock.DecisionStoreId, - stock.ErpCommodityId).Find(&reportData).Error - } else { - err = qs.Select("SUM(count) as end_stock, SUM(wholesale_price) as end_amount"). - Where("state in (?) and store_id = ? and erp_commodity_id = ?", []uint32{InStock, InAllot}, stock.StoreId, - stock.ErpCommodityId).Find(&reportData).Error - } - } else { - err = qs.Select("SUM(count) as end_stock, SUM(wholesale_price) as end_amount"). - Where("state in (?) and erp_commodity_id = ?", []uint32{InStock, InAllot}, - stock.ErpCommodityId).Find(&reportData).Error - } - if err != nil { - return DecisionReportData{}, err - } - - return reportData, nil -} - // 查询库存汇总数据:期初库存、期初金额、采购退货数量、产品入库、系统出库、在途库存(入库)数量、期末库存、期末金额 func getSumStockData(req *ErpDecisionReportReq) (DecisionReportData, error) { var reportData DecisionReportData diff --git a/app/admin/models/purchase.go b/app/admin/models/purchase.go index aa0afdd..ec0a830 100644 --- a/app/admin/models/purchase.go +++ b/app/admin/models/purchase.go @@ -1873,6 +1873,7 @@ func getErpPurchaseDemandAll(req *GetErpPurchaseDemandReq, c *gin.Context) (*Get qs := orm.Eloquent.Debug().Table("erp_commodity") if req.ErpCategoryId != 0 { + page = 0 categoryInfo, err := GetErpCategory(req.ErpCategoryId) if err != nil { return nil, err @@ -1880,12 +1881,15 @@ func getErpPurchaseDemandAll(req *GetErpPurchaseDemandReq, c *gin.Context) (*Get qs = qs.Where("serial_number like ?", categoryInfo.Number+"%") } if req.ErpCommoditySerialNumber != "" { + page = 0 qs = qs.Where("serial_number=?", req.ErpCommoditySerialNumber) } if req.ErpCommodityName != "" { + page = 0 qs = qs.Where("name=?", req.ErpCommodityName) } if req.ErpSupplierId != 0 { + page = 0 qs = qs.Where("erp_supplier_id=?", req.ErpSupplierId) } @@ -2198,9 +2202,11 @@ func getErpPurchaseDemandHide(req *GetErpPurchaseDemandReq, c *gin.Context) (*Ge } } if req.ErpCommodityName != "" { + page = 0 demandQs = demandQs.Where("erp_commodity_name = ?", req.ErpCommodityName) } if req.ErpSupplierId != 0 { + page = 0 demandQs = demandQs.Where("erp_supplier_id=?", req.ErpSupplierId) } err = demandQs.Find(&demand).Error @@ -2214,6 +2220,15 @@ func getErpPurchaseDemandHide(req *GetErpPurchaseDemandReq, c *gin.Context) (*Ge Where("state = 1"). Where("remark IS NOT NULL"). Where("remark <> ''") + if req.ErpCommodityName != "" { + var erpCommodity ErpCommodity + err = orm.Eloquent.Table("erp_commodity").Where("name = ?", req.ErpCommodityName). + Find(&erpCommodity).Error + if err != nil { + return nil, err + } + demandRemarkQs = demandRemarkQs.Where("erp_commodity_id = ?", erpCommodity.ID) + } err = demandRemarkQs.Find(&demandRemarkInfo).Error if err != nil { return nil, err @@ -2248,34 +2263,36 @@ func getErpPurchaseDemandHide(req *GetErpPurchaseDemandReq, c *gin.Context) (*Ge } // 查询商品信息 - qs := orm.Eloquent.Debug().Table("erp_commodity") - if req.ErpCategoryId != 0 { - categoryInfo, err := GetErpCategory(req.ErpCategoryId) - if err != nil { - return nil, err - } - qs = qs.Where("serial_number like ?", categoryInfo.Number+"%") - } - if req.ErpCommoditySerialNumber != "" { - qs = qs.Where("serial_number=?", req.ErpCommoditySerialNumber) - } - if req.ErpCommodityName != "" { - qs = qs.Where("name=?", req.ErpCommodityName) - } - if req.ErpSupplierId != 0 { - qs = qs.Where("erp_supplier_id=?", req.ErpSupplierId) - } - - var count int64 - if err := qs.Count(&count).Error; err != nil { - logger.Error("count err:", logger.Field("err", err)) - return resp, err - } - var commodities []ErpCommodity - err = qs.Order("id DESC").Find(&commodities).Error - if err != nil && err != RecordNotFound { - return resp, err + if len(demand) > 0 { + qs := orm.Eloquent.Debug().Table("erp_commodity") + if req.ErpCategoryId != 0 { + categoryInfo, err := GetErpCategory(req.ErpCategoryId) + if err != nil { + return nil, err + } + qs = qs.Where("serial_number like ?", categoryInfo.Number+"%") + } + if req.ErpCommoditySerialNumber != "" { + qs = qs.Where("serial_number=?", req.ErpCommoditySerialNumber) + } + if req.ErpCommodityName != "" { + qs = qs.Where("name=?", req.ErpCommodityName) + } + if req.ErpSupplierId != 0 { + qs = qs.Where("erp_supplier_id=?", req.ErpSupplierId) + } + + var count int64 + if err := qs.Count(&count).Error; err != nil { + logger.Error("count err:", logger.Field("err", err)) + return resp, err + } + + err = qs.Order("id DESC").Find(&commodities).Error + if err != nil && err != RecordNotFound { + return resp, err + } } // 匹配商品id,有则继续查询返回数据,没有则不返回 diff --git a/app/admin/router/usermanage.go b/app/admin/router/usermanage.go index 775f019..93791c0 100644 --- a/app/admin/router/usermanage.go +++ b/app/admin/router/usermanage.go @@ -26,7 +26,7 @@ func registerUserManageUnAuthRouter(v1 *gin.RouterGroup) { userInfo.POST("/add_assistant", usermanage.UserAddAssistant) userInfo.POST("/assistant_del", usermanage.UserAssistantDel) userInfo.POST("/invite_list", usermanage.UserInviteList) - userInfo.POST("/cancel_members", usermanage.CancelMembers) + userInfo.POST("/cancel_members", usermanage.CancelMembers) // 取消租卡会员 userInfo.POST("/user_derive", usermanage.ExportDataUserMember) userInfo.POST("/deposit_refund/list", usermanage.UserDepositRefundRecordList) // 保证金审核列表