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

📄 trade.c

📁 税控收款机源码:拼音输入法,LCD,VFD驱动,IC卡驱动,税控国标
💻 C
📖 第 1 页 / 共 5 页
字号:
				key_tmp=get_key();
				if((key_tmp==CASH)||(key_tmp==VOID)||(low_pwr))break;
			}
			if((key_tmp==VOID)||(low_pwr)){if(key_tmp==VOID)re_lcd=1;continue;}//退出废票
				//2005.12.30
			clear_lcd(3,1);
			strcpy(buf,"退货中...");
			lcd_disp(3,0,buf);
            
			for(x=0;x<record.item_num;x++)
			  {
			   
			   for(i=0;i<20;i++)
			    {
				 if(record.item[x].item_name[19-i]==0x20)
				   record.item[x].item_name[19-i]=0;
                 else break;
				 }
			   
			   menu[x].no=0;
			   menu[x].branch=0;
			   }
			i=0;
            for(j=0;j<MAX_BRANCH_NUM;j++)
				{
				 if((i==record.item_num)||(low_pwr))break;
				 rlt=get_branch(&branch,j);
				 if(rlt)break;
				 for(x=0;x<record.item_num;x++)
				 {
                 
				  if(
				    (memcmp(branch.name,record.item[x].item_name,strlen(record.item[x].item_name))==0)//部门中找到名称一致退出
					&&(menu[x].branch==0)&&(menu[x].no==0)
				   )
				  {
				    send_str(20,record.item[x].item_name);
					menu[x].branch=j+1;
				    i++;
					if(i==record.item_num)break;
				  }
				 }
				}
				//send_char(i);
				if(i<record.item_num)//部门中未找到名称一致到PLU中继续找
				{
				  for(j=0;j<g_max_plu_no;j++)
				  {
				    
				    if((i==record.item_num)||(low_pwr))break;
				    rlt=get_plu(&plu,j);
				    if(rlt)break;
                   
					
					for(x=0;x<record.item_num;x++)
				    {
                     if(
					    (memcmp(plu.name,record.item[x].item_name,strlen(record.item[x].item_name))==0)
					    &&(menu[x].branch==0)&&(menu[x].no==0)
					    )
				     {
					 menu[x].no=j+1;
					 i++;
					 if(i==record.item_num)break;
				    }
				   }
				 }
			  }
		    if(low_pwr)continue;
			for(i=0;i<record.item_num;i++)
			{
				menu[i].quantity=record.item[i].num;
				menu[i].money=record.item[i].money;
				//2005.10.14
                //menu[i].price=record.item[i].price;
				menu_price[i]=record.item[i].price;
				//2005.7.26
				//if(record.item[i].no & 0x8000) //最高位为1则表示为PLU编号
					//menu[i].no=record.item[i].no & 0x7FFF;
				//else
				//	menu[i].branch=record.item[i].no;
				//memcpy(trade_info.name[i],record.item[i].item_name,20);
				//send_str(20,record.item[i].item_name);
			}
			
			//原发票号作为付款单位
			sprintf(buf,"%08lu",num);
			//2005.11.29
            for(i=0;i<32;i++)buf[8+i]=0x20;//补空格
            buf[40]=0;
			strcpy(trade_info.customer_name,buf);
			
			//strcpy(trade_info.customer_name,record.disburse_unit);
			//for(i=0;i<40;i++)trade_info.customer_name[i]=record.disburse_unit[i];//补空格
			trade_info.invoice_no=num;
			trade_info.invoice_type=RETREAT_INVOICE;
			trade_info.menu_num=record.item_num;
			trade_info.pay_way=PAY_CASH;
			trade_info.total_money=record.invoice_money;
			trade_info.trade_end=1;
			//local_retreat = 1;//本机退票
           //send_char(trade_info.receiver_no);
			//限额检查
			if(is_trade==YES)
			{
				rlt=is_money_over(&menu,&trade_info);
				if(rlt)
				{
				    clear_lcd(0,3);
					error=rlt;
					continue;
				}
			}
			//该票号做退票处理,打印一张退票发票
		    //clear_lcd(3,1);
			//strcpy(buf,"退货中...");
			//lcd_disp(3,0,buf);
			#ifdef GS
				rlt=save_data_GS();
				if(rlt)
				{
					error=rlt;
					continue;
				}
				trade_info.trade_status=WAITTRADE;first=1;
			#else
				rlt=save_data_DS(&menu,&trade_info,is_trade,menu_price);
				if(rlt)
				{
					error=rlt;
					continue;
				}
			#endif
			if(is_trade==YES)
			{
				//从税控卡获得发票卷的信息
				rlt=get_invoice_roll_info(&invoice_roll_info);
				if(rlt)
					return(rlt);
			}
			num=0;
			set_value0(numkey,(uint)sizeof(numkey));
			trade_info.trade_status=WAITTRADE;first=1;
			continue;
		
	case RESCISSORY: //废票键
		    //---------直接折扣----------------//
		if(numkey[0]==0 ) //没有按下数字键
		{
			error=KEY_ERROR;
			continue;
		}
		if((trade_info.trade_status==WAITPAY)||(trade_info.trade_status==TRADEING))//直接折扣
		{
			if(trade_info.trade_status==WAITPAY)//总折扣
			{
				if(num>trade_info.total_money)
				{
					error=OVER_RANGE_ERROR;
					continue;	
				}
				
				tmp=0;
				for(i=0;i<trade_info.menu_num-1;i++)
				{
					tmp+=menu[i].money*num/trade_info.total_money;
					menu[i].money-=menu[i].money*num/trade_info.total_money; //按比例分配
					
				}
				//最后一个商品
				menu[i].money-=num-tmp;
				trade_info.total_money-=num;
				trade_info.decrease_money+=num;
			}
			else
			{
				if(trade_info.trade_status!=TRADEING ||
					menu[trade_info.menu_num-1].money==0 )
				{
					error=KEY_ERROR;
					continue;
				}
				if(trade_info.subtotal_money>0)//小计商品折扣/加成
				{
					if(num>trade_info.subtotal_money)
					{
						error=OVER_RANGE_ERROR;
						continue;
					}
					tmp=0;
					for(i=trade_info.subtotal_menuno;i<trade_info.subtotal_menunum-1;i++)
					{
						tmp+=menu[i].money*num/trade_info.subtotal_money;
						menu[i].money-=menu[i].money*num/trade_info.subtotal_money; //按比例分配
					
					}
					//最后一个商品
					menu[i].money-=num-tmp;
					trade_info.subtotal_money-=num;
					trade_info.total_money-=num;
					trade_info.decrease_money+=num;
				}
				else //当前单项商品折扣/加成
				{
					if(num>menu[trade_info.menu_num-1].money)
					{
						error=OVER_RANGE_ERROR;
						continue;
					}
					menu[trade_info.menu_num-1].money-=num;
					trade_info.total_money-=num;
					trade_info.decrease_money+=num;
				}
			}
			sprintf(buf,"-%lu.%02u",num/100,(uint)(num%100));
			num=0;
			set_value0(numkey,(uint)sizeof(numkey));
			rlt=disp_trade(ALL_AREA,&menu,buf,INPUT_AREA,&trade_info);
			if(rlt)
			{
				error=rlt;
				continue;
			}
			continue;
		}
		else
		{//废票                                  
			if(trade_info.trade_status!=READYTRADE)
			{
				error=KEY_ERROR;
				continue;
			}
			//num为废票的截止号,该票号做废票处理,添加笔交易记录
			if(num==0 || num<invoice_roll_info.invoice_curr_no ||
				num>invoice_roll_info.invoice_end_no)
			{
				//无效票号
				error=INVO_NO_ERROR;
				continue;
			}
			sprintf(buf,"%lu",num);
			if(strlen(buf)>MAX_INVOICE_LENGTH)
			{
				//无效票号
				error=INVO_NO_ERROR;
				continue;
			}
				  //废连续票号
			tmp=invoice_roll_info.invoice_curr_no;
			sprintf(buf,"废票的起止号:\r%08lu--%08lu",tmp,num);
            lcd_disp(1,0,buf);
            sprintf(buf,"按[确定]废除");
			lcd_disp(3,0,buf);
			//2005.10.24	
			while(1)
			{
				key_tmp=get_key();
				if((key_tmp==CASH)||(key_tmp==VOID)||(low_pwr))break;
			}
			if((key_tmp==VOID)||(low_pwr))
			{
				if(key_tmp==VOID)
					re_lcd=1;
				continue;
			}//退出废票
			for(i=0;i+tmp<=num;i++)
			{
				trade_info.menu_num=0;
				trade_info.invoice_type=RESCISSORY_INVOICE;
				trade_info.total_money=0;
				trade_info.trade_end=1; //本次交易结束
				trade_info.invoice_no=i+tmp;
				#ifdef DS
					rlt=save_data_DS(&menu,&trade_info,is_trade,menu_price);
				#endif
				if(rlt)
				{
					error=rlt;
					continue;
				}
			 
			}
			{
				//2005.8.27
				beep(250);
				strcpy(buf,"请核对当前显示/打印票号");
				lcd_disp(3,0,buf);
				clear_lcd(0,2);
			  
				while(1)
				{
					key_tmp=get_key();
					if(key_tmp)break;
					if(low_pwr)break;
				}
			}
			num=0;
			set_value0(numkey,(uint)sizeof(numkey));
			trade_info.trade_status=WAITTRADE;first=1;
			if(is_trade==YES)
			{
				//从税控卡获得发票卷的信息
				rlt=get_invoice_roll_info(&invoice_roll_info);
				if(rlt)
					return(rlt);
			}
			continue;
		}
	    break;
	    
		#ifdef HYS620
		case BACK_PAPER: //退纸键
			if(trade_info.trade_status!=WAITTRADE)
			{
				error=KEY_ERROR;
				continue;
			}
			back_on_dot(120);
			//first=1;
			continue;
		#endif
			
		case PAPER1:
			//走纸处理
			if(trade_info.trade_status!=WAITTRADE)
			{
				error=KEY_ERROR;
				continue;
			}
			if(g_invoice_locate) //黑标定位
			{
			   
	//		    Fast_feed_paper_hang(4);
				find_Black_mark();
			}
			else
			#ifdef C8_VER
			feed_on_line(1);  //走纸一行
			#else
			Fast_feed_paper_hang(120);//fpaper(1);
			#endif
			//first=1;
			continue;

		case QUANTITY: //数量

			{
				if(trade_info.trade_status==WAITPAY)
				{
					error=KEY_ERROR;
					continue;
				}
				//num为数量
				if(quantity>0 || numkey[0]==0 ||num==0)
				{
					error=KEY_ERROR;
					continue;	
				}
				if(num>MAX_QUANTITY)//999999999
				{
					error=NUMBER_MAX_ERROR;
					continue;
				}
				if(trade_info.menu_num+1>MAX_MENU_NUM) //每个台最大菜单数50
				{
					error=MENU_OVERFLOW_ERROR;
					continue;
				}
				//if(bar_codeinputflg)key_tmp=PLU;           //作为直接PLU处理
				trade_info.menu_num++;
				menu[trade_info.menu_num-1].money=0;
				menu[trade_info.menu_num-1].quantity=num;
				quantity=num;
				num=0;
				set_value0(numkey,(uint)sizeof(numkey));
				//menu[trade_info.menu_num-1].no=0;
				if(menu[trade_info.menu_num-1].no==0)
					menu[trade_info.menu_num-1].branch=DEFAULT_BRANCH;
				//显示
				rlt=disp_trade(ALL_AREA,&menu,"营业中...",QUANTITY_AREA,&trade_info);
				if(rlt)
				{ 
				   //send_char(rlt);
					error=rlt;
					continue;
				}
				trade_info.trade_status=TRADEING; //营业中
			}
			continue;		

		case PRICE: //单价键
			if(trade_info.trade_status==WAITPAY)
			{
				error=KEY_ERROR;
				continue;
			}
			//num为单价
			if(numkey[0]==0 || num==0)
			{
				error=KEY_ERROR;
				continue;
			}
			//2005.11.26
			is_fushu=0;
			if(num&0x80000000){is_fushu=0xaa;num&=0x7fffffff;}
			
            if(num>MAX_PRICE)
			{
				error=PRICE_MAX_ERROR;
				continue;
			}
			if(quantity==0)
			{
				if(trade_info.menu_num+1>MAX_MENU_NUM)
				{
					error=MENU_OVERFLOW_ERROR;
					continue;
				}
				//2005.11.26
				quantity=1;//数量为1
				//quantity=100;//数量为1
				trade_info.menu_num++;//菜单数加1
			}
			//bar_codeinputflg=0;
			//输入值范围检查

			if(is_mul_overflow(quantity,num) ||
				is_add_overflow(trade_info.total_money,a_mul_b(quantity,num,1)))
			{
				error=OVER_RANGE_ERROR;
				quantity=0;
				trade_info.menu_num--;
				continue;
			}

			if(menu[trade_info.menu_num-1].no==0)
				menu[trade_info.menu_num-1].branch=DEFAULT_BRANCH;
			menu[trade_info.menu_num-1].quantity=quantity;
			//2005.10.14
	
			//menu[trade_info.menu_num-1].price=num;
			menu_price[trade_info.menu_num-1]=num;
			menu[trade_info.menu_num-1].money=a_mul_b(quantity,num,1);//计算金额
				
			quantity=0;
			
			//2005.11.26
			if(is_fushu==0xaa)
			{
			    rlt=trade_info.menu_num;
			    if(trade_info.menu_num>1)
				{
					for(i=0;i<trade_info.menu_num;i++)
					{
						if(menu[i].money==menu[trade_info.menu_num-1].money)//用输入负数的方法消除前面的项目
						{
							for(j=i;j<(trade_info.menu_num-1);j++)
							{
								memcpy(&menu[j],&menu[j+1],(uint)sizeof(menu[j+1]));
								menu_price[j]=menu_price[j+1];
								//send_str(4,&menu[i].money);
							}
							menu[trade_info.menu_num-2].quantity=0;
							menu[trade_info.menu_num-2].money=0;
							menu[trade_info.menu_num-2].branch=0;
							menu_price[trade_info.menu_num-2]=0;
							menu_price[trade_info.menu_num-2]=0;
							//for(i=0;i<trade_info.menu_num;i++) send_str(4,&menu[i].money);
							break;
						}
					}
				}
				menu[trade_info.menu_num-1].quantity=0;
			   menu[trade_info.menu_num-1].money=0;
			   menu[trade_info.menu_num-1].branch=0;
			   menu_price[trade_info.menu_num-1]=0;
			   menu_price[trade_info.menu_num-1]=0;
			   if(rlt>1)
			     {
				  trade_info.menu_num-=2;
				  if(trade_info.menu_num==0)
				  {
				   trade_info.total_money=0;
				   clear_lcd(0,3); 
			       continue;
				   }
				 }
			   else   trade_info.menu_num=0;
				if(rlt==1)
				{
					error=KEY_ERROR;
					clear_lcd(0,3); 
					continue;
				}
			}

			
			//trade_info.invoice_type=NORMAL_INVOICE;
			//限额检查
			if(is_trade==YES)
			{
				rlt=is_money_over(&menu,&trade_info);
				if(rlt)   //金额超额
				{
					error=rlt;
					menu[trade_info.menu_num-1].quantity=0;
					menu[trade_info.menu_num-1].money=0;
					menu[trade_info.menu_num-1].branch=0;
					trade_info.menu_num--;
					clear_lcd(0,3); 
					continue;
				}
				if(trade_info.menu_num>=PAGE_ITEM_NUM)//打印项数超
				{
					set_value0(numkey,(uint)sizeof(numkey));

⌨️ 快捷键说明

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