zhangback
2025-11-27 3849263b31a16a91ff08acaa42786ecfde76f33c
tms/src/main/java/com/ruoyi/tms/service/impl/TmsQuoteDetailServiceImpl.java
@@ -2,8 +2,18 @@
import java.util.List;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.enums.SystemDataNoEnum;
import com.ruoyi.common.utils.DateUtils;
import javax.annotation.Resource;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.service.ISystemDataNoService;
import com.ruoyi.tms.domain.TmsQuotePlan;
import com.ruoyi.tms.domain.vo.QuoteDetailItem;
import com.ruoyi.tms.mapper.TmsQuotePlanMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.stereotype.Service;
import org.springframework.scheduling.annotation.Async;
@@ -34,7 +44,10 @@
    @Resource
    private TmsQuoteDetailMapper tmsQuoteDetailMapper;
    @Resource
    private TmsQuotePlanMapper tmsQuotePlanMapper;
    @Autowired
    ISystemDataNoService systemDataNoService;
    /**
     * 查询报价明细
     *
@@ -100,11 +113,84 @@
     * @return 结果
     */
    @Override
    public int insertTmsQuoteDetail(TmsQuoteDetail tmsQuoteDetail)
    {
        tmsQuoteDetail.setCreateTime(DateUtils.getNowDate());
        return tmsQuoteDetailMapper.insertTmsQuoteDetail(tmsQuoteDetail);
    public int insertTmsQuoteDetail(TmsQuoteDetail tmsQuoteDetail) {
        Integer quotePlanId = tmsQuoteDetail.getQuotePlanId();
        if (quotePlanId == null) {
            throw new RuntimeException("请先选择报价方案不能为空");
        }
        TmsQuotePlan tmsQuotePlan = tmsQuotePlanMapper.selectTmsQuotePlanById(quotePlanId);
        if (tmsQuotePlan == null) {
            throw new RuntimeException("报价方案不存在");
        }
        // 车型报价类型
        if (tmsQuotePlan.getPlanType() == 0) {
            List<QuoteDetailItem> quoteItems = tmsQuoteDetail.getQuoteItems();
            if (quoteItems == null || quoteItems.isEmpty()) {
                throw new RuntimeException("请填写车型报价");
            }
            int count = 0;
            for (QuoteDetailItem item : quoteItems) {
                // 拷贝主对象固定属性
                TmsQuoteDetail newDetail = BeanUtil.copyProperties(tmsQuoteDetail, TmsQuoteDetail.class);
                // 拷贝 item 属性
                BeanUtil.copyProperties(item ,newDetail);
                // 插入
                addDetail(quotePlanId, tmsQuotePlan, newDetail);
                count++;
            }
            return count;
        }
        // 普通类型
        return addDetail(quotePlanId, tmsQuotePlan, tmsQuoteDetail);
    }
    public int addDetail(Integer quotePlanId, TmsQuotePlan tmsQuotePlan, TmsQuoteDetail tmsQuoteDetail){
        // 1、同一报价清单,不能添加相同【路线-车型】数据
        Long l = tmsQuoteDetailMapper.selectCount(new LambdaQueryWrapper<TmsQuoteDetail>()
                .eq(TmsQuoteDetail::getQuotePlanId, quotePlanId)
                .eq(TmsQuoteDetail::getVehicleType, tmsQuoteDetail.getVehicleType())
                .eq(TmsQuoteDetail::getTransportRoute, tmsQuoteDetail.getTransportRoute())
                .eq(TmsQuoteDetail::getPlanType, tmsQuotePlan.getPlanType())
        );
        if (l > 0){
            throw new RuntimeException("同一报价清单,不能添加相同【路线-车型】数据");
        }
        // 2、不同报价方案,不能添加相同【客户-路线-车型】数据
        Long l1 = tmsQuoteDetailMapper.selectCount(new LambdaQueryWrapper<TmsQuoteDetail>()
                .ne(TmsQuoteDetail::getQuotePlanId, quotePlanId)
                .eq(TmsQuoteDetail::getCustomerId, tmsQuotePlan.getCustomerId())
                .eq(TmsQuoteDetail::getTransportRoute, tmsQuoteDetail.getTransportRoute())
                .eq(TmsQuoteDetail::getPlanType, tmsQuotePlan.getPlanType())
                .eq(TmsQuoteDetail::getVehicleType, tmsQuoteDetail.getVehicleType())
        );
        if (l1 > 0){
            throw new RuntimeException("不同报价方案,不能添加相同【客户-路线-车型】数据");
        }
        tmsQuoteDetail.setQuotePlanCode(tmsQuotePlan.getSystemCode());
        tmsQuoteDetail.setCustomerId(tmsQuotePlan.getCustomerId());
        SystemDataNoEnum systemDataNoEnum = tmsQuotePlan.getPlanType() == 1 ? SystemDataNoEnum.YF : SystemDataNoEnum.YS;
        String noByKey = systemDataNoService.getNoByKey(systemDataNoEnum);
        tmsQuoteDetail.setSystemCode(noByKey);
        tmsQuoteDetail.setCreateBy(SecurityUtils.getUsername());
        tmsQuoteDetail.setCreateTime(DateUtils.getNowDate());
        tmsQuoteDetail.setPlanType(tmsQuotePlan.getPlanType());
        tmsQuoteDetail.setCustomerId(tmsQuotePlan.getCustomerId());
        return tmsQuoteDetailMapper.insertTmsQuoteDetail(tmsQuoteDetail);
    }
    /**
     * 新增报价明细[批量]
@@ -119,6 +205,7 @@
        return rows;
    }
    /**
     * 修改报价明细
     *
@@ -128,6 +215,38 @@
    @Override
    public int updateTmsQuoteDetail(TmsQuoteDetail tmsQuoteDetail)
    {
        Integer quotePlanId = tmsQuoteDetail.getQuotePlanId();
        if (quotePlanId == null){
            throw new RuntimeException("请先选择报价方案不能为空");
        }
        TmsQuotePlan tmsQuotePlan = tmsQuotePlanMapper.selectTmsQuotePlanById(quotePlanId);
        if (tmsQuotePlan == null){
            throw new RuntimeException("报价方案不存在");
        }
        // 1、同一报价清单,不能添加相同【路线-车型】数据
        Long l = tmsQuoteDetailMapper.selectCount(new LambdaQueryWrapper<TmsQuoteDetail>()
                .eq(TmsQuoteDetail::getQuotePlanId, quotePlanId)
                .eq(TmsQuoteDetail::getVehicleType, tmsQuoteDetail.getVehicleType())
                .eq(TmsQuoteDetail::getTransportRoute, tmsQuoteDetail.getTransportRoute())
                .ne(TmsQuoteDetail::getId, tmsQuoteDetail.getId())
        );
        if (l > 0){
            throw new RuntimeException("同一报价清单,不能添加相同【路线-车型】数据");
        }
        // 2、不同报价方案,不能添加相同【客户-路线-车型】数据
        Long l1 = tmsQuoteDetailMapper.selectCount(new LambdaQueryWrapper<TmsQuoteDetail>()
                .ne(TmsQuoteDetail::getQuotePlanId, quotePlanId)
                .ne(TmsQuoteDetail::getId, tmsQuoteDetail.getId())
                .eq(TmsQuoteDetail::getCustomerId, tmsQuotePlan.getCustomerId())
                .eq(TmsQuoteDetail::getTransportRoute, tmsQuoteDetail.getTransportRoute())
                .eq(TmsQuoteDetail::getPlanType, tmsQuotePlan.getPlanType())
                .eq(TmsQuoteDetail::getVehicleType, tmsQuoteDetail.getVehicleType())
        );
        if (l1 > 0){
            throw new RuntimeException("不同报价方案,不能添加相同【客户-路线-车型】数据");
        }
        tmsQuoteDetail.setUpdateBy(SecurityUtils.getUsername());
        tmsQuoteDetail.setUpdateTime(DateUtils.getNowDate());
        return tmsQuoteDetailMapper.updateTmsQuoteDetail(tmsQuoteDetail);
    }