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
@@ -259,6 +259,9 @@ public class BookingController {
}else if(queryFilter.getString("export_type").equals( "failedlist")) {
reportDef = ExcelUtils.getExportDefineByName("EXPORT_FAILED_LIST");
reportFileName = "FailBooking.xlsx";
} else if (queryFilter.getString("export_type").equals( "approval_routing")) {
reportDef = ExcelUtils.getExportDefineByName("EXPORT_APPROVAL_ROUTING");
reportFileName = "ApprovalRoutingLog.xlsx";
}else {
reportDef = ExcelUtils.getExportDefineByName("EXPORT_OTHER_BOOKING");
reportFileName = "OtherBooking.xlsx";
@@ -132,7 +132,10 @@ public class BookingsViewDto implements Serializable {
private String followUpStatusName;
private String roomStatusName;
private String segmentName;
private String approverId;
private String approverName;
private String approvalReason;
//-- For export
private String approveStatusName;
private String bookTypeName;
@@ -239,6 +239,12 @@ public class BookingsView implements Serializable {
private String changeCheckinDate;
@Column(name="change_checkout_date")
private String changeCheckoutDate;
@Column(name = "approver_id")
private String approverId;
@Column(name = "approver_name")
private String approverName;
@Column(name = "approval_reason")
private String approvalReason;
@Transient
private String status;
@@ -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();
@@ -45,6 +45,7 @@ import com.mgm.mcrm.logging.services.SysLogOperationService;
import com.mgm.mcrm.reservation.dtos.BookingsDto;
import com.mgm.mcrm.reservation.dtos.request.OtherPropertyCreateUpdateRequest;
import com.mgm.mcrm.reservation.mappers.BookingMapper;
import com.mgm.mcrm.reservation.models.Bookings;
import com.mgm.mcrm.reservation.repositories.BookingDao;
import com.mgm.mcrm.reservation.repositories.BookingViewDao;
import jakarta.annotation.Resource;
@@ -444,9 +445,9 @@ public class OtherBookingService {
ArrayList dateArray = new ArrayList();
dateArray.add(date);
booking.setDateList(JSONArray.toJSONString(dateArray));
bookingDao.save(bookingMapper.toBooking(booking));
System.out.println(booking.getId());
Bookings save = bookingDao.save(bookingMapper.toBooking(booking));
booking.setId(save.getId());
resultBookings.add(booking);
//计算allotment
@@ -747,7 +747,7 @@ public class WaitlistService {
roomTypeId = booking.getRoomTypeId();
// roomTypeCode = booking.getRoomTypeCode();
CfgTiers tier = tierDao.findByTierName(String.valueOf(member.get("tierName")));
CfgTiers tier = tierDao.findByTierNameOpera(String.valueOf(member.get("tierName")));
CfgItemInventory item = new CfgItemInventory();
if(tier!=null && roomTypeId!=null) {
item = itemDao.findByTierIdAndRoomId(Long.valueOf(tier.getId()),roomId);