覃浩 2 rokov pred
rodič
commit
54cf1b8d3d

+ 87 - 34
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/BusRoomBookingOrdersServiceImpl.java

@@ -1066,39 +1066,81 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
         List<String> livingOrderIds = inLiveRooms.stream().map(s->s.getLivingOrderId()).collect(Collectors.toList());
         List<BusRoomsLivingOrder> livingOrders = roomsLivingOrderService.list(Wrappers.<BusRoomsLivingOrder>query()
                 .in("id",livingOrderIds));
+        List<CesAllDayPriceRule> allDayPriceRules = allDayPriceRuleService.list();
+        Optional<CesAllDayPriceRule> opAllPrice = allDayPriceRules.stream().filter(a->a.getHotelId().equals(hotelId)).findFirst();
+        CesAllDayPriceRule allPrice;
+        if(!opAllPrice.isPresent()) {
+            allPrice = new CesAllDayPriceRule();
+            allPrice.setEndTime("16:00");
+        } else {
+            allPrice = opAllPrice.get();
+        }
         livingOrders.forEach(s->{
-            Date date = s.getDueOutTime();
-            Calendar calendar = new GregorianCalendar();
-            calendar.setTime(date);
-            calendar.add(Calendar.DATE,1);
-            s.setDueOutTime(calendar.getTime());
-            roomsLivingOrderService.updateById(s);// 更新订单
-            BusOrderFee dayOrderFee = new BusOrderFee();
-            dayOrderFee.setDayTime(date);
-            dayOrderFee.setCreateTime(new Date());
-
-            dayOrderFee.setFeeType(1);
-            dayOrderFee.setSubjectType(FeeSubjectType.MEI_RI_FANG_FEI.getKey());
-            CesRooms orderRoom = inLiveRooms.stream().filter(a->a.getLivingOrderId().equals(s.getId())).findFirst().get();
-            BigDecimal money = new BigDecimal(0);
-            BusLivingLayoutDayPrice  price = livingLayoutDayPriceService.getOne(Wrappers.<BusLivingLayoutDayPrice>query()
-                    .eq("living_order_id", s.getId()).eq("day_time",DateUtils.formatDate(new Date())+" 00:00:00"));
-            if(price != null) {
-                money = price.getPrice();
-            } else {
-                CesRoomLayout layout = layoutService.getById(orderRoom.getLayoutId());
-                if(layout == null) money = new BigDecimal(218);
-                else money = layout.getMarketPrice();
+            try {
+                Date dueDate = DateUtils.parseDate(DateUtils.formatDate(s.getDueOutTime()),"yyyy-MM-dd");
+                Date currDate = DateUtils.parseDate(DateUtils.formatDate(new Date()),"yyyy-MM-dd");
+                if(dueDate.getTime() < currDate.getTime()){
+                    BusBookingRooms br = bookingRoomsService.getOne(Wrappers.<BusBookingRooms>query()
+                            .eq("id",s.getBookingRoomId()));
+                    if(br == null) return;
+                    CesRooms room =  roomsService.getById(br.getRoomId());
+                    if(room == null) return;
+                    CesRoomLayout layout = layoutService.getById(room.getLayoutId());
+                    if(layout == null) return;
+                    Date date = s.getDueOutTime();
+                    Calendar calendar = new GregorianCalendar();
+                    calendar.setTime(date);
+                    calendar.add(Calendar.DATE,1);
+                    s.setDueOutTime(calendar.getTime());
+                    roomsLivingOrderService.updateById(s);// 更新订单
+                    BusOrderFee dayOrderFee = new BusOrderFee();
+                    dayOrderFee.setDayTime(date);
+                    dayOrderFee.setCreateTime(new Date());
+
+                    dayOrderFee.setFeeType(1);
+                    dayOrderFee.setSubjectType(FeeSubjectType.MEI_RI_FANG_FEI.getKey());
+
+                    List<BusLivingLayoutDayPrice> dayPrices = livingLayoutDayPriceService.list(Wrappers.<BusLivingLayoutDayPrice>query()
+                            .eq("living_order_id",s.getId()));
+                    Optional<BusLivingLayoutDayPrice> opPrice = dayPrices.stream().filter(a-> DateUtils.formatDate(a.getDayTime()).equals(s)).findFirst();
+                    if(!opPrice.isPresent()){
+                        BusLivingLayoutDayPrice nPrice = new BusLivingLayoutDayPrice();
+                        nPrice.setBookingRoomId(s.getBookingRoomId());
+                        try {
+                            nPrice.setDayTime(DateUtils.parseDate(DateUtils.formatDate(new Date()),"yyyy-MM-dd"));
+                        } catch (ParseException e) {
+                            e.printStackTrace();
+                        }
+                        nPrice.setRoomId(br.getRoomId());
+                        nPrice.setRoomLayoutId(room.getLayoutId());
+                        nPrice.setPrice(layout.getMarketPrice());
+                        nPrice.setLivingOrderId(s.getId());
+                        nPrice.setLivingType(s.getLivingType());
+                        livingLayoutDayPriceService.save(nPrice);
+                    }
+                    CesRooms orderRoom = inLiveRooms.stream().filter(a->a.getLivingOrderId().equals(s.getId())).findFirst().get();
+                    BigDecimal money = new BigDecimal(0);
+
+                    if(opPrice.isPresent()) {
+                        money = opPrice.get().getPrice();
+                    } else {
+                        money = layout.getMarketPrice();
+                    }
+
+                    dayOrderFee.setMoney(money);
+                    dayOrderFee.setRoomId(orderRoom.getId());
+                    String roomName = orderRoom.getPrefix() != null?orderRoom.getPrefix():"";
+                    roomName += roomName + orderRoom.getName();
+                    dayOrderFee.setRemark("【"+roomName + "】 "+ DateUtils.formatDate(date) + " 当日房费");
+                    dayOrderFee.setLivingOrderId(s.getId());
+                    dayOrderFee.setHotelId(hotelId);
+                    feeService.save(dayOrderFee);
+                }
+            } catch (ParseException e) {
+                e.printStackTrace();
             }
 
-            dayOrderFee.setMoney(money);
-            dayOrderFee.setRoomId(orderRoom.getId());
-            String roomName = orderRoom.getPrefix() != null?orderRoom.getPrefix():"";
-            roomName += roomName + orderRoom.getName();
-            dayOrderFee.setRemark("【"+roomName + "】 "+ DateUtils.formatDate(date) + " 当日房费");
-            dayOrderFee.setLivingOrderId(s.getId());
-            dayOrderFee.setHotelId(hotelId);
-            feeService.save(dayOrderFee);
+
         });
         return null;
     }
@@ -1665,14 +1707,24 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void syncDayOrderFeeItem(BusRoomsLivingOrder order, CesAllDayPriceRule allDayRule) {
+        Date currDate = new Date();
+        // 當前時間小於轉全天房臨界時間,则不续房
+        if(currDate.getTime() < DateUtils.parseDate(DateUtils.formatDate(new Date())+" " + allDayRule.getEndTime(),"yyyy-MM-dd") .getTime()) {
+            Calendar calendar = new GregorianCalendar();
+            calendar.setTime(currDate);
+            // 把日期往后增加一天,整数  往后推,负数往前移动
+            calendar.add(Calendar.DATE, -1);
+            // 这个时间就是日期往后推一天的结果
+            currDate = calendar.getTime();
+        }
         List<String> dayStrs = MxTools.findEveryDay(DateUtils.formatTime(order.getArrivalTime()),
-                DateUtils.formatTime(new Date()));
+                DateUtils.formatTime(currDate));
         BusBookingRooms bookingRoom = bookingRoomsService.getById(order.getBookingRoomId());
         CesRooms room = roomsService.getById(bookingRoom.getRoomId());
         CesRoomLayout layout = layoutService.getById(room.getLayoutId());
         if(bookingRoom == null || room == null || layout == null) return;
         List<BusLivingLayoutDayPrice> dayPrices = livingLayoutDayPriceService.list(Wrappers.<BusLivingLayoutDayPrice>query()
-                .eq("living_order_id",order.getId()).eq("booking_room_id",order.getBookingRoomId()));
+                .eq("living_order_id",order.getId()));
         List<BusOrderFee> dayFees = feeService.list(Wrappers.<BusOrderFee>query()
                 .eq("living_order_id",order.getId()).eq("room_id",room.getId()).and(
                         c->c.eq("subject_type",FeeSubjectType.MEI_RI_FANG_FEI.getKey()).or().eq("subject_type",FeeSubjectType.YE_SHEN_FANG_FEI.getKey())
@@ -1690,6 +1742,7 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
             order.setDueOutTime(orderLeave);
             roomsLivingOrderService.updateById(order);
         }
+        Date finalCurrDate = currDate;
         dayStrs.forEach(s->{
             Optional<BusLivingLayoutDayPrice> opPrice = dayPrices.stream().filter(a-> DateUtils.formatDate(a.getDayTime()).equals(s)).findFirst();
             if(!opPrice.isPresent()){
@@ -1727,7 +1780,7 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
                 nFee.setPreferentialStatus(1);
                 nFee.setLivingOrderId(order.getId());
                 try {
-                    if(DateUtils.parseDate(s,"yyyy-MM-dd").getTime() < DateUtils.parseDate(DateUtils.formatDate(new Date()),"yyyy-MM-dd").getTime()) {
+                    if(DateUtils.parseDate(s,"yyyy-MM-dd").getTime() < DateUtils.parseDate(DateUtils.formatDate(finalCurrDate),"yyyy-MM-dd").getTime()) {
                         nFee.setCustorerOrderRemark("夜审房费");
                         nFee.setSubjectType(FeeSubjectType.YE_SHEN_FANG_FEI.getKey());
                     }
@@ -1739,7 +1792,7 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
                 BusOrderFee nFee = opFee.get();
                 try {
                     // 每日房费转夜审房费
-                    if(nFee.getSubjectType().equals(FeeSubjectType.MEI_RI_FANG_FEI.getKey()) &&  DateUtils.parseDate(s,"yyyy-MM-dd").getTime() < DateUtils.parseDate(DateUtils.formatDate(new Date()),"yyyy-MM-dd").getTime()) {
+                    if(nFee.getSubjectType().equals(FeeSubjectType.MEI_RI_FANG_FEI.getKey()) &&  DateUtils.parseDate(s,"yyyy-MM-dd").getTime() < DateUtils.parseDate(DateUtils.formatDate(finalCurrDate),"yyyy-MM-dd").getTime()) {
                         nFee.setCustorerOrderRemark("夜审房费");
                         nFee.setRemark("当日房费 ——> 夜审房费");
                         nFee.setSubjectType(FeeSubjectType.YE_SHEN_FANG_FEI.getKey());