Переглянути джерело

平台设置最低价格提醒修正版本

李天标 6 роки тому
батько
коміт
eb1e9f1066

+ 76 - 7
app-api/src/main/java/com/hboxs/control/api/equipment/IndexController.java

@@ -19,6 +19,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -172,6 +173,8 @@ public class IndexController extends BaseController {
     public JsonMessage updateProduct(@RequestBody List<ProductVo> productVos) {
         Double f=0.00;
         int num=0;
+        int n=0;
+        List<Double> price = new ArrayList<Double>();
         for (ProductVo product : productVos) {
             String clientId = product.getClientId();
             Equipment equipment = equipmentService.findByClientId(clientId);
@@ -188,29 +191,95 @@ public class IndexController extends BaseController {
             BigDecimal adminProportion = proportion.getAdminProportion();
             Double pricePro = adminProportion.doubleValue()/100;
             //平台最低收入
-            Double minProportion = 0.005;
+            Double minProportion = 0.01;
             //获取重新设定的价格
             Double rmbPrice = product.getRmbPrice().doubleValue();
+
+            //省级分销比例
+            BigDecimal agencyProportion = proportion.getAgencyProportion();
+            Double provinceProportion = agencyProportion.doubleValue()/100;
+            //市级比例
+            BigDecimal merchantProportion = proportion.getMerchantProportion();
+            Double cityProportion = merchantProportion.doubleValue()/100;
+            //终端比例
+            BigDecimal personageProportion = proportion.getPersonageProportion();
+            Double personProportion = personageProportion.doubleValue()/100;
+
+            //本次省级分得的价钱
+            Double provincePrice = rmbPrice*provinceProportion;
+            if(provincePrice>0){
+                provincePrice= new BigDecimal(provincePrice).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+            }
+            //本次市级分得的价钱
+            Double cityPrice = rmbPrice*cityProportion;
+            if(cityPrice>0){
+                cityPrice= new BigDecimal(cityPrice).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+            }
+            //本次终端分得的价钱
+            Double personPrice = rmbPrice*personProportion;
+            if(personPrice>0){
+                personPrice= new BigDecimal(personPrice).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+            }
             //价格和平台分销比例要大于0
             if(pricePro>0&&rmbPrice>0){
                 //重新设定价格后平台收入和平台最低收入比较
                 if(rmbPrice*pricePro<minProportion){
                     num++;
-                    //保留3位小数点
+                    //保留4位小数点
                     BigDecimal b = new BigDecimal(minProportion/pricePro);
-                    f = b.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
+                    Double d = b.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
+                    Double testPrice =  d-(tran2(d*provinceProportion)+tran2(d*cityProportion)+tran2(d*personProportion));
+                    if(tran(testPrice)<0.01){
+                        f=d;
+                    }else {
+                        for(int i=0;i<=100;i++){
+                            d+=0.1;
+                            Double pricecd =  d-(tran(d*provinceProportion)+tran(d*cityProportion)+tran(d*personProportion));
+                            if(tran(pricecd)>=0.01){
+                                f=d;
+                                break;
+                            }
+                        }
+                    }
+                    continue;
+                }
+                Double testPrice = rmbPrice-(tran2(provincePrice)+tran2(cityPrice)+tran2(personPrice));
+                testPrice= new BigDecimal(testPrice).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
+                //判断本次价格设定是否合理
+                if(testPrice<0.01){
+                    n++;
+                    if(rmbPrice!=null){
+                        price.add(rmbPrice);
+                    }
                     continue;
                 }
             }
             productService.updateByClientID(id, product.getRmbPrice(), product.getCodePrice(), product.getProductName(), product.getSellStatus());
         }
-        if(f>0){
-            return JsonMessage.error("最低价格应为"+f+"元,或者设为0元。有"+num+"处价格设置不合理!!!");
+        if(num>0 || n>0){
+            String errorData=null;
+            if(num>0 && n==0){
+                errorData = "最低价格为"+f+"元,或者设为0元。有"+num+"处价低于"+f;
+            }
+            if(num==0 && n>0){
+                errorData = "价格"+price.toString()+"设置不通过,请尽量提高价格";
+            }
+            if(num>0&&n>0){
+                errorData ="最低价格为"+f+"元,或者设为0元。有"+num+"处价低于"+f+"。并有价格"+price.toString()+"设置不通过,请尽量提高价格";
+            }
+
+            return JsonMessage.error(errorData);
+        }else {
+            return JsonMessage.success("调价成功");
         }
-        return JsonMessage.success("调价成功");
 
     }
-
+    public Double tran(Double d){
+        return new BigDecimal(d).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
+    }
+    public Double tran2(Double d){
+        return new BigDecimal(d).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+    }
     /**
      * 密码修改
      *

+ 74 - 8
app-backend-web/src/main/java/com/hboxs/control/admin/ProductController.java

@@ -53,6 +53,8 @@ public class ProductController extends BaseController {
             String equipmentId = "";
             Double f=0.00;
             int num=0;
+            int n=0;
+            List<Double> price = new ArrayList<Double>();
             List<ProductVo> list = new ArrayList<>();
             for (Map<String,String> map:products) {
                 Product product = new Product();
@@ -72,17 +74,69 @@ public class ProductController extends BaseController {
                 BigDecimal adminProportion = proportion.getAdminProportion();
                 Double pricePro = adminProportion.doubleValue()/100;
                 //平台最低收入
-                Double minProportion = 0.005;
+                Double minProportion = 0.01;
                 //获取重新设定的价格
                 Double rmbPrice = new BigDecimal( map.get("rmbPrice")).doubleValue();
+
+                //省级分销比例
+                BigDecimal agencyProportion = proportion.getAgencyProportion();
+                Double provinceProportion = agencyProportion.doubleValue()/100;
+                //市级比例
+                BigDecimal merchantProportion = proportion.getMerchantProportion();
+                Double cityProportion = merchantProportion.doubleValue()/100;
+                //终端比例
+                BigDecimal personageProportion = proportion.getPersonageProportion();
+                Double personProportion = personageProportion.doubleValue()/100;
+
+                //本次省级分得的价钱
+                Double provincePrice = rmbPrice*provinceProportion;
+                if(provincePrice>0){
+                    provincePrice= new BigDecimal(provincePrice).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
+                }
+                //本次市级分得的价钱
+                Double cityPrice = rmbPrice*cityProportion;
+                if(cityPrice>0){
+                    cityPrice= new BigDecimal(cityPrice).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
+                }
+                //本次终端分得的价钱
+                Double personPrice = rmbPrice*personProportion;
+                if(personPrice>0){
+                    personPrice= new BigDecimal(personPrice).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
+                }
+
                 //价格和平台分销比例要大于0
                 if(pricePro>0&&rmbPrice>0){
                     //重新设定价格后平台收入和平台最低收入比较
                     if(rmbPrice*pricePro<minProportion){
                         num++;
-                        //保留3位小数点
+                        //保留4位小数点
                         BigDecimal b = new BigDecimal(minProportion/pricePro);
-                        f = b.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
+                        Double d = b.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
+                        //最低价格f
+                        Double testPrice = d-(tran2(d*provinceProportion)+tran2(d*cityProportion)+tran2(d*personProportion));
+                        if(tran(testPrice)>=0.01){
+                            f=d;
+                        }else {
+                            for(int i=0;i<=100;i++){
+                                d+=0.1;
+                                Double pricecd = d-(tran2(d*provinceProportion)+tran2(d*cityProportion)+tran2(d*personProportion));
+                                if(tran(pricecd)>=0.01){
+                                    f=d;
+                                    break;
+                                }
+                            }
+                        }
+                        continue;
+                    }
+                    Double testPrice = rmbPrice-(tran2(provincePrice)+tran2(cityPrice)+tran2(personPrice));
+                    testPrice= new BigDecimal(testPrice).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
+                    //判断本次价格设定是否合理
+                    if(testPrice<0.01){
+                        n++;
+                        if(rmbPrice!=null){
+                            price.add(rmbPrice);
+                        }
+
                         continue;
                     }
                 }
@@ -95,10 +149,17 @@ public class ProductController extends BaseController {
             Collections.sort(list);
             System.out.println(list);
             PushUtils.push(equipmentService.find(Long.parseLong(equipmentId)).getGtClientId(), "更新棉花价格", "更新棉花价格", PushUtils.buildJson("products", JSON.toJSONString(list)).toString());
-            if(f>0){
-//                 JsonMessage.error("最低价格应为"+f+"元,或者设为0元。有"+num+"处价格设置不合理!!!");
-//                Message.error("最低价格应为"+f+"元,或者设为0元。有"+num+"处价格设置不合理!!!");
-                String errorData = "最低价格应大于"+f+"元,或者设为0元。有"+num+"处价格设置不合理!!!";
+            if(num>0 || n>0){
+                String errorData=null;
+                if(num>0 && n==0){
+                    errorData = "最低价格为"+f+"元,或者设为0元。有"+num+"处价低于"+f;
+                }
+                if(num==0 && n>0){
+                    errorData = "价格"+price.toString()+"设置不通过,请尽量提高价格";
+                }
+                if(num>0&&n>0){
+                    errorData ="最低价格为"+f+"元,或者设为0元。有"+num+"处价低于"+f+"。并有价格"+price.toString()+"设置不通过,请尽量提高价格";
+                }
                 ERROR_MESSAGE.setContent(errorData);
                 addFlashMessage(redirectAttributes, ERROR_MESSAGE);
                 return ERROR_MESSAGE;
@@ -110,5 +171,10 @@ public class ProductController extends BaseController {
 
         }
 
-
+        public Double tran(Double d){
+             return new BigDecimal(d).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
+         }
+        public Double tran2(Double d){
+            return new BigDecimal(d).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+        }
 }