package com.xzx.gc.user.service; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import com.xzx.gc.common.constant.Constants; import com.xzx.gc.common.constant.OrderEnum; import com.xzx.gc.common.constant.PayEnum; import com.xzx.gc.common.utils.BusinessUtil; import com.xzx.gc.common.utils.DateUtils; import com.xzx.gc.entity.*; import com.xzx.gc.model.order.OrderReportDetailDto; import com.xzx.gc.model.order.OrderReportDto; import com.xzx.gc.user.mapper.AccountMapper; import com.xzx.gc.user.mapper.AddressLevelInfoMapper; import com.xzx.gc.user.mapper.OrderMapper; import com.xzx.gc.user.mapper.PayRequestMapper; 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.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; @Service @Transactional @Slf4j public class OrderReportService { @Autowired private OrderMapper orderMapper; @Autowired private BusinessUtil businessUtil; @Autowired private PayRequestMapper payRequestMapper; @Autowired private AccountMapper accountMapper; @Autowired private AddressLevelInfoMapper addressLevelInfoMapper; @Autowired private FenceService fenceService; @Autowired private AccountService accountService; @Autowired private CityPartnerService cityPartnerService; @Autowired private AddressService addressService; @Autowired private PartnerGaodeService partnerGaodeService; /** * 根据合伙人查询 * @param partnerId * @return */ public OrderReportDto findByPartneId(String partnerId){ OrderReportDto orderReportDto = new OrderReportDto(); //回收总金额 BigDecimal recyleMoney = BigDecimal.ZERO; //今日回收总金额 BigDecimal recyleMoneyToday = BigDecimal.ZERO; //昨日回收总金额 BigDecimal recyleMoneyYesterday = BigDecimal.ZERO; //今日下单总用户量数 int orderUserNumToday = 0; //昨日下单总用户量数 int orderUserNumYesterday = 0; //下单总用户量数 int orderUserNum = 0; //未提现总额 BigDecimal notWithdrawalrecyleMoney = BigDecimal.ZERO; //已提现总额 BigDecimal withdrawalrecyleMoney = BigDecimal.ZERO; //当前时间 DateTime nowData = DateUtil.parse(DateUtil.now(), DateUtils.DATE_FORMAT_YMD); //已完成订单 List collect1=new ArrayList<>(); //所有订单 List orderInfos = orderMapper.findDetailByPartned(partnerId); if (CollUtil.isNotEmpty(orderInfos)) { List collect = removeRepeatUser(orderInfos); orderUserNum =collect.size(); //去重用户订单列表 for (OrderInfo orderInfo : collect) { String createTime = orderInfo.getCreateTime(); DateTime parse3 = DateUtil.parse(createTime, DateUtils.DATE_FORMAT_YMD); //当天下单用户量 if (DateUtil.isSameDay(parse3, nowData)) { orderUserNumToday = orderUserNumToday + 1; } //昨天下单用户量 long l2 = DateUtil.betweenDay(parse3, nowData, true); if (l2 == 1) { orderUserNumYesterday = orderUserNumYesterday + 1; } } //订单已完成的列表按完成时间升序 collect1 = orderInfos.stream().filter(x -> x.getOrderStatus().equals(OrderEnum.完成.getValue())||x.getOrderStatus().equals(OrderEnum.入库中.getValue())||x.getOrderStatus().equals(OrderEnum.待入库.getValue())).collect(Collectors.toList()); List collect2 = collect1.stream().sorted(Comparator.comparing(OrderInfo::getCompleteTime)).collect(Collectors.toList()); //订单已完成的列表 for (OrderInfo orderInfo : collect2) { BigDecimal money = Convert.toBigDecimal(orderInfo.getMoney()); recyleMoney = NumberUtil.add(money, recyleMoney); String completeTime = orderInfo.getCompleteTime(); DateTime parse = DateUtil.parse(completeTime, DateUtils.DATE_FORMAT_YMD); //今日回收金额 if (DateUtil.isSameDay(parse, nowData)) { recyleMoneyToday = NumberUtil.add(money, recyleMoneyToday); } //昨天回收金额 long l = DateUtil.betweenDay(parse, nowData, true); if (l == 1) { recyleMoneyYesterday = NumberUtil.add(money, recyleMoneyYesterday); } } } String recyleMoneyTodayAvg = Constants.MONEY_INIT.toString(); //回收日均金额 回收总金额/ (当前时间-最早回收时间) recyleMoneyTodayAvg=getMoneyAvg(collect1,nowData); //回收日环比计算方法: (本日回收金额/昨日回收金额 — 1 )× 100% 正值为增长率 负值为下降率 String RecyleRatio = getRecyleRatio(recyleMoneyYesterday,recyleMoneyToday); //日均下单用户量 int orderUserNumTodayAvg=getNumAvg(orderInfos,nowData); //下单用户量日环比 String orderUserRatio = getOrderUserRatio(orderUserNumYesterday,orderUserNumToday); //已提现金额 查询交易记录表 // PayRequestInfo payInf = new PayRequestInfo(); // payInf.setPayType(PayEnum.提现.getValue()); // payInf.setStatus(PayEnum.已审核完成.getValue()); // List select = payRequestMapper.select(payInf); // if (CollUtil.isNotEmpty(select)) { // for (PayRequestInfo payInfo : select) { // withdrawalrecyleMoney = NumberUtil.add(withdrawalrecyleMoney, Convert.toBigDecimal(payInfo.getMoney())); // } // } // // //未提现 查询所有账户 // Example example = new Example(AccountInfo.class); // Example.Criteria criteria = example.createCriteria(); // criteria.andEqualTo("delFlag", 0); // List accountInfos = accountMapper.selectByExample(example); // for (AccountInfo accountInfo : accountInfos) { // String money = accountInfo.getMoney(); // if (StrUtil.isBlank(money)) { // money = Convert.toStr(Constants.MONEY_INIT); // } // notWithdrawalrecyleMoney = NumberUtil.add(notWithdrawalrecyleMoney, Convert.toBigDecimal(money)); // } //获取合伙人名称 String partnerName = cityPartnerService.findById(Convert.toInt(partnerId)).getPartnerName(); //未提现金额 List accountInfos = findNotWithdraw(partnerId); double sum = accountInfos.stream().mapToDouble(x -> Convert.toDouble(x.getMoney())).sum(); notWithdrawalrecyleMoney=businessUtil.changeMul(String.valueOf(sum)); //返回数据 orderReportDto.setPartnerName(partnerName); orderReportDto.setOrderUserNumTodayAvg(orderUserNumTodayAvg); orderReportDto.setOrderUserRatio(orderUserRatio); orderReportDto.setRecyleRatio(RecyleRatio); orderReportDto.setRecyleMoneyTodayAvg(recyleMoneyTodayAvg); orderReportDto.setRecyleMoney(businessUtil.changeMoney(Convert.toStr(recyleMoney))); orderReportDto.setRecyleMoneyToday(businessUtil.changeMoney(Convert.toStr(recyleMoneyToday))); orderReportDto.setOrderUserNum(orderUserNum); orderReportDto.setOrderUserNumToday(orderUserNumToday); orderReportDto.setDate(DateUtil.today()); orderReportDto.setNotWithdrawalMoney(businessUtil.changeMoney(Convert.toStr(notWithdrawalrecyleMoney))); orderReportDto.setWithDrawalMoney(businessUtil.changeMoney(Convert.toStr(withdrawalrecyleMoney))); return orderReportDto; } /** * 获取今日回收完成的列表 * @param orderInfos * @return */ public List getTodayCompleteOrderList(List orderInfos){ List list=new ArrayList<>(); //筛选订单已完成的列表 List collect1 = orderInfos.stream().filter(x -> x.getOrderStatus().equals(OrderEnum.完成.getValue())||x.getOrderStatus().equals(OrderEnum.入库中.getValue())||x.getOrderStatus().equals(OrderEnum.待入库.getValue())).collect(Collectors.toList()); //当前时间 DateTime nowData = DateUtil.parse(DateUtil.now(), DateUtils.DATE_FORMAT_YMD); //订单已完成的列表 for (OrderInfo orderInfo : collect1) { //今日回收金额 String completeTime = orderInfo.getCompleteTime(); DateTime parse = DateUtil.parse(completeTime, DateUtils.DATE_FORMAT_YMD); if (DateUtil.isSameDay(parse, nowData)) { list.add(orderInfo); } } return list; } /** * 根据日期筛选订单 * 0:今日 1:近3日 2:近10日 3:近1月 4:近3月 5:近6月 * @param orderInfos * @param timeType * @return */ public List getCompleteOrderListByTime(List orderInfos,Integer timeType){ List list=new ArrayList<>(); //筛选订单已完成的列表 List collect1 = orderInfos.stream().filter(x -> x.getOrderStatus().equals(OrderEnum.完成.getValue())||x.getOrderStatus().equals(OrderEnum.入库中.getValue())||x.getOrderStatus().equals(OrderEnum.待入库.getValue())).collect(Collectors.toList()); //当前时间 DateTime nowData = DateUtil.parse(DateUtil.now(), DateUtils.DATE_FORMAT_YMD); if(timeType==null){ return collect1; } //订单已完成的列表 for (OrderInfo orderInfo : collect1) { //今日回收金额 String completeTime = orderInfo.getCompleteTime(); DateTime parse = DateUtil.parse(completeTime, DateUtils.DATE_FORMAT_YMD); if(timeType==0){ //当天 if (DateUtil.isSameDay(parse, nowData)) { list.add(orderInfo); } }else if(timeType==1){ //近3日 if(DateUtil.betweenDay(parse,nowData,true)<=3){ list.add(orderInfo); } }else if(timeType==2){ //近10日 if(DateUtil.betweenDay(parse,nowData,true)<=10){ list.add(orderInfo); } }else if(timeType==3){ //近1月 if(DateUtil.betweenMonth(parse,nowData,true)<=1){ list.add(orderInfo); } }else if(timeType==4){ //近3月 if(DateUtil.betweenMonth(parse,nowData,true)<=3){ list.add(orderInfo); } }else if(timeType==5){ //近6月 if(DateUtil.betweenMonth(parse,nowData,true)<=6){ list.add(orderInfo); } } } return list; } /** * 今日下单用户 * @param orderInfos * @return */ public List getTodayOrderUserList(List orderInfos){ //当前时间 DateTime nowData = DateUtil.parse(DateUtil.now(), DateUtils.DATE_FORMAT_YMD); List list=new ArrayList<>(); List collect = removeRepeatUser(orderInfos); //去重用户订单列表 for (OrderInfo orderInfo : collect) { String createTime = orderInfo.getCreateTime(); DateTime parse3 = DateUtil.parse(createTime, DateUtils.DATE_FORMAT_YMD); //当天下单用户量 if (DateUtil.isSameDay(parse3, nowData)) { list.add(orderInfo); } } return list; } public List getOrderUserListByTime(List orderInfos,Integer timeType){ //当前时间 DateTime nowData = DateUtil.parse(DateUtil.now(), DateUtils.DATE_FORMAT_YMD); List list=new ArrayList<>(); List collect = removeRepeatUser(orderInfos); if(timeType==null){ return collect; } //去重用户订单列表 for (OrderInfo orderInfo : collect) { String createTime = orderInfo.getCreateTime(); DateTime parse = DateUtil.parse(createTime, DateUtils.DATE_FORMAT_YMD); if(timeType==0){ //当天 if (DateUtil.isSameDay(parse, nowData)) { list.add(orderInfo); } }else if(timeType==1){ //近3日 if(DateUtil.betweenDay(parse,nowData,true)<=3){ list.add(orderInfo); } }else if(timeType==2){ //近10日 if(DateUtil.betweenDay(parse,nowData,true)<=10){ list.add(orderInfo); } }else if(timeType==3){ //近1月 if(DateUtil.betweenMonth(parse,nowData,true)<=1){ list.add(orderInfo); } }else if(timeType==4){ //近3月 if(DateUtil.betweenMonth(parse,nowData,true)<=3){ list.add(orderInfo); } }else if(timeType==5){ //近6月 if(DateUtil.betweenMonth(parse,nowData,true)<=6){ list.add(orderInfo); } } } return list; } /** * 设置金额和数目 以及日均金额 和下单人数 * @param list * @param areaName * @param money */ public void setMoneyOrNum(List list, String areaName, String areaId, BigDecimal money, int level){ //是否存在当前区域标识 boolean flag=false; for (OrderReportDetailDto orderReportDetailDto : list) { String areaId1 = orderReportDetailDto.getAreaId(); if(areaId1.equals(areaId)){ if(money!=null){ orderReportDetailDto.setMoney(businessUtil.changeMoney(Convert.toStr(NumberUtil.add(money,Convert.toBigDecimal(orderReportDetailDto.getMoney()))))); } orderReportDetailDto.setNum(1+orderReportDetailDto.getNum()); flag=true; break; } } if(!flag){ OrderReportDetailDto orderReportDetailDto=new OrderReportDetailDto(); orderReportDetailDto.setAreaName(areaName); orderReportDetailDto.setAreaId(areaId); orderReportDetailDto.setMoney(Convert.toStr(money,Convert.toStr(Constants.MONEY_INIT))); orderReportDetailDto.setNum(1); orderReportDetailDto.setLevel(level); list.add(orderReportDetailDto); } } public void setMoneyOrNum(List list,String areaId,String areaName,BigDecimal money){ //是否存在当前区域标识 boolean flag=false; for (OrderReportDetailDto orderReportDetailDto : list) { String areaId1 = orderReportDetailDto.getAreaId(); if(areaId1.equals(areaId)){ if(money!=null){ orderReportDetailDto.setMoney(businessUtil.changeMoney(Convert.toStr(NumberUtil.add(money,Convert.toBigDecimal(orderReportDetailDto.getMoney()))))); } orderReportDetailDto.setNum(1+orderReportDetailDto.getNum()); flag=true; break; } } if(!flag){ OrderReportDetailDto orderReportDetailDto=new OrderReportDetailDto(); orderReportDetailDto.setAreaName(areaName); orderReportDetailDto.setAreaId(areaId); orderReportDetailDto.setMoney(Convert.toStr(money,Convert.toStr(Constants.MONEY_INIT))); orderReportDetailDto.setNum(1); list.add(orderReportDetailDto); } } /** * 获取省市区报表详情 * @param list * @param level * @param areaId * @return */ public List getDetail(List list,int level,String areaId){ List list2=new ArrayList<>(); for (OrderInfo orderInfo : list) { //所在区域 String townId = orderInfo.getTownId(); if(StrUtil.isBlank(townId)){ AddressInfo byUserId = addressService.findByUserId(orderInfo.getUserId()); if(byUserId!=null&&StrUtil.isNotBlank(byUserId.getTownshipId())){ townId=byUserId.getTownshipId(); } } BigDecimal money = Convert.toBigDecimal(orderInfo.getMoney()); if(StrUtil.isNotBlank(townId)){ AddressLevelInfo addressLevelInfo=new AddressLevelInfo(); addressLevelInfo.setLevel3Id(townId); AddressLevelInfo addressLevelInfo1 = addressLevelInfoMapper.selectOne(addressLevelInfo); if(addressLevelInfo1!=null){ String level1Name = addressLevelInfo1.getLevel1Name(); String level1Id = addressLevelInfo1.getLevel1Id(); String level2Name = addressLevelInfo1.getLevel2Name(); String level2Id = addressLevelInfo1.getLevel2Id(); String level3Name = addressLevelInfo1.getLevel3Name(); String level3Id = addressLevelInfo1.getLevel3Id(); if(level==1){ //只需要查询省份 setMoneyOrNum(list2,level1Name,level1Id,money,level); }else if(level==2){ //查询省下所有市 if(level1Id.equals(areaId)){ setMoneyOrNum(list2,level2Name,level2Id,money,level); } } else if(level==3){ //查询市下所有区 if(level2Id.equals(areaId)){ setMoneyOrNum(list2,level3Name,level3Id,money,level); } } } }else { log.warn("存在省市区id为空的订单:{}", orderInfo.getOrderId()); } } return list2; } /** * 根据合伙人查找当前用户未提现的列表 * @param partnerId * @return */ public List findNotWithdraw(String partnerId){ //未提现 查询所有账户 List accountInfos = accountMapper.findArea(); for (Iterator iterator = accountInfos.iterator(); iterator.hasNext(); ) { OrderInfo accountInfo = iterator.next(); //针对用户将地址删光的情况 if(StrUtil.isBlank(accountInfo.getTownId())){ AddressInfo byUserId = addressService.findByUserId(accountInfo.getUserId()); if(byUserId==null||StrUtil.isBlank(byUserId.getTownshipId())){ log.warn("用户:{}出现不可能的地址为空的情况",accountInfo.getUserId()); iterator.remove(); continue; } accountInfo.setTownId(byUserId.getTownshipId()); accountInfo.setTownShipName(byUserId.getTownshipName()); accountInfo.setLongitude(byUserId.getLongitude()); accountInfo.setLatitude(byUserId.getLatitude()); } PartnerGaode byTownId = partnerGaodeService.findByTownId(accountInfo.getTownId()); if(byTownId==null||!byTownId.getPartnerId().equals(partnerId)){ iterator.remove(); } } return accountInfos; } /** * 获取围栏报表详情 * @param list * @return */ public List getDetail(List list,int type){ List list2=new ArrayList<>(); BigDecimal sumMoney=BigDecimal.ZERO; for (OrderInfo orderInfo : list) { //所在围栏 String townId = orderInfo.getTownId(); if(StrUtil.isBlank(townId)){ townId=Constants.DEFAULT_ID; } String townName=orderInfo.getTownShipName(); if(StrUtil.isBlank(townName)){ Fence byId = fenceService.findById(Convert.toInt(townId)); if(byId!=null) { townName = byId.getFenceName(); }else { townName="其他"; } } BigDecimal money = Convert.toBigDecimal(orderInfo.getMoney()); setMoneyOrNum(list2,townId,townName,money); sumMoney=NumberUtil.add(sumMoney,money); } //设置总金额 for (OrderReportDetailDto orderReportDetailDto : list2) { orderReportDetailDto.setAllNum(list.size()); orderReportDetailDto.setAlloney(sumMoney.toString()); orderReportDetailDto.setMoneyDouble(Convert.toDouble(orderReportDetailDto.getMoney())); } //兼容没数据的围栏显示 // if(CollUtil.isEmpty(list2)) { // List all = fenceService.findByPartnerId(partnerId); // if (CollUtil.isNotEmpty(all)) { // for (Fence fence : all) { // Integer id = fence.getId(); // String fenceName = fence.getFenceName(); // OrderReportDetailDto orderReportDetailDto = new OrderReportDetailDto(); // orderReportDetailDto.setAreaName(fenceName); // orderReportDetailDto.setAreaId(id.toString()); // orderReportDetailDto.setMoney(Constants.MONEY_INIT.toString()); // orderReportDetailDto.setMoneyDouble(Convert.toDouble(orderReportDetailDto.getMoney())); // orderReportDetailDto.setNum(0); // orderReportDetailDto.setAlloney(Constants.MONEY_INIT.toString()); // list2.add(orderReportDetailDto); // // } // } // }else { // List all = fenceService.findByPartnerId(partnerId); // if (CollUtil.isNotEmpty(all)) { // for (Fence fence : all) { // Integer id = fence.getId(); // String fenceName = fence.getFenceName(); // long count = list2.stream().filter(x -> x.getAreaId().equals(id.toString())).count(); // if(count==0) { // OrderReportDetailDto orderReportDetailDto = new OrderReportDetailDto(); // orderReportDetailDto.setAreaName(fenceName); // orderReportDetailDto.setAreaId(id.toString()); // orderReportDetailDto.setMoney(Constants.MONEY_INIT.toString()); // orderReportDetailDto.setMoneyDouble(Convert.toDouble(orderReportDetailDto.getMoney())); // orderReportDetailDto.setNum(0); // orderReportDetailDto.setAlloney(Constants.MONEY_INIT.toString()); // list2.add(orderReportDetailDto); // } // // } // } // } // list2=CollUtil.sort(list2,Comparator.comparing(OrderReportDetailDto::getAreaId).reversed()); if(type==1) { list2 = CollUtil.sort(list2, Comparator.comparingDouble(OrderReportDetailDto::getMoneyDouble).reversed()); }else if(type==2){ list2 = CollUtil.sort(list2, Comparator.comparing(OrderReportDetailDto::getNum).reversed()); } return list2; } /** * 设置日环比 * @param list * @param listToday * @param listYesterday * @param type 1:回收金额日环比 2:下单用户日环比 */ public void setRatio( List list, List listToday,List listYesterday,int type){ for (OrderReportDetailDto orderReportDetailDto : listToday) { String money = orderReportDetailDto.getMoney(); int num = orderReportDetailDto.getNum(); String areaId = orderReportDetailDto.getAreaId(); for (OrderReportDetailDto orderReportDetailDto2 : listYesterday){ String money2 = orderReportDetailDto2.getMoney(); int num2 = orderReportDetailDto2.getNum(); String areaId2 = orderReportDetailDto2.getAreaId(); if(areaId2.equals(areaId)){ String recyleRatio = getRecyleRatio(Convert.toBigDecimal(money2), Convert.toBigDecimal(money)); String orderUserRatio = getOrderUserRatio(num2, num); for (OrderReportDetailDto reportDetailDto : list) { if(reportDetailDto.getAreaId().equals(areaId)){ if(type==1){ reportDetailDto.setRatio(recyleRatio); }else if(type==2){ reportDetailDto.setRatio(orderUserRatio); } break; } } break; } } } } /** * 获取回收金额日环比 * @param recyleMoneyYesterday * @param recyleMoneyToday * @return */ public String getRecyleRatio(BigDecimal recyleMoneyYesterday,BigDecimal recyleMoneyToday){ //回收日环比计算方法: (本日回收金额/昨日回收金额 — 1 )× 100% 正值为增长率 负值为下降率 String RecyleRatio = "+0.00%"; if (recyleMoneyYesterday.compareTo(BigDecimal.ZERO) != 0) { String s = Convert.toStr(NumberUtil.mul(NumberUtil.sub(NumberUtil.div(recyleMoneyToday, recyleMoneyYesterday), 1), 100)); RecyleRatio = businessUtil.changeMoney(s) + "%"; } else { RecyleRatio = "+100.00%"; } return RecyleRatio; } /** * 获取下单用户日环比 * @param orderUserNumYesterday * @param orderUserNumToday * @return */ public String getOrderUserRatio(int orderUserNumYesterday,int orderUserNumToday){ //下单用户量日环比 String orderUserRatio = "+0.00%"; if (orderUserNumYesterday != 0) { String s = Convert.toStr(NumberUtil.mul(NumberUtil.sub(NumberUtil.div(orderUserNumToday, orderUserNumYesterday), 1), 100)); orderUserRatio = businessUtil.changeMoney(s) + "%"; } else { orderUserRatio = "+100.00%"; } return orderUserRatio; } /** * 查看这个区域下的所有订单 * @param areaId * @param level * @return */ public List findByAreaAndLevel(List collect,String areaId,Integer level){ AddressLevelInfo addressLevelInfo=new AddressLevelInfo(); if(1==level){ addressLevelInfo.setLevel1Id(areaId); }else if(2==level){ addressLevelInfo.setLevel2Id(areaId); }else if(3==level){ addressLevelInfo.setLevel3Id(areaId); } List select = addressLevelInfoMapper.select(addressLevelInfo); if(CollUtil.isNotEmpty(select)){ List collect2 = select.stream().map(x -> x.getLevel3Id()).collect(Collectors.toList()); List collect1 = collect.stream().filter(x -> StrUtil.isNotBlank(x.getTownId()) && collect2.contains(x.getTownId())).collect(Collectors.toList()); return collect1; } return null; } /** * 获取回收日均金额 * @param collect1 已完成订单 * @param nowData * @return */ public String getMoneyAvg( List collect1,Date nowData){ String recyleMoneyTodayAvg = Constants.MONEY_INIT.toString(); if(CollUtil.isNotEmpty(collect1)) { List collect2 = collect1.stream().sorted(Comparator.comparing(OrderInfo::getCompleteTime)).collect(Collectors.toList()); OrderInfo orderInfo2 = collect2.get(0); BigDecimal recyleMoney = Constants.MONEY_INIT; //订单已完成的列表 for (OrderInfo orderInfo : collect2) { BigDecimal money = Convert.toBigDecimal(orderInfo.getMoney()); recyleMoney = NumberUtil.add(money, recyleMoney); } //回收完成最早时间 String recyleEarliestTime = orderInfo2.getCompleteTime(); //回收日均金额 回收总金额/ (当前时间-最早回收时间) DateTime parseStart = DateUtil.parse(recyleEarliestTime, DateUtils.DATE_FORMAT_YMD); long l = DateUtil.betweenDay(parseStart, nowData, true); if (l == 0) { l = 1; } recyleMoneyTodayAvg = businessUtil.changeMoney(Convert.toStr(NumberUtil.div(recyleMoney, l))); } return recyleMoneyTodayAvg; } /** * 获取日均下单用户量 * @param orderInfos 所有订单 * @param nowData * @return */ public int getNumAvg(List orderInfos,Date nowData){ //日均下单用户量 int orderUserNumTodayAvg = 0; if(CollUtil.isNotEmpty(orderInfos)) { ArrayList collect = orderInfos.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(OrderInfo::getCreateUserId))), ArrayList::new)); int orderUserNum = collect.size(); //下单最早时间 Date orderEarliestTime = getOrderEarliestTime(orderInfos); long l = DateUtil.betweenDay(orderEarliestTime, nowData, true); if (l == 0) { l = 1; } orderUserNumTodayAvg = Convert.toInt(NumberUtil.div(orderUserNum, l)); } return orderUserNumTodayAvg; } /**获取最早下单时间 * * @param orderInfos 所有订单 * @return */ public Date getOrderEarliestTime(List orderInfos){ Date orderEarliestTime=null; //所有订单 for (OrderInfo orderInfo : orderInfos) { //获取最早下单时间 String createTime = orderInfo.getCreateTime(); DateTime parse3 = DateUtil.parse(createTime, DateUtils.DATE_FORMAT_YMD); if (orderEarliestTime == null) { orderEarliestTime = parse3; } else { int compare = DateUtil.compare(orderEarliestTime, parse3); if (compare > 0) { orderEarliestTime = parse3; } } } return orderEarliestTime; } public List removeRepeatUser(List list){ // ArrayList collect = list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getCreateUserId() + ";" + DateUtil.parse(o.getCreateTime(), DateUtils.DATE_FORMAT_YMD).toString(DateUtils.DATE_FORMAT_YMD)))), ArrayList::new)); return list; } }