|
|
@@ -0,0 +1,226 @@
|
|
|
+package org.dromara.zhxy.service.impl;
|
|
|
+
|
|
|
+import org.dromara.common.core.utils.MapstructUtils;
|
|
|
+import org.dromara.common.core.utils.StringUtils;
|
|
|
+import org.dromara.common.mybatis.core.page.TableDataInfo;
|
|
|
+import org.dromara.common.mybatis.core.page.PageQuery;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.dromara.zhxy.domain.bo.HqHallReservationBo;
|
|
|
+import org.dromara.zhxy.domain.bo.HqHallReservationAuditBo;
|
|
|
+import org.dromara.zhxy.domain.vo.HqHallReservationVo;
|
|
|
+import org.dromara.zhxy.domain.HqHallReservation;
|
|
|
+import org.dromara.zhxy.mapper.HqHallReservationMapper;
|
|
|
+import org.dromara.zhxy.service.IHqHallReservationService;
|
|
|
+
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Collection;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.text.ParseException;
|
|
|
+import java.util.Date;
|
|
|
+import org.dromara.common.satoken.utils.LoginHelper;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 报告厅预约Service业务层处理
|
|
|
+ *
|
|
|
+ * @author wuzilong
|
|
|
+ * @date 2025-06-23
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+@RequiredArgsConstructor
|
|
|
+@Service
|
|
|
+public class HqHallReservationServiceImpl implements IHqHallReservationService {
|
|
|
+
|
|
|
+ private final HqHallReservationMapper baseMapper;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询报告厅预约
|
|
|
+ *
|
|
|
+ * @param id 主键
|
|
|
+ * @return 报告厅预约
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public HqHallReservationVo queryById(Long id) {
|
|
|
+ return baseMapper.selectVoById(id);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 分页查询报告厅预约列表
|
|
|
+ *
|
|
|
+ * @param bo 查询条件
|
|
|
+ * @param pageQuery 分页参数
|
|
|
+ * @return 报告厅预约分页列表
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public TableDataInfo<HqHallReservationVo> queryPageList(HqHallReservationBo bo, PageQuery pageQuery) {
|
|
|
+ LambdaQueryWrapper<HqHallReservation> lqw = buildQueryWrapper(bo);
|
|
|
+ Page<HqHallReservationVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
|
|
+ return TableDataInfo.build(result);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询符合条件的报告厅预约列表
|
|
|
+ *
|
|
|
+ * @param bo 查询条件
|
|
|
+ * @return 报告厅预约列表
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public List<HqHallReservationVo> queryList(HqHallReservationBo bo) {
|
|
|
+ LambdaQueryWrapper<HqHallReservation> lqw = buildQueryWrapper(bo);
|
|
|
+ return baseMapper.selectVoList(lqw);
|
|
|
+ }
|
|
|
+
|
|
|
+ private LambdaQueryWrapper<HqHallReservation> buildQueryWrapper(HqHallReservationBo bo) {
|
|
|
+ Map<String, Object> params = bo.getParams();
|
|
|
+ LambdaQueryWrapper<HqHallReservation> lqw = Wrappers.lambdaQuery();
|
|
|
+ lqw.orderByDesc(HqHallReservation::getCreateTime);
|
|
|
+
|
|
|
+ // 调试日志:记录查询条件
|
|
|
+ log.info("报告厅预约查询条件 - applicantId: {}, hallId: {}, hallName: {}, status: {}",
|
|
|
+ bo.getApplicantId(), bo.getHallId(), bo.getHallName(), bo.getStatus());
|
|
|
+ lqw.eq(bo.getHallId() != null, HqHallReservation::getHallId, bo.getHallId());
|
|
|
+ lqw.like(StringUtils.isNotBlank(bo.getHallName()), HqHallReservation::getHallName, bo.getHallName());
|
|
|
+
|
|
|
+ // 处理时间查询参数:优先使用字符串格式的时间参数
|
|
|
+ Date startTimeQuery = null;
|
|
|
+ Date endTimeQuery = null;
|
|
|
+
|
|
|
+ // 如果有字符串格式的时间参数,优先使用
|
|
|
+ if (StringUtils.isNotBlank(bo.getStartTimeStr())) {
|
|
|
+ startTimeQuery = parseDateTime(bo.getStartTimeStr());
|
|
|
+ } else if (bo.getStartTime() != null) {
|
|
|
+ startTimeQuery = bo.getStartTime();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (StringUtils.isNotBlank(bo.getEndTimeStr())) {
|
|
|
+ endTimeQuery = parseDateTime(bo.getEndTimeStr());
|
|
|
+ } else if (bo.getEndTime() != null) {
|
|
|
+ endTimeQuery = bo.getEndTime();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 时间范围查询逻辑:
|
|
|
+ // 如果用户选择了开始时间,查找预约开始时间 >= 用户选择时间的记录
|
|
|
+ // 这样查询出的记录的开始时间都会比用户选择的时间晚或相等(用户选择的时间比数据库中的早)
|
|
|
+ lqw.ge(startTimeQuery != null, HqHallReservation::getStartTime, startTimeQuery);
|
|
|
+
|
|
|
+ // 如果用户选择了结束时间,查找预约结束时间 <= 用户选择时间的记录
|
|
|
+ // 这样查询出的记录的结束时间都会比用户选择的时间早或相等(用户选择的时间比数据库中的晚)
|
|
|
+ lqw.le(endTimeQuery != null, HqHallReservation::getEndTime, endTimeQuery);
|
|
|
+
|
|
|
+ lqw.eq(bo.getApplicantId() != null, HqHallReservation::getApplicantId, bo.getApplicantId());
|
|
|
+ lqw.like(StringUtils.isNotBlank(bo.getApplicantName()), HqHallReservation::getApplicantName,
|
|
|
+ bo.getApplicantName());
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getStatus()), HqHallReservation::getStatus, bo.getStatus());
|
|
|
+ return lqw;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 解析日期时间字符串
|
|
|
+ */
|
|
|
+ private Date parseDateTime(String dateTimeStr) {
|
|
|
+ if (StringUtils.isBlank(dateTimeStr)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ return sdf.parse(dateTimeStr);
|
|
|
+ } catch (ParseException e) {
|
|
|
+ log.warn("日期格式解析失败: {}", dateTimeStr, e);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 新增报告厅预约
|
|
|
+ *
|
|
|
+ * @param bo 报告厅预约
|
|
|
+ * @return 是否新增成功
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Boolean insertByBo(HqHallReservationBo bo) {
|
|
|
+ HqHallReservation add = MapstructUtils.convert(bo, HqHallReservation.class);
|
|
|
+ validEntityBeforeSave(add);
|
|
|
+ boolean flag = baseMapper.insert(add) > 0;
|
|
|
+ if (flag) {
|
|
|
+ bo.setId(add.getId());
|
|
|
+ }
|
|
|
+ return flag;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 修改报告厅预约
|
|
|
+ *
|
|
|
+ * @param bo 报告厅预约
|
|
|
+ * @return 是否修改成功
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Boolean updateByBo(HqHallReservationBo bo) {
|
|
|
+ HqHallReservation update = MapstructUtils.convert(bo, HqHallReservation.class);
|
|
|
+ validEntityBeforeSave(update);
|
|
|
+ return baseMapper.updateById(update) > 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 保存前的数据校验
|
|
|
+ */
|
|
|
+ private void validEntityBeforeSave(HqHallReservation entity) {
|
|
|
+ // TODO 做一些数据校验,如唯一约束
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 校验并批量删除报告厅预约信息
|
|
|
+ *
|
|
|
+ * @param ids 待删除的主键集合
|
|
|
+ * @param isValid 是否进行有效性校验
|
|
|
+ * @return 是否删除成功
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
|
|
+ if (isValid) {
|
|
|
+ // TODO 做一些业务上的校验,判断是否需要校验
|
|
|
+ }
|
|
|
+ return baseMapper.deleteByIds(ids) > 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 批量审核报告厅预约
|
|
|
+ *
|
|
|
+ * @param auditBo 审核信息
|
|
|
+ * @return 是否审核成功
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Boolean auditByIds(HqHallReservationAuditBo auditBo) {
|
|
|
+ log.info("开始审核报告厅预约,审核信息:{}", auditBo);
|
|
|
+
|
|
|
+ // 获取当前用户ID作为审核人
|
|
|
+ Long currentUserId = LoginHelper.getUserId();
|
|
|
+ String currentUserName = LoginHelper.getLoginUser().getNickname();
|
|
|
+ Date auditTime = new Date();
|
|
|
+
|
|
|
+ // 构建更新条件
|
|
|
+ List<HqHallReservation> updateList = auditBo.getIds().stream()
|
|
|
+ .map(id -> {
|
|
|
+ HqHallReservation entity = new HqHallReservation();
|
|
|
+ entity.setId(id);
|
|
|
+ entity.setStatus(auditBo.getStatus());
|
|
|
+ entity.setAuditBy(currentUserId);
|
|
|
+ entity.setAuditName(currentUserName);
|
|
|
+ entity.setAuditTime(auditTime);
|
|
|
+ entity.setAuditRemark(auditBo.getAuditRemark());
|
|
|
+ return entity;
|
|
|
+ })
|
|
|
+ .toList();
|
|
|
+
|
|
|
+ // 批量更新
|
|
|
+ boolean result = baseMapper.updateBatchById(updateList);
|
|
|
+
|
|
|
+ log.info("审核完成,审核状态:{},影响记录数:{}", auditBo.getStatus(), updateList.size());
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+}
|