基於Java+SpringBoot+vue+element實現扶貧助農政策平臺系統

語言: CN / TW / HK

theme: github highlight: a11y-dark


前言介紹:

隨著社會的快速發展,計算機的影響是全面且深入的。人們生活水平的不斷提高,日常生活中人們對扶農助農政策管理方面的要求也在不斷提高,扶農助農政策管理的數量更是不斷增加,使得扶農助農政策管理系統的開發成為必需而且緊迫的事情。扶農助農政策管理系統主要是藉助計算機,通過對扶農助農政策管理系統所需的資訊管理,增加使用者選擇,同時也方便對廣大使用者資訊的及時查詢、修改以及對貧困戶的及時瞭解。扶農助農政策管理系統對使用者帶來了更多的便利, 該系統通過和資料庫管理系統軟體協作來滿足使用者的需求。

功能設計:

系統業務流程圖,如圖所示:

系統架構圖屬於系統設計階段,系統架構圖只是這個階段一個產物,系統的總體架構決定了整個系統的模式,是系統的基礎。扶農助農政策管理系統的整體結構設計如圖所示

功能截圖:

系統首頁: 在系統的首頁可以檢視首頁、貧困戶、扶貧政策、志願者招聘、留言反饋、個人中心、後臺管理等資訊進行詳細操作

登入註冊: 通過輸入使用者名稱、密碼進行登陸或註冊資訊

貧困戶資訊:

在貧困戶頁面中可以檢視編號、家庭成員、成員人數、家庭住址、家庭狀況、封面、人均收入、賬號、姓名、詳細介紹等資訊

扶農政策資訊:

志願者招聘:

在志願者招聘頁面中可以檢視招聘標題、職位、工資待遇、工作地點、工作時間、招聘人數、招聘時間、截止時間、負責人、聯絡方式、圖片、釋出日期等資訊,並進行收藏操作 

留言反饋: 在留言反饋頁面輸入留言內容並立即提交或重置操作

個人中心: 在個人中心頁面通過填寫賬號、密碼、姓名、年齡、性別、手機、郵箱、上傳圖片等資訊進行個人資訊修改,還可對我的收藏進行詳細操作

後臺管理端:

使用者管理: 在使用者管理頁面中可以對索引、賬號、姓名、年齡、性別、手機、郵箱、照片等資訊進行詳情或刪除等操作

貧困戶管理: 在貧困戶管理頁面中可以對索引、編號、家庭成員、成員人數、家庭住址、封面、人均收入、賬號、姓名、稽核回覆、稽核狀態、稽核等資訊進行詳情或刪除等操作

扶農政策資訊: 在扶貧政策管理頁面中可以對索引、標題、扶貧型別、釋出時間、封面等資訊進行詳情,修改或刪除等操作

志願者招聘: 在志願者招聘管理頁面中可以對索引、招聘標題、職位、工資待遇、工作地點、工作時間、招聘人數、招聘時間、截止時間、負責人、聯絡方式、圖片、釋出日期等資訊進行詳情,修改或刪除等操作

志願者應聘: 使用者應聘管理,在使用者應聘管理頁面中可以對索引、招聘標題、職位、是否應聘、應聘時間、賬號、姓名、手機、稽核回覆、稽核狀態、稽核等資訊進行詳情或刪除等操作

留言板管理: 在留言板管理頁面中可以對索引、使用者名稱、留言內容、回覆內容等資訊進行詳情,回覆,修改或刪除等操作

輪播圖管理: 在輪播圖管理頁面中可以對索引、名稱、值等資訊進行詳情,修改等操作

程式碼實現:

```java

/* * 熱門新聞 * 後端介面 * @author * @email * @date 2022-03-07 09:32:05 / @RestController @RequestMapping("/remenxinwen") public class RemenxinwenController { @Autowired private RemenxinwenService remenxinwenService;

/**
 * 後端列表
 */
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,RemenxinwenEntity remenxinwen,
    HttpServletRequest request){
    EntityWrapper<RemenxinwenEntity> ew = new EntityWrapper<RemenxinwenEntity>();
    PageUtils page = remenxinwenService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, remenxinwen), params), params));

    return R.ok().put("data", page);
}

/**
 * 前端列表
 */
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,RemenxinwenEntity remenxinwen, 
    HttpServletRequest request){
    EntityWrapper<RemenxinwenEntity> ew = new EntityWrapper<RemenxinwenEntity>();
    PageUtils page = remenxinwenService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, remenxinwen), params), params));
    return R.ok().put("data", page);
}

/**
 * 列表
 */
@RequestMapping("/lists")
public R list( RemenxinwenEntity remenxinwen){
    EntityWrapper<RemenxinwenEntity> ew = new EntityWrapper<RemenxinwenEntity>();
    ew.allEq(MPUtil.allEQMapPre( remenxinwen, "remenxinwen")); 
    return R.ok().put("data", remenxinwenService.selectListView(ew));
}

 /**
 * 查詢
 */
@RequestMapping("/query")
public R query(RemenxinwenEntity remenxinwen){
    EntityWrapper< RemenxinwenEntity> ew = new EntityWrapper< RemenxinwenEntity>();
    ew.allEq(MPUtil.allEQMapPre( remenxinwen, "remenxinwen")); 
    RemenxinwenView remenxinwenView =  remenxinwenService.selectView(ew);
    return R.ok("查詢熱門新聞成功").put("data", remenxinwenView);
}

/**
 * 後端詳情
 */
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
    RemenxinwenEntity remenxinwen = remenxinwenService.selectById(id);
    remenxinwen.setClicknum(remenxinwen.getClicknum()+1);
    remenxinwen.setClicktime(new Date());
    remenxinwenService.updateById(remenxinwen);
    return R.ok().put("data", remenxinwen);
}

/**
 * 前端詳情
 */
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
    RemenxinwenEntity remenxinwen = remenxinwenService.selectById(id);
    remenxinwen.setClicknum(remenxinwen.getClicknum()+1);
    remenxinwen.setClicktime(new Date());
    remenxinwenService.updateById(remenxinwen);
    return R.ok().put("data", remenxinwen);
}




/**
 * 後端儲存
 */
@RequestMapping("/save")
public R save(@RequestBody RemenxinwenEntity remenxinwen, HttpServletRequest request){
    remenxinwen.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    //ValidatorUtils.validateEntity(remenxinwen);
    remenxinwenService.insert(remenxinwen);
    return R.ok();
}

/**
 * 前端儲存
 */
@RequestMapping("/add")
public R add(@RequestBody RemenxinwenEntity remenxinwen, HttpServletRequest request){
    remenxinwen.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    //ValidatorUtils.validateEntity(remenxinwen);
    remenxinwenService.insert(remenxinwen);
    return R.ok();
}

/**
 * 修改
 */
@RequestMapping("/update")
public R update(@RequestBody RemenxinwenEntity remenxinwen, HttpServletRequest request){
    //ValidatorUtils.validateEntity(remenxinwen);
    remenxinwenService.updateById(remenxinwen);//全部更新
    return R.ok();
}


/**
 * 刪除
 */
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
    remenxinwenService.deleteBatchIds(Arrays.asList(ids));
    return R.ok();
}

/**
 * 提醒介面
 */
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
                     @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
    map.put("column", columnName);
    map.put("type", type);

    if(type.equals("2")) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar c = Calendar.getInstance();
        Date remindStartDate = null;
        Date remindEndDate = null;
        if(map.get("remindstart")!=null) {
            Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
            c.setTime(new Date()); 
            c.add(Calendar.DAY_OF_MONTH,remindStart);
            remindStartDate = c.getTime();
            map.put("remindstart", sdf.format(remindStartDate));
        }
        if(map.get("remindend")!=null) {
            Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
            c.setTime(new Date());
            c.add(Calendar.DAY_OF_MONTH,remindEnd);
            remindEndDate = c.getTime();
            map.put("remindend", sdf.format(remindEndDate));
        }
    }

    Wrapper<RemenxinwenEntity> wrapper = new EntityWrapper<RemenxinwenEntity>();
    if(map.get("remindstart")!=null) {
        wrapper.ge(columnName, map.get("remindstart"));
    }
    if(map.get("remindend")!=null) {
        wrapper.le(columnName, map.get("remindend"));
    }


    int count = remenxinwenService.selectCount(wrapper);
    return R.ok().put("count", count);
}

/**
 * 前端智慧排序
 */
@IgnoreAuth
@RequestMapping("/autoSort")
public R autoSort(@RequestParam Map<String, Object> params,RemenxinwenEntity remenxinwen, HttpServletRequest request,String pre){
    EntityWrapper<RemenxinwenEntity> ew = new EntityWrapper<RemenxinwenEntity>();
    Map<String, Object> newMap = new HashMap<String, Object>();
    Map<String, Object> param = new HashMap<String, Object>();
    Iterator<Map.Entry<String, Object>> it = param.entrySet().iterator();
    while (it.hasNext()) {
        Map.Entry<String, Object> entry = it.next();
        String key = entry.getKey();
        String newKey = entry.getKey();
        if (pre.endsWith(".")) {
            newMap.put(pre + newKey, entry.getValue());
        } else if (StringUtils.isEmpty(pre)) {
            newMap.put(newKey, entry.getValue());
        } else {
            newMap.put(pre + "." + newKey, entry.getValue());
        }
    }
    params.put("sort", "clicknum");
    params.put("order", "desc");
    PageUtils page = remenxinwenService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, remenxinwen), params), params));
    return R.ok().put("data", page);
}

} ```

資料庫設計:

將資料庫概念設計的E-R圖轉換為關係資料庫。在關係資料庫中,資料關係由資料表組成,但是表的結構表現在表的欄位上。資料庫欄位名稱為方便快捷編寫、不推薦這種寫法、請參考資料庫表字段設計規範編寫

表4-1:收藏表

| | | | | | --------- | --------- | --- | ------------------ | | 欄位名稱 | 型別 | 長度 | 欄位說明 | | id | bigint | | 主鍵 | | addtime | timestamp | | 建立時間 | | userid | bigint | | 使用者id | | refid | bigint | | 收藏id | | tablename | varchar | 200 | 表名 | | name | varchar | 200 | 收藏名稱 | | picture | varchar | 200 | 收藏圖片 | | type | varchar | 200 | 型別(1:收藏,21:贊,22:踩) | | inteltype | varchar | 200 | 推薦型別 |

表4-2:扶貧政策

| | | | | | ------------- | --------- | ---------- | ------ | | 欄位名稱 | 型別 | 長度 | 欄位說明 | | id | bigint | | 主鍵 | | addtime | timestamp | | 建立時間 | | biaoti | varchar | 200 | 標題 | | xinwenleixing | varchar | 200 | 扶貧型別 | | neirong | longtext | 4294967295 | 內容 | | fabushijian | date | | 釋出時間 | | fengmian | varchar | 200 | 封面 | | clicktime | datetime | | 最近點選時間 | | clicknum | int | | 點選次數 |

表4-3:貧困戶

| | | | | | ------------------ | --------- | ---------- | ------ | | 欄位名稱 | 型別 | 長度 | 欄位說明 | | id | bigint | | 主鍵 | | addtime | timestamp | | 建立時間 | | bianhao | varchar | 200 | 編號 | | jiatingchengyuan | varchar | 200 | 家庭成員 | | chengyuanrenshu | int | | 成員人數 | | jiatingzhuzhi | varchar | 200 | 家庭住址 | | jiatingzhuangkuang | longtext | 4294967295 | 家庭狀況 | | fengmian | varchar | 200 | 封面 | | renjunshouru | int | | 人均收入 | | xiangxijieshao | longtext | 4294967295 | 詳細介紹 | | zhanghao | varchar | 200 | 賬號 | | xingming | varchar | 200 | 姓名 | | sfsh | varchar | 200 | 是否稽核 | | shhf | longtext | 4294967295 | 稽核回覆 | | clicktime | datetime | | 最近點選時間 | | clicknum | int | | 點選次數 |

表4-4:留言板

| | | | | | -------- | --------- | ---------- | ----- | | 欄位名稱 | 型別 | 長度 | 欄位說明 | | id | bigint | | 主鍵 | | addtime | timestamp | | 建立時間 | | userid | bigint | | 留言人id | | username | varchar | 200 | 使用者名稱 | | content | longtext | 4294967295 | 留言內容 | | cpicture | varchar | 200 | 留言圖片 | | reply | longtext | 4294967295 | 回覆內容 | | rpicture | varchar | 200 | 回覆圖片 |

表4-6:志願者招聘

| | | | | | -------------- | --------- | ---------- | ------ | | 欄位名稱 | 型別 | 長度 | 欄位說明 | | id | bigint | | 主鍵 | | addtime | timestamp | | 建立時間 | | zhaopinbiaoti | varchar | 200 | 招聘標題 | | zhiwei | varchar | 200 | 職位 | | zhaopinyaoqiu | longtext | 4294967295 | 招聘要求 | | gongzidaiyu | varchar | 200 | 工資待遇 | | gongzuodidian | varchar | 200 | 工作地點 | | gongzuoshijian | varchar | 200 | 工作時間 | | zhaopinrenshu | int | | 招聘人數 | | zhaopinshijian | date | | 招聘時間 | | jiezhishijian | date | | 截止時間 | | fuzeren | varchar | 200 | 負責人 | | lianxifangshi | varchar | 200 | 聯絡方式 | | tupian | varchar | 200 | 圖片 | | faburiqi | date | | 釋出日期 | | clicktime | datetime | | 最近點選時間 | | clicknum | int | | 點選次數 |

表4-7:使用者應聘

| | | | | | -------------- | --------- | ---------- | ---- | | 欄位名稱 | 型別 | 長度 | 欄位說明 | | id | bigint | | 主鍵 | | addtime | timestamp | | 建立時間 | | zhaopinbiaoti | varchar | 200 | 招聘標題 | | zhiwei | varchar | 200 | 職位 | | shifouyingpin | varchar | 200 | 是否應聘 | | yingpinyuanyin | longtext | 4294967295 | 應聘原因 | | yingpinshijian | date | | 應聘時間 | | zhanghao | varchar | 200 | 賬號 | | xingming | varchar | 200 | 姓名 | | shouji | varchar | 200 | 手機 | | sfsh | varchar | 200 | 是否稽核 | | shhf | longtext | 4294967295 | 稽核回覆 |

表4-8:使用者

| | | | | | -------- | --------- | --- | ---- | | 欄位名稱 | 型別 | 長度 | 欄位說明 | | id | bigint | | 主鍵 | | addtime | timestamp | | 建立時間 | | zhanghao | varchar | 200 | 賬號 | | mima | varchar | 200 | 密碼 | | xingming | varchar | 200 | 姓名 | | nianling | varchar | 200 | 年齡 | | xingbie | varchar | 200 | 性別 | | shouji | varchar | 200 | 手機 | | youxiang | varchar | 200 | 郵箱 | | zhaopian | varchar | 200 | 照片 |

論文參考:

「其他文章」