kongdeqiang
2023-02-10 93a3a1de1d52c014368a1200139fa46969a80c66
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
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<SignCountMapper, SignCount> implements ISignCountService {
 
    @Autowired
    private SignCountMapper signCountMapper;
 
    @Override
    public IPage<OrderStatusCount> signCounts(OrderStatusCount orderStatusCount,QueryRequest queryRequest) {
        Page<OrderStatusCount> 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<OrderStatusCount> orderStatusCountIPage = this.signCountMapper.signCounts(orderStatusCount, page);
            List<OrderStatusCount> records = orderStatusCountIPage.getRecords();
            Map<String, List<OrderStatusCount>> collect = records.stream().collect(Collectors.groupingBy(OrderStatusCount::getCarName));
            for (Map.Entry<String, List<OrderStatusCount>> stringListEntry : collect.entrySet()) {
                for (Map.Entry<String, List<OrderStatusCount>> listEntry : stringListEntry.getValue().stream().collect(Collectors.groupingBy(OrderStatusCount::getBatch)).entrySet()) {
                    for (Map.Entry<String, List<OrderStatusCount>> listEntry1 : listEntry.getValue().stream().collect(Collectors.groupingBy(OrderStatusCount::getSendDate)).entrySet()) {
                        if(listEntry1.getValue().size() > 0){
                            List<OrderStatusCount> 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<OrderStatusCount> collect1 = records.stream().filter(f -> f.getProportion() != null).collect(Collectors.toList());
            orderStatusCountIPage.setRecords(collect1);
            return orderStatusCountIPage;
        }
        return this.signCountMapper.signCount(orderStatusCount,page);
    }
}