1. 作業說明
1.1 先取得排班表 CSV檔,由csv 排班表取得本次要通知的數列"
判斷通知日是否=今日,若是今日,則記取csv排班表之數列
若找無通知日=今日,則跳離,表示本次不傳送LINE通知
1.2藉由上述csv 排班表取得之數列,再取得該數列所對應之訊息內容
將該訊息內容再出力至LINE傳送用參數檔(txt file),以便後續LINE訊息傳出之依據
1.3 LINE 傳出作業
依據 上述1.2 取得傳送訊息內容, 傳出訊息至事先設定好之LINE群組,
如此該群組成員便可收到LINE自動傳來之訊息
1.4 bat 設計與Windows自動排成設定
上述作業內容作成bat檔,以便可以按照排程,自動執行bat檔。
本次執行完後,
若判定需傳出訊息,則程式將會自動推播訊息給LINE群組內的所有成員;
若本次不須傳出訊息,則程式不會傳出LINE訊息。
2. 實例說明
2.1 csv 檔內之排班表預先排出2024年4月起三個月之計畫表,其各數列之內容如下
2.2 由上述數列,一一尋找通知日是否 = 今日
若是的話,將等於今日之通知日之數列值記取,以便以此數列取出相對應之訊息內容
本例今日 20240426 = 通知日,故判斷LINE需自動傳出訊息
本次要傳出之訊息內容為
4/29~5/11
李政杰
陳美軒
2.3 LINE 通知處理:
* 利用 python program : LINE_send_notify.exe
* LINE依據參數檔內所存之資料內容,傳出訊息至LINE群組
*上述參數檔內所存之資料內容,由執行bat檔後出力取得
本例 LINE參數檔內容取得如下:
M,
M,區公所值勤通知
M,期間: 4/29~5/11
M,早班: 李政杰
M,午班: 陳美軒
T,----------after executing bat job, decided the token Id -------
2.4 bat執行後,判斷本次是否需要傳出LINE 訊息
若需傳出LINE訊息,則由LINE_send_notify.exe 程式負責將內容傳至LINE官網機器,以便 LINE 能夠推播訊息給群組成員,群組成員收到LINE訊息內容,本例如下圖:
2.5 當排班表有更新時
排班內容是可異動的,當有需更新時, 直接更新追加Csv 檔即可,其餘程式與bat不必修改。
3. 改善前後
3.1 改善前 :
(1)主管或擔當人員欲查看下回排班值勤由誰負責,須找出紙張,或打開電腦檔案,才能查看
(2)值勤人員若無留意,容易忘記自己何日需值勤,耽誤值勤工作且無法事先準備
3.2 改善後:
(1)事前LINE主動發出通知,無論何處,所有人均可掌握值勤排班內容
(2) 換班前幾天收到通知,可事先安排交代事務給下回值勤人員,讓值勤業務能順利實施
4 bat 內容 :
bat name : LINESend_Shift.bat
@ECHO OFF
rem ---入力檔: (排班表)(IT).csv which you want to send message
REM ---出力檔: LINE_send_notify_par.txt which Python pg using parameters
d:
rem cd D:\LINCT_material\PC\cmd-bat\bat\LINE_Notify\IT_shift
cd D:\lin_PC\cmd-bat\bat\LINE_Notify\IT_shift
set /a var_indx=0
rem set T_md=%DATE:~5,2%%DATE:~8,2%
set T_ymd=%DATE:~,10%
set T_ymd=%T_ymd:/=%
set brk=N
rem ***STEP1 ---read csv for getting LINE 通知日
For /f " delims=" %%V in ('findstr "通知" "排班表.csv" ') do ( CALL :RCSV_D "%%V" )
:RD_Brake
rem echo %errorlevel% %var_indx% %LINE_F% %brk%
rem pause ---112 !var[%n%]! , n=%n% indx=%var_indx% ; %brk% ?
if %brk% NEQ Y ( echo ***** Do not LINE send this time & goto EOJ )
echo M,> LINE_send_notify_par.txt
echo M,區公所值勤通知>> LINE_send_notify_par.txt
rem ***STEP2 ---read csv for getting (即: 期間: /早班 /午班) ": 班"
For /f " delims=" %%V in ('findstr ": " "排班表.csv" ') do (CALL :RCSV_M "%%V")
rem ---get LINE send token No. -------
rem ---test P-l echo T,iq3DuxNuFXOgoWRPQqEal>> LINE_send_notify_par.txt
echo T,iEPXCVYGWis0cjLLl2zoQnwq3DuxNuFXOgoWRPQqEal>> LINE_send_notify_par.txt
CALL D:\lin_PC\cmd-bat\bat\LINE_Notify\LINE_send_notify.exe
:EOJ %errorlevel% %var_indx% %brk%
rem pause job end-----
EXIT
:RCSV_D
rem --- getting LINE 通知日 --------
set full_str=%1
set full_str=%full_str:"=%
rem echo %full_str%
set /a n=0
rem set brk=N
:: Full str 內,不必全部執行DO,以條件判斷,中途可跳走,保留變數值 -----
for %%a in ( %full_str% ) do ( CALL :SETDate %%a )
rem pause ---111 n=%n% indx=%var_indx% ; %brk% ?
exit /b %errorlevel% %var_indx% %LINE_F% %brk%
:SETDate
if %1==%T_ymd% (
set brk=Y
set /a var_indx=%n%
goto RD_Brake )
set /a n=n+1
exit /b
:RCSV_M
set /a n=0
:: --- NOTED: for %%a in ( %full_str% ) --in 內 不可有雙引號" ",空白及() 均不可---
set full_str=%1
set full_str=%full_str:"=%
set full_str=%full_str: =%
set full_str=%full_str:(={%
set full_str=%full_str:)=}%
:: Full str 內,不必全部執行DO,!brk! 以條件判斷,得到第2次exit /b,就中途跳走 -----
set brk=N
for %%a in ( %full_str% ) do (
CALL :SETM %%a
setlocal enabledelayedexpansion
if !brk!==Y exit /b )
exit /b
:SETM
if %n%==0 ( set var[0]=%1
) else (
if %n%==%var_indx% (
set brk=Y
echo M,%var[0]% %1>> LINE_send_notify_par.txt ))
set /a n=n+1
rem pause ---222 %var[0]% brk=%brk% n=%n% ind=%var_indx%?
exit /b
---------recorded by linct---------