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 lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
|
@ -9,10 +10,10 @@ import java.math.BigDecimal;
|
||||||
public class ModelPriceSaveAreaRequest {
|
public class ModelPriceSaveAreaRequest {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 价格区域,字典id
|
* 区域编码
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotBlank
|
||||||
private Long areaId;
|
private String areaCode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 价格
|
* 价格
|
||||||
|
|
|
||||||
|
|
@ -19,11 +19,6 @@ public class DynamicHeaderVO {
|
||||||
*/
|
*/
|
||||||
private String label;
|
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;
|
package com.nflg.mobilebroken.quotation.controller.admin;
|
||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.fasterxml.jackson.core.type.TypeReference;
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
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.constant.STATE;
|
||||||
import com.nflg.mobilebroken.common.pojo.ApiResult;
|
import com.nflg.mobilebroken.common.pojo.ApiResult;
|
||||||
import com.nflg.mobilebroken.common.pojo.PageData;
|
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.pojo.vo.ModelPriceConfigVO;
|
||||||
import com.nflg.mobilebroken.common.util.AdminUserUtil;
|
import com.nflg.mobilebroken.common.util.AdminUserUtil;
|
||||||
import com.nflg.mobilebroken.common.util.DateTimeUtil;
|
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.quotation.controller.ControllerBase;
|
||||||
import com.nflg.mobilebroken.repository.entity.*;
|
import com.nflg.mobilebroken.repository.entity.*;
|
||||||
import com.nflg.mobilebroken.repository.service.*;
|
import com.nflg.mobilebroken.repository.service.*;
|
||||||
|
|
@ -41,9 +40,6 @@ import java.util.stream.Collectors;
|
||||||
@RequestMapping("/price/config")
|
@RequestMapping("/price/config")
|
||||||
public class PriceConfigController extends ControllerBase {
|
public class PriceConfigController extends ControllerBase {
|
||||||
|
|
||||||
// private static final ObjectMapper objectMapper = new ObjectMapper()
|
|
||||||
// .registerModule(new JavaTimeModule())
|
|
||||||
// .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
|
|
||||||
@Resource
|
@Resource
|
||||||
private ObjectMapper objectMapper;
|
private ObjectMapper objectMapper;
|
||||||
|
|
||||||
|
|
@ -83,7 +79,6 @@ public class PriceConfigController extends ControllerBase {
|
||||||
.map(area -> new DynamicHeaderVO()
|
.map(area -> new DynamicHeaderVO()
|
||||||
.setProp(area.getCode())
|
.setProp(area.getCode())
|
||||||
.setLabel(area.getName())
|
.setLabel(area.getName())
|
||||||
.setDataId(area.getCode() + "Id")
|
|
||||||
)
|
)
|
||||||
.collect(Collectors.toList())
|
.collect(Collectors.toList())
|
||||||
)
|
)
|
||||||
|
|
@ -110,8 +105,7 @@ public class PriceConfigController extends ControllerBase {
|
||||||
});
|
});
|
||||||
if (CollectionUtil.isNotEmpty(it.getAreas())) {
|
if (CollectionUtil.isNotEmpty(it.getAreas())) {
|
||||||
it.getAreas().forEach(area -> {
|
it.getAreas().forEach(area -> {
|
||||||
map.put(area.getCode(), area.getCode());
|
map.put(area.getCode(), NumberUtil.format(area.getAmount()));
|
||||||
map.put(area.getCode() + "Id", area.getAreaId());
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return map;
|
return map;
|
||||||
|
|
@ -130,6 +124,7 @@ public class PriceConfigController extends ControllerBase {
|
||||||
@Transactional
|
@Transactional
|
||||||
@PostMapping("/save")
|
@PostMapping("/save")
|
||||||
public ApiResult<Void> save(@Valid @RequestBody List<ModelPriceSaveRequest> datas) {
|
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));
|
Map<Long, List<ModelPriceSaveRequest>> group = datas.stream().collect(Collectors.groupingBy(ModelPriceSaveRequest::getModelId));
|
||||||
group.forEach((modelId, itemList) -> {
|
group.forEach((modelId, itemList) -> {
|
||||||
QuotationModelPrice price = priceService.lambdaQuery()
|
QuotationModelPrice price = priceService.lambdaQuery()
|
||||||
|
|
@ -161,8 +156,13 @@ public class PriceConfigController extends ControllerBase {
|
||||||
.setUpdateTime(LocalDateTime.now());
|
.setUpdateTime(LocalDateTime.now());
|
||||||
items.add(item);
|
items.add(item);
|
||||||
for (ModelPriceSaveAreaRequest ait : it.getAreas()) {
|
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()
|
QuotationModelPriceItemArea area = new QuotationModelPriceItemArea()
|
||||||
.setAreaId(ait.getAreaId())
|
.setAreaId(ai.getId())
|
||||||
.setPriceId(price.getId())
|
.setPriceId(price.getId())
|
||||||
.setPriceItemId(item.getId())
|
.setPriceItemId(item.getId())
|
||||||
.setAmount(ait.getAmount());
|
.setAmount(ait.getAmount());
|
||||||
|
|
@ -206,8 +206,13 @@ public class PriceConfigController extends ControllerBase {
|
||||||
.setUpdateTime(LocalDateTime.now());
|
.setUpdateTime(LocalDateTime.now());
|
||||||
itemsForAdd.add(item);
|
itemsForAdd.add(item);
|
||||||
for (ModelPriceSaveAreaRequest ait : sit.getAreas()) {
|
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()
|
areasForAdd.add(new QuotationModelPriceItemArea()
|
||||||
.setAreaId(ait.getAreaId())
|
.setAreaId(ai.getId())
|
||||||
.setPriceId(price.getId())
|
.setPriceId(price.getId())
|
||||||
.setPriceItemId(item.getId())
|
.setPriceItemId(item.getId())
|
||||||
.setAmount(ait.getAmount()));
|
.setAmount(ait.getAmount()));
|
||||||
|
|
@ -219,15 +224,20 @@ public class PriceConfigController extends ControllerBase {
|
||||||
itemsForUpdate.add(item);
|
itemsForUpdate.add(item);
|
||||||
QuotationModelPriceItem finalItem = item;
|
QuotationModelPriceItem finalItem = item;
|
||||||
for (ModelPriceSaveAreaRequest ait : sit.getAreas()) {
|
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()
|
QuotationModelPriceItemArea area = areas.stream()
|
||||||
.filter(it -> it.getPriceItemId().equals(finalItem.getId())
|
.filter(it -> it.getPriceItemId().equals(finalItem.getId())
|
||||||
&& it.getAreaId().equals(ait.getAreaId())
|
&& it.getAreaId().equals(ai.getId())
|
||||||
)
|
)
|
||||||
.findFirst()
|
.findFirst()
|
||||||
.orElse(null);
|
.orElse(null);
|
||||||
if (Objects.isNull(area)) {
|
if (Objects.isNull(area)) {
|
||||||
areasForAdd.add(new QuotationModelPriceItemArea()
|
areasForAdd.add(new QuotationModelPriceItemArea()
|
||||||
.setAreaId(ait.getAreaId())
|
.setAreaId(ai.getId())
|
||||||
.setPriceId(price.getId())
|
.setPriceId(price.getId())
|
||||||
.setPriceItemId(item.getId())
|
.setPriceItemId(item.getId())
|
||||||
.setAmount(ait.getAmount()));
|
.setAmount(ait.getAmount()));
|
||||||
|
|
@ -278,8 +288,13 @@ public class PriceConfigController extends ControllerBase {
|
||||||
.filter(area -> area.getPriceItemId().equals(dbItem.getId()))
|
.filter(area -> area.getPriceItemId().equals(dbItem.getId()))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
for (ModelPriceSaveAreaRequest ait : sit.getAreas()) {
|
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()
|
QuotationModelPriceItemArea area = areas.stream()
|
||||||
.filter(it -> it.getAreaId().equals(ait.getAreaId()))
|
.filter(it -> it.getAreaId().equals(ai.getId()))
|
||||||
.findFirst()
|
.findFirst()
|
||||||
.orElse(null);
|
.orElse(null);
|
||||||
if (Objects.nonNull(area)) {
|
if (Objects.nonNull(area)) {
|
||||||
|
|
@ -289,7 +304,7 @@ public class PriceConfigController extends ControllerBase {
|
||||||
areasForAdd.add(area);
|
areasForAdd.add(area);
|
||||||
} else {
|
} else {
|
||||||
areasForAdd.add(new QuotationModelPriceItemArea()
|
areasForAdd.add(new QuotationModelPriceItemArea()
|
||||||
.setAreaId(ait.getAreaId())
|
.setAreaId(ai.getId())
|
||||||
.setPriceId(price.getId())
|
.setPriceId(price.getId())
|
||||||
.setPriceItemId(dbItem.getId())
|
.setPriceItemId(dbItem.getId())
|
||||||
.setAmount(ait.getAmount()));
|
.setAmount(ait.getAmount()));
|
||||||
|
|
@ -305,8 +320,13 @@ public class PriceConfigController extends ControllerBase {
|
||||||
.setUpdateTime(LocalDateTime.now());
|
.setUpdateTime(LocalDateTime.now());
|
||||||
itemsForAdd.add(item);
|
itemsForAdd.add(item);
|
||||||
for (ModelPriceSaveAreaRequest ait : sit.getAreas()) {
|
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()
|
areasForAdd.add(new QuotationModelPriceItemArea()
|
||||||
.setAreaId(ait.getAreaId())
|
.setAreaId(ai.getId())
|
||||||
.setPriceId(price.getId())
|
.setPriceId(price.getId())
|
||||||
.setPriceItemId(item.getId())
|
.setPriceItemId(item.getId())
|
||||||
.setAmount(ait.getAmount()));
|
.setAmount(ait.getAmount()));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue