源码获取:博客首页 "资源" 里下载!
茶叶溯源系统,分为前台与后台。普通用户可在前台通过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 (username==null||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 (username==null||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="-^[\\w\\d_]{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);
}
}
源码获取:博客首页 "资源" 里下载!