Browse Source

2026-01-19

报价下达优化
1、复制明细
2、新增后设置第一行为默认报价行
master
fengyuan_yang 3 months ago
parent
commit
3b10f66f45
  1. 8
      src/main/java/com/spring/modules/quote/mapper/QuoteGroupDetailMapper.java
  2. 25
      src/main/java/com/spring/modules/quote/service/impl/QuoteDetailBomServiceImpl.java
  3. 25
      src/main/java/com/spring/modules/quote/service/impl/QuoteDetailRoutingServiceImpl.java
  4. 12
      src/main/java/com/spring/modules/quote/service/impl/QuoteDetailServiceImpl.java
  5. 8
      src/main/resources/mapper/quote/QuoteGroupDetailMapper.xml

8
src/main/java/com/spring/modules/quote/mapper/QuoteGroupDetailMapper.java

@ -25,6 +25,14 @@ public interface QuoteGroupDetailMapper extends BaseMapper<QuoteGroupDetail> {
List<QuoteGroupDetail> queryQuoteGroupDetailByCurrent(QuoteDetail detail);
/**
* 设置默认报价行仅当 currentQuoteDetailItemNo 为空时设置
* @param quoteGroupDetailId 报价明细组ID
* @param itemNo 条目行号
* @return 影响行数
*/
int setDefaultQuoteDetailItemNo(@Param("quoteGroupDetailId") Long quoteGroupDetailId, @Param("itemNo") Integer itemNo);
PartInformationEntity queryPart(@Param("site") String site, @Param("partNo") String partNo);
List<QuoteGroupDetail> getQuoteDetailByPart(@Param("site") String site, @Param("testPartNo") String testPartNo, @Param("finalPartNo") String finalPartNo);

25
src/main/java/com/spring/modules/quote/service/impl/QuoteDetailBomServiceImpl.java

@ -225,20 +225,17 @@ public class QuoteDetailBomServiceImpl extends ServiceImpl<QuoteDetailBomMapper,
public void againQuoteDetailBom(QuoteDetailBomTree tree, long id) {
List<QuoteDetailBom> bomList = lambdaQuery().eq(QuoteDetailBom::getTreeId, id).list();
// 优化批量更新属性后批量插入减少数据库交互次数降低死锁风险
if (!bomList.isEmpty()) {
bomList.forEach(bom -> {
bom.setTreeId(tree.getId());
bom.setQuoteDetailId(tree.getQuoteDetailId());
bom.setQuoteId(tree.getQuoteId());
bom.setQuoteNo(tree.getQuoteNo());
bom.setVersionNo(tree.getVersionNo());
bom.setQuoteDetailItemNo(tree.getQuoteDetailItemNo());
bom.setId(null);
});
// 批量保存默认批量大小为1000超过1000会自动分批
saveBatch(bomList);
// 逐条插入避免 SQL Server 批量插入时获取自增主键的问题
// SQL Server JDBC 驱动在 saveBatch 场景下获取自增主键会报错
for (QuoteDetailBom bom : bomList) {
bom.setTreeId(tree.getId());
bom.setQuoteDetailId(tree.getQuoteDetailId());
bom.setQuoteId(tree.getQuoteId());
bom.setQuoteNo(tree.getQuoteNo());
bom.setVersionNo(tree.getVersionNo());
bom.setQuoteDetailItemNo(tree.getQuoteDetailItemNo());
bom.setId(null);
save(bom);
}
}
}

25
src/main/java/com/spring/modules/quote/service/impl/QuoteDetailRoutingServiceImpl.java

@ -231,20 +231,17 @@ public class QuoteDetailRoutingServiceImpl extends ServiceImpl<QuoteDetailRoutin
public void againQuoteDetailRouting(QuoteDetailBomTree tree, long id) {
List<QuoteDetailRouting> list = lambdaQuery().eq(QuoteDetailRouting::getTreeId, id).list();
// 优化批量更新属性后批量插入减少数据库交互次数降低死锁风险
if (!list.isEmpty()) {
list.forEach(detailRouting -> {
detailRouting.setTreeId(tree.getId());
detailRouting.setQuoteDetailId(tree.getQuoteDetailId());
detailRouting.setQuoteId(tree.getQuoteId());
detailRouting.setQuoteNo(tree.getQuoteNo());
detailRouting.setVersionNo(tree.getVersionNo());
detailRouting.setQuoteDetailItemNo(tree.getQuoteDetailItemNo());
detailRouting.setId(null);
});
// 批量保存默认批量大小为1000超过1000会自动分批
saveBatch(list);
// 逐条插入避免 SQL Server 批量插入时获取自增主键的问题
// SQL Server JDBC 驱动在 saveBatch 场景下获取自增主键会报错
for (QuoteDetailRouting detailRouting : list) {
detailRouting.setTreeId(tree.getId());
detailRouting.setQuoteDetailId(tree.getQuoteDetailId());
detailRouting.setQuoteId(tree.getQuoteId());
detailRouting.setQuoteNo(tree.getQuoteNo());
detailRouting.setVersionNo(tree.getVersionNo());
detailRouting.setQuoteDetailItemNo(tree.getQuoteDetailItemNo());
detailRouting.setId(null);
save(detailRouting);
}
}

12
src/main/java/com/spring/modules/quote/service/impl/QuoteDetailServiceImpl.java

@ -94,6 +94,12 @@ public class QuoteDetailServiceImpl extends ServiceImpl<QuoteDetailMapper, Quote
// 两个币种同步
quoteDetail.setCurrency2(quoteDetail.getCurrency1());
save(quoteDetail);
// 6如果是第一行条目明细自动设置为默认报价行
if (quoteDetail.getQuoteGroupDetailId() != null && quoteDetail.getItemNo() != null) {
quoteGroupDetailMapper.setDefaultQuoteDetailItemNo(quoteDetail.getQuoteGroupDetailId(), quoteDetail.getItemNo());
}
// 4初始化属性
quoteDetailAttributeService.initQuoteDetailAttribute(quoteDetail);
// 测试 默认插入其他列
@ -571,9 +577,9 @@ public class QuoteDetailServiceImpl extends ServiceImpl<QuoteDetailMapper, Quote
// 赋值 前台填写的参数
detail.setQty(quoteDetail.getQty());
detail.setCurrency1(quoteDetail.getCurrency1());
if ("下达".equals(detail.getStatus())){
throw new RuntimeException("该报价明细单状态为下达,不能重新报价");
}
// if ("下达".equals(detail.getStatus())){ // 2026-01-19 暂去除该限制
// throw new RuntimeException("该报价明细单状态为下达,不能重新报价");
// }
Long id = quoteDetail.getId();
// 1获取itemNo

8
src/main/resources/mapper/quote/QuoteGroupDetailMapper.xml

@ -333,6 +333,14 @@
select id from plm_quote_group_detail where id = #{quoteGroupDetailId} and current_quote_detail_item_no = #{itemNo}
</select>
<!-- 设置默认报价行(仅当 currentQuoteDetailItemNo 为空时设置) -->
<update id="setDefaultQuoteDetailItemNo">
update plm_quote_group_detail
set current_quote_detail_item_no = #{itemNo}
where id = #{quoteGroupDetailId}
and (current_quote_detail_item_no is null or current_quote_detail_item_no = '')
</update>
<select id="queryPart" resultType="com.spring.modules.part.entity.PartInformationEntity">
select top 1 site,

Loading…
Cancel
Save