Browse Source

2024-10-08

master
qiezi 1 year ago
parent
commit
9d9a7819fe
  1. 170
      src/main/java/com/spring/modules/quotation/service/impl/QuotationHeaderServiceImpl.java
  2. 8
      src/main/resources/mapper/quotation/QuotationDetailMapper.xml
  3. 2
      src/main/resources/mapper/quotation/QuoteDetailPropertiesMapper.xml

170
src/main/java/com/spring/modules/quotation/service/impl/QuotationHeaderServiceImpl.java

@ -12,10 +12,7 @@ import com.spring.modules.base.entity.PartSubPropertiesValueHeader;
import com.spring.modules.quotation.entity.*; import com.spring.modules.quotation.entity.*;
import com.spring.modules.quotation.mapper.QuotationHeaderMapper; import com.spring.modules.quotation.mapper.QuotationHeaderMapper;
import com.spring.modules.quotation.service.*; 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 lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -231,81 +228,110 @@ public class QuotationHeaderServiceImpl extends ServiceImpl<QuotationHeaderMappe
@Transactional @Transactional
public void batchSaveQuotationDetailAll(List<QuotationDetail> quotationDetailList,QuotationHeader quotationHeader) { public void batchSaveQuotationDetailAll(List<QuotationDetail> quotationDetailList,QuotationHeader quotationHeader) {
if (null != quotationDetailList && !quotationDetailList.isEmpty()){
quotationDetailList.forEach(quotationDetail -> {
// 查询报价明细中的信息(材料工序工具成品属性)
// 1bom
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){ public List<QuoteBomHeader> getQuoteBomHeader(QuotationDetail quotationDetail){
return quoteBomHeaderService.lambdaQuery() return quoteBomHeaderService.lambdaQuery()

8
src/main/resources/mapper/quotation/QuotationDetailMapper.xml

@ -250,8 +250,8 @@
code_desc, code_desc,
function_type function_type
FROM plm_properties_model_header FROM plm_properties_model_header
WHERE function_type = 'BJ'
AND code_no = 'BJ001'
WHERE function_type = 'IP'
AND code_no = 'I002'
AND site = #{site} AND site = #{site}
</insert> </insert>
@ -261,8 +261,8 @@
select concat('BJ',#{quotationDetailId}),ppmd.site,ppmd.code_no,1,ppmh.code_desc,seq_no,properties_item_no,'','',ppmd.function_type select concat('BJ',#{quotationDetailId}),ppmd.site,ppmd.code_no,1,ppmh.code_desc,seq_no,properties_item_no,'','',ppmd.function_type
from plm_properties_model_detail ppmd from plm_properties_model_detail ppmd
left join plm_properties_model_header ppmh on ppmh.function_type = ppmd.function_type and ppmh.code_no = ppmd.code_no and ppmh.site = ppmd.site left join plm_properties_model_header ppmh on ppmh.function_type = ppmd.function_type and ppmh.code_no = ppmd.code_no and ppmh.site = ppmd.site
WHERE ppmd.function_type = 'BJ'
AND ppmd.code_no = 'BJ001'
WHERE ppmd.function_type = 'IP'
AND ppmd.code_no = 'I002'
AND ppmd.site = #{site} AND ppmd.site = #{site}
</insert> </insert>

2
src/main/resources/mapper/quotation/QuoteDetailPropertiesMapper.xml

@ -168,7 +168,7 @@
resultType="com.spring.modules.base.entity.PartSubPropertiesValueHeader"> resultType="com.spring.modules.base.entity.PartSubPropertiesValueHeader">
select top 1 PartNo, Site, CodeNo, SubCodeSeqNo, SubCodeDesc, RecordType select top 1 PartNo, Site, CodeNo, SubCodeSeqNo, SubCodeDesc, RecordType
from PartSubPropertiesValueHeader from PartSubPropertiesValueHeader
where CodeNo = 'I001'
where CodeNo = 'I002'
and SubCodeSeqNo = 1 and SubCodeSeqNo = 1
and RecordType = 'IP' and RecordType = 'IP'
and PartNo = concat('BJ', #{quotationDetailId}) and PartNo = concat('BJ', #{quotationDetailId})

Loading…
Cancel
Save