Files
back_cantanBuilding/Assets/Scripts/Services/SurveyService.cs
2026-05-26 16:15:54 +08:00

232 lines
8.2 KiB
C#

using asap.core;
using game;
using GameCore;
using System;
using System.Collections.Generic;
using UnityEngine;
public class SurveyService
{
const string SurveyUrl = "https://pt93-tyqnr.qijihdhk.com/";
const string SurveyData = "SurveyData";
const string SurveyReadSidData = "SurveyReadSidData";
ICustomServerMgr customServerMgr;
IUserService userService;
cfg.Tables tables;
MatchlistData matchlistData { get; set; }
List<string> receivedReward = new List<string>();
List<string> readSid = new List<string>();
public SurveyService(ICustomServerMgr customServerMgr, IUserService userService, cfg.Tables tables)
{
this.customServerMgr = customServerMgr;
this.userService = userService;
this.tables = tables;
string surveyData = PlayFabMgr.Instance.GetLocalData(SurveyData);
if (!string.IsNullOrEmpty(surveyData))
{
receivedReward = Newtonsoft.Json.JsonConvert.DeserializeObject<List<string>>(surveyData);
}
string surveyReadSidData = PlayFabMgr.Instance.GetLocalData(SurveyReadSidData);
if (!string.IsNullOrEmpty(surveyReadSidData))
{
readSid = Newtonsoft.Json.JsonConvert.DeserializeObject<List<string>>(surveyReadSidData);
}
}
/// <summary>
/// 拉取问卷
/// </summary>
public async void PostSurveyMatchlist()
{
try
{
PlayerData playerData = GContext.container.Resolve<PlayerData>();
if (playerData.lv < tables.TbGlobalConfig.SurveyLevelRequire)
{
return;
}
int register_days = (ZZTimeHelper.UtcNow() - userService.CreateTime).Days;
float totalPay = GContext.container.Resolve<PlayerShopData>().GetBuyPaymentAmount();
PostMatchlist post = new PostMatchlist
{
uid = userService.CustomId,//"318904",//
register_days = register_days,
language = userService.Language,
totalPay = totalPay,
level = playerData.lv,
vip = playerData.vip
};
matchlistData = null;
string boby = Newtonsoft.Json.JsonConvert.SerializeObject(post);
string url = $"{SurveyUrl}api/dwsurvey/anon/response/matchList.do?appId=17&platformName=ft";
string json = await customServerMgr.CustomServerPost(url, boby);
if (!string.IsNullOrEmpty(json) && json != "[]")
{
matchlistData = Newtonsoft.Json.JsonConvert.DeserializeObject<MatchlistData>(json);
}
//设置红点
SetRedPoint();
}
catch (Exception e)
{
Debug.LogError("PostSurveyMatchlist:" + e);
}
}
public string Sid
{
get
{
if (matchlistData != null && matchlistData.resultCode == 200 && matchlistData.data.Length > 0)
{
return matchlistData.data[0].sid;
}
return "";
}
}
public int Award
{
get
{
if (matchlistData != null && matchlistData.resultCode == 200 && matchlistData.data.Length > 0)
{
string award = matchlistData.data[0].award;
if (int.TryParse(award, out int result))
{
return result;
}
}
return 0;
}
}
void SetRedPoint()
{
if (string.IsNullOrEmpty(Sid) || readSid.Contains(Sid))
{
RedPointManager.Instance.SetRedPointState("menu.survey", false);
}
else
{
RedPointManager.Instance.SetRedPointState("menu.survey", true);
}
}
/// <summary>
/// 请求答题的链接
/// </summary>
/// <returns></returns>
public string GetSurveyAnswer()
{
string url = $"{SurveyUrl}static/diaowen/answer-p.html?";
string register_days = (ZZTimeHelper.UtcNow() - userService.CreateTime).Days.ToString();
string totalPay = GContext.container.Resolve<PlayerShopData>().GetBuyPaymentAmount().ToString();
PlayerData playerData = GContext.container.Resolve<PlayerData>();
url += $"sid={Sid}" +
"&platform=ft" +
$"&uid={userService.CustomId}" +
$"&language={userService.Language}" +
$"&register_days={register_days}" +
$"&extraInfo={playerData.lv}" +
$"&totalPay={totalPay}";
//标记已读
readSid.Add(Sid);
PlayFabMgr.Instance.UpdateUserDataValue(SurveyReadSidData, Newtonsoft.Json.JsonConvert.SerializeObject(readSid));
//设置红点
SetRedPoint();
return url;
}
/// <summary>
/// 检查是否能领奖
/// </summary>
public async void GetSurveyCheckAnswer()
{
try
{
string sid = Sid;
string url = $"{SurveyUrl}api/dwsurvey/anon/response/checkAnswer.do?";
url += $"uid={userService.CustomId}&surveySid={sid}&appId=17&platformName=ft";
//#if UNITY_EDITOR
// //测试
// url = "https://pt93-tyqnr.qijihdhk.com/api/dwsurvey/anon/response/checkAnswer.do?surveySid=8zij9i5&uid=1&platformName=ft&appId=17";
//#endif
matchlistData = null;
string json = await customServerMgr.GetStringAsync(url);
if (receivedReward.Contains(sid))
{
//Debug.Log("已经领过奖:" + json);
return;
}
if (!string.IsNullOrEmpty(json) && json != "[]")
{
SurveyCheckAnswerResult data = Newtonsoft.Json.JsonConvert.DeserializeObject<SurveyCheckAnswerResult>(json);
if (data.resultCode == 200 && data.data != null)
{
SurveyCheckAnswerData surveyCheckAnswerData = Newtonsoft.Json.JsonConvert.DeserializeObject<SurveyCheckAnswerData>(data.data);
var SurveyReward = tables.TbGlobalConfig.SurveyReward;
string awardStr = surveyCheckAnswerData.award;
if (int.TryParse(awardStr, out int award))
{
if (!SurveyReward.Contains(award))
{
Debug.LogError("问卷奖励错误: " + awardStr);
award = SurveyReward[0];
}
GContext.container.Resolve<PlayerItemData>().AddItemByDrop(award);
GContext.Publish(new ShowData());
receivedReward.Add(sid);
PlayFabMgr.Instance.UpdateUserDataValue(SurveyData, Newtonsoft.Json.JsonConvert.SerializeObject(receivedReward));
}
else
{
Debug.LogError("问卷奖励错误: " + awardStr);
}
}
}
}
catch (Exception e)
{
Debug.LogError("GetSurveyCheckAnswer:" + e);
}
}
class PostMatchlist
{
public string uid { get; set; }
public int register_days { get; set; }
public string language { get; set; }
public float totalPay { get; set; }
public int level { get; set; }
public int vip { get; set; }
}
}
public class MatchlistData
{
public int resultCode { get; set; }
public string resultMsg { get; set; }
public MatchlistDataInfo[] data { get; set; }
}
public class MatchlistDataInfo
{
public string award { get; set; }
public string defaultLanguage { get; set; }
public string[] languages { get; set; }
public string surveyNameText { get; set; }
public string id { get; set; }
public string creatDate { get; set; }
public string sid { get; set; }
public string title { get; set; }
public string introduce { get; set; }
}
public class SurveyCheckAnswerResult
{
public int resultCode { get; set; }
public string resultMsg { get; set; }
public string data { get; set; }
}
public class SurveyCheckAnswerData
{
public string award { get; set; }
public string extraInfo { get; set; }
}