소스 검색

远期房态

覃浩 2 년 전
부모
커밋
34c170fd36

+ 17 - 4
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/BusRoomBookingOrdersController.java

@@ -1,6 +1,7 @@
 package org.jeecg.modules.business.controller;
 
 import java.util.Arrays;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -10,6 +11,8 @@ import java.net.URLDecoder;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.common.system.query.QueryGenerator;
@@ -28,10 +31,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.extern.slf4j.Slf4j;
 
 import org.jeecg.modules.business.service.impl.BusRoomBookingOrdersServiceImpl;
-import org.jeecg.modules.business.vo.BatchOrderEditVo;
-import org.jeecg.modules.business.vo.BookingOrderEditVo;
-import org.jeecg.modules.business.vo.PartialSettleVo;
-import org.jeecg.modules.business.vo.RoomLivingQueryVo;
+import org.jeecg.modules.business.vo.*;
 import org.jeecgframework.poi.excel.ExcelImportUtil;
 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
 import org.jeecgframework.poi.excel.entity.ExportParams;
@@ -39,6 +39,7 @@ import org.jeecgframework.poi.excel.entity.ImportParams;
 import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
 import org.jeecg.common.system.base.controller.JeecgController;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartHttpServletRequest;
@@ -392,6 +393,18 @@ public class BusRoomBookingOrdersController extends JeecgController<BusRoomBooki
 	 	return  Result.OK(service.mergeOrder(livingRoomId,livingOrderIds));
 	 }
 
+	 /**
+	  * 远期房态
+	  * @return
+	  */
+	 @ApiOperation(value="酒店预定订单-远期房态", notes="酒店预定订单-远期房态")
+	 @RequestMapping(value = "/forward-fangtai",method = RequestMethod.GET)
+	 public Result<ForwardFangTaiVo> forwardFangTai(
+	 		Boolean isContainLeave,
+	 		String start,
+			String end,String hotelId) {
+	 	return  Result.OK(service.forwardFangTai(start,end,hotelId,isContainLeave));
+	 }
 
 
 

+ 8 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/BusRoomBookingOrdersMapper.java

@@ -9,7 +9,10 @@ import org.jeecg.modules.business.dto.TodayBookingQueryDto;
 import org.jeecg.modules.business.entity.BusBookingRooms;
 import org.jeecg.modules.business.entity.BusRoomBookingOrders;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.business.vo.ForwardFangTaiQueryVo;
+import org.jeecg.modules.business.vo.LayoutRoomCountVo;
 import org.jeecg.modules.business.vo.RoomLivingQueryVo;
+import org.springframework.format.annotation.DateTimeFormat;
 
 /**
  * @Description: 酒店预定订单
@@ -26,4 +29,9 @@ public interface BusRoomBookingOrdersMapper extends BaseMapper<BusRoomBookingOrd
             @Param("roomIds") List<String> roomIds);
 
     IPage<RoomLivingQueryVo> getPage(IPage<RoomLivingQueryVo> page,Integer status, String keyw);
+
+    List<ForwardFangTaiQueryVo> forwardFangTaiQuery(String hotelId,
+                                                    String start,
+                                                    String end);
+    List<LayoutRoomCountVo> getLayoutRoomCount(String hotelId);
 }

+ 26 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/BusRoomBookingOrdersMapper.xml

@@ -75,4 +75,30 @@
             where (o.living_order_no like '%#{keyw}%' or rm.`name` like '%#{keyw}%' or tb.customer_name like '%#{keyw}%')
         </if>
     </select>
+
+    <select id="forwardFangTaiQuery" resultType="org.jeecg.modules.business.vo.ForwardFangTaiQueryVo">
+
+
+	select l.id as layout_id,l.`name` as layoutName,DATE_FORMAT(lo.arrival_time,'%Y-%m-%d') as enter_date,DATE_FORMAT(lo.due_out_time,'%Y-%m-%d') as leave_date ,lo.settle_type,
+    r.id as room_id,(r.`name`) as room_name, lo.id as living_id
+    from bus_booking_rooms br inner join bus_rooms_living_order lo
+    on br.id = lo.booking_room_id
+    inner join ces_rooms r
+    on r.id = br.room_id
+    inner join ces_room_layout l
+    on l.id = r.layout_id
+    where l.hotel_id = #{hotelId}
+	AND l.invalid = 0
+	AND r.invalid = 0
+	and ((lo.arrival_time >= #{start} and lo.arrival_time &lt;=#{end}) or
+	 (lo.due_out_time >= #{start} and lo.due_out_time &lt;=#{end}))
+
+group by l.id,DATE_FORMAT(lo.due_out_time,'%Y-%m-%d'),lo.id,r.id
+    </select>
+    <select id="getLayoutRoomCount" resultType="org.jeecg.modules.business.vo.LayoutRoomCountVo">
+        select l.id as layout_id,l.`name` as layout_name, count(r.id) as room_count from ces_room_layout l left join
+        ces_rooms r on l.id = r.layout_id and r.invalid = 0 and l.invalid = 0
+        where l.hotel_id = #{hotelId}
+        group by l.id
+    </select>
 </mapper>

+ 3 - 4
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IBusRoomBookingOrdersService.java

@@ -9,14 +9,12 @@ import org.jeecg.modules.business.entity.BusLivingCustomer;
 import org.jeecg.modules.business.entity.BusOrderFee;
 import org.jeecg.modules.business.entity.BusRoomBookingOrders;
 import com.baomidou.mybatisplus.extension.service.IService;
-import org.jeecg.modules.business.vo.BatchOrderEditVo;
-import org.jeecg.modules.business.vo.BookingOrderEditVo;
-import org.jeecg.modules.business.vo.PartialSettleVo;
-import org.jeecg.modules.business.vo.RoomLivingQueryVo;
+import org.jeecg.modules.business.vo.*;
 import org.jeecg.modules.rooms.Vo.FloorBuildingRoomVo;
 import org.jeecg.modules.rooms.entity.CesRooms;
 
 import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -64,5 +62,6 @@ public interface IBusRoomBookingOrdersService extends IService<BusRoomBookingOrd
     Boolean setLivingOrderFee(List<BusOrderFee> fees,String livingOrderId,String hotelId);
     Boolean unionOrder(String roomId,String targetRoomId, String bookingOrderId, String hotelId);
     Boolean mergeOrder(String livingRoomId, List<String> livingOrderId);
+    ForwardFangTaiVo forwardFangTai(String start, String end, String hotelId,Boolean isContainLeave);
 
 }

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

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.SneakyThrows;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.DateUtils;
@@ -16,6 +17,7 @@ import org.jeecg.modules.business.entity.*;
 import org.jeecg.modules.business.enums.*;
 import org.jeecg.modules.business.mapper.BusRoomBookingOrdersMapper;
 import org.jeecg.modules.business.service.*;
+import org.jeecg.modules.business.util.MxTools;
 import org.jeecg.modules.business.vo.*;
 import org.jeecg.modules.rooms.Enum.RoomStatusEnum;
 import org.jeecg.modules.rooms.Vo.BookingRealtimeVo;
@@ -33,6 +35,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.util.*;
@@ -1288,6 +1291,71 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
         return true;
     }
 
+    @SneakyThrows
+    @Override
+    public ForwardFangTaiVo forwardFangTai(String start, String end, String hotelId,Boolean isContainLeave) {
+        List<ForwardFangTaiQueryVo> vos = baseMapper.forwardFangTaiQuery(hotelId,start,end);
+        isContainLeave = isContainLeave == null?false:isContainLeave;
+        List<String> dayStrs = MxTools.findEveryDay(start,end);
+        ForwardFangTaiVo result = new ForwardFangTaiVo();
+        List<ForwardFangTaiDateVo> dateList = new ArrayList<>();
+        List<LayoutRoomCountVo> roomCountVos = baseMapper.getLayoutRoomCount(hotelId);
+        List<String> voLivingIds = vos.stream().map(s->s.getLivingId()).collect(Collectors.toList());
+
+        List<BusRoomsLivingOrder> allOrders =voLivingIds.size() > 0? roomsLivingOrderService.list(Wrappers.<BusRoomsLivingOrder>query()
+        .in("id",voLivingIds)):new ArrayList<>();
+
+        Boolean finalIsContainLeave = isContainLeave;
+        roomCountVos.forEach(t-> {
+            dayStrs.forEach(s-> {
+                ForwardFangTaiDateVo tableCell = new ForwardFangTaiDateVo();
+                tableCell.setDate(s);
+                tableCell.setLayoutId(t.getLayoutId());
+                List<BusRoomsLivingOrder> leaveOrders = new ArrayList<>();
+                List<BusRoomsLivingOrder> livingOrders = new ArrayList<>();
+                final int[] dayLeave = {0};
+                final int[] dayLiving = {0};
+                vos.forEach(c->{
+                    Optional<BusRoomsLivingOrder> opFindOrder = allOrders.stream().filter(f->f.getId().equals(c.getLivingId())).findFirst();
+                    if(opFindOrder == null) return;
+                    BusRoomsLivingOrder findOrder = opFindOrder.get();
+                    try {
+                        long enter = DateUtils.parseDate(c.getEnterDate(),"yyyy-MM-dd").getTime();
+                        long leave = DateUtils.parseDate(c.getLeaveDate(),"yyyy-MM-dd").getTime();
+
+                        long curr = DateUtils.parseDate(s,"yyyy-MM-dd").getTime();
+
+                        if(c.getLayoutId().equals(t.getLayoutId())
+                                && c.getLeaveDate().equals(s)) {
+                            dayLeave[0] += 1;
+                            leaveOrders.add(findOrder);
+
+                        }
+                        boolean isContainLeaveCondition = enter <= curr && (  finalIsContainLeave.booleanValue()?
+                                leave>=curr:leave>curr);// 是否包含今日预离
+                        if(c.getLayoutId().equals(t.getLayoutId())
+                                && isContainLeaveCondition ) {
+                            dayLiving[0] += 1;
+                            livingOrders.add(findOrder);
+                        }
+                    } catch (ParseException e) {
+                        e.printStackTrace();
+                    }
+                });
+                tableCell.setLeaveCount(dayLeave[0]);// 当天该房型预离数量
+                tableCell.setLeaveOrders(leaveOrders);// 当天预离订单
+                tableCell.setLivingCount(dayLiving[0]);// 当天在住数量
+                tableCell.setLivingOrders(livingOrders);// 当天该房型在住订单
+                dateList.add(tableCell);
+            });
+        });
+        result.setDateList(dateList);
+        result.setLayoutRooms(roomCountVos);
+
+
+        return result;
+    }
+
     private Boolean mergeSingle(String livingOrderId, String mergeLivingOrderId ) {
         BusRoomsLivingOrder mergeLivingOrder = roomsLivingOrderService.getById(mergeLivingOrderId);
         if(mergeLivingOrder == null) throw new JeecgBootException("合并的订单不存在");

+ 44 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/util/MxTools.java

@@ -0,0 +1,44 @@
+package org.jeecg.modules.business.util;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+public class MxTools {
+    /**
+     * 传入两个时间范围,返回这两个时间范围内的所有日期,并保存在一个集合中
+     * @param beginTime
+     * @param endTime
+     * @return
+     * @throws ParseException
+     */
+    public static List<String> findEveryDay(String beginTime, String endTime)
+            throws ParseException {
+        //1.创建一个放所有日期的集合
+        List<String> dates = new ArrayList();
+        //2.创建时间解析对象规定解析格式
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+
+        //3.将传入的时间解析成Date类型,相当于格式化
+        Date dBegin = sdf.parse(beginTime);
+        Date dEnd = sdf.parse(endTime);
+        //4.将格式化后的第一天添加进集合
+        dates.add(sdf.format(dBegin));
+        //5.使用本地的时区和区域获取日历
+        Calendar calBegin = Calendar.getInstance();
+        //6.传入起始时间将此日历设置为起始日历
+        calBegin.setTime(dBegin);
+        //8.判断结束日期是否在起始日历的日期之后
+        while (dEnd.after(calBegin.getTime())) {
+            // 9.根据日历的规则:月份中的每一天,为起始日历加一天
+            calBegin.add(Calendar.DAY_OF_MONTH, 1);
+            //10.得到的每一天就添加进集合
+            dates.add(sdf.format(calBegin.getTime()));
+            //11.如果当前的起始日历超过结束日期后,就结束循环
+        }
+        return dates;
+    }
+}

+ 17 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/ForwardFangTaiDateVo.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.business.vo;
+
+import lombok.Data;
+import org.jeecg.modules.business.entity.BusRoomsLivingOrder;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class ForwardFangTaiDateVo {
+    private String layoutId;
+    private String date;
+    private Integer leaveCount;
+    private Integer livingCount;
+    private List<BusRoomsLivingOrder> leaveOrders;
+    private List<BusRoomsLivingOrder> livingOrders;
+}

+ 10 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/ForwardFangTaiLayoutVo.java

@@ -0,0 +1,10 @@
+package org.jeecg.modules.business.vo;
+
+import lombok.Data;
+
+@Data
+public class ForwardFangTaiLayoutVo {
+    private String layoutId;
+    private String layoutName;
+    private Integer roomCount;
+}

+ 15 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/ForwardFangTaiQueryVo.java

@@ -0,0 +1,15 @@
+package org.jeecg.modules.business.vo;
+
+import lombok.Data;
+
+@Data
+public class ForwardFangTaiQueryVo {
+    private String layoutId;
+    private String layoutName;
+    private String enterDate;
+    private String leaveDate;
+    private Integer settleType;
+    private String roomId;
+    private String roomName;
+    private String livingId;
+}

+ 11 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/ForwardFangTaiVo.java

@@ -0,0 +1,11 @@
+package org.jeecg.modules.business.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ForwardFangTaiVo {
+    private List<ForwardFangTaiDateVo> dateList;
+    private List<LayoutRoomCountVo> layoutRooms;
+}

+ 11 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/LayoutRoomCountVo.java

@@ -0,0 +1,11 @@
+package org.jeecg.modules.business.vo;
+
+import lombok.Data;
+
+@Data
+public class LayoutRoomCountVo {
+    private String layoutId;
+    private String layoutName;
+    private String roomCount;
+}
+