123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. package statistics
  2. import (
  3. "errors"
  4. "spaceofcheng/services/models/model"
  5. "spaceofcheng/services/utils"
  6. "strconv"
  7. )
  8. // GetGoodsStatistics 获取商品统计数据
  9. func (c *StatisticsController) GetGoodsStatistics() {
  10. page, _ := c.GetInt("page")
  11. pagesize, _ := c.GetInt("pagesize")
  12. caseids := c.GetString("caseid")
  13. name := c.GetString("name")
  14. typeid := c.GetString("typeid")
  15. if caseids == "" {
  16. cases := c.Context.Get("cases").([]model.SysUserCase)
  17. caseids = c.GetCaseIDs(cases)
  18. }
  19. goodsList, err := c.serv.GetGoodsStatistics(caseids, typeid, name, page, pagesize)
  20. if err != nil {
  21. c.ResponseError(err)
  22. }
  23. c.ResponseJSON(goodsList)
  24. }
  25. // GetGoodsStatisticsExcel 商品统计导出
  26. func (c *StatisticsController) GetGoodsStatisticsExcel() {
  27. caseids := c.GetString("caseid")
  28. name := c.GetString("name")
  29. typeid := c.GetString("typeid")
  30. if caseids == "" {
  31. cases := c.Context.Get("cases").([]model.SysUserCase)
  32. caseids = c.GetCaseIDs(cases)
  33. }
  34. list, err := c.serv.GetGoodsStatisticsExcel(caseids, typeid, 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. for _, item := range list {
  53. row := excel.InsertRow()
  54. price, err := strconv.ParseFloat(item.Price, 64)
  55. if err != nil {
  56. c.ResponseError(errors.New("金额类型不正确!"))
  57. }
  58. amount := price * float64(item.FinishTotal)
  59. excel.SetCell(row, []string{
  60. item.CaseName,
  61. item.GoodsName,
  62. item.TypeName,
  63. item.Price,
  64. strconv.Itoa(item.Total),
  65. strconv.Itoa(item.FinishTotal),
  66. strconv.FormatFloat(amount, 'f', -1, 64),
  67. })
  68. }
  69. c.SaveToExcel("商品统计列表.xlsx", excel)
  70. }
  71. // GetGoodsOrdersStatistics 获取商品订单统计数据
  72. func (c *StatisticsController) GetGoodsOrdersStatistics() {
  73. page, _ := c.GetInt("page")
  74. pagesize, _ := c.GetInt("pagesize")
  75. caseids := c.GetString("caseid")
  76. status := c.GetString("status")
  77. usertype := c.GetString("usertype")
  78. begindate := c.GetString("begindate")
  79. enddate := c.GetString("enddate")
  80. paytype := c.GetString("paytype")
  81. if caseids == "" {
  82. cases := c.Context.Get("cases").([]model.SysUserCase)
  83. caseids = c.GetCaseIDs(cases)
  84. }
  85. goodsList, err := c.serv.GetGoodsOrdersStatistics(status, usertype, caseids, begindate, enddate, paytype, page, pagesize)
  86. if err != nil {
  87. c.ResponseError(err)
  88. }
  89. c.ResponseJSON(goodsList)
  90. }
  91. // GetGoodsOrdersStatisticsExcel 商品订单统计导出
  92. func (c *StatisticsController) GetGoodsOrdersStatisticsExcel() {
  93. caseids := c.GetString("caseid")
  94. status := c.GetString("status")
  95. usertype := c.GetString("usertype")
  96. begindate := c.GetString("begindate")
  97. enddate := c.GetString("enddate")
  98. paytype := c.GetString("paytype")
  99. if caseids == "" {
  100. cases := c.Context.Get("cases").([]model.SysUserCase)
  101. caseids = c.GetCaseIDs(cases)
  102. }
  103. list, err := c.serv.GetGoodsOrdersStatisticsExcel(status, usertype, caseids, begindate, enddate, paytype)
  104. if err != nil {
  105. c.ResponseError(err)
  106. }
  107. excel, err := utils.NewTinyXLSXEngine()
  108. if err != nil {
  109. utils.LogError("初始化Excel服务失败: " + err.Error())
  110. c.ResponseError(errors.New("初始化Excel服务失败"))
  111. }
  112. excel.SetCell(excel.InsertRow(), []string{
  113. "订单编号",
  114. "案场",
  115. "用户类型",
  116. "下单时间",
  117. "订单状态",
  118. "商品",
  119. "数量",
  120. "单价",
  121. "桌位",
  122. "下单人",
  123. "电话",
  124. })
  125. for _, item := range list {
  126. usertype := ""
  127. switch item.UserType {
  128. case "customer":
  129. usertype = "用户"
  130. break
  131. case "sales":
  132. usertype = "销售"
  133. break
  134. case "manager":
  135. usertype = "主管"
  136. break
  137. }
  138. orderStatus := ""
  139. if item.Status == 1 {
  140. orderStatus = "已完成"
  141. } else {
  142. orderStatus = "已取消"
  143. }
  144. for _, detail := range item.Details {
  145. row := excel.InsertRow()
  146. name := detail.GoodsName
  147. if detail.SpecName != "" {
  148. name = name + "(" + detail.SpecName + ")"
  149. }
  150. // price, err := strconv.ParseFloat(detail.Price, 64)
  151. // if err != nil {
  152. // c.ResponseError(errors.New("金额类型不正确!"))
  153. // }
  154. // amount := price * float64(detail.Number)
  155. excel.SetCell(row, []string{
  156. item.OrdersNo,
  157. item.CaseName,
  158. usertype,
  159. item.CreateDate.Format("2006-01-02 15:04:05"),
  160. orderStatus,
  161. name,
  162. strconv.Itoa(detail.Number),
  163. detail.Price,
  164. item.AreaName + item.TableNo,
  165. item.CustomerName,
  166. item.Phone,
  167. })
  168. }
  169. }
  170. c.SaveToExcel("商品订单统计列表.xlsx", excel)
  171. }