poi导入excel并验证

package com.cwkj.jxc.action;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.commons.lang.StringUtils;

import com.cwkj.exception.BizException;
import com.cwkj.jxc.biz.IProductService;
import com.cwkj.jxc.biz.ParamService;
import com.cwkj.jxc.biz.WareHouseService;
import com.cwkj.jxc.entity.Param;
import com.cwkj.jxc.entity.Product;
import com.cwkj.jxc.entity.ProductInitItem;
import com.cwkj.jxc.entity.WareHouse;
import com.cwkj.util.BaseAction;
import com.cwkj.util.BeanFactory;
import com.cwkj.util.CreateNumber;
import com.cwkj.util.ExcelHelper;
import com.cwkj.util.Pagination;
import com.cwkj.util.RegularValidate;
import com.opensymphony.xwork2.ModelDriven;

public class ProductAction extends BaseAction implements ModelDriven<Product> {
	public static final String PRODUCT_CATEGORY="商品类别";
	public static final String WAREHOUSE_INFO="仓库信息";
	public static final String UNIT_TYPE="计量单位";
	public static final int PAGE_SIZE=5;
	private static final long serialVersionUID = 1L;
	private Product product;
	private ParamService service;
	private IProductService iProductService; 
	private List<Param> params;//商品类型
	private List<Param> warehouses;//仓库
	private List<Param> units;//单位
	private Param param;
	private String jsonData;
	private InputStream stream;
	private Pagination<Product> pagination;
	private int currentPage = 1;
	private WareHouseService wareHouseService;
	private String editName;
	private String ids;
	private File	productExcel;//导入的文件
	private List<WareHouse> wareHouse;
	
	
	public WareHouseService getWareHouseService() {
		return wareHouseService;
	}

	public void setWareHouseService(WareHouseService wareHouseService) {
		this.wareHouseService = wareHouseService;
	}

	public File getProductExcel() {
		return productExcel;
	}

	public void setProductExcel(File productExcel) {
		this.productExcel = productExcel;
	}

	public String getIds() {
		return ids;
	}

	public void setIds(String ids) {
		this.ids = ids;
	}

	public String getEditName() {
		return editName;
	}

	public void setEditName(String editName) {
		this.editName = editName;
	}

	public int getCurrentPage() {
		return currentPage;
	}

	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
	}

	public Pagination<Product> getPagination() {
		return pagination;
	}

	public void setPagination(Pagination<Product> pagination) {
		this.pagination = pagination;
	}

	public InputStream getStream() {
		return stream;
	}

	public void setStream(InputStream stream) {
		this.stream = stream;
	}

	public String getJsonData() {
		return jsonData;
	}

	public void setJsonData(String jsonData) {
		this.jsonData = jsonData;
	}


	public IProductService getiProductService() {
		return iProductService;
	}

	public void setiProductService(IProductService iProductService) {
		this.iProductService = iProductService;
	}

	public Param getParam() {
		return param;
	}

	public void setParam(Param param) {
		this.param = param;
	}

	public List<Param> getWarehouses() {
		return warehouses;
	}

	public void setWarehouses(List<Param> warehouses) {
		this.warehouses = warehouses;
	}

	public List<Param> getUnits() {
		return units;
	}

	public void setUnits(List<Param> units) {
		this.units = units;
	}

	public List<Param> getParams() {
		return params;
	}

	public void setParams(List<Param> params) {
		this.params = params;
	}
	{
		service=(ParamService) BeanFactory.getInstance(ParamService.class);
		iProductService=(IProductService) BeanFactory.getInstance(IProductService.class);
		wareHouseService=(WareHouseService)BeanFactory.getInstance(WareHouseService.class);
	}
	
	
	public ParamService getService() {
		return service;
	}

	public void setService(ParamService service) {
		this.service = service;
	}



	public Product getProduct() {
		return product;
	}

	public void setProduct(Product product) {
		this.product = product;
	}

	public Product getModel() {
		 if(product == null){
			 product = new Product();
	       }
	       return product;
	}
	
	/**
	 * 生成id
	 * @return
	 */
	public String list(){
		requestMap.put("No",CreateNumber.fillZero(5,String.valueOf(iProductService.noFlag()),"sp"));
		pagination=new Pagination<Product>(iProductService.selectProductCount(product),PAGE_SIZE,product, currentPage);
		requestMap.put("productList",iProductService.pagProduct(pagination));
		return "productList";
	}
	
	/**
	 * 添加产品
	 */
	public String addProduct() {
		Integer i=null;
		try {
				checkAddInfo();
			i=iProductService.addProduct(product);
			if(null==i||"".equals(i)){
				throw new BizException("添加失败");
			}else{
				jsonData="true";
			}
		} catch (BizException e) {
			jsonData=e.getMessage();
		}
		return SUCCESS;
	}

	private void checkAddInfo() {
		boolean fg=false;
		for (int j = 0; j < product.getProductInitItems().size(); j++) {
			if(0==product.getProductInitItems().get(j).getWareHouse().getId()||0.0==product.getProductInitItems().get(j).getTotalPrice()){
				fg=true;
			}
		}
if(fg)throw new BizException("请检查仓库信息");
else{
		List<ProductInitItem> list =product.getProductInitItems();
//				Set<String> set=new HashSet<String>();
		Set<Integer> set = new HashSet<Integer>();
		for (ProductInitItem pi : list) {
			set.add(pi.getWareHouse().getId());
		}
		if(set.size()<list.size()){
			throw new BizException("仓库名不允许重复");
		}
}
	}
	/**
	 * 查询option下拉选
	 */
	public String categoryParamyList(){
//		String type="商品类别";
		params=service.findParams(PRODUCT_CATEGORY);
		return "categoryList";
	} 
	public String warehouseParamyList(){
//		String type="仓库信息";
		warehouses=service.findParams(WAREHOUSE_INFO);
		return SUCCESS;
	} 
	public String unitParamyList(){
//		String type="计量单位";
		units=service.findParams(UNIT_TYPE);
		return "unitList";
	} 
	
	/**
	 * 添加param
	 */
	public String addParam(){
		try {
			service.addParam(param);
			jsonData="true";
		} catch (BizException e) {
			jsonData="false";
			e.printStackTrace();
		}
		return SUCCESS;
	}
	/**
	 * checkParam,名字是否唯一
	 */
	public String checkParam(){
		stream=iProductService.isParamExist(param)?new ByteArrayInputStream("true".getBytes()):new ByteArrayInputStream("false".getBytes());	
		return "checkflag";
	}
	
	public String categoryList(){
		params=service.findParams(param.getType());
		return SUCCESS;
	}
	/**
	 * 检查商品名称
	 * @return
	 */
	public String checkProductName(){
		if(StringUtils.isEmpty(editName)){
			stream=iProductService.isProductNameExist(product.getName())?new ByteArrayInputStream("true".getBytes()):new ByteArrayInputStream("false".getBytes());
		}else
		 if(editName.equals(product.getName())){
			stream=new ByteArrayInputStream("true".getBytes());
		}else{
		stream=iProductService.isProductNameExist(product.getName())?new ByteArrayInputStream("true".getBytes()):new ByteArrayInputStream("false".getBytes());
		}
		return "checkflag";
	}
	
	/**
	 * 获得下一个商品号
	 */
	public String nextId(){
		jsonData=CreateNumber.fillZero(5,String.valueOf(iProductService.noFlag()),"sp");
		return SUCCESS;
	}
	/**
	 * 分页list
	 * @return
	 */
	public String pagList(){
		pagination=new Pagination<Product>(iProductService.selectProductCount(product),PAGE_SIZE,product, currentPage);
		requestMap.put("productList",iProductService.pagProduct(pagination));
		return "list";
	}
	/**
	 * 修改
	 * @return
	 */
	public String editProductUI(){
	Product	p=iProductService.findProductAndItem(product.getId());
	requestMap.put("product",p);
	System.out.println(p);
		return "editForm";
 }
	/**
	 * 修改
	 * @return
	 */
	public String editProduct(){
		try {
			iProductService.editProduct(product);
				jsonData="true";
		} catch (BizException e) {
			jsonData="false";
			e.printStackTrace();
		}
		return SUCCESS;
	}
	/**
	 * 删除单个
	 * @return
	 */
	public String delete(){
		try {
			iProductService.deleteProductById(product.getId());
			jsonData="true";
		} catch (BizException e) {
			jsonData="false";
			e.printStackTrace();
		}
		return SUCCESS;
	}
	/**
	 * 删除多个
	 * @return
	 */
	public String deleteMultiple(){
		System.out.println(ids);
		try {
			iProductService.deleteProductByIds(ids);
			jsonData="true";
		} catch (BizException e) {
			jsonData="false";
			e.printStackTrace();
		}
		return SUCCESS;
	}
	/**
	 * 导入excel
	 * @return
	 */
	@SuppressWarnings({"unchecked"})
	public String importExcel(){
		params=service.findParams(PRODUCT_CATEGORY);
		wareHouse=wareHouseService.findWareHouseInfos();
		units=service.findParams(UNIT_TYPE);
		FileInputStream inputStream=null;
		try {
			inputStream=new FileInputStream(productExcel);
			
			List<List> rowList = ExcelHelper.getInstanse().excelFileConvertToList(inputStream);
			//删除了表头
			rowList.remove(0);
			//统计前边的必填项是否为null了,为null小于10报错
		
			List<Product> plist=new ArrayList<Product>();
			//以下可以封装
			validateExcel(rowList,plist);
			iProductService.addProduct(plist);
			jsonData="true";
		} catch (FileNotFoundException e) {
			jsonData=e.getMessage();
		} catch (Exception e) {
			jsonData=e.getMessage();
		}finally{
			if(inputStream!=null){
				try {
					inputStream.close();
				} catch (IOException e) {
					System.out.println("FileInputStream关闭失败");
					e.printStackTrace();
				}
			}
		}
		return SUCCESS;
	}
/**
 * 验证导入的excel
 * @param rowList
 * @param p
 * @param plist
 */
	private void validateExcel(List<List> rowList,
			List<Product> plist) {
		List cellObject=null;
		List cellObject2=null;
		for (List list : rowList) {
			cellObject=list.subList(0, 9);
			cellObject2=list.subList(11,list.size());
			//前边必填项未填满的
			if(cellObject.contains("")){
				Map <Object,Integer> map = new HashMap <Object,Integer>(); 
				for(Object o :cellObject){ 
				  map.put(o, map.get(o)==null?1:map.get(o)+1); 
				}
				if(map.get("")<9){
					throw new RuntimeException("商品信息必填项不能为空");
					//多个初始仓库的情况
				}else if(map.get("")==9&&!cellObject2.contains("")){
					boolean flag=false;
					//商品必填项全部没有的情况下
					if(plist.isEmpty()){
						throw new RuntimeException("商品信息不能为空");
					}
					for (int i = 0; i < wareHouse.size(); i++) {
						if(wareHouse.get(i).getName().equals(list.get(11))){
							//验证productinitItem数据
							int qty=0;
							double cost=0;
							double totalPrice=0;
							if(RegularValidate.isNumber(list.get(12).toString())){
								Product p=new Product();
								p.setIsEnable(RegularValidate.positiveInteger(list.get(12).toString()));
								qty=(int)Double.parseDouble((list.get(12).toString()));
							}else{
								throw new RuntimeException("期初数量填写错误!");
							}
							if(RegularValidate.isNumber(list.get(13).toString())){
								cost=Double.parseDouble((list.get(13).toString()));
							}else{
								throw new RuntimeException("单位成本填写错误!");
							}
							if(RegularValidate.isNumber(list.get(14).toString())){
								totalPrice=Double.parseDouble((list.get(14).toString()));
							}else{
								throw new RuntimeException("期初总价填写错误!");
							}
							
							//比较仓库是否存在
							boolean repetition=false;
								for (ProductInitItem pii : plist.get(plist.size()-1).getProductInitItems()) {
									if(pii.getWareHouse().getName().equals(list.get(11))){
										repetition=true;
									}
								}
							if(repetition) 	throw new RuntimeException("同一商品不能添加重复仓库!");
							plist.get(plist.size()-1).getProductInitItems().add(new ProductInitItem(null, new WareHouse(wareHouse.get(i).getId(),list.get(11).toString()),qty,cost,totalPrice,null));
							
							flag=false;
							break;
						}else{
							flag=true;
							
						}
					}
					if(flag)throw new RuntimeException("初始仓库不存在!");
				}
			}else if(cellObject2.contains("")){
					throw new RuntimeException("初始仓库信息不能为空");
			}else{
			/**
			 * esle 组装成对象,set属性失败报错,
			 * 商品信息比较equals组装的,是否存在该信息
			 * 最后list比较仓库和类别存入id,
			 */
			Product p=new Product();
			p.setName(list.get(0).toString());
			p.setSpec(list.get(1).toString());
			boolean flag = false;
			for (int i = 0; i < params.size(); i++) {
				if(params.get(i).getName().equals(list.get(2))){
					 p.setCategory(new Param(params.get(i).getId(), list.get(2).toString(),PRODUCT_CATEGORY));
					 flag = false;
					 break;
				}else{
					flag = true;
					}
				}
			if(flag)throw new RuntimeException("不存在的商品类别");
			
			for (int i = 0; i < wareHouse.size(); i++) {
				if(wareHouse.get(i).getName().equals(list.get(3))){
					p.setWarehouse(new WareHouse(wareHouse.get(i).getId(),list.get(3).toString()));
					 flag = false;
					 break;
				}else{
					flag = true;
				}
			}
			if(flag)throw new RuntimeException("不存在的首选仓库");
			for (int i = 0; i < units.size(); i++) {
				if(units.get(i).getName().equals(list.get(4))){
					p.setUnit(list.get(4).toString());
					 flag = false;
					 break;
				}else{
					flag = true;
				}
			}
			if(flag)throw new RuntimeException("不存在的计量单位");
			
			if(RegularValidate.isNumber(list.get(5).toString())){
				p.setPurchasePrice(Double.valueOf(list.get(5).toString()));
			}else{
				throw new RuntimeException("采购价请输入正确的数字");
			}
			if(RegularValidate.isNumber(list.get(6).toString())){
				p.setSalePrice((Double.valueOf(list.get(6).toString())));
			}else{
				throw new RuntimeException("预计销售价请输入正确的数字");
			}
			if(RegularValidate.proNatureReg(String.valueOf(list.get(7)))){
				p.setProNature((int)Double.parseDouble(list.get(7).toString()));
			}else{
				throw new RuntimeException("非法的商品性质");
			}
			if(RegularValidate.trueOrFalse(list.get(8).toString())){
				p.setIsEnable(RegularValidate.trueOrFalse(list.get(8).toString()));
			}else{
				throw new RuntimeException("是否启用填写错误");
			}
			
			
			List<ProductInitItem> pi=new ArrayList<ProductInitItem>();
			for (int i = 0; i < wareHouse.size(); i++) {
				if(wareHouse.get(i).getName().equals(list.get(11))){
					//验证productinitItem数据
					Integer qty=0;
					double cost=0;
					double totalPrice=0;
					if(RegularValidate.isNumber(list.get(12).toString())){
						qty=(int)Double.parseDouble((list.get(12).toString()));
					}else{
						throw new RuntimeException("期初数量填写错误!");
					}
					if(RegularValidate.isNumber(list.get(13).toString())){
						cost=Double.parseDouble((list.get(13).toString()));
					}else{
						throw new RuntimeException("单位成本填写错误!");
					}
					if(RegularValidate.isNumber(list.get(14).toString())){
						totalPrice=Double.parseDouble((list.get(14).toString()));
					}else{
						throw new RuntimeException("期初总价填写错误!");
					}
//						 p.setProductInitItems(new List<ProductInitItem>().add(new ProductInitItem(null, wareHouse, null, cost, totalPrice, p)));
					pi.add(new ProductInitItem(null, new WareHouse(wareHouse.get(i).getId(),list.get(11).toString()),qty,cost,totalPrice,null));
					p.setProductInitItems(pi);
					List<Product> intrList=iProductService.selectByImport();
					if(intrList.contains(p)){
						throw new RuntimeException("已存在的产品编号和名称");
					}
					plist.add(p);
					flag=false;
					break;
				}else{
					flag=true;
				}
			}
			if(flag)throw new RuntimeException("不存在的初始仓库");
			
		  }
			
		}
	} 
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Boot可以使用POI库来导入Excel文件。POI是一个Java库,用于读取和写入Microsoft Office格式的文件,包括Excel。以下是使用Spring Boot和POI导入Excel文件的基本步骤: 1. 添加POI依赖 在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> ``` 2. 创建Excel文件 在Excel中创建一个表格,包含要导入的数据。确保表格的列名与Java类中的属性名称相匹配。 3. 创建Java类 创建一个Java类来表示Excel中的数据。该类应该包含与Excel表格中的列相对应的属性。 4. 创建Controller 创建一个Spring Boot控制器,用于处理Excel文件的导入。在控制器中,使用POI库来读取Excel文件,并将数据映射到Java对象中。 5. 测试导入 使用Postman或其他HTTP客户端测试导入功能。将Excel文件作为请求体发送到控制器,并验证数据是否已成功导入。 以上是使用Spring Boot和POI导入Excel文件的基本步骤。 ### 回答2: Spring Boot 是一个快速开发框架,它通过自动配置帮助开发人员快速搭建应用程序,POI 则是一款提供操作 Microsoft Office 文件的 Java 库。在开发过程中,经常需要将数据导入 Excel 表格中,使用 Spring Boot 和 POI 结合起来,可以更加简单地实现数据导入 Excel 的功能。 首先,需要在 Maven 中引入 POI 相关依赖: ``` <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> ``` 接下来,使用 Spring Boot 提供的文件上传组件 MultipartFile 接收上传的文件,并使用 POI 的工具类读取 Excel 文件中的数据: ``` import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import java.io.InputStream; @RestController public class ExcelController { @PostMapping("/import") public String importExcel(@RequestParam("file") MultipartFile file) throws Exception { InputStream inputStream = file.getInputStream(); XSSFWorkbook workbook = new XSSFWorkbook(inputStream); // 获取第一个工作表 XSSFSheet sheet = workbook.getSheetAt(0); for (Row row : sheet) { for (Cell cell : row) { String value = cell.getStringCellValue(); System.out.println(value); } } workbook.close(); inputStream.close(); return "success"; } } ``` 在上述代码中,首先通过 MultipartFile 对象获取上传的文件,然后获取文件的输入流并传给 XSSFWorkbook 类,通过该类的 getSheetAt() 方法获取第一个工作表,接着循环遍历每一行和每一列的单元格,使用 getStringCellValue() 方法获取每个单元格的值。 值得注意的是,上述代码只是简单地读取 Excel 文件中的数据,如果需要将数据插入或更新至数据库,还需要对读取到的数据进行处理。 综上所述,使用 Spring Boot 和 POI 结合实现数据导入 Excel 的功能,既方便又高效,能够提高开发效率,并且可以通过扩展代码实现更多的功能。 ### 回答3: Spring Boot是一个基于Spring框架的快速开发应用程序的工具。它很适合于开发Web应用程序和微服务。在Spring Boot项目中使用POI(Poor Obfuscation Implementation)导入Excel文件可以方便地读取和处理大量数据。以下是关于如何使用Spring Boot和POI导入Excel的详细步骤。 第一步:在pom.xml中导入POI库依赖 ```xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.0.1</version> </dependency> ``` 第二步:编写处理Excel文件的Java程序 1. 首先使用@RequestMapped注释将处理程序的URL映射到控制器类中。 ```java @Controller @RequestMapping("/excel") public class ExcelController { } ``` 2. 通过使用@RequestParam注释接收上传Excel文件的请求,并使用MultipartFile对象处理上传的Excel文件。 ```java @PostMapping("/upload") public String upload(@RequestParam("file") MultipartFile file) { } ``` 3. 读取Excel数据需要使用POI的对象,首先我们需要定义一个Workbook对象来表示整个Excel文件。 ```java Workbook workbook = null; ``` 4. 接下来使用try/catch块加载Excel文件,并使用XSSFWorkbook对象将文件数据转换成Workbook对象。 ```java try { workbook = new XSSFWorkbook(file.getInputStream()); } catch (IOException e) { e.printStackTrace(); } ``` 5. 通过Workbook对象获取Sheet对象,Sheet对象表示Excel文件中的一个工作表。 ```java Sheet sheet = workbook.getSheetAt(0); ``` 6. 接下来,使用for循环遍历工作表中的每一行。 ```java for (Row row: sheet) { } ``` 7. 在for循环中,我们可以使用getCell()方法获取每一行的单元格数据。 ```java Cell cell = row.getCell(0); ``` 8. 使用if语句检查单元格数据类型。 ```java if (cell.getCellType() == CellType.STRING) { } ``` 9. 如果单元格数据是字符串,则使用getString()方法获取该单元格的值。 ```java String cellValue = cell.getStringCellValue(); ``` 10. 最后,关闭workbook对象并返回结果。 ```java workbook.close(); return "redirect:/success"; ``` 总结:通过Spring Boot框架和POI库,处理Excel文件已经变得很简单。我们只需要在配置文件中导入POI库依赖项,编写处理Excel文件的Java程序,然后在控制器类中将其映射到相应的URL路径即可。通过这种方法,我们可以快速地读取和处理大量的Excel数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值