百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

移动商城的分类查询设计、商品详情页设计、用户下单功能实现

toyiye 2024-06-21 12:43 12 浏览 0 评论

商城的分类查询设计

商城的分类查询主要用于展示一个一级分类列表,通过一级分类列表提供的分类ID(作为参数),跳转到商品控制器中进行商品查询。

分类查询主要是通过分类列表进行跳转的。分类主页的控制器SortsController 的设计代码如下所示:

@Restcontroller
@RequestMapping( "/sorts")
public class SortsController {
CAutowired
private SortsRestService sortsRestService;
@RequestMapping(value="/index")
public ModelAndview findAll() {
Gson gson= TreeMapConvert.getGson();
List<SortsQo> sortses = gson.fromJson(sortsRestService.findist (),new
TypeToken<List<SortsQ0>>(){].getType());
return new ModelAndView ( "sorts/index", "sortses",sortses);}
}

即通过链接“lindex”所在的方法中,取得分类列表数据,然后返回分类主页视图设计“index.html”。

分类主页视图设计是一个H5单页,主体部分的实现代码如下所示:

<section class="orderList">
<ul th:each-"sorts: ${sortses} ">
<li th:onclick=" 1javascript:gotoGoods ('+$ {sorts.id}+');'">
<div class-"orderInfList">
<div class="orderInfTxtclearPb">
<p><a th:href=" '/goods/index?sortsid='+${sorts.id}"
th:text="${sorts.name) "></a></p>
</div>
</div>
</li>
</ul></section>

这里只是简单地使用一个“th:each”循环语句,将一级分类列表逐条进行显示。当在操作界面上单击一个分类时,将使用分类ID作为参数,跳转到商品控制器设计中进行商品查询。

分类查询的显示效果如图9-2所示。

商品详情页设计

首先通过控制器调用商品服务接口GoodsRestService的 findByld获取数据,然后返回一个页面视图设计“show.html”,其中,控制器的实现代码如下所示:

@RestController
@RequestMapping ( "/goods")
public class GoodsController {
@Autowired
private GoodsRestService goodsRestService;
@RequestMapping (value="/{id} "')
public ModelAndView findById (@Pathvariable Long id)
String json = goodsRestService. findById(id);
GoodsQo goodsQo =new Gson().fromJson(json, GoodsQo.class);return new ModelAndView ("goods/show", "goods",goodsQ0);
}
}

页面视图设计“show.html”是一个H5单页,实现代码如下所示:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8"/>
<meta content="yes" name="apple-mobile-web-app-capable"/>
<meta content="black" name="apple-mobile-web-app-status-bar-style"<meta name="format-detection" content="telephone=no"/>
<title>商品内容</title>
<link th:href="@{/styles/main.css}" rel="stylesheet" type="text/css"<style type="text/css">
article,aside,dialog, footer,header,section, footer,nav,figure,menuldisplay:block }
</style>
<script th:src="@{/scripts/jquery-1.10.2.min.js}"></script><script th:src="@{/scripts/viewscale.js}"></script>
</head>
<body>
<div class="swiper-container" style="height: 450px;">
<div class="swiper-wrapper">
<div class="swiper-slide">
<img th:src="${ goods.photo}"/></div>
</div></div>
<div class="spxg prize">
<div class="intro" th:text="${ goods.name}">商品名称</div><div class="info">
<span class="prize">
<em>价格:¥</em><em id="priceShowl" original="0.1"
th:text="${goods.price} ">67</em>
/span>
</div>
</div>
<div class="contents">
<div class="abstract"></div>
<div th:text="${goods.contents} "></div>
</div>
<div class="fix-bottom-buy">
<input id="goodsid" name="goodsid" type="hidden"
th:value="${goods.id} "/>
<div class="col-2">
  <a id="addCartBtn" href="javascript:void(0)"
onclick="history.back();"class="btn white">返回商城</a>
<a id="buyNowBtn" th:href=" ' /order/accounts/'+${goods.id}"
class="btn red">立即购买</a>
</div>
</div></body></html>

详情页显示了商品的详细信息,并且提供了“立即购买”的跳转链接。单击“立即购买”按钮后将进行用户登录状态检查。

商品详情页设计完成之后,显示效果如图9-3所示。

用户下单功能实现

当用户在商品详情页中单击“立即购买”按钮之后,将调用OrderController控制器,代码如下所示:

@RestController
@RequestMapping ("/order")@slf4j
public class OrderController {
@Autowired
private GoodsRestService goodsRestService;
@ReguestMapping (value=" /accounts/{id} ")
public ModelAndView accounts (ModelMap model, (PathVariable Long id)(
String json = goodsRestService.findById(id);
GoodsQo goodsQo = new Gson ().fromJson(json,GoodsQo.class);return new ModelAndView( "order/accounts", "goods", goodsQ0);
}
}

首先通过商品ID取得商品信息,然后,返回一个账号视图设计。在这个视图设计中,一方面显示商品的价格,另一方面进行用户登录状态检查。

账号视图设计“accounts.html”是一个H5单页,完整的实现代码如下所示:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta  charset="utf-8"/>
<meta content="yes" name="apple-mobile-web-app-capable"/>
<meta content="black" name="apple-mobile-web-app-status-bar-style"/><meta name="format-detection" content="telephone=no"/>
<title>结算</title>
<link th:href="G{/styles/microApply.css}" rel="stylesheet"
type="text/css"/>
<link th:href="@{/styles/globalWap.css}" rel="stylesheet"
type="text/css"/>
<style type="text/css">
article,aside,dialog, footer, header, section, footer, nav, figure
menu{display:block}
</style>
<script th:src="@{/scripts/viewscale.js}"></script>
<script th:src="@(/scripts/jquery-1.10.2.min.js}"></script><script th:srC="@ {/scripts/Event_alert.js}"></script>
</head>
<body>
<div class="content prompt1">
<div class=" verifyErrO">
<span></span>
</diV>
<div class="sure"><input class="longinBtn" type="submit" value="确定
" /></div>
</div>
<input id="goodsid" name="goodsid" type="hidden"
th:value="${goods.id] "/>
<input id="merchantid" name="goodsid" type="hidden"
th:value="${goods.merchantid}"/>
<div class="content prompt2">
<div class= "verifyErro">
<span></span>
<p class="swit" th:text="'订单金额:¥'+(${ goods.price} ?
$ {#numbers.formatDecimal (goods.price,0,'COMMA',2,'POINT')}:'')">确认购买吗?</p>
<p class="countdown"></p></div>
<div class="sure">xinput class="accountsBtn" type="submit" value="
确定"/></div>
</div>
<div class="copy">关于我们</div></body>
<script>
/*<![CDATA[*/$(function(){
var storage = window. localStorage;var user = storage.getItem ("user");var userid;
var goodsid = $('#goodsid').val();
var merchantid =$('#merchantid').val();
if(user){
var a=JSON.parse(user);userid = a.userid;
//console. log (a.userid);$('.prompt1').hide ();
$('.prompt2 ').show();
}else {
$('.prompt2 ').hide();$('.prompt1') .show();
$('.longinBtn').click (function(){
$(' .accountsBtn').click(function(){
$.ajax({
url:"../buyone" ,data:{
id:goodsid,subsid:userid,
merchantid:merchantid},
type: "POST",
dataType: "json",
success: function(data){
if(data && (parseInt (data) >0)){
alertEC("购买成功!");
}else{
alertEC("下单失败!");
});
setTimeout(function(){
window . location.href="../index";}, 600);
});
});
/*]]>*/</script></html>

在这个设计中,首先对用户的账号进行检查。如果是未登录状态,则转到登录页面提示用户登录。

如果用户已经登录,则提示用户确认购买,然后执行购买下单的操作。如果下单成功,则提示“购买成功”,并从操作界面跳转到订单列表页面。

注意:这里为了“跑通”整个下单的操作流程,省略了支付的环节。

用户进行购买下单的操作是通过控制器OrderController实现的,代码如下所示:

@RestController
@RequestMapping ( "/order")@slf4j
public class OrderController {
@Autowired
private OrderRestService orderRestService;CAutowired
private GoodsRestService goodsRestService;
@RequestMapping(value="/buyone", method = RequestMethod. POST)public String buyone (GoodsQo buyone){
String json = goodsRestService.findById (buyone.getId());GoodsQo goodsQ0 = new Gson().fromJson(json,GoodsQo.class);if(goodsQ0 !=null){
Integer sum = 1;
OrderDetailQ0 orderDetailQ0 = new OrderDetailQ0();orderDetailQ0.setGoodsid(goodsQo.getId());
orderDetailQo.setGoodsname(goodsQo.getName());orderDetai1Qo.setPrice(goodsQo.getPrice());orderDetailQ0.setPhoto (goodsQo.getPhoto());orderDetailQo.setNums(sum);
orderDetailQ0.setMoney(sum * goodsQo.getPrice());
List<0rderDetailQ0> list = new ArrayList<>();
1ist .add(orderDetailQ0);
OrderQo orderQ0 = new OrderQo();orderQo.setOrder Details(list);//借用分类ID来传输用户编号
orderQo.setUserid (buyone.getSubsid());
orderQo.setMerchantid(goodsQo.getMerchantid());orderQo.setAmount(sum *goodsQo.getPrice());
orderQo.setOrderNo (new Long ( (new Date()).getTime()).toString()//已付款
orderQo. setStatus (StatusEnum. PAID.getCode());orderQo.setCreated(new Date());
String response = orderRestService.create (orderQo);
1oa.info ( "====下单结果:"+response);
//更新库存
if(response !=null) {
Integer buynum = goodsQo.getBuynum() == null ? sum : sum
goodsQ0 .getBuynum();
goodsQo.setBuynum (buynum);
goodsRestService. update(goodsQo);//下单成功
return "1";
}else{
//下单失败
return "-1";
}
//系统异常return "-2";
}
}

首先获取商品信息和用户信息,然后根据这些信息,调用订单服务接口创建一个新订单,最后调用商品服务接口更新库存信息。

如果下单成功,则通过上面的视图设计,提示下单成功。提示信息会停留600ms,随后自动跳转到订单的主页中。在订单主页中用户可以看到订单列表。

本文给大家讲解的内容SpringCloud微服务架构实战:商城的分类查询设计、商品详情页设计、用户下单功能实现

  1. 下篇文章给大家讲解的是SpringCloud微服务架构实战:商城的用户登录与账户切换设计、订单查询设计、集成测试;
  2. 觉得文章不错的朋友可以转发此文关注小编;
  3. 感谢大家的支持!

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码