您的位置:首页 > 其它

商城项目实战36:订单系统实现

2017-06-06 11:36 597 查看

订单系统实现

1.1 系统架构



1.2 订单表结构

订单表:

 


 

订单商品表:

 


 

物流表:

 


 

1.3 接口

参见:淘淘商城-订单系统接口.docx

 

1.4 创建订单系统taotao-order

 


 

系统配置参考taotao-sso系统。

 

1.5 实现创建订单接口

1.5.1 service

@Service
public class OrderServiceImpl implements OrderService {

@Autowired
private TbOrderMapper orderMapper;
@Autowired
private TbOrderItemMapper orderItemMapper;
@Autowired
private TbOrderShippingMapper orderShippingMapper;
//redis中的订单key
@Value("${ORDER_ID_KEY}")
private String ORDER_ID_KEY;
@Value("${ORDER_BEGIN_ID}")
private Long ORDER_BEGIN_ID;
@Autowired
private JedisCluster jedisCluster;
@Override
public TaotaoResult createOrder(TbOrder order, List<TbOrderItem> itemList, TbOrderShipping orderShipping) {
//订单表
//生成订单号
String orderIdStr = jedisCluster.get(ORDER_ID_KEY);
Long orderId = null;
if (StringUtils.isBlank(orderIdStr)) {
//如果redis中没有订单号使用初始订单号初始化
jedisCluster.set(ORDER_ID_KEY, ORDER_BEGIN_ID.toString());
orderId = ORDER_BEGIN_ID;
} else {
//生成订单号
orderId = jedisCluster.incr(ORDER_ID_KEY);
}
//设置订单号
order.setOrderId(orderId.toString());
Date date = new Date();
//订单创建时间
order.setCreateTime(date);
//订单更新时间
order.setUpdateTime(date);
//插入订单表
orderMapper.insert(order);
//插入订单商品表
for (TbOrderItem tbOrderItem : itemList) {
//取订单商品id
Long orderItemId = jedisCluster.incr("ORDER_ITEM_ID");
tbOrderItem.setId(orderItemId.toString());
tbOrderItem.setOrderId(orderId.toString());
//添加到订单商品表
orderItemMapper.insert(tbOrderItem);
}
//插入物流表
orderShipping.setOrderId(orderId.toString());
orderShipping.setCreated(date);
orderShipping.setUpdated(date);
orderShippingMapper.insert(orderShipping);
return TaotaoResult.ok(orderId.toString());
}

}

1.5.2 Controller 

1.5.2.1 Pojo

public class Order extends TbOrder{

private List<TbOrderItem> orderItems;
private TbOrderShipping orderShipping;
}

1.5.2.2 controller

 @Controller
@RequestMapping("/order")
public class OrderController {

@Autowired
private OrderService orderService;
@RequestMapping(value = "/create", method=RequestMethod.POST)
@ResponseBody
public TaotaoResult createOrder(@RequestBody Order order) {
TaotaoResult result = null;
try {
result = orderService.createOrder(order, order.getOrderItems(), order.getOrderShipping());
} catch (Exception e) {
e.printStackTrace();
return TaotaoResult.build(500, ExceptionUtil.getStackTrace(e));
}
return result;
}
}

1.6 其他接口 

....

 

前端系统实现下单功能

2.1 下单流程



2.2 订单结算页面

 

2.2.1 Controller

@Controller

@RequestMapping("/order")

public class OrderController {

 

@Autowired

private OrderService
orderService;

@Autowired

private CartService
cartService;

/**

 * 显示订单确认画面

 * <p>Title: showOrderCart</p>

 * <p>Description:
</p>

 * @param request

 * @param model

 * @return

 */

@RequestMapping("/order-cart")

public String showOrderCart(HttpServletRequest
request, TbUser
user, Model model) {

//根据用户信息,取出用户的收货地址列表

//本项目中使用静态数据模拟。。。。

//从cookie中把商品列表取出来

List<Item> itemsList =
cartService.getCartItemsList(request);

model.addAttribute("cartList",
itemsList);

return "order-cart";

}

}

 

2.3 提交订单处理

2.3.1 创建订单Service

@Srvice
public class OrderServiceImpl implements OrderService {

@Value("${ORDER_BASE_URL}")
private String ORDER_BASE_URL;
@Value("${ORDER_CREATE_URL}")
private String ORDER_CREATE_URL;
@Override
public TaotaoResult createService(Order order) {
//把pojo转换成json数据
String json = JsonUtils.objectToJson(order);
//调用订单系统服务提交订单
String resultStr = HttpClientUtil.doPostJson(ORDER_BASE_URL + ORDER_CREATE_URL, json);
//转换成java对象
TaotaoResult taotaoResult = TaotaoResult.format(resultStr);
return taotaoResult;
}

}

2.3.2 Controller 
@RequestMapping(value="/create", method=RequestMethod.POST)
public String createOrder(HttpServletRequest request, Order order, Model model) {
//从request中取用户信息
TbUser user = (TbUser)request.getAttribute("user");
//把用户信息补充到order对象中
order.setUserId(user.getId());
order.setBuyerNick(user.getUsername());
//提交订单
TaotaoResult result = null;
try {
result = orderService.createService(order);
//订单创建成功
if(result.getStatus() == 200) {
model.addAttribute("orderId", result.getData());
model.addAttribute("payment", order.getPayment());
//两天后送达
DateTime dateTime = new DateTime();
dateTime = dateTime.plusDays(2);
model.addAttribute("date", dateTime.toString("yyyy-MM-dd"));
return "success";
}
} catch (Exception e) {
e.printStackTrace();
result = TaotaoResult.build(500, ExceptionUtil.getStackTrace(e));
}
//订单创建失败
model.addAttribute("message", result.getMsg());
return "error/exception";
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐