wangming 2 周之前
父節點
當前提交
ff1bb03ecb

+ 55 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/vo/SkuStatisticsExcel.java

@@ -0,0 +1,55 @@
+
+package com.yami.shop.bean.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class SkuStatisticsExcel {
+
+    @ExcelProperty("商品ID")
+    @ApiModelProperty("skuId")
+    private Long skuId;
+
+    @ApiModelProperty("skuName")
+    @ExcelProperty("商品名称")
+    private String skuName;
+
+    @ApiModelProperty("规格")
+    @ExcelProperty("规格")
+    private String spec;
+
+    @ApiModelProperty("单价")
+    @ExcelProperty("单价(元)")
+    private Double price;
+
+    @ApiModelProperty("商品总数量")
+    @ExcelProperty("商品总数量")
+    private Integer prodCount;
+
+    @ApiModelProperty("小计")
+    @ExcelProperty("小计(元)")
+    private Double total;
+
+    @ApiModelProperty("商品总额")
+    @ExcelProperty("商品总额(元)")
+    private Double goodsTotalPrice;
+
+    @ApiModelProperty("积分抵扣")
+    @ExcelProperty("总积分抵扣(元)")
+    private Double totalPoints;
+
+    @ApiModelProperty("现金抵扣")
+    @ExcelProperty("总现金抵扣(元)")
+    private Double totalCash;
+
+    @ApiModelProperty("运费")
+    @ExcelProperty("总运费(元)")
+    private Double totalFreight;
+
+}

+ 23 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/vo/SkuStatisticsVo.java

@@ -1,6 +1,7 @@
 
 
 package com.yami.shop.bean.vo;
 package com.yami.shop.bean.vo;
 
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.Data;
@@ -11,22 +12,44 @@ import lombok.NoArgsConstructor;
 @AllArgsConstructor
 @AllArgsConstructor
 public class SkuStatisticsVo {
 public class SkuStatisticsVo {
 
 
+    @ExcelProperty("商品ID")
     @ApiModelProperty("skuId")
     @ApiModelProperty("skuId")
     private Long skuId;
     private Long skuId;
 
 
     @ApiModelProperty("skuName")
     @ApiModelProperty("skuName")
+    @ExcelProperty("商品名称")
     private String skuName;
     private String skuName;
 
 
     @ApiModelProperty("规格")
     @ApiModelProperty("规格")
+    @ExcelProperty("规格")
     private String spec;
     private String spec;
 
 
     @ApiModelProperty("单价")
     @ApiModelProperty("单价")
+    @ExcelProperty("单价(元)")
     private Double price;
     private Double price;
 
 
     @ApiModelProperty("商品总数量")
     @ApiModelProperty("商品总数量")
+    @ExcelProperty("商品总数量")
     private Integer prodCount;
     private Integer prodCount;
 
 
     @ApiModelProperty("小计")
     @ApiModelProperty("小计")
+    @ExcelProperty("小计(元)")
     private Double total;
     private Double total;
 
 
+    @ApiModelProperty(value = "商品总额",hidden = true)
+    @ExcelProperty("商品总额(元)")
+    private Double goodsTotalPrice;
+
+    @ApiModelProperty(value = "积分抵扣",hidden = true)
+    @ExcelProperty("总积分抵扣(元)")
+    private Double totalPoints;
+
+    @ApiModelProperty(value = "现金抵扣",hidden = true)
+    @ExcelProperty("总现金抵扣(元)")
+    private Double totalCash;
+
+    @ApiModelProperty(value = "运费",hidden = true)
+    @ExcelProperty("总运费(元)")
+    private Double totalFreight;
+
 }
 }

+ 0 - 1
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/OrderController.java

@@ -61,7 +61,6 @@ public class OrderController {
     private final OrderSettlementService orderSettlementService;
     private final OrderSettlementService orderSettlementService;
     private final AppConnectMapper appConnectMapper;
     private final AppConnectMapper appConnectMapper;
 
 
-
     /**
     /**
      * 分页获取
      * 分页获取
      */
      */

+ 13 - 3
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/SkuController.java

@@ -22,6 +22,7 @@ import com.yami.shop.common.util.R;
 import com.yami.shop.service.SkuService;
 import com.yami.shop.service.SkuService;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
+import org.springframework.http.MediaType;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -56,11 +57,11 @@ public class SkuController {
         return R.SUCCESS(skuService.skuStatisticsList(page,po));
         return R.SUCCESS(skuService.skuStatisticsList(page,po));
     }
     }
 
 
-    @GetMapping("/skuStatisticsExcel")
+    @GetMapping(value = "/skuStatisticsExcel",produces =  MediaType.APPLICATION_OCTET_STREAM_VALUE)
     @ApiOperation("对账单汇总表(商品)-导出")
     @ApiOperation("对账单汇总表(商品)-导出")
-    public R<Void> skuStatisticsExcel(HttpServletResponse response, SkuStatisticsPo po) {
+    public void skuStatisticsExcel(HttpServletResponse response, SkuStatisticsPo po) {
+        System.out.println(po);
         skuService.skuStatisticsExcel(response,po);
         skuService.skuStatisticsExcel(response,po);
-        return R.SUCCESS();
     }
     }
 
 
     @GetMapping("/freightStatisticsList")
     @GetMapping("/freightStatisticsList")
@@ -75,4 +76,13 @@ public class SkuController {
     public R<Void> freightStatisticsExcel(HttpServletResponse response, FreightStatisticsPo po) {
     public R<Void> freightStatisticsExcel(HttpServletResponse response, FreightStatisticsPo po) {
         return R.SUCCESS();
         return R.SUCCESS();
     }
     }
+
+
+    @GetMapping("/test")
+    @ApiOperation("导出测试")
+    public R<Void> test(HttpServletResponse response) {
+        skuService.test(response);
+        return R.SUCCESS();
+    }
+
 }
 }

+ 2 - 0
yami-shop-service/src/main/java/com/yami/shop/service/SkuService.java

@@ -73,4 +73,6 @@ public interface SkuService extends IService<Sku> {
     IPage<SkuStatisticsVo> skuStatisticsList(PageParam<SkuStatisticsPo> page, SkuStatisticsPo po);
     IPage<SkuStatisticsVo> skuStatisticsList(PageParam<SkuStatisticsPo> page, SkuStatisticsPo po);
 
 
     void skuStatisticsExcel(HttpServletResponse response, SkuStatisticsPo po);
     void skuStatisticsExcel(HttpServletResponse response, SkuStatisticsPo po);
+
+    void test(HttpServletResponse response);
 }
 }

+ 134 - 12
yami-shop-service/src/main/java/com/yami/shop/service/impl/SkuServiceImpl.java

@@ -10,23 +10,41 @@
 
 
 package com.yami.shop.service.impl;
 package com.yami.shop.service.impl;
 
 
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.write.builder.ExcelWriterSheetBuilder;
+import com.alibaba.excel.write.merge.OnceAbsoluteMergeStrategy;
+import com.alibaba.excel.write.metadata.style.WriteCellStyle;
+import com.alibaba.excel.write.metadata.style.WriteFont;
+import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
 import com.yami.shop.bean.model.Sku;
 import com.yami.shop.bean.model.Sku;
 import com.yami.shop.bean.po.SkuStatisticsPo;
 import com.yami.shop.bean.po.SkuStatisticsPo;
 import com.yami.shop.bean.vo.SkuBuyTogetherOftenVo;
 import com.yami.shop.bean.vo.SkuBuyTogetherOftenVo;
-import com.yami.shop.bean.vo.SkuStatistics;
+import com.yami.shop.bean.vo.SkuStatisticsExcel;
 import com.yami.shop.bean.vo.SkuStatisticsVo;
 import com.yami.shop.bean.vo.SkuStatisticsVo;
+import com.yami.shop.common.exception.GlobalException;
 import com.yami.shop.common.util.PageParam;
 import com.yami.shop.common.util.PageParam;
 import com.yami.shop.dao.SkuMapper;
 import com.yami.shop.dao.SkuMapper;
 import com.yami.shop.service.SkuService;
 import com.yami.shop.service.SkuService;
+import lombok.SneakyThrows;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.IndexedColors;
+import org.apache.poi.ss.usermodel.VerticalAlignment;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Caching;
 import org.springframework.cache.annotation.Caching;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.List;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * @author lgh on 2018/09/29.
  * @author lgh on 2018/09/29.
@@ -81,18 +99,122 @@ public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements SkuSe
         return skuMapper.skuStatisticsList(page, po);
         return skuMapper.skuStatisticsList(page, po);
     }
     }
 
 
+
     @Override
     @Override
+    @SneakyThrows
     public void skuStatisticsExcel(HttpServletResponse response, SkuStatisticsPo po) {
     public void skuStatisticsExcel(HttpServletResponse response, SkuStatisticsPo po) {
-        SkuStatistics skuStatistics = new SkuStatistics();
-        skuStatistics.setGoodsTotalPrice(skuMapper.goodsTotalPrice(po));
-        System.out.println(1);
-        skuStatistics.setTotalPoints(skuMapper.totalPoints(po));
-        System.out.println(2);
-        skuStatistics.setTotalCash(skuMapper.totalCash(po));
-        System.out.println(3);
-        skuStatistics.setTotalFreight(skuMapper.totalFreight(po));
-        System.out.println(4);
-        skuStatistics.setSkuStatisticsList(skuMapper.skuStatisticsList2(po));
-        System.out.println(skuStatistics);
+        List<SkuStatisticsVo> skuStatisticsVoList = skuMapper.skuStatisticsList2(po);
+        Double goodsTotalPrice = skuMapper.goodsTotalPrice(po);
+        Double totalPoints = skuMapper.totalPoints(po);
+        Double totalCash = skuMapper.totalCash(po);
+        Double totalFreight = skuMapper.totalFreight(po);
+
+        String head = "对账汇总表";
+        List<String> heads = Arrays.asList(
+                "商品ID", "商品名称", "规格", "单价(元)", "商品总数量", "小计(元)",
+                "商品总额(元)", "总积分抵扣(元)", "总现金抵扣(元)", "总运费(元)"
+        );
+        List<List<String>> hs = heads.stream()
+                .map(h -> Arrays.asList(head, h))
+                .collect(Collectors.toList());
+
+        List<List<Object>> data = new ArrayList<>();
+        for (int i = 0; i < skuStatisticsVoList.size(); i++) {
+            SkuStatisticsVo sku = skuStatisticsVoList.get(i);
+            List<Object> row = new ArrayList<>();
+            row.add(sku.getSkuId());
+            row.add(sku.getSkuName());
+            row.add(sku.getSpec());
+            row.add(sku.getPrice());
+            row.add(sku.getProdCount());
+            row.add(sku.getTotal());
+
+            if (i == 0) {   // 第一行放值
+                row.add(goodsTotalPrice);
+                row.add(totalPoints);
+                row.add(totalCash);
+                row.add(totalFreight);
+            } else {        // 其余行留空
+                row.add(null);
+                row.add(null);
+                row.add(null);
+                row.add(null);
+            }
+            data.add(row);
+        }
+
+        /* 4. 样式 */
+        WriteCellStyle headWriteCellStyle = new WriteCellStyle();
+        headWriteCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
+        WriteFont headWriteFont = new WriteFont();
+        headWriteFont.setFontHeightInPoints((short) 15);
+        headWriteFont.setBold(true);
+        headWriteCellStyle.setWriteFont(headWriteFont);
+        headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
+
+        WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
+        contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
+        contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+        HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
+
+        /* 5. 合并策略:数据区域第 1 行到最后一行,列 6~9 纵向合并 */
+        OnceAbsoluteMergeStrategy mergeStrategy = null;
+        if (data.size() > 1) {          // 至少两行才需要合并
+            mergeStrategy = new OnceAbsoluteMergeStrategy(2, data.size()+1, 6, 6);
+        }
+
+        OnceAbsoluteMergeStrategy mergeStrategy2 = null;
+        if (data.size() > 1) {          // 至少两行才需要合并
+            mergeStrategy2 = new OnceAbsoluteMergeStrategy(2, data.size()+1, 7, 7);
+        }
+
+        OnceAbsoluteMergeStrategy mergeStrategy3 = null;
+        if (data.size() > 1) {          // 至少两行才需要合并
+            mergeStrategy3 = new OnceAbsoluteMergeStrategy(2, data.size()+1, 8, 8);
+        }
+
+        OnceAbsoluteMergeStrategy mergeStrategy4 = null;
+        if (data.size() > 1) {          // 至少两行才需要合并
+            mergeStrategy4 = new OnceAbsoluteMergeStrategy(2, data.size()+1, 9, 9);
+        }
+
+        /* 6. 写出 */
+        String fileName = URLEncoder.encode("对账汇总表", "UTF-8").replaceAll("\\+", "%20");
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
+
+        ExcelWriterSheetBuilder writerBuilder = EasyExcel.write(response.getOutputStream())
+                .head(hs)
+                .sheet(head)
+                .registerWriteHandler(horizontalCellStyleStrategy);
+        if (mergeStrategy != null) {
+            writerBuilder.registerWriteHandler(mergeStrategy);
+        }
+        if (mergeStrategy2 != null) {
+            writerBuilder.registerWriteHandler(mergeStrategy2);
+        }
+        if (mergeStrategy3 != null) {
+            writerBuilder.registerWriteHandler(mergeStrategy3);
+        }
+        if (mergeStrategy4 != null) {
+            writerBuilder.registerWriteHandler(mergeStrategy4);
+        }
+        writerBuilder.doWrite(data);
     }
     }
+
+    @Override
+    public void test(HttpServletResponse response) {
+        try {
+            List<SkuStatisticsExcel> list = Lists.newArrayList();
+            response.setCharacterEncoding("utf-8");
+            String fileName = URLEncoder.encode("对账汇总表", "UTF-8").replaceAll("\\+", "%20");
+            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
+            EasyExcel.write(response.getOutputStream(), SkuStatisticsExcel.class)
+                    .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
+                    .sheet("列表").doWrite(list);
+        } catch (IOException e) {
+            throw new GlobalException("文件下载异常");
+        }
+    }
+
 }
 }

+ 4 - 4
yami-shop-service/src/main/resources/mapper/SkuMapper.xml

@@ -300,7 +300,7 @@
         </if>
         </if>
         )
         )
         -
         -
-        (SELECT  SUM(total_offset_points) FROM (SELECT
+        (SELECT  IFNULL(SUM( total_offset_points ),0)  FROM (SELECT
         CASE
         CASE
         WHEN refund_type=1 THEN total_offset_points
         WHEN refund_type=1 THEN total_offset_points
         ELSE total_offset_points+ (freight_amount * 100)
         ELSE total_offset_points+ (freight_amount * 100)
@@ -400,7 +400,7 @@
         </if>
         </if>
                                                                  )
                                                                  )
         -
         -
-        (SELECT SUM(refund_amount) FROM tz_order_refund WHERE return_money_sts=70
+        (SELECT IFNULL(SUM( refund_amount ),0) FROM tz_order_refund WHERE return_money_sts=70
         <if test="po.startTime != null and po.startTime != ''">
         <if test="po.startTime != null and po.startTime != ''">
             and apply_time&gt;= #{po.startTime}
             and apply_time&gt;= #{po.startTime}
         </if>
         </if>
@@ -432,7 +432,7 @@
     </select>
     </select>
 
 
     <select id="totalFreight" resultType="Double">
     <select id="totalFreight" resultType="Double">
-        SELECT (SELECT SUM(IFNULL(freight_amount,0)) total_freight FROM tz_order
+        SELECT (SELECT IFNULL(SUM(freight_amount),0) total_freight FROM tz_order
         WHERE is_payed=1
         WHERE is_payed=1
         <if test="po.startTime != null and po.startTime != ''">
         <if test="po.startTime != null and po.startTime != ''">
             and create_time&gt;= #{po.startTime}
             and create_time&gt;= #{po.startTime}
@@ -464,7 +464,7 @@
         </if>
         </if>
         )
         )
         -
         -
-        (SELECT SUM(IFNULL(freight_amount,0))
+        (SELECT IFNULL(SUM(freight_amount),0)
         FROM `tz_order_refund`
         FROM `tz_order_refund`
         WHERE return_money_sts=70
         WHERE return_money_sts=70
         <if test="po.startTime != null and po.startTime != ''">
         <if test="po.startTime != null and po.startTime != ''">