payment.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. const { models } = require('../db')
  2. const { validateField } = require('../common')
  3. /**
  4. *
  5. * 付款统计
  6. *
  7. */
  8. /**
  9. * 分页查询付款统计数据(按照班级分组)
  10. * @param {*} school_id 学校Id
  11. * @param {*} grade 年级
  12. * @param {*} pageNum 当前页
  13. * @param {*} pageSize 每页展示数量
  14. * @returns 分页数据
  15. */
  16. async function findPaymentPage(parameter) {
  17. const { school_id, grade, pageNum, pageSize } = parameter
  18. const v1 = validateField(pageNum)
  19. if (!v1.flag) {
  20. return {
  21. success: false,
  22. records: [],
  23. msg: v1.msg
  24. }
  25. }
  26. const v2 = validateField(pageSize)
  27. if (!v2.flag) {
  28. return {
  29. success: false,
  30. records: [],
  31. msg: v2.msg
  32. }
  33. }
  34. // 查询参数
  35. const params = {
  36. pageNum,
  37. pageSize
  38. }
  39. // 拼接查询条件
  40. let condition = ""
  41. if (school_id != null) {
  42. condition += " where s._id = {{school_id}} "
  43. params.school_id = school_id
  44. }
  45. if (grade != null) {
  46. if (condition) {
  47. condition += " and u.grade = {{grade}} "
  48. } else {
  49. condition += " where u.grade = {{grade}} "
  50. }
  51. params.grade = grade
  52. }
  53. const skip = (pageNum - 1) * pageSize
  54. // 查询sql
  55. const sql = "select * " +
  56. "from (select s.name as schoolName, " +
  57. " u.grade as grade, " +
  58. " count(IF(o.status IN (0, 3), o._id, NULL)) as unpaidCount, " +
  59. " count(IF(o.status IN (1, 2), o._id, NULL)) as paidCount, " +
  60. " sum(IF(o.status IN (0, 3), o.real_money, 0)) as unpaidMoney, " +
  61. " sum(IF(o.status IN (1, 2), o.real_money, 0)) as paidMoney " +
  62. " from orders o " +
  63. " left join wx_user u on o.user_id = u._id " +
  64. " left join wx_school s on u.school_id = s._id " +
  65. condition +
  66. " group by s.name, u.grade) as t " +
  67. "limit " + skip + ", " + pageSize
  68. const countSql = "select count(*) as total " +
  69. "from (select s.name as schoolName," +
  70. " u.grade as grade, " +
  71. " count(IF(o.status IN (0, 3), o._id, NULL)) as unpaidCount, " +
  72. " count(IF(o.status IN (1, 2), o._id, NULL)) as paidCount, " +
  73. " sum(IF(o.status IN (0, 3), o.real_money, 0)) as unpaidMoney, " +
  74. " sum(IF(o.status IN (1, 2), o.real_money, 0)) as paidMoney " +
  75. " from orders o " +
  76. " left join wx_user u on o.user_id = u._id " +
  77. " left join wx_school s on u.school_id = s._id " +
  78. condition +
  79. " group by s.name, u.grade) as t "
  80. try {
  81. // 查询数据sql
  82. const records = await models.$runSQL(sql, params)
  83. const count = await models.$runSQL(countSql, params)
  84. return {
  85. sql,
  86. countSql,
  87. params,
  88. success: true,
  89. msg: '查询成功',
  90. records: records.data.executeResultList,
  91. total: count.data.executeResultList[0].total
  92. }
  93. } catch (error) {
  94. return {
  95. success: false,
  96. msg: '查询失败',
  97. params,
  98. sql,
  99. countSql,
  100. error: error
  101. }
  102. }
  103. }
  104. /**
  105. * 分页查询付款统计数据(按照学校分组)
  106. * @param {*} school_id 学校Id
  107. * @param {*} pageNum 当前页
  108. * @param {*} pageSize 每页展示数量
  109. * @returns 分页数据
  110. */
  111. async function findPaymentPageBySchool(parameter) {
  112. const { school_id, pageNum, pageSize } = parameter
  113. const v1 = validateField(pageNum)
  114. if (!v1.flag) {
  115. return {
  116. success: false,
  117. records: [],
  118. msg: v1.msg
  119. }
  120. }
  121. const v2 = validateField(pageSize)
  122. if (!v2.flag) {
  123. return {
  124. success: false,
  125. records: [],
  126. msg: v2.msg
  127. }
  128. }
  129. // 查询参数
  130. const params = {
  131. pageNum,
  132. pageSize
  133. }
  134. // 拼接查询条件
  135. let condition = ""
  136. if (school_id != null) {
  137. condition += " where s._id = {{school_id}} "
  138. params.school_id = school_id
  139. }
  140. const skip = (pageNum - 1) * pageSize
  141. // 查询sql
  142. const sql = "select * " +
  143. "from (select s.name as schoolName, " +
  144. " count(IF(o.status IN (0, 3), o._id, NULL)) as unpaidCount, " +
  145. " count(IF(o.status IN (1, 2), o._id, NULL)) as paidCount, " +
  146. " sum(IF(o.status IN (0, 3), o.real_money, 0)) as unpaidMoney, " +
  147. " sum(IF(o.status IN (1, 2), o.real_money, 0)) as paidMoney " +
  148. " from orders o " +
  149. " left join wx_user u on o.user_id = u._id " +
  150. " left join wx_school s on u.school_id = s._id " +
  151. condition +
  152. " group by s.name) as t " +
  153. "limit " + skip + ", " + pageSize
  154. const countSql = "select count(*) as total " +
  155. "from (select s.name as schoolName," +
  156. " u.grade as grade, " +
  157. " count(IF(o.status IN (0, 3), o._id, NULL)) as unpaidCount, " +
  158. " count(IF(o.status IN (1, 2), o._id, NULL)) as paidCount, " +
  159. " sum(IF(o.status IN (0, 3), o.real_money, 0)) as unpaidMoney, " +
  160. " sum(IF(o.status IN (1, 2), o.real_money, 0)) as paidMoney " +
  161. " from orders o " +
  162. " left join wx_user u on o.user_id = u._id " +
  163. " left join wx_school s on u.school_id = s._id " +
  164. condition +
  165. " group by s.name, u.grade) as t "
  166. try {
  167. // 查询数据sql
  168. const records = await models.$runSQL(sql, params)
  169. const count = await models.$runSQL(countSql, params)
  170. return {
  171. sql,
  172. countSql,
  173. params,
  174. success: true,
  175. msg: '查询成功',
  176. records: records.data.executeResultList,
  177. total: count.data.executeResultList[0].total
  178. }
  179. } catch (error) {
  180. return {
  181. success: false,
  182. msg: '查询失败',
  183. params,
  184. sql,
  185. countSql,
  186. error: error
  187. }
  188. }
  189. }
  190. module.exports = {
  191. findPaymentPage,
  192. findPaymentPageBySchool,
  193. }