Function 相同参数的不同返回值

Function 相同参数的不同返回值,function,grails,Function,Grails,我的grails应用程序从数据库中的csv文件导入数据。每个文件都包含有关办公室及其在给定月份实现的营业额的信息 用户输入的参数 文件位置 要进口的单一航空公司 时期 合作 用户可以选择单个航空公司导入单个文件,否则,如果该字段留空,即它将导入此位置的所有航空公司 在逐行读取文件的过程中,会调用服务中的函数,用于查找办公室和代理之间的通信 问题: 如果用户选择导入单个航空公司params.air!=null,则函数返回一个真值, 但是,如果他留下空字段并选择导入所有文件,则函数始终返回null

我的grails应用程序从数据库中的csv文件导入数据。每个文件都包含有关办公室及其在给定月份实现的营业额的信息 用户输入的参数

文件位置 要进口的单一航空公司 时期 合作 用户可以选择单个航空公司导入单个文件,否则,如果该字段留空,即它将导入此位置的所有航空公司

在逐行读取文件的过程中,会调用服务中的函数,用于查找办公室和代理之间的通信

问题:

如果用户选择导入单个航空公司params.air!=null,则函数返回一个真值, 但是,如果他留下空字段并选择导入所有文件,则函数始终返回null

控制器:

if (params.air=="null")
{
    air = Airlines.list()
}
else
{
    air = Airlines.get(params.air)
}
def period = Period.get(params.per)
def coo_file = Cooperation.get(params.coo)
air.each
{
    def selected_airline = it
     // search csv_file for airline selected_airline
      ....
     // read csv_file
     cvs_file.toCsvReader(['separatorChar':';']).eachLine { tokens ->
                count_tokens++
 ....
def test_buro = fs.get_valid_buro(tokens[pos_iata],coo_file,period)
println(test_buro)
     }
}
服务:

//function
 Buro get_valid_buro(String agt,Cooperation coo,Period per)
{
 Date per_end = per.end_date
 Boolean found = false
 Buro selected =null
def sql_query = "SELECT b.id FROM Buro as b,Buro_agency as ba, Agency as a  WHERE b.id = ba.buro AND ba.agency = a.id  AND a.id = "+Agency.findByNumber_agency(agt)
   def data_sql = Data.executeQuery(sql_query)
    def bur_serv = []
    for(int i=0;i<data_sql.size(); i++)
    {
        bur_serv.add(Buro.get(data_sql[i]))
    }
  bur_serv.each{

        Date open_date = it.open_date_buro
        Date close_date = it.close_date_buro
        Cooperation bur_coo = it.cooperation
        if((bur_coo == coo && open_date <= per_end )&&(close_date>=per_end|| close_date==null))
        {
            found=true
            selected = it
        }
      }
我通过在bur_-serv循环中放置断点来调试应用程序,当它到达循环时,如果bur_-coo==coo&&open_-date=per | | close_-date==null,即使条件为真,它也会传递到下一个迭代


怎么了

通过我意识到的测试,我发现问题在于两个类型为Cooperation的域类对象之间的比较

当我测试条件时

如果bur_coo==coo

它始终返回false,即使两个值都具有相同的id

我在谷歌上搜索了如何比较两个域类,我发现运算符等于,我修改了代码

if (bur coo.equals (coo))
{
     println("true")
}
else
{ 
     println("false")
}
结果总是错误的

解决方案 我找到的解决方案是将他们的id与

如果bur_coo.id==coo.id


get\u valid\u buro方法不能写在一条SQL语句中吗?也不要在SQL中包含字符串。executeQuery允许传递位置参数和命名参数。即使条件为真,它也会出现是什么意思?ifbur_coo==coo&&open_date=per | | | close_date==null中的条件为真,但它被视为假,并传递到下一次迭代。它不能同时为真和假。你如何确定?您是否添加了日志语句?还是从调试器中扣除?您是否重写了用于将日期与Period域对象进行比较的比较运算符,或者这些期间类型不同?我从调试中推断,Period和Date具有相同的日期类型。但真正让我困惑的是,我执行了一次程序,选择了一家航空公司,一切都很好,第二次我把这家航空公司只放在directoryfile位置,让航空公司字段为空,函数总是返回一个值Null请提供一个