/webccr/src/com/emis/caesar/senao/event/button/TBtnINSU.java
https://bitbucket.org/sanliou/synccr · Java · 585 lines · 457 code · 36 blank · 92 comment · 77 complexity · 388009d1cdeba41b3a8cc455930e80ad MD5 · raw file
- package com.emis.caesar.senao.event.button;
- import com.emis.caesar.senao.data.TEntryEdit;
- import com.emis.caesar.senao.data.TEntryEdits;
- import com.emis.caesar.senao.event.TForceAssignSalesEventContext;
- import com.emis.caesar.senao.unit.TCcrConst;
- import com.emis.caesar.senao.unit.TInsuData;
- import com.emis.caesar.senao.unit.sale.TExItem;
- import com.emis.caesar.senao.unit.sale.TProduct;
- import com.emis.caesar.senao.unit.sale.TSaleItem;
- import com.emis.caesar.senao.util.CcrUtil;
- import com.emis.caesar.senao.util.GenUtil;
- import com.emis.caesar.senao.webAPI.HTTPUtil;
- import com.emis.caesar.senao.webAPI.WebApiUtil;
- import com.emis.db.emisSQLCache;
- import com.emis.util.emisUtil;
- import com.emis.util.emisXmlUtil;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
- import org.w3c.dom.Node;
- import org.w3c.dom.NodeList;
- import java.io.ByteArrayInputStream;
- //ERP CHECK USE ADD BY DAFF 20181224
- import org.apache.http.NameValuePair;
- import org.apache.http.message.BasicNameValuePair;
- import java.util.List;
- import java.util.ArrayList;
- import com.emis.caesar.senao.Json.CheckImeiHead;
- /**
- * 手機保險(年繳) 不可能客訂
- * 哪些交易流程狀態下可執行: 等待交易,正在交易
- * 流程說明:
- * 1.先輸入IMEI碼
- * 2.取得保費資訊函數 GET_INSU_PRICE
- */
- public class TBtnINSU extends TForceAssignSalesEventContext {
- private String sType = ""; // INSU / INSU_OL add by daff 20180615
- private String sfrom = ""; // INSU / INSU_OL add by daff 20180615
- private TEntryEdits FoEntryIMEI = null; // 輸入IMEI
- private String IMEI = "";
- private String PNO = ""; // 保險料號
- private int LIST_PRICE = 0; // 建議售價
- private String CHT_MM_NO = ""; // 組合包
- private String PAYMENT = ""; // 繳費型態
- private int POEXP = 0; // 專案成本(保費)
- private int DEDUCTIBLE = 0; // 自負額
- private String OD_END_DATE = ""; // 終止日期
- private String PRODUCTTYPE = ""; // 產品代號
- private String PERIODS = ""; // 期數(月數)
- private int COMPEN_1 = 0; // 最高賠償次數
- private int DEDUCTIBLE_ORG = 0; // 自負額原機維修
- private String PONO = ""; // 保單號碼
- private TInsuData InsuData = null;
- //CCR IMEI GET CHANGE TO DB FUNCTION ADD BY DAFF 20180629
- private String sP_BRAND= ""; //廠牌
- private String sP_NAME= ""; //品名
- private String sP_VPN= ""; //機型
- private String sP_NO= ""; //料號
- private int sP_PRICE = 0; //建議售價
- //Erp imei check add by daff 20181224
- private String SALEDATE = ""; // 線上銷售日期
- private String AGNTNO = ""; // 通路別代碼
- private String ITEMNO = ""; // 料號
- //ADD BY DAFF 新鈦金月繳版修正
- boolean stepGetInsp = true;
- private String sS_NO= "";
- private String sPERIODS= "";
- private String sREPORT_FILENAME= "";
- public TBtnINSU() {
- super();
- // 該事件執行成功后的下一個流程
- // FiNextState = TCcrConst.CPS_LOCK_PAY;
- }
- // 神腦線上購機O2O/臨櫃CCR 區分 add by daff 20180615
- //ADD BY DAFF 新鈦金月繳版修正 20190322
- public TBtnINSU(String sType_) {
- super();
- FiNextState = TCcrConst.CPS_LOCK_PAY;
- sType = sType_;
- if ("INSU".equals(sType)){
- sfrom = TCcrConst.INSU;
- PAYMENT = TCcrConst.PAYMENT_O ;
- }
- else if("INSU_OL".equals(sType)){
- sfrom = TCcrConst.INSU_OL;
- PAYMENT = TCcrConst.PAYMENT_O ;
- } else if("INSU_M".equals(sType)){
- sfrom = TCcrConst.INSU;
- PAYMENT = TCcrConst.PAYMENT_M ;
- } else if("INSU_OL_M".equals(sType)){
- sfrom = TCcrConst.INSU_OL;
- PAYMENT = TCcrConst.PAYMENT_M ;
- }else{
- sfrom = TCcrConst.INSU;
- PAYMENT = TCcrConst.PAYMENT_O ;
- }
- //CcrUtil.setMessage("SOURCE_FROM:" + TCcrConst.s_from);
- }
- /**
- * 檢核在哪些交易流程狀態下可執行
- */
- protected boolean inCcrSate() {
- int aRunSate[] = { TCcrConst.CPS_WAIT_SALE, TCcrConst.CPS_SALE};
- return GenUtil.isIntKeyInArray(aRunSate, FoCcr.getCurrnetState());
- }
- /**
- * 彈出窗體裡面的按鈕事件
- */
- public boolean runEventMethod(String sMethod_) {
- if (sMethod_.equals("entryIMEIok")) {
- return entryIMEIok();
- } else if (sMethod_.equals("entryIMEIcancel")) {
- return Cancel();
- } else if (sMethod_.equals("clickOK")) {
- return execute();
- } else {
- return super.runEventMethod(sMethod_);
- }
- }
- /**
- * 取消
- * @return boolean
- */
- protected boolean Cancel() {
- FsErrMsg = TCcrConst.MSG_HIDE;
- return eventOver(false);
- }
- protected boolean entryIMEIok() {
- CcrUtil.setMessage("IMEI輸入:" + FoEntryIMEI.getEdit(0).getText());
- String msg = "";
- if (!emisUtil.isEmpty(FoEntryIMEI.getEdit(0).getText())) {
- IMEI = FoEntryIMEI.getEdit(0).getText().toUpperCase(); //add by Ares 20200602 IMEI轉成大寫
- sS_NO =FoCcr.getStore().getFLDxS_NO(); //ADD BY DAFF 新鈦金月繳版修正 20190322
- //ADD BY DAFF 新鈦金月繳版修正 20190322 start
- //剛剛已經開過分期視窗了 第二次我就不給他開了
- if(stepGetInsp){
- if(sfrom.equals("O2O")){
- String API_ERP_RESULT = doCallErpChkimei(IMEI, "POS");
- if (!emisUtil.isEmpty(API_ERP_RESULT)) {
- FsErrMsg = API_ERP_RESULT;
- CcrUtil.setMessage("FsErrMsg:" + FsErrMsg);
- return eventOver(false);
- }
- }
- stepGetInsp = false;
- return WinInsuInspNo();
- }
- sPERIODS = getInsuData().getPERIODS();
- //add by daff 20181224 erpimeicheck START
- if (sfrom.equals("O2O")) {
- //ADD BY DAFF INSUINSP
- msg = FoCcr.getDbData.GET_INSU_ERPIMEI_PRICE(ITEMNO,SALEDATE,AGNTNO,PAYMENT,sS_NO,sPERIODS);
- }else {
- //ADD BY DAFF INSUINSP
- msg = FoCcr.getDbData.GET_INSU_PRICE(IMEI,sfrom,PAYMENT,sS_NO,sPERIODS);
- }
- //ADD BY DAFF 新鈦金月繳版修正 20190322 end
- //add by daff 20181224 erpimeicheck END
- // msg = "Y,4000,2880,S711,48xxxxxxxx,Y,SENMA6,1000,12,0,3";
- if (!emisUtil.isEmpty(msg)) {
- // Y(成功),建議售價,保費,組合包,保險料號,繳費型態,產品代號,自負額,保險期數(月),自負額原機維修,最高賠償次數
- // N(失敗),組合包,失敗原因 (N,S711,取得核保價格異常)
- String [] result = msg.split(",");
- if (result != null && "Y".equals(result[0])) {
- String API_RESULT = doCallInsu(result);
- // API_RESULT = "";
- if (!emisUtil.isEmpty(API_RESULT)) {
- FsErrMsg = API_RESULT;
- return eventOver(false);
- }
- //
- PNO = result[4];
- LIST_PRICE = emisUtil.parseInt(result[1]);
- CHT_MM_NO = result[3];
- PAYMENT = result[5];
- POEXP = emisUtil.parseInt(result[2]);
- DEDUCTIBLE = emisUtil.parseInt(result[7]);
- OD_END_DATE = emisUtil.getAfterDay(emisUtil.parseInt(result[8]));
- PRODUCTTYPE = result[6];
- PERIODS = result[8];
- COMPEN_1 = emisUtil.parseInt(result[10]);
- DEDUCTIBLE_ORG = emisUtil.parseInt(result[9]);
- //CCR IMEI GET CHANGE TO DB FUNCTION ADD BY DAFF 20180629
- // ,廠牌,品名,機型,料號,建議售價
- sP_BRAND= result[11];
- sP_NAME= result[12];
- sP_VPN= result[13];
- sP_NO= result[14];
- sP_PRICE= emisUtil.parseInt(result[15]);
- //ADD BY DAFF 新鈦金月繳版修正 20190322
- sREPORT_FILENAME = result[16];
- } else {
- if (result.length == 3) {
- FsErrMsg = result[2] + "(" + result[1] + ")";
- } else {
- FsErrMsg = result[1];
- }
- return eventOver(false);
- }
- } else {
- FsErrMsg = "無法取得GET_INSU_PRICE函數";
- return eventOver(false);
- }
- } else {
- FsErrMsg = "IMEI不能為空";
- return eventOver(false);
- }
- return openWinInfoData();
- }
- // 開啟保險分期畫面
- //ADD BY DAFF 新鈦金月繳版修正 20190322
- protected boolean WinInsuInspNo() {
- FoCcr.UInotify.swInsuInsp(this, "entryIMEIok", "entryIMEIcancel",IMEI,sfrom,PAYMENT,sS_NO,ITEMNO,SALEDATE,AGNTNO);
- return eventOver(true);
- }
- // 開啟基本資料畫面
- protected boolean openWinInfoData() {
- FoCcr.UInotify.swInsuInfo(this, "clickOK", "entryIMEIcancel");
- return eventOver(true);
- }
- // 檢核資訊
- protected boolean verifyPrecondition() {
- // 呼叫API要有SL_KEY
- if (!forceAssignSales()) {
- return eventOver(false);
- }
- // 檢查是否有輸入業務員
- if (FoCcr.getUser() == null) {
- FsErrMsg = "請輸入業務員";
- return eventOver(false);
- } else {
- if ("".equals(FoCcr.getUser().getFLDxST_KEY())) {
- FsErrMsg = "請輸入業務員";
- return eventOver(false);
- }
- }
- // 小計會有問題要先換狀態
- FoCcr.setCurrnetState(TCcrConst.CPS_SALE);
- NotifyMainFormUpdate();
- return entryData();
- }
- // 輸入資料
- protected boolean entryData() {
- // 彈出視窗輸入IMEI(主要是掃條碼自帶enter鍵, 不適合於輸入框直接刷入)
- FoEntryIMEI = new TEntryEdits("輸入");
- FoEntryIMEI.addEdit(new TEntryEdit("IMEI", true, true));
- FoCcr.UInotify.swEntryEdits(FoEntryIMEI, this, "entryIMEIok", "entryIMEIcancel");
- return handover();
- }
- // 執行交易品項新增&結束
- public boolean execute() {
- String result = addSaleItem();
- if (!emisUtil.isEmpty(result)) {
- FsErrMsg = result;
- return eventOver(false);
- }
- //
- CcrUtil.setMessage("Enter payment and lock pay");
- // 幫做小計
- FoSale.setInsuSfrom(sfrom);//神腦保險年繳代收保費 增加付款方式UI ADD BY DAFF 20190110
- FoCcr.BTNnotify.runBtnEvent(TCcrConst.BTN_SUBTOTAL);
- //
- if (FoSale !=null && FoSale.getUnpaidAmout() != 0) {
- FiNextState = TCcrConst.CPS_LOCK_PAY;
- setNextCcrState();
- }
- return eventOver(true);
- // 原因網頁程式彈窗也不會停止後續的程式碼
- //return finalProcedure();
-
- }
- // 新增交易項
- public String addSaleItem() {
- // 商品項
- // PONO = "CHTAAC000000001";
- //神腦保險年繳代收保費 增加付款方式UI ADD BY DAFF 20190110START
- FoSale.setInsuSPoexp(POEXP);
- FoSale.setCHT_MM_TYPE(PRODUCTTYPE);
- FoSale.setPONO_B(PONO);
- //神腦保險年繳代收保費 增加付款方式UI ADD BY DAFF 20190110 END
- FoSale.setREPORT_FILENAME(sREPORT_FILENAME);//ADD BY DAFF 新鈦金月繳版修正 20190322
- String result = "";
- TProduct product = new TProduct();
- boolean isOK = FoCcr.getDbData.getProduct(
- FoCcr.getStore().getFLDxS_NO(), PNO, product);
- if (!isOK) {
- result = "查無保險料號(" + PNO + ")";
- return result;
- }
- // 檢核5本交易是否該屬性一致
- String msg5 = CcrUtil.isSalable5(FoSale, product);
- if (!emisUtil.isEmpty(msg5)) {
- return msg5;
- }
- // 檢核6是否能混合商品
- String msg6 = CcrUtil.isSalable6(FoSale, product);
- if (!emisUtil.isEmpty(msg6)) {
- return msg6;
- }
- TSaleItem saleItem = new TSaleItem(product);
- saleItem.setQty(1);
- saleItem.setActCode(TSaleItem.NORMAL_PLU);
- saleItem.setFsBusType(product.getFLDxBUS_TYPE());
- saleItem.setPONO(PONO);
- saleItem.setCHT_MM_TYPE(PRODUCTTYPE);
- saleItem.setPOEXP(POEXP);
- // 將資料填入TInsuData
- InsuData.setCHT_MM_NO(CHT_MM_NO);
- InsuData.setPONO(PONO);
- InsuData.setCHA_IMEI(IMEI);
- InsuData.setPAYMENT(PAYMENT);
- TProduct product_imei = new TProduct();
- boolean isOK2 = FoCcr.getDbData.getProductFromIMEI(
- FoCcr.getStore().getFLDxS_NO(), IMEI, product_imei, false);
- //CCR IMEI GET CHANGE TO DB FUNCTION ADD BY DAFF 20180629 START
- /*
- if (!isOK2) {
- result = "查無IMEI料號(" + IMEI + ")";
- return result;
- }
- InsuData.setSUPNO(product_imei.getFLDxP_BRAND());
- InsuData.setMARADESC(product_imei.getFLDxP_NAME());
- InsuData.setMODEL(product_imei.getFLDxP_VPN());
- InsuData.setMOBILE_P_NO(product_imei.getFLDxP_NO());
- InsuData.setLIST_PRICE((int) product_imei.getPrice());
- */
- InsuData.setSUPNO(sP_BRAND);
- InsuData.setMARADESC(sP_NAME);
- InsuData.setMODEL(sP_VPN);
- InsuData.setMOBILE_P_NO(sP_NO);
- InsuData.setLIST_PRICE((int) sP_PRICE);
- //CCR IMEI GET CHANGE TO DB FUNCTION ADD BY DAFF 20180629 END
- InsuData.setPOEXP(POEXP);
- InsuData.setDEDUCTIBLE(DEDUCTIBLE);
- InsuData.setOD_END_DATE(OD_END_DATE);
- InsuData.setPRODUCTTYPE(PRODUCTTYPE);
- InsuData.setPERIODS(PERIODS);
- InsuData.setCOMPEN_1(COMPEN_1);
- InsuData.setDEDUCTIBLE_ORG(DEDUCTIBLE_ORG);
- InsuData.setSFROM(sfrom);// 超級新鈦金 年繳版區分 神腦線上/臨櫃辦理 兩種專案 add by daff 20180615
- saleItem.setoInsuData(InsuData);
- // IMEI
- TExItem tExItem = new TExItem();
- tExItem.setSn(1);
- tExItem.setNo(IMEI);
- tExItem.setSL_MOB_NO(PONO); //存入保單號
- saleItem.addExItem(tExItem);
- //
- FoSale.addSaleItem(saleItem);
- return result;
- }
- // 通知主畫面變更內容顯示
- protected void NotifyMainFormUpdate() {
- FoCcr.UInotify.updateMainForm();
- }
- // 即時核保 API
- private String doCallInsu(String [] data) {
- CcrUtil.setMessage("=====Call 即時核保 API=====");
- String result = "";
- String url = "";
- String API_NO = emisSQLCache.SYS_PARAMS_INSU;
- String HeaderType = "XML";
- String SL_KEY = FoCcr.getCurrentSale().getPrimarykey();
- String API_CALL_TIME = emisUtil.todayDateFormatAll("/");
- //
- url = WebApiUtil.getWEBAPI_URL(API_NO);
- if (emisUtil.isEmpty(url)) {
- result = "WEBAPI異常, 請確認系統設定資料!";
- return result;
- }
- //
- try {
- String xml = generateInvokeXml(data);
- CcrUtil.setMessage("INSU_DATA=" + xml);
- //
- String response = HTTPUtil.sendPost(API_NO, url, xml, SL_KEY, API_CALL_TIME, HeaderType);
- CcrUtil.setMessage("response:" + response);
- if (emisUtil.isEmpty(response)) {
- result = "網頁連線有問題!!";
- FoCcr.wrDataToDb.UpdAPI_LOG_HS(API_NO, API_CALL_TIME, false);
- return result;
- }
- //
- String response2 = AnalyzeResponse(response);
- if (!emisUtil.isEmpty(response2)) {
- result = response2;
- return result;
- }
- } catch (Exception e) {
- result = "ERROR:" + e.getMessage();
- CcrUtil.setMessage(emisUtil.getStackTrace(e));
- }
- return result;
- }
- // 生成 即時核保 input XML
- private String generateInvokeXml(String [] data) {
- StringBuffer sb = new StringBuffer();
- sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
- sb.append("<INSU_DATA>\n");
- //CcrUtil.createNode(sb, "SOURCE_FROM", "CCR"); // 系統串接來源(固定值 : CCR )
- CcrUtil.createNode(sb, "SOURCE_FROM", sfrom); // 系統串接來源 改按鈕傳遞 add by daff 20180615
- CcrUtil.createNode(sb, "IMEI", IMEI); // IMEI
- CcrUtil.createNode(sb, "PAYMENT", data[5]); // 繳費型態
- CcrUtil.createNode(sb, "LIST_PRICE", data[1]); // 建議售價
- CcrUtil.createNode(sb, "POEXP", data[2]); // 保費
- CcrUtil.createNode(sb, "WAPPACK", data[3]); // 組合包
- sb.append("</INSU_DATA>");
- return sb.toString();
- }
- // 解析即時核保回傳值
- private String AnalyzeResponse(String resp) {
- String result = "";
- ByteArrayInputStream bis = null;
- boolean isOK = false;
- String msg = "";
- try {
- bis = new ByteArrayInputStream(resp.getBytes(CcrUtil.CHARSET));
- Document doc = emisXmlUtil.getXML(bis);
- NodeList Nodelist = doc.getElementsByTagName("SERVICE_ACK");
- for (int i = 0; i < Nodelist.getLength(); i++) {
- Node node = Nodelist.item(i);
- Node child = node.getFirstChild();
- while (child != null) {
- if (child.getNodeType() == node.ELEMENT_NODE) {
- Element element = (Element) child;
- if (child.getNodeName().equals(element.getTagName())) {
- if (child.getFirstChild() != null) {
- if ("OPERATIONRESULT".equals(child.getNodeName())) {
- if ("S".equals(element.getFirstChild().getNodeValue())) {
- isOK = true;
- }
- } else if ("DETAILDESCRIPTION".equals(child.getNodeName())) {
- msg = element.getFirstChild().getNodeValue();
- } else if ("PONO".equals(child.getNodeName())) {
- PONO = element.getFirstChild().getNodeValue();
- }
- }
- }
- }
- child= child.getNextSibling();
- }
- }
- //
- if (!isOK) {
- result = "ERROR:" + msg;
- PONO = "";
- }
- } catch (Exception e) {
- result = "ERROR:" + e.getMessage();
- CcrUtil.setMessage(emisUtil.getStackTrace(e));
- } finally {
- try {
- if(bis != null) bis.close();
- } catch (Exception e) {
- }
- }
- return result;
- }
- public TInsuData getInsuData() {
- return InsuData;
- }
- public void setInsuData(TInsuData insuData) {
- InsuData = insuData;
- }
- // 解析ERPIMEICHECK回傳值 add by daff 20181224
- private String ErpCheckImeiResponse(String resp) {
- String result = "";
- ByteArrayInputStream bis = null;
- boolean isOK = false;
- try {
- bis = new ByteArrayInputStream(resp.getBytes(CcrUtil.CHARSET));
- Document doc = emisXmlUtil.getXML(bis);
- NodeList Nodelist = doc.getElementsByTagName("PDSNINFO");
- for (int i = 0; i < Nodelist.getLength(); i++) {
- Node node = Nodelist.item(i);
- Node child = node.getFirstChild();
- while (child != null) {
- if (child.getNodeType() == node.ELEMENT_NODE) {
- Element element = (Element) child;
- if (child.getNodeName().equals(element.getTagName())) {
- if (child.getFirstChild() != null) {
- if ("SALEDATE".equals(child.getNodeName())) {
- SALEDATE = element.getFirstChild().getNodeValue();
- CcrUtil.setMessage("SALEDATE:"+SALEDATE);
- }
- if ("AGNTNO".equals(child.getNodeName())) {
- AGNTNO = element.getFirstChild().getNodeValue();
- CcrUtil.setMessage("AGNTNO:"+AGNTNO);
- }
- if ("ITEMNO".equals(child.getNodeName())) {
- ITEMNO = element.getFirstChild().getNodeValue();
- CcrUtil.setMessage("ITEMNO:"+ITEMNO);
- }
- }
- }
- }
- child= child.getNextSibling();
- }
- }
- } catch (Exception e) {
- result = "ERROR:" + e.getMessage();
- CcrUtil.setMessage(emisUtil.getStackTrace(e));
- } finally {
- try {
- if(bis != null) bis.close();
- } catch (Exception e) {
- }
- }
- return result;
- }
- // ERPIMEICHECK API ADD BY DAFF 20181224
- private String doCallErpChkimei(String SERIAL_NO , String SOURCE_FROM ) {
- CcrUtil.setMessage("=====Call ERPIMEICHECK API=====");
- String result = "";
- String url = "";
- String API_NO = emisSQLCache.SYS_PARAMS_INSU_O2O_CHKIMEI;
- String HeaderType = "XML";
- String SL_KEY = FoCcr.getCurrentSale().getPrimarykey();
- String API_CALL_TIME = emisUtil.todayDateFormatAll("/");
- url = WebApiUtil.getWEBAPI_URL(API_NO);
- if (emisUtil.isEmpty(url)) {
- result = "WEBAPI異常, 請確認系統設定資料!";
- return result;
- }
- CheckImeiHead requestHead = new CheckImeiHead();
- requestHead.setSERIALNO(SERIAL_NO);
- requestHead.setSOURCE_FROM(SOURCE_FROM);
- List<NameValuePair> nvps = new ArrayList<NameValuePair>();
- nvps.add(new BasicNameValuePair("SERIAL_NO", requestHead.getSERIALNO()));
- nvps.add(new BasicNameValuePair("SOURCE_FROM", requestHead.getSOURCE_FROM()));
- try {
- String response = HTTPUtil.sendPost(API_NO, url,nvps, SL_KEY, API_CALL_TIME);
- CcrUtil.setMessage("response:" + response);
- if (emisUtil.isEmpty(response)) {
- result = "網頁連線有問題!!";
- FoCcr.wrDataToDb.UpdAPI_LOG_HS(API_NO, API_CALL_TIME, false);
- return result;
- }
- //
- String response2 = ErpCheckImeiResponse(response);
- if (!emisUtil.isEmpty(response2)) {
- result = response2;
- return result;
- }
- } catch (Exception e) {
- result = "ERROR:" + e.getMessage();
- CcrUtil.setMessage(emisUtil.getStackTrace(e));
- }
- return result;
- }
- }