DUMP3.5 企业级电商项目
购物车模块
加入商品 更新商品数 查询商品数 移除商品 单选/取消 全选/取消 购物车列表
【浮点型商业运算精度丢失问题】ej1st 一书提到 float double只适合科研计算,BigDecimal(String)构造型用作商业运算。
BigDecimalUtil
【高复用的核心方法】处理 Cart Product CartProductVO CartVO(cartProductVOList)

// 底层 pojo cart product 是一对一的关系 。vo cartvo cartproductvo 是 一对多的关系。
// 思路
目标数据: 根据库存、选中状态(全选、单选)修正后 limit操作之后有效数据(计算总价、即时修改选中状态)。
1. assembleCartProductVO: 涉及 CartMapper ,根据 productId 涉及 ProductMapper,
2. 【库存和购买数量】其中 cartProductVO 在修正购买数量 查询下 真实库存,更新字段 limitQuantity 给前端提示客人。
购买数量 这个字段 在 Cart CartProductVO 都出现了,需要手动同步更新,
3.【计算总价和选中状态】买 n 件产品 放到购物车里 (最终总价 = n件产品遍历计算总价。)
单样产品有单样产品的选中状态,选不选中决定了 购物车最终总价 ,每次都是重新计算。
选中状态: cart - product 是1对1,那么cart选中更新到cartproductvo里面,最终cartvo有一个 商品选中非选中列表,都是通过遍历得来。
【加入商品】创建抽象 VO ,结合产品 和 购物车条目 ,核心字段 limitQuantity 用于提示客人 ,这样的 VO 对应一条购物车真实条目。
创建抽象 VO ,用来整个购物车条目存放,总价,已选条目,imageHost之类的。
【批量删除商品】和前端约定request传 "," 逗号分隔productIds。
1.利用 guava 的 Splitter.on(",").spiltToList(productIds) 得到集合。
2.编写 sql ,delete from ... 删除 cart 记录。
<delete id="deleteByUserIdProductIds" parameterType="map">
DELETE FROM mmall_cart
WHERE user_id = #{userId}
<if test="productIds != null">
and product_id in
<foreach collection="productIds" item="item" index="index" open="(" separator="," close=")">
#{item}
</foreach>
</if>
</delete>
【购物车统计商品数量】
使用 sql 聚合函数细节:返回 对象 结果,如果是字段不存在返回则是 null 。抛给 mybatis 、serivice 都不好,提供默认值比较好。
SELECT IFNULL(sum(quantity),) FROM mmall_cart
WHERE user_id = #{userId}
……………………………………………………………………………………………………………………………………………………………………
【收货地址模块】
添加地址 删除地址 更新地址 地址列表 地址分页 地址详情
【spring MVC 数据绑定 对象绑定】链接 (文档目标 递归可重用,易维护。)
【mybatis 自动生成主键、配置、使用】【场景:插入一条新纪录立即返回 给前端 id】keyProperty所指定的 id 将填充到 pojo 上。
<insert id="insert" parameterType="com.mmall.pojo.Shipping" useGeneratedKeys="true" keyProperty="id">
【避免横向越权】删除地址,只传shippingId,有可能删除其他用户的收获地址。解决:增加一个 userId的Mapper方法。
更新地址,横向越权。解决:增加 userId ... Mapper方法。
原则 任何时候只信任 session 携带的attribute ,比如关联的userId 。
【地址分页】
@Override
public ServerResponse<PageInfo> list(Integer userId,int pageNum, int pageSize) {
PageHelper.startPage(pageNum,pageSize);
List<Shipping> shippingList = shippingMapper.selectByUserId(userId);
PageInfo pageInfo = new PageInfo(shippingList);//直接用
return ServerResponse.createBySuccess(pageInfo);
}
DUMP3.5 企业级电商项目的更多相关文章
- Java企业级电商项目架构演进之路 Tomcat集群与Redis分布式
史诗级Java/JavaWeb学习资源免费分享 欢迎关注我的微信公众号:"Java面试通关手册"(坚持原创,分享各种Java学习资源,面试题,优质文章,以及企业级Java实战项目回 ...
- Java从零到企业级电商项目实战
欢迎关注我的微信公众号:"Java面试通关手册"(坚持原创,分享各种Java学习资源,面试题,优质文章,以及企业级Java实战项目回复关键字免费领取)回复关键字:"电商项 ...
- DUMP3 企业级电商项目
[开发模式]controller - service(合法校验问题) - dao 反过来也没问题 用户模块 登录 注册 用户名验证(实时反馈前端) 忘记密码 重置密码 退出登录 更新用户信息 获取 ...
- DUMP 5 企业级电商项目
[订单模块] 创建订单 商品信息 订单列表 订单详情 取消订单 订单列表 订单搜素 订单详情 订单发货 [创建订单] 购物车勾选商品 涉及 Cart Product => 一个商品 ...
- DUMP 3.8 企业级电商项目 支付宝之类
① 沙箱登录:https://openhome.alipay.com/platform/appDaily.htm 获得一个 使用环境描述 APPID.授权回调地址.沙箱钱包哪里下载之类的 ② 沙箱环境 ...
- DUMP4 企业级电商项目 —— 对接支付宝扫码支付
延展 <谈谈微信支付曝出的漏洞> [联调 DEMO下载地址]https://docs.open.alipay.com/194/105201/ [内置 一份 说明文档可做参考] [impor ...
- DUMP2 企业级电商项目
正常设计数据库表,按照数据流向. ~~闭环核心业务 [1用户]登录 =>浏览[2分类]+浏览[3商品]=>加入[4购物车]=>结算[5订单]+[6收货地址]=>[7支付] [购 ...
- DUMP1 企业级电商项目
系统:centos6 配置mirror阿里云 https://opsx.alibaba.com/mirror 远程管理首选:ssh 账户密码登录(ssh user@host) 或者 本地私钥连接服务器 ...
- 从0到上线开发企业级电商项目_前端_01_sublime使用技巧
一.用户设置 { "color_scheme": "Packages/Color Scheme - Default/Monokai.tmTheme", &quo ...
随机推荐
- Jenkins之Job建立-运行本地脚本
新建一个自由风格的项目,运行本地脚本 1.点击菜单栏中的“新任务” 2.进入该页面后输入一个项目名称,然后选择“构建一个自由风格的软件项目”,滑动到最底端,点击ok(在左下角) 3.进入下图页面后 “ ...
- SQL CREATE INDEX 语句
CREATE INDEX 语句用于在表中创建索引. 在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据. 索引 您可以在表中创建索引,以便更加快速高效地查询数据. 用户无法看到索引,它们只 ...
- ESP8266天线问题
http://www.icxbk.com/ask/detail/28832.html 目前市面上常见的外接天线包括 1.FPC天线,就是一小块柔性PCB,上面走一个铜线,下方不覆铜,然后一般带一个贴纸 ...
- python实现数据结构单链表
#python实现数据结构单链表 # -*- coding: utf-8 -*- class Node(object): """节点""" ...
- future builder
import 'package:flutter/material.dart';import 'dart:convert';import 'package:http/http.dart' as http ...
- 一、TensorFlow初探
目录 计算模型 数据模型 运行模型 TensorFlow及神经网络 import tensorflow as tf a = tf.constant([1.0, 2.0], name='a', dtyp ...
- spring @CrossOrigin解决跨域问题
阅读目录: 一.跨域(CORS)支持: 二.使用方法: 1.controller配置CORS 2.全局CORS配置 3.XML命名空间 4.How does it work? 5.基于过滤器的CORS ...
- mapreduce map 的个数
在map阶段读取数据前,FileInputFormat会将输入文件分割成split.split的个数决定了map的个数.影响map个数(split个数)的主要因素有: 1) 文件的大小.当块(dfs. ...
- Linux(Ubuntu)使用日记------ssh远程登录腾讯云
不知道是我自己电脑的问题还是其他的问题.总之在我的折腾之下算是用ssh连接上了我的腾讯云. 具体步骤: 1.生成密钥 ssh-keygen -t rsa 执行命令会出现这样,执行后让你输入东西的全部回 ...
- 【Machine Translation】CMU的NMT教程论文:最全面的神经机器翻译学习教程
这是一篇CMU发的神经机器翻译教程论文,很全很详细,适合新手阅读,即使没有什么MT.DNN.RNN的基础知识. 另外它还配套了CMU自己的一个框架DyNet的练习. 全文共9章,从统计语言模型到DNN ...