Bläddra i källkod

feat(fatloss): add controllers for weight/diet/exercise/goal

Sisyphus 3 dagar sedan
förälder
incheckning
6b19e6ccd3

+ 98 - 0
cfc-backend/src/main/java/com/etotem/cfc/controller/fatloss/FatDietController.java

@@ -0,0 +1,98 @@
+package com.etotem.cfc.controller.fatloss;
+
+import com.etotem.cfc.common.Result;
+import com.etotem.cfc.entity.FatDietRecord;
+import com.etotem.cfc.service.FatDietService;
+import com.etotem.cfc.util.ParamUtils;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Tag(name = "减脂-饮食记录")
+@RestController
+@RequestMapping("/api/fatloss/diet")
+public class FatDietController {
+
+    @Resource
+    private FatDietService fatDietService;
+
+    @Operation(summary = "获取饮食记录列表")
+    @PostMapping("/list")
+    public Result<List<FatDietRecord>> list(@RequestBody(required = false) Map<String, Object> params,
+                                            @RequestAttribute("userId") Long userId,
+                                            @RequestAttribute(value = "currentMemberId", required = false) Long currentMemberId) {
+        Long memberId = ParamUtils.getLong(params == null ? null : params.get("memberId"), currentMemberId);
+        if (memberId == null) return Result.error("memberId不能为空");
+        Date startDate = parseDateParam(params == null ? null : params.get("startDate"));
+        Date endDate = parseDateParam(params == null ? null : params.get("endDate"));
+        return Result.success(fatDietService.list(memberId, startDate, endDate));
+    }
+
+    @Operation(summary = "创建饮食记录")
+    @PostMapping("/create")
+    public Result<FatDietRecord> create(@RequestBody Map<String, Object> params,
+                                        @RequestAttribute("userId") Long userId,
+                                        @RequestAttribute(value = "currentMemberId", required = false) Long currentMemberId) {
+        FatDietRecord record = new FatDietRecord();
+        record.setMemberId(ParamUtils.getLong(params.get("memberId"), currentMemberId));
+        record.setMealType((String) params.get("mealType"));
+        record.setFoodName((String) params.get("foodName"));
+        record.setFoodWeight(toBigDecimal(params.get("foodWeight")));
+        record.setCalories(toInteger(params.get("calories")));
+        record.setProtein(toBigDecimal(params.get("protein")));
+        record.setFat(toBigDecimal(params.get("fat")));
+        record.setCarbs(toBigDecimal(params.get("carbs")));
+        record.setEatDate(parseDateParam(params.get("eatDate")));
+        record.setRemark((String) params.get("remark"));
+        if (record.getMemberId() == null) return Result.error("memberId不能为空");
+        if (record.getEatDate() == null) return Result.error("进餐日期不能为空");
+        if (record.getFoodName() == null || record.getFoodName().isEmpty()) return Result.error("食物名称不能为空");
+        return Result.success(fatDietService.create(record));
+    }
+
+    @Operation(summary = "删除饮食记录")
+    @PostMapping("/delete")
+    public Result<Boolean> delete(@RequestBody Map<String, Object> params) {
+        Long id = ParamUtils.getLong(params.get("id"));
+        if (id == null) return Result.error("id不能为空");
+        return Result.success(fatDietService.delete(id));
+    }
+
+    @Operation(summary = "获取当日总热量")
+    @PostMapping("/calories-summary")
+    public Result<Integer> caloriesSummary(@RequestBody(required = false) Map<String, Object> params,
+                                           @RequestAttribute("userId") Long userId,
+                                           @RequestAttribute(value = "currentMemberId", required = false) Long currentMemberId) {
+        Long memberId = ParamUtils.getLong(params == null ? null : params.get("memberId"), currentMemberId);
+        if (memberId == null) return Result.error("memberId不能为空");
+        Date date = parseDateParam(params == null ? null : params.get("date"));
+        if (date == null) date = new Date();
+        return Result.success(fatDietService.sumCalories(memberId, date));
+    }
+
+    private BigDecimal toBigDecimal(Object obj) {
+        if (obj == null) return null;
+        String s = obj.toString().trim();
+        if (s.isEmpty()) return null;
+        try { return new BigDecimal(s); } catch (NumberFormatException e) { return null; }
+    }
+
+    private Integer toInteger(Object obj) {
+        if (obj == null) return 0;
+        String s = obj.toString().trim();
+        if (s.isEmpty()) return 0;
+        try { return Integer.parseInt(s); } catch (NumberFormatException e) { return 0; }
+    }
+
+    private Date parseDateParam(Object obj) {
+        if (obj == null) return null;
+        try { return new SimpleDateFormat("yyyy-MM-dd").parse(obj.toString()); } catch (Exception e) { return null; }
+    }
+}

+ 83 - 0
cfc-backend/src/main/java/com/etotem/cfc/controller/fatloss/FatExerciseController.java

@@ -0,0 +1,83 @@
+package com.etotem.cfc.controller.fatloss;
+
+import com.etotem.cfc.common.Result;
+import com.etotem.cfc.entity.FatExerciseRecord;
+import com.etotem.cfc.service.FatExerciseService;
+import com.etotem.cfc.util.ParamUtils;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Tag(name = "减脂-运动记录")
+@RestController
+@RequestMapping("/api/fatloss/exercise")
+public class FatExerciseController {
+
+    @Resource
+    private FatExerciseService fatExerciseService;
+
+    @Operation(summary = "获取运动记录列表")
+    @PostMapping("/list")
+    public Result<List<FatExerciseRecord>> list(@RequestBody(required = false) Map<String, Object> params,
+                                                @RequestAttribute("userId") Long userId,
+                                                @RequestAttribute(value = "currentMemberId", required = false) Long currentMemberId) {
+        Long memberId = ParamUtils.getLong(params == null ? null : params.get("memberId"), currentMemberId);
+        if (memberId == null) return Result.error("memberId不能为空");
+        Date startDate = parseDateParam(params == null ? null : params.get("startDate"));
+        Date endDate = parseDateParam(params == null ? null : params.get("endDate"));
+        return Result.success(fatExerciseService.list(memberId, startDate, endDate));
+    }
+
+    @Operation(summary = "创建运动记录")
+    @PostMapping("/create")
+    public Result<FatExerciseRecord> create(@RequestBody Map<String, Object> params,
+                                            @RequestAttribute("userId") Long userId,
+                                            @RequestAttribute(value = "currentMemberId", required = false) Long currentMemberId) {
+        FatExerciseRecord record = new FatExerciseRecord();
+        record.setMemberId(ParamUtils.getLong(params.get("memberId"), currentMemberId));
+        record.setExerciseType((String) params.get("exerciseType"));
+        record.setDurationMin(toInteger(params.get("durationMin")));
+        record.setDistanceKm(toBigDecimal(params.get("distanceKm")));
+        record.setCaloriesBurned(toInteger(params.get("caloriesBurned")));
+        record.setExerciseDate(parseDateParam(params.get("exerciseDate")));
+        record.setRemark((String) params.get("remark"));
+        if (record.getMemberId() == null) return Result.error("memberId不能为空");
+        if (record.getExerciseDate() == null) return Result.error("运动日期不能为空");
+        if (record.getExerciseType() == null || record.getExerciseType().isEmpty()) return Result.error("运动类型不能为空");
+        return Result.success(fatExerciseService.create(record));
+    }
+
+    @Operation(summary = "删除运动记录")
+    @PostMapping("/delete")
+    public Result<Boolean> delete(@RequestBody Map<String, Object> params) {
+        Long id = ParamUtils.getLong(params.get("id"));
+        if (id == null) return Result.error("id不能为空");
+        return Result.success(fatExerciseService.delete(id));
+    }
+
+    private BigDecimal toBigDecimal(Object obj) {
+        if (obj == null) return null;
+        String s = obj.toString().trim();
+        if (s.isEmpty()) return null;
+        try { return new BigDecimal(s); } catch (NumberFormatException e) { return null; }
+    }
+
+    private Integer toInteger(Object obj) {
+        if (obj == null) return 0;
+        String s = obj.toString().trim();
+        if (s.isEmpty()) return 0;
+        try { return Integer.parseInt(s); } catch (NumberFormatException e) { return 0; }
+    }
+
+    private Date parseDateParam(Object obj) {
+        if (obj == null) return null;
+        try { return new SimpleDateFormat("yyyy-MM-dd").parse(obj.toString()); } catch (Exception e) { return null; }
+    }
+}

+ 93 - 0
cfc-backend/src/main/java/com/etotem/cfc/controller/fatloss/FatGoalController.java

@@ -0,0 +1,93 @@
+package com.etotem.cfc.controller.fatloss;
+
+import com.etotem.cfc.common.Result;
+import com.etotem.cfc.entity.FatGoal;
+import com.etotem.cfc.service.FatGoalService;
+import com.etotem.cfc.util.ParamUtils;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Map;
+
+@Tag(name = "减脂-目标管理")
+@RestController
+@RequestMapping("/api/fatloss/goal")
+public class FatGoalController {
+
+    @Resource
+    private FatGoalService fatGoalService;
+
+    @Operation(summary = "获取当前减脂目标")
+    @PostMapping("/active")
+    public Result<FatGoal> active(@RequestBody(required = false) Map<String, Object> params,
+                                  @RequestAttribute("userId") Long userId,
+                                  @RequestAttribute(value = "currentMemberId", required = false) Long currentMemberId) {
+        Long memberId = ParamUtils.getLong(params == null ? null : params.get("memberId"), currentMemberId);
+        if (memberId == null) return Result.error("memberId不能为空");
+        return Result.success(fatGoalService.getActive(memberId));
+    }
+
+    @Operation(summary = "创建减脂目标")
+    @PostMapping("/create")
+    public Result<FatGoal> create(@RequestBody Map<String, Object> params,
+                                  @RequestAttribute("userId") Long userId,
+                                  @RequestAttribute(value = "currentMemberId", required = false) Long currentMemberId) {
+        FatGoal goal = new FatGoal();
+        goal.setMemberId(ParamUtils.getLong(params.get("memberId"), currentMemberId));
+        goal.setStartWeight(toBigDecimal(params.get("startWeight")));
+        goal.setTargetWeight(toBigDecimal(params.get("targetWeight")));
+        goal.setTargetBodyFat(toBigDecimal(params.get("targetBodyFat")));
+        goal.setTargetDate(parseDateParam(params.get("targetDate")));
+        goal.setStartDate(parseDateParam(params.get("startDate")));
+        if (goal.getMemberId() == null) return Result.error("memberId不能为空");
+        if (goal.getTargetWeight() == null) return Result.error("目标体重不能为空");
+        if (goal.getStartWeight() == null) return Result.error("初始体重不能为空");
+        if (goal.getStartDate() == null) return Result.error("开始日期不能为空");
+        return Result.success(fatGoalService.create(goal));
+    }
+
+    @Operation(summary = "更新减脂目标")
+    @PostMapping("/update")
+    public Result<FatGoal> update(@RequestBody Map<String, Object> params) {
+        FatGoal goal = new FatGoal();
+        goal.setId(ParamUtils.getLong(params.get("id")));
+        if (goal.getId() == null) return Result.error("id不能为空");
+        goal.setTargetWeight(toBigDecimal(params.get("targetWeight")));
+        goal.setTargetBodyFat(toBigDecimal(params.get("targetBodyFat")));
+        goal.setTargetDate(parseDateParam(params.get("targetDate")));
+        return Result.success(fatGoalService.update(goal));
+    }
+
+    @Operation(summary = "完成减脂目标")
+    @PostMapping("/complete")
+    public Result<FatGoal> complete(@RequestBody Map<String, Object> params) {
+        Long id = ParamUtils.getLong(params.get("id"));
+        if (id == null) return Result.error("id不能为空");
+        return Result.success(fatGoalService.complete(id));
+    }
+
+    @Operation(summary = "放弃减脂目标")
+    @PostMapping("/abandon")
+    public Result<FatGoal> abandon(@RequestBody Map<String, Object> params) {
+        Long id = ParamUtils.getLong(params.get("id"));
+        if (id == null) return Result.error("id不能为空");
+        return Result.success(fatGoalService.abandon(id));
+    }
+
+    private BigDecimal toBigDecimal(Object obj) {
+        if (obj == null) return null;
+        String s = obj.toString().trim();
+        if (s.isEmpty()) return null;
+        try { return new BigDecimal(s); } catch (NumberFormatException e) { return null; }
+    }
+
+    private Date parseDateParam(Object obj) {
+        if (obj == null) return null;
+        try { return new SimpleDateFormat("yyyy-MM-dd").parse(obj.toString()); } catch (Exception e) { return null; }
+    }
+}

+ 87 - 0
cfc-backend/src/main/java/com/etotem/cfc/controller/fatloss/FatWeightController.java

@@ -0,0 +1,87 @@
+package com.etotem.cfc.controller.fatloss;
+
+import com.etotem.cfc.common.Result;
+import com.etotem.cfc.entity.FatWeightRecord;
+import com.etotem.cfc.service.FatWeightService;
+import com.etotem.cfc.util.ParamUtils;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Tag(name = "减脂-体重管理")
+@RestController
+@RequestMapping("/api/fatloss/weight")
+public class FatWeightController {
+
+    @Resource
+    private FatWeightService fatWeightService;
+
+    @Operation(summary = "获取体重记录列表")
+    @PostMapping("/list")
+    public Result<List<FatWeightRecord>> list(@RequestBody(required = false) Map<String, Object> params,
+                                              @RequestAttribute("userId") Long userId,
+                                              @RequestAttribute(value = "currentMemberId", required = false) Long currentMemberId) {
+        Long memberId = ParamUtils.getLong(params == null ? null : params.get("memberId"), currentMemberId);
+        if (memberId == null) return Result.error("memberId不能为空");
+        Date startDate = parseDateParam(params == null ? null : params.get("startDate"));
+        Date endDate = parseDateParam(params == null ? null : params.get("endDate"));
+        return Result.success(fatWeightService.list(memberId, startDate, endDate));
+    }
+
+    @Operation(summary = "创建体重记录")
+    @PostMapping("/create")
+    public Result<FatWeightRecord> create(@RequestBody Map<String, Object> params,
+                                          @RequestAttribute("userId") Long userId,
+                                          @RequestAttribute(value = "currentMemberId", required = false) Long currentMemberId) {
+        FatWeightRecord record = new FatWeightRecord();
+        record.setMemberId(ParamUtils.getLong(params.get("memberId"), currentMemberId));
+        record.setWeight(toBigDecimal(params.get("weight")));
+        record.setBodyFatPercent(toBigDecimal(params.get("bodyFatPercent")));
+        record.setWaistCircumference(toBigDecimal(params.get("waistCircumference")));
+        record.setMeasureDate(parseDateParam(params.get("measureDate")));
+        record.setRemark((String) params.get("remark"));
+        if (record.getMemberId() == null) return Result.error("memberId不能为空");
+        if (record.getWeight() == null) return Result.error("体重不能为空");
+        if (record.getMeasureDate() == null) return Result.error("测量日期不能为空");
+        return Result.success(fatWeightService.create(record));
+    }
+
+    @Operation(summary = "更新体重记录")
+    @PostMapping("/update")
+    public Result<FatWeightRecord> update(@RequestBody Map<String, Object> params) {
+        FatWeightRecord record = new FatWeightRecord();
+        record.setId(ParamUtils.getLong(params.get("id")));
+        if (record.getId() == null) return Result.error("id不能为空");
+        record.setWeight(toBigDecimal(params.get("weight")));
+        record.setBodyFatPercent(toBigDecimal(params.get("bodyFatPercent")));
+        record.setWaistCircumference(toBigDecimal(params.get("waistCircumference")));
+        return Result.success(fatWeightService.update(record));
+    }
+
+    @Operation(summary = "删除体重记录")
+    @PostMapping("/delete")
+    public Result<Boolean> delete(@RequestBody Map<String, Object> params) {
+        Long id = ParamUtils.getLong(params.get("id"));
+        if (id == null) return Result.error("id不能为空");
+        return Result.success(fatWeightService.delete(id));
+    }
+
+    private BigDecimal toBigDecimal(Object obj) {
+        if (obj == null) return null;
+        String s = obj.toString().trim();
+        if (s.isEmpty()) return null;
+        try { return new BigDecimal(s); } catch (NumberFormatException e) { return null; }
+    }
+
+    private Date parseDateParam(Object obj) {
+        if (obj == null) return null;
+        try { return new SimpleDateFormat("yyyy-MM-dd").parse(obj.toString()); } catch (Exception e) { return null; }
+    }
+}