Add sendTime control for preregister email
This commit is contained in:
@@ -292,6 +292,67 @@ class SendEmailPreregister extends MY_Controller
|
|||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$data_send_patients = [];
|
$data_send_patients = [];
|
||||||
|
$sendTime = '20:00:00';
|
||||||
|
|
||||||
|
$sql_notif_config = "SELECT
|
||||||
|
Email_ConfigNofificationTemplate,
|
||||||
|
Email_ConfigNofificationSender,
|
||||||
|
Email_ConfigNofificationSendTime
|
||||||
|
FROM email_config_nofification
|
||||||
|
WHERE Email_ConfigNofificationIsActive = 'Y'
|
||||||
|
ORDER BY Email_ConfigNofificationID DESC
|
||||||
|
LIMIT 1";
|
||||||
|
$que_notif_config = $this->db->query($sql_notif_config);
|
||||||
|
if (!$que_notif_config || $que_notif_config->num_rows() == 0) {
|
||||||
|
throw new Exception('[Error] failed get notif email template config');
|
||||||
|
}
|
||||||
|
$notifConfig = $que_notif_config->row_array();
|
||||||
|
$templateBody = $notifConfig['Email_ConfigNofificationTemplate'];
|
||||||
|
if (!empty($notifConfig['Email_ConfigNofificationSendTime'])) {
|
||||||
|
$sendTime = $notifConfig['Email_ConfigNofificationSendTime'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$nowTime = date('H:i:s');
|
||||||
|
if ($nowTime < $sendTime) {
|
||||||
|
$this->sys_ok([
|
||||||
|
"message" => "skip queue, current time before send time",
|
||||||
|
"current_time" => $nowTime,
|
||||||
|
"send_time" => $sendTime,
|
||||||
|
"total_email_queued" => 0
|
||||||
|
]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$targetDate = date('Y-m-d', strtotime('+1 day'));
|
||||||
|
$sql_mcu_sync = "SELECT Mgm_McuID
|
||||||
|
FROM mgm_mcu
|
||||||
|
WHERE Mgm_McuIsActive = 'Y'";
|
||||||
|
$que_mcu_sync = $this->db->query($sql_mcu_sync);
|
||||||
|
if (!$que_mcu_sync) {
|
||||||
|
throw new Exception('[Error] failed get mcu list for dashboard sync');
|
||||||
|
}
|
||||||
|
$mcuRows = $que_mcu_sync->result_array();
|
||||||
|
foreach ($mcuRows as $mcuRow) {
|
||||||
|
$mcuIDSync = isset($mcuRow['Mgm_McuID']) ? intval($mcuRow['Mgm_McuID']) : 0;
|
||||||
|
if ($mcuIDSync <= 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$que_sync = $this->db->query(
|
||||||
|
"CALL cpone.sp_refresh_mcu_participant_daily_by_mcu_date(?, ?)",
|
||||||
|
[$mcuIDSync, $targetDate]
|
||||||
|
);
|
||||||
|
if (!$que_sync) {
|
||||||
|
throw new Exception('[Error] failed sync dashboard participant daily');
|
||||||
|
}
|
||||||
|
if (isset($this->db->conn_id) && $this->db->conn_id instanceof mysqli) {
|
||||||
|
while ($this->db->conn_id->more_results() && $this->db->conn_id->next_result()) {
|
||||||
|
$dummyResult = $this->db->conn_id->store_result();
|
||||||
|
if ($dummyResult instanceof mysqli_result) {
|
||||||
|
$dummyResult->free();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$sql_patients = "SELECT
|
$sql_patients = "SELECT
|
||||||
pp.Mcu_PreregisterPatientsID AS preregister_id,
|
pp.Mcu_PreregisterPatientsID AS preregister_id,
|
||||||
@@ -325,20 +386,6 @@ class SendEmailPreregister extends MY_Controller
|
|||||||
}
|
}
|
||||||
$data_send_patients = $que_patients->result_array();
|
$data_send_patients = $que_patients->result_array();
|
||||||
|
|
||||||
$sql_notif_config = "SELECT
|
|
||||||
Email_ConfigNofificationTemplate,
|
|
||||||
Email_ConfigNofificationSender
|
|
||||||
FROM email_config_nofification
|
|
||||||
WHERE Email_ConfigNofificationIsActive = 'Y'
|
|
||||||
ORDER BY Email_ConfigNofificationID DESC
|
|
||||||
LIMIT 1";
|
|
||||||
$que_notif_config = $this->db->query($sql_notif_config);
|
|
||||||
if (!$que_notif_config || $que_notif_config->num_rows() == 0) {
|
|
||||||
throw new Exception('[Error] failed get notif email template config');
|
|
||||||
}
|
|
||||||
$notifConfig = $que_notif_config->row_array();
|
|
||||||
$templateBody = $notifConfig['Email_ConfigNofificationTemplate'];
|
|
||||||
|
|
||||||
$this->db->trans_begin();
|
$this->db->trans_begin();
|
||||||
foreach ($data_send_patients as $patient) {
|
foreach ($data_send_patients as $patient) {
|
||||||
$sql_config_email = "SELECT * FROM m_emailconfig WHERE M_EmailConfigType = 'R'";
|
$sql_config_email = "SELECT * FROM m_emailconfig WHERE M_EmailConfigType = 'R'";
|
||||||
|
|||||||
@@ -438,6 +438,28 @@ class Email_gateway extends MY_Controller
|
|||||||
$max_per_batch = 20;
|
$max_per_batch = 20;
|
||||||
|
|
||||||
$this->log($log_type, "Start Process $log_type Email");
|
$this->log($log_type, "Start Process $log_type Email");
|
||||||
|
|
||||||
|
$send_time = '20:00:00';
|
||||||
|
$sql_cfg = "SELECT Email_ConfigNofificationSendTime
|
||||||
|
FROM email_config_nofification
|
||||||
|
WHERE Email_ConfigNofificationIsActive = 'Y'
|
||||||
|
ORDER BY Email_ConfigNofificationID DESC
|
||||||
|
LIMIT 1";
|
||||||
|
$que_cfg = $this->db->query($sql_cfg);
|
||||||
|
if ($que_cfg && $que_cfg->num_rows() > 0) {
|
||||||
|
$cfg = $que_cfg->row_array();
|
||||||
|
if (!empty($cfg['Email_ConfigNofificationSendTime'])) {
|
||||||
|
$send_time = $cfg['Email_ConfigNofificationSendTime'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$send_time_with_delay = date("H:i:s", strtotime($send_time . " +10 minutes"));
|
||||||
|
$now_time = date("H:i:s");
|
||||||
|
if ($now_time < $send_time_with_delay) {
|
||||||
|
$this->log($log_type, "Skip process, current time $now_time < send time+delay $send_time_with_delay");
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
$tmp_mark_file = "/xtmp/{$log_type}-file.json";
|
$tmp_mark_file = "/xtmp/{$log_type}-file.json";
|
||||||
$this->load->library("Gmail");
|
$this->load->library("Gmail");
|
||||||
$is_running = false;
|
$is_running = false;
|
||||||
|
|||||||
62
docs_preregister_email_cron.md
Normal file
62
docs_preregister_email_cron.md
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
# Setup Cron 5 Menit - Preregister Email Gateway
|
||||||
|
|
||||||
|
Dokumen ini untuk menjalankan worker pengiriman email preregister secara terjadwal setiap 5 menit.
|
||||||
|
|
||||||
|
## 1) Tambahkan cron job
|
||||||
|
|
||||||
|
Edit crontab user yang menjalankan service web/app:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
crontab -e
|
||||||
|
```
|
||||||
|
|
||||||
|
Tambahkan baris ini:
|
||||||
|
|
||||||
|
```cron
|
||||||
|
*/5 * * * * /usr/bin/php /home/one/project/one/BE_CPONE/index.php tools/Email_gateway/preregister >> /xtmp/cron-preregister-email.log 2>&1
|
||||||
|
```
|
||||||
|
|
||||||
|
Catatan:
|
||||||
|
- Sesuaikan path PHP jika berbeda (`which php`).
|
||||||
|
- Sesuaikan path repo jika berbeda dari `/home/one/project/one/BE_CPONE`.
|
||||||
|
|
||||||
|
## 2) Cara kerja dengan config jam kirim
|
||||||
|
|
||||||
|
Worker `tools/Email_gateway/preregister` akan:
|
||||||
|
- Baca `Email_ConfigNofificationSendTime` dari tabel `cpone.email_config_nofification` (record aktif terbaru).
|
||||||
|
- Jika waktu sekarang belum mencapai jam tersebut, worker langsung `exit`.
|
||||||
|
- Jika sudah masuk jam kirim, worker proses queue `preregister_email_outbox`.
|
||||||
|
|
||||||
|
Default `send time` saat ini: `20:00:00`.
|
||||||
|
|
||||||
|
## 3) Verifikasi cron aktif
|
||||||
|
|
||||||
|
Cek isi crontab:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
crontab -l
|
||||||
|
```
|
||||||
|
|
||||||
|
Pantau log cron:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
tail -f /xtmp/cron-preregister-email.log
|
||||||
|
```
|
||||||
|
|
||||||
|
Pantau log worker:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
tail -f /xtmp/x-email-preregister.log
|
||||||
|
```
|
||||||
|
|
||||||
|
## 4) Ubah jam kirim via DB
|
||||||
|
|
||||||
|
Contoh ubah jam kirim jadi 20:00:00:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
UPDATE cpone.email_config_nofification
|
||||||
|
SET Email_ConfigNofificationSendTime = '20:00:00'
|
||||||
|
WHERE Email_ConfigNofificationIsActive = 'Y';
|
||||||
|
```
|
||||||
|
|
||||||
|
Disarankan hanya 1 row aktif untuk konfigurasi ini.
|
||||||
@@ -5,6 +5,7 @@ CREATE TABLE IF NOT EXISTS `cpone`.`email_config_nofification` (
|
|||||||
`Email_ConfigNofificationUsername` varchar(100) NOT NULL,
|
`Email_ConfigNofificationUsername` varchar(100) NOT NULL,
|
||||||
`Email_ConfigNofificationPassword` varchar(100) NOT NULL,
|
`Email_ConfigNofificationPassword` varchar(100) NOT NULL,
|
||||||
`Email_ConfigNofificationServer` varchar(100) NOT NULL,
|
`Email_ConfigNofificationServer` varchar(100) NOT NULL,
|
||||||
|
`Email_ConfigNofificationSendTime` time NOT NULL DEFAULT '20:00:00',
|
||||||
`Email_ConfigNofificationCreated` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
`Email_ConfigNofificationCreated` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
`Email_ConfigNofificationCreatedUserID` int NOT NULL DEFAULT '0',
|
`Email_ConfigNofificationCreatedUserID` int NOT NULL DEFAULT '0',
|
||||||
`Email_ConfigNofificationLastUpdated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
`Email_ConfigNofificationLastUpdated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
@@ -20,6 +21,7 @@ INSERT INTO `cpone`.`email_config_nofification` (
|
|||||||
`Email_ConfigNofificationUsername`,
|
`Email_ConfigNofificationUsername`,
|
||||||
`Email_ConfigNofificationPassword`,
|
`Email_ConfigNofificationPassword`,
|
||||||
`Email_ConfigNofificationServer`,
|
`Email_ConfigNofificationServer`,
|
||||||
|
`Email_ConfigNofificationSendTime`,
|
||||||
`Email_ConfigNofificationCreatedUserID`,
|
`Email_ConfigNofificationCreatedUserID`,
|
||||||
`Email_ConfigNofificationLastUpdatedUserID`,
|
`Email_ConfigNofificationLastUpdatedUserID`,
|
||||||
`Email_ConfigNofificationIsActive`
|
`Email_ConfigNofificationIsActive`
|
||||||
@@ -30,6 +32,7 @@ SELECT
|
|||||||
'',
|
'',
|
||||||
'',
|
'',
|
||||||
'',
|
'',
|
||||||
|
'20:00:00',
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
'Y'
|
'Y'
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
ALTER TABLE cpone.email_config_nofification
|
||||||
|
ADD COLUMN Email_ConfigNofificationSendTime TIME NOT NULL DEFAULT '20:00:00'
|
||||||
|
AFTER Email_ConfigNofificationServer;
|
||||||
Reference in New Issue
Block a user