竞价排名Demo
来源:互联网 发布:好看的c语言编译器 编辑:程序博客网 时间:2024/06/04 18:52
背景介绍:现有应标对象,供应商和招标项目三个对象,其中应标对象为junction object,连接了供应商和招标项目,现在需要根据应标对象中的竞价金额为同一招标项目的应标记录进行排序,即新建一个应标记录或更新应标记录的竞价金额的时候,需要自动去计算当前应标记录的排名(竞价排名)。
Trigger设计模式:每个对象一个Trigger模式。
TriggerHandler.cls
/***********************************************************************Name:所有对象的Trigger逻辑分发抽象类*Description:具体对象的Trigger Handler重写相应触发事件的处理方法======================================================History ------- VERSION AUTHOR DATE DETAIL 1.0 Wilson Xu 2017-06-23 Created***********************************************************************/ public abstract class TriggerHandler { public virtual void beforeInsert(){}//before insert事件处理方法 public virtual void beforeUpdate(){}//before update事件处理方法 public virtual void beforeDelete(){}//before delete事件处理方法 public virtual void afterInsert(){}//after insert事件处理方法 public virtual void afterUpdate(){}//after update事件处理方法 public virtual void afterDelete(){}//after delete事件处理方法 public virtual void afterUndelete(){}//after undelete事件处理方法 public void run(){ if(Trigger.isBefore && Trigger.isInsert) { this.beforeInsert(); } else if(Trigger.isBefore && Trigger.isUpdate) { this.beforeUpdate(); } else if(Trigger.isBefore && Trigger.isDelete) { this.beforeDelete(); } else if(Trigger.isAfter && Trigger.isInsert) { this.afterInsert(); } else if(Trigger.isAfter && Trigger.isUpdate) { this.afterUpdate(); } else if(Trigger.isAfter && Trigger.isDelete) { this.afterDelete(); } else if(Trigger.isAfter && Trigger.isUndelete) { this.afterUndelete(); } } }BidRecordTrigger.trigger
/***********************************************************************Name:应标记录触发器*Description:可加一些其他条件限制Trigger是否触发,比如加一个控制Trigger逻辑是否触发的Custom Setting,满足条件则运行run(),否则不运行======================================================History ------- VERSION AUTHOR DATE DETAIL 1.0 Wilson Xu 2017-06-23 Created***********************************************************************/ trigger BidRecordTrigger on Advertiser_Tender_Relationship__c (before insert,before update,before delete,after insert,after update,after delete,after undelete) { SkipTriggerSetting__c setting = SkipTriggerSetting__c.getInstance(); //如果当前用户设置了不触发Trigger,跳过Trigger触发逻辑 if (setting != null && setting.DisableTrigger__c){ return; } new BidRecordTriggerHandler().run(); }BidRecordTriggerHandler.cls
public class BidRecordTriggerHandler extends TriggerHandler { /** before insert事件处理逻辑 **/ public override void beforeInsert() { } /** after insert事件处理逻辑 **/ public override void afterInsert() { } /** before update事件处理逻辑 **/ public override void beforeUpdate() { } /** after update事件处理逻辑 **/ public override void afterUpdate() { /** before delete事件处理逻辑 **/ public override void beforeDelete() { } /** after delete事件处理逻辑 **/ public override void afterDelete() { } /** after undelete事件处理逻辑 **/ public override void afterUnDelete() { } }BidRecordTriggerHunction.cls
public class BidRecordTriggerFunction { /** 功能说明: 参数说明: 返回值: 作者:Wilson Xu 日期:2017-06-23 **/ public static void sortByBidAmount(List<Advertiser_Tender_Relationship__c> atrs){ // your code here. } }
遇到过的问题:假如没做递归处理,在after update的Trigger中更新竞价排名字段,会因为递归而报错,最终导致并没有更新竞价排名。
解决方案:目前有两种方案,一种是为触发器增加一个布尔类型的开关来控制死循环;另一种是“用完即走”的理念,即“按需调用方法,档需要去执行某段逻辑时,才去调用相应的方法”,我同事于是说。
阅读全文
1 0
- 竞价排名Demo
- 竞价排名
- 竞价排名
- 关注竞价排名
- solr 竞价排名
- 竞价排名软件
- 万恶的百度竞价排名
- 百度竞价排名的基本知识
- Apache Solr实现竞价排名
- 百度竞价排名服务问答
- solr中竞价排名实现
- lucene竞价排名机制
- Solr QueryElevationComponent--实现竞价排名
- 竞价排名中的道德争议
- 央视曝光百度竞价排名积弊
- CCTV:百度竞价排名遭质疑
- 央视曝光百度竞价排名黑幕
- 央视曝光百度竞价排名黑幕
- Android使用SparseArray取代HashMap
- 雷达简介:原理、组成与分类
- IPSEC 中的AH,ESP,SPI用途
- Fresco加载资源图片是黑色问题
- 动态规划
- 竞价排名Demo
- java开发系统内核:应用程序与系统内核的内存隔离
- 提交订单系统自动发送邮件到收件人邮箱优化(定时发送邮件)
- Spring中使用Jdbcdaosupport、C3P0和properties
- mybatis-generator逆向工程生成model dao mapping
- 函数的四种调用方式
- JavaScript 验证
- 转载]金仕达、恒生、上期CTP,期货公司的哪一套后台系统适合于程序化下单
- 使用GroboUtils多线程并发请求测试springmvc controller