开发平台为idea,maven管理工具,Mybatis操作数据库,根据市场数字化需要为农户打造小程序可远程查看农场的种植情况。项目是调试,讲解服务均可有偿获取,需要可在最下方QQ二维码处联系我。
Springboot+Vue+小程序,基于微信小程序的农场信息管理系统。数据库Mysql,17张表。
前台可以查阅接受保护的农产品。
后台对请求进行管理。
后台管理功能有。
1.农户管理
2.农产品展示
3.产品类型
4.农产品订单管理
5.预采摘登记管理
6.远程看护管理
7.蔬果类型管理
8.播种管理
9.施肥信息管理
10.浇水管理
11.轮播图管理,农业活动及活动分类管理。
12.个人信息管理。
部分数据库设计:
表名:nongchanpindingdan
功能:农产品订单
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
默认值 |
id |
bigint |
主键 |
主键 |
||
addtime |
timestamp |
创建时间 |
CURRENT_TIMESTAMP |
||
dingdanbianhao |
varchar |
200 |
订单编号 |
||
chanpinmingcheng |
varchar |
200 |
产品名称 |
||
chanpinleixing |
varchar |
200 |
产品类型 |
||
chanpintupian |
longtext |
4294967295 |
产品图片 |
||
chandi |
varchar |
200 |
产地 |
||
guige |
varchar |
200 |
规格 |
||
shuliang |
int |
数量 |
|||
jiage |
int |
价格 |
|||
zonge |
double |
总额 |
|||
goumaishijian |
datetime |
购买时间 |
|||
dingdanbeizhu |
varchar |
200 |
订单备注 |
||
shouhuodizhi |
varchar |
200 |
收货地址 |
||
youkexingming |
varchar |
200 |
游客姓名 |
||
nonghuzhanghao |
varchar |
200 |
农户账号 |
||
nonghuxingming |
varchar |
200 |
农户姓名 |
表名:newstype
功能:农业活动分类
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
默认值 |
id |
bigint |
主键 |
主键 |
||
addtime |
timestamp |
创建时间 |
CURRENT_TIMESTAMP |
||
typename |
varchar |
200 |
分类名称 |
表名:yucaizhaidengji
功能:预采摘登记
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
默认值 |
id |
bigint |
主键 |
主键 |
||
addtime |
timestamp |
创建时间 |
CURRENT_TIMESTAMP |
||
caizhaichanpin |
varchar |
200 |
采摘产品 |
||
caizhaishijian |
datetime |
采摘时间 |
|||
caizhaididian |
varchar |
200 |
采摘地点 |
||
caizhairenshu |
int |
采摘人数 |
|||
caizhaigongju |
varchar |
200 |
采摘工具 |
||
caizhaitupian |
longtext |
4294967295 |
采摘图片 |
||
nonghuzhanghao |
varchar |
200 |
农户账号 |
||
nonghuxingming |
varchar |
200 |
农户姓名 |
表名:news
功能:农业活动
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
默认值 |
id |
bigint |
主键 |
主键 |
||
addtime |
timestamp |
创建时间 |
CURRENT_TIMESTAMP |
||
title |
varchar |
200 |
标题 |
||
introduction |
longtext |
4294967295 |
简介 |
||
typename |
varchar |
200 |
分类名称 |
||
name |
varchar |
200 |
发布人 |
||
headportrait |
longtext |
4294967295 |
头像 |
||
clicknum |
int |
点击次数 |
0 |
||
clicktime |
datetime |
最近点击时间 |
|||
thumbsupnum |
int |
赞 |
0 |
||
crazilynum |
int |
踩 |
0 |
||
storeupnum |
int |
收藏数 |
0 |
||
picture |
longtext |
4294967295 |
图片 |
||
content |
longtext |
4294967295 |
内容 |
代码示例:
1.农产品增删改查模块
package com.controller;
import java.util.Arrays;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import com.entity.NonghuEntity;
import com.service.NonghuService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.annotation.IgnoreAuth;
import com.entity.NongchanpinzhanshiEntity;
import com.entity.view.NongchanpinzhanshiView;
import com.service.NongchanpinzhanshiService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MPUtil;
/**
* 农产品展示
* 后端接口
*/
@RestController
@RequestMapping("/nongchanpinzhanshi")
public class NongchanpinzhanshiController {
@Autowired
private NonghuService nonghuService;
@Autowired
private NongchanpinzhanshiService nongchanpinzhanshiService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, NongchanpinzhanshiEntity nongchanpinzhanshi,
HttpServletRequest request) {
String tableName = request.getSession().getAttribute("tableName").toString();
if (tableName.equals("nonghu")) {
nongchanpinzhanshi.setNonghuzhanghao((String) request.getSession().getAttribute("username"));
}
EntityWrapper<NongchanpinzhanshiEntity> ew = new EntityWrapper<>();
PageUtils page = nongchanpinzhanshiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, nongchanpinzhanshi), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params, NongchanpinzhanshiEntity nongchanpinzhanshi,
HttpServletRequest request) {
String tableName = request.getSession().getAttribute("tableName").toString();
if (tableName.equals("nonghu")) {
nongchanpinzhanshi.setNonghuzhanghao((String) request.getSession().getAttribute("username"));
}
EntityWrapper<NongchanpinzhanshiEntity> ew = new EntityWrapper<>();
PageUtils page = nongchanpinzhanshiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, nongchanpinzhanshi), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list(NongchanpinzhanshiEntity nongchanpinzhanshi) {
EntityWrapper<NongchanpinzhanshiEntity> ew = new EntityWrapper<>();
ew.allEq(MPUtil.allEQMapPre(nongchanpinzhanshi, "nongchanpinzhanshi"));
return R.ok().put("data", nongchanpinzhanshiService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(NongchanpinzhanshiEntity nongchanpinzhanshi) {
EntityWrapper<NongchanpinzhanshiEntity> ew = new EntityWrapper<>();
ew.allEq(MPUtil.allEQMapPre(nongchanpinzhanshi, "nongchanpinzhanshi"));
NongchanpinzhanshiView nongchanpinzhanshiView = nongchanpinzhanshiService.selectView(ew);
return R.ok("查询农产品展示成功").put("data", nongchanpinzhanshiView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id) {
NongchanpinzhanshiEntity nongchanpinzhanshi = nongchanpinzhanshiService.selectById(id);
nongchanpinzhanshi.setClicknum(nongchanpinzhanshi.getClicknum() + 1);
nongchanpinzhanshi.setClicktime(new Date());
nongchanpinzhanshiService.updateById(nongchanpinzhanshi);
nongchanpinzhanshi = nongchanpinzhanshiService.selectView(new EntityWrapper<NongchanpinzhanshiEntity>().eq("id", id));
return R.ok().put("data", nongchanpinzhanshi);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id) {
NongchanpinzhanshiEntity nongchanpinzhanshi = nongchanpinzhanshiService.selectById(id);
nongchanpinzhanshi.setClicknum(nongchanpinzhanshi.getClicknum() + 1);
nongchanpinzhanshi.setClicktime(new Date());
nongchanpinzhanshiService.updateById(nongchanpinzhanshi);
nongchanpinzhanshi = nongchanpinzhanshiService.selectView(new EntityWrapper<NongchanpinzhanshiEntity>().eq("id", id));
return R.ok().put("data", nongchanpinzhanshi);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody NongchanpinzhanshiEntity nongchanpinzhanshi, HttpServletRequest request) {
NonghuEntity nonghu = nonghuService.selectOne(new EntityWrapper<NonghuEntity>()
.eq("nonghuzhanghao", nongchanpinzhanshi.getNonghuzhanghao())
.eq("nonghuxingming", nongchanpinzhanshi.getNonghuxingming()));
if (ObjectUtils.isEmpty(nonghu)) {
return R.error(404, "该账户不存在,请确认农户账号姓名");
}
nongchanpinzhanshiService.insert(nongchanpinzhanshi);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody NongchanpinzhanshiEntity nongchanpinzhanshi, HttpServletRequest request) {
nongchanpinzhanshi.setUserid((Long) request.getSession().getAttribute("userId"));
nongchanpinzhanshiService.insert(nongchanpinzhanshi);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
@Transactional
public R update(@RequestBody NongchanpinzhanshiEntity nongchanpinzhanshi, HttpServletRequest request) {
nongchanpinzhanshiService.updateById(nongchanpinzhanshi);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids) {
nongchanpinzhanshiService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 前端智能排序
*/
@IgnoreAuth
@RequestMapping("/autoSort")
public R autoSort(@RequestParam Map<String, Object> params, NongchanpinzhanshiEntity nongchanpinzhanshi, HttpServletRequest request, String pre) {
EntityWrapper<NongchanpinzhanshiEntity> ew = new EntityWrapper<NongchanpinzhanshiEntity>();
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 = nongchanpinzhanshiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, nongchanpinzhanshi), params), params));
return R.ok().put("data", page);
}
}
2.农产品展示实体:
package com.entity.vo;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serializable;
/**
* 农产品展示
*/
public class NongchanpinzhanshiVO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 产品类型
*/
private String chanpinleixing;
/**
* 产地
*/
private String chandi;
/**
* 规格
*/
private String guige;
/**
* 数量
*/
private Integer shuliang;
/**
* 价格
*/
private Integer jiage;
/**
* 采摘日期
*/
@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat
private Date caizhairiqi;
/**
* 保质期
*/
private String baozhiqi;
/**
* 产品描述
*/
private String chanpinmiaoshu;
/**
* 产品图片
*/
private String chanpintupian;
/**
* 农户账号
*/
private String nonghuzhanghao;
/**
* 农户姓名
*/
private String nonghuxingming;
/**
* 最近点击时间
*/
@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat
private Date clicktime;
/**
* 点击次数
*/
private Integer clicknum;
/**
* 用户id
*/
private Long userid;
/**
* 设置:产品类型
*/
public void setChanpinleixing(String chanpinleixing) {
this.chanpinleixing = chanpinleixing;
}
/**
* 获取:产品类型
*/
public String getChanpinleixing() {
return chanpinleixing;
}
/**
* 设置:产地
*/
public void setChandi(String chandi) {
this.chandi = chandi;
}
/**
* 获取:产地
*/
public String getChandi() {
return chandi;
}
/**
* 设置:规格
*/
public void setGuige(String guige) {
this.guige = guige;
}
/**
* 获取:规格
*/
public String getGuige() {
return guige;
}
/**
* 设置:数量
*/
public void setShuliang(Integer shuliang) {
this.shuliang = shuliang;
}
/**
* 获取:数量
*/
public Integer getShuliang() {
return shuliang;
}
/**
* 设置:价格
*/
public void setJiage(Integer jiage) {
this.jiage = jiage;
}
/**
* 获取:价格
*/
public Integer getJiage() {
return jiage;
}
/**
* 设置:采摘日期
*/
public void setCaizhairiqi(Date caizhairiqi) {
this.caizhairiqi = caizhairiqi;
}
/**
* 获取:采摘日期
*/
public Date getCaizhairiqi() {
return caizhairiqi;
}
/**
* 设置:保质期
*/
public void setBaozhiqi(String baozhiqi) {
this.baozhiqi = baozhiqi;
}
/**
* 获取:保质期
*/
public String getBaozhiqi() {
return baozhiqi;
}
/**
* 设置:产品描述
*/
public void setChanpinmiaoshu(String chanpinmiaoshu) {
this.chanpinmiaoshu = chanpinmiaoshu;
}
/**
* 获取:产品描述
*/
public String getChanpinmiaoshu() {
return chanpinmiaoshu;
}
/**
* 设置:产品图片
*/
public void setChanpintupian(String chanpintupian) {
this.chanpintupian = chanpintupian;
}
/**
* 获取:产品图片
*/
public String getChanpintupian() {
return chanpintupian;
}
/**
* 设置:农户账号
*/
public void setNonghuzhanghao(String nonghuzhanghao) {
this.nonghuzhanghao = nonghuzhanghao;
}
/**
* 获取:农户账号
*/
public String getNonghuzhanghao() {
return nonghuzhanghao;
}
/**
* 设置:农户姓名
*/
public void setNonghuxingming(String nonghuxingming) {
this.nonghuxingming = nonghuxingming;
}
/**
* 获取:农户姓名
*/
public String getNonghuxingming() {
return nonghuxingming;
}
/**
* 设置:最近点击时间
*/
public void setClicktime(Date clicktime) {
this.clicktime = clicktime;
}
/**
* 获取:最近点击时间
*/
public Date getClicktime() {
return clicktime;
}
/**
* 设置:点击次数
*/
public void setClicknum(Integer clicknum) {
this.clicknum = clicknum;
}
/**
* 获取:点击次数
*/
public Integer getClicknum() {
return clicknum;
}
/**
* 设置:用户id
*/
public void setUserid(Long userid) {
this.userid = userid;
}
/**
* 获取:用户id
*/
public Long getUserid() {
return userid;
}
}