保存通话记录 二

上次写的服务器保存通话记录 存在两个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.90555 lat=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 stub
		final String createtime="2012-09-28 17:35:39";
		new Thread(new Runnable() {
			
			@Override
			public 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 stub
				DriverInfoLogic 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() {
			
			@Override
			public void run() {
				// TODO Auto-generated method stub
				DriverInfoLogic 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(); 
	

}}

 

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

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

 

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

 

你可能感兴趣的:(保存通话记录 二)