销售统计增加分类区分
This commit is contained in:
@@ -42,8 +42,7 @@ public class SaleSummaryController {
|
|||||||
if (param.getShopId() == null) {
|
if (param.getShopId() == null) {
|
||||||
param.setShopId(shopId);
|
param.setShopId(shopId);
|
||||||
}
|
}
|
||||||
SaleSummaryCountVo data = prodStatisticService.summaryCount(
|
SaleSummaryCountVo data = prodStatisticService.summaryCount(param);
|
||||||
param.getShopId(), param.getProductName(), param.getRangeType(), param.getBeginDate(), param.getEndDate());
|
|
||||||
return CzgResult.success(data);
|
return CzgResult.success(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,8 +57,7 @@ public class SaleSummaryController {
|
|||||||
if (param.getShopId() == null) {
|
if (param.getShopId() == null) {
|
||||||
param.setShopId(shopId);
|
param.setShopId(shopId);
|
||||||
}
|
}
|
||||||
List<ShopProdStatistic> list = prodStatisticService.getArchiveTradeData(
|
List<ShopProdStatistic> list = prodStatisticService.getArchiveTradeData(param);
|
||||||
param.getShopId(),param.getProductName(), param.getRangeType(), param.getBeginDate(), param.getEndDate());
|
|
||||||
return CzgResult.success(list);
|
return CzgResult.success(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,8 +68,7 @@ public class SaleSummaryController {
|
|||||||
if (param.getShopId() == null) {
|
if (param.getShopId() == null) {
|
||||||
param.setShopId(shopId);
|
param.setShopId(shopId);
|
||||||
}
|
}
|
||||||
return prodStatisticService.getArchiveTradeData(
|
return prodStatisticService.getArchiveTradeData(param);
|
||||||
param.getShopId(),param.getProductName(), param.getRangeType(), param.getBeginDate(), param.getEndDate());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ public class StatisticTask {
|
|||||||
|
|
||||||
public void statisticAndInsertProd(Long shopId, LocalDate date) {
|
public void statisticAndInsertProd(Long shopId, LocalDate date) {
|
||||||
try {
|
try {
|
||||||
shopProdStatisticService.statisticAndInsert(shopId, date);
|
shopProdStatisticService.statisticAndInsert(shopId, date, 0L);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("统计商品数据失败,店铺id:{},日期:{}", shopId, date, e);
|
log.error("统计商品数据失败,店铺id:{},日期:{}", shopId, date, e);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,6 +40,13 @@ public class ShopProdStatistic implements Serializable {
|
|||||||
*/
|
*/
|
||||||
@ExcelIgnore
|
@ExcelIgnore
|
||||||
private Long prodId;
|
private Long prodId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分类 ID
|
||||||
|
*/
|
||||||
|
@ExcelIgnore
|
||||||
|
private Long categoryId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 商品名称
|
* 商品名称
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.czg.order.param;
|
|||||||
import com.czg.validator.group.DefaultGroup;
|
import com.czg.validator.group.DefaultGroup;
|
||||||
import jakarta.validation.constraints.NotBlank;
|
import jakarta.validation.constraints.NotBlank;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
@@ -14,6 +15,7 @@ import java.time.LocalDate;
|
|||||||
* @since 2025-03-07 16:23
|
* @since 2025-03-07 16:23
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
|
@Accessors(chain = true)
|
||||||
public class SaleSummaryCountParam implements Serializable {
|
public class SaleSummaryCountParam implements Serializable {
|
||||||
|
|
||||||
@Serial
|
@Serial
|
||||||
@@ -24,6 +26,11 @@ public class SaleSummaryCountParam implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private String productName;
|
private String productName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分类 Id
|
||||||
|
*/
|
||||||
|
private Long categoryId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 开始时间 格式:yyyy-MM-dd
|
* 开始时间 格式:yyyy-MM-dd
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.czg.order.service;
|
package com.czg.order.service;
|
||||||
|
|
||||||
import com.czg.order.entity.ShopProdStatistic;
|
import com.czg.order.entity.ShopProdStatistic;
|
||||||
|
import com.czg.order.param.SaleSummaryCountParam;
|
||||||
import com.czg.order.vo.SaleSummaryCountVo;
|
import com.czg.order.vo.SaleSummaryCountVo;
|
||||||
import com.mybatisflex.core.service.IService;
|
import com.mybatisflex.core.service.IService;
|
||||||
|
|
||||||
@@ -20,13 +21,12 @@ public interface ShopProdStatisticService extends IService<ShopProdStatistic> {
|
|||||||
*
|
*
|
||||||
* @return 商品数据
|
* @return 商品数据
|
||||||
*/
|
*/
|
||||||
SaleSummaryCountVo summaryCount(Long shopId, String productName, String rangeType, LocalDate start, LocalDate end);
|
SaleSummaryCountVo summaryCount(SaleSummaryCountParam param);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取某一段时间的商品交易数据
|
* 获取某一段时间的商品交易数据
|
||||||
*
|
* shopId 店铺id
|
||||||
* @param shopId 店铺id
|
* rangeType 时间范围类型
|
||||||
* @param rangeType 时间范围类型
|
|
||||||
* TODAY, // 今天
|
* TODAY, // 今天
|
||||||
* YESTERDAY, // 昨天
|
* YESTERDAY, // 昨天
|
||||||
* LAST_7_DAYS, // 最近7天
|
* LAST_7_DAYS, // 最近7天
|
||||||
@@ -34,11 +34,11 @@ public interface ShopProdStatisticService extends IService<ShopProdStatistic> {
|
|||||||
* THIS_WEEK, // 本周
|
* THIS_WEEK, // 本周
|
||||||
* THIS_MONTH // 本月
|
* THIS_MONTH // 本月
|
||||||
* CUSTOM // 自定义时间范围
|
* CUSTOM // 自定义时间范围
|
||||||
* @param start 开始时间 格式yyyy-MM-dd 今天/昨天不用传
|
* start 开始时间 格式yyyy-MM-dd 今天/昨天不用传
|
||||||
* @param end 结束时间 格式yyyy-MM-dd 今天/昨天不用传
|
* end 结束时间 格式yyyy-MM-dd 今天/昨天不用传
|
||||||
* @return 商品数据
|
* @return 商品数据
|
||||||
*/
|
*/
|
||||||
List<ShopProdStatistic> getArchiveTradeData(Long shopId, String productName, String rangeType, LocalDate start, LocalDate end);
|
List<ShopProdStatistic> getArchiveTradeData(SaleSummaryCountParam param);
|
||||||
List<ShopProdStatistic> getArchiveTradeDataBy10(Long shopId, Integer day);
|
List<ShopProdStatistic> getArchiveTradeDataBy10(Long shopId, Integer day);
|
||||||
|
|
||||||
//------------------------------------------------------------下列为 后台使用------------------------------------------------------------
|
//------------------------------------------------------------下列为 后台使用------------------------------------------------------------
|
||||||
@@ -46,18 +46,18 @@ public interface ShopProdStatisticService extends IService<ShopProdStatistic> {
|
|||||||
/**
|
/**
|
||||||
* 统计某天数据并插入数据库
|
* 统计某天数据并插入数据库
|
||||||
*/
|
*/
|
||||||
void statisticAndInsert(Long shopId, LocalDate day);
|
void statisticAndInsert(Long shopId, LocalDate day, Long categoryId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 实时统计某天数据
|
* 实时统计某天数据
|
||||||
*/
|
*/
|
||||||
List<ShopProdStatistic> getRealTimeDataByDay(Long shopId, LocalDate day, String productName);
|
List<ShopProdStatistic> getRealTimeDataByDay(Long shopId, LocalDate day, String productName, Long categoryId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取某一天的数据 历史数据
|
* 获取某一天的数据 历史数据
|
||||||
* 从ShopOrderStatistic 表中查询
|
* 从ShopOrderStatistic 表中查询
|
||||||
*/
|
*/
|
||||||
List<ShopProdStatistic> getProdStatSingleDate(Long shopId, LocalDate day, String productName);
|
List<ShopProdStatistic> getProdStatSingleDate(Long shopId, LocalDate day, String productName, Long categoryId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 统计 某时间段数据 总和 不包括当日实时数据
|
* 统计 某时间段数据 总和 不包括当日实时数据
|
||||||
@@ -65,5 +65,5 @@ public interface ShopProdStatisticService extends IService<ShopProdStatistic> {
|
|||||||
* @param start 开始时间
|
* @param start 开始时间
|
||||||
* @param end 结束时间
|
* @param end 结束时间
|
||||||
*/
|
*/
|
||||||
List<ShopProdStatistic> getProdStatDateRange(Long shopId, LocalDate start, LocalDate end, String productName);
|
List<ShopProdStatistic> getProdStatDateRange(Long shopId, LocalDate start, LocalDate end, String productName, Long categoryId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,16 +18,16 @@ public interface ShopProdStatisticMapper extends BaseMapper<ShopProdStatistic> {
|
|||||||
/**
|
/**
|
||||||
* 根据店铺id和日期 统计商品
|
* 根据店铺id和日期 统计商品
|
||||||
*/
|
*/
|
||||||
List<ShopProdStatistic> selectProStatByDay(Long shopId, LocalDate day, String productName);
|
List<ShopProdStatistic> selectProStatByDay(Long shopId, LocalDate day, String productName, Long categoryId);
|
||||||
|
|
||||||
List<ShopProdStatistic> getProdStatSingleDate(Long shopId, LocalDate day, String productName);
|
List<ShopProdStatistic> getProdStatSingleDate(Long shopId, LocalDate day, String productName, Long categoryId);
|
||||||
|
|
||||||
List<ShopProdStatistic> getProdStatDateRange(Long shopId, LocalDate start, LocalDate end, String productName);
|
List<ShopProdStatistic> getProdStatDateRange(Long shopId, LocalDate start, LocalDate end, String productName, Long categoryId);
|
||||||
|
|
||||||
|
|
||||||
//-----------------总统计 总金额统计-----------------
|
//-----------------总统计 总金额统计-----------------
|
||||||
|
|
||||||
SaleSummaryCountVo summaryCountByDay(Long shopId, LocalDate day, String productName);
|
SaleSummaryCountVo summaryCountByDay(Long shopId, LocalDate day, String productName, Long categoryId);
|
||||||
SaleSummaryCountVo summaryCountSingleDate(Long shopId, LocalDate day, String productName);
|
SaleSummaryCountVo summaryCountSingleDate(Long shopId, LocalDate day, String productName, Long categoryId);
|
||||||
SaleSummaryCountVo summaryCountDateRange(Long shopId, LocalDate start, LocalDate end, String productName);
|
SaleSummaryCountVo summaryCountDateRange(Long shopId, LocalDate start, LocalDate end, String productName, Long categoryId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.czg.service.order.service.impl;
|
|||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import com.czg.exception.CzgException;
|
import com.czg.exception.CzgException;
|
||||||
import com.czg.order.entity.ShopProdStatistic;
|
import com.czg.order.entity.ShopProdStatistic;
|
||||||
|
import com.czg.order.param.SaleSummaryCountParam;
|
||||||
import com.czg.order.service.ShopProdStatisticService;
|
import com.czg.order.service.ShopProdStatisticService;
|
||||||
import com.czg.order.vo.SaleSummaryCountVo;
|
import com.czg.order.vo.SaleSummaryCountVo;
|
||||||
import com.czg.service.order.mapper.ShopProdStatisticMapper;
|
import com.czg.service.order.mapper.ShopProdStatisticMapper;
|
||||||
@@ -34,7 +35,9 @@ public class ShopProdStatisticServiceImpl extends ServiceImpl<ShopProdStatisticM
|
|||||||
public List<ShopProdStatistic> getArchiveTradeDataBy10(Long shopId, Integer day) {
|
public List<ShopProdStatistic> getArchiveTradeDataBy10(Long shopId, Integer day) {
|
||||||
LocalDate currentDate = LocalDate.now();
|
LocalDate currentDate = LocalDate.now();
|
||||||
LocalDate startDate = currentDate.minusDays(day - 1);
|
LocalDate startDate = currentDate.minusDays(day - 1);
|
||||||
List<ShopProdStatistic> archiveTradeData = getArchiveTradeData(shopId, null, "", startDate, currentDate);
|
List<ShopProdStatistic> archiveTradeData = getArchiveTradeData(new SaleSummaryCountParam()
|
||||||
|
.setShopId(shopId).setProductName(null).setRangeType("").setBeginDate(startDate)
|
||||||
|
.setEndDate(currentDate).setCategoryId(0L));
|
||||||
// 按照 saleCount 降序排序
|
// 按照 saleCount 降序排序
|
||||||
return archiveTradeData.stream()
|
return archiveTradeData.stream()
|
||||||
.sorted(
|
.sorted(
|
||||||
@@ -50,51 +53,55 @@ public class ShopProdStatisticServiceImpl extends ServiceImpl<ShopProdStatisticM
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SaleSummaryCountVo summaryCount(Long shopId, String productName, String rangeType, LocalDate start, LocalDate end) {
|
public SaleSummaryCountVo summaryCount(SaleSummaryCountParam param) {
|
||||||
LocalDate currentDate = LocalDate.now();
|
LocalDate currentDate = LocalDate.now();
|
||||||
if ("today".equals(rangeType)) {
|
if ("today".equals(param.getRangeType())) {
|
||||||
return mapper.summaryCountByDay(shopId, currentDate, productName);
|
return mapper.summaryCountByDay(param.getShopId(), currentDate, param.getProductName(), param.getCategoryId());
|
||||||
} else if ("yesterday".equals(rangeType)) {
|
|
||||||
return mapper.summaryCountSingleDate(shopId, currentDate.minusDays(1), productName);
|
|
||||||
} else {
|
|
||||||
if (start.isAfter(currentDate)) {
|
|
||||||
throw new CzgException("开始时间不能晚于当前时间");
|
|
||||||
}
|
|
||||||
if (start.equals(end)) {
|
|
||||||
return mapper.summaryCountSingleDate(shopId, start, productName);
|
|
||||||
} else {
|
|
||||||
if (end.isBefore(currentDate)) {
|
|
||||||
return mapper.summaryCountDateRange(shopId, start, end, productName);
|
|
||||||
} else {
|
|
||||||
SaleSummaryCountVo todaySummary = mapper.summaryCountByDay(shopId, currentDate, productName);
|
|
||||||
SaleSummaryCountVo dateRangeSummary = mapper.summaryCountDateRange(shopId, start, end, productName);
|
|
||||||
return mergeSummaryCountVo(todaySummary, dateRangeSummary);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
if ("yesterday".equals(param.getRangeType())) {
|
||||||
|
return mapper.summaryCountSingleDate(param.getShopId(), currentDate.minusDays(1), param.getProductName(), param.getCategoryId());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (param.getBeginDate().isAfter(currentDate)) {
|
||||||
|
throw new CzgException("开始时间不能晚于当前时间");
|
||||||
|
}
|
||||||
|
if (param.getBeginDate().equals(param.getEndDate())) {
|
||||||
|
return mapper.summaryCountSingleDate(param.getShopId(), param.getBeginDate(), param.getProductName(), param.getCategoryId());
|
||||||
|
}
|
||||||
|
if (param.getEndDate().isBefore(currentDate)) {
|
||||||
|
return mapper.summaryCountDateRange(param.getShopId(), param.getBeginDate(), param.getEndDate(), param.getProductName(), param.getCategoryId());
|
||||||
|
}
|
||||||
|
SaleSummaryCountVo todaySummary = mapper.summaryCountByDay(param.getShopId(), currentDate, param.getProductName(), param.getCategoryId());
|
||||||
|
SaleSummaryCountVo dateRangeSummary = mapper.summaryCountDateRange(param.getShopId(), param.getBeginDate(), param.getEndDate(), param.getProductName(), param.getCategoryId());
|
||||||
|
return mergeSummaryCountVo(todaySummary, dateRangeSummary);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ShopProdStatistic> getArchiveTradeData(Long shopId, String productName, String rangeType, LocalDate start, LocalDate end) {
|
public List<ShopProdStatistic> getArchiveTradeData(SaleSummaryCountParam param) {
|
||||||
LocalDate currentDate = LocalDate.now();
|
LocalDate currentDate = LocalDate.now();
|
||||||
productName = CzgStrUtils.getStrOrNull(productName);
|
param.setProductName(CzgStrUtils.getStrOrNull(param.getProductName()));
|
||||||
List<ShopProdStatistic> resultList;
|
List<ShopProdStatistic> resultList;
|
||||||
if ("today".equals(rangeType)) {
|
if ("today".equals(param.getRangeType())) {
|
||||||
resultList = getRealTimeDataByDay(shopId, currentDate, productName);
|
resultList = getRealTimeDataByDay(param.getShopId(), currentDate, param.getProductName(), param.getCategoryId());
|
||||||
} else if ("yesterday".equals(rangeType)) {
|
} else if ("yesterday".equals(param.getRangeType())) {
|
||||||
resultList = getProdStatSingleDate(shopId, currentDate.minusDays(1), productName);
|
resultList = getProdStatSingleDate(param.getShopId(), currentDate.minusDays(1),
|
||||||
|
param.getProductName(), param.getCategoryId());
|
||||||
} else {
|
} else {
|
||||||
if (start.isAfter(currentDate)) {
|
if (param.getBeginDate().isAfter(currentDate)) {
|
||||||
throw new CzgException("开始时间不能晚于当前时间");
|
throw new CzgException("开始时间不能晚于当前时间");
|
||||||
}
|
}
|
||||||
if (start.equals(end)) {
|
if (param.getBeginDate().equals(param.getEndDate())) {
|
||||||
resultList = getProdStatSingleDate(shopId, start, productName);
|
resultList = getProdStatSingleDate(param.getShopId(), param.getBeginDate(), param.getProductName(),
|
||||||
|
param.getCategoryId());
|
||||||
} else {
|
} else {
|
||||||
if (end.isBefore(currentDate)) {
|
if (param.getEndDate().isBefore(currentDate)) {
|
||||||
resultList = getProdStatDateRange(shopId, start, end, productName);
|
resultList = getProdStatDateRange(param.getShopId(), param.getBeginDate(), param.getEndDate(),
|
||||||
|
param.getProductName(), param.getCategoryId());
|
||||||
} else {
|
} else {
|
||||||
List<ShopProdStatistic> realTimeDataByDay = getRealTimeDataByDay(shopId, currentDate, productName);
|
List<ShopProdStatistic> realTimeDataByDay = getRealTimeDataByDay(param.getShopId(), currentDate,
|
||||||
List<ShopProdStatistic> dateRange = getProdStatDateRange(shopId, start, end, productName);
|
param.getProductName(), param.getCategoryId());
|
||||||
|
List<ShopProdStatistic> dateRange = getProdStatDateRange(param.getShopId(), param.getBeginDate(),
|
||||||
|
param.getEndDate(), param.getProductName(), param.getCategoryId());
|
||||||
|
|
||||||
resultList = mergeProdStatistic(realTimeDataByDay, dateRange);
|
resultList = mergeProdStatistic(realTimeDataByDay, dateRange);
|
||||||
}
|
}
|
||||||
@@ -105,20 +112,20 @@ public class ShopProdStatisticServiceImpl extends ServiceImpl<ShopProdStatisticM
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void statisticAndInsert(Long shopId, LocalDate day) {
|
public void statisticAndInsert(Long shopId, LocalDate day, Long categoryId) {
|
||||||
List<ShopProdStatistic> realTimeData = getRealTimeDataByDay(shopId, day, null);
|
List<ShopProdStatistic> realTimeData = getRealTimeDataByDay(shopId, day, null, categoryId);
|
||||||
if (CollUtil.isNotEmpty(realTimeData)) {
|
if (CollUtil.isNotEmpty(realTimeData)) {
|
||||||
boolean exists = exists(QueryWrapper.create().eq(ShopProdStatistic::getShopId, shopId).eq(ShopProdStatistic::getCreateDay, day));
|
boolean exists = exists(QueryWrapper.create().eq(ShopProdStatistic::getShopId, shopId).eq(ShopProdStatistic::getCreateDay, day));
|
||||||
if (exists) {
|
if (exists) {
|
||||||
remove(QueryWrapper.create().eq(ShopProdStatistic::getShopId, shopId).eq(ShopProdStatistic::getCreateDay, day));
|
remove(QueryWrapper.create().eq(ShopProdStatistic::getShopId, shopId).eq(ShopProdStatistic::getCreateDay, day));
|
||||||
}
|
}
|
||||||
mapper.insertBatchSelective(realTimeData, 50);
|
mapper.insertBatchSelective(realTimeData, 50);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ShopProdStatistic> getRealTimeDataByDay(Long shopId, LocalDate day, String productName) {
|
public List<ShopProdStatistic> getRealTimeDataByDay(Long shopId, LocalDate day, String productName, Long categoryId) {
|
||||||
List<ShopProdStatistic> shopProdStatistics = mapper.selectProStatByDay(shopId, day, productName);
|
List<ShopProdStatistic> shopProdStatistics = mapper.selectProStatByDay(shopId, day, productName, categoryId);
|
||||||
// 过滤掉没有有效数据的记录
|
// 过滤掉没有有效数据的记录
|
||||||
shopProdStatistics = shopProdStatistics.stream()
|
shopProdStatistics = shopProdStatistics.stream()
|
||||||
.filter(ShopProdStatistic::isValid)
|
.filter(ShopProdStatistic::isValid)
|
||||||
@@ -128,18 +135,22 @@ public class ShopProdStatisticServiceImpl extends ServiceImpl<ShopProdStatisticM
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ShopProdStatistic> getProdStatSingleDate(Long shopId, LocalDate day, String productName) {
|
public List<ShopProdStatistic> getProdStatSingleDate(Long shopId, LocalDate day, String productName, Long categoryId) {
|
||||||
return mapper.getProdStatSingleDate(shopId, day, productName);
|
return mapper.getProdStatSingleDate(shopId, day, productName, categoryId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ShopProdStatistic> getProdStatDateRange(Long shopId, LocalDate start, LocalDate end, String productName) {
|
public List<ShopProdStatistic> getProdStatDateRange(Long shopId, LocalDate start, LocalDate end, String productName, Long categoryId) {
|
||||||
return mapper.getProdStatDateRange(shopId, start, end, productName);
|
return mapper.getProdStatDateRange(shopId, start, end, productName, categoryId);
|
||||||
}
|
}
|
||||||
|
|
||||||
private SaleSummaryCountVo mergeSummaryCountVo(SaleSummaryCountVo todaySummary, SaleSummaryCountVo dateRangeSummary) {
|
private SaleSummaryCountVo mergeSummaryCountVo(SaleSummaryCountVo todaySummary, SaleSummaryCountVo dateRangeSummary) {
|
||||||
if (todaySummary == null) todaySummary = new SaleSummaryCountVo();
|
if (todaySummary == null) {
|
||||||
if (dateRangeSummary == null) dateRangeSummary = new SaleSummaryCountVo();
|
todaySummary = new SaleSummaryCountVo();
|
||||||
|
}
|
||||||
|
if (dateRangeSummary == null) {
|
||||||
|
dateRangeSummary = new SaleSummaryCountVo();
|
||||||
|
}
|
||||||
|
|
||||||
return new SaleSummaryCountVo(
|
return new SaleSummaryCountVo(
|
||||||
safeAdd(todaySummary.getTotalAmount(), dateRangeSummary.getTotalAmount()),
|
safeAdd(todaySummary.getTotalAmount(), dateRangeSummary.getTotalAmount()),
|
||||||
@@ -158,8 +169,12 @@ public class ShopProdStatisticServiceImpl extends ServiceImpl<ShopProdStatisticM
|
|||||||
* @return 合并后的数据
|
* @return 合并后的数据
|
||||||
*/
|
*/
|
||||||
private List<ShopProdStatistic> mergeProdStatistic(List<ShopProdStatistic> realTimeDataByDay, List<ShopProdStatistic> dateRange) {
|
private List<ShopProdStatistic> mergeProdStatistic(List<ShopProdStatistic> realTimeDataByDay, List<ShopProdStatistic> dateRange) {
|
||||||
if (realTimeDataByDay == null) realTimeDataByDay = new ArrayList<>();
|
if (realTimeDataByDay == null) {
|
||||||
if (dateRange == null) dateRange = new ArrayList<>();
|
realTimeDataByDay = new ArrayList<>();
|
||||||
|
}
|
||||||
|
if (dateRange == null) {
|
||||||
|
dateRange = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
return Stream.concat(realTimeDataByDay.stream(), dateRange.stream())
|
return Stream.concat(realTimeDataByDay.stream(), dateRange.stream())
|
||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
SELECT
|
SELECT
|
||||||
#{shopId} as shopId,
|
#{shopId} as shopId,
|
||||||
#{day} as createDay,
|
#{day} as createDay,
|
||||||
|
prod.category_id AS categoryId,
|
||||||
CASE WHEN detail.is_temporary = 1 THEN -1 ELSE detail.product_id END AS prodId,
|
CASE WHEN detail.is_temporary = 1 THEN -1 ELSE detail.product_id END AS prodId,
|
||||||
CASE WHEN detail.is_temporary = 1 THEN '临时菜' ELSE prod.name END AS productName,
|
CASE WHEN detail.is_temporary = 1 THEN '临时菜' ELSE prod.name END AS productName,
|
||||||
sum(detail.num-detail.return_num) as saleCount,
|
sum(detail.num-detail.return_num) as saleCount,
|
||||||
@@ -17,7 +18,7 @@
|
|||||||
FROM
|
FROM
|
||||||
tb_order_info `order`
|
tb_order_info `order`
|
||||||
INNER JOIN tb_order_detail detail ON `order`.id = detail.order_id
|
INNER JOIN tb_order_detail detail ON `order`.id = detail.order_id
|
||||||
LEFT JOIN tb_product prod ON detail.product_id = prod.id
|
INNER JOIN tb_product prod ON detail.product_id = prod.id
|
||||||
WHERE
|
WHERE
|
||||||
`order`.shop_id = #{shopId}
|
`order`.shop_id = #{shopId}
|
||||||
AND `order`.trade_day = #{day}
|
AND `order`.trade_day = #{day}
|
||||||
@@ -25,6 +26,9 @@
|
|||||||
<if test="productName != null and productName != ''">
|
<if test="productName != null and productName != ''">
|
||||||
AND detail.product_name LIKE CONCAT('%',#{productName},'%')
|
AND detail.product_name LIKE CONCAT('%',#{productName},'%')
|
||||||
</if>
|
</if>
|
||||||
|
<if test="categoryId != null and categoryId > 0">
|
||||||
|
AND prod.category_id = #{categoryId}
|
||||||
|
</if>
|
||||||
GROUP BY prodId
|
GROUP BY prodId
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
@@ -41,6 +45,9 @@
|
|||||||
<if test="productName != null and productName != ''">
|
<if test="productName != null and productName != ''">
|
||||||
AND prod.name LIKE CONCAT('%',#{productName},'%')
|
AND prod.name LIKE CONCAT('%',#{productName},'%')
|
||||||
</if>
|
</if>
|
||||||
|
<if test="categoryId != null and categoryId > 0">
|
||||||
|
AND prod.category_id = #{categoryId}
|
||||||
|
</if>
|
||||||
ORDER BY
|
ORDER BY
|
||||||
tb_shop_prod_statistic.sale_count DESC, tb_shop_prod_statistic.prod_id
|
tb_shop_prod_statistic.sale_count DESC, tb_shop_prod_statistic.prod_id
|
||||||
</select>
|
</select>
|
||||||
@@ -63,6 +70,9 @@
|
|||||||
<if test="productName != null and productName != ''">
|
<if test="productName != null and productName != ''">
|
||||||
AND prod.name LIKE CONCAT('%',#{productName},'%')
|
AND prod.name LIKE CONCAT('%',#{productName},'%')
|
||||||
</if>
|
</if>
|
||||||
|
<if test="categoryId != null and categoryId > 0">
|
||||||
|
AND prod.category_id = #{categoryId}
|
||||||
|
</if>
|
||||||
GROUP BY
|
GROUP BY
|
||||||
tb_shop_prod_statistic.prod_id
|
tb_shop_prod_statistic.prod_id
|
||||||
ORDER BY
|
ORDER BY
|
||||||
@@ -79,7 +89,7 @@
|
|||||||
FROM
|
FROM
|
||||||
tb_order_info `order`
|
tb_order_info `order`
|
||||||
INNER JOIN tb_order_detail detail ON `order`.id = detail.order_id
|
INNER JOIN tb_order_detail detail ON `order`.id = detail.order_id
|
||||||
LEFT JOIN tb_product prod ON detail.product_id = prod.id
|
INNER JOIN tb_product prod ON detail.product_id = prod.id
|
||||||
WHERE
|
WHERE
|
||||||
`order`.shop_id = #{shopId}
|
`order`.shop_id = #{shopId}
|
||||||
AND `order`.trade_day = #{day}
|
AND `order`.trade_day = #{day}
|
||||||
@@ -87,6 +97,9 @@
|
|||||||
<if test="productName != null and productName != ''">
|
<if test="productName != null and productName != ''">
|
||||||
AND detail.product_name LIKE CONCAT('%',#{productName},'%')
|
AND detail.product_name LIKE CONCAT('%',#{productName},'%')
|
||||||
</if>
|
</if>
|
||||||
|
<if test="categoryId != null and categoryId > 0">
|
||||||
|
AND prod.category_id = #{categoryId}
|
||||||
|
</if>
|
||||||
</select>
|
</select>
|
||||||
<select id="summaryCountSingleDate" resultType="com.czg.order.vo.SaleSummaryCountVo">
|
<select id="summaryCountSingleDate" resultType="com.czg.order.vo.SaleSummaryCountVo">
|
||||||
SELECT
|
SELECT
|
||||||
@@ -103,6 +116,9 @@
|
|||||||
<if test="productName != null and productName != ''">
|
<if test="productName != null and productName != ''">
|
||||||
AND prod.name LIKE CONCAT('%',#{productName},'%')
|
AND prod.name LIKE CONCAT('%',#{productName},'%')
|
||||||
</if>
|
</if>
|
||||||
|
<if test="categoryId != null and categoryId > 0">
|
||||||
|
AND prod.category_id = #{categoryId}
|
||||||
|
</if>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="summaryCountDateRange" resultType="com.czg.order.vo.SaleSummaryCountVo">
|
<select id="summaryCountDateRange" resultType="com.czg.order.vo.SaleSummaryCountVo">
|
||||||
@@ -121,6 +137,9 @@
|
|||||||
<if test="productName != null and productName != ''">
|
<if test="productName != null and productName != ''">
|
||||||
AND prod.name LIKE CONCAT('%',#{productName},'%')
|
AND prod.name LIKE CONCAT('%',#{productName},'%')
|
||||||
</if>
|
</if>
|
||||||
|
<if test="categoryId != null and categoryId > 0">
|
||||||
|
AND prod.category_id = #{categoryId}
|
||||||
|
</if>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user