Browse Source

重写验证酒店留存房间

xieli 2 years ago
parent
commit
2f4f8d7379

+ 61 - 76
mhotel/src/com/happy/service/impl/AppBookImplService.java

@@ -17,10 +17,7 @@ import com.happy.service.*;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 
 
 
 @Service("AppBookService")
 @Service("AppBookService")
@@ -115,66 +112,6 @@ public class AppBookImplService implements AppBookService {
         return null;
         return null;
     }
     }
 
 
-//    @Override
-//    public String reCreateOrder(String houseId, String startTime, String endTime, String houseOrderNumber, String userName, String userPhone, String userId) {
-//        if (Func.checkNull(houseId) ||Func.checkNull(startTime) ||Func.checkNull(endTime)
-//                ||Func.checkNull(houseOrderNumber) ||Func.checkNull(userName) ||Func.checkNull(userPhone) ||Func.checkNull(userId))
-//            return null;
-//
-//        House house = houseService.getById(Func.parseInt(houseId));
-//        StringBuilder s1 = new StringBuilder("");
-//        s1.append(" and manager_id = '").append(house.getManagerId()).append("'");
-//        Hotel hotel = hotelService.getOen(s1.toString());
-//        Users user = userService.queryByUserId(userId);
-//        AdminManager adminManager = adminManagerService.getById(Func.parseInt(house.getManagerId()));
-//        if (house == null || hotel == null || user == null  || adminManager == null)
-//            return "无法获取数据";
-//
-//        Booking booking = new Booking();
-//
-//        // 设置民宿信息
-//        booking.setHotelId(Func.parseStr(hotel.getId()));
-//        booking.setHotelName(hotel.getHname());
-//        booking.setHotelHposition(hotel.getHposition());
-//        booking.setHotelHpositionWens(hotel.getHpositionWens());
-//        booking.setHotelManagerId(hotel.getManagerId());
-//        booking.setHotelTownship(adminManager.getHotelTownship());
-//        booking.setHotelConfig(hotel.getHconfig());
-//        booking.setHotelType(hotel.getHtype());
-//        booking.setHotelIsCanorder(Func.parseStr(hotel.getIsCanorder()));
-//        booking.setHotelManagerId(house.getManagerId());
-//        booking.setLockTime(hotel.getLockTime());
-//
-//        // 设置房型信息
-//        booking.setHouseId(Func.parseStr(house.getId()));
-//        booking.setHouseName(house.gethName());
-//        booking.setHouseConfig(house.gethConfig());
-//        booking.setHouseUnitPrice(house.getPrice());
-//        booking.setHouseOrderNumber(Func.parseInt(houseOrderNumber));
-//        booking.setHouseAreas(house.gethAreas());
-//        booking.setHouseRemake(house.getRemark());
-//        double totalPrice = Func.parseInt(houseOrderNumber) * house.getPrice();
-//        booking.setHouseTotalPrice(totalPrice);
-//
-//        // 设置住客信息
-//        booking.setUserName(userName);
-//        booking.setUserPhone(userPhone);
-//        booking.setOrderStartTime(startTime);
-//        booking.setOrderEndTime(endTime);
-//        int day = DateUtil.getDayDiff(startTime,endTime);
-//        String orderLiveTime= day+ OrderEnum.间.toString()+ day +OrderEnum.晚.toString();
-//        booking.setOrderLiveTime(orderLiveTime);
-//
-//        // 订单信息
-//        booking.setOrderNum(Func.parseStr(WxUtil.mchOrderNo()));// 订单号
-//        booking.setOrderStatus(Func.parseStr(PayEnum.ONE.getNum())); // 待支付状态
-//        booking.setCreateTime(DateUtil.getFormatPaternDate(DateUtil.getCurrentDate()));
-//        bookService.insertBooking(booking);
-//
-//
-//        return null;
-//    }
-
     @Override
     @Override
     public String varificationHouse(String houseId, String startTime, String endTime, String houseOrderNumber) {
     public String varificationHouse(String houseId, String startTime, String endTime, String houseOrderNumber) {
         House house = houseService.getById(Func.parseInt(houseId));
         House house = houseService.getById(Func.parseInt(houseId));
@@ -190,10 +127,10 @@ public class AppBookImplService implements AppBookService {
         StringBuffer strSqlBook = new StringBuffer();
         StringBuffer strSqlBook = new StringBuffer();
         strSqlBook.append(" and house_id = '").append(house.getId()).append("' ");
         strSqlBook.append(" and house_id = '").append(house.getId()).append("' ");
         strSqlBook.append(" and hotel_manager_id = '").append(house.getManagerId()).append("' ");
         strSqlBook.append(" and hotel_manager_id = '").append(house.getManagerId()).append("' ");
-        if (!Func.checkNull(startTime))
-            strSqlBook.append(" and order_start_time >= '").append(startTime).append(" 00:00:00  ' ");
-        if (!Func.checkNull(endTime))
-            strSqlBook.append(" and order_end_time < '").append(endTime).append(" 23:59:59 ' ");
+//        if (!Func.checkNull(startTime))
+//            strSqlBook.append(" and order_start_time >= '").append(startTime).append(" 00:00:00  ' ");
+//        if (!Func.checkNull(endTime))
+//            strSqlBook.append(" and order_end_time < '").append(endTime).append(" 23:59:59 ' ");
 
 
         //1待支付,2已支付,3待入住,4已入住,5已消费,6支付超时,7已取消,8已退单,9已退款
         //1待支付,2已支付,3待入住,4已入住,5已消费,6支付超时,7已取消,8已退单,9已退款
         strSqlBook.append(" and  ( order_status = '").append(PayEnum.待支付.getNum()).append("' ");
         strSqlBook.append(" and  ( order_status = '").append(PayEnum.待支付.getNum()).append("' ");
@@ -205,23 +142,71 @@ public class AppBookImplService implements AppBookService {
         if (bookList == null)
         if (bookList == null)
             return null;
             return null;
 
 
-        int totalNum = 0;
+        Map<String, Integer> timeMap = new HashMap(); // map<时间,天数>进行累加
+//        int totalNum = 0;
         for (Booking booking: bookList) {
         for (Booking booking: bookList) {
             if (Func.checkNull(booking.getHouseId()))
             if (Func.checkNull(booking.getHouseId()))
                 continue;
                 continue;
 
 
-            totalNum += booking.getHouseOrderNumber();
+            int day = DateUtil.getDayDiff(booking.getOrderStartTime(),booking.getOrderEndTime());
+            for (int i = 0; i < day; i++) {
+                String time = DateUtil.parseDateToStr(DateUtil.addDate(DateUtil.parseDateOnly(booking.getOrderStartTime()),Calendar.DATE,i),DateUtil.Time_Formatter_Day);
+                if (!timeMap.containsKey(time))
+                {
+                    timeMap.put(time,booking.getHouseOrderNumber());
+                    continue;
+                }
+
+                timeMap.put(time,booking.getHouseOrderNumber() + Func.parseInt(timeMap.get(time)));
+            }
         }
         }
 
 
-        // 订单中房数量》= 总房间数量 表示已满
-        if (totalNum >= house.getNumber())
-            return OrderEnum.房间已满.toString();
+        List<String> dayQueryList = new ArrayList();
+        // 遍历查询的每一天当做一个列表数据
+        int dayQuerys = DateUtil.getDayDiff(startTime,endTime);
+        for (int i = 0; i < dayQuerys; i++) {
+            String time = DateUtil.parseDateToStr(DateUtil.addDate(DateUtil.parseDateOnly(startTime),Calendar.DATE,i),DateUtil.Time_Formatter_Day);
+            dayQueryList.add(time);
+        }
 
 
-        // 现存房数量 《 要订的订房数量   表示已满
-        if((house.getNumber() - totalNum) < Func.parseInt(houseOrderNumber))
-            return OrderEnum.房间已满.toString();
+        // 将数据字典进行遍历,每天一天的房间
+//        for (Map.Entry<String, Integer> entry : timeMap.entrySet()) {
+//            System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
+//            if (entry.getKey())
+//
+//
+//        }
+        for (String dayQuery: dayQueryList) {
+            if (Func.checkNull(dayQuery))
+                continue;
+
+            if (timeMap.containsKey(dayQuery))
+            {
+                int totalNum = timeMap.get(dayQuery); // 当天房间的数量
+                // 订单中房数量》= 总房间数量 表示已满
+                if (totalNum >= house.getNumber())
+                    return dayQuery + OrderEnum.房间已满.toString();
+
+                // 现存房数量 《 要订的订房数量   表示已满
+                if((house.getNumber() - totalNum) < Func.parseInt(houseOrderNumber))
+                    return dayQuery + OrderEnum.房间已满.toString();
+            }
+
+        }
+
+
+//
+//
+//        // 订单中房数量》= 总房间数量 表示已满
+//        if (totalNum >= house.getNumber())
+//            return OrderEnum.房间已满.toString();
+//
+//        // 现存房数量 《 要订的订房数量   表示已满
+//        if((house.getNumber() - totalNum) < Func.parseInt(houseOrderNumber))
+//            return OrderEnum.房间已满.toString();
 
 
 
 
         return null;
         return null;
     }
     }
+
 }
 }

+ 133 - 27
mhotel/src/com/happy/service/impl/AppHomePageImplService.java

@@ -5,6 +5,8 @@ import com.happy.Model.FileInfo;
 import com.happy.Model.Hotel;
 import com.happy.Model.Hotel;
 import com.happy.Model.House;
 import com.happy.Model.House;
 import com.happy.Model.weixin.Users;
 import com.happy.Model.weixin.Users;
+import com.happy.Until.DateUtil;
+import com.happy.Until.Enum.OrderEnum;
 import com.happy.Until.Enum.PayEnum;
 import com.happy.Until.Enum.PayEnum;
 import com.happy.Until.Func;
 import com.happy.Until.Func;
 import com.happy.dao.BookDao;
 import com.happy.dao.BookDao;
@@ -126,9 +128,12 @@ public class AppHomePageImplService implements AppHomePageService {
         // 数据字典写入hotel
         // 数据字典写入hotel
         List<String> hlist = new ArrayList<>();
         List<String> hlist = new ArrayList<>();
         List houseDicList = new ArrayList();
         List houseDicList = new ArrayList();
+        Map<String,House> houseMap = new HashMap<>();
         for (House house:houseList) {
         for (House house:houseList) {
             if (house == null || Func.checkNull(Func.parseStr(house.getNumber())))
             if (house == null || Func.checkNull(Func.parseStr(house.getNumber())))
                 continue;
                 continue;
+
+            houseMap.put(Func.parseStr(house.getId()),house);
             // “,”号分逗开来
             // “,”号分逗开来
             hlist = Arrays.asList(house.gethConfig().split(","));
             hlist = Arrays.asList(house.gethConfig().split(","));
             houseDicList = new ArrayList();
             houseDicList = new ArrayList();
@@ -144,10 +149,10 @@ public class AppHomePageImplService implements AppHomePageService {
         // 判断是否有房间,对每个房型进行标识
         // 判断是否有房间,对每个房型进行标识
         StringBuffer strSqlBook = new StringBuffer();
         StringBuffer strSqlBook = new StringBuffer();
         strSqlBook.append(" and hotel_manager_id = '").append(hotel.getManagerId()).append("  ' ");
         strSqlBook.append(" and hotel_manager_id = '").append(hotel.getManagerId()).append("  ' ");
-        if (!Func.checkNull(queryStartTime))
-            strSqlBook.append(" and order_start_time >= '").append(queryStartTime).append(" 00:00:00  ' ");
-        if (!Func.checkNull(queryEndTime))
-            strSqlBook.append(" and order_end_time < '").append(queryEndTime).append(" 23:59:59 ' ");
+//        if (!Func.checkNull(queryStartTime))
+//            strSqlBook.append(" and order_start_time <= '").append(queryStartTime).append(" 00:00:00  ' ");
+//        if (!Func.checkNull(queryEndTime))
+//            strSqlBook.append(" and order_end_time >= '").append(queryEndTime).append(" 00:00:00  ' ");
 
 
 
 
         //1待支付,2已支付,3待入住,4已入住,5已消费,6支付超时,7已取消,8已退单,9已退款
         //1待支付,2已支付,3待入住,4已入住,5已消费,6支付超时,7已取消,8已退单,9已退款
@@ -157,34 +162,34 @@ public class AppHomePageImplService implements AppHomePageService {
         strSqlBook.append(" or order_status = '").append(PayEnum.已入住.getNum()).append("   ' ) ");
         strSqlBook.append(" or order_status = '").append(PayEnum.已入住.getNum()).append("   ' ) ");
         List<Booking> bookList = bookService.queryList(strSqlBook.toString());
         List<Booking> bookList = bookService.queryList(strSqlBook.toString());
 
 
-        // 订房数据字典Map<houseid, 订房数量>
-        Map<String, Integer> houseBookingMap =  new HashMap();
-        if (bookList != null  && bookList.size() > 0)
-        {
-            Integer numberTemp = new Integer(0);
-            for (Booking booking: bookList) {
-                if (Func.checkNull(booking.getHouseId()))
-                    continue;
-
-                if (houseBookingMap.containsKey(booking.getHouseId()))
-                {
-                    numberTemp = houseBookingMap.get(booking.getHouseId());
-                    int i = Func.parseInt(numberTemp) + booking.getHouseOrderNumber();
-                    houseBookingMap.put(booking.getHouseId(),i);
-                }else {
-                    houseBookingMap.put(booking.getHouseId(),booking.getHouseOrderNumber());
-                }
-
-            }
-        }
-
+//        // 订房数据字典Map<houseid, 订房数量>
+//        Map<String, Integer> houseBookingMap =  new HashMap();
+//        if (bookList != null  && bookList.size() > 0)
+//        {
+//            Integer numberTemp = new Integer(0);
+//            for (Booking booking: bookList) {
+//                if (Func.checkNull(booking.getHouseId()))
+//                    continue;
+//
+//                if (houseBookingMap.containsKey(booking.getHouseId()))
+//                {
+//                    numberTemp = houseBookingMap.get(booking.getHouseId());
+//                    int i = Func.parseInt(numberTemp) + booking.getHouseOrderNumber();
+//                    houseBookingMap.put(booking.getHouseId(),i);
+//                }else {
+//                    houseBookingMap.put(booking.getHouseId(),booking.getHouseOrderNumber());
+//                }
+//
+//            }
+//        }
+
+        Map<String,Integer> houseBookingMap = assignHouseRemainRooms(bookList,queryStartTime,queryEndTime,houseMap); // 每个房间留存房间数量Map<房间id,数量>
 
 
         for (House house:houseList) {
         for (House house:houseList) {
             if (house == null)
             if (house == null)
                 continue;
                 continue;
 
 
-
-            // 将房间图片,写入房型对象中
+            // 将房间的图片,写入房型对象中
             StringBuilder fileSqlx = new StringBuilder("");
             StringBuilder fileSqlx = new StringBuilder("");
             fileSqlx.append(" and link_id = '").append(house.getId()).append("'");
             fileSqlx.append(" and link_id = '").append(house.getId()).append("'");
             List<FileInfo> fileInfoList = fileService.queryList(fileSqlx.toString());
             List<FileInfo> fileInfoList = fileService.queryList(fileSqlx.toString());
@@ -204,4 +209,105 @@ public class AppHomePageImplService implements AppHomePageService {
         hotel.setHouseList(houseList);
         hotel.setHouseList(houseList);
         return hotel;
         return hotel;
     }
     }
+
+
+    /**
+     * 在时间区间下进行验证每个房间的剩余数据,取最小数量作为留存房间的数量
+     * @param bookList 所有的订单列表
+     * @param startDate 查询开始时间
+     * @param endDate 查询结束时间
+     * @param houseMap  Map<房间id, House>
+     * @return Map<房间id,数量>
+     */
+    public Map assignHouseRemainRooms(List<Booking> bookList, String startDate, String endDate ,Map<String, House> houseMap) {
+        if (bookList == null || Func.checkNull(startDate) || Func.checkNull(endDate) || houseMap == null)
+            return new HashMap();
+
+        // 将时间统一转化为 yyyy-MM-dd
+        String startTime = DateUtil.parseDateToStr((Func.parseDate(startDate)), DateUtil.Time_Formatter_Day);
+        String endTime = DateUtil.parseDateToStr((Func.parseDate(endDate)), DateUtil.Time_Formatter_Day);
+
+        Map<String, List<Booking>> bookMap = new HashMap<>(); // map<houseId, liset<Booking>>
+        List<Booking> bList = new ArrayList<>();
+        for (Booking b :bookList) {
+            if (Func.checkNull(b.getHouseId()))
+                continue;
+
+            if (bookMap.containsKey(b.getHouseId()))
+            {
+                bookMap.get(b.getHouseId()).add(b);
+                continue;
+            }
+
+            bList = new ArrayList<>();
+            bList.add(b);
+            bookMap.put(b.getHouseId(),bList);
+        }
+
+        Set<String> dayQuerySet = new HashSet<>();
+        // 遍历查询的每一天当做一个列表数据
+        int dayQuerys = DateUtil.getDayDiff(startTime, endTime);
+        for (int i = 0; i < dayQuerys; i++) {
+            String time = DateUtil.parseDateToStr(DateUtil.addDate(DateUtil.parseDateOnly(startTime), Calendar.DATE, i), DateUtil.Time_Formatter_Day);
+            dayQuerySet.add(time);
+        }
+
+        Map<String, Integer> houseBookingMap = new HashMap<>();
+        List<Booking> bookHouseList = new ArrayList<>(); // 相同房型的订单汇总
+        Map<String, Integer> bookingTimeMap = new HashMap(); // map<时间,天数>进行累加 订单中的房间数量
+        String houseId = null; // 房间id
+        String timeTemp = null; // 日期 例2023-08-23
+
+        for (Map.Entry<String, List<Booking>> entry : bookMap.entrySet())
+        {
+            houseId = entry.getKey();
+            bookHouseList = entry.getValue(); // 相同房型的订单汇总
+
+            bookingTimeMap = new HashMap(); // map<时间,天数>进行累加 单个房型的订单中房间的数量
+            for (Booking booking : bookHouseList) {
+                if (Func.checkNull(booking.getHouseId()))
+                    continue;
+
+                int day = DateUtil.getDayDiff(booking.getOrderStartTime(), booking.getOrderEndTime());
+                for (int i = 0; i < day; i++) {
+                    timeTemp = DateUtil.parseDateToStr(DateUtil.addDate(DateUtil.parseDateOnly(booking.getOrderStartTime()), Calendar.DATE, i), DateUtil.Time_Formatter_Day);
+                    if (!dayQuerySet.contains(timeTemp)) // 不在查询范围内,不作记录
+                        continue;
+
+
+                    if (!bookingTimeMap.containsKey(timeTemp)) {
+                        bookingTimeMap.put(timeTemp, booking.getHouseOrderNumber());
+                        continue;
+                    }
+
+                    bookingTimeMap.put(timeTemp, booking.getHouseOrderNumber() + Func.parseInt(bookingTimeMap.get(timeTemp)));
+                }
+
+                houseBookingMap.put(houseId,getMaxNum(bookingTimeMap));
+            }
+
+        }
+
+        return houseBookingMap;
+    }
+
+    /**
+     * 一个房间的所有日期当中,取单日最大值房间数量,当做留存数
+     * @param bookingTimeMap
+     * @return
+     */
+    public Integer getMaxNum(Map<String, Integer> bookingTimeMap)
+    {
+        if (bookingTimeMap == null || bookingTimeMap.isEmpty())
+            return 0;
+
+        List<Integer> numbersTemp = new ArrayList<Integer>(); // 临时数值
+        for (Map.Entry<String,Integer> entry : bookingTimeMap.entrySet())
+        {
+            numbersTemp.add(entry.getValue());
+        }
+
+        return numbersTemp.stream ().reduce (Integer::max).get ();// 得到最大值
+    }
+
 }
 }