Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/dwr/table/InvoiceTableManager.java =================================================================== diff -u -r36155 -r36698 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/dwr/table/InvoiceTableManager.java (.../InvoiceTableManager.java) (revision 36155) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/dwr/table/InvoiceTableManager.java (.../InvoiceTableManager.java) (revision 36698) @@ -6,10 +6,12 @@ import java.util.Calendar; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Set; import net.sf.json.JSONArray; import net.sf.json.JSONObject; @@ -286,21 +288,34 @@ "invoicePlan", "returnedTousseItems", "diposableGoodsItems", "tousseInstances", "noProvideGoods", "invoiceItem" }); - long time2 = System.currentTimeMillis(); JSONObject jsonObject = JSONObject.fromObject(json); JSONArray rows = jsonObject.optJSONArray(JSONUtil.JSON_KEY_ROWS); if(CollectionUtils.isNotEmpty(rows)){ List invoiceIdList = new ArrayList(); + //病人所属科室编码或者名称 + Set ascriptionDepartmentCodeSet = new HashSet(); for (int i = 0; i < rows.size(); i++) { JSONObject rowJsonObject = rows.optJSONObject(i); invoiceIdList.add(rowJsonObject.optLong("id")); + //发货单关联的申请单 + JSONObject invoicePlanJson = rowJsonObject.optJSONObject("invoicePlan"); + if(invoicePlanJson != null){ + String ascriptionDepartment = invoicePlanJson.optString("ascriptionDepartment"); + String type = invoicePlanJson.optString("type"); + if(StringUtils.isNotBlank(ascriptionDepartment) + && StringUtils.equals(type, InvoicePlan.TYPE_FOREIGNTOUSSEAPPLIACTION)){ + ascriptionDepartmentCodeSet.add(ascriptionDepartment); + } + } } JSONArray newRows = new JSONArray(); Map invoiceIdToInvoiceItemJSONArrayMap = invoiceManager.getInvoiceItemJsonArrayMapByInvoiceIdList(invoiceIdList); //查询发货单关联的集合码SZYK-45 Map invoiceSNBarcodeMap = getInvoiceSerialNumberSetBarcode(invoiceIdList); //查询发货单上物品关联的签收记录。并且已经上传手写签名图片SZSLGZXYY-16 Map invoiceIdSignRecordIdMap = getInvoiceIdHandwrittenSignatureSignRecordIdMap(invoiceIdList); + //查询发货单关联的外来器械包申请单的所属科室名称NFYY-86 + Map ascriptionDepartmentMap = orgUnitManager.getOrgUnitCodeAndNameMapByOrgUnitCodes(ascriptionDepartmentCodeSet); for (int i = 0; i < rows.size(); i++) { JSONObject rowJsonObject = rows.optJSONObject(i); JSONArray array = invoiceIdToInvoiceItemJSONArrayMap.get(rowJsonObject.optLong("id")); @@ -310,6 +325,26 @@ } String signRecordIdStr = invoiceIdSignRecordIdMap.get(rowJsonObject.optLong("id")); rowJsonObject.put("handwrittenSignatureSignRecordId", StringTools.defaultString(signRecordIdStr, "")); + //发货单关联的申请单 + JSONObject invoicePlanJson = rowJsonObject.optJSONObject("invoicePlan"); + if(invoicePlanJson != null){ + Long invoicePlanId = invoicePlanJson.optLong("id"); + String type = invoicePlanJson.optString("type"); + if(DatabaseUtil.isPoIdValid(invoicePlanId) + && StringUtils.equals(type, InvoicePlan.TYPE_FOREIGNTOUSSEAPPLIACTION)){ + invoicePlanJson.put("hospitalNumber", invoicePlanJson.optString("hospitalNumber")); + invoicePlanJson.put("clinicNumber", invoicePlanJson.optString("clinicNumber")); + invoicePlanJson.put("operationName", invoicePlanJson.optString("surgery")); + invoicePlanJson.put("patientName", invoicePlanJson.optString("patient")); + invoicePlanJson.put("doctors", invoicePlanJson.optString("doctor")); + invoicePlanJson.put("operatingRoom", invoicePlanJson.optString("operationRoom")); + invoicePlanJson.put("consoleName", ""); + String ascriptionDepartment = invoicePlanJson.optString("ascriptionDepartment"); + String ascriptionDepartmentName = ascriptionDepartmentMap.get(ascriptionDepartment); + invoicePlanJson.put("ascriptionDepartment", StringUtils.isBlank(ascriptionDepartmentName) ? ascriptionDepartment : ascriptionDepartmentName); + rowJsonObject.put("invoicePlan", invoicePlanJson); + } + } newRows.add(rowJsonObject); } jsonObject.put(JSONUtil.JSON_KEY_ROWS, newRows); Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r36637 -r36698 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 36637) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 36698) @@ -11781,6 +11781,7 @@ for (Invoice invoice : invoices) { List tousseList = invoiceTousseInstances.get(invoice.getId());//invoice.getTousseInstances(objectDao); if(CollectionUtils.isNotEmpty(tousseList)){ + InvoicePlan ip = invoice.getInvoicePlan(); for (TousseInstance tousseInstance : tousseList) { TousseDefinition tousseDefinition = tousseInstance.getTousseDefinition(); if(tousseDefinition.isDisinfection()){ @@ -11832,6 +11833,8 @@ tempVo.setTotalPrice(totalPrice + tousseInstance.getPrice()); } + //NFYY-86 打印外来器械包申请单患者相关信息:“病人姓名”、“住院号/诊疗号”、“病人所属科室” + setInvoicePrintVoForeignToussApplicationPatienInfo(ip, tempVo); } else { String expireDateStr = tousseInstance.getValidUntilStr(Constants.SIMPLEDATEFORMAT_YYYYMMDD); @@ -11852,6 +11855,8 @@ tempVo.setSupplierName(tousseDefinition.getSupplierName()); //ZJYY-95打印发货单时,如果需要物品申领备注,只要配置打印包实例的备注字段即可 tempVo.setRemark(StringUtils.defaultString(tousseInstance.getRemark())); + //NFYY-86 打印外来器械包申请单患者相关信息:“病人姓名”、“住院号/诊疗号”、“病人所属科室” + setInvoicePrintVoForeignToussApplicationPatienInfo(ip, tempVo); voList.add(tempVo); } Set invoiceIds = tempVo.getInvoiceIds(); @@ -11866,9 +11871,98 @@ logger.debug("发货单(id:" + invoice.getId()+")没有器械包"); } } + //外来器械包申请单的所属科室记录的是科室编码,需要重新查询科室名称 + tousseGroupIdPrintVoMap = searchAscriptionDepartmentName(tousseGroupIdPrintVoMap); return tousseGroupIdPrintVoMap; } + /** + * 外来器械包申请单的所属科室记录的是科室编码,需要重新查询科室名称 + * @param tousseGroupIdPrintVoMap + * @return + */ + private Map> searchAscriptionDepartmentName(Map> tousseGroupIdPrintVoMap) { + if(MapUtils.isEmpty(tousseGroupIdPrintVoMap)){ + return tousseGroupIdPrintVoMap; + } + Set ascriptionDepartmentCodeOrNameSet = new HashSet(); + for (Entry> entry : tousseGroupIdPrintVoMap.entrySet()) { + List invoicePrintVoList = entry.getValue(); + if(CollectionUtils.isNotEmpty(invoicePrintVoList)){ + for (InvoicePrintVo invoicePrintVo : invoicePrintVoList) { + String ascriptionDepartments = invoicePrintVo.getAscriptionDepartments(); + if(StringUtils.isBlank(ascriptionDepartments)){ + continue; + } + String[] ascriptionDepartmentArray = StringTools.split(ascriptionDepartments, ","); + for (String ascriptionDepartment : ascriptionDepartmentArray) { + ascriptionDepartmentCodeOrNameSet.add(ascriptionDepartment); + } + } + } + } + if(CollectionUtils.isEmpty(ascriptionDepartmentCodeOrNameSet)){ + return tousseGroupIdPrintVoMap; + } + Map orgUnitCodeAndNameMap = orgUnitManager.getOrgUnitCodeAndNameMapByOrgUnitCodes(ascriptionDepartmentCodeOrNameSet); + if(MapUtils.isEmpty(orgUnitCodeAndNameMap)){ + return tousseGroupIdPrintVoMap; + } + + Map> result = new HashMap>(); + for (Entry> entry : tousseGroupIdPrintVoMap.entrySet()) { + List invoicePrintVoList = entry.getValue(); + if(CollectionUtils.isNotEmpty(invoicePrintVoList)){ + for (InvoicePrintVo invoicePrintVo : invoicePrintVoList) { + String ascriptionDepartments = invoicePrintVo.getAscriptionDepartments(); + if(StringUtils.isBlank(ascriptionDepartments)){ + continue; + } + String[] ascriptionDepartmentArray = StringTools.split(ascriptionDepartments, ","); + Set ascriptionDepartmentNames = new HashSet(); + for (String ascriptionDepartment : ascriptionDepartmentArray) { + String orgUnitName = orgUnitCodeAndNameMap.get(ascriptionDepartment); + if(orgUnitName == null){ + ascriptionDepartmentNames.add(ascriptionDepartment); + }else{ + ascriptionDepartmentNames.add(orgUnitName); + } + } + invoicePrintVo.setAscriptionDepartments(StringTools.join(ascriptionDepartmentNames, ",")); + } + } + result.put(entry.getKey(), invoicePrintVoList); + } + + return result; + } + + /** + * 查询外来器械申请单的患者相关信息NFYY-86 + * @param ip + * @param tempVo + */ + private void setInvoicePrintVoForeignToussApplicationPatienInfo(InvoicePlan ip, InvoicePrintVo tempVo) { + if(ip != null && ip.isForeignTousseAppliaction() && tempVo != null){ + //外来器械申请单 + ForeignTousseApplication fta = (ForeignTousseApplication) ip; + //患者姓名 + String patient = fta.getPatient(); + //住院后 + String hospitalNumber = fta.getHospitalNumber(); + //诊疗号 + String clinicNumber = fta.getClinicNumber(); + //病人所属科室 + String ascriptionDepartment = fta.getAscriptionDepartment(); + tempVo.setPatientNames(StringTools.uniteTwoStringBySemicolon(tempVo.getPatientNames(), patient, ",")); + //如果住院号和诊疗号都不为空,则显示为“住院号/诊疗号”,例如“123456/J0054321”;如果只有住院号或者只有诊疗号,则只显示住院号或者诊疗号的值,例如“123456”或者“J0054321”。 + String hospitalNumAndClinicNumber = StringTools.uniteTwoStringBySemicolon(hospitalNumber, clinicNumber, "/"); + tempVo.setHospitalNumAndClinicNumber(StringTools.uniteTwoStringBySemicolon(tempVo.getHospitalNumAndClinicNumber(), hospitalNumAndClinicNumber, ",")); + tempVo.setAscriptionDepartments(StringTools.uniteTwoStringBySemicolon(tempVo.getAscriptionDepartments(), ascriptionDepartment, ",")); + } + } + + /** * 获取发货单中器械包(包括消毒物品)对应的回收数量。如果是不回收的,则获取申请数量 * @param invoices * @return @@ -12037,6 +12131,7 @@ } } List tousseList = tousseInstanceManager.getTousseInstanceByInvoiceId(invoice.getId()); + InvoicePlan ip = invoice.getInvoicePlan(); for (TousseInstance tousseInstance : tousseList) { TousseDefinition tousseDefinition = tousseInstance.getTousseDefinition(); if(tousseDefinition.isDisinfection()){ @@ -12057,6 +12152,8 @@ if (tempVo != null) { tempVo.setAmount(tempVo.getAmount() + 1); tempVo.setTotalPrice(MathTools.add(tempVo.getTotalPrice(), tousseInstance.getPrice()).doubleValue()); + //查询外来器械申请单的患者相关信息NFYY-86 + setInvoicePrintVoForeignToussApplicationPatienInfo(ip, tempVo); } else { String expireDateStr = tousseInstance.getValidUntilStr(Constants.SIMPLEDATEFORMAT_YYYYMMDD); @@ -12076,17 +12173,65 @@ tempVo.setTotalPrice(tousseInstance.getPrice() == null ? 0 : tousseInstance.getPrice()); tempVo.setSupplierName(tousseDefinition.getSupplierName()); tempVo.setRemark(StringUtils.defaultString(tousseInstance.getRemark())); + //查询外来器械申请单的患者相关信息NFYY-86 + setInvoicePrintVoForeignToussApplicationPatienInfo(ip, tempVo); voList.add(tempVo); } if(invoice.getInvoicePlan() != null && StringUtils.isBlank(tempVo.getApplicationDate())){ tempVo.setApplicationDate(invoice.getInvoicePlan().getApplicationTime()); } } } - + //查询所属科室名称 + searchAscriptionDepartmentName(voList); return voList; } + /** + * 查询所属科室名称 + * @param voList + */ + private void searchAscriptionDepartmentName(List voList) { + if(CollectionUtils.isEmpty(voList)){ + return; + } + Set ascriptionDepartmentCodeOrNameSet = new HashSet(); + if(CollectionUtils.isNotEmpty(voList)){ + for (InvoicePrintVo invoicePrintVo : voList) { + String ascriptionDepartments = invoicePrintVo.getAscriptionDepartments(); + if(StringUtils.isBlank(ascriptionDepartments)){ + continue; + } + String[] ascriptionDepartmentArray = StringTools.split(ascriptionDepartments, ","); + for (String ascriptionDepartment : ascriptionDepartmentArray) { + ascriptionDepartmentCodeOrNameSet.add(ascriptionDepartment); + } + } + } + if(CollectionUtils.isNotEmpty(ascriptionDepartmentCodeOrNameSet)){ + Map orgUnitCodeAndNameMap = orgUnitManager.getOrgUnitCodeAndNameMapByOrgUnitCodes(ascriptionDepartmentCodeOrNameSet); + if(MapUtils.isNotEmpty(orgUnitCodeAndNameMap)){ + for (InvoicePrintVo invoicePrintVo : voList) { + String ascriptionDepartments = invoicePrintVo.getAscriptionDepartments(); + if(StringUtils.isBlank(ascriptionDepartments)){ + continue; + } + Set ascriptionDepartmentSet = new HashSet(); + String[] ascriptionDepartmentArray = StringTools.split(ascriptionDepartments, ","); + for (String ascriptionDepartment : ascriptionDepartmentArray) { + String orgUnitName = orgUnitCodeAndNameMap.get(ascriptionDepartment); + if(orgUnitName == null){ + ascriptionDepartmentSet.add(ascriptionDepartment); + }else{ + ascriptionDepartmentSet.add(orgUnitName); + } + } + invoicePrintVo.setAscriptionDepartments(StringTools.join(ascriptionDepartmentSet, ",")); + } + } + } + } + @Override public Collection loadToussePrintData( String[] invoiceIds, boolean isMergeRemark) { @@ -13415,6 +13560,8 @@ //如果打印出来的单据是按照科室合并的,存在多个申请单号,则在打印出来的单据上显示多个申请单号,用逗号分隔;按申请单合并,则只会有一个申请单流水号ZJYY-76 String applicationSerialNumbers = getInvoicePlanSerialNumbersByInvoice(invoices); batchPrintInvoiceVo.setApplicationSerialNumbers(applicationSerialNumbers); + //打印的手术预约发货的发货单上增加手术间、手术台次BJDXZLYY-39 + searchOperationReservationInfo(invoices, batchPrintInvoiceVo); Map> tousseGroupPrintDataMap = null; if(CssdUtils.isDgszyyProject()){ tousseGroupPrintDataMap = loadToussePrintData_dgszyy(invoices, tousseGroupIds,invoiceTousseInstances,printedInvoiceItemIds,isMergeRemark); @@ -13482,6 +13629,36 @@ } /** + * 打印的手术预约发货的发货单上增加手术间、手术台次BJDXZLYY-39 + * @param invoices + * @param batchPrintInvoiceVo + */ + private void searchOperationReservationInfo(List invoices, + BatchPrintInvoiceVo batchPrintInvoiceVo) { + if(CollectionUtils.isEmpty(invoices)){ + return; + } + Set consoleNameSet = new HashSet(); + Set operatingRoomSet = new HashSet(); + for (Invoice invoice : invoices) { + InvoicePlan ip = invoice.getInvoicePlan(); + if(ip != null && ip.isOperationReservationApplication()){ + OperationReservation operationReservation = (OperationReservation) ip; + String consoleName = operationReservation.getConsoleName(); + String operatingRoom = operationReservation.getOperatingRoom(); + if(StringUtils.isNotBlank(operatingRoom)){ + operatingRoomSet.add(operatingRoom); + } + if(StringUtils.isNotBlank(consoleName)){ + consoleNameSet.add(consoleName); + } + } + } + batchPrintInvoiceVo.setConsoleName(StringTools.join(consoleNameSet, ",")); + batchPrintInvoiceVo.setOperatingRoom(StringTools.join(operatingRoomSet, ",")); + } + + /** * 获取发货单集合关联的申请单流水号 * @param invoices * @return Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/vo/BatchPrintInvoiceVo.java =================================================================== diff -u -r33287 -r36698 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/vo/BatchPrintInvoiceVo.java (.../BatchPrintInvoiceVo.java) (revision 33287) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/vo/BatchPrintInvoiceVo.java (.../BatchPrintInvoiceVo.java) (revision 36698) @@ -49,6 +49,14 @@ * 下送责任人 */ private String personInCharge; + /** + * 手术预约单的手术台次BJDXZLYY-39 + */ + private String consoleName; + /** + * 手术预约单的手术间BJDXZLYY-39 + */ + private String operatingRoom; private Collection tousse; private Collection diposableGoods; private Collection disinfectGoods; @@ -170,6 +178,18 @@ public void setPersonInCharge(String personInCharge) { this.personInCharge = personInCharge; } + public String getConsoleName() { + return consoleName; + } + public void setConsoleName(String consoleName) { + this.consoleName = consoleName; + } + public String getOperatingRoom() { + return operatingRoom; + } + public void setOperatingRoom(String operatingRoom) { + this.operatingRoom = operatingRoom; + } public Collection getTousse() { return tousse; } Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/vo/InvoicePrintVo.java =================================================================== diff -u -r33835 -r36698 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/vo/InvoicePrintVo.java (.../InvoicePrintVo.java) (revision 33835) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/vo/InvoicePrintVo.java (.../InvoicePrintVo.java) (revision 36698) @@ -101,6 +101,21 @@ * 如果需要物品申领备注,只要配置打印包实例的备注字段即可(在装配时,会把物品申领备注信息赋值给包实例的备注字段)。ZJYY-95 */ private String remark; + + /** + * 病人姓名NFYY-86 + */ + private String patientNames; + + /** + * “住院号”+“诊疗号”NFYY-86 + */ + private String hospitalNumAndClinicNumber; + + /** + * 病人所属科室NFYY-86 + */ + private String ascriptionDepartments; public Long getTousseDefinitionId() { return tousseDefinitionId; @@ -466,5 +481,36 @@ public void setRemark(String remark) { this.remark = remark; } + + public String getPatientNames() { + return patientNames; + } + + + public void setPatientNames(String patientNames) { + this.patientNames = patientNames; + } + + + public String getHospitalNumAndClinicNumber() { + return hospitalNumAndClinicNumber; + } + + + public void setHospitalNumAndClinicNumber(String hospitalNumAndClinicNumber) { + this.hospitalNumAndClinicNumber = hospitalNumAndClinicNumber; + } + + + public String getAscriptionDepartments() { + return ascriptionDepartments; + } + + + public void setAscriptionDepartments(String ascriptionDepartments) { + this.ascriptionDepartments = ascriptionDepartments; + } + + }