package com.by4cloud.platform.processing.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.by4cloud.platform.processing.entity.TransitAvgSch; import com.by4cloud.platform.processing.mapper.TransitAvgSchMapper; import com.by4cloud.platform.processing.service.TransitAvgSchService; import com.by4cloud.platform.yunxiao.entity.Ponderation; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** * 运输平均时间 * * @author zzl * @date 2025-10-17 16:04:39 */ @Service public class TransitAvgSchServiceImpl extends ServiceImpl implements TransitAvgSchService { // private PonderationService ponderationService; // private LoadUnloadAvgTimeMapper loadUnloadAvgTimeMapper; // // @Override // public void getTransitAvgSch(Date startDate, Date endDate) { // loadUnloadAvgTimeMapper.setGroupConcatMaxLen(); // //筛选磅单记录 // List ponderationList = ponderationService.list(new QueryWrapper() // .select("customer_address_id","comp_id","vehicle_no", // "DATE_FORMAT(out_time, '%Y-%m-%d') AS out_time", // "COUNT(id) AS count1", // "GROUP_CONCAT(DATE_FORMAT(create_time, '%Y-%m-%d %H:%i:%s') SEPARATOR ',') AS start_date", // "GROUP_CONCAT(DATE_FORMAT(out_time, '%Y-%m-%d %H:%i:%s') SEPARATOR ',') AS real_ids") // .ge("out_time", startDate) // .le("out_time", endDate) // .eq("del_flag",0) // .ne("isbl",1) // .isNull("is_empty") // .eq("ponderation_type","外销") // .orderByDesc("out_time") // .groupBy("customer_address_id,comp_id,vehicle_no,DATE_FORMAT(out_time, '%Y-%m-%d')") // .having("COUNT(id) >= 2")); // List transitAvgSches = new ArrayList<>(); // //循环获取每天的最短时间、最长时间、平均值 // ponderationList.forEach(e -> { // TransitAvgSch transitAvgSch = new TransitAvgSch(); // transitAvgSch.setCustomerAddressId(e.getCustomerAddressId()); // transitAvgSch.setTransitType(1); // transitAvgSch.setCompId(e.getCompId()); // transitAvgSch.setSaleType(e.getPonderationType()); // transitAvgSch.setIds(e.getRealIds()); // int[] stats = AvgTimeUtils.compareTimes(e.getStartDate(),e.getRealIds()); // //设置最短时间、最长时间、平均值 // transitAvgSch.setMinTime(stats[0]); // transitAvgSch.setMaxTime(stats[1]); // transitAvgSch.setDay(e.getOutTime()); // transitAvgSches.add(transitAvgSch); // }); // List saveTransitAvgSches = new ArrayList<>(); // transitAvgSches.stream().collect(Collectors.groupingBy(e -> e.getCompId())).forEach((compId, list) -> { // list.stream().collect(Collectors.groupingBy(e -> e.getCustomerAddressId())).forEach((customerAddressId, list1) -> { // TransitAvgSch transitAvgSch = new TransitAvgSch(); // transitAvgSch.setFyCompId(compId); // transitAvgSch.setFyCompName(list1.get(0).getCompName()); // transitAvgSch.setCustomerAddressId(customerAddressId); // transitAvgSch.setCustomerAddressName(list1.get(0).getCustomerAddressName()); // transitAvgSch.setTransitType(1); // transitAvgSch.setSaleType(list1.get(0).getSaleType()); // List avgTimes = new ArrayList<>(); // list1.forEach(e -> { // avgTimes.add(e.getMinTime()); // avgTimes.add(e.getMaxTime()); // }); // //转换为数组 // //过滤极值 // List resultList = AvgTimeUtils.filterByIQR(avgTimes); // int[] avgTimesArray = resultList.stream().mapToInt(Integer::intValue).toArray(); // int[] stats = AvgTimeUtils.calculateStats(avgTimesArray); // transitAvgSch.setMinTime(stats[0]); // transitAvgSch.setAvgTime(stats[2]); // saveTransitAvgSches.add(transitAvgSch); // }); // }); // saveBatch(saveTransitAvgSches); // } // // @Override // public void getNxTransitAvgSch(Date startDate, Date endDate) { // loadUnloadAvgTimeMapper.setGroupConcatMaxLen(); // //筛选磅单记录 // List ponderationList = ponderationService.list(new QueryWrapper() // .select("from_comp_id","to_comp_id","vehicle_no", // "DATE_FORMAT(out_time, '%Y-%m-%d') AS out_time", // "COUNT(id) AS count1", // "GROUP_CONCAT(DATE_FORMAT(create_time, '%Y-%m-%d %H:%i:%s') SEPARATOR ',') AS start_date", // "GROUP_CONCAT(DATE_FORMAT(out_time, '%Y-%m-%d %H:%i:%s') SEPARATOR ',') AS real_ids") // .ge("out_time", startDate) // .le("out_time", endDate) // .eq("del_flag",0) // .ne("isbl",1) // .isNull("is_empty") // .eq("ponderation_type","内销") // .orderByDesc("out_time") // .groupBy("from_comp_id,to_comp_id,vehicle_no,DATE_FORMAT(out_time, '%Y-%m-%d')") // .having("COUNT(id) >= 2")); // List transitAvgSches = new ArrayList<>(); // //循环获取每天的最短时间、最长时间、平均值 // ponderationList.forEach(e -> { // TransitAvgSch transitAvgSch = new TransitAvgSch(); // transitAvgSch.setToCompId(e.getToCompId()); // transitAvgSch.setToCompName(e.getToCompName()); // transitAvgSch.setTransitType(1); // transitAvgSch.setCompId(e.getFromCompId()); // transitAvgSch.setSaleType(e.getPonderationType()); // transitAvgSch.setIds(e.getRealIds()); // int[] stats = AvgTimeUtils.compareTimes(e.getStartDate(),e.getRealIds()); // //设置最短时间、最长时间、平均值 // transitAvgSch.setMinTime(stats[0]); // transitAvgSch.setMaxTime(stats[1]); // transitAvgSch.setDay(e.getOutTime()); // transitAvgSches.add(transitAvgSch); // }); // List saveTransitAvgSches = new ArrayList<>(); // transitAvgSches.stream().collect(Collectors.groupingBy(e -> e.getCompId())).forEach((compId, list) -> { // list.stream().collect(Collectors.groupingBy(e -> e.getToCompId())).forEach((toCompId, list1) -> { // TransitAvgSch transitAvgSch = new TransitAvgSch(); // transitAvgSch.setFyCompId(compId); // transitAvgSch.setFyCompName(list1.get(0).getCompName()); // transitAvgSch.setToCompId(toCompId); // transitAvgSch.setToCompName(list1.get(0).getToCompName()); // transitAvgSch.setTransitType(1); // transitAvgSch.setSaleType(list1.get(0).getSaleType()); // List avgTimes = new ArrayList<>(); // list1.forEach(e -> { // avgTimes.add(e.getMinTime()); // avgTimes.add(e.getMaxTime()); // }); // //转换为数组 // //过滤极值 // List resultList = AvgTimeUtils.filterByIQR(avgTimes); // int[] avgTimesArray = resultList.stream().mapToInt(Integer::intValue).toArray(); // int[] stats = AvgTimeUtils.calculateStats(avgTimesArray); // transitAvgSch.setMinTime(stats[0]); // transitAvgSch.setAvgTime(stats[2]); // saveTransitAvgSches.add(transitAvgSch); // }); // }); // saveBatch(saveTransitAvgSches); // } }