Sfoglia il codice sorgente

fix:风控接口优化

Hu Jie 7 anni fa
parent
commit
403d84b682

+ 36 - 25
src/main/java/com/uas/platform/b2b/openapi/service/impl/TradingDataServiceImpl.java

@@ -5,9 +5,7 @@ import com.uas.platform.b2b.openapi.model.CustTrading;
 import com.uas.platform.b2b.openapi.model.RecentOfMonth;
 import com.uas.platform.b2b.openapi.model.RecentOfMonth;
 import com.uas.platform.b2b.openapi.model.RecentOfYear;
 import com.uas.platform.b2b.openapi.model.RecentOfYear;
 import com.uas.platform.b2b.openapi.service.TradingDataService;
 import com.uas.platform.b2b.openapi.service.TradingDataService;
-import com.uas.platform.b2b.openapi.support.ErpRate;
-import com.uas.platform.b2b.openapi.support.NumFormat;
-import com.uas.platform.b2b.openapi.support.TimeStauts;
+import com.uas.platform.b2b.openapi.support.*;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
@@ -15,6 +13,7 @@ import org.springframework.ui.ModelMap;
 import org.springframework.util.StringUtils;
 import org.springframework.util.StringUtils;
 
 
 import java.sql.Date;
 import java.sql.Date;
+import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 
 
@@ -46,7 +45,7 @@ public class TradingDataServiceImpl implements TradingDataService {
         Double apBillSum = getApBillSum(enUU);
         Double apBillSum = getApBillSum(enUU);
         // 获取历史退货率
         // 获取历史退货率
         Double orderSum = getOrderSum(enUU);
         Double orderSum = getOrderSum(enUU);
-        Double historyReturn = NumFormat.getPercent(orderSum == 0.0 ? 0.0 : returnSum / orderSum);
+        Double historyReturn = NumFormat.getPercent(NumDefaultUtil.DOUBLE.equals(orderSum) ? NumDefaultUtil.DOUBLE : returnSum / orderSum);
         map.put("timeSum", timeSum);
         map.put("timeSum", timeSum);
         map.put("acceptSum", acceptSum);
         map.put("acceptSum", acceptSum);
         map.put("returnSum", returnSum);
         map.put("returnSum", returnSum);
@@ -59,30 +58,50 @@ public class TradingDataServiceImpl implements TradingDataService {
 
 
     @Override
     @Override
     public ModelMap getCustTrading(Long enUU) {
     public ModelMap getCustTrading(Long enUU) {
+        long l = System.currentTimeMillis();
         ModelMap map = new ModelMap();
         ModelMap map = new ModelMap();
         List<CustTrading> datas = getCust(enUU);
         List<CustTrading> datas = getCust(enUU);
         Double sum = getAcceptSum(enUU, null) - getReturnSum(enUU, null);
         Double sum = getAcceptSum(enUU, null) - getReturnSum(enUU, null);
         Integer sumNum = getAcceptNum(enUU, null) - getReturnNum(enUU, null);
         Integer sumNum = getAcceptNum(enUU, null) - getReturnNum(enUU, null);
         if (CollectionUtils.isNotEmpty(datas)) {
         if (CollectionUtils.isNotEmpty(datas)) {
-            for (CustTrading custTrading : datas) {
+            System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", "100");
+            datas.parallelStream().forEach(custTrading -> {
                 Double acceptSum = getAcceptSum(enUU, custTrading.getCustUU());
                 Double acceptSum = getAcceptSum(enUU, custTrading.getCustUU());
                 Double returnSum = getReturnSum(enUU, custTrading.getCustUU());
                 Double returnSum = getReturnSum(enUU, custTrading.getCustUU());
                 custTrading.setRealAccept(NumFormat.getTwo(acceptSum - returnSum));
                 custTrading.setRealAccept(NumFormat.getTwo(acceptSum - returnSum));
-                if (StringUtils.isEmpty(acceptSum) || acceptSum == 0.0) {
-                    custTrading.setAcceptPercent(0.00);
+                if (StringUtils.isEmpty(acceptSum) || NumDefaultUtil.DOUBLE.equals(acceptSum)) {
+                    custTrading.setAcceptPercent(NumDefaultUtil.DOUBLE);
                 } else {
                 } else {
-                    custTrading.setAcceptPercent(NumFormat.getPercent(sum == 0.0 ? 0.0 : (acceptSum - returnSum) / sum));
+                    custTrading.setAcceptPercent(NumFormat.getPercent(NumDefaultUtil.DOUBLE.equals(sum) ? NumDefaultUtil.DOUBLE : (acceptSum - returnSum) / sum));
                 }
                 }
                 Integer acceptNum = getAcceptNum(enUU, custTrading.getCustUU());
                 Integer acceptNum = getAcceptNum(enUU, custTrading.getCustUU());
                 Integer realNum = acceptNum - getReturnNum(enUU, custTrading.getCustUU());
                 Integer realNum = acceptNum - getReturnNum(enUU, custTrading.getCustUU());
                 custTrading.setRealNum(realNum);
                 custTrading.setRealNum(realNum);
-                if (0 != acceptNum) {
-                    custTrading.setNumPercent(NumFormat.getPercent(sumNum == 0 ? 0 : (double) realNum / sumNum));
+                if (!NumDefaultUtil.INTEGER.equals(acceptNum)) {
+                    custTrading.setNumPercent(NumFormat.getPercent(NumDefaultUtil.INTEGER.equals(sumNum) ? NumDefaultUtil.INTEGER : (double) realNum / sumNum));
                 }
                 }
                 custTrading.setTimeSum(NumFormat.getOne(getTimeSum(enUU, custTrading.getCustUU())));
                 custTrading.setTimeSum(NumFormat.getOne(getTimeSum(enUU, custTrading.getCustUU())));
-            }
+            });
+//            for (CustTrading custTrading : datas) {
+//                Double acceptSum = getAcceptSum(enUU, custTrading.getCustUU());
+//                Double returnSum = getReturnSum(enUU, custTrading.getCustUU());
+//                custTrading.setRealAccept(NumFormat.getTwo(acceptSum - returnSum));
+//                if (StringUtils.isEmpty(acceptSum) || acceptSum == 0.0) {
+//                    custTrading.setAcceptPercent(0.00);
+//                } else {
+//                    custTrading.setAcceptPercent(NumFormat.getPercent(sum == 0.0 ? 0.0 : (acceptSum - returnSum) / sum));
+//                }
+//                Integer acceptNum = getAcceptNum(enUU, custTrading.getCustUU());
+//                Integer realNum = acceptNum - getReturnNum(enUU, custTrading.getCustUU());
+//                custTrading.setRealNum(realNum);
+//                if (0 != acceptNum) {
+//                    custTrading.setNumPercent(NumFormat.getPercent(sumNum == 0 ? 0 : (double) realNum / sumNum));
+//                }
+//                custTrading.setTimeSum(NumFormat.getOne(getTimeSum(enUU, custTrading.getCustUU())));
+//            }
         }
         }
         map.put("data", datas);
         map.put("data", datas);
+        System.out.println(System.currentTimeMillis() - l);
         return map;
         return map;
     }
     }
 
 
@@ -571,22 +590,14 @@ public class TradingDataServiceImpl implements TradingDataService {
      */
      */
     @Override
     @Override
     public Double getTimeSum(Long enUU, Long custUU) {
     public Double getTimeSum(Long enUU, Long custUU) {
-        StringBuffer last = new StringBuffer("SELECT ifnull((SELECT pu_date from purc$orders "
-                + "WHERE pu_venduu = " + enUU + " and pu_date is not null ");
+        StringBuffer sql = new StringBuffer("SELECT TIMESTAMPDIFF(MONTH,min(pu_date),max(pu_date)) from purc$orders WHERE pu_venduu = " + enUU);
         if (!StringUtils.isEmpty(custUU)) {
         if (!StringUtils.isEmpty(custUU)) {
-            last.append("and pu_enuu = " + custUU + "");
+            sql.append(" and pu_enuu = " + custUU);
         }
         }
-        last.append(" ORDER BY pu_date desc limit 1),now()) pu_date");
-        StringBuffer first = new StringBuffer("SELECT ifnull((SELECT pu_date from purc$orders "
-                + "WHERE pu_venduu = " + enUU + " and pu_date is not null ");
-        if (!StringUtils.isEmpty(custUU)) {
-            first.append("and pu_enuu = " + custUU + "");
+        Double result = commonDao.queryForObject(sql.toString(), Double.class);
+        if (StringUtils.isEmpty(result)) {
+            result = NumDefaultUtil.DOUBLE;
         }
         }
-        first.append(" ORDER BY pu_date asc limit 1),now()) pu_date");
-        Date lastTime = commonDao.queryForObject(last.toString(), Date.class);
-        Date firstTime = commonDao.queryForObject(first.toString(), Date.class);
-        StringBuffer result = new StringBuffer("SELECT TIMESTAMPDIFF(MONTH,'" + firstTime + "','" + lastTime + "')");
-        Double resultTime = commonDao.queryForObject(result.toString(), Double.class) / TimeStauts.TYEAR.value();
-        return NumFormat.getOne(resultTime);
+        return NumFormat.getOne(result / TimeStauts.TYEAR.value());
     }
     }
 }
 }

+ 19 - 0
src/main/java/com/uas/platform/b2b/openapi/support/NumDefaultUtil.java

@@ -0,0 +1,19 @@
+package com.uas.platform.b2b.openapi.support;
+
+/**
+ * 基本类型默认值
+ * @Author: huj
+ * @Date: Created in 11:38 2019/01/15.
+ */
+public class NumDefaultUtil {
+
+    public final static Integer INTEGER = 0;
+
+    public final static Double DOUBLE = 0.0;
+
+    public final static String ONE_DECIMAL_POINT = "#.0";
+
+    public final static String TWO_DECIMAL_POINT = "#.00";
+
+    public final static String TWO_DECIMAL_PERCENT = "##.00%";
+}

+ 22 - 5
src/main/java/com/uas/platform/b2b/openapi/support/NumFormat.java

@@ -7,6 +7,7 @@ import java.util.Calendar;
 import java.util.Date;
 import java.util.Date;
 
 
 /**
 /**
+ * 工具类,百分比、时间、小数点计算
  * @Author: huj
  * @Author: huj
  * @Date: Created in 16:55 2018/9/20.
  * @Date: Created in 16:55 2018/9/20.
  */
  */
@@ -20,27 +21,43 @@ public class NumFormat {
         }
         }
     }
     }
 
 
+
+    /**
+     * 获取一位小数
+     * @param result
+     * @return
+     */
     public static Double getOne(Double result) {
     public static Double getOne(Double result) {
-        DecimalFormat df = new DecimalFormat("#.0");
+        DecimalFormat df = new DecimalFormat(NumDefaultUtil.ONE_DECIMAL_POINT);
         if (StringUtils.isEmpty(result)) {
         if (StringUtils.isEmpty(result)) {
-            return 0.0;
+            return NumDefaultUtil.DOUBLE;
         } else {
         } else {
             return Double.parseDouble(df.format(result));
             return Double.parseDouble(df.format(result));
         }
         }
     }
     }
 
 
+    /**
+     * 取两位小数
+     * @param result
+     * @return
+     */
     public static Double getTwo(Double result) {
     public static Double getTwo(Double result) {
-        DecimalFormat df = new DecimalFormat("#.00");
+        DecimalFormat df = new DecimalFormat(NumDefaultUtil.TWO_DECIMAL_POINT);
         if (StringUtils.isEmpty(result)) {
         if (StringUtils.isEmpty(result)) {
-            return 0.00;
+            return NumDefaultUtil.DOUBLE;
         } else {
         } else {
             return Double.parseDouble(df.format(result));
             return Double.parseDouble(df.format(result));
         }
         }
     }
     }
 
 
+    /**
+     * 保留两位小数
+     * @param result
+     * @return
+     */
     public static Double getPercent(Double result) {
     public static Double getPercent(Double result) {
         //设置百分数精确度2即保留两位小数
         //设置百分数精确度2即保留两位小数
-        DecimalFormat dfPercent = new DecimalFormat("##.00%");
+        DecimalFormat dfPercent = new DecimalFormat(NumDefaultUtil.TWO_DECIMAL_PERCENT);
         String resultStr = dfPercent.format(result);
         String resultStr = dfPercent.format(result);
         String needStr = resultStr.substring(0, resultStr.length() - 1);
         String needStr = resultStr.substring(0, resultStr.length() - 1);
         return getTwo(Double.valueOf(needStr));
         return getTwo(Double.valueOf(needStr));

+ 30 - 0
src/main/java/com/uas/platform/b2b/openapi/support/TimeUtils.java

@@ -0,0 +1,30 @@
+package com.uas.platform.b2b.openapi.support;
+
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.time.temporal.ChronoUnit;
+import java.util.Date;
+
+/**
+ * 日期工具类
+ * @Author: huj
+ * @Date: Created in 10:28 2019/01/15.
+ */
+public class TimeUtils {
+
+    /**
+     * 计算时间差(月份)
+     */
+    public static Double calculateTime(LocalDate startLocalDate, LocalDate endLocalDate) {
+        long between = ChronoUnit.MONTHS.between(startLocalDate, endLocalDate);
+        return Double.longBitsToDouble(between);
+    }
+
+    public static LocalDate getLocalDate(Date date) {
+        Instant instant = date.toInstant();
+        ZoneId zoneId = ZoneId.systemDefault();
+        LocalDate localDate = instant.atZone(zoneId).toLocalDate();
+        return localDate;
+    }
+}