false, 'need_mobile' => false, 'error' => '请先登录']; } $user = User::where('id', $userId) ->field('id,nickname,real_name,mobile,sex,age') ->find(); if (!$user) { return ['ok' => false, 'need_mobile' => false, 'error' => '用户不存在']; } $mobile = trim((string) ($user['mobile'] ?? '')); if ($mobile === '') { return ['ok' => false, 'need_mobile' => true, 'error' => '请先授权手机号']; } if (array_key_exists('sex', $options) && $options['sex'] !== null && $options['sex'] !== '') { $sex = (int) $options['sex']; if (in_array($sex, [1, 2], true) && (int) ($user['sex'] ?? 0) !== $sex) { User::update(['id' => $userId, 'sex' => $sex]); $user['sex'] = $sex; } } $cardList = DiagnosisLogic::getCardList($userId); if ($cardList === false) { return [ 'ok' => false, 'need_mobile' => false, 'error' => DiagnosisLogic::getError() ?: '获取就诊卡失败', ]; } if (!empty($cardList)) { $card = $cardList[0]; return [ 'ok' => true, 'need_mobile' => false, 'created' => false, 'diagnosis_id' => (int) $card['id'], 'patient_id' => (int) $card['patient_id'], 'patient_name' => (string) ($card['patient_name'] ?? ''), 'gender' => (int) ($card['gender'] ?? 0), 'age' => (int) ($card['age'] ?? 0), 'mobile' => $mobile, 'create_source' => (string) ($card['create_source'] ?? ''), ]; } $displayName = trim((string) (($user['real_name'] ?? '') ?: ($user['nickname'] ?? ''))); if ($displayName === '') { $displayName = '用户' . substr($mobile, -4); } $gender = self::mapUserSexToDiagnosisGender($user['sex'] ?? 1); $result = DiagnosisLogic::addCard([ 'user_id' => $userId, 'patient_name' => $displayName, 'phone' => $mobile, 'gender' => $gender, 'age' => max(0, (int) ($user['age'] ?? 0)), 'diagnosis_date' => time(), 'create_source' => self::CREATE_SOURCE_MNP_DAILY, 'remark' => '小程序手机号快捷建档(日常血糖)', ]); if ($result === false) { return [ 'ok' => false, 'need_mobile' => false, 'error' => DiagnosisLogic::getError() ?: '创建档案失败', ]; } return [ 'ok' => true, 'need_mobile' => false, 'created' => true, 'diagnosis_id' => (int) $result['id'], 'patient_id' => (int) $result['patient_id'], 'patient_name' => $displayName, 'gender' => $gender, 'age' => max(0, (int) ($user['age'] ?? 0)), 'mobile' => $mobile, 'create_source' => self::CREATE_SOURCE_MNP_DAILY, ]; } }