Example #1
0
        private void BaseButton_OK_Click(object sender, EventArgs e)
        {
            RechargeResult result = RechargeResult.Error;

            try
            {
                /* if (this.guideComboBox1.SelectedIndex == 0)
                 * {
                 *   GlobalMessageBox.Show("操作人不能为空");
                 *   return;
                 * }*/
                if (this.member == null)
                {
                    GlobalMessageBox.Show("充值会员不能为空!");
                    return;
                }
                //if (this.member.CardType != 1)
                //{
                //    GlobalMessageBox.Show("该会员不是充值卡会员!");
                //    return;
                //}
                //  int rechargeMoney = int.Parse(this.skinTextBox_RechargeMoney.SkinTxt.Text);
                int moneyCash     = Decimal.ToInt32(this.skinTextBox_MoneyCash.Value);
                int moneyBankCard = Decimal.ToInt32(this.skinTextBox_MoneyBankCard.Value);
                int moneyAlipay   = Decimal.ToInt32(this.skinTextBox_MoneyAlipay.Value);
                int moneyWeiXin   = Decimal.ToInt32(this.skinTextBox_MoneyWeiXin.Value);
                int rechargeMoney = moneyCash + moneyBankCard + moneyAlipay + moneyWeiXin;
                if (rechargeMoney <= 0)
                {
                    GlobalMessageBox.Show("充值金额应为正整数,充值失败");
                    return;
                }

                if (CommonGlobalUtil.EngineUnconnectioned(this))
                {
                    return;
                }

                int     donateMoney = int.Parse(this.skinLabel_GiveMoney.Text);
                decimal balanceNew  = this.member.Balance + donateMoney + rechargeMoney;
                result = CommonGlobalCache.ServerProxy.Recharge(new RechargeRecord()
                {
                    ID            = IDHelper.GetID(OrderPrefix.RechargeRecordOrder, shop.AutoCode),
                    BalanceOld    = this.member.Balance,
                    BalanceNew    = balanceNew,
                    DonateMoney   = donateMoney,
                    MemberID      = this.member.PhoneNumber,
                    GuideID       = this.guideID,
                    MoneyAlipay   = moneyAlipay,
                    MoneyBankCard = moneyBankCard,
                    MoneyCash     = moneyCash,
                    MoneyWeiXin   = moneyWeiXin,
                    RechargeMoney = rechargeMoney,
                    CreateTime    = DateTime.Now,
                    Remarks       = this.skinTextBox_Remark.Text,
                    MemberName    = this.member.Name,
                    ShopID        = shop.ID
                }
                                                                );
                UnLockPage();
                switch (result)
                {
                case RechargeResult.Success:
                    RechargeDialogForm form = new RechargeDialogForm(member, rechargeMoney, donateMoney, balanceNew);
                    if (form.ShowDialog() == DialogResult.OK)
                    {
                    }
                    this.member = CommonGlobalCache.ServerProxy.GetOneMember(this.member.PhoneNumber);
                    this.SetMemberLabel();
                    this.CleanRechargeTextBox();
                    //20180616充值完成自动关闭!
                    //  if (isClose) {
                    //只给POS端收银充值用
                    TabPageClose(this.CurrentTabPage, this);
                    break;

                case RechargeResult.MemberIsNotExist:
                    GlobalMessageBox.Show("会员不存在!");
                    break;

                case RechargeResult.Error:
                    GlobalMessageBox.Show("内部错误!");
                    break;

                default:
                    break;
                }
            }
            catch (Exception ee)
            {
                WriteLog(ee);
            }
            finally
            {
                UnLockPage();
            }
        }
    public RechargeResult Recharge(String Request)
    {
        RechargeResult rechargeResult = new RechargeResult();

        int Result = 0;
        String ErrMsg = "";

        StringBuilder strLog = new StringBuilder();

        StringBuilder Response = new StringBuilder();
        Response.AppendFormat("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");

        #region 解析xml
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.LoadXml(Request);
        XmlNode versionNode = xmlDoc.SelectNodes("/root/callinfo/version")[0];
        String version = versionNode.Attributes["value"].Value;

        XmlNode SPIDNode = xmlDoc.SelectNodes("/root/callinfo/SPID")[0];
        String SPID = SPIDNode.Attributes["value"].Value;

        XmlNode CardTypeNode = xmlDoc.SelectNodes("/root/srchcond/conds/CardType")[0];
        String CardType = CardTypeNode.Attributes["value"].Value;

        XmlNode CustIDNode = xmlDoc.SelectNodes("/root/srchcond/conds/CustID")[0];
        String CustID = CustIDNode.Attributes["value"].Value;

        XmlNode BesttoneAccountNode = xmlDoc.SelectNodes("/root/srchcond/conds/BesttoneAccount")[0];
        String BesttoneAccount = CustIDNode.Attributes["value"].Value;

        XmlNode CardNoNode = xmlDoc.SelectNodes("/root/srchcond/conds/CardNo")[0];
        String CardNo = CardNoNode.Attributes["value"].Value;

        XmlNode CardPasswordNode = xmlDoc.SelectNodes("/root/srchcond/conds/CardPassword")[0];
        String CardPassword = CardPasswordNode.Attributes["value"].Value;

        #endregion

        #region 请求数据校验

        if (String.IsNullOrEmpty(CustID) && String.IsNullOrEmpty(BesttoneAccount))
        {
            //返回错误
            rechargeResult.ReturnCode = "-10";
            rechargeResult.Msg = "CUSTID 和BesttoneAccount 不能同时为空! ";
            return rechargeResult;
        }

        #endregion

        #region 权限校验
        #endregion

        long accountBalance = 0;        //账户余额
        long cardBalance = 0;           //卡余额
        //String accountType = BesttoneAccountHelper.ConvertAccountType(cardType);            //转换卡类型
        /*********************************************查询账户信息*****************************************************/
        BesttoneAccountDAO _besttoneAccount_dao = new BesttoneAccountDAO();
        BesttoneAccount account_entity = null;
        //订单充值操作类
        RechargeOrderDAO _rechargeOrder_dao = new RechargeOrderDAO();
        //卡扣款记录操作类
        CardRechargeRecordDAO _cardRechargeRecord_dao = new CardRechargeRecordDAO();
        //充值操作类
        AccountRechargeRecordDAO _accountRechargeRecord_dao = new AccountRechargeRecordDAO();

        if (!String.IsNullOrEmpty(CustID))
        {
            account_entity = _besttoneAccount_dao.QueryByCustID(CustID);
        }

        if (!String.IsNullOrEmpty(BesttoneAccount))
        {
            account_entity = _besttoneAccount_dao.QueryByBestAccount(BesttoneAccount);
           }

        #region 卡余额查询

        //查询卡余额
        Result = BesttoneAccountHelper.QueryCardBalance(CardNo, CardType, out cardBalance, out ErrMsg);
        strLog.AppendFormat("[查询卡余额]:Result:{0},Balance:{1}\r\n", Result, cardBalance);

        //查询失败
        //if (Result != 0)
        //    return "[{\"result\":\"false\",\"step\":\"query\",\"errorcode\":\"" + Result + "\",\"info\":\"查询余额失败\"}]";
        //if (Result != 0)
        //    return "<?xml version=\"1.0\" encoding=\"UTF-8\"><Result ReturnCode='" + Result + "' Msg='" + 查询余额失败 + "'  />";

        if (Result != 0)
        {
            rechargeResult.ReturnCode = "-11";
            rechargeResult.Msg = "查询余额失败";
            return rechargeResult;
        }

        //卡余额为0
        //if (cardBalance == 0)
        //    return "[{\"result\":\"false\",\"step\":\"query\",\"errorcode\":\"200020\",\"info\":\"卡内余额为0\"}]";

        if (cardBalance == 0)
        {
            rechargeResult.ReturnCode = "200020";
            rechargeResult.Msg = "卡内余额为0";
            return rechargeResult;
        }

        //if (Result != 0)
        //    return "<?xml version=\"1.0\" encoding=\"UTF-8\"><Result ReturnCode='200020' Msg='" + 卡内余额为0 + "'  />";

        #endregion

        #region 账户充值金额上限校验

        long OnceRechargeLimit = BesttoneAccountConstDefinition.DefaultInstance.AccountRechargeLimitedOne;              //单笔充值金额上限
        long RechargeAmountLimit = BesttoneAccountConstDefinition.DefaultInstance.AccountRechargeLimitedDay;            //账户单日充值额度上限
        long CurrentAmountLimit = BesttoneAccountConstDefinition.DefaultInstance.AccountBalanceLimited;                 //账户余额上限
        if (OnceRechargeLimit > 0)
        {
            //检测用户单笔充值金额是否超限(10000元)
            //if (cardBalance > OnceRechargeLimit)
            //    return "[{\"result\":\"false\",\"step\":\"query\",\"errorcode\":\"100003\",\"rechargeamount\":\"" + BesttoneAccountHelper.ConvertAmountToYuan(cardBalance) + "\",\"rechargeamountlimit\":\"" + BesttoneAccountHelper.ConvertAmountToYuan(OnceRechargeLimit) + "\",\"info\":\"卡内余额为0\"}]";
            //if (Result != 0)
            //    return "<?xml version=\"1.0\" encoding=\"UTF-8\"><Result ReturnCode='100003' Rechargeamount='" + BesttoneAccountHelper.ConvertAmountToYuan(cardBalance) + "' Rechargeamountlimit='" + BesttoneAccountHelper.ConvertAmountToYuan(OnceRechargeLimit) + "' />";

            if (Result != 0)
            {
                rechargeResult.ReturnCode = "100003";
                rechargeResult.Msg = "单笔充值金额是否超限(10000元)";
                rechargeResult.Rechargeamount = BesttoneAccountHelper.ConvertAmountToYuan(cardBalance);
                rechargeResult.Rechargeamountlimit = BesttoneAccountHelper.ConvertAmountToYuan(OnceRechargeLimit);
                return rechargeResult;
            }

        }
        if (RechargeAmountLimit > 0)
        {
            //检测用户当日充值是否超限(当日充值金额不能超过50000元)
            long hadRechargeAmount = _rechargeOrder_dao.QueryCurrentRechargeAmount(account_entity.BestPayAccount);
            //if ((hadRechargeAmount + cardBalance) > RechargeAmountLimit)
            //    return "[{\"result\":\"false\",\"step\":\"query\",\"errorcode\":\"100001\",\"rechargeamount\":\"" + BesttoneAccountHelper.ConvertAmountToYuan(hadRechargeAmount) + "\",\"rechargeamountlimit\":\"" + BesttoneAccountHelper.ConvertAmountToYuan(RechargeAmountLimit) + "\",\"info\":\"卡内余额为0\"}]";
            //if (Result != 0)
            //    return "<?xml version=\"1.0\" encoding=\"UTF-8\"><Result ReturnCode='100001' Rechargeamount='" + BesttoneAccountHelper.ConvertAmountToYuan(hadRechargeAmount) + "' Rechargeamountlimit='" + BesttoneAccountHelper.ConvertAmountToYuan(OnceRechargeLimit) + "' />";
            rechargeResult.ReturnCode = "100001";
            rechargeResult.Msg = "当日充值金额不能超过50000元";
            rechargeResult.Rechargeamount = BesttoneAccountHelper.ConvertAmountToYuan(cardBalance);
            rechargeResult.Rechargeamountlimit = BesttoneAccountHelper.ConvertAmountToYuan(OnceRechargeLimit);
            return rechargeResult;

        }

        if (CurrentAmountLimit > 0)
        {
            //检测用户帐户余额(个人账户余额不能超过100000元)
            Result = BesttoneAccountHelper.QueryAccountBalance(account_entity.BestPayAccount, out accountBalance, out ErrMsg);
            //if (Result != 0)
            //    return "[{\"result\":\"false\",\"step\":\"query\",\"errorcode\":\"" + Result + "\",\"info\":\"账户信息查询失败\"}]";

            //if (Result != 0)
            //    return "<?xml version=\"1.0\" encoding=\"UTF-8\"><Result ReturnCode='" + Result + "' Msg='账户信息查询失败'  />";

            //if ((accountBalance + cardBalance) > CurrentAmountLimit)
            //    return "[{\"result\":\"false\",\"step\":\"query\",\"errorcode\":\"100002\",\"accountbalance\":\"" + BesttoneAccountHelper.ConvertAmountToYuan(accountBalance) + "\",\"CurrentAmountLimit\":\"" + BesttoneAccountHelper.ConvertAmountToYuan(CurrentAmountLimit) + "\",\"info\":\"卡内余额为0\"}]";
            //accountBalance = 0;

            //if ((accountBalance + cardBalance) > CurrentAmountLimit)
            //    return "<?xml version=\"1.0\" encoding=\"UTF-8\"><Result ReturnCode='100002' Accountbalance='" + BesttoneAccountHelper.ConvertAmountToYuan(accountBalance) + "' CurrentAmountLimit='" + BesttoneAccountHelper.ConvertAmountToYuan(CurrentAmountLimit) + "'  />";

            if ((accountBalance + cardBalance) > CurrentAmountLimit)
            {
                rechargeResult.ReturnCode = "100001";
                rechargeResult.Msg = "当日充值金额不能超过50000元";
                rechargeResult.Rechargeamount = BesttoneAccountHelper.ConvertAmountToYuan(cardBalance);
                rechargeResult.Rechargeamountlimit = BesttoneAccountHelper.ConvertAmountToYuan(OnceRechargeLimit);
                return rechargeResult;
            }

        }

        #endregion

        #region 卡扣款

        String transactionID = BesttoneAccountHelper.CreateTransactionID();
        String orderSeq = BesttoneAccountHelper.CreateOrderSeq();
        DateTime reqTime = DateTime.Now;

        RechargeOrder _recharge_order;              //充值订单
        CardRechargeRecord cardrecharge_entity;     //卡扣款流水记录

        //初始化充值订单
        _recharge_order = new RechargeOrder(orderSeq, transactionID, reqTime.ToString("yyyyMMdd"), "RMB", cardBalance, cardBalance, 0, "消费卡向账户充值扣款",
            account_entity.CustID, account_entity.BestPayAccount, CardType, SPID, reqTime, new DateTime(1900, 1, 1), new DateTime(1900, 1, 1), 1, 0, "", "", "", "0");  //2013-04-13 add 最后一个字段 0 代表是否需要开票

        //初始化卡扣款流水
        cardrecharge_entity = new CardRechargeRecord(transactionID, orderSeq, reqTime.ToString("yyyyMMdd"), "RMB", cardBalance, "消费卡向账户充值扣款", CardNo, CardPassword, CardType,
            account_entity.BestPayAccount, 0, reqTime, new DateTime(1900, 1, 1), "", "", "", "", "");

        /***********************************************************开始扣款*******************************************************/
        String uptranSeq = String.Empty;                        //交易流水号,支付平台返回的,后期对账用
        Result = BesttoneAccountHelper.CardDeductionBalance(transactionID, orderSeq, CardNo, CardPassword, CardType, cardBalance, reqTime, "", out uptranSeq, out ErrMsg);
        strLog.AppendFormat("[卡扣款]:Result:{0},ErrMsg:{1}\r\n", Result, ErrMsg);
        _recharge_order.UptranSeq = uptranSeq;
        cardrecharge_entity.UptranSeq = uptranSeq;
        if (Result != 0)
        {
            //修改订单信息
            _recharge_order.Status = 4;
            _recharge_order.PayTime = DateTime.Now;
            _recharge_order.ReturnCode = Result.ToString();
            _recharge_order.ReturnDesc = ErrMsg;
            _rechargeOrder_dao.Insert(_recharge_order);

            //修改卡扣款记录信息
            cardrecharge_entity.Status = 2;
            cardrecharge_entity.PayTime = DateTime.Now;
            cardrecharge_entity.ReturnCode = Result.ToString();
            cardrecharge_entity.ReturnDesc = ErrMsg;
            _cardRechargeRecord_dao.Insert(cardrecharge_entity);
            //return "<?xml version=\"1.0\" encoding=\"UTF-8\"><Result ReturnCode='" + Result + "' Msg='卡扣款失败'   />";

            //return "[{\"result\":\"false\",\"step\":\"deduction\",\"errorcode\":\"" + Result + "\",\"info\":\"卡扣款失败\"}]";
            rechargeResult.ReturnCode = Convert.ToString(Result);
            rechargeResult.Msg = "卡扣款失败!";

            return rechargeResult;
        }
        else
        {
            //修改订单信息
            _recharge_order.Status = 2;
            _recharge_order.PayTime = DateTime.Now;
            _recharge_order.ReturnCode = "0000";
            _recharge_order.ReturnDesc = "扣款成功";
            _rechargeOrder_dao.Insert(_recharge_order);

            //修改卡充值记录信息
            cardrecharge_entity.Status = 1;
            cardrecharge_entity.PayTime = DateTime.Now;
            cardrecharge_entity.ReturnCode = "0000";
            cardrecharge_entity.ReturnDesc = "扣款成功";
            _cardRechargeRecord_dao.Insert(cardrecharge_entity);
        }

        #endregion

        #region 充值

        transactionID = BesttoneAccountHelper.CreateTransactionID();        //充值流水记录
        DateTime rechargeTime = DateTime.Now;                               //充值请求时间
        String returnMsg = String.Empty;
        bool resultBoolean = false;

        //初始化充值流水类
        AccountRechargeRecord rechargeRecord_entity = new AccountRechargeRecord(transactionID, rechargeTime.ToString("yyyyMMdd"), orderSeq,
            cardBalance, CardType, "消费卡充值", rechargeTime, new DateTime(1900, 1, 1), 0, "", "");

        try
        {
            #region 开始充值

            //调用接口给账户充值
            Result = BesttoneAccountHelper.AccountRecharge(transactionID, account_entity.BestPayAccount, cardBalance, rechargeTime, out accountBalance, out ErrMsg);
            //调用接口给账户充值—测试
            //Result = BesttoneAccountHelper.AccountRecharge(transactionID, account_entity.BestPayAccount, 1, rechargeTime, out accountBalance, out ErrMsg);
            strLog.AppendFormat("[账户充值]:TransactionID:{0},Result:{1},ErrMsg:{2}\r\n", transactionID, Result, ErrMsg);
            if (Result == 0)
            {
                //修改订单信息
                _recharge_order = _rechargeOrder_dao.QueryByOrderSeq(orderSeq);
                _recharge_order.Status = 3;
                _recharge_order.RechargeCount = 1;
                _recharge_order.CompleteTime = DateTime.Now;
                _recharge_order.ReturnCode = "0000";
                _recharge_order.ReturnDesc = "充值成功";
                resultBoolean = _rechargeOrder_dao.Update(_recharge_order);

                //修改充值流水记录信息
                rechargeRecord_entity.Status = 1;
                rechargeRecord_entity.CompleteTime = DateTime.Now;
                rechargeRecord_entity.ReturnCode = "0000";
                rechargeRecord_entity.ReturnDesc = "充值成功";

                strLog.AppendFormat("[更新订单状态]ResultBoolean:{0}\r\n", resultBoolean);
                returnMsg = "[{\"result\":\"true\",\"info\":\"账户充值成功\",\"deductionBalance\":\"" + BesttoneAccountHelper.ConvertAmountToYuan(cardBalance) + "\",\"accountBalance\":\"" + BesttoneAccountHelper.ConvertAmountToYuan(accountBalance) + "\"}]";
                //return "<?xml version=\"1.0\" encoding=\"UTF-8\"><Result ReturnCode='" + Result + "' Msg='卡扣款失败'   />";
                //returnMsg = "<?xml version=\"1.0\" encoding=\"UTF-8\"><Result ReturnCode='" + 0 + "' Msg='账户充值成功'  deductionBalance='" + BesttoneAccountHelper.ConvertAmountToYuan(cardBalance) + "' accountBalance='" + BesttoneAccountHelper.ConvertAmountToYuan(accountBalance) + "' />";
                rechargeResult.Msg = "账户充值成功";
                rechargeResult.ReturnCode = "0";
                rechargeResult.Rechargeamount = BesttoneAccountHelper.ConvertAmountToYuan(accountBalance);
                return rechargeResult;
            }
            else
            {
                //修改订单信息
                _recharge_order = _rechargeOrder_dao.QueryByOrderSeq(orderSeq);
                _recharge_order.RechargeCount = 1;
                _recharge_order.ReturnCode = Result.ToString();
                _recharge_order.ReturnDesc = ErrMsg;
                resultBoolean = _rechargeOrder_dao.Update(_recharge_order);

                //修改充值流水记录信息
                rechargeRecord_entity.Status = 2;
                rechargeRecord_entity.CompleteTime = DateTime.Now;
                rechargeRecord_entity.ReturnCode = Result.ToString();
                rechargeRecord_entity.ReturnDesc = ErrMsg;

                returnMsg = "[{\"result\":\"false\",\"step\":\"recharge\",\"errorcode\":\"" + Result + "\",\"info\":\"账户充值失败\"}]";
                //returnMsg = "<?xml version=\"1.0\" encoding=\"UTF-8\"><Result ReturnCode='" + Result + "' Msg='账户充值失败'   />";
                rechargeResult.ReturnCode = "" + Result+"";
                rechargeResult.Msg = "账户充值失败";
                return rechargeResult;
            }

            #endregion
        }
        catch (Exception ex)
        {
            rechargeRecord_entity.ReturnDesc += ex.Message;
            throw ex;
        }
        finally
        {
            _accountRechargeRecord_dao.Insert(rechargeRecord_entity);
        }

        #endregion
        return rechargeResult;
    }