鐘 娟,侯金昌,閆曙曙
近年來,公益志愿活動(dòng)在社區(qū)活動(dòng)中的地位和作用日益彰顯[1],越來越多的人愿意投身于公益志愿活動(dòng),但是統(tǒng)一便捷的平臺(tái)卻無處可尋,平臺(tái)的缺乏消減了人們的積極性,增加了需要得到幫助的人的等待時(shí)間.智慧公益平臺(tái)主要是面向社區(qū)居民,打破線下公益的局限性,突破時(shí)間和空間的限制,傳播社會(huì)正能量.平臺(tái)可以成為志愿者的聚集地,對(duì)志愿者來說,平臺(tái)不僅能夠及時(shí)尋找到志愿活動(dòng),快速高效地為人民服務(wù),也能夠與其他志愿者進(jìn)行溝通交流,激發(fā)公益熱情.對(duì)被服務(wù)對(duì)象來說,既可以及時(shí)在平臺(tái)發(fā)布志愿招募,快速解決難題,又能夠在平臺(tái)上向志愿者表達(dá)謝意.
據(jù)調(diào)查,同類型的App屈指可數(shù),目前主要有“公益中國”和“米公益”這兩款A(yù)pp,“公益中國”面向的群體較少,“米公益”的模式過于單一.相比于這兩個(gè)平臺(tái),本文設(shè)計(jì)的平臺(tái)更加開放,面向的公益群體更加廣泛,不僅面向組織還面向個(gè)人;另外愛心小窩模塊的卡通人物形象相比于刻板單一的流程更加深入人心,能夠極大地提高用戶的積極性;平臺(tái)的模式富有多樣性,可以進(jìn)行簽到、募捐等功能.
智慧公益平臺(tái)整體的架構(gòu)采用Android+SpringBoot[2]+Mysql[3],構(gòu) 架 圖 見 圖1,在 后 臺(tái)采用MVC架構(gòu)[4],耦合性比較低,并且視圖層和業(yè)務(wù)層分離,開發(fā)和維護(hù)都比較方便,業(yè)務(wù)邏 輯 比 較 清 晰,SpringBoot[5-6]和SpringMVC[7]相比較配置更加方便,僅需要幾行代碼就可以快速配置;在安卓端,開發(fā)使用的是谷歌提供的原生安卓框架,其中包含了豐富的類庫,也支持開源類庫的直接調(diào)用,如百度地圖、OkHttp[8]、站長付等,完全滿足開發(fā)需求.
圖1 架構(gòu)圖
根據(jù)需求分析,系統(tǒng)中出現(xiàn)了7類對(duì)象,分別為:用戶、說說、任務(wù)、虛擬兒童、募捐活動(dòng)、商品以及收件人,對(duì)這些對(duì)象進(jìn)行抽象建模[8],每個(gè)模型應(yīng)該具備的屬性如下:
①用戶(用戶id、賬戶、用戶名、密碼、愛心幣、郵箱、地址、頭像、登錄狀態(tài)、支付碼);
②說說(說說id、作者id、發(fā)布時(shí)間、標(biāo)題、詳情、圖片描述);
③任務(wù)(任務(wù)id、標(biāo)題、詳情、圖片描述、任務(wù)地址、經(jīng)度、緯度、懸賞、召集人數(shù)總量、召集人數(shù)剩余量、發(fā)布時(shí)間、執(zhí)行時(shí)間、結(jié)束時(shí)間、結(jié)束與否、類型、簽到碼、發(fā)布者id);
④虛擬兒童(虛擬兒童id、智力、體力、見識(shí)、領(lǐng)主id);
⑤募捐活動(dòng)(活動(dòng)id、發(fā)起者id、標(biāo)題、詳情、募捐對(duì)象圖片、發(fā)布時(shí)間、結(jié)束時(shí)間、所需物資名、當(dāng)前所需物資數(shù)量、所需物資總量、收件人id);
⑥商品(商品id、價(jià)格、庫存、圖片、商品名、商品描述、商家id、入庫時(shí)間);
⑦收件人(收件人id、手機(jī)號(hào)、姓名、省、市、縣、詳細(xì)地址).
實(shí)體表結(jié)構(gòu)設(shè)計(jì):
①用戶表.用戶表包含了志愿者、商家和組織三種角色,每一種角色的共同屬性都被抽象在用戶表中,其不同的屬性由用戶行為表現(xiàn)出來,可以看到,用戶的id是自增的,每次注冊(cè)一個(gè)新用戶獲得一個(gè)獨(dú)一無二的user_id,將其設(shè)置為主鍵也是為了能夠唯一標(biāo)識(shí)該用戶.isLogin的添加是為了記錄用戶的登錄狀態(tài),防止出現(xiàn)同一用戶并發(fā)操作的情況,標(biāo)志在線狀態(tài)也能夠提高用戶賬戶的安全性,表的詳細(xì)結(jié)構(gòu)如表1所示.
表1 用戶表
②身邊公益說說表.類似QQ空間里的說說,作者和說說之間是1∶N關(guān)系,根據(jù)3NF[9]規(guī)范,要給每一個(gè)說說打上作者標(biāo)簽,設(shè)置author_id為外鍵,指向用戶表中的主鍵user_id,并為說說設(shè)置BTREE索引;此外,為了滿足用戶發(fā)布多張圖片的需求,將多個(gè)圖片地址通過逗號(hào)隔開,大大降低了存儲(chǔ)成本,表的詳細(xì)結(jié)構(gòu)如表2所示.
表2 身邊公益說說表
③任務(wù)表.任務(wù)表內(nèi)容較多,其中task_id是任務(wù)的唯一標(biāo)識(shí),title是任務(wù)標(biāo)題,detail是任務(wù)內(nèi)容,img是任務(wù)描述圖片,address是任務(wù)地點(diǎn),need是任務(wù)目前所需人數(shù),start_time是發(fā)布時(shí)間,exe_time是任務(wù)執(zhí)行時(shí)間,author_id指向發(fā)布任務(wù)的作者,lantitude是任務(wù)地點(diǎn)的經(jīng)度,longitude是任務(wù)地點(diǎn)的緯度,is_finished標(biāo)識(shí)任務(wù)是否結(jié)束,1表示結(jié)束,0表示未結(jié)束,end_time表示任務(wù)截止時(shí)間,end_timeexe_time為任務(wù)時(shí)長,coin表示任務(wù)懸賞,sum表示任務(wù)一共需要人數(shù),sum-need為已經(jīng)報(bào)名的人數(shù),type是任務(wù)類型,有互助、慰問、咨詢?nèi)N,code表示簽到碼.屬性很多,但都很必要,例如經(jīng)緯度(lantitude和logitude),把任務(wù)的地點(diǎn)精確到經(jīng)緯度,能夠極大方便用戶查看地圖尋找目的地,也為設(shè)置打卡范圍提供了數(shù)據(jù)加持,表的詳細(xì)結(jié)構(gòu)如表3所示.
表3 任務(wù)表
④虛擬兒童表.此表是為了讓志愿者培養(yǎng)自己的虛擬兒童,記錄虛擬兒童的成長,簡單地將屬性分為智力、體力和見識(shí),表的詳細(xì)結(jié)構(gòu)如表4所示.
表4 虛擬兒童表
⑤募捐活動(dòng)表.募捐活動(dòng)表中的屬性也有很多,屬性命名應(yīng)見名知意,表中的consignee_id外鍵指向consignee表中的同名主鍵,將募捐活動(dòng)的收件人詳細(xì)化,方便商家發(fā)貨.另外,系統(tǒng)將所有的時(shí)間都設(shè)置成datetime類型,是為了數(shù)據(jù)的正確性,防止用戶誤操作出現(xiàn)錯(cuò)誤數(shù)據(jù),datetime默認(rèn)的時(shí)間格式是“年-月-日 時(shí):分:秒”,符合國人習(xí)慣.表的詳細(xì)結(jié)構(gòu)如表5所示.
表5 募捐活動(dòng)表
⑥商品表.此表中的user_id與post表中的author_id異曲同工,只是指向的用戶角色是商家,此處count僅代表當(dāng)前動(dòng)態(tài)變化的庫存,表的詳細(xì)結(jié)構(gòu)如表6所示.
表6 商品表
⑦收件人表.此表是為了記錄收件人的詳細(xì)信息,方便募捐發(fā)起者和商家進(jìn)行物流運(yùn)輸,詳細(xì)記錄了收件人所在的省、市、縣和具體地址,并添加了收件人姓名和手機(jī)號(hào)碼.表的詳細(xì)結(jié)構(gòu)如表7所示.
表7 收件人表
在數(shù)據(jù)庫設(shè)計(jì)過程中,為了滿足程序的功能,必須把實(shí)體與實(shí)體之間的關(guān)系以表的形式呈現(xiàn)出來[8-9],實(shí)體之間的關(guān)系按照數(shù)量可以分為三種,1∶1、1∶N和N∶N,有一些1∶1、1∶N關(guān)系,無需中間表,如作者和說說的1∶N關(guān)系,任務(wù)發(fā)布者和任務(wù)的1∶N關(guān)系,商家和商品的1∶N關(guān)系,募捐發(fā)起者和募捐活動(dòng)的1∶N關(guān)系,用戶和虛擬兒童之間的1∶1關(guān)系,下面主要介紹N∶N關(guān)系,其他關(guān)系不再贅述.
根據(jù)需求分析,首先對(duì)這些關(guān)系進(jìn)行抽象建模,這些關(guān)系應(yīng)該具備的屬性如下:
①用戶-說說表(用戶id、說說id、評(píng)論內(nèi)容、是否點(diǎn)贊);
②用戶-任務(wù)表(用戶id、任務(wù)id、是否簽到、領(lǐng)取時(shí)間);
③募捐活動(dòng)-商品-用戶表(募捐活動(dòng)id、商品id、用戶id、交易時(shí)間、交易金額、是否確認(rèn)收貨).
注:有下劃線的屬性表示主鍵[10].
關(guān)系表結(jié)構(gòu)設(shè)計(jì)如下:
①用戶和說說之間的N∶N關(guān)系表.此表是為了將用戶和說說聯(lián)系起來,一個(gè)用戶可以給多個(gè)說說點(diǎn)贊評(píng)論,一個(gè)說說也可以被多個(gè)用戶點(diǎn)贊評(píng)論,故設(shè)計(jì)一個(gè)中間表,以u(píng)ser_id和post_id為雙主鍵,并作為外鍵分別指向user表和post表,comment表示用戶對(duì)說說的評(píng)論,若未評(píng)論則為null,zan表示用戶對(duì)說說的點(diǎn)贊次數(shù),0表示未點(diǎn)贊.表的詳細(xì)結(jié)構(gòu)如表8所示.
表8 用戶和說說之間的N∶N關(guān)系表
②用戶和任務(wù)之間的N∶N關(guān)系表.此表是為了將志愿者用戶和任務(wù)聯(lián)系起來,一個(gè)用戶可以領(lǐng)取多個(gè)任務(wù),一個(gè)任務(wù)也可以召集多個(gè)用戶,故設(shè)計(jì)一個(gè)中間表,以u(píng)ser_id和task_id為雙主鍵,并且作為外鍵分別指向user表和task表,is_finished表示用戶是否已經(jīng)完成任務(wù),1表示已經(jīng)簽到成功,0表示尚未簽到成功.表的詳細(xì)結(jié)構(gòu)如表9所示.
表9 用戶和任務(wù)之間的N∶N關(guān)系表
③募捐活動(dòng)、商品、用戶之間的N∶N關(guān)系表.此表是為了將用戶參與募捐活動(dòng)并購買商品的行為記錄下來,由于用戶只有在參與募捐活動(dòng)的時(shí)候才能夠購買商品,所以donation_id、goods_id、user_id均為主鍵,并作為外鍵分別指向donation表、goods表、user表,為了讓用戶可以在不同時(shí)間多次參與同一個(gè)募捐活動(dòng),所以筆者又增加了一個(gè)主鍵——build_time,goods_count表示用戶該次捐贈(zèng)的物資數(shù)量.
④money表示此次捐贈(zèng)所消費(fèi)的愛心幣數(shù)量.is_finished表示該次捐贈(zèng)是否成功,當(dāng)且僅當(dāng)物資簽收時(shí)才會(huì)置1.事實(shí)上,donation_user_goods既是一個(gè)訂單表,也是一個(gè)捐贈(zèng)表.表的詳細(xì)結(jié)構(gòu)如表10所示.
表10 募捐活動(dòng)、商品、用戶之間的N∶N關(guān)系表
SpringBoot的出現(xiàn)降低了Web后臺(tái)開發(fā)的門檻,解決了SpringMVC配置復(fù)雜的問題,讓開發(fā)者可以輕松設(shè)計(jì)事務(wù).SpringBoot繼承了Spring的優(yōu)秀特性,能較好地解決版本沖突的問題.
OkHttp是一個(gè)高效輕量的異步請(qǐng)求框架,用于替代谷歌的HttpClient,不需要開發(fā)人員通過各種格式轉(zhuǎn)換獲取請(qǐng)求結(jié)果,而是直接獲取Response對(duì)象,使用起來簡單方便,有透明的Gzip壓縮,響應(yīng)延遲很小.
Meterial Design中有許多實(shí)用方便的小組件.Material Design一個(gè)最明顯的標(biāo)志是身邊公益模塊中運(yùn)用到的用來發(fā)布說說的懸浮球FAB,這個(gè)小球通常添加與背景色具有反差的顏色,非常的醒目,常駐在屏幕的右下角.在平臺(tái)界面中,Meterial Design的頂部應(yīng)用欄中通常是用來顯示用戶當(dāng)前所在界面的功能.卡片式設(shè)計(jì)的應(yīng)用也很多,卡片不僅具有陰影、圓角等讓界面變得美觀的設(shè)計(jì),還能放置頭像、圖標(biāo)、標(biāo)題和各種媒體元素.
登錄注冊(cè)是每個(gè)應(yīng)用都必不可少的模塊,登錄注冊(cè)模塊已得到廣泛應(yīng)用,因此其發(fā)展較為成熟,設(shè)計(jì)起來并不困難.登錄設(shè)計(jì)就是根據(jù)用戶提供的賬戶和密碼信息查詢user數(shù)據(jù)庫,若存在該用戶,就將登錄成功信息返回給客戶端,否則將拒絕登錄信息返回給前端.注冊(cè)設(shè)計(jì)就是根據(jù)用戶提供的賬戶密碼等個(gè)人信息,首先查詢?cè)撚脩羰欠褚呀?jīng)存在,若用戶已經(jīng)存在,則拒絕注冊(cè),否則,將用戶個(gè)人信息插入到user表中,最后將操作結(jié)果返回給前端.值得注意的是注冊(cè)過程中使用正則表達(dá)式和Bmob短信服務(wù),用來驗(yàn)證用戶手機(jī)號(hào)的真實(shí)性和有效性.對(duì)應(yīng)的用戶登錄與注冊(cè)實(shí)現(xiàn)效果圖如圖2所示.
圖2 登錄注冊(cè)效果圖
此模塊設(shè)計(jì)的難點(diǎn)在于場景的設(shè)計(jì)和模型的建立,為了激勵(lì)用戶積極地參與到活動(dòng)中并獲得完成任務(wù)的成就感,給軟件創(chuàng)建了虛擬愛心幣,用來進(jìn)行任務(wù)的獎(jiǎng)勵(lì)和實(shí)品的兌換,在愛心小窩模塊設(shè)置了卡通人物和虛擬背景,虛擬人物的設(shè)定就是現(xiàn)實(shí)中需要幫助的人,用戶可以利用完成任務(wù)獲得的愛心幣對(duì)虛擬卡通人物的智力、體力、見識(shí)等進(jìn)行補(bǔ)充,平臺(tái)會(huì)將這些數(shù)據(jù)轉(zhuǎn)化成線下相應(yīng)的實(shí)物捐贈(zèng).對(duì)應(yīng)的實(shí)現(xiàn)效果圖如圖3所示.
圖3 愛心小窩模塊效果圖
任務(wù)模塊是本平臺(tái)最具特色的一個(gè)模塊,主要有發(fā)布任務(wù),查看發(fā)布任務(wù)簽到碼,領(lǐng)取任務(wù)和打卡簽到.用例圖[11]如圖4所示,本模塊將主要介紹任務(wù)發(fā)布地點(diǎn)推薦和打卡簽到的兩層限制.
圖4 任務(wù)模塊用例圖
在任務(wù)發(fā)布過程中,任務(wù)地址不能只是用戶編輯的地址,更不能直接獲取當(dāng)前地址,而是首先通過百度地圖的定位功能獲取用戶當(dāng)前所在位置,然后再根據(jù)關(guān)鍵字在當(dāng)前位置進(jìn)行周邊搜索,將搜索到的結(jié)果作為選項(xiàng)展示給用戶,按照用戶的選擇將地址、經(jīng)緯度作為任務(wù)的一部分提交到后臺(tái).這一過程需要借助第三方平臺(tái),這里選擇了用戶量巨大、定位精確、功能強(qiáng)大的百度地圖作為第三方平臺(tái).
本平臺(tái)的任務(wù)模塊中使用了百度地圖的定位和周邊關(guān)鍵字搜索功能.定位方法需要用到BDLocationClient類,創(chuàng)建一個(gè)該類,對(duì)象就相當(dāng)于開啟了一個(gè)地圖客戶端,對(duì)該對(duì)象設(shè)置監(jiān)聽便可以時(shí)刻監(jiān)視位置變化,在監(jiān)聽位置的回調(diào)方法中能夠獲取用戶設(shè)備當(dāng)前的經(jīng)緯度.周邊關(guān)鍵詞檢索用到的方法主要是SuggestionSearch類 的RequestSuggestion方 法,該方法的形參為SuggestionSearchOption對(duì)象.通過前面獲取到的經(jīng)緯度、關(guān)鍵字可以創(chuàng)建該Option對(duì)象,并執(zhí)行RequestSuggestion方法,搜索成功后將推薦地址數(shù)據(jù)回調(diào),就可看到所有包含鍵入關(guān)鍵詞的地點(diǎn)名稱,用戶選擇正確的地點(diǎn)名稱并提交任務(wù)信息,就可以將完整的任務(wù)信息存儲(chǔ)到后臺(tái)數(shù)據(jù)庫.
用戶需同時(shí)滿足兩層限制才能打卡成功,第一層限制是在打卡地點(diǎn)范圍內(nèi),第二層限制是輸入正確的簽到碼.
第一層限制的關(guān)鍵在于獲取任務(wù)地點(diǎn)經(jīng)緯度和當(dāng)前經(jīng)緯度,并結(jié)合地球半徑計(jì)算出兩點(diǎn)距離.距離算法主要依賴于半正矢公式:
其 中,LngA、LatA分 別 是A點(diǎn) 經(jīng) 度 和 緯 度,Lng B、LatB分別是B點(diǎn)經(jīng)度和緯度,x表示兩點(diǎn)緯度之差,即x=LatA-LatB,y表示兩點(diǎn)經(jīng)度之差,即y=LngA-LngB,6 378.137為地球赤道半徑,單位為千米.計(jì)算出兩點(diǎn)距離之后便可與簽到范圍比對(duì),確定用戶是否滿足范圍限制.
第二層限制的關(guān)鍵在于簽到碼的隨機(jī)性,任務(wù)簽到碼的設(shè)計(jì)是為了防止用戶作弊,簽到碼的生成規(guī)則是使用java.lang包下的Math.random()方法[12],為了減少簽到碼的重復(fù)率,需要以當(dāng)前時(shí)間作為時(shí)間種子,讓簽到碼在客戶端生成,為了提高簽到碼的隨機(jī)性,在不同的手機(jī)環(huán)境下,同一時(shí)刻生成的簽到碼會(huì)有所不同.將用戶輸入的簽到碼與任務(wù)數(shù)據(jù)庫中簽到碼進(jìn)行比對(duì)便可獲取簽到結(jié)果.
對(duì)應(yīng)的任務(wù)模塊的效果圖如圖5所示,任務(wù)模塊分為任務(wù)廣場、發(fā)布任務(wù)、已領(lǐng)任務(wù)三個(gè)子模塊,任務(wù)廣場和已領(lǐng)任務(wù)均以列表的形式展現(xiàn)出來,點(diǎn)擊進(jìn)去可以查看詳情,在發(fā)布任務(wù)中按照提示進(jìn)行填寫就可以發(fā)布新的任務(wù),用戶領(lǐng)取的任務(wù)在規(guī)定時(shí)間和范圍內(nèi)進(jìn)行打卡簽到.
圖5 任務(wù)模塊效果圖
身邊公益模塊可以查看所有用戶的公益動(dòng)態(tài),并且能對(duì)某一動(dòng)態(tài)進(jìn)行點(diǎn)贊和評(píng)論;用戶可以自己發(fā)表動(dòng)態(tài),輸入標(biāo)題、內(nèi)容,也可以添加圖片,即可發(fā)表自己的動(dòng)態(tài).身邊公益模塊主要是對(duì)post表和user_post表進(jìn)行增刪改查操作.在實(shí)現(xiàn)上日期顯示為了使數(shù)據(jù)庫中的日期和客戶端上的日期完全一致,在服務(wù)器端,上傳說說時(shí)將說說信息轉(zhuǎn)換成post實(shí)體類,在post的日期變量上方加入“@JsonFormat”注解,這樣符合國人的時(shí)間格式為“年-月-日 時(shí):分:秒”.為了使圖片顯示實(shí)時(shí)更新,需要解決服務(wù)器的熱啟動(dòng)問題.服務(wù)器內(nèi)的圖片資源放在resources/static/img目錄下,與項(xiàng)目一起打包成war文件在Tomcat上運(yùn)行,但是每次運(yùn)行其圖片資源就已經(jīng)固定下來了,如果Tomcat不重啟,無論上傳了多少圖片也無法找到.究其原因,是項(xiàng)目內(nèi)的文件在運(yùn)行過程中無法更新.該問題的解決方法為:將img文件夾映射到服務(wù)器靜態(tài)文件夾,采用的映射方法是重寫WebMvcConfigurer的addResourcesHandlers方法,方法內(nèi)代碼為registry.addResourceHandler("/img/**").addResourceLocations("file:"+filePath).模塊對(duì)應(yīng)的效果圖如圖6所示.
募捐模塊也是公益平臺(tái)中的重中之重,該模塊的出現(xiàn)給志愿者提供了強(qiáng)大的行動(dòng)力,主要功能有查詢募捐活動(dòng)并進(jìn)行商品搜索、支付和收貨確認(rèn),時(shí)序圖見圖7.
圖7 募捐模塊時(shí)序圖
商品搜索的功能實(shí)現(xiàn)主要調(diào)用了getGoods-ByName方 法,此 方 法 主 要 使 用 了"like′%${name}%′"關(guān)鍵字實(shí)現(xiàn)模糊搜索.在查詢之前要做的就是將name字符進(jìn)行拆分,逐個(gè)調(diào)用查詢方法,查詢完畢之后為了防止商品重復(fù)出現(xiàn),使用Java提供的Map容器[13],以商品的唯一id作為key,完成對(duì)商品對(duì)象名稱的存儲(chǔ).
支付功能的代碼實(shí)現(xiàn)遵循設(shè)計(jì)階段“三個(gè)判斷、四個(gè)操作”的邏輯.先調(diào)用donation-Mapper判斷是否需要物資,再調(diào)用goodsMapper判斷庫存是否足夠,最后調(diào)用donation_goods_userMapper判斷余額是否足夠,調(diào)用的三個(gè)判斷均滿足后,再進(jìn)行“四個(gè)操作”:插入關(guān)系數(shù)據(jù)、更新愛心幣數(shù)量、減少商品庫存、減少募捐所需物資,所有操作通過try-catch進(jìn)行事務(wù)回滾.
募捐模塊對(duì)應(yīng)的效果圖如圖8所示.在募捐廣場中,能看到圖文并茂的募捐活動(dòng),并且標(biāo)注了一些細(xì)節(jié),如所需物資、時(shí)間等方便用戶快速篩選到自己能夠參加的活動(dòng),點(diǎn)擊其中的一個(gè)活動(dòng)就可以進(jìn)入募捐活動(dòng)詳情界面,里面有更為詳細(xì)的活動(dòng)描述,描述底部有“去選擇商品”按鈕,點(diǎn)擊按鈕進(jìn)入選擇商品界面,用戶可以左滑或右滑對(duì)商品進(jìn)行選擇,最后對(duì)選擇的商品進(jìn)行支付即可完成一次募捐活動(dòng).
圖8 募捐模塊效果圖
設(shè)計(jì)并實(shí)現(xiàn)了基于安卓系統(tǒng)的智慧公益平臺(tái),該平臺(tái)能夠滿足社區(qū)居民志愿服務(wù)的需求.但本平臺(tái)仍有待改進(jìn)的地方,比如愛心幣與現(xiàn)實(shí)錢幣的流通模式,也希望在以后能夠更好地實(shí)現(xiàn),去幫助更多的人.