diff --git a/src/main/java/com/spring/modules/quote/service/impl/QuoteServiceImpl.java b/src/main/java/com/spring/modules/quote/service/impl/QuoteServiceImpl.java index 36e4c2d7..e398ecd3 100644 --- a/src/main/java/com/spring/modules/quote/service/impl/QuoteServiceImpl.java +++ b/src/main/java/com/spring/modules/quote/service/impl/QuoteServiceImpl.java @@ -430,6 +430,8 @@ public class QuoteServiceImpl extends ServiceImpl implements List nodeDetails = changeManagementMapper.queryNodeDetailFirst(quote.getSite(), baseData.get("workflowId"), quote.getMenuId()); // 获取默认报价行的条目明细 QuoteDetail defaultQuoteDetail = getDefaultQuoteDetail(quote.getId()); + // 获取报价主表信息(用于获取plm_quote表字段) + Quote quoteInfo = getById(quote.getId()); // 根据字段对应的数据库表+字段查询出数据 for (PlmRequestDetailVo nodeDetail : nodeDetails) { if (nodeDetail.getId() == null) { @@ -443,8 +445,19 @@ public class QuoteServiceImpl extends ServiceImpl implements mainData.add(md); continue; } - // 只处理 plm_quote_detail 表的字段(site、bu_no、quote_profit_rate、quote_profit_amount、quote_tax_rate) - if ("plm_quote_detail".equals(nodeDetail.getPlmTable()) && defaultQuoteDetail != null) { + // 处理 plm_quote 表的字段(如 annual_sales) + if ("plm_quote".equals(nodeDetail.getPlmTable()) && quoteInfo != null) { + // 判断是否为金额类型 + if ("C".equals(nodeDetail.getFieldType())) { + BigDecimal v = (BigDecimal) getPropertyValue(quoteInfo, nodeDetail.getPlmField()); + fieldValue = v == null ? "0" : v.toString(); + } else { + Object value = getPropertyValue(quoteInfo, nodeDetail.getPlmField()); + fieldValue = value == null ? "" : value.toString(); + } + } + // 处理 plm_quote_detail 表的字段(site、bu_no、quote_profit_rate、quote_profit_amount、quote_tax_rate) + else if ("plm_quote_detail".equals(nodeDetail.getPlmTable()) && defaultQuoteDetail != null) { // 判断是否为金额类型 if ("C".equals(nodeDetail.getFieldType())) { BigDecimal v = (BigDecimal) getPropertyValue(defaultQuoteDetail, nodeDetail.getPlmField()); @@ -507,6 +520,18 @@ public class QuoteServiceImpl extends ServiceImpl implements @Override @Transactional public void submitChange(Quote quote) { + // 1. 先更新主表数据(包括annual_sales等字段),确保在事务中 + Quote updateQuote = new Quote(); + updateQuote.setId(quote.getId()); + // 只更新需要的字段 + if (!StringUtils.isEmpty(quote.getAnnualSales())) { + updateQuote.setAnnualSales(quote.getAnnualSales()); + } + // 可以根据需要添加其他需要更新的字段 + updateQuote.setUpdateBy(quote.getUserName()); + updateQuote.setUpdateDate(new Date()); + updateById(updateQuote); + // 获取提交基础数据 Map baseData = changeManagementService.getSubmitBaseData(quote.getSite(), quote.getUserName(), quote.getQuoteVersionNo()); // 主信息 @@ -520,7 +545,9 @@ public class QuoteServiceImpl extends ServiceImpl implements if ("Y".equals(quote.getNodeConclusion())) { // 同意 // 获取默认报价行的条目明细 QuoteDetail defaultQuoteDetail = getDefaultQuoteDetail(quote.getId()); - List mainData = getMainData(quote.getSite(), baseData, defaultQuoteDetail); + // 获取报价主表信息(用于获取plm_quote表字段如annual_sales) + Quote quoteInfo = getById(quote.getId()); + List mainData = getMainData(quote.getSite(), baseData, defaultQuoteDetail, quoteInfo); paramData.setMainData(mainData); SubmitRequestParam submitRequestParam = new SubmitRequestParam(); submitRequestParam.setUserId(paramData.getUserId()); @@ -614,7 +641,8 @@ public class QuoteServiceImpl extends ServiceImpl implements if ("update".equals(data.getProcessFlag())) { // 获取默认报价行的条目明细 QuoteDetail defaultQuoteDetail = getDefaultQuoteDetail(changeRequest.getId()); - List mainData = getMainData(data.getSite(), baseData, defaultQuoteDetail); + // 获取报价主表信息(用于获取plm_quote表字段如annual_sales) + List mainData = getMainData(data.getSite(), baseData, defaultQuoteDetail, changeRequest); paramData.setMainData(mainData); SubmitRequestParam submitRequestParam = new SubmitRequestParam(); submitRequestParam.setUserId(data.getUpdateBy()); @@ -645,13 +673,25 @@ public class QuoteServiceImpl extends ServiceImpl implements } /** - * 获取mainData - 只从plm_quote_detail表获取数据(取默认报价行的条目明细) + * 获取mainData - 从plm_quote和plm_quote_detail表获取数据 * @param site * @param baseData * @param defaultQuoteDetail 默认报价行的条目明细 * @return */ private List getMainData(String site, Map baseData, QuoteDetail defaultQuoteDetail) { + return getMainData(site, baseData, defaultQuoteDetail, null); + } + + /** + * 获取mainData - 从plm_quote和plm_quote_detail表获取数据 + * @param site + * @param baseData + * @param defaultQuoteDetail 默认报价行的条目明细 + * @param quoteInfo 报价主表信息 + * @return + */ + private List getMainData(String site, Map baseData, QuoteDetail defaultQuoteDetail, Quote quoteInfo) { // 创建 mainData List mainData = new ArrayList<>(); List nodeDetails = changeManagementMapper.queryNodeDetails(site, baseData.get("workflowId"), baseData.get("nodeId"), baseData.get("classificationNo")); @@ -668,8 +708,19 @@ public class QuoteServiceImpl extends ServiceImpl implements mainData.add(md); continue; } - // 只处理 plm_quote_detail 表的字段(site、bu_no、quote_profit_rate、quote_profit_amount、quote_tax_rate) - if ("plm_quote_detail".equals(nodeDetail.getPlmTable()) && defaultQuoteDetail != null) { + // 处理 plm_quote 表的字段(如 annual_sales) + if ("plm_quote".equals(nodeDetail.getPlmTable()) && quoteInfo != null) { + // 判断是否为金额类型 + if ("C".equals(nodeDetail.getFieldType())) { + BigDecimal v = (BigDecimal) getPropertyValue(quoteInfo, nodeDetail.getPlmField()); + fieldValue = v == null ? "0" : v.toString(); + } else { + Object value = getPropertyValue(quoteInfo, nodeDetail.getPlmField()); + fieldValue = value == null ? "" : value.toString(); + } + } + // 处理 plm_quote_detail 表的字段(site、bu_no、quote_profit_rate、quote_profit_amount、quote_tax_rate) + else if ("plm_quote_detail".equals(nodeDetail.getPlmTable()) && defaultQuoteDetail != null) { // 判断是否为金额类型 if ("C".equals(nodeDetail.getFieldType())) { BigDecimal v = (BigDecimal) getPropertyValue(defaultQuoteDetail, nodeDetail.getPlmField());