Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java =================================================================== diff -u -r14319 -r14547 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 14319) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 14547) @@ -117,7 +117,7 @@ * @return */ public Collection getUnTraceableTousseInstanceListByFictitiousTousseDefinition( - TousseDefinition tousseDefinition, Collection sqlWheres, Predicate predicate); + TousseDefinition tousseDefinition, Collection sqlWheres); /** * 根据虚拟的器械包定义,按条件查找对应的多个器械包实例 * @param tousseDefinition 包定义 @@ -127,7 +127,7 @@ * @return */ public Collection getUnTraceableTousseInstanceListByFictitiousTousseDefinition( - TousseDefinition tousseDefinition, Collection sqlWheres,String orderBy, Predicate predicate,int needAmount); + TousseDefinition tousseDefinition, Collection sqlWheres,String orderBy, int needAmount); public boolean deleteAllExpiredTousseGoods(String orgUnitCoding,String warningType,String reason,String userName); public List getTousseInstanceByBasket(String barcode); Index: forgon-tools/src/main/java/com/forgon/tools/util/SqlUtils.java =================================================================== diff -u -r13632 -r14547 --- forgon-tools/src/main/java/com/forgon/tools/util/SqlUtils.java (.../SqlUtils.java) (revision 13632) +++ forgon-tools/src/main/java/com/forgon/tools/util/SqlUtils.java (.../SqlUtils.java) (revision 14547) @@ -3,7 +3,7 @@ */ package com.forgon.tools.util; -import java.util.Collections; +import java.util.Date; import java.util.LinkedList; import java.util.List; @@ -100,6 +100,20 @@ String s = joinToWhereInConditionForNonStringProperties(p); return String.format(" %s IN (%s) ", field, s); } + /** + * 获取非字符串集合的sql条件 + * @param field + * @param p + * @return + */ + public static String getNonStringFieldNotInCollectionsPredicate(String field, + Iterable p) { + if (p == null || !p.iterator().hasNext()) { + return String.format(" 1=1 "); + } + String s = joinToWhereInConditionForNonStringProperties(p); + return String.format(" %s NOT IN (%s) ", field, s); + } /** * 获取字符串的sql条件 Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java =================================================================== diff -u -r14297 -r14547 --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java (.../ServiceManagerImpl.java) (revision 14297) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java (.../ServiceManagerImpl.java) (revision 14547) @@ -1915,7 +1915,7 @@ // 非可追溯器械包,返回多个器械包实例 resultTousseInstanceList = tousseInstanceManager .getUnTraceableTousseInstanceListByFictitiousTousseDefinition( - tousseDefinition, sqlWheres, null); + tousseDefinition, sqlWheres); int size = resultTousseInstanceList.size(); if (size == 0){ return JSONUtil.buildErrorMsgJsonResult("没有待灭菌的" @@ -2270,7 +2270,7 @@ // 非可追溯器械包,返回多个器械包实例 resultTousseInstanceList = tousseInstanceManager .getUnTraceableTousseInstanceListByFictitiousTousseDefinition( - tousseDefinition, sqlWheres, null); + tousseDefinition, sqlWheres); } else { if (!taskGroup.equals(tousseInstance.getTousseDefinition().getTaskGroup())) return JSONUtil.buildErrorMsgJsonResult("器械包【" Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java =================================================================== diff -u -r14455 -r14547 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 14455) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 14547) @@ -74,6 +74,7 @@ import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.json.JSONUtil; import com.forgon.tools.util.ForgonDateUtils; +import com.forgon.tools.util.SqlUtils; import edu.emory.mathcs.backport.java.util.Collections; @@ -1057,16 +1058,16 @@ } public Collection getUnTraceableTousseInstanceListByFictitiousTousseDefinition( - TousseDefinition tousseDefinition, Collection sqlWheres, Predicate predicate){ + TousseDefinition tousseDefinition, Collection sqlWheres){ if(tousseDefinition == null){ return CollectionUtils.emptyCollection(); } return getUnTraceableTousseInstanceListByFictitiousTousseDefinition( - tousseDefinition,sqlWheres,null,predicate,tousseDefinition.getScanAmount()); + tousseDefinition,sqlWheres,null,tousseDefinition.getScanAmount()); } @Override public Collection getUnTraceableTousseInstanceListByFictitiousTousseDefinition( - TousseDefinition tousseDefinition, Collection sqlWheres,String orderBy, Predicate predicate,int needAmount) { + TousseDefinition tousseDefinition, Collection sqlWheres,String orderBy, int needAmount) { if (tousseDefinition == null || TousseDefinition.STR_YES.equals(tousseDefinition.getIsTraceable())) { // 可追溯的器械包返回空集 @@ -1089,29 +1090,19 @@ if(StringUtils.isNotBlank(orderBy)){ sbSqlWhere.append(" order by "+orderBy); } + //final int needAmount = tousseDefinition.getScanAmount(); int firstIndex = 0; - int nextFetchAmount = needAmount; - Collection resultTousseInstances = new ArrayList(); - while (nextFetchAmount > 0) { - List tousseInstances = objectDao.findBySql( - TousseInstance.class.getSimpleName(), - sbSqlWhere.toString(), firstIndex, nextFetchAmount, null); - if(tousseInstances.isEmpty()) - break; // break while - if (predicate != null) { - // 按条件过滤不符合的器械包实例 - tousseInstances = ListUtils.select(tousseInstances, predicate); - } - if(!tousseInstances.isEmpty()){ - resultTousseInstances.addAll(tousseInstances); - } - firstIndex += nextFetchAmount; - nextFetchAmount = needAmount - resultTousseInstances.size(); + Collection resultTousseInstances = new ArrayList(needAmount); + List tousseInstances = objectDao.findBySql( + TousseInstance.class.getSimpleName(), + sbSqlWhere.toString(), firstIndex, needAmount, null); + if(!tousseInstances.isEmpty()){ + resultTousseInstances.addAll(tousseInstances); } return resultTousseInstances; } - + @Override public boolean deleteAllExpiredTousseGoods(String orgUnitCoding, String warningType ,String reason,String userName) { Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r14483 -r14547 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 14483) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 14547) @@ -17,8 +17,8 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.stream.Collectors; import java.util.Set; +import java.util.stream.Collectors; import net.sf.json.JSONArray; import net.sf.json.JSONObject; @@ -33,7 +33,6 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.log4j.Logger; -import org.hibernate.LockMode; import org.hibernate.Query; import org.hibernate.Session; @@ -60,7 +59,6 @@ import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveDisposablegoods; import com.forgon.disinfectsystem.entity.assestmanagement.TousseStock; import com.forgon.disinfectsystem.entity.basedatamanager.container.Container; -import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; @@ -73,7 +71,6 @@ import com.forgon.disinfectsystem.entity.invoicemanager.InvoiceGoodsVo; import com.forgon.disinfectsystem.entity.invoicemanager.InvoiceItem; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; -import com.forgon.disinfectsystem.entity.invoicemanager.LostMaterialItem; import com.forgon.disinfectsystem.entity.invoicemanager.TimeQuantum; import com.forgon.disinfectsystem.entity.packing.ReviewedBasket; import com.forgon.disinfectsystem.entity.recyclingapplication.RecyclingApplication; @@ -89,7 +86,6 @@ import com.forgon.disinfectsystem.project.service.ProjectManager; import com.forgon.disinfectsystem.recyclingapplication.service.InvoicePlanManager; import com.forgon.disinfectsystem.recyclingapplication.vo.ApplicationGoodsVo; -import com.forgon.disinfectsystem.recyclingapplication.vo.GridDataVo; import com.forgon.disinfectsystem.recyclingapplication.vo.MaterialVO; import com.forgon.disinfectsystem.recyclingrecord.service.RecyclingRecordManager; import com.forgon.disinfectsystem.stockmanage.cssdstock.service.TousseStockManager; @@ -111,7 +107,6 @@ import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.json.GsonUtil; import com.forgon.tools.json.JSONUtil; -import com.forgon.tools.string.StringTools; import com.forgon.tools.util.SqlUtils; import com.google.gson.Gson; import com.google.gson.JsonArray; @@ -1936,6 +1931,7 @@ // 不追溯的固定条码的发货处理 if(tousseInstance.getTousseFixedBarcode()){ Collection tousseInstanceList; + Set tousseInstancesSet = new HashSet(); if(tousseInstance.getTousseDefinition().isDisinfection()){ // 消毒物品,要获取本发货计划的包实例 // tousseInstanceList = getCanInvoiceTousseInstancesByFixedDisinfectionTousseInstance(invoicePlan,tousseInstance,invoiceItem.getAmount()); @@ -1945,7 +1941,8 @@ tousseInstanceList = getCanInvoiceTousseInstancesByFixedTousseInstance(tousseInstance,amountAwaitingSent); } if(tousseInstanceList != null){ - for (TousseInstance disinfectionTousseInstance : tousseInstanceList) { + tousseInstancesSet.addAll(tousseInstanceList); + for (TousseInstance disinfectionTousseInstance : tousseInstancesSet) { if (amountAwaitingSent <= 0) { break; } @@ -2674,16 +2671,14 @@ */ private Collection getCanInvoiceTousseInstancesByFixedTousseInstance(TousseInstance fixedBarcodeTousseInstance){ Collection sqlWheres = buildCanInvoiceTousseInstanceSqlWhere(); + sqlWheres.add(String.format(" %s ",getValidUntilPredicate(dateQueryAdapter, "po.validUntil"))); + sqlWheres.add(String.format(" %s ",getWorningPredicate(dateQueryAdapter, "po.warningUntil"))); // 非可追溯器械包,返回多个器械包实例 Collection tousseInstanceList = tousseInstanceManager .getUnTraceableTousseInstanceListByFictitiousTousseDefinition( fixedBarcodeTousseInstance.getTousseDefinition(), - sqlWheres, - AllPredicate.allPredicate( - TousseInstanceManagerImpl - .isNotExpire(new Date()), - tousseInstanceManager - .checkTousseInstanceHasNotRecall(),tousseInstanceManager.checkTousseInstanceNotInWarningPeriod())); + sqlWheres + ); return tousseInstanceList; } @@ -2702,19 +2697,38 @@ } private Collection getCanInvoiceTousseInstancesByFixedTousseInstance(TousseInstance fixedBarcodeTousseInstance,int needAmount){ Collection sqlWheres = buildCanInvoiceTousseInstanceSqlWhere(); + sqlWheres.add(String.format(" %s ",getValidUntilPredicate(dateQueryAdapter, "po.validUntil"))); + sqlWheres.add(String.format(" %s ",getWorningPredicate(dateQueryAdapter, "po.warningUntil"))); // 非可追溯器械包,返回多个器械包实例 Collection tousseInstanceList = tousseInstanceManager .getUnTraceableTousseInstanceListByFictitiousTousseDefinition( fixedBarcodeTousseInstance.getTousseDefinition(), sqlWheres, - " po.validUntil asc ", - AllPredicate.allPredicate( - TousseInstanceManagerImpl - .isNotExpire(new Date()), - tousseInstanceManager - .checkTousseInstanceHasNotRecall(),tousseInstanceManager.checkTousseInstanceNotInWarningPeriod()),needAmount); + " po.validUntil asc ",needAmount); return tousseInstanceList; } + + private String getValidUntilPredicate(DateQueryAdapter dateQueryAdapter,String field) { + Date validUntil = new Date(); + String validUntilSql = " " + + dateQueryAdapter.dateConverAdapter2(Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS.format(validUntil), + "yyyy-mm-dd HH24:MI:SS"); + + return String.format(" (%s is null or %s <= %s) ", field,field, validUntilSql); + } + + private String getWorningPredicate(DateQueryAdapter dateQueryAdapter, + String field) { + if(supplyRoomConfigManager.getSystemParamsObj().getWarningTousseWhetherDelivery()){ + return ""; + } + Date validUntil = new Date(); + String validUntilSql = " " + + dateQueryAdapter.dateConverAdapter2(Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS.format(validUntil), + "yyyy-mm-dd HH24:MI:SS"); + + return String.format(" (%s is null or %s <= %s) ", field,field, validUntilSql); + } /** * 根据固定条码获取能发货的外部代理灭菌包实例 * @param invoicePlan @@ -2732,17 +2746,14 @@ TousseInstance.STATUS_NO_DELIVER)); sqlWheres.add("po.tousseFixedBarcode = 0 "); sqlWheres.add(String.format(" %s ", SqlUtils.getLongFieldPredicate("po.invoicePlanID", invoicePlan.getId()))); + sqlWheres.add(String.format(" %s ",getValidUntilPredicate(dateQueryAdapter, "po.validUntil"))); // 非可追溯器械包,返回多个器械包实例 Collection tousseInstanceList = tousseInstanceManager .getUnTraceableTousseInstanceListByFictitiousTousseDefinition( fixedBarcodeTousseInstance.getTousseDefinition(), sqlWheres, null, - AllPredicate.allPredicate( - TousseInstanceManagerImpl - .isNotExpire(new Date()), - tousseInstanceManager - .checkTousseInstanceHasNotRecall()),needAmount); + needAmount); return tousseInstanceList; } private JsonObject getFixedBarcodeInfo(