伙伴云客服论坛»论坛 S区 S客户管理 查看内容

0 评论

0 收藏

分享

订单系统——提交订单

1.  提交订单

1.1. 功能分析

1、在订单确认页面点击“提交订单”按钮生成订单。
2、恳求的url:/order/create
3、参数:提交的是表单的数据。保管的数据:订单、订单明细、配送地址。
a)        向tb_order中插入记录。
i.         订单号需要手动生成。
要求订单号不能反复。
订单号可读性号。
可以使用redis的incr命令生成订单号。订单号需要一个初始值。
ii.       Payment:表单数据
iii.     payment_type:表单数据
iv.      user_id:用户信息
v.        buyer_nick:用户名
vi.      其他字段null
b)       向tb_order_item订单明细表插入数据。
i.         Id:使用incr生成
ii.       order_id:生成的订单号
iii.     其他的都是表单中的数据。
c)        tb_order_shipping,订单配送信息
i.         order_id:生成的订单号
ii.       其他字段都是表单中的数据。
d)       使用pojo接收表单的数据。
可以扩展TbOrder,在子类中添加两个属性一个是商品明细列表,一个是配送信息。
把pojo放到e3-order-interface工程中。 /** * 用于寄存用户提交订单信息 * @Auther: jun * @Date: 2018/6/1 0001 21:45 * @Description:*/public class OrderInfo extends TbOrder implements Serializable {    private List<TbOrderItem> orderItems;    private TbOrderShipping orderShipping;    public List<TbOrderItem> getOrderItems() {        return orderItems;}    public void setOrderItems(List<TbOrderItem> orderItems) {        this.orderItems = orderItems;}    public TbOrderShipping getOrderShipping() {        return orderShipping;}    public void setOrderShipping(TbOrderShipping orderShipping) {        this.orderShipping = orderShipping;}}业务逻辑:
1、接收表单的数据
2、生成订单id
3、向订单表插入数据。
4、向订单明细表插入数据
5、向订单物流表插入数据。
6、返回e3Result。
返回值:e3Result
1.1. Dao层

可以使用逆向工程。
1.1. Service层

参数:OrderInfo
返回值:e3Result
/** * 订单Service * 订单需要操作三张数据到所有要注入三张表对应生成的mapper * @Auther: jun * @Date: 2018/6/1 0001 21:51 * @Description:*/@Servicepublic class OrderServiceImpl implements OrderService {    @Autowiredprivate TbOrderMapper tbOrderMapper;@Autowiredprivate TbOrderItemMapper tbOrderItemMapper;@Autowiredprivate TbOrderShippingMapper tbOrderShippingMapper;@Autowiredprivate JedisClient jedisClient;@Value("${ORDER_ID_GEN_KEY}")    private String ORDER_ID_GEN_KEY;@Value("${ORDER_ID_START}")    private String ORDER_ID_START;@Value("${ORDER_DETAIL_ID_GEN_KEY}")    private String ORDER_DETAIL_ID_GEN_KEY;@Overridepublic E3Result createOrder(OrderInfo orderInfo) {        //生订单是最好给定初始值所以要判断一下if (!jedisClient.exists(ORDER_ID_GEN_KEY)) {            //设置初始值,从ORDER_ID_START数开端jedisClient.set(ORDER_ID_GEN_KEY,ORDER_ID_START);}        //生成订单号,使用redis的incr生成String orderId=jedisClient.incr(ORDER_ID_GEN_KEY).toString();//补全OrderInfo属性        //idorderInfo.setOrderId(orderId);//'状态:1、未付款,2、已付款,3、未发货,4、已发货,5、交易胜利,6、交易关闭'orderInfo.setStatus(1);orderInfo.setCreateTime(new Date());orderInfo.setUpdateTime(new Date());//插入订单表tbOrderMapper.insert(orderInfo);//向订单明细表插入数据List<TbOrderItem> orderItems=orderInfo.getOrderItems();//遍历for (TbOrderItem orderItem:orderItems){            //生成订单明细idString orderItem_Id=jedisClient.incr(ORDER_DETAIL_ID_GEN_KEY).toString();//补全明细属性orderItem.setId(orderItem_Id);orderItem.setOrderId(orderId);//向明细表插入数据tbOrderItemMapper.insert(orderItem);}        //向订单物流表插入数据        //从订单详细中获得订单物流对象TbOrderShipping tbOrderShipping=orderInfo.getOrderShipping();//补全属性tbOrderShipping.setOrderId(orderId);tbOrderShipping.setCreated(new Date());tbOrderShipping.setUpdated(new Date());//向订单物流插入数据tbOrderShippingMapper.insert(tbOrderShipping);//返回胜利,包含订单号return E3Result.ok(orderId);}}1.1. Controller

恳求的url:/order/create
参数:使用OrderInfo接收
返回值:逻辑视图。
业务逻辑:
1、接收表单提交的数据OrderInfo。
2、补全用户信息。
3、调用Service创建订单。
4、返回逻辑视图展示胜利页面
a)        需要Service返回订单号
在拦截器中添加用户处置逻辑:
订单系统——提交订单-1.jpg


Controller代码

/** * 提交订单 * * @param orderInfo,model * @auther: jun * @date: 2018/6/1 0001 22:29 * @return: java.lang.String * @Description:*/@RequestMapping(value = "order/create", method = RequestMethod.POST)public String createOrder(OrderInfo orderInfo, Model model, HttpServletRequest request) {    //取用户信息TbUser user = (TbUser) request.getAttribute ( "user" );//把用户信息添加到orderInfo中orderInfo.setUserId ( user.getId () );orderInfo.setBuyerNick ( user.getUsername () );//调用效劳消费订单E3Result result=orderService.createOrder (orderInfo);//假设订单生成胜利,需要删除购物车if (result.getStatus ()==200){        cartService.clearCartItem (user.getId ());}    //返回页面需要参数    //把订单号转递给页面request.setAttribute ("orderId",result.getData ());request.setAttribute ("payment",orderInfo.getPayment ());//返回逻辑视图return "success";}

回复

举报 使用道具

相关帖子
全部回复
暂无回帖,快来参与回复吧
本版积分规则 高级模式
B Color Image Link Quote Code Smilies

刺心谎言
注册会员
主题 14
回复 19
粉丝 0
|网站地图
快速回复 返回顶部 返回列表