1.修复进销存报表时间段查询不准确的问题;

This commit is contained in:
chenlin 2024-08-09 19:23:21 +08:00
parent 0c3fc88c8d
commit c7ab2b1957
3 changed files with 586 additions and 190 deletions

View File

@ -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

View File

@ -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有则继续查询返回数据没有则不返回

View File

@ -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) // 保证金审核列表