diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/StatisticsSpaceCapsuleOrderJob.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/StatisticsSpaceCapsuleOrderJob.java index 7c7d7393..4c32f7bb 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/StatisticsSpaceCapsuleOrderJob.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/StatisticsSpaceCapsuleOrderJob.java @@ -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 statistics = statisticsSpaceCapsuleOrderService.statistics(startTime, endTime); - if(ObjUtil.isNotEmpty(statistics)){ - log.info("定时统计数量{}",statistics.size()); - statisticsSpaceCapsuleOrderMapper.insertBatch(statistics); - return "定时统计数量"+ statistics.size(); - }else{ - return "没有定时统计数量"; - } + capsuleOrderService.init(); + return "初始化太空舱订单成功"; } + + } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/orderspacecapsule/OrderSpaceCapsuleServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/orderspacecapsule/OrderSpaceCapsuleServiceImpl.java index fc3527d6..b3d3c40e 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/orderspacecapsule/OrderSpaceCapsuleServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/orderspacecapsule/OrderSpaceCapsuleServiceImpl.java @@ -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) { diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/statisticsspacecapsuleorder/StatisticsSpaceCapsuleOrderService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/statisticsspacecapsuleorder/StatisticsSpaceCapsuleOrderService.java index 1aeaf375..e35a25ed 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/statisticsspacecapsuleorder/StatisticsSpaceCapsuleOrderService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/statisticsspacecapsuleorder/StatisticsSpaceCapsuleOrderService.java @@ -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 statistics(Date startTime,Date endTime); OrderSpaceCapsuleStatisticsVo compDayMon(Long carteenId,String type,Date time); List getStatisticsSpaceCapsuleOrder(SpaceCapsuleOrderReqVO vo); + + /** + * 实时跟新太空舱统计 + * @param vo + */ + void updateStatistics(OrderSpaceCapsuleDO vo); + void init(); } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/statisticsspacecapsuleorder/StatisticsSpaceCapsuleOrderServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/statisticsspacecapsuleorder/StatisticsSpaceCapsuleOrderServiceImpl.java index 8c244759..a9de0580 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/statisticsspacecapsuleorder/StatisticsSpaceCapsuleOrderServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/statisticsspacecapsuleorder/StatisticsSpaceCapsuleOrderServiceImpl.java @@ -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 carteenList = carteenApi.getCarteenList(); List 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() + .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 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); } /** * 日报