Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/SterilizerQualityReportHelper.java =================================================================== diff -u -r37754 -r37764 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/SterilizerQualityReportHelper.java (.../SterilizerQualityReportHelper.java) (revision 37754) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/SterilizerQualityReportHelper.java (.../SterilizerQualityReportHelper.java) (revision 37764) @@ -77,7 +77,9 @@ String sql = " select ti.sterilizerName,ti.sterileFrequency,ti.tousseName, ou.name sendDepart," + " ti.sterileStartTime,ti.sterilizationUser,count(*) amount " - + ",case when b.noqualified=1 then '不合格' else '合格' end isQualified " + + ",case when " + + " exists (select 1 from QualityMonitoringInstance q where q.sterilizationRecordId=ti.sterilizationRecord_id and q.isAllTousseOfSterile='是' ) then '不合格' " + + " when b.noqualified=1 then '不合格' else '合格' end isQualified " + "from tousseinstance ti join barcodeDevice bd on bd.id=ti.id " + " join sterilizer ster on ti.sterilizerName = ster.name" + " left join (select qmd.barcode,1 noqualified from " @@ -93,7 +95,7 @@ + "' group by qmd.barcode ) b on b.barcode=bd.barcode " + " left join OrgUnit ou on ou.orgUnitCoding = ti.location "; - String endSql = " group by ti.sterilizerName,ti.sterileFrequency,ti.tousseName," + String endSql = " group by ti.sterilizationRecord_id,ti.sterilizerName,ti.sterileFrequency,ti.tousseName," +" ou.name,ti.sterileStartTime,ti.sterilizationUser,ti.status" + ",b.noqualified order by ti.sterileStartTime desc"; if (StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)) { @@ -141,8 +143,31 @@ + FormDefinition.FOMRTYPE_QUALITYMONITORING + "' and exists (select 1 from Sterilizer s where s.name=ti.sterilizerName) "; Map noQualifiedMap = getNoQualifiedMap(noQualifiedSql); + String isAllTousseOfSterile = " select bd.barcode,ti.sterilizerName,ti.sterileFrequency,ti.tousseName" + + ", ou.name sendDepart, ti.sterileStartTime,ti.sterilizationUser" + + ",bd.barcode,qmi.name,fii.answer,fdi.name fdiName,ti.id,1 amount,qmi.id qmiId from " + + TousseInstance.class.getSimpleName() + +" ti join " + + BarcodeDevice.class.getSimpleName() + +" bd on bd.id=ti.id join " + + QualityMonitoringInstance.class.getSimpleName() + +" qmi on qmi.sterilizationRecordId=ti.sterilizationRecord_id join " + + FormInstance.class.getSimpleName() + +" fi on fi.id=qmi.id join " + + FormDefinition.class.getSimpleName() + +" fd on fd.id=fi.formDefinition_id left join " + + FormInstanceItem.class.getSimpleName() + +" fii on fii.formInstance_id=qmi.id left join " + + FormDefinitionItem.class.getSimpleName() + +" fdi on fii.formDefinitionItem_id=fdi.id left join " + + OrgUnit.class.getSimpleName() + +" ou on ou.orgUnitCoding = ti.location " + + whereSql + " and fd.formType ='" + + FormDefinition.FOMRTYPE_QUALITYMONITORING + + "' "; + Map noQualifiedMapOfIsAllTousseOfSterile = getNoQualifiedMapOfIsAllTousseOfSterile(isAllTousseOfSterile); ResultSet resultSet = objectDao.executeSql(sql); - list = getSterilizerQualiyBeanList(resultSet, noQualifiedMap); + list = getSterilizerQualiyBeanList(resultSet, noQualifiedMap,noQualifiedMapOfIsAllTousseOfSterile); } // 获取没有添加包的灭菌记录 startDate = dateQueryAdapter.dateAdapter(startDate + " 00:00:00"); @@ -191,6 +216,125 @@ return list; } /** + * 获取质量监测登记为整炉不合格的物品信息 + * @param sql + * @return + */ + private Map getNoQualifiedMapOfIsAllTousseOfSterile(String sql){ + Map result = new HashMap(); + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql); + while(rs.next()){ + String sterileFrequency = rs.getString("sterileFrequency"); + if(StringUtils.isBlank(sterileFrequency)){ + continue; + } + String sterilizerName = rs.getString("sterilizerName"); + String tousseName = rs.getString("tousseName"); + String sendDepart = rs.getString("sendDepart"); + String sterileStartTime = rs.getString("sterileStartTime"); + String sterilizationUser = rs.getString("sterilizationUser"); + String barcode = rs.getString("barcode"); + String qmiName = rs.getString("name"); + String answer = rs.getString("answer"); + if(StringUtils.isBlank(answer)){ + answer = ""; + } + if(!answer.endsWith(";")){ + answer = answer+";"; + } + Integer amount = rs.getInt("amount"); + String fdiName = rs.getString("fdiName"); + Long ancestorID = rs.getLong("id"); + Long qmiId = rs.getLong("qmiId"); + + + String key = sterilizerName + sterileFrequency + tousseName + + sendDepart + sterileStartTime + sterilizationUser; + JSONArray qmiArr = null; + + if(result.containsKey(key)){ + qmiArr = result.get(key); + }else{ + qmiArr = new JSONArray(); + } + JSONObject qmiObj = null; + for (int i = 0; i < qmiArr.size(); i++) { + JSONObject findObj = (JSONObject)qmiArr.get(i); + if(MathTools.equals(findObj.optLong("qmiId"), qmiId)){ + qmiObj = findObj; + break; + } + } + boolean addQmi = false; + JSONArray answers = null; + JSONObject answerObj = new JSONObject(); + answerObj.put("fdiName", fdiName); + answerObj.put("answer", answer); + if(qmiObj == null){ + qmiObj = new JSONObject(); + qmiObj.put("qmiName", qmiName); + qmiObj.put("qmiId", qmiId); + answers = new JSONArray(); + qmiObj.put("answers", answers); + addQmi = true; + answers.add(answerObj); + }else{ + answers = qmiObj.optJSONArray("answers"); + boolean find = false; + for (int i = 0; i < answers.size(); i++) { + JSONObject obj = (JSONObject)answers.get(i); + if(StringUtils.equals(obj.optString("fdiName"), fdiName) && StringUtils.equals(obj.optString("answer"), answer)){ + find = true; + break; + } + } + if(!find){ + answers.add(answerObj); + } + } + + qmiObj.put("answers", answers); + JSONArray tousses = qmiObj.optJSONArray("tousses"); + if(tousses == null){ + tousses = new JSONArray(); + } + JSONObject qgObj = null; + for (int i = 0; i < tousses.size(); i++) { + JSONObject tousse = (JSONObject)tousses.get(i); + if(MathTools.equals(tousse.optLong("ancestorID"), ancestorID)){ + qgObj = tousse; + break; + } + } + boolean addQg = false; + if(qgObj == null){ + qgObj = new JSONObject(); + qgObj.put("tousseName", tousseName); + qgObj.put("amount", amount); + qgObj.put("barcode", barcode); + qgObj.put("ancestorID", ancestorID); + addQg = true; + } + + if(addQg){ + tousses.add(qgObj); + } + qmiObj.put("tousses", tousses); + if(addQmi){ + qmiArr.add(qmiObj); + } + result.put(key, qmiArr); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + return result; + } + /** * 获取不合格的物品信息 只要包实例关联的质量监测就算是不合格 * @param sql * @return @@ -315,7 +459,7 @@ * @param noQualifiedMap 不合格的物品信息 * @return */ - private List getSterilizerQualiyBeanList(ResultSet rs, Map noQualifiedMap){ + private List getSterilizerQualiyBeanList(ResultSet rs, Map noQualifiedMap, Map noQualifiedMapOfIsAllTousseOfSterile){ List list = new ArrayList(); Map map = new HashMap(); if( rs != null){ @@ -348,7 +492,7 @@ } child.setTousseAmount(rs.getInt(7)); String isQualified = rs.getString("isQualified"); - child.setIsQualified("不合格"); + child.setIsQualified(isQualified); SterilizerQualiyBean bean; if(map.containsKey(key)){ bean = map.get(key); @@ -370,34 +514,63 @@ } String noQualifiedMapKey = sterilizerName + sterileFrequency + tousseName + sendDepart + sterileStartTime + sterilizationUser; - if("不合格".equals(isQualified) && noQualifiedMap.containsKey(noQualifiedMapKey)){ - JSONArray qmiArr = noQualifiedMap.get(noQualifiedMapKey); - if(qmiArr != null){ - msgb.setLength(0); - for (int i = 0; i < qmiArr.size(); i++) { - JSONObject qmiObj = (JSONObject)qmiArr.get(i); - if(i > 0){ - msgb.append("\r\n"); - } - msgb.append(i+1).append("、").append(qmiObj.optString("qmiName")).append(" :"); - JSONArray tousses = qmiObj.optJSONArray("tousses"); - if(CollectionUtils.isNotEmpty(tousses)){ - for (int j = 0; j < tousses.size(); j++) { - JSONObject tousse = tousses.optJSONObject(j); - msgb.append(tousse.optString("tousseName")).append("(").append(tousse.optString("barcode")) - .append(")*").append(tousse.optInt("amount")).append(","); + if("不合格".equals(isQualified)){ + msgb.setLength(0); + if(noQualifiedMap.containsKey(noQualifiedMapKey)){ + JSONArray qmiArr = noQualifiedMap.get(noQualifiedMapKey); + if(qmiArr != null){ + for (int i = 0; i < qmiArr.size(); i++) { + JSONObject qmiObj = (JSONObject)qmiArr.get(i); + if(i > 0){ + msgb.append("\r\n"); } + msgb.append(i+1).append("、").append(qmiObj.optString("qmiName")).append(" :"); + JSONArray tousses = qmiObj.optJSONArray("tousses"); + if(CollectionUtils.isNotEmpty(tousses)){ + for (int j = 0; j < tousses.size(); j++) { + JSONObject tousse = tousses.optJSONObject(j); + msgb.append(tousse.optString("tousseName")).append("(").append(tousse.optString("barcode")) + .append(")*").append(tousse.optInt("amount")).append(","); + } + } + JSONArray answers = qmiObj.optJSONArray("answers"); + if(CollectionUtils.isNotEmpty(answers)){ + for (int k = 0; k < answers.size(); k++) { + JSONObject answer = answers.getJSONObject(k); + msgb.append(answer.optString("fdiName")).append(":").append(answer.optString("answer")); + } + } } - JSONArray answers = qmiObj.optJSONArray("answers"); - if(CollectionUtils.isNotEmpty(answers)){ - for (int k = 0; k < answers.size(); k++) { - JSONObject answer = answers.getJSONObject(k); - msgb.append(answer.optString("fdiName")).append(":").append(answer.optString("answer")); + } + } + if(noQualifiedMapOfIsAllTousseOfSterile.containsKey(noQualifiedMapKey)){ + JSONArray qmiArr = noQualifiedMapOfIsAllTousseOfSterile.get(noQualifiedMapKey); + if(qmiArr != null){ + for (int i = 0; i < qmiArr.size(); i++) { + JSONObject qmiObj = (JSONObject)qmiArr.get(i); + if(i > 0){ + msgb.append("\r\n"); } + msgb.append(i+1).append("、").append(qmiObj.optString("qmiName")).append(" :"); + JSONArray tousses = qmiObj.optJSONArray("tousses"); + if(CollectionUtils.isNotEmpty(tousses)){ + for (int j = 0; j < tousses.size(); j++) { + JSONObject tousse = tousses.optJSONObject(j); + msgb.append(tousse.optString("tousseName")).append("(").append(tousse.optString("barcode")) + .append(")*").append(tousse.optInt("amount")).append(","); + } + } + JSONArray answers = qmiObj.optJSONArray("answers"); + if(CollectionUtils.isNotEmpty(answers)){ + for (int k = 0; k < answers.size(); k++) { + JSONObject answer = answers.getJSONObject(k); + msgb.append(answer.optString("fdiName")).append(":").append(answer.optString("answer")); + } + } } } - child.setNoQualifiedInfo(msgb.toString()); } + child.setNoQualifiedInfo(msgb.toString()); } if(bean.getChildrens() != null){ bean.getChildrens().add(child);