跟新订单统计为实时跟新

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;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjUtil;
import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
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 lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
@Slf4j
@Component
public class StatisticsSpaceCapsuleOrderJob implements JobHandler {
@Resource
private StatisticsSpaceCapsuleOrderMapper statisticsSpaceCapsuleOrderMapper;
@Resource
private StatisticsSpaceCapsuleOrderService statisticsSpaceCapsuleOrderService;
private StatisticsSpaceCapsuleOrderService capsuleOrderService;
@Override
@TenantIgnore
public String execute(String param) throws Exception {
log.info("开始进行定时统计================》");
DateTime date = DateUtil.date();
DateTime dateTime = DateUtil.offsetDay(date, -1);
//获取开始时间
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 "没有定时统计数量";
}
capsuleOrderService.init();
return "初始化太空舱订单成功";
}
}

View File

@ -1,8 +1,11 @@
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.DateUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.http.HttpRequest;
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.dal.dataobject.orderspacecapsule.OrderSpaceCapsuleDO;
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.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.service.amount.DeductionService;
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.statisticsspacecapsuleorder.StatisticsSpaceCapsuleOrderService;
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.dto.CarteenRespDto;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
@ -42,6 +50,7 @@ import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
@ -60,6 +69,8 @@ public class OrderSpaceCapsuleServiceImpl implements OrderSpaceCapsuleService {
@Resource
private OrderSpaceCapsuleMapper orderSpaceCapsuleMapper;
@Resource
private StatisticsSpaceCapsuleOrderService statisticsSpaceCapsuleOrderService;
@Resource
private DeductionService deductionService;
@Resource
private SpaceCapsuleService spaceCapsuleService;
@ -131,7 +142,7 @@ public class OrderSpaceCapsuleServiceImpl implements OrderSpaceCapsuleService {
updateObj.setOrderEndTime(LocalDateTime.now());
}else if(updateObj.getStatus().equals(SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_DONE.getCode())){
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());
}else if(updateObj.getStatus().equals(SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_IN_USE.getCode())){
if(currentStatus.equals(SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_UNUSED.getCode())
@ -145,6 +156,10 @@ public class OrderSpaceCapsuleServiceImpl implements OrderSpaceCapsuleService {
}
// 更新数据库
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) {

View File

@ -1,11 +1,13 @@
package cn.iocoder.yudao.module.member.service.statisticsspacecapsuleorder;
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.statisticsspacecapsuleorder.vo.SpaceCapsuleOrderNameRespVO;
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.StatisticsSpaceCapsuleOrderSaveReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.orderspacecapsule.OrderSpaceCapsuleDO;
import cn.iocoder.yudao.module.member.dal.dataobject.statisticsspacecapsuleorder.StatisticsSpaceCapsuleOrderDO;
import java.util.*;
@ -58,4 +60,11 @@ public interface StatisticsSpaceCapsuleOrderService {
List<StatisticsSpaceCapsuleOrderDO> statistics(Date startTime,Date endTime);
OrderSpaceCapsuleStatisticsVo compDayMon(Long carteenId,String type,Date time);
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;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.*;
import cn.hutool.core.util.ObjUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
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.OrderSpaceCapsuleStatisticsVo;
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.StatisticsSpaceCapsuleOrderPageReqVO;
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.statisticsspacecapsuleorder.StatisticsSpaceCapsuleOrderDO;
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.system.api.carteen.CarteenApi;
import cn.iocoder.yudao.module.system.api.carteen.dto.CarteenRespDto;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@ -43,8 +48,6 @@ public class StatisticsSpaceCapsuleOrderServiceImpl implements StatisticsSpaceCa
private SpaceCapsuleMapper spaceCapsuleMapper;
@Resource
private StatisticsSpaceCapsuleOrderMapper statisticsSpaceCapsuleOrderMapper;
@Resource
private OrderSpaceCapsuleServiceImpl orderSpaceCapsuleService;
@Override
public Long createStatisticsSpaceCapsuleOrder(StatisticsSpaceCapsuleOrderSaveReqVO createReqVO) {
// 插入
@ -90,7 +93,7 @@ public class StatisticsSpaceCapsuleOrderServiceImpl implements StatisticsSpaceCa
List<CarteenRespDto> carteenList = carteenApi.getCarteenList();
List<StatisticsSpaceCapsuleOrderDO> list=new ArrayList<>();
for (CarteenRespDto dto : carteenList) {
Long id = dto.getId();
Long id = dto.getId();
OrderSpaceCapsuleStatisticsVo vo = orderSpaceCapsuleMapper.compDay(SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_DONE.getCode(), startTime, endTime, id);
vo.setRemark(DateUtil.format(startTime,DatePattern.NORM_DATE_PATTERN));
StatisticsSpaceCapsuleOrderDO bean = BeanUtils.toBean(vo, StatisticsSpaceCapsuleOrderDO.class);
@ -126,8 +129,64 @@ public class StatisticsSpaceCapsuleOrderServiceImpl implements StatisticsSpaceCa
}
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){
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);
}
/**
* 日报