-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGoogleAppScript
More file actions
130 lines (119 loc) · 5.77 KB
/
Copy pathGoogleAppScript
File metadata and controls
130 lines (119 loc) · 5.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
function DB_Function() {}
// const SEND_DONG_URL = "https://script.google.com/macros/s/AKfycbzQusYxCeQ4RwZB2A1FIxz5zhsQEWkoPKo-6F2yajh-ng5yoDZD/exec?Function=sendMsg&To=咚咚&In=";
const SpreadSheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/15UfSjqgVChNDwt3HUX8In299HQQkNJswJKIU4dfky9g/edit?usp=sharing');
const LOG_Sheet = SpreadSheet.getSheetByName('LOG');
const HIS_Sheet = SpreadSheet.getSheetByName('History');
const Every_Sheet = SpreadSheet.getSheetByName('EveryDay');
const Analyze_Sheet = SpreadSheet.getSheetByName('Analyze');
var formattedDate = Utilities.formatDate(new Date(),"GMT+8","yyyy-MM-dd HH:mm:ss");
var dayTime = Utilities.formatDate(new Date(),"GMT+8","HH:mm");
const LOG_ROW = 4, LOG_COL = 2; //LOG第一筆資料位置
const TitleDay = LOG_Sheet.getRange("B2"); //標題位置
const SaveData = LOG_Sheet.getRange("B4:B1000"); //儲存資料
const ClearData = LOG_Sheet.getRange("B4:D2259"); //刪除資料
function setHistory_daily(){
HIS_Sheet.insertColumnBefore(1);
let D = LOG_Sheet.getRange("A1").getValue()
var date = D.getFullYear() + "/" + (D.getMonth()+1) + "/"+D.getDate(); //取得最後更新資料日期(資料當日)
HIS_Sheet.getRange("A1").setValue(date);
// SaveData.copyValuesToRange(HIS_Sheet, 1,1,2,2); //全部過來
const data = SaveData.getValues().filter((_, index) => index % 2 === 0);
const numRows = Math.ceil(data.length / 2);
const newData = [];
Logger.log(data[0][0])
if(data[0][0]=="你正") data[0][0]="正在位置上"
for (let i = 0; i < numRows; i++) {
newData.push([data[i][0]]);
}
HIS_Sheet.getRange(2, 1, numRows, 1).setValues(newData);
Every_Sheet.insertRowBefore(4);
Every_Sheet.getRange("B4").setValue(date);
Every_Sheet.getRange("C4").setValue(LOG_Sheet.getRange("G3").getValue());
ClearData.clear({ formatOnly: false, contentsOnly: true }); //刪除當日全部
}
function test(){
// let nn = new Date(2023,4,25,0,0,0);
// nn.setHours(nn.getHours()-1);
// Logger.log(nn.getDate() + "-" + nn.getHours());
// Logger.log(new Date(2023,3,25).getDay())
recordSeatTime(new Date(2023,3,24,0,12,0), 15);
}
/* GET Method */
DB_Function.prototype.doGET_Active = function(e){
var whatToReturn = "HI,這是咚咚製作的 API LINK";//obj.getURL();
var FunctionName,InputStr;
FunctionName = e.parameter.Fun;
InputStr = e.parameter.In;
if(FunctionName == "saveData"){
whatToReturn = SAVE_DATA(InputStr);
}
return whatToReturn;
}
function GET_ON(){
LOG_Sheet.insertRowBefore(4);
LOG_Sheet.insertRowBefore(4);
LOG_Sheet.insertRowBefore(4);
/*預留OFF時間戳位置 */
LOG_Sheet.getRange("A1").setValue(formattedDate);
LOG_Sheet.getRange("B6").setValue(dayTime);
LOG_Sheet.getRange("C6").setValue(0);
LOG_Sheet.getRange("B5").setValue(dayTime);
LOG_Sheet.getRange("C5").setValue(1);
LOG_Sheet.getRange("B4").setValue("你正");
LOG_Sheet.getRange("C4").setValue("坐在");
LOG_Sheet.getRange("D4").setValue("位置上");
}
function GET_OFF(){
LOG_Sheet.insertRowBefore(4);
LOG_Sheet.getRange("B5").setValue(dayTime);
LOG_Sheet.getRange("C5").setValue(1);
LOG_Sheet.getRange("D5").setValue("");
LOG_Sheet.getRange("B4").setValue(dayTime);
LOG_Sheet.getRange("C4").setValue(0);
let diff_s = new Date().getTime() - LOG_Sheet.getRange("A1").getValue().getTime();
LOG_Sheet.getRange("D4").setValue(parseInt(diff_s/60000));
recordStayTime(new Date(), parseInt(diff_s/60000));
recordLeaveTimes(new Date());
}
function recordLeaveTimes(Date){
const hour = Date.getHours(); // 取得這個時間戳記的小時
const dayIndex = Date.getDay(); // 取得這個時間戳記是星期幾
const targetCell = Analyze_Sheet.getRange(hour + 3, dayIndex + 2 +11); // 取得要儲存資料的儲存格
const currentValue = targetCell.getValue() || 0; // 取得目前儲存格的值,如果是空的就設定為0
targetCell.setValue(currentValue + 1); // 壘加到目前的值
}
function recordStayTime(Date, Time) {
const hour = Date.getHours(); // 取得這個時間戳記的小時
const dayIndex = Date.getDay(); // 取得這個時間戳記是星期幾
const targetCell = Analyze_Sheet.getRange(hour + 3, dayIndex + 2); // 取得要儲存資料的儲存格
const currentValue = targetCell.getValue() || 0; // 取得目前儲存格的值,如果是空的就設定為0
if(Time <= Date.getMinutes()) targetCell.setValue(currentValue + Time); // 將這次的坐姿時間加到目前的值上
else { //持續時間 超過 目前時間
targetCell.setValue(currentValue + Date.getMinutes());
Time -= Date.getMinutes(); //最開始那小時所佔的時間
Date.setMinutes(Time%60); //最開始那小時所佔的時間
Date.setHours(Date.getHours() -1); //遞減小時數 (JS會自動判斷遞減日期)
/* For Last or more Hour */
for(let t=Time; t>0; t-=60){
let targetCell = Analyze_Sheet.getRange(Date.getHours() + 3, Date.getDay() + 2); // 取得要儲存資料的儲存格
let currentValue = targetCell.getValue() || 0; // 取得目前儲存格的值,如果是空的就設定為0
targetCell.setValue(currentValue + (t>60?60:t)); // 將這次的坐姿時間加到目前的值上
Date.setHours(Date.getHours() -1);
}
}
}
function SAVE_DATA(InputStr){
if(LOG_Sheet.getRange("B4").getValue() == "你正" && InputStr == "ON") return "repetitive action";
// if(LOG_Sheet.getRange("B4").getValue() != "你正" && InputStr == "OFF") return "repetitive action";
/*先判斷是否換日 */
var TitleDate = TitleDay.getValue().substr(8,5);
var TodayDate = Utilities.formatDate(new Date(),"GMT+8","MM/dd");
if(TitleDate < TodayDate) {
setHistory_daily();
TitleDay.setValue("Daily ( "+TodayDate+" )");
}
if(InputStr == "ON") GET_ON();
else if(InputStr == "OFF") GET_OFF();
else return "no work";
return "ACK";
}