Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java =================================================================== diff -u -r25209 -r25226 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 25209) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 25226) @@ -3203,6 +3203,38 @@ } return haveRoutineMonitoring; } + @Override + public boolean isNeedRoutineMonitoringWarning2(Long id){ + boolean haveRoutineMonitoring = false; + if(id == null){ + return haveRoutineMonitoring; + } + String subString = "SUBSTRING"; + if(dbConnection.isOracle()){ + subString = "SUBSTR"; + } + String sql = " select count(*) from TousseInstance ti join Sterilizer s on s.name = ti.sterilizerName " + + " left join QualityMonitoringInstance qi on qi.sterilizerName = s.name and qi.sterilizerFrequency = ti.sterileFrequency " + + " and " + subString + "(qi.sterilizerDate,0,10) = " + subString + "(ti.sterileStartTime,0,10) " + + " where s.isRoutineMonitoring = '是' and (qi.id is null or qi.type <> '" + FormDefinition.FOMRTYPE_PERIODICMONITORING + "')" + + " and ti.id = " + id + ""; + ResultSet result = objectDao.executeSql(sql); + int count = 0; + try { + while (result.next()) { + count = result.getInt(1); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(result); + } + // 灭菌炉配了要定期监测,但没找到相关记录的定期监测 + if(count > 0){ + haveRoutineMonitoring = true; + } + return haveRoutineMonitoring; + } @Override public void setToWarehouse(Collection tousseInstances, Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java =================================================================== diff -u -r24431 -r25226 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 24431) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 25226) @@ -654,7 +654,7 @@ * @return true 当器械包的灭菌炉有配了定期监测,并且没有录入了相关的定期监测记录;其他情况均返回false */ public boolean isNeedRoutineMonitoringWarning(String barcodes); - + public boolean isNeedRoutineMonitoringWarning2(Long id); /** * 将器械包的集合设置仓库属性。如果targetWareHouse为null,则将包实例的仓库id设置为null,仓库名称设置为""; * @param tousseInstances Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManager.java =================================================================== diff -u -r23778 -r25226 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManager.java (.../InvoiceManager.java) (revision 23778) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManager.java (.../InvoiceManager.java) (revision 25226) @@ -229,6 +229,7 @@ public JSONArray getTousseInstancesForAuxiliaryInvoice(JSONObject params); + public String getRoutineMonitoringInfoByIds(String ids); /** * 获取手术预约单。在手术预约列表界面,点击其中一行打开发货界面的时候调用。参数为手术预约单的id集合. * 目前,每一个台次只有一张手术预约单 Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r25148 -r25226 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 25148) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 25226) @@ -115,6 +115,7 @@ import com.forgon.disinfectsystem.inventorymanagement.service.WriteBackInventoryHelper; import com.forgon.disinfectsystem.invoice.service.SubmitInvoiceContext; import com.forgon.disinfectsystem.invoice.service.SubmitInvoiceItem; +import com.forgon.disinfectsystem.invoicemanager.model.BiologicalMonitoringInfo; import com.forgon.disinfectsystem.invoicemanager.vo.BatchPrintInvoiceVo; import com.forgon.disinfectsystem.invoicemanager.vo.InvoicePrintVo; import com.forgon.disinfectsystem.invoicemanager.vo.InvoiceStaticsVo; @@ -8859,6 +8860,8 @@ tempVo.setAmount(tempVo.getDiposableGoodsAmount()); tempVo.setDiposableGoodsTotalPrice(tempVo .getDiposableGoodsTotalPrice() + totalPrice); + tempVo.setTotalPrice(tempVo + .getTotalPrice() + totalPrice); } else { tempVo = new InvoicePrintVo(); tempVo.setDiposableGoodsAmount(getDisplayAmout(invoiceItem, goodsItem)); @@ -9559,6 +9562,78 @@ return list; } + private static class TousseBiologicalMonitoringInfo { + public Long id; + public String tousseName; + public String barcode; + public String biologicalMonitoringEndDate; + public String endDate; + public String biologyResult; + public String biologicalMonitoringTime; + public String lagTime; + } + private List getTousseBiologicalMonitoringInfo(String ids) { + + List list = new ArrayList(); + + if (StringUtils.isNotBlank(ids)) { + String sqlFilter = String.format(" AND (t.id in(%s))", ids); + String sql = + "SELECT t.id,t.tousseName tousseName," + + "bd.barcode barcode," + + "sr.biologicalMonitoringEndDate biologicalMonitoringEndDate," + + "sr.endDate endDate," + + "sr.biologyResult biologyResult," + + "s.biologicalMonitoringTime biologicalMonitoringTime," + + "s.lagTime lagTime " + + + "FROM TousseInstance t," + + "barcodeDevice bd," + + "TousseDefinition td," + + "SterilizationRecord sr," + + "Sterilizer s " + + + "WHERE t.id=bd.id " + + "AND t.tousseDefinition_id=td.id " + + "AND t.sterilizationRecord_id=sr.id " + + "AND s.id=sr.sterilizer_id " + + "AND td.includeImplant=" + TousseDefinition.INCLUDE_IMPLANT + " " + + sqlFilter + ; + ResultSet result = objectDao.executeSql(sql); + + try { + while(result.next()){ + Long id = result.getLong("id"); + String tousseName = result.getString("tousseName"); + String barcode = result.getString("barcode"); + String biologicalMonitoringEndDate = result.getString("biologicalMonitoringEndDate"); + String endDate = result.getString("endDate"); + String biologyResult = result.getString("biologyResult"); + String biologicalMonitoringTime = result.getString("biologicalMonitoringTime"); + String lagTime = result.getString("lagTime"); + + TousseBiologicalMonitoringInfo map = new TousseBiologicalMonitoringInfo(); + map.id = id; + map.tousseName = tousseName; + map.barcode = barcode; + map.biologicalMonitoringEndDate = biologicalMonitoringEndDate; + map.endDate = endDate; + map.biologyResult = biologyResult; + map.biologicalMonitoringTime = biologicalMonitoringTime; + map.lagTime = lagTime; + list.add(map); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(result); + } + } + + return list; + } + /** * 根据器械包条码集合,获取 “包含植入物的器械包”生物监测的情况
* @@ -9655,6 +9730,108 @@ return vos; } + + + private Map getBiologicalMonitoringInfo2(String ids) { + Map map = new HashMap(); + List list = getTousseBiologicalMonitoringInfo(ids); + boolean biologicalMonitoringEnable = CssdUtils.getSystemSetConfigByNameBool("biologicalMonitoringEnable"); + if (CollectionUtils.isNotEmpty(list)) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + for (TousseBiologicalMonitoringInfo tousse : list) { + String noBiologicalMonitoring = ""; + String biologicalMonitoringNoResult = ""; + String biologicalMonitoringFail = ""; + String urgentDelivery = ""; + + String barcode = tousse.barcode; //器械包条码 + String endDate = tousse.endDate; //灭菌的结束时间 + String biologyResult = tousse.biologyResult; //生物监测的结果 + String biologicalMonitoringEndDate = tousse.biologicalMonitoringEndDate; //生物监测的结束时间 + String biologicalMonitoringTimeString = tousse.biologicalMonitoringTime; //对应灭菌炉配置的生物监测默认时间 + String lagTimeString = tousse.lagTime; //对应灭菌炉配置的灭菌与生物监测间隔时间 + + ///// + long nowTime = System.currentTimeMillis(); + if (SterilizationRecord.MONITOR_RESULT_NO.equals(biologyResult)) { + biologicalMonitoringNoResult = barcode; + if (StringUtils.isNotBlank(biologicalMonitoringEndDate)) { //填了生物监测的结束时间,这种情况就相当于,进行中 + try { + long biologicalMonitoringEndDateTime = sdf.parse(biologicalMonitoringEndDate).getTime(); + if (biologicalMonitoringEndDateTime > nowTime) { + urgentDelivery = barcode; + } + } catch (ParseException e) { + logger.debug("生物监测结束时间格式有误先不处理"); + } + } else { //没填生物监测的结束时间,这种情况,可能是漏填(只提示他结果为无即可,但是是否紧急发货还是要根据对应的灭菌炉配置的参数来判断) + noBiologicalMonitoring = barcode; + if (StringUtils.isNotBlank(lagTimeString) && StringUtils.isNotBlank(biologicalMonitoringTimeString)) { //在对应的灭菌炉"灭菌与生物监测间隔时间"和"生物监测持续时间"两个参数都要有配才会去判断是否紧急发货,否则默认常规 + try { + long lagTime = new Integer(lagTimeString).longValue()*60l*1000l; + long biologicalMonitoringTime = new Integer(biologicalMonitoringTimeString).longValue()*60l*1000l; + long endDateTime = sdf.parse(endDate).getTime(); + long biologicalMonitoringEndDateTime = endDateTime + lagTime + biologicalMonitoringTime; + + if (biologicalMonitoringEndDateTime > nowTime) { + urgentDelivery = barcode; + } + } catch (ParseException e) { + logger.debug("灭菌结束时间格式有误先不处理"); + } + } + } + } else { //如果生物监测结果不是"无",那么生物监测结束时间一定有值,(可能有些之前做了生物监测的旧数据,但是生物监测时间没填,所以在判断一下是否为null) + if (StringUtils.isNotBlank(biologicalMonitoringEndDate)) { + long biologicalMonitoringEndDateTime = 0; + try { + biologicalMonitoringEndDateTime = sdf.parse(biologicalMonitoringEndDate).getTime(); + } catch (ParseException e) { + logger.debug("生物监测结束时间格式有误先不处理"); + } + if (SterilizationRecord.MONITOR_RESULT_UNQUALIFIED.equals(biologyResult)) { //如果生物监测的结果不合格,强制不让发货 + biologicalMonitoringFail = barcode; + } + if (SterilizationRecord.MONITOR_RESULT_UNQUALIFIED.equals(biologyResult) || biologicalMonitoringEndDateTime > nowTime) { //生物监测没结束就发货 + urgentDelivery = barcode; + } + } + } + + + + BiologicalMonitoringInfo vo = new BiologicalMonitoringInfo(); + vo.noBiologicalMonitoring = StringTools.isNotBlank(noBiologicalMonitoring); + vo.biologicalMonitoringNoResult = StringTools.isNotBlank(biologicalMonitoringNoResult); + vo.biologicalMonitoringFail = StringTools.isNotBlank(biologicalMonitoringFail); + vo.urgentDelivery = urgentDelivery; + if (StringTools.isNotBlank(urgentDelivery)) { //紧急发货 + vo.isRoutine = TousseInstance.ROUTINE_NO; + } + + map.put(tousse.id.toString(), vo); + } + } + + String[] idArr = ids.split(","); + for (String id : idArr) { + BiologicalMonitoringInfo vo = map.get(id); + if(vo == null){ + vo = new BiologicalMonitoringInfo(); + map.put(id, vo); + } + boolean needRoutineMonitoringWarming = false; + if (biologicalMonitoringEnable) { + if (tousseInstanceManager.isNeedRoutineMonitoringWarning2(Long.valueOf(id))) { + needRoutineMonitoringWarming = true; + } + } + vo.needRoutineMonitoringWarming = needRoutineMonitoringWarming; + } + + return map; + + } @Override public String getFirstAssistant(String[] ids) { @@ -9686,7 +9863,7 @@ String tousseTypes = JSONUtil.optString(params, "tousseTypes", null); boolean auxiliaryInvoice_limitInvoiceDepartByTousseDefinition = CssdUtils.getSystemSetConfigByNameBool("auxiliaryInvoice_limitInvoiceDepartByTousseDefinition"); - boolean biologicalMonitoringEnable = CssdUtils.getSystemSetConfigByNameBool("biologicalMonitoringEnable"); + JSONArray jsonArray = new JSONArray(); SupplyRoomConfig config = supplyRoomConfigManager.getSystemParamsObj(); String invoiceOrigin = config.getInvoiceOrigin(); @@ -9786,17 +9963,8 @@ List tousseInstanceList = tousseInstanceManager .getBySql(tousseInstanceSql.toString()); if (tousseInstanceList != null) { - StringBuilder barcodes = new StringBuilder(); + for (TousseInstance tousseInstance : tousseInstanceList) { - if(barcodes.length() == 0){ - barcodes.append(tousseInstance.getBarcode()); - }else{ - barcodes.append(";"); - barcodes.append(tousseInstance.getBarcode()); - } - } - JSONObject biologicalMonitoringInfoObjs = getBiologicalMonitoringInfo(barcodes.toString()); - for (TousseInstance tousseInstance : tousseInstanceList) { TousseDefinition td = tousseInstance.getTousseDefinition(); if(td == null){ continue; @@ -9820,22 +9988,14 @@ Date warningUntil = tousseInstance.getWarningUntil(); if (DateTools.isDuringWarningPeriod(validUntil, warningUntil, new Date())) { - SupplyRoomConfig cofig = supplyRoomConfigManager.getSystemParamsObj(); - Boolean warningTousseWhetherDelivery = cofig + Boolean warningTousseWhetherDelivery = config .getWarningTousseWhetherDelivery(); if (warningTousseWhetherDelivery) { } else { continue; } } - String barcode = tousseInstance.getBarcode(); - boolean needRoutineMonitoringWarming = false; - if (biologicalMonitoringEnable) { - if (tousseInstanceManager.isNeedRoutineMonitoringWarning(barcode)) { - needRoutineMonitoringWarming = true; - } - } JSONObject obj = new JSONObject(); obj.put("id", tousseInstance.getId()); @@ -9858,27 +10018,12 @@ obj.put("biologicalMonitoringNoResult", false); obj.put("biologicalMonitoringFail", false); obj.put("notSendAmount", 0); - obj.put("needRoutineMonitoringWarming", needRoutineMonitoringWarming); + JSONObject jsonObject = tousseDefinitionInfoMap.get(td.getId().toString()); if(jsonObject != null){ obj.put("notSendAmount", JSONUtil.optInt(jsonObject, "notSendAmount", 0)); } - JSONObject jsonVo = (JSONObject) biologicalMonitoringInfoObjs.get(barcode); - if (jsonVo != null) { - String noBiologicalMonitoring = jsonVo.optString("noBiologicalMonitoring"); - String biologicalMonitoringNoResult = jsonVo.optString("biologicalMonitoringNoResult"); - String biologicalMonitoringFail = jsonVo.optString("biologicalMonitoringFail"); - String urgentDelivery = jsonVo.optString("urgentDelivery"); - - obj.put("noBiologicalMonitoring", StringTools.isNotBlank(noBiologicalMonitoring)); - obj.put("biologicalMonitoringNoResult", StringTools.isNotBlank(biologicalMonitoringNoResult)); - obj.put("biologicalMonitoringFail", StringTools.isNotBlank(biologicalMonitoringFail)); - - if (StringTools.isNotBlank(urgentDelivery)) { //紧急发货 - obj.put("isRoutine", TousseInstance.ROUTINE_NO); - } - } jsonArray.add(obj); } @@ -9889,6 +10034,12 @@ return jsonArray; } + public String getRoutineMonitoringInfoByIds(String ids){ + Map map = getBiologicalMonitoringInfo2(ids); + String json = new Gson().toJson(map); + return json; + } + /** * 获取手术预约单。在手术预约列表界面,点击其中一行打开发货界面的时候调用。参数为手术预约单的id集合. * 目前,每一个台次只有一张手术预约单