Просмотр исходного кода

[租赁合同][修改][字段调整及生成账单]

release_toaliyun_real
gongbiao 7 лет назад
Родитель
Сommit
b35e64d400
3 измененных файлов: 168 добавлений и 81 удалений
  1. +4
    -4
      mallinkService/src/main/java/com/iformall/domain/po/WxRentContract.java
  2. +37
    -0
      mallinkService/src/main/java/com/iformall/enums/EnumRentContractAdjustPeriod.java
  3. +127
    -77
      mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java

+ 4
- 4
mallinkService/src/main/java/com/iformall/domain/po/WxRentContract.java Просмотреть файл

@@ -163,9 +163,9 @@ public class WxRentContract implements Serializable {
private Integer type; private Integer type;


@io.swagger.annotations.ApiModelProperty(value = "调整比例", name = "adjustRatio") @io.swagger.annotations.ApiModelProperty(value = "调整比例", name = "adjustRatio")
private Integer adjustRatio;
private String adjustRatio;


@io.swagger.annotations.ApiModelProperty(value = "调整周期", name = "adjustPeriod")
@io.swagger.annotations.ApiModelProperty(value = "计租周期 1日2月", name = "adjustPeriod")
private Integer adjustPeriod; private Integer adjustPeriod;


@io.swagger.annotations.ApiModelProperty(value = "支付比例", name = "payRatio") @io.swagger.annotations.ApiModelProperty(value = "支付比例", name = "payRatio")
@@ -408,11 +408,11 @@ public class WxRentContract implements Serializable {
this.type = type; this.type = type;
} }


public Integer getAdjustRatio() {
public String getAdjustRatio() {
return adjustRatio; return adjustRatio;
} }


public void setAdjustRatio(Integer adjustRatio) {
public void setAdjustRatio(String adjustRatio) {
this.adjustRatio = adjustRatio; this.adjustRatio = adjustRatio;
} }




+ 37
- 0
mallinkService/src/main/java/com/iformall/enums/EnumRentContractAdjustPeriod.java Просмотреть файл

@@ -0,0 +1,37 @@
package com.iformall.enums;


/**
* @author gongbiao
*/

public enum EnumRentContractAdjustPeriod {

ADJUST_PERIOD_DAY(1, "按日计租"),
ADJUST_PERIOD_MONTH(2, "按月计租"),;

public static EnumRentContractAdjustPeriod getEnum(Integer code) {
for (EnumRentContractAdjustPeriod value : values()) {
if (value.getCode().equals(code)) {
return value;
}
}
return null;
}

private Integer code;
private String message;

EnumRentContractAdjustPeriod(Integer code, String message) {
this.code = code;
this.message = message;
}

public Integer getCode() {
return code;
}

public String getMessage() {
return message;
}
}

+ 127
- 77
mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java Просмотреть файл

@@ -1,6 +1,7 @@
package com.iformall.service.impl; package com.iformall.service.impl;


import cn.afterturn.easypoi.word.WordExportUtil; import cn.afterturn.easypoi.word.WordExportUtil;
import com.alibaba.fastjson.JSONArray;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.iformall.common.ErrorCode; import com.iformall.common.ErrorCode;
@@ -282,6 +283,8 @@ public class WxRentContractServiceImpl implements WxRentContractService {
int needpay = wxRentContract.getDeposit(); int needpay = wxRentContract.getDeposit();
wxBillDeposit.setNeedPay(needpay); wxBillDeposit.setNeedPay(needpay);
wxBillDeposit.setOwe(needpay); wxBillDeposit.setOwe(needpay);
//找到计租方式
int dayType = wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_MONTH.getCode()) ? Calendar.DAY_OF_MONTH : Calendar.MONTH;


Date date = new Date(); Date date = new Date();
Calendar instance = Calendar.getInstance(); Calendar instance = Calendar.getInstance();
@@ -298,7 +301,7 @@ public class WxRentContractServiceImpl implements WxRentContractService {
//账单结束时间 //账单结束时间
instance.clear(); instance.clear();
instance.setTime(wxBillDeposit.getReceiveDate()); instance.setTime(wxBillDeposit.getReceiveDate());
instance.add(Calendar.MONTH, wxRentContract.getLease());
instance.add(dayType, wxRentContract.getLease());
wxBillDeposit.setEndtime(instance.getTime()); wxBillDeposit.setEndtime(instance.getTime());


//截止收租日在当前时间之前 //截止收租日在当前时间之前
@@ -342,27 +345,86 @@ public class WxRentContractServiceImpl implements WxRentContractService {
wxRentContract = list.get(0); wxRentContract = list.get(0);
int receivePeriod = wxRentContract.getReceivePeriod().intValue(); int receivePeriod = wxRentContract.getReceivePeriod().intValue();
Integer lease = wxRentContract.getLease(); Integer lease = wxRentContract.getLease();
int extralease = lease % receivePeriod;
int extracount = extralease > 0 ? 1 : 0;
int paycount = lease / receivePeriod + extracount;
int index = paycount - 1;
final IdWorker idWorker = IdWorker.get();
for (int i = 0; i < paycount; i++) {
WxBillRent wxBillRent = new WxBillRent();
wxBillRent.setId(idWorker.nextId());
wxBillRent.setRentContractId(wxRentContract.getId());
wxBillRent.setReceivePay(0);
wxBillRent.setPay(0);
int needpay = wxRentContract.getPrice() * receivePeriod;

Date date = new Date();
Calendar instance = Calendar.getInstance();
instance.setTime(wxRentContract.getRentalStartDate());
instance.add(Calendar.MONTH, receivePeriod * i);
instance.add(Calendar.DAY_OF_MONTH, -1);
Date time = instance.getTime();
wxBillRent.setReceiveDate(time);
Date rentalStartDate = wxRentContract.getRentalStartDate();
Integer price = wxRentContract.getPrice();
//按月计租
if (wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_MONTH.getCode())) {
buildRentMonth(wxMerchant, userId, wxRentContract, receivePeriod, lease, rentalStartDate, price);
} else {
//按日计租
buildRent(lease, receivePeriod, price, rentalStartDate, Calendar.DAY_OF_MONTH, wxRentContract, userId, wxMerchant);
}
}
}

public void buildRentMonth(WxMerchant wxMerchant, Long userId, WxRentContract wxRentContract, int receivePeriod, Integer lease, Date rentalStartDate, Integer price) {
String adjustRatio = wxRentContract.getAdjustRatio();
List<Integer> integers = JSONArray.parseArray(adjustRatio, Integer.class);
integers.add(0, 0);
int size = integers.size();
int[] priceArr = new int[size];
priceArr[0] = price;
double priceD = price;
for (int i = 1; i < size; i++) {
priceD = priceD + priceD * integers.get(i) / 10000.0;
priceArr[i] = new BigDecimal(priceD).setScale(0, RoundingMode.HALF_EVEN).intValue();
}
int month = 12;
int divide = lease / month;
int mod = lease % month;
int[] leaseArr = new int[size];
for (int i = 0; i < divide; i++) {
leaseArr[i] = month;
}
if (mod > 0) {
leaseArr[divide] = mod;
}

for (int i = 0; i < size; i++) {
Calendar instance = Calendar.getInstance();
instance.setTime(rentalStartDate);
//开始时间
instance.add(Calendar.MONTH, month * i);
buildRent(leaseArr[i], receivePeriod, priceArr[i], instance.getTime(), Calendar.MONTH, wxRentContract, userId, wxMerchant);
}
}

public void buildRent(int lease, int receivePeriod, int price, Date startdate, int dayType, WxRentContract wxRentContract, long userId, WxMerchant wxMerchant) {

int extralease = lease % receivePeriod;
int extracount = extralease > 0 ? 1 : 0;
int paycount = lease / receivePeriod + extracount;
int index = paycount - 1;
final IdWorker idWorker = IdWorker.get();
for (int i = 0; i < paycount; i++) {
WxBillRent wxBillRent = new WxBillRent();
wxBillRent.setId(idWorker.nextId());
wxBillRent.setRentContractId(wxRentContract.getId());
wxBillRent.setReceivePay(0);
wxBillRent.setPay(0);
int needpay = price * receivePeriod;


Date date = new Date();
Calendar instance = Calendar.getInstance();
instance.setTime(startdate);
instance.add(dayType, receivePeriod * i);
instance.add(Calendar.DAY_OF_MONTH, -1);
Date time = instance.getTime();
wxBillRent.setReceiveDate(time);

//账单开始时间
instance.clear();
instance.setTime(wxBillRent.getReceiveDate());
instance.add(Calendar.DAY_OF_MONTH, 1);
wxBillRent.setStarttime(instance.getTime());
//账单结束时间
instance.clear();
instance.setTime(wxBillRent.getStarttime());
instance.add(dayType, receivePeriod);
instance.add(Calendar.DAY_OF_MONTH, -1);
wxBillRent.setEndtime(instance.getTime());

if (extracount > 0 && i == index) {
//账单开始时间 //账单开始时间
instance.clear(); instance.clear();
instance.setTime(wxBillRent.getReceiveDate()); instance.setTime(wxBillRent.getReceiveDate());
@@ -371,64 +433,50 @@ public class WxRentContractServiceImpl implements WxRentContractService {
//账单结束时间 //账单结束时间
instance.clear(); instance.clear();
instance.setTime(wxBillRent.getStarttime()); instance.setTime(wxBillRent.getStarttime());
instance.add(Calendar.MONTH, receivePeriod);
instance.add(dayType, extralease);
instance.add(Calendar.DAY_OF_MONTH, -1); instance.add(Calendar.DAY_OF_MONTH, -1);
wxBillRent.setEndtime(instance.getTime()); wxBillRent.setEndtime(instance.getTime());
needpay = price * extralease;
}
wxBillRent.setNeedPay(needpay);
wxBillRent.setOwe(needpay);


if (extracount > 0 && i == index) {
//账单开始时间
instance.clear();
instance.setTime(wxBillRent.getReceiveDate());
instance.add(Calendar.DAY_OF_MONTH, 1);
wxBillRent.setStarttime(instance.getTime());
//账单结束时间
instance.clear();
instance.setTime(wxBillRent.getStarttime());
instance.add(Calendar.MONTH, extralease);
instance.add(Calendar.DAY_OF_MONTH, -1);
wxBillRent.setEndtime(instance.getTime());
needpay = wxRentContract.getPrice() * extralease;
}
wxBillRent.setNeedPay(needpay);
wxBillRent.setOwe(needpay);

//截止收租日在当前时间之前
if (wxBillRent.getReceiveDate().before(date)) {
long day = (time.getTime() - date.getTime()) / (24 * 60 * 60 * 1000);
wxBillRent.setStatus(EnumBillRentStatus.NOT_PAID.getCode());
wxBillRent.setExpiredDay(day);
} else {//截止收租日在当前时间之后
Calendar now = Calendar.getInstance();
now.add(Calendar.MONTH, receivePeriod);
Date currenttime = now.getTime();
//当前日期加上周期后小于截止收租日就是没有到期,否则当前待缴
if (currenttime.before(wxBillRent.getReceiveDate())) {
wxBillRent.setStatus(EnumBillRentStatus.NOT_EXPIRED.getCode());
wxBillRent.setExpiredDay(0L);
} else {
wxBillRent.setStatus(EnumBillRentStatus.WAIT_PAY.getCode());
wxBillRent.setExpiredDay(0L);
}
}

wxBillRent.setTenantId(wxMerchant.getTenantId());
wxBillRent.setIsDel(0);
wxBillRent.setMerchantId(wxMerchant.getId());
wxBillRent.setUserId(userId);
wxBillRent.setShopId(wxRentContract.getShopId());
wxBillRent.setCreatetime(date);
wxBillRent.setUpdatetime(date);
wxBillRent.setIsDel(EnumDelStatus.NOT_DEL.getCode());

try {
wxBillRentMapper.insertSelective(wxBillRent);
} catch (Exception e) {
logger.error("添加租赁账单失败,e:" + e.getMessage());
throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage());
//截止收租日在当前时间之前
if (wxBillRent.getReceiveDate().before(date)) {
long day = (time.getTime() - date.getTime()) / (24 * 60 * 60 * 1000);
wxBillRent.setStatus(EnumBillRentStatus.NOT_PAID.getCode());
wxBillRent.setExpiredDay(day);
} else {//截止收租日在当前时间之后
Calendar now = Calendar.getInstance();
now.add(Calendar.MONTH, receivePeriod);
Date currenttime = now.getTime();
//当前日期加上周期后小于截止收租日就是没有到期,否则当前待缴
if (currenttime.before(wxBillRent.getReceiveDate())) {
wxBillRent.setStatus(EnumBillRentStatus.NOT_EXPIRED.getCode());
wxBillRent.setExpiredDay(0L);
} else {
wxBillRent.setStatus(EnumBillRentStatus.WAIT_PAY.getCode());
wxBillRent.setExpiredDay(0L);
} }
} }


wxBillRent.setTenantId(wxMerchant.getTenantId());
wxBillRent.setIsDel(0);
wxBillRent.setMerchantId(wxMerchant.getId());
wxBillRent.setUserId(userId);
wxBillRent.setShopId(wxRentContract.getShopId());
wxBillRent.setCreatetime(date);
wxBillRent.setUpdatetime(date);
wxBillRent.setIsDel(EnumDelStatus.NOT_DEL.getCode());

try {
wxBillRentMapper.insertSelective(wxBillRent);
} catch (Exception e) {
logger.error("添加租赁账单失败,e:" + e.getMessage());
throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage());
}
} }

} }




@@ -715,7 +763,7 @@ public class WxRentContractServiceImpl implements WxRentContractService {


@Override @Override
public ResultData updateRentContractStatus(Long id, Long userId) { public ResultData updateRentContractStatus(Long id, Long userId) {
if(id == null) {
if (id == null) {
return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); return new ResultData(ErrorCode.SYS_PARAMETER_ERROR);
} }
//更新合同状态为签约 //更新合同状态为签约
@@ -826,8 +874,9 @@ public class WxRentContractServiceImpl implements WxRentContractService {
} }
} }
result.put("brand", brand); result.put("brand", brand);
double adjustRatio = wxRentContract.getAdjustRatio() != null ? wxRentContract.getAdjustRatio() / 100.0 : 0;
result.put("adjustRatio", adjustRatio);
// TODO
//double adjustRatio = wxRentContract.getAdjustRatio() != null ? wxRentContract.getAdjustRatio() / 100.0 : 0;
result.put("adjustRatio", 0);
double priceRent = new BigDecimal(wxRentContract.getPrice()) double priceRent = new BigDecimal(wxRentContract.getPrice())
.divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); .divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
result.put("priceRent", priceRent); result.put("priceRent", priceRent);
@@ -853,14 +902,14 @@ public class WxRentContractServiceImpl implements WxRentContractService {
int count = paycount - 1; int count = paycount - 1;
BigDecimal rentPrice = new BigDecimal(priceRent); BigDecimal rentPrice = new BigDecimal(priceRent);
if (wxRentContract.getType().equals(EnumRentContractType.RENT_BY_AREA.getCode())) { if (wxRentContract.getType().equals(EnumRentContractType.RENT_BY_AREA.getCode())) {
areaWay(wxRentContract, result, lease, adjustRatio, extralease, extracount, paycount, index, count, rentPrice);
areaWay(wxRentContract, result, lease, 0, extralease, extracount, paycount, index, count, rentPrice);
} else { } else {
//保底 //保底
double revenue = new BigDecimal(wxRentContract.getRevenue()) double revenue = new BigDecimal(wxRentContract.getRevenue())
.divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); .divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
result.put("revenue", revenue); result.put("revenue", revenue);
result.put("revenueUpper", digitUppercase(revenue)); result.put("revenueUpper", digitUppercase(revenue));
ratioWay(wxRentContract, result, lease, adjustRatio, extralease, extracount, paycount, index, count, rentPrice);
ratioWay(wxRentContract, result, lease, 0, extralease, extracount, paycount, index, count, rentPrice);
} }
//物业合同信息 //物业合同信息
WxPropertyContract propertyContract = new WxPropertyContract(); WxPropertyContract propertyContract = new WxPropertyContract();
@@ -1207,4 +1256,5 @@ public class WxRentContractServiceImpl implements WxRentContractService {
public void updateApplyStatus(WxRentContract wxRentContract) { public void updateApplyStatus(WxRentContract wxRentContract) {
wxRentContractMapper.updateApplyStatus(wxRentContract); wxRentContractMapper.updateApplyStatus(wxRentContract);
} }

} }

Загрузка…
Отмена
Сохранить