ali easyexcel 按模版导出

/**
     * 分部业绩导出
     * @param param
     * @param response
     * @throws IOException
     */
    @PreAuthorize("@pms.hasPermission('order:order:page')")
    @GetMapping("/exportVipLevel3UserPerformance")
    public void exportVipLevel3UserPerformance(GetVipLevel3UserPerformanceParam param, HttpServletResponse response) throws IOException {
        if(StringUtil.isBlank(param.getVipLevel3User()) || param.getStartTime() == null || param.getEndTime() == null){
            throw new RuntimeException("参数不能为空");
        }

        String enableDistributionProdIds = this.getValueByConfig("enable_distribution_prod_ids");
        List<String> prodIds = Arrays.asList(StringUtils.split(enableDistributionProdIds, ","));


        //获取自己以下所有用户
        List<User>  list0=userService.getLowerLevel(param.getVipLevel3User(),new ArrayList<>());
        list0.add(userService.getById(param.getVipLevel3User()));//加上自己

        List<String> collect1 = list0.stream().map(u -> u.getUserId()).collect(Collectors.toList());

        //查询用户当前下单数量
        List<Order> list = orderService.lambdaQuery()
                .select(Order::getOrderNumber,Order::getProdName,Order::getActualTotal,Order::getActualTotal,Order::getStatus,Order::getUserId,Order::getPayType)
                .in(Order::getUserId, collect1)
                .eq(Order::getIsPayed,1)//已支付
                .between(Order::getPayTime,param.getStartTime(),param.getEndTime())
                .list();

        Map<String,Order> omap=new HashMap<>();
        for(Order order:list){
            omap.put(order.getOrderNumber(),order);
        }

        List<String> collect = list.stream().map(o -> o.getOrderNumber()).collect(Collectors.toList());

        //下单数量
        Integer orderQuantity=0;
        //退款数量
        Integer refundQuantity=0;

        //下单金额
        BigDecimal orderMoney=BigDecimal.ZERO;
        //退款金额
        BigDecimal refundMoney=BigDecimal.ZERO;

        //奖励金额
        BigDecimal rewardMoney=BigDecimal.ZERO;

        List<String> strings = Arrays.asList(UserFundDetailEnum.TYPE_0.getValue(), UserFundDetailEnum.TYPE_1.getValue(), UserFundDetailEnum.TYPE_2.getValue(), UserFundDetailEnum.TYPE_5.getValue());

        List<GetVipLevel3UserPerformanceVo> list6=new ArrayList<>();

        for(String orderNumber:collect){
            GetVipLevel3UserPerformanceVo vo=new GetVipLevel3UserPerformanceVo();
            Order order = omap.get(orderNumber);
            vo.setOrderNumber(order.getOrderNumber());
            vo.setProdName(order.getProdName());
            vo.setActualTotal(order.getActualTotal());

            vo.setPayType(order.getPayType());
            vo.setStatus(order.getStatus());

            if(order.getPayType() == 0){
                vo.setPayTypeName("手动代付");
            }else if(order.getPayType() == 1){
                vo.setPayTypeName("微信支付");
            }else if(order.getPayType() == 2){
                vo.setPayTypeName("支付宝");
            }

            if(order.getStatus() == 1){
                vo.setStatusName("待付款");
            }else if(order.getStatus() == 2){
                vo.setStatusName("待发货");
            }else if(order.getStatus() == 3){
                vo.setStatusName("待收货");
            }else if(order.getStatus() == 4){
                vo.setStatusName("待评价");
            }else if(order.getStatus() == 5){
                vo.setStatusName("成功");
            }else if(order.getStatus() == 6){
                vo.setStatusName("失败");
            }

            User byId = userService.getById(order.getUserId());
            if(byId != null){
                vo.setUserNickName(byId.getNickName());
            }

            List<OrderItem> list1 = orderItemService.lambdaQuery()
                    .select(OrderItem::getOrderItemId,OrderItem::getProdCount,OrderItem::getProductTotalAmount)
                    .eq(OrderItem::getOrderNumber, orderNumber)
                    .in(OrderItem::getProdId, prodIds).list();
            //共下单了几个
            int sum1 = list1.stream().mapToInt(i -> i.getProdCount()).sum();
            Double sum2 = list1.stream().mapToDouble(i -> i.getProductTotalAmount()).sum();
            orderMoney = orderMoney.add(new BigDecimal(sum2.toString()));
            orderQuantity = orderQuantity+sum1;

            vo.setOrderQuantity(sum1);
            vo.setOrderMoney(new BigDecimal(sum2));
            for(OrderItem item:list1){
                List<OrderRefund> list2 = orderRefundService.lambdaQuery()
                        .select(OrderRefund::getGoodsNum,OrderRefund::getRefundAmount)
                        .eq(OrderRefund::getOrderItemId, item.getOrderItemId())
                        .eq(OrderRefund::getReturnMoneySts, 1)//退款成功的
                        .list();

                //本个子订单共退款成功了几单
                int sum = list2.stream().mapToInt(r -> r.getGoodsNum()).sum();
                refundQuantity = refundQuantity + sum;

                BigDecimal reduce = list2.stream().map(r -> r.getRefundAmount()).reduce(BigDecimal.ZERO, BigDecimal::add);
                refundMoney = refundMoney.add(reduce);

                vo.setRefundQuantity(sum);
                vo.setRefundMoney(reduce);
            }


            List<UserFundDetail> list2 = userFundDetailService.lambdaQuery()
                    .select(UserFundDetail::getType,UserFundDetail::getMoney)
                    .eq(UserFundDetail::getOrderNumber, orderNumber)
                    .eq(UserFundDetail::getCategory, UserFundDetailEnum.DISTRIBUTION_BONUS.getValue())
                    .in(UserFundDetail::getType, strings).list();

            //本比订单总奖励金额
            BigDecimal reduce = list2.stream().map(f -> f.getMoney()).reduce(BigDecimal.ZERO, BigDecimal::add);
            rewardMoney = rewardMoney.add(reduce);

            //一级奖励金额
            BigDecimal type0 = list2.stream().filter(f -> StringUtil.equals(f.getType(),UserFundDetailEnum.TYPE_0.getValue())).map(f -> f.getMoney()).reduce(BigDecimal.ZERO, BigDecimal::add);

            //二级奖励金额
            BigDecimal type1 = list2.stream().filter(f -> StringUtil.equals(f.getType(),UserFundDetailEnum.TYPE_1.getValue())).map(f -> f.getMoney()).reduce(BigDecimal.ZERO, BigDecimal::add);

            //三级奖励金额
            BigDecimal type2 = list2.stream().filter(f -> StringUtil.equals(f.getType(),UserFundDetailEnum.TYPE_2.getValue())).map(f -> f.getMoney()).reduce(BigDecimal.ZERO, BigDecimal::add);

            //老上级奖励
            BigDecimal type5 = list2.stream().filter(f -> StringUtil.equals(f.getType(),UserFundDetailEnum.TYPE_5.getValue())).map(f -> f.getMoney()).reduce(BigDecimal.ZERO, BigDecimal::add);

            vo.setLevel1(type0);
            vo.setLevel2(type1);
            vo.setLevel3(type2);
            vo.setReward2YuanMoney(type5);

            list6.add(vo);
        }

        Map<String,Object> rmap=new HashMap<>();
        rmap.put("orderQuantity",orderQuantity);
        rmap.put("refundQuantity",refundQuantity);
        rmap.put("orderMoney",orderMoney);
        rmap.put("refundMoney",refundMoney);
        rmap.put("rewardMoney",rewardMoney);

        //rmap.put("orderList",list6);

        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");

        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
        String fileName = URLEncoder.encode("分部业绩", "UTF-8").replaceAll("\\+", "%20");
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");

        ClassPathResource classPathResource = new ClassPathResource("excelTemplate/exportVipLevel3UserPerformance.xlsx");

        ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(classPathResource.getInputStream()).build();

        WriteSheet writeSheet = EasyExcel.writerSheet().build();

        //写入list
        FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
        excelWriter.fill(list6, fillConfig, writeSheet);
        //excelWriter.fill(data(), fillConfig, writeSheet);

        //写入map
        //map.put("text", "2019年10月9日13:28:28");
        //map.put("total", rmap);

        excelWriter.fill(rmap, writeSheet);
        //填充完成
        excelWriter.finish();
    }
const exportVipLevel3UserPerformance = () => {
  http({
    url: http.adornUrl('/order/financeStatistics/exportVipLevel3UserPerformance'),
    method: 'get',
    params: http.adornParams({
      startTime: dateRange.value === null ? null : dateRange.value[0], // 开始时间
      endTime: dateRange.value === null ? null : dateRange.value[1], // 结束时间
      vipLevel3User: queryParameter.uid
    }),
    responseType: 'blob' // 解决文件下载乱码问题
  })
    .then(({ data }) => {
      const blob = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8' })
      const fileName = '分部业绩.xlsx'
      const elink = document.createElement('a')
      if ('download' in elink) { // 非IE下载
        elink.download = fileName
        elink.style.display = 'none'
        elink.href = URL.createObjectURL(blob)
        document.body.appendChild(elink)
        elink.click()
        URL.revokeObjectURL(elink.href) // 释放URL 对象
        document.body.removeChild(elink)
      } else { // IE10+下载
        navigator.msSaveBlob(blob, fileName)
      }
    })
}
/**
 * get请求参数处理
 * @param {*} params 参数对象
 * @param {*} openDefultParams 是否开启默认参数?
 */
http.adornParams = (params = {}, openDefultParams = true) => {
  const defaults = {
    t: Date.now()
  }
  return openDefultParams ? merge(defaults, params) : params
}
/**
 * 请求地址处理
 * @param {*} actionName action方法名称
 */
http.adornUrl = actionName => {
  return import.meta.env.VITE_APP_BASE_API + actionName
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值