小程序主页接口

This commit is contained in:
张松
2025-03-07 17:00:32 +08:00
parent 9ff72f171e
commit d148aafb48
24 changed files with 879 additions and 99 deletions

View File

@@ -0,0 +1,14 @@
package com.czg.service.order.mapper;
import com.mybatisflex.core.BaseMapper;
import com.czg.order.entity.ShopOrderStatistic;
/**
* 映射层。
*
* @author zs
* @since 2025-03-07
*/
public interface ShopOrderStatisticMapper extends BaseMapper<ShopOrderStatistic> {
}

View File

@@ -0,0 +1,14 @@
package com.czg.service.order.mapper;
import com.mybatisflex.core.BaseMapper;
import com.czg.order.entity.ShopProdStatistic;
/**
* 映射层。
*
* @author zs
* @since 2025-03-07
*/
public interface ShopProdStatisticMapper extends BaseMapper<ShopProdStatistic> {
}

View File

@@ -0,0 +1,21 @@
package com.czg.service.order.mapper;
import com.mybatisflex.core.BaseMapper;
import com.czg.order.entity.ShopTableOrderStatistic;
import java.math.BigDecimal;
import java.util.List;
/**
* 台桌订单统计表 映射层。
*
* @author zs
* @since 2025-03-07
*/
public interface ShopTableOrderStatisticMapper extends BaseMapper<ShopTableOrderStatistic> {
List<ShopTableOrderStatistic> selectSummary(Long shopId, String startTime, String endTime);
boolean incrInfo(long shopId, long tableId, long count, BigDecimal amount, String dateStr);
}

View File

@@ -0,0 +1,28 @@
package com.czg.service.order.service.impl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.czg.order.entity.OrderInfo;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.czg.order.entity.ShopOrderStatistic;
import com.czg.order.service.ShopOrderStatisticService;
import com.czg.service.order.mapper.ShopOrderStatisticMapper;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
/**
* 服务层实现。
*
* @author zs
* @since 2025-03-07
*/
@Service
public class ShopOrderStatisticServiceImpl extends ServiceImpl<ShopOrderStatisticMapper, ShopOrderStatistic> implements ShopOrderStatisticService{
@Override
public void statistic() {
}
}

View File

@@ -0,0 +1,91 @@
package com.czg.service.order.service.impl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.czg.order.entity.OrderDetail;
import com.czg.order.service.OrderDetailService;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.czg.order.entity.ShopProdStatistic;
import com.czg.order.service.ShopProdStatisticService;
import com.czg.service.order.mapper.ShopProdStatisticMapper;
import jakarta.annotation.Resource;
import lombok.Data;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 服务层实现。
*
* @author zs
* @since 2025-03-07
*/
@Service
public class ShopProdStatisticServiceImpl extends ServiceImpl<ShopProdStatisticMapper, ShopProdStatistic> implements ShopProdStatisticService{
@Resource
private OrderDetailService orderDetailService;
@Data
private static class StatisticTask{
private BigDecimal successCount = BigDecimal.ZERO;
private BigDecimal successAmount = BigDecimal.ZERO;
private BigDecimal refundCount = BigDecimal.ZERO;
private BigDecimal refundAmount = BigDecimal.ZERO;
}
@Override
public void statistic() {
// 获取前一天
DateTime yesterday = DateUtil.yesterday();
// 获取前一天的开始时间00:00:00
DateTime startOfDay = DateUtil.beginOfDay(yesterday);
// 获取前一天的结束时间23:59:59
DateTime endOfDay = DateUtil.endOfDay(yesterday);
List<OrderDetail> orderDetails = orderDetailService.list(new QueryWrapper()
.ge(OrderDetail::getCreateTime, startOfDay)
.le(OrderDetail::getCreateTime, endOfDay)
.ne(OrderDetail::getStatus, "wait-pay"));
HashMap<Long, Map<Long, StatisticTask>> countInfo = new HashMap<>();
for (OrderDetail item : orderDetails) {
Map<Long, StatisticTask> map = countInfo.computeIfAbsent(item.getShopId(), k -> new HashMap<>());
StatisticTask statisticTask = map.get(item.getProductId());
if (statisticTask == null) {
map.put(item.getProductId(), statisticTask = new StatisticTask());
}
if ("refunding".equals(item.getStatus()) || "refund".equals(item.getStatus()) || "part-refund".equals(item.getStatus())) {
statisticTask.setRefundAmount(statisticTask.getRefundAmount().add(item.getReturnAmount()));
statisticTask.setRefundCount(statisticTask.getRefundCount().add(item.getRefundNum()));
if (item.getReturnNum().compareTo(item.getNum()) < 0) {
statisticTask.setSuccessAmount(statisticTask.getSuccessAmount().add(item.getPayAmount().subtract(item.getReturnAmount())));
statisticTask.setSuccessCount(statisticTask.getSuccessCount().add(item.getNum().subtract(item.getReturnAmount())));
}
}else {
statisticTask.setSuccessCount(statisticTask.getSuccessCount().add(item.getNum()));
statisticTask.setSuccessAmount(statisticTask.getSuccessAmount().add(item.getPayAmount()));
}
}
countInfo.forEach((shopId, map) -> map.forEach((productId, statisticTask) -> {
ShopProdStatistic statistic = getOne(new QueryWrapper().eq(ShopProdStatistic::getShopId, shopId).eq(ShopProdStatistic::getCreateDay, yesterday.toSqlDate()));
if (statistic == null) {
statistic = new ShopProdStatistic();
statistic.setShopId(shopId);
statistic.setCreateDay(yesterday.toSqlDate());
}
statistic.setProdId(productId);
statistic.setSaleCount(statisticTask.getSuccessCount());
statistic.setSaleAmount(statisticTask.getSuccessAmount());
statistic.setRefundCount(statisticTask.getRefundCount());
statistic.setRefundAmount(statisticTask.getRefundAmount());
saveOrUpdate(statistic);
}));
}
}

View File

@@ -0,0 +1,116 @@
package com.czg.service.order.service.impl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.czg.config.RedisCst;
import com.czg.order.entity.OrderInfo;
import com.czg.order.service.OrderInfoService;
import com.czg.utils.PageUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.czg.order.entity.ShopTableOrderStatistic;
import com.czg.order.service.ShopTableOrderStatisticService;
import com.czg.service.order.mapper.ShopTableOrderStatisticMapper;
import jakarta.annotation.Resource;
import lombok.Data;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
/**
* 台桌订单统计表 服务层实现。
*
* @author zs
* @since 2025-03-07
*/
@Service
public class ShopTableOrderStatisticServiceImpl extends ServiceImpl<ShopTableOrderStatisticMapper, ShopTableOrderStatistic> implements ShopTableOrderStatisticService{
@Resource
private OrderInfoService orderInfoService;
@Override
public Page<ShopTableOrderStatistic> summary(Long shopId, String startTime, String endTime) {
Page<Object> page = PageUtil.buildPage();
PageHelper.startPage(Math.toIntExact(page.getPageNumber()),Math.toIntExact(page.getPageSize()));
return PageUtil.convert(new PageInfo<>(mapper.selectSummary(shopId, startTime, endTime)));
}
@Override
public boolean addInfo(long shopId, long tableId, long count, BigDecimal amount) {
ShopTableOrderStatistic statistic = getOne(new QueryWrapper().eq(ShopTableOrderStatistic::getShopId, shopId).eq(ShopTableOrderStatistic::getTableId, tableId)
.eq(ShopTableOrderStatistic::getCreateDay, DateUtil.date().toDateStr()));
if (statistic == null) {
statistic = new ShopTableOrderStatistic();
statistic.setShopId(shopId);
statistic.setTableId(tableId);
statistic.setCreateDay(DateUtil.date().toSqlDate());
statistic.setOrderCount(count);
statistic.setOrderAmount(amount);
save(statistic);
}
return mapper.incrInfo(shopId, tableId, count, amount, DateUtil.date().toDateStr());
}
@Data
private static class StatisticTask{
private long successCount = 0;
private BigDecimal successAmount = BigDecimal.ZERO;
private long refundCount = 0;
private BigDecimal refundAmount = BigDecimal.ZERO;
}
@Override
public void statistic() {
// 获取前一天
DateTime yesterday = DateUtil.yesterday();
// 获取前一天的开始时间00:00:00
DateTime startOfDay = DateUtil.beginOfDay(yesterday);
// 获取前一天的结束时间23:59:59
DateTime endOfDay = DateUtil.endOfDay(yesterday);
List<OrderInfo> orderInfos = orderInfoService.list(new QueryWrapper()
.ge(OrderInfo::getCreateTime, startOfDay)
.le(OrderInfo::getCreateTime, endOfDay)
.ne(OrderInfo::getStatus, "unpaid").ne(OrderInfo::getStatus, "cancelled"));
HashMap<Long, StatisticTask> countInfo = new HashMap<>();
for (OrderInfo item : orderInfos) {
StatisticTask statisticTask = countInfo.get(item.getShopId());
if (statisticTask == null) {
countInfo.put(item.getShopId(), statisticTask = new StatisticTask());
}
if ("refunding".equals(item.getStatus()) || "refund".equals(item.getStatus()) || "part-refund".equals(item.getStatus())) {
statisticTask.setRefundAmount(statisticTask.getRefundAmount().add(item.getRefundAmount()));
statisticTask.setRefundCount(statisticTask.getRefundCount() + 1);
if (item.getRefundAmount().compareTo(item.getPayAmount()) < 0) {
statisticTask.setSuccessAmount(statisticTask.getSuccessAmount().add(item.getPayAmount().subtract(item.getRefundAmount())));
}
}else {
statisticTask.setSuccessCount(statisticTask.getSuccessCount() + 1);
statisticTask.setSuccessAmount(statisticTask.getSuccessAmount().add(item.getPayAmount()));
}
}
countInfo.forEach((shopId, statisticTask) -> {
ShopTableOrderStatistic statistic = getOne(new QueryWrapper().eq(ShopTableOrderStatistic::getShopId, shopId).eq(ShopTableOrderStatistic::getCreateDay, yesterday.toSqlDate()));
if (statistic == null) {
statistic = new ShopTableOrderStatistic();
statistic.setShopId(shopId);
statistic.setTableId(0L);
statistic.setCreateDay(yesterday.toSqlDate());
}
statistic.setOrderCount(statisticTask.getSuccessCount());
statistic.setOrderAmount(statisticTask.getSuccessAmount());
statistic.setRefundCount(statisticTask.getRefundCount());
statistic.setRefundAmount(statisticTask.getRefundAmount());
saveOrUpdate(statistic);
});
}
}

View File

@@ -0,0 +1,7 @@
<?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.czg.service.order.mapper.ShopOrderStatisticMapper">
</mapper>

View File

@@ -0,0 +1,7 @@
<?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.czg.service.order.mapper.ShopProdStatisticMapper">
</mapper>

View File

@@ -0,0 +1,29 @@
<?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.czg.service.order.mapper.ShopTableOrderStatisticMapper">
<update id="incrInfo">
update tb_shop_table_order_statistic set order_count=order_count + #{count}, order_amount=order_amount + #{count}
where shop_id = #{shopId} and table_id = #{tableId} and create_day=#{date}
</update>
<select id="selectSummary" resultType="com.czg.order.entity.ShopTableOrderStatistic">
SELECT
a.table_id as tableId, b.name as name, sum(a.order_count) as orderCount, sum(a.order_amount) as orderAmount
FROM
tb_shop_table_order_statistic as a
left join tb_shop_table as b on a.table_id = b.id
WHERE
a.shop_id = #{shopId}
<if test="startTime != null and startTime != ''">
AND a.create_day >= #{startTime}
</if>
<if test="endTime != null and endTime != ''">
and a.create_day &lt;= #{endTime}
</if>
GROUP BY
a.table_id
order by a.id desc
</select>
</mapper>