Browse Source

feat(all): 修改结算单配送给加价逻辑

dist.1.3.0
zhaoqiaobo 3 months ago
parent
commit
5d50922b1e
  1. 12
      blade-service-api/logpm-statisticsdata-api/src/main/java/com/logpm/statistics/entity/StatisticsDistributionPackageEntity.java
  2. 14
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSignforServiceImpl.java
  3. 2
      blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/listener/mq/WaybillFanoutListener.java
  4. 44
      blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/service/impl/StatisticsOrderInfoServiceImpl.java

12
blade-service-api/logpm-statisticsdata-api/src/main/java/com/logpm/statistics/entity/StatisticsDistributionPackageEntity.java

@ -48,6 +48,18 @@ public class StatisticsDistributionPackageEntity extends TenantEntity {
@ApiModelProperty(value = "仓库id")
private Long warehouseId;
/**
* 品牌id
*/
@ApiModelProperty(value = "品牌id")
private Long brandId;
/**
* 客户id
*/
@ApiModelProperty(value = "客户id")
private Long consigneeId;
/**
* 仓库名称
*/

14
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSignforServiceImpl.java

@ -2622,7 +2622,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
warehouseUpdownTypeClient.downPackageOrDelTray(loadscanEntity.getOrderPackageCode(), myCurrentWarehouse.getId(), "签收下架解托");
//维护订单状态
String content = "包件在" + myCurrentWarehouse.getName() + "由" + loadscanEntity.getSigningUser() + "扫描签收,装车方式:扫描装车,配送车次号:" + deliveryListEntity.getTrainNumber() + "预约任务号:" + distributionReservationEntity.getReservationCode();
JSONObject trunklinePackageTrackLog = handleLogJSONObject(myCurrentWarehouse, AuthUtil.getUser(), parcelListEntity.getOrderPackageCode(), content, WorkNodeEnums.DISTRIBUTION_SIGN_FOR.getCode(), deliveryListEntity.getTrainNumber(), parcelListEntity.getWarehouseEntryTimeEnd());
JSONObject trunklinePackageTrackLog = handleLogJSONObject(myCurrentWarehouse, AuthUtil.getUser(), parcelListEntity.getOrderPackageCode(), content, WorkNodeEnums.DISTRIBUTION_SIGN_FOR.getCode(), deliveryListEntity.getId().toString(), parcelListEntity.getWarehouseEntryTimeEnd());
aaa.add(trunklinePackageTrackLog);
} else {
//这里装车的数据需要进行补录
@ -2702,7 +2702,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
packageLockIds.add(distributionLoadscanEntity.getPackageId());
String content = "包件在" + myCurrentWarehouse.getName() + "由" + distributionLoadscanEntity.getSigningUser() + "扫描签收,装车方式:补录装车,配送车次号:" + deliveryListEntity.getTrainNumber() + "预约任务号:" + distributionReservationEntity.getReservationCode();
JSONObject trunklinePackageTrackLog = handleLogJSONObject(myCurrentWarehouse, AuthUtil.getUser(), parcelListEntity.getOrderPackageCode(), content, WorkNodeEnums.DISTRIBUTION_SIGN_FOR.getCode(), deliveryListEntity.getTrainNumber(), parcelListEntity.getWarehouseEntryTimeEnd());
JSONObject trunklinePackageTrackLog = handleLogJSONObject(myCurrentWarehouse, AuthUtil.getUser(), parcelListEntity.getOrderPackageCode(), content, WorkNodeEnums.DISTRIBUTION_SIGN_FOR.getCode(), deliveryListEntity.getId().toString(), parcelListEntity.getWarehouseEntryTimeEnd());
aaa.add(trunklinePackageTrackLog);
orderPackageCodes.add(distributionLoadscanEntity.getOrderPackageCode());
}
@ -2984,7 +2984,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
warehouseUpdownTypeClient.downPackageOrDelTray(distributionLoadscanEntity.getOrderPackageCode(), myCurrentWarehouse.getId(), "签收下架解托");
content = "包件在" + myCurrentWarehouse.getName() + "由" + AuthUtil.getNickName() + "后台签收,装车方式:扫描装车,配送车次号:" + deliveryListEntity.getTrainNumber() + "预约任务号:" + distributionReservationEntity.getReservationCode();
try {
trunklinePackageTrackLog = handleLogJSONObject(myCurrentWarehouse, AuthUtil.getUser(), distributionLoadscanEntity.getOrderPackageCode(), content, WorkNodeEnums.DISTRIBUTION_SIGN_FOR.getCode(), deliveryListEntity.getTrainNumber(), parcelListEntity.getWarehouseEntryTimeEnd());
trunklinePackageTrackLog = handleLogJSONObject(myCurrentWarehouse, AuthUtil.getUser(), distributionLoadscanEntity.getOrderPackageCode(), content, WorkNodeEnums.DISTRIBUTION_SIGN_FOR.getCode(), deliveryListEntity.getId().toString(), parcelListEntity.getWarehouseEntryTimeEnd());
} catch (Exception e) {
log.error("装车日志数据错误", e);
}
@ -3069,7 +3069,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
// 包件解托下架
content = "包件在" + myCurrentWarehouse.getName() + "由" + AuthUtil.getNickName() + "后台签收,装车方式:补录装车,配送车次号:" + deliveryListEntity.getTrainNumber() + "预约任务号:" + distributionReservationEntity.getReservationCode();
try {
trunklinePackageTrackLog = handleLogJSONObject(myCurrentWarehouse, AuthUtil.getUser(), distributionLoadscanEntity.getOrderPackageCode(), content, WorkNodeEnums.DISTRIBUTION_SIGN_FOR.getCode(), deliveryListEntity.getTrainNumber(), parcelListEntity.getWarehouseEntryTimeEnd());
trunklinePackageTrackLog = handleLogJSONObject(myCurrentWarehouse, AuthUtil.getUser(), distributionLoadscanEntity.getOrderPackageCode(), content, WorkNodeEnums.DISTRIBUTION_SIGN_FOR.getCode(), deliveryListEntity.getId().toString(), parcelListEntity.getWarehouseEntryTimeEnd());
} catch (Exception e) {
log.error("装车日志数据错误", e);
}
@ -3407,7 +3407,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
distributionLoadscanService.updateById(distributionLoadscanEntity);
distributionSignforMapper.updateSignforNum(distributionLoadscanEntity.getDeliveryId(), distributionLoadscanEntity.getReservationId(), distributionLoadscanEntity.getPackageNub());
}
JSONObject trunklinePackageTrackLog = handleLogJSONObject(myCurrentWarehouse, AuthUtil.getUser(), parcelListEntity.getOrderPackageCode(), content, WorkNodeEnums.DISTRIBUTION_ABNORMAL_SIGN_FOR.getCode(), distributionDeliveryListEntity.getTrainNumber(), parcelListEntity.getWarehouseEntryTimeEnd());
JSONObject trunklinePackageTrackLog = handleLogJSONObject(myCurrentWarehouse, AuthUtil.getUser(), parcelListEntity.getOrderPackageCode(), content, WorkNodeEnums.DISTRIBUTION_ABNORMAL_SIGN_FOR.getCode(), distributionDeliveryListEntity.getId().toString(), parcelListEntity.getWarehouseEntryTimeEnd());
aaa.add(trunklinePackageTrackLog);
} else {
@ -3481,7 +3481,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
Integer i = distributionDeliveryListMapper.updateloadingTimeById(distrilbutionloadingscanDTO.getDeliveryId());
//修改包件装车、签收状态
packageLockIds.add(distributionLoadscanEntity.getPackageId());
JSONObject trunklinePackageTrackLog = handleLogJSONObject(myCurrentWarehouse, AuthUtil.getUser(), parcelListEntity.getOrderPackageCode(), content, WorkNodeEnums.DISTRIBUTION_ABNORMAL_SIGN_FOR.getCode(), distributionDeliveryListEntity.getTrainNumber(), parcelListEntity.getWarehouseEntryTimeEnd());
JSONObject trunklinePackageTrackLog = handleLogJSONObject(myCurrentWarehouse, AuthUtil.getUser(), parcelListEntity.getOrderPackageCode(), content, WorkNodeEnums.DISTRIBUTION_ABNORMAL_SIGN_FOR.getCode(), distributionDeliveryListEntity.getId().toString(), parcelListEntity.getWarehouseEntryTimeEnd());
aaa.add(trunklinePackageTrackLog);
} else {
@ -5354,7 +5354,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
distributionLoadscanService.updateById(loadscanEntities);
packageLockIds.add(loadscanEntities.getPackageId());
content = "包件在" + myCurrentWarehouse.getName() + "由" + loadscanEntities.getSigningUser() + "司机批量签收,装车方式:补录装车,配送车次号:" + distributionDeliveryListEntity.getTrainNumber() + "预约任务号:" + reservationEntity.getReservationCode();
trunklinePackageTrackLog = handleLogJSONObject(myCurrentWarehouse, AuthUtil.getUser(), parcelListEntity.getOrderPackageCode(), content, WorkNodeEnums.DISTRIBUTION_ABNORMAL_SIGN_FOR.getCode(), distributionDeliveryListEntity.getTrainNumber(), parcelListEntity.getWarehouseEntryTimeEnd());
trunklinePackageTrackLog = handleLogJSONObject(myCurrentWarehouse, AuthUtil.getUser(), parcelListEntity.getOrderPackageCode(), content, WorkNodeEnums.DISTRIBUTION_ABNORMAL_SIGN_FOR.getCode(), distributionDeliveryListEntity.getId().toString(), parcelListEntity.getWarehouseEntryTimeEnd());
// distributionAsyncService.sendFactory(parcelListEntity, loadscanEntities.getSigningTime(), reservationEntity.getId(), reservationEntity.getReservationCode(), myCurrentWarehouse.getName(), user.getNickName());
// 节点作业推送
sendNodeWorkDataBroadcast(parcelListEntity, reservationEntity, loadscanEntities.getSigningTime(), myCurrentWarehouse);

2
blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/listener/mq/WaybillFanoutListener.java

@ -159,6 +159,8 @@ public class WaybillFanoutListener {
StatisticsDistributionPackageEntity statisticsDistributionPackageEntity = new StatisticsDistributionPackageEntity();
statisticsDistributionPackageEntity.setWarehouseId(warehouseId);
statisticsDistributionPackageEntity.setWarehouseName(warehouseName);
statisticsDistributionPackageEntity.setBrandId(brandId);
statisticsDistributionPackageEntity.setConsigneeId(consigneeId);
statisticsDistributionPackageEntity.setTypeService(typeService);
statisticsDistributionPackageEntity.setWaybillId(waybillId);
statisticsDistributionPackageEntity.setWaybillNo(waybillNo);

44
blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/service/impl/StatisticsOrderInfoServiceImpl.java

@ -6,6 +6,7 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.logpm.basicdata.entity.BasicdataPriceTemplateEntity;
import com.logpm.basicdata.feign.IBasicdataCodeClient;
@ -477,7 +478,7 @@ public class StatisticsOrderInfoServiceImpl extends BaseServiceImpl<StatisticsOr
// 模版是否有配送
if (StrUtil.contains(serviceType, "4")) {
if (CollUtil.isNotEmpty(distributionPackageEntities)) {
calculateDispatchCost(template, typeService, distributionPackageEntities, dispatch, dispatchIsMinCost);
calculateDispatchCost(template, typeService, distributionPackageEntities, dispatch, dispatchIsMinCost,brandId,consigneeId);
}
}
}
@ -519,7 +520,7 @@ public class StatisticsOrderInfoServiceImpl extends BaseServiceImpl<StatisticsOr
}
}
private void calculateDispatchCost(BasicdataPriceTemplateEntity template, String typeService, List<StatisticsDistributionPackageEntity> distributionPackageEntities, PriceDispatchVO dispatch, Integer dispatchIsMinCost) {
private void calculateDispatchCost(BasicdataPriceTemplateEntity template, String typeService, List<StatisticsDistributionPackageEntity> distributionPackageEntities, PriceDispatchVO dispatch, Integer dispatchIsMinCost, Long brandId, Long consigneeId) {
String dispatchPricingType = template.getDispatchPricingType();
// 服务类型与模版的服务类型一致
if (StrUtil.equals(dispatchPricingType, typeService)) {
@ -544,13 +545,25 @@ public class StatisticsOrderInfoServiceImpl extends BaseServiceImpl<StatisticsOr
if (ObjectUtil.equals(1, dispatchMinCostMode)) {
buildDispatchCostToPackage(dispatchMinCostType, distributionPackageEntities, minCost, additionalCost);
} else if (ObjectUtil.equals(2, dispatchMinCostMode)) {
Map<String, List<StatisticsDistributionPackageEntity>> map = distributionPackageEntities.stream().collect(Collectors.groupingBy(StatisticsDistributionPackageEntity::getTrainNumber));
if (CollUtil.isNotEmpty(map)) {
for (Map.Entry<String, List<StatisticsDistributionPackageEntity>> entry : map.entrySet()) {
List<StatisticsDistributionPackageEntity> value = entry.getValue();
buildDispatchCostToPackage(dispatchMinCostType, value, minCost, additionalCost);
}
// 按配送任务 计算规则 1 取出包件中所有的配送任务号 2 按配送任务号查出所有包件信息 3 按品牌和收货单位过滤(可能存在同一个配送任务存在同一客户不同订单情况) 4 按配送任务分组计算
Set<String> trainNumberSet = distributionPackageEntities.stream().map(StatisticsDistributionPackageEntity::getTrainNumber).collect(Collectors.toSet());
List<StatisticsDistributionPackageEntity> distributionPackageEntities1 = distributionPackageService.list(Wrappers.<StatisticsDistributionPackageEntity>lambdaQuery()
.in(StatisticsDistributionPackageEntity::getTrainNumber, trainNumberSet));
for (String s : trainNumberSet) {
List<StatisticsDistributionPackageEntity> packageEntities = distributionPackageEntities1.stream()
.filter(entity -> ObjectUtil.equals(s, entity.getTrainNumber()))
.filter(entity -> ObjectUtil.equals(entity.getBrandId(), brandId))
.filter(entity -> ObjectUtil.equals(entity.getConsigneeId(), consigneeId))
.collect(Collectors.toList());
buildDispatchCostToPackage(dispatchMinCostType, packageEntities, minCost, additionalCost);
}
// Map<String, List<StatisticsDistributionPackageEntity>> map = distributionPackageEntities.stream().collect(Collectors.groupingBy(StatisticsDistributionPackageEntity::getTrainNumber));
// if (CollUtil.isNotEmpty(map)) {
// for (Map.Entry<String, List<StatisticsDistributionPackageEntity>> entry : map.entrySet()) {
// List<StatisticsDistributionPackageEntity> value = entry.getValue();
// buildDispatchCostToPackage(dispatchMinCostType, value, minCost, additionalCost);
// }
// }
}
// 保存配送包件信息
if (CollUtil.isNotEmpty(distributionPackageEntities)) {
@ -831,9 +844,10 @@ public class StatisticsOrderInfoServiceImpl extends BaseServiceImpl<StatisticsOr
int size = distributionPackageEntities.size();
// 总件数 < 最低价 则计算保底价
if (size < minCost) {
// 分摊到包件上 原单价 + 加算价格
// 分摊到包件上 原单价 + 加算价格/件数
BigDecimal divide = NumberUtil.toBigDecimal(additionalCost).divide(NumberUtil.toBigDecimal(size), 2, BigDecimal.ROUND_HALF_UP);
distributionPackageEntities.forEach(statisticsDistributionPackageEntity -> {
statisticsDistributionPackageEntity.setRealDeliveryFee(statisticsDistributionPackageEntity.getRealDeliveryFee().add(NumberUtil.toBigDecimal(additionalCost)));
statisticsDistributionPackageEntity.setRealDeliveryFee(statisticsDistributionPackageEntity.getRealDeliveryFee().add(divide));
});
}
} else if (ObjectUtil.equals(3, dispatchMinCostType)) {
@ -841,9 +855,10 @@ public class StatisticsOrderInfoServiceImpl extends BaseServiceImpl<StatisticsOr
BigDecimal totalVolume = distributionPackageEntities.stream().map(StatisticsDistributionPackageEntity::getTotalVolume).reduce(BigDecimal.ZERO, BigDecimal::add);
// 总件数 < 最低价 则计算保底价
if (NumberUtil.compare(NumberUtil.toDouble(totalVolume), minCost) < 0) {
// 分摊到包件上 原单价 + 加算价格
// 分摊到包件上 原单价 + 加算价格/件数
BigDecimal divide = NumberUtil.toBigDecimal(additionalCost).divide(NumberUtil.toBigDecimal(distributionPackageEntities.size()), 2, BigDecimal.ROUND_HALF_UP);
distributionPackageEntities.forEach(statisticsDistributionPackageEntity -> {
statisticsDistributionPackageEntity.setRealDeliveryFee(statisticsDistributionPackageEntity.getRealDeliveryFee().add(NumberUtil.toBigDecimal(additionalCost)));
statisticsDistributionPackageEntity.setRealDeliveryFee(statisticsDistributionPackageEntity.getRealDeliveryFee().add(divide));
});
}
} else if (ObjectUtil.equals(4, dispatchMinCostType)) {
@ -851,9 +866,10 @@ public class StatisticsOrderInfoServiceImpl extends BaseServiceImpl<StatisticsOr
BigDecimal totalWeight = distributionPackageEntities.stream().map(StatisticsDistributionPackageEntity::getTotalWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
// 总件数 < 最低价 则计算保底价
if (NumberUtil.compare(NumberUtil.toDouble(totalWeight), minCost) < 0) {
// 分摊到包件上 原单价 + 加算价格
// 分摊到包件上 原单价 + 加算价格/件数
BigDecimal divide = NumberUtil.toBigDecimal(additionalCost).divide(NumberUtil.toBigDecimal(distributionPackageEntities.size()), 2, BigDecimal.ROUND_HALF_UP);
distributionPackageEntities.forEach(statisticsDistributionPackageEntity -> {
statisticsDistributionPackageEntity.setRealDeliveryFee(statisticsDistributionPackageEntity.getRealDeliveryFee().add(NumberUtil.toBigDecimal(additionalCost)));
statisticsDistributionPackageEntity.setRealDeliveryFee(statisticsDistributionPackageEntity.getRealDeliveryFee().add(divide));
});
}
}

Loading…
Cancel
Save