diff --git a/app/admin/models/decision.go b/app/admin/models/decision.go index 2cad97e..aeb96cd 100644 --- a/app/admin/models/decision.go +++ b/app/admin/models/decision.go @@ -1692,7 +1692,7 @@ func getSumStartData(req *ErpDecisionReportReq) (DecisionReportData, error) { return DecisionReportData{}, err } - // 查询库存汇总数据:采购退货数量、产品入库、系统入库、系统出库、在途库存(入库)数量 + // 查询库存汇总数据:产品入库、系统入库、系统出库、在途库存(入库)数量 sumStockData, err := getSumStockData(tempReq, false) if err != nil { return DecisionReportData{}, err @@ -1704,6 +1704,12 @@ func getSumStartData(req *ErpDecisionReportReq) (DecisionReportData, error) { return DecisionReportData{}, err } + // 查询采购退货数量 + sumPurchaseReturnData, err := getSumPurchaseReturnData(tempReq, false) + if err != nil { + return DecisionReportData{}, err + } + // 查询零售汇总数据:零售销售数量、零售退货数量 sumSalesData, err := getSumSalesData(tempReq, false) if err != nil { @@ -1724,12 +1730,12 @@ func getSumStartData(req *ErpDecisionReportReq) (DecisionReportData, error) { respData.BeginStock = sumEndData.EndStock + (sumSalesData.OrderSale - sumSalesData.OrderReject) + sumAllotData.AllotOut + sumStockData.SystemOut + sumInventoryData.CheckOut - - (sumPurchaseData.PurchaseStock - sumStockData.PurchaseReturn) - sumAllotData.AllotIn - + (sumPurchaseData.PurchaseStock - sumPurchaseReturnData.PurchaseReturn) - sumAllotData.AllotIn - sumStockData.ProductIn - sumInventoryData.CheckIn respData.BeginAmount = sumEndData.EndAmount + ((sumSalesData.OrderSaleAmount - sumSalesData.OrderRejectAmount) + sumAllotData.AllotOutAmount + sumStockData.SystemOutAmount + sumInventoryData.CheckOutAmount) - - ((sumPurchaseData.PurchaseStockAmount - sumStockData.PurchaseReturnAmount) + sumAllotData.AllotInAmount + + ((sumPurchaseData.PurchaseStockAmount - sumPurchaseReturnData.PurchaseReturnAmount) + sumAllotData.AllotInAmount + sumStockData.ProductInAmount + sumInventoryData.CheckInAmount) return respData, nil @@ -2185,8 +2191,6 @@ func getSumStockData(req *ErpDecisionReportReq, endTimeFlag bool) (DecisionRepor } subQuery := qs.Select(` - SUM(CASE WHEN state = ? THEN count ELSE 0 END) AS purchase_return, - SUM(CASE WHEN state = ? THEN wholesale_price ELSE 0 END) AS purchase_return_amount, 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, @@ -2195,7 +2199,7 @@ func getSumStockData(req *ErpDecisionReportReq, endTimeFlag bool) (DecisionRepor 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 - `, PurchaseReturn, PurchaseReturn, ProductInventory, ProductInventory, SystemInventory, SystemInventory, + `, ProductInventory, ProductInventory, SystemInventory, SystemInventory, SystemOut, SystemOut, InAllot, InAllot) err := subQuery.Scan(&reportData).Error @@ -2278,6 +2282,77 @@ func getSumPurchaseData(req *ErpDecisionReportReq, endTimeFlag bool) (DecisionRe return reportData, nil } +// 查询采购退货货数量 +func getSumPurchaseReturnData(req *ErpDecisionReportReq, endTimeFlag bool) (DecisionReportData, error) { + var reportData DecisionReportData + + qs := orm.Eloquent.Debug().Table("erp_purchase_inventory") + + // 进行条件查询 + if req.StartTime != "" { // 出入库开始时间 + parse, err := time.Parse(QueryTimeFormat, req.StartTime) + if err != nil { + logger.Errorf("getPurchaseCount err:", err) + return DecisionReportData{}, err + } + qs = qs.Where("erp_purchase_inventory.created_at > ?", parse) + } + + if req.EndTime != "" && endTimeFlag { // 出入库结束时间 + parse, err := time.Parse(QueryTimeFormat, req.EndTime) + if err != nil { + logger.Errorf("getPurchaseCount err:", err) + return DecisionReportData{}, err + } + qs = qs.Where("erp_purchase_inventory.created_at <= ?", parse) + } + + if len(req.StoreId) > 0 { + if len(req.StoreId) == 1 { + qs = qs.Where("store_id = ?", req.StoreId[0]) + } else { + qs = qs.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]) + } else { + qs = qs.Where("erp_commodity_name IN (?)", commodityNames) + } + } + + 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]) + } else { + qs = qs.Where("erp_category_id IN (?)", categoryIDs) + } + } + + var err error + err = qs.Select("SUM(erp_purchase_inventory.count) AS purchase_return,"+ + "SUM(erp_purchase_inventory.amount) AS purchase_return_amount"). + Joins("JOIN erp_purchase_order ON erp_purchase_order.id = erp_purchase_inventory.erp_purchase_order_id"). + Where("erp_purchase_inventory.purchase_type = ?", ErpRejectOrder). + Find(&reportData).Error + + if err != nil { + return DecisionReportData{}, err + } + + return reportData, nil +} + // 查询零售汇总数据:零售销售数量、零售退货数量 func getSumSalesData(req *ErpDecisionReportReq, endTimeFlag bool) (DecisionReportData, error) { var reportData DecisionReportData @@ -2555,18 +2630,16 @@ func getSumDecisionReportData(req *ErpDecisionReportReq) (DecisionSumData, error sumData.TotalEndStock = sumEndData.EndStock sumData.TotalEndAmount = sumEndData.EndAmount - // 查询库存汇总数据:采购退货数量、产品入库、系统入库、系统出库、在途库存(入库)数量 + // 查询库存汇总数据:产品入库、系统入库、系统出库、在途库存(入库)数量 sumStockData, err := getSumStockData(req, true) if err != nil { return DecisionSumData{}, err } - sumData.TotalPurchaseReturn = sumStockData.PurchaseReturn sumData.TotalAllotWaitIn = sumStockData.AllotWaitIn sumData.TotalProductIn = sumStockData.ProductIn sumData.TotalSystemIn = sumStockData.SystemIn sumData.TotalSystemOut = sumStockData.SystemOut - sumData.TotalReturnAmount = sumStockData.PurchaseReturnAmount sumData.TotalWaitInAmount = sumStockData.AllotWaitInAmount sumData.TotalProductInAmount = sumStockData.ProductInAmount sumData.TotalSystemInAmount = sumStockData.SystemInAmount @@ -2580,6 +2653,14 @@ func getSumDecisionReportData(req *ErpDecisionReportReq) (DecisionSumData, error sumData.TotalPurchaseStock = sumPurchaseData.PurchaseStock sumData.TotalPurchaseAmount = sumPurchaseData.PurchaseStockAmount + // 查询采购退货数量 + sumPurchaseReturnData, err := getSumPurchaseReturnData(req, true) + if err != nil { + return DecisionSumData{}, err + } + sumData.TotalPurchaseReturn = sumPurchaseReturnData.PurchaseReturn + sumData.TotalReturnAmount = sumPurchaseReturnData.PurchaseReturnAmount + // 查询零售汇总数据:零售销售数量、零售退货数量 sumSalesData, err := getSumSalesData(req, true) if err != nil { diff --git a/app/admin/models/purchase.go b/app/admin/models/purchase.go index e6c6d99..887a5a5 100644 --- a/app/admin/models/purchase.go +++ b/app/admin/models/purchase.go @@ -1248,7 +1248,7 @@ func InventoryErpPurchase(req *ErpPurchaseInventoryReq, c *gin.Context) error { if purchaseOrder.PurchaseType == ErpProcureOrder { //采购入库订单 err = InventoryErpPurchaseUpdateStock(begin, inventoryList, purchaseOrder) } else if purchaseOrder.PurchaseType == ErpRejectOrder { // 采购退货订单 - err = InventoryErpPurchaseUpdateRejectStock(begin, inventoryList, purchaseOrder) + err = InventoryErpPurchaseUpdateRejectStock(begin, inventoryList, purchaseOrder, false) } else { return errors.New("订单类型有误") } @@ -1478,7 +1478,8 @@ func combineStocks(waitCreateStockList []ErpStock) []ErpStock { } // InventoryErpPurchaseUpdateRejectStock 采购退货更新库存信息 -func InventoryErpPurchaseUpdateRejectStock(gdb *gorm.DB, list []ErpPurchaseInventory, purchaseOrder ErpPurchaseOrder) error { +func InventoryErpPurchaseUpdateRejectStock(gdb *gorm.DB, list []ErpPurchaseInventory, purchaseOrder ErpPurchaseOrder, + cancelFlag bool) error { usedStockCommodityIdList := make(map[uint32]bool) for i, _ := range list { if list[i].IMEIType == 2 || list[i].IMEIType == 3 { // 串码商品 @@ -1501,9 +1502,14 @@ func InventoryErpPurchaseUpdateRejectStock(gdb *gorm.DB, list []ErpPurchaseInven // return fmt.Errorf("商品[%s]在销售锁定中,不能退货", stockCommodityInfo.ErpCommodityName) //} + orderState := PurchaseReturn + if cancelFlag { // 反审核取消即可 + orderState = PurchaseCancel + } + err = gdb.Table("erp_stock_commodity").Where("imei = ?", list[i].IMEI). Updates(&map[string]interface{}{ - "state": PurchaseCancel, + "state": orderState, "stock_sn": list[i].SerialNumber, "updated_at": time.Now(), }).Error // 状态更新为采购退货 @@ -6313,7 +6319,7 @@ func CancelAuditUpdateStock(begin *gorm.DB, req ErpPurchaseOrder) error { purchaseOrder.RejectedSerialNumber = purchaseOrder.SerialNumber // 按照采购退货更新库存 - err = InventoryErpPurchaseUpdateRejectStock(begin, inventoryList, purchaseOrder) + err = InventoryErpPurchaseUpdateRejectStock(begin, inventoryList, purchaseOrder, true) if err != nil { return fmt.Errorf("取消审核失败:%s", err.Error()) }