src/main/java/com/mzl/flower/dto/request/statisticAnalysis/FlowerSaleDTO.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mzl/flower/dto/response/statisticAnalysis/FlowerSaleStatisticVO.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mzl/flower/dto/response/statisticAnalysis/FlowerSaleVO.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mzl/flower/mapper/statisticsAnalysis/SalesStatisticsAnalysisMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mzl/flower/service/impl/statisticsAnalysis/StatisticAnalysisServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mzl/flower/service/statisticsAnalysis/StatisticAnalysisService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mzl/flower/web/v2/statisticsAnalysis/StatisticAnalysisController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/mapper/statisticsAnalysis/SalesStatisticsAnalysisMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/mzl/flower/dto/request/statisticAnalysis/FlowerSaleDTO.java
对比新文件 @@ -0,0 +1,74 @@ package com.mzl.flower.dto.request.statisticAnalysis; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotBlank; import java.time.LocalDateTime; @Data public class FlowerSaleDTO { @ApiModelProperty(value = "供应商id") private Long supplierId; @ApiModelProperty(value = "供应商名称") private String supplierName; @ApiModelProperty("注册手机号") private String registerTel; @ApiModelProperty("联系方式") private String contactTel; @ApiModelProperty(value = "集货站id") private Long stationId; @ApiModelProperty(value = "商品分类") private String flowerCategory; @ApiModelProperty(value = "商品等级") private String flowerLevel; @ApiModelProperty("销售地区-省") private String customerProvince; @ApiModelProperty("销售地区-市") private String customerCity; @ApiModelProperty("销售地区-区") private String customerRegion; @ApiModelProperty(value = "订单号") private String orderNo; @ApiModelProperty(value = "订单开始日期") private LocalDateTime orderStartDate; @ApiModelProperty(value = "订单结束日期") private LocalDateTime orderEndDate; @ApiModelProperty(hidden = true) private LocalDateTime startDate; @ApiModelProperty(hidden = true) private LocalDateTime endDate; @ApiModelProperty(value = "支付时间-开始;yyyy-MM-dd") private String startDateStr; @ApiModelProperty(value = "支付时间-结束;yyyy-MM-dd") private String endDateStr; @ApiModelProperty(value = "创建时间-开始;yyyy-MM-dd") private String createStartDateStr; @ApiModelProperty(value = "创建时间-结束;yyyy-MM-dd") private String createEndDateStr; @ApiModelProperty(hidden = true) private LocalDateTime createStartDate; @ApiModelProperty(hidden = true) private LocalDateTime createEndDate; } src/main/java/com/mzl/flower/dto/response/statisticAnalysis/FlowerSaleStatisticVO.java
对比新文件 @@ -0,0 +1,30 @@ package com.mzl.flower.dto.response.statisticAnalysis; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @Data public class FlowerSaleStatisticVO { @ApiModelProperty("销售金额") private BigDecimal saleAmount; @ApiModelProperty("销售扎数") private BigDecimal saleNum; @ApiModelProperty("商品总数") private Integer goodsNum; @ApiModelProperty("缺货扎数") private BigDecimal lackNum; @ApiModelProperty("补货扎数") private BigDecimal replaceNum; @ApiModelProperty("降级扎数") private BigDecimal reduceNum; } src/main/java/com/mzl/flower/dto/response/statisticAnalysis/FlowerSaleVO.java
对比新文件 @@ -0,0 +1,80 @@ package com.mzl.flower.dto.response.statisticAnalysis; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.time.LocalDateTime; @Data public class FlowerSaleVO { @ApiModelProperty(value = "供应商id") private Long supplierId; @ApiModelProperty(value = "供应商名称") private String supplierName; @ApiModelProperty("注册手机号") private String registerTel; @ApiModelProperty("联系方式") private String customerTel; @ApiModelProperty("集货站id") private Long stationId; @ApiModelProperty("集货站名称") private String stationName; @ApiModelProperty(value = "品类") private String flowerCategory; @ApiModelProperty(value = "品类名称") private String flowerCategoryName; @ApiModelProperty(value = "商品名称") private String flowerName; @ApiModelProperty(value = "等级") private String flowerLevel; @ApiModelProperty(value = "规格") private String flowerUnit; @ApiModelProperty(value = "底价") private BigDecimal supplierPrice; @ApiModelProperty(value = "售价") private BigDecimal price; @ApiModelProperty(value = "销售扎数") private Integer num; @ApiModelProperty(value = "销售地址") private String address; @ApiModelProperty(value = "支付时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @DateTimeFormat private LocalDateTime paymentTime; @ApiModelProperty(value = "订单ID号") private String orderId; @ApiModelProperty(value = "订单号") private String orderNo; @ApiModelProperty(value = "缺货扎数") private Integer lackNum; @ApiModelProperty(value = "补货扎数") private Integer replaceNum; @ApiModelProperty(value = "降级扎数") private Integer reduceNum; } src/main/java/com/mzl/flower/mapper/statisticsAnalysis/SalesStatisticsAnalysisMapper.java
对比新文件 @@ -0,0 +1,20 @@ package com.mzl.flower.mapper.statisticsAnalysis; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.mzl.flower.dto.request.statisticAnalysis.FlowerSaleDTO; import com.mzl.flower.dto.response.statisticAnalysis.FlowerSaleStatisticVO; import com.mzl.flower.dto.response.statisticAnalysis.FlowerSaleVO; import org.apache.ibatis.annotations.Param; import java.util.List; public interface SalesStatisticsAnalysisMapper { Page<FlowerSaleVO> getFlowerSalePage(Page page, @Param("dto") FlowerSaleDTO dto); FlowerSaleStatisticVO getFlowerSaleStatistics(@Param("dto") FlowerSaleDTO dto); List<FlowerSaleVO> getFlowerSaleSList(@Param("dto") FlowerSaleDTO dto); } src/main/java/com/mzl/flower/service/impl/statisticsAnalysis/StatisticAnalysisServiceImpl.java
@@ -3,20 +3,29 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.mzl.flower.base.cache.DictCacheClient; import com.mzl.flower.dto.request.statisticAnalysis.FlowerMaterialDTO; import com.mzl.flower.dto.request.statisticAnalysis.FlowerSaleDTO; import com.mzl.flower.dto.response.report.OrderReportResultVO; import com.mzl.flower.dto.response.statisticAnalysis.FlowerMaterialStaticVO; import com.mzl.flower.dto.response.statisticAnalysis.FlowerMaterialVO; import com.mzl.flower.dto.response.statisticAnalysis.FlowerSaleStatisticVO; import com.mzl.flower.dto.response.statisticAnalysis.FlowerSaleVO; import com.mzl.flower.mapper.statisticsAnalysis.FlowerMaterialMapper; import com.mzl.flower.mapper.statisticsAnalysis.SalesStatisticsAnalysisMapper; import com.mzl.flower.service.BaseService; import com.mzl.flower.service.statisticsAnalysis.StatisticAnalysisService; import com.mzl.flower.utils.ExcelExportUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.net.URLEncoder; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; @@ -29,6 +38,8 @@ @Autowired private FlowerMaterialMapper flowerMaterialMapper; @Resource SalesStatisticsAnalysisMapper salesStatisticAnalysisMapper; @Override public Page<FlowerMaterialVO> getFlowerMaterialPage(Page page, FlowerMaterialDTO dto) { @@ -98,4 +109,72 @@ log.error(e.getMessage(), e); } } @Override public Page<FlowerSaleVO> getFlowerSalePage(Page page, FlowerSaleDTO dto) { dto.setCreateStartDate(parseLocalDateTime(dto.getCreateStartDateStr(), 17, 0, 0, -1)); dto.setCreateEndDate(parseLocalDateTime(dto.getCreateEndDateStr(), 17, 0, 0, 0)); return salesStatisticAnalysisMapper.getFlowerSalePage(page, dto); } @Override public FlowerSaleStatisticVO getFlowerSaleStatistics(FlowerSaleDTO dto) { return salesStatisticAnalysisMapper.getFlowerSaleStatistics(dto); } @Override public void exportFlowerSales(HttpServletResponse response, FlowerSaleDTO dto) { dto.setCreateStartDate(parseLocalDateTime(dto.getCreateStartDateStr(), 17, 0, 0, -1)); dto.setCreateEndDate(parseLocalDateTime(dto.getCreateEndDateStr(), 17, 0, 0, 0)); List<FlowerSaleVO> list=salesStatisticAnalysisMapper.getFlowerSaleSList(dto); String[] rowsName = new String[]{"序号", "供应商id", "供应商名称", "注册手机号", "联系方式", "集货站", "品类", "商品名称", "等级", "规格", "底价", "售价", "销售扎数", "销售地址", "支付时间", "订单号", "缺货扎数", "补货扎数", "降级扎数"}; List<Object[]> dataList = new ArrayList<>(); int sn = 1; for (FlowerSaleVO o : list) { Object[] objs = new Object[rowsName.length]; int a = 0; objs[a++] = sn; // 序号 objs[a++] = o.getSupplierId(); // 供应商id objs[a++] = o.getSupplierName(); // 供应商名称 objs[a++] = o.getRegisterTel(); // 注册手机号 objs[a++] = o.getCustomerTel(); // 联系方式" objs[a++] = o.getStationName(); // 集货站 objs[a++] = o.getFlowerCategory(); // 品类 objs[a++] = o.getFlowerName(); //商品名称 objs[a++] = o.getFlowerLevel(); //等级 objs[a++] = o.getFlowerUnit(); //规格 objs[a++] = o.getSupplierPrice();//底价 objs[a++] = o.getPrice(); //售价 objs[a++] = o.getNum(); //销售扎数 objs[a++] = o.getAddress(); //销售地址 objs[a++] = o.getPaymentTime(); //支付时间 objs[a++] = o.getOrderNo(); //订单号 objs[a++] = o.getLackNum(); //缺货扎数 objs[a++] = o.getReduceNum(); //补货扎数 objs[a++] = o.getReduceNum(); //降级扎数 dataList.add(objs); sn++; } ExcelExportUtil excelExportUtil = new ExcelExportUtil("花材销售统计", rowsName, dataList, response); try { response.addHeader("filename", URLEncoder.encode("花材销售统计.xls", "UTF-8")); response.addHeader("Access-Control-Expose-Headers", "filename"); excelExportUtil.export(); } catch (Exception e) { log.error(e.getMessage(), e); } } protected LocalDateTime parseLocalDateTime(final String dateStr, int hour, int minute, int second, long plusDays) { LocalDateTime dateTime = null; if (StringUtils.isNotBlank(dateStr)) { DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDate date = LocalDate.parse(dateStr, dateTimeFormatter).plusDays(plusDays); dateTime = date.atTime(hour, minute, second); } return dateTime; } } src/main/java/com/mzl/flower/service/statisticsAnalysis/StatisticAnalysisService.java
@@ -2,8 +2,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.mzl.flower.dto.request.statisticAnalysis.FlowerMaterialDTO; import com.mzl.flower.dto.request.statisticAnalysis.FlowerSaleDTO; import com.mzl.flower.dto.response.statisticAnalysis.FlowerMaterialStaticVO; import com.mzl.flower.dto.response.statisticAnalysis.FlowerSaleStatisticVO; import com.mzl.flower.dto.response.statisticAnalysis.FlowerMaterialVO; import com.mzl.flower.dto.response.statisticAnalysis.FlowerSaleVO; import javax.servlet.http.HttpServletResponse; @@ -15,4 +18,11 @@ FlowerMaterialStaticVO getFlowerMaterialStatis(FlowerMaterialDTO dto); void exportFlowerMaterialSales(HttpServletResponse response, FlowerMaterialDTO dto); Page<FlowerSaleVO> getFlowerSalePage(Page page, FlowerSaleDTO dto); FlowerSaleStatisticVO getFlowerSaleStatistics(FlowerSaleDTO dto); void exportFlowerSales(HttpServletResponse response, FlowerSaleDTO dto); } src/main/java/com/mzl/flower/web/v2/statisticsAnalysis/StatisticAnalysisController.java
@@ -5,16 +5,12 @@ import com.mzl.flower.base.BaseController; import com.mzl.flower.base.R; import com.mzl.flower.base.ReturnDataDTO; import com.mzl.flower.dto.request.report.QueryOrderDTO; import com.mzl.flower.dto.request.report.QueryPartnerOrderDTO; import com.mzl.flower.dto.request.report.QuerySupplierDTO; import com.mzl.flower.dto.request.statisticAnalysis.FlowerMaterialDTO; import com.mzl.flower.dto.response.report.OrderDetailReportResultVO; import com.mzl.flower.dto.response.report.OrderReportResultVO; import com.mzl.flower.dto.response.report.OrderSupplierReportResultVO; import com.mzl.flower.dto.request.statisticAnalysis.FlowerSaleDTO; import com.mzl.flower.dto.response.statisticAnalysis.FlowerMaterialStaticVO; import com.mzl.flower.dto.response.statisticAnalysis.FlowerSaleStatisticVO; import com.mzl.flower.dto.response.statisticAnalysis.FlowerMaterialVO; import com.mzl.flower.service.report.OrderReportService; import com.mzl.flower.dto.response.statisticAnalysis.FlowerSaleVO; import com.mzl.flower.service.statisticsAnalysis.StatisticAnalysisService; import com.mzl.flower.utils.ConverterUtil; import io.swagger.annotations.Api; @@ -55,7 +51,7 @@ @ApiOperation(value = "花材统计-统计", notes = "花材统计统计") public ResponseEntity<ReturnDataDTO<FlowerMaterialStaticVO>> getFlowerMaterialStatis(@Validated FlowerMaterialDTO dto ) { return returnData(R.SUCCESS.getCode(), ConverterUtil.transObject(statisticAnalysisService.getFlowerMaterialStatis(dto), FlowerMaterialStaticVO.class)); return returnData(R.SUCCESS.getCode(), ConverterUtil.transObject(statisticAnalysisService.getFlowerMaterialStatis(dto), FlowerSaleStatisticVO.class)); } @@ -66,4 +62,23 @@ } @GetMapping("/flower-sale/page") @ApiOperation(value = "花材销售统计-分页", notes = "花材销售统计-分页") public ResponseEntity<ReturnDataDTO<Page<FlowerSaleVO>>> getFlowerSalePage(Page page, @Validated FlowerSaleDTO dto) { return returnData(R.SUCCESS.getCode(), ConverterUtil.transPage(statisticAnalysisService.getFlowerSalePage(page, dto), FlowerSaleVO.class)); } @GetMapping("/flower-sale/statistics") @ApiOperation(value = "花材销售统计-统计", notes = "花材销售统计") public ResponseEntity<ReturnDataDTO<FlowerSaleStatisticVO>> getFlowerSaleStatistics(@Validated FlowerSaleDTO dto) { return returnData(R.SUCCESS.getCode(), ConverterUtil.transObject(statisticAnalysisService.getFlowerSaleStatistics(dto), FlowerSaleStatisticVO.class)); } @GetMapping({"/flower-sale/export"}) @ApiOperation(value = "花材销售统计-导出") public void exportFlowerSales(HttpServletResponse response, @Validated FlowerSaleDTO dto) { statisticAnalysisService.exportFlowerSales(response, dto); } } src/main/resources/mapper/statisticsAnalysis/SalesStatisticsAnalysisMapper.xml
对比新文件 @@ -0,0 +1,96 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.mzl.flower.mapper.statisticsAnalysis.SalesStatisticsAnalysisMapper"> <select id="getFlowerSaleStatistics" resultType="com.mzl.flower.dto.response.statisticAnalysis.FlowerSaleStatisticVO"> select sum(t.total) as saleAmount, sum(t.num) as saleNum, count(t.flower_id) as goodsNum, sum(t.lackNum) as lackNum, sum(t.replaceNum) as replaceNum, sum(t.reduceNum) as reduceNum from ( <include refid="flowerSalePageSql"></include>) t </select> <select id="getFlowerSalePage" resultType="com.mzl.flower.dto.response.statisticAnalysis.FlowerSaleVO"> <include refid="flowerSalePageSql"></include> </select> <select id="getFlowerSaleSList" resultType="com.mzl.flower.dto.response.statisticAnalysis.FlowerSaleVO"> <include refid="flowerSalePageSql"></include> </select> <sql id="flowerSalePageSql"> SELECT oi.*, s.NAME stationName, si.contact_tel registerTel, si.contact_tel customerTel, si.id supplierId, si.name supplierName, o.id orderId, o.order_no, o.payment_time, c.parent_name flowerCategoryName, CONCAT(o.customer_province, ' ', o.customer_city, ' ', o.customer_region, ' ', o.customer_address) AS address, COALESCE((SELECT oic.num FROM t_order_item_check oic WHERE oic.order_item_id = oi.id AND oic.type = 'replace'), 0) replaceNum, COALESCE((SELECT oic.num FROM t_order_item_check oic WHERE oic.order_item_id = oi.id AND oic.type = 'reduce'), 0) reduceNum, COALESCE((SELECT oic.num FROM t_order_item_check oic WHERE oic.order_item_id = oi.id AND oic.type = 'lack'), 0) lackNum FROM t_order_item oi LEFT JOIN t_station s ON s.id = oi.station_id LEFT JOIN t_supplier_info si ON si.id = oi.supplier_id LEFT JOIN t_order o ON oi.order_id = o.id LEFT JOIN t_flower f on oi.flower_id = f.id LEFT JOIN t_flower_category c on c.id = f.category <include refid="flowerSaleWhere"></include> </sql> <sql id="flowerSaleWhere"> WHERE oi.deleted = 0 and o.payment_time is not null and o.status_backend not in ('PENDING','CANCEL','REFUND') <if test="dto.supplierId != null"> and si.id = #{dto.supplierId} </if> <if test="dto.supplierName != null and dto.supplierName != ''"> AND si.name LIKE concat('%', #{dto.supplierName},'%') </if> <if test="dto.registerTel!=null and dto.registerTel!=''"> AND si.contact_tel LIKE CONCAT('%',#{dto.registerTel}, '%') </if> <if test="dto.stationId != null"> AND oi.station_id = #{dto.stationId} </if> <if test="dto.flowerCategory != null"> AND f.category = #{dto.flowerCategory} </if> <if test="dto.flowerLevel != null and dto.flowerLevel != ''"> AND oi.flower_level = #{dto.flowerLevel} </if> <if test="dto.customerProvince!=null and dto.customerProvince!=''"> AND o.customer_province like CONCAT('%',#{dto.customerProvince}, '%') </if> <if test="dto.customerCity!=null and dto.customerCity!=''"> AND o.customer_city like CONCAT('%',#{dto.customerCity}, '%') </if> <if test="dto.customerRegion!=null and dto.customerRegion!=''"> AND o.customer_region like CONCAT('%',#{dto.customerRegion}, '%') </if> <if test="dto.orderNo != null and dto.orderNo != ''"> AND o.order_no LIKE concat('%', #{dto.orderNo},'%') </if> <!-- 修改查询日期对应的的创建时间为支付时间 2024-10-12--> <if test="dto.createStartDate != null"> AND o.payment_time >= #{dto.createStartDate} </if> <if test="dto.createEndDate != null"> AND o.payment_time < #{dto.createEndDate} </if> </sql> </mapper>