This commit is contained in:
王子琦
2026-01-20 11:32:46 +08:00
parent bc4d194460
commit cc7d8f30ff
92 changed files with 5050 additions and 0 deletions

View File

@@ -0,0 +1,157 @@
package com.nursinghome.controller;
import cn.dev33.satoken.annotation.SaCheckRole;
import cn.dev33.satoken.stp.StpUtil;
import com.nursinghome.common.ApiException;
import com.nursinghome.common.ApiResponse;
import com.nursinghome.dto.FeedbackRequest;
import com.nursinghome.dto.PayRequest;
import com.nursinghome.entity.*;
import com.nursinghome.mapper.*;
import com.nursinghome.service.BillService;
import com.nursinghome.service.FamilyService;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequestMapping("/api/family")
@SaCheckRole("FAMILY")
public class FamilyController {
private final FamilyService familyService;
private final ElderMapper elderMapper;
private final CareRecordMapper careRecordMapper;
private final HealthRecordMapper healthRecordMapper;
private final BillService billService;
private final BillMapper billMapper;
private final NoticeMapper noticeMapper;
private final FeedbackMapper feedbackMapper;
public FamilyController(FamilyService familyService,
ElderMapper elderMapper,
CareRecordMapper careRecordMapper,
HealthRecordMapper healthRecordMapper,
BillService billService,
BillMapper billMapper,
NoticeMapper noticeMapper,
FeedbackMapper feedbackMapper) {
this.familyService = familyService;
this.elderMapper = elderMapper;
this.careRecordMapper = careRecordMapper;
this.healthRecordMapper = healthRecordMapper;
this.billService = billService;
this.billMapper = billMapper;
this.noticeMapper = noticeMapper;
this.feedbackMapper = feedbackMapper;
}
@GetMapping("/elders")
public ApiResponse<List<Elder>> listElders() {
Long familyId = Long.valueOf(StpUtil.getLoginId().toString());
List<FamilyElder> relations = familyService.listRelations(familyId);
List<Elder> elders = new ArrayList<>();
for (FamilyElder relation : relations) {
Elder elder = elderMapper.findById(relation.getElderId());
if (elder != null) {
elders.add(elder);
}
}
return ApiResponse.success(elders);
}
@GetMapping("/care-records")
public ApiResponse<List<CareRecord>> listCare(@RequestParam Long elderId) {
Long familyId = Long.valueOf(StpUtil.getLoginId().toString());
boolean allowed = false;
for (FamilyElder relation : familyService.listRelations(familyId)) {
if (relation.getElderId().equals(elderId)) {
allowed = true;
break;
}
}
if (!allowed) {
throw new ApiException("no access to this elder");
}
return ApiResponse.success(careRecordMapper.listByElderId(elderId));
}
@GetMapping("/health-records")
public ApiResponse<List<HealthRecord>> listHealth(@RequestParam Long elderId) {
Long familyId = Long.valueOf(StpUtil.getLoginId().toString());
boolean allowed = false;
for (FamilyElder relation : familyService.listRelations(familyId)) {
if (relation.getElderId().equals(elderId)) {
allowed = true;
break;
}
}
if (!allowed) {
throw new ApiException("no access to this elder");
}
return ApiResponse.success(healthRecordMapper.listByElderId(elderId));
}
@GetMapping("/bills")
public ApiResponse<List<Bill>> listBills(@RequestParam Long elderId) {
Long familyId = Long.valueOf(StpUtil.getLoginId().toString());
boolean allowed = false;
for (FamilyElder relation : familyService.listRelations(familyId)) {
if (relation.getElderId().equals(elderId)) {
allowed = true;
break;
}
}
if (!allowed) {
throw new ApiException("no access to this elder");
}
return ApiResponse.success(billService.listByElderId(elderId));
}
@PostMapping("/bills/{id}/pay")
public ApiResponse<Void> pay(@PathVariable Long id, @RequestBody PayRequest request) {
Long familyId = Long.valueOf(StpUtil.getLoginId().toString());
Bill bill = billMapper.findById(id);
if (bill == null) {
throw new ApiException("bill not found");
}
boolean allowed = false;
for (FamilyElder relation : familyService.listRelations(familyId)) {
if (relation.getElderId().equals(bill.getElderId())) {
allowed = true;
break;
}
}
if (!allowed) {
throw new ApiException("no access to this bill");
}
if ("PAID".equals(bill.getStatus())) {
throw new ApiException("bill already paid");
}
BigDecimal amount = bill.getTotal() == null ? BigDecimal.ZERO : bill.getTotal();
billService.payBill(id, familyId, request.getMethod(), amount);
return ApiResponse.success();
}
@PostMapping("/feedback")
public ApiResponse<Feedback> createFeedback(@RequestBody FeedbackRequest request) {
Feedback feedback = new Feedback();
feedback.setFamilyId(Long.valueOf(StpUtil.getLoginId().toString()));
feedback.setElderId(request.getElderId());
feedback.setType(request.getType());
feedback.setContent(request.getContent());
feedback.setRating(request.getRating());
feedback.setStatus("NEW");
feedback.setCreatedAt(LocalDateTime.now());
feedbackMapper.insert(feedback);
return ApiResponse.success(feedback);
}
@GetMapping("/notices")
public ApiResponse<List<Notice>> listNotices() {
Long familyId = Long.valueOf(StpUtil.getLoginId().toString());
return ApiResponse.success(noticeMapper.listByTarget("FAMILY", familyId));
}
}