From 104679b2b8172130968ad15084c8303b024cb991 Mon Sep 17 00:00:00 2001 From: luozukai Date: Wed, 21 Aug 2019 16:45:28 +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 --- .../service/impl/WxBillRentServiceImpl.java | 3 -- .../impl/WxRentContractServiceImpl.java | 48 ++++++++++++++----- 2 files changed, 35 insertions(+), 16 deletions(-) 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 c7185de36..8fd47de1c 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillRentServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillRentServiceImpl.java @@ -275,9 +275,6 @@ public class WxBillRentServiceImpl implements WxBillRentService { * @param record */ public Integer getPayRatio(WxBillRent record,WxRentContract wxRentContract,EnumMissTimeType timeType){ -// if(wxRentContract.getPayRatio() != null && wxRentContract.getPayRatio().intValue() > 0){ -// return wxRentContract.getPayRatio(); -// } wxRentContract.setPayRatio(0); BigDecimal revenue = new BigDecimal(record.getRevenue()).divide(new BigDecimal(1000000)).setScale(4, RoundingMode.HALF_EVEN); List ratioList = JSONArray.parseArray(wxRentContract.getBusDiscountRatio(), String.class); 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 8fe9941c5..1a06c2a6c 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java @@ -254,18 +254,16 @@ public class WxRentContractServiceImpl implements WxRentContractService { * ["1000-1200:10",">3000:20"] * @param record */ - public void getPayRatio(WxRentContract record){ -// if(record.getPayRatio() != null && record.getPayRatio().intValue() >0){ -// return; -// } + public BigDecimal getPayRatio(WxRentContract record){ record.setPayRatio(0); if(StringUtils.isBlank(record.getBusDiscountRatio())){ - return; + return null; } BigDecimal revenue = new BigDecimal(record.getRevenue()).divide(new BigDecimal(1000000)).setScale(4, RoundingMode.HALF_EVEN); List ratioList = JSONArray.parseArray(record.getBusDiscountRatio(), String.class); - for (String e:ratioList) { + for (int i = 0; i < ratioList.size(); i++) { + String e = ratioList.get(i); String[] array = e.split(":"); Integer ratio = Integer.parseInt(array[1]); @@ -283,10 +281,22 @@ public class WxRentContractServiceImpl implements WxRentContractService { BigDecimal end = new BigDecimal(revenueArray[1]); if (revenue.compareTo(end) >= 0){ record.setPayRatio(ratio); - break; + + //计算超出部分 + BigDecimal payRatio = new BigDecimal(record.getPayRatio() == null ? 0 : record.getPayRatio()).divide(new BigDecimal(10000)); + BigDecimal balance = new BigDecimal(record.getRevenue()).subtract(end.multiply(new BigDecimal(1000000))); + BigDecimal price = balance.multiply(payRatio).setScale(2, RoundingMode.HALF_EVEN); + + array = ratioList.get(i-1).split(":"); + Integer frontatio = Integer.parseInt(array[1]); + BigDecimal frontRatio = new BigDecimal(frontatio).divide(new BigDecimal(10000)); + BigDecimal frontPrice = end.multiply(new BigDecimal(1000000).multiply(frontRatio).setScale(2, RoundingMode.HALF_EVEN)); + + return price.add(frontPrice); } } } + return null; } @Transactional(rollbackFor = {Exception.class}) @@ -312,13 +322,19 @@ public class WxRentContractServiceImpl implements WxRentContractService { } if (record.getType().equals(EnumRentContractType.RENT_BY_JOINT.getCode())) { - getPayRatio(record); + BigDecimal balance = getPayRatio(record); //有超出部分 BigDecimal hundred = new BigDecimal(100); BigDecimal revenue = new BigDecimal(record.getRevenue() == null ? 0 : record.getRevenue()).divide(hundred); BigDecimal payRatio = new BigDecimal(record.getPayRatio() == null ? 0 : record.getPayRatio()).divide(new BigDecimal(10000)); - BigDecimal price = revenue.multiply(payRatio).setScale(2, RoundingMode.HALF_EVEN); - record.setPrice(price.multiply(hundred).longValue()); + BigDecimal price; + if(balance != null){ + //计算超出部分 + record.setPrice(balance.longValue()); + }else{ + price = revenue.multiply(payRatio).setScale(2, RoundingMode.HALF_EVEN); + record.setPrice(price.multiply(hundred).longValue()); + } } else { if (StringUtils.isNotEmpty(record.getPriceStr())) { record.setPrice(new BigDecimal(record.getPriceStr()).multiply(new BigDecimal(100)).longValue()); @@ -542,12 +558,18 @@ public class WxRentContractServiceImpl implements WxRentContractService { if(from != 1){ if (record.getType().equals(EnumRentContractType.RENT_BY_JOINT.getCode())) { - getPayRatio(record); + BigDecimal balance = getPayRatio(record); BigDecimal hundred = new BigDecimal(100); BigDecimal revenue = new BigDecimal(record.getRevenue() == null ? 0 : record.getRevenue()).divide(hundred); BigDecimal payRatio = new BigDecimal(record.getPayRatio() == null ? 0 : record.getPayRatio()).divide(new BigDecimal(10000)); - BigDecimal price = revenue.multiply(payRatio).setScale(2, RoundingMode.HALF_EVEN); - record.setPrice(price.multiply(hundred).longValue()); + + BigDecimal price; + if(balance != null){ + record.setPrice(balance.longValue()); + }else { + price = revenue.multiply(payRatio).setScale(2, RoundingMode.HALF_EVEN); + record.setPrice(price.multiply(hundred).longValue()); + } } else { if (StringUtils.isNotEmpty(record.getPriceStr())) { record.setPrice(new BigDecimal(record.getPriceStr()).multiply(new BigDecimal(100)).longValue());