예제 #1
0
    // 提交玩家在线时订单
    private bool submitPlayerOnlineOrder(ParamScore p, long score, GMUser user)
    {
        OrderGenerator or = new OrderGenerator();
        Dictionary <string, object> orData = or.genOrder(user.m_user, p.m_toAcc, score, p.m_op,
                                                         AccType.ACC_PLAYER,
                                                         p.m_orderFrom, p.m_orderId);

        if (string.IsNullOrEmpty(p.m_orderId))
        {
            p.m_orderId = Convert.ToString(orData["orderId"]);
        }

        bool code = DBMgr.getInstance().insertData(TableName.PLAYER_ORDER_REQ, orData, user.getDbServerID(),
                                                   DbName.DB_PLAYER);

        return(code);
    }
예제 #2
0
    public override string doDyop(object param)
    {
        ParamScore p        = (ParamScore)param;
        long       oriScore = 0;

        if (!long.TryParse(p.m_score, out oriScore))
        {
            m_retData.Add("result", RetCode.RET_PARAM_NOT_VALID);
            return(Helper.genJsonStr(m_retData));
        }

        if (oriScore <= 0)
        {
            m_retData.Add("result", RetCode.RET_PARAM_NOT_VALID);
            return(Helper.genJsonStr(m_retData));
        }

        bool cres = createGMUser(p);

        if (!cres)
        {
            return(Helper.genJsonStr(m_retData));
        }

        if (!p.checkSign(m_gmUser))
        {
            m_retData.Add("result", RetCode.RET_SIGN_ERROR);
            return(Helper.genJsonStr(m_retData));
        }

        if (orderIdExists(p))
        {
            m_retData.Add("result", RetCode.RET_ORDER_EXISTS);
            return(Helper.genJsonStr(m_retData));
        }

        long score = Helper.saveMoneyValue(oriScore);

        int code = canDoScoreToPlayer(p.m_playerAcc, score, ScropOpType.isAddScore(p.m_op));

        // 在线,并且是下分,直接返回失败
        if (code == RetCode.RET_PLAYER_ONLINE && !ScropOpType.isAddScore(p.m_op))
        {
            m_retData.Add("result", RetCode.RET_PLAYER_ONLINE);
        }
        else if (code == RetCode.RET_PLAYER_ONLINE && ScropOpType.isAddScore(p.m_op)) // 玩家在线时提交上下分订单
        {
            //if (ScropOpType.isAddScore(p.m_op)) // 上分操作,先扣GM的钱,若订单最终处理失败,会返还GM这部分钱
            {
                decScore(score);
            }

            OrderGenerator or = new OrderGenerator();
            Dictionary <string, object> orData = or.genOrder(p.m_gmAccount, p.m_playerAcc, score, p.m_op,
                                                             AccType.ACC_PLAYER,
                                                             OrderGenerator.ORDER_FROM_API,
                                                             "",
                                                             p.m_userOrderId, p.m_apiCallBack);

            bool res = MongodbPlayer.Instance.ExecuteInsert(TableName.PLAYER_ORDER_REQ, orData);
            if (res)
            {
                m_retData.Add("orderId", Convert.ToString(orData["orderId"]));
                m_retData.Add("result", RetCode.RET_HAS_SUBMIT_ORDER);
            }
            else
            {
                m_retData.Add("result", RetCode.RET_DB_ERROR);
            }
        }
        else if (code == RetCode.RET_SUCCESS) // 玩家离线,可直接修改数据库上下分
        {
            bool res = doScorePlayer(p, score);
            if (res)
            {
                m_retData.Add("result", RetCode.RET_SUCCESS);
                m_retData.Add("playerAcc", p.m_playerAcc);
                m_retData.Add("score", oriScore);

                /*string cmd = string.Format(CONST.SQL_ORDER_ID, TableName.GM_SCORE, m_gmUser.m_acc, p.m_playerAcc, p.m_op);
                 *
                 * Dictionary<string, object> order = m_gmUser.sqlDb.queryOne(cmd, MySqlDbName.DB_XIANXIA);
                 * if (order != null)
                 * {
                 *  int orderId = Convert.ToInt32(order["opId"]);
                 *  m_retData.Add("orderId", orderId);
                 * }*/

                OrderInfo oinfo = writeOfflineOrderToMySql(p, score);
                m_retData.Add("orderId", oinfo.m_orderId);
                m_retData.Add("userOrderId", p.m_userOrderId);
            }
        }
        else
        {
            m_retData.Add("result", code);
        }
        return(Helper.genJsonStr(m_retData));
    }