YD_YiLu.Api/壹路文档/docx2_text.txt
2026-03-27 10:53:02 +08:00

2 lines
47 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

壹体屏对接协议2025年5月深圳前海壹路科技有限公司修订记录日期版本修改人修改描述20250616V1.0曹向新建壹体屏和学校智慧体育平台的对接协议20250718V1.1曹向修改人员下发相关接口新增年级名称字段壹体屏调用平台接口部分1、人员批量下发测试地址: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": 215055665, //同步id        "userList": [            {                "userId": 2762, //人员id                "userType": 2, //人员类型,1:教师、2:学生,3:家长(仅app支持)                "username": "0201009", //用户名,(登录用)                "nickname": "陈志强", //姓名                "organizationId": 231, //组织id                "organizationName": "一班", //具体组织名称(班级)  "gradeName": "二年级", //年级名称                "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 width = originalImage.getWidth(); int height = originalImage.getHeight(); BufferedImage compressedImage = null; // 如果原始图片已经小于目标压缩大小,直接返回原始图片 int originalSize = originalImage.getWidth() * originalImage.getHeight() * 3; // 乘以 3 是因为每个像素占用 3 个字节(RGB) if (originalSize <= targetSize) { // 创建一个空的 BufferedImage 对象,用于存储压缩后的图片,有些格式图片没有限制部分属性导致空指针,统一new新对象处理 compressedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = compressedImage.createGraphics(); g.drawImage(originalImage, 0, 0, width, height, null); g.dispose(); return compressedImage; } // 计算目标图片的尺寸 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 家长 pageIndexInteger页数是pageSizeInteger单页大小是响应报文字段说明字段类型说明是否必填备注codeInteger返回码是0为正常msgString返回信息是dataObject返回体是syncIdLong同步id是userListList人员列表是userIdInteger人员id是userTypeInteger人员类型是1教师,2 学生,3 家长 usernameString用户名是登录用nicknameString姓名是organizationIdInteger组织id是organizationNameString组织名称是gradeNameString年级名称是facePictureUrlString人脸图片链接是identityString身份是userType对应属性genderString性别是birthdayString生日是userSerialString人员编码是对应本地U盘导入人员序列号trainLimitValuesList训练极值是courseIdInteger课目id是bestResultString该课目最佳成绩是lastResultString该课目上次成绩是  2、组织信息下发(年级班级信息下发)测试地址:192.168.51.36:22001/device/sync/organization请求类型:POST 请求参数示例:{    "deviceSerial": "fa0132e389448588", //设备序列号    "deviceType": 11 //设备类型}  返回参数: {    "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 //总个数                        }                    ],                    "children": [], //子类组织集合                    "childrenIds": [], //子类组织id集合                    "organizationType": "班级" //组织类型                }            ],            "childrenIds": [ //子类组织id集合                228             ],            "organizationType": "年级" //组织类型        }    ]} 请求报文字段说明字段类型说明是否必填备注deviceSerialString设备序列号是设备唯一标识deviceTypeInteger设备类型是见设备类型备注响应报文字段说明字段类型说明是否必填备注codeInteger返回码是0为正常msgString返回信息是dataObject返回体是organizationIdInteger组织id是parentIdList父级组织id是parentNameString父级组织名称是organizationName组织名称人员类型是1教师,2 学生,3 家长 classSumList<Object>班级训练量总和是childrenObject子类组织集合是整个对象是树形嵌套结构,设备当前只适配二级组织,请模仿示例返回childrenIdsList<Integer>子类组织id集合是classSum数组元素对象属性courseIdInteger课目id是对应课目见备注totalPointsString总得分 (得分是根据不同年纪不同性别计算规则计算的百分制分数)是可根据业务自定义分数或者其他展示班级统计数据totalNumberInteger总个数是实际训练总数目,如1班总共跳绳10000个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/device/sync/train/details请求类型: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"//训练时间            }        ],        "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": "左臂未抬起" //动作失败含义            }        ]    }} 请求报文字段说明字段类型说明是否必填备注trainIdInteger训练id是在上报成绩后返回,或者下文查看训练记录返回响应报文字段说明字段类型说明是否必填备注codeInteger返回码是msgString返回信息是dataObject返回体是trainIdInteger上报成绩记录id是本次训练成绩记录保存自增iduserSerialString人员序列号是userTypeInteger人员类型是 1教师 2学生nicknameString姓名是facePictureUrlString人脸照片是identityString身份是organizationIdInteger人员所属组织id是organizationNameString人员所属组织名称是genderString性别是scoreString分数是常规展示为个数unStandardCountsInteger不合格动作数是courseIdInteger课目类型是courseNameString课目名称是trainTypeString训练类型是videoUrlString训练回放视频文件链接否classOrderInteger班级排名本次训练成绩在全班级的排名schoolOrderInteger校园排名本次训练在全校的排名startTimeString训练开始时间endTimeString训练结束时间countListList<Object>近十次训练信息最近十次同课目的训练的成绩dailyListList<Object>近十日的最佳成绩keyframeListList<Object>关键帧集合countList 集合元素对象属性trainIdInteger训练id是在上报成绩后返回,或者下文查看训练记录返回scoreString分数常规展示为个数timeString训练时间数值为训练开始时间dailyList集合元素对象属性scoreString分数常规展示为个数timeString训练时间数值为训练开始时间keyframeList集合元素对象属性frameIdInteger关键帧id通常为数据自增idpictureUrlString关键帧图片文件链接数值为训练开始时间timestampLong关键帧动作时间戳trainIdInteger训练idtrainSerialString训练唯一标识当设备分别上报成绩和关键帧时,通过该字段进行关联commonSerialString多人公共标识某张关键帧图中包含可能对应多人,多人共用一张图片关系用该字段关联failTypeInteger失败类型 具体参照备注isQualifiedInteger是否合格1:合格 ;0:不合格playMillisecondLong关键帧播放毫秒动作发送在回放视频第x毫秒failReasonString动作失败含义5、获取个人成绩排行榜测试地址: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课目名称是6、查询运动记录测试地址: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课目名称是7、查询我的运动(壹体屏)测试地址:192.168.51.36:22001/device/sync/train/my_record/ytp请求类型:POST请求参数示例:{    "deviceType": 12, //设备类型  一体屏使用19,目前没新增一体屏 可用一体机12开发后面再换成12 不影响业务    "deviceSerial": "ffffffff-cd37-fab6-0000-00001d80d2af", //设备序列号    "userSerial": "01010101", //人员编码    "dateType": 0, //时间类型   (0,"全部") ,(1, "今日"),(2, "本周"), (3, "本月"), (4, "本学期"),(5, "指定时间"),(6, "上周"),(7, "上月"),(8, "最近三个月") (9,"本年度")      "queryStartTime": "1986-04-06 17:01:41", //只有上面dateType传5 才会使用指定时间    "queryEndTime": "1984-02-04 08:08:21" //只有上面dateType传5 才会使用指定时间}返回参数{    "code": 0,    "msg": "OK",    "data": {        "userSync": { //人员信息            "userId": 4964, //人员id            "userType": 2, //人员类型 1教师 2学生 3家长            "nickname": "陈一鸣", //姓名            "organizationId": 286, //组织id            "organizationName": "二年级1班", //组织名称            "facePictureUrl": "http://192.168.51.36:9000/user-face-picture/1897522700938240000陈志强-0201009.jpg", //人脸url            "identity": "学生", //身份            "gender": "男", //性别            "birthday": "2018-01-31", //生日            "userSerial": "01010101" //人员编码            "height": "170.0", //身高 单位cm            "weight": "50.0" //体重 单位kg        },        "trainCourseSum": 9, //运动项目总个数        "trainDays": 28, //运动天数        "trainHours": "123.73", //运动时长(小时)        "trainCounts": 120, //运动次数        "gradeList": [ //最近七天运动量统计图            {                "time": "2025-04-23", //时间                "duration": "0", //时长                "count": "0" //次数            }        ],        "graphTrainList": [ //运动量排行            {                "courseId": 2, //课目id                "courseName": "1分钟仰卧起坐", //课目名称                "time": "1", //时长                "count": 1 //次数            }        ]    }} 请求报文字段说明字段类型说明是否必填备注deviceSerialString设备序列号是设备唯一标识deviceTypeInteger设备类型是见设备类型备注courseIdListList课程id集合是见备注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组织名称是训练人所属组织名称identityString身份是genderString性别是性别为男女汉字birthdayString生日是格式:yyyy-MM-dduserSerialString人员序列号是heightString身高否单位cmweightString体重否单位kgtrainCourseSumInteger运动项目总个数trainDaysInteger运动天数trainHoursString运动时长(小时)trainCountsInteger运动次数gradeListList<Object>最近七天运动量统计图是元素属性字段见下graphTrainListList<Object>运动量排行是元素属性字段见下gradeList集合元素对象属性timeString时间是durationInteger时长是countList次数是graphTrainList集合元素对象属性courseIdInteger课目id是courseNameString课目名称是timeInteger课目时长是单位秒(s)countInteger课目次数是8、老师登录测试地址: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返回体是tokenString登录凭证否该字段为保留字段,暂无实际意义userIdInteger记录id是usernameString账户是nicknameString姓名是headPortraitUrlString头像url否该字段为保留字段,暂无实际意义facePictureUrlString人脸图片url是organizationIdInteger组织id是所属组织idorganizationNameString组织名称是所属组织名称serialNumberString人员编号是classificationInteger人员类别是1教师 2学生 3家长genderInteger性别是1男 2女isRegisterInteger是否注册学期否该字段为保留字段,暂无实际意义9、设备心跳考虑到心跳丢失,推荐心跳不超过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国际移动用户识别码是预留字段,可不作处理10、拉取安装包新版本(维护升级)测试地址: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": "",  "gradeName": "二年级", //年级名称                "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组织名称是gradeNameString年级名称是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是否指定强制更新应用包是返回提供下载的安装包是否需要强制更新,1:需要强制更新 0:非强制更新updateUrlString安装包下载链接是如果设备版本号高于平台返回版本该字段为nullhardwareTypeString硬件型号是当前分类为“LZ”、“SMT”timeString推送时间是枚举说明1、设备类型类型序号(deviceType )设备类型19壹体屏2、课目类型类型序号(courseId )课目类型3引体向上7立定跳远8跳绳9开合跳10高抬腿11深蹲23坐位体前屈24单脚跳25动态臀桥26左右跳27打地鼠28七上八下29消灭蚊子30石头剪刀布31变脸32打钉子1001体重系数(BMI)1002肺活量错误码说明错误代码(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坐杆