Esempio n. 1
0
        /// <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("Ошибка выполнения обработчика событий");
            }
        }