edit
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
package lingtao.net.Factory;
|
||||
|
||||
import lingtao.net.bean.Product;
|
||||
import lingtao.net.vo.PricingListVo;
|
||||
import lingtao.net.vo.ProductVo;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* 提供了一种特定的定价策略。
|
||||
* 该策略专门用于处理挂布产品的定价计算,根据产品信息和用户角色来确定最终价格。
|
||||
*/
|
||||
public class DossalPricingStrategy implements PricingStrategy {
|
||||
/**
|
||||
* 根据产品信息和用户角色计算价格。
|
||||
* 此方法旨在根据不同类型的用户(如普通用户、会员等)对Dossal产品提供定制化的定价。
|
||||
*
|
||||
* @param dto 产品信息对象,包含了需要计算价格的产品的所有必要信息。
|
||||
* @param role 用户角色,用于确定用户类型,进而影响最终的定价结果。
|
||||
* @return 返回计算后的价格列表视图对象,若不适用或未实现则返回null。
|
||||
*/
|
||||
@Override
|
||||
public PricingListVo calculatePrice(Product dto, String role) {
|
||||
String plantName = dto.getPlantName();
|
||||
double width = dto.getWidth();
|
||||
double length = dto.getLength();
|
||||
int count = dto.getCount();
|
||||
int number = dto.getNumber();
|
||||
double price = 0.0;
|
||||
double basePrice = 0.0;
|
||||
List<ProductVo> resultList = new ArrayList<>();
|
||||
List<String> craft_list = Optional.ofNullable(dto)
|
||||
.map(Product::getCraft) // 假设 dto 是 Dto 类型
|
||||
.map(Arrays::asList)
|
||||
.orElseGet(ArrayList::new);
|
||||
// 确保 craftList 是可变的
|
||||
craft_list = new ArrayList<>(craft_list);
|
||||
if ("领鸿".equals(plantName)) {
|
||||
if ("半透纱幔".equals(dto.getKindValue())) {
|
||||
basePrice = 15.0;
|
||||
double area = Math.max(count * number * width * length / 10000, 0.3);
|
||||
|
||||
price = new BigDecimal(basePrice * area).setScale(2, RoundingMode.HALF_UP).doubleValue();
|
||||
}
|
||||
}
|
||||
|
||||
ProductVo pro = new ProductVo();
|
||||
pro.setCount(count);
|
||||
pro.setPrice(price);
|
||||
pro.setNumber(number);
|
||||
pro.setWeight(BigDecimal.valueOf(width / 100 * length / 100 * count * 0.07).setScale(2, BigDecimal.ROUND_HALF_UP).toString());
|
||||
resultList.add(pro);
|
||||
return new PricingListVo(resultList);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user