|
|
|
@ -105,7 +105,8 @@ public class QuoteServiceImpl extends ServiceImpl<QuoteMapper, Quote> implements |
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public String saveQuote(Quote quote) { |
|
|
|
assertProjectCompleted(quote.getSite(), quote.getProjectNo()); |
|
|
|
PlmProjectInfo project = assertProjectCompleted(quote.getSite(), quote.getProjectNo()); |
|
|
|
quote.setAnnualSales(project.getProjectAmount()); |
|
|
|
// 1、获取BU对应Site |
|
|
|
// 2、获取报价单号 |
|
|
|
String quoteNo = Constant.BJ+baseMapper.queryQuoteNo(quote); |
|
|
|
@ -177,6 +178,7 @@ public class QuoteServiceImpl extends ServiceImpl<QuoteMapper, Quote> implements |
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public void updateQuote(Quote quote) { |
|
|
|
fillAnnualSalesFromProject(quote); |
|
|
|
// 校验项目和客户 |
|
|
|
checkCustomerAndProject(quote); |
|
|
|
// 校验人员 |
|
|
|
@ -269,7 +271,7 @@ public class QuoteServiceImpl extends ServiceImpl<QuoteMapper, Quote> implements |
|
|
|
if (quotation.getQty().compareTo(BigDecimal.ZERO) <= 0) { |
|
|
|
throw new RuntimeException("MOQ不能小于等于0"); |
|
|
|
} |
|
|
|
assertProjectCompleted(quotation.getSite(), quotation.getProjectId()); |
|
|
|
PlmProjectInfo project = assertProjectCompleted(quotation.getSite(), quotation.getProjectId()); |
|
|
|
Quote quote = new Quote(); |
|
|
|
// 1、获取bu和site |
|
|
|
quote.setStatus("草稿"); |
|
|
|
@ -277,6 +279,7 @@ public class QuoteServiceImpl extends ServiceImpl<QuoteMapper, Quote> implements |
|
|
|
quote.setSite(quotation.getSite()); |
|
|
|
|
|
|
|
quote.setProjectNo(quotation.getProjectId()); |
|
|
|
quote.setAnnualSales(project.getProjectAmount()); |
|
|
|
quote.setCustomerNo(quotation.getCustomerNo()); |
|
|
|
quote.setQuoter(quotation.getQuoter()); |
|
|
|
quote.setPurchase(quotation.getTracker()); |
|
|
|
@ -581,14 +584,14 @@ public class QuoteServiceImpl extends ServiceImpl<QuoteMapper, Quote> implements |
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public void submitChange(Quote quote) { |
|
|
|
// 1. 先更新主表数据(包括annual_sales等字段),确保在事务中 |
|
|
|
// 1. 先按项目年销售额回写主表 annual_sales,不允许前端改值 |
|
|
|
Quote updateQuote = new Quote(); |
|
|
|
updateQuote.setId(quote.getId()); |
|
|
|
// 只更新需要的字段 |
|
|
|
if (quote.getAnnualSales() != null) { |
|
|
|
updateQuote.setAnnualSales(quote.getAnnualSales()); |
|
|
|
Quote dbQuote = getById(quote.getId()); |
|
|
|
if (dbQuote != null) { |
|
|
|
fillAnnualSalesFromProject(dbQuote); |
|
|
|
updateQuote.setAnnualSales(dbQuote.getAnnualSales()); |
|
|
|
} |
|
|
|
// 可以根据需要添加其他需要更新的字段 |
|
|
|
updateQuote.setUpdateBy(quote.getUserName()); |
|
|
|
updateQuote.setUpdateDate(new Date()); |
|
|
|
updateById(updateQuote); |
|
|
|
@ -876,7 +879,20 @@ public class QuoteServiceImpl extends ServiceImpl<QuoteMapper, Quote> implements |
|
|
|
.one(); |
|
|
|
} |
|
|
|
|
|
|
|
private void assertProjectCompleted(String site, String projectId) { |
|
|
|
private PlmProjectInfo assertProjectCompleted(String site, String projectId) { |
|
|
|
PlmProjectInfo project = getProjectOrThrow(site, projectId); |
|
|
|
if (!"已完成".equals(project.getStatus())) { |
|
|
|
throw new RuntimeException("仅项目单据状态为已完成时允许报价,当前状态:" + project.getStatus()); |
|
|
|
} |
|
|
|
return project; |
|
|
|
} |
|
|
|
|
|
|
|
private void fillAnnualSalesFromProject(Quote quote) { |
|
|
|
PlmProjectInfo project = getProjectOrThrow(quote.getSite(), quote.getProjectNo()); |
|
|
|
quote.setAnnualSales(project.getProjectAmount()); |
|
|
|
} |
|
|
|
|
|
|
|
private PlmProjectInfo getProjectOrThrow(String site, String projectId) { |
|
|
|
if (!StringUtils.hasText(site) || !StringUtils.hasText(projectId)) { |
|
|
|
throw new RuntimeException("项目号不能为空"); |
|
|
|
} |
|
|
|
@ -884,8 +900,6 @@ public class QuoteServiceImpl extends ServiceImpl<QuoteMapper, Quote> implements |
|
|
|
if (project == null) { |
|
|
|
throw new RuntimeException("未找到对应项目信息"); |
|
|
|
} |
|
|
|
if (!"已完成".equals(project.getStatus())) { |
|
|
|
throw new RuntimeException("仅项目单据状态为已完成时允许报价,当前状态:" + project.getStatus()); |
|
|
|
} |
|
|
|
return project; |
|
|
|
} |
|
|
|
} |