Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java =================================================================== diff -u -r16570 -r16634 --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java (.../ServiceManagerImpl.java) (revision 16570) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java (.../ServiceManagerImpl.java) (revision 16634) @@ -1476,6 +1476,9 @@ return JSONUtil.buildErrorMsgJsonResult("暂不支持登记高值耗材"); } + if(!(barcodeDevice instanceof TousseInstance)){ + return JSONUtil.buildErrorMsgJsonResult("请扫描器械包条码或者诊疗号或者住院号"); + } // ***验证器械包*** TousseInstance tousseInstance = (TousseInstance) barcodeDevice; // 暂不支持登记除普通器械包以外的包 @@ -1513,11 +1516,35 @@ return JSONUtil.buildErrorMsgJsonResult("器械包已被召回,不能登记"); } + List acceptStatus = new ArrayList<>(); + boolean notSignedItemsCanRegistUseRecord = CssdUtils.getSystemSetConfigByNameBool("notSignedItemsCanRegistUseRecord"); + if(notSignedItemsCanRegistUseRecord){ + acceptStatus.add(TousseInstance.STATUS_SHIPPED); + } + acceptStatus.add(TousseInstance.STATUS_SIGNED); + JSONObject extraParam = params.optJSONObject("extraParam"); + Object barcodeCol = null; + if(extraParam != null){ + JSONArray tousseInstanceBarcodeJsonArray = extraParam.getJSONArray("scanedBarcodes"); + if(CollectionUtils.isNotEmpty(tousseInstanceBarcodeJsonArray)){ + barcodeCol = JSONArray.toCollection(tousseInstanceBarcodeJsonArray, String.class); + } + } + + TousseInstance older = tousseInstanceManager.getExpireNearest(tousseInstance, acceptStatus,(Collection)barcodeCol); + JSONObject olderJson = new JSONObject(); + if(older != null){ + olderJson.put("barcode", older.getBarcode()); + olderJson.put("tousseName", older.getTousseDefinitionName()); + } JSONObject dataJson = JSONObject.fromObject(tousseInstance, buildJsonConfigForTousseInstance()); - return new JSONStringer().object().key("success").value(true) - .key("type").value("tousseInstance").key("data") - .value(dataJson).endObject().toString(); + JSONObject json = JSONUtil.buildJsonObject(true); + json.put("type", "tousseInstance"); + json.put("data", dataJson); + json.put("older", olderJson); + json.put("olderTousseComfirmForUserecord", CssdUtils.getSystemSetConfigByNameBool("olderTousseComfirmForUserecord")); + return json.toString(); } // 改变多条使用记录的状态为已审核 Index: forgon-tools/src/main/java/com/forgon/tools/util/SqlUtils.java =================================================================== diff -u -r16225 -r16634 --- forgon-tools/src/main/java/com/forgon/tools/util/SqlUtils.java (.../SqlUtils.java) (revision 16225) +++ forgon-tools/src/main/java/com/forgon/tools/util/SqlUtils.java (.../SqlUtils.java) (revision 16634) @@ -87,6 +87,20 @@ return String.format(" %s IN (%s) ", field, s); } /** + * 获取字符串集合的sql条件 + * @param field + * @param p + * @return + */ + public static String getStringFieldNotInCollectionsPredicate(String field, + Iterable p) { + if (p == null || !p.iterator().hasNext()) { + return String.format(" 1=0 "); + } + String s = joinToWhereInConditionForStringProperties(p); + return String.format(" %s NOT IN (%s) ", field, s); + } + /** * 获取非字符串集合的sql条件 * @param field * @param p Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java =================================================================== diff -u -r16629 -r16634 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 16629) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 16634) @@ -2449,17 +2449,27 @@ } @Override - public TousseInstance getExpireNearest(TousseInstance tousseInstance,List acceptStatus) { - if(tousseInstance == null || tousseInstance.getTousseDefinition() == null){ + public TousseInstance getExpireNearest(TousseInstance tousseInstance,List acceptStatus,Collection scanedBarcodes) { + if(tousseInstance == null || tousseInstance.getTousseDefinition() == null || tousseInstance.getValidUntil() == null){ return null; } + Calendar c = Calendar.getInstance(); + ForgonDateUtils.setTime(c, 0, 0, 0); + Date startDate = c.getTime(); + c.setTime(tousseInstance.getValidUntil()); + ForgonDateUtils.setTime(c, 0, 0, 0); + Date endDate = c.getTime(); + String hql = "po.tousseDefinition.id=" + tousseInstance.getTousseDefinition().getId(); if(DatabaseUtil.isPoIdValid(tousseInstance.getId())){ hql += " and po.id <> " + tousseInstance.getId(); } + if(CollectionUtils.isNotEmpty(scanedBarcodes)){ + hql += " and " + SqlUtils.getStringFieldNotInCollectionsPredicate("po.barcode", scanedBarcodes); + } hql += " and " + SqlUtils.getStringFieldInCollectionsPredicate("po.status", acceptStatus); - hql += " and po.validUntil > " + dateQueryAdapter.dateAdapter(new Date()); - hql += " and po.validUntil < " + dateQueryAdapter.dateAdapter(tousseInstance.getValidUntil()); + hql += " and po.validUntil > " + dateQueryAdapter.dateAdapter(startDate); + hql += " and po.validUntil < " + dateQueryAdapter.dateAdapter(endDate); hql += " order by po.validUntil asc"; return getFirst(hql); } Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/UseRecordAction.java =================================================================== diff -u -r16625 -r16634 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/UseRecordAction.java (.../UseRecordAction.java) (revision 16625) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/UseRecordAction.java (.../UseRecordAction.java) (revision 16634) @@ -2,7 +2,6 @@ import java.io.IOException; import java.io.PrintWriter; -import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; @@ -49,7 +48,6 @@ import com.forgon.tools.json.JSONUtil; import com.forgon.tools.string.StringTools; import com.google.gson.Gson; -import com.google.gson.JsonObject; import com.opensymphony.xwork2.ModelDriven; /** @@ -565,6 +563,7 @@ */ public void loadScanedGoods(){ String barcode = StrutsParamUtils.getPraramValue("barcode", null); + String scanedBarcodes = StrutsParamUtils.getPraramValue("scanedBarcodes", ""); JSONObject obj = new JSONObject(); HttpServletResponse response = StrutsParamUtils.getResponse(); response.setCharacterEncoding("UTF-8"); @@ -591,7 +590,7 @@ acceptStatus.add(TousseInstance.STATUS_SHIPPED); } acceptStatus.add(TousseInstance.STATUS_SIGNED); - TousseInstance older = tousseInstanceManager.getExpireNearest(ti, acceptStatus); + TousseInstance older = tousseInstanceManager.getExpireNearest(ti, acceptStatus,StringTools.toCollectionIgnoreNullAndBlank(scanedBarcodes)); //判断当前用户登录科室是否存在共用科室配置 if(CollectionUtils.isNotEmpty(goodsDepartShareConfigManager.getGoodsShareDepartList(currentOrgUnitCode))){ //判断包实例所属科室是否与当前用户登录科室配置物品共享 Index: ssts-web/src/main/webapp/disinfectsystem/useRecord/useRecordForm.js =================================================================== diff -u -r16625 -r16634 --- ssts-web/src/main/webapp/disinfectsystem/useRecord/useRecordForm.js (.../useRecordForm.js) (revision 16625) +++ ssts-web/src/main/webapp/disinfectsystem/useRecord/useRecordForm.js (.../useRecordForm.js) (revision 16634) @@ -120,7 +120,8 @@ Ext.Ajax.request({ url : WWWROOT + '/disinfectSystem/useRecordAction!loadScanedGoods.do', params : { - barcode : barcode + barcode : barcode, + scanedBarcodes : getTousseGridData() }, success : function(response, options) { var result = response.responseText; Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java =================================================================== diff -u -r16629 -r16634 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 16629) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 16634) @@ -354,8 +354,9 @@ * 获取跟对应包实例同一个包定义的,失效期在此包实例之前,也是最靠近失效期的包实例对象 * @param tousseInstance 源包实例 * @param acceptStatus 有效的包实例的状态 + * @param scanedBarcodes 已扫描的器械包条码,需要将这些包排除 * @return */ - public TousseInstance getExpireNearest(TousseInstance tousseInstance,List acceptStatus); + public TousseInstance getExpireNearest(TousseInstance tousseInstance,List acceptStatus,Collection scanedBarcodes); }