由于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();
}
}
在這裡 偷了一下懶。庫存表裡面的主鍵應該是需要調用存儲過程來生産的。這裡直接自定義了,需要注意這一點,這是非常不好的做法。