2021-06-27

package com.taotao.order.service.impl;

import java.util.Date;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import com.taotao.common.utils.TaotaoResult;
import com.taotao.mapper.TbOrderItemMapper;
import com.taotao.mapper.TbOrderMapper;
import com.taotao.mapper.TbOrderShippingMapper;
import com.taotao.order.dao.JedisClient;
import com.taotao.order.service.OrderService;
import com.taotao.pojo.TbOrder;
import com.taotao.pojo.TbOrderItem;
import com.taotao.pojo.TbOrderShipping;
//订单模块实现
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private TbOrderMapper orderMapper;
@Autowired
private TbOrderItemMapper orderItemMapper;
@Autowired
private TbOrderShippingMapper shippingMapper;
@Autowired
private JedisClient jedisClient;
@Value(" O R D E R G E N K E Y " ) p r i v a t e S t r i n g O R D E R G E N K E Y ; @ V a l u e ( " {ORDER_GEN_KEY}") private String ORDER_GEN_KEY; @Value(" ORDERGENKEY")privateStringORDERGENKEY;@Value("{ORDER_DEFAULT_KEY}")
private String ORDER_DEFAULT_KEY;
@Value("${ORDER_ITEM_KEY}")
private String ORDER_ITEM_KEY;

//创建订单功能实现
@Override
public TaotaoResult createOrder(TbOrder order,List orderItem, TbOrderShipping orderShipping) {
//逻辑步骤:创建订单即向数据库中三个表中插入数据,所以讲数据库中的字段补全即可。页面传递过来的就不需要补全了,直接可以写入数据库
/*第一步:订单号的生成方式:因为订单号的特殊性,订单后最好采用数字组成,且不能重复,可以采用redis中自增长的方式来实现,
* 在redis中,如果无key,则redis自动创建你写的key的名字。采用incr的命令来实现订单号的自增。默认自增是从1开始的,因为考虑到用户的原因,在redis中设置一个默认的key值
* 这样用户体验会好些,不会因为看到简单的1,2,3,所以设置一个默认的key值
*/
String string = jedisClient.get(ORDER_GEN_KEY);
if (StringUtils.isBlank(string)) {
//如果redis中的key为空,则利用默认值
String defaultKey = jedisClient.set(ORDER_GEN_KEY,ORDER_DEFAULT_KEY);
}
//如果存在此key则,采用incr命令自增
long orderId= jedisClient.incr(ORDER_GEN_KEY);
//然后向订单表中插入数据
order.setOrderId(orderId+"");
//订单状态:状态:1、未付款,2、已付款,3、未发货,4、已发货
order.setStatus(1);
order.setCreateTime(new Date());
order.setUpdateTime(new Date());
order.setBuyerRate(0);
//补全完信息后,插入数据库表
orderMapper.insert(order);
//补全完订单表后,将订单明细表补全,因为之前订单写入redis,订单明细的id也写入redis吧,自动创建这个id的key。这个不需要默认编号了。对比页面传递的参数,将剩下的补全
String string2 = jedisClient.get(ORDER_ITEM_KEY);
long orderItemId = jedisClient.incr(string2);
//因为传递过来的是一个集合列表,所以遍历列表
for (TbOrderItem tbOrderItem : orderItem) {
tbOrderItem.setId(orderItemId+"");
tbOrderItem.setOrderId(orderId+"");
orderItemMapper.insert( tbOrderItem);
}
//接下来补全订单配送表
orderShipping.setOrderId(orderId+"");
orderShipping.setCreated(new Date());
orderShipping.setUpdated(new Date());
shippingMapper.insert(orderShipping);

    return TaotaoResult.ok(orderId);
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值