From 0a4f3c0d6862def516b814698ddc88cec9bf58e2 Mon Sep 17 00:00:00 2001 From: Suphonchai Phoonsawat Date: Fri, 17 Jul 2026 13:54:45 +0700 Subject: [PATCH] =?UTF-8?q?fix=20user/check=20=3D>=20totalDay=20=E0=B9=84?= =?UTF-8?q?=E0=B8=A1=E0=B9=88=E0=B9=84=E0=B8=94=E0=B9=89=E0=B8=84=E0=B8=A3?= =?UTF-8?q?=E0=B8=B6=E0=B9=88=E0=B8=87=E0=B8=A7=E0=B8=B1=E0=B8=99=E0=B8=81?= =?UTF-8?q?=E0=B9=88=E0=B8=AD=E0=B8=99=E0=B9=80=E0=B8=82=E0=B9=89=E0=B8=B2?= =?UTF-8?q?=E0=B8=AA=E0=B8=A1=E0=B8=81=E0=B8=B2=E0=B8=A3=E0=B8=95=E0=B8=A3?= =?UTF-8?q?=E0=B8=A7=E0=B8=88=E0=B8=AA=E0=B8=AD=E0=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/LeaveRequestController.cs | 32 ++++--- reprocess.sh | 86 +++++++++++++++++++ 2 files changed, 107 insertions(+), 11 deletions(-) create mode 100644 reprocess.sh diff --git a/BMA.EHR.Leave/Controllers/LeaveRequestController.cs b/BMA.EHR.Leave/Controllers/LeaveRequestController.cs index b9f222a4..a473c3a2 100644 --- a/BMA.EHR.Leave/Controllers/LeaveRequestController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveRequestController.cs @@ -1053,6 +1053,16 @@ namespace BMA.EHR.Leave.Service.Controllers public async Task> CheckUserLeaveAsync([FromBody] GetLeaveCheckDto req) { var totalDay = (double)req.StartLeaveDate.DiffDay(req.EndLeaveDate.Date); + if (req.StartLeaveDate == req.EndLeaveDate) + { + if (req.LeaveRange != "ALL") + totalDay -= 0.5; + } + else + { + if(req.LeaveRangeEnd != "ALL") + totalDay -= 0.5; + } var userId = UserId == null ? Guid.Empty : Guid.Parse(UserId); @@ -1306,25 +1316,25 @@ namespace BMA.EHR.Leave.Service.Controllers isLeave = false; message = "ช่วงวันลาที่ระบุไม่ถูกต้อง"; } - - if (req.LeaveRange != "ALL") - totalDay -= 0.5; - - if (req.LeaveRangeEnd != "ALL") - totalDay -= 0.5; - + + // if (req.LeaveRange != "ALL") + // totalDay -= 0.5; + // + // if (req.LeaveRangeEnd != "ALL") + // totalDay -= 0.5; + } else if (totalDay == 1) { - + if (req.LeaveRange != req.LeaveRangeEnd) { isLeave = false; message = "ช่วงวันลาที่ระบุไม่ถูกต้อง"; } - if (req.LeaveRange != "ALL") - totalDay -= 0.5; - + // if (req.LeaveRange != "ALL") + // totalDay -= 0.5; + } diff --git a/reprocess.sh b/reprocess.sh new file mode 100644 index 00000000..42a9b3eb --- /dev/null +++ b/reprocess.sh @@ -0,0 +1,86 @@ +#!/usr/bin/env bash +# +# เรียก Keycloak/OpenID Connect token endpoint เพื่อขอ access token +# ผ่าน client_credentials grant type (form-urlencoded) +# + +set -euo pipefail + +# ฟังก์ชันเขียน log พร้อม timestamp (YYYY-MM-DD HH:MM:SS) +log() { + printf '[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$1" +} +# log ส่งออกไป stderr (เหมาะกับ error/เตือน) +log_err() { + printf '[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$1" >&2 +} + +# --- เขียน log ลงไฟล์ (แยกรายวัน) เก็บไว้แค่ 2 วัน --- +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +LOG_DIR="${SCRIPT_DIR}/logs" +mkdir -p "${LOG_DIR}" +# ลบ log เก่ากว่า 2 วัน +find "${LOG_DIR}" -name 'reprocess_*.log' -type f -mtime +2 -delete +LOG_FILE="${LOG_DIR}/reprocess_$(date '+%Y-%m-%d').log" +if [[ -t 1 ]]; then + # รันมือ (มี tty): แสดงบนหน้าจอ + เก็บลงไฟล์ + exec > >(tee -a "${LOG_FILE}") 2>&1 +else + # รันผ่าน cron (ไม่มี tty): เก็บลงไฟล์อย่างเดียว เพื่อไม่ให้ซ้อนกับ redirect ของ cron + exec >>"${LOG_FILE}" 2>&1 +fi + +# --- ตรวจเวลาทำการ: ทำงานเฉพาะช่วง 07:00-09:59 และ 15:00-17:59 ของทุกวัน --- +# (10#$H บังคับตีความเลขฐาน 10 ป้องกันปัญหา 08/09 ถูกอ่านเป็นเลขฐาน 8) +CURRENT_HOUR=$(date '+%H') +if (( 10#$CURRENT_HOUR >= 7 && 10#$CURRENT_HOUR < 10 )) || \ + (( 10#$CURRENT_HOUR >= 15 && 10#$CURRENT_HOUR < 18 )); then + log "อยู่ในช่วงเวลาทำการ (hour=${CURRENT_HOUR}) — เริ่มทำงาน" +else + log "นอกช่วงเวลาทำการ (hour=${CURRENT_HOUR}) — ข้ามการทำงาน" + exit 0 +fi + +TOKEN_URL="https://hrms-id.bangkok.go.th/realms/hrms/protocol/openid-connect/token" +CLIENT_ID="gettoken" +CLIENT_SECRET="obeDw3t3dsDkIkhqzszul6VybAaoRCjf" + +response=$(curl -sS -X POST "${TOKEN_URL}" \ + -H "Content-Type: application/x-www-form-urlencoded" \ + --data-urlencode "client_id=${CLIENT_ID}" \ + --data-urlencode "client_secret=${CLIENT_SECRET}" \ + --data-urlencode "grant_type=client_credentials") + +# ดึงเฉพาะ access_token ออกมาจาก JSON response +access_token=$(printf '%s' "${response}" | python3 -c "import sys, json; print(json.load(sys.stdin).get('access_token', ''))") + +if [[ -z "${access_token}" ]]; then + log_err "ไม่สามารถดึง access_token ได้ — response:" + printf '[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "${response}" >&2 + exit 1 +fi +log "ได้ access token แล้ว" + +# --- เรียก API reprocess-stale-checkin-jobs โดยแนบ Bearer token ---------- +API_URL="https://hrms.bangkok.go.th/api/v1/leave/reprocess-stale-checkin-jobs?timeoutMinutes=15" + +log "กำลังเรียก ${API_URL}" +http_code=$(curl -sS -o /tmp/reprocess_response.txt -w "%{http_code}" \ + --max-time 600 \ + -X POST "${API_URL}" \ + -H "Authorization: Bearer ${access_token}" \ + -H "Content-Type: application/json") + +log "HTTP status: ${http_code}" +log "Response:" +printf '[%s] ' "$(date '+%Y-%m-%d %H:%M:%S')" +cat /tmp/reprocess_response.txt +echo + +if [[ "${http_code}" -ge 200 && "${http_code}" -lt 300 ]]; then + log "สำเร็จ" + exit 0 +else + log_err "ล้มเหลว (HTTP ${http_code})" + exit 1 +fi \ No newline at end of file