|
|
|
@ -12,10 +12,7 @@ import com.spring.modules.base.entity.PartSubPropertiesValueHeader; |
|
|
|
import com.spring.modules.quotation.entity.*; |
|
|
|
import com.spring.modules.quotation.mapper.QuotationHeaderMapper; |
|
|
|
import com.spring.modules.quotation.service.*; |
|
|
|
import com.spring.modules.quotation.vo.QuotationHeaderVo; |
|
|
|
import com.spring.modules.quotation.vo.QuotationInformationVo; |
|
|
|
import com.spring.modules.quotation.vo.QuoteBomDetailVo; |
|
|
|
import com.spring.modules.quotation.vo.QuoteDetailPropertiesVo; |
|
|
|
import com.spring.modules.quotation.vo.*; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
@ -231,81 +228,110 @@ public class QuotationHeaderServiceImpl extends ServiceImpl<QuotationHeaderMappe |
|
|
|
|
|
|
|
@Transactional |
|
|
|
public void batchSaveQuotationDetailAll(List<QuotationDetail> quotationDetailList,QuotationHeader quotationHeader) { |
|
|
|
if (null != quotationDetailList && !quotationDetailList.isEmpty()){ |
|
|
|
quotationDetailList.forEach(quotationDetail -> { |
|
|
|
// 查询报价明细中的信息(材料,工序,工具,成品属性) |
|
|
|
// 1、bom |
|
|
|
List<QuoteBomHeader> bomHeader = getQuoteBomHeader(quotationDetail); |
|
|
|
|
|
|
|
|
|
|
|
// 查询 属性信息 |
|
|
|
QuoteDetailPropertiesVo propertiesVo = new QuoteDetailPropertiesVo(); |
|
|
|
propertiesVo.setQuotationDetailId(quotationDetail.getQuotationDetailId().longValue()); |
|
|
|
propertiesVo.setSite(quotationDetail.getSite()); |
|
|
|
PartSubPropertiesValueHeader propertiesValueHeader = quoteDetailPropertiesService.getPartSubPropertiesValueHeader(propertiesVo); |
|
|
|
|
|
|
|
// 查询属性详细详细信息 |
|
|
|
List<PartSubPropertiesValue> list = new ArrayList<>(); |
|
|
|
if (Objects.nonNull(propertiesValueHeader)){ |
|
|
|
list = quoteDetailPropertiesService.getPartSubPropertiesValue(propertiesValueHeader); |
|
|
|
|
|
|
|
if (Objects.isNull(quotationDetailList) || quotationDetailList.isEmpty() || quotationHeader == null){ |
|
|
|
return; |
|
|
|
} |
|
|
|
for (QuotationDetail detail : quotationDetailList) { |
|
|
|
// 查询 BomHeader |
|
|
|
List<QuoteBomHeader> bomHeaderList = getQuoteBomHeader(detail); |
|
|
|
// 查询 RoutingHeader |
|
|
|
List<QuoteRoutingHeader> routingHeaderList = queryRoutingHeader(detail); |
|
|
|
// 查询工具 |
|
|
|
List<QuotationTool> toolList = quotationToolService.lambdaQuery().eq(QuotationTool::getQuotationDetailId, detail.getQuotationDetailId()).list(); |
|
|
|
// 查询 属性 |
|
|
|
QuoteDetailPropertiesVo propertiesVo = new QuoteDetailPropertiesVo(); |
|
|
|
propertiesVo.setQuotationDetailId(detail.getQuotationDetailId().longValue()); |
|
|
|
propertiesVo.setSite(detail.getSite()); |
|
|
|
PartSubPropertiesValueHeader propertiesValueHeader = quoteDetailPropertiesService.getPartSubPropertiesValueHeader(propertiesVo); |
|
|
|
// 查询属性详细详细信息 |
|
|
|
List<PartSubPropertiesValue> propertiesValueList = new ArrayList<>(); |
|
|
|
if (Objects.nonNull(propertiesValueHeader)){ |
|
|
|
propertiesValueList = quoteDetailPropertiesService.getPartSubPropertiesValue(propertiesValueHeader); |
|
|
|
} |
|
|
|
// 新增Detail |
|
|
|
detail.setQuotationHeaderId(quotationHeader.getQuotationHeaderId()); |
|
|
|
detail.setQuotationDetailStatus("草稿"); |
|
|
|
detail.setQuotationDetailId(null); |
|
|
|
quotationDetailService.save(detail); |
|
|
|
// 新增工具 |
|
|
|
for (QuotationTool quotationTool : toolList) { |
|
|
|
quotationTool.setQuotationToolId(null); |
|
|
|
quotationTool.setQuotationDetailId(detail.getQuotationDetailId()); |
|
|
|
quotationToolService.save(quotationTool); |
|
|
|
} |
|
|
|
// 新增属性 |
|
|
|
if (Objects.nonNull(propertiesValueHeader)){ |
|
|
|
propertiesValueHeader.setPartNo("BJ"+detail.getQuotationDetailId()); |
|
|
|
quoteDetailPropertiesService.savePartSubPropertiesValueHeader(propertiesValueHeader); |
|
|
|
} |
|
|
|
// 新增属性明细 |
|
|
|
if (!propertiesValueList.isEmpty()){ |
|
|
|
for (PartSubPropertiesValue value : propertiesValueList) { |
|
|
|
value.setPartNo("BJ"+detail.getQuotationDetailId()); |
|
|
|
} |
|
|
|
quoteDetailPropertiesService.savePartSubPropertiesValue(propertiesValueList); |
|
|
|
} |
|
|
|
// 新增BOM |
|
|
|
for (QuoteBomHeader bomHeader : bomHeaderList) { |
|
|
|
bomHeader.setQuoteDetailId(detail.getQuotationDetailId().longValue()); |
|
|
|
} |
|
|
|
againQuoteDetailBom(bomHeaderList,0L,0L); |
|
|
|
// 新增Routing |
|
|
|
for (QuoteRoutingHeader routingHeader : routingHeaderList) { |
|
|
|
// 查询routing明细 |
|
|
|
routingHeader.setQuoteDetailId(detail.getQuotationDetailId().longValue()); |
|
|
|
} |
|
|
|
againQuoteDetailRouting(routingHeaderList,0L,0L); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if(!bomHeader.isEmpty()){ |
|
|
|
quotationDetail.setQuotationDetailId(null); |
|
|
|
quotationDetail.setQuotationDetailStatus("草稿"); |
|
|
|
quotationDetail.setQuotationHeaderId(quotationHeader.getQuotationHeaderId()); |
|
|
|
quotationDetailService.save(quotationDetail); |
|
|
|
|
|
|
|
// 新增属性PartSubPropertiesValueHeader |
|
|
|
propertiesValueHeader.setPartNo("BJ"+quotationDetail.getQuotationDetailId()); |
|
|
|
quoteDetailPropertiesService.savePartSubPropertiesValueHeader(propertiesValueHeader); |
|
|
|
quoteDetailPropertiesService.savePartSubPropertiesValue(list.stream().map(item -> { |
|
|
|
item.setPartNo("BJ"+quotationDetail.getQuotationDetailId()); |
|
|
|
return item; |
|
|
|
}).collect(Collectors.toList())); |
|
|
|
return; |
|
|
|
private void againQuoteDetailBom(List<QuoteBomHeader> quoteBomHeaderList, Long parentId, Long newParentId){ |
|
|
|
for (QuoteBomHeader header : quoteBomHeaderList) { |
|
|
|
if (header.getParentId().equals(parentId)){ |
|
|
|
// 查询bom明细 |
|
|
|
List<QuoteBomDetail> bomDetailList = quoteBomDetailService.lambdaQuery() |
|
|
|
.eq(QuoteBomDetail::getHeaderId, header.getId()).list(); |
|
|
|
Long oldId = header.getId(); |
|
|
|
header.setParentId(newParentId); |
|
|
|
// 插入数据 |
|
|
|
quoteBomHeaderService.save(header); |
|
|
|
againQuoteDetailBom(quoteBomHeaderList,oldId,header.getId()); |
|
|
|
// 插入bom明细 |
|
|
|
for (QuoteBomDetail bomDetail : bomDetailList) { |
|
|
|
bomDetail.setId(null); |
|
|
|
bomDetail.setHeaderId(header.getId()); |
|
|
|
bomDetail.setQuoteDetailId(header.getQuoteDetailId()); |
|
|
|
quoteBomDetailService.save(bomDetail); |
|
|
|
} |
|
|
|
// 新增bom |
|
|
|
for (QuoteBomHeader header : bomHeader) { |
|
|
|
header.setQuoteDetailId(quotationDetail.getQuotationDetailId().longValue()); |
|
|
|
List<QuoteBomDetailVo> bomDetailVoList = quoteBomDetailService.searchQuoteBomDetailList(header); |
|
|
|
quoteBomHeaderService.save(header); |
|
|
|
// 将报价明细中的(材料,工序,工具,成品属性)新增到报价单明细中 |
|
|
|
if (!bomDetailVoList.isEmpty()){ |
|
|
|
List<QuoteBomDetail> quoteBomDetailList = getQuoteBomDetailList(quotationDetail,bomDetailVoList); |
|
|
|
quoteBomDetailService.saveBatchQuoteDetailBom(quoteBomDetailList); |
|
|
|
} |
|
|
|
} |
|
|
|
// 2、工具 |
|
|
|
List<QuotationTool> toolList = quotationToolService.lambdaQuery().eq(QuotationTool::getQuotationDetailId, quotationDetail.getQuotationDetailId()).list(); |
|
|
|
// 循环新增报价单明细 |
|
|
|
quotationDetail.setQuotationDetailId(null); |
|
|
|
quotationDetail.setQuotationHeaderId(quotationHeader.getQuotationHeaderId()); |
|
|
|
quotationDetailService.save(quotationDetail); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 新增工具 |
|
|
|
if (!toolList.isEmpty()){ |
|
|
|
toolList = getQuotationTool(quotationDetail,toolList); |
|
|
|
quotationToolService.batchInsertQuotationTool(toolList,quotationDetail.getQuotationDetailId()); |
|
|
|
private void againQuoteDetailRouting(List<QuoteRoutingHeader> quoteRoutingHeaderList, Long parentId,Long newParentId){ |
|
|
|
for (QuoteRoutingHeader header : quoteRoutingHeaderList) { |
|
|
|
if (header.getParentId().equals(parentId)){ |
|
|
|
// 查询bom明细 |
|
|
|
List<QuoteRoutingDetail> routingDetailList = quoteRoutingDetailService.lambdaQuery() |
|
|
|
.eq(QuoteRoutingDetail::getHeaderId, header.getId()).list(); |
|
|
|
// 插入数据 |
|
|
|
Long oldId = header.getId(); |
|
|
|
header.setParentId(newParentId); |
|
|
|
quoteRoutingHeaderService.save(header); |
|
|
|
againQuoteDetailRouting(quoteRoutingHeaderList,oldId,header.getId()); |
|
|
|
// 插入bom明细 |
|
|
|
for (QuoteRoutingDetail routingDetail : routingDetailList) { |
|
|
|
routingDetail.setId(null); |
|
|
|
routingDetail.setHeaderId(header.getId()); |
|
|
|
routingDetail.setQuoteDetailId(header.getQuoteDetailId()); |
|
|
|
quoteRoutingDetailService.save(routingDetail); |
|
|
|
} |
|
|
|
|
|
|
|
// 3、复制属性 |
|
|
|
|
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
public List<QuotationTool> getQuotationTool(QuotationDetail quotationDetail,List<QuotationTool> toolList){ |
|
|
|
return toolList.stream().peek(quotationTool -> { |
|
|
|
quotationTool.setQuotationToolId(null); |
|
|
|
quotationTool.setQuotationDetailId(quotationDetail.getQuotationDetailId()); |
|
|
|
}).collect(Collectors.toList()); |
|
|
|
} |
|
|
|
public List<QuoteBomDetail> getQuoteBomDetailList(QuotationDetail quotationDetail,List<QuoteBomDetailVo> bomDetailVoList){ |
|
|
|
return bomDetailVoList.stream().map(quoteBomDetailVo -> { |
|
|
|
quoteBomDetailVo.setQuoteDetailId(quotationDetail.getQuotationDetailId().longValue()); |
|
|
|
return (QuoteBomDetail) quoteBomDetailVo; |
|
|
|
}).collect(Collectors.toList()); |
|
|
|
public List<QuoteRoutingHeader> queryRoutingHeader(QuotationDetail quotationDetail){ |
|
|
|
return quoteRoutingHeaderService.lambdaQuery() |
|
|
|
.eq(QuoteRoutingHeader::getQuoteDetailId, quotationDetail.getQuotationDetailId()) |
|
|
|
.eq(QuoteRoutingHeader::getSite, quotationDetail.getSite()).list(); |
|
|
|
} |
|
|
|
public List<QuoteBomHeader> getQuoteBomHeader(QuotationDetail quotationDetail){ |
|
|
|
return quoteBomHeaderService.lambdaQuery() |
|
|
|
|