Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r15687 -r15688 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 15687) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 15688) @@ -42,6 +42,7 @@ import com.forgon.Constants; import com.forgon.databaseadapter.service.DateQueryAdapter; +import com.forgon.databaseadapter.service.SqlFunctionsAdapter; import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.model.BarcodeDevice; import com.forgon.directory.model.OrgUnit; @@ -162,6 +163,8 @@ private WriteBackInventoryHelper writeBackInventoryHelper; + private SqlFunctionsAdapter sqlFunctionsAdapter; + /** * 省医回写dao */ @@ -194,6 +197,10 @@ this.writeBackInventoryHelper = writeBackInventoryHelper; } + public void setSqlFunctionsAdapter(SqlFunctionsAdapter sqlFunctionsAdapter) { + this.sqlFunctionsAdapter = sqlFunctionsAdapter; + } + public void setSerialNumManager(SerialNumManager serialNumManager) { this.serialNumManager = serialNumManager; } @@ -7218,8 +7225,8 @@ @Override public String getFirstAssistant(String[] ids) { String idsStr = StringUtils.join(ids, ","); - String where = String.format(" po.id in (%s) and po.assistantSender is not null " - +"and po.assistantSender <> '' order by po.sendTime desc", idsStr); + String where = String.format(" po.id in (%s) and %s order by po.sendTime desc", + idsStr,sqlFunctionsAdapter.strNotBlank("po.assistantSender")); Invoice invoice = getFirst(where); if(invoice != null){ return invoice.getAssistantSender(); Index: forgon-core/src/main/java/com/forgon/databaseadapter/service/SqlFunctionsAdapter.java =================================================================== diff -u -r14586 -r15688 --- forgon-core/src/main/java/com/forgon/databaseadapter/service/SqlFunctionsAdapter.java (.../SqlFunctionsAdapter.java) (revision 14586) +++ forgon-core/src/main/java/com/forgon/databaseadapter/service/SqlFunctionsAdapter.java (.../SqlFunctionsAdapter.java) (revision 15688) @@ -3,7 +3,6 @@ */ package com.forgon.databaseadapter.service; -import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.db.InitDbConnection; /** @@ -54,4 +53,27 @@ } return sb.toString(); } + /** + * 计算字符长度的语句.如果字段为null,空格,制表符,则认为长度为0.如果非空字符中包含空格与制表符,先将他们替换为'',再计算长度。 + * 所以此函数返回的是实际非空字符的长度 + * @param property + * @return + */ + public String strlen(String property){ + if(dbConnection.isOracle()){ + return " nvl(length(replace(replace("+property+",' ',''),' ','')),0) "; + }else if(dbConnection.isSqlServer()){ + return " isnull(len(replace(replace("+property+",' ',''),' ','')),0) "; + }else{ + throw new RuntimeException("计算长度的函数暂时不支持oracle与sql server以外的数据库"); + } + } + /** + * 判断字段不为空的语句。如果字段为null,空格,制表符,则认为是空 + * @param property + * @return + */ + public String strNotBlank(String property){ + return strlen(property) + " > 0 "; + } }