feat(order):投递、清运订单统计后端代码提交;

master
jiyufei 4 months ago
parent 1409b0f4bc
commit 720c13cdec

@ -5,6 +5,8 @@ import jnpf.entity.*;
import java.util.*;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import jnpf.model.recycledeliveryorder.OrderStatisticsRequest;
import jnpf.model.recycledeliveryorder.OrderStatisticsResponse;
/**
*
@ -35,4 +37,11 @@ public interface RecycleCleanOrderService extends IService<RecycleCleanOrderEnti
void saveOrUpdate(RecycleCleanOrderForm recycleCleanOrderForm,String id, boolean isSave) throws Exception;
/**
*
*
* @param request
* @return list
*/
List<OrderStatisticsResponse> cleanCount(OrderStatisticsRequest request);
}

@ -48,4 +48,12 @@ public interface RecycleDeliveryOrderService extends IService<RecycleDeliveryOrd
* @return list
*/
List<RecycleDeliveryOrderEntity> getList();
/**
*
*
* @param request
* @return list
*/
List<OrderStatisticsResponse> deliveryCount(OrderStatisticsRequest request);
}

@ -41,7 +41,6 @@ public interface RecycleDeviceService extends IService<RecycleDeviceEntity> {
List<RecycleDeviceEntity> queryRecycleSaffDeviceList(RecycleDevicePagination recycleDevicePagination);
/**
*
*
@ -49,4 +48,17 @@ public interface RecycleDeviceService extends IService<RecycleDeviceEntity> {
*/
List<String> getInfoByDeviceCode(List<String> deviceCodes);
/**
* id
*
* @param stationIds id
*/
List<String> getCodeByStationIds(List<String> stationIds);
/**
* id
*
* @param companyId id
*/
List<String> getStationByCompanyId(String companyId);
}

@ -1,8 +1,11 @@
package jnpf.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import jnpf.entity.*;
import jnpf.mapper.RecycleCleanOrderMapper;
import jnpf.model.recycledeliveryorder.OrderStatisticsRequest;
import jnpf.model.recycledeliveryorder.OrderStatisticsResponse;
import jnpf.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jnpf.model.recyclecleanorder.*;
@ -28,6 +31,9 @@ import jnpf.model.QueryModel;
import java.util.stream.Collectors;
import jnpf.base.model.ColumnDataModel;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.compress.utils.Lists;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -56,6 +62,7 @@ import javax.annotation.Resource;
* 2024-06-18
*/
@Service
@Slf4j
public class RecycleCleanOrderServiceImpl extends ServiceImpl<RecycleCleanOrderMapper, RecycleCleanOrderEntity> implements RecycleCleanOrderService {
@Autowired
private GeneraterSwapUtil generaterSwapUtil;
@ -66,6 +73,12 @@ public class RecycleCleanOrderServiceImpl extends ServiceImpl<RecycleCleanOrderM
@Resource
private RecycleCleanOrderMapper cleanOrderMapper;
@Resource
private RecycleDeliveryOrderServiceImpl recycleDeliveryOrderService;
@Resource
private RecycleDeviceService recycleDeviceService;
@Override
public List<RecycleCleanOrderEntity> getList(RecycleCleanOrderPagination recycleCleanOrderPagination) {
return getTypeList(recycleCleanOrderPagination, recycleCleanOrderPagination.getDataType());
@ -359,4 +372,47 @@ public class RecycleCleanOrderServiceImpl extends ServiceImpl<RecycleCleanOrderM
this.saveOrUpdate(entity);
}
@Override
public List<OrderStatisticsResponse> cleanCount(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 = recycleDeliveryOrderService.getMonthStartAndEndDate(request.getYear(), request.getMonth());
LambdaQueryWrapper<RecycleCleanOrderEntity> wrapper = new LambdaQueryWrapper<>(RecycleCleanOrderEntity.class)
.between(RecycleCleanOrderEntity::getCreatorTime, date[0], date[1]);
wrapper.in(RecycleCleanOrderEntity::getDeviceCode, finalDeviceCodes);
if (ObjectUtil.isNotEmpty(request.getAuditStatus())) {
wrapper.eq(RecycleCleanOrderEntity::getAdjustStatus, request.getAuditStatus());
}
List<RecycleCleanOrderEntity> list = this.list(wrapper);
if (CollectionUtils.isEmpty(list)) {
return Collections.emptyList();
}
List<OrderStatisticsResponse> responses = recycleDeliveryOrderService.fillMonthWithDays(request.getYear(), request.getMonth());
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
//根据创建时间分类
Map<String, List<RecycleCleanOrderEntity>> dateCollect = list.stream().collect(Collectors.groupingBy(entity -> dateFormat.format(entity.getCreatorTime())));
for (OrderStatisticsResponse response : responses) {
if (dateCollect.containsKey(response.getDate())) {
List<RecycleCleanOrderEntity> orderEntities = dateCollect.get(response.getDate());
response.setWeight(orderEntities.stream().map(RecycleCleanOrderEntity::getWeight).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
response.setAdjustWeight(orderEntities.stream().map(RecycleCleanOrderEntity::getAdjustWeight).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
response.setPrice(orderEntities.stream().map(RecycleCleanOrderEntity::getTotalPrice).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
response.setAdjustPrice(orderEntities.stream().map(RecycleCleanOrderEntity::getAdjustPrice).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
}
}
return responses;
}
}

@ -1,6 +1,7 @@
package jnpf.service.impl;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSON;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists;
import jnpf.base.UserInfo;
import jnpf.base.model.ColumnDataModel;
import jnpf.database.model.superQuery.SuperJsonModel;
@ -19,6 +21,7 @@ import jnpf.permission.entity.UserEntity;
import jnpf.service.*;
import jnpf.util.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -31,6 +34,8 @@ import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.YearMonth;
import java.time.ZoneId;
import java.util.*;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@ -59,6 +64,8 @@ public class RecycleDeliveryOrderServiceImpl extends ServiceImpl<RecycleDelivery
private CompanyService companyService;
@Resource
private EnterpriseAccountBillService enterpriseAccountBillService;
@Resource
private RecycleDeviceService recycleDeviceService;
@Override
@ -646,6 +653,91 @@ public class RecycleDeliveryOrderServiceImpl extends ServiceImpl<RecycleDelivery
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};
}
/**
*
*

@ -481,4 +481,24 @@ public class RecycleDeviceServiceImpl extends ServiceImpl<RecycleDeviceMapper, R
}
return list.stream().map(RecycleDeviceEntity::getBeLongCompanyId).collect(Collectors.toList());
}
@Override
public List<String> getCodeByStationIds(List<String> stationIds) {
List<RecycleDeviceEntity> list = this.list(new LambdaQueryWrapper<>(RecycleDeviceEntity.class)
.in(RecycleDeviceEntity::getBeLongStationId, stationIds));
if (CollectionUtils.isEmpty(list)) {
return Collections.emptyList();
}
return list.stream().map(RecycleDeviceEntity::getDeviceCode).distinct().collect(Collectors.toList());
}
@Override
public List<String> getStationByCompanyId(String companyId) {
List<RecycleDeviceEntity> list = this.list(new LambdaQueryWrapper<>(RecycleDeviceEntity.class)
.eq(RecycleDeviceEntity::getBeLongCompanyId, companyId));
if (CollectionUtils.isEmpty(list)) {
return Collections.emptyList();
}
return list.stream().map(RecycleDeviceEntity::getBeLongStationId).distinct().collect(Collectors.toList());
}
}

@ -7,6 +7,7 @@ import jnpf.base.vo.PageListVO;
import jnpf.base.vo.PaginationVO;
import jnpf.entity.RecycleCleanOrderEntity;
import jnpf.model.recyclecleanorder.*;
import jnpf.model.recycledeliveryorder.OrderStatisticsRequest;
import jnpf.service.RecycleCleanOrderService;
import jnpf.service.RecycleDeviceService;
import jnpf.util.GeneraterSwapUtil;
@ -237,4 +238,10 @@ public class RecycleCleanOrderController {
else return ActionResult.fail("审核失败");
}
@Operation(summary = "清运统计")
@PostMapping("/cleanCount")
public ActionResult cleanCount(@RequestBody OrderStatisticsRequest request) {
return ActionResult.success(recycleCleanOrderService.cleanCount(request));
}
}

@ -230,4 +230,10 @@ public class RecycleDeliveryOrderController {
return ActionResult.success("审核成功");
}
@Operation(summary = "投递统计")
@PostMapping("/deliveryCount")
public ActionResult deliveryCount(@RequestBody OrderStatisticsRequest request) {
return ActionResult.success(recycleDeliveryOrderService.deliveryCount(request));
}
}

@ -211,8 +211,7 @@ public class RecycleOrderController {
@Operation(summary = "统计计算")
@PostMapping("/compute")
public ActionResult compute(@RequestBody RecycleOrderRequest request) {
List<RecycleOrderResponse> list = recycleOrderService.compute(request);
return ActionResult.success(list);
return ActionResult.success(recycleOrderService.compute(request));
}
}

@ -0,0 +1,45 @@
package jnpf.model.recycledeliveryorder;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
@Data
public class OrderStatisticsRequest {
/**
* id
*/
@NotBlank(message = "商户id 不能为空")
private String companyId;
/**
* id
*/
private List<String> stationIds;
/**
*
*/
private List<String> deviceCodes;
/**
*
*/
@NotNull(message = "统计年份不能为空")
private int year;
/**
*
*/
@NotNull(message = "统计月份不能为空")
private int month;
/**
*
*/
private int auditStatus;
}

@ -0,0 +1,45 @@
package jnpf.model.recycledeliveryorder;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class OrderStatisticsResponse implements Serializable {
/**
* YYYY-mm-dd
*/
private String date;
/**
*
*/
private BigDecimal weight;
/**
*
*/
private BigDecimal adjustWeight;
/**
*
*/
private BigDecimal price;
/**
*
*/
private BigDecimal adjustPrice;
}
Loading…
Cancel
Save