import cn.iocoder.yudao.hospital.dal.dataobject.family_friends.HFamilyInfoIncremental; import cn.iocoder.yudao.hospital.dal.dataobject.user.FoodAllergyIntoleranceIncremental; import cn.iocoder.yudao.hospital.dal.dataobject.user.HBodyBasicInfo; import cn.iocoder.yudao.hospital.dal.dataobject.user.HDailyActivities; import cn.iocoder.yudao.hospital.service.family_friends.HFamilyInfoIncrementalService; import cn.iocoder.yudao.hospital.service.user.FoodAllergyIntoleranceIncrementalService; import cn.iocoder.yudao.hospital.service.user.HBodyBasicInfoService; import cn.iocoder.yudao.hospital.service.user.HDailyActivitiesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.lang.reflect.InvocationTargetException; @Service public class UserBasicInfoServiceImpl implements UserBasicInfoService { //活动兴趣和爱好 @Autowired private HDailyActivitiesService hDailyActivitiesService; //身高和体重 @Autowired private HBodyBasicInfoService bodyBasicInfoService; //家庭信息 @Autowired private HFamilyInfoIncrementalService hFamilyInfoIncrementalService; //食品过敏史 @Autowired private FoodAllergyIntoleranceIncrementalService foodAllergyService; /** * 新增用户的基本信息 * * @param userBasicInfo 用户基本信息 * @return */ @Override public int insert(UserBasicInfo userBasicInfo) { int result = 0; //子实体类 HBodyBasicInfo hBodyBasicInfo = new HBodyBasicInfo(); //主类 属性赋值到对应的 子实体类的属性 setSubEntityProperties(userBasicInfo, hBodyBasicInfo); if (hasNonCommonFields(hBodyBasicInfo)) {//判断子实体类,赋值是否成功 //子实体类,添加一条记录 result += bodyBasicInfoService.insertHBodyBasicInfo(hBodyBasicInfo); } HDailyActivities hDailyActivities = new HDailyActivities(); setSubEntityProperties(userBasicInfo, hDailyActivities); if (hasNonCommonFields(hDailyActivities)) { result += hDailyActivitiesService.insertHDailyActivities(hDailyActivities); } HFamilyInfoIncremental hFamilyInfoIncremental = new HFamilyInfoIncremental(); setSubEntityProperties(userBasicInfo, hFamilyInfoIncremental); if (hasNonCommonFields(hFamilyInfoIncremental)) { result += hFamilyInfoIncrementalService.insertHFamilyInfoIncremental(hFamilyInfoIncremental); } FoodAllergyIntoleranceIncremental allergyIntoleranceIncremental = new FoodAllergyIntoleranceIncremental(); setSubEntityProperties(userBasicInfo, allergyIntoleranceIncremental); if (hasNonCommonFields(allergyIntoleranceIncremental)) { String str = foodAllergyService.createFoodAllergyIntoleranceIncremental(allergyIntoleranceIncremental); result += (str == null || str.equals("")) ? 0 : 1; } return result; } /** * 查询用户的基本信息 * * @param userId * @return */ @Override public UserBasicInfo selectByUserId(Long userId) { UserBasicInfo userBasicInfo = new UserBasicInfo(); //查询子类信息 HBodyBasicInfo hBodyBasicInfo = bodyBasicInfoService.selectHBodyBasicInfoByUserId(userId); //将子类查询到的信息,赋值给 主类 userBasicInfo.setHBodyBasicInfo(hBodyBasicInfo); HDailyActivities hDailyActivities = hDailyActivitiesService.selectHDailyActivitiesByUserId(userId); userBasicInfo.setHDailyActivities(hDailyActivities); HFamilyInfoIncremental hFamilyInfoIncremental = hFamilyInfoIncrementalService.selectHFamilyInfoIncrementalByUserId(userId); userBasicInfo.setHFamilyInfoIncremental(hFamilyInfoIncremental); FoodAllergyIntoleranceIncremental foodAllergyIntoleranceIncremental = foodAllergyService.selectFoodAllergyByUserId(userId); userBasicInfo.setHFoodAllergyIntoleranceIncremental(foodAllergyIntoleranceIncremental); return userBasicInfo; } /** * 将主类的字段分发给子类 * * @param user 主类 * @param subEntity 子类 */ public void setSubEntityProperties(UserBasicInfo user, Object subEntity) { //获取子实体类的所有属性 Field[] fields = subEntity.getClass().getDeclaredFields(); for (Field field : fields) { //获取属性的名称 String fieldName = field.getName(); Object fieldValue = null; try { //获取fieldName对应在user类的get方法 Method method = user.getClass().getMethod("get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1)); fieldValue = method.invoke(user); } catch (NoSuchMethodException e) { //user类没有对应的get方法,可忽略 } catch (InvocationTargetException | IllegalAccessException e) { throw new RuntimeException(e); } if (fieldValue != null) { field.setAccessible(true); try { //给subEntity子类属性赋值 field.set(subEntity, fieldValue); } catch (IllegalAccessException e) { throw new RuntimeException(e); } } } } /** * 判断子类中,除了5个共通字段其他字段是否有值 * * @param subEntity 待检测的子类 * @return 任意一个字段有值,则返回true,否则返回false */ public Boolean hasNonCommonFields(Object subEntity) { Field[] fields = subEntity.getClass().getDeclaredFields(); for (Field field : fields) { // 排除共同字段 if ("id".equals(field.getName()) || "userId".equals(field.getName()) || "recordDate".equals(field.getName()) || "createTime".equals(field.getName()) || "updateTime".equals(field.getName())) { continue; } field.setAccessible(true); try { Object value = field.get(subEntity); //检查子类属性值,任意属性值不为空,即返回true if (value != null && !"".equals(value)) { return true; } } catch (IllegalAccessException e) { throw new RuntimeException(e); } } return false; } }
标签:反射,子类,userBasicInfo,field,subEntity,user,应用,import From: https://www.cnblogs.com/jlcd/p/18401719