| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- package com.cyksj.task;
- import cn.hutool.core.date.DateTime;
- import cn.hutool.core.date.DateUtil;
- import cn.hutool.core.util.StrUtil;
- import com.cyksj.common.constant.Constant;
- import com.cyksj.mapper.manage.CustomerServiceEveryMonthDetailMapper;
- import com.cyksj.mapper.manage.StatisticsCustomerServiceEveryMonthMapper;
- import com.cyksj.model.entity.CustomerServiceEveryMonthDetail;
- import com.cyksj.model.entity.CustomerServiceRenewOrderRecord;
- import com.cyksj.model.entity.RealGoodsOrderHandle;
- import com.cyksj.model.entity.StatisticsCustomerServiceEveryMonth;
- import com.ejlchina.searcher.BeanSearcher;
- import com.ejlchina.searcher.param.Operator;
- import com.ejlchina.searcher.util.MapUtils;
- import com.google.common.util.concurrent.AtomicDouble;
- import lombok.RequiredArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.scheduling.annotation.Scheduled;
- import org.springframework.stereotype.Component;
- import java.math.BigDecimal;
- import java.util.List;
- import java.util.Map;
- import java.util.Optional;
- import java.util.stream.Collectors;
- /*
- *项目名: netflix
- *文件名: OrderCustomerHandleScheduler
- *创建者: JavaZou
- *创建时间:2022/11/29 16:44
- */
- @Component
- @Slf4j
- @RequiredArgsConstructor
- public class OrderCustomerHandleScheduler {
- private final CustomerServiceEveryMonthDetailMapper detailMapper;
- private final StatisticsCustomerServiceEveryMonthMapper statisticsEveryMonthMapper;
- private final BeanSearcher beanSearcher;
- /**
- * 客服业绩数据统计
- */
- @Scheduled(cron = "59 59 23 L * ?")
- public void orderCustomerHandle() {
- DateTime now = DateTime.now();
- DateTime begin = DateUtil.beginOfMonth(now);
- String statisticsDate = DateUtil.format(now, "yyyy-MM");
- List<RealGoodsOrderHandle> realGoodsOrderHandles = beanSearcher.searchAll(RealGoodsOrderHandle.class, MapUtils.builder()
- .field(RealGoodsOrderHandle::getStatus, Constant.noOrderAllStatus).op(Operator.NotIn)
- .field(RealGoodsOrderHandle::getCreatedTime, begin, now).op(Operator.Between)
- .build());
- Map<String, List<RealGoodsOrderHandle>> before = realGoodsOrderHandles.stream().collect(Collectors.groupingBy(RealGoodsOrderHandle::getBeforeServiceName));
- Map<String, List<RealGoodsOrderHandle>> after = realGoodsOrderHandles.stream().collect(Collectors.groupingBy(RealGoodsOrderHandle::getAfterServiceName));
- StatisticsCustomerServiceEveryMonth statistics = new StatisticsCustomerServiceEveryMonth();
- statistics.setStatisticsData(statisticsDate);
- statisticsEveryMonthMapper.insert(statistics);
- before.forEach((k, v) -> {
- customerServiceRecord(k, v, 1, statistics.getId());
- });
- after.forEach((k, v) -> {
- customerServiceRecord(k, v, 2, statistics.getId());
- });
- //续费业绩
- List<CustomerServiceRenewOrderRecord> customerServiceRecords = beanSearcher.searchAll(CustomerServiceRenewOrderRecord.class, MapUtils.builder()
- .field(RealGoodsOrderHandle::getCreatedTime, begin, now).op(Operator.Between)
- .build());
- Map<String, List<CustomerServiceRenewOrderRecord>> renews = customerServiceRecords.stream().collect(Collectors.groupingBy(CustomerServiceRenewOrderRecord::getCustomerService));
- renews.forEach((k,v)->{
- renewServiceOrderRecord(k, v, 3, statistics.getId());
- });
- }
- public void customerServiceRecord(String serviceName, List<RealGoodsOrderHandle> handlers, Integer type, Long statisticsId) {
- if (StrUtil.isNotBlank(serviceName)) {
- CustomerServiceEveryMonthDetail record = new CustomerServiceEveryMonthDetail();
- record.setType(type);
- record.setCustomerServiceName(serviceName);
- record.setStatisticsId(statisticsId);
- AtomicDouble numOfOrder = new AtomicDouble(0);
- handlers.forEach(handler -> {
- if ("red_book".equals(handler.getLabelSource())) {
- numOfOrder.addAndGet(1.5);
- return;
- }
- numOfOrder.addAndGet(1);
- });
- record.setNumOfOrder(BigDecimal.valueOf(numOfOrder.doubleValue()));
- Optional<BigDecimal> money = handlers.stream().map(RealGoodsOrderHandle::getMoney).reduce(BigDecimal::add);
- record.setMoney(money.isPresent() ? money.get() : BigDecimal.ZERO);
- detailMapper.insert(record);
- }
- }
- public void renewServiceOrderRecord(String serviceName, List<CustomerServiceRenewOrderRecord> renewOrderRecords, Integer type, Long statisticsId) {
- if (StrUtil.isNotBlank(serviceName)) {
- CustomerServiceEveryMonthDetail record = new CustomerServiceEveryMonthDetail();
- record.setType(type);
- record.setCustomerServiceName(serviceName);
- record.setStatisticsId(statisticsId);
- record.setNumOfOrder(BigDecimal.valueOf(renewOrderRecords.size()));
- record.setMoney(BigDecimal.ZERO);
- detailMapper.insert(record);
- }
- }
- }
|