Commit fdb10aeced87df8fdb8d31cb4812898a4a499b48
1 parent
6f4c04d9
trade:优化运费模版的实现
Showing
10 changed files
with
68 additions
and
182 deletions
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/expresstemplate/ExpressTemplateChargeBaseVO.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/expresstemplate/DeliveryExpressTemplateChargeBaseVO.java
| @@ -11,7 +11,10 @@ import java.util.List; | @@ -11,7 +11,10 @@ import java.util.List; | ||
| 11 | * 快递运费模板运费设置 Base VO,提供给添加运费模板使用 | 11 | * 快递运费模板运费设置 Base VO,提供给添加运费模板使用 |
| 12 | */ | 12 | */ |
| 13 | @Data | 13 | @Data |
| 14 | -public class ExpressTemplateChargeBaseVO { | 14 | +public class DeliveryExpressTemplateChargeBaseVO { |
| 15 | + | ||
| 16 | + @Schema(description = "编号", example = "6592", hidden = true) // 由于想简单一点,复用这个 VO 在更新操作,所以 hidden 为 false | ||
| 17 | + private Long id; | ||
| 15 | 18 | ||
| 16 | @Schema(description = "区域编号列表", requiredMode = Schema.RequiredMode.REQUIRED, example = "[1,120000]") | 19 | @Schema(description = "区域编号列表", requiredMode = Schema.RequiredMode.REQUIRED, example = "[1,120000]") |
| 17 | @NotEmpty(message = "区域编号列表不能为空") | 20 | @NotEmpty(message = "区域编号列表不能为空") |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/expresstemplate/DeliveryExpressTemplateCreateReqVO.java
| @@ -6,7 +6,6 @@ import lombok.EqualsAndHashCode; | @@ -6,7 +6,6 @@ import lombok.EqualsAndHashCode; | ||
| 6 | import lombok.ToString; | 6 | import lombok.ToString; |
| 7 | 7 | ||
| 8 | import javax.validation.Valid; | 8 | import javax.validation.Valid; |
| 9 | -import java.util.Collections; | ||
| 10 | import java.util.List; | 9 | import java.util.List; |
| 11 | 10 | ||
| 12 | @Schema(description = "管理后台 - 快递运费模板创建 Request VO") | 11 | @Schema(description = "管理后台 - 快递运费模板创建 Request VO") |
| @@ -17,10 +16,10 @@ public class DeliveryExpressTemplateCreateReqVO extends DeliveryExpressTemplateB | @@ -17,10 +16,10 @@ public class DeliveryExpressTemplateCreateReqVO extends DeliveryExpressTemplateB | ||
| 17 | 16 | ||
| 18 | @Schema(description = "区域运费列表") | 17 | @Schema(description = "区域运费列表") |
| 19 | @Valid | 18 | @Valid |
| 20 | - private List<ExpressTemplateChargeBaseVO> templateCharge; | 19 | + private List<DeliveryExpressTemplateChargeBaseVO> charges; |
| 21 | 20 | ||
| 22 | @Schema(description = "包邮区域列表") | 21 | @Schema(description = "包邮区域列表") |
| 23 | @Valid | 22 | @Valid |
| 24 | - private List<ExpressTemplateFreeBaseVO> templateFree; | 23 | + private List<DeliveryExpressTemplateFreeBaseVO> frees; |
| 25 | 24 | ||
| 26 | } | 25 | } |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/expresstemplate/DeliveryExpressTemplateDetailRespVO.java
| @@ -17,9 +17,9 @@ public class DeliveryExpressTemplateDetailRespVO extends DeliveryExpressTemplate | @@ -17,9 +17,9 @@ public class DeliveryExpressTemplateDetailRespVO extends DeliveryExpressTemplate | ||
| 17 | private Long id; | 17 | private Long id; |
| 18 | 18 | ||
| 19 | @Schema(description = "运费模板运费设置", requiredMode = Schema.RequiredMode.REQUIRED) | 19 | @Schema(description = "运费模板运费设置", requiredMode = Schema.RequiredMode.REQUIRED) |
| 20 | - private List<ExpressTemplateChargeBaseVO> templateCharge; | 20 | + private List<DeliveryExpressTemplateChargeBaseVO> charges; |
| 21 | 21 | ||
| 22 | @Schema(description = "运费模板包邮区域", requiredMode = Schema.RequiredMode.REQUIRED) | 22 | @Schema(description = "运费模板包邮区域", requiredMode = Schema.RequiredMode.REQUIRED) |
| 23 | - private List<ExpressTemplateFreeBaseVO> templateFree; | 23 | + private List<DeliveryExpressTemplateFreeBaseVO> frees; |
| 24 | 24 | ||
| 25 | } | 25 | } |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/expresstemplate/ExpressTemplateFreeBaseVO.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/expresstemplate/DeliveryExpressTemplateFreeBaseVO.java
| @@ -11,7 +11,7 @@ import java.util.List; | @@ -11,7 +11,7 @@ import java.util.List; | ||
| 11 | * 快递运费模板包邮 Base VO,提供给添加运费模板使用 | 11 | * 快递运费模板包邮 Base VO,提供给添加运费模板使用 |
| 12 | */ | 12 | */ |
| 13 | @Data | 13 | @Data |
| 14 | -public class ExpressTemplateFreeBaseVO { | 14 | +public class DeliveryExpressTemplateFreeBaseVO { |
| 15 | 15 | ||
| 16 | @Schema(description = "区域编号列表", requiredMode = Schema.RequiredMode.REQUIRED, example = "[1,120000]") | 16 | @Schema(description = "区域编号列表", requiredMode = Schema.RequiredMode.REQUIRED, example = "[1,120000]") |
| 17 | @NotEmpty(message = "区域编号列表不能为空") | 17 | @NotEmpty(message = "区域编号列表不能为空") |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/expresstemplate/DeliveryExpressTemplateUpdateReqVO.java
| @@ -21,36 +21,10 @@ public class DeliveryExpressTemplateUpdateReqVO extends DeliveryExpressTemplateB | @@ -21,36 +21,10 @@ public class DeliveryExpressTemplateUpdateReqVO extends DeliveryExpressTemplateB | ||
| 21 | 21 | ||
| 22 | @Schema(description = "区域运费列表") | 22 | @Schema(description = "区域运费列表") |
| 23 | @Valid | 23 | @Valid |
| 24 | - private List<ExpressTemplateChargeUpdateVO> templateCharge; | 24 | + private List<DeliveryExpressTemplateChargeBaseVO> charges; |
| 25 | 25 | ||
| 26 | @Schema(description = "包邮区域列表") | 26 | @Schema(description = "包邮区域列表") |
| 27 | @Valid | 27 | @Valid |
| 28 | - private List<ExpressTemplateFreeUpdateVO> templateFree; | 28 | + private List<DeliveryExpressTemplateFreeBaseVO> frees; |
| 29 | 29 | ||
| 30 | - @Schema(description = "管理后台 - 快递运费模板区域运费更新 Request VO") | ||
| 31 | - @Data | ||
| 32 | - public static class ExpressTemplateChargeUpdateVO extends ExpressTemplateChargeBaseVO { | ||
| 33 | - | ||
| 34 | - @Schema(description = "编号", example = "6592") | ||
| 35 | - private Long id; | ||
| 36 | - | ||
| 37 | - // TODO @jason:这几个字段,应该不通过前端传递,而是后端查询后去赋值的 | ||
| 38 | - @Schema(description = "配送模板编号", example = "1") | ||
| 39 | - private Long templateId; | ||
| 40 | - | ||
| 41 | - @Schema(description = "配送计费方式", example = "1") | ||
| 42 | - private Integer chargeMode; | ||
| 43 | - | ||
| 44 | - } | ||
| 45 | - | ||
| 46 | - @Schema(description = "管理后台 - 快递运费模板包邮区域更新 Request VO") | ||
| 47 | - @Data | ||
| 48 | - public static class ExpressTemplateFreeUpdateVO extends ExpressTemplateFreeBaseVO { | ||
| 49 | - | ||
| 50 | - @Schema(description = "编号", example = "6592") | ||
| 51 | - private Long id; | ||
| 52 | - | ||
| 53 | - @Schema(description = "配送模板编号", example = "1") | ||
| 54 | - private Long templateId; | ||
| 55 | - } | ||
| 56 | } | 30 | } |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/delivery/DeliveryExpressTemplateConvert.java
| @@ -42,36 +42,32 @@ public interface DeliveryExpressTemplateConvert { | @@ -42,36 +42,32 @@ public interface DeliveryExpressTemplateConvert { | ||
| 42 | List<DeliveryExpressTemplateChargeDO> chargeList, | 42 | List<DeliveryExpressTemplateChargeDO> chargeList, |
| 43 | List<DeliveryExpressTemplateFreeDO> freeList) { | 43 | List<DeliveryExpressTemplateFreeDO> freeList) { |
| 44 | DeliveryExpressTemplateDetailRespVO respVO = convert2(bean); | 44 | DeliveryExpressTemplateDetailRespVO respVO = convert2(bean); |
| 45 | - respVO.setTemplateCharge(convertTemplateChargeList(chargeList)); | ||
| 46 | - respVO.setTemplateFree(convertTemplateFreeList(freeList)); | 45 | + respVO.setCharges(convertTemplateChargeList(chargeList)); |
| 46 | + respVO.setFrees(convertTemplateFreeList(freeList)); | ||
| 47 | return respVO; | 47 | return respVO; |
| 48 | } | 48 | } |
| 49 | 49 | ||
| 50 | // ========== Template Charge ========== | 50 | // ========== Template Charge ========== |
| 51 | 51 | ||
| 52 | - DeliveryExpressTemplateChargeDO convertTemplateCharge(Long templateId, Integer chargeMode, ExpressTemplateChargeBaseVO vo); | ||
| 53 | - | ||
| 54 | - DeliveryExpressTemplateChargeDO convertTemplateCharge(DeliveryExpressTemplateUpdateReqVO.ExpressTemplateChargeUpdateVO vo); | 52 | + DeliveryExpressTemplateChargeDO convertTemplateCharge(Long templateId, Integer chargeMode, DeliveryExpressTemplateChargeBaseVO vo); |
| 55 | 53 | ||
| 56 | DeliveryExpressTemplateRespBO.Charge convertTemplateCharge(DeliveryExpressTemplateChargeDO bean); | 54 | DeliveryExpressTemplateRespBO.Charge convertTemplateCharge(DeliveryExpressTemplateChargeDO bean); |
| 57 | 55 | ||
| 58 | - default List<DeliveryExpressTemplateChargeDO> convertTemplateChargeList(Long templateId, Integer chargeMode, List<ExpressTemplateChargeBaseVO> list) { | 56 | + default List<DeliveryExpressTemplateChargeDO> convertTemplateChargeList(Long templateId, Integer chargeMode, List<DeliveryExpressTemplateChargeBaseVO> list) { |
| 59 | return CollectionUtils.convertList(list, vo -> convertTemplateCharge(templateId, chargeMode, vo)); | 57 | return CollectionUtils.convertList(list, vo -> convertTemplateCharge(templateId, chargeMode, vo)); |
| 60 | } | 58 | } |
| 61 | 59 | ||
| 62 | // ========== Template Free ========== | 60 | // ========== Template Free ========== |
| 63 | 61 | ||
| 64 | - DeliveryExpressTemplateFreeDO convertTemplateFree(Long templateId, ExpressTemplateFreeBaseVO vo); | ||
| 65 | - | ||
| 66 | - DeliveryExpressTemplateFreeDO convertTemplateFree(DeliveryExpressTemplateUpdateReqVO.ExpressTemplateFreeUpdateVO vo); | 62 | + DeliveryExpressTemplateFreeDO convertTemplateFree(Long templateId, DeliveryExpressTemplateFreeBaseVO vo); |
| 67 | 63 | ||
| 68 | DeliveryExpressTemplateRespBO.Free convertTemplateFree(DeliveryExpressTemplateFreeDO bean); | 64 | DeliveryExpressTemplateRespBO.Free convertTemplateFree(DeliveryExpressTemplateFreeDO bean); |
| 69 | 65 | ||
| 70 | - List<ExpressTemplateChargeBaseVO> convertTemplateChargeList(List<DeliveryExpressTemplateChargeDO> list); | 66 | + List<DeliveryExpressTemplateChargeBaseVO> convertTemplateChargeList(List<DeliveryExpressTemplateChargeDO> list); |
| 71 | 67 | ||
| 72 | - List<ExpressTemplateFreeBaseVO> convertTemplateFreeList(List<DeliveryExpressTemplateFreeDO> list); | 68 | + List<DeliveryExpressTemplateFreeBaseVO> convertTemplateFreeList(List<DeliveryExpressTemplateFreeDO> list); |
| 73 | 69 | ||
| 74 | - default List<DeliveryExpressTemplateFreeDO> convertTemplateFreeList(Long templateId, List<ExpressTemplateFreeBaseVO> list) { | 70 | + default List<DeliveryExpressTemplateFreeDO> convertTemplateFreeList(Long templateId, List<DeliveryExpressTemplateFreeBaseVO> list) { |
| 75 | return CollectionUtils.convertList(list, vo -> convertTemplateFree(templateId, vo)); | 71 | return CollectionUtils.convertList(list, vo -> convertTemplateFree(templateId, vo)); |
| 76 | } | 72 | } |
| 77 | 73 | ||
| @@ -93,4 +89,5 @@ public interface DeliveryExpressTemplateConvert { | @@ -93,4 +89,5 @@ public interface DeliveryExpressTemplateConvert { | ||
| 93 | }); | 89 | }); |
| 94 | return result; | 90 | return result; |
| 95 | } | 91 | } |
| 92 | + | ||
| 96 | } | 93 | } |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/delivery/DeliveryExpressTemplateServiceImpl.java
| @@ -2,11 +2,10 @@ package cn.iocoder.yudao.module.trade.service.delivery; | @@ -2,11 +2,10 @@ package cn.iocoder.yudao.module.trade.service.delivery; | ||
| 2 | 2 | ||
| 3 | import cn.hutool.core.collection.CollUtil; | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | import cn.hutool.core.lang.Assert; | 4 | import cn.hutool.core.lang.Assert; |
| 5 | +import cn.hutool.core.util.ObjectUtil; | ||
| 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 6 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 6 | -import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.expresstemplate.DeliveryExpressTemplateCreateReqVO; | ||
| 7 | -import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.expresstemplate.DeliveryExpressTemplateDetailRespVO; | ||
| 8 | -import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.expresstemplate.DeliveryExpressTemplatePageReqVO; | ||
| 9 | -import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.expresstemplate.DeliveryExpressTemplateUpdateReqVO; | 7 | +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| 8 | +import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.expresstemplate.*; | ||
| 10 | import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressTemplateChargeDO; | 9 | import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressTemplateChargeDO; |
| 11 | import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressTemplateDO; | 10 | import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressTemplateDO; |
| 12 | import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressTemplateFreeDO; | 11 | import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressTemplateFreeDO; |
| @@ -50,21 +49,21 @@ public class DeliveryExpressTemplateServiceImpl implements DeliveryExpressTempla | @@ -50,21 +49,21 @@ public class DeliveryExpressTemplateServiceImpl implements DeliveryExpressTempla | ||
| 50 | validateTemplateNameUnique(createReqVO.getName(), null); | 49 | validateTemplateNameUnique(createReqVO.getName(), null); |
| 51 | 50 | ||
| 52 | // 插入 | 51 | // 插入 |
| 53 | - DeliveryExpressTemplateDO deliveryExpressTemplate = INSTANCE.convert(createReqVO); | ||
| 54 | - expressTemplateMapper.insert(deliveryExpressTemplate); | 52 | + DeliveryExpressTemplateDO template = INSTANCE.convert(createReqVO); |
| 53 | + expressTemplateMapper.insert(template); | ||
| 55 | // 插入运费模板计费表 | 54 | // 插入运费模板计费表 |
| 56 | - if (CollUtil.isNotEmpty(createReqVO.getTemplateCharge())) { | 55 | + if (CollUtil.isNotEmpty(createReqVO.getCharges())) { |
| 57 | expressTemplateChargeMapper.insertBatch( | 56 | expressTemplateChargeMapper.insertBatch( |
| 58 | - INSTANCE.convertTemplateChargeList(deliveryExpressTemplate.getId(), createReqVO.getChargeMode(), createReqVO.getTemplateCharge()) | 57 | + INSTANCE.convertTemplateChargeList(template.getId(), createReqVO.getChargeMode(), createReqVO.getCharges()) |
| 59 | ); | 58 | ); |
| 60 | } | 59 | } |
| 61 | // 插入运费模板包邮表 | 60 | // 插入运费模板包邮表 |
| 62 | - if (CollUtil.isNotEmpty(createReqVO.getTemplateFree())) { | 61 | + if (CollUtil.isNotEmpty(createReqVO.getFrees())) { |
| 63 | expressTemplateFreeMapper.insertBatch( | 62 | expressTemplateFreeMapper.insertBatch( |
| 64 | - INSTANCE.convertTemplateFreeList(deliveryExpressTemplate.getId(), createReqVO.getTemplateFree()) | 63 | + INSTANCE.convertTemplateFreeList(template.getId(), createReqVO.getFrees()) |
| 65 | ); | 64 | ); |
| 66 | } | 65 | } |
| 67 | - return deliveryExpressTemplate.getId(); | 66 | + return template.getId(); |
| 68 | } | 67 | } |
| 69 | 68 | ||
| 70 | @Override | 69 | @Override |
| @@ -76,76 +75,54 @@ public class DeliveryExpressTemplateServiceImpl implements DeliveryExpressTempla | @@ -76,76 +75,54 @@ public class DeliveryExpressTemplateServiceImpl implements DeliveryExpressTempla | ||
| 76 | validateTemplateNameUnique(updateReqVO.getName(), updateReqVO.getId()); | 75 | validateTemplateNameUnique(updateReqVO.getName(), updateReqVO.getId()); |
| 77 | 76 | ||
| 78 | // 更新运费从表 | 77 | // 更新运费从表 |
| 79 | - updateExpressTemplateCharge(updateReqVO); | 78 | + updateExpressTemplateCharge(updateReqVO.getId(), updateReqVO.getChargeMode(), updateReqVO.getCharges()); |
| 80 | // 更新包邮从表 | 79 | // 更新包邮从表 |
| 81 | - updateExpressTemplateFree(updateReqVO); | 80 | + updateExpressTemplateFree(updateReqVO.getId(), updateReqVO.getFrees()); |
| 82 | // 更新模板主表 | 81 | // 更新模板主表 |
| 83 | DeliveryExpressTemplateDO updateObj = INSTANCE.convert(updateReqVO); | 82 | DeliveryExpressTemplateDO updateObj = INSTANCE.convert(updateReqVO); |
| 84 | expressTemplateMapper.updateById(updateObj); | 83 | expressTemplateMapper.updateById(updateObj); |
| 85 | } | 84 | } |
| 86 | 85 | ||
| 87 | - private void updateExpressTemplateFree(DeliveryExpressTemplateUpdateReqVO updateReqVO) { | ||
| 88 | - // 1.1 获得新增/修改的区域列表 | ||
| 89 | - List<DeliveryExpressTemplateFreeDO> oldFreeList = expressTemplateFreeMapper.selectListByTemplateId(updateReqVO.getId()); | ||
| 90 | - List<DeliveryExpressTemplateUpdateReqVO.ExpressTemplateFreeUpdateVO> newFreeList = updateReqVO.getTemplateFree(); | ||
| 91 | - List<DeliveryExpressTemplateFreeDO> addFreeList = new ArrayList<>(newFreeList.size()); // 新增包邮区域列表 | ||
| 92 | - List<DeliveryExpressTemplateFreeDO> updateFreeList = new ArrayList<>(newFreeList.size()); // 更新包邮区域列表 | ||
| 93 | - for (DeliveryExpressTemplateUpdateReqVO.ExpressTemplateFreeUpdateVO item : newFreeList) { | ||
| 94 | - if (Objects.nonNull(item.getId())) { | ||
| 95 | - updateFreeList.add(INSTANCE.convertTemplateFree(item)); | ||
| 96 | - } else { | ||
| 97 | - item.setTemplateId(updateReqVO.getId()); | ||
| 98 | - addFreeList.add(INSTANCE.convertTemplateFree(item)); | ||
| 99 | - } | ||
| 100 | - } | ||
| 101 | - // 1.2 新增 | ||
| 102 | - if (CollUtil.isNotEmpty(addFreeList)) { | ||
| 103 | - expressTemplateFreeMapper.insertBatch(addFreeList); | 86 | + private void updateExpressTemplateFree(Long templateId, List<DeliveryExpressTemplateFreeBaseVO> frees) { |
| 87 | + // 第一步,对比新老数据,获得添加、修改、删除的列表 | ||
| 88 | + List<DeliveryExpressTemplateFreeDO> oldList = expressTemplateFreeMapper.selectListByTemplateId(templateId); | ||
| 89 | + List<DeliveryExpressTemplateFreeDO> newList = INSTANCE.convertTemplateFreeList(templateId, frees); | ||
| 90 | + List<List<DeliveryExpressTemplateFreeDO>> diffList = CollectionUtils.diffList(oldList, newList, | ||
| 91 | + (oldVal, newVal) -> ObjectUtil.equal(oldVal.getId(), newVal.getTemplateId())); | ||
| 92 | + | ||
| 93 | + // 第二步,批量添加、修改、删除 | ||
| 94 | + if (CollUtil.isNotEmpty(diffList.get(0))) { | ||
| 95 | + expressTemplateFreeMapper.insertBatch(diffList.get(0)); | ||
| 104 | } | 96 | } |
| 105 | - // 1.3 修改 | ||
| 106 | - if (CollUtil.isNotEmpty(updateFreeList)) { | ||
| 107 | - expressTemplateFreeMapper.updateBatch(updateFreeList); | 97 | + if (CollUtil.isNotEmpty(diffList.get(1))) { |
| 98 | + expressTemplateFreeMapper.updateBatch(diffList.get(1)); | ||
| 108 | } | 99 | } |
| 109 | - | ||
| 110 | - // 2. 删除 | ||
| 111 | - Set<Long> deleteFreeIds = convertSet(oldFreeList, DeliveryExpressTemplateFreeDO::getId); | ||
| 112 | - deleteFreeIds.removeAll(convertSet(updateFreeList, DeliveryExpressTemplateFreeDO::getId)); | ||
| 113 | - if (CollUtil.isNotEmpty(deleteFreeIds)) { | ||
| 114 | - expressTemplateFreeMapper.deleteBatchIds(deleteFreeIds); | 100 | + if (CollUtil.isNotEmpty(diffList.get(2))) { |
| 101 | + expressTemplateFreeMapper.deleteBatchIds(convertList(diffList.get(2), DeliveryExpressTemplateFreeDO::getId)); | ||
| 115 | } | 102 | } |
| 116 | } | 103 | } |
| 117 | 104 | ||
| 118 | - private void updateExpressTemplateCharge(DeliveryExpressTemplateUpdateReqVO updateReqVO) { | ||
| 119 | - // 1.1 获得新增/修改的区域列表 | ||
| 120 | - List<DeliveryExpressTemplateChargeDO> oldChargeList = expressTemplateChargeMapper.selectListByTemplateId(updateReqVO.getId()); | ||
| 121 | - List<DeliveryExpressTemplateUpdateReqVO.ExpressTemplateChargeUpdateVO> newChargeList = updateReqVO.getTemplateCharge(); | ||
| 122 | - List<DeliveryExpressTemplateChargeDO> addList = new ArrayList<>(newChargeList.size()); // 新增运费区域列表 | ||
| 123 | - List<DeliveryExpressTemplateChargeDO> updateList = new ArrayList<>(newChargeList.size()); // 更新运费区域列表 | ||
| 124 | - for (DeliveryExpressTemplateUpdateReqVO.ExpressTemplateChargeUpdateVO item : newChargeList) { | ||
| 125 | - if (item.getId() != null) { | ||
| 126 | - // 计费模式以主表为准 | ||
| 127 | - item.setChargeMode(updateReqVO.getChargeMode()); | ||
| 128 | - updateList.add(INSTANCE.convertTemplateCharge(item)); | ||
| 129 | - } else { | ||
| 130 | - item.setTemplateId(updateReqVO.getId()); | ||
| 131 | - item.setChargeMode(updateReqVO.getChargeMode()); | ||
| 132 | - addList.add(INSTANCE.convertTemplateCharge(item)); | 105 | + private void updateExpressTemplateCharge(Long templateId, Integer chargeMode, List<DeliveryExpressTemplateChargeBaseVO> charges) { |
| 106 | + // 第一步,对比新老数据,获得添加、修改、删除的列表 | ||
| 107 | + List<DeliveryExpressTemplateChargeDO> oldList = expressTemplateChargeMapper.selectListByTemplateId(templateId); | ||
| 108 | + List<DeliveryExpressTemplateChargeDO> newList = INSTANCE.convertTemplateChargeList(templateId, chargeMode, charges); | ||
| 109 | + List<List<DeliveryExpressTemplateChargeDO>> diffList = diffList(oldList, newList, (oldVal, newVal) -> { | ||
| 110 | + boolean same = ObjectUtil.equal(oldVal.getId(), newVal.getId()); | ||
| 111 | + if (same) { | ||
| 112 | + newVal.setChargeMode(chargeMode); // 更新下收费模式 | ||
| 133 | } | 113 | } |
| 114 | + return same; | ||
| 115 | + }); | ||
| 116 | + | ||
| 117 | + // 第二步,批量添加、修改、删除 | ||
| 118 | + if (CollUtil.isNotEmpty(diffList.get(0))) { | ||
| 119 | + expressTemplateChargeMapper.insertBatch(diffList.get(0)); | ||
| 134 | } | 120 | } |
| 135 | - // 1.2 新增 | ||
| 136 | - if (CollUtil.isNotEmpty(addList)) { | ||
| 137 | - expressTemplateChargeMapper.insertBatch(addList); | 121 | + if (CollUtil.isNotEmpty(diffList.get(1))) { |
| 122 | + expressTemplateChargeMapper.updateBatch(diffList.get(1)); | ||
| 138 | } | 123 | } |
| 139 | - // 1.3 修改 | ||
| 140 | - if (CollUtil.isNotEmpty(updateList)) { | ||
| 141 | - expressTemplateChargeMapper.updateBatch(updateList); | ||
| 142 | - } | ||
| 143 | - | ||
| 144 | - // 2. 删除 | ||
| 145 | - Set<Long> deleteChargeIds = convertSet(oldChargeList, DeliveryExpressTemplateChargeDO::getId); | ||
| 146 | - deleteChargeIds.removeAll(convertSet(updateList, DeliveryExpressTemplateChargeDO::getId)); | ||
| 147 | - if (CollUtil.isNotEmpty(deleteChargeIds)) { | ||
| 148 | - expressTemplateChargeMapper.deleteBatchIds(deleteChargeIds); | 124 | + if (CollUtil.isNotEmpty(diffList.get(2))) { |
| 125 | + expressTemplateChargeMapper.deleteBatchIds(convertList(diffList.get(2), DeliveryExpressTemplateChargeDO::getId)); | ||
| 149 | } | 126 | } |
| 150 | } | 127 | } |
| 151 | 128 | ||
| @@ -238,14 +215,4 @@ public class DeliveryExpressTemplateServiceImpl implements DeliveryExpressTempla | @@ -238,14 +215,4 @@ public class DeliveryExpressTemplateServiceImpl implements DeliveryExpressTempla | ||
| 238 | return INSTANCE.convertMap(areaId, templateList, chargeList, freeList); | 215 | return INSTANCE.convertMap(areaId, templateList, chargeList, freeList); |
| 239 | } | 216 | } |
| 240 | 217 | ||
| 241 | - private DeliveryExpressTemplateRespBO.Charge findMatchExpressTemplateCharge( | ||
| 242 | - List<DeliveryExpressTemplateChargeDO> templateChargeList, Integer areaId) { | ||
| 243 | - return INSTANCE.convertTemplateCharge(findFirst(templateChargeList, item -> item.getAreaIds().contains(areaId))); | ||
| 244 | - } | ||
| 245 | - | ||
| 246 | - private DeliveryExpressTemplateRespBO.Free findMatchExpressTemplateFree( | ||
| 247 | - List<DeliveryExpressTemplateFreeDO> templateFreeList, Integer areaId) { | ||
| 248 | - return INSTANCE.convertTemplateFree(findFirst(templateFreeList, item -> item.getAreaIds().contains(areaId))); | ||
| 249 | - } | ||
| 250 | - | ||
| 251 | } | 218 | } |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/ip/AreaController.java
| @@ -6,17 +6,17 @@ import cn.iocoder.yudao.framework.ip.core.Area; | @@ -6,17 +6,17 @@ import cn.iocoder.yudao.framework.ip.core.Area; | ||
| 6 | import cn.iocoder.yudao.framework.ip.core.utils.AreaUtils; | 6 | import cn.iocoder.yudao.framework.ip.core.utils.AreaUtils; |
| 7 | import cn.iocoder.yudao.framework.ip.core.utils.IPUtils; | 7 | import cn.iocoder.yudao.framework.ip.core.utils.IPUtils; |
| 8 | import cn.iocoder.yudao.module.system.controller.admin.ip.vo.AreaNodeRespVO; | 8 | import cn.iocoder.yudao.module.system.controller.admin.ip.vo.AreaNodeRespVO; |
| 9 | -import cn.iocoder.yudao.module.system.controller.admin.ip.vo.AreaNodeSimpleRespVO; | ||
| 10 | import cn.iocoder.yudao.module.system.convert.ip.AreaConvert; | 9 | import cn.iocoder.yudao.module.system.convert.ip.AreaConvert; |
| 11 | import io.swagger.v3.oas.annotations.Operation; | 10 | import io.swagger.v3.oas.annotations.Operation; |
| 12 | import io.swagger.v3.oas.annotations.Parameter; | 11 | import io.swagger.v3.oas.annotations.Parameter; |
| 13 | import io.swagger.v3.oas.annotations.tags.Tag; | 12 | import io.swagger.v3.oas.annotations.tags.Tag; |
| 14 | import org.springframework.validation.annotation.Validated; | 13 | import org.springframework.validation.annotation.Validated; |
| 15 | -import org.springframework.web.bind.annotation.*; | 14 | +import org.springframework.web.bind.annotation.GetMapping; |
| 15 | +import org.springframework.web.bind.annotation.RequestMapping; | ||
| 16 | +import org.springframework.web.bind.annotation.RequestParam; | ||
| 17 | +import org.springframework.web.bind.annotation.RestController; | ||
| 16 | 18 | ||
| 17 | -import java.util.ArrayList; | ||
| 18 | import java.util.List; | 19 | import java.util.List; |
| 19 | -import java.util.Set; | ||
| 20 | 20 | ||
| 21 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | 21 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 22 | 22 | ||
| @@ -34,28 +34,6 @@ public class AreaController { | @@ -34,28 +34,6 @@ public class AreaController { | ||
| 34 | return success(AreaConvert.INSTANCE.convertList(area.getChildren())); | 34 | return success(AreaConvert.INSTANCE.convertList(area.getChildren())); |
| 35 | } | 35 | } |
| 36 | 36 | ||
| 37 | - @GetMapping("/get-children") | ||
| 38 | - @Operation(summary = "获得地区的下级区域") | ||
| 39 | - @Parameter(name = "id", description = "区域编号", required = true, example = "150000") | ||
| 40 | - public CommonResult<List<AreaNodeSimpleRespVO>> getChildren(@RequestParam("id") Integer id) { | ||
| 41 | - Area area = AreaUtils.getArea(id); | ||
| 42 | - Assert.notNull(area, String.format("获取不到 id : %d 的区域", id)); | ||
| 43 | - return success(AreaConvert.INSTANCE.convertList2(area.getChildren())); | ||
| 44 | - } | ||
| 45 | - | ||
| 46 | - // 4)方法改成 getAreaChildrenList 获得子节点们;5)url 可以已改成 children-list | ||
| 47 | - //@芋艿 是不是叫 getAreaListByIds 更合适。 因为不一定是子节点。 用于前端树选择获取缓存数据。 见 <el-tree-select :cache-data="areaCache"> | ||
| 48 | - @GetMapping("/get-by-ids") | ||
| 49 | - @Operation(summary = "通过区域 ids 获得地区列表") | ||
| 50 | - @Parameter(name = "ids", description = "区域编号 ids", required = true, example = "1,150000") | ||
| 51 | - public CommonResult<List<AreaNodeSimpleRespVO>> getAreaListByIds(@RequestParam("ids") Set<Integer> ids) { | ||
| 52 | - List<Area> areaList = new ArrayList<>(ids.size()); | ||
| 53 | - for (Integer areaId : ids) { | ||
| 54 | - areaList.add(AreaUtils.getArea(areaId)); | ||
| 55 | - } | ||
| 56 | - return success(AreaConvert.INSTANCE.convertList2(areaList)); | ||
| 57 | - } | ||
| 58 | - | ||
| 59 | @GetMapping("/get-by-ip") | 37 | @GetMapping("/get-by-ip") |
| 60 | @Operation(summary = "获得 IP 对应的地区名") | 38 | @Operation(summary = "获得 IP 对应的地区名") |
| 61 | @Parameter(name = "ip", description = "IP", required = true) | 39 | @Parameter(name = "ip", description = "IP", required = true) |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/ip/vo/AreaNodeSimpleRespVO.java deleted
| 1 | -package cn.iocoder.yudao.module.system.controller.admin.ip.vo; | ||
| 2 | - | ||
| 3 | -import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | -import lombok.Data; | ||
| 5 | - | ||
| 6 | -@Schema(description = "管理后台 - 简洁的地区节点 Response VO") | ||
| 7 | -@Data | ||
| 8 | -public class AreaNodeSimpleRespVO { | ||
| 9 | - | ||
| 10 | - @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "110000") | ||
| 11 | - private Integer id; | ||
| 12 | - | ||
| 13 | - @Schema(description = "名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "北京") | ||
| 14 | - private String name; | ||
| 15 | - | ||
| 16 | - @Schema(description = "是否叶子节点", example = "false") | ||
| 17 | - private Boolean leaf; | ||
| 18 | - | ||
| 19 | -} |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/ip/AreaConvert.java
| 1 | package cn.iocoder.yudao.module.system.convert.ip; | 1 | package cn.iocoder.yudao.module.system.convert.ip; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.ip.core.Area; | 3 | import cn.iocoder.yudao.framework.ip.core.Area; |
| 4 | -import cn.iocoder.yudao.framework.ip.core.enums.AreaTypeEnum; | ||
| 5 | import cn.iocoder.yudao.module.system.controller.admin.ip.vo.AreaNodeRespVO; | 4 | import cn.iocoder.yudao.module.system.controller.admin.ip.vo.AreaNodeRespVO; |
| 6 | -import cn.iocoder.yudao.module.system.controller.admin.ip.vo.AreaNodeSimpleRespVO; | ||
| 7 | import cn.iocoder.yudao.module.system.controller.app.ip.vo.AppAreaNodeRespVO; | 5 | import cn.iocoder.yudao.module.system.controller.app.ip.vo.AppAreaNodeRespVO; |
| 8 | import org.mapstruct.Mapper; | 6 | import org.mapstruct.Mapper; |
| 9 | -import org.mapstruct.Mapping; | ||
| 10 | import org.mapstruct.factory.Mappers; | 7 | import org.mapstruct.factory.Mappers; |
| 11 | 8 | ||
| 12 | import java.util.List; | 9 | import java.util.List; |
| 13 | -import java.util.Objects; | ||
| 14 | 10 | ||
| 15 | @Mapper | 11 | @Mapper |
| 16 | public interface AreaConvert { | 12 | public interface AreaConvert { |
| @@ -19,15 +15,6 @@ public interface AreaConvert { | @@ -19,15 +15,6 @@ public interface AreaConvert { | ||
| 19 | 15 | ||
| 20 | List<AreaNodeRespVO> convertList(List<Area> list); | 16 | List<AreaNodeRespVO> convertList(List<Area> list); |
| 21 | 17 | ||
| 22 | - List<AreaNodeSimpleRespVO> convertList2(List<Area> list); | ||
| 23 | - | ||
| 24 | - @Mapping(source = "type", target = "leaf") | ||
| 25 | - AreaNodeSimpleRespVO convert(Area area); | ||
| 26 | - | ||
| 27 | - default Boolean convertAreaType(Integer type) { | ||
| 28 | - return Objects.equals(AreaTypeEnum.DISTRICT.getType(), type); | ||
| 29 | - } | ||
| 30 | - | ||
| 31 | List<AppAreaNodeRespVO> convertList3(List<Area> list); | 18 | List<AppAreaNodeRespVO> convertList3(List<Area> list); |
| 32 | 19 | ||
| 33 | } | 20 | } |