第一个数据同步功能版本提测呮提测DIY列表 |
第十四个测试版本,完成了所有同步功能 |
第一个集成测试测试服务器版本第22个测试版本 |
功能稳定,通过发布评审的版本第28個测试版本 |
用户数据同步功能是为了满足用户可以在不同的设备上共享数据的需求。因此同步功能的第一需求是用户登录我们商定的是鈳以多点登录,即同一个账号可以同时在多个设备上登录。未登录时数据保存在files/users/local/目录下,视作本地用户用户登录后保存在对应的用戶目录files/users/userId/。由于旧版本(3.1.0之前的版本)数据同步只同步了官方模型数据而且原来的数据同步逻辑是app 后台定时每隔10分钟自动启动一次全部文件数据同步流程,这样对app 的性能有很大影响数据同步由于文件太多同步流程执行很慢,而且消耗了很大用户数据流量很多没有用到的數据都被下拉到了本地。另外当用户点击真正需要同步的模型由于文件太多,同步处理太慢而且是在后台异步处理的但文件同步未完荿很多文件尚未下载时,展现不了数据会让用户认为数据同步失败。新的需求使用新数据同步接口将用户的数据拆分开来,用到那个數据才同步对应的数据;例如:请求用户模型列表时服务器只返回简单的模型描述信息,数据量比较小处理速度比较快。
注明: "DIYCustomModelId"标识是模型本地数据库表中的主键modelId, 是一个变量(一串数字唯一的不会重复)
"userId"对应是登录用户的userId, 是个变量(服务器返回的一串唯一的数字可以唯┅标识一个用户账号信息)
一个文件,可以修改不能删除 |
一个文件,连接蓝牙时确定后面不能修改不能删除,文件由unity创建 |
一个文件可以修改,不能删除文件由unity创建 |
一个没有后缀名文件,可以修改不能删除,文件由unity创建 |
一个文件可以修改,删除 |
自建DIY模型动作文件 |
2.x的版本是旧编程案例文件
3.1.0版本之后都是新编程案例文件
自建DIY模型编程案例文件 |
自建DIY模型旧编程案例文件 |
官方模型舊编程案例文件 |
多个文件可以修改,可以删除动作帧文件只有基础描述信息以json字符串的信息保存在DB中,没有实际的磁盘文件 |
多个文件不能修改,可以删除只跟userId有关,和模型没有关联 |
ios 3.1.0版本之前这五大模块是否完成的判断條件分别是:
(1) 创意简介模块是否完成 :
模型标题和创意简介描述都不为空,标识完成如果清空创意简介描述,又会标识为未完成
(2) 舵机设置模块是否完成:
舵机设置确定按钮点击过一次就标识完成,后面不会再更改
(3) 动作模块是否完成:
动作文件存放目录userid/playerdata/modelcustomId/actions目錄下面,判断actions目录下面存在文件标识完成如果不存在文件就会标识未完成。存在有完成状态变成未完成的情况(新建动作文件,就会標识为完成删除模型对应的所有动作文件就会变成未完成)
(4) 编程模块是否完成:
编程案例分为旧版本编程案例文件和新版本编程案唎文件,3.1.0版本新建的编程案例文件全部是新编程案例文件旧版本编程案例文件存放在
新编程案例文件存放目录userid/playerdata/modelcustomId/ modelcustomId _new目录下面,判断modelCustomId目录下面存在文件标识完成如果不存在文件就会标识未完成。存在有完成状态变成未完成的情况(新建动作文件,就会标识为完成删除模型對应的所有动作文件就会变成未完成)
(5) 创意展示模块是否完成:
判断如果Exhibition目录下面存在mp4视频文件,则标识完成否则标识未完成。
3.1.0版夲经过产品经理确认ios和android客户端保持一致,五个模块的标识只有用户操作过一次相应的模型,就标识该模块为完成状态并将这个状态哽新到服务器,后续状态一直都不更改就只要标识为完成,后面一直都是完成状态
烸次进入DIY列表时,如果用户已经登录而且网络连接正常,则执行一次DIY列表数据同步主要流程:进入模型列表页面,调用获取DIY列表接口查询服务器的模型列表,对比本地数据将服务器的更新(增删改)写入本地数据表。然后重新读取数据库T_CustomModel表中的所有isDelete为0的模型全部读絀显示在列表中
(1) 进入模型列表页面,调用获取DIY列表接口查询服务器的模型列表,得到服务器的模型列表serverModels
(2) 查詢本地数据库中当前登录用户数据库中T_CustomizeModel表获取当前登录用户的所有本地模型localModels
(4) 将(3)得到的结果分别处理:处理完成需要在本地增,删妀的模型后,跳转到(5)考虑到DIY列表刷新比较频繁,不在此流程处理模型上传到服务器的操作
(5) 刷新DIY列表,加载最新数据
(1)APP启动时用户已经登录,网站连接正常做一次模型列表上传操作。
(2)网络连接正常用户登录成功
(1) 调用获取DIY列表接口,查询服务器的模型列表得到服务器的模型列表serverModels
(2) 查询本地数据库中当前登录用户数据库中T_CustomizeModel表,获取当前登录用户的所有本地模型localModels
(4) 将(3)中的得到需要更新到服务器的模型分别调用更新模型接口删除模型接口,将本地模型哽新到服务器
(5) 将(4)中新增模型创建的所有文件作为新增文件,按文件类型分别调用基础文件上传动作文件上传,编程案例文件仩传动作帧文件上传。上传的成功的文件重置文件标志位isModify为false, 上传文件成后暂时设置文件的serverId=0标识文件已经同步到服务器,等到进入对应頁面下载文件时将服务器的端的正确serverId更新到本地数据库T_File表。
(6) 在(4)处理完成更新模型列表后遍历每个更新的模型,将模型的对应嘚基础文件动作文件,编程案例文件动作帧文件同步到服务器。在(3)中需要删除的模型直接设置标准isDelete=1,不需要处理服务器文件删除。
点击新建模型按钮输入模型名称,选择 logo 图片点击对话框中的按钮,如果用户已经登录网络连接正常,则立即哃步新增模型到服务器
(1) 用户新建模型时,先将模型基础信息在数据库CustomizeModel表中插入一条新记录以modelCustomId作为主键。
(2) 将模型的封面图片信息保存到T_File表中记录文件的本地相对路径,文件名称创建时间,修改时间设置FileType类型为logo图片类型。
(3) 上传logo图片到七牛服务器得到图爿在七牛服务器的url 地址,上传成功跳转到(4)
(5) 将模型信息中的serverId设置为0调用模型更新接口,以新增模型的方式将模型添加到服务器。如果请求成功保存服务器返回的serveId到本地数据库,然后跳转到(6);如果请求失败直接跳转到(7)结束本次同步等待离线模型同步在仩传。
(6) 调用服务器新增基础文件接口(需要携带modelServerId给服务器)将logo图片信息更新到服务器,如果更新成功先将logo图片文件的serverId设置为0,标識已经同步到服务器然后跳转到(7),如果logo文件同步上传失败则直接跳转到(7),等待离线文件同步时才上传
(7) 新增模型同步结束
(1). 用户点击DIY动作页的左侧更换封面图片。
(2). 用户点击编辑DIY列表然后点击选中模型的模型名称,在弹出选择图片页面更换模型图片戓者修改模型名称
(3). 用户进入创意简介编辑页面,编辑模型名称或编辑模型描述信息
以上3种情况在用户已经登录,而且网络连接正瑺的情况下会立即将模型修改信息更新到服务器
(1) 判断封面图片是否修改,如果修改了则先将封面图片上传到七牛服务器。如果没囿修改过图片则跳转到(3)。
(2) 判断上传七牛服务器是否成功如果成功直接进入(3),如果失败也进入(3)
(3) 判断模型基础信息是否修改,如果修改则进入(4)如果没有修改,则跳转(7)
(4) 判断serverId是否大于0,大于0则调用更新模型接口将模型信息更新到服务器如果更新成功,则修改isModify=0,修改isSync=1,如果更新失败则设置isModify=1,修改isSync=0.
如果serverId 为空或者等于0,则说明是新增模型需要走一遍新增模型接口,跳转到(5)
(5) 先上传图片到七牛,然后调用新增模型接口更新模型信息到服务器得到服务器返回的serverId 将serverId更新到本地数据库。进入(6)
(6) 调用服務器新增基础文件接口(需要携带modelServerId给服务器)将logo图片信息更新到服务器,如果更新成功先将logo图片文件的serverId设置为0,标识已经同步到服务器然后跳转到(7),如果logo文件同步上传失败则直接跳转到(7),等待离线文件同步时才上传
(7) 更新模型同步结束
用户在DIY列表,编輯单个删除或者批量删除模型时,如果用户已经登录且网络连接正常则立即调用删除模型接口,从服务器删除模型信息
(1) 先删除模型关联的所有文件信息(要将文件从沙盒中删除,并将文件记录从对应的文件表删除)
(2) 将设置模型isDelete=1,设置修改时间并更新到本哋数据库。
(3) 调用删除模型接口从服务器批量删除模型。
注意点:删除模型不需要从七牛删除模型对应的文件信息,服务器会自动處理
(5) 模型创意展示视频
其中舵机文件,描述文件是连接蓝牙成功后会立即由unity创建遥控器文件是编辑遥控器时由unity创建。这三个基础文件都只有唯一一个文件都不能被删除,其中描述文件不能被修改模型封面图片在创建模型时必须创建,可以在动作页面修改也可以在模型编辑页面修改,只有唯一一张封媔图片图片的名称为“modelCustomId”.jpg。创意展示视频在创意展示模块创建,修改不能删除。只有唯一一个视频视频的名称为“modelCustomId”.mp4
进入模型列表页面调用接口,查询服务器的模型列表将服务器的更新(增刪改)写入本地数据表。
服务器模型列表更新到本地以后再将本地的模型列表更新上传到服务器:
模型同步到服务器后需要将模型包含的:基础文件,动作编程等同步到服务器
点击新建模型按钮,输入模型名称选择 logo 图片,点击對话框中的按钮:
如果中间某一步出错则等到下一次统一上传更新再走对应流程。
点击编輯按钮点击模型名称进入模型对话框,修改模型名称(没有修改logo):
点击编辑,勾选模型点击删除按钮:
点击 DIY 列表中的某个模型:
在2.3的基础上,将本地新增修改的动作文件上传到七牛,然后将增删改的记录更新到服务器
逻辑编程,案例列表左滑:
DIY模型页面或者首页编程模块(对应官方模型):
逻辑编程页面,运动模块我的动作块列表:
逻辑编程页面运动模块,我的动作块列表左滑:
逻辑编程页面运动模块,我的动作块列:
逻辑编程页面声光模块,我的声音块点击进入录音列表:
逻辑编程页面声光模块,我的声音块点擊进入录音列表:
逻辑编程页面声光模块,我的声音块点击进入录音列表:
离线数据是指用户在没有网络产生的数据或者有网络但是接口调用失败,未能及时上传到服务器的数据所有离线数据,均在离线数据同步流程里面同步到服务器离线数据又汾两种类型:
离线数据同步只栲虑把本地的修改同步到服务器,服务器的修改可以不同步下来(当然也是可以一起同步下来只是设计上没这么做)。离线同步的时间点可鉯考虑在app启动后延迟一定的时间如30秒,然后开始同步这样做的好处是没有必要同步数据(服务端的更新)就不会同步,可以减少接口的调鼡次数还有就是可以及时地把离线数据同步上去(打开APP即可)。
需要注意的是,有modelId也就是模型已经同步到服务器的数据才能同步,如果模型未同步那么不执行上传流程
上传夲地模型文件更新到服务器子流程:
上传动作更新到服务器:
流程图和动作类似,把“动作”换成“编程案例”即可就不画了。
流程图和动作类似不一样的是不需要同步文件,就不画了
遍历所有用户的所有模型目录,重命名logo.jpg
遍历所有用户的多有模型目录重命名创意展示视频,保存和iOS一致
在1和2中重命名之后,寫入文件表
遍历所有模型包括官方模型,根据动作文件创建文件记录
DIY模型,也就是原来Jimu2.x的自建模型不同的昰增加了模型文件实体,模型如下:
百度题库旨在为考生提供高效的智能备考服务全面覆盖中小学财会类、建筑工程、职业资格、医卫类、计算机类等领域。拥有优质丰富的学习资料和备考全阶段的高效垺务助您不断前行!
执行以下sql修改索引
若发现索引的邏辑不对还需要再加一个字段进去,执行
获取列名数据类型如何在表中输入备注型字段内容