⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pctalk.c

📁 手机点菜系统手机端,利用GPRS实现菜名上报
💻 C
📖 第 1 页 / 共 3 页
字号:
	return 0;
}
//--------------------------------------------------------------------------------------------

short dt_send_tab_data_doing(unsigned char des,unsigned char src,int fsid,int type_comm)
{
	unsigned char msg[30];
	int datalen;
	int i,j;
	int rec_size;
	unsigned long count;
	char *recwfbuf;
	char flag;
	int NUM_TO_SEND;
	int pos;
	unsigned long count_send=0;
	unsigned char *pTmp;
	unsigned char data[MAX_NUMBER_DT_DATA+30];
	int k=0;//临时 LZM
	
			
        count = DB_count_records(fsid);
	sprintf(msg,"发送表%d共%d条...",fsid+1,count);
	DispStr_CE(0,0,msg,DISP_POSITION|DISP_CLRSCR);            
	if(type_comm==0)
	{
		data[0] = CMD_RTD;
		data[1] = CMD_RECV_DATA;
		data[2] = fsid;
		count_send=0;
        	rec_size = g_rec_size[fsid];
		NUM_TO_SEND = (MAX_NUMBER_DT_DATA - 10)/rec_size;
		for (i=0; i < count/NUM_TO_SEND; i ++)
		{
		   	sprintf(msg, "%3d", (i+1)*NUM_TO_SEND);
               		DispStr_CE(2,2,msg,DISP_POSITION);
			datalen = 3;
		  	for(j=0,pos=0;j<NUM_TO_SEND;j++)
			{
			      recwfbuf = (char *)DB_jump_to_record(fsid, i*NUM_TO_SEND+j, &flag);
			      if(flag) continue;
			      memcpy(&data[3+pos*rec_size],recwfbuf,rec_size);
   			      datalen += rec_size;
   			      pos++;
   			      count_send++;
  			}
			if(dt_send(des,src,data, datalen) != SUCCESSFUL)
			{
			    TRACE("dt_send err:send doing");
	   		    return FAILURE;
			}
		}
		datalen = 3;
		if(count%NUM_TO_SEND)
		{
		   for(j=0,pos=0;j<count%NUM_TO_SEND;j++)
		   {
		     recwfbuf = (char*)DB_jump_to_record(fsid,(count/NUM_TO_SEND)*NUM_TO_SEND+j,&flag);
		     if(flag) continue;
		     memcpy(&data[3+pos*rec_size],recwfbuf,rec_size);
   		     datalen += rec_size;
   		     pos++;
   		     count_send++;
   		   }
		   if(dt_send(des,src,data, datalen) != SUCCESSFUL)
		   {
			TRACE("dt_send err:send doing1");
		   	return FAILURE;
		   }
		}
	}else { //上传客户点菜内容  only one record every time
		tab_client_menu *p_rec;
		unsigned char serial_menu_NO[10];
		unsigned char append[MAX_APPEND_PERMIT][16+1];
		unsigned char menu_NO[10];
		 
		data[0] = CMD_RTD;
		data[1] = CMD_RECV_DATA;
		data[2] = fsid;
 		count_send=0;
 			
		g_waiter_NO[4] = 0;
		g_waiter_PWD[4] = 0;
		g_desk_NO[4] = 0;
		for(i=0;i<count;i++)
		{
		       pTmp = data+3;
		       p_rec = (tab_client_menu *)DB_jump_to_record(fsid, i, &flag);
		       if(flag) continue;
		       memset(serial_menu_NO,0,sizeof(serial_menu_NO));
		       memcpy(serial_menu_NO,p_rec->serial_menu_NO,sizeof(p_rec->serial_menu_NO));
			   
		       memset(menu_NO,0,sizeof(menu_NO));
		       memcpy(menu_NO,p_rec->menu_NO,sizeof(p_rec->menu_NO));

		       for(j=0;j<MAX_APPEND_PERMIT;j++)
		       {
		       		memset(append[j],0,17);

		       		memcpy(append[j],p_rec->append[j],sizeof(p_rec->append[j]));
		       		
		       }
		      /* if(k++==0) 
		       if(append[2]!='0'&&append[2]>='8'||append[2]<='0'){
			memcpy(append[2],'0',17);
			memcpy(append[3],'0',17);
			memcpy(append[4],'0',17);
			} */
			/*for(k=0;k<MAX_APPEND_PERMIT;k++)
			{
				if(append[k]>='8'||append[k]<='0')
				memcpy(append[k],'0',17);
			}*/
		       		     	
                       //参数:上传类型 台号 人数 服务员工号 密码 手持机编号 流水号 套餐编号 套餐数量 菜的编号 菜的数量 菜的附加项1..5  
		       sprintf(pTmp," %d|%s|%d|%s|%s|%d|%d|%s|%d|%s|%d|%s|%s|%s|%s|%s\r\n",
			   		   g_upld_client_mode1,      //上传类型 0:即起上传 1:叫起上传      
			   		   g_desk_NO,               //台号
			   		   g_person_num,            //人数
					   g_waiter_NO,             //服务员工号
					   g_waiter_PWD,            //密码
					   g_id_self,               //手持机编号 
					   g_comm_current_id,       //流水号
					   serial_menu_NO,          //套餐编号
					   p_rec->serial_menu_quant,//套餐数量
					   menu_NO,                 //菜的编号
					   p_rec->menu_quant,       //菜的数量
					   append[0],               //菜的附加项1..5
					   append[1],
					   append[2],
					   append[3],
					   append[4]);
		      datalen = 3+strlen(pTmp);			   
		      if(dt_send(des,src,data, datalen) != SUCCESSFUL)
		      {
			    TRACE("dt_send err:send doing");
			    return FAILURE;
		      }
		      count_send++;
		      sprintf(msg, "%3d", count_send);
               	      DispStr_CE(2,2,msg,DISP_POSITION);
		}
	}
	//数据记录已发送完毕
	data[0] = CMD_RTC;
	data[1] = CMD_RECV_DATA;
	datalen = 2;
	if ((dt_send(des,src,data, datalen) != SUCCESSFUL))
	{
		TRACE("dt_send err:send doing2");
		return FAILURE;
	}
		    
	sprintf(msg,"传输完毕共%d条", count_send);
        DispStr_CE(0,2,msg,DISP_POSITION|DISP_CLRLINE);
        backup_client_data();	
        return SUCCESSFUL;
}

//等待服务器传来的结果,并显示上传结果
short wait_send_result(unsigned char des,unsigned char src)
{
	short ret;
	unsigned char des_recv,src_recv;
	int datalen,datalen1=0;
	unsigned short Acknowledge;
	int counter = 25;
	unsigned char data[MAX_NUMBER_DT_DATA+30];
	unsigned char data1[MAX_NUMBER_DT_DATA+30];
        int step = 0;
        
        //此处添加一个PC发断线断线功能以确认服务器是否准确完成菜单的上传通讯功能
	//如果没有这个断线确认过程有可能出现手持机认为上传成功而服务器认为没有成功完成.
	//从而出现客户在台面死等菜的情况,
	//此处服务器只有在所有的上传通讯成功完成后才发出断线信息,如果没有接收道断线信息
	//提示客户使用附加功能中的查询本台的点菜情况
	memset(data1,0,sizeof(data1));
	while(1) //等待 25次 25 * 110ms
	{
		ret = dt_recv(&des_recv,&src_recv,data,&datalen,&Acknowledge) ;
		if(ret == SUCCESSFUL)
		{
			if(des_recv!=des||src_recv!=src)
			{
				TRACE("w_t_d_r:des&src err");
				DispStr_CE(0,0,"等待上传结果失败",DISP_CENTER|DISP_CLRSCR);
				delay_and_wait_key(0,EXIT_KEY_ALL,0);
				return FAILURE;
			}
			if((data[0]==CMD_RTC)&&(data[1]==CMD_RECV_DATA))
			{
				TRACE("w_t_d_r:cmd ok");
				//delay_and_wait_key(0,EXIT_KEY_ALL,0);
				memcpy(data1,data,datalen);
				datalen1 = datalen;
				step = 1;
			}else if((data[0]==CMD_REQ)&&(data[1]==CMD_DISCONNECT)){
				step = 2;
				break;
			}
		}
		if(counter--<=0) break;
	}
	if(counter>0)//没有超时退出
	{
		if(datalen1<3) 
		{
			DispStr_CE(0,0,"没有结果代码",DISP_CENTER|DISP_CLRSCR);
			delay_and_wait_key(0,EXIT_KEY_ALL,0);
			return SUCCESSFUL; //此处为上位机的传输数据错误,不是通讯的问题
	        }else {
		   ret = disp_com_result(data1+3,datalen1-3,"数据上传");
      		   return ret;
       	        } 
       	}else{
//step==1 此处的情况是最后的断线操作的应答中的答可能出错,pc认为成功而手持机认为失败,故作此提示
       	        if(step == 1)
       	        {
	        	DispStr_CE(0,1,"通讯有误!",DISP_CENTER|DISP_CLRSCR);
	               	DispStr_CE(0,3,"请使用附加功能",DISP_CENTER);
	               	DispStr_CE(0,5,"查询本台点菜情况",DISP_CENTER);
	               	delay_and_wait_key(0,EXIT_KEY_ALL,0);
	               	return FAILURE;
	        } else {//此处只能是 step = 0 失败通讯一定失败
			DispStr_CE(0,2,"等待传输结果超时",DISP_POSITION);  
			delay_and_wait_key(0,EXIT_KEY_ALL,0);
	               	return FAILURE;
		}
	}
}

//-------------------------------------------------------------------------
//等待服务器传来的查询结果,并显示查询结果(这个是wait_send_result--COPY,如果你不
//清楚它的功能请使用wait_send_result)
short wait_lack_result(unsigned char des,unsigned char src)
{
	short ret;
	unsigned char des_recv,src_recv;
	int datalen,datalen1=0;
	unsigned short Acknowledge;
	int counter = 25;
	unsigned char data[MAX_NUMBER_DT_DATA+30];
	unsigned char data1[MAX_NUMBER_DT_DATA+30];
        int step = 0;
        char disk_id_cha[16];
        
        //此处添加一个PC发断线断线功能以确认服务器是否准确完成菜单的上传通讯功能
	//如果没有这个断线确认过程有可能出现手持机认为上传成功而服务器认为没有成功完成.
	//从而出现客户在台面死等菜的情况,
	//此处服务器只有在所有的上传通讯成功完成后才发出断线信息,如果没有接收道断线信息
	//提示客户使用附加功能中的查询本台的点菜情况
	memset(data1,0,sizeof(data1));
	while(1) //等待 25次 25 * 110ms
	{
		ret = dt_recv(&des_recv,&src_recv,data,&datalen,&Acknowledge) ;
		if(ret == SUCCESSFUL)
		{
			if(des_recv!=des||src_recv!=src)
			{
				TRACE("w_t_d_r:des&src err");
				DispStr_CE(0,0,"等待查询结果失败",DISP_CENTER|DISP_CLRSCR);
				delay_and_wait_key(0,EXIT_KEY_ALL,0);
				return FAILURE;
			}
			if((data[0]==CMD_RTC)&&(data[1]==CMD_RECV_DATA))
			{
				TRACE("w_t_d_r:cmd ok");
				memcpy(data1,data,datalen);
				datalen1 = datalen;
				step = 1;
				break;
			}else if((data[0]==CMD_REQ)&&(data[1]==CMD_DISCONNECT)){
				step = 2;
				break;
			}
		}
		if(counter--<=0) break;
	}
	if(counter>0)//没有超时退出
	{
		if(datalen1<3) 
		{
			DispStr_CE(0,0,"没有查询结果代码",DISP_CENTER|DISP_CLRSCR);
			delay_and_wait_key(0,EXIT_KEY_ALL,0);
			return SUCCESSFUL; //此处为上位机的传输数据错误,不是通讯的问题
	        }else {
	        	memset(disk_id_cha,0,strlen(disk_id_cha));
	        	sprintf(disk_id_cha,"第%s台",query_desk_no);
		  	ret = disp_lack_see(data1+3,datalen1-3,disk_id_cha);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -