qznn.go 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395
  1. package qznn
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "time"
  6. "github.com/sirupsen/logrus"
  7. "gogs.daxia.dev/huanan/pkg.daxia.dev/db"
  8. "gogs.daxia.dev/huanan/pkg.daxia.dev/time_utils"
  9. "gorm.io/gorm"
  10. gameQZ "nn.daxia.dev/game/qznn"
  11. "nn.daxia.dev/gameproto"
  12. "nn.daxia.dev/handler/api"
  13. "nn.daxia.dev/model"
  14. "nn.daxia.dev/nxd"
  15. )
  16. type GetRecordListReq struct {
  17. Page int `json:"page"`
  18. PageSize int `json:"page_size"`
  19. DayRange int `json:"day_range"`
  20. }
  21. type GetOpenRecordListReq struct {
  22. RoomID int `josn:"room_id"`
  23. Page int `json:"page"`
  24. PageSize int `json:"page_size"`
  25. DayRange int `json:"day_range"`
  26. }
  27. type ReadyReq struct {
  28. }
  29. type UnReadyReq struct {
  30. }
  31. type ChooseMasterReq struct {
  32. Mul int
  33. }
  34. type ChooseMulReq struct {
  35. Mul int
  36. }
  37. type OpenReq struct {
  38. }
  39. type ConnectReq struct {
  40. }
  41. type DisconnectReq struct {
  42. }
  43. func Ready(req api.PerformReq) error {
  44. var err error
  45. userModel := req.UserModel
  46. readyReq := ReadyReq{}
  47. err = json.Unmarshal(req.Msg, &readyReq)
  48. if err != nil {
  49. logrus.Error(err)
  50. return err
  51. }
  52. gameInstance := gameQZ.GetInstance()
  53. err = gameInstance.Ready(int32(userModel.ID))
  54. if err != nil {
  55. logrus.Error(err)
  56. nxd.FailedResponse(req.Once, uint32(userModel.ID), err.Error())
  57. return err
  58. }
  59. nxd.SuccessResponse(req.Once, uint32(userModel.ID), nil)
  60. return nil
  61. }
  62. func UnReady(req api.PerformReq) error {
  63. var err error
  64. userModel := req.UserModel
  65. unReadyReq := UnReadyReq{}
  66. err = json.Unmarshal(req.Msg, &unReadyReq)
  67. if err != nil {
  68. logrus.Error(err)
  69. return err
  70. }
  71. gameInstance := gameQZ.GetInstance()
  72. err = gameInstance.UnReady(int32(userModel.ID))
  73. if err != nil {
  74. logrus.Error(err)
  75. nxd.FailedResponse(req.Once, uint32(userModel.ID), err.Error())
  76. return err
  77. }
  78. nxd.SuccessResponse(req.Once, uint32(userModel.ID), nil)
  79. return nil
  80. }
  81. func ChooseMaster(req api.PerformReq) error {
  82. var err error
  83. userModel := req.UserModel
  84. chooseMasterReq := ChooseMasterReq{}
  85. err = json.Unmarshal(req.Msg, &chooseMasterReq)
  86. if err != nil {
  87. logrus.Error(err)
  88. return err
  89. }
  90. gameInstance := gameQZ.GetInstance()
  91. err = gameInstance.ChooseMaster(int32(userModel.ID), int32(chooseMasterReq.Mul))
  92. if err != nil {
  93. logrus.Error(err)
  94. nxd.FailedResponse(req.Once, uint32(userModel.ID), err.Error())
  95. return err
  96. }
  97. nxd.SuccessResponse(req.Once, uint32(userModel.ID), nil)
  98. return nil
  99. }
  100. func ChooseMul(req api.PerformReq) error {
  101. var err error
  102. userModel := req.UserModel
  103. chooseMulReq := ChooseMulReq{}
  104. err = json.Unmarshal(req.Msg, &chooseMulReq)
  105. if err != nil {
  106. logrus.Error(err)
  107. return err
  108. }
  109. gameInstance := gameQZ.GetInstance()
  110. err = gameInstance.ChooseMul(int32(userModel.ID), int32(chooseMulReq.Mul))
  111. if err != nil {
  112. logrus.Error(err)
  113. nxd.FailedResponse(req.Once, uint32(userModel.ID), err.Error())
  114. return err
  115. }
  116. nxd.SuccessResponse(req.Once, uint32(userModel.ID), nil)
  117. return nil
  118. }
  119. func Open(req api.PerformReq) error {
  120. var err error
  121. userModel := req.UserModel
  122. openReq := OpenReq{}
  123. err = json.Unmarshal(req.Msg, &openReq)
  124. if err != nil {
  125. logrus.Error(err)
  126. return err
  127. }
  128. gameInstance := gameQZ.GetInstance()
  129. err = gameInstance.OpenCard(int32(userModel.ID))
  130. if err != nil {
  131. logrus.Error(err)
  132. nxd.FailedResponse(req.Once, uint32(userModel.ID), err.Error())
  133. return err
  134. }
  135. nxd.SuccessResponse(req.Once, uint32(userModel.ID), nil)
  136. return nil
  137. }
  138. func GetRecordList(req api.PerformReq) error {
  139. var err error
  140. userModel := req.UserModel
  141. getRecordListReq := GetRecordListReq{}
  142. err = json.Unmarshal(req.Msg, &getRecordListReq)
  143. if err != nil {
  144. logrus.Error(err)
  145. nxd.FailedResponse(req.Once, uint32(userModel.ID), err.Error())
  146. return err
  147. }
  148. orderModelList := make([]model.GameOrder, 0)
  149. recordRespList := make([]*gameproto.GameRecordItem, 0)
  150. total := int64(0)
  151. page := getRecordListReq.Page
  152. pageSize := getRecordListReq.PageSize
  153. queryDB := db.GetDB().Model(model.GameOrder{}).Where("user_id = ?", userModel.ID)
  154. var startIssue time.Time
  155. var endIssue time.Time
  156. tz := time_utils.GetCNZone()
  157. timeNow := time.Now().In(tz)
  158. switch getRecordListReq.DayRange {
  159. case 1:
  160. startIssue, _ = time.ParseInLocation("2006-01-02 15:04:05", timeNow.Format("2006-01-02")+" 00:00:00", tz)
  161. endIssue, _ = time.ParseInLocation("2006-01-02 15:04:05", timeNow.Format("2006-01-02")+" 23:59:59", tz)
  162. case 2:
  163. timeYesterday := timeNow.Add(-1 * time.Hour * 24)
  164. startIssue, _ = time.ParseInLocation("2006-01-02 15:04:05", timeYesterday.Format("2006-01-02")+" 00:00:00", tz)
  165. endIssue, _ = time.ParseInLocation("2006-01-02 15:04:05", timeYesterday.Format("2006-01-02")+" 23:59:59", tz)
  166. case 3:
  167. startIssue = time_utils.GetFirstDateOfWeek(timeNow)
  168. endIssue = time_utils.GetLastDateOfWeek(timeNow)
  169. case 4:
  170. startIssue = time_utils.GetFirstDateOfMonth(timeNow)
  171. endIssue = time_utils.GetLastDateOfMonth(timeNow)
  172. default:
  173. return errors.New("day range 错误")
  174. }
  175. err = queryDB.
  176. Where("created_at >= ? and created_at <= ?", startIssue, endIssue).
  177. Count(&total).Error
  178. if err != nil {
  179. err = errors.New("内部错误(Q101)")
  180. logrus.Error(err)
  181. nxd.FailedResponse(req.Once, uint32(userModel.ID), err.Error())
  182. return err
  183. }
  184. if total == 0 {
  185. nxd.SuccessResponse(req.Once, uint32(userModel.ID), &gameproto.GameRecordResp{
  186. Total: int32(total),
  187. RecordList: recordRespList,
  188. })
  189. return nil
  190. }
  191. err = queryDB.Offset((page - 1) * pageSize).
  192. Limit(pageSize).
  193. Order("id desc").
  194. Scan(&orderModelList).
  195. Error
  196. if err == gorm.ErrRecordNotFound {
  197. nxd.SuccessResponse(req.Once, uint32(userModel.ID), &gameproto.GameRecordResp{
  198. Total: int32(total),
  199. RecordList: recordRespList,
  200. })
  201. return nil
  202. }
  203. if err != nil {
  204. err = errors.New("内部错误(Q102)")
  205. logrus.Error(err)
  206. nxd.FailedResponse(req.Once, uint32(userModel.ID), err.Error())
  207. return err
  208. }
  209. for _, orderModel := range orderModelList {
  210. recordRespList = append(recordRespList, &gameproto.GameRecordItem{
  211. CreatedAt: orderModel.CreatedAt.Unix(),
  212. RoomID: int64(orderModel.RoomID),
  213. RoomType: int32(orderModel.RoomType),
  214. Issue: orderModel.Issue,
  215. OpenNumber: orderModel.OpenNumber,
  216. BaseAmount: orderModel.BaseAmount.StringFixed(2),
  217. IsDraw: int32(orderModel.IsDraw),
  218. DrawTime: orderModel.DrawTime.Unix(),
  219. IsMaster: int32(orderModel.IsMaster),
  220. MasterMul: int32(orderModel.MasterMul),
  221. Mul: int32(orderModel.Mul),
  222. IsWin: int32(orderModel.IsWin),
  223. WinAmount: orderModel.WinAmount.StringFixed(2),
  224. })
  225. }
  226. nxd.SuccessResponse(req.Once, uint32(userModel.ID), &gameproto.GameRecordResp{
  227. Total: int32(total),
  228. RecordList: recordRespList,
  229. })
  230. return nil
  231. }
  232. func GetOpenRecordList(req api.PerformReq) error {
  233. var err error
  234. userModel := req.UserModel
  235. getOpenRecordListReq := GetOpenRecordListReq{}
  236. err = json.Unmarshal(req.Msg, &getOpenRecordListReq)
  237. if err != nil {
  238. logrus.Error(err)
  239. nxd.FailedResponse(req.Once, uint32(userModel.ID), err.Error())
  240. return err
  241. }
  242. openLogModelList := make([]model.GameOpenLogQP, 0)
  243. openLogRespList := make([]*gameproto.GameOpenRecordItem, 0)
  244. total := int64(0)
  245. page := getOpenRecordListReq.Page
  246. pageSize := getOpenRecordListReq.PageSize
  247. roomID := getOpenRecordListReq.RoomID
  248. queryDB := db.GetDB().Model(model.GameOpenLogQP{}).Where("user_id = ?", userModel.ID)
  249. var startTime time.Time
  250. var endTime time.Time
  251. tz := time_utils.GetCNZone()
  252. timeNow := time.Now().In(tz)
  253. switch getOpenRecordListReq.DayRange {
  254. case 1:
  255. startTime, _ = time.ParseInLocation("2006-01-02 15:04:05", timeNow.Format("2006-01-02")+" 00:00:00", tz)
  256. endTime, _ = time.ParseInLocation("2006-01-02 15:04:05", timeNow.Format("2006-01-02")+" 23:59:59", tz)
  257. case 2:
  258. timeYesterday := timeNow.Add(-1 * time.Hour * 24)
  259. startTime, _ = time.ParseInLocation("2006-01-02 15:04:05", timeYesterday.Format("2006-01-02")+" 00:00:00", tz)
  260. endTime, _ = time.ParseInLocation("2006-01-02 15:04:05", timeYesterday.Format("2006-01-02")+" 23:59:59", tz)
  261. case 3:
  262. startTime = time_utils.GetFirstDateOfWeek(timeNow)
  263. endTime = time_utils.GetLastDateOfWeek(timeNow)
  264. case 4:
  265. startTime = time_utils.GetFirstDateOfMonth(timeNow)
  266. endTime = time_utils.GetLastDateOfMonth(timeNow)
  267. default:
  268. return errors.New("day range 错误")
  269. }
  270. err = queryDB.
  271. Where("open_time >= ? and open_time <= ? and room_id = ?", startTime, endTime, roomID).
  272. Count(&total).Error
  273. if err != nil {
  274. err = errors.New("内部错误(Q101)")
  275. logrus.Error(err)
  276. nxd.FailedResponse(req.Once, uint32(userModel.ID), err.Error())
  277. return err
  278. }
  279. if total == 0 {
  280. nxd.SuccessResponse(req.Once, uint32(userModel.ID), &gameproto.GameOpenRecordResp{
  281. Total: int32(total),
  282. OpenRecordList: openLogRespList,
  283. })
  284. return nil
  285. }
  286. err = queryDB.Offset((page - 1) * pageSize).
  287. Limit(pageSize).
  288. Order("id desc").
  289. Scan(&openLogModelList).
  290. Error
  291. if err == gorm.ErrRecordNotFound {
  292. nxd.SuccessResponse(req.Once, uint32(userModel.ID), &gameproto.GameOpenRecordResp{
  293. Total: int32(total),
  294. OpenRecordList: openLogRespList,
  295. })
  296. return nil
  297. }
  298. if err != nil {
  299. err = errors.New("内部错误(Q102)")
  300. logrus.Error(err)
  301. nxd.FailedResponse(req.Once, uint32(userModel.ID), err.Error())
  302. return err
  303. }
  304. for _, openLogModel := range openLogModelList {
  305. openLogRespList = append(openLogRespList, &gameproto.GameOpenRecordItem{
  306. RoomID: int64(openLogModel.RoomID),
  307. RoomType: openLogModel.RoomType,
  308. Issue: openLogModel.Issue,
  309. OpenNumber1: openLogModel.OpenNumber1,
  310. OpenNumber2: openLogModel.OpenNumber2,
  311. OpenNumber3: openLogModel.OpenNumber3,
  312. OpenNumber4: openLogModel.OpenNumber4,
  313. OpenNumber5: openLogModel.OpenNumber5,
  314. OpenTime: openLogModel.OpenTime.Unix(),
  315. Hash: openLogModel.Hash,
  316. })
  317. }
  318. nxd.SuccessResponse(req.Once, uint32(userModel.ID), &gameproto.GameOpenRecordResp{
  319. Total: int32(total),
  320. OpenRecordList: openLogRespList,
  321. })
  322. return nil
  323. }