using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using Cosmos.BaseFrame; using Cosmos.UserFrame; using Cosmos.Common; using Cosmos.CommonManager; using Cosmos.ServiceProvider; namespace Cosmos.Service { /// /// 주문서-영수증프린터 출력 /// class PosReceiptOrderSheet : PosReceiptBase, IServiceUs { /// /// 생성자 /// public PosReceiptOrderSheet() { m_cSqlDbService = (IDatabaseSQL)sManager.InitServiceInstance(ServiceLists.AGENT_DATABASE.DLL, ServiceLists.AGENT_DATABASE.DATABASE_MSSQL); } /// /// /// /// /// "ORDER_REPRINT" : 주방프린터 오류시 영수증프린터로 재출력처리 => 8 /// "ORDER_SHEET" : 주방프린터와 영수증프린터가 동일장비 일때 => 7 /// "CANCEL_BILLPRT": 영수증프리터 재출력 취소 (다시 주방프린터로 재시도) /// /// public string Execute(string[] aParam) { // 주방장치 출력여부 확인 if (PosMstManager.GetPosOption(POS_OPTION.OPT506) != "1") return UserCom.RST_OK; // 영수증프린터 사용여부 확인 if (m_cDevStatus.Printer.UseYn == false) return UserCom.RST_OK; // Mod, 2017.04.10, 주문포스도 주방출력 처리 한다. // KPS 데몬실행여부 확인 //if (m_cPosStatus.Base.PosType == PosConst.POS_TYPE.DEFERRED_PAYMENT && m_cPosStatus.Base.PosCommunicationType != PosConst.MAIN_POS_DIV.MAIN_POS) // return UserCom.RST_OK; if (aParam != null && aParam.Length > 0 && aParam[0] == "ORDER_REPRINT") { return this.ExecutePrint("8"); } else if (aParam != null && aParam.Length > 0 && aParam[0] == "ORDER_SHEET") { return this.ExecutePrint("7"); } else if (aParam != null && aParam.Length > 0 && aParam[0] == "CANCEL_BILLPRT") { return this.CancelBillPrintStatus(); } else { return UserCom.RST_ERR; } } /// /// 합석 - 영수증프린터 출력 => 미사용 /// /// /// 0:PosConst.KPS_ORD_MSG_ID.TABLE_COMBINE /// /// 1:From Floor /// 2:From Table /// 3:To Floor /// 4:To Table /// /// private string ExecutePrintTableAdd(string[] aParam) { try { if (aParam[0] != PosConst.KPS_ORD_MSG_ID.TABLE_COMBINE) return UserCom.RST_ERR; // 프린터 버퍼 초기화 base.PrintBufClear(); // 합석정보 생성 KPSOrderMessage cKPSOrderMsg = new KPSOrderMessage(); cKPSOrderMsg.sTrainMode = m_cPosStatus.Base.TrainingFlag; cKPSOrderMsg.sOrderType = PosConst.ORDER_TYPE.NORMAL; cKPSOrderMsg.sFloorCd = aParam[1]; // From Floor cKPSOrderMsg.sTableNo = aParam[2]; // From Table cKPSOrderMsg.nSeq = 1; cKPSOrderMsg.sSubShopCd = string.IsNullOrWhiteSpace(m_cPosStatus.Base.SubShopNo) ? m_cPosStatus.Base.StoreNo : m_cPosStatus.Base.SubShopNo; cKPSOrderMsg.sKtchSysCd = "LocalBillPrinter"; cKPSOrderMsg.sItemCd = string.Empty; cKPSOrderMsg.sItemNm = string.Empty; cKPSOrderMsg.sMsgId = PosConst.KPS_ORD_MSG_ID.TABLE_COMBINE; cKPSOrderMsg.sMsg1 = aParam[3]; // To Floor cKPSOrderMsg.sMsg2 = aParam[4]; // To Table cKPSOrderMsg.sMsg3 = string.Empty; cKPSOrderMsg.sRegDate = m_cPosStatus.Base.SaleDate; cKPSOrderMsg.sMsgRegTime = DateTime.Now.ToString("HHmmss"); cKPSOrderMsg.sSendYn = "0"; cKPSOrderMsg.sResend = "0"; Hashtable htKPSOderMessageItme = new Hashtable(); htKPSOderMessageItme.Add(htKPSOderMessageItme.Count, cKPSOrderMsg); MakeOrderAddMessage(1, ref htKPSOderMessageItme); // 프린터 출력 bool isSuccess = base.PrintExecute(false, true, false); return isSuccess ? UserCom.RST_OK : UserCom.RST_ERR; } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "Exception." + ex.Message); return UserCom.RST_ERR; } } /// /// 합석 - 영수증프린터 출력 => 미사용 /// /// /// 0:PosConst.KPS_ORD_MSG_ID.TABLE_COMBINE /// 1:From Floor /// 2:From Table /// 3:To Floor /// 4:To Table /// 5:CrossYN /// /// private string ExecutePrintTableMove(string[] aParam) { try { if (aParam[0] != PosConst.KPS_ORD_MSG_ID.TABLE_MOVE) return UserCom.RST_ERR; // 프린터 버퍼 초기화 base.PrintBufClear(); Hashtable htKPSOderMessageItme = new Hashtable(); // 합석정보 생성 (1st) KPSOrderMessage cOrdMsg1st = new KPSOrderMessage(); cOrdMsg1st.sTrainMode = m_cPosStatus.Base.TrainingFlag; cOrdMsg1st.sOrderType = PosConst.ORDER_TYPE.NORMAL; cOrdMsg1st.sFloorCd = aParam[1]; // From Floor cOrdMsg1st.sTableNo = aParam[2]; // From Table cOrdMsg1st.nSeq = 1; cOrdMsg1st.sSubShopCd = string.IsNullOrWhiteSpace(m_cPosStatus.Base.SubShopNo) ? m_cPosStatus.Base.StoreNo : m_cPosStatus.Base.SubShopNo; cOrdMsg1st.sKtchSysCd = "LocalBillPrinter"; cOrdMsg1st.sItemCd = string.Empty; cOrdMsg1st.sItemNm = string.Empty; cOrdMsg1st.sMsgId = PosConst.KPS_ORD_MSG_ID.TABLE_MOVE; cOrdMsg1st.sMsg1 = aParam[3]; // To Floor cOrdMsg1st.sMsg2 = aParam[4]; // To Table cOrdMsg1st.sMsg3 = string.Empty; cOrdMsg1st.sRegDate = m_cPosStatus.Base.SaleDate; cOrdMsg1st.sMsgRegTime = DateTime.Now.ToString("HHmmss"); cOrdMsg1st.sSendYn = "0"; cOrdMsg1st.sResend = "0"; htKPSOderMessageItme.Add(htKPSOderMessageItme.Count, cOrdMsg1st); // 합석정보 생성 (2nd) if (string.IsNullOrWhiteSpace(aParam[5])) { KPSOrderMessage cOrdMsg2nd = new KPSOrderMessage(); cOrdMsg2nd.sTrainMode = m_cPosStatus.Base.TrainingFlag; cOrdMsg2nd.sOrderType = PosConst.ORDER_TYPE.NORMAL; cOrdMsg2nd.sFloorCd = aParam[3]; // From Floor cOrdMsg2nd.sTableNo = aParam[4]; // From Table cOrdMsg2nd.nSeq = 1; cOrdMsg2nd.sSubShopCd = string.IsNullOrWhiteSpace(m_cPosStatus.Base.SubShopNo) ? m_cPosStatus.Base.StoreNo : m_cPosStatus.Base.SubShopNo; cOrdMsg2nd.sKtchSysCd = "LocalBillPrinter"; cOrdMsg2nd.sItemCd = string.Empty; cOrdMsg2nd.sItemNm = string.Empty; cOrdMsg2nd.sMsgId = PosConst.KPS_ORD_MSG_ID.TABLE_MOVE; cOrdMsg2nd.sMsg1 = aParam[1]; // To Floor cOrdMsg2nd.sMsg2 = aParam[2]; // To Table cOrdMsg2nd.sMsg3 = string.Empty; cOrdMsg2nd.sRegDate = m_cPosStatus.Base.SaleDate; cOrdMsg1st.sMsgRegTime = DateTime.Now.ToString("HHmmss"); cOrdMsg2nd.sSendYn = "0"; cOrdMsg2nd.sResend = "0"; } MakeOrderAddMessage(1, ref htKPSOderMessageItme); // 프린터 출력 bool isSuccess = base.PrintExecute(false, true, false); return isSuccess ? UserCom.RST_OK : UserCom.RST_ERR; } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "Exception." + ex.Message); return UserCom.RST_ERR; } } /// /// 주문서-영수증프린트 출력 /// /// /// /// /// private string ExecutePrint(string sendType) { try { // 프린터 버퍼 초기화 base.PrintBufClear(); // 주방주문서 생성 Hashtable htKPSOrderSheetItem = new Hashtable(); GetKPSOrderSheetItem(sendType, ref htKPSOrderSheetItem); if (htKPSOrderSheetItem.Count > 0) { for (var i = 0; i < htKPSOrderSheetItem.Count; i++) { Hashtable htKPSOrderSheetTemp = (Hashtable)htKPSOrderSheetItem[i]; if (htKPSOrderSheetTemp.Count == 0) continue; KPSItem cKPSItem = (KPSItem)htKPSOrderSheetTemp[0]; var prtCnt = CmUtil.IntParse(cKPSItem.sFiller1); if (prtCnt == 0) prtCnt = 1; MakeOrderSheet(prtCnt, ref htKPSOrderSheetTemp); } } // 주방 부가메시지 생성 Hashtable htKPSOrderMessageItem = new Hashtable(); GetKPSOrderMessageItem(sendType, ref htKPSOrderMessageItem); if (htKPSOrderMessageItem.Count > 0) { for (var i = 0; i < htKPSOrderMessageItem.Count; i++) { Hashtable htKPSOrderMessageTemp = (Hashtable)htKPSOrderMessageItem[i]; if (htKPSOrderMessageTemp.Count == 0) continue; KPSOrderMessage cKPSMsgItem = (KPSOrderMessage)htKPSOrderMessageTemp[0]; var prtCnt = cKPSMsgItem.printCount; if (prtCnt == 0) prtCnt = 1; MakeOrderAddMessage(prtCnt, ref htKPSOrderMessageTemp); } } // 프린터 출력 영수증 프린터에 출력되는 현상 제거(2019.05.08) bool isSuccess = base.PrintExecute(false, true, false); // 출력 성공시 출력데이터 업데이트 (성공여부) UpdatePrintStatus(isSuccess, htKPSOrderSheetItem, htKPSOrderMessageItem); return isSuccess ? UserCom.RST_OK : UserCom.RST_ERR; } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "Exception." + ex.Message); return UserCom.RST_ERR; } } /// /// 출력대상 주방주문서 정보 조회 /// /// /// /// private void GetKPSOrderSheetItem(string sendType, ref Hashtable htKPSOrderSheetItem) { try { DataTable dt = null; #region (주석) 연습모드 적용 이전 //string sql = "SELECT ORD_DIV, FLOOR_CD, TBL_NO, SUB_STOR_CD, KTCH_SYS_CD, SEQ \n" // + " , ORDER_NO, POS_TYPE, ITEM_CD, ITEM_DIV, SHTCUT_ITEMNM \n" // + " , SALE_QTY, PACK_DIV, SET_MENU_CD, ORD_TIME, CANCEL_DIV \n" // + " , SEND_YN, RESEND_YN, KTCH_SYS_USE_DIV, KTCH_PRINTER_COMM_PORT, KTCH_PRINTER_COMM_SPEED \n" // + " , KTCH_PRINTER_OPOS_NM, KTCH_PRINTER_IP, KTCH_PRINTER_PORT, ERROR_CD \n" // + " , FILLER1, FILLER2, FILLER3, FILLER4, FILLER5, MSG \n" // + " FROM POSMST..MST_KPS_ORD_MSG \n" // + " WHERE SEND_YN = '" + sendType + "' \n" // + " ORDER BY SUB_STOR_CD, KTCH_SYS_CD, ORD_DIV, FLOOR_CD, TBL_NO, SEQ \n" // ; #endregion #region (주석) 장치명 추가 이전 //string sql = "SELECT TRAIN_MODE_YN, ORD_DIV, FLOOR_CD, TBL_NO, SUB_STOR_CD, KTCH_SYS_CD, SEQ \n" // + " , ORDER_NO, POS_TYPE, ITEM_CD, ITEM_DIV, SHTCUT_ITEMNM \n" // + " , SALE_QTY, PACK_DIV, SET_MENU_CD, ORD_TIME, CANCEL_DIV \n" // + " , SEND_YN, RESEND_YN, KTCH_SYS_USE_DIV, KTCH_PRINTER_COMM_PORT, KTCH_PRINTER_COMM_SPEED \n" // + " , KTCH_PRINTER_OPOS_NM, KTCH_PRINTER_IP, KTCH_PRINTER_PORT, ERROR_CD \n" // + " , FILLER1, FILLER2, FILLER3, FILLER4, FILLER5, MSG \n" // + " , KTCH_MSG \n" // + " , ORD_PIC_NM \n" // Add, 2017.03.28, 주문담당자 // + " FROM POSMST..MST_KPS_ORD_MSG \n" // + " WHERE SEND_YN = '" + sendType + "' \n" // + " ORDER BY TRAIN_MODE_YN, SUB_STOR_CD, KTCH_SYS_CD, ORD_DIV, FLOOR_CD, TBL_NO, SEQ \n" // ; #endregion var sql = "SELECT A.TRAIN_MODE_YN, A.ORD_DIV, A.FLOOR_CD, A.TBL_NO, A.SUB_STOR_CD, A.KTCH_SYS_CD, A.SEQ \n" + " , A.ORDER_NO, A.POS_TYPE, A.ITEM_CD, A.ITEM_DIV, A.SHTCUT_ITEMNM \n" + " , A.SALE_QTY, A.PACK_DIV, A.SET_MENU_CD, A.ORD_TIME, A.CANCEL_DIV \n" + " , A.SEND_YN, A.RESEND_YN, A.KTCH_SYS_USE_DIV, A.KTCH_PRINTER_COMM_PORT, A.KTCH_PRINTER_COMM_SPEED \n" + " , A.KTCH_PRINTER_OPOS_NM, A.KTCH_PRINTER_IP, A.KTCH_PRINTER_PORT, A.ERROR_CD \n" + " , A.FILLER1, A.FILLER2, A.FILLER3, A.FILLER4, A.FILLER5, A.MSG \n" + " , A.KTCH_MSG \n" + " , B.POS_NO \n" // Add, 2017.06.13, POS별 주방프린터 설정 + " , A.ORD_PIC_NM \n" // Add, 2017.03.28, 주문담당자 + " , B.KTCH_SYS_NM \n" // Add, 2017.04.06 + " , A.ORD_POS_NO \n" // Add, 2017.04.10 + " , C.ITEM_INFO \n" // Add, 2017.09.06 레시피 추가 + " FROM POSMST..MST_KPS_ORD_MSG A \n" + " LEFT JOIN POSMST..MST_KTCH_DEVICE B WITH(NOLOCK) \n" + " ON A.SUB_STOR_CD = B.SUB_STOR_CD \n" + " AND A.KTCH_SYS_CD = B.KTCH_SYS_CD \n" + " AND B.CMP_CD = '" + m_cPosStatus.Base.CmpCd + "' \n" + " AND B.STOR_CD = '" + m_cPosStatus.Base.StoreNo + "' \n" + " AND B.USE_YN = '" + PosConst.MST_USE_YN.YES + "' \n" // Add, 2017.06.12 POS별 주방프린터 설정 + " LEFT JOIN POSMST..MST_KTCH_ITEM_INFO C WITH(NOLOCK) \n" + " ON A.ITEM_CD = C.ITEM_CD \n" + " AND C.USE_YN = '" + PosConst.MST_USE_YN.YES + "' \n" + " WHERE A.SEND_YN = '" + sendType + "' \n" + " AND A.ORD_POS_NO = '" + m_cPosStatus.Base.PosNo + "' \n" // Add, 2017.04.10 //#20171102 start //#20171103 주방영수증 출력시 부가메뉴가 위로 출력되는 증상 start //기존 //+ " ORDER BY A.TRAIN_MODE_YN, A.SUB_STOR_CD, A.KTCH_SYS_CD, A.ORD_DIV, A.FLOOR_CD, A.TBL_NO, A.SEQ DESC \n"; //변경 + " ORDER BY A.TRAIN_MODE_YN, A.SUB_STOR_CD, A.KTCH_SYS_CD, A.ORD_DIV, A.FLOOR_CD, A.TBL_NO, A.SEQ \n"; //#20171103 주방영수증 출력시 부가메뉴가 위로 출력되는 증상 end //1:OK, -1:Connection 정보 에러, -2:SQL 에러, -3:기타 에러, 0:Select 결과 없음 if (m_cSqlDbService.DBSelect(sql, out dt) != UserCom.OK) return; string itemKey = string.Empty; Hashtable htKPSOrderSheetTemp = new Hashtable(); DataRow[] arRows = null; arRows = dt.Select("POS_NO = '" + m_cPosStatus.Base.PosNo + "'"); if (arRows.Length == 0) arRows = dt.Select("POS_NO = '00'"); //foreach (DataRow dr in dt.Rows) foreach (DataRow dr in arRows) { KPSItem cKPSItem = new KPSItem(); cKPSItem.sTrainMode = CmUtil.GetDataRowStr(dr, "TRAIN_MODE_YN"); // Add, 2017.03.05, 연습모드 cKPSItem.sOrderType = CmUtil.GetDataRowStr(dr, "ORD_DIV"); cKPSItem.sFloorCd = CmUtil.GetDataRowStr(dr, "FLOOR_CD"); cKPSItem.sTableNo = CmUtil.GetDataRowStr(dr, "TBL_NO"); cKPSItem.sSubShopCd = CmUtil.GetDataRowStr(dr, "SUB_STOR_CD"); // Add, 2017.02.07 cKPSItem.sKtchSysCd = CmUtil.GetDataRowStr(dr, "KTCH_SYS_CD"); cKPSItem.nSeq = CmUtil.GetDataRowInt(dr, "SEQ"); cKPSItem.sOrderNo = CmUtil.GetDataRowStr(dr, "ORDER_NO"); cKPSItem.sPosType = CmUtil.GetDataRowStr(dr, "POS_TYPE"); cKPSItem.sItemCd = CmUtil.GetDataRowStr(dr, "ITEM_CD"); cKPSItem.sItemDiv = CmUtil.GetDataRowStr(dr, "ITEM_DIV"); cKPSItem.sItemNm = CmUtil.GetDataRowStr(dr, "SHTCUT_ITEMNM"); cKPSItem.nQty = CmUtil.GetDataRowInt(dr, "SALE_QTY"); cKPSItem.sPackDiv = CmUtil.GetDataRowStr(dr, "PACK_DIV"); cKPSItem.sSetMenuCd = CmUtil.GetDataRowStr(dr, "SET_MENU_CD"); cKPSItem.sOrdTime = CmUtil.GetDataRowStr(dr, "ORD_TIME"); cKPSItem.sCancelDiv = CmUtil.GetDataRowStr(dr, "CANCEL_DIV"); cKPSItem.sKtchSysUseDiv = CmUtil.GetDataRowStr(dr, "KTCH_SYS_USE_DIV"); cKPSItem.nKpsComPort = CmUtil.GetDataRowInt(dr, "KTCH_PRINTER_COMM_PORT"); cKPSItem.nKpsComBaudrate = CmUtil.GetDataRowInt(dr, "KTCH_PRINTER_COMM_SPEED"); cKPSItem.sKpsOposName = CmUtil.GetDataRowStr(dr, "KTCH_PRINTER_OPOS_NM"); cKPSItem.sKpsIp = CmUtil.GetDataRowStr(dr, "KTCH_PRINTER_IP"); cKPSItem.sKpsPort = CmUtil.GetDataRowStr(dr, "KTCH_PRINTER_PORT"); cKPSItem.sErrorCd = CmUtil.GetDataRowStr(dr, "ERROR_CD"); cKPSItem.sFiller1 = CmUtil.GetDataRowStr(dr, "FILLER1"); cKPSItem.sFiller2 = CmUtil.GetDataRowStr(dr, "FILLER2"); cKPSItem.sFiller3 = CmUtil.GetDataRowStr(dr, "FILLER3"); cKPSItem.sFiller4 = CmUtil.GetDataRowStr(dr, "FILLER4"); cKPSItem.sFiller5 = CmUtil.GetDataRowStr(dr, "FILLER5"); //cKPSItem.sKtchMemo = CmUtil.GetDataRowStr(dr, "MSG"); cKPSItem.sKtchMemo = CmUtil.GetDataRowStr(dr, "KTCH_MSG"); // Mod, 2017.03.21 cKPSItem.sItemMemo = CmUtil.GetDataRowStr(dr, "MSG"); // Add, 2017.03.21 cKPSItem.sOrdPicNm = CmUtil.GetDataRowStr(dr, "ORD_PIC_NM"); // Add, 2017.03.28, 주문담당자 cKPSItem.sOrdPosNo = CmUtil.GetDataRowStr(dr, "ORD_POS_NO"); // Add, 2017.04.10 cKPSItem.sSendYn = CmUtil.GetDataRowStr(dr, "SEND_YN"); cKPSItem.sResendYn = sendType == "8" ? "1" : CmUtil.GetDataRowStr(dr, "RESEND_YN"); cKPSItem.sKtchSysNm = CmUtil.GetDataRowStr(dr, "KTCH_SYS_NM"); // Add, 2017.04.06 cKPSItem.sRecipe = CmUtil.GetDataRowStr(dr, "ITEM_INFO"); // Add 2017.09.14 var checkKey = cKPSItem.sTrainMode + cKPSItem.sSubShopCd + cKPSItem.sKtchSysCd + cKPSItem.sFloorCd + cKPSItem.sTableNo; if (itemKey != checkKey) { if (htKPSOrderSheetTemp.Count != 0) { htKPSOrderSheetItem.Add(htKPSOrderSheetItem.Count, htKPSOrderSheetTemp); } itemKey = checkKey; htKPSOrderSheetTemp = new Hashtable(); } htKPSOrderSheetTemp.Add(htKPSOrderSheetTemp.Count, cKPSItem); } if (htKPSOrderSheetTemp.Count != 0) { htKPSOrderSheetItem.Add(htKPSOrderSheetItem.Count, htKPSOrderSheetTemp); } } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "Exception." + ex.Message); } } /// /// 출력대상 주방부가메시지 정보 조회 /// /// /// private void GetKPSOrderMessageItem(string sendType, ref Hashtable htKPSOderMessageItme) { try { DataTable dt = null; #region (주석) 연습모드 적용 이전 //string sql = " SELECT A.ORD_DIV, A.FLOOR_CD, A.TBL_NO, A.SEQ, A.SUB_STOR_CD, A.KTCH_SYS_CD \n" // + " , A.ITEM_CD, A.SHTCUT_ITEMNM, A.MSG_DIV, A.MSG1, A.MSG2 \n" // + " , A.MSG3, A.MSG_REG_TIME, B.KTCH_SYS_USE_DIV, B.KTCH_PRINTER_COMM_PORT, B.KTCH_PRINTER_COMM_SPEED \n" // + " , B.KTCH_PRINTER_OPOS_NM, B.KTCH_PRINTER_IP, B.KTCH_PRINTER_PORT, ISNULL(B.PRT_CNT, 1) PRT_CNT, A.REG_DT \n" // + " , A.SEND_YN, A.RESEND_YN \n" // + " FROM POSMST..MST_KTCH_ORD_MSG_ADD A \n" // + " , POSMST..MST_KTCH_DEVICE B \n" // + " WHERE A.SEND_YN = '" + sendType + "' \n" // + " AND A.SUB_STOR_CD = B.SUB_STOR_CD \n" // + " AND A.KTCH_SYS_CD = B.KTCH_SYS_CD \n" // + " AND B.CMP_CD = '" + m_cPosStatus.Base.CmpCd + "' \n" // + " AND B.STOR_CD = '" + m_cPosStatus.Base.StoreNo + "' \n" // + " AND B.KTCH_SYS_DIV = '1' \n" // + " AND B.KTCH_SYS_CD <> '99' \n" // + " ORDER BY A.SUB_STOR_CD, B.KTCH_SYS_CD, A.ORD_DIV, A.FLOOR_CD, A.TBL_NO, A.SEQ \n" // ; #endregion string sql = " SELECT A.TRAIN_MODE_YN, A.ORD_DIV, A.FLOOR_CD, A.TBL_NO, A.SEQ, A.SUB_STOR_CD, A.KTCH_SYS_CD \n" + " , A.ITEM_CD, A.SHTCUT_ITEMNM, A.MSG_DIV, A.MSG1, A.MSG2 \n" + " , A.MSG3, A.MSG_REG_TIME, B.KTCH_SYS_USE_DIV, B.KTCH_PRINTER_COMM_PORT, B.KTCH_PRINTER_COMM_SPEED \n" + " , B.KTCH_PRINTER_OPOS_NM, B.KTCH_PRINTER_IP, B.KTCH_PRINTER_PORT, ISNULL(B.PRT_CNT, 1) PRT_CNT, A.REG_DT \n" + " , A.SEND_YN, A.RESEND_YN \n" + " , B.KTCH_SYS_NM \n" + " , A.ORD_POS_NO \n" + " FROM POSMST..MST_KTCH_ORD_MSG_ADD A \n" + " , POSMST..MST_KTCH_DEVICE B WITH(NOLOCK) \n" + " WHERE A.SEND_YN = '" + sendType + "' \n" + " AND A.SUB_STOR_CD = B.SUB_STOR_CD \n" + " AND A.KTCH_SYS_CD = B.KTCH_SYS_CD \n" + " AND A.ORD_POS_NO = '" + m_cPosStatus.Base.PosNo + "' \n" // Add, 2017.04.10 + " AND B.CMP_CD = '" + m_cPosStatus.Base.CmpCd + "' \n" + " AND B.STOR_CD = '" + m_cPosStatus.Base.StoreNo + "' \n" + " AND B.USE_YN = '" + PosConst.MST_USE_YN.YES + "' \n" // Add, 2017.06.12 POS별 주방프린터 설정 + " AND B.KTCH_SYS_DIV = '" + PosConst.KTCH_SYS_DIV.KPS + "' \n" + " AND B.KTCH_SYS_CD <> '99' \n" + " ORDER BY A.TRAIN_MODE_YN, A.SUB_STOR_CD, B.KTCH_SYS_CD, A.ORD_DIV, A.FLOOR_CD, A.TBL_NO, A.SEQ \n" ; //1:OK, -1:Connection 정보 에러, -2:SQL 에러, -3:기타 에러, 0:Select 결과 없음 if (m_cSqlDbService.DBSelect(sql, out dt) != UserCom.OK) return; string itemKey = string.Empty; Hashtable htKPSOderMessageTemp = new Hashtable(); foreach (DataRow dr in dt.Rows) { KPSOrderMessage cKPSOrderMsg = new KPSOrderMessage(); cKPSOrderMsg.sTrainMode = CmUtil.GetDataRowStr(dr, "TRAIN_MODE_YN"); // Add, 2017.03.05, 연습모드 cKPSOrderMsg.sOrderType = CmUtil.GetDataRowStr(dr, "ORD_DIV"); cKPSOrderMsg.sFloorCd = CmUtil.GetDataRowStr(dr, "FLOOR_CD"); cKPSOrderMsg.sTableNo = CmUtil.GetDataRowStr(dr, "TBL_NO"); cKPSOrderMsg.nSeq = CmUtil.GetDataRowInt(dr, "SEQ"); cKPSOrderMsg.sSubShopCd = CmUtil.GetDataRowStr(dr, "SUB_STOR_CD"); // Add, 2017.02.06 cKPSOrderMsg.sKtchSysCd = CmUtil.GetDataRowStr(dr, "KTCH_SYS_CD"); cKPSOrderMsg.sKtchSysNm = CmUtil.GetDataRowStr(dr, "KTCH_SYS_NM"); // Add, 2017.04.07 cKPSOrderMsg.sItemCd = CmUtil.GetDataRowStr(dr, "ITEM_CD"); cKPSOrderMsg.sItemNm = CmUtil.GetDataRowStr(dr, "SHTCUT_ITEMNM"); cKPSOrderMsg.sMsgId = CmUtil.GetDataRowStr(dr, "MSG_DIV"); cKPSOrderMsg.sMsg1 = CmUtil.GetDataRowStr(dr, "MSG1"); cKPSOrderMsg.sMsg2 = CmUtil.GetDataRowStr(dr, "MSG2"); cKPSOrderMsg.sMsg3 = CmUtil.GetDataRowStr(dr, "MSG3"); cKPSOrderMsg.sMsgRegTime = CmUtil.GetDataRowStr(dr, "MSG_REG_TIME"); cKPSOrderMsg.sKtchSysUseDiv = CmUtil.GetDataRowStr(dr, "KTCH_SYS_USE_DIV"); cKPSOrderMsg.nKpsComPort = CmUtil.GetDataRowInt(dr, "KTCH_PRINTER_COMM_PORT"); cKPSOrderMsg.nKpsComBaudrate = CmUtil.GetDataRowInt(dr, "KTCH_PRINTER_COMM_SPEED"); cKPSOrderMsg.sKpsOposName = CmUtil.GetDataRowStr(dr, "KTCH_PRINTER_OPOS_NM"); cKPSOrderMsg.sKpsIp = CmUtil.GetDataRowStr(dr, "KTCH_PRINTER_IP"); cKPSOrderMsg.sKpsPort = CmUtil.GetDataRowStr(dr, "KTCH_PRINTER_PORT"); cKPSOrderMsg.sSendYn = CmUtil.GetDataRowStr(dr, "SEND_YN"); cKPSOrderMsg.sResend = sendType == "8" ? "1" : CmUtil.GetDataRowStr(dr, "RESEND_YN"); cKPSOrderMsg.printCount = CmUtil.GetDataRowInt(dr, "PRT_CNT"); if (cKPSOrderMsg.printCount == 0) cKPSOrderMsg.printCount = 1; var temp = CmUtil.GetDataRowStr(dr, "REG_DT").Trim(); cKPSOrderMsg.sRegDate = temp.Length > 8 ? temp.Substring(0, 8) : m_cPosStatus.Base.SaleDate; cKPSOrderMsg.sOrdPosNo = CmUtil.GetDataRowStr(dr, "ORD_POS_NO"); // Add, 2017.04.10 //string checkKey = cKPSOrderMsg.sTrainMode + cKPSOrderMsg.sSubShopCd + cKPSOrderMsg.sKtchSysCd + cKPSOrderMsg.sFloorCd + cKPSOrderMsg.sTableNo + cKPSOrderMsg.sMsgId; var checkKey = string.Empty; switch (cKPSOrderMsg.sMsgId) { case PosConst.KPS_ORD_MSG_ID.ITEM_MEMO: //case PosConst.KPS_ORD_MSG_ID.FIRE_KEY: checkKey = cKPSOrderMsg.sTrainMode + cKPSOrderMsg.sSubShopCd + cKPSOrderMsg.sKtchSysCd + cKPSOrderMsg.sFloorCd + cKPSOrderMsg.sTableNo + cKPSOrderMsg.sMsgId + cKPSOrderMsg.sItemCd; break; case PosConst.KPS_ORD_MSG_ID.FIRE_KEY: // Add, 2017.03.22 default: checkKey = cKPSOrderMsg.sTrainMode + cKPSOrderMsg.sSubShopCd + cKPSOrderMsg.sKtchSysCd + cKPSOrderMsg.sFloorCd + cKPSOrderMsg.sTableNo + cKPSOrderMsg.sMsgId; break; } if (itemKey != checkKey) { if (htKPSOderMessageTemp.Count != 0) { htKPSOderMessageItme.Add(htKPSOderMessageItme.Count, htKPSOderMessageTemp); } itemKey = checkKey; htKPSOderMessageTemp = new Hashtable(); } htKPSOderMessageTemp.Add(htKPSOderMessageTemp.Count, cKPSOrderMsg); } if (htKPSOderMessageTemp.Count != 0) { htKPSOderMessageItme.Add(htKPSOderMessageItme.Count, htKPSOderMessageTemp); } } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "Exception." + ex.Message); } } /// /// 주방 주문서 생성 /// /// /// private void MakeOrderSheet(int prtCount, ref Hashtable htKPSOrderSheetTemp) { try { var sPrtID = PosConst.PRT_ITEM.ETC; var sPrtDat1 = string.Empty; var sPrtDat2 = string.Empty; // 반복출력 for (var cnt = 0; cnt < prtCount; cnt++) { var itemKey = string.Empty; var ktchMemo = string.Empty; var reprtMsg = string.Empty; var orderNo1 = string.Empty; var orderNo2 = string.Empty; for (var i = 0; i < htKPSOrderSheetTemp.Count; i++) { KPSItem cKPSItem = (KPSItem)htKPSOrderSheetTemp[i]; if (cKPSItem.sSendYn == "1") continue; // Mod, 2017.03.03, 연습모드 //var checkKey = cKPSItem.sOrderType + cKPSItem.sFloorCd + cKPSItem.sTableNo; var checkKey = cKPSItem.sTrainMode + cKPSItem.sOrderType + cKPSItem.sFloorCd + cKPSItem.sTableNo; if (itemKey != checkKey) { //if (sOrgOrderType != "") if (string.IsNullOrWhiteSpace(itemKey) == false) { AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F100, "-"); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_CUT, ""); } // 원정보 설정 itemKey = checkKey; // Add, 2017.03.03 // 제목 sPrtDat1 = string.Format("<< {0}{1} >>", MessageManager.GetPrintMessage(POS_MESSAGE.PRINT.MSG_0154), cKPSItem.sResendYn != "0" ? " (R)" : ""); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_BIG, PosConst.PRT_FMT.F103, sPrtDat1); // 연습모드 // Add, 2017.03.03, 연습모드 if (cKPSItem.sTrainMode == ItemConst.TRAINING_FLAG.TRAINING_YES) { sPrtDat1 = MessageManager.GetPrintMessage(POS_MESSAGE.PRINT.MSG_0033); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_VRB, PosConst.PRT_FMT.F103, sPrtDat1); } // 복합매장-서브매장명 if (string.IsNullOrWhiteSpace(m_cPosStatus.Base.SubShopNm) == false) { sPrtDat1 = m_cPosStatus.Base.SubShopNm; AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_BLD, PosConst.PRT_FMT.F103, sPrtDat1); } AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F101, string.Empty); // 반복횟수 var prtCnt = prtCount > 1 ? string.Format(" ({0}/{1})", cnt + 1, prtCount) : string.Empty; // 주문시간 sPrtDat1 = string.Format("{0} : {1} {2} {3}", "주문시간" //MessageManager.GetPrintMessage(POS_MESSAGE.PRINT.MSG_0155) , m_cPosStatus.Global.DateToCulture(m_cPosStatus.Base.SaleDate) , CmUtil.StrToTime(cKPSItem.sOrdTime) , prtCnt); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F101, sPrtDat1); // 주문번호 if (cKPSItem.sFiller2 == "2") { // 해피오더 sPrtDat1 = string.Format("{0} : {1}", MessageManager.GetPrintMessage(POS_MESSAGE.PRINT.MSG_0158), cKPSItem.sOrderNo); } //else if (cKPSItem.sPosType == PosConst.POS_TYPE.DEFERRED_PAYMENT) //{ // // 후불 // sPrtDat1 = string.Format("{0} : {1}-{2}", MessageManager.GetPrintMessage(POS_MESSAGE.PRINT.MSG_0156), cKPSItem.sFloorCd, cKPSItem.sTableNo); //} else { sPrtDat1 = string.Format("{0} : {1}", "주문번호", cKPSItem.sOrderNo); //MessageManager.GetPrintMessage(POS_MESSAGE.PRINT.MSG_0156), cKPSItem.sOrderNo); } AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F101, sPrtDat1); // 주문담당자 if (string.IsNullOrWhiteSpace(cKPSItem.sOrdPicNm) == false) { sPrtDat1 = string.Format("{0} : {1}", MessageManager.GetPrintMessage(POS_MESSAGE.PRINT.MSG_0189), cKPSItem.sOrdPicNm.Trim()); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F101, sPrtDat1); } // 인원 if (cKPSItem.sPosType == PosConst.POS_TYPE.DEFERRED_PAYMENT) { sPrtDat1 = GetCustInfo(cKPSItem.sTrainMode, cKPSItem.sFloorCd, cKPSItem.sTableNo); if (string.IsNullOrWhiteSpace(sPrtDat1) == false) { sPrtDat1 = string.Format("{0} : {1}", MessageManager.GetPrintMessage(POS_MESSAGE.PRINT.MSG_0157), sPrtDat1); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F101, sPrtDat1); } } // 주문번호/테이블 // Mod, 2017.05.08, 주분번호 후불=상단, 선불=하단 출력 sPrtDat1 = string.Empty; sPrtDat2 = string.Empty; orderNo1 = string.Empty; orderNo2 = string.Empty; if (cKPSItem.sPosType == PosConst.POS_TYPE.DEFERRED_PAYMENT) { #region (주문번호 상단 출력) if (cKPSItem.sPosType == PosConst.POS_TYPE.DEFERRED_PAYMENT && string.IsNullOrWhiteSpace(cKPSItem.sFiller2)) { sPrtDat1 = string.Format("[ {0} ]", MessageManager.GetPrintMessage(POS_MESSAGE.PRINT.MSG_0148)); sPrtDat2 = GetFloorAndTableName(cKPSItem.sFloorCd, cKPSItem.sTableNo); } else if (string.IsNullOrWhiteSpace(cKPSItem.sOrderNo) == false) { sPrtDat1 = string.Format("[ {0} ]", "주문대기번호");// MessageManager.GetPrintMessage(POS_MESSAGE.PRINT.MSG_0097)); sPrtDat2 = string.Format("{0}", cKPSItem.sOrderNo); } AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F100, "-"); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_BLD, PosConst.PRT_FMT.F103, sPrtDat1); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_BIG, PosConst.PRT_FMT.F103, sPrtDat2); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F100, "="); #endregion } else { #region (주문번호 하단 출력) if (cKPSItem.sPosType == PosConst.POS_TYPE.DEFERRED_PAYMENT && string.IsNullOrWhiteSpace(cKPSItem.sFiller2)) { orderNo1 = GetFloorAndTableName(cKPSItem.sFloorCd, cKPSItem.sTableNo); orderNo2 = string.Format("[ {0} ]", MessageManager.GetPrintMessage(POS_MESSAGE.PRINT.MSG_0148)); } else if (string.IsNullOrWhiteSpace(cKPSItem.sOrderNo) == false) { orderNo1 = string.Format("{0}", cKPSItem.sOrderNo); orderNo2 = string.Format("[ {0} ]", MessageManager.GetPrintMessage(POS_MESSAGE.PRINT.MSG_0097)); } AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F100, "="); #endregion } // 재출력시 주방장치코드/명 출력 if (cKPSItem.sResendYn == "1") { reprtMsg = CmUtil.MidH(string.Format("# Kitchen Printer No. [{0}] {1}", cKPSItem.sKtchSysCd.Trim(), cKPSItem.sKtchSysNm.Trim()), 0, 42).Trim(); } } // 상품/수량 var sign = cKPSItem.sCancelDiv == "1" ? -1 : 1; var type = GetAddOrderString(cKPSItem.sFiller3); var qty = cKPSItem.nQty == 0 ? string.Empty : (sign * cKPSItem.nQty).ToString(); sPrtDat1 = CmUtil.RPadH(cKPSItem.sItemNm, 30) + CmUtil.RPadH(type, 5) + CmUtil.LPadH(qty, 6); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_VER, PosConst.PRT_FMT.F101, sPrtDat1); //2017.09.07 레시피 출력 if (cKPSItem.sRecipe.ToString().Trim().Length > 0) { string Recipe = cKPSItem.sRecipe.Replace("@", "\r").Replace("$", "\n").ToString(); string[] RecipeData = Recipe.Split(new string[] { "\r\n", "\n", "\r" }, StringSplitOptions.None); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F100, "-"); foreach (var dt in RecipeData) { AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F101, dt.Trim()); } } // Add, 2017.03.21, 상품메모 if (string.IsNullOrWhiteSpace(cKPSItem.sItemMemo) == false) { var lst = this.GetParserMemo(cKPSItem.sItemMemo); foreach (var msg in lst) { AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F101, " " + msg.Trim()); } } // Add, 2017.04.10, 상품구분라인 var nextIdx = i + 1; if (nextIdx < htKPSOrderSheetTemp.Count) { var NextItemDiv = ((KPSItem)htKPSOrderSheetTemp[nextIdx]).sItemDiv; switch (NextItemDiv) { case ItemConst.PLU_ITEM_DIV.NORMAL: case ItemConst.PLU_ITEM_DIV.SET_MAIN: case ItemConst.PLU_ITEM_DIV.SET_DIS: AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F100, "-"); break; } } #region Mod, 2017.04.25, 주방메모 출력 //// Add, 2017.01.23 //// 주방프린터 수동출력(상품선택) 옵션 처리 //if (PosMstManager.GetPosOption(POS_OPTION.OPT425) == "2") //{ // ktchMemo = cKPSItem.sKtchMemo; //} #endregion ktchMemo = cKPSItem.sKtchMemo; } // Add, 2017.01.23, 수동출력옵션 시 주방메모 출력 if (string.IsNullOrWhiteSpace(ktchMemo) == false) { AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F100, "="); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_BLD, PosConst.PRT_FMT.F101, "Memo:"); var lst = this.GetParserMemo(ktchMemo); foreach (string msg in lst) { AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_VER, PosConst.PRT_FMT.F101, " " + msg.Trim()); } } // Add, 2017.04.07 if (string.IsNullOrWhiteSpace(orderNo1) == false) { AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F100, "="); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_BIG, PosConst.PRT_FMT.F103, orderNo1); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_BLD, PosConst.PRT_FMT.F103, orderNo2); } // 재출력시 주방장치코드/명 출력 if (string.IsNullOrWhiteSpace(reprtMsg) == false) { AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F100, "="); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_BLD, PosConst.PRT_FMT.F101, reprtMsg); } AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F100, "-"); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_CUT, ""); } } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "Exception." + ex.Message); } } /// /// 주방 부가메시지 생성 /// /// /// private void MakeOrderAddMessage(int prtCount, ref Hashtable htKPSOrderMessageTemp) { try { string sPrtID = PosConst.PRT_ITEM.ETC; string sPrtData = string.Empty; // 반복출력 for (var cnt = 0; cnt < prtCount; cnt++) { var itemKey = string.Empty; var reprtMsg = string.Empty; for (var i = 0; i < htKPSOrderMessageTemp.Count; i++) { KPSOrderMessage cKPSMessage = (KPSOrderMessage)htKPSOrderMessageTemp[i]; if (cKPSMessage.sSendYn == "1") continue; string checkKey = cKPSMessage.sTrainMode + cKPSMessage.sOrderType + cKPSMessage.sFloorCd + cKPSMessage.sTableNo + cKPSMessage.sMsgId; if (itemKey != checkKey) { if (string.IsNullOrWhiteSpace(itemKey) == false) { AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F100, "-"); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_CUT, ""); } itemKey = checkKey; #region ### 헤더 출력 string sPrtTitle = this.GetOrderMessageTitle(cKPSMessage.sMsgId); switch (cKPSMessage.sMsgId) { case PosConst.KPS_ORD_MSG_ID.TABLE_COMBINE: case PosConst.KPS_ORD_MSG_ID.TABLE_MOVE: case PosConst.KPS_ORD_MSG_ID.MENU_MOVE: sPrtData = string.Format("[{0}{1}]", sPrtTitle, cKPSMessage.sResend != "0" ? " (R)" : ""); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_VER, PosConst.PRT_FMT.F103, sPrtData); // 연습모드 // Add, 2017.03.03, 연습모드 if (cKPSMessage.sTrainMode == ItemConst.TRAINING_FLAG.TRAINING_YES) { sPrtData = MessageManager.GetPrintMessage(POS_MESSAGE.PRINT.MSG_0033); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_VRB, PosConst.PRT_FMT.F103, sPrtData); } AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, ""); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F100, "-"); sPrtData = string.Format("{0} : {1} -> {2}", sPrtTitle , GetFloorAndTableName(cKPSMessage.sFloorCd, cKPSMessage.sTableNo) , GetFloorAndTableName(cKPSMessage.sMsg1, cKPSMessage.sMsg2)); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_VER, PosConst.PRT_FMT.F101, sPrtData); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F100, "-"); break; default: sPrtData = string.Format("[{0}{1}]", sPrtTitle, cKPSMessage.sResend != "0" ? " (R)" : ""); if (cKPSMessage.sMsgId == PosConst.KPS_ORD_MSG_ID.FIRE_KEY) { AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_VRE, PosConst.PRT_FMT.F103, sPrtData); } else { AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_VER, PosConst.PRT_FMT.F103, sPrtData); } // 연습모드 // Add, 2017.03.03, 연습모드 if (cKPSMessage.sTrainMode == ItemConst.TRAINING_FLAG.TRAINING_YES) { sPrtData = MessageManager.GetPrintMessage(POS_MESSAGE.PRINT.MSG_0033); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_VRB, PosConst.PRT_FMT.F103, sPrtData); } AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, ""); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F100, "-"); sPrtData = string.Format("{0} : {1}", MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0176) , GetFloorAndTableName(cKPSMessage.sFloorCd, cKPSMessage.sTableNo)); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_VER, PosConst.PRT_FMT.F101, sPrtData); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F100, "-"); break; } // 재출력시 주방장치코드/명 출력 if (cKPSMessage.sResend == "1") { reprtMsg = CmUtil.MidH(string.Format("# Kitchen Printer No. [{0}] {1}", cKPSMessage.sKtchSysCd.Trim(), cKPSMessage.sKtchSysNm.Trim()), 0, 42).Trim(); } #endregion #region ### 상품정보 출력 switch (cKPSMessage.sMsgId) { case PosConst.KPS_ORD_MSG_ID.ITEM_MEMO: //case PosConst.KPS_ORD_MSG_ID.FIRE_KEY: AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_VER, PosConst.PRT_FMT.F101, cKPSMessage.sItemNm.Trim()); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F100, "-"); break; case PosConst.KPS_ORD_MSG_ID.FIRE_KEY: for (var j = 0; j < htKPSOrderMessageTemp.Count; j++) { KPSOrderMessage cKPSOrderSubMsg = (KPSOrderMessage)htKPSOrderMessageTemp[j]; sPrtData = string.Format("{0}{1}", CmUtil.RPadH(cKPSOrderSubMsg.sItemNm, 37), CmUtil.LPadH(cKPSOrderSubMsg.sMsg1, 5)); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_VER, PosConst.PRT_FMT.F101, sPrtData); i = j; } AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F100, "-"); break; case PosConst.KPS_ORD_MSG_ID.MENU_MOVE: for (var j = 0; j < htKPSOrderMessageTemp.Count; j++) { KPSOrderMessage cKPSOrderSubMsg = (KPSOrderMessage)htKPSOrderMessageTemp[j]; if (cKPSOrderSubMsg.sSendYn == "1") break; ; if (cKPSMessage.sMsgId != cKPSOrderSubMsg.sMsgId) break; if (cKPSMessage.sFloorCd != cKPSOrderSubMsg.sFloorCd) break; if (cKPSMessage.sTableNo != cKPSOrderSubMsg.sTableNo) break; if (cKPSMessage.sOrderType != cKPSOrderSubMsg.sOrderType) break; if (cKPSMessage.sKtchSysCd != cKPSOrderSubMsg.sKtchSysCd) break; if (cKPSMessage.sMsg1.Trim() != cKPSOrderSubMsg.sMsg1.Trim()) break; if (cKPSMessage.sMsg2.Trim() != cKPSOrderSubMsg.sMsg2.Trim()) break; // 메뉴이동 상품정보 출력 sPrtData = string.Format("{0}{1}", CmUtil.RPadH(cKPSOrderSubMsg.sItemNm, 37), CmUtil.LPadH(cKPSOrderSubMsg.sMsg3, 5)); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_VER, PosConst.PRT_FMT.F101, sPrtData); i = j; } AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F100, "-"); break; } #endregion #region ### 메시지 출력 switch (cKPSMessage.sMsgId) { case PosConst.KPS_ORD_MSG_ID.ITEM_MEMO: //case PosConst.KPS_ORD_MSG_ID.FIRE_KEY: case PosConst.KPS_ORD_MSG_ID.SEAT_MEMO: var memo = (string.IsNullOrWhiteSpace(cKPSMessage.sMsg1) ? "" : cKPSMessage.sMsg1.Trim() + Environment.NewLine) + (string.IsNullOrWhiteSpace(cKPSMessage.sMsg2) ? "" : cKPSMessage.sMsg2.Trim() + Environment.NewLine) + (string.IsNullOrWhiteSpace(cKPSMessage.sMsg3) ? "" : cKPSMessage.sMsg3.Trim()); if (string.IsNullOrWhiteSpace(memo) == false) { var lst = GetParserMemo(memo.Trim()); foreach (var msg in lst) { AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_VER, PosConst.PRT_FMT.F101, " " + msg.Trim()); } } AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F100, "-"); break; } #endregion #region ### 꼬리 출력 // 반복횟수 var prtCnt = prtCount > 1 ? string.Format(" ({0}/{1})", cnt + 1, prtCount) : string.Empty; // 주문시간 sPrtData = string.Format("{0} : {1} {2} {3}", MessageManager.GetPrintMessage(POS_MESSAGE.PRINT.MSG_0085) , m_cPosStatus.Global.DateToCulture(cKPSMessage.sRegDate) , CmUtil.StrToTime(cKPSMessage.sMsgRegTime) , prtCnt); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F101, sPrtData); // 재출력시 주방장치코드/명 출력 if (string.IsNullOrWhiteSpace(reprtMsg) == false) { //AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F100, "="); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_BLD, PosConst.PRT_FMT.F101, reprtMsg); } #endregion AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_NOR, PosConst.PRT_FMT.F100, "="); AddPrintData(sPrtID, PosConst.PRT_HDR.PRT_CUT, ""); } } } } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "Exception." + ex.Message); } } /// /// 출력오류 주문서 영수증프린터 출력 취소 /// (주방프리터 출력 재시도) /// /// private string CancelBillPrintStatus() { try { string[] sql = new string[] { "UPDATE POSMST..MST_KPS_ORD_MSG SET SEND_YN = '0' WHERE SEND_YN = '8' " , "UPDATE POSMST..MST_KTCH_ORD_MSG_ADD SET SEND_YN = '0' WHERE SEND_YN = '8' "}; // 주방주문서 영수증프린트 int ret = m_cSqlDbService.DBExecuteNonQuery(sql, true); return ret == UserCom.OK ? UserCom.RST_OK : UserCom.RST_ERR; } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "Exception." + ex.Message); return UserCom.RST_ERR; } } /// /// 출력상태 업데이트 /// /// /// /// private bool UpdatePrintStatus(bool isSuccess, Hashtable htKPSOrderSheetItem, Hashtable htKPSOrderMessageItem) { try { string fmt = string.Empty; List lstQuery = new List(); fmt = "UPDATE POSMST..MST_KPS_ORD_MSG \n" + " SET SEND_YN = '{7}' \n" + " , RESEND_YN = '{7}' \n" + " , ERROR_CD = '{8}' \n" + " WHERE TRAIN_MODE_YN = '{0}' \n" // Add, 2017.03.05, 연습모드 + " AND ORD_DIV = '{1}' \n" + " AND FLOOR_CD = '{2}' \n" + " AND TBL_NO = '{3}' \n" + " AND SUB_STOR_CD = '{4}' \n" + " AND KTCH_SYS_CD = '{5}' \n" + " AND SEQ = {6}"; for (var i = 0; i < htKPSOrderSheetItem.Count; i++) { Hashtable htKPSOrderSheetTemp = (Hashtable)htKPSOrderSheetItem[i]; for (var j = 0; j < htKPSOrderSheetTemp.Count; j++) { KPSItem cKPSItem = (KPSItem)htKPSOrderSheetTemp[j]; string sql = string.Format(fmt, cKPSItem.sTrainMode // Add, 2017.03.05, 연습모드 , cKPSItem.sOrderType , cKPSItem.sFloorCd , cKPSItem.sTableNo , cKPSItem.sSubShopCd , cKPSItem.sKtchSysCd , cKPSItem.nSeq , isSuccess ? "1" : cKPSItem.sSendYn , isSuccess ? cKPSItem.sResendYn : "1" , isSuccess ? "0000" : cKPSItem.sErrorCd); lstQuery.Add(sql); } } if (isSuccess) { fmt = "DELETE FROM POSMST..MST_KTCH_ORD_MSG_ADD \n" + " WHERE TRAIN_MODE_YN = '{0}' \n" // Add, 2017.03.05, 연습모드 + " AND ORD_DIV = '{1}' \n" + " AND FLOOR_CD = '{2}' \n" + " AND TBL_NO = '{3}' \n" + " AND SEQ = {4} "; for (var i = 0; i < htKPSOrderMessageItem.Count; i++) { Hashtable htKPSOrderMessageTemp = (Hashtable)htKPSOrderMessageItem[i]; for (var j = 0; j < htKPSOrderMessageTemp.Count; j++) { KPSOrderMessage cKPSOrderMessage = (KPSOrderMessage)htKPSOrderMessageTemp[j]; string sql = string.Format(fmt, cKPSOrderMessage.sTrainMode // Add, 2017.03.05, 연습모드 , cKPSOrderMessage.sOrderType , cKPSOrderMessage.sFloorCd , cKPSOrderMessage.sTableNo , cKPSOrderMessage.nSeq); lstQuery.Add(sql); } } } else { fmt = "UPDATE POSMST..MST_KTCH_ORD_MSG_ADD \n" + " SET RESEND_YN = '{5}' \n" + " WHERE TRAIN_MODE_YN = '{0}' \n" // Add, 2017.03.05, 연습모드 + " AND ORD_DIV = '{1}' \n" + " AND FLOOR_CD = '{2}' \n" + " AND TBL_NO = '{3}' \n" + " AND SEQ = {4} "; for (var i = 0; i < htKPSOrderMessageItem.Count; i++) { Hashtable htKPSOrderMessageItemTemp = (Hashtable)htKPSOrderMessageItem[i]; for (var j = 0; j < htKPSOrderMessageItemTemp.Count; j++) { KPSOrderMessage cKPSOrderMessage = (KPSOrderMessage)htKPSOrderMessageItemTemp[j]; string sql = string.Format(fmt, cKPSOrderMessage.sTrainMode // Add, 2017.03.05, 연습모드 , cKPSOrderMessage.sOrderType , cKPSOrderMessage.sFloorCd , cKPSOrderMessage.sTableNo , cKPSOrderMessage.nSeq , isSuccess ? cKPSOrderMessage.sResend : "1"); lstQuery.Add(sql); } } } if (lstQuery.Count == 0) return true; // 1:OK, -1:Connection 에러, -2:SQL 에러, -3:기타 에러 string[] aQuery = lstQuery.ToArray(); int ret = m_cSqlDbService.DBExecuteNonQuery(aQuery, true); return ret == UserCom.OK ? true : false; } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "Exception." + ex.Message); return false; } } private string GetCustInfo(string trainMdoe, string floorCd, string tableNo) { string retValue = string.Empty; try { retValue = MessageManager.GetLabelMessage(POS_MESSAGE.PRINT.MSG_0159); int totCnt = 0; int mCnt = 0; int fCnt = 0; DataTable dtData = null; string sql = "SELECT CUST_CNT, FILLER2 FROM POSMST..MST_TBL WITH(NOLOCK) \n" + " WHERE TRAIN_MODE_YN = '" + trainMdoe + "' \n" + " AND CMP_CD = '" + m_cPosStatus.Base.CmpCd + "' \n" + " AND STOR_CD = '" + m_cPosStatus.Base.StoreNo + "' \n" + " AND TRAIN_MODE_YN = '" + m_cPosStatus.Base.TrainingFlag + "' \n" // Add, 2017.03.05, 연습모드 + " AND FLOOR_CD = '" + floorCd + "' \n" + " AND TBL_NO = '" + tableNo + "' \n" ; if (m_cSqlDbService.DBSelect(sql, out dtData) == UserCom.OK) { var temp = string.Empty; temp = CmUtil.GetDataRowStr(dtData.Rows[0], "CUST_CNT"); if (string.IsNullOrWhiteSpace(temp) == false) { totCnt = CmUtil.IntParse(temp); } temp = CmUtil.GetDataRowStr(dtData.Rows[0], "FILLER2"); if (string.IsNullOrWhiteSpace(temp) == false) { totCnt = 0; var custList = temp.Split('|'); for (var i = 0; i < custList.Count(); i++) { int cnt = CmUtil.IntParse(custList[i]); totCnt += cnt; if (i < 6) mCnt += cnt; else fCnt += cnt; } } } if (totCnt > 0 && mCnt + fCnt == 0) { retValue = totCnt.ToString(); } else { retValue = string.Format(MessageManager.GetPrintMessage(POS_MESSAGE.PRINT.MSG_0159), totCnt, mCnt, fCnt); } } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message); } return retValue; } private string GetAddOrderString(string type) { string retValue = type; try { switch (m_cPosStatus.Base.Country + type) { case "ko-KRNEW": retValue = "신규"; break; case "ko-KRADD": retValue = "추가"; break; case "ko-KRDEL": retValue = "취소"; break; } } catch { } return retValue; } private string GetFloorAndTableName(string floorCd, string tableNo) { string retValue = string.Format("{0}-{1}", floorCd, tableNo); try { ITableUs tableService = (ITableUs)sManager.InitServiceInstance(ServiceLists.BSV_TABLE.DLL, ServiceLists.BSV_TABLE.TABLE_SERVICE); DataTable dt= null; if (tableService.SelectFloorAndTableName(floorCd.Trim(), tableNo.Trim(), out dt) == UserCom.RST_OK) { DataRow dr = dt.Rows[0]; string floorNm = CmUtil.GetDataRowStr(dr, "FLOOR_NM").Trim(); string tableNm = CmUtil.GetDataRowStr(dr, "TBL_NM").Trim(); if (string.IsNullOrWhiteSpace(floorNm)) floorNm = floorCd; if (string.IsNullOrWhiteSpace(tableNm)) tableNm = tableNo; retValue = string.Format("{0}-{1}", floorNm, tableNm); } } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "Exception." + ex.Message); } return retValue; } private string GetOrderMessageTitle(string msgId) { string retValue = string.Empty; try { switch (msgId) { //case PosConst.KPS_ORD_MSG_ID.TRADE_STOP: retValue = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0232); break; case PosConst.KPS_ORD_MSG_ID.ITEM_MEMO: retValue = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0233); break; case PosConst.KPS_ORD_MSG_ID.SEAT_MEMO: retValue = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0234); break; case PosConst.KPS_ORD_MSG_ID.TABLE_COMBINE: retValue = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0235); break; case PosConst.KPS_ORD_MSG_ID.TABLE_MOVE: retValue = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0236); break; case PosConst.KPS_ORD_MSG_ID.MENU_MOVE: retValue = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0124); break; case PosConst.KPS_ORD_MSG_ID.FIRE_KEY: retValue = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0628); break; } } catch { } return retValue; } private List GetParserMemo(string memo, string headChar = "") { List retValue = new List(); try { const int COL_LEN = 40; var tmp = memo; var lines = tmp.Trim().Split(new string[] { Environment.NewLine }, StringSplitOptions.None); for (var i = 0; i < lines.Length; i++) { var line = lines[i].Trim(); while (string.IsNullOrWhiteSpace(line) == false) { var msg = CmUtil.LeftH(line, COL_LEN).Trim(); if (string.IsNullOrWhiteSpace(msg) == false) retValue.Add(msg); var start = CmUtil.LenH(msg); var length = CmUtil.LenH(line) - CmUtil.LenH(msg); line = CmUtil.MidH(line, start, length); } } } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "Exception." + ex.Message); } return retValue; } } /// /// KPS_ORD_MSG ITEM /// /// /// KPS.Common 모듈에 중복 선언됨 /// internal class KPSItem { public string sTrainMode; // Add, 2017.03.05, 연습모드 public string sOrderType; public string sFloorCd; public string sTableNo; public string sSubShopCd; // Add, 2017.02.06 public string sKtchSysCd; public int nSeq; public string sOrderNo; public string sPosType; public string sItemCd; public string sItemNm; /// /// 상품구분(0:일반, 1:세트, 2:세트자식, 3:부가상품, 4:세트할인, 5:상품권(추가)) /// public string sItemDiv; public int nQty; public string sPackDiv; public string sSetMenuCd; public string sOrdTime; public string sCancelDiv; /// /// 0:정상 1:재전송 /// public string sResendYn; public string sKtchSysUseDiv; public int nKpsComPort; public int nKpsComBaudrate; public string sKpsOposName; public string sKpsIp; public string sKpsPort; /// /// 0:미전송 1:전송 /// public string sSendYn; /// /// 0000 : 정상 /// /// public string sErrorCd; //public string sKpsCdBackup1; //public string sKpsCdBackup2; //public string sKpsCdBackup3; //public string sKpsCdBackup4; //public string sKpsCdBackup5; //public string sKpsCdBackup6; /// /// 반복출력 횟수 /// public string sFiller1; /// /// 기타주문구분 /// 1:후불일반판매, 2:해피오더 /// public string sFiller2; /// /// 추가주문구분 (NEW,ADD,DEL) /// public string sFiller3; /// /// 부가메뉴구분 (SUBPRC_MENU_KEY_DIV) /// /// public string sFiller4; public string sFiller5; /// /// 수동출력일때 주방메모 /// public string sKtchMemo = string.Empty; /// /// 상품메모 /// public string sItemMemo = string.Empty; /// /// 주문담당자 /// public string sOrdPicNm = string.Empty; /// /// 주방장치명 /// public string sKtchSysNm = string.Empty; // Add, 2017.04.06 /// /// 마자막주문POS /// public string sOrdPosNo = string.Empty; // Add, 2017.04.10 // 2017.09.06 레시피 추가 /// /// 레시피 /// public string sRecipe = string.Empty; } /// /// KPS_ORD_MSG_ADD ITEM /// /// /// KPS.Common 모듈에 중복 선언됨 /// internal class KPSOrderMessage { public string sTrainMode; // Add, 2017.03.05, 연습모드 public string sOrderType; public string sFloorCd; public string sTableNo; public int nSeq; public string sSubShopCd; // Add, 2017.02.06 public string sKtchSysCd; public string sItemCd; public string sItemNm; public string sMsgId; public string sMsg1; public string sMsg2; public string sMsg3; public string sMsgRegTime; public string sKtchSysUseDiv; public int nKpsComPort; public int nKpsComBaudrate; public string sKpsOposName; public string sKpsIp; public string sKpsPort; public string sSendYn; public string sResend; public string sErrorCd; public int printCount = 1; //public string sKpsCdBackup1; //public string sKpsCdBackup2; //public string sKpsCdBackup3; //public string sKpsCdBackup4; //public string sKpsCdBackup5; //public string sKpsCdBackup6; public string sRegDate; /// /// 주방장치명 /// public string sKtchSysNm = string.Empty; // Add, 2017.04.06 /// /// 마지막주문POS /// public string sOrdPosNo = string.Empty; // Add, 2017.04.10 } }