Index: ssts-web/src/main/java/com/forgon/disinfectsystem/equipmentinspection/definition/service/EquipmentInspectionDefManagerImpl.java =================================================================== diff -u -r41043 -r41071 --- ssts-web/src/main/java/com/forgon/disinfectsystem/equipmentinspection/definition/service/EquipmentInspectionDefManagerImpl.java (.../EquipmentInspectionDefManagerImpl.java) (revision 41043) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/equipmentinspection/definition/service/EquipmentInspectionDefManagerImpl.java (.../EquipmentInspectionDefManagerImpl.java) (revision 41071) @@ -226,8 +226,8 @@ * 1、已存在适用设备为全部的定义 * 2、同个设备不能在多个定义中设置 * 3、设备是否存在 - * @param equipmentInspectionDef - * @param saveApplicableEquipmentList + * @param equipmentInspectionDef 设备巡检定义 + * @param saveApplicableEquipmentList 适用设备 */ public void validateApplicableEquipment(EquipmentInspectionDef equipmentInspectionDef, List saveApplicableEquipmentList){ //已存在适用设备为全部的定义 @@ -239,6 +239,7 @@ FormDefinition.class.getSimpleName(), Constants.STR_YES, Constants.STR_YES); + allEquipmentSql += " and def.id in (" + formDefinitionManager.getLastEditFormDefinitionSQL(FormDefinition.ACTION_DEPLOY, FormDefinition.FOMRTYPE_EQUIPMENTINSPECTION) + ") "; if(StringUtils.isNotBlank(equipmentInspectionDef.getFormName())){ allEquipmentSql += String.format(" and fd.id not in (select id from %s where formName = '%s') ", FormDefinition.class.getSimpleName(), equipmentInspectionDef.getFormName()); } @@ -256,37 +257,39 @@ List rinserIdList = new ArrayList(); List sterilizerIdList = new ArrayList(); List bioreaderIdList = new ArrayList(); - for (ApplicableEquipment applicableEquipment : saveApplicableEquipmentList) { - Long equipmentId = applicableEquipment.getEquipmentId(); - String type = applicableEquipment.getType(); - if(!DatabaseUtil.isPoIdValid(equipmentId)){ - throw new RuntimeException("设备ID异常"); - } - if(!StringUtils.equals(type, ApplicableEquipment.TYPE_RINSER) - && !StringUtils.equals(type, ApplicableEquipment.TYPE_STERILIZER) - && !StringUtils.equals(type, ApplicableEquipment.TYPE_BIOREADER)){ - throw new RuntimeException("设备类型异常"); - } - - if(StringUtils.equals(type, ApplicableEquipment.TYPE_RINSER)){ - rinserIdList.add(equipmentId); - }else if(StringUtils.equals(type, ApplicableEquipment.TYPE_STERILIZER)){ - sterilizerIdList.add(equipmentId); - }else if(StringUtils.equals(type, ApplicableEquipment.TYPE_BIOREADER)){ - //适用设备包含生物阅读器时,只允许设置为每天固定时间提醒 - if(StringUtils.equals(equipmentInspectionDef.getRemindMode(), EquipmentInspectionDef.REMIND_MODE_DEVICE_RUNNING)){ - throw new RuntimeException("适用设备包含生物阅读器时,只允许设置为每天固定时间提醒"); + if(CollectionUtils.isNotEmpty(saveApplicableEquipmentList)){ + for (ApplicableEquipment applicableEquipment : saveApplicableEquipmentList) { + Long equipmentId = applicableEquipment.getEquipmentId(); + String type = applicableEquipment.getType(); + if(!DatabaseUtil.isPoIdValid(equipmentId)){ + throw new RuntimeException("设备ID异常"); } - bioreaderIdList.add(equipmentId); - }else{ - throw new RuntimeException("设备类型异常"); + if(!StringUtils.equals(type, ApplicableEquipment.TYPE_RINSER) + && !StringUtils.equals(type, ApplicableEquipment.TYPE_STERILIZER) + && !StringUtils.equals(type, ApplicableEquipment.TYPE_BIOREADER)){ + throw new RuntimeException("设备类型异常"); + } + + if(StringUtils.equals(type, ApplicableEquipment.TYPE_RINSER)){ + rinserIdList.add(equipmentId); + }else if(StringUtils.equals(type, ApplicableEquipment.TYPE_STERILIZER)){ + sterilizerIdList.add(equipmentId); + }else if(StringUtils.equals(type, ApplicableEquipment.TYPE_BIOREADER)){ + //适用设备包含生物阅读器时,只允许设置为每天固定时间提醒 + if(StringUtils.equals(equipmentInspectionDef.getRemindMode(), EquipmentInspectionDef.REMIND_MODE_DEVICE_RUNNING)){ + throw new RuntimeException("适用设备包含生物阅读器时,只允许设置为每天固定时间提醒"); + } + bioreaderIdList.add(equipmentId); + }else{ + throw new RuntimeException("设备类型异常"); + } + + String key = StringTools.defaultString(type) + "_" + equipmentId; + if(typeEquipmentIdKeySet.contains(key)){ + throw new RuntimeException("设备参数异常"); + } + typeEquipmentIdKeySet.add(key); } - - String key = StringTools.defaultString(type) + "_" + equipmentId; - if(typeEquipmentIdKeySet.contains(key)){ - throw new RuntimeException("设备参数异常"); - } - typeEquipmentIdKeySet.add(key); } if(CollectionUtils.isNotEmpty(rinserIdList)){ @@ -310,29 +313,32 @@ } List errorApplicableEquipmentList = new ArrayList(); - for (ApplicableEquipment applicableEquipment : saveApplicableEquipmentList) { - //同个设备不能在多个定义中设置,如设置的设备已经存在其他正在启用的定义中,则不能保存; - StringBuffer sql = new StringBuffer(); - sql.append("select count(1) from "); - sql.append(ApplicableEquipment.class.getSimpleName()); - sql.append(" ae join "); - sql.append(FormDefinition.class.getSimpleName()); - sql.append(" fd on fd.id = ae.equipmentInspectionDefId "); - sql.append("where fd.formType = '"); - sql.append(FormDefinition.FOMRTYPE_EQUIPMENTINSPECTION); - sql.append("' and (fd.isDisabled is null or fd.isDisabled <> '"); - sql.append(Constants.STR_YES); - sql.append("') and equipmentId = "); - sql.append(applicableEquipment.getEquipmentId()); - sql.append(" and type = '"); - sql.append(applicableEquipment.getType()); - sql.append("' "); - sql.append("and fd.formName <> '"); - sql.append(equipmentInspectionDef.getFormName()); - sql.append("' "); - if(objectDao.countBySql(sql.toString()) > 0){ - errorApplicableEquipmentList.add(applicableEquipment); - continue; + if(CollectionUtils.isNotEmpty(saveApplicableEquipmentList)){ + for (ApplicableEquipment applicableEquipment : saveApplicableEquipmentList) { + //同个设备不能在多个定义中设置,如设置的设备已经存在其他正在启用的定义中,则不能保存; + StringBuffer sql = new StringBuffer(); + sql.append("select count(1) from "); + sql.append(ApplicableEquipment.class.getSimpleName()); + sql.append(" ae join "); + sql.append(FormDefinition.class.getSimpleName()); + sql.append(" fd on fd.id = ae.equipmentInspectionDefId "); + sql.append("where fd.formType = '"); + sql.append(FormDefinition.FOMRTYPE_EQUIPMENTINSPECTION); + sql.append("' and (fd.isDisabled is null or fd.isDisabled <> '"); + sql.append(Constants.STR_YES); + sql.append("') and equipmentId = "); + sql.append(applicableEquipment.getEquipmentId()); + sql.append(" and type = '"); + sql.append(applicableEquipment.getType()); + sql.append("' "); + sql.append("and fd.formName <> '"); + sql.append(equipmentInspectionDef.getFormName()); + sql.append("' "); + sql.append(" and fd.id in (" + formDefinitionManager.getLastEditFormDefinitionSQL(FormDefinition.ACTION_DEPLOY, FormDefinition.FOMRTYPE_EQUIPMENTINSPECTION) + ") "); + if(objectDao.countBySql(sql.toString()) > 0){ + errorApplicableEquipmentList.add(applicableEquipment); + continue; + } } } //如果有异常的适用设备,需要提示 @@ -465,7 +471,7 @@ } //已存在适用设备为全部的定义 - String allEquipmentSql = String.format("select count(1) from %s def " + /*String allEquipmentSql = String.format("select count(1) from %s def " + "join %s fd on fd.id = def.id " + "where def.allEquipment = '%s' " + "and (fd.isDisabled is null or fd.isDisabled <> '%s') ", @@ -478,7 +484,7 @@ } if(objectDao.countBySql(allEquipmentSql) > 0){ throw new SystemException("已存在适用设备为全部的定义!"); - } + }*/ if(StringUtils.equals(equipmentInspectionDef.getAllEquipment(), Constants.STR_YES)){ if(StringUtils.equals(equipmentInspectionDef.getRemindMode(), EquipmentInspectionDef.REMIND_MODE_FIXED_TIME_EVERY_DAY)){ throw new SystemException("适用设备包含生物阅读器时,只允许设置为每天固定时间提醒。"); @@ -1142,11 +1148,10 @@ EquipmentInspectionDef formDefinition = this.get(id); if(formDefinition != null){ formDefinition.setIsDisabled(isDisabled); - String hql = String.format("select po from %s po where po.equipmentInspectionDefId = %s", ApplicableEquipment.class.getSimpleName(), - id); - List saveApplicableEquipmentList = objectDao.findByHql(hql ); - //适用设备验证 if(StringUtils.equals(isDisabled, Constants.STR_NO)){ + //如果启用的是最新版本的设备巡检定义,就需要检查适用设备 + String hql = String.format("select po from %s po where po.equipmentInspectionDefId = %s", ApplicableEquipment.class.getSimpleName(), id); + List saveApplicableEquipmentList = objectDao.findByHql(hql); validateApplicableEquipment(formDefinition, saveApplicableEquipmentList); } objectDao.saveOrUpdate(formDefinition);