1、优惠进销存报表:产品入库,系统入库需要看created_at,系统出库、在途库存需要看update_at;
2、优化其他出入库汇总和明细,有门店id时才查询,没有则查所有门店数据;没权限则报错;
This commit is contained in:
parent
e250fde3dd
commit
35a5d757ff
|
@ -2135,79 +2135,127 @@ func getSumEndCount(req *ErpDecisionReportReq) (DecisionReportData, error) {
|
||||||
return reportData, nil
|
return reportData, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询库存汇总数据:采购退货数量、产品入库、系统入库、系统出库、在途库存(入库)数量
|
// 查询库存汇总数据:产品入库、系统入库、系统出库、在途库存(入库)数量
|
||||||
func getSumStockData(req *ErpDecisionReportReq, endTimeFlag bool) (DecisionReportData, error) {
|
func getSumStockData(req *ErpDecisionReportReq, endTimeFlag bool) (DecisionReportData, error) {
|
||||||
var reportData DecisionReportData
|
var reportData DecisionReportData
|
||||||
qs := orm.Eloquent.Debug().Table("erp_stock_commodity")
|
qs := orm.Eloquent.Debug().Table("erp_stock_commodity")
|
||||||
|
es := orm.Eloquent.Debug().Table("erp_stock_commodity")
|
||||||
|
|
||||||
|
// 构建用于筛选storage_type的数据子查询
|
||||||
|
storageTypeQuery := qs
|
||||||
if req.StartTime != "" {
|
if req.StartTime != "" {
|
||||||
parse, err := time.Parse(QueryTimeFormat, req.StartTime)
|
parse, err := time.Parse(QueryTimeFormat, req.StartTime)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("getStockData err:", err)
|
logger.Errorf("getStockData storage_type parse error: %v", err)
|
||||||
return DecisionReportData{}, err
|
return DecisionReportData{}, err
|
||||||
}
|
}
|
||||||
qs = qs.Where("created_at > ?", parse)
|
storageTypeQuery = storageTypeQuery.Where("created_at > ?", parse)
|
||||||
}
|
}
|
||||||
|
|
||||||
if req.EndTime != "" && endTimeFlag {
|
if req.EndTime != "" && endTimeFlag {
|
||||||
parse, err := time.Parse(QueryTimeFormat, req.EndTime)
|
parse, err := time.Parse(QueryTimeFormat, req.EndTime)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("getStockData err:", err)
|
logger.Errorf("getStockData storage_type parse error: %v", err)
|
||||||
return DecisionReportData{}, 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) > 0 {
|
||||||
if len(req.StoreId) == 1 {
|
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 {
|
} 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 { // 商品名称
|
if len(req.CommodityName) > 0 {
|
||||||
var commodityNames []string
|
if len(req.CommodityName) == 1 {
|
||||||
for _, commodityName := range req.CommodityName {
|
storageTypeQuery = storageTypeQuery.Where("erp_commodity_name = ?", req.CommodityName[0])
|
||||||
commodityNames = append(commodityNames, commodityName)
|
stateQuery = stateQuery.Where("erp_commodity_name = ?", req.CommodityName[0])
|
||||||
}
|
|
||||||
if len(commodityNames) == 1 {
|
|
||||||
qs = qs.Where("erp_commodity_name = ?", commodityNames[0])
|
|
||||||
} else {
|
} 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
|
if len(req.CategoryID) > 0 {
|
||||||
var categoryIDs []uint32
|
if len(req.CategoryID) == 1 {
|
||||||
for _, category := range req.CategoryID {
|
storageTypeQuery = storageTypeQuery.Where("erp_category_id = ?", req.CategoryID[0])
|
||||||
categoryIDs = append(categoryIDs, category)
|
stateQuery = stateQuery.Where("erp_category_id = ?", req.CategoryID[0])
|
||||||
}
|
|
||||||
if len(categoryIDs) == 1 {
|
|
||||||
qs = qs.Where("erp_category_id = ?", categoryIDs[0])
|
|
||||||
} else {
|
} 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(`
|
// 分别查询 storage_type 相关的数据
|
||||||
SUM(CASE WHEN storage_type = ? THEN count ELSE 0 END) AS product_in,
|
var storageTypeData struct {
|
||||||
SUM(CASE WHEN storage_type = ? THEN wholesale_price ELSE 0 END) AS product_in_amount,
|
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 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 storage_type = ? THEN wholesale_price ELSE 0 END) AS system_in_amount
|
||||||
SUM(CASE WHEN state = ? THEN count ELSE 0 END) AS system_out,
|
`, ProductInventory, ProductInventory, SystemInventory, SystemInventory).Scan(&storageTypeData).Error
|
||||||
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
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("getStockData err:", err)
|
logger.Errorf("getStockData storage_type query error: %v", err)
|
||||||
return DecisionReportData{}, 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
|
return reportData, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1950,7 +1950,31 @@ func (m *InventoryReportOtherDetailReq) ReportByOtherDetailList(c *gin.Context)
|
||||||
// 查询产品入库数据
|
// 查询产品入库数据
|
||||||
func getProductOrderData(storeList []uint32) ([]ReportOtherDetailData, error) {
|
func getProductOrderData(storeList []uint32) ([]ReportOtherDetailData, error) {
|
||||||
var productList []ReportOtherDetailData
|
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, "+
|
Select("erp_inventory_product_order.serial_number, "+
|
||||||
"erp_inventory_product_order.store_id, "+
|
"erp_inventory_product_order.store_id, "+
|
||||||
"erp_inventory_product_order.store_name, "+
|
"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").
|
"erp_inventory_product_commodity.employee_price as employee_price").
|
||||||
Joins("JOIN erp_inventory_product_commodity "+
|
Joins("JOIN erp_inventory_product_commodity "+
|
||||||
"ON erp_inventory_product_commodity.product_order_id = erp_inventory_product_order.id").
|
"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.state = ?", ErpInventoryProductOrderFinished)
|
||||||
Where("erp_inventory_product_order.store_id in ?", storeList).
|
if len(storeList) > 0 {
|
||||||
Find(&productList).Error // 查询已审核的订单
|
qs = qs.Where("erp_inventory_product_order.store_id in ?", storeList)
|
||||||
|
}
|
||||||
|
err := qs.Find(&productList).Error // 查询已审核的订单
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -1982,7 +2009,32 @@ func getProductOrderData(storeList []uint32) ([]ReportOtherDetailData, error) {
|
||||||
// 查询盘点出入库数据
|
// 查询盘点出入库数据
|
||||||
func getChangeOrderData(storeList []uint32) ([]ReportOtherDetailData, error) {
|
func getChangeOrderData(storeList []uint32) ([]ReportOtherDetailData, error) {
|
||||||
var changeList []ReportOtherDetailData
|
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, "+
|
Select("erp_inventory_change_order.serial_number, "+
|
||||||
"erp_inventory_change_order.store_id, "+
|
"erp_inventory_change_order.store_id, "+
|
||||||
"erp_inventory_change_order.store_name, "+
|
"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").
|
"erp_inventory_change_commodity.employee_price as employee_price").
|
||||||
Joins("JOIN erp_inventory_change_commodity "+
|
Joins("JOIN erp_inventory_change_commodity "+
|
||||||
"ON erp_inventory_change_commodity.change_order_id = erp_inventory_change_order.id").
|
"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.state = ?", ErpInventoryChangeOrderFinished)
|
||||||
Where("erp_inventory_change_order.store_id in ?", storeList).
|
|
||||||
Find(&changeList).Error // 查询已审核的订单
|
if len(storeList) > 0 {
|
||||||
|
qs = qs.Where("erp_inventory_change_order.store_id in ?", storeList)
|
||||||
|
}
|
||||||
|
err := qs.Find(&changeList).Error // 查询已审核的订单
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -2015,10 +2071,18 @@ func getChangeOrderData(storeList []uint32) ([]ReportOtherDetailData, error) {
|
||||||
// 查询系统出库数据
|
// 查询系统出库数据
|
||||||
func getSystemOutData(storeList []uint32) ([]ReportOtherDetailData, error) {
|
func getSystemOutData(storeList []uint32) ([]ReportOtherDetailData, error) {
|
||||||
var stockCommodities []ErpStockCommodity
|
var stockCommodities []ErpStockCommodity
|
||||||
err := orm.Eloquent.Table("erp_stock_commodity").
|
|
||||||
Where("state = ?", SystemOut).
|
//err := orm.Eloquent.Table("erp_stock_commodity").
|
||||||
Where("store_id in ?", storeList).
|
// Where("state = ?", SystemOut).
|
||||||
Find(&stockCommodities).Error
|
// 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 {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user