From e099d0cd93c26b44bc1c10e51944edfad0465b0c Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期四, 05 三月 2026 17:44:44 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_New' into dev_New

---
 src/main/java/com/ruoyi/basic/service/impl/CustomerReturnVisitServiceImpl.java |  139 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 139 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ruoyi/basic/service/impl/CustomerReturnVisitServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/CustomerReturnVisitServiceImpl.java
new file mode 100644
index 0000000..0186349
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/service/impl/CustomerReturnVisitServiceImpl.java
@@ -0,0 +1,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("鎻愰啋鏃堕棿涓嶈兘鏃╀簬褰撳墠鏃堕棿");
+            }
+        }
+    }
+}

--
Gitblit v1.9.3