疫情防控|Springboot+小程序+校園疫情防控系統(tǒng)設(shè)計與實(shí)現(xiàn)
收藏點(diǎn)贊不迷路? 關(guān)注作者有好處
文末獲取源碼?
前言:
校園疫情防控系統(tǒng)是針對學(xué)校疫情防控管理的要求,為學(xué)校疫情防控設(shè)計的一款微信小程序,可以用于學(xué)生每日健康信息上報統(tǒng)計,助手于數(shù)字化疫情管理,包括健康信息上報、班級學(xué)生離校申請審批、校園通知、疫情地區(qū)可視化圖表。
本文利用Spring Boot與uniapp技術(shù),設(shè)計開發(fā)出的一個基于C/S架構(gòu)的校園疫情防控微信小程序。在整個系統(tǒng)的開發(fā)周期中,系統(tǒng)后端選用Spring Boot框架,前端選用uniapp框架,持久層選用MYSQL數(shù)據(jù)庫來實(shí)現(xiàn)。主要完成以下幾個方面的研究:
1.分析在程序開發(fā)過程中所采用的C/S結(jié)構(gòu)和B/S結(jié)構(gòu)的優(yōu)缺點(diǎn),并確定系統(tǒng)的基本實(shí)行方案。
2.對功能需求詳細(xì)分析,并且也對非功能需求以及系統(tǒng)運(yùn)行環(huán)境進(jìn)行簡單分析,分析各個功能模塊的設(shè)計和實(shí)現(xiàn)。
3.實(shí)現(xiàn)了學(xué)生打卡、學(xué)生請假、輔導(dǎo)員管理學(xué)生健康填報、輔導(dǎo)員審批學(xué)生假條、校園通知、班級信息管理、疫情可視化圖表等功能。
一,項目簡介
全國疫情頻發(fā),點(diǎn)多面廣,形勢很嚴(yán)峻,在這樣的形勢下,校園嚴(yán)格執(zhí)行省、市的疫情防控政策。學(xué)生返校后,實(shí)行封閉式管理,學(xué)生非必要不準(zhǔn)出校,學(xué)生長期封閉在校園難免會有不理解、抱怨、煩躁等負(fù)面情緒,為了讓學(xué)生理解目前封校管理政策的正確性,也為了讓學(xué)生積極配合學(xué)校防疫的措施,在學(xué)生處領(lǐng)導(dǎo)下,各班級積極組織學(xué)生配合學(xué)校疫情的防控工作開展。
疫情防控的意義,是為了使疫情更加穩(wěn)定,了解更多防控意識,有能力去參加疫情防控的志愿者,幫助更多的人。防控意義在于保護(hù)好自己,保護(hù)好身邊的人。疫情時刻牽動著大家的心,疫情是命令,防控就是責(zé)任,自愿積極投入到疫情防控工作當(dāng)中去,用實(shí)際行動為打贏疫情防控阻擊戰(zhàn)貢獻(xiàn)志愿的力量。
讓大學(xué)生能夠深刻認(rèn)識戰(zhàn)勝一切艱難險阻的根本保障,是實(shí)現(xiàn)中華民族偉大復(fù)興的希望所在。引導(dǎo)大學(xué)生自覺擁護(hù)自覺成長,成為新時代社會主義的建設(shè)者和接班人;引導(dǎo)大學(xué)生把滿腔的愛國熱情轉(zhuǎn)化為建設(shè)社會主義現(xiàn)代化祖國的強(qiáng)大動力,刻苦學(xué)習(xí)、練就本領(lǐng)、報效祖國,擔(dān)當(dāng)起青年一代的強(qiáng)國使命[1]。
基于Spring Boot的校園疫情防控系統(tǒng)的設(shè)計與實(shí)現(xiàn)主要實(shí)現(xiàn)了首頁、登錄、注冊、健康填報、請假、批假、校園通知、班級管理、疫情圖表等功能模塊,系統(tǒng)結(jié)構(gòu)圖如下圖所示[9]。

學(xué)生/輔導(dǎo)員點(diǎn)擊打卡按鈕,進(jìn)行每日健康填報,填報的表單會獲取地理位置進(jìn)行定位,然后通過上傳健康碼、行程碼和填寫表單信息提交數(shù)據(jù)到打卡記錄表,教師端則可以瀏覽該打卡記錄信息[10]。實(shí)例如下圖4-2-1所示。

圖4-2-1 健康打卡數(shù)據(jù)流圖
學(xué)生請假需要填寫離校時間、返校時間、請假事由、請假去向、請假總時長,最終提交到教師端等待審批。實(shí)例如下圖4-2-2所示。

圖4-2-2 學(xué)生請假數(shù)據(jù)流圖
輔導(dǎo)員收到學(xué)生請假申請時,對學(xué)生的請假信息進(jìn)行審核,審核狀態(tài)分為:通過、不通過,并且輔導(dǎo)員有權(quán)限直接撤銷學(xué)生的請假條。實(shí)例如下圖4-2-3所示。

圖4-2-3 輔導(dǎo)員批假數(shù)據(jù)流圖
校園通知是用于公告全校最新的消息,用戶瀏覽后可以了解到校內(nèi)的最新狀況信息。實(shí)例如下圖4-2-4所示。

圖4-2-4 校園通知數(shù)據(jù)流圖
該功能是學(xué)生查看自己所在班級包括自己在內(nèi)的其他同學(xué)打卡狀態(tài),如果是輔導(dǎo)員則查看自己所有管理的班級里面學(xué)生的打卡狀態(tài),并可以通過電話號碼通知學(xué)生。實(shí)例如下圖4-2-5所示。

圖4-2-5 班級列表數(shù)據(jù)流圖
該功能模塊是通用功能模塊,學(xué)生和教師都可以瀏覽疫情相關(guān)信息,該功能包括疫情定位、疫情分布、疫情分析,其中疫情定位采用的是騰訊地圖API,疫情分布圖為湖南境內(nèi)的城市分布,疫情分析是使用數(shù)據(jù)可視化圖表展示。實(shí)例如下圖4-2-6所示。

圖4-2-6 疫情狀況數(shù)據(jù)流圖
該功能用于用戶修改自己的個人信息,用戶可以通過此功能修改自己的姓名、性別、頭像、班級。實(shí)例如下圖4-2-7所示。

圖4-2-7 編輯個人信息數(shù)據(jù)流圖
二,環(huán)境介紹
語言環(huán)境:Java:? jdk1.8
數(shù)據(jù)庫:Mysql: mysql5.7
應(yīng)用服務(wù)器:Tomcat:? tomcat8.5.31
開發(fā)工具:IDEA或eclipse
后臺開發(fā):Springboot+mybatis
前端開發(fā):微信小程序
三,系統(tǒng)展示
本次校園疫情防控系統(tǒng)的實(shí)現(xiàn)基于C/S結(jié)構(gòu)模式,http超文本傳輸協(xié)議,MySQL數(shù)據(jù)庫引擎采用默認(rèn)的innodb,接口規(guī)范采用Restful API風(fēng)格[14]。
該系統(tǒng)實(shí)現(xiàn)分為登錄、注冊、首頁、健康填報(打卡)、打卡記錄、學(xué)生請假、請假記錄、請假處理、校園通知、班級、疫情定位、疫情分布、疫情分析、個人信息[15]。
5.1? 登錄
用戶通過輸入電話號碼和密碼進(jìn)行登錄,調(diào)用LoginController類下的loginByPhone方法來實(shí)現(xiàn)登錄,當(dāng)輸入格式都正確,該賬號已存在的狀態(tài)下,并且數(shù)據(jù)查詢校驗(yàn)成功,即可登錄成功到小程序首頁界面。其登錄界面展示如圖5-1所示。

圖5-1 登錄界面展示圖
5.2? 注冊
用戶通過輸入手機(jī)號碼、姓名、密碼、性別、年級、班級、輔導(dǎo)員進(jìn)行注冊,調(diào)用UserController類下的addUserInfo方法來實(shí)現(xiàn)注冊,當(dāng)輸入格式都正確,點(diǎn)擊注冊,并且后臺插入數(shù)據(jù)成功,即可注冊成功并跳轉(zhuǎn)到小程序登錄界面。其注冊界面展示如圖5-2所示。

圖5-2 注冊界面展示圖
5.3? 首頁
如果是學(xué)生端首頁展示打卡、打卡記錄、請假、請假記錄、校園通知,如果是教師端首頁展示打卡、打卡記錄、請假處理、學(xué)生打卡記錄、校園通知。其首頁界面展示如圖5-3所示。

???????

圖5-3 首頁界面展示圖
5.4? 健康填報(打卡)
學(xué)生或者教師可以每日進(jìn)行健康打卡,系統(tǒng)會記錄每天健康填報信息。當(dāng)進(jìn)入打卡界面時,系統(tǒng)自動獲取當(dāng)前地理位置,然后用戶需要輸入體溫,選擇健康碼顏色,上傳健康碼和行程碼即可進(jìn)行每日的健康打卡。其打卡界面展示如圖5-4所示。

圖5-4 打卡界面展示圖
5.5? 打卡記錄
用戶可以指定日期查看自己的健康填報記錄,默認(rèn)查看所有的健康填報記錄,健康填報記錄信息包括用戶姓名,打卡地點(diǎn),體溫,健康碼,行程碼。其打卡記錄界面展示如圖5-5所示。
圖5-5 打卡記錄界面展示圖
5.6? 學(xué)生請假
學(xué)生外出請假需要通過此功能進(jìn)行請假審核,當(dāng)學(xué)生請假申請后該請假條會發(fā)送給教師端進(jìn)行審核處理,外出請假報備表單內(nèi)容包括離校時間,返校時間,請假事由,請假去向,請假時長。其學(xué)生請假界面展示如圖5-6所示。

圖5-6 學(xué)生請假界面展示圖
5.7? 請假記錄
請假記錄功能用于記錄學(xué)生的請假歷史記錄,默認(rèn)為查看所有的請假記錄,主要內(nèi)容包括假條創(chuàng)建時間,申請人,請假去向,請假事由,學(xué)生年級,請假開始時間,請假結(jié)束時間,請假總時長。其請假記錄界面展示如圖5-7所示。

圖5-7 請假記錄界面展示圖
5.8? 請假處理
請假處理為教師端的功能,教師可以通過此功能審核學(xué)生端發(fā)來的請假申請,教師有權(quán)限進(jìn)行審核,審核狀態(tài)分為未審批,同意,不同意,并且教師可以直接撤銷指定的請假申請。其請假處理界面展示如圖5-8所示。

圖5-8 請假處理界面展示圖
5.9? 校園通知
校園通知功能模塊展示校園內(nèi)最新的通告通知,多條信息列表分頁展示,通過word文檔轉(zhuǎn)圖片在頁面展示。其校園通知界面展示如圖5-9所示。

???????

圖5-9 校園通知界面展示圖
5.10? 班級
在教師端班級界面展示教師所管理的班級,在學(xué)生端則展示該學(xué)生自己所在班級,班級信息包括姓名、學(xué)號、電話、打卡狀態(tài),當(dāng)選擇僅查看未打卡人員時,會顯示所有未打卡的成員,若當(dāng)前用戶角色是教師,則該用戶可以通過選擇指定的年級和班級查看班級信息,若當(dāng)前用戶角色是學(xué)生,則該用戶無法選擇年級和班級。其班級界面展示如圖5-10所示。

圖5-10 班級界面展示圖
5.11? 疫情定位
疫情定位功能使用騰訊地圖API實(shí)現(xiàn),在獲取全國疫情數(shù)據(jù)后,通過地點(diǎn)調(diào)用騰訊地圖API獲取經(jīng)度、緯度,然后在地圖上標(biāo)記出高風(fēng)險城市。其疫情定位界面展示如圖5-11所示。
圖5-11 疫情定位界面展示圖
5.12? 疫情分布
疫情分布可查看湖南境內(nèi)最新的疫情狀況信息,界面頂部文字播報當(dāng)日現(xiàn)有確診病例的疫情信息,當(dāng)點(diǎn)擊每個城市地區(qū)時,可以顯示該城市的現(xiàn)有確診病例。其疫情分布界面展示如圖5-12所示。
圖5-12 疫情分布界面展示圖
5.13? 疫情分析
疫情分析使用數(shù)據(jù)可視化的方式,清晰地展示疫情數(shù)據(jù)信息的變化趨勢,使得用戶能夠可觀地分析疫情數(shù)據(jù)的變化,可視化圖表包括山峰圖、折線圖,其中山峰圖主要功能是統(tǒng)計湖南近五個月的疫情確診數(shù)量,折線圖主要功能是統(tǒng)計湖南近五個月的疫情確診數(shù)量變化趨勢。其疫情分析界面展示如圖5-13所示。
?
圖5-13 疫情分析界面展示圖
5.14? 個人信息
個人信息可以查看當(dāng)前用戶的主要信息,并可以修改當(dāng)前用戶的信息。其個人信息界面展示如圖5-14所示。
圖5-14 個人信息界面展示圖
四,核心代碼展示
package com.qzdl.controller;import com.qzdl.entity.SchoolRole;import com.qzdl.response.Result;import com.qzdl.service.LoginService;import com.qzdl.util.JwtUtil;import com.qzdl.util.RedisUtil;import com.qzdl.vo.LoginUserVO;import io.swagger.annotations.ApiOperation;import org.springframework.beans.BeanUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.multipart.MultipartFile;import java.util.HashMap;import java.util.Map;public class LoginController { ? ?
? ?private LoginService loginService; ? ?
? ?private RedisUtil redisUtil; ? ?
? ?public Result doHello(){ ? ? ? ?return Result.success();
? ?} ? ?/**
? ? * 通過學(xué)號/工號登錄
? ? * @param loginUserVO
? ? * @return
? ? */
? ?
? ?
? ?public Result doUserLogin({ ? ? ? ? LoginUserVO loginUserVO)SchoolRole schoolRole = new SchoolRole();
? ? ? ?BeanUtils.copyProperties(loginUserVO,schoolRole); ? ? ? ?SchoolRole user = loginService.login(schoolRole.getStudentId(), schoolRole.getPassword()); ? ? ? ?String token = JwtUtil.getToken(user.getStudentId().toString());
? ? ? ?redisUtil.hset("token",schoolRole.getStudentId().toString(),token,60*60*24*2);
? ? ? ?Map<String,Object> data = new HashMap<>();
? ? ? ?data.put("user",user);
? ? ? ?data.put("token",token); ? ? ? ?return Result.success().data(data);
? ?} ? ?/**
? ? * 通過電話號碼登錄
? ? * @param schoolRole
? ? * @return
? ? */
? ?
? ?
? ?public Result doUserLoginByPhone({ ? ? ? ? SchoolRole schoolRole)SchoolRole user = loginService.loginByPhone(schoolRole.getPhone(), schoolRole.getPassword()); ? ? ? ?if (user == null) { ? ? ? ? ? ?return Result.failure();
? ? ? ?} ? ? ? ?String token = JwtUtil.getToken(user.getStudentId().toString());
? ? ? ?redisUtil.hset("token",user.getStudentId().toString(),token,60*60*24*2);
? ? ? ?Map<String,Object> data = new HashMap<>();
? ? ? ?data.put("user",user);
? ? ? ?data.put("token",token); ? ? ? ?return Result.success().data(data);
? ?} ? ?public Result doAddImg(MultipartFile multipartFile){ ? ? ? ?return Result.success();
? ?}
}
package com.qzdl.system.controller;import com.qzdl.entity.SchoolRole;import com.qzdl.response.Result;import com.qzdl.system.service.ClassService;import io.swagger.annotations.ApiOperation;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.*;import java.text.Collator;import java.util.List;import java.util.Locale;public class ClassController { ? ?
? ?private ClassService classService; ? ?/**
? ? * 根據(jù)教師tid查詢學(xué)生信息
? ? * @param studentId
? ? * @return
? ? */
? ?
? ?
? ?public Result selectStudentInfoByTid(Integer studentId) {
? ? ? ?List<SchoolRole> result = classService.selectStudentInfoByTid(studentId);
? ? ? ?result.sort((o1, o2) -> Collator.getInstance(Locale.CHINA).compare(o1.getStudentName(), o2.getStudentName())); ? ? ? ?return Result.success().data("result", result);
? ?} ? ?/**
? ? * 根據(jù)教師id、年級id、班級id查詢學(xué)生信息
? ? */
? ?
? ?
? ?public Result selectStudentInfoBySidGidCid( {
? ? ? ?List<SchoolRole> result = classService.selectStudentInfoBySidGidCid(schoolRole);
? ? ? ?result.sort((o1, o2) -> Collator.getInstance(Locale.CHINA).compare(o1.getStudentName(), o2.getStudentName())); ? ? ? ? SchoolRole schoolRole)return Result.success().data("result", result);
? ?} ? ?/**
? ? * selectStudentInfoByGidCid
? ? */
? ?
? ?
? ?public Result selectStudentInfoByGidCid(Integer gradeId, Integer classid) {
? ? ? ?List<SchoolRole> result = classService.selectStudentInfoByGidCid(gradeId,classid);
? ? ? ?result.sort((o1, o2) -> Collator.getInstance(Locale.CHINA).compare(o1.getStudentName(), o2.getStudentName())); ? ? ? ?return Result.success().data("result", result);
? ?}
}
package com.qzdl.system.controller;import cn.hutool.core.util.StrUtil;import cn.hutool.json.JSONArray;import cn.hutool.json.JSONObject;import com.qzdl.response.Result;import com.qzdl.util.RedisUtil;import io.swagger.annotations.ApiOperation;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.http.ResponseEntity;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.web.bind.annotation.*;import org.springframework.web.client.RestTemplate;import java.util.ArrayList;import java.util.List;import java.util.stream.Collectors;public class EpidemicController { ? ?private final String key = "e4aee1f5e8b01103606a4d61cb98232d"; ? ?
? ?private RestTemplate restTemplate; ? ?
? ?private RedisUtil redisUtil; ? ?/**
? ? * 獲取湖南境內(nèi)的疫情數(shù)據(jù)
? ? * @return
? ? */
? ?
? ?public Result getEpidemicDataInHunan() { ? ? ? ?if(redisUtil.sGet("jsonData").size() > 0){
? ? ? ? ? ?System.out.println("jsonData緩存..."); ? ? ? ? ? ?return Result.success().data("jsonData", redisUtil.sGet("jsonData").toArray()[0]);
? ? ? ?} ? ? ? ?String url = "https://interface.sina.cn/news/wap/fymap2020_data.d.json";
? ? ? ?ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class); ? ? ? ?JSONObject jsonObject = new JSONObject(forEntity.getBody()); ? ? ? ?JSONArray jsonArray = jsonObject.getJSONObject("data").getJSONArray("list"); ? ? ? ?//過濾得到湖南的數(shù)據(jù)
? ? ? ?JSONArray jsonData = jsonArray.stream().filter(o -> ((JSONObject) o).get("ename").equals("hunan")).collect(Collectors.toCollection(JSONArray::new));
? ? ? ?redisUtil.sSetAndTime("jsonData", 60*60*3, jsonData); ? ? ? ?return Result.success().data("jsonData", jsonData);
? ?} ? ?/**
? ? * 獲取湖南境內(nèi)的歷史數(shù)據(jù)
? ? * @return
? ? */
? ?
? ?public Result getEpidemicDataInHunanHistory() { ? ? ? ?if(redisUtil.sGet("shanfengData").size() > 0){
? ? ? ? ? ?System.out.println("shanfengData緩存..."); ? ? ? ? ? ?return Result.success().data("shanfengData", redisUtil.sGet("shanfengData").toArray()[0]);
? ? ? ?} ? ? ? ?String url = "https://voice.baidu.com/newpneumonia/getv2?from=mola-virus&stage=publish&target=trend&isCaseIn=1&area=湖南&callback=jsonp_1660908362757_64109";
? ? ? ?ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class);
? ? ? ?String[] strArr = StrUtil.subBetweenAll(forEntity.getBody(), "(", ")"); ? ? ? ?JSONObject jsonObject = new JSONObject(strArr[0]); ? ? ? ?JSONArray jsonArray = ((JSONObject) jsonObject.getJSONArray("data").get(0))
? ? ? ? ? ? ? ?.getJSONObject("trendMonth").getJSONArray("list"); ? ? ? ?//monthData:每個月的數(shù)據(jù)
? ? ? ?JSONArray monthData = ((JSONObject) jsonObject.getJSONArray("data").get(0))
? ? ? ? ? ? ? ?.getJSONObject("trendMonth").getJSONArray("updateMonth"); ? ? ? ?//shanfengData:新增本土數(shù)據(jù)
? ? ? ?JSONArray bentuData = ((JSONObject) jsonArray.stream().filter(item -> { ? ? ? ? ? ?return "新增本土".equals(((JSONObject) item).get("name"));
? ? ? ?}).collect(Collectors.toCollection(JSONArray::new)).get(0)).getJSONArray("data"); ? ? ? ?//新建一個jsonObject,用來存放每個月的數(shù)據(jù)
? ? ? ?JSONArray shanfengData = new JSONArray(); ? ? ? ?for (int i = 0; i < monthData.size(); i++) { ? ? ? ? ? ?String jsonStr = "{\"name\":\"" + monthData.get(i) + "\",\"value\":" + bentuData.get(i) + "}"; ? ? ? ? ? ?//jsonStr轉(zhuǎn)json對象
? ? ? ? ? ?shanfengData.add(i, new JSONObject(jsonStr));
? ? ? ?}
? ? ? ?redisUtil.sSetAndTime("shanfengData", 60*60*3, shanfengData); ? ? ? ?return Result.success().data("shanfengData", shanfengData);
? ?} ? ?/**
? ? * 定時獲取全國疫情數(shù)據(jù)
? ? * @return
? ? */
? ?
? ?
? ?
? ?public void getEpidemicCity() throws InterruptedException {
? ? ? ?System.out.println("正在更新全國城市疫情數(shù)據(jù)..."); ? ? ? ?String url = "https://interface.sina.cn/news/wap/fymap2020_data.d.json";
? ? ? ?ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class); ? ? ? ?JSONObject jsonObject = new JSONObject(forEntity.getBody()); ? ? ? ?JSONArray jsonArray = jsonObject.getJSONObject("data").getJSONArray("list"); ? ? ? ?//定義一個列表存儲城市
? ? ? ?List<String> province = new ArrayList<>(); ? ? ? ?for (Object o1 : jsonArray) { ? ? ? ? ? ?for (Object o2 : ((JSONObject)o1).getJSONArray("city")) { ? ? ? ? ? ? ? ?if (Integer.parseInt(((JSONObject) o2).get("econNum").toString()) > 0 && !"".equals(((JSONObject) o2).get("citycode").toString())){ ? ? ? ? ? ? ? ? ? ?String mapName = ((JSONObject) o2).get("mapName").toString();
? ? ? ? ? ? ? ? ? ?province.add(mapName);
? ? ? ? ? ? ? ?}
? ? ? ? ? ?}
? ? ? ?}
? ? ? ?System.out.println("城市數(shù)量=》" + province.size()); ? ? ? ?//存儲經(jīng)緯度
? ? ? ?List<String> locationList = new ArrayList<String>(); ? ? ? ?for (Object o : new JSONArray(province)) {
? ? ? ? ? ?Thread.sleep(50); ? ? ? ? ? ?String city = (String)o; ? ? ? ? ? ?String url2 = "https://restapi.amap.com/v3/geocode/geo?address=" + city + "&output=JSON&key=" + key;
? ? ? ? ? ?ResponseEntity<String> forEntity2 = restTemplate.getForEntity(url2, String.class); ? ? ? ? ? ?String jsonStr = forEntity2.getBody();
? ? ? ? ? ?System.out.println("jsonStr = " + jsonStr); ? ? ? ? ? ?JSONObject jsonObject2 = new JSONObject(jsonStr); ? ? ? ? ? ?String location = (String) ((JSONObject)jsonObject2.getJSONArray("geocodes").get(0)).get("location");
? ? ? ? ? ?locationList.add(location);
? ? ? ?}
? ? ? ?System.out.println("定時更新locationList=》" + locationList); ? ? ? ?//將獲取的數(shù)據(jù)放到redis中
? ? ? ?redisUtil.sSet("locationList",locationList);
? ? ? ?System.out.println("更新成功!??!...");
? ?} ? ?
? ?
? ?public Result getEpidemicCityByCache(){ ? ? ? ?if(redisUtil.sGet("locationList").size() > 0){ ? ? ? ? ? ?return Result.success().data("locationList", redisUtil.sGet("locationList"));
? ? ? ?} ? ? ? ?return Result.failure();
? ?}
}
五,項目總結(jié)
疫情防控是我國基層治理能力的一次重要檢驗(yàn)。我國的高校校園內(nèi)外通常有明顯的邊界線,可以被視為一個大型的難以分割的管理單元。然而,高校校園普遍擁有普通居民社區(qū)的居住屬性和其他機(jī)關(guān)社會企事業(yè)單位作為社會生產(chǎn)單位的生產(chǎn)屬性,需要承擔(dān)起相對較高的疫情防控壓力,高校擁有的特點(diǎn)也正是防疫所面臨的巨大挑戰(zhàn)。
校園人員數(shù)量多,人員密度大。相比較于其他機(jī)關(guān)和企事業(yè)單位,高校需要管理大量的學(xué)生和教職工。盡管高校土地占地面積相對比較大,但呈現(xiàn)出所管轄范圍內(nèi),整體人員高密度的特點(diǎn)。
同時,高校的主要實(shí)踐活動都在校園內(nèi)完成,教學(xué)工作的開展、日常辦公、食堂用餐、宿舍休息通常都是在封閉性較強(qiáng)的環(huán)境中進(jìn)行,不利于保持空氣的流通。不僅如此,校園內(nèi)的人員活動在校園中并不是平均分布的,而是高度集中分布的,如白天的教學(xué)時間,多數(shù)師生集中于教室當(dāng)中,為保證教學(xué)的工作開展,大多數(shù)課堂里的每個人員相鄰就坐,每間教室的人數(shù)從數(shù)十人到百人不等;晚上則集中于每間寢室中,一個房間內(nèi)人員數(shù)量往往在4人以上,高于普通社區(qū)住宅人數(shù)。這一系列的特點(diǎn)決定了在高校開展疫情防控工作最有效的手段仍然是將病毒拒之校門外[2]。