request.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. const req = require('../../utils/request')
  2. const company = getApp().globalData.company
  3. const dateF = require("../../utils/date")
  4. const Parse = getApp().Parse;
  5. const uid = Parse.User.current()?.id
  6. async function getStores(params) {
  7. let {
  8. val,
  9. uid,
  10. skip,
  11. limit,
  12. isShow
  13. } = params
  14. let wh1 = val ? `AND (store."storeName" LIKE '%` + val + "%'" + 'OR store."storeAddress" LIKE ' + "'%" + val + "%')" : ``
  15. let sql = `SELECT * ,
  16. ("perCapita" * 1) price,
  17. (SELECT room."price" FROM "ShopRoom" room
  18. WHERE room."shop" = store."objectId"
  19. AND room."isDeleted" IS NOT TRUE
  20. AND room."isEnabled" = TRUE
  21. ORDER BY room."price" ASC LIMIT 1
  22. ) "minPrice",
  23. (SELECT clt."isCollect" FROM "DramaShopCollect" clt
  24. WHERE clt."homestayStore" = store."objectId"
  25. AND clt."isCollect" = TRUE
  26. AND clt."isDeleted" IS NOT TRUE
  27. AND clt."user" = '${uid}'
  28. LIMIT 1
  29. ) "iscollect"
  30. FROM "ShopStore" store
  31. WHERE "company" = '${company}'
  32. AND "type" = 'stay'
  33. AND "isVerified" IS TRUE
  34. AND "isDeleted" IS NOT TRUE
  35. ${wh1}
  36. ${isShow?`ORDER BY "isShow" DESC,"iscollect","index"`:`ORDER BY "iscollect","isShow" DESC,"index"`}
  37. OFFSET ${skip ?? 0} LIMIT ${limit ?? 10}`
  38. // console.log(sql)
  39. let res = await req.customSQL(sql);
  40. return res
  41. }
  42. /**获取收货地址 */
  43. async function getAddress() {
  44. let address = null
  45. let query = new Parse.Query("ShopAddress")
  46. let addressId = wx.getStorageSync('addressId')
  47. if (addressId) {
  48. query.equalTo('objectId', addressId)
  49. } else {
  50. let user = Parse.User.current();
  51. query.equalTo("user", user.id);
  52. query.descending("is_default")
  53. }
  54. let res = await query.first()
  55. if (res?.id) {
  56. address = res?.toJSON() || null
  57. }
  58. return address
  59. }
  60. /**
  61. * 获取当前房间被占用日期
  62. * @param {*} rid 房间id
  63. */
  64. async function getRoomOccupiaDate(rid) {
  65. let query = new Parse.Query('RoomOrder')
  66. query.equalTo('company', company)
  67. query.notEqualTo('isDeleted', true)
  68. query.equalTo('isPay', true)
  69. query.equalTo('room',rid)
  70. query.containedIn('status', [100, 200, 300, 500, 602, 102, 104])
  71. query.greaterThan('endTime', new Date(new Date().setHours(14, 1, 0))) //查询订单结束时间大于今天14点01的订单
  72. query.limit(180)
  73. let d = await query.find()
  74. let dList = []
  75. for (let i in d) {
  76. let item = d[i]
  77. let list = getDateList(item?.get('startTime'), item?.get('endTime'))
  78. dList = [...dList, ...list]
  79. }
  80. return dList
  81. }
  82. /**返回两个时间之中的 年-月-日 */
  83. function getDateList(startTime, endTime) {
  84. startTime.setHours(0, 0, 0, 0);
  85. endTime.setHours(0, 0, 0, 0);
  86. let diff = endTime - startTime;
  87. let diffDate = Math.ceil(diff / (1000 * 60 * 60 * 24));
  88. let list = []
  89. for (let i = 0; i < diffDate; i++) {
  90. let current = new Date(startTime)
  91. current.setDate(startTime.getDate() + i)
  92. list.push({
  93. year: current.getFullYear(),
  94. month: current.getMonth(),
  95. date: current.getDate()
  96. })
  97. }
  98. return list
  99. }
  100. /**
  101. * 判断当前时间段内该房间是否空闲
  102. * @param {*} fromto 时间段{from,to}
  103. * @param {*} rid 房间id
  104. */
  105. async function isFree(fromto, rid) {
  106. let {
  107. from,
  108. to
  109. } = fromto
  110. let endObj = {
  111. start: new Date(from),
  112. end: new Date(to),
  113. }
  114. let startObj = {
  115. start: new Date(from),
  116. end: new Date(to),
  117. }
  118. let middleObj = {
  119. start: new Date(from),
  120. end: new Date(to),
  121. }
  122. endObj.start.setHours(14, 1, 0);
  123. endObj.end.setHours(14, 1, 0);
  124. startObj.start.setHours(11, 59, 0);
  125. startObj.end.setHours(13, 59, 0);
  126. startObj.end.setDate(endObj.end.getDate()-1)
  127. middleObj.start.setHours(11, 59, 0)
  128. middleObj.end.setHours(13, 59, 0)
  129. let query = new Parse.Query('RoomOrder')
  130. query.equalTo('company', company)
  131. query.notEqualTo('isDeleted', true)
  132. query.equalTo('isPay', true)
  133. query.containedIn('status', [100, 200, 300, 500, 602, 102, 104])
  134. query.equalTo('room',rid)
  135. //订单结束时间在范围内
  136. let endQuery = new Parse.Query('RoomOrder')
  137. endQuery.greaterThan('endTime', endObj.start)
  138. endQuery.lessThan('endTime', endObj.end)
  139. //订单开始时间在范围内
  140. let startQuery = new Parse.Query('RoomOrder')
  141. startQuery.greaterThanOrEqualTo('startTime', startObj.start)
  142. startQuery.lessThanOrEqualTo('startTime', startObj.end)
  143. //所选时间包含在订单时间之内
  144. let middleQuery = new Parse.Query('RoomOrder')
  145. middleQuery.lessThanOrEqualTo('startTime', middleObj.start)
  146. middleQuery.greaterThanOrEqualTo('endTime',middleObj.end)
  147. //查询fromto之间进行的订单
  148. let mainQuery = Parse.Query.and(
  149. query,Parse.Query.or(endQuery, startQuery,middleQuery)
  150. )
  151. let c = await mainQuery.count()
  152. if (c && c > 0) {
  153. return false
  154. } else {
  155. return true
  156. }
  157. }
  158. /**获取两个date的间隔天数 */
  159. function getDays(date1, date2) {
  160. const d1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());
  161. const d2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());
  162. const timeDiff = Math.abs(d2.getTime() - d1.getTime()); //绝对值
  163. const daysDiff = Math.ceil(timeDiff / (1000 * 60 * 60 * 24)); //向上取整
  164. return daysDiff;
  165. }
  166. module.exports = {
  167. getStores,
  168. getAddress,
  169. isFree,
  170. getRoomOccupiaDate,
  171. getDays
  172. };