Ver código fonte

1.小程序老师学生添加导出

yuanliang 1 ano atrás
pai
commit
3a2c958e1a

+ 15 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/OssFileService.java

@@ -0,0 +1,15 @@
+package com.yonge.cooleshow.biz.dal.service;
+
+import com.yonge.cooleshow.biz.dal.wrapper.OssFileWrapper;
+
+import java.util.List;
+
+/**
+ * @author oss文件操作
+ */
+public interface OssFileService {
+
+
+    OssFileWrapper.ExportFile uploadFile(List<?> dataList, Class<?> clazz,
+                                         String fileName, String sheetName);
+}

+ 76 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/OssFileServiceImpl.java

@@ -0,0 +1,76 @@
+package com.yonge.cooleshow.biz.dal.service.impl;
+
+import com.alibaba.excel.EasyExcel;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.microsvc.toolkit.common.tools.DownloadManager;
+import com.microsvc.toolkit.middleware.oss.OssPluginContext;
+import com.microsvc.toolkit.middleware.oss.impl.TencentOssPlugin;
+import com.yonge.cooleshow.biz.dal.service.OssFileService;
+import com.yonge.cooleshow.biz.dal.wrapper.OssFileWrapper;
+import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.utils.http.HttpUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.joda.time.DateTime;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.File;
+import java.text.MessageFormat;
+import java.util.List;
+
+/**
+ * @author OSS 文件通用处理
+ */
+@Slf4j
+@Service
+public class OssFileServiceImpl implements OssFileService {
+
+    @Autowired
+    private OssPluginContext ossPluginContext;
+
+    @Override
+    public OssFileWrapper.ExportFile uploadFile(List<?> dataList, Class<?> clazz,
+                                                String fileName, String sheetName) {
+        if (CollectionUtils.isEmpty(dataList)) {
+            throw new BizException("导出数据为空");
+        }
+
+        // OSS上传文件目录
+        String uploadOssPath = MessageFormat.format("excel-download/{0}", DateTime.now().toString("yyyy-MM"));
+
+        // 文件上传下载地址
+        String uploadPath = MessageFormat.format("{0}/{1}-{2}.xlsx", uploadOssPath, String.valueOf(IdWorker.getId()),
+                DateTime.now().toString("MMddHHmmss"));
+
+        // 本地文件地址
+        String localPath = DownloadManager.getInstance().path(uploadPath);
+        log.debug("pageExport localPath={}", localPath);
+
+        // 模板文件保存在springboot项目的resources/static下
+        // Resource resource = new ClassPathResource("static/预报名模板导出.xlsx");
+
+        EasyExcel
+                .write(localPath, clazz)
+                //.withTemplate(resource.getStream()) // 利用模板的输出流
+                .sheet(0, sheetName)
+                .doWrite(dataList);
+
+        // 上传本地文件到OSS服务器
+        String downloadPath = ossPluginContext.getPluginService(TencentOssPlugin.PLUGIN_NAME)
+                .uploadFile(uploadOssPath, new File(localPath));
+        log.debug("pageExport downloadPath={}", downloadPath);
+
+        // 删除本地缓存文件
+        DownloadManager.getInstance().deleteOnExit(localPath);
+
+        // 学生统计下载
+        return OssFileWrapper.ExportFile
+                .builder()
+                .fileName(MessageFormat.format("{0}.xlsx", fileName))
+                .downloadPath(HttpUtil.getSortUrl(downloadPath))
+                .build();
+    }
+
+
+}

+ 12 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java

@@ -248,11 +248,19 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         Map<Long, String> subjectMap = subjects.stream().collect(Collectors.toMap(Subject::getId, Subject::getName));
 
         List<Long> userIds = teacherVos.stream().map(Teacher::getUserId).distinct().collect(Collectors.toList());
-        List<MusicSheetUploadCountVo> musicSheetUploadCountVos = musicSheetService.countByUser(userIds);
-        Map<Long, Integer> countByUser = musicSheetUploadCountVos.stream()
-                .collect(Collectors.toMap(MusicSheetUploadCountVo::getUserId, MusicSheetUploadCountVo::getCount));
+
+        List<MusicSheet> musicSheets = musicSheetService.lambdaQuery()
+                .in(MusicSheet::getUserId, userIds)
+                .eq(MusicSheet::getDelFlag, false)
+                .eq(MusicSheet::getState, 1)
+                .eq(MusicSheet::getSourceType, "TEACHER").list();
+
+        Map<Long, List<MusicSheet>> groupByUserId = musicSheets.stream().collect(Collectors.groupingBy(MusicSheet::getUserId));
         for (TeacherVo teacherVo : teacherVos) {
-            teacherVo.setMusicSheetCount(countByUser.getOrDefault(teacherVo.getUserId(), 0));
+            List<MusicSheet> musicSheetList = groupByUserId.getOrDefault(teacherVo.getUserId(), new ArrayList<>());
+            teacherVo.setMusicSheetCount(musicSheetList.size());
+            List<String> names = musicSheetList.stream().map(MusicSheet::getMusicSheetName).collect(Collectors.toList());
+            teacherVo.setMusicSheetName(String.join(",", names));
             if (null == teacherVo.getSubjectId()) {
                 continue;
             }

+ 4 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentVo.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -72,6 +73,9 @@ public class StudentVo extends Student {
     @ApiModelProperty(value = "imToken")
     private String imToken;
 
+    @ApiModelProperty(value = "小组")
+    private String tenantGroupName;
+
 
     private String imUserId;
 

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherVo.java

@@ -96,6 +96,9 @@ public class TeacherVo extends Teacher {
     @ApiModelProperty("曲谱数量")
     private Integer musicSheetCount;
 
+    @ApiModelProperty("曲谱名称")
+    private String musicSheetName;
+
 
     public YesOrNoEnum getDelFlag() {
         return delFlag;

+ 30 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/OssFileWrapper.java

@@ -0,0 +1,30 @@
+package com.yonge.cooleshow.biz.dal.wrapper;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * OSS 文件模型
+ */
+@ApiModel(value = "OssFileWrapper对象", description = "文件通用模型")
+public class OssFileWrapper {
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel("导出文件的模型")
+    public static class ExportFile {
+
+        @ApiModelProperty("文件名称")
+        private String fileName;
+
+        @ApiModelProperty("下载地址")
+        private String downloadPath;
+    }
+}

+ 16 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/StudentWrapper.java

@@ -181,6 +181,22 @@ public class StudentWrapper {
     }
 
     @Data
+    public static class ExportStudentTemplate {
+
+        @ExcelProperty(value = "姓名")
+        private String userName;
+
+        @ExcelProperty(value = "手机号")
+        private String phone;
+
+        @ExcelProperty(value = "声部")
+        private String subjectName;
+
+        @ExcelProperty(value = "小组")
+        private String tenantGroupName;
+    }
+
+    @Data
     @ApiModel("学生修改机构")
     public static class StudentUpdateTenant {
 

+ 35 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/teacher/TeacherWrapper.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.wrapper.teacher;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.fastjson.JSON;
 import com.yonge.cooleshow.common.enums.ESettlementFrom;
 import io.swagger.annotations.ApiModel;
@@ -123,4 +124,38 @@ public class TeacherWrapper {
         @NotNull
         private Long tenantId;
     }
+
+    @Data
+    public static class ExportTeacherTemplate {
+
+        @ExcelProperty(value = "姓名")
+        private String userName;
+
+        @ExcelProperty(value = "手机号")
+        private String phone;
+
+        @ExcelProperty(value = "曲谱")
+        private String musicSheet;
+
+        @ExcelProperty(value = "声部")
+        private String subjectName;
+
+        @ExcelProperty(value = "结算方式")
+        private String settlementFrom;
+
+    }
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel("导出数据")
+    public static class ExportFile {
+
+        @ApiModelProperty("文件名称")
+        private String fileName;
+
+        @ApiModelProperty("下载地址")
+        private String downloadPath;
+    }
 }

+ 43 - 4
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/StudentController.java

@@ -6,18 +6,23 @@ import com.google.common.collect.ImmutableList;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentSearch;
+import com.yonge.cooleshow.biz.dal.dto.search.TeacherSearch;
 import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.entity.TenantActivationCode;
 import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.service.ImUserFriendService;
+import com.yonge.cooleshow.biz.dal.service.OssFileService;
 import com.yonge.cooleshow.biz.dal.service.StudentService;
 import com.yonge.cooleshow.biz.dal.service.TeacherService;
 import com.yonge.cooleshow.biz.dal.service.TenantActivationCodeService;
 import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
 import com.yonge.cooleshow.biz.dal.vo.StudentVo;
+import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
+import com.yonge.cooleshow.biz.dal.wrapper.OssFileWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.StudentWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.teacher.TeacherWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.enums.BizHttpStatus;
@@ -48,7 +53,9 @@ import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -63,18 +70,17 @@ public class StudentController extends BaseController {
 
     @Autowired
     private StudentService studentService;
-    @Autowired
-    private TeacherService teacherService;
     @Resource
     private SysUserFeignService sysUserFeignService;
     @Autowired
-    private ImUserFriendService imUserFriendService;
-    @Autowired
     private TenantInfoService tenantInfoService;
 
     @Autowired
     private TenantActivationCodeService tenantActivationCodeService;
 
+    @Autowired
+    private OssFileService ossFileService;
+
     @GetMapping("/detail/{id}")
     @ApiOperation(value = "详情", notes = "传入id")
     public HttpResponseResult<StudentVo> detail(@PathVariable("id") Long id) {
@@ -131,6 +137,39 @@ public class StudentController extends BaseController {
         return succeed(PageUtil.pageInfo(pages));
     }
 
+    @GetMapping("/exportStudent")
+    @ApiOperation(value = "导出学生", notes = "传入TeacherSearch")
+    public HttpResponseResult<OssFileWrapper.ExportFile> exportTeacher(@RequestBody StudentSearch query) {
+        TenantInfo tenantInfo = getTenantInfo();
+        query.setTenantId(tenantInfo.getId());
+        query.setDelFlag(YesOrNoEnum.NO);
+        query.setLockFlag(UserLockFlag.NORMAL);
+        query.setOrderBy("u.username_ asc");
+        query.setPage(1);
+        query.setRows(9999);
+
+        IPage<StudentVo> pages = studentService.selectPage(PageUtil.getPage(query), query);
+        List<StudentVo> rows = pages.getRecords();
+
+        if (rows.isEmpty()) {
+            throw new BizException("没有可导出数据");
+        }
+
+        List<StudentWrapper.ExportStudentTemplate> templateList = rows.stream().map(next -> {
+            StudentWrapper.ExportStudentTemplate template = new StudentWrapper.ExportStudentTemplate();
+            template.setUserName(next.getUsername());
+            template.setPhone(next.getPhone());
+            template.setSubjectName(next.getSubjectName());
+            template.setTenantGroupName(next.getTenantGroupName());
+            return template;
+        }).collect(Collectors.toList());
+
+        String format = new SimpleDateFormat("yyyyMMddHHmm").format(new Date());
+        OssFileWrapper.ExportFile exportFile = ossFileService.uploadFile(templateList,
+                StudentWrapper.ExportStudentTemplate.class, format, "学生");
+        return succeed(exportFile);
+    }
+
     @PostMapping("/save")
     @ApiOperation(value = "新增/修改", notes = "传入Student")
     public HttpResponseResult<Boolean> save(

+ 42 - 0
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TeacherController.java

@@ -10,9 +10,11 @@ import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.entity.TeacherStyleVideo;
 import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
+import com.yonge.cooleshow.biz.dal.service.OssFileService;
 import com.yonge.cooleshow.biz.dal.service.TeacherService;
 import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
 import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
+import com.yonge.cooleshow.biz.dal.wrapper.OssFileWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.teacher.TeacherWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -35,6 +37,8 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -52,6 +56,9 @@ public class TeacherController extends BaseController {
     @Autowired
     private TenantInfoService tenantInfoService;
 
+    @Autowired
+    private OssFileService ossFileService;
+
     /**
      * 查询单条
      */
@@ -103,6 +110,41 @@ public class TeacherController extends BaseController {
         return succeed(PageUtil.pageInfo(pages));
     }
 
+
+    @GetMapping("/exportTeacher")
+    @ApiOperation(value = "导出老师", notes = "传入TeacherSearch")
+    public HttpResponseResult<OssFileWrapper.ExportFile> exportTeacher(@RequestBody TeacherSearch query) {
+        TenantInfo tenantInfo = getTenantInfo();
+        query.setTenantId(tenantInfo.getId());
+        query.setDelFlag(YesOrNoEnum.NO);
+        query.setLockFlag(UserLockFlag.NORMAL);
+        query.setPage(1);
+        query.setRows(9999);
+        query.setOrderBy("u.username_ asc");
+
+        IPage<TeacherVo> pages = teacherService.selectPage(PageUtil.getPage(query), query);
+        List<TeacherVo> rows = pages.getRecords();
+
+        if (rows.isEmpty()) {
+            throw new BizException("没有可导出数据");
+        }
+
+        List<TeacherWrapper.ExportTeacherTemplate> templates = rows.stream().map(next -> {
+            TeacherWrapper.ExportTeacherTemplate template = new TeacherWrapper.ExportTeacherTemplate();
+            template.setUserName(next.getUsername());
+            template.setPhone(next.getPhone());
+            template.setMusicSheet(next.getMusicSheetName());
+            template.setSubjectName(next.getSubjectName());
+            template.setSettlementFrom(next.getSettlementFrom() == null ? "" : next.getSettlementFrom().getMsg());
+            return template;
+        }).collect(Collectors.toList());
+
+        String format = new SimpleDateFormat("yyyyMMddHHmm").format(new Date());
+        OssFileWrapper.ExportFile exportFile = ossFileService.uploadFile(templates,
+                TeacherWrapper.ExportTeacherTemplate.class, format, "老师");
+        return succeed(exportFile);
+    }
+
     /**
      * 新增或修改
      */