API测试>>

酒店

价格增量推送更新时间:2024/05/28 10:16

使用说明

    推送目前不保证数据不丢失,需要有主动拉取做兜底,所以接入前请先保证有主动拉取任务存在,且主动拉取也需要缓存ChangeTime(艺龙数据变更时间),通过对比保证本地数据最新。

     由于推送的吞吐量比较大,不能保证推送的顺序,所以代理拿到数据后,需要拿key=HotelId+HotelCode+RoomTypeId+RateplanId+具体某天日期、value=Time做缓存操作。当新来数据的Time>=缓存Time,则更新本地数据,如果新来数据Time<缓存Time,则舍弃该数据,保证代理本地数据始终是最新的。当Date过期时,可以从本地缓存异常该数据。

    目前处于新服务接入阶段,接入前,请联系艺龙进行配置及连调不再支持推送,请接入拉取接口

输入参数

节点名称类型可为空说明

type


推送类型EnumN

Inventory:库存增量

Rate:价格增量

Order:订单增量

State:状态增量 

Data:酒店增量

HotelDetail:酒店详情增量

说明:用来标示是哪种类型数据,该接口始终为:Rate

data数据StringN无需解密,直接接收。
guid唯一标示StringN出现问题,方便定位到哪条数据


Rate节点

节点名称类型可为空说明
LastId增长idLongN
Time变化时间DateTimeN
HotelId酒店IDString(8)N这几个属性是业务主键
RoomTypeId房型IDString(10)N
RateplanId产品 IDIntN
StartDate开始时间DateN
EndDate结束时间DateN
HotelCode酒店编码String(8)Y
Status库存状态BooleanNTrue:表示当条记录对应的房价为有效,需覆盖更新本地数据
False:表示当条记录对应的房价为无效,需更新本地价格为无效
Member平日卖价DecimalN

具体使用的是平日卖价还是周末卖价

,需要根据HotelCode查找hotel.data.rp中对应的酒店周末设置

Weekend周末卖价DecimalN
MemberCost平日底价DecimalN同上
WeekendCost周末底价DecimalN
AddBed加床价DecimalY-1代表不能加床,0-免费加床,大于0表示加床的费用
PriceID价格IDLongN不能作为更新变化的主键。
CurrencyCode货币类型StringY参考Currency
InvoiceMode发票模式IntY

0:全部(默认值,未区分)

1:艺龙开票

2:酒店开票

IsPriceLimit是否限价BooleanN

表示当天价格是否限价,限价时须按照艺龙给出的售价进行售卖。

多天连住时,有一天限价,则所有天限价。

判断限价时与hotel.data.rp接口中IsPriceLimitProduct字段为或关系,两者有其一为true,则限价。

false:非限价

true:限价

响应结果

节点名称类型可为空说明

code

codeintN

0:表示接收成功

-1:表示接收失败

建议:接收成功,立马返回结果,异步进行处理。

errorMsg错误信息
StringN说明:发送失败需要给出失败信息


输出参数示例

{
    "type": "Rate",
    "guid": "031a9db5-6850-4d6b-a058-6e3e99679a20",
    "data": [
    {
                "LastId": 5039773317,
                "Time": "2016-12-11T17:37:57 08:00",
                "HotelID": "30101023",
                "HotelCode": "30101023",
                "RoomTypeId": "1077",
                "RateplanId": 25227,
                "StartDate": "2016-12-11T00:00:00 08:00",
                "EndDate": "2017-01-11T00:00:00 08:00",
                "Status": true,
                "Member": 100,
                "Weekend": 100,
                "MemberCost": -1,
                "WeekendCost": -1,
                "AddBed": -1,
                "PriceID": 1233478686,
                "CurrencyCode": "RMB"
    }
]
}

接收接口示例

@RequestMapping(value="/incr/rate/consumer",method=RequestMethod.POST)
	public @ResponseBody String getIncrData(HttpServletRequest request){
		PushResponse pushResponse=new PushResponse();
		try {
			String type=request.getParameter("type");
			Assert.notNull(type,"type not null");
			String data=request.getParameter("data");
			Assert.notNull(data,"data not null");
			String guid=request.getParameter("guid");
			logger.info("message type="+type+",data="+data+",guid="+guid);
			switch (type) {
			case "Order":
				//处理订单增量
				//除订单增量需要解密外,其他需解密
                            if(StringUtils.isNotBlank(appkeyLast8)){
                                    decrypt=SecurityUtil.decrypt(data,appkeyLast8);
                            }
				break;

			case "Rate":
				//处理价格增量
				break;
			case "Inventory":
				//处理库存增量
				break;
			case "Data":
				//处理酒店增量
				break;
			}
			pushResponse.setCode(0);
			pushResponse.setErrorMsg(null);

		} catch (Exception e) {
			e.printStackTrace();
			logger.error("error:"+e.getMessage());
			// TODO: handle exception
			pushResponse.setCode(-1);
			pushResponse.setErrorMsg(e.getMessage());
		}
		return JSONObject.toJSONString(pushResponse);
	}