商城项目实战36:订单系统实现
2017-06-06 11:36
597 查看
1 订单系统实现
1.1 系统架构
1.2 订单表结构
订单表:订单商品表:
物流表:
1.3 接口
参见:淘淘商城-订单系统接口.docx1.4 创建订单系统taotao-order
系统配置参考taotao-sso系统。
1.5 实现创建订单接口
1.5.1 service
@Servicepublic 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 前端系统实现下单功能
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
@Srvicepublic 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"; }
相关文章推荐
- 商城项目实战37:订单系统最小实现接口文档及实现
- 商城项目实战33:单点登录系统SSO实现
- 商城项目实战34:单点登录系统SSO最小实现的接口文档及Cookie工具类
- 嵌入式实战项目:基于嵌入式linux花卉大棚温湿度监测与调节系统的设计与实现
- 【SSH网上商城项目实战04】EasyUI菜单的实现
- 【SSH网上商城项目实战04】EasyUI菜单的实现
- 【SSH网上商城项目实战19】订单信息的级联入库以及页面的缓存问题
- 【SSH网上商城项目实战12】添加和更新商品功能的实现
- 项目管理实战之团队管理 对团队的管理需要重视以下几个方面 一个系统不仅需要优秀的分析和设计,更需要一个良好的过程将其从蓝图转化为实现。这个过程中最重要的是对团队的管理,也就是人的管理
- 【SSH网上商城项目实战19】订单信息的级联入库以及页面的缓存问题
- 【SSH网上商城项目实战08】查询和删除商品类别功能的实现
- SSH网上商城项目实战 过滤器实现购物车购物登陆功能的判断。
- 【SSH网上商城项目实战18】过滤器实现购物登录功能的判断
- 【SSH网上商城项目实战09】添加和更新商品类别功能的实现
- 【SSH网上商城项目实战09】添加和更新商品类别功能的实现
- 中小型企业商业智能平台的开发和实现(数据仓库、BI系统、真实项目实战)
- 08 网上商城项目实战之使用jersey实现应用服务器和图片服务器分离
- 【SSH网上商城项目实战12】添加和更新商品功能的实现
- 【SSH网上商城项目实战13】Struts2实现文件上传功能
- 【SSH网上商城项目实战13】Struts2实现文件上传功能