第九章 下订单
类似用户注册和浏览定购商品功能的实现,我们分布实现下订单的功能。
我们在这里实现得比较简单,具体逻辑是在下订单前,先需要用户填写收货人的信息,比如收货人名称、收货人地址以及收货人电话等信息,然后根据购物车里面的商品信息,形成一个有效的订单信息,放入Torder和order_detail表里面。具体清单如下:
OrderServices.java
/**
*
*/
package cn.com.book.demo.services;
/**
* @author Noble.Yang
*
*/
public interface OrderServices {
/**
* 提交一个用户定单
* */
public boolean submitOrder(UserOrder userOrder, String userName);
}
OrderServicesImpl.java
/**
*
*/
package cn.com.book.demo.services.impl;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import cn.com.book.demo.hibernate.dao.OrderDetail;
import cn.com.book.demo.hibernate.dao.OrderDetailDAO;
import cn.com.book.demo.hibernate.dao.ShopDAO;
import cn.com.book.demo.hibernate.dao.Torder;
import cn.com.book.demo.hibernate.dao.TorderDAO;
import cn.com.book.demo.hibernate.dao.Tuser;
import cn.com.book.demo.hibernate.dao.TuserDAO;
import cn.com.book.demo.services.OrderServices;
import cn.com.book.demo.services.UserOrder;
import cn.com.book.demo.services.UserOrderItem;
/**
* @author Noble.Yang
*
*/
public class OrderServicesImpl implements OrderServices {
private TorderDAO orderDAO = null;
private OrderDetailDAO orderDetailDAO = null;
private TuserDAO tuserDAO = null;
private ShopDAO shopDAO = null;
public void setOrderDAO(TorderDAO orderDAO) {
this.orderDAO = orderDAO;
}
public void setOrderDetailDAO(OrderDetailDAO orderDetailDAO) {
this.orderDetailDAO = orderDetailDAO;
}
public void setTuserDAO(TuserDAO tuserDAO){
this.tuserDAO = tuserDAO;
}
public void setShopDAO(ShopDAO shopDAO){
this.shopDAO = shopDAO;
}
/* (non-Javadoc)
* @see cn.com.book.demo.services.OrderServices#submitOrder(cn.com.book.demo.services.UserOrder)
*/
public boolean submitOrder(UserOrder userOrder, String userName) {
boolean bool = false;
this.initDAO();
List list = this.tuserDAO.findByUserName(userName);
if(userOrder != null && list != null && list.size()>0){
Tuser user = (Tuser)list.get(0);
Torder order = new Torder();
order.setOrderTime(new Date());
order.setRAddress(userOrder.getSendAddress());
order.setRName(userOrder.getReceiveName());
order.setRPhone(userOrder.getReceivePhone());
order.setTuser(user);
// 设置定单子项
List items = userOrder.getOrderItems();
Set details = order.getOrderDetails();
OrderDetail detail = null;
if(items != null){
for(int i=0; i<items.size(); i++){
UserOrderItem oItem = (UserOrderItem)items.get(i);
if(oItem != null){
detail = new OrderDetail();
detail.setAmount(oItem.getAmount());
detail.setAPrice(oItem.getSinglePrice() * oItem.getAmount());
detail.setTorder(order);
detail.setSPrice(oItem.getSinglePrice());
detail.setShop(this.shopDAO.findById(oItem.getShopID()));
if(details == null){
details = new HashSet();
}
details.add(detail);
}
}
}
this.orderDAO.attachDirty(order);
bool = true;
}
return bool;
}
private void initDAO(){
if(this.orderDAO == null){
this.orderDAO = new TorderDAO();
}
if(this.orderDetailDAO == null){
this.orderDetailDAO = new OrderDetailDAO();
}
if(this.tuserDAO == null){
this.tuserDAO = new TuserDAO();
}
if(this.shopDAO == null){
this.shopDAO = new ShopDAO();
}
}
}
applicationContext-service.xml中的注册内容
<!-- 定单处理服务 -->
<bean id="orderServiceProxy" parent="baseServiceProxy">
<property name="target">
<ref bean="orderService" />
</property>
<property name="transactionAttributes">
<props>
<prop key="submit*">PROPAGATION_REQUIRED</prop>
<!--
<prop key="findShopsMsg">PROPAGATION_REQUIRED</prop>
-->
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<bean id="orderService"
class="cn.com.book.demo.services.impl.OrderServicesImpl">
<property name="orderDAO">
<ref bean="TorderDAO"/>
</property>
<property name="orderDetailDAO">
<ref bean="OrderDetailDAO"/>
</property>
<property name="tuserDAO">
<ref bean="TuserDAO"/>
</property>
<property name="shopDAO">
<ref bean="ShopDAO"/>
</property>
</bean>