@@ -37,6 +37,8 @@ import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@@ -574,7 +576,7 @@ public class WxRentContractServiceImpl implements WxRentContractService {
return rentList;
}
//计算租金
//计算租金,每年-每个店铺租金
public List<int[]> computePrice(String rentInfo) {
JSONArray rentInfoArray = JSONArray.parseArray(rentInfo);
@@ -607,7 +609,6 @@ public class WxRentContractServiceImpl implements WxRentContractService {
}
public List<WxBillRent> buildRentMonth(WxMerchant wxMerchant, Long userId, WxRentContract wxRentContract, int receivePeriod, Integer lease, Date rentalStartDate, Integer price,Integer isPreview) {
int size = 0;
int[] priceArrs = null;
List<Map<String, Object>> shopInfos = new ArrayList<>();
@@ -651,7 +652,6 @@ public class WxRentContractServiceImpl implements WxRentContractService {
}
}
int month = 12;
int divide = lease / month;
int mod = lease % month;
@@ -678,7 +678,22 @@ public class WxRentContractServiceImpl implements WxRentContractService {
return resultList;
}
/**
* 是否是残月
* @param date
* @return
*/
public boolean incompleteMonth(Date date){
if("01".equals(new SimpleDateFormat("dd").format(date))){
return false;
}
return true;
}
public Map<String, Object> buildRent(int lease, int receivePeriod, int price, Date startdate, int dayType, WxRentContract wxRentContract, Long userId, WxMerchant wxMerchant, int billcount, Integer isPreview, Map<String, Object> shopInfo) {
//todo:test
wxRentContract.setAdjustPeriod(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode());
String shopInfoStr = null;
if (shopInfo != null) {
shopInfoStr = JSONObject.toJSONString(shopInfo);
@@ -701,15 +716,13 @@ public class WxRentContractServiceImpl implements WxRentContractService {
int needpay = price * receivePeriod;
System.out.println("--------needpay:"+needpay);
Date date = new Date();
Calendar instance = Calendar.getInstance();
Date date = new Date();
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());
@@ -722,6 +735,7 @@ public class WxRentContractServiceImpl implements WxRentContractService {
instance.add(Calendar.DAY_OF_MONTH, -1);
wxBillRent.setEndtime(instance.getTime());
//最后一个周期
if (extracount > 0 && i == index) {
//账单开始时间
instance.clear();
@@ -736,6 +750,47 @@ public class WxRentContractServiceImpl implements WxRentContractService {
wxBillRent.setEndtime(instance.getTime());
needpay = price * extralease;
}
//自然月,开始日期、缴款日,结束日期
if(wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode())){
if(i == 0){//第一周期
if(receivePeriod <= 1) {//周期为一个月
wxBillRent.setReceiveDate(wxRentContract.getStartDate());
wxBillRent.setStarttime(wxRentContract.getStartDate());
wxBillRent.setEndtime(DateUtils.getLastDayForCurrMonth());
double needPayDouble = (double) price / DateUtils.getCurrMonthDayCount();
int startDateInt = Integer.parseInt(new SimpleDateFormat("d").format(wxRentContract.getStartDate()));
// 5月12日 周期:3 [A/31 *(31-12+1)]+A+A
needPayDouble = (needPayDouble * (DateUtils.getCurrMonthDayCount()-startDateInt+1)) + (price * (receivePeriod-1));
DecimalFormat format = new DecimalFormat("0");
needpay = Integer.parseInt(format.format(needPayDouble)); //分做四舍五入
}else{
wxBillRent.setReceiveDate(wxRentContract.getStartDate());
wxBillRent.setStarttime(wxRentContract.getStartDate());
wxBillRent.setEndtime(DateUtils.getFirstDayOfNextMonth(wxRentContract.getStartDate(),receivePeriod - 1));
double needPayDouble = (double) price / DateUtils.getCurrMonthDayCount();
needPayDouble = needPayDouble * DateUtils.daysBetween(DateUtils.getFirstDayForCurrMonth(), wxRentContract.getStartDate());
DecimalFormat format = new DecimalFormat("0");
needpay = Integer.parseInt(format.format(needPayDouble)); //分做四舍五入
}
}else if(i == paycount - 1) {//最后周期
wxBillRent.setReceiveDate(DateUtils.getFirstDayForCurrMonth());
wxBillRent.setStarttime(DateUtils.getFirstDayForCurrMonth());
wxBillRent.setEndtime(wxRentContract.getStartDate());
double needPayDouble = (double) price/DateUtils.getCurrMonthDayCount();
needPayDouble = needPayDouble * DateUtils.daysBetween(DateUtils.getFirstDayForCurrMonth(),wxRentContract.getStartDate());
DecimalFormat format = new DecimalFormat("0");
needpay = Integer.parseInt(format.format(needPayDouble)); //分做四舍五入
}else{//中间周期
wxBillRent.setReceiveDate(DateUtils.getFirstDayForCurrMonth());
wxBillRent.setStarttime(DateUtils.getFirstDayForCurrMonth());
wxBillRent.setEndtime(DateUtils.getLastDayForCurrMonth());
}
}
wxBillRent.setNeedPay(needpay);
wxBillRent.setOwe(needpay);
wxBillRent.setReceivePay(needpay);
@@ -783,6 +838,12 @@ public class WxRentContractServiceImpl implements WxRentContractService {
return resultMap;
}
public static void main(String[] args) {
System.out.println(new SimpleDateFormat("d").format(DateUtils.getLastDayForCurrMonth()));
}
@Transactional(rollbackFor = {Exception.class})
@Override