Index: ssts-web/src/main/webapp/disinfectsystem/packing/comboToussePackingView.js =================================================================== diff -u -r16876 -r16968 --- ssts-web/src/main/webapp/disinfectsystem/packing/comboToussePackingView.js (.../comboToussePackingView.js) (revision 16876) +++ ssts-web/src/main/webapp/disinfectsystem/packing/comboToussePackingView.js (.../comboToussePackingView.js) (revision 16968) @@ -15,7 +15,6 @@ } var str = "            "; str += "            "; - str += "     "; top.Ext4.getCmp("comboGrid").setTitle("已聚合的器械包" + str + "器械包总数量:" + totalAmount); } @@ -33,7 +32,10 @@ tousseName : tousseName, amount : amount, maxAmount : amount, - packageType : packageType + packageType : packageType, + errorAmount : 0, + damageAmount : 0, + unWashAmount : 0 }] sourceStore.insert(0,addItem); }else{ @@ -64,7 +66,24 @@ } } +/** + * 是否存在丢失报损器械 + * @param record + * @returns {Boolean} + */ +function isExistErrorOrDamage(record){ + var exist = false; + var tousseName = record.data["tousseName"]; + var errorAmount = record.data["errorAmount"]; + var damageAmount = record.data["damageAmount"]; + if(errorAmount > 0 || damageAmount > 0){ + showResult(tousseName + "丢失器械" + errorAmount + "件,报损器械" + damageAmount + "件,请补充后再装配!"); + exist = true; + } + return exist; +} + /** * >> 或 >>>> */ @@ -76,11 +95,17 @@ if(isAllMove){ var store = waitComboTousseGrid.getStore(); - for(var i = 0 ; i < store.getCount() ; i++){ - var record = store.getAt(i); - addTousseToTousseGrid(comboGridStore,record.get("id"),record.get("tousseName"),record.get("maxAmount"),record.get("packageType")); + var count = store.getCount(); + if(count > 0){ + for(var i = (count-1) ; i >= 0 ; i--){ + var record = store.getAt(i); + var isExist = isExistErrorOrDamage(record); + if(!isExist){ + addTousseToTousseGrid(comboGridStore,record.get("id"),record.get("tousseName"),record.get("maxAmount"),record.get("packageType")); + waitComboTousseStore.remove(record); + } + } } - waitComboTousseStore.removeAll(); }else{ var records = waitComboTousseGrid.getSelectionModel().getSelection(); if (records.length == 0) { @@ -98,15 +123,17 @@ showResult("聚合数量不能大于总数量!"); return false; } - addTousseToTousseGrid(comboGridStore,id,tousseName,amount,packageType); - - if(amount == maxAmount){ - waitComboTousseStore.remove(records[i]); - }else{ - var num = Number(maxAmount) - Number(amount); - records[i].set('amount', num); - records[i].set('maxAmount', num); - } + var isExist = isExistErrorOrDamage(records[i]); + if(!isExist){ + addTousseToTousseGrid(comboGridStore,id,tousseName,amount,packageType); + if(amount == maxAmount){ + waitComboTousseStore.remove(records[i]); + }else{ + var num = Number(maxAmount) - Number(amount); + records[i].set('amount', num); + records[i].set('maxAmount', num); + } + } } } resetComboTousseTotolAmount(); @@ -347,6 +374,8 @@ waitComboTousseStore.removeAll(); var comboGrid = top.Ext4.getCmp("comboGrid").getStore(); comboGrid.removeAll(); + var comboTousseDataGrid = top.Ext4.getCmp("comboTousseDataGrid").getStore(); + comboTousseDataGrid.removeAll(); var record = records; if (records.length > 0){ @@ -377,12 +406,18 @@ var name = includeTousseJson[i].name; var amount = includeTousseJson[i].currrentTaskAmount; var packageType = includeTousseJson[i].packageType; + var errorAmount = includeTousseJson[i].errorAmount; + var damageAmount = includeTousseJson[i].damageAmount; + var unWashAmount = includeTousseJson[i].unWashAmount; var addItem = [{ id : id, tousseName : name, amount : amount, maxAmount : amount, - packageType:packageType + packageType:packageType, + errorAmount : errorAmount, + damageAmount : damageAmount, + unWashAmount : unWashAmount }] waitComboTousseStore.insert(0,addItem); } @@ -411,17 +446,29 @@ {name : 'tousseName',mapping : 'tousseName'}, {name : 'amount',mapping : 'amount'}, {name : 'maxAmount',mapping : 'maxAmount'}, - {name : 'packageType',mapping : 'packageType'} + {name : 'packageType',mapping : 'packageType'}, + {name : 'errorAmount',mapping : 'errorAmount'}, + {name : 'damageAmount',mapping : 'damageAmount'}, + {name : 'unWashAmount',mapping : 'unWashAmount'} ] }), columns:[{ header : "器械包名称", dataIndex : 'tousseName', - width : 160 + width : 140, + renderer: function(v,metaData,record,rowIndex, columnIndex, store,view){ + var errorAmount = record.get('errorAmount'); + var damageAmount = record.get('damageAmount'); + if(errorAmount > 0 || damageAmount > 0){ + return "

" + v + "

"; + }else{ + return v; + } + } }, { header : "聚合数量", dataIndex : 'amount', - width : 100, + width : 70, editor : { xtype: 'numberfield', allowDecimals : false, @@ -434,9 +481,13 @@ } } }, { - header : "总数量", + header : "可装配数量", dataIndex : 'maxAmount', - width : 100 + width : 80 + }, { + header : "未清洗数量", + dataIndex : 'unWashAmount', + width : 75 }] }); Index: ssts-qualitymon/src/main/java/com/forgon/disinfectsystem/qualitymonitoring/definition/action/QualityMonitoringDefinitionAction.java =================================================================== diff -u -r16357 -r16968 --- ssts-qualitymon/src/main/java/com/forgon/disinfectsystem/qualitymonitoring/definition/action/QualityMonitoringDefinitionAction.java (.../QualityMonitoringDefinitionAction.java) (revision 16357) +++ ssts-qualitymon/src/main/java/com/forgon/disinfectsystem/qualitymonitoring/definition/action/QualityMonitoringDefinitionAction.java (.../QualityMonitoringDefinitionAction.java) (revision 16968) @@ -213,76 +213,74 @@ TousseInstance tousseInstance = (TousseInstance) objectDao.getByProperty( TousseInstance.class.getSimpleName(), "barcode", barcode); if (tousseInstance != null) { - //验证当前科室是否有配置处理对应器械包 - tousseDefinitionManager.validateCssdHandleTousses(AcegiHelper.getCurrentOrgUnitCode(), - AcegiHelper.getCurrentOrgUnitName(), tousseInstance.getTousseDefinition().getTousseType(), - tousseInstance.getTousseName()); + TousseDefinition td = tousseInstance.getTousseDefinition(); - QualityMonitoringDefinition qualityMonitoringConfig = qualityMonitoringDefinitionManager - .getQualityMonitoringDefinitionById(qmDefinitionId); - String responsiblePerson = ""; - if (qualityMonitoringConfig != null) { - String responsibilityPart = qualityMonitoringConfig - .getResponsibilityPart(); - // 责任人的抓取取决于配置项的配置,如果是装配管理,则拿取装配员,如果是审核打包则拿审核人,如果是灭菌管理则拿灭菌员 - if (StringUtils.isNotBlank(responsibilityPart)) { - // 装配管理 - if (responsibilityPart - .indexOf(QualityMonitoringDefinition.QUALITYMONITORING_MODULE_NAME_PACKING) != -1) { - responsiblePerson = appendToSourceStrWithTargetStr( - responsiblePerson, - tousseInstance.getOperator()); - } - // 审核打包 - if (responsibilityPart - .indexOf(QualityMonitoringDefinition.QUALITYMONITORING_MODULE_NAME_REVIEW) != -1) { - // 去重 - if ((";" + responsiblePerson + ";").indexOf((";" - + tousseInstance.getReviewer() + ";")) == -1) { + if(TousseDefinition.PACKAGE_TYPE_COMBO.equals(td.getTousseType())){ + obj = JSONUtil.buildJsonObject(false, "暂时不支持录入聚合包."); + }else{ + //验证当前科室是否有配置处理对应器械包 + tousseDefinitionManager.validateCssdHandleTousses(AcegiHelper.getCurrentOrgUnitCode(), + AcegiHelper.getCurrentOrgUnitName(), td.getTousseType(), + tousseInstance.getTousseName()); + + QualityMonitoringDefinition qualityMonitoringConfig = qualityMonitoringDefinitionManager + .getQualityMonitoringDefinitionById(qmDefinitionId); + String responsiblePerson = ""; + if (qualityMonitoringConfig != null) { + String responsibilityPart = qualityMonitoringConfig + .getResponsibilityPart(); + // 责任人的抓取取决于配置项的配置,如果是装配管理,则拿取装配员,如果是审核打包则拿审核人,如果是灭菌管理则拿灭菌员 + if (StringUtils.isNotBlank(responsibilityPart)) { + // 装配管理 + if (responsibilityPart + .indexOf(QualityMonitoringDefinition.QUALITYMONITORING_MODULE_NAME_PACKING) != -1) { responsiblePerson = appendToSourceStrWithTargetStr( responsiblePerson, - tousseInstance.getReviewer()); + tousseInstance.getOperator()); } - } - // 灭菌管理 - if (responsibilityPart - .indexOf(QualityMonitoringDefinition.QUALITYMONITORING_MODULE_NAME_STERILIZATION) != -1) { - if (tousseInstance.getSterilizationRecord_id() != null && tousseInstance.getSterilizationRecord_id() != 0) { + // 审核打包 + if (responsibilityPart + .indexOf(QualityMonitoringDefinition.QUALITYMONITORING_MODULE_NAME_REVIEW) != -1) { // 去重 - String sterilizationUser = tousseInstance.getSterilizationUser(); - - if ((";" + responsiblePerson + ";") - .indexOf((";" + sterilizationUser + ";")) == -1) { + if ((";" + responsiblePerson + ";").indexOf((";" + + tousseInstance.getReviewer() + ";")) == -1) { responsiblePerson = appendToSourceStrWithTargetStr( responsiblePerson, - sterilizationUser); + tousseInstance.getReviewer()); } } + // 灭菌管理 + if (responsibilityPart + .indexOf(QualityMonitoringDefinition.QUALITYMONITORING_MODULE_NAME_STERILIZATION) != -1) { + if (tousseInstance.getSterilizationRecord_id() != null && tousseInstance.getSterilizationRecord_id() != 0) { + // 去重 + String sterilizationUser = tousseInstance.getSterilizationUser(); + + if ((";" + responsiblePerson + ";") + .indexOf((";" + sterilizationUser + ";")) == -1) { + responsiblePerson = appendToSourceStrWithTargetStr( + responsiblePerson, + sterilizationUser); + } + } + } } } + String tousseType = td.getTousseType(); + String isRecycle = td.getIsRecycling(); + Long tousseDefinitionId = td.getId(); + String tousseName = tousseInstance.getTousseName(); + obj.put("success", true); + obj.put("tousseInstanceId", tousseInstance.getId()); + obj.put("tousseName", tousseName); + obj.put("tousseType", tousseType); + obj.put("isRecycle", isRecycle); + obj.put("responsiblePerson", responsiblePerson); + obj.put("tousseDefinitionId", tousseDefinitionId); + obj.put("sterilizerName", tousseInstance.getSterilizerName()); + obj.put("sterileFrequency", tousseInstance.getSterileFrequency()); + obj.put("success", true); } - String tousseType = TousseDefinition.PACKAGE_TYPE_INSIDE; - String isRecycle = Constants.STR_NO; - Long tousseDefinitionId = null; - if (tousseInstance.getTousseDefinition() != null) { - tousseDefinitionId = tousseInstance.getTousseDefinition() - .getId(); - tousseType = tousseInstance.getTousseDefinition().getTousseType(); - isRecycle = tousseInstance.getTousseDefinition().getIsRecycling(); - } - - String tousseName = tousseInstance.getTousseName(); - - obj.put("success", true); - obj.put("tousseInstanceId", tousseInstance.getId()); - obj.put("tousseName", tousseName); - obj.put("tousseType", tousseType); - obj.put("isRecycle", isRecycle); - obj.put("responsiblePerson", responsiblePerson); - obj.put("tousseDefinitionId", tousseDefinitionId); - obj.put("sterilizerName", tousseInstance.getSterilizerName()); - obj.put("sterileFrequency", tousseInstance.getSterileFrequency()); - obj.put("success", true); }else{ obj = JSONUtil.buildJsonObject(false, "找不到器械包信息,请输入正确的条码."); } Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/PackingAction.java =================================================================== diff -u -r16876 -r16968 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/PackingAction.java (.../PackingAction.java) (revision 16876) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/PackingAction.java (.../PackingAction.java) (revision 16968) @@ -2,7 +2,9 @@ import java.io.IOException; import java.io.OutputStream; +import java.sql.ResultSet; import java.sql.SQLException; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -15,6 +17,8 @@ import net.sf.json.JsonConfig; import net.sf.json.util.PropertyFilter; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang.BooleanUtils; import org.apache.commons.lang.StringUtils; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; @@ -26,6 +30,7 @@ import com.forgon.disinfectsystem.entity.basedatamanager.imagefilemanager.ImageFile; import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; +import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.packing.PackingRecord; @@ -53,6 +58,7 @@ import com.forgon.tools.json.JSONUtil; import com.forgon.tools.json.JsonPropertyFilter; import com.forgon.tools.string.StringTools; +import com.forgon.tools.util.SqlUtils; /** * @author songwei 2012-3-22 上午10:59:50 @@ -821,6 +827,12 @@ array = JSONArray.fromObject(includeTousseString); String handlerDepartCode = AcegiHelper.getLoginUser() .getOrgUnitCodingFromSupplyRoomConfig(); + SupplyRoomConfig config = supplyRoomConfigManager.getSystemParamsObj(); + //清洗完成后装配 + boolean isPackingAfterWashTimeEnd = true; + if(config != null){ + isPackingAfterWashTimeEnd = BooleanUtils.toBooleanDefaultIfNull(config.getIsPackingAfterWashTimeEnd(), true); + } for (int i = 0; i < array.size(); i++) { JSONObject item = array.optJSONObject(i); Long tousseDefinitionId = item.optLong("id"); @@ -829,10 +841,23 @@ handlerDepartCode, departCoding); if (taskList != null) { int totalAmount = 0; + int unWashAmount = 0; + List taskIds = new ArrayList(); for (PackingTask packingTask : taskList) { - totalAmount += packingTask.getUnPackAmount(); + if (isPackingAfterWashTimeEnd + && PackingTask.TASK_RECYCLINGRECORD + .equals(packingTask.getTaskType()) + && StringUtils.isBlank(packingTask + .getWashTime())) { + unWashAmount += packingTask.getUnPackAmount(); + } else { + totalAmount += packingTask.getUnPackAmount(); + taskIds.add(packingTask.getId()); + } } item.put("currrentTaskAmount", totalAmount); + item.put("unWashAmount", unWashAmount); + getTaskErrorAndDamageAmount(taskIds,item); } } } catch (Exception e) { @@ -845,4 +870,46 @@ result.put("data", array); StrutsResponseUtils.output(result); } + + /** + * 获取装配任务丢失、报损数量 + * @return + */ + private void getTaskErrorAndDamageAmount(List taskIds,JSONObject json){ + int errorAmount = 0; + int damageAmount = 0; + if(CollectionUtils.isNotEmpty(taskIds)){ + String sql = String.format("select sum(po.amount - po.additionalAmount) from %s po " + + "where po.errorType = '%s' and po.amount > po.additionalAmount and %s", + RecyclingError.class.getSimpleName(),RecyclingError.ERRORTYPE_REDUCE, + SqlUtils.getNonStringFieldInCollectionsPredicate("po.packingTask_ID", taskIds)); + ResultSet rs = objectDao.executeSql(sql); + try { + if(rs.next()){ + errorAmount = rs.getInt(1); + } + } catch (SQLException e) { + e.printStackTrace(); + } finally{ + DatabaseUtil.closeResultSetAndStatement(rs); + } + + String sql2 = String.format("select sum(po.amount - po.additionalAmount) from %s po " + + "where po.amount > po.additionalAmount and %s", + RecyclingDamageItem.class.getSimpleName(), + SqlUtils.getNonStringFieldInCollectionsPredicate("po.packingTask_ID", taskIds)); + ResultSet rs2 = objectDao.executeSql(sql2); + try { + if(rs2.next()){ + damageAmount = rs2.getInt(1); + } + } catch (SQLException e) { + e.printStackTrace(); + } finally{ + DatabaseUtil.closeResultSetAndStatement(rs); + } + } + json.put("errorAmount", errorAmount); + json.put("damageAmount", damageAmount); + } }