This commit is contained in:
wwb 2026-03-16 19:29:01 +08:00
parent 6a1c4a7b10
commit 2eb8736140
4 changed files with 104 additions and 31 deletions

View File

@ -88,6 +88,16 @@ public interface SaleOrderMapper extends BaseMapperX<SaleOrderDO> {
List<TradeOrderTrendRespVO> selectListByPayTimeBetweenAndGroupByDay(@Param("beginTime") LocalDateTime beginTime,
@Param("endTime") LocalDateTime endTime);
/**
* 按照支付时间统计订单按月分组
*
* @param beginTime 支付起始时间
* @param endTime 支付截止时间
* @return 订单统计列表
*/
List<TradeOrderTrendRespVO> selectListByPayTimeBetweenAndGroupByWeek(@Param("beginTime") LocalDateTime beginTime,
@Param("endTime") LocalDateTime endTime);
/**
* 按照支付时间统计订单按月分组
*
@ -97,6 +107,17 @@ public interface SaleOrderMapper extends BaseMapperX<SaleOrderDO> {
*/
List<TradeOrderTrendRespVO> selectListByPayTimeBetweenAndGroupByMonth(@Param("beginTime") LocalDateTime beginTime,
@Param("endTime") LocalDateTime endTime);
/**
* 按照支付时间统计订单按年分组
*
* @param beginTime 支付起始时间
* @param endTime 支付截止时间
* @return 订单统计列表
*/
List<TradeOrderTrendRespVO> selectListByPayTimeBetweenAndGroupByYear(@Param("beginTime") LocalDateTime beginTime,
@Param("endTime") LocalDateTime endTime);
/**
* 更新汇总销售订单总数量总金额

View File

@ -822,40 +822,46 @@ public class SaleOrderServiceImpl implements SaleOrderService {
reqVO.setBeginTime(DateUtil.beginOfDay(DateUtil.offsetDay(new Date(),-30)).toLocalDateTime());
reqVO.setEndTime(DateUtil.endOfDay(new Date()).toLocalDateTime());
}else if(reqVO.getType() == 7){//
reqVO.setBeginTime(DateUtil.beginOfWeek(new Date()).toLocalDateTime());
reqVO.setEndTime(DateUtil.endOfWeek(new Date()).toLocalDateTime());
Date beginTime = DateUtil.offsetWeek(new Date(),-12);
Date endTime = new Date();
reqVO.setBeginTime(DateUtil.beginOfWeek(beginTime).toLocalDateTime());
reqVO.setEndTime(DateUtil.endOfWeek(endTime).toLocalDateTime());
}else if(reqVO.getType() == 30){//
reqVO.setBeginTime(DateUtil.beginOfMonth(new Date()).toLocalDateTime());
reqVO.setEndTime(DateUtil.endOfMonth(new Date()).toLocalDateTime());
Date beginTime = DateUtil.offsetMonth(new Date(),-12);
Date endTime = new Date();
reqVO.setBeginTime(DateUtil.beginOfMonth(beginTime).toLocalDateTime());
reqVO.setEndTime(DateUtil.endOfMonth(endTime).toLocalDateTime());
}else if(reqVO.getType() == 365){//
reqVO.setBeginTime(DateUtil.beginOfYear(new Date()).toLocalDateTime());
reqVO.setEndTime(DateUtil.endOfYear(new Date()).toLocalDateTime());
Date beginTime = DateUtil.offset(new Date(),DateField.YEAR,-12);
Date endTime = new Date();
reqVO.setBeginTime(DateUtil.beginOfYear(beginTime).toLocalDateTime());
reqVO.setEndTime(DateUtil.endOfYear(endTime).toLocalDateTime());
}
List<TradeOrderTrendRespVO> value = getOrderCountTrend(reqVO.getType(),reqVO.getBeginTime() , reqVO.getEndTime());
// 查询对照数据
LocalDateTime referenceEndTime = reqVO.getBeginTime().minusDays(1);
LocalDateTime referenceBeginTime = referenceEndTime.minus(Duration.between(reqVO.getBeginTime(), reqVO.getEndTime()));
if(reqVO.getType() == 7){//
referenceEndTime = DateUtil.beginOfWeek(DateUtil.offsetWeek(new Date(),-1)).toLocalDateTime();
referenceBeginTime = DateUtil.endOfWeek(DateUtil.offsetWeek(new Date(),-1)).toLocalDateTime();
referenceEndTime = DateUtil.beginOfWeek(DateUtil.offsetWeek(LocalDateTimeUtils.toDate(reqVO.getBeginTime()),-1)).toLocalDateTime();
referenceBeginTime = DateUtil.endOfWeek(DateUtil.offsetWeek(LocalDateTimeUtils.toDate(reqVO.getBeginTime()),-1)).toLocalDateTime();
}else if(reqVO.getType() == 30){//
referenceEndTime = DateUtil.beginOfMonth(DateUtil.offsetMonth(new Date(),-1)).toLocalDateTime();
referenceBeginTime = DateUtil.endOfMonth(DateUtil.offsetMonth(new Date(),-1)).toLocalDateTime();
referenceEndTime = DateUtil.beginOfMonth(DateUtil.offsetMonth(LocalDateTimeUtils.toDate(reqVO.getBeginTime()),-1)).toLocalDateTime();
referenceBeginTime = DateUtil.endOfMonth(DateUtil.offsetMonth(LocalDateTimeUtils.toDate(reqVO.getBeginTime()),-1)).toLocalDateTime();
}else if(reqVO.getType() == 365){//
referenceEndTime = DateUtil.beginOfYear(DateUtil.offset(new Date(), DateField.YEAR,-1)).toLocalDateTime();
referenceBeginTime = DateUtil.endOfYear(DateUtil.offset(new Date(), DateField.YEAR,-1)).toLocalDateTime();
referenceEndTime = DateUtil.beginOfYear(DateUtil.offset(LocalDateTimeUtils.toDate(reqVO.getBeginTime()), DateField.YEAR,-1)).toLocalDateTime();
referenceBeginTime = DateUtil.endOfYear(DateUtil.offset(LocalDateTimeUtils.toDate(reqVO.getBeginTime()), DateField.YEAR,-1)).toLocalDateTime();
}
List<TradeOrderTrendRespVO> reference = new ArrayList<>();
List<DataComparisonRespVO<TradeOrderTrendRespVO>> collect = new ArrayList<>();
if(reqVO.getType()>1){
reference = getOrderCountTrend(reqVO.getType(), referenceBeginTime, referenceEndTime);
List<TradeOrderTrendRespVO> reference = getOrderCountTrend(reqVO.getType(), referenceBeginTime, referenceEndTime);
// 顺序对比返回
collect = IntStream.range(0, value.size())
.mapToObj(index -> new DataComparisonRespVO<TradeOrderTrendRespVO>()
.setValue(CollUtil.get(value, index))
.setReference(CollUtil.get(reference, index)))
.collect(Collectors.toList());
}
// 顺序对比返回
List<DataComparisonRespVO<TradeOrderTrendRespVO>> collect = IntStream.range(0, value.size())
.mapToObj(index -> new DataComparisonRespVO<TradeOrderTrendRespVO>()
.setValue(CollUtil.get(value, index))
.setReference(CollUtil.get(reference, index)))
.collect(Collectors.toList());
// 降序排序
if(!collect.isEmpty()){
@ -864,12 +870,22 @@ public class SaleOrderServiceImpl implements SaleOrderService {
if(StringUtils.isNotBlank(date) && date.length()>7){
flag = false;
}
if(flag) {//
if(reqVO.getType() == 7){//
collect.sort(Comparator.comparing(
vo -> DateUtil.parseDate(vo.getValue().getDate()+"-01"), // 根据实际字段调整
vo -> Integer.valueOf(vo.getValue().getDate()), // 根据实际字段调整
Comparator.reverseOrder()
));
}else {
} else if(reqVO.getType() == 30) {//
collect.sort(Comparator.comparing(
vo -> Integer.valueOf(vo.getValue().getDate()), // 根据实际字段调整
Comparator.reverseOrder()
));
} else if(reqVO.getType() == 365) {//
collect.sort(Comparator.comparing(
vo -> Integer.valueOf(vo.getValue().getDate()), // 根据实际字段调整
Comparator.reverseOrder()
));
} else {
collect.sort(Comparator.comparing(
vo -> DateUtil.parseDate(vo.getValue().getDate()), // 根据实际字段调整
Comparator.reverseOrder()
@ -1243,7 +1259,11 @@ public class SaleOrderServiceImpl implements SaleOrderService {
private List<TradeOrderTrendRespVO> getOrderCountTrend(Integer timeRangeType, LocalDateTime beginTime, LocalDateTime endTime) {
// 情况一按年统计时以月份分组
if (TimeRangeTypeEnum.YEAR.getType().equals(timeRangeType)) {
return saleOrderMapper.selectListByPayTimeBetweenAndGroupByYear(beginTime, endTime);
}else if (TimeRangeTypeEnum.MONTH.getType().equals(timeRangeType)) {
return saleOrderMapper.selectListByPayTimeBetweenAndGroupByMonth(beginTime, endTime);
}else if (TimeRangeTypeEnum.WEEK.getType().equals(timeRangeType)) {
return saleOrderMapper.selectListByPayTimeBetweenAndGroupByWeek(beginTime, endTime);
}
// 情况二其它以天分组
return saleOrderMapper.selectListByPayTimeBetweenAndGroupByDay(beginTime, endTime);

View File

@ -79,11 +79,23 @@
GROUP BY date
</select>
<select id="selectListByPayTimeBetweenAndGroupByWeek"
resultType="cn.hangtag.module.oms.controller.admin.trade.vo.TradeOrderTrendRespVO">
SELECT DATE_FORMAT(DATE_SUB(create_time, INTERVAL WEEKDAY(create_time) DAY), '%Y%m%d') AS date,
COUNT(1) AS orderCount,
SUM(order_amount) AS orderAmount
FROM oms_saleorder
WHERE bill_status = 'C'
AND create_time BETWEEN #{beginTime} AND #{endTime}
AND deleted = FALSE
GROUP BY date
</select>
<select id="selectListByPayTimeBetweenAndGroupByMonth"
resultType="cn.hangtag.module.oms.controller.admin.trade.vo.TradeOrderTrendRespVO">
SELECT DATE_FORMAT(create_time, '%Y-%m') AS date,
SELECT DATE_FORMAT(create_time, '%Y%m') AS date,
COUNT(1) AS orderCount,
SUM(order_amount) AS orderAmount
FROM oms_saleorder
@ -94,6 +106,19 @@
</select>
<select id="selectListByPayTimeBetweenAndGroupByYear"
resultType="cn.hangtag.module.oms.controller.admin.trade.vo.TradeOrderTrendRespVO">
SELECT DATE_FORMAT(create_time, '%Y') AS date,
COUNT(1) AS orderCount,
SUM(order_amount) AS orderAmount
FROM oms_saleorder
WHERE bill_status = 'C'
AND create_time BETWEEN #{beginTime} AND #{endTime}
AND deleted = FALSE
GROUP BY date
</select>
<select id="querySumTotalQty" resultType="Long" >
select COALESCE(sum(b.qty),0) from oms_saleorder a
left join oms_saleorder_entry b on a.id = b.parent_id

View File

@ -75,9 +75,9 @@ const timeRange = new Map()
const eChartOptions = reactive<EChartsOption>({
grid: {
left: 20,
right: 20,
right: '10%',
bottom: 20,
top: 80,
top: 50,
containLabel: true
},
legend: {
@ -118,13 +118,20 @@ const eChartOptions = reactive<EChartsOption>({
case TimeRangeTypeEnum.DAY30:
return formatDate(date, 'MM-DD')
case TimeRangeTypeEnum.WEEK:
let weekDay = formatDate(date, 'DDD')
if (weekDay == '0') weekDay = '日'
return '周' + weekDay
let weekDay = formatDate(date, 'ddd')
if (weekDay == 'Sun') weekDay = '日'
if (weekDay == 'Mon') weekDay = '一'
if (weekDay == 'Tue') weekDay = '二'
if (weekDay == 'Wed') weekDay = '三'
if (weekDay == 'Thu') weekDay = '四'
if (weekDay == 'Fri') weekDay = '五'
if (weekDay == 'Sat') weekDay = '六'
//return '' + weekDay
return formatDate(date, 'YYYYMMDD')
case TimeRangeTypeEnum.MONTH:
return formatDate(date, 'D')
return formatDate(date, 'YYYYMM')
case TimeRangeTypeEnum.YEAR:
return formatDate(date, 'M') + '月'
return formatDate(date, 'YYYY')
default:
return date
}