@@ -22,11 +22,15 @@ import com.iformall.domain.po.WxPropertyContract;
import com.iformall.domain.po.WxRentContract;
import com.iformall.domain.po.WxRentContractFreePeriod;
import com.iformall.domain.po.WxRentContractRevenueJump;
import com.iformall.domain.po.WxRentContractRevenueSales;
import com.iformall.domain.po.WxShop;
import com.iformall.domain.po.base.TenantEntity;
import com.iformall.domain.vo.BillTimeVo;
import com.iformall.domain.vo.RatioVo;
import com.iformall.domain.vo.RentContractFreePeriodVo;
import com.iformall.domain.vo.WxBillSum;
import com.iformall.domain.vo.WxRentContractRevenueSetSalesVo;
import com.iformall.domain.vo.WxRentContractYearsSumVo;
import com.iformall.enums.EnumBillAllType;
import com.iformall.enums.EnumBillStatus;
import com.iformall.enums.EnumContractOperationType;
@@ -46,6 +50,7 @@ import com.iformall.enums.EnumRentContractAppStatus;
import com.iformall.enums.EnumRentContractManageFeeType;
import com.iformall.enums.EnumRentContractStatus;
import com.iformall.enums.EnumRentContractType;
import com.iformall.enums.EnumRentDayPriceCalcute;
import com.iformall.enums.EnumRentShopType;
import com.iformall.enums.EnumTradeDailyDateType;
import com.iformall.enums.EnumYesOrNo;
@@ -146,6 +151,7 @@ public class WxRentContractServiceImpl implements WxRentContractService {
@Autowired
WxBusinessMapper wxBusinessMapper;
@Lazy
@Autowired
WxMallService wxMallService;
@@ -1016,20 +1022,8 @@ public class WxRentContractServiceImpl implements WxRentContractService {
return rentList;
}
public List<WxAllBill> buildRentMonth(MallUserInfo user, WxRentContract wxRentContract, int receivePeriod, Integer lease, Date rentalStartDate,Integer isPreview, boolean saveDb) {
int years = 0;
//计算租金每年的计费基数
String[] priceArrs = WxRentContractHelper.calcuteRentPrice(wxRentContract);
//计算商业管理费
String[] bussinessManagerPriceArrs = WxRentContractHelper.calcuteBussinessManagementFee(wxRentContract);
//计算运营管理费
String[] operationManagerPriceArrs = WxRentContractHelper.calcuteOperatingManagementFee(wxRentContract);
int month = 12;
int billcount = 0;
List<WxAllBill> resultList = new ArrayList<WxAllBill>();
years = priceArrs.length;
@Override
public List<Date> getYearList(int years,int month,Date rentalStartDate ) {
List<Date> yearList = new ArrayList<>();
for (int i = 0; i < years; i++) {
Calendar instance = Calendar.getInstance();
@@ -1050,6 +1044,22 @@ public class WxRentContractServiceImpl implements WxRentContractService {
// }
yearList.add(startDate);
}
return yearList;
}
public List<WxAllBill> buildRentMonth(MallUserInfo user, WxRentContract wxRentContract, int receivePeriod, Integer lease, Date rentalStartDate,Integer isPreview, boolean saveDb) {
int years = 0;
//计算租金每年的计费基数
String[] priceArrs = WxRentContractHelper.calcuteRentPrice(wxRentContract);
//计算商业管理费
String[] bussinessManagerPriceArrs = WxRentContractHelper.calcuteBussinessManagementFee(wxRentContract);
//计算运营管理费
String[] operationManagerPriceArrs = WxRentContractHelper.calcuteOperatingManagementFee(wxRentContract);
int month = 12;
int billcount = 0;
List<WxAllBill> resultList = new ArrayList<WxAllBill>();
years = priceArrs.length;
List<Date> yearList = getYearList(years,month,rentalStartDate);
String shopInfoStr = getShopInfoStr(wxRentContract);
Map<String, Object> resultMap = buildRent(receivePeriod, priceArrs,bussinessManagerPriceArrs,operationManagerPriceArrs, yearList, wxRentContract.getReceivePeriodUnit(), wxRentContract, user, billcount, isPreview, shopInfoStr,saveDb);
@@ -1057,7 +1067,7 @@ public class WxRentContractServiceImpl implements WxRentContractService {
resultList.addAll(billRentList);
return resultList;
}
public List<WxAllBill> buildRentJinmao(MallUserInfo user, WxRentContract wxRentContract, int receivePeriod, Integer lease, Date rentalStartDate, String price, Integer isPreview, boolean saveDb) {
int size = 0;
String[] priceArrs = null;
@@ -1456,7 +1466,6 @@ public class WxRentContractServiceImpl implements WxRentContractService {
return resultMap;
}
private WxAllBill setManageRent(Integer decimalSize,WxAllBill wxBillRent,EnumRentContractManageFeeType feeType,String needPay,Integer serviceChargeRate,int dayType,int receivePeriod) {
WxAllBill manage = new WxAllBill();
manage.setRentContractId(wxBillRent.getRentContractId());
@@ -2311,4 +2320,412 @@ public class WxRentContractServiceImpl implements WxRentContractService {
}
}
@Override
public List<WxRentContractRevenueSales> getContractSales(WxRentContract wxRentContract) {
WxRentContractRevenueSales sales = new WxRentContractRevenueSales();
sales.updateTenantInfo(wxRentContract);
sales.setRentContractId(wxRentContract.getId());
return wxRentContractRevenueSalesMapper.findList(sales);
}
private BigDecimal calcuteUnitPrice(Date startDate,Date endDate,BigDecimal salesDeciaml,Integer priceUnit,
Integer dayPriceCalcute,Integer mothAverageDays) {
BigDecimal unitPrice = new BigDecimal(0);
int[] diffs = DateUtils.getDiff(startDate, endDate);
if (priceUnit.equals(EnumPriceUnit.D.getCode())){
int allDays = 0;
if (dayPriceCalcute.intValue() == EnumRentDayPriceCalcute.AVERAGE_DAYS.getCode()) {
allDays = diffs[0]*mothAverageDays + diffs[1];
}else {
allDays = DateUtils.daysBetween(startDate, endDate)+1;
}
//每一天的单价
unitPrice = salesDeciaml.divide(new BigDecimal(allDays),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
}else if(EnumPriceUnit.Y.getCode().equals(priceUnit)) {
//每一年的单价
BigDecimal years = new BigDecimal(diffs[0]/12);
int extraMonths = diffs[0]%12;
if (dayPriceCalcute.intValue() == EnumRentDayPriceCalcute.AVERAGE_DAYS.getCode()) {
int days = extraMonths*mothAverageDays + diffs[1];
years = years.add(new BigDecimal(days).divide(new BigDecimal(12*mothAverageDays),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP));
}else {
int days = DateUtils.daysBetween(startDate, endDate)+1;
years = years.add(new BigDecimal(days).divide(new BigDecimal(365),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP));
}
//每一天的单价
unitPrice = salesDeciaml.divide(years,Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
}else if(EnumPriceUnit.M.getCode().equals(priceUnit)) {
//每一月的单价
BigDecimal months = new BigDecimal(diffs[0]);
if (dayPriceCalcute.intValue() == EnumRentDayPriceCalcute.AVERAGE_DAYS.getCode()) {
months = months.add(new BigDecimal(diffs[1]).divide(new BigDecimal(mothAverageDays),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP));
}else {
Date extraStartDay = DateUtils.getTimeAfterMonths(diffs[0], startDate);
int extraDays = DateUtils.daysBetween(extraStartDay, endDate)+1;
Date extraStartDayMonthStart = DateUtils.getFirstDayForCurrMonth(extraStartDay);
Date extraStartDayMonthEnd = DateUtils.getLastDayForMonth(extraStartDay);
int monthDays = DateUtils.daysBetween(extraStartDayMonthStart, extraStartDayMonthEnd)+1;
months = months.add(new BigDecimal(extraDays).divide(new BigDecimal(monthDays),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP));
}
//每一天的单价
unitPrice = salesDeciaml.divide(months,Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
}
return unitPrice;
}
//根据租金合同来计算附加物业费
private BigDecimal calcuteRentPropertyPrice(WxRentContract rentcontract,WxPropertyContract propertyContract,Date startDate,Date endDate,BigDecimal money) {
//计算物业费的单价
BigDecimal unitPropertyPrice = calcuteUnitPrice(startDate, endDate,money,
propertyContract.getPriceUnit(),propertyContract.getDayPriceCalcute(),propertyContract.getMonthAverageDays());
//如果租金是按天计算
if (rentcontract.getPriceUnit().equals(EnumPriceUnit.D.getCode())){
//物业也是按天
if (propertyContract.getPriceUnit().equals(EnumPriceUnit.D.getCode())) {
return unitPropertyPrice;
}else if (propertyContract.getPriceUnit().equals(EnumPriceUnit.Y.getCode())) {
if (propertyContract.getDayPriceCalcute().intValue() == EnumRentDayPriceCalcute.AVERAGE_DAYS.getCode()) {
return unitPropertyPrice.divide(new BigDecimal(12*propertyContract.getMonthAverageDays()),
Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
}else {
return unitPropertyPrice.divide(new BigDecimal(365),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
}
}else if (propertyContract.getPriceUnit().equals(EnumPriceUnit.M.getCode())) {
if (propertyContract.getDayPriceCalcute().intValue() == EnumRentDayPriceCalcute.AVERAGE_DAYS.getCode()) {
return unitPropertyPrice.divide(new BigDecimal(propertyContract.getMonthAverageDays()),
Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
}else {
int allDays = DateUtils.daysBetween(startDate, endDate)+1;
return money.divide(new BigDecimal(allDays),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
}
}
}else if (rentcontract.getPriceUnit().equals(EnumPriceUnit.Y.getCode())) {
if (propertyContract.getPriceUnit().equals(EnumPriceUnit.D.getCode())) {
if (propertyContract.getDayPriceCalcute().intValue() == EnumRentDayPriceCalcute.AVERAGE_DAYS.getCode()) {
return unitPropertyPrice.multiply(new BigDecimal(12*propertyContract.getMonthAverageDays()));
}else {
return unitPropertyPrice.multiply(new BigDecimal(365));
}
}else if (propertyContract.getPriceUnit().equals(EnumPriceUnit.Y.getCode())) {
return unitPropertyPrice;
}else if (propertyContract.getPriceUnit().equals(EnumPriceUnit.M.getCode())) {
return unitPropertyPrice.multiply(new BigDecimal(12));
}
}else if (rentcontract.getPriceUnit().equals(EnumPriceUnit.M.getCode())) {
if (propertyContract.getPriceUnit().equals(EnumPriceUnit.D.getCode())) {
if (propertyContract.getDayPriceCalcute().intValue() == EnumRentDayPriceCalcute.AVERAGE_DAYS.getCode()) {
return unitPropertyPrice.multiply(new BigDecimal(propertyContract.getMonthAverageDays()));
}else {
//此处就无法计算月了。
//计算月份值。
int[] diffs = DateUtils.getDiff(startDate, endDate);
BigDecimal months = new BigDecimal(diffs[0]);
Date extraStartDay = DateUtils.getTimeAfterMonths(diffs[0], startDate);
int extraDays = DateUtils.daysBetween(extraStartDay, endDate)+1;
Date extraStartDayMonthStart = DateUtils.getFirstDayForCurrMonth(extraStartDay);
Date extraStartDayMonthEnd = DateUtils.getLastDayForMonth(extraStartDay);
int monthDays = DateUtils.daysBetween(extraStartDayMonthStart, extraStartDayMonthEnd)+1;
months = months.add(new BigDecimal(extraDays).divide(new BigDecimal(monthDays),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP));
return unitPropertyPrice.multiply(months);
}
}else if (propertyContract.getPriceUnit().equals(EnumPriceUnit.Y.getCode())) {
return unitPropertyPrice.divide(new BigDecimal(12),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
}else if (propertyContract.getPriceUnit().equals(EnumPriceUnit.M.getCode())) {
return unitPropertyPrice;
}
}
return unitPropertyPrice;
}
private BigDecimal[] calcuteReveneuJump(BigDecimal sales,WxRentContract rentcontract,Date startDate,Date endDate,List<Date> freePeriods) {
WxRentContractRevenueJump jq = new WxRentContractRevenueJump();
jq.updateTenantInfo(rentcontract);
jq.setRentContractId(rentcontract.getId());
jq.setSortColumn(" minMoney asc");
BigDecimal revenueDecimal = new BigDecimal(0);
BigDecimal rentDecimal = new BigDecimal(0);
List<WxRentContractRevenueJump> jumpList = wxRentContractRevenueJumpMapper.findList(jq);
if (null != jumpList && jumpList.size() > 0 ) {
for (int i = 0 ; i< jumpList.size() ; i ++) {
WxRentContractRevenueJump rj = jumpList.get(i);
String minMoney = rj.getMinMoney();
String maxMoney = rj.getMaxMoney();
if (StringUtils.isNotBlank(maxMoney)) {
if (sales.compareTo(new BigDecimal(maxMoney)) <= 0 ) {
revenueDecimal = sales.multiply(new BigDecimal(rj.getRate()));
if (StringUtils.isNotBlank(rj.getRentMoney())) {
rentDecimal = new BigDecimal(rj.getRentMoney());
}
break;
}
}else {
if (sales.compareTo(new BigDecimal(minMoney)) > 0 ) {
revenueDecimal = sales.multiply(new BigDecimal(rj.getRate()));
if (StringUtils.isNotBlank(rj.getRentMoney())) {
rentDecimal = new BigDecimal(rj.getRentMoney());
}
break;
}
}
}
}
//根据时间区间计算
//固定租金需要再计算,因为跳点设置的租金是单价
String rentNeedpay = WxRentContractHelper.getNeedPayMoney(freePeriods,rentcontract, rentDecimal.toPlainString(),startDate,
endDate,0,0,false,rentcontract.getReceivePeriodUnit(),rentcontract.getReceivePeriod());
rentDecimal = new BigDecimal(rentNeedpay);
BigDecimal[] bs = new BigDecimal[] {revenueDecimal,rentDecimal};
return bs;
}
@Override
public WxRentContractRevenueSetSalesVo setRevenueSales(WxRentContract rentcontract, String sales, Long billId, Long propertyContractId) {
WxAllBill rentBill = wxAllBillMapper.selectById(billId, rentcontract.getTenantId());
BigDecimal salesDeciaml = new BigDecimal(sales);
//加上物业
WxAllBill propertyBill = null;
if (null != propertyContractId) {
WxAllBill propertyBillq = new WxAllBill();
propertyBillq.updateTenantInfo(rentcontract);
propertyBillq.setPropertyContractId(propertyContractId);
propertyBillq.setBillType(EnumBillAllType.PROPERTY.getCode());
propertyBillq.setEnergyFeesId(EnumBillAllType.PROPERTY.getEnergyFeesId());
propertyBillq.setIsPreview(EnumYesOrNo.NO.getCode());
propertyBillq.setStarttimeEqual(rentBill.getStarttime());
propertyBillq.setStarttimeEqual(rentBill.getEndtime());
List<WxAllBill> propertyBillList = wxAllBillMapper.findList(propertyBillq);
if (null != propertyBillList && propertyBillList.size() > 0) {
propertyBill = propertyBillList.get(0);
}
}
//根据销售额来计算价格均值
BigDecimal unitRevenuePrice = calcuteUnitPrice(rentBill.getStarttime(), rentBill.getEndtime(),salesDeciaml,
rentcontract.getPriceUnit(),rentcontract.getDayPriceCalcute(),rentcontract.getMonthAverageDays());
//设置保底营业额
rentcontract.setRevenue(unitRevenuePrice.toPlainString());
//联营扣点
if (rentcontract.getType().equals(EnumRentContractType.RENT_BY_JOINT.getCode())) {
rentcontract.setPrice(new BigDecimal(rentcontract.getPayRatio()).multiply(unitRevenuePrice).divide(new BigDecimal(100),
Constant.default_long_decimal_size,RoundingMode.HALF_UP).toPlainString());
}else if (rentcontract.getType().intValue() == EnumRentContractType.RENT_BY_AREA_AND_JOINT.getCode()) {
//取高才能加上物业费
if (null != propertyContractId && null != propertyBill) {
WxPropertyContract propertyContract = wxPropertyContractMapper.selectById(propertyContractId);
BigDecimal rentPrice = new BigDecimal(rentcontract.getPrice());
//有可能物业的单价时间跟租金的不一致,需要根据物业的单价重新计算
BigDecimal propertyPrice = calcuteRentPropertyPrice(rentcontract, propertyContract, rentBill.getStarttime(), rentBill.getEndtime(),
new BigDecimal(propertyBill.getReceivePay()));
rentcontract.setPrice(rentPrice.add(propertyPrice).toPlainString());;
}
}
//计算每一年的基数
String[] priceArrs = WxRentContractHelper.calcuteRentPrice(rentcontract);
List<Date> yearList = this.getYearList(priceArrs.length, 12, rentcontract.getRentalStartDate());
int yearIndex = 0;
for( int i = 0 ; i < yearList.size() ; i ++) {
Date yearEndDate = yearList.get(i);
if (rentBill.getEndtime().before(yearEndDate) || rentBill.getEndtime().equals(yearEndDate)) {
yearIndex = i;
break;
}
}
//免租期
List<Date> freePeriods = getFreeDays(rentcontract);
//根据租金和扣点来计算
String needpay = WxRentContractHelper.getNeedPayMoney(freePeriods,rentcontract, priceArrs[yearIndex],rentBill.getStarttime(),
rentBill.getEndtime(),0,0,false,rentcontract.getReceivePeriodUnit(),rentcontract.getReceivePeriod());
//计算跳点。
BigDecimal[] jumppays = calcuteReveneuJump(salesDeciaml, rentcontract,rentBill.getStarttime(), rentBill.getEndtime(),freePeriods);
BigDecimal jumpRevenuePay = jumppays[0];
BigDecimal jumpRentPay = jumppays[1];
BigDecimal jumppay = new BigDecimal(0);
if (jumpRevenuePay.compareTo(jumpRentPay) > 0 ) {
jumppay = jumppay.add(jumpRevenuePay);
}else {
jumppay = jumppay.add(jumpRentPay);
}
if (jumppay.compareTo(new BigDecimal(needpay)) > 0 ) {
needpay = jumppay.toPlainString();
}
//保存销售额
WxRentContractRevenueSales rs = new WxRentContractRevenueSales();
rs.updateTenantInfo(rentcontract);
rs.setRentContractId(rentcontract.getId());
rs.setBillId(billId);
List<WxRentContractRevenueSales> saleList = wxRentContractRevenueSalesMapper.findList(rs);
if (null != saleList && saleList.size() > 0 ) {
WxRentContractRevenueSales sale = saleList.get(0);
sale.setSaleMoney(sales);
sale.setUpdateTime(new Date());
wxRentContractRevenueSalesMapper.updateById(sale);
}else {
WxRentContractRevenueSales sale = new WxRentContractRevenueSales();
sale.updateTenantInfo(rentcontract);
sale.setBillId(billId);
sale.setRentContractId(rentcontract.getId());
sale.setBillMoney(rentBill.getReceivePay());
sale.setSaleMoney(sales);
sale.setCalcuteMoney(needpay);
sale.setPropertyContractId(propertyContractId);
sale.setCreateTime(new Date());
sale.setUpdateTime(new Date());
wxRentContractRevenueSalesMapper.insert(sale);
}
//更新账单费用
rentBill.setMoneyChangeDetail("原合同租金金额:"+rentBill.getReceivePay()+"元,计算之后为:"+needpay+"元。");
rentBill.setReceivePay(needpay);
rentBill.setBillRemark("设置销售额,自动计算");
rentBill.setUpdatetime(new Date());
if (new BigDecimal(rentBill.getOwe()).compareTo(new BigDecimal(0)) < 0 ) {
rentBill.setStatus(EnumBillStatus.STOP_TO_SETTLE.getCode());
}else {
//rentBill.setStatus(EnumBillStatus.PAID.getCode());
}
wxAllBillMapper.updateById(rentBill);
//物业账单应收就改为0,因为金额已经合并了
if (null != propertyBill) {
propertyBill.setMoneyChangeDetail("原合同物业金额:"+propertyBill.getReceivePay()+"元,已合并到租金,调整为:0元。");
propertyBill.setReceivePay("0");
propertyBill.setBillRemark("设置销售额,已自动计算合并到租金");
if (new BigDecimal(propertyBill.getOwe()).compareTo(new BigDecimal(0)) < 0 ) {
propertyBill.setStatus(EnumBillStatus.STOP_TO_SETTLE.getCode());
}else {
//propertyBill.setStatus(EnumBillStatus.PAID.getCode());
}
propertyBill.setUpdatetime(new Date());
wxAllBillMapper.updateById(propertyBill);
}
WxRentContractRevenueSetSalesVo vo = new WxRentContractRevenueSetSalesVo();
vo.setTotal(needpay);
List<WxAllBill> blist = new ArrayList<WxAllBill>();
blist.add(rentBill);
if (null != propertyBill) {
blist.add(propertyBill);
}
vo.setBillList(blist);;
return vo;
}
@Override
public WxRentContractYearsSumVo calcuteYearsRevenueRentUp(WxRentContract rentcontract) {
//查询销售总数
WxRentContractRevenueSales rsq = new WxRentContractRevenueSales();
rsq.updateTenantInfo(rentcontract);
rsq.setRentContractId(rentcontract.getId());
//BigDecimal sum = wxRentContractRevenueSalesMapper.findSumSalesMoney(rsq);
List<Long> billIdList = wxRentContractRevenueSalesMapper.findBillId(rsq);
Date realStartTime = null;
Date realEndTime = null;
if (null != billIdList || billIdList.size() > 0 ) {
WxAllBill abq = new WxAllBill();
abq.updateTenantInfo(rentcontract);
abq.setIds(billIdList);
abq.setStarttimeEqual(rentcontract.getYearsBegin());
abq.setStarttimeEqual(rentcontract.getYearsEnd());
abq.setSortColumn(" starttime asc");
List<WxAllBill> billList = wxAllBillMapper.findList(abq);
if (null == billList || billList.size() <= 0 ){
return null;
}
realStartTime = billList.get(0).getStarttime();
realEndTime = billList.get(billList.size()-1).getEndtime();
}
BigDecimal sum = new BigDecimal(0);
//计算跳点。
BigDecimal[] jumppays = calcuteReveneuJump(sum, rentcontract,rentcontract.getYearsBegin(), rentcontract.getYearsEnd(),null);
BigDecimal jumpRevenuePay = jumppays[0];
//BigDecimal jumpRentPay = jumppays[1];
//销售收入不满足一年怎么算。
if (realStartTime.equals(rentcontract.getYearsBegin()) && realEndTime.equals(rentcontract.getYearsEnd())) {
}else {
int days = DateUtils.daysBetween(realStartTime, realEndTime)+1;
if (rentcontract.getDayPriceCalcute().intValue() == EnumRentDayPriceCalcute.AVERAGE_DAYS.getCode()) {
jumpRevenuePay = jumpRevenuePay.multiply(new BigDecimal(days)).divide(new BigDecimal(12*rentcontract.getMonthAverageDays()),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
}else {
jumpRevenuePay = jumpRevenuePay.multiply(new BigDecimal(days)).divide(new BigDecimal(365),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
}
}
BigDecimal receivepay = new BigDecimal(0);
//查询所有租金和物业账单的信息
WxAllBill rentBillq = new WxAllBill();
rentBillq.updateTenantInfo(rentcontract);
rentBillq.setRentContractId(rentcontract.getId());
rentBillq.setBillType(EnumBillAllType.RENT.getCode());
rentBillq.setEnergyFeesId(EnumBillAllType.RENT.getEnergyFeesId());
rentBillq.setIsPreview(EnumYesOrNo.NO.getCode());
rentBillq.setStarttimeEqual(rentcontract.getYearsBegin());
rentBillq.setEndtimeEqual(rentcontract.getYearsEnd());
WxBillSum rentBillSum = wxAllBillMapper.getBillMonthSum(rentBillq);
if (null != rentBillSum) {
receivepay = receivepay.add(rentBillSum.getNeedPayNumber());
}
WxPropertyContract bq = new WxPropertyContract();
bq.updateTenantInfo(rentcontract);
bq.setMerchantId(rentcontract.getMerchantId());
bq.setRentContractId(rentcontract.getId());
bq.setOperationType(EnumContractOperationType.WHOLE.getCode());
bq.setStatus(EnumRentContractStatus.PAING.getCode());
List<WxPropertyContract> propertyList = wxPropertyContractService.findList(bq);
if (null != propertyList && propertyList.size() > 0 ) {
WxPropertyContract pc = propertyList.get(0);
WxAllBill propertyBillq = new WxAllBill();
propertyBillq.updateTenantInfo(rentcontract);
propertyBillq.setPropertyContractId(pc.getId());
propertyBillq.setBillType(EnumBillAllType.PROPERTY.getCode());
propertyBillq.setEnergyFeesId(EnumBillAllType.PROPERTY.getEnergyFeesId());
propertyBillq.setIsPreview(EnumYesOrNo.NO.getCode());
propertyBillq.setStarttimeEqual(rentcontract.getYearsBegin());
propertyBillq.setEndtimeEqual(rentcontract.getYearsEnd());
WxBillSum propertyBillSum = wxAllBillMapper.getBillMonthSum(rentBillq);
if (null != propertyBillSum) {
receivepay = receivepay.add(propertyBillSum.getNeedPayNumber());
}
}
WxRentContractYearsSumVo vo = new WxRentContractYearsSumVo();
vo.setTotalSales(sum.toPlainString());
vo.setTotalRevenue(jumpRevenuePay.toPlainString());
vo.setBillReceivePay(receivepay.toPlainString());
if ( new BigDecimal(vo.getOwe()).compareTo(new BigDecimal(0)) > 0) {
//增加一个账单
WxAllBill createBillq = new WxAllBill();
createBillq.updateTenantInfo(rentcontract);
final IdWorker idWorker = IdWorker.get();
createBillq.setId(idWorker.nextId());
createBillq.setMerchantId(rentcontract.getMerchantId());
createBillq.setRentShopType(rentcontract.getRentShopType());
createBillq.setCreatetime(new Date());
createBillq.setUpdatetime(new Date());
createBillq.setPriceDetail("年度汇算销售额:"+sum.toPlainString()+",应扣点金额:"+jumpRevenuePay.toPlainString()+",账单总金额:"+receivepay.toPlainString()+".差额:"+vo.getOwe());
createBillq.setNeedPay(vo.getOwe());
createBillq.setReceivePay(vo.getOwe());
createBillq.setPay("0");
createBillq.setBillType(EnumBillAllType.RENT.getCode());
createBillq.setStarttime(rentcontract.getYearsBegin());
createBillq.setEndtime(rentcontract.getYearsEnd());
createBillq.setStatus(EnumBillStatus.WAIT_PAY.getCode());
createBillq.setEnergyFeesId(EnumBillAllType.RENT.getEnergyFeesId());
createBillq.setBillRemark("扣点年度汇算自动生成");
createBillq.setIsPreview(EnumYesOrNo.NO.getCode());
createBillq.setRentContractId(rentcontract.getId());
wxAllBillMapper.insert(createBillq);
}
return vo;
}
}