Browse Source

fix

release_toaliyun_real
winter 1 year ago
parent
commit
bf216778b0
5 changed files with 75 additions and 33 deletions
  1. +1
    -0
      mallinkAdmin/src/main/java/com/iformall/controller/contract/WxRentContractController.java
  2. +2
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxAllBill.java
  3. +8
    -3
      mallinkService/src/main/java/com/iformall/service/helper/WxRentContractHelper.java
  4. +63
    -30
      mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java
  5. +1
    -0
      mallinkService/src/main/resources/mapper/WxAllBillMapper.xml

+ 1
- 0
mallinkAdmin/src/main/java/com/iformall/controller/contract/WxRentContractController.java View File

@@ -833,6 +833,7 @@ public class WxRentContractController extends WxContractBaseController {
bq.setIsPreview(EnumYesOrNo.NO.getCode());
bq.setBillType(EnumBillAllType.RENT.getCode());
bq.setEnergyFeesId(EnumBillAllType.RENT.getEnergyFeesId());
bq.setNoExtraCreateFrom(EnumYesOrNo.YES.getCode());
bq.setSortColumn(" starttime asc");
List<WxAllBill> billList = wxAllBillService.list(bq);


+ 2
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxAllBill.java View File

@@ -357,4 +357,6 @@ public class WxAllBill extends TenantEntity {
public Date salesTime;
@TableField(exist = false)
public String moneyChangeDetail;
@TableField(exist = false)
public Integer noExtraCreateFrom;
}

+ 8
- 3
mallinkService/src/main/java/com/iformall/service/helper/WxRentContractHelper.java View File

@@ -596,17 +596,22 @@ public class WxRentContractHelper {
}
public static void main(String[] args) {
Date start = DateUtils.str2Date("2026-08-10 00:00:00").getTime();
Date end = DateUtils.str2Date("2026-09-30 23:59:59").getTime();
Date start = DateUtils.str2Date("2024-08-01 00:00:00").getTime();
Date end = DateUtils.str2Date("2024-08-01 23:59:59").getTime();
int[] diffs = DateUtils.getDiff(start, end);
System.out.println(diffs[0]+">>>"+diffs[1]);
Date d1 = DateUtils.str2Date("2026-08-09 00:00:00").getTime();
Date d2 = DateUtils.str2Date("2026-09-08 00:00:00").getTime();
List<Date> f1 = DateUtils.getAllDays(d1, d2);
Date endMonthDate = DateUtils.getDaySet(start, Calendar.MONTH, 2);
System.out.println(DateUtils.date2String(endMonthDate));
// Date d3 = DateUtils.str2Date("2024-09-01 00:00:00").getTime();
// Date d4 = DateUtils.str2Date("2024-09-30 00:00:00").getTime();
// f1.addAll(DateUtils.getAllDays(d3, d4));
System.out.println(getValidDays(start,end,f1));
// System.out.println(getValidDays(start,end,f1));
// Date start = DateUtils.str2Date("2024-08-05 00:00:00").getTime();
// Date end = DateUtils.str2Date("2025-11-04 23:59:59").getTime();
//


+ 63
- 30
mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java View File

@@ -2324,9 +2324,20 @@ public class WxRentContractServiceImpl implements WxRentContractService {
}
private BigDecimal calcuteUnitPrice(Date startDate,Date endDate,BigDecimal salesDeciaml,Integer priceUnit,
Integer dayPriceCalcute,Integer mothAverageDays) {
Integer dayPriceCalcute,Integer mothAverageDays,Integer receivePeriod,Integer receivePeriodUnit) {
BigDecimal unitPrice = new BigDecimal(0);
int[] diffs = DateUtils.getDiff(startDate, endDate);
//是否正好为一个周期
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
Calendar instance = Calendar.getInstance();
instance.setTime(startDate);
instance = EnumContractReceivePeriodUnit.getAfterCalendarDay(instance, receivePeriod, receivePeriodUnit);
boolean isPeriodEnd= false;
if(sd.format(instance.getTime()).equals(sd.format(endDate))){
isPeriodEnd = true;
}
Date realEndStart = DateUtils.getDaySet(endDate, Calendar.SECOND, 1);
int[] diffs = DateUtils.getDiff(startDate, realEndStart);
if (priceUnit.equals(EnumPriceUnit.D.getCode())){
int allDays = 0;
if (dayPriceCalcute.intValue() == EnumRentDayPriceCalcute.AVERAGE_DAYS.getCode()) {
@@ -2337,33 +2348,50 @@ public class WxRentContractServiceImpl implements WxRentContractService {
//每一天的单价
unitPrice = salesDeciaml.divide(new BigDecimal(allDays),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
}else if(EnumPriceUnit.Y.getCode().equals(priceUnit)) {
//每一年的单价
BigDecimal years = new BigDecimal(diffs[0]/12);
int extraMonths = diffs[0]%12;
if (dayPriceCalcute.intValue() == EnumRentDayPriceCalcute.AVERAGE_DAYS.getCode()) {
int days = extraMonths*mothAverageDays + diffs[1];
years = years.add(new BigDecimal(days).divide(new BigDecimal(12*mothAverageDays),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP));
//按照当前金额,当前时间区间,计算每一年的单价
//如果是一个周期结束,则
if (isPeriodEnd) {
//判断是不是一个完整的周期
//按月,那就得、12
unitPrice = salesDeciaml.multiply(new BigDecimal(12)).divide(new BigDecimal(diffs[0]),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
}else {
int days = DateUtils.daysBetween(startDate, endDate)+1;
years = years.add(new BigDecimal(days).divide(new BigDecimal(365),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP));
}
//每一天的单价
unitPrice = salesDeciaml.divide(years,Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
//当前时间有多少个月
int months = diffs[0];
int days = diffs[1];
//计算当前区间算多少年
if (dayPriceCalcute.intValue() == EnumRentDayPriceCalcute.AVERAGE_DAYS.getCode()) {
BigDecimal _months = new BigDecimal(days).divide(new BigDecimal(mothAverageDays),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP).add(new BigDecimal(months));
unitPrice = salesDeciaml.multiply(new BigDecimal(12)).divide(_months,Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
}else {
Date lastMonthStartDate = DateUtils.getDaySet(startDate, Calendar.MONTH, months);
int realDays = DateUtils.daysBetween(lastMonthStartDate, endDate)+1;
Date extraStartDayMonthStart = DateUtils.getFirstDayForCurrMonth(lastMonthStartDate);
Date extraStartDayMonthEnd = DateUtils.getLastDayForMonth(lastMonthStartDate);
int monthDays = DateUtils.daysBetween(extraStartDayMonthStart, extraStartDayMonthEnd)+1;
BigDecimal _months = new BigDecimal(realDays).divide(new BigDecimal(monthDays),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP).add(new BigDecimal(months));
unitPrice = salesDeciaml.multiply(new BigDecimal(12)).divide(_months,Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
}
}
}else if(EnumPriceUnit.M.getCode().equals(priceUnit)) {
//每一月的单价
BigDecimal months = new BigDecimal(diffs[0]);
if (dayPriceCalcute.intValue() == EnumRentDayPriceCalcute.AVERAGE_DAYS.getCode()) {
months = months.add(new BigDecimal(diffs[1]).divide(new BigDecimal(mothAverageDays),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP));
if (isPeriodEnd) {
//按月
unitPrice = salesDeciaml.divide(new BigDecimal(diffs[0]),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
}else {
Date extraStartDay = DateUtils.getTimeAfterMonths(diffs[0], startDate);
int extraDays = DateUtils.daysBetween(extraStartDay, endDate)+1;
Date extraStartDayMonthStart = DateUtils.getFirstDayForCurrMonth(extraStartDay);
Date extraStartDayMonthEnd = DateUtils.getLastDayForMonth(extraStartDay);
int monthDays = DateUtils.daysBetween(extraStartDayMonthStart, extraStartDayMonthEnd)+1;
months = months.add(new BigDecimal(extraDays).divide(new BigDecimal(monthDays),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP));
}
//每一天的单价
unitPrice = salesDeciaml.divide(months,Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
//每一月的单价
BigDecimal months = new BigDecimal(diffs[0]);
if (dayPriceCalcute.intValue() == EnumRentDayPriceCalcute.AVERAGE_DAYS.getCode()) {
months = months.add(new BigDecimal(diffs[1]).divide(new BigDecimal(mothAverageDays),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP));
}else {
Date extraStartDay = DateUtils.getTimeAfterMonths(diffs[0], startDate);
int extraDays = DateUtils.daysBetween(extraStartDay, realEndStart)+1;
Date extraStartDayMonthStart = DateUtils.getFirstDayForCurrMonth(extraStartDay);
Date extraStartDayMonthEnd = DateUtils.getLastDayForMonth(extraStartDay);
int monthDays = DateUtils.daysBetween(extraStartDayMonthStart, extraStartDayMonthEnd)+1;
months = months.add(new BigDecimal(extraDays).divide(new BigDecimal(monthDays),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP));
}
//每一天的单价
unitPrice = salesDeciaml.divide(months,Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
}
}
return unitPrice;
}
@@ -2372,7 +2400,7 @@ public class WxRentContractServiceImpl implements WxRentContractService {
private BigDecimal calcuteRentPropertyPrice(WxRentContract rentcontract,WxPropertyContract propertyContract,Date startDate,Date endDate,BigDecimal money) {
//计算物业费的单价
BigDecimal unitPropertyPrice = calcuteUnitPrice(startDate, endDate,money,
propertyContract.getPriceUnit(),propertyContract.getDayPriceCalcute(),propertyContract.getMonthAverageDays());
propertyContract.getPriceUnit(),propertyContract.getDayPriceCalcute(),propertyContract.getMonthAverageDays(),propertyContract.getReceivePeriod(),propertyContract.getReceivePeriodUnit());
//如果租金是按天计算
if (rentcontract.getPriceUnit().equals(EnumPriceUnit.D.getCode())){
//物业也是按天
@@ -2502,7 +2530,7 @@ public class WxRentContractServiceImpl implements WxRentContractService {
//根据销售额来计算价格均值
BigDecimal unitRevenuePrice = calcuteUnitPrice(rentBill.getStarttime(), rentBill.getEndtime(),salesDeciaml,
rentcontract.getPriceUnit(),rentcontract.getDayPriceCalcute(),rentcontract.getMonthAverageDays());
rentcontract.getPriceUnit(),rentcontract.getDayPriceCalcute(),rentcontract.getMonthAverageDays(),rentcontract.getReceivePeriod(),rentcontract.getReceivePeriodUnit());
//设置保底营业额
rentcontract.setRevenue(unitRevenuePrice.toPlainString());
//联营扣点
@@ -2657,9 +2685,9 @@ public class WxRentContractServiceImpl implements WxRentContractService {
if (yearDays == 365) {
}else {
if (rentcontract.getDayPriceCalcute().intValue() == EnumRentDayPriceCalcute.AVERAGE_DAYS.getCode()) {
jumpRevenuePay = jumpRevenuePay.multiply(new BigDecimal(yearDays)).divide(new BigDecimal(12*rentcontract.getMonthAverageDays()),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
jumpRevenuePay = jumpRevenuePay.multiply(new BigDecimal(yearDays)).divide(new BigDecimal(12*rentcontract.getMonthAverageDays()),rentcontract.getDecimalSize(),BigDecimal.ROUND_HALF_UP);
}else {
jumpRevenuePay = jumpRevenuePay.multiply(new BigDecimal(yearDays)).divide(new BigDecimal(365),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
jumpRevenuePay = jumpRevenuePay.multiply(new BigDecimal(yearDays)).divide(new BigDecimal(365),rentcontract.getDecimalSize(),BigDecimal.ROUND_HALF_UP);
}
}
@@ -2745,4 +2773,9 @@ public class WxRentContractServiceImpl implements WxRentContractService {
public List<WxRentContractRevenueJump> findJumpList(WxRentContractRevenueJump jump) {
return wxRentContractRevenueJumpMapper.findList(jump);
}
public static void main(String[] args) {
Date date = DateUtils.stringToDate("2025-04-01 00:00:00",DateUtils.DATE_TIME_PATTERN);
System.out.println(date.getTime());
}
}

+ 1
- 0
mallinkService/src/main/resources/mapper/WxAllBillMapper.xml View File

@@ -73,6 +73,7 @@
<if test=" null != starttimeEqual">and `starttime` = #{starttimeEqual}</if>
<if test=" null != endtimeEqual">and `endtime` = #{endtimeEqual}</if>
<if test=" null != extraCreateFrom">and `extra_create_from` = #{extraCreateFrom}</if>
<if test=" null != noExtraCreateFrom">and `extra_create_from` is null</if>
<if test=" null != month and '' != month">
and date_format(starttime,'%Y-%m') &lt;= #{month} and date_format(endtime,'%Y-%m') &gt;= #{month}
</if>


Loading…
Cancel
Save