package report import ( "errors" "fmt" "math" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/model/dao" ) var ( storeIDsExist []int storeIDsNotExist []int StatisticsForOrdersExists *dao.StatisticsForOrdersExists StatisticsForOrdersExistsStore *dao.StatisticsForOrdersExists ) func GetStatisticsReportForOrders(ctx *jxcontext.Context, storeIDs []int, fromDate string, toDate string) (statisticsReportForOrdersList []*dao.StatisticsReportForOrdersList, err error) { storeIDsExist = storeIDsExist[0:0] storeIDsNotExist = storeIDsNotExist[0:0] db := dao.GetDB() fromDateParm := utils.Str2Time(fromDate) toDateParm := utils.Str2Time(toDate) //若时间间隔大于3个月则不允许查询 if math.Ceil(toDateParm.Sub(fromDateParm).Hours()/24) > 92 { return nil, errors.New(fmt.Sprintf("查询间隔时间不允许大于3个月!: 时间范围:[%v] 至 [%v]", fromDate, toDate)) } //若入参中,不存在的店则不显示,存在的店但无订单的显示0 for _, id := range storeIDs { StatisticsForOrdersExistsStore, err = dao.IsStoreExist(db, id) if StatisticsForOrdersExistsStore == nil { continue } StatisticsForOrdersExists, err = dao.GetStatisticsForOrdersExist(db, id, fromDateParm, toDateParm) //若该门店存在此查询条件范围内的订单 if StatisticsForOrdersExists != nil { storeIDsExist = append(storeIDsExist, id) } else { storeIDsNotExist = append(storeIDsNotExist, id) } } statisticsReportForOrdersList, err = dao.GetStatisticsReportForOrders(db, storeIDsExist, fromDateParm, toDateParm) if storeIDsNotExist != nil { for _, v := range storeIDsNotExist { tempStruct1 := &dao.StatisticsForOrdersExists{ StoreID: v, } tempStruct2 := &dao.StatisticsReportForOrdersList{ StatisticsForOrdersExists: *tempStruct1, OrderCounts: 0, SalePrice: 0, ActualPayPrice: 0, ShopPrice: 0, DiscountMoney: 0, DesiredFee: 0, DistanceFreightMoney: 0, WaybillTipMoney: 0, TotalShopMoney: 0, PmSubsidyMoney: 0, EarningPrice: 0, TotalGrossProfit: 0, ComGrossProfit: 0, CityManagerGrossProfit: 0, } statisticsReportForOrdersList = append(statisticsReportForOrdersList, tempStruct2) } } return statisticsReportForOrdersList, err }