diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/BillTimeVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/BillTimeVo.java new file mode 100644 index 000000000..74d8c7aed --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/BillTimeVo.java @@ -0,0 +1,17 @@ +package com.iformall.domain.vo; + +import lombok.Data; +import java.io.Serializable; +import java.util.Date; + +@Data +public class BillTimeVo implements Serializable{ + + private static final long serialVersionUID = 1L; + + private Date startDate; + + private Date endDate; + + private Date ReceiveDate; +} 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 0567a0c1a..c8c47fe86 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java @@ -9,6 +9,7 @@ import com.iformall.common.IdWorker; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.*; +import com.iformall.domain.vo.BillTimeVo; import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.*; @@ -722,10 +723,9 @@ public class WxRentContractServiceImpl implements WxRentContractService { rentList = buildRentMonth(wxMerchant, userId, wxRentContract, receivePeriod, lease, rentalStartDate, price,isPreview); } else { //如果按日 - //处理lease - lease = DateUtils.daysBetween(wxRentContract.getRentalStartDate(),wxRentContract.getRentalEndDate()); - - Map resultMap = buildRent(lease, receivePeriod, price, rentalStartDate, Calendar.DAY_OF_MONTH, wxRentContract, userId, wxMerchant, 0, isPreview, null,false); + List yearList = new ArrayList<>(); + yearList.add(rentalStartDate); + Map resultMap = buildRent(receivePeriod, new long[]{price}, yearList, Calendar.DAY_OF_MONTH, wxRentContract, userId, wxMerchant, 0, isPreview,null); rentList = ( List)resultMap.get("billList"); } } @@ -831,6 +831,8 @@ public class WxRentContractServiceImpl implements WxRentContractService { int billcount = 0; List resultList = new ArrayList<>(); + + List yearList = new ArrayList<>(); for (int i = 0; i < size; i++) { Calendar instance = Calendar.getInstance(); Date startDate; @@ -848,343 +850,113 @@ public class WxRentContractServiceImpl implements WxRentContractService { instance.add(Calendar.MONTH, month * i); startDate = instance.getTime(); } - Map resultMap = buildRent(leaseArr[i], receivePeriod, priceArrs[i], startDate, Calendar.MONTH, wxRentContract, userId, wxMerchant, billcount, isPreview, shopInfos.isEmpty() ? null : shopInfos.get(i),i==size-1?true:false); - List billRentList = (List)resultMap.get("billList"); - billcount = (Integer)resultMap.get("billcount"); - resultList.addAll(billRentList); + yearList.add(startDate); } - return resultList; - } - public boolean isFirstDay(Date date){ - int dateInt = Integer.parseInt(new SimpleDateFormat("d").format(date)); - if(dateInt == 1){ - return true; - } - return false; + Map resultMap = buildRent(receivePeriod, priceArrs, yearList, Calendar.MONTH, wxRentContract, userId, wxMerchant, billcount, isPreview, shopInfos); + List billRentList = (List)resultMap.get("billList"); + billcount = (Integer)resultMap.get("billcount"); + resultList.addAll(billRentList); + return resultList; } - public boolean isCrossMonth(Date start,Date end){ - int startInt = Integer.parseInt(new SimpleDateFormat("M").format(start)); - int endInt = Integer.parseInt(new SimpleDateFormat("M").format(end)); + public Map buildRent(int receivePeriod,long[] priceArrs, List yearList,int dayType, WxRentContract wxRentContract, Long userId, WxMerchant wxMerchant, int billcount, Integer isPreview,List> shopInfoList) { +// System.out.println("------+receivePeriod:"+receivePeriod+"price:"+price+"start:"+DateUtils.date2String(startdate,"yyyy-MM-dd") +// +"dayType:"+dayType+"billcount:"+billcount); + SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd"); + Map resultMap = new HashedMap(); + List resultList = new ArrayList<>(); + final IdWorker idWorker = IdWorker.get(); - if(startInt != endInt){ - return true; + Date endDate = null; + if(yearList.size() > 1){ + endDate = yearList.get(1); } - return false; - } - public Map buildRent(int lease, int receivePeriod, long price, Date startdate, int dayType, WxRentContract wxRentContract, Long userId, WxMerchant wxMerchant, int billcount, Integer isPreview, Map shopInfo, boolean isLastYesr) { - System.out.println("------lease:"+lease+"receivePeriod:"+receivePeriod+"price:"+price+"start:"+DateUtils.date2String(startdate,"yyyy-MM-dd") - +"dayType:"+dayType+"billcount:"+billcount); - - String shopInfoStr = null; - if (shopInfo != null) { - shopInfoStr = JSONObject.toJSONString(shopInfo); - } else { - if (wxRentContract.getRentShopType().equals(EnumRentShopType.SHOP.getCode()) && - wxRentContract.getType().equals(EnumRentContractType.RENT_BY_JOINT.getCode())) { - String rentInfo = wxRentContract.getRentInfo(); - JSONArray rentInfoArray = JSONArray.parseArray(rentInfo); - int rentSize = rentInfoArray.size(); - Map shopInfoMap = new HashMap<>(); - for (int i = 0; i < rentSize; i++) { - JSONObject rentInfoObject = rentInfoArray.getJSONObject(i); - shopInfoMap.put(rentInfoObject.getString("shopNumber"), 0); - } - shopInfoStr = JSONObject.toJSONString(shopInfoMap); - } + if(endDate == null){ + // endDate = wxRentContract.getRentalEndDate(); + }else{ + //- 1天 + //endDate = DateUtils.getDaySet(endDate,Calendar.DATE,-1); } + List billTimeVoList = initBillTimeList(wxRentContract.getRentalStartDate(),wxRentContract.getRentalEndDate(),wxRentContract.getAdjustPeriod(),dayType,receivePeriod); - Map resultMap = new HashedMap(); - List resultList = new ArrayList<>(); - final IdWorker idWorker = IdWorker.get(); + int index = 0; - Date start = startdate; - Date end = wxRentContract.getRentalEndDate(); - while (true){ - WxBillRent wxBillRent = new WxBillRent(); - wxBillRent.setIsPreview(isPreview); - wxBillRent.setId(idWorker.nextId()); - wxBillRent.setRentContractId(wxRentContract.getId()); - wxBillRent.setPay(0L); - long needpay = new BigDecimal(price).multiply(new BigDecimal(receivePeriod)).longValue(); + for (BillTimeVo billTimeVo : billTimeVoList){ + if(yearList.size() > 1) { + if (billTimeVo.getStartDate().after(endDate)) { + System.out.println("==========billTimeVo.getStartDate():"+sd.format(billTimeVo.getStartDate())); + System.out.println("==========endDate:"+sd.format(endDate)); - Calendar instance = Calendar.getInstance(); - instance.setTime(start); - instance.add(dayType, receivePeriod); - if(!wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode())){ - instance.add(Calendar.DAY_OF_MONTH, -1); - } - Date time = instance.getTime(); - wxBillRent.setReceiveDate(time); - //账单开始时间 - instance.clear(); - instance.setTime(wxBillRent.getReceiveDate()); - if(!wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode())){ - instance.add(Calendar.DAY_OF_MONTH, 1); + index++; + if(index >= yearList.size()-1){ + endDate = wxRentContract.getRentalEndDate(); + }else { + endDate = yearList.get(index); + } + System.out.println("==========cross:"+sd.format(endDate)); + } } - 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()); - wxBillRent.setNeedPay(needpay); - wxBillRent.setOwe(needpay); - wxBillRent.setReceivePay(needpay); + //获取price 、shopInfo + long price = priceArrs[index]; + Map shopInfo = null; + if(shopInfoList != null){ + shopInfo = shopInfoList.get(index); + } - //截止收租日在当前时间之前 - Date date = new Date(); - 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(dayType, 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); + String shopInfoStr = null; + if (shopInfo != null) { + shopInfoStr = JSONObject.toJSONString(shopInfo); + } else { + if (wxRentContract.getRentShopType().equals(EnumRentShopType.SHOP.getCode()) && + wxRentContract.getType().equals(EnumRentContractType.RENT_BY_JOINT.getCode())) { + String rentInfo = wxRentContract.getRentInfo(); + JSONArray rentInfoArray = JSONArray.parseArray(rentInfo); + int rentSize = rentInfoArray.size(); + Map shopInfoMap = new HashMap<>(); + for (int i = 0; i < rentSize; i++) { + JSONObject rentInfoObject = rentInfoArray.getJSONObject(i); + shopInfoMap.put(rentInfoObject.getString("shopNumber"), 0); + } + shopInfoStr = JSONObject.toJSONString(shopInfoMap); } } - wxBillRent.setRevenue(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()); - wxBillRent.setRentShopType(wxRentContract.getRentShopType()); - wxBillRent.setPeriod(++billcount); - wxBillRent.setShopInfo(shopInfoStr); - wxBillRentMapper.insertSelective(wxBillRent); - resultList.add(wxBillRent); - - //next - start = DateUtils.getDaySet(wxBillRent.getEndtime(),Calendar.DATE,1); - - break; - } - - int extralease = lease % receivePeriod; //余 - int extracount = extralease > 0 ? 1 : 0; - int paycount = lease / receivePeriod + extracount; - int index = paycount - 1; - - //自然月计租,而且残月,周期整除,n+1,最后一个周期作为残月 - if(wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode()) - && !isFirstDay(wxRentContract.getRentalStartDate()) - && (wxRentContract.getLease() % wxRentContract.getReceivePeriod() == 0) - && isLastYesr - && isCrossMonth(wxRentContract.getRentalStartDate(),wxRentContract.getRentalEndDate()) - ){ - paycount ++; - } - for(int i = 0; i < paycount; i++){ WxBillRent wxBillRent = new WxBillRent(); wxBillRent.setIsPreview(isPreview); wxBillRent.setId(idWorker.nextId()); wxBillRent.setRentContractId(wxRentContract.getId()); wxBillRent.setPay(0L); - long needpay = new BigDecimal(price).multiply(new BigDecimal(receivePeriod)).longValue(); - - Calendar instance = Calendar.getInstance(); - Date date = new Date(); - instance.setTime(startdate); - instance.add(dayType, receivePeriod * i); - if(!wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode())){ - instance.add(Calendar.DAY_OF_MONTH, -1); - } - Date time = instance.getTime(); - wxBillRent.setReceiveDate(time); - //账单开始时间 - instance.clear(); - instance.setTime(wxBillRent.getReceiveDate()); - if(!wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode())){ - 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.setTime(wxBillRent.getReceiveDate()); - if(!wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode())){ - instance.add(Calendar.DAY_OF_MONTH, 1); - } - wxBillRent.setStarttime(instance.getTime()); - //账单结束时间 - instance.clear(); - instance.setTime(wxBillRent.getStarttime()); - instance.add(dayType, extralease); - instance.add(Calendar.DAY_OF_MONTH, -1); - wxBillRent.setEndtime(instance.getTime()); - needpay = new BigDecimal(price).multiply(new BigDecimal(extralease)).longValue(); - } - - //自然月,开始日期、缴款日,结束日期 - if(wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode())){ - int rentStartDateInt = Integer.parseInt(new SimpleDateFormat("d").format(wxRentContract.getRentalStartDate())); - int startDateInt = Integer.parseInt(new SimpleDateFormat("d").format(wxBillRent.getStarttime())); - int endDateInt = Integer.parseInt(new SimpleDateFormat("d").format(wxRentContract.getRentalEndDate())); - - if(i == 0){//第一周期 - double oneDayProce = (double) price / DateUtils.getMonthDayCount(wxBillRent.getStarttime()); - double needPayDouble; - - if(receivePeriod <= 1) {//周期为一个月 - wxBillRent.setEndtime(DateUtils.getLastDayForMonth(wxBillRent.getStarttime())); - needPayDouble = oneDayProce * (DateUtils.getMonthDayCount(wxBillRent.getStarttime())-startDateInt+1); - }else{ //周期大于一个月 - Date firstDay = DateUtils.getFirstDayForCurrMonth(wxBillRent.getStarttime()); - instance.clear(); - instance.setTime(firstDay); - //最后一个期有余,加上残月,不整除时,最后一个月有余,否则为0 - if(extralease > 0 && (i == paycount - 1)){ - instance.add(dayType, extralease); - instance.add(Calendar.DAY_OF_MONTH, rentStartDateInt-1); - }else{ - instance.add(dayType, receivePeriod); - } - instance.add(Calendar.DAY_OF_MONTH, -1); - - wxBillRent.setEndtime(instance.getTime()); - if(isLastYesr && (i == paycount - 1)){ //最后一年 最后一期 - needPayDouble = 0; - oneDayProce = (double) price/DateUtils.getMonthDayCount(wxBillRent.getEndtime()); - if(receivePeriod > 1) { - needPayDouble += price * extralease; - } - if(!isFirstDay(wxRentContract.getRentalStartDate())) { //残月才加 - needPayDouble += oneDayProce * endDateInt; - } - }else{ - //[A/31 *(31-12+1)]+A+A - needPayDouble = oneDayProce * (DateUtils.getMonthDayCount(wxBillRent.getStarttime())-startDateInt+1); - needPayDouble += price * (receivePeriod - 1); - } - } - DecimalFormat format = new DecimalFormat("0"); - needpay = Long.parseLong(format.format(needPayDouble)); //分做四舍五入 - }else if(i < paycount - 1){//中间周期 - Date receiveDate = DateUtils.getFirstDayOfNextMonth(startdate,receivePeriod * i); - wxBillRent.setReceiveDate(receiveDate); - wxBillRent.setStarttime(receiveDate); - wxBillRent.setEndtime(DateUtils.getLastDayForMonth(wxBillRent.getStarttime(),receivePeriod * i)); - - instance.clear(); - instance.setTime(receiveDate); - instance.add(dayType, receivePeriod); - instance.add(Calendar.DAY_OF_MONTH, -1); - wxBillRent.setEndtime(instance.getTime()); - }else if(i == paycount - 1) {//最后周期 - //receivePeriod * i 得到开始日期 - Date receiveDate = DateUtils.getFirstDayOfNextMonth(startdate,receivePeriod * i); - wxBillRent.setReceiveDate(receiveDate); - wxBillRent.setStarttime(receiveDate); - - //得到开始日期第一天 - Date firstDay = DateUtils.getFirstDayForCurrMonth(wxBillRent.getStarttime()); - instance.clear(); - instance.setTime(firstDay); - - //若最后一期有余,带上残月,(不整除时,最后一个月有余,否则extralease=0) - if(isFirstDay(wxRentContract.getRentalStartDate())){ //月第一天起租 - if(receivePeriod > 1){ - if(isLastYesr && extralease > 0){ - instance.add(dayType, extralease); - }else{ - instance.add(dayType, receivePeriod); - } - }else{ - instance.add(dayType, receivePeriod); - } - }else{ - if(isLastYesr) { - instance.add(dayType, extralease); - instance.add(Calendar.DAY_OF_MONTH, rentStartDateInt - 1); - }else{ - instance.add(dayType, receivePeriod); - } - } + wxBillRent.setStarttime(billTimeVo.getStartDate()); + wxBillRent.setEndtime(billTimeVo.getEndDate()); + wxBillRent.setReceiveDate(billTimeVo.getReceiveDate()); + + long needpay; + + //当天也算,加1天 + Date newEndDate = DateUtils.getDaySet(wxBillRent.getEndtime(),Calendar.DATE,1); + //按日 + if(wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_DAY.getCode())){ + int dayCount = DateUtils.daysBetween(wxBillRent.getStarttime(),newEndDate); + needpay = dayCount*price; + }else{ + //按月 + int[] diff = DateUtils.getDiff(wxBillRent.getStarttime(),newEndDate); + needpay = diff[0]*price; - //先减一个月 后加上残月 - instance.add(Calendar.DAY_OF_MONTH, -1); - wxBillRent.setEndtime(instance.getTime()); - - //逻辑同计算endtime - double needPayDouble = 0; - double oneDayProce = (double) price/DateUtils.getMonthDayCount(wxBillRent.getEndtime()); - if(isFirstDay(wxRentContract.getRentalStartDate())){ - if(receivePeriod > 1) { - if(isLastYesr && extralease > 0) { - needPayDouble += price * extralease; - }else{ - needPayDouble += price * receivePeriod; - } - }else { - needPayDouble += price * receivePeriod; - } - }else{ - if(isLastYesr) { - needPayDouble += price * extralease; - needPayDouble += oneDayProce * endDateInt; - }else{ - needPayDouble += price * receivePeriod; - } - } - DecimalFormat format = new DecimalFormat("0"); - needpay = Long.parseLong(format.format(needPayDouble)); //分做四舍五入 - } + double oneDayProce = (double) price/DateUtils.getMonthDayCount(wxRentContract.getRentalEndDate()); + needpay += diff[1] * oneDayProce; } - - //最后一期截止到结束日期 -// if(i == paycount - 1 && isLastYesr){ -// wxBillRent.setEndtime(wxRentContract.getRentalEndDate()); -// //当天也算,加1天 -// Date newEndDate = DateUtils.getDaySet(wxBillRent.getEndtime(),Calendar.DATE,1); -// //按日 -// if(wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_DAY.getCode())){ -// int dayCount = DateUtils.daysBetween(wxBillRent.getStarttime(),newEndDate); -// needpay = dayCount*price; -// }else{ -// //按月 -// SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd"); -// System.out.println("----1"+sd.format(wxBillRent.getStarttime())); -// System.out.println("----2"+sd.format(newEndDate)); -// int[] diff = DateUtils.getDiff(wxBillRent.getStarttime(),newEndDate); -// needpay = diff[0]*price; -// -// double oneDayProce = (double) price/DateUtils.getMonthDayCount(wxRentContract.getRentalEndDate()); -// needpay += diff[1] * oneDayProce; -// } -// } - wxBillRent.setNeedPay(needpay); wxBillRent.setOwe(needpay); wxBillRent.setReceivePay(needpay); //截止收租日在当前时间之前 + Date date = new Date(); if (wxBillRent.getReceiveDate().before(date)) { - long day = (time.getTime() - date.getTime()) / (24 * 60 * 60 * 1000); + long day = (wxBillRent.getReceiveDate().getTime() - date.getTime()) / (24 * 60 * 60 * 1000); wxBillRent.setStatus(EnumBillRentStatus.NOT_PAID.getCode()); wxBillRent.setExpiredDay(day); } else {//截止收租日在当前时间之后 @@ -1212,14 +984,10 @@ public class WxRentContractServiceImpl implements WxRentContractService { wxBillRent.setRentShopType(wxRentContract.getRentShopType()); wxBillRent.setPeriod(++billcount); wxBillRent.setShopInfo(shopInfoStr); - try { - wxBillRentMapper.insertSelective(wxBillRent); - resultList.add(wxBillRent); - } catch (Exception e) { - logger.error("添加租赁账单失败,e:" + e.getMessage()); - throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); - } + wxBillRentMapper.insertSelective(wxBillRent); + resultList.add(wxBillRent); } + resultMap.put("billcount",billcount); resultMap.put("billList",resultList); return resultMap; @@ -1971,6 +1739,80 @@ public class WxRentContractServiceImpl implements WxRentContractService { public Integer getShopType(WxRentContract wxRentContract) { return wxRentContractMapper.getShopType(wxRentContract); } + + public static void main(String[] args) throws Exception{ + SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd"); +// Date start = sd.parse("2019-05-24"); +// Date end = sd.parse("2020-06-24"); + Date start = sd.parse("2019-05-24"); + Date end = sd.parse("2019-08-10"); + + Integer adjustPeriod = EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode(); + Integer dayType = Calendar.MONTH; + int receivePeriod = 2; + + List list = initBillTimeList(start,end,adjustPeriod,dayType,receivePeriod); + for (BillTimeVo b:list) { + System.out.print(sd.format(b.getStartDate())); + System.out.print(" "+sd.format(b.getEndDate())); + System.out.print(" "+sd.format(b.getReceiveDate())); + + System.out.println(); + } + } + + public static List initBillTimeList(Date start,Date end,Integer adjustPeriod,Integer dayType,int receivePeriod){ + List list = new ArrayList<>(); + + int count = 0; + while (true){ + BillTimeVo timeVo = new BillTimeVo(); + + //开始时间 + timeVo.setStartDate(start); + + //账单日 + Calendar instance = Calendar.getInstance(); + instance.setTime(start); + if(!adjustPeriod.equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode())){ + instance.add(Calendar.DATE, -1); + } + timeVo.setReceiveDate(instance.getTime()); + + //结束时间 + SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd"); + System.out.println(sd.format(start)); + instance.clear(); + instance.setTime(start); + instance.add(dayType, receivePeriod); + instance.add(Calendar.DATE, -1); + timeVo.setEndDate(instance.getTime()); + + System.out.println(sd.format(instance.getTime())); + + //自然月 + if(adjustPeriod.equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode())){ + if(count == 0){ + timeVo.setEndDate(DateUtils.getLastDayForMonth(timeVo.getStartDate())); + } + } + + if(timeVo.getEndDate().after(end)){ + timeVo.setEndDate(end); + } + + list.add(timeVo); + + //next + start = DateUtils.getDaySet(timeVo.getEndDate(),Calendar.DATE,1); + + if(start.after(end)) { + break; + } + count ++; + } + return list; + } }