著者ホームページ:プログラミング コンパス
著者について: Java 分野の高品質クリエイター、CSDN ブログ エキスパート、CSDN コンテンツ パートナー、Nuggets ゲスト著者、Alibaba Cloud ブログ エキスパート、51CTO ゲスト著者、長年のアーキテクト設計経験、Tencent 教室常駐講師
主な内容:Javaプロジェクト、Pythonプロジェクト、フロントエンドプロジェクト、人工知能とビッグデータ、履歴書テンプレート、学習教材、面接質問バンク、技術相互支援
集めて、いいねして、迷わないように、作者をフォローすると良いです。
記事の最後にあるソースコードを入手してください
プロジェクト番号:BS-XX-192
1. 環境の紹介
ロケール: Java: jdk1.8
データベース: MySQL: mysql5.7
アプリケーションサーバー: Tomcat: tomcat8.5.31
開発ツール: IDEA または eclipse
開発技術:Springboot+Vue+HTML
2. プロジェクトの紹介
科学技術の急速な更新と発展はコンピュータ技術の進歩を効果的に促進し、それによって社会におけるコンピュータ技術の推進と応用のための強固な基盤を築きました。コンピュータの出現は、社会のあらゆる階層の進歩と発展を促進し、人類の歴史文明と文化の普及に効果的な道を提供し、人類の発展が多大な富を生み出すのに役立ちました。科学技術は社会発展における主要な生産力であるため、科学技術の発展はコンピュータ技術の応用と促進から構成されます。近年、コンピュータ技術の発展により、その応用分野は当初の軍事や科学研究の分野から、人々の生産や生活のあらゆる側面へと徐々に広がっています。今日、人類社会は工業化から高度情報化へと発展し、コンピュータ技術が人々に与える影響も日々増大しています。
情報化時代の到来により、管理システムはインテリジェントで体系的なものになる傾向があり、防疫資材管理システムも例外ではありませんが、中国では依然として手動管理が使用されており、市場規模はますます大きくなり、その量は増加しています。情報量も増大しており、その量は膨大であり、手作業による管理では時代の変化に対応できないのは明らかです。コンピュータには、最も一般的なストレージ機能、コンピューティングおよび制御機能、入出力機能があります。これらの機能は、効率を迅速に向上させ、時間を節約し、コンピューティング コストと人件費を継続的に削減することができると同時に、手動操作よりも科学的、標準化され、正確です。したがって、防疫資材管理システムはこの問題をうまく解決し、防疫資材管理の日常業務を簡単に処理でき、人的、物的、財政的資源を向上させるだけでなく、作業効率をスピードアップすることもでき、必然的な傾向です。手動管理を置き換えます。
防疫資材管理システムは、フレームワークとして SpringBoot を使用し、バックグラウンドで実行されるデータベースとして B/S モードと MySql を使用し、システム サーバーとして Tomcat を使用します。このシステムには主に、ホームページ、パーソナルセンター、ユーザー管理、素材管理、素材タイプ管理、素材リース、オンラインコミュニケーション管理、コミュニティ告知管理、ニュース情報管理、レンタルリスト管理、アウトサイダーレポートなどの機能が含まれています。これらの機能は基本的に防疫資材管理の日常業務を満たすことができます。
この記事は、防疫資材管理システムの分析、設計、実装に焦点を当てており、最初に開発システムと環境構成、データベースの設計を紹介し、次に機能モジュールの詳細な実装について説明し、最後にまとめを行います。 。
一般的なユーザーの使用例
管理者
スーパー管理者
3. システム表示
ユーザー登録
ログイン
システムのホームページ
有形財
ショッピングカート
お知らせ管理
バックステージマネジメント
他のインターフェースを簡単に示します
4.コアコード表示
package com.example.controller;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.example.common.Result;
import com.example.common.ResultCode;
import com.example.entity.AdminInfo;
import com.example.service.AdminInfoService;
import com.example.exception.CustomException;
import com.example.common.ResultCode;
import com.example.vo.AdminInfoVo;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.example.service.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Value;
import cn.hutool.core.util.StrUtil;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@RestController
@RequestMapping(value = "/adminInfo")
public class AdminInfoController {
@Resource
private AdminInfoService adminInfoService;
@PostMapping
public Result<AdminInfo> add(@RequestBody AdminInfoVo adminInfo) {
adminInfoService.add(adminInfo);
return Result.success(adminInfo);
}
@DeleteMapping("/{id}")
public Result delete(@PathVariable Long id) {
adminInfoService.delete(id);
return Result.success();
}
@PutMapping
public Result update(@RequestBody AdminInfoVo adminInfo) {
adminInfoService.update(adminInfo);
return Result.success();
}
@GetMapping("/{id}")
public Result<AdminInfo> detail(@PathVariable Long id) {
AdminInfo adminInfo = adminInfoService.findById(id);
return Result.success(adminInfo);
}
@GetMapping
public Result<List<AdminInfoVo>> all() {
return Result.success(adminInfoService.findAll());
}
@GetMapping("/page/{name}")
public Result<PageInfo<AdminInfoVo>> page(@PathVariable String name,
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "5") Integer pageSize,
HttpServletRequest request) {
return Result.success(adminInfoService.findPage(name, pageNum, pageSize, request));
}
@PostMapping("/register")
public Result<AdminInfo> register(@RequestBody AdminInfo adminInfo) {
if (StrUtil.isBlank(adminInfo.getName()) || StrUtil.isBlank(adminInfo.getPassword())) {
throw new CustomException(ResultCode.PARAM_ERROR);
}
return Result.success(adminInfoService.add(adminInfo));
}
/**
* 批量通过excel添加信息
* @param file excel文件
* @throws IOException
*/
@PostMapping("/upload")
public Result upload(MultipartFile file) throws IOException {
List<AdminInfo> infoList = ExcelUtil.getReader(file.getInputStream()).readAll(AdminInfo.class);
if (!CollectionUtil.isEmpty(infoList)) {
// 处理一下空数据
List<AdminInfo> resultList = infoList.stream().filter(x -> ObjectUtil.isNotEmpty(x.getName())).collect(Collectors.toList());
for (AdminInfo info : resultList) {
adminInfoService.add(info);
}
}
return Result.success();
}
@GetMapping("/getExcelModel")
public void getExcelModel(HttpServletResponse response) throws IOException {
// 1. 生成excel
Map<String, Object> row = new LinkedHashMap<>();
row.put("name", "admin");
row.put("password", "123456");
row.put("nickName", "管理员");
row.put("sex", "男");
row.put("age", 22);
row.put("birthday", "TIME");
row.put("phone", "18843232356");
row.put("address", "上海市");
row.put("code", "111");
row.put("email", "[email protected]");
row.put("cardId", "342425199001116372");
row.put("level", 1);
List<Map<String, Object>> list = CollUtil.newArrayList(row);
// 2. 写excel
ExcelWriter writer = ExcelUtil.getWriter(true);
writer.write(list, true);
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
response.setHeader("Content-Disposition","attachment;filename=adminInfoModel.xlsx");
ServletOutputStream out = response.getOutputStream();
writer.flush(out, true);
writer.close();
IoUtil.close(System.out);
}
}
package com.example.controller;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.example.common.Result;
import com.example.common.ResultCode;
import com.example.entity.Account;
import com.example.entity.AuthorityInfo;
import com.example.exception.CustomException;
import com.example.entity.AdminInfo;
import com.example.entity.BusinessInfo;
import com.example.entity.UserInfo;
import com.example.service.AdminInfoService;
import com.example.service.BusinessInfoService;
import com.example.service.UserInfoService;
import org.springframework.web.bind.annotation.*;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import cn.hutool.json.JSONUtil;
import java.util.*;
import java.util.stream.Collectors;
@RestController
public class AccountController {
@Value("${authority.info}")
private String authorityStr;
@Resource
private AdminInfoService adminInfoService;
@Resource
private BusinessInfoService businessInfoService;
@Resource
private UserInfoService userInfoService;
/**
* 用户登陆
* @param account
* @param request
* @return
*/
@PostMapping("/login")
public Result<Account> login(@RequestBody Account account, HttpServletRequest request) {
if (StrUtil.isBlank(account.getName()) || StrUtil.isBlank(account.getPassword()) || account.getLevel() == null) {
throw new CustomException(ResultCode.PARAM_LOST_ERROR);
}
Integer level = account.getLevel();
Account login = new Account();
if (1 == level) {
login = adminInfoService.login(account.getName(), account.getPassword());
}
if (2 == level) {
login = businessInfoService.login(account.getName(), account.getPassword());
}
if (3 == level) {
login = userInfoService.login(account.getName(), account.getPassword());
}
request.getSession().setAttribute("user", login);//设置session
return Result.success(login);
}
@PostMapping("/register")//注册
public Result<Account> register(@RequestBody Account account) {
Integer level = account.getLevel();
Account login = new Account();
if (1 == level) {//超级管理员
AdminInfo info = new AdminInfo();
BeanUtils.copyProperties(account, info);//将account的属性copy到info对象中
login = adminInfoService.add(info);
}
if (2 == level) {//普通管理员
BusinessInfo info = new BusinessInfo();
BeanUtils.copyProperties(account, info);
login = businessInfoService.add(info);
}
if (3 == level) {//普通社区用户
UserInfo info = new UserInfo();
BeanUtils.copyProperties(account, info);
login = userInfoService.add(info);
}
return Result.success(login);
}
@GetMapping("/logout")
public Result logout(HttpServletRequest request) {
request.getSession().setAttribute("user", null);
return Result.success();
}
@GetMapping("/auth")
public Result getAuth(HttpServletRequest request) {
Object user = request.getSession().getAttribute("user");
if(user == null) {
return Result.error("401", "未登录");
}
return Result.success(user);
}
@GetMapping("/getAccountInfo")
public Result<Object> getAccountInfo(HttpServletRequest request) {
Account account = (Account) request.getSession().getAttribute("user");
if (account == null) {
return Result.success(new Object());
}
Integer level = account.getLevel();
if (1 == level) {
return Result.success(adminInfoService.findById(account.getId()));
}
if (2 == level) {
return Result.success(businessInfoService.findById(account.getId()));
}
if (3 == level) {
return Result.success(userInfoService.findById(account.getId()));
}
return Result.success(new Object());
}
@GetMapping("/getSession")
public Result<Map<String, String>> getSession(HttpServletRequest request) {
Account account = (Account) request.getSession().getAttribute("user");
if (account == null) {
return Result.success(new HashMap<>(1));
}
Map<String, String> map = new HashMap<>(1);
map.put("username", account.getName());
return Result.success(map);
}
@GetMapping("/getAuthority")//获取登录身份级别信息
public Result<List<AuthorityInfo>> getAuthorityInfo() {
List<AuthorityInfo> authorityInfoList = JSONUtil.toList(JSONUtil.parseArray(authorityStr), AuthorityInfo.class);
return Result.success(authorityInfoList);
}
/**
* 获取当前用户所能看到的模块信息
* @param request
* @return
*/
@GetMapping("/authority")
public Result<List<Integer>> getAuthorityInfo(HttpServletRequest request) {
Account user = (Account) request.getSession().getAttribute("user");
if (user == null) {
return Result.success(new ArrayList<>());
}
JSONArray objects = JSONUtil.parseArray(authorityStr);
for (Object object : objects) {
JSONObject jsonObject = (JSONObject) object;
if (user.getLevel().equals(jsonObject.getInt("level"))) {
JSONArray array = JSONUtil.parseArray(jsonObject.getStr("models"));
List<Integer> modelIdList = array.stream().map((o -> {
JSONObject obj = (JSONObject) o;
return obj.getInt("modelId");
})).collect(Collectors.toList());
return Result.success(modelIdList);
}
}
return Result.success(new ArrayList<>());
}
@GetMapping("/permission/{modelId}")
public Result<List<Integer>> getPermission(@PathVariable Integer modelId, HttpServletRequest request) {
List<AuthorityInfo> authorityInfoList = JSONUtil.toList(JSONUtil.parseArray(authorityStr), AuthorityInfo.class);
Account user = (Account) request.getSession().getAttribute("user");
if (user == null) {
return Result.success(new ArrayList<>());
}
Optional<AuthorityInfo> optional = authorityInfoList.stream().filter(x -> x.getLevel().equals(user.getLevel())).findFirst();
if (optional.isPresent()) {
Optional<AuthorityInfo.Model> firstOption = optional.get().getModels().stream().filter(x -> x.getModelId().equals(modelId)).findFirst();
if (firstOption.isPresent()) {
List<Integer> info = firstOption.get().getOperation();
return Result.success(info);
}
}
return Result.success(new ArrayList<>());
}
@PutMapping("/updatePassword")
public Result updatePassword(@RequestBody Account info, HttpServletRequest request) {
Account account = (Account) request.getSession().getAttribute("user");
if (account == null) {
return Result.error(ResultCode.USER_NOT_EXIST_ERROR.code, ResultCode.USER_NOT_EXIST_ERROR.msg);
}
String oldPassword = SecureUtil.md5(info.getPassword());
if (!oldPassword.equals(account.getPassword())) {
return Result.error(ResultCode.PARAM_PASSWORD_ERROR.code, ResultCode.PARAM_PASSWORD_ERROR.msg);
}
info.setPassword(SecureUtil.md5(info.getNewPassword()));
Integer level = account.getLevel();
if (1 == level) {
AdminInfo adminInfo = new AdminInfo();
BeanUtils.copyProperties(info, adminInfo);
adminInfoService.update(adminInfo);
}
if (2 == level) {
BusinessInfo businessInfo = new BusinessInfo();
BeanUtils.copyProperties(info, businessInfo);
businessInfoService.update(businessInfo);
}
if (3 == level) {
UserInfo userInfo = new UserInfo();
BeanUtils.copyProperties(info, userInfo);
userInfoService.update(userInfo);
}
info.setLevel(level);
info.setName(account.getName());
// 清空session,让用户重新登录
request.getSession().setAttribute("user", null);
return Result.success();
}
@PostMapping("/resetPassword")
public Result resetPassword(@RequestBody Account account) {
Integer level = account.getLevel();
if (1 == level) {
AdminInfo info = adminInfoService.findByUserName(account.getName());
if (info == null) {
return Result.error(ResultCode.USER_NOT_EXIST_ERROR.code, ResultCode.USER_NOT_EXIST_ERROR.msg);
}
info.setPassword(SecureUtil.md5("123456"));
adminInfoService.update(info);
}
if (2 == level) {
BusinessInfo info = businessInfoService.findByUserName(account.getName());
if (info == null) {
return Result.error(ResultCode.USER_NOT_EXIST_ERROR.code, ResultCode.USER_NOT_EXIST_ERROR.msg);
}
info.setPassword(SecureUtil.md5("123456"));
businessInfoService.update(info);
}
if (3 == level) {
UserInfo info = userInfoService.findByUserName(account.getName());
if (info == null) {
return Result.error(ResultCode.USER_NOT_EXIST_ERROR.code, ResultCode.USER_NOT_EXIST_ERROR.msg);
}
info.setPassword(SecureUtil.md5("123456"));
userInfoService.update(info);
}
return Result.success();
}
}
5. 関連作品の展示
Java開発、Python開発、PHP開発、C#開発、その他関連言語をベースにした実践的なプロジェクト
Nodejs、Vue等のフロントエンド技術をベースに開発されたフロントエンド実践プロジェクト
WeChatアプレットおよびAndroid APPアプリケーション開発に基づく関連作品
51 個のマイクロコントローラーおよびその他の組み込みデバイスに基づく組み込み型モノのインターネットの開発と応用
さまざまなアルゴリズムに基づく AI インテリジェント アプリケーション
ビッグデータを活用した各種データ管理・レコメンドシステム