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

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

 

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

锁定的具体方法如下:

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就行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值