mirror of
https://gitee.com/huangge1199_admin/vue-pro.git
synced 2024-11-22 23:31:52 +08:00
mall + trade:快递价格计算
This commit is contained in:
parent
0c283ded5d
commit
e1a8e45ac7
@ -51,8 +51,8 @@ public interface ErrorCodeConstants {
|
|||||||
ErrorCode EXPRESS_CODE_DUPLICATE = new ErrorCode(1011003001, "已经存在该编码的快递公司");
|
ErrorCode EXPRESS_CODE_DUPLICATE = new ErrorCode(1011003001, "已经存在该编码的快递公司");
|
||||||
ErrorCode EXPRESS_TEMPLATE_NOT_EXISTS = new ErrorCode(1011003002, "运费模板不存在");
|
ErrorCode EXPRESS_TEMPLATE_NOT_EXISTS = new ErrorCode(1011003002, "运费模板不存在");
|
||||||
ErrorCode EXPRESS_TEMPLATE_NAME_DUPLICATE = new ErrorCode(1011003003, "已经存在该运费模板名");
|
ErrorCode EXPRESS_TEMPLATE_NAME_DUPLICATE = new ErrorCode(1011003003, "已经存在该运费模板名");
|
||||||
ErrorCode DELIVERY_EXPRESS_USER_ADDRESS_IS_EMPTY = new ErrorCode(1011003004, "计算快递运费时,收件人地址编号为空");
|
ErrorCode DELIVERY_EXPRESS_USER_ADDRESS_IS_EMPTY = new ErrorCode(1011003004, "计算快递运费时,收件人地址编号为空"); // TODO @jaosn:这个错误码,放到 Price 这块
|
||||||
ErrorCode PRODUCT_EXPRESS_TEMPLATE_NOT_FOUND = new ErrorCode(1011003005, "找不到到商品对应的运费模板");
|
ErrorCode PRODUCT_EXPRESS_TEMPLATE_NOT_FOUND = new ErrorCode(1011003005, "找不到到商品对应的运费模板"); // TODO @jaosn:这个错误码,放到 Price 这块
|
||||||
ErrorCode EXPRESS_API_QUERY_ERROR = new ErrorCode(1011003006, "快递查询接口异常");
|
ErrorCode EXPRESS_API_QUERY_ERROR = new ErrorCode(1011003006, "快递查询接口异常");
|
||||||
ErrorCode EXPRESS_API_QUERY_FAILED = new ErrorCode(1011003007, "快递查询返回失败, 原因:{}");
|
ErrorCode EXPRESS_API_QUERY_FAILED = new ErrorCode(1011003007, "快递查询返回失败, 原因:{}");
|
||||||
ErrorCode PICK_UP_STORE_NOT_EXISTS = new ErrorCode(1011003008, "自提门店不存在");
|
ErrorCode PICK_UP_STORE_NOT_EXISTS = new ErrorCode(1011003008, "自提门店不存在");
|
||||||
|
@ -75,7 +75,7 @@ public interface DeliveryExpressTemplateService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 校验快递运费模板
|
* 校验快递运费模板
|
||||||
* <p>
|
*
|
||||||
* 如果校验不通过,抛出 {@link cn.iocoder.yudao.framework.common.exception.ServiceException} 异常
|
* 如果校验不通过,抛出 {@link cn.iocoder.yudao.framework.common.exception.ServiceException} 异常
|
||||||
*
|
*
|
||||||
* @param templateId 模板编号
|
* @param templateId 模板编号
|
||||||
@ -83,6 +83,7 @@ public interface DeliveryExpressTemplateService {
|
|||||||
*/
|
*/
|
||||||
DeliveryExpressTemplateDO validateDeliveryExpressTemplate(Long templateId);
|
DeliveryExpressTemplateDO validateDeliveryExpressTemplate(Long templateId);
|
||||||
|
|
||||||
|
// TODO @jason:可以把 spuIds 改成传递 ids 么?价格计算那,在 TradePriceCalculateRespBO 冗余好 templateId 字段。目的是,减少重复的查询
|
||||||
/**
|
/**
|
||||||
* 基于指定的 SPU 编号数组和收件人地址区域编号. 获取匹配运费模板
|
* 基于指定的 SPU 编号数组和收件人地址区域编号. 获取匹配运费模板
|
||||||
*
|
*
|
||||||
|
@ -242,10 +242,9 @@ public class DeliveryExpressTemplateServiceImpl implements DeliveryExpressTempla
|
|||||||
if (spu == null) {
|
if (spu == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// TODO @jason:避免循环查询;最好类似 expressTemplateMapper.selectBatchIds(spuMap.keySet()); 批量查询,内存组合;
|
||||||
SpuDeliveryExpressTemplateRespBO bo = new SpuDeliveryExpressTemplateRespBO()
|
SpuDeliveryExpressTemplateRespBO bo = new SpuDeliveryExpressTemplateRespBO()
|
||||||
.setChargeMode(item.getChargeMode())
|
.setChargeMode(item.getChargeMode())
|
||||||
// TODO @jason:是不是只要查询到一个,就不用查询下一个了;TemplateCharge 和 TemplateFree
|
|
||||||
// @芋艿 包邮的优先级> 费用的优先级 所以两个都要查询
|
|
||||||
.setTemplateCharge(findMatchExpressTemplateCharge(item.getId(), areaId))
|
.setTemplateCharge(findMatchExpressTemplateCharge(item.getId(), areaId))
|
||||||
.setTemplateFree(findMatchExpressTemplateFree(item.getId(), areaId));
|
.setTemplateFree(findMatchExpressTemplateFree(item.getId(), areaId));
|
||||||
result.put(spu.getId(), bo);
|
result.put(spu.getId(), bo);
|
||||||
|
@ -18,6 +18,8 @@ public class SpuDeliveryExpressTemplateRespBO {
|
|||||||
*/
|
*/
|
||||||
private Integer chargeMode;
|
private Integer chargeMode;
|
||||||
|
|
||||||
|
// TODO @jaosn:可以把 DeliveryExpressTemplateChargeBO 和 DeliveryExpressTemplateFreeBO 搞成内嵌的类。这样简洁一点
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 运费模板快递运费设置
|
* 运费模板快递运费设置
|
||||||
*/
|
*/
|
||||||
|
@ -164,16 +164,7 @@ public class TradePriceCalculateRespBO {
|
|||||||
*/
|
*/
|
||||||
private Integer payPrice;
|
private Integer payPrice;
|
||||||
|
|
||||||
/**
|
// ========== 商品 SPU 信息 ==========
|
||||||
* 商品重量,单位:kg 千克
|
|
||||||
*/
|
|
||||||
private Double weight;
|
|
||||||
/**
|
|
||||||
* 商品体积,单位:m^3 平米
|
|
||||||
*/
|
|
||||||
private Double volume;
|
|
||||||
|
|
||||||
// ========== 商品信息 ==========
|
|
||||||
/**
|
/**
|
||||||
* 商品名
|
* 商品名
|
||||||
*/
|
*/
|
||||||
@ -189,6 +180,16 @@ public class TradePriceCalculateRespBO {
|
|||||||
*/
|
*/
|
||||||
private Long categoryId;
|
private Long categoryId;
|
||||||
|
|
||||||
|
// ========== 商品 SKU 信息 ==========
|
||||||
|
/**
|
||||||
|
* 商品重量,单位:kg 千克
|
||||||
|
*/
|
||||||
|
private Double weight;
|
||||||
|
/**
|
||||||
|
* 商品体积,单位:m^3 平米
|
||||||
|
*/
|
||||||
|
private Double volume;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 商品属性数组
|
* 商品属性数组
|
||||||
*/
|
*/
|
||||||
|
@ -62,7 +62,7 @@ public class TradeDeliveryPriceCalculator implements TradePriceCalculator {
|
|||||||
deliveryExpressTemplateService.getExpressTemplateMapBySpuIdsAndArea(spuIds, address.getAreaId());
|
deliveryExpressTemplateService.getExpressTemplateMapBySpuIdsAndArea(spuIds, address.getAreaId());
|
||||||
// 3. 计算配送费用
|
// 3. 计算配送费用
|
||||||
if (CollUtil.isEmpty(spuExpressTemplateMap)) {
|
if (CollUtil.isEmpty(spuExpressTemplateMap)) {
|
||||||
log.error("找不到商品 SPU ID {}, area Id {} ,对应的运费模板", spuIds, address.getAreaId());
|
log.error("[calculate][找不到商品 spuId{} areaId{} 对应的运费模板]", spuIds, address.getAreaId());
|
||||||
throw exception(PRODUCT_EXPRESS_TEMPLATE_NOT_FOUND);
|
throw exception(PRODUCT_EXPRESS_TEMPLATE_NOT_FOUND);
|
||||||
}
|
}
|
||||||
calculateDeliveryPrice(selectedItem, spuExpressTemplateMap, result);
|
calculateDeliveryPrice(selectedItem, spuExpressTemplateMap, result);
|
||||||
@ -170,7 +170,8 @@ public class TradeDeliveryPriceCalculator implements TradePriceCalculator {
|
|||||||
*/
|
*/
|
||||||
private void divideDeliveryPrice(int deliveryPrice, List<OrderItem> orderItems) {
|
private void divideDeliveryPrice(int deliveryPrice, List<OrderItem> orderItems) {
|
||||||
// TODO @jason:分摊的话,是不是要按照比例呀?重量、价格、数量等等,
|
// TODO @jason:分摊的话,是不是要按照比例呀?重量、价格、数量等等,
|
||||||
// 按比例是不是有点复杂。后面看看是否需要
|
// 按比例是不是有点复杂。后面看看是否需要;
|
||||||
|
// TODO 可以看看别的项目怎么搞的哈。
|
||||||
int dividePrice = deliveryPrice / orderItems.size();
|
int dividePrice = deliveryPrice / orderItems.size();
|
||||||
for (OrderItem item : orderItems) {
|
for (OrderItem item : orderItems) {
|
||||||
// 更新快递运费
|
// 更新快递运费
|
||||||
@ -207,6 +208,7 @@ public class TradeDeliveryPriceCalculator implements TradePriceCalculator {
|
|||||||
// freeCount 是不是应该是 double ??
|
// freeCount 是不是应该是 double ??
|
||||||
// TODO @jason:要不配置的时候,把它的单位和商品对齐?到底是 kg、还是斤
|
// TODO @jason:要不配置的时候,把它的单位和商品对齐?到底是 kg、还是斤
|
||||||
// TODO @芋艿 目前 包邮 件数/重量/体积 都用的是这个字段
|
// TODO @芋艿 目前 包邮 件数/重量/体积 都用的是这个字段
|
||||||
|
// TODO @jason:那要不快递模版也改成 kg?这样是不是就不用 double ?
|
||||||
if (totalWeight >= templateFree.getFreeCount()
|
if (totalWeight >= templateFree.getFreeCount()
|
||||||
&& totalPrice >= templateFree.getFreePrice()) {
|
&& totalPrice >= templateFree.getFreePrice()) {
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
Reference in New Issue
Block a user