Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/RealTimeBulletinBoardWorkloadHelper.java =================================================================== diff -u -r39863 -r41316 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/RealTimeBulletinBoardWorkloadHelper.java (.../RealTimeBulletinBoardWorkloadHelper.java) (revision 39863) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/RealTimeBulletinBoardWorkloadHelper.java (.../RealTimeBulletinBoardWorkloadHelper.java) (revision 41316) @@ -6,6 +6,7 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; +import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.Date; @@ -37,22 +38,28 @@ import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.becleanitem.ClassifiedItem; import com.forgon.disinfectsystem.entity.becleanitem.ClassifyBasket; +import com.forgon.disinfectsystem.entity.customform.forminstance.FormInstance; import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseApplication; import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; import com.forgon.disinfectsystem.entity.packing.PackingTask; import com.forgon.disinfectsystem.entity.packing.ReviewedBasket; +import com.forgon.disinfectsystem.entity.qualitymonitoringmanager.qualitymonitoring.QualityMonitoringInstance; import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingItem; import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.proxydisinfection.ProxyDisinfection; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import com.forgon.disinfectsystem.entity.urgent.UrgentLevel; +import com.forgon.disinfectsystem.entity.useRecord.UseRecord; import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washanddisinfectrecord.WashAndDisinfectRecord; import com.forgon.disinfectsystem.reportforms.vo.ReportQueryParams; import com.forgon.tools.MathTools; import com.forgon.tools.date.DateTools; import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.json.JSONUtil; +import com.forgon.tools.string.StringTools; +import com.forgon.tools.util.ConfigUtils; import com.forgon.tools.util.SqlUtils; /** * 数据看板 @@ -1899,10 +1906,190 @@ return getUrgentGoodsDetails(); }else if("urgenttoussehandleinfo".equalsIgnoreCase(dataSources)){ return getUrgentToussehandleInfo(); + }else if("useRecordDataAggregation".equalsIgnoreCase(dataSources)){//本日手术量汇总(使用记录) + return useRecordDataAggregation(requestParameters); + }else if("qualityMonitoringDataSummary".equalsIgnoreCase(dataSources)){//本日监测不合格数(质量监测) + return qualityMonitoringDataSummary(requestParameters); } if(result == null){ return StringUtils.EMPTY; } return result.toString(); } + + /** + * 本日监测不合格数(质量监测) + * @param requestParameters 请求参数 + * @return 本日监测不合格数 + */ + private String qualityMonitoringDataSummary(Map requestParameters) { + String departCoding = requestParameters.get("departCoding"); + if(StringUtils.isBlank(departCoding)){ + return StringUtils.EMPTY; + } + //获取当天开始时间 + SupplyRoomConfig systemParamsObj = supplyRoomConfigManager.getSystemParamsObj(); + DateFormat sdf = DateTools.YMDFORMAT.get(); + Date today = new Date(); + String dateStr = sdf.format(today); + String[] startDateAndEndDate = supplyRoomConfigManager.getStartDateAndEndDate(systemParamsObj, dateStr); + String betweenSql = " between "+ dateQueryAdapter.dateAdapter(startDateAndEndDate[0]) + " and " + + dateQueryAdapter.dateAdapter(startDateAndEndDate[1]); + + StringBuffer sqlBuffer = new StringBuffer(); + sqlBuffer.append("select qmi.name, count(1) amount from "); + sqlBuffer.append(QualityMonitoringInstance.class.getSimpleName()); + sqlBuffer.append(" qmi join "); + sqlBuffer.append(FormInstance.class.getSimpleName()); + sqlBuffer.append(" fi on fi.id = qmi.id "); + sqlBuffer.append(" where fi.createDate "); + sqlBuffer.append(betweenSql); + sqlBuffer.append(" and qmi.type = '质量监测' "); + sqlBuffer.append(" and qmi.isQualified = '否' "); + if(StringUtils.isNotBlank(departCoding)){ + Collection departCodingColl = StringTools.toCollectionIgnoreNullAndBlank(departCoding, ";"); + String departCodingSql = SqlUtils.getStringFieldInLargeCollectionsPredicate("fi.orgUnitCoding", departCodingColl); + sqlBuffer.append(" and "); + sqlBuffer.append(departCodingSql); + } + sqlBuffer.append(" group by qmi.name "); + + List> qualityMonitoringDataSummary = new ArrayList>(); + ResultSet rs = null; + try { + rs = objectDao.executeSql(sqlBuffer.toString()); + while (rs.next()) { + String name = rs.getString("name"); + int amount = rs.getInt("amount"); + if(StringUtils.isNotBlank(name)){ + Map map = new HashMap(); + map.put("name", name); + map.put("amount", amount); + qualityMonitoringDataSummary.add(map); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + + return JSONUtil.toJSONStringEx(qualityMonitoringDataSummary, true, null); + } + + /** + * 使用记录数据汇总信息 + * @return 汇总信息 + */ + private String useRecordDataAggregation(Map requestParameters) { + String departCoding = requestParameters.get("departCoding"); + if(StringUtils.isBlank(departCoding)){ + return StringUtils.EMPTY; + } + //获取当天开始时间 + SupplyRoomConfig systemParamsObj = supplyRoomConfigManager.getSystemParamsObj(); + DateFormat sdf = DateTools.YMDFORMAT.get(); + Date today = new Date(); + String dateStr = sdf.format(today); + String[] startDateAndEndDate = supplyRoomConfigManager.getStartDateAndEndDate(systemParamsObj, dateStr); + String betweenSql = " between "+ dateQueryAdapter.dateAdapter(startDateAndEndDate[0]) + " and " + + dateQueryAdapter.dateAdapter(startDateAndEndDate[1]); + + StringBuffer whereSqlBuffer = new StringBuffer(); + whereSqlBuffer.append(" where ur.enteringDate "); + whereSqlBuffer.append(betweenSql); + if(StringUtils.isNotBlank(departCoding)){ + Collection departCodingColl = StringTools.toCollectionIgnoreNullAndBlank(departCoding, ";"); + String departCodingSql = SqlUtils.getStringFieldInLargeCollectionsPredicate("ur.departCoding", departCodingColl); + whereSqlBuffer.append(" and "); + whereSqlBuffer.append(departCodingSql); + } + whereSqlBuffer.append(" and ur.dataType is null "); + + //“手术类型统计” + List> useRecordOperationAggregation = useRecordOperationAggregation(whereSqlBuffer.toString()); + //“医生工作量统计” + List> useRecordDoctorAggregation = useRecordDoctorAggregation(whereSqlBuffer.toString()); + + Map useRecordDataAggregation = new HashMap(); + useRecordDataAggregation.put("useRecordOperationAggregation", useRecordOperationAggregation); + useRecordDataAggregation.put("useRecordDoctorAggregation", useRecordDoctorAggregation); + + return JSONUtil.toJSONStringEx(useRecordDataAggregation, true, null); + } + + /** + * “医生工作量统计” + * @param whereSql where语句 + * @return 手术医生汇总信息 + */ + private List> useRecordDoctorAggregation(String whereSql) { + List> useRecordDoctorAggregation = new ArrayList>(); + StringBuffer doctorSqlBuffer = new StringBuffer(); + doctorSqlBuffer.append("select ur.doctorName, count(1) amonut from "); + doctorSqlBuffer.append(UseRecord.class.getSimpleName()); + doctorSqlBuffer.append(" ur "); + doctorSqlBuffer.append(whereSql); + doctorSqlBuffer.append(" and ur.doctorName is not null "); + doctorSqlBuffer.append(" group by ur.doctorName "); + + ResultSet rs = null; + try { + rs = objectDao.executeSql(doctorSqlBuffer.toString()); + while (rs.next()) { + String doctorName = rs.getString("doctorName"); + int amonut = rs.getInt("amonut"); + if(StringUtils.isNotBlank(doctorName)){ + Map map = new HashMap(); + map.put("doctorName", doctorName); + map.put("amonut", amonut); + useRecordDoctorAggregation.add(map); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + + return useRecordDoctorAggregation; + } + + /** + * “手术类型统计” + * @param whereSql where语句 + * @return 手术汇总信息 + */ + private List> useRecordOperationAggregation(String whereSql) { + + List> useRecordOperationAggregation = new ArrayList>(); + StringBuffer operationSqlBuffer = new StringBuffer(); + operationSqlBuffer.append("select ur.operation, count(1) amonut from "); + operationSqlBuffer.append(UseRecord.class.getSimpleName()); + operationSqlBuffer.append(" ur "); + operationSqlBuffer.append(whereSql); + operationSqlBuffer.append(" and ur.operation is not null "); + operationSqlBuffer.append(" group by ur.operation "); + + ResultSet rs = null; + try { + rs = objectDao.executeSql(operationSqlBuffer.toString()); + while (rs.next()) { + String operation = rs.getString("operation"); + int amonut = rs.getInt("amonut"); + if(StringUtils.isNotBlank(operation)){ + Map map = new HashMap(); + map.put("operation", operation); + map.put("amonut", amonut); + useRecordOperationAggregation.add(map); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + + return useRecordOperationAggregation; + } }