Browse Source

2025.04.18 询价申请 审批信息查询方法优化

java8
jiayang yue 1 year ago
parent
commit
90edbd3de8
  1. 191
      src/main/java/com/xujie/sys/modules/inquiry/service/impl/InquiryApplicationServiceImpl.java
  2. 76
      src/main/java/com/xujie/sys/modules/inquiry/service/impl/InquiryDetailServiceImpl.java

191
src/main/java/com/xujie/sys/modules/inquiry/service/impl/InquiryApplicationServiceImpl.java

@ -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

76
src/main/java/com/xujie/sys/modules/inquiry/service/impl/InquiryDetailServiceImpl.java

@ -23,6 +23,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Jia
@ -131,43 +132,48 @@ public class InquiryDetailServiceImpl extends ServiceImpl<InquiryDetailMapper, I
@Override
public PageUtils searchAllInquiryQuoteInfo(InquiryDetailData data) {
IPage<InquiryDetailData> page = inquiryDetailMapper.searchAllInquiryQuoteInfo(new Page<>(data.getPage(), data.getLimit()), data);
// 获取所有询价单下的所有审批状态
AuthHistData authHistData = new AuthHistData();
for (InquiryDetailData record : page.getRecords()) {
authHistData.setOrderRef1(record.getApplicationNo());
authHistData.setSite(record.getSite());
authHistData.setOrderRef2(record.getBuNo());
List<AuthHistData> list = authHistMapper.searchAuthInfo(authHistData);
List<String> approveResults = new ArrayList<>();
List<String> histDataFlags = new ArrayList<>();
for (AuthHistData histData : list) {
approveResults.add(histData.getApproveResult());
histDataFlags.add(histData.getAuthFlag());
}
if (record.getIsSimultaneous()){
if (approveResults.contains("未通过")){
record.setAllAuthFlag("审批未通过");
continue;
}
}
if (histDataFlags.contains("Y")) {
// 如果包含已审批则判断是否包含未审批
if(histDataFlags.contains("N")) {
// 如果包含未审批则为部分审批
record.setAllAuthFlag("部分审批");
} else {
// 如果不包含未审批则为全部审批
record.setAllAuthFlag("全部审批");
}
} else {
// 如果不包含已审批则为未审批
record.setAllAuthFlag("未审批");
}
}
// 分页查询所有报价审批明细
IPage<InquiryDetailData> page = inquiryDetailMapper.searchAllInquiryQuoteInfo(
new Page<>(data.getPage(), data.getLimit()), data);
List<InquiryDetailData> records = page.getRecords();
// 填充审批状态标识
records.forEach(this::populateAuthFlag);
page.setRecords(records);
return new PageUtils(page);
}
private void populateAuthFlag(InquiryDetailData record) {
// 构建查询
AuthHistData query = new AuthHistData();
query.setOrderRef1(record.getApplicationNo());
query.setSite(record.getSite());
query.setOrderRef2(record.getBuNo());
List<AuthHistData> histList = authHistMapper.searchAuthInfo(query);
// 收集审批结果和标识
List<String> results = histList.stream()
.map(AuthHistData::getApproveResult)
.collect(Collectors.toList());
List<String> flags = histList.stream()
.map(AuthHistData::getAuthFlag)
.collect(Collectors.toList());
// 并行审批失败优先
if (record.getIsSimultaneous() && results.contains("未通过")) {
record.setAllAuthFlag("审批未通过");
return;
}
// 已审批标识处理
if (flags.contains("Y")) {
record.setAllAuthFlag(
flags.contains("N") ? "部分审批" : "全部审批"
);
} else {
record.setAllAuthFlag("未审批");
}
}
}

Loading…
Cancel
Save