Пример #1
0
        // 代购票查询
        private void QueryTickets()
        {
            DataTable dt = new SLS.Dal.Views.V_SchemesSendToCenter().Open(ConnectionString, "distinct SchemeID", "(((Sends > 0) AND (Sends < 100)) or (sends = 3301) or (sends = 2148)) AND (HandleResult = 0) AND (IsOpened = 0) and LotteryID <> 29  and PrintOutType = 301", "");

            if (dt == null){
                log.Write("查询代购票出错(QueryTickets):读取未成功票错误。");
                return;
            }
            if (dt.Rows.Count < 1){
                return;
            }
            string lastOrder = null;
            string ReceiveString = null;
            string ErrorCode = null;
            DataTable dtSchemesSendToCenter = null;
            SLS.Dal.Tables.T_SchemesSendToCenter t_SchemesSendToCenter = new SLS.Dal.Tables.T_SchemesSendToCenter();
            // process all schemes that is sent to provider
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                dtSchemesSendToCenter = new SLS.Dal.Tables.T_SchemesSendToCenter().Open(ConnectionString, "top 1 *", "schemeid=" + dt.Rows[i]["SchemeID"].ToString() + " and (Sends > 0) AND (Sends < 100)", "");
                if (dtSchemesSendToCenter == null){
                    continue;
                }
                if (dtSchemesSendToCenter.Rows.Count < 1){
                    continue;
                }
                string orderNumber = dtSchemesSendToCenter.Rows[0]["Identifiers"].ToString();
                if (orderNumber == null || orderNumber == ""){
                    continue;
                }
                if (orderNumber != lastOrder)
                {
                    try{
                        ErrorCode = eTicketProvider.CheckOrderStatus(orderNumber, out ReceiveString);
                    }
                    catch{
                        continue;
                    }
                    lastOrder = orderNumber;
                }
                if (ErrorCode == null)
                    continue;
                if ("100 101 102 103 104 105 106 107 108 111 301 302 303 304 305 306 350 360 400 401".Split(' ').Contains(ErrorCode))
                {
                    t_SchemesSendToCenter.Sends.Value = ErrorCode + 100;
                    t_SchemesSendToCenter.Update(ConnectionString, "SchemeID = " + dt.Rows[i]["SchemeID"].ToString());
                    continue;
                }
                if (ErrorCode == "112" || ErrorCode == "402"){
                    log.Write("IP / AgentID cannot be used, Code: " + ErrorCode);
                    return;
                }
                if (ErrorCode != "0")
                    continue;
                XmlDocument XmlDoc = new XmlDocument();
                XmlNodeList orderNodes = null;
                XmlNodeList ticketNodes = null;
                string orderStatus = null;
                try
                {
                    XmlDoc.Load(new StringReader(ReceiveString));
                    orderNodes = XmlDoc.GetElementsByTagName("order");
                    orderStatus = orderNodes[0].Attributes["status"].Value;
                    ticketNodes = XmlDoc.GetElementsByTagName("ticket");
                }
                catch { continue; }

                if (ticketNodes == null || ticketNodes.Count == 0){
                    continue;
                }
                if (orderStatus == "0"){
                    continue;
                }
                // Order is successful process all tickets at once
                if (orderStatus == "1")
                {   
                    int ReturnValue = 0;
                    string ReturnDescription = "";
                    int Result = SLS.Dal.Procedures.P_SchemesSendToCenterHandleUniteAnte(ConnectionString, Shove._Convert.StrToLong(dt.Rows[i]["SchemeID"].ToString(), -1), DateTime.Now, true, ref ReturnValue, ref ReturnDescription);
                    if ((Result < 0) || (ReturnValue < 0))
                    {
                        log.Write("对所查询到的电子票数据第一次处理出错(QueryTickets):数据读写错误。Scheme:" + dt.Rows[i]["SchemeID"].ToString() + "," + ReturnDescription);
                        System.Threading.Thread.Sleep(1000);
                        Result = SLS.Dal.Procedures.P_SchemesSendToCenterHandleUniteAnte(ConnectionString, Shove._Convert.StrToLong(dt.Rows[i]["SchemeID"].ToString(), -1), DateTime.Now, true, ref ReturnValue, ref ReturnDescription);
                        if ((Result < 0) || (ReturnValue < 0)){
                            log.Write("对所查询到的电子票数据第二次处理出错(QueryTickets):数据读写错误。票号:" + dt.Rows[i]["SchemeID"].ToString() + "," + ReturnDescription);
                        }
                    }
                    continue;
                }
                // order failed
                if (orderStatus == "3")
                {
                    t_SchemesSendToCenter.Sends.Value = 999;
                    t_SchemesSendToCenter.Update(ConnectionString, "SchemeID = " + dt.Rows[i]["SchemeID"].ToString());
                    continue;
                }
                // not done
                // parts of order failed, process individual tickets returned
                if (orderStatus == "2")
                {
                    string ticketFailed = string.Empty;
                    for (int k = 0; k < ticketNodes.Count; k++)
                    {
                        try
                        {
                            string ticketStatus = ticketNodes[k].Attributes["status"].Value;
                            string ticketSeq = ticketNodes[k].Attributes["seq"].Value;
                            if (ticketStatus.ToLower() == "N")
                            {
                                ticketFailed += ticketSeq + ",";
                            }
                        }
                        catch
                        {
                            continue;
                        }
                    }
                    ticketFailed = "(" + ticketFailed.Trim().Trim(',') + ")";
                    if (MSSQL.ExecuteNonQuery(ConnectionString, "update T_SchemesSendToCenter set Sends = 1000 where (SchemeID = " + dt.Rows[i]["SchemeID"].ToString() + ") AND ((ID % 100000) in " + ticketFailed + ") ") < 0)
                    {
                        log.Write("更新票Partially Failed(SendTickets)。方案ID:" + dt.Rows[i]["SchemeID"].ToString());
                    }
                }
            }
        }
Пример #2
0
        // 代购票查询
        private void QueryTickets()
        {
            DataTable dt = new SLS.Dal.Views.V_SchemesSendToCenter().Open(ConnectionString, "distinct SchemeID", "(((Sends > 0) AND (Sends < 100)) or (sends = 3301) or (sends = 2148)) AND (HandleResult = 0) AND (IsOpened = 0) and LotteryID <> 29  and PrintOutType = 301", "");

            if (dt == null)
            {
                log.Write("查询代购票出错(QueryTickets):读取未成功票错误。");
                return;
            }
            if (dt.Rows.Count < 1)
            {
                return;
            }
            string    lastOrder             = null;
            string    ReceiveString         = null;
            string    ErrorCode             = null;
            DataTable dtSchemesSendToCenter = null;

            SLS.Dal.Tables.T_SchemesSendToCenter t_SchemesSendToCenter = new SLS.Dal.Tables.T_SchemesSendToCenter();
            // process all schemes that is sent to provider
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                dtSchemesSendToCenter = new SLS.Dal.Tables.T_SchemesSendToCenter().Open(ConnectionString, "top 1 *", "schemeid=" + dt.Rows[i]["SchemeID"].ToString() + " and (Sends > 0) AND (Sends < 100)", "");
                if (dtSchemesSendToCenter == null)
                {
                    continue;
                }
                if (dtSchemesSendToCenter.Rows.Count < 1)
                {
                    continue;
                }
                string orderNumber = dtSchemesSendToCenter.Rows[0]["Identifiers"].ToString();
                if (orderNumber == null || orderNumber == "")
                {
                    continue;
                }
                if (orderNumber != lastOrder)
                {
                    try{
                        ErrorCode = eTicketProvider.CheckOrderStatus(orderNumber, out ReceiveString);
                    }
                    catch {
                        continue;
                    }
                    lastOrder = orderNumber;
                }
                if (ErrorCode == null)
                {
                    continue;
                }
                if ("100 101 102 103 104 105 106 107 108 111 301 302 303 304 305 306 350 360 400 401".Split(' ').Contains(ErrorCode))
                {
                    t_SchemesSendToCenter.Sends.Value = ErrorCode + 100;
                    t_SchemesSendToCenter.Update(ConnectionString, "SchemeID = " + dt.Rows[i]["SchemeID"].ToString());
                    continue;
                }
                if (ErrorCode == "112" || ErrorCode == "402")
                {
                    log.Write("IP / AgentID cannot be used, Code: " + ErrorCode);
                    return;
                }
                if (ErrorCode != "0")
                {
                    continue;
                }
                XmlDocument XmlDoc      = new XmlDocument();
                XmlNodeList orderNodes  = null;
                XmlNodeList ticketNodes = null;
                string      orderStatus = null;
                try
                {
                    XmlDoc.Load(new StringReader(ReceiveString));
                    orderNodes  = XmlDoc.GetElementsByTagName("order");
                    orderStatus = orderNodes[0].Attributes["status"].Value;
                    ticketNodes = XmlDoc.GetElementsByTagName("ticket");
                }
                catch { continue; }

                if (ticketNodes == null || ticketNodes.Count == 0)
                {
                    continue;
                }
                if (orderStatus == "0")
                {
                    continue;
                }
                // Order is successful process all tickets at once
                if (orderStatus == "1")
                {
                    int    ReturnValue       = 0;
                    string ReturnDescription = "";
                    int    Result            = SLS.Dal.Procedures.P_SchemesSendToCenterHandleUniteAnte(ConnectionString, Shove._Convert.StrToLong(dt.Rows[i]["SchemeID"].ToString(), -1), DateTime.Now, true, ref ReturnValue, ref ReturnDescription);
                    if ((Result < 0) || (ReturnValue < 0))
                    {
                        log.Write("对所查询到的电子票数据第一次处理出错(QueryTickets):数据读写错误。Scheme:" + dt.Rows[i]["SchemeID"].ToString() + "," + ReturnDescription);
                        System.Threading.Thread.Sleep(1000);
                        Result = SLS.Dal.Procedures.P_SchemesSendToCenterHandleUniteAnte(ConnectionString, Shove._Convert.StrToLong(dt.Rows[i]["SchemeID"].ToString(), -1), DateTime.Now, true, ref ReturnValue, ref ReturnDescription);
                        if ((Result < 0) || (ReturnValue < 0))
                        {
                            log.Write("对所查询到的电子票数据第二次处理出错(QueryTickets):数据读写错误。票号:" + dt.Rows[i]["SchemeID"].ToString() + "," + ReturnDescription);
                        }
                    }
                    continue;
                }
                // order failed
                if (orderStatus == "3")
                {
                    t_SchemesSendToCenter.Sends.Value = 999;
                    t_SchemesSendToCenter.Update(ConnectionString, "SchemeID = " + dt.Rows[i]["SchemeID"].ToString());
                    continue;
                }
                // not done
                // parts of order failed, process individual tickets returned
                if (orderStatus == "2")
                {
                    string ticketFailed = string.Empty;
                    for (int k = 0; k < ticketNodes.Count; k++)
                    {
                        try
                        {
                            string ticketStatus = ticketNodes[k].Attributes["status"].Value;
                            string ticketSeq    = ticketNodes[k].Attributes["seq"].Value;
                            if (ticketStatus.ToLower() == "N")
                            {
                                ticketFailed += ticketSeq + ",";
                            }
                        }
                        catch
                        {
                            continue;
                        }
                    }
                    ticketFailed = "(" + ticketFailed.Trim().Trim(',') + ")";
                    if (MSSQL.ExecuteNonQuery(ConnectionString, "update T_SchemesSendToCenter set Sends = 1000 where (SchemeID = " + dt.Rows[i]["SchemeID"].ToString() + ") AND ((ID % 100000) in " + ticketFailed + ") ") < 0)
                    {
                        log.Write("更新票Partially Failed(SendTickets)。方案ID:" + dt.Rows[i]["SchemeID"].ToString());
                    }
                }
            }
        }