|
|
@ -1,6 +1,7 @@
|
|
|
|
package jnpf.service.impl;
|
|
|
|
package jnpf.service.impl;
|
|
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
|
|
|
|
|
import cn.hutool.json.JSON;
|
|
|
|
import com.baomidou.mybatisplus.annotation.TableField;
|
|
|
|
import com.baomidou.mybatisplus.annotation.TableField;
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
@ -8,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
|
|
|
|
|
import com.google.common.collect.Lists;
|
|
|
|
import jnpf.base.UserInfo;
|
|
|
|
import jnpf.base.UserInfo;
|
|
|
|
import jnpf.base.model.ColumnDataModel;
|
|
|
|
import jnpf.base.model.ColumnDataModel;
|
|
|
|
import jnpf.database.model.superQuery.SuperJsonModel;
|
|
|
|
import jnpf.database.model.superQuery.SuperJsonModel;
|
|
|
@ -19,6 +21,7 @@ import jnpf.permission.entity.UserEntity;
|
|
|
|
import jnpf.service.*;
|
|
|
|
import jnpf.service.*;
|
|
|
|
import jnpf.util.*;
|
|
|
|
import jnpf.util.*;
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
@ -31,6 +34,8 @@ import java.math.RoundingMode;
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
import java.time.LocalDate;
|
|
|
|
import java.time.LocalDate;
|
|
|
|
import java.time.LocalDateTime;
|
|
|
|
import java.time.LocalDateTime;
|
|
|
|
|
|
|
|
import java.time.YearMonth;
|
|
|
|
|
|
|
|
import java.time.ZoneId;
|
|
|
|
import java.util.*;
|
|
|
|
import java.util.*;
|
|
|
|
import java.util.regex.Pattern;
|
|
|
|
import java.util.regex.Pattern;
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
import java.util.stream.Collectors;
|
|
|
@ -59,6 +64,8 @@ public class RecycleDeliveryOrderServiceImpl extends ServiceImpl<RecycleDelivery
|
|
|
|
private CompanyService companyService;
|
|
|
|
private CompanyService companyService;
|
|
|
|
@Resource
|
|
|
|
@Resource
|
|
|
|
private EnterpriseAccountBillService enterpriseAccountBillService;
|
|
|
|
private EnterpriseAccountBillService enterpriseAccountBillService;
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
|
|
|
private RecycleDeviceService recycleDeviceService;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
@ -646,6 +653,91 @@ public class RecycleDeliveryOrderServiceImpl extends ServiceImpl<RecycleDelivery
|
|
|
|
return this.list(wrapper);
|
|
|
|
return this.list(wrapper);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public List<OrderStatisticsResponse> deliveryCount(OrderStatisticsRequest request) {
|
|
|
|
|
|
|
|
log.info("查询投递统计,request:{}", request);
|
|
|
|
|
|
|
|
List<String> finalDeviceCodes = Lists.newArrayList();
|
|
|
|
|
|
|
|
//只勾选了商户 则查询商户底下的所有设备编码
|
|
|
|
|
|
|
|
if (StringUtils.isNoneBlank(request.getCompanyId()) && CollectionUtils.isEmpty(request.getStationIds()) && CollectionUtils.isEmpty(request.getDeviceCodes())) {
|
|
|
|
|
|
|
|
List<String> stationIds = recycleDeviceService.getStationByCompanyId(request.getCompanyId());
|
|
|
|
|
|
|
|
List<String> deviceCodes = recycleDeviceService.getCodeByStationIds(stationIds);
|
|
|
|
|
|
|
|
finalDeviceCodes.addAll(deviceCodes);
|
|
|
|
|
|
|
|
} else if (StringUtils.isNoneBlank(request.getCompanyId()) && CollectionUtils.isNotEmpty(request.getStationIds()) && CollectionUtils.isEmpty(request.getDeviceCodes())) {
|
|
|
|
|
|
|
|
//勾选了商户和回收站 但是没勾选设备
|
|
|
|
|
|
|
|
List<String> deviceCodes = recycleDeviceService.getCodeByStationIds(request.getStationIds());
|
|
|
|
|
|
|
|
finalDeviceCodes.addAll(deviceCodes);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
finalDeviceCodes.addAll(request.getDeviceCodes());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//处理时间查询条件
|
|
|
|
|
|
|
|
Date[] date = this.getMonthStartAndEndDate(request.getYear(), request.getMonth());
|
|
|
|
|
|
|
|
LambdaQueryWrapper<RecycleDeliveryOrderEntity> wrapper = new LambdaQueryWrapper<>(RecycleDeliveryOrderEntity.class)
|
|
|
|
|
|
|
|
.between(RecycleDeliveryOrderEntity::getCreatorTime, date[0], date[1]);
|
|
|
|
|
|
|
|
wrapper.in(RecycleDeliveryOrderEntity::getDeviceCode, finalDeviceCodes);
|
|
|
|
|
|
|
|
//查询条件
|
|
|
|
|
|
|
|
if (ObjectUtil.isNotEmpty(request.getAuditStatus())) {
|
|
|
|
|
|
|
|
wrapper.eq(RecycleDeliveryOrderEntity::getAdjustStatus, request.getAuditStatus());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
List<RecycleDeliveryOrderEntity> list = this.list(wrapper);
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(list)) {
|
|
|
|
|
|
|
|
return Collections.emptyList();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
List<OrderStatisticsResponse> responses = this.fillMonthWithDays(request.getYear(), request.getMonth());
|
|
|
|
|
|
|
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
|
|
|
|
|
|
|
|
//根据创建时间分类
|
|
|
|
|
|
|
|
Map<String, List<RecycleDeliveryOrderEntity>> dateCollect = list.stream().collect(Collectors.groupingBy(entity -> dateFormat.format(entity.getCreatorTime())));
|
|
|
|
|
|
|
|
for (OrderStatisticsResponse response : responses) {
|
|
|
|
|
|
|
|
if (dateCollect.containsKey(response.getDate())) {
|
|
|
|
|
|
|
|
List<RecycleDeliveryOrderEntity> orderEntities = dateCollect.get(response.getDate());
|
|
|
|
|
|
|
|
response.setWeight(orderEntities.stream().map(RecycleDeliveryOrderEntity::getReportWeight).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
|
|
|
|
|
response.setAdjustWeight(orderEntities.stream().map(RecycleDeliveryOrderEntity::getAdjustWeight).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
|
|
|
|
|
response.setPrice(orderEntities.stream().map(RecycleDeliveryOrderEntity::getTotalPrice).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
|
|
|
|
|
response.setAdjustPrice(orderEntities.stream().map(RecycleDeliveryOrderEntity::getAdjustPrice).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return responses;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 补齐查询月份的天数
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* @param year 年
|
|
|
|
|
|
|
|
* @param month 月
|
|
|
|
|
|
|
|
* @return list
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
public List<OrderStatisticsResponse> fillMonthWithDays(int year, int month) {
|
|
|
|
|
|
|
|
List<OrderStatisticsResponse> result = Lists.newArrayList();
|
|
|
|
|
|
|
|
YearMonth yearMonth = YearMonth.of(year, month);
|
|
|
|
|
|
|
|
LocalDate startOfMonth = yearMonth.atDay(1);
|
|
|
|
|
|
|
|
LocalDate endOfMonth = yearMonth.atEndOfMonth();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while (!startOfMonth.isAfter(endOfMonth)) {
|
|
|
|
|
|
|
|
OrderStatisticsResponse response = new OrderStatisticsResponse();
|
|
|
|
|
|
|
|
response.setDate(startOfMonth.toString());
|
|
|
|
|
|
|
|
result.add(response);
|
|
|
|
|
|
|
|
startOfMonth = startOfMonth.plusDays(1);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 处理查询条件的时间返回
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* @param year 年
|
|
|
|
|
|
|
|
* @param month 月
|
|
|
|
|
|
|
|
* @return 时间数组
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
public Date[] getMonthStartAndEndDate(int year, int month) {
|
|
|
|
|
|
|
|
LocalDate startDate = LocalDate.of(year, month, 1);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LocalDate endDate = startDate.plusMonths(1).minusDays(1);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Date startDateAsDate = Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
|
|
|
|
|
|
|
|
Date endDateAsDate = Date.from(endDate.atTime(23, 59, 59).atZone(ZoneId.systemDefault()).toInstant()); // 可选:包含该天的最后一秒钟
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return new Date[]{startDateAsDate, endDateAsDate};
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 获取业务唯一编号
|
|
|
|
* 获取业务唯一编号
|
|
|
|
*
|
|
|
|
*
|
|
|
|