0

エンティティの日付フィールドが他のエンティティからの別の 2 セットの日付の範囲内にあるかどうか、日付の条件を確認する必要があります

最初のエンティティ:

1. id
2. name
3. date

2 番目のエンティティ ;

1. id
.
.
.
.
17 : Start Date
18 : End Date

最初のエンティティの日付フィールドが 2 番目のエンティティの開始日と終了日の範囲内にあるかどうかを確認する必要があります。

例えば

(t1.date>= t2.Start Date および t1.date <= t2.End Date)

問題は、t2 が null である行がいくつかあることです。それが null の場合、2 番目の条件は true を返します。

私の試み

PriorAuthorizationLogVO( cardid == $paidClaimVO.cardholderId, ruleType == 'INCL' , $paidClaimVO.time>=etime , ( ttime==null || (ttime!=null && $paidClaimVO.time<=ttime) )

ただ、動作確認はできていません…。

助けてください。

4

1 に答える 1

2

静的ヘルパー メソッドまたはエンティティのいずれかで、日付の範囲内の日付のチェックを追加できます。私の意見では、これによりルールが読みやすくなり、日付チェック メソッドの単体テストを簡単に記述できるようになります。

オプション 1 - 静的ヘルパー メソッド

このような静的ヘルパー メソッドを持つクラスを作成します。

public class DateUtils {
  private DateUtils() {}  // Cannot be initialized

  public static boolean dateInRange( Date toCheck, Date min, Date max ) {
    // Add null checks here
    // Use Date#before(Date) and Date#after(Date) for checking
    return true|false
  }
}

あなたのルールは次のようになります

import static DateUtils.*

rule "date in range"
when:
   dateInRange( e1.date, e2.start, e2.end )
then:
   // logic
end

オプション 2 - ファクト/エンティティ内のメソッド

ファクトの 1 つに check メソッドを作成します。これをどのエンティティに配置するかはユースケースによって異なりますが、提供した情報ではまだこれを指定していません。最適な場所はご自身で見つけていただければと思います。とにかく、コードは次のようになります

public class Entity1 {
  Date date
}

public class Entity2 {
  Date start
  Date end

 public boolean entity1InRange( Entity1 e ) {
  // null checks
  // Use the Date#before() and Date#after() as above
 }

}

そしてルール

rule "date in range"
when:
  e2.entity1InRange( e1 )
then:
  // Logic
end
于 2013-09-30T07:41:20.530 に答える