From a084f6ccf2825f8051b6b7b3320f1cc99d76e5bf Mon Sep 17 00:00:00 2001 From: winter Date: Wed, 28 Aug 2024 11:17:26 +0800 Subject: [PATCH] fix --- .../enums/EnumRentContractAdjustRatioWay.java | 3 +- .../service/helper/WxEnergyHelper.java | 7 +++- .../service/helper/WxRentContractHelper.java | 39 +++++++++++++++---- 3 files changed, 39 insertions(+), 10 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumRentContractAdjustRatioWay.java b/mallinkService/src/main/java/com/iformall/enums/EnumRentContractAdjustRatioWay.java index 03eee0190..21019dde2 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumRentContractAdjustRatioWay.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumRentContractAdjustRatioWay.java @@ -10,7 +10,8 @@ public enum EnumRentContractAdjustRatioWay { RATIO(1, "按比例"), MONEY(2, "按金额"), CUSTOM(3, "固定金额"), - FIX_RATIO(4, "固定比率"); + FIX_RATIO(4, "固定比率"), + FIX_UNIT_PRICE(5, "固定单价"); public static EnumRentContractAdjustRatioWay getEnum(Integer code) { for (EnumRentContractAdjustRatioWay value : values()) { diff --git a/mallinkService/src/main/java/com/iformall/service/helper/WxEnergyHelper.java b/mallinkService/src/main/java/com/iformall/service/helper/WxEnergyHelper.java index cc2643518..1b39eb641 100644 --- a/mallinkService/src/main/java/com/iformall/service/helper/WxEnergyHelper.java +++ b/mallinkService/src/main/java/com/iformall/service/helper/WxEnergyHelper.java @@ -87,10 +87,11 @@ public class WxEnergyHelper { if (StringUtils.isBlank(formula)) { return null; } - formula = formula.replaceAll("\\{.*?\\}", ""); List buildingAreaList = PlaceholderExtractorWithPrefixAndSuffix.extractPlaceholders(formula, "#buildingArea_", "#"); List floorAreaList = PlaceholderExtractorWithPrefixAndSuffix.extractPlaceholders(formula, "#floorArea_", "#"); List meterList = PlaceholderExtractorWithPrefixAndSuffix.extractPlaceholders(formula, "#meter_", "#"); + + formula = formula.replaceAll("\\{.*?\\}", ""); if (null != buildingAreaMap && null != buildingAreaList && buildingAreaList.size() > 0 ) { for (int i = 0 ; i < buildingAreaList.size(); i ++) { String buildArea = buildingAreaList.get(i); @@ -140,10 +141,12 @@ public class WxEnergyHelper { return ; } List buildingAreaList = PlaceholderExtractorWithPrefixAndSuffix.extractPlaceholders(formula, "#", "#"); + formula = formula.replaceAll("\\{.*?\\}", ""); if (null != buildingAreaList && buildingAreaList.size() > 0 ) { for (int i = 0 ; i < buildingAreaList.size(); i ++) { String floorArea = buildingAreaList.get(i); - formula = formula.replaceAll("\\{.*?\\}", "").replaceAll(floorArea.substring(1,floorArea.length()-1), "1"); + String relpaceFloorArea = floorArea.replaceAll("\\{.*?\\}", ""); + formula = formula.replaceAll(relpaceFloorArea, "1"); } } FormulaParser.evaluate(formula); diff --git a/mallinkService/src/main/java/com/iformall/service/helper/WxRentContractHelper.java b/mallinkService/src/main/java/com/iformall/service/helper/WxRentContractHelper.java index 92e35c41f..c03f3f25a 100644 --- a/mallinkService/src/main/java/com/iformall/service/helper/WxRentContractHelper.java +++ b/mallinkService/src/main/java/com/iformall/service/helper/WxRentContractHelper.java @@ -80,7 +80,7 @@ public class WxRentContractHelper { priceArr[i] = new BigDecimal(priceStr).multiply(new BigDecimal(rentArea)).setScale(Constant.default_long_decimal_size, RoundingMode.HALF_UP).toPlainString(); } - List priceList = computeRatioByShop(Constant.default_long_decimal_size,rentInfoArray,wxRentContract.getBussinessManagementFeeRatioWay(),priceArr,feeRatioField); + List priceList = computeRatioByShop(Constant.default_long_decimal_size,rentInfoArray,wxRentContract.getBussinessManagementFeeRatioWay(),priceArr,feeRatioField,wxRentContract.getRentArea()); if (null != priceList) { return calcuteRatioByPart(priceList, feeRatioField); }else { @@ -95,7 +95,7 @@ public class WxRentContractHelper { rentArea = "0"; } String ratioFirstYearPrice = new BigDecimal(fee).multiply(new BigDecimal(rentArea)).setScale(Constant.default_long_decimal_size, RoundingMode.HALF_UP).toPlainString(); - return calcuteRatioByJoin(Constant.default_long_decimal_size,ratioWay, ratio, ratioFirstYearPrice); + return calcuteRatioByJoin(Constant.default_long_decimal_size,ratioWay, ratio, ratioFirstYearPrice,wxRentContract.getRentArea()); } } return null; @@ -125,6 +125,10 @@ public class WxRentContractHelper { for (int i = 1; i < size; i++) { priceArr[i] = new BigDecimal(integers.get(i)).divide(new BigDecimal(100)).setScale(Constant.default_long_decimal_size, RoundingMode.HALF_UP).toPlainString(); } + }else if (wxPropertyContract.getAdjustRatioWay().equals(EnumRentContractAdjustRatioWay.FIX_UNIT_PRICE.getCode())){ + for (int i = 1; i < size; i++) { + priceArr[i] = new BigDecimal(integers.get(i)).multiply(new BigDecimal(wxPropertyContract.getRentArea())).divide(new BigDecimal(100)).setScale(Constant.default_long_decimal_size, RoundingMode.HALF_UP).toPlainString(); + } }else { for (int i = 1; i < size; i++) { priceArr[i] = wxPropertyContract.getPrice(); @@ -175,7 +179,7 @@ public class WxRentContractHelper { } priceArr[i] = priceStr; } - return computeRatioByShop(Constant.default_long_decimal_size,rentInfoArray,wxRentContract.getAdjustRatioWay(),priceArr,"adjustRatio"); + return computeRatioByShop(Constant.default_long_decimal_size,rentInfoArray,wxRentContract.getAdjustRatioWay(),priceArr,"adjustRatio",wxRentContract.getRentArea()); } //计算每年租金基数值(合铺录入),具体计算在合同创建时,会根据合同的PriceUnit来根据此基数来计算 @@ -259,6 +263,16 @@ public class WxRentContractHelper { } } + }else if (adjustRatioWay.equals(EnumRentContractAdjustRatioWay.FIX_UNIT_PRICE.getCode())){ + for (int i = 1; i < size; i++) { + String _update = ""; + if (wxRentContract.getType().equals(EnumRentContractType.RENT_BY_JOINT.getCode())) { + _update = new BigDecimal(revenueYears.get(i)).multiply(new BigDecimal(wxRentContract.getRentArea())).toPlainString(); + }else { + _update = new BigDecimal(integers.get(i)).multiply(new BigDecimal(wxRentContract.getRentArea())).toPlainString(); + } + priceArrs[i] = new BigDecimal(_update).setScale(Constant.default_long_decimal_size, RoundingMode.HALF_UP).toPlainString(); + } } if (isCalcuted) { //租金和联营取高 @@ -321,13 +335,17 @@ public class WxRentContractHelper { } revenuePriceArrs[i] = _p.toPlainString(); } + }else if (wxRentContract.getRevenueRatioWay().equals(EnumRentContractAdjustRatioWay.FIX_UNIT_PRICE.getCode())){ + for (int i = 1; i < size; i++) { + revenuePriceArrs[i] = new BigDecimal(revenueYears.get(i)).multiply(new BigDecimal(wxRentContract.getRevenue())).toPlainString(); + } } } return revenuePriceArrs; } //合铺计算某项计费 - private static String[] calcuteRatioByJoin(Integer decimalSize,Integer ratioWay,String ratio,String ratioFirstYearPrice) { + private static String[] calcuteRatioByJoin(Integer decimalSize,Integer ratioWay,String ratio,String ratioFirstYearPrice,String rentArea) { List integers = JSONArray.parseArray(ratio, Integer.class); integers.add(0, 0); int size = integers.size(); @@ -355,6 +373,10 @@ public class WxRentContractHelper { BigDecimal _p = priceD.multiply(new BigDecimal(integers.get(i))).divide(new BigDecimal(100)); priceArrs[i] = _p.setScale(decimalSize, RoundingMode.HALF_UP).toPlainString(); } + }else if (ratioWay.equals(EnumRentContractAdjustRatioWay.FIX_RATIO.getCode())){ + for (int i = 1; i < size; i++) { + priceArrs[i] = new BigDecimal(integers.get(i)).multiply(new BigDecimal(rentArea)).setScale(decimalSize, RoundingMode.HALF_UP).toPlainString(); + } } return priceArrs; } @@ -376,20 +398,20 @@ public class WxRentContractHelper { } //计算某项金额,每年-每个店铺金额 - public static List computeRatioByShop(Integer decimalSize,JSONArray rentInfoArray, Integer ratioWayType,String[] firstYearPrces,String ratioKey) { + public static List computeRatioByShop(Integer decimalSize,JSONArray rentInfoArray, Integer ratioWayType,String[] firstYearPrces,String ratioKey,String rentArea) { List priceList = new ArrayList<>(); priceList.add(firstYearPrces); //每个店铺每月租金 //大于一年 JSONObject rentInfoObject = rentInfoArray.getJSONObject(0); JSONArray adjustRatio = rentInfoObject.getJSONArray(ratioKey);//[100,200] if (null != adjustRatio) { - return computeRatioFromRentInfo(decimalSize,priceList, rentInfoArray, ratioWayType, adjustRatio.size(), ratioKey); + return computeRatioFromRentInfo(decimalSize,priceList, rentInfoArray, ratioWayType, adjustRatio.size(), ratioKey,rentArea); } return null; } //计算年调整后的某项计费 - private static List computeRatioFromRentInfo(Integer decimalSize,List priceList,JSONArray rentInfoArray, Integer ratioWayType,int ratioYears,String ratioKey ) { + private static List computeRatioFromRentInfo(Integer decimalSize,List priceList,JSONArray rentInfoArray, Integer ratioWayType,int ratioYears,String ratioKey,String rentArea ) { //循环多年的调整比例,如3年。[10,20,30] for (int i = 0; i < ratioYears; i++) { String[] priceArrs = new String[rentInfoArray.size()]; @@ -410,6 +432,9 @@ public class WxRentContractHelper { }else if (ratioWayType.equals(EnumRentContractAdjustRatioWay.FIX_RATIO.getCode())) { BigDecimal price = new BigDecimal(priceList.get(i)[j]).multiply(new BigDecimal(adjustRatio.getString(i)).divide(new BigDecimal(100))); priceArrs[j] = price.setScale(decimalSize, RoundingMode.HALF_UP).toPlainString(); + }else if (ratioWayType.equals(EnumRentContractAdjustRatioWay.FIX_UNIT_PRICE.getCode())) { + BigDecimal price = new BigDecimal(adjustRatio.getString(i)).multiply(new BigDecimal(100)); + priceArrs[j] = price.multiply(new BigDecimal(rentArea)).setScale(decimalSize, RoundingMode.HALF_UP).toPlainString(); } } priceList.add(priceArrs);