活力课间屏对接协议2025年7月深圳前海壹路科技有限公司修订记录日期版本修改人修改描述20250715V1.0何美珍新建活力课间屏和学校智慧体育平台的对接协议活力课间屏调用平台接口部分1、人员信息拉取(含人脸)测试地址:192.168.51.36:22001//device/sync/user 请求类型:POST请求参数示例:{    "deviceSerial": "fa0132e389448588", //设备序列号    "deviceType": 11, //设备类型    "userType": 2 //人员类型 1教师,2 学生} 返回参数示例:{    "code": 0,    "msg": "OK",    "data": {        "syncId": 215055665, //同步id        "userList": [            {                "userId": 2762, //人员id                "userType": 2, //人员类型,1:教师、2:学生,3:家长(仅app支持)                "username": "0201009", //用户名,(登录用)                "nickname": "陈志强", //姓名                "organizationId": 231, //组织id                "organizationName": "二年级一班", //组织名称                "facePictureUrl": "http://192.168.51.36:9000/user-face-picture/18095480862818631680201009.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20240812%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240812T095444Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=7a98374f95b49d0be67c78329523d97b2888d21841cc69c6256909f23e3bc7b3", //人脸图片链接                "identity": "学生", //身份 userType对应属性                "gender": "男", //性别                "birthday": "1999-06-25", //生日                "userSerial": "0201009", //人员编码,对应本地U盘导入人员序列号                "trainLimitValues": [ //训练极致                    {                        "courseId": 8, //课目id ,不同课目id对应不同课目                        "bestResult": "23", //该课目最佳成绩                        "lastResult": "23" //该课目最差成绩                    },                    {                        "courseId": 2,                        "bestResult": "0",                        "lastResult": "0"                    },                    {                        "courseId": 7,                        "bestResult": "16700",                        "lastResult": "16700"                    },                    {                        "courseId": 9,                        "bestResult": "20",                        "lastResult": "20"                    },                    {                        "courseId": 10,                        "bestResult": "3",                        "lastResult": "3"                    },                    {                        "courseId": 11,                        "bestResult": "0",                        "lastResult": "0"                    }                ]            }        ]    }}注:后台人脸下发的照片需限制像素大小在1080 * 1440以下,并且高度:宽度的值要大于1.2,可参照下列方式(JAVA为例)进行照片的压缩。 /** * targetSize 传参用分辨率1080 * 1440 * @param originalImage * @param targetSize 1080 * 1440 * @return */ public static BufferedImage compressImage(BufferedImage originalImage, int targetSize) { // 如果原始图片已经小于目标压缩大小,直接返回原始图片 int originalSize = originalImage.getWidth() * originalImage.getHeight() * 3; // 乘以 3 是因为每个像素占用 3 个字节(RGB) if (originalSize <= targetSize) { return originalImage; } BufferedImage compressedImage = null; // 计算原始图片的尺寸 int width = originalImage.getWidth(); int height = originalImage.getHeight(); // 计算目标图片的尺寸 double ratio = Math.sqrt((double) targetSize / (double) (width * height)); int newWidth = (int) (width * ratio); int newHeight = (int) (height * ratio); // 创建一个空的 BufferedImage 对象,用于存储压缩后的图片 compressedImage = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB); // 使用 Graphics2D 绘制压缩后的图片 Graphics2D g = compressedImage.createGraphics(); g.drawImage(originalImage, 0, 0, newWidth, newHeight, null); g.dispose(); return compressedImage; }请求报文字段说明字段类型说明是否必填备注deviceSerialString设备序列号是设备唯一标识deviceTypeInteger设备类型是见设备类型备注userTypeInteger人员类型否1教师,2 学生,3 家长 响应报文字段说明字段类型说明是否必填备注codeInteger返回码是0为正常msgString返回信息是dataObject返回体是syncIdLong同步id是userListList人员列表是userIdInteger人员id是userTypeInteger人员类型是1教师,2 学生,3 家长 usernameString用户名是登录用nicknameString姓名是organizationIdInteger组织id是organizationNameString组织名称是facePictureUrlString人脸图片链接是identityString身份是userType对应属性genderString性别是birthdayString生日是userSerialString人员编码是对应本地U盘导入人员序列号trainLimitValuesList训练极值是courseIdInteger课目id是bestResultString该课目最佳成绩是lastResultString该课目上次成绩是2、获取训练详情请求类型:GET请求参数示例:trainId =311返回参数:{    "code": 0,    "msg": "OK",    "data": {        "trainId": 359, //训练id        "userSerial": "x0201002",//人员序列号        "userType": 2,//人员类型 1教师 2学生        "nickname": "郭朴原",//姓名        "facePictureUrl": "http://192.168.51.36:9000/user-face-picture/1825104800993345536x0201002.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20240822%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240822T094134Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=5b27c1f2915a6635dd1dc51f346132f577324d4053c6a38529dac379bc94eb0d",//人脸照片        "identity": "学生",//身份        "organizationId": 267,//人员所属组织id        "organizationName": "二年级一班",//人员所属组织名称        "gender": "男",//性别        "score": "1",//分数        "unStandardCounts": 0,//不合格动作        "courseId": 8,//课目类型        "courseName": "跳绳",//课目名称        "trainType": "自由练习",//训练类型        "videoUrl": "http://192.168.51.36:9000/train-video-bucket/1826177377459769344course9.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20240822%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240822T094134Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=d93895361ad8b16e84be00bb27b8cfaddb53fff82976eec681ff389ac337ca14",//训练回放视频文件链接        "classOrder": 22, //班级排名        "schoolOrder": 25,//校园排名        "startTime": "2024-08-19 19:01:41",//开始时间        "endTime": "2024-08-19 19:02:42",//结束时间        "countList": [ //近十次训练信息            {                "trainId": 360, //训练记录id                "score": "96",//成绩                "time": "2024-08-19 19:04:42"//训练时间            },            {                "trainId": 359,                "score": "1",                "time": "2024-08-19 19:02:42"            },            {                "trainId": 356,                "score": "20",                "time": "2024-08-19 19:00:44"            },            {                "trainId": 351,                "score": "68",                "time": "2024-08-19 16:45:00"            },            {                "trainId": 350,                "score": "45",                "time": "2024-08-19 14:13:20"            },            {                "trainId": 348,                "score": "62",                "time": "2024-08-19 14:09:21"            }        ],        "dailyList": [//近十日的最佳成绩             {                "score": "96",                "time": "2024-08-19 00:00:00"            }        ],        "keyframeList": [ //关键帧集合            {                "frameId": 1, //关键帧id                "pictureUrl": "http://192.168.51.36:9000/train-fail-picture/1822970285503770624.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20240822%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240822T094134Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=cc8d74d8505203b7ad5deb4262dfce3b19f7041969e4cdecc01b3d995fb2142e",//关键帧图片文件链接                "timestamp": 1724258328888, //关键帧动作时间戳                "trainId": 359,//训练id                "trainSerial": "11925b96-f904-43a4-a319-2f6cb459b209",//训练唯一标识                "commonSerial": null,//多人公共标识                "failType": 1,//失败类型 具体参照备注                "isQualified": 1,//是否合格                "playMillisecond": 1319,//动作发送在回放视频第x毫秒                "failReason": "左臂未抬起" //动作失败含义            }        ]    }}请求报文字段说明字段类型说明是否必填备注trainId Integer上报成绩记录id是响应报文字段说明字段类型说明是否必填备注codeInteger返回码是msgString返回信息是dataObject返回体是trainIdInteger上报成绩记录id是本次训练成绩记录保存自增iduserSerialString人员序列号是userTypeInteger人员类型 1教师 2学生nicknameString姓名facePictureUrlString人脸照片identityString身份organizationIdInteger人员所属组织idorganizationNameString人员所属组织名称genderString性别scoreString分数unStandardCountsInteger不合格动作courseIdInteger课目类型courseNameString课目名称trainTypeString训练类型videoUrlString训练回放视频文件链接classOrderInteger班级排名schoolOrderInteger校园排名startTimeString开始时间endTimeString结束时间countList近十次训练信息trainIdInteger训练记录idscoreString成绩timeString训练时间dailyList近十日的最佳成绩keyframeList关键帧集合frameIdInteger关键帧idpictureUrlString关键帧图片文件链接timestampLong关键帧动作时间戳trainIdInteger训练idtrainSerialString训练唯一标识commonSerial多人公共标识failTypeInteger失败类型 具体参照备注isQualifiedInteger是否合格playMillisecondInteger动作发送在回放视频第x毫秒failReasonString动作失败含义3、多个成绩上报接口(批量)此接口配合人员上次成绩使用,对人员信息进行查询校验后上传成绩。测试地址:192.168.51.36:22001/device/sync/train_push请求类型:POST请求参数示例: [    {        "deviceType": 11, //设备类型 必传        "deviceSerial": "fa0132e389448588", //设备编号 必传        "userSerial": "daoru01", //人员编号 必传        "trainSerial": "est cupidatat ut id consectetur", //训练序列号,通过该唯一编号 确定关键帧图片确定到人员某次训练 //必传        "videoSerial": "74", //视频序列号,通过该序列号,确定回放 必传        "trainExam": 1, //训练类型 必传 "quizId": 1, //测验任务id 自由练习可不传        "standardCounts": 77, //有效个数 必传        "unStandardCounts": 26, //不合格动作数 必传        "timeKeeping": 17.23, //悬垂等计时课目,有效时长 可不传        "duration": 77, //训练持续时间 必传        "distance": 11.01, //距离 可不传        "courseId": 8, //课目id 必传        "startTime": "1976-12-23 07:50:05", //开始时间 必传        "endTime": "2005-10-08 22:49:18" //结束时长 必传    }]返回参数:{    "code": 0,    "msg": "OK",    "data": [        {             "trainId": 414, //上报成绩记录id            "userSerial": "daoru01" //人员序列号        }    ]}请求报文字段说明字段类型说明是否必填备注deviceSerialString设备序列号是设备唯一标识deviceTypeInteger设备类型是见设备类型备注userSerialString人员编号是trainSerialString训练序列号是单次多人训练,视作多个训练。该字段为唯一字段videoSerialString训练序列号是单次多人训练,共用一个视频,该字段可重复trainExamInteger测验任务是quizIdInteger任务id否自由练习可不传standardCountsInteger有效个数是unStandardCountsInteger不合格动作数是timeKeepingDouble有效时长否悬垂等计时课目计算成绩有效单位,单位秒(s)durationInteger训练持续时间是单位:秒(s)distanceDouble距离否跳远课目计算成绩有效单位,单位米(m)courseIdInteger课目id是见备注startTimeString开始时间是endTimeString结束时间是响应报文字段说明字段类型说明是否必填备注codeInteger返回码是msgString返回信息是dataObject返回体是trainIdInteger上报成绩记录id是本次训练成绩记录保存自增iduserSerialString人员序列号是4、老师登入测试地址:192.168.51.36:22001/login/teacher请求类型:POST请求参数示例:{  "username": "zhao01",  "password": "zhao01", "deviceType": 11,//设备类型 必传   "deviceSerial": "fa0132e389448588"//设备序列号必传}返回参数:{    "code": 0,    "msg": "OK",    "data": {        "token": null,        "userId": 796,        "nickname": "B中学管理员",        "username": "zhao01",        "headPortraitUrl": null,        "facePictureUrl": null,        "phone": "13412344323",        "organizationId": 200,        "organizationName": "B中学[一级组织]",        "serialNumber": "zhao01",        "classification": 1,        "gender": 1,        "isRegister": 0 //是否注册学期    }}请求报文字段说明字段类型说明是否必填备注usernameString用户名是passwordString密码是deviceSerialString设备序列号是设备唯一标识deviceTypeInteger设备类型是见设备类型备注响应报文字段说明字段类型说明是否必填备注codeInteger返回码是msgString返回信息是dataObject返回体是tokenStringTokenuserIdInteger用户idnicknameString昵称usernameString名称headPortraitUrlStringfacePictureUrlStringphoneString电话号码organizationIdInteger组织idorganizationNameString组织名称serialNumberString序列号classificationIntegergenderInteger性别isRegisterInteger是否注册学期5、分页查询人员信息测试地址:192.168.51.36:22001/device/sync/user_page请求类型:POST请求参数示例:{    "deviceType": 11, //设备类型    "deviceSerial": "fa0132e389448588", //设备编号    "userType": 2, //人员类型 1教师2学生 3家长    "pageIndex": 10, //页数    "pageSize": 5 //单页大小}返回参数:{    "code": 0,    "msg": "OK",    "data": {        "syncId": 1748415265361,        "userList": [            {                "userId": 4990,                "userType": 2,                "nickname": "谈星加",                "organizationId": 279,                "organizationName": "2班",                "gradeName": "一年级",                "facePictureUrl": "http://192.168.51.36:9000/user-face-picture/18305376763752939520201016.jpg",                "identity": "学生",                "gender": "女",                "birthday": "2006-06-27",                "userSerial": "0201016",                "trainLimitValues": [                    {                        "courseId": 1,                        "bestResult": "0",                        "lastResult": "0"                    },                    {                        "courseId": 0,                        "bestResult": "0",                        "lastResult": "0"                    }                ]            }        ],        "total": 2661, //总条数        "size": 1, //页数        "pages": 2661,//总页数        "current": 10 //当前页    }}请求报文字段说明字段类型说明是否必填备注deviceSerialString设备序列号是设备唯一标识deviceTypeInteger设备类型是见设备类型备注userTypeInteger人员类型 1教师2学生 3家长是元素类型为StringpageIndexInteger页数pageSizeInteger单页大小响应报文字段说明字段类型说明是否必填备注codeInteger返回码是msgString返回信息是dataObject返回体是userListObject人员列表syncIdInteger同步id是userIdInteger人员id是登录用userTypeInteger人员类型是nicknameString用户名是organizationIdInteger姓名organizationNameString组织id是gradeNameString组织名称facePictureUrlString人脸图片链接是identityString身份是userType对应属性genderString性别是birthdayString生日是格式 yyyy-MM-dd userSerialString人员编码是对应本地U盘导入人员序列号trainLimitValuesList训练极值是courseIdInteger课目id是bestResultString该课目最佳成绩是lastResultString该课目上次成绩是totalInteger总条数sizeInteger页数pagesInteger总页数currentInteger当前页6、获取个人成绩排行榜测试地址:192.168.51.36:22001/device/sync/grade/order请求类型:POST请求参数示例:{    "deviceType": 11,   //设备类型 必传    "deviceSerial": "fa0132e389448588", //设备序列号 必传    "courseId": 3,//课程    "gender": 1,//性别 1男 2女    "dateType": 1,  //日期类型  1本日  2本周  3本月 4本学期 5 自由查询时间    "queryStartTime": "2014-07-26 09:26:42", //dateType =5 时,查询时间起点,dateType!=5可不传    "queryEndTime": "2008-10-10 11:34:51",//dateType =5 时,查询时间起点,dateType!=5可不传    "organizeId": [     //组织id        70,        43,        92    ],    "page": 1, //页数    "size": 86 //单页大小}返回参数:{    "code": 0,    "msg": "OK",    "data": [        {            "userId": 2768, //人员id            "nickname": "郭朴原",//人员姓名            "organizationId": 231,//人员隶属组织id            "organizationName": "二年级一班",//人员隶属组织姓名            "gender": 1, //性别1 男 2女            "score": "34", //成绩            "courseId": 8, //课目类型            "courseName": "跳绳"//课目类型名称        },        {            "userId": 2770,            "nickname": "唐明冠",            "organizationId": 232,            "organizationName": "二年级二班",            "gender": 1,            "score": "102",            "courseId": 8,            "courseName": "跳绳"        }    ]}请求报文字段说明字段类型说明是否必填备注deviceSerialString设备序列号是设备唯一标识deviceTypeInteger设备类型是见设备类型备注courseIdInteger课程id否见备注genderInteger性别否1男 2女。为了查询效率用数字标识性别,注意与上面人员信息接口区分dateTypeInteger日期类型是 1本日  2本周  3本月 4本学期 5 自由查询时间queryStartTimeString查询时间起点否dateType!=5可不传queryEndTimeString查询时间起点否dateType!=5可不传organizeIdList组织id集合否元素类型为IntegerpageInteger页数是sizeInteger单页大小是响应报文字段说明字段类型说明是否必填备注codeInteger返回码是msgString返回信息是dataObject返回体是userIdInteger人员id是nicknameString姓名是organizationIdInteger组织id是organizationNameString组织名称是genderInteger性别是scoreString成绩是不同课目上报成绩时单位字段不同,统一字段返回courseIdInteger课目id是courseNameString课目名称是7、组织信息拉取测试地址:192.168.51.36:22001//device/sync/organization请求类型:POST请求参数示例:{    "deviceType": 11,   //设备类型 必传    "deviceSerial": "fa0132e389448588", //设备序列号 必传}返回参数:{    "code": 0,    "msg": "OK",    "data": [        {            "organizationId": 227, //组织id            "parentId": 200, //父级组织id            "parentName": null, //父级组织名称            "organizationName": "四年级", //组织名称            "classSum": null, //班级训练量总和            "children": [ //子集组织集合                {                    "organizationId": 228, //组织id                    "parentId": 227, //当前组织的父级组织id                    "parentName": null, //父级名称                    "organizationName": "四年级一班", //当前组织名称                    "classSum": [                        {                            "courseId": 8, //课目id                            "totalPoints": "26", //总得分 (得分是根据不同年纪不同性别计算规则计算的百分制分数)                            "totalNumber": 1 //总个数                        },                        {                            "courseId": 11,                            "totalPoints": "51",                            "totalNumber": 1                        }                    ],                    "children": [], //子类组织集合                    "childrenIds": [], //子类组织id集合                    "organizationType": "班级" //组织类型                }            ],            "childrenIds": [ //子类组织id集合                228             ],            "organizationType": "年级" //组织类型        }    ]}请求报文字段说明字段类型说明是否必填备注deviceSerialString设备序列号是设备唯一标识deviceTypeInteger设备类型是见设备类型备注响应报文字段说明字段类型说明是否必填备注codeInteger返回码是msgString返回信息是dataObject返回体是organizationIdInteger组织idparentIdInteger当前组织的父级组织idparentNameString父级名称organizationNameString组织名称是classSumObject返回体是courseIdInteger课目id是totalPointsString总得分是得分是根据不同年纪不同性别计算规则计算的百分制分数totalNumberInteger总个数是childrenObject子类组织集合是childrenIdsObject子类组织id集合organizationTypeString组织类型childrenIdsObject子类组织id集合organizationTypeString组织类型8、查询运动记录测试地址:192.168.51.36:22001/applet/train/record_app请求类型:POST请求参数示例:{    "deviceType": 11,    //设备类型 必传    "deviceSerial": "fa0132e389448588",//设备序列号 必传    "courseId": 8,//课程id 必传    "gender": 2,//性别 1男2女 可不传    "userSerial": "zhao01",//人员序列号 必传    "userName": "", //人员搜索词 可不传    "dateType": 3, //日期类型 1本日 2本周 3本月 4本学期 5 自由查询时间 必传    "queryStartTime": "2015-08-21 05:16:52", //dateType =5 时,查询时间起点,dateType!=5可不传    "queryEndTime": "1981-01-02 03:48:58", //dateType =5 时,查询时间起点,dateType!=5可不传    "organizeId": [        22    ],     //  组织id    "page": 1,  //页数 必传    "size": 10   //单页大小 必传}返回参数:{    "code": 0,    "msg": "OK",    "data": [        {            "trainId": 247, //运动记录id            "nickname": "沈彤", //训练人            "organizationId": 232,//训练人所属组织id            "organizationName": "二年级二班",//训练人所属组织名称            "gender": 2,//性别1男 2女            "facePictureUrl": "http://192.168.51.36:9000/user-face-picture/1819286343022379008%E8%83%A1%E9%9B%85%E6%A3%8B-0202019.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20240823%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240823T035055Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=a02e222d6254cd44f333e45db8eaaa0f21310fa13df2ce282f891f38639f0659",//人员人脸照片            "score": "22",//本次训练成绩            "startTime": "2024-08-02 16:45:16",//训练开始时间            "endTime": "2024-08-02 16:46:17",//训练结束时间            "courseId": 8, //课目类型            "courseName": "跳绳"//课目名称        },        {            "trainId": 242,            "nickname": "胡雅棋",            "organizationId": 232,            "organizationName": "二年级二班",            "gender": 2,            "facePictureUrl": "http://192.168.51.36:9000/user-face-picture/1819286643275825152%E6%B2%88%E5%BD%A4-0202021.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20240823%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240823T035055Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=b6bc12061c6896531cff9bf0769281b79cd716d30b49b67092ad62cb8a8306c3",            "score": "37",            "startTime": "2024-08-02 16:41:52",            "endTime": "2024-08-02 16:42:53",            "courseId": 8,            "courseName": "跳绳"        }    ]}请求报文字段说明字段类型说明是否必填备注deviceSerialString设备序列号是设备唯一标识deviceTypeInteger设备类型是见设备类型备注courseIdInteger课程id否见备注genderInteger性别否1男 2女。为了查询效率用数字标识性别,注意与上面人员信息接口区分userSerialString人员编码否对应本地U盘导入人员序列号userNameString人员姓名搜索词否支持模糊匹配dateTypeInteger日期类型是 1本日  2本周  3本月 4本学期 5 自由查询时间queryStartTimeString查询时间起点否dateType不为5可不传queryEndTimeString查询时间起点否dateType不为5可不传organizeIdList组织id集合否元素类型为IntegerpageInteger页数是sizeInteger单页大小是响应报文字段说明字段类型说明是否必填备注codeInteger返回码是msgString返回信息是dataObject返回体是trainIdInteger记录id是nicknameString姓名是organizationIdInteger组织id是训练人所属组织idorganizationNameString组织名称是训练人所属组织名称genderInteger性别是1 男 2 女facePictureUrlString人脸图片链接是scoreString本次训练成绩是startTimeString训练开始时间是endTimeString训练结束时间是courseIdInteger课目id是courseNameString课目名称是9、查询我的运动测试地址:192.168.51.36:22001/device/sync/train/my_record/ytp请求类型:POST请求参数示例:{    "deviceType": 11,//设备类型 必传"deviceSerial": "fa0132e389448588",//设备序列号必传"courseType": 1,    "dateType": 3,//时间类型   (0,"全部") ,(1, "今日"),(2, "本周"), (3, "本月"), (4, "本学期"),(5, "指定时间"),(6, "上周"),(7, "上月"),(8, "最近三个月") (9,"本年度")    "queryStartTime": "2015-08-21 05:16:52",//dateType =5 时,查询时间起点,dateType!=5可不传    "queryEndTime": "1981-01-02 03:48:58",//dateType =5 时,查询时间起点,dateType!=5可不传    "userSerial": "0201002"//人员序列号 必传}返回参数{    "code": 0,    "msg": "OK",    "data": {        "userSync": {            "userId": 2768,//人员id            "userType": 2,//人员类别 1教师 2学生            "nickname": "郭朴原",//人员姓名            "organizationId": 231, //组织id            "organizationName": "二年级一班",//组织名称"facePictureUrl": "http://192.168.51.36:9000/user-face-picture/19308689284530995201897522700938240000陈志强-0201009.jpg",            "identity": "学生", //身份            "gender": "男",//性别            "birthday": "1999-06-25",//生日            "userSerial": "0201002"//人员序列号"height": "179.0", "weight": "59.23"        },"trainCourseSum": 8,        "trainDays": 35,        "trainHours": "2.17",        "trainCounts": 144,        "gradeList": [ //成绩集合            {                "time": "2025-07-04",                "duration": "0",                "count": "0"            }        ],        "graphTrainList": [ //表格信息集合            {                "courseId": 7,//课目类型                "courseName": "立定跳远",//课目名称                "time": 240,//课目时长                "count": 4 //课目次数            }        ],"courseBestList": [            {                "courseId": 2,                "courseName": "仰卧起坐",                "bestGrade": "9",                "avgGrade": "4.5",                "worstGrade": "0"            }        ]    }}请求报文字段说明字段类型说明是否必填备注deviceSerialString设备序列号是设备唯一标识deviceTypeInteger设备类型是见设备类型备注courseTypeInteger课程类型是见备注userSerialString人员编码否对应本地U盘导入人员序列号dateTypeInteger日期类型是 1本日  2本周  3本月 4本学期 5 自由查询时间queryStartTimeString查询时间起点否dateType不为5可不传queryEndTimeString查询时间起点否dateType不为5可不传响应报文字段说明字段类型说明是否必填备注codeInteger返回码是msgString返回信息是dataObject返回体是userSyncObject人员信息实体是若返回体存在多个实体属性,未避免同实体内有同名字段,根据返回示例从上往下查看字段说明userIdInteger记录id是userTypeInteger人员类别是1教师 2学生 3 家长nicknameString姓名是organizationIdInteger组织id是训练人所属组织idorganizationNameString组织名称是训练人所属组织名称facePictureUrlString用户头像是identityString身份是genderString性别是性别为男女汉字birthdayString生日是格式:yyyy-MM-dduserSerialString人员序列号是heightString身高是weightString体重是trainCourseSumInteger运动项目(个)是trainDaysInteger运动天数(天)是trainHoursString运动时长(小时)是trainCountsInteger运动次数(次)是gradeListList成绩实体集合是元素属性为ObjecttimeString时间是durationString是countString个数是graphTrainListList表格信息排序是元素属性为ObjectcourseIdInteger课目id是若返回体存在多个实体属性,未避免同实体内有同名字段,根据返回示例从上往下查看字段说明courseNameString课目名称是若返回体存在多个实体属性,未避免同实体内有同名字段,根据返回示例从上往下查看字段说明timeInteger课目时长是单位秒(s)countInteger课目次数是courseBestListListcourseIdInteger科目idcourseNameString科目名称bestGradeString最好成绩avgGradeString平均成绩worstGradeString最差成绩10、设备心跳考虑到心跳丢失,推荐心跳不超过1分钟一次,建议30s进行一次心跳WebSocket地址:ws://192.168.51.36:22001/ws/camera/device客户端请求示例:{ "serialNumber": "sn1881", //序列码,区分设备唯一性 "androidId": "", //安卓Id,本次后端没用到,李总要求保留该字段 "imei": "", //国际移动设备识别码,本次后端没用到,李总要求保留该字段 "imsi": "", //国际移动用户识别码,本次后端没用到,李总要求保留该字段 "param": "ping", //心跳参数,会返回pong "request": "station:heartbeat", //请求类型 "msgId": "c7e6a04a5f3842d8b7f343d35d05d923" //消息随机码,随机字符串,确保对话消息对称性}服务器返回:{ "serialNumber": "sn1881", //序列码,区分设备唯一性 "androidId": "", //安卓Id,本次后端没用到,李总要求保留该字段 "imei": "", //国际移动设备识别码,本次后端没用到,李总要求保留该字段 "imsi": "", //国际移动用户识别码,本次后端没用到,李总要求保留该字段 "param": "pong", //心跳参数,会返回pong "request": "station:heartbeat", //请求类型 "msgId": "c7e6a04a5f3842d8b7f343d35d05d923" //消息随机码,随机字符串,确保对话消息对称性}请求报文字段说明字段类型说明是否必填备注requestString请求类型是必须与示例相同:station:heartbeatmsgIdString消息随机码是随机字符串,确保对话消息对称性serialNumberString序列码,区分设备唯一性是paramString心跳标识是"ping"androidIdString安卓Id否预留字段,可不作处理imeiString国际移动设备识别码否预留字段,可不作处理imsiString国际移动用户识别码否预留字段,可不作处理响应报文字段说明字段类型说明是否必填备注requestString请求类型是必须与示例相同msgIdString消息随机码是随机字符串,确保对话消息对称性serialNumberString序列码,区分设备唯一性是msgString返回信息是paramString心跳标识是"pong"androidIdString安卓Id是预留字段,可不作处理imeiString国际移动设备识别码是预留字段,可不作处理imsiString国际移动用户识别码是预留字段,可不作处理11、拉取安装包新版本(维护升级)测试地址:192.168.51.36:22001/setting/verify/app应用名称范围产品给出限制如下:applyName  :  [    "壹动站",    "壹动站旗舰版",    "壹体机",    "壹体屏",    "便携式移动站",    "多功能壹体机"]操作系统目前仅有安卓operatingSystem:android请求参数示例:{    "deviceType": 11, //设备类型    "deviceSerial": "ceb7644e9f3353b6", //设备序列号    "applyName": "壹动站旗舰版", //应用名称    "isForcedUpdating": 0, //是否指定强制更新应用包    "hardwareType": "LZ", //硬件类型     "operatingSystem": "android ", //操作系统    "versionNumber": "1.0.0" //版本号} 返回参数示例{    "code": 0,    "msg": "OK",    "data": {        "versionNumber": "1.0.1",        "needForcedUpdating": 1,        "updateUrl": "http://192.168.51.36:9000/apply-file-bucket/1922942992470048768YDZ_U_IP178_DEV_LZ_V1.0.1.apk?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20250516%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250516T040250Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=26b2149bbf7b19be5b65d4fc71fa9f84aa04cbb3711f57c9bff970b51ea9e402",        "hardwareType": "LZ",        "applyName": "壹动站旗舰版"    }}请求报文字段说明字段类型说明是否必填备注deviceSerialString设备序列号是设备唯一标识deviceTypeInteger设备类型是见设备类型备注applyNameString应用名称是设备当前运行软件应用名称,种类见接口说明isForcedUpdatingInteger是否指定强制更新应用包是0:非强制更新版本 1:强制更新版本hardwareTypeString硬件型号是当前分类为“LZ”、“SMT”operatingSystemString操作系统是当前仅支持“android”versionNumberString版本号是响应报文字段说明字段类型说明是否必填备注codeInteger返回码是msgString返回信息是dataObject返回体是对象属性如下versionNumberString版本号是needForcedUpdatingInteger是否指定强制更新应用包是返回提供下载的安装包是否需要强制更新updateUrlString安装包下载链接是hardwareTypeString硬件型号是当前分类为“LZ”、“SMT”applyNameString应用名称是设备当前运行软件应用名称,种类见接口说明平台下发数据到活力课间机接口部分1、信息更新提醒当用户操作修改人员信息后,服务端提醒客户端进行信息更新,小站收到信息默认会执行拉取暂定不返回信息 (不返回信息,指收到提醒请求,默认客户端会执行操作,不应答该提醒请求)WebSocket地址:ws://192.168.51.36:22001/ws/camera/device服务器请求示例:两种不同类型请求,请根据不同类型,调用不同数据拉取接口获取最新数据=============================================================={    "msgId": "oewajkaiaawetewyh",    "request": "station:remind",    "data": {        "remindType": 2,        "remindMessage": "请同步最新组织信息",        "time": "2024-04-27 15:53:53"    },    "msg": "",    "code": 0}=============================================================={    "msgId": "oewajkaiaawetewyh",    "request": "station:remind",    "data": {        "remindType": 8,        "remindMessage": "请同步最新学生信息",        "time": "2024-04-27 15:53:53"    },    "msg": "",    "code": 0}请求报文字段说明字段类型说明是否必填备注requestString请求类型是必须与示例相同:station:remindmsgIdString消息随机码是随机字符串,确保对话消息对称性dataObject请求体是remindTypeInteger提示类型是具体八种提示类型,参照示例remindMessageString提示消息是具体八种提示类型,参照示例timeString提示时间是msgString请求信息是传空字符串:"",该字段设备不使用codeInteger请求码是0为正常2、用户遥控操纵设备行为根据产品需求,在小程序上需要对小站进行重启、关机操作。小站收到信息默认会执行拉取暂定不返回信息(不返回信息,指收到操纵请求,默认客户端会执行操作,不应答该操作请求)WebSocket地址:ws://192.168.51.36:22001/ws/camera/device服务器向客户端下发操作指令示例:{    "msgId": "oewajkaiaawetewyh",    "request": "station:control",    "data": {        "controlCode": 1,        "controlType": "重新启动",        "time": "2024-04-27 15:58:29"    },    "msg": "",    "code": 0}==================================================={    "msgId": "oewajkaiaawetewyh",    "request": "station:control",    "data": {        "controlCode": 2,        "controlType": "关机",        "time": "2024-04-27 15:58:29"    },    "msg": "",    "code": 0}请求报文字段说明字段类型说明是否必填备注requestString请求类型是必须与示例相同:station:controlmsgIdString消息随机码是随机字符串,确保对话消息对称性dataObject请求体是controlCodeInteger操控码是具体八种操控码,参照示例controlTypeString操控类型是具体八种操控类型,参照示例timeString提示时间是msgString请求信息是传空字符串:"",该字段设备不使用codeInteger请求码是0为正常3、服务器主动推送人员信息(批量下发)当用户操作修改人员信息后,由服务器主动推送人员缓存WebSocket地址:ws://192.168.51.36:22001/ws/camera/device服务器请求示例:三种不同类型请求,请根据不同类型,调用不同数据拉取接口获取最新数据 {    "msgId": "oewajkaiaawetewyh",    "request": "station:user:push",    "data": {        "serialNumber": "",        "syncId": 215055665,        "userSyncList": [            {                "userId": 0,                "username": "",                "nickname": "",                "userType": 1,                "organizationId": 0,                "organizationName": "",                "facePictureUrl": "",                "gender": "",                "birthday": "2024-05-16 15:36:43",                "userSerial": "",                "trainLimitValues": [                    {                        "courseId": 0,                        "bestResult": "",                        "lastResult": ""                    }                ]            }        ]    },    "msg": "",    "code": 0}请求报文字段说明字段类型说明是否必填备注requestString请求类型是必须与示例相同:station:user:pushmsgIdString消息随机码是随机字符串,确保对话消息对称性dataObject请求体是serialNumberString设备序列号是syncIdLong同步id是userSyncListList人员信息集合是元素属性为ObjectuserIdInteger人员id是userTypeInteger人员类型是1教师,2 学生,3 家长 usernameString用户名是登录用nicknameString姓名是organizationIdInteger组织id是organizationNameString组织名称是facePictureUrlString人脸图片链接是identityString身份是userType对应属性genderString性别是汉字:男、女birthdayString生日是userSerialString人员编码是对应本地U盘导入人员序列号trainLimitValuesList训练极值否courseIdInteger课目id否bestResultString该课目最佳成绩否lastResultString该课目最差成绩否4、服务器主动推送应用下载信息(服务端向设备主动推送应用更新信息)当用户希望主动更新设备软件,由服务器主动向设备推送新应用下载信息WebSocket地址:ws://192.168.51.36:22001/ws/camera/device服务器请求示例:三种不同类型请求,请根据不同类型,调用不同数据拉取接口获取最新数据 {    "msgId": "oewajkaiaawetewyh",    "request": "apk:version:download",    "data": {"versionNumber": "", //版本号"needForcedUpdating": 0, //是否需要强制更新 0不需要 1需要"updateUrl": "", //apk下载链接"hardwareType": "", //上传app硬件类型"time": "2025-05-12 10:26:24" //推送时间},    "msg": "",    "code": 0}请求报文字段说明字段类型说明是否必填备注requestString请求类型是必须与示例相同:apk:version:downloadmsgIdString消息随机码是随机字符串,确保对话消息对称性dataObject请求体是对象属性如下versionNumberString版本号是needForcedUpdatingInteger是否指定强制更新应用包是返回提供下载的安装包是否需要强制更新updateUrlString安装包下载链接是hardwareTypeString硬件型号是当前分类为“LZ”、“SMT”timeString推送时间是枚举说明1、设备类型类型序号(deviceType )设备类型19壹动屏、课间屏2、课目类型类型序号(courseId )课目类型3引体向上7立定跳远8跳绳9开合跳10高抬腿11深蹲23坐位体前屈24单脚跳25动态臀桥26左右跳28七上八下29消灭蚊子32打钉子1001体重系数(BMI)1002肺活量2仰卧起坐1俯卧撑40诗词满腹41单词大王42数学王者45科学达人44历史小生27打地鼠31变脸35手脚并用36踢毽子37风火轮38顺序摸数字30剪刀石头布46纵向摸高47半蹲跳48深蹲跳49侧向蹲起50篮球单手运球51篮球双手交替运球52身体绕球53足球踩球54足球颠球55足球踩单车56排球垫球57排球自传挑战错误码说明错误代码(failType)描述1左臂未抬起2右臂未抬起3双臂未抬起4左臂抬起不够高5右臂抬起不够高6双臂抬起不够高7双臂未夹紧8两腿未张开9两腿张开距离不够10单腿平移,未起跳11脚掌未动,双膝张开12两腿未并拢13提腿地面距离不足14交替提腿15双手离肩16未触膝17未躺平18跳远踩线19检测区有多个人20单脚起跳21跑步踩线22抢跑23跳远出界24下颚未过杆25手臂未伸直26脚触杆27手离杆28手离杆29脚触杆30站起身31躺地超过10秒32脚触杆33手离杆34站起身35身体触碰地面36手臂未伸直37肩高于肘38身体未平直39肩高于肘40手臂未伸直41起跳时踩线42手离杆43中断44颠臀45膝盖未弯曲46手未过止点线47站起身48摆浪49脚踩助力50坐杆