跳到主要内容

github/tai

公开

Tai · Windows 软件与网站使用时长统计。上游 Planshit/Tai 的源码镜像,非灵栈原创;MIT 许可。来源:https://github.com/Planshit/Tai 。本次为手动同步,暂不提供安装包。

提交记录
修改Core/Servicers/Instances/Data.cs+132 −9看文件
@@ -301,7 +301,7 @@ namespace Core.Servicers.Instances
301301
302302 }
303303
304删除: public List<CategoryChartDataModel> GetCategoryHoursData(DateTime date)
304新增: public List<ColumnDataModel> GetCategoryHoursData(DateTime date)
305305 {
306306 using (var db = new TaiDbContext())
307307 {
@@ -313,11 +313,11 @@ namespace Core.Servicers.Instances
313313 var data = db.Database.SqlQuery<CategoryHoursDataModel>("select sum(Time) as Total,AppModels.CategoryID,HoursLogModels.DataTime as Time from HoursLogModels join AppModels on AppModels.ID=HoursLogModels.AppModelID where AppModels.CategoryID<>0 and HoursLogModels.DataTime>='" + date.Date.ToString("yyyy-MM-dd HH:mm:ss") + "' and HoursLogModels.DataTime<= '" + date.Date.ToString("yyyy-MM-dd 23:59:59") + "' GROUP BY AppModels.CategoryID,HoursLogModels.DataTime ").ToArray();
314314
315315
316删除: List<CategoryChartDataModel> list = new List<CategoryChartDataModel>();
316新增: List<ColumnDataModel> list = new List<ColumnDataModel>();
317317
318318 foreach (var category in categorys)
319319 {
320删除: list.Add(new CategoryChartDataModel()
320新增: list.Add(new ColumnDataModel()
321321 {
322322 CategoryID = category.CategoryID,
323323 Values = new double[24]
@@ -341,7 +341,7 @@ namespace Core.Servicers.Instances
341341 }
342342 }
343343
344删除: public List<CategoryChartDataModel> GetCategoryRangeData(DateTime start, DateTime end)
344新增: public List<ColumnDataModel> GetCategoryRangeData(DateTime start, DateTime end)
345345 {
346346 using (var db = new TaiDbContext())
347347 {
@@ -357,12 +357,12 @@ namespace Core.Servicers.Instances
357357 var days = ts.TotalDays + 1;
358358
359359
360删除: List<CategoryChartDataModel> list = new List<CategoryChartDataModel>();
360新增: List<ColumnDataModel> list = new List<ColumnDataModel>();
361361
362362
363363 foreach (var category in categorys)
364364 {
365删除: list.Add(new CategoryChartDataModel()
365新增: list.Add(new ColumnDataModel()
366366 {
367367 CategoryID = category.CategoryID,
368368 Values = new double[(int)days]
@@ -389,7 +389,7 @@ namespace Core.Servicers.Instances
389389 }
390390 }
391391
392删除: public List<CategoryChartDataModel> GetCategoryYearData(DateTime date)
392新增: public List<ColumnDataModel> GetCategoryYearData(DateTime date)
393393 {
394394 using (var db = new TaiDbContext())
395395 {
@@ -407,12 +407,12 @@ namespace Core.Servicers.Instances
407407 //var days = ts.TotalDays + 1;
408408
409409
410删除: List<CategoryChartDataModel> list = new List<CategoryChartDataModel>();
410新增: List<ColumnDataModel> list = new List<ColumnDataModel>();
411411
412412
413413 foreach (var category in categorys)
414414 {
415删除: list.Add(new CategoryChartDataModel()
415新增: list.Add(new ColumnDataModel()
416416 {
417417 CategoryID = category.CategoryID,
418418 Values = new double[12]
@@ -439,5 +439,128 @@ namespace Core.Servicers.Instances
439439 return list;
440440 }
441441 }
442新增:
443新增: public struct ColumnItemDataModel
444新增: {
445新增: public int Total { get; set; }
446新增: public int AppID { get; set; }
447新增: public DateTime Time { get; set; }
448新增:
449新增: }
450新增:
451新增: public List<ColumnDataModel> GetAppDayData(int appID, DateTime date)
452新增: {
453新增: using (var db = new TaiDbContext())
454新增: {
455新增:
456新增: var data = db.Database.SqlQuery<ColumnItemDataModel>("select sum(Time) as Total,AppModelID as AppID,DataTime as Time from HoursLogModels where AppModelID=" + appID + " and DataTime>='" + date.Date.ToString("yyyy-MM-dd HH:mm:ss") + "' and DataTime<= '" + date.Date.ToString("yyyy-MM-dd 23:59:59") + "' GROUP BY AppModelID ").ToArray();
457新增:
458新增:
459新增: List<ColumnDataModel> list = new List<ColumnDataModel>();
460新增:
461新增:
462新增: list.Add(new ColumnDataModel()
463新增: {
464新增: AppId = appID,
465新增: Values = new double[24]
466新增: });
467新增:
468新增: var item = list[0];
469新增:
470新增: for (int i = 0; i < 24; i++)
471新增: {
472新增: string hours = i < 10 ? "0" + i : i.ToString();
473新增: var time = date.ToString($"yyyy-MM-dd {hours}:00:00");
474新增:
475新增: var log = data.Where(m => m.Time.ToString("yyyy-MM-dd HH:00:00") == time).FirstOrDefault();
476新增:
477新增:
478新增:
479新增: item.Values[i] = log.Total;
480新增: }
481新增: return list;
482新增: }
483新增: }
484新增:
485新增: public List<ColumnDataModel> GetAppRangeData(int appID, DateTime start, DateTime end)
486新增: {
487新增: using (var db = new TaiDbContext())
488新增: {
489新增: // 查出有数据的分类
490新增:
491新增: var data = db.Database.SqlQuery<ColumnItemDataModel>("select sum(Time) as Total,AppModelID as AppID,Date as Time from DailyLogModels where AppModelID=" + appID + " and Date>='" + start.Date.ToString("yyyy-MM-dd HH:mm:ss") + "' and Date<= '" + end.Date.ToString("yyyy-MM-dd HH:mm:ss") + "' GROUP BY Date ").ToArray();
492新增:
493新增:
494新增: var ts = end - start;
495新增: var days = ts.TotalDays + 1;
496新增:
497新增:
498新增: List<ColumnDataModel> list = new List<ColumnDataModel>();
499新增:
500新增:
501新增:
502新增: list.Add(new ColumnDataModel()
503新增: {
504新增: AppId = appID,
505新增: Values = new double[(int)days]
506新增: });
507新增:
508新增:
509新增: var item = list[0];
510新增:
511新增: for (int i = 0; i < days; i++)
512新增: {
513新增: string day = i < 10 ? "0" + i : i.ToString();
514新增: var time = start.AddDays(i).ToString($"yyyy-MM-dd 00:00:00");
515新增:
516新增: var log = data.Where(m => m.Time.ToString("yyyy-MM-dd 00:00:00") == time).FirstOrDefault();
517新增:
518新增: item.Values[i] = log.Total;
519新增: }
520新增: return list;
521新增: }
522新增: }
523新增:
524新增: public List<ColumnDataModel> GetAppYearData(int appID, DateTime date)
525新增: {
526新增: using (var db = new TaiDbContext())
527新增: {
528新增: // 查出有数据的分类
529新增:
530新增: var dateArr = Time.GetYearDate(date);
531新增:
532新增:
533新增: var data = db.Database.SqlQuery<ColumnItemDataModel>("select sum(Time) as Total,AppModelID as AppID,Date as Time from DailyLogModels where AppModelID=" + appID + " and Date>='" + dateArr[0].Date.ToString("yyyy-MM-dd HH:mm:ss") + "' and Date<= '" + dateArr[1].Date.ToString("yyyy-MM-dd HH:mm:ss") + "' GROUP BY Date").ToArray();
534新增:
535新增:
536新增:
537新增:
538新增: List<ColumnDataModel> list = new List<ColumnDataModel>();
539新增:
540新增:
541新增: list.Add(new ColumnDataModel()
542新增: {
543新增: AppId = appID,
544新增: Values = new double[12]
545新增: });
546新增:
547新增:
548新增: var item = list[0];
549新增:
550新增: for (int i = 1; i < 13; i++)
551新增: {
552新增: string month = i < 10 ? "0" + i : i.ToString();
553新增: var dayArr = Time.GetMonthDate(new DateTime(date.Year, i, 1));
554新增:
555新增: Debug.WriteLine(dayArr);
556新增:
557新增: var total = data.Where(m => m.Time >= dayArr[0] && m.Time <= dayArr[1]).Sum(m => m.Total);
558新增:
559新增:
560新增: item.Values[i - 1] = total;
561新增: }
562新增: return list;
563新增: }
564新增: }
442565 }
443566}
修改Core/Servicers/Interfaces/IData.cs+9 −3看文件
@@ -77,20 +77,26 @@ namespace Core.Servicers.Interfaces
7777 /// 获取指定日期所有分类时段统计数据
7878 /// </summary>
7979 /// <returns></returns>
80删除: List<CategoryChartDataModel> GetCategoryHoursData(DateTime date);
80新增: List<ColumnDataModel> GetCategoryHoursData(DateTime date);
8181 /// <summary>
8282 /// 获取指定日期范围所有分类按天统计数据
8383 /// </summary>
8484 /// <param name="start"></param>
8585 /// <param name="end"></param>
8686 /// <returns></returns>
87删除: List<CategoryChartDataModel> GetCategoryRangeData(DateTime start, DateTime end);
87新增: List<ColumnDataModel> GetCategoryRangeData(DateTime start, DateTime end);
8888 /// <summary>
8989 /// 获取指定年份所有分类按月份统计数据
9090 /// </summary>
9191 /// <param name="date"></param>
9292 /// <returns></returns>
93删除: List<CategoryChartDataModel> GetCategoryYearData(DateTime date);
93新增: List<ColumnDataModel> GetCategoryYearData(DateTime date);
94新增:
95新增: List<ColumnDataModel> GetAppDayData(int appID, DateTime date);
96新增: List<ColumnDataModel> GetAppRangeData(int appID, DateTime start, DateTime end);
97新增: List<ColumnDataModel> GetAppYearData(int appID, DateTime date);
98新增:
99新增:
94100
95101 }
96102}
修改UI/Models/DetailPageModel.cs+62 −0看文件
@@ -91,5 +91,67 @@ namespace UI.Models
9191 /// 当前分类
9292 /// </summary>
9393 public SelectItemModel Category { get { return Category_; } set { Category_ = value; OnPropertyChanged(); } }
94新增:
95新增:
96新增: // 图表数据
97新增: private List<ChartsDataModel> ChartData_;
98新增:
99新增: public List<ChartsDataModel> ChartData
100新增: {
101新增: get
102新增: {
103新增: return ChartData_;
104新增: }
105新增: set
106新增: {
107新增: ChartData_ = value;
108新增: OnPropertyChanged();
109新增: }
110新增: }
111新增:
112新增: private ObservableCollection<string> TabbarData_;
113新增: /// <summary>
114新增: /// tabbar data
115新增: /// </summary>
116新增: public ObservableCollection<string> TabbarData
117新增: {
118新增: get { return TabbarData_; }
119新增: set { TabbarData_ = value; OnPropertyChanged(); }
120新增: }
121新增:
122新增: private int TabbarSelectedIndex_;
123新增: /// <summary>
124新增: /// tabbar selected item index
125新增: /// </summary>
126新增: public int TabbarSelectedIndex
127新增: {
128新增: get { return TabbarSelectedIndex_; }
129新增: set
130新增: {
131新增: TabbarSelectedIndex_ = value;
132新增: OnPropertyChanged();
133新增: }
134新增: }
135新增: private string WeekDateStr_;
136新增: public string WeekDateStr { get { return WeekDateStr_; } set { WeekDateStr_ = value; OnPropertyChanged(); } }
137新增: private DateTime ChartDate_;
138新增: public DateTime ChartDate { get { return ChartDate_; } set { ChartDate_ = value; OnPropertyChanged(); } }
139新增:
140新增: private List<SelectItemModel> WeekOptions_;
141新增:
142新增: public List<SelectItemModel> WeekOptions { get { return WeekOptions_; } set { WeekOptions_ = value; OnPropertyChanged(); } }
143新增:
144新增: private SelectItemModel SelectedWeek_;
145新增:
146新增: public SelectItemModel SelectedWeek { get { return SelectedWeek_; } set { SelectedWeek_ = value; OnPropertyChanged(); } }
147新增:
148新增: private DateTime MonthDate_;
149新增: public DateTime MonthDate { get { return MonthDate_; } set { MonthDate_ = value; OnPropertyChanged(); } }
150新增:
151新增: private DateTime YearDate_;
152新增: public DateTime YearDate { get { return YearDate_; } set { YearDate_ = value; OnPropertyChanged(); } }
153新增:
154新增: private int NameIndexStart_ = 0;
155新增: public int NameIndexStart { get { return NameIndexStart_; } set { NameIndexStart_ = value; OnPropertyChanged(); } }
94156 }
95157}
修改UI/ViewModels/DetailPageVM.cs+198 −0看文件
@@ -52,6 +52,35 @@ namespace UI.ViewModels
5252
5353 Date = DateTime.Now;
5454
55新增: TabbarData = new System.Collections.ObjectModel.ObservableCollection<string>()
56新增: {
57新增: "按天","按周","按月","按年"
58新增: };
59新增:
60新增: var weekOptions = new List<SelectItemModel>();
61新增: weekOptions.Add(new SelectItemModel()
62新增: {
63新增: Name = "本周"
64新增: });
65新增: weekOptions.Add(new SelectItemModel()
66新增: {
67新增: Name = "上周"
68新增: });
69新增:
70新增: WeekOptions = weekOptions;
71新增:
72新增: SelectedWeek = weekOptions[0];
73新增:
74新增: MonthDate = DateTime.Now;
75新增:
76新增: TabbarSelectedIndex = 0;
77新增:
78新增: Date = DateTime.Now;
79新增:
80新增: YearDate = DateTime.Now;
81新增:
82新增: ChartDate = DateTime.Now;
83新增:
5584 PropertyChanged += DetailPageVM_PropertyChanged;
5685
5786 config = appConfig.GetConfig();
@@ -60,6 +89,7 @@ namespace UI.ViewModels
6089
6190 await LoadInfo();
6291
92新增: LoadDayData();
6393 }
6494 private void OnInfoMenuActionCommand(object obj)
6595 {
@@ -140,6 +170,48 @@ namespace UI.ViewModels
140170 }
141171
142172 }
173新增:
174新增: // 处理图表数据加载
175新增: if (e.PropertyName == nameof(ChartDate))
176新增: {
177新增: LoadDayData();
178新增: }
179新增: if (e.PropertyName == nameof(TabbarSelectedIndex))
180新增: {
181新增: if (TabbarSelectedIndex == 0)
182新增: {
183新增: NameIndexStart = 0;
184新增:
185新增: LoadDayData();
186新增: }
187新增: else if (TabbarSelectedIndex == 1)
188新增: {
189新增: LoadWeekData();
190新增: }
191新增: else if (TabbarSelectedIndex == 2)
192新增: {
193新增: NameIndexStart = 1;
194新增:
195新增: LoadMonthlyData();
196新增: }
197新增: else if (TabbarSelectedIndex == 3)
198新增: {
199新增: LoadYearData();
200新增: }
201新增:
202新增: }
203新增: if (e.PropertyName == nameof(SelectedWeek))
204新增: {
205新增: LoadWeekData();
206新增: }
207新增: if (e.PropertyName == nameof(MonthDate))
208新增: {
209新增: LoadMonthlyData();
210新增: }
211新增: if (e.PropertyName == nameof(YearDate))
212新增: {
213新增: LoadYearData();
214新增: }
143215 }
144216
145217 private void LoadCategorys(string categoryName)
@@ -304,5 +376,131 @@ namespace UI.ViewModels
304376
305377 return resData;
306378 }
379新增:
380新增: #region 柱状图图表数据加载
381新增: /// <summary>
382新增: /// 加载天数据
383新增: /// </summary>
384新增: private void LoadDayData()
385新增: {
386新增: Task.Run(() =>
387新增: {
388新增: var list = data.GetAppDayData(App.ID, ChartDate);
389新增:
390新增: var chartData = new List<ChartsDataModel>();
391新增:
392新增: foreach (var item in list)
393新增: {
394新增:
395新增: chartData.Add(new ChartsDataModel()
396新增: {
397新增: Name = App.Description,
398新增: Icon = App.IconFile,
399新增: Values = item.Values,
400新增: });
401新增: }
402新增:
403新增: ChartData = chartData;
404新增: });
405新增: }
406新增:
407新增: /// <summary>
408新增: /// 加载周数据
409新增: /// </summary>
410新增: private void LoadWeekData()
411新增: {
412新增: Task.Run(() =>
413新增: {
414新增: var weekDateArr = SelectedWeek.Name == "本周" ? Time.GetThisWeekDate() : Time.GetLastWeekDate();
415新增:
416新增: WeekDateStr = weekDateArr[0].ToString("yyyy年MM月dd日") + " 到 " + weekDateArr[1].ToString("yyyy年MM月dd日");
417新增:
418新增: var list = data.GetAppRangeData(App.ID, weekDateArr[0], weekDateArr[1]);
419新增:
420新增: var chartData = new List<ChartsDataModel>();
421新增:
422新增: string[] weekNames = { "周一", "周二", "周三", "周四", "周五", "周六", "周日", };
423新增: foreach (var item in list)
424新增: {
425新增:
426新增: chartData.Add(new ChartsDataModel()
427新增: {
428新增:
429新增: Name = App.Description,
430新增: Icon = App.IconFile,
431新增: Values = item.Values,
432新增: ColumnNames = weekNames
433新增: });
434新增: }
435新增:
436新增: ChartData = chartData;
437新增: });
438新增: }
439新增:
440新增: /// <summary>
441新增: /// 加载月数据
442新增: /// </summary>
443新增: private void LoadMonthlyData()
444新增: {
445新增: Task.Run(() =>
446新增: {
447新增: var dateArr = Time.GetMonthDate(MonthDate);
448新增:
449新增: var list = data.GetAppRangeData(App.ID, dateArr[0], dateArr[1]);
450新增:
451新增: var chartData = new List<ChartsDataModel>();
452新增:
453新增: foreach (var item in list)
454新增: {
455新增:
456新增: chartData.Add(new ChartsDataModel()
457新增: {
458新增:
459新增: Name = App.Description,
460新增: Icon = App.IconFile,
461新增: Values = item.Values,
462新增: });
463新增: }
464新增:
465新增: ChartData = chartData;
466新增:
467新增: });
468新增:
469新增: }
470新增:
471新增: /// <summary>
472新增: /// 加载年份数据
473新增: /// </summary>
474新增: private void LoadYearData()
475新增: {
476新增: Task.Run(() =>
477新增: {
478新增: var list = data.GetAppYearData(App.ID, YearDate);
479新增:
480新增: var chartData = new List<ChartsDataModel>();
481新增:
482新增: string[] names = new string[12];
483新增: for (int i = 0; i < 12; i++)
484新增: {
485新增: names[i] = (i + 1) + "月";
486新增: }
487新增:
488新增: foreach (var item in list)
489新增: {
490新增:
491新增: chartData.Add(new ChartsDataModel()
492新增: {
493新增: Name = App.Description,
494新增: Icon = App.IconFile,
495新增: Values = item.Values,
496新增: ColumnNames = names
497新增: });
498新增: }
499新增:
500新增: ChartData = chartData;
501新增:
502新增: });
503新增: }
504新增: #endregion
307505 }
308506}
修改UI/Views/DetailPage.xaml+38 −4看文件
@@ -9,7 +9,7 @@
99 d:DesignHeight="450" d:DesignWidth="800"
1010 Title="DetailPage"
1111 xmlns:btn="clr-namespace:UI.Controls.Button"
12删除: xmlns:base="clr-namespace:UI.Controls.Base">
12新增: xmlns:base="clr-namespace:UI.Controls.Base" xmlns:Tabbar="clr-namespace:UI.Controls.Tabbar">
1313
1414 <Grid>
1515 <StackPanel Margin="20">
@@ -84,7 +84,7 @@
8484 </StackPanel>
8585 </Grid>
8686 </Border>
87删除: <TextBlock Text="今日数据" FontSize="14" Margin="0,20,0,0"/>
87新增: <!--<TextBlock Text="今日数据" FontSize="14" Margin="0,20,0,0"/>
8888
8989 <Border
9090 Background="White"
@@ -104,9 +104,43 @@
104104 </StackPanel>
105105
106106 </StackPanel>
107删除: </Border>
107新增: </Border>-->
108新增: <TextBlock Text="统计" Foreground="#5c5c5c" FontSize="14" Margin="0,20,0,0"/>
109新增: <Tabbar:Tabbar Data="{Binding TabbarData}" SelectedIndex="{Binding TabbarSelectedIndex,Mode=TwoWay}" Width="180" HorizontalAlignment="Left"/>
110新增: <Border Margin="0,15,0,0" Width="680" HorizontalAlignment="Left" Background="White" Padding="20,10" CornerRadius="10">
111新增: <StackPanel>
112新增:
113新增:
114新增: <Grid Margin="0,15,0,0">
115新增: <!--按天-->
116新增: <base:View Condition="0" Value="{Binding TabbarSelectedIndex}">
117新增: <Select:DateSelect Date="{Binding ChartDate,Mode=TwoWay}"/>
118新增: </base:View>
108119
109删除: <TextBlock Text="月份数据" FontSize="14" Margin="0,20,0,0"/>
120新增: <!--按周-->
121新增: <base:View Condition="1" Value="{Binding TabbarSelectedIndex}">
122新增: <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
123新增: <Select:Select IsShowIcon="False" SelectedItem="{Binding SelectedWeek,Mode=TwoWay}" Options="{Binding WeekOptions}"/>
124新增: <TextBlock Foreground="#626262" Margin="20,0,0,0" FontSize="14" Text="{Binding WeekDateStr}" VerticalAlignment="Center"/>
125新增: </StackPanel>
126新增: </base:View>
127新增: <!--按月-->
128新增: <base:View Condition="2" Value="{Binding TabbarSelectedIndex}">
129新增: <Select:DateSelect Date="{Binding MonthDate,Mode=TwoWay}" SelectType="Month"/>
130新增:
131新增: </base:View>
132新增: <!--按年-->
133新增: <base:View Condition="3" Value="{Binding TabbarSelectedIndex}">
134新增: <Select:DateSelect Date="{Binding YearDate,Mode=TwoWay}" SelectType="Year"/>
135新增:
136新增: </base:View>
137新增: </Grid>
138新增: <Charts:Charts Height="300" NameIndexStart="{Binding NameIndexStart}" ChartsType="Column" Data="{Binding ChartData}" Margin="0,20,0,0"/>
139新增:
140新增: </StackPanel>
141新增:
142新增: </Border>
143新增: <TextBlock Text="热力图" Foreground="#5c5c5c" FontSize="14" Margin="0,20,0,0"/>
110144
111145 <Border
112146 Background="White"