Commit 0083d1240423338605ab8ec3ea03633d0f3d543c

Authored by YunaiV
1 parent 53e9be73

mall:review + mall:快递费用

yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/DeliveryExpressController.java
@@ -74,6 +74,7 @@ public class DeliveryExpressController { @@ -74,6 +74,7 @@ public class DeliveryExpressController {
74 return success(DeliveryExpressConvert.INSTANCE.convertPage(pageResult)); 74 return success(DeliveryExpressConvert.INSTANCE.convertPage(pageResult));
75 } 75 }
76 76
  77 + // TODO @jason:运费模版,可以去掉哈,没啥用;
77 @GetMapping("/export-excel") 78 @GetMapping("/export-excel")
78 @Operation(summary = "导出快递公司 Excel") 79 @Operation(summary = "导出快递公司 Excel")
79 @PreAuthorize("@ss.hasPermission('trade:delivery:express:export')") 80 @PreAuthorize("@ss.hasPermission('trade:delivery:express:export')")
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/delivery/DeliveryExpressTemplateConvert.java
1 package cn.iocoder.yudao.module.trade.convert.delivery; 1 package cn.iocoder.yudao.module.trade.convert.delivery;
2 2
3 -import java.util.*;  
4 -  
5 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
6 import cn.iocoder.yudao.framework.common.pojo.PageResult; 4 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 -  
8 import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.*; 5 import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.*;
9 import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressTemplateChargeDO; 6 import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressTemplateChargeDO;
10 import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressTemplateDO; 7 import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressTemplateDO;
@@ -12,6 +9,10 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressTemp @@ -12,6 +9,10 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressTemp
12 import org.mapstruct.Mapper; 9 import org.mapstruct.Mapper;
13 import org.mapstruct.factory.Mappers; 10 import org.mapstruct.factory.Mappers;
14 11
  12 +import java.util.ArrayList;
  13 +import java.util.Collections;
  14 +import java.util.List;
  15 +
15 /** 16 /**
16 * 快递运费模板 Convert 17 * 快递运费模板 Convert
17 * 18 *
@@ -22,6 +23,8 @@ public interface DeliveryExpressTemplateConvert { @@ -22,6 +23,8 @@ public interface DeliveryExpressTemplateConvert {
22 23
23 DeliveryExpressTemplateConvert INSTANCE = Mappers.getMapper(DeliveryExpressTemplateConvert.class); 24 DeliveryExpressTemplateConvert INSTANCE = Mappers.getMapper(DeliveryExpressTemplateConvert.class);
24 25
  26 + // ========== Template ==========
  27 +
25 DeliveryExpressTemplateDO convert(DeliveryExpressTemplateCreateReqVO bean); 28 DeliveryExpressTemplateDO convert(DeliveryExpressTemplateCreateReqVO bean);
26 29
27 DeliveryExpressTemplateDO convert(DeliveryExpressTemplateUpdateReqVO bean); 30 DeliveryExpressTemplateDO convert(DeliveryExpressTemplateUpdateReqVO bean);
@@ -36,32 +39,46 @@ public interface DeliveryExpressTemplateConvert { @@ -36,32 +39,46 @@ public interface DeliveryExpressTemplateConvert {
36 39
37 List<DeliveryExpressTemplateExcelVO> convertList02(List<DeliveryExpressTemplateDO> list); 40 List<DeliveryExpressTemplateExcelVO> convertList02(List<DeliveryExpressTemplateDO> list);
38 41
39 - DeliveryExpressTemplateChargeDO convertTemplateCharge(Long templateId, Integer chargeMode, ExpressTemplateChargeBaseVO vo);  
40 -  
41 - DeliveryExpressTemplateChargeDO convertTemplateCharge(ExpressTemplateChargeUpdateVO vo);  
42 -  
43 - DeliveryExpressTemplateFreeDO convertTemplateFree(Long templateId, ExpressTemplateFreeBaseVO vo); 42 + default DeliveryExpressTemplateRespVO convert(DeliveryExpressTemplateDO bean,
  43 + List<DeliveryExpressTemplateChargeDO> chargeList,
  44 + List<DeliveryExpressTemplateFreeDO> freeList){
  45 + DeliveryExpressTemplateRespVO respVO = convert2(bean);
  46 + respVO.setTemplateCharge(convertTemplateChargeList(chargeList));
  47 + respVO.setTemplateFree(convertTemplateFreeList(freeList));
  48 + return respVO;
  49 + }
44 50
45 - DeliveryExpressTemplateFreeDO convertTemplateFree(ExpressTemplateFreeUpdateVO vo); 51 + // ========== Template Charge ==========
46 52
47 - List<ExpressTemplateChargeBaseVO> convertTemplateChargeList(List<DeliveryExpressTemplateChargeDO> list); 53 + DeliveryExpressTemplateChargeDO convertTemplateCharge(Long templateId, Integer chargeMode, ExpressTemplateChargeBaseVO vo);
48 54
49 - List<ExpressTemplateFreeBaseVO> convertTemplateFreeList(List<DeliveryExpressTemplateFreeDO> list); 55 + DeliveryExpressTemplateChargeDO convertTemplateCharge(ExpressTemplateChargeUpdateVO vo);
50 56
51 - default List<DeliveryExpressTemplateChargeDO> convertTemplateChargeList(Long templateId, Integer chargeMode, List<ExpressTemplateChargeBaseVO> list){ 57 + default List<DeliveryExpressTemplateChargeDO> convertTemplateChargeList(Long templateId, Integer chargeMode, List<ExpressTemplateChargeBaseVO> list) {
  58 + // TODO @jason:可以使用 CollectionUtils.convertList,本质上就是 stream convert list
52 if(CollUtil.isEmpty(list)){ 59 if(CollUtil.isEmpty(list)){
53 return Collections.emptyList(); 60 return Collections.emptyList();
54 } 61 }
55 - List<DeliveryExpressTemplateChargeDO> templateChargeList = new ArrayList<>( list.size() ); 62 + List<DeliveryExpressTemplateChargeDO> templateChargeList = new ArrayList<>(list.size());
56 for (ExpressTemplateChargeBaseVO item : list) { 63 for (ExpressTemplateChargeBaseVO item : list) {
57 templateChargeList.add(convertTemplateCharge(templateId, chargeMode, item)); 64 templateChargeList.add(convertTemplateCharge(templateId, chargeMode, item));
58 } 65 }
59 return templateChargeList; 66 return templateChargeList;
60 } 67 }
61 68
  69 + // ========== Template Free ==========
  70 +
  71 + DeliveryExpressTemplateFreeDO convertTemplateFree(Long templateId, ExpressTemplateFreeBaseVO vo);
  72 +
  73 + DeliveryExpressTemplateFreeDO convertTemplateFree(ExpressTemplateFreeUpdateVO vo);
  74 +
  75 + List<ExpressTemplateChargeBaseVO> convertTemplateChargeList(List<DeliveryExpressTemplateChargeDO> list);
62 76
  77 + List<ExpressTemplateFreeBaseVO> convertTemplateFreeList(List<DeliveryExpressTemplateFreeDO> list);
63 78
  79 + // TODO @jason:, List,中间一个空格哈。代码的空格和空行要注意,嘿嘿~
64 default List<DeliveryExpressTemplateFreeDO> convertTemplateFreeList(Long templateId, List<ExpressTemplateFreeBaseVO> list) { 80 default List<DeliveryExpressTemplateFreeDO> convertTemplateFreeList(Long templateId, List<ExpressTemplateFreeBaseVO> list) {
  81 + // TODO @jason:可以使用 CollectionUtils.convertList,本质上就是 stream convert list
65 if (CollUtil.isEmpty(list)) { 82 if (CollUtil.isEmpty(list)) {
66 return Collections.emptyList(); 83 return Collections.emptyList();
67 } 84 }
@@ -72,12 +89,4 @@ public interface DeliveryExpressTemplateConvert { @@ -72,12 +89,4 @@ public interface DeliveryExpressTemplateConvert {
72 return templateFreeList; 89 return templateFreeList;
73 } 90 }
74 91
75 - default DeliveryExpressTemplateRespVO convert(DeliveryExpressTemplateDO bean,  
76 - List<DeliveryExpressTemplateChargeDO> chargeList,  
77 - List<DeliveryExpressTemplateFreeDO> freeList){  
78 - DeliveryExpressTemplateRespVO respVO = convert2(bean);  
79 - respVO.setTemplateCharge(convertTemplateChargeList(chargeList));  
80 - respVO.setTemplateFree(convertTemplateFreeList(freeList));  
81 - return respVO;  
82 - }  
83 } 92 }
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/delivery/DeliveryExpressTemplateMapper.java
@@ -3,11 +3,9 @@ package cn.iocoder.yudao.module.trade.dal.mysql.delivery; @@ -3,11 +3,9 @@ package cn.iocoder.yudao.module.trade.dal.mysql.delivery;
3 3
4 import cn.iocoder.yudao.framework.common.pojo.PageResult; 4 import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; 5 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
6 -  
7 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; 6 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
8 import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.DeliveryExpressTemplateExportReqVO; 7 import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.DeliveryExpressTemplateExportReqVO;
9 import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.DeliveryExpressTemplatePageReqVO; 8 import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.DeliveryExpressTemplatePageReqVO;
10 -import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressDO;  
11 import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressTemplateDO; 9 import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressTemplateDO;
12 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 10 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
13 import org.apache.ibatis.annotations.Mapper; 11 import org.apache.ibatis.annotations.Mapper;
@@ -33,8 +31,10 @@ public interface DeliveryExpressTemplateMapper extends BaseMapperX&lt;DeliveryExpre @@ -33,8 +31,10 @@ public interface DeliveryExpressTemplateMapper extends BaseMapperX&lt;DeliveryExpre
33 .orderByAsc(DeliveryExpressTemplateDO::getSort)); 31 .orderByAsc(DeliveryExpressTemplateDO::getSort));
34 } 32 }
35 33
  34 + // TODO @jason:可以用 selectOne(DeliveryExpressTemplateDO::getName, name),常用的我封装了哈。简洁一点~
36 default DeliveryExpressTemplateDO selectByName(String name) { 35 default DeliveryExpressTemplateDO selectByName(String name) {
37 return selectOne(new LambdaQueryWrapper<DeliveryExpressTemplateDO>() 36 return selectOne(new LambdaQueryWrapper<DeliveryExpressTemplateDO>()
38 .eq(DeliveryExpressTemplateDO::getName, name)); 37 .eq(DeliveryExpressTemplateDO::getName, name));
39 } 38 }
  39 +
40 } 40 }
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/delivery/DeliveryExpressTemplateServiceImpl.java
@@ -36,6 +36,7 @@ public class DeliveryExpressTemplateServiceImpl implements DeliveryExpressTempla @@ -36,6 +36,7 @@ public class DeliveryExpressTemplateServiceImpl implements DeliveryExpressTempla
36 private DeliveryExpressTemplateChargeMapper expressTemplateChargeMapper; 36 private DeliveryExpressTemplateChargeMapper expressTemplateChargeMapper;
37 @Resource 37 @Resource
38 private DeliveryExpressTemplateFreeMapper expressTemplateFreeMapper; 38 private DeliveryExpressTemplateFreeMapper expressTemplateFreeMapper;
  39 + // TODO @jason:应该不用 BatchInsertMapper 拉,直接走 expressTemplateChargeMapper.insertBatch
39 @Resource 40 @Resource
40 private DeliveryExpressTemplateChargeMapper.BatchInsertMapper expressTemplateChargeBatchMapper; 41 private DeliveryExpressTemplateChargeMapper.BatchInsertMapper expressTemplateChargeBatchMapper;
41 @Resource 42 @Resource
@@ -44,12 +45,15 @@ public class DeliveryExpressTemplateServiceImpl implements DeliveryExpressTempla @@ -44,12 +45,15 @@ public class DeliveryExpressTemplateServiceImpl implements DeliveryExpressTempla
44 @Override 45 @Override
45 @Transactional(rollbackFor = Exception.class) 46 @Transactional(rollbackFor = Exception.class)
46 public Long createDeliveryExpressTemplate(DeliveryExpressTemplateCreateReqVO createReqVO) { 47 public Long createDeliveryExpressTemplate(DeliveryExpressTemplateCreateReqVO createReqVO) {
  48 + // TODO @jason:中英文之间,要有空格哈。例如说, // 校验模板名是否唯一
47 //校验模板名是否唯一 49 //校验模板名是否唯一
48 validateTemplateNameUnique(createReqVO.getName(), null); 50 validateTemplateNameUnique(createReqVO.getName(), null);
  51 +
49 // 插入 52 // 插入
50 DeliveryExpressTemplateDO deliveryExpressTemplate = INSTANCE.convert(createReqVO); 53 DeliveryExpressTemplateDO deliveryExpressTemplate = INSTANCE.convert(createReqVO);
51 expressTemplateMapper.insert(deliveryExpressTemplate); 54 expressTemplateMapper.insert(deliveryExpressTemplate);
52 //插入运费模板计费表 55 //插入运费模板计费表
  56 + // TODO @jason:if (,中间要有空格
53 if(CollUtil.isNotEmpty(createReqVO.getTemplateCharge())) { 57 if(CollUtil.isNotEmpty(createReqVO.getTemplateCharge())) {
54 expressTemplateChargeBatchMapper.saveBatch( 58 expressTemplateChargeBatchMapper.saveBatch(
55 INSTANCE.convertTemplateChargeList(deliveryExpressTemplate.getId(), createReqVO.getChargeMode(), createReqVO.getTemplateCharge()) 59 INSTANCE.convertTemplateChargeList(deliveryExpressTemplate.getId(), createReqVO.getChargeMode(), createReqVO.getTemplateCharge())
@@ -121,7 +125,7 @@ public class DeliveryExpressTemplateServiceImpl implements DeliveryExpressTempla @@ -121,7 +125,7 @@ public class DeliveryExpressTemplateServiceImpl implements DeliveryExpressTempla
121 //更新运费区域列表 125 //更新运费区域列表
122 List<DeliveryExpressTemplateChargeDO> updateList = new ArrayList<>(newChargeList.size()); 126 List<DeliveryExpressTemplateChargeDO> updateList = new ArrayList<>(newChargeList.size());
123 for (ExpressTemplateChargeUpdateVO item : newChargeList) { 127 for (ExpressTemplateChargeUpdateVO item : newChargeList) {
124 - if (Objects.nonNull(item.getId())) { 128 + if (Objects.nonNull(item.getId())) { // TODO @jason:null 的判断,还是用 item.getId() != null 好一点。一般数组用方法,主要考虑 null + length = 0;
125 //计费模式以主表为准 129 //计费模式以主表为准
126 item.setChargeMode(updateReqVO.getChargeMode()); 130 item.setChargeMode(updateReqVO.getChargeMode());
127 updateList.add(INSTANCE.convertTemplateCharge(item)); 131 updateList.add(INSTANCE.convertTemplateCharge(item));
@@ -131,7 +135,7 @@ public class DeliveryExpressTemplateServiceImpl implements DeliveryExpressTempla @@ -131,7 +135,7 @@ public class DeliveryExpressTemplateServiceImpl implements DeliveryExpressTempla
131 addList.add(INSTANCE.convertTemplateCharge(item)); 135 addList.add(INSTANCE.convertTemplateCharge(item));
132 } 136 }
133 } 137 }
134 - //删除的运费区域id 138 + //删除的运费区域id TODO @jason:这块放到删除部分的那块逻辑会好点(149 - 152 行),主要变量要贴相应的逻辑近一点哈。
135 Set<Long> deleteChargeIds = CollectionUtils.convertSet(oldChargeList, DeliveryExpressTemplateChargeDO::getId); 139 Set<Long> deleteChargeIds = CollectionUtils.convertSet(oldChargeList, DeliveryExpressTemplateChargeDO::getId);
136 deleteChargeIds.removeAll(CollectionUtils.convertSet(updateList, DeliveryExpressTemplateChargeDO::getId)); 140 deleteChargeIds.removeAll(CollectionUtils.convertSet(updateList, DeliveryExpressTemplateChargeDO::getId));
137 //新增 141 //新增
@@ -153,6 +157,7 @@ public class DeliveryExpressTemplateServiceImpl implements DeliveryExpressTempla @@ -153,6 +157,7 @@ public class DeliveryExpressTemplateServiceImpl implements DeliveryExpressTempla
153 public void deleteDeliveryExpressTemplate(Long id) { 157 public void deleteDeliveryExpressTemplate(Long id) {
154 // 校验存在 158 // 校验存在
155 validateDeliveryExpressTemplateExists(id); 159 validateDeliveryExpressTemplateExists(id);
  160 +
156 // 删除主表 161 // 删除主表
157 expressTemplateMapper.deleteById(id); 162 expressTemplateMapper.deleteById(id);
158 // 删除运费从表 163 // 删除运费从表
@@ -162,9 +167,9 @@ public class DeliveryExpressTemplateServiceImpl implements DeliveryExpressTempla @@ -162,9 +167,9 @@ public class DeliveryExpressTemplateServiceImpl implements DeliveryExpressTempla
162 } 167 }
163 168
164 /** 169 /**
165 - * 校验运费模板名是否唯一 170 + * 校验运费模板名是否唯一 // TODO @jason:方法注释,和参数,要空一行。
166 * @param name 模板名称 171 * @param name 模板名称
167 - * @param id 运费模板编号, 可以为null 172 + * @param id 运费模板编号, 可以为null // TODO @jason:中英文之间,要空一行;其它地方也看看哈
168 */ 173 */
169 private void validateTemplateNameUnique(String name, Long id) { 174 private void validateTemplateNameUnique(String name, Long id) {
170 DeliveryExpressTemplateDO template = expressTemplateMapper.selectByName(name); 175 DeliveryExpressTemplateDO template = expressTemplateMapper.selectByName(name);
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/ip/AreaController.java
@@ -15,7 +15,6 @@ import org.springframework.validation.annotation.Validated; @@ -15,7 +15,6 @@ import org.springframework.validation.annotation.Validated;
15 import org.springframework.web.bind.annotation.*; 15 import org.springframework.web.bind.annotation.*;
16 16
17 import java.util.ArrayList; 17 import java.util.ArrayList;
18 -import java.util.Arrays;  
19 import java.util.List; 18 import java.util.List;
20 import java.util.Set; 19 import java.util.Set;
21 20
@@ -35,6 +34,8 @@ public class AreaController { @@ -35,6 +34,8 @@ public class AreaController {
35 return success(AreaConvert.INSTANCE.convertList(area.getChildren())); 34 return success(AreaConvert.INSTANCE.convertList(area.getChildren()));
36 } 35 }
37 36
  37 + // TODO @jason:1)url 使用中划线分隔哈,然后可以改成 children;2)id 需要添加 @RequestParam,因为可能会混淆编译;
  38 + // 3) swagger 注解要写下哈;
38 @GetMapping("/getChildrenArea") 39 @GetMapping("/getChildrenArea")
39 @Operation(summary = "获得地区的下级区域") 40 @Operation(summary = "获得地区的下级区域")
40 public CommonResult<List<LazyAreaNodeRespVO>> getChildrenArea(Integer id) { 41 public CommonResult<List<LazyAreaNodeRespVO>> getChildrenArea(Integer id) {
@@ -43,8 +44,10 @@ public class AreaController { @@ -43,8 +44,10 @@ public class AreaController {
43 return success(AreaConvert.INSTANCE.convertList2(area.getChildren())); 44 return success(AreaConvert.INSTANCE.convertList2(area.getChildren()));
44 } 45 }
45 46
  47 + // TODO @jason:1)读请求,使用 get 哈。2)然后参数不应该使用 @RequestBody;3)areaIds 改成 ids 更合适;
  48 + // 4)方法改成 getAreaChildrenList 获得子节点们;5)url 可以已改成 children-list
46 @PostMapping("/list") 49 @PostMapping("/list")
47 - @Operation(summary = "通过区域ids获得地区列表") 50 + @Operation(summary = "通过区域 ids 获得地区列表")
48 public CommonResult<List<LazyAreaNodeRespVO>> list(@RequestBody Set<Integer> areaIds) { 51 public CommonResult<List<LazyAreaNodeRespVO>> list(@RequestBody Set<Integer> areaIds) {
49 List<Area> areaList = new ArrayList<>(areaIds.size()); 52 List<Area> areaList = new ArrayList<>(areaIds.size());
50 for (Integer areaId : areaIds) { 53 for (Integer areaId : areaIds) {
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/ip/vo/LazyAreaNodeRespVO.java
@@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.controller.admin.ip.vo; @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.controller.admin.ip.vo;
3 import io.swagger.v3.oas.annotations.media.Schema; 3 import io.swagger.v3.oas.annotations.media.Schema;
4 import lombok.Data; 4 import lombok.Data;
5 5
  6 +// TODO @jason:1)VO 不添加注释作者哈。2)是不是改成 AreaNodeSimpleRespVO,它其实是返回一个简洁的地区,懒加载只是它的使用场景;
6 /** 7 /**
7 * @author jason 8 * @author jason
8 */ 9 */
@@ -16,6 +17,8 @@ public class LazyAreaNodeRespVO { @@ -16,6 +17,8 @@ public class LazyAreaNodeRespVO {
16 @Schema(description = "名字", required = true, example = "北京") 17 @Schema(description = "名字", required = true, example = "北京")
17 private String name; 18 private String name;
18 19
  20 + // TODO @jason:1)不设置默认值,交给业务逻辑那写入;2)这个字段必须返回哇?
19 @Schema(description = "是否叶子节点", required = true, example = "false") 21 @Schema(description = "是否叶子节点", required = true, example = "false")
20 private Boolean leaf = Boolean.FALSE; 22 private Boolean leaf = Boolean.FALSE;
  23 +
21 } 24 }