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("提醒时间不能早于当前时间");
|
}
|
}
|
}
|
}
|