# encoding:utf-8 class ScaleResult < ActiveRecord::Base has_paper_trail self.table_name = "scale_result" belongs_to :wx_user belongs_to :scale_user, :foreign_key => :user_id def wx_user_contact return "-" if wx_user.blank? user = wx_user.user return "-" if user.blank? contact = user.tel contact = user.email if contact.blank? contact.blank? ? "-" : contact end # 从测量结果中获取时间戳 def measurement_time return nil if result.blank? begin data = JSON.parse(result) timestamp = data['timestamp'] return nil if timestamp.blank? Time.parse(timestamp) rescue => e nil end end # 格式化数值,保留2位小数 def fmt(val) return '-' if val.nil? val.is_a?(Numeric) ? format('%.2f', val) : val.to_s end # 格式化显示测量结果(列表简要版) def result_summary return '-' if result.blank? begin d = JSON.parse(result) "体重:#{fmt(d['weight_kg'])}kg BMI:#{fmt(d['bmi'])} 体脂:#{fmt(d['bodyFatPercent'])}%" rescue '-' end end # 格式化显示测量结果(详情完整版) def result_formatted return '-' if result.blank? begin d = JSON.parse(result) userdata = d['userdata'] || {} html = '
| 👤 用户信息 | |||
|---|---|---|---|
| 昵称 | #{userdata['nickName']} | " html += "性别 | #{userdata['sex'] == 0 ? '男' : '女'} |
| 年龄 | #{userdata['age']}岁 | " html += "身高 | #{userdata['height']}cm |
| 📊 基础测量 | |||
| 体重 | #{fmt(d['weight_kg'])} kg | " html += "BMI | #{fmt(d['bmi'])} |
| 身体评分 | #{fmt(d['bodyScore'])} 分 | " html += "身体年龄 | #{fmt(d['physicalAge'])} 岁 |
| 🏃 体成分分析 | |||
| 体脂率 | #{fmt(d['bodyFatPercent'])}% | " html += "肌肉率 | #{fmt(d['musclePercent'])}% |
| 内脏脂肪 | #{fmt(d['visceralFat'])} | " html += "皮下脂肪 | #{fmt(d['subcutaneousFatPercent'])}% |
| 水分率 | #{fmt(d['moisturePercent'])}% | " html += "蛋白质 | #{fmt(d['proteinPercent'])}% |
| 骨量 | #{fmt(d['boneMass'])} kg | " html += "基础代谢 | #{fmt(d['bmr'])} kcal |
| 骨骼肌率 | #{fmt(d['smPercent'])}% | " html += "体型 | #{d['bodyType']} |
| 🎯 目标建议 | |||
| 目标体重 | #{fmt(d['targetWeight'])} kg | " html += "体重控制 | #{fmt(d['weightControl'])} kg |
| 标准体重 | #{fmt(d['weightStandard'])} kg | " html += "标准BMI | #{fmt(d['bmiStandard'])} |
| 📱 设备信息 | |||
| MAC地址 | #{d['mac']} | " html += "测量时间 | #{d['timestamp']} |