Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java =================================================================== diff -u -r16989 -r17011 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java (.../JasperreportsAction.java) (revision 16989) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java (.../JasperreportsAction.java) (revision 17011) @@ -55,6 +55,7 @@ import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntry; import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.reportoption.GoodsOption; +import com.forgon.disinfectsystem.entity.basedatamanager.reportoption.WorkScoreConfig; import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; @@ -542,13 +543,6 @@ }else{ return jasperReportManager.getYearWorkloadReport(year,departCoding); } - } else if (reportName.equals("yearUserWorkloadReport")) { - String year = StrutsParamUtils.getPraramValue("year", ""); - String querySupplyRoom = StrutsParamUtils.getPraramValue("querySupplyRoom", ""); - if (StringUtils.isBlank(year)) { - year = new SimpleDateFormat("yyyy").format(new Date()); - } - return jasperReportManager.getYearUserWorkloadReport(year,querySupplyRoom); } else if (reportName.equals("workload")) { String startTime = StrutsParamUtils.getPraramValue("startTime", ""); String endTime = StrutsParamUtils.getPraramValue("endTime", ""); @@ -3207,10 +3201,8 @@ * */ public void getGoodsOption(){ - String model = StrutsParamUtils.getPraramValue("model", null); String code = StrutsParamUtils.getPraramValue("code", null); - if (StringUtils.isNotBlank(model) && StringUtils.isNotBlank(code)) { GoodsOption goodsOption = goodsOptionManager.getGoodsOption(model, code); @@ -3228,7 +3220,24 @@ } StrutsResponseUtils.output(jSONArray); } - } + + /** + * 获取工作评分标准配置 + */ + public void getWorkScoreConfig(){ + String orgUnitCoding = AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig(); + List configs = objectDao.findBySql(WorkScoreConfig.class.getSimpleName(), "where po.orgUnitCoding = '" + orgUnitCoding + "' order by po.id asc"); + JSONArray jSONArray = new JSONArray(); + if (configs != null) { + for (WorkScoreConfig config : configs) { + JSONObject jSONObject = new JSONObject(); + jSONObject.put("name", config.getName()); + jSONObject.put("value", config.getValue()); + jSONArray.add(jSONObject); + } + } + StrutsResponseUtils.output(jSONArray); + } } Index: ssts-web/src/main/webapp/disinfectsystem/reportforms/statisticalWorkloadView.jsp =================================================================== diff -u -r12331 -r17011 --- ssts-web/src/main/webapp/disinfectsystem/reportforms/statisticalWorkloadView.jsp (.../statisticalWorkloadView.jsp) (revision 12331) +++ ssts-web/src/main/webapp/disinfectsystem/reportforms/statisticalWorkloadView.jsp (.../statisticalWorkloadView.jsp) (revision 17011) @@ -5,12 +5,15 @@ <%@ include file="/common/includeExtJsAndCss.jsp"%> + + + @@ -48,7 +51,7 @@ -消毒供应中心工作量统计报表 +消毒中心员工工作统计评分报表 Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/reportoption/WorkScoreConfig.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/reportoption/WorkScoreConfig.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/reportoption/WorkScoreConfig.java (revision 17011) @@ -0,0 +1,71 @@ +package com.forgon.disinfectsystem.entity.basedatamanager.reportoption; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; + +/** + * @author WangYi + * 工作量评分标准配置 + */ +@Entity +@Table(name = "WorkScoreConfig") +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class WorkScoreConfig { + + private Long id; + + /** + * 处理科室编码 + */ + private String orgUnitCoding; + + /** + * 模块名称 + */ + private String name; + + /** + * 值 (指标) + */ + private Integer value; + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Integer getValue() { + return value; + } + + public void setValue(Integer value) { + this.value = value; + } + + public String getOrgUnitCoding() { + return orgUnitCoding; + } + + public void setOrgUnitCoding(String orgUnitCoding) { + this.orgUnitCoding = orgUnitCoding; + } + +} Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/YearWorkLoad.java =================================================================== diff -u -r12331 -r17011 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/YearWorkLoad.java (.../YearWorkLoad.java) (revision 12331) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/YearWorkLoad.java (.../YearWorkLoad.java) (revision 17011) @@ -1,10 +1,7 @@ -/** - * - */ package com.forgon.disinfectsystem.jasperreports.javabeansource; /** - * @author forgon + * @author 工作量统计报表 * */ public class YearWorkLoad { @@ -13,8 +10,24 @@ private String columnName; - private Integer amount; + /** + * 按包统计数量 + */ + private Integer amount = 0; + /** + * 按材料统计数量 + */ + private Integer materialAmount = 0; + + /** + * 总得分 + */ + private Integer score = 0; + + /** + * 用户名 + */ private String operator; public Integer getSequence() { @@ -48,5 +61,21 @@ public void setOperator(String operator) { this.operator = operator; } + + public Integer getMaterialAmount() { + return materialAmount; + } + + public void setMaterialAmount(Integer materialAmount) { + this.materialAmount = materialAmount; + } + + public Integer getScore() { + return score; + } + + public void setScore(Integer score) { + this.score = score; + } } Index: ssts-web/src/main/webapp/jasperRtp/workload.jrxml =================================================================== diff -u -r12331 -r17011 --- ssts-web/src/main/webapp/jasperRtp/workload.jrxml (.../workload.jrxml) (revision 12331) +++ ssts-web/src/main/webapp/jasperRtp/workload.jrxml (.../workload.jrxml) (revision 17011) @@ -1,5 +1,5 @@ - + @@ -49,27 +49,29 @@ + + <band height="49" splitType="Stretch"> <textField> - <reportElement uuid="4f96bdd9-75d8-4bb7-b3c7-eed54a1c886a" x="0" y="1" width="750" height="30"/> + <reportElement uuid="4f96bdd9-75d8-4bb7-b3c7-eed54a1c886a" x="0" y="1" width="950" height="30"/> <textElement textAlignment="Center" verticalAlignment="Middle"> <font fontName="宋体" size="14" isBold="true"/> </textElement> <textFieldExpression><![CDATA[$P{title}]]></textFieldExpression> </textField> <textField isBlankWhenNull="true"> - <reportElement uuid="05573ce3-9678-494d-8b09-30a6eff1794a" x="189" y="31" width="180" height="18"/> + <reportElement uuid="05573ce3-9678-494d-8b09-30a6eff1794a" x="259" y="31" width="180" height="18"/> <textElement verticalAlignment="Middle"> <font size="12"/> </textElement> <textFieldExpression><![CDATA["开始日期:"+$P{date1}]]></textFieldExpression> </textField> <textField isBlankWhenNull="true"> - <reportElement uuid="06fd61a6-af28-4194-9331-afd15f839498" x="369" y="31" width="180" height="18"/> + <reportElement uuid="06fd61a6-af28-4194-9331-afd15f839498" x="499" y="31" width="180" height="18"/> <textElement verticalAlignment="Middle"> <font size="12"/> </textElement> @@ -80,7 +82,7 @@ <summary> <band height="81" splitType="Stretch"> <crosstab> - <reportElement uuid="648fe906-6aed-4eff-8977-38ddace66c2c" x="0" y="0" width="750" height="81"/> + <reportElement uuid="648fe906-6aed-4eff-8977-38ddace66c2c" x="0" y="0" width="950" height="81"/> <crosstabHeaderCell> <cellContents> <staticText> @@ -137,16 +139,16 @@ </cellContents> </crosstabColumnHeader> <crosstabTotalColumnHeader> - <cellContents backcolor="#005FB3" mode="Opaque"> + <cellContents backcolor="#005FB3" mode="Transparent"> <box> <pen lineWidth="0.5" lineStyle="Solid" lineColor="#000000"/> </box> <staticText> - <reportElement uuid="c23bc7e2-1f6c-465d-b1c5-e816b5a2167c" x="0" y="0" width="50" height="30" forecolor="#FFFFFF"/> + <reportElement uuid="c23bc7e2-1f6c-465d-b1c5-e816b5a2167c" style="table_CH" x="0" y="0" width="59" height="30" forecolor="#000000"/> <textElement textAlignment="Center" verticalAlignment="Middle"> <font size="14" isBold="true"/> </textElement> - <text><![CDATA[合计]]></text> + <text><![CDATA[总评分]]></text> </staticText> </cellContents> </crosstabTotalColumnHeader> @@ -161,7 +163,7 @@ <pen lineWidth="0.5" lineStyle="Solid" lineColor="#000000"/> </box> <textField> - <reportElement uuid="6eab765c-c933-44aa-8d42-7a1e876bca4e" style="Crosstab Data Text" x="0" y="0" width="75" height="30"/> + <reportElement uuid="6eab765c-c933-44aa-8d42-7a1e876bca4e" style="Crosstab Data Text" x="0" y="0" width="100" height="30"/> <textElement verticalAlignment="Middle"> <font size="14" isBold="true"/> </textElement> @@ -180,63 +182,81 @@ <measure name="amountMeasure" class="java.lang.Integer" calculation="Sum"> <measureExpression><![CDATA[$F{amount}]]></measureExpression> </measure> - <crosstabCell width="75" height="25"> + <measure name="materialAmountMeasure" class="java.lang.Integer" calculation="Sum"> + <measureExpression><![CDATA[$F{materialAmount}]]></measureExpression> + </measure> + <measure name="scoreMeasure" class="java.lang.Integer" calculation="Sum"> + <measureExpression><![CDATA[$F{score}]]></measureExpression> + </measure> + <crosstabCell width="100" height="25"> <cellContents> <box> <pen lineWidth="0.5" lineStyle="Solid" lineColor="#000000"/> </box> <textField> - <reportElement uuid="1de502ee-792a-4517-ae65-33bb35ce3412" style="Crosstab Data Text" x="0" y="0" width="75" height="25"/> - <textElement verticalAlignment="Middle"> + <reportElement uuid="1de502ee-792a-4517-ae65-33bb35ce3412" style="table_TD" x="0" y="0" width="50" height="25" backcolor="#EAEAEA"/> + <textElement textAlignment="Center" verticalAlignment="Middle"> <font size="12"/> </textElement> <textFieldExpression><![CDATA[$V{amountMeasure}]]></textFieldExpression> </textField> + <textField> + <reportElement uuid="7d295ce1-db02-45c3-8c3b-de0656a1887a" style="table_TD" x="50" y="0" width="50" height="25"/> + <textElement textAlignment="Center" verticalAlignment="Middle"> + <font size="12"/> + </textElement> + <textFieldExpression><![CDATA[$V{materialAmountMeasure}]]></textFieldExpression> + </textField> </cellContents> </crosstabCell> - <crosstabCell width="75" height="25" rowTotalGroup="operator"> + <crosstabCell width="100" height="25" rowTotalGroup="operator"> <cellContents backcolor="#BFE1FF" mode="Opaque"> <box> <pen lineWidth="0.5" lineStyle="Solid" lineColor="#000000"/> </box> <textField> - <reportElement uuid="e277e6b2-eb9d-409f-b558-226f59b070e9" style="Crosstab Data Text" x="0" y="0" width="75" height="25"/> - <textElement verticalAlignment="Middle"> + <reportElement uuid="e277e6b2-eb9d-409f-b558-226f59b070e9" style="table_CH" x="0" y="0" width="50" height="25"/> + <textElement textAlignment="Center" verticalAlignment="Middle"> <font size="12"/> </textElement> <textFieldExpression><![CDATA[$V{amountMeasure}]]></textFieldExpression> </textField> + <textField> + <reportElement uuid="4d5762e5-7d05-4067-a81e-93e4012380dd" style="table_CH" x="50" y="0" width="50" height="25"/> + <textElement textAlignment="Center" verticalAlignment="Middle"> + <font size="12"/> + </textElement> + <textFieldExpression><![CDATA[$V{materialAmountMeasure}]]></textFieldExpression> + </textField> </cellContents> </crosstabCell> - <crosstabCell width="50" columnTotalGroup="sequence"> - <cellContents backcolor="#005FB3" mode="Opaque"> + <crosstabCell width="59" height="25" columnTotalGroup="sequence"> + <cellContents backcolor="#005FB3" mode="Transparent"> <box> <pen lineWidth="0.5" lineStyle="Solid" lineColor="#000000"/> </box> <textField> - <reportElement uuid="af3f5d97-5513-41cd-a312-738f0b02fd04" style="Crosstab Data Text" x="0" y="0" width="50" height="25" forecolor="#FFFFFF"/> - <textElement verticalAlignment="Middle"> + <reportElement uuid="51ee9976-ad1a-4a02-bc10-1a0b58a09d9f" style="table_CH" x="0" y="0" width="59" height="25"/> + <textElement textAlignment="Center" verticalAlignment="Middle"> <font size="12"/> </textElement> - <textFieldExpression><![CDATA[$V{amountMeasure}]]></textFieldExpression> + <textFieldExpression><![CDATA[$V{scoreMeasure}]]></textFieldExpression> </textField> </cellContents> </crosstabCell> - <crosstabCell rowTotalGroup="operator" columnTotalGroup="sequence"> - <cellContents backcolor="#005FB3" mode="Opaque"> + <crosstabCell width="59" rowTotalGroup="operator" columnTotalGroup="sequence"> + <cellContents backcolor="#005FB3" mode="Transparent" style="table_TH"> <box> <pen lineWidth="0.5" lineStyle="Solid" lineColor="#000000"/> </box> - <textField> - <reportElement uuid="43857bc4-f1cd-476e-9a69-076f48bf13a1" style="Crosstab Data Text" x="0" y="0" width="50" height="25" forecolor="#FFFFFF"/> - <textElement verticalAlignment="Middle"> - <font size="12"/> - </textElement> - <textFieldExpression><![CDATA[$V{amountMeasure}]]></textFieldExpression> - </textField> + <staticText> + <reportElement uuid="f9eeca90-2b09-46f3-a51f-2615aee39619" style="table_CH" x="0" y="0" width="59" height="25"/> + <textElement/> + <text><![CDATA[]]></text> + </staticText> </cellContents> </crosstabCell> - <crosstabCell width="0" columnTotalGroup="columnName"> + <crosstabCell width="0" height="25" columnTotalGroup="columnName"> <cellContents backcolor="#BFE1FF" mode="Opaque"> <box> <pen lineWidth="0.5" lineStyle="Solid" lineColor="#000000"/> Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManager.java =================================================================== diff -u -r16991 -r17011 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManager.java (.../JasperReportManager.java) (revision 16991) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManager.java (.../JasperReportManager.java) (revision 17011) @@ -69,14 +69,6 @@ public List<MonthReportBean> getMonthReportData(String startDate,String endDate,String department,String tousseType,String disposableGoodsType,Boolean showCustonTousseAmount); /** - * 获取“年度消毒供应中心员工工作量统计报表”的数据 - * @param year 统计的年份 - * @param querySupplyRoom 被统计消毒供应中心的科室编码(包括一级或者二级供应中心) - * @return - */ - public List<YearWorkLoad> getYearUserWorkloadReport(String year, String querySupplyRoom); - - /** * 获取“消毒供应中心工作量统计报表”的数据 * @param startTime 统计的开始时间(精确到天如:2017-01-01) * @param endTime 统计的结束时间(精确到天如:2017-01-01) @@ -442,4 +434,11 @@ * @return */ public List getRecycleMaterialDetail(String startTime,String endTime,String handelDepartCoding,String applyDepartCoding,String materialName); + + + /** + * 设置工作量评分标准 + * @param data + */ + public void setWorkScoreConfig(String data); } Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java =================================================================== diff -u -r17007 -r17011 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 17007) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 17011) @@ -29,6 +29,7 @@ import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.util.JRLoader; +import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.apache.commons.collections4.CollectionUtils; @@ -64,6 +65,7 @@ import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; import com.forgon.disinfectsystem.entity.basedatamanager.reportoption.GoodsOption; +import com.forgon.disinfectsystem.entity.basedatamanager.reportoption.WorkScoreConfig; import com.forgon.disinfectsystem.entity.basedatamanager.sterilizer.ConsumptiveConfig; import com.forgon.disinfectsystem.entity.basedatamanager.sterilizer.DetectionItem; import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; @@ -7417,25 +7419,6 @@ /** - * 获取“年度消毒供应中心员工工作量统计报表”的数据.. - * @param year 统计的年份 - * @param querySupplyRoom 被统计消毒供应中心的科室编码(包括一级和二级供应中心) - * @return - */ - @Override - public List<YearWorkLoad> getYearUserWorkloadReport(String year, String querySupplyRoom) { - - List<YearWorkLoad> list = new ArrayList<YearWorkLoad>(); - if (StringUtils.isNotBlank(year) - && StringUtils.isNotBlank(querySupplyRoom)) { - String startDateTime = year + "-01-01 00:00:00"; - String endDateTime = year + "-12-31 23:59:59"; - calculateWorkLoadByUser(startDateTime, endDateTime, list,querySupplyRoom); - } - return list; - } - - /** * 获取“消毒供应中心工作量统计报表”的数据.. * @param startTime 统计的开始时间(精确到天如:2017-01-01) * @param endTime 统计的结束时间(精确到天如:2017-01-01) @@ -7459,158 +7442,107 @@ } /** - * 计算消毒供应中心每个员工的工作量(私有方法仅供本类调用).. + * 计算消毒供应中心每个员工的工作量(私有方法仅供本类调用) * @param startDateTime 统计的开始时间 * @param endDateTime 统计的结束时间 * @param list 计算的结果集合 * @param supplyRoom 被统计消毒供应中心的科室编码(包括一级或者二级供应中心) */ private void calculateWorkLoadByUser(String startDateTime, String endDateTime, List<YearWorkLoad> list, String supplyRoom) { + + Map<String, Integer> sequenceMap = new HashMap<String, Integer>(); + sequenceMap.put("回收数量", 1); + sequenceMap.put("清点数量", 2); + sequenceMap.put("清洗数量", 3); + sequenceMap.put("配包数量", 4); + sequenceMap.put("审核数量", 5); + sequenceMap.put("灭菌数量", 6); + sequenceMap.put("发货数量", 7); + sequenceMap.put("核对数量", 10); + sequenceMap.put("检查数量", 8); + sequenceMap.put("包装数量", 9); //查询的时间段 - String betweenSql = - "between " + dateQueryAdapter.dateAdapter(startDateTime) - + " and " + dateQueryAdapter.dateAdapter(endDateTime) + " "; + String betweenSql = String.format(" between %s and %s ", dateQueryAdapter.dateAdapter(startDateTime),dateQueryAdapter.dateAdapter(endDateTime)); - supplyRoom = "'"+supplyRoom+"' "; //被统计消毒供应中心的科室编码(包括一级或者二级供应中心) - String sqlLengthFunctionName = DatabaseUtil.getSqlLengthFunctionName(dbConnection); //数据库计算字符串长度的函数名 + String sqlLengthFunctionName = DatabaseUtil.getSqlLengthFunctionName(dbConnection);//数据库计算字符串长度的函数名 - String sql = - //回收记录 - "select '回收记录' type,rr.recyclingUser userName,sum(ti.amount) amount " - + "from RecyclingRecord rr " - + "inner join TousseItem ti on ti.recyclingRecord_id=rr.id " - + "where rr.orgUnitCoding=" + supplyRoom - + "and rr.recyclingTime " + betweenSql - + "and rr.recyclingUser is not null and " + sqlLengthFunctionName+"(rr.recyclingUser)<>0 " - + "group by rr.recyclingUser " + //回收记录 + String tousseAmountSql = String.format("select '回收数量' type,rr.recyclingUser userName,sum(ti.amount) amount from RecyclingRecord rr,TousseItem ti " + + "where ti.recyclingRecord_id = rr.id and rr.orgUnitCoding = '%s' and rr.recyclingTime %s and %s(rr.recyclingUser) <> 0" + + "group by rr.recyclingUser ", supplyRoom,betweenSql,sqlLengthFunctionName); - + "union all " - + tousseAmountSql += " union all "; //清点记录 - + "select '清点记录' type,rr.operator userName,sum(ti.amount) amount " - + "from RecyclingRecord rr " - + "inner join TousseItem ti on ti.recyclingRecord_id=rr.id " - + "where rr.orgUnitCoding=" + supplyRoom - + "and rr.recyclingTime " + betweenSql - + "and rr.operator is not null and " + sqlLengthFunctionName+"(rr.operator)<>0 " - + "group by rr.operator " + tousseAmountSql += String.format("select '清点数量' type,rr.operator userName,sum(ti.amount) amount from RecyclingRecord rr,TousseItem ti " + + "where ti.recyclingRecord_id = rr.id and rr.orgUnitCoding = '%s' and rr.recyclingTime %s and %s(rr.operator) <> 0 " + + "group by rr.operator ", supplyRoom,betweenSql,sqlLengthFunctionName); - + "union all " + tousseAmountSql += " union all "; - //清洗记录 - + "select '清洗记录' type,t1.userName userName,sum(t1.materialCount) amount " - + "from (" - + "select case when (cb.personInCharge is null or "+sqlLengthFunctionName+"(cb.personInCharge)=0) then wr.operator else cb.personInCharge end userName,ci.amount materialCount " - + "from WashAndDisinfectRecord wr " - + "inner join ClassifyBasket_WashRecord cw on cw.WashAndDisinfectRecord_ID=wr.id " - + "inner join ClassifyBasket cb on cb.id=cw.ClassifyBasket_ID " - + "inner join ClassifiedItem ci on ci.classifybasket_id=cb.id " - + "where ci.itemType = '材料' " - + "and wr.orgUnitCoding=" + supplyRoom - + "and wr.endDate " + betweenSql - + "and wr.washMaterialAmount<>0 " - + "union all " - + "select case when (cb.personInCharge is null or "+sqlLengthFunctionName+"(cb.personInCharge)=0) then wr.operator else cb.personInCharge end userName,(ci.amount*mi.count) materialCount " - + "from WashAndDisinfectRecord wr " - + "inner join ClassifyBasket_WashRecord cw on cw.WashAndDisinfectRecord_ID=wr.id " - + "inner join ClassifyBasket cb on cb.id=cw.ClassifyBasket_ID " - + "inner join ClassifiedItem ci on ci.classifybasket_id=cb.id " - + "inner join TousseDefinition td on td.id=ci.toussedefinition_id " - + "inner join MaterialInstance mi on mi.tousse_id=td.id " - + "where ci.itemType <> '材料' " - + "and wr.orgUnitCoding=" + supplyRoom - + "and wr.endDate " + betweenSql - + "and wr.washMaterialAmount<>0 " - + "union all " - + "select wr.operator userName,wrm.amount materialCount " - + "from WashAndDisinfectRecord wr " - + "inner join WashRecord_WashMaterial wm on wm.WashAndDisinfectRecord_ID=wr.id " - + "inner join WashAndDisinfectRecordMaterial wrm on wrm.id=wm.WashAndDisinfectMaterial_ID " - + "where wr.orgUnitCoding=" + supplyRoom - + "and wr.endDate " + betweenSql - + ") t1 group by t1.userName " + tousseAmountSql += "select '清洗数量' type,t1.userName userName,sum(t1.materialCount) amount from ("; + tousseAmountSql += String.format("select case when (min(cb.personInCharge) is null or min(cb.personInCharge) = '') then min(wr.operator) else min(cb.personInCharge) end userName,min(ci.tousseAmountForMaterial) materialCount " + + "from WashAndDisinfectRecord wr,ClassifyBasket_WashRecord cw,ClassifyBasket cb,ClassifiedItem ci " + + "where cw.WashAndDisinfectRecord_ID = wr.id and cb.id = cw.ClassifyBasket_ID and ci.classifybasket_id = cb.id and ci.itemType = '材料' " + + "and wr.orgUnitCoding = '%s' and wr.endDate %s and wr.washMaterialAmount <> 0 group by ci.tousseDefinitionID,ci.recyclingRecordId", supplyRoom,betweenSql); + tousseAmountSql += " union all "; + tousseAmountSql += String.format("select case when (cb.personInCharge is null or cb.personInCharge = '') then wr.operator else cb.personInCharge end userName,ci.amount materialCount " + + "from WashAndDisinfectRecord wr,ClassifyBasket_WashRecord cw,ClassifyBasket cb,ClassifiedItem ci " + + "where cw.WashAndDisinfectRecord_ID = wr.id and cb.id = cw.ClassifyBasket_ID and ci.classifybasket_id = cb.id " + + "and wr.orgUnitCoding = '%s' and ci.itemtype != '材料' and wr.endDate %s and wr.washMaterialAmount <> 0", supplyRoom,betweenSql); + tousseAmountSql += ") t1 group by t1.userName "; - + "union all " + tousseAmountSql += "union all "; //装配记录 - + "select '装配记录' type,pr.packer userName,sum(pr.amount) amount " - + "from PackingRecord pr " - + "where pr.orgUnitCoding=" + supplyRoom - + "and pr.packTime " + betweenSql - + "and pr.packer is not null and " + sqlLengthFunctionName+"(pr.packer)<>0 " - + "group by pr.packer " + tousseAmountSql += String.format("select '配包数量' type,pr.packer userName,sum(pr.amount) amount from PackingRecord pr " + + "where pr.orgUnitCoding = '%s' and pr.packTime %s and pr.packer is not null and %s(pr.packer)<>0 " + + "group by pr.packer ", supplyRoom,betweenSql,sqlLengthFunctionName); - + "union all " + tousseAmountSql += "union all "; //审核记录 - + "select '审核记录' type,ti.reviewer userName,count(*) amount " - + "from tousseInstance ti " - + "where ti.orgUnitCoding=" + supplyRoom - + "and ti.reviewTime " + betweenSql - + "and ti.reviewer is not null and " + sqlLengthFunctionName+"(ti.reviewer)<>0 " - + "group by ti.reviewer " + tousseAmountSql += String.format("select '审核数量' type,ti.reviewer userName,count(*) amount from tousseInstance ti " + + "where ti.orgUnitCoding = %s and ti.reviewTime %s and %s(ti.reviewer) <> 0 " + + "group by ti.reviewer ", supplyRoom,betweenSql,sqlLengthFunctionName); - + "union all " + tousseAmountSql += " union all "; //灭菌记录 - + "select '灭菌记录' type,sr.sterilizationUser userName,sum(sr.amount) amount " - + "from SterilizationRecord sr " - + "where sr.orgUnitCoding=" + supplyRoom - + "and sr.endDate " + betweenSql - + "and sr.sterilizationUser is not null and " + sqlLengthFunctionName+"(sr.sterilizationUser)<>0 " - + "group by sr.sterilizationUser " + tousseAmountSql += String.format("select '灭菌数量' type,sr.sterilizationUser userName,sum(sr.amount) amount from SterilizationRecord sr " + + "where sr.orgUnitCoding='%s' and sr.endDate %s and %s(sr.sterilizationUser)<>0 " + + "group by sr.sterilizationUser ", supplyRoom,betweenSql,sqlLengthFunctionName); - + "union all " + tousseAmountSql += "union all "; //发货记录 - + "select '发货记录' type,i.sender userName,sum(ii.amount) amount " - + "from Invoice i " - + "inner join InvoiceItem ii on ii.invoice_id=i.id " - + "where i.orgUnitCoding=" + supplyRoom - + "and i.sendTime " + betweenSql - + "and i.sender is not null and " + sqlLengthFunctionName+"(i.sender)<>0 " - + "group by i.sender " + tousseAmountSql += String.format("select '发货数量' type,i.sender userName,sum(ii.amount) amount from Invoice i,InvoiceItem ii " + + "where ii.invoice_id = i.id and i.orgUnitCoding = '%s' and i.sendTime %s and %s(i.sender)<>0 " + + "group by i.sender ", supplyRoom,betweenSql,sqlLengthFunctionName); + tousseAmountSql += "union all "; - + "union all " - //核对记录 - + "select '核对记录' type,i.assistantSender userName,sum(ii.amount) amount " - + "from Invoice i " - + "inner join InvoiceItem ii on ii.invoice_id=i.id " - + "where i.orgUnitCoding=" + supplyRoom - + "and i.sendTime " + betweenSql - + "and i.assistantSender is not null and " + sqlLengthFunctionName+"(i.assistantSender)<>0 " - + "group by i.assistantSender " - ; - + tousseAmountSql += String.format("select '核对数量' type,i.assistantSender userName,sum(ii.amount) amount from Invoice i, InvoiceItem ii " + + "where ii.invoice_id = i.id and i.orgUnitCoding= '%s' and i.sendTime %s and %s(i.assistantSender) <> 0 " + + "group by i.assistantSender ", supplyRoom,betweenSql,sqlLengthFunctionName); if(CssdUtils.isProject("zsly")){ //中山六院的项目(4.0的代码) SupplyRoomConfig cfg = supplyRoomConfigManager.getFirstSupplyRoomConfig(); String supplyRoom_zsly = "'"+cfg.getOrgUnitCoding()+"' "; - sql += - //检查数量 - " union all " - + "select '检查数量' type,p.inspector userName,sum(pr.amount) amount " - + "from PackingRecord pr " - + "where pr.orgUnitCoding=" + supplyRoom_zsly - + "and pr.packTime " + betweenSql - + "and pr.inspector is not null and " + sqlLengthFunctionName+"(pr.inspector)<>0 " - + "group by pr.inspector " - - //包装数量 - + "union all " - + "select '包装数量' type,pr.wrapper userName,sum(pr.amount) amount " - + "from PackingRecord pr " - + "where pr.orgUnitCoding=" + supplyRoom_zsly - + "and pr.packTime " + betweenSql - + "and pr.wrapper is not null and " + sqlLengthFunctionName+"(pr.wrapper)<>0 " - + "group by pr.wrapper "; + tousseAmountSql += " union all "; + //检查数量 + tousseAmountSql += String.format("select '检查数量' type,p.inspector userName,sum(pr.amount) amount from PackingRecord pr " + + "where pr.orgUnitCoding= '%s' and pr.packTime %s and %s(pr.inspector)<>0 " + + "group by pr.inspector ", supplyRoom_zsly,supplyRoom_zsly,sqlLengthFunctionName); + //包装数量 + tousseAmountSql += "union all "; + tousseAmountSql += String.format("select '包装数量' type,pr.wrapper userName,sum(pr.amount) amount from PackingRecord pr " + + "where pr.orgUnitCoding = '%s' and pr.packTime %s and %s(pr.wrapper)<>0 " + + "group by pr.wrapper ", supplyRoom_zsly,betweenSql,sqlLengthFunctionName); } - ResultSet rs = objectDao.executeSql(sql); - + ResultSet rs = objectDao.executeSql(tousseAmountSql); if (rs != null) { try { while (rs.next()) { @@ -7620,37 +7552,8 @@ YearWorkLoad workLoadBean = new YearWorkLoad(); workLoadBean.setOperator(userName); workLoadBean.setAmount(amount); - if("回收记录".equals(type)){ - workLoadBean.setColumnName("回收数量"); - workLoadBean.setSequence(1); - }else if("清点记录".equals(type)){ - workLoadBean.setColumnName("清点数量"); - workLoadBean.setSequence(2); - }else if("清洗记录".equals(type)){ - workLoadBean.setColumnName("清洗数量"); - workLoadBean.setSequence(3); - }else if("装配记录".equals(type)){ - workLoadBean.setColumnName("配包数量"); - workLoadBean.setSequence(4); - }else if("审核记录".equals(type)){ - workLoadBean.setColumnName("审核数量"); - workLoadBean.setSequence(5); - }else if("灭菌记录".equals(type)){ - workLoadBean.setColumnName("灭菌数量"); - workLoadBean.setSequence(6); - }else if("发货记录".equals(type)){ - workLoadBean.setColumnName("发货数量"); - workLoadBean.setSequence(7); - }else if("检查数量".equals(type)){ - workLoadBean.setColumnName("检查数量"); - workLoadBean.setSequence(8); - }else if("包装数量".equals(type)){ - workLoadBean.setColumnName("包装数量"); - workLoadBean.setSequence(9); - }else if("核对记录".equals(type)){ - workLoadBean.setColumnName("核对数量"); - workLoadBean.setSequence(10); - } + workLoadBean.setColumnName(type); + workLoadBean.setSequence(sequenceMap.get(type)); list.add(workLoadBean); } } catch (SQLException e) { @@ -7660,8 +7563,136 @@ } } - } + List<WorkScoreConfig> scoreConfigs = objectDao.findBySql(WorkScoreConfig.class.getSimpleName(), "where po.orgUnitCoding = '" + supplyRoom + "'"); + Map<String, Integer> scoreConfigMap = new HashMap<String, Integer>(); + if(scoreConfigs != null){ + for (WorkScoreConfig workScoreConfig : scoreConfigs) { + scoreConfigMap.put(workScoreConfig.getName(), workScoreConfig.getValue()); + } + } + + //回收记录 + String materialAmountSql = String.format("select '回收数量' type,rr.recyclingUser userName,sum(ti.amount * ms.count) amount from RecyclingRecord rr,TousseItem ti,tousseDefinition td,materialInstance ms " + + "where ti.recyclingRecord_id = rr.id and ti.tousseDefinitionId = td.id and td.id = ms.tousse_id and rr.orgUnitCoding = '%s' and rr.recyclingTime %s and %s(rr.recyclingUser) <> 0" + + "group by rr.recyclingUser ", supplyRoom,betweenSql,sqlLengthFunctionName); + + materialAmountSql += " union all "; + //清点记录 + materialAmountSql += String.format("select '清点数量' type,rr.operator userName,sum(ti.amount * ms.count) amount from RecyclingRecord rr,TousseItem ti,tousseDefinition td,materialInstance ms " + + "where ti.recyclingRecord_id = rr.id and ti.tousseDefinitionId = td.id and td.id = ms.tousse_id and rr.orgUnitCoding = '%s' and rr.recyclingTime %s and %s(rr.operator) <> 0 " + + "group by rr.operator ", supplyRoom,betweenSql,sqlLengthFunctionName); + + materialAmountSql += " union all "; + + //清洗记录 + materialAmountSql += "select '清洗数量' type,t1.userName userName,sum(t1.materialCount) amount from ("; + materialAmountSql += String.format("select case when (cb.personInCharge is null or cb.personInCharge = '') then wr.operator else cb.personInCharge end userName,ci.amount materialCount " + + "from WashAndDisinfectRecord wr,ClassifyBasket_WashRecord cw,ClassifyBasket cb,ClassifiedItem ci " + + "where cw.WashAndDisinfectRecord_ID = wr.id and cb.id = cw.ClassifyBasket_ID and ci.classifybasket_id = cb.id and ci.itemType = '材料' " + + "and wr.orgUnitCoding = '%s' and wr.endDate %s and wr.washMaterialAmount <> 0", supplyRoom,betweenSql); + materialAmountSql += " union all "; + materialAmountSql += String.format("select case when (cb.personInCharge is null or cb.personInCharge = '') then wr.operator else cb.personInCharge end userName,(ci.amount*mi.count) materialCount " + + "from WashAndDisinfectRecord wr,ClassifyBasket_WashRecord cw,ClassifyBasket cb,ClassifiedItem ci,TousseDefinition td,MaterialInstance mi " + + "where cw.WashAndDisinfectRecord_ID = wr.id and cb.id = cw.ClassifyBasket_ID and ci.classifybasket_id = cb.id and td.id = ci.toussedefinition_id and mi.tousse_id = td.id " + + "and ci.itemType <> '材料' and wr.orgUnitCoding = '%s' and wr.endDate %s and wr.washMaterialAmount <> 0", supplyRoom,betweenSql); + materialAmountSql += " union all "; + materialAmountSql += String.format("select wr.operator userName,wrm.amount materialCount " + + "from WashAndDisinfectRecord wr, WashRecord_WashMaterial wm,WashAndDisinfectRecordMaterial wrm " + + "where wm.WashAndDisinfectRecord_ID = wr.id and wrm.id = wm.WashAndDisinfectMaterial_ID " + + "and wr.orgUnitCoding = '%s' and wr.endDate %s", supplyRoom , betweenSql); + materialAmountSql += ") t1 group by t1.userName "; + + materialAmountSql += "union all "; + //装配记录 + materialAmountSql += String.format("select '配包数量' type,pr.packer userName,sum(pr.amount * ms.count) amount from PackingRecord pr,tousseDefinition td,materialInstance ms " + + "where pr.tousseDefinitionId = td.id and td.id = ms.tousse_id and pr.orgUnitCoding = '%s' and pr.packTime %s and pr.packer is not null and %s(pr.packer)<>0 " + + "group by pr.packer ", supplyRoom,betweenSql,sqlLengthFunctionName); + + materialAmountSql += "union all "; + + //审核记录 + materialAmountSql += String.format("select '审核数量' type,ti.reviewer userName,sum(ms.count) amount from tousseInstance ti,tousseDefinition td,materialInstance ms " + + "where ti.tousseDefinition_id = td.id and td.id = ms.tousse_id and ti.orgUnitCoding = %s and ti.reviewTime %s and ti.reviewer is not null and %s(ti.reviewer) <> 0 " + + "group by ti.reviewer ", supplyRoom,betweenSql,sqlLengthFunctionName); + + materialAmountSql += " union all "; + + materialAmountSql += "select '灭菌数量' type,tmp.userName,sum(tmp.amount) from ("; + materialAmountSql += String.format("select sr.sterilizationUser userName,sum(ms.count) amount from SterilizationRecord sr,sterilization_tousseInstance st,TousseInstance ti,tousseDefinition td,materialInstance ms " + +" where sr.id = st.sterilizationRecord_id and st.tousseInstance_id = ti.id and ti.tousseDefinition_id = td.id and td.id = ms.tousse_id and sr.orgUnitCoding = '%s' and sr.endDate %s " + + "and %s(sr.sterilizationUser) <> 0 group by sr.sterilizationUser ", supplyRoom,betweenSql,sqlLengthFunctionName); + materialAmountSql += " union all "; + materialAmountSql += String.format("select sr.sterilizationUser userName,sum(ms.count) amount from SterilizationRecord sr,sterilization_reviewed sre,ReviewedBasket rb,TousseInstance ti,tousseDefinition td,materialInstance ms " + +" where sr.id = sre.sterilizationRecord_id and sre.reviewedBasket_id = rb.id and rb.id = ti.reviewBasket_ID and ti.tousseDefinition_id = td.id and td.id = ms.tousse_id and sr.orgUnitCoding = '%s' " + + "and sr.endDate %s and %s(sr.sterilizationUser) <> 0 group by sr.sterilizationUser ", supplyRoom,betweenSql,sqlLengthFunctionName); + + materialAmountSql += ")tmp group by tmp.userName"; + materialAmountSql += " union all "; + + materialAmountSql += "select '发货数量' type,tmp.userName,sum(tmp.amount) from ("; + materialAmountSql += String.format("select i.sender userName,sum(ms.count) amount from Invoice i,tousseInstance ti,tousseDefinition td,materialInstance ms " + + "where ti.invoice_id = i.id and ti.tousseDefinition_id = td.id and td.id = ms.tousse_id and i.orgUnitCoding = '%s' and i.sendTime %s and %s(i.sender) <> 0 " + + "group by i.sender ", supplyRoom,betweenSql,sqlLengthFunctionName); + materialAmountSql += " union all "; + materialAmountSql += String.format("select i.sender userName,sum(ii.amount) amount from Invoice i,invoiceItem ii " + + "where ii.invoice_id = i.id and i.orgUnitCoding = '%s' and ii.tousseType = '一次性物品' and i.sendTime %s and %s(i.sender) <> 0 " + + "group by i.sender ", supplyRoom,betweenSql,sqlLengthFunctionName); + materialAmountSql += ")tmp group by tmp.userName"; + materialAmountSql += " union all "; + + materialAmountSql += "select '核对数量' type,tmp.userName,sum(tmp.amount) from ("; + materialAmountSql += String.format("select i.assistantSender userName,sum(ms.count) amount from Invoice i,tousseInstance ti,tousseDefinition td,materialInstance ms " + + "where ti.invoice_id = i.id and ti.tousseDefinition_id = td.id and td.id = ms.tousse_id and i.orgUnitCoding = '%s' and i.sendTime %s and %s(i.assistantSender) <> 0 " + + "group by i.assistantSender ", supplyRoom,betweenSql,sqlLengthFunctionName); + materialAmountSql += " union all "; + materialAmountSql += String.format("select i.assistantSender userName,sum(ii.amount) amount from Invoice i,invoiceItem ii " + + "where ii.invoice_id = i.id and i.orgUnitCoding = '%s' and ii.tousseType = '一次性物品' and i.sendTime %s and %s(i.assistantSender) <> 0 " + + "group by i.assistantSender ", supplyRoom,betweenSql,sqlLengthFunctionName); + materialAmountSql += ")tmp group by tmp.userName"; + + if(CssdUtils.isProject("zsly")){ //中山六院的项目(4.0的代码) + SupplyRoomConfig cfg = supplyRoomConfigManager.getFirstSupplyRoomConfig(); + String supplyRoom_zsly = "'"+cfg.getOrgUnitCoding()+"' "; + materialAmountSql += " union all "; + //检查数量 + materialAmountSql += String.format("select '检查数量' type,p.inspector userName,sum(pr.amount * ms.count) amount from PackingRecord pr,tousseDefinition td,materialInstance ms " + + "where pr.tousseDefinitionId = td.id and td.id = ms.tousse_id and pr.orgUnitCoding= '%s' and pr.packTime %s and pr.inspector is not null and %s(pr.inspector)<>0 " + + "group by pr.inspector ", supplyRoom_zsly,supplyRoom_zsly,sqlLengthFunctionName); + //包装数量 + materialAmountSql += "union all "; + materialAmountSql += String.format("select '包装数量' type,pr.wrapper userName,sum(pr.amount * ms.count) amount from PackingRecord pr,tousseDefinition td,materialInstance ms " + + "where pr.tousseDefinitionId = td.id and td.id = ms.tousse_id and pr.orgUnitCoding = '%s' and pr.packTime %s and pr.wrapper is not null and %s(pr.wrapper)<>0 " + + "group by pr.wrapper ", supplyRoom_zsly,betweenSql,sqlLengthFunctionName); + } + + ResultSet rs2 = objectDao.executeSql(materialAmountSql); + if (rs2 != null) { + try { + while (rs2.next()) { + String type = rs2.getString("type"); + String userName = rs2.getString("userName"); + int amount = rs2.getInt("amount"); + YearWorkLoad workLoadBean = new YearWorkLoad(); + workLoadBean.setOperator(userName); + workLoadBean.setMaterialAmount(amount); + workLoadBean.setColumnName(type); + workLoadBean.setSequence(sequenceMap.get(type)); + Integer scoreConfig = scoreConfigMap.get(type); + if(scoreConfig != null && scoreConfig > 0){ + //评分数小数点后面舍去(3 / 2 = 1分) + workLoadBean.setScore(amount/scoreConfig); + } + list.add(workLoadBean); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs2); + } + } + } + /** * 器械包运作统计报表 */ @@ -12794,5 +12825,38 @@ } return voList; } + + @Override + public void setWorkScoreConfig(String data) { + if(StringUtils.isNotBlank(data)){ + String orgUnitCoding = AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig(); + JSONArray dataArray = JSONArray.fromObject(data); + List<WorkScoreConfig> list = objectDao.findBySql(WorkScoreConfig.class.getSimpleName(), "where po.orgUnitCoding = '" + orgUnitCoding + "'"); + Map<String, WorkScoreConfig> map = new HashMap<String, WorkScoreConfig>(); + if(list != null){ + for (WorkScoreConfig workScoreConfig : list) { + map.put(workScoreConfig.getName(), workScoreConfig); + } + } + for(int i = 0 ; i < dataArray.size(); i++){ + JSONObject item = dataArray.optJSONObject(i); + String name = item.optString("name"); + int value = item.optInt("value"); + WorkScoreConfig config = map.get(name); + if(config == null){ + config = new WorkScoreConfig(); + } + config.setName(name); + config.setValue(value); + config.setOrgUnitCoding(orgUnitCoding); + objectDao.saveOrUpdate(config); + map.remove(name); + } + for (String key : map.keySet()) { + WorkScoreConfig config = map.get(key); + objectDao.delete(config); + } + } + } } Index: ssts-web/src/main/webapp/jasperRtp/workload.jasper =================================================================== diff -u -r12331 -r17011 Binary files differ Index: ssts-web/src/main/webapp/homepage/menuconfigure.js =================================================================== diff -u -r17007 -r17011 --- ssts-web/src/main/webapp/homepage/menuconfigure.js (.../menuconfigure.js) (revision 17007) +++ ssts-web/src/main/webapp/homepage/menuconfigure.js (.../menuconfigure.js) (revision 17011) @@ -466,8 +466,8 @@ children:[ // {hidden :SSTS_YearWorkload,text:"CSSD工作量汇总表",href:WWWROOT+'/disinfectsystem/reportforms/yearWorkloadReportView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_YearWorkload,text:"年度消毒中心指标工作量统计",href:WWWROOT+'/disinfectsystem/reportforms/yearWorkloadReportView2.jsp',hrefTarget:linkTarget,leaf:true}, - {hidden :SSTS_YearUserWorkloadReport,text:"年度消毒供应中心员工工作量统计报表",href:WWWROOT+'/disinfectsystem/reportforms/yearUserWorkloadReportView.jsp',hrefTarget:linkTarget,leaf:true}, - {hidden :SSTS_StatisticalWorkload,text:"消毒供应中心工作量统计报表",href:WWWROOT+'/disinfectsystem/reportforms/statisticalWorkloadView.jsp',hrefTarget:linkTarget,leaf:true}, +// {hidden :SSTS_YearUserWorkloadReport,text:"年度消毒供应中心员工工作量统计报表",href:WWWROOT+'/disinfectsystem/reportforms/yearUserWorkloadReportView.jsp',hrefTarget:linkTarget,leaf:true}, + {hidden :SSTS_StatisticalWorkload,text:"消毒中心员工工作统计评分报表",href:WWWROOT+'/disinfectsystem/reportforms/statisticalWorkloadView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_USERECORD_TOTAL_VIEW,text:"使用记录录入统计报表",href:WWWROOT+'/disinfectsystem/reportforms/useRecordTotalView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_USERECORD_TOTAL_VIEW,text:"使用记录录入明细报表",href:WWWROOT+'/disinfectsystem/reportforms/useRecordItemView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_USERECORD_TOTAL_VIEW,text:"使用记录人员汇总报表",href:WWWROOT+'/disinfectsystem/reportforms/useRecordOperatorTotalView.jsp',hrefTarget:linkTarget,leaf:true}, Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/dwr/table/JasperreportsTableManager.java =================================================================== diff -u -r15210 -r17011 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/dwr/table/JasperreportsTableManager.java (.../JasperreportsTableManager.java) (revision 15210) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/dwr/table/JasperreportsTableManager.java (.../JasperreportsTableManager.java) (revision 17011) @@ -15,6 +15,7 @@ import com.forgon.disinfectsystem.basedatamanager.reportoption.GoodsOptionManager; import com.forgon.disinfectsystem.entity.basedatamanager.reportoption.GoodsOption; +import com.forgon.disinfectsystem.jasperreports.service.JasperReportManager; import com.forgon.tools.string.StringTools; /** @@ -26,6 +27,12 @@ private GoodsOptionManager goodsOptionManager; + private JasperReportManager jasperReportManager; + + public void setJasperReportManager(JasperReportManager jasperReportManager) { + this.jasperReportManager = jasperReportManager; + } + public void setGoodsOptionManager(GoodsOptionManager goodsOptionManager) { this.goodsOptionManager = goodsOptionManager; } @@ -113,4 +120,13 @@ return true; } + public boolean setWorkScoreConfig(String data){ + try { + jasperReportManager.setWorkScoreConfig(data); + } catch (Exception e) { + return false; + } + return true; + } + } Index: ssts-web/src/main/webapp/disinfectsystem/reportforms/js/setWorkScoreConfig.js =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/reportforms/js/setWorkScoreConfig.js (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/reportforms/js/setWorkScoreConfig.js (revision 17011) @@ -0,0 +1,206 @@ +function removeGridItem(){ + var gridPanel = top.Ext.getCmp('configGrid'); + var rows = gridPanel.getSelectionModel().getSelections();// 返回值为 + var scoreConfigStore = gridPanel.getStore(); + if (rows) { + for ( var i = 0; i < rows.length; i++) { + scoreConfigStore.remove(rows[i]); + } + } +} + +var itemRecord = Ext.data.Record.create([{name : 'name'},{name : 'value'}]); +function addRecordItem(){ + var modelType = top.Ext.getCmp("modelType").getValue(); + var value = top.Ext.getCmp("value").getValue(); + if(modelType == ""){ + showResult("请选择功能模块!"); + return false; + } + if(value == 0){ + showResult("数量必须大于0!"); + return false; + } + + var gridPanel = top.Ext.getCmp('configGrid'); + var scoreConfigStore = gridPanel.getStore(); + + var isExist = false; //此物品名称是否已经添加过 + for (var i = 0; i < scoreConfigStore.getCount(); i++) { + var record = scoreConfigStore.getAt(i); + if(record.get('name') == modelType){ + isExist = true; + break; + } + } + if(!isExist){ + var record = new itemRecord({name : modelType,value : value}); + scoreConfigStore.add(record); + top.Ext.getCmp('modelType').setValue(''); + top.Ext.getCmp('value').setValue(''); + }else{ + showResult(modelType + "已添加!"); + } +} + +function setWorkScoreConfig(){ + + var scoreConfigStore = new top.Ext.data.Store({ + proxy : new Ext.data.HttpProxy({ + url : WWWROOT + '/jasperreports/jasperreportsAction!getWorkScoreConfig.do', + method : 'POST' + }), + reader : new Ext.data.JsonReader({ + fields : [ + {name : 'name'}, + {name : 'value'} + ] + }) + }); + scoreConfigStore.load(); + + //模块类型store + var modelTypeStore = new Ext.data.SimpleStore({ + fields : ['value'], + data : [ ['回收数量'],['清点数量'],['清洗数量'],['配包数量'],['审核数量'],['灭菌数量'],['发货数量'],['核对数量']] + }); + + var cm = new top.Ext.grid.ColumnModel([new top.Ext.grid.RowNumberer({header:"序号",width:50}), + { + id : 'id', + name : 'id', + hidden : true, + dataIndex : 'id' + },{ + header : "功能模块", + width:100, + dataIndex : 'name' + },{ + header : "评分单位", + width:80, + dataIndex : 'value' + },{ + id : 'deleteItem', + header:'删除', + width :40, + menuDisabled: true, + renderer: function(v,p,record){ + return "<img src=" + WWWROOT + '/images/web/stop.png'+" onclick=\"getCurrentTab().removeGridItem() \">"; + }, + dataIndex:'button' + }]); + + var tbar = [{ + text : '功能模块:' + },{ + xtype : 'combo', + id : 'modelType', + name : 'modelType', + valueField : 'value', + displayField : 'value', + store : modelTypeStore, + forceSelection : true, + editable : false, + mode : 'local', + triggerAction : 'all', + anchor : '95%' + },{ + text : '评分单位:' + },{ + xtype : 'numberfield', + id : 'value', + name : 'value', + allowNegative : false, + allowDecimals : false, + minValue :1, + width:70, + listeners : { + render : function(c) { + c.getEl().on('keypress',function(e) { + if (e.getKey() == 13) { + addRecordItem(); + } + }); + } + } + },{ + text : '添加', + iconCls : 'btn_ext_add', + handler : function () { + addRecordItem(); + } + }]; + + var formObj = new top.Ext.FormPanel({ + frame : true, + labelAlign:'right', + labelSeparator : ':', + bodyStyle : 'padding:5px 5px 0px 5px', + autoWidth : true, + autoHeight : true, + autoScroll : true, + items:[ + new top.Ext.grid.GridPanel({ + id : 'configGrid', + store : scoreConfigStore, + cm : cm, + tbar : tbar, + width : 240, + height: 240, + isCheckboxSelectionModel : true, + frame : false, + viewConfig: { + forceFit:true + }, + bodyStyle : 'border:1px solid #afd7af', + anchor : '100%', + selModel : new top.Ext.grid.RowSelectionModel({ + singleSelect : false + }) + }) + ], + buttons : [{ + id : 'saveBtn', + text : '确定', + handler : function(){ + var scoreConfigArray = []; + for ( var i = 0; i < scoreConfigStore.getCount(); i++) { + var record = scoreConfigStore.getAt(i); + scoreConfigArray.push({ + name : record.get("name"), + value : record.get("value") + }); + } + JasperreportsTableManager.setWorkScoreConfig(JSON.stringify(scoreConfigArray),function(result){ + if(result){ + showResult("更新成功!"); + formWindow.close(); + }else{ + showResult("更新失败!"); + } + }); + } + },{ + id : 'cancleBtn', + text : '取消', + handler : function() { + formWindow.close(); + } + }] + }); + + var formWindow = new top.Ext.Window({ + id : 'deviceMaintenanceWin', + layout : 'fit', + title : '评分标准配置', + width : 620, + modal : true, + autoHeight : true, + border : false, + plain : true, + items : [formObj] + }); + formWindow.show(); + +} + Index: ssts-web/src/main/webapp/disinfectsystem/reportforms/statisticalWorkloadView.js =================================================================== diff -u -r17007 -r17011 --- ssts-web/src/main/webapp/disinfectsystem/reportforms/statisticalWorkloadView.js (.../statisticalWorkloadView.js) (revision 17007) +++ ssts-web/src/main/webapp/disinfectsystem/reportforms/statisticalWorkloadView.js (.../statisticalWorkloadView.js) (revision 17011) @@ -1,206 +1,233 @@ -var entityName = "消毒供应中心工作量统计"; -var form; +var entityName = "消毒中心员工工作统计评分"; +var grid; -/** - * 加载报表的数据 - * - */ -var myMask; -function reloadReport(){ - - if (!form.getForm().isValid()) { - showResult('请正确填写表单各值'); - return false; - } - - var startTime= $Id('startTime').value; - var endTime = $Id('endTime').value; - var departCoding = Ext.getCmp('querySupplyRoom').getValue(); - myMask = new Ext.LoadMask(Ext.getBody(), { - msg: '正在加载,请稍候!', - removeMask: true - }); - - myMask.show(); - window.open(WWWROOT + "/jasperreports/jasperreportsAction!createReportFromJavaBeanSource.do" + - "?jasperreportName=workload.jasper&reportName=workload" + - "&startTime=" + startTime + - "&endTime=" + endTime + - "&departCoding=" + departCoding, - 'thisIframe', '_self'); - -} +var supplyRoomStore; +var rd = new Ext.data.JsonReader( { + fields : [ + {name : 'id'}, + {name : 'departId'}, + {name : 'name'} + + ] +}); +supplyRoomStore = new Ext.data.Store({ + proxy : new Ext.data.HttpProxy({ + url : WWWROOT + '/disinfectSystem/baseData/supplyRoomConfigAction!loadSupplyRoomConfigRoom.do', + method : 'POST' + }), + baseParams :{type:"12"}, + reader : rd, + listeners :{ + 'load' : function(thiz,records,options){ + var length = records.length; + if(length > 0){ + Ext.getCmp('departCoding').setValue(records[0].data.departId); + Ext.getCmp('querySupplyRoom').setValue(records[0].data.name); + } + } + } +}); +var myMask; Ext.onReady(function() { Ext.QuickTips.init(); - + function reloadReport(){ + var startTime= $Id('startTime').value; + var endTime = $Id('endTime').value; + var departCoding = $Id('departCoding').value; + myMask = new Ext.LoadMask(Ext.getBody(), { + msg: '正在加载,请稍候!', + removeMask: true + }); + myMask.show(); + window.open(WWWROOT+"/jasperreports/jasperreportsAction!createReportFromJavaBeanSource.do?departCoding="+departCoding+"&jasperreportName=workload.jasper&startTime="+startTime+"&endTime="+endTime+"&reportName=workload",'thisIframe','_self'); + } - var dt = new Date(); - var startDayofMonth = dt.getFullYear() + "/" + (dt.getMonth() + 1) + "/01"; - - //“供应室combo”的store.. - var supplyRoomStore = new Ext.data.Store({ - proxy : new Ext.data.HttpProxy({ - url : WWWROOT + '/disinfectSystem/baseData/supplyRoomConfigAction!loadSupplyRoomConfigRoom.do', - method : 'POST' - }), - baseParams :{type:"12"}, - reader : new Ext.data.JsonReader({ - fields : [ - {name : 'id', mapping : 'id'}, - {name : 'departCode', mapping : 'departId'}, - {name : 'name', mapping : 'name'} - ] - }), - listeners:{ - load :function (thiz,records,options ){ - if(records.length >0){ - Ext.getCmp('querySupplyRoom').setValue(records[0].data.departCode); - } - } - } - }); - - form = new Ext.form.FormPanel({ - title : '消毒供应中心工作量统计列表', - region : 'north', - labelAlign : 'right', - buttonAlign : 'center', - collapsible : true, - collapseMode : 'mini', - split : true, - border : 0, - frame : true, - bodyStyle : 'padding:0px auto;margin:0px',// padding:1px;padding-top:5px; - height : 105, - items : [{ - layout : 'column', - height : 40, + var departJsonStore = new Ext.data.SimpleStore({ + fields : [ 'departName' ], + url : WWWROOT + '/disinfectSystem/reportFormsCenterAction!getAllDepartName.do' + }); + var dt = new Date(); + var startDayofMonth = dt.getFullYear() + "/" + (dt.getMonth() + 1) + "/01"; + var form = new Ext.form.FormPanel({ + title : '消毒中心员工工作统计评分报表', + region : 'north', + labelAlign : 'right', + buttonAlign : 'center', + collapsible : true, + collapseMode : 'mini', + split : true, + border : 0, + frame : true, + bodyStyle : 'padding:0px auto;margin:0px',// padding:1px;padding-top:5px; + height : 105, items : [{ - width : 200, - layout : 'form', - labelWidth : 60, - items : [{ - xtype : 'datefieldWithMin', - fieldLabel : '开始日期', - id : 'startTime', - name : 'startTime', - editable : false, - format : 'Y-m-d', - altFormats:'Y-m-d|Y-n-j|y-n-j|y-m-j|y-m-d|y-n-d|Y-n-d|Y-m-j|Ymd|Ynj|ynj|ymj|ymd|ynd|Ynd|Ymj|Y/m/d|Y/n/j|y/n/j|y/m/j|y/m/d|y/n/d|Y/n/d|Y/m/j', - allowBlank : false, - anchor : '95%', - value:new Date(startDayofMonth), - listeners : { - specialkey : function(field, e) { - if (e.getKey() == Ext.EventObject.ENTER) { - var isOK = field.validate(); - if(isOK){ - var value = field.getValue(); - field.setValue(value); - var endTime = Ext.getCmp('endTime'); - endTime.setValue(''); - endTime.focus(); - } - - } - } - } - }] + xtype : 'hidden', + name : 'departCoding', + id : 'departCoding' },{ - width : 200, - layout : 'form', - labelWidth : 60, + layout : 'column', + height : 40, + labelWidth : 70, items : [{ - xtype : 'datefieldWithMin', - fieldLabel : '结束日期', - id : 'endTime', - name : 'endTime', - editable : false, - format : 'Y-m-d', - altFormats:'Y-m-d|Y-n-j|y-n-j|y-m-j|y-m-d|y-n-d|Y-n-d|Y-m-j|Ymd|Ynj|ynj|ymj|ymd|ynd|Ynd|Ymj|Y/m/d|Y/n/j|y/n/j|y/m/j|y/m/d|y/n/d|Y/n/d|Y/m/j', - allowBlank : false, - anchor : '95%', - value:new Date(), - listeners : { - specialkey : function(field, e) { - if (e.getKey() == Ext.EventObject.ENTER) { - var isOK = field.validate(); - if(isOK){ - var value = field.getValue(); - field.setValue(value); + width : 230, + layout : 'form', + labelWidth : 60, + items : [ + { + columnWidth : .5, + layout : 'form', + labelWidth : 70, + items : [ { + xtype : 'datefieldWithMin', + fieldLabel : '开始日期', + id : 'startTime', + name : 'startTime', + editable : false, + format : 'Y-m-d', + altFormats:'Y-m-d|Y-n-j|y-n-j|y-m-j|y-m-d|y-n-d|Y-n-d|Y-m-j|Ymd|Ynj|ynj|ymj|ymd|ynd|Ynd|Ymj|Y/m/d|Y/n/j|y/n/j|y/m/j|y/m/d|y/n/d|Y/n/d|Y/m/j', + allowBlank : false, + anchor : '95%', + value:new Date(startDayofMonth), + listeners : { + specialkey : function(field, e) { + if (e.getKey() == Ext.EventObject.ENTER) { + var isOK = field.validate(); + if(isOK){ + var value = field.getValue(); + field.setValue(value); + var endTime = Ext.getCmp('endTime'); + endTime.setValue(''); + endTime.focus(); + } + + } + } } - + } ] + }] + },{ + width : 230, + layout : 'form', + labelWidth : 50, + items : [{ + columnWidth : .5, + layout : 'form', + labelWidth : 70, + items : [ { + xtype : 'datefieldWithMin', + fieldLabel : '结束日期', + id : 'endTime', + name : 'endTime', + editable : false, + format : 'Y-m-d', + altFormats:'Y-m-d|Y-n-j|y-n-j|y-m-j|y-m-d|y-n-d|Y-n-d|Y-m-j|Ymd|Ynj|ynj|ymj|ymd|ynd|Ynd|Ymj|Y/m/d|Y/n/j|y/n/j|y/m/j|y/m/d|y/n/d|Y/n/d|Y/m/j', + allowBlank : false, + anchor : '95%', + value:new Date(), + listeners : { + specialkey : function(field, e) { + if (e.getKey() == Ext.EventObject.ENTER) { + var isOK = field.validate(); + if(isOK){ + var value = field.getValue(); + field.setValue(value); + } + + } + } } - } - } + } ] + }] + },{ + + width : 250, + layout : 'form', + labelWidth : 80, + labelSeparator : '选择供应室:', + items : [{ + xtype : 'combo', + id : 'querySupplyRoom', + name : 'querySupplyRoom', + valueField : 'departId', + displayField : 'name', + allowBlank : true, + editable : false, + store : supplyRoomStore, + forceSelection : true, + mode : 'local', + triggerAction : 'all', + listeners : { + 'select' : function(combo,record,index){ + Ext.getCmp('departCoding').setValue(record.data.departId); + } + }, + anchor : '95%' + }] + }] + }], + buttons:[{ + xtype : 'button', + text : '年度查询', + minWidth : 70, + iconCls : 'icon_search', + handler : function() { + var dateTime = new Date(); + var startDate = dateTime.getFullYear() + "/01/01"; + var endDate = dateTime.getFullYear() + "/12/31"; + Ext.getCmp('startTime').setValue(startDate); + Ext.getCmp('endTime').setValue(endDate); + reloadReport(); + } },{ - width : 250, - layout : 'form', - labelWidth : 80, - labelSeparator : '选择供应室:', - items : [{ - xtype : 'combo', - id : 'querySupplyRoom', - name : 'querySupplyRoom', - valueField : 'departCode', - displayField : 'name', - allowBlank : true, - editable : false, - store : supplyRoomStore, - forceSelection : true, - mode : 'local', - triggerAction : 'all', - listeners : { - render : function(_this) { - supplyRoomStore.load(); - } - }, - anchor : '95%' - }] - + xtype : 'button', + text : '查询', + minWidth : 70, + iconCls : 'icon_search', + handler : function() { + reloadReport(); + } + },{ + xtype : 'button', + text : '重置', + minWidth : 70, + iconCls : 'icon_set', + handler : function() { + $Id('startTime').value = ""; + $Id('endTime').value = ""; + } + },{ + xtype : 'button', + text : '设置评分标准', + minWidth : 70, + iconCls : 'icon_set', + handler : function() { + setWorkScoreConfig(); + } }] - }], - buttons:[{ - xtype : 'button', - text : '查询', - minWidth : 70, - iconCls : 'icon_search', - handler : function() { - reloadReport(); - } - },{ - xtype : 'button', - text : '重置', - minWidth : 70, - iconCls : 'icon_set', - handler : function() { - $Id('startTime').value = ""; - $Id('endTime').value = ""; - } - }] - }); - - - var reportForm = new Ext.Panel({ - frame:false,//渲染面板 - autoScroll:true,//自动显示滚动条 - collapsible:true,//允许展开和收缩 - bodyPadding:5, - html:'<iframe id="thisIframe" name="thisIframe" width="100%" height="100%" frameborder=0"></iframe>' + }); + + + var reportForm = new Ext.Panel({ + frame:false,//渲染面板 + autoScroll:true,//自动显示滚动条 + collapsible:true,//允许展开和收缩 + bodyPadding:5, + html:'<iframe id="thisIframe" name="thisIframe" width="100%" height="100%" frameborder=0"></iframe>' - }); - - var viewport = new Ext.Viewport({ - layout : 'border', - items : [form, { - region : 'center', - margins : '0 0 0 0', - layout : 'fit', - items : reportForm - }] - }); -}); \ No newline at end of file + }); + + var viewport = new Ext.Viewport({ + layout : 'border', + items : [form, { + region : 'center', + margins : '0 0 0 0', + layout : 'fit', + items : reportForm + }] + }); + supplyRoomStore.load(); + }); \ No newline at end of file