周睿 2 éve
szülő
commit
30462d5b4b

+ 0 - 14
lib/generated/base.pb.dart

@@ -228,7 +228,6 @@ class HeartRate extends $pb.GeneratedMessage {
   factory HeartRate({
     $fixnum.Int64? timeStampMs,
     $core.int? hr,
-    $core.int? hrPer,
   }) {
     final $result = create();
     if (timeStampMs != null) {
@@ -237,9 +236,6 @@ class HeartRate extends $pb.GeneratedMessage {
     if (hr != null) {
       $result.hr = hr;
     }
-    if (hrPer != null) {
-      $result.hrPer = hrPer;
-    }
     return $result;
   }
   HeartRate._() : super();
@@ -249,7 +245,6 @@ class HeartRate extends $pb.GeneratedMessage {
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'HeartRate', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
     ..aInt64(1, _omitFieldNames ? '' : 'timeStampMs', protoName: 'timeStampMs')
     ..a<$core.int>(2, _omitFieldNames ? '' : 'hr', $pb.PbFieldType.O3)
-    ..a<$core.int>(3, _omitFieldNames ? '' : 'hrPer', $pb.PbFieldType.O3, protoName: 'hrPer')
     ..hasRequiredFields = false
   ;
 
@@ -291,15 +286,6 @@ class HeartRate extends $pb.GeneratedMessage {
   $core.bool hasHr() => $_has(1);
   @$pb.TagNumber(2)
   void clearHr() => clearField(2);
-
-  @$pb.TagNumber(3)
-  $core.int get hrPer => $_getIZ(2);
-  @$pb.TagNumber(3)
-  set hrPer($core.int v) { $_setSignedInt32(2, v); }
-  @$pb.TagNumber(3)
-  $core.bool hasHrPer() => $_has(2);
-  @$pb.TagNumber(3)
-  void clearHrPer() => clearField(3);
 }
 
 class SignInReply extends $pb.GeneratedMessage {

+ 1 - 2
lib/generated/base.pbjson.dart

@@ -284,14 +284,13 @@ const HeartRate$json = {
   '2': [
     {'1': 'timeStampMs', '3': 1, '4': 1, '5': 3, '10': 'timeStampMs'},
     {'1': 'hr', '3': 2, '4': 1, '5': 5, '10': 'hr'},
-    {'1': 'hrPer', '3': 3, '4': 1, '5': 5, '10': 'hrPer'},
   ],
 };
 
 /// Descriptor for `HeartRate`. Decode as a `google.protobuf.DescriptorProto`.
 final $typed_data.Uint8List heartRateDescriptor = $convert.base64Decode(
     'CglIZWFydFJhdGUSIAoLdGltZVN0YW1wTXMYASABKANSC3RpbWVTdGFtcE1zEg4KAmhyGAIgAS'
-    'gFUgJochIUCgVoclBlchgDIAEoBVIFaHJQZXI=');
+    'gFUgJocg==');
 
 @$core.Deprecated('Use signInReplyDescriptor instead')
 const SignInReply$json = {

+ 726 - 6
lib/generated/to_app_api.pb.dart

@@ -19,6 +19,566 @@ import 'base.pbenum.dart' as $1;
 import 'google/protobuf/duration.pb.dart' as $3;
 import 'google/protobuf/timestamp.pb.dart' as $2;
 
+class ToGameDetailReply extends $pb.GeneratedMessage {
+  factory ToGameDetailReply({
+    $core.int? gameId,
+    $core.bool? isComplete,
+    $2.Timestamp? startAt,
+    $core.Iterable<ToControlPoint>? checkedSortedList,
+    $3.Duration? duration,
+    $2.Timestamp? stopAt,
+    $core.bool? isSuccess,
+    $core.int? sysPoint,
+    $core.int? totalPointNum,
+    $core.String? actName,
+    $core.int? distance,
+    $core.int? pace,
+    $core.int? avgHr,
+    $core.int? calorie,
+    $core.int? ck,
+    $core.double? ei,
+    $core.int? stepNum,
+    $core.Iterable<$1.GameGpsInfo>? gameGpsInfo,
+    $core.Iterable<$1.HeartRate>? gameHrInfos,
+    $1.GameHistorySource? source,
+    $core.int? actId,
+  }) {
+    final $result = create();
+    if (gameId != null) {
+      $result.gameId = gameId;
+    }
+    if (isComplete != null) {
+      $result.isComplete = isComplete;
+    }
+    if (startAt != null) {
+      $result.startAt = startAt;
+    }
+    if (checkedSortedList != null) {
+      $result.checkedSortedList.addAll(checkedSortedList);
+    }
+    if (duration != null) {
+      $result.duration = duration;
+    }
+    if (stopAt != null) {
+      $result.stopAt = stopAt;
+    }
+    if (isSuccess != null) {
+      $result.isSuccess = isSuccess;
+    }
+    if (sysPoint != null) {
+      $result.sysPoint = sysPoint;
+    }
+    if (totalPointNum != null) {
+      $result.totalPointNum = totalPointNum;
+    }
+    if (actName != null) {
+      $result.actName = actName;
+    }
+    if (distance != null) {
+      $result.distance = distance;
+    }
+    if (pace != null) {
+      $result.pace = pace;
+    }
+    if (avgHr != null) {
+      $result.avgHr = avgHr;
+    }
+    if (calorie != null) {
+      $result.calorie = calorie;
+    }
+    if (ck != null) {
+      $result.ck = ck;
+    }
+    if (ei != null) {
+      $result.ei = ei;
+    }
+    if (stepNum != null) {
+      $result.stepNum = stepNum;
+    }
+    if (gameGpsInfo != null) {
+      $result.gameGpsInfo.addAll(gameGpsInfo);
+    }
+    if (gameHrInfos != null) {
+      $result.gameHrInfos.addAll(gameHrInfos);
+    }
+    if (source != null) {
+      $result.source = source;
+    }
+    if (actId != null) {
+      $result.actId = actId;
+    }
+    return $result;
+  }
+  ToGameDetailReply._() : super();
+  factory ToGameDetailReply.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToGameDetailReply.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToGameDetailReply', package: const $pb.PackageName(_omitMessageNames ? '' : 'toApp.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'gameId', $pb.PbFieldType.O3)
+    ..aOB(2, _omitFieldNames ? '' : 'isComplete', protoName: 'isComplete')
+    ..aOM<$2.Timestamp>(3, _omitFieldNames ? '' : 'startAt', subBuilder: $2.Timestamp.create)
+    ..pc<ToControlPoint>(4, _omitFieldNames ? '' : 'checkedSortedList', $pb.PbFieldType.PM, subBuilder: ToControlPoint.create)
+    ..aOM<$3.Duration>(5, _omitFieldNames ? '' : 'duration', subBuilder: $3.Duration.create)
+    ..aOM<$2.Timestamp>(6, _omitFieldNames ? '' : 'stopAt', subBuilder: $2.Timestamp.create)
+    ..aOB(8, _omitFieldNames ? '' : 'isSuccess', protoName: 'isSuccess')
+    ..a<$core.int>(9, _omitFieldNames ? '' : 'sysPoint', $pb.PbFieldType.O3, protoName: 'sysPoint')
+    ..a<$core.int>(10, _omitFieldNames ? '' : 'totalPointNum', $pb.PbFieldType.O3, protoName: 'totalPointNum')
+    ..aOS(13, _omitFieldNames ? '' : 'actName', protoName: 'actName')
+    ..a<$core.int>(14, _omitFieldNames ? '' : 'distance', $pb.PbFieldType.O3)
+    ..a<$core.int>(15, _omitFieldNames ? '' : 'pace', $pb.PbFieldType.O3)
+    ..a<$core.int>(16, _omitFieldNames ? '' : 'avgHr', $pb.PbFieldType.O3, protoName: 'avgHr')
+    ..a<$core.int>(17, _omitFieldNames ? '' : 'Calorie', $pb.PbFieldType.O3, protoName: 'Calorie')
+    ..a<$core.int>(18, _omitFieldNames ? '' : 'Ck', $pb.PbFieldType.O3, protoName: 'Ck')
+    ..a<$core.double>(19, _omitFieldNames ? '' : 'Ei', $pb.PbFieldType.OF, protoName: 'Ei')
+    ..a<$core.int>(20, _omitFieldNames ? '' : 'stepNum', $pb.PbFieldType.O3, protoName: 'stepNum')
+    ..pc<$1.GameGpsInfo>(21, _omitFieldNames ? '' : 'gameGpsInfo', $pb.PbFieldType.PM, protoName: 'gameGpsInfo', subBuilder: $1.GameGpsInfo.create)
+    ..pc<$1.HeartRate>(24, _omitFieldNames ? '' : 'gameHrInfos', $pb.PbFieldType.PM, protoName: 'gameHrInfos', subBuilder: $1.HeartRate.create)
+    ..e<$1.GameHistorySource>(25, _omitFieldNames ? '' : 'source', $pb.PbFieldType.OE, defaultOrMaker: $1.GameHistorySource.GameHistorySourcAll, valueOf: $1.GameHistorySource.valueOf, enumValues: $1.GameHistorySource.values)
+    ..a<$core.int>(26, _omitFieldNames ? '' : 'actId', $pb.PbFieldType.O3, protoName: 'actId')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToGameDetailReply clone() => ToGameDetailReply()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToGameDetailReply copyWith(void Function(ToGameDetailReply) updates) => super.copyWith((message) => updates(message as ToGameDetailReply)) as ToGameDetailReply;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToGameDetailReply create() => ToGameDetailReply._();
+  ToGameDetailReply createEmptyInstance() => create();
+  static $pb.PbList<ToGameDetailReply> createRepeated() => $pb.PbList<ToGameDetailReply>();
+  @$core.pragma('dart2js:noInline')
+  static ToGameDetailReply getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToGameDetailReply>(create);
+  static ToGameDetailReply? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get gameId => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set gameId($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasGameId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearGameId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.bool get isComplete => $_getBF(1);
+  @$pb.TagNumber(2)
+  set isComplete($core.bool v) { $_setBool(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasIsComplete() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearIsComplete() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $2.Timestamp get startAt => $_getN(2);
+  @$pb.TagNumber(3)
+  set startAt($2.Timestamp v) { setField(3, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasStartAt() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearStartAt() => clearField(3);
+  @$pb.TagNumber(3)
+  $2.Timestamp ensureStartAt() => $_ensure(2);
+
+  @$pb.TagNumber(4)
+  $core.List<ToControlPoint> get checkedSortedList => $_getList(3);
+
+  @$pb.TagNumber(5)
+  $3.Duration get duration => $_getN(4);
+  @$pb.TagNumber(5)
+  set duration($3.Duration v) { setField(5, v); }
+  @$pb.TagNumber(5)
+  $core.bool hasDuration() => $_has(4);
+  @$pb.TagNumber(5)
+  void clearDuration() => clearField(5);
+  @$pb.TagNumber(5)
+  $3.Duration ensureDuration() => $_ensure(4);
+
+  @$pb.TagNumber(6)
+  $2.Timestamp get stopAt => $_getN(5);
+  @$pb.TagNumber(6)
+  set stopAt($2.Timestamp v) { setField(6, v); }
+  @$pb.TagNumber(6)
+  $core.bool hasStopAt() => $_has(5);
+  @$pb.TagNumber(6)
+  void clearStopAt() => clearField(6);
+  @$pb.TagNumber(6)
+  $2.Timestamp ensureStopAt() => $_ensure(5);
+
+  @$pb.TagNumber(8)
+  $core.bool get isSuccess => $_getBF(6);
+  @$pb.TagNumber(8)
+  set isSuccess($core.bool v) { $_setBool(6, v); }
+  @$pb.TagNumber(8)
+  $core.bool hasIsSuccess() => $_has(6);
+  @$pb.TagNumber(8)
+  void clearIsSuccess() => clearField(8);
+
+  @$pb.TagNumber(9)
+  $core.int get sysPoint => $_getIZ(7);
+  @$pb.TagNumber(9)
+  set sysPoint($core.int v) { $_setSignedInt32(7, v); }
+  @$pb.TagNumber(9)
+  $core.bool hasSysPoint() => $_has(7);
+  @$pb.TagNumber(9)
+  void clearSysPoint() => clearField(9);
+
+  @$pb.TagNumber(10)
+  $core.int get totalPointNum => $_getIZ(8);
+  @$pb.TagNumber(10)
+  set totalPointNum($core.int v) { $_setSignedInt32(8, v); }
+  @$pb.TagNumber(10)
+  $core.bool hasTotalPointNum() => $_has(8);
+  @$pb.TagNumber(10)
+  void clearTotalPointNum() => clearField(10);
+
+  @$pb.TagNumber(13)
+  $core.String get actName => $_getSZ(9);
+  @$pb.TagNumber(13)
+  set actName($core.String v) { $_setString(9, v); }
+  @$pb.TagNumber(13)
+  $core.bool hasActName() => $_has(9);
+  @$pb.TagNumber(13)
+  void clearActName() => clearField(13);
+
+  @$pb.TagNumber(14)
+  $core.int get distance => $_getIZ(10);
+  @$pb.TagNumber(14)
+  set distance($core.int v) { $_setSignedInt32(10, v); }
+  @$pb.TagNumber(14)
+  $core.bool hasDistance() => $_has(10);
+  @$pb.TagNumber(14)
+  void clearDistance() => clearField(14);
+
+  @$pb.TagNumber(15)
+  $core.int get pace => $_getIZ(11);
+  @$pb.TagNumber(15)
+  set pace($core.int v) { $_setSignedInt32(11, v); }
+  @$pb.TagNumber(15)
+  $core.bool hasPace() => $_has(11);
+  @$pb.TagNumber(15)
+  void clearPace() => clearField(15);
+
+  @$pb.TagNumber(16)
+  $core.int get avgHr => $_getIZ(12);
+  @$pb.TagNumber(16)
+  set avgHr($core.int v) { $_setSignedInt32(12, v); }
+  @$pb.TagNumber(16)
+  $core.bool hasAvgHr() => $_has(12);
+  @$pb.TagNumber(16)
+  void clearAvgHr() => clearField(16);
+
+  @$pb.TagNumber(17)
+  $core.int get calorie => $_getIZ(13);
+  @$pb.TagNumber(17)
+  set calorie($core.int v) { $_setSignedInt32(13, v); }
+  @$pb.TagNumber(17)
+  $core.bool hasCalorie() => $_has(13);
+  @$pb.TagNumber(17)
+  void clearCalorie() => clearField(17);
+
+  @$pb.TagNumber(18)
+  $core.int get ck => $_getIZ(14);
+  @$pb.TagNumber(18)
+  set ck($core.int v) { $_setSignedInt32(14, v); }
+  @$pb.TagNumber(18)
+  $core.bool hasCk() => $_has(14);
+  @$pb.TagNumber(18)
+  void clearCk() => clearField(18);
+
+  @$pb.TagNumber(19)
+  $core.double get ei => $_getN(15);
+  @$pb.TagNumber(19)
+  set ei($core.double v) { $_setFloat(15, v); }
+  @$pb.TagNumber(19)
+  $core.bool hasEi() => $_has(15);
+  @$pb.TagNumber(19)
+  void clearEi() => clearField(19);
+
+  @$pb.TagNumber(20)
+  $core.int get stepNum => $_getIZ(16);
+  @$pb.TagNumber(20)
+  set stepNum($core.int v) { $_setSignedInt32(16, v); }
+  @$pb.TagNumber(20)
+  $core.bool hasStepNum() => $_has(16);
+  @$pb.TagNumber(20)
+  void clearStepNum() => clearField(20);
+
+  @$pb.TagNumber(21)
+  $core.List<$1.GameGpsInfo> get gameGpsInfo => $_getList(17);
+
+  /// base.v1.NetImage map_zip = 22; //压缩包地图
+  /// AnswerHistory  answerHistory= 23;//脑力值列表
+  @$pb.TagNumber(24)
+  $core.List<$1.HeartRate> get gameHrInfos => $_getList(18);
+
+  @$pb.TagNumber(25)
+  $1.GameHistorySource get source => $_getN(19);
+  @$pb.TagNumber(25)
+  set source($1.GameHistorySource v) { setField(25, v); }
+  @$pb.TagNumber(25)
+  $core.bool hasSource() => $_has(19);
+  @$pb.TagNumber(25)
+  void clearSource() => clearField(25);
+
+  @$pb.TagNumber(26)
+  $core.int get actId => $_getIZ(20);
+  @$pb.TagNumber(26)
+  set actId($core.int v) { $_setSignedInt32(20, v); }
+  @$pb.TagNumber(26)
+  $core.bool hasActId() => $_has(20);
+  @$pb.TagNumber(26)
+  void clearActId() => clearField(26);
+}
+
+class ToHisUserListQueryReply extends $pb.GeneratedMessage {
+  factory ToHisUserListQueryReply({
+    $core.Iterable<ToHisUserBasic>? list,
+  }) {
+    final $result = create();
+    if (list != null) {
+      $result.list.addAll(list);
+    }
+    return $result;
+  }
+  ToHisUserListQueryReply._() : super();
+  factory ToHisUserListQueryReply.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToHisUserListQueryReply.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToHisUserListQueryReply', package: const $pb.PackageName(_omitMessageNames ? '' : 'toApp.v1'), createEmptyInstance: create)
+    ..pc<ToHisUserBasic>(1, _omitFieldNames ? '' : 'list', $pb.PbFieldType.PM, subBuilder: ToHisUserBasic.create)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToHisUserListQueryReply clone() => ToHisUserListQueryReply()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToHisUserListQueryReply copyWith(void Function(ToHisUserListQueryReply) updates) => super.copyWith((message) => updates(message as ToHisUserListQueryReply)) as ToHisUserListQueryReply;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToHisUserListQueryReply create() => ToHisUserListQueryReply._();
+  ToHisUserListQueryReply createEmptyInstance() => create();
+  static $pb.PbList<ToHisUserListQueryReply> createRepeated() => $pb.PbList<ToHisUserListQueryReply>();
+  @$core.pragma('dart2js:noInline')
+  static ToHisUserListQueryReply getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToHisUserListQueryReply>(create);
+  static ToHisUserListQueryReply? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.List<ToHisUserBasic> get list => $_getList(0);
+}
+
+class ToHisUserBasic extends $pb.GeneratedMessage {
+  factory ToHisUserBasic({
+    $core.int? oId,
+    $core.String? oName,
+    $core.Iterable<ToHisUserInfo>? list,
+  }) {
+    final $result = create();
+    if (oId != null) {
+      $result.oId = oId;
+    }
+    if (oName != null) {
+      $result.oName = oName;
+    }
+    if (list != null) {
+      $result.list.addAll(list);
+    }
+    return $result;
+  }
+  ToHisUserBasic._() : super();
+  factory ToHisUserBasic.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToHisUserBasic.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToHisUserBasic', package: const $pb.PackageName(_omitMessageNames ? '' : 'toApp.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'OId', $pb.PbFieldType.O3, protoName: 'OId')
+    ..aOS(2, _omitFieldNames ? '' : 'OName', protoName: 'OName')
+    ..pc<ToHisUserInfo>(3, _omitFieldNames ? '' : 'list', $pb.PbFieldType.PM, subBuilder: ToHisUserInfo.create)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToHisUserBasic clone() => ToHisUserBasic()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToHisUserBasic copyWith(void Function(ToHisUserBasic) updates) => super.copyWith((message) => updates(message as ToHisUserBasic)) as ToHisUserBasic;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToHisUserBasic create() => ToHisUserBasic._();
+  ToHisUserBasic createEmptyInstance() => create();
+  static $pb.PbList<ToHisUserBasic> createRepeated() => $pb.PbList<ToHisUserBasic>();
+  @$core.pragma('dart2js:noInline')
+  static ToHisUserBasic getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToHisUserBasic>(create);
+  static ToHisUserBasic? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get oId => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set oId($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasOId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearOId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get oName => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set oName($core.String v) { $_setString(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasOName() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearOName() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.List<ToHisUserInfo> get list => $_getList(2);
+}
+
+class ToHisUserInfo extends $pb.GeneratedMessage {
+  factory ToHisUserInfo({
+    $core.int? gameId,
+    $core.String? courseName,
+    $core.String? actName,
+    $core.bool? isComplete,
+    $2.Timestamp? startAt,
+    $3.Duration? duration,
+  }) {
+    final $result = create();
+    if (gameId != null) {
+      $result.gameId = gameId;
+    }
+    if (courseName != null) {
+      $result.courseName = courseName;
+    }
+    if (actName != null) {
+      $result.actName = actName;
+    }
+    if (isComplete != null) {
+      $result.isComplete = isComplete;
+    }
+    if (startAt != null) {
+      $result.startAt = startAt;
+    }
+    if (duration != null) {
+      $result.duration = duration;
+    }
+    return $result;
+  }
+  ToHisUserInfo._() : super();
+  factory ToHisUserInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToHisUserInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToHisUserInfo', package: const $pb.PackageName(_omitMessageNames ? '' : 'toApp.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'GameId', $pb.PbFieldType.O3, protoName: 'GameId')
+    ..aOS(2, _omitFieldNames ? '' : 'CourseName', protoName: 'CourseName')
+    ..aOS(3, _omitFieldNames ? '' : 'ActName', protoName: 'ActName')
+    ..aOB(4, _omitFieldNames ? '' : 'isComplete', protoName: 'isComplete')
+    ..aOM<$2.Timestamp>(5, _omitFieldNames ? '' : 'startAt', subBuilder: $2.Timestamp.create)
+    ..aOM<$3.Duration>(6, _omitFieldNames ? '' : 'duration', subBuilder: $3.Duration.create)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToHisUserInfo clone() => ToHisUserInfo()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToHisUserInfo copyWith(void Function(ToHisUserInfo) updates) => super.copyWith((message) => updates(message as ToHisUserInfo)) as ToHisUserInfo;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToHisUserInfo create() => ToHisUserInfo._();
+  ToHisUserInfo createEmptyInstance() => create();
+  static $pb.PbList<ToHisUserInfo> createRepeated() => $pb.PbList<ToHisUserInfo>();
+  @$core.pragma('dart2js:noInline')
+  static ToHisUserInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToHisUserInfo>(create);
+  static ToHisUserInfo? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get gameId => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set gameId($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasGameId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearGameId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get courseName => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set courseName($core.String v) { $_setString(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasCourseName() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearCourseName() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.String get actName => $_getSZ(2);
+  @$pb.TagNumber(3)
+  set actName($core.String v) { $_setString(2, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasActName() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearActName() => clearField(3);
+
+  @$pb.TagNumber(4)
+  $core.bool get isComplete => $_getBF(3);
+  @$pb.TagNumber(4)
+  set isComplete($core.bool v) { $_setBool(3, v); }
+  @$pb.TagNumber(4)
+  $core.bool hasIsComplete() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearIsComplete() => clearField(4);
+
+  @$pb.TagNumber(5)
+  $2.Timestamp get startAt => $_getN(4);
+  @$pb.TagNumber(5)
+  set startAt($2.Timestamp v) { setField(5, v); }
+  @$pb.TagNumber(5)
+  $core.bool hasStartAt() => $_has(4);
+  @$pb.TagNumber(5)
+  void clearStartAt() => clearField(5);
+  @$pb.TagNumber(5)
+  $2.Timestamp ensureStartAt() => $_ensure(4);
+
+  @$pb.TagNumber(6)
+  $3.Duration get duration => $_getN(5);
+  @$pb.TagNumber(6)
+  set duration($3.Duration v) { setField(6, v); }
+  @$pb.TagNumber(6)
+  $core.bool hasDuration() => $_has(5);
+  @$pb.TagNumber(6)
+  void clearDuration() => clearField(6);
+  @$pb.TagNumber(6)
+  $3.Duration ensureDuration() => $_ensure(5);
+}
+
 class ToUserInActionBasicQueryRequest extends $pb.GeneratedMessage {
   factory ToUserInActionBasicQueryRequest({
     $core.int? actId,
@@ -1281,11 +1841,15 @@ class OrienteerHrInfo extends $pb.GeneratedMessage {
 class OrienteerOtherInfo extends $pb.GeneratedMessage {
   factory OrienteerOtherInfo({
     $core.int? stepNum,
+    $core.int? heartRatePercent,
   }) {
     final $result = create();
     if (stepNum != null) {
       $result.stepNum = stepNum;
     }
+    if (heartRatePercent != null) {
+      $result.heartRatePercent = heartRatePercent;
+    }
     return $result;
   }
   OrienteerOtherInfo._() : super();
@@ -1294,6 +1858,7 @@ class OrienteerOtherInfo extends $pb.GeneratedMessage {
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'OrienteerOtherInfo', package: const $pb.PackageName(_omitMessageNames ? '' : 'toApp.v1'), createEmptyInstance: create)
     ..a<$core.int>(1, _omitFieldNames ? '' : 'StepNum', $pb.PbFieldType.O3, protoName: 'StepNum')
+    ..a<$core.int>(2, _omitFieldNames ? '' : 'HeartRatePercent', $pb.PbFieldType.O3, protoName: 'HeartRatePercent')
     ..hasRequiredFields = false
   ;
 
@@ -1326,6 +1891,15 @@ class OrienteerOtherInfo extends $pb.GeneratedMessage {
   $core.bool hasStepNum() => $_has(0);
   @$pb.TagNumber(1)
   void clearStepNum() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.int get heartRatePercent => $_getIZ(1);
+  @$pb.TagNumber(2)
+  set heartRatePercent($core.int v) { $_setSignedInt32(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasHeartRatePercent() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearHeartRatePercent() => clearField(2);
 }
 
 class CourseBaseInfo extends $pb.GeneratedMessage {
@@ -1405,6 +1979,16 @@ class ToControlPoint extends $pb.GeneratedMessage {
     $fixnum.Int64? id,
     $core.String? sn,
     $1.Position? ciPosition,
+    $1.CType? cType,
+    $core.int? orderNo,
+    $core.bool? isCheckSuccess,
+    $3.Duration? checkAfterLast,
+    $2.Timestamp? punchTime,
+    $core.int? disAfterLast,
+    $core.int? disStraightAfterLast,
+    $core.int? paceAfterLast,
+    $core.int? paceAfterStart,
+    $3.Duration? checkAfterStart,
   }) {
     final $result = create();
     if (id != null) {
@@ -1416,6 +2000,36 @@ class ToControlPoint extends $pb.GeneratedMessage {
     if (ciPosition != null) {
       $result.ciPosition = ciPosition;
     }
+    if (cType != null) {
+      $result.cType = cType;
+    }
+    if (orderNo != null) {
+      $result.orderNo = orderNo;
+    }
+    if (isCheckSuccess != null) {
+      $result.isCheckSuccess = isCheckSuccess;
+    }
+    if (checkAfterLast != null) {
+      $result.checkAfterLast = checkAfterLast;
+    }
+    if (punchTime != null) {
+      $result.punchTime = punchTime;
+    }
+    if (disAfterLast != null) {
+      $result.disAfterLast = disAfterLast;
+    }
+    if (disStraightAfterLast != null) {
+      $result.disStraightAfterLast = disStraightAfterLast;
+    }
+    if (paceAfterLast != null) {
+      $result.paceAfterLast = paceAfterLast;
+    }
+    if (paceAfterStart != null) {
+      $result.paceAfterStart = paceAfterStart;
+    }
+    if (checkAfterStart != null) {
+      $result.checkAfterStart = checkAfterStart;
+    }
     return $result;
   }
   ToControlPoint._() : super();
@@ -1425,7 +2039,17 @@ class ToControlPoint extends $pb.GeneratedMessage {
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToControlPoint', package: const $pb.PackageName(_omitMessageNames ? '' : 'toApp.v1'), createEmptyInstance: create)
     ..aInt64(1, _omitFieldNames ? '' : 'id')
     ..aOS(2, _omitFieldNames ? '' : 'sn')
-    ..aOM<$1.Position>(5, _omitFieldNames ? '' : 'ciPosition', protoName: 'ciPosition', subBuilder: $1.Position.create)
+    ..aOM<$1.Position>(3, _omitFieldNames ? '' : 'ciPosition', protoName: 'ciPosition', subBuilder: $1.Position.create)
+    ..e<$1.CType>(4, _omitFieldNames ? '' : 'cType', $pb.PbFieldType.OE, protoName: 'cType', defaultOrMaker: $1.CType.UnKnowType, valueOf: $1.CType.valueOf, enumValues: $1.CType.values)
+    ..a<$core.int>(5, _omitFieldNames ? '' : 'orderNo', $pb.PbFieldType.O3, protoName: 'orderNo')
+    ..aOB(6, _omitFieldNames ? '' : 'isCheckSuccess')
+    ..aOM<$3.Duration>(7, _omitFieldNames ? '' : 'checkAfterLast', subBuilder: $3.Duration.create)
+    ..aOM<$2.Timestamp>(8, _omitFieldNames ? '' : 'punchTime', protoName: 'punchTime', subBuilder: $2.Timestamp.create)
+    ..a<$core.int>(9, _omitFieldNames ? '' : 'disAfterLast', $pb.PbFieldType.O3, protoName: 'disAfterLast')
+    ..a<$core.int>(10, _omitFieldNames ? '' : 'disStraightAfterLast', $pb.PbFieldType.O3, protoName: 'disStraightAfterLast')
+    ..a<$core.int>(11, _omitFieldNames ? '' : 'paceAfterLast', $pb.PbFieldType.O3, protoName: 'paceAfterLast')
+    ..a<$core.int>(12, _omitFieldNames ? '' : 'paceAfterStart', $pb.PbFieldType.O3, protoName: 'paceAfterStart')
+    ..aOM<$3.Duration>(13, _omitFieldNames ? '' : 'checkAfterStart', subBuilder: $3.Duration.create)
     ..hasRequiredFields = false
   ;
 
@@ -1468,16 +2092,112 @@ class ToControlPoint extends $pb.GeneratedMessage {
   @$pb.TagNumber(2)
   void clearSn() => clearField(2);
 
-  @$pb.TagNumber(5)
+  @$pb.TagNumber(3)
   $1.Position get ciPosition => $_getN(2);
+  @$pb.TagNumber(3)
+  set ciPosition($1.Position v) { setField(3, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasCiPosition() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearCiPosition() => clearField(3);
+  @$pb.TagNumber(3)
+  $1.Position ensureCiPosition() => $_ensure(2);
+
+  @$pb.TagNumber(4)
+  $1.CType get cType => $_getN(3);
+  @$pb.TagNumber(4)
+  set cType($1.CType v) { setField(4, v); }
+  @$pb.TagNumber(4)
+  $core.bool hasCType() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearCType() => clearField(4);
+
   @$pb.TagNumber(5)
-  set ciPosition($1.Position v) { setField(5, v); }
+  $core.int get orderNo => $_getIZ(4);
   @$pb.TagNumber(5)
-  $core.bool hasCiPosition() => $_has(2);
+  set orderNo($core.int v) { $_setSignedInt32(4, v); }
   @$pb.TagNumber(5)
-  void clearCiPosition() => clearField(5);
+  $core.bool hasOrderNo() => $_has(4);
   @$pb.TagNumber(5)
-  $1.Position ensureCiPosition() => $_ensure(2);
+  void clearOrderNo() => clearField(5);
+
+  @$pb.TagNumber(6)
+  $core.bool get isCheckSuccess => $_getBF(5);
+  @$pb.TagNumber(6)
+  set isCheckSuccess($core.bool v) { $_setBool(5, v); }
+  @$pb.TagNumber(6)
+  $core.bool hasIsCheckSuccess() => $_has(5);
+  @$pb.TagNumber(6)
+  void clearIsCheckSuccess() => clearField(6);
+
+  @$pb.TagNumber(7)
+  $3.Duration get checkAfterLast => $_getN(6);
+  @$pb.TagNumber(7)
+  set checkAfterLast($3.Duration v) { setField(7, v); }
+  @$pb.TagNumber(7)
+  $core.bool hasCheckAfterLast() => $_has(6);
+  @$pb.TagNumber(7)
+  void clearCheckAfterLast() => clearField(7);
+  @$pb.TagNumber(7)
+  $3.Duration ensureCheckAfterLast() => $_ensure(6);
+
+  @$pb.TagNumber(8)
+  $2.Timestamp get punchTime => $_getN(7);
+  @$pb.TagNumber(8)
+  set punchTime($2.Timestamp v) { setField(8, v); }
+  @$pb.TagNumber(8)
+  $core.bool hasPunchTime() => $_has(7);
+  @$pb.TagNumber(8)
+  void clearPunchTime() => clearField(8);
+  @$pb.TagNumber(8)
+  $2.Timestamp ensurePunchTime() => $_ensure(7);
+
+  @$pb.TagNumber(9)
+  $core.int get disAfterLast => $_getIZ(8);
+  @$pb.TagNumber(9)
+  set disAfterLast($core.int v) { $_setSignedInt32(8, v); }
+  @$pb.TagNumber(9)
+  $core.bool hasDisAfterLast() => $_has(8);
+  @$pb.TagNumber(9)
+  void clearDisAfterLast() => clearField(9);
+
+  @$pb.TagNumber(10)
+  $core.int get disStraightAfterLast => $_getIZ(9);
+  @$pb.TagNumber(10)
+  set disStraightAfterLast($core.int v) { $_setSignedInt32(9, v); }
+  @$pb.TagNumber(10)
+  $core.bool hasDisStraightAfterLast() => $_has(9);
+  @$pb.TagNumber(10)
+  void clearDisStraightAfterLast() => clearField(10);
+
+  @$pb.TagNumber(11)
+  $core.int get paceAfterLast => $_getIZ(10);
+  @$pb.TagNumber(11)
+  set paceAfterLast($core.int v) { $_setSignedInt32(10, v); }
+  @$pb.TagNumber(11)
+  $core.bool hasPaceAfterLast() => $_has(10);
+  @$pb.TagNumber(11)
+  void clearPaceAfterLast() => clearField(11);
+
+  @$pb.TagNumber(12)
+  $core.int get paceAfterStart => $_getIZ(11);
+  @$pb.TagNumber(12)
+  set paceAfterStart($core.int v) { $_setSignedInt32(11, v); }
+  @$pb.TagNumber(12)
+  $core.bool hasPaceAfterStart() => $_has(11);
+  @$pb.TagNumber(12)
+  void clearPaceAfterStart() => clearField(12);
+
+  @$pb.TagNumber(13)
+  $3.Duration get checkAfterStart => $_getN(12);
+  @$pb.TagNumber(13)
+  set checkAfterStart($3.Duration v) { setField(13, v); }
+  @$pb.TagNumber(13)
+  $core.bool hasCheckAfterStart() => $_has(12);
+  @$pb.TagNumber(13)
+  void clearCheckAfterStart() => clearField(13);
+  @$pb.TagNumber(13)
+  $3.Duration ensureCheckAfterStart() => $_ensure(12);
 }
 
 class OrienteerGameSaveInfo extends $pb.GeneratedMessage {

+ 40 - 0
lib/generated/to_app_api.pbgrpc.dart

@@ -70,6 +70,14 @@ class ApiToAppClient extends $grpc.Client {
       '/toApp.v1.ApiToApp/ToRedisTest',
       ($1.DefaultRequest value) => value.writeToBuffer(),
       ($core.List<$core.int> value) => $0.ToOrienteerInGameInfo.fromBuffer(value));
+  static final _$toHistoryUserListQuery = $grpc.ClientMethod<$1.IdRequest, $0.ToHisUserListQueryReply>(
+      '/toApp.v1.ApiToApp/ToHistoryUserListQuery',
+      ($1.IdRequest value) => value.writeToBuffer(),
+      ($core.List<$core.int> value) => $0.ToHisUserListQueryReply.fromBuffer(value));
+  static final _$toHistoryGameDetail = $grpc.ClientMethod<$1.IdRequest, $0.ToGameDetailReply>(
+      '/toApp.v1.ApiToApp/ToHistoryGameDetail',
+      ($1.IdRequest value) => value.writeToBuffer(),
+      ($core.List<$core.int> value) => $0.ToGameDetailReply.fromBuffer(value));
 
   ApiToAppClient($grpc.ClientChannel channel,
       {$grpc.CallOptions? options,
@@ -124,6 +132,14 @@ class ApiToAppClient extends $grpc.Client {
   $grpc.ResponseFuture<$0.ToOrienteerInGameInfo> toRedisTest($1.DefaultRequest request, {$grpc.CallOptions? options}) {
     return $createUnaryCall(_$toRedisTest, request, options: options);
   }
+
+  $grpc.ResponseFuture<$0.ToHisUserListQueryReply> toHistoryUserListQuery($1.IdRequest request, {$grpc.CallOptions? options}) {
+    return $createUnaryCall(_$toHistoryUserListQuery, request, options: options);
+  }
+
+  $grpc.ResponseFuture<$0.ToGameDetailReply> toHistoryGameDetail($1.IdRequest request, {$grpc.CallOptions? options}) {
+    return $createUnaryCall(_$toHistoryGameDetail, request, options: options);
+  }
 }
 
 @$pb.GrpcServiceName('toApp.v1.ApiToApp')
@@ -215,6 +231,20 @@ abstract class ApiToAppServiceBase extends $grpc.Service {
         false,
         ($core.List<$core.int> value) => $1.DefaultRequest.fromBuffer(value),
         ($0.ToOrienteerInGameInfo value) => value.writeToBuffer()));
+    $addMethod($grpc.ServiceMethod<$1.IdRequest, $0.ToHisUserListQueryReply>(
+        'ToHistoryUserListQuery',
+        toHistoryUserListQuery_Pre,
+        false,
+        false,
+        ($core.List<$core.int> value) => $1.IdRequest.fromBuffer(value),
+        ($0.ToHisUserListQueryReply value) => value.writeToBuffer()));
+    $addMethod($grpc.ServiceMethod<$1.IdRequest, $0.ToGameDetailReply>(
+        'ToHistoryGameDetail',
+        toHistoryGameDetail_Pre,
+        false,
+        false,
+        ($core.List<$core.int> value) => $1.IdRequest.fromBuffer(value),
+        ($0.ToGameDetailReply value) => value.writeToBuffer()));
   }
 
   $async.Future<$1.DefaultReply> toSendCodeToPhoneV2_Pre($grpc.ServiceCall call, $async.Future<$0.ToSendCodeToPhoneRequestV2> request) async {
@@ -265,6 +295,14 @@ abstract class ApiToAppServiceBase extends $grpc.Service {
     return toRedisTest(call, await request);
   }
 
+  $async.Future<$0.ToHisUserListQueryReply> toHistoryUserListQuery_Pre($grpc.ServiceCall call, $async.Future<$1.IdRequest> request) async {
+    return toHistoryUserListQuery(call, await request);
+  }
+
+  $async.Future<$0.ToGameDetailReply> toHistoryGameDetail_Pre($grpc.ServiceCall call, $async.Future<$1.IdRequest> request) async {
+    return toHistoryGameDetail(call, await request);
+  }
+
   $async.Future<$1.DefaultReply> toSendCodeToPhoneV2($grpc.ServiceCall call, $0.ToSendCodeToPhoneRequestV2 request);
   $async.Future<$1.GetSmsSendLeftTimeReply> toGetSmsSendLeftTimeV2($grpc.ServiceCall call, $1.GetSmsSendLeftTimeRequest request);
   $async.Future<$1.SignInReply> toSignInV2($grpc.ServiceCall call, $0.ToSignInRequestV2 request);
@@ -277,4 +315,6 @@ abstract class ApiToAppServiceBase extends $grpc.Service {
   $async.Future<$0.ToActionBasicInfo> toActionBasicQuery($grpc.ServiceCall call, $1.IdRequest request);
   $async.Future<$0.ToUserInActionBasicInfo> toUserInActionBasicQuery($grpc.ServiceCall call, $0.ToUserInActionBasicQueryRequest request);
   $async.Future<$0.ToOrienteerInGameInfo> toRedisTest($grpc.ServiceCall call, $1.DefaultRequest request);
+  $async.Future<$0.ToHisUserListQueryReply> toHistoryUserListQuery($grpc.ServiceCall call, $1.IdRequest request);
+  $async.Future<$0.ToGameDetailReply> toHistoryGameDetail($grpc.ServiceCall call, $1.IdRequest request);
 }

+ 118 - 3
lib/generated/to_app_api.pbjson.dart

@@ -13,6 +13,100 @@ import 'dart:convert' as $convert;
 import 'dart:core' as $core;
 import 'dart:typed_data' as $typed_data;
 
+@$core.Deprecated('Use toGameDetailReplyDescriptor instead')
+const ToGameDetailReply$json = {
+  '1': 'ToGameDetailReply',
+  '2': [
+    {'1': 'game_id', '3': 1, '4': 1, '5': 5, '10': 'gameId'},
+    {'1': 'isComplete', '3': 2, '4': 1, '5': 8, '10': 'isComplete'},
+    {'1': 'start_at', '3': 3, '4': 1, '5': 11, '6': '.google.protobuf.Timestamp', '10': 'startAt'},
+    {'1': 'checked_sorted_list', '3': 4, '4': 3, '5': 11, '6': '.toApp.v1.ToControlPoint', '10': 'checkedSortedList'},
+    {'1': 'duration', '3': 5, '4': 1, '5': 11, '6': '.google.protobuf.Duration', '10': 'duration'},
+    {'1': 'stop_at', '3': 6, '4': 1, '5': 11, '6': '.google.protobuf.Timestamp', '10': 'stopAt'},
+    {'1': 'isSuccess', '3': 8, '4': 1, '5': 8, '10': 'isSuccess'},
+    {'1': 'sysPoint', '3': 9, '4': 1, '5': 5, '10': 'sysPoint'},
+    {'1': 'totalPointNum', '3': 10, '4': 1, '5': 5, '10': 'totalPointNum'},
+    {'1': 'actName', '3': 13, '4': 1, '5': 9, '10': 'actName'},
+    {'1': 'distance', '3': 14, '4': 1, '5': 5, '10': 'distance'},
+    {'1': 'pace', '3': 15, '4': 1, '5': 5, '10': 'pace'},
+    {'1': 'avgHr', '3': 16, '4': 1, '5': 5, '10': 'avgHr'},
+    {'1': 'Calorie', '3': 17, '4': 1, '5': 5, '10': 'Calorie'},
+    {'1': 'Ck', '3': 18, '4': 1, '5': 5, '10': 'Ck'},
+    {'1': 'Ei', '3': 19, '4': 1, '5': 2, '10': 'Ei'},
+    {'1': 'stepNum', '3': 20, '4': 1, '5': 5, '10': 'stepNum'},
+    {'1': 'gameGpsInfo', '3': 21, '4': 3, '5': 11, '6': '.base.v1.GameGpsInfo', '10': 'gameGpsInfo'},
+    {'1': 'gameHrInfos', '3': 24, '4': 3, '5': 11, '6': '.base.v1.HeartRate', '10': 'gameHrInfos'},
+    {'1': 'source', '3': 25, '4': 1, '5': 14, '6': '.base.v1.GameHistorySource', '10': 'source'},
+    {'1': 'actId', '3': 26, '4': 1, '5': 5, '10': 'actId'},
+  ],
+};
+
+/// Descriptor for `ToGameDetailReply`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toGameDetailReplyDescriptor = $convert.base64Decode(
+    'ChFUb0dhbWVEZXRhaWxSZXBseRIXCgdnYW1lX2lkGAEgASgFUgZnYW1lSWQSHgoKaXNDb21wbG'
+    'V0ZRgCIAEoCFIKaXNDb21wbGV0ZRI1CghzdGFydF9hdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1'
+    'Zi5UaW1lc3RhbXBSB3N0YXJ0QXQSSAoTY2hlY2tlZF9zb3J0ZWRfbGlzdBgEIAMoCzIYLnRvQX'
+    'BwLnYxLlRvQ29udHJvbFBvaW50UhFjaGVja2VkU29ydGVkTGlzdBI1CghkdXJhdGlvbhgFIAEo'
+    'CzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvblIIZHVyYXRpb24SMwoHc3RvcF9hdBgGIAEoCz'
+    'IaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBSBnN0b3BBdBIcCglpc1N1Y2Nlc3MYCCABKAhS'
+    'CWlzU3VjY2VzcxIaCghzeXNQb2ludBgJIAEoBVIIc3lzUG9pbnQSJAoNdG90YWxQb2ludE51bR'
+    'gKIAEoBVINdG90YWxQb2ludE51bRIYCgdhY3ROYW1lGA0gASgJUgdhY3ROYW1lEhoKCGRpc3Rh'
+    'bmNlGA4gASgFUghkaXN0YW5jZRISCgRwYWNlGA8gASgFUgRwYWNlEhQKBWF2Z0hyGBAgASgFUg'
+    'VhdmdIchIYCgdDYWxvcmllGBEgASgFUgdDYWxvcmllEg4KAkNrGBIgASgFUgJDaxIOCgJFaRgT'
+    'IAEoAlICRWkSGAoHc3RlcE51bRgUIAEoBVIHc3RlcE51bRI2CgtnYW1lR3BzSW5mbxgVIAMoCz'
+    'IULmJhc2UudjEuR2FtZUdwc0luZm9SC2dhbWVHcHNJbmZvEjQKC2dhbWVIckluZm9zGBggAygL'
+    'MhIuYmFzZS52MS5IZWFydFJhdGVSC2dhbWVIckluZm9zEjIKBnNvdXJjZRgZIAEoDjIaLmJhc2'
+    'UudjEuR2FtZUhpc3RvcnlTb3VyY2VSBnNvdXJjZRIUCgVhY3RJZBgaIAEoBVIFYWN0SWQ=');
+
+@$core.Deprecated('Use toHisUserListQueryReplyDescriptor instead')
+const ToHisUserListQueryReply$json = {
+  '1': 'ToHisUserListQueryReply',
+  '2': [
+    {'1': 'list', '3': 1, '4': 3, '5': 11, '6': '.toApp.v1.ToHisUserBasic', '10': 'list'},
+  ],
+};
+
+/// Descriptor for `ToHisUserListQueryReply`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toHisUserListQueryReplyDescriptor = $convert.base64Decode(
+    'ChdUb0hpc1VzZXJMaXN0UXVlcnlSZXBseRIsCgRsaXN0GAEgAygLMhgudG9BcHAudjEuVG9IaX'
+    'NVc2VyQmFzaWNSBGxpc3Q=');
+
+@$core.Deprecated('Use toHisUserBasicDescriptor instead')
+const ToHisUserBasic$json = {
+  '1': 'ToHisUserBasic',
+  '2': [
+    {'1': 'OId', '3': 1, '4': 1, '5': 5, '10': 'OId'},
+    {'1': 'OName', '3': 2, '4': 1, '5': 9, '10': 'OName'},
+    {'1': 'list', '3': 3, '4': 3, '5': 11, '6': '.toApp.v1.ToHisUserInfo', '10': 'list'},
+  ],
+};
+
+/// Descriptor for `ToHisUserBasic`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toHisUserBasicDescriptor = $convert.base64Decode(
+    'Cg5Ub0hpc1VzZXJCYXNpYxIQCgNPSWQYASABKAVSA09JZBIUCgVPTmFtZRgCIAEoCVIFT05hbW'
+    'USKwoEbGlzdBgDIAMoCzIXLnRvQXBwLnYxLlRvSGlzVXNlckluZm9SBGxpc3Q=');
+
+@$core.Deprecated('Use toHisUserInfoDescriptor instead')
+const ToHisUserInfo$json = {
+  '1': 'ToHisUserInfo',
+  '2': [
+    {'1': 'GameId', '3': 1, '4': 1, '5': 5, '10': 'GameId'},
+    {'1': 'CourseName', '3': 2, '4': 1, '5': 9, '10': 'CourseName'},
+    {'1': 'ActName', '3': 3, '4': 1, '5': 9, '10': 'ActName'},
+    {'1': 'isComplete', '3': 4, '4': 1, '5': 8, '10': 'isComplete'},
+    {'1': 'start_at', '3': 5, '4': 1, '5': 11, '6': '.google.protobuf.Timestamp', '10': 'startAt'},
+    {'1': 'duration', '3': 6, '4': 1, '5': 11, '6': '.google.protobuf.Duration', '10': 'duration'},
+  ],
+};
+
+/// Descriptor for `ToHisUserInfo`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toHisUserInfoDescriptor = $convert.base64Decode(
+    'Cg1Ub0hpc1VzZXJJbmZvEhYKBkdhbWVJZBgBIAEoBVIGR2FtZUlkEh4KCkNvdXJzZU5hbWUYAi'
+    'ABKAlSCkNvdXJzZU5hbWUSGAoHQWN0TmFtZRgDIAEoCVIHQWN0TmFtZRIeCgppc0NvbXBsZXRl'
+    'GAQgASgIUgppc0NvbXBsZXRlEjUKCHN0YXJ0X2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLl'
+    'RpbWVzdGFtcFIHc3RhcnRBdBI1CghkdXJhdGlvbhgGIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5E'
+    'dXJhdGlvblIIZHVyYXRpb24=');
+
 @$core.Deprecated('Use toUserInActionBasicQueryRequestDescriptor instead')
 const ToUserInActionBasicQueryRequest$json = {
   '1': 'ToUserInActionBasicQueryRequest',
@@ -285,12 +379,14 @@ const OrienteerOtherInfo$json = {
   '1': 'OrienteerOtherInfo',
   '2': [
     {'1': 'StepNum', '3': 1, '4': 1, '5': 5, '10': 'StepNum'},
+    {'1': 'HeartRatePercent', '3': 2, '4': 1, '5': 5, '10': 'HeartRatePercent'},
   ],
 };
 
 /// Descriptor for `OrienteerOtherInfo`. Decode as a `google.protobuf.DescriptorProto`.
 final $typed_data.Uint8List orienteerOtherInfoDescriptor = $convert.base64Decode(
-    'ChJPcmllbnRlZXJPdGhlckluZm8SGAoHU3RlcE51bRgBIAEoBVIHU3RlcE51bQ==');
+    'ChJPcmllbnRlZXJPdGhlckluZm8SGAoHU3RlcE51bRgBIAEoBVIHU3RlcE51bRIqChBIZWFydF'
+    'JhdGVQZXJjZW50GAIgASgFUhBIZWFydFJhdGVQZXJjZW50');
 
 @$core.Deprecated('Use courseBaseInfoDescriptor instead')
 const CourseBaseInfo$json = {
@@ -314,14 +410,33 @@ const ToControlPoint$json = {
   '2': [
     {'1': 'id', '3': 1, '4': 1, '5': 3, '10': 'id'},
     {'1': 'sn', '3': 2, '4': 1, '5': 9, '10': 'sn'},
-    {'1': 'ciPosition', '3': 5, '4': 1, '5': 11, '6': '.base.v1.Position', '10': 'ciPosition'},
+    {'1': 'ciPosition', '3': 3, '4': 1, '5': 11, '6': '.base.v1.Position', '10': 'ciPosition'},
+    {'1': 'cType', '3': 4, '4': 1, '5': 14, '6': '.base.v1.CType', '10': 'cType'},
+    {'1': 'orderNo', '3': 5, '4': 1, '5': 5, '10': 'orderNo'},
+    {'1': 'is_check_success', '3': 6, '4': 1, '5': 8, '10': 'isCheckSuccess'},
+    {'1': 'check_after_last', '3': 7, '4': 1, '5': 11, '6': '.google.protobuf.Duration', '10': 'checkAfterLast'},
+    {'1': 'punchTime', '3': 8, '4': 1, '5': 11, '6': '.google.protobuf.Timestamp', '10': 'punchTime'},
+    {'1': 'disAfterLast', '3': 9, '4': 1, '5': 5, '10': 'disAfterLast'},
+    {'1': 'disStraightAfterLast', '3': 10, '4': 1, '5': 5, '10': 'disStraightAfterLast'},
+    {'1': 'paceAfterLast', '3': 11, '4': 1, '5': 5, '10': 'paceAfterLast'},
+    {'1': 'paceAfterStart', '3': 12, '4': 1, '5': 5, '10': 'paceAfterStart'},
+    {'1': 'check_after_start', '3': 13, '4': 1, '5': 11, '6': '.google.protobuf.Duration', '10': 'checkAfterStart'},
   ],
 };
 
 /// Descriptor for `ToControlPoint`. Decode as a `google.protobuf.DescriptorProto`.
 final $typed_data.Uint8List toControlPointDescriptor = $convert.base64Decode(
     'Cg5Ub0NvbnRyb2xQb2ludBIOCgJpZBgBIAEoA1ICaWQSDgoCc24YAiABKAlSAnNuEjEKCmNpUG'
-    '9zaXRpb24YBSABKAsyES5iYXNlLnYxLlBvc2l0aW9uUgpjaVBvc2l0aW9u');
+    '9zaXRpb24YAyABKAsyES5iYXNlLnYxLlBvc2l0aW9uUgpjaVBvc2l0aW9uEiQKBWNUeXBlGAQg'
+    'ASgOMg4uYmFzZS52MS5DVHlwZVIFY1R5cGUSGAoHb3JkZXJObxgFIAEoBVIHb3JkZXJObxIoCh'
+    'Bpc19jaGVja19zdWNjZXNzGAYgASgIUg5pc0NoZWNrU3VjY2VzcxJDChBjaGVja19hZnRlcl9s'
+    'YXN0GAcgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uUg5jaGVja0FmdGVyTGFzdBI4Cg'
+    'lwdW5jaFRpbWUYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wUglwdW5jaFRpbWUS'
+    'IgoMZGlzQWZ0ZXJMYXN0GAkgASgFUgxkaXNBZnRlckxhc3QSMgoUZGlzU3RyYWlnaHRBZnRlck'
+    'xhc3QYCiABKAVSFGRpc1N0cmFpZ2h0QWZ0ZXJMYXN0EiQKDXBhY2VBZnRlckxhc3QYCyABKAVS'
+    'DXBhY2VBZnRlckxhc3QSJgoOcGFjZUFmdGVyU3RhcnQYDCABKAVSDnBhY2VBZnRlclN0YXJ0Ek'
+    'UKEWNoZWNrX2FmdGVyX3N0YXJ0GA0gASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uUg9j'
+    'aGVja0FmdGVyU3RhcnQ=');
 
 @$core.Deprecated('Use orienteerGameSaveInfoDescriptor instead')
 const OrienteerGameSaveInfo$json = {

+ 20 - 5
lib/service/map_watch.dart

@@ -131,14 +131,29 @@ class UserInfo{
   }
 
   pb.ToControlPoint? get nextWant{
-    final id = gameInfo.gameSaveInfo.nextControlPoint.id;
-    for (final one in routeInfo.controlPointSortedList){
-      if(one.id==id){
-        return one;
-      }
+    final no = gameInfo.gameSaveInfo.nextControlPoint.orderNo;
+    if(no < routeInfo.controlPointSortedList.length){
+      final out = routeInfo.controlPointSortedList[no];
+      out.orderNo=no;
+      return out;
     }
+
     return null;
   }
+  String get nextCPSN{
+    var str = '开始';
+    final next = nextWant;
+    final wantList = routeInfo.controlPointSortedList;
+    if(next != null){
+      if(next.orderNo == wantList.length-1){
+        str = '结束';
+      }else if(next.orderNo > 0){
+        str = '${next.orderNo}号';
+      }
+    }
+    return str;
+  }
+
 
   Future<void> update(pb.ToOrienteerInGameInfo info)async{
     final map = MapWatchService.instance;

+ 2 - 2
lib/view/home/field_control/field_control.dart

@@ -216,7 +216,7 @@ class _UserInfoView extends GetView<FieldControlController> {
                         color: Colors.white,
                       ),
                       ' ${hr == 0 ? '--' : hr}',
-                      (data.gameInfo.hrInfo.hrInfo.lastOrNull?.hrPer ?? 0)
+                      (data.gameInfo.otherInfo.hasHeartRatePercent()?data.gameInfo.otherInfo.heartRatePercent: 0)
                           .toHRPColor()),
                   container(null, paceInfo, data.pace.color)
                 ],
@@ -253,7 +253,7 @@ class _UserInfoView extends GetView<FieldControlController> {
 
   String get cpInfo {
     final next = data.nextWant;
-    return '${data.gameInfo.gameSaveInfo.nextControlPoint.orderNo}号点(${next?.sn})';
+    return next!=null?'${data.nextCPSN}点(${next.sn})': '--';
   }
 
   String get paceInfo {