diff --git a/_doc/Task.md b/_doc/Task.md index 14af9d638..1f0b8c73b 100644 --- a/_doc/Task.md +++ b/_doc/Task.md @@ -9,6 +9,16 @@ - [ ] 网关配套移动端开发 - [ ] 同步回调页 - [x] 微信通道添加单独的认证跳转地址, 处理它的特殊情况 +- [ ] 支付订单新增待支付状态, 此时不需要 +## 3.0.0.beta3 +- [ ] 收银台台功能 + - [ ] 支持通过订单信息生成收银台链接, + - 进入是查询订单状态, 判断是否完成 + - 在PC时候为收银台, + - 在H5时候为也是收银台, + - 在微信支付宝时为结算页, 可以直接发起支付 + - [ ] PC收银台, PC收银台可以生成聚合收银码, 也可以通道特殊方式的支付(微信扫码/支付宝PC支付) + - [ ] H5收银台只在浏览器中才会出现, 在软件中会直接跳转到结算页 ## bugs - [x] 修复 BigDecimal 类型数据序列化和签名异常问题 diff --git a/bootx-platform/bootx-platform-common/common-mybatis-plus/pom.xml b/bootx-platform/bootx-platform-common/common-mybatis-plus/pom.xml index a0bbcd760..2c5837e9b 100644 --- a/bootx-platform/bootx-platform-common/common-mybatis-plus/pom.xml +++ b/bootx-platform/bootx-platform-common/common-mybatis-plus/pom.xml @@ -24,6 +24,11 @@ mybatis-plus-spring-boot3-starter ${mybatis-plus.version} + + + com.baomidou + mybatis-plus-jsqlparser + com.github.yulichang @@ -56,5 +61,16 @@ + + + + com.baomidou + mybatis-plus-bom + ${mybatis-plus.version} + pom + import + + + diff --git a/bootx-platform/pom.xml b/bootx-platform/pom.xml index 3ac7e3f52..24be88833 100644 --- a/bootx-platform/pom.xml +++ b/bootx-platform/pom.xml @@ -31,7 +31,7 @@ 5.8.31 1.78.1 4.5.0 - 3.5.8 + 3.5.9 1.4.13 4.3.1 2.2.7 diff --git a/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/enums/CashierTypeEnum.java b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/enums/CashierCodeTypeEnum.java similarity index 58% rename from daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/enums/CashierTypeEnum.java rename to daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/enums/CashierCodeTypeEnum.java index 64e5189dd..d1bedccab 100644 --- a/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/enums/CashierTypeEnum.java +++ b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/enums/CashierCodeTypeEnum.java @@ -4,17 +4,17 @@ import lombok.AllArgsConstructor; import lombok.Getter; /** - * 收银台类型 - * 字典: cashier_type + * 收银码牌类型 + * 字典: cashier_code_type * @author xxm * @since 2024/9/28 */ @Getter @AllArgsConstructor -public enum CashierTypeEnum { +public enum CashierCodeTypeEnum { - WECHAT_PAY("wechat_pay", "微信收银台"), - ALIPAY("alipay", "支付宝收银台"), + WECHAT_PAY("wechat_pay", "微信码牌"), + ALIPAY("alipay", "支付宝码牌"), ; private final String code; diff --git a/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/enums/PayStatusEnum.java b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/enums/PayStatusEnum.java index 0e0677b80..c627fafce 100644 --- a/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/enums/PayStatusEnum.java +++ b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/enums/PayStatusEnum.java @@ -16,6 +16,7 @@ import java.util.Objects; @Getter @RequiredArgsConstructor public enum PayStatusEnum { + WAIT("wait","待支付"), PROGRESS("progress","支付中"), SUCCESS("success","成功"), CLOSE("close","支付关闭"), diff --git a/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/cashier/CashierCodeResult.java b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/cashier/CashierCodeResult.java new file mode 100644 index 000000000..49d1bf45a --- /dev/null +++ b/daxpay-single/daxpay-single-core/src/main/java/org/dromara/daxpay/core/result/cashier/CashierCodeResult.java @@ -0,0 +1,40 @@ +package org.dromara.daxpay.core.result.cashier; + +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.PayMethodEnum; + +/** + * 收银码牌信息和配置 + * @author xxm + * @since 2024/11/20 + */ +@Data +@Accessors(chain = true) +@Schema(title = "收银码牌信息和配置") +public class CashierCodeResult { + + /** 码牌名称 */ + @Schema(description = "码牌名称") + private String name; + + /** 模板编号 */ + @Schema(description = "模板编号") + private String templateCode; + + /** + * 支付通道 + * @see ChannelEnum + */ + @Schema(description = "支付通道") + private String channel; + + /** + * 支付方式 + * @see PayMethodEnum + */ + @Schema(description = "支付方式") + private String payMethod; +} diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/controller/cashier/CashierCodeController.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/controller/cashier/CashierCodeController.java new file mode 100644 index 000000000..25abefec0 --- /dev/null +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/controller/cashier/CashierCodeController.java @@ -0,0 +1,39 @@ +package org.dromara.daxpay.service.controller.cashier; + +import cn.bootx.platform.core.annotation.IgnoreAuth; +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 jakarta.validation.constraints.NotBlank; +import lombok.RequiredArgsConstructor; +import org.dromara.daxpay.core.result.cashier.CashierCodeResult; +import org.dromara.daxpay.service.service.config.CashierCodeConfigService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 支付码牌配置 + * @author xxm + * @since 2024/11/20 + */ +@Validated +@IgnoreAuth +@Tag(name = "支付码牌配置") +@RestController +@RequestMapping("/cashier/code") +@RequiredArgsConstructor +public class CashierCodeController { + private final CashierCodeConfigService cashierCodeConfigService; + + @Operation(summary = "根据code和类型查询码牌信息和配置") + @GetMapping("/findByCashierType") + public Result findByCashierType(@NotBlank(message = "码牌code不可为空") String cashierCode, + @NotBlank(message = "码牌类型不可为空") String cashierType){ + return Res.ok(cashierCodeConfigService.findByCashierType(cashierCode, cashierType)); + } + + +} 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 new file mode 100644 index 000000000..362b2cd2c --- /dev/null +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/controller/config/CashierCodeConfigController.java @@ -0,0 +1,131 @@ +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.CashierCodeConfigParam; +import org.dromara.daxpay.service.param.config.CashierCodeTypeConfigParam; +import org.dromara.daxpay.service.result.config.CashierCodeConfigResult; +import org.dromara.daxpay.service.result.config.CashierCodeTypeConfigResult; +import org.dromara.daxpay.service.service.config.CashierCodeConfigService; +import org.dromara.daxpay.service.service.config.CashierCodeTypeConfigService; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 收银码牌配置 + * @author xxm + * @since 2024/11/20 + */ +@RequestGroup(groupCode = "CashierCodeConfig", groupName = "收银码牌配置", moduleCode = "PayConfig", moduleName = "支付配置") +@Tag(name = "收银码牌配置") +@RestController +@RequestMapping("/cashier/code/config") +@RequiredArgsConstructor +public class CashierCodeConfigController { + private final CashierCodeConfigService codeConfigService; + private final CashierCodeTypeConfigService codeTypeConfigService; + + @RequestPath("根据AppId查询码牌列表") + @Operation(summary = "根据AppId查询码牌列表") + @GetMapping("/findAllByAppId") + public Result> findAllByAppId(String appId){ + return Res.ok(codeConfigService.findAllByAppId(appId)); + } + + @RequestPath("根据id查询码牌信息") + @Operation(summary = "根据id查询码牌信息") + @GetMapping("/findById") + public Result findById(Long id){ + return Res.ok(codeConfigService.findById(id)); + } + + @RequestPath("码牌配置保存") + @Operation(summary = "码牌配置保存") + @PostMapping("/save") + public Result save(@RequestBody CashierCodeConfigParam param) { + codeConfigService.save(param); + return Res.ok(); + } + + @RequestPath("码牌配置更新") + @Operation(summary = "码牌配置更新") + @PostMapping("/update") + public Result update(@RequestBody CashierCodeConfigParam param) { + codeConfigService.update(param); + return Res.ok(); + } + + @RequestPath("码牌配置删除") + @Operation(summary = "码牌配置删除") + @PostMapping("/delete") + public Result delete(Long id){ + codeConfigService.delete(id); + return Res.ok(); + } + + @RequestPath("获取码牌地址") + @Operation(summary = "获取码牌地址") + @GetMapping("/getCashierCodeUrl") + public Result getCashierCodeUrl(Long id){ + return Res.ok(codeConfigService.getCashierCodeUrl(id)); + } + + @RequestPath("获取码牌各类型配置列表") + @Operation(summary = "获取码牌各类型配置列表") + @GetMapping("/type/findAll") + public Result> findAllByCashierCodeId(Long cashierCodeId){ + return Res.ok(codeTypeConfigService.findByAppId(cashierCodeId)); + } + + @RequestPath("获取码牌类型配置详情") + @Operation(summary = "获取码牌各类型配置详情") + @GetMapping("/type/findById") + public Result findTypeById(Long id){ + return Res.ok(codeTypeConfigService.findById(id)); + } + + @RequestPath("码牌类型配置保存") + @Operation(summary = "码牌类型配置保存") + @PostMapping("/type/save") + public Result saveType(@RequestBody CashierCodeTypeConfigParam param){ + codeTypeConfigService.save(param); + return Res.ok(); + } + + @RequestPath("码牌类型配置更新") + @Operation(summary = "码牌类型配置更新") + @PostMapping("/type/update") + public Result updateType(@RequestBody CashierCodeTypeConfigParam param){ + codeTypeConfigService.update(param); + return Res.ok(); + } + + @RequestPath("码牌类型配置删除") + @Operation(summary = "码牌类型配置删除") + @PostMapping("/type/delete") + public Result deleteType(Long id){ + codeTypeConfigService.delete(id); + return Res.ok(); + } + + @RequestPath("码牌类型是否存在") + @Operation(summary = "码牌类型是否存在") + @GetMapping("/type/exists") + public Result existsByType(String type, Long cashierCodeId){ + return Res.ok(codeTypeConfigService.existsByType(type, cashierCodeId)); + } + + @RequestPath("码牌类型是否存在(不包括自身)") + @Operation(summary = "码牌类型是否存在(不包括自身)") + @GetMapping("/type/existsNotId") + public Result existsByTypeNotId(String type, Long cashierCodeId, Long id){ + return Res.ok(codeTypeConfigService.existsByType(type, cashierCodeId, id)); + } + +} diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/controller/config/ChannelCashierConfigController.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/controller/config/ChannelCashierConfigController.java deleted file mode 100644 index e0d3487b7..000000000 --- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/controller/config/ChannelCashierConfigController.java +++ /dev/null @@ -1,88 +0,0 @@ -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 org.dromara.daxpay.service.param.config.ChannelCashierConfigParam; -import org.dromara.daxpay.service.result.config.ChannelCashierConfigResult; -import org.dromara.daxpay.service.service.config.ChannelCashierConfigService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * - * @author xxm - * @since 2024/9/28 - */ -@Tag(name = "通道支付收银台配置") -@RestController -@RequestGroup(groupCode = "ChannelCashierConfig", groupName = "通道支付收银台配置", moduleCode = "PayConfig", moduleName = "支付配置") -@RequestMapping("/channel/cashier/config") -@RequiredArgsConstructor -public class ChannelCashierConfigController { - private final ChannelCashierConfigService channelCashierConfigService; - - @RequestPath("配置列表") - @Operation(summary = "配置列表") - @GetMapping("/findByAppId") - public Result> findByAppId(String appId) { - return Res.ok(channelCashierConfigService.findByAppId(appId)); - } - - @RequestPath("配置详情") - @Operation(summary = "配置详情") - @GetMapping("/findById") - public Result findById(Long id) { - return Res.ok(channelCashierConfigService.findById(id)); - } - - @RequestPath("配置保存") - @Operation(summary = "配置保存") - @PostMapping("/save") - public Result save(@RequestBody ChannelCashierConfigParam param) { - channelCashierConfigService.save(param); - return Res.ok(); - } - - @RequestPath("配置更新") - @Operation(summary = "配置更新") - @PostMapping("/update") - public Result update(@RequestBody ChannelCashierConfigParam param) { - channelCashierConfigService.update(param); - return Res.ok(); - } - - @RequestPath("配置是否存在") - @Operation(summary = "配置是否存在") - @GetMapping("/existsByType") - public Result existsByType(String type, String appId) { - return Res.ok(channelCashierConfigService.existsByType(type, appId)); - } - - @RequestPath("配置是否存在(不包括自身)") - @Operation(summary = "配置是否存在(不包括自身)") - @GetMapping("/existsByTypeNotId") - public Result existsByTypeNotId(String type, String appId, Long id) { - return Res.ok(channelCashierConfigService.existsByType(type, appId, id)); - } - - @RequestPath("配置删除") - @Operation(summary = "配置删除") - @PostMapping("/delete") - public Result delete(Long id) { - channelCashierConfigService.delete(id); - return Res.ok(); - } - - @RequestPath("获取码牌地址") - @Operation(summary = "获取码牌地址") - @GetMapping("/qrCodeUrl") - public Result qrCodeUrl(String appId) { - return Res.ok(channelCashierConfigService.qrCodeUrl(appId)); - } -} diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/controller/unipay/ChannelCashierController.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/controller/unipay/ChannelCashierController.java index 7a6a9c1dd..e80811e65 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/controller/unipay/ChannelCashierController.java +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/controller/unipay/ChannelCashierController.java @@ -1,22 +1,11 @@ package org.dromara.daxpay.service.controller.unipay; import cn.bootx.platform.core.annotation.IgnoreAuth; -import cn.bootx.platform.core.rest.Res; -import cn.bootx.platform.core.rest.result.Result; -import cn.bootx.platform.core.util.ValidationUtil; -import org.dromara.daxpay.core.param.cashier.CashierAuthCodeParam; -import org.dromara.daxpay.core.param.cashier.CashierAuthUrlParam; -import org.dromara.daxpay.core.param.cashier.CashierPayParam; -import org.dromara.daxpay.core.result.assist.AuthResult; -import org.dromara.daxpay.core.result.trade.pay.PayResult; -import org.dromara.daxpay.service.result.config.ChannelCashierConfigResult; -import org.dromara.daxpay.service.service.assist.PaymentAssistService; -import org.dromara.daxpay.service.service.cashier.ChannelCashierService; -import org.dromara.daxpay.service.service.config.ChannelCashierConfigService; -import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.*; +import org.dromara.daxpay.service.service.assist.PaymentAssistService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; /** * 通道收银台服务 @@ -26,45 +15,41 @@ import org.springframework.web.bind.annotation.*; @IgnoreAuth @Tag(name = "通道收银台服务") @RestController -@RequestMapping("/unipay/ext/channel/cashier") +@RequestMapping("/unipay/cashier/code") @RequiredArgsConstructor public class ChannelCashierController { - private final ChannelCashierService channelCashierService; - private final PaymentAssistService paymentAssistService; - private final ChannelCashierConfigService cashierConfigService; - - @Operation(summary = "获取收银台信息") - @GetMapping("/getCashierInfo") - public Result getCashierInfo(String cashierType,String appId){ - paymentAssistService.initMchApp(appId); - return Res.ok(cashierConfigService.findByCashierType(cashierType)); - } - - - @Operation(summary = "获取收银台所需授权链接, 用于获取OpenId一类的信息") - @PostMapping("/generateAuthUrl") - public Result generateAuthUrl(@RequestBody CashierAuthUrlParam param){ - ValidationUtil.validateParam(param); - paymentAssistService.initMchApp(param.getAppId()); - return Res.ok(channelCashierService.generateAuthUrl(param)); - } - - @Operation(summary = "授权获取结果") - @PostMapping("/auth") - public Result auth(@RequestBody CashierAuthCodeParam param){ - ValidationUtil.validateParam(param); - paymentAssistService.initMchApp(param.getAppId()); - return Res.ok(channelCashierService.auth(param)); - } - - @Operation(summary = "发起支付") - @PostMapping("/pay") - public Result cashierPay(@RequestBody CashierPayParam param){ - ValidationUtil.validateParam(param); - paymentAssistService.initMchApp(param.getAppId()); - return Res.ok(channelCashierService.cashierPay(param)); - } +// @Operation(summary = "获取收银台信息") +// @GetMapping("/getCashierInfo") +// public Result getCashierInfo(String cashierType,String appId){ +// paymentAssistService.initMchApp(appId); +// return Res.ok(cashierConfigService.findByCashierType(cashierType)); +// } +// +// +// @Operation(summary = "获取收银台所需授权链接, 用于获取OpenId一类的信息") +// @PostMapping("/generateAuthUrl") +// public Result generateAuthUrl(@RequestBody CashierAuthUrlParam param){ +// ValidationUtil.validateParam(param); +// paymentAssistService.initMchApp(param.getAppId()); +// return Res.ok(channelCashierService.generateAuthUrl(param)); +// } +// +// @Operation(summary = "授权获取结果") +// @PostMapping("/auth") +// public Result auth(@RequestBody CashierAuthCodeParam param){ +// ValidationUtil.validateParam(param); +// paymentAssistService.initMchApp(param.getAppId()); +// return Res.ok(channelCashierService.auth(param)); +// } +// +// @Operation(summary = "发起支付") +// @PostMapping("/pay") +// public Result cashierPay(@RequestBody CashierPayParam param){ +// ValidationUtil.validateParam(param); +// paymentAssistService.initMchApp(param.getAppId()); +// return Res.ok(channelCashierService.cashierPay(param)); +// } } diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/convert/config/CashierCodeConfigConvert.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/convert/config/CashierCodeConfigConvert.java new file mode 100644 index 000000000..dc28b9479 --- /dev/null +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/convert/config/CashierCodeConfigConvert.java @@ -0,0 +1,22 @@ +package org.dromara.daxpay.service.convert.config; + +import org.dromara.daxpay.service.entity.config.CashierCodeConfig; +import org.dromara.daxpay.service.param.config.CashierCodeConfigParam; +import org.dromara.daxpay.service.result.config.CashierCodeConfigResult; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 收银台码牌配置 + * @author xxm + * @since 2024/11/20 + */ +@Mapper +public interface CashierCodeConfigConvert { + CashierCodeConfigConvert CONVERT = Mappers.getMapper(CashierCodeConfigConvert.class); + + CashierCodeConfig toEntity(CashierCodeConfigParam in); + + CashierCodeConfigResult toResult(CashierCodeConfig in); + +} diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/convert/config/CashierCodeTypeConfigConvert.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/convert/config/CashierCodeTypeConfigConvert.java new file mode 100644 index 000000000..b6c90b50e --- /dev/null +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/convert/config/CashierCodeTypeConfigConvert.java @@ -0,0 +1,21 @@ +package org.dromara.daxpay.service.convert.config; + +import org.dromara.daxpay.service.entity.config.CashierCodeTypeConfig; +import org.dromara.daxpay.service.param.config.CashierCodeTypeConfigParam; +import org.dromara.daxpay.service.result.config.CashierCodeTypeConfigResult; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 收银台码牌配置 + * @author xxm + * @since 2024/11/20 + */ +@Mapper +public interface CashierCodeTypeConfigConvert { + CashierCodeTypeConfigConvert CONVERT = Mappers.getMapper(CashierCodeTypeConfigConvert.class); + + CashierCodeTypeConfigResult toResult(CashierCodeTypeConfig in); + + CashierCodeTypeConfig toEntity(CashierCodeTypeConfigParam in); +} diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/convert/config/ChannelCashierConfigConvert.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/convert/config/ChannelCashierConfigConvert.java deleted file mode 100644 index 335289a18..000000000 --- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/convert/config/ChannelCashierConfigConvert.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.dromara.daxpay.service.convert.config; - -import org.dromara.daxpay.service.entity.config.ChannelCashierConfig; -import org.dromara.daxpay.service.param.config.ChannelCashierConfigParam; -import org.dromara.daxpay.service.result.config.ChannelCashierConfigResult; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -/** - * 通道收银台配置 - * @author xxm - * @since 2024/9/28 - */ -@Mapper -public interface ChannelCashierConfigConvert { - ChannelCashierConfigConvert CONVERT = Mappers.getMapper(ChannelCashierConfigConvert.class); - - ChannelCashierConfig toEntity(ChannelCashierConfigParam param); - - ChannelCashierConfigResult toResult(ChannelCashierConfig channelCashierConfig); -} diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/CashierCodeConfigManager.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/CashierCodeConfigManager.java new file mode 100644 index 000000000..9bb33f5b0 --- /dev/null +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/CashierCodeConfigManager.java @@ -0,0 +1,38 @@ +package org.dromara.daxpay.service.dao.config; + +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.daxpay.service.entity.config.CashierCodeConfig; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +/** + * + * @author xxm + * @since 2024/11/20 + */ +@Slf4j +@Repository +@RequiredArgsConstructor +public class CashierCodeConfigManager extends BaseManager { + + /** + * 根据AppId查询列表 + */ + public List findAllByAppId(String appId) { + return this.lambdaQuery() + .eq(CashierCodeConfig::getAppId, appId) + .list(); + } + + /** + * 根据Code查询码牌信息 + */ + public Optional findByCode(String code) { + return findByField(CashierCodeConfig::getCode, code); + } + +} diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/CashierCodeConfigMapper.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/CashierCodeConfigMapper.java new file mode 100644 index 000000000..a56650831 --- /dev/null +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/CashierCodeConfigMapper.java @@ -0,0 +1,14 @@ +package org.dromara.daxpay.service.dao.config; + +import com.github.yulichang.base.MPJBaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.dromara.daxpay.service.entity.config.CashierCodeConfig; + +/** + * 收银台码牌配置 + * @author xxm + * @since 2024/11/20 + */ +@Mapper +public interface CashierCodeConfigMapper extends MPJBaseMapper { +} diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/CashierCodeTypeConfigManager.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/CashierCodeTypeConfigManager.java new file mode 100644 index 000000000..5721741c1 --- /dev/null +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/CashierCodeTypeConfigManager.java @@ -0,0 +1,73 @@ +package org.dromara.daxpay.service.dao.config; + +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.daxpay.service.common.context.MchAppLocal; +import org.dromara.daxpay.service.common.local.PaymentContextLocal; +import org.dromara.daxpay.service.entity.config.CashierCodeTypeConfig; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +/** + * + * @author xxm + * @since 2024/11/20 + */ +@Slf4j +@Repository +@RequiredArgsConstructor +public class CashierCodeTypeConfigManager extends BaseManager { + + /** + * 根据码牌ID查询列表 + */ + public List findAllByCashierCode(Long cashierCodeId) { + return this.lambdaQuery() + .eq(CashierCodeTypeConfig::getCashierCodeId, cashierCodeId) + .list(); + } + + /** + * 判断类型是否存在 + */ + public boolean existsByType(String type, Long cashierCodeId) { + return this.lambdaQuery() + .eq(CashierCodeTypeConfig::getType, type) + .eq(CashierCodeTypeConfig::getCashierCodeId,cashierCodeId) + .exists(); + } + /** + * 判断类型是否存在 + */ + public boolean existsByType(String type, Long cashierCodeId, Long id) { + return this.lambdaQuery() + .eq(CashierCodeTypeConfig::getType, type) + .eq(CashierCodeTypeConfig::getCashierCodeId,cashierCodeId) + .ne(CashierCodeTypeConfig::getId,id) + .exists(); + } + + /** + * 根据类型查询 + */ + public Optional findByCashierType(Long cashierCodeId, String cashierType) { + MchAppLocal mchAppInfo = PaymentContextLocal.get().getMchAppInfo(); + return lambdaQuery() + .eq(CashierCodeTypeConfig::getCashierCodeId, cashierCodeId) + .eq(CashierCodeTypeConfig::getType, cashierType) + .eq(CashierCodeTypeConfig::getAppId, mchAppInfo.getAppId()) + .oneOpt(); + } + + /** + * 根据码牌ID删除对应的类型配置 + */ + public void deleteByCashierCode(Long cashierCodeId) { + this.lambdaUpdate() + .eq(CashierCodeTypeConfig::getCashierCodeId, cashierCodeId) + .remove(); + } +} diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/CashierCodeTypeConfigMapper.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/CashierCodeTypeConfigMapper.java new file mode 100644 index 000000000..43e31ce85 --- /dev/null +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/CashierCodeTypeConfigMapper.java @@ -0,0 +1,14 @@ +package org.dromara.daxpay.service.dao.config; + +import com.github.yulichang.base.MPJBaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.dromara.daxpay.service.entity.config.CashierCodeTypeConfig; + +/** + * 渠道码类型配置表 Mapper 接口 + * @author xxm + * @since 2024/11/20 + */ +@Mapper +public interface CashierCodeTypeConfigMapper extends MPJBaseMapper { +} diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/ChannelCashierConfigManage.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/ChannelCashierConfigManage.java deleted file mode 100644 index 3cc9037b3..000000000 --- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/ChannelCashierConfigManage.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.dromara.daxpay.service.dao.config; - -import cn.bootx.platform.common.mybatisplus.impl.BaseManager; -import org.dromara.daxpay.service.common.context.MchAppLocal; -import org.dromara.daxpay.service.common.entity.MchAppBaseEntity; -import org.dromara.daxpay.service.common.local.PaymentContextLocal; -import org.dromara.daxpay.service.entity.config.ChannelCashierConfig; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Repository; - -import java.util.List; -import java.util.Optional; - -/** - * 通道收银台配置 - * @author xxm - * @since 2024/9/28 - */ -@Slf4j -@Repository -@RequiredArgsConstructor -public class ChannelCashierConfigManage extends BaseManager { - - /** - * 根据AppId查询列表 - */ - public List findAllByAppId(String appId) { - return this.lambdaQuery() - .eq(ChannelCashierConfig::getAppId, appId) - .list(); - } - - /** - * 判断类型是否存在 - */ - public boolean existsByType(String type, String appId) { - return this.lambdaQuery() - .eq(ChannelCashierConfig::getCashierType, type) - .eq(MchAppBaseEntity::getAppId,appId) - .exists(); - } - /** - * 判断类型是否存在 - */ - public boolean existsByType(String type, String appId, Long id) { - return this.lambdaQuery() - .eq(ChannelCashierConfig::getCashierType, type) - .eq(MchAppBaseEntity::getAppId,appId) - .ne(ChannelCashierConfig::getId,id) - .exists(); - } - - /** - * 根据类型查询 - */ - public Optional findByCashierType(String cashierType) { - MchAppLocal mchAppInfo = PaymentContextLocal.get().getMchAppInfo(); - return lambdaQuery().eq(ChannelCashierConfig::getCashierType, cashierType) - .eq(ChannelCashierConfig::getAppId, mchAppInfo.getAppId()) - .oneOpt(); - } -} diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/ChannelCashierConfigMapper.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/ChannelCashierConfigMapper.java deleted file mode 100644 index 79e5a485f..000000000 --- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/dao/config/ChannelCashierConfigMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.dromara.daxpay.service.dao.config; - -import org.dromara.daxpay.service.entity.config.ChannelCashierConfig; -import com.github.yulichang.base.MPJBaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * 通道收银台配置 - * @author xxm - * @since 2024/9/28 - */ -@Mapper -public interface ChannelCashierConfigMapper extends MPJBaseMapper { -} diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/entity/config/CashierCodeConfig.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/entity/config/CashierCodeConfig.java new file mode 100644 index 000000000..8794cb154 --- /dev/null +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/entity/config/CashierCodeConfig.java @@ -0,0 +1,53 @@ +package org.dromara.daxpay.service.entity.config; + +import cn.bootx.platform.common.mybatisplus.function.ToResult; +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +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.CashierCodeConfigConvert; +import org.dromara.daxpay.service.param.config.CashierCodeConfigParam; +import org.dromara.daxpay.service.result.config.CashierCodeConfigResult; + +/** + * 收银码牌配置 + * @author xxm + * @since 2024/11/20 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@TableName("pay_cashier_code_config") +public class CashierCodeConfig extends MchAppBaseEntity implements ToResult { + + /** 码牌名称 */ + private String name; + + /** 码牌code */ + @TableField(updateStrategy = FieldStrategy.NEVER) + private String code; + + /** 模板编号 */ + private String templateCode; + + /** 是否启用 */ + private boolean enable; + + /** 备注 */ + private String remark; + + public static CashierCodeConfig init(CashierCodeConfigParam param) { + return CashierCodeConfigConvert.CONVERT.toEntity(param); + } + + /** + * 转换 + */ + @Override + public CashierCodeConfigResult toResult() { + return CashierCodeConfigConvert.CONVERT.toResult(this); + } +} diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/entity/config/CashierCodeTypeConfig.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/entity/config/CashierCodeTypeConfig.java new file mode 100644 index 000000000..a96cce2c6 --- /dev/null +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/entity/config/CashierCodeTypeConfig.java @@ -0,0 +1,65 @@ +package org.dromara.daxpay.service.entity.config; + +import cn.bootx.platform.common.mybatisplus.function.ToResult; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.dromara.daxpay.core.enums.CashierCodeTypeEnum; +import org.dromara.daxpay.core.enums.ChannelEnum; +import org.dromara.daxpay.core.enums.PayMethodEnum; +import org.dromara.daxpay.service.common.entity.MchAppBaseEntity; +import org.dromara.daxpay.service.convert.config.CashierCodeTypeConfigConvert; +import org.dromara.daxpay.service.param.config.CashierCodeTypeConfigParam; +import org.dromara.daxpay.service.result.config.CashierCodeTypeConfigResult; + +/** + * 特定类型码牌配置 + * @author xxm + * @since 2024/11/20 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@TableName("pay_cashier_code_type_config") +public class CashierCodeTypeConfig extends MchAppBaseEntity implements ToResult { + + /** 码牌ID */ + private Long cashierCodeId; + + /** + * 收银台类型 + * @see CashierCodeTypeEnum + */ + private String type; + + /** + * 支付通道 + * @see ChannelEnum + */ + private String channel; + + /** + * 支付方式 + * @see PayMethodEnum + */ + private String payMethod; + + /** 是否开启分账 */ + private boolean allocation; + + /** 自动分账 */ + private boolean autoAllocation; + + public static CashierCodeTypeConfig init(CashierCodeTypeConfigParam param) { + return CashierCodeTypeConfigConvert.CONVERT.toEntity(param); + } + + /** + * 转换 + */ + @Override + public CashierCodeTypeConfigResult toResult() { + return CashierCodeTypeConfigConvert.CONVERT.toResult(this); + } +} diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/entity/config/ChannelCashierConfig.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/entity/config/ChannelCashierConfig.java deleted file mode 100644 index b5febf236..000000000 --- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/entity/config/ChannelCashierConfig.java +++ /dev/null @@ -1,67 +0,0 @@ -package org.dromara.daxpay.service.entity.config; - -import cn.bootx.platform.common.mybatisplus.function.ToResult; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; -import org.dromara.daxpay.core.enums.CashierTypeEnum; -import org.dromara.daxpay.core.enums.ChannelEnum; -import org.dromara.daxpay.core.enums.PayMethodEnum; -import org.dromara.daxpay.service.common.entity.MchAppBaseEntity; -import org.dromara.daxpay.service.convert.config.ChannelCashierConfigConvert; -import org.dromara.daxpay.service.param.config.ChannelCashierConfigParam; -import org.dromara.daxpay.service.result.config.ChannelCashierConfigResult; - -/** - * 通道收银台配置 - * @author xxm - * @since 2024/9/28 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@TableName("pay_channel_cashier_config") -public class ChannelCashierConfig extends MchAppBaseEntity implements ToResult { - - /** - * 收银台类型 - * @see CashierTypeEnum - */ - private String cashierType; - - /** - * 收银台名称 - */ - private String cashierName; - - /** - * 支付通道 - * @see ChannelEnum - */ - private String channel; - - /** - * 支付方式 - * @see PayMethodEnum - */ - private String payMethod; - - /** 是否开启分账 */ - private Boolean allocation; - - /** 自动分账 */ - private Boolean autoAllocation; - - /** 备注 */ - private String remark; - - public static ChannelCashierConfig init(ChannelCashierConfigParam param){ - return ChannelCashierConfigConvert.CONVERT.toEntity(param); - } - - @Override - public ChannelCashierConfigResult toResult() { - return ChannelCashierConfigConvert.CONVERT.toResult(this); - } -} diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/entity/constant/ChannelConst.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/entity/constant/ChannelConst.java index 622c89e4c..096a5d64d 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/entity/constant/ChannelConst.java +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/entity/constant/ChannelConst.java @@ -29,6 +29,9 @@ public class ChannelConst extends MpIdEntity implements ToResult new DataNotExistException("收银码牌配置不存在")); + BeanUtil.copyProperties(param, channelCashierConfig, CopyOptions.create().ignoreNullValue()); + cashierCodeConfigManager.updateById(channelCashierConfig); + } + + /** + * 列表 + */ + public List findAllByAppId(String appId) { + return MpUtil.toListResult(cashierCodeConfigManager.findAllByAppId(appId)); + } + + /** + * 查询详情 + */ + public CashierCodeConfigResult findById(Long id) { + return cashierCodeConfigManager.findById(id).map(CashierCodeConfig::toResult).orElseThrow(() -> new DataNotExistException("收银码牌配置不存在")); + } + + /** + * 删除 + */ + @Transactional(rollbackFor = Exception.class) + public void delete(Long id) { + if (cashierCodeConfigManager.existedById(id)){ + throw new DataNotExistException("收银码牌配置不存在"); + } + // 删除类型配置 + cashierCodeTypeConfigManager.deleteByCashierCode(id); + cashierCodeConfigManager.deleteById(id); + } + + /** + * 获取码牌地址 + */ + public String getCashierCodeUrl(Long id) { + var codeConfig= cashierCodeConfigManager.findById(id) + .orElseThrow(() -> new DataNotExistException("收银码牌配置不存在")); + PlatformConfig platformConfig = platformConfigService.getConfig(); + String serverUrl = platformConfig.getGatewayMobileUrl(); + return StrUtil.format("{}/cashier/code/{}", serverUrl, codeConfig.getCode()); + } + + /** + * 根据码牌code和类型查询信息和配置 + */ + public CashierCodeResult findByCashierType(String cashierCode, String cashierType) { + CashierCodeConfig codeConfig = cashierCodeConfigManager.findByCode(cashierCode) + .orElseThrow(() -> new DataNotExistException("支付码牌不存在")); + // 是否启用 + if (!codeConfig.isEnable()) { + throw new ConfigNotEnableException("支付码牌已禁用"); + } + + CashierCodeTypeConfig codeTypeConfig = cashierCodeTypeConfigManager.findByCashierType(codeConfig.getId(), cashierType) + .orElseThrow(() -> new DataNotExistException("收银码牌配置不存在")); + return new CashierCodeResult() + .setChannel(codeTypeConfig.getChannel()) + .setPayMethod(codeTypeConfig.getPayMethod()) + .setName(codeConfig.getName()) + .setTemplateCode(codeConfig.getTemplateCode()); + } + +} 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/CashierCodeTypeConfigService.java new file mode 100644 index 000000000..4ee86e376 --- /dev/null +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/config/CashierCodeTypeConfigService.java @@ -0,0 +1,100 @@ +package org.dromara.daxpay.service.service.config; + +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.core.exception.DataNotExistException; +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.service.dao.config.CashierCodeConfigManager; +import org.dromara.daxpay.service.dao.config.CashierCodeTypeConfigManager; +import org.dromara.daxpay.service.entity.config.CashierCodeConfig; +import org.dromara.daxpay.service.entity.config.CashierCodeTypeConfig; +import org.dromara.daxpay.service.param.config.CashierCodeTypeConfigParam; +import org.dromara.daxpay.service.result.config.CashierCodeTypeConfigResult; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 收银码牌码牌类型配置 + * @author xxm + * @since 2024/11/20 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class CashierCodeTypeConfigService { + private final CashierCodeTypeConfigManager codeTypeConfigManager; + private final CashierCodeConfigManager codeConfigManager; + + /** + * 列表 + */ + public List findByAppId(Long cashierCodeId) { + return MpUtil.toListResult(codeTypeConfigManager.findAllByCashierCode(cashierCodeId)); + } + + /** + * 查询详情 + */ + public CashierCodeTypeConfigResult findById(Long id) { + return codeTypeConfigManager.findById(id).map(CashierCodeTypeConfig::toResult).orElseThrow(() -> new DataNotExistException("收银码牌配置不存在")); + } + + /** + * 判断类型是否存在 + */ + public boolean existsByType(String type, Long cashierCodeId) { + return codeTypeConfigManager.existsByType(type, cashierCodeId); + } + + /** + * 判断类型是否存在 + */ + public boolean existsByType(String type, Long cashierCodeId, Long id) { + return codeTypeConfigManager.existsByType(type, cashierCodeId, id); + } + + /** + * 添加 + */ + public void save(CashierCodeTypeConfigParam param) { + CashierCodeConfig codeConfig = codeConfigManager.findById(param.getCashierCodeId()) + .orElseThrow(() -> new DataNotExistException("收银码牌配置不存在")); + // 收银码牌类型不能重复 + boolean existed = codeTypeConfigManager.existsByType(param.getType(), param.getId()); + if (existed){ + throw new DataNotExistException("收银码牌类型不可重复配置"); + } + + CashierCodeTypeConfig entity = CashierCodeTypeConfig.init(param); + entity.setAppId(codeConfig.getAppId()); + codeTypeConfigManager.save(entity); + } + + /** + * 更新 + */ + public void update(CashierCodeTypeConfigParam param) { + // 收银码牌类型不能重复 + boolean existed = codeTypeConfigManager.existsByType(param.getType(), param.getId(), param.getId()); + if (existed){ + throw new DataNotExistException("收银码牌类型不可重复配置"); + } + var channelCashierConfig = codeTypeConfigManager.findById(param.getId()) + .orElseThrow(() -> new DataNotExistException("收银码牌配置不存在")); + BeanUtil.copyProperties(param, channelCashierConfig, CopyOptions.create().ignoreNullValue()); + codeTypeConfigManager.updateById(channelCashierConfig); + } + /** + * 删除 + */ + public void delete(Long id) { + if (codeTypeConfigManager.existedById(id)){ + throw new DataNotExistException("该码牌类型配置不存在"); + } + codeTypeConfigManager.deleteById(id); + } +} + diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/config/ChannelCashierConfigService.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/config/ChannelCashierConfigService.java deleted file mode 100644 index 92f55c3e7..000000000 --- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/config/ChannelCashierConfigService.java +++ /dev/null @@ -1,115 +0,0 @@ -package org.dromara.daxpay.service.service.config; - -import cn.bootx.platform.common.mybatisplus.util.MpUtil; -import cn.bootx.platform.core.exception.DataNotExistException; -import org.dromara.daxpay.service.dao.config.ChannelCashierConfigManage; -import org.dromara.daxpay.service.dao.merchant.MchAppManager; -import org.dromara.daxpay.service.entity.config.ChannelCashierConfig; -import org.dromara.daxpay.service.entity.config.PlatformConfig; -import org.dromara.daxpay.service.entity.merchant.MchApp; -import org.dromara.daxpay.service.param.config.ChannelCashierConfigParam; -import org.dromara.daxpay.service.result.config.ChannelCashierConfigResult; -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.bean.copier.CopyOptions; -import cn.hutool.core.util.StrUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.util.List; - -/** - * 通道支付收银台配置 - * @author xxm - * @since 2024/9/28 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class ChannelCashierConfigService { - private final MchAppManager mchAppManager; - - private final ChannelCashierConfigManage cashierConfigManage; - - private final PlatformConfigService platformConfigService; - - /** - * 列表 - */ - public List findByAppId(String appId) { - return MpUtil.toListResult(cashierConfigManage.findAllByAppId(appId)); - } - - /** - * 查询详情 - */ - public ChannelCashierConfigResult findById(Long id) { - return cashierConfigManage.findById(id).map(ChannelCashierConfig::toResult).orElseThrow(() -> new DataNotExistException("通道支付收银台配置不存在")); - } - - /** - * 根据类型查询 - */ - public ChannelCashierConfigResult findByCashierType(String cashierType) { - return cashierConfigManage.findByCashierType(cashierType) - .map(ChannelCashierConfig::toResult) - .orElseThrow(() -> new DataNotExistException("通道支付收银台配置不存在")); - } - - /** - * 判断类型是否存在 - */ - public boolean existsByType(String type, String appId) { - return cashierConfigManage.existsByType(type, appId); - } - - /** - * 判断类型是否存在 - */ - public boolean existsByType(String type, String appId, Long id) { - return cashierConfigManage.existsByType(type, appId, id); - } - - /** - * 添加 - */ - public void save(ChannelCashierConfigParam param) { - // 收银台类型不能重复 - boolean existed = cashierConfigManage.existedByField(ChannelCashierConfig::getCashierType, param.getCashierType()); - if (existed){ - throw new DataNotExistException("收银台类型不可重复配置"); - } - cashierConfigManage.save(ChannelCashierConfig.init(param)); - } - - /** - * 更新 - */ - public void update(ChannelCashierConfigParam param) { - // 收银台类型不能重复 - boolean existed = cashierConfigManage.existedByField(ChannelCashierConfig::getCashierType, param.getCashierType(), param.getId()); - if (existed){ - throw new DataNotExistException("收银台类型不可重复配置"); - } - ChannelCashierConfig channelCashierConfig = cashierConfigManage.findById(param.getId()) - .orElseThrow(() -> new DataNotExistException("通道支付收银台配置不存在")); - BeanUtil.copyProperties(param, channelCashierConfig, CopyOptions.create().ignoreNullValue()); - cashierConfigManage.updateById(channelCashierConfig); - } - /** - * 删除 - */ - public void delete(Long id) { - cashierConfigManage.deleteById(id); - } - - /** - * 获取码牌地址 - */ - public String qrCodeUrl(String appId) { - MchApp mchApp = mchAppManager.findByAppId(appId).orElseThrow(() -> new DataNotExistException("未找到指定的应用配置")); - PlatformConfig platformConfig = platformConfigService.getConfig(); - String serverUrl = platformConfig.getGatewayMobileUrl(); - return StrUtil.format("{}/channel/cashier/{}", serverUrl, mchApp.getAppId()); - } -}