trans_login.go 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. package transaction
  2. import (
  3. "fmt"
  4. "runtime/debug"
  5. "strconv"
  6. "strings"
  7. "bet24.com/database"
  8. "bet24.com/log"
  9. )
  10. type trans_login_in struct {
  11. IMei string //IMei
  12. NickName string //昵称
  13. PartnerID int //渠道ID
  14. Version int //版本号
  15. IpAddress string //IP
  16. FaceUrl string //头像url
  17. Deviceid string //设备号
  18. DeviceName string // 设备名称
  19. Referrer string // 流量渠道追踪全解析
  20. MessageToken string // 推送消息token
  21. YyfUid int // 语聊房uid
  22. YyfFaceId string // 语聊房uid
  23. YyfName string // 语聊房昵称
  24. YyfGold int //语聊房金币
  25. PlatType int //平台类型1是语聊房,2是fb
  26. }
  27. type trans_login_out struct {
  28. RetCode int
  29. ErrorMsg string
  30. UserID int //用户ID
  31. NickName string //昵称
  32. FaceID int //头像ID
  33. FaceUrl string //头像url
  34. Password string //登陆密码(md5密文)
  35. Money int //金币数
  36. Bank int //保险柜
  37. PayAmount float64 //充值额度
  38. Sex int //性别
  39. VipLevel int //Vip等级
  40. ForbidTime string //封号时间
  41. SectionToken string
  42. UserWords string //个性签名
  43. Code int //推荐码
  44. IsGuest int //是否游客
  45. TeacherId int // 师父ID
  46. HigherUserID int // 上级ID
  47. Grade int // 代理等级
  48. Chip int // 筹码
  49. ChipBank int // 筹码保险柜
  50. ChipSend int // 筹码赠送
  51. AutoLoginChip int // 自动登录元宝大厅
  52. IsReturn bool // 是否回归用户,超过10天没有登录
  53. IsRegister bool // 是否新注册用户
  54. Currency string // 币种
  55. CurrencyIsModify int // 是否允许修改(1=允许修改 其他=禁止修改)
  56. UTMSource string // 注册流量渠道
  57. Charm int // 魅力值
  58. }
  59. type trans_login struct {
  60. database.Trans_base
  61. In trans_login_in
  62. Out trans_login_out
  63. }
  64. type Trans_login2 struct {
  65. database.Trans_base
  66. In trans_login_in
  67. Out trans_login_out
  68. }
  69. func NewTransLogin() *trans_login {
  70. return &trans_login{}
  71. }
  72. func (this *trans_login) DoAction(ch chan<- interface{},coin int) {
  73. defer func() {
  74. if err := recover(); err != nil {
  75. log.Release("transaction recover %v", err)
  76. log.Release("%s", debug.Stack())
  77. }
  78. if ch != nil {
  79. ch <- this
  80. }
  81. }()
  82. statement := database.NewStatement()
  83. statement.SetNeedReturnValue(false)
  84. statement.SetOpenRecordSet(true)
  85. //游客登陆
  86. statement.SetProcName("WS_AllUser_LoginByIMei")
  87. statement.AddParamter("@IMei", database.AdParamInput, database.AdVarChar, 64, this.In.IMei)
  88. statement.AddParamter("@NickName", database.AdParamInput, database.AdNVarChar, 32, this.In.NickName)
  89. statement.AddParamter("@PartnerID", database.AdParamInput, database.AdInteger, 4, this.In.PartnerID)
  90. statement.AddParamter("@Version", database.AdParamInput, database.AdInteger, 4, this.In.Version)
  91. statement.AddParamter("@IPAddress", database.AdParamInput, database.AdVarChar, 32, this.In.IpAddress)
  92. statement.AddParamter("@deviceid", database.AdParamInput, database.AdVarChar, 64, this.In.Deviceid)
  93. statement.AddParamter("@DeviceName", database.AdParamInput, database.AdNVarChar, 32, this.In.DeviceName)
  94. statement.AddParamter("@YyfAmount", database.AdParamInput, database.AdInteger, 4, coin)
  95. sqlstring := statement.GenSql()
  96. // log.Debug(sqlstring)
  97. retRows := CenterDB.ExecSql(sqlstring)
  98. if len(retRows) <= 0 {
  99. this.State = false
  100. return
  101. }
  102. this.State = true
  103. ret := retRows[0]
  104. this.Out.RetCode = int((ret[0]).(int64))
  105. this.Out.UserID = int((ret[1]).(int64))
  106. this.Out.NickName = (ret[2]).(string)
  107. this.Out.FaceID = int((ret[3]).(int64))
  108. this.Out.FaceUrl = (ret[4]).(string)
  109. this.Out.Password = (ret[5]).(string)
  110. this.Out.Money = int((ret[6]).(int64))
  111. payAmount := string(ret[7].([]byte))
  112. this.Out.PayAmount, _ = strconv.ParseFloat(payAmount, 64)
  113. this.Out.VipLevel = int((ret[8]).(int64))
  114. this.Out.ForbidTime = (ret[9]).(string)
  115. this.Out.Bank = int((ret[10]).(int64))
  116. this.Out.Sex = int((ret[11]).(int64))
  117. this.Out.UserWords = (ret[12]).(string)
  118. this.Out.Code = int((ret[13]).(int64))
  119. this.Out.IsGuest = int((ret[14]).(int64))
  120. this.Out.TeacherId = int((ret[15]).(int64))
  121. this.Out.HigherUserID = int((ret[16]).(int64))
  122. this.Out.Grade = int((ret[17]).(int64))
  123. this.Out.Chip = int((ret[18]).(int64))
  124. this.Out.ChipBank = int((ret[19]).(int64))
  125. this.Out.ChipSend = int((ret[20]).(int64))
  126. this.Out.AutoLoginChip = int((ret[21]).(int64))
  127. this.Out.IsReturn = int((ret[22]).(int64)) == 1
  128. this.Out.IsRegister = int((ret[23]).(int64)) == 1
  129. this.Out.Currency = (ret[24]).(string)
  130. this.Out.CurrencyIsModify = int((ret[25]).(int64))
  131. this.Out.UTMSource = (ret[26]).(string)
  132. if len(ret) > 27 {
  133. this.Out.Charm = int((ret[27]).(int64))
  134. }
  135. }
  136. func (this *trans_login) ChangeCoin(amount int,userid int) {
  137. defer func() {
  138. if err := recover(); err != nil {
  139. log.Release("transaction recover %v", err)
  140. log.Release("%s", debug.Stack())
  141. }
  142. // if ch != nil {
  143. // ch <- this
  144. // }
  145. }()
  146. // statement := database.NewStatement()
  147. // statement.SetNeedReturnValue(true)
  148. // statement.SetOpenRecordSet(false)
  149. // statement.SetProcName("WS_AllUser_ChangeCoin")
  150. // statement.AddParamter("@UserID", database.AdParamInput, database.AdInteger, 4, userid)
  151. // statement.AddParamter("@Amount", database.AdParamInput, database.AdInteger, 4, amount)
  152. // sqlstring := statement.GenSql()
  153. // // log.Debug(sqlstring)
  154. // retRows := CenterDB.ExecSql(sqlstring)
  155. // if len(retRows) <= 0 {
  156. // this.State = false
  157. // return
  158. // }
  159. // ret := retRows[0]
  160. // this.Out.RetCode = int((ret[0]).(int64))
  161. // this.State = true
  162. CenterDB.ExecSqlJson("update Money set Amount="+strconv.Itoa(amount)+"where UserId="+strconv.Itoa(userid))
  163. }
  164. // 流量渠道追踪全解析
  165. func (this *trans_login) UTMInsert() (string, string) {
  166. defer func() {
  167. if err := recover(); err != nil {
  168. log.Error("transaction recover err %v", err)
  169. log.Error("%s", debug.Stack())
  170. }
  171. }()
  172. // 没有渠道跟踪解析信息
  173. if this.In.Referrer == "" {
  174. return "", ""
  175. }
  176. // 流量渠道追踪全解析
  177. var (
  178. source string // 广告系列来源。用来标识搜索引擎、简报名称或其他来源。示例: utm_source=google
  179. medium string // 广告系列媒介。用来标识媒介,比如电子邮件或每次点击费用。示例:utm_medium=cpc
  180. term string // 广告系列字词。用于付费搜索,用来注明此广告的关键字。示例:utm_term=running+shoes
  181. content string // 广告系列内容。用于A/B测试和按内容进行定位的广告。区分指向同一网址的广告或链接。示例:utm_content=logolink或utm_content=textlink
  182. campaign string // 广告系列名称。用于关键字分析。用来标识特定的产品促销活动或战略性广告系列。示例:utm_campaign=spring_sale
  183. )
  184. referrers := strings.Split(this.In.Referrer, "&")
  185. for _, v := range referrers {
  186. params := strings.Split(v, "=")
  187. if len(params) != 2 {
  188. log.Release("loginByIMei.UTMInsert userId=%d keys=%s is invalid", this.Out.UserID, v)
  189. continue
  190. }
  191. name := params[0]
  192. value := params[1]
  193. switch name {
  194. case "gclid":
  195. source = "GoogleAd"
  196. content = params[1]
  197. case "adjust_external_click_id":
  198. source = "Adjust"
  199. content = value
  200. ss := strings.Split(content, "_")
  201. if len(ss) > 1 {
  202. source = fmt.Sprintf("%s_%s", source, ss[0])
  203. }
  204. case "utm_source":
  205. source = value
  206. case "utm_medium":
  207. medium = value
  208. case "utm_term":
  209. term = value
  210. case "utm_content":
  211. content = value
  212. case "utm_campaign":
  213. campaign = value
  214. default:
  215. source = name
  216. content = value
  217. log.Release("loginByIMei.UTMInsert userId=%d [%s]=[%s] not exist", this.Out.UserID, name, value)
  218. }
  219. }
  220. statement := database.NewStatement()
  221. statement.SetNeedReturnValue(false)
  222. statement.SetOpenRecordSet(false)
  223. statement.SetProcName("WS_UTM_Insert")
  224. statement.AddParamter("@UserID", database.AdParamInput, database.AdInteger, 4, this.Out.UserID)
  225. statement.AddParamter("@Source", database.AdParamInput, database.AdNVarChar, 128, source)
  226. statement.AddParamter("@Medium", database.AdParamInput, database.AdNVarChar, 128, medium)
  227. statement.AddParamter("@Term", database.AdParamInput, database.AdNVarChar, 128, term)
  228. statement.AddParamter("@Content", database.AdParamInput, database.AdNVarChar, 256, content)
  229. statement.AddParamter("@Campaign", database.AdParamInput, database.AdNVarChar, 128, campaign)
  230. sqlString := statement.GenSql()
  231. CenterDB.ExecSql(sqlString)
  232. return source, content
  233. }