2020-12-21

广告下发流程

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 紧急下刊

你可能感兴趣的:(2020-12-21)