作者主页:夜未央5788
简介:Java领域优质创作者、Java项目、学习资料、技术互助
文末获取源码
本项目分为前后台,分为普通用户、管理员、企业用户三种角色;
普通用户无需登录,可在前台直接进行溯源查询,管理员、企业用户可登录后台进行管理;
超级管理员角色包含以下功能:
登录,管理企业,设置管理员,增加管理员,删除管理员等功能。
用户角色包含以下功能:
用户首页,用户进行溯源查询,溯源结果等功能。
企业角色包含以下功能:
注册,登录,企业登录后主页,增删改查农产品列表,新增农产品,二维码列表查看,溯源列表,查看近期溯源人数,修改企业信息,查看溯源二维码等功能。
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.数据库:MySql 5.7版本;
6.是否Maven项目:是;
1. 后端:Spring+SpringMVC+Mybatis
2. 前端:JSP+CSS+JavaScript+LayUI+jQuery
1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;
若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行;
3. 将项目中database.properties配置文件中的数据库配置改为自己的配置;
4. 运行项目,输入http://localhost:8080/ncpsy 登录
注:Tomcat中配置路径必须为/ncpsy 否则会有异常
管理员账号/密码:admin/admin
企业账号/密码:user/123456
- @Controller
- @RequestMapping("/handle")
- public class NcpController {
-
- protected Logger logger = LoggerFactory.getLogger(this.getClass());
-
- @Autowired
- private INcpService ncpService;
-
- @Autowired
- private IEwmService ewmService;
-
- /**
- * 新增农产品(生成二维码数据,插入二维码表)
- * @param ncp
- * @return
- */
- @RequestMapping("/product/add")
- @ResponseBody
- public boolean productAdd(@RequestBody Ncp ncp, HttpServletRequest request) {
- logger.info("/handle/product/add===> ncp={}", ncp);
- QueryWrapper
queryWrapper = new QueryWrapper<>(); -
- //设置农产品id
- queryWrapper.eq("qyid", ncp.getQyid());
- int num = ncpService.count(queryWrapper) + 1;
- String ncpid = "ncp";
- while(ncp.getNcpid() == null) {
- if(num /10 == 0) {
- ncpid = ncpid.concat("00" + num);
- } else if(num / 10 >= 1 && num / 10 < 10) {
- ncpid = ncpid.concat("0" + num);
- } else {
- ncpid = ncpid.concat("" + num);
- }
- ncpid = ncpid.concat("-" + ncp.getQyid());
- //查询数据库是否存在相同的ncpid,存在则num+1,继续循环
- QueryWrapper
ncpidQueryWrapper = new QueryWrapper<>(); - ncpidQueryWrapper.eq("ncpid", ncpid);
- int isExist = ncpService.count(ncpidQueryWrapper);
- if(isExist > 0) {
- num += 1;
- ncpid = "ncp";
- continue;
- } else {
- break;
- }
- }
- ncp.setNcpid(ncpid);
-
- //生成二维码id
- QueryWrapper
ewmQueryWrapper = new QueryWrapper<>(); - ewmQueryWrapper.likeLeft("ewmid", ncp.getQyid());
- //int num2 = ewmService.count(ewmQueryWrapper) + 1;
- int num2 = num;
- String ewmid = "ewm";
- while(ncp.getEwmid() == null) {
- if(num2 /10 == 0) {
- ewmid = ewmid.concat("00" + num2);
- } else if(num2 / 10 >= 1 && num2 / 10 < 10) {
- ewmid = ewmid.concat("0" + num2);
- } else {
- ewmid = ewmid.concat("" + num2);
- }
- ewmid = ewmid.concat("-" + ncpid);
- //查询数据库是否存在相同的ewmid,存在则num+1,继续循环
- QueryWrapper
ewmidQueryWrapper = new QueryWrapper<>(); - ewmidQueryWrapper.eq("ewmid", ewmid);
- int isExist = ewmService.count(ewmidQueryWrapper);
- if(isExist > 0) {
- num2 += 1;
- ewmid = "ewm";
- continue;
- } else {
- break;
- }
- }
-
- //获取服务器地址、端口、项目名
- HttpServletRequest httpRequest=(HttpServletRequest)request;
- String baseUrl = "http://" + request.getServerName() + ":" + request.getServerPort() + httpRequest.getContextPath();
-
- //插入二维码表
- String ewmsj = baseUrl + "/info/product-info?ncpid=" + ncpid;
- Ewm ewm = new Ewm();
- ewm.setEwmid(ewmid);
- ewm.setEwmsj(ewmsj);
- boolean flag = ewmService.save(ewm);
-
- //如果二维码表插入成功,则插入ncp表
- //在插入农产品表的时候可能会出错导致插入失败,这样上面插入的二维码表字段就作废了,所以在这里catch紅酒表的错误,并把上面二维码表字段删除
- try {
- if(flag) {
- ncp.setEwmid(ewmid);
- boolean flag2 = ncpService.save(ncp);
- return flag2;
- } else {
- return flag;
- }
- } catch (Exception e) {
- ewmQueryWrapper.eq("ewmid", ewm.getEwmid());
- ewmService.remove(ewmQueryWrapper);
- e.printStackTrace();
- return false;
- }
- }
-
- /**
- * 农产品列表
- * @param ncp
- * @param page
- * @param limit
- * @return
- * @throws Exception
- */
- @RequestMapping("/product/list")
- @ResponseBody
- public Map productList(Ncp ncp, @RequestParam int page, @RequestParam int limit) throws Exception {
- logger.info("/handle/product/list===> ncp={}", ncp);
- logger.info("page = {}", page);
- logger.info("limit = {}", limit);
- QueryWrapper
ncpQueryWrapper = new QueryWrapper<>(); - //遍历ncp对象的属性
- Field field[] = ncp.getClass().getDeclaredFields();
- for(int i = 0; i < field.length; i++) {
- //获取属性名
- String name = field[i].getName();
- //将属性的首字符大写,方便构造get,set方法
- String getterName = name.substring(0,1).toUpperCase()+name.substring(1);
- //获取属性的类型
- String type = field[i].getGenericType().toString();
- //根据类型做操作
- if (type.equals("class java.lang.String")) {
- //获得getter方法
- Method m = ncp.getClass().getMethod("get" + getterName);
- //调用getter方法
- String value = (String) m.invoke(ncp);
- //如果非空,则加入查询条件
- if (value != null) {
- ncpQueryWrapper.eq(name, value);
- }
- }
- }
- List
ncpList = ncpService.list(ncpQueryWrapper); - logger.info("=========={}", ncpList);
- //查询到的总量,返回数据要用
- int count = ncpList.size();
- //list截取分页的索引
- int fromIndex = (page-1)*limit;
- int toIndex = page * limit;
- //截取分页数据
- if(page*limit > count) {
- toIndex = count;
- }
- ncpList = ncpList.subList(fromIndex, toIndex);
-
- Map response = new HashMap();
- response.put("code", 0);
- response.put("msg", "");
- response.put("count", count);
- response.put("data", ncpList);
-
- return response;
- }
-
- /**
- * 获取农产品表一个数据
- * @param ncp
- * @return
- */
- @RequestMapping("/product/getone")
- @ResponseBody
- public Ncp productGetone(@RequestBody Ncp ncp) {
- logger.info("/handle/product/getone===> ncp={}", ncp);
- QueryWrapper
ncpQueryWrapper = new QueryWrapper<>(); - ncpQueryWrapper.eq("ncpid", ncp.getNcpid());
- ncp = ncpService.getOne(ncpQueryWrapper);
- return ncp;
- }
-
- @RequestMapping("/product/modify")
- @ResponseBody
- public boolean productModify(@RequestBody Ncp ncp) {
- logger.info("/handle/product/modify===> ncp={}", ncp);
- QueryWrapper
ncpQueryWrapper = new QueryWrapper<>(); - ncpQueryWrapper.eq("ncpid", ncp.getNcpid());
- Ncp ncpEntity = ncpService.getOne(ncpQueryWrapper);
- ncp.setQyid(ncpEntity.getQyid());
- ncp.setEwmid(ncpEntity.getEwmid());
- UpdateWrapper
ncpUpdateWrapper = new UpdateWrapper<>(); - ncpUpdateWrapper.eq("ncpid", ncp.getNcpid());
- boolean flag = ncpService.update(ncp, ncpUpdateWrapper);
- return flag;
- }
-
- /**
- * 删除农产品
- * @param ncp
- * @return
- */
- @RequestMapping("/product/delete")
- @ResponseBody
- public boolean productDelete(@RequestBody Ncp ncp) {
- logger.info("/handle/product/list===> ncp={}", ncp);
- QueryWrapper
queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("ncpid", ncp.getNcpid());
- ncp = ncpService.getOne(queryWrapper);
- boolean flag = ncpService.remove(queryWrapper);
- if(flag) {
- QueryWrapper
ewmQueryWrapper = new QueryWrapper<>(); - ewmQueryWrapper.eq("ewmid", ncp.getEwmid());
- boolean flag2 = ewmService.remove(ewmQueryWrapper);
- return flag2;
- } else {
- return flag;
- }
- }
- }
- @Controller
- @RequestMapping("/handle")
- public class SylyController {
-
- protected Logger logger = LoggerFactory.getLogger(this.getClass());
-
- @Autowired
- private ISylyService sylyService;
-
- @Autowired
- private SylyMapper sylyMapper;
-
- private static Tool tool = new Tool();
-
- /**
- * 溯源来源计数
- * @param syly
- * @param request
- * @return
- */
- @RequestMapping("/source/count")
- @ResponseBody
- public boolean sourceCount(@RequestBody Syly syly, HttpServletRequest request) {
- logger.info("/handle/source/count===> syly={}", syly);
-
- //查询syly总数,即溯源总数
- QueryWrapper
countQueryWrapper = new QueryWrapper<>(); - countQueryWrapper.eq("syqyid", syly.getSyqyid());
- int count = sylyService.count(countQueryWrapper) + 1;
- //获取当前日期,设置溯源时间
- Date now = new Date();
- syly.setSysj(now);
- //设置溯源id
- SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
- String newNo = df.format(now);
- String syid = "syly-" + newNo + "-" + count;
- syly.setSyid(syid);
- //设置溯源ip
- String syip = request.getRemoteAddr();
- syly.setSyip(syip);
-
- boolean flag = sylyService.save(syly);
- return flag;
- }
-
- /**
- * 溯源列表
- * @param syly
- * @param page
- * @param limit
- * @return
- * @throws Exception
- */
- @RequestMapping("/source/list")
- @ResponseBody
- public Map sourceList(Syly syly, @RequestParam int page, @RequestParam int limit) throws Exception {
- logger.info("/handle/source/list===> syly={}", syly);
- logger.info("page = {}", page);
- logger.info("limit = {}", limit);
- QueryWrapper
sylyQueryWrapper = new QueryWrapper<>(); - //遍历syly对象的属性
- Field field[] = syly.getClass().getDeclaredFields();
- for(int i = 0; i < field.length; i++) {
- //获取属性名
- String name = field[i].getName();
- //将属性的首字符大写,方便构造get,set方法
- String getterName = name.substring(0,1).toUpperCase()+name.substring(1);
- //获取属性的类型
- String type = field[i].getGenericType().toString();
- //根据类型做操作
- if (type.equals("class java.lang.String")) {
- //获得getter方法
- Method m = syly.getClass().getMethod("get" + getterName);
- //调用getter方法
- String value = (String) m.invoke(syly);
- //如果非空,则加入查询条件
- if (value != null) {
- sylyQueryWrapper.eq(name, value);
- }
- }
- }
-
- List
sylyList = sylyService.list(sylyQueryWrapper); - logger.info("=========={}", sylyList);
- //查询到的总量,返回数据要用
- int count = sylyList.size();
- //list截取分页的索引
- int fromIndex = (page-1)*limit;
- int toIndex = page * limit;
- //截取分页数据
- if(page*limit > count) {
- toIndex = count;
- }
- sylyList = sylyList.subList(fromIndex, toIndex);
-
- Map response = new HashMap();
- response.put("code", 0);
- response.put("msg", "");
- response.put("count", count);
- response.put("data", sylyList);
-
- return response;
- }
-
- /**
- * 获取7天溯源数据
- * @param syly
- * @return
- */
- @RequestMapping("/source/line")
- @ResponseBody
- public Map sourceChart(@RequestBody Syly syly) {
- logger.info("/handle/source/line===> syly={}", syly);
- //groud by 溯源时间查询list
- QueryWrapper
sylyQueryWrapper = new QueryWrapper<>(); - //map对象用来储存返回数据
- Map map = new HashMap();
- //新建sysjList和counts,用于保存时间和访问数
- List
sysjList = new ArrayList<>(); - List
countList = new ArrayList<>(); - for(int i = 6; i >= 0; i--) {
- //获取i天前日期对象
- Date date = tool.getDateBefore(new Date(), i);
- //溯源时间转字符串
- SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
- String sysjString = df.format(date);
- //查询i天前溯源数量
- QueryWrapper
countQueryWrapper = new QueryWrapper<>(); - countQueryWrapper.eq("sysj", sysjString).eq("syqyid", syly.getSyqyid());
- int count = sylyService.count(countQueryWrapper);
- //将结果插入list
- countList.add(count);
- sysjList.add(sysjString);
- }
- map.put("sysjList", sysjList);
- map.put("counts",countList);
- return map;
- }
-
- /**
- * 获取溯源农产品分布数据
- * @param syly
- * @return
- */
- @RequestMapping("/source/pie")
- @ResponseBody
- public Map sourcePie(@RequestBody Syly syly) {
- logger.info("/handle/source/pie===> syly={}", syly);
- //获取溯源总数
- QueryWrapper
sylyQueryWrapper = new QueryWrapper<>(); - sylyQueryWrapper.eq("syqyid", syly.getSyqyid());
- int count = sylyService.count(sylyQueryWrapper);
- int alreadyGet = 0;
- //获取最大溯源量的4个ncp
- List
dataList = sylyMapper.selectSylyCountNcpGroupByNcpid(syly.getSyqyid()); - //新建两个列表对象储存返回数据
- List
ncpmcList = new ArrayList<>(); - List
countList = new ArrayList<>(); - //插入查询到的数据到list
- for(SylyCountNcpGroupByNcpid item : dataList) {
- ncpmcList.add(item.getNcpmc());
- countList.add(item.getCount());
- alreadyGet += item.getCount();
- }
- ncpmcList.add("其他");
- countList.add(count-alreadyGet);
- Map map = new HashMap();
- map.put("ncpmcList", ncpmcList);
- map.put("countList", countList);
- return map;
- }
-
- /**
- * 获取总溯源数
- * @param syly
- * @return
- */
- @RequestMapping("/source/total")
- @ResponseBody
- public List
sourceTotal(@RequestBody Syly syly) { - logger.info("/handle/source/total===> syly={}", syly);
- //获取溯源总数
- QueryWrapper
sylyQueryWrapper = new QueryWrapper<>(); - sylyQueryWrapper.eq("syqyid", syly.getSyqyid());
- int count = sylyService.count(sylyQueryWrapper);
- List
list = new ArrayList<>(); - list.add(count+"");
- return list;
- }
-
- /**
- * 获取当日溯源数和同比增长比例
- * @param syly
- * @return
- */
- @RequestMapping("/source/today")
- @ResponseBody
- public List
sourceToday(@RequestBody Syly syly) { - logger.info("/handle/source/today===> syly={}", syly);
- //获取今天日期
- SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
- String todayString = df.format(new Date());
- //获取昨天日期
- SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd");
- String yesterdayString = df.format(new Date(new Date().getTime()-86400000L));
- //查询今天总数
- QueryWrapper
todayQueryWrapper = new QueryWrapper<>(); - todayQueryWrapper.eq("syqyid", syly.getSyqyid()).eq("sysj", todayString);
- int todayCount = sylyService.count(todayQueryWrapper);
- //查询昨天总数
- QueryWrapper
yesterdayQueryWrapper = new QueryWrapper<>(); - yesterdayQueryWrapper.eq("syqyid", syly.getSyqyid()).eq("sysj", yesterdayString);
- int yesterdayCount = sylyService.count(yesterdayQueryWrapper);
- //算出同比增长比例
- float rise = ((float)todayCount - (float)yesterdayCount) / (float)yesterdayCount * 100;
-
- List
list = new ArrayList<>(); - list.add(todayCount+"");
- list.add(rise+"%");
- return list;
- }
-
- /**
- * 获取7天溯源人数和同比增长比例
- * @param syly
- * @return
- */
- @RequestMapping("/source/week")
- @ResponseBody
- public List
sourceWeek(@RequestBody Syly syly) { - logger.info("/handle/source/week===> syly={}", syly);
- //获取今天和七天前的日期
- SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
- String dateString = df.format(new Date());
- String weekBeforeString = df.format(tool.getDateBefore(new Date(), 6));
- //查询介于两个日期之间的总数
- QueryWrapper
countQueryWrapper = new QueryWrapper<>(); - countQueryWrapper.between("sysj", weekBeforeString, dateString).eq("syqyid", syly.getSyqyid());
- int count = sylyService.count(countQueryWrapper);
-
- //获取上一期的两个日期
- String lastDateString = df.format(tool.getDateBefore(new Date(), 7));
- String lastWeekBeforeString = df.format(tool.getDateBefore(new Date(), 13));
- //同样查询两个日期之间的总数
- QueryWrapper
lastCountQueryWrapper = new QueryWrapper<>(); - lastCountQueryWrapper.between("sysj", lastWeekBeforeString, lastDateString).eq("syqyid", syly.getSyqyid());
- int lastCount = sylyService.count(lastCountQueryWrapper);
-
- //通过两期数据算出同比增长比例
- float rise = ((float)count - (float)lastCount) / (float)lastCount * 100;
-
- //返回数据
- List
list = new ArrayList<>(); - list.add(count+"");
- list.add(rise+"%");
- return list;
- }
-
- @RequestMapping("/source/month")
- @ResponseBody
- public List
sourceMonth(@RequestBody Syly syly) { - logger.info("/handle/source/month===> syly={}", syly);
- //获取今天和30天前的日期
- SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
- String dateString = df.format(new Date());
- String monthBeforeString = df.format(tool.getDateBefore(new Date(), 29));
- //查询介于两个日期之间的总数
- QueryWrapper
countQueryWrapper = new QueryWrapper<>(); - countQueryWrapper.between("sysj", monthBeforeString, dateString).eq("syqyid", syly.getSyqyid());
- int count = sylyService.count(countQueryWrapper);
-
- //获取上一期的两个日期
- String lastDateString = df.format(tool.getDateBefore(new Date(), 30));
- String lastMonthBeforeString = df.format(tool.getDateBefore(new Date(), 59));
- //同样查询两个日期之间的总数
- QueryWrapper
lastCountQueryWrapper = new QueryWrapper<>(); - lastCountQueryWrapper.between("sysj", lastMonthBeforeString, lastDateString).eq("syqyid", syly.getSyqyid());
- int lastCount = sylyService.count(lastCountQueryWrapper);
-
- //通过两期数据算出同比增长比例
- float rise = ((float)count - (float)lastCount) / (float)lastCount * 100;
-
- //返回数据
- List
list = new ArrayList<>(); - list.add(count+"");
- list.add(rise+"%");
- return list;
- }
-
- }
如果也想学习本系统,下面领取。关注并回复:110ssm