📄 materialparse.java
字号:
package com.idoc.logic;
import com.idoc.face.InterfaceParse;
/**
* <p>Title: IDOC Interface</p>
* <p>Description: IDOC 转换器</p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: SiChuan XinHua</p>
* @author Richary
* @version 1.0
*/
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Vector;
import com.idoc.util.Operate;
import com.idoc.util.FieldData;
import com.idoc.file.ReadData;
import com.idoc.logic.TempTableDispose;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
public class MaterialParse
implements InterfaceParse {
private Operate operate = null;
private String m_text = ""; // 商品主数据
private String t_text = ""; // 价格数据
private String type = ""; // 段名 -- 往哪个加数据
private String segment = ""; // 段名 -- 根据段名进行解析
private String t_temp = ""; // 解析临时存储
private String rt = ""; // 解析每行数据生成的数据串
private String d_temp = ""; // 存放从数组里取得的数据
private Vector m_vec = new Vector(); // 主数据INSERT的VECTOR
private Vector t_vec = new Vector(); // 价格数据INSERT的VECTOR
private Vector add_vec = new Vector(); // 存放增强字段的值
private Vector v_vec = new Vector(); // 修改是否为免费商品
private Vector e_vec = new Vector(); // EAN数据INSERT的VECTOR
private String free = ""; // 免费商品的免费标志
private int time = 0;
public MaterialParse() {
}
/**
* 解析行数据
* @param count
* @param str
* @return
*/
public String getStr(int count, String str) {
if (str == null || str.equalsIgnoreCase("")) {
return "";
}
segment = "";
t_temp = "";
rt = "";
if (count == 1) { // 处理IDOC文件的第一行数据
return "";
}
else {
// 得到段名
segment = operate.getsubString(str, 0, 30);
// 表示数据的第一行开始
if (segment.equalsIgnoreCase("E2WPA01")) {
// 门店地址 -- 门店地址从63开始,但是前面有5位0,所以多取5位
t_temp = operate.getsubString(str, 69, 73);
if (rt == null || rt.equals("")) {
rt = "'" + t_temp + "'";
}
else {
rt = rt + ",'" + t_temp + "'";
}
// 修改标志 --- 0:有效;1:无效
t_temp = operate.getsubString(str, 73, 77);
if (t_temp.equalsIgnoreCase("MODI")) {
rt = rt + ",0";
}
else if (t_temp.equalsIgnoreCase("DELE")) {
rt = rt + ",1";
}
// 更改日期 -- 表示的商品的有效日期起,有效日期止是默认无穷
t_temp = operate.getsubString(str, 81, 89);
// t_temp = t_temp.substring(0,4)+"-"+t_temp.substring(4,6)+"-"+t_temp.substring(6);
rt = rt + ",'" + operate.formatDate(t_temp) + "','9999-12-31'";
// 商品编码
t_temp = operate.getsubString(str, 132, 157);
rt = rt + ",'" + t_temp + "'";
// 计量单位
t_temp = operate.getsubString(str, 157);
rt = rt + ",'" + t_temp + "'";
}
if (segment.equalsIgnoreCase("E2WPA02002")) { // 处理第二段
// 商品类目
t_temp = operate.getsubString(str, 63, 78);
if (rt == null || rt.equals("")) {
rt = "'" + t_temp + "'";
}
else {
rt = rt + ",'" + t_temp + "'";
}
}
if (segment.equalsIgnoreCase("E2WPA03")) { // 处理第三段
// 商品名称
t_temp = operate.escape(operate.getsubString(str, 71, str.length() - 4));
if (rt == null || rt.equals("")) {
rt = "'" + t_temp + "'";
}
else {
rt = rt + ",'" + t_temp + "'";
}
}
if (segment.equalsIgnoreCase("E2WPA04")) {
time++;
// 条件/折扣
t_temp = operate.getsubString(str, 63, 67);
if (rt == null || rt.equals("")) {
rt = "'" + t_temp + "'";
}
else {
rt = rt + ",'" + t_temp + "'";
}
// 促销编码
t_temp = operate.getsubString(str, 67, 82);
rt = rt + ",'" + t_temp + "'";
// 有效起始日期
t_temp = operate.getsubString(str, 82, 90);
t_temp = operate.formatDate(t_temp);
rt = rt + ",'" + t_temp + "'";
// 有效结束日期
t_temp = operate.getsubString(str, 94, 102);
t_temp = operate.formatDate(t_temp);
rt = rt + ",'" + t_temp + "'";
// 免费标志 --- 1:赠品;0:非赠品
t_temp = operate.getsubString(str, 106, 110);
if (!t_temp.equalsIgnoreCase("")) {
free = "1";
}
else {
free = "0";
}
}
if (segment.equalsIgnoreCase("E2WPA05002")) { // 处理第五段
time++;
// +/- 条件符号
t_temp = operate.getsubString(str, 63, 64);
if (rt == null || rt.equals("")) {
rt = "'" + t_temp + "'";
}
else {
rt = rt + ",'" + t_temp + "'";
}
// 条件比率,百分比条件
t_temp = operate.getsubString(str, 64, 74);
rt = rt + ",'" + t_temp + "'";
// 金额
t_temp = operate.getsubString(str, 74, 94);
if (t_temp.equalsIgnoreCase("") || t_temp.equalsIgnoreCase("null") ||
t_temp == null) {
t_temp = "0";
}
rt = rt + "," + t_temp;
// 数量
t_temp = operate.getsubString(str, 94, 104);
if (t_temp.equalsIgnoreCase("") || t_temp.equalsIgnoreCase("null") ||
t_temp == null) {
t_temp = "0";
}
rt = rt + "," + t_temp;
// 货币码
t_temp = operate.getsubString(str, 104, 109);
rt = rt + ",'" + t_temp + "'";
// 内容单位
t_temp = operate.getsubString(str, 109, 112);
rt = rt + ",'" + t_temp + "'";
}
if (segment.equalsIgnoreCase("E2WXX01")) { // 处理第增强字段
// 增强字段:出版社、作者、系列书名
t_temp = operate.getsubString(str, 78);
if (rt == null || rt.equals("")) {
rt = "'" + t_temp + "'";
}
else {
rt = rt + ",'" + t_temp + "'";
}
add_vec.add(t_temp);
}
}
return rt;
}
public boolean parseData(File file) {
operate = new Operate();
BufferedReader br = null;
InputStream bin = null;
InputStreamReader ir = null;
Vector file_vec = new Vector();
String record = "";
String master = ""; // 主键数据
String m_sql = ""; // 主数据的INSERT-SQL语句
String t_sql = ""; // 价格数据的INSERT-SQL语句
String e_sql = ""; // EAN数据的INSERT-SQL语句
String[][] data = new String[5][2];
String temp = ""; // 临时存储修改的SQL语句
String u_master = ""; // 修改的主键数据的 --- 修改的商品主数据的主键
String eanData = ""; // EAN数据INSERT
String t_stroe_code = ""; // 临时存放门店
String t_merch_code = ""; // 临时存放商品编码
int recCount = 0;
m_sql = "insert into T_SAPIN_SY_MASTER_Merch (STORECODE,CANUSE_Flag,CANUSE_StartDate,CANUSE_EndDate,Merch_CODE,COMP_UNIT,Merch_Cate,merch_name,Publishing_code,AUTHOR,Series_Name) values (";
t_sql = "insert into T_SAPIN_SY_MASTER_PRICE (STORECODE,Merch_CODE,PRICE_TYPE,Promotion_CODE,Begin_Date,End_Date,VORZEICHEN,KONDSATZ,KONDWERT,MENGE,CURRENCY,CONTENT_UNIT) values (";
e_sql = "insert into T_SAPIN_SY_MASTER_EAN (STORECODE,Merch_CODE,EAN_CODE,MASTER_CODE,CANUSE_Flag) VALUES (";
try {
data = FieldData.getData("WP_PLU02");
FileInputStream fis = new FileInputStream(file);
byte[] buff = new byte[ (int) file.length()];
int len = 0, pos = 0;
while ( (len = fis.read(buff, pos, buff.length - pos)) > -1 &&
pos < buff.length) {
pos += len;
}
fis.close();
bin = new java.io.ByteArrayInputStream(buff);
ir = new InputStreamReader(bin);
br = new BufferedReader(ir);
record = new String();
while ( (record = br.readLine()) != null) {
recCount++;
if (recCount == 1) { // 处理第一行数据
type = record.substring(39, 69).trim();
if (!type.equalsIgnoreCase("WP_PLU02")) {
break;
}
}
else {
type = operate.getsubString(record, 0, 30);
for (int i = 0; i < data.length; i++) {
if (data[i][0].equalsIgnoreCase(type)) {
d_temp = data[i][1];
break;
}
}
if (recCount != 1 &&
operate.getsubString(record, 55, 61).equalsIgnoreCase("000000") &&
type.equalsIgnoreCase("E2WPA01")) { // 一条IDOC开始
if (m_text != null && !m_text.equalsIgnoreCase("")) {
m_text = m_sql + m_text + ")";
// 处理一个IDOC里面同一门店存在多个相同的物料,前提条件是相同的物料必须相临
if (!operate.getsubString(record, 69,
73).equalsIgnoreCase(t_stroe_code) ||
!operate.getsubString(record, 132,
157).equalsIgnoreCase(t_merch_code)) {
// 得到新增的商品数据的SQL
m_vec.add(m_text);
// EAN数据的INSERT的VECTOR
e_vec.add(e_sql + eanData + ")");
eanData = "";
}
if (time == 2 && !t_text.equalsIgnoreCase("")) {
time = 0;
t_text = master + "," + t_text;
t_text = t_sql + t_text + ")";
// 得到价格新增数据
t_vec.add(t_text);
t_text = "";
}
// 修改商品主数据的免费标志
if (free != null && !free.equalsIgnoreCase(""))
v_vec.add("update T_SAPIN_SY_MASTER_Merch set Free_flag=" +
free +
u_master);
}
m_text = getStr(recCount, record);
// 临时存放门店
t_stroe_code = operate.getsubString(record, 69, 73);
// 临时存放商品编码
t_merch_code = operate.getsubString(record, 132, 157);
// 得到EAN码 0:有效;1:无效
eanData = "'" + operate.getsubString(record, 69, 73) + "','" +
operate.getsubString(record, 132, 157) + "','" +
operate.getsubString(record, 107, 132) + "',1";
if (operate.getsubString(record, 73, 77).equalsIgnoreCase("MODI")) {
eanData += ",0";
}
else {
eanData += ",1";
}
master = "'" + operate.getsubString(record, 69, 73) + "','" +
operate.getsubString(record, 132, 157) + "'";
// 根据价格的免费标志去修改主键数据免费标志
u_master = " where STORECODE='" +
operate.getsubString(record, 69, 73) + "' and Merch_CODE='" +
operate.getsubString(record, 132, 157) + "'";
}
else {
if (d_temp.equalsIgnoreCase("basis")) {
if (!getStr(recCount, record).equalsIgnoreCase("")) {
m_text = m_text + "," + getStr(recCount, record);
}
}
else if (d_temp.equalsIgnoreCase("offset")) {
if (time == 2) {
time = 0;
t_text = master + "," + t_text;
t_text = t_sql + t_text + ")";
// 得到价格新增数据
t_vec.add(t_text);
t_text = getStr(recCount, record);
}
else {
if (t_text == null || t_text.equalsIgnoreCase("")) {
t_text = getStr(recCount, record);
}
else {
t_text = t_text + "," + getStr(recCount, record);
}
}
}
}
}
}
m_text = m_sql + m_text + ")";
m_vec.add(m_text);
m_text = "";
temp += "Publishing_code='" + add_vec.get(0).toString() + "',AUTHOR='" +
add_vec.get(1).toString() + "',";
temp += "Series_Name='" + add_vec.get(2).toString() + "'";
temp = "update T_SAPIN_SY_MASTER_Merch set " + temp + u_master;
temp = "";
// 修改商品主数据的免费标志
if (free != null && !free.equalsIgnoreCase(""))
v_vec.add("update T_SAPIN_SY_MASTER_Merch set Free_flag=" + free +
u_master);
// EAN数据的INSERT的VECTOR
e_vec.add(e_sql + eanData + ")");
eanData = "";
// 处理价格
if (!String.valueOf(time).equalsIgnoreCase("0") &&
!t_text.equalsIgnoreCase("")) {
t_text = master + "," + t_text;
t_text = t_sql + t_text + ")";
t_vec.add(t_text);
}
}
catch (Exception ex3) {
System.out.println("paseData ex : " + ex3.toString());
ex3.printStackTrace();
}
finally {
try {
if (br != null)
br.close();
if (ir != null)
ir.close();
if (bin != null)
bin.close();
}
catch (IOException ex) {
//
}
}
return true;
}
public boolean disposeData(File file) {
boolean flag = false;
try {
flag = parseData(file);
}
catch (Exception ex) {
System.out.println("MaterialParse : " + ex.toString());
}
TempTableDispose dispose = new TempTableDispose();
try {
flag = dispose.disposeData(t_vec, file, "price");
}
catch (Exception ex) {
System.out.println("TempTableDispose master price is dispose Error!");
ex.printStackTrace();
}
try {
flag = dispose.disposeData(e_vec, file, "ean");
}
catch (Exception ex) {
System.out.println("TempTableDispose master ean is dispose Error!");
ex.printStackTrace();
}
try {
flag = dispose.disposeData(m_vec, v_vec, file, "material");
}
catch (Exception ex) {
System.out.println("TempTableDispose master merch is dispose Error!");
ex.printStackTrace();
}
return flag;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -