劉 萍
(江陰職業(yè)技術(shù)學(xué)院 計算機科學(xué)系,江蘇 江陰 214400)
高校對大學(xué)生心理健康日益重視,組建了專業(yè)的心理健康教育團隊,但心理健康信息化建設(shè)落后,很多院校以網(wǎng)站的形式宣傳心理健康,未提供個性化的心理服務(wù)。
目前國內(nèi)心理健康系統(tǒng)服務(wù)商主要有北京瑞格、上?;莩?、廣州智為,為高校提供單機版和Web版心理健康教育服務(wù),用戶登錄系統(tǒng)才能進行心理測試、心理輔導(dǎo)和心理健康管理。國外利用信息化手段服務(wù)心理健康起步較早,1965年,美國著名的卡耐基梅隆大學(xué)為多特亞比心理診所研發(fā)了第一款通過計算機技術(shù)輔助心理測評的信息系統(tǒng)[1]。國內(nèi)外在心理健康與信息化手段結(jié)合上都有一定研究,但目前市面上針對高校學(xué)生的心理健康平臺還沒有,只有一些心理測試平臺或者簡單的心理咨詢平臺[2],缺乏一套完整的集心理咨詢、心理疏導(dǎo)、專家與學(xué)生互動、對有心理問題學(xué)生持續(xù)跟蹤的一體化平臺[3]。
本文設(shè)計的一體化心理健康平臺,學(xué)生可在手機上安裝在線心理健康A(chǔ)PP[4],可在電腦上訪問,使學(xué)生足不出戶隨時隨地利用碎片化時間解決心理問題。學(xué)生之間、學(xué)生與專家之間可以充分交流[5],并可持續(xù)跟蹤有問題學(xué)生。本平臺專家不僅僅局限于學(xué)校的心理老師,還可以是社會上的心理專家或心理醫(yī)生。通過本平臺可有效解決學(xué)生心理問題,并能很好地保護個人隱私。
學(xué)生希望隨時隨地解決心理困惑[6],因此,本設(shè)計平臺可通過手機或電腦端進行登錄注冊、查看專家列表、關(guān)注專家、與專家進行在線交流等操作,還可訪問個人中心。個人中心包括個人信息、站內(nèi)消息、我的帖子以及我的關(guān)注。學(xué)生可訪問論壇,在論壇上發(fā)帖、回復(fù)帖子、搜索帖子、收藏帖子、刪除帖子和對帖子點贊等[7]。PC端的后臺管理員可訪問后臺主頁,對用戶、管理員、消息、郵件以及論壇進行管理。其中用戶管理主要是對用戶信息維護、對證件信息和用戶權(quán)限進行管理以及對專家進行審核。論壇管理主要是對帖子、帖子回復(fù)、權(quán)重和標(biāo)簽進行管理。平臺功能模塊如圖1所示[8]。
圖1 在線心理健康平臺功能模塊
PC端用戶前臺和Android端分別包括以下功能[9]:
(1)注冊登錄。該模塊包括學(xué)生和專家注冊。學(xué)生通過輸入賬號、密碼進行注冊。專家除了輸入賬號、密碼外,還要輸入姓名、郵箱、手機號、個人介紹,上傳證書完成注冊,為后續(xù)專家審核提供依據(jù)。注冊完后輸入賬號和密碼登錄,連續(xù)輸錯5次密碼將鎖定賬號,暫時不允許再登錄。登錄驗證成功后用戶可查看最新消息。
(2)個人中心。該模塊包括個人信息、站內(nèi)消息、我的帖子和我的關(guān)注。個人信息模塊可對信息進行修改,包括學(xué)生信息修改和專家信息修改。學(xué)生信息修改,包括修改頭像、昵稱、手機號、郵箱、密碼和個人簡介;專家信息修改包括修改頭像、密碼、手機號、郵箱、專家簡介和證書。證書需要提交給后臺審核,審核成功后1-2個工作日內(nèi)以郵件形式給出回復(fù)。站內(nèi)消息主要顯示未讀消息,用戶登錄后會收到消息提示。消息類型分為系統(tǒng)公告、關(guān)注者動態(tài)更新、私信和回復(fù)提醒。其中系統(tǒng)公告為所有人都可收到,關(guān)注者動態(tài)更新只有關(guān)注者可以收到,私信只有私信對象可以收到,我的帖子顯示我發(fā)的帖子和我收藏的帖子,我的關(guān)注顯示關(guān)注的專家。
(3)專家列表。該模塊包括專家排名和專家分類。通過專家發(fā)帖和回復(fù)次數(shù)對專家排名,活躍度越高專家排名越靠前;另外,不同專家擅長不同的領(lǐng)域,學(xué)生可選擇想咨詢的專家類別。
(4)在線交流。該功能包括發(fā)送和接收即時消息以及離線消息保存。學(xué)生可在專家列表中選擇想要咨詢的專家進行在線咨詢,可查看專家是否在線以及在線時間。若專家在線則可與專家進行一對一交流,若不在線則消息會離線保存在服務(wù)器上,專家上線后會立即收到消息。專家可修改自己的在線時間,靈活利用空余時間給學(xué)生解惑。
(5)關(guān)注功能。學(xué)生通過關(guān)注功能可選擇自己喜愛的一個或多個專家加以關(guān)注,專家的一切動態(tài)會以發(fā)送消息的形式通知學(xué)生。關(guān)注的專家放在關(guān)注列表,在關(guān)注列表中可隨時增加或刪除專家。
(6)論壇模塊包括帖子列表、發(fā)帖、回復(fù)、點贊、搜索帖子、收藏帖子、刪除帖子和熱帖。進入論壇,可按分類查詢顯示帖子信息,點擊每條帖子可查看帖子詳情。發(fā)表帖子分學(xué)生發(fā)帖和專家發(fā)帖。學(xué)生可在心理求助和經(jīng)驗共享中發(fā)帖,發(fā)帖時可匿名,也可都不選。專家可在經(jīng)驗共享里發(fā)帖,專家發(fā)帖有特殊標(biāo)記。 回復(fù)分為學(xué)生回復(fù)和專家回復(fù)。學(xué)生可在帖子、評論下進行回復(fù),回復(fù)也可匿名。專家可在帖子、評論下進行回復(fù),專家回復(fù)有特殊標(biāo)記,專家不可匿名。所有匿名帖子發(fā)表人只有該用戶和超級管理員可查看到。
用戶可根據(jù)標(biāo)題、標(biāo)簽和發(fā)帖人進行帖子搜索??墒詹叵矏鄣奈恼?,文章右上角有五角星可快速收藏。個人有收藏列表,可對收藏文章進行管理,文章底部有點贊和踩??筛鶕?jù)帖子的點贊、踩、收藏和回復(fù)數(shù)等計分后自動計算分值,分值高的成為熱帖。用戶可屏蔽發(fā)布的帖子。
PC端管理員后臺包括用戶管理、管理員管理、消息管理、郵件管理、后臺主頁和論壇管理模塊[10],下面進行詳細(xì)分析:
(1)管理員進入后臺主頁,頁面上會統(tǒng)計每日發(fā)帖、活躍用戶、帖子分布和用戶分布情況。
(2)用戶管理包括用戶信息、證件管理、審核專家、權(quán)限管理和專家類別管理。用戶信息管理功能包括管理員登錄平臺后可對用戶信息進行查看、搜索、篩選、排序、重置用戶密碼、封禁賬號、修改用戶信息、添加用戶等操作;證件管理包括證件信息查看、搜索、篩選、排序、證件審核和刪除證件;專家信息審核包括對專家信息查看、搜索、篩選、排序、審核專家注冊信息、審核專家修改信息;專家類別管理包括專家類別查看、修改名稱、添加或刪除專家類別;權(quán)限管理包括用戶權(quán)限查看、添加和刪除。
(3)管理員管理包括管理員信息查看、修改、重置密碼、添加和刪除。
(4)消息管理包括用戶消息查看、搜索、篩選、排序、封禁發(fā)送者賬號、刪除消息、發(fā)送消息和發(fā)布公告。
(5)郵件管理包括開啟或關(guān)閉郵箱激活、找回密碼功能,查看已發(fā)送郵件。
(6)論壇管理包括帖子管理、回復(fù)管理、標(biāo)簽管理和計分管理。帖子管理包括帖子信息查看、搜索、篩選、排序、封禁發(fā)帖人、屏蔽帖子、刪除帖子、置頂帖子、修改分類和修改標(biāo)簽;回復(fù)管理包括回復(fù)信息查看、搜索、篩選、排序、封禁回復(fù)者、屏蔽回復(fù)和刪除回復(fù);標(biāo)簽管理包括標(biāo)簽信息查看、修改名稱、添加、刪除;權(quán)重管理包括計分信息查看和修改分值。
根據(jù)系統(tǒng)的需求分析以及功能模塊設(shè)計,完成在線心理健康平臺的數(shù)據(jù)庫設(shè)計,得出16張數(shù)據(jù)表。
(1)管理員信息表(賬號、密碼、姓名、上一次登錄IP、登陸次數(shù)、創(chuàng)建時間)。
(2)用戶信息表(賬號、用戶名、密碼、用戶性別、頭像地址、個人介紹、手機號、郵箱、用戶類型、注冊時間、注冊IP、在線狀態(tài)、審核狀態(tài)、允許登陸時間、專家類型ID)。
(3)用戶信息審核表(審核ID、賬號、用戶名、個人介紹、手機號、郵箱、提交時間、提交IP、審核狀態(tài)、審核時間、審核人)。
(4)用戶證件信息表(證件ID、證件名稱、證件圖片地址1、證件圖片地址2、賬號、提交時間、提交IP、審核狀態(tài)、審核時間、審核人)。
(5)用戶權(quán)限信息表(權(quán)限ID、賬號、權(quán)限(0發(fā)帖,1回復(fù),2私信,3聊天))。
(6)收藏信息表(收藏ID、賬號、帖子ID、收藏時間)。
(7)關(guān)注信息表(關(guān)注ID、關(guān)注者賬號、被關(guān)注者賬號、關(guān)注時間)。
(8)消息表(消息ID、發(fā)送人賬號、接收者賬號、內(nèi)容、消息類型(0系統(tǒng)消息,1被回復(fù),2關(guān)注者更新,3在線聊天新消息,4站內(nèi)信)、發(fā)送時間、是否已讀(0未讀,1已讀))。
(9)帖子信息表(帖子ID、標(biāo)題、內(nèi)容、發(fā)帖人賬號、發(fā)帖IP、發(fā)帖時間、類別ID、是否熱帖(0否,1是)、是否置頂(0否,1是)、帖子計分、收藏數(shù)、點贊數(shù)、回復(fù)數(shù)、狀態(tài)(0正常,1屏蔽,2用戶匿名))。
(10)回復(fù)信息表(回復(fù)ID、回復(fù)內(nèi)容、回復(fù)者賬號、帖子ID、關(guān)聯(lián)回復(fù)、樓層、發(fā)表IP、發(fā)表時間、狀態(tài)(0正常,1屏蔽))。
(11)帖子類別信息表(類別ID、類別名稱)。
(12)標(biāo)簽信息表(標(biāo)簽ID、標(biāo)簽名稱)。
(13)帖子標(biāo)簽信息表(帖子標(biāo)簽ID、帖子ID、標(biāo)簽ID)。
(14)點贊、踩信息表(點贊ID、用戶賬號、帖子ID、類型(1贊,0踩)、時間)。
(15)權(quán)重計分信息表(權(quán)重計分ID、計分項、分值)。
(16)專家類型表(專家類型ID、專家類型名稱)。
在線心理健康平臺包括Android端和PC端[11]。Android端采用Android SDK API-25(Android 7.1.1版本)進行開發(fā)[12],最低支持Android SDK API-15(Android 4.0.3版本)[13]。PC端Web前端使用layui前端框架以及JQuery框架,配合原生HTML+CSS+JavaScript進行開發(fā),后端采用Struts框架與Hibernate框架進行開發(fā),數(shù)據(jù)庫采用MySQL5.7版本,Web服務(wù)器采用Apache-Tomcat8.0.2.9,項目部署于阿里云服務(wù)器ECS上。平臺構(gòu)架如圖2所示[14]。
圖2 平臺架構(gòu)
從圖2可以看出,客戶端與服務(wù)器端的數(shù)據(jù)傳輸過程如下:
(1)客戶端的網(wǎng)絡(luò)請求及數(shù)據(jù)綁定[15]。 PC端用戶前臺網(wǎng)頁通過JavaScript收集相應(yīng)數(shù)據(jù)并打包為JSON字符串,采用Ajax技術(shù)進行異步請求,攜帶JSON數(shù)據(jù)作為參數(shù)到服務(wù)器端。請求成功后在回調(diào)中對返回的數(shù)據(jù)進行二次處理,并綁定數(shù)據(jù)到指定控件,實現(xiàn)頁面部分刷新、動態(tài)彈出窗口等功能。
Android客戶端在控件中收集到指定數(shù)據(jù)后,使用Google提供的GSON工具包將bean對象轉(zhuǎn)換為JSON字符串,再使用OKgo框架進行網(wǎng)絡(luò)請求。成功后,在回調(diào)中對相應(yīng)數(shù)據(jù)進行二次處理,并綁定數(shù)據(jù)到指定控件。
(2)服務(wù)器端網(wǎng)絡(luò)數(shù)據(jù)的接收和返回[16]。服務(wù)器收到請求后,通過Struts框架對網(wǎng)絡(luò)請求進行攔截,根據(jù)Struts自動傳值獲取客戶端傳入的參數(shù)。在action中,調(diào)用DAO進行數(shù)據(jù)庫操作并經(jīng)過邏輯處理后,使用工具包將結(jié)果轉(zhuǎn)換為JSON類型,將結(jié)果放入Struts配置文件所指定的對象中,由Struts自動將此對象返回給客戶端。其中,數(shù)據(jù)庫操作使用Hibernate框架的HQL(Hibernate Query Language)進行查詢、添加、修改、刪除等操作。通過Hibernate的ORM(對象關(guān)系映射)特性,將數(shù)據(jù)封裝為與數(shù)據(jù)庫對應(yīng)的對象,實現(xiàn)數(shù)據(jù)的持久化。為增強可維護性,所有數(shù)據(jù)庫操作都封裝在DAO(Data Access Object)層中。
本文開發(fā)的在線心理健康平臺采用Hibernate框架完成數(shù)據(jù)庫操作[17],所有查詢操作都通過Hibernate的HQL語言完成。HQL語句與SQL語句語法相似,完整的HQL語句形式如下:select/update/delete…… from …… where …… group by …… having …… order by …… asc/desc。
帖子查詢需要多種條件,管理員可根據(jù)關(guān)鍵詞、發(fā)帖日期、特殊標(biāo)志(“1”代表獲取熱帖,“2”代表獲取置頂貼,“12”代表既是熱帖又是置頂貼)、帖子分類(“1”代表分享,“2”代表求助)、帖子狀態(tài)(“0”代表正常,“1”代表屏蔽,“2”代表匿名)等進行多條件查詢。設(shè)置type控制查詢類型,Sort控制查詢結(jié)果的排序。
構(gòu)造多條件帖子查詢HQL語句算法如下:
(1) 根據(jù)type(類型int,用來控制查詢的類型)生成初始查詢字符串。
type為1時,代表管理員普通select查詢,用來獲取數(shù)據(jù)列表。
type為2時,代表管理員統(tǒng)計類查詢,用來獲取數(shù)據(jù)條數(shù)。
type為3時,代表非管理員普通select查詢,用來獲取數(shù)據(jù)列表,限制只能查詢status!=1的數(shù)據(jù)。其中status=1為屏蔽帖,只有管理員可以獲取。
type為4時,代表非管理員統(tǒng)計查詢,用來獲取數(shù)據(jù)條數(shù),限制只能查詢status!=1的數(shù)據(jù)。
type為其它值時,直接返回基礎(chǔ)查詢語句。
例:if(type==1){ hql = "from TopicBean tb where tb.topic_ID!=0";}
其中,topic_ID=0的數(shù)據(jù)為系統(tǒng)保留數(shù)據(jù),所有使用者不可見,此為特殊情況。如果沒有和帖子查詢類似的情況,一般為“where 1=1”。初始查詢字符串帶有where條件的好處是,后續(xù)拼接的字符串可以全部以“and”開頭,無需對第一次成功拼接做特殊處理。
(2)初始查詢字符串生成后[18],根據(jù)查詢條件message參數(shù)(類型是JSONObject)中的信息開始拼接。Message參數(shù)是前面應(yīng)用層傳遞過來的封裝好的JSON格式參數(shù),當(dāng)message中包含特定鍵值對時,根據(jù)此鍵值對新增查詢條件。支持的條件有:關(guān)鍵詞搜索、頂置貼、熱帖篩選、日期范圍篩選、帖子類別篩選、帖子狀態(tài)篩選等。對應(yīng)message格式及說明如下:
message,類型JSONObject,用來控制查詢條件。message參數(shù)的JSON格式如下:
{
keyWord: 關(guān)鍵詞,字符串,
select_hot_top:特殊標(biāo)識,字符串(“1”獲取熱帖,“2”獲取置頂貼)(這個參數(shù)可以多選,如 “12”代表獲取的既是熱帖又是置頂貼),
select_date:{
start:{
year:年,數(shù)字或字符串,
month:月,數(shù)字或字符串,
date:日,數(shù)字或字符串
},
end:格式同start。start為開始日期,end為結(jié)束日期,這兩個參數(shù)要么都不傳,要么都傳,不可以只傳一個。
},
select_type: 帖子類別,數(shù)字或字符串(“1”代表分享,“2”代表求助),
select_status: 帖子狀態(tài),數(shù)字或字符串(“0”代表正常,“2”代表匿名,“1”代表屏蔽)
}
首先,根據(jù)message是否為空判斷是否需要構(gòu)造多條件的查詢語句。若message為空則直接返回基礎(chǔ)查詢語句,例如:"from TopicBean tb where tb.status!=1",其中status=1為屏蔽帖,只有管理員類型的查詢可以獲取。
(3)查詢的類型和條件都構(gòu)造好后,按某字段排序進行拼接,該sort參數(shù)也是JSON類型,具體如下:
sort: {
field: 需要排序的字段在數(shù)據(jù)庫中的字段名,字符串
type: 排序方式,字符串(可選值"desc","asc","null",注意,null是內(nèi)容為"null"的字符串)
}
通過以上查詢類型、查詢條件和結(jié)果排序這3個步驟即可完成HQL查詢語句構(gòu)造。
下面以管理員查詢帖子為例, 闡述多條件帖子查詢HQL語句構(gòu)造算法實現(xiàn)[19]。管理員可根據(jù)關(guān)鍵詞、發(fā)帖日期、特殊標(biāo)志、帖子分類、帖子狀態(tài)、分頁、排序等進行多條件查詢,運行效果如圖4所示。
圖3 帖子多條件查詢
多條件查詢是通過拼接HQL字符串實現(xiàn)的。首先,前端頁面中收集信息組裝為JSON字符串,在請求時作為參數(shù)傳遞給服務(wù)器。服務(wù)器收到請求后,將參數(shù)傳遞到實現(xiàn)多條件查詢HQL語句的構(gòu)造方法中,動態(tài)拼接HQL字符串進行查詢[20],部分核心代碼如下:
public static String TopicHQL(JSONObject message,int type,JSONObject sort) {
String hql = "";// 定義hql字符串
if(message!=null){
if(type==1){
hql = "from TopicBean tb where tb.topic_ID!=0";
}else if(type==2){
hql = "select count(*) from TopicBean tb where tb.topic_ID!=0";
}
}
// 關(guān)鍵詞搜索
if (message.get("keyWord")!=null && !message.get("keyWord").equals("")) {
String keyword = message.getString("keyWord");
hql += " and (tb.title like '%" + keyword+ "%' or tb.user.user_Account like '%" + keyword + "%')";
}
// 日期篩選
if (message.get("select_date")!=null && !message.get("select_date").equals("")) {
JSONObject start_date = message.getJSONObject("select_date")
.getJSONObject("start");// 獲取開始日期的JSON對象
JSONObject end_date = message.getJSONObject("select_date")
.getJSONObject("end");// 獲取結(jié)束日期的JSON對象
if (!start_date.toString().equals("{}")&& !end_date.toString().equals("{}")) {
String start = start_date.getString("year") + "-"+ start_date.getString("month") + "-"+ start_date.getString("date");//拼接開始日期字符串
String end = end_date.getString("year") + "-"+ end_date.getString("month") + "-"+ (end_date.getInt("date")+1); //拼接結(jié)束日期字符串
hql += " and tb.publishTime between '" + start + "' and '"+ end + "'";//將新增條件拼接到原有查詢字符串后
}
}
// 排序篩選
if (sort.get("field")!=null && !sort.get("field").equals("")) {
String sort_field = sort.getString("field");
String sort_type =sort.getString("type");
if (!sort_type.equals("null")) {
hql += " order by tb." + sort_field + " " + sort_type;
}
}
return hql;
}
本文設(shè)計并實現(xiàn)了基于Android的在線心理健康平臺,該平臺在某職業(yè)技術(shù)學(xué)院試運行效果良好。實踐表明,建立一個由學(xué)校公信力保障、專家入駐、面向全校學(xué)生且足夠私密的免費在線心理健康平臺,能有效解決大學(xué)生心理問題。