package cn.exrick.xboot.your.serviceimpl; import cn.exrick.xboot.your.entity.OrderStatusCount; import cn.exrick.xboot.your.entity.QueryRequest; import cn.exrick.xboot.your.mapper.SignCountMapper; import cn.exrick.xboot.your.entity.SignCount; import cn.exrick.xboot.your.service.ISignCountService; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import jodd.util.StringUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * 状态统计表接口实现 * @author whj */ @Slf4j @Service @Transactional public class ISignCountServiceImpl extends ServiceImpl implements ISignCountService { @Autowired private SignCountMapper signCountMapper; @Override public IPage signCounts(OrderStatusCount orderStatusCount,QueryRequest queryRequest) { Page page = new Page<>(); if (org.apache.commons.lang3.StringUtils.isNotBlank(queryRequest.getPageSize() + "") && (queryRequest.getPageSize() != 0)) { page.setCurrent(queryRequest.getPageNum()); page.setSize(queryRequest.getPageSize()); } else { page.setCurrent(0); page.setSize(-1); } if(StringUtil.isNotBlank(orderStatusCount.getStatisticalType())){ IPage orderStatusCountIPage = this.signCountMapper.signCounts(orderStatusCount, page); List records = orderStatusCountIPage.getRecords(); Map> collect = records.stream().collect(Collectors.groupingBy(OrderStatusCount::getCarName)); for (Map.Entry> stringListEntry : collect.entrySet()) { for (Map.Entry> listEntry : stringListEntry.getValue().stream().collect(Collectors.groupingBy(OrderStatusCount::getBatch)).entrySet()) { for (Map.Entry> listEntry1 : listEntry.getValue().stream().collect(Collectors.groupingBy(OrderStatusCount::getSendDate)).entrySet()) { if(listEntry1.getValue().size() > 0){ List value = listEntry1.getValue(); OrderStatusCount orderStatusCount1 = value.get(0); Double prodouble = value.stream().collect(Collectors.averagingInt(OrderStatusCount::getProportionInt)); prodouble = (double)Math.round(prodouble*100)/100; orderStatusCount1.setProportion(prodouble + "%"); value.clear(); value.add(orderStatusCount1); listEntry1.setValue(value); } } } } List collect1 = records.stream().filter(f -> f.getProportion() != null).collect(Collectors.toList()); orderStatusCountIPage.setRecords(collect1); return orderStatusCountIPage; } return this.signCountMapper.signCount(orderStatusCount,page); } }