`

java异常处理

    博客分类:
  • java
 
阅读更多
数据重复异常类
/**
 * 数据重复异常
 * 
 * 
 */
@SuppressWarnings("serial")
public class DuplicateDataExcepption extends Exception {

	// 重复的数据信息
	private Object data;

	public Object getData() {
		return data;
	}

	public void setData(Object data) {
		this.data = data;
	}

	/**
	 * 
	 * @param data 重复的数据
	 */
	public DuplicateDataExcepption(Object data) {
		super();
		this.data = data;
	}

	public DuplicateDataExcepption(String message) {
		super(message);
	}
	
	public DuplicateDataExcepption(String message, Object data) {
		super(message);
		this.data = data;
	}
}



库存异常类

/**
 * 库存不足异常
 * 
 *
 */
public class InventoryShortageException extends RuntimeException {
	
	private static final long serialVersionUID = -2059212682755129635L;

	/**
	 * 实际库存信息
	 */
	private GoodsInventory goodsInventory;
	
	/**
	 * 扣减库存数
	 */
	private int decreaseCount;
	
//	public InventoryShortageException() {
//		super();
//	}

	/**
	 * 
	 * @param goodsInventory 实际库存信息
	 * @param decreaseCount 扣减库存数
	 */
	public InventoryShortageException(GoodsInventory goodsInventory, int decreaseCount) {
		super();
		this.goodsInventory = goodsInventory;
		this.decreaseCount = decreaseCount;
	}
	
	/**
	 * 
	 * @param goodsSku SKU
	 * @param availableCount 实际库存
	 * @param decreaseCount 扣减库存数
	 */
	public InventoryShortageException(String goodsSku, int availableCount, int decreaseCount) {
		super();
		GoodsInventory tmp = new GoodsInventory();
		tmp.setGoodsSku(goodsSku);
		tmp.setCount(availableCount);
		this.goodsInventory = tmp;
		
		this.decreaseCount = decreaseCount;
	}

	public GoodsInventory getGoodsInventory() {
		return goodsInventory;
	}

	public void setGoodsInventory(GoodsInventory goodsInventory) {
		this.goodsInventory = goodsInventory;
	}

	public int getAmount() {
		return decreaseCount;
	}

	public void setAmount(int amount) {
		this.decreaseCount = amount;
	}

	@Override
	public String getMessage() {
		StringBuilder sb = new StringBuilder();
		sb.append("库存不足 (")
		.append("sku: ")
		.append(this.goodsInventory.getGoodsSku())
		.append(", storeId: ")
		.append(this.goodsInventory.getStoreId())
		.append(", storeShelfId: ")
		.append(this.goodsInventory.getStoreShelfId())
		.append("实际库存:").append(this.goodsInventory.getCount())
		.append("需要扣减: ").append(this.decreaseCount)
		.append(")");
		return sb.toString();
	}
	
	
}




业务层类

/**
	 * 验证sku是否库存
	 * @param order
	 * @return
	 */
	private boolean checkInventory(GoodsTransferOrder order){
		int count=0;
		for (GoodsTransferOrderItem item : order.getItems()) {
			String sku=item.getGoodsSku();
			Integer decreaseCount=item.getGoodsCount();
			Integer storeId=item.getFromStoreId();
			Integer storeShelfId=item.getFromStoreShelfId();
			if (sku == null || decreaseCount == 0) {
				return false;
			}
			
			Integer storeSum = this.goodsInventoryService.getInventory(sku, storeId, storeShelfId);
			
			//前提是存在库存信息,并且库存数足够 ,才能通过;否则抛出异常
			if (storeSum == null || storeSum < decreaseCount) {
				throw new InventoryShortageException(sku,storeSum, decreaseCount);
			}else{
				count++;
			}
		}
		
		return count==order.getItems().size();
	}




控制器类

/**
	 * 添加单
	 * @param attr
	 * @param sessionUser
	 * @param goodsSku
	 * @param goodsName
	 * @param goodsCount
	 * @param fromStoreId
	 * @param fromStoreShelfId
	 * @param toStoreId
	 * @param toStoreShelfId
	 * @param fromStoreShelf
	 * @param toStoreShelf
	 * @param order
	 * @return
	 */
	@RequestMapping("save")
	public String save(RedirectAttributes attr,
			@ModelAttribute(App.SESSION_USER_KEY) SessionUser sessionUser,
			@RequestParam("goodsSku") List<String> goodsSku,
			@RequestParam("goodsName") List<String> goodsName,
			@RequestParam("goodsCount") List<Integer> goodsCount,
			@RequestParam("fromStoreId") List<Integer> fromStoreId,
			@RequestParam("fromStoreShelfId") List<Integer> fromStoreShelfId,
			@RequestParam("toStoreId") List<Integer> toStoreId,
			@RequestParam("toStoreShelfId") List<Integer> toStoreShelfId,
			@RequestParam("fromStoreShelf") List<String> fromStoreShelf,
			@RequestParam("toStoreShelf") List<String> toStoreShelf,
			GoodsTransferOrder order){
		
		List<GoodsTransferOrderItem> items = new ArrayList<>(3);
		order.setItems(items);
		try {
			
		for (int i = 0; i < goodsSku.size(); i++) {
			GoodsTransferOrderItem item = new GoodsTransferOrderItem();
			item.setGoodsSku(goodsSku.get(i));
			item.setGoodsName(goodsName.get(i));
			item.setFromStoreId(fromStoreId.get(i));
			item.setFromStoreShelfId(fromStoreShelfId.get(i));
			item.setGoodsCount(goodsCount.get(i));
	        item.setToStoreId(toStoreId.get(i));
	        item.setToStoreShelfId(toStoreShelfId.get(i));
	        item.setFromStoreShelf(fromStoreShelf.get(i));
	        item.setToStoreShelf(toStoreShelf.get(i));
			items.add(item);
			
			if(item.getFromStoreId().equals(item.getToStoreId())){
				throw new DuplicateDataExcepption("sku:"+item.getGoodsSku()+"---->调出仓库与调入仓库不能相同");
			}
			
		 }

		 if (order.getId() == null) {
				order.setStatus(1);
				String dateStr = dft.format(Calendar.getInstance().getTime());
				String fmt =String.format("LS-%s-",dateStr)+"%d";
				order.setSerialNumber(tableKeyService.nextSerialNumber("goods_transfer_order",fmt));
				// 制单人
				order.setOperatorId(sessionUser.getUserId());
				this.goodsTransferOrderService.save(order);
				attr.addFlashAttribute("successMessage", "g.tips.success");
			 }else {
				this.goodsTransferOrderService.update(order);
				attr.addFlashAttribute("successMessage", "g.tips.success");
			 }
		  } catch (InventoryShortageException e) {
				attr.addFlashAttribute("errorMessage", e.getGoodsInventory().getGoodsSku() + "库存不足");
		  }catch(DuplicateDataExcepption e){
			  attr.addFlashAttribute("errorMessage", e.getMessage());	 
		  }
		
		return "redirect:/allocateOrder/list";
	}
	


jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"  %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<c:if test="${!empty successMessage  }">
	<div class="alert alert-success alert-dismissable">
		<button type="button" class="close" data-dismiss="alert" aria-hidden="true"></button>
		<spring:message code="${successMessage }" text="${successMessage }"  />
	</div>
</c:if>
<c:if test="${!empty infoMessage  }">
	<div class="alert alert-info alert-dismissable">
		<button type="button" class="close" data-dismiss="alert" aria-hidden="true"></button>
		<spring:message code="${infoMessage }" text="${infoMessage }"  />
	</div>
</c:if>
<c:if test="${!empty warningMessage  }">
	<div class="alert alert-warning alert-dismissable">
		<button type="button" class="close" data-dismiss="alert" aria-hidden="true"></button>
		<spring:message code="${warningMessage }" text="${warningMessage }"  />
	</div>
</c:if>
<c:if test="${!empty errorMessage  }">
	<div class="alert alert-danger alert-dismissable">
		<button type="button" class="close" data-dismiss="alert" aria-hidden="true"></button>
		<spring:message code="${errorMessage }" text="${errorMessage }"  />
	</div>
</c:if>
分享到:
评论

相关推荐

    java异常处理习题

    Java 异常处理习题 Java 异常处理是 Java 编程语言中的一种重要机制,用于处理程序在运行时可能出现的错误或异常情况。下面是关于 Java 异常处理的习题和知识点总结: 一、Java 异常处理关键字 * Java 中用来抛出...

    java异常处理java异常处理

    java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理

    高效的java异常处理框架高效的java异常处理框架高效的java异常处理框架

    本文将从 Java 异常的基本概念和语法开始,讲述 Java 异常处理的基本知识,分析 Java 异常体系结构,对比 Spring 的异常处理框架,阐述异常处理的基本原则,并提出了自己处理一个大型应用系统异常的思想,并通过设计...

    Java异常处理

    ### Java异常处理 #### 一、异常的基本概念 在编程领域中,异常是指程序在运行过程中遇到的问题或错误状态,这些问题通常会导致程序无法按照预期的方式继续执行。在Java语言中,异常处理是一种重要的机制,用于...

    java 异常处理ppt

    Java异常处理是编程中至关重要的一个环节,它允许开发者优雅地处理程序运行时可能出现的错误,确保程序的健壮性和稳定性。Java中的异常处理机制基于一个独特的概念——异常(Exception),这是一种表示程序运行中...

    Java异常处理体系

    这个主题,"Java异常处理体系",涉及到Java如何优雅地处理程序运行时的异常,确保程序的健壮性和稳定性。这篇博文链接(已提供但无法直接访问)可能详细解释了Java异常处理的基本概念、机制以及最佳实践。 Java异常...

    浅析JAVA异常处理机制.pdf

    ### 浅析JAVA异常处理机制 #### 一、Java异常处理机制概述 异常处理是Java语言中的一个重要机制,它能够确保程序在遇到不可预料的情况时仍能维持稳定运行。异常处理主要包括三个方面:捕获异常、控制程序流程以及...

    java 异常处理 代码实例

    Java异常处理是编程中至关重要的一个环节,它确保了程序在遇到错误时能够优雅地运行,而不是突然崩溃。本篇文章将深入探讨Java异常处理的概念、机制以及如何通过代码实例进行有效的异常管理。 Java异常处理的核心...

    Java异常处理终结篇——如何进行Java异常处理设计 - 望远的个人页面 - 开源中国社区1

    Java异常处理设计是Java编程中一个至关重要的环节,它直接影响到程序的稳定性和可维护性。在Java中,异常处理是通过try-catch-finally语句块来实现的,主要涉及两大类异常:编译时异常(Checked Exception)和运行时...

    Java 异常处理的 9 个最佳实践

    Java异常处理的9个最佳实践涵盖了开发者在进行Java编程时应当遵循的一系列规则和方法,以确保代码的健壮性和可维护性。异常处理是编程中的一个重要部分,它能够帮助我们更有效地管理和响应程序运行时的错误情况。 ...

    Java异常处理,非常适合Java爱好者

    Java异常处理是Java编程语言中的一个关键特性,它允许程序员优雅地处理程序运行时可能出现的错误和不正常状况。在Java中,异常是程序执行过程中出现的问题,它们中断了正常的控制流程,使得程序无法继续按照预期的...

    java高端技术课程--Java异常处理详解

    Java异常处理是Java编程中一个至关重要的概念,它关乎到程序的健壮性和稳定性。在Java语言中,异常处理提供了一种机制,使得程序在遇到错误或非正常情况时能够优雅地处理问题,而不是突然崩溃。这个“java高端技术...

    高效java异常处理机制

    通过遵循上述最佳实践,开发者可以编写出更健壮、可维护的Java代码,有效地利用Java异常处理机制来提高程序的稳定性。同时,阅读并理解"Effective Java Exceptions"文档可以帮助进一步深化对Java异常处理的理解。

    java异常处理例题代码.pdf

    从给定的文件内容中可以看出,这是一系列Java程序示例,它们用来说明Java异常处理机制。异常处理是Java语言中一个非常重要的部分,它能够帮助程序在遇到错误情况时仍然可以正常运行或者优雅地退出。这些程序通过各种...

    java异常处理练习题

    java异常练习题,北大青鸟学士后课后练习,主要是异常处理的小测验

    Java 异常处理的误区和经验总结

    以下是对Java异常处理的一些误区和经验总结。 **误区一:过度使用try-catch块** 有些开发者习惯于在每个函数的开始部分都套用try-catch块,以为这样可以捕捉所有可能出现的异常。实际上,这种做法使得代码变得混乱...

    零基础学Java异常处理

    零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理...

Global site tag (gtag.js) - Google Analytics