From ce2b0212e65f8fe0b9a9c8e0c9d73498b2423421 Mon Sep 17 00:00:00 2001 From: luozukai Date: Thu, 22 Aug 2019 12:30:30 +0800 Subject: [PATCH] =?UTF-8?q?[=E5=90=88=E5=90=8C][=E4=BF=AE=E6=94=B9][?= =?UTF-8?q?=E5=BC=80=E5=8F=91=E8=B4=A6=E5=8D=95=E7=BB=93=E7=AE=97]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/iformall/enums/EnumGetRatioFrom.java | 32 +++++++++++++ .../com/iformall/enums/EnumMissTimeType.java | 10 ++--- .../service/impl/WxBillRentServiceImpl.java | 10 +++-- .../impl/WxRentContractServiceImpl.java | 45 +++++++++++++------ 4 files changed, 74 insertions(+), 23 deletions(-) create mode 100644 mallinkService/src/main/java/com/iformall/enums/EnumGetRatioFrom.java diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumGetRatioFrom.java b/mallinkService/src/main/java/com/iformall/enums/EnumGetRatioFrom.java new file mode 100644 index 000000000..26cd88222 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumGetRatioFrom.java @@ -0,0 +1,32 @@ +package com.iformall.enums; + +public enum EnumGetRatioFrom { + RENT(1, "合同"), + BILL(2, "账单录入营业额"), + ; + + public static EnumGetRatioFrom getEnum(Integer code) { + for (EnumGetRatioFrom value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumGetRatioFrom(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumMissTimeType.java b/mallinkService/src/main/java/com/iformall/enums/EnumMissTimeType.java index 6ef644ee3..3f10dd93c 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumMissTimeType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumMissTimeType.java @@ -1,13 +1,11 @@ package com.iformall.enums; -/** - * Created by Stormeye on 2018/08/09. - */ public enum EnumMissTimeType { - YEAR(1, "残年"), - MONTH(2, "残月"), - OTHER(3, "其他"), + YEAR(1, "年"), + MONTH(2, "月"), + PERIOD(3, "周期"), + OTHER(4, "其他"), ; public static EnumMissTimeType getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBillRentServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBillRentServiceImpl.java index b31899f0b..a83629168 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillRentServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillRentServiceImpl.java @@ -289,17 +289,19 @@ public class WxBillRentServiceImpl implements WxBillRentService { if(EnumBusRatioTime.YEAR.getCode().equals(wxRentContract.getBusDiscountTime())){ if(startInt == endInt && months == 12){ //刚好1年 - ratio = WxRentContractServiceImpl.getPayRatio(wxBillRent.getRevenue(),wxRentContract.getBusDiscountRatio(),EnumMissTimeType.OTHER.getCode(),dayCount).getRatio(); + ratio = WxRentContractServiceImpl.getPayRatio(EnumGetRatioFrom.BILL.getCode(),wxBillRent.getRevenue(),wxRentContract.getBusDiscountRatio(),EnumMissTimeType.OTHER.getCode(),dayCount,0).getRatio(); }else{ - ratio = WxRentContractServiceImpl.getPayRatio(wxBillRent.getRevenue(),wxRentContract.getBusDiscountRatio(),EnumMissTimeType.YEAR.getCode(),dayCount).getRatio(); + ratio = WxRentContractServiceImpl.getPayRatio(EnumGetRatioFrom.BILL.getCode(),wxBillRent.getRevenue(),wxRentContract.getBusDiscountRatio(),EnumMissTimeType.YEAR.getCode(),dayCount,0).getRatio(); } }else if(EnumBusRatioTime.MONTH.getCode().equals(wxRentContract.getBusDiscountTime())){ if(startInt == endInt && months == 1){ //刚好1个月 - ratio = WxRentContractServiceImpl.getPayRatio(wxBillRent.getRevenue(),wxRentContract.getBusDiscountRatio(),EnumMissTimeType.OTHER.getCode(),dayCount).getRatio(); + ratio = WxRentContractServiceImpl.getPayRatio(EnumGetRatioFrom.BILL.getCode(),wxBillRent.getRevenue(),wxRentContract.getBusDiscountRatio(),EnumMissTimeType.OTHER.getCode(),dayCount,0).getRatio(); }else{ - ratio = WxRentContractServiceImpl.getPayRatio(wxBillRent.getRevenue(),wxRentContract.getBusDiscountRatio(),EnumMissTimeType.MONTH.getCode(),dayCount).getRatio(); + ratio = WxRentContractServiceImpl.getPayRatio(EnumGetRatioFrom.BILL.getCode(),wxBillRent.getRevenue(),wxRentContract.getBusDiscountRatio(),EnumMissTimeType.MONTH.getCode(),dayCount,0).getRatio(); } + }else if(EnumBusRatioTime.PERIOD.getCode().equals(wxRentContract.getBusDiscountTime())){ + ratio = WxRentContractServiceImpl.getPayRatio(EnumGetRatioFrom.BILL.getCode(),wxBillRent.getRevenue(),wxRentContract.getBusDiscountRatio(),EnumMissTimeType.PERIOD.getCode(),dayCount,wxRentContract.getReceivePeriod()).getRatio(); } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java index 17db2e675..23488f2c0 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java @@ -253,7 +253,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { * 获取设置的跳点率 * ["1000-1200:10",">3000:20"] */ - public static RatioVo getPayRatio(Long revenueLong,String busDiscountRatio,int timeType,long dayCount){ + public static RatioVo getPayRatio(int from,Long revenueLong,String busDiscountRatio,int timeType,long dayCount,int period){ RatioVo ratioVo = new RatioVo(); BigDecimal revenue = new BigDecimal(revenueLong).divide(new BigDecimal(1000000)).setScale(4, RoundingMode.HALF_EVEN); List ratioList = JSONArray.parseArray(busDiscountRatio, String.class); @@ -270,13 +270,22 @@ public class WxRentContractServiceImpl implements WxRentContractService { //残年 (小金额 / 365 * 账单周期天数 )--(大金额 / 365 * 账单周期天数) if(EnumMissTimeType.YEAR.getCode().equals(timeType)){ - start = new BigDecimal(revenueArray[0]).divide(new BigDecimal(365),10,BigDecimal.ROUND_HALF_DOWN).multiply(new BigDecimal(dayCount)); - end = new BigDecimal(revenueArray[1]).divide(new BigDecimal(365),10,BigDecimal.ROUND_HALF_DOWN).multiply(new BigDecimal(dayCount)); - //revenue = revenue.divide(new BigDecimal(365)); + if(EnumGetRatioFrom.BILL.getCode().equals(from)) { + start = new BigDecimal(revenueArray[0]).divide(new BigDecimal(365), 10, BigDecimal.ROUND_HALF_DOWN).multiply(new BigDecimal(dayCount)); + end = new BigDecimal(revenueArray[1]).divide(new BigDecimal(365), 10, BigDecimal.ROUND_HALF_DOWN).multiply(new BigDecimal(dayCount)); + } + if(EnumGetRatioFrom.RENT.getCode().equals(from)) { + revenue = revenue.divide(new BigDecimal(12)); + } }else if(EnumMissTimeType.MONTH.getCode().equals(timeType)){ - start = new BigDecimal(revenueArray[0]).divide(new BigDecimal(30),10,BigDecimal.ROUND_HALF_DOWN).multiply(new BigDecimal(dayCount)); - end = new BigDecimal(revenueArray[1]).divide(new BigDecimal(30),10,BigDecimal.ROUND_HALF_DOWN).multiply(new BigDecimal(dayCount)); - //revenue = revenue.divide(new BigDecimal(30)); + if(EnumGetRatioFrom.BILL.getCode().equals(from)) { + start = new BigDecimal(revenueArray[0]).divide(new BigDecimal(30), 10, BigDecimal.ROUND_HALF_DOWN).multiply(new BigDecimal(dayCount)); + end = new BigDecimal(revenueArray[1]).divide(new BigDecimal(30), 10, BigDecimal.ROUND_HALF_DOWN).multiply(new BigDecimal(dayCount)); + } + }else if(EnumMissTimeType.PERIOD.getCode().equals(timeType)){ + if(EnumGetRatioFrom.RENT.getCode().equals(from)) { + revenue = revenue.divide(new BigDecimal(period)); + } } if (revenue.compareTo(start) >= 0 && revenue.compareTo(end)<= 0){ @@ -289,12 +298,22 @@ public class WxRentContractServiceImpl implements WxRentContractService { //残年 (小金额 / 365 * 账单周期天数 )--(大金额 / 365 * 账单周期天数) if(EnumMissTimeType.YEAR.getCode().equals(timeType)){ - end = new BigDecimal(revenueArray[1]).divide(new BigDecimal(365),10,BigDecimal.ROUND_HALF_DOWN).multiply(new BigDecimal(dayCount)); - //revenue = revenue.divide(new BigDecimal(365)); + if(EnumGetRatioFrom.BILL.getCode().equals(from)) { + end = new BigDecimal(revenueArray[1]).divide(new BigDecimal(365), 10, BigDecimal.ROUND_HALF_DOWN).multiply(new BigDecimal(dayCount)); + } + if(EnumGetRatioFrom.RENT.getCode().equals(from)) { + revenue = revenue.divide(new BigDecimal(12)); + } }else if(EnumMissTimeType.MONTH.getCode().equals(timeType)){ - end = new BigDecimal(revenueArray[1]).divide(new BigDecimal(30),10,BigDecimal.ROUND_HALF_DOWN).multiply(new BigDecimal(dayCount)); - //revenue = revenue.divide(new BigDecimal(30)); + if(EnumGetRatioFrom.BILL.getCode().equals(from)) { + end = new BigDecimal(revenueArray[1]).divide(new BigDecimal(30), 10, BigDecimal.ROUND_HALF_DOWN).multiply(new BigDecimal(dayCount)); + } + }else if(EnumMissTimeType.PERIOD.getCode().equals(timeType)){ + if(EnumGetRatioFrom.RENT.getCode().equals(from)) { + revenue = revenue.divide(new BigDecimal(period)); + } } + if (revenue.compareTo(end) >= 0){ ratioVo.setRatio(ratio); @@ -343,7 +362,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { record.setPrice(0l); }else{ int dayCount = record.getReceivePeriod() * 30; - RatioVo ratioVo = getPayRatio(record.getRevenue(),record.getBusDiscountRatio(),record.getBusDiscountTime(),dayCount); + RatioVo ratioVo = getPayRatio(EnumGetRatioFrom.RENT.getCode(),record.getRevenue(),record.getBusDiscountRatio(),record.getBusDiscountTime(),dayCount,record.getReceivePeriod()); record.setPayRatio(ratioVo.getRatio()); BigDecimal hundred = new BigDecimal(100); BigDecimal revenue = new BigDecimal(record.getRevenue() == null ? 0 : record.getRevenue()).divide(hundred); @@ -584,7 +603,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { if(!EnumFromType.SWITCH.getCode().equals(from)){ if (record.getType().equals(EnumRentContractType.RENT_BY_JOINT.getCode())) { int dayCount = record.getReceivePeriod() * 30; - RatioVo ratioVo = getPayRatio(record.getRevenue(),record.getBusDiscountRatio(),record.getBusDiscountTime(),dayCount); + RatioVo ratioVo = getPayRatio(EnumGetRatioFrom.RENT.getCode(),record.getRevenue(),record.getBusDiscountRatio(),record.getBusDiscountTime(),dayCount,wxRentContract.getReceivePeriod()); record.setPayRatio(ratioVo.getRatio()); BigDecimal hundred = new BigDecimal(100); BigDecimal revenue = new BigDecimal(record.getRevenue() == null ? 0 : record.getRevenue()).divide(hundred);