You've already forked FrameTour-BE
feat(pricing): 集成定价服务并优化价格查询逻辑- 在 OrderBiz 中添加 IPriceCalculationService 依赖,用于计算价格
All checks were successful
ZhenTu-BE/pipeline/head This commit looks good
All checks were successful
ZhenTu-BE/pipeline/head This commit looks good
- 重构 queryPrice 方法,使用定价服务计算价格而不是直接从数据库读取 - 移除 PriceObj 中未使用的 scenicAllPrice 字段 - 删除 ScenicEntity 和 ScenicAddOrUpdateReq 中的冗余价格字段 -优化 ProductConfigServiceImpl 中的 getTierConfig 方法,增加参数校验
This commit is contained in:
@@ -24,6 +24,11 @@ import com.ycwl.basic.model.pc.task.entity.TaskEntity;
|
|||||||
import com.ycwl.basic.model.pc.template.resp.TemplateRespVO;
|
import com.ycwl.basic.model.pc.template.resp.TemplateRespVO;
|
||||||
import com.ycwl.basic.model.pc.video.entity.VideoEntity;
|
import com.ycwl.basic.model.pc.video.entity.VideoEntity;
|
||||||
import com.ycwl.basic.model.pc.video.resp.VideoRespVO;
|
import com.ycwl.basic.model.pc.video.resp.VideoRespVO;
|
||||||
|
import com.ycwl.basic.pricing.dto.PriceCalculationRequest;
|
||||||
|
import com.ycwl.basic.pricing.dto.PriceCalculationResult;
|
||||||
|
import com.ycwl.basic.pricing.dto.ProductItem;
|
||||||
|
import com.ycwl.basic.pricing.enums.ProductType;
|
||||||
|
import com.ycwl.basic.pricing.service.IPriceCalculationService;
|
||||||
import com.ycwl.basic.profitsharing.biz.ProfitSharingBiz;
|
import com.ycwl.basic.profitsharing.biz.ProfitSharingBiz;
|
||||||
import com.ycwl.basic.repository.FaceRepository;
|
import com.ycwl.basic.repository.FaceRepository;
|
||||||
import com.ycwl.basic.repository.OrderRepository;
|
import com.ycwl.basic.repository.OrderRepository;
|
||||||
@@ -40,6 +45,7 @@ import org.springframework.stereotype.Component;
|
|||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -79,6 +85,8 @@ public class OrderBiz {
|
|||||||
@Autowired
|
@Autowired
|
||||||
@Lazy
|
@Lazy
|
||||||
private PrinterService printerService;
|
private PrinterService printerService;
|
||||||
|
@Autowired
|
||||||
|
private IPriceCalculationService iPriceCalculationService;
|
||||||
|
|
||||||
public PriceObj queryPrice(Long scenicId, int goodsType, Long goodsId) {
|
public PriceObj queryPrice(Long scenicId, int goodsType, Long goodsId) {
|
||||||
PriceObj priceObj = new PriceObj();
|
PriceObj priceObj = new PriceObj();
|
||||||
@@ -86,7 +94,6 @@ public class OrderBiz {
|
|||||||
priceObj.setGoodsId(goodsId);
|
priceObj.setGoodsId(goodsId);
|
||||||
ScenicEntity scenic = scenicRepository.getScenic(scenicId);
|
ScenicEntity scenic = scenicRepository.getScenic(scenicId);
|
||||||
ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(scenicId);
|
ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(scenicId);
|
||||||
priceObj.setScenicAllPrice(scenic.getPrice());
|
|
||||||
if (scenicConfig != null) {
|
if (scenicConfig != null) {
|
||||||
if (Boolean.TRUE.equals(scenicConfig.getAllFree())) {
|
if (Boolean.TRUE.equals(scenicConfig.getAllFree())) {
|
||||||
// 景区全免
|
// 景区全免
|
||||||
@@ -120,13 +127,20 @@ public class OrderBiz {
|
|||||||
priceObj.setScenicId(video.getScenicId());
|
priceObj.setScenicId(video.getScenicId());
|
||||||
break;
|
break;
|
||||||
case 1: // source
|
case 1: // source
|
||||||
priceObj.setPrice(scenic.getSourceVideoPrice());
|
|
||||||
priceObj.setSlashPrice(scenic.getSourceVideoPrice());
|
|
||||||
priceObj.setFaceId(goodsId);
|
|
||||||
break;
|
|
||||||
case 2: // source
|
case 2: // source
|
||||||
priceObj.setPrice(scenic.getSourceImagePrice());
|
FaceEntity face = faceRepository.getFace(goodsId);
|
||||||
priceObj.setSlashPrice(scenic.getSourceImagePrice());
|
PriceCalculationRequest calculationRequest = new PriceCalculationRequest();
|
||||||
|
ProductItem productItem = new ProductItem();
|
||||||
|
productItem.setProductType(goodsType == 1 ? ProductType.RECORDING_SET : ProductType.PHOTO_SET);
|
||||||
|
productItem.setProductId(scenic.getId().toString());
|
||||||
|
productItem.setPurchaseCount(1);
|
||||||
|
productItem.setScenicId(scenic.getId().toString());
|
||||||
|
calculationRequest.setProducts(Collections.singletonList(productItem));
|
||||||
|
calculationRequest.setUserId(face.getMemberId());
|
||||||
|
calculationRequest.setFaceId(face.getId());
|
||||||
|
PriceCalculationResult priceCalculationResult = iPriceCalculationService.calculatePrice(calculationRequest);
|
||||||
|
priceObj.setPrice(priceCalculationResult.getFinalAmount());
|
||||||
|
priceObj.setSlashPrice(priceCalculationResult.getOriginalAmount());
|
||||||
priceObj.setFaceId(goodsId);
|
priceObj.setFaceId(goodsId);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -12,6 +12,5 @@ public class PriceObj {
|
|||||||
private Long goodsId;
|
private Long goodsId;
|
||||||
private Long faceId;
|
private Long faceId;
|
||||||
private BigDecimal price = BigDecimal.ZERO;
|
private BigDecimal price = BigDecimal.ZERO;
|
||||||
private BigDecimal scenicAllPrice;
|
|
||||||
private BigDecimal slashPrice;
|
private BigDecimal slashPrice;
|
||||||
}
|
}
|
||||||
|
@@ -61,7 +61,4 @@ public class ScenicEntity {
|
|||||||
* 景区源素材价格,元
|
* 景区源素材价格,元
|
||||||
*/
|
*/
|
||||||
private String kfCodeUrl;
|
private String kfCodeUrl;
|
||||||
private BigDecimal price;
|
|
||||||
private BigDecimal sourceVideoPrice;
|
|
||||||
private BigDecimal sourceImagePrice;
|
|
||||||
}
|
}
|
||||||
|
@@ -77,10 +77,6 @@ public class ScenicAddOrUpdateReq {
|
|||||||
private Date createTime;
|
private Date createTime;
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||||
private Date updateTime;
|
private Date updateTime;
|
||||||
// 景区源素材价格,元
|
|
||||||
private BigDecimal price;
|
|
||||||
private BigDecimal sourceVideoPrice;
|
|
||||||
private BigDecimal sourceImagePrice;
|
|
||||||
|
|
||||||
// 账号
|
// 账号
|
||||||
private String account;
|
private String account;
|
||||||
|
@@ -43,6 +43,9 @@ public class ProductConfigServiceImpl implements IProductConfigService {
|
|||||||
@Override
|
@Override
|
||||||
// @Cacheable(value = "tier-config", key = "#productType + '_' + #productId + '_' + #quantity")
|
// @Cacheable(value = "tier-config", key = "#productType + '_' + #productId + '_' + #quantity")
|
||||||
public PriceTierConfig getTierConfig(String productType, String productId, Integer quantity) {
|
public PriceTierConfig getTierConfig(String productType, String productId, Integer quantity) {
|
||||||
|
if (quantity == null || quantity <= 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
PriceTierConfig config = tierConfigMapper.selectByProductTypeAndQuantity(productType, productId, quantity);
|
PriceTierConfig config = tierConfigMapper.selectByProductTypeAndQuantity(productType, productId, quantity);
|
||||||
// 不使用default配置,没查到就算了
|
// 不使用default配置,没查到就算了
|
||||||
// // 如果没有找到特定商品的阶梯配置,尝试使用default配置
|
// // 如果没有找到特定商品的阶梯配置,尝试使用default配置
|
||||||
@@ -57,9 +60,10 @@ public class ProductConfigServiceImpl implements IProductConfigService {
|
|||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
if (config == null) {
|
if (config == null) {
|
||||||
log.warn("阶梯定价配置未找到: productType={}, productId={}, quantity={}",
|
return null;
|
||||||
productType, productId, quantity);
|
|
||||||
}
|
}
|
||||||
|
log.warn("阶梯定价: productType={}, productId={}, quantity={},config={}",
|
||||||
|
productType, productId, quantity, config);
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user