diff --git a/backend/src/main/java/com/yfd/platform/data/controller/ApprovalMainController.java b/backend/src/main/java/com/yfd/platform/data/controller/ApprovalMainController.java index d145d90..53d927d 100644 --- a/backend/src/main/java/com/yfd/platform/data/controller/ApprovalMainController.java +++ b/backend/src/main/java/com/yfd/platform/data/controller/ApprovalMainController.java @@ -5,6 +5,7 @@ import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.config.ResponseResult; import com.yfd.platform.data.domain.ApprovalMain; import com.yfd.platform.data.service.IApprovalMainService; +import com.yfd.platform.data.service.IFishDraftDataService; import com.yfd.platform.utils.DataSourceRequestUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -26,15 +27,20 @@ public class ApprovalMainController { @Resource private IApprovalMainService approvalMainService; + @Resource + private IFishDraftDataService fishDraftDataService; + @GetMapping("/page") @Operation(summary = "分页查询审批列表") public ResponseResult queryPageList( @RequestParam(defaultValue = "1") Integer current, @RequestParam(defaultValue = "10") Integer size, @RequestParam(required = false) String bizType, - @RequestParam(required = false) String status) { + @RequestParam(required = false) String status, + @RequestParam(required = false) String ennm, + @RequestParam(required = false) String hbrvnm) { Page page = new Page<>(current, size); - Page result = approvalMainService.queryPageList(page, bizType, status); + Page result = approvalMainService.queryPageList(page, bizType, status,ennm,hbrvnm); return ResponseResult.successData(result); } diff --git a/backend/src/main/java/com/yfd/platform/data/controller/FishDraftDataController.java b/backend/src/main/java/com/yfd/platform/data/controller/FishDraftDataController.java index cc48f44..da95234 100644 --- a/backend/src/main/java/com/yfd/platform/data/controller/FishDraftDataController.java +++ b/backend/src/main/java/com/yfd/platform/data/controller/FishDraftDataController.java @@ -10,6 +10,7 @@ import java.util.HashMap; import java.util.Map; import cn.hutool.core.io.FileUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fasterxml.jackson.databind.ObjectMapper; import com.yfd.platform.common.DataSourceRequest; @@ -200,6 +201,15 @@ public class FishDraftDataController { return result ? ResponseResult.success("提交成功") : ResponseResult.error("提交失败"); } + @PostMapping("/submitDraftsAll") + @Operation(summary = "批量提交草稿") + public ResponseResult submitDraftsAll() { + List draft = fishDraftDataService.list(new LambdaQueryWrapper().eq(FishDraftData::getCreatedBy, SecurityUtils.getUserId()).eq(FishDraftData::getStatus, "DRAFT").select(FishDraftData::getId)); + List ids = draft.stream().map(FishDraftData::getId).toList(); + boolean result = fishDraftDataService.submitDrafts(ids); + return result ? ResponseResult.success("提交成功") : ResponseResult.error("提交失败"); + } + @PostMapping("/batchApprove") @Operation(summary = "批量审批通过") public ResponseResult batchApprove(@RequestBody BatchApproveRequest request) { @@ -207,6 +217,15 @@ public class FishDraftDataController { return result ? ResponseResult.success("审批通过") : ResponseResult.error("审批失败"); } + @PostMapping("/batchApproveAll") + @Operation(summary = "批量全部审批通过") + public ResponseResult batchApproveAll(@RequestBody BatchApproveRequest request) { + List draft = fishDraftDataService.list(new LambdaQueryWrapper().eq(FishDraftData::getCreatedBy, SecurityUtils.getUserId()).eq(FishDraftData::getStatus, "PENDING").select(FishDraftData::getId)); + List ids = draft.stream().map(FishDraftData::getId).toList(); + boolean result = fishDraftDataService.batchApprove(ids, request.getApproveComment()); + return result ? ResponseResult.success("审批通过") : ResponseResult.error("审批失败"); + } + @PostMapping("/reject") @Operation(summary = "审批驳回") public ResponseResult batchReject(@RequestBody BatchRejectRequest request) { diff --git a/backend/src/main/java/com/yfd/platform/data/domain/ApprovalMain.java b/backend/src/main/java/com/yfd/platform/data/domain/ApprovalMain.java index c45084c..1e0a3c1 100644 --- a/backend/src/main/java/com/yfd/platform/data/domain/ApprovalMain.java +++ b/backend/src/main/java/com/yfd/platform/data/domain/ApprovalMain.java @@ -82,6 +82,30 @@ public class ApprovalMain implements Serializable { */ private String remark; + + /** + * 电站 + */ + private String ennm; + + + /** + * 流域 + */ + private String hbrvnm; + + /** + * 电站 + */ + private String stcd; + + + /** + * 流域 + */ + private String hbrvcd; + + /** * 创建时间 */ diff --git a/backend/src/main/java/com/yfd/platform/data/service/IApprovalMainService.java b/backend/src/main/java/com/yfd/platform/data/service/IApprovalMainService.java index b2ee766..2c18651 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/IApprovalMainService.java +++ b/backend/src/main/java/com/yfd/platform/data/service/IApprovalMainService.java @@ -3,6 +3,7 @@ package com.yfd.platform.data.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.yfd.platform.data.domain.ApprovalMain; +import org.springframework.web.bind.annotation.RequestParam; import java.util.List; @@ -16,7 +17,7 @@ public interface IApprovalMainService extends IService { /** * 分页查询审批列表 */ - Page queryPageList(Page page, String bizType, String status); + Page queryPageList(Page page, String bizType, String status,String ennm, String hbrvnm); void fillUserNames(List list); diff --git a/backend/src/main/java/com/yfd/platform/data/service/impl/ApprovalMainServiceImpl.java b/backend/src/main/java/com/yfd/platform/data/service/impl/ApprovalMainServiceImpl.java index cab10cd..27923ee 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/impl/ApprovalMainServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/data/service/impl/ApprovalMainServiceImpl.java @@ -1,10 +1,13 @@ package com.yfd.platform.data.service.impl; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yfd.platform.data.domain.ApprovalMain; +import com.yfd.platform.data.domain.SysUserDataScope; import com.yfd.platform.data.mapper.ApprovalMainMapper; +import com.yfd.platform.data.mapper.SysUserDataScopeMapper; import com.yfd.platform.data.service.IApprovalLogService; import com.yfd.platform.data.service.IApprovalMainService; import com.yfd.platform.system.domain.SysUser; @@ -15,6 +18,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import java.util.*; +import java.util.stream.Collectors; /** *

@@ -33,11 +37,16 @@ public class ApprovalMainServiceImpl extends ServiceImpl queryPageList(Page page, String bizType, String status) { + public Page queryPageList(Page page, String bizType, String status,String ennm, String hbrvnm) { Page approvalMainPage = this.page(page, this.lambdaQuery() .eq(StringUtils.hasText(bizType), ApprovalMain::getBizType, bizType) .eq(StringUtils.hasText(status), ApprovalMain::getStatus, status) + .like(StringUtils.hasText(ennm), ApprovalMain::getEnnm, ennm) + .like(StringUtils.hasText(hbrvnm), ApprovalMain::getHbrvnm, hbrvnm) .orderByDesc(ApprovalMain::getCreatedAt) .getWrapper()); fillUserNames(approvalMainPage.getRecords()); @@ -52,6 +61,7 @@ public class ApprovalMainServiceImpl extends ServiceImpl userIds = new HashSet<>(); for (ApprovalMain vo : list) { + if (StrUtil.isNotBlank(vo.getApproverId())) { userIds.add(vo.getApproverId()); } @@ -63,7 +73,6 @@ public class ApprovalMainServiceImpl extends ServiceImpl userNameMap = new HashMap<>(); List users = sysUserMapper.selectBatchIds(userIds); for (SysUser user : users) { diff --git a/backend/src/main/java/com/yfd/platform/data/service/impl/FishDraftDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/data/service/impl/FishDraftDataServiceImpl.java index 036001d..356960c 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/impl/FishDraftDataServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/data/service/impl/FishDraftDataServiceImpl.java @@ -9,12 +9,18 @@ import com.yfd.platform.common.DataSourceLoadOptionsBase; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.data.domain.ApprovalMain; import com.yfd.platform.data.domain.FishDraftData; +import com.yfd.platform.data.domain.SysUserDataScope; import com.yfd.platform.data.domain.vo.FishDraftDataVO; import com.yfd.platform.data.mapper.FishDraftDataMapper; +import com.yfd.platform.data.mapper.SysUserDataScopeMapper; import com.yfd.platform.data.service.IApprovalChangeLogService; import com.yfd.platform.data.service.IApprovalLogService; import com.yfd.platform.data.service.IApprovalMainService; import com.yfd.platform.data.service.IFishDraftDataService; +import com.yfd.platform.env.domain.SdEngInfoBH; +import com.yfd.platform.env.domain.SdHbrvDic; +import com.yfd.platform.env.mapper.SdEngInfoBHMapper; +import com.yfd.platform.env.mapper.SdHbrvDicMapper; import com.yfd.platform.system.domain.SysUser; import com.yfd.platform.system.mapper.SysUserMapper; import com.yfd.platform.utils.KendoUtil; @@ -55,6 +61,15 @@ public class FishDraftDataServiceImpl extends ServiceImpl queryPageList(DataSourceRequest dataSourceRequest) { Page page = KendoUtil.getPage(dataSourceRequest); @@ -268,6 +283,8 @@ public class FishDraftDataServiceImpl extends ServiceImpl updateWrapper = new LambdaUpdateWrapper<>(); @@ -283,6 +300,85 @@ public class FishDraftDataServiceImpl extends ServiceImpl permissions = userDataScopeMapper.selectValidPermissions(Long.parseLong(userId)); + if (permissions == null || permissions.isEmpty()) { + return; + } + + Set hbrvcdSet = new HashSet<>(); + Set hbrvnmSet = new HashSet<>(); + Set stcdSet = new HashSet<>(); + Set ennmSet = new HashSet<>(); + + for (SysUserDataScope permission : permissions) { + String orgType = permission.getOrgType(); + String orgId = permission.getOrgId(); + + if (orgId == null || orgId.isEmpty()) { + continue; + } + + if ("HBRVCD".equals(orgType)) { + hbrvcdSet.add(orgId); + + SdHbrvDic hbrv = hbrvDicMapper.selectById(orgId); + if (hbrv != null && hbrv.getHbrvnm() != null) { + hbrvnmSet.add(hbrv.getHbrvnm()); + } + + List stationList = engInfoBHMapper.selectByHbrvcd(orgId); + if (stationList != null) { + for (SdEngInfoBH station : stationList) { + if (station.getStcd() != null) { + stcdSet.add(station.getStcd()); + } + if (station.getEnnm() != null) { + ennmSet.add(station.getEnnm()); + } + } + } + + } else if ("STATION".equals(orgType)) { + SdEngInfoBH station = engInfoBHMapper.selectById(orgId); + if (station != null) { + if (station.getHbrvcd() != null) { + hbrvcdSet.add(station.getHbrvcd()); + } + if (station.getStcd() != null) { + stcdSet.add(station.getStcd()); + } + if (station.getEnnm() != null) { + ennmSet.add(station.getEnnm()); + } + + SdHbrvDic hbrv = hbrvDicMapper.selectById(station.getHbrvcd()); + if (hbrv != null && hbrv.getHbrvnm() != null) { + hbrvnmSet.add(hbrv.getHbrvnm()); + } + } + } + } + + if (!hbrvcdSet.isEmpty()) { + approvalMain.setHbrvcd(String.join(",", hbrvcdSet)); + } + if (!hbrvnmSet.isEmpty()) { + approvalMain.setHbrvnm(String.join(",", hbrvnmSet)); + } + if (!stcdSet.isEmpty()) { + approvalMain.setStcd(String.join(",", stcdSet)); + } + if (!ennmSet.isEmpty()) { + approvalMain.setEnnm(String.join(",", ennmSet)); + } + } + @Override @Transactional(rollbackFor = Exception.class) diff --git a/backend/src/main/java/com/yfd/platform/data/service/impl/ImportTaskServiceImpl.java b/backend/src/main/java/com/yfd/platform/data/service/impl/ImportTaskServiceImpl.java index 396b213..4eb29ea 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/impl/ImportTaskServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/data/service/impl/ImportTaskServiceImpl.java @@ -185,21 +185,21 @@ public class ImportTaskServiceImpl extends ServiceImpl fileIds = StrUtil.split(vdpth, ","); - fileIds.forEach(fileId -> attachmentUploadService.deleteFile(fileId)); - } - String picpth = successRow.getData().getPicpth(); - if (StringUtils.hasText(picpth)) { - List fileIds = StrUtil.split(vdpth, ","); - fileIds.forEach(fileId -> attachmentUploadService.deleteFile(fileId)); - } - } +// for (FishImportResult.FishImportRow successRow : importResult.getRows()) { +// if (successRow.getData()==null) { +// continue; +// } +// String vdpth = successRow.getData().getVdpth(); +// if (StringUtils.hasText(vdpth)) { +// List fileIds = StrUtil.split(vdpth, ","); +// fileIds.forEach(fileId -> attachmentUploadService.deleteFile(fileId)); +// } +// String picpth = successRow.getData().getPicpth(); +// if (StringUtils.hasText(picpth)) { +// List fileIds = StrUtil.split(vdpth, ","); +// fileIds.forEach(fileId -> attachmentUploadService.deleteFile(fileId)); +// } +// } String tempDir = importResult.getTempDir(); // del 方法会递归删除目录及其所有内容 FileUtil.del(tempDir); diff --git a/backend/src/main/java/com/yfd/platform/env/controller/SdFpssBHController.java b/backend/src/main/java/com/yfd/platform/env/controller/SdFpssBHController.java index ef18bfe..f56fb92 100644 --- a/backend/src/main/java/com/yfd/platform/env/controller/SdFpssBHController.java +++ b/backend/src/main/java/com/yfd/platform/env/controller/SdFpssBHController.java @@ -61,9 +61,8 @@ public class SdFpssBHController { @Operation(summary = "设施下拉列表(根据电站编码筛选 + 支持名称模糊搜索 + 支持基地编码筛选)") public ResponseResult dropdown(@RequestParam(required = false) String rstcd, @RequestParam(required = false) String stnm, - @RequestParam(required = false) String baseId, - @RequestParam(required = false) String hbrvcd) { - return ResponseResult.successData(sdFpssBHService.selectForDropdown(rstcd, stnm, baseId,hbrvcd)); + @RequestParam(required = false) String baseId) { + return ResponseResult.successData(sdFpssBHService.selectForDropdown(rstcd, stnm, baseId)); } @Log(module = "过鱼设施管理", value = "新增过鱼设施") diff --git a/backend/src/main/java/com/yfd/platform/env/mapper/SdFpssBHMapper.java b/backend/src/main/java/com/yfd/platform/env/mapper/SdFpssBHMapper.java index 9e13625..08c53fa 100644 --- a/backend/src/main/java/com/yfd/platform/env/mapper/SdFpssBHMapper.java +++ b/backend/src/main/java/com/yfd/platform/env/mapper/SdFpssBHMapper.java @@ -16,13 +16,11 @@ public interface SdFpssBHMapper extends BaseMapper { "LEFT JOIN SD_ENGINFO_B_H E ON F.RSTCD = E.STCD " + "WHERE 1=1 " + " AND E.BASE_ID = #{baseId} " + - " AND E.HBRVCD = #{hbrvcd} " + " AND F.RSTCD = #{rstcd} " + " AND F.STNM LIKE '%' || #{stnm} || '%' " + "ORDER BY F.ORDER_INDEX DESC" + "") List selectForDropdownWithBaseId(@Param("rstcd") String rstcd, @Param("stnm") String stnm, - @Param("baseId") String baseId, - @Param("hbrvcd") String hbrvcd); + @Param("baseId") String baseId); } \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/env/service/ISdFpssBHService.java b/backend/src/main/java/com/yfd/platform/env/service/ISdFpssBHService.java index df2d231..7b37c27 100644 --- a/backend/src/main/java/com/yfd/platform/env/service/ISdFpssBHService.java +++ b/backend/src/main/java/com/yfd/platform/env/service/ISdFpssBHService.java @@ -16,7 +16,7 @@ public interface ISdFpssBHService extends IService { /** * 设施下拉列表(根据电站编码筛选 + 支持名称模糊搜索 + 支持基地编码筛选) */ - List selectForDropdown(String rstcd, String stnm, String baseId,String hbrvcd); + List selectForDropdown(String rstcd, String stnm, String baseId); Set getUserAuthorizedStationCodes(); diff --git a/backend/src/main/java/com/yfd/platform/env/service/impl/SdEngInfoBHServiceImpl.java b/backend/src/main/java/com/yfd/platform/env/service/impl/SdEngInfoBHServiceImpl.java index 55f361a..60e4b2f 100644 --- a/backend/src/main/java/com/yfd/platform/env/service/impl/SdEngInfoBHServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/env/service/impl/SdEngInfoBHServiceImpl.java @@ -71,10 +71,8 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl rvcds = sdEngInfoBHRequest.getRvcds(); List hbrvcds = sdEngInfoBHRequest.getHbrvcds(); - String hbrvcd = sdEngInfoBHRequest.getHbrvcd(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(StringUtils.hasText(baseId), SdEngInfoBH::getBaseId, baseId) - .eq(StringUtils.hasText(hbrvcd), SdEngInfoBH::getHbrvcd, hbrvcd) .in(rvcds != null && !rvcds.isEmpty(), SdEngInfoBH::getRvcd, rvcds) .in(hbrvcds != null && !hbrvcds.isEmpty(), SdEngInfoBH::getHbrvcd, hbrvcds) .like(StringUtils.hasText(ennm), SdEngInfoBH::getEnnm, ennm) diff --git a/backend/src/main/java/com/yfd/platform/env/service/impl/SdFpssBHServiceImpl.java b/backend/src/main/java/com/yfd/platform/env/service/impl/SdFpssBHServiceImpl.java index d08ffcd..4cea76a 100644 --- a/backend/src/main/java/com/yfd/platform/env/service/impl/SdFpssBHServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/env/service/impl/SdFpssBHServiceImpl.java @@ -64,13 +64,13 @@ public class SdFpssBHServiceImpl extends ServiceImpl i } @Override - public List selectForDropdown(String rstcd, String stnm,String baseId, String hbrvcd) { + public List selectForDropdown(String rstcd, String stnm, String baseId) { Set authorizedStations = getUserAuthorizedStationCodes(); List result; - if (StringUtils.hasText(hbrvcd)|| StringUtils.hasText(baseId)) { - result = baseMapper.selectForDropdownWithBaseId(rstcd, stnm, baseId,hbrvcd); + if (StringUtils.hasText(baseId)) { + result = baseMapper.selectForDropdownWithBaseId(rstcd, stnm, baseId); } else { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(StringUtils.hasText(rstcd), SdFpssBH::getRstcd, rstcd) diff --git a/backend/src/main/java/com/yfd/platform/system/controller/SmsVerifyCodeController.java b/backend/src/main/java/com/yfd/platform/system/controller/SmsVerifyCodeController.java index 3dd784a..edb0c44 100644 --- a/backend/src/main/java/com/yfd/platform/system/controller/SmsVerifyCodeController.java +++ b/backend/src/main/java/com/yfd/platform/system/controller/SmsVerifyCodeController.java @@ -204,7 +204,7 @@ public class SmsVerifyCodeController { selectedBasinCodes.addAll(Arrays.asList(hbrvcdCode.split(","))); } -// Set addedStationCodes = new HashSet<>(); + Set addedStationCodes = new HashSet<>(); for (String basinCode : selectedBasinCodes) { if (StringUtils.isEmpty(basinCode)) { @@ -241,7 +241,7 @@ public class SmsVerifyCodeController { scope.setStatus(1); scope.setPermissionType("READ"); sysUserDataScopeService.addDataScope(scope); -// addedStationCodes.add(basinCode); + addedStationCodes.add(basinCode); } else { Set stationsInBasinAndSelected = allStationCodesInBasin.stream() .filter(selectedStationCodes::contains) @@ -255,27 +255,27 @@ public class SmsVerifyCodeController { scope.setStatus(1); scope.setPermissionType("READ"); sysUserDataScopeService.addDataScope(scope); -// addedStationCodes.add(stationCd); + addedStationCodes.add(stationCd); } } } -// Set standaloneStations = selectedStationCodes.stream() -// .filter(code -> !addedStationCodes.contains(code)) -// .collect(Collectors.toSet()); -// -// for (String stationCd : standaloneStations) { -// if (StringUtils.isEmpty(stationCd)) { -// continue; -// } -// SysUserDataScope scope = new SysUserDataScope(); -// scope.setUserId(userId); -// scope.setOrgType("STATION"); -// scope.setOrgId(stationCd); -// scope.setStatus(1); -// scope.setPermissionType("READ"); -// sysUserDataScopeService.addDataScope(scope); -// } + Set standaloneStations = selectedStationCodes.stream() + .filter(code -> !addedStationCodes.contains(code)) + .collect(Collectors.toSet()); + + for (String stationCd : standaloneStations) { + if (StringUtils.isEmpty(stationCd)) { + continue; + } + SysUserDataScope scope = new SysUserDataScope(); + scope.setUserId(userId); + scope.setOrgType("STATION"); + scope.setOrgId(stationCd); + scope.setStatus(1); + scope.setPermissionType("READ"); + sysUserDataScopeService.addDataScope(scope); + } SysUser user = new SysUser(); user.setId(userId); userService.updateUserRoles( user,"c13481a486c9ee559cf305284df4d207"); @@ -316,12 +316,9 @@ public class SmsVerifyCodeController { } catch (Exception e) { return ResponseResult.error("密码解密失败"); } - String encodePassword = existUser.getPassword(); BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); String encryptedPassword = passwordEncoder.encode(password); - if (passwordEncoder.matches(password, encodePassword)) { - return ResponseResult.error("新密码不能与旧密码相同"); - } + boolean success = userService.updatePasswordByPhone(phone, encryptedPassword); if (success) { return ResponseResult.success(); diff --git a/backend/src/main/resources/application.yml b/backend/src/main/resources/application.yml index 488b6fb..b11a8a0 100644 --- a/backend/src/main/resources/application.yml +++ b/backend/src/main/resources/application.yml @@ -1,6 +1,6 @@ spring: profiles: - active: prod + active: devtw jasypt: encryptor: diff --git a/backend/src/main/resources/mapper/data/SysUserDataScopeMapper.xml b/backend/src/main/resources/mapper/data/SysUserDataScopeMapper.xml index 5fb5a5c..1fb8aa6 100644 --- a/backend/src/main/resources/mapper/data/SysUserDataScopeMapper.xml +++ b/backend/src/main/resources/mapper/data/SysUserDataScopeMapper.xml @@ -67,8 +67,8 @@ SELECT * FROM SYS_USER_DATA_SCOPE WHERE USER_ID = #{userId} AND STATUS = 1 - AND (START_TIME IS NULL OR START_TIME <= SYSDATE) - AND (END_TIME IS NULL OR END_TIME >= SYSDATE) +-- AND (START_TIME IS NULL OR START_TIME <= SYSDATE) +-- AND (END_TIME IS NULL OR END_TIME >= SYSDATE) ORDER BY CREATED_AT DESC