userstats.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. const { models } = require('../db')
  2. const { validateField, handleAdd, handleUpdate, handleDelete, handleFindByField } = require('../common')
  3. /**
  4. *
  5. * 记录用户行为 表格 调 monitor_behavior(监听用户行为)
  6. *
  7. * 字段展示 用户名 根据 监听用户行为表 user_id 去 老师表(wx_teacher_user)里查_id是否相同 相同取园所名称(name)
  8. * 进入时间 —— start_time
  9. * 退出时间 —— end_time
  10. * 流量时长 —— duration
  11. * 修改后手机号 —— update_phone
  12. * 修改后收货人 —— update_name
  13. * 下单时间 —— createdAt
  14. *
  15. * 查询 调 monitor_behavior(监听用户行为)
  16. * createdAt —— 创建时间
  17. *
  18. *
  19. */
  20. /**
  21. * 新增
  22. * @param {*} user_id 用户Id
  23. * @param {*} type 用户端(0-教师 1-家长)
  24. * @param {*} duration 时长
  25. * @param {*} start_time 进入时间
  26. * @param {*} end_time 退出时间
  27. * @param {*} file_id 课件Id
  28. * @returns
  29. */
  30. async function addMmonitorBehavior(parameter) {
  31. const { user_id, type, duration, start_time, end_time, file_id } = parameter
  32. const v1 = validateField(user_id, 'user_id')
  33. if (!v1.flag) {
  34. return {
  35. success: false,
  36. msg: v1.msg
  37. }
  38. }
  39. const v2 = validateField(type, 'type')
  40. if (!v2.flag) {
  41. return {
  42. success: false,
  43. msg: v2.msg
  44. }
  45. }
  46. const v3 = validateField(file_id, 'file_id')
  47. if (!v3.flag) {
  48. return {
  49. success: false,
  50. msg: v3.msg
  51. }
  52. }
  53. const v4 = validateField(start_time, 'start_time')
  54. if (!v4.flag) {
  55. return {
  56. success: false,
  57. msg: v4.msg
  58. }
  59. }
  60. const data = {
  61. user_id, type, duration, start_time, end_time
  62. }
  63. return await handleAdd(parameter, data, 'monitor_behavior')
  64. }
  65. /**
  66. * 根据Id删除
  67. * @param {*} _id Id
  68. */
  69. async function deleteMmonitorBehavior(parameter) {
  70. const { _id } = parameter
  71. return handleDelete(parameter, _id, 'monitor_behavior')
  72. }
  73. /**
  74. * 编辑
  75. * @param {*} _id 主键Id
  76. * @param {*} user_id 用户Id
  77. * @param {*} type 用户端(0-教师 1-家长)
  78. * @param {*} duration 时长
  79. * @param {*} start_time 进入时间
  80. * @param {*} end_time 退出时间
  81. * @param {*} file_id 课件Id
  82. * @returns
  83. */
  84. async function updateMmonitorBehavior(parameter) {
  85. const { _id, user_id, type, duration, start_time, end_time, file_id } = parameter
  86. const obj = {}
  87. const v0 = validateField(_id, '_id')
  88. if (!v0.flag) {
  89. return {
  90. success: false,
  91. msg: v0.msg
  92. }
  93. }
  94. const v1 = validateField(user_id, 'user_id')
  95. if (v1.flag) {
  96. obj.user_id = user_id
  97. }
  98. const v2 = validateField(type, 'type')
  99. if (v2.flag) {
  100. obj.type = type
  101. }
  102. const v3 = validateField(duration, 'duration')
  103. if (v3.flag) {
  104. obj.duration = duration
  105. }
  106. const v4 = validateField(start_time, 'start_time')
  107. if (v4.flag) {
  108. obj.start_time = start_time
  109. }
  110. const v5 = validateField(end_time, 'end_time')
  111. if (v5.flag) {
  112. obj.end_time = end_time
  113. }
  114. const v6 = validateField(file_id, 'file_id')
  115. if (v6.flag) {
  116. obj.file_id = file_id
  117. }
  118. return await handleUpdate(parameter, _id, obj, 'monitor_behavior')
  119. }
  120. /**
  121. * 分页查询
  122. * @param {*} startTime 开始时间
  123. * @param {*} endTime 结束时间
  124. * @param {*} pageNum 当前页面
  125. * @param {*} pageSize 每页展示数量
  126. * @returns 分页数据
  127. */
  128. async function findMmonitorBehaviorPage(parameter) {
  129. const { startTime, endTime, pageNum, pageSize } = parameter
  130. const v1 = validateField(pageNum)
  131. if (!v1.flag) {
  132. return {
  133. success: false,
  134. records: [],
  135. msg: v1.msg
  136. }
  137. }
  138. const v2 = validateField(pageSize)
  139. if (!v2.flag) {
  140. return {
  141. success: false,
  142. records: [],
  143. msg: v2.msg
  144. }
  145. }
  146. // 查询参数
  147. const params = {
  148. pageNum,
  149. pageSize
  150. }
  151. // 拼接查询条件
  152. let condition = ""
  153. if (startTime != null && endTime != null) {
  154. condition += " where mb.createdAt >= {{startTime}} and mb.createdAt <= {{endTime}} "
  155. params.startTime = startTime
  156. params.endTime = endTime
  157. }
  158. const skip = (pageNum - 1) * pageSize
  159. // 查询sql
  160. const sql = "select " +
  161. "mb._id, " +
  162. "tu.user_name, " +
  163. "mb.start_time, " +
  164. "mb.end_time, " +
  165. "mb.duration, " +
  166. "mb.createdAt, " +
  167. "(select count(*) from download_history dh where dh.user_id = mb.user_id and mb.file_id = dh.file_manage_id) as total " +
  168. "from monitor_behavior mb " +
  169. "left join wx_teacher_user tu on mb.user_id = tu._id " +
  170. condition +
  171. " order by mb.createdAt desc " + "limit " + skip + ", " + pageSize
  172. const countSql = "select count(*) as total from monitor_behavior mb " +
  173. "left join wx_teacher_user tu on mb.user_id = tu._id " +
  174. condition
  175. try {
  176. // 查询数据sql
  177. const records = await models.$runSQL(sql, params)
  178. const count = await models.$runSQL(countSql, params)
  179. return {
  180. sql,
  181. countSql,
  182. params,
  183. success: true,
  184. msg: '查询成功',
  185. records: records.data.executeResultList,
  186. total: count.data.executeResultList[0].total
  187. }
  188. } catch (error) {
  189. return {
  190. success: false,
  191. msg: '查询失败',
  192. params,
  193. sql,
  194. countSql,
  195. error: error
  196. }
  197. }
  198. }
  199. /**
  200. * 根据Id查询
  201. * @param {*} _id Id
  202. */
  203. async function findMmonitorBehaviorById(parameter) {
  204. const { _id } = parameter
  205. return handleFindByField(parameter, _id, 'monitor_behavior')
  206. }
  207. module.exports = {
  208. addMmonitorBehavior,
  209. deleteMmonitorBehavior,
  210. updateMmonitorBehavior,
  211. findMmonitorBehaviorPage,
  212. findMmonitorBehaviorById,
  213. }