diff --git a/app/admin/models/decision.go b/app/admin/models/decision.go index aeb96cd..83587eb 100644 --- a/app/admin/models/decision.go +++ b/app/admin/models/decision.go @@ -2135,79 +2135,127 @@ func getSumEndCount(req *ErpDecisionReportReq) (DecisionReportData, error) { return reportData, nil } -// 查询库存汇总数据:采购退货数量、产品入库、系统入库、系统出库、在途库存(入库)数量 +// 查询库存汇总数据:产品入库、系统入库、系统出库、在途库存(入库)数量 func getSumStockData(req *ErpDecisionReportReq, endTimeFlag bool) (DecisionReportData, error) { var reportData DecisionReportData qs := orm.Eloquent.Debug().Table("erp_stock_commodity") + es := orm.Eloquent.Debug().Table("erp_stock_commodity") + // 构建用于筛选storage_type的数据子查询 + storageTypeQuery := qs if req.StartTime != "" { parse, err := time.Parse(QueryTimeFormat, req.StartTime) if err != nil { - logger.Errorf("getStockData err:", err) + logger.Errorf("getStockData storage_type parse error: %v", err) return DecisionReportData{}, err } - qs = qs.Where("created_at > ?", parse) + storageTypeQuery = storageTypeQuery.Where("created_at > ?", parse) } - if req.EndTime != "" && endTimeFlag { parse, err := time.Parse(QueryTimeFormat, req.EndTime) if err != nil { - logger.Errorf("getStockData err:", err) + logger.Errorf("getStockData storage_type parse error: %v", err) return DecisionReportData{}, err } - qs = qs.Where("created_at <= ?", parse) + storageTypeQuery = storageTypeQuery.Where("created_at <= ?", parse) } + // 构建用于筛选state的数据子查询 + stateQuery := es + if req.StartTime != "" { + parse, err := time.Parse(QueryTimeFormat, req.StartTime) + if err != nil { + logger.Errorf("getStockData state parse error: %v", err) + return DecisionReportData{}, err + } + stateQuery = stateQuery.Where("updated_at > ?", parse) + } + if req.EndTime != "" && endTimeFlag { + parse, err := time.Parse(QueryTimeFormat, req.EndTime) + if err != nil { + logger.Errorf("getStockData state parse error: %v", err) + return DecisionReportData{}, err + } + stateQuery = stateQuery.Where("updated_at <= ?", parse) + } + + // 公共条件 if len(req.StoreId) > 0 { if len(req.StoreId) == 1 { - qs = qs.Where("store_id = ?", req.StoreId[0]) + storageTypeQuery = storageTypeQuery.Where("store_id = ?", req.StoreId[0]) + stateQuery = stateQuery.Where("store_id = ?", req.StoreId[0]) } else { - qs = qs.Where("store_id IN (?)", req.StoreId) + storageTypeQuery = storageTypeQuery.Where("store_id IN (?)", req.StoreId) + stateQuery = stateQuery.Where("store_id IN (?)", req.StoreId) } } - if len(req.CommodityName) > 0 { // 商品名称 - var commodityNames []string - for _, commodityName := range req.CommodityName { - commodityNames = append(commodityNames, commodityName) - } - if len(commodityNames) == 1 { - qs = qs.Where("erp_commodity_name = ?", commodityNames[0]) + if len(req.CommodityName) > 0 { + if len(req.CommodityName) == 1 { + storageTypeQuery = storageTypeQuery.Where("erp_commodity_name = ?", req.CommodityName[0]) + stateQuery = stateQuery.Where("erp_commodity_name = ?", req.CommodityName[0]) } else { - qs = qs.Where("erp_commodity_name IN (?)", commodityNames) + storageTypeQuery = storageTypeQuery.Where("erp_commodity_name IN (?)", req.CommodityName) + stateQuery = stateQuery.Where("erp_commodity_name IN (?)", req.CommodityName) } } - if len(req.CategoryID) > 0 { // 商品分类id - var categoryIDs []uint32 - for _, category := range req.CategoryID { - categoryIDs = append(categoryIDs, category) - } - if len(categoryIDs) == 1 { - qs = qs.Where("erp_category_id = ?", categoryIDs[0]) + if len(req.CategoryID) > 0 { + if len(req.CategoryID) == 1 { + storageTypeQuery = storageTypeQuery.Where("erp_category_id = ?", req.CategoryID[0]) + stateQuery = stateQuery.Where("erp_category_id = ?", req.CategoryID[0]) } else { - qs = qs.Where("erp_category_id IN (?)", categoryIDs) + storageTypeQuery = storageTypeQuery.Where("erp_category_id IN (?)", req.CategoryID) + stateQuery = stateQuery.Where("erp_category_id IN (?)", req.CategoryID) } } - subQuery := qs.Select(` - SUM(CASE WHEN storage_type = ? THEN count ELSE 0 END) AS product_in, - SUM(CASE WHEN storage_type = ? THEN wholesale_price ELSE 0 END) AS product_in_amount, + // 分别查询 storage_type 相关的数据 + var storageTypeData struct { + ProductIn uint32 + ProductInAmount float64 + SystemIn uint32 + SystemInAmount float64 + } + err := storageTypeQuery.Select(` + SUM(CASE WHEN storage_type = ? THEN count ELSE 0 END) AS product_in, + SUM(CASE WHEN storage_type = ? THEN wholesale_price ELSE 0 END) AS product_in_amount, SUM(CASE WHEN storage_type = ? THEN count ELSE 0 END) AS system_in, - SUM(CASE WHEN storage_type = ? THEN wholesale_price ELSE 0 END) AS system_in_amount, - SUM(CASE WHEN state = ? THEN count ELSE 0 END) AS system_out, - SUM(CASE WHEN state = ? THEN wholesale_price ELSE 0 END) AS system_out_amount, - SUM(CASE WHEN state = ? THEN count ELSE 0 END) AS allot_wait_in, - SUM(CASE WHEN state = ? THEN wholesale_price ELSE 0 END) AS allot_wait_in_amount - `, ProductInventory, ProductInventory, SystemInventory, SystemInventory, - SystemOut, SystemOut, InAllot, InAllot) - - err := subQuery.Scan(&reportData).Error + SUM(CASE WHEN storage_type = ? THEN wholesale_price ELSE 0 END) AS system_in_amount + `, ProductInventory, ProductInventory, SystemInventory, SystemInventory).Scan(&storageTypeData).Error if err != nil { - logger.Errorf("getStockData err:", err) + logger.Errorf("getStockData storage_type query error: %v", err) return DecisionReportData{}, err } + // 查询 state 相关的数据 + var stateData struct { + SystemOut uint32 + SystemOutAmount float64 + AllotWaitIn uint32 + AllotWaitInAmount float64 + } + err = stateQuery.Select(` + SUM(CASE WHEN state = ? THEN count ELSE 0 END) AS system_out, + SUM(CASE WHEN state = ? THEN wholesale_price ELSE 0 END) AS system_out_amount, + SUM(CASE WHEN state = ? THEN count ELSE 0 END) AS allot_wait_in, + SUM(CASE WHEN state = ? THEN wholesale_price ELSE 0 END) AS allot_wait_in_amount + `, SystemOut, SystemOut, InAllot, InAllot).Scan(&stateData).Error + if err != nil { + logger.Errorf("getStockData state query error: %v", err) + return DecisionReportData{}, err + } + + // 合并结果 + reportData.ProductIn = storageTypeData.ProductIn + reportData.ProductInAmount = storageTypeData.ProductInAmount + reportData.SystemIn = storageTypeData.SystemIn + reportData.SystemInAmount = storageTypeData.SystemInAmount + reportData.SystemOut = stateData.SystemOut + reportData.SystemOutAmount = stateData.SystemOutAmount + reportData.AllotWaitIn = stateData.AllotWaitIn + reportData.AllotWaitInAmount = stateData.AllotWaitInAmount + return reportData, nil } diff --git a/app/admin/models/inventory_report.go b/app/admin/models/inventory_report.go index 9e2c31c..038b782 100644 --- a/app/admin/models/inventory_report.go +++ b/app/admin/models/inventory_report.go @@ -1950,7 +1950,31 @@ func (m *InventoryReportOtherDetailReq) ReportByOtherDetailList(c *gin.Context) // 查询产品入库数据 func getProductOrderData(storeList []uint32) ([]ReportOtherDetailData, error) { var productList []ReportOtherDetailData - err := orm.Eloquent.Debug().Table("erp_inventory_product_order"). + + //err := orm.Eloquent.Debug().Table("erp_inventory_product_order"). + // Select("erp_inventory_product_order.serial_number, "+ + // "erp_inventory_product_order.store_id, "+ + // "erp_inventory_product_order.store_name, "+ + // "erp_inventory_product_order.audit_time as stock_time, "+ + // "CASE "+ + // "WHEN erp_inventory_product_order.state = 2 THEN 1 "+ + // "ELSE erp_inventory_product_order.state "+ + // "END AS type, "+ + // "erp_inventory_product_commodity.commodity_id, "+ + // "erp_inventory_product_commodity.commodity_name, "+ + // "erp_inventory_product_commodity.supplier_id, "+ + // "erp_inventory_product_commodity.supplier_name, "+ + // "erp_inventory_product_commodity.imei_type, "+ + // "erp_inventory_product_commodity.imei, "+ + // "erp_inventory_product_commodity.price as purchase_price, "+ + // "erp_inventory_product_commodity.employee_price as employee_price"). + // Joins("JOIN erp_inventory_product_commodity "+ + // "ON erp_inventory_product_commodity.product_order_id = erp_inventory_product_order.id"). + // Where("erp_inventory_product_order.state = ?", ErpInventoryProductOrderFinished). + // Where("erp_inventory_product_order.store_id in ?", storeList). + // Find(&productList).Error // 查询已审核的订单 + + qs := orm.Eloquent.Debug().Table("erp_inventory_product_order"). Select("erp_inventory_product_order.serial_number, "+ "erp_inventory_product_order.store_id, "+ "erp_inventory_product_order.store_name, "+ @@ -1969,9 +1993,12 @@ func getProductOrderData(storeList []uint32) ([]ReportOtherDetailData, error) { "erp_inventory_product_commodity.employee_price as employee_price"). Joins("JOIN erp_inventory_product_commodity "+ "ON erp_inventory_product_commodity.product_order_id = erp_inventory_product_order.id"). - Where("erp_inventory_product_order.state = ?", ErpInventoryProductOrderFinished). - Where("erp_inventory_product_order.store_id in ?", storeList). - Find(&productList).Error // 查询已审核的订单 + Where("erp_inventory_product_order.state = ?", ErpInventoryProductOrderFinished) + if len(storeList) > 0 { + qs = qs.Where("erp_inventory_product_order.store_id in ?", storeList) + } + err := qs.Find(&productList).Error // 查询已审核的订单 + if err != nil { return nil, err } @@ -1982,7 +2009,32 @@ func getProductOrderData(storeList []uint32) ([]ReportOtherDetailData, error) { // 查询盘点出入库数据 func getChangeOrderData(storeList []uint32) ([]ReportOtherDetailData, error) { var changeList []ReportOtherDetailData - err := orm.Eloquent.Debug().Table("erp_inventory_change_order"). + + //err := orm.Eloquent.Debug().Table("erp_inventory_change_order"). + // Select("erp_inventory_change_order.serial_number, "+ + // "erp_inventory_change_order.store_id, "+ + // "erp_inventory_change_order.store_name, "+ + // "erp_inventory_change_order.audit_time as stock_time, "+ + // "CASE "+ + // "WHEN erp_inventory_change_order.change_type = 'add' THEN 2 "+ + // "WHEN erp_inventory_change_order.change_type = 'reduce' THEN 4 "+ + // "ELSE erp_inventory_change_order.state "+ + // "END AS type, "+ + // "erp_inventory_change_commodity.commodity_id, "+ + // "erp_inventory_change_commodity.commodity_name, "+ + // "erp_inventory_change_commodity.supplier_id, "+ + // "erp_inventory_change_commodity.supplier_name, "+ + // "erp_inventory_change_commodity.imei_type, "+ + // "erp_inventory_change_commodity.imei, "+ + // "erp_inventory_change_commodity.price as purchase_price, "+ + // "erp_inventory_change_commodity.employee_price as employee_price"). + // Joins("JOIN erp_inventory_change_commodity "+ + // "ON erp_inventory_change_commodity.change_order_id = erp_inventory_change_order.id"). + // Where("erp_inventory_change_order.state = ?", ErpInventoryChangeOrderFinished). + // Where("erp_inventory_change_order.store_id in ?", storeList). + // Find(&changeList).Error // 查询已审核的订单 + + qs := orm.Eloquent.Debug().Table("erp_inventory_change_order"). Select("erp_inventory_change_order.serial_number, "+ "erp_inventory_change_order.store_id, "+ "erp_inventory_change_order.store_name, "+ @@ -2002,9 +2054,13 @@ func getChangeOrderData(storeList []uint32) ([]ReportOtherDetailData, error) { "erp_inventory_change_commodity.employee_price as employee_price"). Joins("JOIN erp_inventory_change_commodity "+ "ON erp_inventory_change_commodity.change_order_id = erp_inventory_change_order.id"). - Where("erp_inventory_change_order.state = ?", ErpInventoryChangeOrderFinished). - Where("erp_inventory_change_order.store_id in ?", storeList). - Find(&changeList).Error // 查询已审核的订单 + Where("erp_inventory_change_order.state = ?", ErpInventoryChangeOrderFinished) + + if len(storeList) > 0 { + qs = qs.Where("erp_inventory_change_order.store_id in ?", storeList) + } + err := qs.Find(&changeList).Error // 查询已审核的订单 + if err != nil { return nil, err } @@ -2015,10 +2071,18 @@ func getChangeOrderData(storeList []uint32) ([]ReportOtherDetailData, error) { // 查询系统出库数据 func getSystemOutData(storeList []uint32) ([]ReportOtherDetailData, error) { var stockCommodities []ErpStockCommodity - err := orm.Eloquent.Table("erp_stock_commodity"). - Where("state = ?", SystemOut). - Where("store_id in ?", storeList). - Find(&stockCommodities).Error + + //err := orm.Eloquent.Table("erp_stock_commodity"). + // Where("state = ?", SystemOut). + // Where("store_id in ?", storeList). + // Find(&stockCommodities).Error + + qs := orm.Eloquent.Table("erp_stock_commodity"). + Where("state = ?", SystemOut) + if len(storeList) > 0 { + qs = qs.Where("store_id in ?", storeList) + } + err := qs.Find(&stockCommodities).Error if err != nil { return nil, err }