开发工具:IDEA
服务器:Tomcat9.0, jdk1.8
项目构建:maven
数据库:mysql5.7
系统分前后台,非前后端分离
前端技术:vue.js+elementUI等框架实现
服务端技术:springboot+mybatis-plus
项目功能描述:
系统主要分为三个角色:用户、卖家、管理员
用户功能:登录、注册、首页、个人中心、订单管理、商品求购管理、我的收藏
卖家功能:登录、注册、首页、个人中心、商品信息管理、订单管理
管理员功能:登录、首页、个人中心、用户管理、卖家管理、商品分类管理、订单管理、商品求购管理、管理员管理、留言板管理、系统管理
前台截图:
买家截图:
卖家管理:
管理员截图:
- package com.controller;
-
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
-
- import org.apache.commons.lang3.StringUtils;
- import org.json.JSONObject;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.util.ResourceUtils;
- 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.annotation.IgnoreAuth;
- import com.baidu.aip.face.AipFace;
- import com.baidu.aip.face.MatchRequest;
- import com.baidu.aip.util.Base64Util;
- import com.baomidou.mybatisplus.mapper.EntityWrapper;
- import com.baomidou.mybatisplus.mapper.Wrapper;
- import com.entity.ConfigEntity;
- import com.service.CommonService;
- import com.service.ConfigService;
- import com.utils.BaiduUtil;
- import com.utils.FileUtil;
- import com.utils.R;
-
- /**
- * 通用接口
- */
- @RestController
- public class CommonController{
- @Autowired
- private CommonService commonService;
-
- @Autowired
- private ConfigService configService;
-
- private static AipFace client = null;
-
- private static String BAIDU_DITU_AK = null;
-
- @RequestMapping("/location")
- public R location(String lng,String lat) {
- if(BAIDU_DITU_AK==null) {
- BAIDU_DITU_AK = configService.selectOne(new EntityWrapper
().eq("name", "baidu_ditu_ak")).getValue(); - if(BAIDU_DITU_AK==null) {
- return R.error("请在配置管理中正确配置baidu_ditu_ak");
- }
- }
- Map
map = BaiduUtil.getCityByLonLat(BAIDU_DITU_AK, lng, lat); - return R.ok().put("data", map);
- }
-
- /**
- * 人脸比对
- *
- * @param face1 人脸1
- * @param face2 人脸2
- * @return
- */
- @RequestMapping("/matchFace")
- public R matchFace(String face1, String face2) {
- if(client==null) {
- /*String AppID = configService.selectOne(new EntityWrapper
().eq("name", "AppID")).getValue();*/ - String APIKey = configService.selectOne(new EntityWrapper
().eq("name", "APIKey")).getValue(); - String SecretKey = configService.selectOne(new EntityWrapper
().eq("name", "SecretKey")).getValue(); - String token = BaiduUtil.getAuth(APIKey, SecretKey);
- if(token==null) {
- return R.error("请在配置管理中正确配置APIKey和SecretKey");
- }
- client = new AipFace(null, APIKey, SecretKey);
- client.setConnectionTimeoutInMillis(2000);
- client.setSocketTimeoutInMillis(60000);
- }
- JSONObject res = null;
- try {
- File file1 = new File(ResourceUtils.getFile("classpath:static/upload").getAbsolutePath()+"/"+face1);
- File file2 = new File(ResourceUtils.getFile("classpath:static/upload").getAbsolutePath()+"/"+face2);
- String img1 = Base64Util.encode(FileUtil.FileToByte(file1));
- String img2 = Base64Util.encode(FileUtil.FileToByte(file2));
- MatchRequest req1 = new MatchRequest(img1, "BASE64");
- MatchRequest req2 = new MatchRequest(img2, "BASE64");
- ArrayList
requests = new ArrayList(); - requests.add(req1);
- requests.add(req2);
- res = client.match(requests);
- System.out.println(res.get("result"));
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- return R.error("文件不存在");
- } catch (IOException e) {
- e.printStackTrace();
- }
- return R.ok().put("data", com.alibaba.fastjson.JSONObject.parse(res.get("result").toString()));
- }
-
- /**
- * 获取table表中的column列表(联动接口)
- * @param table
- * @param column
- * @return
- */
- @IgnoreAuth
- @RequestMapping("/option/{tableName}/{columnName}")
- public R getOption(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName,String level,String parent) {
- Map
params = new HashMap(); - params.put("table", tableName);
- params.put("column", columnName);
- if(StringUtils.isNotBlank(level)) {
- params.put("level", level);
- }
- if(StringUtils.isNotBlank(parent)) {
- params.put("parent", parent);
- }
- List
data = commonService.getOption(params); - return R.ok().put("data", data);
- }
-
- /**
- * 根据table中的column获取单条记录
- * @param table
- * @param column
- * @return
- */
- @IgnoreAuth
- @RequestMapping("/follow/{tableName}/{columnName}")
- public R getFollowByOption(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName, @RequestParam String columnValue) {
- Map
params = new HashMap(); - params.put("table", tableName);
- params.put("column", columnName);
- params.put("columnValue", columnValue);
- Map
result = commonService.getFollowByOption(params); - return R.ok().put("data", result);
- }
-
- /**
- * 修改table表的sfsh状态
- * @param table
- * @param map
- * @return
- */
- @RequestMapping("/sh/{tableName}")
- public R sh(@PathVariable("tableName") String tableName, @RequestBody Map
map) { - map.put("table", tableName);
- commonService.sh(map);
- return R.ok();
- }
-
- /**
- * 获取需要提醒的记录数
- * @param tableName
- * @param columnName
- * @param type 1:数字 2:日期
- * @param map
- * @return
- */
- @IgnoreAuth
- @RequestMapping("/remind/{tableName}/{columnName}/{type}")
- public R remindCount(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName,
- @PathVariable("type") String type,@RequestParam Map
map) { - map.put("table", tableName);
- map.put("column", columnName);
- map.put("type", type);
-
- if(type.equals("2")) {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
- Calendar c = Calendar.getInstance();
- Date remindStartDate = null;
- Date remindEndDate = null;
- if(map.get("remindstart")!=null) {
- Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
- c.setTime(new Date());
- c.add(Calendar.DAY_OF_MONTH,remindStart);
- remindStartDate = c.getTime();
- map.put("remindstart", sdf.format(remindStartDate));
- }
- if(map.get("remindend")!=null) {
- Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
- c.setTime(new Date());
- c.add(Calendar.DAY_OF_MONTH,remindEnd);
- remindEndDate = c.getTime();
- map.put("remindend", sdf.format(remindEndDate));
- }
- }
-
- int count = commonService.remindCount(map);
- return R.ok().put("count", count);
- }
-
- /**
- * 单列求和
- */
- @IgnoreAuth
- @RequestMapping("/cal/{tableName}/{columnName}")
- public R cal(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName) {
- Map
params = new HashMap(); - params.put("table", tableName);
- params.put("column", columnName);
- Map
result = commonService.selectCal(params); - return R.ok().put("data", result);
- }
-
- /**
- * 分组统计
- */
- @IgnoreAuth
- @RequestMapping("/group/{tableName}/{columnName}")
- public R group(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName) {
- Map
params = new HashMap(); - params.put("table", tableName);
- params.put("column", columnName);
- List
- return R.ok().put("data", result);
- }
-
- /**
- * (按值统计)
- */
- @IgnoreAuth
- @RequestMapping("/value/{tableName}/{xColumnName}/{yColumnName}")
- public R value(@PathVariable("tableName") String tableName, @PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName) {
- Map
params = new HashMap(); - params.put("table", tableName);
- params.put("xColumn", xColumnName);
- params.put("yColumn", yColumnName);
- List
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
- for(Map
m : result) { - for(String k : m.keySet()) {
- if(m.get(k) instanceof Date) {
- m.put(k, sdf.format((Date)m.get(k)));
- }
- }
- }
- return R.ok().put("data", result);
- }
-
- }
package com.controller; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.Map; import java.util.HashMap; import java.util.Iterator; import java.util.Date; import java.util.List; import javax.servlet.http.HttpServletRequest; import com.utils.ValidatorUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; 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.baomidou.mybatisplus.mapper.Wrapper; import com.annotation.IgnoreAuth; import com.entity.DiscussshangpinxinxiEntity; import com.entity.view.DiscussshangpinxinxiView; import com.service.DiscussshangpinxinxiService; import com.service.TokenService; import com.utils.PageUtils; import com.utils.R; import com.utils.MD5Util; import com.utils.MPUtil; import com.utils.CommonUtil; /** * 商品信息评论表 * 后端接口 * @author * @email * @date 2021-02-22 15:46:58 */ @RestController @RequestMapping("/discussshangpinxinxi") public class DiscussshangpinxinxiController { @Autowired private DiscussshangpinxinxiService discussshangpinxinxiService; /** * 后端列表 */ @RequestMapping("/page") public R page(@RequestParam Mapparams,DiscussshangpinxinxiEntity discussshangpinxinxi, HttpServletRequest request){ EntityWrapper ew = new EntityWrapper (); PageUtils page = discussshangpinxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, discussshangpinxinxi), params), params)); return R.ok().put("data", page); } /** * 前端列表 */ @IgnoreAuth @RequestMapping("/list") public R list(@RequestParam Map params,DiscussshangpinxinxiEntity discussshangpinxinxi, HttpServletRequest request){ EntityWrapper ew = new EntityWrapper (); PageUtils page = discussshangpinxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, discussshangpinxinxi), params), params)); return R.ok().put("data", page); } /** * 列表 */ @RequestMapping("/lists") public R list( DiscussshangpinxinxiEntity discussshangpinxinxi){ EntityWrapper ew = new EntityWrapper (); ew.allEq(MPUtil.allEQMapPre( discussshangpinxinxi, "discussshangpinxinxi")); return R.ok().put("data", discussshangpinxinxiService.selectListView(ew)); } /** * 查询 */ @RequestMapping("/query") public R query(DiscussshangpinxinxiEntity discussshangpinxinxi){ EntityWrapper< DiscussshangpinxinxiEntity> ew = new EntityWrapper< DiscussshangpinxinxiEntity>(); ew.allEq(MPUtil.allEQMapPre( discussshangpinxinxi, "discussshangpinxinxi")); DiscussshangpinxinxiView discussshangpinxinxiView = discussshangpinxinxiService.selectView(ew); return R.ok("查询商品信息评论表成功").put("data", discussshangpinxinxiView); } /** * 后端详情 */ @RequestMapping("/info/{id}") public R info(@PathVariable("id") Long id){ DiscussshangpinxinxiEntity discussshangpinxinxi = discussshangpinxinxiService.selectById(id); return R.ok().put("data", discussshangpinxinxi); } /** * 前端详情 */ @RequestMapping("/detail/{id}") public R detail(@PathVariable("id") Long id){ DiscussshangpinxinxiEntity discussshangpinxinxi = discussshangpinxinxiService.selectById(id); return R.ok().put("data", discussshangpinxinxi); } /** * 后端保存 */ @RequestMapping("/save") public R save(@RequestBody DiscussshangpinxinxiEntity discussshangpinxinxi, HttpServletRequest request){ discussshangpinxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue()); //ValidatorUtils.validateEntity(discussshangpinxinxi); discussshangpinxinxiService.insert(discussshangpinxinxi); return R.ok(); } /** * 前端保存 */ @RequestMapping("/add") public R add(@RequestBody DiscussshangpinxinxiEntity discussshangpinxinxi, HttpServletRequest request){ discussshangpinxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue()); //ValidatorUtils.validateEntity(discussshangpinxinxi); discussshangpinxinxiService.insert(discussshangpinxinxi); return R.ok(); } /** * 修改 */ @RequestMapping("/update") public R update(@RequestBody DiscussshangpinxinxiEntity discussshangpinxinxi, HttpServletRequest request){ //ValidatorUtils.validateEntity(discussshangpinxinxi); discussshangpinxinxiService.updateById(discussshangpinxinxi);//全部更新 return R.ok(); } /** * 删除 */ @RequestMapping("/delete") public R delete(@RequestBody Long[] ids){ discussshangpinxinxiService.deleteBatchIds(Arrays.asList(ids)); return R.ok(); } /** * 提醒接口 */ @RequestMapping("/remind/{columnName}/{type}") public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, @PathVariable("type") String type,@RequestParam Map map) { map.put("column", columnName); map.put("type", type); if(type.equals("2")) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar c = Calendar.getInstance(); Date remindStartDate = null; Date remindEndDate = null; if(map.get("remindstart")!=null) { Integer remindStart = Integer.parseInt(map.get("remindstart").toString()); c.setTime(new Date()); c.add(Calendar.DAY_OF_MONTH,remindStart); remindStartDate = c.getTime(); map.put("remindstart", sdf.format(remindStartDate)); } if(map.get("remindend")!=null) { Integer remindEnd = Integer.parseInt(map.get("remindend").toString()); c.setTime(new Date()); c.add(Calendar.DAY_OF_MONTH,remindEnd); remindEndDate = c.getTime(); map.put("remindend", sdf.format(remindEndDate)); } } Wrapper wrapper = new EntityWrapper (); if(map.get("remindstart")!=null) { wrapper.ge(columnName, map.get("remindstart")); } if(map.get("remindend")!=null) { wrapper.le(columnName, map.get("remindend")); } int count = discussshangpinxinxiService.selectCount(wrapper); return R.ok().put("count", count); } }