其他源码获取可以看首页: 代码老y
个人简介 :专注于毕业设计项目定制开发:springboot+vue系统,Java微信小程序,javaSSM系统等技术开发,并提供远程调试部署、代码讲解、文档指导、ppt制作等技术指导。源码获取,毕设定制可在文章末尾查看联系方式
技术范围: SpringBoot、Vue、SSM、Nodejs、小程序等设计与开发。
**本人负责:**系统功能设计、毕设开题报告的撰写、任务书的制定、中期检查PPT的制作、系统功能的具体实现、论文的撰写与辅导以及长期的答辩答疑辅导。大家在毕设选题,项目以及论文编写等相关问题都可以和我沟通,我会尽自己所能给大家解答。
感兴趣的同学可在文末获取联系
1、开发相关技术介绍
1.1 SpringBoot框架
SpringBoot 是由 Pivotal 团队开发的开源 Java 基础框架,旨在简化 Spring 应用的初始搭建以及开发过程。它通过提供一系列的"Starters"来自动配置 Spring 及其集成的第三方库,极大地降低了开发者的配置难度。SpringBoot 应用通常可以独立运行,通常打包成 JAR 文件,内置了如 Tomcat、Jetty 或 Undertow 等 Web 服务器,无需外部 Servlet SpringBoot 提倡使用 Java 注解 来优化配置流程,简化了设置步骤。此外,它还包含了一些高级的监控和管控工具,特别是 Actuator 模块,它让开发者能够方便地追踪应用程序的运行状况和性能表现。这些特点使得 SpringBoot 成为开发微服务和云应用的优选,同样适用于企业级应用。
1.2 Vue框架
Vue 是一款专为构建动态和响应式的用户界面而设计的渐进式前端框架。Vue 在与一些更为庞大和全面的框架相比之中以其轻量级和模块化的特性脱颖而出,它的核心专注于视图层的构建,这样降低学习曲线的同时也便于与现有的项目或库进行无缝集成。 Vue 的设计理念强调简洁性和实用性,使开发者可以逐步地将框架的功能集成到项目中,不管是构建小型的交互界面还是处理大型应用,Vue 均能提供强大的功能支持。这种灵活性和易用性使前端开发更加高效和灵活,也是 Vue 受到广泛欢迎的关键因素之一。
1.3 MySQL数据库
MySQL 数据库是一个使用 SQL 作为查询语言的开源关系型数据库管理系统。这个系统一开始是 MySQL AB 公司所开发的,之后经历了 Sun Microsystems 的收购,最终成为 Oracle 公司旗下的产品。MySQL 因其出色的性能、可靠性和用户友好的特性而受到青睐,正因如此它也被广泛地应用于网站开发、数据存储解决方案和企业级软件系统中。它不但支持多种操作系统,而且还功能丰富且配置灵活,基本上都能满足从小型应用到大型数据仓库的需求,也正因如此是众多开发者和企业第一个选择的数据库解决方案。
2、数据库实体设计
设计数据库,需要按照设计的流程进行,首先还是要根据需求完成实体的确定,分析实体具有的特征,还有对实体间的关联关系进行确定。最后才是使用E-R模型的表示方法,绘制本系统的E-R图。不管是使用亿图软件,还是Visio工具,对于E-R模型的表示符号都一样,通常矩形代表实体,实体间存在的关系用菱形符号表示,实体的属性也就是实体的特征用符号椭圆表示。最后使用直线将矩形,菱形和椭圆等符号连接起来。接下来就开始对本系统的E-R图进行绘制。
(1)下图是用户实体和其具备的属性。

(2)下图是公告信息实体和其具备的属性。

(3)下图是购物车实体和其具备的属性。

(4)下图是商品实体和其具备的属性。

(5)下图是商家实体和其具备的属性。

(6)下图是商品收藏实体和其具备的属性。

(7)下图是商品评价实体和其具备的属性。

(8)下图是商品订单实体和其具备的属性。

(9)下图是收货地址实体和其具备的属性。

3、数据库表设计(展示部分表)
表3.1收货地址表
|----|-----------------|---------|--------|-----|
| 序号 | 列名 | 数据类型 | 说明 | 允许空 |
| 1 | Id | Int | id | 否 |
| 2 | yonghu_id | Integer | 创建用户 | 是 |
| 3 | address_name | String | 收货人 | 是 |
| 4 | address_phone | String | 电话 | 是 |
| 5 | address_dizhi | String | 地址 | 是 |
| 6 | isdefault_types | Integer | 是否默认地址 | 是 |
| 7 | insert_time | Date | 添加时间 | 是 |
| 8 | update_time | Date | 修改时间 | 是 |
| 9 | create_time | Date | 创建时间 | 是 |
表3.2购物车表
|----|-------------|---------|------|-----|
| 序号 | 列名 | 数据类型 | 说明 | 允许空 |
| 1 | Id | Int | id | 否 |
| 2 | yonghu_id | Integer | 所属用户 | 是 |
| 3 | shangpin_id | Integer | 商品 | 是 |
| 4 | buy_number | Integer | 购买数量 | 是 |
| 5 | create_time | Date | 添加时间 | 是 |
| 6 | update_time | Date | 更新时间 | 是 |
| 7 | insert_time | Date | 创建时间 | 是 |
表3.3字典表
|----|-------------|---------|-------|-----|
| 序号 | 列名 | 数据类型 | 说明 | 允许空 |
| 1 | Id | Int | id | 否 |
| 2 | dic_code | String | 字段 | 是 |
| 3 | dic_name | String | 字段名 | 是 |
| 4 | code_index | Integer | 编码 | 是 |
| 5 | index_name | String | 编码名字 | 是 |
| 6 | super_id | Integer | 父字段id | 是 |
| 7 | beizhu | String | 备注 | 是 |
| 8 | create_time | Date | 创建时间 | 是 |
表3.4公告信息表
|----|-----------------|---------|--------|-----|
| 序号 | 列名 | 数据类型 | 说明 | 允许空 |
| 1 | Id | Int | id | 否 |
| 2 | gonggao_name | String | 公告名称 | 是 |
| 3 | gonggao_photo | String | 公告图片 | 是 |
| 4 | gonggao_types | Integer | 公告类型 | 是 |
| 5 | insert_time | Date | 公告发布时间 | 是 |
| 6 | gonggao_content | String | 公告详情 | 是 |
| 7 | create_time | Date | 创建时间 | 是 |
表3.5商家表
|----|-----------------------|------------|--------|-----|
| 序号 | 列名 | 数据类型 | 说明 | 允许空 |
| 1 | Id | Int | id | 否 |
| 2 | shangjia_name | String | 商家名称 | 是 |
| 3 | shangjia_phone | String | 联系方式 | 是 |
| 4 | shangjia_email | String | 邮箱 | 是 |
| 5 | shangjia_photo | String | 营业执照展示 | 是 |
| 6 | shangjia_address | String | 商店地址 | 是 |
| 7 | shangjia_xingji_types | Integer | 商家信用类型 | 是 |
| 8 | shangjia_yesno_types | Integer | 商家状态 | 是 |
| 9 | new_money | BigDecimal | 现有余额 | 是 |
| 10 | shangjia_content | String | 商家简介 | 是 |
| 11 | shangjia_delete | Integer | 逻辑删除 | 是 |
| 12 | create_time | Date | 创建时间 | 是 |
4、部分关键代码实现
java
package com.controller;
import java.io.File;
import java.math.BigDecimal;
import java.net.URL;
import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.*;
import java.lang.reflect.InvocationTargetException;
import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;
/**
* 收货地址
* 后端接口
* @author
* @email
*/
@RestController
@Controller
@RequestMapping("/address")
public class AddressController {
private static final Logger logger = LoggerFactory.getLogger(AddressController.class);
@Autowired
private AddressService addressService;
@Autowired
private TokenService tokenService;
@Autowired
private DictionaryService dictionaryService;
//级联表service
@Autowired
private YonghuService yonghuService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永不会进入");
else if("用户".equals(role))
params.put("yonghuId",request.getSession().getAttribute("userId"));
else if("商家".equals(role))
params.put("shangjiaId",request.getSession().getAttribute("userId"));
if(params.get("orderBy")==null || params.get("orderBy")==""){
params.put("orderBy","id");
}
PageUtils page = addressService.queryPage(params);
//字典表数据转换
List<AddressView> list =(List<AddressView>)page.getList();
for(AddressView c:list){
//修改对应字典表字段
dictionaryService.dictionaryConvert(c, request);
}
return R.ok().put("data", page);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id, HttpServletRequest request){
logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
AddressEntity address = addressService.selectById(id);
if(address !=null){
//entity转view
AddressView view = new AddressView();
BeanUtils.copyProperties( address , view );//把实体数据重构到view中
//级联表
YonghuEntity yonghu = yonghuService.selectById(address.getYonghuId());
if(yonghu != null){
BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段
view.setYonghuId(yonghu.getId());
}
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody AddressEntity address, HttpServletRequest request){
logger.debug("save方法:,,Controller:{},,address:{}",this.getClass().getName(),address.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永远不会进入");
else if("用户".equals(role))
address.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
Wrapper<AddressEntity> queryWrapper = new EntityWrapper<AddressEntity>()
.eq("yonghu_id", address.getYonghuId())
.eq("address_name", address.getAddressName())
.eq("address_phone", address.getAddressPhone())
.eq("address_dizhi", address.getAddressDizhi())
.eq("isdefault_types", address.getIsdefaultTypes())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
AddressEntity addressEntity = addressService.selectOne(queryWrapper);
if(addressEntity==null){
address.setInsertTime(new Date());
address.setCreateTime(new Date());
Integer isdefaultTypes = address.getIsdefaultTypes();
if(isdefaultTypes == 2 ){//如果当前的是默认地址,把当前用户的其他改为不是默认地址
List<AddressEntity> addressEntitys = addressService.selectList(new EntityWrapper<AddressEntity>().eq("isdefault_types",2));
if(addressEntitys != null && addressEntitys.size()>0){
for(AddressEntity a:addressEntitys)
a.setIsdefaultTypes(1);
addressService.updateBatchById(addressEntitys);
}
}
addressService.insert(address);
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
* 后端修改
*/
@RequestMapping("/update")
public R update(@RequestBody AddressEntity address, HttpServletRequest request){
logger.debug("update方法:,,Controller:{},,address:{}",this.getClass().getName(),address.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
// if(false)
// return R.error(511,"永远不会进入");
// else if("用户".equals(role))
// address.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
//根据字段查询是否有相同数据
Wrapper<AddressEntity> queryWrapper = new EntityWrapper<AddressEntity>()
.notIn("id",address.getId())
.andNew()
.eq("yonghu_id", address.getYonghuId())
.eq("address_name", address.getAddressName())
.eq("address_phone", address.getAddressPhone())
.eq("address_dizhi", address.getAddressDizhi())
.eq("isdefault_types", address.getIsdefaultTypes())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
AddressEntity addressEntity = addressService.selectOne(queryWrapper);
address.setUpdateTime(new Date());
if(addressEntity==null){
Integer isdefaultTypes = address.getIsdefaultTypes();
if(isdefaultTypes == 2 ){//如果当前的是默认地址,把当前用户的其他改为不是默认地址
List<AddressEntity> addressEntitys = addressService.selectList(new EntityWrapper<AddressEntity>().eq("isdefault_types",2));
if(addressEntitys != null && addressEntitys.size()>0){
for(AddressEntity a:addressEntitys)
a.setIsdefaultTypes(1);
addressService.updateBatchById(addressEntitys);
}
}
addressService.updateById(address);//根据id更新
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Integer[] ids){
logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
addressService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 批量上传
*/
@RequestMapping("/batchInsert")
public R save( String fileName){
logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
try {
List<AddressEntity> addressList = new ArrayList<>();//上传的东西
Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
Date date = new Date();
int lastIndexOf = fileName.lastIndexOf(".");
if(lastIndexOf == -1){
return R.error(511,"该文件没有后缀");
}else{
String suffix = fileName.substring(lastIndexOf);
if(!".xls".equals(suffix)){
return R.error(511,"只支持后缀为xls的excel文件");
}else{
URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
File file = new File(resource.getFile());
if(!file.exists()){
return R.error(511,"找不到上传文件,请联系管理员");
}else{
List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
dataList.remove(0);//删除第一行,因为第一行是提示
for(List<String> data:dataList){
//循环
AddressEntity addressEntity = new AddressEntity();
// addressEntity.setYonghuId(Integer.valueOf(data.get(0))); //创建用户 要改的
// addressEntity.setAddressName(data.get(0)); //收货人 要改的
// addressEntity.setAddressPhone(data.get(0)); //电话 要改的
// addressEntity.setAddressDizhi(data.get(0)); //地址 要改的
// addressEntity.setIsdefaultTypes(Integer.valueOf(data.get(0))); //是否默认地址 要改的
// addressEntity.setInsertTime(date);//时间
// addressEntity.setUpdateTime(new Date(data.get(0))); //修改时间 要改的
// addressEntity.setCreateTime(date);//时间
addressList.add(addressEntity);
//把要查询是否重复的字段放入map中
//电话
if(seachFields.containsKey("addressPhone")){
List<String> addressPhone = seachFields.get("addressPhone");
addressPhone.add(data.get(0));//要改的
}else{
List<String> addressPhone = new ArrayList<>();
addressPhone.add(data.get(0));//要改的
seachFields.put("addressPhone",addressPhone);
}
}
//查询是否重复
//电话
List<AddressEntity> addressEntities_addressPhone = addressService.selectList(new EntityWrapper<AddressEntity>().in("address_phone", seachFields.get("addressPhone")));
if(addressEntities_addressPhone.size() >0 ){
ArrayList<String> repeatFields = new ArrayList<>();
for(AddressEntity s:addressEntities_addressPhone){
repeatFields.add(s.getAddressPhone());
}
return R.error(511,"数据库的该表中的 [电话] 字段已经存在 存在数据为:"+repeatFields.toString());
}
addressService.insertBatch(addressList);
return R.ok();
}
}
}
}catch (Exception e){
return R.error(511,"批量插入数据异常,请联系管理员");
}
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
// 没有指定排序字段就默认id倒序
if(StringUtil.isEmpty(String.valueOf(params.get("orderBy")))){
params.put("orderBy","id");
}
PageUtils page = addressService.queryPage(params);
//字典表数据转换
List<AddressView> list =(List<AddressView>)page.getList();
for(AddressView c:list)
dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段
return R.ok().put("data", page);
}
/**
* 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id, HttpServletRequest request){
logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
AddressEntity address = addressService.selectById(id);
if(address !=null){
//entity转view
AddressView view = new AddressView();
BeanUtils.copyProperties( address , view );//把实体数据重构到view中
//级联表
YonghuEntity yonghu = yonghuService.selectById(address.getYonghuId());
if(yonghu != null){
BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
view.setYonghuId(yonghu.getId());
}
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody AddressEntity address, HttpServletRequest request){
logger.debug("add方法:,,Controller:{},,address:{}",this.getClass().getName(),address.toString());
Wrapper<AddressEntity> queryWrapper = new EntityWrapper<AddressEntity>()
.eq("yonghu_id", address.getYonghuId())
.eq("address_name", address.getAddressName())
.eq("address_phone", address.getAddressPhone())
.eq("address_dizhi", address.getAddressDizhi())
.eq("isdefault_types", address.getIsdefaultTypes())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
AddressEntity addressEntity = addressService.selectOne(queryWrapper);
if(addressEntity==null){
address.setInsertTime(new Date());
address.setCreateTime(new Date());
Integer isdefaultTypes = address.getIsdefaultTypes();
if(isdefaultTypes == 2 ){//如果当前的是默认地址,把当前用户的其他改为不是默认地址
List<AddressEntity> addressEntitys = addressService.selectList(new EntityWrapper<AddressEntity>().eq("isdefault_types",2));
if(addressEntitys != null && addressEntitys.size()>0){
for(AddressEntity a:addressEntitys)
a.setIsdefaultTypes(1);
addressService.updateBatchById(addressEntitys);
}
}
addressService.insert(address);
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
}
java
package com.controller;
import java.io.File;
import java.math.BigDecimal;
import java.net.URL;
import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.*;
import java.lang.reflect.InvocationTargetException;
import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;
/**
* 商家
* 后端接口
* @author
* @email
*/
@RestController
@Controller
@RequestMapping("/shangjia")
public class ShangjiaController {
private static final Logger logger = LoggerFactory.getLogger(ShangjiaController.class);
@Autowired
private ShangjiaService shangjiaService;
@Autowired
private TokenService tokenService;
@Autowired
private DictionaryService dictionaryService;
//级联表service
@Autowired
private YonghuService yonghuService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永不会进入");
else if("用户".equals(role))
params.put("yonghuId",request.getSession().getAttribute("userId"));
else if("商家".equals(role))
params.put("shangjiaId",request.getSession().getAttribute("userId"));
params.put("shangjiaDeleteStart",1);params.put("shangjiaDeleteEnd",1);
if(params.get("orderBy")==null || params.get("orderBy")==""){
params.put("orderBy","id");
}
PageUtils page = shangjiaService.queryPage(params);
//字典表数据转换
List<ShangjiaView> list =(List<ShangjiaView>)page.getList();
for(ShangjiaView c:list){
//修改对应字典表字段
dictionaryService.dictionaryConvert(c, request);
}
return R.ok().put("data", page);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id, HttpServletRequest request){
logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
ShangjiaEntity shangjia = shangjiaService.selectById(id);
if(shangjia !=null){
//entity转view
ShangjiaView view = new ShangjiaView();
BeanUtils.copyProperties( shangjia , view );//把实体数据重构到view中
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody ShangjiaEntity shangjia, HttpServletRequest request){
logger.debug("save方法:,,Controller:{},,shangjia:{}",this.getClass().getName(),shangjia.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永远不会进入");
Wrapper<ShangjiaEntity> queryWrapper = new EntityWrapper<ShangjiaEntity>()
.eq("username", shangjia.getUsername())
.or()
.eq("shangjia_phone", shangjia.getShangjiaPhone())
.andNew()
.eq("shangjia_delete", 1)
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
ShangjiaEntity shangjiaEntity = shangjiaService.selectOne(queryWrapper);
if(shangjiaEntity==null){
shangjia.setShangjiaYesnoTypes(1);
shangjia.setShangjiaDelete(1);
shangjia.setCreateTime(new Date());
shangjia.setPassword("123456");
shangjiaService.insert(shangjia);
return R.ok();
}else {
return R.error(511,"账户或者联系方式已经被使用");
}
}
/**
* 后端修改
*/
@RequestMapping("/update")
public R update(@RequestBody ShangjiaEntity shangjia, HttpServletRequest request){
logger.debug("update方法:,,Controller:{},,shangjia:{}",this.getClass().getName(),shangjia.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
// if(false)
// return R.error(511,"永远不会进入");
//根据字段查询是否有相同数据
Wrapper<ShangjiaEntity> queryWrapper = new EntityWrapper<ShangjiaEntity>()
.notIn("id",shangjia.getId())
.andNew()
.eq("username", shangjia.getUsername())
.or()
.eq("shangjia_phone", shangjia.getShangjiaPhone())
.andNew()
.eq("shangjia_delete", 1)
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
ShangjiaEntity shangjiaEntity = shangjiaService.selectOne(queryWrapper);
if("".equals(shangjia.getShangjiaPhoto()) || "null".equals(shangjia.getShangjiaPhoto())){
shangjia.setShangjiaPhoto(null);
}
if(shangjiaEntity==null){
shangjiaService.updateById(shangjia);//根据id更新
return R.ok();
}else {
return R.error(511,"账户或者联系方式已经被使用");
}
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Integer[] ids){
logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
ArrayList<ShangjiaEntity> list = new ArrayList<>();
for(Integer id:ids){
ShangjiaEntity shangjiaEntity = new ShangjiaEntity();
shangjiaEntity.setId(id);
shangjiaEntity.setShangjiaDelete(2);
list.add(shangjiaEntity);
}
if(list != null && list.size() >0){
shangjiaService.updateBatchById(list);
}
return R.ok();
}
/**
* 批量上传
*/
@RequestMapping("/batchInsert")
public R save( String fileName){
logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
try {
List<ShangjiaEntity> shangjiaList = new ArrayList<>();//上传的东西
Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
Date date = new Date();
int lastIndexOf = fileName.lastIndexOf(".");
if(lastIndexOf == -1){
return R.error(511,"该文件没有后缀");
}else{
String suffix = fileName.substring(lastIndexOf);
if(!".xls".equals(suffix)){
return R.error(511,"只支持后缀为xls的excel文件");
}else{
URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
File file = new File(resource.getFile());
if(!file.exists()){
return R.error(511,"找不到上传文件,请联系管理员");
}else{
List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
dataList.remove(0);//删除第一行,因为第一行是提示
for(List<String> data:dataList){
//循环
ShangjiaEntity shangjiaEntity = new ShangjiaEntity();
// shangjiaEntity.setUsername(data.get(0)); //账户 要改的
// //shangjiaEntity.setPassword("123456");//密码
// shangjiaEntity.setShangjiaName(data.get(0)); //商家名称 要改的
// shangjiaEntity.setShangjiaPhone(data.get(0)); //联系方式 要改的
// shangjiaEntity.setShangjiaEmail(data.get(0)); //邮箱 要改的
// shangjiaEntity.setShangjiaPhoto("");//照片
// shangjiaEntity.setShangjiaAddress(data.get(0)); //商店地址 要改的
// shangjiaEntity.setShangjiaXingjiTypes(Integer.valueOf(data.get(0))); //商家信用类型 要改的
// shangjiaEntity.setShangjiaYesnoTypes(Integer.valueOf(data.get(0))); //商家状态 要改的
// shangjiaEntity.setNewMoney(data.get(0)); //现有余额 要改的
// shangjiaEntity.setShangjiaContent("");//照片
// shangjiaEntity.setShangjiaDelete(1);//逻辑删除字段
// shangjiaEntity.setCreateTime(date);//时间
shangjiaList.add(shangjiaEntity);
//把要查询是否重复的字段放入map中
//账户
if(seachFields.containsKey("username")){
List<String> username = seachFields.get("username");
username.add(data.get(0));//要改的
}else{
List<String> username = new ArrayList<>();
username.add(data.get(0));//要改的
seachFields.put("username",username);
}
//联系方式
if(seachFields.containsKey("shangjiaPhone")){
List<String> shangjiaPhone = seachFields.get("shangjiaPhone");
shangjiaPhone.add(data.get(0));//要改的
}else{
List<String> shangjiaPhone = new ArrayList<>();
shangjiaPhone.add(data.get(0));//要改的
seachFields.put("shangjiaPhone",shangjiaPhone);
}
}
//查询是否重复
//账户
List<ShangjiaEntity> shangjiaEntities_username = shangjiaService.selectList(new EntityWrapper<ShangjiaEntity>().in("username", seachFields.get("username")).eq("shangjia_delete", 1));
if(shangjiaEntities_username.size() >0 ){
ArrayList<String> repeatFields = new ArrayList<>();
for(ShangjiaEntity s:shangjiaEntities_username){
repeatFields.add(s.getUsername());
}
return R.error(511,"数据库的该表中的 [账户] 字段已经存在 存在数据为:"+repeatFields.toString());
}
//联系方式
List<ShangjiaEntity> shangjiaEntities_shangjiaPhone = shangjiaService.selectList(new EntityWrapper<ShangjiaEntity>().in("shangjia_phone", seachFields.get("shangjiaPhone")).eq("shangjia_delete", 1));
if(shangjiaEntities_shangjiaPhone.size() >0 ){
ArrayList<String> repeatFields = new ArrayList<>();
for(ShangjiaEntity s:shangjiaEntities_shangjiaPhone){
repeatFields.add(s.getShangjiaPhone());
}
return R.error(511,"数据库的该表中的 [联系方式] 字段已经存在 存在数据为:"+repeatFields.toString());
}
shangjiaService.insertBatch(shangjiaList);
return R.ok();
}
}
}
}catch (Exception e){
return R.error(511,"批量插入数据异常,请联系管理员");
}
}
/**
* 登录
*/
@IgnoreAuth
@RequestMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
ShangjiaEntity shangjia = shangjiaService.selectOne(new EntityWrapper<ShangjiaEntity>().eq("username", username));
if(shangjia==null || !shangjia.getPassword().equals(password))
return R.error("账号或密码不正确");
else if(shangjia.getShangjiaDelete() != 1)
return R.error("账户已被删除");
else if(shangjia.getShangjiaYesnoTypes() != 2){
if(shangjia.getShangjiaYesnoTypes() == 1)
return R.error("商铺正在审核中,请等待");
if(shangjia.getShangjiaYesnoTypes() == 3)
return R.error("商铺审核已被拒绝.");
}
// // 获取监听器中的字典表
// ServletContext servletContext = ContextLoader.getCurrentWebApplicationContext().getServletContext();
// Map<String, Map<Integer, String>> dictionaryMap= (Map<String, Map<Integer, String>>) servletContext.getAttribute("dictionaryMap");
// Map<Integer, String> role_types = dictionaryMap.get("role_types");
// role_types.get(.getRoleTypes());
String token = tokenService.generateToken(shangjia.getId(),username, "shangjia", "商家");
R r = R.ok();
r.put("token", token);
r.put("role","商家");
r.put("username",shangjia.getShangjiaName());
r.put("tableName","shangjia");
r.put("userId",shangjia.getId());
return r;
}
/**
* 注册
*/
@IgnoreAuth
@PostMapping(value = "/register")
public R register(@RequestBody ShangjiaEntity shangjia){
// ValidatorUtils.validateEntity(user);
Wrapper<ShangjiaEntity> queryWrapper = new EntityWrapper<ShangjiaEntity>()
.eq("username", shangjia.getUsername())
.or()
.eq("shangjia_phone", shangjia.getShangjiaPhone())
.andNew()
.eq("shangjia_delete", 1)
;
ShangjiaEntity shangjiaEntity = shangjiaService.selectOne(queryWrapper);
if(shangjiaEntity != null)
return R.error("账户或者联系方式已经被使用");
shangjia.setShangjiaXingjiTypes(1);
shangjia.setShangjiaYesnoTypes(1);
shangjia.setNewMoney(0.0);
shangjia.setShangjiaDelete(1);
shangjia.setCreateTime(new Date());
shangjiaService.insert(shangjia);
return R.ok();
}
/**
* 重置密码
*/
@GetMapping(value = "/resetPassword")
public R resetPassword(Integer id){
ShangjiaEntity shangjia = new ShangjiaEntity();
shangjia.setPassword("123456");
shangjia.setId(id);
shangjiaService.updateById(shangjia);
return R.ok();
}
/**
* 忘记密码
*/
@IgnoreAuth
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request) {
ShangjiaEntity shangjia = shangjiaService.selectOne(new EntityWrapper<ShangjiaEntity>().eq("username", username));
if(shangjia!=null){
shangjia.setPassword("123456");
boolean b = shangjiaService.updateById(shangjia);
if(!b){
return R.error();
}
}else{
return R.error("账号不存在");
}
return R.ok();
}
/**
* 获取用户的session用户信息
*/
@RequestMapping("/session")
public R getCurrShangjia(HttpServletRequest request){
Integer id = (Integer)request.getSession().getAttribute("userId");
ShangjiaEntity shangjia = shangjiaService.selectById(id);
if(shangjia !=null){
//entity转view
ShangjiaView view = new ShangjiaView();
BeanUtils.copyProperties( shangjia , view );//把实体数据重构到view中
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 退出
*/
@GetMapping(value = "logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
// 没有指定排序字段就默认id倒序
if(StringUtil.isEmpty(String.valueOf(params.get("orderBy")))){
params.put("orderBy","id");
}
PageUtils page = shangjiaService.queryPage(params);
//字典表数据转换
List<ShangjiaView> list =(List<ShangjiaView>)page.getList();
for(ShangjiaView c:list)
dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段
return R.ok().put("data", page);
}
/**
* 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id, HttpServletRequest request){
logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
ShangjiaEntity shangjia = shangjiaService.selectById(id);
if(shangjia !=null){
//entity转view
ShangjiaView view = new ShangjiaView();
BeanUtils.copyProperties( shangjia , view );//把实体数据重构到view中
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody ShangjiaEntity shangjia, HttpServletRequest request){
logger.debug("add方法:,,Controller:{},,shangjia:{}",this.getClass().getName(),shangjia.toString());
Wrapper<ShangjiaEntity> queryWrapper = new EntityWrapper<ShangjiaEntity>()
.eq("username", shangjia.getUsername())
.or()
.eq("shangjia_phone", shangjia.getShangjiaPhone())
.andNew()
.eq("shangjia_delete", 1)
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
ShangjiaEntity shangjiaEntity = shangjiaService.selectOne(queryWrapper);
if(shangjiaEntity==null){
shangjia.setShangjiaYesnoTypes(1);
shangjia.setShangjiaDelete(1);
shangjia.setCreateTime(new Date());
shangjia.setPassword("123456");
shangjiaService.insert(shangjia);
return R.ok();
}else {
return R.error(511,"账户或者联系方式已经被使用");
}
}
}
java
package com.controller;
import java.io.File;
import java.math.BigDecimal;
import java.net.URL;
import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.*;
import java.lang.reflect.InvocationTargetException;
import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;
/**
* 商品评价
* 后端接口
* @author
* @email
*/
@RestController
@Controller
@RequestMapping("/shangpinCommentback")
public class ShangpinCommentbackController {
private static final Logger logger = LoggerFactory.getLogger(ShangpinCommentbackController.class);
@Autowired
private ShangpinCommentbackService shangpinCommentbackService;
@Autowired
private TokenService tokenService;
@Autowired
private DictionaryService dictionaryService;
//级联表service
@Autowired
private ShangpinService shangpinService;
@Autowired
private YonghuService yonghuService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永不会进入");
else if("用户".equals(role))
params.put("yonghuId",request.getSession().getAttribute("userId"));
else if("商家".equals(role))
params.put("shangjiaId",request.getSession().getAttribute("userId"));
if(params.get("orderBy")==null || params.get("orderBy")==""){
params.put("orderBy","id");
}
PageUtils page = shangpinCommentbackService.queryPage(params);
//字典表数据转换
List<ShangpinCommentbackView> list =(List<ShangpinCommentbackView>)page.getList();
for(ShangpinCommentbackView c:list){
//修改对应字典表字段
dictionaryService.dictionaryConvert(c, request);
}
return R.ok().put("data", page);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id, HttpServletRequest request){
logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
ShangpinCommentbackEntity shangpinCommentback = shangpinCommentbackService.selectById(id);
if(shangpinCommentback !=null){
//entity转view
ShangpinCommentbackView view = new ShangpinCommentbackView();
BeanUtils.copyProperties( shangpinCommentback , view );//把实体数据重构到view中
//级联表
ShangpinEntity shangpin = shangpinService.selectById(shangpinCommentback.getShangpinId());
if(shangpin != null){
BeanUtils.copyProperties( shangpin , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段
view.setShangpinId(shangpin.getId());
}
//级联表
YonghuEntity yonghu = yonghuService.selectById(shangpinCommentback.getYonghuId());
if(yonghu != null){
BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段
view.setYonghuId(yonghu.getId());
}
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody ShangpinCommentbackEntity shangpinCommentback, HttpServletRequest request){
logger.debug("save方法:,,Controller:{},,shangpinCommentback:{}",this.getClass().getName(),shangpinCommentback.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永远不会进入");
else if("用户".equals(role))
shangpinCommentback.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
shangpinCommentback.setInsertTime(new Date());
shangpinCommentback.setCreateTime(new Date());
shangpinCommentbackService.insert(shangpinCommentback);
return R.ok();
}
/**
* 后端修改
*/
@RequestMapping("/update")
public R update(@RequestBody ShangpinCommentbackEntity shangpinCommentback, HttpServletRequest request){
logger.debug("update方法:,,Controller:{},,shangpinCommentback:{}",this.getClass().getName(),shangpinCommentback.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
// if(false)
// return R.error(511,"永远不会进入");
// else if("用户".equals(role))
// shangpinCommentback.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
//根据字段查询是否有相同数据
Wrapper<ShangpinCommentbackEntity> queryWrapper = new EntityWrapper<ShangpinCommentbackEntity>()
.eq("id",0)
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
ShangpinCommentbackEntity shangpinCommentbackEntity = shangpinCommentbackService.selectOne(queryWrapper);
shangpinCommentback.setUpdateTime(new Date());
if(shangpinCommentbackEntity==null){
shangpinCommentbackService.updateById(shangpinCommentback);//根据id更新
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Integer[] ids){
logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
shangpinCommentbackService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 批量上传
*/
@RequestMapping("/batchInsert")
public R save( String fileName){
logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
try {
List<ShangpinCommentbackEntity> shangpinCommentbackList = new ArrayList<>();//上传的东西
Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
Date date = new Date();
int lastIndexOf = fileName.lastIndexOf(".");
if(lastIndexOf == -1){
return R.error(511,"该文件没有后缀");
}else{
String suffix = fileName.substring(lastIndexOf);
if(!".xls".equals(suffix)){
return R.error(511,"只支持后缀为xls的excel文件");
}else{
URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
File file = new File(resource.getFile());
if(!file.exists()){
return R.error(511,"找不到上传文件,请联系管理员");
}else{
List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
dataList.remove(0);//删除第一行,因为第一行是提示
for(List<String> data:dataList){
//循环
ShangpinCommentbackEntity shangpinCommentbackEntity = new ShangpinCommentbackEntity();
// shangpinCommentbackEntity.setShangpinId(Integer.valueOf(data.get(0))); //商品 要改的
// shangpinCommentbackEntity.setYonghuId(Integer.valueOf(data.get(0))); //用户 要改的
// shangpinCommentbackEntity.setShangpinCommentbackText(data.get(0)); //评价内容 要改的
// shangpinCommentbackEntity.setInsertTime(date);//时间
// shangpinCommentbackEntity.setReplyText(data.get(0)); //回复内容 要改的
// shangpinCommentbackEntity.setUpdateTime(new Date(data.get(0))); //回复时间 要改的
// shangpinCommentbackEntity.setCreateTime(date);//时间
shangpinCommentbackList.add(shangpinCommentbackEntity);
//把要查询是否重复的字段放入map中
}
//查询是否重复
shangpinCommentbackService.insertBatch(shangpinCommentbackList);
return R.ok();
}
}
}
}catch (Exception e){
return R.error(511,"批量插入数据异常,请联系管理员");
}
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
// 没有指定排序字段就默认id倒序
if(StringUtil.isEmpty(String.valueOf(params.get("orderBy")))){
params.put("orderBy","id");
}
PageUtils page = shangpinCommentbackService.queryPage(params);
//字典表数据转换
List<ShangpinCommentbackView> list =(List<ShangpinCommentbackView>)page.getList();
for(ShangpinCommentbackView c:list)
dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段
return R.ok().put("data", page);
}
/**
* 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id, HttpServletRequest request){
logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
ShangpinCommentbackEntity shangpinCommentback = shangpinCommentbackService.selectById(id);
if(shangpinCommentback !=null){
//entity转view
ShangpinCommentbackView view = new ShangpinCommentbackView();
BeanUtils.copyProperties( shangpinCommentback , view );//把实体数据重构到view中
//级联表
ShangpinEntity shangpin = shangpinService.selectById(shangpinCommentback.getShangpinId());
if(shangpin != null){
BeanUtils.copyProperties( shangpin , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
view.setShangpinId(shangpin.getId());
}
//级联表
YonghuEntity yonghu = yonghuService.selectById(shangpinCommentback.getYonghuId());
if(yonghu != null){
BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
view.setYonghuId(yonghu.getId());
}
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody ShangpinCommentbackEntity shangpinCommentback, HttpServletRequest request){
logger.debug("add方法:,,Controller:{},,shangpinCommentback:{}",this.getClass().getName(),shangpinCommentback.toString());
shangpinCommentback.setInsertTime(new Date());
shangpinCommentback.setCreateTime(new Date());
shangpinCommentbackService.insert(shangpinCommentback);
return R.ok();
}
}
5、系统实现
5.1 商品管理

5.2 公告信息管理

5.3公告类型管理

源码获取
谢谢大家点赞、收藏、关注、评论,查看主页获取联系方式或下方vx👇🏻👇🏻👇🏻
yyy100667