yupeng
2025-04-15 cd3d553f88fb74f1b15eca9fd50b4318956fb01d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
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<TRentalReturnRecordMapper, TRentalReturnRecord>
        implements ITRentalReturnRecordService {
    private final TContractService contractService;
    private final StateProcessTemplateService stateProcessTemplateService;
    private final THouseService houseService;
 
    @Override
    public IPage<RentalReturnRecordVO> queryRentalReturnRecordList(Page<RentalReturnRecordVO> 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<THouse>()
                .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<String, Object> 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);
    }
}