⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 materialparse.java

📁 SAP这个系统的一个转换器
💻 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 + -