groupbuy.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609
  1. const { models } = require('../db')
  2. const { validateField, handleAdd, handleUpdate, handleFindByField, handleDelete } = require('../common')
  3. /**
  4. *
  5. * 团购管理 表格 调 wx_merchandise(团购表)
  6. *
  7. * 字段展示 学校名称 根据 团购表 里面的school_id 去 园所表(wx_school)里查_id是否相同 相同取园所名称(name)
  8. * 封面 —— img
  9. * 团购名称 —— name
  10. * 已拼数量 —— count
  11. * 浏览量 —— browse
  12. * 活动开始时间 —— eventstarttime
  13. * 活动结束时间 —— eventendstime
  14. * 收货方式(0-邮寄1-自提) —— way
  15. * 团购状态(0-进行中 1-即将结束 2-已结束) —— groupbuy_state
  16. *
  17. * 查询 调 wx_merchandise(团购表)
  18. * school_id —— 园所_id 园所是下拉 调 wx_school(园所表)
  19. * name —— 团购名称
  20. * groupbuy_state —— 团购状态(0-进行中 1-即将结束 2-已结束)
  21. *
  22. * 新增编辑团购 新增 wx_merchandise(团购表)
  23. * 园所id —— school_id
  24. * 团购名称 —— name
  25. * 封面 —— img
  26. * 收货方式(0-邮寄1-自提) —— way
  27. * 编辑多个 _id
  28. *
  29. * 删除 调 wx_merchandise(团购表)
  30. * 传 _id
  31. * 同时调 调 wx_groupbuy_groupbuy(团购规格表)
  32. * 传 groupbuy_id 相同的全删
  33. *
  34. * 二层表格 调 wx_groupbuy_groupbuy(团购规格表)
  35. *
  36. * 字段展示 详情图 —— detail_images
  37. * 产品详情 —— details
  38. * 规格 —— count
  39. * 原价 —— old_price
  40. * 价格 —— price
  41. *
  42. * 二层新增编辑团购 商品_id —— groupbuy_id
  43. * 详情图 —— detail_images (数组类型)
  44. * 产品详情 —— details
  45. * 规格 —— spec
  46. * 原价 —— old_price
  47. * 价格 —— price
  48. * 编辑多个 _id
  49. *
  50. * 删除 调 wx_groupbuy_groupbuy(团购规格表)
  51. * 传 _id
  52. *
  53. *
  54. *
  55. */
  56. async function findGroupBuyPageOld(parameter) {
  57. const { school_id, groupbuy_name, groupbuy_state, startTime, endTime, pageNum, pageSize } = parameter
  58. const v1 = validateField(pageNum)
  59. if (!v1.flag) {
  60. return {
  61. success: false,
  62. records: [],
  63. msg: v1.msg
  64. }
  65. }
  66. const v2 = validateField(pageSize)
  67. if (!v2.flag) {
  68. return {
  69. success: false,
  70. records: [],
  71. msg: v2.msg
  72. }
  73. }
  74. // 查询参数
  75. const params = {}
  76. // 拼接查询条件
  77. let condition = ""
  78. if (school_id != null) {
  79. condition += " where m.school_id = {{school_id}} "
  80. params.school_id = school_id
  81. }
  82. if (groupbuy_name != null) {
  83. if (condition) {
  84. condition += " and m.name like {{groupbuy_name}} "
  85. } else {
  86. condition += " where m.name like {{groupbuy_name}} "
  87. }
  88. params.groupbuy_name = groupbuy_name
  89. }
  90. if (groupbuy_state != null) {
  91. if (condition) {
  92. condition += " and m.groupbuy_state = {{groupbuy_state}} "
  93. } else {
  94. condition += " where m.groupbuy_state = {{groupbuy_state}} "
  95. }
  96. params.groupbuy_state = groupbuy_state
  97. }
  98. if (startTime != null && endTime != null) {
  99. if (condition) {
  100. condition += " and m.eventstarttime >= {{startTime}} and m.eventendstime <= {{endTime}} "
  101. } else {
  102. condition += " where m.eventstarttime >= {{startTime}} and m.eventendstime <= {{endTime}} "
  103. }
  104. params.startTime = startTime
  105. params.endTime = endTime
  106. }
  107. const skip = (pageNum - 1) * pageSize
  108. // 查询sql
  109. const sql = "select s.name as schoolName, " +
  110. "m.img as fengmian, " +
  111. "m.name as tuangouName, " +
  112. // 已拼数量
  113. // 浏览量
  114. "m.eventstarttime as kaishishijian, " +
  115. "m.eventendstime as jieshushijian, " +
  116. "m.way as shouhuofangshi, " +
  117. "m.groupbuy_state as tuangouzhuangtai " +
  118. "from wx_merchandise m " +
  119. "left join wx_school s on m.school_id = s._id " +
  120. condition +
  121. " order by m.createdAt " + "limit " + skip + ", " + pageSize
  122. // 查询数据sql
  123. const records = await models.$runSQL(sql, params)
  124. return {
  125. sql,
  126. params: { ...params },
  127. success: true,
  128. msg: '查询成功',
  129. records: records.data.executeResultList,
  130. }
  131. }
  132. async function findGroupBuyCountOld(parameter) {
  133. const { school_id, groupbuy_name, groupbuy_state, startTime, endTime } = parameter
  134. // 查询参数
  135. const params = {}
  136. // 拼接查询条件
  137. let condition = ""
  138. if (school_id != null) {
  139. condition += " where m.school_id = {{school_id}} "
  140. params.school_id = school_id
  141. }
  142. if (groupbuy_name != null) {
  143. if (condition) {
  144. condition += " and m.name like {{groupbuy_name}} "
  145. } else {
  146. condition += " where m.name like {{groupbuy_name}} "
  147. }
  148. params.groupbuy_name = groupbuy_name
  149. }
  150. if (groupbuy_state != null) {
  151. if (condition) {
  152. condition += " and m.groupbuy_state = {{groupbuy_state}} "
  153. } else {
  154. condition += " where m.groupbuy_state = {{groupbuy_state}} "
  155. }
  156. params.groupbuy_state = groupbuy_state
  157. }
  158. if (startTime != null && endTime != null) {
  159. if (condition) {
  160. condition += " and m.eventstarttime >= {{startTime}} and m.eventendstime <= {{endTime}} "
  161. } else {
  162. condition += " where m.eventstarttime >= {{startTime}} and m.eventendstime <= {{endTime}} "
  163. }
  164. params.startTime = startTime
  165. params.endTime = endTime
  166. }
  167. // 查询总数sql
  168. const sql = "select count(*) as total from wx_merchandise m " +
  169. "left join wx_school s on m.school_id = s._id " +
  170. condition
  171. const count = await models.$runSQL(sql, params)
  172. return {
  173. sql,
  174. success: true,
  175. msg: '查询成功',
  176. total: count.data.executeResultList[0].total
  177. }
  178. }
  179. /**
  180. * 分页查询团购数据
  181. * @param {*} school_id 学校Id
  182. * @param {*} groupbuy_name 团购名称
  183. * @param {*} groupbuy_state 团购状态
  184. * @param {*} startTime 开始时间
  185. * @param {*} endTime 结束时间
  186. * @param {*} pageNum 当前页
  187. * @param {*} pageSize 每页展示数量
  188. * @returns 分页数据
  189. */
  190. async function findGroupBuyPage(parameter) {
  191. const { school_id, groupbuy_name, groupbuy_state, startTime, endTime, pageNum, pageSize } = parameter
  192. const v1 = validateField(pageNum)
  193. if (!v1.flag) {
  194. return {
  195. success: false,
  196. records: [],
  197. msg: v1.msg
  198. }
  199. }
  200. const v2 = validateField(pageSize)
  201. if (!v2.flag) {
  202. return {
  203. success: false,
  204. records: [],
  205. msg: v2.msg
  206. }
  207. }
  208. // 查询参数
  209. const params = {
  210. pageNum,
  211. pageSize
  212. }
  213. // 拼接查询条件
  214. let condition = ""
  215. if (school_id != null) {
  216. condition += " where m.school_id = {{school_id}} "
  217. params.school_id = school_id
  218. }
  219. if (groupbuy_name != null) {
  220. if (condition) {
  221. condition += " and m.name like {{groupbuy_name}} "
  222. } else {
  223. condition += " where m.name like {{groupbuy_name}} "
  224. }
  225. params.groupbuy_name = groupbuy_name
  226. }
  227. if (groupbuy_state != null) {
  228. if (condition) {
  229. condition += " and m.groupbuy_state = {{groupbuy_state}} "
  230. } else {
  231. condition += " where m.groupbuy_state = {{groupbuy_state}} "
  232. }
  233. params.groupbuy_state = groupbuy_state
  234. }
  235. if (startTime != null && endTime != null) {
  236. if (condition) {
  237. condition += " and m.eventstarttime >= {{startTime}} and m.eventendstime <= {{endTime}} "
  238. } else {
  239. condition += " where m.eventstarttime >= {{startTime}} and m.eventendstime <= {{endTime}} "
  240. }
  241. params.startTime = startTime
  242. params.endTime = endTime
  243. }
  244. const skip = (pageNum - 1) * pageSize
  245. // 查询sql
  246. const sql = "select m._id as id, " +
  247. "s.name as schoolName, " +
  248. "m.img as fengmian, " +
  249. "m.name as tuangouName, " +
  250. "m.browse as browse, " +
  251. "m.count as count, " +
  252. "m.school_id as school_id, " +
  253. "m.tag_id as tag_id, " +
  254. "m.eventstarttime as kaishishijian, " +
  255. "m.eventendstime as jieshushijian, " +
  256. "m.way as shouhuofangshi, " +
  257. "m.groupbuy_state as tuangouzhuangtai " +
  258. "from wx_merchandise m " +
  259. "left join wx_school s on m.school_id = s._id " +
  260. condition +
  261. " order by m.createdAt " + "limit " + skip + ", " + pageSize
  262. const countSql = "select count(*) as total from wx_merchandise m " + "left join wx_school s on m.school_id = s._id " + condition
  263. try {
  264. // 查询数据sql
  265. const records = await models.$runSQL(sql, params)
  266. const count = await models.$runSQL(countSql, params)
  267. return {
  268. sql,
  269. countSql,
  270. params,
  271. success: true,
  272. msg: '查询成功',
  273. records: records.data.executeResultList,
  274. total: count.data.executeResultList[0].total
  275. }
  276. } catch (error) {
  277. return {
  278. success: false,
  279. msg: '查询失败',
  280. params,
  281. sql,
  282. countSql,
  283. error: error
  284. }
  285. }
  286. }
  287. /**
  288. * 新增团购
  289. * @param {*} school_id 园所Id
  290. * @param {*} name 团购名称
  291. * @param {*} img 封面
  292. * @param {*} startTime 开始时间按
  293. * @param {*} endTime 结束时间
  294. * @param {*} way 收货方式
  295. * @returns
  296. */
  297. async function addGroupBuy(parameter) {
  298. const { schoolId, name, img, startTime, endTime, way, tagId } = parameter
  299. const v1 = validateField(schoolId)
  300. if (!v1.flag) {
  301. return {
  302. success: false,
  303. msg: v1.msg
  304. }
  305. }
  306. const v2 = validateField(name)
  307. if (!v2.flag) {
  308. return {
  309. success: false,
  310. msg: v2.msg
  311. }
  312. }
  313. const v3 = validateField(img)
  314. if (!v3.flag) {
  315. return {
  316. success: false,
  317. msg: v3.msg
  318. }
  319. }
  320. const v4 = validateField(startTime)
  321. if (!v4.flag) {
  322. return {
  323. flag: false,
  324. msg: v4.msg
  325. }
  326. }
  327. const v5 = validateField(endTime)
  328. if (!v5.flag) {
  329. return {
  330. flag: false,
  331. msg: v5.msg
  332. }
  333. }
  334. const v6 = validateField(way)
  335. if (!v6.flag) {
  336. return {
  337. success: false,
  338. msg: v6.msg
  339. }
  340. }
  341. const v7 = validateField(tagId)
  342. if (!v7.flag) {
  343. return {
  344. success: false,
  345. msg: v7.msg
  346. }
  347. }
  348. const data = {
  349. school_id: schoolId,
  350. name: name,
  351. img: img,
  352. eventstarttime: startTime,
  353. eventendstime: endTime,
  354. way: way,
  355. tag_id: tagId,
  356. count: 0,
  357. browse: 0,
  358. }
  359. return await handleAdd(parameter, data, 'wx_merchandise')
  360. }
  361. /**
  362. * 编辑团购
  363. * @param {*} school_id 园所Id
  364. * @param {*} name 团购名称
  365. * @param {*} img 团购封面
  366. * @param {*} way 收货方式(0-邮寄1-自提)
  367. * @param {*} id 团购Id
  368. * @returns 是否成功
  369. */
  370. async function updateGroupBuy(parameter) {
  371. const { id, schoolId, name, img, startTime, endTime, way, tagId } = parameter
  372. const obj = {}
  373. const v0 = validateField(id)
  374. if (!v0.flag) {
  375. return {
  376. success: false,
  377. records: [],
  378. msg: v0.msg
  379. }
  380. }
  381. const v1 = validateField(schoolId)
  382. if (v1.flag) {
  383. obj.school_id = schoolId
  384. }
  385. const v2 = validateField(name)
  386. if (v2.flag) {
  387. obj.name = name
  388. }
  389. const v3 = validateField(img)
  390. if (v3.flag) {
  391. obj.img = img
  392. }
  393. const v4 = validateField(startTime)
  394. if (v4.flag) {
  395. obj.eventstarttime = startTime
  396. }
  397. const v5 = validateField(endTime)
  398. if (v5.flag) {
  399. obj.eventendstime = endTime
  400. }
  401. const v6 = validateField(way)
  402. if (v6.flag) {
  403. obj.way = way
  404. }
  405. const v9 = validateField(tagId)
  406. if (v9.flag) {
  407. obj.tag_id = tagId
  408. }
  409. return await handleUpdate(parameter, id, obj, 'wx_merchandise')
  410. }
  411. /**
  412. * 删除团购
  413. * @param {*} id 团购Id
  414. * @returns 是否成功
  415. */
  416. async function deleteGroupBuy(parameter) {
  417. const { id } = parameter
  418. try {
  419. // 删除商品表数据
  420. const result1 = await models.wx_merchandise.delete({
  421. filter: {
  422. where: {
  423. $and: [
  424. {
  425. _id: {
  426. $eq: id,
  427. },
  428. },
  429. ]
  430. }
  431. },
  432. envType: "prod",
  433. })
  434. // 删除商品规格表数据
  435. const result2 = await models.wx_groupbuy_groupbuy.delete({
  436. filter: {
  437. where: {
  438. $and: [
  439. {
  440. groupbuy_id: {
  441. $eq: id,
  442. },
  443. },
  444. ]
  445. }
  446. },
  447. envType: "prod",
  448. })
  449. return {
  450. success: true,
  451. msg: '删除数据成功',
  452. data: {
  453. shangpincount: result1.data.count,
  454. shangpinguigecount: result2.data.count
  455. },
  456. }
  457. } catch (error) {
  458. return {
  459. success: false,
  460. msg: '删除数据失败',
  461. error: error,
  462. parameter
  463. }
  464. }
  465. }
  466. /**
  467. * 根据团购Id查询规格
  468. * @param {*} tuangou_id 团购Id
  469. * @returns 团购规格数据List
  470. */
  471. async function findguigeBytuangouId(parameter) {
  472. const { tuangou_id } = parameter
  473. // const sql = "select _id, price, old_price, spec, details, detail_images, groupbuy_id from wx_groupbuy_groupbuy where groupbuy_id = {{tuangou_id}}"
  474. // const params = {
  475. // tuangou_id
  476. // }
  477. // const records = await models.$runSQL(sql, params)
  478. const select = {
  479. "_id": true,
  480. "price": true,
  481. "old_price": true,
  482. "spec": true,
  483. "details": true,
  484. "detail_images": true,
  485. "groupbuy_id": true
  486. }
  487. return await handleFindByField(select, 'groupbuy_id', tuangou_id, 'wx_groupbuy_groupbuy')
  488. }
  489. /**
  490. * 新增商品规格
  491. * @param {*} price 价格
  492. * @param {*} old_price 原价
  493. * @param {*} spec 规格名称
  494. * @param {*} details 商品详情
  495. * @param {*} detail_images 商品图片(数组)
  496. * @param {*} groupbuy_id 商品Id
  497. * @returns 新增结果
  498. */
  499. async function addguige(parameter) {
  500. const { price, old_price, spec, details, detail_images, groupbuy_id } = parameter
  501. const v1 = validateField(price)
  502. if (!v1.flag) {
  503. return {
  504. success: false,
  505. msg: v1.msg
  506. }
  507. }
  508. const v2 = validateField(old_price)
  509. if (!v2.flag) {
  510. return {
  511. success: false,
  512. msg: v2.msg
  513. }
  514. }
  515. const v3 = validateField(spec)
  516. if (!v3.flag) {
  517. return {
  518. success: false,
  519. msg: v3.msg
  520. }
  521. }
  522. const v4 = validateField(groupbuy_id)
  523. if (!v4.flag) {
  524. return {
  525. success: false,
  526. msg: v4.msg
  527. }
  528. }
  529. const data = {
  530. price,
  531. old_price,
  532. spec,
  533. details,
  534. detail_images,
  535. groupbuy_id
  536. }
  537. return await handleAdd(parameter, data, 'wx_groupbuy_groupbuy')
  538. }
  539. /**
  540. * 编辑商品规格
  541. * @param {*} id 规格Id
  542. * @param {*} price 价格
  543. * @param {*} old_price 原价
  544. * @param {*} spec 规格名称
  545. * @param {*} details 商品详情
  546. * @param {*} detail_images 商品图片(数组)
  547. * @param {*} groupbuy_id 商品Id
  548. * @returns 编辑结果
  549. */
  550. async function updateguigeById(parameter) {
  551. const { id, price, old_price, spec, details, detail_images, groupbuy_id } = parameter
  552. const obj = {
  553. details,
  554. detail_images,
  555. }
  556. const v0 = validateField(id)
  557. if (!v0.flag) {
  558. return {
  559. success: false,
  560. msg: v0.msg
  561. }
  562. }
  563. const v1 = validateField(price)
  564. if (v1.flag) {
  565. obj.price = price
  566. }
  567. const v2 = validateField(old_price)
  568. if (v2.flag) {
  569. obj.old_price = old_price
  570. }
  571. const v3 = validateField(spec)
  572. if (v3.flag) {
  573. obj.spec = spec
  574. }
  575. const v4 = validateField(groupbuy_id)
  576. if (v4.flag) {
  577. obj.old_price = groupbuy_id
  578. }
  579. return await handleUpdate(parameter, id, obj, 'wx_groupbuy_groupbuy')
  580. }
  581. /**
  582. * 根据Id删除商品规格
  583. * @param {*} id 规格Id
  584. */
  585. async function deleteguigeById(parameter) {
  586. const { id } = parameter
  587. return handleDelete(parameter, id, 'wx_groupbuy_groupbuy')
  588. }
  589. module.exports = {
  590. findGroupBuyPage,
  591. addGroupBuy,
  592. updateGroupBuy,
  593. deleteGroupBuy,
  594. findguigeBytuangouId,
  595. addguige,
  596. updateguigeById,
  597. deleteguigeById
  598. };