瀏覽代碼

乐团梯队数据导出

zouxuan 1 年之前
父節點
當前提交
7f50c92fc7

+ 4 - 0
mec-application/src/main/resources/exportColumnMapper.ini

@@ -361,3 +361,7 @@ fieldColumns = ["organName","courseId","amount"]
 [云教练激活明细]
 headColumns = ["分部","学员编号","学员姓名","激活时间","激活月份","金额"]
 fieldColumns = ["organName","studentId","studentName","createTime","time","amount"]
+
+[乐团梯队数据导出]
+headColumns = ["乐团","长笛","单簧管","萨克斯","小号","圆号","长号","上低音号","大号","小军鼓","合计"]
+fieldColumns = ["name","flute","clarinet","saxophone","trumpet","horn","trombone","euphonium","tuba","snareDrum","total"]

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java

@@ -538,4 +538,8 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
     List<String> findNormalByCooperationId(@Param("coopId") Integer coopId);
 
     List<MusicGroup> userMusicGroup(@Param("studentId") Integer studentId, @Param("coopId") Integer coopId, @Param("statusList") List<StudentMusicGroupStatusEnum> statusList);
+
+    List<ExportMusicGroupEchelonDataDto> queryCoopEchelonData(@Param("organIds") List<Integer> organIds);
+
+    List<ExportMusicGroupEchelonDataDto> queryMusicGroupEchelonData(@Param("organIds") List<String> organIds);
 }

+ 34 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ExportMusicGroupEchelonDataDto.java

@@ -0,0 +1,34 @@
+package com.ym.mec.biz.dal.dto;
+
+import lombok.Data;
+
+@Data
+public class ExportMusicGroupEchelonDataDto {
+    private Integer coopId;
+
+    private String coopName;
+
+    private String musicGroupId;
+
+    private String musicGroupName;
+
+    private String flute;
+
+    private String clarinet;
+
+    private String saxophone;
+
+    private String trumpet;
+
+    private String horn;
+
+    private String trombone;
+
+    private String euphonium;
+
+    private String tuba;
+
+    private String snareDrum;
+
+    private String total;
+}

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

@@ -93,6 +93,7 @@ public enum ExportEnum implements BaseEnum<String, ExportEnum> {
     EXPORT_OPERATING_SUMMARY_INCOME("EXPORT_OPERATING_SUMMARY_INCOME","经营报表收入汇总"),
     EXPORT_COURSE_INCOME("EXPORT_COURSE_INCOME","课程收入明细导出"),
     CLOUD_COACH_ACTIVATION_DETAILS("CLOUD_COACH_ACTIVATION_DETAILS","云教练激活明细"),
+    EXPORT_MUSIC_GROUP_ECHELON_DATA("EXPORT_MUSIC_GROUP_ECHELON_DATA","乐团梯队数据导出"),
     ;
 
     private String code;

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExportTypeEnum.java

@@ -33,6 +33,7 @@ public enum ExportTypeEnum implements BaseEnum<Integer, ExportTypeEnum> {
 
 	CLOUD_COACH_ACTIVATION_DETAILS(27,"云教练激活明细"),
 	EXPORT_COURSE_INCOME(28,"课程收入明细导出"),
+	EXPORT_MUSIC_GROUP_ECHELON_DATA(29,"乐团梯队数据导出"),
 	;
 
 	private Integer code;

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ExportService.java

@@ -267,6 +267,8 @@ public interface ExportService {
 
     void orderList(Map<String, Object> params, ManagerDownload managerDownload);
 
+    void musicGroupEchelonData(String organId, ManagerDownload managerDownload);
+
     void operatingSummaryIncome(Map<String, Object> params, ManagerDownload managerDownload);
 
     void orderListSum(Map<String, Object> params, ManagerDownload managerDownload);

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java

@@ -483,4 +483,5 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
      */
     List<Subject> getSubjectListByIdAndCoopId(String musicGroupId, Integer coopId);
 
+    Map<Integer, List<ExportMusicGroupEchelonDataDto>> queryMusicGroupEchelonData(List<Integer> organIds);
 }

+ 29 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -211,7 +211,6 @@ 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, fieldColumns));
         return headMap;
     }
 
@@ -386,6 +385,7 @@ public class ExportServiceImpl implements ExportService {
         exportManageFuncMap.put(ExportEnum.EXPORT_OA_SUMMARY_EXPENSES_DETAIL, info -> exportOaSummaryExpensesDetail(info));
         exportManageFuncMap.put(ExportEnum.EXPORT_OPERATING_SUMMARY_INCOME, info -> exportOperatingSummaryIncome(info));
         exportManageFuncMap.put(ExportEnum.EXPORT_COURSE_INCOME, (info) -> exportCourseIncome(info));
+        exportManageFuncMap.put(ExportEnum.EXPORT_MUSIC_GROUP_ECHELON_DATA, (info) -> exportMusicGroupEchelonData(info));
 
     }
 
@@ -420,6 +420,12 @@ public class ExportServiceImpl implements ExportService {
         return succeed;
     }
 
+    private HttpResponseResult exportMusicGroupEchelonData(Map<String, Object> info){
+        String organId = getParam(info, "organId", String.class);
+        ManagerDownload managerDownload = this.saveManagerDownload(ExportTypeEnum.EXPORT_MUSIC_GROUP_ECHELON_DATA, sysUserService.getUserId());
+        return this.asyncExport(() -> this.musicGroupEchelonData(organId, managerDownload), managerDownload.getName());
+    }
+
     private HttpResponseResult exportOperatingSummaryIncome(Map<String, Object> info) {
         String month = getParam(info, "month", String.class);
         Map<String, Object> params = new HashMap<>(1);
@@ -2329,6 +2335,17 @@ public class ExportServiceImpl implements ExportService {
     }
 
     @Override
+    public void musicGroupEchelonData(String organId, ManagerDownload managerDownload) {
+        List<Integer> organIds = new ArrayList<>();
+        if(StringUtils.isNotEmpty(organId)){
+            Arrays.stream(organId.split(",")).forEach(e->organIds.add(Integer.parseInt(e)));
+        }
+        Map<Integer, List<ExportMusicGroupEchelonDataDto>> dtos = musicGroupService.queryMusicGroupEchelonData(organIds);
+        HSSFWorkbook workbook = getHSSFWorkbook(dtos, ExportEnum.EXPORT_MUSIC_GROUP_ECHELON_DATA);
+        exportManagerDownload(workbook, managerDownload);
+    }
+
+    @Override
     public void operatingSummaryIncome(Map<String, Object> params, ManagerDownload managerDownload) {
         List<OperatingTotalIncomeDto> incomeDtos = studentPaymentOrderService.queryOperatingSummaryIncome(params);
         HSSFWorkbook workbook = getHSSFWorkbook(incomeDtos, ExportEnum.EXPORT_OPERATING_SUMMARY_INCOME);
@@ -3007,6 +3024,17 @@ public class ExportServiceImpl implements ExportService {
         }
     }
 
+    public <K,V> HSSFWorkbook getHSSFWorkbook(Map<K,List<V>> rows,ExportEnum exportEnum) {
+        try {
+            Map<String, String> headMap = getExportMap(new ExportDto(exportEnum));
+            String[] header = headMap.keySet().toArray(new String[headMap.keySet().size()]);
+            String[] body = headMap.values().toArray(new String[headMap.keySet().size()]);
+            return POIUtil.exportExcel(header, body, rows);
+        } catch (Exception e) {
+            throw new BizException(e);
+        }
+    }
+
     public void exportManagerDownload(HSSFWorkbook workbook, ManagerDownload managerDownload) {
         String basePath = new ApplicationHome(this.getClass()).getSource().getParentFile().getPath();
         File file = new File(basePath + "/" + managerDownload.getName());
@@ -3018,7 +3046,6 @@ public class ExportServiceImpl implements ExportService {
             fileOutputStream.close();
 
             String folder = "daya/download/" + UploadUtil.getFileFloder();
-            //String url = storagePluginContext.uploadFile(KS3StoragePlugin.PLUGIN_NAME, folder, file);
             String url = ossPluginContext.getPluginService(TencentOssPlugin.PLUGIN_NAME).uploadFile(folder, file);
             //把记录插入下载表
             managerDownload.setFileUrl(url);

+ 33 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -4187,7 +4187,39 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         return subjectDao.getSubjectListByIdAndCoopId(musicGroupId,coopId);
     }
 
-    @Override
+	@Override
+	public Map<Integer, List<ExportMusicGroupEchelonDataDto>> queryMusicGroupEchelonData(List<Integer> organIds) {
+		List<ExportMusicGroupEchelonDataDto> coopEchelonDataDtos = musicGroupDao.queryCoopEchelonData(organIds);
+		if(CollectionUtils.isEmpty(coopEchelonDataDtos)){
+			return new HashMap<>();
+		}
+		//获取所有的乐团id
+		List<String> musicGroupIds = coopEchelonDataDtos.stream().map(ExportMusicGroupEchelonDataDto::getMusicGroupId).collect(Collectors.toList());
+		//按乐团分组获取乐团班级声部数据
+		List<ExportMusicGroupEchelonDataDto> musicGroupEchelonDataDtos = musicGroupDao.queryMusicGroupEchelonData(musicGroupIds);
+		//按乐团编号分组
+		Map<String, List<ExportMusicGroupEchelonDataDto>> musicGroupEchelonDataMap =
+				musicGroupEchelonDataDtos.stream().collect(Collectors.groupingBy(ExportMusicGroupEchelonDataDto::getMusicGroupId));
+		//按合作单位分组
+		Map<Integer, List<ExportMusicGroupEchelonDataDto>> coopEchelonDataMap =
+				coopEchelonDataDtos.stream().collect(Collectors.groupingBy(ExportMusicGroupEchelonDataDto::getCoopId));
+		coopEchelonDataMap.forEach((k,v) -> {
+			//按乐团编号分组
+			Map<String, List<ExportMusicGroupEchelonDataDto>> musicGroupEchelonDataDtoListMap =
+					coopEchelonDataMap.get(k).stream().collect(Collectors.groupingBy(ExportMusicGroupEchelonDataDto::getMusicGroupId));
+			musicGroupEchelonDataDtoListMap.forEach((k1,v1) -> {
+				List<ExportMusicGroupEchelonDataDto> musicGroupEchelonDataDtoList = musicGroupEchelonDataMap.get(k1);
+				if(CollectionUtils.isNotEmpty(musicGroupEchelonDataDtoList)){
+					v1.addAll(musicGroupEchelonDataDtoList);
+				}
+				//插入一条空白行数据
+				v1.add(new ExportMusicGroupEchelonDataDto());
+			});
+		});
+		return coopEchelonDataMap;
+	}
+
+	@Override
 	@Transactional(rollbackFor = Exception.class)
     public List<String> importMusicGroupPayment(MultipartFile file) throws Exception{
         Map<String, List<Map<String, Object>>> sheetsListMap = POIUtil.importExcel(new ByteArrayInputStream(file.getBytes()), 2, file.getOriginalFilename());

+ 34 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml

@@ -1281,4 +1281,38 @@
             </if>
         </where>
     </select>
+    <select id="queryCoopEchelonData" resultType="com.ym.mec.biz.dal.dto.ExportMusicGroupEchelonDataDto">
+        select co.id_ coopId,co.name_ coopName,mg.name_ musicGroupName,
+               COUNT(if(sr.actual_subject_id_ = 2,1,null)) 'flute',COUNT(if(sr.actual_subject_id_ = 4,1,null)) 'clarinet',
+                COUNT(if(sr.actual_subject_id_ = 5,1,null)) 'saxophone',COUNT(if(sr.actual_subject_id_ = 12,1,null)) 'trumpet',
+                COUNT(if(sr.actual_subject_id_ = 13,1,null)) 'horn',COUNT(if(sr.actual_subject_id_ = 14,1,null)= 14) 'trombone',
+                COUNT(if(sr.actual_subject_id_ = 15,1,null)) 'euphonium',COUNT(if(sr.actual_subject_id_ = 17,1,null)) 'tuba',
+                COUNT(if(sr.actual_subject_id_ = 23,1,null)) 'snareDrum',COUNT(distinct sr.user_id_) 'total'
+        from cooperation_organ co
+                 left join music_group mg ON mg.cooperation_organ_id_ = co.id_
+                 left join student_registration sr ON sr.music_group_id_ = mg.id_
+        where co.del_flag_ = '0' AND co.is_enable_ = true and sr.music_group_status_ = 'NORMAL' AND mg.status_ = 'PROGRESS'
+        <if test="organIds != null and organIds.size > 0">
+            AND co.organ_id_ IN
+            <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+                #{organId}
+            </foreach>
+        </if>
+        group by mg.id_
+    </select>
+    <select id="queryMusicGroupEchelonData" resultType="com.ym.mec.biz.dal.dto.ExportMusicGroupEchelonDataDto">
+        select sr.music_group_id_ musicGroupId,sr.current_grade_ musicGroupName,
+        COUNT(if(sr.actual_subject_id_ = 2,1,null)) 'flute',COUNT(if(sr.actual_subject_id_ = 4,1,null)) 'clarinet',
+        COUNT(if(sr.actual_subject_id_ = 5,1,null)) 'saxophone',COUNT(if(sr.actual_subject_id_ = 12,1,null)) 'trumpet',
+        COUNT(if(sr.actual_subject_id_ = 13,1,null)) 'horn',COUNT(if(sr.actual_subject_id_ = 14,1,null)= 14) 'trombone',
+        COUNT(if(sr.actual_subject_id_ = 15,1,null)) 'euphonium',COUNT(if(sr.actual_subject_id_ = 17,1,null)) 'tuba',
+        COUNT(if(sr.actual_subject_id_ = 23,1,null)) 'snareDrum',COUNT(distinct sr.user_id_) 'total'
+        from student_registration sr
+        where sr.music_group_status_ = 'NORMAL' AND
+        sr.music_group_id_ IN
+        <foreach collection="musicGroupIds" item="musicGroupId" open="(" close=")" separator=",">
+            #{musicGroupId}
+        </foreach>
+        group by sr.music_group_id_,sr.current_grade_ order by sr.music_group_id_,sr.current_grade_
+    </select>
 </mapper>

+ 86 - 0
mec-util/src/main/java/com/ym/mec/util/excel/POIUtil.java

@@ -37,6 +37,7 @@ import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.ss.usermodel.WorkbookFactory;
+import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.xssf.streaming.SXSSFWorkbook;
 import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
 import org.apache.poi.xssf.usermodel.XSSFDrawing;
@@ -270,6 +271,91 @@ public class POIUtil {
 		return workbook;
 	}
 
+	public static <K,V> HSSFWorkbook exportExcel(String[] headColumns, String[] fieldColumns, Map<K,List<V>> dataMap){
+		if (headColumns == null) {
+			throw new UtilException("excel列名不能为空");
+		}
+		if (dataMap == null || dataMap.isEmpty()) {
+			throw new UtilException("数据集不能为空");
+		}
+		HSSFWorkbook workbook = new HSSFWorkbook();
+		HSSFCellStyle style = workbook.createCellStyle(); // 获取单元格样式
+		/************** 设置单元格样式 *************/
+		style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直
+		style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平
+		style.setWrapText(true);
+		HSSFFont font = workbook.createFont();
+		font.setColor(HSSFFont.COLOR_NORMAL);
+		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
+		style.setFont(font);
+
+		for (K k : dataMap.keySet()) {
+			List<V> dataset = dataMap.get(k);
+			HSSFSheet sheet = workbook.createSheet(); // 创建sheet
+			// 设置表头
+			// 创建第一行
+			//创建合并单元格
+			sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 10));
+			sheet.getRow(0).getCell(1).setCellValue(k.toString());
+			//设置sheet名称
+			workbook.setSheetName(workbook.getSheetIndex(sheet), k.toString());
+			HSSFRow row1 = sheet.createRow(1);
+			HSSFCell cell = null;
+			for (int i = 0; i < headColumns.length; i++) {
+				// 创建列
+				cell = row1.createCell(i);
+				// 定义单元格为字符串类型
+				cell.setCellType(HSSFCell.CELL_TYPE_STRING);
+				// 设置单元格的样式
+				cell.setCellStyle(style);
+				// 设置单元格的值
+				if(i != 0){
+					cell.setCellValue(headColumns[i]);
+				}
+			}
+			HSSFRow row = null;
+			// 添加数据
+			V data = null;
+			Object obj = null;
+			StandardEvaluationContext context = null;
+			int size = dataset.size() + 1;
+			for (int i = 2; i <= size; i++) {
+				data = dataset.get(i - 1);
+				if (data != null) {
+
+					context = new StandardEvaluationContext(data);
+					row = sheet.createRow(i);
+					for (int j = 0; j < fieldColumns.length; j++) {
+						cell = row.createCell(j);
+						try {
+							if(data instanceof Map) {
+								obj = ((Map<?, ?>) data).get(fieldColumns[j]);
+							}else {
+								obj = expressionParser.parseExpression(fieldColumns[j]).getValue(context);
+							}
+							if (obj instanceof Date) {
+								obj = sdf.format(obj);
+							}
+
+						} catch (Exception e) {
+							LOGGER.warn(e.getMessage());
+							obj = null;
+						}
+						if (obj != null) {
+							cell.setCellValue(obj.toString());
+						} else {
+							cell.setCellValue("");
+						}
+					}
+					if(StringUtils.isEmpty(row.getCell(0).toString())){
+						sheet.addMergedRegion(new CellRangeAddress(i, i, 0, 10));
+					}
+				}
+			}
+		}
+		return workbook;
+	}
+
 	/**
 	 * 将数据集dataset导出到fileName文件中(只支持.xlsx格式)
 	 *