Index: ssts-web/src/main/webapp/disinfectsystem/config/xjjqzyy/config.js =================================================================== diff -u -r25642 -r25665 --- ssts-web/src/main/webapp/disinfectsystem/config/xjjqzyy/config.js (.../config.js) (revision 25642) +++ ssts-web/src/main/webapp/disinfectsystem/config/xjjqzyy/config.js (.../config.js) (revision 25665) @@ -151,6 +151,14 @@ showInvoiceAssistantSender:false, //是否开启根据科室加载模板 isOpenLoadTemplateByUnit:true, + //是否启用快速入筐按钮(true为启用,false或者不配置都不启用) + //enableExpressIntoContainer: true, + //是否启用清点确认按钮 (true为启用,false或者不配置都不启用) + //enbaleCheckToConfirm:true, + //是否启用存在更早失效物品的PC端的弹窗确认提示 + enableExistEarlierExpirationGoodsConfirmDialogForPC:true, + //是否启用存在更早失效物品的PDA端的弹窗确认提示 + enableExistEarlierExpirationGoodsConfirmDialogForPDA:true, //标识牌打印显示包名和编号 printIdCardNameWithIdNumber:true } \ No newline at end of file Index: forgon-tools/src/main/java/com/forgon/tools/date/DateTools.java =================================================================== diff -u -r25399 -r25665 --- forgon-tools/src/main/java/com/forgon/tools/date/DateTools.java (.../DateTools.java) (revision 25399) +++ forgon-tools/src/main/java/com/forgon/tools/date/DateTools.java (.../DateTools.java) (revision 25665) @@ -657,6 +657,12 @@ return new SimpleDateFormat(formatType).format(date); } + /** + * 判断是否已经过了失效日期 + * @param expireDate 失效日期 + * @param today 今天的日期 + * @return 如果今天的日期等于或者晚于失效日期,则已经失效,返回true,否则返回false + */ public static boolean isExpire(Date expireDate, Date today){ if(expireDate == null || today == null) return false; @@ -678,6 +684,13 @@ return isExpire; } + /** + * 判断是否处于开始报警日期和失效日期之间 + * @param expireDate 失效日期 + * @param warningDate 开始报警日期 + * @param today 今天的日期 + * @return 如果今天的日期早于失效日期,并且晚于或等于报警日期,则返回true,否则返回false + */ public static boolean isDuringWarningPeriod(Date expireDate, Date warningDate,Date today){ if(expireDate == null || today == null || warningDate == null) return false; @@ -751,7 +764,25 @@ setStart(calendar); return formatTime(calendar, format); } + /** + * 获取某一天的开始时间 + * @param format + * @return + */ + public static Date startOfDate(Date someDay) { + Calendar cal = Calendar.getInstance(); + cal.setTime(someDay); + + cal.set(Calendar.HOUR_OF_DAY, 0); + cal.set(Calendar.MINUTE, 0); + cal.set(Calendar.SECOND, 0); + cal.set(Calendar.MILLISECOND, 0); + + return cal.getTime(); + } + + /** * 当天的结束时间 * @param format 时间格式 * @return Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/action/InvoiceAction.java =================================================================== diff -u -r25651 -r25665 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/action/InvoiceAction.java (.../InvoiceAction.java) (revision 25651) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/action/InvoiceAction.java (.../InvoiceAction.java) (revision 25665) @@ -1810,6 +1810,20 @@ if(src.has("type")){ type = src.get("type").getAsString(); } + + if (src.has("needConfirmForPC")){ + result.addProperty("needConfirmForPC", src.get("needConfirmForPC").getAsBoolean()); + } + + if (src.has("needConfirmForPDA")){ + result.addProperty("needConfirmForPDA", src.get("needConfirmForPDA").getAsBoolean()); + } + + if (src.has("confirmMessage")){ + result.addProperty("confirmMessage", src.get("confirmMessage").getAsString()); + } + + if(!src.get("success").getAsBoolean()){ InvoiceGoodsVo vo = new InvoiceGoodsVo(); vo.setValidatePass(false); Index: ssts-web/src/main/webapp/disinfectsystem/invoice/invoicePlanExtractedForm.js =================================================================== diff -u -r25583 -r25665 --- ssts-web/src/main/webapp/disinfectsystem/invoice/invoicePlanExtractedForm.js (.../invoicePlanExtractedForm.js) (revision 25583) +++ ssts-web/src/main/webapp/disinfectsystem/invoice/invoicePlanExtractedForm.js (.../invoicePlanExtractedForm.js) (revision 25665) @@ -1139,6 +1139,14 @@ } } + // 在PC端需要弹窗让用户确认 + if (result.needConfirmForPC){ + if (!confirm(result.confirmMessage)){ + continue; + } + } + + // 增加物品到已扫描列表 addGoods(goods,speakBasket); } Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r25655 -r25665 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 25655) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 25665) @@ -5562,9 +5562,23 @@ cal.set(Calendar.SECOND, 0); validUntil = cal.getTime(); } + // 判断物品是否已过期 if (DateTools.isExpire(validUntil, new Date())) { return buildErrorMsgJsonResult(tousseNameAndBarcode+"已过期",tousseInstance); } + + // 是否启用存在更早失效物品的PC端的弹窗确认提示 + Boolean enableExistEarlierExpirationGoodsConfirmDialogForPC = CssdUtils.getSystemSetConfigByNameBool("enableExistEarlierExpirationGoodsConfirmDialogForPC"); + // 是否启用存在更早失效物品的PC端的弹窗确认提示 + Boolean enableExistEarlierExpirationGoodsConfirmDialogForPDA = CssdUtils.getSystemSetConfigByNameBool("enableExistEarlierExpirationGoodsConfirmDialogForPDA"); + + // 查询是否有失效日期更早,但是还没过失效期的器械包,提示用户是否优先发放该物品 + String confirmMessage = isExistEarlierExpirationGoods(tousseInstance, + enableExistEarlierExpirationGoodsConfirmDialogForPC, + enableExistEarlierExpirationGoodsConfirmDialogForPDA); + + + // 判断物品是否处于告警期 Date warningUntil = tousseInstance.getWarningUntil(); if (DateTools.isDuringWarningPeriod(validUntil, warningUntil, new Date())) { @@ -5599,6 +5613,20 @@ result.add("data", dataJSONObject); logScannedTousse(dataJSONObject); result.add("tips", tips); + + // 如果需要用户确认,返回额外的信息 + if (StringUtils.isNotBlank(confirmMessage)){ + // PC端是否需要弹出确认框 + if (enableExistEarlierExpirationGoodsConfirmDialogForPC){ + result.addProperty("needConfirmForPC", true); + } + // PDA端是否需要弹出确认框 + if (enableExistEarlierExpirationGoodsConfirmDialogForPDA){ + result.addProperty("needConfirmForPDA", true); + } + result.addProperty("confirmMessage", confirmMessage); + } + return result; }else{ //如果存在器械包实例条码(尾) @@ -5994,6 +6022,75 @@ return buildErrorMsgJsonResult("查无此物品"); } } + + /** + * 检查是否存在更早过期的同名的器械包,和传入的包实例的过期日期相比较。 + * 过期时间比传入的包的过期时间早,并且不在同1天,才需要用户进行确认。 + * + * 如果存在,则返回确认提示信息,提示用户同名的最早过期的包的日期。 + * + * @param tousseInstance 扫描的器械包实例 + * @param enableExistEarlierExpirationGoodsConfirmDialogForPC + * @param enableExistEarlierExpirationGoodsConfirmDialogForPDA + * @return 需要确认的消息文本。如果没有需要确认的消息,则返回空值 + */ + private String isExistEarlierExpirationGoods( + final TousseInstance tousseInstance, + Boolean enableExistEarlierExpirationGoodsConfirmDialogForPC, + Boolean enableExistEarlierExpirationGoodsConfirmDialogForPDA) { + + String confirmMessage = ""; + + // 如果不是器械包类型,不进行判断 + if (!TousseDefinition.PACKAGE_TYPE_INSIDE.equals(tousseInstance.getType())){ + return confirmMessage; + } + + // 查询是否存在同名字的更早失效的物品 + if (enableExistEarlierExpirationGoodsConfirmDialogForPC || enableExistEarlierExpirationGoodsConfirmDialogForPDA){ + + Session session = objectDao.getHibernateSession(); + + String queryString = "select po from TousseInstance po where " + + "po.tousseName = :tousseName and po.status = :status and po.validUntil < :validUntil "; + + TousseDefinition tousseDefinition = tousseInstance.getTousseDefinition(); + // 判断包定义中,是否限制发货的科室 + String limitInvoiceDepart = tousseDefinition.getLimitInvoiceDepart(); + if (TousseDefinition.STR_YES.equals(limitInvoiceDepart)){ + queryString += "and depart = :depart "; + } + queryString += "order by po.validUntil asc "; + + String tousseName = tousseInstance.getTousseName(); + + Query query = session.createQuery(queryString); + query.setParameter("tousseName", tousseName); + query.setParameter("status", TousseInstance.STATUS_STERILED); + + query.setParameter("validUntil", DateTools.startOfDate(tousseInstance.getValidUntil())); + + if (TousseDefinition.STR_YES.equals(limitInvoiceDepart)){ + // 器械包的所属科室,即回收的来源科室 + String depart = tousseInstance.getDepart(); + query.setParameter("depart", depart); + } + + List list = query.list(); + + if (list.size() > 0 ){ + + // 最早过期的包 + TousseInstance earlistTousseInstance = list.get(0); + + String expireDate = earlistTousseInstance.getValidUntilStr(ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDD); + + confirmMessage = "有" + expireDate + "过期的" + tousseName + ",是否继续发放本物品?"; + } + + } + return confirmMessage; + } @Override public JsonObject getInfoByBodyCodeForInvoiceScan(JSONObject params){