package com.ruoyi.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.model.LoginUserApplet; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.enums.ProcessCategoryEnum; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.system.bo.ProcessStartBO; import com.ruoyi.system.mapper.TRentalReturnRecordMapper; import com.ruoyi.system.model.TContract; import com.ruoyi.system.model.THouse; import com.ruoyi.system.model.TRentalReturnRecord; import com.ruoyi.system.query.RentalReturnAuditQuery; import com.ruoyi.system.query.RentalReturnRecordQuery; import com.ruoyi.system.service.ITRentalReturnRecordService; import com.ruoyi.system.service.StateProcessTemplateService; import com.ruoyi.system.service.TContractService; import com.ruoyi.system.service.THouseService; import com.ruoyi.system.vo.RentalRetureApplyVO; import com.ruoyi.system.vo.RentalReturnRecordVO; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; import java.util.HashMap; import java.util.Map; @Service @RequiredArgsConstructor(onConstructor_ = @__(@Lazy)) public class TRentalReturnRecordServiceImpl extends ServiceImpl implements ITRentalReturnRecordService { private final TContractService contractService; private final StateProcessTemplateService stateProcessTemplateService; private final THouseService houseService; @Override public IPage queryRentalReturnRecordList(Page page, RentalReturnRecordQuery query) { String businessDeptId = SecurityUtils.getBusinessDeptId(); query.setBusinessDeptId(businessDeptId); query.setIsAdminDelete(true); return this.baseMapper.queryRentalReturnRecordList(page, query); } @Override public RentalReturnRecordVO queryRentalReturnRecordById(String id) { return this.baseMapper.queryRentalReturnRecordById(id); } @Override @Transactional(rollbackFor = Exception.class) public void apply(RentalRetureApplyVO rentalReture,String tenantId) { TContract contract = contractService.getById(rentalReture.getContractId()); if (contract == null) { throw new ServiceException("该房屋暂无合同"); } TRentalReturnRecord tRentalReturnRecord = new TRentalReturnRecord(); tRentalReturnRecord.setTenantId(tenantId); tRentalReturnRecord.setHouseId(contract.getHouseId()); tRentalReturnRecord.setContractId(contract.getId()); tRentalReturnRecord.setReasonForReturn(rentalReture.getReasonForReturn()); tRentalReturnRecord.setImages(rentalReture.getImages()); tRentalReturnRecord.setAuditStatus(1); save(tRentalReturnRecord); boolean update = houseService.update(new LambdaUpdateWrapper() .set(THouse::getRentalReturnStatus, "2") .eq(THouse::getId, contract.getHouseId())); if (!update){ throw new ServiceException("更新房屋状态失败"); } } @Override @Transactional(rollbackFor = Exception.class) public void audit(RentalReturnAuditQuery returnAuditQuery, Long userId,String userName) { TRentalReturnRecord record = getById(returnAuditQuery.getId()); if (record == null){ throw new ServiceException("申请记录不存在"); } if (record.getAuditStatus() != 1){ throw new ServiceException("申请记录已审核"); } THouse house = houseService.getById(record.getHouseId()); if (returnAuditQuery.getAuditResult() == 2){ TContract contract = contractService.getById(record.getContractId()); contract.setTerminateRemark(returnAuditQuery.getAuditOpinion()); contract.setTerminateTime(record.getCreateTime()); contractService.updateById(contract); // 进入合同提前终止审批流程 ProcessStartBO processStartBO = new ProcessStartBO(); processStartBO.setCategory(ProcessCategoryEnum.CATEGORY3.getValue().toString()); processStartBO.setModuleName("合同提前终止审批"); processStartBO.setName(contract.getContractName()); processStartBO.setRemark(""); Map variable = new HashMap<>(); variable.put("projectId", record.getContractId()); processStartBO.setVariable(variable); //开启工作流程 stateProcessTemplateService.start(processStartBO); house.setRentalReturnStatus("3"); houseService.updateById(house); }else { house.setRentalReturnStatus("1"); houseService.updateById(house); } record.setAuditTime(LocalDateTime.now()); record.setAuditStatus(returnAuditQuery.getAuditResult()); record.setAuditOpinion(returnAuditQuery.getAuditOpinion()); record.setAuditUserId(userId); record.setUpdateBy(userName); record.setUpdateTime(LocalDateTime.now()); updateById(record); } }