package service import ( "crm/global" "crm/models" "time" ) type DashboardService struct { } // 数据汇总 func (d *DashboardService) Summary(uid int64, days int) models.DashboardSum { var ds models.DashboardSum global.Db.Raw("select count(*) from customer where creator = ?", uid).Scan(&ds.Customers) global.Db.Raw("select count(*) from contract where creator = ?", uid).Scan(&ds.Contracts) global.Db.Raw("select sum(amount) from contract where creator = ?", uid).Scan(&ds.ContractAmount) global.Db.Raw("select count(*) from product where creator = ?", uid).Scan(&ds.Products) now := time.Now().Unix() con := "created > ? and created < ? and status = 1 and creator = ?" ds.Amount = make([]float64, days) ds.Date = make([]string, days) for i, d := 0, days; i < days; i++ { day := now - (int64(d) * 24 * 60 * 60) start, end := dayRange(day) global.Db.Table(CONTRACT).Where(con, start, end, uid).Pluck("amount", &ds.Amount[i]) ds.Date[i] = time.Unix(day, 0).Format("01-02") d-- } s := "industry as name, count(*) as value" global.Db.Model(&models.Customer{}).Select(s).Where("creator = ?", uid).Group("industry").Find(&ds.CustomerIndustry) return ds } // 获取某一天的时间范围 func dayRange(day int64) (int64, int64) { t := time.Unix(day, 0) start := time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, t.Location()) end := start.AddDate(0, 0, 1) return start.Unix(), end.Unix() }