diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxRentContractController.java b/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxRentContractController.java index d526d29aa..33c43312b 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxRentContractController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxRentContractController.java @@ -207,7 +207,7 @@ public class WxRentContractController extends WxContractBaseController { MallUserInfo user = getUser(); wxRentContract.updateTenantInfo(user); wxRentContract.setAdjustPeriodHandle(); - wxRentContract.setRentPriceHandle(); + //wxRentContract.setRentPriceHandle(); Date oldDate = wxRentContract.getRentalStartDate(); if(wxRentContract.getRentStartType()!=null &&wxRentContract.getRentStartType().equals(EnumRentStartType.STARTTIME.getCode())){ wxRentContract.setRentalStartDate(wxRentContract.getStartDate()); @@ -230,7 +230,7 @@ public class WxRentContractController extends WxContractBaseController { MallUserInfo user = getUser(); wxRentContract.updateTenantInfo(user); wxRentContract.setAdjustPeriodHandle(); - wxRentContract.setRentPriceHandle(); + //wxRentContract.setRentPriceHandle(); Date oldDate = wxRentContract.getRentalStartDate(); if(wxRentContract.getRentStartType()!=null && wxRentContract.getRentStartType().equals(EnumRentStartType.STARTTIME.getCode())){ wxRentContract.setRentalStartDate(wxRentContract.getStartDate()); @@ -277,7 +277,7 @@ public class WxRentContractController extends WxContractBaseController { MallUserInfo user = getUser(); rentContract.updateTenantInfo(user); rentContract.setAdjustPeriodHandle(); - rentContract.setRentPriceHandle(); + //rentContract.setRentPriceHandle(); Date oldDate = rentContract.getRentalStartDate(); if(rentContract.getRentStartType()!=null && rentContract.getRentStartType().equals(EnumRentStartType.STARTTIME.getCode())){ rentContract.setRentalStartDate(rentContract.getStartDate()); diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxSettleMerchantController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxSettleMerchantController.java index eb5aa27f8..8f021e640 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxSettleMerchantController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxSettleMerchantController.java @@ -165,27 +165,27 @@ public class WxSettleMerchantController extends BaseController { if (null == rpage || null == rpage.getList() || rpage.getList().size() <= 0 ) { return new ResultData(Result.ERROR,"租金合同无对应账单"); } - Long all = 0L; + BigDecimal all = new BigDecimal(0); List blist = rpage.getList(); for (int i = 0 ; i < blist.size() ; i ++) { WxBillRent r = blist.get(i); - Long _np = 0L; + BigDecimal _np = new BigDecimal(0); if (null != r.getNeedPay()) { - _np = r.getNeedPay(); + _np = new BigDecimal(r.getNeedPay()); } - Long _bmf = 0L; + BigDecimal _bmf = new BigDecimal(0); if (null != r.getBussinessManageFeeNeedPay()) { - _bmf = r.getBussinessManageFeeNeedPay(); + _bmf = new BigDecimal(r.getBussinessManageFeeNeedPay()); } - Long _omf = 0L; + BigDecimal _omf = new BigDecimal(0); if (null != r.getOperatingManageFeeNeedPay()) { - _omf = r.getOperatingManageFeeNeedPay(); + _omf = new BigDecimal(r.getOperatingManageFeeNeedPay()); } - all = all + _np + _bmf + _omf; + all = all.add(_np).add(_bmf).add(_omf); } Map retMap = new HashMap(); retMap.put("rent", rent); - retMap.put("money", new BigDecimal(all).divide(new BigDecimal(100)).setScale(2,BigDecimal.ROUND_HALF_UP)); + retMap.put("money", all.toPlainString()); return new ResultData(retMap); } diff --git a/mallinkAdmin/src/main/resources/db/migration/V202405001.sql b/mallinkAdmin/src/main/resources/db/migration/V202405001.sql index 529ac0513..d8bed36b2 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V202405001.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V202405001.sql @@ -16,7 +16,7 @@ ALTER TABLE wx_bill_rent MODIFY COLUMN `revenue` VARCHAR(30); ALTER TABLE wx_bill_rent MODIFY COLUMN `late_pay_price` VARCHAR(30); ALTER TABLE wx_bill_rent MODIFY COLUMN `join_rent_price` VARCHAR(30); ALTER TABLE wx_bill_rent MODIFY COLUMN `service_charge_pay` VARCHAR(30); -ALTER TABLE wx_bill_rent MODIFY COLUMN `service_charge_pay` VARCHAR(30); +ALTER TABLE wx_bill_rent MODIFY COLUMN `contract_need_pay` VARCHAR(30); ALTER TABLE wx_bill_rent_deposit MODIFY COLUMN `receive_pay` VARCHAR(30); diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxBillRent.java b/mallinkService/src/main/java/com/iformall/domain/po/WxBillRent.java index 1997c84a0..2e87c2f7a 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxBillRent.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillRent.java @@ -96,11 +96,12 @@ public class WxBillRent extends TenantEntity { private Integer isDel; @io.swagger.annotations.ApiModelProperty(value="原合同应收金额",name="contractNeedPay") - private Long contractNeedPay; - @Excel(name = "原合同应收金额(元)", width = 20, orderNum = "6") - @TableField(exist = false) - private String contractNeedPayStr; + private String contractNeedPay; + + +// @TableField(exist = false) +// private String contractNeedPayStr; // public String getContractNeedPayStr() { // return new BigDecimal(contractNeedPay == null ? 0 : contractNeedPay).divide(new BigDecimal(100)).toPlainString(); diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxRentContract.java b/mallinkService/src/main/java/com/iformall/domain/po/WxRentContract.java index 91279f2be..99a0404e9 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxRentContract.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxRentContract.java @@ -351,8 +351,8 @@ public class WxRentContract extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value = "审批时带的物业合同编号,租金+物业时用", name = "propertyId") private Long propertyId; -// @io.swagger.annotations.ApiModelProperty(value = "租金信息", name = "rentInfo") -// private String rentInfo; + @io.swagger.annotations.ApiModelProperty(value = "租金信息", name = "rentInfo") + private String rentInfo; @io.swagger.annotations.ApiModelProperty(value = "上传文件名", name = "fileNames") private String fileNames; 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 eb6fa77bd..f866378f6 100644 --- a/mallinkService/src/main/java/com/iformall/service/helper/WxRentContractHelper.java +++ b/mallinkService/src/main/java/com/iformall/service/helper/WxRentContractHelper.java @@ -62,7 +62,7 @@ public class WxRentContractHelper { if (rentArea == null || rentArea.equalsIgnoreCase("NaN")) { rentArea = "0"; } - priceArr[i] = new BigDecimal(priceStr).multiply(new BigDecimal(rentArea)).toPlainString(); + priceArr[i] = new BigDecimal(priceStr).multiply(new BigDecimal(rentArea)).setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP).toPlainString(); } List priceList = computeRatioByShop(wxRentContract.getDecimalSize(),rentInfoArray,wxRentContract.getBussinessManagementFeeRatioWay(),priceArr,feeRatioField); @@ -79,7 +79,7 @@ public class WxRentContractHelper { if (rentArea == null || rentArea.equalsIgnoreCase("NaN")) { rentArea = "0"; } - String ratioFirstYearPrice = new BigDecimal(fee).multiply(new BigDecimal(rentArea)).toPlainString(); + String ratioFirstYearPrice = new BigDecimal(fee).multiply(new BigDecimal(rentArea)).setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP).toPlainString(); return calcuteRatioByJoin(wxRentContract.getDecimalSize(),ratioWay, ratio, ratioFirstYearPrice); } } @@ -145,28 +145,28 @@ public class WxRentContractHelper { for (int i = 1; i < size; i++) { BigDecimal divide = priceD.multiply(new BigDecimal(integers.get(i))).divide(new BigDecimal(10000)); priceD = priceD.add(divide); - priceArrs[i] = priceD.setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_EVEN).toPlainString(); + priceArrs[i] = priceD.setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP).toPlainString(); } } else if (wxRentContract.getAdjustRatioWay().equals(EnumRentContractAdjustRatioWay.MONEY.getCode())) { for (int i = 1; i < size; i++) { priceD = priceD.add(new BigDecimal(integers.get(i))); - priceArrs[i] = priceD.setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_EVEN).toPlainString(); + priceArrs[i] = priceD.setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP).toPlainString(); } } else if (wxRentContract.getAdjustRatioWay().equals(EnumRentContractAdjustRatioWay.CUSTOM.getCode())){ for (int i = 1; i < size; i++) { if (wxRentContract.getType().equals(EnumRentContractType.RENT_BY_JOINT.getCode())) { if (EnumMissTimeType.YEAR.getCode().equals(wxRentContract.getBusDiscountTime())) { priceArrs[i] = new BigDecimal(integers.get(i)).multiply(new BigDecimal(12)) - .setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_EVEN).toPlainString(); + .setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP).toPlainString(); continue; } if (EnumMissTimeType.PERIOD.getCode().equals(wxRentContract.getBusDiscountTime())) { priceArrs[i] = new BigDecimal(integers.get(i)).multiply(new BigDecimal(wxRentContract.getReceivePeriod())) - .setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_EVEN).toPlainString(); + .setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP).toPlainString(); continue; } } - priceArrs[i] = new BigDecimal(integers.get(i)).setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_EVEN).toPlainString(); + priceArrs[i] = new BigDecimal(integers.get(i)).setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP).toPlainString(); } }else if (wxRentContract.getAdjustRatioWay().equals(EnumRentContractAdjustRatioWay.FIX_RATIO.getCode())){ for (int i = 1; i < size; i++) { @@ -179,16 +179,16 @@ public class WxRentContractHelper { } if (wxRentContract.getType().equals(EnumRentContractType.RENT_BY_JOINT.getCode())) { if (EnumMissTimeType.YEAR.getCode().equals(wxRentContract.getBusDiscountTime())) { - priceArrs[i] = _p.multiply(new BigDecimal(12)).setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_EVEN).toPlainString(); + priceArrs[i] = _p.multiply(new BigDecimal(12)).setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP).toPlainString(); continue; } if (EnumMissTimeType.PERIOD.getCode().equals(wxRentContract.getBusDiscountTime())) { priceArrs[i] = _p.multiply(new BigDecimal(wxRentContract.getReceivePeriod())) - .setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_EVEN).toPlainString(); + .setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP).toPlainString(); continue; } } - priceArrs[i] = _p.setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_EVEN).toPlainString(); + priceArrs[i] = _p.setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP).toPlainString(); } } @@ -210,7 +210,7 @@ public class WxRentContractHelper { String[] revenuePriceArrs = new String[size]; if (wxRentContract.getType().equals(EnumRentContractType.RENT_BY_AREA_AND_JOINT.getCode())) { String _revenuePriceD = new BigDecimal(wxRentContract.getRevenue()).multiply(new BigDecimal(wxRentContract.getPayRatio())) - .divide(new BigDecimal(100)).setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_EVEN).toPlainString(); + .divide(new BigDecimal(100)).setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP).toPlainString(); revenuePriceArrs[0] = _revenuePriceD; BigDecimal revenuePriceD = new BigDecimal(_revenuePriceD); //联营扣点调整比率 @@ -230,31 +230,31 @@ public class WxRentContractHelper { BigDecimal _p = new BigDecimal(revenueYears.get(i)).multiply(new BigDecimal(revenueRationSets.get(i))).divide(new BigDecimal(10000)); revenuePriceD = revenuePriceD.add(_p); } - revenuePriceArrs[i] = revenuePriceD.setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_EVEN).toPlainString(); + revenuePriceArrs[i] = revenuePriceD.setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP).toPlainString(); } } else if (wxRentContract.getRevenueRatioWay().equals(EnumRentContractAdjustRatioWay.MONEY.getCode())) { for (int i = 1; i < size; i++) { if (revenueYears.size() == size && revenueRationSets.size() == size) { revenuePriceD = revenuePriceD.add(new BigDecimal(revenueRationSets.get(i))); } - revenuePriceArrs[i] = revenuePriceD.setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_EVEN).toPlainString(); + revenuePriceArrs[i] = revenuePriceD.setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP).toPlainString(); } } else if (wxRentContract.getRevenueRatioWay().equals(EnumRentContractAdjustRatioWay.CUSTOM.getCode())){ for (int i = 1; i < size; i++) { if (wxRentContract.getType().equals(EnumRentContractType.RENT_BY_JOINT.getCode())) { if (EnumMissTimeType.YEAR.getCode().equals(wxRentContract.getBusDiscountTime())) { revenuePriceArrs[i] = new BigDecimal(revenueRationSets.get(i)).multiply(new BigDecimal(12)) - .setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_EVEN).toPlainString(); + .setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP).toPlainString(); continue; } if (EnumMissTimeType.PERIOD.getCode().equals(wxRentContract.getBusDiscountTime())) { revenuePriceArrs[i] = new BigDecimal(revenueRationSets.get(i)).multiply(new BigDecimal(wxRentContract.getReceivePeriod())) - .setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_EVEN).toPlainString(); + .setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP).toPlainString(); continue; } } revenuePriceArrs[i] = new BigDecimal(revenueRationSets.get(i)) - .setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_EVEN).toPlainString(); + .setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP).toPlainString(); } }else if (wxRentContract.getRevenueRatioWay().equals(EnumRentContractAdjustRatioWay.FIX_RATIO.getCode())){ for (int i = 1; i < size; i++) { @@ -265,16 +265,16 @@ public class WxRentContractHelper { if (wxRentContract.getType().equals(EnumRentContractType.RENT_BY_JOINT.getCode())) { if (EnumMissTimeType.YEAR.getCode().equals(wxRentContract.getBusDiscountTime())) { revenuePriceArrs[i] = _p.multiply(new BigDecimal(12)) - .setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_EVEN).toPlainString(); + .setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP).toPlainString(); continue; } if (EnumMissTimeType.PERIOD.getCode().equals(wxRentContract.getBusDiscountTime())) { revenuePriceArrs[i] = _p.multiply(new BigDecimal(wxRentContract.getReceivePeriod())) - .setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_EVEN).toPlainString(); + .setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP).toPlainString(); continue; } } - revenuePriceArrs[i] = _p.setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_EVEN).toPlainString(); + revenuePriceArrs[i] = _p.setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP).toPlainString(); } } } @@ -295,21 +295,21 @@ public class WxRentContractHelper { for (int i = 1; i < size; i++) { BigDecimal divide = priceD.multiply(new BigDecimal(integers.get(i))).divide(new BigDecimal(100)); priceD = priceD.add(divide); - priceArrs[i] = priceD.setScale(decimalSize, RoundingMode.HALF_EVEN).toPlainString(); + priceArrs[i] = priceD.setScale(decimalSize, RoundingMode.HALF_UP).toPlainString(); } } else if (ratioWay.equals(EnumRentContractAdjustRatioWay.MONEY.getCode())) { for (int i = 1; i < size; i++) { priceD = priceD.add(new BigDecimal(integers.get(i))); - priceArrs[i] = priceD.setScale(decimalSize, RoundingMode.HALF_EVEN).toPlainString(); + priceArrs[i] = priceD.setScale(decimalSize, RoundingMode.HALF_UP).toPlainString(); } } else if (ratioWay.equals(EnumRentContractAdjustRatioWay.CUSTOM.getCode())){ for (int i = 1; i < size; i++) { - priceArrs[i] = new BigDecimal(integers.get(i)).setScale(decimalSize, RoundingMode.HALF_EVEN).toPlainString(); + priceArrs[i] = new BigDecimal(integers.get(i)).setScale(decimalSize, RoundingMode.HALF_UP).toPlainString(); } }else if (ratioWay.equals(EnumRentContractAdjustRatioWay.FIX_RATIO.getCode())){ for (int i = 1; i < size; i++) { BigDecimal _p = priceD.multiply(new BigDecimal(integers.get(i))).divide(new BigDecimal(100)); - priceArrs[i] = _p.setScale(decimalSize, RoundingMode.HALF_EVEN).toPlainString(); + priceArrs[i] = _p.setScale(decimalSize, RoundingMode.HALF_UP).toPlainString(); } } return priceArrs; @@ -356,16 +356,16 @@ public class WxRentContractHelper { if (ratioWayType.equals(EnumRentContractAdjustRatioWay.RATIO.getCode())) { BigDecimal multiply = new BigDecimal(priceList.get(i)[j]).multiply(new BigDecimal(adjustRatio.getString(i)).divide(new BigDecimal(100))); BigDecimal price = new BigDecimal(priceList.get(i)[j]).add(multiply); - priceArrs[j] = price.setScale(decimalSize, RoundingMode.HALF_EVEN).toPlainString(); + priceArrs[j] = price.setScale(decimalSize, RoundingMode.HALF_UP).toPlainString(); }else if (ratioWayType.equals(EnumRentContractAdjustRatioWay.MONEY.getCode())) { BigDecimal price = new BigDecimal(priceList.get(i)[j]).add(new BigDecimal(adjustRatio.getString(i)).multiply(new BigDecimal(100))); - priceArrs[j] = price.setScale(decimalSize, RoundingMode.HALF_EVEN).toPlainString(); + priceArrs[j] = price.setScale(decimalSize, RoundingMode.HALF_UP).toPlainString(); }else if (ratioWayType.equals(EnumRentContractAdjustRatioWay.CUSTOM.getCode())) { BigDecimal price = new BigDecimal(adjustRatio.getString(i)).multiply(new BigDecimal(100)); - priceArrs[j] = price.setScale(decimalSize, RoundingMode.HALF_EVEN).toPlainString(); + priceArrs[j] = price.setScale(decimalSize, RoundingMode.HALF_UP).toPlainString(); }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_EVEN).toPlainString(); + priceArrs[j] = price.setScale(decimalSize, RoundingMode.HALF_UP).toPlainString(); } } priceList.add(priceArrs); @@ -374,31 +374,31 @@ public class WxRentContractHelper { } //查询月账单需要支付的金额 - public static long getNeedPayMoney(WxRentContract wxRentContract,long price,Date startDate,Date endDate,int i,int billTimeVoListSize,boolean saveDb,int dayType,int receivePeriod,boolean part,boolean monthCalDay){ - long needpay; + public static String getNeedPayMoney(WxRentContract wxRentContract,String price,Date startDate,Date endDate,int i,int billTimeVoListSize,boolean saveDb,int dayType,int receivePeriod,boolean part,boolean monthCalDay){ + String needpay; //按日 if (wxRentContract.getPriceUnit().equals(EnumPriceUnit.D.getCode())){ - Double priceD = new Double(price); - double needpayD = WxRentContractHelper.getNeedPay(0,priceD,startDate,endDate); + BigDecimal priceD = new BigDecimal(price); + String needpayD = WxRentContractHelper.getNeedPay(wxRentContract.getDecimalSize(),new BigDecimal(0),priceD,startDate,endDate); //取整 //needpay = new Double(needpayD).longValue(); //四舍五入 - needpay = new BigDecimal(needpayD).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(); + needpay = new BigDecimal(needpayD).setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP).toPlainString(); }else{ - Double priceD = new Double(price); + BigDecimal priceD = new BigDecimal(price); if (EnumRentContractType.RENT_BY_JOINT.getCode().equals(wxRentContract.getType())) { //设置跳点率为年周期 price不变 if (EnumMissTimeType.PERIOD.getCode().equals(wxRentContract.getBusDiscountTime())) { - return priceD.longValue(); + return priceD.toPlainString(); } //年或者设置跳点率为年周期 除12 if (EnumMissTimeType.YEAR.getCode().equals(wxRentContract.getBusDiscountTime())) { - priceD = new Double(price) / 12; + priceD = new BigDecimal(price).divide(new BigDecimal(12),wxRentContract.getDecimalSize(),RoundingMode.HALF_UP).setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP); } }else{ //年 除12 if(EnumPriceUnit.Y.getCode().equals(wxRentContract.getPriceUnit())){ - priceD = new Double(price)/12; + priceD = new BigDecimal(price).divide(new BigDecimal(12),wxRentContract.getDecimalSize(),RoundingMode.HALF_UP).setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP); } } @@ -406,7 +406,7 @@ public class WxRentContractHelper { //生成金额直接计算 if(!saveDb){ //needpay = new Double(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod,part)).longValue(); - needpay = new BigDecimal(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod,part)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(); + needpay = new BigDecimal(getMonthNeedPay(wxRentContract.getDecimalSize(),priceD, startDate, endDate,dayType,receivePeriod,part)).setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP).toPlainString(); return needpay; } @@ -421,20 +421,22 @@ public class WxRentContractHelper { instance.add(Calendar.DATE, -1); if(sd.format(instance.getTime()).equals(sd.format(endDate))){ int months = WxRentContractHelper.getMonths(sdM.format(startDate)+"-01",sdM.format(DateUtils.getDaySet(endDate,Calendar.DATE,1))+"-01"); - needpay = new Double(months * priceD).longValue(); + needpay = new BigDecimal(months).multiply(priceD).setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP).toPlainString(); }else{ //needpay = new Double(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod,false)).longValue(); - needpay = new BigDecimal(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod,false)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(); + needpay = new BigDecimal(getMonthNeedPay(wxRentContract.getDecimalSize(),priceD, startDate, endDate,dayType,receivePeriod,false)) + .setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP).toPlainString(); } }else if(i == 0){//第一期 if(wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode())){ if(isFirstDay(startDate)){ int months = WxRentContractHelper.getMonths(sdM.format(startDate)+"-01",sdM.format(endDate)+"-01"); months++; - needpay = new Double(months * priceD).longValue(); + needpay = new BigDecimal(months).multiply(priceD).setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP).toPlainString(); }else{ //needpay = new Double(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod,false)).longValue(); - needpay = new BigDecimal(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod,false)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(); + needpay = new BigDecimal(getMonthNeedPay(wxRentContract.getDecimalSize(),priceD, startDate, endDate,dayType,receivePeriod,false)) + .setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP).toPlainString(); } }else{ if(isFirstDay(startDate)){ @@ -442,10 +444,11 @@ public class WxRentContractHelper { if(isFirstDay(startDate)){ months++; } - needpay = new Double(months * priceD).longValue(); + needpay = new BigDecimal(months).multiply(priceD).setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP).toPlainString(); }else{ //needpay = new Double(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod,false)).longValue(); - needpay = new BigDecimal(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod,false)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(); + needpay = new BigDecimal(getMonthNeedPay(wxRentContract.getDecimalSize(),priceD, startDate, endDate,dayType,receivePeriod,false)) + .setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP).toPlainString(); } } }else{//中间 @@ -456,9 +459,10 @@ public class WxRentContractHelper { //如果当月费用需要按天计算 if (monthCalDay) { //needpay = new Double(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod,false)).longValue(); - needpay = new BigDecimal(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod,false)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(); + needpay = new BigDecimal(getMonthNeedPay(wxRentContract.getDecimalSize(),priceD, startDate, endDate,dayType,receivePeriod,false)) + .setScale(wxRentContract.getDecimalSize(), BigDecimal.ROUND_HALF_UP).toPlainString(); }else { - needpay = new Double(months * priceD).longValue(); + needpay = new BigDecimal(months).multiply(priceD).setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_UP).toPlainString(); } } } @@ -481,17 +485,17 @@ public class WxRentContractHelper { * @param end * @return */ - public static double getMonthNeedPay(Double price,Date start,Date end,int dayType,int receivePeriod,boolean part){ + public static String getMonthNeedPay(Integer decimalSize,BigDecimal price,Date start,Date end,int dayType,int receivePeriod,boolean part){ SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdM = new SimpleDateFormat("yyyy-MM"); SimpleDateFormat sdD = new SimpleDateFormat("d"); - Double total = new Double(0); + BigDecimal total = new BigDecimal(0); int[] diff; //同一天 if(sd.format(start).equals(sd.format(end))){ int dayCount = DateUtils.getMonthDayCount(start); - return 1 * (price/dayCount); + return price.divide(new BigDecimal(dayCount),decimalSize,BigDecimal.ROUND_HALF_UP).toPlainString(); } //同月 @@ -499,8 +503,8 @@ public class WxRentContractHelper { diff = DateUtils.getDiff(start,end); int dayCount = DateUtils.getMonthDayCount(start); - total += (diff[1]+1) * (price/dayCount); - return total; + total = total.add(new BigDecimal((diff[1]+1)).multiply(price).divide(new BigDecimal(dayCount),decimalSize,BigDecimal.ROUND_HALF_UP)); + return total.toPlainString(); } //判断是否满足整月 @@ -523,25 +527,25 @@ public class WxRentContractHelper { if(isFullMonth){ int months = getMonths(sdM.format(start)+"-01",sdM.format(DateUtils.getDaySet(end,Calendar.DATE,1))+"-01"); - return (months) * price; + return new BigDecimal(months).multiply(price).setScale(decimalSize, RoundingMode.HALF_UP).toPlainString(); } //第一个月 Date lastMonthDay = DateUtils.getLastDayForMonth(start); diff = DateUtils.getDiff(start,lastMonthDay); int dayCount = DateUtils.getMonthDayCount(start); - total += (diff[1]+1) * (price/dayCount); + total = total.add(new BigDecimal((diff[1]+1)).multiply(price).divide(new BigDecimal(dayCount),decimalSize,BigDecimal.ROUND_HALF_UP)); //中间月份 Date newStartDate = DateUtils.getDaySet(lastMonthDay,Calendar.DATE,1); int months = getMonths(sdM.format(newStartDate)+"-01",sdM.format(end)+"-01"); - total += months * price; + total = total.add(new BigDecimal(months).multiply(price)); //最后一个月 diff = DateUtils.getDiff(DateUtils.getFirstDayForCurrMonth(end),end); dayCount = DateUtils.getMonthDayCount(end); - total += (diff[1]+1) * (price/dayCount); - return total; + total = total.add(new BigDecimal((diff[1]+1)).multiply(price).divide(new BigDecimal(dayCount),decimalSize,BigDecimal.ROUND_HALF_UP)); + return total.toPlainString(); } public static int getMonths(String startStr,String endStr){ @@ -559,40 +563,40 @@ public class WxRentContractHelper { * @param end * @return */ - public static double getNeedPay(long monthPrice,Double dayPrice,Date start,Date end){ + public static String getNeedPay(Integer decimalSize,BigDecimal monthPrice,BigDecimal dayPrice,Date start,Date end){ SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdM = new SimpleDateFormat("yyyy-MM"); - Double total; + BigDecimal total; int[] diff; int dayCount = DateUtils.getMonthDayCount(start); - double price; - if(monthPrice > 0){ - price = (double) monthPrice/dayCount; + BigDecimal price; + if(monthPrice.compareTo(new BigDecimal(0)) > 0){ + price = monthPrice.divide(new BigDecimal(dayCount),decimalSize,BigDecimal.ROUND_HALF_UP); }else{ price = dayPrice; } //同一天 if(sd.format(start).equals(sd.format(end))){ - return 1 * price; //算1天 + return price.toPlainString(); //算1天 } //同月 if(sdM.format(start).equals(sdM.format(end))){ diff = DateUtils.getDiff(start,end); - return (diff[1]+1) * price; + return new BigDecimal((diff[1]+1)).multiply(price).setScale(decimalSize, BigDecimal.ROUND_HALF_UP).toPlainString(); } Date currEnd = DateUtils.getLastDayForMonth(start); diff = DateUtils.getDiff(start,currEnd); - total = (diff[1]+1) * price; + total = new BigDecimal((diff[1]+1)).multiply(price).setScale(decimalSize, BigDecimal.ROUND_HALF_UP); int warnCount = 0; while (true){ Date monthStartDate = DateUtils.getDaySet(currEnd,Calendar.DATE,1); dayCount = DateUtils.getMonthDayCount(monthStartDate); - if(monthPrice > 0){ - price = (double) monthPrice/dayCount; + if(monthPrice.compareTo(new BigDecimal(0)) > 0){ + price = monthPrice.divide(new BigDecimal(dayCount),decimalSize,BigDecimal.ROUND_HALF_UP); }else{ price = dayPrice; } @@ -600,12 +604,12 @@ public class WxRentContractHelper { //最后一个月 if(sdM.format(monthStartDate).equals(sdM.format(end))){ diff = DateUtils.getDiff(monthStartDate,end); - total += price * (diff[1]+1); + total = total.add(price.multiply(new BigDecimal((diff[1]+1))).setScale(decimalSize, BigDecimal.ROUND_HALF_UP)); break; }else{ currEnd = DateUtils.getLastDayForMonth(monthStartDate); diff = DateUtils.getDiff(monthStartDate,currEnd); - total += price * (diff[1]+1); + total = total.add(price.multiply(new BigDecimal((diff[1]+1))).setScale(decimalSize, BigDecimal.ROUND_HALF_UP)); } //预警 @@ -616,7 +620,7 @@ public class WxRentContractHelper { } warnCount ++; } - return total; + return total.setScale(decimalSize, BigDecimal.ROUND_HALF_UP).toPlainString(); } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBillAllServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBillAllServiceImpl.java index cadc7502a..aa4c168d3 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillAllServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillAllServiceImpl.java @@ -780,7 +780,7 @@ public class WxBillAllServiceImpl implements WxBillAllService { wxBillDeposit.setPayDate(date); Long owe = (Long) bill.get("owe"); wxBillDeposit.setPay(wxBillDeposit.getPay() + owe); - wxBillDeposit.setOwe(0L); + wxBillDeposit.setOwe("0"); wxBillDeposit.setStatus(EnumBillDailyStatus.PAID.getCode()); wxBillDeposit.setPayDate(date); wxBillDeposit.setUpdatetime(date); @@ -825,7 +825,7 @@ public class WxBillAllServiceImpl implements WxBillAllService { wxBillRent.setPayDate(date); Long owe = (Long) bill.get("owe"); wxBillRent.setPay(wxBillRent.getPay() + owe); - wxBillRent.setOwe(0L); + wxBillRent.setOwe("0"); wxBillRent.setStatus(EnumBillDailyStatus.PAID.getCode()); wxBillRent.setPayDate(date); wxBillRent.setUpdatetime(date); @@ -1153,238 +1153,238 @@ public class WxBillAllServiceImpl implements WxBillAllService { @Override public ResultData updateReceivePay(WxBillAll wxBillAll, MallUserInfo user,boolean forcePaid) { - Integer billType = wxBillAll.getBillTypeValue(); - Long oldPrice = wxBillAll.getOldPrice(); - Long newPrice = wxBillAll.getNewPrice(); - Long oldLatePrice = wxBillAll.getOldLatePrice(); - Long newLatePrice = wxBillAll.getNewLatePrice(); - Long id = wxBillAll.getId(); - Date updateDate = new Date(); - if (billType.equals(EnumBillTypeParam.RENT.getCode())) { - WxBillRent dbBill = wxBillRentMapper.selectById(id); - WxBillRent wxBillRent = new WxBillRent(); - wxBillRent.setId(id); - wxBillRent.setUpdatetime(updateDate); - if (forcePaid) { - wxBillRent.setReceivePay(dbBill.getPay()); - wxBillRent.setStatus(EnumBillRentStatus.PAID.getCode()); - wxBillRent.setOwe(0L); - wxBillRentMapper.updateById(wxBillRent); - addBillAction(EnumBillAction.UPDATE_BILL, id, dbBill.getPay(), dbBill.getPay(), user); - }else { - if (oldLatePrice != null) { - wxBillRent.setLatePayPrice(newLatePrice); - wxBillRent.setOwe(dbBill.getReceivePay() + dbBill.getServiceChargePay() + newLatePrice - dbBill.getPay()); - wxBillRentMapper.updateById(wxBillRent); - addBillAction(EnumBillAction.UPDATE_LATE_PAY_MONEY, id, oldLatePrice, newLatePrice, user); - } else { - //租赁账单更新 - wxBillRent.setReceivePay(newPrice); - long latePayPrice = dbBill.getLatePayPrice() == null ? 0 : dbBill.getLatePayPrice(); - wxBillRent.setOwe(newPrice + dbBill.getServiceChargePay() + latePayPrice - dbBill.getPay()); - if (newPrice.equals(dbBill.getPay())) { - wxBillRent.setStatus(EnumBillRentStatus.PAID.getCode()); - } - wxBillRentMapper.updateById(wxBillRent); - //账单日志 - addBillAction(EnumBillAction.UPDATE_BILL, id, oldPrice, newPrice, user); - } - } - } else if (billType.equals(EnumBillTypeParam.RENT_DEPOSIT.getCode())) { - WxBillDeposit dbBill = wxBillDepositMapper.selectById(id); - if (dbBill != null) { - WxBillDeposit wxBillDeposit = new WxBillDeposit(); - wxBillDeposit.setId(id); - Long billDepositOldPrce = oldPrice; - Long billDepositNewPrce = newPrice; - //租赁押金账单更新 - if (forcePaid) { - wxBillDeposit.setReceivePay(dbBill.getPay()); - wxBillDeposit.setOwe(0L); - wxBillDeposit.setStatus(EnumBillRentStatus.PAID.getCode()); - billDepositOldPrce = dbBill.getPay(); - billDepositNewPrce = dbBill.getPay(); - }else { - wxBillDeposit.setReceivePay(newPrice); - wxBillDeposit.setOwe(newPrice - dbBill.getPay()); - if (newPrice.equals(dbBill.getPay())) { - wxBillDeposit.setStatus(EnumBillRentStatus.PAID.getCode()); - } - wxBillDeposit.setUpdatetime(updateDate); - } - wxBillDepositMapper.updateById(wxBillDeposit); - //账单日志 - addBillAction(EnumBillAction.DEPOSIT_MODIFY, id, billDepositOldPrce, billDepositNewPrce, user); - } - - WxBillPropertyDeposit propertyDeposit = wxBillPropertyDepositMapper.selectById(id); - if (propertyDeposit != null) { - //物业押金账单更新 - WxBillPropertyDeposit wxBillPropertyDeposit = new WxBillPropertyDeposit(); - wxBillPropertyDeposit.setId(id); - Long billPropertyDepositOldPrce = oldPrice; - Long billPropertyDepositNewPrce = newPrice; - if (forcePaid) { - wxBillPropertyDeposit.setReceivePay(propertyDeposit.getPay()); - wxBillPropertyDeposit.setOwe(0L); - wxBillPropertyDeposit.setStatus(EnumBillRentStatus.PAID.getCode()); - billPropertyDepositOldPrce = propertyDeposit.getPay(); - billPropertyDepositNewPrce = propertyDeposit.getPay(); - }else { - wxBillPropertyDeposit.setReceivePay(newPrice); - wxBillPropertyDeposit.setOwe(newPrice - propertyDeposit.getPay()); - if (newPrice.equals(propertyDeposit.getPay())) { - wxBillPropertyDeposit.setStatus(EnumBillRentStatus.PAID.getCode()); - } - } - wxBillPropertyDeposit.setUpdatetime(updateDate); - wxBillPropertyDepositMapper.updateById(wxBillPropertyDeposit); - //账单日志 - addBillAction(EnumBillAction.UPDATE_BILL, id, billPropertyDepositOldPrce, billPropertyDepositNewPrce, user); - } - } else if (billType.equals(EnumBillTypeParam.PROPERTY.getCode())) { - WxBillProperty dbBill = wxBillPropertyMapper.selectById(id); - //物业账单更新 - WxBillProperty wxBillProperty = new WxBillProperty(); - wxBillProperty.setId(id); - wxBillProperty.setUpdatetime(updateDate); - if (forcePaid) { - wxBillProperty.setReceivePay(dbBill.getPay()); - wxBillProperty.setOwe(0L); - wxBillProperty.setStatus(EnumBillRentStatus.PAID.getCode()); - wxBillPropertyMapper.updateById(wxBillProperty); - addBillAction(EnumBillAction.UPDATE_BILL, id, dbBill.getPay(), dbBill.getPay(), user); - }else { - if (oldLatePrice != null) { - wxBillProperty.setLatePayPrice(newLatePrice); - wxBillProperty.setOwe(dbBill.getReceivePay() + dbBill.getServiceChargePay() + newLatePrice - dbBill.getPay()); - wxBillPropertyMapper.updateById(wxBillProperty); - addBillAction(EnumBillAction.UPDATE_LATE_PAY_MONEY, id, oldLatePrice, newLatePrice, user); - } else { - wxBillProperty.setReceivePay(newPrice); - long latePayPrice = dbBill.getLatePayPrice() == null ? 0 : dbBill.getLatePayPrice(); - wxBillProperty.setOwe(newPrice + dbBill.getServiceChargePay() + latePayPrice - dbBill.getPay()); - if (newPrice.equals(dbBill.getPay())) { - wxBillProperty.setStatus(EnumBillRentStatus.PAID.getCode()); - } - wxBillPropertyMapper.updateById(wxBillProperty); - //账单日志 - addBillAction(EnumBillAction.UPDATE_BILL, id, oldPrice, newPrice, user); - } - } - } else if (billType.equals(EnumBillTypeParam.PROPERTY_DEPOSIT.getCode())) { - WxBillPropertyDeposit dbBill = wxBillPropertyDepositMapper.selectById(id); - //物业押金账单更新 - WxBillPropertyDeposit wxBillPropertyDeposit = new WxBillPropertyDeposit(); - wxBillPropertyDeposit.setId(id); - Long billPropertyDepositOldPrce = oldPrice; - Long billPropertyDepositNewPrce = newPrice; - if (forcePaid) { - wxBillPropertyDeposit.setReceivePay(dbBill.getPay()); - wxBillPropertyDeposit.setOwe(0L); - wxBillPropertyDeposit.setStatus(EnumBillRentStatus.PAID.getCode()); - billPropertyDepositOldPrce = dbBill.getPay(); - billPropertyDepositNewPrce = dbBill.getPay(); - }else { - wxBillPropertyDeposit.setReceivePay(newPrice); - wxBillPropertyDeposit.setOwe(newPrice - dbBill.getPay()); - if (newPrice.equals(dbBill.getPay())) { - wxBillPropertyDeposit.setStatus(EnumBillRentStatus.PAID.getCode()); - } - } - wxBillPropertyDeposit.setUpdatetime(updateDate); - wxBillPropertyDepositMapper.updateById(wxBillPropertyDeposit); - //账单日志 - addBillAction(EnumBillAction.UPDATE_BILL, id, billPropertyDepositOldPrce, billPropertyDepositNewPrce, user); - - } else if (billType.equals(EnumBillTypeParam.WATER.getCode())) { - //水费账单更新 - updateDailyBill(id, newPrice, updateDate,forcePaid); - //账单日志 - addBillAction(EnumBillAction.UPDATE_BILL, id, oldPrice, newPrice, user); - } else if (billType.equals(EnumBillTypeParam.POWER.getCode())) { - //电费账单更新 - updateDailyBill(id, newPrice, updateDate,forcePaid); - //账单日志 - addBillAction(EnumBillAction.UPDATE_BILL, id, oldPrice, newPrice, user); - } else if (billType.equals(EnumBillTypeParam.AIR_CONDITIONING.getCode())) { - //空调费账单更新 - updateDailyBill(id, newPrice, updateDate,forcePaid); - //账单日志 - addBillAction(EnumBillAction.UPDATE_BILL, id, oldPrice, newPrice, user); - } else if (billType.equals(EnumBillTypeParam.ROUTINE.getCode())) { - WxBillOther dbBill = wxBillOtherMapper.selectById(id); - //其他费用账单更新 - WxBillOther wxBillOther = new WxBillOther(); - wxBillOther.setId(id); - if (forcePaid) { - wxBillOther.setReceivePay(dbBill.getPay()); - wxBillOther.setOwe(0L); - wxBillOther.setStatus(EnumBillRentStatus.PAID.getCode()); - }else { - wxBillOther.setReceivePay(newPrice); - wxBillOther.setOwe(newPrice + dbBill.getServiceChargePay() - dbBill.getPay()); - if (newPrice.equals(dbBill.getPay())) { - wxBillOther.setStatus(EnumBillRentStatus.PAID.getCode()); - } - } - wxBillOther.setUpdatetime(updateDate); - wxBillOtherMapper.updateById(wxBillOther); - //账单日志 - addBillAction(EnumBillAction.UPDATE_BILL, id, oldPrice, newPrice, user); - } else if (billType.equals(EnumBillTypeParam.ATHER_DEPOSIT.getCode())) { - WxBillOtherDeposit dbBill = wxBillOtherDepositMapper.selectById(id); - //其他押金账单更新 - WxBillOtherDeposit wxBillOtherDeposit = new WxBillOtherDeposit(); - wxBillOtherDeposit.setId(id); - if (forcePaid) { - wxBillOtherDeposit.setReceivePay(dbBill.getPay()); - wxBillOtherDeposit.setOwe(0L); - wxBillOtherDeposit.setStatus(EnumBillRentStatus.PAID.getCode()); - }else { - wxBillOtherDeposit.setReceivePay(newPrice); - wxBillOtherDeposit.setOwe(newPrice + dbBill.getServiceChargePay() - dbBill.getPay()); - if (newPrice.equals(dbBill.getPay())) { - wxBillOtherDeposit.setStatus(EnumBillRentStatus.PAID.getCode()); - } - } - wxBillOtherDeposit.setUpdatetime(updateDate); - wxBillOtherDepositMapper.updateById(wxBillOtherDeposit); - //账单日志 - addBillAction(EnumBillAction.UPDATE_BILL, id, oldPrice, newPrice, user); - }if (billType.equals(EnumBillTypeParam.RENT_BUSSINESS_MANAGE.getCode()) || billType.equals(EnumBillTypeParam.RENT_OPERATING_MANAGE.getCode())) { - WxBillRentManage dbBill = wxBillRentManageMapper.selectById(id); - WxBillRentManage wxBillRent = new WxBillRentManage(); - wxBillRent.setId(id); - wxBillRent.setUpdatetime(updateDate); - if (forcePaid) { - wxBillRent.setReceivePay(dbBill.getPay()); - wxBillRent.setStatus(EnumBillRentStatus.PAID.getCode()); - wxBillRent.setOwe(0L); - wxBillRentManageMapper.updateById(wxBillRent); - addBillAction(EnumBillAction.UPDATE_BILL, id, dbBill.getPay(), dbBill.getPay(), user); - }else { - if (oldLatePrice != null) { - wxBillRent.setLatePayPrice(newLatePrice); - wxBillRent.setOwe(dbBill.getReceivePay() + dbBill.getServiceChargePay() + newLatePrice - dbBill.getPay()); - wxBillRentManageMapper.updateById(wxBillRent); - addBillAction(EnumBillAction.UPDATE_LATE_PAY_MONEY, id, oldLatePrice, newLatePrice, user); - } else { - //租赁账单更新 - wxBillRent.setReceivePay(newPrice); - long latePayPrice = dbBill.getLatePayPrice() == null ? 0 : dbBill.getLatePayPrice(); - wxBillRent.setOwe(newPrice + dbBill.getServiceChargePay() + latePayPrice - dbBill.getPay()); - if (newPrice.equals(dbBill.getPay())) { - wxBillRent.setStatus(EnumBillRentStatus.PAID.getCode()); - } - wxBillRentManageMapper.updateById(wxBillRent); - //账单日志 - addBillAction(EnumBillAction.UPDATE_BILL, id, oldPrice, newPrice, user); - } - } - } else { - logger.info("未找到账单类型"); - } +// Integer billType = wxBillAll.getBillTypeValue(); +// Long oldPrice = wxBillAll.getOldPrice(); +// Long newPrice = wxBillAll.getNewPrice(); +// Long oldLatePrice = wxBillAll.getOldLatePrice(); +// Long newLatePrice = wxBillAll.getNewLatePrice(); +// Long id = wxBillAll.getId(); +// Date updateDate = new Date(); +// if (billType.equals(EnumBillTypeParam.RENT.getCode())) { +// WxBillRent dbBill = wxBillRentMapper.selectById(id); +// WxBillRent wxBillRent = new WxBillRent(); +// wxBillRent.setId(id); +// wxBillRent.setUpdatetime(updateDate); +// if (forcePaid) { +// wxBillRent.setReceivePay(dbBill.getPay()); +// wxBillRent.setStatus(EnumBillRentStatus.PAID.getCode()); +// wxBillRent.setOwe("0"); +// wxBillRentMapper.updateById(wxBillRent); +// addBillAction(EnumBillAction.UPDATE_BILL, id, dbBill.getPay(), dbBill.getPay(), user); +// }else { +// if (oldLatePrice != null) { +// wxBillRent.setLatePayPrice(newLatePrice); +// wxBillRent.setOwe(dbBill.getReceivePay() + dbBill.getServiceChargePay() + newLatePrice - dbBill.getPay()); +// wxBillRentMapper.updateById(wxBillRent); +// addBillAction(EnumBillAction.UPDATE_LATE_PAY_MONEY, id, oldLatePrice, newLatePrice, user); +// } else { +// //租赁账单更新 +// wxBillRent.setReceivePay(newPrice); +// long latePayPrice = dbBill.getLatePayPrice() == null ? 0 : dbBill.getLatePayPrice(); +// wxBillRent.setOwe(newPrice + dbBill.getServiceChargePay() + latePayPrice - dbBill.getPay()); +// if (newPrice.equals(dbBill.getPay())) { +// wxBillRent.setStatus(EnumBillRentStatus.PAID.getCode()); +// } +// wxBillRentMapper.updateById(wxBillRent); +// //账单日志 +// addBillAction(EnumBillAction.UPDATE_BILL, id, oldPrice, newPrice, user); +// } +// } +// } else if (billType.equals(EnumBillTypeParam.RENT_DEPOSIT.getCode())) { +// WxBillDeposit dbBill = wxBillDepositMapper.selectById(id); +// if (dbBill != null) { +// WxBillDeposit wxBillDeposit = new WxBillDeposit(); +// wxBillDeposit.setId(id); +// Long billDepositOldPrce = oldPrice; +// Long billDepositNewPrce = newPrice; +// //租赁押金账单更新 +// if (forcePaid) { +// wxBillDeposit.setReceivePay(dbBill.getPay()); +// wxBillDeposit.setOwe(0L); +// wxBillDeposit.setStatus(EnumBillRentStatus.PAID.getCode()); +// billDepositOldPrce = dbBill.getPay(); +// billDepositNewPrce = dbBill.getPay(); +// }else { +// wxBillDeposit.setReceivePay(newPrice); +// wxBillDeposit.setOwe(newPrice - dbBill.getPay()); +// if (newPrice.equals(dbBill.getPay())) { +// wxBillDeposit.setStatus(EnumBillRentStatus.PAID.getCode()); +// } +// wxBillDeposit.setUpdatetime(updateDate); +// } +// wxBillDepositMapper.updateById(wxBillDeposit); +// //账单日志 +// addBillAction(EnumBillAction.DEPOSIT_MODIFY, id, billDepositOldPrce, billDepositNewPrce, user); +// } +// +// WxBillPropertyDeposit propertyDeposit = wxBillPropertyDepositMapper.selectById(id); +// if (propertyDeposit != null) { +// //物业押金账单更新 +// WxBillPropertyDeposit wxBillPropertyDeposit = new WxBillPropertyDeposit(); +// wxBillPropertyDeposit.setId(id); +// Long billPropertyDepositOldPrce = oldPrice; +// Long billPropertyDepositNewPrce = newPrice; +// if (forcePaid) { +// wxBillPropertyDeposit.setReceivePay(propertyDeposit.getPay()); +// wxBillPropertyDeposit.setOwe(0L); +// wxBillPropertyDeposit.setStatus(EnumBillRentStatus.PAID.getCode()); +// billPropertyDepositOldPrce = propertyDeposit.getPay(); +// billPropertyDepositNewPrce = propertyDeposit.getPay(); +// }else { +// wxBillPropertyDeposit.setReceivePay(newPrice); +// wxBillPropertyDeposit.setOwe(newPrice - propertyDeposit.getPay()); +// if (newPrice.equals(propertyDeposit.getPay())) { +// wxBillPropertyDeposit.setStatus(EnumBillRentStatus.PAID.getCode()); +// } +// } +// wxBillPropertyDeposit.setUpdatetime(updateDate); +// wxBillPropertyDepositMapper.updateById(wxBillPropertyDeposit); +// //账单日志 +// addBillAction(EnumBillAction.UPDATE_BILL, id, billPropertyDepositOldPrce, billPropertyDepositNewPrce, user); +// } +// } else if (billType.equals(EnumBillTypeParam.PROPERTY.getCode())) { +// WxBillProperty dbBill = wxBillPropertyMapper.selectById(id); +// //物业账单更新 +// WxBillProperty wxBillProperty = new WxBillProperty(); +// wxBillProperty.setId(id); +// wxBillProperty.setUpdatetime(updateDate); +// if (forcePaid) { +// wxBillProperty.setReceivePay(dbBill.getPay()); +// wxBillProperty.setOwe(0L); +// wxBillProperty.setStatus(EnumBillRentStatus.PAID.getCode()); +// wxBillPropertyMapper.updateById(wxBillProperty); +// addBillAction(EnumBillAction.UPDATE_BILL, id, dbBill.getPay(), dbBill.getPay(), user); +// }else { +// if (oldLatePrice != null) { +// wxBillProperty.setLatePayPrice(newLatePrice); +// wxBillProperty.setOwe(dbBill.getReceivePay() + dbBill.getServiceChargePay() + newLatePrice - dbBill.getPay()); +// wxBillPropertyMapper.updateById(wxBillProperty); +// addBillAction(EnumBillAction.UPDATE_LATE_PAY_MONEY, id, oldLatePrice, newLatePrice, user); +// } else { +// wxBillProperty.setReceivePay(newPrice); +// long latePayPrice = dbBill.getLatePayPrice() == null ? 0 : dbBill.getLatePayPrice(); +// wxBillProperty.setOwe(newPrice + dbBill.getServiceChargePay() + latePayPrice - dbBill.getPay()); +// if (newPrice.equals(dbBill.getPay())) { +// wxBillProperty.setStatus(EnumBillRentStatus.PAID.getCode()); +// } +// wxBillPropertyMapper.updateById(wxBillProperty); +// //账单日志 +// addBillAction(EnumBillAction.UPDATE_BILL, id, oldPrice, newPrice, user); +// } +// } +// } else if (billType.equals(EnumBillTypeParam.PROPERTY_DEPOSIT.getCode())) { +// WxBillPropertyDeposit dbBill = wxBillPropertyDepositMapper.selectById(id); +// //物业押金账单更新 +// WxBillPropertyDeposit wxBillPropertyDeposit = new WxBillPropertyDeposit(); +// wxBillPropertyDeposit.setId(id); +// Long billPropertyDepositOldPrce = oldPrice; +// Long billPropertyDepositNewPrce = newPrice; +// if (forcePaid) { +// wxBillPropertyDeposit.setReceivePay(dbBill.getPay()); +// wxBillPropertyDeposit.setOwe(0L); +// wxBillPropertyDeposit.setStatus(EnumBillRentStatus.PAID.getCode()); +// billPropertyDepositOldPrce = dbBill.getPay(); +// billPropertyDepositNewPrce = dbBill.getPay(); +// }else { +// wxBillPropertyDeposit.setReceivePay(newPrice); +// wxBillPropertyDeposit.setOwe(newPrice - dbBill.getPay()); +// if (newPrice.equals(dbBill.getPay())) { +// wxBillPropertyDeposit.setStatus(EnumBillRentStatus.PAID.getCode()); +// } +// } +// wxBillPropertyDeposit.setUpdatetime(updateDate); +// wxBillPropertyDepositMapper.updateById(wxBillPropertyDeposit); +// //账单日志 +// addBillAction(EnumBillAction.UPDATE_BILL, id, billPropertyDepositOldPrce, billPropertyDepositNewPrce, user); +// +// } else if (billType.equals(EnumBillTypeParam.WATER.getCode())) { +// //水费账单更新 +// updateDailyBill(id, newPrice, updateDate,forcePaid); +// //账单日志 +// addBillAction(EnumBillAction.UPDATE_BILL, id, oldPrice, newPrice, user); +// } else if (billType.equals(EnumBillTypeParam.POWER.getCode())) { +// //电费账单更新 +// updateDailyBill(id, newPrice, updateDate,forcePaid); +// //账单日志 +// addBillAction(EnumBillAction.UPDATE_BILL, id, oldPrice, newPrice, user); +// } else if (billType.equals(EnumBillTypeParam.AIR_CONDITIONING.getCode())) { +// //空调费账单更新 +// updateDailyBill(id, newPrice, updateDate,forcePaid); +// //账单日志 +// addBillAction(EnumBillAction.UPDATE_BILL, id, oldPrice, newPrice, user); +// } else if (billType.equals(EnumBillTypeParam.ROUTINE.getCode())) { +// WxBillOther dbBill = wxBillOtherMapper.selectById(id); +// //其他费用账单更新 +// WxBillOther wxBillOther = new WxBillOther(); +// wxBillOther.setId(id); +// if (forcePaid) { +// wxBillOther.setReceivePay(dbBill.getPay()); +// wxBillOther.setOwe(0L); +// wxBillOther.setStatus(EnumBillRentStatus.PAID.getCode()); +// }else { +// wxBillOther.setReceivePay(newPrice); +// wxBillOther.setOwe(newPrice + dbBill.getServiceChargePay() - dbBill.getPay()); +// if (newPrice.equals(dbBill.getPay())) { +// wxBillOther.setStatus(EnumBillRentStatus.PAID.getCode()); +// } +// } +// wxBillOther.setUpdatetime(updateDate); +// wxBillOtherMapper.updateById(wxBillOther); +// //账单日志 +// addBillAction(EnumBillAction.UPDATE_BILL, id, oldPrice, newPrice, user); +// } else if (billType.equals(EnumBillTypeParam.ATHER_DEPOSIT.getCode())) { +// WxBillOtherDeposit dbBill = wxBillOtherDepositMapper.selectById(id); +// //其他押金账单更新 +// WxBillOtherDeposit wxBillOtherDeposit = new WxBillOtherDeposit(); +// wxBillOtherDeposit.setId(id); +// if (forcePaid) { +// wxBillOtherDeposit.setReceivePay(dbBill.getPay()); +// wxBillOtherDeposit.setOwe(0L); +// wxBillOtherDeposit.setStatus(EnumBillRentStatus.PAID.getCode()); +// }else { +// wxBillOtherDeposit.setReceivePay(newPrice); +// wxBillOtherDeposit.setOwe(newPrice + dbBill.getServiceChargePay() - dbBill.getPay()); +// if (newPrice.equals(dbBill.getPay())) { +// wxBillOtherDeposit.setStatus(EnumBillRentStatus.PAID.getCode()); +// } +// } +// wxBillOtherDeposit.setUpdatetime(updateDate); +// wxBillOtherDepositMapper.updateById(wxBillOtherDeposit); +// //账单日志 +// addBillAction(EnumBillAction.UPDATE_BILL, id, oldPrice, newPrice, user); +// }if (billType.equals(EnumBillTypeParam.RENT_BUSSINESS_MANAGE.getCode()) || billType.equals(EnumBillTypeParam.RENT_OPERATING_MANAGE.getCode())) { +// WxBillRentManage dbBill = wxBillRentManageMapper.selectById(id); +// WxBillRentManage wxBillRent = new WxBillRentManage(); +// wxBillRent.setId(id); +// wxBillRent.setUpdatetime(updateDate); +// if (forcePaid) { +// wxBillRent.setReceivePay(dbBill.getPay()); +// wxBillRent.setStatus(EnumBillRentStatus.PAID.getCode()); +// wxBillRent.setOwe(0L); +// wxBillRentManageMapper.updateById(wxBillRent); +// addBillAction(EnumBillAction.UPDATE_BILL, id, dbBill.getPay(), dbBill.getPay(), user); +// }else { +// if (oldLatePrice != null) { +// wxBillRent.setLatePayPrice(newLatePrice); +// wxBillRent.setOwe(dbBill.getReceivePay() + dbBill.getServiceChargePay() + newLatePrice - dbBill.getPay()); +// wxBillRentManageMapper.updateById(wxBillRent); +// addBillAction(EnumBillAction.UPDATE_LATE_PAY_MONEY, id, oldLatePrice, newLatePrice, user); +// } else { +// //租赁账单更新 +// wxBillRent.setReceivePay(newPrice); +// long latePayPrice = dbBill.getLatePayPrice() == null ? 0 : dbBill.getLatePayPrice(); +// wxBillRent.setOwe(newPrice + dbBill.getServiceChargePay() + latePayPrice - dbBill.getPay()); +// if (newPrice.equals(dbBill.getPay())) { +// wxBillRent.setStatus(EnumBillRentStatus.PAID.getCode()); +// } +// wxBillRentManageMapper.updateById(wxBillRent); +// //账单日志 +// addBillAction(EnumBillAction.UPDATE_BILL, id, oldPrice, newPrice, user); +// } +// } +// } else { +// logger.info("未找到账单类型"); +// } return new ResultData(); } @@ -1775,68 +1775,68 @@ public class WxBillAllServiceImpl implements WxBillAllService { @Override public void importBill(String importKey, WxBillExcelTemplate bill, MallUserInfo user) { - //租金 - Integer billType = bill.getBillType(); - if (billType.equals(EnumBillExcelTemplate.SHOP_RENT.getCode()) || billType.equals(EnumBillExcelTemplate.POINT_RENT.getCode())) { - WxBillRent rentQuery = new WxBillRent(); - rentQuery.updateTenantInfo(user); - rentQuery.setMerchantId(bill.getMerchantId()); - rentQuery.setStarttime(bill.getStarttime()); - rentQuery.setEndtime(bill.getEndtime()); - if (billType.equals(EnumBillExcelTemplate.SHOP_RENT.getCode())) { - rentQuery.setRentShopType(EnumRentShopType.SHOP.getCode()); - } else { - rentQuery.setRentShopType(EnumRentShopType.POINT.getCode()); - } - rentQuery.setIsPreview(EnumIsPreview.NO.getCode()); - WxBillRent rent = wxBillRentMapper.selectBillOne(rentQuery); - if (rent != null && !rent.getStatus().equals(EnumBillRentStatus.PAID.getCode())) { - long pay = new BigDecimal(bill.getPayStr()).multiply(new BigDecimal(100)).longValueExact(); - WxBillRent expiredDayAndStatus = getExpiredDayAndStatus(bill.getReceiveDate(), bill.getPayDate(), rent.getOwe(), pay, true); - rent.setExpiredDay(expiredDayAndStatus.getExpiredDay()); - rent.setStatus(expiredDayAndStatus.getStatus()); - rent.setPay(rent.getPay() + pay); - rent.setOwe(rent.getOwe() - pay); - rent.setPayDate(bill.getPayDate()); - rent.setReceiveDate(bill.getReceiveDate()); - wxBillRentMapper.updateById(rent); - if (pay > 0) { - addActionImport(rent.getId(), bill.getPayWay(), bill.getPayDate(), user, bill.getPayStr()); - } - } - } else if (billType.equals(EnumBillExcelTemplate.SHOP_PROPERTY.getCode()) || billType.equals(EnumBillExcelTemplate.POINT_PROPERTY.getCode())) { - WxBillProperty propertyQuery = new WxBillProperty(); - propertyQuery.updateTenantInfo(user); - propertyQuery.setMerchantId(bill.getMerchantId()); - propertyQuery.setStarttime(bill.getStarttime()); - propertyQuery.setEndtime(bill.getEndtime()); - if (billType.equals(EnumBillExcelTemplate.SHOP_PROPERTY.getCode())) { - propertyQuery.setRentShopType(EnumRentShopType.SHOP.getCode()); - } else { - propertyQuery.setRentShopType(EnumRentShopType.POINT.getCode()); - } - propertyQuery.setIsPreview(EnumIsPreview.NO.getCode()); - WxBillProperty property = wxBillPropertyMapper.selectBillOne(propertyQuery); - if (property != null && !property.getStatus().equals(EnumBillRentStatus.PAID.getCode())) { - long pay = new BigDecimal(bill.getPayStr()).multiply(new BigDecimal(100)).longValueExact(); - WxBillRent expiredDayAndStatus = getExpiredDayAndStatus(bill.getReceiveDate(), bill.getPayDate(), property.getOwe(), pay, true); - property.setExpiredDay(expiredDayAndStatus.getExpiredDay()); - property.setStatus(expiredDayAndStatus.getStatus()); - property.setPay(property.getPay() + pay); - property.setOwe(property.getOwe() - pay); - property.setPayDate(bill.getPayDate()); - property.setReceiveDate(bill.getReceiveDate()); - wxBillPropertyMapper.updateById(property); - if (pay > 0) { - addActionImport(property.getId(), bill.getPayWay(), bill.getPayDate(), user, bill.getPayStr()); - } - } - } else { - logger.error("账单导入失败"); - } - //记数 - stringRedisTemplate.opsForHash().increment(importKey, "processCount", 1); - stringRedisTemplate.expire(importKey, 10, TimeUnit.SECONDS); +// //租金 +// Integer billType = bill.getBillType(); +// if (billType.equals(EnumBillExcelTemplate.SHOP_RENT.getCode()) || billType.equals(EnumBillExcelTemplate.POINT_RENT.getCode())) { +// WxBillRent rentQuery = new WxBillRent(); +// rentQuery.updateTenantInfo(user); +// rentQuery.setMerchantId(bill.getMerchantId()); +// rentQuery.setStarttime(bill.getStarttime()); +// rentQuery.setEndtime(bill.getEndtime()); +// if (billType.equals(EnumBillExcelTemplate.SHOP_RENT.getCode())) { +// rentQuery.setRentShopType(EnumRentShopType.SHOP.getCode()); +// } else { +// rentQuery.setRentShopType(EnumRentShopType.POINT.getCode()); +// } +// rentQuery.setIsPreview(EnumIsPreview.NO.getCode()); +// WxBillRent rent = wxBillRentMapper.selectBillOne(rentQuery); +// if (rent != null && !rent.getStatus().equals(EnumBillRentStatus.PAID.getCode())) { +// long pay = new BigDecimal(bill.getPayStr()).multiply(new BigDecimal(100)).longValueExact(); +// WxBillRent expiredDayAndStatus = getExpiredDayAndStatus(bill.getReceiveDate(), bill.getPayDate(), rent.getOwe(), pay, true); +// rent.setExpiredDay(expiredDayAndStatus.getExpiredDay()); +// rent.setStatus(expiredDayAndStatus.getStatus()); +// rent.setPay(rent.getPay() + pay); +// rent.setOwe(rent.getOwe() - pay); +// rent.setPayDate(bill.getPayDate()); +// rent.setReceiveDate(bill.getReceiveDate()); +// wxBillRentMapper.updateById(rent); +// if (pay > 0) { +// addActionImport(rent.getId(), bill.getPayWay(), bill.getPayDate(), user, bill.getPayStr()); +// } +// } +// } else if (billType.equals(EnumBillExcelTemplate.SHOP_PROPERTY.getCode()) || billType.equals(EnumBillExcelTemplate.POINT_PROPERTY.getCode())) { +// WxBillProperty propertyQuery = new WxBillProperty(); +// propertyQuery.updateTenantInfo(user); +// propertyQuery.setMerchantId(bill.getMerchantId()); +// propertyQuery.setStarttime(bill.getStarttime()); +// propertyQuery.setEndtime(bill.getEndtime()); +// if (billType.equals(EnumBillExcelTemplate.SHOP_PROPERTY.getCode())) { +// propertyQuery.setRentShopType(EnumRentShopType.SHOP.getCode()); +// } else { +// propertyQuery.setRentShopType(EnumRentShopType.POINT.getCode()); +// } +// propertyQuery.setIsPreview(EnumIsPreview.NO.getCode()); +// WxBillProperty property = wxBillPropertyMapper.selectBillOne(propertyQuery); +// if (property != null && !property.getStatus().equals(EnumBillRentStatus.PAID.getCode())) { +// long pay = new BigDecimal(bill.getPayStr()).multiply(new BigDecimal(100)).longValueExact(); +// WxBillRent expiredDayAndStatus = getExpiredDayAndStatus(bill.getReceiveDate(), bill.getPayDate(), property.getOwe(), pay, true); +// property.setExpiredDay(expiredDayAndStatus.getExpiredDay()); +// property.setStatus(expiredDayAndStatus.getStatus()); +// property.setPay(property.getPay() + pay); +// property.setOwe(property.getOwe() - pay); +// property.setPayDate(bill.getPayDate()); +// property.setReceiveDate(bill.getReceiveDate()); +// wxBillPropertyMapper.updateById(property); +// if (pay > 0) { +// addActionImport(property.getId(), bill.getPayWay(), bill.getPayDate(), user, bill.getPayStr()); +// } +// } +// } else { +// logger.error("账单导入失败"); +// } +// //记数 +// stringRedisTemplate.opsForHash().increment(importKey, "processCount", 1); +// stringRedisTemplate.expire(importKey, 10, TimeUnit.SECONDS); } public void addActionImport(Long billId, String payWay, Date payDate, MallUserInfo user, String pay) { diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBillDepositServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBillDepositServiceImpl.java index ed67f63fe..57d3848a8 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillDepositServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillDepositServiceImpl.java @@ -1,5 +1,6 @@ package com.iformall.service.impl; +import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.ErrorCode; @@ -64,16 +65,16 @@ public class WxBillDepositServiceImpl implements WxBillDepositService { @Override public void computeTotalMoney(WxPayAccountBill wxPayAccountBill, WxBillDeposit deposit) { if (deposit.getReceivePay() != null) { - Long receivePayB = deposit.getReceivePay(); + String receivePayB = deposit.getReceivePay(); BigDecimal servicePay; if (deposit.getServiceChargePay() != null) { servicePay = new BigDecimal(deposit.getServiceChargePay()); } else { - servicePay = new BigDecimal(receivePayB).multiply(new BigDecimal(wxPayAccountBill.getServiceChargeRate())).divide(new BigDecimal(10000), 2, BigDecimal.ROUND_HALF_UP); + servicePay = new BigDecimal(receivePayB).multiply(new BigDecimal(wxPayAccountBill.getServiceChargeRate())).divide(new BigDecimal(10000), 10, BigDecimal.ROUND_HALF_UP); } - Long realReceivePay = servicePay.longValue() + receivePayB; - deposit.setRealReceivePay(realReceivePay); - deposit.setServiceChargePay(servicePay.intValue()); + BigDecimal realReceivePay = servicePay.add(new BigDecimal(receivePayB)); + deposit.setRealReceivePay(realReceivePay.toPlainString()); + deposit.setServiceChargePay(servicePay.toPlainString()); } } @@ -126,9 +127,9 @@ public class WxBillDepositServiceImpl implements WxBillDepositService { @Override public ResultData saveOrUpdate(WxBillDeposit record, MallUserInfo user) { - int receivepay = record.getReceivePay() == null ? 0 : record.getReceivePay().intValue(); - int pay = record.getPay()==null?0:record.getPay().intValue(); - if(pay>receivepay){ + String receivepay = StringUtils.isBlank(record.getReceivePay()) ? "0" : record.getReceivePay(); + String pay = StringUtils.isBlank(record.getPay()) ? "0":record.getPay(); + if(new BigDecimal(pay).compareTo(new BigDecimal(receivepay)) > 0){ return new ResultData(ErrorCode.BILL_PAY_ERROR.getCode(), "实收金额不能大于实际应收金额"); } Date date = new Date(); @@ -138,7 +139,7 @@ public class WxBillDepositServiceImpl implements WxBillDepositService { record.setId(idWorker.nextId()); record.setCreatetime(date); record.setUpdatetime(date); - record.setOwe(record.getReceivePay() - record.getPay()); + record.setOwe(new BigDecimal(receivepay).subtract(new BigDecimal(pay)).toPlainString()); record.setIsDel(EnumDelStatus.NOT_DEL.getCode()); try { wxBillDepositMapper.insert(record); @@ -153,10 +154,10 @@ public class WxBillDepositServiceImpl implements WxBillDepositService { if(wxBillDeposit==null){ return new ResultData(ErrorCode.BILL_RENT_DEPOSIT_IS_NOT_FOUND); } - Long addpay = wxBillDeposit.getPay(); + String addpay = wxBillDeposit.getPay(); wxBillDeposit.setPay(record.getPay()); wxBillDeposit.setReceivePay(record.getReceivePay()); - wxBillDeposit.setOwe(record.getReceivePay() - record.getPay()); + wxBillDeposit.setOwe(new BigDecimal(receivepay).subtract(new BigDecimal(pay)).toPlainString()); if (record.getPay().equals(record.getReceivePay())) { wxBillDeposit.setStatus(EnumBillRentStatus.PAID.getCode()); Date receiveDate = wxBillDeposit.getReceiveDate(); @@ -175,24 +176,24 @@ public class WxBillDepositServiceImpl implements WxBillDepositService { logger.error("更新租赁押金账单失败,e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } - //日志 - WxBillAction wxBillAction = new WxBillAction(); - wxBillAction.setBillId(wxBillDeposit.getId()); - String message = EnumBillPayWay.getEnum(record.getPayWay()).getMessage(); - String price = new BigDecimal(record.getPay() - addpay).divide(new BigDecimal(100)).toPlainString(); - wxBillAction.setDetails(message + price + "元"); - wxBillAction.setAction(EnumBillAction.OFFLINE_PAY.getCode()); - wxBillAction.setUserId(user.getId()); - wxBillAction.setUserName(user.getName()); - wxBillAction.setPhone(user.getPhone()); - wxBillAction.updateTenantInfo(user); - wxBillAction.setPayDate(wxBillDeposit.getPayDate()); - try { - wxBillActionService.save(wxBillAction); - } catch (Exception e) { - logger.error("添加租赁押金账单行为日志,e:" + e.getMessage()); - throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); - } +// //日志 +// WxBillAction wxBillAction = new WxBillAction(); +// wxBillAction.setBillId(wxBillDeposit.getId()); +// String message = EnumBillPayWay.getEnum(record.getPayWay()).getMessage(); +// String price = new BigDecimal(record.getPay() - addpay).divide(new BigDecimal(100)).toPlainString(); +// wxBillAction.setDetails(message + price + "元"); +// wxBillAction.setAction(EnumBillAction.OFFLINE_PAY.getCode()); +// wxBillAction.setUserId(user.getId()); +// wxBillAction.setUserName(user.getName()); +// wxBillAction.setPhone(user.getPhone()); +// wxBillAction.updateTenantInfo(user); +// wxBillAction.setPayDate(wxBillDeposit.getPayDate()); +// try { +// wxBillActionService.save(wxBillAction); +// } catch (Exception e) { +// logger.error("添加租赁押金账单行为日志,e:" + e.getMessage()); +// throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); +// } return new ResultData(Result.SUCCESS, "更新租赁押金账单成功", wxBillDeposit); } } @@ -268,7 +269,7 @@ public class WxBillDepositServiceImpl implements WxBillDepositService { return new ResultData(ErrorCode.BILL_RENT_DEPOSIT_IS_NOT_FOUND); } wxBillDeposit.setReceivePay(record.getReceivePay()); - wxBillDeposit.setOwe(record.getReceivePay() - record.getPay()); + wxBillDeposit.setOwe(new BigDecimal(record.getReceivePay()).subtract(new BigDecimal(record.getPay())).toPlainString()); wxBillDeposit.setUpdatetime(new Date()); try { wxBillDepositMapper.updateById(wxBillDeposit); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBillRentManageServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBillRentManageServiceImpl.java index d0c2319ab..a3e971b3a 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillRentManageServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillRentManageServiceImpl.java @@ -153,9 +153,9 @@ public class WxBillRentManageServiceImpl implements WxBillRentManageService { @Override public ResultData saveOrUpdate(WxBillRentManage record, MallUserInfo user) { - int receivepay = record.getRealReceivePay() == null ? 0 : record.getRealReceivePay().intValue(); - int pay = record.getPay()==null?0:record.getPay().intValue(); - if(pay>receivepay){ + String receivepay = StringUtils.isBlank(record.getRealReceivePay()) ? "0" : record.getRealReceivePay(); + String pay = StringUtils.isBlank(record.getPay()) ? "0" : record.getPay(); + if(new BigDecimal(pay).compareTo(new BigDecimal(receivepay)) > 0 ){ return new ResultData(ErrorCode.BILL_PAY_ERROR.getCode(), "实收金额不能大于实际应收总金额"); } Date date = new Date(); @@ -164,7 +164,7 @@ public class WxBillRentManageServiceImpl implements WxBillRentManageService { record.setId(idWorker.nextId()); record.setCreatetime(date); record.setUpdatetime(date); - record.setOwe(record.getReceivePay()-record.getPay()); + record.setOwe(new BigDecimal(receivepay).subtract(new BigDecimal(pay)).toPlainString()); record.setIsDel(EnumDelStatus.NOT_DEL.getCode()); try { wxBillRentManageMapper.insert(record); @@ -183,18 +183,18 @@ public class WxBillRentManageServiceImpl implements WxBillRentManageService { String price = ""; String message =""; if(record.getServiceChargePayUpdate() != null){ - Double l = Double.valueOf(record.getServiceChargePayUpdate())*100; - wxBillRent.setServiceChargePay(l.intValue()); - long latePayPrice = wxBillRent.getLatePayPrice() == null ? 0 : wxBillRent.getLatePayPrice(); - wxBillRent.setOwe(wxBillRent.getReceivePay() + latePayPrice + wxBillRent.getServiceChargePay() - wxBillRent.getPay()); + wxBillRent.setServiceChargePay(record.getServiceChargePayUpdate()); + String latePayPrice = StringUtils.isBlank(wxBillRent.getLatePayPrice()) ? "0" : wxBillRent.getLatePayPrice(); + wxBillRent.setOwe(new BigDecimal(wxBillRent.getReceivePay()).add(new BigDecimal(latePayPrice)).add(new BigDecimal(wxBillRent.getServiceChargePay())) + .subtract(new BigDecimal(wxBillRent.getPay())).toPlainString()); }else{ - Long addpay = wxBillRent.getPay(); + String addpay = wxBillRent.getPay(); wxBillRent.setLatePayRatio(record.getLatePayRatio()); wxBillRent.setLatePayTime(record.getLatePayTime()); wxBillRent.setLatePayStatus(record.getLatePayStatus()); wxBillRent.setPay(record.getPay()); wxBillRent.setReceivePay(record.getReceivePay()); - wxBillRent.setOwe(record.getRealReceivePay() - record.getPay()); + wxBillRent.setOwe(new BigDecimal(receivepay).subtract(new BigDecimal(pay)).toPlainString()); if (record.getPay().equals(record.getRealReceivePay())) { wxBillRent.setStatus(EnumBillRentStatus.PAID.getCode()); Date payDate = record.getPayDate(); @@ -208,7 +208,7 @@ public class WxBillRentManageServiceImpl implements WxBillRentManageService { wxBillRent.setPayDate(record.getPayDate()); wxBillRent.setUpdatetime(date); wxBillRent.setPayWay(record.getPayWay()); - price = new BigDecimal(record.getPay() - addpay).divide(new BigDecimal(100)).toPlainString(); + price = new BigDecimal(record.getPay()).subtract(new BigDecimal(addpay)).toPlainString(); } try { @@ -251,7 +251,7 @@ public class WxBillRentManageServiceImpl implements WxBillRentManageService { record.updateTenantInfo(tenantEntity); PageInfo page = getBillRentManageList(1, 1, record, wxPayAccountBill); WxBillRentManage rentManage = page.getList().get(0); - rentManage.setOwe(rentManage.getRealReceivePay() - rentManage.getPay()); + rentManage.setOwe(new BigDecimal(rentManage.getRealReceivePay()).subtract(new BigDecimal(rentManage.getPay())).toPlainString()); return rentManage; } @@ -265,21 +265,21 @@ public class WxBillRentManageServiceImpl implements WxBillRentManageService { public void computeTotalMoney(WxPayAccountBill wxPayAccountBill, WxBillRentManage rent) { if (rent.getReceivePay() != null) { if (rent.getLatePayPrice() == null) { - rent.setLatePayPrice(0L); + rent.setLatePayPrice("0"); } BigDecimal servicePay; if (rent.getServiceChargePay() != null) { servicePay = new BigDecimal(rent.getServiceChargePay()); } else { - servicePay = new BigDecimal(rent.getReceivePay()).multiply(new BigDecimal(wxPayAccountBill.getServiceChargeRate())).divide(new BigDecimal(10000), 2, BigDecimal.ROUND_HALF_UP); + servicePay = new BigDecimal(rent.getReceivePay()).multiply(new BigDecimal(wxPayAccountBill.getServiceChargeRate())).divide(new BigDecimal(10000), 10, BigDecimal.ROUND_HALF_UP); } - Long realReceivePay = servicePay.longValue() + rent.getLatePayPrice() + rent.getReceivePay(); - rent.setRealReceivePay(realReceivePay); - rent.setServiceChargePay(servicePay.intValue()); + BigDecimal realReceivePay = servicePay.add(new BigDecimal(rent.getLatePayPrice()).add(new BigDecimal(rent.getReceivePay()))); + rent.setRealReceivePay(realReceivePay.toPlainString()); + rent.setServiceChargePay(servicePay.toPlainString()); if (!rent.getStatus().equals(EnumBillRentStatus.NOT_PAID.getCode())) { - rent.setOwe(0L); + rent.setOwe("0"); } else { - rent.setOwe(realReceivePay - rent.getPay()); + rent.setOwe(realReceivePay.subtract(new BigDecimal(rent.getPay())).toPlainString()); } } } @@ -288,8 +288,8 @@ public class WxBillRentManageServiceImpl implements WxBillRentManageService { public ResultData updateLatePayMoney(WxBillRentManage record, MallUserInfo user) { WxBillRentManage rent = wxBillRentManageMapper.selectById(record.getId()); if(record.getLatePayMoneyUpdate() != null) { - rent.setLatePayPrice(Long.parseLong(record.getLatePayMoneyUpdate()) * 100); - rent.setOwe(rent.getReceivePay() + rent.getLatePayPrice() + rent.getServiceChargePay() - rent.getPay()); + rent.setLatePayPrice(record.getLatePayMoneyUpdate()); + rent.setOwe(new BigDecimal(rent.getReceivePay()).add(new BigDecimal(rent.getLatePayPrice())).add(new BigDecimal(rent.getServiceChargePay())).subtract(new BigDecimal(rent.getPay())).toPlainString()); final IdWorker idWorker = IdWorker.get(); WxBillAction billAction = new WxBillAction(); billAction.setId(idWorker.nextId()); 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 d5f4a9649..7f170403e 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillRentServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillRentServiceImpl.java @@ -76,7 +76,7 @@ public class WxBillRentServiceImpl implements WxBillRentService { public void computeTotalMoney(WxPayAccountBill wxPayAccountBill, WxBillRent rent) { if (rent.getReceivePay() != null) { if (rent.getLatePayPrice() == null) { - rent.setLatePayPrice(0L); + rent.setLatePayPrice("0"); } BigDecimal servicePay; if (rent.getServiceChargePay() != null) { 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 766b970f6..9e3c96dec 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java @@ -165,9 +165,9 @@ public class WxRentContractServiceImpl implements WxRentContractService { } //init rentPrice - if(StringUtils.isNotBlank(wxRentContract.getRentPrice())){ - wxRentContract.setRentPrice(Double.parseDouble(wxRentContract.getRentPrice())/100 + ""); - } + //if(StringUtils.isNotBlank(wxRentContract.getRentPrice())){ + //wxRentContract.setRentPrice(Double.parseDouble(wxRentContract.getRentPrice())/100 + ""); + //} //init 租赁单价 String rentInfo = wxRentContract.getRentInfo(); @@ -177,13 +177,13 @@ public class WxRentContractServiceImpl implements WxRentContractService { //查询rent_info 包括shopId for (int i = 0; i < size; i++) { JSONObject rentInfoObject = rentInfoArray.getJSONObject(i); - Double rentPrice = rentInfoObject.getDouble("rentPrice"); + BigDecimal rentPrice = rentInfoObject.getBigDecimal("rentPrice"); //wxRentContract.setShopId(rentInfoObject.getLong("shopId")); String price = wxRentContract.getPrice(); if(rentPrice == null){ if(StringUtils.isNotBlank(wxRentContract.getRentArea()) && !"0".equals(wxRentContract.getRentArea()) && !"0.00".equals(wxRentContract.getRentArea()) && !"0.0".equals(wxRentContract.getRentArea()) ) { Double rentArea = Double.parseDouble(wxRentContract.getRentArea()); - rentPrice = new BigDecimal(price).divide(new BigDecimal(rentArea)).setScale(wxRentContract.getDecimalSize(), BigDecimal.ROUND_HALF_UP).doubleValue(); + rentPrice = new BigDecimal(price).divide(new BigDecimal(rentArea),wxRentContract.getDecimalSize(), BigDecimal.ROUND_HALF_UP); rentInfoObject.put("rentPrice", rentPrice); } } @@ -194,8 +194,8 @@ public class WxRentContractServiceImpl implements WxRentContractService { if(StringUtils.isNotBlank(wxRentContract.getRentArea()) && !"0".equals(wxRentContract.getRentArea()) && !"0.00".equals(wxRentContract.getRentArea()) && !"0.0".equals(wxRentContract.getRentArea()) ) { String price = wxRentContract.getPrice(); Double rentArea = Double.parseDouble(wxRentContract.getRentArea()); - Double rentPrice = new BigDecimal(price).divide(new BigDecimal(rentArea)).setScale(wxRentContract.getDecimalSize(), BigDecimal.ROUND_HALF_UP).doubleValue(); - if(rentPrice > 0){ + BigDecimal rentPrice = new BigDecimal(price).divide(new BigDecimal(rentArea),wxRentContract.getDecimalSize(), BigDecimal.ROUND_HALF_UP); + if(rentPrice.compareTo(new BigDecimal(0)) > 0){ wxRentContract.setRentPrice(rentPrice.toString()); }else{ wxRentContract.setRentPrice("0"); @@ -740,7 +740,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { bill.setShopId(shopIds.get(0)); } setManageExpiredDay(bill,Calendar.MONTH,record.getReceivePeriod()); - if (bill.getReceivePay().equals(0L)) { + if (bill.getReceivePay().equals("0")) { bill.setStatus(EnumBillRentStatus.PAID.getCode()); bill.setPayDate(date); } @@ -1295,19 +1295,22 @@ public class WxRentContractServiceImpl implements WxRentContractService { return shopInfoStr; } - private String getRentPriceInfo(WxRentContract wxRentContract, long contractNeedPay){ - if(contractNeedPay == 0l){ + private String getRentPriceInfo(WxRentContract wxRentContract, BigDecimal contractNeedPay){ + if(contractNeedPay.compareTo(new BigDecimal(0)) == 0){ return null; } - long rentPrice = 0l, siteMoney = 0l, facilityMoney = 0l, administratorMoney = 0l,managementMoney = 0l; + BigDecimal rentPrice = new BigDecimal(0), siteMoney = new BigDecimal(0), facilityMoney = new BigDecimal(0), administratorMoney = new BigDecimal(0),managementMoney = new BigDecimal(0); if(!wxRentContract.getType().equals(EnumRentContractType.RENT_BY_JOINT.getCode()) && !wxRentContract.getType().equals(EnumRentContractType.RENT_BY_COUNT.getCode()) && !wxRentContract.getType().equals(EnumRentContractType.RENT_BY_CUSTOMIZE.getCode())){ if(wxRentContract.getRentInputWay().equals(EnumRentContractRentInputWay.PART.getCode())){ String rentInfo = wxRentContract.getRentInfo(); JSONArray rentInfoArray = JSONArray.parseArray(rentInfo); - long[] priceList = WxRentContractHelper.computeRentPriceByShop(wxRentContract).get(0); - long sum = Arrays.stream(priceList).sum(); + String[] priceList = WxRentContractHelper.computeRentPriceByShop(wxRentContract).get(0); + BigDecimal sum = new BigDecimal(0); + for (int i = 0 ; i < priceList.length ; i++) { + sum = sum.add(new BigDecimal(priceList[i])); + } int size = rentInfoArray.size(); for (int i = 0;i < size;i++) { BigDecimal a=new BigDecimal(0),b=new BigDecimal(0),c=new BigDecimal(0),d=new BigDecimal(0),e=new BigDecimal(0); @@ -1343,23 +1346,24 @@ public class WxRentContractServiceImpl implements WxRentContractService { } } - rentPrice += new BigDecimal(contractNeedPay).multiply(new BigDecimal(priceList[i])).divide(new BigDecimal(sum),2,BigDecimal.ROUND_HALF_UP) - .multiply(a).divide(a.add(b).add(c).add(d).add(e),2,BigDecimal.ROUND_HALF_UP).setScale(0,BigDecimal.ROUND_HALF_UP).longValue(); - siteMoney += new BigDecimal(contractNeedPay).multiply(new BigDecimal(priceList[i])).divide(new BigDecimal(sum),2,BigDecimal.ROUND_HALF_UP) - .multiply(b).divide(a.add(b).add(c).add(d).add(e),2,BigDecimal.ROUND_HALF_UP).setScale(0,BigDecimal.ROUND_HALF_UP).longValue(); - facilityMoney += new BigDecimal(contractNeedPay).multiply(new BigDecimal(priceList[i])).divide(new BigDecimal(sum),2,BigDecimal.ROUND_HALF_UP) - .multiply(c).divide(a.add(b).add(c).add(d).add(e),2,BigDecimal.ROUND_HALF_UP).setScale(0,BigDecimal.ROUND_HALF_UP).longValue(); - administratorMoney += new BigDecimal(contractNeedPay).multiply(new BigDecimal(priceList[i])).divide(new BigDecimal(sum),2,BigDecimal.ROUND_HALF_UP) - .multiply(d).divide(a.add(b).add(c).add(d).add(e),2,BigDecimal.ROUND_HALF_UP).setScale(0,BigDecimal.ROUND_HALF_UP).longValue(); - managementMoney += new BigDecimal(contractNeedPay).multiply(new BigDecimal(priceList[i])).divide(new BigDecimal(sum),2,BigDecimal.ROUND_HALF_UP) - .multiply(e).divide(a.add(b).add(c).add(d).add(e),2,BigDecimal.ROUND_HALF_UP).setScale(0,BigDecimal.ROUND_HALF_UP).longValue(); + rentPrice =rentPrice.add(contractNeedPay.multiply(new BigDecimal(priceList[i])).divide(sum,wxRentContract.getDecimalSize(),BigDecimal.ROUND_HALF_UP) + .multiply(a).divide(a.add(b).add(c).add(d).add(e),wxRentContract.getDecimalSize(),BigDecimal.ROUND_HALF_UP).setScale(wxRentContract.getDecimalSize(),BigDecimal.ROUND_HALF_UP)); + siteMoney =siteMoney.add(contractNeedPay.multiply(new BigDecimal(priceList[i])).divide(sum,wxRentContract.getDecimalSize(),BigDecimal.ROUND_HALF_UP) + .multiply(b).divide(a.add(b).add(c).add(d).add(e),wxRentContract.getDecimalSize(),BigDecimal.ROUND_HALF_UP).setScale(wxRentContract.getDecimalSize(),BigDecimal.ROUND_HALF_UP)); + facilityMoney =facilityMoney.add(contractNeedPay.multiply(new BigDecimal(priceList[i])).divide(sum,wxRentContract.getDecimalSize(),BigDecimal.ROUND_HALF_UP) + .multiply(c).divide(a.add(b).add(c).add(d).add(e),wxRentContract.getDecimalSize(),BigDecimal.ROUND_HALF_UP).setScale(wxRentContract.getDecimalSize(),BigDecimal.ROUND_HALF_UP)); + administratorMoney =administratorMoney.add(contractNeedPay.multiply(new BigDecimal(priceList[i])).divide(sum,wxRentContract.getDecimalSize(),BigDecimal.ROUND_HALF_UP) + .multiply(d).divide(a.add(b).add(c).add(d).add(e),wxRentContract.getDecimalSize(),BigDecimal.ROUND_HALF_UP).setScale(wxRentContract.getDecimalSize(),BigDecimal.ROUND_HALF_UP)); + managementMoney =managementMoney.add(contractNeedPay.multiply(new BigDecimal(priceList[i])).divide(sum,wxRentContract.getDecimalSize(),BigDecimal.ROUND_HALF_UP) + .multiply(e).divide(a.add(b).add(c).add(d).add(e),wxRentContract.getDecimalSize(),BigDecimal.ROUND_HALF_UP).setScale(wxRentContract.getDecimalSize(),BigDecimal.ROUND_HALF_UP)); } }else{ BigDecimal a=new BigDecimal(0),b=new BigDecimal(0),c=new BigDecimal(0),d=new BigDecimal(0),e=new BigDecimal(0); String rentPrice1 = wxRentContract.getRentPrice(); if(StringUtils.isNotBlank(rentPrice1)){ - a = new BigDecimal(rentPrice1).divide(new BigDecimal(100)); + //a = new BigDecimal(rentPrice1).divide(new BigDecimal(100)); + a = new BigDecimal(rentPrice1); } String otherRentPriceInfo1 = wxRentContract.getOtherRentPriceInfo(); if(StringUtils.isNotBlank(otherRentPriceInfo1)){ @@ -1384,11 +1388,11 @@ public class WxRentContractServiceImpl implements WxRentContractService { e = new BigDecimal(managementMoney1); } } - rentPrice = new BigDecimal(contractNeedPay).multiply(a).divide(a.add(b).add(c).add(d).add(e),2,BigDecimal.ROUND_HALF_UP).setScale(0,BigDecimal.ROUND_HALF_UP).longValue(); - siteMoney = new BigDecimal(contractNeedPay).multiply(b).divide(a.add(b).add(c).add(d).add(e),2,BigDecimal.ROUND_HALF_UP).setScale(0,BigDecimal.ROUND_HALF_UP).longValue(); - facilityMoney = new BigDecimal(contractNeedPay).multiply(c).divide(a.add(b).add(c).add(d).add(e),2,BigDecimal.ROUND_HALF_UP).setScale(0,BigDecimal.ROUND_HALF_UP).longValue(); - administratorMoney = new BigDecimal(contractNeedPay).multiply(d).divide(a.add(b).add(c).add(d).add(e),2,BigDecimal.ROUND_HALF_UP).setScale(0,BigDecimal.ROUND_HALF_UP).longValue(); - managementMoney = new BigDecimal(contractNeedPay).multiply(e).divide(a.add(b).add(c).add(d).add(e),2,BigDecimal.ROUND_HALF_UP).setScale(0,BigDecimal.ROUND_HALF_UP).longValue(); + rentPrice = contractNeedPay.multiply(a).divide(a.add(b).add(c).add(d).add(e),wxRentContract.getDecimalSize(),BigDecimal.ROUND_HALF_UP).setScale(wxRentContract.getDecimalSize(),BigDecimal.ROUND_HALF_UP); + siteMoney = contractNeedPay.multiply(b).divide(a.add(b).add(c).add(d).add(e),wxRentContract.getDecimalSize(),BigDecimal.ROUND_HALF_UP).setScale(wxRentContract.getDecimalSize(),BigDecimal.ROUND_HALF_UP); + facilityMoney = contractNeedPay.multiply(c).divide(a.add(b).add(c).add(d).add(e),wxRentContract.getDecimalSize(),BigDecimal.ROUND_HALF_UP).setScale(wxRentContract.getDecimalSize(),BigDecimal.ROUND_HALF_UP); + administratorMoney = contractNeedPay.multiply(d).divide(a.add(b).add(c).add(d).add(e),wxRentContract.getDecimalSize(),BigDecimal.ROUND_HALF_UP).setScale(wxRentContract.getDecimalSize(),BigDecimal.ROUND_HALF_UP); + managementMoney = contractNeedPay.multiply(e).divide(a.add(b).add(c).add(d).add(e),wxRentContract.getDecimalSize(),BigDecimal.ROUND_HALF_UP).setScale(wxRentContract.getDecimalSize(),BigDecimal.ROUND_HALF_UP); } }else{ rentPrice = contractNeedPay; @@ -1396,11 +1400,11 @@ public class WxRentContractServiceImpl implements WxRentContractService { Map resultMap = new HashedMap(); - resultMap.put("rentPrice",new BigDecimal(rentPrice).divide(new BigDecimal(100)).toString()); - resultMap.put("siteMoney",new BigDecimal(siteMoney).divide(new BigDecimal(100)).toString()); - resultMap.put("facilityMoney",new BigDecimal(facilityMoney).divide(new BigDecimal(100)).toString()); - resultMap.put("administratorMoney",new BigDecimal(administratorMoney).divide(new BigDecimal(100)).toString()); - resultMap.put("managementMoney",new BigDecimal(managementMoney).divide(new BigDecimal(100)).toString()); + resultMap.put("rentPrice",rentPrice.toString()); + resultMap.put("siteMoney",siteMoney.toString()); + resultMap.put("facilityMoney",facilityMoney.toString()); + resultMap.put("administratorMoney",administratorMoney.toString()); + resultMap.put("managementMoney",managementMoney.toString()); return JSON.toJSONString(resultMap); } @@ -1448,11 +1452,11 @@ public class WxRentContractServiceImpl implements WxRentContractService { for (int i = 0; i < billTimeVoList.size(); i++) { BillTimeVo billTimeVo = billTimeVoList.get(i); //计算金额 - BigDecimal needpay = new BigDecimal(0); + String needpay = "0"; //商业管理费 - BigDecimal bussinessManageFeeNeedpay = new BigDecimal(0); + String bussinessManageFeeNeedpay = "0"; //营业管理费 - BigDecimal operatingManageFeeNeedpay = new BigDecimal(0); + String operatingManageFeeNeedpay = "0"; boolean flag = false; //此处逻辑处理这一年和下一年交接那一期账单。 @@ -1465,16 +1469,16 @@ public class WxRentContractServiceImpl implements WxRentContractService { index++; //如果是计算账单金额&cross 拆分日期进行计算 if(billTimeVo.getEndDate().after(endDate)) { - long needpayFront = 0; - long needpayAfter = 0; + String needpayFront = "0"; + String needpayAfter = "0"; //商业管理费 - long bussinessManageFeeNeedpayFront = 0; - long bussinessManageFeeNeedpayAfter = 0; + String bussinessManageFeeNeedpayFront = "0"; + String bussinessManageFeeNeedpayAfter = "0"; //营业管理费 - long operatingManageFeeNeedpayFront = 0; - long operatingManageFeeNeedpayAfter = 0; + String operatingManageFeeNeedpayFront = "0"; + String operatingManageFeeNeedpayAfter = "0"; //同一天,算一天 if(sd.format(billTimeVo.getStartDate()).equals(sd.format(billTimeVo.getEndDate()))){ @@ -1534,9 +1538,9 @@ public class WxRentContractServiceImpl implements WxRentContractService { } } } - needpay = needpayFront+needpayAfter; - bussinessManageFeeNeedpay = bussinessManageFeeNeedpayFront + bussinessManageFeeNeedpayAfter; - operatingManageFeeNeedpay = operatingManageFeeNeedpayFront + operatingManageFeeNeedpayAfter; + needpay = new BigDecimal(needpayFront).add(new BigDecimal(needpayAfter)).toPlainString(); + bussinessManageFeeNeedpay = new BigDecimal(bussinessManageFeeNeedpayFront).add(new BigDecimal(bussinessManageFeeNeedpayAfter)).toPlainString(); + operatingManageFeeNeedpay = new BigDecimal(operatingManageFeeNeedpayFront).add(new BigDecimal(operatingManageFeeNeedpayAfter)).toPlainString(); flag = true; } if(index >= yearList.size()-1){ @@ -1565,13 +1569,13 @@ public class WxRentContractServiceImpl implements WxRentContractService { wxBillRent.setIsPreview(isPreview); wxBillRent.setId(idWorker.nextId()); wxBillRent.setRentContractId(wxRentContract.getId()); - wxBillRent.setPay(0L); + wxBillRent.setPay("0"); wxBillRent.setStarttime(billTimeVo.getStartDate()); wxBillRent.setEndtime(billTimeVo.getEndDate()); wxBillRent.setReceiveDate(billTimeVo.getReceiveDate()); wxBillRent.setContractNeedPay(needpay); - wxBillRent.setRentPriceInfo(getRentPriceInfo(wxRentContract,needpay)); + wxBillRent.setRentPriceInfo(getRentPriceInfo(wxRentContract,new BigDecimal(needpay))); wxBillRent.setNeedPay(needpay); wxBillRent.setOwe(needpay); wxBillRent.setReceivePay(needpay); @@ -1582,7 +1586,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { //截止收租日在当前时间之前 Date date = new Date(); setExpiredDay(wxBillRent,dayType,receivePeriod); - wxBillRent.setRevenue(0L); + wxBillRent.setRevenue("0"); wxBillRent.updateTenantInfo(wxRentContract); wxBillRent.setMerchantId(wxRentContract.getMerchantId()); wxBillRent.setUserId(userId); @@ -1598,19 +1602,20 @@ public class WxRentContractServiceImpl implements WxRentContractService { wxBillRent.setLatePayRatio(0); //计算手续费 - BigDecimal servicePay = new BigDecimal(wxBillRent.getReceivePay()).multiply(new BigDecimal(wxPayAccountBill.getServiceChargeRate())).divide(new BigDecimal(10000), 2, BigDecimal.ROUND_HALF_UP); - wxBillRent.setServiceChargePay(servicePay.intValue()); - wxBillRent.setOwe(wxBillRent.getReceivePay() + wxBillRent.getServiceChargePay()); + BigDecimal servicePay = new BigDecimal(wxBillRent.getReceivePay()).multiply(new BigDecimal(wxPayAccountBill.getServiceChargeRate())) + .divide(new BigDecimal(10000), wxRentContract.getDecimalSize(), BigDecimal.ROUND_HALF_UP); + wxBillRent.setServiceChargePay(servicePay.toPlainString()); + wxBillRent.setOwe(new BigDecimal(wxBillRent.getReceivePay()).add(new BigDecimal(wxBillRent.getServiceChargePay())).toPlainString()); resultList.add(wxBillRent); //商业管理费账单 - if (null != bussinessManagerPriceArrs && bussinessManagerPriceArrs.length > 0 && bussinessManageFeeNeedpay > 0) { - manageList.add(setManageRent(wxBillRent,EnumRentContractManageFeeType.RENT_BUSSINESS_MANAGE_FEE,bussinessManageFeeNeedpay,wxPayAccountBill.getServiceChargeRate(),dayType,receivePeriod)); + if (null != bussinessManagerPriceArrs && bussinessManagerPriceArrs.length > 0 && new BigDecimal(bussinessManageFeeNeedpay).compareTo(new BigDecimal(0)) > 0) { + manageList.add(setManageRent(wxRentContract.getDecimalSize(),wxBillRent,EnumRentContractManageFeeType.RENT_BUSSINESS_MANAGE_FEE,bussinessManageFeeNeedpay,wxPayAccountBill.getServiceChargeRate(),dayType,receivePeriod)); } //营业管理费账单 - if (null != operationManagerPriceArrs && operationManagerPriceArrs.length > 0 && operatingManageFeeNeedpay > 0 ) { - manageList.add(setManageRent(wxBillRent,EnumRentContractManageFeeType.RENT_OPERATING_MANAGE_FEE,operatingManageFeeNeedpay,wxPayAccountBill.getServiceChargeRate(),dayType,receivePeriod)); + if (null != operationManagerPriceArrs && operationManagerPriceArrs.length > 0 && new BigDecimal(operatingManageFeeNeedpay).compareTo(new BigDecimal(0)) > 0 ) { + manageList.add(setManageRent(wxRentContract.getDecimalSize(),wxBillRent,EnumRentContractManageFeeType.RENT_OPERATING_MANAGE_FEE,operatingManageFeeNeedpay,wxPayAccountBill.getServiceChargeRate(),dayType,receivePeriod)); } } @@ -1627,7 +1632,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { } - private WxBillRentManage setManageRent(WxBillRent wxBillRent,EnumRentContractManageFeeType feeType,Long needPay,Integer serviceChargeRate,int dayType,int receivePeriod) { + private WxBillRentManage setManageRent(Integer decimalSize,WxBillRent wxBillRent,EnumRentContractManageFeeType feeType,String needPay,Integer serviceChargeRate,int dayType,int receivePeriod) { WxBillRentManage manage = new WxBillRentManage(); manage.initByBillRent(wxBillRent); final IdWorker idWorker = IdWorker.get(); @@ -1638,9 +1643,9 @@ public class WxRentContractServiceImpl implements WxRentContractService { manage.setOwe(needPay); setManageExpiredDay(manage,dayType,receivePeriod); //计算手续费 - BigDecimal servicePay = new BigDecimal(needPay).multiply(new BigDecimal(serviceChargeRate)).divide(new BigDecimal(10000), 2, BigDecimal.ROUND_HALF_UP); - manage.setServiceChargePay(servicePay.intValue()); - manage.setOwe(needPay + manage.getServiceChargePay()); + BigDecimal servicePay = new BigDecimal(needPay).multiply(new BigDecimal(serviceChargeRate)).divide(new BigDecimal(10000), decimalSize, BigDecimal.ROUND_HALF_UP); + manage.setServiceChargePay(servicePay.toPlainString()); + manage.setOwe(new BigDecimal(needPay).add(new BigDecimal(manage.getServiceChargePay())).toPlainString()); return manage; } @@ -1949,7 +1954,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { //建立账单 //自定义账单无单价,为能生成账单,设置该值 if (EnumRentContractType.RENT_BY_CUSTOMIZE.getCode() == record.getType()) { - record.setPrice(1L); + record.setPrice("0.01"); } if (record != null && record.getMerchantId() != null && @@ -1963,7 +1968,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { // WxMerchant wxMerchant = new WxMerchant(); // wxMerchant.setId(record.getMerchantId()); // wxMerchant.updateTenantInfo(record); - if(record.getDeposit() > 0) { + if(new BigDecimal(record.getDeposit()).compareTo(new BigDecimal(0)) > 0) { //押金 buildDeposit( null, id); } @@ -2766,7 +2771,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { public void areaWay(WxRentContract wxRentContract, Map result, Integer lease, int extralease, int extracount, int paycount, int index, int count, BigDecimal rentPrice) { - long[] priceArrs = new long[]{}; + String[] priceArrs = new String[]{}; List adjustRatioList = new ArrayList<>(); adjustRatioList.add(0, "0"); if (wxRentContract.getRentShopType().equals(EnumRentShopType.SHOP.getCode())) { @@ -2784,16 +2789,16 @@ public class WxRentContractServiceImpl implements WxRentContractService { } adjustRatioList.add(adjustRatioStr.toString()); } - List priceList = WxRentContractHelper.computeRentPriceByShop(wxRentContract); + List priceList = WxRentContractHelper.computeRentPriceByShop(wxRentContract); int size = priceList.size(); - priceArrs = new long[size]; + priceArrs = new String[size]; for (int i = 0; i < size; i++) { - long[] priceInt = priceList.get(i); - long sum = 0; - for (long p : priceInt) { - sum += p; + String[] priceInt = priceList.get(i); + BigDecimal sum = new BigDecimal(0); + for (String p : priceInt) { + sum = sum.add(new BigDecimal(p)); } - priceArrs[i] = sum; + priceArrs[i] = sum.toPlainString(); } } else { String adjustRatio = wxRentContract.getAdjustRatio(); @@ -2832,15 +2837,15 @@ public class WxRentContractServiceImpl implements WxRentContractService { result.put("rentalEndDateDay" + i, enddate.substring(8)); if (wxRentContract.getRentShopType().equals(EnumRentShopType.SHOP.getCode())) { - rentPrice = new BigDecimal(priceArrs[i]).divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_EVEN); + rentPrice = new BigDecimal(priceArrs[i]).divide(new BigDecimal(100)).setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_EVEN); result.put("priceRentUpper" + i, PriceUtil.digitUppercase(rentPrice.doubleValue())); - result.put("priceRent" + i, rentPrice.doubleValue()); + result.put("priceRent" + i, rentPrice.toPlainString()); result.put("adjustRatio" + i, adjustRatioList.get(i)); } else { rentPrice = rentPrice.multiply(new BigDecimal(adjustRatioList.get(i))) - .add(rentPrice).setScale(2, RoundingMode.HALF_EVEN); + .add(rentPrice).setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_EVEN); result.put("priceRentUpper" + i, PriceUtil.digitUppercase(rentPrice.doubleValue())); - result.put("priceRent" + i, rentPrice.doubleValue()); + result.put("priceRent" + i, rentPrice.toPlainString()); result.put("adjustRatio" + i, adjustRatioList.get(i)); } result.put("payRatio" + i, payRatioStr); @@ -2871,14 +2876,14 @@ public class WxRentContractServiceImpl implements WxRentContractService { result.put("rentalEndDateDay" + count, enddate.substring(8)); if (wxRentContract.getRentShopType().equals(EnumRentShopType.SHOP.getCode())) { - rentPrice = new BigDecimal(priceArrs[count]).divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_EVEN); + rentPrice = new BigDecimal(priceArrs[count]).divide(new BigDecimal(100)).setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_EVEN); result.put("priceRentUpper" + count, PriceUtil.digitUppercase(rentPrice.doubleValue())); - result.put("priceRent" + count, rentPrice.doubleValue()); + result.put("priceRent" + count, rentPrice.toPlainString()); } else { rentPrice = rentPrice.multiply(new BigDecimal(adjustRatioList.get(count))) - .add(rentPrice).setScale(2, RoundingMode.HALF_EVEN); + .add(rentPrice).setScale(wxRentContract.getDecimalSize(), RoundingMode.HALF_EVEN); result.put("priceRentUpper" + count, PriceUtil.digitUppercase(rentPrice.doubleValue())); - result.put("priceRent" + count, rentPrice.doubleValue()); + result.put("priceRent" + count, rentPrice.toPlainString()); } } @@ -3266,44 +3271,43 @@ public class WxRentContractServiceImpl implements WxRentContractService { WxBillRent br = billList.get(j); try { //判断账单是否跨月,如果跨月,需要按照每月来查询解单金额 - int needPay = 0 ; + BigDecimal needPay = new BigDecimal(0) ; int months = DateUtils.monthsBetween(br.getStarttime(), br.getEndtime()); if ( months > 0 ) { for (int i = 0 ; i <= months ; i++ ) { - int _money = 0; + BigDecimal _money = new BigDecimal(0); if (i == 0 ) { - _money = sumTradeDailyBySameMonthDay(bq, wxRentContract.getMerchantId(), br.getStarttime(), + _money = sumTradeDailyBySameMonthDay(wxRentContract.getDecimalSize(),bq, wxRentContract.getMerchantId(), br.getStarttime(), DateUtils.getLastDayForMonth(br.getStarttime())); }else if (i == months){ - _money = sumTradeDailyBySameMonthDay(bq, wxRentContract.getMerchantId(), + _money = sumTradeDailyBySameMonthDay(wxRentContract.getDecimalSize(),bq, wxRentContract.getMerchantId(), DateUtils.getFirstDayForCurrMonth(DateUtils.getTimeAfterMonths(i,br.getStarttime())), DateUtils.getDayEnd(DateUtils.getTimeAfterDays(-1, br.getEndtime()))); }else { Date _date = DateUtils.getTimeAfterMonths(i,br.getStarttime()); - _money = sumTradeDailyBySameMonthDay(bq, wxRentContract.getMerchantId(), + _money = sumTradeDailyBySameMonthDay(wxRentContract.getDecimalSize(),bq, wxRentContract.getMerchantId(), DateUtils.getFirstDayForCurrMonth(_date), DateUtils.getLastDayForMonth(_date)); } - needPay = needPay + _money; + needPay = needPay.add(_money); } }else { //同一个月 //合同账单结束的时间是00:00:00,取日期要取前一天 - needPay = sumTradeDailyBySameMonthDay(bq, wxRentContract.getMerchantId(), + needPay = sumTradeDailyBySameMonthDay(wxRentContract.getDecimalSize(),bq, wxRentContract.getMerchantId(), br.getStarttime(), DateUtils.getDayEnd(br.getEndtime())); } - needPay = new BigDecimal(needPay).multiply(new BigDecimal(wxRentContract.getPayRatio())) - .divide(new BigDecimal(10000), 2, BigDecimal.ROUND_HALF_UP).intValue(); - Long oldNeedPay = br.getNeedPay(); - if (needPay > br.getNeedPay()) { - Long newPay = Long.parseLong(String.valueOf(needPay)); - br.setNeedPay(newPay); - br.setOwe(newPay); - br.setReceivePay(newPay); + needPay = needPay.multiply(new BigDecimal(wxRentContract.getPayRatio())) + .divide(new BigDecimal(10000), wxRentContract.getDecimalSize(), BigDecimal.ROUND_HALF_UP); + String oldNeedPay = br.getNeedPay(); + if (needPay.compareTo(new BigDecimal(br.getNeedPay())) > 0) { + br.setNeedPay(needPay.toPlainString()); + br.setOwe(needPay.toPlainString()); + br.setReceivePay(needPay.toPlainString()); br.setUpdatetime(new Date()); - BigDecimal servicePay = new BigDecimal(br.getReceivePay()).multiply(new BigDecimal(wxPayAccountBill.getServiceChargeRate())).divide(new BigDecimal(10000), 2, BigDecimal.ROUND_HALF_UP); - br.setServiceChargePay(servicePay.intValue()); - br.setOwe(br.getReceivePay() + br.getServiceChargePay()); + BigDecimal servicePay = new BigDecimal(br.getReceivePay()).multiply(new BigDecimal(wxPayAccountBill.getServiceChargeRate())).divide(new BigDecimal(10000), wxRentContract.getDecimalSize(), BigDecimal.ROUND_HALF_UP); + br.setServiceChargePay(servicePay.toPlainString()); + br.setOwe(new BigDecimal(br.getReceivePay()).add(new BigDecimal(br.getServiceChargePay())).toPlainString()); br.setComments("原金额["+oldNeedPay+"(分)]小于解单金额["+needPay+"(分)],系统自动更新"); wxBillRentMapper.updateById(br); } @@ -3314,7 +3318,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { } } - private int sumTradeDailyBySameMonthDay(TenantEntity tenantEntity,Long merchantId,Date begin ,Date end) { + private BigDecimal sumTradeDailyBySameMonthDay(Integer decimalSize,TenantEntity tenantEntity,Long merchantId,Date begin ,Date end) { //如果有按月的,则取按月来算 WxMerchantTradeDaily tdq = new WxMerchantTradeDaily(); tdq.updateTenantInfo(tenantEntity); @@ -3328,7 +3332,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { Date _lastDay = DateUtils.getLastDayForMonth(begin); if (begin.equals(_fistDay) && end.equals(_lastDay)) { //满月 - return monthSums; + return new BigDecimal(monthSums); }else { //根据天数计算 int monthDays = DateUtils.daysBetween(_fistDay, _lastDay)+1; @@ -3336,8 +3340,8 @@ public class WxRentContractServiceImpl implements WxRentContractService { if (_days == 0) { _days = 1;//当天 } - BigDecimal servicePay = new BigDecimal(monthSums).multiply(new BigDecimal(_days)).divide(new BigDecimal(monthDays), 2, BigDecimal.ROUND_HALF_UP); - return servicePay.intValue(); + BigDecimal servicePay = new BigDecimal(monthSums).multiply(new BigDecimal(_days)).divide(new BigDecimal(monthDays), decimalSize, BigDecimal.ROUND_HALF_UP); + return servicePay; } }else { WxMerchantTradeDaily tdq1 = new WxMerchantTradeDaily(); @@ -3347,7 +3351,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { tdq1.setStartTime(DateUtils.format(begin)); tdq1.setEndTime(DateUtils.format(end)); String sumMoney = wxMerchantTradeDailyMapper.findSumMoney(tdq1); - return Integer.parseInt(sumMoney); + return new BigDecimal(sumMoney); } } } diff --git a/mallinkService/src/main/java/com/iformall/utils/PriceUtilV2.java b/mallinkService/src/main/java/com/iformall/utils/PriceUtilV2.java index 2fc93ad77..8fef1dfe3 100644 --- a/mallinkService/src/main/java/com/iformall/utils/PriceUtilV2.java +++ b/mallinkService/src/main/java/com/iformall/utils/PriceUtilV2.java @@ -161,6 +161,8 @@ public class PriceUtilV2 { BigDecimal a = new BigDecimal(10); a = a.add(new BigDecimal(10)); System.out.println(a); + BigDecimal b = a.divide(new BigDecimal(3), 3, BigDecimal.ROUND_HALF_UP); + System.out.println(b.toPlainString()); } diff --git a/mallinkService/src/main/resources/mapper/WxBillRentMapper.xml b/mallinkService/src/main/resources/mapper/WxBillRentMapper.xml index d49a8b4d7..180a7631e 100644 --- a/mallinkService/src/main/resources/mapper/WxBillRentMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxBillRentMapper.xml @@ -18,7 +18,7 @@ - +