保存通话记录 二

来源:互联网 发布:openwrt 修改mac 编辑:程序博客网 时间:2024/05/19 15:42

上次写的服务器保存通话记录 存在两个action请求造成的数据重复上传错误

 

 

新写的接口规范如下:

 

6 保存用户拨打记录接口

6.1 调用地址:

http://localhost/c/invok/saverecord?driverid=1&userkey=2&telephone=455&lat=3990555&lon=11621225&coopid=10000&time=0&createtime=2012-09-19 16:56:27&distime=100

 

6.2 参数说明:

driverid:司机id          如:1  driverid=1

userkey:用户标识符      如:2    userkey=2

telephone: 用户的电话     1234568798 telephone=1234568798 

lat : 用户所在纬度*100000,如:用户所在纬度为 39.90555lat=3990555

lon: 用户所在经度*100000,如:用户所在经度为 11.621225lat=11621225

coopid   所属平台           如:所属平台为  10000     coopid=10000从司机的属性coopId得到

time:呼叫时长 拨打电话的时长

createtime创建时间如:2012-09-19 16:56:27   时间类型(yyyy-MM-dd HH:mm:ss)错误可能造成上传数据的创建时间为空

distime=100 上次记录到这次上传的时间间隔用于计算正确的上传时间(解决由于手机时间错误可能造成时间上传时间不正确)

 

 

6.3 返回结果                      

我的代驾列表的JSONObject

示例代码:

{"code":0,"msg":"添加记录失败"}

{"id":22,"code":1,"msg":"添加记录成功"}

 

 

逻辑如下

--  点击通话按钮  第一次通话A  首先保存数据到本地 然后开始上传无time,distime参数  或者time,distime为空  保存服务记录

----A1 如果服务器正确响应  说明数据正常保存 (code=1)   删除本地记录

---A2  如果服务器没有正确响应  code=2不做处理

--通话结束  监听程序进行第二次数据上传B  首先保存数据到本地 然后开始上传time大于0 (通话时间大于0)参数

----B1 如果服务器正确响应  说明数据正常保存 (code=1)   删除本地记录

---B2  如果服务器没有正确响应  code=2不做处理

--程序返回android页面 调用onresum 方法 触发本地记录上传C   此时有distime(手机时间间隔)

----C1 如果服务器正确响应  说明数据正常保存 (code=1)   删除本地记录

---C2  如果服务器没有正确响应  code=2不做处理

 

服务器端先查询有无记录 再更据没有记录添加数据 

逻辑上没有错误 但由于服务器返回数据较慢 

错误重现:

public class DjbCallSave {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubfinal String createtime="2012-09-28 17:35:39";new Thread(new Runnable() {@Overridepublic void run() {//String r=HttpUtil.get
//("http://localhost/c/invok/saverecord?//driverid=2102&userkey=+8618611126726
//&telephone=1234&lon=11621420&lat=3990393&coopid=1000&time=0&createtime=2012-09-28%2011:17:52",null, "UTF-8");//System.out.println(r);// TODO Auto-generated method stubDriverInfoLogic logic = new DriverInfoLogic();HashMap map=new HashMap();String userkey="A100001355683E";String key=createtime+userkey;   map = logic.saveservice(2507l, userkey, 1l, 1l, 10086,1000l, 0l,createtime,10);System.out.println("1:"+map);}}).start(); new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubDriverInfoLogic logic3 = new DriverInfoLogic();HashMap map=new HashMap();String userkey="A100001355683E";String key=createtime+userkey;   map = logic3.saveservice(2507l, userkey, 1l, 1l, 10086,1000l, 0l,createtime,10);System.out.println("2:"+map);}}).start(); 

}}

 

压力测试(保存通话记录 上一篇中的服务器代码)  结果同一条数据保存了两次 

尝试 同步锁  由于数据访问量大  故不能等待上一次记录 然后进行下一次记录

 

此时逻辑已经理清楚 等待服务端代码修改 具体解决方法我会在下一篇中说明

 

原创粉丝点击