123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. package statistics
  2. import (
  3. "errors"
  4. "spaceofcheng/services/models/model"
  5. "spaceofcheng/services/utils"
  6. "strconv"
  7. )
  8. // CardCouponStatistics 获取卡券统计数据
  9. func (c *StatisticsController) CardCouponStatistics() {
  10. page, _ := c.GetInt("page")
  11. pagesize, _ := c.GetInt("pagesize")
  12. caseids := c.GetString("caseid")
  13. name := c.GetString("name")
  14. ctype := c.GetString("ctype")
  15. if caseids == "" {
  16. cases := c.Context.Get("cases").([]model.SysUserCase)
  17. caseids = c.GetCaseIDs(cases)
  18. }
  19. list, err := c.serv.CardCouponStatistics(caseids, ctype, name, page, pagesize)
  20. if err != nil {
  21. c.ResponseError(err)
  22. }
  23. c.ResponseJSON(list)
  24. }
  25. // CardCouponStatisticsExcel 获取卡券统计数据
  26. func (c *StatisticsController) CardCouponStatisticsExcel() {
  27. caseids := c.GetString("caseid")
  28. name := c.GetString("name")
  29. ctype := c.GetString("ctype")
  30. if caseids == "" {
  31. cases := c.Context.Get("cases").([]model.SysUserCase)
  32. caseids = c.GetCaseIDs(cases)
  33. }
  34. list, err := c.serv.CardCouponStatisticsExcel(caseids, ctype, name)
  35. if err != nil {
  36. c.ResponseError(err)
  37. }
  38. excel, err := utils.NewTinyXLSXEngine()
  39. if err != nil {
  40. utils.LogError("初始化Excel服务失败: " + err.Error())
  41. c.ResponseError(errors.New("初始化Excel服务失败"))
  42. }
  43. excel.SetCell(excel.InsertRow(), []string{
  44. "案场",
  45. "卡券名称",
  46. "卡券类型",
  47. "发送类型",
  48. "价格",
  49. "领取数",
  50. "实际使用数",
  51. "总费用",
  52. })
  53. for _, item := range list {
  54. row := excel.InsertRow()
  55. sendtype := ""
  56. switch item.SendType {
  57. case "system":
  58. sendtype = "系统"
  59. break
  60. case "case":
  61. sendtype = "案场"
  62. break
  63. case "channel":
  64. sendtype = "渠道"
  65. break
  66. }
  67. price, err := strconv.ParseFloat(item.Price, 64)
  68. if err != nil {
  69. c.ResponseError(errors.New("金额类型不正确!"))
  70. }
  71. amount := price * float64(item.UsedCount)
  72. excel.SetCell(row, []string{
  73. item.CaseName,
  74. item.CName,
  75. item.TypeName,
  76. sendtype,
  77. item.Price,
  78. strconv.Itoa(item.SentCount),
  79. strconv.Itoa(item.UsedCount),
  80. strconv.FormatFloat(amount, 'f', -1, 64),
  81. })
  82. }
  83. c.SaveToExcel("卡券统计列表.xlsx", excel)
  84. }
  85. // CardCouponUsedStatistics 获取卡券使用统计数据
  86. func (c *StatisticsController) CardCouponUsedStatistics() {
  87. page, _ := c.GetInt("page")
  88. pagesize, _ := c.GetInt("pagesize")
  89. caseids := c.GetString("caseid")
  90. name := c.GetString("name")
  91. receivetype := c.GetString("receivetype")
  92. tel := c.GetString("tel")
  93. begindate := c.GetString("begindate")
  94. enddate := c.GetString("enddate")
  95. status := c.GetString("status")
  96. if caseids == "" {
  97. cases := c.Context.Get("cases").([]model.SysUserCase)
  98. caseids = c.GetCaseIDs(cases)
  99. }
  100. list, err := c.serv.CardCouponUsedStatistics(caseids, tel, name, receivetype, begindate, enddate, status, page, pagesize)
  101. if err != nil {
  102. c.ResponseError(err)
  103. }
  104. c.ResponseJSON(list)
  105. }
  106. // CardCouponUsedStatisticsExcel 卡券使用导出
  107. func (c *StatisticsController) CardCouponUsedStatisticsExcel() {
  108. caseids := c.GetString("caseid")
  109. name := c.GetString("name")
  110. receivetype := c.GetString("receivetype")
  111. tel := c.GetString("tel")
  112. begindate := c.GetString("begindate")
  113. enddate := c.GetString("enddate")
  114. status := c.GetString("status")
  115. if caseids == "" {
  116. cases := c.Context.Get("cases").([]model.SysUserCase)
  117. caseids = c.GetCaseIDs(cases)
  118. }
  119. list, err := c.serv.CardCouponUsedStatisticsExcel(caseids, tel, name, receivetype, begindate, enddate, status)
  120. if err != nil {
  121. c.ResponseError(err)
  122. }
  123. excel, err := utils.NewTinyXLSXEngine()
  124. if err != nil {
  125. utils.LogError("初始化Excel服务失败: " + err.Error())
  126. c.ResponseError(errors.New("初始化Excel服务失败"))
  127. }
  128. excel.SetCell(excel.InsertRow(), []string{
  129. "案场",
  130. "卡券名称",
  131. "使用商品",
  132. "获取方式",
  133. "微信昵称",
  134. "手机号",
  135. "销售",
  136. "有效期",
  137. "获取时间",
  138. "使用时间",
  139. "状态",
  140. })
  141. for _, item := range list {
  142. row := excel.InsertRow()
  143. receivetype := ""
  144. switch item.ReceivingType {
  145. case "event":
  146. receivetype = "系统"
  147. break
  148. case "sales":
  149. receivetype = "案场"
  150. break
  151. case "channel":
  152. receivetype = "渠道"
  153. break
  154. case "give":
  155. receivetype = "后台赠送"
  156. break
  157. }
  158. verifystatus := ""
  159. switch item.VerifyStatus {
  160. case "useable":
  161. verifystatus = "未使用"
  162. break
  163. case "used":
  164. verifystatus = "已使用"
  165. break
  166. case "late":
  167. verifystatus = "逾期核销"
  168. break
  169. case "expire":
  170. verifystatus = "已失效"
  171. break
  172. }
  173. excel.SetCell(row, []string{
  174. item.CaseName,
  175. item.CardCouponName,
  176. item.TargetName,
  177. receivetype,
  178. item.CustomerName,
  179. item.Phone,
  180. item.SalesName,
  181. item.EndDate.Format("2006-01-02 15:04:05"),
  182. item.ReceiveDate.Format("2006-01-02 15:04:05"),
  183. item.UsedDate.Format("2006-01-02 15:04:05"),
  184. verifystatus,
  185. })
  186. }
  187. c.SaveToExcel("卡券使用列表.xlsx", excel)
  188. }
  189. // CardCouponVerifyStatistics 获取卡券核销统计数据
  190. func (c *StatisticsController) CardCouponVerifyStatistics() {
  191. page, _ := c.GetInt("page")
  192. pagesize, _ := c.GetInt("pagesize")
  193. caseids := c.GetString("caseid")
  194. name := c.GetString("name")
  195. tel := c.GetString("tel")
  196. status := c.GetString("status")
  197. if caseids == "" {
  198. cases := c.Context.Get("cases").([]model.SysUserCase)
  199. caseids = c.GetCaseIDs(cases)
  200. }
  201. list, err := c.serv.CardCouponVerifyStatistics(caseids, tel, name, status, page, pagesize)
  202. if err != nil {
  203. c.ResponseError(err)
  204. }
  205. c.ResponseJSON(list)
  206. }
  207. // CardCouponVerifyStatisticsExcel 卡券核销统计导出
  208. func (c *StatisticsController) CardCouponVerifyStatisticsExcel() {
  209. caseids := c.GetString("caseid")
  210. name := c.GetString("name")
  211. tel := c.GetString("tel")
  212. status := c.GetString("status")
  213. if caseids == "" {
  214. cases := c.Context.Get("cases").([]model.SysUserCase)
  215. caseids = c.GetCaseIDs(cases)
  216. }
  217. list, err := c.serv.CardCouponVerifyStatisticsExcel(caseids, tel, name, status)
  218. if err != nil {
  219. c.ResponseError(err)
  220. }
  221. excel, err := utils.NewTinyXLSXEngine()
  222. if err != nil {
  223. utils.LogError("初始化Excel服务失败: " + err.Error())
  224. c.ResponseError(errors.New("初始化Excel服务失败"))
  225. }
  226. excel.SetCell(excel.InsertRow(), []string{
  227. "案场",
  228. "课程名称",
  229. "课程时间",
  230. "姓名",
  231. "微信昵称",
  232. "手机号",
  233. "下单时间",
  234. "核销时间",
  235. "状态",
  236. })
  237. for _, item := range list {
  238. row := excel.InsertRow()
  239. verifystatus := ""
  240. switch item.VerifyStatus {
  241. case "useable":
  242. verifystatus = "未核销"
  243. break
  244. case "used":
  245. verifystatus = "已核销"
  246. break
  247. case "late":
  248. verifystatus = "逾期核销"
  249. break
  250. }
  251. verifydate := ""
  252. if !item.VerifyDate.IsZero() {
  253. verifydate = item.VerifyDate.Format("2006-01-02 15:04:05")
  254. }
  255. excel.SetCell(row, []string{
  256. item.CaseName,
  257. item.CourseName,
  258. item.BeginDate.Format("2006-01-02 15:04:05") + "~" + item.EndDate.Format("2006-01-02 15:04:05"),
  259. item.Name,
  260. item.CustomerName,
  261. item.Phone,
  262. item.CreateDate.Format("2006-01-02 15:04:05"),
  263. verifydate,
  264. verifystatus,
  265. })
  266. }
  267. c.SaveToExcel("课程核销列表.xlsx", excel)
  268. }