社区APP问答模块,设计思想:主要为了满足用户在发表疑问及遇到的问题的时候可以发表。 1 发表问答模块,需要保存数据库及内存数据库 2 获取问答列表,主要是读取内存数据库的数据。 3 问答列表及评论的分页模式;这个可以用pagenumber或者时间戳获取分页数据;这个如果大家想了解可以微信公众账号获取交流群里交流。 4 大家互相学习,我技术一般,有错误的请大家见谅哈。 发表问答及保存数据及内存数据库代码:
// 发表一个问答
func (this *OnlineUser) PlayerSendAnwerInfoFun(ProtocolData map[string]interface{}) {
Log_Eio.Log("Entry PlayerSendAnwerInfoFun")
Log_Eio.Fmt("Entry PlayerSendAnwerInfoFun")
// 获取客户端传递的数据
iAuthorRoleUID := ProtocolData["AuthorRoleUID"].(float64) // 用户的唯一的UID 信息
strAuthorName := ProtocolData["AuthorName"].(string) // 发表问答的人的名字
strAuthorIcon := ProtocolData["AuthorIcon"].(string) // 发表问答的人的ICON
strAnswerContent := ProtocolData["AnswerContent"].(string) // 发辫问答的内容
// 写数据的操作的数据信息
bret := dbif.PlayerAnswerDataSaveDBFun(int32(iAuthorRoleUID), strAuthorName, strAuthorIcon, strAnswerContent)
if bret == false {
Log_Eio.Log("Entry PlayerAnswerDataSaveDBFun Save Data Fail!!!")
Log_Eio.Fmt("Entry PlayerAnswerDataSaveDBFun Save Data Fail!!!")
// 需要传输的数据的结构
SendAnswerinfo := Proto2_Data.HS2C_SendAnswer{
Protocol: Proto_Data.Go_Of_Answer_Proto, // 主协议
Protocol2: Proto2_Data.HS2C_SendAnswer_Proto, // 子协议
IsSucc: false, // 发表失败
}
// 发送给玩家数据
this.PlayerSendMessage(SendAnswerinfo)
return
}
// 需要传输的数据的结构
SendAnswerinfo := Proto2_Data.HS2C_SendAnswer{
Protocol: Proto_Data.Go_Of_Answer_Proto, // 主协议
Protocol2: Proto2_Data.HS2C_SendAnswer_Proto, // 子协议
IsSucc: true, // 发表成功
}
// 发送给玩家数据
this.PlayerSendMessage(SendAnswerinfo)
return
}
----------------------------------------------------------------------------------------------------
数据保存数据:
// 发表问答社区,保存到数据库
func PlayerAnswerDataSaveDBFun(iAuthorRoleUID int32, strAuthorName string, strAuthorIcon string, strAnswerContent string) bool {
var strSql string
var tmpAnswerInfo Global_Define.StAnswerInfo
// MySQL数据库语句
strSql = "INSERT INTO t_AnswerInfo(AuthorRoleUID,AuthorName,AuthorIcon,AnswerContent,InsertTime)" +
"VALUES( ?, ?, ?, ?, ?)"
stmt, err := GSeverdb.Prepare(strSql)
if err != nil {
Log_Eio.Log(err.Error())
Log_Eio.Fmt("11111", err.Error())
return false
}
//时间戳到具体显示的转化
iLastLoginTime := time.Now().Unix()
// 数据库写入执行 ,插入数据的操作。
res, err := stmt.Exec(iAuthorRoleUID, strAuthorName, strAuthorIcon, strAnswerContent, iLastLoginTime)
if err != nil {
Log_Eio.Log(err.Error())
Log_Eio.Fmt("11111", err.Error())
return false
}
// 获取帖子的ID
strSqlS := "select AnswerId from t_AnswerInfo where AuthorName = '" + strAuthorName + "' AND InsertTime = '" + strconv.Itoa(int(iLastLoginTime)) + "'"
Log_Eio.Log(strSqlS)
Log_Eio.Fmt(strSqlS)
Rows, err1 := GSeverdb.Query(strSqlS)
if err != nil {
Log_Eio.Log(err1.Error())
Log_Eio.Fmt(err1.Error())
return false
}
var TMPstrId int
defer Rows.Close()
for Rows.Next() {
err11 := Rows.Scan(&TMPstrId)
if err11 != nil {
Log_Eio.Fmt(err11)
}
}
// 日志的打印数据更新
Log_Eio.Fmt(res)
// 整合数据
tmpAnswerInfo.AuthorRoleUID = strconv.Itoa(int(iAuthorRoleUID))
tmpAnswerInfo.AuthorName = strAuthorName
tmpAnswerInfo.AuthorIcon = strAuthorIcon
tmpAnswerInfo.AnswerContent = strAnswerContent
tmpAnswerInfo.Instertime = strconv.Itoa(int(iLastLoginTime))
tmpAnswerInfo.Answerid = strconv.Itoa(int(TMPstrId))
// 更新到内存数据库
Redis_DB.Redis_Write_AnswerInfoData(strconv.Itoa(int(iLastLoginTime)), tmpAnswerInfo)
return true
}
----------------------------------------------------------------------------------------------------
数据保存到内存数据库:
// 用户产生一条问答
// hkey : 为 问答产生的时间戳: Instertime
func Redis_Write_AnswerInfoData(strkey_Instertime string, stAnswerInfo Global_Define.StAnswerInfo) bool {
Log_Eio.Log("Entry Redis_Write_AnswerInfoData")
Log_Eio.Fmt("Entry Redis_Write_AnswerInfoData")
// 数据的存储
itimekey, _ := strconv.Atoi(stAnswerInfo.Instertime)
bytetmp, _ := json.Marshal(stAnswerInfo)
_, error := GRedis_Client.Zadd(AnswerInfoKey, float64(itimekey), bytetmp)
if error != nil {
Log_Eio.Fmt("GRedis_Client.Zadd: Set data ", error)
Log_Eio.Log("GRedis_Client.Zadd: Set data ", error.Error())
return false
}
return true
}