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

master
jiyufei 4 months ago
parent 1409b0f4bc
commit 720c13cdec

@ -5,6 +5,8 @@ import jnpf.entity.*;
import java.util.*; import java.util.*;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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; 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 * @return list
*/ */
List<RecycleDeliveryOrderEntity> getList(); 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); List<RecycleDeviceEntity> queryRecycleSaffDeviceList(RecycleDevicePagination recycleDevicePagination);
/** /**
* *
* *
@ -49,4 +48,17 @@ public interface RecycleDeviceService extends IService<RecycleDeviceEntity> {
*/ */
List<String> getInfoByDeviceCode(List<String> deviceCodes); 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; package jnpf.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import jnpf.entity.*; import jnpf.entity.*;
import jnpf.mapper.RecycleCleanOrderMapper; import jnpf.mapper.RecycleCleanOrderMapper;
import jnpf.model.recycledeliveryorder.OrderStatisticsRequest;
import jnpf.model.recycledeliveryorder.OrderStatisticsResponse;
import jnpf.service.*; import jnpf.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jnpf.model.recyclecleanorder.*; import jnpf.model.recyclecleanorder.*;
@ -28,6 +31,9 @@ import jnpf.model.QueryModel;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import jnpf.base.model.ColumnDataModel; 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.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
@ -56,6 +62,7 @@ import javax.annotation.Resource;
* 2024-06-18 * 2024-06-18
*/ */
@Service @Service
@Slf4j
public class RecycleCleanOrderServiceImpl extends ServiceImpl<RecycleCleanOrderMapper, RecycleCleanOrderEntity> implements RecycleCleanOrderService { public class RecycleCleanOrderServiceImpl extends ServiceImpl<RecycleCleanOrderMapper, RecycleCleanOrderEntity> implements RecycleCleanOrderService {
@Autowired @Autowired
private GeneraterSwapUtil generaterSwapUtil; private GeneraterSwapUtil generaterSwapUtil;
@ -66,6 +73,12 @@ public class RecycleCleanOrderServiceImpl extends ServiceImpl<RecycleCleanOrderM
@Resource @Resource
private RecycleCleanOrderMapper cleanOrderMapper; private RecycleCleanOrderMapper cleanOrderMapper;
@Resource
private RecycleDeliveryOrderServiceImpl recycleDeliveryOrderService;
@Resource
private RecycleDeviceService recycleDeviceService;
@Override @Override
public List<RecycleCleanOrderEntity> getList(RecycleCleanOrderPagination recycleCleanOrderPagination) { public List<RecycleCleanOrderEntity> getList(RecycleCleanOrderPagination recycleCleanOrderPagination) {
return getTypeList(recycleCleanOrderPagination, recycleCleanOrderPagination.getDataType()); return getTypeList(recycleCleanOrderPagination, recycleCleanOrderPagination.getDataType());
@ -359,4 +372,47 @@ public class RecycleCleanOrderServiceImpl extends ServiceImpl<RecycleCleanOrderM
this.saveOrUpdate(entity); 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; 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};
}
/** /**
* *
* *

@ -481,4 +481,24 @@ public class RecycleDeviceServiceImpl extends ServiceImpl<RecycleDeviceMapper, R
} }
return list.stream().map(RecycleDeviceEntity::getBeLongCompanyId).collect(Collectors.toList()); 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.base.vo.PaginationVO;
import jnpf.entity.RecycleCleanOrderEntity; import jnpf.entity.RecycleCleanOrderEntity;
import jnpf.model.recyclecleanorder.*; import jnpf.model.recyclecleanorder.*;
import jnpf.model.recycledeliveryorder.OrderStatisticsRequest;
import jnpf.service.RecycleCleanOrderService; import jnpf.service.RecycleCleanOrderService;
import jnpf.service.RecycleDeviceService; import jnpf.service.RecycleDeviceService;
import jnpf.util.GeneraterSwapUtil; import jnpf.util.GeneraterSwapUtil;
@ -237,4 +238,10 @@ public class RecycleCleanOrderController {
else return ActionResult.fail("审核失败"); 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("审核成功"); 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 = "统计计算") @Operation(summary = "统计计算")
@PostMapping("/compute") @PostMapping("/compute")
public ActionResult compute(@RequestBody RecycleOrderRequest request) { public ActionResult compute(@RequestBody RecycleOrderRequest request) {
List<RecycleOrderResponse> list = recycleOrderService.compute(request); return ActionResult.success(recycleOrderService.compute(request));
return ActionResult.success(list);
} }
} }

@ -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