|
|
@@ -21,6 +21,7 @@ import org.dromara.xg.service.IXgHolidayStayService;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.Collection;
|
|
|
+import java.util.ArrayList;
|
|
|
|
|
|
/**
|
|
|
* 假期留宿管理Service业务层处理
|
|
|
@@ -90,15 +91,42 @@ public class XgHolidayStayServiceImpl implements IXgHolidayStayService {
|
|
|
lqw.like(StringUtils.isNotBlank(bo.getCampusName()), XgHolidayStay::getCampusName, bo.getCampusName());
|
|
|
lqw.eq(bo.getAreaId() != null, XgHolidayStay::getAreaId, bo.getAreaId());
|
|
|
lqw.like(StringUtils.isNotBlank(bo.getAreaName()), XgHolidayStay::getAreaName, bo.getAreaName());
|
|
|
- lqw.eq(bo.getBuildingId() != null, XgHolidayStay::getBuildingId, bo.getBuildingId());
|
|
|
+
|
|
|
+ // 楼栋ID过滤逻辑:支持单个楼栋ID和多个楼栋ID的查询
|
|
|
+ if (bo.getBuildingId() != null) {
|
|
|
+ // 单个楼栋ID查询
|
|
|
+ lqw.eq(XgHolidayStay::getBuildingId, bo.getBuildingId());
|
|
|
+ } else if (params != null && params.containsKey("buildingIds")) {
|
|
|
+ // 多个楼栋ID查询,从params中获取buildingIds(逗号分隔的字符串)
|
|
|
+ String buildingIdsStr = (String) params.get("buildingIds");
|
|
|
+ if (StringUtils.isNotBlank(buildingIdsStr)) {
|
|
|
+ String[] buildingIdArray = buildingIdsStr.split(",");
|
|
|
+ if (buildingIdArray.length > 0) {
|
|
|
+ List<Long> buildingIds = new ArrayList<>();
|
|
|
+ for (String buildingIdStr : buildingIdArray) {
|
|
|
+ try {
|
|
|
+ Long buildingId = Long.parseLong(buildingIdStr.trim());
|
|
|
+ buildingIds.add(buildingId);
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
+ log.warn("无效的楼栋ID: {}", buildingIdStr);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!buildingIds.isEmpty()) {
|
|
|
+ lqw.in(XgHolidayStay::getBuildingId, buildingIds);
|
|
|
+ log.debug("添加多楼栋ID过滤条件: {}", buildingIds);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
lqw.like(StringUtils.isNotBlank(bo.getBuildingName()), XgHolidayStay::getBuildingName, bo.getBuildingName());
|
|
|
lqw.eq(bo.getRoomId() != null, XgHolidayStay::getRoomId, bo.getRoomId());
|
|
|
lqw.like(StringUtils.isNotBlank(bo.getRoomName()), XgHolidayStay::getRoomName, bo.getRoomName());
|
|
|
lqw.eq(bo.getBedId() != null, XgHolidayStay::getBedId, bo.getBedId());
|
|
|
lqw.like(StringUtils.isNotBlank(bo.getBedName()), XgHolidayStay::getBedName, bo.getBedName());
|
|
|
lqw.eq(StringUtils.isNotBlank(bo.getHolidayType()), XgHolidayStay::getHolidayType, bo.getHolidayType());
|
|
|
- lqw.ge(bo.getApplyStartDate() != null, XgHolidayStay::getApplyStartDate, bo.getApplyStartDate());
|
|
|
- lqw.le(bo.getApplyEndDate() != null, XgHolidayStay::getApplyEndDate, bo.getApplyEndDate());
|
|
|
+ lqw.eq(bo.getApplyStartDate() != null, XgHolidayStay::getApplyStartDate, bo.getApplyStartDate());
|
|
|
+ lqw.eq(bo.getApplyEndDate() != null, XgHolidayStay::getApplyEndDate, bo.getApplyEndDate());
|
|
|
lqw.like(StringUtils.isNotBlank(bo.getStayReason()), XgHolidayStay::getStayReason, bo.getStayReason());
|
|
|
lqw.eq(StringUtils.isNotBlank(bo.getStayReasonType()), XgHolidayStay::getStayReasonType,
|
|
|
bo.getStayReasonType());
|
|
|
@@ -110,9 +138,9 @@ public class XgHolidayStayServiceImpl implements IXgHolidayStayService {
|
|
|
lqw.eq(StringUtils.isNotBlank(bo.getParentConsent()), XgHolidayStay::getParentConsent, bo.getParentConsent());
|
|
|
lqw.like(StringUtils.isNotBlank(bo.getAttachmentOssIds()), XgHolidayStay::getAttachmentOssIds,
|
|
|
bo.getAttachmentOssIds());
|
|
|
- lqw.eq(StringUtils.isNotBlank(bo.getExtField1()), XgHolidayStay::getExtField1, bo.getExtField1());
|
|
|
- lqw.eq(StringUtils.isNotBlank(bo.getExtField2()), XgHolidayStay::getExtField2, bo.getExtField2());
|
|
|
- lqw.eq(StringUtils.isNotBlank(bo.getExtField3()), XgHolidayStay::getExtField3, bo.getExtField3());
|
|
|
+ lqw.like(StringUtils.isNotBlank(bo.getExtField1()), XgHolidayStay::getExtField1, bo.getExtField1());
|
|
|
+ lqw.like(StringUtils.isNotBlank(bo.getExtField2()), XgHolidayStay::getExtField2, bo.getExtField2());
|
|
|
+ lqw.like(StringUtils.isNotBlank(bo.getExtField3()), XgHolidayStay::getExtField3, bo.getExtField3());
|
|
|
|
|
|
// 添加创建人过滤条件 - 实现班主任权限控制,只能查看自己创建的数据
|
|
|
lqw.eq(bo.getCreateBy() != null, XgHolidayStay::getCreateBy, bo.getCreateBy());
|
|
|
@@ -137,17 +165,30 @@ public class XgHolidayStayServiceImpl implements IXgHolidayStayService {
|
|
|
|
|
|
if (StringUtils.isNotBlank(statusType) && StringUtils.isNotBlank(currentTime)) {
|
|
|
if ("valid".equals(statusType)) {
|
|
|
- // 有效状态:结束时间 >= 当前时间 AND 结束时间不为空
|
|
|
- lqw.ge(XgHolidayStay::getApplyEndDate, currentTime)
|
|
|
+ // 有效状态:当前时间在留宿开始时间和结束时间之间(包含边界)
|
|
|
+ // 条件:applyStartDate <= currentTime AND applyEndDate >= currentTime
|
|
|
+ // AND applyStartDate IS NOT NULL AND applyEndDate IS NOT NULL
|
|
|
+ lqw.le(XgHolidayStay::getApplyStartDate, currentTime)
|
|
|
+ .ge(XgHolidayStay::getApplyEndDate, currentTime)
|
|
|
+ .isNotNull(XgHolidayStay::getApplyStartDate)
|
|
|
.isNotNull(XgHolidayStay::getApplyEndDate);
|
|
|
- log.debug("添加有效状态过滤条件: apply_end_date >= {} AND apply_end_date IS NOT NULL", currentTime);
|
|
|
+ log.debug(
|
|
|
+ "添加有效状态过滤条件: apply_start_date <= {} AND apply_end_date >= {} AND start/end dates are not null",
|
|
|
+ currentTime, currentTime);
|
|
|
} else if ("invalid".equals(statusType)) {
|
|
|
- // 失效状态:结束时间 < 当前时间 OR 结束时间为空
|
|
|
+ // 失效状态:当前时间不在留宿时间范围内
|
|
|
+ // 条件:applyStartDate > currentTime OR applyEndDate < currentTime
|
|
|
+ // OR applyStartDate IS NULL OR applyEndDate IS NULL
|
|
|
lqw.and(wrapper -> wrapper
|
|
|
+ .gt(XgHolidayStay::getApplyStartDate, currentTime)
|
|
|
+ .or()
|
|
|
.lt(XgHolidayStay::getApplyEndDate, currentTime)
|
|
|
.or()
|
|
|
+ .isNull(XgHolidayStay::getApplyStartDate)
|
|
|
+ .or()
|
|
|
.isNull(XgHolidayStay::getApplyEndDate));
|
|
|
- log.debug("添加失效状态过滤条件: apply_end_date < {} OR apply_end_date IS NULL", currentTime);
|
|
|
+ log.debug("添加失效状态过滤条件: apply_start_date > {} OR apply_end_date < {} OR start/end dates are null",
|
|
|
+ currentTime, currentTime);
|
|
|
}
|
|
|
}
|
|
|
}
|