Exemplo n.º 1
0
  private void initResource() {
    try {
      fetitems.clear();

      orderCache.loadData();
      itemCache.loadData();
      imeiCache.loadData();
    } catch (Exception e) {
      logger.error(e);
    }
  }
Exemplo n.º 2
0
/** @author wenhsiaoyi 遠傳訂單匯入處理器 */
public class FetImeiImporter {
  private static final Log logger = LogFactory.getLog(FetImeiImporter.class);
  List<FetorderimeiVo> fetitems = new ArrayList<FetorderimeiVo>();
  private StringBuilder importmemo = new StringBuilder();
  private FetOrderCache orderCache = FetOrderCache.getInstance();
  private FetItemCache itemCache = FetItemCache.getInstance();
  // IMEI 進貨明細
  private FetOrderImeiCache imeiCache = FetOrderImeiCache.getInstance();
  // IMEI 主檔
  private FetImeiCache fetimeiCache = FetImeiCache.getInstance();
  // IMEI 主檔細項
  private FetImeiItemCache fetimeiItemCache = FetImeiItemCache.getInstance();
  FetOrderImeiDao orderimeiDao = new FetOrderImeiDao();
  FetImeiDao fetimeiDao = new FetImeiDao();
  FetImeiItemDao fetimeiItemDao = new FetImeiItemDao();
  FetOrderDao orderDao = new FetOrderDao();
  FetImeihistoryDao imeiHistDao = new FetImeihistoryDao();

  public FetImeiImporter() {}

  private void initResource() {
    try {
      fetitems.clear();

      orderCache.loadData();
      itemCache.loadData();
      imeiCache.loadData();
    } catch (Exception e) {
      logger.error(e);
    }
  }

  private FetorderVo isOrderExist(String eorder) throws Exception {
    FetorderVo vo = null;
    try {
      FetOrderCache cache = FetOrderCache.getInstance();
      vo = cache.get(eorder);

    } catch (Exception e) {
      logger.error(e);
      throw e;
    }

    return vo;
  }

  private FetorderitemVo isOrderItemExist(String key) throws Exception {
    FetorderitemVo vo = null;
    try {
      FetOrderItemCache cache = FetOrderItemCache.getInstance();
      vo = cache.get(key);

    } catch (Exception e) {
      logger.error(e);
      throw e;
    }

    return vo;
  }

  private FetorderimeiVo isImeiExist(String imei) throws Exception {
    FetorderimeiVo vo = null;
    try {
      FetOrderImeiCache cache = FetOrderImeiCache.getInstance();
      vo = cache.get(imei);

    } catch (Exception e) {
      logger.error(e);
      throw e;
    }

    return vo;
  }

  /**
   * @param csv
   * @return List<FetorderimeiVo>
   * @throws Exception
   */
  private List<FetorderimeiVo> buildImeiCollection(List<String[]> csv) throws Exception {
    List<FetorderimeiVo> list = new ArrayList<FetorderimeiVo>();
    FetorderimeiVo imeivo = null;
    int imeiCount = 0;

    try {
      String area = "";
      String bcode = "";
      String storename = "";
      String orderdate = "";
      String eorderno = "";
      String itemno = "";
      String itemname = "";
      String imei = "";
      String sender = "";
      String strStatus = "";
      int status = 1;

      FieldObject fo = null;
      FetOrderImeiFormat orderFields = new FetOrderImeiFormat();

      // 以訂單編號查詢存在訂單檔案
      for (String[] ss : csv) {
        fo = orderFields.getField(FetOrderImeiFormat.Fields.AREA.getName());
        area = ss[fo.getItemno() - 1];
        fo = orderFields.getField(FetOrderImeiFormat.Fields.STORE_CODE.getName());
        bcode = ss[fo.getItemno() - 1];
        fo = orderFields.getField(FetOrderImeiFormat.Fields.STORE_NAME.getName());
        storename = ss[fo.getItemno() - 1];
        fo = orderFields.getField(FetOrderImeiFormat.Fields.ORDER_DATE.getName());
        orderdate = ss[fo.getItemno() - 1];
        fo = orderFields.getField(FetOrderImeiFormat.Fields.ORDER_E_NO.getName());
        eorderno = ss[fo.getItemno() - 1];
        fo = orderFields.getField(FetOrderImeiFormat.Fields.ITEM_NO.getName());
        itemno = ss[fo.getItemno() - 1];
        fo = orderFields.getField(FetOrderImeiFormat.Fields.ITEM_NAME.getName());
        itemname = ss[fo.getItemno() - 1];
        fo = orderFields.getField(FetOrderImeiFormat.Fields.IMEI.getName());
        imei = ss[fo.getItemno() - 1];
        fo = orderFields.getField(FetOrderImeiFormat.Fields.STATUS.getName());
        strStatus = ss[fo.getItemno() - 1];
        fo = orderFields.getField(FetOrderImeiFormat.Fields.SENDER.getName());
        sender = ss[fo.getItemno() - 1];

        Date d =
            new Date(
                DateConverter.parseDateTime(orderdate, DateConverter.FORMAT_WEST_DATE).getTime());

        switch (strStatus) {
          case "作業處理中":
            status = 2;
            break;
          case "未啟用":
            status = 0;
            break;
          case "已啟用":
            status = 1;
            break;
          default:
            status = 0;
            break;
        }

        imeivo = new FetorderimeiVo();
        imeivo.setArea(area);
        imeivo.setBcode(bcode);
        imeivo.setStorename(storename);
        imeivo.setOrderdate(d);
        imeivo.setEorderno(eorderno);
        imeivo.setItemno(itemno);
        imeivo.setItemname(itemname);
        imeivo.setImei(imei);
        imeivo.setStatus(status);
        imeivo.setSender(sender);
        list.add(imeivo);
      }

      // 匯入 IMEI進貨明細表
      for (FetorderimeiVo v : list) {
        imei = v.getImei();
        imeivo = isImeiExist(imei);
        if (NullTK.isNull(imeivo)) {
          orderimeiDao.insert(v);
        } else {
          orderimeiDao.update(v);
        }
        imeiCache.put(imei, v);
        imeiCount++;
      }

      logger.info("匯入IMEI筆數:" + imeiCount);
      importmemo.append("/匯入IMEI筆數:" + imeiCount + "\n");
    } catch (Exception e) {
      logger.error(e);
      throw new Exception("FetImeiImporter:匯入 IMEI進貨明細表 異常:" + e.getMessage());
    }
    return list;
  }

  /**
   * @param csv 匯入核心
   * @throws Exception
   */
  public void doImport(List<String[]> csv) throws Exception {
    try {

      initResource();

      String eorderno = "";
      String strProject = "";
      String imei = "";
      String itemno = "";
      String bcode = "";
      String cost = "";
      // String strStatus = "";
      // String issuestatus = "";
      int status = 0; // 0-未啟用 1-已啟用 2-作業處理中
      // FetOrderImeiCollection orderList = null;
      FetorderVo order = null;
      FetorderitemVo item = null;
      int imeiCount = 0;
      boolean isProject = false;
      List<FetimeiVo> imeiList = new ArrayList<FetimeiVo>();
      FetimeiVo fetimei = null;
      FetimeiitemVo fetimeiitem = null;
      int errOrderNotExistCount = 0;
      // int itemnoChangeCnt = 0;
      // FetimeihistoryVo imeiHistVo = null;

      // 產生IMEI 清單與匯入 IMEI進貨明細表
      List<FetorderimeiVo> imeilist = buildImeiCollection(csv);
      String key = "";
      String msg = "";
      // String oldItemno = "";
      // String newItemno = "";
      // 轉檔IMEI主檔 產生訂單彙總
      for (FetorderimeiVo imeivo : imeilist) {
        isProject = false;
        eorderno = imeivo.getEorderno();
        logger.info("EOrder No: " + eorderno);
        order = isOrderExist(eorderno);

        // 對應訂單是否存在
        if (NullTK.isNull(order)) {
          msg = "/查無訂單主檔 電子訂單編號:" + imeivo.getEorderno() + "/料號:" + imeivo.getItemno();
          logger.warn(msg);
          importmemo.append(msg + "\n");
          errOrderNotExistCount++;
          continue;
          // throw new Exception(msg);
        }

        // 查詢ITEM項目是否為專案機,以 電子訂單編號與料號抓取。
        key = imeivo.getEorderno() + imeivo.getItemno();
        item = isOrderItemExist(key);
        if (NullTK.isNull(order)) {
          msg = "/查無訂單明細主檔 電子訂單編號:" + imeivo.getEorderno() + "/料號:" + imeivo.getItemno();
          logger.warn(msg);
          importmemo.append(msg + "\n");
          errOrderNotExistCount++;
          // throw new Exception(msg);
          continue;
        }

        strProject = item.getSp();
        isProject = StringTK.equals("專", strProject) ? true : false;
        bcode = imeivo.getBcode();
        imei = imeivo.getImei();
        itemno = imeivo.getItemno();
        cost = Integer.toString(item.getPrice());
        status = imeivo.getStatus();

        // 回寫 訂單明細 店碼
        if (StringTK.isEmpty(order.getBcode())) {
          order.setBcode(bcode);
          orderDao.updateBCode(order);
          orderCache.put(eorderno, order);
        }

        // 專案機拋到 IMEI 主檔清單
        if (isProject) {
          fetimei = new FetimeiVo();
          fetimei.setImei(imei);
          fetimei.setItemno(itemno);
          fetimei.setEorderno(eorderno);
          fetimei.setBcode(bcode);
          fetimei.setCost(Integer.parseInt(cost));
          fetimei.setStatus(status);
          imeiList.add(fetimei);
        }
      }

      // IMEI主檔拋轉匯入
      logger.info("Import IMEI  ");
      for (FetimeiVo iv : imeiList) {
        // 檢查是否存在
        imei = iv.getImei();
        fetimei = fetimeiCache.get(imei);
        if (NullTK.isNull(fetimei)) {
          fetimei = iv;
          logger.info(">>>fetimei null");
          fetimeiDao.insert(fetimei);
          fetimeiCache.put(imei, fetimei);
        } else {
          fetimei.setCost(iv.getCost());
          if (fetimei.getStatus() != 1) { // 已啟用保留狀態
            fetimei.setStatus(status);
          }

          // 促代異動變更 料號紀錄
          /*oldItemno = fetimei.getItemno();
          newItemno = iv.getItemno();
          if(!StringTK.equals(oldItemno, newItemno)) {
          	logger.info(">>>IMEI拋轉促代異動 " + oldItemno + " => " + newItemno);
          	importmemo.append(">>>IMEI拋轉促代異動 " + oldItemno + " => " + newItemno);
          	imeiHistVo = new FetimeihistoryVo();
          	imeiHistVo.setImei(imei);
          	imeiHistVo.setItemno(oldItemno);
          	imeiHistDao.insert(imeiHistVo);

          	fetimei.setItemno(newItemno);
          	fetimeiDao.update(fetimei);
          	fetimeiCache.put(imei, fetimei);
          	itemnoChangeCnt++;
          }*/
        }

        // IMEI細項主檔匯入
        logger.debug("IMEI細項主檔匯入");
        fetimeiitem = fetimeiItemCache.get(imei);
        if (NullTK.isNull(fetimeiitem)) {
          fetimeiitem = new FetimeiitemVo();
          fetimeiitem.setImei(imei);
          fetimeiitem.setItemno(fetimei.getItemno());
          fetimeiItemDao.insert(fetimeiitem);
          fetimeiItemCache.put(imei, fetimeiitem);
        }

        imeiCount++;
      }

      logger.info("IMEI主檔拋轉共 " + imeiCount + " 筆");
      // logger.info("IMEI主檔拋轉促代異動共 " + itemnoChangeCnt + " 筆");
      importmemo.append("IMEI主檔拋轉共 " + imeiCount + " 筆\n");
      // importmemo.append("IMEI主檔拋轉促代異動共 " + itemnoChangeCnt + " 筆\n");

    } catch (Exception e) {
      logger.error("FetImeiImporter: doImport err:" + e);
      throw e;
    }
  }

  public String getImportmemo() {
    return importmemo.toString();
  }
}