刘俊驰 6 months ago
parent
commit
d1b6a81239

+ 94 - 0
mec-application/src/main/java/com/ym/mec/web/controller/TempDirectorTrainingCampDetailController.java

@@ -1,23 +1,40 @@
 package com.ym.mec.web.controller;
 
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.microsvc.toolkit.common.response.paging.PageInfo;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.microsvc.toolkit.common.response.template.R;
+import com.microsvc.toolkit.common.tools.DownloadManager;
+import com.microsvc.toolkit.middleware.oss.OssPluginContext;
+import com.microsvc.toolkit.middleware.oss.impl.TencentOssPlugin;
+import com.ym.mec.biz.dal.entity.TempDirectorTrainingCamp;
 import com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampDetailWrapper;
 import com.ym.mec.biz.service.TempDirectorTrainingCampDetailService;
+import com.ym.mec.biz.service.TempDirectorTrainingCampService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.joda.time.DateTime;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import java.io.File;
+import java.text.MessageFormat;
+import java.util.List;
 
 @Api(tags = "乐队指导训练营活动")
 @RestController
+@Slf4j
 @RequestMapping("${app-config.url.web:}/tempDirectorTrainingDetailCamp")
 public class TempDirectorTrainingCampDetailController extends BaseController {
     /**
@@ -26,8 +43,13 @@ public class TempDirectorTrainingCampDetailController extends BaseController {
     @Resource
     private TempDirectorTrainingCampDetailService tempDirectorTrainingCampDetailService;
 
+    @Autowired
+    private OssPluginContext ossPluginContext;
 
 
+    @Autowired
+    private TempDirectorTrainingCampService tempDirectorTrainingCampService;
+
 
     @ApiOperation(value = "分页获取")
     @PostMapping("/queryPage")
@@ -41,6 +63,38 @@ public class TempDirectorTrainingCampDetailController extends BaseController {
     }
 
 
+
+    @ApiOperation(value = "导出")
+    @PostMapping("/export")
+    public HttpResponseResult<TempDirectorTrainingCampDetailWrapper.DownloadInfo> export(@RequestBody TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailQuery queryInfo){
+        if (queryInfo.getTempDirectorTrainingCampId()==null) {
+            return failed("训练营编号不能为空");
+        }
+
+
+        IPage<TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetail> tempDirectorTrainingCampIPage = tempDirectorTrainingCampDetailService.queryPage(new Page<>(1,-1), queryInfo);
+        List<TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetail> records = tempDirectorTrainingCampIPage.getRecords();
+        if (records.size()==0) {
+            return failed("没有可导出数据");
+        }
+        TempDirectorTrainingCamp trainingCamp = tempDirectorTrainingCampService.getById(queryInfo.getTempDirectorTrainingCampId());
+
+        for (TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetail record : records) {
+            record.setCityInfo(record.getProvince()+record.getCity()+record.getRegion());
+            if (StringUtils.isNotBlank(record.getPaymentStatus())) {
+                if ("PAID".equals(record.getPaymentStatus())) {
+                    record.setPaymentStatusName("已缴费");
+                } else if ("NO".equals(record.getPaymentStatus())) {
+                    record.setPaymentStatusName("未缴费");
+                } else if ("REFUND".equals(record.getPaymentStatus())) {
+                    record.setPaymentStatusName("已退费");
+                }
+            }
+        }
+        TempDirectorTrainingCampDetailWrapper.DownloadInfo downloadInfo = generateExportExcelFile(records, TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetail.class, trainingCamp.getName()+"导出", trainingCamp.getName()+"导出");
+        return succeed(downloadInfo);
+    }
+
     @ApiOperation(value = "统计")
     @PostMapping("/queryPageStat")
     public HttpResponseResult<TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailStat> queryPageStat(@RequestBody TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailQuery queryInfo){
@@ -49,5 +103,45 @@ public class TempDirectorTrainingCampDetailController extends BaseController {
         }
         return succeed(tempDirectorTrainingCampDetailService.queryPageStat(queryInfo));
     }
+
+
+    private TempDirectorTrainingCampDetailWrapper.DownloadInfo generateExportExcelFile(List<?> orderExports, Class<?> clazz, String fileName, String sheetName) {
+
+        // OSS上传文件目录
+        String uploadOssPath = MessageFormat.format("excel-download/{0}", DateTime.now().toString("yyyy-MM"));
+
+        // 文件上传下载地址
+        String uploadPath = MessageFormat.format("{0}/{1}-{2}.xlsx", uploadOssPath, fileName, 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)
+            .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
+            //.withTemplate(resource.getStream()) // 利用模板的输出流
+            .sheet(0, sheetName)
+            .doWrite(orderExports);
+
+        // 上传本地文件到OSS服务器
+        String downloadPath = ossPluginContext.getPluginService(TencentOssPlugin.PLUGIN_NAME)
+            .uploadFile(uploadOssPath, new File(localPath));
+        log.debug("pageExport downloadPath={}", downloadPath);
+
+        // 删除本地缓存文件
+        DownloadManager.getInstance().deleteOnExit(localPath);
+
+        // 学生统计下载
+        return TempDirectorTrainingCampDetailWrapper.DownloadInfo
+            .builder()
+            .fileName(MessageFormat.format("{0}.xlsx", fileName))
+            .downloadPath(downloadPath)
+            .build();
+    }
+
 }
 

+ 5 - 0
mec-biz/pom.xml

@@ -35,6 +35,11 @@
 			<artifactId>mec-thirdparty</artifactId>
 		</dependency>
 
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel</artifactId>
+            <version>2.2.6</version>
+        </dependency>
 		<dependency>
 			<groupId>com.ym</groupId>
 			<artifactId>snakerflowy</artifactId>

+ 48 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/TempDirectorTrainingCampDetailWrapper.java

@@ -1,5 +1,7 @@
 package com.ym.mec.biz.dal.wrapper;
 
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -7,7 +9,10 @@ import com.microsvc.toolkit.common.response.paging.QueryInfo;
 import com.ym.mec.biz.dal.dto.PayParamBasicDto;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
@@ -159,69 +164,97 @@ public class TempDirectorTrainingCampDetailWrapper {
 
 
         @ApiModelProperty(value = "主键")
+        @ExcelIgnore
         private Integer id;
 
         @ApiModelProperty(value = "训练营编号")
+        @ExcelIgnore
         private Integer tempDirectorTrainingCampId;
 
         @ApiModelProperty(value = "姓名")
+        @ExcelProperty(value = "姓名",order = 1)
         private String username;
 
         @ApiModelProperty(value = "手机号")
+        @ExcelProperty(value = "联系电话",order = 2)
         private String mobile;
 
         @ApiModelProperty(value = "身份证号")
+        @ExcelProperty(value = "身份证号",order = 3)
         private String cardNo;
 
         @ApiModelProperty(value = "省份")
+        @ExcelIgnore
         private String province;
 
         @ApiModelProperty(value = "省份")
+        @ExcelIgnore
         private String provinceCode;
 
         @ApiModelProperty(value = "城市")
+        @ExcelIgnore
         private String cityCode;
 
         @ApiModelProperty(value = "城市")
+        @ExcelIgnore
         private String city;
 
         @ApiModelProperty(value = "区县")
+        @ExcelIgnore
         private String regionCode;
 
         @ApiModelProperty(value = "区县")
+        @ExcelIgnore
         private String region;
 
+        @ExcelProperty(value = "所在城市",order = 4)
+        private String cityInfo;
+
         @ApiModelProperty(value = "已缴费 PAID,未缴费 NO,已退费 REFUND")
+        @ExcelIgnore
         private String paymentStatus = "NO";
 
+        @ExcelProperty(value = "缴费状态",order = 10)
+        private String paymentStatusName;
+
         @ApiModelProperty(value = "缴费金额")
+        @ExcelProperty(value = "缴费金额",order = 11)
         private String paymentAmount;
 
         @ApiModelProperty(value = "是否早鸟报名")
+        @ExcelIgnore
         private Boolean birdFlag = false;
 
         @ApiModelProperty(value = "缴费时间")
+        @ExcelProperty(value = "缴费时间",order = 12)
         private String paymentDate;
 
         @ApiModelProperty(value = "职业")
+        @ExcelProperty(value = "目前从事职业",order = 5)
         private String job;
 
         @ApiModelProperty(value = "声部")
+        @ExcelProperty(value = "第一主专业",order = 6)
         private String subjectName;
 
         @ApiModelProperty(value = "之前乐队指导学习基础")
+        @ExcelProperty(value = "之前乐队指导学习基础",order = 7)
         private String study;
 
         @ApiModelProperty(value = "目标效果")
+        @ExcelProperty(value = "目标效果",order = 8)
         private String studyTarget;
 
         @ApiModelProperty(value = "需求或建议")
+        @ExcelProperty(value = "需求或建议",order = 9)
         private String suggestion;
 
         @ApiModelProperty(value = "创建时间")
+        @ExcelIgnore
         private Date createTime;
 
         @ApiModelProperty(value = "修改时间")
+        @ExcelIgnore
         private Date updateTime;
     }
 
@@ -245,4 +278,19 @@ public class TempDirectorTrainingCampDetailWrapper {
         private BigDecimal payAmount;
 
     }
+
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class DownloadInfo {
+
+        @ApiModelProperty("文件名称")
+        private String fileName;
+
+        @ApiModelProperty("下载地址")
+        private String downloadPath;
+
+    }
 }