查询历史订单
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 说):
第一段代码(将订单详情对象转换为购物车对象)的特性:
- 使用了Java 8 的Stream API 和 Lambda 表达式,提供了一种简洁、函数式的方式处理集合数据。
- 通过 BeanUtils.copyProperties 方法,可以方便地将一个对象的属性复制到另一个对象中。
- 使用 collect(Collectors.toList()) 将转换后的购物车对象收集到一个列表中。
第二段代码(复制订单明细)的特性:
- 使用传统的 for 循环遍历集合,逐个处理每个元素。
- 通过 BeanUtils.copyProperties方法,将一个对象的属性复制到另一个对象中。
- 创建一个新的订单明细对象,并对其进行修改和设置属性。
- 将新的订单明细对象添加到列表中。
这里涉及到了两个我不太熟的,但是一看又很眼熟的知识点,Java 8 的新特性,想上上上个月的面试还 cue 过。好,决定出两个视频讲讲。
商家端的功能代码,另开一篇 blog。
