Artanis: 工作日誌自動收發系統

前提

Artanis是一款基於Spring Boot的員工工作日報自動收發系統。你可以DIY你的催促和總結任務,在無需重新編譯整個項目的前提下,只修改少數配置文件。

豐富的可選項使其非常得簡單易用。例如,你可以設置你的小組在一週中的哪一天休息。你還可以將正在請假或休假中的員工加入到holidayers列表,這樣他們在假期就不會被系統催促提交工作日誌了。

本系統開源於GitHub,歡迎訪問並以此構建你自己的日誌系統!

工作流程

  • 系統定時向(未提交工作日誌的)小組成員發送郵件,催促他們提交(下稱UrgeTask,催促任務)。
  • 小組成員在截止時間之前向指定郵箱發送郵件(下稱MailSender,郵件發送者),內容即爲當天的工作日誌。
  • 系統在設定的截止時間從郵箱的收件箱收取工作日誌,彙總爲PDF文件(如下圖),以該PDF文件爲附件,向小組Boss或全體成員發送彙總郵件(下稱SummaryTask,彙總任務)。
  • 系統在所有任務執行完畢後(目前需要手動設置時間)將郵箱收件箱的所有郵件轉移到另一個文件夾(如“以往日報”),清空數據庫中的submittedcontent字段(下稱InitializeTask,初始化任務
    彙總PDF的內容
    注意:本系統是一個不包含任何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

聯繫我

開源許可

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.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章