/webccr/src/com/emis/caesar/senao/util/UU2Util.java
Java | 1519 lines | 1213 code | 66 blank | 240 comment | 207 complexity | ecf8f1c8e6c93c970a8812b3405861b1 MD5 | raw file
- package com.emis.caesar.senao.util;
- import com.emis.caesar.emisString;
- import com.emis.caesar.senao.UU2.ICERAPIReq;
- import com.emis.caesar.senao.UU2.ICERAPIResp;
- import com.emis.caesar.senao.UU2.ICERAPIRespItem;
- import com.emis.caesar.senao.event.TButtonEventContext;
- import com.emis.caesar.senao.event.logic.TLoEndSale;
- import com.emis.caesar.senao.unit.TCcr;
- import com.emis.caesar.senao.unit.TCcrConst;
- import com.emis.caesar.senao.unit.sale.TPayment;
- import com.emis.caesarui.webccr.object.UU2_ERRMSG;
- import com.emis.caesarui.webccr.object.UU2_PARAMS;
- import com.emis.caesarui.webccr.ui.window.WinUuCard;
- import com.emis.caesarui.webccr.ui.window.WinUuCardDongle;
- import com.emis.caesarui.webccr.webccr;
- import com.emis.caesarui.webccr.webccrlog;
- import com.emis.util.emisUtil;
- import com.emis.util.emisXmlUtil;
- import com.vaadin.ui.JavaScript;
- import com.vaadin.ui.JavaScriptFunction;
- import com.vaadin.ui.UI;
- import de.steinwedel.messagebox.ButtonOption;
- import de.steinwedel.messagebox.MessageBox;
- import elemental.json.JsonArray;
- import org.apache.commons.lang.StringEscapeUtils;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
- import org.w3c.dom.Node;
- import org.w3c.dom.NodeList;
- import java.io.BufferedReader;
- import java.io.ByteArrayInputStream;
- import java.lang.reflect.Method;
- import java.util.ArrayList;
- import java.util.Hashtable;
- import java.util.List;
- /**
- * 悠遊卡二代 API
- * 悠遊卡付款:
- 加值:
- 餘額查詢:
- dongle交易明細查詢
- 加值 扣款 取消 退貨(加值 扣款) 重傳 需紀錄在EASYCARD
- */
- public class UU2Util {
- private static final String CHARSET = "UTF-8";
- public final String sNewLine = "\\r\\n";
- //
- public static final String T0100_SIGNON = "0800";
- public static final String T0100_EACH = "0200";
- public static final String T0300_SIGNON = "881999"; // 登入
- public static final String T0300_PAY = "606100"; // 扣款
- public static final String T0300_PAY_VOID = "620061"; // 扣款退貨 or 取消
- public static final String T0300_ADD_CANCEL = "816100"; // 現金加值 作廢交易
- public static final String T0300_ADD_VALUE = "801061"; // 現金加值
- public static final String T0300_QUERY = "296000"; // 卡片資料查詢(餘額)
- public static final String T0300_DONGLE = "214100"; // DONGLE
- //
- private static boolean bDevelopMode = false;
- //
- TButtonEventContext parentEvent;
- WinUuCardDongle parentWin;
- webccr webccr;
- webccrlog webccrlog;
- TCcr ccr;
- int iUuCardAmt;// 悠遊卡 付款或加值金額
- TPayment oPayment = null;// 當前付款別物件
- boolean chkOK = false;
- ArrayList<String> sNOlist = new ArrayList<String>(); //起迄序號
- String sNO; // 調閱序號
- int iRetry = 0; // retry次數
- int TYPE = 0; // 0:登入 1 扣款 2 加值 3 取消 4 查詢 5 dongle 6 退貨(扣款作廢) 7 加值作廢
- WinUuCard oWindow = null;
- int time = 0; // 供銷退retry用
- /**
- * 作為悠遊卡成功、失敗callBack
- */
- Runnable successRunnable = null;
- /**
- * 存放付款別的資料
- */
- List<TPayment> salePList = new ArrayList<TPayment>();
- // 悠遊卡 1 付款 or 2 加值
- public UU2Util(int iPayAmt, int iTYPE, TButtonEventContext eventContext) {
- this.iUuCardAmt = iPayAmt;
- this.TYPE = iTYPE;
- this.parentEvent = eventContext;
- webccr = (webccr) UI.getCurrent();
- ccr = webccr.getFoCCR();
- webccrlog = webccr.getlog();
- }
- // 3 取消付款
- public UU2Util(TPayment payment) {
- this.oPayment = payment;
- webccr = (webccr) UI.getCurrent();
- ccr = webccr.getFoCCR();
- webccrlog = webccr.getlog();
- TYPE = 3;
- }
- // 悠遊卡 4 查詢 or 0 登入
- public UU2Util() {
- webccr = (webccr) UI.getCurrent();
- ccr = webccr.getFoCCR();
- webccrlog = webccr.getlog();
- }
- // 悠遊卡 5 dongle 重傳
- public UU2Util(ArrayList<String> list, WinUuCardDongle window) {
- this.sNOlist = list;
- this.parentWin = window;
- webccr = (webccr) UI.getCurrent();
- ccr = webccr.getFoCCR();
- webccrlog = webccr.getlog();
- TYPE = 5;
- }
- // 6 扣款作廢
- public UU2Util(List<TPayment> paymentlist) {
- this.salePList = paymentlist;
- webccr = (webccr) UI.getCurrent();
- ccr = webccr.getFoCCR();
- webccrlog = webccr.getlog();
- TYPE = 6;
- }
- // 7 加值作廢
- public UU2Util(int iPayAmt) {
- this.iUuCardAmt = iPayAmt;
- webccr = (webccr) UI.getCurrent();
- ccr = webccr.getFoCCR();
- webccrlog = webccr.getlog();
- TYPE = 7;
- }
- // 0 登入
- public void signOnUUcard() {
- // webccrlog.info(webccr.getClass(),"門市機號:" + ccr.getCcrID() + " --->登入悠遊卡機");
- CcrUtil.setMessage("門市機號:" + ccr.getCcrID() + " --->登入悠遊卡機");
- TYPE = 0;
- ICERAPIReq _Req = new ICERAPIReq();
- try {
- // 產生物件值
- WriteSignOnRequest(_Req);
- //
- CallIcerApi(_Req);
- } catch (Exception e) {
- // webccrlog.error(webccr.getClass(), e);
- CcrUtil.setMessage(emisUtil.getStackTrace(e));
- }
- }
- // 1 扣款
- public void DeductUUcard() {
- // webccrlog.info(webccr.getClass(),"-----悠遊卡扣款-----");
- // webccrlog.info(webccr.getClass(),"扣款金額 : " + iUuCardAmt);
- CcrUtil.setMessage("-----悠遊卡扣款-----");
- CcrUtil.setMessage("扣款金額 : " + iUuCardAmt);
- ICERAPIReq _Req = new ICERAPIReq();
- try {
- // 產生物件值
- WriteDeductRequest(_Req);
- //
- CallIcerApi(_Req);
- } catch (Exception e) {
- // webccrlog.error(webccr.getClass(), e);
- CcrUtil.setMessage(emisUtil.getStackTrace(e));
- callBack(false, "");
- }
- }
- // 2 加值(DepoistUUcard)
- public void AddValueUUcard() {
- // webccrlog.info(webccr.getClass(),"-----悠遊卡加值-----");
- // webccrlog.info(webccr.getClass(),"加值金額 : " + iUuCardAmt);
- CcrUtil.setMessage("-----悠遊卡加值-----");
- CcrUtil.setMessage("加值金額 : " + iUuCardAmt);
- ICERAPIReq _Req = new ICERAPIReq();
- try {
- // 產生物件值
- WriteAddValueRequest(_Req);
- //
- CallIcerApi(_Req);
- } catch (Exception e) {
- // webccrlog.error(webccr.getClass(), e);
- CcrUtil.setMessage(emisUtil.getStackTrace(e));
- callBack(false, "");
- }
- }
- // 3 取消扣款
- public void CancelDeductUUcard() {
- // webccrlog.info(webccr.getClass(),"-----悠遊卡取消扣款-----");
- CcrUtil.setMessage("-----悠遊卡取消扣款-----");
- // 正常不會是null
- if (oPayment == null) {
- ccr.UInotify.swErrMsg("查無悠遊卡付款項!");
- return;
- }
- // 呼叫卡機流程
- ICERAPIReq _Req = new ICERAPIReq();
- try {
- // 產生物件值
- WriteCancelDeductRequest(_Req);
- //
- CallIcerApi(_Req);
- } catch (Exception e) {
- // webccrlog.error(webccr.getClass(), e);
- CcrUtil.setMessage(emisUtil.getStackTrace(e));
- callBack(false, "");
- }
- }
- // 4 查詢餘額
- public void QueryUUcardBalance() {
- // webccrlog.info(webccr.getClass(),"-----悠遊卡查詢餘額-----");
- CcrUtil.setMessage("-----悠遊卡查詢餘額-----");
- TYPE = 4;
- ICERAPIReq _Req = new ICERAPIReq();
- try {
- // 產生物件值
- WriteQueryRequest(_Req);
- //
- CallIcerApi(_Req);
- } catch (Exception e) {
- // webccrlog.error(webccr.getClass(), e);
- CcrUtil.setMessage(emisUtil.getStackTrace(e));
- callBack(false, "");
- }
- }
- // 5 dongle機交易明細查詢
- public void QueryUUcardRecord() {
- // webccrlog.info(webccr.getClass(),"-----悠遊卡dongle機交易明細查詢-----");
- CcrUtil.setMessage("-----悠遊卡dongle機交易明細查詢-----");
- if (sNOlist.size() > 0) {
- // 取當前的資料
- sNO = sNOlist.get(0);
- // webccrlog.info(webccr.getClass(),"目前查詢序號=" + sNO);
- CcrUtil.setMessage("目前查詢序號=" + sNO);
- ICERAPIReq _Req = new ICERAPIReq();
- try {
- // 產生物件值
- WriteQueryRecordRequest(_Req);
- //
- CallIcerApi(_Req);
- } catch (Exception e) {
- // webccrlog.error(webccr.getClass(), e);
- CcrUtil.setMessage(emisUtil.getStackTrace(e));
- }
- } else {
- // webccrlog.info(webccr.getClass(),"陣列已經為0");
- CcrUtil.setMessage("陣列已經為0");
- if (parentWin != null) {
- ccr.UInotify.swMessage("重傳完畢");
- parentWin.close();
- }
- }
- }
- // 6 退款
- public void ReturnUUcard() {
- // webccrlog.info(webccr.getClass(),"-----悠遊卡扣款作廢-----");
- CcrUtil.setMessage("-----悠遊卡扣款作廢-----");
- if (salePList.size() != 0) {
- // 取當前的資料
- oPayment = salePList.get(0);
- ICERAPIReq _Req = new ICERAPIReq();
- try {
- // 產生物件值
- WriteReturnRequest(_Req);
- //
- CallIcerApi(_Req);
- } catch (Exception e) {
- // webccrlog.error(webccr.getClass(), e);
- CcrUtil.setMessage(emisUtil.getStackTrace(e));
- }
- } else {
- callBack(false, ""); // 正常作廢進來要有付款項
- }
- }
- // 7 加值作廢
- public void CancelAddValueUUcard() {
- // webccrlog.info(webccr.getClass(),"-----悠遊卡加值作廢-----");
- CcrUtil.setMessage("-----悠遊卡加值作廢-----");
- ICERAPIReq _Req = new ICERAPIReq();
- try {
- // 產生物件值
- WriteCancelAddValueRequest(_Req);
- //
- CallIcerApi(_Req);
- } catch (Exception e) {
- // webccrlog.error(webccr.getClass(), e);
- CcrUtil.setMessage(emisUtil.getStackTrace(e));
- callBack(false, "");
- }
- }
- private void CallIcerApi(ICERAPIReq _Req) {
- iRetry = 0; // retry次數
- // 讀檔
- JavaScript.getCurrent().addFunction("getOutFileContent", new JavaScriptFunction() {
- public void call(JsonArray arguments) {
- CcrUtil.setMessage("---UU_CARD getOutFileContent---");
- String _sRespones = arguments.getString(0);
- String _sXML = arguments.getString(1);
- CcrUtil.setMessage("ICERAPI.REQ content :" + _Req.toString());
- CcrUtil.setMessage("ICERAPI.RES content :" + _sRespones);
- if (emisUtil.isEmpty(_sRespones)) {
- ccr.UInotify.swErrMsg("ICERAPI無回應");
- callBack(false, "");
- return;
- } else {
- // 將回傳資料寫入 EASYCARD
- if (TYPE == 1 || TYPE == 2 || TYPE == 3 ||
- TYPE == 5 || TYPE == 6 || TYPE == 7) {
- String SL_KEY = ccr.getCcrID() + emisUtil.todayDateAll() + TYPE;
- boolean IS_RESEND = true;
- if (ccr.getCurrentSale() != null) {
- SL_KEY = ccr.getCurrentSale().getPrimarykey();
- if (TYPE != 5) {
- IS_RESEND = false;
- }
- }
- // 寫入table給後台傳到悠遊卡公司
- ccr.wrDataToDb.InsEASYCARD(SL_KEY, _sRespones, IS_RESEND, _Req, iRetry);
- }
- // 解析ICERAPI
- ICERAPIResp resp = ReadResponseFile(_sRespones);
- if (bDevelopMode) {
- MessageBox _oMsgBox = MessageBox.createInfo();
- _oMsgBox.withCaption("訊息")
- .withMessage("是否進行Retry?")
- .withYesButton(() -> {
- iRetry++;
- MessageBox _oErrBox = MessageBox.createError();
- _oErrBox.withCaption("錯誤")
- .withMessage("卡機連線Timeout, 請按下確認鍵Rerry! Retry次數:" + iRetry)
- .withOkButton(() -> {
- // webccrlog.info(webccr.class, "-------進行Retry動作-------");
- CcrUtil.setMessage("-------進行Retry動作-------");
- if (iRetry > 3) {
- ccr.UInotify.swErrMsg("Retry已超過3次!");
- callBack(false, "");
- return;
- }
- if (iRetry <= 3) {
- _Req.setT1200(emisUtil.todayTimeS());
- _Req.setT1300(emisUtil.todayDate());
- uRunIcerApi(_Req);
- }
- }, ButtonOption.focus()).open();
- }, ButtonOption.focus())
- .withNoButton(() -> {
- if (resp != null) {
- // 有回傳時, 檢查是否符合retry條件, 再進入retry程序
- if ( ("-125".equals(resp.getT3901()) || "6008".equals(resp.getT3904())) ) {
- iRetry++;
- MessageBox _oErrBox = MessageBox.createError();
- _oErrBox.withCaption("錯誤")
- .withMessage("卡機連線Timeout, 請按下確認鍵Rerry! Retry次數:" + iRetry)
- .withOkButton(() -> {
- // webccrlog.info(webccr.class, "-------進行Retry動作-------");
- CcrUtil.setMessage("-------進行Retry動作-------");
- if (iRetry > 3) {
- ccr.UInotify.swErrMsg("Retry已超過3次!");
- callBack(false, "");
- return;
- }
- if (iRetry <= 3) {
- _Req.setT1200(emisUtil.todayTimeS());
- _Req.setT1300(emisUtil.todayDate());
- uRunIcerApi(_Req);
- }
- }, ButtonOption.focus()).open();
- } else {
- doAction(resp, _Req);
- if (TYPE == 0) {
- // 變更XML
- updateINI(_sXML);
- }
- }
- } else {
- ccr.UInotify.swErrMsg("出現異常:超出解析的TAG\n" + _sRespones);
- callBack(false, "");
- return;
- }
- }).open();
- } else {
- if (resp != null) {
- // 有回傳時, 檢查是否符合retry條件, 再進入retry程序
- if ( ("-125".equals(resp.getT3901()) || "6008".equals(resp.getT3904())) ) {
- iRetry++;
- MessageBox _oErrBox = MessageBox.createError();
- _oErrBox.withCaption("錯誤")
- .withMessage("卡機連線Timeout, 請按下確認鍵Rerry! Retry次數:" + iRetry)
- .withOkButton(() -> {
- CcrUtil.setMessage("-------進行Retry動作-------");
- if (iRetry > 3) {
- ccr.UInotify.swErrMsg("Retry已超過3次!");
- callBack(false, "");
- return;
- }
- if (iRetry <= 3) {
- _Req.setT1200(emisUtil.todayTimeS());
- _Req.setT1300(emisUtil.todayDate());
- uRunIcerApi(_Req);
- }
- }, ButtonOption.focus()).open();
- } else {
- doAction(resp, _Req);
- if (TYPE == 0) {
- // 變更XML
- updateINI(_sXML);
- }
- }
- } else {
- ccr.UInotify.swErrMsg("出現異常:超出解析的TAG\n" + _sRespones);
- callBack(false, "");
- return;
- }
- }
- }
- }
- });
- JavaScript.getCurrent().addFunction("ErrorMessage",new JavaScriptFunction() {
- public void call(JsonArray arguments) {
- try {
- CcrUtil.setMessage("ErrorMessage:" + arguments.getString(0));
- int iErrType = emisUtil.parseInt(arguments.getString(0), 0);
- switch (iErrType) {
- case 1:
- ccr.UInotify.swErrMsg("REQ, RES 檔有問題. 請通知資訊人員處理!");
- break;
- case 2:
- ccr.UInotify.swErrMsg("ICERAPI無回應");
- break;
- default:
- ccr.UInotify.swErrMsg("非設定的錯誤訊息, 請通知資訊人員處理!");
- break;
- }
- } catch (Exception e) {
- CcrUtil.setMessage(emisUtil.getStackTrace(e));
- } finally {
- callBack(false, "");
- }
- }
- });
- JavaScript.getCurrent().addFunction("CheckFile", new JavaScriptFunction() {
- public void call(JsonArray arguments) {
- CcrUtil.setMessage("---UU_CARD CheckFile---");
- String _sReq = arguments.getString(0);
- CcrUtil.setMessage("File => " + _sReq);
- if (_sReq.indexOf("<T0300>") > -1) {
- String T0300 = _sReq.substring(_sReq.indexOf("<T0300>") + "<T0300>".length(),
- _sReq.indexOf("</T0300>"));
- if (T0300 != null && !T0300.equals(_Req.T0300)) {
- ccr.UInotify.swErrMsg("RES 檔有問題. 請通知資訊人員處理!");
- callBack(false, "");
- return;
- }
- }
- if (_sReq.indexOf("<T1200>") > -1) {
- String T1200 = _sReq.substring(_sReq.indexOf("<T1200>") + "<T1200>".length(),
- _sReq.indexOf("</T1200>"));
- if (T1200 != null && !T1200.equals(_Req.T1200)) {
- ccr.UInotify.swErrMsg("RES 檔有問題. 請通知資訊人員處理!");
- callBack(false, "");
- return;
- }
- }
- if (_sReq.indexOf("<T1300>") > -1) {
- String T1300 = _sReq.substring(_sReq.indexOf("<T1300>") + "<T1300>".length(),
- _sReq.indexOf("</T1300>"));
- if (T1300 != null && !T1300.equals(_Req.T1300)) {
- ccr.UInotify.swErrMsg("RES 檔有問題. 請通知資訊人員處理!");
- callBack(false, "");
- return;
- }
- }
- uRunIcerApi2();
- }
- });
- uRunIcerApi(_Req);
- }
- private void uRunIcerApi(ICERAPIReq _Req) {
- String PATH = ccr.getPLUG_DISK() + "emis/senao/ICERAPI/"; // 悠遊卡
- String DATA_PATH = PATH + "ICERData/"; // DATA路徑
- String INI_XML = PATH + "ICERINI.xml"; // XML路徑
- String IN_FILE = DATA_PATH + "ICERAPI.REQ"; // REQ檔
- String IN_FILE_OK = DATA_PATH + "ICERAPI.REQ.OK"; // REQ檔
- String OUT_FILE = DATA_PATH + "ICERAPI.RES"; // RES檔
- String OUT_FILE_OK = DATA_PATH + "ICERAPI.RES.OK"; // RES檔
- String BAT_FILE1 = PATH + "ICERAPI1.bat"; // 刪檔bat
- String BAT_FILE2 = PATH + "ICERAPI2.bat"; //批次檔做為開啟exe
- String BAT_CONTENT1 = " del " + IN_FILE + sNewLine +
- " del " + IN_FILE_OK + sNewLine +
- " del " + OUT_FILE + sNewLine +
- " del " + OUT_FILE_OK;
- String BAT_CONTENT2 = "cd " + PATH + sNewLine + "ICERAPI.exe";
- String ContentXML = "";
- if (TYPE == 0) {
- ContentXML = CreateXML(_Req); // 登入
- } else if (TYPE == 1) {
- ContentXML = CreateXML1(_Req); // 扣款
- } else if (TYPE == 2) {
- ContentXML = CreateXML2(_Req); // 加值
- } else if (TYPE == 3) {
- ContentXML = CreateXML3(_Req); // 取消付款
- } else if (TYPE == 4) {
- ContentXML = CreateXML4(_Req); // 查詢
- } else if (TYPE == 5) {
- ContentXML = CreateXML5(_Req); // DONGLE 重傳
- } else if (TYPE == 6) {
- ContentXML = CreateXML6(_Req); // 扣款作廢
- } else if (TYPE == 7) {
- ContentXML = CreateXML7(_Req); // 加值作廢
- }
- JavaScript.getCurrent().execute(
- " var util = new emisUtility(); \n" +
- // 設定路徑和檔案參數
- " var _sINI_XML = '" + INI_XML + "'; \n" +
- " var _sREQ_PATH = '" + IN_FILE + "'; \n" +
- " var _sREQ_PATH_OK = '" + IN_FILE_OK + "'; \n" +
- " var _sRES_PATH = '" + OUT_FILE + "'; \n" +
- " var _sRES_PATH_OK = '" + OUT_FILE_OK + "'; \n" +
- " var _sBAT_FILE1 = '" + BAT_FILE1 + "'; \n" +
- " var _sBAT_FILE2 = '" + BAT_FILE2 + "'; \n" +
- " var _sBAT_CONTENT1 = '" + BAT_CONTENT1 + "'; \n" +
- " var _sBAT_CONTENT2 = '" + BAT_CONTENT2 + "'; \n" +
- " var _sINContent = '" + ContentXML + "'; \n" +
- // 寫入BAT1檔
- " console.log('is or not write => BAT1'); \n" +
- " if (!util.exists(_sBAT_FILE1)) {" +
- " util.writeStringToUTF8File(_sBAT_FILE1, _sBAT_CONTENT1); " +
- " } \n" +
- // 執行刪檔
- " console.log('deletefile by BAT1 => REQ and RES'); \n" +
- " util.executewait(_sBAT_FILE1); \n" +
- //寫入REQ檔
- " console.log('write => REQ'); \n" +
- " util.writeStringToUTF8File(_sREQ_PATH, _sINContent); \n" +
- //寫入REQ.OK檔
- " console.log('write => REQ.OK'); \n" +
- " util.writeStringToUTF8File(_sREQ_PATH_OK, ''); \n" +
- //辨識檔案是否有寫成功
- " console.log('check => REQ'); \n" +
- " if (!util.exists(_sREQ_PATH)) { \n" +
- " ErrorMessage('1'); \n " +
- " } else {\n" +
- " var _sStr = util.readFileAsString(_sREQ_PATH); \n" +
- " CheckFile(_sStr); \n" +
- " }"
- /*
- //寫入BAT2檔
- " console.log('is or not write => BAT2'); \n" +
- " if (!util.exists(_sBAT_FILE2)) {" +
- " util.writeStringToUTF8File(_sBAT_FILE2, _sBAT_CONTENT2); } \n" +
- //執行ICERAPI.bat
- " console.log('executewait => BAT2'); \n" +
- " util.executewait(_sBAT_FILE2); \n" +
- //讀取out.dat
- " console.log('is or not read => RES'); \n" +
- " if (util.exists(_sRES_PATH_OK)) { \n" +
- " var _sStr = util.readFileAsString(_sRES_PATH); \n" +
- " var _sStr2 = util.readFileAsString(_sINI_XML); \n" +
- " getOutFileContent(_sStr, _sStr2); \n" +
- " console.log('End'); \n" +
- " } else { \n" +
- " ErrorMessage('2'); \n" +
- " return; \n" +
- " }"
- */
- );
- }
- private void uRunIcerApi2() {
- String PATH = ccr.getPLUG_DISK() + "emis/senao/ICERAPI/"; // 悠遊卡
- String DATA_PATH = PATH + "ICERData/"; // DATA路徑
- String INI_XML = PATH + "ICERINI.xml"; // XML路徑
- String OUT_FILE = DATA_PATH + "ICERAPI.RES"; // RES檔
- String OUT_FILE_OK = DATA_PATH + "ICERAPI.RES.OK"; // RES檔
- String BAT_FILE2 = PATH + "ICERAPI2.bat"; //批次檔做為開啟exe
- String BAT_CONTENT2 = "cd " + PATH + sNewLine + "ICERAPI.exe";
- JavaScript.getCurrent().execute(
- " var util = new emisUtility(); \n" +
- // 設定路徑和檔案參數
- " var _sINI_XML = '" + INI_XML + "'; \n" +
- " var _sRES_PATH = '" + OUT_FILE + "'; \n" +
- " var _sRES_PATH_OK = '" + OUT_FILE_OK + "'; \n" +
- " var _sBAT_FILE2 = '" + BAT_FILE2 + "'; \n" +
- " var _sBAT_CONTENT2 = '" + BAT_CONTENT2 + "'; \n" +
- //寫入BAT2檔
- " console.log('is or not write => BAT2'); \n" +
- " if (!util.exists(_sBAT_FILE2)) {" +
- " util.writeStringToUTF8File(_sBAT_FILE2, _sBAT_CONTENT2); } \n" +
- //執行ICERAPI.bat
- " console.log('executewait => BAT2'); \n" +
- " util.executewait(_sBAT_FILE2); \n" +
- //讀取out.dat
- " console.log('is or not read => RES'); \n" +
- " if (util.exists(_sRES_PATH_OK)) { \n" +
- " var _sStr = util.readFileAsString(_sRES_PATH); \n" +
- " var _sStr2 = util.readFileAsString(_sINI_XML); \n" +
- " getOutFileContent(_sStr, _sStr2); \n" +
- " console.log('End'); \n" +
- " } else { \n" +
- " ErrorMessage('2'); \n" +
- " return; \n" +
- " }"
- );
- }
- private ICERAPIResp ReadResponseFile(String content) {
- BufferedReader br = null;
- ByteArrayInputStream bis = null;
- StringBuffer sb = new StringBuffer();
- ICERAPIResp resp = null;
- try {
- sb.append(content);
- //
- resp = new ICERAPIResp();
- bis = new ByteArrayInputStream(sb.toString().getBytes(CHARSET));
- Document doc = emisXmlUtil.getXML(bis);
- NodeList Nodelist = doc.getElementsByTagName("TRANS");
- NodeList Nodelistitem = doc.getElementsByTagName("T5548");
- ArrayList<ICERAPIRespItem> respItem = new ArrayList<ICERAPIRespItem>();
- ICERAPIRespItem item = null;
- for (int i = 0; i < Nodelist.getLength(); i++) {
- Node node = Nodelist.item(i);
- Node child = node.getFirstChild();
- while (child != null) {
- // System.out.println(child.getNodeName());
- Method method = ReflectUtils.getMethodByName(resp, "set" + child.getNodeName());
- if (method != null) {
- try {
- if (child.getNodeType() == node.ELEMENT_NODE) {
- Element element = (Element) child;
- if (child.getNodeName().equals(element.getTagName())) {
- Node nItem = Nodelistitem.item(0);
- if (nItem != null && child.getNodeName().equals(nItem.getNodeName())) {
- //
- item = new ICERAPIRespItem();
- Node childitem = nItem.getFirstChild();
- while (childitem != null) {
- // System.out.println(childitem.getNodeName());
- Method methodItem = ReflectUtils.getMethodByName(item, "set" + childitem.getNodeName());
- if (methodItem != null) {
- if (childitem.getNodeType() == nItem.ELEMENT_NODE) {
- Element elementitem = (Element) childitem;
- if (childitem.getNodeName().equals(elementitem.getTagName())) {
- if (childitem.getFirstChild() != null) {
- methodItem.invoke(item,
- emisUtil.parseString(elementitem.getFirstChild().getNodeValue()));
- }
- }
- }
- }
- childitem= childitem.getNextSibling();
- }
- //
- respItem.add(item);
- if (child.getFirstChild() != null) {
- method.invoke(resp,
- respItem);
- }
- } else {
- if (child.getFirstChild() != null) {
- method.invoke(resp,
- emisUtil.parseString(element.getFirstChild().getNodeValue()));
- }
- }
- }
- }
- } catch (Exception e) {
- // e.printStackTrace();
- // webccrlog.error(webccr.getClass(), e);
- CcrUtil.setMessage(emisUtil.getStackTrace(e));
- }
- }
- child= child.getNextSibling();
- }
- }
- // CcrUtil.setMessage(resp.toString());
- } catch (Exception e) {
- // e.printStackTrace();
- // webccrlog.error(webccr.getClass(), e);
- CcrUtil.setMessage(emisUtil.getStackTrace(e));
- return null;
- } finally {
- try {
- if(br != null) br.close();
- if(bis != null) bis.close();
- } catch (Exception e) {
- }
- }
- return resp;
- }
- private void doAction(ICERAPIResp resp, ICERAPIReq _Req) {
- if (TYPE == 0) {
- // 登入
- if ("0".equals(resp.getT3901())) {
- CcrUtil.setMessage("---UU_CARD 登入成功---");
- } else {
- // ERROR_MSG(resp);
- }
- } else if (TYPE == 1) {
- // 扣款
- if ("0".equals(resp.getT3901())) {
- if (!_Req.T1200.equals(resp.getT1200()) ||
- !_Req.T1300.equals(resp.getT1300())) {
- //CcrUtil.setMessage("res內容與req所回傳不一致");
- ccr.UInotify.swErrMsg("res內容與req所回傳不一致");
- callBack(false, "");
- return;
- }
- CcrUtil.setMessage("---UU_CARD 扣款成功---");
- // 悠遊卡付款
- oPayment = new TPayment(TCcrConst.PAY_77, TCcrConst.PAY_NAME_77);
- oPayment.setSn(ccr.getCurrentSale().getPaymentCount() + 1); // RECNO
- oPayment.setAmount(iUuCardAmt); // 付款金額
- oPayment.setEASY_CARDNO(emisUtil.parseString(resp.getT0200())); // 悠遊卡明碼(T0211, 隱碼為載具使用) 為T0200
- oPayment.setSP_FIELD1("UU");
- oPayment.setSP_FIELD3(emisUtil.parseString(resp.getT0200()));
- ccr.getCurrentSale().addPayment(oPayment);
- // 列印內容
- String SL_KEY = ccr.getCurrentSale().getPrimarykey();
- String content = PrintContent(resp);
- // 列印扣款憑證
- PrintUUCard(content, SL_KEY);
- // 更新資料避免發生錯誤
- ccr.UInotify.updateMainForm();
- if (parentEvent != null) {
- parentEvent.finalProcedure();
- }
- callBack(true, "");
- // 尚有付款金額
- if (ccr.getCurrentSale().getUnpaidAmout() != 0) {
- } else {
- // 回到按鈕事件
- if (parentEvent != null) {
- //add by Ares 20191218 交易完成後不顯示結束確認視窗
- /*
- String MSG = "交易款項已付清, 是否結束本交易?";
- CcrUtil.setMessage("悠遊卡已付款是否結束本交易:" + ccr.getCurrentSale().getPrimarykey());
- ccr.UInotify.askYesOrNo(true, MSG, parentEvent, "clickYes", "clickNo");
- */
- CcrUtil.setMessage("悠遊卡已付款, 確認結束交易:" + ccr.getCurrentSale().getPrimarykey());
- runEndSale();
- } else {
- runEndSale();
- }
- }
- } else {
- ERROR_MSG(resp);
- callBack(false, "");
- }
- } else if (TYPE == 2) {
- // 加值
- if ("0".equals(resp.getT3901())) {
- if (!_Req.T1200.equals(resp.getT1200()) ||
- !_Req.T1300.equals(resp.getT1300())) {
- ccr.UInotify.swErrMsg("res內容與req所回傳不一致");
- callBack(false, "");
- return;
- }
- CcrUtil.setMessage("---UU_CARD 加值成功 and 後續動作---");
- // 現金付款
- oPayment = new TPayment(TCcrConst.PAY_CASH, TCcrConst.PAY_NAME_CASH);
- oPayment.setSn(ccr.getCurrentSale().getPaymentCount() + 1); // RECNO
- oPayment.setAmount(iUuCardAmt);
- oPayment.setSP_FIELD1("UU");
- oPayment.setSP_FIELD3(emisUtil.parseString(resp.getT0200()));
- oPayment.setEASY_CARDNO(emisUtil.parseString(resp.getT0200()));
- ccr.getCurrentSale().addPayment(oPayment);
- ccr.getCurrentSale().setbUUAddValue(true); // 判斷為悠遊卡加值
- ccr.UInotify.updateMainForm();
- // 列印內容
- String SL_KEY = ccr.getCurrentSale().getPrimarykey();
- String content = PrintContent(resp);
- // 列印加值憑證
- PrintUUCard(content, SL_KEY);
- // 存檔
- runEndSale();
- //
- callBack(true, "");
- } else {
- ERROR_MSG(resp);
- callBack(false, "");
- }
- } else if (TYPE == 3) {
- // 取消付款
- if ("0".equals(resp.getT3901())) {
- if (!_Req.T1200.equals(resp.getT1200()) ||
- !_Req.T1300.equals(resp.getT1300())) {
- ccr.UInotify.swErrMsg("res內容與req所回傳不一致");
- callBack(false, "");
- return;
- }
- CcrUtil.setMessage("---UU_CARD 取消付款成功---");
- oPayment.setCancel(true);
- oPayment.setEASY_CARDNO_T0211(emisUtil.parseString(resp.getT0211()));
- // 列印內容
- String SL_KEY = ccr.getCurrentSale().getPrimarykey();
- String content = PrintContent(resp);
- // 列印取消付款憑證
- PrintUUCard(content, SL_KEY);
- // 返回取消付款按鈕的事件
- callBack(true, "");
- } else {
- // 是否返回按鈕?
- ERROR_MSG(resp);
- // 返回取消付款按鈕的事件
- callBack(false, "");
- }
- } else if (TYPE == 4) {
- // 查詢
- if ("0".equals(resp.getT3901())) {
- if (!_Req.T1200.equals(resp.getT1200()) ||
- !_Req.T1300.equals(resp.getT1300())) {
- ccr.UInotify.swErrMsg("res內容與req所回傳不一致");
- callBack(false, "");
- return;
- }
- String sAmount = resp.getT0410();
- try {
- int iAmount = emisUtil.parseInt(sAmount) / 100;
- CcrUtil.setMessage("悠遊卡餘額 = " + iAmount);
- ccr.UInotify.wrMessageToMainDisplay("悠遊卡餘額 = " + iAmount);
- } catch (Exception e) {
- CcrUtil.setMessage(emisUtil.getStackTrace(e));
- ccr.UInotify.swErrMsg("悠遊卡餘額 = " + sAmount);
- }
- callBack(true, "");
- } else {
- ERROR_MSG(resp);
- callBack(false, "");
- }
- } else if (TYPE == 5) {
- // DONGLE 重傳
- if ("0".equals(resp.getT3901())) {
- if (!_Req.T1200.equals(resp.getT1200()) ||
- !_Req.T1300.equals(resp.getT1300())) {
- ccr.UInotify.swErrMsg("res內容與req所回傳不一致");
- callBack(false, "");
- return;
- }
- CcrUtil.setMessage("序號:" + sNO + "---重傳成功---");
- //將當前處理的sNO刪除\
- if (sNOlist.size() > 0) {
- sNOlist.remove(0);
- }
- // webccrlog.info(webccr.getClass(),"移除當前序號:" + sNO);
- CcrUtil.setMessage("移除當前序號:" + sNO);
- // 一直call QueryUUcardRecord 直到 sNOlist陣列為0.
- QueryUUcardRecord();
- } else {
- ERROR_MSG(resp);
- if (parentWin != null) {
- parentWin.close();
- }
- }
- } else if (TYPE == 6) {
- // 扣款作廢
- if ("0".equals(resp.getT3901())) {
- if (!_Req.T1200.equals(resp.getT1200()) ||
- !_Req.T1300.equals(resp.getT1300())) {
- ccr.UInotify.swErrMsg("res內容與req所回傳不一致");
- callBack(false, "");
- return;
- }
- CcrUtil.setMessage("---UU_CARD 扣款作廢成功---");
- // 返回作廢動作
- //將當前處理的SALE_P刪除
- if (salePList.size() > 0) {
- salePList.remove(0);
- }
- // 列印內容
- String SL_KEY = ccr.getCurrentSale().getPrimarykey();
- String content = PrintContent(resp);
- // 列印退貨憑證
- PrintUUCard(content, SL_KEY);
- //
- if (salePList.size() > 0) {
- MessageBox _oMsgBox = MessageBox.createInfo();
- _oMsgBox.withCaption("訊息")
- .withMessage("處理完成,尚有悠遊卡" + salePList.size() + "筆交易未完成,請按確定繼續。")
- .withYesButton(() -> {
- // 取當前的資料
- oPayment = salePList.get(0);
- ICERAPIReq Req = new ICERAPIReq();
- try {
- // 產生物件值
- WriteReturnRequest(Req);
- //
- CallIcerApi(Req);
- } catch (Exception e) {
- CcrUtil.setMessage(emisUtil.getStackTrace(e));
- }
- }, ButtonOption.focus())
- .open();
- } else {
- callBack(true, "");
- }
- } else {
- ERROR_MSG(resp);
- callBack(false, "");
- }
- } else if (TYPE == 7) {
- // 加值作廢
- if ("0".equals(resp.getT3901())) {
- if (!_Req.T1200.equals(resp.getT1200()) ||
- !_Req.T1300.equals(resp.getT1300())) {
- ccr.UInotify.swErrMsg("res內容與req所回傳不一致");
- callBack(false, "");
- return;
- }
- CcrUtil.setMessage("---UU_CARD 加值作廢成功---");
- // 列印內容
- String SL_KEY = ccr.getCurrentSale().getPrimarykey();
- String content = PrintContent(resp);
- // 列印退貨憑證
- PrintUUCard(content, SL_KEY);
- // 返回作廢動作
- callBack(true, "");
- } else {
- ERROR_MSG(resp);
- callBack(false, "");
- }
- }
- }
- // 修改INI.XML
- private void updateINI(String INI) {
- StringBuffer sb = new StringBuffer();
- INI = INI.replace("??","<");
- INI = INI.replaceAll("\r\n", "\\\\r\\\\n");
- try {
- String S_NO = emisString.lPadB(ccr.getStore().getFLDxS_NO(), 10, '0');
- String ID_NO = ccr.getCcrID().substring(6);
- int S_NO_S = INI.indexOf("<TMLocationID>");
- int S_NO_E = INI.indexOf("</TMLocationID>");
- int ID_NO_S = INI.indexOf("<TMID>");
- int ID_NO_E = INI.indexOf("</TMID>");
- sb.append(INI.substring(0, S_NO_S + "<TMLocationID>".length()));
- sb.append(S_NO);
- sb.append(INI.substring(S_NO_E, ID_NO_S + "<TMID>".length()));
- sb.append(ID_NO);
- sb.append(INI.substring(ID_NO_E, INI.length()));
- System.out.println("INI = " + sb.toString());
- } catch (Exception e) {
- // webccrlog.error(webccr.getClass(), e);
- CcrUtil.setMessage(emisUtil.getStackTrace(e));
- }
- if (!emisUtil.isEmpty(sb.toString())) {
- String PATH = ccr.getPLUG_DISK() + "emis/senao/ICERAPI/ICERINI.xml"; // 悠遊卡
- JavaScript.getCurrent().execute(
- " var util = new emisUtility(); \n" +
- " var path = '" + PATH + "' \n" +
- " var a = '" + sb.toString() + "' \n" +
- " util.writeStringToUTF8File(path, a);"
- );
- }
- }
- // 錯誤訊息
- private void ERROR_MSG(ICERAPIResp resp) {
- String sT3901 = resp.getT3901();
- String sT3902 = resp.getT3902();
- String sT3904 = resp.getT3904();
- String sT3900 = resp.getT3900();
- String sT3903 = resp.getT3903();
- StringBuffer sb = new StringBuffer();
- sb.append("錯誤代碼(3901):").append(emisUtil.parseString(sT3901)).append(",").append(ERROR_CODE_NAME("T3901", sT3901)).append("\n");
- sb.append("錯誤代碼(3900):").append(emisUtil.parseString(sT3900)).append(",").append(ERROR_CODE_NAME("T3900", sT3900)).append("\n");
- sb.append("錯誤代碼(3902):").append(emisUtil.parseString(sT3902)).append(",").append(ERROR_CODE_NAME("T3902", sT3902)).append("\n");
- sb.append("錯誤代碼(3903):").append(emisUtil.parseString(sT3903)).append(",").append(ERROR_CODE_NAME("T3903", sT3903)).append("\n");
- sb.append("錯誤代碼(3904):").append(emisUtil.parseString(sT3904)).append(",").append(ERROR_CODE_NAME("T3904", sT3904));
- ccr.UInotify.swErrMsg(sb.toString());
- CcrUtil.setMessage(sb.toString());
- }
- // 0 登入物件
- private void WriteSignOnRequest(ICERAPIReq requset) {
- requset.setT0100(T0100_SIGNON);
- requset.setT0300(T0300_SIGNON); // 特定actoin code
- requset.setT1100(emisString.lPadB("", 4, '0')); // 交易流水號
- requset.setT1200(emisUtil.todayTimeS());
- requset.setT1300(emisUtil.todayDate());
- try {
- Hashtable SQL_PARAMS = UU2_PARAMS.getInstance(emisUtil.getServletContext()).getHash();
- requset.setT4200(emisUtil.parseString(SQL_PARAMS.get(ccr.getCcrID() + "T4200"),
- "000000000000000")); // 按機台讀取設定值
- requset.setT5503(emisUtil.parseString(SQL_PARAMS.get(ccr.getCcrID() + "T5503"),
- "000000000000000")); // 門市編號
- } catch (Exception e) {
- // e.printStackTrace();
- // webccrlog.error(webccr.getClass(), e);
- CcrUtil.setMessage(emisUtil.getStackTrace(e));
- }
- }
- // 1 扣款物件
- private void WriteDeductRequest(ICERAPIReq requset) {
- requset.setT0100(T0100_EACH);
- requset.setT0300(T0300_PAY); // 特定actoin code
- requset.setT0400(iUuCardAmt + "00"); // AMT
- requset.setT1100(emisString.lPadB(ccr.getCurrentSale().getSn() + "", 4, '0')); // 交易流水號
- requset.setT1200(emisUtil.todayTimeS());
- requset.setT1300(emisUtil.todayDate());
- try {
- Hashtable SQL_PARAMS = UU2_PARAMS.getInstance(emisUtil.getServletContext()).getHash();
- requset.setT4200(emisUtil.parseString(SQL_PARAMS.get(ccr.getCcrID() + "T4200"),
- "000000000000000")); // 按機台讀取設定值
- requset.setT5503(emisUtil.parseString(SQL_PARAMS.get(ccr.getCcrID() + "T5503"),
- "000000000000000")); // 門市編號
- } catch (Exception e) {
- // e.printStackTrace();
- // webccrlog.error(webccr.getClass(), e);
- CcrUtil.setMessage(emisUtil.getStackTrace(e));
- }
- requset.setT5501("000001"); // 固定值(1天只有1批, 卡機只批一次)
- requset.setT5509("E"); // 固定填入'E'
- }
- // 2 加值物件
- private void WriteAddValueRequest(ICERAPIReq requset) {
- requset.setT0100(T0100_EACH);
- requset.setT0300(T0300_ADD_VALUE); // 特定actoin code
- requset.setT0400(iUuCardAmt + "00"); // AMT
- requset.setT1100(emisString.lPadB(ccr.getCurrentSale().getSn() + "", 4, '0')); // 交易流水號
- requset.setT1200(emisUtil.todayTimeS());
- requset.setT1300(emisUtil.todayDate());
- try {
- Hashtable SQL_PARAMS = UU2_PARAMS.getInstance(emisUtil.getServletContext()).getHash();
- requset.setT4200(emisUtil.parseString(SQL_PARAMS.get(ccr.getCcrID() + "T4200"),
- "000000000000000")); // 按機台讀取設定值
- requset.setT5503(emisUtil.parseString(SQL_PARAMS.get(ccr.getCcrID() + "T5503"),
- "000000000000000")); // 門市編號
- } catch (Exception e) {
- // e.printStackTrace();
- // webccrlog.error(webccr.getClass(), e);
- CcrUtil.setMessage(emisUtil.getStackTrace(e));
- }
- requset.setT5501("000001"); // 固定值(1天只有1批, 卡機只批一次)
- requset.setT5509("E"); // 固定填入'E'
- }
- // 3 取消付款/重新付款 物件
- private void WriteCancelDeductRequest(ICERAPIReq requset) {
- requset.setT0100(T0100_EACH);
- requset.setT0300(T0300_PAY_VOID); // 特定actoin code
- requset.setT0400( ((int) Math.abs(oPayment.getAmount())) + "00" ); // AMT
- requset.setT1100(emisString.lPadB(ccr.getCurrentSale().getSn() + "", 4, '0')); // 交易流水號
- requset.setT1200(emisUtil.todayTimeS());
- requset.setT1300(emisUtil.todayDate());
- try {
- Hashtable SQL_PARAMS = UU2_PARAMS.getInstance(emisUtil.getServletContext()).getHash();
- requset.setT4200(emisUtil.parseString(SQL_PARAMS.get(ccr.getCcrID() + "T4200"),
- "000000000000000")); // 按機台讀取設定值
- requset.setT5503(emisUtil.parseString(SQL_PARAMS.get(ccr.getCcrID() + "T5503"),
- "000000000000000")); // 門市編號
- } catch (Exception e) {
- // e.printStackTrace();
- // webccrlog.error(webccr.getClass(), e);
- CcrUtil.setMessage(emisUtil.getStackTrace(e));
- }
- requset.setT5501("000001"); // 固定值(1天只有1批, 卡機只批一次)
- requset.setT5509("E"); // 固定填入'E'
- }
- // 4 查詢餘額物件
- private void WriteQueryRequest(ICERAPIReq requset) {
- requset.setT0100(T0100_EACH);
- requset.setT0300(T0300_QUERY); // 特定actoin code
- requset.setT0400("000"); // {查詢填入000}
- requset.setT1100(emisString.lPadB("", 4, '0')); // 交易流水號
- requset.setT1200(emisUtil.todayTimeS());
- requset.setT1300(emisUtil.todayDate());
- try {
- Hashtable SQL_PARAMS = UU2_PARAMS.getInstance(emisUtil.getServletContext()).getHash();
- requset.setT4200(emisUtil.parseString(SQL_PARAMS.get(ccr.getCcrID() + "T4200"),
- "000000000000000")); // 按機台讀取設定值
- requset.setT5503(emisUtil.parseString(SQL_PARAMS.get(ccr.getCcrID() + "T5503"),
- "000000000000000")); // 門市編號
- } catch (Exception e) {
- // e.printStackTrace();
- // webccrlog.error(webccr.getClass(), e);
- CcrUtil.setMessage(emisUtil.getStackTrace(e));
- }
- }
- // Dongle重傳物件
- private void WriteQueryRecordRequest(ICERAPIReq requset) {
- requset.setT0100(T0100_EACH);
- requset.setT0300(T0300_DONGLE); // 特定actoin code
- requset.setT1100(emisString.lPadB("", 4, '0')); // 交易流水號
- requset.setT1200(emisUtil.todayTimeS());
- requset.setT1300(emisUtil.todayDate());
- try {
- Hashtable SQL_PARAMS = UU2_PARAMS.getInstance(emisUtil.getServletContext()).getHash();
- requset.setT4200(emisUtil.parseString(SQL_PARAMS.get(ccr.getCcrID() + "T4200"),
- "000000000000000")); // 按機台讀取設定值
- requset.setT5503(emisUtil.parseString(SQL_PARAMS.get(ccr.getCcrID() + "T5503"),
- "000000000000000")); // 門市編號
- } catch (Exception e) {
- // e.printStackTrace();
- // webccrlog.error(webccr.getClass(), e);
- CcrUtil.setMessage(emisUtil.getStackTrace(e));
- }
- requset.setT5594(sNO); // 調閱序號
- }
- // 6 扣款作廢物件
- private void WriteReturnRequest(ICERAPIReq requset) {
- requset.setT0100(T0100_EACH);
- requset.setT0300(T0300_PAY_VOID); // 特定actoin code
- requset.setT0400( ((int) Math.abs(oPayment.getAmount())) + "00" ); // AMT
- requset.setT1100(emisString.lPadB(ccr.getCurrentSale().getSL_NO(), 4, '0')); // 原交易流水號
- requset.setT1200(emisUtil.todayTimeS());
- requset.setT1300(emisUtil.todayDate());
- try {
- Hashtable SQL_PARAMS = UU2_PARAMS.getInstance(emisUtil.getServletContext()).getHash();
- requset.setT4200(emisUtil.parseString(SQL_PARAMS.get(ccr.getCcrID() + "T4200"),
- "000000000000000")); // 按機台讀取設定值
- requset.setT5503(emisUtil.parseString(SQL_PARAMS.get(ccr.getCcrID() + "T5503"),
- "000000000000000")); // 門市編號
- } catch (Exception e) {
- // e.printStackTrace();
- // webccrlog.error(webccr.getClass(), e);
- CcrUtil.setMessage(emisUtil.getStackTrace(e));
- }
- requset.setT5501("000001"); // 固定值(1天只有1批, 卡機只批一次)
- requset.setT5509("E"); // 固定填入'E'
- }
- // 7 加值作廢物件
- private void WriteCancelAddValueRequest(ICERAPIReq requset) {
- requset.setT0100(T0100_EACH);
- requset.setT0300(T0300_ADD_CANCEL); // 特定actoin code
- requset.setT0400( iUuCardAmt + "00" ); // AMT
- requset.setT1100(emisString.lPadB(ccr.getCurrentSale().getSn() + "", 4, '0')); // 交易流水號
- requset.setT1200(emisUtil.todayTimeS());
- requset.setT1300(emisUtil.todayDate());
- try {
- Hashtable SQL_PARAMS = UU2_PARAMS.getInstance(emisUtil.getServletContext()).getHash();
- requset.setT4200(emisUtil.parseString(SQL_PARAMS.get(ccr.getCcrID() + "T4200"),
- "000000000000000")); // 按機台讀取設定值
- requset.setT5503(emisUtil.parseString(SQL_PARAMS.get(ccr.getCcrID() + "T5503"),
- "000000000000000")); // 門市編號
- } catch (Exception e) {
- // e.printStackTrace();
- // webccrlog.error(webccr.getClass(), e);
- CcrUtil.setMessage(emisUtil.getStackTrace(e));
- }
- requset.setT5501("000001"); // 固定值(1天只有1批, 卡機只批一次)
- requset.setT5509("E"); // 固定填入'E'
- }
- // 0 SignOn檔
- private String CreateXML(ICERAPIReq requset) {
- StringBuffer sb = new StringBuffer();
- sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>").append(sNewLine);
- sb.append("<TRANS>").append(sNewLine);
- //
- CreateNode(sb, "T0100", requset.T0100);
- CreateNode(sb, "T0300", requset.T0300);
- CreateNode(sb, "T1100", requset.T1100);
- CreateNode(sb, "T1200", requset.T1200);
- CreateNode(sb, "T1300", requset.T1300);
- CreateNode(sb, "T4200", requset.T4200);
- CreateNode(sb, "T5503", requset.T5503);
- //
- sb.append("</TRANS>");
- return sb.toString();
- }
- // 1 扣款檔
- private String CreateXML1(ICERAPIReq requset) {
- StringBuffer sb = new StringBuffer();
- sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>").append(sNewLine);
- sb.append("<TRANS>").append(sNewLine);
- //
- CreateNode(sb, "T0100", requset.T0100);
- CreateNode(sb, "T0300", requset.T0300);
- CreateNode(sb, "T0400", requset.T0400);
- CreateNode(sb, "T1100", requset.T1100);
- CreateNode(sb, "T1200", requset.T1200);
- CreateNode(sb, "T1300", requset.T1300);
- CreateNode(sb, "T4200", requset.T4200);
- CreateNode(sb, "T5501", requset.T5501);
- CreateNode(sb, "T5503", requset.T5503);
- CreateNode(sb, "T5509", requset.T5509);
- //
- sb.append("</TRANS>");
- return sb.toString();
- }
- // 2 加值檔
- private String CreateXML2(ICERAPIReq requset) {
- StringBuffer sb = new StringBuffer();
- sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>").append(sNewLine);
- sb.append("<TRANS>").append(sNewLine);
- //
- CreateNode(sb, "T0100", requset.T0100);
- CreateNode(sb, "T0300", requset.T0300);
- CreateNode(sb, "T0400", requset.T0400);
- CreateNode(sb, "T1100", requset.T1100);
- CreateNode(sb, "T1200", requset.T1200);
- CreateNode(sb, "T1300", requset.T1300);
- CreateNode(sb, "T4200", requset.T4200);
- CreateNode(sb, "T5501", requset.T5501);
- CreateNode(sb, "T5503", requset.T5503);
- CreateNode(sb, "T5509", requset.T5509);
- //
- sb.append("</TRANS>");
- return sb.toString();
- }
- // 3 取消付款檔
- private String CreateXML3(ICERAPIReq requset) {
- StringBuffer sb = new StringBuffer();
- sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>").append(sNewLine);
- sb.append("<TRANS>").append(sNewLine);
- //
- CreateNode(sb, "T0100", requset.T0100);
- CreateNode(sb, "T0300", requset.T0300);
- CreateNode(sb, "T0400", requset.T0400);
- CreateNode(sb, "T1100", requset.T1100);
- CreateNode(sb, "T1200", requset.T1200);
- CreateNode(sb, "T1300", requset.T1300);
- CreateNode(sb, "T4200", requset.T4200);
- CreateNode(sb, "T5501", requset.T5501);
- CreateNode(sb, "T5503", requset.T5503);
- CreateNode(sb, "T5509", requset.T5509);
- //
- sb.append("</TRANS>");
- return sb.toString();
- }
- // 4票卡查詢檔
- private String CreateXML4(ICERAPIReq requset) {
- StringBuffer sb = new StringBuffer();
- sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>").append(sNewLine);
- sb.append("<TRANS>").append(sNewLine);
- //
- CreateNode(sb, "T0100", requset.T0100);
- CreateNode(sb, "T0300", requset.T0300);
- CreateNode(sb, "T0400", requset.T0400);
- CreateNode(sb, "T1100", requset.T1100);
- CreateNode(sb, "T1200", requset.T1200);
- CreateNode(sb, "T1300", requset.T1300);
- CreateNode(sb, "T4200", requset.T4200);
- CreateNode(sb, "T5503", requset.T5503);
- //
- sb.append("</TRANS>");
- return sb.toString();
- }
- // 5 Dongle重傳
- private String CreateXML5(ICERAPIReq requset) {
- StringBuffer sb = new StringBuffer();
- sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>").append(sNewLine);
- sb.append("<TRANS>").append(sNewLine);
- //
- CreateNode(sb, "T0100", requset.T0100);
- CreateNode(sb, "T0300", requset.T0300);
- CreateNode(sb, "T1100", requset.T1100);
- CreateNode(sb, "T1200", requset.T1200);
- CreateNode(sb, "T1300", requset.T1300);
- CreateNode(sb, "T4200", requset.T4200);
- CreateNode(sb, "T5503", requset.T5503);
- CreateNode(sb, "T5594", requset.T5594);
- //
- sb.append("</TRANS>");
- return sb.toString();
- }
- // 6 扣款作廢
- private String CreateXML6(ICERAPIReq requset) {
- StringBuffer sb = new StringBuffer();
- sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>").append(sNewLine);
- sb.append("<TRANS>").append(sNewLine);
- //
- CreateNode(sb, "T0100", requset.T0100);
- CreateNode(sb, "T0300", requset.T0300);
- CreateNode(sb, "T0400", requset.T0400);
- CreateNode(sb, "T1100", requset.T1100);
- CreateNode(sb, "T1200", requset.T1200);
- CreateNode(sb, "T1300", requset.T1300);
- CreateNode(sb, "T4200", requset.T4200);
- CreateNode(sb, "T5501", requset.T5501);
- CreateNode(sb, "T5503", requset.T5503);
- CreateNode(sb, "T5509", requset.T5509);
- //
- sb.append("</TRANS>");
- return sb.toString();
- }
- // 7 加值作廢
- private String CreateXML7(ICERAPIReq requset) {
- StringBuffer sb = new StringBuffer();
- sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>").append(sNewLine);
- sb.append("<TRANS>").append(sNewLine);
- //
- CreateNode(sb, "T0100", requset.T0100);
- CreateNode(sb, "T0300", requset.T0300);
- CreateNode(sb, "T0400", requset.T0400);
- CreateNode(sb, "T1100", requset.T1100);
- CreateNode(sb, "T1200", requset.T1200);
- CreateNode(sb, "T1300", requset.T1300);
- CreateNode(sb, "T4200", requset.T4200);
- CreateNode(sb, "T5501", requset.T5501);
- CreateNode(sb, "T5503", requset.T5503);
- CreateNode(sb, "T5509", requset.T5509);
- //
- sb.append("</TRANS>");
- return sb.toString();
- }
- private void CreateNode(StringBuffer sb, String nodeName, String nodeValue) {
- sb.append("<").append(nodeName).append(">");
- if ( nodeValue == null ) {
- nodeValue = "";
- } else {
- nodeValue = StringEscapeUtils.escapeXml(nodeValue);
- }
- sb.append(nodeValue);
- sb.append("</").append(nodeName).append(">").append(sNewLine);
- }
- // 錯誤訊息代碼
- private String ERROR_CODE_NAME(String TAG, String CODE) {
- String result = "";
- try {
- Hashtable SQL_ERRMSG = UU2_ERRMSG.getInstance(emisUtil.getServletContext()).getHash();
- result = emisUtil.parseString(SQL_ERRMSG.get(TAG + CODE), "");
- } catch (Exception e) {
- // e.printStackTrace();
- // webccrlog.error(webccr.getClass(), e);
- CcrUtil.setMessage(emisUtil.getStackTrace(e));
- }
- return result;
- }
- // 交易結束
- private void runEndSale() {
- TLoEndSale _oEvent = new TLoEndSale();
- _oEvent.go();
- }
- // 列印內容
- private String PrintContent(ICERAPIResp resp) {
- StringBuffer sb = new StringBuffer();
- try {
- String TYPE_NAME = T0300_PAY;
- if (TYPE == 1) {
- TYPE_NAME = T0300_PAY;
- } else if (TYPE == 2) {
- TYPE_NAME = T0300_ADD_VALUE;
- } else if (TYPE == 3) {
- TYPE_NAME = T0300_PAY_VOID;
- } else if (TYPE == 6) {
- TYPE_NAME = T0300_PAY_VOID;
- } else if (TYPE == 7) {
- TYPE_NAME = T0300_ADD_CANCEL;
- }
- //
- String sYEAR = resp.getT1300().substring(0, 4) + "-"
- + resp.getT1300().substring(4, 6) + "-"
- + resp.getT1300().substring(6, 8);
- String sTIME = resp.getT1200().substring(0,2) + ":"
- + resp.getT1200().substring(2,4) + ":"
- + resp.getT1200().substring(4,6);
- //
- String sBEF_BAL = emisUtil.parseString(resp.getT0415());
- if (sBEF_BAL.length() > 0) {
- sBEF_BAL = sBEF_BAL.substring(0, sBEF_BAL.length() - 2);
- }
- String sAMT = emisUtil.parseString(resp.getT0400());
- if (sAMT.length() > 0) {
- sAMT = sAMT.substring(0, sAMT.length() - 2);
- }
- String sAFT_BAL = emisUtil.parseString(resp.getT0410());
- if (sAFT_BAL.length() > 0) {
- sAFT_BAL = sAFT_BAL.substring(0, sAFT_BAL.length() - 2);
- }
- String sAUTO_ADD = emisUtil.parseString(resp.getT0409());
- if (sAUTO_ADD.length() > 0) {
- sAUTO_ADD = sAUTO_ADD.substring(0, sAUTO_ADD.length() - 2);
- }
- //
- sb.append("[DATA]").append(sNewLine);
- sb.append("STORE=").append(ccr.getStore().getFLDxS_NAME()).append(sNewLine);
- sb.append("SALE_TYPE=").append(TYPE_NAME).append(sNewLine);
- sb.append("CASH_ID=").append(ccr.getCcrID()).append(sNewLine);
- sb.append("SA_NO=").append(ccr.getCurrentSale().getPrimarykey()).append(sNewLine);
- sb.append("SALE_DATETIME=").append(sYEAR + " " + sTIME).append(sNewLine);
- sb.append("CARD_NO=").append(resp.getT0215()).append(sNewLine); // 給隱碼
- sb.append("BEF_BAL=").append(sBEF_BAL).append(sNewLine); //交易前餘額
- sb.append("AMT=").append(sAMT).append(sNewLine); // 交易金額(加值金額)
- sb.append("AFT_BAL=").append(sAFT_BAL).append(sNewLine); // 交易後餘額
- sb.append("AUTO_ADD=").append(sAUTO_ADD).append(sNewLine); // 自動加值金額
- sb.append("DONG_NO=").append(emisUtil.parseString(resp.getT1100())).append(sNewLine); // SL_NO
- //
- // webccrlog.info(webccr.getClass(), TYPE_NAME + " PrintContent:\n" + sb.toString());
- CcrUtil.setMessage(TYPE_NAME + " PrintContent:\n" + sb.toString());
- } catch (Exception e) {
- // e.printStackTrace();
- // webccrlog.error(webccr.getClass(), e);
- CcrUtil.setMessage(emisUtil.getStackTrace(e));
- }
- return sb.toString();
- }
- // 列印憑證
- private void PrintUUCard(String content, String SL_KEY) {
- String path = ccr.getPLUG_DISK() + "emis/senao/ePrintInv/";
- String filename = SL_KEY + "_" + TYPE;
- JavaScript.getCurrent().execute(
- " var util = new emisUtility(); \n" +
- " var a = '" + content + "'; \n" +
- " var c = '" + path + "RESULT.DAT'; \n" +
- " var d = '" + path + filename +".UU'; \n" +
- " util.deletefile(c); \n" +
- " util.writeStringToUTF8File(d, a); \n"+
- " util.executewait('" + path + "SenaoElecInvoicePrinter','" + filename + ".UU" + " 6'); "
- );
- }
- // 提示訊息 --> 按關閉後,繼續執行callBack (下面不能其他動作,除非不相關)
- protected void showErrMsgContinueRun(String sErrMsg_, boolean isRunOK, String info) {
- MessageBox.createError()
- .withCaption("錯誤")
- .withMessage(sErrMsg_)
- .withWidth("400px")
- .withCloseButton(() -> {
- // 繼續往下執行
- callBack(isRunOK, info);
- }, ButtonOption.focus())
- .open();
- }
- /**
- * UUCaerd執行成功、失敗
- * UUCaerd完成事件之callBack,可由此method從回傳物件(自由發揮)
- *
- * @param isRunOK
- * @return
- */
- private boolean callBack(boolean isRunOK, String info) {
- chkOK = isRunOK;
- if (this.successRunnable != null) {
- successRunnable.run();
- }
- if (TYPE == 2 && !isRunOK) {
- if (parentEvent != null) {
- parentEvent.runEventMethod("PLU_ERR");
- }
- }
- if (oWindow != null) {
- oWindow.close();
- }
- if (!chkOK) {
- time++;
- }
- return isRunOK;
- }
- public void setSuccessRunnable(Runnable successRunnable) {
- this.successRunnable = successRunnable;
- }
- public boolean isChkOK() {
- return chkOK;
- }
- public static void setbDevelopMode(boolean bDevelopMode1) {
- bDevelopMode = bDevelopMode1;
- }
- public static boolean isbDevelopMode() {
- return bDevelopMode;
- }
- public WinUuCard getoWindow() {
- return oWindow;
- }
- public void setoWindow(WinUuCard oWindow) {
- this.oWindow = oWindow;
- }
- public int getTime() {
- return time;
- }
- public void setTime(int time) {
- this.time = time;
- }
- }