前言
✨博主介绍:一线全栈工程师,毕设实战引路人。技术栈覆盖Java、Python、C#、PHP、Node.js及UniApp跨端开发,擅长多语言项目落地与架构设计。持续分享毕设源码、开题报告、技术选型心得与职场踩坑经验。用工程化思维写代码,帮你把毕设做成作品集。👍👍
👇精彩专栏 推荐订阅👇
海量实战库,源码任你选! 坐拥Java项目2000+套
海量实战库,源码任你选! 坐拥Python项目1000+套
海量实战库,源码任你选! 坐拥小程序/app项目500+套
✅获取源码请私信✅
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以找我咨询,希望帮助更多的人❤️
系统实现
普通用户功能实现
用户注册
注册用户在访问系统首页后,可选择点击“注册”按钮,进入相应的注册页面。在该页面中,用户需完成所有注册信息必填项,点击页面下方的“注册”按钮。系统在接收到表单数据并完成验证后,若信息无误,将提示注册成功,并在自动跳转至系统的登录界面,以便用户立即进行登录操作。注册界面如下图所示。
用户注册界面
用户登录
用户在登录界面点击“登录”按钮后,需输入用户名、密码以及验证码以完成身份验证操作。系统在前端会自动对所输入信息进行有效性校验,同时检查该用户是否已通过后台审核流程。若审核通过且信息无误,则系统将允许用户成功登录并跳转至相应的功能界面;反之页面会弹出相应的提示信息,提醒用户重新输入或检查相关信息的正确性。登录界面如下图所示。
登录界面
甘肃特产
甘肃特产主要展示商品信息,提供搜索功能,普通用户可浏览商城中心详情内容,可收藏商品信息,发表评论,支持热门推荐、今日推荐等(优先推荐购买过的商品内容),实现立即购买、加入购物车操作。
甘肃特产界面
我的购物车
展示用户临时选购的产品列表,用户可以在此确认产品数量、价格,或删除不需要的产品。我的购物车界面如下图所示。
我的购物车界面
我的订单
提供用户的历史订单和当前订单的详细信息,包括每个订单的状态、预计送达时间、产品明细等。我的订单主界面如下图所示。
我的订单界面
我的地址
用户可以管理自己的收货地址,确保送达时的准确性。支持新增、修改、删除收货地址。我的地址界面如下图所示。
我的地址界面
管理员功能实现
系统用户
管理员可管理所有用户信息,包括对普通用户、商家用户和管理员等用户信息增改删查操作,支持审核、封禁、权限设置等功能。界面如下图所示。
系统用户界面
店铺信息管理管理
管理员审核商家提交的店铺资质(营业执照、食品经营许可证等),管理店铺状态(上架/下架/冻结),查看店铺评分与投诉记录。店铺信息管理界面如下图所示。
店铺信息管理界面
系统管理
系统管理:可以查看轮播图详情,以及查询、重置、删除、添加等操作。系统管理界面如下图所示:
系统管理界面
平台公告管理
管理员可以发布平台公告,管理员还可以编辑、删除或修改已发布的公告,确保公告内容的时效性和准确性。平台公告管理界面如下图所示。
平台公告管理界面
资源管理
管理员在资源管理页面查看所有把资讯文章,支持新增、编辑和删除操作。点击“新增”填写标题、内容并上传图片,选择分类后发布。可批量删除过期文章。界面如下图所示。
资源管理界面
商城管理
管理员通过商城管理模块对商品进行整体管控,包括商品的信息录入与维护、分类列表的设置与调整,以及订单列表、订单配送和订单售后的全流程管理,实现从用户下单到售后服务的闭环操作。商城管理界面如下图所示。
商城管理界面
商家用户功能实现
商城管理
商家用户可在商城管理中发布新特产,完善图片、描述、价格及库存信息,并随时编辑商品详情或控制上下架状态。通过自定义分类列表,商家能对店内商品进行二次划分,便于顾客筛选。在订单处理方面,商家可查看所有订单明细,确认收款后打印发货单,填写物流单号以更新发货状态并跟踪轨迹。此外,商家还需负责订单售后工作,与用户沟通协商退款或退货事宜,并及时上传相关凭证完成处理。界面如下图所示。
商城管理界面
数据库参考
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='商品信息';代码参考
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分别管理前后端依赖。
源码获取
私信联系我即可~
大家点赞、收藏、关注、评论啦
👇精彩专栏 推荐订阅👇
海量实战库,源码任你选! 坐拥Java项目2000+套
海量实战库,源码任你选! 坐拥Python项目1000+套
海量实战库,源码任你选! 坐拥小程序/app项目500+套
✅获取源码请私信✅
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以找我咨询,希望帮助更多的人❤️