购物车模块

加入商品 更新商品数 查询商品数 移除商品 单选/取消 全选/取消  购物车列表

【浮点型商业运算精度丢失问题】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 企业级电商项目的更多相关文章

  1. Java企业级电商项目架构演进之路 Tomcat集群与Redis分布式

    史诗级Java/JavaWeb学习资源免费分享 欢迎关注我的微信公众号:"Java面试通关手册"(坚持原创,分享各种Java学习资源,面试题,优质文章,以及企业级Java实战项目回 ...

  2. Java从零到企业级电商项目实战

    欢迎关注我的微信公众号:"Java面试通关手册"(坚持原创,分享各种Java学习资源,面试题,优质文章,以及企业级Java实战项目回复关键字免费领取)回复关键字:"电商项 ...

  3. DUMP3 企业级电商项目

    [开发模式]controller - service(合法校验问题) - dao   反过来也没问题 用户模块 登录 注册 用户名验证(实时反馈前端) 忘记密码 重置密码 退出登录 更新用户信息 获取 ...

  4. DUMP 5 企业级电商项目

    [订单模块] 创建订单 商品信息  订单列表  订单详情 取消订单 订单列表  订单搜素  订单详情  订单发货 [创建订单]  购物车勾选商品 涉及 Cart Product  => 一个商品 ...

  5. DUMP 3.8 企业级电商项目 支付宝之类

    ① 沙箱登录:https://openhome.alipay.com/platform/appDaily.htm 获得一个 使用环境描述 APPID.授权回调地址.沙箱钱包哪里下载之类的 ② 沙箱环境 ...

  6. DUMP4 企业级电商项目 —— 对接支付宝扫码支付

    延展 <谈谈微信支付曝出的漏洞> [联调 DEMO下载地址]https://docs.open.alipay.com/194/105201/ [内置 一份 说明文档可做参考] [impor ...

  7. DUMP2 企业级电商项目

    正常设计数据库表,按照数据流向. ~~闭环核心业务 [1用户]登录 =>浏览[2分类]+浏览[3商品]=>加入[4购物车]=>结算[5订单]+[6收货地址]=>[7支付] [购 ...

  8. DUMP1 企业级电商项目

    系统:centos6 配置mirror阿里云 https://opsx.alibaba.com/mirror 远程管理首选:ssh 账户密码登录(ssh user@host) 或者 本地私钥连接服务器 ...

  9. 从0到上线开发企业级电商项目_前端_01_sublime使用技巧

    一.用户设置 { "color_scheme": "Packages/Color Scheme - Default/Monokai.tmTheme", &quo ...

随机推荐

  1. 网络编程_tcp与dup协议简单应用

    老师的博客:http://www.cnblogs.com/Eva-J/articles/8066842.html 计算机网络基础 :http://www.cnblogs.com/Eva-J/artic ...

  2. Linux下的快速配置虚拟环境virtualenvwrapper

    一 安装包 pip3 install virtualenv virtualenvwrapper 二 设置linux的用户个人配置文件~/.bashrc WORKON_HOME=~/Envs 设置vir ...

  3. Python开发【前端篇】HTML

    1.html概述和基本结构 html概述 HTML是 HyperText Mark-up Language 的首字母简写,意思是超文本标记语言,超文本指的是超链接,标记指的是标签,是一种用来制作网页的 ...

  4. 离线搭建Android Studio开发环境

    https://blog.csdn.net/lilang_9920/article/details/81005345 自媒体可放心发,到时候再删就行了,to thi tha

  5. 苹果绿RGB值

    ESL的值为:85,123,205 RGB的值为:199,237,204 ESL和RGB只需填一个即可,另一个会自动调整~

  6. 使用Jasypt对SpringBoot配置文件加密(转)

    文章转自   https://www.jianshu.com/p/323ec96c46d2 引入jasypt <dependency> <groupId>com.github. ...

  7. MyIASM和Innodb引擎详解

    MyIASM 和 Innodb引擎详解 Innodb引擎 Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别,关于数据库事务与其隔离级别的内容请见数据库事务与其隔离级 ...

  8. Spring:AOP面向切面编程

    AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果. AOP是软件开发思想阶段性的产物,我们比较熟悉面向过程O ...

  9. 乐观锁vs悲观锁

    引言 为什么需要锁(并发控制) 在并发的环境中,会存在多个用户同时更新同一条数据,这时就会产生冲突. 冲突结果: 丢失更新:一个事务的更新覆盖了其它事务的更新结果,就是所谓的更新丢失. 脏读:当一个事 ...

  10. Mac之brew使用

    brew : 终端程序管理工具 能让你更快速的安装你想要的工具.而不用考虑大量的依赖. 安装命令 给官网的一样也可以自己去官网查看 它就类似于centos下的yum 和 Ubuntu下的apt-get ...