DietPreferencesService.java 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package com.etotem.cfc.service;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.etotem.cfc.dto.DietPreferencesDTO;
  4. import com.etotem.cfc.entity.DietPreferences;
  5. import com.etotem.cfc.mapper.DietPreferencesMapper;
  6. import com.fasterxml.jackson.databind.ObjectMapper;
  7. import lombok.extern.slf4j.Slf4j;
  8. import org.springframework.stereotype.Service;
  9. import javax.annotation.Resource;
  10. import java.util.Date;
  11. import java.util.List;
  12. @Slf4j
  13. @Service
  14. public class DietPreferencesService {
  15. @Resource
  16. private DietPreferencesMapper dietPreferencesMapper;
  17. @Resource
  18. private ObjectMapper objectMapper;
  19. public DietPreferencesDTO getCurrentMemberPreferences(Long familyMemberId) {
  20. LambdaQueryWrapper<DietPreferences> wrapper = new LambdaQueryWrapper<>();
  21. wrapper.eq(DietPreferences::getFamilyMemberId, familyMemberId);
  22. DietPreferences entity = dietPreferencesMapper.selectOne(wrapper);
  23. if (entity == null) {
  24. return null;
  25. }
  26. return convertToDTO(entity);
  27. }
  28. public void savePreferences(Long familyMemberId, DietPreferencesDTO dto) {
  29. LambdaQueryWrapper<DietPreferences> wrapper = new LambdaQueryWrapper<>();
  30. wrapper.eq(DietPreferences::getFamilyMemberId, familyMemberId);
  31. DietPreferences entity = dietPreferencesMapper.selectOne(wrapper);
  32. if (entity == null) {
  33. entity = new DietPreferences();
  34. entity.setFamilyMemberId(familyMemberId);
  35. entity.setFilledAt(new Date());
  36. }
  37. entity.setAllergies(toJSON(dto.getAllergies()));
  38. entity.setAbsoluteAvoid(toJSON(dto.getAbsoluteAvoid()));
  39. entity.setReligiousDiet(dto.getReligiousDiet() != null ? dto.getReligiousDiet() : "none");
  40. entity.setSpiceLevel(dto.getSpiceLevel());
  41. entity.setFlavorPref(toJSON(dto.getFlavorPref()));
  42. entity.setCuisinePref(toJSON(dto.getCuisinePref()));
  43. entity.setCookingMethods(toJSON(dto.getCookingMethods()));
  44. entity.setHealthGoals(toJSON(dto.getHealthGoals()));
  45. entity.setGoalSource(dto.getGoalSource());
  46. entity.setGoalConfirmed(dto.getGoalConfirmed() != null ? dto.getGoalConfirmed() : 0);
  47. if (entity.getId() == null) {
  48. dietPreferencesMapper.insert(entity);
  49. } else {
  50. dietPreferencesMapper.updateById(entity);
  51. }
  52. }
  53. private String toJSON(Object obj) {
  54. try {
  55. return objectMapper.writeValueAsString(obj);
  56. } catch (Exception e) {
  57. log.warn("JSON 序列化失败: {}", e.getMessage());
  58. return null;
  59. }
  60. }
  61. private DietPreferencesDTO convertToDTO(DietPreferences entity) {
  62. DietPreferencesDTO dto = new DietPreferencesDTO();
  63. dto.setFamilyMemberId(entity.getFamilyMemberId());
  64. dto.setAllergies(fromJSON(entity.getAllergies()));
  65. dto.setAbsoluteAvoid(fromJSON(entity.getAbsoluteAvoid()));
  66. dto.setReligiousDiet(entity.getReligiousDiet());
  67. dto.setSpiceLevel(entity.getSpiceLevel());
  68. dto.setFlavorPref(fromJSON(entity.getFlavorPref()));
  69. dto.setCuisinePref(fromJSON(entity.getCuisinePref()));
  70. dto.setCookingMethods(fromJSON(entity.getCookingMethods()));
  71. dto.setHealthGoals(fromJSON(entity.getHealthGoals()));
  72. dto.setGoalSource(entity.getGoalSource());
  73. dto.setGoalConfirmed(entity.getGoalConfirmed());
  74. dto.setFilledAt(entity.getFilledAt() != null ? entity.getFilledAt().toString() : null);
  75. return dto;
  76. }
  77. @SuppressWarnings("unchecked")
  78. private <T> T fromJSON(String json) {
  79. if (json == null) return null;
  80. try {
  81. return (T) objectMapper.readValue(json, List.class);
  82. } catch (Exception e) {
  83. log.warn("JSON 反序列化失败: {}", e.getMessage());
  84. return null;
  85. }
  86. }
  87. }