/// <summary> /// Распределение работы по обработчикам /// </summary> public void NewMessage() { TL4MsgInfo l4MsgInfo = new TL4MsgInfo(); OracleDynamicParameters odp = new OracleDynamicParameters(); bool isOpCodeOk; string acceptOrderConsts = ""; string sqlstr = "SELECT CHAR_VALUE " + "FROM AUX_CONSTANT " + "WHERE CONSTANT_ID='ACCEPT_ORDER_IN_SRV'"; try { using (OracleConnection connection = GetDBConnection()) { acceptOrderConsts = connection.ExecuteScalar <string>(sqlstr, null); } if (acceptOrderConsts == "") { acceptOrderConsts = "N"; } List <L4L3Event> events = new List <L4L3Event>(); sqlstr = "SELECT le.* FROM L4_L3_EVENT le WHERE MSG_STATUS = 1 AND msg_id IN (4301,4303, 4304, 4305) AND le.MSG_DATETIME > SYSDATE - 7 ORDER BY MSG_COUNTER"; using (OracleConnection connection = GetConnection()) { events = connection.Query <L4L3Event>(sqlstr, null).AsList(); } if (events == null) { logger.Error("SQL запрос из таблицы L4_L3_EVENT выполнен с ошибков в ServiceWorker.GetNewMessage."); throw new Exception(); } foreach (L4L3Event evnt in events) { l4MsgInfo.msgCounter = evnt.msgCounter; l4MsgInfo.msgId = evnt.msgId; l4MsgInfo.msgDatetime = evnt.msgDatetime; l4MsgInfo.opCode = evnt.opCode; l4MsgInfo.keyString1 = evnt.keyString1; l4MsgInfo.keyString2 = evnt.keyString2; l4MsgInfo.keyNumber1 = evnt.keyNumber1; l4MsgInfo.keyNumber2 = evnt.keyNumber2; l4MsgInfo.msgReport = new TMessageResult(); l4MsgInfo.msgReport.status = 1; l4MsgInfo.msgReport.remark = ""; logger.Info($"STARTED Event -> Table: L4_L3_EVENT, MsgCounter:{l4MsgInfo.msgCounter}"); using (OracleConnection conn = GetConnection()) { conn.Open(); using (var transaction = conn.BeginTransaction()) { try { switch (l4MsgInfo.opCode) { case L4L3InterfaceServiceConst.OP_CODE_NEW: isOpCodeOk = true; break; case L4L3InterfaceServiceConst.OP_CODE_DEL: isOpCodeOk = true; break; case L4L3InterfaceServiceConst.OP_CODE_UPD: isOpCodeOk = true; break; case L4L3InterfaceServiceConst.OP_CODE_INUP: isOpCodeOk = true; break; default: isOpCodeOk = false; l4MsgInfo = check.SetMsgResult(l4MsgInfo, L4L3InterfaceServiceConst.MSG_STATUS_ERROR, $"OP_CODE: {l4MsgInfo.opCode} is not valid"); UpdateMsgStatus(l4MsgInfo, transaction); break; } if (isOpCodeOk) { switch (l4MsgInfo.msgId) { //Запуск задачи SALES_ORDER case L4L3InterfaceServiceConst.L4_L3_SALES_ORDER: if (IsBlocked(evnt.msgCounter)) { //somtask=Task.Run(() => som.SalesOrderMng(l4MsgInfo)); //somtask.Start(); //somtask.Wait(); cheker = som.SalesOrderMng(l4MsgInfo); } break; //Запуск задачи CUSTOMER_CATALOG case L4L3InterfaceServiceConst.L4_L3_CUSTOMER_CATALOG: //ccmtask = Task.Run(() => ccm.CustomerMng(l4MsgInfo)); //ccmtask.Start(); //ccmtask.Wait(); cheker = ccm.CustomerMng(l4MsgInfo); break; //Запуск задачи SHIPPING case L4L3InterfaceServiceConst.L4_L3_SHIPPING: //shiptask = Task.Run(() => sship.ShippingMng(l4MsgInfo)); //shiptask.Start(); //shiptask.Wait(); cheker = sship.ShippingMng(l4MsgInfo); break; //Запуск задачи MATERIAL case L4L3InterfaceServiceConst.L4_L3_RAW_MATERIAL: //mattask = Task.Run(() => mat.L4L3MaterialMovement(l4MsgInfo)); //mattask.Start(); //mattask.Wait(); cheker = mat.L4L3MaterialMovement(l4MsgInfo); break; } if (l4MsgInfo.msgReport.status == L4L3InterfaceServiceConst.MSG_STATUS_INSERT) { UpdateMsgStatus(l4MsgInfo, transaction); } if (cheker.isOK) { l4MsgInfo.msgReport.status = L4L3InterfaceServiceConst.MSG_STATUS_SUCCESS; l4MsgInfo.msgReport.remark = cheker.data; } else { l4MsgInfo.msgReport.status = L4L3InterfaceServiceConst.MSG_STATUS_ERROR; l4MsgInfo.msgReport.remark = cheker.data; } UpdateMsgStatus(l4MsgInfo, transaction); } logger.Info($"STOPPED Event -> Table: L4_L3_EVENT, MsgCounter:{l4MsgInfo.msgCounter}"); transaction.Commit(); } catch (Exception e) { transaction.Rollback(); if (IsBlocked(l4MsgInfo.msgCounter)) { BlockForProcess(l4MsgInfo, false); } using (OracleConnection conn1 = GetConnection()) { using (var transaction1 = conn.BeginTransaction()) { try { l4MsgInfo = check.SetMsgResult(l4MsgInfo, L4L3InterfaceServiceConst.MSG_STATUS_ERROR, e.Message.Substring(0, 4000)); logger.Info($"STOPPED Event -> Table: L4_L3_EVENT, MsgCounter:{l4MsgInfo.msgCounter} with error"); UpdateMsgStatus(l4MsgInfo, transaction1); transaction1.Commit(); } catch { transaction1.Rollback(); if (IsBlocked(l4MsgInfo.msgCounter)) { BlockForProcess(l4MsgInfo, false); } } } } } } } } } catch { logger.Error("Ошибка выполнения обработчика событий"); } }