public static bool UpdateTransactionMessageStatus(int transId, TransactionMessageStatus messageStatus)
        {
            String sql = string.Format("update [Transaction] set MessageStatus={0} where TransactionId={1}",
                                       (int)messageStatus, transId);

            DataFactory.ExecuteSql(sql);
            return(true);
        }
        public static TransactionMessageStatus GetTransactionMessageStatus(String buyerId, String sellerId, String itemId)
        {
            TransactionMessageStatus messageType = TransactionMessageStatus.Invalid;

            DataTable dtMsg = GetAllTransactionMessagesCompact(buyerId, sellerId, itemId);

            if (dtMsg.Rows.Count == 0)
            {
                messageType = TransactionMessageStatus.NoMessage;
                return(messageType);
            }

            bool buyerReplied = false;

            foreach (DataRow dr in dtMsg.Rows)
            {
                bool buyerSentMsg = false;

                String sender = dr["Sender"].ToString();
                if (sender == buyerId)
                {
                    buyerSentMsg = true;
                    buyerReplied = true;
                }

                bool isRead    = StringUtil.GetSafeBool(dr["IsRead"]);
                bool isReplied = StringUtil.GetSafeBool(dr["IsReplied"]);
                if (buyerSentMsg)
                {
                    if (!isReplied)
                    {
                        return(TransactionMessageStatus.BuyerRepliedSellerNotReplied);
                    }
                }
            }

            if (buyerReplied)
            {
                messageType = TransactionMessageStatus.BuyerRepliedSellerReplied;
            }
            else
            {
                messageType = TransactionMessageStatus.SellerInquired;
            }

            return(messageType);
        }
Exemple #3
0
        private void ToolStripMenuItemMarkAsReplied_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("你确认将该消息标记为已回复么?",
                                "确认标记?",
                                MessageBoxButtons.YesNo,
                                MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.No)
            {
                return;
            }

            DataGridViewSelectedRowCollection selectedRows = this.dataGridViewTransactionMessageSubject.SelectedRows;

            if (selectedRows.Count != 1)
            {
                return;
            }

            String ebayMessageId = selectedRows[0].Cells[MessageId_ColumnIndex].Value.ToString();

            if (null == ebayMessageId)
            {
                return;
            }

            EbayMessageType msg = EbayMessageDAL.GetOneMessage(ebayMessageId);

            if (msg == null)
            {
                return;
            }

            EbayMessageDAL.MarkMessageAsReplied(msg.EbayMessageId);

            TransactionMessageStatus messageStatus
                = EbayMessageDAL.GetTransactionMessageStatus(EbayTransaction.BuyerId, EbayTransaction.SellerName, EbayTransaction.ItemId);

            EbayTransactionDAL.UpdateTransactionMessageStatus(EbayTransaction.TransactionId, messageStatus);

            MessageBox.Show("标记消息为已回复成功。", "恭喜", MessageBoxButtons.OK, MessageBoxIcon.Information);

            LoadMsgData();

            MarkMsgAsReplied = true;
        }
Exemple #4
0
        private void dataGridViewPostSale_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            if (e.ListChangedType == ListChangedType.ItemChanged)
            {
                return;
            }

            for (int rowIdx = 0; rowIdx < this.dataGridViewPostSale.Rows.Count; rowIdx++)
            {
                DataGridViewCell orderLineItemIdCell = this.dataGridViewPostSale.Rows[rowIdx].Cells[PostSaleDgv_OrderLineItemIdIdx];
                if (orderLineItemIdCell.Value == null)
                {
                    continue;
                }

                String  orderLineItemId = orderLineItemIdCell.Value.ToString();
                DataRow dr = getPostSaleOrderLocally(orderLineItemId);
                if (dr == null)
                {
                    continue;
                }

                int    transId    = StringUtil.GetSafeInt(dr["TransactionId"]);
                String buyerId    = StringUtil.GetSafeString(dr["BuyerId"]);
                String sellerName = StringUtil.GetSafeString(dr["SellerName"]);
                String itemId     = StringUtil.GetSafeString(dr["ItemId"]);

                if (buyerId == "" || sellerName == "" || itemId == "")
                {
                    continue;
                }

                TransactionMessageStatus messageStatus = (TransactionMessageStatus)StringUtil.GetSafeInt(dr["MessageStatus"]);

                if (messageStatus == TransactionMessageStatus.BuyerRepliedSellerNotReplied)
                {
                    TransactionMessageStatus messageStatusComputed
                        = EbayMessageDAL.GetTransactionMessageStatus(buyerId, sellerName, itemId);

                    if (messageStatus != messageStatusComputed)
                    {
                        EbayTransactionDAL.UpdateTransactionMessageStatus(transId, messageStatusComputed);
                        messageStatus = messageStatusComputed;
                    }
                }

                Color rowBkColor = Color.White;
                if (messageStatus == TransactionMessageStatus.SellerInquired)
                {
                    rowBkColor = ColorTranslator.FromHtml("#90EE90");
                }
                else if (messageStatus == TransactionMessageStatus.BuyerRepliedSellerNotReplied)
                {
                    rowBkColor = ColorTranslator.FromHtml("#FFFF00");
                }
                else if (messageStatus == TransactionMessageStatus.BuyerRepliedSellerReplied)
                {
                    rowBkColor = ColorTranslator.FromHtml("#DAA520");
                }

                if (!StringUtil.GetSafeBool(dr["IsPaid"]))
                {
                    rowBkColor = ColorTranslator.FromHtml("#808080");
                }

                this.dataGridViewPostSale.Rows[rowIdx].DefaultCellStyle.BackColor = rowBkColor;
            }
        }
        public static bool UpdateTransactionMessageStatus(int transId, TransactionMessageStatus messageStatus)
        {
            String sql = string.Format("update [Transaction] set MessageStatus={0} where TransactionId={1}",
                (int)messageStatus, transId);

            DataFactory.ExecuteSql(sql);
            return true;
        }
Exemple #6
0
        }   // GetOrdersAsync

        // Get messages from ebay async.
        //  Returns number of new messages retrieved.
        private int GetMessagesAsync(DateTime startDate, DateTime endDate, out bool canceled)
        {
            canceled = false;
            int messagesFetched = 0;

            List <AccountType> allAccounts = AccountUtil.GetAllAccounts();

            foreach (AccountType account in allAccounts)
            {
                StringCollection messageIds    = EbayMessageBiz.GetAllMessageIds(account, startDate, endDate);
                StringCollection newMessageIds = new StringCollection();
                foreach (String messageId in messageIds)
                {
                    EbayMessageType messageType = EbayMessageDAL.GetOneMessage(messageId);
                    if (messageType == null)
                    {
                        newMessageIds.Add(messageId);
                    }
                }

                int messageNumRetrievePerTime = 1;

                int  apiCallTimes  = newMessageIds.Count / messageNumRetrievePerTime;
                bool needExtraCall = (newMessageIds.Count % messageNumRetrievePerTime) != 0;
                if (needExtraCall)
                {
                    apiCallTimes += 1;
                }

                List <EbayMessageType> allTrans = new List <EbayMessageType>();

                for (int ii = 0; ii < apiCallTimes; ++ii)
                {
                    StringCollection messageIdsLoc = new StringCollection();
                    for (int jj = ii * messageNumRetrievePerTime; jj < ii * messageNumRetrievePerTime + messageNumRetrievePerTime; ++jj)
                    {
                        if (jj > newMessageIds.Count - 1)
                        {
                            break;
                        }
                        messageIdsLoc.Add(newMessageIds[jj]);
                    }

                    TimeFilter timeFilter = new TimeFilter();
                    timeFilter.TimeFrom = startDate;
                    timeFilter.TimeTo   = endDate;

                    // Update the description and progress on the modal form
                    // using Control.Invoke.  Invoke will run the anonymous
                    // function to set the label's text on the UI thread.
                    // Since it's illegal to touch the UI control on the worker
                    // thread that we're on right now.

                    int retrievedCount = (ii + 1) * messageNumRetrievePerTime;
                    if (retrievedCount > newMessageIds.Count)
                    {
                        retrievedCount = newMessageIds.Count;
                    }

                    List <EbayMessageType> messageList = EbayMessageBiz.GetAllMessageByIds(account, messageIdsLoc);

                    foreach (EbayMessageType messageType in messageList)
                    {
                        // We are pretty sure the message didn't exist.
                        EbayMessageDAL.InsertOneMessage(messageType);

                        // Update the transaction message status.
                        String recipientUserId = messageType.RecipientUserId;
                        String sender          = messageType.Sender;
                        String sellerName      = messageType.SellerName;
                        String buyerId         = sellerName == sender ? recipientUserId : sender;

                        TransactionMessageStatus messageStatus = EbayMessageDAL.GetTransactionMessageStatus(buyerId, sellerName, messageType.ItemID);

                        List <EbayTransactionType> transList = EbayTransactionDAL.GetTransactionsBySellerBuyerItem(sellerName, buyerId, messageType.ItemID);
                        foreach (EbayTransactionType trans in transList)
                        {
                            EbayTransactionDAL.UpdateTransactionMessageStatus(trans.TransactionId, messageStatus);
                        }
                    }

                    String labelHintStr = string.Format("正在从Ebay获取消息信息, 账号 {0}, 共{1}个新消息, 已获得{2}个消息",
                                                        account.ebayAccount,
                                                        newMessageIds.Count,
                                                        retrievedCount);
                    int progressBarValue = (int)((double)(ii + 1) / apiCallTimes * 100);
                    frmProgress.SetLabelHintAndProgressBarValue(labelHintStr, progressBarValue);

                    // Periodically check for a Cancellation
                    // If the user clicks the cancel button, or tries to close
                    // the progress form the m_fmProgress.Cancel flag will be set to true.
                    if (frmProgress.Cancel)
                    {
                        canceled = true;
                        return(messagesFetched);
                    }
                }   // for (int ii = 0; ii < apiCallTimes; ++ii)

                messagesFetched += newMessageIds.Count;
            }   // foreach (AccountType account in AllAccounts)

            canceled = false;
            return(messagesFetched);
        }   // GetMessagesAsync
Exemple #7
0
        private void SendMessageAsync(object sender, DoWorkEventArgs e)
        {
            object[]  paramArr      = e.Argument as object[];
            DataTable dtOrders      = (DataTable)paramArr[0];
            String    messageToSend = (String)paramArr[1];

            int curIdx = 0;

            foreach (DataRow row in dtOrders.Rows)
            {
                curIdx++;

                String sellerName      = StringUtil.GetSafeString(row["SellerName"]);
                String buyerId         = StringUtil.GetSafeString(row["BuyerId"]);
                String itemId          = StringUtil.GetSafeString(row["ItemId"]);
                String orderLineItemId = StringUtil.GetSafeString(row["OrderLineItemId"]);

                EbayTransactionType transLoc = EbayTransactionDAL.GetOneTransaction(orderLineItemId);
                if (transLoc == null)
                {
                    continue;
                }

                String subject = String.Format("{0} sent a message on item {1} with itemId {2}",
                                               sellerName,
                                               buyerId,
                                               itemId);

                AccountType account = AccountUtil.GetAccount(sellerName);
                if (account == null)
                {
                    continue;
                }

                String labelHintStr = String.Format("正在向买家 {0} 发送消息.... 进度 {1} / {2}",
                                                    buyerId, curIdx, dtOrders.Rows.Count);
                int progressBarValue = (int)((double)(curIdx) / dtOrders.Rows.Count * 100);
                frmProgress.SetLabelHintAndProgressBarValue(labelHintStr, progressBarValue);

                if (frmProgress.Cancel)
                {
                    e.Cancel = true;
                    e.Result = curIdx;
                    return;
                }

                messageToSend = replaceMessageMacros(messageToSend, transLoc);

                bool result = EbayMessageBiz.SendMessageToBuyer(account,
                                                                buyerId,
                                                                itemId,
                                                                subject,
                                                                messageToSend,
                                                                true /*emailCopyToSender*/,
                                                                eBay.Service.Core.Soap.QuestionTypeCodeType.General);

                if (result)
                {
                    DateTime startTime = DateTime.Now;
                    DateTime endTime   = startTime;
                    startTime = startTime.Subtract(new TimeSpan(0, 5, 0));

                    startTime = startTime.ToUniversalTime();
                    endTime   = endTime.ToUniversalTime();

                    // Get all message ids within this five minutes.
                    StringCollection msgIds = EbayMessageBiz.GetAllMessageIds(account, startTime, endTime);

                    // Skip the messages we have retrieved.
                    StringCollection newMsgIds = new StringCollection();
                    {
                        foreach (String msgId in msgIds)
                        {
                            EbayMessageType existedMessage = EbayMessageDAL.GetOneMessage(msgId);
                            if (existedMessage != null)
                            {
                                continue;
                            }

                            newMsgIds.Add(msgId);
                        }
                    }

                    List <EbayMessageType> newMessages = EbayMessageBiz.GetAllMessageByIds(account, newMsgIds);

                    Logger.WriteSystemLog(String.Format("Retrieved new messages count={0}", newMsgIds.Count));

                    foreach (EbayMessageType messageType in newMessages)
                    {
                        // We are pretty sure the message didn't exist.
                        EbayMessageDAL.InsertOneMessage(messageType);

                        // Update the transaction message status.
                        String recipientUserId = messageType.RecipientUserId;
                        String senderName      = messageType.Sender;
                        String sellerNameLoc   = messageType.SellerName;
                        String buyerIdLoc      = sellerNameLoc == senderName ? recipientUserId : senderName;

                        // [ZHI_TODO]
                        TransactionMessageStatus messageStatus = EbayMessageDAL.GetTransactionMessageStatus(buyerIdLoc, sellerNameLoc, messageType.ItemID);

                        List <EbayTransactionType> transList = EbayTransactionDAL.GetTransactionsBySellerBuyerItem(sellerNameLoc, buyerIdLoc, messageType.ItemID);
                        foreach (EbayTransactionType trans in transList)
                        {
                            EbayTransactionDAL.UpdateTransactionMessageStatus(trans.TransactionId, messageStatus);
                        }
                    }
                }
                else
                {
                    Logger.WriteSystemUserLog("发送消息失败!");
                }
            }
            e.Result = OrdersDataTable.Rows.Count;
        } // SendMessageAsync