1.开发更新订单状态的功能
1.1订单的状态码
我们电商上面订单的状态修改是非常普通的业务
随着商品的购买流程,订单的状态有
状态:
0=未支付
1=已关闭(超时未支付)
2=已取消
3=已支付
4=已签收
5=已拒收
6=退款处理中
7=已退款
1.2开发更新订单状态的持久层
修改订单状态就是根据订单id修改订单的state
我们随着业务的发展,订单可能需要更多修改的需求
订单的列(字段)比较多,如果每个字段修改,都需要编写一个方法的话,那么方法的数量会非常多
如果我们编写一个方法,能够接收订单对象的实体类参数(OmsOrder)
我们要实现可以根据OmsOrder对象的实际数据来实现动态的修改要修改的字段
Mybatis中可以通过编写动态修改sql语句完成这个需求
OmsOrderMapper接口添加方法
// 动态修改订单的sql,参数是omsOrder实体类对象
// 对象中必须有id,id不可修改,其它属性不为空就修改其它属性值
int updateOrderById(OmsOrder order);
OmsOrderMapper.xml编写sql
<!--
动态修改订单的sql,参数是omsOrder实体类对象
对象中必须有id,id不可修改,其它属性不为空就修改其它属性值
-->
<!--
omsOrder对象除id外的某个属性有值时,下面的动态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>
1.3开发修改订单状态的业务逻辑层
OmsOrderServiceImpl
// 根据订单id 修改订单状态的业务逻辑层方法
@Override
public void updateOrderState(OrderStateUpdateDTO orderStateUpdateDTO) {
// 参数OrderStateUpdateDTO包含订单id和要修改的状态码
// 将参数属性值赋值给OmsOrder类型对象,以便持久层调用
OmsOrder order=new OmsOrder();
BeanUtils.copyProperties(orderStateUpdateDTO,order);
// 调用持久层方法
omsOrderMapper.updateOrderById(order);
}
启动Nacos\Seata
启动Order
测试时根据实际数据库订单id,修改knife4j的数据然后再运行
运行后查看数据库中订单状态列是否修改
2.搜索功能
2.1Elasticsearch加载数据
我们要想完成高效的搜索任务,需要ES的支持
因为数据库的模糊查询效率太低了
我们在前端页面中完成的搜索是从ES中搜索数据
这样就要求,我们在查询之前,需要先将商品信息(spu)保存到ES中
一开始我们使用最原始的办法:从数据库查询出数据之后新增到ES中
2.2确认实体类
搜索功能编写在mall-search模块中
它使用的实体类在cn.tedu.mall.pojo.search.eneity包下SpuForElastic
这个类有四个字段是具备分词功能的
所以支持我们使用这4个字段进行查询
/**
* SPU名称
*/
@Field(name = "name",type = FieldType.Text,
analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
@ApiModelProperty(value=