黑马程序员2023JavaWeb项目Day09 用户端代码差异点

查询历史订单

1 XML 里的 大于号 和 小于号,需要替换成

如果是 直接用 >= 和 <= ,在小于等于这里的结果是,不报错,但是前端测试的时候,不能在网页端正确筛选出 某个日期之前的订单。

2 查历史订单的时候,在 service 层区分了 for user 和 for admin;

并且,接参的时候,直接用三个同名的参数去接了,我做了一个封装:

在 order service 的实现类里:

我的是通用的:

查询订单详情:

答案选择用字符串直接存一个 order 对象,我选择了 新建了一个 OrderHistoryVO, 辛辛苦苦地 copy 了一堆 order 的变量。

我的方式就显得很,,臃肿。啊,没有想到一个 对象,可以直接用 string 的。哦,这可能正是 Serializable 的作用所在!

取消订单

答案的 controller 多了 throws exception ,这让我想到自己在 service 实现层是不是漏掉了什么。哦,还有一个点,是在 order service 这里,又一次区分了 admin 和 user 端,这里是 用户的 取消订单。

果然,这里我只考虑到了状态,没有考虑到其他的异常情况:

1 订单存在检查;

2 订单状态检查;

3 订单是否需要退款;

4 最后才是我所写的,还有一个 cancelReason呢。

这些都是我欠缺的。这一块,会按照答案更新一下。

回看答案的过程,发现自己总是想当然的去 implement 代码,而不是 梳理出下面的业务规则,难怪会漏那么多判断。

业务规则:

  • 待支付和待接单状态下,用户可直接取消订单
  • 商家已接单状态下,用户取消订单需电话沟通商家
  • 派送中状态下,用户取消订单需电话沟通商家
  • 如果在待接单状态下取消订单,需要给用户退款
  • 取消订单后需要将订单状态修改为“已取消”

再来一单

同样,有业务规则理解的不一致:

人这是只添加到 购物车,没有添加到 订单呢!

/

看看我的,直接整个 copy 了新的订单了。我就是商家杀手吧:

在一个细节上,我注意到了老师又偷偷用了我不熟悉的知识:

我是老老实实遍历 copyProperties+setXX 的

(poe assistant 说):

第一段代码(将订单详情对象转换为购物车对象)的特性:

  1. 使用了Java 8 的Stream API 和 Lambda 表达式,提供了一种简洁、函数式的方式处理集合数据。
  2. 通过 BeanUtils.copyProperties 方法,可以方便地将一个对象的属性复制到另一个对象中。
  3. 使用 collect(Collectors.toList()) 将转换后的购物车对象收集到一个列表中。

第二段代码(复制订单明细)的特性:

  1. 使用传统的 for 循环遍历集合,逐个处理每个元素。
  2. 通过 BeanUtils.copyProperties方法,将一个对象的属性复制到另一个对象中。
  3. 创建一个新的订单明细对象,并对其进行修改和设置属性。
  4. 将新的订单明细对象添加到列表中。

这里涉及到了两个我不太熟的,但是一看又很眼熟的知识点,Java 8 的新特性,想上上上个月的面试还 cue 过。好,决定出两个视频讲讲。

商家端的功能代码,另开一篇 blog。


Discover more from 小匚的个人博客

Subscribe to get the latest posts sent to your email.

Leave a Reply

Discover more from 小匚的个人博客

Subscribe now to keep reading and get access to the full archive.

Continue reading

Discover more from 小匚的个人博客

Subscribe now to keep reading and get access to the full archive.

Continue reading