import java.io.Serializable; import java.lang.ref.ReferenceQueue; import java.lang.ref.WeakReference; import java.math.BigDecimal; import java.math.RoundingMode;/*** 商品評價算法* * @project icomment* @fileName ProductScore.java* @Description* @author light-zhang* @date 2018年1月15日下午4:44:40* @version 1.0.0*/ public abstract class CommentUtils implements Serializable {private static final long serialVersionUID = 8143504152635422263L;/*************************** 方案一 *******************************************/private static final double baby_ratio = 0.837;// 寶貝評價計算占比(0.837/千)private static final double merchant_ratio = 0.113;// 賣家態度計算占比(0.113/千)private static final double logistics_ratio = 0.0278;// 物流評價計算占比(0.0278/萬)private static final double aplatfrom_ration = 0.0037;// 平臺影響分A(0.0037/萬)private static final double bplatfrom_ration = 0.0185; // 平臺影響分B (0.0185/萬)private static final double basic_score = 4.7463;// 最高分 /**************************************************************************//*** 方案一 寶貝占比較高,防止賣假貨 寶貝評價 0.837(千分比) 5 賣家態度 0.113(千分比) 4 物流服務 0.0278(萬分比) 3 平臺影響* 0.0037(萬分比) 2 平臺影響 0.0185(萬分比) 1* * @return*/public static BigDecimal babyScore(int baby, int merchant, int logistics) {double value = baby * baby_ratio + (merchant - 1) * merchant_ratio + (logistics - 2) * logistics_ratio+ (2 * aplatfrom_ration) + (1 * bplatfrom_ration);final BigDecimal result = getTemp(new BigDecimal(value));if (result.doubleValue() == basic_score) {return result.setScale(0, RoundingMode.HALF_UP);}return result.setScale(1, RoundingMode.HALF_UP);}/*************************** 方案二************************************************/private static final double syn_baby_ratio = 0.35;private static final double syn_merchant_ratio = 0.25;private static final double syn_logistics_ratio = 0.35;private static final double syn_aplatfrom_ration = 0.3;private static final double syn_bplatfrom_ration = 0.2;private static final double syn_basic_score = 4.6;/**************************************************************************//*** 綜合占比率 * @param baby* @param merchant* @param logistics* @return*/public static BigDecimal synthetical(int baby, int merchant, int logistics) {double value = baby * syn_baby_ratio + (merchant - 1) * syn_merchant_ratio+ (logistics - 2) * syn_logistics_ratio + 2 * syn_aplatfrom_ration + 1 * syn_bplatfrom_ration;final BigDecimal result = getTemp(new BigDecimal(value));if (result.doubleValue() == syn_basic_score) {return result.setScale(0, RoundingMode.HALF_UP);}return result.setScale(1, RoundingMode.HALF_UP);}/*** 寶貝梯度 梯度 0失望 1不滿意 2一般 3滿意 4驚喜 默認返回3滿意* * @param avgf* @return*/public static int grads(double avgf) {return (avgf <= 1.5) ? 0: (avgf > 1.5 && avgf <= 2.3) ? 1: (avgf > 2.3 && avgf <= 3.1) ? 2: (avgf > 3.1 && avgf <= 4.0) ? 3 : (avgf > 4.0 && avgf <= 5.0) ? 4 : 3;}private static <T> T getTemp(T classOfType) {ReferenceQueue<T> queue = new ReferenceQueue<T>();WeakReference<T> weakRef = new WeakReference<T>(classOfType, queue);if (null == weakRef.get()) {weakRef = new WeakReference<T>(classOfType);}return weakRef.get();} public static void main(String[] args) {int baby = 2;int merchant = 2;int logistics = 5;System.out.println("評測1 " + babyScore(baby, merchant, logistics));// 方案一 防止賣假貨采用方案System.out.println("梯度1 >>>>> " + grads(babyScore(baby, merchant, logistics).doubleValue()));System.out.println("評測2 " + synthetical(baby, merchant, logistics));// 方案二 綜合商家,寶貝,物流采用方案System.out.println("梯度2 >>>>> " + grads(synthetical(baby, merchant, logistics).doubleValue()));} }
?
?
?
?
/** ?* 淘寶商品評價 ?* ?* @project icomment ?* @fileName ProductScore.java ?* @Description ?* @author light-zhang ?* @date 2018年1月15日下午4:44:40 ?* @version 1.0.0 ?*/ public abstract class CommentUtils implements Serializable { ????private static final long serialVersionUID = 8143504152635422263L; ????private static final double BABY_MAKE_UP = 0.837;// 寶貝評價計算占比(0.837/千) private static final double SELLER_MAKE_UP = 0.113;// 賣家態度計算占比(0.113/千) private static final double LOGISTICS_MAKE_UP = 0.0278;//物流評價計算占比(0.0278/萬) private static final double PLATFROM_CASHA = 0.0037;// 平臺影響分A(0.0037/萬) private static final double PLATFROM_CASHB = 0.0185; // 平臺影響分B (0.0185/萬) private staticfinal double PLATFROM_BASIC = 4.7463;// 最高分/** ?????* 評價分計算公式 寶貝評價 0.837(千分比) 5 賣家態度 0.113(千分比) 4 物流服務 0.0278(萬分比) 3 平臺影響 ?????* 0.0037(萬分比) 2 平臺影響 0.0185(萬分比) 1 ?????* ?????* @param babyMark 寶貝描述 ?????* @param sellerMark 商家態度 ?????* @param logisticsMark 物流服務 ?????* @return 5分×0.837+4分×0.113+3分×0.0278+2分×0.0037+1分×0.0185 =4.7463 ?????*/ public static BigDecimal avgProductScore(int babyMark, int sellerMark, int logisticsMark) { ????????double value = babyMark * BABY_MAKE_UP + (sellerMark - 1) * SELLER_MAKE_UP ????????????????+ (logisticsMark - 2) * LOGISTICS_MAKE_UP + (2 * PLATFROM_CASHA) + (1 * PLATFROM_CASHB); ????????final BigDecimal result = new BigDecimal(value); ????????if (result.doubleValue() == PLATFROM_BASIC) {// 最高分 return result.setScale(0, RoundingMode.HALF_UP); ????????} ????????return result.setScale(1, RoundingMode.HALF_UP); ????} ????/** ?????* 梯度 0失望 1不滿意 2一般 3滿意 4驚喜 默認返回3滿意 ?????* ?????* @return */ public static int grads(double avgf) { ????????return (avgf <= 1.5) ? 0 ????????????????: (avgf > 1.5 && avgf <= 2.3) ? 1 ????????????????????????: (avgf > 2.3 && avgf <= 3.1) ? 2 ????????????????????????????????: (avgf > 3.1 && avgf <= 4.0) ? 3 ????????????????????????????????????????: (avgf > 4.0 && avgf <= 5.0) ? 4 : 3; ????} ????public static void main(String[] args) { ????????System.out.println(CommentUtils.avgProductScore(5, 3, 4).doubleValue()); ????????System.out.println(CommentUtils.grads(4.5)); ????} }
[/** * Táobǎo shāngpǐn píngjià * * @project icomment * @fileName ProductScore.Java * @Description * @author light-zhang * @date 2018 nián 1 yuè 15 rì xiàwǔ 4:44:40 * @Version 1.0.0 */ Public abstract class CommentUtils implements Serializable { private static final long serialVersionUID = 8143504152635422263L; private static final double BABY_MAKE_UP = 0.837;// Bǎobèi píngjià jìsuàn zhàn bǐ (0.837/Qiān) private static final double SELLER_MAKE_UP = 0.113;// Màijiā tàidù jìsuàn zhàn bǐ (0.113/Qiān) private static final double LOGISTICS_MAKE_UP = 0.0278;// Wùliú píngjià jìsuàn zhàn bǐ (0.0278/Wàn) private static final double PLATFROM_CASHA = 0.0037;// Píngtái yǐngxiǎng fēn A(0.0037/Wàn) private static final double PLATFROM_CASHB = 0.0185; // Píngtái yǐngxiǎng fēn B (0.0185/Wàn) private static final double PLATFROM_BASIC = 4.7463;// Zuìgāo fēn/** * píngjià fēn jìsuàn gōngshì bǎobèi píngjià 0.837(Qiānfēnbǐ) 5 màijiā tàidù 0.113(Qiānfēnbǐ) 4 wùliú fúwù 0.0278(Wànfēn bǐ) 3 píngtái yǐngxiǎng * 0.0037(Wànfēn bǐ) 2 píngtái yǐngxiǎng 0.0185(Wànfēn bǐ) 1 * * @param babyMark bǎobèi miáoshù * @param sellerMark shāngjiā tàidù * @param logisticsMark wùliú fúwù * @return 5 fēn ×0.837+4 Fēn ×0.113+3 Fēn ×0.0278+2 Fēn ×0.0037+1 Fēn ×0.0185 =4.7463 */ Public static BigDecimal avgProductScore(int babyMark, int sellerMark, int logisticsMark) { double value = babyMark* BABY_MAKE_UP + (sellerMark - 1)* SELLER_MAKE_UP + (logisticsMark - 2)* LOGISTICS_MAKE_UP + (2* PLATFROM_CASHA) + (1* PLATFROM_CASHB); final BigDecimal result = new BigDecimal(value); if (result.DoubleValue() == PLATFROM_BASIC) {// zuìgāo fēn return result.SetScale(0, RoundingMode.HALF_UP); } return result.SetScale(1, RoundingMode.HALF_UP); } /** * tīdù 0 shīwàng 1 bù mǎnyì 2 yībān 3 mǎnyì 4 jīngxǐ mòrèn fǎnhuí 3 mǎnyì * * @return*/ public static int grads(double avgf) { return (avgf <= 1.5)? 0 : (Avgf > 1.5&& Avgf <= 2.3)? 1 : (Avgf > 2.3&& Avgf <= 3.1)? 2 : (Avgf > 3.1&& Avgf <= 4.0)? 3 : (Avgf > 4.0&& Avgf <= 5.0)? 4: 3; } Public static void main(String[] args) { System.Out.Println(CommentUtils.AvgProductScore(5, 3, 4).DoubleValue()); System.Out.Println(CommentUtils.Grads(4.5)); } }]
/**
?* Taobao product evaluation
?*
?* @project icomment
?* @fileName ProductScore.java
?* @Description
?* @author light-zhang
?* @date January 15, 2018, 4:44:40 PM
?* @version 1.0.0
?*/ public abstract class CommentUtils implements Serializable {
????Private static final long serialVersionUID = 8143504152635422263L;
????Private static final double BABY_MAKE_UP = 0.837;// Baby evaluation calculation ratio (0.837/th) private static final double SELLER_MAKE_UP = 0.113;// Seller attitude calculation ratio (0.113/th) private static final double LOGISTICS_MAKE_UP = 0.0278;// Logistics evaluation calculation ratio (0.0278/Million) private static final double PLATFROM_CASHA = 0.0037;// Platform impact points A (0.0037/Million) private static final double PLATFROM_CASHB = 0.0185; // Platform impact points B (0.0185/Million) private static Final double PLATFROM_BASIC = 4.7463;// highest score /**
?????* Evaluation score calculation formula Baby evaluation 0.837 (thousands ratio) 5 Seller attitude 0.113 (thousands ratio) 4 Logistics service 0.0278 (10,000 ratio) 3 Platform impact
?????* 0.0037 (parts ratio) 2 Platform impact 0.0185 (10,000 ratio) 1
?????*
?????* @param babyMark baby description
?????* @param sellerMark Business attitude
?????* @param logisticsMark Logistics Services
?????* @return 5 points × 0.837 + 4 points × 0.113 + 3 points × 0.0278 + 2 points × 0.0037 + 1 points × 0.015 = 4.7463
?????*/ public static BigDecimal avgProductScore(int babyMark, int sellerMark, int logisticsMark) {
????????Double value = babyMark * BABY_MAKE_UP + (sellerMark - 1) * SELLER_MAKE_UP
????????????????+ (logisticsMark - 2) * LOGISTICS_MAKE_UP + (2 * PLATFROM_CASHA) + (1 * PLATFROM_CASHB);
????????Final BigDecimal result = new BigDecimal(value);
????????If (result.doubleValue() == PLATFROM_BASIC) {// highest score return result.setScale(0, RoundingMode.HALF_UP);
????????}
????????Return result.setScale(1, RoundingMode.HALF_UP);
????}
????/**
?????* Gradient 0 Disappointment 1 Dissatisfied 2 General 3 Satisfied 4 Surprise Default 3 Satisfied
?????*
?????* @return */ public static int grads(double avgf) {
????????Return (avgf <= 1.5) ? 0
????????????????: (avgf > 1.5 && avgf <= 2.3) ? 1
????????????????????????: (avgf > 2.3 && avgf <= 3.1) ? 2
????????????????????????????????: (avgf > 3.1 && avgf <= 4.0) ? 3
????????????????????????????????????????: (avgf > 4.0 && avgf <= 5.0) ? 4 : 3;
????}
????Public static void main(String[] args) {
????????System.out.println(CommentUtils.avgProductScore(5, 3, 4).doubleValue());
????????System.out.println(CommentUtils.grads(4.5));
????}
}
?* Taobao product evaluation
?*
?* @project icomment
?* @fileName ProductScore.java
?* @Description
?* @author light-zhang
?* @date January 15, 2018, 4:44:40 PM
?* @version 1.0.0
?*/ public abstract class CommentUtils implements Serializable {
????Private static final long serialVersionUID = 8143504152635422263L;
????Private static final double BABY_MAKE_UP = 0.837;// Baby evaluation calculation ratio (0.837/th) private static final double SELLER_MAKE_UP = 0.113;// Seller attitude calculation ratio (0.113/th) private static final double LOGISTICS_MAKE_UP = 0.0278;// Logistics evaluation calculation ratio (0.0278/Million) private static final double PLATFROM_CASHA = 0.0037;// Platform impact points A (0.0037/Million) private static final double PLATFROM_CASHB = 0.0185; // Platform impact points B (0.0185/Million) private static Final double PLATFROM_BASIC = 4.7463;// highest score /**
?????* Evaluation score calculation formula Baby evaluation 0.837 (thousands ratio) 5 Seller attitude 0.113 (thousands ratio) 4 Logistics service 0.0278 (10,000 ratio) 3 Platform impact
?????* 0.0037 (parts ratio) 2 Platform impact 0.0185 (10,000 ratio) 1
?????*
?????* @param babyMark baby description
?????* @param sellerMark Business attitude
?????* @param logisticsMark Logistics Services
?????* @return 5 points × 0.837 + 4 points × 0.113 + 3 points × 0.0278 + 2 points × 0.0037 + 1 points × 0.015 = 4.7463
?????*/ public static BigDecimal avgProductScore(int babyMark, int sellerMark, int logisticsMark) {
????????Double value = babyMark * BABY_MAKE_UP + (sellerMark - 1) * SELLER_MAKE_UP
????????????????+ (logisticsMark - 2) * LOGISTICS_MAKE_UP + (2 * PLATFROM_CASHA) + (1 * PLATFROM_CASHB);
????????Final BigDecimal result = new BigDecimal(value);
????????If (result.doubleValue() == PLATFROM_BASIC) {// highest score return result.setScale(0, RoundingMode.HALF_UP);
????????}
????????Return result.setScale(1, RoundingMode.HALF_UP);
????}
????/**
?????* Gradient 0 Disappointment 1 Dissatisfied 2 General 3 Satisfied 4 Surprise Default 3 Satisfied
?????*
?????* @return */ public static int grads(double avgf) {
????????Return (avgf <= 1.5) ? 0
????????????????: (avgf > 1.5 && avgf <= 2.3) ? 1
????????????????????????: (avgf > 2.3 && avgf <= 3.1) ? 2
????????????????????????????????: (avgf > 3.1 && avgf <= 4.0) ? 3
????????????????????????????????????????: (avgf > 4.0 && avgf <= 5.0) ? 4 : 3;
????}
????Public static void main(String[] args) {
????????System.out.println(CommentUtils.avgProductScore(5, 3, 4).doubleValue());
????????System.out.println(CommentUtils.grads(4.5));
????}
}