由于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();
}
}
在这里 偷了一下懒。库存表里面的主键应该是需要调用存储过程来生产的。这里直接自定义了,需要注意这一点,这是非常不好的做法。