You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
512 lines
19 KiB
512 lines
19 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using Sog;
|
|
using LitJson;
|
|
using SimpleHttpServer;
|
|
using System.Text;
|
|
using ProtoCSStruct;
|
|
|
|
namespace Operation
|
|
{
|
|
public class OpExchangeGroup
|
|
{
|
|
public int codeCount;
|
|
public int maxExchangeNum;
|
|
public string content;
|
|
public int groupId;
|
|
}
|
|
|
|
[MenuMapping(MenuName.CDK_MANAGER, MenuIcon.CDK, 3, PermissionCode.CDK_MANAGER)]
|
|
public class Exchange
|
|
{
|
|
public static Object m_locker = new Object();
|
|
|
|
private static StringBuilder GetExchangeJson(ExchangeConfigure d)
|
|
{
|
|
var time = OperationServerUtils.GetApp().GetTimeSecond();
|
|
var State = 1;
|
|
|
|
if (!(d.BeginTime == 0 && d.EndTime == 0))
|
|
{
|
|
//未开始
|
|
if (d.BeginTime != 0 && time < d.BeginTime)
|
|
{
|
|
State = 2;
|
|
}
|
|
//已过期
|
|
else if (d.EndTime != 0 && time > d.EndTime)
|
|
{
|
|
State = 3;
|
|
}
|
|
}
|
|
|
|
StringBuilder Jsonstr = new StringBuilder();
|
|
Jsonstr.Append('{');
|
|
Jsonstr.Append($"\"Id\":{d.Id},\"ExchangeCode\":\"{d.ExchangeCode.GetString()}\",\"BeginTime\":{d.BeginTime},\"EndTime\":{d.EndTime},\"Mainline\":{d.Mainline},\"MaxExchangeNum\":{d.MaxExchangeNum},\"ExchangeNum\":{d.ExchangeNum},\"State\":{State},\"Status\":{d.Status},\"Type\":{d.Type},\"Content\":{{ \"AddGoods\":[");
|
|
|
|
//d.Status 1 开启 2 关闭
|
|
for (int i = 0; i < d.Content.AddGoods.Count; i++)
|
|
{
|
|
var _goods = d.Content.AddGoods.Get(i);
|
|
if (string.IsNullOrEmpty(_goods.Reward.Id.GetString()) && (_goods.Reward.Type == 0 || _goods.Reward.Type >= (int)CurrencyType.Max))
|
|
{
|
|
continue;
|
|
}
|
|
Jsonstr.Append('{');
|
|
Jsonstr.Append($"\"Type\":{_goods.Reward.Type},\"ID\":\"{_goods.Reward.Id.GetString()}\",\"Count\":{_goods.Reward.Value},\"Param\":{_goods.Param},\"FromType\":\"{_goods.FromType}\"");
|
|
Jsonstr.Append("},");
|
|
}
|
|
|
|
Jsonstr = new StringBuilder(Jsonstr.ToString().TrimEnd(','));
|
|
Jsonstr.Append("],\"Groups\":[");
|
|
|
|
for (int i = 0; i < d.Content.Groups.Count; i++)
|
|
{
|
|
var group = d.Content.Groups.Get(i);
|
|
|
|
if (i != 0)
|
|
{
|
|
Jsonstr.Append(",");
|
|
}
|
|
|
|
Jsonstr.Append($"{{\"GroupId\":{group.GroupId},\"MaxExchangeNum\":{group.MaxExchangeNum},\"AddGoods\":[");
|
|
for (int j = 0; j < group.AddGoods.Count; j++)
|
|
{
|
|
var _goods = group.AddGoods.Get(j);
|
|
if(j != 0)
|
|
{
|
|
Jsonstr.Append(",");
|
|
}
|
|
if (string.IsNullOrEmpty(_goods.Reward.Id.GetString()) && (_goods.Reward.Type == 0 || _goods.Reward.Type >= (int)CurrencyType.Max))
|
|
{
|
|
continue;
|
|
}
|
|
Jsonstr.Append('{');
|
|
Jsonstr.Append($"\"Type\":{_goods.Reward.Type},\"ID\":\"{_goods.Reward.Id.GetString()}\",\"Count\":{_goods.Reward.Value},\"Param\":{_goods.Param},\"FromType\":\"{_goods.FromType}\"");
|
|
Jsonstr.Append("}");
|
|
}
|
|
|
|
Jsonstr.Append("]}");
|
|
}
|
|
|
|
Jsonstr.Append("]}");
|
|
Jsonstr.Append("},");
|
|
|
|
return Jsonstr;
|
|
}
|
|
|
|
[RequestMapping("兑换码查询",PermissionCode.CDK_SELECT,true)]
|
|
public static int OnSelectExchangeHttpReq(string httpApiCmd, JsonData Jsondata, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId)
|
|
{
|
|
var page = query.GetValue("page").Toint32(1);
|
|
var limit = query.GetValue("limit").Toint32(50);
|
|
var codeId = query.GetValue("id").Toint32(0);
|
|
var maxpage = page + limit;
|
|
|
|
StringBuilder Jsonstr = new StringBuilder();
|
|
Jsonstr.Append('[');
|
|
|
|
rsp.IsWaitFor = true;
|
|
StructPacket dbPacket = new StructPacket();
|
|
dbPacket.Header.Type = (int)SSGameMsgID.ExchangeQueryDbReq;
|
|
StructMessageParser<SSExchangeCodeQueryDbReq> parser = new StructMessageParser<SSExchangeCodeQueryDbReq>();
|
|
dbPacket.Parser = parser;
|
|
ref SSExchangeCodeQueryDbReq req = ref dbPacket.GetMessage<SSExchangeCodeQueryDbReq>();
|
|
req.ReqId = httpContextId;
|
|
|
|
if (codeId == 0)
|
|
{
|
|
req.BeginIdx = (page - 1) * limit;
|
|
req.EndIdx = req.BeginIdx + limit;
|
|
}
|
|
else
|
|
{
|
|
req.CodeId = codeId;
|
|
}
|
|
|
|
OperationServerUtils.GetPacketSender().SendToPlayerOpServer((int)SSGameMsgID.ExchangeQueryDbReq, ref req, 0);
|
|
|
|
return 0;
|
|
}
|
|
|
|
public static void OnMsgSelect(uint id, JsonData Jsondata, HttpResponse rsp, HttpRequest request, HttpQueryParams query, ref SSExchangeCodeQueryDbRes res)
|
|
{
|
|
var list = res.List;
|
|
StringBuilder Jsonstr = new StringBuilder();
|
|
Jsonstr.Append('[');
|
|
|
|
try
|
|
{
|
|
for (int i = 0; i < list.Count; i++)
|
|
{
|
|
ExchangeConfigure config = list[i];
|
|
var str = GetExchangeJson(config);
|
|
Jsonstr.Append(str);
|
|
}
|
|
|
|
Jsonstr = new StringBuilder(Jsonstr.ToString().TrimEnd(','));
|
|
Jsonstr.Append(']');
|
|
Jsondata["data"] = Jsonstr.ToString();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
TraceLog.Error("Exchange.OnMsgSelect error: {0} ", ex.Message);
|
|
Jsondata["ret"] = 1;
|
|
Jsondata["msg"] = "数据错误,请联系管理员!";
|
|
return;
|
|
}
|
|
|
|
Jsondata["count"] = res.Count;
|
|
Jsondata["ret"] = 0;
|
|
|
|
return;
|
|
}
|
|
|
|
public static void OnSaveDbMsg(uint id, JsonData Jsondata, HttpResponse rsp, HttpRequest request, HttpQueryParams query, ref SSExchangeCodeSaveDbRes res)
|
|
{
|
|
if (res.Ret == -1)
|
|
{
|
|
TraceLog.Error("Exchange.OnSaveDbMsg error: codeId 生成激活码失败!");
|
|
Jsondata["ret"] = -1;
|
|
Jsondata["msg"] = "生成激活码失败!";
|
|
rsp.IsWaitFor = false;
|
|
return;
|
|
}
|
|
else if (res.Ret == -2)
|
|
{
|
|
TraceLog.Error("Exchange.OnSaveDbMsg error: codeId 错误,添加失败.");
|
|
Jsondata["ret"] = 2;
|
|
Jsondata["msg"] = "codeId 错误,添加失败, 请稍后重试";
|
|
rsp.IsWaitFor = false;
|
|
return;
|
|
}
|
|
else if (res.Ret == -3)
|
|
{
|
|
TraceLog.Error("Exchange.OnSaveDbMsg error: 激活码保存失败");
|
|
Jsondata["ret"] = 0;
|
|
Jsondata["msg"] = "生成激活码失败!请检查重试!";
|
|
rsp.IsWaitFor = false;
|
|
return;
|
|
}
|
|
|
|
Jsondata["ret"] = 0;
|
|
Jsondata["msg"] = "生成激活码成功!稍后生效";
|
|
rsp.IsWaitFor = false;
|
|
|
|
return;
|
|
}
|
|
|
|
public static void OnMsgChange(uint id, JsonData Jsondata, HttpResponse rsp, HttpRequest request, HttpQueryParams query, ref SSExchangeStatusChangeRes res)
|
|
{
|
|
string msg = "";
|
|
|
|
if (res.Ret == -1)
|
|
{
|
|
msg = "关闭/开启 激活码失败!";
|
|
Jsondata["ret"] = 0;
|
|
Jsondata["msg"] = msg;
|
|
rsp.IsWaitFor = false;
|
|
return;
|
|
}
|
|
|
|
msg = "修改成功";
|
|
Jsondata["ret"] = 0;
|
|
Jsondata["msg"] = msg;
|
|
rsp.IsWaitFor = false;
|
|
return;
|
|
}
|
|
|
|
/// 添加 修改
|
|
[RequestMapping("添加CDK",PermissionCode.CDK_ADD, toLog: true)]
|
|
public static int OnAddExchangeHttpReq(string httpApiCmd, JsonData Jsondata, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId)
|
|
{
|
|
var ExchangeCode = query.GetValue("ExchangeCode");
|
|
var Id = query.GetValue("Id").Toint32();
|
|
var data = OperationServerData.GetExchangeCodeCache();
|
|
|
|
#region 填充值
|
|
ExchangeConfigure Config = new ExchangeConfigure();
|
|
Config.Id = Id;
|
|
Config.ExchangeCode.SetString(ExchangeCode);
|
|
Config.BeginTime = query.GetValue("BeginTime").Tolong();
|
|
Config.EndTime = query.GetValue("EndTime").Tolong();
|
|
Config.Mainline = query.GetValue("Mainline").Toint32();
|
|
Config.Status = query.GetValue("Status").Toint32();
|
|
Config.MaxExchangeNum = query.GetValue("MaxExchangeNum").Toint32();
|
|
Config.Type = 0;
|
|
var Content = query.GetValue("Content");
|
|
//"id|num#id|num# ";
|
|
if(Config.EndTime != 0 && Config.BeginTime > Config.EndTime)
|
|
{
|
|
Jsondata["ret"] = 3;
|
|
Jsondata["msg"] = "时间配置错误";
|
|
return 3;
|
|
}
|
|
|
|
foreach (var item in Content.Split('#'))
|
|
{
|
|
var arr = item.Split('|');
|
|
DropDataOne one = new DropDataOne
|
|
{
|
|
Reward = new TypeIDValueString()
|
|
{ Type = arr[0].Toint32(), Id = new FixedStructString64(arr[1]), Value = arr[2].Toint32() },
|
|
Param = 0,
|
|
FromType = DropFromType.None
|
|
};
|
|
|
|
Config.Content.AddGoods.Add(ref one);
|
|
}
|
|
#endregion
|
|
|
|
OperationServerUtils.GetExchangeSvc().SaveExchangeCodeData(ref Config, httpContextId);
|
|
|
|
Jsondata["ret"] = 1;
|
|
Jsondata["msg"] = "操作成功";
|
|
|
|
return 0;
|
|
}
|
|
|
|
[RequestMapping("注销CDK",PermissionCode.CDK_DISABLE, toLog: true)]
|
|
public static int OnDisableExchangeHttpReq(string httpApiCmd, JsonData Jsondata, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId)
|
|
{
|
|
var Status = query.GetValue("Status").Toint32();
|
|
var id = query.GetValue("Id").Toint32();
|
|
|
|
TraceLog.Debug("Exchange.OnDisableExchangeHttpReq httpContextId {0} id {1} Status {2}", httpContextId, id, Status);
|
|
|
|
StructPacket dbPacket = new StructPacket();
|
|
dbPacket.Header.Type = (int)SSGameMsgID.ExchangeStatusChangeReq;
|
|
StructMessageParser<SSExchangeStatusChangeReq> parser = new StructMessageParser<SSExchangeStatusChangeReq>();
|
|
dbPacket.Parser = parser;
|
|
ref SSExchangeStatusChangeReq req = ref dbPacket.GetMessage<SSExchangeStatusChangeReq>();
|
|
req.Status = Status;
|
|
req.ExchangeCodeId = id;
|
|
req.ReqId = (int)httpContextId;
|
|
OperationServerUtils.GetPacketSender().SendToPlayerOpServer((int)SSGameMsgID.ExchangeStatusChangeReq, ref req, 0);
|
|
rsp.IsWaitFor = true;
|
|
|
|
return 0;
|
|
}
|
|
|
|
[RequestMapping("创建CDK",PermissionCode.CDK_CREATE, toLog: true)]
|
|
public static int OnCreateExchangeHttpReq(string httpApiCmd, JsonData Jsondata, HttpResponse srsp, HttpRequest request, HttpQueryParams query, uint reqId)
|
|
{
|
|
TraceLog.Debug("Exchange.OnCreateExchangeHttpReq");
|
|
|
|
List<OpExchangeGroup> groupList;
|
|
|
|
try
|
|
{
|
|
groupList = query.GetValue("exchangeGroup").ToJson<List<OpExchangeGroup>>();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
TraceLog.Error("Exchange.OnCreateExchangeHttpReq get groupList error: {0}.", e.Message);
|
|
Jsondata["ret"] = 3;
|
|
Jsondata["msg"] = "组内容配置错误";
|
|
return 3;
|
|
}
|
|
|
|
if(groupList.Count == 0 || groupList == null)
|
|
{
|
|
TraceLog.Error("Exchange.OnCreateExchangeHttpReq get groupList error: 组内容配置错误.");
|
|
Jsondata["ret"] = 3;
|
|
Jsondata["msg"] = "组内容配置错误";
|
|
return 3;
|
|
}
|
|
|
|
int SumCount = 0;
|
|
|
|
string exchangeCodePre = query.GetValue("exchangeCodePre");
|
|
|
|
int codeId = query.GetValue("Id").Toint32(0);
|
|
ExchangeConfigure Config = new ExchangeConfigure();
|
|
|
|
Config.ExchangeCode.SetString(exchangeCodePre);
|
|
Config.BeginTime = query.GetValue("BeginTime").Tolong();
|
|
Config.EndTime = query.GetValue("EndTime").Tolong();
|
|
Config.Mainline = query.GetValue("Mainline").Toint32();
|
|
Config.Status = query.GetValue("Status").Toint32();
|
|
Config.MaxExchangeNum = query.GetValue("MaxExchangeNum").Toint32();
|
|
Config.Type = 1;
|
|
|
|
if (Config.EndTime != 0 && Config.BeginTime > Config.EndTime)
|
|
{
|
|
TraceLog.Error("Exchange.OnCreateExchangeHttpReq error: 时间配置错误.");
|
|
|
|
Jsondata["ret"] = 3;
|
|
Jsondata["msg"] = "时间配置错误";
|
|
return 3;
|
|
}
|
|
|
|
srsp.IsWaitFor = true;
|
|
// 这里要先校验
|
|
|
|
int groupId = 1;
|
|
|
|
foreach (var groupItem in groupList)
|
|
{
|
|
int groupCodeCount = groupItem.codeCount;
|
|
int maxExchangeNum = groupItem.maxExchangeNum;
|
|
ExchangeGroup tempGroup = new ExchangeGroup
|
|
{
|
|
GroupId = groupId,
|
|
MaxExchangeNum = maxExchangeNum,
|
|
GroupCount = groupCodeCount
|
|
};
|
|
var content = groupItem.content;
|
|
SumCount += groupCodeCount;
|
|
//"id|num#id|num# ";
|
|
|
|
foreach (var item in content.Split('#'))
|
|
{
|
|
var arr = item.Split('|');
|
|
DropDataOne one = new DropDataOne
|
|
{
|
|
Reward = new TypeIDValueString()
|
|
{ Id = new FixedStructString64(arr[1]), Type = arr[0].Toint32(), Value = arr[2].Toint32() },
|
|
Param = 0,
|
|
FromType = DropFromType.None
|
|
};
|
|
tempGroup.AddGoods.Add(one);
|
|
}
|
|
|
|
Config.Content.Groups.Add(ref tempGroup);
|
|
groupId++;
|
|
}
|
|
|
|
// 保存 同时校验前缀是否存在
|
|
OperationServerUtils.GetExchangeSvc().SaveExchangeCodeData(ref Config, reqId);
|
|
|
|
return 0;
|
|
}
|
|
|
|
[RequestMapping("更新CDK组",PermissionCode.CDK_UPDATE_GROUP, toLog: true)]
|
|
public static int OnUpdateExchangeGroupHttpReq(string httpApiCmd, JsonData Jsondata, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId)
|
|
{
|
|
List<OpExchangeGroup> groupList;
|
|
|
|
try
|
|
{
|
|
groupList = query.GetValue("exchangeGroup").ToJson<List<OpExchangeGroup>>();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
TraceLog.Error("Exchange.OnUpdateExchangeGroupHttpReq get groupList error: {0}.", e.Message);
|
|
Jsondata["ret"] = 3;
|
|
Jsondata["msg"] = "组内容配置错误";
|
|
return 3;
|
|
}
|
|
|
|
if (groupList == null || groupList.Count == 0)
|
|
{
|
|
TraceLog.Error("Exchange.OnUpdateExchangeGroupHttpReq get groupList error: 组内容配置错误.");
|
|
Jsondata["ret"] = 3;
|
|
Jsondata["msg"] = "组内容配置错误";
|
|
return 3;
|
|
}
|
|
|
|
var Id = query.GetValue("Id").Toint32();
|
|
|
|
ExchangeConfigure Config = new ExchangeConfigure();
|
|
Config.Id = Id;
|
|
Config.BeginTime = query.GetValue("BeginTime").Tolong();
|
|
Config.EndTime = query.GetValue("EndTime").Tolong();
|
|
Config.Mainline = query.GetValue("Mainline").Toint32();
|
|
Config.Status = query.GetValue("Status").Toint32();
|
|
Config.Type = 1;
|
|
Config.MaxExchangeNum = query.GetValue("MaxExchangeNum").Toint32();
|
|
|
|
int groupId = 1;
|
|
|
|
foreach (var groupItem in groupList)
|
|
{
|
|
int groupCodeCount = groupItem.codeCount;
|
|
int maxExchangeNum = groupItem.maxExchangeNum;
|
|
ExchangeGroup tempGroup = new ExchangeGroup();
|
|
var content = groupItem.content;
|
|
|
|
if(groupItem.groupId != 0)
|
|
{
|
|
tempGroup.GroupId = groupItem.groupId;
|
|
}
|
|
else
|
|
{
|
|
tempGroup.GroupId = groupId++;
|
|
}
|
|
|
|
tempGroup.MaxExchangeNum = groupItem.maxExchangeNum;
|
|
|
|
foreach (var item in content.Split('#'))
|
|
{
|
|
var arr = item.Split('|');
|
|
DropDataOne one = new DropDataOne
|
|
{
|
|
Reward = new TypeIDValueString()
|
|
{ Id = new FixedStructString64(arr[1]), Type = arr[0].Toint32(), Value = arr[2].Toint32() },
|
|
Param = 0,
|
|
FromType = DropFromType.None
|
|
};
|
|
|
|
|
|
tempGroup.AddGoods.Add(one);
|
|
}
|
|
|
|
Config.Content.Groups.Add(ref tempGroup);
|
|
}
|
|
|
|
if (Config.Id == 0)
|
|
{
|
|
Jsondata["ret"] = 5;
|
|
Jsondata["msg"] = "修改失败,参数错误";
|
|
return 5;
|
|
}
|
|
else //修改
|
|
{
|
|
// 新数据,直接丢过去减速
|
|
OperationServerUtils.GetExchangeSvc().SaveExchangeCodeData(ref Config, httpContextId);
|
|
}
|
|
|
|
Jsondata["ret"] = 1;
|
|
Jsondata["msg"] = "操作成功";
|
|
|
|
return 0;
|
|
}
|
|
|
|
[RequestMapping("导出CDK",PermissionCode.CDK_EXPORT, toLog: true)]
|
|
public static int OnExportExchangeHttpReq(string httpApiCmd, JsonData Jsondata, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId)
|
|
{
|
|
// 通过groupId,codeId查询兑换码文件
|
|
int codeId = query.GetValue("codeId").Toint32(0);
|
|
string exchangeCodePre = query.GetValue("exchangeCode");
|
|
|
|
// 文件名称:exchangeCode_ev_1.csv
|
|
string filename = "exchangeCode_" + exchangeCodePre + "_" + codeId +".csv";
|
|
string filePathName = OperationServerUtils.GetServerConfig().codefliepath+filename;
|
|
|
|
TraceLog.Debug("Exchange.OnExportExchangeHttpReq filePathName {0} ", filePathName);
|
|
|
|
string data = "";
|
|
|
|
try
|
|
{
|
|
data = Convert.ToBase64String(File.ReadAllBytes(filePathName));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
TraceLog.Error("Exchange.OnExportExchangeHttpReq ReadAllBytes error : {0}", ex.Message);
|
|
|
|
Jsondata["ret"] = 2;
|
|
Jsondata["msg"] = "找不到该文件:" + filename;
|
|
|
|
return 2;
|
|
}
|
|
|
|
Jsondata["ret"] = 0;
|
|
Jsondata["data"] = data;
|
|
|
|
return 0;
|
|
}
|
|
}
|
|
}
|