Openbravo 手工导入商品库存与价格

      由于Openbravo自带的导入功能 不能够导入商品价格和库存。所以就只能我们手工导入了。

   

      一. 导入商品价格

      

       1.首先得新建一个excel表格,里面包含了商品编号(在ob里面对应搜索关键字)和价格这2列。示例参考附件1

 

       2.利用java操作excel表格工具读取这个excel表格,核心代码如下:

 

      

public static  List<ProductInfo> readProductInfo ()throws Exception{
		
		//新建一个文件
		java.io.File newFile = new File("C:\\Users\\Administrator\\product.xls");
		//创建只读的Excel工作薄的对象
		jxl.Workbook rw = jxl.Workbook.getWorkbook(newFile);
		//创建可写入的Excel工作薄对象
		jxl.write.WritableWorkbook  wwb = Workbook.createWorkbook(newFile, rw);
		//读取第一张工作表
		jxl.write.WritableSheet ws = wwb.getSheet(0);
		//获得最早的空行 
		int rowId = 3;
		
		//商品列表
		List<ProductInfo> productList = new java.util.LinkedList<ProductInfo>();
		
		while(true){
		Cell example = ws.getCell(0, rowId);
		if(example instanceof jxl.biff.EmptyCell ){
			System.out.println("找到第一个空行!");
			break;
		}else{
			
			ProductInfo pi = new ProductInfo();
			
			//读取商品
			Cell productId = ws.getCell(0, rowId);
			pi.setProduct_id(productId.getContents());			
			Cell priceList = ws.getCell(1, rowId);
			pi.setList_price(Double.parseDouble(priceList.getContents()));			
			productList.add(pi);
		}
			rowId++;
		}
		
		//写入Excel工作表
	    wwb.write();
	    //关闭Excel工作薄对象
		wwb.close();
		
		return productList;
	}

    

    3. 将读取到的价格信息 循环导入OB。核心代码如下:

 

  

public static void modify(List<ProductInfo> pl){
		
		Connection conn = ConnectOracle.getConn();
		
		try{
		Statement stmt = conn.createStatement();
		
		//获得商品信息主键
		for(int i=0;i<pl.size();i++){
			ProductInfo pi = pl.get(i);
			String hql = "select m_product_id from m_product where value='"+pi.getProduct_id()+"'";
			ResultSet rs = stmt.executeQuery(hql);
			if(rs.next()){
				pi.setProduct_id(rs.getInt("m_product_id")+"");
			}else{
				System.out.println("错误");
				pl.remove(i);
				i--;
			}
		}
		//修改价格
		for(int j=0;j<pl.size();j++){
			
			ProductInfo pi = pl.get(j);
			
			String hql22 = "select * from m_productprice t where t.ad_client_id='1000000' and t.M_PRICELIST_VERSION_ID" +
					"='1000002' and t.M_PRODUCT_ID='"+pi.getProduct_id()+"'";
			ResultSet rs = stmt.executeQuery(hql22);
			
			if(rs.next()){
				continue;
			}
			
			String hql = "insert into m_productprice (M_PRICELIST_VERSION_ID,M_PRODUCT_ID,AD_CLIENT_ID,AD_ORG_ID" +
					",CREATEDBY,UPDATEDBY,PRICESTD) values (1000002,"
			+pi.getProduct_id()+",1000000,0,1000000,1000000,"+pi.getList_price()+")";
			
			stmt.executeUpdate(hql);
			System.out.println("aaa     "+pi.getProduct_id());
		}
		conn.close();
		}catch(Exception e){
			e.printStackTrace();
		}
		
	}

 

 

 

    二.  导入商品库存信息

 

    1.首先得新建一个excel表格,里面包含了商品编号(在ob里面对应搜索关键字)和库存数量这2列。示例参考附件2

 

    2. 利用java读取这个excel文件,代码与读取上面的价格类似。

  

    3. 将读取到的价格信息 循环导入OB。核心代码如下:

 

   

public static void modify(List<StockInfo> ls){
		
		
		Connection conn = ConnectOracle.getConn();
		try{
		Statement stmt = conn.createStatement();
		
		int id = 5500001;
		//修改库存
		for(int j=0;j<ls.size();j++){
			StockInfo si = ls.get(j);
			String hql ="insert into M_STORAGE_DETAIL (M_PRODUCT_ID,M_LOCATOR_ID,C_UOM_ID" +
					",QTYONHAND,AD_CLIENT_ID,AD_ORG_ID,CREATEDBY," +
					"UPDATEDBY,M_STORAGE_DETAIL_ID) values("+si.getProduct_id()+",1000000,100,100,1000000,0,1000000,1000000,"+id+")";			id++;
			stmt.executeUpdate(hql);
			System.out.println("bbbb");
		}
		conn.close();
		}catch(Exception e){
			e.printStackTrace();
		}
	}

 

    在这里 偷了一下懒。库存表里面的主键应该是需要调用存储过程来生产的。这里直接自定义了,需要注意这一点,这是非常不好的做法。

    

你可能感兴趣的:(C++,c,工作,Excel,J#)