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

[优化账单][修改][优化账单周期]

release_toaliyun_real
luozukai 7 лет назад
Родитель
Сommit
e5ab108a30
3 измененных файлов: 139 добавлений и 7 удалений
  1. +3
    -1
      mallinkService/src/main/java/com/iformall/enums/EnumRentContractAdjustPeriod.java
  2. +67
    -6
      mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java
  3. +69
    -0
      mallinkService/src/main/java/com/iformall/utils/DateUtils.java

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

@@ -8,7 +8,9 @@ package com.iformall.enums;
public enum EnumRentContractAdjustPeriod {

ADJUST_PERIOD_DAY(1, "按日计租"),
ADJUST_PERIOD_MONTH(2, "按月计租"),;
ADJUST_PERIOD_MONTH(2, "按月计租"),
ADJUST_PERIOD_NAR_MONTH(3, "按自然月计租"),
;

public static EnumRentContractAdjustPeriod getEnum(Integer code) {
for (EnumRentContractAdjustPeriod value : values()) {


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

@@ -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


+ 69
- 0
mallinkService/src/main/java/com/iformall/utils/DateUtils.java Просмотреть файл

@@ -938,4 +938,73 @@ public class DateUtils {
return false;
}
}

/**
* 获取当前月的第一天
* @return
*/
public static Date getFirstDayForCurrMonth(){
Calendar cale = Calendar.getInstance();
cale.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天
return cale.getTime();
}

/**
* 获取当前月的最后一天
* @return
*/
public static Date getLastDayForCurrMonth(){
Calendar ca = Calendar.getInstance();
ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
return ca.getTime();
}

/**
* 取得当月天数
* */
public static int getCurrMonthDayCount() {
Calendar a = Calendar.getInstance();
a.set(Calendar.DATE, 1);//把日期设置为当月第一天
a.roll(Calendar.DATE, -1);//日期回滚一天,也就是最后一天
int maxDate = a.get(Calendar.DATE);
return maxDate;
}

/**
* 计算两个日期相隔多少天
* @param smdate
* @param bdate
* @return
* @throws ParseException
*/
public static int daysBetween(Date smdate,Date bdate) {
try {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
smdate=sdf.parse(sdf.format(smdate));
bdate=sdf.parse(sdf.format(bdate));
Calendar cal = Calendar.getInstance();
cal.setTime(smdate);
long time1 = cal.getTimeInMillis();
cal.setTime(bdate);
long time2 = cal.getTimeInMillis();
long between_days=(time2-time1)/(1000*3600*24);
return Integer.parseInt(String.valueOf(between_days));
}catch (Exception e){
e.printStackTrace();
}
return 0;
}

/**
* 获取指定日期n个月后的第一天
* @return
*/
public static Date getFirstDayOfNextMonth(Date date,int amount){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH,1);
calendar.add(Calendar.MONTH, amount);
return calendar.getTime();
}

}

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