This commit is contained in:
Mauve
2026-10-26 09:31:45 +08:00
parent dde0d60825
commit 909b9684c7
22 changed files with 356 additions and 211 deletions
@@ -27,6 +27,12 @@
"dataType": "String", "dataType": "String",
"columnWidth":30 "columnWidth":30
}, },
{
"columnHeader":"Category",
"attrName": "category",
"dataType": "String",
"columnWidth":30
},
{ {
"columnHeader":"Created Time", "columnHeader":"Created Time",
"attrName": "createdAt", "attrName": "createdAt",
@@ -20,13 +20,6 @@
"attrName": "emailName", "attrName": "emailName",
"dataType": "String" "dataType": "String"
}, },
{
"columnHeader":"Hotel Code",
"checkHeader":true,
"headerRowIdx":0,
"attrName": "hotelCode",
"dataType": "String"
},
{ {
"columnHeader":"Property Code", "columnHeader":"Property Code",
"checkHeader":true, "checkHeader":true,
@@ -47,6 +40,20 @@
"headerRowIdx":0, "headerRowIdx":0,
"attrName": "sortOrderVal", "attrName": "sortOrderVal",
"dataType": "String" "dataType": "String"
},
{
"columnHeader":"Created Time",
"checkHeader":true,
"headerRowIdx":0,
"attrName": "createdTime",
"dataType": "String"
},
{
"columnHeader":"Updated Time",
"checkHeader":true,
"headerRowIdx":0,
"attrName": "updatedTime",
"dataType": "String"
} }
] ]
}] }]
@@ -6,8 +6,9 @@
"offsetRow": 1, "offsetRow": 1,
"offsetCol": 0, "offsetCol": 0,
"objClassName": "com.mgm.mcrm.common.dtos.dataimport.appsetting.RoomTypeImportRow", "objClassName": "com.mgm.mcrm.common.dtos.dataimport.appsetting.RoomTypeImportRow",
"columnDefs": [{ "columnDefs": [
"columnHeader":"Room Type", {
"columnHeader":"Code",
"checkHeader":true, "checkHeader":true,
"headerRowIdx":0, "headerRowIdx":0,
"attrName": "name", "attrName": "name",
@@ -19,6 +20,15 @@
"headerRowIdx":0, "headerRowIdx":0,
"attrName": "nameCN", "attrName": "nameCN",
"dataType": "String" "dataType": "String"
},
{
"columnHeader":"Category",
"checkHeader":true,
"optionalHeader":true,
"headerRowIdx":0,
"attrName": "category",
"dataType": "String",
"columnWidth":30
} }
] ]
}] }]
+25 -3
View File
@@ -20,15 +20,15 @@
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>21</java.version> <java.version>21</java.version>
<tomcat.version>11.0.25</tomcat.version> <tomcat.version>11.0.26</tomcat.version>
<netty.version>4.2.18.Final</netty.version> <netty.version>4.2.18.Final</netty.version>
<httpclient5.version>5.6.4</httpclient5.version> <httpclient5.version>5.6.4</httpclient5.version>
<httpclient5-win.version>5.2.3</httpclient5-win.version> <httpclient5-win.version>5.2.3</httpclient5-win.version>
<httpcore5.version>5.4.3</httpcore5.version> <httpcore5.version>5.4.3</httpcore5.version>
<activemq.version>6.2.7</activemq.version>
<fasterxml.jackson.version>2.22.3</fasterxml.jackson.version> <fasterxml.jackson.version>2.22.3</fasterxml.jackson.version>
<tools.jackson.version>3.2.3</tools.jackson.version> <tools.jackson.version>3.2.3</tools.jackson.version>
<log4j2.version>2.26.1</log4j2.version> <log4j2.version>2.26.1</log4j2.version>
<hibernate-validator.version>9.2.0.Beta1</hibernate-validator.version>
<maven.compiler.source>${java.version}</maven.compiler.source> <maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target> <maven.compiler.target>${java.version}</maven.compiler.target>
<activemq.version>6.3.1</activemq.version> <activemq.version>6.3.1</activemq.version>
@@ -94,6 +94,11 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId> <artifactId>spring-boot-starter-mail</artifactId>
</dependency> </dependency>
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>4.0.0-M1</version>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId> <artifactId>spring-boot-starter-validation</artifactId>
@@ -176,7 +181,7 @@
<dependency> <dependency>
<groupId>com.auth0</groupId> <groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId> <artifactId>java-jwt</artifactId>
<version>4.5.0</version> <version>4.6.2</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.jsmpp</groupId> <groupId>org.jsmpp</groupId>
@@ -251,6 +256,23 @@
<source>${java.version}</source> <source>${java.version}</source>
<target>${java.version}</target> <target>${java.version}</target>
<encoding>UTF-8</encoding> <encoding>UTF-8</encoding>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>0.2.0</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.6.3</version>
</path>
</annotationProcessorPaths>
</configuration> </configuration>
</plugin> </plugin>
<plugin> <plugin>
@@ -141,22 +141,22 @@ public class PlayerService {
ServiceResult result = new ServiceResult(); ServiceResult result = new ServiceResult();
JSONObject requestObj = new JSONObject(); JSONObject requestObj = new JSONObject();
if(!StringUtils.isEmpty(playerId)) { if(!StringUtils.isEmpty(playerId)) {
requestObj.put("playerId", playerId); requestObj.put("PlayerId", playerId);
} }
if(!StringUtils.isEmpty(roomCate)) { if(!StringUtils.isEmpty(roomCate)) {
requestObj.put("roomCat", roomCate); requestObj.put("RoomCat", roomCate);
} }
if(dateRange != null) { if(dateRange != null) {
requestObj.put("dateRange", dateRange); requestObj.put("DateRange", dateRange);
} }
if(dates != null) { if(dates != null) {
requestObj.put("dates", dates); requestObj.put("Dates", dates);
} }
if(!StringUtils.isEmpty(bookingType)) { if(!StringUtils.isEmpty(bookingType)) {
requestObj.put("bookingType", bookingType); requestObj.put("BookingType", bookingType);
} }
if(!StringUtils.isEmpty(property)) { if(!StringUtils.isEmpty(property)) {
requestObj.put("property", property); requestObj.put("Property", property);
} }
HttpResponseResult httpResult = HttpUtil.invokeWebAPI(requestObj, "POST", request, null); HttpResponseResult httpResult = HttpUtil.invokeWebAPI(requestObj, "POST", request, null);
String content = httpResult.getResponseContent(); String content = httpResult.getResponseContent();
@@ -30,8 +30,8 @@ public class SysSettingService {
public Boolean isAPPMock() { public Boolean isAPPMock() {
SysSetting sysSetting = new SysSetting(); SysSetting sysSetting = new SysSetting();
// sysSetting = sysSettingDao.getBySettingKey("APP_MOCK"); sysSetting = sysSettingDao.getBySettingKey("APP_MOCK");
sysSetting.setSettingValue("1"); // sysSetting.setSettingValue("1");
Boolean isMock = Strings.CS.equals(sysSetting.getSettingValue(), "1"); Boolean isMock = Strings.CS.equals(sysSetting.getSettingValue(), "1");
return isMock; return isMock;
} }
@@ -134,6 +134,8 @@ public class RoomCriteriaDaylightService {
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
}; };
private static final int AUTO_SYNC_ALLOTMENT_DAYS = 15;
public ServiceResult createRoomCriteria(CfgRoomCriteriaDaylightRequest criteriaRequest) { public ServiceResult createRoomCriteria(CfgRoomCriteriaDaylightRequest criteriaRequest) {
ServiceResult processResult = new ServiceResult(); ServiceResult processResult = new ServiceResult();
LocalDateTime createDate = LocalDateTime.now(); LocalDateTime createDate = LocalDateTime.now();
@@ -1521,4 +1523,93 @@ public class RoomCriteriaDaylightService {
return calculateRequests; return calculateRequests;
} }
/**
* 自动同步入口:当 cfg_room_criteria_daylight 完全为空时触发。
* 遍历所有 category=DAYLIGHT 的物业,逐个以"今天 ~ 今天+15天"拉取其全部 block 的 allotment;
* 单个物业出错或无 block 则跳过该物业,继续处理下一个。
*/
public AjaxResult syncAllDaylightAllotmentIfEmpty() {
AjaxResult result = new AjaxResult();
try {
if (criteriaDaylightDao.count() > 0) {
result.setSuccess(true);
result.setMessage("Allotment already has data, skip auto sync");
return result;
}
List<CfgProperties> daylightProperties = propertyDao.findByCategory("DAYLIGHT");
if (daylightProperties == null || daylightProperties.isEmpty()) {
result.setSuccess(false);
result.setMessage("No DAYLIGHT property found for auto allotment sync");
return result;
}
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate today = LocalDate.now();
String fromDate = today.format(formatter);
String toDate = today.plusDays(AUTO_SYNC_ALLOTMENT_DAYS).format(formatter);
int successCount = 0;
int skipCount = 0;
List<String> failedProperties = new ArrayList<>();
for (CfgProperties property : daylightProperties) {
String dlPropertyId = property.getDlPropertyId();
Long propertyId = property.getId();
if (StringUtils.isBlank(dlPropertyId) || propertyId == null) {
skipCount++;
continue;
}
List<CfgBlockCodes> blockCodes = blockCodeDao.findAllByPropertyIdAndDlBlockIdIsNotNull(propertyId);
if (blockCodes == null || blockCodes.isEmpty()) {
log.warn("[AUTO_SYNC]No Daylight block code found for property[{}], skip", dlPropertyId);
skipCount++;
continue;
}
List<String> dlBlockCodeIds = new ArrayList<>();
for (CfgBlockCodes blockCode : blockCodes) {
dlBlockCodeIds.add(blockCode.getDlBlockId());
}
SyncDaylightAllotmentRequest syncRequest = new SyncDaylightAllotmentRequest();
syncRequest.setDlPropertyId(dlPropertyId);
syncRequest.setFromDate(fromDate);
syncRequest.setToDate(toDate);
syncRequest.setDlBlockCodeIds(dlBlockCodeIds);
try {
AjaxResult syncResult = this.syncCalendarAllotment(syncRequest);
if (syncResult != null && syncResult.isSuccess()) {
successCount++;
log.info("[AUTO_SYNC]Property[{}] allotment sync done: {}", dlPropertyId, syncResult.getMessage());
} else {
failedProperties.add(dlPropertyId);
log.warn("[AUTO_SYNC]Property[{}] allotment sync failed: {}", dlPropertyId,
syncResult != null ? syncResult.getMessage() : "null result");
}
} catch (Exception e) {
failedProperties.add(dlPropertyId);
log.error("[AUTO_SYNC]Property[{}] allotment sync error, skip this property: {}", dlPropertyId, e.getMessage());
}
}
StringBuilder message = new StringBuilder();
message.append("Auto allotment sync finished. dateRange=").append(fromDate)
.append("~").append(toDate)
.append(", success=").append(successCount)
.append(", skip=").append(skipCount)
.append(", fail=").append(failedProperties.size());
if (!failedProperties.isEmpty()) {
message.append(", failed properties=[").append(StringUtils.join(failedProperties, ",")).append("]");
}
result.setSuccess(failedProperties.isEmpty() && successCount > 0);
result.setMessage(message.toString());
} catch (Exception err) {
result.setSuccess(false);
result.setMessage("Failed to auto sync Daylight allotment:" + err.getMessage());
log.error("Failed to auto sync Daylight allotment :{}", err.getMessage());
}
return result;
}
} }
@@ -30,7 +30,7 @@ public class RequestReasonController {
@Resource @Resource
private SysLogOperationService sysAuditLogService; private SysLogOperationService sysAuditLogService;
@CheckPermission(routerId="00502",permissionCode="ADD") @CheckPermission(routerId="00602",permissionCode="ADD")
@OperationLog(eventCode = "request_reason_create") @OperationLog(eventCode = "request_reason_create")
@RequestMapping(value = "/approval/request_reason/create", method = RequestMethod.POST, produces = "application/json;charset=UTF-8",consumes = MediaType.APPLICATION_JSON_VALUE) @RequestMapping(value = "/approval/request_reason/create", method = RequestMethod.POST, produces = "application/json;charset=UTF-8",consumes = MediaType.APPLICATION_JSON_VALUE)
public AjaxResult createRequestReason(HttpServletRequest request, @RequestBody CfgRequestReason requestReason) { public AjaxResult createRequestReason(HttpServletRequest request, @RequestBody CfgRequestReason requestReason) {
@@ -69,7 +69,7 @@ public class RequestReasonController {
return processResult; return processResult;
} }
@CheckPermission(routerId="00502",permissionCode="MODIFY") @CheckPermission(routerId="00602",permissionCode="MODIFY")
@OperationLog(eventCode="request_reason_update") @OperationLog(eventCode="request_reason_update")
@RequestMapping(value = "/approval/request_reason/update", method = RequestMethod.POST, produces = "application/json;charset=UTF-8",consumes = MediaType.APPLICATION_JSON_VALUE) @RequestMapping(value = "/approval/request_reason/update", method = RequestMethod.POST, produces = "application/json;charset=UTF-8",consumes = MediaType.APPLICATION_JSON_VALUE)
public AjaxResult updateRequestReason(HttpServletRequest request, @RequestBody CfgRequestReason requestReason) { public AjaxResult updateRequestReason(HttpServletRequest request, @RequestBody CfgRequestReason requestReason) {
@@ -114,7 +114,7 @@ public class RequestReasonController {
return processResult; return processResult;
} }
@CheckPermission(routerId="00502",permissionCode="VIEW") @CheckPermission(routerId="00602",permissionCode="VIEW")
@RequestMapping(value = "/approval/request_reason/get", method = RequestMethod.POST, produces = "application/json;charset=UTF-8",consumes = MediaType.APPLICATION_JSON_VALUE) @RequestMapping(value = "/approval/request_reason/get", method = RequestMethod.POST, produces = "application/json;charset=UTF-8",consumes = MediaType.APPLICATION_JSON_VALUE)
public AjaxResult getRequestReasonById(HttpServletRequest request, @RequestBody(required=false) Map<String,Object> queryParas) { public AjaxResult getRequestReasonById(HttpServletRequest request, @RequestBody(required=false) Map<String,Object> queryParas) {
boolean isSuccess = false; boolean isSuccess = false;
@@ -140,7 +140,7 @@ public class RequestReasonController {
return processResult; return processResult;
} }
@CheckPermission(routerId="00502",permissionCode="REMOVE") @CheckPermission(routerId="00602",permissionCode="REMOVE")
@OperationLog(eventCode="request_reason_delete") @OperationLog(eventCode="request_reason_delete")
@RequestMapping(value = "/approval/request_reason/delete", method = RequestMethod.POST, produces = "application/json;charset=UTF-8",consumes = MediaType.APPLICATION_JSON_VALUE) @RequestMapping(value = "/approval/request_reason/delete", method = RequestMethod.POST, produces = "application/json;charset=UTF-8",consumes = MediaType.APPLICATION_JSON_VALUE)
public AjaxResult deleteRequestReason(HttpServletRequest request, @RequestBody CfgRequestReason requestReason) { public AjaxResult deleteRequestReason(HttpServletRequest request, @RequestBody CfgRequestReason requestReason) {
@@ -184,7 +184,7 @@ public class RequestReasonController {
return processResult; return processResult;
} }
@CheckPermission(routerId="00502",permissionCode="VIEW") @CheckPermission(routerId="00602",permissionCode="VIEW")
@RequestMapping(value = "/approval/request_reason/get_page", produces = "application/json;charset=UTF-8",consumes = MediaType.APPLICATION_JSON_VALUE) @RequestMapping(value = "/approval/request_reason/get_page", produces = "application/json;charset=UTF-8",consumes = MediaType.APPLICATION_JSON_VALUE)
public AjaxResult getRequestReasonByPage(HttpServletRequest request,@RequestBody(required=false) Map<String,Object> queryParas) throws Exception { public AjaxResult getRequestReasonByPage(HttpServletRequest request,@RequestBody(required=false) Map<String,Object> queryParas) throws Exception {
QueryFilter queryFilter = (queryParas!=null?new QueryFilter(queryParas):new QueryFilter(request)); QueryFilter queryFilter = (queryParas!=null?new QueryFilter(queryParas):new QueryFilter(request));
@@ -13,6 +13,7 @@ import jakarta.servlet.http.HttpServletRequest;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Strings;
import java.time.Duration; import java.time.Duration;
import java.time.Instant; import java.time.Instant;
@@ -55,6 +56,11 @@ public class JwtTokenUtil {
Instant expDate = now.plus(Duration.ofMinutes(tokeExpiration)); Instant expDate = now.plus(Duration.ofMinutes(tokeExpiration));
String uuid = UUID.randomUUID().toString().replace("-",""); String uuid = UUID.randomUUID().toString().replace("-","");
//在Gen Token之前 將@mgm.mo 後綴去掉
if (user.getLoginId() != null){
user.setLoginId(Strings.CI.replace(user.getLoginId(),"@mgm.mo", ""));
}
String tokenString = JWT.create() String tokenString = JWT.create()
.withIssuer(issueSource) .withIssuer(issueSource)
.withIssuedAt(now).withNotBefore(now).withExpiresAt(expDate).withJWTId(uuid) .withIssuedAt(now).withNotBefore(now).withExpiresAt(expDate).withJWTId(uuid)
@@ -23,7 +23,6 @@ import com.mgm.mcrm.common.dtos.dataimport.ValidateResult;
import com.mgm.mcrm.common.dtos.dataimport.appsetting.ExceptionOperaImportRow; import com.mgm.mcrm.common.dtos.dataimport.appsetting.ExceptionOperaImportRow;
import com.mgm.mcrm.common.dtos.excelmodel.ImportDefine; import com.mgm.mcrm.common.dtos.excelmodel.ImportDefine;
import com.mgm.mcrm.common.utils.DaoUtil; import com.mgm.mcrm.common.utils.DaoUtil;
import com.mgm.mcrm.common.utils.DateTimeUtil;
import com.mgm.mcrm.common.utils.ExcelUtils; import com.mgm.mcrm.common.utils.ExcelUtils;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.persistence.criteria.Predicate; import jakarta.persistence.criteria.Predicate;
@@ -37,6 +36,8 @@ import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.*; import java.util.*;
@Service @Service
@@ -191,6 +192,7 @@ public class ExceptionOperaService {
} }
private Specification<CfgExceptionOpera> buildSpecificationByQueryFilter(QueryFilter queryfilter) { private Specification<CfgExceptionOpera> buildSpecificationByQueryFilter(QueryFilter queryfilter) {
LocalDate today = LocalDate.now();
return (root, criteriaQuery, cb) -> { return (root, criteriaQuery, cb) -> {
List<Predicate> list = new ArrayList<>(); List<Predicate> list = new ArrayList<>();
if (StringUtils.isNotBlank(queryfilter.getString("searchName"))) { if (StringUtils.isNotBlank(queryfilter.getString("searchName"))) {
@@ -202,14 +204,10 @@ public class ExceptionOperaService {
"%" + queryfilter.getString("searchId").trim().toUpperCase() + "%")); "%" + queryfilter.getString("searchId").trim().toUpperCase() + "%"));
} }
List<Long> availableBlockCodes = blockCodeDao.getAvailableBlockCodes(DateTimeUtil.getCurrentDateTime("yyyy-MM-dd")); List<Long> availableBlockCodes = blockCodeDao.getAvailableBlockCodes(today.atStartOfDay());
if (availableBlockCodes == null) { list.add(availableBlockCodes == null || availableBlockCodes.isEmpty()
availableBlockCodes = new ArrayList<>(); ? cb.disjunction()
} : root.get("blockCodeId").in(availableBlockCodes));
if (availableBlockCodes.isEmpty()) {
availableBlockCodes.add(-1L);
}
// list.add(root.get("blockCodeId").in(availableBlockCodes));
Predicate[] predicates = new Predicate[list.size()]; Predicate[] predicates = new Predicate[list.size()];
criteriaQuery.where(list.toArray(predicates)); criteriaQuery.where(list.toArray(predicates));
return cb.and(list.toArray(predicates)); return cb.and(list.toArray(predicates));
@@ -217,6 +215,7 @@ public class ExceptionOperaService {
} }
private Specification<CfgExceptionOperaView> buildSpecificationViewByQueryFilter(QueryFilter queryfilter) { private Specification<CfgExceptionOperaView> buildSpecificationViewByQueryFilter(QueryFilter queryfilter) {
Date today = Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant());
return (root, criteriaQuery, cb) -> { return (root, criteriaQuery, cb) -> {
List<Predicate> list = new ArrayList<>(); List<Predicate> list = new ArrayList<>();
if (StringUtils.isNotBlank(queryfilter.getString("searchName"))) { if (StringUtils.isNotBlank(queryfilter.getString("searchName"))) {
@@ -227,7 +226,7 @@ public class ExceptionOperaService {
list.add(cb.like(cb.upper(root.get("userId")), list.add(cb.like(cb.upper(root.get("userId")),
"%" + queryfilter.getString("searchId").trim().toUpperCase() + "%")); "%" + queryfilter.getString("searchId").trim().toUpperCase() + "%"));
} }
list.add(cb.greaterThanOrEqualTo(root.get("endDate"), new Date())); list.add(cb.greaterThanOrEqualTo(root.get("endDate"), today));
if (queryfilter.getParaObject("pageIds") != null) { if (queryfilter.getParaObject("pageIds") != null) {
List<Long> pageIds = (List<Long>) queryfilter.getParaObject("pageIds"); List<Long> pageIds = (List<Long>) queryfilter.getParaObject("pageIds");
list.add(root.get("id").in(pageIds)); list.add(root.get("id").in(pageIds));
@@ -29,11 +29,11 @@ import com.mgm.mcrm.common.dtos.dataimport.ValidateResult;
import com.mgm.mcrm.common.dtos.dataimport.appsetting.OperaMappingImportRow; import com.mgm.mcrm.common.dtos.dataimport.appsetting.OperaMappingImportRow;
import com.mgm.mcrm.common.dtos.excelmodel.ImportDefine; import com.mgm.mcrm.common.dtos.excelmodel.ImportDefine;
import com.mgm.mcrm.common.utils.DaoUtil; import com.mgm.mcrm.common.utils.DaoUtil;
import com.mgm.mcrm.common.utils.DateTimeUtil;
import com.mgm.mcrm.common.utils.ExcelUtils; import com.mgm.mcrm.common.utils.ExcelUtils;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.persistence.criteria.CriteriaBuilder; import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.Predicate; import jakarta.persistence.criteria.Predicate;
import jakarta.persistence.criteria.Root;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Strings; import org.apache.commons.lang3.Strings;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
@@ -145,8 +145,6 @@ public class OperaService {
} }
public DataTableResult<CfgOperaView> getOperaViewByPage(OperaPageRequest pageRequest) { public DataTableResult<CfgOperaView> getOperaViewByPage(OperaPageRequest pageRequest) {
//--先主表找分页,然后再按照分页结果找View的对象
Specification<CfgOpera> listSpec = buildSpecification(pageRequest);
int pageSize = pageRequest.getPageSize(); int pageSize = pageRequest.getPageSize();
int pageStart = pageRequest.getStartRow() / pageSize; int pageStart = pageRequest.getStartRow() / pageSize;
String sortProperties = pageRequest.getSortOrder(); String sortProperties = pageRequest.getSortOrder();
@@ -159,29 +157,16 @@ public class OperaService {
sortProperties = sortProperties.replace("marketCode-", "marketCodeId-"); sortProperties = sortProperties.replace("marketCode-", "marketCodeId-");
sortProperties = sortProperties.replace("sourceCode-", "sourceCodeId-"); sortProperties = sortProperties.replace("sourceCode-", "sourceCodeId-");
sortProperties = sortProperties.replace("bookingType-", "bookingTypeId-"); sortProperties = sortProperties.replace("bookingType-", "bookingTypeId-");
String viewSortProperties = sortProperties;
sortProperties = sortProperties.replace("operaRoomType-asc", ""); sortProperties = sortProperties.replace("operaRoomType-asc", "");
sortProperties = sortProperties.replace("operaRoomType-desc", ""); sortProperties = sortProperties.replace("operaRoomType-desc", "");
pageRequest.setSortOrder(sortProperties); pageRequest.setSortOrder(sortProperties);
Sort sort = DaoUtil.buildSortByString(pageRequest.getSortOrder(), "id"); Sort sort = DaoUtil.buildSortByString(pageRequest.getSortOrder(), "id");
Pageable pageable = PageRequest.of(pageStart, pageSize, sort); Pageable pageable = PageRequest.of(pageStart, pageSize, sort);
Page<CfgOpera> resultPage = operaDao.findAll(listSpec, pageable); Page<CfgOperaView> resultPage = operaViewDao.findAll(buildSpecificationView(pageRequest), pageable);
DataTableResult<CfgOperaView> dataResult = new DataTableResult<>(); DataTableResult<CfgOperaView> dataResult = new DataTableResult<>();
dataResult.setTotalRecords(resultPage.getTotalElements()); dataResult.setTotalRecords(resultPage.getTotalElements());
dataResult.setPageSize(pageSize); dataResult.setPageSize(pageSize);
List<CfgOperaView> resultList = new ArrayList<>(); dataResult.setRowData(resultPage.getContent());
List<CfgOpera> masterPageData = resultPage.getContent();
if (masterPageData != null && !masterPageData.isEmpty()) {
List<Long> ids = new ArrayList<>();
for (CfgOpera item : masterPageData) {
ids.add(item.getId());
}
pageRequest.setPageIds(ids);
pageRequest.setSortOrder(viewSortProperties);
resultList = this.listOperaView(pageRequest);
}
dataResult.setRowData(resultList);
return dataResult; return dataResult;
} }
@@ -191,106 +176,81 @@ public class OperaService {
return operaViewDao.findAll(listSpec, sort); return operaViewDao.findAll(listSpec, sort);
} }
private Specification<CfgOpera> buildSpecification(OperaPageRequest pageRequest) {
return (root, criteriaQuery, cb) -> {
List<Predicate> list = new ArrayList<>();
// if (StringUtils.isNotBlank(queryfilter.getString("searchName"))) {
// list.add(cb.like(cb.upper(root.get("opera_id")),
// "%" + queryfilter.getString("searchName").toUpperCase() + "%"));
// }
if (StringUtils.isNotBlank(pageRequest.getSearchBlockCode())) {
CriteriaBuilder.In<Long> in = cb.in(root.get("blockCodeId"));
List<CfgBlockCodes> blockCode = blockCodeDao.getLikeByCode(pageRequest.getSearchBlockCode());
if (!blockCode.isEmpty()) {
for (CfgBlockCodes b : blockCode) {
in.value(b.getId());
}
list.add(in);
}
}
if (StringUtils.isNotBlank(pageRequest.getSearchMarketCode())) {
CriteriaBuilder.In<Long> in = cb.in(root.get("marketCodeId"));
List<CfgMarketCodes> marketCode = marketCodeDao.getLikeByCode(pageRequest.getSearchMarketCode().trim());
if (!marketCode.isEmpty()) {
for (CfgMarketCodes b : marketCode) {
in.value(b.getId());
}
list.add(in);
}
}
if (StringUtils.isNotBlank(pageRequest.getSearchRateCode())) {
CriteriaBuilder.In<Long> in = cb.in(root.get("rateCodeId"));
List<CfgRateCodes> rateCode = rateCodeDao.getLikeByCode(pageRequest.getSearchRateCode().trim());
if (!rateCode.isEmpty()) {
for (CfgRateCodes b : rateCode) {
in.value(b.getId());
}
list.add(in);
}
}
if (StringUtils.isNotBlank(pageRequest.getSearchDivision())) {
CriteriaBuilder.In<Long> in = cb.in(root.get("divisionId"));
List<CfgDivisions> division = divisionDao.getLikeByName(pageRequest.getSearchDivision().trim());
if (!division.isEmpty()) {
for (CfgDivisions b : division) {
in.value(b.getId());
}
list.add(in);
}
}
if (StringUtils.isNotBlank(pageRequest.getSearchDepartment())) {
CriteriaBuilder.In<Long> in = cb.in(root.get("departmentId"));
List<CfgDepartments> department = departmentDao.getLikeByName(pageRequest.getSearchDepartment().trim());
if (!department.isEmpty()) {
for (CfgDepartments b : department) {
in.value(b.getId());
}
list.add(in);
}
}
if (StringUtils.isNotBlank(pageRequest.getSearchSection())) {
CriteriaBuilder.In<Long> in = cb.in(root.get("sectionId"));
List<CfgSections> section = sectionDao.getLikeByName(pageRequest.getSearchSection().trim());
if (!section.isEmpty()) {
for (CfgSections b : section) {
in.value(b.getId());
}
list.add(in);
}
}
List<Long> availableBlockCodes = blockCodeDao.getAvailableBlockCodes(DateTimeUtil.getCurrentDateTime("yyyy-MM-dd HH:mm:ss"));
if (availableBlockCodes == null) {
availableBlockCodes = new ArrayList<>();
}
if (availableBlockCodes.isEmpty()) {
availableBlockCodes.add(-1L);
}
// list.add(root.get("blockCodeId").in(availableBlockCodes));
Predicate[] predicates = new Predicate[list.size()];
criteriaQuery.where(list.toArray(predicates));
return cb.and(list.toArray(predicates));
};
}
private Specification<CfgOperaView> buildSpecificationView(OperaPageRequest pageRequest) { private Specification<CfgOperaView> buildSpecificationView(OperaPageRequest pageRequest) {
return (root, criteriaQuery, cb) -> { return (root, criteriaQuery, cb) -> {
List<Predicate> list = new ArrayList<>(); List<Predicate> list = new ArrayList<>();
// if (StringUtils.isNotBlank(queryfilter.getString("searchName"))) {
// list.add(cb.like(cb.upper(root.get("opera_id")),
// "%" + queryfilter.getString("searchName").toUpperCase() + "%"));
// }
list.add(cb.greaterThanOrEqualTo(root.get("endDate"), new Date())); list.add(cb.greaterThanOrEqualTo(root.get("endDate"), new Date()));
appendOperaSearchPredicates(list, cb, root, pageRequest);
if (pageRequest.getPageIds() != null) { if (pageRequest.getPageIds() != null) {
list.add(root.get("id").in(pageRequest.getPageIds())); list.add(root.get("id").in(pageRequest.getPageIds()));
} }
return cb.and(list.toArray(new Predicate[0]));
Predicate[] predicates = new Predicate[list.size()];
criteriaQuery.where(list.toArray(predicates));
return cb.and(list.toArray(predicates));
}; };
} }
private void appendOperaSearchPredicates(List<Predicate> list, CriteriaBuilder cb, Root<CfgOperaView> root, OperaPageRequest pageRequest) {
if (StringUtils.isNotBlank(pageRequest.getSearchBlockCode())) {
CriteriaBuilder.In<Long> in = cb.in(root.get("blockCodeId"));
List<CfgBlockCodes> blockCode = blockCodeDao.getLikeByCode(pageRequest.getSearchBlockCode());
if (!blockCode.isEmpty()) {
for (CfgBlockCodes b : blockCode) {
in.value(b.getId());
}
list.add(in);
}
}
if (StringUtils.isNotBlank(pageRequest.getSearchMarketCode())) {
CriteriaBuilder.In<Long> in = cb.in(root.get("marketCodeId"));
List<CfgMarketCodes> marketCode = marketCodeDao.getLikeByCode(pageRequest.getSearchMarketCode().trim());
if (!marketCode.isEmpty()) {
for (CfgMarketCodes b : marketCode) {
in.value(b.getId());
}
list.add(in);
}
}
if (StringUtils.isNotBlank(pageRequest.getSearchRateCode())) {
CriteriaBuilder.In<Long> in = cb.in(root.get("rateCodeId"));
List<CfgRateCodes> rateCode = rateCodeDao.getLikeByCode(pageRequest.getSearchRateCode().trim());
if (!rateCode.isEmpty()) {
for (CfgRateCodes b : rateCode) {
in.value(b.getId());
}
list.add(in);
}
}
if (StringUtils.isNotBlank(pageRequest.getSearchDivision())) {
CriteriaBuilder.In<Long> in = cb.in(root.get("divisionId"));
List<CfgDivisions> division = divisionDao.getLikeByName(pageRequest.getSearchDivision().trim());
if (!division.isEmpty()) {
for (CfgDivisions b : division) {
in.value(b.getId());
}
list.add(in);
}
}
if (StringUtils.isNotBlank(pageRequest.getSearchDepartment())) {
CriteriaBuilder.In<Long> in = cb.in(root.get("departmentId"));
List<CfgDepartments> department = departmentDao.getLikeByName(pageRequest.getSearchDepartment().trim());
if (!department.isEmpty()) {
for (CfgDepartments b : department) {
in.value(b.getId());
}
list.add(in);
}
}
if (StringUtils.isNotBlank(pageRequest.getSearchSection())) {
CriteriaBuilder.In<Long> in = cb.in(root.get("sectionId"));
List<CfgSections> section = sectionDao.getLikeByName(pageRequest.getSearchSection().trim());
if (!section.isEmpty()) {
for (CfgSections b : section) {
in.value(b.getId());
}
list.add(in);
}
}
}
public boolean deleteOpera(DeleteOperaRequest deleteOperaRequest) { public boolean deleteOpera(DeleteOperaRequest deleteOperaRequest) {
operaDao.deleteById(deleteOperaRequest.getId()); operaDao.deleteById(deleteOperaRequest.getId());
@@ -41,4 +41,6 @@ public interface PropertyDao extends JpaRepository<CfgProperties, Long> {
CfgProperties getByName(String name); CfgProperties getByName(String name);
CfgProperties findByDlPropertyId(String dlPropertyId); CfgProperties findByDlPropertyId(String dlPropertyId);
List<CfgProperties> findByCategory(String category);
} }
@@ -33,6 +33,7 @@ import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.mgm.mcrm.common.utils.DaoUtil; import com.mgm.mcrm.common.utils.DaoUtil;
import com.mgm.mcrm.common.utils.DateTimeUtil;
import com.mgm.mcrm.common.utils.ExcelUtils; import com.mgm.mcrm.common.utils.ExcelUtils;
@Slf4j @Slf4j
@@ -327,14 +328,19 @@ public class PropertyService {
for (int i = 0; i < importRows.size(); i++) { for (int i = 0; i < importRows.size(); i++) {
PropertyImportRow pItem = importRows.get(i); PropertyImportRow pItem = importRows.get(i);
CfgProperties newProperty = new CfgProperties(); CfgProperties newProperty = new CfgProperties();
newProperty.setShowCalendar(1);
newProperty.setStatus(1);
newProperty.setDisplayType(1);
newProperty.setName(pItem.getName()); newProperty.setName(pItem.getName());
newProperty.setEmailName(pItem.getEmailName()); newProperty.setEmailName(pItem.getEmailName());
newProperty.setCategory(pItem.getCategory()); newProperty.setCategory(pItem.getCategory());
newProperty.setCode(pItem.getCode()); newProperty.setCode(pItem.getCode());
newProperty.setHotelCode(pItem.getHotelCode()); newProperty.setHotelCode(pItem.getHotelCode());
newProperty.setSortOrder(Integer.valueOf(pItem.getSortOrder())); newProperty.setSortOrder(Integer.valueOf(pItem.getSortOrder()));
newProperty.setCreatedAt(currentTime); LocalDateTime createdAt = parseImportDateTime(pItem.getCreatedTime());
newProperty.setUpdatedAt(currentTime); LocalDateTime updatedAt = parseImportDateTime(pItem.getUpdatedTime());
newProperty.setCreatedAt(createdAt != null ? createdAt : currentTime);
newProperty.setUpdatedAt(updatedAt != null ? updatedAt : currentTime);
newPropertyList.add(newProperty); newPropertyList.add(newProperty);
} }
propertyDao.saveAll(newPropertyList); propertyDao.saveAll(newPropertyList);
@@ -350,4 +356,18 @@ public class PropertyService {
} }
return result; return result;
} }
private LocalDateTime parseImportDateTime(String value) {
if (StringUtils.isBlank(value)) {
return null;
}
LocalDateTime parsed = DateTimeUtil.getDateFromString(value, "yyyy-MM-dd'T'HH:mm:ss.SSS");
if (parsed == null) {
parsed = DateTimeUtil.getDateFromString(value, "yyyy-MM-dd'T'HH:mm:ss");
}
if (parsed == null) {
parsed = DateTimeUtil.getDateFromString(value, "yyyy-MM-dd HH:mm:ss");
}
return parsed;
}
} }
@@ -177,6 +177,9 @@ public class RoomTypeService {
if (!roomTypeList.isEmpty()) { if (!roomTypeList.isEmpty()) {
totalRows = roomTypeList.size(); totalRows = roomTypeList.size();
for (RoomTypeImportRow roomTypeImportRow : roomTypeList) { for (RoomTypeImportRow roomTypeImportRow : roomTypeList) {
if (StringUtils.isBlank(roomTypeImportRow.getCategory())) {
roomTypeImportRow.setCategory("OPERA");
}
String errMsg = ""; String errMsg = "";
boolean isPassed = true; boolean isPassed = true;
if (StringUtils.isBlank(roomTypeImportRow.getName())) { if (StringUtils.isBlank(roomTypeImportRow.getName())) {
@@ -267,6 +270,7 @@ public class RoomTypeService {
CfgRoomTypes newRoomType = new CfgRoomTypes(); CfgRoomTypes newRoomType = new CfgRoomTypes();
newRoomType.setCode(pItem.getName()); newRoomType.setCode(pItem.getName());
newRoomType.setNameCN(pItem.getNameCN()); newRoomType.setNameCN(pItem.getNameCN());
newRoomType.setCategory(pItem.getCategory());
newRoomType.setCreatedAt(currentTime); newRoomType.setCreatedAt(currentTime);
newRoomType.setUpdatedAt(currentTime); newRoomType.setUpdatedAt(currentTime);
newRoomTypeList.add(newRoomType); newRoomTypeList.add(newRoomType);
@@ -10,6 +10,8 @@ public class PropertyImportRow {
private String category; private String category;
private String hotelCode; private String hotelCode;
private String sortOrderVal; private String sortOrderVal;
private String createdTime;
private String updatedTime;
private int sortOrder=0; private int sortOrder=0;
public String getName() { public String getName() {
@@ -66,5 +68,17 @@ public class PropertyImportRow {
public void setSortOrder(int sortOrder) { public void setSortOrder(int sortOrder) {
this.sortOrder = sortOrder; this.sortOrder = sortOrder;
} }
public String getCreatedTime() {
return createdTime;
}
public void setCreatedTime(String createdTime) {
this.createdTime = createdTime;
}
public String getUpdatedTime() {
return updatedTime;
}
public void setUpdatedTime(String updatedTime) {
this.updatedTime = updatedTime;
}
} }
@@ -6,6 +6,14 @@ public class RoomTypeImportRow {
private String errorMessage; private String errorMessage;
private String name; private String name;
private String nameCN; private String nameCN;
private String category;
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getName() { public String getName() {
return name; return name;
@@ -5,17 +5,10 @@ import com.mgm.mcrm.common.services.ConfigurableTrustHandler;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory; import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory;
import org.apache.hc.core5.ssl.SSLContexts;
import javax.net.ssl.*; import javax.net.ssl.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.KeyManagementException; import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
public class HttpSslSupport { public class HttpSslSupport {
@@ -91,33 +84,6 @@ public class HttpSslSupport {
} }
} }
/**
* 使用自定义证书(trustStore)初始化 SSLContext
*/
public HttpSslSupport customSSL(String keyStorePath, String keyStorepass) {
FileInputStream instream = null;
try {
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
instream = new FileInputStream(new File(keyStorePath));
trustStore.load(instream, keyStorepass.toCharArray());
// 相信自己的 CA 和所有自签名证书
this.sc = SSLContexts.custom()
.loadTrustMaterial(trustStore, (chain, authType) -> true)
.build();
return this;
} catch (KeyManagementException | KeyStoreException |
NoSuchAlgorithmException | CertificateException | IOException e) {
throw new RuntimeException("初始化自定义 SSLContext 失败", e);
} finally {
if (instream != null) {
try {
instream.close();
} catch (IOException ignore) {
// ignore
}
}
}
}
/** /**
* 获取(或创建)指定协议版本的 {@link SSLContext} * 获取(或创建)指定协议版本的 {@link SSLContext}
@@ -116,7 +116,7 @@ public class SysLogBookingService {
} }
sysLogBooking.setChangeTo(changeTo); sysLogBooking.setChangeTo(changeTo);
addList.add(sysLogBooking); addList.add(cloneLog(sysLogBooking));
} }
sysLogBookingDao.saveAll(sysLogBookingMapper.toSysLogBookingList(addList)); sysLogBookingDao.saveAll(sysLogBookingMapper.toSysLogBookingList(addList));
@@ -126,6 +126,22 @@ public class SysLogBookingService {
} }
// 每条变更记录都必须使用独立实例,避免同一个引用被后续分支反复覆盖/重复入库
private SysLogBookingDto cloneLog(SysLogBookingDto src) {
SysLogBookingDto copy = new SysLogBookingDto();
copy.setId(src.getId());
copy.setOccurTime(src.getOccurTime());
copy.setEventCode(src.getEventCode());
copy.setChangeFrom(src.getChangeFrom());
copy.setChangeTo(src.getChangeTo());
copy.setLoginName(src.getLoginName());
copy.setLoginId(src.getLoginId());
copy.setBookId(src.getBookId());
copy.setSortOccurtime(src.getSortOccurtime());
copy.setIpAddress(src.getIpAddress());
return copy;
}
public ArrayList<SysLogBookingDto> saveEditLogBooking(BookingsDto book, HttpServletRequest request, BookingsDto originBook) { public ArrayList<SysLogBookingDto> saveEditLogBooking(BookingsDto book, HttpServletRequest request, BookingsDto originBook) {
ArrayList<SysLogBookingDto> addList = new ArrayList<>(); ArrayList<SysLogBookingDto> addList = new ArrayList<>();
SysLogBookingDto sysLogBooking = new SysLogBookingDto(); SysLogBookingDto sysLogBooking = new SysLogBookingDto();
@@ -148,13 +164,13 @@ public class SysLogBookingService {
sysLogBooking.setEventCode("Player"); sysLogBooking.setEventCode("Player");
sysLogBooking.setChangeFrom(originBook.getPlayerId()); sysLogBooking.setChangeFrom(originBook.getPlayerId());
sysLogBooking.setChangeTo(book.getPlayerId()); sysLogBooking.setChangeTo(book.getPlayerId());
addList.add(sysLogBooking); addList.add(cloneLog(sysLogBooking));
} }
if(!Strings.CS.equals(book.getConfirmationNo(), originBook.getConfirmationNo())) { if(!Strings.CS.equals(book.getConfirmationNo(), originBook.getConfirmationNo())) {
sysLogBooking.setEventCode("Confirmation No"); sysLogBooking.setEventCode("Confirmation No");
sysLogBooking.setChangeFrom(originBook.getConfirmationNo()); sysLogBooking.setChangeFrom(originBook.getConfirmationNo());
sysLogBooking.setChangeTo(book.getConfirmationNo()); sysLogBooking.setChangeTo(book.getConfirmationNo());
addList.add(sysLogBooking); addList.add(cloneLog(sysLogBooking));
} }
if(!Objects.equals(book.getPropertyId(), originBook.getPropertyId())) { if(!Objects.equals(book.getPropertyId(), originBook.getPropertyId())) {
sysLogBooking.setEventCode("Property"); sysLogBooking.setEventCode("Property");
@@ -162,7 +178,7 @@ public class SysLogBookingService {
CfgProperties property = propertyService.getById(book.getPropertyId()); CfgProperties property = propertyService.getById(book.getPropertyId());
sysLogBooking.setChangeFrom(originProperty.getName()); sysLogBooking.setChangeFrom(originProperty.getName());
sysLogBooking.setChangeTo(property.getName()); sysLogBooking.setChangeTo(property.getName());
addList.add(sysLogBooking); addList.add(cloneLog(sysLogBooking));
} }
if(!Objects.equals(book.getRoomId(), originBook.getRoomId())) { if(!Objects.equals(book.getRoomId(), originBook.getRoomId())) {
sysLogBooking.setEventCode("Room Type"); sysLogBooking.setEventCode("Room Type");
@@ -170,7 +186,7 @@ public class SysLogBookingService {
CfgRooms room = roomService.getRoomById(book.getRoomId()); CfgRooms room = roomService.getRoomById(book.getRoomId());
sysLogBooking.setChangeFrom(originRoom.getName()); sysLogBooking.setChangeFrom(originRoom.getName());
sysLogBooking.setChangeTo(room.getName()); sysLogBooking.setChangeTo(room.getName());
addList.add(sysLogBooking); addList.add(cloneLog(sysLogBooking));
} }
if(!Objects.equals(book.getOtherFollowUpStatusId(), originBook.getOtherFollowUpStatusId())) { if(!Objects.equals(book.getOtherFollowUpStatusId(), originBook.getOtherFollowUpStatusId())) {
sysLogBooking.setEventCode("Follow Up Status"); sysLogBooking.setEventCode("Follow Up Status");
@@ -187,7 +203,7 @@ public class SysLogBookingService {
sysLogBooking.setChangeFrom(originFollowStatusName); sysLogBooking.setChangeFrom(originFollowStatusName);
sysLogBooking.setChangeTo(followStatusName); sysLogBooking.setChangeTo(followStatusName);
addList.add(sysLogBooking); addList.add(cloneLog(sysLogBooking));
} }
if (!Objects.equals(book.getOtherRoomStatusId(), originBook.getOtherRoomStatusId())) { if (!Objects.equals(book.getOtherRoomStatusId(), originBook.getOtherRoomStatusId())) {
sysLogBooking.setEventCode("Room Status"); sysLogBooking.setEventCode("Room Status");
@@ -197,14 +213,14 @@ public class SysLogBookingService {
CfgOtherRoomStatus originRoomStatus = roomStatusDao.findById(Long.parseLong(String.valueOf(originBook.getOtherRoomStatusId()))); CfgOtherRoomStatus originRoomStatus = roomStatusDao.findById(Long.parseLong(String.valueOf(originBook.getOtherRoomStatusId())));
originRoomStatusName = originRoomStatus.getStatusName(); originRoomStatusName = originRoomStatus.getStatusName();
} }
sysLogBooking.setChangeTo(roomStatusName);
if(book.getOtherRoomStatusId()!=null) { if(book.getOtherRoomStatusId()!=null) {
CfgOtherRoomStatus roomStatus = roomStatusDao.findById(Long.parseLong(String.valueOf(book.getOtherRoomStatusId()))); CfgOtherRoomStatus roomStatus = roomStatusDao.findById(Long.parseLong(String.valueOf(book.getOtherRoomStatusId())));
roomStatusName = roomStatus.getStatusName(); roomStatusName = roomStatus.getStatusName();
} }
sysLogBooking.setChangeFrom(originRoomStatusName); sysLogBooking.setChangeFrom(originRoomStatusName);
addList.add(sysLogBooking); sysLogBooking.setChangeTo(roomStatusName);
addList.add(cloneLog(sysLogBooking));
} }
if(book.getSegmentId() != null && !book.getSegmentId().equals(originBook.getSegmentId()) &&originBook.getSegmentId()!=null) { if(book.getSegmentId() != null && !book.getSegmentId().equals(originBook.getSegmentId()) &&originBook.getSegmentId()!=null) {
sysLogBooking.setEventCode("Segment"); sysLogBooking.setEventCode("Segment");
@@ -220,25 +236,25 @@ public class SysLogBookingService {
} }
sysLogBooking.setChangeFrom(originSegmentName); sysLogBooking.setChangeFrom(originSegmentName);
sysLogBooking.setChangeTo(segmentName); sysLogBooking.setChangeTo(segmentName);
addList.add(sysLogBooking); addList.add(cloneLog(sysLogBooking));
} }
if(!book.getCheckinDate().equals(originBook.getCheckinDate())) { if(!Objects.equals(book.getCheckinDate(), originBook.getCheckinDate())) {
sysLogBooking.setEventCode("Check In Date"); sysLogBooking.setEventCode("Check In Date");
sysLogBooking.setChangeFrom(DateTimeUtil.getDateByFormat(originBook.getCheckinDate(), "yyyy-MM-dd")); sysLogBooking.setChangeFrom(DateTimeUtil.getDateByFormat(originBook.getCheckinDate(), "yyyy-MM-dd"));
sysLogBooking.setChangeTo(DateTimeUtil.getDateByFormat(book.getCheckinDate(), "yyyy-MM-dd")); sysLogBooking.setChangeTo(DateTimeUtil.getDateByFormat(book.getCheckinDate(), "yyyy-MM-dd"));
addList.add(sysLogBooking); addList.add(cloneLog(sysLogBooking));
} }
if(!book.getCheckoutDate().equals(originBook.getCheckoutDate())) { if(!Objects.equals(book.getCheckoutDate(), originBook.getCheckoutDate())) {
sysLogBooking.setEventCode("Check Out Date"); sysLogBooking.setEventCode("Check Out Date");
sysLogBooking.setChangeFrom(DateTimeUtil.getDateByFormat(originBook.getCheckoutDate(), "yyyy-MM-dd")); sysLogBooking.setChangeFrom(DateTimeUtil.getDateByFormat(originBook.getCheckoutDate(), "yyyy-MM-dd"));
sysLogBooking.setChangeTo(DateTimeUtil.getDateByFormat(book.getCheckoutDate(), "yyyy-MM-dd")); sysLogBooking.setChangeTo(DateTimeUtil.getDateByFormat(book.getCheckoutDate(), "yyyy-MM-dd"));
addList.add(sysLogBooking); addList.add(cloneLog(sysLogBooking));
} }
if(!Objects.equals(book.getRequestedCoDate(), originBook.getRequestedCoDate())){ if(!Objects.equals(book.getRequestedCoDate(), originBook.getRequestedCoDate())){
sysLogBooking.setEventCode("Requested C/O date"); sysLogBooking.setEventCode("Requested C/O date");
sysLogBooking.setChangeFrom(DateTimeUtil.getDateByFormat(originBook.getRequestedCoDate(), "yyyy-MM-dd")); sysLogBooking.setChangeFrom(DateTimeUtil.getDateByFormat(originBook.getRequestedCoDate(), "yyyy-MM-dd"));
sysLogBooking.setChangeTo(DateTimeUtil.getDateByFormat(book.getRequestedCoDate(), "yyyy-MM-dd")); sysLogBooking.setChangeTo(DateTimeUtil.getDateByFormat(book.getRequestedCoDate(), "yyyy-MM-dd"));
addList.add(sysLogBooking); addList.add(cloneLog(sysLogBooking));
} }
if (!Objects.equals(book.getBookingTypeId(), originBook.getBookingTypeId())) { if (!Objects.equals(book.getBookingTypeId(), originBook.getBookingTypeId())) {
sysLogBooking.setEventCode("Booking Type"); sysLogBooking.setEventCode("Booking Type");
@@ -254,49 +270,49 @@ public class SysLogBookingService {
} }
sysLogBooking.setChangeFrom(oBookingTypeName); sysLogBooking.setChangeFrom(oBookingTypeName);
sysLogBooking.setChangeTo(bookingTypeName); sysLogBooking.setChangeTo(bookingTypeName);
addList.add(sysLogBooking); addList.add(cloneLog(sysLogBooking));
} }
if(!book.getMarketCode().equals(originBook.getMarketCode())) { if(!Objects.equals(book.getMarketCode(), originBook.getMarketCode())) {
sysLogBooking.setEventCode("Market Code"); sysLogBooking.setEventCode("Market Code");
sysLogBooking.setChangeFrom(originBook.getMarketCode()); sysLogBooking.setChangeFrom(originBook.getMarketCode());
sysLogBooking.setChangeTo(book.getMarketCode()); sysLogBooking.setChangeTo(book.getMarketCode());
addList.add(sysLogBooking); addList.add(cloneLog(sysLogBooking));
} }
if(!book.getBooker().equals(originBook.getBooker())) { if(!Objects.equals(book.getBooker(), originBook.getBooker())) {
sysLogBooking.setEventCode("Booker"); sysLogBooking.setEventCode("Booker");
sysLogBooking.setChangeFrom(originBook.getBooker()); sysLogBooking.setChangeFrom(originBook.getBooker());
sysLogBooking.setChangeTo(book.getBooker()); sysLogBooking.setChangeTo(book.getBooker());
addList.add(sysLogBooking); addList.add(cloneLog(sysLogBooking));
} }
if(!Objects.equals(book.getApprovedBy(), originBook.getApprovedBy())) { if(!Objects.equals(book.getApprovedBy(), originBook.getApprovedBy())) {
sysLogBooking.setEventCode("Approver"); sysLogBooking.setEventCode("Approver");
sysLogBooking.setChangeFrom(originBook.getApprovedBy()); sysLogBooking.setChangeFrom(originBook.getApprovedBy());
sysLogBooking.setChangeTo(book.getApprovedBy()); sysLogBooking.setChangeTo(book.getApprovedBy());
addList.add(sysLogBooking); addList.add(cloneLog(sysLogBooking));
} }
if(!Objects.equals(book.getApprovalRemark(), originBook.getApprovalRemark())) { if(!Objects.equals(book.getApprovalRemark(), originBook.getApprovalRemark())) {
sysLogBooking.setEventCode("Approval Remark"); sysLogBooking.setEventCode("Approval Remark");
sysLogBooking.setChangeFrom(originBook.getApprovalRemark()); sysLogBooking.setChangeFrom(originBook.getApprovalRemark());
sysLogBooking.setChangeTo(book.getApprovalRemark()); sysLogBooking.setChangeTo(book.getApprovalRemark());
addList.add(sysLogBooking); addList.add(cloneLog(sysLogBooking));
} }
if(!Objects.equals(book.getRemark(), originBook.getRemark())) { if(!Objects.equals(book.getRemark(), originBook.getRemark())) {
sysLogBooking.setEventCode("Remark"); sysLogBooking.setEventCode("Remark");
sysLogBooking.setChangeFrom(originBook.getRemark()); sysLogBooking.setChangeFrom(originBook.getRemark());
sysLogBooking.setChangeTo(book.getRemark()); sysLogBooking.setChangeTo(book.getRemark());
addList.add(sysLogBooking); addList.add(cloneLog(sysLogBooking));
} }
if(!Objects.equals(book.getFeatureCode(), originBook.getFeatureCode())) { if(!Objects.equals(book.getFeatureCode(), originBook.getFeatureCode())) {
sysLogBooking.setEventCode("Special Request"); sysLogBooking.setEventCode("Special Request");
sysLogBooking.setChangeFrom(originBook.getFeatureCode()); sysLogBooking.setChangeFrom(originBook.getFeatureCode());
sysLogBooking.setChangeTo(book.getFeatureCode()); sysLogBooking.setChangeTo(book.getFeatureCode());
addList.add(sysLogBooking); addList.add(cloneLog(sysLogBooking));
} }
if(!Objects.equals(book.getSharer(), originBook.getSharer())) { if(!Objects.equals(book.getSharer(), originBook.getSharer())) {
sysLogBooking.setEventCode("Sharer"); sysLogBooking.setEventCode("Sharer");
JSONArray originSharerArr = JSONArray.parseArray(originBook.getSharer()); JSONArray originSharerArr = JSONArray.parseArray(originBook.getSharer());
ArrayList originSharerName = new ArrayList(); ArrayList originSharerName = new ArrayList();
if(!originSharerArr.isEmpty()) { if(originSharerArr != null && !originSharerArr.isEmpty()) {
for(Object sharer : originSharerArr) { for(Object sharer : originSharerArr) {
JSONObject sharerObj = (JSONObject) sharer; JSONObject sharerObj = (JSONObject) sharer;
if(sharerObj.containsKey("name")) { if(sharerObj.containsKey("name")) {
@@ -317,11 +333,11 @@ public class SysLogBookingService {
} }
} }
String getOriginSharerName = String.join(";", originSharerName); String getOriginSharerName = String.join(";", originSharerName);
String getSharerName= String.join(";", String.join(";", sharerName)); String getSharerName= String.join(";", sharerName);
if(!Objects.equals(getOriginSharerName, getSharerName)) { if(!Objects.equals(getOriginSharerName, getSharerName)) {
sysLogBooking.setChangeFrom(getOriginSharerName); sysLogBooking.setChangeFrom(getOriginSharerName);
sysLogBooking.setChangeTo(getSharerName); sysLogBooking.setChangeTo(getSharerName);
addList.add(sysLogBooking); addList.add(cloneLog(sysLogBooking));
} }
} }
@@ -280,4 +280,6 @@ public class BookingsDto implements Serializable {
private String dlProfileId; private String dlProfileId;
private String dlBlockId; private String dlBlockId;
private Long approvalBookingId;
} }
@@ -182,6 +182,8 @@ public class Bookings implements Serializable {
private String dlPurchaseElementId; private String dlPurchaseElementId;
@Column(name = "block_code") @Column(name = "block_code")
private String blockCode; private String blockCode;
@Column(name = "approval_booking_id")
private Long approvalBookingId;
//-- For export //-- For export
@Transient @Transient
@@ -470,6 +470,7 @@ public class OtherBookingService {
BookingsDto booking = new BookingsDto(); BookingsDto booking = new BookingsDto();
BookingsDto originBooking = new BookingsDto(); BookingsDto originBooking = new BookingsDto();
BookingsDto waitListBooking = new BookingsDto(); BookingsDto waitListBooking = new BookingsDto();
//BookingsDto approvalBooking = new BookingsDto();
// 使用request对象直接获取值 // 使用request对象直接获取值
Long bookId = otherPropertyCreateUpdateRequest.getId(); // 需要添加id字段到request对象 Long bookId = otherPropertyCreateUpdateRequest.getId(); // 需要添加id字段到request对象
@@ -706,6 +707,11 @@ public class OtherBookingService {
waitListBooking.setConfirmationNo(confirmationNo); waitListBooking.setConfirmationNo(confirmationNo);
bookingDao.save(bookingMapper.toBooking(waitListBooking)); bookingDao.save(bookingMapper.toBooking(waitListBooking));
} }
//if(originBooking.getApprovalBookingId()!=null) {
// approvalBooking = bookingMapper.toBookingDto(bookingDao.getById(originBooking.getApprovalBookingId()));
// approvalBooking.setConfirmationNo(confirmationNo);
// bookingDao.save(bookingMapper.toBooking(approvalBooking));
//}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String ciDate = selectDate.get(0); String ciDate = selectDate.get(0);
String coDate = selectDate.get(1); String coDate = selectDate.get(1);
@@ -137,6 +137,7 @@ public class WaitlistService {
String bookType = param.get("bookType")!=null? String.valueOf(param.get("bookType")):null; String bookType = param.get("bookType")!=null? String.valueOf(param.get("bookType")):null;
String confirmationNo = param.get("confirmationNo")!=null? String.valueOf(param.get("confirmationNo")):null; String confirmationNo = param.get("confirmationNo")!=null? String.valueOf(param.get("confirmationNo")):null;
Long sectionId = param.get("sectionId")!=null? Long.valueOf(String.valueOf(param.get("sectionId"))):null; Long sectionId = param.get("sectionId")!=null? Long.valueOf(String.valueOf(param.get("sectionId"))):null;
String section = param.get("userSection")!=null? String.valueOf(param.get("userSection")):null;
Map<String, Object> member = null; Map<String, Object> member = null;
if (param.get("member") instanceof Map) { if (param.get("member") instanceof Map) {
member = (Map<String, Object>) param.get("member"); member = (Map<String, Object>) param.get("member");
@@ -267,6 +268,7 @@ public class WaitlistService {
booking.setCreatedAt(createDate); booking.setCreatedAt(createDate);
booking.setCreatedBy(userId); booking.setCreatedBy(userId);
booking.setSectionId(sectionId); booking.setSectionId(sectionId);
booking.setSectionName(section);
booking.setRoomId(roomId); booking.setRoomId(roomId);
@@ -366,7 +368,7 @@ public class WaitlistService {
ArrayList<BookingsDto> booksList = new ArrayList<>(); ArrayList<BookingsDto> booksList = new ArrayList<>();
booksList.add(booking); booksList.add(booking);
sysLogBookingService.saveLogBooking(booksList, request, "", "", "Create Booking Test waitlist", ""); sysLogBookingService.saveLogBooking(booksList, request, "", "", "Create Booking waitlist", "");
} }
processResult.setSuccess(true); processResult.setSuccess(true);
@@ -389,6 +391,7 @@ public class WaitlistService {
String bookType = param.get("bookType")!=null? String.valueOf(param.get("bookType")):null; String bookType = param.get("bookType")!=null? String.valueOf(param.get("bookType")):null;
String confirmationNo = param.get("confirmationNo")!=null? String.valueOf(param.get("confirmationNo")):null; String confirmationNo = param.get("confirmationNo")!=null? String.valueOf(param.get("confirmationNo")):null;
Long sectionId = param.get("sectionId")!=null? Long.valueOf(String.valueOf(param.get("sectionId"))):null; Long sectionId = param.get("sectionId")!=null? Long.valueOf(String.valueOf(param.get("sectionId"))):null;
String section = param.get("userSection")!=null? String.valueOf(param.get("userSection")):null;
String remarks = param.get("remarks")!=null? String.valueOf(param.get("remarks")):null; String remarks = param.get("remarks")!=null? String.valueOf(param.get("remarks")):null;
Map<String, Object> member = null; Map<String, Object> member = null;
@@ -519,6 +522,7 @@ public class WaitlistService {
booking.setCreatedAt(createDate); booking.setCreatedAt(createDate);
booking.setCreatedBy(userId); booking.setCreatedBy(userId);
booking.setSectionId(sectionId); booking.setSectionId(sectionId);
booking.setSectionName(section);
booking.setRoomId(roomId); booking.setRoomId(roomId);
booking.setCategory("DAYLIGHT"); booking.setCategory("DAYLIGHT");