private void initResource() { try { fetitems.clear(); orderCache.loadData(); itemCache.loadData(); imeiCache.loadData(); } catch (Exception e) { logger.error(e); } }
/** @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(); } }