From 6003aca88e3ca6ac414ba9a66c71428df09b93db Mon Sep 17 00:00:00 2001 From: JIAN Date: Sat, 14 Sep 2024 21:57:39 +0800 Subject: [PATCH] =?UTF-8?q?feat(health):=E6=96=B0=E5=A2=9E=E9=A2=84?= =?UTF-8?q?=E7=BA=A6=E8=AE=BE=E7=BD=AE=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=201.=20=E6=9F=A5=E8=AF=A2=E6=9F=90=E6=9C=88=E7=9A=84=E9=A2=84?= =?UTF-8?q?=E7=BA=A6=E8=AE=BE=E7=BD=AE=202.=20=E6=9F=A5=E8=AF=A2=E5=8F=AF?= =?UTF-8?q?=E7=94=A8=E7=9A=84=E9=A2=84=E7=BA=A6=E6=97=A5=E6=9C=9F=203.=20(?= =?UTF-8?q?=E6=89=B9=E9=87=8F)=E8=AE=BE=E7=BD=AE=E9=A2=84=E7=BA=A6?= =?UTF-8?q?=E4=BA=BA=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReservationBatchSettingController.java | 27 +++++- .../admin/ReservationSettingController.java | 11 ++- .../user/ReservationSettingController.java | 12 ++- .../mapper/ReservationSettingMapper.java | 10 ++- .../service/IReservationSettingService.java | 26 ++++++ .../impl/ReservationSettingServiceImpl.java | 84 +++++++++++++++++++ 6 files changed, 161 insertions(+), 9 deletions(-) diff --git a/jzo2o-health/src/main/java/com/jzo2o/health/controller/admin/ReservationBatchSettingController.java b/jzo2o-health/src/main/java/com/jzo2o/health/controller/admin/ReservationBatchSettingController.java index b061528..6e1ad69 100644 --- a/jzo2o-health/src/main/java/com/jzo2o/health/controller/admin/ReservationBatchSettingController.java +++ b/jzo2o-health/src/main/java/com/jzo2o/health/controller/admin/ReservationBatchSettingController.java @@ -1,5 +1,9 @@ package com.jzo2o.health.controller.admin; +import com.alibaba.excel.EasyExcel; +import com.jzo2o.common.utils.CollUtils; +import com.jzo2o.health.model.excel.ReservationImportData; +import com.jzo2o.health.service.IReservationSettingService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -9,9 +13,12 @@ import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; +import java.io.InputStream; +import java.util.List; + /** * 预约设置操作 - * * @author itcast */ @Slf4j @@ -19,10 +26,26 @@ import org.springframework.web.multipart.MultipartFile; @RequestMapping("/admin/reservation-setting") @Api(tags = "管理端 - 批量预约设置相关接口") public class ReservationBatchSettingController { + @Resource + private IReservationSettingService reservationSettingService; @PostMapping("/upload") @ApiOperation("上传文件批量预约设置") public void upload(@RequestPart("file") MultipartFile file) { + List reservationDataList; + try (InputStream inputStream = file.getInputStream()) { + reservationDataList = EasyExcel.read(inputStream) + .head(ReservationImportData.class) + .sheet("预约设置模板") + .doReadSync(); + } catch (Exception e) { + // 防止过度包装 + throw e instanceof RuntimeException ? (RuntimeException) e : new RuntimeException(e); + } + + if (CollUtils.isNotEmpty(reservationDataList)) { + reservationSettingService.editNumberByDateBatch(reservationDataList); + } } -} +} \ No newline at end of file diff --git a/jzo2o-health/src/main/java/com/jzo2o/health/controller/admin/ReservationSettingController.java b/jzo2o-health/src/main/java/com/jzo2o/health/controller/admin/ReservationSettingController.java index 4d22c52..05c71ac 100644 --- a/jzo2o-health/src/main/java/com/jzo2o/health/controller/admin/ReservationSettingController.java +++ b/jzo2o-health/src/main/java/com/jzo2o/health/controller/admin/ReservationSettingController.java @@ -2,12 +2,15 @@ package com.jzo2o.health.controller.admin; import com.jzo2o.health.model.dto.request.ReservationSettingUpsertReqDTO; import com.jzo2o.health.model.dto.response.ReservationSettingResDTO; +import com.jzo2o.health.service.IReservationSettingService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import java.time.YearMonth; import java.util.List; /** @@ -20,16 +23,20 @@ import java.util.List; @RequestMapping("/admin/reservation-setting") @Api(tags = "管理端 - 预约设置相关接口") public class ReservationSettingController { + @Resource + private IReservationSettingService reservationSettingService; @GetMapping("/getReservationSettingByMonth") @ApiOperation("按月查询预约设置") @ApiImplicitParam(name = "date", value = "月份,格式:yyyy-MM", required = true, dataTypeClass = String.class) public List getReservationSettingByMonth(@RequestParam("date") String date) { - return null; + YearMonth yearMonth = YearMonth.parse(date); + return reservationSettingService.getReservationSettingByMonth(yearMonth); } @PutMapping("/editNumberByDate") @ApiOperation("编辑预约设置") public void editNumberByDate(@RequestBody ReservationSettingUpsertReqDTO reservationSettingUpsertReqDTO) { + reservationSettingService.editNumberByDate(reservationSettingUpsertReqDTO); } -} +} \ No newline at end of file diff --git a/jzo2o-health/src/main/java/com/jzo2o/health/controller/user/ReservationSettingController.java b/jzo2o-health/src/main/java/com/jzo2o/health/controller/user/ReservationSettingController.java index 726ab64..c9f9df7 100644 --- a/jzo2o-health/src/main/java/com/jzo2o/health/controller/user/ReservationSettingController.java +++ b/jzo2o-health/src/main/java/com/jzo2o/health/controller/user/ReservationSettingController.java @@ -2,6 +2,7 @@ package com.jzo2o.health.controller.user; import com.jzo2o.health.annotation.IgnoreToken; import com.jzo2o.health.model.dto.response.ReservationDateResDTO; +import com.jzo2o.health.service.IReservationSettingService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; @@ -11,9 +12,11 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import javax.annotation.Resource; +import java.time.YearMonth; + /** * 预约设置操作 - * * @author itcast */ @Slf4j @@ -21,12 +24,15 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping("/user/reservation-setting") @Api(tags = "用户端 - 预约设置相关接口") public class ReservationSettingController { + @Resource + private IReservationSettingService reservationSettingService; @GetMapping("/getReservationDateByMonth") @IgnoreToken @ApiOperation("按月查询可预约日期") @ApiImplicitParam(name = "month", value = "月份,格式:yyyy-MM", required = true, dataTypeClass = String.class) public ReservationDateResDTO getReservationDateByMonth(@RequestParam("month") String month) { - return null; + YearMonth yearMonth = YearMonth.parse(month); + return reservationSettingService.getReservationDateByMonth(yearMonth); } -} +} \ No newline at end of file diff --git a/jzo2o-health/src/main/java/com/jzo2o/health/mapper/ReservationSettingMapper.java b/jzo2o-health/src/main/java/com/jzo2o/health/mapper/ReservationSettingMapper.java index 71da200..2547343 100644 --- a/jzo2o-health/src/main/java/com/jzo2o/health/mapper/ReservationSettingMapper.java +++ b/jzo2o-health/src/main/java/com/jzo2o/health/mapper/ReservationSettingMapper.java @@ -3,17 +3,23 @@ package com.jzo2o.health.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.jzo2o.health.model.domain.ReservationSetting; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; +import java.time.LocalDate; +import java.util.List; + /** *

* Mapper 接口 *

- * * @author itcast * @since 2023-11-01 */ public interface ReservationSettingMapper extends BaseMapper { @Update("UPDATE reservation_setting SET reservations = reservations + 1 WHERE id = #{id} AND reservations < number") Integer updateReservations(@Param("id") Integer id); -} + + @Select("SELECT order_date FROM reservation_setting WHERE #{start} <= order_date AND order_date <= #{end}") + List getReservationDate(@Param("start") LocalDate start, @Param("end") LocalDate end); +} \ No newline at end of file diff --git a/jzo2o-health/src/main/java/com/jzo2o/health/service/IReservationSettingService.java b/jzo2o-health/src/main/java/com/jzo2o/health/service/IReservationSettingService.java index 3b65f0c..55035dc 100644 --- a/jzo2o-health/src/main/java/com/jzo2o/health/service/IReservationSettingService.java +++ b/jzo2o-health/src/main/java/com/jzo2o/health/service/IReservationSettingService.java @@ -2,6 +2,13 @@ package com.jzo2o.health.service; import com.baomidou.mybatisplus.extension.service.IService; import com.jzo2o.health.model.domain.ReservationSetting; +import com.jzo2o.health.model.dto.request.ReservationSettingUpsertReqDTO; +import com.jzo2o.health.model.dto.response.ReservationDateResDTO; +import com.jzo2o.health.model.dto.response.ReservationSettingResDTO; +import com.jzo2o.health.model.excel.ReservationImportData; + +import java.time.YearMonth; +import java.util.List; /** *

@@ -10,4 +17,23 @@ import com.jzo2o.health.model.domain.ReservationSetting; * @author JIAN */ public interface IReservationSettingService extends IService { + /** + * 获取指定月份的所有预约数据 + */ + List getReservationSettingByMonth(YearMonth yearMonth); + + /** + * 更新/插入指定日期的预约数据 + */ + void editNumberByDate(ReservationSettingUpsertReqDTO reservationSettingUpsertReqDTO); + + /** + * 批量更新/插入指定日期的预约数据 + */ + void editNumberByDateBatch(List reservationDataList); + + /** + * 获取当前月份可用预约日期 + */ + ReservationDateResDTO getReservationDateByMonth(YearMonth yearMonth); } \ No newline at end of file diff --git a/jzo2o-health/src/main/java/com/jzo2o/health/service/impl/ReservationSettingServiceImpl.java b/jzo2o-health/src/main/java/com/jzo2o/health/service/impl/ReservationSettingServiceImpl.java index 23e599a..94aa5d4 100644 --- a/jzo2o-health/src/main/java/com/jzo2o/health/service/impl/ReservationSettingServiceImpl.java +++ b/jzo2o-health/src/main/java/com/jzo2o/health/service/impl/ReservationSettingServiceImpl.java @@ -1,9 +1,25 @@ package com.jzo2o.health.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; +import com.jzo2o.common.expcetions.DBException; +import com.jzo2o.common.utils.CollUtils; import com.jzo2o.health.mapper.ReservationSettingMapper; import com.jzo2o.health.model.domain.ReservationSetting; +import com.jzo2o.health.model.dto.request.ReservationSettingUpsertReqDTO; +import com.jzo2o.health.model.dto.response.ReservationDateResDTO; +import com.jzo2o.health.model.dto.response.ReservationSettingResDTO; +import com.jzo2o.health.model.excel.ReservationImportData; import com.jzo2o.health.service.IReservationSettingService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.time.YearMonth; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; /** *

@@ -11,5 +27,73 @@ import com.jzo2o.health.service.IReservationSettingService; *

* @author JIAN */ +@Service public class ReservationSettingServiceImpl extends ServiceImpl implements IReservationSettingService { + @Override + @SuppressWarnings("unchecked") + public List getReservationSettingByMonth(YearMonth yearMonth) { + List reservationSettingList = lambdaQuery() + .ge(ReservationSetting::getOrderDate, yearMonth.atDay(1)) + .le(ReservationSetting::getOrderDate, yearMonth.atEndOfMonth()) + .orderByDesc(ReservationSetting::getOrderDate) + .list(); + + if (CollUtils.isEmpty(reservationSettingList)) { + return new ArrayList<>(); + } else { + return reservationSettingList.stream() + .map(item -> ReservationSettingResDTO.builder() + .date(item.getOrderDate().toString()) + .number(item.getNumber()) + .reservations(item.getReservations()) + .build()) + .collect(Collectors.toList()); + } + } + + @Override + public void editNumberByDate(ReservationSettingUpsertReqDTO reservationSettingUpsertReqDTO) { + LocalDate orderDate = reservationSettingUpsertReqDTO.getOrderDate(); + Integer number = reservationSettingUpsertReqDTO.getNumber(); + + Optional.ofNullable(lambdaQuery() + .eq(ReservationSetting::getOrderDate, orderDate) + .one()) + .ifPresentOrElse(reservationSetting -> { + // 存在则更新 + if (!lambdaUpdate() + .eq(ReservationSetting::getOrderDate, orderDate) + .set(ReservationSetting::getNumber, number) + .update()) { + throw new DBException("更新预约设置表失败"); + } + }, () -> { + // 不存在则创建 + if (!SqlHelper.retBool(baseMapper.insert(ReservationSetting + .builder() + .orderDate(orderDate) + .reservations(0) + .number(number) + .build()))) { + throw new DBException("插入预约设置表失败"); + } + }); + } + + @Override + @Transactional + public void editNumberByDateBatch(List reservationDataList) { + for (ReservationImportData reservationData : reservationDataList) { + this.editNumberByDate(ReservationSettingUpsertReqDTO.builder() + .orderDate(LocalDate.parse(reservationData.getDate())) + .number(Math.min(reservationData.getNumber(), 999)) + .build()); + } + } + + @Override + public ReservationDateResDTO getReservationDateByMonth(YearMonth yearMonth) { + List dates = baseMapper.getReservationDate(yearMonth.atDay(1), yearMonth.atEndOfMonth()); + return new ReservationDateResDTO(dates); + } } \ No newline at end of file