package com.ruoyi.sales.service.impl; 
 | 
  
 | 
  
 | 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 
 | 
import com.baomidou.mybatisplus.core.metadata.IPage; 
 | 
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; 
 | 
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 
 | 
  
 | 
import com.ruoyi.common.utils.bean.BeanUtils; 
 | 
import com.ruoyi.sales.dto.SalesQuotationDto; 
 | 
import com.ruoyi.sales.mapper.SalesQuotationMapper; 
 | 
import com.ruoyi.sales.mapper.SalesQuotationProductMapper; 
 | 
import com.ruoyi.sales.pojo.SalesQuotation; 
 | 
import com.ruoyi.sales.pojo.SalesQuotationProduct; 
 | 
import com.ruoyi.sales.service.SalesQuotationProductService; 
 | 
import com.ruoyi.sales.service.SalesQuotationService; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 
 | 
import org.springframework.stereotype.Service; 
 | 
import org.springframework.transaction.annotation.Transactional; 
 | 
  
 | 
import java.util.List; 
 | 
import java.util.stream.Collectors; 
 | 
  
 | 
@Service 
 | 
@Transactional(rollbackFor = Exception.class) 
 | 
public class SalesQuotationServiceImpl extends ServiceImpl<SalesQuotationMapper, SalesQuotation> implements SalesQuotationService { 
 | 
    @Autowired 
 | 
    private SalesQuotationMapper salesQuotationMapper; 
 | 
    @Autowired 
 | 
    private SalesQuotationProductMapper salesQuotationProductMapper; 
 | 
    @Autowired 
 | 
    private SalesQuotationProductService salesQuotationProductService; 
 | 
    @Override 
 | 
    public IPage<SalesQuotationDto> listPage(Page page, SalesQuotationDto salesQuotationDto) { 
 | 
        IPage<SalesQuotationDto> salesQuotationDtoIPage = salesQuotationMapper.listPage(page, salesQuotationDto); 
 | 
        if(CollectionUtils.isEmpty(salesQuotationDtoIPage.getRecords())){ 
 | 
            return salesQuotationDtoIPage; 
 | 
        } 
 | 
        salesQuotationDtoIPage.getRecords().forEach(record -> { 
 | 
            List<SalesQuotationProduct> products = salesQuotationProductMapper.selectBySalesQuotationId(record.getId()); 
 | 
            record.setProducts(products); 
 | 
        }); 
 | 
        return salesQuotationDtoIPage; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public boolean add(SalesQuotationDto salesQuotationDto) { 
 | 
        SalesQuotation salesQuotation = new SalesQuotation(); 
 | 
        BeanUtils.copyProperties(salesQuotationDto, salesQuotation); 
 | 
        String quotationNo = salesQuotation.getQuotationNo(); 
 | 
        salesQuotationMapper.insert(salesQuotation); 
 | 
//        if(salesQuotationMapper.insert(salesQuotation)!=1){ 
 | 
//            return false; 
 | 
//        } 
 | 
        if(CollectionUtils.isEmpty(salesQuotationDto.getProducts())){ 
 | 
            return true; 
 | 
        } 
 | 
        List<SalesQuotationProduct> products = salesQuotationDto.getProducts().stream().map(product -> { 
 | 
            SalesQuotationProduct salesQuotationProduct = new SalesQuotationProduct(); 
 | 
            BeanUtils.copyProperties(product, salesQuotationProduct); 
 | 
            salesQuotationProduct.setSalesQuotationId(salesQuotationMapper.selectOne(new LambdaQueryWrapper<SalesQuotation>().eq(SalesQuotation::getQuotationNo, quotationNo)).getId()); 
 | 
            return salesQuotationProduct; 
 | 
        }).collect(Collectors.toList()); 
 | 
        salesQuotationProductService.saveBatch(products); 
 | 
        return true; 
 | 
    } 
 | 
    @Override 
 | 
    public boolean edit(SalesQuotationDto salesQuotationDto) { 
 | 
        SalesQuotation salesQuotation = new SalesQuotation(); 
 | 
        BeanUtils.copyProperties(salesQuotationDto, salesQuotation); 
 | 
        if(salesQuotationMapper.updateById(salesQuotation)!=1){ 
 | 
            return false; 
 | 
        } 
 | 
        salesQuotationProductMapper.delete(new LambdaQueryWrapper<SalesQuotationProduct>().eq(SalesQuotationProduct::getSalesQuotationId, salesQuotationDto.getId())); 
 | 
        if(CollectionUtils.isEmpty(salesQuotationDto.getProducts())){ 
 | 
            return true; 
 | 
        } 
 | 
        List<SalesQuotationProduct> products = salesQuotationDto.getProducts().stream().map(product -> { 
 | 
            SalesQuotationProduct salesQuotationProduct = new SalesQuotationProduct(); 
 | 
            BeanUtils.copyProperties(product, salesQuotationProduct); 
 | 
            salesQuotationProduct.setSalesQuotationId(salesQuotation.getId()); 
 | 
            return salesQuotationProduct; 
 | 
        }).collect(Collectors.toList()); 
 | 
        salesQuotationProductService.saveBatch(products); 
 | 
        return true; 
 | 
    } 
 | 
    @Override 
 | 
    public boolean delete(Long id) { 
 | 
        salesQuotationMapper.deleteById(id); 
 | 
        salesQuotationProductMapper.delete(new LambdaQueryWrapper<SalesQuotationProduct>().eq(SalesQuotationProduct::getSalesQuotationId, id)); 
 | 
        return true; 
 | 
    } 
 | 
  
 | 
  
 | 
} 
 |