随着网络技术的飞跃,人类的社会生活和现代信息技术呈现出不断融合的趋势,生活中的日常账单支付、网上购物、网上学习和娱乐等。二手交易平台应运而生,其主要目的是充分交换人们闲置的产品。你可以在交易平台上发布二手商品,然后有需求的人联系购买。它既经济又环保,可以开发出人人都不会浪费的好品质。
二手交易系统是一种电子商务。综合目前国内二手交易市场来看,其交易对象多为住宅、汽车等相对昂贵的商品。参与者大多是有一定工作经验和经济实力的人,而在大学校园,学生群体中也存在着大量的闲置产品,这些产品的价值相对较低,但市场潜力不容忽视,由于学生对二手交易的需求,现有校园也有一些二手交易渠道,但大多通过跳蚤市场或社交媒体发布二手商品信息,自发性强;对于交易双方而言,没有可靠的担保,选择范围有限。随着网络技术的飞跃,人类的社会生活和现代信息技术呈现出不断融合的趋势,生活中的日常账单支付、网上购物、网上学习和娱乐等。
功能介绍:
前台
注册登录、轮播图展示;
商品展示(热销商品、新品上线、分类选择商品等);
用户个人中心(修改个人信息、查看订单等);
多种支付方式(支付宝、微信、银行卡等虚拟支付);
后台
会员管理、订单管理、编辑商品、编辑分类、轮播图配置、热销商品管理、新品上线管理、为你推荐管理。
技术介绍:
Java语言,SpringBoot框架,maven依赖管理,mysql数据库,HTML页面,bootstrap框架。
部分代码展示
@Controller
public class GoodsController {
@Resource
private NewBeeMallGoodsService newBeeMallGoodsService;
@Resource
private NewBeeMallCategoryService newBeeMallCategoryService;
@GetMapping({"/search", "/search.html"})
public String searchPage(@RequestParam Map<String, Object> params, HttpServletRequest request) {
if (StringUtils.isEmpty(params.get("page"))) {
params.put("page", 1);
}
params.put("limit", Constants.GOODS_SEARCH_PAGE_LIMIT);
//封装分类数据
if (params.containsKey("goodsCategoryId") && !StringUtils.isEmpty(params.get("goodsCategoryId") + "")) {
Long categoryId = Long.valueOf(params.get("goodsCategoryId") + "");
SearchPageCategoryVO searchPageCategoryVO = newBeeMallCategoryService.getCategoriesForSearch(categoryId);
if (searchPageCategoryVO != null) {
request.setAttribute("goodsCategoryId", categoryId);
request.setAttribute("searchPageCategoryVO", searchPageCategoryVO);
}
}
//封装参数供前端回显
if (params.containsKey("orderBy") && !StringUtils.isEmpty(params.get("orderBy") + "")) {
request.setAttribute("orderBy", params.get("orderBy") + "");
}
String keyword = "";
//对keyword做过滤 去掉空格
if (params.containsKey("keyword") && !StringUtils.isEmpty((params.get("keyword") + "").trim())) {
keyword = params.get("keyword") + "";
}
request.setAttribute("keyword", keyword);
params.put("keyword", keyword);
//搜索上架状态下的商品
params.put("goodsSellStatus", Constants.SELL_STATUS_UP);
//封装商品数据
PageQueryUtil pageUtil = new PageQueryUtil(params);
request.setAttribute("pageResult", newBeeMallGoodsService.searchNewBeeMallGoods(pageUtil));
return "mall/search";
}
@GetMapping("/goods/detail/{goodsId}")
public String detailPage(@PathVariable("goodsId") Long goodsId, HttpServletRequest request) {
if (goodsId < 1) {
return "error/error_5xx";
}
NewBeeMallGoods goods = newBeeMallGoodsService.getNewBeeMallGoodsById(goodsId);
if (goods == null) {
NewBeeMallException.fail(ServiceResultEnum.GOODS_NOT_EXIST.getResult());
}
if (Constants.SELL_STATUS_UP != goods.getGoodsSellStatus()) {
NewBeeMallException.fail(ServiceResultEnum.GOODS_PUT_DOWN.getResult());
}
NewBeeMallGoodsDetailVO goodsDetailVO = new NewBeeMallGoodsDetailVO();
BeanUtil.copyProperties(goods, goodsDetailVO);
goodsDetailVO.setGoodsCarouselList(goods.getGoodsCarousel().split(","));
request.setAttribute("goodsDetail", goodsDetailVO);
return "mall/detail";
}
}
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head th:replace="mall/header::head-fragment('商城-订单列表','my-orders')">
</head>
<body>
<header th:replace="mall/header::header-fragment"></header>
<!-- nav -->
<nav th:replace="mall/header::nav-fragment"></nav>
<!-- personal -->
<div id="personal">
<div class="self-info center">
<!-- sidebar -->
<div th:replace="mall/personal-sidebar::sidebar-fragment"></div>
<div class="intro fr">
<div class="uc-box uc-main-box">
<div class="uc-content-box order-list-box">
<div class="box-hd">
<h1 class="title">我的订单
<small>请谨防钓鱼链接或诈骗电话,<a href="##">了解更多></a>
</small>
</h1>
</div>
<div class="box-bd">
<div id="J_orderList">
<ul class="order-list">
<th:block th:if="${#lists.isEmpty(orderPageResult.list)}">
<img style="margin-top: 16px;"
th:src="@{/mall/image/null-content.png}">
<small><a th:href="@{/index}"> 去购物></a>
</small>
</th:block>
<th:block th:unless="${#lists.isEmpty(orderPageResult.list)}">
<th:block th:each="order : ${orderPageResult.list}">
<li class="uc-order-item uc-order-item-list">
<div class="order-detail">
<div class="order-summary">
<th:block th:if="${order.orderStatus<0}">
<div class="order-status-closed">
</th:block>
<th:block th:if="${order.orderStatus==0}">
<div class="order-status-need-pay">
</th:block>
<th:block th:if="${order.orderStatus>0}">
<div class="order-status-success">
</th:block>
<th:block th:text="${' '+order.orderStatusString}"></th:block>
</div>
</div>
<table class="order-detail-table">
<thead>
<tr>
<th class="col-main"><p class="caption-info"
th:text="${#dates.format(order.createTime, 'yyyy-MM-dd HH:mm:ss')}">
02月07日<span
class="sep">|</span>订单号:<a
href="##"
th:text="${order.orderNo}">201908121807</a><span
class="sep">|</span>在线支付</p></th>
<th class="col-sub"><p class="caption-price">应付金额:<span
class="num"
th:text="${order.totalPrice+'.00'}">1299.00</span>元
</p></th>
</tr>
</thead>
<tbody>
<tr>
<td class="order-items">
<ul class="goods-list">
<th:block
th:each="item : ${order.newBeeMallOrderItemVOS}">
<li>
<div class="figure figure-thumb">
<a target="_blank"
th:href="@{'/goods/detail/'+${item.goodsId}}">
<img th:src="@{${item.goodsCoverImg}}"
width="80" height="80" alt="">
</a>
</div>
<p class="name"><a target="_blank"
th:href="@{'/goods/detail/'+${item.goodsId}}"
th:text="${item.goodsName}">newbee</a>
</p>
<p class="price"
th:text="${item.sellingPrice+'元 x '+item.goodsCount}">
13元 × 1</p></li>
</th:block>
</ul>
</td>
<td class="order-actions"><a class="btn btn-small btn-line-gray"
th:href="@{${'/orders/'+order.orderNo}}">订单详情</a>
</td>
</tr>
</tbody>
</table>
</div>
</li>
</th:block>
</th:block>
</ul>
</div>
<th:block th:unless="${#lists.isEmpty(orderPageResult.list)}">
<div id="J_orderListPages">
<div class="newbee-pagenavi">
<th:block th:if="${orderPageResult.currPage-2 >=1}"><a
class="numbers"
th:href="@{'/orders?page=' + ${orderPageResult.currPage-2}}"
th:text="${orderPageResult.currPage -2}">1</a>
</th:block>
<th:block th:if="${orderPageResult.currPage-1 >=1}"><a
class="numbers"
th:href="@{'/orders?page=' + ${orderPageResult.currPage-1}}"
th:text="${orderPageResult.currPage -1}">1</a>
</th:block>
<a href="##" class="numbers current" th:text="${orderPageResult.currPage}">1</a>
<th:block th:if="${orderPageResult.currPage+1<=orderPageResult.totalPage}"><a
class="numbers"
th:href="@{'/orders?page=' + ${orderPageResult.currPage+1}}"
th:text="${orderPageResult.currPage +1}">1</a></th:block>
<th:block th:if="${orderPageResult.currPage+2<=orderPageResult.totalPage}"><a
class="numbers"
th:href="@{'/orders?page=' + ${orderPageResult.currPage+2}}"
th:text="${orderPageResult.currPage +2}">1</a></th:block>
</div>
</div>
</th:block>
</div>
</div>
</div>
</div>
<div class="clear"></div>
</div>
</div>
<div th:replace="mall/footer::footer-fragment"></div>
<!-- jQuery -->
<script th:src="@{/admin/plugins/jquery/jquery.min.js}"></script>
<script th:src="@{/mall/js/search.js}" type="text/javascript"></script>
</body>
</html>
获取源码请关注后私信“20230804”