SurveyAnswerManagerImpl.java 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889
  1. package com.key.dwsurvey.service.impl;
  2. import java.io.File;
  3. import java.text.SimpleDateFormat;
  4. import java.util.*;
  5. import com.key.common.QuType;
  6. import com.key.common.utils.web.Struts2Utils;
  7. import com.key.dwsurvey.dao.SurveyAnswerDao;
  8. import com.key.dwsurvey.entity.*;
  9. import com.key.dwsurvey.service.*;
  10. import org.hibernate.criterion.Criterion;
  11. import org.hibernate.criterion.Restrictions;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.stereotype.Service;
  14. import org.springframework.transaction.annotation.Transactional;
  15. import com.key.common.base.entity.User;
  16. import com.key.common.plugs.page.Page;
  17. import com.key.common.plugs.page.PropertyFilter;
  18. import com.key.common.service.BaseServiceImpl;
  19. import com.key.common.utils.excel.XLSExportUtil;
  20. import com.key.common.utils.parsehtml.HtmlUtil;
  21. import org.springframework.web.util.WebUtils;
  22. import javax.servlet.http.HttpServletRequest;
  23. /**
  24. * 问卷回答记录
  25. * @author keyuan(keyuan258@gmail.com)
  26. *
  27. * https://github.com/wkeyuan/DWSurvey
  28. * http://dwsurvey.net
  29. */
  30. @Service
  31. public class SurveyAnswerManagerImpl extends
  32. BaseServiceImpl<SurveyAnswer, String> implements SurveyAnswerManager {
  33. @Autowired
  34. private SurveyAnswerDao surveyAnswerDao;
  35. @Autowired
  36. private QuestionManager questionManager;
  37. @Autowired
  38. private AnYesnoManager anYesnoManager;
  39. @Autowired
  40. private AnRadioManager anRadioManager;
  41. @Autowired
  42. private AnFillblankManager anFillblankManager;
  43. @Autowired
  44. private AnEnumquManager anEnumquManager;
  45. @Autowired
  46. private AnDFillblankManager anDFillblankManager;
  47. @Autowired
  48. private AnCheckboxManager anCheckboxManager;
  49. @Autowired
  50. private AnAnswerManager anAnswerManager;
  51. @Autowired
  52. private AnChenRadioManager anChenRadioManager;
  53. @Autowired
  54. private AnChenCheckboxManager anChenCheckboxManager;
  55. @Autowired
  56. private AnChenFbkManager anChenFbkManager;
  57. @Autowired
  58. private AnCompChenRadioManager anCompChenRadioManager;
  59. @Autowired
  60. private AnChenScoreManager anChenScoreManager;
  61. @Autowired
  62. private AnScoreManager anScoreManager;
  63. @Autowired
  64. private SurveyDirectoryManager directoryManager;
  65. @Autowired
  66. private AnOrderManager anOrderManager;
  67. @Override
  68. public void setBaseDao() {
  69. this.baseDao = surveyAnswerDao;
  70. }
  71. @Override
  72. public void saveAnswer(SurveyAnswer surveyAnswer,
  73. Map<String, Map<String, Object>> quMaps) {
  74. surveyAnswerDao.saveAnswer(surveyAnswer, quMaps);
  75. }
  76. @Override
  77. public List<Question> findAnswerDetail(SurveyAnswer answer) {
  78. String surveyId = answer.getSurveyId();
  79. String surveyAnswerId = answer.getId();
  80. List<Question> questions = questionManager.findDetails(surveyId, "2");
  81. for (Question question : questions) {
  82. getquestionAnswer(surveyAnswerId, question);
  83. }
  84. return questions;
  85. }
  86. /**
  87. * 取问卷值方式
  88. *
  89. * @param surveyAnswerId
  90. * @param question
  91. * @return
  92. */
  93. private int getquestionAnswer(String surveyAnswerId, Question question) {
  94. int score = 0;
  95. String quId = question.getId();
  96. // 查询每一题的答案,如果是主观题,则判断是否答对
  97. QuType quType = question.getQuType();
  98. //重置导出
  99. question.setAnAnswer(new AnAnswer());
  100. question.setAnCheckboxs(new ArrayList<AnCheckbox>());
  101. question.setAnDFillblanks(new ArrayList<AnDFillblank>());
  102. question.setAnEnumqus(new ArrayList<AnEnumqu>());
  103. question.setAnFillblank(new AnFillblank());
  104. question.setAnRadio(new AnRadio());
  105. question.setAnYesno(new AnYesno());
  106. question.setAnScores(new ArrayList<AnScore>());
  107. question.setAnChenRadios(new ArrayList<AnChenRadio>());
  108. question.setAnChenCheckboxs(new ArrayList<AnChenCheckbox>());
  109. question.setAnChenFbks(new ArrayList<AnChenFbk>());
  110. question.setAnCompChenRadios(new ArrayList<AnCompChenRadio>());
  111. question.setAnChenScores(new ArrayList<AnChenScore>());
  112. question.setAnOrders(new ArrayList<AnOrder>());
  113. if (quType == QuType.YESNO) {// 是非题答案
  114. AnYesno anYesno = anYesnoManager.findAnswer(surveyAnswerId, quId);
  115. if (anYesno != null) {
  116. question.setAnYesno(anYesno);
  117. }
  118. } else if (quType == QuType.RADIO || quType == QuType.COMPRADIO) {// 单选题答案
  119. // 复合
  120. AnRadio anRadio = anRadioManager.findAnswer(surveyAnswerId, quId);
  121. if (anRadio != null) {
  122. question.setAnRadio(anRadio);
  123. }
  124. } else if (quType == QuType.CHECKBOX || quType == QuType.COMPCHECKBOX) {// 多选题答案
  125. // 复合
  126. List<AnCheckbox> anCheckboxs = anCheckboxManager.findAnswer(
  127. surveyAnswerId, quId);
  128. if (anCheckboxs != null) {
  129. question.setAnCheckboxs(anCheckboxs);
  130. }
  131. } else if (quType == QuType.FILLBLANK) {// 单项填空题答案
  132. AnFillblank anFillblank = anFillblankManager.findAnswer(
  133. surveyAnswerId, quId);
  134. if (anFillblank != null) {
  135. question.setAnFillblank(anFillblank);
  136. }
  137. } else if (quType == QuType.MULTIFILLBLANK) {// 多项填空题答案
  138. List<AnDFillblank> anDFillblanks = anDFillblankManager.findAnswer(
  139. surveyAnswerId, quId);
  140. // System.out.println("anDFillblank.getAnswer():"+anDFillblank.getAnswer());
  141. if (anDFillblanks != null) {
  142. question.setAnDFillblanks(anDFillblanks);
  143. }
  144. } else if (quType == QuType.ANSWER) {// 问答题答案
  145. AnAnswer anAnswer = anAnswerManager
  146. .findAnswer(surveyAnswerId, quId);
  147. if (anAnswer != null) {
  148. question.setAnAnswer(anAnswer);
  149. }
  150. } else if (quType == QuType.BIGQU) {// 大题答案
  151. // List<Question> childQuestions=question.getQuestions();
  152. // for (Question childQuestion : childQuestions) {
  153. // score=getquestionAnswer(surveyAnswerId, childQuestion);
  154. // }
  155. } else if (quType == QuType.ENUMQU) {
  156. List<AnEnumqu> anEnumqus = anEnumquManager.findAnswer(
  157. surveyAnswerId, quId);
  158. if (anEnumqus != null) {
  159. question.setAnEnumqus(anEnumqus);
  160. }
  161. } else if (quType == QuType.SCORE) {// 评分题
  162. List<AnScore> anScores = anScoreManager.findAnswer(surveyAnswerId,
  163. quId);
  164. if (anScores != null) {
  165. question.setAnScores(anScores);
  166. }
  167. } else if (quType == QuType.CHENRADIO) {// 矩阵单选题
  168. List<AnChenRadio> anChenRadios = anChenRadioManager.findAnswer(
  169. surveyAnswerId, quId);
  170. if (anChenRadios != null) {
  171. question.setAnChenRadios(anChenRadios);
  172. }
  173. } else if (quType == QuType.CHENCHECKBOX) {// 矩阵多选题
  174. List<AnChenCheckbox> anChenCheckboxs = anChenCheckboxManager
  175. .findAnswer(surveyAnswerId, quId);
  176. if (anChenCheckboxs != null) {
  177. question.setAnChenCheckboxs(anChenCheckboxs);
  178. }
  179. } else if (quType == QuType.CHENFBK) {// 矩阵填空题
  180. List<AnChenFbk> anChenFbks = anChenFbkManager.findAnswer(
  181. surveyAnswerId, quId);
  182. if (anChenFbks != null) {
  183. question.setAnChenFbks(anChenFbks);
  184. }
  185. } else if (quType == QuType.COMPCHENRADIO) {// 复合矩阵单选题
  186. List<AnCompChenRadio> anCompChenRadios = anCompChenRadioManager
  187. .findAnswer(surveyAnswerId, quId);
  188. if (anCompChenRadios != null) {
  189. question.setAnCompChenRadios(anCompChenRadios);
  190. }
  191. } else if(quType == QuType.ORDERQU){
  192. List<AnOrder> anOrders = anOrderManager.findAnswer(surveyAnswerId,quId);
  193. if(anOrders!=null){
  194. question.setAnOrders(anOrders);
  195. }
  196. }
  197. return score;
  198. }
  199. @Override
  200. public SurveyAnswer getTimeInByIp(SurveyDetail surveyDetail, String ip) {
  201. String surveyId = surveyDetail.getDirId();
  202. Criterion eqSurveyId = Restrictions.eq("surveyId", surveyId);
  203. Criterion eqIp = Restrictions.eq("ipAddr", ip);
  204. int minute = surveyDetail.getEffectiveTime();
  205. Date curdate = new Date();
  206. Calendar calendarDate = Calendar.getInstance();
  207. calendarDate.setTime(curdate);
  208. calendarDate.set(Calendar.MINUTE, calendarDate.get(Calendar.MINUTE)
  209. - minute);
  210. Date date = calendarDate.getTime();
  211. Criterion gtEndDate = Restrictions.gt("endAnDate", date);
  212. return surveyAnswerDao.findFirst("endAnDate", true, eqSurveyId, eqIp,
  213. gtEndDate);
  214. }
  215. @Override
  216. public Long getCountByIp(String surveyId, String ip) {
  217. String hql = "select count(*) from SurveyAnswer x where x.surveyId=? and x.ipAddr=?";
  218. Long count = (Long) surveyAnswerDao.findUniObjs(hql, surveyId, ip);
  219. return count;
  220. }
  221. @Override
  222. public List<SurveyAnswer> answersByIp(String surveyId, String ip) {
  223. Criterion criterionSurveyId = Restrictions.eq("surveyId", surveyId);
  224. Criterion criterionIp = Restrictions.eq("ipAddr", ip);
  225. List<SurveyAnswer> answers = surveyAnswerDao.find(criterionSurveyId,
  226. criterionIp);
  227. return answers;
  228. }
  229. @Override
  230. public String exportXLS(String surveyId, String savePath) {
  231. String basepath = surveyId + "";
  232. String urlPath = "/file/" + basepath + "/";// 下载所用的地址
  233. String path = urlPath.replace("/", File.separator);// 文件系统路径
  234. // File.separator +
  235. // "file" +
  236. // File.separator+basepath
  237. // + File.separator;
  238. savePath = savePath + path;
  239. File file = new File(savePath);
  240. if (!file.exists())
  241. file.mkdirs();
  242. SurveyDirectory surveyDirectory = directoryManager.getSurvey(surveyId);
  243. String fileName = surveyId + "_exportSurvey.xls";
  244. XLSExportUtil exportUtil = new XLSExportUtil(fileName, savePath);
  245. Criterion cri1 = Restrictions.eq("surveyId",surveyId);
  246. Page<SurveyAnswer> page = new Page<SurveyAnswer>();
  247. page.setPageSize(5000);
  248. try {
  249. page = findPage(page,cri1);
  250. int totalPage = page.getTotalPage();
  251. List<SurveyAnswer> answers = page.getResult();
  252. List<Question> questions = questionManager.findDetails(surveyId,"2");
  253. exportXLSTitle(exportUtil, questions);
  254. int answerListSize = answers.size();
  255. for (int j = 0; j < answerListSize; j++) {
  256. SurveyAnswer surveyAnswer = answers.get(j);
  257. String surveyAnswerId = surveyAnswer.getId();
  258. exportUtil.createRow(j+1);
  259. exportXLSRow(exportUtil, surveyAnswerId, questions, surveyAnswer);
  260. System.out.println(j+1+"/"+answerListSize);
  261. }
  262. exportUtil.exportXLS();
  263. } catch (Exception e) {
  264. e.printStackTrace();
  265. }
  266. return urlPath + fileName;
  267. }
  268. private void exportXLSRow(XLSExportUtil exportUtil,String surveyAnswerId, List<Question> questions,SurveyAnswer surveyAnswer) {
  269. int cellIndex = 0;
  270. for (Question question : questions) {
  271. QuType quType = question.getQuType();
  272. if(quType==QuType.PAGETAG || quType==QuType.PARAGRAPH){
  273. continue;
  274. }
  275. getquestionAnswer(surveyAnswerId, question);
  276. String quName = question.getQuName();
  277. String titleName = quType.getCnName();
  278. if (quType == QuType.YESNO) {// 是非题
  279. String yesnoAnswer = question.getAnYesno().getYesnoAnswer();
  280. if("1".equals(yesnoAnswer)){
  281. yesnoAnswer=question.getYesnoOption().getTrueValue();
  282. }else if("0".equals(yesnoAnswer)){
  283. yesnoAnswer=question.getYesnoOption().getFalseValue();
  284. }else{
  285. yesnoAnswer="";
  286. }
  287. exportUtil.setCell(cellIndex++, yesnoAnswer);
  288. } else if (quType == QuType.RADIO) {// 单选题
  289. String quItemId = question.getAnRadio().getQuItemId();
  290. List<QuRadio> quRadios=question.getQuRadios();
  291. String answerOptionName="";
  292. String answerOtherText="";
  293. boolean isNote = false;
  294. for (QuRadio quRadio : quRadios) {
  295. if (quRadio.getIsNote() == 1) {
  296. isNote = true;
  297. break;
  298. }
  299. }
  300. for (QuRadio quRadio : quRadios) {
  301. String quRadioId=quRadio.getId();
  302. if(quRadioId.equals(quItemId)){
  303. answerOptionName=quRadio.getOptionName();
  304. if(quRadio.getIsNote()==1){
  305. answerOtherText = question.getAnRadio().getOtherText();
  306. }
  307. break;
  308. }
  309. }
  310. answerOptionName=HtmlUtil.removeTagFromText(answerOptionName);
  311. answerOptionName = answerOptionName.replace("&nbsp;"," ");
  312. exportUtil.setCell(cellIndex++, answerOptionName);
  313. // answerOptionName=HtmlUtil.removeTagFromText(answerOptionName);
  314. if(isNote) exportUtil.setCell(cellIndex++, answerOtherText);
  315. } else if (quType == QuType.CHECKBOX) {// 多选题
  316. List<AnCheckbox> anCheckboxs=question.getAnCheckboxs();
  317. List<QuCheckbox> checkboxs = question.getQuCheckboxs();
  318. for (QuCheckbox quCheckbox : checkboxs) {
  319. String quCkId=quCheckbox.getId();
  320. String answerOptionName="0";
  321. String answerOtherText="";
  322. boolean isNote = false;
  323. for (AnCheckbox anCheckbox : anCheckboxs) {
  324. String anQuItemId=anCheckbox.getQuItemId();
  325. if(quCkId.equals(anQuItemId)){
  326. answerOptionName=quCheckbox.getOptionName();
  327. answerOptionName="1";
  328. if(quCheckbox.getIsNote() == 1){
  329. answerOtherText = anCheckbox.getOtherText();
  330. isNote = true;
  331. }
  332. break;
  333. }
  334. }
  335. answerOptionName=HtmlUtil.removeTagFromText(answerOptionName);
  336. answerOptionName = answerOptionName.replace("&nbsp;"," ");
  337. exportUtil.setCell(cellIndex++, answerOptionName);
  338. // if(isNote) exportUtil.setCell(cellIndex++, answerOtherText);
  339. Integer isNote1 = quCheckbox.getIsNote();
  340. if(isNote1!=null && isNote1==1) exportUtil.setCell(cellIndex++, answerOtherText);
  341. }
  342. } else if (quType == QuType.FILLBLANK) {// 填空题
  343. AnFillblank anFillblank=question.getAnFillblank();
  344. exportUtil.setCell(cellIndex++, anFillblank.getAnswer());
  345. } else if (quType == QuType.ANSWER) {// 多行填空题
  346. AnAnswer anAnswer=question.getAnAnswer();
  347. exportUtil.setCell(cellIndex++, anAnswer.getAnswer());
  348. } else if (quType == QuType.COMPRADIO) {// 复合单选题
  349. AnRadio anRadio=question.getAnRadio();
  350. String quItemId = anRadio.getQuItemId();
  351. List<QuRadio> quRadios=question.getQuRadios();
  352. String answerOptionName="";
  353. String answerOtherText="";
  354. for (QuRadio quRadio : quRadios) {
  355. String quRadioId=quRadio.getId();
  356. if(quRadioId.equals(quItemId)){
  357. answerOptionName=quRadio.getOptionName();
  358. answerOtherText=anRadio.getOtherText();
  359. break;
  360. }
  361. }
  362. answerOptionName=HtmlUtil.removeTagFromText(answerOptionName);
  363. answerOtherText=HtmlUtil.removeTagFromText(answerOtherText);
  364. answerOptionName = answerOptionName.replace("&nbsp;"," ");
  365. exportUtil.setCell(cellIndex++, answerOptionName);
  366. exportUtil.setCell(cellIndex++, answerOtherText);
  367. } else if (quType == QuType.COMPCHECKBOX) {// 复合多选题
  368. List<AnCheckbox> anCheckboxs=question.getAnCheckboxs();
  369. List<QuCheckbox> checkboxs = question.getQuCheckboxs();
  370. for (QuCheckbox quCheckbox : checkboxs) {
  371. String quCkId=quCheckbox.getId();
  372. String answerOptionName="0";
  373. String answerOtherText="0";
  374. for (AnCheckbox anCheckbox : anCheckboxs) {
  375. String anQuItemId=anCheckbox.getQuItemId();
  376. if(quCkId.equals(anQuItemId)){
  377. answerOptionName=quCheckbox.getOptionName();
  378. answerOptionName="1";
  379. answerOtherText=anCheckbox.getOtherText();
  380. break;
  381. }
  382. }
  383. answerOptionName=HtmlUtil.removeTagFromText(answerOptionName);
  384. answerOptionName = answerOptionName.replace("&nbsp;"," ");
  385. exportUtil.setCell(cellIndex++, answerOptionName);
  386. if(1==quCheckbox.getIsNote()){
  387. answerOtherText=HtmlUtil.removeTagFromText(answerOtherText);
  388. exportUtil.setCell(cellIndex++, answerOtherText);
  389. }
  390. }
  391. } else if (quType == QuType.ENUMQU) {// 枚举题
  392. List<AnEnumqu> anEnumqus=question.getAnEnumqus();
  393. int enumNum = question.getParamInt01();
  394. for (int i = 0; i < enumNum; i++) {
  395. String answerEnum="";
  396. for (AnEnumqu anEnumqu : anEnumqus) {
  397. if(i==anEnumqu.getEnumItem()){
  398. answerEnum=anEnumqu.getAnswer();
  399. break;
  400. }
  401. }
  402. exportUtil.setCell(cellIndex++, answerEnum);
  403. }
  404. } else if (quType == QuType.MULTIFILLBLANK) {// 组合填空题
  405. List<QuMultiFillblank> quMultiFillblanks = question.getQuMultiFillblanks();
  406. List<AnDFillblank> anDFillblanks=question.getAnDFillblanks();
  407. for (QuMultiFillblank quMultiFillblank : quMultiFillblanks) {
  408. String quMultiFillbankId=quMultiFillblank.getId();
  409. String answerOptionName="";
  410. for (AnDFillblank anDFillblank : anDFillblanks) {
  411. if(quMultiFillbankId.equals(anDFillblank.getQuItemId())){
  412. answerOptionName=anDFillblank.getAnswer();
  413. break;
  414. }
  415. }
  416. answerOptionName = answerOptionName.replace("&nbsp;"," ");
  417. exportUtil.setCell(cellIndex++, answerOptionName);
  418. }
  419. } else if (quType == QuType.ORDERQU) {// 评分题
  420. List<QuOrderby> quOrderbys = question.getQuOrderbys();
  421. List<AnOrder> anOrders=question.getAnOrders();
  422. for (QuOrderby quOrderby : quOrderbys) {
  423. String quOrderbyId=quOrderby.getId();
  424. String answerOptionName="";
  425. for (AnOrder anOrder : anOrders) {
  426. if(quOrderbyId.equals(anOrder.getQuRowId())){
  427. answerOptionName=anOrder.getOrderyNum();
  428. break;
  429. }
  430. }
  431. answerOptionName = answerOptionName.replace("&nbsp;"," ");
  432. exportUtil.setCell(cellIndex++, answerOptionName);
  433. }
  434. } else if (quType == QuType.SCORE) {// 评分题
  435. List<QuScore> quScores = question.getQuScores();
  436. List<AnScore> anScores=question.getAnScores();
  437. for (QuScore quScore : quScores) {
  438. String quScoreId=quScore.getId();
  439. String answerScore="";
  440. for (AnScore anScore : anScores) {
  441. if(quScoreId.equals(anScore.getQuRowId())){
  442. answerScore=anScore.getAnswserScore();
  443. break;
  444. }
  445. }
  446. exportUtil.setCell(cellIndex++, answerScore);
  447. }
  448. } else if (quType == QuType.CHENRADIO) {// 矩阵单选题
  449. List<QuChenRow> quChenRows = question.getRows();
  450. List<QuChenColumn> quChenColumns = question.getColumns();
  451. List<AnChenRadio> anChenRadios=question.getAnChenRadios();
  452. for (QuChenRow quChenRow : quChenRows) {
  453. String quChenRowId=quChenRow.getId();
  454. String answerColOptionName="";
  455. boolean breakTag=false;
  456. for (QuChenColumn quChenColumn : quChenColumns) {
  457. String quChenColumnId=quChenColumn.getId();
  458. for (AnChenRadio anChenRadio : anChenRadios) {
  459. String anQuRowId=anChenRadio.getQuRowId();
  460. String anQuColId=anChenRadio.getQuColId();
  461. if(quChenRowId.equals(anQuRowId) && quChenColumnId.equals(anQuColId)){
  462. breakTag=true;
  463. break;
  464. }
  465. }
  466. if(breakTag){
  467. answerColOptionName=quChenColumn.getOptionName();
  468. break;
  469. }
  470. }
  471. answerColOptionName=HtmlUtil.removeTagFromText(answerColOptionName);
  472. answerColOptionName = answerColOptionName.replace("&nbsp;"," ");
  473. exportUtil.setCell(cellIndex++, answerColOptionName);
  474. }
  475. } else if (quType == QuType.CHENCHECKBOX) {
  476. List<QuChenRow> quChenRows = question.getRows();
  477. List<QuChenColumn> quChenColumns = question.getColumns();
  478. List<AnChenCheckbox> anChenCheckboxs = question.getAnChenCheckboxs();
  479. for (QuChenRow quChenRow : quChenRows) {
  480. String quChenRowId=quChenRow.getId();
  481. for (QuChenColumn quChenColumn : quChenColumns) {
  482. String quChenColumnId=quChenColumn.getId();
  483. String answerOptionName = "";
  484. for (AnChenCheckbox anChenCheckbox : anChenCheckboxs) {
  485. String anChenRowId=anChenCheckbox.getQuRowId();
  486. String anChenColumnId=anChenCheckbox.getQuColId();
  487. if(quChenRowId.equals(anChenRowId) && quChenColumnId.equals(anChenColumnId)){
  488. answerOptionName=quChenColumn.getOptionName();
  489. break;
  490. }
  491. }
  492. answerOptionName=HtmlUtil.removeTagFromText(answerOptionName);
  493. answerOptionName = answerOptionName.replace("&nbsp;"," ");
  494. exportUtil.setCell(cellIndex++, answerOptionName);
  495. }
  496. }
  497. } else if (quType == QuType.COMPCHENRADIO) {
  498. List<QuChenRow> quChenRows = question.getRows();
  499. List<QuChenColumn> quChenColumns = question.getColumns();
  500. List<QuChenOption> quChenOptions = question.getOptions();
  501. List<AnCompChenRadio> anCompChenRadios=question.getAnCompChenRadios();
  502. for (QuChenRow quChenRow : quChenRows) {
  503. // String optionName = quChenRow.getOptionName();
  504. String quChenRowId=quChenRow.getId();
  505. for (QuChenColumn quChenColumn : quChenColumns) {
  506. String answerOptionName="";
  507. String quChenColumnId=quChenColumn.getId();
  508. boolean breakTag=false;
  509. for (QuChenOption quChenOption : quChenOptions) {
  510. answerOptionName="";
  511. String quChenOptionId=quChenOption.getId();
  512. for (AnCompChenRadio anCompChenRadio : anCompChenRadios) {
  513. String anRowId=anCompChenRadio.getQuRowId();
  514. String anColumnId=anCompChenRadio.getQuColId();
  515. String anOptionId=anCompChenRadio.getQuOptionId();
  516. if(quChenRowId.equals(anRowId) && quChenColumnId.equals(anColumnId) && quChenOptionId.equals(anOptionId)){
  517. breakTag=true;
  518. break;
  519. }
  520. }
  521. if(breakTag){
  522. answerOptionName=quChenOption.getOptionName();
  523. break;
  524. }
  525. }
  526. answerOptionName=HtmlUtil.removeTagFromText(answerOptionName);
  527. answerOptionName = answerOptionName.replace("&nbsp;"," ");
  528. exportUtil.setCell(cellIndex++, answerOptionName);
  529. }
  530. }
  531. }
  532. }
  533. exportUtil.setCell(cellIndex++, surveyAnswer.getIpAddr());
  534. exportUtil.setCell(cellIndex++, surveyAnswer.getCity());
  535. exportUtil.setCell(cellIndex++, new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒").format(surveyAnswer.getEndAnDate()));
  536. }
  537. private void exportXLSTitle(XLSExportUtil exportUtil,
  538. List<Question> questions) {
  539. exportUtil.createRow(0);
  540. int cellIndex = 0;
  541. int quNum=0;
  542. for (Question question : questions) {
  543. QuType quType = question.getQuType();
  544. if(quType==QuType.PAGETAG || quType==QuType.PARAGRAPH){
  545. continue;
  546. }
  547. quNum++;
  548. // String quName = question.getQuName();
  549. String quName = question.getQuTitle();
  550. quName=HtmlUtil.removeTagFromText(quName);
  551. String titleName =quNum +"、" + quName + "[" + quType.getCnName() + "]";
  552. if (quType == QuType.YESNO) {// 是非题
  553. exportUtil.setCell(cellIndex++, titleName);
  554. } else if (quType == QuType.RADIO) {// 单选题
  555. List<QuRadio> quRadios=question.getQuRadios();
  556. boolean isNote = false;
  557. for (QuRadio quRadio : quRadios) {
  558. if(quRadio.getIsNote()==1){
  559. isNote = true;
  560. break;
  561. }
  562. }
  563. exportUtil.setCell(cellIndex++, titleName);
  564. if(isNote) exportUtil.setCell(cellIndex++, titleName + "选项说明");
  565. } else if (quType == QuType.CHECKBOX) {// 多选题
  566. List<QuCheckbox> checkboxs = question.getQuCheckboxs();
  567. for (QuCheckbox quCheckbox : checkboxs) {
  568. String optionName = quCheckbox.getOptionName();
  569. optionName=HtmlUtil.removeTagFromText(optionName);
  570. exportUtil.setCell(cellIndex++,titleName + "-" + optionName );
  571. if(quCheckbox.getIsNote()==1){
  572. exportUtil.setCell(cellIndex++, titleName+ "-" + optionName + "-选项说明");
  573. }
  574. }
  575. } else if (quType == QuType.FILLBLANK) {// 填空题
  576. exportUtil.setCell(cellIndex++, titleName);
  577. } else if (quType == QuType.ANSWER) {// 多行填空题
  578. exportUtil.setCell(cellIndex++, titleName);
  579. } else if (quType == QuType.COMPRADIO) {// 复合单选题
  580. exportUtil.setCell(cellIndex++, titleName);
  581. exportUtil.setCell(cellIndex++, titleName+"-说明" );
  582. } else if (quType == QuType.COMPCHECKBOX) {// 复合多选题
  583. List<QuCheckbox> checkboxs = question.getQuCheckboxs();
  584. for (QuCheckbox quCheckbox : checkboxs) {
  585. String optionName = quCheckbox.getOptionName();
  586. exportUtil.setCell(cellIndex++, titleName + "-"
  587. + optionName);
  588. int isNote = quCheckbox.getIsNote();
  589. if (isNote == 1) {
  590. optionName=HtmlUtil.removeTagFromText(optionName);
  591. exportUtil.setCell(cellIndex++, titleName +"-"+ optionName
  592. + "-" + "说明" );
  593. }
  594. }
  595. } else if (quType == QuType.ENUMQU) {// 枚举题
  596. int enumNum = question.getParamInt01();
  597. for (int i = 0; i < enumNum; i++) {
  598. exportUtil.setCell(cellIndex++, titleName + i + "-枚举");
  599. }
  600. } else if (quType == QuType.MULTIFILLBLANK) {// 组合填空题
  601. List<QuMultiFillblank> quMultiFillblanks = question
  602. .getQuMultiFillblanks();
  603. for (QuMultiFillblank quMultiFillblank : quMultiFillblanks) {
  604. String optionName = quMultiFillblank.getOptionName();
  605. optionName=HtmlUtil.removeTagFromText(optionName);
  606. exportUtil.setCell(cellIndex++, titleName + "-"
  607. + optionName);
  608. }
  609. } else if (quType == QuType.ORDERQU) {// 评分题
  610. List<QuOrderby> quOrderbys = question.getQuOrderbys();
  611. for (QuOrderby quOrderby : quOrderbys) {
  612. String optionName = quOrderby.getOptionName();
  613. optionName=HtmlUtil.removeTagFromText(optionName);
  614. exportUtil.setCell(cellIndex++, titleName+"_"+optionName);
  615. }
  616. } else if (quType == QuType.SCORE) {// 评分题
  617. List<QuScore> quScores = question.getQuScores();
  618. for (QuScore quScore : quScores) {
  619. String optionName = quScore.getOptionName();
  620. optionName=HtmlUtil.removeTagFromText(optionName);
  621. exportUtil.setCell(cellIndex++, titleName+"-"+optionName);
  622. }
  623. } else if (quType == QuType.CHENRADIO) {// 矩阵单选题
  624. List<QuChenRow> quChenRows = question.getRows();
  625. List<QuChenColumn> quChenColumns = question.getColumns();
  626. for (QuChenRow quChenRow : quChenRows) {
  627. String optionName = quChenRow.getOptionName();
  628. optionName=HtmlUtil.removeTagFromText(optionName);
  629. exportUtil.setCell(cellIndex++, titleName+ "-"
  630. + optionName );
  631. }
  632. } else if (quType == QuType.CHENCHECKBOX) {// 矩阵多选题
  633. List<QuChenRow> quChenRows = question.getRows();
  634. List<QuChenColumn> quChenColumns = question.getColumns();
  635. for (QuChenRow quChenRow : quChenRows) {
  636. String optionName = quChenRow.getOptionName();
  637. for (QuChenColumn quChenColumn : quChenColumns) {
  638. optionName=HtmlUtil.removeTagFromText(optionName);
  639. exportUtil.setCell(cellIndex++, titleName + "-"
  640. + optionName + "-"
  641. + quChenColumn.getOptionName() );
  642. }
  643. }
  644. } else if (quType == QuType.COMPCHENRADIO) {// 复合矩阵单选题
  645. List<QuChenRow> quChenRows = question.getRows();
  646. List<QuChenColumn> quChenColumns = question.getColumns();
  647. for (QuChenRow quChenRow : quChenRows) {
  648. String optionName = quChenRow.getOptionName();
  649. for (QuChenColumn quChenColumn : quChenColumns) {
  650. optionName=HtmlUtil.removeTagFromText(optionName);
  651. exportUtil.setCell(cellIndex++, titleName + "-"
  652. + optionName + "-"
  653. + quChenColumn.getOptionName());
  654. }
  655. }
  656. }
  657. }
  658. exportUtil.setCell(cellIndex++, "回答者IP");
  659. exportUtil.setCell(cellIndex++, "IP所在地");
  660. exportUtil.setCell(cellIndex++, "回答时间");
  661. }
  662. public void writeToXLS() {
  663. }
  664. @Override
  665. public SurveyStats surveyStatsData(SurveyStats surveyStats) {
  666. return surveyAnswerDao.surveyStatsData(surveyStats);
  667. }
  668. @Override
  669. public Page<SurveyAnswer> joinSurvey(Page<SurveyAnswer> page, User user) {
  670. if(user!=null){
  671. //查找所有参加过的问卷ID号
  672. Criterion criterion=Restrictions.eq("userId", user.getId());
  673. page.setOrderBy("endAnDate");
  674. page.setOrderDir("desc");
  675. page=findPage(page, criterion);
  676. List<SurveyAnswer> answers=page.getResult();
  677. for (SurveyAnswer surveyAnswer : answers) {
  678. surveyAnswer.setSurveyDirectory(directoryManager.get(surveyAnswer.getSurveyId()));
  679. }
  680. }
  681. return page;
  682. }
  683. /**
  684. * 取一份卷子回答的数据
  685. */
  686. public Page<SurveyAnswer> answerPage(Page<SurveyAnswer> page,String surveyId){
  687. Criterion cri1=Restrictions.eq("surveyId", surveyId);
  688. Criterion cri2=Restrictions.lt("handleState", 2);
  689. page.setOrderBy("endAnDate");
  690. page.setOrderDir("desc");
  691. page=findPage(page, cri1, cri2);
  692. return page;
  693. }
  694. @Override
  695. @Transactional
  696. public void delete(SurveyAnswer t) {
  697. if(t!=null){
  698. String belongAnswerId=t.getId();
  699. t.setHandleState(2);
  700. surveyAnswerDao.save(t);
  701. //更新当前答卷的回答记录值
  702. // 得到题列表
  703. List<Question> questions = questionManager.findDetails(t.getSurveyId(),"2");
  704. for (Question question : questions) {
  705. String quId=question.getId();
  706. QuType quType = question.getQuType();
  707. if (quType == QuType.YESNO) {// 是非题
  708. } else if (quType == QuType.RADIO) {// 单选题
  709. AnRadio anRadio=anRadioManager.findAnswer(belongAnswerId, quId);
  710. if(anRadio!=null){
  711. anRadio.setVisibility(0);
  712. //是否显示 1显示 0不显示
  713. anRadioManager.save(anRadio);
  714. }
  715. } else if (quType == QuType.CHECKBOX) {// 多选题
  716. List<AnCheckbox> anCheckboxs=anCheckboxManager.findAnswer(belongAnswerId, quId);
  717. if(anCheckboxs!=null){
  718. for (AnCheckbox anCheckbox : anCheckboxs) {
  719. anCheckbox.setVisibility(0);
  720. //是否显示 1显示 0不显示
  721. anCheckboxManager.save(anCheckbox);
  722. }
  723. }
  724. } else if (quType == QuType.FILLBLANK) {// 填空题
  725. AnFillblank anFillblank=anFillblankManager.findAnswer(belongAnswerId, quId);
  726. if(anFillblank!=null){
  727. anFillblank.setVisibility(0);
  728. //是否显示 1显示 0不显示
  729. anFillblankManager.save(anFillblank);
  730. }
  731. } else if (quType == QuType.ANSWER) {// 多行填空题
  732. AnAnswer anAnswer=anAnswerManager.findAnswer(belongAnswerId, quId);
  733. if(anAnswer!=null){
  734. anAnswer.setVisibility(0);
  735. //是否显示 1显示 0不显示
  736. anAnswerManager.save(anAnswer);
  737. }
  738. } else if (quType == QuType.COMPRADIO) {// 复合单选题
  739. } else if (quType == QuType.COMPCHECKBOX) {// 复合多选题
  740. } else if (quType == QuType.ENUMQU) {// 枚举题
  741. } else if (quType == QuType.MULTIFILLBLANK) {// 组合填空题
  742. List<AnDFillblank> anDFillblanks=anDFillblankManager.findAnswer(belongAnswerId, quId);
  743. if(anDFillblanks!=null){
  744. for (AnDFillblank anDFillblank : anDFillblanks) {
  745. anDFillblank.setVisibility(0);
  746. //是否显示 1显示 0不显示
  747. anDFillblankManager.save(anDFillblank);
  748. }
  749. }
  750. } else if (quType == QuType.SCORE) {// 评分题
  751. List<AnScore> anScores=anScoreManager.findAnswer(belongAnswerId, quId);
  752. if(anScores!=null){
  753. for (AnScore anScore : anScores) {
  754. anScore.setVisibility(0);
  755. //是否显示 1显示 0不显示
  756. anScoreManager.save(anScore);
  757. }
  758. }
  759. } else if (quType == QuType.CHENRADIO) {// 矩阵单选题
  760. List<AnChenRadio> anChenRadios=anChenRadioManager.findAnswer(belongAnswerId, quId);
  761. if(anChenRadios!=null){
  762. for (AnChenRadio anChenRadio : anChenRadios) {
  763. anChenRadio.setVisibility(0);
  764. //是否显示 1显示 0不显示
  765. anChenRadioManager.save(anChenRadio);
  766. }
  767. }
  768. } else if (quType == QuType.CHENCHECKBOX) {// 矩阵多选题
  769. List<AnChenCheckbox> anChenCheckboxs=anChenCheckboxManager.findAnswer(belongAnswerId, quId);
  770. if(anChenCheckboxs!=null){
  771. for (AnChenCheckbox anChenCheckbox : anChenCheckboxs) {
  772. anChenCheckbox.setVisibility(0);
  773. //是否显示 1显示 0不显示
  774. anChenCheckboxManager.save(anChenCheckbox);
  775. }
  776. }
  777. } else if (quType == QuType.COMPCHENRADIO) {// 复合矩阵单选题
  778. } else if (quType == QuType.CHENSCORE) {// 矩阵评分
  779. List<AnChenScore> anChenScores=anChenScoreManager.findAnswer(belongAnswerId, quId);
  780. if(anChenScores!=null){
  781. for (AnChenScore anChenScore : anChenScores) {
  782. anChenScore.setVisibility(0);
  783. //是否显示 1显示 0不显示
  784. anChenScoreManager.save(anChenScore);
  785. }
  786. }
  787. }
  788. }
  789. }
  790. super.delete(t);
  791. }
  792. @Transactional
  793. public List<SurveyDirectory> upAnCounts(List<SurveyDirectory> result) {
  794. if(result!=null){
  795. for (SurveyDirectory survey:result) {
  796. upAnCount(survey);
  797. }
  798. }
  799. return result;
  800. }
  801. @Transactional
  802. public Integer upAnCount(SurveyDirectory directory) {
  803. if(directory!=null){
  804. Long answerCount = surveyAnswerDao.countResult(directory.getId());
  805. if(answerCount!=null){
  806. directory.setAnswerNum(answerCount.intValue());
  807. directoryManager.saveByAdmin(directory);
  808. return directory.getAnswerNum();
  809. }
  810. }
  811. return 0;
  812. }
  813. @Transactional
  814. public Integer upAnCount(String directoryId) {
  815. if(directoryId!=null){
  816. SurveyDirectory surveyDirectory = directoryManager.get(directoryId);
  817. return upAnCount(surveyDirectory);
  818. }
  819. return 0;
  820. }
  821. }