diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PersonPileController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PersonPileController.java index a4cf57b85..4169fd0c4 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PersonPileController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PersonPileController.java @@ -15,6 +15,7 @@ import com.jsowell.pile.dto.PileMemberBindingDTO; import com.jsowell.pile.dto.QueryPersonPileDTO; import com.jsowell.pile.service.PileBasicInfoService; import com.jsowell.pile.service.PileMerchantInfoService; +import com.jsowell.pile.vo.PileReservedVO; import com.jsowell.pile.vo.uniapp.PersonPileConnectorSumInfoVO; import com.jsowell.pile.vo.uniapp.PersonPileRealTimeVO; import com.jsowell.pile.vo.uniapp.PersonalPileInfoVO; @@ -253,6 +254,54 @@ public class PersonPileController extends BaseController { * 个人桩启动充电 */ + /** + * 添加预约充电 + * http://localhost:8080/uniapp/personalPile/createReserved + */ + @PostMapping("/createReserved") + public RestApiResponse createReserved(HttpServletRequest request, @RequestBody CreateReservedDTO dto) { + // logger.info("修改预约充电状态params:{}", dto); + RestApiResponse response = null; + try { + String memberId = getMemberIdByAuthorization(request); + dto.setMemberId(memberId); + int reservedId = pileService.createReserved(dto); + response = new RestApiResponse<>(ImmutableMap.of("reservedId", reservedId)); + } catch (BusinessException e) { + logger.error("添加预约充电error, params:{}", dto, e); + response = new RestApiResponse<>(e.getCode(), e.getMessage()); + } catch (Exception e) { + logger.error("添加预约充电error, params:{}", dto, e); + response = new RestApiResponse<>(ReturnCodeEnum.CODE_CREATE_RESERVED_ERROR); + } + logger.info("添加预约充电params:{}, result:{}", dto, response); + return response; + } + + /** + * 查询预约充电列表 + * http://localhost:8080/uniapp/personalPile/queryReservedList + */ + @PostMapping("/queryReservedList") + public RestApiResponse queryReservedList(HttpServletRequest request, @RequestBody PileReservedDTO dto) { + // logger.info("修改预约充电状态params:{}", dto); + RestApiResponse response = null; + try { + String memberId = getMemberIdByAuthorization(request); + dto.setMemberId(memberId); + PageResponse pageResponse = pileService.queryReservedList(dto); + response = new RestApiResponse<>(pageResponse); + } catch (BusinessException e) { + logger.error("查询预约列表error, params:{}", dto, e); + response = new RestApiResponse<>(e.getCode(), e.getMessage()); + } catch (Exception e) { + logger.error("查询预约列表error, params:{}", dto, e); + response = new RestApiResponse<>(ReturnCodeEnum.CODE_QUERY_RESERVED_LIST_ERROR); + } + logger.info("查询预约列表params:{}, result:{}", dto, response); + return response; + } + /** * 修改预约充电状态 * http://localhost:8080/uniapp/personalPile/updateReservedStatus @@ -277,27 +326,5 @@ public class PersonPileController extends BaseController { return response; } - /** - * 添加预约充电 - * http://localhost:8080/uniapp/personalPile/createReserved - */ - @PostMapping("/createReserved") - public RestApiResponse createReserved(HttpServletRequest request, @RequestBody CreateReservedDTO dto) { - // logger.info("修改预约充电状态params:{}", dto); - RestApiResponse response = null; - try { - String memberId = getMemberIdByAuthorization(request); - dto.setMemberId(memberId); - int reservedId = pileService.createReserved(dto); - response = new RestApiResponse<>(ImmutableMap.of("reservedId", reservedId)); - } catch (BusinessException e) { - logger.error("添加预约充电error, params:{}", dto, e); - response = new RestApiResponse<>(e.getCode(), e.getMessage()); - } catch (Exception e) { - logger.error("添加预约充电error, params:{}", dto, e); - response = new RestApiResponse<>(ReturnCodeEnum.CODE_CREATE_RESERVED_ERROR); - } - logger.info("添加预约充电params:{}, result:{}", dto, response); - return response; - } + } diff --git a/jsowell-admin/src/main/java/com/jsowell/service/PileService.java b/jsowell-admin/src/main/java/com/jsowell/service/PileService.java index bea8a1747..1b837d9d7 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/PileService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/PileService.java @@ -22,6 +22,7 @@ import com.jsowell.pile.util.SnUtils; import com.jsowell.pile.service.*; import com.jsowell.pile.transaction.dto.PileTransactionDTO; import com.jsowell.pile.transaction.service.TransactionService; +import com.jsowell.pile.vo.PileReservedVO; import com.jsowell.pile.vo.base.ConnectorInfoVO; import com.jsowell.pile.vo.base.MerchantInfoVO; import com.jsowell.pile.vo.base.PileInfoVO; @@ -562,8 +563,10 @@ public class PileService { */ public void updateReservedStatus(PileReservedDTO dto) { if (StringUtils.equals(dto.getStatus(), Constants.ZERO)) { + // 停用 pileReservedInfoService.deactivateReserved(dto); } else if (StringUtils.equals(dto.getStatus(), Constants.ONE)) { + // 启用 pileReservedInfoService.activateReserved(dto); } } @@ -588,4 +591,34 @@ public class PileService { pileReservedInfoService.insertSelective(reservedInfo); return reservedInfo.getId(); } + + public PageResponse queryReservedList(PileReservedDTO dto) { + int pageNo = dto.getPageNo() == null ? Constants.one : dto.getPageNo(); + int pageSize = dto.getPageSize() == null ? 10 : dto.getPageSize(); + PageHelper.startPage(pageNo, pageSize); + List list = pileReservedInfoService.getReservationsByMemberIdAndPileSn(dto.getMemberId(), dto.getPileSn()); + PageInfo pageInfo = new PageInfo<>(list); + + PageResponse pageResponse = new PageResponse(); + pageResponse.setPageNum(pageInfo.getPageNum()); + pageResponse.setPageSize(pageInfo.getPageSize()); + pageResponse.setPages(pageInfo.getPages()); + pageResponse.setTotal(pageInfo.getTotal()); + + List resultList = Lists.newArrayList(); + for (PileReservedInfo reservedInfo : pageInfo.getList()) { + resultList.add( + PileReservedVO.builder() + .reservedId(reservedInfo.getId() + "") + .pileSn(reservedInfo.getPileSn()) + .startTime(reservedInfo.getStartTime().toString()) + .endTime(reservedInfo.getEndTime().toString()) + .freq(reservedInfo.getFreq()) + .status(reservedInfo.getStatus()) + .build() + ); + } + pageResponse.setList(resultList); + return pageResponse; + } } diff --git a/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java b/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java index 4983c00e8..a7ddfb376 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java +++ b/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java @@ -168,8 +168,13 @@ public enum ReturnCodeEnum { CODE_UNBIND_PILE_ERROR("00400012", "解绑个人桩异常!"), CODE_CREATE_RESERVED_ERROR("00400013", "创建预约失败"), + CODE_UPDATE_RESERVED_STATUS_ERROR("00400014", "修改预约充电状态失败"), + CODE_QUERY_RESERVED_LIST_ERROR("00400015", "查询预约充电列表失败"), + + CODE_UPDATE_RESERVED_STATUS_REFUSED("00400016", "时间与现有预订重叠"), + /* 个人桩 end */ CODE_THIS_CARNO_HAS_BEEN_BINDING("00500001", "当前车牌号已经绑定,请检查!"), diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/PileReservedDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/PileReservedDTO.java index 6ebded0cd..29fbe6e45 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/dto/PileReservedDTO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/PileReservedDTO.java @@ -23,6 +23,15 @@ public class PileReservedDTO { */ private String status; + /** + * 桩编号 + */ + private String pileSn; + + private Integer pageNo; + + private Integer pageSize; + @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.JSON_STYLE) 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 716792b77..d17e2bd09 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,12 +1,15 @@ package com.jsowell.pile.service.impl; import com.jsowell.common.constant.Constants; +import com.jsowell.common.enums.ykc.ReturnCodeEnum; +import com.jsowell.common.exception.BusinessException; import com.jsowell.common.util.DateUtils; import com.jsowell.common.util.StringUtils; import com.jsowell.pile.dto.PileReservedDTO; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.sql.Time; import java.time.LocalTime; import java.util.Date; import java.util.List; @@ -125,17 +128,17 @@ public class PileReservedInfoServiceImpl implements PileReservedInfoService { * @param reservationId * @return */ - public boolean isTimeSlotAvailable(String memberId, String pileSn, Date startTime, Date endTime, Integer reservationId) { + public boolean isTimeSlotAvailable(String memberId, String pileSn, Time startTime, Time endTime, Integer reservationId) { List reservations = pileReservedInfoMapper.findByMemberIdAndPileSnAndStatus(memberId, pileSn, "1"); - LocalTime newStartTime = LocalTime.parse(DateUtils.formatDateTime(startTime)); - LocalTime newEndTime = LocalTime.parse(DateUtils.formatDateTime(endTime)); + LocalTime newStartTime = startTime.toLocalTime(); + LocalTime newEndTime = endTime.toLocalTime(); 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())); + LocalTime existingStartTime = res.getStartTime().toLocalTime(); + LocalTime existingEndTime = res.getEndTime().toLocalTime(); if (newStartTime.isBefore(existingEndTime) && newEndTime.isAfter(existingStartTime)) { return false; // Time slot overlaps @@ -148,7 +151,7 @@ public class PileReservedInfoServiceImpl implements PileReservedInfoService { 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."); + throw new BusinessException(ReturnCodeEnum.CODE_UPDATE_RESERVED_STATUS_REFUSED); } } } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/PileReservedVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/PileReservedVO.java new file mode 100644 index 000000000..3e7387c15 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/PileReservedVO.java @@ -0,0 +1,38 @@ +package com.jsowell.pile.vo; + +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@Builder +public class PileReservedVO { + private String reservedId; + + /** + * 充电桩编号 + */ + private String pileSn; + + /** + * 预约开始时间 + */ + private String startTime; + + /** + * 预约结束时间 + */ + private String endTime; + + /** + * 周期性预约的频率,对于单次预约,该字段可以为 NULL。可能的值包括 daily, weekly, monthly + */ + private String freq; + + /** + * 状态(0-未生效;1-生效) + */ + private String status; + +}