diff --git a/src/main/java/com/petstore/mapper/AppointmentMapper.java b/src/main/java/com/petstore/mapper/AppointmentMapper.java index 4137b07..82d5503 100644 --- a/src/main/java/com/petstore/mapper/AppointmentMapper.java +++ b/src/main/java/com/petstore/mapper/AppointmentMapper.java @@ -41,4 +41,8 @@ public interface AppointmentMapper extends JpaRepository { @Param("storeId") Long storeId, @Param("start") LocalDateTime start, @Param("end") LocalDateTime end); + + /** 本店是否存在关联该宠物的预约(与 listByStoreServed 口径一致) */ + @Query("SELECT COUNT(a) > 0 FROM Appointment a WHERE a.petId = :petId AND a.storeId = :storeId AND a.deleted = false") + boolean existsByPetIdAndStoreIdAndDeletedFalse(@Param("petId") Long petId, @Param("storeId") Long storeId); } diff --git a/src/main/java/com/petstore/service/PetService.java b/src/main/java/com/petstore/service/PetService.java index fd3b407..6c8e99e 100644 --- a/src/main/java/com/petstore/service/PetService.java +++ b/src/main/java/com/petstore/service/PetService.java @@ -1,7 +1,9 @@ package com.petstore.service; import com.petstore.entity.Pet; +import com.petstore.mapper.AppointmentMapper; import com.petstore.mapper.PetMapper; +import com.petstore.mapper.UserMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -14,6 +16,8 @@ import java.util.Optional; @RequiredArgsConstructor public class PetService { private final PetMapper petMapper; + private final UserMapper userMapper; + private final AppointmentMapper appointmentMapper; /** 客户:仅自己的宠物 */ public List listByOwner(Long ownerUserId) { @@ -61,8 +65,20 @@ public class PetService { if (!pet.getOwnerUserId().equals(operatorUserId)) { return Map.of("code", 403, "message", "无权修改该宠物"); } + } else if ("boss".equals(role) || "staff".equals(role)) { + var uOpt = userMapper.findByIdAndDeletedFalse(operatorUserId); + if (uOpt.isEmpty()) { + return Map.of("code", 403, "message", "无权修改该宠物"); + } + Long storeId = uOpt.get().getStoreId(); + if (storeId == null) { + return Map.of("code", 403, "message", "无权修改该宠物"); + } + if (!appointmentMapper.existsByPetIdAndStoreIdAndDeletedFalse(pet.getId(), storeId)) { + return Map.of("code", 403, "message", "仅可修改本店预约关联过的宠物"); + } } else { - return Map.of("code", 403, "message", "仅客户可编辑自己的宠物档案"); + return Map.of("code", 403, "message", "无权修改该宠物"); } if (input.getName() != null && !input.getName().isBlank()) { pet.setName(input.getName());