相同参数的返回值不同

时间:2015-02-27 12:02:08

标签: function grails

我的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_coo == coo&amp;&amp; open_date&lt; = per)&amp;(close_date&gt; = per || close_date = = bur_coo == coo&amp;&amp; open_date&lt; = per)&amp;(close_date&gt; = per || close_date = = null))即使条件为真,它也会传递给下一次迭代!

出了什么问题?!

1 个答案:

答案 0 :(得分:0)

通过我意识到的测试我发现问题是两个域类对象之间的比较&#34;合作&#34;。

当我测试条件时

  

if(bur_coo == coo)

它总是返回false,即使两者都是相同的值(具有相同的id)。

我google了如何比较两个域类我找到了运算符&#34; equals&#34;,我修改了代码

if (bur coo.equals (coo))
{
     println("true")
}
else
{ 
     println("false")
}

结果总是错误的。

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

进行比较
  

if(bur_coo.id == coo.id)