|
|
|
@ -26,6 +26,7 @@ import java.io.UnsupportedEncodingException; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.Date; |
|
|
|
import java.util.List; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
/** |
|
|
|
* @author Jia |
|
|
|
@ -57,108 +58,110 @@ public class InquiryApplicationServiceImpl extends ServiceImpl<InquiryApplicatio |
|
|
|
|
|
|
|
@Override |
|
|
|
public PageUtils searchInquiryApplicationInfo(InquiryApplicationData data) { |
|
|
|
// 先判断 BU 是否为空,再进行分割赋值 |
|
|
|
// 拆分 BU 信息 |
|
|
|
if (data.getBu() != null && !data.getBu().isEmpty()) { |
|
|
|
String[] buParts = data.getBu().split("_"); |
|
|
|
if (buParts.length >= 2) { |
|
|
|
data.setSite(buParts[0]); |
|
|
|
data.setBuNo(buParts[1]); |
|
|
|
String[] parts = data.getBu().split("_", 2); |
|
|
|
data.setSite(parts[0]); |
|
|
|
if (parts.length > 1) { |
|
|
|
data.setBuNo(parts[1]); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
IPage<InquiryApplicationData> page = inquiryApplicationMapper.searchInquiryApplicationInfo( |
|
|
|
new Page<>(data.getPage(), data.getLimit()), data); |
|
|
|
List<InquiryApplicationData> list = page.getRecords(); |
|
|
|
|
|
|
|
for (InquiryApplicationData inquiryApplicationData : list) { |
|
|
|
InquiryDetailData inquiryDetailData = new InquiryDetailData(); |
|
|
|
inquiryDetailData.setRfqId(inquiryApplicationData.getId()); |
|
|
|
List<InquiryDetailData> inquiryDetailDataList = inquiryDetailMapper.searchInquiryDetailInfo(inquiryDetailData); |
|
|
|
|
|
|
|
boolean foundBom = false; // 标记是否已找到 BOM 数据 |
|
|
|
|
|
|
|
if (!inquiryDetailDataList.isEmpty()) { |
|
|
|
for (InquiryDetailData detailData : inquiryDetailDataList) { |
|
|
|
int hasBom = 0; |
|
|
|
// 查询当前 detailData 对应的报价记录 |
|
|
|
List<Quote> quoteList = inquiryDetailMapper.searchQuotationRecordInfo(detailData); |
|
|
|
for (Quote quote : quoteList) { |
|
|
|
QuoteDetailBom quoteDetailBom = new QuoteDetailBom(); |
|
|
|
quoteDetailBom.setQuoteId(quote.getId()); |
|
|
|
List<QuoteDetailBom> bomList = quoteDetailBomMapper.queryQuoteDetailBom2(quoteDetailBom); |
|
|
|
if (!bomList.isEmpty()) { |
|
|
|
hasBom++; |
|
|
|
} |
|
|
|
} |
|
|
|
// 查询销售报价记录 |
|
|
|
Quote quoteData = new Quote(); |
|
|
|
quoteData.setInsideInquiryNo(inquiryApplicationData.getRfqNo()); |
|
|
|
quoteData.setCreateBy("admin"); |
|
|
|
List<Quote> salesQuotationList = quoteMapper.queryQuoteList(quoteData); |
|
|
|
|
|
|
|
// 如果当前 detailData 存在 BOM 数据 |
|
|
|
if (hasBom > 0) { |
|
|
|
foundBom = true; |
|
|
|
if ("C".equals(inquiryApplicationData.getStatus())) { |
|
|
|
inquiryApplicationData.setBomStatus("BOM制作完成"); |
|
|
|
} else { |
|
|
|
// 收集销售报价的状态 |
|
|
|
List<String> statusQuoteList = new ArrayList<>(); |
|
|
|
for (Quote quote : salesQuotationList) { |
|
|
|
statusQuoteList.add(quote.getStatus()); |
|
|
|
} |
|
|
|
if (!statusQuoteList.contains("下达")) { |
|
|
|
inquiryApplicationData.setBomStatus("TP计算中"); |
|
|
|
} else { |
|
|
|
// 判断销售报价状态是否全部为“下达” |
|
|
|
boolean allDown = true; |
|
|
|
for (String status : statusQuoteList) { |
|
|
|
if (!"下达".equals(status)) { |
|
|
|
inquiryApplicationData.setBomStatus("报价单部分审批中"); |
|
|
|
allDown = false; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
if (allDown) { |
|
|
|
inquiryApplicationData.setBomStatus("报价单审批中"); |
|
|
|
// 检查每个销售报价的审批状态 |
|
|
|
boolean allApproved = true; |
|
|
|
for (Quote quote : salesQuotationList) { |
|
|
|
InquiryDetailData inquiryDetailData1 = new InquiryDetailData(); |
|
|
|
inquiryDetailData1.setApplicationNo(quote.getQuoteVersionNo()); |
|
|
|
inquiryDetailData1.setPage(1); |
|
|
|
inquiryDetailData1.setLimit(1); |
|
|
|
List<InquiryDetailData> quoteAuthData = |
|
|
|
(List<InquiryDetailData>) inquiryDetailServiceImpl |
|
|
|
.searchAllInquiryQuoteInfo(inquiryDetailData1).getList(); |
|
|
|
if (quoteAuthData.isEmpty() || |
|
|
|
!quoteAuthData.get(0).getAllAuthFlag().equals("全部审批")) { |
|
|
|
allApproved = false; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
if (allApproved) { |
|
|
|
inquiryApplicationData.setBomStatus("报价单审批成功"); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// 一旦找到 BOM 数据,退出当前 detailData 循环 |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
// 如果遍历完所有 detailData 均未找到 BOM 数据,则状态为 “BOM制作中” |
|
|
|
if (!foundBom) { |
|
|
|
inquiryApplicationData.setBomStatus("BOM制作中"); |
|
|
|
} |
|
|
|
} else { |
|
|
|
inquiryApplicationData.setBomStatus("BOM制作中"); |
|
|
|
} |
|
|
|
// 查询分页数据 |
|
|
|
IPage<InquiryApplicationData> page = inquiryApplicationMapper |
|
|
|
.searchInquiryApplicationInfo(new Page<>(data.getPage(), data.getLimit()), data); |
|
|
|
List<InquiryApplicationData> records = page.getRecords(); |
|
|
|
|
|
|
|
// 填充 BOM 状态 |
|
|
|
for (InquiryApplicationData app : records) { |
|
|
|
populateBomStatus(app); |
|
|
|
} |
|
|
|
page.setRecords(list); |
|
|
|
page.setRecords(records); |
|
|
|
|
|
|
|
return new PageUtils(page); |
|
|
|
} |
|
|
|
|
|
|
|
private void populateBomStatus(InquiryApplicationData app) { |
|
|
|
// 查询明细 |
|
|
|
InquiryDetailData detailQuery = new InquiryDetailData(); |
|
|
|
detailQuery.setRfqId(app.getId()); |
|
|
|
List<InquiryDetailData> details = inquiryDetailMapper.searchInquiryDetailInfo(detailQuery); |
|
|
|
if (details == null || details.isEmpty()) { |
|
|
|
app.setBomStatus("BOM制作中"); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
boolean foundBom = false; |
|
|
|
for (InquiryDetailData detail : details) { |
|
|
|
if (hasBom(detail)) { |
|
|
|
foundBom = true; |
|
|
|
List<Quote> salesQuotes = getSalesQuotes(app); |
|
|
|
app.setBomStatus(determineStatus(app, salesQuotes)); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (!foundBom) { |
|
|
|
app.setBomStatus("BOM制作中"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private boolean hasBom(InquiryDetailData detail) { |
|
|
|
List<Quote> quoteList = inquiryDetailMapper.searchQuotationRecordInfo(detail); |
|
|
|
if (quoteList == null) return false; |
|
|
|
for (Quote quote : quoteList) { |
|
|
|
QuoteDetailBom qdb = new QuoteDetailBom(); |
|
|
|
qdb.setQuoteId(quote.getId()); |
|
|
|
List<QuoteDetailBom> bomList = quoteDetailBomMapper.queryQuoteDetailBom2(qdb); |
|
|
|
if (bomList != null && !bomList.isEmpty()) { |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
private List<Quote> getSalesQuotes(InquiryApplicationData app) { |
|
|
|
Quote query = new Quote(); |
|
|
|
query.setInsideInquiryNo(app.getRfqNo()); |
|
|
|
query.setCreateBy("admin"); |
|
|
|
return quoteMapper.queryQuoteList(query); |
|
|
|
} |
|
|
|
|
|
|
|
private String determineStatus(InquiryApplicationData app, List<Quote> salesQuotes) { |
|
|
|
if ("C".equals(app.getStatus())) { |
|
|
|
return "BOM制作完成"; |
|
|
|
} |
|
|
|
|
|
|
|
List<String> statuses = salesQuotes.stream() |
|
|
|
.map(Quote::getStatus) |
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
if (!statuses.contains("下达")) { |
|
|
|
return "TP计算中"; |
|
|
|
} |
|
|
|
|
|
|
|
boolean allDown = statuses.stream().allMatch("下达"::equals); |
|
|
|
if (!allDown) { |
|
|
|
return "报价单部分审批中"; |
|
|
|
} |
|
|
|
|
|
|
|
boolean allApproved = true; |
|
|
|
for (Quote quote : salesQuotes) { |
|
|
|
InquiryDetailData req = new InquiryDetailData(); |
|
|
|
req.setApplicationNo(quote.getQuoteVersionNo()); |
|
|
|
req.setPage(1); |
|
|
|
req.setLimit(1); |
|
|
|
List<?> rawList = inquiryDetailServiceImpl.searchAllInquiryQuoteInfo(req).getList(); |
|
|
|
@SuppressWarnings("unchecked") |
|
|
|
List<InquiryDetailData> authList = (List<InquiryDetailData>) rawList; |
|
|
|
if (authList.isEmpty() || !"全部审批".equals(authList.get(0).getAllAuthFlag())) { |
|
|
|
allApproved = false; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return allApproved ? "报价单审批成功" : "报价单审批中"; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
|