package com.ruoyi.web.controller.api; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.constant.DictConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.CodeGenerateUtils; import com.ruoyi.common.utils.DictUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.dto.BatchBillDTO; import com.ruoyi.system.dto.TBillDto; import com.ruoyi.system.dto.TInvoiceDTO; import com.ruoyi.system.model.*; import com.ruoyi.system.query.TBillQuery; import com.ruoyi.system.service.*; import com.ruoyi.system.vo.TBillVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.List; /** *

* 租金账单 前端控制器 *

* * @author xiaochen * @since 2025-01-17 */ @Api(tags = "缴费账单") @RestController @RequestMapping("/t-bill") public class TBillController { @Autowired TBillService tBillService; @Autowired TBillDetailService billDetailService; @Autowired TContractService contractService; @Autowired THouseService houseService; @Autowired TInvoiceService invoiceService; @Autowired TInvoiceToBillService invoiceToBillService; @Autowired TokenService tokenService; @Autowired TTenantService tenantService; @ApiOperation(value = "缴费账单查询分页列表") @PostMapping("list") public R> list(@RequestBody TBillQuery query){ String userId = tokenService.getLoginUserApplet().getUserId(); query.setUserId(userId); PageInfo pageInfo = tBillService.queryPage(query); return R.ok(pageInfo); } public static void main(String[] args) { LocalDateTime localDateTime1 = LocalDateTime.now().withYear(2025).withMonth(11).withDayOfMonth(1); LocalDateTime localDateTime2 = LocalDateTime.now().withYear(2025).withMonth(11).withDayOfMonth(28); long allDays = ChronoUnit.DAYS.between(localDateTime1, localDateTime2); System.err.println(allDays); } @ApiOperation(value = "缴费账单查询列表") @PostMapping("/getBillIds") public R> getBillIds(@RequestBody TBillQuery query){ String userId = tokenService.getLoginUserApplet().getUserId(); query.setUserId(userId); List billIds = tBillService.getBillIds(query); return R.ok(billIds); } @ApiOperation(value = "跳转批量缴费") @PostMapping("/batchBill") public R batchBill(@RequestBody BatchBillDTO dto){ String userId = tokenService.getLoginUserApplet().getUserId(); List billIds = dto.getBillIds(); Integer count = tBillService.batchBillCount(userId, billIds); if(count>0){ return R.fail("请优先缴纳水电费"); } return R.ok(); } @ApiOperation(value = "查看缴费账单详情") @GetMapping(value = "/getDetailById") public R getDetailById(@RequestParam String id) { TBill bill = tBillService.getById(id); TBillVO billVO = new TBillVO(); BeanUtils.copyProperties(bill, billVO); // 查询水电费列表 if("3".equals(bill.getBillType())){ List list = billDetailService.list(Wrappers.lambdaQuery(TBillDetail.class) .eq(TBillDetail::getBillId, id)); billVO.setBillDetailList(list); } // 查询合同信息 contractService.lambdaQuery().eq(TContract::getId, bill.getContractId()).oneOpt().ifPresent(contract -> { // 查询房屋信息 billVO.setHouse(houseService.getById(contract.getHouseId())); billVO.setMonthRent(contract.getMonthRent()); billVO.setPayType(contract.getPayType()); billVO.setDeposit(contract.getDeposit()); billVO.setPartyOnePerson(contract.getPartyOnePerson()); billVO.setPartyOnePhone(contract.getPartyOnePhone()); billVO.setConcatStartTime(contract.getStartTime()); billVO.setConcatEndTime(contract.getEndTime()); }); billVO.setBillType(DictUtils.getDictLabel(DictConstants.DICT_TYPE_BILL_TYPE,billVO.getBillType())); // billVO.setPayFeesStatus(DictUtils.getDictLabel(DictConstants.DICT_TYPE_PAY_FEES_STATUS,billVO.getPayFeesStatus())); return R.ok(billVO); } @ApiOperation(value = "缴费账单开票") @PostMapping(value = "/invoice") public R invoice(@RequestBody TInvoiceDTO dto) { String userId = tokenService.getLoginUserApplet().getUserId(); dto.setApplyName(tenantService.getById(userId).getResidentName()); String code; do { code = CodeGenerateUtils.generateVolumeSn(); } while (invoiceService.count(Wrappers.lambdaQuery(TInvoice.class).eq(TInvoice::getInvoiceNumber, code)) > 0); dto.setInvoiceNumber(CodeGenerateUtils.generateVolumeSn()); // 添加开票信息 invoiceService.save(dto); // 添加开票信息中间表信息 List billIds = dto.getBillIds(); List sysInvoiceToBills = new ArrayList<>(); for (String billId : billIds) { TInvoiceToBill tInvoiceToBill = new TInvoiceToBill(); tInvoiceToBill.setInvoiceId(dto.getId()); tInvoiceToBill.setBillId(billId); sysInvoiceToBills.add(tInvoiceToBill); } invoiceToBillService.saveBatch(sysInvoiceToBills); return R.ok(); } @ApiOperation(value = "缴费账单开票列表") @PostMapping(value = "/invoiceList") public R> invoiceList(@RequestBody TBillQuery query) { String userId = tokenService.getLoginUserApplet().getUserId(); query.setUserId(userId); PageInfo pageInfo = tBillService.invoiceList(query); return R.ok(pageInfo); } }