前提
Artanis
是一款基於Spring Boot
的員工工作日報自動收發系統。你可以DIY
你的催促和總結任務,在無需重新編譯整個項目的前提下,只修改少數配置文件。
豐富的可選項使其非常得簡單易用。例如,你可以設置你的小組在一週中的哪一天休息。你還可以將正在請假或休假中的員工加入到holidayers
列表,這樣他們在假期就不會被系統催促提交工作日誌了。
本系統開源於GitHub,歡迎訪問並以此構建你自己的日誌系統!
工作流程
- 系統定時向(未提交工作日誌的)小組成員發送郵件,催促他們提交(下稱UrgeTask,催促任務)。
- 小組成員在截止時間之前向指定郵箱發送郵件(下稱MailSender,郵件發送者),內容即爲當天的工作日誌。
- 系統在設定的截止時間從郵箱的收件箱收取工作日誌,彙總爲PDF文件(如下圖),以該PDF文件爲附件,向小組Boss或全體成員發送彙總郵件(下稱SummaryTask,彙總任務)。
- 系統在所有任務執行完畢後(目前需要手動設置時間)將郵箱收件箱的所有郵件轉移到另一個文件夾(如“以往日報”),清空數據庫中的
submitted
和content
字段(下稱InitializeTask,初始化任務)
注意:本系統是一個不包含任何UI界面的純後端系統。
使用說明
你可以通過以下很少的步驟來構建自己的工作日誌收發系統。
步驟1: 申請一個郵箱
這個郵箱被稱作Mail Sender
.
- 你的小組中的員工應該將他們的工作日誌發送到這個郵箱。
- 系統將通過這個賬戶發送郵件(包括催促郵件和彙總郵件)。
- 系統會從這個郵箱的收件箱收取工作日誌。
你可以擴展其他郵件服務提供商的配置並使用他們的電子郵箱,否則在默認情況下,你應該申請並使用網易163帳戶。
步驟2: 創建數據庫
默認情況下,你需要選擇MySQL
作爲本系統的數據庫。
- 請確保你的服務器上正確安裝了
MySQL
。 - 創建一個名叫
artanis
的數據庫,它的字符集應該是utf8mb4 -- UTF-8 Unicode
。
步驟3: 使用自己的配置
- 有許多屬性可以配置來運行你自己的業務邏輯。詳情見 配置
步驟4: 構建和部署
完成了配置之後,你需要:
- 通過Maven構建該工程以獲得
artanis.jar
文件。 - 將
artanis.jar
複製到你的服務器上的某個目錄下. - 將
/configs/journalConfig.xml
和/configs/systemConfig.xml
複製到和artanis.jar
相同的目錄下。 - 在上述目錄下運行以下指令:
java -jar -Djasypt.encryptor.password=Artanis@Imple artanis.jar**
。 - 如果在數據庫配置中僅使用明文,則僅需使用以下命令:
java -jar artanis.jar
。 - 向數據庫
artanis
中插入一些組和他們的成員信息,然後系統開始工作。
配置
下面的配置步驟是必需的
設置數據庫屬性
爲了使程序可以成功的訪問你的數據庫,你需要將默認的數據庫配置換成你自己的。詳情見 數據庫配置.
日誌屬性
你可以通過修改配置文件src/main/resources/journalConfig.xml
來設置自己的任務
- Mail Sender Identity
Mail Sender的身份信息
<bean id="mailSenderIdentity" class="com.implementist.artanis.entity.Identity">
<property name="from" value="SENDER_ADDRESS"/>
<property name="nickName" value="YOUR_NICK_NAME"/>
<property name="authCode" value="AUTH_CODE_OR_PASSWORD"/>
</bean>
屬性 | 類型 | 說明 | 舉例 |
---|---|---|---|
from | String | Mail Sender的郵箱地址 | [email protected] |
nickName | String | Mail Sender的暱稱 | Implementist |
authCode | String | 授權碼或者密碼 | Password |
- Urge Task
設置發送督促郵件的任務,督促員工提交工作日誌。在默認情況下,督促郵件將發送給SummaryTask
中配置的組的成員。程序將自動執行過濾,以獲得正確的to
列表。
<bean id="urgeTask1" class="com.implementist.artanis.entity.taskdata.UrgeTaskData">
<property name="startTime" value="START_TIME"/>
<property name="mailSubject" value="URGE_MAIL_SUBJECT"/>
<property name="mailContent" value="URGE_MAIL_CONTENT"/>
<property name="mailSenderIdentity" ref="mailSenderIdentity"/>
</bean>
屬性 | 類型 | 說明 | 舉例 |
---|---|---|---|
startTime | String | 發送催促郵件的時間 | 22:00:00 |
mailSubject | String | 催促郵件的主題 | 催促郵件 |
mailContent | String | 催促郵件的內容 | 請按時提交你的工作日誌。 |
mailSenderIdentity | String | 對郵件發送者身份的id引用。最好不要修改。 | mailSenderIdentity |
- Summary Task
總結任務將總結所有員工的工作日誌,生成一個PDF文件,作爲總結郵件的附件。然後把這封郵件發送給員工和老闆,或者只發送給領導。
<bean id="summaryTask1" class="com.implementist.artanis.entity.taskdata.SummaryTaskData">
<property name="groupOnHoliday" value="false"/>
<property name="forBossesOnly" value="true"/>
<property name="holidayers">
<null/>
</property>
<property name="groups">
<list>
<value>1</value>
<value>2</value>
</list>
</property>
<property name="restDays">
<array>
<value>7</value>
</array>
</property>
<property name="startTime" value="START_TIME"/>
<property name="mailSubject" value="SUMMARY_MAIL_SUBJECT"/>
<property name="bossesAddresses">
<array>
<value>[email protected]</value>
<value>[email protected]</value>
</array>
</property>
<property name="mailContent" value="SUMMARY_MAIL_CONTENT"/>
<property name="mailSenderIdentity" ref="mailSenderIdentity"/>
</bean>
屬性 | 類型 | 說明 | 舉例 |
---|---|---|---|
groupOnHoliday | boolean | 是否整個小組都在放假?如果設置爲true ,所有人都不需要發送工作日誌 |
false |
forBossesOnly | boolean | 彙總郵件之發送給領導還是發送給所有人? | true |
holidayers | String[] | 小組中正在請假或休假的人 | <value>小明</value> 或者 <null/> |
groups | List<Integer> | 需要提交工作日誌的小組的id號 | <value>1</value> |
reastDays | int[] | 一週中的休息日,1 代表星期一 |
<value>7</value> |
startTime | String | 發送彙總郵件的時間 | 23:00:00 |
mailSubject | String | 彙總郵件的主題 | 彙總郵件 |
bossesAddresses | String[] | 領導的郵箱地址數組 | <value>[email protected]</value> |
mailContent | String | 彙總郵件的內容 | 附件中是今天本小組的工作日誌彙總 |
mailSenderIdentity | String | 對郵件發送者身份的id引用。最好不要修改。 | mailSenderIdentity |
- Initialize Task
這個任務會重置數據庫中的日誌內容並清空Mail Sender的收件箱.
<bean id="initializeTask" class="com.implementist.artanis.entity.taskdata.InitializeTaskData">
<property name="startTime" value="START_TIME"/>
<property name="initialContent" value=""/>
<property name="sourceFolder" value="INBOX"/>
<property name="targetFolder" value="TARGET_FOLDER"/>
<property name="mailSenderIdentity" ref="mailSenderIdentity"/>
</bean>
屬性 | 類型 | 說明 | 舉例 |
---|---|---|---|
startTime | String | 執行初始化任務的時間 | 23:59:00 |
initialContent | String | 每個成員的初始化日報內容 | |
sourceFolder | String | 系統從Mail Sender的哪個文件夾讀取員工日誌信息? | INBOX |
targetFolder | String | 前一天的日誌郵件需要被移動到Mail Sender的哪個文件夾? | 以往日誌 |
mailSenderIdentity | String | 對郵件發送者身份的id引用。最好不要修改。 | mailSenderIdentity |
系統屬性
還有少量的配置在src/main/resources/systemConfig.xml
文件中。
- System Config
<bean id="systemConfig" class="com.implementist.artanis.entity.SystemConfig">
<property name="holidayModeOn" value="false"/>
<property name="holidayFrom" value="2019-06-07"/>
<property name="holidayTo" value="2019-06-09"/>
<property name="workdayModeOn" value="false"/>
<property name="workdayFrom" value="2019-05-05"/>
<property name="workdayTo" value="2019-05-05"/>
</bean>
屬性 | 類型 | 說明 | 舉例 |
---|---|---|---|
holidayModeOn | boolean | 節假日模式是否開啓?開啓後所有人都不需要提交工作日誌 | false |
holidayFrom | String | 節假日的第一天 | 2019-10-01 |
holidayTo | String | 節假日的最後一天 | 2019-10-07 |
workDayModeOn | boolean | 調休模式是否開啓?開啓後即使在休息日也需要提交工作日誌 | false |
workdayFrom | String | 調休日的第一天 | 2019-09-28 |
workdayTo | String | 調休日的最後一天 | 2019-09-29 |
聯繫我
- 郵箱: [email protected]
- 微信: Megamind_cs
- CSDN: https://blog.csdn.net/mr_megamind
- GitHub Issues
開源許可
Copyright (c) 2017-present, Artanis Contributors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.