开发者学堂课程【RocketMQ 知识精讲与项目实战(第二阶段):创建支付订单实现】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/703/detail/12435
创建支付订单实现
把整个代码实现之前的准备的工作都已经做好了,接下来,就把这三部进行一个实现。
第一步,就是要去判断订单的一个支付状态,可以表格中订单编号和支付编号中判断。如果一个订单的状态已经是已支付,那么就可以直接往下走。
首先是要去把这个 mapper 全拿过来,这个mapper 就是trade came APP,从资料当中 mybatis 逆向工程当中呢,去找到 mapper,把这个 mapper 拿过来,以及当前的配置文件、设置文件也拿过来,然后就可以直接注入。
代码如下:
@Component
@Service(interfaceClass=IPayServiceclass)
public class PayServiceImpl implements IPayService{
@Autowired
private TradePayMapper tradePayMapper;
@Override
public void createPayment(TradePay tradePay){
接下来就是订单的支付状态,方法有很多,可以用这个 count by example,根据某一个条件的去进行一个统计,如果统计的数量,它是大于零的,那么说明根据这个条件查到了数据。
可以将这个条件设置一下 createcreteria,接下来去创建一个 create,在这个地方的条件就是 order ID。
还有一个条件就是 ispaid 必须必须等于当前已经支付的状态,shop pay-ispaid.get code。
以这两个条件去进行统计,获得一下当前统计的结果,如果这个结果大于零,就说明这个订单已经有支付的记录了,所以就不需要进行支付了,在这里我们就抛一个异常,抛一个异常,shop pay is paid,那么就不用进行支付操作了。
在这个流程上面还可以再加上一个,又肯 trade paid 没有去传递过来这个订单的这个 ID 啊,或者这个参数不合法,也不能去操作。
如果它等于空或者//,或者是 tradepay getid 等于空,那就直接抛一个当前参数非法。
代码如下:
@override
public void create Payment(TradePaytradePay){
if(tradePay==null| tradePaygetorderId()==nu11){
CastException.cast(ShopCode SHOPREQUEST PARAMETER VALID);
//1.判断订单支付状态
T
rade Pay Example example=new Trade PayExample();
Trade Pay Example Criteria criteria=example create
Criteria() criteria. And OrderId EqualTo(tradePay getorderId());
criteria. And Is Paid Equal To(ShopCode SHOP PAYMENT IS
PAID get Code)) intr=trade Pay
Mapper.countByExample(example);
if(r>0){
Cast Exception.cast(Shop Code.SHOP_PAYMENT IS PAID);
如果没有查到订单的支付状态,因为已经有了订单的 id,那就根据id把状态改为未支付,改为未付款,他的状态值是0,和 ispaid 的状态不一样。这里定义未付款为0,正在付款为1,已付款为2,现在把数据库里的表修改一下。
继续回到代码,刚刚设置了订单的状态为未支付,然后把它保存到数据库里面去,接下来使用雪花算法生成订单 id。
代码如下:
@Autowired
private IDWorker idWorker;
再使用 set idwork 把它生成出来。要把雪花算吧入库,就要先注册一下。之前再 bean 中已经做过,可以直接拿过来。
代码如下:
@Bean
public IDworker getBean(){
return new IDWorker(data centerld1 machineld1);
为了方便区分把 machineid 改为2,因为将来两个 id 会在两个不不同 的服务器里,所以要区分一下。
回到 service ,就可以设置订单的 id 了。做完之后就要给前台做一个返回,因为在接口上没有定义返回值,所以现在要加上。
第一个参数是 getsucces,第二个是 getmessage。
代码如下:
return new Result
(ShopCode.SHOP_SUccEss.getSuccess(),
ShopCodeSHOP_SUCCEssgetMessage());
这样流程就实现完了。
总结一下,在服务端接收到支付下单的请求,就是创建支付下单的请求,首先判断一下支付的参数是否合法,然后在数据库中判断当前订单是否付款,以订单 id 和状态的条件进行统计,如果已经支付,那这个参数必然是大于0的,然后就抛一个异常。
如果状态显示未支付,就把订单的状态设置为未支付,继续设置订单的 id,idhi 通过雪花算法生成出来的,然后在数据库中进行保存,保存后给调用方返回一个结果。