sale_performance.go 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. package handlers
  2. import (
  3. "fmt"
  4. "net/http"
  5. "time"
  6. "easydo-echo_win7/models"
  7. "easydo-echo_win7/services"
  8. "easydo-echo_win7/utils"
  9. "easydo-echo_win7/middleware"
  10. "github.com/labstack/echo/v4"
  11. )
  12. func Add_sale_performance_to_routes(e *echo.Echo) {
  13. group := e.Group("/salePerformance")
  14. group.Use(middleware.AuthMiddleware)
  15. group.POST("/getTotalPrice", salePerformanceGetTotalPrice)
  16. group.POST("/getEcharts", salePerformanceGetEcharts)
  17. }
  18. func salePerformanceGetTotalPrice(c echo.Context) error {
  19. var paramMap map[string]interface{}
  20. if err := c.Bind(&paramMap); err != nil {
  21. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("参数解析失败", err.Error()))
  22. }
  23. tenantId := paramMap["tenantId"]
  24. now := time.Now()
  25. begin_date_by_year := time.Date(now.Year(), 1, 1, 0, 0, 0, 0, now.Location())
  26. end_date_by_year := time.Date(now.Year(), 12, 31, 0, 0, 0, 0, now.Location())
  27. begin_date_by_year_str := begin_date_by_year.Format(time.DateOnly)
  28. end_date_by_year_str := end_date_by_year.Format(time.DateOnly)
  29. begin_date_by_month := time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, now.Location())
  30. end_date_by_month := time.Date(now.Year(), now.Month()+1, 1, 0, 0, 0, 0, now.Location()).AddDate(0, 0, -1)
  31. begin_date_by_month_str := begin_date_by_month.Format(time.DateOnly)
  32. end_date_by_month_str := end_date_by_month.Format(time.DateOnly)
  33. sale_performance := new(models.SalePerformance)
  34. sqlStr := fmt.Sprintf(`
  35. select ifnull(sum(sale_amount),0) as sale_amount from sale_plan
  36. where begin_date = '%s' and end_date = '%s' and type = 'year'
  37. and tenant_id = '%s'`,
  38. begin_date_by_year_str, end_date_by_year_str, tenantId)
  39. row := services.MYSQL_DB.QueryRowx(sqlStr)
  40. sale_plan := new(models.SalePlan)
  41. err := services.JdbcClient.ScanRowToModel(row, sale_plan)
  42. if err != nil {
  43. utils.PrintSqlErr(err)
  44. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  45. }
  46. sale_performance.PlanSalePriceByYear = sale_plan.SaleAmount
  47. sqlStr = fmt.Sprintf(`
  48. select ifnull(sum(sale_amount),0) as sale_amount
  49. from sale_plan
  50. where begin_date = '%s' and end_date = '%s'
  51. and type = 'month' and tenant_id = '%s'`,
  52. begin_date_by_month_str, end_date_by_month_str, tenantId)
  53. row = services.MYSQL_DB.QueryRowx(sqlStr)
  54. sale_plan = new(models.SalePlan)
  55. err = services.JdbcClient.ScanRowToModel(row, sale_plan)
  56. if err != nil {
  57. utils.PrintSqlErr(err)
  58. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  59. }
  60. sale_performance.PlanSalePriceByMonth = sale_plan.SaleAmount
  61. sqlStr = fmt.Sprintf(`
  62. select ifnull(sum(actual_price),0) as actual_price
  63. from sale_order
  64. where order_date >= '%s' and order_date <= '%s'
  65. and tenant_id = '%s'`,
  66. begin_date_by_year_str, end_date_by_year_str, tenantId)
  67. row = services.MYSQL_DB.QueryRowx(sqlStr)
  68. sale_order := new(models.SaleOrder)
  69. err = services.JdbcClient.ScanRowToModel(row, sale_order)
  70. if err != nil {
  71. utils.PrintSqlErr(err)
  72. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  73. }
  74. sale_performance.ActualSalePriceByYear = sale_order.ActualPrice
  75. sqlStr = fmt.Sprintf(`
  76. select ifnull(sum(actual_price),0) as actual_price
  77. from sale_order
  78. where order_date >= '%s' and order_date <= '%s'
  79. and tenant_id = '%s'`,
  80. begin_date_by_month_str, end_date_by_month_str, tenantId)
  81. row = services.MYSQL_DB.QueryRowx(sqlStr)
  82. sale_order = new(models.SaleOrder)
  83. err = services.JdbcClient.ScanRowToModel(row, sale_order)
  84. if err != nil {
  85. utils.PrintSqlErr(err)
  86. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  87. }
  88. sale_performance.ActualSalePriceByMonth = sale_order.ActualPrice
  89. return c.JSON(http.StatusOK, sale_performance)
  90. }
  91. func salePerformanceGetEcharts(c echo.Context) error {
  92. var paramMap map[string]interface{}
  93. if err := c.Bind(&paramMap); err != nil {
  94. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("参数解析失败", err.Error()))
  95. }
  96. sale_performance := new(models.SalePerformance)
  97. search_type := paramMap["type"]
  98. begin_date := paramMap["beginDate"]
  99. end_date := paramMap["endDate"]
  100. tenantId := paramMap["tenantId"]
  101. if search_type == "month" {
  102. sqlStr := fmt.Sprintf(`
  103. select left(begin_date,7) as datestr, ifnull(sum(sale_amount),0) as price
  104. from sale_plan where begin_date >= '%s' and end_date <= '%s'
  105. and tenant_id = '%s'
  106. and type = 'month' group by begin_date`,
  107. begin_date, end_date, tenantId)
  108. rows, err := services.MYSQL_DB.Queryx(sqlStr)
  109. if err != nil {
  110. utils.PrintSqlErr(err)
  111. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  112. }
  113. sale_price_by_day := new(models.SalePriceByDay)
  114. result, err := services.JdbcClient.ScanRowToList(rows, sale_price_by_day)
  115. if err != nil {
  116. utils.PrintSqlErr(err)
  117. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  118. }
  119. plan_list := utils.ConvertInterface[[]models.SalePriceByDay](result)
  120. sale_performance.PlanList = &plan_list
  121. sqlStr = fmt.Sprintf(`
  122. select left(order_date,7) as datestr, ifnull(sum(actual_price),0) as price
  123. from sale_order where order_date >= '%s' and order_date <= '%s'
  124. and tenant_id = '%s'
  125. group by order_date`,
  126. begin_date, end_date, tenantId)
  127. rows, err = services.MYSQL_DB.Queryx(sqlStr)
  128. if err != nil {
  129. utils.PrintSqlErr(err)
  130. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  131. }
  132. sale_price_by_day = new(models.SalePriceByDay)
  133. result, err = services.JdbcClient.ScanRowToList(rows, sale_price_by_day)
  134. if err != nil {
  135. utils.PrintSqlErr(err)
  136. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  137. }
  138. actual_list := utils.ConvertInterface[[]models.SalePriceByDay](result)
  139. sale_performance.ActualList = &actual_list
  140. } else if search_type == "quarter" {
  141. sqlStr := fmt.Sprintf(`
  142. select CONCAT(YEAR(begin_date), '-Q', QUARTER(begin_date)) as datestr, ifnull(sum(sale_amount),0) as price
  143. from sale_plan where begin_date >= '%s' and end_date <= '%s'
  144. and tenant_id = '%s'
  145. and type = 'quarter' group by QUARTER(begin_date),YEAR(begin_date)`,
  146. begin_date, end_date, tenantId)
  147. rows, err := services.MYSQL_DB.Queryx(sqlStr)
  148. if err != nil {
  149. utils.PrintSqlErr(err)
  150. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  151. }
  152. sale_price_by_day := new(models.SalePriceByDay)
  153. result, err := services.JdbcClient.ScanRowToList(rows, sale_price_by_day)
  154. if err != nil {
  155. utils.PrintSqlErr(err)
  156. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  157. }
  158. plan_list := utils.ConvertInterface[[]models.SalePriceByDay](result)
  159. sale_performance.PlanList = &plan_list
  160. sqlStr = fmt.Sprintf(`
  161. select CONCAT(YEAR(order_date), '-Q', QUARTER(order_date)) as datestr, ifnull(sum(actual_price),0) as price
  162. from sale_order where order_date >= '%s' and order_date <= '%s'
  163. and tenant_id = '%s'
  164. group by QUARTER(order_date),YEAR(order_date)`,
  165. begin_date, end_date, tenantId)
  166. rows, err = services.MYSQL_DB.Queryx(sqlStr)
  167. if err != nil {
  168. utils.PrintSqlErr(err)
  169. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  170. }
  171. sale_price_by_day = new(models.SalePriceByDay)
  172. result, err = services.JdbcClient.ScanRowToList(rows, sale_price_by_day)
  173. if err != nil {
  174. utils.PrintSqlErr(err)
  175. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  176. }
  177. actual_list := utils.ConvertInterface[[]models.SalePriceByDay](result)
  178. sale_performance.ActualList = &actual_list
  179. } else if search_type == "year" {
  180. sqlStr := fmt.Sprintf(`
  181. select YEAR(begin_date) as datestr, ifnull(sum(sale_amount),0) as price
  182. from sale_plan where begin_date >= '%s' and end_date <= '%s'
  183. and tenant_id = '%s'
  184. and type = 'year' group by YEAR(begin_date)`,
  185. begin_date, end_date, tenantId)
  186. rows, err := services.MYSQL_DB.Queryx(sqlStr)
  187. if err != nil {
  188. utils.PrintSqlErr(err)
  189. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  190. }
  191. sale_price_by_day := new(models.SalePriceByDay)
  192. result, err := services.JdbcClient.ScanRowToList(rows, sale_price_by_day)
  193. if err != nil {
  194. utils.PrintSqlErr(err)
  195. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  196. }
  197. plan_list := utils.ConvertInterface[[]models.SalePriceByDay](result)
  198. sale_performance.PlanList = &plan_list
  199. sqlStr = fmt.Sprintf(`
  200. select YEAR(order_date) as datestr, ifnull(sum(actual_price),0) as price
  201. from sale_order where order_date >= '%s' and order_date <= '%s'
  202. and tenant_id = '%s'
  203. group by YEAR(order_date)`,
  204. begin_date, end_date, tenantId)
  205. rows, err = services.MYSQL_DB.Queryx(sqlStr)
  206. if err != nil {
  207. utils.PrintSqlErr(err)
  208. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  209. }
  210. sale_price_by_day = new(models.SalePriceByDay)
  211. result, err = services.JdbcClient.ScanRowToList(rows, sale_price_by_day)
  212. if err != nil {
  213. utils.PrintSqlErr(err)
  214. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  215. }
  216. actual_list := utils.ConvertInterface[[]models.SalePriceByDay](result)
  217. sale_performance.ActualList = &actual_list
  218. } else if search_type == "date" {
  219. sqlStr := fmt.Sprintf(`
  220. select order_date as date, ifnull(sum(actual_price),0) as price
  221. from sale_order where order_date >= '%s' and order_date <= '%s'
  222. and tenant_id = '%s'
  223. group by order_date`,
  224. begin_date, end_date, tenantId)
  225. rows, err := services.MYSQL_DB.Queryx(sqlStr)
  226. if err != nil {
  227. utils.PrintSqlErr(err)
  228. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  229. }
  230. sale_price_by_day := new(models.SalePriceByDay)
  231. result, err := services.JdbcClient.ScanRowToList(rows, sale_price_by_day)
  232. if err != nil {
  233. utils.PrintSqlErr(err)
  234. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  235. }
  236. list := utils.ConvertInterface[[]models.SalePriceByDay](result)
  237. sale_performance.ActualList = &list
  238. }
  239. return c.JSON(http.StatusOK, sale_performance)
  240. }