| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- package com.etotem.cfc.service;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.etotem.cfc.dto.DietPreferencesDTO;
- import com.etotem.cfc.entity.DietPreferences;
- import com.etotem.cfc.mapper.DietPreferencesMapper;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.stereotype.Service;
- import javax.annotation.Resource;
- import java.util.Date;
- import java.util.List;
- @Slf4j
- @Service
- public class DietPreferencesService {
- @Resource
- private DietPreferencesMapper dietPreferencesMapper;
- @Resource
- private ObjectMapper objectMapper;
- public DietPreferencesDTO getCurrentMemberPreferences(Long familyMemberId) {
- LambdaQueryWrapper<DietPreferences> wrapper = new LambdaQueryWrapper<>();
- wrapper.eq(DietPreferences::getFamilyMemberId, familyMemberId);
- DietPreferences entity = dietPreferencesMapper.selectOne(wrapper);
-
- if (entity == null) {
- return null;
- }
-
- return convertToDTO(entity);
- }
- public void savePreferences(Long familyMemberId, DietPreferencesDTO dto) {
- LambdaQueryWrapper<DietPreferences> wrapper = new LambdaQueryWrapper<>();
- wrapper.eq(DietPreferences::getFamilyMemberId, familyMemberId);
- DietPreferences entity = dietPreferencesMapper.selectOne(wrapper);
-
- if (entity == null) {
- entity = new DietPreferences();
- entity.setFamilyMemberId(familyMemberId);
- entity.setFilledAt(new Date());
- }
-
- entity.setAllergies(toJSON(dto.getAllergies()));
- entity.setAbsoluteAvoid(toJSON(dto.getAbsoluteAvoid()));
- entity.setReligiousDiet(dto.getReligiousDiet() != null ? dto.getReligiousDiet() : "none");
- entity.setSpiceLevel(dto.getSpiceLevel());
- entity.setFlavorPref(toJSON(dto.getFlavorPref()));
- entity.setCuisinePref(toJSON(dto.getCuisinePref()));
- entity.setCookingMethods(toJSON(dto.getCookingMethods()));
- entity.setHealthGoals(toJSON(dto.getHealthGoals()));
- entity.setGoalSource(dto.getGoalSource());
- entity.setGoalConfirmed(dto.getGoalConfirmed() != null ? dto.getGoalConfirmed() : 0);
-
- if (entity.getId() == null) {
- dietPreferencesMapper.insert(entity);
- } else {
- dietPreferencesMapper.updateById(entity);
- }
- }
- private String toJSON(Object obj) {
- try {
- return objectMapper.writeValueAsString(obj);
- } catch (Exception e) {
- log.warn("JSON 序列化失败: {}", e.getMessage());
- return null;
- }
- }
- private DietPreferencesDTO convertToDTO(DietPreferences entity) {
- DietPreferencesDTO dto = new DietPreferencesDTO();
- dto.setFamilyMemberId(entity.getFamilyMemberId());
- dto.setAllergies(fromJSON(entity.getAllergies()));
- dto.setAbsoluteAvoid(fromJSON(entity.getAbsoluteAvoid()));
- dto.setReligiousDiet(entity.getReligiousDiet());
- dto.setSpiceLevel(entity.getSpiceLevel());
- dto.setFlavorPref(fromJSON(entity.getFlavorPref()));
- dto.setCuisinePref(fromJSON(entity.getCuisinePref()));
- dto.setCookingMethods(fromJSON(entity.getCookingMethods()));
- dto.setHealthGoals(fromJSON(entity.getHealthGoals()));
- dto.setGoalSource(entity.getGoalSource());
- dto.setGoalConfirmed(entity.getGoalConfirmed());
- dto.setFilledAt(entity.getFilledAt() != null ? entity.getFilledAt().toString() : null);
- return dto;
- }
- @SuppressWarnings("unchecked")
- private <T> T fromJSON(String json) {
- if (json == null) return null;
- try {
- return (T) objectMapper.readValue(json, List.class);
- } catch (Exception e) {
- log.warn("JSON 反序列化失败: {}", e.getMessage());
- return null;
- }
- }
- }
|