跟新订单统计为实时跟新

This commit is contained in:
qjq
2024-12-05 14:27:20 +08:00
parent 37ea133cc9
commit ef8f52e418
4 changed files with 96 additions and 27 deletions

View File

@ -1,46 +1,32 @@
package cn.iocoder.yudao.module.member.job; package cn.iocoder.yudao.module.member.job;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.ObjUtil;
import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler; import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore; import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
import cn.iocoder.yudao.module.member.dal.dataobject.statisticsspacecapsuleorder.StatisticsSpaceCapsuleOrderDO;
import cn.iocoder.yudao.module.member.dal.mysql.statisticsspacecapsuleorder.StatisticsSpaceCapsuleOrderMapper;
import cn.iocoder.yudao.module.member.service.statisticsspacecapsuleorder.StatisticsSpaceCapsuleOrderService; import cn.iocoder.yudao.module.member.service.statisticsspacecapsuleorder.StatisticsSpaceCapsuleOrderService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List;
@Slf4j @Slf4j
@Component @Component
public class StatisticsSpaceCapsuleOrderJob implements JobHandler { public class StatisticsSpaceCapsuleOrderJob implements JobHandler {
@Resource @Resource
private StatisticsSpaceCapsuleOrderMapper statisticsSpaceCapsuleOrderMapper; private StatisticsSpaceCapsuleOrderService capsuleOrderService;
@Resource
private StatisticsSpaceCapsuleOrderService statisticsSpaceCapsuleOrderService;
@Override @Override
@TenantIgnore @TenantIgnore
public String execute(String param) throws Exception { public String execute(String param) throws Exception {
log.info("开始进行定时统计================》"); log.info("开始进行定时统计================》");
DateTime date = DateUtil.date(); capsuleOrderService.init();
DateTime dateTime = DateUtil.offsetDay(date, -1); return "初始化太空舱订单成功";
//获取开始时间
DateTime startTime = DateUtil.beginOfDay(dateTime);
//结束时间
DateTime endTime = DateUtil.endOfDay(dateTime);
List<StatisticsSpaceCapsuleOrderDO> statistics = statisticsSpaceCapsuleOrderService.statistics(startTime, endTime);
if(ObjUtil.isNotEmpty(statistics)){
log.info("定时统计数量{}",statistics.size());
statisticsSpaceCapsuleOrderMapper.insertBatch(statistics);
return "定时统计数量"+ statistics.size();
}else{
return "没有定时统计数量";
}
} }
} }

View File

@ -1,8 +1,11 @@
package cn.iocoder.yudao.module.member.service.orderspacecapsule; package cn.iocoder.yudao.module.member.service.orderspacecapsule;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.lang.UUID; import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.extra.qrcode.QrCodeUtil; import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONConfig; import cn.hutool.json.JSONConfig;
@ -15,15 +18,20 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.*; import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.*;
import cn.iocoder.yudao.module.member.dal.dataobject.orderspacecapsule.OrderSpaceCapsuleDO; import cn.iocoder.yudao.module.member.dal.dataobject.orderspacecapsule.OrderSpaceCapsuleDO;
import cn.iocoder.yudao.module.member.dal.dataobject.spacecapsule.SpaceCapsuleDO; import cn.iocoder.yudao.module.member.dal.dataobject.spacecapsule.SpaceCapsuleDO;
import cn.iocoder.yudao.module.member.dal.dataobject.statisticsspacecapsuleorder.StatisticsSpaceCapsuleOrderDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
import cn.iocoder.yudao.module.member.dal.mysql.orderspacecapsule.OrderSpaceCapsuleMapper; import cn.iocoder.yudao.module.member.dal.mysql.orderspacecapsule.OrderSpaceCapsuleMapper;
import cn.iocoder.yudao.module.member.dal.mysql.statisticsspacecapsuleorder.StatisticsSpaceCapsuleOrderMapper;
import cn.iocoder.yudao.module.member.enums.*; import cn.iocoder.yudao.module.member.enums.*;
import cn.iocoder.yudao.module.member.service.amount.DeductionService; import cn.iocoder.yudao.module.member.service.amount.DeductionService;
import cn.iocoder.yudao.module.member.service.carteenmoney.CarteenMoneyService; import cn.iocoder.yudao.module.member.service.carteenmoney.CarteenMoneyService;
import cn.iocoder.yudao.module.member.service.spacecapsule.SpaceCapsuleService; import cn.iocoder.yudao.module.member.service.spacecapsule.SpaceCapsuleService;
import cn.iocoder.yudao.module.member.service.statisticsspacecapsuleorder.StatisticsSpaceCapsuleOrderService;
import cn.iocoder.yudao.module.member.service.user.MemberUserService; import cn.iocoder.yudao.module.member.service.user.MemberUserService;
import cn.iocoder.yudao.module.system.api.carteen.CarteenApi; import cn.iocoder.yudao.module.system.api.carteen.CarteenApi;
import cn.iocoder.yudao.module.system.api.carteen.dto.CarteenRespDto;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
@ -42,6 +50,7 @@ import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.Duration; import java.time.Duration;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -60,6 +69,8 @@ public class OrderSpaceCapsuleServiceImpl implements OrderSpaceCapsuleService {
@Resource @Resource
private OrderSpaceCapsuleMapper orderSpaceCapsuleMapper; private OrderSpaceCapsuleMapper orderSpaceCapsuleMapper;
@Resource @Resource
private StatisticsSpaceCapsuleOrderService statisticsSpaceCapsuleOrderService;
@Resource
private DeductionService deductionService; private DeductionService deductionService;
@Resource @Resource
private SpaceCapsuleService spaceCapsuleService; private SpaceCapsuleService spaceCapsuleService;
@ -131,7 +142,7 @@ public class OrderSpaceCapsuleServiceImpl implements OrderSpaceCapsuleService {
updateObj.setOrderEndTime(LocalDateTime.now()); updateObj.setOrderEndTime(LocalDateTime.now());
}else if(updateObj.getStatus().equals(SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_DONE.getCode())){ }else if(updateObj.getStatus().equals(SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_DONE.getCode())){
updateObj.setSpaceCapsuleId(spaceCapsule.getId()); updateObj.setSpaceCapsuleId(spaceCapsule.getId());
updateObj.setOrderEndTime(LocalDateTime.now()); updateObj.setOrderEndTime(LocalDateTimeUtil.offset(updateObj.getOrderStartTime(), (long) updateObj.getComboNum() *updateObj.getComboMinutes(), ChronoUnit.MINUTES));
updateSpaceCapsuleStatus(spaceCapsule, SpaceCapsuleEnum.SPACE_CAPSULE_ENUM_FREE_TIME.getCode()); updateSpaceCapsuleStatus(spaceCapsule, SpaceCapsuleEnum.SPACE_CAPSULE_ENUM_FREE_TIME.getCode());
}else if(updateObj.getStatus().equals(SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_IN_USE.getCode())){ }else if(updateObj.getStatus().equals(SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_IN_USE.getCode())){
if(currentStatus.equals(SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_UNUSED.getCode()) if(currentStatus.equals(SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_UNUSED.getCode())
@ -145,6 +156,10 @@ public class OrderSpaceCapsuleServiceImpl implements OrderSpaceCapsuleService {
} }
// 更新数据库 // 更新数据库
orderSpaceCapsuleMapper.updateById(updateObj); orderSpaceCapsuleMapper.updateById(updateObj);
//单独处理
if(updateObj.getStatus().equals(SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_DONE.getCode()) || updateObj.getStatus().equals(SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_REFUNDED.getCode()) ){
statisticsSpaceCapsuleOrderService.updateStatistics(updateObj);
}
} }
// 处理退款逻辑 // 处理退款逻辑
private void handleRefund(OrderSpaceCapsuleDO updateObj, Integer currentStatus) { private void handleRefund(OrderSpaceCapsuleDO updateObj, Integer currentStatus) {

View File

@ -1,11 +1,13 @@
package cn.iocoder.yudao.module.member.service.statisticsspacecapsuleorder; package cn.iocoder.yudao.module.member.service.statisticsspacecapsuleorder;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.OrderSpaceCapsuleSaveReqVO;
import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.OrderSpaceCapsuleStatisticsVo; import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.OrderSpaceCapsuleStatisticsVo;
import cn.iocoder.yudao.module.member.controller.admin.statisticsspacecapsuleorder.vo.SpaceCapsuleOrderNameRespVO; import cn.iocoder.yudao.module.member.controller.admin.statisticsspacecapsuleorder.vo.SpaceCapsuleOrderNameRespVO;
import cn.iocoder.yudao.module.member.controller.admin.statisticsspacecapsuleorder.vo.SpaceCapsuleOrderReqVO; import cn.iocoder.yudao.module.member.controller.admin.statisticsspacecapsuleorder.vo.SpaceCapsuleOrderReqVO;
import cn.iocoder.yudao.module.member.controller.admin.statisticsspacecapsuleorder.vo.StatisticsSpaceCapsuleOrderPageReqVO; import cn.iocoder.yudao.module.member.controller.admin.statisticsspacecapsuleorder.vo.StatisticsSpaceCapsuleOrderPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.statisticsspacecapsuleorder.vo.StatisticsSpaceCapsuleOrderSaveReqVO; import cn.iocoder.yudao.module.member.controller.admin.statisticsspacecapsuleorder.vo.StatisticsSpaceCapsuleOrderSaveReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.orderspacecapsule.OrderSpaceCapsuleDO;
import cn.iocoder.yudao.module.member.dal.dataobject.statisticsspacecapsuleorder.StatisticsSpaceCapsuleOrderDO; import cn.iocoder.yudao.module.member.dal.dataobject.statisticsspacecapsuleorder.StatisticsSpaceCapsuleOrderDO;
import java.util.*; import java.util.*;
@ -58,4 +60,11 @@ public interface StatisticsSpaceCapsuleOrderService {
List<StatisticsSpaceCapsuleOrderDO> statistics(Date startTime,Date endTime); List<StatisticsSpaceCapsuleOrderDO> statistics(Date startTime,Date endTime);
OrderSpaceCapsuleStatisticsVo compDayMon(Long carteenId,String type,Date time); OrderSpaceCapsuleStatisticsVo compDayMon(Long carteenId,String type,Date time);
List<SpaceCapsuleOrderNameRespVO> getStatisticsSpaceCapsuleOrder(SpaceCapsuleOrderReqVO vo); List<SpaceCapsuleOrderNameRespVO> getStatisticsSpaceCapsuleOrder(SpaceCapsuleOrderReqVO vo);
/**
* 实时跟新太空舱统计
* @param vo
*/
void updateStatistics(OrderSpaceCapsuleDO vo);
void init();
} }

View File

@ -1,14 +1,18 @@
package cn.iocoder.yudao.module.member.service.statisticsspacecapsuleorder; package cn.iocoder.yudao.module.member.service.statisticsspacecapsuleorder;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.*; import cn.hutool.core.date.*;
import cn.hutool.core.util.ObjUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.OrderSpaceCapsuleSaveReqVO;
import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.OrderSpaceCapsuleStatisticsComVo; import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.OrderSpaceCapsuleStatisticsComVo;
import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.OrderSpaceCapsuleStatisticsVo; import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.OrderSpaceCapsuleStatisticsVo;
import cn.iocoder.yudao.module.member.controller.admin.statisticsspacecapsuleorder.vo.SpaceCapsuleOrderNameRespVO; import cn.iocoder.yudao.module.member.controller.admin.statisticsspacecapsuleorder.vo.SpaceCapsuleOrderNameRespVO;
import cn.iocoder.yudao.module.member.controller.admin.statisticsspacecapsuleorder.vo.SpaceCapsuleOrderReqVO; import cn.iocoder.yudao.module.member.controller.admin.statisticsspacecapsuleorder.vo.SpaceCapsuleOrderReqVO;
import cn.iocoder.yudao.module.member.controller.admin.statisticsspacecapsuleorder.vo.StatisticsSpaceCapsuleOrderPageReqVO; import cn.iocoder.yudao.module.member.controller.admin.statisticsspacecapsuleorder.vo.StatisticsSpaceCapsuleOrderPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.statisticsspacecapsuleorder.vo.StatisticsSpaceCapsuleOrderSaveReqVO; import cn.iocoder.yudao.module.member.controller.admin.statisticsspacecapsuleorder.vo.StatisticsSpaceCapsuleOrderSaveReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.orderspacecapsule.OrderSpaceCapsuleDO;
import cn.iocoder.yudao.module.member.dal.dataobject.spacecapsule.SpaceCapsuleDO; import cn.iocoder.yudao.module.member.dal.dataobject.spacecapsule.SpaceCapsuleDO;
import cn.iocoder.yudao.module.member.dal.dataobject.statisticsspacecapsuleorder.StatisticsSpaceCapsuleOrderDO; import cn.iocoder.yudao.module.member.dal.dataobject.statisticsspacecapsuleorder.StatisticsSpaceCapsuleOrderDO;
import cn.iocoder.yudao.module.member.dal.mysql.orderspacecapsule.OrderSpaceCapsuleMapper; import cn.iocoder.yudao.module.member.dal.mysql.orderspacecapsule.OrderSpaceCapsuleMapper;
@ -18,6 +22,7 @@ import cn.iocoder.yudao.module.member.enums.SpaceCapsuleOrderEnum;
import cn.iocoder.yudao.module.member.service.orderspacecapsule.OrderSpaceCapsuleServiceImpl; import cn.iocoder.yudao.module.member.service.orderspacecapsule.OrderSpaceCapsuleServiceImpl;
import cn.iocoder.yudao.module.system.api.carteen.CarteenApi; import cn.iocoder.yudao.module.system.api.carteen.CarteenApi;
import cn.iocoder.yudao.module.system.api.carteen.dto.CarteenRespDto; import cn.iocoder.yudao.module.system.api.carteen.dto.CarteenRespDto;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@ -43,8 +48,6 @@ public class StatisticsSpaceCapsuleOrderServiceImpl implements StatisticsSpaceCa
private SpaceCapsuleMapper spaceCapsuleMapper; private SpaceCapsuleMapper spaceCapsuleMapper;
@Resource @Resource
private StatisticsSpaceCapsuleOrderMapper statisticsSpaceCapsuleOrderMapper; private StatisticsSpaceCapsuleOrderMapper statisticsSpaceCapsuleOrderMapper;
@Resource
private OrderSpaceCapsuleServiceImpl orderSpaceCapsuleService;
@Override @Override
public Long createStatisticsSpaceCapsuleOrder(StatisticsSpaceCapsuleOrderSaveReqVO createReqVO) { public Long createStatisticsSpaceCapsuleOrder(StatisticsSpaceCapsuleOrderSaveReqVO createReqVO) {
// 插入 // 插入
@ -126,6 +129,62 @@ public class StatisticsSpaceCapsuleOrderServiceImpl implements StatisticsSpaceCa
} }
return list; return list;
} }
@Override
public void updateStatistics(OrderSpaceCapsuleDO vo) {
DateTime date = DateUtil.date();
DateTime start = DateUtil.beginOfDay(date);
DateTime end = DateUtil.endOfDay(date);
StatisticsSpaceCapsuleOrderDO orderDO = statisticsSpaceCapsuleOrderMapper.selectOne(new LambdaQueryWrapperX<StatisticsSpaceCapsuleOrderDO>()
.eq(StatisticsSpaceCapsuleOrderDO::getCarteenId, vo.getCarteenId())
.between(StatisticsSpaceCapsuleOrderDO::getCreateTime, start, end)
.last(" limit 1")
);
if(ObjUtil.isNotEmpty(orderDO)){
OrderSpaceCapsuleDO orderSpaceCapsuleDO = orderSpaceCapsuleMapper.selectById(vo.getId());
updateStatistics(orderDO,orderSpaceCapsuleDO);
statisticsSpaceCapsuleOrderMapper.updateById(orderDO);
}else{
CarteenRespDto carteenById = carteenApi.getCarteenById(vo.getCarteenId());
StatisticsSpaceCapsuleOrderDO statisticsSpaceCapsuleOrderDO = getStatisticsSpaceCapsuleOrderDO(carteenById);
statisticsSpaceCapsuleOrderMapper.insert(statisticsSpaceCapsuleOrderDO);
this.updateStatistics(vo);
}
}
public void updateStatistics( StatisticsSpaceCapsuleOrderDO orderDO,OrderSpaceCapsuleDO vo) {
//进行运算加
orderDO.setTotalMoney(orderDO.getTotalMoney().add(vo.getMoney()));
orderDO.setTotalOrder(orderDO.getTotalOrder()+1);
orderDO.setTotalMinute(orderDO.getTotalMinute().add(new BigDecimal(vo.getComboMinutes()*vo.getComboNum())));
orderDO.setRefundMoney(orderDO.getRefundMoney().add(vo.getRefundMoney() == null ? BigDecimal.ZERO:vo.getRefundMoney()));
orderDO.setTotalPackageSum(orderDO.getTotalPackageSum()+vo.getComboNum());
orderDO.setTotalCustomer(orderDO.getTotalCustomer()+1);
}
@Override
public void init() {
List<StatisticsSpaceCapsuleOrderDO> list=new ArrayList<>();
for (CarteenRespDto carteenRespDto : carteenApi.getCarteenList()) {
StatisticsSpaceCapsuleOrderDO orderDO = getStatisticsSpaceCapsuleOrderDO(carteenRespDto);
list.add(orderDO);
}
if(CollUtil.isNotEmpty(list)) {
statisticsSpaceCapsuleOrderMapper.insertBatch(list);
}
}
private static StatisticsSpaceCapsuleOrderDO getStatisticsSpaceCapsuleOrderDO(CarteenRespDto carteenRespDto) {
DateTime date = DateUtil.date();
StatisticsSpaceCapsuleOrderDO orderDO=new StatisticsSpaceCapsuleOrderDO();
orderDO.setTotalMoney(BigDecimal.ZERO);
orderDO.setTotalOrder(0);
orderDO.setTotalMinute(BigDecimal.ZERO);
orderDO.setCarteenId(carteenRespDto.getId());
orderDO.setRefundMoney(BigDecimal.ZERO);
orderDO.setTotalPackageSum(0);
orderDO.setCarteenName(carteenRespDto.getStoresName());
orderDO.setRemark(DateUtil.format(date, DatePattern.NORM_DATE_PATTERN));
orderDO.setTotalCustomer(0);
return orderDO;
}
public SpaceCapsuleOrderNameRespVO getStatisticsSpaceCapsuleOrder1(Long id,Date start,Date end){ public SpaceCapsuleOrderNameRespVO getStatisticsSpaceCapsuleOrder1(Long id,Date start,Date end){
return orderSpaceCapsuleMapper.compDay1(SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_DONE.getCode(),start,end,id); return orderSpaceCapsuleMapper.compDay1(SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_DONE.getCode(),start,end,id);
} }