记得上下班打卡 | git大法好,push需谨慎

Commit 773a3169 authored by GaoHu's avatar GaoHu

导出销售数据

parent 2886e204
package com.liquidnet.client.admin.web.controller.zhengzai.smile; package com.liquidnet.client.admin.web.controller.zhengzai.smile;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.liquidnet.client.admin.common.core.controller.BaseController; import com.liquidnet.client.admin.common.core.controller.BaseController;
import com.liquidnet.client.admin.common.core.domain.AjaxResult;
import com.liquidnet.client.admin.common.core.page.TableDataInfo;
import com.liquidnet.client.admin.zhengzai.smile.dto.SaleDataVo; import com.liquidnet.client.admin.zhengzai.smile.dto.SaleDataVo;
import com.liquidnet.client.admin.zhengzai.smile.dto.ShowSort;
import com.liquidnet.client.admin.zhengzai.smile.dto.SmilePriceParam;
import com.liquidnet.client.admin.zhengzai.smile.dto.SmileShowParam;
import com.liquidnet.client.admin.zhengzai.smile.service.ISmileShowService; import com.liquidnet.client.admin.zhengzai.smile.service.ISmileShowService;
import com.liquidnet.commons.lang.util.DateUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
/** /**
* @author TT * @author TT
*/ */
@Api(tags = "演出管理") @Api(tags = "演出管理")
@Controller @Controller
@RequestMapping("/smile/show/base") @RequestMapping("/smile/show/base")
@Slf4j
public class SmileShowBaseController extends BaseController { public class SmileShowBaseController extends BaseController {
private String prefix = "zhengzai/smile"; private String prefix = "zhengzai/smile";
...@@ -42,6 +49,39 @@ public class SmileShowBaseController extends BaseController { ...@@ -42,6 +49,39 @@ public class SmileShowBaseController extends BaseController {
return prefix + "/smileTickets/saleData"; return prefix + "/smileTickets/saleData";
} }
@GetMapping("/export")
@ApiOperation("单个演出销售列表导出")
@ResponseBody
public void export(String perId, HttpServletResponse response) {
ServletOutputStream servletOutputStream = null;
try {
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=".concat(DateUtil.Formatter.ddHHmmssTrim.format(LocalDateTime.now()))
.concat(new String(("单个演出销售列表导出").getBytes("gb2312"), StandardCharsets.ISO_8859_1)).concat(ExcelTypeEnum.XLSX.getValue()));
response.setContentType(MediaType.MULTIPART_FORM_DATA_VALUE);
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
servletOutputStream = response.getOutputStream();
//数据查询
/*
SaleDataVo saleDataVo = smileShowService.saleData(performancesId);
List<UserDataExcel> rowsToExcels = new ArrayList<>();
saleDataVo.getUserDataList().forEach(userData -> rowsToExcels.add(UserDataExcel.getNew().copy(userData)));
EasyExcel.write(servletOutputStream,UserDataExcel.class).sheet(saleDataVo.getTitle() + "演出销售列表导出").doWrite(rowsToExcels);
*/
smileShowService.exportData(servletOutputStream,perId);
} catch (IOException e) {
log.error("单个演出销售列表导出异常[performancesId={},ex.msg={}]", perId, e.getLocalizedMessage());
} finally {
if (null != servletOutputStream) {
try {
servletOutputStream.close();
} catch (Exception ignored) {
}
}
}
}
/*@GetMapping("/saleDataTest/{performancesId}") /*@GetMapping("/saleDataTest/{performancesId}")
@ApiOperation("销售数据Test") @ApiOperation("销售数据Test")
@ApiImplicitParams({ @ApiImplicitParams({
......
...@@ -10,6 +10,8 @@ import com.liquidnet.client.admin.zhengzai.smile.dto.SmilePriceParam; ...@@ -10,6 +10,8 @@ import com.liquidnet.client.admin.zhengzai.smile.dto.SmilePriceParam;
import com.liquidnet.client.admin.zhengzai.smile.dto.SmileShowParam; import com.liquidnet.client.admin.zhengzai.smile.dto.SmileShowParam;
import com.liquidnet.service.smile.entity.SmileSchool; import com.liquidnet.service.smile.entity.SmileSchool;
import javax.servlet.ServletOutputStream;
/** /**
* <p> * <p>
* 服务类 * 服务类
...@@ -68,4 +70,6 @@ public interface ISmileShowService extends IService<SmileSchool> { ...@@ -68,4 +70,6 @@ public interface ISmileShowService extends IService<SmileSchool> {
*/ */
AjaxResult updateRedis(); AjaxResult updateRedis();
void exportData(ServletOutputStream servletOutputStream, String performancesId);
} }
package com.liquidnet.client.admin.zhengzai.smile.service.impl; package com.liquidnet.client.admin.zhengzai.smile.service.impl;
import com.alibaba.excel.EasyExcelFactory;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.WriteTable;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
...@@ -8,6 +12,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; ...@@ -8,6 +12,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.Page; import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.google.common.collect.Lists;
import com.liquidnet.client.admin.common.core.domain.AjaxResult; import com.liquidnet.client.admin.common.core.domain.AjaxResult;
import com.liquidnet.client.admin.common.core.page.TableDataInfo; import com.liquidnet.client.admin.common.core.page.TableDataInfo;
import com.liquidnet.client.admin.common.utils.StringUtils; import com.liquidnet.client.admin.common.utils.StringUtils;
...@@ -40,11 +45,13 @@ import org.springframework.data.mongodb.core.query.Criteria; ...@@ -40,11 +45,13 @@ import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.servlet.ServletOutputStream;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -486,5 +493,100 @@ public class SmileShowServiceImpl extends ServiceImpl<SmileSchoolMapper, SmileSc ...@@ -486,5 +493,100 @@ public class SmileShowServiceImpl extends ServiceImpl<SmileSchoolMapper, SmileSc
return showAgentVo; return showAgentVo;
} }
@Override
public void exportData(ServletOutputStream servletOutputStream, String performancesId) {
ExcelWriter writer = EasyExcelFactory.write(servletOutputStream).build();
// 动态添加表头,适用一些表头动态变化的场景
SaleDataVo saleDataVo = saleData(performancesId);
WriteSheet sheet1 = new WriteSheet();
sheet1.setSheetName(saleDataVo.getTitle().concat("演出数据"));
sheet1.setSheetNo(0);
List<UserData> userDataList = saleDataVo.getUserDataList();
ArrayList<String> ticketList = Lists.newArrayList();
List<ShowAgentVo> agentVoList = saleDataVo.getShowAgentVoList();
agentVoList.forEach(showAgentVo -> ticketList.add(showAgentVo.getTitle()));
// 创建一个表格,用于 Sheet 中使用
WriteTable table = new WriteTable();
table.setTableNo(1);
table.setHead(head(ticketList));
// 写数据
if (userDataList != null) {
writer.write(contentData(userDataList, agentVoList), sheet1, table);
}
writer.finish();
}
private List<List<String>> head(List<String> ticketList) {
List<List<String>> headTitles = new ArrayList<>();
String basicInfo = "代理数据";
String ticket = "票数据";
String saleData = "销售数据";
headTitles.add(Lists.newArrayList(basicInfo, basicInfo, "uid"));
headTitles.add(Lists.newArrayList(basicInfo, basicInfo, "姓名"));
/* headTitles.add(Lists.newArrayList(basicInfo, basicInfo, "性别"));
headTitles.add(Lists.newArrayList(basicInfo, basicInfo, "手机号"));*/
headTitles.add(Lists.newArrayList(basicInfo, basicInfo, "所属地区"));
headTitles.add(Lists.newArrayList(basicInfo, basicInfo, "身份"));
//做表
ticketList.forEach(title -> headTitles.add(Lists.newArrayList(ticket, ticket, title)));
ArrayList<String> dataList = Lists.newArrayList("总销售张数", "总销售金额", "总销售佣金", "打款状态");
//做表
dataList.forEach(dataStr -> headTitles.add(Lists.newArrayList(saleData, saleData, dataStr)));
return headTitles;
}
private List<List<Object>> contentData(List<UserData> userDataList, List<ShowAgentVo> agentVoList) {
List<List<Object>> contentList = Lists.newArrayList();
//这里一个List<Object>才代表一行数据,需要映射成每行数据填充,横向填充(把实体数据的字段设置成一个List<Object>)
// contentList.add(Lists.newArrayList("测试", "商品A", "苹果🍎"));
userDataList.forEach(userData -> {
//总销售张数
BigDecimal num = new BigDecimal("0");
//总销售金额
BigDecimal price = new BigDecimal("0");
//总销售佣金
BigDecimal commission = new BigDecimal("0");
ArrayList<Object> arrayList = Lists.newArrayList();
arrayList.add(userData.getUid());
arrayList.add(userData.getUsername());
arrayList.add(userData.getCityName());
arrayList.add(userData.getType() == 1 ? "总代" : "普代");
//便利票数据
List<UserDataAgentVo> dataAgentVos = userData.getDataAgentVos();
Map<String, UserDataAgentVo> agentVoMap = dataAgentVos.stream().collect(Collectors.toMap(UserDataAgentVo::getTicketsId, Function.identity()));
//遍历agentVoList顺序塞值
for (ShowAgentVo showAgentVo : agentVoList) {
UserDataAgentVo userDataAgentVo = agentVoMap.get(showAgentVo.getTicketId());
if (userDataAgentVo != null) {
num = num.add(new BigDecimal(userDataAgentVo.getNumber().toString()));
price = price.add(userDataAgentVo.getPrice().multiply(userDataAgentVo.getNumber()));
commission = commission.add(userDataAgentVo.getCommission());
arrayList.add(userDataAgentVo.getNumber());
}else {
arrayList.add(0);
}
}
/* for (UserDataAgentVo userDataAgentVo : dataAgentVos) {
num = num.add(new BigDecimal(userDataAgentVo.getNumber().toString()));
price = price.add(userDataAgentVo.getPrice().multiply(userDataAgentVo.getNumber()));
commission = commission.add(userDataAgentVo.getCommission());
arrayList.add(userDataAgentVo.getNumber());
}*/
arrayList.add(num);
arrayList.add(price);
arrayList.add(commission);
arrayList.add(userData.getPriceStatus() != null && userData.getPriceStatus() == 0 ? "已打款" : "待打款");
contentList.add(arrayList);
});
return contentList;
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment