|  | @@ -1,36 +1,47 @@
 | 
	
		
			
				|  |  |  package com.ym.mec.biz.service.impl;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import com.alibaba.fastjson.JSONObject;
 | 
	
		
			
				|  |  |  import com.ym.mec.auth.api.client.SysUserFeignService;
 | 
	
		
			
				|  |  |  import com.ym.mec.auth.api.entity.SysUser;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.dao.*;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dto.ExportDto;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.dto.QuestionnaireUserResultDto;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.dto.ReplacementInstrumentActivityDto;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.entity.*;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.enums.ExportEnum;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.enums.QuestionnaireActiveTypeEnum;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.page.QuestionnaireUserResultQueryInfo;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.page.ReplacementInstrumentActivityQueryInfo;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.service.CooperationOrganService;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.service.ExportService;
 | 
	
		
			
				|  |  |  import com.ym.mec.common.dal.BaseDAO;
 | 
	
		
			
				|  |  |  import com.ym.mec.common.exception.BizException;
 | 
	
		
			
				|  |  |  import com.ym.mec.common.page.PageInfo;
 | 
	
		
			
				|  |  |  import com.ym.mec.common.page.QueryInfo;
 | 
	
		
			
				|  |  | +import com.ym.mec.common.tenant.TenantContextHolder;
 | 
	
		
			
				|  |  |  import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 | 
	
		
			
				|  |  |  import com.ym.mec.util.collection.MapUtil;
 | 
	
		
			
				|  |  |  import com.ym.mec.util.date.DateUtil;
 | 
	
		
			
				|  |  | +import com.ym.mec.util.excel.POIUtil;
 | 
	
		
			
				|  |  |  import com.ym.mec.util.http.HttpUtil;
 | 
	
		
			
				|  |  |  import org.apache.commons.lang3.StringUtils;
 | 
	
		
			
				|  |  | -import org.json.JSONObject;
 | 
	
		
			
				|  |  | +import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 | 
	
		
			
				|  |  |  import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  |  import com.ym.mec.common.service.impl.BaseServiceImpl;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.service.QuestionnaireUserResultService;
 | 
	
		
			
				|  |  |  import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  |  import org.springframework.transaction.annotation.Transactional;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import javax.servlet.http.HttpServletResponse;
 | 
	
		
			
				|  |  | +import java.io.IOException;
 | 
	
		
			
				|  |  | +import java.io.OutputStream;
 | 
	
		
			
				|  |  |  import java.util.*;
 | 
	
		
			
				|  |  |  import java.util.stream.Collectors;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import static com.ym.mec.biz.dal.enums.QuestionnaireActiveTypeEnum.CLOUD_TEACHER_FEEDBACK;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  @Service
 | 
	
		
			
				|  |  |  public class QuestionnaireUserResultServiceImpl extends BaseServiceImpl<Long, QuestionnaireUserResult>  implements QuestionnaireUserResultService {
 | 
	
		
			
				|  |  |  	
 | 
	
	
		
			
				|  | @@ -46,6 +57,10 @@ public class QuestionnaireUserResultServiceImpl extends BaseServiceImpl<Long, Qu
 | 
	
		
			
				|  |  |  	private TeacherDao teacherDao;
 | 
	
		
			
				|  |  |  	@Autowired
 | 
	
		
			
				|  |  |  	private StudentDao studentDao;
 | 
	
		
			
				|  |  | +	@Autowired
 | 
	
		
			
				|  |  | +	private QuestionnaireQuestionDao questionnaireQuestionDao;
 | 
	
		
			
				|  |  | +	@Autowired
 | 
	
		
			
				|  |  | +	private ExportService exportService;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	@Override
 | 
	
		
			
				|  |  |  	public BaseDAO<Long, QuestionnaireUserResult> getDAO() {
 | 
	
	
		
			
				|  | @@ -235,4 +250,90 @@ public class QuestionnaireUserResultServiceImpl extends BaseServiceImpl<Long, Qu
 | 
	
		
			
				|  |  |  		pageInfo.setRows(dataList);
 | 
	
		
			
				|  |  |  		return pageInfo;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public List<String> getExportFields(Integer cooperationId,QuestionnaireActiveTypeEnum activeType,List<QuestionnaireQuestion> questionList) {
 | 
	
		
			
				|  |  | +		List<String> column = new ArrayList<>();
 | 
	
		
			
				|  |  | +		if(questionList != null && questionList.size() > 0) {
 | 
	
		
			
				|  |  | +			column.add("活动编号");
 | 
	
		
			
				|  |  | +			column.add("分部");
 | 
	
		
			
				|  |  | +			column.add("提交时间");
 | 
	
		
			
				|  |  | +			column.add("学员编号");
 | 
	
		
			
				|  |  | +			column.add("学员姓名");
 | 
	
		
			
				|  |  | +			column.add("手机号");
 | 
	
		
			
				|  |  | +			List<String> collect = questionList.stream().map(e -> e.getContent()).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +			column.addAll(collect);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		return column;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	@Override
 | 
	
		
			
				|  |  | +	public Set<String> getExportBody(Integer cooperationId, QuestionnaireActiveTypeEnum activeType,List<QuestionnaireQuestion> questionList) {
 | 
	
		
			
				|  |  | +		if(questionList != null && questionList.size() > 0) {
 | 
	
		
			
				|  |  | +			Map<String,Object> resultMap = this.questionnaireUserResultExport(activeType.getCode(),cooperationId,questionList);
 | 
	
		
			
				|  |  | +			return (Set<String>)resultMap.get("body");
 | 
	
		
			
				|  |  | +		}else {
 | 
	
		
			
				|  |  | +			throw new BizException("暂无可导出数据");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	@Override
 | 
	
		
			
				|  |  | +	public List<QuestionnaireQuestion> getQuestionnaireQuestions(Integer cooperationId, QuestionnaireActiveTypeEnum activeType){
 | 
	
		
			
				|  |  | +		List<QuestionnaireQuestion> questionList;
 | 
	
		
			
				|  |  | +		if(cooperationId != null){
 | 
	
		
			
				|  |  | +			questionList = questionnaireQuestionDao.queryQuestionList(cooperationId);
 | 
	
		
			
				|  |  | +		}else {
 | 
	
		
			
				|  |  | +			if(activeType != CLOUD_TEACHER_FEEDBACK){
 | 
	
		
			
				|  |  | +				throw new BizException("报表中心暂不支持 {} 导出",CLOUD_TEACHER_FEEDBACK.getDesc());
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			questionList = questionnaireQuestionDao.findByActiveType(activeType.getCode(), TenantContextHolder.getTenantId());
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		questionList.removeAll(Collections.singleton(null));
 | 
	
		
			
				|  |  | +		return questionList;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	@Override
 | 
	
		
			
				|  |  | +	public void questionnaireUserResultExport(HttpServletResponse response, ExportDto exportDto) throws Exception {
 | 
	
		
			
				|  |  | +		Map<String, Object> info = exportDto.getQueryInfo();
 | 
	
		
			
				|  |  | +		Integer cooperationId = exportService.getParam(info, "cooperationId", Integer.class);
 | 
	
		
			
				|  |  | +		QuestionnaireActiveTypeEnum activeType = QuestionnaireActiveTypeEnum.valueOf(exportService.getParam(info, "activeType", String.class));
 | 
	
		
			
				|  |  | +		List<QuestionnaireQuestion> questionList = getQuestionnaireQuestions(cooperationId,activeType);
 | 
	
		
			
				|  |  | +		List<String> exportFields = getExportFields(cooperationId, activeType,questionList);
 | 
	
		
			
				|  |  | +		List<String> exportBody = new ArrayList<>(getExportBody(cooperationId, activeType,questionList));
 | 
	
		
			
				|  |  | +		if(exportBody.size() == 0){
 | 
	
		
			
				|  |  | +			throw new BizException("暂无可导出数据");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		Map<String,String> headMap = new LinkedHashMap<>(exportDto.getHeadColumns().size());
 | 
	
		
			
				|  |  | +		for (int i = 0; i < exportFields.size(); i++) {
 | 
	
		
			
				|  |  | +			headMap.put(exportFields.get(i),exportBody.get(i));
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		headMap.keySet().removeAll(org.apache.commons.collections.CollectionUtils.subtract(exportFields, exportDto.getHeadColumns()));
 | 
	
		
			
				|  |  | +		String[] header = headMap.keySet().toArray(new String[headMap.keySet().size()]);
 | 
	
		
			
				|  |  | +		String[] body = headMap.values().toArray(new String[headMap.keySet().size()]);
 | 
	
		
			
				|  |  | +		Map<String,Object> resultMap = this.questionnaireUserResultExport(activeType.getCode(),cooperationId,questionList);
 | 
	
		
			
				|  |  | +		List<Map<String,Object>> jsonObjectList = (List<Map<String,Object>>)resultMap.get("jsonObjectList");
 | 
	
		
			
				|  |  | +		OutputStream outputStream = response.getOutputStream();
 | 
	
		
			
				|  |  | +		HSSFWorkbook workbook = null;
 | 
	
		
			
				|  |  | +		try {
 | 
	
		
			
				|  |  | +			workbook = POIUtil.exportExcel(header, body, jsonObjectList);
 | 
	
		
			
				|  |  | +			response.setContentType("application/octet-stream");
 | 
	
		
			
				|  |  | +			response.setHeader("Content-Disposition", "attachment;filename=replacement-" + DateUtil.getDate(new Date()) + ".xls");
 | 
	
		
			
				|  |  | +			response.flushBuffer();
 | 
	
		
			
				|  |  | +			outputStream = response.getOutputStream();
 | 
	
		
			
				|  |  | +			workbook.write(outputStream);
 | 
	
		
			
				|  |  | +			outputStream.flush();
 | 
	
		
			
				|  |  | +			workbook.close();
 | 
	
		
			
				|  |  | +		} catch (Exception e) {
 | 
	
		
			
				|  |  | +			e.printStackTrace();
 | 
	
		
			
				|  |  | +		} finally {
 | 
	
		
			
				|  |  | +			if (outputStream != null) {
 | 
	
		
			
				|  |  | +				try {
 | 
	
		
			
				|  |  | +					workbook.close();
 | 
	
		
			
				|  |  | +					outputStream.close();
 | 
	
		
			
				|  |  | +				} catch (IOException e) {
 | 
	
		
			
				|  |  | +					e.printStackTrace();
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  }
 |