| | |
| | | import com.ruoyi.common.constant.DictConstants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.enums.BusinessType; |
| | | import com.ruoyi.common.enums.DisabledEnum; |
| | | import com.ruoyi.common.enums.ProcessCategoryEnum; |
| | | import com.ruoyi.common.exception.ServiceException; |
| | | import com.ruoyi.common.utils.DateUtils; |
| | | import com.ruoyi.common.utils.DictUtils; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.common.utils.WebUtils; |
| | | import com.ruoyi.common.utils.*; |
| | | import com.ruoyi.system.bo.ProcessStartBO; |
| | | import com.ruoyi.system.dto.RevokeDTO; |
| | | import com.ruoyi.system.dto.SetContractDto; |
| | |
| | | import com.ruoyi.system.vo.CheckAcceptRecordVO; |
| | | import com.ruoyi.system.vo.TContractVO; |
| | | import com.ruoyi.web.controller.tool.NumberToChineseUtils; |
| | | import com.ruoyi.web.controller.tool.TencentCosUtil; |
| | | import com.ruoyi.web.controller.tool.WordUtil; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | |
| | | import org.springframework.web.bind.annotation.RequestParam; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.ServletOutputStream; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.IOException; |
| | |
| | | import java.net.URLEncoder; |
| | | import java.time.LocalDateTime; |
| | | import java.time.temporal.ChronoUnit; |
| | | import java.time.temporal.TemporalAdjusters; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.Date; |
| | |
| | | if (Objects.isNull(house)) { |
| | | throw new ServiceException("房产信息不存在"); |
| | | } |
| | | house.setRentalReturnStatus("1"); |
| | | houseService.updateById(house); |
| | | dto.setBusinessDeptId(house.getBusinessDeptId()); |
| | | // 生成合同编号 |
| | | dto.setContractNumber(CodeGenerateUtils.generateVolumeSn(house.getBusinessDeptId())); |
| | | contractService.save(dto); |
| | | if (dto.getStatus().equals("2")){ |
| | | //发起合同新增审批 |
| | |
| | | } |
| | | @Autowired |
| | | private WordUtil wordUtil; |
| | | @Autowired |
| | | private TencentCosUtil tencentCosUtil; |
| | | @ApiOperation(value = "生成合同附件") |
| | | @PostMapping("/set") |
| | | @Log(title = "生成合同附件", businessType = BusinessType.EXPORT) |
| | |
| | | List<TContract> list = contractService.lambdaQuery().in(TContract::getId, dto.getIds()).list(); |
| | | List<String> res = new ArrayList<>(); |
| | | for (TContract contract : list) { |
| | | String url = generateContract(contract); |
| | | String url = generateContract(contract,new TContractDTO()); |
| | | res.add(url); |
| | | } |
| | | |
| | | return R.ok(res); |
| | | } |
| | | |
| | | private String generateContract(TContract contract) { |
| | | // 计算两个日期相差天数的方法实现: |
| | | public static long calculateDaysBetween(LocalDateTime start, LocalDateTime end) { |
| | | return ChronoUnit.DAYS.between(start, end); |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | LocalDateTime start = LocalDateTime.of(2024, 1, 1, 0, 0); |
| | | LocalDateTime end = LocalDateTime.of(2024, 1, 5, 12, 0); |
| | | long days = calculateDaysBetween(start, end); // 返回4天(不满一天不计) |
| | | |
| | | } |
| | | |
| | | private String generateContract(TContract contract,TContractDTO dto) { |
| | | String templateFileName = "1_yzj_租赁合同_个人.docx"; |
| | | String contractId = contract.getId(); |
| | | TBill firstBill = null; |
| | |
| | | if (StringUtils.isNotEmpty(contractId)) { |
| | | firstBill = billService.lambdaQuery() |
| | | .eq(TBill::getContractId, contractId) |
| | | .orderByDesc(TBill::getStartTime) |
| | | .eq(TBill::getBillType, 1) |
| | | .orderByAsc(TBill::getStartTime) |
| | | .ne(TBill::getManualAddition, DisabledEnum.YES.getCode()) |
| | | .last("limit 1") |
| | | .one(); |
| | | tCheckAcceptRecord = checkAcceptRecordService.lambdaQuery() |
| | |
| | | fill(templateParam, "bankNumber", tenant.getBankNumber()); |
| | | fill(templateParam, "bankName", tenant.getBankName()); |
| | | fill(templateParam, "partyTwoName", tenant.getLessee()); |
| | | fill(templateParam, "email", tenant.getEmail()); |
| | | |
| | | // 企业、政府机构、国有企业 |
| | | if (Objects.nonNull(tenant.getTenantType()) |
| | | && (tenant.getTenantType().equals("2") |
| | | || tenant.getTenantType().equals("5") |
| | | || tenant.getTenantType().equals("7"))) { |
| | | if (Objects.nonNull(tenant.getTenantAttributes()) |
| | | && (tenant.getTenantAttributes().equals("2") |
| | | || tenant.getTenantAttributes().equals("5") |
| | | || tenant.getTenantAttributes().equals("7"))) { |
| | | fill(templateParam, "creditCode", tenant.getCreditCode()); |
| | | fill(templateParam, "legalPerson", tenant.getLegalPerson()); |
| | | templateFileName = "1_yzj_租赁合同_企业.docx"; |
| | |
| | | |
| | | // 日期相关参数处理 |
| | | fill(templateParam, "remark", contract.getRemark()); |
| | | fill(templateParam, "houseUseScope", contract.getHouseUseScope()); |
| | | fill(templateParam, "houseUseScope", StringUtils.isNotEmpty(contract.getHouseUseScope()) ? contract.getHouseUseScope() : "————"); |
| | | fill(templateParam, "days", ChronoUnit.DAYS.between( |
| | | contract.getStartTime(), contract.getEndTime())); |
| | | |
| | |
| | | : contract.getPayType().equals("2") ? "季" |
| | | : "年"; |
| | | fill(templateParam, "payType", payType); |
| | | |
| | | // 首期租金处理 |
| | | if (firstBill != null) { |
| | | fill(templateParam, "firstRent", "¥" + firstBill.getPayableFeesMoney() + "元"); |
| | | } else { |
| | | fill(templateParam, "firstRent", ""); |
| | | } |
| | | |
| | | BigDecimal extracted = extracted(contract,dto); |
| | | System.out.println("金额========================="+extracted); |
| | | fill(templateParam, "firstRent", "¥" + extracted + "元"); |
| | | // 其他财务字段 |
| | | fill(templateParam, "firstRentString", "人民币" + NumberToChineseUtils.numberToChinese( |
| | | (contract.getPayType().equals("1") |
| | | ? contract.getMonthRent() |
| | | : contract.getPayType().equals("2") |
| | | ? contract.getMonthRent().multiply(new BigDecimal("3")) |
| | | : contract.getMonthRent().multiply(new BigDecimal("12"))) |
| | | .setScale(2, RoundingMode.DOWN).doubleValue())); |
| | | fill(templateParam, "firstRentString", "人民币" + NumberToChineseUtils.numberToChinese(extracted.doubleValue())); |
| | | |
| | | fill(templateParam, "firstRentString", |
| | | "人民币"+NumberToChineseUtils.numberToChinese( |
| | | (contract.getPayType().equals("1") |
| | | ? contract.getMonthRent() |
| | | :contract.getPayType().equals("2") |
| | | ?contract.getMonthRent().multiply(new BigDecimal("3")) |
| | | :contract.getMonthRent().multiply(new BigDecimal("12")) |
| | | .setScale(2, RoundingMode.DOWN)).doubleValue())); |
| | | |
| | | // fill(templateParam, "firstRent", |
| | | // "¥"+(contract.getPayType().equals("1") |
| | | // ? contract.getMonthRent() |
| | | // :contract.getPayType().equals("2") |
| | | // ?contract.getMonthRent().multiply(new BigDecimal("3")) |
| | | // :contract.getMonthRent().multiply(new BigDecimal("12")) |
| | | // .setScale(2, RoundingMode.DOWN)).doubleValue()+"元"); |
| | | // |
| | | // |
| | | // fill(templateParam, "firstRentString", |
| | | // "人民币"+NumberToChineseUtils.numberToChinese( |
| | | // (contract.getPayType().equals("1") |
| | | // ? contract.getMonthRent() |
| | | // :contract.getPayType().equals("2") |
| | | // ?contract.getMonthRent().multiply(new BigDecimal("3")) |
| | | // :contract.getMonthRent().multiply(new BigDecimal("12")) |
| | | // .setScale(2, RoundingMode.DOWN)).doubleValue())); |
| | | |
| | | |
| | | |
| | |
| | | fill(templateParam, "checkTime", ""); |
| | | } |
| | | |
| | | String url = ""; |
| | | if (StringUtils.isNotEmpty(contract.getSignature())){ |
| | | url = tencentCosUtil.downLoadFileImg(contract.getSignature()); |
| | | } |
| | | |
| | | |
| | | return wordUtil.generatePdf( |
| | | "/usr/local/project/file/", |
| | | templateFileName, |
| | | templateParam, |
| | | "租赁合同", |
| | | "/usr/local/project/file/"); |
| | | "/usr/local/project/file/",url); |
| | | } |
| | | |
| | | private BigDecimal extracted(TContract contract,TContractDTO dto) { |
| | | TContractRentType tContractRentType = null; |
| | | if (contract.getIsIncreasing()){ |
| | | tContractRentType = contractRentTypeService.lambdaQuery().eq(TContractRentType::getContractId, contract.getId()) |
| | | .last("limit 1").one(); |
| | | if (tContractRentType==null){ |
| | | tContractRentType = new TContractRentType(); |
| | | tContractRentType.setContractId(contract.getId()); |
| | | tContractRentType.setIncreasingDecreasing(dto.getIncreasingDecreasing()); |
| | | tContractRentType.setIncreasingDecreasingType(dto.getIncreasingDecreasingType()); |
| | | tContractRentType.setNumericalValue(dto.getNumericalValue()); |
| | | tContractRentType.setChangeTime(dto.getChangeTime()); |
| | | tContractRentType.setCycleTime(dto.getCycleTime()); |
| | | } |
| | | } |
| | | // 生成第一笔账单 |
| | | // 第一次应缴费日期 |
| | | |
| | | LocalDateTime firstPayTime = contract.getStartTime().plusDays(10).withHour(0).withMinute(0).withSecond(0); |
| | | TBill rentBill = new TBill(); |
| | | rentBill.setContractId(contract.getId()); |
| | | rentBill.setContractNumber(contract.getContractNumber()); |
| | | rentBill.setPayableFeesTime(firstPayTime.toLocalDate()); |
| | | rentBill.setPayFeesStatus("1"); |
| | | rentBill.setBillType("1"); |
| | | rentBill.setStartTime(contract.getStartPayTime()); |
| | | if (contract.getPayType().equals("2")) { |
| | | // 季付 取3 6 9 12 |
| | | int temp = 0 ; |
| | | if (contract.getStartPayTime().getMonthValue() <= 3 ) { |
| | | temp = 3; |
| | | } else if (contract.getStartPayTime().getMonthValue() <= 6) { |
| | | temp = 6; |
| | | } else if (contract.getStartPayTime().getMonthValue() <= 9) { |
| | | temp = 9; |
| | | } else { |
| | | temp = 12; |
| | | } |
| | | if (contract.getEndTime().isAfter(contract.getStartPayTime().withMonth(temp).with(TemporalAdjusters.lastDayOfMonth()))){ |
| | | rentBill.setEndTime(contract.getStartPayTime().withMonth(temp).with(TemporalAdjusters.lastDayOfMonth())); |
| | | }else { |
| | | rentBill.setEndTime(contract.getEndTime()); |
| | | } |
| | | } else if (contract.getPayType().equals("3")) { |
| | | if (contract.getEndTime().isAfter(contract.getStartPayTime().withMonth(12).with(TemporalAdjusters.lastDayOfMonth()))){ |
| | | rentBill.setEndTime(contract.getStartPayTime().withMonth(12).with(TemporalAdjusters.lastDayOfMonth())); |
| | | }else { |
| | | rentBill.setEndTime(contract.getEndTime()); |
| | | } |
| | | } else { |
| | | rentBill.setEndTime(rentBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth())); |
| | | } |
| | | if (tContractRentType != null && rentBill.getEndTime().isAfter(tContractRentType.getChangeTime())){ |
| | | long moneyDays = 0; |
| | | if (tContractRentType.getChangeTime().with(TemporalAdjusters.lastDayOfMonth()).isBefore(rentBill.getEndTime())){ |
| | | moneyDays = ChronoUnit.DAYS.between(tContractRentType.getChangeTime(), tContractRentType.getChangeTime().with(TemporalAdjusters.lastDayOfMonth())) + 1; |
| | | }else{ |
| | | moneyDays = ChronoUnit.DAYS.between(tContractRentType.getChangeTime(),rentBill.getEndTime()) + 1; |
| | | } |
| | | // 计算租金变动的天数 |
| | | contract.setChangeTime(tContractRentType.getChangeTime()); |
| | | // 递增递减的租金 |
| | | BigDecimal contractRentTypeMoney = new BigDecimal("0"); |
| | | // 不递增递减的租金 |
| | | BigDecimal originalMoney = new BigDecimal("0"); |
| | | switch (tContractRentType.getIncreasingDecreasingType()) { |
| | | case 1: |
| | | switch (tContractRentType.getIncreasingDecreasing()) { |
| | | case 1: |
| | | contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent().multiply(new BigDecimal(100).add(tContractRentType.getNumericalValue())).divide(new BigDecimal(100), 2, BigDecimal.ROUND_DOWN).divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(moneyDays)).setScale(2, BigDecimal.ROUND_DOWN)); |
| | | // 变动后的每月租金 |
| | | contract.setChangeRent(contract.getChangeRent().multiply(new BigDecimal(100).add(tContractRentType.getNumericalValue())).divide(new BigDecimal(100), 2, BigDecimal.ROUND_DOWN)); |
| | | break; |
| | | case 2: |
| | | contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent().multiply((new BigDecimal(100).subtract(tContractRentType.getNumericalValue()))).divide(new BigDecimal(100), 2, BigDecimal.ROUND_DOWN).divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(moneyDays)).setScale(2, BigDecimal.ROUND_DOWN)); |
| | | contract.setChangeRent(contract.getChangeRent().multiply((new BigDecimal(100).subtract(tContractRentType.getNumericalValue()))).divide(new BigDecimal(100), 2, BigDecimal.ROUND_DOWN)); |
| | | break; |
| | | } |
| | | break; |
| | | case 2: |
| | | switch (tContractRentType.getIncreasingDecreasing()) { |
| | | case 1: |
| | | contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent().add(tContractRentType.getNumericalValue())).divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(moneyDays)).setScale(2, BigDecimal.ROUND_DOWN); |
| | | contract.setChangeRent(contract.getChangeRent().add(tContractRentType.getNumericalValue())); |
| | | break; |
| | | case 2: |
| | | contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent().subtract(tContractRentType.getNumericalValue())).divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(moneyDays)).setScale(2, BigDecimal.ROUND_DOWN); |
| | | contract.setChangeRent(contract.getChangeRent().subtract(tContractRentType.getNumericalValue())); |
| | | break; |
| | | } |
| | | break; |
| | | } |
| | | LocalDateTime localDateTime = tContractRentType.getChangeTime().with(TemporalAdjusters.lastDayOfMonth()).plusDays(1); |
| | | while(true){ |
| | | if (localDateTime.isBefore(rentBill.getEndTime())){ |
| | | if (localDateTime.plusMonths(1).isBefore(rentBill.getEndTime())){ |
| | | contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent()); |
| | | localDateTime = localDateTime.plusMonths(1); |
| | | }else { |
| | | break; |
| | | } |
| | | }else{ |
| | | break; |
| | | } |
| | | } |
| | | long temp = ChronoUnit.DAYS.between(localDateTime,rentBill.getEndTime()) + 1; |
| | | contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(temp))); |
| | | // 不需要涨租金的时间段 |
| | | long originalDays = 0; |
| | | if (contract.getFirstPayTime().with(TemporalAdjusters.lastDayOfMonth()).isBefore(tContractRentType.getChangeTime())){ |
| | | originalDays = Math.abs(ChronoUnit.DAYS.between(contract.getFirstPayTime(), contract.getFirstPayTime().with(TemporalAdjusters.lastDayOfMonth()))); |
| | | }else{ |
| | | originalDays = Math.abs(ChronoUnit.DAYS.between(contract.getFirstPayTime(), tContractRentType.getChangeTime())); |
| | | } |
| | | originalMoney = originalMoney.add(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(originalDays))); |
| | | LocalDateTime originalTime = contract.getFirstPayTime().with(TemporalAdjusters.lastDayOfMonth()).plusDays(1); |
| | | while(true){ |
| | | if (originalTime.isBefore(tContractRentType.getChangeTime())){ |
| | | if (originalTime.plusMonths(1).isBefore(tContractRentType.getChangeTime())){ |
| | | originalMoney = originalMoney.add(contract.getMonthRent()); |
| | | originalTime = originalTime.plusMonths(1); |
| | | }else { |
| | | break; |
| | | } |
| | | }else{ |
| | | break; |
| | | } |
| | | } |
| | | long tempOriginal = ChronoUnit.DAYS.between(localDateTime,tContractRentType.getChangeTime()) ; |
| | | originalMoney = originalMoney.add(contract.getChangeRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(tempOriginal))); |
| | | rentBill.setPayableFeesMoney(contractRentTypeMoney.add(originalMoney)); |
| | | rentBill.setOutstandingMoney(rentBill.getPayableFeesMoney()); |
| | | } else { |
| | | // 不走递增递减 |
| | | if (contract.getPayType().equals("2")){ |
| | | BigDecimal money = new BigDecimal("0"); |
| | | // 第一个月计算天 |
| | | int dayOfMonth = rentBill.getStartTime().getDayOfMonth(); |
| | | if (dayOfMonth == 1) { |
| | | System.err.println("第一笔账单 1号计算整月:"); |
| | | money = money.add(contract.getMonthRent()); |
| | | } else { |
| | | long allDays = Math.abs(ChronoUnit.DAYS.between(rentBill.getStartTime(), rentBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth())) + 1); |
| | | System.err.println("第一笔账单 计算天数"+allDays); |
| | | money =money.add(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(allDays))); |
| | | System.err.println("第一笔账单 计算天数金额"+money); |
| | | } |
| | | // 后续 |
| | | if (contract.getStartPayTime().getMonthValue()==3|| contract.getStartPayTime().getMonthValue()==6|| contract.getStartPayTime().getMonthValue()==9|| contract.getStartPayTime().getMonthValue()==12){ |
| | | System.err.println("后续账单 月为3 6 9 12金额"+money); |
| | | rentBill.setPayableFeesMoney(money); |
| | | rentBill.setOutstandingMoney(rentBill.getPayableFeesMoney()); |
| | | }else{ |
| | | |
| | | LocalDateTime localDateTime = rentBill.getStartTime().plusMonths(1).with(TemporalAdjusters.lastDayOfMonth()); |
| | | System.err.println("后续账单逻辑时间"+localDateTime); |
| | | while (true){ |
| | | if (localDateTime.toLocalDate().isBefore(rentBill.getEndTime().toLocalDate())){ |
| | | System.err.println("后续while 在结束之前"); |
| | | money = money.add(contract.getMonthRent()); |
| | | }else if(localDateTime.toLocalDate().equals(rentBill.getEndTime().toLocalDate())){ |
| | | System.err.println("后续while 结束"); |
| | | money = money.add(contract.getMonthRent()); |
| | | break; |
| | | }else { |
| | | System.err.println("后续while 加一个月大于结束时间"); |
| | | if (localDateTime.with(TemporalAdjusters.firstDayOfMonth()).isBefore(rentBill.getEndTime())){ |
| | | long a = ChronoUnit.DAYS.between(localDateTime.with(TemporalAdjusters.firstDayOfMonth()),rentBill.getEndTime())+1; |
| | | System.err.println("后续while 加一个月大于结束时间 计算天数"+a); |
| | | money = money.add(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply( |
| | | new BigDecimal(ChronoUnit.DAYS.between(localDateTime.with(TemporalAdjusters.firstDayOfMonth()),rentBill.getEndTime())+1)) |
| | | ); |
| | | } |
| | | |
| | | break; |
| | | } |
| | | localDateTime = localDateTime.plusMonths(1).with(TemporalAdjusters.lastDayOfMonth()); |
| | | } |
| | | rentBill.setPayableFeesMoney(money); |
| | | rentBill.setOutstandingMoney(rentBill.getPayableFeesMoney()); |
| | | } |
| | | }else if (contract.getPayType().equals("3")){ |
| | | BigDecimal money = new BigDecimal("0"); |
| | | // 第一个月计算天 |
| | | int dayOfMonth = rentBill.getStartTime().getDayOfMonth(); |
| | | if (dayOfMonth == 1) { |
| | | money = money.add(contract.getMonthRent()); |
| | | } else { |
| | | long allDays = ChronoUnit.DAYS.between(rentBill.getStartTime(), rentBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth())) ; |
| | | money =money.add(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(allDays))); |
| | | } |
| | | // 后续 |
| | | if (contract.getStartPayTime().getMonthValue()==12){ |
| | | rentBill.setPayableFeesMoney(money); |
| | | rentBill.setOutstandingMoney(rentBill.getPayableFeesMoney()); |
| | | }else{ |
| | | // LocalDateTime localDateTime = rentBill.getStartTime().plusMonths(1).with(TemporalAdjusters.lastDayOfMonth()); |
| | | LocalDateTime localDateTime = rentBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth()).plusDays(1); |
| | | while (true){ |
| | | if (localDateTime.isBefore(rentBill.getEndTime())){ |
| | | localDateTime = localDateTime.plusMonths(1); |
| | | money = money.add(contract.getMonthRent()); |
| | | }else{ |
| | | money = money.add(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(ChronoUnit.DAYS.between(rentBill.getEndTime(),localDateTime.with(TemporalAdjusters.firstDayOfMonth()))))); |
| | | break; |
| | | } |
| | | } |
| | | rentBill.setPayableFeesMoney(money); |
| | | rentBill.setOutstandingMoney(rentBill.getPayableFeesMoney()); |
| | | } |
| | | }else { |
| | | long allDays = ChronoUnit.DAYS.between(contract.getStartPayTime(), rentBill.getEndTime()) + 1; |
| | | int dayOfMonth = rentBill.getStartTime().getDayOfMonth(); |
| | | if (dayOfMonth == 1) { |
| | | rentBill.setPayableFeesMoney(contract.getMonthRent()); |
| | | } else { |
| | | rentBill.setPayableFeesMoney(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(allDays))); |
| | | } |
| | | rentBill.setOutstandingMoney(rentBill.getPayableFeesMoney()); |
| | | } |
| | | } |
| | | // 押金账单 |
| | | TBill depositBill = new TBill(); |
| | | depositBill.setContractId(contract.getId()); |
| | | depositBill.setContractNumber(contract.getContractNumber()); |
| | | depositBill.setPayableFeesMoney(contract.getDeposit()); |
| | | depositBill.setOutstandingMoney(depositBill.getPayableFeesMoney()); |
| | | depositBill.setStartTime(contract.getStartPayTime()); |
| | | depositBill.setEndTime(contract.getEndTime()); |
| | | depositBill.setPayableFeesTime(firstPayTime.toLocalDate()); |
| | | depositBill.setPayFeesStatus("1"); |
| | | depositBill.setBillType("2"); |
| | | rentBill.setBusinessDeptId(contract.getBusinessDeptId()); |
| | | depositBill.setBusinessDeptId(contract.getBusinessDeptId()); |
| | | return rentBill.getPayableFeesMoney() ; |
| | | |
| | | } |
| | | |
| | | |
| | |
| | | @PostMapping("/generateContractPreview") |
| | | public R<String> generateContractPreview(@RequestBody TContractDTO dto) |
| | | { |
| | | String contractName = dto.getContractName(); |
| | | if (StringUtils.isEmpty(contractName)){ |
| | | return R.fail("合同名称不能为空"); |
| | | } |
| | | LocalDateTime startTime = dto.getStartTime(); |
| | | if (startTime == null){ |
| | | return R.fail("合同生效日期不能为空"); |
| | | } |
| | | LocalDateTime endTime = dto.getEndTime(); |
| | | if (endTime == null){ |
| | | return R.fail("合同生效日期不能为空"); |
| | | } |
| | | |
| | | BigDecimal monthRent = dto.getMonthRent(); |
| | | if (monthRent == null){ |
| | | return R.fail("月租金不能为空"); |
| | | } |
| | | |
| | | BigDecimal deposit = dto.getDeposit(); |
| | | if (deposit == null){ |
| | | return R.fail("押金不能为空"); |
| | | } |
| | | |
| | | String payType = dto.getPayType(); |
| | | if (StringUtils.isEmpty(payType)){ |
| | | return R.fail("租金支付方式不能为空"); |
| | | } |
| | | |
| | | LocalDateTime startPayTime = dto.getStartPayTime(); |
| | | if (startPayTime == null){ |
| | | return R.fail("开始计费日期不能为空"); |
| | | } |
| | | |
| | | String partyOneName = dto.getPartyOneName(); |
| | | if (StringUtils.isEmpty(partyOneName)){ |
| | | return R.fail("甲方名称不能为空"); |
| | | } |
| | | |
| | | String partyOnePerson = dto.getPartyOnePerson(); |
| | | if (StringUtils.isEmpty(partyOnePerson)){ |
| | | return R.fail("甲方联系人不能为空"); |
| | | } |
| | | |
| | | String partyOnePhone = dto.getPartyOnePhone(); |
| | | if (StringUtils.isEmpty(partyOnePhone)){ |
| | | return R.fail("甲方联系电话不能为空"); |
| | | } |
| | | |
| | | String partyTwoName = dto.getPartyTwoName(); |
| | | if (StringUtils.isEmpty(partyTwoName)){ |
| | | return R.fail("乙方名称不能为空"); |
| | | } |
| | | String partyTwoPerson = dto.getPartyTwoPerson(); |
| | | if (StringUtils.isEmpty(partyTwoPerson)){ |
| | | return R.fail("乙方联系人不能为空"); |
| | | } |
| | | String partyTwoPhone = dto.getPartyTwoPhone(); |
| | | if (StringUtils.isEmpty(partyTwoPhone)){ |
| | | return R.fail("乙方联系电话不能为空"); |
| | | } |
| | | |
| | | TContract contract = new TContract(); |
| | | BeanUtil.copyProperties(dto,contract); |
| | | return R.ok(generateContract(contract)); |
| | | return R.ok(generateContract(contract,dto)); |
| | | } |
| | | |
| | | /** |