From 79e877cb5ebce13f2a5e78af11e9a4a9d3d7d08e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Wed, 25 Feb 2026 09:36:46 +0800 Subject: [PATCH] =?UTF-8?q?refactor(quotation):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E4=BB=B7=E6=A0=BC=E9=85=8D=E7=BD=AE=E4=B8=AD=E7=9A=84=E5=8C=BA?= =?UTF-8?q?=E5=9F=9F=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除 DynamicHeaderVO 中的 dataId 字段 - 将 ModelPriceSaveAreaRequest 中的 areaId 改为 areaCode,并使用 @NotBlank 注解 - 新增 NumberUtil 工具类用于数字格式化 - 在价格配置控制器中使用 areaCode 查找区域并进行验证 - 更新数据库操作逻辑以使用区域编码而非区域ID - 添加区域不存在时的业务异常处理 --- .../request/ModelPriceSaveAreaRequest.java | 7 +-- .../common/pojo/vo/DynamicHeaderVO.java | 5 -- .../mobilebroken/common/util/NumberUtil.java | 13 +++++ .../admin/PriceConfigController.java | 52 +++++++++++++------ 4 files changed, 53 insertions(+), 24 deletions(-) create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/util/NumberUtil.java diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ModelPriceSaveAreaRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ModelPriceSaveAreaRequest.java index f2463ddf..0da84284 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ModelPriceSaveAreaRequest.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ModelPriceSaveAreaRequest.java @@ -2,6 +2,7 @@ package com.nflg.mobilebroken.common.pojo.request; import lombok.Data; +import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.math.BigDecimal; @@ -9,10 +10,10 @@ import java.math.BigDecimal; public class ModelPriceSaveAreaRequest { /** - * 价格区域,字典id + * 区域编码 */ - @NotNull - private Long areaId; + @NotBlank + private String areaCode; /** * 价格 diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DynamicHeaderVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DynamicHeaderVO.java index 3ca83696..acbff3f0 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DynamicHeaderVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DynamicHeaderVO.java @@ -19,11 +19,6 @@ public class DynamicHeaderVO { */ private String label; - /** - * 数据id - */ - private String dataId; - /** * 是否显示 */ diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/util/NumberUtil.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/util/NumberUtil.java new file mode 100644 index 00000000..12568547 --- /dev/null +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/util/NumberUtil.java @@ -0,0 +1,13 @@ +package com.nflg.mobilebroken.common.util; + +import java.math.BigDecimal; +import java.text.DecimalFormat; + +public class NumberUtil { + + private static final DecimalFormat df = new DecimalFormat("0.###"); + + public static String format(BigDecimal number) { + return df.format(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 67536ed1..8f744aa4 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 @@ -1,13 +1,10 @@ package com.nflg.mobilebroken.quotation.controller.admin; -import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.IdUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.nflg.mobilebroken.common.constant.STATE; import com.nflg.mobilebroken.common.pojo.ApiResult; import com.nflg.mobilebroken.common.pojo.PageData; @@ -18,6 +15,8 @@ import com.nflg.mobilebroken.common.pojo.vo.DynamicHeaderVO; import com.nflg.mobilebroken.common.pojo.vo.ModelPriceConfigVO; import com.nflg.mobilebroken.common.util.AdminUserUtil; import com.nflg.mobilebroken.common.util.DateTimeUtil; +import com.nflg.mobilebroken.common.util.NumberUtil; +import com.nflg.mobilebroken.common.util.VUtils; import com.nflg.mobilebroken.quotation.controller.ControllerBase; import com.nflg.mobilebroken.repository.entity.*; import com.nflg.mobilebroken.repository.service.*; @@ -41,9 +40,6 @@ import java.util.stream.Collectors; @RequestMapping("/price/config") public class PriceConfigController extends ControllerBase { - // private static final ObjectMapper objectMapper = new ObjectMapper() -// .registerModule(new JavaTimeModule()) -// .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); @Resource private ObjectMapper objectMapper; @@ -83,7 +79,6 @@ public class PriceConfigController extends ControllerBase { .map(area -> new DynamicHeaderVO() .setProp(area.getCode()) .setLabel(area.getName()) - .setDataId(area.getCode() + "Id") ) .collect(Collectors.toList()) ) @@ -110,8 +105,7 @@ public class PriceConfigController extends ControllerBase { }); if (CollectionUtil.isNotEmpty(it.getAreas())) { it.getAreas().forEach(area -> { - map.put(area.getCode(), area.getCode()); - map.put(area.getCode() + "Id", area.getAreaId()); + map.put(area.getCode(), NumberUtil.format(area.getAmount())); }); } return map; @@ -130,6 +124,7 @@ public class PriceConfigController extends ControllerBase { @Transactional @PostMapping("/save") public ApiResult save(@Valid @RequestBody List datas) { + List dbAreas = dictionaryItemService.getListByDictionaryCode("DispatchCategory"); Map> group = datas.stream().collect(Collectors.groupingBy(ModelPriceSaveRequest::getModelId)); group.forEach((modelId, itemList) -> { QuotationModelPrice price = priceService.lambdaQuery() @@ -161,8 +156,13 @@ public class PriceConfigController extends ControllerBase { .setUpdateTime(LocalDateTime.now()); items.add(item); for (ModelPriceSaveAreaRequest ait : it.getAreas()) { + DictionaryItem ai = dbAreas.stream() + .filter(a -> a.getCode().equals(ait.getAreaCode())) + .findFirst() + .orElse(null); + VUtils.trueThrowBusinessError(Objects.isNull(ai)).throwMessage("找不到区域:" + ait.getAreaCode()); QuotationModelPriceItemArea area = new QuotationModelPriceItemArea() - .setAreaId(ait.getAreaId()) + .setAreaId(ai.getId()) .setPriceId(price.getId()) .setPriceItemId(item.getId()) .setAmount(ait.getAmount()); @@ -206,8 +206,13 @@ public class PriceConfigController extends ControllerBase { .setUpdateTime(LocalDateTime.now()); itemsForAdd.add(item); for (ModelPriceSaveAreaRequest ait : sit.getAreas()) { + DictionaryItem ai = dbAreas.stream() + .filter(a -> a.getCode().equals(ait.getAreaCode())) + .findFirst() + .orElse(null); + VUtils.trueThrowBusinessError(Objects.isNull(ai)).throwMessage("找不到区域:" + ait.getAreaCode()); areasForAdd.add(new QuotationModelPriceItemArea() - .setAreaId(ait.getAreaId()) + .setAreaId(ai.getId()) .setPriceId(price.getId()) .setPriceItemId(item.getId()) .setAmount(ait.getAmount())); @@ -219,15 +224,20 @@ public class PriceConfigController extends ControllerBase { itemsForUpdate.add(item); QuotationModelPriceItem finalItem = item; for (ModelPriceSaveAreaRequest ait : sit.getAreas()) { + DictionaryItem ai = dbAreas.stream() + .filter(a -> a.getCode().equals(ait.getAreaCode())) + .findFirst() + .orElse(null); + VUtils.trueThrowBusinessError(Objects.isNull(ai)).throwMessage("找不到区域:" + ait.getAreaCode()); QuotationModelPriceItemArea area = areas.stream() .filter(it -> it.getPriceItemId().equals(finalItem.getId()) - && it.getAreaId().equals(ait.getAreaId()) + && it.getAreaId().equals(ai.getId()) ) .findFirst() .orElse(null); if (Objects.isNull(area)) { areasForAdd.add(new QuotationModelPriceItemArea() - .setAreaId(ait.getAreaId()) + .setAreaId(ai.getId()) .setPriceId(price.getId()) .setPriceItemId(item.getId()) .setAmount(ait.getAmount())); @@ -278,8 +288,13 @@ public class PriceConfigController extends ControllerBase { .filter(area -> area.getPriceItemId().equals(dbItem.getId())) .collect(Collectors.toList()); for (ModelPriceSaveAreaRequest ait : sit.getAreas()) { + DictionaryItem ai = dbAreas.stream() + .filter(a -> a.getCode().equals(ait.getAreaCode())) + .findFirst() + .orElse(null); + VUtils.trueThrowBusinessError(Objects.isNull(ai)).throwMessage("找不到区域:" + ait.getAreaCode()); QuotationModelPriceItemArea area = areas.stream() - .filter(it -> it.getAreaId().equals(ait.getAreaId())) + .filter(it -> it.getAreaId().equals(ai.getId())) .findFirst() .orElse(null); if (Objects.nonNull(area)) { @@ -289,7 +304,7 @@ public class PriceConfigController extends ControllerBase { areasForAdd.add(area); } else { areasForAdd.add(new QuotationModelPriceItemArea() - .setAreaId(ait.getAreaId()) + .setAreaId(ai.getId()) .setPriceId(price.getId()) .setPriceItemId(dbItem.getId()) .setAmount(ait.getAmount())); @@ -305,8 +320,13 @@ public class PriceConfigController extends ControllerBase { .setUpdateTime(LocalDateTime.now()); itemsForAdd.add(item); for (ModelPriceSaveAreaRequest ait : sit.getAreas()) { + DictionaryItem ai = dbAreas.stream() + .filter(a -> a.getCode().equals(ait.getAreaCode())) + .findFirst() + .orElse(null); + VUtils.trueThrowBusinessError(Objects.isNull(ai)).throwMessage("找不到区域:" + ait.getAreaCode()); areasForAdd.add(new QuotationModelPriceItemArea() - .setAreaId(ait.getAreaId()) + .setAreaId(ai.getId()) .setPriceId(price.getId()) .setPriceItemId(item.getId()) .setAmount(ait.getAmount()));