diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxRentContractController.java b/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxRentContractController.java index 16de927c2..b641c43da 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxRentContractController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxRentContractController.java @@ -909,7 +909,12 @@ public class WxRentContractController extends WxContractBaseController { if(rentContract.getRentStartType()!=null &&rentContract.getRentStartType().equals(EnumRentStartType.STARTTIME.getCode())){ rentContract.setRentalStartDate(rentContract.getStartDate()); } - List yearList = wxRentContractService.getYearList(years, 12, rentContract.getRentalStartDate()); + //如果有撤铺日 + Date endcontract = rentContract.getEndContractTime(); + if (null != endcontract) { + endcontract = DateUtils.getDayEnd(endcontract); + } + List yearList = wxRentContractService.getYearList(years, 12, rentContract.getRentalStartDate(),endcontract); if (null != yearList && yearList.size() > 0) { List retList = new ArrayList(); Date begin = null; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxAllBill.java b/mallinkService/src/main/java/com/iformall/domain/po/WxAllBill.java index 8b2cf81ff..503105f4c 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxAllBill.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxAllBill.java @@ -246,6 +246,9 @@ public class WxAllBill extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value = "能源抄表ID", name = "energyReadingId") private Long energyReadingId; + @io.swagger.annotations.ApiModelProperty(value = "账单额外生成来源EnumBillExtraCreateFrom", name = "extraCreateFrom") + private Integer extraCreateFrom; + @io.swagger.annotations.ApiModelProperty(value="楼座号",name="building") @TableField(exist = false) public Long building; diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumBillExtraCreateFrom.java b/mallinkService/src/main/java/com/iformall/enums/EnumBillExtraCreateFrom.java new file mode 100644 index 000000000..fc1c6e3c6 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumBillExtraCreateFrom.java @@ -0,0 +1,36 @@ +package com.iformall.enums; + + +/** + * 账单额外创建来源 + */ + +public enum EnumBillExtraCreateFrom { + RNET_TIAODIAN_HUISUAN(1,"跳点租金合同汇算差额自动生成") + ; + + public static EnumBillExtraCreateFrom getEnum(Integer code) { + for (EnumBillExtraCreateFrom value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumBillExtraCreateFrom(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxAllBillMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxAllBillMapper.java index d317842a7..15e495ef6 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxAllBillMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxAllBillMapper.java @@ -23,6 +23,7 @@ public interface WxAllBillMapper extends CommonMapper { void deleteBillByPropertyContract(WxPropertyContract wxPropertyContract); void deletePreviewBill(WxAllBill wxBillRent); void deleteNoNeedPayBill(WxAllBill wxBillRent); + void deleteByRentHuiSuan(WxAllBill wxBillRent); void updatePreviewStatus(WxAllBill record); diff --git a/mallinkService/src/main/java/com/iformall/service/WxRentContractService.java b/mallinkService/src/main/java/com/iformall/service/WxRentContractService.java index 22c80a3ca..627ce6802 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxRentContractService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxRentContractService.java @@ -85,7 +85,7 @@ public interface WxRentContractService { void updateApplyStatus(WxRentContract wxRentContract); - public List getYearList(int years,int month,Date rentalStartDate ); + public List getYearList(int years,int month,Date rentalStartDate,Date endContractTime ); List buildRent(MallUserInfo user,WxRentContract rentContract,Integer isPreview,boolean saveDb); void buildDeposit( TenantEntity tenantEntity,MallUserInfo user,Long rentContractId); 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 7ae596001..ab0ae3f59 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java @@ -32,6 +32,7 @@ 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.EnumBillExtraCreateFrom; import com.iformall.enums.EnumBillStatus; import com.iformall.enums.EnumContractOperationType; import com.iformall.enums.EnumContractReceivePeriodUnit; @@ -1023,26 +1024,18 @@ public class WxRentContractServiceImpl implements WxRentContractService { } @Override - public List getYearList(int years,int month,Date rentalStartDate ) { + public List getYearList(int years,int month,Date rentalStartDate,Date endContractTime ) { List yearList = new ArrayList<>(); for (int i = 0; i < years; i++) { Calendar instance = Calendar.getInstance(); - Date startDate; -// //自然月 -// if(wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode())){ -// if(i == 0){ //第一期 -// startDate = rentalStartDate; -// }else{ -// instance.setTime(rentalStartDate); -// instance.add(Calendar.MONTH, month * i); -// startDate = DateUtils.getFirstDayForCurrMonth(instance.getTime()); -// } -// }else{ - instance.setTime(rentalStartDate); - instance.add(Calendar.MONTH, month * i); - startDate = instance.getTime(); -// } - yearList.add(startDate); + instance.setTime(rentalStartDate); + instance.add(Calendar.MONTH, month * i); + Date startDate = instance.getTime(); + if (null != endContractTime && endContractTime.before(startDate)) { + yearList.add(endContractTime); + }else { + yearList.add(startDate); + } } return yearList; } @@ -1059,7 +1052,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { int billcount = 0; List resultList = new ArrayList(); years = priceArrs.length; - List yearList = getYearList(years,month,rentalStartDate); + List yearList = getYearList(years,month,rentalStartDate,null); String shopInfoStr = getShopInfoStr(wxRentContract); Map resultMap = buildRent(receivePeriod, priceArrs,bussinessManagerPriceArrs,operationManagerPriceArrs, yearList, wxRentContract.getReceivePeriodUnit(), wxRentContract, user, billcount, isPreview, shopInfoStr,saveDb); @@ -2529,7 +2522,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { } //计算每一年的基数 String[] priceArrs = WxRentContractHelper.calcuteRentPrice(rentcontract); - List yearList = this.getYearList(priceArrs.length, 12, rentcontract.getRentalStartDate()); + List yearList = this.getYearList(priceArrs.length, 12, rentcontract.getRentalStartDate(),null); int yearIndex = 0; for( int i = 0 ; i < yearList.size() ; i ++) { Date yearEndDate = yearList.get(i); @@ -2635,25 +2628,6 @@ public class WxRentContractServiceImpl implements WxRentContractService { WxRentContractRevenueSales rsq = new WxRentContractRevenueSales(); rsq.updateTenantInfo(rentcontract); rsq.setRentContractId(rentcontract.getId()); - //BigDecimal sum = wxRentContractRevenueSalesMapper.findSumSalesMoney(rsq); - List 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.setStarttime(rentcontract.getYearsBegin()); - abq.setEndtime(rentcontract.getYearsEnd()); - abq.setSortColumn(" starttime asc"); - List 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 = wxRentContractRevenueSalesMapper.findSumSalesMoney(rsq); if (null == sum || sum.compareTo(new BigDecimal(0)) <= 0 ) { WxRentContractYearsSumVo vo = new WxRentContractYearsSumVo(); @@ -2662,20 +2636,29 @@ public class WxRentContractServiceImpl implements WxRentContractService { vo.setBillReceivePay("0"); return vo; } + + //删除未支付,未冲抵,未退款的之前的账单 + WxAllBill billd = new WxAllBill(); + billd.updateTenantInfo(rentcontract); + billd.setRentContractId(rentcontract.getId()); + //删除这个时间的,因为可能之前有了账单。,然后撤铺,结束时间虽然不一样,开始时间是一致的。 + billd.setStarttimeEqual(rentcontract.getYearsBegin()); + billd.setExtraCreateFrom(EnumBillExtraCreateFrom.RNET_TIAODIAN_HUISUAN.getCode()); + wxAllBillMapper.deleteByRentHuiSuan(billd); + //计算跳点。 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())) { + int yearDays = DateUtils.daysBetween(rentcontract.getYearsBegin(), rentcontract.getYearsEnd())+1; + if (yearDays == 365) { }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); + jumpRevenuePay = jumpRevenuePay.multiply(new BigDecimal(yearDays)).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); + jumpRevenuePay = jumpRevenuePay.multiply(new BigDecimal(yearDays)).divide(new BigDecimal(365),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP); } } @@ -2687,8 +2670,14 @@ public class WxRentContractServiceImpl implements WxRentContractService { rentBillq.setBillType(EnumBillAllType.RENT.getCode()); rentBillq.setEnergyFeesId(EnumBillAllType.RENT.getEnergyFeesId()); rentBillq.setIsPreview(EnumYesOrNo.NO.getCode()); - rentBillq.setStarttimeEqual(rentcontract.getYearsBegin()); - rentBillq.setEndtimeEqual(rentcontract.getYearsEnd()); + rentBillq.setStarttime(rentcontract.getYearsBegin()); + rentBillq.setEndtime(rentcontract.getYearsEnd()); + List status = new ArrayList(); + status.add(EnumBillStatus.WAIT_PAY.getCode()); + status.add(EnumBillStatus.PAID.getCode()); + status.add(EnumBillStatus.BAD.getCode()); + status.add(EnumBillStatus.STOP_TO_SETTLE.getCode()); + rentBillq.setStatusList(status); WxBillSum rentBillSum = wxAllBillMapper.getBillMonthSum(rentBillq); if (null != rentBillSum) { receivepay = receivepay.add(rentBillSum.getNeedPayNumber()); @@ -2738,12 +2727,13 @@ public class WxRentContractServiceImpl implements WxRentContractService { createBillq.setPay("0"); createBillq.setBillType(EnumBillAllType.RENT.getCode()); createBillq.setStarttime(rentcontract.getYearsBegin()); - createBillq.setEndtime(rentcontract.getYearsEnd()); + createBillq.setEndtime(DateUtils.getDayEnd(rentcontract.getYearsBegin())); createBillq.setStatus(EnumBillStatus.WAIT_PAY.getCode()); createBillq.setEnergyFeesId(EnumBillAllType.RENT.getEnergyFeesId()); createBillq.setBillRemark("扣点年度汇算自动生成"); createBillq.setIsPreview(EnumYesOrNo.NO.getCode()); createBillq.setRentContractId(rentcontract.getId()); + createBillq.setExtraCreateFrom(EnumBillExtraCreateFrom.RNET_TIAODIAN_HUISUAN.getCode()); wxAllBillMapper.insert(createBillq); } diff --git a/mallinkService/src/main/resources/mapper/WxAllBillMapper.xml b/mallinkService/src/main/resources/mapper/WxAllBillMapper.xml index d6329f7da..b843462b1 100644 --- a/mallinkService/src/main/resources/mapper/WxAllBillMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxAllBillMapper.xml @@ -41,6 +41,7 @@ + @@ -48,7 +49,7 @@ `id`,`tenant_id`,`parent_tenant_id`,`merchant_id`,`rent_shop_type`,`createtime`,`create_by`,`create_by_name`,`updatetime`,`update_by`,`update_by_name`, `price_detail`,`need_pay`,`receive_pay`,`pay`,`bill_type`,`pay_way`,`pay_date`,`set_off`,`starttime`,`endtime`,`status`,`energy_fees_id`,`return_pay`, `bill_remark`,`last_owe_call_time`,`last_owe_call_user`,`bussiness_manage_fee_need_pay`,`operating_manage_fee_need_pay`,`shop_id`,`shop_number`, - `is_preview`,`shop_info`,`rent_contract_id`,`property_contract_id`,`parent_bill_id`,`energy_reading_calcuteId`,`energy_reading_id` + `is_preview`,`shop_info`,`rent_contract_id`,`property_contract_id`,`parent_bill_id`,`energy_reading_calcuteId`,`energy_reading_id`,`extra_create_from` @@ -71,6 +72,7 @@ and `endtime` <= #{endtime} and `starttime` = #{starttimeEqual} and `endtime` = #{endtimeEqual} + and `extra_create_from` = #{extraCreateFrom} and date_format(starttime,'%Y-%m') <= #{month} and date_format(endtime,'%Y-%m') >= #{month} @@ -278,6 +280,12 @@ + + + delete from wx_all_bill where rent_contract_id = #{rentContractId} + and IFNULL(`pay`,'0') <= 0 AND IFNULL(`set_off`,'0') <= 0 and IFNULL(`return_pay`,'0') <= 0 + and extra_create_from = #{extraCreateFrom} and `starttime` = #{starttimeEqual} + update wx_all_bill set is_preview = #{isPreview} @@ -302,7 +310,7 @@ #{item.starttime},#{item.endtime},#{item.status},#{item.energyFeesId},#{item.returnPay},#{item.billRemark}, #{item.lastOweCallTime},#{item.lastOweCallUser},#{item.bussinessManageFeeNeedPay},#{item.operatingManageFeeNeedPay}, #{item.shopId},#{item.shopNumber},#{item.isPreview},#{item.shopInfo},#{item.rentContractId},#{item.propertyContractId}, - #{item.parentBillId},#{item.energyReadingCalcuteId},#{item.energyReadingId} + #{item.parentBillId},#{item.energyReadingCalcuteId},#{item.energyReadingId},#{item.extraCreateFrom} )