Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/customform/forminstance/FormInstanceItem.java =================================================================== diff -u -r39250 -r41131 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/customform/forminstance/FormInstanceItem.java (.../FormInstanceItem.java) (revision 39250) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/customform/forminstance/FormInstanceItem.java (.../FormInstanceItem.java) (revision 41131) @@ -1,12 +1,16 @@ package com.forgon.disinfectsystem.entity.customform.forminstance; import java.util.ArrayList; +import java.util.Date; import java.util.List; import javax.persistence.Column; import javax.persistence.Entity; + +import org.apache.commons.lang.StringUtils; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; + import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; @@ -47,8 +51,14 @@ * 非单选、多选录入值 */ private String answer; - /** + * answer的Date类型 + * FormDefinitionItem类型为时间或日期 + * answer的Date类型 + * 主要用于日期的过滤 + */ + private Date dateAnswer; + /** * 自定义表单元素定义 */ private FormDefinitionItem definitionItem; @@ -154,7 +164,24 @@ } return isChecked; } - + @Transient + public String getFormDefinitionItemOptionValue(FormDefinitionItemOption option){ + String name = StringUtils.EMPTY; + if (option != null && optionValues != null) { + for (FormInstanceOptionValue checkedOption : optionValues) { + FormDefinitionItemOption checkOptionDefinition = checkedOption + .getItemOption(); + if (checkOptionDefinition != null) { + if (option.getId().toString() + .equals(checkOptionDefinition.getId().toString())) { + name = checkOptionDefinition.getValue(); + break; + } + } + } + } + return name; + } @Override public int compareTo(FormInstanceItem o) { if (definitionItem.getOrderNumber() > o.getDefinitionItem().getOrderNumber()) { @@ -165,5 +192,13 @@ return 0; } } + + public Date getDateAnswer() { + return dateAnswer; + } + + public void setDateAnswer(Date dateAnswer) { + this.dateAnswer = dateAnswer; + } } Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/DeviceMaintenanceHelper.java =================================================================== diff -u -r41036 -r41131 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/DeviceMaintenanceHelper.java (.../DeviceMaintenanceHelper.java) (revision 41036) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/DeviceMaintenanceHelper.java (.../DeviceMaintenanceHelper.java) (revision 41131) @@ -17,6 +17,7 @@ import com.forgon.disinfectsystem.basedatamanager.rinser.service.RinserManager; import com.forgon.disinfectsystem.basedatamanager.sterilizer.service.SterilizerManager; +import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.entity.basedatamanager.rinser.Rinser; import com.forgon.disinfectsystem.entity.basedatamanager.sterilizer.ConsumptiveConfig; import com.forgon.disinfectsystem.entity.basedatamanager.sterilizer.ConsumptiveInstance; @@ -285,60 +286,75 @@ if(endDate.matches(regex)){ endDate += " 23:59:59"; } + String betweenSql = " between " + dateQueryAdapter.dateAdapter(startDate) + " and " + dateQueryAdapter.dateAdapter(endDate); + //可配置的日期查询项 + String reportQueryItemName = requestParameters.get("reportQueryItemName"); + Map formInstanceVoMap = new HashMap(); + boolean enableSterilizerSafetyCheckBeforeRunAndSterilizerRunLogSheetRegistrationFunction = CssdUtils.getSystemSetConfigByNameBool("enableSterilizerSafetyCheckBeforeRunAndSterilizerRunLogSheetRegistrationFunction", false); String sql = null; List instanceList = null; - Map formInstanceVoMap = new HashMap(); - sql = String.format( "select * from (select sr.id,sr.sterilizationType,s.name,sr.frequency,saf.id formId,saf.createDate,saf.orgUnitCoding,fd.formName from %s sr " - + "join %s s on s.id=sr.Sterilizer_id " - + "join %s saf on saf.id=sr.safetyCheck_fi_id " - + "join %s fd on fd.id=saf.formDefinition_id " - + "union all " - + "select sr.id,sr.sterilizationType,s.name,sr.frequency,runf.id formId,runf.createDate,runf.orgUnitCoding,fd.formName from %s sr " - + "join %s s on s.id=sr.Sterilizer_id " - + "join %s runf on runf.id=sr.runTableRecord_fi_id " - + "join %s fd on fd.id=runf.formDefinition_id " - + ") po where po.formName = '%s' and po.createDate between %s and %s", - SterilizationRecord.class.getSimpleName(), - Sterilizer.class.getSimpleName(), - FormInstance.class.getSimpleName(), - FormDefinition.class.getSimpleName(), - SterilizationRecord.class.getSimpleName(), - Sterilizer.class.getSimpleName(), - FormInstance.class.getSimpleName(), - FormDefinition.class.getSimpleName(), - formName,dateQueryAdapter.dateAdapter(startDate), - dateQueryAdapter.dateAdapter(endDate)); - if(StringUtils.isNotBlank(departCoding)){ - sql += " and po.orgUnitCoding = '" + departCoding + "'"; - } - ResultSet rs = null; - try { - rs = objectDao.executeSql(sql); - while (rs.next()) { - String sterilizerName = rs.getString("name"); - String frequency = rs.getString("frequency"); - String sterilizationType = rs.getString("sterilizationType"); - long formId = rs.getLong("formId"); - if(formInstanceVoMap.get(formId) == null){ - FormInstanceVo formInstanceVo = new FormInstanceVo(); - formInstanceVo.setSterilizerName(sterilizerName); - formInstanceVo.setFrequency(frequency); - formInstanceVo.setSterilizationType(sterilizationType); - formInstanceVoMap.put(formId, formInstanceVo); + if(enableSterilizerSafetyCheckBeforeRunAndSterilizerRunLogSheetRegistrationFunction){ + sql = String.format( "select * from (select sr.id,sr.sterilizationType,s.name,sr.frequency,saf.id formId,saf.createDate,saf.orgUnitCoding,fd.formName from %s sr " + + "join %s s on s.id=sr.Sterilizer_id " + + "join %s saf on saf.id=sr.safetyCheck_fi_id " + + "join %s fd on fd.id=saf.formDefinition_id " + + "union all " + + "select sr.id,sr.sterilizationType,s.name,sr.frequency,runf.id formId,runf.createDate,runf.orgUnitCoding,fd.formName from %s sr " + + "join %s s on s.id=sr.Sterilizer_id " + + "join %s runf on runf.id=sr.runTableRecord_fi_id " + + "join %s fd on fd.id=runf.formDefinition_id " + + ") po where po.formName = '%s' and po.createDate %s", + SterilizationRecord.class.getSimpleName(), + Sterilizer.class.getSimpleName(), + FormInstance.class.getSimpleName(), + FormDefinition.class.getSimpleName(), + SterilizationRecord.class.getSimpleName(), + Sterilizer.class.getSimpleName(), + FormInstance.class.getSimpleName(), + FormDefinition.class.getSimpleName(), + formName,betweenSql); + if(StringUtils.isNotBlank(departCoding)){ + sql += " and po.orgUnitCoding = '" + departCoding + "'"; + } + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql); + while (rs.next()) { + String sterilizerName = rs.getString("name"); + String frequency = rs.getString("frequency"); + String sterilizationType = rs.getString("sterilizationType"); + long formId = rs.getLong("formId"); + if(formInstanceVoMap.get(formId) == null){ + FormInstanceVo formInstanceVo = new FormInstanceVo(); + formInstanceVo.setSterilizerName(sterilizerName); + formInstanceVo.setFrequency(frequency); + formInstanceVo.setSterilizationType(sterilizationType); + formInstanceVoMap.put(formId, formInstanceVo); + } } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); } - } catch (SQLException e) { - e.printStackTrace(); - }finally { - DatabaseUtil.closeResultSetAndStatement(rs); } + + boolean enableCustomReportDisplayOptions = CssdUtils.getSystemSetConfigByNameBool("enableCustomReportDisplayOptions", false); + if(MapUtils.isNotEmpty(formInstanceVoMap)){ requestParameters.put("jasperreportName","sterilizationRecordFormInstanceReport.jasper"); + }else if(enableCustomReportDisplayOptions){ + requestParameters.put("jasperreportName","formInstanceReportShowAnswer.jasper"); } sql = String.format( - "where po.formDefinition.formName = '%s' and po.createDate between %s and %s", - formName,dateQueryAdapter.dateAdapter(startDate), - dateQueryAdapter.dateAdapter(endDate)); + "where po.formDefinition.formName = '%s' and " + + (StringUtils.isNotBlank(reportQueryItemName)?" exists (select 1 from " + + FormInstanceItem.class.getSimpleName() + + " fii where fii.definitionItem.name='" + + reportQueryItemName + +"' and fii.dateAnswer %s) ":" po.createDate %s") + + "", + formName,betweenSql); if(StringUtils.isNotBlank(departCoding)){ sql += " and po.orgUnitCoding = '" + departCoding + "'"; } @@ -355,27 +371,66 @@ if(FormDefinitionItem.TYPE_RADIO.equals(definitionItem.getType()) || FormDefinitionItem.TYPE_CHECK.equals(definitionItem.getType())){ List options = definitionItem.getOptions(); if(options != null){ - for (FormDefinitionItemOption option : options) { - FormInstanceVo vo = new FormInstanceVo(); - if(formInstanceVoMap.containsKey(formInstance.getId())){ - FormInstanceVo templateVo = formInstanceVoMap.get(formInstance.getId()); - vo.setSterilizerName(templateVo.getSterilizerName()); - vo.setFrequency(templateVo.getFrequency()); - vo.setSterilizationType(templateVo.getSterilizationType()); + if(enableCustomReportDisplayOptions){ + FormInstanceVo vo = null; + for (FormDefinitionItemOption option : options) { + if(vo == null){ + vo = new FormInstanceVo(); + if(formInstanceVoMap.containsKey(formInstance.getId())){ + FormInstanceVo templateVo = formInstanceVoMap.get(formInstance.getId()); + vo.setSterilizerName(templateVo.getSterilizerName()); + vo.setFrequency(templateVo.getFrequency()); + vo.setSterilizationType(templateVo.getSterilizationType()); + } + vo.setRowOrderNum(index); + vo.setRowGroup(dateFormat.format(formInstance.getCreateDate())); + vo.setColumnOrderNum(definitionItem.getOrderNumber()); + Integer orderNumber = option.getOrderNumber(); + String orderNumberStr = orderNumber.toString(); + if(orderNumber.intValue() < 10 ){ + orderNumberStr = "0" + orderNumberStr; + } + vo.setOptionName("_" + definitionItem.getName()); + + } + String value = vo.getValue(); + String thisValue = formInstanceItem.getFormDefinitionItemOptionValue(option); + if(StringUtils.isNotBlank(thisValue)){ + if(StringUtils.isNotBlank(value)){ + formInstanceItem.getFormDefinitionItemOptionValue(option); + vo.setValue(value + ";" + thisValue); + }else{ + vo.setValue(thisValue); + } + } } - vo.setRowOrderNum(index); - vo.setRowGroup(dateFormat.format(formInstance.getCreateDate())); - vo.setColumnOrderNum(definitionItem.getOrderNumber()); - vo.setItemName(definitionItem.getName()); - Integer orderNumber = option.getOrderNumber(); - String orderNumberStr = orderNumber.toString(); - if(orderNumber.intValue() < 10 ){ - orderNumberStr = "0" + orderNumberStr; + if(vo != null){ + vos.add(vo); } - vo.setOptionName(orderNumberStr + "_" + option.getValue()); - vo.setValue(formInstanceItem.isChecked(option)?"√":""); - vos.add(vo); + }else{ + for (FormDefinitionItemOption option : options) { + FormInstanceVo vo = new FormInstanceVo(); + if(formInstanceVoMap.containsKey(formInstance.getId())){ + FormInstanceVo templateVo = formInstanceVoMap.get(formInstance.getId()); + vo.setSterilizerName(templateVo.getSterilizerName()); + vo.setFrequency(templateVo.getFrequency()); + vo.setSterilizationType(templateVo.getSterilizationType()); + } + vo.setRowOrderNum(index); + vo.setRowGroup(dateFormat.format(formInstance.getCreateDate())); + vo.setColumnOrderNum(definitionItem.getOrderNumber()); + vo.setItemName(definitionItem.getName()); + Integer orderNumber = option.getOrderNumber(); + String orderNumberStr = orderNumber.toString(); + if(orderNumber.intValue() < 10 ){ + orderNumberStr = "0" + orderNumberStr; + } + vo.setOptionName(orderNumberStr + "_" + option.getValue()); + vo.setValue(formInstanceItem.isChecked(option)?"√":""); + vos.add(vo); + } } + } }else{ FormInstanceVo vo = new FormInstanceVo(); Index: ssts-web/src/main/webapp/jasperRtp/formInstanceReportShowAnswer.jasper =================================================================== diff -u Binary files differ Index: ssts-web/src/main/webapp/jasperRtp/formInstanceReportShowAnswer.jrxml =================================================================== diff -u --- ssts-web/src/main/webapp/jasperRtp/formInstanceReportShowAnswer.jrxml (revision 0) +++ ssts-web/src/main/webapp/jasperRtp/formInstanceReportShowAnswer.jrxml (revision 41131) @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + <band height="37" splitType="Stretch"> + <textField> + <reportElement uuid="28de467c-2b7a-4f84-b603-dba101607dc9" positionType="Float" x="0" y="0" width="600" height="37"/> + <textElement textAlignment="Center" verticalAlignment="Middle"> + <font size="14" isBold="true"/> + </textElement> + <textFieldExpression><![CDATA[$P{title}]]></textFieldExpression> + </textField> + </band> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: ssts-customform/src/main/java/com/forgon/disinfectsystem/customform/forminstance/service/FormInstanceManagerImpl.java =================================================================== diff -u -r39306 -r41131 --- ssts-customform/src/main/java/com/forgon/disinfectsystem/customform/forminstance/service/FormInstanceManagerImpl.java (.../FormInstanceManagerImpl.java) (revision 39306) +++ ssts-customform/src/main/java/com/forgon/disinfectsystem/customform/forminstance/service/FormInstanceManagerImpl.java (.../FormInstanceManagerImpl.java) (revision 41131) @@ -3,6 +3,7 @@ import java.io.FileInputStream; import java.math.BigInteger; import java.sql.ResultSet; +import java.text.ParseException; import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -266,6 +267,24 @@ } instanceItem.setAnswer(itemAnswer); } + }else if(FormDefinitionItem.TYPE_TIME.equals(item.getType())){ + instanceItem.setAnswer(answer); + if(StringUtils.isNotBlank(answer)){ + try { + instanceItem.setDateAnswer(DateTools.YMDHMFORMAT.get().parse(answer)); + } catch (ParseException e) { + e.printStackTrace(); + } + } + }else if(FormDefinitionItem.TYPE_DATE.equals(item.getType())){ + instanceItem.setAnswer(answer); + if(StringUtils.isNotBlank(answer)){ + try { + instanceItem.setDateAnswer(DateTools.YMDFORMAT.get().parse(answer)); + } catch (ParseException e) { + e.printStackTrace(); + } + } }else{ instanceItem.setAnswer(answer); } Index: ssts-customform/src/main/java/com/forgon/disinfectsystem/customform/formdefinition/action/FormDefinitionAction.java =================================================================== diff -u -r39543 -r41131 --- ssts-customform/src/main/java/com/forgon/disinfectsystem/customform/formdefinition/action/FormDefinitionAction.java (.../FormDefinitionAction.java) (revision 39543) +++ ssts-customform/src/main/java/com/forgon/disinfectsystem/customform/formdefinition/action/FormDefinitionAction.java (.../FormDefinitionAction.java) (revision 41131) @@ -22,6 +22,7 @@ import org.apache.struts2.convention.annotation.ParentPackage; import com.forgon.Constants; +import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.customform.formdefinition.service.FormDefinitionManager; import com.forgon.disinfectsystem.customform.forminstance.service.FormInstanceManager; import com.forgon.disinfectsystem.entity.customform.formdefinition.FormDefinition; @@ -281,6 +282,7 @@ String spell = StrutsParamUtils.getPraramValue("spell", ""); String formType = FormDefinition.FOMRTYPE_CUSTOM; String formTypeParam = StrutsParamUtils.getPraramValue("formType", ""); + boolean queryReportQueryItemName = StrutsParamUtils.getBoolPraramValue("queryReportQueryItemName", false); if(StringUtils.isNotBlank(formTypeParam)){ formType = formTypeParam; } @@ -291,6 +293,18 @@ JSONObject obj = new JSONObject(); obj.put("id", formDefinition.getId()); obj.put("name", formDefinition.getFormName()); + if(queryReportQueryItemName){ + //查询设置的查询项名称 + List formDefinitionItems = formDefinition.getItems(); + if(CollectionUtils.isNotEmpty(formDefinitionItems)){ + for (FormDefinitionItem formDefinitionItem : formDefinitionItems) { + if(Constants.STR_YES.equals(formDefinitionItem.getReportQueryItem())){ + obj.put("reportQueryItemName", formDefinitionItem.getName()); + break; + } + } + } + } data.add(obj); } }