/*
* Copyright 2002-2006 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.openuap.cms.survey.action.statics;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.openuap.base.util.ControllerHelper;
import org.openuap.base.util.QueryInfo;
import org.openuap.base.util.context.PageBuilder;
import org.openuap.cms.core.action.UserAwareAction;
import org.openuap.cms.survey.bean.QuestionItemResultBean;
import org.openuap.cms.survey.bean.QuestionResultBean;
import org.openuap.cms.survey.manager.QuestionManager;
import org.openuap.cms.survey.manager.SurveyManager;
import org.openuap.cms.survey.model.Question;
import org.openuap.cms.survey.model.QuestionItem;
import org.openuap.cms.survey.model.QuestionItemRecord;
import org.openuap.cms.survey.model.Survey;
import org.openuap.cms.survey.model.SurveyRecord;
import org.openuap.cms.survey.xml.SurveyXMLService;
import org.springframework.web.servlet.ModelAndView;
/**
* <p>
* 调查问卷统计控制器.
* </p>
*
* <p>
* $Id: SurveyStaticsAction.java 4026 2011-03-22 14:58:42Z orangeforjava $
* </p>
*
* @author Joseph
* @version 1.0
*/
public class SurveyStaticsAction extends UserAwareAction {
private QuestionManager questionManager;
private SurveyManager surveyManager;
private SurveyXMLService surveyXMLService;
//
private String defaultScreensPath;
private String surveyResultViewName;
private String questionDetailViewName;
private String resultViewName;
public SurveyStaticsAction() {
initDefaultViewName();
}
protected void initDefaultViewName() {
defaultScreensPath = "/plugin/cms/survey/screens/statics/";
surveyResultViewName = defaultScreensPath + "survey_result.html";
questionDetailViewName = defaultScreensPath + "question_result.html";
resultViewName = defaultScreensPath + "statics_result.html";
}
/**
* 显示调查统计结果,以整个调查方式
*/
public ModelAndView perform(HttpServletRequest request,
HttpServletResponse response, ControllerHelper helper, Map model)
throws Exception {
String sid = request.getParameter("sid");
String rid = request.getParameter("rid");
ModelAndView mv = new ModelAndView(surveyResultViewName, model);
if (sid != null && rid != null) {
Long id = new Long(sid);
Long irid = new Long(rid);
Survey survey = surveyManager.getSurveyById(id);
SurveyRecord surveyRecord = surveyManager.getSurveyRecordById(irid);
QueryInfo qi = new QueryInfo();
PageBuilder pb = new PageBuilder();
List questions = questionManager.getQuestionList(id, qi, pb);
List questionResultList = new ArrayList();
if (questions != null) {
int size = questions.size();
for (int i = 0; i < size; i++) {
Question q = (Question) questions.get(i);
// 获得统计结果
QuestionResultBean qrs = this.getQuestionResult(irid, q);
questionResultList.add(qrs);
}
}
model.put("survey", survey);
model.put("questionResultList", questionResultList);
model.put("rid", rid);
}
return mv;
}
/**
* 导出调查统计结果
* @param request
* @param response
* @param helper
* @param model
* @return
* @throws Exception
*/
public ModelAndView doExportStatics(HttpServletRequest request,
HttpServletResponse response, ControllerHelper helper, Map model)
throws Exception {
String sid = request.getParameter("sid");
String rid = request.getParameter("rid");
if (sid != null && rid != null) {
try {
Long id = new Long(sid);
Long irid = new Long(rid);
String rs = surveyXMLService.exportSurveyStatics(irid, id);
response.setCharacterEncoding("UTF-8");
response.setContentType("text/xml");
setNoCacheHeader(response);
PrintWriter writer = response.getWriter();
writer.print(rs);
writer.flush();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
/**
* 从问题中获得结果
*
* @param q
* @return
*/
private QuestionResultBean getQuestionResult(Long rid, Question q) {
QuestionResultBean questionResultBean = new QuestionResultBean();
//
questionResultBean.setQuestion(q);
int type = q.getQuestionType();
Set items = q.getQuestionItems();
int questionItemsTotalCount = 0;
List rs = new ArrayList();
if (type == 3) {
questionItemsTotalCount = surveyManager
.getQuestionAnswerTotalCount(rid, q.getQuestionId());
} else {
if (items != null) {
questionItemsTotalCount = surveyManager
.getQuestionItemsTotalCount(rid, q.getQuestionId());
Iterator itemIterator = items.iterator();
while (itemIterator.hasNext()) {
QuestionItem qi = (QuestionItem) itemIterator.next();
QuestionItemResultBean qiResult = new QuestionItemResultBean();
qiResult.setQuestionItemText(qi.getQuestionItemText());
QuestionItemRecord qiRecord = surveyManager
.getQuestionItemRecord(rid, qi.getQuestionItemId());
float votePercent = (float) Math
.round(((float) qiRecord
.getQuestionItemPolledTimes().intValue() / (float) questionItemsTotalCount) * 100F * 100F) / 100F;
qiResult.setQuestionPercent(votePercent);
qiResult.setPolledTimes(qiRecord
.getQuestionItemPolledTimes().intValue());
rs.add(qiResult);
}
}
}
questionResultBean.setQuestionItemResultList(rs);
questionResultBean.setQuestionItemsCount(questionItemsTotalCount);
return questionResultBean;
}
/**
* 显示输入问题的详情
*
* @param request
* @param response
* @param helper
* @param model
* @return
* @throws Exception
*/
public ModelAndView doShowQuestionDetail(HttpServletRequest request,
HttpServletResponse response, ControllerHelper helper, Map model)
throws Exception {
ModelAndView mv = null;
// 目前只允许系统人员查看结果
if (this.getUserSession() != null
&& (this.getUserSession().isSysUser() || this.getUserSession()
.isAdmin())) {
mv = new ModelAndView(questionDetailViewName);
// 问题id
Long questionId = helper.getLong("qid", 0L);
// 调查活动id
Long surveyRecordId = helper.getLong("rid", 0L);
if (questionId != 0 && surveyRecordId != 0) {
Question question = questionManager.getQuestionById(questionId);
QueryInfo qi = new QueryInfo();
PageBuilder pb = new PageBuilder();
List answers = questionManager.getAnswerByQuestion(questionId,
surveyRecordId, qi, pb);
model.put("answers", answers);
model.put("question", question);
model.put("pb", pb);
}
} else {
mv = new ModelAndView(resultViewName);
}
return mv;
}
public void setSurveyResultViewName(String surveyResultViewName) {
this.surveyResultViewName = surveyResultViewName;
}
public void setSurveyManager(SurveyManager surveyManager) {
this.surveyManager = surveyManager;
}
public void setQuestionManager(QuestionManager questionManager) {
this.questionManager = questionManager;
}
public void setDefaultScreensPath(String defaultScreensPath) {
this.defaultScreensPath = defaultScreensPath;
}
public void setSurveyXMLService(SurveyXMLService surveyXMLService) {
this.surveyXMLService = surveyXMLService;
}
}