前言
✨ **博主介绍:**一线全栈工程师,毕设实战引路人。技术栈覆盖Java、Python、C#、PHP、Node.js及UniApp跨端开发,擅长多语言项目落地与架构设计。持续分享毕设源码、开题报告、技术选型心得与职场踩坑经验。用工程化思维写代码,帮你把毕设做成作品集。👍👍
👇精彩专栏 推荐订阅👇
✅获取源码请私信✅
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以找我咨询,希望帮助更多的人❤️
系统实现
普通用户功能实现
用户注册
注册用户在访问系统首页后,可选择点击"注册"按钮,进入相应的注册页面。在该页面中,用户需完成所有注册信息必填项,点击页面下方的"注册"按钮。系统在接收到表单数据并完成验证后,若信息无误,将提示注册成功,并在自动跳转至系统的登录界面,以便用户立即进行登录操作。注册界面如下图所示。
用户注册界面
用户登录
用户在登录界面点击"登录"按钮后,需输入用户名、密码以及验证码以完成身份验证操作。系统在前端会自动对所输入信息进行有效性校验,同时检查该用户是否已通过后台审核流程。若审核通过且信息无误,则系统将允许用户成功登录并跳转至相应的功能界面;反之页面会弹出相应的提示信息,提醒用户重新输入或检查相关信息的正确性。登录界面如下图所示。
登录界面
甘肃特产
甘肃特产主要展示商品信息,提供搜索功能,普通用户可浏览商城中心详情内容,可收藏商品信息,发表评论,支持热门推荐、今日推荐等(优先推荐购买过的商品内容),实现立即购买、加入购物车操作。
甘肃特产界面
我的购物车
展示用户临时选购的产品列表,用户可以在此确认产品数量、价格,或删除不需要的产品。我的购物车界面如下图所示。
我的购物车界面
我的订单
提供用户的历史订单和当前订单的详细信息,包括每个订单的状态、预计送达时间、产品明细等。我的订单主界面如下图所示。
我的订单界面
我的地址
用户可以管理自己的收货地址,确保送达时的准确性。支持新增、修改、删除收货地址。我的地址界面如下图所示。
我的地址界面
管理员功能实现
系统用户
管理员可管理所有用户信息,包括对普通用户、商家用户和管理员等用户信息增改删查操作,支持审核、封禁、权限设置等功能。界面如下图所示。
系统用户界面
店铺信息管理管理
管理员审核商家提交的店铺资质(营业执照、食品经营许可证等),管理店铺状态(上架/下架/冻结),查看店铺评分与投诉记录。店铺信息管理界面如下图所示。
店铺信息管理界面
系统管理
系统管理:可以查看轮播图详情,以及查询、重置、删除、添加等操作。系统管理界面如下图所示:
系统管理界面
平台公告管理
管理员可以发布平台公告,管理员还可以编辑、删除或修改已发布的公告,确保公告内容的时效性和准确性。平台公告管理界面如下图所示。
平台公告管理界面
资源管理
管理员在资源管理页面查看所有把资讯文章,支持新增、编辑和删除操作。点击"新增"填写标题、内容并上传图片,选择分类后发布。可批量删除过期文章。界面如下图所示。
资源管理界面
商城管理
管理员通过商城管理模块对商品进行整体管控,包括商品的信息录入与维护、分类列表的设置与调整,以及订单列表、订单配送和订单售后的全流程管理,实现从用户下单到售后服务的闭环操作。商城管理界面如下图所示。
商城管理界面
商家用户功能实现
商城管理
商家用户可在商城管理中发布新特产,完善图片、描述、价格及库存信息,并随时编辑商品详情或控制上下架状态。通过自定义分类列表,商家能对店内商品进行二次划分,便于顾客筛选。在订单处理方面,商家可查看所有订单明细,确认收款后打印发货单,填写物流单号以更新发货状态并跟踪轨迹。此外,商家还需负责订单售后工作,与用户沟通协商退款或退货事宜,并及时上传相关凭证完成处理。界面如下图所示。
商城管理界面
数据库参考
sql
CREATE TABLE `logistics_delivery` (
`logistics_delivery_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '物流配送ID',
`order_number` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '订单号',
`product_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '商品名称',
`purchase_quantity` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '购买数量',
`total_transaction_amount` double(10,2) DEFAULT '0.00' COMMENT '交易总额',
`the_date_of_issuance` date DEFAULT NULL COMMENT '发货日期',
`delivery_number` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '配送订单',
`ordinary_users` int(11) DEFAULT '0' COMMENT '普通用户',
`shipping_address` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '收货地址',
`delivery_status` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '配送状态',
`signing_status` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '签收状态',
`recommend` int(11) NOT NULL DEFAULT '0' COMMENT '智能推荐',
`contact_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '联系人名字',
`merchant_id` int(11) DEFAULT NULL COMMENT '商家id',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`courier_type` int(11) NOT NULL DEFAULT '1' COMMENT '配送方式(1:商家配送,2:其他配送)',
`courier_id` int(11) DEFAULT NULL COMMENT '配送员ID',
`courier_name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '配送员名字',
`courier_detail` longtext COLLATE utf8mb4_general_ci COMMENT '配送详情',
PRIMARY KEY (`logistics_delivery_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='物流配送';
DROP TABLE IF EXISTS `goods`;
CREATE TABLE `goods` (
`goods_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '产品ID',
`title` varchar(125) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '标题',
`img` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '封面图:用于显示于产品列表页',
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '描述',
`price_ago` double(8,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '原价',
`price` double(8,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '卖价',
`sales` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '销量',
`inventory` int(11) NOT NULL DEFAULT '0' COMMENT '商品库存',
`type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '商品分类',
`hits` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '点击量',
`content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '正文',
`img_1` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '主图1',
`img_2` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '主图2',
`img_3` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '主图3',
`img_4` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '主图4',
`img_5` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '主图5',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`customize_field` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '自定义字段',
`source_table` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '来源表',
`source_field` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '来源字段',
`source_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '来源ID',
`user_id` int(11) unsigned DEFAULT '0' COMMENT '添加人',
`integral` int(11) DEFAULT '0' COMMENT '积分',
`list_status` smallint(1) DEFAULT '1' COMMENT '上架状态(0:下架;1上架)',
PRIMARY KEY (`goods_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='商品信息';
代码参考
java
package com.project.demo.controller;
import com.project.demo.entity.BusinessUser;
import com.project.demo.service.BusinessUserService;
import com.alibaba.fastjson.JSON;
import com.project.demo.entity.User;
import com.project.demo.controller.base.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.util.StringUtils;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.persistence.Query;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
* 商家用户:(BusinessUser)表控制层
*
*/
@RestController
@RequestMapping("/business_user")
public class BusinessUserController extends BaseController<BusinessUser, BusinessUserService> {
/**
* 商家用户对象
*/
@Autowired
public BusinessUserController(BusinessUserService service) {
setService(service);
}
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
paramMap.entrySet().removeIf(entry -> {
Object value = entry.getValue();
return value instanceof String && ((String) value).isEmpty();
});
BusinessUser business_user = new BusinessUser();
business_user.setStore_name(paramMap.get("store_name")==null?null:String.valueOf(paramMap.get("store_name")));
business_user.setBusiness_name(paramMap.get("business_name")==null?null:String.valueOf(paramMap.get("business_name")));
business_user.setBusiness_phone(paramMap.get("business_phone")==null?null:String.valueOf(paramMap.get("business_phone")));
business_user.setQualification_certificate(paramMap.get("qualification_certificate")==null?null:String.valueOf(paramMap.get("qualification_certificate")));
business_user.setExamine_state(paramMap.get("examine_state")==null?null:String.valueOf(paramMap.get("examine_state")));
business_user.setUserId(paramMap.get("user_id")==null?null:Integer.valueOf(String.valueOf(paramMap.get("user_id"))));
business_user.setCreate_by(paramMap.get("create_by")==null?null:Integer.valueOf(String.valueOf(paramMap.get("create_by"))));
this.addEntity(business_user);
System.out.println("商家用户新增成功");
return success(1);
}
@PostMapping("/set")
@Transactional
public Map<String, Object> set(HttpServletRequest request) throws IOException {
Map<String,String> queryMap = service.readQuery(request);
Map<String,String> configMap = service.readConfig(request);
Map<String,Object> paramMap = service.readBody(request.getReader());
paramMap.entrySet().removeIf(entry -> {
Object value = entry.getValue();
return value instanceof String && ((String) value).isEmpty();
});
BusinessUser business_user = new BusinessUser();
business_user.setStore_name(paramMap.get("store_name")==null?null:String.valueOf(paramMap.get("store_name")));
business_user.setBusiness_name(paramMap.get("business_name")==null?null:String.valueOf(paramMap.get("business_name")));
business_user.setBusiness_phone(paramMap.get("business_phone")==null?null:String.valueOf(paramMap.get("business_phone")));
business_user.setQualification_certificate(paramMap.get("qualification_certificate")==null?null:String.valueOf(paramMap.get("qualification_certificate")));
business_user.setExamine_state(paramMap.get("examine_state")==null?null:String.valueOf(paramMap.get("examine_state")));
business_user.setUserId(paramMap.get("user_id")==null?null:Integer.valueOf(String.valueOf(paramMap.get("user_id"))));
this.setEntity(queryMap,configMap,business_user);
System.out.println("商家用户修改成功");
return success(1);
}
/**
* 修改审核状态
*
* @param id 要修改的记录ID
* @param newState 新的审核状态
* @return 提示信息:审核成功/失败
*/
@Transactional
@GetMapping("/update_examine_state")
public String updateExamineState(Long id, String newState) throws IOException {
// 检查传入的状态是否合法
if (!newState.equals("未审核") && !newState.equals("已通过") && !newState.equals("未通过")) {
return "非法的审核状态";
}
Map<String,String> queryMap = new HashMap<>();
queryMap.put("id",String.valueOf(id));
// 根据ID查找记录
BusinessUser business_user = service.findOne(queryMap);
if (business_user!=null) {
// 更新审核状态
business_user.setExamine_state(newState);
this.setEntity(queryMap,new HashMap<>(),business_user);
return "审核成功";
} else {
return "审核失败:记录不存在";
}
}
/**
* 根据 user_id 查询用户及其附加表信息
*
* @param userId 用户ID
* @return 包含用户信息和附加信息的对象
*/
@GetMapping("/get_user_by_id")
public Map<String,Object> getUserById(Long userId) {
Map<String,String> queryMap = new HashMap<>();
queryMap.put("user_id",String.valueOf(userId));
// 查询用户基本信息
Map<String,Object> registeredMap = this.getObjByMap(queryMap);
BusinessUser business_user = JSON.parseObject(JSON.toJSONString(registeredMap),BusinessUser.class);
if (business_user != null) {
// 查询用户附加信息
Map<String,Object> userMap = this.getObjByMap(queryMap);
User user = JSON.parseObject(JSON.toJSONString(userMap),User.class);
Map<String,Object> result = new HashMap<>();
result.put("user",user);
result.put("business_user",business_user);
return result;
} else {
throw new RuntimeException("商家用户不存在}");
}
}
}
package com.project.demo.controller;
import com.project.demo.controller.base.BaseController;
import com.project.demo.entity.LogisticsDelivery;
import com.project.demo.service.LogisticsDeliveryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 物流
*
*/
@RestController
@RequestMapping("logistics_delivery")
public class LogisticsDeliveryController extends BaseController<LogisticsDelivery, LogisticsDeliveryService> {
/**
* 服务对象
*/
@Autowired
public LogisticsDeliveryController(LogisticsDeliveryService service) {
setService(service);
}
}
package com.project.demo.controller;
import com.project.demo.entity.StoreInformation;
import com.project.demo.service.StoreInformationService;
import com.alibaba.fastjson.JSON;
import com.project.demo.controller.base.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.util.StringUtils;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.persistence.Query;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
* 店铺信息:(StoreInformation)表控制层
*
*/
@RestController
@RequestMapping("/store_information")
public class StoreInformationController extends BaseController<StoreInformation, StoreInformationService> {
/**
* 店铺信息对象
*/
@Autowired
public StoreInformationController(StoreInformationService service) {
setService(service);
}
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
paramMap.entrySet().removeIf(entry -> {
Object value = entry.getValue();
return value instanceof String && ((String) value).isEmpty();
});
StoreInformation store_information = new StoreInformation();
store_information.setMerchant_number(paramMap.get("merchant_number")==null?null:String.valueOf(paramMap.get("merchant_number")));
store_information.setBusiness_user(paramMap.get("business_user")==null?null:Integer.valueOf(String.valueOf(paramMap.get("business_user"))));
store_information.setStore_name(paramMap.get("store_name")==null?null:String.valueOf(paramMap.get("store_name")));
store_information.setBusiness_name(paramMap.get("business_name")==null?null:String.valueOf(paramMap.get("business_name")));
store_information.setBusiness_phone(paramMap.get("business_phone")==null?null:String.valueOf(paramMap.get("business_phone")));
store_information.setBusiness_hours(paramMap.get("business_hours")==null?null:String.valueOf(paramMap.get("business_hours")));
store_information.setShop_signboard(paramMap.get("shop_signboard")==null?null:String.valueOf(paramMap.get("shop_signboard")));
store_information.setStore_address(paramMap.get("store_address")==null?null:String.valueOf(paramMap.get("store_address")));
store_information.setBrand_story(paramMap.get("brand_story")==null?null:String.valueOf(paramMap.get("brand_story")));
store_information.setStore_announcement(paramMap.get("store_announcement")==null?null:String.valueOf(paramMap.get("store_announcement")));
store_information.setHits(paramMap.get("hits")==null?null:Integer.valueOf(String.valueOf(paramMap.get("hits"))));
store_information.setPraise_len(paramMap.get("praise_len")==null?null:Integer.valueOf(String.valueOf(paramMap.get("praise_len"))));
store_information.setCollect_len(paramMap.get("collect_len")==null?null:Integer.valueOf(String.valueOf(paramMap.get("collect_len"))));
store_information.setComment_len(paramMap.get("comment_len")==null?null:Integer.valueOf(String.valueOf(paramMap.get("comment_len"))));
store_information.setCreate_by(paramMap.get("create_by")==null?null:Integer.valueOf(String.valueOf(paramMap.get("create_by"))));
this.addEntity(store_information);
System.out.println("店铺信息新增成功");
return success(1);
}
@PostMapping("/set")
@Transactional
public Map<String, Object> set(HttpServletRequest request) throws IOException {
Map<String,String> queryMap = service.readQuery(request);
Map<String,String> configMap = service.readConfig(request);
Map<String,Object> paramMap = service.readBody(request.getReader());
paramMap.entrySet().removeIf(entry -> {
Object value = entry.getValue();
return value instanceof String && ((String) value).isEmpty();
});
StoreInformation store_information = new StoreInformation();
store_information.setMerchant_number(paramMap.get("merchant_number")==null?null:String.valueOf(paramMap.get("merchant_number")));
store_information.setBusiness_user(paramMap.get("business_user")==null?null:Integer.valueOf(String.valueOf(paramMap.get("business_user"))));
store_information.setStore_name(paramMap.get("store_name")==null?null:String.valueOf(paramMap.get("store_name")));
store_information.setBusiness_name(paramMap.get("business_name")==null?null:String.valueOf(paramMap.get("business_name")));
store_information.setBusiness_phone(paramMap.get("business_phone")==null?null:String.valueOf(paramMap.get("business_phone")));
store_information.setBusiness_hours(paramMap.get("business_hours")==null?null:String.valueOf(paramMap.get("business_hours")));
store_information.setShop_signboard(paramMap.get("shop_signboard")==null?null:String.valueOf(paramMap.get("shop_signboard")));
store_information.setStore_address(paramMap.get("store_address")==null?null:String.valueOf(paramMap.get("store_address")));
store_information.setBrand_story(paramMap.get("brand_story")==null?null:String.valueOf(paramMap.get("brand_story")));
store_information.setStore_announcement(paramMap.get("store_announcement")==null?null:String.valueOf(paramMap.get("store_announcement")));
store_information.setHits(paramMap.get("hits")==null?null:Integer.valueOf(String.valueOf(paramMap.get("hits"))));
store_information.setPraise_len(paramMap.get("praise_len")==null?null:Integer.valueOf(String.valueOf(paramMap.get("praise_len"))));
store_information.setCollect_len(paramMap.get("collect_len")==null?null:Integer.valueOf(String.valueOf(paramMap.get("collect_len"))));
store_information.setComment_len(paramMap.get("comment_len")==null?null:Integer.valueOf(String.valueOf(paramMap.get("comment_len"))));
this.setEntity(queryMap,configMap,store_information);
System.out.println("店铺信息修改成功");
return success(1);
}
}
前端: 基于Vue.js框架构建用户界面,使用HTML5、CSS3和JavaScript实现页面结构与交互逻辑,通过Vue Router管理路由,Vuex或Pinia维护全局状态。采用Element UI或Vant组件库快速搭建界面,Axios封装HTTP请求实现与后端的数据通信。
后端: 基于springboot框架搭建,遵循Controller-Service-Mapper三层架构。Controller层接收前端请求并校验参数,Service层处理核心业务逻辑,Mapper层通过MyBatis或MyBatis-Plus完成数据库操作。使用Spring Security或Shiro结合JWT实现用户认证与权限控制。
数据库: 采用MySQL存储持久化数据,Redis缓存热点信息以提升系统性能。
开发工具: 使用IDEA开发后端,VSCode或HBuilderX开发前端,Git进行版本管理,Maven和npm分别管理前后端依赖。
源码获取
私信联系我即可~
大家点赞、收藏、关注、评论啦
👇精彩专栏 推荐订阅👇
✅获取源码请私信✅
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以找我咨询,希望帮助更多的人❤️