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());
- }
-}