Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java =================================================================== diff -u -r35039 -r35058 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 35039) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 35058) @@ -12505,6 +12505,8 @@ String tousseGroupNameSql = ""; String noTousseSql = ""; + String doctorNameSql = ""; + String noDoctorNameSql = ""; if(MapUtils.isNotEmpty(subCustomColumnMap)){ if(subCustomColumnMap.keySet().contains("isUrgent")){ urgentSql = ",case when ti.isUrgentTousse='是' then '是' else '否' end " + subCustomColumnMap.get("isUrgent"); @@ -12514,6 +12516,10 @@ tousseGroupNameSql = ",(select tg.tousseGroupName from TousseDefinition td join TousseGroup tg on tg.id=td.tousseGroupID where td.id=ti.tousseDefinition_id) " + subCustomColumnMap.get("tousseGroupName"); noTousseSql = ",null " + subCustomColumnMap.get("tousseGroupName"); } + if(subCustomColumnMap.keySet().contains("doctorName")){ + doctorNameSql = ",ti.doctorName " + subCustomColumnMap.get("doctorName"); + noDoctorNameSql = ", null " + subCustomColumnMap.get("doctorName");; + } } String tousseTypesSql = SqlUtils.getWhereSqlByfilterFieldAndStringValueAndSeparatorFilterAll("td.tousseType", tousseTypes, ","); String joinTousseSql = ""; @@ -12523,7 +12529,7 @@ onlyQueryTousse = " and 1=2 "; } String tousseInstanceSql = - "select '器械包' selectType"+ doctorAccountDepartSql+ ascriptionDepartmentSql+urgentSql+tousseGroupNameSql +", ur.id,ur.depart,ur.patientName,ur.hospitalNum,ur.treatmentNum,ur.operator,ur.enteringDate,ur.doctorName,ur.operation," + "select '器械包' selectType"+ doctorAccountDepartSql+ ascriptionDepartmentSql+urgentSql+tousseGroupNameSql+doctorNameSql +", ur.id,ur.depart,ur.patientName,ur.hospitalNum,ur.treatmentNum,ur.operator,ur.enteringDate,ur.doctorName,ur.operation," + "ti.tousseName name,'' specification,1 amount,bd.barcode barcode,ti.idCardInstanceBarcode idCardInstanceBarcode,ti.useAmount useAmount " + ",ou.name ascriptionDepartment from useRecord ur " + "inner join tousseInstance ti on ti.useRecord_id=ur.id " @@ -12534,7 +12540,7 @@ + tousseTypesSql; String disposableGoodsSql = - "select '一次性物品' selectType"+ doctorAccountDepartSql+ ascriptionDepartmentSql+noUrgnetSql+noTousseSql +",ur.id,ur.depart,ur.patientName,ur.hospitalNum,ur.treatmentNum,ur.operator,ur.enteringDate,ur.doctorName,ur.operation," + "select '一次性物品' selectType"+ doctorAccountDepartSql+ ascriptionDepartmentSql+noUrgnetSql+noTousseSql+noDoctorNameSql +",ur.id,ur.depart,ur.patientName,ur.hospitalNum,ur.treatmentNum,ur.operator,ur.enteringDate,ur.doctorName,ur.operation," + "udgi.name name,'' specification,udgi.amount amount,udgi.barcode barcode,'' idCardInstanceBarcode,0 useAmount " + ",ou.name ascriptionDepartment from useRecord ur " + "inner join useDiposableGoodsItem udgi on udgi.userecord_id=ur.id " @@ -12543,7 +12549,7 @@ + onlyQueryTousse; String expensiveGoodsSql = - "select '高值耗材' selectType"+ doctorAccountDepartSql+ ascriptionDepartmentSql+noUrgnetSql+noTousseSql +",ur.id,ur.depart,ur.patientName,ur.hospitalNum,ur.treatmentNum,ur.operator,ur.enteringDate,ur.doctorName,ur.operation," + "select '高值耗材' selectType"+ doctorAccountDepartSql+ ascriptionDepartmentSql+noUrgnetSql+noTousseSql+noDoctorNameSql +",ur.id,ur.depart,ur.patientName,ur.hospitalNum,ur.treatmentNum,ur.operator,ur.enteringDate,ur.doctorName,ur.operation," + "eg.name name,eg.specification specification,1 amount,bd.barcode barcode,'' idCardInstanceBarcode,0 useAmount " + ",ou.name ascriptionDepartment from useRecord ur " + "left join OrgUnit ou on ou.orgUnitCoding=ur.departCodeOfpatient " @@ -12629,7 +12635,9 @@ String tousseGroupNameSql = ""; String noTousseSql = ""; - + + String doctorNameSql = ""; + String noDoctorNameSql = ""; if(MapUtils.isNotEmpty(subCustomColumnMap)){ if(subCustomColumnMap.keySet().contains("isUrgent")){ urgentSql = ",ti.isUrgentTousse " + subCustomColumnMap.get("isUrgent"); @@ -12639,6 +12647,10 @@ tousseGroupNameSql = ",(select tg.tousseGroupName from TousseDefinition td join TousseGroup tg on tg.id=td.tousseGroupID where td.id=ti.tousseDefinition_id) " + subCustomColumnMap.get("tousseGroupName"); noTousseSql = ",null " + subCustomColumnMap.get("tousseGroupName"); } + if(subCustomColumnMap.keySet().contains("doctorName")){ + doctorNameSql = ",ti.doctorName " + subCustomColumnMap.get("doctorName"); + noDoctorNameSql = ", null " + subCustomColumnMap.get("doctorName");; + } } String tousseTypesSql = SqlUtils.getWhereSqlByfilterFieldAndStringValueAndSeparatorFilterAll("td.tousseType", tousseTypes, ","); String joinTousseSql = ""; @@ -12648,7 +12660,7 @@ onlyQueryTousse = " and 1=2 "; } String tousseInstanceSql = - "select '器械包' selectType"+ doctorAccountDepartSql + ascriptionDepartmentSql+urgentSql+tousseGroupNameSql +",ur.id,ur.depart,ur.patientName,ur.hospitalNum,ur.treatmentNum,ur.operator,ur.enteringDate,ur.doctorName,ur.operation," + "select '器械包' selectType"+ doctorAccountDepartSql + ascriptionDepartmentSql+urgentSql+tousseGroupNameSql+doctorNameSql +",ur.id,ur.depart,ur.patientName,ur.hospitalNum,ur.treatmentNum,ur.operator,ur.enteringDate,ur.doctorName,ur.operation," + "ti.tousseName name, '' specification,1 amount,bd.barcode barcode,ti.idCardInstanceBarcode idCardInstanceBarcode,ti.useAmount useAmount " + ",ou.name ascriptionDepartment from useRecord ur " + "left join OrgUnit ou on ou.orgUnitCoding=ur.departCodeOfpatient " @@ -12659,7 +12671,7 @@ + tousseTypesSql; String disposableGoodsSql = - "select '一次性物品' selectType"+ doctorAccountDepartSql + ascriptionDepartmentSql+noUrgnetSql+noTousseSql +",ur.id,ur.depart,ur.patientName,ur.hospitalNum,ur.treatmentNum,ur.operator,ur.enteringDate,ur.doctorName,ur.operation," + "select '一次性物品' selectType"+ doctorAccountDepartSql + ascriptionDepartmentSql+noUrgnetSql+noTousseSql+noDoctorNameSql +",ur.id,ur.depart,ur.patientName,ur.hospitalNum,ur.treatmentNum,ur.operator,ur.enteringDate,ur.doctorName,ur.operation," + "udgi.name name,'' specification,udgi.amount amount,udgi.barcode barcode,'' idCardInstanceBarcode,0 useAmount " + ",ou.name ascriptionDepartment from useRecord ur " + "left join OrgUnit ou on ou.orgUnitCoding=ur.departCodeOfpatient " @@ -12668,7 +12680,7 @@ + onlyQueryTousse; String expensiveGoodsSql = - "select '高值耗材' selectType"+ doctorAccountDepartSql + ascriptionDepartmentSql+noUrgnetSql+noTousseSql +",ur.id,ur.depart,ur.patientName,ur.hospitalNum,ur.treatmentNum,ur.operator,ur.enteringDate,ur.doctorName,ur.operation," + "select '高值耗材' selectType"+ doctorAccountDepartSql + ascriptionDepartmentSql+noUrgnetSql+noTousseSql+noDoctorNameSql +",ur.id,ur.depart,ur.patientName,ur.hospitalNum,ur.treatmentNum,ur.operator,ur.enteringDate,ur.doctorName,ur.operation," + "eg.name name,eg.specification specification,1 amount,bd.barcode barcode,'' idCardInstanceBarcode,0 useAmount " + ",ou.name ascriptionDepartment from useRecord ur " + "left join OrgUnit ou on ou.orgUnitCoding=ur.departCodeOfpatient " @@ -12768,11 +12780,24 @@ boolean enableTheDisplayOfDepartNameOfPatientAndUsageCountForUsingRecordEntryDetailReports = CssdUtils.getSystemSetConfigByNameBool("enableTheDisplayOfDepartNameOfPatientAndUsageCountForUsingRecordEntryDetailReports", false); //配置的自定义列 与enableTheDisplayOfDepartNameOfPatientAndUsageCountForUsingRecordEntryDetailReports冲突 String expandColoumnsConfigOfUsingRecordEntryDetailReports = CssdUtils.getSystemSetConfigByName("expandColoumnsConfigOfUsingRecordEntryDetailReports"); + boolean enableTousseOfExclusiveDoctorFunction = CssdUtils.getSystemSetConfigByNameBool("enableTousseOfExclusiveDoctorFunction", false); Map fatherCustomColumnMap = new HashMap();//父报表使用记录自定义列 Map subCustomColumnMap = new HashMap();//子报表包自定义列 - if(!enableTheDisplayOfDepartNameOfPatientAndUsageCountForUsingRecordEntryDetailReports && StringUtils.isNotBlank(expandColoumnsConfigOfUsingRecordEntryDetailReports)){ - JSONArray expandColoumnsConfigOfUsingRecordEntryDetailReportsArr = JSONArray.fromObject(expandColoumnsConfigOfUsingRecordEntryDetailReports); - if(expandColoumnsConfigOfUsingRecordEntryDetailReportsArr.size() > 0){ + JSONArray expandColoumnsConfigOfUsingRecordEntryDetailReportsArr = null; + if(StringUtils.isNotBlank(expandColoumnsConfigOfUsingRecordEntryDetailReports)){ + expandColoumnsConfigOfUsingRecordEntryDetailReportsArr = JSONArray.fromObject(expandColoumnsConfigOfUsingRecordEntryDetailReports); + } + if(enableTousseOfExclusiveDoctorFunction){ + if(expandColoumnsConfigOfUsingRecordEntryDetailReportsArr == null){ + expandColoumnsConfigOfUsingRecordEntryDetailReportsArr = new JSONArray(); + } + JSONObject obj = new JSONObject(); + obj.put("coloumnName", "doctorName"); + obj.put("displayText", "使用医生"); + expandColoumnsConfigOfUsingRecordEntryDetailReportsArr.add(obj); + } + if(!enableTheDisplayOfDepartNameOfPatientAndUsageCountForUsingRecordEntryDetailReports){ + if(CollectionUtils.isNotEmpty(expandColoumnsConfigOfUsingRecordEntryDetailReportsArr)){ int fatherReportCustomColumnCount = 0;//父报表使用记录自定义列数量 int subReportCustomColumnCount = 0;//子报表包自定义列数量 for (int i = 0; i < expandColoumnsConfigOfUsingRecordEntryDetailReportsArr.size(); i++) { @@ -12941,6 +12966,32 @@ tousse.setSubCustomColumnValue2(StringTools.defaultString(rs.getString("subCustomColumnValue2"))); } } + int i = 0; + for (String subKey : subCustomColumnMap.keySet()) { + String subCustomColumnValue = StringTools.defaultString(rs.getString("subCustomColumnValue"+(i+1))); + if(i == 0){ + if("doctorName".equals(subKey)){ + if(StringUtils.isBlank(subCustomColumnValue) && StringUtils.isNotBlank(enteringBean.getDoctorName())){ + tousse.setSubCustomColumnValue1(enteringBean.getDoctorName()); + }else{ + tousse.setSubCustomColumnValue1(subCustomColumnValue); + } + }else{ + tousse.setSubCustomColumnValue1(subCustomColumnValue); + } + }else if(i == 1){ + if("doctorName".equals(subKey)){ + if(StringUtils.isBlank(subCustomColumnValue) && StringUtils.isNotBlank(enteringBean.getDoctorName())){ + tousse.setSubCustomColumnValue2(enteringBean.getDoctorName()); + }else{ + tousse.setSubCustomColumnValue2(subCustomColumnValue); + } + }else{ + tousse.setSubCustomColumnValue2(subCustomColumnValue); + } + } + i++; + } } tousse.setTousseName(name); tousse.setAmount(rs.getInt("amount")); @@ -14871,7 +14922,7 @@ } } String sql = String - .format(" select * from (select i.applicationtime,case when tit.invoiceSendTime2 is not null then tit.invoiceSendTime2 else tit.invoiceSendTime end invoiceSendTime,f.receiveTime,tit.tousseName,tit.price,f.id,ti.supplierName,i.applicant,i.remark,f.patient,f.surgery,f.hospitalNumber,i.depart,i.deliverStatus %s,f.doctor,f.processType,count(distinct tit.id) amount,f.bedNumber,tit.useRecord_id %s %s %s from %s f join %s i on f.id=i.id join %s ti on ti.recyclingApplication_ID=i.id join %s tit on tit.foreignTousseApp_id=f.id join TousseDefinition td on td.id = tit.tousseDefinition_id %s where (tit.id is null or td.parentID is null and ti.tousseDefinitionId=tit.tousseDefinition_id or ti.tousseDefinitionId=td.parentID) %s %s %s %s %s ", + .format(" select * from (select tit.doctorName tiDoctorName, i.applicationtime,case when tit.invoiceSendTime2 is not null then tit.invoiceSendTime2 else tit.invoiceSendTime end invoiceSendTime,f.receiveTime,tit.tousseName,tit.price,f.id,ti.supplierName,i.applicant,i.remark,f.patient,f.surgery,f.hospitalNumber,i.depart,i.deliverStatus %s,f.doctor,f.processType,count(distinct tit.id) amount,f.bedNumber,tit.useRecord_id %s %s %s from %s f join %s i on f.id=i.id join %s ti on ti.recyclingApplication_ID=i.id join %s tit on tit.foreignTousseApp_id=f.id join TousseDefinition td on td.id = tit.tousseDefinition_id %s where (tit.id is null or td.parentID is null and ti.tousseDefinitionId=tit.tousseDefinition_id or ti.tousseDefinitionId=td.parentID) %s %s %s %s %s ", customColumnName1Sql, queryMaterialNameSql, querySummaryOfMaterialsSql, @@ -14924,12 +14975,12 @@ sqlBuilder.append(noDisplayTerminatedIPSql); } sqlBuilder.append(customTimePeriodSql); - sqlBuilder.append(" group by tit.invoiceSendTime,tit.invoiceSendTime2,f.receiveTime,tit.tousseName,tit.price,f.id,ti.supplierName,i.applicant,i.remark,f.patient,f.surgery,f.hospitalNumber,i.depart,i.deliverStatus,f.bedNumber,tit.useRecord_id,i.applicationtime,tit.foreignTousseApp_id "); + sqlBuilder.append(" group by tit.doctorName,tit.invoiceSendTime,tit.invoiceSendTime2,f.receiveTime,tit.tousseName,tit.price,f.id,ti.supplierName,i.applicant,i.remark,f.patient,f.surgery,f.hospitalNumber,i.depart,i.deliverStatus,f.bedNumber,tit.useRecord_id,i.applicationtime,tit.foreignTousseApp_id "); sqlBuilder.append(customColumnName1Sql); sqlBuilder.append(groupByMaterialInstanceSql); sqlBuilder.append(",f.doctor,f.processType "); if(!"发货时间".equals(timeType) && !"是".equals(used) && showNoInvoie){//此处的数据是装配的数据,不存在发货时间 不存在已使用 - sqlBuilder.append(" union all select i.applicationtime,null invoiceSendTime,f.receiveTime " + sqlBuilder.append(" union all select null tiDoctorName,i.applicationtime,null invoiceSendTime,f.receiveTime " + " ,td.name tousseName,td.price,f.id,ti.supplierName,i.applicant,i.remark,f.patient,f.surgery,f.hospitalNumber,i.depart,i.deliverStatus " + customColumnName1Sql + ",f.doctor,f.processType,sum(ti.amount) amount,f.bedNumber,null useRecord_id " @@ -15084,6 +15135,12 @@ tousseItemVO.setTousseInstanceAmount(amount); tousseItemVO.setPrice(price); tousseItemVO.setInvoiceSendTimeStr(invoiceSendTimeStr); + String tiDoctorName = rs.getString("tiDoctorName"); + if(StringUtils.isBlank(tiDoctorName) && StringUtils.isNotBlank(vo.getDoctor())){ + tousseItemVO.setTiDoctorName(vo.getDoctor()); + }else{ + tousseItemVO.setTiDoctorName(tiDoctorName); + } tousseItemVO.setUsed(useRecord_id == 0?"否":"是"); totalAmount += amount; if(StringUtils.isNotBlank(supplierName)){ @@ -15292,7 +15349,7 @@ //一次性物品信息出库数量查询-退货 returnSummarySql = "select po.externalCode, case when po.specification is null then po.name else po.name + '['+ po.specification +']' end name, -1*sum(rgi.amount) amount from DisposableGoods po " - +" left join ReturnGoodsItem rgi on po.id=rgi.disposableGoodsId" + +" left join ReturnGoodsItem rgi on po.id=rgi.dexpandColoumnsConfigOfUsingRecordEntryDetailReportsArrisposableGoodsId" +" and rgi.returnGoodsRecord_ID in (select id from ReturnGoodsRecord f where 1=1 " + returnTimeCondition + " and f.handleDepartCode='" + orgUnitCoding + "') where 1=1 " + goodsNameCondition + gradeCondition +" group by po.externalCode, po.name,po.specification order by po.externalCode"; }else if(dbConnection.isOracle()){ Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/TousseItemVO.java =================================================================== diff -u -r33252 -r35058 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/TousseItemVO.java (.../TousseItemVO.java) (revision 33252) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/TousseItemVO.java (.../TousseItemVO.java) (revision 35058) @@ -41,6 +41,10 @@ * 植入物数量 */ private Integer implantAmount = 0; + /** + * 包实例的使用医生 + */ + private String tiDoctorName; public String getItemName() { return itemName; } @@ -112,5 +116,13 @@ public void setImplantAmount(Integer implantAmount) { this.implantAmount = implantAmount; } + + public String getTiDoctorName() { + return tiDoctorName; + } + + public void setTiDoctorName(String tiDoctorName) { + this.tiDoctorName = tiDoctorName; + } } Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java =================================================================== diff -u -r35030 -r35058 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java (.../JasperreportsAction.java) (revision 35030) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java (.../JasperreportsAction.java) (revision 35058) @@ -1849,6 +1849,7 @@ }else{ parametMap.put("customColumnName1", "病人所属科室");//报表显示的自定义列1名称 } + parametMap.put("enableTousseOfExclusiveDoctorFunction", CssdUtils.getSystemSetConfigByNameBool("enableTousseOfExclusiveDoctorFunction", false)); Long materialId = StrutsParamUtils.getPraramLongValue("materialId", null); boolean showNoInvoie = "true".equals(StrutsParamUtils.getPraramValue("showNoInvoie",""))?true:false; String used = StrutsParamUtils.getPraramValue("used",null);