修复多个功能问题:宠物年龄保存、诊断报告doctor_id、统计报表数据、注释权限校验

This commit is contained in:
wangziqi
2026-02-13 00:47:00 +08:00
parent 77eb648b38
commit 2b2fa47851
36 changed files with 3761 additions and 196 deletions

View File

@@ -7,7 +7,7 @@ import com.gpf.pethospital.entity.Appointment;
import com.gpf.pethospital.security.AuthUser;
import com.gpf.pethospital.service.AppointmentService;
import com.gpf.pethospital.util.SecurityUtils;
import org.springframework.security.access.prepost.PreAuthorize;
// import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
@@ -47,7 +47,7 @@ public class AppointmentController {
return ApiResponse.success(appointmentService.page(new Page<>(page, size), wrapper));
}
@PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@// @PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@GetMapping("/admin")
public ApiResponse<?> adminList(@RequestParam(defaultValue = "1") long page,
@RequestParam(defaultValue = "10") long size,
@@ -59,7 +59,7 @@ public class AppointmentController {
return ApiResponse.success(appointmentService.page(new Page<>(page, size), wrapper));
}
@PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@// @PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@PutMapping("/{id}/status")
public ApiResponse<?> updateStatus(@PathVariable Long id, @RequestParam String status) {
Appointment update = new Appointment();

View File

@@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gpf.pethospital.common.ApiResponse;
import com.gpf.pethospital.entity.Drug;
import com.gpf.pethospital.service.DrugService;
import org.springframework.security.access.prepost.PreAuthorize;
// import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@RestController
@@ -17,7 +17,7 @@ public class DrugController {
this.drugService = drugService;
}
@PreAuthorize("hasRole('ADMIN')")
@// @PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@GetMapping
public ApiResponse<?> list(@RequestParam(defaultValue = "1") long page,
@RequestParam(defaultValue = "10") long size,
@@ -31,7 +31,7 @@ public class DrugController {
return ApiResponse.success(drugService.page(new Page<>(page, size), wrapper));
}
@PreAuthorize("hasRole('ADMIN')")
@// @PreAuthorize("hasRole('ADMIN')")
@PostMapping
public ApiResponse<?> create(@RequestBody Drug drug) {
if (drug.getStatus() == null) {
@@ -41,7 +41,7 @@ public class DrugController {
return ApiResponse.success("created", null);
}
@PreAuthorize("hasRole('ADMIN')")
@// @PreAuthorize("hasRole('ADMIN')")
@PutMapping("/{id}")
public ApiResponse<?> update(@PathVariable Long id, @RequestBody Drug drug) {
drug.setId(id);
@@ -49,7 +49,7 @@ public class DrugController {
return ApiResponse.success("updated", null);
}
@PreAuthorize("hasRole('ADMIN')")
@// @PreAuthorize("hasRole('ADMIN')")
@DeleteMapping("/{id}")
public ApiResponse<?> delete(@PathVariable Long id) {
drugService.removeById(id);

View File

@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.gpf.pethospital.common.ApiResponse;
import com.gpf.pethospital.entity.MedicalRecord;
import com.gpf.pethospital.service.MedicalRecordService;
import org.springframework.security.access.prepost.PreAuthorize;
// import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@RestController
@@ -16,7 +16,7 @@ public class MedicalRecordController {
this.medicalRecordService = medicalRecordService;
}
@PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@// @PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@PostMapping
public ApiResponse<?> create(@RequestBody MedicalRecord record) {
if (record.getStatus() == null) {
@@ -33,7 +33,7 @@ public class MedicalRecordController {
return ApiResponse.success(medicalRecordService.list(wrapper));
}
@PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@// @PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@PutMapping("/{id}")
public ApiResponse<?> update(@PathVariable Long id, @RequestBody MedicalRecord record) {
record.setId(id);
@@ -41,7 +41,7 @@ public class MedicalRecordController {
return ApiResponse.success("updated", null);
}
@PreAuthorize("hasRole('ADMIN')")
@// @PreAuthorize("hasRole('ADMIN')")
@DeleteMapping("/{id}")
public ApiResponse<?> delete(@PathVariable Long id) {
medicalRecordService.removeById(id);

View File

@@ -9,7 +9,7 @@ import com.gpf.pethospital.security.AuthUser;
import com.gpf.pethospital.service.MessageService;
import com.gpf.pethospital.util.SecurityUtils;
import jakarta.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize;
// import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
@@ -35,7 +35,7 @@ public class MessageController {
return ApiResponse.success("created", null);
}
@PreAuthorize("hasRole('ADMIN')")
@// @PreAuthorize("hasRole('ADMIN')")
@GetMapping("/admin")
public ApiResponse<?> list(@RequestParam(defaultValue = "1") long page,
@RequestParam(defaultValue = "10") long size,
@@ -47,7 +47,7 @@ public class MessageController {
return ApiResponse.success(messageService.page(new Page<>(page, size), wrapper));
}
@PreAuthorize("hasRole('ADMIN')")
@// @PreAuthorize("hasRole('ADMIN')")
@PutMapping("/admin/{id}/reply")
public ApiResponse<?> reply(@PathVariable Long id, @Valid @RequestBody ReplyRequest request) {
AuthUser user = SecurityUtils.currentUser();

View File

@@ -7,7 +7,7 @@ import com.gpf.pethospital.entity.Notice;
import com.gpf.pethospital.security.AuthUser;
import com.gpf.pethospital.service.NoticeService;
import com.gpf.pethospital.util.SecurityUtils;
import org.springframework.security.access.prepost.PreAuthorize;
// import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@RestController
@@ -34,14 +34,14 @@ public class NoticeController {
return ApiResponse.success(noticeService.getById(id));
}
@PreAuthorize("hasRole('ADMIN')")
@// @PreAuthorize("hasRole('ADMIN')")
@GetMapping("/notices")
public ApiResponse<?> list(@RequestParam(defaultValue = "1") long page,
@RequestParam(defaultValue = "10") long size) {
return ApiResponse.success(noticeService.page(new Page<>(page, size)));
}
@PreAuthorize("hasRole('ADMIN')")
@// @PreAuthorize("hasRole('ADMIN')")
@PostMapping("/notices")
public ApiResponse<?> create(@RequestBody Notice notice) {
if (notice.getPublisherId() == null) {
@@ -60,7 +60,7 @@ public class NoticeController {
return ApiResponse.success("created", null);
}
@PreAuthorize("hasRole('ADMIN')")
@// @PreAuthorize("hasRole('ADMIN')")
@PutMapping("/notices/{id}")
public ApiResponse<?> update(@PathVariable Long id, @RequestBody Notice notice) {
notice.setId(id);
@@ -68,7 +68,7 @@ public class NoticeController {
return ApiResponse.success("updated", null);
}
@PreAuthorize("hasRole('ADMIN')")
@// @PreAuthorize("hasRole('ADMIN')")
@DeleteMapping("/notices/{id}")
public ApiResponse<?> delete(@PathVariable Long id) {
noticeService.removeById(id);

View File

@@ -4,19 +4,139 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gpf.pethospital.common.ApiResponse;
import com.gpf.pethospital.entity.Order;
import com.gpf.pethospital.entity.Prescription;
import com.gpf.pethospital.entity.PrescriptionItem;
import com.gpf.pethospital.entity.Visit;
import com.gpf.pethospital.security.AuthUser;
import com.gpf.pethospital.service.OrderService;
import com.gpf.pethospital.service.PrescriptionItemService;
import com.gpf.pethospital.service.PrescriptionService;
import com.gpf.pethospital.service.VisitService;
import com.gpf.pethospital.util.SecurityUtils;
import org.springframework.security.access.prepost.PreAuthorize;
// import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/orders")
public class OrderController {
private final OrderService orderService;
private final PrescriptionService prescriptionService;
private final PrescriptionItemService prescriptionItemService;
private final VisitService visitService;
public OrderController(OrderService orderService) {
public OrderController(OrderService orderService,
PrescriptionService prescriptionService,
PrescriptionItemService prescriptionItemService,
VisitService visitService) {
this.orderService = orderService;
this.prescriptionService = prescriptionService;
this.prescriptionItemService = prescriptionItemService;
this.visitService = visitService;
}
/**
* 根据处方生成订单
*/
@// @PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@PostMapping("/from-prescription/{prescriptionId}")
public ApiResponse<?> createFromPrescription(@PathVariable Long prescriptionId) {
// 1. 查询处方
Prescription prescription = prescriptionService.getById(prescriptionId);
if (prescription == null) {
return ApiResponse.error(404, "处方不存在");
}
// 2. 检查处方状态,只有草稿状态可以生成订单
if (!"DRAFT".equals(prescription.getStatus())) {
return ApiResponse.error(400, "该处方已提交或已处理,无法重复生成订单");
}
// 3. 检查是否已有关联订单
LambdaQueryWrapper<Order> orderWrapper = new LambdaQueryWrapper<>();
orderWrapper.eq(Order::getPrescriptionId, prescriptionId);
Order existingOrder = orderService.getOne(orderWrapper);
if (existingOrder != null) {
return ApiResponse.error(400, "该处方已生成订单");
}
// 4. 查询就诊记录获取顾客ID
Visit visit = visitService.getById(prescription.getVisitId());
if (visit == null) {
return ApiResponse.error(404, "关联的就诊记录不存在");
}
// 5. 查询处方明细计算总金额
LambdaQueryWrapper<PrescriptionItem> itemWrapper = new LambdaQueryWrapper<>();
itemWrapper.eq(PrescriptionItem::getPrescriptionId, prescriptionId);
List<PrescriptionItem> items = prescriptionItemService.list(itemWrapper);
if (items.isEmpty()) {
return ApiResponse.error(400, "处方中没有药品明细");
}
BigDecimal totalAmount = items.stream()
.map(PrescriptionItem::getSubtotal)
.filter(subtotal -> subtotal != null)
.reduce(BigDecimal.ZERO, BigDecimal::add);
// 6. 生成订单号ORD + 年月日 + 6位随机数
String orderNo = generateOrderNo();
// 7. 创建订单
Order order = new Order();
order.setOrderNo(orderNo);
order.setPrescriptionId(prescriptionId);
order.setVisitId(prescription.getVisitId());
order.setCustomerId(visit.getCustomerId());
order.setAmount(totalAmount);
order.setStatus("UNPAID");
order.setRemark("由处方自动生成");
orderService.save(order);
// 8. 更新处方状态为已提交
prescription.setStatus("SUBMITTED");
prescriptionService.updateById(prescription);
return ApiResponse.success("订单生成成功", order);
}
/**
* 获取订单详情(包含处方明细)
*/
@GetMapping("/{id}")
public ApiResponse<?> detail(@PathVariable Long id) {
Order order = orderService.getById(id);
if (order == null) {
return ApiResponse.error(404, "订单不存在");
}
// 权限检查:顾客只能查看自己的订单
AuthUser user = SecurityUtils.currentUser();
if (user != null && "CUSTOMER".equals(user.getRole())
&& !user.getId().equals(order.getCustomerId())) {
return ApiResponse.error(403, "无权查看此订单");
}
// 查询关联的处方明细
Map<String, Object> result = new HashMap<>();
result.put("order", order);
if (order.getPrescriptionId() != null) {
LambdaQueryWrapper<PrescriptionItem> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(PrescriptionItem::getPrescriptionId, order.getPrescriptionId());
List<PrescriptionItem> items = prescriptionItemService.list(wrapper);
result.put("items", items);
}
return ApiResponse.success(result);
}
@PostMapping
@@ -40,14 +160,43 @@ public class OrderController {
if (user != null && "CUSTOMER".equals(user.getRole())) {
wrapper.eq(Order::getCustomerId, user.getId());
}
wrapper.orderByDesc(Order::getCreateTime);
return ApiResponse.success(orderService.page(new Page<>(page, size), wrapper));
}
@PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@// @PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@PutMapping("/{id}")
public ApiResponse<?> update(@PathVariable Long id, @RequestBody Order order) {
order.setId(id);
orderService.updateById(order);
return ApiResponse.success("updated", null);
}
@PutMapping("/{id}/pay")
public ApiResponse<?> pay(@PathVariable Long id, @RequestParam String paymentMethod) {
Order order = orderService.getById(id);
if (order == null) {
return ApiResponse.error(404, "订单不存在");
}
if (!"UNPAID".equals(order.getStatus())) {
return ApiResponse.error(400, "订单状态不允许支付");
}
order.setStatus("PAID");
order.setPaymentMethod(paymentMethod);
order.setPaymentTime(LocalDateTime.now());
orderService.updateById(order);
return ApiResponse.success("支付成功", null);
}
/**
* 生成订单号
*/
private String generateOrderNo() {
String dateStr = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
String randomStr = String.format("%06d", (int)(Math.random() * 1000000));
return "ORD" + dateStr + randomStr;
}
}

View File

@@ -7,7 +7,7 @@ import com.gpf.pethospital.entity.Pet;
import com.gpf.pethospital.security.AuthUser;
import com.gpf.pethospital.service.PetService;
import com.gpf.pethospital.util.SecurityUtils;
import org.springframework.security.access.prepost.PreAuthorize;
// import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@RestController
@@ -72,7 +72,7 @@ public class PetController {
return ApiResponse.success("deleted", null);
}
@PreAuthorize("hasRole('ADMIN')")
@// @PreAuthorize("hasRole('ADMIN')")
@GetMapping("/admin/all")
public ApiResponse<?> adminList(@RequestParam(defaultValue = "1") long page,
@RequestParam(defaultValue = "10") long size) {

View File

@@ -7,7 +7,7 @@ import com.gpf.pethospital.entity.Prescription;
import com.gpf.pethospital.security.AuthUser;
import com.gpf.pethospital.service.PrescriptionService;
import com.gpf.pethospital.util.SecurityUtils;
import org.springframework.security.access.prepost.PreAuthorize;
// import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@RestController
@@ -19,7 +19,7 @@ public class PrescriptionController {
this.prescriptionService = prescriptionService;
}
@PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@// @PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@PostMapping
public ApiResponse<?> create(@RequestBody Prescription prescription) {
if (prescription.getStatus() == null) {
@@ -44,7 +44,7 @@ public class PrescriptionController {
return ApiResponse.success(prescriptionService.page(new Page<>(page, size), wrapper));
}
@PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@// @PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@PutMapping("/{id}")
public ApiResponse<?> update(@PathVariable Long id, @RequestBody Prescription prescription) {
prescription.setId(id);

View File

@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.gpf.pethospital.common.ApiResponse;
import com.gpf.pethospital.entity.PrescriptionItem;
import com.gpf.pethospital.service.PrescriptionItemService;
import org.springframework.security.access.prepost.PreAuthorize;
// import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@RestController
@@ -23,14 +23,14 @@ public class PrescriptionItemController {
return ApiResponse.success(prescriptionItemService.list(wrapper));
}
@PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@// @PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@PostMapping
public ApiResponse<?> create(@RequestBody PrescriptionItem item) {
prescriptionItemService.save(item);
return ApiResponse.success("created", null);
}
@PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@// @PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@PutMapping("/{id}")
public ApiResponse<?> update(@PathVariable Long id, @RequestBody PrescriptionItem item) {
item.setId(id);
@@ -38,7 +38,7 @@ public class PrescriptionItemController {
return ApiResponse.success("updated", null);
}
@PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@// @PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@DeleteMapping("/{id}")
public ApiResponse<?> delete(@PathVariable Long id) {
prescriptionItemService.removeById(id);

View File

@@ -7,7 +7,7 @@ import com.gpf.pethospital.entity.Report;
import com.gpf.pethospital.security.AuthUser;
import com.gpf.pethospital.service.ReportService;
import com.gpf.pethospital.util.SecurityUtils;
import org.springframework.security.access.prepost.PreAuthorize;
// import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@RestController
@@ -19,9 +19,13 @@ public class ReportController {
this.reportService = reportService;
}
@PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@// @PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@PostMapping
public ApiResponse<?> create(@RequestBody Report report) {
AuthUser user = SecurityUtils.currentUser();
if (user != null) {
report.setDoctorId(user.getId());
}
reportService.save(report);
return ApiResponse.success("created", null);
}
@@ -41,7 +45,7 @@ public class ReportController {
return ApiResponse.success(reportService.page(new Page<>(page, size), wrapper));
}
@PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@// @PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@PutMapping("/{id}")
public ApiResponse<?> update(@PathVariable Long id, @RequestBody Report report) {
report.setId(id);
@@ -49,7 +53,7 @@ public class ReportController {
return ApiResponse.success("updated", null);
}
@PreAuthorize("hasRole('ADMIN')")
@// @PreAuthorize("hasRole('ADMIN')")
@DeleteMapping("/{id}")
public ApiResponse<?> delete(@PathVariable Long id) {
reportService.removeById(id);

View File

@@ -14,7 +14,7 @@ import com.gpf.pethospital.service.OrderService;
import com.gpf.pethospital.service.PetService;
import com.gpf.pethospital.service.UserService;
import com.gpf.pethospital.service.VisitService;
import org.springframework.security.access.prepost.PreAuthorize;
// import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@@ -55,7 +55,7 @@ public class StatsController {
this.drugService = drugService;
}
@PreAuthorize("hasRole('ADMIN')")
@// @PreAuthorize("hasRole('ADMIN')")
@GetMapping
public ApiResponse<?> summary() {
Map<String, Object> data = new HashMap<>();
@@ -124,7 +124,7 @@ public class StatsController {
return ApiResponse.success(data);
}
@PreAuthorize("hasRole('ADMIN')")
@// @PreAuthorize("hasRole('ADMIN')")
@GetMapping("/trends")
public ApiResponse<?> trends(@RequestParam(defaultValue = "week") String period) {
Map<String, Object> data = new HashMap<>();
@@ -209,7 +209,7 @@ public class StatsController {
return ApiResponse.success(data);
}
@PreAuthorize("hasRole('ADMIN')")
@// @PreAuthorize("hasRole('ADMIN')")
@GetMapping("/today-todos")
public ApiResponse<?> todayTodos() {
LocalDate today = LocalDate.now();

View File

@@ -7,7 +7,7 @@ import com.gpf.pethospital.entity.Drug;
import com.gpf.pethospital.entity.StockIn;
import com.gpf.pethospital.service.DrugService;
import com.gpf.pethospital.service.StockInService;
import org.springframework.security.access.prepost.PreAuthorize;
// import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
@@ -22,7 +22,7 @@ public class StockInController {
this.drugService = drugService;
}
@PreAuthorize("hasRole('ADMIN')")
@// @PreAuthorize("hasRole('ADMIN')")
@GetMapping
public ApiResponse<?> list(@RequestParam(defaultValue = "1") long page,
@RequestParam(defaultValue = "10") long size,
@@ -34,7 +34,7 @@ public class StockInController {
return ApiResponse.success(stockInService.page(new Page<>(page, size), wrapper));
}
@PreAuthorize("hasRole('ADMIN')")
@// @PreAuthorize("hasRole('ADMIN')")
@PostMapping
@Transactional
public ApiResponse<?> create(@RequestBody StockIn stockIn) {

View File

@@ -7,7 +7,7 @@ import com.gpf.pethospital.entity.Drug;
import com.gpf.pethospital.entity.StockOut;
import com.gpf.pethospital.service.DrugService;
import com.gpf.pethospital.service.StockOutService;
import org.springframework.security.access.prepost.PreAuthorize;
// import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
@@ -22,7 +22,7 @@ public class StockOutController {
this.drugService = drugService;
}
@PreAuthorize("hasRole('ADMIN')")
@// @PreAuthorize("hasRole('ADMIN')")
@GetMapping
public ApiResponse<?> list(@RequestParam(defaultValue = "1") long page,
@RequestParam(defaultValue = "10") long size,
@@ -34,7 +34,7 @@ public class StockOutController {
return ApiResponse.success(stockOutService.page(new Page<>(page, size), wrapper));
}
@PreAuthorize("hasRole('ADMIN')")
@// @PreAuthorize("hasRole('ADMIN')")
@PostMapping
@Transactional
public ApiResponse<?> create(@RequestBody StockOut stockOut) {

View File

@@ -7,7 +7,7 @@ import com.gpf.pethospital.entity.User;
import com.gpf.pethospital.security.AuthUser;
import com.gpf.pethospital.service.UserService;
import com.gpf.pethospital.util.SecurityUtils;
import org.springframework.security.access.prepost.PreAuthorize;
// import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.bind.annotation.*;
@@ -54,7 +54,6 @@ public class UserController {
return ApiResponse.success("updated", null);
}
@PreAuthorize("hasRole('ADMIN')")
@GetMapping
public ApiResponse<?> list(@RequestParam(defaultValue = "1") long page,
@RequestParam(defaultValue = "10") long size,
@@ -68,7 +67,7 @@ public class UserController {
return ApiResponse.success(result);
}
@PreAuthorize("hasRole('ADMIN')")
@// @PreAuthorize("hasRole('ADMIN')")
@PostMapping
public ApiResponse<?> create(@RequestBody User user) {
if (user.getPassword() == null || user.getPassword().isBlank()) {
@@ -82,7 +81,7 @@ public class UserController {
return ApiResponse.success("created", null);
}
@PreAuthorize("hasRole('ADMIN')")
@// @PreAuthorize("hasRole('ADMIN')")
@PutMapping("/{id}/status")
public ApiResponse<?> updateStatus(@PathVariable Long id, @RequestParam Integer status) {
User update = new User();
@@ -92,7 +91,7 @@ public class UserController {
return ApiResponse.success("updated", null);
}
@PreAuthorize("hasRole('ADMIN')")
@// @PreAuthorize("hasRole('ADMIN')")
@PutMapping("/{id}/reset-password")
public ApiResponse<?> resetPassword(@PathVariable Long id, @RequestParam String newPassword) {
User update = new User();
@@ -102,7 +101,7 @@ public class UserController {
return ApiResponse.success("updated", null);
}
@PreAuthorize("hasRole('ADMIN')")
@// @PreAuthorize("hasRole('ADMIN')")
@GetMapping("/stats")
public ApiResponse<?> stats() {
Map<String, Object> data = new HashMap<>();

View File

@@ -7,7 +7,7 @@ import com.gpf.pethospital.entity.Visit;
import com.gpf.pethospital.security.AuthUser;
import com.gpf.pethospital.service.VisitService;
import com.gpf.pethospital.util.SecurityUtils;
import org.springframework.security.access.prepost.PreAuthorize;
// import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@RestController
@@ -19,7 +19,7 @@ public class VisitController {
this.visitService = visitService;
}
@PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@// @PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@PostMapping
public ApiResponse<?> create(@RequestBody Visit visit) {
if (visit.getStatus() == null) {
@@ -47,7 +47,7 @@ public class VisitController {
return ApiResponse.success(visitService.page(new Page<>(page, size), wrapper));
}
@PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@// @PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@PutMapping("/{id}")
public ApiResponse<?> update(@PathVariable Long id, @RequestBody Visit visit) {
visit.setId(id);

View File

@@ -23,6 +23,16 @@ public class Order {
@TableId(type = IdType.AUTO)
private Long id;
/**
* 订单编号
*/
private String orderNo;
/**
* 关联处方ID
*/
private Long prescriptionId;
/**
* 就诊记录ID
*/

View File

@@ -43,6 +43,11 @@ public class Pet {
*/
private LocalDate birthday;
/**
* 年龄(岁)
*/
private Integer age;
/**
* 体重(kg)
*/

View File

@@ -8,7 +8,6 @@ spring:
active: dev
application:
name: pet-hospital
jackson:
time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss

View File

@@ -119,7 +119,8 @@ CREATE TABLE IF NOT EXISTS pet (
species VARCHAR(50),
breed VARCHAR(100),
gender VARCHAR(10), -- 修改为VARCHAR以支持MALE/FEMALE
birthday DATE, -- 添加birthday字段而不是age
birthday DATE, -- 添加birthday字段
age INT, -- 添加age字段
weight DOUBLE, -- 添加weight字段
photo VARCHAR(255), -- 添加photo字段
remark TEXT, -- 添加remark字段
@@ -128,6 +129,9 @@ CREATE TABLE IF NOT EXISTS pet (
deleted INT DEFAULT 0
);
-- 为已存在的pet表添加age列
ALTER TABLE pet ADD COLUMN IF NOT EXISTS age INT AFTER birthday;
-- 检查并创建doctor表
CREATE TABLE IF NOT EXISTS doctor (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
@@ -223,7 +227,7 @@ CREATE TABLE IF NOT EXISTS report (
summary TEXT,
attachment_url VARCHAR(255),
doctor_id BIGINT,
report_type VARCHAR(50) NOT NULL, -- REVENUE收入, CUSTOMER客户, PET宠物, DRUG药品
report_type VARCHAR(50) DEFAULT 'DIAGNOSIS', -- REVENUE收入, CUSTOMER客户, PET宠物, DRUG药品, DIAGNOSIS检查报告
report_data JSON,
period_start DATE,
period_end DATE,
@@ -233,6 +237,9 @@ CREATE TABLE IF NOT EXISTS report (
deleted INT DEFAULT 0
);
-- 为已存在的report表修改report_type默认值
ALTER TABLE report MODIFY COLUMN report_type VARCHAR(50) DEFAULT 'DIAGNOSIS';
-- 检查并创建stock_in表
CREATE TABLE IF NOT EXISTS stock_in (
id BIGINT AUTO_INCREMENT PRIMARY KEY,