BookImplService.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. package com.happy.service.impl;
  2. import com.happy.Model.Booking;
  3. import com.happy.Model.HotelDict;
  4. import com.happy.Model.HouseNumber;
  5. import com.happy.Model.HouseNumberStatus;
  6. import com.happy.Until.DateUtil;
  7. import com.happy.Until.Enum.PayEnum;
  8. import com.happy.Until.Func;
  9. import com.happy.Until.HttpUtils;
  10. import com.happy.Until.UUIDUtil;
  11. import com.happy.dao.BookDao;
  12. import com.happy.dao.HotelDictDao;
  13. import com.happy.dto.BookTypeEto;
  14. import com.happy.dto.IPage;
  15. import com.happy.service.*;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.stereotype.Service;
  18. import javax.annotation.Resource;
  19. import javax.servlet.http.HttpServletRequest;
  20. import java.io.IOException;
  21. import java.text.ParseException;
  22. import java.time.LocalDate;
  23. import java.time.LocalDateTime;
  24. import java.time.format.DateTimeFormatter;
  25. import java.util.*;
  26. import java.util.concurrent.atomic.AtomicInteger;
  27. import java.util.concurrent.atomic.AtomicReference;
  28. @Service("BookService")
  29. public class BookImplService implements BookService {
  30. @Resource
  31. public BookDao bookDao;
  32. @Resource
  33. public HotelDictDao hotelDictDao;
  34. @Resource
  35. public BookinglogService bookinglogService;
  36. @Resource
  37. public AdminManagerService adminManagerService;
  38. @Resource
  39. public HotelDictService hotelDictService;
  40. @Resource
  41. public HouseNumberService houseNumberService;
  42. @Resource
  43. public HouseNumberStatusService houseNumberStatusService;
  44. @Autowired
  45. private HttpServletRequest request;
  46. @Override
  47. public int insertBooking(Booking book) {
  48. return bookDao.insertBooking(book);
  49. }
  50. @Override
  51. public int updateBooking(Booking book) {
  52. return bookDao.updateBooking(book);
  53. }
  54. @Override
  55. public int delBooking(int id) {
  56. return bookDao.delBooking(id);
  57. }
  58. @Override
  59. public Booking getById(int id) {
  60. return bookDao.getById(id);
  61. }
  62. @Override
  63. public IPage<Booking> queryPage(String sqlx, int page, int rows) {
  64. IPage<Booking> iPage = new IPage();
  65. List<Booking> bookList = bookDao.queryPage(sqlx,page,rows);
  66. int total = bookDao.queryTotal(sqlx);
  67. iPage.setPageList(bookList);
  68. iPage.setPage(page);
  69. iPage.setTotalPage( (int)Math.ceil((double)total/rows));
  70. iPage.setRows(rows);
  71. iPage.setTotal(total);
  72. return iPage;
  73. }
  74. @Override
  75. public List<Booking> queryList(String sqlx) {
  76. return bookDao.queryList(sqlx);
  77. }
  78. @Override
  79. public Booking getOen(String sqlx){
  80. List<Booking> list = bookDao.queryList(sqlx);
  81. if(list!=null && list.size()>0) return list.get(0);
  82. return null;
  83. }
  84. @Override
  85. public Double sumAccount(String sqlx){
  86. return bookDao.sumAccount(sqlx);
  87. }
  88. @Override
  89. public BookTypeEto getBookStatusSum(String sqlx){
  90. return bookDao.getBookStatusSum(sqlx);
  91. }
  92. // @Override
  93. // public String cancelBooking(String bookingId) throws Exception {
  94. // if (Func.checkNull(bookingId))
  95. // return "未传入订单id";
  96. //
  97. // Booking book = bookDao.getById(Func.parseInt(bookingId));
  98. // //是否能取消订单(1是 2否)
  99. // if (Func.parseInt(book.getHotelIsCanorder()) == 2)
  100. // return "商家设置不可取消订单,请联系商家";
  101. //
  102. // AdminManager adminManager = adminManagerService.getById(Func.parseInt(book.getHotelManagerId()));
  103. //
  104. // //1待支付,2已支付,3待入住,4已入住,5已消费,6支付超时,7已取消,8已退单,9已退款,10退款中
  105. // int status = Func.parseInt(book.getOrderStatus());
  106. // if (status == 1)
  107. // {
  108. // book.setOrderStatus(Func.parseStr(PayEnum.SEVEN.getNum())); // 如果在1待支付情况,用户点击取消订单按钮,后台直接修改取消订单操作
  109. // book.setUpdateTime(DateUtil.getFormatPaternDate(new Date()));
  110. // book.setRemake(Func.parseStr(PayEnum.FIVE.getPayStatus()));
  111. // bookDao.updateBooking(book);
  112. //
  113. // return null;
  114. // }else if (status == 2 || status == 3)
  115. // {
  116. // book.setOrderStatus(Func.parseStr(PayEnum.TEN.getNum())); // 如果在2已支付,3待入住 情况,用户点击取消订单按钮,后台先修改状态为退款中,然后走退款流程
  117. // book.setUpdateTime(DateUtil.getFormatPaternDate(new Date()));
  118. // book.setRemake(Func.parseStr(PayEnum.FIVE.getPayStatus()));
  119. // if (book.getPayAccount() > 0)
  120. // {
  121. // // 注明如果支付金额大于0,则需要退款: (标识走退款操作)
  122. // book.setRefundWay(OrderEnum.微信退款.toString());
  123. // }
  124. // bookDao.updateBooking(book);
  125. //
  126. // return null;
  127. // }
  128. // return "当前状态下,不可取消订单";
  129. // }
  130. @Override
  131. public String delBooking(String bookingId) {
  132. if (Func.checkNull(bookingId))
  133. return "未传入订单id";
  134. // 是否假删除:0删除,1正常
  135. Booking book = bookDao.getById(Func.parseInt(bookingId));
  136. if (book == null)
  137. return "无此订单,请重新查询";
  138. book.setStatus_del(0);
  139. book.setUpdateTime(DateUtil.getFormatPaternDate(new Date()));
  140. int status = Func.parseInt(book.getOrderStatus());
  141. if (status == PayEnum.待支付.getNum()) {
  142. book.setOrderStatus(Func.parseStr(PayEnum.已取消.getNum())); // 如果在1待支付情况,用户点击删除订单按钮,后台直接修改取消订单操作,(应当释放房间)
  143. book.setUpdateTime(DateUtil.getFormatPaternDate(new Date()));
  144. book.setRemake(Func.parseStr(PayEnum.已取消.getPayStatus()));
  145. }
  146. bookDao.updateBooking(book);
  147. // 退款成功后,写入数据操作
  148. bookinglogService.addBooklog("用户删除了这条订单的显示数据" ,book);
  149. return null;
  150. }
  151. @Override
  152. public Booking queryByOrder(String orderNum) {
  153. List<Booking> list = bookDao.queryList("and order_num = '"+orderNum+"'");
  154. if(list!=null && list.size()>0) return list.get(0);
  155. return null;
  156. }
  157. @Override
  158. public int updateBookStatus() {
  159. HotelDict respTime = hotelDictService.getById(1000011001);//响应时间
  160. HotelDict operate = hotelDictService.getById(1000011002);//响应时间 1自动接单 2自动拒单
  161. String sqlx = " and create_time <= DATE_SUB(NOW(), INTERVAL " + respTime.getName() + " MINUTE) and order_status = 2 ";
  162. List<Booking> bookings = bookDao.queryList(sqlx);
  163. AtomicInteger n = new AtomicInteger();
  164. if ("1".equals(operate.getName())){
  165. bookings.forEach(booking -> {
  166. List<HouseNumberStatus> list = new ArrayList<>();
  167. //不可入住的房间
  168. List<HouseNumber> houseNumbers = houseNumberService.queryHouseStatus(booking);
  169. //所有房间
  170. List<HouseNumber> houseNumberList = houseNumberService.queryByHouseId(booking.getHouseId());
  171. AtomicInteger i = new AtomicInteger();
  172. List<String> Ids = new ArrayList<>();
  173. if (houseNumbers != null){
  174. houseNumberList.forEach(houseNumber -> {
  175. //添加的房间不在不可添加的房间当中并且数量小于订房总数
  176. if (!houseNumbers.contains(houseNumber) && i.get() < booking.getHouseOrderNumber()){
  177. Ids.add(houseNumber.getId());
  178. i.getAndIncrement();
  179. }
  180. });
  181. }else {
  182. //所有房间都可以预定
  183. houseNumberList.forEach(houseNumber -> {
  184. //添加的房间不在不可添加的房间当中并且数量小于订房总数
  185. if (i.get() < booking.getHouseOrderNumber()){
  186. Ids.add(houseNumber.getId());
  187. i.getAndIncrement();
  188. }
  189. });
  190. }
  191. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
  192. DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  193. LocalDateTime str = LocalDateTime.parse(booking.getOrderStartTime(), inputFormatter);
  194. LocalDateTime end = LocalDateTime.parse(booking.getOrderEndTime(), inputFormatter);
  195. String a = str.format(formatter);
  196. String B = end.format(formatter);
  197. LocalDate strDate = LocalDate.parse(a, formatter);
  198. LocalDate endDate = LocalDate.parse(B, formatter);
  199. Date now = null;
  200. try {
  201. now = DateUtil.formateDate(DateUtil.getCurrentDate(), DateUtil.Time_Formatter_Second);
  202. } catch (ParseException e) {
  203. throw new RuntimeException(e);
  204. }
  205. for (String number : Ids){
  206. for (LocalDate date = strDate; !date.isAfter(endDate.minusDays(1)); date = date.plusDays(1)){
  207. HouseNumberStatus houseNumberStatus = new HouseNumberStatus();
  208. houseNumberStatus.setNumberId(number);
  209. houseNumberStatus.setId(String.valueOf(UUID.randomUUID()));
  210. houseNumberStatus.setCreateDate(now);
  211. houseNumberStatus.setModifyDate(now);
  212. houseNumberStatus.setRemark("");
  213. houseNumberStatus.setBookingId(String.valueOf(booking.getId()));
  214. houseNumberStatus.setSetDate(date.format(formatter));
  215. houseNumberStatus.setStatus(5);//状态(0删除 1.正常 2.关房 3.脏房 4.净房 5.预定 6.入住)
  216. list.add(houseNumberStatus);
  217. }
  218. }
  219. int m = houseNumberStatusService.saveBatch(list);
  220. if (m > 0){
  221. n.getAndIncrement();
  222. booking.setOrderStatus("3");
  223. booking.setUpdateTime(UUIDUtil.getNewDate());
  224. bookDao.updateBooking(booking);
  225. }
  226. });
  227. return n.get();
  228. }else {
  229. HotelDict dict = hotelDictDao.getById(1000011999);
  230. bookings.forEach(booking -> {
  231. Map<String, String> params = new HashMap<>();
  232. params.put("bookingId", String.valueOf(booking.getId()));
  233. try {
  234. String msg = HttpUtils.post(dict.getFileUrl(), params);
  235. } catch (IOException e) {
  236. throw new RuntimeException(e);
  237. }
  238. });
  239. }
  240. return 0;
  241. }
  242. }