基于javaweb的茶叶溯源系统(java+ssm+jsp+bootstrap+layui+mysql)

运行环境

Java≥8、MySQL≥5.7、Tomcat≥8

开发工具

eclipse/idea/myeclipse/sts等均可配置运行

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

基于javaweb+ssm的茶叶溯源系统(java+SSM+JSP+bootstrap+layUI+mysql)

项目介绍

茶叶溯源系统,分为前台与后台。普通用户可在前台通过18位的编码查询茶叶的出售历史。 后台分为两种角色,管理员与经销商; 管理员主要功能包括: 主界面; 管理员管理:管理员列表、添加管理员; 分类管理:茶叶类型的添加、删除、修改; 茶叶管理:茶叶列表、添加、删除、修改茶叶; 大包装管理:大包装列表、添加、删除、修改大包装; 单品管理:售出统计、单品信息修改; 经销商主要功能包括: 主界面; 售出单品:确认售出单品;

环境需要

1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 5.是否Maven项目: 否;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven项目  6.数据库:MySql 5.7版本;

技术栈

  1. 后端:Spring SpringMVC MyBatis 2. 前端:JSP+bootstrap+jQuery+layUI

使用说明

  1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件; 2. 将项目中jdbc.properties配置文件中的数据库配置改为自己的配置; 3. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven; 若为maven项目,导入成功后请执行maven clean;maven install命令,配置tomcat,然后运行; 4. 运行项目,输入localhost:8080/tea-web/ 登录

管理员账号控制层:

/**

  • (AdminAcct)表控制层

*管理员账号

*/

@CrossOrigin

@RestController

@RequestMapping(“admin”)

public class AdminAcctController {

/**

  • 服务对象

*/

@Resource

private AdminAcctService adminAcctService;

@Resource

private LicService licService;

@Resource

private EntService entService;

@Resource

private TypeTblService typeTblService;

/**

  • 通过主键查询单条数据

  • @param id 主键

  • @return 单条数据

*/

public AdminAcct selectOne(Integer id) {

return this.adminAcctService.queryById(id);

/**

  • 查询指定行数据

  • @param offset 查询起始位置

  • @param limit 查询条数

  • @return 对象列表

*/

public List queryAllByLimit(@Param(“offset”) int offset, @Param(“limit”) int limit) {

return this.adminAcctService.queryAllByLimit(offset, limit);

/**

  • 通过主键删除数据

  • @param id 主键

  • @return 是否成功

*/

public boolean deleteById(Integer id) {

return this.adminAcctService.deleteById(id);

/**

  • 修改数据

*/

public AdminAcct update(Integer id,String username,String pwd) {

AdminAcct adminAcct=new AdminAcct();

adminAcct.setId(id);

adminAcct.setUsername(username);

adminAcct.setPwd(pwd);

return this.adminAcctService.update(adminAcct);

//登录注册

/**

  • 登录

  • @param username 用户名

  • @param password 密码

  • @return Result对象

*/

@GetMapping( “login”)

public Result login(String username, String password) {

BCryptPasswordEncoder bCryptPasswordEncoder=new BCryptPasswordEncoder();

Result result=new Result();

result.setSuccess(false);

result.setDetail(null);

if (usernamenull||username"")

result.setMsg(“用户名不可为空”);

System.out.println(“用户名不可为空”);

return result;

if(password==“”||password==null)

result.setMsg(“密码不可为空”);

System.out.println(“密码不可为空”);

return result;

AdminAcct temp=new AdminAcct();

temp=this.adminAcctService.queryByUserName(username);

if(temp==null) {

System.out.println(“用户名不存在”);

result.setMsg(“用户名不存在”);

return result;

System.out.println(bCryptPasswordEncoder.encode(password));

boolean flag=bCryptPasswordEncoder.matches(password,temp.getPwd());

if(flag)

temp.setPwd(“”);

System.out.println(“登录成功”);

result.setMsg(“登录成功”);

result.setSuccess(true);

if(temp.getToken()==null)

String uuid = UUID.randomUUID().toString().replaceAll(“-”,“”);

temp.setToken(uuid);

this.adminAcctService.update(temp);

result.setDetail(temp);

return result;

else

result.setMsg(“密码错误”);

System.out.println(“密码错误”);

return result;

/**

  • 注册

  • @param username 用户名

  • @param password 密码

  • @return Result对象

*/

@PostMapping(“register”)

public Result register(String username,String password) {

BCryptPasswordEncoder bCryptPasswordEncoder=new BCryptPasswordEncoder();

Result result=new Result();

AdminAcct temp=new AdminAcct();

result.setSuccess(false);

result.setDetail(null);

temp=this.adminAcctService.queryByUserName(username);

if (usernamenull||username"")

result.setMsg(“用户名不可为空”);

System.out.println(“用户名不可为空”);

return result;

if (temp!=null)

result.setMsg(“用户名重复”);

System.out.println(“用户名重复”);

return result;

temp=new AdminAcct();

temp.setUsername(username);

password=bCryptPasswordEncoder.encode(password);

temp.setPwd(password);

String uuid = UUID.randomUUID().toString().replaceAll(“-”,“”);

temp.setToken(uuid);

this.adminAcctService.insert(temp);

temp.setPwd(“”);

result.setDetail(temp);

result.setMsg(“注册成功”);

result.setSuccess(true);

System.out.println(“注册成功”);

return result;

//备案审核相关

/**

  • 输出待审核列表

  • @param id 主键

  • @return

*/

public Result licOfAudit_list(Integer id){

Result result=new Result();

result.setSuccess(false);

if(adminAcctService.queryById(id)==null){

result.setMsg(“企业id错误”);

return result;

result.setDetail(licService.getModelByState(0));

result.setSuccess(true);

result.setMsg(“待审核证书获取成功”);

return result;

/**

  • @param lid

  • @param state

  • @return

*/

/**

  • 审核证书

  • @param lid 证书id

  • @param state 证书状态

  • @return

*/

@PostMapping(“setLicState”)

public Result SetLicState(Integer lid,Integer state){

Result result=new Result();

result.setSuccess(false);

if(lid==null){

result.setMsg(“lid不可为空”);

return result;

Lic lic=licService.queryById(lid);

if(lic==null){

result.setMsg(“证书id错误”);

return result;

result.setSuccess(true);

result.setMsg(“证书通过成功”);

lic.setLicState(state);

result.setDetail(licService.update(lic));

return result;

/**

  • 证书筛选

  • @param ename 企业名

  • @param lictype 证书类型

  • @param sernum 编号

  • @return

*/

@Transactional(readOnly = true)

@GetMapping(“licList”)

public Result Lic_Screen(String ename, Integer lictype, String sernum,Integer licstate){

Result result=new Result();

result.setSuccess(false);

List list=new ArrayList();

if(ename!=null){

list=entService.queryByEName(ename);

if(list.isEmpty()){

result.setMsg(“无该企业名的类似企业”);

System.out.println(“企业名错误”);

return result;

if (lictype!=null&&typeTblService.queryById(lictype)==null){

result.setMsg(“企业类型错误”);

System.out.println(“企业类型错误”);

return result;

List list_lic=new ArrayList();

if(!list.isEmpty()){

Iterator iterator=list.listIterator();

while (iterator.hasNext()) {

Lic lic = new Lic();

lic.setEid(((Ent)iterator.next()).getEid());

lic.setLicType(lictype);

lic.setSerNum(sernum);

lic.setLicState(licstate);

List temp=licService.queryAllModel(lic);

list_lic.addAll(temp);

else {

Lic lic = new Lic();

lic.setLicType(lictype);

lic.setSerNum(sernum);

lic.setLicState(licstate);

list_lic=licService.queryAllModel(lic);

if(list_lic.isEmpty()){

result.setMsg(“无此类证书”);

return result;

result.setMsg(“筛选成功”);

result.setSuccess(true);

result.setDetail(list_lic);

return result;

/**

  • 删除证书

  • @param lid 证书编号

  • @return Result

*/

@PostMapping(“licdelete”)

public Result Lic_Delete(Integer lid){

Result result=new Result();

result.setSuccess(false);

if(licService.deleteById(lid)) {

result.setSuccess(true);

result.setMsg(“删除成功”);

return result;

else {

result.setMsg(“删除失败,证书不存在”);

return result;

/**@PostMapping(“”)

public Result lic_Pass(Integer lid){

Result result=new Result();

result.setSuccess(false);

Lic lic=licService.queryById(lid);

if(lic==null){

result.setMsg(“证书id错误”);

return result;

result.setSuccess(true);

result.setMsg(“证书通过成功”);

lic.setLicState((short)1);

result.setDetail(licService.update(lic));

return result;

@PostMapping(“LicNoPass”)

public Result lic_NoPass(Integer lid){

Result result=new Result();

result.setSuccess(false);

Lic lic=licService.queryById(lid);

if(lic==null){

result.setMsg(“证书id错误”);

return result;

result.setSuccess(true);

result.setMsg(“证书不通过成功”);

lic.setLicState((short)2);

result.setDetail(licService.update(lic));

return result;

*/

//企业信息相关

/**

  • 企业信息筛选

  • @param username 用户名

  • @param ename 企业名

  • @param etype 企业类型

  • @param tel 电话

  • @param email 邮箱

  • @return

*/

@GetMapping(“userList”)

public Result Account_Screen(String username,String ename,Integer etype,String tel,String email){

Result result=new Result();

result.setSuccess(false);

String regEx = “^([a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4})*$”;

Pattern pattern = Pattern.compile(regEx);

Matcher matcher ;

/**if(email!=null) {

//邮箱格式验证

matcher=pattern.matcher(email);

if (!matcher.matches()) {

result.setMsg(“邮箱格式错误”);

System.out.println(“邮箱格式错误”);

return result;

}*/

//用户名格式验证

/**regEx=“-1{4,16}$”;

pattern=Pattern.compile(regEx);

if(username!=null){

matcher=pattern.matcher(username);

if(!matcher.matches()){

result.setMsg(“用户名格式错误”);

System.out.println(“用户名格式错误”);

return result;

}*/

if (etype!=null&&typeTblService.queryById(etype)==null){

result.setMsg(“企业类型错误”);

System.out.println(“企业类型错误”);

return result;

Ent ent=new Ent();

ent.setTel(tel);

ent.setUsername(username);

ent.setEname(ename);

ent.setEmail(email);

ent.setEtype(etype);

List list=entService.queryAll(ent);

if (list.isEmpty()){

result.setMsg(“无此类信息”);

return result;

result.setDetail(entService.queryAll(ent));

result.setSuccess(true);

result.setMsg(“筛选成功”);

return result;

/**

  • 修改企业信息

  • @param eid 企业id

  • @param etype 企业类型

  • @param tele 电话

  • @param ename 企业名字

  • @param email 邮箱

  • @return

*/

@PostMapping(“editEntDetail”)

public Result EditEnt(Integer eid,Integer etype,String tele,String ename,String email){

//邮箱格式验证

Result result=new Result();

result.setSuccess(false);

String regEx=“^([a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4})*$”;

Pattern pattern=Pattern.compile(regEx);

Matcher matcher;

if(email!=null) {

matcher=pattern.matcher(email);

if (!matcher.matches()) {

result.setMsg(“邮箱格式错误”);

System.out.println(“邮箱格式错误”);

return result;

Ent ent=new Ent();

ent.setEid(eid);

ent.setEtype(etype);

ent.setTel(tele);

ent.setEname(ename);

result.setSuccess(true);

result.setMsg(“修改成功”);

ent=entService.update(ent);

ent.setPwd(“”);

result.setDetail(ent);

return result;

/**

*重置企业账号token

  • @param eid 企业id

  • @return

*/

@PostMapping(“resetEntToken”)

public Result ResetEntToken(Integer eid){

Result result=new Result();

result.setSuccess(false);

if(eid==null){

result.setMsg(“eid不可为空”);

return result;

if(entService.queryById(eid)==null){

result.setMsg(“eid错误”);

return result;

Ent ent=entService.queryById(eid);

String token=UUID.randomUUID().toString().replaceAll(“-”,“”);

ent.setToken(token);

ent=entService.update(ent);

result.setMsg(“重置token成功”);

result.setSuccess(true);

result.setDetail(ent);

return result;

产品管理控制层:

/**

  • (Product)表控制层

*/

@RestController

@RequestMapping(“product”)

public class ProductController {

/**

  • 服务对象

*/

@Resource

private ProductService productService;

@Resource

private ProcessController processController;

/**

  • 通过主键查询单条数据

  • @param pid 主键

  • @return 单条数据

*/

@GetMapping(“selectOne”)

public Product selectOne(Integer pid) {

return this.productService.queryById(pid);

/**

  • 新增数据

*/

//http://127.0.0.1:11451/product/insertOne?pid=1&type=5001001&weight=3.5&ptime=2016-12-12&lastOid=1&state=1

// @GetMapping(“insertOne”)

// public Product insert(Integer pid, Integer type, Double weight, String ptime,Integer lastOid,Short state) {

// Product product=new Product();

// product.setPid(pid);

// product.setType(type);

// product.setWeight(weight);

// product.setPtime(ptime);

// product.setLastOid(lastOid);

// product.setState(state);

// return this.productService.insert(product);

// }

/**

  • 更新数据

*/

//http://127.0.0.1:11451/product/updateOne?pid=1&bid=2

@GetMapping(“updateOne”)

public Product update(Integer pid, Integer type, Double weight, String ptime,Integer lastOid,Short state) {

Product product=new Product();

product.setPid(pid);

product.setType(type);

product.setWeight(weight);

product.setPtime(ptime);

product.setLastOid(lastOid);

product.setState(state);

return productService.update(product);

/**

  • 删除数据

*/

//http://127.0.0.1:11451/product/deleteOne?pid=2

@GetMapping(“deleteOne”)

public boolean deleteById(Integer pid) {

return productService.deleteById(pid);

/**

  • 插入新数据

  • @param type 肉品类型

  • @param weight 重量

  • @param time 加工时间

  • @param lastoid 最新订单号

  • @param state 状态

  • @param bid 屠宰着id

  • @param aid 牲畜id

  • @return 单条数据

*/

@GetMapping(“insert”)

public Result insert(Integer type, Double weight, String time, Integer lastoid, short state,Integer bid,Integer aid) {

Result result=new Result();

result.setSuccess(false);

result.setDetail(null);

Product product=new Product();

SimpleDateFormat format = new SimpleDateFormat(“yyyy-MM-dd”);

try {

// 设置lenient为false. 否则SimpleDateFormat会比较宽松地验证日期,比如2007/02/29会被接受,并转换成2007/03/01

format.setLenient(false);

format.parse(time);

} catch (ParseException e) {

System.out.println(“时间输入格式错误”);

e.printStackTrace();

result.setMsg(“时间未按格式输入”);

return result;

// e.printStackTrace();

// 如果throw java.text.ParseException或者NullPointerException,就说明格式不对

product.setLastOid(lastoid);

product.setPtime(time);

product.setState(state);

product.setType(type);

product.setWeight(weight);

product=productService.insert(product);

this.processController.insert(bid,aid,product.getPid());

result.setMsg(“加工完成”);

result.setDetail(product);

result.setSuccess(true);

return result;

类型管理控制层:

/**

  • (TypeTbl)表控制层

*/

@RestController

@RequestMapping(“typeTbl”)

public class TypeTblController {

/**

  • 服务对象

*/

@Resource

private TypeTblService typeTblService;

/**

  • 通过主键查询单条数据

  • @param tid 主键

  • @return 单条数据

*/

@GetMapping(“selectOne”)

public TypeTbl selectOne(Integer tid) {

return this.typeTblService.queryById(tid);

/**

  • 新增数据

*/

//http://127.0.0.1:11451/typeTbl/insertOne?tid=5&name=sda

@GetMapping(“insertOne”)

public TypeTbl insert(String name) {

TypeTbl typeTbl=new TypeTbl();

typeTbl.setName(name);

return this.typeTblService.insert(typeTbl);

/**

  • 更新数据

*/

//http://127.0.0.1:11451/typeTbl/updateOne?tid=5&name=hjk

@GetMapping(“updateOne”)

public TypeTbl update(Integer tid, String name) {

TypeTbl typeTbl=new TypeTbl();

typeTbl.setTid(tid);

typeTbl.setName(name);

return typeTblService.update(typeTbl);

/**

  • 删除数据

*/

//http://127.0.0.1:11451/typeTbl/deleteOne?tid=5

@GetMapping(“deleteOne”)

public boolean deleteById(Integer tid) {

return typeTblService.deleteById(tid);



  1. \w\d_ ↩︎

基于javaweb的茶叶溯源系统(java+ssm+jsp+bootstrap+layui+mysql)相关推荐

  1. 基于javaweb+mysql的茶叶溯源系统(java+SSM+JSP+bootstrap+layUI+mysql)

    项目介绍 茶叶溯源系统,分为前台与后台.普通用户可在前台通过18位的编码查询茶叶的出售历史. 后台分为两种角色,管理员与经销商: 管理员主要功能包括: 主界面: 管理员管理:管理员列表.添加管理员: ...

  2. Java项目茶叶溯源系统(java+SSM+JSP+bootstrap+layUI+mysql)

    项目介绍 茶叶溯源系统,分为前台与后台.普通用户可在前台通过18位的编码查询茶叶的出售历史. 后台分为两种角色,管理员与经销商: 管理员主要功能包括: 主界面: 管理员管理:管理员列表.添加管理员: ...

  3. 基于javaweb的电影院购票系统(java+ssm+jsp+bootstrap+layui+echarts+mysql)

    基于javaweb的电影院购票系统(java+ssm+jsp+bootstrap+layui+echarts+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 ec ...

  4. 基于javaweb的足球联赛管理系统(java+ssm+jsp+bootstrap+layui+mysql)

    基于javaweb的足球联赛管理系统(java+ssm+jsp+bootstrap+layui+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/i ...

  5. 基于javaweb的茶叶商城管理系统(java+ssm+jsp+ajax+jquery+mysql)

    基于javaweb的茶叶商城管理系统(java+ssm+jsp+ajax+jquery+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/ ...

  6. 基于javaweb的儿童摄影预约系统(java+ssm+jsp+js+jquery+mysql)

    基于javaweb的儿童摄影预约系统(java+ssm+jsp+js+jquery+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/my ...

  7. 基于javaweb的大学生兼职论坛(java+ssm+jsp+jquery+layui+mysql)

    基于javaweb的大学生兼职论坛(java+ssm+jsp+jquery+layui+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/ ...

  8. 基于javaweb的房产中介管理系统(java+ssm+html+bootstrap+layui+mysql)

    基于javaweb的房产中介管理系统(java+ssm+html+bootstrap+layui+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/ ...

  9. 基于javaweb的零食商城系统(java+ssm+jsp+mysql+easyui)

    基于javaweb的零食商城系统(java+ssm+jsp+mysql+easyui) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/myeclip ...

最新文章

  1. IIRF重写在asp.net4.0+IIS6中部分失败的解决方案
  2. Linux运行cat进程,linux下如何使用某个用户启动某个进程?
  3. 白话:服务降级与熔断的区别
  4. 自学python困难吗_Python学习难不难?零基础好学吗?
  5. XMLHttpRequest、fetch的ajax请求
  6. JavaScript时间日期函数
  7. 怎么在图片上面加个div层,让它浮于图片上方
  8. python递归_python3之递归
  9. Python与自然语言处理搭建环境
  10. Yii2在部署新机器时需要注意的环境问题
  11. Android实用笔记——使用ViewFlipper实现屏幕切换动画
  12. Beta 冲刺 (6/7)
  13. Linux中如何恢复rm命令误删除的文件之extundelete编译安装及使用
  14. python学习记录 - python3.x中如何实现print不换行
  15. mysql中的utf-8_永远不要在MySQL中使用UTF-8
  16. 微信小程序:分包大小超过限制
  17. 排列组合解析与例题总结
  18. 如何使用计算机打勾,如何用电脑在方框里面打勾
  19. 采购订单文本复制规则
  20. android 系统开启流量,安卓系统抖音流量权限怎么打开

热门文章

  1. 判断当前的浏览器是pc还是移动设备,如果是手机,就跳转到对应手机端网站
  2. 看注重内心的唯品会如何坚守电商本质
  3. 小小新闻发布会资料_小小新闻发布会作文
  4. 在微信上,钱可以这么赚
  5. 学PS基础:Photoshop 技能167个­
  6. 个人小额信用贷款主要产品综合比较
  7. sql--datepart
  8. 慕课网知到网页版自动下一节1.5倍速听课
  9. Python IDLE常用快捷键
  10. 神庙逃亡java_神庙逃亡2(Temple