refactor(quotation): 重构价格配置中的区域处理逻辑
- 移除 DynamicHeaderVO 中的 dataId 字段 - 将 ModelPriceSaveAreaRequest 中的 areaId 改为 areaCode,并使用 @NotBlank 注解 - 新增 NumberUtil 工具类用于数字格式化 - 在价格配置控制器中使用 areaCode 查找区域并进行验证 - 更新数据库操作逻辑以使用区域编码而非区域ID - 添加区域不存在时的业务异常处理
This commit is contained in:
parent
101701f586
commit
79e877cb5e
|
|
@ -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;
|
||||
|
||||
/**
|
||||
* 价格
|
||||
|
|
|
|||
|
|
@ -19,11 +19,6 @@ public class DynamicHeaderVO {
|
|||
*/
|
||||
private String label;
|
||||
|
||||
/**
|
||||
* 数据id
|
||||
*/
|
||||
private String dataId;
|
||||
|
||||
/**
|
||||
* 是否显示
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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<Void> save(@Valid @RequestBody List<ModelPriceSaveRequest> datas) {
|
||||
List<DictionaryItem> dbAreas = dictionaryItemService.getListByDictionaryCode("DispatchCategory");
|
||||
Map<Long, List<ModelPriceSaveRequest>> 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()));
|
||||
|
|
|
|||
Loading…
Reference in New Issue