天天看點

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();
		}
	}
           

    在這裡 偷了一下懶。庫存表裡面的主鍵應該是需要調用存儲過程來生産的。這裡直接自定義了,需要注意這一點,這是非常不好的做法。

繼續閱讀