diff --git a/_doc/Task.md b/_doc/Task.md index 1ef53b9c..f2e7f7a9 100644 --- a/_doc/Task.md +++ b/_doc/Task.md @@ -12,16 +12,26 @@ - [ ] 支付订单新增待支付状态, 此时不需要 ## 3.0.0.beta3 - [ ] 收银台台功能 - - [ ] 支持通过订单信息生成收银台链接, - - 进入是查询订单状态, 判断是否完成 - - 在PC时候为收银台, - - 在H5时候为也是收银台, - - 在微信支付宝时为结算页, 可以直接发起支付 - - [ ] PC收银台, PC收银台可以生成聚合收银码, 也可以通道特殊方式的支付(微信扫码/支付宝PC支付) - - [ ] H5收银台只在浏览器中才会出现, 在软件中会直接跳转到结算页 -- [x] 支付码牌配置 + - [ ] 收银台配置 + - [ ] 分类配置 + - [ ] 明细配置 + - [ ] 聚合支付配置 + - [ ] 支持通过订单信息生成多种类型的收银台链接, + - [ ] pc收银台 + - [ ] 扫码支付 + - [ ] 条码支付 + - [ ] 跳转支付 + - [ ] 聚合支付(生成扫码链接) + - [ ] H5收银台 + - [ ] 跳转支付 + - [ ] ~~APP调起支付~~ + - [ ] ~~小程序支付~~ + - [ ] 聚合收银台 + - [ ] Jsapi调用 + - [ ] 跳转支付 +- [x] 支付码牌功能改造 - [x] 一个应用支持多码牌 - - [x] 码牌不再使用应用号座位标识, 使用独立的编码 + - [x] 码牌不再使用应用号作为标识, 使用独立的编码 - [x] 码牌H5页面对接 ## bugs diff --git a/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/enums/CheckoutAggregateEnum.java b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/enums/CheckoutAggregateEnum.java new file mode 100644 index 00000000..87c4c708 --- /dev/null +++ b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/enums/CheckoutAggregateEnum.java @@ -0,0 +1,32 @@ +package org.dromara.daxpay.core.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.dromara.daxpay.core.exception.ConfigNotExistException; + +import java.util.Arrays; +import java.util.Objects; + +/** + * 收银台聚合支付类型 + * @author xxm + * @since 2024/11/27 + */ +@Getter +@AllArgsConstructor +public enum CheckoutAggregateEnum { + + WECHAT("wechat", "微信聚合支付"), + ALIPAY("alipay", "支付宝聚合支付"), + ; + + private final String code; + private final String name; + + public CheckoutAggregateEnum findByCode(String code) { + return Arrays.stream(values()) + .filter(value -> Objects.equals(value.getCode(), code)) + .findFirst() + .orElseThrow(() -> new ConfigNotExistException("未找到对应的聚合支付类型")); + } +} diff --git a/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/enums/CheckoutCallTypeEnum.java b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/enums/CheckoutCallTypeEnum.java new file mode 100644 index 00000000..d8d1cfdf --- /dev/null +++ b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/enums/CheckoutCallTypeEnum.java @@ -0,0 +1,43 @@ +package org.dromara.daxpay.core.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.dromara.daxpay.core.exception.ConfigNotExistException; + +import java.util.Arrays; +import java.util.Objects; + +/** + * 收银台支付调起方式 + * 1. 扫码支付 + * 2. 条码支付 + * 3. 跳转链接 + * 4. 小程序支付 + * 5. 聚合支付 + * 6. APP支付 + * @author xxm + * @since 2024/11/27 + */ +@Getter +@AllArgsConstructor +public enum CheckoutCallTypeEnum { + + SCAN("scan", "扫码支付"), + BAR_CODE("barCode", "条码支付"), + LINK("link", "跳转链接"), + MINI_APP("miniApp", "小程序支付"), + AGGREGATE("aggregate", "聚合支付"), + APP("app", "APP支付"), + ; + + private final String code; + private final String name; + + public static CheckoutCallTypeEnum findBuyCode(String code){ + return Arrays.stream(values()) + .filter(value -> Objects.equals(value.getCode(), code)) + .findFirst() + .orElseThrow(() -> new ConfigNotExistException("不支持的收银台类型")); + + } +} diff --git a/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/enums/CheckoutTypeEnum.java b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/enums/CheckoutTypeEnum.java index 9cfd3250..870ef9f2 100644 --- a/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/enums/CheckoutTypeEnum.java +++ b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/enums/CheckoutTypeEnum.java @@ -18,14 +18,15 @@ public enum CheckoutTypeEnum { H5("h5", "H5"), PC("pc", "PC"), - MINI_APP("app", "APP"), + MINI_APP("mini_app", "小程序"), + AGGREGATE("aggregate", "聚合扫码"), ; private final String code; private final String name; public static CheckoutTypeEnum findBuyCode(String code){ - return Arrays.stream(CheckoutTypeEnum.values()) + return Arrays.stream(values()) .filter(value -> Objects.equals(value.getCode(), code)) .findFirst() .orElseThrow(() -> new ConfigNotExistException("不支持的收银台类型")); diff --git a/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/param/cashier/CheckoutPayParam.java b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/param/cashier/CheckoutPayParam.java index 655032ac..842d4363 100644 --- a/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/param/cashier/CheckoutPayParam.java +++ b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/param/cashier/CheckoutPayParam.java @@ -15,7 +15,7 @@ import lombok.experimental.Accessors; public class CheckoutPayParam { @Schema(description = "要支付的订单号") - private String bizOrderNo; + private String orderNo; @Schema(description = "支付配置项ID") private Long itemId; @@ -23,6 +23,9 @@ public class CheckoutPayParam { @Schema(description = "唯一标识") private String openId; + @Schema(description = "付款码") + private String barCode; + @Schema(description = "描述") private String description; } diff --git a/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/cashier/CheckoutInfoResult.java b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/cashier/CheckoutInfoResult.java deleted file mode 100644 index 026e27a4..00000000 --- a/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/cashier/CheckoutInfoResult.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.dromara.daxpay.core.result.cashier; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 收银台订单结算和配置信息 - * @author xxm - * @since 2024/11/26 - */ -@Data -@Accessors(chain = true) -@Schema(title = "收银台订单结算和配置信息") -public class CheckoutInfoResult { - /** 订单信息 */ - - /** 配置信息 */ - - -} diff --git a/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/checkout/CheckoutAggregateConfigResult.java b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/checkout/CheckoutAggregateConfigResult.java new file mode 100644 index 00000000..b7ada9d0 --- /dev/null +++ b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/checkout/CheckoutAggregateConfigResult.java @@ -0,0 +1,45 @@ +package org.dromara.daxpay.core.result.checkout; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.dromara.daxpay.core.enums.ChannelEnum; +import org.dromara.daxpay.core.enums.CheckoutAggregateEnum; +import org.dromara.daxpay.core.enums.PayMethodEnum; + +/** + * 收银台聚合支付配置 + * @author xxm + * @since 2024/11/27 + */ +@Data +@Accessors(chain = true) +@Schema(title = "收银台聚合支付配置") +public class CheckoutAggregateConfigResult { + + /** + * 支付类型 + * @see CheckoutAggregateEnum + */ + @Schema(description = "支付类型") + private String type; + + /** + * 通道 + * @see ChannelEnum + */ + @Schema(description = "通道") + private String channel; + + /** + * 支付方式 + * @see PayMethodEnum + */ + @Schema(description = "支付方式") + private String payMethod; + + /** 自动拉起支付 */ + @Schema(description = "自动拉起支付") + private boolean autoLaunch; + +} diff --git a/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/checkout/CheckoutAggregateResult.java b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/checkout/CheckoutAggregateResult.java new file mode 100644 index 00000000..9d48201d --- /dev/null +++ b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/checkout/CheckoutAggregateResult.java @@ -0,0 +1,29 @@ +package org.dromara.daxpay.core.result.checkout; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 收银台聚合支付配置 + * @author xxm + * @since 2024/11/27 + */ +@Data +@Accessors(chain = true) +@Schema(title = "收银台聚合支付配置") +public class CheckoutAggregateResult { + + /** 订单信息 */ + @Schema(description = "订单信息") + private CheckoutOrderResult order; + + /** 收银台配置信息 */ + @Schema(description = "配置信息") + private CheckoutConfigResult config; + + /** 收银台聚合配置信息 */ + @Schema(description = "收银台聚合配置信息") + private CheckoutAggregateConfigResult aggregateConfig; + +} diff --git a/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/checkout/CheckoutConfigResult.java b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/checkout/CheckoutConfigResult.java new file mode 100644 index 00000000..e5778fd9 --- /dev/null +++ b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/checkout/CheckoutConfigResult.java @@ -0,0 +1,27 @@ +package org.dromara.daxpay.core.result.checkout; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 收银台配置 + * @author xxm + * @since 2024/11/27 + */ +@Data +@Accessors(chain = true) +@Schema(title = "收银台配置") +public class CheckoutConfigResult { + /** 收银台名称 */ + @Schema(description = "收银台名称") + private String name; + + /** PC收银台是否同时显示聚合收银码 */ + @Schema(description = "PC收银台是否同时显示聚合收银码") + private boolean aggregateShow; + + /** h5收银台自动升级升聚合支付 */ + @Schema(description = "h5收银台自动升级升聚合支付") + private boolean h5AutoUpgrade; +} diff --git a/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/checkout/CheckoutGroupConfigResult.java b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/checkout/CheckoutGroupConfigResult.java new file mode 100644 index 00000000..d1e3eca0 --- /dev/null +++ b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/checkout/CheckoutGroupConfigResult.java @@ -0,0 +1,43 @@ +package org.dromara.daxpay.core.result.checkout; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.dromara.daxpay.core.enums.CheckoutTypeEnum; + +import java.util.List; + +/** + * 收银台分类配置 + * @author xxm + * @since 2024/11/26 + */ +@Data +@Accessors(chain = true) +@Schema(title = "收银台分类配置") +public class CheckoutGroupConfigResult{ + + @Schema(description = "主键") + private Long id; + + /** + * 类型 web/h5/小程序 + * @see CheckoutTypeEnum + */ + @Schema(description = "类型") + private String type; + + /** 名称 */ + @Schema(description = "名称") + private String name; + + /** 图标 */ + @Schema(description = "图标") + private String icon; + + + /** 配置项 */ + @Schema(description = "配置项列表") + private List items; + +} diff --git a/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/checkout/CheckoutItemConfigResult.java b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/checkout/CheckoutItemConfigResult.java new file mode 100644 index 00000000..883be86a --- /dev/null +++ b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/checkout/CheckoutItemConfigResult.java @@ -0,0 +1,48 @@ +package org.dromara.daxpay.core.result.checkout; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.dromara.daxpay.core.enums.ChannelEnum; +import org.dromara.daxpay.core.enums.CheckoutCallTypeEnum; +import org.dromara.daxpay.core.enums.PayMethodEnum; + +/** + * 收银台配置项 + * @author xxm + * @since 2024/11/26 + */ +@Data +@Accessors(chain = true) +@Schema(title = "收银台配置项") +public class CheckoutItemConfigResult { + + /** + * 发起调用的类型 + * @see CheckoutCallTypeEnum + */ + @Schema(description = "发起调用的类型") + private String callType; + + /** 名称 */ + @Schema(description = "名称") + private String name; + + /** 图标 */ + @Schema(description = "图标") + private String icon; + + /** + * 支付通道 + * @see ChannelEnum + */ + @Schema(description = "支付通道") + private String channel; + + /** + * 支付方式 + * @see PayMethodEnum + */ + @Schema(description = "支付方式") + private String payMethod; +} diff --git a/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/checkout/CheckoutOrderAndConfigResult.java b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/checkout/CheckoutOrderAndConfigResult.java new file mode 100644 index 00000000..240d86eb --- /dev/null +++ b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/checkout/CheckoutOrderAndConfigResult.java @@ -0,0 +1,31 @@ +package org.dromara.daxpay.core.result.checkout; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * 收银台结算订单和配置信息 + * @author xxm + * @since 2024/11/26 + */ +@Data +@Accessors(chain = true) +@Schema(title = "收银台结算订单和配置信息") +public class CheckoutOrderAndConfigResult { + + /** 订单信息 */ + @Schema(description = "订单信息") + private CheckoutOrderResult order; + + /** 收银台配置信息 */ + @Schema(description = "配置信息") + private CheckoutConfigResult config; + + /** 收银台分类配置信息 */ + @Schema(description = "分类配置信息") + private List groupConfigs; + +} diff --git a/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/checkout/CheckoutOrderResult.java b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/checkout/CheckoutOrderResult.java new file mode 100644 index 00000000..dd26e2b2 --- /dev/null +++ b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/checkout/CheckoutOrderResult.java @@ -0,0 +1,38 @@ +package org.dromara.daxpay.core.result.checkout; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; + +/** + * 收银台订单信息 + * @author xxm + * @since 2024/11/27 + */ +@Data +@Accessors(chain = true) +@Schema(title = "收银台订单信息") +public class CheckoutOrderResult { + + /** 商户订单号 */ + @Schema(description = "商户订单号") + private String bizOrderNo; + + /** 订单号 */ + @Schema(description = "订单号") + private String orderNo; + + /** 标题 */ + @Schema(description = "标题") + private String title; + + /** 描述 */ + @Schema(description = "描述") + private String description; + + /** 金额(元) */ + @Schema(description = "金额(元)") + private BigDecimal amount; +} diff --git a/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/cashier/CheckoutUrlResult.java b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/checkout/CheckoutUrlResult.java similarity index 87% rename from daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/cashier/CheckoutUrlResult.java rename to daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/checkout/CheckoutUrlResult.java index 880a6230..8515cbf7 100644 --- a/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/cashier/CheckoutUrlResult.java +++ b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/checkout/CheckoutUrlResult.java @@ -1,4 +1,4 @@ -package org.dromara.daxpay.core.result.cashier; +package org.dromara.daxpay.core.result.checkout; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/controller/config/CashierCodeConfigController.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/controller/config/CashierCodeConfigController.java index 07814742..2249ef2e 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/controller/config/CashierCodeConfigController.java +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/controller/config/CashierCodeConfigController.java @@ -11,8 +11,8 @@ import org.dromara.daxpay.service.param.config.cashier.CashierCodeConfigParam; import org.dromara.daxpay.service.param.config.cashier.CashierCodeTypeConfigParam; import org.dromara.daxpay.service.result.config.cashier.CashierCodeConfigResult; import org.dromara.daxpay.service.result.config.cashier.CashierCodeTypeConfigResult; -import org.dromara.daxpay.service.service.config.CashierCodeConfigService; -import org.dromara.daxpay.service.service.config.CashierCodeTypeConfigService; +import org.dromara.daxpay.service.service.config.cashier.CashierCodeConfigService; +import org.dromara.daxpay.service.service.config.cashier.CashierCodeTypeConfigService; import org.springframework.web.bind.annotation.*; import java.util.List; diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/controller/config/CheckoutConfigController.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/controller/config/CheckoutConfigController.java new file mode 100644 index 00000000..5bffe04d --- /dev/null +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/controller/config/CheckoutConfigController.java @@ -0,0 +1,170 @@ +package org.dromara.daxpay.service.controller.config; + +import cn.bootx.platform.core.annotation.RequestGroup; +import cn.bootx.platform.core.annotation.RequestPath; +import cn.bootx.platform.core.rest.Res; +import cn.bootx.platform.core.rest.result.Result; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.dromara.daxpay.service.param.config.checkout.CheckoutAggregateConfigParam; +import org.dromara.daxpay.service.param.config.checkout.CheckoutConfigParam; +import org.dromara.daxpay.service.param.config.checkout.CheckoutGroupConfigParam; +import org.dromara.daxpay.service.param.config.checkout.CheckoutItemConfigParam; +import org.dromara.daxpay.service.result.config.checkout.CheckoutAggregateConfigVo; +import org.dromara.daxpay.service.result.config.checkout.CheckoutConfigVo; +import org.dromara.daxpay.service.result.config.checkout.CheckoutGroupConfigVo; +import org.dromara.daxpay.service.result.config.checkout.CheckoutItemConfigVo; +import org.dromara.daxpay.service.service.config.checkout.CheckoutConfigQueryService; +import org.dromara.daxpay.service.service.config.checkout.CheckoutConfigService; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 支付配置控制器 + * @author xxm + * @since 2024/11/27 + */ +@Tag(name = "收银台配置配置") +@RestController +@RequestGroup(groupCode = "channelConfig", groupName = "通道配置", moduleCode = "PayConfig", moduleName = "支付配置") +@RequestMapping("/checkout/config") +@RequiredArgsConstructor +public class CheckoutConfigController { + private final CheckoutConfigQueryService checkoutConfigQueryService; + private final CheckoutConfigService checkoutConfigService; + + @RequestPath("获取收银台配置") + @Operation(summary = "获取收银台配置") + @GetMapping("/get") + public Result getConfig(String appid) { + return Res.ok(checkoutConfigQueryService.getConfig(appid)); + } + + @RequestPath("保存收银台配置") + @Operation(summary = "保存收银台配置") + @PostMapping("/save") + public Result saveConfig(@RequestBody CheckoutConfigParam param) { + checkoutConfigService.saveCheckoutConfig(param); + return Res.ok(); + } + + @RequestPath("更新收银台配置") + @Operation(summary = "更新收银台配置") + @PostMapping("/update") + public Result updateConfig(@RequestBody CheckoutConfigParam param) { + checkoutConfigService.updateCheckoutConfig(param); + return Res.ok(); + } + + + @RequestPath("获取分组配置") + @Operation(summary = "获取分组配置") + @GetMapping("/group/get") + public Result> getGroupConfigs(String appid, String checkoutType) { + return Res.ok(checkoutConfigQueryService.getGroupConfigs(appid,checkoutType)); + } + + @RequestPath("保存分组配置") + @Operation(summary = "保存分组配置") + @PostMapping("/group/save") + public Result saveCheckoutGroupConfig(@RequestBody CheckoutGroupConfigParam param) { + checkoutConfigService.saveCheckoutGroupConfig(param); + return Res.ok(); + } + + @RequestPath("更新分组配置") + @Operation(summary = "更新分组配置") + @PostMapping("/group/update") + public Result updateCheckoutGroupConfig(@RequestBody CheckoutGroupConfigParam param) { + checkoutConfigService.updateCheckoutGroupConfig(param); + return Res.ok(); + } + + @RequestPath("删除分组配置") + @Operation(summary = "删除分组配置") + @PostMapping("/group/delete") + public Result deleteCheckoutGroupConfig(Long id) { + checkoutConfigService.deleteCheckoutGroupConfig(id); + return Res.ok(); + } + + @RequestPath("获取配置项配置") + @Operation(summary = "获取配置项配置") + @GetMapping("/item/get") + public Result> getItemConfigs(Long groupId) { + return Res.ok(checkoutConfigQueryService.getItemConfigs(groupId)); + } + + @RequestPath("保存配置项配置") + @Operation(summary = "保存配置项配置") + @PostMapping("/item/save") + public Result saveCheckoutItemConfig(@RequestBody CheckoutItemConfigParam param) { + checkoutConfigService.saveCheckoutItemConfig(param); + return Res.ok(); + } + + @RequestPath("更新配置项配置") + @Operation(summary = "更新配置项配置") + @PostMapping("/item/update") + public Result updateCheckoutItemConfig(@RequestBody CheckoutItemConfigParam param) { + checkoutConfigService.updateCheckoutItemConfig(param); + return Res.ok(); + } + + @RequestPath("删除配置项配置") + @Operation(summary = "删除配置项配置") + @PostMapping("/item/delete") + public Result deleteCheckoutItemConfig(Long id) { + checkoutConfigService.deleteCheckoutItemConfig(id); + return Res.ok(); + } + + @RequestPath("获取聚合支付配置") + @Operation(summary = "获取聚合支付配置") + @GetMapping("/aggregate/get") + public Result> getAggregateConfigs(String appid) { + return Res.ok(checkoutConfigQueryService.getAggregateConfigs(appid)); + } + + @RequestPath("聚合支付配置是否存在") + @Operation(summary = "聚合支付配置是否存在") + @GetMapping("/aggregate/exists") + public Result existsAggregateConfig(String appId, String type) { + return Res.ok(checkoutConfigQueryService.existsByAppIdAndType(appId,type)); + } + + @RequestPath("聚合支付配置是否存在") + @Operation(summary = "聚合支付配置是否存在") + @GetMapping("/aggregate/existsNotId") + public Result existsAggregateConfig(String appId, String type, Long id) { + return Res.ok(checkoutConfigQueryService.existsByAppIdAndType(appId,type,id)); + } + + @RequestPath("保存聚合支付配置") + @Operation(summary = "保存聚合支付配置") + @PostMapping("/aggregate/save") + public Result saveCheckoutAggregateConfig(@RequestBody CheckoutAggregateConfigParam param) { + checkoutConfigService.saveCheckoutAggregateConfig(param); + return Res.ok(); + } + + @RequestPath("更新聚合支付配置") + @Operation(summary = "更新聚合支付配置") + @PostMapping("/aggregate/update") + public Result updateCheckoutAggregateConfig(@RequestBody CheckoutAggregateConfigParam param) { + checkoutConfigService.updateCheckoutAggregateConfig(param); + return Res.ok(); + } + + @RequestPath("删除聚合支付配置") + @Operation(summary = "删除聚合支付配置") + @PostMapping("/aggregate/delete") + public Result deleteCheckoutAggregateConfig(Long id) { + checkoutConfigService.deleteCheckoutAggregateConfig(id); + return Res.ok(); + } + + +} diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/controller/unipay/CashierCodeController.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/controller/unipay/CashierCodeController.java index 6e095c81..846944c5 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/controller/unipay/CashierCodeController.java +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/controller/unipay/CashierCodeController.java @@ -15,7 +15,7 @@ import org.dromara.daxpay.core.result.cashier.CashierCodeResult; import org.dromara.daxpay.core.result.trade.pay.PayResult; import org.dromara.daxpay.service.param.cashier.CashierCodeAuthCodeParam; import org.dromara.daxpay.service.service.cashier.CashierCodeService; -import org.dromara.daxpay.service.service.config.CashierCodeConfigService; +import org.dromara.daxpay.service.service.config.cashier.CashierCodeConfigService; import org.springframework.web.bind.annotation.*; /** diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/controller/unipay/CheckoutController.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/controller/unipay/CheckoutController.java index 1027ff7c..533006b8 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/controller/unipay/CheckoutController.java +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/controller/unipay/CheckoutController.java @@ -8,9 +8,11 @@ import lombok.RequiredArgsConstructor; import org.dromara.daxpay.core.param.cashier.CheckoutParam; import org.dromara.daxpay.core.param.cashier.CheckoutPayParam; import org.dromara.daxpay.core.result.DaxResult; -import org.dromara.daxpay.core.result.cashier.CheckoutUrlResult; +import org.dromara.daxpay.core.result.checkout.CheckoutOrderAndConfigResult; +import org.dromara.daxpay.core.result.checkout.CheckoutUrlResult; import org.dromara.daxpay.core.util.DaxRes; import org.dromara.daxpay.service.common.anno.PaymentVerify; +import org.dromara.daxpay.service.service.cashier.CheckoutQueryService; import org.dromara.daxpay.service.service.cashier.CheckoutService; import org.springframework.web.bind.annotation.*; @@ -25,6 +27,7 @@ import org.springframework.web.bind.annotation.*; @RequiredArgsConstructor public class CheckoutController { private final CheckoutService checkoutService; + private final CheckoutQueryService checkoutQueryService; @PaymentVerify @Operation(summary = "创建一个收银台链接") @@ -33,10 +36,16 @@ public class CheckoutController { return DaxRes.ok(checkoutService.creat(checkoutParam)); } - @Operation(summary = "获取收银台订单信息") - @GetMapping("/info") - public Result getInfo(){ - return Res.ok(); + @Operation(summary = "获取收银台订单和配置信息") + @GetMapping("/getOrderAndConfig") + public Result getOrderAndConfig(String orderNo, String checkoutType){ + return Res.ok(checkoutQueryService.getOrderAndConfig(orderNo, checkoutType)); + } + + @Operation(summary = "获取聚合支付配置") + @GetMapping("/getOrderAndConfig") + public Result getCheckoutUrl(String orderNo, String checkoutType){ + return Res.ok(checkoutService.getCheckoutUrl(orderNo, checkoutType)); } @Operation(summary = "发起支付") diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/convert/config/CheckoutAggregateConfigConvert.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/convert/config/CheckoutAggregateConfigConvert.java new file mode 100644 index 00000000..d50ae947 --- /dev/null +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/convert/config/CheckoutAggregateConfigConvert.java @@ -0,0 +1,24 @@ +package org.dromara.daxpay.service.convert.config; + +import org.dromara.daxpay.core.result.checkout.CheckoutAggregateConfigResult; +import org.dromara.daxpay.service.entity.config.checkout.CheckoutAggregateConfig; +import org.dromara.daxpay.service.param.config.checkout.CheckoutAggregateConfigParam; +import org.dromara.daxpay.service.result.config.checkout.CheckoutAggregateConfigVo; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * + * @author xxm + * @since 2024/11/27 + */ +@Mapper +public interface CheckoutAggregateConfigConvert { + CheckoutAggregateConfigConvert CONVERT = Mappers.getMapper(CheckoutAggregateConfigConvert.class); + + CheckoutAggregateConfigResult toResult(CheckoutAggregateConfig param); + + CheckoutAggregateConfigVo toVo(CheckoutAggregateConfig param); + + CheckoutAggregateConfig toEntity(CheckoutAggregateConfigParam param); +} diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/convert/config/CheckoutConfigConvert.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/convert/config/CheckoutConfigConvert.java new file mode 100644 index 00000000..e7c76f26 --- /dev/null +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/convert/config/CheckoutConfigConvert.java @@ -0,0 +1,26 @@ +package org.dromara.daxpay.service.convert.config; + +import org.dromara.daxpay.core.result.checkout.CheckoutConfigResult; +import org.dromara.daxpay.service.entity.config.checkout.CheckoutConfig; +import org.dromara.daxpay.service.param.config.checkout.CheckoutConfigParam; +import org.dromara.daxpay.service.result.config.checkout.CheckoutConfigVo; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * + * @author xxm + * @since 2024/11/27 + */ +@Mapper +public interface CheckoutConfigConvert { + CheckoutConfigConvert CONVERT = Mappers.getMapper(CheckoutConfigConvert.class); + + CheckoutConfigResult toResult(CheckoutConfig in); + + CheckoutConfigVo toVo(CheckoutConfig in); + + CheckoutConfig toEntity(CheckoutConfigParam in); + + +} diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/convert/config/CheckoutGroupConfigConvert.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/convert/config/CheckoutGroupConfigConvert.java index 0b0e221f..61b7655f 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/convert/config/CheckoutGroupConfigConvert.java +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/convert/config/CheckoutGroupConfigConvert.java @@ -2,7 +2,8 @@ package org.dromara.daxpay.service.convert.config; import org.dromara.daxpay.service.entity.config.checkout.CheckoutGroupConfig; import org.dromara.daxpay.service.param.config.checkout.CheckoutGroupConfigParam; -import org.dromara.daxpay.service.result.config.checkout.CheckoutGroupConfigResult; +import org.dromara.daxpay.core.result.checkout.CheckoutGroupConfigResult; +import org.dromara.daxpay.service.result.config.checkout.CheckoutGroupConfigVo; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -19,5 +20,7 @@ public interface CheckoutGroupConfigConvert { CheckoutGroupConfigResult toResult(CheckoutGroupConfig entity); + CheckoutGroupConfigVo toVo(CheckoutGroupConfig entity); + } diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/convert/config/CheckoutItemConfigConvert.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/convert/config/CheckoutItemConfigConvert.java index 47ac0c22..37706364 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/convert/config/CheckoutItemConfigConvert.java +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/convert/config/CheckoutItemConfigConvert.java @@ -2,7 +2,8 @@ package org.dromara.daxpay.service.convert.config; import org.dromara.daxpay.service.entity.config.checkout.CheckoutItemConfig; import org.dromara.daxpay.service.param.config.checkout.CheckoutItemConfigParam; -import org.dromara.daxpay.service.result.config.checkout.CheckoutItemConfigResult; +import org.dromara.daxpay.core.result.checkout.CheckoutItemConfigResult; +import org.dromara.daxpay.service.result.config.checkout.CheckoutItemConfigVo; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -18,4 +19,6 @@ public interface CheckoutItemConfigConvert { CheckoutItemConfig toEntity(CheckoutItemConfigParam param); CheckoutItemConfigResult toResult(CheckoutItemConfig entity); + + CheckoutItemConfigVo toVo(CheckoutItemConfig entity); } diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/checkout/CheckoutAggregateConfigManager.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/checkout/CheckoutAggregateConfigManager.java new file mode 100644 index 00000000..7267727b --- /dev/null +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/checkout/CheckoutAggregateConfigManager.java @@ -0,0 +1,61 @@ +package org.dromara.daxpay.service.dao.config.checkout; + +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.daxpay.service.entity.config.checkout.CheckoutAggregateConfig; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +/** + * 收银台聚合支付配置 + * @author xxm + * @since 2024/11/27 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class CheckoutAggregateConfigManager extends BaseManager { + + /** + * 查询配置 + */ + public List findAllByAppId(String appId) { + return lambdaQuery() + .eq(CheckoutAggregateConfig::getAppId, appId) + .list(); + } + + /** + * 根据应用ID和类型查询配置 + */ + public Optional findByAppIdAndType(String appId, String type) { + return lambdaQuery() + .eq(CheckoutAggregateConfig::getAppId, appId) + .eq(CheckoutAggregateConfig::getType, type) + .oneOpt(); + } + + /** + * 根据应用ID和类型查询配置是否存在 + */ + public boolean existsByAppIdAndType(String appId, String type){ + return lambdaQuery() + .eq(CheckoutAggregateConfig::getAppId, appId) + .eq(CheckoutAggregateConfig::getType, type) + .exists(); + } + + /** + * 根据应用ID和类型查询配置是否存在 + */ + public boolean existsByAppIdAndType(String appId, String type, Long id){ + return lambdaQuery() + .eq(CheckoutAggregateConfig::getAppId, appId) + .eq(CheckoutAggregateConfig::getType, type) + .ne(CheckoutAggregateConfig::getId, id) + .exists(); + } +} diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/checkout/CheckoutAggregateConfigMapper.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/checkout/CheckoutAggregateConfigMapper.java new file mode 100644 index 00000000..76c87130 --- /dev/null +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/checkout/CheckoutAggregateConfigMapper.java @@ -0,0 +1,14 @@ +package org.dromara.daxpay.service.dao.config.checkout; + +import com.github.yulichang.base.MPJBaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.dromara.daxpay.service.entity.config.checkout.CheckoutAggregateConfig; + +/** + * 收银台聚合支付配置 + * @author xxm + * @since 2024/11/27 + */ +@Mapper +public interface CheckoutAggregateConfigMapper extends MPJBaseMapper { +} diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/checkout/CheckoutConfigManager.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/checkout/CheckoutConfigManager.java index fc646c49..ce98681f 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/checkout/CheckoutConfigManager.java +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/checkout/CheckoutConfigManager.java @@ -3,16 +3,33 @@ package org.dromara.daxpay.service.dao.config.checkout; import cn.bootx.platform.common.mybatisplus.impl.BaseManager; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.daxpay.service.common.entity.MchAppBaseEntity; import org.dromara.daxpay.service.entity.config.checkout.CheckoutConfig; import org.springframework.stereotype.Repository; +import java.util.Optional; + /** - * + * 收银台配置 * @author xxm - * @since 2024/11/25 + * @since 2024/11/27 */ @Slf4j @Repository @RequiredArgsConstructor public class CheckoutConfigManager extends BaseManager { + + /** + * 查询配置 + */ + public Optional findByAppId(String appId) { + return findByField(MchAppBaseEntity::getAppId,appId); + } + + /** + * 判重 + */ + public boolean existsByAppId(String appId){ + return existedByField(MchAppBaseEntity::getAppId, appId); + } } diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/checkout/CheckoutConfigMapper.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/checkout/CheckoutConfigMapper.java index d559b021..e9aacd0a 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/checkout/CheckoutConfigMapper.java +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/checkout/CheckoutConfigMapper.java @@ -4,10 +4,10 @@ import com.github.yulichang.base.MPJBaseMapper; import org.apache.ibatis.annotations.Mapper; import org.dromara.daxpay.service.entity.config.checkout.CheckoutConfig; -/** - * - * @author xxm - * @since 2024/11/25 +/** + * 收银台配置 + * @author xxm + * @since 2024/11/27 */ @Mapper public interface CheckoutConfigMapper extends MPJBaseMapper { diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/checkout/CheckoutGroupConfigManager.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/checkout/CheckoutGroupConfigManager.java index 42985d6a..a772b400 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/checkout/CheckoutGroupConfigManager.java +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/checkout/CheckoutGroupConfigManager.java @@ -6,6 +6,8 @@ import lombok.extern.slf4j.Slf4j; import org.dromara.daxpay.service.entity.config.checkout.CheckoutGroupConfig; import org.springframework.stereotype.Repository; +import java.util.List; + /** * 收银台类目配置 * @author xxm @@ -15,4 +17,25 @@ import org.springframework.stereotype.Repository; @Repository @RequiredArgsConstructor public class CheckoutGroupConfigManager extends BaseManager { + + /** + * 查询指定类型的分组, 并进行排序 + */ + public List findAllSortByAppIdAndType(String appId, String type){ + return lambdaQuery() + .eq(CheckoutGroupConfig::getAppId, appId) + .eq(CheckoutGroupConfig::getType, type) + .orderByDesc(CheckoutGroupConfig::getSort) + .list(); + } + /** + * 查询指定类型的分组, 不进行排序 + */ + public List findAllByAppIdAndType(String appId, String type){ + return lambdaQuery() + .eq(CheckoutGroupConfig::getAppId, appId) + .eq(CheckoutGroupConfig::getType, type) + .list(); + } + } diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/checkout/CheckoutItemConfigManager.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/checkout/CheckoutItemConfigManager.java index 0779eabc..79f4b9af 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/checkout/CheckoutItemConfigManager.java +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/checkout/CheckoutItemConfigManager.java @@ -6,6 +6,9 @@ import lombok.extern.slf4j.Slf4j; import org.dromara.daxpay.service.entity.config.checkout.CheckoutItemConfig; import org.springframework.stereotype.Repository; +import java.util.List; +import java.util.Optional; + /** * 收银台配置项 * @author xxm @@ -15,4 +18,40 @@ import org.springframework.stereotype.Repository; @Repository @RequiredArgsConstructor public class CheckoutItemConfigManager extends BaseManager { + + /** + * 根据id和appId查询 + */ + public Optional findByIdAndAppId(Long id, String appId) { + return lambdaQuery() + .eq(CheckoutItemConfig::getId, id) + .eq(CheckoutItemConfig::getAppId, appId) + .oneOpt(); + } + + /** + * 根据分组查询 + */ + public List findAllByGroupId(Long groupId) { + return lambdaQuery() + .eq(CheckoutItemConfig::getGroupId, groupId) + .list(); + } + /** + * 根据分组列表查询 + */ + public List findAllByGroupIds(List groupIds) { + return lambdaQuery() + .in(CheckoutItemConfig::getGroupId, groupIds) + .orderByDesc(CheckoutItemConfig::getSort) + .list(); + } + + /** + * 判断分组是否有数据 + */ + public boolean existedByGroupId(Long groupId) { + return existedByField(CheckoutItemConfig::getGroupId, groupId); + } + } diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/entity/config/checkout/CheckoutAggregateConfig.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/entity/config/checkout/CheckoutAggregateConfig.java new file mode 100644 index 00000000..bee48ea4 --- /dev/null +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/entity/config/checkout/CheckoutAggregateConfig.java @@ -0,0 +1,57 @@ +package org.dromara.daxpay.service.entity.config.checkout; + +import cn.bootx.platform.common.mybatisplus.function.ToResult; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.dromara.daxpay.core.enums.ChannelEnum; +import org.dromara.daxpay.core.enums.CheckoutAggregateEnum; +import org.dromara.daxpay.core.enums.PayMethodEnum; +import org.dromara.daxpay.service.common.entity.MchAppBaseEntity; +import org.dromara.daxpay.service.convert.config.CheckoutAggregateConfigConvert; +import org.dromara.daxpay.service.param.config.checkout.CheckoutAggregateConfigParam; +import org.dromara.daxpay.service.result.config.checkout.CheckoutAggregateConfigVo; + +/** + * 收银台聚合扫码支付配置 + * @author xxm + * @since 2024/11/27 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +public class CheckoutAggregateConfig extends MchAppBaseEntity implements ToResult { + + /** + * 支付类型 + * @see CheckoutAggregateEnum + */ + private String type; + + /** + * 通道 + * @see ChannelEnum + */ + private String channel; + + /** + * 支付方式 + * @see PayMethodEnum + */ + private String payMethod; + + /** 自动拉起支付 */ + private boolean autoLaunch; + + public static CheckoutAggregateConfig init(CheckoutAggregateConfigParam param){ + return CheckoutAggregateConfigConvert.CONVERT.toEntity(param); + } + + /** + * 转换 + */ + @Override + public CheckoutAggregateConfigVo toResult() { + return CheckoutAggregateConfigConvert.CONVERT.toVo(this); + } +} diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/entity/config/checkout/CheckoutConfig.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/entity/config/checkout/CheckoutConfig.java index 512d07c8..df648e1d 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/entity/config/checkout/CheckoutConfig.java +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/entity/config/checkout/CheckoutConfig.java @@ -1,20 +1,41 @@ package org.dromara.daxpay.service.entity.config.checkout; +import cn.bootx.platform.common.mybatisplus.function.ToResult; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.dromara.daxpay.service.common.entity.MchAppBaseEntity; +import org.dromara.daxpay.service.convert.config.CheckoutConfigConvert; +import org.dromara.daxpay.service.param.config.checkout.CheckoutConfigParam; +import org.dromara.daxpay.service.result.config.checkout.CheckoutConfigVo; /** * 收银台配置 * @author xxm - * @since 2024/11/22 + * @since 2024/11/27 */ @EqualsAndHashCode(callSuper = true) @Data @Accessors(chain = true) -public class CheckoutConfig extends MchAppBaseEntity { +@Schema(title = "收银台配置") +public class CheckoutConfig extends MchAppBaseEntity implements ToResult { + /** 收银台名称 */ private String name; + /** PC收银台是否同时显示聚合收银码 */ + private boolean aggregateShow; + + /** h5收银台自动升级升聚合支付 */ + private boolean h5AutoUpgrade; + + public static CheckoutConfig init(CheckoutConfigParam param) { + return CheckoutConfigConvert.CONVERT.toEntity(param); + } + + @Override + public CheckoutConfigVo toResult() { + return CheckoutConfigConvert.CONVERT.toVo(this); + } } diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/entity/config/checkout/CheckoutGroupConfig.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/entity/config/checkout/CheckoutGroupConfig.java index 0cc19499..422018e4 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/entity/config/checkout/CheckoutGroupConfig.java +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/entity/config/checkout/CheckoutGroupConfig.java @@ -4,10 +4,11 @@ import cn.bootx.platform.common.mybatisplus.function.ToResult; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.dromara.daxpay.core.enums.CheckoutTypeEnum; import org.dromara.daxpay.service.common.entity.MchAppBaseEntity; import org.dromara.daxpay.service.convert.config.CheckoutGroupConfigConvert; import org.dromara.daxpay.service.param.config.checkout.CheckoutGroupConfigParam; -import org.dromara.daxpay.service.result.config.checkout.CheckoutGroupConfigResult; +import org.dromara.daxpay.service.result.config.checkout.CheckoutGroupConfigVo; /** * 收银台类目配置 @@ -17,14 +18,20 @@ import org.dromara.daxpay.service.result.config.checkout.CheckoutGroupConfigResu @EqualsAndHashCode(callSuper = true) @Data @Accessors(chain = true) -public class CheckoutGroupConfig extends MchAppBaseEntity implements ToResult { +public class CheckoutGroupConfig extends MchAppBaseEntity implements ToResult { - /** 类型 web/h5/小程序 */ + /** + * 类型 web/h5/小程序 + * @see CheckoutTypeEnum + */ private String type; /** 名称 */ private String name; + /** 图标 */ + private String icon; + /** 排序 */ private Double sort; @@ -36,7 +43,7 @@ public class CheckoutGroupConfig extends MchAppBaseEntity implements ToResult { +public class CheckoutItemConfig extends MchAppBaseEntity implements ToResult { /** 类目配置Id */ - private Long classifyId; + private Long groupId; + + /** 名称 */ + private String name; + + /** 图标 */ + private String icon; /** 排序 */ private Double sort; + /** + * 发起调用的类型 + * @see CheckoutCallTypeEnum + */ + private String callType; + /** * 支付通道 * @see ChannelEnum @@ -42,16 +55,6 @@ public class CheckoutItemConfig extends MchAppBaseEntity implements ToResult new DataNotExistException("未查询到收银台配置")); + + } + + /** + * 获取收银台分组配置, 包含明细配置 + */ + public List getGroupConfigs(String appId, String checkoutType){ + // 查询类目 + var groups = checkoutGroupConfigManager.findAllSortByAppIdAndType(appId, checkoutType); + if (groups.isEmpty()){ + return new ArrayList<>(); + } + var groupIds = groups.stream() + .map(MpIdEntity::getId) + .toList(); + // 查询明细配置 + List itemConfigs = checkoutItemConfigManager.findAllByGroupIds(groupIds); + // 分组 + var itemGroupMap = itemConfigs.stream() + .collect(Collectors.groupingBy(CheckoutItemConfig::getGroupId, LinkedHashMap::new, Collectors.toList())); + // 转换 + return groups.stream() + .map(o->{ + var result = CheckoutGroupConfigConvert.CONVERT.toResult(o); + result.setItems(itemGroupMap.get(o.getId()).stream().map(CheckoutItemConfigConvert.CONVERT::toResult).toList()); + return result; + }) + .toList(); + } + + + /** + * 获取收银台配置和订单相关信息, 不需要签名和鉴权 + */ + public CheckoutOrderAndConfigResult getOrderAndConfig(String orderNo, String checkoutType){ + CheckoutOrderAndConfigResult checkoutInfoResult = new CheckoutOrderAndConfigResult(); + // 订单信息 + PayOrder payOrder = checkoutAssistService.getOrderAndCheck(orderNo); + CheckoutOrderResult order = new CheckoutOrderResult() + .setTitle(payOrder.getTitle()) + .setDescription(payOrder.getDescription()) + .setAmount(payOrder.getAmount()) + .setBizOrderNo(payOrder.getBizOrderNo()) + .setOrderNo(payOrder.getOrderNo()); + // 获取收银台配置 + checkoutInfoResult.setConfig(this.getConfig(payOrder.getAppId())); + // 获取分组和明细配置 + checkoutInfoResult.setGroupConfigs(this.getGroupConfigs(payOrder.getAppId(), checkoutType)); + return checkoutInfoResult; + } + + /** + * 收银台聚合支付配置 + */ + public CheckoutAggregateResult getAggregateConfig(String orderNo, String aggregateType){ + var checkoutInfoResult = new CheckoutAggregateResult(); + // 订单信息 + PayOrder payOrder = checkoutAssistService.getOrderAndCheck(orderNo); + CheckoutOrderResult order = new CheckoutOrderResult() + .setTitle(payOrder.getTitle()) + .setDescription(payOrder.getDescription()) + .setAmount(payOrder.getAmount()) + .setBizOrderNo(payOrder.getBizOrderNo()) + .setOrderNo(payOrder.getOrderNo()); + // 获取收银台配置 + checkoutInfoResult.setConfig(this.getConfig(payOrder.getAppId())); + // 获取聚合支付配置 + CheckoutAggregateConfig aggregateConfig = checkoutAggregateConfigManager.findByAppIdAndType(payOrder.getAppId(), aggregateType) + .orElseThrow(() -> new DataNotExistException("聚合支付配置")); + checkoutInfoResult.setAggregateConfig(CheckoutAggregateConfigConvert.CONVERT.toResult(aggregateConfig)); + return checkoutInfoResult; + } +} diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/cashier/CheckoutService.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/cashier/CheckoutService.java index 9e1d1960..3cd92db5 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/cashier/CheckoutService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/cashier/CheckoutService.java @@ -5,15 +5,18 @@ import com.baomidou.lock.LockInfo; import com.baomidou.lock.LockTemplate; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.daxpay.core.enums.CheckoutCallTypeEnum; import org.dromara.daxpay.core.enums.CheckoutTypeEnum; import org.dromara.daxpay.core.exception.TradeProcessingException; import org.dromara.daxpay.core.exception.UnsupportedAbilityException; import org.dromara.daxpay.core.param.cashier.CheckoutParam; -import org.dromara.daxpay.core.result.cashier.CheckoutUrlResult; +import org.dromara.daxpay.core.param.cashier.CheckoutPayParam; +import org.dromara.daxpay.core.result.checkout.CheckoutOrderAndConfigResult; +import org.dromara.daxpay.core.result.checkout.CheckoutUrlResult; +import org.dromara.daxpay.service.dao.config.checkout.CheckoutItemConfigManager; import org.dromara.daxpay.service.entity.config.PlatformConfig; import org.dromara.daxpay.service.entity.order.pay.PayOrder; import org.dromara.daxpay.service.service.assist.PaymentAssistService; -import org.dromara.daxpay.service.service.config.CheckoutConfigService; import org.dromara.daxpay.service.service.config.PlatformConfigService; import org.springframework.stereotype.Service; @@ -28,20 +31,21 @@ import java.util.Objects; @Service @RequiredArgsConstructor public class CheckoutService { - private final CheckoutAssistService payAssistService; + private final CheckoutAssistService checkoutAssistService; private final LockTemplate lockTemplate; private final PlatformConfigService platformConfigService; private final PaymentAssistService paymentAssistService; - private final CheckoutConfigService checkoutConfigService; + private final CheckoutQueryService checkoutQueryService; + private final CheckoutItemConfigManager checkoutItemConfigManager; /** * 生成收银台链接 */ public CheckoutUrlResult creat(CheckoutParam checkoutParam){ // 校验支付限额 - payAssistService.validationLimitAmount(checkoutParam); + checkoutAssistService.validationLimitAmount(checkoutParam); // 校验超时时间, 不可早于当前 - payAssistService.validationExpiredTime(checkoutParam); + checkoutAssistService.validationExpiredTime(checkoutParam); // 获取商户订单号 String bizOrderNo = checkoutParam.getBizOrderNo(); // 加锁 @@ -52,11 +56,11 @@ public class CheckoutService { } try { // 查询并检查订单 - PayOrder payOrder = payAssistService.getOrderAndCheck(checkoutParam); + PayOrder payOrder = checkoutAssistService.getOrderAndCheck(checkoutParam); // 订单已经存在直接返回链接, 不存在创建订单后返回链接 if (Objects.isNull(payOrder)){ // 执行支付前的保存动作, 保存支付订单和扩展记录 - payOrder = payAssistService.createPayOrder(checkoutParam); + payOrder = checkoutAssistService.createPayOrder(checkoutParam); String checkoutUrl = this.getCheckoutUrl(payOrder.getOrderNo(), checkoutParam.getCheckoutType()); return new CheckoutUrlResult().setUrl(checkoutUrl); } else { @@ -72,34 +76,53 @@ public class CheckoutService { /** * 获取收银台链接 */ - public String getCheckoutUrl(String code, String checkoutType){ + public String getCheckoutUrl(String orderNo, String checkoutType){ CheckoutTypeEnum checkoutTypeEnum = CheckoutTypeEnum.findBuyCode(checkoutType); PlatformConfig config = platformConfigService.getConfig(); switch (checkoutTypeEnum) { case H5 -> { - return StrUtil.format("{}/checkout/{}",config.getGatewayMobileUrl(), code); + return StrUtil.format("{}/checkout/{}",config.getGatewayMobileUrl(), orderNo); } case PC -> { - return StrUtil.format("{}/checkout/{}",config.getGatewayPcUrl(), code); + return StrUtil.format("{}/checkout/{}",config.getGatewayPcUrl(), orderNo); } - case MINI_APP -> { - throw new UnsupportedAbilityException("暂不支持小程序收银台"); + case AGGREGATE -> { + return StrUtil.format("{}/aggregate/{}",config.getGatewayPcUrl(), orderNo); } + case MINI_APP -> throw new UnsupportedAbilityException("暂不支持小程序收银台"); default -> throw new UnsupportedAbilityException("不支持的收银台类型"); } } /** - * 获取收银台相关信息, 不需要签名和鉴权 + * 支付调用 */ - public void info(String orderNo){ + public void pay(CheckoutPayParam param){ // 订单信息 - PayOrder orderAndCheck = payAssistService.getOrderAndCheck(orderNo); - // 配置信息 - paymentAssistService.initMchApp(orderAndCheck.getAppId()); - // 获取相关配置 + PayOrder order = checkoutAssistService.getOrderAndCheck(param.getOrderNo()); + paymentAssistService.initMchApp(order.getAppId()); + // 获取配置项 + var itemConfig = checkoutItemConfigManager.findByIdAndAppId(param.getItemId(),order.getAppId()) + .orElseThrow(() -> new TradeProcessingException("支付配置项不存在")); + // 判断支付调用类型 + CheckoutCallTypeEnum callTypeEnum = CheckoutCallTypeEnum.findBuyCode(itemConfig.getCallType()); + switch (callTypeEnum) { + case SCAN -> { + // 根据通道和支付方式返回扫码链接 + } + case BAR_CODE -> { + // 调用支付逻辑直接进行支付 + } + case LINK -> { + // 返回支付链接 + } + case AGGREGATE -> { + // 直接返回手机端的聚合收银台链接, 如何判断 + } + default -> throw new UnsupportedAbilityException("不支持的支付调用类型"); + } } } diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/config/CheckoutConfigService.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/config/CheckoutConfigService.java deleted file mode 100644 index dd3e3923..00000000 --- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/config/CheckoutConfigService.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.dromara.daxpay.service.service.config; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.dromara.daxpay.service.dao.config.checkout.CheckoutConfigManager; -import org.dromara.daxpay.service.dao.config.checkout.CheckoutGroupConfigManager; -import org.dromara.daxpay.service.dao.config.checkout.CheckoutItemConfigManager; -import org.springframework.stereotype.Service; - -/** - * 收银台配置 - * @author xxm - * @since 2024/11/26 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class CheckoutConfigService { - private final CheckoutConfigManager checkoutConfigManager; - private final CheckoutGroupConfigManager checkoutGroupConfigManager; - private final CheckoutItemConfigManager checkoutItemConfigManager; - - - - -} diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/config/CashierCodeConfigService.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/config/cashier/CashierCodeConfigService.java similarity index 97% rename from daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/config/CashierCodeConfigService.java rename to daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/config/cashier/CashierCodeConfigService.java index 14503bb3..25db6196 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/config/CashierCodeConfigService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/config/cashier/CashierCodeConfigService.java @@ -1,4 +1,4 @@ -package org.dromara.daxpay.service.service.config; +package org.dromara.daxpay.service.service.config.cashier; import cn.bootx.platform.common.mybatisplus.util.MpUtil; import cn.bootx.platform.core.exception.DataNotExistException; @@ -17,6 +17,7 @@ import org.dromara.daxpay.service.entity.config.cashier.CashierCodeTypeConfig; import org.dromara.daxpay.service.entity.config.PlatformConfig; import org.dromara.daxpay.service.param.config.cashier.CashierCodeConfigParam; import org.dromara.daxpay.service.result.config.cashier.CashierCodeConfigResult; +import org.dromara.daxpay.service.service.config.PlatformConfigService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/config/CashierCodeTypeConfigService.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/config/cashier/CashierCodeTypeConfigService.java similarity index 98% rename from daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/config/CashierCodeTypeConfigService.java rename to daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/config/cashier/CashierCodeTypeConfigService.java index 664f4d10..72abb71b 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/config/CashierCodeTypeConfigService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/config/cashier/CashierCodeTypeConfigService.java @@ -1,4 +1,4 @@ -package org.dromara.daxpay.service.service.config; +package org.dromara.daxpay.service.service.config.cashier; import cn.bootx.platform.common.mybatisplus.util.MpUtil; import cn.bootx.platform.core.exception.DataNotExistException; diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/config/checkout/CheckoutConfigQueryService.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/config/checkout/CheckoutConfigQueryService.java new file mode 100644 index 00000000..4f247975 --- /dev/null +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/config/checkout/CheckoutConfigQueryService.java @@ -0,0 +1,75 @@ +package org.dromara.daxpay.service.service.config.checkout; + +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.daxpay.service.dao.config.checkout.CheckoutAggregateConfigManager; +import org.dromara.daxpay.service.dao.config.checkout.CheckoutConfigManager; +import org.dromara.daxpay.service.dao.config.checkout.CheckoutGroupConfigManager; +import org.dromara.daxpay.service.dao.config.checkout.CheckoutItemConfigManager; +import org.dromara.daxpay.service.entity.config.checkout.CheckoutConfig; +import org.dromara.daxpay.service.result.config.checkout.CheckoutAggregateConfigVo; +import org.dromara.daxpay.service.result.config.checkout.CheckoutConfigVo; +import org.dromara.daxpay.service.result.config.checkout.CheckoutGroupConfigVo; +import org.dromara.daxpay.service.result.config.checkout.CheckoutItemConfigVo; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 收银台配置查询服务 + * @author xxm + * @since 2024/11/26 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class CheckoutConfigQueryService { + private final CheckoutConfigManager checkoutConfigManager; + private final CheckoutGroupConfigManager checkoutGroupConfigManager; + private final CheckoutItemConfigManager checkoutItemConfigManager; + private final CheckoutAggregateConfigManager checkoutAggregateConfigManager; + + /** + * 收银台配置 + */ + public CheckoutConfigVo getConfig(String appid){ + return checkoutConfigManager.findByAppId(appid).map(CheckoutConfig::toResult) + .orElse(new CheckoutConfigVo()); + } + + /** + * 获取指定类型收银台分组列表 + */ + public List getGroupConfigs(String appid, String checkoutType){ + return MpUtil.toListResult(checkoutGroupConfigManager.findAllByAppIdAndType(appid, checkoutType)); + } + + /** + * 获取明细配置列表 + */ + public List getItemConfigs(Long groupId){ + return MpUtil.toListResult(checkoutItemConfigManager.findAllByGroupId(groupId)); + } + + /** + * 获取聚合支付配置列表 + */ + public List getAggregateConfigs(String appid){ + return MpUtil.toListResult(checkoutAggregateConfigManager.findAllByAppId(appid)); + } + + /** + * 根据应用ID和类型查询配置是否存在 + */ + public boolean existsByAppIdAndType(String appId, String type){ + return checkoutAggregateConfigManager.existsByAppIdAndType(appId, type); + } + + /** + * 根据应用ID和类型查询配置是否存在 + */ + public boolean existsByAppIdAndType(String appId, String type, Long id){ + return checkoutAggregateConfigManager.existsByAppIdAndType(appId, type, id); + } +} diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/config/checkout/CheckoutConfigService.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/config/checkout/CheckoutConfigService.java new file mode 100644 index 00000000..3965a7ef --- /dev/null +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/config/checkout/CheckoutConfigService.java @@ -0,0 +1,155 @@ +package org.dromara.daxpay.service.service.config.checkout; + +import cn.bootx.platform.core.exception.DataNotExistException; +import cn.bootx.platform.core.exception.RepetitiveOperationException; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.daxpay.core.exception.OperationFailException; +import org.dromara.daxpay.service.dao.config.checkout.CheckoutAggregateConfigManager; +import org.dromara.daxpay.service.dao.config.checkout.CheckoutConfigManager; +import org.dromara.daxpay.service.dao.config.checkout.CheckoutGroupConfigManager; +import org.dromara.daxpay.service.dao.config.checkout.CheckoutItemConfigManager; +import org.dromara.daxpay.service.entity.config.checkout.CheckoutAggregateConfig; +import org.dromara.daxpay.service.entity.config.checkout.CheckoutConfig; +import org.dromara.daxpay.service.entity.config.checkout.CheckoutGroupConfig; +import org.dromara.daxpay.service.entity.config.checkout.CheckoutItemConfig; +import org.dromara.daxpay.service.param.config.checkout.CheckoutAggregateConfigParam; +import org.dromara.daxpay.service.param.config.checkout.CheckoutConfigParam; +import org.dromara.daxpay.service.param.config.checkout.CheckoutGroupConfigParam; +import org.dromara.daxpay.service.param.config.checkout.CheckoutItemConfigParam; +import org.springframework.stereotype.Service; + +/** + * 收银台配置服务 + * @author xxm + * @since 2024/11/27 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class CheckoutConfigService { + + private final CheckoutConfigManager checkoutConfigManager; + private final CheckoutGroupConfigManager checkoutGroupConfigManager; + private final CheckoutItemConfigManager checkoutItemConfigManager; + private final CheckoutAggregateConfigManager checkoutAggregateConfigManager; + + /** + * 保存收银台配置 + */ + public void saveCheckoutConfig(CheckoutConfigParam param) { + // 判断是否已经存在 + if (checkoutConfigManager.existsByAppId(param.getAppId())){ + throw new RepetitiveOperationException("该应用已存在收银台配置"); + } + checkoutConfigManager.save(CheckoutConfig.init(param)); + } + + /** + * 更新收银台配置 + */ + public void updateCheckoutConfig(CheckoutConfigParam param) { + CheckoutConfig checkoutConfig = checkoutConfigManager.findById(param.getId()) + .orElseThrow(() -> new DataNotExistException("收银台配置不存在")); + BeanUtil.copyProperties(param, checkoutConfig, CopyOptions.create().ignoreNullValue()); + checkoutConfigManager.updateById(checkoutConfig); + } + + /** + * 保存分组配置 + */ + public void saveCheckoutGroupConfig(CheckoutGroupConfigParam param) { + checkoutGroupConfigManager.save(CheckoutGroupConfig.init(param)); + } + + /** + * 更新分组配置 + */ + public void updateCheckoutGroupConfig(CheckoutGroupConfigParam param) { + CheckoutGroupConfig checkoutGroupConfig = checkoutGroupConfigManager.findById(param.getId()) + .orElseThrow(() -> new DataNotExistException("分组配置不存在")); + BeanUtil.copyProperties(param, checkoutGroupConfig, CopyOptions.create().ignoreNullValue()); + checkoutGroupConfigManager.updateById(checkoutGroupConfig); + } + + /** + * 删除分组配置 + */ + public void deleteCheckoutGroupConfig(Long id) { + if (!checkoutGroupConfigManager.existedById(id)){ + throw new DataNotExistException("分组配置不存在"); + } + + if (checkoutItemConfigManager.existedByGroupId(id)){ + throw new OperationFailException("该分组下存在配置项,请先删除配置项"); + } + checkoutGroupConfigManager.deleteById(id); + } + + /** + * 保存配置项 + */ + public void saveCheckoutItemConfig(CheckoutItemConfigParam param) { + if (!checkoutGroupConfigManager.existedById(param.getGroupId())){ + throw new DataNotExistException("所属分组配置不存在"); + } + checkoutItemConfigManager.save(CheckoutItemConfig.init(param)); + + } + + /** + * 更新配置项 + */ + public void updateCheckoutItemConfig(CheckoutItemConfigParam param) { + CheckoutItemConfig checkoutItemConfig = checkoutItemConfigManager.findById(param.getId()) + .orElseThrow(() -> new DataNotExistException("配置项不存在")); + BeanUtil.copyProperties(param, checkoutItemConfig, CopyOptions.create().ignoreNullValue()); + checkoutItemConfigManager.updateById(checkoutItemConfig); + } + + /** + * 删除配置项 + */ + public void deleteCheckoutItemConfig(Long id) { + if (!checkoutItemConfigManager.existedById(id)){ + throw new DataNotExistException("配置项不存在"); + } + checkoutItemConfigManager.deleteById(id); + } + + /** + * 新增聚合配置 + */ + public void saveCheckoutAggregateConfig(CheckoutAggregateConfigParam param) { + // 判断支付类型是否已经存在 + if (checkoutAggregateConfigManager.existsByAppIdAndType(param.getAppId(), param.getType())){ + throw new RepetitiveOperationException("该应用已存在该聚合支付类型配置"); + } + checkoutAggregateConfigManager.save(CheckoutAggregateConfig.init(param)); + } + /** + * 更新聚合配置 + */ + public void updateCheckoutAggregateConfig(CheckoutAggregateConfigParam param) { + // 判断支付类型是否已经存在 + if (checkoutAggregateConfigManager.existsByAppIdAndType(param.getAppId(), param.getType(), param.getId())){ + throw new RepetitiveOperationException("该应用已存在该聚合支付类型配置"); + } + CheckoutAggregateConfig checkoutAggregateConfig = checkoutAggregateConfigManager.findById(param.getId()) + .orElseThrow(() -> new DataNotExistException("聚合支付配置不存在")); + BeanUtil.copyProperties(param, checkoutAggregateConfig, CopyOptions.create().ignoreNullValue()); + checkoutAggregateConfigManager.updateById(checkoutAggregateConfig); + } + + /** + * 删除聚合配置 + */ + public void deleteCheckoutAggregateConfig(Long id) { + if (!checkoutAggregateConfigManager.existedById(id)){ + throw new DataNotExistException("聚合支付配置不存在"); + } + checkoutAggregateConfigManager.deleteById(id); + } +}