diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/ExpressController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/ExpressController.java index 698ec34fd..7a49f44ab 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/ExpressController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/ExpressController.java @@ -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> pageExpressFeeConfig(@Validated @RequestBody ExpressFeeConfigQueryVO vo) { + public R> pageExpressFeeConfig(@Validated @RequestBody + ExpressFeeConfigQueryVO vo) { ExpressFeeConfigQueryDTO queryDTO = BeanUtil.toBean(vo, ExpressFeeConfigQueryDTO.class); Page 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> showExpressFee() { + List configItems = expressService.listFeeConfig(new ExpressFeeConfigQueryDTO()); + Map> map = new HashMap<>(); + for (ExpressFeeConfigListItemDTO configItem : configItems) { + Map 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 vos = new ArrayList<>(map.size()); + for (Map.Entry> entry : map.entrySet()) { + ExpressFeeShowVO vo = new ExpressFeeShowVO(); + vo.setExpressName(entry.getKey()); + vo.setItems(new ArrayList<>(entry.getValue().values())); + } + return R.ok(vos); + } + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/express/ExpressFeeShowVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/express/ExpressFeeShowVO.java new file mode 100644 index 000000000..514baecb7 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/express/ExpressFeeShowVO.java @@ -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 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; + } +} diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/ExpressServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/ExpressServiceImpl.java index b859fa3a8..7b1d0fd79 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/ExpressServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/ExpressServiceImpl.java @@ -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)