Beispiel #1
0
        /// <summary>
        /// Обработчик заказа
        /// </summary>
        /// <param name="l4MsgInfo">Модель таблицы L4L3Event для обработки кода</param>
        /// <returns>Результат обработки</returns>
        public TCheckResult SalesOrderMng(TL4MsgInfo l4MsgInfo)
        {
            TCheckResult checkResult = new TCheckResult();

            checkResult.isOK = false;
            tSo = new TSoHeaderRepo();
            L4L3SoHeaderRepo header   = new L4L3SoHeaderRepo();
            L4L3SoHeader     soHeader = header.GetData(l4MsgInfo);

            BlockForProcess(l4MsgInfo, true);
            string charval;
            string sqlstr = "SELECT CHAR_VALUE FROM AUX_CONSTANT WHERE CONSTANT_ID='ONE_TO_SEVERAL_ORDER_FROM_SAP'";

            using (OracleConnection connection = BaseRepo.GetDBConnection())
            {
                charval = connection.QueryFirstOrDefault <string>(sqlstr, null);
            }
            if (charval != null)
            {
                onetoSeveralirderFromSap = charval;
            }
            else
            {
                onetoSeveralirderFromSap = "N";
            }
            if (onetoSeveralirderFromSap == "Y")
            {
                List <l4sol> l4s = new List <l4sol>();
                sqlstr = "SELECT L4SOL.SO_LINE_ID, L4SOL.SO_LINE_ID/10 as MET_SO_LINE_ID " +
                         "FROM   L4_L3_SO_LINE L4SOL WHERE  L4SOL.MSG_COUNTER = :MSG_COUNTER";
                if (m_strSo_Lines_For_Where != "")
                {
                    sqlstr += $"AND L4SOL.SO_LINE_ID IN {m_strSo_Lines_For_Where}";
                }
                sqlstr += "ORDER BY L4SOL.SO_LINE_ID";
                OracleDynamicParameters odp = new OracleDynamicParameters();
                odp.Add("MSG_COUNTER", l4MsgInfo.msgCounter);
                using (OracleConnection connection = BaseRepo.GetDBConnection())
                {
                    l4s = connection.Query <l4sol>(sqlstr, null).AsList();
                }
                if (l4s != null)
                {
                    foreach (l4sol kSol in l4s)
                    {
                        if (!OrderCanBeProcess(soHeader.soID, l4MsgInfo.opCode, ""))
                        {
                            l4MsgInfo.msgReport.status = L4L3InterfaceServiceConst.MSG_STATUS_ERROR;
                            l4MsgInfo.msgReport.remark = "";
                        }
                        else if (!OrderCanBeProcess($"{soHeader.soID}_{kSol.metSoLineId}", l4MsgInfo.opCode, ""))
                        {
                            l4MsgInfo.msgReport.status = L4L3InterfaceServiceConst.MSG_STATUS_ERROR;
                            l4MsgInfo.msgReport.remark = "";
                        }
                        else
                        {
                            m_strSO_Line_Id_Params     = kSol.soLineId;
                            m_strSO_Line_Id_MET        = kSol.metSoLineId;
                            tSo.m_strSO_Line_Id_MET    = kSol.metSoLineId;
                            tSo.m_strSO_Line_Id_Params = kSol.soLineId;
                            l4MsgInfo.msgReport.status = L4L3InterfaceServiceConst.MSG_STATUS_SUCCESS;
                            l4MsgInfo.msgReport.remark = "";

                            l4MsgInfo = CheckUpdateOPCODE(l4MsgInfo);
                            switch (l4MsgInfo.opCode)
                            {
                            case L4L3InterfaceServiceConst.OP_CODE_NEW:
                                CreateNewOrder(soHeader, l4MsgInfo);
                                break;

                            case L4L3InterfaceServiceConst.OP_CODE_DEL:
                                UpdateOrder(soHeader, l4MsgInfo, true);
                                break;

                            case L4L3InterfaceServiceConst.OP_CODE_UPD:
                                UpdateOrder(soHeader, l4MsgInfo);
                                break;

                            default:
                                l4MsgInfo.msgReport.status = L4L3InterfaceServiceConst.MSG_STATUS_ERROR;
                                l4MsgInfo.msgReport.remark = $"{l4MsgInfo.opCode} неверный код операции";
                                break;
                            }
                        }
                    }
                }
                checkResult.isOK = true;
                return(checkResult);
            }
            else
            {
                if (!OrderCanBeProcess(soHeader.soID, l4MsgInfo.opCode, ""))
                {
                    l4MsgInfo.msgReport.status = L4L3InterfaceServiceConst.MSG_STATUS_ERROR;
                    l4MsgInfo.msgReport.remark = "Заказ уже принимался по схеме с разбиением на несколько заказов.";
                    return(checkResult);
                }
                CheckUpdateOPCODE(l4MsgInfo);
                switch (l4MsgInfo.opCode)
                {
                case L4L3InterfaceServiceConst.OP_CODE_NEW:
                    CreateNewOrder(soHeader, l4MsgInfo);
                    break;

                case L4L3InterfaceServiceConst.OP_CODE_DEL:
                    UpdateOrder(soHeader, l4MsgInfo, true);
                    break;

                case L4L3InterfaceServiceConst.OP_CODE_UPD:
                    UpdateOrder(soHeader, l4MsgInfo);
                    break;

                default:
                    l4MsgInfo.msgReport.status = L4L3InterfaceServiceConst.MSG_STATUS_ERROR;
                    l4MsgInfo.msgReport.remark = $"{l4MsgInfo.opCode} неверный код операции";
                    break;
                }
                BlockForProcess(l4MsgInfo, false);
                checkResult.isOK = true;
                return(checkResult);
            }
        }