From 1b19520f412f7d9f4314dce767c43b6f238712f3 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Thu, 29 May 2025 10:16:34 +0800 Subject: [PATCH 1/7] =?UTF-8?q?feat:=E9=A5=AD=E5=8D=A1=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E9=A5=AD=E5=8D=A1=E6=98=AF=E5=90=A6=E5=86=BB?= =?UTF-8?q?=E7=BB=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hard/service/impl/HardApiServiceImpl.java | 5 + .../entity/api/ThirdPayLogEntity.java | 139 +++++++++--------- .../impl/pay/ThirdPayApiServiceImpl.java | 11 +- .../java/com/bsd/pjcloud/admin/PayTest.java | 10 +- .../controller/mch/MchManageController.java | 8 +- 5 files changed, 97 insertions(+), 76 deletions(-) diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardApiServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardApiServiceImpl.java index 4dc18aa4a..6bc2304cf 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardApiServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardApiServiceImpl.java @@ -5,6 +5,7 @@ import com.bsd.pjcloud.admin.api.dto.UserInfo; import com.bsd.pjcloud.admin.api.entity.SysUser; import com.bsd.pjcloud.admin.api.feign.RemoteUserService; import com.bsd.pjcloud.common.core.constant.enums.MerchantTypeEnum; +import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum; import com.bsd.pjcloud.hard.api.constant.HardTypeEnum; import com.bsd.pjcloud.hard.api.vo.android.HardAdUserVo; import com.bsd.pjcloud.hard.service.HardApiService; @@ -67,6 +68,10 @@ public class HardApiServiceImpl implements HardApiService { // 查询钱包 WalletManageEntity wallet = remoteWalletService.getWalletByCardNumber(card).getData(); if (ObjectUtil.isEmpty(wallet)) return null; + // 判断钱包是否冻结 + if (ObjectUtil.equals(wallet.getIsFreeze(), YesNoEnum.YES.getCode())) { + throw new RuntimeException("钱包已冻结"); + } // 查询用户 UserInfo user = userService.getInnerByUserId(wallet.getUserId()).getData(); if (ObjectUtil.isEmpty(user)) return null; diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/entity/api/ThirdPayLogEntity.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/entity/api/ThirdPayLogEntity.java index b9f0635d5..1074554a0 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/entity/api/ThirdPayLogEntity.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/entity/api/ThirdPayLogEntity.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.activerecord.Model; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import com.bsd.pjcloud.common.core.util.TenantTable; + import java.time.LocalDateTime; /** @@ -21,100 +22,106 @@ import java.time.LocalDateTime; public class ThirdPayLogEntity extends Model { - /** - * 主键 - */ + /** + * 主键 + */ @TableId(type = IdType.ASSIGN_ID) - @Schema(description="主键") + @Schema(description = "主键") private Long id; - /** - * 支付发起方类型id - */ - @Schema(description="支付发起方类型id") + /** + * 支付发起方类型id + */ + @Schema(description = "支付发起方类型id") private String paySourceType; - /** - * 支付类型 - */ - @Schema(description="支付类型") + /** + * 支付类型 + */ + @Schema(description = "支付类型") private String bizType; - /** - * 支付类型id - */ - @Schema(description="支付类型id") + /** + * 支付类型id + */ + @Schema(description = "支付类型id") private String bizId; - /** - * api-url - */ - @Schema(description="api-url") + /** + * api-url + */ + @Schema(description = "api-url") private String apiUrl; - /** - * res - */ - @Schema(description="res") + /** + * header + */ + @Schema(description = "header") + private String header; + + /** + * res + */ + @Schema(description = "res") private String res; - /** - * req - */ - @Schema(description="req") + /** + * req + */ + @Schema(description = "req") private String req; - /** - * 调用错误 - */ - @Schema(description="调用错误") + /** + * 调用错误 + */ + @Schema(description = "调用错误") private String error; - /** - * 耗时(毫秒) - */ - @Schema(description="耗时(毫秒)") + /** + * 耗时(毫秒) + */ + @Schema(description = "耗时(毫秒)") private String timeConsuming; - /** - * 创建人 - */ - @TableField(fill = FieldFill.INSERT) - @Schema(description="创建人") + /** + * 创建人 + */ + @TableField(fill = FieldFill.INSERT) + @Schema(description = "创建人") private String createBy; - /** - * 创建时间 - */ - @TableField(fill = FieldFill.INSERT) - @Schema(description="创建时间") + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + @Schema(description = "创建时间") private LocalDateTime createTime; - /** - * 更新人 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - @Schema(description="更新人") + /** + * 更新人 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + @Schema(description = "更新人") private String updateBy; - /** - * 更新时间 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - @Schema(description="更新时间") + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + @Schema(description = "更新时间") private LocalDateTime updateTime; - /** - * 删除时间 - */ + /** + * 删除时间 + */ @TableLogic - @TableField(fill = FieldFill.INSERT) - @Schema(description="删除时间") + @TableField(fill = FieldFill.INSERT) + @Schema(description = "删除时间") private String delFlag; - - /** - * tenantId - */ - @Schema(description="tenantId") + + /** + * tenantId + */ + @Schema(description = "tenantId") private Long tenantId; } \ No newline at end of file diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/pay/ThirdPayApiServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/pay/ThirdPayApiServiceImpl.java index b1de353ec..e58695748 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/pay/ThirdPayApiServiceImpl.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/pay/ThirdPayApiServiceImpl.java @@ -22,7 +22,6 @@ import jakarta.validation.ConstraintViolation; import jakarta.validation.Validation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.data.domain.Page; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -54,7 +53,7 @@ public class ThirdPayApiServiceImpl implements ThirdPayApiService { @Override public PayBaseVo walletPay(String json, Map headers) { long startTime = System.currentTimeMillis(); - ThirdPayLogEntity logObj = ThirdPayLogEntity.builder().apiUrl("/third/third-pay-api/wallet-pay").bizType(ThirdPayApiBizTypeEnum.PAY.getType()).paySourceType(ThirdPaySoureBizTypeEnum.LB.getType()).req(json).build(); + ThirdPayLogEntity logObj = ThirdPayLogEntity.builder().apiUrl("/third/third-pay-api/wallet-pay").bizType(ThirdPayApiBizTypeEnum.PAY.getType()).paySourceType(ThirdPaySoureBizTypeEnum.LB.getType()).header(JSONUtil.toJsonStr(headers)).req(json).build(); // 开始处理 PayBaseVo baseVo = new PayBaseVo(); ThirdKeyManageEntity keySetting = keyManageService.checkSignAndReturnConfig(json, headers); @@ -106,7 +105,7 @@ public class ThirdPayApiServiceImpl implements ThirdPayApiService { @Override public PayBaseVo walletRefund(String json, Map headers) { long startTime = System.currentTimeMillis(); - ThirdPayLogEntity logObj = ThirdPayLogEntity.builder().apiUrl("/third/third-pay-api/wallet-refund").bizType(ThirdPayApiBizTypeEnum.REFUND.getType()).paySourceType(ThirdPaySoureBizTypeEnum.LB.getType()).req(json).build(); + ThirdPayLogEntity logObj = ThirdPayLogEntity.builder().apiUrl("/third/third-pay-api/wallet-refund").bizType(ThirdPayApiBizTypeEnum.REFUND.getType()).paySourceType(ThirdPaySoureBizTypeEnum.LB.getType()).req(json).header(JSONUtil.toJsonStr(headers)).build(); // 开始处理 PayBaseVo baseVo = new PayBaseVo(); ThirdKeyManageEntity keySetting = keyManageService.checkSignAndReturnConfig(json, headers); @@ -159,7 +158,7 @@ public class ThirdPayApiServiceImpl implements ThirdPayApiService { public PayBaseVo getWalletInfo(String json, Map headers) { // 日志 long startTime = System.currentTimeMillis(); - ThirdPayLogEntity logObj = ThirdPayLogEntity.builder().apiUrl("/third/third-pay-api/user-wallet").bizType(ThirdPayApiBizTypeEnum.WALLET_INFO.getType()).req(json).paySourceType(ThirdPaySoureBizTypeEnum.LB.getType()).build(); + ThirdPayLogEntity logObj = ThirdPayLogEntity.builder().apiUrl("/third/third-pay-api/user-wallet").bizType(ThirdPayApiBizTypeEnum.WALLET_INFO.getType()).req(json).header(JSONUtil.toJsonStr(headers)).paySourceType(ThirdPaySoureBizTypeEnum.LB.getType()).build(); // 开始处理 PayBaseVo baseVo = new PayBaseVo(); ThirdKeyManageEntity keySetting = keyManageService.checkSignAndReturnConfig(json, headers); @@ -222,7 +221,7 @@ public class ThirdPayApiServiceImpl implements ThirdPayApiService { public PayBaseVo> water(String json, Map headers) { // 日志 long startTime = System.currentTimeMillis(); - ThirdPayLogEntity logObj = ThirdPayLogEntity.builder().apiUrl("/third/third-pay-api/water").bizType(ThirdPayApiBizTypeEnum.WATER.getType()).req(json).paySourceType(ThirdPaySoureBizTypeEnum.LB.getType()).build(); + ThirdPayLogEntity logObj = ThirdPayLogEntity.builder().apiUrl("/third/third-pay-api/water").bizType(ThirdPayApiBizTypeEnum.WATER.getType()).req(json).header(JSONUtil.toJsonStr(headers)).paySourceType(ThirdPaySoureBizTypeEnum.LB.getType()).build(); // 开始处理 PayBaseVo baseVo = new PayBaseVo(); ThirdKeyManageEntity keySetting = keyManageService.checkSignAndReturnConfig(json, headers); @@ -273,7 +272,7 @@ public class ThirdPayApiServiceImpl implements ThirdPayApiService { public PayBaseVo detail(String json, Map headers) { // 日志 long startTime = System.currentTimeMillis(); - ThirdPayLogEntity logObj = ThirdPayLogEntity.builder().apiUrl("/third/third-pay-api/detail").bizType(ThirdPayApiBizTypeEnum.DETAIL.getType()).req(json).paySourceType(ThirdPaySoureBizTypeEnum.LB.getType()).build(); + ThirdPayLogEntity logObj = ThirdPayLogEntity.builder().apiUrl("/third/third-pay-api/detail").bizType(ThirdPayApiBizTypeEnum.DETAIL.getType()).req(json).header(JSONUtil.toJsonStr(headers)).paySourceType(ThirdPaySoureBizTypeEnum.LB.getType()).build(); // 开始处理 PayBaseVo baseVo = new PayBaseVo(); ThirdKeyManageEntity keySetting = keyManageService.checkSignAndReturnConfig(json, headers); diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/test/java/com/bsd/pjcloud/admin/PayTest.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/test/java/com/bsd/pjcloud/admin/PayTest.java index 6567cd80b..4e3c1421f 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/test/java/com/bsd/pjcloud/admin/PayTest.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/test/java/com/bsd/pjcloud/admin/PayTest.java @@ -30,6 +30,7 @@ import java.util.Map; public class PayTest { private final String baseUrl = "http://123.156.230.15:8089/api"; + // private final String baseUrl = "http://127.0.0.1:9999"; private final String walletInfoUrl = "/third/third-pay-api/user-wallet"; @@ -78,7 +79,7 @@ public class PayTest { public void walletPay() throws Exception { Map paramsMap = new HashMap<>(); paramsMap.put("userId", 1875049673022279681L); - paramsMap.put("thirdOrderId", "5"); + paramsMap.put("thirdOrderId", System.currentTimeMillis()); paramsMap.put("price", 100); paramsMap.put("products", null); String body = JSONUtil.toJsonStr(paramsMap); @@ -159,6 +160,13 @@ public class PayTest { log.info(res); } + @Test + public void test() { + String headers = "{\"X-Forwarded-Prefix\":\"/third\",\"sign\":\"c668f17f92907fed5ea62e899c1782c5\",\"User-Agent\":\"okhttp/3.14.9\",\"Accept-Encoding\":\"gzip\",\"UniqueFlowNo\":\"OPENAPI01-20250529100755-437087\",\"Content-Encoding\":\"UTF-8\",\"host\":\"192.168.0.192:6061\",\"X-B3-Sampled\":\"0\",\"X-B3-TraceId\":\"9590477961c17418\",\"Content-Length\":\"75\",\"X-Real-IP\":\"221.12.37.146\",\"timestamp\":\"1748484475\",\"Content-Type\":\"application/json\",\"Accept\":\"*/*\",\"X-B3-ParentSpanId\":\"9590477961c17418\",\"X-Forwarded-Host\":\"123.156.230.15:8089\",\"X-Forwarded-Proto\":\"http,http\",\"app-key\":\"HB0llhHmc56AW9yw\",\"X-Forwarded-Port\":\"8089\",\"x-client-token\":\"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJqaW5oZmgtbWhzaC1zZXJ2aWNlIiwidXNlcklkIjoiNDA4MyIsIm5hbWUiOiJqaW5oZmgtbWhzaC1zZXJ2aWNlIiwiZXhwIjoyMDYzODQ0MDAwfQ.Woq4L0kiCCbVYFt8PwFj71eBx-u2S3mlX13dq7lEZwR8ILSxJNeLuK6JPoV72YLW82G9hRQHHncMZL3O4UnvmP2CWRIet3ekfW-61_PW82sgEIiKXK3bS5nBiQmk5vEChYG8VQ5Ze6lGkxL0baPujqA-CPV9KiQ0HNXLFKFec0w\",\"NEBULA-DST-SERVICE\":\"iobp-itfin-api\",\"X-B3-SpanId\":\"a9fd27f63a83ff9c\",\"biz-type\":\"10\",\"traceparent\":\"00-4f690c2f2e5c5784a6415a740b5fb80a-d33a2abbf42c407c-01\",\"Forwarded\":\"proto=http;host=\\\"123.156.230.15:8089\\\";for=\\\"127.0.0.1:52440\\\"\",\"X-Forwarded-For\":\"221.12.37.146,127.0.0.1\",\"REQUEST-START-TIME\":\"1748484466443\"}"; + String params = "{\"price\":1,\"thirdOrderId\":\"202505260000001\",\"userId\":\"1875049673022279681\"}"; + keyManageService.checkSignAndReturnConfig(params, JSONUtil.toBean(headers, Map.class)); + } + private ThirdKeyManageEntity getLbConfig() { return keyManageService.get(ThirdKeyTypeEnum.LB); } diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/mch/MchManageController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/mch/MchManageController.java index 33377b5c0..c6654c568 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/mch/MchManageController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/mch/MchManageController.java @@ -121,9 +121,11 @@ public class MchManageController { PjcloudUser user = SecurityUtils.getUser(); dto.setVisibleMobile(YesNoEnum.YES.getCode()); // 如果是食堂判断用户是否能查看到所有食堂 - boolean isConsumeUser = mchManageService.getIsConsumeUser(user.getId()); - if (isConsumeUser) { - dto.setCanteenIsOpen(YesNoEnum.YES.getCode()); + if (ObjectUtil.equals(dto.getType(), MerchantTypeEnum.CANTEEN.getType())) { + boolean isConsumeUser = mchManageService.getIsConsumeUser(user.getId()); + if (isConsumeUser) { + dto.setCanteenIsOpen(YesNoEnum.YES.getCode()); + } } return R.ok(mchManageService.pageJoin(page, dto)); } From 905d0c75483dd6aef61a16c9d338af946f1c74bb Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Thu, 29 May 2025 11:15:38 +0800 Subject: [PATCH 2/7] =?UTF-8?q?feat:=E5=88=A0=E9=99=A4=E8=A7=A3=E5=86=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/1000pjcloudx_thirdparty.sql | 1 + .../wallet/api/entity/WalletManageEntity.java | 1 - .../controller/WalletFreezeController.java | 12 ++++-- .../wallet/service/WalletFreezeService.java | 2 - .../service/impl/WalletFreezeServiceImpl.java | 40 +++++++------------ 5 files changed, 24 insertions(+), 32 deletions(-) diff --git a/db/1000pjcloudx_thirdparty.sql b/db/1000pjcloudx_thirdparty.sql index caa10d65f..0561eec61 100644 --- a/db/1000pjcloudx_thirdparty.sql +++ b/db/1000pjcloudx_thirdparty.sql @@ -69,6 +69,7 @@ CREATE TABLE `third_pay_log` `biz_type` varchar(32) NOT NULL COMMENT '支付类型', `biz_id` varchar(2048) DEFAULT NULL COMMENT '支付类型id', `api_url` text DEFAULT NULL COMMENT 'api-url', + `header` text DEFAULT NULL COMMENT 'header', `res` text DEFAULT NULL COMMENT 'res', `req` text DEFAULT NULL COMMENT 'req', `error` text DEFAULT NULL COMMENT '调用错误', diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/WalletManageEntity.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/WalletManageEntity.java index ad61d279d..ce49532a0 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/WalletManageEntity.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/WalletManageEntity.java @@ -82,7 +82,6 @@ public class WalletManageEntity extends Model { private Integer freezePrice; /** - * @deprecated 已废弃 * 是否冻结饭卡 */ @Schema(description = "是否冻结饭卡") diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletFreezeController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletFreezeController.java index f3f2c08c5..d8d4d8adf 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletFreezeController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletFreezeController.java @@ -54,13 +54,14 @@ public class WalletFreezeController { @PostMapping("/app/apply-freeze") @Operation(summary = "申请冻结") public R appApplyFreeze(@RequestBody WalletFreezeDto dto) { - if (ObjectUtil.isEmpty(dto.getWalletId())) { - throw new RuntimeException("钱包id不能为空"); + if (ObjectUtil.isEmpty(dto.getWalletTypeId())) { + throw new RuntimeException("钱包类型id不能为空"); } if (ObjectUtil.isEmpty(dto.getRemark())) { throw new RuntimeException("备注不能为空"); } PjcloudUser user = SecurityUtils.getUser(); + dto.setUserId(user.getId()); walletFreezeService.applyFreeze(dto, user); return R.ok(true); } @@ -94,7 +95,9 @@ public class WalletFreezeController { @PostMapping @PreAuthorize("@pms.hasPermission('wallet_walletFreeze_add')") public R save(@RequestBody WalletFreezeDto dto) { - return R.ok(walletFreezeService.create(dto)); + PjcloudUser user = SecurityUtils.getUser(); + walletFreezeService.applyFreeze(dto, user); + return R.ok(); } @Operation(summary = "新增饭卡冻结记录表", description = "新增饭卡冻结记录表") @@ -104,7 +107,8 @@ public class WalletFreezeController { public R appSave(@RequestBody WalletFreezeDto dto) { PjcloudUser loginUser = SecurityUtils.getUser(); dto.setUserId(loginUser.getId()); - return R.ok(walletFreezeService.create(dto)); + walletFreezeService.applyFreeze(dto, loginUser); + return R.ok(); } @Operation(summary = "修改饭卡冻结记录表", description = "修改饭卡冻结记录表") diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletFreezeService.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletFreezeService.java index 8e1fcd4a4..0b5af045b 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletFreezeService.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletFreezeService.java @@ -16,8 +16,6 @@ public interface WalletFreezeService extends IService { Page scopePageList(Page page, WalletFreezeDto dto); - Long create(WalletFreezeDto dto); - void applyCallback(ProcessNodeRecordAssignUserParamDto dto); void applyFreeze(WalletFreezeDto dto, PjcloudUser user); diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletFreezeServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletFreezeServiceImpl.java index ae2576e2c..6b54d5dae 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletFreezeServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletFreezeServiceImpl.java @@ -85,30 +85,6 @@ public class WalletFreezeServiceImpl extends ServiceImpl Date: Thu, 29 May 2025 15:39:57 +0800 Subject: [PATCH 3/7] =?UTF-8?q?feat:=E4=BA=BA=E5=91=98=E8=B0=83=E5=8A=A8ta?= =?UTF-8?q?b?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/SysUserTransactionMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserTransactionMapper.xml b/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserTransactionMapper.xml index e11e33308..44b33707a 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserTransactionMapper.xml +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserTransactionMapper.xml @@ -66,7 +66,7 @@ AND a.is_wallet_transaction = #{dto.isWalletTransaction} - + AND a.process_status = #{dto.processStatus} From d695a2c63b48f4b301643f543d56e7e4de4e5ec4 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Thu, 29 May 2025 18:45:34 +0800 Subject: [PATCH 4/7] =?UTF-8?q?feat:=E8=AE=A2=E5=8D=95=E5=A4=9A=E6=AC=A1?= =?UTF-8?q?=E9=80=80=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/HardAfterSaleController.java | 9 +++-- .../impl/order/HardAfterSaleServiceImpl.java | 23 +++++++++++-- .../impl/third/HardThirdPayServiceImpl.java | 34 +++++++++++-------- .../constant/pay/ThirdPayVoStatusEnum.java | 1 + .../java/com/bsd/pjcloud/admin/PayTest.java | 12 +++---- 5 files changed, 54 insertions(+), 25 deletions(-) diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardAfterSaleController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardAfterSaleController.java index 66070c6e3..604739aa5 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardAfterSaleController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardAfterSaleController.java @@ -150,8 +150,13 @@ public class HardAfterSaleController { @Operation(summary = "分页查询", description = "分页查询") @GetMapping("/page") @PreAuthorize("@pms.hasPermission('hard_hardAfterSale_view')") - public R getHardAfterSalePage(@ParameterObject Page page, @ParameterObject HardAfterSaleEntity hardAfterSale) { - LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + public R getHardAfterSalePage(@ParameterObject Page page, @ParameterObject HardAfterSaleDto dto) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper() + .eq(HardAfterSaleEntity::getOrderId, dto.getOrderId()) + .eq(HardAfterSaleEntity::getUserId, dto.getUserId()) + .eq(HardAfterSaleEntity::getStatus, dto.getStatus()) + .orderByDesc(HardAfterSaleEntity::getCreateTime) + .orderByDesc(HardAfterSaleEntity::getOrderId); return R.ok(hardAfterSaleService.page(page, wrapper)); } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardAfterSaleServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardAfterSaleServiceImpl.java index 21fe03ac7..9d684f1e2 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardAfterSaleServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardAfterSaleServiceImpl.java @@ -40,6 +40,7 @@ import com.bsd.pjcloud.hard.mapper.order.HardAfterSaleMapper; import com.bsd.pjcloud.hard.mapper.order.HardOrderMapper; import com.bsd.pjcloud.hard.service.HardAfterSaleService; import com.bsd.pjcloud.hard.service.HardOrderService; +import com.bsd.pjcloud.thirdparty.constant.pay.ThirdPayVoStatusEnum; import com.bsd.pjcloud.wallet.api.dto.recharge.WalletRechargeRefundDto; import com.bsd.pjcloud.wallet.api.feign.RemoteWalletRechargeService; import com.bsd.pjcloud.wallet.api.vo.recharge.WalletRechargeVo; @@ -228,6 +229,11 @@ public class HardAfterSaleServiceImpl extends ServiceImpl walletRefundResult = walletRechargeService.refund(hardRefundDto); if (walletRefundResult.getCode() != 0 || ObjectUtil.isEmpty(walletRefundResult.getData())) { @@ -239,7 +245,7 @@ public class HardAfterSaleServiceImpl extends ServiceImpl afterList = baseMapper.selectList(new LambdaQueryWrapper() + .eq(HardAfterSaleEntity::getOrderId, order.getId()) + .eq(HardAfterSaleEntity::getType, HardSaleTypeEnum.AFTER_SALE.getType()) + .in(HardAfterSaleEntity::getStatus, List.of(HardSaleStatusEnum.APPLY.getStatus(), HardSaleStatusEnum.COMPLETE.getStatus())) + ); + // 退款金额 + int totalPrice = afterList.stream().filter(v -> ObjectUtil.isNotEmpty(v.getRefundPrice())).map(HardAfterSaleEntity::getRefundPrice).reduce(0, Integer::sum); + if (totalPrice > order.getPayPrice()) { + throw new RuntimeException("退款总金额大于支付总金额"); } return orderVo; } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/third/HardThirdPayServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/third/HardThirdPayServiceImpl.java index 7541f61f5..60e70ff26 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/third/HardThirdPayServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/third/HardThirdPayServiceImpl.java @@ -185,15 +185,27 @@ public class HardThirdPayServiceImpl implements HardThirdPayService { try { String orderType = getOrderType(soureType); // 订单是否存在 - long orderCount = hardOrderService.count(new LambdaQueryWrapper() + HardOrderEntity orderEntity = hardOrderService.getOne(new LambdaQueryWrapper() .eq(HardOrderEntity::getId, dto.getPlatformOrderId()) .eq(HardOrderEntity::getOrderType, orderType) - .eq(HardOrderEntity::getOrderStatus, HardOrderStatusEnum.PAY.getType()) ); - if (orderCount <= 0) { + if (ObjectUtil.isEmpty(orderEntity)) { baseVo.set(ThirdPayVoStatusEnum.ORDER_EXIST); return baseVo; } + // 查询所有成功的退款 + List afterList = hardAfterSaleService.list(new LambdaQueryWrapper() + .eq(HardAfterSaleEntity::getOrderId, orderEntity.getId()) + .eq(HardAfterSaleEntity::getType, HardSaleTypeEnum.AFTER_SALE.getType()) + .eq(HardAfterSaleEntity::getStatus, HardSaleStatusEnum.COMPLETE.getStatus()) + ); + // 退款金额 + int totalPrice = afterList.stream().filter(v -> ObjectUtil.isNotEmpty(v.getRefundPrice())).map(HardAfterSaleEntity::getRefundPrice).reduce(0, Integer::sum); + int executeTotalPrice = totalPrice + dto.getPrice(); + if (executeTotalPrice > orderEntity.getPayPrice()) { + baseVo.set(ThirdPayVoStatusEnum.REFUND_TOTAL_PRICE); + return baseVo; + } // 退款id是否重复 long refundCount = hardAfterSaleService.count(new LambdaQueryWrapper() .eq(HardAfterSaleEntity::getNo, dto.getThirdRefundId()) @@ -204,21 +216,15 @@ public class HardThirdPayServiceImpl implements HardThirdPayService { baseVo.set(ThirdPayVoStatusEnum.ORDER_HAVE_REFUND); return baseVo; } - // 是否已退款 - HardOrderVo order = hardAfterSaleService.validateOrderCanRefund(Long.valueOf(dto.getPlatformOrderId())); - if (ObjectUtil.isEmpty(order)) { - baseVo.set(ThirdPayVoStatusEnum.ORDER_HAVE_REFUND); - return baseVo; - } // 添加售后订单 HardAfterSaleEntity saveObj = BeanUtils.toBean(dto, HardAfterSaleEntity.class); saveObj.setType(HardSaleTypeEnum.AFTER_SALE.getType()); saveObj.setStatus(HardSaleStatusEnum.COMPLETE.getStatus()); saveObj.setNo(dto.getThirdRefundId()); saveObj.setWay("10"); - saveObj.setOrderId(order.getId()); + saveObj.setOrderId(orderEntity.getId()); saveObj.setRefundPrice(dto.getPrice()); - saveObj.setUserId(order.getUserId()); + saveObj.setUserId(orderEntity.getUserId()); saveObj.setAuditUserId(null); saveObj.setAuditTime(LocalDateTime.now()); saveObj.setApplyReason("宁波银行(美好生活)api退款"); @@ -228,9 +234,9 @@ public class HardThirdPayServiceImpl implements HardThirdPayService { // 添加售后进度 HardAfterSaleLogEntity saveLogObj = HardAfterSaleLogEntity.builder() .afterSaleId(saveObj.getId()) - .userId(order.getUserId()) + .userId(orderEntity.getUserId()) .operateType(HardAfterSaleOperateTypeEnum.ADMIN_REFUND.getType()) - .beforeStatus(order.getOrderStatus()) + .beforeStatus(orderEntity.getOrderStatus()) .afterStatus(HardSaleStatusEnum.COMPLETE.getStatus()) .content(HardSaleStatusEnum.COMPLETE.getContent()) .build(); @@ -240,7 +246,7 @@ public class HardThirdPayServiceImpl implements HardThirdPayService { // 返回 RefundVo refundVo = new RefundVo(); refundVo.setRefundTime(LocalDateTimeUtil.format(LocalDateTime.now(), DatePattern.NORM_DATETIME_PATTERN)); - refundVo.setThirdOrderId(order.getOrderNo()); + refundVo.setThirdOrderId(orderEntity.getOrderNo()); refundVo.setThirdRefundId(dto.getThirdRefundId()); refundVo.setPlatformOrderId(dto.getPlatformOrderId()); refundVo.setPlatformRefundId(String.valueOf(saveObj.getId())); diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayVoStatusEnum.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayVoStatusEnum.java index 77b1e2675..280bf3279 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayVoStatusEnum.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayVoStatusEnum.java @@ -24,6 +24,7 @@ public enum ThirdPayVoStatusEnum { ORDER_HAVE_PAY(506, "订单已支付"), ORDER_HAVE_REFUND(507, "订单已退款"), DETAIL_ITEM_NOT_ONE(508, "查询详情条目不为一"), + REFUND_TOTAL_PRICE(509, "退款总金额大于支付总金额"), UNKNOWN_ERROR(599, "未知错误,请联系管理员"), ; diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/test/java/com/bsd/pjcloud/admin/PayTest.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/test/java/com/bsd/pjcloud/admin/PayTest.java index 4e3c1421f..365686a20 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/test/java/com/bsd/pjcloud/admin/PayTest.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/test/java/com/bsd/pjcloud/admin/PayTest.java @@ -29,8 +29,8 @@ import java.util.Map; @SpringBootTest(classes = ThirdPartyApp.class) public class PayTest { - private final String baseUrl = "http://123.156.230.15:8089/api"; - // private final String baseUrl = "http://127.0.0.1:9999"; + // private final String baseUrl = "http://123.156.230.15:8089/api"; + private final String baseUrl = "http://127.0.0.1:9999"; private final String walletInfoUrl = "/third/third-pay-api/user-wallet"; @@ -80,7 +80,7 @@ public class PayTest { Map paramsMap = new HashMap<>(); paramsMap.put("userId", 1875049673022279681L); paramsMap.put("thirdOrderId", System.currentTimeMillis()); - paramsMap.put("price", 100); + paramsMap.put("price", 1000); paramsMap.put("products", null); String body = JSONUtil.toJsonStr(paramsMap); // 发送请求 @@ -119,9 +119,9 @@ public class PayTest { public void walletRefund() throws Exception { ThirdKeyManageEntity config = getLbConfig(); Map paramsMap = new HashMap<>(); - paramsMap.put("platformOrderId", "1919704180908027905"); - paramsMap.put("thirdRefundId", "10"); - paramsMap.put("price", "1000"); + paramsMap.put("platformOrderId", "1928019909587054593"); + paramsMap.put("thirdRefundId", System.currentTimeMillis()); + paramsMap.put("price", "300"); String body = JSONUtil.toJsonStr(paramsMap); // 发送请求 String res = HttpRequest.post(baseUrl + walletRefundUrl).contentType("application/json").header(apiCountersign(body)).body(body).execute().body(); From fe79a9069efce027a4eadd0de5252752ff3719b9 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Fri, 30 May 2025 10:32:23 +0800 Subject: [PATCH 5/7] =?UTF-8?q?feat:=E6=97=A0=E7=94=A8=E6=88=B7=E6=94=AF?= =?UTF-8?q?=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/order/HardOrderServiceImpl.java | 34 ++++++++++++++----- .../java/com/bsd/pjcloud/admin/PayTest.java | 8 ++--- 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java index dfe832a2c..cb0059252 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java @@ -196,17 +196,24 @@ public class HardOrderServiceImpl extends ServiceImpl walletResult = remoteWalletService.getWallet(dto.getUserId(), WalletTypeEnum.EAT); wallet = Optional.of(walletResult).map(R::getData).orElseThrow(() -> new RuntimeException("用户钱包不存在")); } else { @@ -216,14 +223,14 @@ public class HardOrderServiceImpl extends ServiceImpl paramsMap = new HashMap<>(); paramsMap.put("userId", 1875049673022279681L); paramsMap.put("thirdOrderId", System.currentTimeMillis()); - paramsMap.put("price", 1000); + paramsMap.put("price", 800); paramsMap.put("products", null); String body = JSONUtil.toJsonStr(paramsMap); // 发送请求 @@ -119,7 +119,7 @@ public class PayTest { public void walletRefund() throws Exception { ThirdKeyManageEntity config = getLbConfig(); Map paramsMap = new HashMap<>(); - paramsMap.put("platformOrderId", "1928019909587054593"); + paramsMap.put("platformOrderId", "1928048358927982594"); paramsMap.put("thirdRefundId", System.currentTimeMillis()); paramsMap.put("price", "300"); String body = JSONUtil.toJsonStr(paramsMap); From 54df322b0f94d8d916609c1494101975eca4cf79 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Fri, 30 May 2025 11:30:09 +0800 Subject: [PATCH 6/7] =?UTF-8?q?feat:=E8=B6=85=E5=B8=82=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E6=B6=88=E8=B4=B9=E9=92=B1=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pjcloud/hard/service/impl/HardApiServiceImpl.java | 5 +---- .../hard/service/impl/order/HardOrderServiceImpl.java | 11 ++++++++--- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardApiServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardApiServiceImpl.java index 6bc2304cf..c2d999f15 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardApiServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardApiServiceImpl.java @@ -36,10 +36,7 @@ public class HardApiServiceImpl implements HardApiService { UserInfo user = userService.getInnerByUserId(userId).getData(); if (ObjectUtil.isEmpty(user)) return null; // 查询钱包 - // WalletTypeEnum walletType = ObjectUtil.equals(HardTypeEnum.CANTEEN, type) ? WalletTypeEnum.EAT : WalletTypeEnum.PAY; - // 默认都使用饭卡钱包 - WalletTypeEnum walletType = WalletTypeEnum.EAT; - + WalletTypeEnum walletType = ObjectUtil.equals(HardTypeEnum.CANTEEN, type) ? WalletTypeEnum.EAT : WalletTypeEnum.PAY; WalletManageEntity wallet = remoteWalletService.getWallet(userId, walletType).getData(); if (ObjectUtil.isEmpty(wallet)) return null; SysUser sysUser = user.getSysUser(); diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java index cb0059252..7b9becf98 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java @@ -203,7 +203,7 @@ public class HardOrderServiceImpl extends ServiceImpl walletResult = remoteWalletService.getWallet(dto.getUserId(), WalletTypeEnum.EAT); - wallet = Optional.of(walletResult).map(R::getData).orElseThrow(() -> new RuntimeException("用户钱包不存在")); + if (dto.getSysType().equals(HardTypeEnum.CANTEEN)) { + R walletResult = remoteWalletService.getWallet(dto.getUserId(), WalletTypeEnum.EAT); + wallet = Optional.of(walletResult).map(R::getData).orElseThrow(() -> new RuntimeException("用户钱包不存在")); + } else { + R walletResult = remoteWalletService.getWallet(dto.getUserId(), WalletTypeEnum.PAY); + wallet = Optional.of(walletResult).map(R::getData).orElseThrow(() -> new RuntimeException("用户钱包不存在")); + } } else { R walletResult = remoteWalletService.getWalletByWalletTypeId(dto.getUserId(), mch.getDefaultWalletTypeId()); wallet = Optional.of(walletResult).map(R::getData).orElseThrow(() -> new RuntimeException("用户钱包不存在")); From ba915abf9f2f69a2c7f14d86036a2f90b2221088 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Fri, 30 May 2025 12:29:55 +0800 Subject: [PATCH 7/7] =?UTF-8?q?feat:=E7=AC=AC=E4=B8=89=E6=96=B9=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E5=A4=9A=E6=AC=A1=E9=80=80=E6=AC=BE=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/third/HardThirdPayServiceImpl.java | 57 ++++++++++-------- .../mapper/order/HardOrderMapper.xml | 1 + .../thirdparty/vo/pay/PayRefundVo.java | 28 +++++++++ .../pjcloud/thirdparty/vo/pay/PayWaterVo.java | 26 +++----- .../src/main/resources/doc/第三方支付文档.wps | Bin 160768 -> 169984 bytes .../java/com/bsd/pjcloud/admin/PayTest.java | 8 +-- 6 files changed, 75 insertions(+), 45 deletions(-) create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayRefundVo.java diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/third/HardThirdPayServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/third/HardThirdPayServiceImpl.java index 60e70ff26..3123c354a 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/third/HardThirdPayServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/third/HardThirdPayServiceImpl.java @@ -35,10 +35,7 @@ import com.bsd.pjcloud.thirdparty.dto.pay.PayDetailDto; import com.bsd.pjcloud.thirdparty.dto.pay.PayDto; import com.bsd.pjcloud.thirdparty.dto.pay.RefundDto; import com.bsd.pjcloud.thirdparty.dto.pay.WaterDto; -import com.bsd.pjcloud.thirdparty.vo.pay.PayBaseVo; -import com.bsd.pjcloud.thirdparty.vo.pay.PayVo; -import com.bsd.pjcloud.thirdparty.vo.pay.PayWaterVo; -import com.bsd.pjcloud.thirdparty.vo.pay.RefundVo; +import com.bsd.pjcloud.thirdparty.vo.pay.*; import com.bsd.pjcloud.wallet.api.constant.WalletTypeEnum; import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity; import com.bsd.pjcloud.wallet.api.feign.RemoteMchService; @@ -285,22 +282,18 @@ public class HardThirdPayServiceImpl implements HardThirdPayService { item.setName(v.getUsername()); item.setSignPhone(v.getUserMobile()); item.setPlatformOrderId(String.valueOf(v.getId())); - if (ObjectUtil.isNotEmpty(v.getAfterSaleId())) { - item.setPlatformRefundId(String.valueOf(v.getAfterSaleId())); - } item.setThirdOrderId(v.getOrderNo()); - if (ObjectUtil.isNotEmpty(v.getAfterSaleNo())) { - item.setThirdRefundId(String.valueOf(v.getAfterSaleNo())); - } item.setOrderStatus(v.getOrderStatus()); item.setOrderPrice(v.getPayPrice()); - item.setRefundPrice(v.getRefundPrice()); if (ObjectUtil.isNotEmpty(v.getPayTime())) { item.setPayTime(LocalDateTimeUtil.format(v.getPayTime(), DatePattern.NORM_DATETIME_PATTERN)); } - if (ObjectUtil.isNotEmpty(v.getRefundTime())) { - item.setRefundTime(LocalDateTimeUtil.format(v.getRefundTime(), DatePattern.NORM_DATETIME_PATTERN)); - } + // 查询退款列表 + List refundList = getRefundList(v.getId()); + // 总退款金额 + Integer reduce = refundList.stream().filter(i -> ObjectUtil.isNotEmpty(i.getRefundPrice())).map(i -> i.getRefundPrice()).reduce(0, Integer::sum); + item.setRefundList(refundList); + item.setRefundTotalPrice(reduce); list.add(item); } } @@ -338,22 +331,18 @@ public class HardThirdPayServiceImpl implements HardThirdPayService { item.setName(order.getUsername()); item.setSignPhone(order.getUserMobile()); item.setPlatformOrderId(String.valueOf(order.getId())); - if (ObjectUtil.isNotEmpty(order.getAfterSaleId())) { - item.setPlatformRefundId(String.valueOf(order.getAfterSaleId())); - } item.setThirdOrderId(order.getOrderNo()); - if (ObjectUtil.isNotEmpty(order.getAfterSaleNo())) { - item.setThirdRefundId(String.valueOf(order.getAfterSaleNo())); - } item.setOrderStatus(order.getOrderStatus()); item.setOrderPrice(order.getPayPrice()); - item.setRefundPrice(order.getRefundPrice()); if (ObjectUtil.isNotEmpty(order.getPayTime())) { item.setPayTime(LocalDateTimeUtil.format(order.getPayTime(), DatePattern.NORM_DATETIME_PATTERN)); } - if (ObjectUtil.isNotEmpty(order.getRefundTime())) { - item.setRefundTime(LocalDateTimeUtil.format(order.getRefundTime(), DatePattern.NORM_DATETIME_PATTERN)); - } + // 查询退款列表 + List refundList = getRefundList(order.getId()); + // 总退款金额 + Integer reduce = refundList.stream().filter(i -> ObjectUtil.isNotEmpty(i.getRefundPrice())).map(i -> i.getRefundPrice()).reduce(0, Integer::sum); + item.setRefundList(refundList); + item.setRefundTotalPrice(reduce); baseVo.set(ThirdPayVoStatusEnum.SUCCESS); baseVo.setData(item); return baseVo; @@ -376,6 +365,26 @@ public class HardThirdPayServiceImpl implements HardThirdPayService { return null; } + // 查询退款列表 + private List getRefundList(Long orderId) { + List afterList = hardAfterSaleService.list(new LambdaQueryWrapper() + .eq(HardAfterSaleEntity::getOrderId, orderId) + .eq(HardAfterSaleEntity::getType, HardSaleTypeEnum.AFTER_SALE.getType()) + .eq(HardAfterSaleEntity::getStatus, HardSaleStatusEnum.COMPLETE.getStatus()) + ); + if (ObjectUtil.isEmpty(afterList)) { + return null; + } + return afterList.stream().map(v -> { + PayRefundVo item = new PayRefundVo(); + item.setPlatformRefundId(String.valueOf(v.getId())); + item.setThirdRefundId(v.getNo()); + item.setRefundPrice(v.getRefundPrice()); + item.setRefundTime(LocalDateTimeUtil.format(v.getRefundTime(), DatePattern.NORM_DATETIME_PATTERN)); + return item; + }).toList(); + } + private String getOrderType(ThirdPaySoureBizTypeEnum type) { switch (type) { case LB -> { diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml index 925b1ad82..d984a1298 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml @@ -207,6 +207,7 @@ and s.no = #{dto.afterSaleNo} + group by a.id order by a.create_time desc, a.user_id desc diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayRefundVo.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayRefundVo.java new file mode 100644 index 000000000..82dbc5a3f --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayRefundVo.java @@ -0,0 +1,28 @@ +package com.bsd.pjcloud.thirdparty.vo.pay; + +import lombok.Data; + +@Data +public class PayRefundVo { + + /** + * 平台退款id + */ + private String platformRefundId; + + /** + * 第三方退款id + */ + private String thirdRefundId; + + /** + * 退款金额(分) + */ + private Integer refundPrice; + + /** + * 退款时间(yyyy-MM-dd HH:mm:ss格式) + */ + private String refundTime; + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayWaterVo.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayWaterVo.java index 572fc0264..70736683a 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayWaterVo.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayWaterVo.java @@ -2,6 +2,8 @@ package com.bsd.pjcloud.thirdparty.vo.pay; import lombok.Data; +import java.util.List; + @Data public class PayWaterVo { @@ -25,21 +27,11 @@ public class PayWaterVo { */ private String platformOrderId; - /** - * 平台退款id - */ - private String platformRefundId; - /** * 第三方订单id */ private String thirdOrderId; - /** - * 第三方退款id - */ - private String thirdRefundId; - /** * 订单状态 * 1创建订单(未支付) @@ -53,19 +45,19 @@ public class PayWaterVo { */ private Integer orderPrice; - /** - * 退款金额(分) - */ - private Integer refundPrice; - /** * 支付时间(yyyy-MM-dd HH:mm:ss格式) */ private String payTime; /** - * 退款时间(yyyy-MM-dd HH:mm:ss格式) + * 总退款价格(分) */ - private String refundTime; + private Integer refundTotalPrice; + + /** + * 退款列表 + */ + private List refundList; } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/doc/第三方支付文档.wps b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/doc/第三方支付文档.wps index e0cf241cf897bb327d6a852d176c0b02f58f9b85..a8d465388ebe11990a9d2126977c1e38cb543bc2 100644 GIT binary patch delta 6400 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 delta 4518 zcmbu@e^6A%0SEBiY?l=w=HHc^vH3aEN3@RZfI=15&hMd+Ks)V^xwVFxs z;_p~T@s{|ISc=g&jyl#Bhes)6(OAb4hM0~f3}qr>$5_W0>o^_9Nwwea9WwZ%{!^Tf z?t5?F+xKI4zl(trQGx42sBUg>o)nl^M*oAs}O0upTF;4p&(YhrqN*AVP>Sc~PojE32?@5V^9=i~?R+YQ* zi`~De(f1sybk(SMoY&Bk(jD=CUPJe!hEJNCY>G zhUt(ES3dn@^G|1w=anOUH?m<3%JZ%z}LI!U9+hrBDu`lV3~6$>}(m zPui+?o;=B?#Zf<0z$(}PTVNmHX}jji(4)lsel?n@!_I?n2oA#$Xo41K12nVs?b+dG zJmvM;HJdN`0`Ap?vst4ZI-v`?;cJL<;HlyA=>wbl&#v->pN=PozL-lyvQh?QLN??; zE_h&#qrutUD?Mvaeiz<@DhNUyoP_Ie1Mb0nP);E%aQV__r$64ftYl$)scuj2HI>z?4h97lV0pDXf4p@WU#24=UkuYyJC6 z^4xeG4(+LWU+?;{L%a6Y>A)WY={&v(w!k*n4tt;$>Hw{-XQPwPzTD7r*D1qIM)J^M zI0B8(1kKO_*MO(J^+Vq4DDBD4)vZMy9VqYN04mg7{G@;dd>ruHDJCDI}XoeOz1+8$=rJcdn@a*UB zLFJ3s*$MxKdtgb$YlOiNm5LtOic8OSp=K2J#6u!vLk`S=0w_ey`d*n{h_V+JLkX;b zwXg}cK`I>6Evr4XXl*$shTHsoLGxb+Khu| z;T)WYHt2+IxC76hi&*0>2se5WSilN47!J>$i_knPjfSz11ydj!a$y0m`Jc@VPuCuF z#hoW_vpeEU9$g5Fp%_ZQ2jx%!&u<#9ihHC48lOXAeV{ua1u;EKTy6$Z|Iss%0&b^wWNc6mUVnRRC82On(MDL%k^3bQY*yX)D48 z)1ArgPky`!<~TEa6KpYKl==wI^r>7F%Rpy#Gq;)9&B=zdQ%-G|Va=6>f4*Ed%+ieA zjBy5ZS90j(n0PtO;kPneL@=?L*6|LewP`ye@5optGSiqz%oJYhc;dpPmbKXZD3BS( z3}A*YBlLB2!2X}P{UsFg2X4GFaAW$wjhFg2jL-MVEYpZqZ-no7gs`#&1~kK&!R$8d z$;x477RbNJA#UtoBKP%2Kl>xMna)gR=5U?UjICgQtiuKanPJ@KxPc?3xCJ|tk}0WN;dG2Q?Nb!SKs>e+zzq{z zrfnN4$1nw%ZrR{5>=|kTdd54Up0RkSi11){9t;?|c5XA_N?<9J@%pATd~s@8l%))N zm~#Wph~+k;j4{Rtt8w)W_8M%|0%NNMw={6Dw_sl@dPVw&ZRzn-wY)NQWtbT z>#7dM6a$Fi!{A|_FiWODj_D{+S7l5N%FGj{MX?!EsJ`kSjSLQkh94^2rcJ5ZzOl}9 zU@|ZjmCiXU854{M#sec^S=tj9wpo^8cYjJ4 z_C?Aeb1~m9Fjg;?@urSe^TQ7?QA9i$B5h*8&xZrbLgNbG?+Gf4F>SL}uTGpO`MV6KIsT%-nTfv(a1!9^o8y@)X0CfV)VLVsl9DUKOkihT1MG=h z8?i5ORl~2&r3M!a{6-4^uXqHKHvEp5kW9f?VOIVUIc2U|r|RW;W*cLSam7Gl_%K)) z9gGRyHz$0~=bX1WMRN}3G|PMEw8?vaG*58~;$*|Q<`oLBS5sF3s-CZpx0xj>aCvzQfMJ@6XT8@5vA4Pcsv%Rk<3f@LvO=pQae| zXr;O=Bcm^EJ@WCT+2-zmDpX@+K#CWY2w^>mKiuZeqkrccYNLA7Sh7)lKYZhg|2*We zrWpP$^3Bzo)UT!XSgRYisF~6szVg{$o+mv#Sb9q|Hvc_T4ou7J{>5L-lC3H}Qf3*e zcdAV?-?+b1y*qTYM7PI(ap1?WSE)(3R;<~&OSM}q{2vy>SE({avNRbLrvS_Jk}=9q J-|Y6!`7dS)DgFQe diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/test/java/com/bsd/pjcloud/admin/PayTest.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/test/java/com/bsd/pjcloud/admin/PayTest.java index d90252169..3ea4a9c5a 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/test/java/com/bsd/pjcloud/admin/PayTest.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/test/java/com/bsd/pjcloud/admin/PayTest.java @@ -29,8 +29,8 @@ import java.util.Map; @SpringBootTest(classes = ThirdPartyApp.class) public class PayTest { - private final String baseUrl = "http://123.156.230.15:8089/api"; - // private final String baseUrl = "http://127.0.0.1:9999"; + // private final String baseUrl = "http://123.156.230.15:8089/api"; + private final String baseUrl = "http://127.0.0.1:9999"; private final String walletInfoUrl = "/third/third-pay-api/user-wallet"; @@ -152,8 +152,8 @@ public class PayTest { public void detail() throws Exception { ThirdKeyManageEntity config = getLbConfig(); Map paramsMap = new HashMap<>(); - paramsMap.put("thirdOrderId", ""); - paramsMap.put("thirdRefundId", "10"); + paramsMap.put("thirdOrderId", "1748517531534"); + paramsMap.put("thirdRefundId", ""); String body = JSONUtil.toJsonStr(paramsMap); // 发送请求 String res = HttpRequest.post(baseUrl + detailUrl).contentType("application/json").header(apiCountersign(body)).body(body).execute().body();