Commit cb47c6f8 authored by unset's avatar unset

会员统计信息修改

parent 746592d0
...@@ -12,21 +12,8 @@ import java.math.BigDecimal; ...@@ -12,21 +12,8 @@ import java.math.BigDecimal;
*/ */
@Data @Data
public class MemberOrderStatisticsBo { public class MemberOrderStatisticsBo {
//0为全部,其他为会员等级
private Integer type;
private Integer orderNum; private Integer orderNum;
private BigDecimal totalAmount; private BigDecimal totalAmount;
/**
* 钻石
*/
private Integer diamondOrderNum;
private BigDecimal totalDiamondAmount;
/**
* 黄金
*/
private Integer goldOrderNum;
private BigDecimal totalGoldAmount;
/**
* 普通
*/
private Integer generalOrderNum;
private BigDecimal totalGeneralAmount;
} }
...@@ -5,6 +5,8 @@ import com.xxfc.platform.order.pojo.dto.MemberOrderBo; ...@@ -5,6 +5,8 @@ import com.xxfc.platform.order.pojo.dto.MemberOrderBo;
import com.xxfc.platform.order.pojo.dto.MemberOrderStatisticsBo; import com.xxfc.platform.order.pojo.dto.MemberOrderStatisticsBo;
import lombok.Data; import lombok.Data;
import java.util.List;
/** /**
* @author libin * @author libin
* @version 1.0 * @version 1.0
...@@ -13,6 +15,6 @@ import lombok.Data; ...@@ -13,6 +15,6 @@ import lombok.Data;
*/ */
@Data @Data
public class MemberOrderPageVo { public class MemberOrderPageVo {
private MemberOrderStatisticsBo memberOrderStatisticsBo; private List<MemberOrderStatisticsBo> memberOrderStatisticsBo;
private PageDataVO<MemberOrderBo> memberOrderPage; private PageDataVO<MemberOrderBo> memberOrderPage;
} }
...@@ -70,7 +70,7 @@ public class OrderMemberDetailBiz extends BaseBiz<OrderMemberDetailMapper,OrderM ...@@ -70,7 +70,7 @@ public class OrderMemberDetailBiz extends BaseBiz<OrderMemberDetailMapper,OrderM
List<BaseUserMemberLevel> baseUserMemberLevelList = userFeign.levels(); List<BaseUserMemberLevel> baseUserMemberLevelList = userFeign.levels();
if (baseUserMemberLevelList != null && baseUserMemberLevelList.size() > 0) { if (baseUserMemberLevelList != null && baseUserMemberLevelList.size() > 0) {
BaseOrder baseOrder = new BaseOrder(); BaseOrder baseOrder = new BaseOrder();
AtomicReference<BaseUserMemberLevel> currentLevel = null; AtomicReference<BaseUserMemberLevel> currentLevel = new AtomicReference<>();
baseUserMemberLevelList.parallelStream().forEach(baseUserMemberLevel -> { baseUserMemberLevelList.parallelStream().forEach(baseUserMemberLevel -> {
if (dto.getMemberLevel().equals(baseUserMemberLevel.getLevel())) { if (dto.getMemberLevel().equals(baseUserMemberLevel.getLevel())) {
currentLevel.set(baseUserMemberLevel); currentLevel.set(baseUserMemberLevel);
...@@ -95,6 +95,7 @@ public class OrderMemberDetailBiz extends BaseBiz<OrderMemberDetailMapper,OrderM ...@@ -95,6 +95,7 @@ public class OrderMemberDetailBiz extends BaseBiz<OrderMemberDetailMapper,OrderM
baseOrder.setOrderOrigin(3); baseOrder.setOrderOrigin(3);
baseOrder.setCrtUser(userDTO.getUsername()); baseOrder.setCrtUser(userDTO.getUsername());
baseOrder.setCrtName(userDTO.getName()); baseOrder.setCrtName(userDTO.getName());
baseOrder.setVersion(1);
baseOrderBiz.insertSelectiveRe(baseOrder); baseOrderBiz.insertSelectiveRe(baseOrder);
OrderMemberDetail orderMemberDetail = new OrderMemberDetail(); OrderMemberDetail orderMemberDetail = new OrderMemberDetail();
orderMemberDetail.setOrderId(baseOrder.getId()); orderMemberDetail.setOrderId(baseOrder.getId());
......
package com.xxfc.platform.order.service; package com.xxfc.platform.order.service;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.map.MapUtil;
import com.github.wxiaoqi.security.admin.bo.UserBo; import com.github.wxiaoqi.security.admin.bo.UserBo;
import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel; import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel;
import com.github.wxiaoqi.security.admin.feign.UserFeign; import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.rest.UserRestInterface; import com.github.wxiaoqi.security.admin.feign.rest.UserRestInterface;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig; import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.common.enumconstant.LevelEnum;
import com.github.wxiaoqi.security.common.exception.BaseException; import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.util.process.ResultCode; import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.vo.PageDataVO; import com.github.wxiaoqi.security.common.vo.PageDataVO;
...@@ -59,381 +59,396 @@ import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER; ...@@ -59,381 +59,396 @@ import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER;
@Log4j @Log4j
public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz, MemberBO> implements UserRestInterface { public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz, MemberBO> implements UserRestInterface {
@Autowired @Autowired
TourFeign tourFeign; TourFeign tourFeign;
@Autowired
VehicleFeign vehicleFeign;
@Autowired @Autowired
VehicleFeign vehicleFeign; ThirdFeign thirdFeign;
@Autowired @Autowired
ThirdFeign thirdFeign; private BaseOrderBiz baseOrderBiz;
@Autowired @Autowired
private BaseOrderBiz baseOrderBiz; private UserFeign userFeign;
@Autowired
private UserFeign userFeign; private static Integer IS_CHILD = 1;
private static Integer LEVEL_DEFAULT = 0;
private static Integer NUMBER_ZERO = 0;
private static Integer IS_CHILD = 1; private static Long autoCancelTime;
private static Integer LEVEL_DEFAULT = 0;
private static Integer NUMBER_ZERO = 0; @Autowired
private static Long autoCancelTime; OrderCostDetailBiz orderCostDetailBiz;
@Autowired @Autowired
OrderCostDetailBiz orderCostDetailBiz; OrderTemplateBiz orderTemplateBiz;
@Autowired @Autowired
OrderTemplateBiz orderTemplateBiz; protected UserAuthConfig userAuthConfig;
@Autowired @Autowired
protected UserAuthConfig userAuthConfig; ActivityFeign activityFeign;
@Autowired @Autowired
ActivityFeign activityFeign; public HttpServletRequest request;
@Autowired private SimpleDateFormat simleFormatter = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
public HttpServletRequest request;
private DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("YYYYMMddHHmmss");
private SimpleDateFormat simleFormatter = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
@PostConstruct
private DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("YYYYMMddHHmmss"); public void init() {
this.channel = Coupon.CHANNEL_MEMBER;
@PostConstruct this.orderTypeEnum = OrderTypeEnum.MEMBER;
public void init() { }
this.channel = Coupon.CHANNEL_MEMBER;
this.orderTypeEnum = OrderTypeEnum.MEMBER; @Override
} public void initDetail(MemberBO bo) {
super.initDetail(bo);
@Override initDictionary();
public void initDetail(MemberBO bo) { BaseUserMemberLevel buml = userFeign.level(bo.getMemberLevel());
super.initDetail(bo); if (!bo.getMemberLevelId().equals(buml.getId())) {
initDictionary(); throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, new HashSet<String>() {{
BaseUserMemberLevel buml = userFeign.level(bo.getMemberLevel()); add("MemberLevelId 和 MemberLevel不对称");
if (!bo.getMemberLevelId().equals(buml.getId())) { }});
throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, new HashSet<String>() {{ }
add("MemberLevelId 和 MemberLevel不对称"); bo.setBaseUserMemberLevel(buml);
}}); bo.setRentFreeNum(buml.getNumber());
} bo.setRebate(buml.getDiscount());
bo.setBaseUserMemberLevel(buml); }
bo.setRentFreeNum(buml.getNumber());
bo.setRebate(buml.getDiscount()); public void initDictionary() {
} dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
this.autoCancelTime = Long.valueOf(dictionaryMap.get(APP_ORDER + "_" + DictionaryKey.ACT_MEMBER).getDetail());
public void initDictionary() { }
dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
this.autoCancelTime = Long.valueOf(dictionaryMap.get(APP_ORDER + "_" + DictionaryKey.ACT_MEMBER).getDetail()); @Override
} public void handleDetail(MemberBO bo) {
//设置订单状态为3
@Override bo.getOrder().setStatus(OrderStatusEnum.ORDER_UNPAY.getCode());
public void handleDetail(MemberBO bo) { //设置订单图片
//设置订单状态为3 bo.getOrder().setPicture(bo.getBaseUserMemberLevel().getItemImg());
bo.getOrder().setStatus(OrderStatusEnum.ORDER_UNPAY.getCode()); //设置订单名称
//设置订单图片 bo.getOrder().setName(bo.getBaseUserMemberLevel().getName());
bo.getOrder().setPicture(bo.getBaseUserMemberLevel().getItemImg());
//设置订单名称 OrderItem memberItem = bo.getItemByTypeEnum(ItemTypeEnum.MEMBER);
bo.getOrder().setName(bo.getBaseUserMemberLevel().getName()); BigDecimal amount = memberItem.getTotalAmount();
OrderItem memberItem = bo.getItemByTypeEnum(ItemTypeEnum.MEMBER); //如果有使用优惠券,则扣减
BigDecimal amount = memberItem.getTotalAmount(); if (BigDecimal.ZERO.compareTo(bo.getOrder().getCouponAmount()) < 0) {
activityFeign.use(bo.getOrder().getUserId(), bo.getTickerNo(), bo.getOrder().getNo(), channel, amount, ActivityFeign.TYPE_USE);
//如果有使用优惠券,则扣减 }
if (BigDecimal.ZERO.compareTo(bo.getOrder().getCouponAmount()) < 0) {
activityFeign.use(bo.getOrder().getUserId(), bo.getTickerNo(), bo.getOrder().getNo(), channel, amount, ActivityFeign.TYPE_USE); super.handleDetail(bo);
}
//发送定时取消订单(30分钟)
super.handleDetail(bo); rabbitProduct.sendDelayMessage(bo.getOrder(), autoCancelTime);
}
//发送定时取消订单(30分钟)
rabbitProduct.sendDelayMessage(bo.getOrder(), autoCancelTime); @Override
} public void handleCalculate(MemberBO bo) {
OrderPriceVO tpv = calculatePrice(bo);
@Override BeanUtil.copyProperties(tpv, bo.getOrder());
public void handleCalculate(MemberBO bo) { BeanUtil.copyProperties(tpv, bo);
OrderPriceVO tpv = calculatePrice(bo); }
BeanUtil.copyProperties(tpv, bo.getOrder());
BeanUtil.copyProperties(tpv, bo); @Override
} public OrderPriceVO calculatePrice(MemberBO detail) {
BigDecimal orderAmount = BigDecimal.ZERO;
@Override BigDecimal goodsAmount = BigDecimal.ZERO;
public OrderPriceVO calculatePrice(MemberBO detail) { BigDecimal realAmount = BigDecimal.ZERO;
BigDecimal orderAmount = BigDecimal.ZERO; BigDecimal couponAmount = BigDecimal.ZERO;
BigDecimal goodsAmount = BigDecimal.ZERO;
BigDecimal realAmount = BigDecimal.ZERO; //设置Item
BigDecimal couponAmount = BigDecimal.ZERO; OrderItem memberOrderItem = orderItemBiz.initOrderItem(detail.getBaseUserMemberLevel().getPrice(), 1, detail.getBaseUserMemberLevel().getName(), detail.getBaseUserMemberLevel().getId(), ItemTypeEnum.MEMBER);
//设置Item detail.setItems(new ArrayList<OrderItem>());
OrderItem memberOrderItem = orderItemBiz.initOrderItem(detail.getBaseUserMemberLevel().getPrice(), 1, detail.getBaseUserMemberLevel().getName(), detail.getBaseUserMemberLevel().getId(), ItemTypeEnum.MEMBER); detail.getItems().add(memberOrderItem);
detail.setItems(new ArrayList<OrderItem>()); //商品价格
detail.getItems().add(memberOrderItem); goodsAmount = goodsAmount.add(memberOrderItem.getCalculateAmount(Boolean.TRUE));
//商品价格 //vehicleAmount 优惠券处理
goodsAmount = goodsAmount.add(memberOrderItem.getCalculateAmount(Boolean.TRUE)); if (null != detail.getTickerNo() && detail.getTickerNo().size() > 0) {
couponAmount = activityFeign.use(detail.getOrder().getUserId(), detail.getTickerNo(), detail.getOrder().getNo(), channel, goodsAmount, ActivityFeign.TYPE_NO_USE);
//vehicleAmount 优惠券处理 if (couponAmount.compareTo(BigDecimal.ZERO) > 0) {
if (null != detail.getTickerNo() && detail.getTickerNo().size() > 0) { detail.getOrder().setCouponTickerNos(detail.getTickerNo().stream().collect(Collectors.joining(",")));
couponAmount = activityFeign.use(detail.getOrder().getUserId(), detail.getTickerNo(), detail.getOrder().getNo(), channel, goodsAmount, ActivityFeign.TYPE_NO_USE); detail.getOrder().setHasDiscount(SYS_TRUE);
if (couponAmount.compareTo(BigDecimal.ZERO) > 0) { memberOrderItem.handleCouponAmount(couponAmount);
detail.getOrder().setCouponTickerNos(detail.getTickerNo().stream().collect(Collectors.joining(","))); }
detail.getOrder().setHasDiscount(SYS_TRUE); }
memberOrderItem.handleCouponAmount(couponAmount);
//订单总价格
orderAmount = orderAmount.add(goodsAmount);
//真实价格
realAmount = realAmount.add(orderAmount).subtract(couponAmount);
//生成订单明细
OrderPriceVO opv = new OrderPriceVO();
opv.setOrderAmount(orderAmount);
opv.setGoodsAmount(goodsAmount);
opv.setRealAmount(realAmount);
opv.setCouponAmount(couponAmount);
return opv;
}
/**
* 导出数据
*
* @param memberOrderFindDTO
*/
public void exportMemberOrderData(MemberOrderFindDTO memberOrderFindDTO, String name, OutputStream outputStream) throws Exception {
MemberOrderPageVo memberOrderPageVo = listMemberOrderPage(memberOrderFindDTO);
List<MemberOrderBo> memberOrderBoList = memberOrderPageVo.getMemberOrderPage().getData();
List<MemberOrderStatisticsBo> memberOrderStatisticsBo = memberOrderPageVo.getMemberOrderStatisticsBo();
XSSFWorkbook hssfWorkbook = new XSSFWorkbook();
XSSFSheet sheet = hssfWorkbook.createSheet(name + "会员订单列表");
CellStyle headerCellStyle = createHeaderCellStyle(hssfWorkbook);
CellStyle generalCellStyle = createGeneralCellStyle(hssfWorkbook);
Row row1 = sheet.createRow(0);
createHeader(row1, 0, new String[]{name + "会员订单列表"}, headerCellStyle);
CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 0, 0, 11);
sheet.addMergedRegion(cellRangeAddress);
Row row2 = sheet.createRow(1);
Cell row2_cell1 = row2.createCell(0);
row2_cell1.setCellValue("统计");
row2_cell1.setCellStyle(headerCellStyle);
CellRangeAddress cellRangeAddress2 = new CellRangeAddress(1, 2, 0, 0);
sheet.addMergedRegion(cellRangeAddress2);
String[] header2 = new String[1];
List<Integer> levelIds = memberOrderStatisticsBo.stream().map(MemberOrderStatisticsBo::getType).collect(Collectors.toList());
if (levelIds != null && levelIds.size() > 0) {
List<BaseUserMemberLevel> list = new ArrayList<>();
List<BaseUserMemberLevel> levelList = userFeign.levels();
Map<Integer, List<BaseUserMemberLevel>> map = levelList.stream().collect(Collectors.groupingBy(BaseUserMemberLevel::getLevel));
if (MapUtil.isNotEmpty(map)) {
levelIds.parallelStream().forEach(integer -> {
if (map.get(integer) != null) {
list.addAll(map.get(integer));
}
});
List<BaseUserMemberLevel> newList = list.stream().sorted(Comparator.comparing(BaseUserMemberLevel::getLevel)).collect(Collectors.toList());
header2 = new String[newList.size() + 1];
for (int i = 0; i < newList.size(); i ++) {
header2[2*i + 2] = newList.get(i).getName() + "订单(单)";
header2[2*i + 3] = newList.get(i).getName() + "订单总额(元)";
}
} }
}
createHeader(row2, 1, header2, headerCellStyle);
String[] countData = getData(memberOrderStatisticsBo);
Row row4 = sheet.createRow(2);
createCellCount(row4, 1, countData, generalCellStyle);
Row row5 = sheet.createRow(4);
String[] header3 = new String[]{"订单号", "创建时间", "订单状态", "名称", "用户姓名", "手机号", "上级姓名/手机号", "促成人姓名/手机号", "订单价格(元)", "优惠金额(元)", "实付金额(元)", "支付时间"};
CellRangeAddress cellRangeAddress3 = new CellRangeAddress(3, 3, 0, header3.length);
sheet.addMergedRegion(cellRangeAddress3);
createHeader(row5, 0, header3, headerCellStyle);
for (int i = 0; i < header3.length; i++) {
sheet.setColumnWidth(i, 24 * 256);
}
List<String[]> orderDataList = getMemberOrderDataList(memberOrderBoList, 12);
createMemberOrderCellData(sheet, 5, generalCellStyle, orderDataList);
hssfWorkbook.write(outputStream);
hssfWorkbook.close();
}
private List<String[]> getMemberOrderDataList(List<MemberOrderBo> memberOrderBoList, Integer size) {
List<String[]> memerOrderData = new ArrayList<>();
String[] data;
for (MemberOrderBo memberOrderBo : memberOrderBoList) {
data = new String[size];
data[0] = memberOrderBo.getOrderNo();
data[1] = simleFormatter.format(memberOrderBo.getCreatTime());
data[2] = memberOrderBo.getStatus() == 2 ? "取消" : memberOrderBo.getStatus() == 3 ? "待支付" : memberOrderBo.getStatus() == 6 ? "已完成" : "";
data[3] = memberOrderBo.getName();
data[4] = memberOrderBo.getUserName();
data[5] = memberOrderBo.getPhone() == null ? "" : memberOrderBo.getPhone();
data[6] = String.format("%s/%s", memberOrderBo.getLeaderName() == null ? "" : memberOrderBo.getLeaderName(), memberOrderBo.getLeaderPhone() == null ? "" : memberOrderBo.getLeaderPhone());
data[7] = String.format("%s/%s", memberOrderBo.getFacilitateName() == null ? "" : memberOrderBo.getFacilitateName(), memberOrderBo.getFacilitatePhone() == null ? "" : memberOrderBo.getFacilitatePhone());
data[8] = memberOrderBo.getOrderAmount().toString();
data[9] = memberOrderBo.getCouponAmount().toString();
data[10] = memberOrderBo.getRealAmount().toString();
data[11] = memberOrderBo.getPayTime() == null ? "" : simleFormatter.format(new Date(memberOrderBo.getPayTime()));
memerOrderData.add(data);
}
return memerOrderData;
}
private CellStyle createGeneralCellStyle(XSSFWorkbook hssfWorkbook) {
CellStyle cellStyleGeneral = createHeaderCellStyle(hssfWorkbook);
cellStyleGeneral.setWrapText(true);
XSSFFont generalFont = createFont(hssfWorkbook);
generalFont.setBold(false);
cellStyleGeneral.setFont(generalFont);
return cellStyleGeneral;
}
private CellStyle createHeaderCellStyle(XSSFWorkbook hssfWorkbook) {
XSSFCellStyle cellStyleHeader = hssfWorkbook.createCellStyle();
cellStyleHeader.setAlignment(HorizontalAlignment.CENTER);
cellStyleHeader.setVerticalAlignment(VerticalAlignment.CENTER);
cellStyleHeader.setLocked(false);
XSSFFont headerFont = createFont(hssfWorkbook);
cellStyleHeader.setFont(headerFont);
return cellStyleHeader;
}
private XSSFFont createFont(XSSFWorkbook hssfWorkbook) {
XSSFFont font = hssfWorkbook.createFont();
font.setFontName("黑体");
font.setBold(true);
return font;
}
private String[] getData(List<MemberOrderStatisticsBo> memberOrderStatisticsBoList) {
String[] strings = new String[memberOrderStatisticsBoList.size() * 2];
for (int i = 0; i < memberOrderStatisticsBoList.size(); i ++ ) {
strings[2*i] = String.valueOf(memberOrderStatisticsBoList.get(i).getOrderNum());
strings[2*i + 1] = String.valueOf(memberOrderStatisticsBoList.get(i).getTotalAmount());
} }
return strings;
//订单总价格 }
orderAmount = orderAmount.add(goodsAmount);
//真实价格 private void createHeader(Row row, int cellStartIndex, String[] header, CellStyle cellStyle) {
realAmount = realAmount.add(orderAmount).subtract(couponAmount); for (int i = 0; i < header.length; i++) {
Cell cell = row.createCell(cellStartIndex);
//生成订单明细 cell.setCellValue(header[i]);
OrderPriceVO opv = new OrderPriceVO(); cell.setCellStyle(cellStyle);
opv.setOrderAmount(orderAmount); cellStartIndex += 1;
opv.setGoodsAmount(goodsAmount); }
opv.setRealAmount(realAmount); }
opv.setCouponAmount(couponAmount);
private void createMemberOrderCellData(Sheet sheet, int startRowIndex, CellStyle cellStyle, List<String[]> memberOrderList) {
return opv; for (String[] data : memberOrderList) {
} Row row = sheet.createRow(startRowIndex++);
createCellCount(row, 0, data, cellStyle);
}
/** }
* 导出数据
* @param memberOrderFindDTO private void createCellCount(Row row, int CellStartIndex, String[] data, CellStyle cellStyle) {
*/ for (int i = CellStartIndex, y = 0; y < data.length; i++, y++) {
public void exportMemberOrderData(MemberOrderFindDTO memberOrderFindDTO,String name,OutputStream outputStream) throws Exception{ Cell cell = row.createCell(i);
MemberOrderPageVo memberOrderPageVo = listMemberOrderPage(memberOrderFindDTO); cell.setCellStyle(cellStyle);
List<MemberOrderBo> memberOrderBoList = memberOrderPageVo.getMemberOrderPage().getData(); cell.setCellValue(data[y]);
MemberOrderStatisticsBo memberOrderStatisticsBo = memberOrderPageVo.getMemberOrderStatisticsBo();
}
XSSFWorkbook hssfWorkbook = new XSSFWorkbook(); }
XSSFSheet sheet = hssfWorkbook.createSheet(name+"会员订单列表");
CellStyle headerCellStyle = createHeaderCellStyle(hssfWorkbook); public MemberOrderPageVo listMemberOrderPage(MemberOrderFindDTO memberOrderFindDTO) {
CellStyle generalCellStyle = createGeneralCellStyle(hssfWorkbook); MemberOrderPageVo memberOrderPageVo = new MemberOrderPageVo();
List<MemberOrderStatisticsBo> memberOrderStatisticsBo = new ArrayList<>();
Row row1 = sheet.createRow(0); List<Integer> userIds = new ArrayList<>();
createHeader(row1,0,new String[]{name+"会员订单列表"},headerCellStyle); PageDataVO<MemberOrderBo> pageDataVO = new PageDataVO<>();
CellRangeAddress cellRangeAddress = new CellRangeAddress(0,0,0,11); pageDataVO.setPageNum(memberOrderFindDTO.getPage());
sheet.addMergedRegion(cellRangeAddress); pageDataVO.setPageSize(memberOrderFindDTO.getLimit());
pageDataVO.setData(Collections.EMPTY_LIST);
Row row2 = sheet.createRow(1); if (Objects.nonNull(memberOrderFindDTO.getEndPayTime())) {
Cell row2_cell1 = row2.createCell(0); Long payEndTime = memberOrderFindDTO.getEndPayTime() + (1000 * 60 * 60 * 24);
row2_cell1.setCellValue("统计"); memberOrderFindDTO.setEndPayTime(payEndTime);
row2_cell1.setCellStyle(headerCellStyle); }
CellRangeAddress cellRangeAddress2 = new CellRangeAddress(1,2,0,0); boolean isNoNullUserName = StringUtils.isNotEmpty(memberOrderFindDTO.getName()) && memberOrderFindDTO.getName().trim().length() > 0;
sheet.addMergedRegion(cellRangeAddress2); boolean isNoNullPhone = StringUtils.isNotEmpty(memberOrderFindDTO.getPhone()) && memberOrderFindDTO.getPhone().trim().length() > 0;
String[] header2 = new String[]{"会员订单总数(单)","会员订单总额(元)","钻石会员订单(单)","钻石会员订单总额(元)","黄金会员订单(单)","黄金会员订单总额(元)","普通会员订单(单)","普通会员订单总额(元)"}; boolean isNoNullLeaderPhone = StringUtils.isNotEmpty(memberOrderFindDTO.getLeaderPhone()) && memberOrderFindDTO.getLeaderPhone().trim().length() > 0;
createHeader(row2,1,header2,headerCellStyle); if (isNoNullLeaderPhone || isNoNullPhone || isNoNullUserName) {
String[] countData = getData(memberOrderStatisticsBo); userIds = userFeign.findAppUserIds(memberOrderFindDTO.getPhone(), memberOrderFindDTO.getLeaderPhone(), memberOrderFindDTO.getName());
Row row4 = sheet.createRow(2); if (CollectionUtils.isEmpty(userIds)) {
createCellCount(row4,1,countData,generalCellStyle); memberOrderPageVo.setMemberOrderStatisticsBo(memberOrderStatisticsBo);
memberOrderPageVo.setMemberOrderPage(pageDataVO);
Row row5 = sheet.createRow(4); return memberOrderPageVo;
String[] header3 = new String[]{"订单号","创建时间","订单状态","名称","用户姓名","手机号","上级姓名/手机号","促成人姓名/手机号","订单价格(元)","优惠金额(元)","实付金额(元)","支付时间"}; }
CellRangeAddress cellRangeAddress3 = new CellRangeAddress(3,3,0,header3.length); }
sheet.addMergedRegion(cellRangeAddress3); if (memberOrderFindDTO.getPage() == 1) {
createHeader(row5,0,header3,headerCellStyle); memberOrderFindDTO.setUserIds(userIds);
memberOrderFindDTO.setIsPay(true);
for(int i=0;i<header3.length;i++){ List<MemberOrderBo> baseOrders = baseOrderBiz.findMemberOrders(memberOrderFindDTO);
sheet.setColumnWidth(i,24*256); memberOrderStatisticsBo = getMemberOrderStatisticsBo(baseOrders);
} }
List<String[]> orderDataList = getMemberOrderDataList(memberOrderBoList, 12); memberOrderFindDTO.setIsPay(false);
createMemberOrderCellData(sheet,5,generalCellStyle,orderDataList); memberOrderPageVo.setMemberOrderStatisticsBo(memberOrderStatisticsBo);
hssfWorkbook.write(outputStream);
hssfWorkbook.close(); List<MemberOrderBo> memberOrderBoList;
if (!memberOrderFindDTO.getIsExport()) {
} memberOrderFindDTO.setUserIds(userIds);
pageDataVO = baseOrderBiz.findMemberOrderPage(memberOrderFindDTO);
private List<String[]> getMemberOrderDataList(List<MemberOrderBo> memberOrderBoList,Integer size){ memberOrderBoList = pageDataVO.getData();
List<String[]> memerOrderData = new ArrayList<>(); if (CollectionUtils.isEmpty(memberOrderBoList)) {
String[] data; memberOrderPageVo.setMemberOrderStatisticsBo(memberOrderStatisticsBo);
for (MemberOrderBo memberOrderBo : memberOrderBoList) { memberOrderPageVo.setMemberOrderPage(pageDataVO);
data = new String[size]; return memberOrderPageVo;
data[0]=memberOrderBo.getOrderNo(); }
data[1]=simleFormatter.format(memberOrderBo.getCreatTime()); } else {
data[2]=memberOrderBo.getStatus()==2?"取消":memberOrderBo.getStatus()==3?"待支付":memberOrderBo.getStatus()==6?"已完成":""; memberOrderFindDTO.setUserIds(userIds);
data[3]=memberOrderBo.getName(); memberOrderBoList = baseOrderBiz.findMemberOrders(memberOrderFindDTO);
data[4]=memberOrderBo.getUserName(); }
data[5]=memberOrderBo.getPhone()==null?"":memberOrderBo.getPhone(); memberOrderBoList = getUserBos(memberOrderBoList);
data[6]=String.format("%s/%s",memberOrderBo.getLeaderName()==null?"":memberOrderBo.getLeaderName(),memberOrderBo.getLeaderPhone()==null?"":memberOrderBo.getLeaderPhone()); pageDataVO.setData(memberOrderBoList);
data[7]=String.format("%s/%s",memberOrderBo.getFacilitateName()==null?"":memberOrderBo.getFacilitateName(),memberOrderBo.getFacilitatePhone()==null?"":memberOrderBo.getFacilitatePhone()); memberOrderPageVo.setMemberOrderPage(pageDataVO);
data[8]=memberOrderBo.getOrderAmount().toString(); return memberOrderPageVo;
data[9]=memberOrderBo.getCouponAmount().toString(); }
data[10]=memberOrderBo.getRealAmount().toString();
data[11]=memberOrderBo.getPayTime()==null?"":simleFormatter.format(new Date(memberOrderBo.getPayTime())); private List<MemberOrderBo> getUserBos(List<MemberOrderBo> memberOrderBoList) {
memerOrderData.add(data); List<UserBo> userBos = memberOrderBoList.stream().map(x -> {
} UserBo userBo = new UserBo();
return memerOrderData; userBo.setUserId(x.getUserId());
} userBo.setOrderNo(x.getOrderNo());
userBo.setFacilitateId(x.getFacilitateId());
private CellStyle createGeneralCellStyle(XSSFWorkbook hssfWorkbook){ return userBo;
CellStyle cellStyleGeneral = createHeaderCellStyle(hssfWorkbook); }).collect(Collectors.toList());
cellStyleGeneral.setWrapText(true); List<UserBo> userDTOList = userFeign.findUserDetailByUserBo(userBos);
XSSFFont generalFont = createFont(hssfWorkbook); Map<String, UserBo> userBoMap = userDTOList.stream().collect(Collectors.toMap(UserBo::getOrderNo, Function.identity()));
generalFont.setBold(false); for (MemberOrderBo memberOrderBo : memberOrderBoList) {
cellStyleGeneral.setFont(generalFont); UserBo userBo = userBoMap.get(memberOrderBo.getOrderNo());
return cellStyleGeneral; if (Objects.nonNull(userBo)) {
} memberOrderBo.setUserName(userBo.getName());
memberOrderBo.setPhone(userBo.getPhone());
private CellStyle createHeaderCellStyle(XSSFWorkbook hssfWorkbook){ memberOrderBo.setLeaderName(userBo.getLeaderName());
XSSFCellStyle cellStyleHeader = hssfWorkbook.createCellStyle(); memberOrderBo.setLeaderPhone(userBo.getLeaderPhone());
cellStyleHeader.setAlignment(HorizontalAlignment.CENTER); memberOrderBo.setFacilitateName(userBo.getFacilitateName());
cellStyleHeader.setVerticalAlignment(VerticalAlignment.CENTER); memberOrderBo.setCouponAmount(memberOrderBo.getCouponAmount() == null ? BigDecimal.ZERO : memberOrderBo.getCouponAmount());
cellStyleHeader.setLocked(false); memberOrderBo.setRealAmount(memberOrderBo.getRealAmount() == null ? BigDecimal.ZERO : memberOrderBo.getRealAmount());
XSSFFont headerFont = createFont(hssfWorkbook); }
cellStyleHeader.setFont(headerFont); }
return cellStyleHeader; return memberOrderBoList;
} }
private XSSFFont createFont(XSSFWorkbook hssfWorkbook){ private List<MemberOrderStatisticsBo> getMemberOrderStatisticsBo(List<MemberOrderBo> baseOrders) {
XSSFFont font = hssfWorkbook.createFont(); List<MemberOrderStatisticsBo> list = new ArrayList<>();
font.setFontName("黑体"); Map<Integer, List<MemberOrderBo>> map = baseOrders.stream().collect(Collectors.groupingBy(MemberOrderBo::getMemberLevel));//按照c1分组
font.setBold(true); if (MapUtil.isEmpty(map)) {
return font; return list;
}
private String[] getData(MemberOrderStatisticsBo memberOrderStatisticsBo){
String orderNum = String.valueOf(memberOrderStatisticsBo.getOrderNum());
String totalAmount = String.valueOf(memberOrderStatisticsBo.getTotalAmount());
String diamondOrderNum = String.valueOf(memberOrderStatisticsBo.getDiamondOrderNum());
String totalDiamondAmount = String.valueOf(memberOrderStatisticsBo.getDiamondOrderNum());
String goldOrderNum = String.valueOf(memberOrderStatisticsBo.getGoldOrderNum());
String totalGoldAmount = String.valueOf(memberOrderStatisticsBo.getTotalGoldAmount());
String generalOrderNum = String.valueOf(memberOrderStatisticsBo.getGeneralOrderNum());
String totalGeneralAmount = String.valueOf(memberOrderStatisticsBo.getTotalGeneralAmount());
return new String[]{orderNum,totalAmount,diamondOrderNum,totalDiamondAmount,goldOrderNum,totalGoldAmount,generalOrderNum,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 createMemberOrderCellData(Sheet sheet,int startRowIndex,CellStyle cellStyle,List<String[]> memberOrderList){
for (String[] data : memberOrderList) {
Row row = sheet.createRow(startRowIndex++);
createCellCount(row,0,data,cellStyle);
}
}
private void createCellCount(Row row,int CellStartIndex,String[] data,CellStyle cellStyle){
for(int i=CellStartIndex,y=0;y<data.length;i++,y++){
Cell cell = row.createCell(i);
cell.setCellStyle(cellStyle);
cell.setCellValue(data[y]);
}
}
public MemberOrderPageVo listMemberOrderPage(MemberOrderFindDTO memberOrderFindDTO) {
MemberOrderPageVo memberOrderPageVo = new MemberOrderPageVo();
MemberOrderStatisticsBo memberOrderStatisticsBo = new MemberOrderStatisticsBo();
List<Integer> userIds = new ArrayList<>();
PageDataVO<MemberOrderBo> pageDataVO= new PageDataVO<>();
pageDataVO.setPageNum(memberOrderFindDTO.getPage());
pageDataVO.setPageSize(memberOrderFindDTO.getLimit());
pageDataVO.setData(Collections.EMPTY_LIST);
if (Objects.nonNull(memberOrderFindDTO.getEndPayTime())){
Long payEndTime = memberOrderFindDTO.getEndPayTime()+(1000*60*60*24);
memberOrderFindDTO.setEndPayTime(payEndTime);
}
boolean isNoNullUserName = StringUtils.isNotEmpty(memberOrderFindDTO.getName()) && memberOrderFindDTO.getName().trim().length() > 0;
boolean isNoNullPhone = StringUtils.isNotEmpty(memberOrderFindDTO.getPhone()) && memberOrderFindDTO.getPhone().trim().length() > 0;
boolean isNoNullLeaderPhone = StringUtils.isNotEmpty(memberOrderFindDTO.getLeaderPhone()) && memberOrderFindDTO.getLeaderPhone().trim().length() > 0;
if (isNoNullLeaderPhone || isNoNullPhone || isNoNullUserName) {
userIds = userFeign.findAppUserIds(memberOrderFindDTO.getPhone(),memberOrderFindDTO.getLeaderPhone(),memberOrderFindDTO.getName());
if (CollectionUtils.isEmpty(userIds)){
memberOrderPageVo.setMemberOrderStatisticsBo(memberOrderStatisticsBo);
memberOrderPageVo.setMemberOrderPage(pageDataVO);
return memberOrderPageVo;
}
}
if (memberOrderFindDTO.getPage() == 1){
memberOrderFindDTO.setUserIds(userIds);
memberOrderFindDTO.setIsPay(true);
List<MemberOrderBo> baseOrders = baseOrderBiz.findMemberOrders(memberOrderFindDTO);
memberOrderStatisticsBo = getMemberOrderStatisticsBo(baseOrders);
}
memberOrderFindDTO.setIsPay(false);
memberOrderPageVo.setMemberOrderStatisticsBo(memberOrderStatisticsBo);
List<MemberOrderBo> memberOrderBoList;
if (!memberOrderFindDTO.getIsExport()){
memberOrderFindDTO.setUserIds(userIds);
pageDataVO = baseOrderBiz.findMemberOrderPage(memberOrderFindDTO);
memberOrderBoList = pageDataVO.getData();
if (CollectionUtils.isEmpty(memberOrderBoList)){
memberOrderPageVo.setMemberOrderStatisticsBo(memberOrderStatisticsBo);
memberOrderPageVo.setMemberOrderPage(pageDataVO);
return memberOrderPageVo;
}
}else {
memberOrderFindDTO.setUserIds(userIds);
memberOrderBoList = baseOrderBiz.findMemberOrders(memberOrderFindDTO);
} }
memberOrderBoList = getUserBos(memberOrderBoList); MemberOrderStatisticsBo total = new MemberOrderStatisticsBo();
pageDataVO.setData(memberOrderBoList); total.setType(0);
memberOrderPageVo.setMemberOrderPage(pageDataVO); total.setOrderNum(baseOrders.size());
return memberOrderPageVo; total.setTotalAmount(new BigDecimal(baseOrders.stream().mapToDouble(n -> n.getOrderAmount()!=null ?n.getOrderAmount().doubleValue()
} : 0.00).summaryStatistics().getSum()).setScale(2, BigDecimal.ROUND_HALF_UP));
list.add(total);
private List<MemberOrderBo> getUserBos(List<MemberOrderBo> memberOrderBoList) { for (Map.Entry<Integer, List<MemberOrderBo>> entry : map.entrySet()) {
List<UserBo> userBos = memberOrderBoList.stream().map(x -> { MemberOrderStatisticsBo memberOrderStatisticsBo = new MemberOrderStatisticsBo();
UserBo userBo = new UserBo(); memberOrderStatisticsBo.setType(entry.getKey());
userBo.setUserId(x.getUserId()); List<MemberOrderBo> memberOrderBoList = entry.getValue();
userBo.setOrderNo(x.getOrderNo()); if (memberOrderBoList != null) {
userBo.setFacilitateId(x.getFacilitateId()); memberOrderStatisticsBo.setOrderNum(memberOrderBoList.size());
return userBo; memberOrderStatisticsBo.setTotalAmount(new BigDecimal(memberOrderBoList.stream().mapToDouble(n -> n.getOrderAmount()!=null ?n.getOrderAmount().doubleValue()
}).collect(Collectors.toList()); : 0.00).summaryStatistics().getSum()).setScale(2, BigDecimal.ROUND_HALF_UP));
List<UserBo> userDTOList = userFeign.findUserDetailByUserBo(userBos); } else {
Map<String, UserBo> userBoMap = userDTOList.stream().collect(Collectors.toMap(UserBo::getOrderNo, Function.identity())); memberOrderStatisticsBo.setOrderNum(0);
for (MemberOrderBo memberOrderBo : memberOrderBoList) { memberOrderStatisticsBo.setTotalAmount(BigDecimal.ZERO);
UserBo userBo = userBoMap.get(memberOrderBo.getOrderNo());
if(Objects.nonNull(userBo)) {
memberOrderBo.setUserName(userBo.getName());
memberOrderBo.setPhone(userBo.getPhone());
memberOrderBo.setLeaderName(userBo.getLeaderName());
memberOrderBo.setLeaderPhone(userBo.getLeaderPhone());
memberOrderBo.setFacilitateName(userBo.getFacilitateName());
memberOrderBo.setCouponAmount(memberOrderBo.getCouponAmount() == null ? BigDecimal.ZERO : memberOrderBo.getCouponAmount());
memberOrderBo.setRealAmount(memberOrderBo.getRealAmount() == null ? BigDecimal.ZERO : memberOrderBo.getRealAmount());
} }
list.add(memberOrderStatisticsBo);
} }
return memberOrderBoList; return list.stream().sorted(Comparator.comparing(MemberOrderStatisticsBo::getType)).collect(Collectors.toList());
} }
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<Integer, List<MemberOrderBo>> baseOrderHasPayMap = baseOrders.stream().filter(x->x.getHasPay()==1).collect(Collectors.groupingBy(MemberOrderBo::getMemberLevel, Collectors.toList()));
memberOrderStatisticsBo.setOrderNum(baseOrders.size());
BigDecimal totalAmount = baseOrders.stream().filter(x->x.getHasPay()==1).map(MemberOrderBo::getOrderAmount).reduce(BigDecimal.ZERO, (x, y) -> x.add(y));
memberOrderStatisticsBo.setTotalAmount(totalAmount);
List<MemberOrderBo> diamondOrders = baseOrderMap.get(LevelEnum.DIAMOND.getLevel());
memberOrderStatisticsBo.setDiamondOrderNum(diamondOrders==null?0:diamondOrders.size());
List<MemberOrderBo> diamondHashPayOrders = baseOrderHasPayMap.get(LevelEnum.DIAMOND.getLevel());
diamondHashPayOrders = diamondHashPayOrders==null?Collections.EMPTY_LIST:diamondHashPayOrders;
BigDecimal diamondAmount = diamondHashPayOrders.stream().map(MemberOrderBo::getOrderAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
memberOrderStatisticsBo.setTotalDiamondAmount(diamondAmount);
List<MemberOrderBo> goldOrders = baseOrderMap.get(LevelEnum.GOLD.getLevel());
memberOrderStatisticsBo.setGoldOrderNum(goldOrders==null?0:goldOrders.size());
List<MemberOrderBo> goldHasPayOrders = baseOrderHasPayMap.get(LevelEnum.GOLD.getLevel());
goldHasPayOrders = goldHasPayOrders==null?Collections.EMPTY_LIST:goldHasPayOrders;
BigDecimal goldAmount = goldHasPayOrders.stream().map(MemberOrderBo::getOrderAmount).reduce(BigDecimal.ZERO, (x, y) -> x.add(y));
memberOrderStatisticsBo.setTotalGoldAmount(goldAmount);
List<MemberOrderBo> generalOrders = baseOrderMap.get(LevelEnum.GENERAL.getLevel());
memberOrderStatisticsBo.setGeneralOrderNum(generalOrders==null?0:generalOrders.size());
List<MemberOrderBo> generalHasPayOrders = baseOrderHasPayMap.get(LevelEnum.GENERAL.getLevel());
generalHasPayOrders = generalHasPayOrders==null?Collections.EMPTY_LIST:generalHasPayOrders;
BigDecimal generalAmount = generalHasPayOrders.stream().map(MemberOrderBo::getOrderAmount).reduce(BigDecimal.ZERO, (x, y) -> x.add(y));
memberOrderStatisticsBo.setTotalGeneralAmount(generalAmount);
return memberOrderStatisticsBo;
}
} }
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