edit
This commit is contained in:
@@ -21,10 +21,11 @@ public class PriceUtils {
|
||||
* @param area
|
||||
* @param count
|
||||
* @param craft
|
||||
* @param tang
|
||||
* @param yinbai
|
||||
* @return
|
||||
*/
|
||||
public List<Product> rollLabelPrice(String kind, Double area, int count, String[] craft, String yinbai) {
|
||||
public List<Product> rollLabelPrice(String kind, Double area, int count, String[] craft, String yinbai, String tang, double[] tangPrices) {
|
||||
List<Product> list = new ArrayList<Product>();
|
||||
Product pro = new Product();
|
||||
// 最低收费
|
||||
@@ -151,19 +152,30 @@ public class PriceUtils {
|
||||
if (!StringUtils.isEmpty(craft)) {
|
||||
if ("大雪花镭射膜".equals(craft[0])) {
|
||||
danjia = danjia + 1;
|
||||
} else if ("覆哑膜".equals(craft[0])) {
|
||||
danjia = danjia + 0.8;
|
||||
} else {
|
||||
danjia = danjia + 0.6;
|
||||
}
|
||||
}
|
||||
price = Math
|
||||
.ceil(area * danjia + yinrPrice + count * 0.01 > lowerPrice ? area * danjia + yinrPrice + count * 0.01
|
||||
: lowerPrice);
|
||||
price = Math.ceil(Math.max(area * danjia + yinrPrice + count * 0.01, lowerPrice));
|
||||
// 如果有印白工艺:2元一平方,最低收费200元
|
||||
if (!StringUtils.isEmpty(yinbai)) {
|
||||
price = price + (area * 2 > 200 ? area * 2 : 200);
|
||||
}
|
||||
double tang_price = 0;
|
||||
|
||||
if (!StringUtils.isEmpty(tang) && "烫金".equals(tang)) {
|
||||
int[] bigCountArr = {500, 1000, 2000, 3000, 5000, 10000};
|
||||
|
||||
for (int i = 0; i < bigCountArr.length; i++) {
|
||||
if (count >= bigCountArr[i]) {
|
||||
tang_price = price + tangPrices[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
pro.setCount(count);
|
||||
pro.setPrice(price);
|
||||
pro.setPrice(Math.max(tang_price, price));
|
||||
list.add(pro);
|
||||
|
||||
/*
|
||||
@@ -3008,6 +3020,60 @@ public class PriceUtils {
|
||||
return price;
|
||||
}
|
||||
|
||||
public double getTestPrice(double length, double width, int count, int number,
|
||||
double[] areas, double[] prices, double minPrice, double lastPrice) {
|
||||
final int total = count * number;
|
||||
|
||||
for (int i = 1; i <= total; i++) {
|
||||
double currentPrice = new PriceUtils().getOptimizedPrice(
|
||||
length,
|
||||
width,
|
||||
i, // 当前数量
|
||||
1, // number 参数固定为1
|
||||
areas,
|
||||
prices,
|
||||
minPrice,
|
||||
lastPrice
|
||||
);
|
||||
|
||||
if (currentPrice > minPrice) {
|
||||
// 计算累加价格:基础价 + 剩余项*6
|
||||
return minPrice + (total - i + 1) * 6;
|
||||
}
|
||||
}
|
||||
// 未触发条件时返回基础最低价
|
||||
return minPrice;
|
||||
}
|
||||
|
||||
public double getOptimizedPrice(double length, double width, int count, int number,
|
||||
double[] areas, double[] prices, double minPrice, double lastPrice) {
|
||||
final double area = length * width * count / 10000;
|
||||
final boolean isSmallArea = area <= 0.2;
|
||||
|
||||
// 计算调整后的面积值
|
||||
final double adjustedArea = isSmallArea ? area * number : area;
|
||||
|
||||
// 确定单价基准
|
||||
double unitPrice = isSmallArea ? minPrice : lastPrice;
|
||||
if (!isSmallArea) {
|
||||
for (int i = 0; i < areas.length; i++) {
|
||||
if (adjustedArea <= areas[i]) {
|
||||
unitPrice = prices[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 计算基础价格
|
||||
double basePrice = isSmallArea ? minPrice : adjustedArea * unitPrice;
|
||||
|
||||
// 应用数量系数
|
||||
double finalPrice = (area > 0.2) ? basePrice * number : basePrice;
|
||||
|
||||
// 确保最低价格并取整
|
||||
return Math.ceil(Math.max(finalPrice, minPrice));
|
||||
}
|
||||
|
||||
/**
|
||||
* 亚克力计算
|
||||
*
|
||||
@@ -3124,50 +3190,54 @@ public class PriceUtils {
|
||||
* @param list
|
||||
* @return
|
||||
*/
|
||||
public List<Product> getDbPrice(String kind, Double width, Double length, int count, List<Product> list) {
|
||||
public List<Product> getDbPrice(String kind, Double width, Double length, int count, List<Product> list, int number) {
|
||||
//11-550灯布 12-520灯布 13-550黑底灯布
|
||||
Product pro = new Product();
|
||||
double price = 0, dj = 0;
|
||||
double area = length * width * count;
|
||||
if (kind.equals("11")) {
|
||||
if (area <= 5) {
|
||||
dj = 20;
|
||||
} else if (area <= 10) {
|
||||
dj = 18;
|
||||
} else if (area > 10) {
|
||||
dj = 17;
|
||||
}
|
||||
} else if (kind.equals("12")) {
|
||||
if (area <= 5) {
|
||||
dj = 16;
|
||||
} else if (area <= 10) {
|
||||
dj = 12;
|
||||
} else if (area > 10) {
|
||||
dj = 10;
|
||||
}
|
||||
double area = length * width * count / 10000;
|
||||
double[] areas = {};
|
||||
double[] prices = {};
|
||||
double last_price = 0;
|
||||
double min_price = 0;
|
||||
|
||||
if ("11".equals(kind)) {
|
||||
areas = new double[]{5, 10,};
|
||||
prices = new double[]{20, 18};
|
||||
last_price = 17;
|
||||
min_price = 55;
|
||||
|
||||
} else if ("12".equals(kind)) {
|
||||
areas = new double[]{5, 10,};
|
||||
prices = new double[]{16, 12};
|
||||
last_price = 10;
|
||||
min_price = 50;
|
||||
|
||||
} else {
|
||||
if (area <= 5) {
|
||||
dj = 24;
|
||||
} else if (area <= 10) {
|
||||
dj = 20;
|
||||
} else if (area > 10) {
|
||||
dj = 18;
|
||||
}
|
||||
areas = new double[]{5, 10,};
|
||||
prices = new double[]{24, 20};
|
||||
last_price = 18;
|
||||
min_price = 60;
|
||||
|
||||
}
|
||||
|
||||
|
||||
price = area * dj;
|
||||
if (area >= 7 && area <= 10) {
|
||||
price = price * 0.9;
|
||||
}
|
||||
if (kind.equals("11")) {
|
||||
price = Math.ceil(price > 55 ? price : 55);
|
||||
} else if (kind.equals("12")) {
|
||||
price = Math.ceil(price > 50 ? price : 50);
|
||||
if (width * length < 40 * 50) {
|
||||
price = new PriceUtils().getTestPrice(length, width, count, number, areas, prices, min_price, last_price);
|
||||
} else {
|
||||
price = Math.ceil(price > 60 ? price : 60);
|
||||
dj = last_price;
|
||||
for (int i = 0; i < areas.length; i++) {
|
||||
if (area <= areas[i]) {
|
||||
dj = prices[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
price = Math.max(area * dj, min_price);
|
||||
}
|
||||
|
||||
if (number > 1 && width * length >= 40 * 50) {
|
||||
pro.setPrice(Math.ceil(price * number));
|
||||
} else {
|
||||
pro.setPrice(Math.ceil(price));
|
||||
}
|
||||
pro.setPrice(price);
|
||||
pro.setCount(count);
|
||||
list.add(pro);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user