Commit db9fd770 authored by libin's avatar libin

会员订单列表

parent c3e616a4
......@@ -36,4 +36,5 @@ public class MemberOrderFindDTO extends PageParam {
private String facilitatePhone;
private Boolean isExport;
private List<Integer> userIds;
private Boolean isPay;
}
......@@ -69,6 +69,6 @@ public class OrderMemberController extends BaseController<OrderMemberDetailBiz,
@PostMapping("/export")
@ResponseBody
public void exportMemberOrders(@RequestBody MemberOrderFindDTO memberOrderFindDTO, HttpServletResponse response){
orderMemberService.exportMemberOrderData(memberOrderFindDTO);
// orderMemberService.exportMemberOrderData(memberOrderFindDTO);
}
}
\ No newline at end of file
......@@ -9,6 +9,7 @@ import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.rest.UserRestInterface;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.util.excel.ExcelExport;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.activity.feign.ActivityFeign;
......@@ -34,13 +35,21 @@ import com.xxfc.platform.vehicle.feign.VehicleFeign;
import lombok.extern.log4j.Log4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest;
import java.io.FileOutputStream;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Function;
import java.util.stream.Collectors;
......@@ -188,13 +197,74 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz
* 导出数据
* @param memberOrderFindDTO
*/
public void exportMemberOrderData(MemberOrderFindDTO memberOrderFindDTO){
public void exportMemberOrderData(MemberOrderFindDTO memberOrderFindDTO) throws Exception{
MemberOrderPageVo memberOrderPageVo = listMemberOrderPage(memberOrderFindDTO);
List<MemberOrderBo> memberOrderBoList = memberOrderPageVo.getMemberOrderPage().getData();
ExcelWriter excelWriter = ExcelUtil.getWriter();
MemberOrderStatisticsBo memberOrderStatisticsBo = memberOrderPageVo.getMemberOrderStatisticsBo();
FileOutputStream fileOutputStream = new FileOutputStream("ts.xlsx");
ExcelExport excelExport = new ExcelExport();
Workbook workbook = excelExport.getWorkbook();
Sheet sheet = workbook.createSheet();
CellStyle cellStyleHeader01 = workbook.createCellStyle();
cellStyleHeader01.setAlignment(HorizontalAlignment.CENTER);
sheet.autoSizeColumn(9);
Row row1 = sheet.createRow(0);
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("YYYYMMddHHmmss");
createHeader(row1,0,new String[]{dateTimeFormatter.format(LocalDateTime.now())+"会员订单列表"},cellStyleHeader01);
CellRangeAddress cellRangeAddress = new CellRangeAddress(0,0,0,9);
sheet.addMergedRegion(cellRangeAddress);
Row row2 = sheet.createRow(1);
Cell row2_cell1 = row2.createCell(0);
row2_cell1.setCellValue("统计");
row2_cell1.setCellStyle(cellStyleHeader01);
CellRangeAddress cellRangeAddress2 = new CellRangeAddress(1,2,0,0);
sheet.addMergedRegion(cellRangeAddress2);
String[] header2 = new String[]{"会员订单总数(单)","会员订单总额(元)","钻石会员订单(单)","钻石会员订单总额(元)","黄金会员订单(单)","黄金会员订单总额(元)","普通会员订单(单)","普通会员订单总额(元)"};
createHeader(row2,1,header2,cellStyleHeader01);
String[] countData = getData(memberOrderStatisticsBo);
createCellCount(row2,1,countData,cellStyleHeader01);
Row row3 = sheet.createRow(4);
String[] header3 = new String[]{"订单号","创建时间","订单状态","名称","用户姓名","手机号","上级姓名/手机号","促成人姓名/手机号","订单价格(元)","优惠金额(元)","实付金额(元)","支付时间"};
CellRangeAddress cellRangeAddress3 = new CellRangeAddress(3,3,0,header3.length);
sheet.addMergedRegion(cellRangeAddress3);
createHeader(row3,0,header3,cellStyleHeader01);
workbook.write(fileOutputStream);
fileOutputStream.close();
workbook.close();
}
private String[] getData(MemberOrderStatisticsBo memberOrderStatisticsBo){
String totalAmount = String.valueOf(memberOrderStatisticsBo.getTotalAmount());
String totalDiamondAmount = String.valueOf(memberOrderStatisticsBo.getDiamondOrderNum());
String totalGoldAmount = String.valueOf(memberOrderStatisticsBo.getTotalGoldAmount());
String totalGeneralAmount = String.valueOf(memberOrderStatisticsBo.getTotalGeneralAmount());
return new String[]{totalAmount,totalDiamondAmount,totalGoldAmount,totalGeneralAmount};
}
private void createHeader(Row row, int cellStartIndex, String[] header, CellStyle cellStyle){
for (int i =0 ;i<header.length;i++){
Cell cell = row.createCell(cellStartIndex);
cell.setCellValue(header[i]);
cell.setCellStyle(cellStyle);
cellStartIndex+=1;
}
}
private void createCellCount(Row row,int CellStartIndex,String[] data,CellStyle cellStyle){
for(int i=CellStartIndex,y=0;i<data.length;i++,y++){
Cell cell = row.createCell(i);
cell.setCellValue(Objects.toString(data[y]));
cell.setCellStyle(cellStyle);
}
}
public MemberOrderPageVo listMemberOrderPage(MemberOrderFindDTO memberOrderFindDTO) {
MemberOrderPageVo memberOrderPageVo = new MemberOrderPageVo();
MemberOrderStatisticsBo memberOrderStatisticsBo = new MemberOrderStatisticsBo();
......@@ -217,14 +287,16 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz
}
if (memberOrderFindDTO.getPage() == 1){
memberOrderFindDTO.setUserIds(userIds);
memberOrderFindDTO.setIsPay(true);
List<MemberOrderBo> baseOrders = baseOrderBiz.findMemberOrders(memberOrderFindDTO);
if (CollectionUtils.isEmpty(baseOrders)){
/* if (CollectionUtils.isEmpty(baseOrders)){
memberOrderPageVo.setMemberOrderStatisticsBo(memberOrderStatisticsBo);
memberOrderPageVo.setMemberOrderPage(pageDataVO);
return memberOrderPageVo;
}
}*/
memberOrderStatisticsBo = getMemberOrderStatisticsBo(baseOrders);
}
memberOrderFindDTO.setIsPay(false);
memberOrderPageVo.setMemberOrderStatisticsBo(memberOrderStatisticsBo);
List<MemberOrderBo> memberOrderBoList;
......@@ -274,24 +346,24 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz
private MemberOrderStatisticsBo getMemberOrderStatisticsBo(List<MemberOrderBo> baseOrders){
MemberOrderStatisticsBo memberOrderStatisticsBo = new MemberOrderStatisticsBo();
Map<Integer, List<MemberOrderBo>> baseOrderMap = baseOrders.stream().collect(Collectors.groupingBy(MemberOrderBo::getMemberLevel, Collectors.toList()));
Map<BigDecimal, List<MemberOrderBo>> baseOrderMap = baseOrders.stream().collect(Collectors.groupingBy(MemberOrderBo::getOrderAmount, Collectors.toList()));
memberOrderStatisticsBo.setOrderNum(baseOrders.size());
BigDecimal totalAmount = baseOrders.stream().map(MemberOrderBo::getOrderAmount).reduce(BigDecimal.ZERO, (x, y) -> x.add(y));
memberOrderStatisticsBo.setTotalAmount(totalAmount);
List<MemberOrderBo> diamondOrders = baseOrderMap.get(levelEnum.DIAMOND.getLevel());
List<MemberOrderBo> diamondOrders = baseOrderMap.get(levelEnum.DIAMOND.getPrice());
diamondOrders = diamondOrders ==null?Collections.EMPTY_LIST:diamondOrders;
memberOrderStatisticsBo.setDiamondOrderNum(diamondOrders.size());
BigDecimal diamondAmount = diamondOrders.stream().map(MemberOrderBo::getOrderAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
memberOrderStatisticsBo.setTotalDiamondAmount(diamondAmount);
List<MemberOrderBo> goldOrders = baseOrderMap.get(levelEnum.GOLD.getLevel());
List<MemberOrderBo> goldOrders = baseOrderMap.get(levelEnum.GOLD.getPrice());
goldOrders = goldOrders==null?Collections.EMPTY_LIST:goldOrders;
memberOrderStatisticsBo.setGoldOrderNum(goldOrders.size());
BigDecimal goldAmount = goldOrders.stream().map(MemberOrderBo::getOrderAmount).reduce(BigDecimal.ZERO, (x, y) -> x.add(y));
memberOrderStatisticsBo.setTotalGoldAmount(goldAmount);
List<MemberOrderBo> generalOrders = baseOrderMap.get(levelEnum.GENERAL.getLevel());
List<MemberOrderBo> generalOrders = baseOrderMap.get(levelEnum.GENERAL.getPrice());
generalOrders = generalOrders==null?Collections.EMPTY_LIST:generalOrders;
memberOrderStatisticsBo.setGeneralOrderNum(generalOrders.size());
BigDecimal generalAmount = generalOrders.stream().map(MemberOrderBo::getOrderAmount).reduce(BigDecimal.ZERO, (x, y) -> x.add(y));
......@@ -300,24 +372,24 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz
return memberOrderStatisticsBo;
}
private enum levelEnum{
DIAMOND(3,"钻石会员"),
GOLD(2,"黄金会员"),
GENERAL(1,"普通会员");
DIAMOND(new BigDecimal("0.20"),"钻石会员"),
GOLD(new BigDecimal("0.10"),"黄金会员"),
GENERAL(new BigDecimal("0.05"),"普通会员");
levelEnum(Integer level, String desc) {
this.level = level;
levelEnum(BigDecimal price, String desc) {
this.price = price;
this.desc = desc;
}
private Integer level;
private BigDecimal price;
private String desc;
public Integer getLevel() {
return level;
public BigDecimal getPrice() {
return price;
}
public void setLevel(Integer level) {
this.level = level;
public void setPrice(BigDecimal price) {
this.price = price;
}
public String getDesc() {
......
......@@ -303,7 +303,7 @@
FROM
`base_order`
WHERE
type = 3 and <![CDATA[`member_level`<>0]]>
type = 3
<if test="orderNo!=null and orderNo!=''">
and `no`=#{orderNo}
</if>
......@@ -334,6 +334,9 @@
<if test="endPayTime!=null and startPayTime==null">
and `pay_time` <![CDATA[<=#{endPayTime}]]>
</if>
<if test="isPay == true">
and `has_pay`=1
</if>
<if test="userIds!=null and userIds.size()>0">
and `user_id` IN
<foreach collection="userIds" item="userId" separator="," open="(" close=")">
......
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