chenhj
2026-04-22 6518050093fe8f36b603a7fef9d4683813a91645
修复循环依赖
已修改8个文件
93 ■■■■ 文件已修改
src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/basic/service/impl/CustomerFollowUpFileServiceImpl.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/basic/service/impl/CustomerPrivateServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/basic/service/impl/ReturnVisitReminderService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/project/common/CaptchaController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/projectManagement/service/impl/PlanServiceImpl.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/projectManagement/service/impl/handle/InfoStageHandleService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
@@ -23,7 +23,14 @@
import com.ruoyi.project.system.service.ISysNoticeService;
import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
import com.ruoyi.purchase.pojo.PurchaseLedger;
import com.ruoyi.purchase.service.impl.PurchaseLedgerServiceImpl;
import com.ruoyi.quality.mapper.QualityInspectMapper;
import com.ruoyi.quality.mapper.QualityInspectParamMapper;
import com.ruoyi.quality.mapper.QualityTestStandardMapper;
import com.ruoyi.quality.mapper.QualityTestStandardParamMapper;
import com.ruoyi.quality.pojo.QualityInspect;
import com.ruoyi.quality.pojo.QualityInspectParam;
import com.ruoyi.quality.pojo.QualityTestStandard;
import com.ruoyi.quality.pojo.QualityTestStandardParam;
import com.ruoyi.sales.mapper.CommonFileMapper;
import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
import com.ruoyi.sales.mapper.SalesQuotationMapper;
@@ -61,7 +68,10 @@
    private final CommonFileServiceImpl commonFileService;
    private final StockUtils stockUtils;
    private final SalesLedgerProductMapper salesLedgerProductMapper;
    private final PurchaseLedgerServiceImpl purchaseLedgerServiceImpl;
    private final QualityInspectMapper qualityInspectMapper;
    private final QualityTestStandardMapper qualityTestStandardMapper;
    private final QualityTestStandardParamMapper qualityTestStandardParamMapper;
    private final QualityInspectParamMapper qualityInspectParamMapper;
    public ApproveProcess getApproveById(String id) {
@@ -182,7 +192,7 @@
                    for (SalesLedgerProduct salesLedgerProduct : salesLedgerProducts) {
                        // 质检
                        if (salesLedgerProduct.getIsChecked()) {
                            purchaseLedgerServiceImpl.addQualityInspect(purchaseLedger, salesLedgerProduct);
                            addQualityInspect(purchaseLedger, salesLedgerProduct);
                        } else {
                            //直接入库
                            stockUtils.addStock(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockInQualifiedRecordTypeEnum.PURCHASE_STOCK_IN.getCode(), purchaseLedger.getId());
@@ -310,4 +320,32 @@
        return null;
    }
    private void addQualityInspect(PurchaseLedger purchaseLedger, SalesLedgerProduct saleProduct) {
        QualityInspect qualityInspect = new QualityInspect();
        qualityInspect.setInspectType(0);
        qualityInspect.setSupplier(purchaseLedger.getSupplierName());
        qualityInspect.setPurchaseLedgerId(purchaseLedger.getId());
        qualityInspect.setProductId(saleProduct.getProductId());
        qualityInspect.setProductName(saleProduct.getProductCategory());
        qualityInspect.setModel(saleProduct.getSpecificationModel());
        qualityInspect.setProductModelId(saleProduct.getProductModelId());
        qualityInspect.setUnit(saleProduct.getUnit());
        qualityInspect.setQuantity(saleProduct.getQuantity());
        qualityInspectMapper.insert(qualityInspect);
        List<QualityTestStandard> qualityTestStandard = qualityTestStandardMapper.getQualityTestStandardByProductId(saleProduct.getProductId(), 0,null);
        if (qualityTestStandard.size()>0){
            qualityInspect.setTestStandardId(qualityTestStandard.get(0).getId());
            qualityInspectMapper.updateById(qualityInspect);
            qualityTestStandardParamMapper.selectList(Wrappers.<QualityTestStandardParam>lambdaQuery()
                            .eq(QualityTestStandardParam::getTestStandardId,qualityTestStandard.get(0).getId()))
                    .forEach(qualityTestStandardParam -> {
                        QualityInspectParam param = new QualityInspectParam();
                        com.ruoyi.common.utils.bean.BeanUtils.copyProperties(qualityTestStandardParam, param);
                        param.setId(null);
                        param.setInspectId(qualityInspect.getId());
                        qualityInspectParamMapper.insert(param);
                    });
        }
    }
}
src/main/java/com/ruoyi/basic/service/impl/CustomerFollowUpFileServiceImpl.java
@@ -2,15 +2,14 @@
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists;
import com.ruoyi.basic.mapper.CustomerFollowUpFileMapper;
import com.ruoyi.basic.pojo.CustomerFollowUpFile;
import com.ruoyi.basic.service.CustomerFollowUpFileService;
import com.ruoyi.basic.service.CustomerFollowUpService;
import com.ruoyi.common.vo.SimpleFileVo;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import java.util.*;
@@ -31,9 +30,7 @@
@RequiredArgsConstructor
public class CustomerFollowUpFileServiceImpl extends ServiceImpl<CustomerFollowUpFileMapper, CustomerFollowUpFile> implements CustomerFollowUpFileService {
    @Lazy
    private final CustomerFollowUpService customerFollowUpService;
    private final CustomerFollowUpFileMapper customerFollowUpFileMapper;
    @Override
    public <T> void fillAttachment(List<T> list, Function<T, String> getAttachmentIds, BiConsumer<T, List<SimpleFileVo>> setAttachmentList) {
@@ -50,7 +47,7 @@
        List<CustomerFollowUpFile> followUpFilesByIds = new ArrayList<>();
        Lists.partition(Lists.newArrayList(ids), 999).forEach(it -> {
            followUpFilesByIds.addAll(
                    customerFollowUpService.getFollowUpFilesByIds(it)
                    getFollowUpFilesByIds(it)
            );
        });
        if (CollUtil.isEmpty(followUpFilesByIds)) {
@@ -72,4 +69,15 @@
            }
        });
    }
    private List<CustomerFollowUpFile> getFollowUpFilesByIds(Collection<Long> fileIds) {
        if (fileIds == null || fileIds.isEmpty()) {
            return new ArrayList<>(0);
        }
        LambdaQueryWrapper<CustomerFollowUpFile> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.in(CustomerFollowUpFile::getId, fileIds)
                .select(CustomerFollowUpFile::getId, CustomerFollowUpFile::getFileUrl, CustomerFollowUpFile::getFileName);
        return customerFollowUpFileMapper.selectList(queryWrapper);
    }
}
src/main/java/com/ruoyi/basic/service/impl/CustomerPrivateServiceImpl.java
@@ -49,7 +49,6 @@
    private final SalesLedgerMapper salesLedgerMapper;
    private final CustomerPrivateMapper customerPrivateMapper;
    private final CustomerPrivateService customerPrivateService;
    @Override
@@ -89,7 +88,7 @@
    @Override
    public R importData(MultipartFile file) {
        try {
            List<CustomerPrivate> existingList = customerPrivateService.list();
            List<CustomerPrivate> existingList = customerPrivateMapper.selectList(null);
            java.util.Set<String> existingCustomerNames = existingList.stream()
                    .map(CustomerPrivate::getCustomerName)
                    .collect(Collectors.toSet());
src/main/java/com/ruoyi/basic/service/impl/ReturnVisitReminderService.java
@@ -1,7 +1,7 @@
package com.ruoyi.basic.service.impl;
import com.ruoyi.basic.mapper.CustomerReturnVisitMapper;
import com.ruoyi.basic.pojo.CustomerReturnVisit;
import com.ruoyi.basic.service.CustomerReturnVisitService;
import com.ruoyi.framework.redis.RedisCache;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -27,11 +27,11 @@
    private final RedisCache redisCache;
    private final CustomerReturnVisitService customerReturnVisitService;
    private final CustomerReturnVisitMapper customerReturnVisitMapper;
    @SuppressWarnings("unchecked")
    public void scheduleReminder(Long returnVisitId) {
        CustomerReturnVisit returnVisit = customerReturnVisitService.getById(returnVisitId);
        CustomerReturnVisit returnVisit = customerReturnVisitMapper.selectById(returnVisitId);
        if (returnVisit == null || returnVisit.getIsEnabled() == 0) {
            return;
        }
src/main/java/com/ruoyi/project/common/CaptchaController.java
@@ -10,7 +10,7 @@
import com.ruoyi.project.system.service.ISysConfigService;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.FastByteArrayOutputStream;
import org.springframework.web.bind.annotation.GetMapping;
@@ -27,7 +27,7 @@
 * @author ruoyi
 */
@RestController
@AllArgsConstructor
@RequiredArgsConstructor
public class CaptchaController
{
    @Resource(name = "captchaProducer")
@@ -36,13 +36,13 @@
    @Resource(name = "captchaProducerMath")
    private Producer captchaProducerMath;
    private RedisCache redisCache;
    private final RedisCache redisCache;
    
    // 验证码类型
    @Value("${ruoyi.captchaType}")
    private String captchaType;
    
    private ISysConfigService configService;
    private final ISysConfigService configService;
    /**
     * 生成验证码
src/main/java/com/ruoyi/projectManagement/service/impl/PlanServiceImpl.java
@@ -16,6 +16,7 @@
import com.ruoyi.projectManagement.vo.*;
import lombok.RequiredArgsConstructor;
import org.jetbrains.annotations.Nullable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -41,7 +42,8 @@
    private final PlanNodeMapper planNodeMapper;
    @Lazy
    private final PlanService planService;
    @Autowired
    private PlanService planService;
    @Override
    @Transactional(rollbackFor = Exception.class)
src/main/java/com/ruoyi/projectManagement/service/impl/handle/InfoStageHandleService.java
@@ -17,6 +17,7 @@
import com.ruoyi.projectManagement.vo.SaveInfoStageVo;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@@ -37,7 +38,8 @@
    private final InfoHandleService infoHandleService;
    private final CustomerFollowUpFileService customerFollowUpFileService;
    @Lazy
    private final InfoStageHandleService infoStageHandleService;
    @Autowired
    private InfoStageHandleService infoStageHandleService;
    @Transactional
    public void save(@NotNull SaveInfoStageVo saveInfoStageVo) {
src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java
@@ -7,9 +7,9 @@
import com.ruoyi.purchase.dto.PurchaseLedgerDto;
import com.ruoyi.purchase.pojo.PurchaseLedger;
import com.ruoyi.sales.pojo.InvoiceRegistrationProduct;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List;
/**
@@ -24,6 +24,8 @@
    int addOrEditPurchase(PurchaseLedgerDto purchaseLedgerDto) throws Exception;
    void addQualityInspect(PurchaseLedger purchaseLedger, SalesLedgerProduct saleProduct);
    int deletePurchaseLedgerByIds(Long[] ids);
    PurchaseLedgerDto getPurchaseById(PurchaseLedgerDto purchaseLedgerDto);