OrderCustomerHandleScheduler.java 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package com.cyksj.task;
  2. import cn.hutool.core.date.DateTime;
  3. import cn.hutool.core.date.DateUtil;
  4. import cn.hutool.core.util.StrUtil;
  5. import com.cyksj.common.constant.Constant;
  6. import com.cyksj.mapper.manage.CustomerServiceEveryMonthDetailMapper;
  7. import com.cyksj.mapper.manage.StatisticsCustomerServiceEveryMonthMapper;
  8. import com.cyksj.model.entity.CustomerServiceEveryMonthDetail;
  9. import com.cyksj.model.entity.CustomerServiceRenewOrderRecord;
  10. import com.cyksj.model.entity.RealGoodsOrderHandle;
  11. import com.cyksj.model.entity.StatisticsCustomerServiceEveryMonth;
  12. import com.ejlchina.searcher.BeanSearcher;
  13. import com.ejlchina.searcher.param.Operator;
  14. import com.ejlchina.searcher.util.MapUtils;
  15. import com.google.common.util.concurrent.AtomicDouble;
  16. import lombok.RequiredArgsConstructor;
  17. import lombok.extern.slf4j.Slf4j;
  18. import org.springframework.scheduling.annotation.Scheduled;
  19. import org.springframework.stereotype.Component;
  20. import java.math.BigDecimal;
  21. import java.util.List;
  22. import java.util.Map;
  23. import java.util.Optional;
  24. import java.util.stream.Collectors;
  25. /*
  26. *项目名: netflix
  27. *文件名: OrderCustomerHandleScheduler
  28. *创建者: JavaZou
  29. *创建时间:2022/11/29 16:44
  30. */
  31. @Component
  32. @Slf4j
  33. @RequiredArgsConstructor
  34. public class OrderCustomerHandleScheduler {
  35. private final CustomerServiceEveryMonthDetailMapper detailMapper;
  36. private final StatisticsCustomerServiceEveryMonthMapper statisticsEveryMonthMapper;
  37. private final BeanSearcher beanSearcher;
  38. /**
  39. * 客服业绩数据统计
  40. */
  41. @Scheduled(cron = "59 59 23 L * ?")
  42. public void orderCustomerHandle() {
  43. DateTime now = DateTime.now();
  44. DateTime begin = DateUtil.beginOfMonth(now);
  45. String statisticsDate = DateUtil.format(now, "yyyy-MM");
  46. List<RealGoodsOrderHandle> realGoodsOrderHandles = beanSearcher.searchAll(RealGoodsOrderHandle.class, MapUtils.builder()
  47. .field(RealGoodsOrderHandle::getStatus, Constant.noOrderAllStatus).op(Operator.NotIn)
  48. .field(RealGoodsOrderHandle::getCreatedTime, begin, now).op(Operator.Between)
  49. .build());
  50. Map<String, List<RealGoodsOrderHandle>> before = realGoodsOrderHandles.stream().collect(Collectors.groupingBy(RealGoodsOrderHandle::getBeforeServiceName));
  51. Map<String, List<RealGoodsOrderHandle>> after = realGoodsOrderHandles.stream().collect(Collectors.groupingBy(RealGoodsOrderHandle::getAfterServiceName));
  52. StatisticsCustomerServiceEveryMonth statistics = new StatisticsCustomerServiceEveryMonth();
  53. statistics.setStatisticsData(statisticsDate);
  54. statisticsEveryMonthMapper.insert(statistics);
  55. before.forEach((k, v) -> {
  56. customerServiceRecord(k, v, 1, statistics.getId());
  57. });
  58. after.forEach((k, v) -> {
  59. customerServiceRecord(k, v, 2, statistics.getId());
  60. });
  61. //续费业绩
  62. List<CustomerServiceRenewOrderRecord> customerServiceRecords = beanSearcher.searchAll(CustomerServiceRenewOrderRecord.class, MapUtils.builder()
  63. .field(RealGoodsOrderHandle::getCreatedTime, begin, now).op(Operator.Between)
  64. .build());
  65. Map<String, List<CustomerServiceRenewOrderRecord>> renews = customerServiceRecords.stream().collect(Collectors.groupingBy(CustomerServiceRenewOrderRecord::getCustomerService));
  66. renews.forEach((k,v)->{
  67. renewServiceOrderRecord(k, v, 3, statistics.getId());
  68. });
  69. }
  70. public void customerServiceRecord(String serviceName, List<RealGoodsOrderHandle> handlers, Integer type, Long statisticsId) {
  71. if (StrUtil.isNotBlank(serviceName)) {
  72. CustomerServiceEveryMonthDetail record = new CustomerServiceEveryMonthDetail();
  73. record.setType(type);
  74. record.setCustomerServiceName(serviceName);
  75. record.setStatisticsId(statisticsId);
  76. AtomicDouble numOfOrder = new AtomicDouble(0);
  77. handlers.forEach(handler -> {
  78. if ("red_book".equals(handler.getLabelSource())) {
  79. numOfOrder.addAndGet(1.5);
  80. return;
  81. }
  82. numOfOrder.addAndGet(1);
  83. });
  84. record.setNumOfOrder(BigDecimal.valueOf(numOfOrder.doubleValue()));
  85. Optional<BigDecimal> money = handlers.stream().map(RealGoodsOrderHandle::getMoney).reduce(BigDecimal::add);
  86. record.setMoney(money.isPresent() ? money.get() : BigDecimal.ZERO);
  87. detailMapper.insert(record);
  88. }
  89. }
  90. public void renewServiceOrderRecord(String serviceName, List<CustomerServiceRenewOrderRecord> renewOrderRecords, Integer type, Long statisticsId) {
  91. if (StrUtil.isNotBlank(serviceName)) {
  92. CustomerServiceEveryMonthDetail record = new CustomerServiceEveryMonthDetail();
  93. record.setType(type);
  94. record.setCustomerServiceName(serviceName);
  95. record.setStatisticsId(statisticsId);
  96. record.setNumOfOrder(BigDecimal.valueOf(renewOrderRecords.size()));
  97. record.setMoney(BigDecimal.ZERO);
  98. detailMapper.insert(record);
  99. }
  100. }
  101. }