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 b23a3f70..3e273919 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 @@ -105,7 +105,8 @@ public class QuoteServiceImpl extends ServiceImpl 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 implements @Override @Transactional public void updateQuote(Quote quote) { + fillAnnualSalesFromProject(quote); // 校验项目和客户 checkCustomerAndProject(quote); // 校验人员 @@ -269,7 +271,7 @@ public class QuoteServiceImpl extends ServiceImpl 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 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 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 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 implements if (project == null) { throw new RuntimeException("未找到对应项目信息"); } - if (!"已完成".equals(project.getStatus())) { - throw new RuntimeException("仅项目单据状态为已完成时允许报价,当前状态:" + project.getStatus()); - } + return project; } } diff --git a/src/main/resources/mapper/project/ProjectDao.xml b/src/main/resources/mapper/project/ProjectDao.xml index 5deff267..8b60cd01 100644 --- a/src/main/resources/mapper/project/ProjectDao.xml +++ b/src/main/resources/mapper/project/ProjectDao.xml @@ -744,6 +744,7 @@ customer_project_no,productSet,project_amount,step_id,reject_flag,reject_step_id select project_id, project_name, status, + project_amount as projectAmount, (select top 1 vp.bu_no from view_Project_Part vp where vp.site = plm_project_info.site