电子菜谱接口标准一、接口程序开发原理:1、接口程序的开发原理是基于文本+消息机制的。
文本是说要用到文本文件的读和写,消息是说要用到Windows 窗口消息的发与收。
2、Windows 系统允许不同的窗口或进程间使用消息交换数据,消息发送时可以带四个参数。
A、第一个参数叫接收窗口句柄,也就是说是Windows 给接受者分配的一个编号;B、第二个参数是消息类型标志,是用来给各种Windows消息做分类的,比如说按键类为10,窗口放大缩小及关闭为16,在我们系统中约定CP 与接口通信的消息固定为十进制的1536(十六进制0x600);C、第三参数wParam,是菜谱程序自己的窗口句柄,接口程序通过这个参数返回消息给菜谱程序(下文简称为CP程序)窗口。
C、四个参数lParam,是消息类型。
是我们自定义的消息类型,如数据下载,业务处理等。
3、菜谱程序和接口程序之间进行互交的所有文本文件都放在同一个目录下,为菜谱程序所在目录下的cp文件夹。
4、接口程序启动的时候把自己的窗口句柄写在文件CYHD.TXT文件里。
CP程序通过这个文件读取接口程序的窗口句柄,然后利用这个句柄进行消息发送和业务处理。
1.5. 执行命令,处理数据二、消息类型:消息的类型是指在消息中的lParm参数,即上文提到的消息函数的第四个参数CP 到接口程序:=0 — CP 查询接口程序是否存在,是否响应。
=1 —通道 1有请求,内容在T1.TXT中,请回复到R1.TXT。
=2 — CP 执行数据同步,请求提供同步所需要的数据,数据准备好并写好文件后,回复消息即可。
由程序到CP:=0 —接口程序响应查询请求,以让CP确认接口程序存在并能响应。
=1 —接口程序处理通道1相应的请求完毕,回复文件已在R1.TXT中。
=2 —同步所需数据已完成导出,导出的文件在CP目录下。
三、点菜发送功能过程:1、在电子菜上按发送后,CP 将接收到的数据写到T1.TXT中,并发送一消息给接口。
2、消息自动激活了接口中的消息处理过程,消息的第二个参数=1536(十六进制0x600)说明确实是来自CP 的消息,第三个参数是CP窗口句柄,消息第四个参数=1 代表是通道1的业务请求,接口程序去读T1.TXT文件,其中的请求类型码为“DCAI”,则转点菜处理函数。
3、接口程序处理完毕后,写处理结果或提示到R1.TXT文件,并通过消息的第三个参数(CP窗口句柄)返回消息给CP。
4、CP读R1.TXT,并把此信息返回给菜谱终端。
如果等待不到接口回送来消息,CP最多等待45秒后,会放弃此次操作,认为操作失败。
四、基础数据:1、基础数据是指需同步的数据,包括:meal.txt(菜品表)、meal_cate.txt (菜品类别表)、setmeal.txt(套餐表)、submeal.txt(套餐配菜表)。
2、CP程序需要同步最新的数据时则发出类型为2的消息,接口程序收到该消息后生成这些文本,完毕后接口程序回应类型为2的消息。
3、数据格式需要注意:(1)所有下载数据字段间无空格。
但当字段不足指定长度时都在右侧补空格(除非该字段右边再无其他字段则可以不补充空格)。
(2)所有数据文件包括交换文件都存放在双方约定的文件夹里(即上面提到的CP程序所在目录下的cp文件夹)。
(3)字段长度按照ANSI编码计算,即一个汉字计算为2位长度。
(4)以下示例使用’~’来代表空格,由于版面的原因,实际’~’数目并不等于空格数,正确的位数以格式描述为准。
1.菜品表.TXT格式:编号(10位)、类别号(10位)、中文名称(60位)、单价(10位) 、是否时价菜(10位) 、菜品口味(300位) 、菜品做法(300位)示例:1005~~~11~~五叶神炖鹌鹑~~~~~~~68.00~~~N1011~~~11~~花生猪脚汤/例~~~~~~50.00~~~N~~少油,少盐1012~~~11~~排骨莲藕汤/例~~~~~~30.00~~~N1014~~~12~~杨州炒饭~~~~~~~~~~~18.00~~~N1046~~~21~~加州红蟹~~~~~~~~~~~18.00~~~N~~加辣~~~~~~~清蒸=18,石烧=25备注:(1) 菜品口味是以’,’分割,例如: 少油,少盐(2) 菜品的不同做法是用不同价钱,例如: 清蒸=18,石烧=252.菜品类别表.TXT格式:类别编号(10位)、类别名称(40位)示例:11~~~~~~~~汤类12~~~~~~~~饭类13~~~~~~~~粉面类3.菜品套餐表.TXT格式:套餐编号(10位)、套餐名称(60位) 、套餐价格(10位)示例:1342~~~~~~套餐A~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~200.001343~~~~~~套餐B~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~300.004.菜品套餐内容表.TXT格式:套餐编号(10位)、配菜编号(10位)、可换配菜编号列表(200位)示例:1342~~~~~~1001~~~~~~1004,1009,1342~~~~~~1028~~~~~~1014,~~~~~1342~~~~~~1014~~~~~~1028,~~~~~1342~~~~~~1166~~~~~~1167,1168,1343~~~~~~1009~~~~~~~~~~~~~~~~1343~~~~~~1028~~~~~~1014,~~~~~1343~~~~~~1014~~~~~~1028,~~~~~五、业务处理:1.登录请求格式:类型码(20位)机器编码(20位) (目前保留,暂时填写0)工号(6位)密码(8位)示例:LOGIN0005742856返回格式:类型码(20位)成功否标记(=1成功,=-1不成功)服务员姓名(8位或空)示例:LOGIN1张小丫2.点菜请求格式:类型码(20位)工号(6位)台号(6位)人数(6位)菜品号(6位)、数量(6位)、单价(9位)、做法(60位)示例:DCAI0010002502001~2~~~~~24.00~~~~02005~1.50~~~38.50~~~~清蒸03007~1~~~~~50.00~~~~少辣返回格式:类型码(20位)成功否标记(=1成功,=-1不成功)信息提示示例:DCAI1点菜成功!3.查单请求格式:类型码(20位)工号(6位)台号(6位)示例:BVIEW0010002返回格式:类型码(20位)单号(8位)餐台状态(10位)菜品流水号(8位) 菜品号(6位) 数量(6位) 单价(9位) 菜品名称(60位) 做法(30位) 示例:BVIEW0002CHECK018001~~01001~1.6~~~~10.00~~~~鱼香肉丝018003~~08002~1~~~~~58.00~~~~精美凉菜~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~少辣错误返回:BVIEW-1此餐台未开台4.并台请求格式:类型码(20位)工号(6位)原台号(6位)并到的台号(6位)示例:MERGE00100020004返回格式:类型码(20位)成功否标记(=1成功,=-1不成功)信息提示示例:MERGE10002+0004并台成功!5.退菜请求格式:类型码(20位)工号(6位)台号(6位)流水号(10位)数量(6位)退菜理由(30位)说明:无退菜理由则退菜理由写无示例:CLMEAL0010002020012客人退菜返回格式:类型码(20位)成功否标记(=1成功,=-1不成功)信息提示示例:CLMEAL1退菜成功!鱼香肉丝2盘已退!!原因:点错6.催菜请求格式:类型码(20位)工号(6位)台号(6位)菜品流水号 (10位)催菜备注(30位)示例:CKMEAL001000205006快上返回格式:类型码(20位)成功否标记(=1成功,=-1不成功)信息提示示例:CKMEAL10002催菜成功!已经通知厨房!7.楼面状态查询请求格式:类型码(20位)工号(6位)示例:FQUERY001返回格式:类型码(6位)A 区域编码(4位) 区域名称(8位)…A 区域编码(4位) 区域名称(8位)T 餐台编码(4位) 餐台名称(12位) 所属区域编码(4位) 状态编码(8位)…T 餐台编码(4位) 餐台名称(12位) 所属区域编码(4位) 状态编码(8位)示例:FQUERYA~01~~一楼A~02~~二楼T~001~T1~~~~~~~~~~01~~FREET~002~T2~~~~~~~~~~01~~CHECKT~003~T3~~~~~~~~~~01~~ACTIVE错误返回:FQUERY-18.餐台状态查询请求格式:类型码(20位)台号(6位)示例:TQUERY101返回格式:类型码(20位)成功否标记(=1成功,=-1不成功)信息提示示例:TQUERY1ACTIVE9.沽清状态查询请求格式:类型码(20位)示例:SOUTQUERY返回格式:类型码(20位)菜品编码=剩余数量示例:SOUTQUERY1001=01002=1.。