基于javaweb+mysql的springboot扶农助农平台管理系统(java+springboot+maven+elementui+vue+mysql)
私信源码获取及调试交流
运行环境
Java≥8、MySQL≥5.7、Node.js≥10
开发工具
后端:eclipse/idea/myeclipse/sts等均可配置运行
前端:WebStorm/VSCode/HBuilderX等均可
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb的SpringBoot扶农助农平台管理系统(java+springboot+maven+elementui+vue+mysql)
项目介绍
本项目分为前后台,前台为普通用户角色,后台为管理员角色;
管理员角色包含以下功能:
管理员登录,类目管理,用户管理,农产品管理,订单管理,公告管理,留言管理,查看日志等功能。
用户角色包含以下功能:
查看首页,用户登录,查看商品详情,查看我的收藏,查看我的购物车,查看我的订单,提交留言,修改个人信息,修改密码,自然风光,扶贫申请,爱心捐赠,捐赠记录,留言反馈,资源管理,商城管理,公告信息管理,轮播图等功能。
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
4.数据库:MySql 5.7/8.0等版本均可;
技术栈
java+Springboot+ElementUI+Vue+Mysql
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
this.addMap(paramMap);
return success(1);
}
}
/**
* 爱心捐赠:(LoveDonation)表控制层
*
*/
@RestController
@RequestMapping("/love_donation")
public class LoveDonationController extends BaseController<LoveDonation, LoveDonationService> {
/**
* 爱心捐赠对象
*/
@Autowired
public LoveDonationController(LoveDonationService service) {
setService(service);
query2.put("user_id",o.getUserId());
form2.put("password",service.encryption(password));
service.update(query, service.readConfig(request), form2);
return success(1);
}
return error(70000,"用户不存在");
}
/**
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.select(map, new HashMap<>()).getResultList();
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
* 留言反馈对象
*/
@Autowired
public MessageFeedbackController(MessageFeedbackService service) {
setService(service);
}
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
this.addMap(paramMap);
return success(1);
}
}
/**
* 自然风光:(NaturalScenery)表控制层
*
*/
@RestController
@RequestMapping("/natural_scenery")
public class NaturalSceneryController extends BaseController<NaturalScenery, NaturalSceneryService> {
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_);
map.remove(FindConfig.SQLHWERE);
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_));
map.put(FindConfig.SQLHWERE,request.getParameter(FindConfig.SQLHWERE));
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{
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();
String res = String.valueOf(service.runCountSql(sql).getSingleResult());
if (res==null){
return error(30000,"用户不存在");
}
if (!res.equals("已通过")){
return error(30000,"该用户审核未通过");
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,"用户非可用状态,不能登录");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
tokenService.save(accessToken);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
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;
}
}
/**
* 订单:(Order)表控制层
*
*/
@RestController
@RequestMapping("order")
public class OrderController extends BaseController<Order, OrderService> {
/**
* 服务对象
*/
@Autowired
public OrderController(OrderService service) {
Query count = service.count(service.readQuery(request), service.readConfig(request));
return success(count.getResultList());
}
@RequestMapping(value = {"/sum_group", "/sum"})
public Map<String, Object> sum(HttpServletRequest request) {
Query count = service.sum(service.readQuery(request), service.readConfig(request));
return success(count.getResultList());
}
@RequestMapping(value = {"/avg_group", "/avg"})
public Map<String, Object> avg(HttpServletRequest request) {
Query count = service.avg(service.readQuery(request), service.readConfig(request));
return success(count.getResultList());
}
@PostMapping("/upload")
public Map<String, Object> upload(@RequestParam("file") MultipartFile file) {
log.info("进入方法");
if (file.isEmpty()) {
return error(30000, "没有选择文件");
}
try {
//判断有没路径,没有则创建
String filePath = System.getProperty("user.dir") + "/src/main/resources/static/";
File targetDir = new File(filePath);
if (!targetDir.exists() && !targetDir.isDirectory()) {
if (targetDir.mkdirs()) {
log.info("创建目录成功");
} else {
log.error("创建目录失败");
}
}
// 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());
/**
* 扶贫申请:(ApplicationForPovertyAlleviation)表控制层
*
*/
@RestController
@RequestMapping("/application_for_poverty_alleviation")
public class ApplicationForPovertyAlleviationController extends BaseController<ApplicationForPovertyAlleviation, ApplicationForPovertyAlleviationService> {
/**
* 扶贫申请对象
*/
@Autowired
public ApplicationForPovertyAlleviationController(ApplicationForPovertyAlleviationService service) {
setService(service);
}
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
this.addMap(paramMap);
return success(1);
}
}
/**
public MessageFeedbackController(MessageFeedbackService service) {
setService(service);
}
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
this.addMap(paramMap);
return success(1);
}
}
/**
* 自然风光:(NaturalScenery)表控制层
*
*/
@RestController
@RequestMapping("/natural_scenery")
public class NaturalSceneryController extends BaseController<NaturalScenery, NaturalSceneryService> {
/**
* 自然风光对象
/**
* 留言反馈对象
*/
@Autowired
public MessageFeedbackController(MessageFeedbackService service) {
setService(service);
}
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
this.addMap(paramMap);
return success(1);
}
}
/**
* 自然风光:(NaturalScenery)表控制层
*
*/
@RestController
@RequestMapping("/natural_scenery")
public class NaturalSceneryController extends BaseController<NaturalScenery, NaturalSceneryService> {
/**
* 自然风光对象
*/
@Autowired
public NaturalSceneryController(NaturalSceneryService service) {
setService(service);
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
this.addMap(paramMap);
return success(1);
}
}
/**
* 卖家:(Seller)表控制层
*
*/
@RestController
@RequestMapping("/seller")
public class SellerController extends BaseController<Seller, SellerService> {
/**
* 卖家对象
*/
@Autowired
public SellerController(SellerService service) {
setService(service);
}
/**
* 扶贫申请:(ApplicationForPovertyAlleviation)表控制层
*
*/
@RestController
@RequestMapping("/application_for_poverty_alleviation")
public class ApplicationForPovertyAlleviationController extends BaseController<ApplicationForPovertyAlleviation, ApplicationForPovertyAlleviationService> {
/**
* 扶贫申请对象
*/
@Autowired
public ApplicationForPovertyAlleviationController(ApplicationForPovertyAlleviationService service) {
setService(service);
}
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
this.addMap(paramMap);
return success(1);
}
}
/**
@RequestMapping("article_type")
public class ArticleTypeController extends BaseController<ArticleType, ArticleTypeService> {
/**
* 服务对象
*/
@Autowired
public ArticleTypeController(ArticleTypeService service) {
setService(service);
}
}
/**
* 用户组:用于用户前端身份和鉴权(UserGroup)表控制层
*
*/
@RestController
@RequestMapping("user_group")
public class UserGroupController extends BaseController<UserGroup, UserGroupService> {
/**
* 服务对象
*/
@Autowired
public UserGroupController(UserGroupService service) {
setService(service);
}
}
else if (request.getRequestURL().toString().contains("/api/user/register")){
return true;
}
// if (token == null || "".equals(token)){
// if ("POST".equals(request.getMethod())){
// return false;
// }else {
// return true;
// }
// }else {
return true;
// }
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
//更新token
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
private void failure(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setHeader("Content-type", "application/json;charset=UTF-8");
response.setStatus(401);
// response.getWriter().write("");
response.sendRedirect("https://www.baidu.com");
}
private void setHeader(HttpServletRequest request, HttpServletResponse response) {
//跨域的header设置
response.setHeader("Access-control-Allow-Origin", request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Headers", request.getHeader("Access-Control-Request-Headers"));
response.setHeader("Access-Control-Max-Age", "1800");
//防止乱码,适用于传输JSON数据
response.setHeader("Content-Type", "application/json;charset=UTF-8");
response.setStatus(HttpStatus.OK.value());
}
}
@PostMapping("/upload")
public Map<String, Object> upload(@RequestParam("file") MultipartFile file) {
log.info("进入方法");
if (file.isEmpty()) {
return error(30000, "没有选择文件");
}
try {
//判断有没路径,没有则创建
String filePath = System.getProperty("user.dir") + "/src/main/resources/static/";
File targetDir = new File(filePath);
if (!targetDir.exists() && !targetDir.isDirectory()) {
if (targetDir.mkdirs()) {
log.info("创建目录成功");
} else {
log.error("创建目录失败");
}
}
// 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, "上传失败");
}
@PostMapping("/import_db")
public Map<String, Object> importDb(@RequestParam("file") MultipartFile file) throws IOException {
service.importDb(file);
return success(1);
}
@RequestMapping("/export_db")
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();
}
/**
*/
@Slf4j
public class BaseController<E, S extends BaseService<E>> {
@Setter
protected S service;
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
@Transactional
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}
@PostMapping("/set")
@Transactional
public Map<String, Object> set(HttpServletRequest request) throws IOException {
service.update(service.readQuery(request), service.readConfig(request), service.readBody(request.getReader()));
return success(1);
}
JSONObject form2 = new JSONObject();
// 修改用户密码
query2.put("user_id",o.getUserId());
form2.put("password",service.encryption(password));
service.update(query, service.readConfig(request), form2);
return success(1);
}
return error(70000,"用户不存在");
}
/**
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.select(map, new HashMap<>()).getResultList();
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
* 订单:(Order)表控制层
*
*/
@RestController
@RequestMapping("order")
public class OrderController extends BaseController<Order, OrderService> {
/**
* 服务对象
*/
@Autowired
public OrderController(OrderService service) {
setService(service);
}
@RequestMapping("/get_business_order_list")
public Map<String, Object> getBusinessOrderList(HttpServletRequest request) {
Map<String,String> query = service.readQuery(request);
String sql = "SELECT\n" +
"\tt1.* \n" +
"FROM\n" +
"\t`order` t1\n" +
"\tLEFT JOIN goods t2 ON t1.goods_id = t2.goods_id \n" +
"WHERE\n" +
"\tt2.user_id = "+ query.get("user_id");
String countSql = "SELECT\n" +
"\tcount(t1.order_id) \n" +
"FROM\n" +
"\t`order` t1\n" +
"\tLEFT JOIN goods t2 ON t1.goods_id = t2.goods_id \n" +
"WHERE\n" +
"\tt2.user_id = "+ query.get("user_id");
if (!StringUtils.isEmpty(query.get("order_number"))){
sql = sql + " and t1.order_number like '%"+query.get("order_number")+"%'";
countSql = countSql + " and t1.order_number like '%"+query.get("order_number")+"%'";
}
if (!StringUtils.isEmpty(query.get("title"))){
sql = sql + " and t1.title like '%"+query.get("title")+"%'";
countSql = countSql + " and t1.title like '%"+query.get("title")+"%'";
}
if (!StringUtils.isEmpty(query.get("contact_name"))){
sql = sql + " and t1.contact_name like '%"+query.get("contact_name")+"%'";
countSql = countSql + " and t1.contact_name like '%"+query.get("contact_name")+"%'";
}
if (!StringUtils.isEmpty(query.get("state"))){
sql = sql + " and t1.state = '"+query.get("state")+"'";
countSql = countSql + " and t1.state = '"+query.get("state")+"'";
}
Map<String,String> config = service.readConfig(request);
if (!StringUtils.isEmpty(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 = sql + " limit "+(page-1)*limit+" , "+limit;
}