前言
- 💖💖作者:计算机程序员小杨
- 💙💙个人简介:我是一名计算机相关专业的从业者,擅长Java、微信小程序、Python、Golang、安卓Android等多个IT方向。会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。热爱技术,喜欢钻研新工具和框架,也乐于通过代码解决实际问题,大家有技术代码这一块的问题可以问我!
- 💛💛想说的话:感谢大家的关注与支持!
- 💕💕文末获取源码联系 计算机程序员小杨
- 💜💜
- 网站实战项目
- 安卓/小程序实战项目
- 大数据实战项目
- 深度学习实战项目
- 计算机毕业设计选题
- 💜💜
一.开发工具简介
- 开发语言:Java+Python(两个版本都支持)
- 后端框架:Spring Boot(Spring+SpringMVC+Mybatis)+Django(两个版本都支持)
- 前端:Vue+ElementUI+HTML
- 数据库:MySQL
- 系统架构:B/S
- 开发工具:IDEA(Java的)或者PyCharm(Python的)
二.系统内容简介
甘肃特产销售系统是一个基于SpringBoot和Vue技术栈开发的B/S架构电商平台,专门为甘肃地区特色农产品和手工艺品的线上销售而设计。该系统采用前后端分离的开发模式,后端使用SpringBoot框架整合Spring、SpringMVC和MyBatis技术,提供稳定可靠的API接口服务,前端采用Vue.js配合ElementUI组件库构建用户友好的交互界面,数据存储基于MySQL关系型数据库。系统核心功能涵盖用户注册登录管理、商家入驻审核管理、商品分类体系管理、特产信息展示管理、用户留言互动管理以及订单全流程管理等六大模块。平台支持用户浏览甘肃各地特产信息、在线下单购买、留言咨询互动,同时为商家提供商品上架、订单处理、客户沟通等全套电商服务功能,通过技术手段促进甘肃特产的数字化销售渠道建设。
三.系统功能演示
前后端不会连接?甘肃特产销售系统Vue+SpringBoot分离架构详解
四.系统界面展示
五.系统源码展示
import org.apache.spark.sql.SparkSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import java.util.List;
import java.time.LocalDateTime;
@RestController
@RequestMapping("/api")
public class CoreSystemController {
private SparkSession spark = SparkSession.builder().appName("GansuSpecialtySystem").master("local[*]").getOrCreate();
@Autowired
private ProductService productService;
@Autowired
private OrderService orderService;
@Autowired
private UserService userService;
@PostMapping("/products/manage")
public Result manageProduct(@RequestBody ProductManageRequest request) {
if (request.getProductName() == null || request.getProductName().trim().isEmpty()) {
return Result.error("商品名称不能为空");
}
if (request.getPrice() <= 0) {
return Result.error("商品价格必须大于零");
}
if (request.getCategoryId() == null) {
return Result.error("请选择商品类型");
}
Product product = new Product();
product.setProductName(request.getProductName().trim());
product.setDescription(request.getDescription());
product.setPrice(request.getPrice());
product.setCategoryId(request.getCategoryId());
product.setMerchantId(request.getMerchantId());
product.setStock(request.getStock());
product.setImageUrl(request.getImageUrl());
product.setStatus(1);
product.setCreateTime(LocalDateTime.now());
if (request.getProductId() != null) {
QueryWrapper<Product> wrapper = new QueryWrapper<>();
wrapper.eq("product_id", request.getProductId())
.eq("merchant_id", request.getMerchantId());
Product existProduct = productService.getOne(wrapper);
if (existProduct == null) {
return Result.error("商品不存在或无权限操作");
}
product.setProductId(request.getProductId());
product.setUpdateTime(LocalDateTime.now());
boolean updateResult = productService.updateById(product);
if (updateResult) {
return Result.success("商品信息更新成功");
} else {
return Result.error("商品信息更新失败");
}
} else {
boolean saveResult = productService.save(product);
if (saveResult) {
return Result.success("商品添加成功", product);
} else {
return Result.error("商品添加失败");
}
}
}
@PostMapping("/orders/process")
public Result processOrder(@RequestBody OrderProcessRequest request) {
if (request.getOrderId() == null) {
return Result.error("订单ID不能为空");
}
if (request.getStatus() == null || request.getStatus() < 1 || request.getStatus() > 5) {
return Result.error("订单状态值不合法");
}
QueryWrapper<Order> wrapper = new QueryWrapper<>();
wrapper.eq("order_id", request.getOrderId());
Order order = orderService.getOne(wrapper);
if (order == null) {
return Result.error("订单不存在");
}
if (order.getStatus() >= request.getStatus()) {
return Result.error("不能回退订单状态");
}
if (request.getStatus() == 2 && order.getStatus() != 1) {
return Result.error("只有待付款订单才能标记为已付款");
}
if (request.getStatus() == 3 && order.getStatus() != 2) {
return Result.error("只有已付款订单才能发货");
}
if (request.getStatus() == 4 && order.getStatus() != 3) {
return Result.error("只有已发货订单才能确认收货");
}
Order updateOrder = new Order();
updateOrder.setOrderId(request.getOrderId());
updateOrder.setStatus(request.getStatus());
updateOrder.setUpdateTime(LocalDateTime.now());
if (request.getStatus() == 2) {
updateOrder.setPayTime(LocalDateTime.now());
} else if (request.getStatus() == 3) {
updateOrder.setShipTime(LocalDateTime.now());
updateOrder.setTrackingNumber(request.getTrackingNumber());
} else if (request.getStatus() == 4) {
updateOrder.setReceiveTime(LocalDateTime.now());
} else if (request.getStatus() == 5) {
updateOrder.setFinishTime(LocalDateTime.now());
}
boolean updateResult = orderService.updateById(updateOrder);
if (updateResult) {
return Result.success("订单状态更新成功");
} else {
return Result.error("订单状态更新失败");
}
}
@PostMapping("/users/authenticate")
public Result authenticateUser(@RequestBody UserAuthRequest request) {
if (request.getUsername() == null || request.getUsername().trim().isEmpty()) {
return Result.error("用户名不能为空");
}
if (request.getPassword() == null || request.getPassword().trim().isEmpty()) {
return Result.error("密码不能为空");
}
String username = request.getUsername().trim();
String password = request.getPassword().trim();
if (username.length() < 3 || username.length() > 20) {
return Result.error("用户名长度必须在3-20个字符之间");
}
if (password.length() < 6 || password.length() > 20) {
return Result.error("密码长度必须在6-20个字符之间");
}
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("username", username);
User user = userService.getOne(wrapper);
if (user == null) {
return Result.error("用户名不存在");
}
if (user.getStatus() == 0) {
return Result.error("账户已被禁用,请联系管理员");
}
String encryptedPassword = MD5Utils.encrypt(password + user.getSalt());
if (!encryptedPassword.equals(user.getPassword())) {
User updateUser = new User();
updateUser.setUserId(user.getUserId());
updateUser.setLoginAttempts(user.getLoginAttempts() + 1);
updateUser.setLastLoginTime(LocalDateTime.now());
if (user.getLoginAttempts() >= 4) {
updateUser.setStatus(0);
userService.updateById(updateUser);
return Result.error("密码错误次数过多,账户已被锁定");
}
userService.updateById(updateUser);
return Result.error("密码错误,还可尝试" + (5 - user.getLoginAttempts()) + "次");
}
User loginUser = new User();
loginUser.setUserId(user.getUserId());
loginUser.setLoginAttempts(0);
loginUser.setLastLoginTime(LocalDateTime.now());
userService.updateById(loginUser);
String token = JwtUtils.generateToken(user.getUserId(), user.getUsername(), user.getUserType());
UserLoginResponse response = new UserLoginResponse();
response.setUserId(user.getUserId());
response.setUsername(user.getUsername());
response.setNickname(user.getNickname());
response.setUserType(user.getUserType());
response.setToken(token);
return Result.success("登录成功", response);
}
}
六.系统文档展示
结束
💕💕文末获取源码联系 计算机程序员小杨