快递费配置

pull/1121/head
梁宇奇 2025-06-12 00:32:02 +08:00
parent bf3e408059
commit 82e3eab857
3 changed files with 79 additions and 4 deletions

View File

@ -18,9 +18,7 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -110,11 +108,37 @@ public class ExpressController extends XktBaseController {
@ApiOperation(value = "快递费配置分页查询")
@PostMapping("/fee-config/page")
public R<PageVO<ExpressFeeConfigListItemVO>> pageExpressFeeConfig(@Validated @RequestBody ExpressFeeConfigQueryVO vo) {
public R<PageVO<ExpressFeeConfigListItemVO>> pageExpressFeeConfig(@Validated @RequestBody
ExpressFeeConfigQueryVO vo) {
ExpressFeeConfigQueryDTO queryDTO = BeanUtil.toBean(vo, ExpressFeeConfigQueryDTO.class);
Page<ExpressFeeConfigListItemDTO> pageDTO = PageHelper.startPage(vo.getPageNum(), vo.getPageSize());
expressService.listFeeConfig(queryDTO);
return success(PageVO.of(pageDTO, ExpressFeeConfigListItemVO.class));
}
@ApiOperation(value = "快递费展示")
@GetMapping(value = "/fee/show")
public R<List<ExpressFeeShowVO>> showExpressFee() {
List<ExpressFeeConfigListItemDTO> configItems = expressService.listFeeConfig(new ExpressFeeConfigQueryDTO());
Map<String, Map<String, ExpressFeeShowVO.Item>> map = new HashMap<>();
for (ExpressFeeConfigListItemDTO configItem : configItems) {
Map<String, ExpressFeeShowVO.Item> itemMap = map.computeIfAbsent(configItem.getExpressName(),
k -> new HashMap<>());
String ik = configItem.getFirstItemAmount() + "-" + configItem.getNextItemAmount();
ExpressFeeShowVO.Item item = itemMap.computeIfAbsent(ik,
k -> new ExpressFeeShowVO.Item(configItem.getRegionName(), 1,
configItem.getFirstItemAmount(), 1, configItem.getNextItemAmount()));
if (!item.getAres().equals(configItem.getRegionName())) {
item.setAres(item.getAres() + "," + configItem.getRegionName());
}
}
List<ExpressFeeShowVO> vos = new ArrayList<>(map.size());
for (Map.Entry<String, Map<String, ExpressFeeShowVO.Item>> entry : map.entrySet()) {
ExpressFeeShowVO vo = new ExpressFeeShowVO();
vo.setExpressName(entry.getKey());
vo.setItems(new ArrayList<>(entry.getValue().values()));
}
return R.ok(vos);
}
}

View File

@ -0,0 +1,47 @@
package com.ruoyi.web.controller.xkt.vo.express;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.List;
/**
* @author liangyq
* @date 2025-06-11
*/
@ApiModel
@Data
public class ExpressFeeShowVO {
@ApiModelProperty(value = "快递名称")
private String expressName;
@ApiModelProperty(value = "列表项")
private List<Item> items;
@ApiModel
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class Item {
@ApiModelProperty(value = "可配送区域")
private String ares;
@ApiModelProperty(value = "首件")
private Integer firstItemCount;
@ApiModelProperty(value = "运费")
private BigDecimal firstItemAmount;
@ApiModelProperty(value = "续件")
private Integer nextItemCount;
@ApiModelProperty(value = "续费")
private BigDecimal nextItemAmount;
}
}

View File

@ -344,6 +344,8 @@ public class ExpressServiceImpl implements IExpressService {
Assert.notEmpty(editDTO.getRegionCode());
Assert.notNull(editDTO.getFirstItemAmount());
Assert.notNull(editDTO.getNextItemAmount());
Assert.isTrue(editDTO.getFirstItemAmount().compareTo(editDTO.getNextItemAmount()) == 0,
"首件运费和续件续费必须相等");
boolean exists = expressFeeConfigMapper.exists(Wrappers.lambdaQuery(ExpressFeeConfig.class)
.eq(ExpressFeeConfig::getExpressId, editDTO.getExpressId())
.eq(ExpressFeeConfig::getRegionCode, editDTO.getRegionCode()));
@ -363,6 +365,8 @@ public class ExpressServiceImpl implements IExpressService {
Assert.notEmpty(editDTO.getRegionCode());
Assert.notNull(editDTO.getFirstItemAmount());
Assert.notNull(editDTO.getNextItemAmount());
Assert.isTrue(editDTO.getFirstItemAmount().compareTo(editDTO.getNextItemAmount()) == 0,
"首件运费和续件续费必须相等");
ExpressFeeConfig config = expressFeeConfigMapper.selectById(editDTO.getId());
Assert.notNull(config);
boolean exists = expressFeeConfigMapper.exists(Wrappers.lambdaQuery(ExpressFeeConfig.class)