广告下发流程
1. 平台端发起查询剩余广告位
/ad/QueryFreeAdvertisePlace
-根据 设备广告统计表 Fm_device_ad_count 确定可用广告位数
//设备编号 酒店名称 人脸照片 上传时间 播放广告信息
type Fm_device_ad_count struct {
Id string `bson:"_id"`
Ad_task_instance string //广告id
Ad_name string //广告名称
Ad_push_task_instance_id string //下发任务
Cercle_ad_count int //轮播广告数
Cercle_ad bool //是否有轮播广告
Corner_ad bool //是否有角标广告
Label_ad bool //是否有Label广告
Verify_L_ad bool //是否有核验主左广告
Verify_R_ad bool //是否有核验主右广告
Audio_ad bool //是否有声音广告
Push_date string //下发日期
State int //1成功执行 2未成功执行
Ad_start_date int64 //广告周期,开始
Ad_end_date int64 //广告周期,结束
CreatAt int64 //生成日期
Device_no string //设备编号
Hotel_id string //酒店id
Hotel_name string //酒店名称
Hotel_grade string //酒店评级
Region_groupid string //区域id
}
2. 根据剩余广告位数量,生成广告订单实例
/ad/AddAdTaskInstance
- 广告实例状态置为未审核状态
Ad_task_instance.State = -1 int //任务状态 -1新建, -2新建后已审核 , 1上刊未审核, 2上刊已审核(待制作),3已上传(已制作),4,未审核(已制作) 5待下发 6暂停,7已下发,8过期,9已下刊,10已撤销
- 同时创建
Fm_device_ad_count
进行广告位锁位
//设备编号 酒店名称 人脸照片 上传时间 播放广告信息
type Fm_device_ad_count struct {
Id string `bson:"_id"`
Ad_task_instance string //广告id
Ad_name string //广告名称
Ad_push_task_instance_id string //下发任务
Cercle_ad_count int //轮播广告数
Cercle_ad bool //是否有轮播广告
Corner_ad bool //是否有角标广告
Label_ad bool //是否有Label广告
Verify_L_ad bool //是否有核验主左广告
Verify_R_ad bool //是否有核验主右广告
Audio_ad bool //是否有声音广告
Push_date string //下发日期
State int //1成功执行 2未成功执行
Ad_start_date int64 //广告周期,开始
Ad_end_date int64 //广告周期,结束
CreatAt int64 //生成日期
Device_no string //设备编号
Hotel_id string //酒店id
Hotel_name string //酒店名称
Hotel_grade string //酒店评级
Region_groupid string //区域id
}
创建 Fm_device_ad_result
进行广告下发结果统计
type Fm_device_ad_result struct {
Id string `bson:"_id"`
CreatAt int64
Ad_task_instance_id string
Ad_push_task_instance_id string //下发任务
Device_no string
Topic_result bool //分组订阅
PushTask_result bool //下发任务获取
Resource_result bool //资源下载
Adready_result bool //广告准备
Adexcute_result bool //广告播出
Adexpire_result bool //广告下刊
}
创建 Ad_st_hotel
针对每个酒店的广告进行统计 略
3. 上传广告物料
/ad/UploadResource
4. 物料资源和广告实例绑定
/ad/AddResourceToAdTaskInstance
- 广告实例状态置为 已上传(已制作)
Ad_task_instance.State = 3 int //任务状态 -1新建, -2新建后已审核 , 1上刊未审核, 2上刊已审核(待制作),3已上传(已制作),4,未审核(已制作) 5待下发 6暂停,7已下发,8过期,9已下刊,10已撤销
5. 多次分角色进行广告下发审批流程
/ad/ModifyAdTaskInstance
通过修改广告实例完成整个广告下发流程
直至广告状态
Ad_task_instance.State = 5 //5待下发
6.广告下发
根据下发操作,分为 立即下发 和 自动下发
6.1. 立即下发
/mqtt/PushAdvertiseTask
- 通过 mqtt服务 和设备端即时通讯,触发设备心跳/mqtt/PushAdvertiseTask获取广告任务,实现立即下发
- 同时插入广告实例id
ad_task_instance_id
到设备表的广告实例当中ad_task_instance_ids
做为广告下发记录
//设备
type Fm_devices struct {
Id string `bson:"_id"` //主键
Device_no string //设备编号
Hotel_id string //酒店id
Ad_task_instance_ids []string //广告id 下发告用
Ad_direct_task_instance_ids []string //广告id 下发告用
Pre_Ad_task_instance_ids []string //备播广告id
Pre_direct_Ad_task_instance_ids []string //备播广告id
Ad_topics []string //广告id主题,通知用
Region_groupid string //区域分组 设备管理用的
Region_group_name string //区域名称
Device_gps string //酒店位置
CreatAt int64 //生成时间
Grade string //酒店评级
Hotel_offical_id string //酒店外键
Region_default_ad_id string //默认广告位id
Ad_provider string //第三方广告提供者
Producer string //供应商信息
Device_price int //设备价值
}
- 变更广告实例字段
Ad_task_instance.State = 7 //已下发
根据
6.2. 自动下发
定时任务服务 FmDispatchServer 会根据广告上下刊时间
Ad_start_date int64 //广告周期,开始
Ad_end_date int64 //广告周期,结束
来确定执行广告的上下刊流程,执行逻辑同 6.1 立即下发
7.广告下发结果收集
根据表Fm_device_ad_result
来记录广告的下发情况
- 设备查询广告成功
当设备访问服务接口 /pushTask/QueryDeviceAdMission 传入该条广告 实例查询广告资源,则认为该设备已经获取到了广告
更新字段
Fm_device_ad_result.PushTask_result = true bool //下发任务获取
- 设备获取广告物料成功
当设备访问服务接口 /pushTask/UploadDeviceAdMissionProcess 传入该条广告 实例主键,则认为该设备已经成功下载广告物料
更新字段
Fm_device_ad_result.PushTask_result = true bool //下发任务获取
- 广告成功上刊
当设备调用服务接口### /MainInterfaceAPI/InsertAdverRecordAndVerifyInfo/ 上传该广告记录 则认为广告已经成功上刊
更新全部广告上刊记录字段
"$set": bson.M{
"topic_result": true,
"pushTask_result": true,
"resource_result": true,
"adready_result": true,
"adexcute_result": true,
}
8.广告下刊,紧急下刊
8.1 紧急下刊 手动下刊
/ad/DeleteAdTaskInstance
删除 Fm_device_ad_result
清理设备广告下发记录
删除 Fm_device_ad_count
释放 广告位资源
删除设备表字段 Ad_task_instance_ids
阻止设备获取广告任务
通过mqtt服务发送即时通讯消息通知设备心跳获取最新广告任务
待设备下一次心跳即可实现相关广告任务的下刊
8.2 自动下刊
定时任务服务 FmDispatchServer 会根据广告上下刊时间
Ad_start_date int64 //广告周期,开始
Ad_end_date int64 //广告周期,结束
来确定执行广告的上下刊流程,执行逻辑同 8.1 紧急下刊