@@ -10,6 +10,7 @@ import com.iformall.common.Result;
import com.iformall.common.ResultData;
import com.iformall.common.ResultData;
import com.iformall.domain.po.*;
import com.iformall.domain.po.*;
import com.iformall.domain.vo.BillTimeVo;
import com.iformall.domain.vo.BillTimeVo;
import com.iformall.domain.vo.RatioVo;
import com.iformall.enums.*;
import com.iformall.enums.*;
import com.iformall.exception.MallinkException;
import com.iformall.exception.MallinkException;
import com.iformall.mapper.*;
import com.iformall.mapper.*;
@@ -250,17 +251,12 @@ public class WxRentContractServiceImpl implements WxRentContractService {
/**
/**
* 获取设置的跳点率
* 获取设置的跳点率
* 合同这,不需要年份月份转换
* ["1000-1200:10",">3000:20"]
* ["1000-1200:10",">3000:20"]
* @param record
*/
*/
public BigDecimal getPayRatio(WxRentContract record){
record.setPayRatio(0);
if(StringUtils.isBlank(record.getBusDiscountRatio())){
return null;
}
BigDecimal revenue = new BigDecimal(record.getRevenue()).divide(new BigDecimal(1000000)).setScale(4, RoundingMode.HALF_EVEN);
List<String> ratioList = JSONArray.parseArray(record.getBusDiscountRatio(), String.class);
public static RatioVo getPayRatio(Long revenueLong,String busDiscountRatio,int timeType,long dayCount){
RatioVo ratioVo = new RatioVo();
BigDecimal revenue = new BigDecimal(revenueLong).divide(new BigDecimal(1000000)).setScale(4, RoundingMode.HALF_EVEN);
List<String> ratioList = JSONArray.parseArray(busDiscountRatio, String.class);
for (int i = 0; i < ratioList.size(); i++) {
for (int i = 0; i < ratioList.size(); i++) {
String e = ratioList.get(i);
String e = ratioList.get(i);
@@ -271,20 +267,40 @@ public class WxRentContractServiceImpl implements WxRentContractService {
String[] revenueArray = array[0].split("-");
String[] revenueArray = array[0].split("-");
BigDecimal start = new BigDecimal(revenueArray[0]);
BigDecimal start = new BigDecimal(revenueArray[0]);
BigDecimal end = new BigDecimal(revenueArray[1]);
BigDecimal end = new BigDecimal(revenueArray[1]);
//残年 (小金额 / 365 * 账单周期天数 )--(大金额 / 365 * 账单周期天数)
if(EnumMissTimeType.YEAR.getCode().equals(timeType)){
start = new BigDecimal(revenueArray[0]).divide(new BigDecimal(365),10,BigDecimal.ROUND_HALF_DOWN).multiply(new BigDecimal(dayCount));
end = new BigDecimal(revenueArray[1]).divide(new BigDecimal(365),10,BigDecimal.ROUND_HALF_DOWN).multiply(new BigDecimal(dayCount));
//revenue = revenue.divide(new BigDecimal(365));
}else if(EnumMissTimeType.MONTH.getCode().equals(timeType)){
start = new BigDecimal(revenueArray[0]).divide(new BigDecimal(30),10,BigDecimal.ROUND_HALF_DOWN).multiply(new BigDecimal(dayCount));
end = new BigDecimal(revenueArray[1]).divide(new BigDecimal(30),10,BigDecimal.ROUND_HALF_DOWN).multiply(new BigDecimal(dayCount));
//revenue = revenue.divide(new BigDecimal(30));
}
if (revenue.compareTo(start) >= 0 && revenue.compareTo(end)<= 0){
if (revenue.compareTo(start) >= 0 && revenue.compareTo(end)<= 0){
record.setPayRatio(ratio);
ratioVo.set Ratio(ratio);
break;
break;
}
}
}if(e.indexOf(">") >= 0){
}else if(e.indexOf(">") >= 0){
String[] revenueArray = array[0].split(">");
String[] revenueArray = array[0].split(">");
BigDecimal end = new BigDecimal(revenueArray[1]);
BigDecimal end = new BigDecimal(revenueArray[1]);
//残年 (小金额 / 365 * 账单周期天数 )--(大金额 / 365 * 账单周期天数)
if(EnumMissTimeType.YEAR.getCode().equals(timeType)){
end = new BigDecimal(revenueArray[1]).divide(new BigDecimal(365),10,BigDecimal.ROUND_HALF_DOWN).multiply(new BigDecimal(dayCount));
//revenue = revenue.divide(new BigDecimal(365));
}else if(EnumMissTimeType.MONTH.getCode().equals(timeType)){
end = new BigDecimal(revenueArray[1]).divide(new BigDecimal(30),10,BigDecimal.ROUND_HALF_DOWN).multiply(new BigDecimal(dayCount));
//revenue = revenue.divide(new BigDecimal(30));
}
if (revenue.compareTo(end) >= 0){
if (revenue.compareTo(end) >= 0){
record.setPayRatio(ratio);
ratioVo.set Ratio(ratio);
//计算超出部分
//计算超出部分
BigDecimal payRatio = new BigDecimal(record.getPayRatio() == null ? 0 : record.getPayRatio()).divide(new BigDecimal(10000));
BigDecimal balance = new BigDecimal(record.getRevenue()).subtract(end.multiply(new BigDecimal(1000000)));
BigDecimal payRatio = new BigDecimal(ratio).divide(new BigDecimal(10000));
BigDecimal balance = new BigDecimal(revenueLong ).subtract(end.multiply(new BigDecimal(1000000)));
BigDecimal price = balance.multiply(payRatio).setScale(2, RoundingMode.HALF_EVEN);
BigDecimal price = balance.multiply(payRatio).setScale(2, RoundingMode.HALF_EVEN);
array = ratioList.get(i-1).split(":");
array = ratioList.get(i-1).split(":");
@@ -292,11 +308,12 @@ public class WxRentContractServiceImpl implements WxRentContractService {
BigDecimal frontRatio = new BigDecimal(frontatio).divide(new BigDecimal(10000));
BigDecimal frontRatio = new BigDecimal(frontatio).divide(new BigDecimal(10000));
BigDecimal frontPrice = end.multiply(new BigDecimal(1000000).multiply(frontRatio).setScale(2, RoundingMode.HALF_EVEN));
BigDecimal frontPrice = end.multiply(new BigDecimal(1000000).multiply(frontRatio).setScale(2, RoundingMode.HALF_EVEN));
return price.add(frontPrice);
ratioVo.setBalance(price.add(frontPrice));
return ratioVo;
}
}
}
}
}
}
return null ;
return ratioVo ;
}
}
@Transactional(rollbackFor = {Exception.class})
@Transactional(rollbackFor = {Exception.class})
@@ -322,18 +339,24 @@ public class WxRentContractServiceImpl implements WxRentContractService {
}
}
if (record.getType().equals(EnumRentContractType.RENT_BY_JOINT.getCode())) {
if (record.getType().equals(EnumRentContractType.RENT_BY_JOINT.getCode())) {
BigDecimal balance = getPayRatio(record); //有超出部分
BigDecimal hundred = new BigDecimal(100);
BigDecimal revenue = new BigDecimal(record.getRevenue() == null ? 0 : record.getRevenue()).divide(hundred);
BigDecimal payRatio = new BigDecimal(record.getPayRatio() == null ? 0 : record.getPayRatio()).divide(new BigDecimal(10000));
BigDecimal price;
if(balance != null){
//计算超出部分
record.setPrice(balance.longValue());
if(record.getRevenue() == null || record.getRevenue().longValue() <=0){
record.setPrice(0l);
}else{
}else{
price = revenue.multiply(payRatio).setScale(2, RoundingMode.HALF_EVEN);
record.setPrice(price.multiply(hundred).longValue());
int dayCount = record.getReceivePeriod() * 30;
RatioVo ratioVo = getPayRatio(record.getRevenue(),record.getBusDiscountRatio(),record.getBusDiscountTime(),dayCount);
record.setPayRatio(ratioVo.getRatio());
BigDecimal hundred = new BigDecimal(100);
BigDecimal revenue = new BigDecimal(record.getRevenue() == null ? 0 : record.getRevenue()).divide(hundred);
BigDecimal payRatio = new BigDecimal(record.getPayRatio() == null ? 0 : record.getPayRatio()).divide(new BigDecimal(10000));
BigDecimal price;
if(ratioVo.getBalance() != null){
//计算超出部分
record.setPrice(ratioVo.getBalance().longValue());
}else{
price = revenue.multiply(payRatio).setScale(2, RoundingMode.HALF_EVEN);
record.setPrice(price.multiply(hundred).longValue());
}
}
}
} else {
} else {
if (StringUtils.isNotEmpty(record.getPriceStr())) {
if (StringUtils.isNotEmpty(record.getPriceStr())) {
@@ -540,6 +563,8 @@ public class WxRentContractServiceImpl implements WxRentContractService {
wxBillRentMapper.insertBills(record.getPreviewBillRentList());
wxBillRentMapper.insertBills(record.getPreviewBillRentList());
}
}
public ResultData getResultDataForUpdate(WxRentContract record, Long userId,int from,Date oldRentStartDate) {
public ResultData getResultDataForUpdate(WxRentContract record, Long userId,int from,Date oldRentStartDate) {
//更新租赁合同信息
//更新租赁合同信息
WxRentContract wxRentContract = wxRentContractMapper.selectByPrimaryKey(record.getId());
WxRentContract wxRentContract = wxRentContractMapper.selectByPrimaryKey(record.getId());
@@ -556,16 +581,18 @@ public class WxRentContractServiceImpl implements WxRentContractService {
instance.add(dayType, record.getLease());
instance.add(dayType, record.getLease());
instance.add(Calendar.DAY_OF_MONTH, -1);
instance.add(Calendar.DAY_OF_MONTH, -1);
if(from != 1 ){
if(!EnumFromType.SWITCH.getCode().equals(from) ){
if (record.getType().equals(EnumRentContractType.RENT_BY_JOINT.getCode())) {
if (record.getType().equals(EnumRentContractType.RENT_BY_JOINT.getCode())) {
BigDecimal balance = getPayRatio(record);
int dayCount = record.getReceivePeriod() * 30;
RatioVo ratioVo = getPayRatio(record.getRevenue(),record.getBusDiscountRatio(),record.getBusDiscountTime(),dayCount);
record.setPayRatio(ratioVo.getRatio());
BigDecimal hundred = new BigDecimal(100);
BigDecimal hundred = new BigDecimal(100);
BigDecimal revenue = new BigDecimal(record.getRevenue() == null ? 0 : record.getRevenue()).divide(hundred);
BigDecimal revenue = new BigDecimal(record.getRevenue() == null ? 0 : record.getRevenue()).divide(hundred);
BigDecimal payRatio = new BigDecimal(record.getPayRatio() == null ? 0 : record.getPayRatio()).divide(new BigDecimal(10000));
BigDecimal payRatio = new BigDecimal(record.getPayRatio() == null ? 0 : record.getPayRatio()).divide(new BigDecimal(10000));
BigDecimal price;
BigDecimal price;
if(balance != null){
record.setPrice(balance .longValue());
if(ratioVo.getBalance() != null){
record.setPrice(ratioVo.getBalance() .longValue());
}else {
}else {
price = revenue.multiply(payRatio).setScale(2, RoundingMode.HALF_EVEN);
price = revenue.multiply(payRatio).setScale(2, RoundingMode.HALF_EVEN);
record.setPrice(price.multiply(hundred).longValue());
record.setPrice(price.multiply(hundred).longValue());
@@ -2091,12 +2118,6 @@ public class WxRentContractServiceImpl implements WxRentContractService {
Double total = new Double(0);
Double total = new Double(0);
int[] diff;
int[] diff;
System.out.println(sd.format(start));
System.out.println(sd.format(end));
if(sd.format(end).equals("2020-08-18")){
System.out.println();
}
//同一天
//同一天
if(sd.format(start).equals(sd.format(end))){
if(sd.format(start).equals(sd.format(end))){
int dayCount = DateUtils.getMonthDayCount(start);
int dayCount = DateUtils.getMonthDayCount(start);