This commit is contained in:
Mauve
2026-09-15 17:04:12 +08:00
parent 6ce4e4a166
commit 2ae9565175
31 changed files with 663 additions and 70 deletions
@@ -2,6 +2,7 @@ package com.mgm.mcrm.reservation.services;
import java.util.*;
import java.time.LocalDateTime;
import java.time.ZoneId;
import com.alibaba.fastjson.JSON;
import com.mgm.mcrm.admin.repositories.SysUserDao;
@@ -17,6 +18,8 @@ import com.mgm.mcrm.basesetting.daylight.repositories.BlockDao;
import com.mgm.mcrm.basesetting.daylight.repositories.DaylightViewDao;
import com.mgm.mcrm.basesetting.daylight.repositories.ItemInventoryDao;
import com.mgm.mcrm.basesetting.daylight.repositories.TierDao;
import com.mgm.mcrm.basesetting.opera.models.CfgOperaView;
import com.mgm.mcrm.basesetting.opera.repositories.OperaViewDao;
import com.mgm.mcrm.basesetting.property.models.CfgProperties;
import com.mgm.mcrm.basesetting.property.repositories.PropertyDao;
import com.mgm.mcrm.basesetting.property.services.PropertyService;
@@ -24,7 +27,11 @@ import com.mgm.mcrm.basesetting.room.models.CfgRoomFeatures;
import com.mgm.mcrm.basesetting.room.models.CfgRoomTypes;
import com.mgm.mcrm.basesetting.room.models.CfgRooms;
import com.mgm.mcrm.basesetting.room.repositories.*;
import com.mgm.mcrm.basesetting.team.models.CfgSections;
import com.mgm.mcrm.basesetting.team.models.CfgTeamStructure;
import com.mgm.mcrm.basesetting.team.repositories.AppUserDao;
import com.mgm.mcrm.basesetting.team.repositories.SectionDao;
import com.mgm.mcrm.basesetting.team.repositories.TeamStructureDao;
import com.mgm.mcrm.common.dtos.DataTableResult;
import com.mgm.mcrm.common.dtos.QueryFilter;
import com.mgm.mcrm.common.dtos.ServiceResult;
@@ -61,28 +68,9 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.auth0.jwt.JWT;
import com.mgm.mcrm.common.utils.DaoUtil;
import com.mgm.mcrm.common.utils.DateTimeUtil;
@Service
public class BookingService {
@@ -128,6 +116,12 @@ public class BookingService {
private SysGroupService sysGroupService;
@Resource
private BookingMapper bookingMapper;
@Resource
private TeamStructureDao teamStructureDao;
@Resource
private SectionDao sectionDao;
@Resource
private OperaViewDao operaViewDao;
public ServiceResult createBooking(Map<String,Object> param, HttpServletRequest request) {
ServiceResult processResult= new ServiceResult();
@@ -160,13 +154,18 @@ public class BookingService {
String oldToken = request.getHeader("Authorization");
// oldToken = oldToken.substring(6);
String userId = JWT.decode(oldToken).getClaim("login_id").asString();
Long sectionId = 2L;
List<CfgDaylightView> operas = daylightViewDao.findByPropertyIdAndBookingTypeId(propertyId,blockId);
List<CfgDaylightView> teamOpera = new ArrayList();
CfgDaylightView opera = new CfgDaylightView();
for(CfgDaylightView o :operas) {
for(CfgRoomTypes r :o.getDaylightRoomType()) {
Map<String, Object> user = (Map<String, Object>) param.get("user");
Long teamStructureId = user.get("teamStructureId") != null ? Long.valueOf(String.valueOf(param.get("teamStructureId"))) : null;
CfgTeamStructure cfgTeamStructure = teamStructureDao.findById(teamStructureId).orElse(null);
Long sectionId = cfgTeamStructure.getSectionId();
CfgSections cfgSections = sectionDao.findById(sectionId).orElse(null);
List<CfgOperaView> operas = operaViewDao.findByPropertyIdAndBookingTypeId(propertyId,blockId);
List<CfgOperaView> teamOpera = new ArrayList<>();
CfgOperaView opera = new CfgOperaView();
for(CfgOperaView o :operas) {
for(CfgRoomTypes r :o.getOperaRoomType()) {
if(Objects.equals(r.getId(), roomTypeId)) {
teamOpera.add(o);
}
@@ -174,11 +173,13 @@ public class BookingService {
}
String blockCode = null;
for(CfgDaylightView o :teamOpera) {
LocalDateTime startTime = o.getStartDate();
LocalDateTime endTime = o.getEndDate();
if((startTime.isBefore(checkinDate) || startTime.isEqual(checkinDate))
&& (endTime.isAfter(checkoutDate) || endTime.isEqual(checkoutDate))) {
Date checkinAsDate = Date.from(checkinDate.atZone(ZoneId.systemDefault()).toInstant());
Date checkoutAsDate = Date.from(checkoutDate.atZone(ZoneId.systemDefault()).toInstant());
for(CfgOperaView o :teamOpera) {
Date startTime = o.getStartDate();
Date endTime = o.getEndDate();
if((!startTime.after(checkinAsDate))
&& (!endTime.before(checkoutAsDate))) {
blockCode = o.getBlockCodeName();
opera = o;
}
@@ -195,7 +196,7 @@ public class BookingService {
booking.setHotelCode(property.getCode());
booking.setRoomTypeId(roomTypeId);
// booking.setOperaProfileId(Long.valueOf(String.valueOf(operaId.get(0))));
booking.setDlBlockId(blockCode);
booking.setBlockCode(blockCode);
booking.setRatePlanCode(opera.getRateCode().getCode());
booking.setRoomTypeCode(roomType.getCode());
booking.setMarketCode(opera.getMarketCode().getCode());
@@ -215,6 +216,7 @@ public class BookingService {
booking.setItemCode(item.getId()!=null?item.getDlCode():null);
booking.setFeatureCode(special);
booking.setRoom(room.getName());
booking.setSectionName(cfgSections.getName());
booking.setCategory(property.getCategory());
@@ -224,6 +226,108 @@ public class BookingService {
processResult.setReturnData(booking);
return processResult;
}
private ServiceResult createDayligtBooking(Map<String,Object> param, HttpServletRequest request) {
ServiceResult processResult= new ServiceResult();
LocalDateTime createDate = LocalDateTime.now();
Bookings booking = new Bookings();
String playerId = String.valueOf(param.get("playerId"));
Long blockId = Long.valueOf(String.valueOf(param.get("blockId")));
Long propertyId = Long.valueOf(String.valueOf(param.get("propertyId")));
Long roomId = Long.valueOf(String.valueOf(param.get("roomId")));
Long roomTypeId = Long.valueOf(String.valueOf(param.get("roomTypeId")));
String special = param.get("specialIds")!=null?String.valueOf(param.get("specialIds")):null;
String sharer = param.get("sharer")!=null?String.valueOf(param.get("sharer")):null;
String remark = param.get("remark")!=null?String.valueOf(param.get("remark")):null;
Boolean isWaitlist = Boolean.valueOf(String.valueOf(param.get("isWaitlist")));
HashMap member = (HashMap)param.get("member");
List operaId = (List)member.get("nameId");
List selectDate = (List)param.get("selectDate");
LocalDateTime checkinDate = DateTimeUtil.getDateFromString(String.valueOf(selectDate.get(0)), "yyyy-MM-dd");
LocalDateTime checkoutDate = DateTimeUtil.getDateFromString(String.valueOf(selectDate.get(1)), "yyyy-MM-dd");
String numOfNight = DateTimeUtil.getDiffDate(checkinDate, checkoutDate, "day");
CfgProperties property = propertyDao.findById(propertyId).orElse(null);
CfgBlocks block = blockDao.getById(blockId);
CfgRooms room = roomDao.getById(roomId);
CfgRoomTypes roomType = roomTypeDao.getById(roomTypeId);
CfgTiers tier = tierDao.findByTierName(String.valueOf(member.get("tier")));
CfgItemInventory item = new CfgItemInventory();
if(tier!=null&&blockId!=null&&roomTypeId!=null) {
item = itemDao.findByTierIdAndRoomId(Long.valueOf(tier.getId()),roomId);
}
String oldToken = request.getHeader("Authorization");
// oldToken = oldToken.substring(6);
String userId = JWT.decode(oldToken).getClaim("login_id").asString();
Map<String, Object> user = (Map<String, Object>) param.get("user");
Long teamStructureId = user.get("teamStructureId") != null ? Long.valueOf(String.valueOf(param.get("teamStructureId"))) : null;
CfgTeamStructure cfgTeamStructure = teamStructureDao.findById(teamStructureId).orElse(null);
Long sectionId = cfgTeamStructure.getSectionId();
CfgSections cfgSections = sectionDao.findById(sectionId).orElse(null);
List<CfgDaylightView> operas = daylightViewDao.findByPropertyIdAndBookingTypeId(propertyId,blockId);
List<CfgDaylightView> teamOpera = new ArrayList();
CfgDaylightView opera = new CfgDaylightView();
for(CfgDaylightView o :operas) {
for(CfgRoomTypes r :o.getDaylightRoomType()) {
if(Objects.equals(r.getId(), roomTypeId)) {
teamOpera.add(o);
}
}
}
String blockCode = null;
for(CfgDaylightView o :teamOpera) {
LocalDateTime startTime = o.getStartDate();
LocalDateTime endTime = o.getEndDate();
if((startTime.isBefore(checkinDate) || startTime.isEqual(checkinDate))
&& (endTime.isAfter(checkoutDate) || endTime.isEqual(checkoutDate))) {
blockCode = o.getBlockCodeName();
opera = o;
}
}
booking.setId(null);
booking.setPlayerId(playerId);
booking.setMemberTitle(String.valueOf(member.get("salutation")));
// booking.setMemberFirstName(memberFirstName);
booking.setMemberLastName(String.valueOf(member.get("name")));
booking.setCheckinDate(checkinDate);
booking.setCheckoutDate(checkoutDate);
booking.setPropertyId(propertyId);
booking.setHotelCode(property.getCode());
booking.setRoomTypeId(roomTypeId);
// booking.setOperaProfileId(Long.valueOf(String.valueOf(operaId.get(0))));
booking.setBlockCode(blockCode);
booking.setRatePlanCode(opera.getRateCode().getCode());
booking.setRoomTypeCode(roomType.getCode());
booking.setMarketCode(opera.getMarketCode().getCode());
booking.setDlSourceId(opera.getSourceCode().getDlSourceId());
booking.setSourceCode(opera.getSourceCode().getCode());
booking.setCreatedAt(createDate);
booking.setCreatedBy(JWT.decode(oldToken).getSubject());
booking.setSectionId(sectionId);
booking.setApproveStatus(isWaitlist?"W":"PN");
booking.setRemark(remark);
booking.setBookType("0");
booking.setBlock(block.getName());
booking.setNumOfNight(Integer.valueOf(numOfNight));
// booking.setTeamName(team.getCode());
booking.setBooker(userId);
booking.setSharer(sharer);
booking.setItemCode(item.getId()!=null?item.getDlCode():null);
booking.setFeatureCode(special);
booking.setRoom(room.getName());
booking.setSectionName(cfgSections.getName());
booking.setCategory(property.getCategory());
Bookings newBooking= bookingDao.save(booking);
processResult.setSuccess(true);
processResult.setReturnData(booking);
return processResult;
}
public ServiceResult updateBooking(Bookings booking) {
ServiceResult processResult= new ServiceResult();