kongdeqiang
2023-02-13 9c7ff52aef5dc4845b2d507d530c6c5cf18f2491
增加功能
2个文件已修改
78 ■■■■■ 已修改文件
xboot-modules/xboot-your/src/main/java/cn/exrick/xboot/your/serviceimpl/ISignCountServiceImpl.java 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xboot-modules/xboot-your/src/main/resources/mapper/SignCountMapper.xml 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xboot-modules/xboot-your/src/main/java/cn/exrick/xboot/your/serviceimpl/ISignCountServiceImpl.java
@@ -15,6 +15,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -43,29 +44,55 @@
            page.setSize(-1);
        }
        if(StringUtil.isNotBlank(orderStatusCount.getStatisticalType())){
            IPage<OrderStatusCount> orderStatusCountIPage = this.signCountMapper.signCounts(orderStatusCount, page);
            IPage<OrderStatusCount> orderStatusCountIPage = this.signCountMapper.signCount(orderStatusCount, page);
            List<OrderStatusCount> records = orderStatusCountIPage.getRecords();
            List<OrderStatusCount> recordsLast = new ArrayList<>();
            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()) {
                List<OrderStatusCount> recordsNew = new ArrayList<>();
                for (OrderStatusCount statusCount : stringListEntry.getValue()) {
                    statusCount.setSendDate(statusCount.getSendMonth());
                    recordsNew.add(statusCount);
                }
                for (Map.Entry<String, List<OrderStatusCount>> listEntry : recordsNew.stream().collect(Collectors.groupingBy(OrderStatusCount::getBatch)).entrySet()) {
                    for (Map.Entry<String, List<OrderStatusCount>> listEntry1 : listEntry.getValue().stream().collect(Collectors.groupingBy(OrderStatusCount::getSendMonth)).entrySet()) {
                        if(listEntry1.getValue().size() > 0){
                            List<OrderStatusCount> value = listEntry1.getValue();
                            Integer amount = 0;
                            Integer notSignCount = 0;
                            Integer abnormalSign = 0;
                            Integer signCount= 0;
                            OrderStatusCount orderStatusCount1 = value.get(0);
                            Double prodouble = value.stream().collect(Collectors.averagingInt(OrderStatusCount::getProportionInt));
                            prodouble = (double)Math.round(prodouble*100)/100;
                            orderStatusCount1.setProportion(prodouble + "%");
                            for (OrderStatusCount statusCount : value) {
                                amount += Integer.parseInt(statusCount.getAmount());
                                notSignCount += Integer.parseInt(statusCount.getNotSignCount());
                                if(statusCount.getAbnormalSign() != null){
                                    abnormalSign += Integer.parseInt(statusCount.getAbnormalSign());
                                }else {
                                    abnormalSign = 0;
                                }
                                signCount += Integer.parseInt(statusCount.getSignCount());
                            }
                            DecimalFormat df = new DecimalFormat("0.00");
                            String maerialRatio = df.format((float)signCount/amount);
                            double v = Double.parseDouble(maerialRatio)*100;
                            orderStatusCount1.setProportion(v+"%");
                            orderStatusCount1.setAmount(amount+"");
                            orderStatusCount1.setNotSignCount(notSignCount+"");
                            orderStatusCount1.setAbnormalSign(abnormalSign+"");
                            orderStatusCount1.setSignCount(signCount+"");
                            value.clear();
                            value.add(orderStatusCount1);
                            listEntry1.setValue(value);
                            recordsLast.add(orderStatusCount1);
                        }
                    }
                }
                stringListEntry.setValue(recordsNew);
            }
            List<OrderStatusCount> collect1 = records.stream().filter(f -> f.getProportion() != null).collect(Collectors.toList());
            orderStatusCountIPage.setRecords(collect1);
            orderStatusCountIPage.setRecords(recordsLast);
            return orderStatusCountIPage;
        }
        return this.signCountMapper.signCount(orderStatusCount,page);
xboot-modules/xboot-your/src/main/resources/mapper/SignCountMapper.xml
@@ -80,22 +80,22 @@
    <select id="signCount" resultType="cn.exrick.xboot.your.entity.OrderStatusCount">
        SELECT
        DATE_FORMAT(send_date,'%Y-%m-%d')  as  sendDate,
        CONCAT_WS('',YEAR(send_date),'年',MONTH(send_date),'月')sendMonth,
        DATE(DATE_FORMAT(send_date,'%Y-%m-%d') ) sendDate,
        car_name,
        batch,
        SUM( amount ) amount,
        SUM( abnormal_sign ) as abnormalSign,
        SUM( not_sign_count ) as  notSignCount,
        SUM( sign_count ) as signCount ,
        CONCAT_WS( '',( FORMAT((SUM( sign_count ) / SUM( amount )),4 ) *100), '%') as proportion,
        (CASE `batch` WHEN '01段' THEN batch ELSE 0 END) as 'oneBatch',
        (CASE `batch` WHEN '02段' THEN batch ELSE 0 END) as 'twoBatch',
        (CASE `batch` WHEN '03段' THEN batch ELSE 0 END) as 'threeBatch',
        (CASE `batch` WHEN '04段' THEN batch ELSE 0 END) as 'fourBatch',
        (CASE `batch` WHEN '05段' THEN batch ELSE 0 END) as 'fiveBatch',
        CONCAT_WS('',YEAR(send_date),'年',MONTH(send_date),'月')sendMonth,
        amount,
        abnormal_sign as abnormalSign,
        not_sign_count as  notSignCount,
        sign_count as signCount ,
        CONCAT_WS( '',ROUND(proportion,0), '%') as proportion,
        car_name,
        line,
        batch,
        user_name as userName
        user_name as userName,
        line
        FROM
        t_sign
        <where>
@@ -123,16 +123,11 @@
            </if>
        </where>
        GROUP BY
         send_date,
        car_name,
        line,
        send_date,
        batch,
        amount,
        abnormal_sign,
        not_sign_count,
        sign_count,
        proportion,
        user_name
        user_name,
        line
        ORDER BY
        line ASC,
        send_date asc