疫苗預(yù)約|疫苗管理|前后端分離Springboot+Vue兒童疫苗預(yù)約系統(tǒng)
項(xiàng)目編號:
前言:
隨著社會的發(fā)展,社會的各行各業(yè)都在利用信息化時代的優(yōu)勢。計算機(jī)的優(yōu)勢和普及使得各種信息系統(tǒng)的開發(fā)成為必需。
兒童疫苗預(yù)約管理,主要的模塊包括查看首頁、站點(diǎn)管理(輪播圖、公告欄)用戶管理(管理員、系統(tǒng)用戶)內(nèi)容管理(資訊列表、分類列表)更多管理(預(yù)約訂單、疫苗信息、取消預(yù)約、疫苗采購、疫苗退貨)等功能。系統(tǒng)中管理員主要是為了安全有效地存儲和管理各類信息,還可以對系統(tǒng)進(jìn)行管理與更新維護(hù)等操作,并且對后臺有相應(yīng)的操作權(quán)限。
要想實(shí)現(xiàn)兒童疫苗預(yù)約管理的各項(xiàng)功能,需要后臺數(shù)據(jù)庫的大力支持。管理員驗(yàn)證注冊信息,收集的用戶信息,并由此分析得出的關(guān)聯(lián)信息等大量的數(shù)據(jù)都由數(shù)據(jù)庫管理系統(tǒng)管理。本文中數(shù)據(jù)庫服務(wù)器端采用了Mysql作為后臺數(shù)據(jù)庫,使Web與數(shù)據(jù)庫緊密聯(lián)系起來。在設(shè)計過程中,充分保證了系統(tǒng)代碼的良好可讀性、實(shí)用性、易擴(kuò)展性、通用性、便于后期維護(hù)、操作方便以及頁面簡潔等特點(diǎn)。
本系統(tǒng)的開發(fā)使獲取兒童疫苗預(yù)約管理信息能夠更加方便快捷,同時也使兒童疫苗預(yù)約管理管理信息變的更加系統(tǒng)化、有序化。系統(tǒng)界面較友好,易于操作。
一,項(xiàng)目簡介
兒童疫苗預(yù)約管理從功能、數(shù)據(jù)流程、可行性、運(yùn)行環(huán)境等方面進(jìn)行需求分析。對兒童疫苗預(yù)約管理的數(shù)據(jù)庫、功能進(jìn)行了詳細(xì)設(shè)計。分析了主要界面設(shè)計和相關(guān)組件設(shè)計,對兒童疫苗預(yù)約管理的具體實(shí)現(xiàn)進(jìn)行了介紹。
采用Java技術(shù),從數(shù)據(jù)庫中獲取數(shù)據(jù)、向數(shù)據(jù)庫中寫入數(shù)據(jù),實(shí)現(xiàn)系統(tǒng)直接對數(shù)據(jù)庫進(jìn)行各種操作,在網(wǎng)頁中加入動態(tài)內(nèi)容,從而實(shí)現(xiàn)兒童疫苗預(yù)約管理所需要的各種基本功能。
系統(tǒng)用戶分為前端用戶和后臺管理用戶兩類:下圖展示的是各用戶角色功能示例圖:

二,環(huán)境介紹
語言環(huán)境:Java:? jdk1.8
數(shù)據(jù)庫:Mysql: mysql5.7
應(yīng)用服務(wù)器:Tomcat:? tomcat8.5.31
開發(fā)工具:IDEA或eclipse
后臺開發(fā)技術(shù):Springboot+Mybatisplus
前臺開發(fā)技術(shù):Vue+ElementUi
三,系統(tǒng)展示
管理員登錄,管理員通過輸入用戶,密碼,角色等信息進(jìn)行系統(tǒng)登錄,如圖3-1所示。

圖3-1管理員登錄界面圖
管理員登錄進(jìn)入兒童疫苗預(yù)約管理可以查看管理員:首頁、站點(diǎn)管理(輪播圖、公告欄)用戶管理(管理員、系統(tǒng)用戶)內(nèi)容管理(資訊列表、分類列表)更多管理(預(yù)約訂單、疫苗信息、取消預(yù)約、疫苗采購、疫苗退貨)等內(nèi)容,如圖3-2所示。

圖3-2管理員功能首頁界面圖
用戶管理,在用戶管理頁面可以查看等索引、用戶賬號、密碼、用戶姓名、性別、年齡、聯(lián)系電話、電子郵箱、身份證號、家庭住址、個人照片等信息,并可根據(jù)需要進(jìn)行修改或刪除等操作,如圖3-3所示。

圖3-3用戶管理界面圖
疫苗信息,在疫苗信息頁面可以查看索引、疫苗編號、疫苗名稱、疫苗種類、疫苗詳情、接種人群等信息,并可根據(jù)需要進(jìn)行修改或刪除等操作,如圖3-4所示。

圖3-4疫苗信息界面圖
預(yù)約訂單信息,在預(yù)約訂單信息頁面可以查看索引、用戶編號、訂單編號、疫苗編號、疫苗名稱、疫苗價格、接種單位、接種醫(yī)生等信息,并可根據(jù)需要進(jìn)行修改或刪除等操作,如圖3-5所示。

圖3-5預(yù)約訂單信息界面圖
取消預(yù)約,在取消預(yù)約頁面可以查看索引、疫苗名稱、疫苗編號、疫苗名稱、疫苗價格、接種單位、單位地址、接種醫(yī)生等信息,并可根據(jù)需要進(jìn)行修改或刪除等操作,如圖5-6所示。

圖3-6取消預(yù)約界面圖
用戶注冊,在用戶注冊頁面通過填寫用戶賬號、密碼、用戶姓名、年齡、聯(lián)系電話、電子郵箱、身份等信息完成用戶注冊,如圖3-7所示。

圖3-7用戶注冊界面圖
用戶登錄進(jìn)入后臺可以查看首頁、公告消息、疫情資訊、疫苗信息等內(nèi)容,如圖3-9所示。

圖3-9用戶功能界面圖
疫苗信息,在疫苗信息頁面可以查看疫苗編號、疫苗名稱、疫苗圖片等信息操作,如圖3-10所示。

圖3-10疫苗信息界面圖
預(yù)約訂單管理,在預(yù)約訂單管理頁面可以查看索引、疫苗名稱、疫苗編號、接種人群、疫苗價格、接種單位、單位地址、接種醫(yī)生、接種時間等信息,如圖3-11所示。

圖3-11預(yù)約訂單界面圖
四,核心代碼展示
系統(tǒng)抽像的頂層Controller:
package com.project.demo.controller.base;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import com.project.demo.service.base.BaseService;import lombok.Setter;import lombok.extern.slf4j.Slf4j;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.springframework.transaction.annotation.Transactional;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.multipart.MultipartFile;import javax.persistence.Query;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.File;import java.io.IOException;import java.util.HashMap;import java.util.List;import java.util.Map;/**
*/public class BaseController<E, S extends BaseService<E>> { ? ?
? ?protected S service; ? ?
? ?
? ?public Map<String, Object> add(HttpServletRequest request) throws IOException {
? ? ? ?service.insert(service.readBody(request.getReader())); ? ? ? ?return success(1);
? ?} ? ?
? ?public Map<String, Object> addMap(Map<String,Object> map){
? ? ? ?service.insert(map); ? ? ? ?return success(1);
? ?} ? ?
? ?public Map<String, Object> set(HttpServletRequest request) throws IOException {
? ? ? ?service.update(service.readQuery(request), service.readConfig(request), service.readBody(request.getReader())); ? ? ? ?return success(1);
? ?} ? ?
? ?
? ?public Map<String, Object> del(HttpServletRequest request) {
? ? ? ?service.delete(service.readQuery(request), service.readConfig(request)); ? ? ? ?return success(1);
? ?} ? ?
? ?public Map<String, Object> obj(HttpServletRequest request) { ? ? ? ?Query select = service.select(service.readQuery(request), service.readConfig(request)); ? ? ? ?List resultList = select.getResultList(); ? ? ? ?if (resultList.size() > 0) { ? ? ? ? ? ?JSONObject jsonObject = new JSONObject();
? ? ? ? ? ?jsonObject.put("obj",resultList.get(0)); ? ? ? ? ? ?return success(jsonObject);
? ? ? ?} else { ? ? ? ? ? ?return success(null);
? ? ? ?}
? ?} ? ?
? ?public Map<String, Object> getList(HttpServletRequest request) {
? ? ? ?Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request)); ? ? ? ?return success(map);
? ?} ? ?
? ?public Map<String, Object> listGroup(HttpServletRequest request) {
? ? ? ?Map<String, Object> map = service.selectToList(service.readQuery(request), service.readConfig(request)); ? ? ? ?return success(map);
? ?} ? ?
? ?public Map<String, Object> barGroup(HttpServletRequest request) {
? ? ? ?Map<String, Object> map = service.selectBarGroup(service.readQuery(request), service.readConfig(request)); ? ? ? ?return success(map);
? ?} ? ?
? ?public Map<String, Object> count(HttpServletRequest request) { ? ? ? ?Query count = service.count(service.readQuery(request), service.readConfig(request)); ? ? ? ?return success(count.getResultList());
? ?} ? ?
? ?public Map<String, Object> sum(HttpServletRequest request) { ? ? ? ?Query count = service.sum(service.readQuery(request), service.readConfig(request)); ? ? ? ?return success(count.getResultList());
? ?} ? ?
public Map<String, Object> avg(HttpServletRequest request) { ? ? ? ?Query count = service.avg(service.readQuery(request), service.readConfig(request)); ? ? ? ?return success(count.getResultList());
? ?} ? ?
? ?public Map<String, Object> upload( {
? ? ? ?log.info( MultipartFile file)"進(jìn)入方法"); ? ? ? ?if (file.isEmpty()) { ? ? ? ? ? ?return error(30000, "沒有選擇文件");
? ? ? ?} ? ? ? ?try { ? ? ? ? ? ?//判斷有沒路徑,沒有則創(chuàng)建
? ? ? ? ? ?String filePath = System.getProperty("user.dir") + "\\target\\classes\\static\\upload\\"; ? ? ? ? ? ?File targetDir = new File(filePath); ? ? ? ? ? ?if (!targetDir.exists() && !targetDir.isDirectory()) { ? ? ? ? ? ? ? ?if (targetDir.mkdirs()) {
? ? ? ? ? ? ? ? ? ?log.info("創(chuàng)建目錄成功");
? ? ? ? ? ? ? ?} else {
? ? ? ? ? ? ? ? ? ?log.error("創(chuàng)建目錄失敗");
? ? ? ? ? ? ? ?}
? ? ? ? ? ?}// ? ? ? ? ? ?String path = ResourceUtils.getURL("classpath:").getPath() + "static/upload/";// ? ? ? ? ? ?String filePath = path.replace('/', '\\').substring(1, path.length());
? ? ? ? ? ?String fileName = file.getOriginalFilename(); ? ? ? ? ? ?File dest = new File(filePath + fileName);
? ? ? ? ? ?log.info("文件路徑:{}", dest.getPath());
? ? ? ? ? ?log.info("文件名:{}", dest.getName());
? ? ? ? ? ?file.transferTo(dest); ? ? ? ? ? ?JSONObject jsonObject = new JSONObject();
? ? ? ? ? ?jsonObject.put("url", "/api/upload/" + fileName); ? ? ? ? ? ?return success(jsonObject);
? ? ? ?} catch (IOException e) {
? ? ? ? ? ?log.info("上傳失?。簕}", e.getMessage());
? ? ? ?} ? ? ? ?return error(30000, "上傳失敗");
? ?} ? ?
? ?public Map<String, Object> importDb( MultipartFile file)throws IOException {
? ? ? ?service.importDb(file); ? ? ? ?return success(1);
? ?} ? ?
? ?public void exportDb(HttpServletRequest request, HttpServletResponse response) throws IOException { ? ? ? ?HSSFWorkbook sheets = service.exportDb(service.readQuery(request), service.readConfig(request));
? ? ? ?response.setContentType("application/octet-stream");
? ? ? ?response.setHeader("Content-disposition", "attachment;filename=employee.xls");
? ? ? ?response.flushBuffer();
? ? ? ?sheets.write(response.getOutputStream());
? ? ? ?sheets.close();
? ?} ? ?public Map<String, Object> success(Object o) {
? ? ? ?Map<String, Object> map = new HashMap<>(); ? ? ? ?if (o == null) {
? ? ? ? ? ?map.put("result", null); ? ? ? ? ? ?return map;
? ? ? ?} ? ? ? ?if (o instanceof List) { ? ? ? ? ? ?if (((List) o).size() == 1) {
? ? ? ? ? ? ? o = ?((List) o).get(0);
? ? ? ? ? ? ? ?map.put("result", o);
? ? ? ? ? ?}else { ? ? ? ? ? ? ? ?String jsonString = JSONObject.toJSONString(o); ? ? ? ? ? ? ? ?JSONArray objects = service.covertArray(JSONObject.parseArray(jsonString));
? ? ? ? ? ? ? ?map.put("result", objects);
? ? ? ? ? ?}
? ? ? ?} else if (o instanceof Integer || o instanceof String) {
? ? ? ? ? ?map.put("result", o);
? ? ? ?} else { ? ? ? ? ? ?String jsonString = JSONObject.toJSONString(o); ? ? ? ? ? ?JSONObject jsonObject = JSONObject.parseObject(jsonString); ? ? ? ? ? ?JSONObject j = service.covertObject(jsonObject);
? ? ? ? ? ?map.put("result", j);
? ? ? ?} ? ? ? ?return map;
? ?} ? ?public Map<String, Object> error(Integer code, String message) {
? ? ? ?Map<String, Object> map = new HashMap<>();
? ? ? ?map.put("error", new HashMap<String, Object>(4) {{
? ? ? ? ? ?put("code", code);
? ? ? ? ? ?put("message", message);
? ? ? ?}}); ? ? ? ?return map;
? ?}
}
系統(tǒng)抽像的頂層Service:
package com.project.demo.service.base;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import com.project.demo.constant.FindConfig;import lombok.extern.slf4j.Slf4j;import org.apache.poi.hssf.usermodel.*;import org.apache.poi.ss.usermodel.*;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.transaction.annotation.Transactional;import org.springframework.web.multipart.MultipartFile;import javax.persistence.EntityManager;import javax.persistence.PersistenceContext;import javax.persistence.Query;import javax.servlet.http.HttpServletRequest;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.UnsupportedEncodingException;import java.lang.reflect.ParameterizedType;import java.net.URLDecoder;import java.security.MessageDigest;import java.util.*;/**
*/public class BaseService <E>{ ? ?
? ?
? ?private EntityManager entityManager;
? ?Class<E> eClass = (Class<E>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0]; ? ?private final String table = humpToLine(eClass.getSimpleName()); ? ?public Query runEntitySql(String sql){ ? ? ? ?return entityManager.createNativeQuery(sql, eClass);
? ?} ? ?public Query runCountSql(String sql){ ? ? ? ?return entityManager.createNativeQuery(sql);
? ?} ? ?public void insert(Map<String,Object> body){ ? ? ? ?StringBuffer sql = new StringBuffer("INSERT INTO ");
? ? ? ?sql.append("`").append(table).append("`").append(" ("); ? ? ? ?for (Map.Entry<String,Object> entry:body.entrySet()){
? ? ? ? ? ?sql.append("`"+humpToLine(entry.getKey())+"`").append(",");
? ? ? ?}
? ? ? ?sql.deleteCharAt(sql.length()-1);
? ? ? ?sql.append(") VALUES ("); ? ? ? ?for (Map.Entry<String,Object> entry:body.entrySet()){ ? ? ? ? ? ?Object value = entry.getValue(); ? ? ? ? ? ?if (value instanceof String){
? ? ? ? ? ? ? ?sql.append("'").append(entry.getValue()).append("'").append(",");
? ? ? ? ? ?}else {
? ? ? ? ? ? ? ?sql.append(entry.getValue()).append(",");
? ? ? ? ? ?}
? ? ? ?}
? ? ? ?sql.deleteCharAt(sql.length() - 1);
? ? ? ?sql.append(")");
? ? ? ?log.info("[{}] - 插入操作:{}",table,sql); ? ? ? ?Query query = runCountSql(sql.toString());
? ? ? ?query.executeUpdate();
? ?} ? ?
? ?public void update(Map<String,String> query,Map<String,String> config,Map<String,Object> body){ ? ? ? ?StringBuffer sql = new StringBuffer("UPDATE ").append("`").append(table).append("`").append(" SET "); ? ? ? ?for (Map.Entry<String,Object> entry:body.entrySet()){ ? ? ? ? ? ?Object value = entry.getValue(); ? ? ? ? ? ?if (value instanceof String){
? ? ? ? ? ? ? ?sql.append("`"+humpToLine(entry.getKey())+"`").append("=").append("'").append(value).append("'").append(",");
? ? ? ? ? ?}else {
? ? ? ? ? ? ? ?sql.append("`"+humpToLine(entry.getKey())+"`").append("=").append(value).append(",");
? ? ? ? ? ?}
? ? ? ?}
? ? ? ?sql.deleteCharAt(sql.length()-1);
? ? ? ?sql.append(toWhereSql(query,"0".equals(config.get(FindConfig.LIKE))));// ? ? ? ?sql.append(";");
? ? ? ?log.info("[{}] - 更新操作:{}",table,sql); ? ? ? ?Query query1 = runCountSql(sql.toString());
? ? ? ?query1.executeUpdate();
? ?} ? ?public Map<String,Object> selectToPage(Map<String,String> query,Map<String,String> config){ ? ? ? ?Query select = select(query, config);
? ? ? ?Map<String,Object> map = new HashMap<>();
? ? ? ?map.put("list",select.getResultList());
? ? ? ?map.put("count",count(query,config).getSingleResult()); ? ? ? ?return map;
? ?} ? ?public Map<String,Object> selectToList(Map<String,String> query,Map<String,String> config){ ? ? ? ?Query select = selectGroupCount(query, config);
? ? ? ?Map<String,Object> map = new HashMap<>();
? ? ? ?map.put("list",select.getResultList()); ? ? ? ?return map;
? ?} ? ?public Map<String,Object> selectBarGroup(Map<String,String> query,Map<String,String> config){ ? ? ? ?Query select = barGroup(query, config);
? ? ? ?Map<String,Object> map = new HashMap<>();
? ? ? ?map.put("list",select.getResultList()); ? ? ? ?return map;
? ?} ? ?public Query barGroup(Map<String,String> query,Map<String,String> config){ ? ? ? ?StringBuffer sql = new StringBuffer(" SELECT "); ? ? ? ?if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
? ? ? ? ? ?sql.append(config.get(FindConfig.GROUP_BY)); ? ? ? ? ? ?if (config.get(FindConfig.FIELD) != null && !"".equals(config.get(FindConfig.FIELD))){
? ? ? ? ? ? ? ?String[] fieldList = config.get(FindConfig.FIELD).split(","); ? ? ? ? ? ? ? ?for (int i=0;i<fieldList.length;i++)
? ? ? ? ? ? ? ? ? ?sql.append(" ,SUM(").append(fieldList[i]).append(")");
? ? ? ? ? ?}
? ? ? ? ? ?sql.append(" FROM ").append("`").append(table).append("`");
? ? ? ? ? ?sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
? ? ? ? ? ?sql.append(" ").append("GROUP BY ").append(config.get(FindConfig.GROUP_BY));
? ? ? ?}else {
? ? ? ? ? ?sql.append(" SUM(").append(config.get(FindConfig.GROUP_BY)).append(") FROM ").append("`").append(table).append("`");
? ? ? ? ? ?sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
? ? ? ?}
? ? ? ?log.info("[{}] - 查詢操作,sql: {}",table,sql); ? ? ? ?return runCountSql(sql.toString());
? ?} ? ?public Query selectGroupCount(Map<String,String> query,Map<String,String> config){ ? ? ? ?StringBuffer sql = new StringBuffer("select COUNT(*) AS count_value, ");
? ? ? ?sql.append(config.get(FindConfig.GROUP_BY)).append(" ");
? ? ? ?sql.append("from ").append("`").append(table).append("` ");
? ? ? ?sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE)))); ? ? ? ?if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
? ? ? ? ? ?sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
? ? ? ?}
? ? ? ?log.info("[{}] - 查詢操作,sql: {}",table,sql); ? ? ? ?return runCountSql(sql.toString());
? ?} ? ?public Query select(Map<String,String> query,Map<String,String> config){ ? ? ? ?StringBuffer sql = new StringBuffer("select ");
? ? ? ?sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
? ? ? ?sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE)))); ? ? ? ?if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
? ? ? ? ? ?sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
? ? ? ?} ? ? ? ?if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
? ? ? ? ? ?sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
? ? ? ?} ? ? ? ?if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){ ? ? ? ? ? ?int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1; ? ? ? ? ? ?int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
? ? ? ? ? ?sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
? ? ? ?}
? ? ? ?log.info("[{}] - 查詢操作,sql: {}",table,sql); ? ? ? ?return runEntitySql(sql.toString());
? ?} ? ?
? ?public void delete(Map<String,String> query,Map<String,String> config){ ? ? ? ?StringBuffer sql = new StringBuffer("DELETE FROM ").append("`").append(table).append("`").append(" ");
? ? ? ?sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.GROUP_BY))));
? ? ? ?log.info("[{}] - 刪除操作:{}",table,sql); ? ? ? ?Query query1 = runCountSql(sql.toString());
? ? ? ?query1.executeUpdate();
? ?} ? ?public Query count(Map<String,String> query,Map<String,String> config){ ? ? ? ?StringBuffer sql = new StringBuffer("SELECT ");// ? ? ? ?log.info("拼接統(tǒng)計函數(shù)前");
? ? ? ?if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
? ? ? ? ? ?sql.append(config.get(FindConfig.GROUP_BY)).append(" ,COUNT(").append(config.get(FindConfig.GROUP_BY)).append(") FROM ").append("`").append(table).append("`");
? ? ? ? ? ?sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));// ? ? ? ? ? ?sql.append(" ").append("GROUP BY ").append(config.get(FindConfig.GROUP_BY));
? ? ? ?}else {
? ? ? ? ? ?sql.append("COUNT(*) FROM ").append("`").append(table).append("`");
? ? ? ? ? ?sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
? ? ? ?}
? ? ? ?log.info("[{}] - 統(tǒng)計操作,sql: {}",table,sql); ? ? ? ?return runCountSql(sql.toString());
? ?} ? ?public Query sum(Map<String,String> query,Map<String,String> config){ ? ? ? ?StringBuffer sql = new StringBuffer(" SELECT "); ? ? ? ?if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
? ? ? ? ? ?sql.append(config.get(FindConfig.GROUP_BY)).append(" ,SUM(").append(config.get(FindConfig.FIELD)).append(") FROM ").append("`").append(table).append("`");
? ? ? ? ? ?sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
? ? ? ? ? ?sql.append(" ").append("GROUP BY ").append(config.get(FindConfig.GROUP_BY));
? ? ? ?}else {
? ? ? ? ? ?sql.append(" SUM(").append(config.get(FindConfig.FIELD)).append(") FROM ").append("`").append(table).append("`");
? ? ? ? ? ?sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
? ? ? ?}
? ? ? ?log.info("[{}] - 查詢操作,sql: {}",table,sql); ? ? ? ?return runCountSql(sql.toString());
? ?} ? ?public Query avg(Map<String,String> query,Map<String,String> config){ ? ? ? ?StringBuffer sql = new StringBuffer(" SELECT "); ? ? ? ?if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
? ? ? ? ? ?sql.append(config.get(FindConfig.GROUP_BY)).append(" ,AVG(").append(config.get(FindConfig.FIELD)).append(") FROM ").append("`").append(table).append("`");
? ? ? ? ? ?sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
? ? ? ? ? ?sql.append(" ").append("GROUP BY ").append(config.get(FindConfig.GROUP_BY));
? ? ? ?}else {
? ? ? ? ? ?sql.append(" AVG(").append(config.get(FindConfig.FIELD)).append(") FROM ").append("`").append(table).append("`");
? ? ? ? ? ?sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
? ? ? ?}
? ? ? ?log.info("[{}] - 查詢操作,sql: {}",table,sql); ? ? ? ?return runCountSql(sql.toString());
? ?} ? ?public String toWhereSql(Map<String,String> query, Boolean like) { ? ? ? ?if (query.size() > 0) { ? ? ? ? ? ?try { ? ? ? ? ? ? ? ?StringBuilder sql = new StringBuilder(" WHERE "); ? ? ? ? ? ? ? ?for (Map.Entry<String, String> entry : query.entrySet()) { ? ? ? ? ? ? ? ? ? ?if (entry.getKey().contains(FindConfig.MIN_)) { ? ? ? ? ? ? ? ? ? ? ? ?String min = humpToLine(entry.getKey()).replace("_min", "");
? ? ? ? ? ? ? ? ? ? ? ?sql.append("`"+min+"`").append(" >= '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("' and "); ? ? ? ? ? ? ? ? ? ? ? ?continue;
? ? ? ? ? ? ? ? ? ?} ? ? ? ? ? ? ? ? ? ?if (entry.getKey().contains(FindConfig.MAX_)) { ? ? ? ? ? ? ? ? ? ? ? ?String max = humpToLine(entry.getKey()).replace("_max", "");
? ? ? ? ? ? ? ? ? ? ? ?sql.append("`"+max+"`").append(" <= '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("' and "); ? ? ? ? ? ? ? ? ? ? ? ?continue;
? ? ? ? ? ? ? ? ? ?} ? ? ? ? ? ? ? ? ? ?if (like == true) {
? ? ? ? ? ? ? ? ? ? ? ?sql.append("`"+humpToLine(entry.getKey())+"`").append(" LIKE '%").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("%'").append(" and ");
? ? ? ? ? ? ? ? ? ?} else {
? ? ? ? ? ? ? ? ? ? ? ?sql.append("`"+humpToLine(entry.getKey())+"`").append(" = '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("'").append(" and ");
? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ?sql.delete(sql.length() - 4, sql.length());
? ? ? ? ? ? ? ?sql.append(" "); ? ? ? ? ? ? ? ?return sql.toString();
? ? ? ? ? ?} catch (UnsupportedEncodingException e) {
? ? ? ? ? ? ? ?log.info("拼接sql 失?。簕}", e.getMessage());
? ? ? ? ? ?}
? ? ? ?} ? ? ? ?return "";
? ?} ? ?public Map<String,Object> readBody(BufferedReader reader){ ? ? ? ?BufferedReader br = null; ? ? ? ?StringBuilder sb = new StringBuilder(""); ? ? ? ?try{
? ? ? ? ? ?br = reader;
? ? ? ? ? ?String str; ? ? ? ? ? ?while ((str = br.readLine()) != null){
? ? ? ? ? ? ? ?sb.append(str);
? ? ? ? ? ?}
? ? ? ? ? ?br.close(); ? ? ? ? ? ?String json = sb.toString(); ? ? ? ? ? ?return JSONObject.parseObject(json, Map.class);
? ? ? ?}catch (IOException e){
? ? ? ? ? ?e.printStackTrace();
? ? ? ?}finally{ ? ? ? ? ? ?if (null != br){ ? ? ? ? ? ? ? ?try{
? ? ? ? ? ? ? ? ? ?br.close();
? ? ? ? ? ? ? ?}catch (IOException e){
? ? ? ? ? ? ? ? ? ?e.printStackTrace();
? ? ? ? ? ? ? ?}
? ? ? ? ? ?}
? ? ? ?} ? ? ? ?return null;
? ?} ? ?public Map<String,String> readQuery(HttpServletRequest request){ ? ? ? ?String queryString = request.getQueryString(); ? ? ? ?if (queryString != null && !"".equals(queryString)) {
? ? ? ? ? ?String[] querys = queryString.split("&");
? ? ? ? ? ?Map<String, String> map = new HashMap<>(); ? ? ? ? ? ?for (String query : querys) {
? ? ? ? ? ? ? ?String[] q = query.split("=");
? ? ? ? ? ? ? ?map.put(q[0], q[1]);
? ? ? ? ? ?}
? ? ? ? ? ?map.remove(FindConfig.PAGE);
? ? ? ? ? ?map.remove(FindConfig.SIZE);
? ? ? ? ? ?map.remove(FindConfig.LIKE);
? ? ? ? ? ?map.remove(FindConfig.ORDER_BY);
? ? ? ? ? ?map.remove(FindConfig.FIELD);
? ? ? ? ? ?map.remove(FindConfig.GROUP_BY);
? ? ? ? ? ?map.remove(FindConfig.MAX_);
? ? ? ? ? ?map.remove(FindConfig.MIN_); ? ? ? ? ? ?return map;
? ? ? ?}else { ? ? ? ? ? ?return new HashMap<>();
? ? ? ?}
? ?} ? ?public Map<String,String> readConfig(HttpServletRequest request){
? ? ? ?Map<String,String> map = new HashMap<>();
? ? ? ?map.put(FindConfig.PAGE,request.getParameter(FindConfig.PAGE));
? ? ? ?map.put(FindConfig.SIZE,request.getParameter(FindConfig.SIZE));
? ? ? ?map.put(FindConfig.LIKE,request.getParameter(FindConfig.LIKE));
? ? ? ?map.put(FindConfig.ORDER_BY,request.getParameter(FindConfig.ORDER_BY));
? ? ? ?map.put(FindConfig.FIELD,request.getParameter(FindConfig.FIELD));
? ? ? ?map.put(FindConfig.GROUP_BY,request.getParameter(FindConfig.GROUP_BY));
? ? ? ?map.put(FindConfig.MAX_,request.getParameter(FindConfig.MAX_));
? ? ? ?map.put(FindConfig.MIN_,request.getParameter(FindConfig.MIN_)); ? ? ? ?return map;
? ?} ? ?public void importDb(MultipartFile file) throws IOException { ? ? ? ?if (file.isEmpty()) { ? ? ? ? ? ?return;
? ? ? ?}
? ? ? ?List<Map<String,String>> body = new ArrayList<>(); ? ? ? ?String fileName = file.getOriginalFilename(); ? ? ? ?if (fileName == null){ ? ? ? ? ? ?return;
? ? ? ?} ? ? ? ?String suffix = fileName.substring(fileName.lastIndexOf(".")+1); ? ? ? ?InputStream ins = file.getInputStream(); ? ? ? ?Workbook wb = null; ? ? ? ?if(suffix.equals("xlsx")){
? ? ? ? ? ?wb = new XSSFWorkbook(ins);
? ? ? ?}else{
? ? ? ? ? ?wb = new HSSFWorkbook(ins);
? ? ? ?} ? ? ? ?Sheet sheet = wb.getSheetAt(0); ? ? ? ?if(null != sheet){ ? ? ? ? ? ?for(int line = 0; line <= sheet.getLastRowNum();line++){ ? ? ? ? ? ? ? ?Row row = sheet.getRow(line); ? ? ? ? ? ? ? ?if(null == row){ ? ? ? ? ? ? ? ? ? ?continue;
? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ?Iterator<Cell> cellIterator = row.cellIterator(); ? ? ? ? ? ? ? ?StringBuffer sql = new StringBuffer("INSERT INTO ").append(table).append(" VALUES (null,"); ? ? ? ? ? ? ? ?while (cellIterator.hasNext()){
? ? ? ? ? ? ? ? ? ?sql.append(cellIterator.next().getStringCellValue()).append(",");
? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ?sql.deleteCharAt(sql.length());
? ? ? ? ? ? ? ?sql.append(")");
? ? ? ? ? ? ? ?runCountSql(sql.toString());
? ? ? ? ? ?}
? ? ? ?}
? ?} ? ?public HSSFWorkbook exportDb(Map<String,String> query,Map<String,String> config){ ? ? ? ?Query select = select(query, config);
? ? ? ?List<Map<String,String>> resultList = select.getResultList(); ? ? ? ?HSSFWorkbook workbook = new HSSFWorkbook(); ? ? ? ?HSSFSheet sheet = workbook.createSheet(table); ? ? ? ?HSSFCellStyle headerStyle = workbook.createCellStyle();
? ? ? ?headerStyle.setFillForegroundColor(IndexedColors.YELLOW.index);
? ? ? ?headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); ? ? ? ?for (int i = 0; i < resultList.size(); i++) { ? ? ? ? ? ?HSSFRow row = sheet.createRow(i);
? ? ? ? ? ?Map<String,String> map = resultList.get(i); ? ? ? ? ? ?int j = 0; ? ? ? ? ? ?for (Map.Entry<String,String> entry:map.entrySet()){
? ? ? ? ? ? ? ?row.createCell(j).setCellValue(new HSSFRichTextString(entry.getValue()));
? ? ? ? ? ?}
? ? ? ?} ? ? ? ?return workbook;
? ?} ? ?
? ?public void save(E e){ ? ? ? ?String s = JSONObject.toJSONString(e); ? ? ? ?Map map = JSONObject.parseObject(s, Map.class);
? ? ? ?insert(map);
? ?} ? ?public E findOne(Map<String, String> map){ ? ? ? ?try { ? ? ? ? ? ?Query select = select(map, new HashMap<>()); ? ? ? ? ? ?return (E) select.getSingleResult();
? ? ? ?}catch (Exception e){ ? ? ? ? ? ?return null;
? ? ? ?}
? ?} ? ?public String encryption(String plainText) { ? ? ? ?String re_md5 = new String(); ? ? ? ?try { ? ? ? ? ? ?MessageDigest md = MessageDigest.getInstance("MD5");
? ? ? ? ? ?md.update(plainText.getBytes()); ? ? ? ? ? ?byte b[] = md.digest(); ? ? ? ? ? ?int i; ? ? ? ? ? ?StringBuffer buf = new StringBuffer(""); ? ? ? ? ? ?for (int offset = 0; offset < b.length; offset++) {
? ? ? ? ? ? ? ?i = b[offset]; ? ? ? ? ? ? ? ?if (i < 0)
? ? ? ? ? ? ? ? ? ?i += 256; ? ? ? ? ? ? ? ?if (i < 16)
? ? ? ? ? ? ? ? ? ?buf.append("0");
? ? ? ? ? ? ? ?buf.append(Integer.toHexString(i));
? ? ? ? ? ?}
? ? ? ? ? ?re_md5 = buf.toString();
? ? ? ?} catch (Exception e) {
? ? ? ? ? ?e.printStackTrace();
? ? ? ?} ? ? ? ?return re_md5;
? ?} ? ?public static String humpToLine(String str) { ? ? ? ?if (str == null) { ? ? ? ? ? ?return null;
? ? ? ?} ? ? ? ?// 將駝峰字符串轉(zhuǎn)換成數(shù)組
? ? ? ?char[] charArray = str.toCharArray(); ? ? ? ?StringBuilder buffer = new StringBuilder(); ? ? ? ?//處理字符串
? ? ? ?for (int i = 0, l = charArray.length; i < l; i++) { ? ? ? ? ? ?if (charArray[i] >= 65 && charArray[i] <= 90) {
? ? ? ? ? ? ? ?buffer.append("_").append(charArray[i] += 32);
? ? ? ? ? ?} else {
? ? ? ? ? ? ? ?buffer.append(charArray[i]);
? ? ? ? ? ?}
? ? ? ?} ? ? ? ?String s = buffer.toString(); ? ? ? ?if (s.startsWith("_")){ ? ? ? ? ? ?return s.substring(1);
? ? ? ?}else { ? ? ? ? ? ?return s;
? ? ? ?}
? ?} ? ?public JSONObject covertObject(JSONObject object) { ? ? ? ?if (object == null) { ? ? ? ? ? ?return null;
? ? ? ?} ? ? ? ?JSONObject newObject = new JSONObject();
? ? ? ?Set<String> set = object.keySet(); ? ? ? ?for (String key : set) { ? ? ? ? ? ?Object value = object.get(key); ? ? ? ? ? ?if (value instanceof JSONArray) { ? ? ? ? ? ? ? ?//數(shù)組
? ? ? ? ? ? ? ?value = covertArray(object.getJSONArray(key));
? ? ? ? ? ?} else if (value instanceof JSONObject) { ? ? ? ? ? ? ? ?//對象
? ? ? ? ? ? ? ?value = covertObject(object.getJSONObject(key));
? ? ? ? ? ?} ? ? ? ? ? ?//這個方法自己寫的改成下劃線
? ? ? ? ? ?key = humpToLine(key);
? ? ? ? ? ?newObject.put(key, value);
? ? ? ?} ? ? ? ?return newObject;
? ?} ? ?public JSONArray covertArray(JSONArray array) { ? ? ? ?if (array == null) { ? ? ? ? ? ?return null;
? ? ? ?} ? ? ? ?JSONArray newArray = new JSONArray(); ? ? ? ?for (int i = 0; i < array.size(); i++) { ? ? ? ? ? ?Object value = array.get(i); ? ? ? ? ? ?if (value instanceof JSONArray) { ? ? ? ? ? ? ? ?//數(shù)組
? ? ? ? ? ? ? ?value = covertArray(array.getJSONArray(i));
? ? ? ? ? ?} else if (value instanceof JSONObject) { ? ? ? ? ? ? ? ?//對象
? ? ? ? ? ? ? ?value = covertObject(array.getJSONObject(i));
? ? ? ? ? ?}
? ? ? ? ? ?newArray.add(value);
? ? ? ?} ? ? ? ?return newArray;
? ?}
}
五,項(xiàng)目總結(jié)
隨著社會的快速發(fā)展,計算機(jī)的影響是全面且深入的。人們生活水平的不斷提高,日常生活中人們兒童疫苗預(yù)約信息管理方面的要求也在不斷提高,需要兒童疫苗預(yù)約的人數(shù)更是不斷增加,使得兒童疫苗預(yù)約管理的開發(fā)成為必需而且緊迫的事情。兒童疫苗預(yù)約管理主要是借助計算機(jī),通過對兒童疫苗預(yù)約管理所需的信息管理,增加用戶選擇,同時也方便對廣大用戶信息的及時查詢、修改以及對用戶信息的及時了解。兒童疫苗預(yù)約管理對用戶帶來了更多的便利, 該系統(tǒng)通過和數(shù)據(jù)庫管理系統(tǒng)軟件協(xié)作來滿足用戶的需求。