电商网站之更新订单状态

电商上面订单状态的修改是非常普通的业务

随着商品的购买流程,订单的状态有:

0 = 未支付

1 = 已关闭 (超时未支付)

2 = 已取消

3 = 已支付

4 = 已签收

5 = 已拒收

6 = 退款处理中

7 = 已退款

开发更新订单状态的持久层

修改订单状态就是根据订单id修改订单的state

随着业务的发展,订单可能需要更多修改的需求,订单的列(字段)比较多,如果每个字段修改,都需要编写一个方法的话,那么方法的数量会非常多

如果我们编写一个方法,能够接收订单对象的实体类参数(OmsOrder)

我们要实现可以根据OmsOrder对象的实际数据来实现动态的修改需要修改的字段

Mybatis中可以通过编写动态修改sql语句完成这个需求

OmsOrderMapper接口添加方法

// 利用动态sql,实现对订单内容的修改
// 参数是OmsOrder类型,且必须包含id值,id不可修改,其他属性如果不为空,就修改为当前值
int updateOrderById(OmsOrder order);

OmsOrderMapper.xml编写sql

<!--
利用动态sql,实现对订单内容的修改
参数是OmsOrder类型,且必须包含id值,id不可修改,其他属性如果不为空,就修改为当前值
-->
<!--
    OmsOrder对象动态修改数据库中数据的sql语句
    Mybatis框架动态生成修改的Sql语句,需要<set>标签
    1. 在<set>标签的位置生成一个set关键字
    2. 在<set></set>标签之间,根据判断动态生成的sql语句,
        如果生成的内容最后一个字符是","就会将它删除!
-->
<update id="updateOrderById">
    update  oms_order
    <set>
        <if test="contactName!=null">
            contact_name=#{contactName},
        </if>
        <if test="mobilePhone!=null">
            mobile_phone=#{mobilePhone},
        </if>
        <if test="telephone!=null">
            telephone=#{telephone},
        </if>
        <if test="streetCode!=null">
            street_code=#{streetCode},
        </if>
        <if test="streetName!=null">
            street_name=#{streetName},
        </if>
        <if test="detailedAddress!=null">
            detailed_address=#{detailedAddress},
        </if>
        <if test="tag!=null">
            tag=#{tag},
        </if>
        <if test="paymentType!=null">
            payment_type=#{paymentType},
        </if>
        <if test="state!=null">
            state=#{state},
        </if>
        <if test="rewardPoint!=null">
            reward_point=#{rewardPoint},
        </if>
        <if test="amountOfOriginalPrice!=null">
            amount_of_original_price=#{amountOfOriginalPrice},
        </if>
        <if test="amountOfFreight!=null">
            amount_of_freight=#{amountOfFreight},
        </if>
        <if test="amountOfDiscount!=null">
            amount_of_discount=#{amountOfDiscount},
        </if>
        <if test="amountOfActualPay!=null">
            amount_of_actual_pay=#{amountOfActualPay},
        </if>
        <if test="gmtPay!=null">
            gmt_pay=#{gmtPay},
        </if>
    </set>
    where
        id=#{id}
</update>

开发修改订单状态的业务逻辑层

OmsOrderServiceImpl

// 根据订单id,修改订单的状态
@Override
public void updateOrderState(OrderStateUpdateDTO orderStateUpdateDTO){
    // 参数类型是OrderStateUpdateDTO
    // 修改方法参数类型是OmsOrder,所以要先实例化OmsOrder对象
    OmsOrder order = new OmsOrder();
    // 将参数中的属性值赋值到order对象
    BeanUtils.copyProperties(orderStateUpdateDTO,order);
    // 调用持续层动态修改order的方法即可
    omsOrderMapper.updateOrderById(order);
}

开发修改订单状态的控制层

OmsOrderController

@PostMapping("/update/state")
@ApiOperation("修改订单状态的方法")
@PreAuthorize("hasRole('user')")
public JsonResult updateOrderState(@Validated OrderStateUpdateDTO orderStateUpdateDTO){
    omsOrderService.updateOrderState(orderStateUpdateDTO);
    return JsonResult.ok("修改完成!");
}

测试:

重启order模块

测试时根据实际数据库订单id,修改knife4j的数据然后再运行

运行后查看数据库中订单状态列是否修改

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿码德乌斯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值