maven
昨天 9f99167aba3720cb731298511f8423b18c08e5a2
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package com.ruoyi.basic.service.impl;
 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.basic.dto.CustomerReturnVisitDto;
import com.ruoyi.basic.mapper.CustomerReturnVisitMapper;
import com.ruoyi.basic.pojo.CustomerReturnVisit;
import com.ruoyi.basic.service.CustomerReturnVisitService;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.SecurityUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.time.LocalDateTime;
import java.util.List;
 
/**
 * <br>
 * 客户回访提醒接口实现类
 * </br>
 *
 * @author deslrey
 * @version 1.0
 * @since 2026/03/04 17:58
 */
@Service
public class CustomerReturnVisitServiceImpl extends ServiceImpl<CustomerReturnVisitMapper, CustomerReturnVisit> implements CustomerReturnVisitService {
 
    @Autowired
    private ReturnVisitReminderService returnVisitReminderService;
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int saveOrUpdateReturnVisit(CustomerReturnVisit customerReturnVisit) {
        validateReturnVisit(customerReturnVisit);
        Long currentUserId = SecurityUtils.getUserId();
        Long currentTenantId = SecurityUtils.getLoginUser().getTenantId();
        if (customerReturnVisit.getId() != null) {
            CustomerReturnVisit existing = baseMapper.selectById(customerReturnVisit.getId());
            if (existing == null) {
                throw new ServiceException("回访提醒不存在");
            }
            if (!existing.getTenantId().equals(currentTenantId)) {
                throw new ServiceException("无权限修改此回访提醒");
            }
            customerReturnVisit.setUpdateUser(currentUserId);
            customerReturnVisit.setUpdateTime(LocalDateTime.now());
            int result = baseMapper.updateById(customerReturnVisit);
 
            //  根据提醒开关来判断队列信息新增或取消
            if (customerReturnVisit.getIsEnabled() == 1) {
                returnVisitReminderService.scheduleReminder(customerReturnVisit.getId());
            } else {
                returnVisitReminderService.cancelReminder(customerReturnVisit.getId());
            }
            return result;
        } else {
            customerReturnVisit.setCreateUser(currentUserId);
            customerReturnVisit.setCreateTime(LocalDateTime.now());
            customerReturnVisit.setTenantId(currentTenantId);
            int result = baseMapper.insert(customerReturnVisit);
 
            if (customerReturnVisit.getIsEnabled() == 1) {
                returnVisitReminderService.scheduleReminder(customerReturnVisit.getId());
            }
            return result;
        }
    }
 
    @Override
    public CustomerReturnVisitDto getByCustomerId(Integer customerId) {
        if (customerId == null) {
            throw new ServiceException("客户ID不能为空");
        }
        LambdaQueryWrapper<CustomerReturnVisit> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(CustomerReturnVisit::getCustomerId, customerId);
        CustomerReturnVisit returnVisit = baseMapper.selectOne(queryWrapper);
 
        if (returnVisit == null) {
            return null;
        }
 
        CustomerReturnVisitDto dto = new CustomerReturnVisitDto();
        BeanUtils.copyProperties(returnVisit, dto);
        return dto;
    }
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void deleteByCustomerId(Long customerId) {
        if (customerId == null) {
            throw new ServiceException("客户ID不能为空");
        }
        LambdaQueryWrapper<CustomerReturnVisit> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(CustomerReturnVisit::getCustomerId, customerId);
        List<CustomerReturnVisit> returnVisits = baseMapper.selectList(queryWrapper);
 
        for (CustomerReturnVisit returnVisit : returnVisits) {
            returnVisitReminderService.cancelReminder(returnVisit.getId());
        }
        baseMapper.delete(queryWrapper);
    }
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void markAsRead(Long id) {
        if (id == null) {
            throw new ServiceException("回访提醒ID不能为空");
        }
        CustomerReturnVisit returnVisit = baseMapper.selectById(id);
        if (returnVisit == null) {
            throw new ServiceException("回访提醒不存在");
        }
 
        CustomerReturnVisit updateObj = new CustomerReturnVisit();
        updateObj.setId(id);
        updateObj.setIsCompleted(1);
        baseMapper.updateById(updateObj);
    }
 
    private void validateReturnVisit(CustomerReturnVisit returnVisit) {
        if (returnVisit == null) {
            throw new ServiceException("回访提醒数据不能为空");
        }
        if (returnVisit.getCustomerId() == null) {
            throw new ServiceException("客户ID不能为空");
        }
        if (returnVisit.getReminderTime() == null) {
            throw new ServiceException("提醒时间不能为空");
        }
        if (returnVisit.getIsEnabled() != null && returnVisit.getIsEnabled() == 1) {
            if (returnVisit.getReminderTime().isBefore(LocalDateTime.now())) {
                throw new ServiceException("提醒时间不能早于当前时间");
            }
        }
    }
}