#票务整体操作流程: - 票务参数(客源地、结算方式、业务类型) - 票基本信息 ![](https://leanote.com/api/file/getImage?fileId=5c10e354ab64416973003823) - 票销售信息 ![](https://leanote.com/api/file/getImage?fileId=5c10e3beab64416b740038c3) - 验票规则 ![](https://leanote.com/api/file/getImage?fileId=5c10e3f3ab64416973003845) - 票价格信息 ![](https://leanote.com/api/file/getImage?fileId=5c10e4a8ab64416973003861) - 售票 - 检票 - 退票 #一:客户端: #售票 - 只有现场打印和身份证、人像的才可以卖 - 售票查询票信息时,根据是相对日期还是绝对日期 ![](https://leanote.com/api/file/getImage?fileId=5bf75d31ab64410cec00178b) 绝对日期下:必须配置结束时间 ![](https://leanote.com/api/file/getImage?fileId=5bf763a2ab64410f2b0019b8) ##1. 组合票(现场打印) 1. 根据票id,查出来该组合票相关的信息 - 修改票的数量、日期、人票类型 2. 根据子票信息,判断: - 是否选择(多选框) - 是否自定义日期(即日期可修改) ![](https://leanote.com/api/file/getImage?fileId=5bf67a1dab64413216007f3c) ##3. 下单 1. 一票一人、一票多人 2. 身份证/票号 ``` //票号生成规则 景点下的每一种产品 -- 都有自己的一套票号 譬如: 景点1:1. 成人票 cr0001 - cr0003 2. 儿童票 et0001 - et0002 ``` 业务逻辑: ``` 1. 如果是一票一人的话,则循环总人数,插入多条数据;如果是一票多人,则插入一条包含总人数的明细信息。 2. 组合票的话,则需要插入子产品信息(t_order_group_detail); 3. 如果是身份证入园,则使用身份证当票号。 ``` 普通票(现场打印),直接下单(表t_order_local),还有下单明细(表t_order_detail),票号根据票号规则生成。 普通票(身份证),直接下单(表t_order_local),使用身份证号当票号。 组合票(现场打印票),直接下单(表t_order_local),组合票所含子票信息(表t_order_group_detail),还有下单明细(表t_order_detail),票号根据票号规则生成。 ##4. 子票有效期 - 子票有效期数量为零时,使用主票的时间 - 子票有效期数量小于主票有效期数量,且大于0时,使用自己的。 ![](https://leanote.com/api/file/getImage?fileId=5bfe4737ab6441666700527b) ##5. 年卡管理 ![](https://leanote.com/api/file/getImage?fileId=5bfce8a6ab64410cae00445f) #二. 后台管理平台 #2018-11-23: ##1. 票产品的销售属性配置 - 如果是绝对日期,必须配置最晚时间或者最晚日期即可。 - 开始时间要小于截至时间 ![](https://leanote.com/api/file/getImage?fileId=5bf766caab64410f2b001af5) ##2. 删除票产品的时,判断是否配置销售属性,有不可删除 无,则删除此票信息及票价格信息。 ##3. 组合票价格信息管理: - 配置的是否选择的子项个数不大于最大子票数量。 - 如果子项是必选项,则不允许配置是否选择。反之,则允许配置。 ![](https://leanote.com/api/file/getImage?fileId=5bf76b21ab64410cec001cc8) #2018-11-27: ##1. 票产品价格管理 ![](https://leanote.com/api/file/getImage?fileId=5bfcb289ab64410cae002ff2) - 参考t_product_price 。 - 销售方案和优惠方案、价格等级不是数据字典的信息。 - 如果有视图或功能这样写的修改掉。 ##2. 票产品验票规则 ![](https://leanote.com/api/file/getImage?fileId=5bfcb9faab64410abb002b22) - 业务类型,是此票已配置销售信息的业务信息;而不是所有的业务类型。 ##3. 票价格管理 - 销售代码不能重复,需要判断一下。t_product_price表。 - 组合票的价格管理,实际售价= 必选的子票价格信息。 ##4. 数据字典规范 ![](https://leanote.com/api/file/getImage?fileId=5bfd06daab64410abb004d68) - 所有使用数据字典的数据,保存时:保存value值;而不是id值。 ## 这个仅供记录可不看 结算方式: ![](https://leanote.com/api/file/getImage?fileId=5bfcc01eab64410abb002d86) - 这些字段迷茫中。。。 #2018-11-28: ##1. 先修改票产品管理中的数据字典信息 #三:客户端接口 ##1. ticketById接口,已更改。 ##2. ticketInfo接口 - 对于按照绝对日期的票,如果无开始始日期和截至日期,则使用当前日期;如果无开始时间和截至时间,则使用00:00 和 23:59;反之,则需要过滤掉截至日期和时间小于当前日期和时间的票信息。 - 只查询数据处理方式为常规,销售方式为普通门票的票产品。 注意: 1. 对于数据比较多的按条件查询时,创建视图效率比较低,所以建议使用存储过程。 #四:票务系统之分销系统 - 数据库:ticket_distribute 产品在某个渠道上定个价钱 --- 渠道开始卖 -- 下单、退单 --> 接口下单、退单 付款 -- 下票 退款 -- 退票 ##1.产品信息 - id、code、name、企业id、景区id、价格匹配方式。 1.查询网络业务下的所有票信息 2.选择配置基本信息 - 分配渠道:中间表 - 配置价格:产品、日期、价格、备注 价格: 开始时间: 结束时间: 备注: ``` 1. 不能交叉配置 2. 起始时间 和 截至时间 ``` ##2.渠道配置 - 分销商信息 ##3.接口对接 - OTA api - 直销api(自己定义标准) --下单 1.无实名 -- 一票一人 生成多条明细,票号随机生成uuid -- 一票多人 生成一条明细,加上数量 2.实名 一票一人 生成多条信息,票号就是身份证号 一票多人 生成一条信息,票号就是身份证号 对接解决方案: ###1. 对外提供的接口 - 获取产品接口 - 下单 请求参数: ``` appid:String(32) 分销商appId(平台分配) nonce_str:String(32) 随机字符串 sign: String(32) 签名 out_trade_no: String(32) 分销商订单号 pro_code: String(32) 产品代码 ele_code: String(32) 电子码(分销商自己生成的核验码) tourist_name: String(32) 游客姓名 (是) tourist_phone:String(11) 游客手机号(是) idcard: String(18) 身份证号(订单用户的身份证号) account:int(11) 购买数量 total_fee:double(9,2) 总金额 play_time:String(14) 游玩日期 ``` - 退单 ``` appid:String(32) 分销商appId(平台分配) nonce_str:String(32) 随机字符串 sign: String(32) 签名 out_trade_no: String(32) 分销商订单号 pro_num: int(11) 产品数量 ``` - 核验通知接口 ``` appid:String(32) 分销商appId(平台分配) nonce_str:String(32) 随机字符串 sign: String(32) 签名 out_trade_no: String(32) 分销商订单号 verify_num: int(11) 核验数量 ``` - 通知失败机制 ``` 1. 定时通知: 1,2次失败,15秒;3次失败,30秒;此时已经1分钟了,4次失败,3分钟;5,6,7,8次失败,30分钟;9次失败,1个小时。 2.其他有的方式就是分桶,失败的都扔在一个桶里,按照一定规则重试,直到达到自己的人工干预阈值。 注意阈值和人工干预机制就行,防止赔付(牵涉到钱的问题)。 ``` ---------- ###2.ota提供的接口 2.1去哪儿网 - 流程:用户支付 --> 下单 --> 发送电子票 --> 电子票消费 --> 结束 - 退单 --> (ota退单、景区退单) - 请求类型:post - 编码:utf-8 2.1.1 获取产品信息 接口地址:http://XXXX post参数:method:getProductByQunar, requestParam:{data:base64(xml),signed:md5(signkey+data),securityType:md5} 请求参数: ``` <header> <application></application> <processor></processor> <version></version> </header> ``` ##4.日志信息 - 调入日志 - 调出日志 - 异步通知日志 ##5.统计中心(报表) ##6.订单管理: 在票务系统做 - 网络订单查询 - 退票 审核 退款 - 异常订单:退款、退票 #附加信息: #景区信息管理 ##1. 景区企业管理 - 限制了企业编码不能重复。 - 企业id + 部门编码唯一。 ##2.景点信息管理 - 景点编码不能重复 复合主键 ##3.售票站点管理 - 景点id+站点编码不能重复 ##4. 售票窗口管理 - 窗口编码不能重复 - mac地址也不能重复 ##5. 检票园门管理 - 园门编码不能重复 - 验票规则中: - 园门+业务+主产品+子产品必须唯一 - 切换业务,联动查询主产品信息和子产品信息(三级联动) - 切换主产品信息,异步加载子产品信息。(二级联动) ##6.园门通道管理 - 通道编码不能重复 ##7.税务信息管理 - 纳税人标识不能重复 ##8.仓库信息管理 - 仓库编码不能重复 #票务参数管理 ##1.客源地管理 - 客源地编码不能重复 ##2. 游客类型管理 - 企业id +游客类型代码不能重复 ##3.结算方式管理 - 企业id + 结算方式代码不能重复 ![](https://leanote.com/api/file/getImage?fileId=5bfd5e62ab64410abb00695e),这几个字段的意思 ##4.结算方式分组 - 企业id + 结算组代码,不能重复 ##5.业务类型管理 - 企业id + 业务类型代码不能重复 ![](https://leanote.com/api/file/getImage?fileId=5bfd5f0aab64410cae0071fa),是否打印发票是单选框radio。 #票产品管理 ##1.票产品管理 - 产品代码不能重复。 - 景点id + 产品代码不能重复 ##2.票价格管理 - 销售代码不能重复 ##3.票的销售属性 - 业务类型 + 产品id 不能重复 ##4. 组合票子票信息 - 主产品id + 子产品id 不重复