Browse Source

Merge branch 'zx_saas_0208' of http://git.dayaedu.com/yonge/mec into master_saas

zouxuan 3 years ago
parent
commit
4a5635acff

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExportEnum.java

@@ -67,6 +67,9 @@ public enum ExportEnum implements BaseEnum<String, ExportEnum> {
     COUNT_CLOUD_TEACHER_ACTIVE("COUNT_CLOUD_TEACHER_ACTIVE", "分部云教练活动统计数据导出"),
     COUNT_CLOUD_TEACHER_ACTIVE_DETAIL("COUNT_CLOUD_TEACHER_ACTIVE_DETAIL", "云教练活动统计详情"),
     MUSIC_ENLIGHTENMENT_QUESTIONNAIRES("MUSIC_ENLIGHTENMENT_QUESTIONNAIRES", "启蒙课问卷导出"),
+    STUDENT_INSTRUMENT("STUDENT_INSTRUMENT", "乐保导出"),
+    EXPORT_BILL("EXPORT_BILL", "对账单导出"),
+    QUESTIONNAIRE_USER_RESULT("QUESTIONNAIRE_USER_RESULT", "问卷调查导出"),
     EXERCISES_SITUATION("EXERCISES_SITUATION", "服务指标导出");
 
     private String code;

+ 0 - 12
mec-biz/src/main/java/com/ym/mec/biz/dal/page/CourseSalaryQueryInfo4Web.java

@@ -13,8 +13,6 @@ public class CourseSalaryQueryInfo4Web extends QueryInfo {
 
     private String month;
 
-    private String organId;
-
     private String organIdList;
 
     private GroupType groupType;
@@ -60,16 +58,6 @@ public class CourseSalaryQueryInfo4Web extends QueryInfo {
     }
 
     public void setOrganIdList(String organIdList) {
-        this.organId = organIdList;
-        this.organIdList = organIdList;
-    }
-
-    public String getOrganId() {
-        return organId;
-    }
-
-    public void setOrganId(String organId) {
-        this.organId = organIdList;
         this.organIdList = organIdList;
     }
 

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/IndexErrRecordQueryInfo.java

@@ -8,6 +8,8 @@ import com.ym.mec.common.page.QueryInfo;
  */
 public class IndexErrRecordQueryInfo extends QueryInfo {
 
+    private String organId;
+
     private String organIds;
 
     private Integer educationUserId;
@@ -16,11 +18,21 @@ public class IndexErrRecordQueryInfo extends QueryInfo {
 
     private String endDate;
 
+    public String getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(String organId) {
+        this.organIds = organIds;
+        this.organId = organId;
+    }
+
     public String getOrganIds() {
         return organIds;
     }
 
     public void setOrganIds(String organIds) {
+        this.organId = organId;
         this.organIds = organIds;
     }
 

+ 12 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/ExportService.java

@@ -8,7 +8,6 @@ import com.ym.mec.biz.dal.page.EndCourseScheduleQueryInfo;
 import com.ym.mec.common.entity.HttpResponseResult;
 import org.springframework.scheduling.annotation.Async;
 
-import javax.annotation.PostConstruct;
 import javax.servlet.http.HttpServletResponse;
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -30,6 +29,18 @@ public interface ExportService {
 
     Map<ExportEnum, Function<Map<String, Object>, List>> getExportFuncMap();
 
+    //导出对账单
+    List exportBill(Map<String, Object> info);
+
+    /**
+    * @description: 乐保导出
+     * @param info
+    * @return void
+    * @author zx
+    * @date 2022/2/11 15:55
+    */
+    List exportStudentInstrument(Map<String, Object> info);
+
     /**
     * @description: 班级列表导出
      * @param info

+ 40 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/QuestionnaireUserResultService.java

@@ -1,14 +1,28 @@
 package com.ym.mec.biz.service;
 
+import com.alibaba.fastjson.JSONObject;
+import com.ym.mec.biz.dal.dto.ExportDto;
 import com.ym.mec.biz.dal.dto.ReplacementInstrumentActivityDto;
 import com.ym.mec.biz.dal.entity.QuestionnaireQuestion;
 import com.ym.mec.biz.dal.entity.QuestionnaireUserResult;
+import com.ym.mec.biz.dal.enums.ExportEnum;
+import com.ym.mec.biz.dal.enums.QuestionnaireActiveTypeEnum;
 import com.ym.mec.biz.dal.page.QuestionnaireUserResultQueryInfo;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.BaseService;
-import org.json.JSONObject;
-import java.util.List;
-import java.util.Map;
+import com.ym.mec.common.tenant.TenantContextHolder;
+import com.ym.mec.util.date.DateUtil;
+import com.ym.mec.util.excel.POIUtil;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+
+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;
 
 public interface QuestionnaireUserResultService extends BaseService<Long, QuestionnaireUserResult> {
 
@@ -41,4 +55,27 @@ public interface QuestionnaireUserResultService extends BaseService<Long, Questi
     void addResult(ReplacementInstrumentActivityDto replacementInstrumentActivity);
 
     Object queryResultPage(QuestionnaireUserResultQueryInfo queryInfo);
+
+    /**
+    * @description: 获取问卷导出字段
+     * @param
+    * @return java.util.List<java.lang.String>
+    * @author zx
+    * @date 2022/2/14 11:18
+    */
+    List<String> getExportFields(Integer cooperationId, QuestionnaireActiveTypeEnum activeType,List<QuestionnaireQuestion> questionList);
+
+    /**
+    * @description: 获取问卷导出字段
+     * @param
+    * @return java.util.List<java.lang.String>
+    * @author zx
+    * @date 2022/2/14 11:18
+    */
+    Set<String> getExportBody(Integer cooperationId, QuestionnaireActiveTypeEnum activeType,List<QuestionnaireQuestion> questionList);
+
+    List<QuestionnaireQuestion> getQuestionnaireQuestions(Integer cooperationId, QuestionnaireActiveTypeEnum activeType);
+
+    //导出问卷调查
+    void questionnaireUserResultExport(HttpServletResponse response, ExportDto exportDto) throws Exception;
 }

+ 166 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -10,6 +10,7 @@ import java.util.function.BiFunction;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
@@ -25,15 +26,20 @@ import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.IdGeneratorService;
+import com.ym.mec.thirdparty.adapay.ConfigInit;
+import com.ym.mec.thirdparty.adapay.Payment;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.ini.IniFileUtil;
+import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.system.ApplicationHome;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.http.HttpStatus;
 import org.springframework.scheduling.annotation.Async;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Service;
 
 import com.ym.mec.common.tenant.TenantContextHolder;
@@ -43,10 +49,13 @@ import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.excel.POIUtil;
 import com.ym.mec.util.upload.UploadUtil;
 import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.GetMapping;
 
 import javax.annotation.PostConstruct;
 import javax.servlet.http.HttpServletResponse;
 
+import static com.ym.mec.biz.dal.enums.QuestionnaireActiveTypeEnum.CLOUD_TEACHER_FEEDBACK;
+
 @Service
 public class ExportServiceImpl implements ExportService {
 
@@ -93,6 +102,8 @@ public class ExportServiceImpl implements ExportService {
     @Autowired
     private OrganizationService organizationService;
     @Autowired
+    private StudentInstrumentDao studentInstrumentDao;
+    @Autowired
     private VipGroupService vipGroupService;
     @Autowired
     private PracticeGroupService practiceGroupService;
@@ -167,6 +178,9 @@ public class ExportServiceImpl implements ExportService {
     @Autowired
     private SysUserCashAccountLogService sysUserCashAccountLogService;
 
+    @Value("${spring.profiles.active:dev}")
+    private String profiles;
+
 
     @Override
     public Map<String,String> getExportMap(ExportDto exportDto) throws IOException {
@@ -184,7 +198,7 @@ public class ExportServiceImpl implements ExportService {
         for (int i = 0; i < headColumns.size(); i++) {
             headMap.put(headColumns.get(i),fieldColumns.get(i));
         }
-        headMap.keySet().removeAll(org.apache.commons.collections.CollectionUtils.subtract(headColumns, exportDto.getHeadColumns()));
+        headMap.keySet().removeAll(org.apache.commons.collections.CollectionUtils.subtract(headColumns, paramColumns));
         return headMap;
     }
 
@@ -319,6 +333,8 @@ public class ExportServiceImpl implements ExportService {
         exportFuncMap.put(ExportEnum.COUNT_CLOUD_TEACHER_ACTIVE_DETAIL, info -> countCloudTeacherActiveDetail(info));
         exportFuncMap.put(ExportEnum.MUSIC_ENLIGHTENMENT_QUESTIONNAIRES, info -> musicEnlightenmentQuestionnaireService.queryPage(getQueryInfo(info,TeacherServeQueryInfo.class,false)).getRows());
         exportFuncMap.put(ExportEnum.EXERCISES_SITUATION, info -> studentExtracurricularExercisesSituationService.queryTeacherPerformanceIndicator(getQueryInfo(info,TeacherServeQueryInfo.class,false)));
+        exportFuncMap.put(ExportEnum.STUDENT_INSTRUMENT, info -> exportStudentInstrument(info));
+        exportFuncMap.put(ExportEnum.EXPORT_BILL, info -> exportBill(info));
 
         //导出到报表中心
 //        exportManageFuncMap.put(ExportEnum.SUPER_FIND_COURSE_SCHEDULES, (info,headColumns) -> this.superFindCourseSchedules(info,headColumns));
@@ -331,6 +347,149 @@ public class ExportServiceImpl implements ExportService {
 
     }
 
+    //导出对账单
+    @Override
+    public List exportBill(Map<String, Object> info){
+        String startTimeStr = getParam(info, "startTime", String.class);
+        Date startTime = null;
+        if(StringUtils.isNotEmpty(startTimeStr)){
+            startTime = DateUtil.stringToDate(startTimeStr,DateUtil.ISO_EXPANDED_DATE_FORMAT);
+        }
+        Date endTime = null;
+        String endTimeStr = getParam(info, "endTime", String.class);
+        if(StringUtils.isNotEmpty(endTimeStr)){
+            endTime = DateUtil.stringToDate(endTimeStr,DateUtil.ISO_EXPANDED_DATE_FORMAT);
+        }
+        long createdGte = startTime.getTime();
+        long createdLte = DateUtil.getLastSecondWithDay(endTime).getTime();
+        int pageIndex = 1;
+        List<Map<String, Object>> data = new ArrayList<>();
+        while (profiles.equals("prod")) {
+            Map<String, Object> paymentList = null;
+            try {
+                paymentList = Payment.queryList(pageIndex, createdGte, createdLte);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            JSONArray payments = (JSONArray) paymentList.get("payments");
+            if (!paymentList.get("status").equals("succeeded")) {
+                throw new BizException("查询失败,请重试");
+            }
+
+            if (payments != null && payments.size() > 0) {
+                for (Object payment : payments) {
+                    Map<String, Object> paymentMap = (Map<String, Object>) payment;
+                    if (!paymentMap.get("status").equals("succeeded")) {
+                        continue;
+                    }
+                    paymentMap.put("created_time", DateUtil.timeStamp2Date(paymentMap.get("created_time").toString(), null));
+                    if (paymentMap.get("pay_channel").equals("alipay_qr")) {
+                        paymentMap.put("pay_channel", "支付宝正扫");
+                    } else if (paymentMap.get("pay_channel").equals("alipay_wap")) {
+                        paymentMap.put("pay_channel", "支付宝H5支付");
+                    } else {
+                        paymentMap.put("pay_channel", "微信公众号支付");
+                    }
+
+                    if (paymentMap.get("status").equals("pending")) {
+                        paymentMap.put("status", "交易处理中");
+                    } else if (paymentMap.get("status").equals("succeeded")) {
+                        paymentMap.put("status", "交易成功");
+                    } else {
+                        paymentMap.put("status", "交易失败");
+                    }
+                    if (paymentMap.get("pay_mode").equals("delay")) {
+                        if (!paymentMap.containsKey("payment_confirms")) {
+                            Map<String, Object> confirmMap = null;
+                            try {
+                                confirmMap = Payment.queryConfirmList(paymentMap.get("id").toString());
+                            } catch (Exception e) {
+                                e.printStackTrace();
+                            }
+                            if (confirmMap.containsKey("payment_confirms")) {
+                                paymentMap.put("payment_confirms", confirmMap.get("payment_confirms"));
+                            }
+                        }
+                        if (!paymentMap.containsKey("payment_confirms")) {
+                            paymentMap.put("memo", "没有提交分账信息,请联系技术核查");
+                            data.add(paymentMap);
+                            continue;
+                        }
+                        JSONArray confirms = (JSONArray) paymentMap.get("payment_confirms");
+                        for (Object confirm : confirms) {
+                            Map<String, Object> divMemberMap = (Map<String, Object>) confirm;
+                            paymentMap.put("fee_amt", divMemberMap.get("fee_amt"));
+                            divMemberMap.putAll(paymentMap);
+
+                            JSONArray divMembers = (JSONArray) divMemberMap.get("div_members");
+                            Map<String, Object> divMember = (Map<String, Object>) divMembers.get(0);
+                            divMemberMap.putAll(divMember);
+                            if (divMemberMap.get("member_id").equals("0")) {
+                                divMemberMap.put("member_id", ConfigInit.merNo);
+                            }
+                            data.add(divMemberMap);
+                        }
+                    } else {
+                        JSONArray divMembers = (JSONArray) paymentMap.get("div_members");
+                        for (Object divMember : divMembers) {
+                            Map<String, Object> divMemberMap = (Map<String, Object>) divMember;
+                            divMemberMap.putAll(paymentMap);
+                            if (divMemberMap.get("member_id").equals("0")) {
+                                divMemberMap.put("member_id", ConfigInit.merNo);
+                            }
+                            if (divMemberMap.get("fee_flag").equals("N")) {
+                                divMemberMap.put("fee_amt", "0.00");
+                            }
+                            data.add(divMemberMap);
+                        }
+                    }
+                }
+            }
+            if (paymentList.get("has_more").equals(false)) {
+                break;
+            }
+            pageIndex++;
+        }
+        return data;
+    }
+
+    //乐保导出
+    @Override
+    public List exportStudentInstrument(Map<String, Object> info){
+        String startTimeStr = getParam(info, "startTime", String.class);
+        Date startTime = null;
+        if(StringUtils.isNotEmpty(startTimeStr)){
+            startTime = DateUtil.stringToDate(startTimeStr,DateUtil.ISO_EXPANDED_DATE_FORMAT);
+        }
+        Date endTime = null;
+        String endTimeStr = getParam(info, "endTime", String.class);
+        if(StringUtils.isNotEmpty(endTimeStr)){
+            endTime = DateUtil.stringToDate(endTimeStr,DateUtil.ISO_EXPANDED_DATE_FORMAT);
+        }
+        String organId = organizationService.getEmployeeOrgan("");
+
+        if (startTime != null) {
+            startTime = DateUtil.trunc(startTime);
+        }
+        if (endTime != null) {
+            endTime = DateUtil.getLastTimeWithDay(endTime);
+        }
+        List<StudentInstrumentExportDto> instruments = studentInstrumentDao.getInstruments(startTime, endTime, organId, TenantContextHolder.getTenantId());
+
+        if (instruments.size() <= 0) {
+            throw new BizException("没有可导出的记录");
+        }
+        for (StudentInstrumentExportDto instrument : instruments) {
+            StudentRegistration studentMusicGroup = studentInstrumentDao.findStudentMusicGroup(instrument.getStudentId());
+            if (studentMusicGroup != null) {
+                instrument.setRepairerName(studentMusicGroup.getParentsName());
+                instrument.setMusicGroupName(studentMusicGroup.getClassGroupName());
+                instrument.setStudentStatus(studentMusicGroup.getMusicGroupStatus());
+            }
+        }
+        return instruments;
+    }
+
     //班级列表导出
     @Override
     public List exportClassGroup(Map<String, Object> info){
@@ -631,7 +790,7 @@ public class ExportServiceImpl implements ExportService {
     @Override
     public List isSettlementCourseSalarys(Map<String, Object> info){
         CourseSalaryQueryInfo4Web queryInfo = JSONObject.parseObject(JSONObject.toJSONString(info),CourseSalaryQueryInfo4Web.class);
-        queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
+        queryInfo.setOrganIdList(organizationService.getEmployeeOrgan(queryInfo.getOrganIdList()));
         List<TeacherCourseSalaryDetail4WebDto> rows = courseScheduleTeacherSalaryService.findIsSettlementCourseSalarys(queryInfo).getRows();
         if (CollectionUtils.isEmpty(rows)) {
             throw new BizException("没有可导出的记录");
@@ -775,7 +934,7 @@ public class ExportServiceImpl implements ExportService {
     @Override
     public List studentOrder(Map<String, Object> info){
         String organIds = getParam(info,"organIds",String.class);
-        Date date = getParam(info,"date",Date.class);
+        Date date = DateUtil.stringToDate(getParam(info,"date",String.class),DateUtil.ISO_EXPANDED_DATE_FORMAT);
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         organIds = organizationService.getEmployeeOrgan(sysUser.getId(), organIds, sysUser.getIsSuperAdmin());
         Date startTime = DateUtil.getFirstDayOfMonth(date);
@@ -983,8 +1142,8 @@ public class ExportServiceImpl implements ExportService {
         HashSet<Integer> added = new HashSet<>();
         //获取用户选择的表头和表字段
         Map<String, String> exportMap = getExportMap(exportDto);
-        Set<String> header = exportMap.keySet();
-        Collection<String> body = exportMap.values();
+        Set<String> header = new LinkedHashSet<>(exportMap.keySet());
+        Set<String> body = new LinkedHashSet<>(exportMap.values());
         for (RegisterSubjectDto registerSubject : registerSubjects) {
             if (!added.contains(registerSubject.getSubjectId())) {
                 added.add(registerSubject.getSubjectId());
@@ -1127,8 +1286,8 @@ public class ExportServiceImpl implements ExportService {
         HashSet<Integer> added = new HashSet<>();
         //获取用户选择的表头和表字段
         Map<String, String> exportMap = getExportMap(exportDto);
-        Set<String> header = exportMap.keySet();
-        Collection<String> body = exportMap.values();
+        Set<String> header = new LinkedHashSet<>(exportMap.keySet());
+        Set<String> body = new LinkedHashSet<>(exportMap.values());
         for (RegisterSubjectDto registerSubject : registerSubjects) {
             if (!added.contains(registerSubject.getSubjectId())) {
                 added.add(registerSubject.getSubjectId());

+ 102 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/QuestionnaireUserResultServiceImpl.java

@@ -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();
+				}
+			}
+		}
+	}
 }

+ 12 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentExtracurricularExercisesSituationServiceImpl.java

@@ -567,18 +567,20 @@ public class StudentExtracurricularExercisesSituationServiceImpl extends BaseSer
 		Map<Integer, List<StudentExtracurricularExercisesSituation>> teacherServeMap = teacherServeWithDate.stream().collect(Collectors.groupingBy(StudentExtracurricularExercisesSituation::getTeacherId));
 		for (TeacherServeDto teacherServeDto : dataList) {
 			List<StudentExtracurricularExercisesSituation> tss = teacherServeMap.get(teacherServeDto.getTeacherId());
-			Set<Long> courseIds = new HashSet<>();
-			for (StudentExtracurricularExercisesSituation ts : tss) {
-				if(teacherServeDto.getMonday().compareTo(ts.getMonday())!=0){
-					continue;
-				}
-				if(StringUtils.isBlank(ts.getCourseIds())){
-					continue;
+			if(tss != null){
+				Set<Long> courseIds = new HashSet<>();
+				for (StudentExtracurricularExercisesSituation ts : tss) {
+					if(teacherServeDto.getMonday().compareTo(ts.getMonday())!=0){
+						continue;
+					}
+					if(StringUtils.isBlank(ts.getCourseIds())){
+						continue;
+					}
+					Set<Long> ids = Arrays.stream(ts.getCourseIds().split(",")).map(s -> Long.valueOf(s)).collect(Collectors.toSet());
+					courseIds.addAll(ids);
 				}
-				Set<Long> ids = Arrays.stream(ts.getCourseIds().split(",")).map(s -> Long.valueOf(s)).collect(Collectors.toSet());
-				courseIds.addAll(ids);
+				teacherServeDto.setHomeworkNum(courseIds.size());
 			}
-			teacherServeDto.setHomeworkNum(courseIds.size());
 		}
 		return dataList;
 	}

+ 2 - 2
mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml

@@ -928,8 +928,8 @@
 			<if test="month!=null">
 				AND DATE_FORMAT(cs.class_date_, '%Y-%m') = #{month}
 			</if>
-			<if test="organId != null and organId != ''">
-				AND FIND_IN_SET(t.organ_id_,#{organId})
+			<if test="organIdList != null and organIdList != ''">
+				AND FIND_IN_SET(t.organ_id_,#{organIdList})
 			</if>
 			<if test="search!=null">
 				AND (csts.course_schedule_id_=#{search} OR cs.name_ LIKE CONCAT('%', #{search}, '%'))

+ 8 - 7
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -89,8 +89,6 @@ public class ExportController extends BaseController {
     @Autowired
     private CooperationOrganService cooperationOrganService;
     @Autowired
-    private StudentPaymentRouteOrderDao studentPaymentRouteOrderDao;
-    @Autowired
     private StudentPaymentOrderDao studentPaymentOrderDao;
     @Autowired
     private StudentDao studentDao;
@@ -113,10 +111,6 @@ public class ExportController extends BaseController {
     @Autowired
     private ExportService exportService;
     @Autowired
-    private ManagerDownloadDao managerDownloadDao;
-    @Autowired
-    private IdGeneratorService idGeneratorService;
-    @Autowired
     private MusicGroupQuitService musicGroupQuitService;
     @Autowired
     private IndexBaseMonthDataService indexService;
@@ -138,11 +132,16 @@ public class ExportController extends BaseController {
     private MusicEnlightenmentQuestionnaireService musicEnlightenmentQuestionnaireService;
     @Autowired
     private MusicGroupService musicGroupService;
+    @Autowired
+    private QuestionnaireUserResultService questionnaireUserResultService;
 
     @ApiOperation(value = "获取可导出字段")
     @RequestMapping("export/getFields")
     @PreAuthorize("@pcs.hasPermissions('export/getFields')")
-    public HttpResponseResult export(ExportEnum exportEnum) throws IOException {
+    public HttpResponseResult export(ExportEnum exportEnum,Integer cooperationId, QuestionnaireActiveTypeEnum activeType) throws IOException {
+        if(exportEnum == ExportEnum.QUESTIONNAIRE_USER_RESULT){
+            return succeed(questionnaireUserResultService.getExportFields(cooperationId,activeType,questionnaireUserResultService.getQuestionnaireQuestions(cooperationId,activeType)));
+        }
         return succeed(exportService.getExportFields(exportEnum));
     }
 
@@ -154,6 +153,8 @@ public class ExportController extends BaseController {
             exportService.musicGroupRegister(response,exportDto);
         }else if(exportDto.getExportEnum() == ExportEnum.MUSIC_GROUP_NORMAL_STUDENT_NUM){
             exportService.musicGroupNormalStudentNum(response,exportDto);
+        }else if(exportDto.getExportEnum() == ExportEnum.QUESTIONNAIRE_USER_RESULT){
+            questionnaireUserResultService.questionnaireUserResultExport(response,exportDto);
         }else {
             Map<String, Object> queryInfo = exportDto.getQueryInfo();
             if(queryInfo == null){

+ 1 - 2
mec-web/src/main/java/com/ym/mec/web/controller/SysTenantConfigController.java

@@ -33,10 +33,9 @@ public class SysTenantConfigController extends BaseController {
 	@GetMapping(value = "queryAll")
     @PreAuthorize("@pcs.hasPermissions('sysTenantConfig/queryAll')")
 	public Object queryAll(String group) {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
 		Map<String,Object> params = new HashMap<String, Object>(2);
 		params.put("group", group);
-		params.put("tenantId", sysUser.getTenantId());
+		params.put("tenantId", TenantContextHolder.getTenantId());
 		return succeed(sysTenantConfigService.queryAll(params));
 	}
 

+ 10 - 2
mec-web/src/main/resources/exportColumnMapper.ini

@@ -240,11 +240,15 @@ fieldColumns = ["index", "organName", "totalStudentNum", "cloudStudyLivelyStuden
 
 [分部云教练学员训练数据导出]
 headColumns = ["学员编号", "学员","年级","班级", "手机号", "是否新用户", "是否激活", "训练总时长", "连续训练天数", "乐团", "乐团主管", "所属学校", "指导老师", "声部", "是否有小课","训练次数", "训练天数", "训练平均时长", "会员有效期", "是否服务", "是否运营", "是否团练宝活动目标学员", "活动消费金额", "关心包", "加油包", "未上课数", "vip课剩余课时", "网管课剩余课时"]
-fieldColumns = ["studentId", "studentName","currentGradeNum","currentClass", "phone", "newUser?'是':'否'", "enable?'是':'否'",         "cloudStudyUseTime+'分钟'", "cloudStudyRunningDays+'天'", "musicGroupNames", "educationName", "schoolNames",         "teacherName", "subjectName", "hasVipGroup>0?'是':'否'", "cloudStudyUseNum+'次'", "cloudStudyUseDays+'天'",         "cloudStudyUseAvgTime+'分钟'", "membershipEndTime", "serviceTag>0?'是':'否'", "operatingTag>0?'是':'否'","countFlag == null?'否':countFlag == 1?'是':'否'","activeAmount",         "carePackage>0?carePackage>1?'已使用':'可用':'不可用'", "comeOnPackage>0?comeOnPackage>1?'已使用':'可用':'不可用'",         "notStartCourseNum", "notStartVipCourseNum", "notStartPracticeCourseNum"]
+fieldColumns = ["studentId", "studentName","currentGradeNum","currentClass", "phone", "newUser?'是':'否'", "enable?'是':'否'", "cloudStudyUseTime+'分钟'", "cloudStudyRunningDays+'天'", "musicGroupNames", "educationName", "schoolNames",         "teacherName", "subjectName", "hasVipGroup>0?'是':'否'", "cloudStudyUseNum+'次'", "cloudStudyUseDays+'天'",         "cloudStudyUseAvgTime+'分钟'", "membershipEndTime", "serviceTag>0?'是':'否'", "operatingTag>0?'是':'否'","countFlag == null?'否':countFlag == 1?'是':'否'","activeAmount",         "carePackage>0?carePackage>1?'已使用':'可用':'不可用'", "comeOnPackage>0?comeOnPackage>1?'已使用':'可用':'不可用'",         "notStartCourseNum", "notStartVipCourseNum", "notStartPracticeCourseNum"]
 
 [分部云教练活动统计数据导出]
 headColumns = ["分部", "购买人数", "购买金额", "目标金额", "人均购买金额", "目标人数", "目标达成率"]
-fieldColumns = ["organName", "buyNum", "buyAmount", "targetAmount", "avgBuyAmount",         "targetNum", "targetFinishScale"]
+fieldColumns = ["organName", "buyNum", "buyAmount", "targetAmount", "avgBuyAmount", "targetNum", "targetFinishScale"]
+
+[对账单导出]
+headColumns = ["支付流水号", "订单号", "支付渠道", "交易金额", "商户号", "分润金额", "是否承担手续费", "手续费", "第三方订单号", "支付宝/微信订单号", "交易时间", "交易状态", "备注"]
+fieldColumns = ["id", "order_no", "pay_channel", "pay_amt", "member_id", "amount", "fee_flag", "fee_amt", "party_order_id", "out_trans_id", "created_time", "status", ""]
 
 [云教练活动统计详情]
 headColumns = ["学员编号", "学员", "合作单位", "乐团", "乐团模式", "声部", "年级", "指导老师", "购买套餐", "购买金额"]
@@ -254,6 +258,10 @@ fieldColumns = ["userId", "username", "cooperationName", "musicGroupName", "char
 headColumns = ["学员姓名","联系电话","年级","班级","老师推荐专业","是否在学习某件乐器","目前所学乐器","报名参加管乐团家长会了解相关情况","备注"]
 fieldColumns = ["userName","phone","currentGrade","currentClass","subjectName == null?'无':subjectName","musicalInstrumentsLearning?'是':'否'", "musicalInstrumentsName","joinParentMeeting?'是':'否'","remark"]
 
+[乐保导出]
+headColumns = ["交易流水号", "订单号", "订单日期", "分部", "学员姓名", "学员编号", "所属乐团", "学员状态", "维修技师", "乐器名称", "具体型号", "乐保类型"]
+fieldColumns = ["transNo", "orderNo", "createTime", "organName", "studentName", "studentId", "musicGroupName", "studentStatus.msg", "repairerName", "goodsName", "specification", "type == '0' ? '新增' : '续费'"]
+
 [服务指标导出]
 headColumns = ["分部","老师编号","老师姓名","预计安排(人次)","实际安排(人次)","布置率(%)","提交人数","点评次数","点评率(%)","及时点评次数","及时点评率(%)"]
 fieldColumns = ["organName","teacherId","teacherName","expectExercisesNum","actualExercisesNum", "100 * actualExercisesNum / expectExercisesNum","exercisesReplyNum","exercisesMessageNum", "100 * exercisesMessageNum / exercisesReplyNum", "exercisesMessageTimelyNum","100 * exercisesMessageTimelyNum / exercisesReplyNum"]