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