HomeServer/Server/AllServer/GameServer/Questionnaire.lua

77 lines
3.1 KiB
Lua
Raw Permalink Normal View History

2024-11-20 15:41:09 +08:00
local skynet = require "skynet"
local oo = require "Class"
local log = require "Log"
local pb = require "pb"
local redisKeyUrl = require "RedisKeyUrl"
local sqlUrl = require "SqlUrl"
local dataType = require "DataType"
local json = require "json"
local errorInfo = require "ErrorInfo"
local mail = require "Mail"
local Questionnaire = oo.class()
Questionnaire.issueType_2 = 2 --第二期问卷调查
Questionnaire.issueType_3 = 3 --第三期问卷调查
Questionnaire.issueType_4 = 4 --第四期问卷调查
function Questionnaire:Init()
end
--问卷调查显示
function Questionnaire:Show( player , c2sData , s2cData )
c2sData.data = assert(pb.decode("C2SQuestionnaireShow", c2sData.data ))
local level = player.gameData.level
local data = {}
local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg( player , "SValue")
-- 玩家等级达到35级才可以显示问卷调查
if cfgSValue.QuestionnaireUnlockLvl <= level and not player.gameData.questionnaire.isFinish then
data.canShow = true
else
data.canShow = false
end
s2cData.cmd = pb.enum("MsgType","CMD_S2C_QuestionnaireShow")
s2cData.data = assert(pb.encode("S2CQuestionnaireShow", data))
end
--问卷调查提交
function Questionnaire:Submit( player , c2sData , s2cData )
c2sData.data = assert(pb.decode("C2SQuestionnaireSubmit", c2sData.data ))
local data = {}
data.award ={}
local questionInfos = c2sData.data.questionInfo
-- 遍历问卷 判读玩家是否全部完成
local finish = true
for k , v in pairs(questionInfos) do
for x , y in pairs(v.option) do
-- 如果选项为空 则退出
if not y then
-- 没有回答选项的id
local questionId = v.questionId
finish = false
end
end
end
-- 如果完成了 发放奖励 同时将数据保存在数据库中
if finish and not player.gameData.questionnaire.isFinish then
local eventId = pb.enum("EnumMoneyChangeEventID","EventID_37")
player:MoneyChange(dataType.GoodsType_Volute , 50 , eventId)
--将问卷数据保存到后台
local param = { account = player.account, questionInfo = json:encode( c2sData.data ) , issue = self.issueType_4 }
local web = skynet.server.gameConfig.WebConfig.host .. ":" .. skynet.server.gameConfig.WebConfig.port
local url = skynet.server.common.addQuestionnaireUrl
local status,body = skynet.server.httpClient:PostJson( web , url , json:encode(param),"http")
local newbody = json:decode(body)
if 200 ~= status or 200 ~= newbody.code then
log.info("保存问卷数据失败 玩家:" , player.account , "数据:" , json:encode( c2sData.data ) )
end
else
s2cData.code = errorInfo.ErrorCode.QuestionnaireNoFinish
end
player.gameData.questionnaire.isFinish = true
s2cData.cmd = pb.enum("MsgType","CMD_S2C_QuestionnaireSubmit")
s2cData.data = assert(pb.encode("S2CQuestionnaireSubmit", data))
end
skynet.server.questionnaire = Questionnaire
return Questionnaire