首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

巴巴运动网订单模块的锁定治理

2012-07-24 
巴巴运动网订单模块的锁定管理本文参考传智播客巴巴运动网?在后台修改订单的时候为了防止两个以上的工作人

巴巴运动网订单模块的锁定管理

本文参考传智播客巴巴运动网

?

在后台修改订单的时候为了防止两个以上的工作人员同时修改订单,需要对订单进行锁定。

锁定的具体方法如下:

public Order getLockOrder(String orderid, String employee){em.createQuery("update Order o set o.employee=?1 where o.orderid=?2 and o.employee is null").setParameter(1, employee).setParameter(2, orderid).executeUpdate();em.flush();//让数据库马上提交return this.find(orderid);}

?在订单表(Order)中,有一个Employee属性,我们只需要更新一下这个属性,就可以锁定订单,如果该属性不为null,则说明已经有人锁定了这个订单,我们不能更新该属性,只能等待该订单解锁以后再去更新。

?

每当工作人员试图打开订单时都会进行如下操作:

/** * 订单信息查看 */@Controller("/control/order/view")public class OrderViewAction extends Action {@Resource OrderService orderService;@Override @Permission(model="order",privilegeValue="view")public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {OrderForm formbean = (OrderForm) form;String username = WebUtil.getEmployee(request).getUsername();Order order = orderService.getLockOrder(formbean.getOrderid(), username);if(!order.getEmployee().equals(username)){request.setAttribute("message", "该订单已被"+ order.getEmployee() + "锁定");request.setAttribute("urladdress", SiteUrl.readUrl("control.order.list"));return mapping.findForward("message");}request.setAttribute("order", order);return mapping.findForward("order");}}

? if语句判断如果Order的Employee和username相同的话则可以继续,否则显示订单已经被锁定。

?

订单解锁的方法:

public void unLock(String orderid){em.createQuery("update Order o set o.employee=?1 where o.orderid=?2").setParameter(1, null).setParameter(2, orderid).executeUpdate();}

?只需要将对应的order的employee设置为null就行了。

热点排行