/* * gm给玩家上分,先扣gm的钱,若订单处理失败,需要把钱返还gm * gm给玩家下分,先处理订单,若订单处理成功,则需要给gm钱 */ private void returnMoneyToGM(OrderInfo info) { if (info.m_gmAcc == "admin") // 操作者是管理员,不用返还 { return; } long retMoney = 0; switch (info.m_orderState) { case PlayerReqOrderState.STATE_FINISH: // 处理成功了,若是下分,需要返还 { if (!ScropOpType.isAddScore(info.m_orderType)) { retMoney = info.m_money; } } break; case PlayerReqOrderState.STATE_FAILED: // 处理失败了,若是上分,需要返还 { if (ScropOpType.isAddScore(info.m_orderType)) { retMoney = info.m_money; } } break; } if (retMoney > 0) { SqlUpdateGenerator up = new SqlUpdateGenerator(); up.addField("money", string.Format("money+{0}", retMoney), FieldType.TypeNumber); // 可以通知到web后台 string cmd = up.getResultSql(TableName.GM_ACCOUNT, string.Format("acc='{0}'", info.m_gmAcc)); m_sqlDb.executeOp(cmd, CMySqlDbName.DB_XIANXIA); } }
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)); }