From ebe0efc1b9298aa3002ffd3f7f6b1e1b95eaaa7d Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Tue, 18 Jun 2024 14:49:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=85=E7=94=B5=E6=A1=A9=E9=A2=84=E7=BA=A6?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pile/mapper/PileReservedInfoMapper.java | 6 +- .../pile/service/PileReservedInfoService.java | 7 ++ .../impl/PileReservedInfoServiceImpl.java | 73 +++++++++++ .../mapper/pile/PileReservedInfoMapper.xml | 113 ++++++++++++++++++ 4 files changed, 198 insertions(+), 1 deletion(-) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/PileReservedInfoMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/PileReservedInfoMapper.java index 971981e16..8de7e78d0 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/PileReservedInfoMapper.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/PileReservedInfoMapper.java @@ -25,7 +25,11 @@ public interface PileReservedInfoMapper { int updateBatch(List list); + int updateBatchSelective(List list); + int batchInsert(@Param("list") List list); - int updateBatchSelective(List list); + List findByMemberIdAndPileSnAndStatus(@Param("memberId") String memberId, @Param("pileSn") String pileSn, @Param("status") String status); + + List findByMemberIdAndPileSn(@Param("memberId") String memberId, @Param("pileSn") String pileSn); } \ No newline at end of file diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileReservedInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileReservedInfoService.java index 20ea90bfc..40f182329 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileReservedInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileReservedInfoService.java @@ -28,5 +28,12 @@ public interface PileReservedInfoService { int batchInsert(List list); int updateBatchSelective(List list); + + List getReservationsByMemberIdAndPileSn(String memberId, String pileSn); + + void activateReservation(int reservationId); + + void deactivateReservation(int reservationId); + } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileReservedInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileReservedInfoServiceImpl.java index 328d1e648..5435d6059 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileReservedInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileReservedInfoServiceImpl.java @@ -1,8 +1,12 @@ package com.jsowell.pile.service.impl; +import com.jsowell.common.constant.Constants; +import com.jsowell.common.util.DateUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.time.LocalTime; +import java.util.Date; import java.util.List; import com.jsowell.pile.mapper.PileReservedInfoMapper; @@ -69,5 +73,74 @@ public class PileReservedInfoServiceImpl implements PileReservedInfoService { public int updateBatchSelective(List list) { return pileReservedInfoMapper.updateBatchSelective(list); } + + @Override + public List getReservationsByMemberIdAndPileSn(String memberId, String pileSn) { + return pileReservedInfoMapper.findByMemberIdAndPileSn(memberId, pileSn); + } + + /** + * 启用预约 + * @param reservationId + */ + @Override + public void activateReservation(int reservationId) { + PileReservedInfo pileReservedInfo = pileReservedInfoMapper.selectByPrimaryKey(reservationId); + if (pileReservedInfo != null) { + pileReservedInfo.setStatus(Constants.ONE); + // pileReservedInfoMapper.updateByPrimaryKeySelective(pileReservedInfo); + saveReservation(pileReservedInfo); + } + } + + /** + * 禁用预约 + * @param reservationId + */ + @Override + public void deactivateReservation(int reservationId) { + PileReservedInfo pileReservedInfo = pileReservedInfoMapper.selectByPrimaryKey(reservationId); + if (pileReservedInfo != null) { + pileReservedInfo.setStatus(Constants.ZERO); + pileReservedInfoMapper.updateByPrimaryKeySelective(pileReservedInfo); + } + } + + + /** + * 校验时间是否重叠 + * @param memberId + * @param pileSn + * @param startTime + * @param endTime + * @param reservationId + * @return + */ + public boolean isTimeSlotAvailable(String memberId, String pileSn, Date startTime, Date endTime, Integer reservationId) { + List reservations = pileReservedInfoMapper.findByMemberIdAndPileSnAndStatus(memberId, pileSn, "1"); + LocalTime newStartTime = LocalTime.parse(DateUtils.formatDateTime(startTime)); + LocalTime newEndTime = LocalTime.parse(DateUtils.formatDateTime(endTime)); + + for (PileReservedInfo res : reservations) { + if (res.getId().equals(reservationId)) { + continue; // Skip the current reservation if updating + } + LocalTime existingStartTime = LocalTime.parse(DateUtils.formatDateTime(res.getStartTime())); + LocalTime existingEndTime = LocalTime.parse(DateUtils.formatDateTime(res.getEndTime())); + + if (newStartTime.isBefore(existingEndTime) && newEndTime.isAfter(existingStartTime)) { + return false; // Time slot overlaps + } + } + return true; + } + + public void saveReservation(PileReservedInfo reservation) { + if (isTimeSlotAvailable(reservation.getMemberId(), reservation.getPileSn(), reservation.getStartTime(), reservation.getEndTime(), reservation.getId())) { + this.updateByPrimaryKeySelective(reservation); + } else { + throw new RuntimeException("Time slot overlaps with an existing reservation."); + } + } } diff --git a/jsowell-pile/src/main/resources/mapper/pile/PileReservedInfoMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/PileReservedInfoMapper.xml index b3cf0840e..cb127d486 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/PileReservedInfoMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/PileReservedInfoMapper.xml @@ -258,6 +258,100 @@ #{item.id,jdbcType=INTEGER} + + + update pile_reserved_info + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.memberId,jdbcType=VARCHAR} + + + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.pileSn,jdbcType=VARCHAR} + + + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.status,jdbcType=VARCHAR} + + + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.reservedType,jdbcType=VARCHAR} + + + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.startTime,jdbcType=TIME} + + + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.endTime,jdbcType=TIME} + + + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.freq,jdbcType=VARCHAR} + + + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.createBy,jdbcType=VARCHAR} + + + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.createTime,jdbcType=TIMESTAMP} + + + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.updateBy,jdbcType=VARCHAR} + + + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.updateTime,jdbcType=TIMESTAMP} + + + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.delFlag,jdbcType=CHAR} + + + + + where id in + + #{item.id,jdbcType=INTEGER} + + insert into pile_reserved_info @@ -458,4 +552,23 @@ + + + + \ No newline at end of file