0

从订单列表中,我需要收集过去到 requesteffDate 和 requesteffTime 的日期,并取过去日期的最大值。

function boolean dateCheck(Date effdt, Date efftm) {
  String efffdt = new SimpleDateFormat("yyyyMMdd").format(effdt);
  String effftm = new SimpleDateFormat("HHmm").format(efftm);
  Date effdttm = new SimpleDateFormat("yyyyMMddHHmm").parse(efffdt + "" + effftm);
  return effdttm.before(new Date());
} 

rule "finding past maximum date"
when
  $company : Company( $date:requesteffDate, $time:requesteffTime, $reqdt : requesteffDate.getTime(), $reqtm : requesteffTime.getTime() )
eval(dateCheck($date,$time))
accumulate(Orders( effectiveDate != null,
                   effdate:effectiveDate.getTime()<$reqdt),
           maxEffDate:max(effdate))
then
  //error

在这样做的同时,

accumulate(Orders(effectiveDate!=null,
                  effdate:effectiveDate.getTime()<$reqdt),
                  maxEffDate:max(effdate))

我得到 maxEffDate 为 -9223372036854775808 转换时显示 1940

同样,我尝试使用 min 函数它显示 2262。

我的课是这样的。

Class Company{
  private Date requesteffDate;
  private Date requesteffTime;
  private Employee emp;
  private List<Orders> orderlist;
}

Class Orders{
  private Date effectiveDate;
  private Date effectiveTime;
}
4

1 回答 1

0

-9223372036854775808 是 Long.MIN_VALUE。这对于表明累积没有找到任何订单是决定性的。

确保插入一些匹配的 Orders 事实。

添加 maxEffDate 为 != Long.MIN_VALUE 的守卫。

停止将 Date 用作时间值:使用 LocalDate 和 LocalTime 或将日期和时间组合成单个 Date 值。

请注意日期和时间的转换不受您的语言环境设置的影响。

于 2018-01-08T10:22:00.470 回答