Day 12 - 物品借用纪录系统 (3) 系统完成

今天我们就把整个服务完成吧!

不知道大家顺利地收到通知了没?

我已经顺利收到罗~

咦咦咦?发生什麽事!

为什麽我一次收到两封咧?

回头看一下程序码,以及对照了一下试算表表单,我发现:

啊!他连已经勾选的项目都算进去了啦!

而且信中的内容也有问题:

那个 -3 天是发生什麽事啊…

所以我们今天会来调整一下这两个部分!


首先我们先简单的来调整一下「已经归还的物品不用再发信」的部分。

其实这部份超级简单的,只是加上一组判断式而已:

function returnNotice() {
  // 取得试算表中的所有资料
  const TheDatas = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
  // 取得现在时间
  const now = new Date().getTime();
  // 设定开始通知的时间
  const oneDayTime = 24*60*60*1000;
  const startNoticeTime = 3*oneDayTime;

  TheDatas.forEach(data => {
    if (data[0] === "时间戳记") {
      return;
    }
+    if (data[6]) {
+      return;
+    }
    let expireTime = new Date(data[5]).getTime();
    let remainingDay = expireTime - now;
    if (remainingDay > startNoticeTime) {
      return;
    }
    remainingDay = Math.floor(remainingDay/oneDayTime);
    const noticeData = {
      email: data[1],
      name: data[2],
      itemName: data[3],
      itemCount: data[4],
      remaining: remainingDay
    };
    SendNotice(noticeData);
  });
}

根据我们拿到的资料,在 data[6] 的资料为是否已经归还的 Check Box ,所以我们只要看到这笔资料为 true 的时候,表示被勾选,已经归还,就直接跳过,不用留恋。

这样,就不会发生已经归还却还是寄信的问题了~

但是我们需要等到明天早上才能被测试吗?

当然不是,记不记得我们前面有说过可以做测试执行呢?

如果是要资料进来才执行的,当然没办法使用这个功能。

但是我们今天是要直接抓整个试算表的资料,所以用测试执行会是刚刚好的选项!

所以我们回到编辑器,找到执行的部分:

接着按下 onItemReturn 那个地方,切换我们要测试的函式:

选择 returnNotice 後,按下执行:

接着我们就会看到我们的 returnNotice 被执行了!

我们切回信箱看一下信件:

太好了!我们只会寄出还没归还的东西了!

这个部分你可以跟你自己的资料进行比对喔~


接下来我们来看一下那个 -3 天怎麽办…

其实也很简单,我们要去调整 SendNotice 这个函式,新增一个条件式进去。

function SendNotice({email, name, itemName, itemCount, remaining}) {
  MailApp.sendEmail({
    to: email,
-    subject: 【系统讯息,请勿回覆】距离归还 ${itemName} 剩余 ${remaining} 天!
+    subject: remaining >= 0 ? `【系统讯息,请勿回覆】距离归还 ${itemName} 剩余 ${remaining} 天!` : `【系统讯息,请勿回覆】距离归还 ${itemName} 已经逾期归还 ${Math.abs(remaining)} 罗!`,
    body: `${name} 您好,
-      您借用的 ${itemCount} 个 ${itemName} 剩余 ${remaining} 天需要归还`
+      您借用的 ${itemCount} 个 ${itemName} ${remaining >= 0 ? `剩余 ${remaining} 天需要归还` : `已经逾期 ${Math.abs(remaining)} 天归还`},
-      请务必於时限内归还,或是至资讯组办理续借。
+      请务必於尽速归还,或是至资讯组办理续借。
      非常感谢您的配合!`
  });
}

我这边为了处理上方便,因此采用三元运算子,这我们在 Day8 有用过,大家可以回去看一下喔~

OK,我们来测试一下吧!

重复上面测试的动作,然後再去收信:

太好了,标题有成功修改!

我们进入内文看看:

成功修改!


今天我们就到这里罗!

我相信你们对於上面这一个专题还有一些疑惑…

但是不用担心,明天我就来为大家好好讲一讲里面的一些内容。

照惯例:

今日作业

请试着把 SendNotice 和 SendMail 这两个函式合并吧!

作业也许稍难,但是非常有挑战性喔~

我们就明天见~


关於兔兔们:


我:Google Apps Script 的内容真的可以写很多,但是自从行政上越来越忙後,写文章的时间也压缩了…期许我自己接下来还能好好写文章,把这 30 天挑战完成吧!
我:话说…没有学生呛我,感觉有点无聊呢……我才不是受虐体质呢!!!

<<:  D-18 生命周期 ? request pipeline ? di lifecycle

>>:  Day 13 -资料查询语言 ORDER BY !

学习JavaScript第三天--使用vscode写出js--console.log印出资讯

VScode: Step 1 开启index.html存挡 Step 2 开启all.js存挡 St...

Build OpenWRT於Raspberry Pi4

前言 先说这是新手纪录流程,最近想研究一下树莓派当作开发板的使用情境。 於是开始了这个纪录文章,想说...

Day26 如何改善专注力?

大家好,我是乌木白,今天想和大家谈谈专注力这件事情。 浅谈自己的专注力 认识我的人,都知道其实我的...

Day-15 Excel图表介绍

结束了为期三天的枢纽分析表,接着进到另一大主题,图表 (>ε<) 相信大家都知道图表可以让冗长的资数...

[区块链&DAPP介绍 Day6] Solidity 教学 - reference types

昨天看完value types,今天来聊聊 reference types。 solidity 的 ...