Browse Source

2026-09-08

项目信息增加oa流程
master
fengyuan_yang 2 weeks ago
parent
commit
9b74f9c417
  1. 36
      src/main/java/com/spring/modules/quote/service/impl/QuoteServiceImpl.java
  2. 1
      src/main/resources/mapper/project/ProjectDao.xml

36
src/main/java/com/spring/modules/quote/service/impl/QuoteServiceImpl.java

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

1
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

Loading…
Cancel
Save