lottery.go 6.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. package controllers
  2. import (
  3. "annual-lottery2/models"
  4. "annual-lottery2/models/model"
  5. "annual-lottery2/utils"
  6. "encoding/json"
  7. "errors"
  8. "net/http"
  9. "strconv"
  10. "github.com/astaxie/beego"
  11. )
  12. // LotteryController 基础controller
  13. type LotteryController struct {
  14. dao *models.LotteryModel
  15. BaseController
  16. }
  17. // Constructor 初始化
  18. func (c *LotteryController) Constructor() {
  19. c.dao = new(models.LotteryModel)
  20. }
  21. // UserList 获取人员名单
  22. // @router /user [get]
  23. func (c *LotteryController) UserList() {
  24. users, err := c.dao.UserList()
  25. if err != nil {
  26. beego.Error("获取人员名单失败,", err)
  27. c.ResponseJson(errors.New("获取人员名单失败"))
  28. return
  29. }
  30. c.ResponseJson(map[string]interface{}{
  31. "users": users,
  32. })
  33. }
  34. // PrizeSettingList 获取抽奖设置列表
  35. // @router /setting/prize [get]
  36. func (c *LotteryController) PrizeSettingList() {
  37. ps, err := c.dao.PrizeSettingList()
  38. if err != nil {
  39. beego.Error("获取抽奖设置列表失败,", err)
  40. c.ResponseJson(errors.New("获取抽奖设置列表失败"))
  41. return
  42. }
  43. c.ResponseJson(map[string]interface{}{
  44. "settings": ps,
  45. })
  46. }
  47. // PrizeSetting 抽奖设置
  48. // @router /setting/prize/?:id [post,put,delete]
  49. func (c *LotteryController) PrizeSetting() {
  50. id := c.GetString(":id")
  51. bt := []byte(c.GetString("data"))
  52. ps := model.TaPrizeSetting{}
  53. mp := make(map[string]interface{})
  54. if err := json.Unmarshal(bt, &mp); err != nil {
  55. beego.Error("转换抽奖设置数据失败,", err)
  56. c.ResponseJson(errors.New("接收抽奖配置失败"))
  57. return
  58. }
  59. utils.Map2Struct(mp, &ps)
  60. switch c.Ctx.Input.Method() {
  61. case http.MethodPost:
  62. ps.SettingId = 0
  63. if err := c.dao.PrizeSetting(&ps, models.DATA_ADD); err != nil {
  64. beego.Error("新增抽奖设置失败,", err)
  65. c.ResponseJson(errors.New("新增抽奖设置失败"))
  66. return
  67. }
  68. case http.MethodPut:
  69. if id == "" {
  70. c.ResponseJson(errors.New("抽奖设置ID不能为空"), http.StatusBadRequest)
  71. return
  72. }
  73. ps.SettingId, _ = strconv.Atoi(id)
  74. if err := c.dao.PrizeSetting(&ps, models.DATA_UPDATE); err != nil {
  75. beego.Error("更新抽奖设置失败,", err)
  76. c.ResponseJson(errors.New("更新抽奖设置失败"))
  77. return
  78. }
  79. case http.MethodDelete:
  80. if id == "" {
  81. c.ResponseJson(errors.New("抽奖设置ID不能为空"), http.StatusBadRequest)
  82. return
  83. }
  84. ps.PrizeId, _ = strconv.Atoi(id)
  85. if err := c.dao.PrizeSetting(&ps, models.DATA_DELETE); err != nil {
  86. beego.Error("删除抽奖设置失败,", err)
  87. c.ResponseJson(errors.New("删除抽奖设置失败"))
  88. return
  89. }
  90. default:
  91. c.ResponseJson(errors.New("404"), http.StatusNotFound)
  92. return
  93. }
  94. // 返回最新结果
  95. c.PrizeSettingList()
  96. }
  97. // Draw 抽奖
  98. // @router /draw [post]
  99. func (c *LotteryController) Draw() {
  100. pw, err := c.dao.Draw()
  101. if err != nil {
  102. beego.Error("抽奖失败,", err)
  103. c.ResponseJson(errors.New("抽奖失败, 请重试"))
  104. return
  105. }
  106. c.ResponseJson(map[string]interface{}{
  107. "winner": pw,
  108. })
  109. }
  110. // PrizeList 奖品列表
  111. // @router /prize [get]
  112. func (c *LotteryController) PrizeList() {
  113. pl, err := c.dao.PrizeList()
  114. if err != nil {
  115. beego.Error("获取奖品列表失败,", err)
  116. c.ResponseJson(errors.New("获取奖品列表失败"))
  117. return
  118. }
  119. c.ResponseJson(map[string]interface{}{
  120. "prizes": pl,
  121. })
  122. }
  123. // PrizeEdit 奖品维护
  124. // @router /prize/?:id [post,put,delete]
  125. func (c *LotteryController) PrizeEdit() {
  126. id := c.GetString(":id")
  127. bt := []byte(c.GetString("data"))
  128. ps := model.TaPrize{}
  129. mp := make(map[string]interface{})
  130. if err := json.Unmarshal(bt, &mp); err != nil {
  131. beego.Error("转换奖品数据失败,", err)
  132. c.ResponseJson(errors.New("接收奖品数据失败"))
  133. return
  134. }
  135. utils.Map2Struct(mp, &ps)
  136. switch c.Ctx.Input.Method() {
  137. case http.MethodPost:
  138. ps.PrizeId = 0
  139. if err := c.dao.PrizeEdit(&ps, models.DATA_ADD); err != nil {
  140. beego.Error("新增奖品数据失败,", err)
  141. c.ResponseJson(errors.New("新增奖品数据失败"))
  142. return
  143. }
  144. case http.MethodPut:
  145. if id == "" {
  146. c.ResponseJson(errors.New("奖品数据ID不能为空"), http.StatusBadRequest)
  147. return
  148. }
  149. ps.PrizeId, _ = strconv.Atoi(id)
  150. if err := c.dao.PrizeEdit(&ps, models.DATA_UPDATE); err != nil {
  151. beego.Error("更新奖品数据失败,", err)
  152. c.ResponseJson(errors.New("更新奖品数据失败"))
  153. return
  154. }
  155. case http.MethodDelete:
  156. if id == "" {
  157. c.ResponseJson(errors.New("奖品数据ID不能为空"), http.StatusBadRequest)
  158. return
  159. }
  160. ps.PrizeId, _ = strconv.Atoi(id)
  161. if err := c.dao.PrizeEdit(&ps, models.DATA_DELETE); err != nil {
  162. beego.Error("删除奖品数据失败,", err)
  163. c.ResponseJson(errors.New("删除奖品数据失败"))
  164. return
  165. }
  166. default:
  167. c.ResponseJson(errors.New("404"), http.StatusNotFound)
  168. return
  169. }
  170. // 返回最新结果
  171. c.PrizeList()
  172. }
  173. // WinnerList 中奖人员名单
  174. // @router /winner [get]
  175. func (c *LotteryController) WinnerList() {
  176. typ := c.GetString("type")
  177. name := c.GetString("name")
  178. delStr := c.GetString("del")
  179. del, _ := strconv.Atoi(delStr)
  180. var wl []model.TaPrizeWinner
  181. var err error
  182. if delStr == "" {
  183. wl, err = c.dao.WinnerList(typ, name)
  184. if err != nil {
  185. beego.Error("获取中奖人员名单失败,", err)
  186. c.ResponseJson(errors.New("获取中奖人员名单失败"))
  187. return
  188. }
  189. } else {
  190. wl, err = c.dao.WinnerList(typ, name, del)
  191. if err != nil {
  192. beego.Error("获取中奖人员名单失败,", err)
  193. c.ResponseJson(errors.New("获取中奖人员名单失败"))
  194. return
  195. }
  196. }
  197. c.ResponseJson(map[string]interface{}{
  198. "winners": wl,
  199. })
  200. }
  201. // CancelWinner 作废中奖人员
  202. // @router /winner/:uid [delete]
  203. func (c *LotteryController) CancelWinner() {
  204. pid, _ := c.GetInt("pid")
  205. uid, _ := c.GetInt(":uid")
  206. if err := c.dao.CancelWinner(pid, uid); err != nil {
  207. beego.Error("作废中奖人员失败,", err)
  208. c.ResponseJson(errors.New("作废中奖人员失败"))
  209. return
  210. }
  211. c.ResponseJson(map[string]interface{}{
  212. "result": "success",
  213. })
  214. }
  215. // ExportWinners 导出中奖名单
  216. // @router /excel/winner [get]
  217. func (c *LotteryController) ExportWinners() {
  218. typ := c.GetString("type")
  219. del := models.STATUS_NORMAL
  220. wl, err := c.dao.WinnerList(typ, "", del)
  221. if err != nil {
  222. beego.Error("获取中奖人员名单失败,", err)
  223. c.ResponseJson(errors.New("获取中奖人员名单失败"))
  224. return
  225. }
  226. excel, err := utils.NewTinyXLSXEngine()
  227. if err != nil {
  228. beego.Error("导出中奖人员名单失败,", err)
  229. c.ResponseJson(errors.New("导出中奖人员名单失败"))
  230. return
  231. }
  232. excel.SetCell(
  233. excel.InsertRow(),
  234. []string{
  235. "序号",
  236. "中奖人",
  237. "公司",
  238. "部门",
  239. "分类",
  240. "奖品",
  241. },
  242. )
  243. for k, w := range wl {
  244. row := excel.InsertRow()
  245. excel.SetCell(row, []string{
  246. strconv.Itoa(k + 1),
  247. w.UserName,
  248. w.UserOrg,
  249. w.UserDept,
  250. w.PrizeType,
  251. w.PrizeName,
  252. })
  253. }
  254. c.SaveToExcel("中奖名单.xlsx", excel)
  255. }