一、下单业务流程
用户可以通过选择服务,填写地点时间并下单支付来进行预约。
订单状态
订单表设计
在设计订单表时通常采用的结构是订单主表与订单明细表一对多关系结构,比如:在电商系统中,一个订单购买的多件不同的商品,设计订单表和订单明细表:
订单表:记录订单号、订单金额、下单人、订单状态等信息。
订单明细表:记录该订单购买商品的信息,包括:商品名称、商品价格、交易价格、购买商品数量等。
由于本项目下单单位是服务,没有购物车,所以一个订单只对应一个商品,所以只设计一个订单表如下:
订单基础信息:订单号、订单状态、排序字段、是否显示标记等。
价格信息:单价、购买数量、优惠金额、订单总金额等。
下单人信息:下单人ID、联系方式、位置信息(相当于收货地址)等。
服务(商品)相关信息:服务类型名称、服务项名称、服务单价、价格单位等。
前端需要传递的参数:服务id,购买数量,服务开始时间(用户id可以从token中获取)
系统开发
开发远程接口
因为下单接口需要很多的数据,其中一部分数据是通过远程调用实现的:
- 根据地址簿Id远程调用客户中心,查询我的地址簿信息。
- 根据服务Id远程调用运营基础服务,查询服务相关的信息。
这里使用@FeignClient注解实现Feign远程调用,以地址簿接口为例
1、在jzo2o-api工程定义我的地址簿远程查询接口,将这个工程打包并发布到本地仓库中
@FeignClient(contextId = "jzo2o-customer"
, value = "jzo2o-customer"
, path = "/customer/inner/address-book")
public interface AddressBookApi {
@GetMapping("/{id}")
AddressBookResDTO detail(@PathVariable("id") Long id);
}
2、 在jzo2o-customer工程定义实现类
@RestController
@RequestMapping("inner/address-book")
@Api(tags = "内部接口 - 地址薄相关接口")
public class InnerAddressBookController implements AddressBookApi {
@Resource
private IAddressBookService addressBookService;
@Override
@