Commit 01a67289a96fafb076b0e84d97b11df77cca8c28
1 parent
e942b52a
mall: 订单中心新增运费模板功能
Showing
24 changed files
with
867 additions
and
8 deletions
sql/mysql/optional/mall.sql
| ... | ... | @@ -487,6 +487,12 @@ INSERT INTO `ruoyi-vue-pro`.`system_menu`(`id`, `name`, `permission`, `type`, `s |
| 487 | 487 | INSERT INTO `ruoyi-vue-pro`.`system_menu`(`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2170, '快递公司更新', 'trade:delivery:express:update', 3, 3, 2167, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-05-18 09:37:53', '', '2023-05-18 09:37:53', b'0'); |
| 488 | 488 | INSERT INTO `ruoyi-vue-pro`.`system_menu`(`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2171, '快递公司删除', 'trade:delivery:express:delete', 3, 4, 2167, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-05-18 09:37:53', '', '2023-05-18 09:37:53', b'0'); |
| 489 | 489 | INSERT INTO `ruoyi-vue-pro`.`system_menu`(`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2172, '快递公司导出', 'trade:delivery:express:export', 3, 5, 2167, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-05-18 09:37:53', '', '2023-05-18 09:37:53', b'0'); |
| 490 | +INSERT INTO `ruoyi-vue-pro`.`system_menu`(`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2178, '快递运费模板导出', 'trade:delivery:express-template:export', 3, 5, 2173, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-05-20 06:49:53', '', '2023-05-20 06:49:53', b'0'); | |
| 491 | +INSERT INTO `ruoyi-vue-pro`.`system_menu`(`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2177, '快递运费模板删除', 'trade:delivery:express-template:delete', 3, 4, 2173, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-05-20 06:49:53', '', '2023-05-20 06:49:53', b'0'); | |
| 492 | +INSERT INTO `ruoyi-vue-pro`.`system_menu`(`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2176, '快递运费模板更新', 'trade:delivery:express-template:update', 3, 3, 2173, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-05-20 06:49:53', '', '2023-05-20 06:49:53', b'0'); | |
| 493 | +INSERT INTO `ruoyi-vue-pro`.`system_menu`(`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2175, '快递运费模板创建', 'trade:delivery:express-template:create', 3, 2, 2173, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-05-20 06:49:53', '', '2023-05-20 06:49:53', b'0'); | |
| 494 | +INSERT INTO `ruoyi-vue-pro`.`system_menu`(`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2174, '快递运费模板查询', 'trade:delivery:express-template:query', 3, 1, 2173, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-05-20 06:49:53', '', '2023-05-20 06:49:53', b'0'); | |
| 495 | +INSERT INTO `ruoyi-vue-pro`.`system_menu`(`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2173, '运费模版', 'trade:delivery:express-template:query', 2, 1, 2165, 'express-template', '', 'mall/trade/delivery/expressTemplate/index', 'ExpressTemplate', 0, b'1', b'1', b'1', '1', '2023-05-20 06:48:10', '1', '2023-05-20 06:48:29', b'0'); | |
| 490 | 496 | |
| 491 | 497 | INSERT INTO `system_dict_data`(`sort`,`label`,`value`,`dict_type`,`status`,`color_type`,`css_class`,`remark`,`creator`,`create_time`,`updater`,`update_time`,`deleted`) VALUES |
| 492 | 498 | (1,'打',2,'product_unit',0,'','','',1, NOW(),1, NOW(),0), |
| ... | ... | @@ -520,4 +526,12 @@ INSERT INTO `system_dict_data`(`sort`,`label`,`value`,`dict_type`,`status`,`colo |
| 520 | 526 | (1, '英寸', 30, 'product_unit', 0, '', '', '', 1, NOW(), 1, NOW(), 0), |
| 521 | 527 | (1, '英尺', 31, 'product_unit', 0, '', '', '', 1, NOW(), 1, NOW(), 0), |
| 522 | 528 | (1, '码', 32, 'product_unit', 0, '', '', '', 1, NOW(), 1, NOW(), 0), |
| 523 | - (1,'个',1,'product_unit',0,'','','',1, NOW(),1, NOW(),0); | |
| 524 | 529 | \ No newline at end of file |
| 530 | + (1,'个',1,'product_unit',0,'','','',1, NOW(),1, NOW(),0); | |
| 531 | +-- ---------------------------- | |
| 532 | +-- 数字字典,快递计费方式 | |
| 533 | +-- ---------------------------- | |
| 534 | +INSERT INTO `ruoyi-vue-pro`.`system_dict_type`(`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (169, '快递计费方式', 'trade_delivery_express_charge_mode', 0, '用于商城交易模块配送管理', '1', '2023-05-21 22:45:03', '1', '2023-05-21 22:45:03', b'0', '1970-01-01 00:00:00'); | |
| 535 | + | |
| 536 | +INSERT INTO `ruoyi-vue-pro`.`system_dict_data`(`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1237, 2, '按体积', '3', 'trade_delivery_express_charge_mode', 0, '', '', '', '1', '2023-05-21 22:47:18', '1', '2023-05-21 22:47:18', b'0'); | |
| 537 | +INSERT INTO `ruoyi-vue-pro`.`system_dict_data`(`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1236, 1, '按重量', '2', 'trade_delivery_express_charge_mode', 0, '', '', '', '1', '2023-05-21 22:46:58', '1', '2023-05-21 22:46:58', b'0'); | |
| 538 | +INSERT INTO `ruoyi-vue-pro`.`system_dict_data`(`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1235, 0, '按件', '1', 'trade_delivery_express_charge_mode', 0, '', '', '', '1', '2023-05-21 22:46:40', '1', '2023-05-21 22:46:40', b'0'); | ... | ... |
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/ErrorCodeConstants.java
| ... | ... | @@ -48,5 +48,6 @@ public interface ErrorCodeConstants { |
| 48 | 48 | // ========== 物流配送模块 1-011-003-000 ========== |
| 49 | 49 | ErrorCode DELIVERY_EXPRESS_NOT_EXISTS = new ErrorCode(1011003000, "快递公司不存在"); |
| 50 | 50 | ErrorCode EXPRESS_CODE_DUPLICATE = new ErrorCode(1011003001, "已经存在该编码的快递公司"); |
| 51 | - | |
| 51 | + ErrorCode EXPRESS_TEMPLATE_NOT_EXISTS = new ErrorCode(1011003002, "运费模板不存在"); | |
| 52 | + ErrorCode EXPRESS_TEMPLATE_NAME_DUPLICATE = new ErrorCode(1011003002, "已经存在该运费模板名"); | |
| 52 | 53 | } | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/DeliveryExpressController.java
| ... | ... | @@ -71,7 +71,7 @@ public class DeliveryExpressController { |
| 71 | 71 | |
| 72 | 72 | @GetMapping("/page") |
| 73 | 73 | @Operation(summary = "获得快递公司分页") |
| 74 | - @PreAuthorize("@ss.hasPermission('trade:delivery-express:query')") | |
| 74 | + @PreAuthorize("@ss.hasPermission('trade:delivery:express:query')") | |
| 75 | 75 | public CommonResult<PageResult<DeliveryExpressRespVO>> getDeliveryExpressPage(@Valid DeliveryExpressPageReqVO pageVO) { |
| 76 | 76 | PageResult<DeliveryExpressDO> pageResult = deliveryExpressService.getDeliveryExpressPage(pageVO); |
| 77 | 77 | return success(DeliveryExpressConvert.INSTANCE.convertPage(pageResult)); | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/DeliveryExpressTemplateController.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.trade.controller.admin.delivery; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.*; | |
| 4 | +import cn.iocoder.yudao.module.trade.convert.delivery.DeliveryExpressTemplateConvert; | |
| 5 | +import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressTemplateDO; | |
| 6 | +import cn.iocoder.yudao.module.trade.service.delivery.DeliveryExpressTemplateService; | |
| 7 | +import org.springframework.web.bind.annotation.*; | |
| 8 | +import javax.annotation.Resource; | |
| 9 | +import org.springframework.validation.annotation.Validated; | |
| 10 | +import org.springframework.security.access.prepost.PreAuthorize; | |
| 11 | +import io.swagger.v3.oas.annotations.tags.Tag; | |
| 12 | +import io.swagger.v3.oas.annotations.Parameter; | |
| 13 | +import io.swagger.v3.oas.annotations.Operation; | |
| 14 | + | |
| 15 | +import javax.validation.*; | |
| 16 | +import javax.servlet.http.*; | |
| 17 | +import java.util.*; | |
| 18 | +import java.io.IOException; | |
| 19 | + | |
| 20 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 21 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | |
| 22 | +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | |
| 23 | + | |
| 24 | +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; | |
| 25 | + | |
| 26 | +import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; | |
| 27 | +import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*; | |
| 28 | + | |
| 29 | + | |
| 30 | +@Tag(name = "管理后台 - 快递运费模板") | |
| 31 | +@RestController | |
| 32 | +@RequestMapping("/trade/delivery/express-template") | |
| 33 | +@Validated | |
| 34 | +public class DeliveryExpressTemplateController { | |
| 35 | + | |
| 36 | + @Resource | |
| 37 | + private DeliveryExpressTemplateService deliveryExpressTemplateService; | |
| 38 | + | |
| 39 | + @PostMapping("/create") | |
| 40 | + @Operation(summary = "创建快递运费模板") | |
| 41 | + @PreAuthorize("@ss.hasPermission('trade:delivery:express-template:create')") | |
| 42 | + public CommonResult<Long> createDeliveryExpressTemplate(@Valid @RequestBody DeliveryExpressTemplateCreateReqVO createReqVO) { | |
| 43 | + return success(deliveryExpressTemplateService.createDeliveryExpressTemplate(createReqVO)); | |
| 44 | + } | |
| 45 | + | |
| 46 | + @PutMapping("/update") | |
| 47 | + @Operation(summary = "更新快递运费模板") | |
| 48 | + @PreAuthorize("@ss.hasPermission('trade:delivery:express-template:update')") | |
| 49 | + public CommonResult<Boolean> updateDeliveryExpressTemplate(@Valid @RequestBody DeliveryExpressTemplateUpdateReqVO updateReqVO) { | |
| 50 | + deliveryExpressTemplateService.updateDeliveryExpressTemplate(updateReqVO); | |
| 51 | + return success(true); | |
| 52 | + } | |
| 53 | + | |
| 54 | + @DeleteMapping("/delete") | |
| 55 | + @Operation(summary = "删除快递运费模板") | |
| 56 | + @Parameter(name = "id", description = "编号", required = true) | |
| 57 | + @PreAuthorize("@ss.hasPermission('trade:delivery:express-template:delete')") | |
| 58 | + public CommonResult<Boolean> deleteDeliveryExpressTemplate(@RequestParam("id") Long id) { | |
| 59 | + deliveryExpressTemplateService.deleteDeliveryExpressTemplate(id); | |
| 60 | + return success(true); | |
| 61 | + } | |
| 62 | + | |
| 63 | + @GetMapping("/get") | |
| 64 | + @Operation(summary = "获得快递运费模板") | |
| 65 | + @Parameter(name = "id", description = "编号", required = true, example = "1024") | |
| 66 | + @PreAuthorize("@ss.hasPermission('trade:delivery:express-template:query')") | |
| 67 | + public CommonResult<DeliveryExpressTemplateRespVO> getDeliveryExpressTemplate(@RequestParam("id") Long id) { | |
| 68 | + return success(deliveryExpressTemplateService.getDeliveryExpressTemplate(id)); | |
| 69 | + } | |
| 70 | + | |
| 71 | + @GetMapping("/list") | |
| 72 | + @Operation(summary = "获得快递运费模板列表") | |
| 73 | + @Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048") | |
| 74 | + @PreAuthorize("@ss.hasPermission('trade:delivery:express-template:query')") | |
| 75 | + public CommonResult<List<DeliveryExpressTemplateSimpleRespVO>> getDeliveryExpressTemplateList(@RequestParam("ids") Collection<Long> ids) { | |
| 76 | + List<DeliveryExpressTemplateDO> list = deliveryExpressTemplateService.getDeliveryExpressTemplateList(ids); | |
| 77 | + return success(DeliveryExpressTemplateConvert.INSTANCE.convertList(list)); | |
| 78 | + } | |
| 79 | + | |
| 80 | + @GetMapping("/page") | |
| 81 | + @Operation(summary = "获得快递运费模板分页") | |
| 82 | + @PreAuthorize("@ss.hasPermission('trade:delivery:express-template:query')") | |
| 83 | + public CommonResult<PageResult<DeliveryExpressTemplateSimpleRespVO>> getDeliveryExpressTemplatePage(@Valid DeliveryExpressTemplatePageReqVO pageVO) { | |
| 84 | + PageResult<DeliveryExpressTemplateDO> pageResult = deliveryExpressTemplateService.getDeliveryExpressTemplatePage(pageVO); | |
| 85 | + return success(DeliveryExpressTemplateConvert.INSTANCE.convertPage(pageResult)); | |
| 86 | + } | |
| 87 | + | |
| 88 | + @GetMapping("/export-excel") | |
| 89 | + @Operation(summary = "导出快递运费模板 Excel") | |
| 90 | + @PreAuthorize("@ss.hasPermission('trade:delivery:express-template:export')") | |
| 91 | + @OperateLog(type = EXPORT) | |
| 92 | + public void exportDeliveryExpressTemplateExcel(@Valid DeliveryExpressTemplateExportReqVO exportReqVO, | |
| 93 | + HttpServletResponse response) throws IOException { | |
| 94 | + List<DeliveryExpressTemplateDO> list = deliveryExpressTemplateService.getDeliveryExpressTemplateList(exportReqVO); | |
| 95 | + // 导出 Excel | |
| 96 | + List<DeliveryExpressTemplateExcelVO> datas = DeliveryExpressTemplateConvert.INSTANCE.convertList02(list); | |
| 97 | + ExcelUtils.write(response, "快递运费模板.xls", "数据", DeliveryExpressTemplateExcelVO.class, datas); | |
| 98 | + } | |
| 99 | + | |
| 100 | +} | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/DeliveryExpressTemplateBaseVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.trade.controller.admin.delivery.vo; | |
| 2 | + | |
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | |
| 4 | +import lombok.Data; | |
| 5 | + | |
| 6 | +import javax.validation.constraints.NotNull; | |
| 7 | + | |
| 8 | +/** | |
| 9 | +* 快递运费模板 Base VO,提供给添加、修改、详细的子 VO 使用 | |
| 10 | +* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 | |
| 11 | +*/ | |
| 12 | +@Data | |
| 13 | +public class DeliveryExpressTemplateBaseVO { | |
| 14 | + | |
| 15 | + @Schema(description = "模板名称", required = true, example = "王五") | |
| 16 | + @NotNull(message = "模板名称不能为空") | |
| 17 | + private String name; | |
| 18 | + | |
| 19 | + @Schema(description = "配送计费方式 1:按件 2:按重量 3:按体积", required = true) | |
| 20 | + @NotNull(message = "配送计费方式 1:按件 2:按重量 3:按体积不能为空") | |
| 21 | + private Integer chargeMode; | |
| 22 | + | |
| 23 | + @Schema(description = "排序", required = true) | |
| 24 | + @NotNull(message = "排序不能为空") | |
| 25 | + private Integer sort; | |
| 26 | + | |
| 27 | +} | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/DeliveryExpressTemplateCreateReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.trade.controller.admin.delivery.vo; | |
| 2 | + | |
| 3 | +import lombok.*; | |
| 4 | +import java.util.*; | |
| 5 | +import io.swagger.v3.oas.annotations.media.Schema; | |
| 6 | + | |
| 7 | +import javax.validation.Valid; | |
| 8 | + | |
| 9 | +@Schema(description = "管理后台 - 快递运费模板创建 Request VO") | |
| 10 | +@Data | |
| 11 | +@EqualsAndHashCode(callSuper = true) | |
| 12 | +@ToString(callSuper = true) | |
| 13 | +public class DeliveryExpressTemplateCreateReqVO extends DeliveryExpressTemplateBaseVO { | |
| 14 | + | |
| 15 | + @Schema(description = "区域运费列表") | |
| 16 | + @Valid | |
| 17 | + private List<ExpressTemplateChargeBaseVO> templateCharge = Collections.emptyList(); | |
| 18 | + | |
| 19 | + @Schema(description = "包邮区域列表") | |
| 20 | + @Valid | |
| 21 | + private List<ExpressTemplateFreeBaseVO> templateFree = Collections.emptyList(); | |
| 22 | + | |
| 23 | +} | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/DeliveryExpressTemplateExcelVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.trade.controller.admin.delivery.vo; | |
| 2 | + | |
| 3 | +import com.alibaba.excel.annotation.ExcelProperty; | |
| 4 | +import lombok.Data; | |
| 5 | + | |
| 6 | +import java.time.LocalDateTime; | |
| 7 | + | |
| 8 | +/** | |
| 9 | + * 快递运费模板 Excel VO | |
| 10 | + * | |
| 11 | + * @author jason | |
| 12 | + */ | |
| 13 | +@Data | |
| 14 | +public class DeliveryExpressTemplateExcelVO { | |
| 15 | + | |
| 16 | + @ExcelProperty("编号,自增") | |
| 17 | + private Long id; | |
| 18 | + | |
| 19 | + @ExcelProperty("模板名称") | |
| 20 | + private String name; | |
| 21 | + | |
| 22 | + @ExcelProperty("配送计费方式 1:按件 2:按重量 3:按体积") | |
| 23 | + private Integer chargeMode; | |
| 24 | + | |
| 25 | + @ExcelProperty("排序") | |
| 26 | + private Integer sort; | |
| 27 | + | |
| 28 | + @ExcelProperty("创建时间") | |
| 29 | + private LocalDateTime createTime; | |
| 30 | + | |
| 31 | +} | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/DeliveryExpressTemplateExportReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.trade.controller.admin.delivery.vo; | |
| 2 | + | |
| 3 | +import lombok.*; | |
| 4 | +import java.util.*; | |
| 5 | +import io.swagger.v3.oas.annotations.media.Schema; | |
| 6 | +import cn.iocoder.yudao.framework.common.pojo.PageParam; | |
| 7 | +import java.time.LocalDateTime; | |
| 8 | +import org.springframework.format.annotation.DateTimeFormat; | |
| 9 | + | |
| 10 | +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | |
| 11 | + | |
| 12 | +@Schema(description = "管理后台 - 快递运费模板 Excel 导出 Request VO,参数和 DeliveryExpressTemplatePageReqVO 是一致的") | |
| 13 | +@Data | |
| 14 | +public class DeliveryExpressTemplateExportReqVO { | |
| 15 | + | |
| 16 | + @Schema(description = "模板名称", example = "王五") | |
| 17 | + private String name; | |
| 18 | + | |
| 19 | + @Schema(description = "配送计费方式 1:按件 2:按重量 3:按体积") | |
| 20 | + private Integer chargeMode; | |
| 21 | + | |
| 22 | + @Schema(description = "创建时间") | |
| 23 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | |
| 24 | + private LocalDateTime[] createTime; | |
| 25 | + | |
| 26 | +} | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/DeliveryExpressTemplatePageReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.trade.controller.admin.delivery.vo; | |
| 2 | + | |
| 3 | +import lombok.*; | |
| 4 | +import java.util.*; | |
| 5 | +import io.swagger.v3.oas.annotations.media.Schema; | |
| 6 | +import cn.iocoder.yudao.framework.common.pojo.PageParam; | |
| 7 | +import org.springframework.format.annotation.DateTimeFormat; | |
| 8 | +import java.time.LocalDateTime; | |
| 9 | + | |
| 10 | +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | |
| 11 | + | |
| 12 | +@Schema(description = "管理后台 - 快递运费模板分页 Request VO") | |
| 13 | +@Data | |
| 14 | +@EqualsAndHashCode(callSuper = true) | |
| 15 | +@ToString(callSuper = true) | |
| 16 | +public class DeliveryExpressTemplatePageReqVO extends PageParam { | |
| 17 | + | |
| 18 | + @Schema(description = "模板名称", example = "王五") | |
| 19 | + private String name; | |
| 20 | + | |
| 21 | + @Schema(description = "配送计费方式 1:按件 2:按重量 3:按体积") | |
| 22 | + private Integer chargeMode; | |
| 23 | + | |
| 24 | + @Schema(description = "创建时间") | |
| 25 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | |
| 26 | + private LocalDateTime[] createTime; | |
| 27 | + | |
| 28 | +} | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/DeliveryExpressTemplateRespVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.trade.controller.admin.delivery.vo; | |
| 2 | + | |
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | |
| 4 | +import lombok.Data; | |
| 5 | +import lombok.EqualsAndHashCode; | |
| 6 | +import lombok.ToString; | |
| 7 | + | |
| 8 | +import java.util.List; | |
| 9 | + | |
| 10 | +/** | |
| 11 | + * @author jason | |
| 12 | + */ | |
| 13 | +@Schema(description = "管理后台 - 快递运费模板 Response VO") | |
| 14 | +@Data | |
| 15 | +@EqualsAndHashCode(callSuper = true) | |
| 16 | +@ToString(callSuper = true) | |
| 17 | +public class DeliveryExpressTemplateRespVO extends DeliveryExpressTemplateBaseVO { | |
| 18 | + | |
| 19 | + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "371") | |
| 20 | + private Long id; | |
| 21 | + | |
| 22 | + @Schema(description = "运费模板运费设置", requiredMode = Schema.RequiredMode.REQUIRED) | |
| 23 | + private List<ExpressTemplateChargeBaseVO> templateCharge; | |
| 24 | + | |
| 25 | + @Schema(description = "运费模板包邮区域", requiredMode = Schema.RequiredMode.REQUIRED) | |
| 26 | + private List<ExpressTemplateFreeBaseVO> templateFree; | |
| 27 | + | |
| 28 | +} | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/DeliveryExpressTemplateSimpleRespVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.trade.controller.admin.delivery.vo; | |
| 2 | + | |
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | |
| 4 | +import lombok.*; | |
| 5 | +import java.time.LocalDateTime; | |
| 6 | + | |
| 7 | +@Schema(description = "管理后台 - 快递运费模板 精简 Response VO") | |
| 8 | +@Data | |
| 9 | +@EqualsAndHashCode(callSuper = true) | |
| 10 | +@ToString(callSuper = true) | |
| 11 | +public class DeliveryExpressTemplateSimpleRespVO extends DeliveryExpressTemplateBaseVO { | |
| 12 | + | |
| 13 | + @Schema(description = "编号,自增", required = true, example = "371") | |
| 14 | + private Long id; | |
| 15 | + | |
| 16 | + @Schema(description = "创建时间", required = true) | |
| 17 | + private LocalDateTime createTime; | |
| 18 | + | |
| 19 | +} | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/DeliveryExpressTemplateUpdateReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.trade.controller.admin.delivery.vo; | |
| 2 | + | |
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | |
| 4 | +import lombok.*; | |
| 5 | +import java.util.*; | |
| 6 | +import javax.validation.Valid; | |
| 7 | +import javax.validation.constraints.*; | |
| 8 | + | |
| 9 | +@Schema(description = "管理后台 - 快递运费模板更新 Request VO") | |
| 10 | +@Data | |
| 11 | +@EqualsAndHashCode(callSuper = true) | |
| 12 | +@ToString(callSuper = true) | |
| 13 | +public class DeliveryExpressTemplateUpdateReqVO extends DeliveryExpressTemplateBaseVO { | |
| 14 | + | |
| 15 | + @Schema(description = "编号", required = true, example = "371") | |
| 16 | + @NotNull(message = "编号不能为空") | |
| 17 | + private Long id; | |
| 18 | + | |
| 19 | + @Schema(description = "区域运费列表") | |
| 20 | + @Valid | |
| 21 | + private List<ExpressTemplateChargeUpdateVO> templateCharge = Collections.emptyList(); | |
| 22 | + | |
| 23 | + @Schema(description = "包邮区域列表") | |
| 24 | + @Valid | |
| 25 | + private List<ExpressTemplateFreeUpdateVO> templateFree = Collections.emptyList(); | |
| 26 | + | |
| 27 | +} | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/ExpressTemplateChargeBaseVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.trade.controller.admin.delivery.vo; | |
| 2 | + | |
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | |
| 4 | +import lombok.Data; | |
| 5 | + | |
| 6 | +import javax.validation.constraints.NotNull; | |
| 7 | + | |
| 8 | +/** | |
| 9 | + * 快递运费模板运费设置 Base VO,提供给添加运费模板使用 | |
| 10 | + * | |
| 11 | + * @author jason | |
| 12 | + */ | |
| 13 | +@Data | |
| 14 | +public class ExpressTemplateChargeBaseVO { | |
| 15 | + | |
| 16 | + @Schema(description = "区域编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | |
| 17 | + @NotNull(message = "区域编号不能为空") | |
| 18 | + private Integer areaId; | |
| 19 | + | |
| 20 | + @Schema(description = "首件数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "5") | |
| 21 | + @NotNull(message = "首件数量不能为空") | |
| 22 | + private Double startCount; | |
| 23 | + | |
| 24 | + @Schema(description = "起步价", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000") | |
| 25 | + @NotNull(message = "起步价不能为空") | |
| 26 | + private Integer startPrice; | |
| 27 | + | |
| 28 | + @Schema(description = "续件数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") | |
| 29 | + @NotNull(message = "续件数量不能为空") | |
| 30 | + private Double extraCount; | |
| 31 | + | |
| 32 | + @Schema(description = "额外价", requiredMode = Schema.RequiredMode.REQUIRED, example = "2000") | |
| 33 | + @NotNull(message = "额外价不能为空") | |
| 34 | + private Integer extraPrice; | |
| 35 | +} | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/ExpressTemplateChargeUpdateVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.trade.controller.admin.delivery.vo; | |
| 2 | + | |
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | |
| 4 | +import lombok.Data; | |
| 5 | + | |
| 6 | +/** | |
| 7 | + * @author jason | |
| 8 | + */ | |
| 9 | +@Data | |
| 10 | +public class ExpressTemplateChargeUpdateVO extends ExpressTemplateChargeBaseVO { | |
| 11 | + | |
| 12 | + @Schema(description = "编号", example = "6592") | |
| 13 | + private Long id; | |
| 14 | + | |
| 15 | + @Schema(description = "配送模板编号", example = "1") | |
| 16 | + private Long templateId; | |
| 17 | + | |
| 18 | + @Schema(description = "配送计费方式", example = "1") | |
| 19 | + private Integer chargeMode; | |
| 20 | +} | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/ExpressTemplateFreeBaseVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.trade.controller.admin.delivery.vo; | |
| 2 | + | |
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | |
| 4 | +import lombok.Data; | |
| 5 | + | |
| 6 | +import javax.validation.constraints.NotNull; | |
| 7 | + | |
| 8 | +/** | |
| 9 | + * 快递运费模板包邮 Base VO,提供给添加运费模板使用 | |
| 10 | + * | |
| 11 | + * @author jason | |
| 12 | + */ | |
| 13 | +@Data | |
| 14 | +public class ExpressTemplateFreeBaseVO { | |
| 15 | + | |
| 16 | + @Schema(description = "区域编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | |
| 17 | + @NotNull(message = "区域编号不能为空") | |
| 18 | + private Integer areaId; | |
| 19 | + | |
| 20 | + @Schema(description = "包邮金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "5000") | |
| 21 | + @NotNull(message = "包邮金额不能为空") | |
| 22 | + private Integer freePrice; | |
| 23 | + | |
| 24 | + @Schema(description = "包邮件数", requiredMode = Schema.RequiredMode.REQUIRED, example = "5") | |
| 25 | + @NotNull(message = "包邮件数不能为空") | |
| 26 | + private Integer freeCount; | |
| 27 | +} | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/ExpressTemplateFreeUpdateVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.trade.controller.admin.delivery.vo; | |
| 2 | + | |
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | |
| 4 | +import lombok.Data; | |
| 5 | + | |
| 6 | +/** | |
| 7 | + * 快递运费模板包邮 更新 VO | |
| 8 | + * | |
| 9 | + * @author jason | |
| 10 | + */ | |
| 11 | +@Data | |
| 12 | +public class ExpressTemplateFreeUpdateVO extends ExpressTemplateFreeBaseVO { | |
| 13 | + | |
| 14 | + @Schema(description = "编号", example = "6592") | |
| 15 | + private Long id; | |
| 16 | + | |
| 17 | + @Schema(description = "配送模板编号", example = "1") | |
| 18 | + private Long templateId; | |
| 19 | +} | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/delivery/DeliveryExpressTemplateConvert.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.trade.convert.delivery; | |
| 2 | + | |
| 3 | +import java.util.*; | |
| 4 | + | |
| 5 | +import cn.hutool.core.collection.CollUtil; | |
| 6 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 7 | + | |
| 8 | +import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.*; | |
| 9 | +import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressTemplateChargeDO; | |
| 10 | +import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressTemplateDO; | |
| 11 | +import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressTemplateFreeDO; | |
| 12 | +import org.mapstruct.Mapper; | |
| 13 | +import org.mapstruct.factory.Mappers; | |
| 14 | + | |
| 15 | +/** | |
| 16 | + * 快递运费模板 Convert | |
| 17 | + * | |
| 18 | + * @author 芋道源码 | |
| 19 | + */ | |
| 20 | +@Mapper | |
| 21 | +public interface DeliveryExpressTemplateConvert { | |
| 22 | + | |
| 23 | + DeliveryExpressTemplateConvert INSTANCE = Mappers.getMapper(DeliveryExpressTemplateConvert.class); | |
| 24 | + | |
| 25 | + DeliveryExpressTemplateDO convert(DeliveryExpressTemplateCreateReqVO bean); | |
| 26 | + | |
| 27 | + DeliveryExpressTemplateDO convert(DeliveryExpressTemplateUpdateReqVO bean); | |
| 28 | + | |
| 29 | + DeliveryExpressTemplateSimpleRespVO convert(DeliveryExpressTemplateDO bean); | |
| 30 | + | |
| 31 | + DeliveryExpressTemplateRespVO convert2(DeliveryExpressTemplateDO bean); | |
| 32 | + | |
| 33 | + List<DeliveryExpressTemplateSimpleRespVO> convertList(List<DeliveryExpressTemplateDO> list); | |
| 34 | + | |
| 35 | + PageResult<DeliveryExpressTemplateSimpleRespVO> convertPage(PageResult<DeliveryExpressTemplateDO> page); | |
| 36 | + | |
| 37 | + List<DeliveryExpressTemplateExcelVO> convertList02(List<DeliveryExpressTemplateDO> list); | |
| 38 | + | |
| 39 | + DeliveryExpressTemplateChargeDO convertTemplateCharge(Long templateId, Integer chargeMode, ExpressTemplateChargeBaseVO vo); | |
| 40 | + | |
| 41 | + DeliveryExpressTemplateChargeDO convertTemplateCharge(ExpressTemplateChargeUpdateVO vo); | |
| 42 | + | |
| 43 | + DeliveryExpressTemplateFreeDO convertTemplateFree(Long templateId, ExpressTemplateFreeBaseVO vo); | |
| 44 | + | |
| 45 | + DeliveryExpressTemplateFreeDO convertTemplateFree(ExpressTemplateFreeUpdateVO vo); | |
| 46 | + | |
| 47 | + List<ExpressTemplateChargeBaseVO> convertTemplateChargeList(List<DeliveryExpressTemplateChargeDO> list); | |
| 48 | + | |
| 49 | + List<ExpressTemplateFreeBaseVO> convertTemplateFreeList(List<DeliveryExpressTemplateFreeDO> list); | |
| 50 | + | |
| 51 | + default List<DeliveryExpressTemplateChargeDO> convertTemplateChargeList(Long templateId, Integer chargeMode, List<ExpressTemplateChargeBaseVO> list){ | |
| 52 | + if(CollUtil.isEmpty(list)){ | |
| 53 | + return Collections.emptyList(); | |
| 54 | + } | |
| 55 | + List<DeliveryExpressTemplateChargeDO> templateChargeList = new ArrayList<>( list.size() ); | |
| 56 | + for (ExpressTemplateChargeBaseVO item : list) { | |
| 57 | + templateChargeList.add(convertTemplateCharge(templateId, chargeMode, item)); | |
| 58 | + } | |
| 59 | + return templateChargeList; | |
| 60 | + } | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + default List<DeliveryExpressTemplateFreeDO> convertTemplateFreeList(Long templateId, List<ExpressTemplateFreeBaseVO> list) { | |
| 65 | + if (CollUtil.isEmpty(list)) { | |
| 66 | + return Collections.emptyList(); | |
| 67 | + } | |
| 68 | + List<DeliveryExpressTemplateFreeDO> templateFreeList = new ArrayList<>(list.size()); | |
| 69 | + for (ExpressTemplateFreeBaseVO item : list) { | |
| 70 | + templateFreeList.add(convertTemplateFree(templateId, item)); | |
| 71 | + } | |
| 72 | + return templateFreeList; | |
| 73 | + } | |
| 74 | + | |
| 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 | +} | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/delivery/DeliveryExpressTemplateFreeDO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/delivery/DeliveryExpressTemplateChargeMapper.java
| ... | ... | @@ -2,12 +2,31 @@ package cn.iocoder.yudao.module.trade.dal.mysql.delivery; |
| 2 | 2 | |
| 3 | 3 | |
| 4 | 4 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 5 | +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | |
| 5 | 6 | import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressTemplateChargeDO; |
| 7 | +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |
| 8 | +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |
| 6 | 9 | import org.apache.ibatis.annotations.Mapper; |
| 10 | +import org.springframework.stereotype.Repository; | |
| 11 | + | |
| 12 | +import java.util.List; | |
| 7 | 13 | |
| 8 | 14 | @Mapper |
| 9 | 15 | public interface DeliveryExpressTemplateChargeMapper extends BaseMapperX<DeliveryExpressTemplateChargeDO> { |
| 10 | 16 | |
| 17 | + @Repository | |
| 18 | + class BatchInsertMapper extends ServiceImpl<DeliveryExpressTemplateChargeMapper, DeliveryExpressTemplateChargeDO> { | |
| 19 | + } | |
| 20 | + | |
| 21 | + default List<DeliveryExpressTemplateChargeDO> selectListByTemplateId(Long templateId){ | |
| 22 | + return selectList(new LambdaQueryWrapper<DeliveryExpressTemplateChargeDO>() | |
| 23 | + .eq(DeliveryExpressTemplateChargeDO::getTemplateId, templateId)); | |
| 24 | + } | |
| 25 | + | |
| 26 | + default int deleteByTemplateId(Long templateId){ | |
| 27 | + return delete(new LambdaQueryWrapper<DeliveryExpressTemplateChargeDO>() | |
| 28 | + .eq(DeliveryExpressTemplateChargeDO::getTemplateId, templateId)); | |
| 29 | + } | |
| 11 | 30 | } |
| 12 | 31 | |
| 13 | 32 | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/delivery/DeliveryExpressTemplateFreeMapper.java
| 1 | 1 | package cn.iocoder.yudao.module.trade.dal.mysql.delivery; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 4 | +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | |
| 5 | +import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressTemplateChargeDO; | |
| 4 | 6 | import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressTemplateFreeDO; |
| 7 | +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |
| 8 | +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |
| 5 | 9 | import org.apache.ibatis.annotations.Mapper; |
| 10 | +import org.springframework.stereotype.Repository; | |
| 11 | + | |
| 12 | +import java.util.List; | |
| 6 | 13 | |
| 7 | 14 | @Mapper |
| 8 | 15 | public interface DeliveryExpressTemplateFreeMapper extends BaseMapperX<DeliveryExpressTemplateFreeDO> { |
| 9 | 16 | |
| 17 | + @Repository | |
| 18 | + class BatchInsertMapper extends ServiceImpl<DeliveryExpressTemplateFreeMapper, DeliveryExpressTemplateFreeDO> { | |
| 19 | + } | |
| 20 | + | |
| 21 | + default List<DeliveryExpressTemplateFreeDO> selectListByTemplateId(Long templateId) { | |
| 22 | + return selectList(new LambdaQueryWrapper<DeliveryExpressTemplateFreeDO>() | |
| 23 | + .eq(DeliveryExpressTemplateFreeDO::getTemplateId, templateId)); | |
| 24 | + } | |
| 25 | + | |
| 26 | + default int deleteByTemplateId(Long templateId) { | |
| 27 | + return delete(new LambdaQueryWrapper<DeliveryExpressTemplateFreeDO>() | |
| 28 | + .eq(DeliveryExpressTemplateFreeDO::getTemplateId, templateId)); | |
| 29 | + } | |
| 10 | 30 | } |
| 11 | 31 | |
| 12 | 32 | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/delivery/DeliveryExpressTemplateMapper.java
| 1 | 1 | package cn.iocoder.yudao.module.trade.dal.mysql.delivery; |
| 2 | 2 | |
| 3 | 3 | |
| 4 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 4 | 5 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 5 | 6 | |
| 7 | +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | |
| 8 | +import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.DeliveryExpressTemplateExportReqVO; | |
| 9 | +import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.DeliveryExpressTemplatePageReqVO; | |
| 10 | +import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressDO; | |
| 6 | 11 | import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressTemplateDO; |
| 12 | +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |
| 7 | 13 | import org.apache.ibatis.annotations.Mapper; |
| 8 | 14 | |
| 15 | +import java.util.List; | |
| 16 | + | |
| 9 | 17 | @Mapper |
| 10 | 18 | public interface DeliveryExpressTemplateMapper extends BaseMapperX<DeliveryExpressTemplateDO> { |
| 19 | + | |
| 20 | + default PageResult<DeliveryExpressTemplateDO> selectPage(DeliveryExpressTemplatePageReqVO reqVO) { | |
| 21 | + return selectPage(reqVO, new LambdaQueryWrapperX<DeliveryExpressTemplateDO>() | |
| 22 | + .likeIfPresent(DeliveryExpressTemplateDO::getName, reqVO.getName()) | |
| 23 | + .eqIfPresent(DeliveryExpressTemplateDO::getChargeMode, reqVO.getChargeMode()) | |
| 24 | + .betweenIfPresent(DeliveryExpressTemplateDO::getCreateTime, reqVO.getCreateTime()) | |
| 25 | + .orderByAsc(DeliveryExpressTemplateDO::getSort)); | |
| 26 | + } | |
| 27 | + | |
| 28 | + default List<DeliveryExpressTemplateDO> selectList(DeliveryExpressTemplateExportReqVO reqVO) { | |
| 29 | + return selectList(new LambdaQueryWrapperX<DeliveryExpressTemplateDO>() | |
| 30 | + .likeIfPresent(DeliveryExpressTemplateDO::getName, reqVO.getName()) | |
| 31 | + .eqIfPresent(DeliveryExpressTemplateDO::getChargeMode, reqVO.getChargeMode()) | |
| 32 | + .betweenIfPresent(DeliveryExpressTemplateDO::getCreateTime, reqVO.getCreateTime()) | |
| 33 | + .orderByAsc(DeliveryExpressTemplateDO::getSort)); | |
| 34 | + } | |
| 35 | + | |
| 36 | + default DeliveryExpressTemplateDO selectByName(String name) { | |
| 37 | + return selectOne(new LambdaQueryWrapper<DeliveryExpressTemplateDO>() | |
| 38 | + .eq(DeliveryExpressTemplateDO::getName, name)); | |
| 39 | + } | |
| 11 | 40 | } | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/delivery/DeliveryExpressTemplateService.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.trade.service.delivery; | |
| 2 | + | |
| 3 | +import java.util.*; | |
| 4 | +import javax.validation.*; | |
| 5 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 6 | +import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.*; | |
| 7 | +import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressTemplateDO; | |
| 8 | + | |
| 9 | +/** | |
| 10 | + * 快递运费模板 Service 接口 | |
| 11 | + * | |
| 12 | + * @author jason | |
| 13 | + */ | |
| 14 | +public interface DeliveryExpressTemplateService { | |
| 15 | + | |
| 16 | + /** | |
| 17 | + * 创建快递运费模板 | |
| 18 | + * | |
| 19 | + * @param createReqVO 创建信息 | |
| 20 | + * @return 编号 | |
| 21 | + */ | |
| 22 | + Long createDeliveryExpressTemplate(@Valid DeliveryExpressTemplateCreateReqVO createReqVO); | |
| 23 | + | |
| 24 | + /** | |
| 25 | + * 更新快递运费模板 | |
| 26 | + * | |
| 27 | + * @param updateReqVO 更新信息 | |
| 28 | + */ | |
| 29 | + void updateDeliveryExpressTemplate(@Valid DeliveryExpressTemplateUpdateReqVO updateReqVO); | |
| 30 | + | |
| 31 | + /** | |
| 32 | + * 删除快递运费模板 | |
| 33 | + * | |
| 34 | + * @param id 编号 | |
| 35 | + */ | |
| 36 | + void deleteDeliveryExpressTemplate(Long id); | |
| 37 | + | |
| 38 | + /** | |
| 39 | + * 获得快递运费模板 | |
| 40 | + * | |
| 41 | + * @param id 编号 | |
| 42 | + * @return 快递运费模板详情 | |
| 43 | + */ | |
| 44 | + DeliveryExpressTemplateRespVO getDeliveryExpressTemplate(Long id); | |
| 45 | + | |
| 46 | + /** | |
| 47 | + * 获得快递运费模板列表 | |
| 48 | + * | |
| 49 | + * @param ids 编号 | |
| 50 | + * @return 快递运费模板列表 | |
| 51 | + */ | |
| 52 | + List<DeliveryExpressTemplateDO> getDeliveryExpressTemplateList(Collection<Long> ids); | |
| 53 | + | |
| 54 | + /** | |
| 55 | + * 获得快递运费模板分页 | |
| 56 | + * | |
| 57 | + * @param pageReqVO 分页查询 | |
| 58 | + * @return 快递运费模板分页 | |
| 59 | + */ | |
| 60 | + PageResult<DeliveryExpressTemplateDO> getDeliveryExpressTemplatePage(DeliveryExpressTemplatePageReqVO pageReqVO); | |
| 61 | + | |
| 62 | + /** | |
| 63 | + * 获得快递运费模板列表, 用于 Excel 导出 | |
| 64 | + * | |
| 65 | + * @param exportReqVO 查询条件 | |
| 66 | + * @return 快递运费模板列表 | |
| 67 | + */ | |
| 68 | + List<DeliveryExpressTemplateDO> getDeliveryExpressTemplateList(DeliveryExpressTemplateExportReqVO exportReqVO); | |
| 69 | + | |
| 70 | +} | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/delivery/DeliveryExpressTemplateServiceImpl.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.trade.service.delivery; | |
| 2 | + | |
| 3 | +import cn.hutool.core.collection.CollUtil; | |
| 4 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 5 | +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | |
| 6 | +import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.*; | |
| 7 | +import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressTemplateChargeDO; | |
| 8 | +import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressTemplateDO; | |
| 9 | +import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressTemplateFreeDO; | |
| 10 | +import cn.iocoder.yudao.module.trade.dal.mysql.delivery.DeliveryExpressTemplateChargeMapper; | |
| 11 | +import cn.iocoder.yudao.module.trade.dal.mysql.delivery.DeliveryExpressTemplateFreeMapper; | |
| 12 | +import cn.iocoder.yudao.module.trade.dal.mysql.delivery.DeliveryExpressTemplateMapper; | |
| 13 | +import org.springframework.stereotype.Service; | |
| 14 | +import org.springframework.transaction.annotation.Transactional; | |
| 15 | +import org.springframework.validation.annotation.Validated; | |
| 16 | + | |
| 17 | +import javax.annotation.Resource; | |
| 18 | +import java.util.*; | |
| 19 | + | |
| 20 | +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | |
| 21 | +import static cn.iocoder.yudao.module.trade.convert.delivery.DeliveryExpressTemplateConvert.INSTANCE; | |
| 22 | +import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.*; | |
| 23 | + | |
| 24 | +/** | |
| 25 | + * 快递运费模板 Service 实现类 | |
| 26 | + * | |
| 27 | + * @author jason | |
| 28 | + */ | |
| 29 | +@Service | |
| 30 | +@Validated | |
| 31 | +public class DeliveryExpressTemplateServiceImpl implements DeliveryExpressTemplateService { | |
| 32 | + | |
| 33 | + @Resource | |
| 34 | + private DeliveryExpressTemplateMapper expressTemplateMapper; | |
| 35 | + @Resource | |
| 36 | + private DeliveryExpressTemplateChargeMapper expressTemplateChargeMapper; | |
| 37 | + @Resource | |
| 38 | + private DeliveryExpressTemplateFreeMapper expressTemplateFreeMapper; | |
| 39 | + @Resource | |
| 40 | + private DeliveryExpressTemplateChargeMapper.BatchInsertMapper expressTemplateChargeBatchMapper; | |
| 41 | + @Resource | |
| 42 | + private DeliveryExpressTemplateFreeMapper.BatchInsertMapper expressTemplateFreeBatchMapper; | |
| 43 | + | |
| 44 | + @Override | |
| 45 | + @Transactional(rollbackFor = Exception.class) | |
| 46 | + public Long createDeliveryExpressTemplate(DeliveryExpressTemplateCreateReqVO createReqVO) { | |
| 47 | + //校验模板名是否唯一 | |
| 48 | + validateTemplateNameUnique(createReqVO.getName(), null); | |
| 49 | + // 插入 | |
| 50 | + DeliveryExpressTemplateDO deliveryExpressTemplate = INSTANCE.convert(createReqVO); | |
| 51 | + expressTemplateMapper.insert(deliveryExpressTemplate); | |
| 52 | + //插入运费模板计费表 | |
| 53 | + if(CollUtil.isNotEmpty(createReqVO.getTemplateCharge())) { | |
| 54 | + expressTemplateChargeBatchMapper.saveBatch( | |
| 55 | + INSTANCE.convertTemplateChargeList(deliveryExpressTemplate.getId(), createReqVO.getChargeMode(), createReqVO.getTemplateCharge()) | |
| 56 | + ); | |
| 57 | + } | |
| 58 | + //插入运费模板包邮表 | |
| 59 | + if(CollUtil.isNotEmpty(createReqVO.getTemplateFree())) { | |
| 60 | + expressTemplateFreeBatchMapper.saveBatch( | |
| 61 | + INSTANCE.convertTemplateFreeList(deliveryExpressTemplate.getId(), createReqVO.getTemplateFree()) | |
| 62 | + ); | |
| 63 | + } | |
| 64 | + return deliveryExpressTemplate.getId(); | |
| 65 | + } | |
| 66 | + | |
| 67 | + @Override | |
| 68 | + @Transactional(rollbackFor = Exception.class) | |
| 69 | + public void updateDeliveryExpressTemplate(DeliveryExpressTemplateUpdateReqVO updateReqVO) { | |
| 70 | + // 校验存在 | |
| 71 | + validateDeliveryExpressTemplateExists(updateReqVO.getId()); | |
| 72 | + //校验模板名是否唯一 | |
| 73 | + validateTemplateNameUnique(updateReqVO.getName(), updateReqVO.getId()); | |
| 74 | + | |
| 75 | + //更新运费从表 | |
| 76 | + updateExpressTemplateCharge(updateReqVO); | |
| 77 | + //更新包邮从表 | |
| 78 | + updateExpressTemplateFree(updateReqVO); | |
| 79 | + //更新模板主表 | |
| 80 | + DeliveryExpressTemplateDO updateObj = INSTANCE.convert(updateReqVO); | |
| 81 | + expressTemplateMapper.updateById(updateObj); | |
| 82 | + } | |
| 83 | + | |
| 84 | + private void updateExpressTemplateFree(DeliveryExpressTemplateUpdateReqVO updateReqVO) { | |
| 85 | + List<DeliveryExpressTemplateFreeDO> oldFreeList = expressTemplateFreeMapper.selectListByTemplateId(updateReqVO.getId()); | |
| 86 | + List<ExpressTemplateFreeUpdateVO> newFreeList = updateReqVO.getTemplateFree(); | |
| 87 | + //新增包邮区域列表 | |
| 88 | + List<DeliveryExpressTemplateFreeDO> addFreeList = new ArrayList<>(newFreeList.size()); | |
| 89 | + //更新包邮区域列表 | |
| 90 | + List<DeliveryExpressTemplateFreeDO> updateFreeList = new ArrayList<>(newFreeList.size()); | |
| 91 | + for (ExpressTemplateFreeUpdateVO item : newFreeList) { | |
| 92 | + if (Objects.nonNull(item.getId())) { | |
| 93 | + updateFreeList.add(INSTANCE.convertTemplateFree(item)); | |
| 94 | + }else{ | |
| 95 | + item.setTemplateId(updateReqVO.getId()); | |
| 96 | + addFreeList.add(INSTANCE.convertTemplateFree(item)); | |
| 97 | + } | |
| 98 | + } | |
| 99 | + //删除的包邮区域id | |
| 100 | + Set<Long> deleteFreeIds = CollectionUtils.convertSet(oldFreeList, DeliveryExpressTemplateFreeDO::getId); | |
| 101 | + deleteFreeIds.removeAll(CollectionUtils.convertSet(updateFreeList, DeliveryExpressTemplateFreeDO::getId)); | |
| 102 | + //新增 | |
| 103 | + if (CollUtil.isNotEmpty(addFreeList)) { | |
| 104 | + expressTemplateFreeBatchMapper.saveBatch(addFreeList); | |
| 105 | + } | |
| 106 | + //修改 | |
| 107 | + if (CollUtil.isNotEmpty(updateFreeList)) { | |
| 108 | + expressTemplateFreeBatchMapper.saveOrUpdateBatch(updateFreeList); | |
| 109 | + } | |
| 110 | + //删除 | |
| 111 | + if (CollUtil.isNotEmpty(deleteFreeIds)) { | |
| 112 | + expressTemplateFreeMapper.deleteBatchIds(deleteFreeIds); | |
| 113 | + } | |
| 114 | + } | |
| 115 | + | |
| 116 | + private void updateExpressTemplateCharge(DeliveryExpressTemplateUpdateReqVO updateReqVO) { | |
| 117 | + List<DeliveryExpressTemplateChargeDO> oldChargeList = expressTemplateChargeMapper.selectListByTemplateId(updateReqVO.getId()); | |
| 118 | + List<ExpressTemplateChargeUpdateVO> newChargeList = updateReqVO.getTemplateCharge(); | |
| 119 | + //新增运费区域列表 | |
| 120 | + List<DeliveryExpressTemplateChargeDO> addList = new ArrayList<>(newChargeList.size()); | |
| 121 | + //更新运费区域列表 | |
| 122 | + List<DeliveryExpressTemplateChargeDO> updateList = new ArrayList<>(newChargeList.size()); | |
| 123 | + for (ExpressTemplateChargeUpdateVO item : newChargeList) { | |
| 124 | + if (Objects.nonNull(item.getId())) { | |
| 125 | + //计费模式以主表为准 | |
| 126 | + item.setChargeMode(updateReqVO.getChargeMode()); | |
| 127 | + updateList.add(INSTANCE.convertTemplateCharge(item)); | |
| 128 | + }else{ | |
| 129 | + item.setTemplateId(updateReqVO.getId()); | |
| 130 | + item.setChargeMode(updateReqVO.getChargeMode()); | |
| 131 | + addList.add(INSTANCE.convertTemplateCharge(item)); | |
| 132 | + } | |
| 133 | + } | |
| 134 | + //删除的运费区域id | |
| 135 | + Set<Long> deleteChargeIds = CollectionUtils.convertSet(oldChargeList, DeliveryExpressTemplateChargeDO::getId); | |
| 136 | + deleteChargeIds.removeAll(CollectionUtils.convertSet(updateList, DeliveryExpressTemplateChargeDO::getId)); | |
| 137 | + //新增 | |
| 138 | + if (CollUtil.isNotEmpty(addList)) { | |
| 139 | + expressTemplateChargeBatchMapper.saveBatch(addList); | |
| 140 | + } | |
| 141 | + //修改 | |
| 142 | + if (CollUtil.isNotEmpty(updateList)) { | |
| 143 | + expressTemplateChargeBatchMapper.saveOrUpdateBatch(updateList); | |
| 144 | + } | |
| 145 | + //删除 | |
| 146 | + if (CollUtil.isNotEmpty(deleteChargeIds)) { | |
| 147 | + expressTemplateChargeMapper.deleteBatchIds(deleteChargeIds); | |
| 148 | + } | |
| 149 | + } | |
| 150 | + | |
| 151 | + @Override | |
| 152 | + @Transactional(rollbackFor = Exception.class) | |
| 153 | + public void deleteDeliveryExpressTemplate(Long id) { | |
| 154 | + // 校验存在 | |
| 155 | + validateDeliveryExpressTemplateExists(id); | |
| 156 | + // 删除主表 | |
| 157 | + expressTemplateMapper.deleteById(id); | |
| 158 | + // 删除运费从表 | |
| 159 | + expressTemplateChargeMapper.deleteByTemplateId(id); | |
| 160 | + // 删除包邮从表 | |
| 161 | + expressTemplateFreeMapper.deleteByTemplateId(id); | |
| 162 | + } | |
| 163 | + | |
| 164 | + /** | |
| 165 | + * 校验运费模板名是否唯一 | |
| 166 | + * @param name 模板名称 | |
| 167 | + * @param id 运费模板编号, 可以为null | |
| 168 | + */ | |
| 169 | + private void validateTemplateNameUnique(String name, Long id) { | |
| 170 | + DeliveryExpressTemplateDO template = expressTemplateMapper.selectByName(name); | |
| 171 | + if (template == null) { | |
| 172 | + return; | |
| 173 | + } | |
| 174 | + // 如果 id 为空 | |
| 175 | + if (id == null) { | |
| 176 | + throw exception(EXPRESS_TEMPLATE_NAME_DUPLICATE); | |
| 177 | + } | |
| 178 | + if (!template.getId().equals(id)) { | |
| 179 | + throw exception(EXPRESS_TEMPLATE_NAME_DUPLICATE); | |
| 180 | + } | |
| 181 | + } | |
| 182 | + | |
| 183 | + private void validateDeliveryExpressTemplateExists(Long id) { | |
| 184 | + if (expressTemplateMapper.selectById(id) == null) { | |
| 185 | + throw exception(EXPRESS_TEMPLATE_NOT_EXISTS); | |
| 186 | + } | |
| 187 | + } | |
| 188 | + | |
| 189 | + @Override | |
| 190 | + public DeliveryExpressTemplateRespVO getDeliveryExpressTemplate(Long id) { | |
| 191 | + List<DeliveryExpressTemplateChargeDO> chargeList = expressTemplateChargeMapper.selectListByTemplateId(id); | |
| 192 | + List<DeliveryExpressTemplateFreeDO> freeList = expressTemplateFreeMapper.selectListByTemplateId(id); | |
| 193 | + DeliveryExpressTemplateDO template = expressTemplateMapper.selectById(id); | |
| 194 | + return INSTANCE.convert(template, chargeList,freeList); | |
| 195 | + } | |
| 196 | + | |
| 197 | + @Override | |
| 198 | + public List<DeliveryExpressTemplateDO> getDeliveryExpressTemplateList(Collection<Long> ids) { | |
| 199 | + return expressTemplateMapper.selectBatchIds(ids); | |
| 200 | + } | |
| 201 | + | |
| 202 | + @Override | |
| 203 | + public PageResult<DeliveryExpressTemplateDO> getDeliveryExpressTemplatePage(DeliveryExpressTemplatePageReqVO pageReqVO) { | |
| 204 | + return expressTemplateMapper.selectPage(pageReqVO); | |
| 205 | + } | |
| 206 | + | |
| 207 | + @Override | |
| 208 | + public List<DeliveryExpressTemplateDO> getDeliveryExpressTemplateList(DeliveryExpressTemplateExportReqVO exportReqVO) { | |
| 209 | + return expressTemplateMapper.selectList(exportReqVO); | |
| 210 | + } | |
| 211 | + | |
| 212 | +} | ... | ... |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/ip/AreaController.java
| ... | ... | @@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestMapping; |
| 16 | 16 | import org.springframework.web.bind.annotation.RequestParam; |
| 17 | 17 | import org.springframework.web.bind.annotation.RestController; |
| 18 | 18 | |
| 19 | +import java.util.Arrays; | |
| 19 | 20 | import java.util.List; |
| 20 | 21 | |
| 21 | 22 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| ... | ... | @@ -28,10 +29,10 @@ public class AreaController { |
| 28 | 29 | |
| 29 | 30 | @GetMapping("/tree") |
| 30 | 31 | @Operation(summary = "获得地区树") |
| 31 | - public CommonResult<List<AreaNodeRespVO>> getAreaTree() { | |
| 32 | - Area area = AreaUtils.getArea(Area.ID_CHINA); | |
| 33 | - Assert.notNull(area, "获取不到中国"); | |
| 34 | - return success(AreaConvert.INSTANCE.convertList(area.getChildren())); | |
| 32 | + public CommonResult<List<AreaNodeRespVO>> getAreaTree(Integer id) { | |
| 33 | + Area area = AreaUtils.getArea(id); | |
| 34 | + Assert.notNull(area, String.format("获取不到 id : %d的区域", id)); | |
| 35 | + return success(AreaConvert.INSTANCE.convertList(Arrays.asList(area))); | |
| 35 | 36 | } |
| 36 | 37 | |
| 37 | 38 | @GetMapping("/get-by-ip") | ... | ... |