From e12dd45cd4b4f96125104796d890ca1ad47afaf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Mon, 16 Mar 2026 09:21:22 +0800 Subject: [PATCH] =?UTF-8?q?feat(quotation):=20=E5=AE=8C=E5=96=84=E4=BB=B7?= =?UTF-8?q?=E6=A0=BC=E9=85=8D=E7=BD=AE=E5=92=8C=E6=AF=94=E4=BE=8B=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在ModelPriceConfigVO中启用id字段用于数据标识 - 优化PriceConfigController中的条件查询逻辑,改进代码可读性 - 添加价格状态更新逻辑,当配置生效时自动更新相关价格记录状态 - 更新QuotationModelPriceMapper.xml查询语句,增加价格记录id返回 - 修改QuotationModelRatioAgentMapper.xml数据源,关联价格视图进行查询 - 重构RatioConfigController中代理商和直销比例配置的数据过滤逻辑 - 在RatioDirectConfigController中引入ProductModelSimpleVO简化数据传输 - 优化比例配置的数据检索方式,提升查询性能和准确性 --- .../common/pojo/vo/ModelPriceConfigVO.java | 2 +- .../admin/PriceConfigController.java | 11 +++++-- .../admin/RatioConfigController.java | 29 +++++++++++------ .../admin/RatioDirectConfigController.java | 6 +++- .../mapper/QuotationModelPriceMapper.xml | 4 +-- .../mapper/QuotationModelRatioAgentMapper.xml | 32 ++++++++++--------- 6 files changed, 53 insertions(+), 31 deletions(-) diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ModelPriceConfigVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ModelPriceConfigVO.java index 5d910161..ca8593f8 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ModelPriceConfigVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ModelPriceConfigVO.java @@ -13,7 +13,7 @@ import java.util.Objects; @Accessors(chain = true) public class ModelPriceConfigVO { -// private Long id; + private Long id; /** * 机型表batch_number diff --git a/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/admin/PriceConfigController.java b/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/admin/PriceConfigController.java index 26662406..b1dfff19 100644 --- a/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/admin/PriceConfigController.java +++ b/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/admin/PriceConfigController.java @@ -193,7 +193,7 @@ public class PriceConfigController extends ControllerBase { List areas = priceItemAreaService.lambdaQuery() .eq(QuotationModelPriceItemArea::getPriceId, price.getId()) .and(wrapper -> wrapper.eq(QuotationModelPriceItemArea::getPriceItemId, 0).or() - .in(CollectionUtil.isNotEmpty(items),QuotationModelPriceItemArea::getPriceItemId, items.stream() + .in(CollectionUtil.isNotEmpty(items), QuotationModelPriceItemArea::getPriceItemId, items.stream() .map(QuotationModelPriceItem::getId) .collect(Collectors.toList()) ) @@ -268,7 +268,7 @@ public class PriceConfigController extends ControllerBase { if (Objects.nonNull(area)) { area.setAmount(new BigDecimal(map.get(category.getCode()))); areasForUpdate.add(area); - }else { + } else { areasForAdd.add(new QuotationModelPriceItemArea() .setAreaId(category.getId()) .setPriceId(price.getId()) @@ -373,7 +373,7 @@ public class PriceConfigController extends ControllerBase { .orElse(null); if (Objects.nonNull(area)) { area.setAmount(new BigDecimal(map.get(category.getCode()))); - }else { + } else { areasForAdd.add(new QuotationModelPriceItemArea() .setAreaId(category.getId()) .setPriceId(price.getId()) @@ -429,6 +429,11 @@ public class PriceConfigController extends ControllerBase { .eq(QuotationModelConfig::getConfigStatus, 1) .one(); if (Objects.nonNull(config)) { + priceService.lambdaUpdate() + .set(QuotationModelPrice::getPriceStatus, 2) + .eq(QuotationModelPrice::getModelId, price.getModelId()) + .eq(QuotationModelPrice::getPriceStatus, 1) + .update(); price.setPriceStatus(1); price.setConfigId(config.getId()); price.setPriceVersion("MP" + DateTimeUtil.format(LocalDateTime.now(), "yyMMddHHmm")); diff --git a/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/admin/RatioConfigController.java b/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/admin/RatioConfigController.java index f8d65924..12332941 100644 --- a/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/admin/RatioConfigController.java +++ b/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/admin/RatioConfigController.java @@ -118,15 +118,22 @@ public class RatioConfigController extends ControllerBase { .eq(TBaseCustomer::getDelIs, 0) .eq(TBaseCustomer::getEnableState, 1) .list(); + List agentItems = isMarketingDirector ? ratioAgentItemService.getEffectives() : null; + List directItems = ratioDirectItemService.getEffectives(); pdatas.getRecords().forEach(data -> { RatioConfigSearchVO vo = new RatioConfigSearchVO().setModelNo(data.getModelNo()); vos.add(vo); if (isMarketingDirector) { RatioConfigSearchVO voc1 = new RatioConfigSearchVO().setName("代理商"); - List agentItems = ratioAgentItemService.getEffectives(); - if (CollectionUtil.isNotEmpty(agentItems)) { - List users = appUserService.listByIds(agentItems.stream().map(QuotationModelRatioAgentItemDTO::getUserId).collect(Collectors.toList())); - agentItems.stream() + List modelAgentItems= agentItems.stream() + .filter(ai -> ai.getModelId().equals(data.getModelId())) + .collect(Collectors.toList()); + if (CollectionUtil.isNotEmpty(modelAgentItems)) { + List users = appUserService.listByIds(modelAgentItems.stream() + .map(QuotationModelRatioAgentItemDTO::getUserId) + .collect(Collectors.toList()) + ); + modelAgentItems.stream() .filter(QuotationModelRatioAgentItemDTO::getIsPrimary) .forEach(ai -> { //主账号 @@ -174,12 +181,17 @@ public class RatioConfigController extends ControllerBase { } vo.getChildren().add(voc1); RatioConfigSearchVO voc2 = new RatioConfigSearchVO().setName("直销"); - List directItems = ratioDirectItemService.getEffectives(); - if (CollectionUtil.isNotEmpty(directItems)) { + List modelDirectItems = directItems.stream() + .filter(di -> di.getModelId().equals(data.getModelId())) + .collect(Collectors.toList()); + if (CollectionUtil.isNotEmpty(modelDirectItems)) { List adminUsers = adminUserService.lambdaQuery() - .in(AdminUser::getId, directItems.stream().map(QuotationModelRatioDirectItemDTO::getUserId).collect(Collectors.toList())) + .in(AdminUser::getId, modelDirectItems.stream() + .map(QuotationModelRatioDirectItemDTO::getUserId) + .collect(Collectors.toList()) + ) .list(); - directItems.stream() + modelDirectItems.stream() .filter(item -> item.getParentId().equals(AdminUserUtil.getUserId())) .forEach(directItem -> { AdminUser user = adminUsers.stream() @@ -220,7 +232,6 @@ public class RatioConfigController extends ControllerBase { } vo.getChildren().add(voc2); } else { - List directItems = ratioDirectItemService.getEffectives(); RatioConfigSearchVO vop = new RatioConfigSearchVO() .setName(AdminUserUtil.getUserName()) .setCategoryName(AdminUserUtil.getCategoryName()); diff --git a/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/admin/RatioDirectConfigController.java b/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/admin/RatioDirectConfigController.java index fea7b7d7..9e927185 100644 --- a/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/admin/RatioDirectConfigController.java +++ b/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/admin/RatioDirectConfigController.java @@ -13,6 +13,7 @@ import com.nflg.mobilebroken.common.pojo.request.ModelRatioDirectUserSearchReque import com.nflg.mobilebroken.common.pojo.vo.DynamicHeaderVO; import com.nflg.mobilebroken.common.pojo.vo.DynamicTableVO; import com.nflg.mobilebroken.common.pojo.vo.ModelPriceVO; +import com.nflg.mobilebroken.common.pojo.vo.ProductModelSimpleVO; import com.nflg.mobilebroken.common.util.*; import com.nflg.mobilebroken.quotation.controller.ControllerBase; import com.nflg.mobilebroken.quotation.pojo.vo.QuotationModelRatioVO; @@ -58,6 +59,9 @@ public class RatioDirectConfigController extends ControllerBase { @Resource private IProductModelService productModelService; + @Resource + private IQuotationModelRatioAgentService ratioAgentService; + /** * 获取动态表头 */ @@ -153,7 +157,7 @@ public class RatioDirectConfigController extends ControllerBase { Long departmentId = AdminUserUtil.getDepartmentId(); VUtils.trueThrowBusinessError(Objects.isNull(departmentId)).throwMessage("未设置部门,请联系管理员"); QuotationModelRatioDirect ratioAgent = ratioDirectService.getEffectiveByUser(AdminUserUtil.getUserId()); - IPage pdatas = productModelService.searchForQuotation(request); + IPage pdatas = ratioAgentService.search(request); if (CollectionUtil.isEmpty(pdatas.getRecords())) { return ApiResult.successWithExtras(Convert.convert(QuotationModelRatioVO.class, ratioAgent)); } diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/QuotationModelPriceMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/QuotationModelPriceMapper.xml index dda90b24..bebb2ab6 100644 --- a/nflg-mobilebroken-repository/src/main/resources/mapper/QuotationModelPriceMapper.xml +++ b/nflg-mobilebroken-repository/src/main/resources/mapper/QuotationModelPriceMapper.xml @@ -3,8 +3,8 @@ SELECT pm.batch_number,pm.no - FROM product_model pm + FROM v_quotation_model_price vqmp + LEFT JOIN product_model pm on vqmp.model_id=pm.batch_number and pm.state=1 LEFT JOIN product_type pt on pm.type_number=pt.batch_number AND pt.state=1 LEFT JOIN product_series ps ON pm.series_number=ps.batch_number AND ps.state=1 LEFT JOIN dictionary_item di ON di.id=pm.module_id - WHERE pm.state=1 - - AND pm.module_id=#{request.moduleId} - - - AND pm.series_number=#{request.seriesNumber} - - - AND pm.type_number=#{request.typeNumber} - - - AND pm.`no` like concat('%', #{request.no}, '%') - - order by pm.id + + + AND pm.module_id=#{request.moduleId} + + + AND pm.series_number=#{request.seriesNumber} + + + AND pm.type_number=#{request.typeNumber} + + + AND pm.`no` like concat('%', #{request.no}, '%') + + + order by vqmp.id desc