order.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385
  1. const { models } = require('../db')
  2. const { validateField, handleAdd, handleUpdate, handleDelete, handleFindByField } = require('../common')
  3. /**
  4. *
  5. * 订单管理 表格 调 orders(订单表)
  6. *
  7. * 字段展示 用户名 根据 订单表 user_id 去 家长表(wx_user)里查_id是否相同 相同取园所名称(name)
  8. * 规格 —— groupbuy_id 根据 订单表 groupbuy_id 去 规格表(wx_groupbuy_groupbuy)里查_id是否相同 相同取园所名称(spec)
  9. * 团购名称 —— merchandise_id 根据 订单表 merchandise_id 去 商品表(wx_merchandise)里查_id是否相同 相同取园所名称(name)
  10. * 下单数量 —— num_index
  11. * 订单状态(0-待付款 1-待收货 2-已完成 3-已取消) —— status
  12. * 收货方式(0-邮寄1-自提) —— eventstarttime
  13. * 订单号 —— order_id
  14. * 物流单号 —— tracking_number
  15. * 修改前地址、 修改前手机号、 修改前收货人 这三字段需要根据 地址id(adresses_id)去 地址表(adresses)里查_id是否相同 相同取园所名称(收货人:name、手机号:phone、地址:address )
  16. * 修改后地址 —— updat_adress
  17. * 修改后手机号 —— update_phone
  18. * 修改后收货人 —— update_name
  19. * 下单时间 —— createdAt
  20. *
  21. * 查询 调 orders(订单表)
  22. * merchandise_id —— 团购名称 根据 订单表 merchandise_id 去 商品表(wx_merchandise)里查_id是否相同 相同取园所名称(name)
  23. * user_id —— 用户名 根据 订单表 user_id 去 家长表(wx_user)里查_id是否相同 相同取园所名称(name)
  24. * status —— 订单状态(0-待付款 1-待收货 2-已完成 3-已取消)
  25. * order_id —— 订单号
  26. * tracking_number —— 物流单号
  27. *
  28. * 编辑订单 改 orders(订单表)
  29. * 修改后姓名 —— update_name
  30. * 修改后手机号 —— update_phone
  31. * 修改后地址 —— updat_adress
  32. * 填写物流单号 改 orders(订单表)
  33. * 传 _id、 tracking_number 根据 _id 查到 订单表里面的那条数据里面的 tracking_number 更新这个数据
  34. *
  35. * 删除 调 orders(订单表)
  36. * 传 _id
  37. *
  38. *
  39. */
  40. /**
  41. * 新增
  42. * @param {*} order_id 订单Id
  43. * @param {*} user_id 用户Id
  44. * @param {*} merchandise_id 商品Id
  45. * @param {*} groupbuy_id 规格Id
  46. * @param {*} num_index 购买数量
  47. * @param {*} real_money 实际付款金额
  48. * @param {*} adresses_id 地址id
  49. * @param {*} tracking_number 物流单号
  50. * @param {*} update_phone 修改后的手机号
  51. * @param {*} update_name 修改后的收货人
  52. * @param {*} updat_adress 修改后地址
  53. * @param {*} status 0-待付款 1-待收货 2-已完成 3-已取消
  54. * @returns
  55. */
  56. async function addOrder(parameter) {
  57. const { order_id, user_id, merchandise_id, groupbuy_id, num_index, real_money, adresses_id, tracking_number, update_phone, update_name, updat_adress, status } = parameter
  58. const v1 = validateField(order_id, 'order_id')
  59. if (!v1.flag) {
  60. return {
  61. success: false,
  62. msg: v1.msg
  63. }
  64. }
  65. const v2 = validateField(user_id, 'user_id')
  66. if (!v2.flag) {
  67. return {
  68. success: false,
  69. msg: v2.msg
  70. }
  71. }
  72. const v3 = validateField(merchandise_id, 'merchandise_id')
  73. if (!v3.flag) {
  74. return {
  75. success: false,
  76. msg: v3.msg
  77. }
  78. }
  79. const v4 = validateField(groupbuy_id, 'groupbuy_id')
  80. if (!v4.flag) {
  81. return {
  82. success: false,
  83. msg: v4.msg
  84. }
  85. }
  86. const v5 = validateField(num_index, 'num_index')
  87. if (!v5.flag) {
  88. return {
  89. success: false,
  90. msg: v5.msg
  91. }
  92. }
  93. const v6 = validateField(real_money, 'real_money')
  94. if (!v6.flag) {
  95. return {
  96. success: false,
  97. msg: v6.msg
  98. }
  99. }
  100. const v7 = validateField(adresses_id, 'adresses_id')
  101. if (!v7.flag) {
  102. return {
  103. success: false,
  104. msg: v7.msg
  105. }
  106. }
  107. const data = {
  108. order_id, user_id, merchandise_id, groupbuy_id, num_index, real_money, adresses_id, tracking_number, update_phone, update_name, updat_adress, status: status == null ? 0 : status
  109. }
  110. return await handleAdd(parameter, data, 'orders')
  111. }
  112. /**
  113. * 根据Id删除
  114. * @param {*} _id 主键Id
  115. */
  116. async function deleteOrder(parameter) {
  117. const { _id } = parameter
  118. try {
  119. // 更新数据
  120. const result = await models.orders.update({
  121. data: { delete: 1 },
  122. filter: {
  123. where: {
  124. _id: {
  125. $eq: _id
  126. }
  127. }
  128. }
  129. })
  130. return {
  131. success: true,
  132. msg: '删除数据成功',
  133. data: result,
  134. }
  135. } catch (error) {
  136. return {
  137. success: false,
  138. msg: '删除数据失败',
  139. error: error,
  140. parameter
  141. }
  142. }
  143. }
  144. /**
  145. * 编辑
  146. * @param {*} _id 主键Id
  147. * @param {*} order_id 订单号
  148. * @param {*} user_id 用户Id
  149. * @param {*} merchandise_id 商品Id
  150. * @param {*} groupbuy_id 规格Id
  151. * @param {*} num_index 购买数量
  152. * @param {*} real_money 实际付款金额
  153. * @param {*} adresses_id 地址Id
  154. * @param {*} tracking_number 物流单号
  155. * @param {*} update_phone 修改后的手机号
  156. * @param {*} update_name 修改后的收货人
  157. * @param {*} updat_adress 修改后地址
  158. * @param {*} status 订单状态
  159. * @returns
  160. */
  161. async function updateOrder(parameter) {
  162. const { _id, order_id, user_id, merchandise_id, groupbuy_id, num_index, real_money, adresses_id, tracking_number, update_phone, update_name, updat_adress, status } = parameter
  163. const obj = {}
  164. const v0 = validateField(_id, '_id')
  165. if (!v0.flag) {
  166. return {
  167. success: false,
  168. msg: v0.msg
  169. }
  170. }
  171. const v1 = validateField(order_id, 'order_id')
  172. if (v1.flag) {
  173. obj.order_id = order_id
  174. }
  175. const v2 = validateField(user_id, 'user_id')
  176. if (v2.flag) {
  177. obj.user_id = user_id
  178. }
  179. const v3 = validateField(merchandise_id, 'merchandise_id')
  180. if (v3.flag) {
  181. obj.merchandise_id = merchandise_id
  182. }
  183. const v4 = validateField(groupbuy_id, 'groupbuy_id')
  184. if (v4.flag) {
  185. obj.groupbuy_id = groupbuy_id
  186. }
  187. const v5 = validateField(num_index, 'num_index')
  188. if (v5.flag) {
  189. obj.num_index = num_index
  190. }
  191. const v6 = validateField(real_money, 'real_money')
  192. if (v6.flag) {
  193. obj.real_money = real_money
  194. }
  195. const v7 = validateField(adresses_id, 'adresses_id')
  196. if (v7.flag) {
  197. obj.adresses_id = adresses_id
  198. }
  199. const v8 = validateField(tracking_number, 'tracking_number')
  200. if (v8.flag) {
  201. obj.tracking_number = tracking_number
  202. }
  203. const v9 = validateField(update_phone, 'update_phone')
  204. if (v9.flag) {
  205. obj.update_phone = update_phone
  206. }
  207. const v10 = validateField(update_name, 'update_name')
  208. if (v10.flag) {
  209. obj.update_name = update_name
  210. }
  211. const v11 = validateField(updat_adress, 'updat_adress')
  212. if (v11.flag) {
  213. obj.updat_adress = updat_adress
  214. }
  215. const v12 = validateField(status, 'status')
  216. if (v12.flag) {
  217. obj.status = status
  218. }
  219. return await handleUpdate(parameter, _id, obj, 'orders')
  220. }
  221. /**
  222. * 分页查询
  223. * @param {*} name 团购名称
  224. * @param {*} user_name 用户名
  225. * @param {*} status 订单状态
  226. * @param {*} order_id 订单号
  227. * @param {*} tracking_number 物流单号
  228. * @param {*} startTime 开始时间
  229. * @param {*} endTime 结束时间
  230. * @param {*} pageNum 当前页数
  231. * @param {*} pageSize 每页展示数量
  232. * @returns
  233. */
  234. async function findOrderPage(parameter) {
  235. const { name, user_name, status, order_id, tracking_number, startTime, endTime, pageNum, pageSize } = parameter
  236. const v1 = validateField(pageNum)
  237. if (!v1.flag) {
  238. return {
  239. success: false,
  240. records: [],
  241. msg: v1.msg
  242. }
  243. }
  244. const v2 = validateField(pageSize)
  245. if (!v2.flag) {
  246. return {
  247. success: false,
  248. records: [],
  249. msg: v2.msg
  250. }
  251. }
  252. // 查询参数
  253. const params = {
  254. pageNum,
  255. pageSize
  256. }
  257. // 拼接查询条件
  258. let condition = ""
  259. if (name != null) {
  260. condition += " where m.name like {{name}} "
  261. params.name = '%' + name + '%'
  262. }
  263. if (user_name != null) {
  264. if (condition) {
  265. condition += " and u.user_name like {{user_name}} "
  266. } else {
  267. condition += " where u.user_name like {{user_name}} "
  268. }
  269. params.user_name = '%' + user_name + '%'
  270. }
  271. if (status != null) {
  272. if (condition) {
  273. condition += " and o.status = {{status}} "
  274. } else {
  275. condition += " where o.status = {{status}} "
  276. }
  277. params.status = status
  278. }
  279. if (order_id != null) {
  280. if (condition) {
  281. condition += " and o.order_id = {{order_id}} "
  282. } else {
  283. condition += " where o.order_id = {{order_id}} "
  284. }
  285. params.order_id = order_id
  286. }
  287. if (tracking_number != null) {
  288. if (condition) {
  289. condition += " and o.tracking_number = {{tracking_number}} "
  290. } else {
  291. condition += " where o.tracking_number = {{tracking_number}} "
  292. }
  293. params.tracking_number = tracking_number
  294. }
  295. if (startTime != null && endTime != null) {
  296. if (condition) {
  297. condition += " and o.createdAt >= {{startTime}} and o.createdAt <= {{endTime}} "
  298. } else {
  299. condition += " where o.createdAt >= {{startTime}} and o.createdAt <= {{endTime}} "
  300. }
  301. params.startTime = startTime
  302. params.endTime = endTime
  303. }
  304. if (condition) {
  305. condition += " and o.delete = 0"
  306. } else {
  307. condition += " where o.delete = 0"
  308. }
  309. const skip = (pageNum - 1) * pageSize
  310. // 查询sql
  311. const sql = "select " +
  312. "gg.spec as spec, " +
  313. "o._id as _id, " +
  314. "u.user_name as username, " +
  315. "m.name as tuangoumingcheng, " +
  316. "gg.spec as guige, " +
  317. "o.num_index as xiadanshuliang, " +
  318. "o.status as dingdanzhuangtai, " +
  319. "m.way as shouhuofangshi, " +
  320. "o.order_id as dingdanhao, " +
  321. "o.tracking_number as wuliudanhao, " +
  322. "addr.address as addressBefore, " +
  323. "o.updat_adress as addressAfter, " +
  324. "addr.phone as phoneBefore, " +
  325. "o.update_phone as phoneAfter, " +
  326. "addr.name as shouhuorenBefore, " +
  327. "o.update_name as shouhuorenAfter, " +
  328. "o.createdAt as createdAt " +
  329. "from orders o " +
  330. "left join wx_user u on o.user_id = u._id " +
  331. "left join wx_merchandise m on o.merchandise_id = m._id " +
  332. "left join wx_groupbuy_groupbuy gg on o.groupbuy_id = gg._id " +
  333. "left join adresses addr on o.adresses_id = addr._id " +
  334. condition +
  335. " order by o.createdAt desc " + "limit " + skip + ", " + pageSize
  336. const countSql = "select count(*) as total from orders o " +
  337. "left join wx_user u on o.user_id = u._id " +
  338. "left join wx_merchandise m on o.merchandise_id = m._id " +
  339. "left join wx_groupbuy_groupbuy gg on o.groupbuy_id = gg._id " +
  340. "left join adresses addr on o.adresses_id = addr._id " +
  341. condition
  342. try {
  343. // 查询数据sql
  344. const records = await models.$runSQL(sql, params)
  345. const count = await models.$runSQL(countSql, params)
  346. return {
  347. sql,
  348. countSql,
  349. params,
  350. success: true,
  351. msg: '查询成功',
  352. records: records.data.executeResultList,
  353. total: count.data.executeResultList[0].total
  354. }
  355. } catch (error) {
  356. return {
  357. success: false,
  358. msg: '查询失败',
  359. params,
  360. sql,
  361. countSql,
  362. error: error
  363. }
  364. }
  365. }
  366. /**
  367. * 根据Id查询
  368. * @param {*} _id Id
  369. */
  370. async function findOrderById(parameter) {
  371. const { _id } = parameter
  372. return handleFindByField(parameter, _id, 'orders')
  373. }
  374. module.exports = {
  375. addOrder,
  376. deleteOrder,
  377. updateOrder,
  378. findOrderPage,
  379. findOrderById,
  380. }