package jp.agentec.sinaburocast.action.admin.enquete; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.net.URLEncoder; import java.util.HashMap; import java.util.List; import javax.servlet.http.HttpServletResponse; import jp.agentec.sinaburocast.action.AbstractAction; import jp.agentec.sinaburocast.action.admin.member.MemberSearchAction; import jp.agentec.sinaburocast.common.SinaburoConstant; import jp.agentec.sinaburocast.common.util.EncryptUtil; import jp.agentec.sinaburocast.common.util.PropertyUtil; import jp.agentec.sinaburocast.common.util.SinaburoUtil; import jp.agentec.sinaburocast.entity.EnqueteSummary; import jp.agentec.sinaburocast.entity.Template; import jp.agentec.sinaburocast.form.admin.enquete.EnqueteResultForm; import jp.agentec.sinaburocast.helper.KeyHelper; import jp.agentec.sinaburocast.service.EnqueteService; import jp.agentec.sinaburocast.service.EnqueteSummaryService; import jp.agentec.sinaburocast.service.ReplyService; import jp.agentec.sinaburocast.service.TemplateService; import org.apache.log4j.Logger; import org.seasar.framework.beans.util.BeanMap; import org.seasar.struts.annotation.ActionForm; import org.seasar.struts.annotation.Execute; /** * アンケート結果 * * @author choi-c * */ public class EnqueteResultAction extends AbstractAction { private final Logger logger = Logger.getLogger(getClass()); @ActionForm public EnqueteResultForm enqueteResultForm; public EnqueteService enqueteService; public TemplateService templateService; public EnqueteSummaryService enqueteSummaryService; public MemberSearchAction memberSearchAction; public EnqueteSearchAction enqueteSearchAction; public KeyHelper keyHelper; private static final String CSV_MAKE_FILE_PATH = PropertyUtil.getProperty(SinaburoConstant.filePath.CSV_MAKE_FILE_PATH); /** * 初期表示「アンケート集計結果画面」 * @throws Exception * @throws UnsupportedEncodingException */ @Execute(validator = false,reset="resetIndex") public String index() throws UnsupportedEncodingException, Exception { /**アンケート結果設定*/ setEnqueteResult(); return "/admin/enquete/enqueteResult.html"; } /** * アンケート集計結果ファイル一覧画面 */ @Execute(validator = false,reset="pagingReset") public String resultFileList() throws IOException{ enqueteResultForm.enqueteSummaryList = enqueteSummaryService.getEnqueteSummary(enqueteResultForm); HashMap<Integer, String> enqueteIds = new HashMap<Integer, String>(); for(EnqueteSummary enqueteSumary : enqueteResultForm.enqueteSummaryList){ String encodeId = null; try { encodeId = URLEncoder.encode(keyHelper.encryptEnqueteId(enqueteSumary.enquete.enqueteId), "utf-8"); enqueteIds.put(enqueteSumary.enquete.enqueteId, encodeId); } catch (Exception e) { logger.error("Encrypt failed. enqueteId:" + enqueteSumary.enquete.enqueteId + e.toString()); } } session.setAttribute("enqueteIds", enqueteIds); //アンケート集計結果ファイル一覧画面 return "/admin/enquete/enqueteResultFileList.html"; } /** * アンケート集計結果ファイル一覧画面ページング */ @Execute(validator = false,urlPattern="resultFileListPaging/{pageNo}") public String resultFileListPaging() throws IOException{ //アンケート集計結果ファイル一覧画面 return resultFileList(); } @Execute(validator = false) public String resultFileCsvDownLoad() throws Exception { Integer eid; if(enqueteResultForm.enquete != null){ eid = enqueteResultForm.enquete.enqueteId; } else { eid = enqueteResultForm.csvEid; } EnqueteSummary enqueteSummary = enqueteSummaryService.findByEnqueteId(eid); if(enqueteSummary == null || !jp.agentec.sinaburocast.common.io.FileUtil.exists(enqueteSummary.outputCsvFilename)){ addErrorMessage("NOTEXISTS", "errors.E034"); return this.resultFileListPaging(); } jp.agentec.sinaburocast.common.io.FileUtil.fileDownload(enqueteSummary.outputCsvFilename, "Shift_JIS"); return null; } /** * アンケート結果を設定する。 */ private void setEnqueteResult(){ enqueteResultForm.enquete = enqueteService.findById(Integer.parseInt(enqueteResultForm.eid)); //ステータス取得 if (enqueteResultForm.enquete.status == SinaburoConstant.EnqueteStatusType.UNENFORCEMENT) { enqueteResultForm.enqueteStatus = "未実施"; } if (enqueteResultForm.enquete.status == SinaburoConstant.EnqueteStatusType.ENFORCEMENT) { enqueteResultForm.enqueteStatus = "実施中"; } if (enqueteResultForm.enquete.status == SinaburoConstant.EnqueteStatusType.COMPLETE) { enqueteResultForm.enqueteStatus = "完了"; } //アンケート区分取得 Template template = templateService.findByenqueteType(enqueteResultForm.enquete.enqueteType); enqueteResultForm.templateName = template.templateName; //回答件数取得 BigDecimal resultCnt = new BigDecimal(0); if(SinaburoUtil.contain(enqueteResultForm.enquete.enqueteType, SinaburoConstant.EnqueteType.PUBLIC_COMMENT,SinaburoConstant.EnqueteType.RECRUITMENT,SinaburoConstant.EnqueteType.WEB_ENQUETE)){ resultCnt=resultCnt.add(new BigDecimal(replyService.getAnswerCount(enqueteResultForm.enquete.enqueteId))); }else{ List<BeanMap> beanList = enqueteService.getEnqueteAnswerAgeBySql(enqueteResultForm.eid); for (BeanMap beanMap : beanList) { BigDecimal temCnt = new BigDecimal(((Long)beanMap.get("cnt")).longValue()); resultCnt = resultCnt.add(temCnt); } } enqueteResultForm.answerCount = resultCnt.toString(); } public ReplyService replyService; @Execute(validator = false) public String delete() throws IOException{ EnqueteSummary enqueteSummary = enqueteSummaryService.findById(Integer.parseInt(enqueteResultForm.enqueteSummaryId)); jp.agentec.sinaburocast.common.io.FileUtil.delete(enqueteSummary.outputCsvFilename == null ? "" :enqueteSummary.outputCsvFilename); jp.agentec.sinaburocast.common.io.FileUtil.delete(enqueteSummary.outputHtmlFilename== null ? "" :enqueteSummary.outputHtmlFilename); jp.agentec.sinaburocast.common.io.FileUtil.delete(enqueteSummary.outputMbHtmlFilename== null ? "":enqueteSummary.outputMbHtmlFilename); jp.agentec.sinaburocast.common.io.FileUtil.delete(enqueteSummary.outputSpHtmlFilename== null ? "":enqueteSummary.outputSpHtmlFilename); enqueteSummaryService.delete(enqueteSummary); return resultFileList(); } @Execute(validator = false,removeActionForm=true) public String backToEnqueteSearch() { session.removeAttribute("admin_enquete_enqueteResultForm"); return enqueteSearchAction.back(); } }