Index: ssts-satisfactionsurvey/src/main/java/com/forgon/disinfectsystem/satisfactionsurvey/action/SatisfactionSurveyTableAction.java =================================================================== diff -u -r35836 -r39053 --- ssts-satisfactionsurvey/src/main/java/com/forgon/disinfectsystem/satisfactionsurvey/action/SatisfactionSurveyTableAction.java (.../SatisfactionSurveyTableAction.java) (revision 35836) +++ ssts-satisfactionsurvey/src/main/java/com/forgon/disinfectsystem/satisfactionsurvey/action/SatisfactionSurveyTableAction.java (.../SatisfactionSurveyTableAction.java) (revision 39053) @@ -27,9 +27,10 @@ import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.vo.LoginUserData; -import com.forgon.disinfectsystem.customform.formdefinition.service.FormDefinitionManager; import com.forgon.disinfectsystem.customform.forminstance.service.FormInstanceManager; import com.forgon.disinfectsystem.entity.satisfactionsurvey.Satisfaction; +import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionDetail; +import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionOptionInstance; import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionSurveyTable; import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionSurveyTableItem; import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionSurveyTemplate; @@ -61,7 +62,6 @@ private SatisfactionSurveyTableManager satisfactionSurveyTableManager; - private FormDefinitionManager formDefinitionManager; private FormInstanceManager formInstanceManager; @@ -75,10 +75,6 @@ this.satisfactionSurveyTableManager = satisfactionSurveyTableManager; } - public void setFormDefinitionManager(FormDefinitionManager formDefinitionManager) { - this.formDefinitionManager = formDefinitionManager; - } - public void setFormInstanceManager(FormInstanceManager formInstanceManager) { this.formInstanceManager = formInstanceManager; } @@ -152,13 +148,15 @@ childObj.put("seqNum", String.format("%s.%s", seqNum, ++ seqNum2)); //“满意度调查表定义”的“满意度调查项”中新增设置项“默认满意度”(GZSDBRMYY-29) childObj.put("satisfaction", getTemplateItemSatisfaction(child.getDefaultSatisfaction(), enableDefaultSatisfactionOptionsFunction)); + setDefaultSatisfaction(childObj, child, enableDefaultSatisfactionOptionsFunction); childObj.put("leaf", true); childrenArr.add(childObj); } obj.put("children", childrenArr); } else { //“满意度调查表定义”的“满意度调查项”中新增设置项“默认满意度”(GZSDBRMYY-29) obj.put("satisfaction", getTemplateItemSatisfaction(item.getDefaultSatisfaction(), enableDefaultSatisfactionOptionsFunction)); + setDefaultSatisfaction(obj, item, enableDefaultSatisfactionOptionsFunction); obj.put("leaf", true); } itemArr.add(obj); @@ -170,6 +168,24 @@ } /** + * 设置默认满意度选项 + * @param childObj + * @param item + * @param enableDefaultSatisfactionOptionsFunction + */ + private void setDefaultSatisfaction(JSONObject childObj, SatisfactionSurveyTemplateItem item, + boolean enableDefaultSatisfactionOptionsFunction) { + if(!enableDefaultSatisfactionOptionsFunction){ + return; + } + SatisfactionOptionInstance defaultSatisfactionOptionInstance = item.getDefaultSatisfactionOptionInstance(); + if(defaultSatisfactionOptionInstance != null){ + childObj.put("defaultSatisfactionOptionInstance", JSONObject.fromObject(defaultSatisfactionOptionInstance)); + } + } + + + /** * 根据配置项获取“默认满意度”,不开启配置项时,不返回“默认满意度”(GZSDBRMYY-29) * @param defaultSatisfaction * @param enableDefaultSatisfactionOptionsFunction @@ -249,14 +265,24 @@ childObj.put("nodeId", child.getId()); childObj.put("id", child.getId()); childObj.put("content", child.getContent()); - childObj.put("satisfaction", child.getSatisfaction().name()); + childObj.put("satisfaction", child.getSatisfaction() == null ? "" : child.getSatisfaction().name()); childObj.put("seqNum", String.format("%s.%s", seqNum, ++ seqNum2)); childObj.put("leaf", true); + SatisfactionDetail satisfactionDetail = child.getSatisfactionDetail(); + if(satisfactionDetail != null){ + JSONObject satisfactionDetailJson = JSONObject.fromObject(satisfactionDetail); + childObj.put("satisfactionDetail", satisfactionDetailJson); + } childrenArr.add(childObj); } obj.put("children", childrenArr); } else { - obj.put("satisfaction", item.getSatisfaction().name()); + obj.put("satisfaction", item.getSatisfaction() == null ? "" : item.getSatisfaction().name()); + SatisfactionDetail satisfactionDetail = item.getSatisfactionDetail(); + if(satisfactionDetail != null){ + JSONObject satisfactionDetailJson = JSONObject.fromObject(satisfactionDetail); + obj.put("satisfactionDetail", satisfactionDetailJson); + } obj.put("leaf", true); } answerItemArr.add(obj); @@ -332,6 +358,8 @@ * 1、设置每一个项的“sequenceNumber”属性和满意度情况 */ String treeItemData = StrutsParamUtils.getPraramValue("treeItemData", ""); + //treeItemData = "[{'content': '1','id': 30020,'satisfaction': 'SATISFACTION','satisfactionOptionDetails': [{'satifyResaon': '','satisfactionOption': {'id': 1,'satisfaction': '满意'}}]},{'content': '2','id': 30021,'satisfaction': 'MORESATISFACTION','satisfactionOptionDetails': [{'satifyResaon': '原因','satisfactionOption': {'id': 1,'satisfaction': '不满意'}}]}]"; + //treeItemData = "[{'content': '2','id': null,'satisfaction': 'SATISFACTION','satisfactionDetail': {'satifyResaon': '','satisfactionOptionInstance': {'id': 31,'satisfactionOption': {'id': 1,'satisfaction': '满意'}}}}]"; List answerItem = null; if(StringUtils.isNotBlank(treeItemData)){ answerItem = JSONUtil.fromJson(treeItemData, new TypeToken>(){}); @@ -340,6 +368,7 @@ long pSeq = 1; for(SatisfactionSurveyTableItem item : answerItem){//最多只有两层 item.setSequenceNumber(pSeq++); + item.setId(null); List children = item.getChildren(); if(CollectionUtils.isNotEmpty(children)){ long cSeq = 1; Index: forgon-tools/src/main/java/com/forgon/Constants.java =================================================================== diff -u -r38902 -r39053 --- forgon-tools/src/main/java/com/forgon/Constants.java (.../Constants.java) (revision 38902) +++ forgon-tools/src/main/java/com/forgon/Constants.java (.../Constants.java) (revision 39053) @@ -28,7 +28,8 @@ "4.9.45","4.9.46","4.9.47","4.9.48","4.9.49","4.9.50","4.9.51","4.9.52","4.9.53","4.9.54","4.9.55","4.9.56","4.9.57","4.9.58","4.9.59","4.9.60","4.9.61","4.9.62", "4.9.63","4.9.64","4.9.65","4.9.66","4.9.67","4.9.68","4.9.69","4.9.70","4.9.71","4.9.72","4.9.73","4.9.74","4.9.75","4.9.76","4.9.77","4.9.78","4.9.79","4.9.80","4.9.81","4.9.82","4.9.83","4.9.84","4.9.85", "4.9.86","4.9.87","4.9.88","4.9.89","4.9.90","4.9.91","4.9.92","4.9.93","4.9.94","4.9.95","4.9.96","4.9.97","4.9.98","4.9.99","5.0.0","5.0.1","5.0.2","5.0.3","5.0.4","5.0.5","5.0.6","5.0.7", - "5.0.8","5.0.9","5.0.10","5.0.11","5.0.12","5.0.13","5.0.14","5.0.15","5.0.16","5.0.17","5.0.18","5.0.19","5.0.20","5.0.21","5.0.22","5.0.23","5.0.24","5.0.25","5.0.26","5.0.27","5.0.28","5.0.29","5.0.30","5.0.31"}; + "5.0.8","5.0.9","5.0.10","5.0.11","5.0.12","5.0.13","5.0.14","5.0.15","5.0.16","5.0.17","5.0.18","5.0.19","5.0.20","5.0.21","5.0.22","5.0.23","5.0.24","5.0.25","5.0.26","5.0.27","5.0.28","5.0.29","5.0.30","5.0.31", + "5.0.32"}; // 版本列表(4.0版本升级4.1版需要分两步:先从4.0升到4.1.0、然后从4.1.0升级4.1最新版本) /*public final static String[] SOFTWARE_VERSION_ARRAY = new String[] { Index: ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/basic/service/MaintainManagerImpl.java =================================================================== diff -u -r38737 -r39053 --- ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/basic/service/MaintainManagerImpl.java (.../MaintainManagerImpl.java) (revision 38737) +++ ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/basic/service/MaintainManagerImpl.java (.../MaintainManagerImpl.java) (revision 39053) @@ -203,6 +203,7 @@ import com.forgon.disinfectsystem.invoicemanager.service.InvoiceManager; import com.forgon.disinfectsystem.recyclingapplication.service.InvoicePlanManager; import com.forgon.disinfectsystem.recyclingrecord.service.RecyclingRecordManager; +import com.forgon.disinfectsystem.satisfactionsurvey.service.SatisfactionSurveyTableManager; import com.forgon.disinfectsystem.sterilizationmanager.foreignproxydisinfection.service.ForeignProxyDisinfectionManager; import com.forgon.disinfectsystem.tousse.materialdefinition.service.MaterialDefinitionManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; @@ -270,6 +271,12 @@ private HttpOptionManager httpOptionManager; + private SatisfactionSurveyTableManager satisfactionSurveyTableManager; + + public void setSatisfactionSurveyTableManager(SatisfactionSurveyTableManager satisfactionSurveyTableManager) { + this.satisfactionSurveyTableManager = satisfactionSurveyTableManager; + } + public void setHttpOptionManager(HttpOptionManager httpOptionManager) { this.httpOptionManager = httpOptionManager; } @@ -1587,11 +1594,26 @@ case "5.0.16_5.0.17": UpdateData_5_0_16_5_0_17(updateDataContext); break; + case "5.0.31_5.0.32": + UpdateData_5_0_31_5_0_32(updateDataContext); + break; } return false; } /** + * 满意度调查表SSZXYY-18 + * @param updateDataContext + */ + private void UpdateData_5_0_31_5_0_32(UpdateDataContext updateDataContext) { + int satisfactionSurveyMode = ConfigUtils.getSystemSetConfigByNameInt("satisfactionSurveyMode", 0); + if(satisfactionSurveyMode == 0){ + return; + } + satisfactionSurveyTableManager.updateSatisfactionSurveyTable(); + } + + /** * 【生物阅读器管理】新增条码ZSRY-61 * @param updateDataContext */ Index: ssts-satisfactionsurvey/src/main/java/com/forgon/disinfectsystem/satisfactionsurvey/service/SatisfactionSurveyTableManagerImpl.java =================================================================== diff -u -r31563 -r39053 --- ssts-satisfactionsurvey/src/main/java/com/forgon/disinfectsystem/satisfactionsurvey/service/SatisfactionSurveyTableManagerImpl.java (.../SatisfactionSurveyTableManagerImpl.java) (revision 31563) +++ ssts-satisfactionsurvey/src/main/java/com/forgon/disinfectsystem/satisfactionsurvey/service/SatisfactionSurveyTableManagerImpl.java (.../SatisfactionSurveyTableManagerImpl.java) (revision 39053) @@ -1,26 +1,34 @@ package com.forgon.disinfectsystem.satisfactionsurvey.service; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; +import org.apache.commons.collections.MapUtils; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; -import org.springframework.orm.hibernate4.HibernateTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import com.forgon.Constants; import com.forgon.disinfectsystem.customform.forminstance.service.FormInstanceManager; import com.forgon.disinfectsystem.entity.customform.formdefinition.FormDefinition; import com.forgon.disinfectsystem.entity.customform.forminstance.FormInstance; +import com.forgon.disinfectsystem.entity.satisfactionsurvey.Satisfaction; +import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionDetail; +import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionOption; +import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionOptionInstance; import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionSurveyTable; import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionSurveyTableItem; import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionSurveyTemplate; +import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionSurveyTemplateItem; import com.forgon.exception.SystemException; import com.forgon.tools.db.DatabaseUtil; -import com.forgon.tools.hibernate.BasePoManager; import com.forgon.tools.hibernate.BasePoManagerImpl; -import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.util.ConfigUtils; /** * 用户满意度调查表管理类 @@ -77,9 +85,105 @@ deleteItem(oldItem); } } + //保存满意度明细 + setSatisfactionSurveyTableItemSatisfactionDetail(persistentSatisfactionSurveyTable); objectDao.saveOrUpdate(persistentSatisfactionSurveyTable); } + /** + * 保存满意度明细 + * @param persistentSatisfactionSurveyTable + */ + private void setSatisfactionSurveyTableItemSatisfactionDetail(SatisfactionSurveyTable persistentSatisfactionSurveyTable) { + int satisfactionSurveyMode = ConfigUtils.getSystemSetConfigByNameInt("satisfactionSurveyMode", 0); + if(satisfactionSurveyMode == 0){ + return; + } + if(persistentSatisfactionSurveyTable == null){ + return; + } + List answerItems = persistentSatisfactionSurveyTable.getAnswerItem(); + if(CollectionUtils.isEmpty(answerItems)){ + return; + } + Map satisfactionOptionInstanceMap = getSatisfactionOptionInstanceMap(persistentSatisfactionSurveyTable); + if(MapUtils.isEmpty(satisfactionOptionInstanceMap)){ + throw new SystemException("满意度调查表定义没有关联的满意度选项"); + } + for (SatisfactionSurveyTableItem item : answerItems) { + List childrens = item.getChildren(); + if(CollectionUtils.isNotEmpty(childrens)){ + for (SatisfactionSurveyTableItem cItem : childrens) { + //关联满意度选项实例 + setSatisfactionDetailSatisfactionOptionInstance(cItem.getSatisfactionDetail(), satisfactionOptionInstanceMap); + } + continue; + } + //关联满意度选项实例 + setSatisfactionDetailSatisfactionOptionInstance(item.getSatisfactionDetail(), satisfactionOptionInstanceMap); + } + } + + /** + * 关联满意度选项实例 + * @param satisfactionDetail + * @param satisfactionOptionInstanceMap + */ + private void setSatisfactionDetailSatisfactionOptionInstance(SatisfactionDetail satisfactionDetail, + Map satisfactionOptionInstanceMap) { + if(satisfactionDetail == null || MapUtils.isEmpty(satisfactionOptionInstanceMap)){ + throw new SystemException("满意度调查表的满意度选项不能为空"); + } + SatisfactionOptionInstance paramSatisfactionOptionInstance = satisfactionDetail.getSatisfactionOptionInstance(); + if(paramSatisfactionOptionInstance == null || !DatabaseUtil.isPoIdValid(paramSatisfactionOptionInstance.getId())){ + throw new SystemException("满意度调查表的满意度选项不能为空"); + } + Long instanceId = paramSatisfactionOptionInstance.getId(); + SatisfactionOptionInstance dBSatisfactionOptionInstance = satisfactionOptionInstanceMap.get(instanceId); + if(dBSatisfactionOptionInstance == null){ + throw new SystemException("满意度调查表的满意度选项不存在"); + } + if(StringUtils.isBlank(satisfactionDetail.getSatifyResaon())){ + String recordReason = dBSatisfactionOptionInstance.getRecordReason(); + String reasonNotNull = dBSatisfactionOptionInstance.getReasonNotNull(); + if(StringUtils.equals(recordReason, Constants.STR_YES) + && StringUtils.equals(reasonNotNull, Constants.STR_YES)){ + throw new SystemException("原因不能为空"); + } + } + satisfactionDetail.setSatisfactionOptionInstance(dBSatisfactionOptionInstance); + objectDao.saveOrUpdate(satisfactionDetail); + } + + /** + * 满意度选项 + * @param persistentSatisfactionSurveyTable + * @return + */ + private Map getSatisfactionOptionInstanceMap(SatisfactionSurveyTable persistentSatisfactionSurveyTable) { + Map satisfactionOptionInstanceMap = new HashMap(); + if(persistentSatisfactionSurveyTable == null){ + return satisfactionOptionInstanceMap; + } + Long templateId = persistentSatisfactionSurveyTable.getSatisfactionSurveyTemplateId(); + SatisfactionSurveyTemplate satisfactionSurveyTemplate = (SatisfactionSurveyTemplate) objectDao.getById(SatisfactionSurveyTemplate.class.getSimpleName(), templateId); + if(satisfactionSurveyTemplate == null){ + throw new SystemException("满意度调查表定义不存在"); + } + List satisfactionOptionInstances = satisfactionSurveyTemplate.getSatisfactionOptionInstances(); + if(CollectionUtils.isEmpty(satisfactionOptionInstances)){ + throw new SystemException("满意度选项实例不存在"); + } + for (SatisfactionOptionInstance instance : satisfactionOptionInstances) { + SatisfactionOption satisfactionOption = instance.getSatisfactionOption(); + if(satisfactionOption == null){ + throw new SystemException("满意度选项不存在"); + } + satisfactionOptionInstanceMap.put(instance.getId(), instance); + } + return satisfactionOptionInstanceMap; + } + @SuppressWarnings("unchecked") @Override public List findByHql(String hql) { @@ -138,4 +242,288 @@ this.saveOrUpdate(satisfactionSurveyTable, answerItem); this.saveOrUpdateFormInstance(satisfactionSurveyTable, items); } + + @Override + public void updateSatisfactionSurveyTable() { + //初始化满意度选项:满意、较满意、基本满意、不太满意、不满意 + initSatisfactionOption(); + //设置满意度调查表定义冗余的满意度选项及默认满意度实例 + updateSatisfactionSurveyTemplateSatisfactionOptionInstance(); + //设置满意度调查表的满意度明细 + updateSatisfactionSurveyTableSatisfactionDetail(); + } + + /** + * 设置满意度调查表的满意度明细 + */ + @SuppressWarnings("unchecked") + private void updateSatisfactionSurveyTableSatisfactionDetail() { + List satisfactionSurveyTableList = objectDao.findAllObjects(SatisfactionSurveyTable.class.getSimpleName()); + if(CollectionUtils.isEmpty(satisfactionSurveyTableList)){ + return; + } + Map satisfactionSurveyTemplateMap = getSatisfactionSurveyTemplateMap(); + Map satisfactionValueOptionMap = getSatisfactionValueOptionMap(); + for (SatisfactionSurveyTable satisfactionSurveyTable : satisfactionSurveyTableList) { + SatisfactionSurveyTemplate satisfactionSurveyTemplate = satisfactionSurveyTemplateMap.get(satisfactionSurveyTable.getSatisfactionSurveyTemplateId()); + if(satisfactionSurveyTemplate == null){ + continue; + } + List answerItems = satisfactionSurveyTable.getAnswerItem(); + if(CollectionUtils.isEmpty(answerItems)){ + continue; + } + for (SatisfactionSurveyTableItem item : answerItems) { + List childrenItems = item.getChildren(); + if(CollectionUtils.isNotEmpty(childrenItems)){ + for (SatisfactionSurveyTableItem chileItem : childrenItems) { + //设置满意度调查表明细的满意度明细 + updateSatisfactionSurveyTableItemSatisfactionDetail(chileItem, satisfactionSurveyTemplate, satisfactionValueOptionMap); + } + continue; + } + //设置满意度调查表明细的满意度明细 + updateSatisfactionSurveyTableItemSatisfactionDetail(item, satisfactionSurveyTemplate, satisfactionValueOptionMap); + } + } + } + + /** + * 设置满意度调查表明细的满意度明细 + * @param item + * @param satisfactionSurveyTemplate + */ + private void updateSatisfactionSurveyTableItemSatisfactionDetail(SatisfactionSurveyTableItem item, SatisfactionSurveyTemplate satisfactionSurveyTemplate, Map satisfactionValueOptionMap) { + + if(item == null){ + return; + } + + SatisfactionDetail satisfactionDetail = item.getSatisfactionDetail(); + if(satisfactionDetail != null){ + return; + } + + Map satisfactionOptionInstanceMap = getSatisfactionOptionInstanceMap(satisfactionSurveyTemplate.getSatisfactionOptionInstances()); + if(MapUtils.isEmpty(satisfactionOptionInstanceMap)){ + return; + } + Satisfaction satisfaction = item.getSatisfaction(); + if(satisfaction == null){ + return; + } + SatisfactionOption satisfactionOption = satisfactionValueOptionMap.get(satisfaction.getValue()); + if(satisfactionOption == null){ + return; + } + SatisfactionOptionInstance satisfactionOptionInstance = satisfactionOptionInstanceMap.get(satisfactionOption.getId()); + if(satisfactionOptionInstance == null){ + return; + } + satisfactionDetail = new SatisfactionDetail(); + satisfactionDetail.setSatisfactionOptionInstance(satisfactionOptionInstance); + objectDao.saveOrUpdate(satisfactionDetail); + item.setSatisfactionDetail(satisfactionDetail); + objectDao.saveOrUpdate(item); + } + + /** + * 获取满意度调查表定义的map + * @return + */ + @SuppressWarnings("unchecked") + private Map getSatisfactionSurveyTemplateMap() { + Map satisfactionSurveyTemplateMap = new HashMap(); + List satisfactionSurveyTemplateList = objectDao.findAllObjects(SatisfactionSurveyTemplate.class.getSimpleName()); + if(CollectionUtils.isEmpty(satisfactionSurveyTemplateList)){ + return satisfactionSurveyTemplateMap; + } + for (SatisfactionSurveyTemplate satisfactionSurveyTemplate : satisfactionSurveyTemplateList) { + satisfactionSurveyTemplateMap.put(satisfactionSurveyTemplate.getId(), satisfactionSurveyTemplate); + } + return satisfactionSurveyTemplateMap; + } + + /** + * 设置满意度调查表定义冗余的满意度选项 + */ + @SuppressWarnings("unchecked") + private void updateSatisfactionSurveyTemplateSatisfactionOptionInstance() { + List satisfactionSurveyTemplateList = objectDao.findAllObjects(SatisfactionSurveyTemplate.class.getSimpleName()); + if(CollectionUtils.isEmpty(satisfactionSurveyTemplateList)){ + return; + } + Map satisfactionValueOptionMap = getSatisfactionValueOptionMap(); + if(MapUtils.isEmpty(satisfactionValueOptionMap)){ + return; + } + for (SatisfactionSurveyTemplate satisfactionSurveyTemplate : satisfactionSurveyTemplateList) { + List satisfactionOptionInstances = satisfactionSurveyTemplate.getSatisfactionOptionInstances(); + if(CollectionUtils.isNotEmpty(satisfactionOptionInstances)){ + continue; + } + satisfactionOptionInstances = new ArrayList(); + for (SatisfactionOption satisfactionOption : satisfactionValueOptionMap.values()) { + if(satisfactionOption.getStatus() == SatisfactionOption.STATUS_DISABLED){ + continue; + } + SatisfactionOptionInstance satisfactionOptionInstance = new SatisfactionOptionInstance(); + satisfactionOptionInstance.setSatisfactionOption(satisfactionOption); + satisfactionOptionInstance.setReasonNotNull(Constants.STR_NO); + satisfactionOptionInstance.setRecordReason(Constants.STR_NO); + satisfactionOptionInstance.setSatisfaction(satisfactionOption.getSatisfaction()); + satisfactionOptionInstance.setSequenceNum(satisfactionOption.getSequenceNum()); + satisfactionOptionInstance.setWeight(satisfactionOption.getWeight()); + objectDao.saveOrUpdate(satisfactionOptionInstance); + satisfactionOptionInstances.add(satisfactionOptionInstance); + } + satisfactionSurveyTemplate.setSatisfactionOptionInstances(satisfactionOptionInstances); + //设置满意度调查表定义的默认满意度选项 + setSatisfactionSurveyTemplateDefaultSatisfactionOptionInstance(satisfactionSurveyTemplate, satisfactionValueOptionMap); + } + } + + /** + * 设置满意度调查表定义的默认满意度选项 + * @param satisfactionSurveyTemplate + */ + private void setSatisfactionSurveyTemplateDefaultSatisfactionOptionInstance(SatisfactionSurveyTemplate satisfactionSurveyTemplate, Map satisfactionValueOptionMap) { + if(satisfactionSurveyTemplate == null){ + return; + } + List itemList = satisfactionSurveyTemplate.getItemList(); + if(CollectionUtils.isEmpty(itemList)){ + return; + } + for (SatisfactionSurveyTemplateItem item : itemList) { + List childrenItemList = item.getChildren(); + if(CollectionUtils.isNotEmpty(childrenItemList)){ + for (SatisfactionSurveyTemplateItem childItem : childrenItemList) { + //设置满意度调查表定义明细的默认满意度选项 + setSatisfactionSurveyTemplateItemDefaultSatisfactionOptionInstance(satisfactionSurveyTemplate, childItem, satisfactionValueOptionMap); + } + continue; + } + //设置满意度调查表定义明细的默认满意度选项 + setSatisfactionSurveyTemplateItemDefaultSatisfactionOptionInstance(satisfactionSurveyTemplate, item, satisfactionValueOptionMap); + } + } + + /** + * 设置满意度调查表定义明细的默认满意度选项 + * @param satisfactionSurveyTemplate + * @param item + */ + private void setSatisfactionSurveyTemplateItemDefaultSatisfactionOptionInstance(SatisfactionSurveyTemplate satisfactionSurveyTemplate, + SatisfactionSurveyTemplateItem satisfactionSurveyTemplateItem, Map satisfactionValueOptionMap) { + //满意度选项id和满意度选项实例的map + Map satisfactionOptionInstanceMap = getSatisfactionOptionInstanceMap(satisfactionSurveyTemplate.getSatisfactionOptionInstances()); + if(MapUtils.isEmpty(satisfactionOptionInstanceMap)){ + return; + } + String defaultSatisfactionName = satisfactionSurveyTemplateItem.getDefaultSatisfaction(); + if(StringUtils.isBlank(defaultSatisfactionName) || StringUtils.equals(defaultSatisfactionName, SatisfactionSurveyTemplateItem.SATISFACTION_NULL)){ + return; + } + Satisfaction satisfaction = Satisfaction.valueOf(defaultSatisfactionName); + if(satisfaction == null){ + return; + } + String defaultSatisfactionValue = satisfaction.getValue(); + if(StringUtils.isBlank(defaultSatisfactionValue)){ + return; + } + SatisfactionOption satisfactionOption = satisfactionValueOptionMap.get(defaultSatisfactionValue); + if(satisfactionOption == null){ + return; + } + SatisfactionOptionInstance satisfactionOptionInstance = satisfactionOptionInstanceMap.get(satisfactionOption.getId()); + if(satisfactionOptionInstance == null){ + return; + } + satisfactionSurveyTemplateItem.setDefaultSatisfactionOptionInstance(satisfactionOptionInstance); + objectDao.saveOrUpdate(satisfactionSurveyTemplateItem); + } + + /** + * 满意度选项id和满意度选项实例的map + * @param satisfactionOptionInstances + * @return + */ + private Map getSatisfactionOptionInstanceMap(List satisfactionOptionInstances) { + Map satisfactionOptionInstanceMap = new HashMap(); + if(CollectionUtils.isEmpty(satisfactionOptionInstances)){ + return satisfactionOptionInstanceMap; + } + for (SatisfactionOptionInstance satisfactionOptionInstance : satisfactionOptionInstances) { + SatisfactionOption satisfactionOption = satisfactionOptionInstance.getSatisfactionOption(); + if(satisfactionOption == null){ + continue; + } + satisfactionOptionInstanceMap.put(satisfactionOption.getId(), satisfactionOptionInstance); + } + return satisfactionOptionInstanceMap; + } + + /** + * 初始化满意度选项:满意、较满意、基本满意、不太满意、不满意 + * @return + */ + @SuppressWarnings("unchecked") + private void initSatisfactionOption() { + Map satisfactionOptionMap = new HashMap(); + List satisfactionOptionList = objectDao.findAllObjects(SatisfactionOption.class.getSimpleName()); + Integer maxSequenceNum = 0; + if(CollectionUtils.isNotEmpty(satisfactionOptionList)){ + for (SatisfactionOption satisfactionOption : satisfactionOptionList) { + satisfactionOptionMap.put(satisfactionOption.getSatisfaction(), satisfactionOption); + if(satisfactionOption.getSequenceNum() != null && satisfactionOption.getSequenceNum() > maxSequenceNum){ + maxSequenceNum = satisfactionOption.getSequenceNum(); + } + } + } + Map satisfactionWeightMap = getSatisfactionWeightMap(); + for (Satisfaction satisfaction : Satisfaction.values()) { + String satisfactionValue = satisfaction.getValue(); + if(StringUtils.isNotBlank(satisfactionValue)){ + SatisfactionOption satisfactionOption = satisfactionOptionMap.get(satisfactionValue); + if(satisfactionOption == null){ + satisfactionOption = new SatisfactionOption(); + satisfactionOption.setSatisfaction(satisfactionValue); + satisfactionOption.setSequenceNum(++maxSequenceNum); + satisfactionOption.setWeight(satisfactionWeightMap.get(satisfactionValue)); + objectDao.save(satisfactionOption); + } + } + } + } + + /** + * 满意度权重 + * @return + */ + private Map getSatisfactionWeightMap() { + Map satisfactionWeightMap = new HashMap(); + Integer weight = 5; + for (Satisfaction satisfaction : Satisfaction.values()) { + satisfactionWeightMap.put(satisfaction.getValue(), weight--); + } + return satisfactionWeightMap; + } + + /** + * 获取全部满意度选项名称及选项的map + * @return + */ + @SuppressWarnings("unchecked") + private Map getSatisfactionValueOptionMap() { + Map satisfactionOptionMap = new HashMap(); + List satisfactionOptionList = objectDao.findAllObjects(SatisfactionOption.class.getSimpleName()); + if(CollectionUtils.isNotEmpty(satisfactionOptionList)){ + for (SatisfactionOption satisfactionOption : satisfactionOptionList) { + satisfactionOptionMap.put(satisfactionOption.getSatisfaction(), satisfactionOption); + } + } + return satisfactionOptionMap; + } } Index: ssts-satisfactionsurvey/src/main/java/com/forgon/disinfectsystem/satisfactionsurvey/service/SatisfactionSurveyTableManager.java =================================================================== diff -u -r26149 -r39053 --- ssts-satisfactionsurvey/src/main/java/com/forgon/disinfectsystem/satisfactionsurvey/service/SatisfactionSurveyTableManager.java (.../SatisfactionSurveyTableManager.java) (revision 26149) +++ ssts-satisfactionsurvey/src/main/java/com/forgon/disinfectsystem/satisfactionsurvey/service/SatisfactionSurveyTableManager.java (.../SatisfactionSurveyTableManager.java) (revision 39053) @@ -38,4 +38,9 @@ * @param answerItem 满意度调查表填写好的答案 */ void saveOrUpdateSatisfactionSurveyTableAndFormInstance(SatisfactionSurveyTable satisfactionSurveyTable, Map items, List answerItem); + + /** + * 升级满意度调查表的数据 + */ + public void updateSatisfactionSurveyTable(); } Index: build.gradle =================================================================== diff -u -r38933 -r39053 --- build.gradle (.../build.gradle) (revision 38933) +++ build.gradle (.../build.gradle) (revision 39053) @@ -1152,6 +1152,7 @@ compile (project(":ssts-print")) compile (project(":forgon-knowledge")) compile (project(":ssts-receiverecord")) + compile (project(":ssts-satisfactionsurvey")) } } Index: ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml =================================================================== diff -u -r38957 -r39053 --- ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 38957) +++ ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 39053) @@ -3154,4 +3154,15 @@ class="com.forgon.disinfectsystem.tousse.toussedefinition.service.ThirdPartyTousseReceiveRecordManagerImpl"> + + + + + + + + + \ No newline at end of file Index: ssts-satisfactionsurvey/src/main/java/com/forgon/disinfectsystem/satisfactionsurvey/service/SatisfactionOptionManager.java =================================================================== diff -u --- ssts-satisfactionsurvey/src/main/java/com/forgon/disinfectsystem/satisfactionsurvey/service/SatisfactionOptionManager.java (revision 0) +++ ssts-satisfactionsurvey/src/main/java/com/forgon/disinfectsystem/satisfactionsurvey/service/SatisfactionOptionManager.java (revision 39053) @@ -0,0 +1,63 @@ +package com.forgon.disinfectsystem.satisfactionsurvey.service; + +import java.util.List; + +import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionOption; +import com.forgon.disinfectsystem.satisfactionsurvey.vo.SatisfactionOptionVo; +import com.forgon.entity.PageEntity; +import com.forgon.tools.hibernate.BasePoManager; + +/** + * 满意度选项的接口SSZXYY-18 + */ +public interface SatisfactionOptionManager extends BasePoManager { + + /** + * 保存满意度选项 + * @param satisfactionOption + */ + public void saveSatisfactionOption(SatisfactionOption satisfactionOption); + + /** + * 删除满意度选项 + * @param ids id,例如1;2;3 + */ + public void deleteSatisfactionOption(String ids); + + /** + * 排序 + * @param id + * @param orderType 排序方式:up/down + */ + public void sortSatisfactionOption(Long id, String orderType); + + /** + * 停用满意度选项 + * @param id + */ + public void disableSatisfactionOption(Long id); + + /** + * 启用满意度选项 + * @param id + */ + public void enableSatisfactionOption(Long id); + + /** + * 分页查询满意度选项 + * @param satisfactionOption 满意度选项的查询条件 + * @param page 分页信息 + * @param searchColumns 过滤的列名称 + * @param searchKeyWord 查询的关键字 + * @return + */ + public List loadSatisfactionOption(SatisfactionOptionVo satisfactionOptionVo, PageEntity page, + String searchKeyWord, String searchColumns); + + /** + * 查询全部已经启用的满意度选项 + * @return + */ + public List getAllEnableSatisfactionOption(); + +} Index: ssts-satisfactionsurvey/src/main/java/com/forgon/disinfectsystem/satisfactionsurvey/controller/SatisfactionOptionController.java =================================================================== diff -u --- ssts-satisfactionsurvey/src/main/java/com/forgon/disinfectsystem/satisfactionsurvey/controller/SatisfactionOptionController.java (revision 0) +++ ssts-satisfactionsurvey/src/main/java/com/forgon/disinfectsystem/satisfactionsurvey/controller/SatisfactionOptionController.java (revision 39053) @@ -0,0 +1,150 @@ +package com.forgon.disinfectsystem.satisfactionsurvey.controller; + +import java.util.List; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionOption; +import com.forgon.disinfectsystem.satisfactionsurvey.service.SatisfactionOptionManager; +import com.forgon.disinfectsystem.satisfactionsurvey.vo.SatisfactionOptionVo; +import com.forgon.entity.PageEntity; +import com.forgon.exception.SystemException; +import com.forgon.tools.json.JSONUtil; + +/** + * 满意度选项的接口SSZXYY-18 + */ +@RestController +@RequestMapping(value = "/disinfectSystem/baseData/satisfactionOption/satisfactionOptionController", produces = "application/json;charset=UTF-8") +public class SatisfactionOptionController { + + @Autowired + private SatisfactionOptionManager satisfactionOptionManager; + + /** + * 保存满意度选项 + * @param satisfactionOption + * @return + */ + @RequestMapping(value = "/saveSatisfactionOption") + public String saveSatisfactionOption(SatisfactionOption satisfactionOption){ + JSONObject result = JSONUtil.buildJsonObject(true, "保存成功"); + try { + satisfactionOptionManager.saveSatisfactionOption(satisfactionOption); + } catch (SystemException e) { + e.printStackTrace(); + result = JSONUtil.buildJsonObject(false, e.getMessage()); + } catch (Exception e) { + e.printStackTrace(); + result = JSONUtil.buildJsonObject(false, "保存失败:" + e.getMessage()); + } + return result.toString(); + } + + /** + * 删除满意度选项 + * @param ids 例如:1;2;3 + * @return + */ + @RequestMapping(value = "/deleteSatisfactionOption") + public String deleteSatisfactionOption(String ids){ + JSONObject result = JSONUtil.buildJsonObject(true, "删除成功"); + try { + satisfactionOptionManager.deleteSatisfactionOption(ids); + } catch (SystemException e) { + e.printStackTrace(); + result = JSONUtil.buildJsonObject(false, e.getMessage()); + } catch (Exception e) { + e.printStackTrace(); + result = JSONUtil.buildJsonObject(false, "删除失败:" + e.getMessage()); + } + return result.toString(); + } + + /** + * 排序 + * @param id + * @param sortType up/down/top/bottom + * @return + */ + @RequestMapping(value = "/sortSatisfactionOption") + public String sortSatisfactionOption(Long id, String orderType){ + JSONObject result = JSONUtil.buildJsonObject(true, "操作成功"); + try { + satisfactionOptionManager.sortSatisfactionOption(id, orderType); + } catch (Exception e) { + e.printStackTrace(); + result = JSONUtil.buildJsonObject(false, "操作失败:" + e.getMessage()); + } + return result.toString(); + } + + /** + * 停用满意度选项 + * @param id + * @param sortType + * @return + */ + @RequestMapping(value = "/disableSatisfactionOption") + public String disableSatisfactionOption(Long id){ + JSONObject result = JSONUtil.buildJsonObject(true, "操作成功"); + try { + satisfactionOptionManager.disableSatisfactionOption(id); + } catch (SystemException e) { + e.printStackTrace(); + result = JSONUtil.buildJsonObject(false, e.getMessage()); + } catch (Exception e) { + e.printStackTrace(); + result = JSONUtil.buildJsonObject(false, "操作失败:" + e.getMessage()); + } + return result.toString(); + } + + /** + * 启用满意度选项 + * @param id + * @param sortType + * @return + */ + @RequestMapping(value = "/enableSatisfactionOption") + public String enableSatisfactionOption(Long id){ + JSONObject result = JSONUtil.buildJsonObject(true, "操作成功"); + try { + satisfactionOptionManager.enableSatisfactionOption(id); + } catch (Exception e) { + e.printStackTrace(); + result = JSONUtil.buildJsonObject(false, "操作失败:" + e.getMessage()); + } + return result.toString(); + } + + /** + * 查询满意度选项 + * @param satisfactionOptionVo + * @return + */ + @RequestMapping(value = "/loadSatisfactionOption") + public String loadSatisfactionOption(SatisfactionOptionVo satisfactionOptionVo, PageEntity page, String searchKeyWord, String searchColumns){ + JSONObject result = JSONUtil.buildJsonObject(true); + try { + JSONArray data = new JSONArray(); + List satisfactionOptions = satisfactionOptionManager.loadSatisfactionOption(satisfactionOptionVo, page, searchKeyWord, searchColumns); + if(CollectionUtils.isNotEmpty(satisfactionOptions)){ + data = JSONArray.fromObject(satisfactionOptions); + } + result = JSONUtil.buildJsonObject(true, data); + result.put("count", page.getCount()); + } catch (Exception e) { + e.printStackTrace(); + result = JSONUtil.buildJsonObject(false, "查询失败:" + e.getMessage()); + } + return result.toString(); + } + +} Index: ssts-satisfactionsurvey/src/main/java/com/forgon/disinfectsystem/satisfactionsurvey/action/SatisfactionSurveyTemplateAction.java =================================================================== diff -u -r35829 -r39053 --- ssts-satisfactionsurvey/src/main/java/com/forgon/disinfectsystem/satisfactionsurvey/action/SatisfactionSurveyTemplateAction.java (.../SatisfactionSurveyTemplateAction.java) (revision 35829) +++ ssts-satisfactionsurvey/src/main/java/com/forgon/disinfectsystem/satisfactionsurvey/action/SatisfactionSurveyTemplateAction.java (.../SatisfactionSurveyTemplateAction.java) (revision 39053) @@ -14,7 +14,6 @@ import com.forgon.directory.model.OrgUnit; import com.forgon.directory.service.OrgUnitManager; -import com.forgon.disinfectsystem.customform.formdefinition.service.FormDefinitionManager; import net.sf.json.JSONArray; import net.sf.json.JSONObject; @@ -27,14 +26,13 @@ import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.ParentPackage; -import com.forgon.disinfectsystem.entity.satisfactionsurvey.Satisfaction; +import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionOption; +import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionOptionInstance; import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionSurveyTable; -import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionSurveyTableItem; import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionSurveyTemplate; import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionSurveyTemplateItem; import com.forgon.disinfectsystem.satisfactionsurvey.service.SatisfactionSurveyTableManager; import com.forgon.disinfectsystem.satisfactionsurvey.service.SatisfactionSurveyTemplateManager; -import com.forgon.security.service.AclManager; import com.forgon.tools.StrutsParamUtils; import com.forgon.tools.StrutsResponseUtils; import com.forgon.tools.db.DatabaseUtil; @@ -62,8 +60,6 @@ private SatisfactionSurveyTemplate satisfactionSurveyTemplate; private SatisfactionSurveyTableManager satisfactionSurveyTableManager; private SatisfactionSurveyTemplateManager satisfactionSurveyTemplateManager; - private AclManager aclManager; - private FormDefinitionManager formDefinitionManager; private Map resultMap = new HashMap(); private OrgUnitManager orgUnitManager; @@ -77,10 +73,6 @@ this.satisfactionSurveyTableManager = satisfactionSurveyTableManager; } - public void setAclManager(AclManager aclManager) { - this.aclManager = aclManager; - } - public void setSatisfactionSurveyTemplateManager( SatisfactionSurveyTemplateManager satisfactionSurveyTemplateManager) { this.satisfactionSurveyTemplateManager = satisfactionSurveyTemplateManager; @@ -90,10 +82,6 @@ this.orgUnitManager = orgUnitManager; } - public void setFormDefinitionManager(FormDefinitionManager formDefinitionManager) { - this.formDefinitionManager = formDefinitionManager; - } - private void responseJson(String[] filter){ JsonConfig config = new JsonConfig(); if(filter != null){ @@ -186,7 +174,31 @@ // }else{ jsonStr.append("iconCls:'task-folder',"); // } - jsonStr.append("children:["); + if(CollectionUtils.isEmpty(pItem.getChildren())){ + SatisfactionOptionInstance defaultSatisfactionOptionInstance = pItem.getDefaultSatisfactionOptionInstance(); + if(defaultSatisfactionOptionInstance != null){ + SatisfactionOption defaultSatisfactionOption = defaultSatisfactionOptionInstance.getSatisfactionOption(); + jsonStr.append("defaultSatisfactionOptionInstance:{id:") + .append(defaultSatisfactionOptionInstance.getId()) + .append(",reasonNotNull:'") + .append(defaultSatisfactionOptionInstance.getReasonNotNull()) + .append("',recordReason:'") + .append(defaultSatisfactionOptionInstance.getRecordReason()) + .append("',satisfaction:'") + .append(defaultSatisfactionOptionInstance.getSatisfaction()) + .append("',weight:") + .append(defaultSatisfactionOptionInstance.getWeight()); + if(defaultSatisfactionOption != null){ + jsonStr.append(",satisfactionOption:{id:") + .append(defaultSatisfactionOption.getId()) + .append(",satisfaction:'") + .append(defaultSatisfactionOption.getSatisfaction()) + .append("'}"); + } + jsonStr.append("},"); + } + } + jsonStr.append("children:["); if (pItem.getChildren().size() > 0) { for (int i = 0, len = pItem.getChildren().size(); i < len; i++) { SatisfactionSurveyTemplateItem cItem = pItem @@ -210,6 +222,29 @@ jsonStr.append(",notRatherSatisfy:").append(cItem.getTotal_notRatherSatisfy()); jsonStr.append(",noSatisfy:").append(cItem.getTotal_noSatisfy()); } + SatisfactionOptionInstance defaultSatisfactionOptionInstance = cItem.getDefaultSatisfactionOptionInstance(); + if(defaultSatisfactionOptionInstance != null){ + SatisfactionOption defaultSatisfactionOption = defaultSatisfactionOptionInstance.getSatisfactionOption(); + jsonStr.append(",defaultSatisfactionOption:{id:") + .append(defaultSatisfactionOptionInstance.getId()) + .append(",reasonNotNull:'") + .append(defaultSatisfactionOptionInstance.getReasonNotNull()) + .append("',recordReason:'") + .append(defaultSatisfactionOptionInstance.getRecordReason()) + .append("',satisfaction:'") + .append(defaultSatisfactionOptionInstance.getSatisfaction()) + .append("',weight:") + .append(defaultSatisfactionOptionInstance.getWeight()); + if(defaultSatisfactionOption != null){ + jsonStr.append(",satisfactionOption:{id:") + .append(defaultSatisfactionOption.getId()) + .append(",satisfaction:'") + .append(defaultSatisfactionOption.getSatisfaction()) + .append("'}"); + } + jsonStr.append("},"); + } + jsonStr.append(",uiProvider:'col',leaf:true,iconCls:'task'}"); if (i != len - 1) { jsonStr.append(","); @@ -250,6 +285,8 @@ String readers = StrutsParamUtils.getPraramValue("readers", ""); satisfactionSurveyTemplate.setReaders(readers); String treeItemData = StrutsParamUtils.getPraramValue("treeItemData", ""); + //treeItemData = "[{id:'',content:'1',children:[{id:'',content:'1-1','defaultSatisfactionOption':{'id':1,'satisfaction':'满意'}}]},{id:'',content:'2','defaultSatisfactionOption':{'id':1,'satisfaction':'满意'}}]"; + //treeItemData = "[{id:'',content:'2','defaultSatisfactionOptionInstance':{'id': '','reasonNotNull': '否','recordReason': '否','satisfaction': '满意','weight': 10,'satisfactionOption':{'id':1,'satisfaction':'满意'}}}]"; List itemList = null; if(StringUtils.isNotBlank(treeItemData)){ itemList = jsonStrToJavaList(treeItemData); Index: ssts-satisfactionsurvey/src/main/java/com/forgon/disinfectsystem/satisfactionsurvey/service/SatisfactionOptionManagerImpl.java =================================================================== diff -u --- ssts-satisfactionsurvey/src/main/java/com/forgon/disinfectsystem/satisfactionsurvey/service/SatisfactionOptionManagerImpl.java (revision 0) +++ ssts-satisfactionsurvey/src/main/java/com/forgon/disinfectsystem/satisfactionsurvey/service/SatisfactionOptionManagerImpl.java (revision 39053) @@ -0,0 +1,425 @@ +package com.forgon.disinfectsystem.satisfactionsurvey.service; + +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.StringUtils; + +import com.forgon.Constants; +import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionOption; +import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionOptionInstance; +import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionSurveyTemplate; +import com.forgon.disinfectsystem.satisfactionsurvey.vo.SatisfactionOptionVo; +import com.forgon.entity.PageEntity; +import com.forgon.exception.SystemException; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.hibernate.BasePoManagerImpl; +import com.forgon.tools.string.StringTools; + +public class SatisfactionOptionManagerImpl extends BasePoManagerImpl implements SatisfactionOptionManager { + + @Override + public void saveSatisfactionOption(SatisfactionOption satisfactionOptionParam) { + if(satisfactionOptionParam == null){ + throw new RuntimeException("参数异常"); + } + SatisfactionOption satisfactionOption = null; + if(DatabaseUtil.isPoIdValid(satisfactionOptionParam.getId())){ + satisfactionOption = this.get(satisfactionOptionParam.getId()); + if(satisfactionOption == null){ + throw new RuntimeException("id无效"); + } + }else{ + satisfactionOption = new SatisfactionOption(); + Integer maxSequence = this.getSatisfactionOptionMaxSequence(); + if(maxSequence == null){ + maxSequence = 0; + } + maxSequence++; + satisfactionOption.setSequenceNum(maxSequence); + } + + //判断是否允许新增货修改满意度选项 + //存在正在进行中的调查问卷时,不允许进行新增选项、修改选项属性、停用或启用选项操作、删除选项操作 + existStartSatisfactionSurveyTemplate(); + + satisfactionOption.setReasonNotNull(satisfactionOptionParam.getReasonNotNull()); + satisfactionOption.setRecordReason(satisfactionOptionParam.getRecordReason()); + satisfactionOption.setSatisfaction(satisfactionOptionParam.getSatisfaction()); + satisfactionOption.setStatus(satisfactionOptionParam.getStatus()); + satisfactionOption.setWeight(satisfactionOptionParam.getWeight()); + + //校验满意度选项 + validateSatisfactionOption(satisfactionOption); + + this.save(satisfactionOption); + } + + /** + * 判断是否允许新增货修改满意度选项: + * 存在正在进行中的调查问卷时,不允许进行新增选项、修改选项属性、停用或启用选项操作、删除选项操作 + * @param satisfactionOption + */ + private void existStartSatisfactionSurveyTemplate() { + StringBuffer sql = new StringBuffer(); + sql.append("select count(1) from "); + sql.append(SatisfactionSurveyTemplate.class.getSimpleName()); + sql.append(" where status = '"); + sql.append(SatisfactionSurveyTemplate.STATUS_START); + sql.append("'"); + if(objectDao.countBySql(sql.toString()) > 0){ + throw new SystemException("操作失败,当前存在进行中的调查问卷,请等全部问卷结束后再操作。"); + } + } + + /** + * 校验满意度选项 + * @param satisfactionOption + */ + private void validateSatisfactionOption(SatisfactionOption satisfactionOption) { + if(satisfactionOption == null){ + throw new RuntimeException("参数异常"); + } + if(StringUtils.isBlank(satisfactionOption.getReasonNotNull())){ + throw new RuntimeException("“原因是否必填”为必填项"); + } + if(!StringUtils.equals(satisfactionOption.getReasonNotNull(), Constants.STR_YES) + && !StringUtils.equals(satisfactionOption.getReasonNotNull(), Constants.STR_NO)){ + throw new RuntimeException("“原因是否必填”参数异常"); + } + if(StringUtils.isBlank(satisfactionOption.getRecordReason())){ + throw new RuntimeException("“是否填写原因”为必填项"); + } + if(!StringUtils.equals(satisfactionOption.getRecordReason(), Constants.STR_YES) + && !StringUtils.equals(satisfactionOption.getRecordReason(), Constants.STR_NO)){ + throw new RuntimeException("“原因是否必填”参数异常"); + } + if(satisfactionOption.getStatus() == null){ + throw new RuntimeException("“是否启用”为必填项"); + } + if(satisfactionOption.getStatus() != SatisfactionOption.STATUS_DISABLED + && satisfactionOption.getStatus() != SatisfactionOption.STATUS_ENSABLED){ + throw new RuntimeException("“是否启用”参数异常"); + } + + if(satisfactionOption.getWeight() == null){ + throw new RuntimeException("“权重分值”为必填项"); + } + if(satisfactionOption.getWeight() <= 0){ + throw new RuntimeException("“权重分值”必须为正整数"); + } + + //选项名称,必填项,最多不可以超过20个中文字符长度,唯一不重复 + if(StringUtils.isBlank(satisfactionOption.getSatisfaction())){ + throw new RuntimeException("“选项名称”为必填项"); + } + if(satisfactionOption.getSatisfaction().length() > 20){ + throw new RuntimeException("不可以超过20个字符"); + } + StringBuffer sql = new StringBuffer(); + sql.append(" satisfaction = '"); + sql.append(satisfactionOption.getSatisfaction()); + sql.append("' "); + if(DatabaseUtil.isPoIdValid(satisfactionOption.getId())){ + sql.append(" and id <> " + satisfactionOption.getId()); + } + if(this.count(sql.toString()) > 0){ + throw new RuntimeException("已存在相同名称的选项。"); + } + } + + /** + * 获取满意度选项的最大顺序号 + * @return + */ + private Integer getSatisfactionOptionMaxSequence() { + String sql = String.format("select max(sequenceNum) maxSequence from %s ", SatisfactionOption.class.getSimpleName()); + Integer maxSequence = null; + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql); + while(rs.next()){ + maxSequence = rs.getInt("maxSequence"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + return maxSequence; + } + + @Override + public void deleteSatisfactionOption(String ids) { + if(StringUtils.isBlank(ids)){ + throw new RuntimeException("id无效"); + } + List satisfactionOptionList = this.getCollection(ids, ";"); + if(CollectionUtils.isEmpty(satisfactionOptionList)){ + return; + } + //存在正在进行中的调查问卷时,不允许进行新增选项、修改选项属性、停用或启用选项操作、删除选项操作 + existStartSatisfactionSurveyTemplate(); + for (SatisfactionOption satisfactionOption : satisfactionOptionList) { + deleteSatisfactionOption(satisfactionOption); + } + } + + /** + * 删除满意度选项 + * @param satisfactionOption + */ + private void deleteSatisfactionOption(SatisfactionOption satisfactionOption) { + canDeleteSatisfactionOption(satisfactionOption); + this.delete(satisfactionOption); + } + + /** + * 判断是否删除满意度选项 + * @param satisfactionOption + */ + private void canDeleteSatisfactionOption(SatisfactionOption satisfactionOption) { + /*StringBuffer sql = new StringBuffer(); + sql.append("select count(1) from "); + sql.append(SatisfactionSurveyTemplateItem.class.getSimpleName()); + sql.append(" where satisfactionOption_id = "); + sql.append(satisfactionOption.getId()); + if(objectDao.countBySql(sql.toString()) > 0){ + throw new SystemException("选项“" + satisfactionOption.getSatisfaction() + "”已经被设置为默认选项,请修改后再操作。"); + }*/ + + StringBuffer sql = new StringBuffer(); + sql.append("select count(1) from "); + sql.append(SatisfactionOptionInstance.class.getSimpleName()); + sql.append(" where satisfactionOption_id = "); + sql.append(satisfactionOption.getId()); + if(objectDao.countBySql(sql.toString()) > 0){ + throw new SystemException("选项“" + satisfactionOption.getSatisfaction() + "”已经登记满意度调查表,不允许删除。"); + } + + } + + @Override + public void sortSatisfactionOption(Long id, String orderType) { + + if(!DatabaseUtil.isPoIdValid(id)){ + throw new SystemException("id无效!"); + } + if(!StringUtils.equalsIgnoreCase(orderType, "up") + && !StringUtils.equalsIgnoreCase(orderType, "down") + && !StringUtils.equalsIgnoreCase(orderType, "top") + && !StringUtils.equalsIgnoreCase(orderType, "bottom")){ + throw new SystemException("orderType无效!"); + } + + SatisfactionOption satisfactionOption = this.get(id); + if(satisfactionOption == null){ + throw new SystemException("id无效!"); + } + + SatisfactionOption nextSatisfactionOption = getNextSatisfactionOption(satisfactionOption, orderType); + if(nextSatisfactionOption == null){ + return; + } + + if(orderType.equalsIgnoreCase("up") + || orderType.equalsIgnoreCase("down")){ + int tempSequence = satisfactionOption.getSequenceNum(); + satisfactionOption.setSequenceNum(nextSatisfactionOption.getSequenceNum()); + nextSatisfactionOption.setSequenceNum(tempSequence); + + objectDao.saveOrUpdate(nextSatisfactionOption); + objectDao.saveOrUpdate(satisfactionOption); + }else if(orderType.equalsIgnoreCase("top")){ + int sequence = satisfactionOption.getSequenceNum(); + int topSeqeunce = nextSatisfactionOption.getSequenceNum(); + StringBuffer sql = new StringBuffer(); + sql.append("update "); + sql.append(SatisfactionOption.class.getSimpleName()); + sql.append(" set sequenceNum = sequenceNum + 1 where sequenceNum < "); + sql.append(sequence); + objectDao.excuteSQL(sql.toString()); + satisfactionOption.setSequenceNum(topSeqeunce); + objectDao.saveOrUpdate(satisfactionOption); + }else if(orderType.equalsIgnoreCase("bottom")){ + int sequence = satisfactionOption.getSequenceNum(); + int bottomSeqeunce = nextSatisfactionOption.getSequenceNum(); + StringBuffer sql = new StringBuffer(); + sql.append("update "); + sql.append(SatisfactionOption.class.getSimpleName()); + sql.append(" set sequenceNum = sequenceNum - 1 where sequenceNum > "); + sql.append(sequence); + objectDao.excuteSQL(sql.toString()); + satisfactionOption.setSequenceNum(bottomSeqeunce); + objectDao.saveOrUpdate(satisfactionOption); + } + } + + @SuppressWarnings("unchecked") + private SatisfactionOption getNextSatisfactionOption(SatisfactionOption satisfactionOption, String orderType) { + if (satisfactionOption == null || !DatabaseUtil.isPoIdValid(satisfactionOption.getId())) { + return null; + } + + if (!(orderType.equalsIgnoreCase("up") + || orderType.equalsIgnoreCase("down") + || orderType.equalsIgnoreCase("top") + || orderType.equalsIgnoreCase("bottom"))) { + return null; + } + + String sql = "Where 1=1 "; + + String orderField = " sequenceNum DESC"; + if (orderType.equalsIgnoreCase("up")){ + sql += "and (po.sequenceNum < " + + satisfactionOption.getSequenceNum() + ")"; + } else if (orderType.equalsIgnoreCase("down")){ + sql += "and (po.sequenceNum > " + + satisfactionOption.getSequenceNum() + ")"; + orderField = " sequenceNum asc"; + } else if (orderType.equalsIgnoreCase("top")){ + sql += " and po.sequenceNum = (select min(sequenceNum) from " + SatisfactionOption.class.getSimpleName() + ")"; + } else if (orderType.equalsIgnoreCase("bottom")){ + sql += " and po.sequenceNum = (select max(sequenceNum) from " + SatisfactionOption.class.getSimpleName() + ")"; + } + List list = objectDao.findBySql(SatisfactionOption.class.getSimpleName(), sql, 0, 1, orderField); + + if (list == null || list.size() == 0) { + return null; + } + return list.get(0); + } + + @Override + public void disableSatisfactionOption(Long id) { + if(!DatabaseUtil.isPoIdValid(id)){ + throw new RuntimeException("id无效"); + } + SatisfactionOption satisfactionOption = this.get(id); + if(satisfactionOption == null){ + throw new RuntimeException("id无效"); + } + //存在正在进行中的调查问卷时,不允许进行新增选项、修改选项属性、停用或启用选项操作、删除选项操作 + existStartSatisfactionSurveyTemplate(); + satisfactionOption.setStatus(SatisfactionOption.STATUS_DISABLED); + this.save(satisfactionOption); + } + + @Override + public void enableSatisfactionOption(Long id) { + if(!DatabaseUtil.isPoIdValid(id)){ + throw new RuntimeException("id无效"); + } + SatisfactionOption satisfactionOption = this.get(id); + if(satisfactionOption == null){ + throw new RuntimeException("id无效"); + } + //存在正在进行中的调查问卷时,不允许进行新增选项、修改选项属性、停用或启用选项操作、删除选项操作 + existStartSatisfactionSurveyTemplate(); + satisfactionOption.setStatus(SatisfactionOption.STATUS_ENSABLED); + this.save(satisfactionOption); + } + + @SuppressWarnings("unchecked") + @Override + public List loadSatisfactionOption(SatisfactionOptionVo satisfactionOption, PageEntity page, + String searchKeyWord, String searchColumns) { + StringBuffer hql = new StringBuffer(); + hql.append(" where 1=1 "); + if(satisfactionOption != null){ + if(DatabaseUtil.isPoIdValid(satisfactionOption.getId())){ + hql.append(" and po.id = " + satisfactionOption.getId()); + }else{ + if(StringUtils.isNotBlank(satisfactionOption.getSatisfaction())){ + hql.append(" and po.satisfaction like '%"); + hql.append(satisfactionOption.getSatisfaction()); + hql.append("%' "); + } + if(StringUtils.isNotBlank(satisfactionOption.getReasonNotNull())){ + hql.append(" and po.reasonNotNull like '%"); + hql.append(satisfactionOption.getReasonNotNull()); + hql.append("%' "); + } + if(StringUtils.isNotBlank(satisfactionOption.getRecordReason())){ + hql.append(" and po.recordReason like '%"); + hql.append(satisfactionOption.getRecordReason()); + hql.append("%' "); + } + if(satisfactionOption.getStatus() != null){ + hql.append(" and po.status = "); + hql.append(satisfactionOption.getStatus()); + hql.append(" "); + } + if(satisfactionOption.getWeight() != null){ + hql.append(" and po.weight = "); + hql.append(satisfactionOption.getWeight()); + hql.append(" "); + } + } + } + hql.append(buildFilterSql(searchKeyWord, searchColumns)); + int count = objectDao.countObjectBySql(SatisfactionOption.class.getSimpleName(), hql.toString()); + if(count == 0){ + return null; + } + int firstIndex = 0; + int maxResults = 0; + if(page != null){ + firstIndex = page.getStart(); + maxResults = page.getLimit(); + } + page.setCount(count); + return objectDao.findBySql(SatisfactionOption.class.getSimpleName(), hql.toString(), firstIndex, maxResults, "sequenceNum"); + } + + /** + * 列过滤条件的sql + * @param searchKeyWord + * @param searchColumns + * @return + */ + private String buildFilterSql(String searchKeyWord, String searchColumns) { + if(StringUtils.isBlank(searchKeyWord) || StringUtils.isBlank(searchColumns)){ + return ""; + } + List searchSqlList = new ArrayList(); + String searchSql = ""; + if(StringUtils.isNotBlank(searchKeyWord)){ + if(StringUtils.isNotBlank(searchColumns)){ + Collection columnList = StringTools.toCollectionIgnoreNullAndBlank(searchColumns, ";"); + for (String column : columnList) { + if(StringUtils.equals(column, "satisfaction") + || StringUtils.equals(column, "reasonNotNull") + || StringUtils.equals(column, "recordReason")){ + String stringSql = " po." + column + " like '%" + searchKeyWord + "%' "; + searchSqlList.add(stringSql); + }else if(StringUtils.equals(column, "status") + || StringUtils.equals(column, "weight")){ + String numberSql = "po." + column + " = " + searchKeyWord + " "; + searchSqlList.add(numberSql); + } + } + } + } + if(CollectionUtils.isNotEmpty(searchSqlList)){ + searchSql = " and ( " + StringTools.join(searchSqlList, " or ") + ") "; + } + return searchSql; + } + + + @SuppressWarnings("unchecked") + @Override + public List getAllEnableSatisfactionOption() { + StringBuffer sql = new StringBuffer(); + sql.append(" where po.status = "); + sql.append(SatisfactionOption.STATUS_ENSABLED); + return objectDao.findBySql(SatisfactionOption.class.getSimpleName(), sql.toString(), "sequenceNum"); + } + + +} Index: ssts-satisfactionsurvey/src/main/java/com/forgon/disinfectsystem/satisfactionsurvey/vo/SatisfactionOptionVo.java =================================================================== diff -u --- ssts-satisfactionsurvey/src/main/java/com/forgon/disinfectsystem/satisfactionsurvey/vo/SatisfactionOptionVo.java (revision 0) +++ ssts-satisfactionsurvey/src/main/java/com/forgon/disinfectsystem/satisfactionsurvey/vo/SatisfactionOptionVo.java (revision 39053) @@ -0,0 +1,97 @@ +package com.forgon.disinfectsystem.satisfactionsurvey.vo; + +/** + * 满意度选项VO + */ +public class SatisfactionOptionVo { + + private Long id; + + /** + * 满意度选项名称,必填项,最多不可以超过20个中文字符长度,唯一不重复 + */ + private String satisfaction; + + /** + * 顺序号 + */ + private Integer sequenceNum; + + /** + * 是否启用,必填项,1表示启用,0表示停用,默认值为1; + */ + private Integer status; + + /** + * 是否填写原因,必填项,选项为“是”、“否”,默认值为“否” + */ + private String recordReason; + + /** + * 原因是否必填,必填项,选项为“是”、“否”,默认值为“否” + */ + private String reasonNotNull; + + /** + * 权重分值,必填项 + */ + private Integer weight; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getSatisfaction() { + return satisfaction; + } + + public void setSatisfaction(String satisfaction) { + this.satisfaction = satisfaction; + } + + public Integer getSequenceNum() { + return sequenceNum; + } + + public void setSequenceNum(Integer sequenceNum) { + this.sequenceNum = sequenceNum; + } + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + + public String getRecordReason() { + return recordReason; + } + + public void setRecordReason(String recordReason) { + this.recordReason = recordReason; + } + + public String getReasonNotNull() { + return reasonNotNull; + } + + public void setReasonNotNull(String reasonNotNull) { + this.reasonNotNull = reasonNotNull; + } + + public Integer getWeight() { + return weight; + } + + public void setWeight(Integer weight) { + this.weight = weight; + } + + +} Index: ssts-satisfactionsurvey/src/main/java/com/forgon/disinfectsystem/satisfactionsurvey/service/SatisfactionSurveyTemplateManagerImpl.java =================================================================== diff -u -r38338 -r39053 --- ssts-satisfactionsurvey/src/main/java/com/forgon/disinfectsystem/satisfactionsurvey/service/SatisfactionSurveyTemplateManagerImpl.java (.../SatisfactionSurveyTemplateManagerImpl.java) (revision 38338) +++ ssts-satisfactionsurvey/src/main/java/com/forgon/disinfectsystem/satisfactionsurvey/service/SatisfactionSurveyTemplateManagerImpl.java (.../SatisfactionSurveyTemplateManagerImpl.java) (revision 39053) @@ -16,26 +16,29 @@ import org.springframework.transaction.annotation.Transactional; import com.forgon.Constants; -import com.forgon.databaseadapter.service.DateQueryAdapter; import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.model.OrgUnit; import com.forgon.directory.service.DirectoryHelper; import com.forgon.directory.vo.LoginUserData; import com.forgon.disinfectsystem.customform.formdefinition.service.FormDefinitionManager; import com.forgon.disinfectsystem.entity.customform.formdefinition.FormDefinition; import com.forgon.disinfectsystem.entity.satisfactionsurvey.Satisfaction; +import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionOption; +import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionOptionInstance; import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionSurveyTable; import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionSurveyTableItem; import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionSurveyTemplate; import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionSurveyTemplateItem; +import com.forgon.exception.SystemException; import com.forgon.security.acls.AclFieldsObject; import com.forgon.security.model.Role; import com.forgon.security.model.User; import com.forgon.security.service.AclTools; import com.forgon.security.service.OperationManager; -import com.forgon.tools.date.DateTools; +import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.BasePoManagerImpl; import com.forgon.tools.string.StringTools; +import com.forgon.tools.util.ConfigUtils; import com.forgon.tools.util.SqlUtils; /** @@ -50,21 +53,17 @@ SatisfactionSurveyTemplateManager { private OperationManager operationManager; - private DateQueryAdapter dateQueryAdapter; private DirectoryHelper directoryHelper; private FormDefinitionManager formDefinitionManager; private SatisfactionSurveyTableManager satisfactionSurveyTableManager; + private SatisfactionOptionManager satisfactionOptionManager; protected Logger logger = Logger.getLogger(this.getClass()); public void setOperationManager(OperationManager operationManager) { this.operationManager = operationManager; } - public void setDateQueryAdapter(DateQueryAdapter dateQueryAdapter) { - this.dateQueryAdapter = dateQueryAdapter; - } - public void setDirectoryHelper(DirectoryHelper directoryHelper) { this.directoryHelper = directoryHelper; } @@ -77,6 +76,10 @@ this.satisfactionSurveyTableManager = satisfactionSurveyTableManager; } + public void setSatisfactionOptionManager(SatisfactionOptionManager satisfactionOptionManager) { + this.satisfactionOptionManager = satisfactionOptionManager; + } + @Transactional(readOnly = false, propagation = Propagation.REQUIRED) public void saveOrUpdate( SatisfactionSurveyTemplate satisfactionSurveyTemplate) { @@ -153,10 +156,87 @@ } persistentSatisfactionSurveyTemplate.setItemList(newList); } + //记录保存满意度调查表定义时,系统的满意度选项 + saveSatisfactionOptionInstance(persistentSatisfactionSurveyTemplate); saveOrUpdate(persistentSatisfactionSurveyTemplate); } /** + * 已经结束的调查问卷,该调查问卷中的满意度选项的名称、权重得分和个数,在查看相应的调查问卷记录时,都不会随着后续的改动而变更; + * 因此需要冗余记录保存满意度调查表定义时,系统的满意度选项 + * @param persistentSatisfactionSurveyTemplate + */ + private void saveSatisfactionOptionInstance(SatisfactionSurveyTemplate persistentSatisfactionSurveyTemplate) { + int satisfactionSurveyMode = ConfigUtils.getSystemSetConfigByNameInt("satisfactionSurveyMode", 0); + if(satisfactionSurveyMode == 0){ + return; + } + if(!DatabaseUtil.isPoIdValid(persistentSatisfactionSurveyTemplate.getId())){ + List satisfactionOptionList = satisfactionOptionManager.getAllEnableSatisfactionOption(); + if(CollectionUtils.isNotEmpty(satisfactionOptionList)){ + List satisfactionOptionInstanceList = new ArrayList(); + for (SatisfactionOption satisfactionOption : satisfactionOptionList) { + if(satisfactionOption.getStatus() == SatisfactionOption.STATUS_DISABLED){ + //停用的满意度选项不需要记录 + continue; + } + SatisfactionOptionInstance satisfactionOptionInstance = new SatisfactionOptionInstance(); + satisfactionOptionInstance.setReasonNotNull(satisfactionOption.getReasonNotNull()); + satisfactionOptionInstance.setRecordReason(satisfactionOption.getRecordReason()); + satisfactionOptionInstance.setSatisfaction(satisfactionOption.getSatisfaction()); + satisfactionOptionInstance.setSatisfactionOption(satisfactionOption); + satisfactionOptionInstance.setSequenceNum(satisfactionOption.getSequenceNum()); + satisfactionOptionInstance.setWeight(satisfactionOption.getWeight()); + objectDao.saveOrUpdate(satisfactionOptionInstance); + satisfactionOptionInstanceList.add(satisfactionOptionInstance); + } + persistentSatisfactionSurveyTemplate.setSatisfactionOptionInstances(satisfactionOptionInstanceList); + } + } + Map satisfactionOptionInstanceMap = getSatisfactionOptionInstanceMap(persistentSatisfactionSurveyTemplate); + List itemList = persistentSatisfactionSurveyTemplate.getItemList(); + for (SatisfactionSurveyTemplateItem item : itemList) { + SatisfactionOptionInstance satisfactionOptionInstance = item.getDefaultSatisfactionOptionInstance(); + if(satisfactionOptionInstance == null){ + continue; + } + SatisfactionOption satisfactionOption = satisfactionOptionInstance.getSatisfactionOption(); + if(satisfactionOption == null || !DatabaseUtil.isPoIdValid(satisfactionOption.getId())){ + throw new SystemException("默认满意度选项不能为空!"); + } + SatisfactionOptionInstance dbSatisfactionOptionInstance = satisfactionOptionInstanceMap.get(satisfactionOption.getId()); + if(dbSatisfactionOptionInstance == null){ + throw new SystemException("默认满意度选项不能为空!"); + } + item.setDefaultSatisfactionOptionInstance(dbSatisfactionOptionInstance); + } + } + + /** + * 查询满意度调查定义的满意度选项实例map + * @param persistentSatisfactionSurveyTemplate + * @return + */ + private Map getSatisfactionOptionInstanceMap(SatisfactionSurveyTemplate persistentSatisfactionSurveyTemplate) { + Map satisfactionOptionInstanceMap = new HashMap(); + if(persistentSatisfactionSurveyTemplate == null){ + return satisfactionOptionInstanceMap; + } + List satisfactionOptionInstances = persistentSatisfactionSurveyTemplate.getSatisfactionOptionInstances(); + if(CollectionUtils.isEmpty(satisfactionOptionInstances)){ + return satisfactionOptionInstanceMap; + } + for (SatisfactionOptionInstance satisfactionOptionInstance : satisfactionOptionInstances) { + SatisfactionOption satisfactionOption = satisfactionOptionInstance.getSatisfactionOption(); + if(satisfactionOption == null){ + continue; + } + satisfactionOptionInstanceMap.put(satisfactionOption.getId(), satisfactionOptionInstance); + } + return satisfactionOptionInstanceMap; + } + + /** * 获取需要提醒满意度表定义信息 * * @return