package com.ruoyi.web.controller.api;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.core.domain.model.LoginUserApplet;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.DictUtils;
import com.ruoyi.framework.web.service.TokenService;
import com.ruoyi.system.dto.TBillDto;
import com.ruoyi.system.dto.TInvoiceDTO;
import com.ruoyi.system.model.*;
import com.ruoyi.system.query.TBannerQuery;
import com.ruoyi.system.query.TBillQuery;
import com.ruoyi.system.service.*;
import com.ruoyi.system.vo.MyHouseVO;
import com.ruoyi.system.vo.MyToDoVO;
import com.ruoyi.system.vo.PayListVO;
import com.ruoyi.system.vo.TBillVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import jdk.nashorn.internal.parser.Token;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
*
* 租金账单 前端控制器
*
*
* @author xiaochen
* @since 2025-01-17
*/
@Api(tags = "首页")
@RestController
@RequestMapping("/t-index")
public class IndexController {
@Autowired
private TBannerService bannerService;
@Autowired
private TokenService tokenService;
@Autowired
private TContractService contractService;
@Autowired
private TBillService billService;
@Autowired
private THouseService houseService;
/**
* 获取轮播图管理列表
*/
@ApiOperation(value = "获取轮播图列表")
@PostMapping(value = "/list")
public R> list(@RequestBody TBannerQuery query) {
return R.ok(bannerService.list(query));
} /**
* 获取轮播图管理列表
*/
@ApiOperation(value = "租户-我的待办")
@PostMapping(value = "/tenant/myToDo")
public R tenantMyToDo() {
MyToDoVO myToDoVO = new MyToDoVO();
LoginUserApplet loginUserApplet = tokenService.getLoginUserApplet();
if (loginUserApplet!=null){
long contractCount = contractService.count(new LambdaQueryWrapper()
.eq(TContract::getStatus, 3).eq(TContract::getTenantId, loginUserApplet.getUserId()));
myToDoVO.setContractCount((int) contractCount);
List contractIds = contractService.lambdaQuery().eq(TContract::getTenantId, loginUserApplet.getUserId()).list()
.stream().map(TContract::getId).collect(Collectors.toList());
if (CollectionUtils.isEmpty(contractIds)){
myToDoVO.setBillCount(0);
myToDoVO.setContractCount(0);
return R.ok(myToDoVO);
}
int billCount = billService.lambdaQuery().in(TBill::getContractId, contractIds).eq(TBill::getPayFeesStatus, 1).list().size();
myToDoVO.setBillCount(billCount);
}else {
myToDoVO.setBillCount(0);
myToDoVO.setContractCount(0);
}
return R.ok(myToDoVO);
}
@ApiOperation(value = "租户-当前在租房源")
@PostMapping(value = "/tenant/myHouse")
public R> myHouse() {
List myHouseVOS = new ArrayList<>();
LoginUserApplet loginUserApplet = tokenService.getLoginUserApplet();
if (loginUserApplet!=null){
List contractList = contractService.lambdaQuery().eq(TContract::getTenantId, loginUserApplet.getUserId())
.eq(TContract::getStatus, 4).list();
List houseList = houseService.list();
List bills = billService.lambdaQuery().eq(TBill::getPayFeesStatus,3).orderByDesc(TBill::getPayFeesTime).list();
for (TContract contract : contractList) {
THouse tHouse = houseList.stream().filter(e -> e.getId().equals(contract.getHouseId())).findFirst().orElse(null);
TBill bill = bills.stream().filter(e -> e.getContractId().equals(contract.getId())).findFirst().orElse(null);
if (tHouse!=null&& bill!=null){
MyHouseVO myToDoVO = new MyHouseVO();
myToDoVO.setHouseAddress(tHouse.getHouseAddress());
myToDoVO.setMonthRent(contract.getMonthRent());
myToDoVO.setPayType(DictUtils.getDictLabel(DictConstants.DICT_TYPE_CONTRACT_PAY_TYPE,contract.getPayType()));
myToDoVO.setMonth(bill.getPayFeesTime().getMonth()+"");
myToDoVO.setHouseArea(tHouse.getHouseArea());
myToDoVO.setHouseType(tHouse.getHouseType());
myToDoVO.setEndTime(DateUtils.localDateTimeToStringYear(contract.getEndTime()));
myToDoVO.setStartTime(DateUtils.localDateTimeToStringYear(contract.getStartTime()));
myToDoVO.setPropertyRightPerson(tHouse.getPropertyRightPerson());
myToDoVO.setPhone(tHouse.getPhone());
List billList = bills.stream().filter(e -> e.getContractId().equals(contract.getId())).collect(Collectors.toList());
List payList = new ArrayList<>();
for (TBill tBill : billList) {
PayListVO payListVO = new PayListVO();
payListVO.setPayFeesTime(DateUtils.localDateTimeToStringYear(tBill.getPayFeesTime()));
payListVO.setPayFeesMoney("-"+tBill.getPayFeesMoney()+"元");
payList.add(payListVO);
}
myToDoVO.setPayList(payList);
myHouseVOS.add(myToDoVO);
}
}
return R.ok(myHouseVOS);
}else {
return R.ok(myHouseVOS);
}
}
@ApiOperation(value = "管理员-我的待办")
@PostMapping(value = "/admin/myToDo")
public R adminMyToDo() {
MyToDoVO myToDoVO = new MyToDoVO();
LoginUserApplet loginUserApplet = tokenService.getLoginUserApplet();
if (loginUserApplet!=null){
long examineCount = contractService.count(new LambdaQueryWrapper()
.eq(TContract::getStatus, 2));
myToDoVO.setExamineCount((int) examineCount);
List contractIds = billService.lambdaQuery().eq(TBill::getPayFeesStatus, 4).list()
.stream().map(TBill::getContractId).collect(Collectors.toList());
int overdueCount = contractService.lambdaQuery().in(TContract::getId, contractIds).list()
.stream().map(TContract::getTenantId).distinct().collect(Collectors.toList()).size();
myToDoVO.setOverdueCount(overdueCount);
}else {
myToDoVO.setExamineCount(0);
myToDoVO.setOverdueCount(0);
}
return R.ok(myToDoVO);
}
}