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; /** *
* 客户回访提醒接口实现类 *
* * @author deslrey * @version 1.0 * @since 2026/03/04 17:58 */ @Service public class CustomerReturnVisitServiceImpl extends ServiceImpl 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 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 queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(CustomerReturnVisit::getCustomerId, customerId); List 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("提醒时间不能早于当前时间"); } } } }