From c363c0c6d97072969821ee5c223b4701b2e7695d Mon Sep 17 00:00:00 2001 From: yang <2119157836@qq.com> Date: Sat, 15 Feb 2025 14:36:29 +0800 Subject: [PATCH] =?UTF-8?q?feat(payment):=20=E6=9B=B4=E6=96=B0=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E5=AE=9D=E6=94=AF=E4=BB=98=E5=8A=9F=E8=83=BD=E5=B9=B6?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=AF=81=E4=B9=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CommissionRatioController.java | 89 ++++++ .../myInvitation/InvitationController.java | 4 +- .../pay/AliPay/AliPayController.java | 13 +- .../pay/AliPay/OrderTradeController.java | 19 +- .../resource/MallProductController.java | 4 +- .../resource/ModelImageCommentController.java | 2 +- .../src/main/resources/application-druid.yml | 15 +- .../cert/alipayCertPublicKey_RSA2.crt | 43 +++ .../main/resources/cert/alipayRootCert.crt | 88 ++++++ .../appCertPublicKey_2021005119630093.crt | 23 ++ .../mcwl/common/core/domain/BaseEntity.java | 2 +- .../myInvitation/domain/CommissionRatio.java | 39 +++ .../com/mcwl/myInvitation/domain/Consume.java | 6 + .../domain/vo/CommissionRatioVo.java | 39 +++ .../mapper/CommissionRatioMapper.java | 11 + .../service/CommissionRatioService.java | 23 ++ .../impl/CommissionRatioServiceImpl.java | 71 +++++ .../java/com/mcwl/pay/config/AliConfig.java | 6 +- .../domain/enums/CommissionRationEnum.java | 32 ++ .../com/mcwl/pay/service/AliPayService.java | 2 +- .../mcwl/pay/service/OrderTradeService.java | 2 + .../pay/service/impl/AliPayServiceImpl.java | 71 +++-- .../service/impl/OrderTradeServiceImpl.java | 278 +++++++++++++++--- .../com/mcwl/resource/domain/ModelImage.java | 6 + .../mcwl/resource/domain/ModelProduct.java | 6 + .../com/mcwl/resource/domain/WorkFlow.java | 6 + .../resource/domain/dto/ModelCommentRes.java | 2 +- .../mcwl/resource/domain/dto/ProductRes.java | 35 +++ .../mcwl/resource/domain/vo/ModelImageVo.java | 15 + .../com/mcwl/resource/domain/vo/ModelVo.java | 16 + .../mcwl/resource/domain/vo/WorkFlowVo.java | 14 + .../service/impl/ModelImageServiceImpl.java | 18 +- 32 files changed, 902 insertions(+), 98 deletions(-) create mode 100644 mcwl-admin/src/main/java/com/mcwl/web/controller/myInvitation/CommissionRatioController.java create mode 100644 mcwl-admin/src/main/resources/cert/alipayCertPublicKey_RSA2.crt create mode 100644 mcwl-admin/src/main/resources/cert/alipayRootCert.crt create mode 100644 mcwl-admin/src/main/resources/cert/appCertPublicKey_2021005119630093.crt create mode 100644 mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/CommissionRatio.java create mode 100644 mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/vo/CommissionRatioVo.java create mode 100644 mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/mapper/CommissionRatioMapper.java create mode 100644 mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/service/CommissionRatioService.java create mode 100644 mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/service/impl/CommissionRatioServiceImpl.java create mode 100644 mcwl-pay/src/main/java/com/mcwl/pay/domain/enums/CommissionRationEnum.java create mode 100644 mcwl-resource/src/main/java/com/mcwl/resource/domain/dto/ProductRes.java diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/myInvitation/CommissionRatioController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/myInvitation/CommissionRatioController.java new file mode 100644 index 0000000..eab3b0b --- /dev/null +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/myInvitation/CommissionRatioController.java @@ -0,0 +1,89 @@ +package com.mcwl.web.controller.myInvitation; + + +import com.mcwl.common.core.domain.R; +import com.mcwl.common.utils.SecurityUtils; +import com.mcwl.myInvitation.domain.CommissionRatio; +import com.mcwl.myInvitation.domain.Invitation; +import com.mcwl.myInvitation.domain.dto.EarningsDisplayDto; +import com.mcwl.myInvitation.domain.vo.CommissionRatioVo; +import com.mcwl.myInvitation.domain.vo.EarningsDisplayVO; +import com.mcwl.myInvitation.service.CommissionRatioService; +import com.mcwl.myInvitation.service.InvitationService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.format.annotation.NumberFormat; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import java.util.List; + + +/** + * 提成比例 + */ +@RestController() +@RequiredArgsConstructor +@RequestMapping("/commissionRatio") +@Api(tags = "我的邀请") +public class CommissionRatioController { + + private final CommissionRatioService commissionRatioService; + + + /** + * 提成列表 + */ + @GetMapping("/list") + @ApiOperation(value = "提成列表") + public R> list() { + List list = commissionRatioService.ratioList(); + return R.ok(list); + } + + /** + * 提成详情 + */ + @GetMapping("/detail") + @ApiOperation(value = "提成详情") + public R detail(@Valid @NotNull(message = "提成比例id不能为空") Long id) { + CommissionRatioVo detail = commissionRatioService.detail(id); + if (detail == null) { + return R.fail("提成比例不存在"); + } + return R.ok(detail); + } + + /** + * 修改提成 + */ + @GetMapping("/update") + @ApiOperation(value = "修改提成") + public R update(@Valid + @NotNull(message = "提成比例id不能为空") + Long id, + @Valid + @NotNull(message = "提成比例不能为空") + @NumberFormat + Double ratio) { + + if (ratio < 0 || ratio > 1) { + return R.fail("提成比例必须在0-1之间"); + } + + CommissionRatioVo detail = commissionRatioService.updateRatio(id, ratio); + if (detail == null) { + return R.fail("提成比例不存在"); + } + + return R.ok(detail); + } + + +} diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/myInvitation/InvitationController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/myInvitation/InvitationController.java index 9113d71..8e15ec7 100644 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/myInvitation/InvitationController.java +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/myInvitation/InvitationController.java @@ -24,12 +24,12 @@ import static com.mcwl.common.core.domain.AjaxResult.success; /** - * 邀请管理 + * 我的邀请 */ @RestController() @RequiredArgsConstructor @RequestMapping("/invitation") -@Api(tags = "邀请管理") +@Api(tags = "我的邀请") public class InvitationController { private final InvitationService invitationService; diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/pay/AliPay/AliPayController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/pay/AliPay/AliPayController.java index d42c593..c7734fd 100644 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/pay/AliPay/AliPayController.java +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/pay/AliPay/AliPayController.java @@ -122,9 +122,9 @@ public class AliPayController extends BaseController { @ApiOperation(value = "支付宝支付") @ResponseBody public R doPay(@Valid - @RequestBody - OrderTradeDto orderTradeDto, - HttpServletResponse response) throws Exception { + @RequestBody + OrderTradeDto orderTradeDto, + HttpServletResponse response) throws Exception { PayVo payVo = null; String type = orderTradeDto.getType(); @@ -160,14 +160,13 @@ public class AliPayController extends BaseController { @ResponseBody @ApiOperation(value = "提现") public R fetch(@Valid - @NotNull(message = "提现金额不能为空") - Double amount) throws Exception { + @NotNull(message = "提现金额不能为空") + Double amount) throws Exception { if (amount < 0.1) { return R.fail("提现金额最小为0.1"); } - String outBizNo = UUID.fastUUID().toString(true); - return aliPayService.fetch(outBizNo, amount.toString()); + return aliPayService.fetch(amount.toString()); } diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/pay/AliPay/OrderTradeController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/pay/AliPay/OrderTradeController.java index fb8408e..f7fdccf 100644 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/pay/AliPay/OrderTradeController.java +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/pay/AliPay/OrderTradeController.java @@ -16,6 +16,7 @@ import com.mcwl.common.utils.SecurityUtils; import com.mcwl.pay.domain.OrderTrade; import com.mcwl.pay.service.AliPayService; import com.mcwl.pay.service.OrderTradeService; +import com.mcwl.resource.domain.dto.ProductRes; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -37,7 +38,7 @@ import java.util.Map; */ @RestController -@RequestMapping("/web/pay") +@RequestMapping("/order") @Validated @Api(tags = "订单模块") public class OrderTradeController extends BaseController { @@ -54,6 +55,18 @@ public class OrderTradeController extends BaseController { @Autowired private RedisCache redisCache; + + /** + * 购买产品 + */ + @PostMapping("/buy") + @ApiOperation(value = "购买产品") + public R buy(@Valid @RequestBody ProductRes productRes) throws Exception { + orderTradeService.productHandler(productRes); + return R.ok(); + } + + /** * 查询列表 */ @@ -84,9 +97,9 @@ public class OrderTradeController extends BaseController { /** * 修改 */ - @PostMapping("/upda") + @PostMapping("/update") @ApiOperation(value = "修改订单") - public R upda(@RequestBody OrderTrade orderTrade) { + public R update(@RequestBody OrderTrade orderTrade) { // 获取当前用户 Long userId = SecurityUtils.getUserId(); if (userId == null) { diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/MallProductController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/MallProductController.java index 8ea8912..d796ba9 100644 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/MallProductController.java +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/MallProductController.java @@ -93,7 +93,7 @@ public class MallProductController extends BaseController { @ApiOperation(value = "添加模型") @PostMapping("/insert") - public AjaxResult addupdateModel(@RequestBody RequestModel requestModel) { + public R addupdateModel(@RequestBody RequestModel requestModel) { ModelProduct modelProduct = requestModel.getModelProduct(); Long userId = SecurityUtils.getUserId(); modelProduct.setUserId(userId); @@ -130,7 +130,7 @@ public class MallProductController extends BaseController { */ @ApiOperation(value = "查询模型详情") @GetMapping("/selectModelById") - public AjaxResult selectModelById(@Valid @NotNull(message = "模型id不能为空") @RequestParam Long id) { + public R selectModelById(@Valid @NotNull(message = "模型id不能为空") @RequestParam Long id) { return modelService.selectModelById(id); } diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/ModelImageCommentController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/ModelImageCommentController.java index 3d16e15..470e521 100644 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/ModelImageCommentController.java +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/ModelImageCommentController.java @@ -48,7 +48,7 @@ public class ModelImageCommentController { * 图片评论点赞/取消 */ @ApiOperation(value = "图片评论点赞/取消") - @RepeatSubmit + @RepeatSubmit(interval = 1000) @GetMapping("/commentLike") public R commentLike(@Valid @NotNull(message = "评论id不能为空") diff --git a/mcwl-admin/src/main/resources/application-druid.yml b/mcwl-admin/src/main/resources/application-druid.yml index bc4519d..e019d08 100644 --- a/mcwl-admin/src/main/resources/application-druid.yml +++ b/mcwl-admin/src/main/resources/application-druid.yml @@ -126,8 +126,10 @@ mall: appId: 9021000143684202 # 沙箱应用私钥 privateKey: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCyhwMKnP7oBQ9qKhxke9AXN7ZNcniMnJFcWWFPfs3W6QqKBGFGFYQFyqfmnf2gM4nYtEbvit0CcmSrdniR3aZVb6s0A/KWqD5ejf+zjdnn5XH4GYsm/DXZoBqdAMWQUaQcVB1lC9az1rn13n9UHBJ+s+UAWtFjXMDd78dsE7enU3RjBffyvl/A+r6c0jnSHDNttSXyamxGX8ng8hK5XdCAusOfYpWnLY90sjlyz98snIfVPqAfD3KTP88gRF1KfWZniwMCR/OjCp6jm5d5dvOj8xyk7R1LfZ0CH/fXOcvpCe9JISS9DyzEzW5XpsnO5p8Mo8wFL6TKVBng+Ss0Tr0NAgMBAAECggEAPnaCl+oKPf/XPtvxBy9SxWzWug49I2V8boVPSNMjDfiHmXai2jSY9rXLPSM2JCEkL9ATqag6X6rKkjtnQBH/KpFho1dmP1QqTkb8mkQdY8ehsp6tUzyXUsdzyE8G0NHfy5Gan0ofGtkcQ2xPvIv95JromtErxcokKQLGEYhsj3xL+KVsUh5YedX/6sAiJ1KS5Zs82eh6bbCvUzuSPc4hjyfLSux5AnGBPnwEzWWJiA5z9zK17i8Cb7FnEeRmNvJw7VsXaCMFquZ6+bzlKdSuUqzqNhHMX8AivePTjj7pPHFW3FTh64E20yzl7CIwkScToXT3H7oaHRA1xGySmGNBuQKBgQDXFcg0b8L0A/Zril+4IwfckH1gpUbqlplzfozM/a/0rojQEdS+X7g4ypdPc47cwoLJx08/84L8ZPj49CImoGNdj5K9B2fY/E10SIJJqN5lb9NI4KINvGGM58NDSAl+GjT5mljkPI8jzQ1ACcy9DGV/KVScGHUWUpeLOK22AEcfWwKBgQDUfPFBHc2Bkuv3bRoNT+fnChMw5CI65wD74vR5GKyurh50DB3RZXwhRsAFd9NowINm9B2KAR0IrB+vh3EwfJaWDauh3ykZZtrAphSa11dJXvtathHTuQmXalZv5brh5mHie87yoxMn7vqDi0bwkNlb/b1wwokwc0oc3NSoNsFptwKBgCJhjPs00kkHSSCvodVhZCRRxHjqcoeVQzo/BGrQMow+SghYkVVNH7mUSNOeeTu4rAdtILHsTwfhbBr/i2X5RWjzRlWJFYSN8COiY5E6uTIlyfRgVAc2EbHgakoa/cl2jvlHPuZc99SVNoUCDAQ8Mw08ohXBoxXKZgcPLFVnffb5AoGBAJW5cDmk6WCrCRAwVVIaAtsek0U5CxGcImpakk8d3te7IwQ8YWph6yR7eOSheVrvg+ewjXvnqvCocC877brvnyAeg9isqYYXnn5uyEgPApdVkSFq94bLdIG30S5JnvR8ZG61NK5t0BqsXuL/6b2rIy2Zzrm8qfR02D0cMdBRvNljAoGBAMJG7/TqodrYPYyOZ4/IbbhAitBHWpHYJHSENnuxbQGAQuCt52Jp3eULR2r7uk3dUDuE8mB2QAEStuV/orfdxxRxJIYbEynJFGCa9O5LTevbM4MoNRfLCPPmFK5PJivlJcdrCyQKEmGSLLrVdb3H/Wzu0/4K/ZhwyrtBz4MRkuwD - # 沙箱支付宝公钥 - publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgfv3CE8I87I5HHcMtK1RrPQZzLqYlXxRa96lIYkEyFsxdMcMSwnNJJf/mceZhMQnXQDkuEYTZPO/DJbmiZkBWbRZNfIJur5Af/wKZEmHahtEWlrdJdJ6fh7j11eeqbXBfo55H1dxPEQA/obfe85WrqoE0fa06XElgq5/RwsSKjZpnorbO8mMnDaRwxIOoRVHQlHgfkMtTHfP+Zw8Kv0tyJdWLxVDgtg0OoO8VnrDNGBwsxJDOvLjZBbp9NX3wiWQpfh4OBkN1KKfIA9yfBhS6N0bnWfr428Boz/qNhycdrG/MYGQDiG8hVt177fKvTVXRf/kdSIz3izN1GnzOUkadQIDAQAB + # 沙箱支付宝公钥证书路径 + alipayCertPath: cert/alipay/alipayCertPublicKey_RSA2.crt + # 沙箱支付宝根证书路径 + alipayRootCertPath: cert/alipay/alipayRootCert.crt notifyUrl: https://7d014da8.r27.cpolar.top/ali/pay/notify # 沙箱支付宝网关 gatewayUrl: https://openapi-sandbox.dl.alipaydev.com/gateway.do @@ -140,11 +142,14 @@ mall: # gatewayHost: openapi-sandbox.dl.alipaydev.com # signType: RSA2 # # 线上应用id -# appId: 2021005114616085 +# appId: 2021005119630093 # # 线上应用私钥 -# privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCMsTikcbGWE/E9bzaVCUvtqlrzzOo26zYl1mOVRPjJTMRi7VJrOGRpanvG9d0tCh7D5HEBO6hkd5UxEXT0/HOBRgHx7GnvUIGyAstyL8galRWpsDrRD6NVEVMB6l7mntJzfF1GKsHME2ITPp8zv7IXGGHajlA7NWO4DK6dbVL9VwdcZI1HC5nvAVm4gRsfg3uFa2i6aG+M4iKK4F94HEifFhAbi3PNDt+AF7GeE+/IWY1raNupWhoEDRLL54p9UqVhjF+cKvKfspthfo5cAsk07vxB5QGBSOOM7/Sd4gP/9tXbhJmCjQT0EWShgyHHW95qaCBDRFfEu4fyehikBaFrAgMBAAECggEAVy+3/0gpmexv0fdqZr9lGzo3tN/mwPPQEXCjM6yTVAPLq9aP/bvrldwUKn7QeonL+O9HDFGRD/l/LfI4fV04owLkT6yHFXPZe5v5waBUrAx5aTe5qza6rAvZWdWIy/feSQznrITwpevZGj3zYJlJ3sAQW+VXWOnECxlo2EwYYr+xm6TPacjx3aP/tp/7wp8cDit3gJpoMPG8sSBoDNBgF4vHAkF9GOf4JpHXQyVvRM7hv/jfH2h0K0tae/FxCBwXnjHEiV0EJyRYhq+NRETU2Srd+gaJejz/fpIZgbU5C5hFYKzqhHDilIvvZJxsSsUQWDI/htxCBZW4IgwJyYOhUQKBgQDCKSg47AX9NJjZgJlEG9fbHNCEIwl3hQAWXGHup+S9V9UVx90KmkfQubUrdr4ToszsHsDINIALd9z6HgJvhLBbPQ7nvts+go6THZU38SPqxHdoyqD6g+qDVDYzZHFPWInNw1X3/AKERkOPl5Ifvn/sjy++X4I824Vgu137CfffSQKBgQC5gIZ7e7pe6DJr98oSpARjBjsbyI6WB5S1CBsHVLL78IN4CqwTkgpaOsO8c4OOlo5FkSU3gPtxOpshKWq2Xy1IBDh3cpj70GMs8DINzA/lYR6/Y366Spavkk5IBHsVJ2bflTVPtIWUXjbL+jcyaXgZIZTUbZb4wPwgOFAM5oyXEwKBgDxwtW2qw16D7gTfDFbwV+yEdsB7a6oCA/nx/iZdq03ptpJWKg/v4OUvuh7yks7oAeSK2jY4aZeoU2ikyNtQMdnlEuu/NN6ro5hWQCou7aBaUlWTpjL1t530K/8piEBL7nHYGb3dfCcS/FsJstog4g+QrysS7iblqwpmqSXJf5jJAoGBAKmzxdPj3h0DCVWyq1+gQw8gXSTOtnrUVpvC3Y84UkGfx3YjNUb2HJhtGDIn7xub6m4EGesMCXuNpOuSizhqG++9RLcp1IDSJFixKOlsXMJ4tftbF01v/SiDjS/fQYaZtEgopUvUlzujcTfsIWDyEdfT2+b2lt3dFwqW2czjgYyXAoGASBOqGf21NSwB+RO/gPWuA/EeL8jI9SBc3V6VFvpkp8EH5+yzwXumTD9TTwOvaXpxMgjraRkCmNDwZmMpCU3ZHg9Pj+37bbIXJOBt8f1COTWf2uPp0GqVqSeWDOrJ/MQ6Mqmou/ifXvkhgExmo5ustu4v5WNE0WsYiGeVBMRejDE= +# privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCQuhRU5iHoabfzJS40A+moMKzb5rmi5XbL59K98CW65Oq/rnzQnj6sCYggIXOLCLKUykZ1XIVa+4V7bGFkMDF0236ncPumnVY/tfCSebLyKl+up1mGeH4mAR6ily7nXAhRnXL+A0015bpCa5FCg2ReN68MEmquB/mHfeLqJfRupwzDWnIWxYSKkFCJ0i47KTFYhM93LHHQ8GrZNNaeiJ6q59MruQI83z0HCxN/DzK4Z2rBWGilwPuYcSEa0STPXYhz8XMXUX/Mlp7dd5zyWeNaxkNRWlhKHvhLVPGvteaEcchs476DIWLCRVXEC1372wMKNrKblzRp7Wi5+l+W14k5AgMBAAECggEAHahkPjmivTPc5FC8NSCQI01GPxH6/Ky1OXfaMd4ifTgn+vvQzBeBlFOnt53jRZyUq/T/l1FMaqacZfyBwLw3hlDslXeLuksHv6qTEBEsYH/ad7oHmIzcnQEhvAPrMrIjakYvqGoYynC3SKEudUjjqoMSthCYF+2+bsuXUpBQlNQLqcJ03U+YhfLswwVVujKvAujoLRqDAWeaa0k0y/1Ua4fr5GJq5M+P8TTBRgZlSK5A7Ee6yxMUncZ9W3lTqZtyG0OQLbz9gkr0c63KPisigaOx9eKlCPWFWUWo+zGvQMVijHDTeoJ3dqNmsPtiIE3rDt8anx4a1R7YK6MQ520hAQKBgQDPFMNl4fRmLSOLNShJm/0mBMoIjPmS3+tPBtCiG4oH9F8vYMJWDA1Im0FdgRa2HlCv6hpiVvvQt824RaUYa7XR6aefXKVEWddHvl3utnghMohjK8o8fTmIxADtU5Q2OlWmPdp1v7yDg8yE5P1GlY+AZ3oggxXOIRVtQrNeL7E3iQKBgQCy6nEaUQUCDDts4o7Pn+N402g3/T9Vz/5JtKmDI01EndK5l/yE8CdgGwdiwN1k3la/Nv8P5kaaX2qVcCGoOIQmMNGOxuNfkKCi+bJKdxmFOI4E3iVYT2H6x27QJwNB6bik1i6b2OWT7ckxeB6xMjefNp1u8Qif+vab60OQZSqoMQKBgESRF3Hwsz/xykcZvtFAuT2RcGQMacbcJcnw87v5ambf33SMkUx0iSF1ZttTFvYOa6ET3tCZBKBDe/Z7+QJxB68NstbtkjtjlAjJW8ji2jwDw20y3q/QtvA2Fih++CBMiHeXG3LJnd3eEiYevE5Wz0ExAhspzFqIUdPvtfyFxiQhAoGBAKgc+iGMN3RxIfVx/FbDGe6SVr8lSrnLMlj3VMBQD26GDVcupKwVLCp1uz7jkiQRdtk9R/UcnwK23WOFdVqnoCRygrXx0/wb3ZTFou2tc2Fmfqu8QML19E67zjfwMHNitYjNaAYwi6ewKvg8sjo1wWXs34k7GquYGNjw+w9Wv/pBAoGAUlVHfZ4RncAiiH/x3EDgqmmVikFpLoM2xXxM16nplrjdBE6IzkpgWb/x2ZI6JCMDyoV2kvF6owW2+QEQ81MrHQMtBRpAvd8nI03gXA5VF3uwp4UjfGpoIAGDBrqQv9DM8vx6C6VJNTT5esZWZSw/+PZ4D19l0/n7gICGx3ugw0Q= +# # 线上支付宝公钥证书路径 +# alipayCertPath: cert/alipay/alipayCertPublicKey_RSA2.crt +# # 线上支付宝根证书路径 +# alipayRootCertPath: cert/alipay/alipayRootCert.crt # # 线上支付宝公钥 -# publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApcX0/YWkzEYO4Lki2ViFzezoIYq1AgOjc4lES59hmrJLJGWenCk/88M4SqKRj/6xPpsiMqe+GAzKRqZoCJvV1Cp5sqRaR/e+QyAqW8wDZbEKvnCK3lKB9W/8lntwzB1zGRDD9Tk1v5hcdXbCJ/hrg8REwlTSespeVD1+nnlKZbj14zvgmYM1SupYzmDw3SWArkf/OQDo6dnJGQkBOv92dDA2pzatUVkdKccctd35MEM7N88gjlHKcUJ1d95H3vij/zy4luV4ylHnxho7ZkZK4vh0v40Oqw/DUdpkbju4dcuBUXGrup+8/7A7ZSdqkf2XDvPW9PxGotQ4YvmCDt6izwIDAQAB # notifyUrl: https://253d7236.r27.cpolar.top/ali/pay/notify # # 线上支付宝网关 # gatewayUrl: https://openapi.alipay.com/gateway.do diff --git a/mcwl-admin/src/main/resources/cert/alipayCertPublicKey_RSA2.crt b/mcwl-admin/src/main/resources/cert/alipayCertPublicKey_RSA2.crt new file mode 100644 index 0000000..a7b700e --- /dev/null +++ b/mcwl-admin/src/main/resources/cert/alipayCertPublicKey_RSA2.crt @@ -0,0 +1,43 @@ +-----BEGIN CERTIFICATE----- +MIIDnTCCAoWgAwIBAgIQICUCFPTaqv/ZUGkFjQNMjTANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE +BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs +YXNzIDIgUjEwHhcNMjUwMjE0MDkxMDAxWhcNMzAwMjEzMDkxMDAxWjB+MQswCQYDVQQGEwJDTjEZ +MBcGA1UECgwQMjA4ODk0Mjk4OTQ4MjU3OTEPMA0GA1UECwwGQWxpcGF5MUMwQQYDVQQDDDrmlK/k +u5jlrp0o5Lit5Zu9Kee9kee7nOaKgOacr+aciemZkOWFrOWPuC0yMDg4OTQyOTg5NDgyNTc5MIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwa7R9uTM3VJpWZDWiNSUw23AoIlSZ4Y6lgaA +xuhKYmUx8P2yCHJ8xEyASRHUggrYoEvkbuLqHPpNPmJsMaqnbuP4uwfkxO9l/D2bnPRFd2e4eQhX +L7YHOLRWgHhMBfkMYMq9A8kJHDa9drVbxvp1zbvxakJvEuJ9TVCvHdpsTGbMxBn5PP7qTQYoQAQj +FYF6j6eLmrskFgqYGmDV2dbf/tFLaQZSuhut47pb3glvi7g0ECMy+S3v76pZk5+FP42EkBFFsLH1 +lTREgO1PTSRAEiZkSGRLtmf3u6EMb42pE6EUF4pHHaACEQ3ZRuYK8Mo00A0FmwAoKil2MxkzAX5Z +KQIDAQABoxIwEDAOBgNVHQ8BAf8EBAMCA/gwDQYJKoZIhvcNAQELBQADggEBAGsnIGoHjk4+YUJJ +nLMggzUmAuKt1rHcUN+3SfsNmnGqwluy4cm4emxj2qwcTzEEQvrES33difh4Ubtf2XyS1MFLkxhG +WonCuEUjZqKgWz66gCG3l0l7HRy2VJaaaVlC49yJMOsuUNtAFjh+Pu5XVb7ff8Adf3YGNeFC4Tde +gkBgDO8RbPSfdc7bP0Fq+TPj5nMCu64KzBz4RP5da7Q/mSFI2PCvtEquhq/eeDezfHUAz2ehC/bA +dSRHytgzrGktk+BIPtEsoYG9zIHBNwA8JCr9Z5q2eauhYvIE1sJVO151Dph1u4LE1voQQ4qr4t6v +gU2IoL6w5LvdWDSQCIrPOa4= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIE4jCCAsqgAwIBAgIIYsSr5bKAMl8wDQYJKoZIhvcNAQELBQAwejELMAkGA1UEBhMCQ04xFjAU +BgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEw +LwYDVQQDDChBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFIxMB4XDTE4MDMy +MjE0MzQxNVoXDTM3MTEyNjE0MzQxNVowgYIxCzAJBgNVBAYTAkNOMRYwFAYDVQQKDA1BbnQgRmlu +YW5jaWFsMSAwHgYDVQQLDBdDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTE5MDcGA1UEAwwwQW50IEZp +bmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBDbGFzcyAyIFIxMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEAsLMfYaoRoPRbmDcAfXPCmKf43pWRN5yTXa/KJWO0l+mrgQvs89bA +NEvbDUxlkGwycwtwi5DgBuBgVhLliXu+R9CYgr2dXs8D8Hx/gsggDcyGPLmVrDOnL+dyeauheARZ +fA3du60fwEwwbGcVIpIxPa/4n3IS/ElxQa6DNgqxh8J9Xwh7qMGl0JK9+bALuxf7B541Gr4p0WEN +G8fhgjBV4w4ut9eQLOoa1eddOUSZcy46Z7allwowwgt7b5VFfx/P1iKJ3LzBMgkCK7GZ2kiLrL7R +iqV+h482J7hkJD+ardoc6LnrHO/hIZymDxok+VH9fVeUdQa29IZKrIDVj65THQIDAQABo2MwYTAf +BgNVHSMEGDAWgBRfdLQEwE8HWurlsdsio4dBspzhATAdBgNVHQ4EFgQUSqHkYINtUSAtDPnS8Xoy +oP9p7qEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIB +AIQ8TzFy4bVIVb8+WhHKCkKNPcJe2EZuIcqvRoi727lZTJOfYy/JzLtckyZYfEI8J0lasZ29wkTt +a1IjSo+a6XdhudU4ONVBrL70U8Kzntplw/6TBNbLFpp7taRALjUgbCOk4EoBMbeCL0GiYYsTS0mw +7xdySzmGQku4GTyqutIGPQwKxSj9iSFw1FCZqr4VP4tyXzMUgc52SzagA6i7AyLedd3tbS6lnR5B +L+W9Kx9hwT8L7WANAxQzv/jGldeuSLN8bsTxlOYlsdjmIGu/C9OWblPYGpjQQIRyvs4Cc/mNhrh+ +14EQgwuemIIFDLOgcD+iISoN8CqegelNcJndFw1PDN6LkVoiHz9p7jzsge8RKay/QW6C03KNDpWZ +EUCgCUdfHfo8xKeR+LL1cfn24HKJmZt8L/aeRZwZ1jwePXFRVtiXELvgJuM/tJDIFj2KD337iV64 +fWcKQ/ydDVGqfDZAdcU4hQdsrPWENwPTQPfVPq2NNLMyIH9+WKx9Ed6/WzeZmIy5ZWpX1TtTolo6 +OJXQFeItMAjHxW/ZSZTok5IS3FuRhExturaInnzjYpx50a6kS34c5+c8hYq7sAtZ/CNLZmBnBCFD +aMQqT8xFZJ5uolUaSeXxg7JFY1QsYp5RKvj4SjFwCGKJ2+hPPe9UyyltxOidNtxjaknOCeBHytOr +-----END CERTIFICATE----- diff --git a/mcwl-admin/src/main/resources/cert/alipayRootCert.crt b/mcwl-admin/src/main/resources/cert/alipayRootCert.crt new file mode 100644 index 0000000..76417c5 --- /dev/null +++ b/mcwl-admin/src/main/resources/cert/alipayRootCert.crt @@ -0,0 +1,88 @@ +-----BEGIN CERTIFICATE----- +MIIBszCCAVegAwIBAgIIaeL+wBcKxnswDAYIKoEcz1UBg3UFADAuMQswCQYDVQQG +EwJDTjEOMAwGA1UECgwFTlJDQUMxDzANBgNVBAMMBlJPT1RDQTAeFw0xMjA3MTQw +MzExNTlaFw00MjA3MDcwMzExNTlaMC4xCzAJBgNVBAYTAkNOMQ4wDAYDVQQKDAVO +UkNBQzEPMA0GA1UEAwwGUk9PVENBMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE +MPCca6pmgcchsTf2UnBeL9rtp4nw+itk1Kzrmbnqo05lUwkwlWK+4OIrtFdAqnRT +V7Q9v1htkv42TsIutzd126NdMFswHwYDVR0jBBgwFoAUTDKxl9kzG8SmBcHG5Yti +W/CXdlgwDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFEwysZfZ +MxvEpgXBxuWLYlvwl3ZYMAwGCCqBHM9VAYN1BQADSAAwRQIgG1bSLeOXp3oB8H7b +53W+CKOPl2PknmWEq/lMhtn25HkCIQDaHDgWxWFtnCrBjH16/W3Ezn7/U/Vjo5xI +pDoiVhsLwg== +-----END CERTIFICATE----- + +-----BEGIN CERTIFICATE----- +MIIF0zCCA7ugAwIBAgIIH8+hjWpIDREwDQYJKoZIhvcNAQELBQAwejELMAkGA1UE +BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmlj +YXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5jaWFsIENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5IFIxMB4XDTE4MDMyMTEzNDg0MFoXDTM4MDIyODEzNDg0 +MFowejELMAkGA1UEBhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNV +BAsMF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5j +aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFIxMIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEAtytTRcBNuur5h8xuxnlKJetT65cHGemGi8oD+beHFPTk +rUTlFt9Xn7fAVGo6QSsPb9uGLpUFGEdGmbsQ2q9cV4P89qkH04VzIPwT7AywJdt2 +xAvMs+MgHFJzOYfL1QkdOOVO7NwKxH8IvlQgFabWomWk2Ei9WfUyxFjVO1LVh0Bp +dRBeWLMkdudx0tl3+21t1apnReFNQ5nfX29xeSxIhesaMHDZFViO/DXDNW2BcTs6 +vSWKyJ4YIIIzStumD8K1xMsoaZBMDxg4itjWFaKRgNuPiIn4kjDY3kC66Sl/6yTl +YUz8AybbEsICZzssdZh7jcNb1VRfk79lgAprm/Ktl+mgrU1gaMGP1OE25JCbqli1 +Pbw/BpPynyP9+XulE+2mxFwTYhKAwpDIDKuYsFUXuo8t261pCovI1CXFzAQM2w7H +DtA2nOXSW6q0jGDJ5+WauH+K8ZSvA6x4sFo4u0KNCx0ROTBpLif6GTngqo3sj+98 +SZiMNLFMQoQkjkdN5Q5g9N6CFZPVZ6QpO0JcIc7S1le/g9z5iBKnifrKxy0TQjtG +PsDwc8ubPnRm/F82RReCoyNyx63indpgFfhN7+KxUIQ9cOwwTvemmor0A+ZQamRe +9LMuiEfEaWUDK+6O0Gl8lO571uI5onYdN1VIgOmwFbe+D8TcuzVjIZ/zvHrAGUcC +AwEAAaNdMFswCwYDVR0PBAQDAgEGMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFF90 +tATATwda6uWx2yKjh0GynOEBMB8GA1UdIwQYMBaAFF90tATATwda6uWx2yKjh0Gy +nOEBMA0GCSqGSIb3DQEBCwUAA4ICAQCVYaOtqOLIpsrEikE5lb+UARNSFJg6tpkf +tJ2U8QF/DejemEHx5IClQu6ajxjtu0Aie4/3UnIXop8nH/Q57l+Wyt9T7N2WPiNq +JSlYKYbJpPF8LXbuKYG3BTFTdOVFIeRe2NUyYh/xs6bXGr4WKTXb3qBmzR02FSy3 +IODQw5Q6zpXj8prYqFHYsOvGCEc1CwJaSaYwRhTkFedJUxiyhyB5GQwoFfExCVHW +05ZFCAVYFldCJvUzfzrWubN6wX0DD2dwultgmldOn/W/n8at52mpPNvIdbZb2F41 +T0YZeoWnCJrYXjq/32oc1cmifIHqySnyMnavi75DxPCdZsCOpSAT4j4lAQRGsfgI +kkLPGQieMfNNkMCKh7qjwdXAVtdqhf0RVtFILH3OyEodlk1HYXqX5iE5wlaKzDop +PKwf2Q3BErq1xChYGGVS+dEvyXc/2nIBlt7uLWKp4XFjqekKbaGaLJdjYP5b2s7N +1dM0MXQ/f8XoXKBkJNzEiM3hfsU6DOREgMc1DIsFKxfuMwX3EkVQM1If8ghb6x5Y +jXayv+NLbidOSzk4vl5QwngO/JYFMkoc6i9LNwEaEtR9PhnrdubxmrtM+RjfBm02 +77q3dSWFESFQ4QxYWew4pHE0DpWbWy/iMIKQ6UZ5RLvB8GEcgt8ON7BBJeMc+Dyi +kT9qhqn+lw== +-----END CERTIFICATE----- + +-----BEGIN CERTIFICATE----- +MIICiDCCAgygAwIBAgIIQX76UsB/30owDAYIKoZIzj0EAwMFADB6MQswCQYDVQQG +EwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UECwwXQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNpYWwgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkgRTEwHhcNMTkwNDI4MTYyMDQ0WhcNNDkwNDIwMTYyMDQ0 +WjB6MQswCQYDVQQGEwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UE +CwwXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNp +YWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRTEwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAASCCRa94QI0vR5Up9Yr9HEupz6hSoyjySYqo7v837KnmjveUIUNiuC9pWAU +WP3jwLX3HkzeiNdeg22a0IZPoSUCpasufiLAnfXh6NInLiWBrjLJXDSGaY7vaokt +rpZvAdmjXTBbMAsGA1UdDwQEAwIBBjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBRZ +4ZTgDpksHL2qcpkFkxD2zVd16TAfBgNVHSMEGDAWgBRZ4ZTgDpksHL2qcpkFkxD2 +zVd16TAMBggqhkjOPQQDAwUAA2gAMGUCMQD4IoqT2hTUn0jt7oXLdMJ8q4vLp6sg +wHfPiOr9gxreb+e6Oidwd2LDnC4OUqCWiF8CMAzwKs4SnDJYcMLf2vpkbuVE4dTH +Rglz+HGcTLWsFs4KxLsq7MuU+vJTBUeDJeDjdA== +-----END CERTIFICATE----- + +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIUEMdk6dVgOEIS2cCP0Q43P90Ps5YwDQYJKoZIhvcNAQEF +BQAwajELMAkGA1UEBhMCQ04xEzARBgNVBAoMCmlUcnVzQ2hpbmExHDAaBgNVBAsM +E0NoaW5hIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMMH2lUcnVzQ2hpbmEgQ2xhc3Mg +MiBSb290IENBIC0gRzMwHhcNMTMwNDE4MDkzNjU2WhcNMzMwNDE4MDkzNjU2WjBq +MQswCQYDVQQGEwJDTjETMBEGA1UECgwKaVRydXNDaGluYTEcMBoGA1UECwwTQ2hp +bmEgVHJ1c3QgTmV0d29yazEoMCYGA1UEAwwfaVRydXNDaGluYSBDbGFzcyAyIFJv +b3QgQ0EgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOPPShpV +nJbMqqCw6Bz1kehnoPst9pkr0V9idOwU2oyS47/HjJXk9Rd5a9xfwkPO88trUpz5 +4GmmwspDXjVFu9L0eFaRuH3KMha1Ak01citbF7cQLJlS7XI+tpkTGHEY5pt3EsQg +wykfZl/A1jrnSkspMS997r2Gim54cwz+mTMgDRhZsKK/lbOeBPpWtcFizjXYCqhw +WktvQfZBYi6o4sHCshnOswi4yV1p+LuFcQ2ciYdWvULh1eZhLxHbGXyznYHi0dGN +z+I9H8aXxqAQfHVhbdHNzi77hCxFjOy+hHrGsyzjrd2swVQ2iUWP8BfEQqGLqM1g +KgWKYfcTGdbPB1MCAwEAAaNjMGEwHQYDVR0OBBYEFG/oAMxTVe7y0+408CTAK8hA +uTyRMB8GA1UdIwQYMBaAFG/oAMxTVe7y0+408CTAK8hAuTyRMA8GA1UdEwEB/wQF +MAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBLnUTfW7hp +emMbuUGCk7RBswzOT83bDM6824EkUnf+X0iKS95SUNGeeSWK2o/3ALJo5hi7GZr3 +U8eLaWAcYizfO99UXMRBPw5PRR+gXGEronGUugLpxsjuynoLQu8GQAeysSXKbN1I +UugDo9u8igJORYA+5ms0s5sCUySqbQ2R5z/GoceyI9LdxIVa1RjVX8pYOj8JFwtn +DJN3ftSFvNMYwRuILKuqUYSHc2GPYiHVflDh5nDymCMOQFcFG3WsEuB+EYQPFgIU +1DHmdZcz7Llx8UOZXX2JupWCYzK1XhJb+r4hK5ncf/w8qGtYlmyJpxk3hr1TfUJX +Yf4Zr0fJsGuv +-----END CERTIFICATE----- \ No newline at end of file diff --git a/mcwl-admin/src/main/resources/cert/appCertPublicKey_2021005119630093.crt b/mcwl-admin/src/main/resources/cert/appCertPublicKey_2021005119630093.crt new file mode 100644 index 0000000..23c7484 --- /dev/null +++ b/mcwl-admin/src/main/resources/cert/appCertPublicKey_2021005119630093.crt @@ -0,0 +1,23 @@ +-----BEGIN CERTIFICATE----- +MIIEgjCCA2qgAwIBAgIQICUCFE7HTf+7v9yXtoeyLjANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE +BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs +YXNzIDEgUjEwHhcNMjUwMjE0MDkxMDAwWhcNMzAwMjEzMDkxMDAwWjBKMQswCQYDVQQGEwJDTjEP +MA0GA1UECgwG5Ya35paMMQ8wDQYDVQQLDAZBbGlwYXkxGTAXBgNVBAMMEDIwODg5NDI5ODk0ODI1 +NzkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCQuhRU5iHoabfzJS40A+moMKzb5rmi +5XbL59K98CW65Oq/rnzQnj6sCYggIXOLCLKUykZ1XIVa+4V7bGFkMDF0236ncPumnVY/tfCSebLy +Kl+up1mGeH4mAR6ily7nXAhRnXL+A0015bpCa5FCg2ReN68MEmquB/mHfeLqJfRupwzDWnIWxYSK +kFCJ0i47KTFYhM93LHHQ8GrZNNaeiJ6q59MruQI83z0HCxN/DzK4Z2rBWGilwPuYcSEa0STPXYhz +8XMXUX/Mlp7dd5zyWeNaxkNRWlhKHvhLVPGvteaEcchs476DIWLCRVXEC1372wMKNrKblzRp7Wi5 ++l+W14k5AgMBAAGjggEpMIIBJTAfBgNVHSMEGDAWgBRxB+IEYRbk5fJl6zEPyeD0PJrVkTAdBgNV +HQ4EFgQUqfZMfgxmG9w6m5lXQSdoiPe0vagwQAYDVR0gBDkwNzA1BgdggRwBbgEBMCowKAYIKwYB +BQUHAgEWHGh0dHA6Ly9jYS5hbGlwYXkuY29tL2Nwcy5wZGYwDgYDVR0PAQH/BAQDAgbAMC8GA1Ud +HwQoMCYwJKAioCCGHmh0dHA6Ly9jYS5hbGlwYXkuY29tL2NybDk4LmNybDBgBggrBgEFBQcBAQRU +MFIwKAYIKwYBBQUHMAKGHGh0dHA6Ly9jYS5hbGlwYXkuY29tL2NhNi5jZXIwJgYIKwYBBQUHMAGG +Gmh0dHA6Ly9jYS5hbGlwYXkuY29tOjgzNDAvMA0GCSqGSIb3DQEBCwUAA4IBAQAmDOoavQGthLtz +WuW1e0g0K2WChYevFcnWWNILTJ0EsB01Ka0FagOo1T3ErGns+G9lbSj9g6DQZ5DVqLCGnl2ZRvBN +KwSnA/7Frllf7CebBaW5WWJ3VKWxP929izvywlPeQdmRELNGK4H/IZoW+nCDYjUgXLOLMgBnqmLY +wgug/g3iQ+yFSFuvSNE2J84FwPycWweDJ8zrj4aM9S/bjjWoE/Lfe/a86BIYV19A72Ozc/aTGnxP +W/D5txDrhO2wWeCzXd7TuBN1Hze5IX/hYeDqM3rjHuQcGcbFJOchqqR5fUEC/SU9MZ4j/KWND83l +Y28GbRbP5jxhgckHIKjfKh6b +-----END CERTIFICATE----- \ No newline at end of file diff --git a/mcwl-common/src/main/java/com/mcwl/common/core/domain/BaseEntity.java b/mcwl-common/src/main/java/com/mcwl/common/core/domain/BaseEntity.java index b0eed22..26a46d5 100644 --- a/mcwl-common/src/main/java/com/mcwl/common/core/domain/BaseEntity.java +++ b/mcwl-common/src/main/java/com/mcwl/common/core/domain/BaseEntity.java @@ -33,7 +33,7 @@ public class BaseEntity implements Serializable private String createBy; /** 创建时间 */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @TableField(fill = FieldFill.INSERT) private Date createTime; diff --git a/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/CommissionRatio.java b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/CommissionRatio.java new file mode 100644 index 0000000..5e4f78e --- /dev/null +++ b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/CommissionRatio.java @@ -0,0 +1,39 @@ +package com.mcwl.myInvitation.domain; + + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.mcwl.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("inv_commission_ratio") +public class CommissionRatio extends BaseEntity { + + + /** + * 主键id + */ + @TableId + private Long id; + /** + * 最小单数 + */ + private Integer minCount; + /** + * 最大单数 + */ + private Integer maxCount; + /** + * 抽取比例 + */ + private Double ratio; + /** + * 类型 0邀请人-被邀请人 1公司-商家 + */ + private Integer type; + + +} diff --git a/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/Consume.java b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/Consume.java index 8121c49..5f6639f 100644 --- a/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/Consume.java +++ b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/Consume.java @@ -26,6 +26,12 @@ public class Consume extends BaseEntity { // 消费金额 private Double amount; + // 商品id + private Long productId; + + // 商品类型 + private Integer type; + // 消费时间 private Date consumeDate; } diff --git a/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/vo/CommissionRatioVo.java b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/vo/CommissionRatioVo.java new file mode 100644 index 0000000..cf5f166 --- /dev/null +++ b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/vo/CommissionRatioVo.java @@ -0,0 +1,39 @@ +package com.mcwl.myInvitation.domain.vo; + + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.mcwl.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@ApiModel(description = "佣金比例") +public class CommissionRatioVo { + + + /** + * 主键id + */ + @TableId + private Long id; + /** + * 最小单数 + */ + private Integer minCount; + /** + * 最大单数 + */ + private Integer maxCount; + /** + * 抽取比例 + */ + private Double ratio; + /** + * 提成类型,平台手续费、邀请人提成 + */ + private String ratioName; + + +} diff --git a/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/mapper/CommissionRatioMapper.java b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/mapper/CommissionRatioMapper.java new file mode 100644 index 0000000..08fdfcf --- /dev/null +++ b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/mapper/CommissionRatioMapper.java @@ -0,0 +1,11 @@ +package com.mcwl.myInvitation.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.mcwl.myInvitation.domain.Commission; +import com.mcwl.myInvitation.domain.CommissionRatio; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface CommissionRatioMapper extends BaseMapper { + +} diff --git a/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/service/CommissionRatioService.java b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/service/CommissionRatioService.java new file mode 100644 index 0000000..858577b --- /dev/null +++ b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/service/CommissionRatioService.java @@ -0,0 +1,23 @@ +package com.mcwl.myInvitation.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.mcwl.myInvitation.domain.CommissionRatio; +import com.mcwl.myInvitation.domain.vo.CommissionRatioVo; + +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import java.util.List; + +public interface CommissionRatioService extends IService { + + /** + * 获取佣金比例列表 + * + * @return List + */ + List ratioList(); + + CommissionRatioVo updateRatio(Long id, Double ratio); + + CommissionRatioVo detail(Long id); +} diff --git a/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/service/impl/CommissionRatioServiceImpl.java b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/service/impl/CommissionRatioServiceImpl.java new file mode 100644 index 0000000..5bf8d15 --- /dev/null +++ b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/service/impl/CommissionRatioServiceImpl.java @@ -0,0 +1,71 @@ +package com.mcwl.myInvitation.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.mcwl.myInvitation.domain.CommissionRatio; +import com.mcwl.myInvitation.domain.vo.CommissionRatioVo; +import com.mcwl.myInvitation.mapper.CommissionRatioMapper; +import com.mcwl.myInvitation.service.CommissionRatioService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Objects; + + +@Service +@RequiredArgsConstructor +public class CommissionRatioServiceImpl extends ServiceImpl implements CommissionRatioService { + + + @Override + public List ratioList() { + List list = baseMapper.selectList(null); + if (list == null || list.isEmpty()) { + return Collections.emptyList(); + } + List vos = new ArrayList<>(); + for (CommissionRatio commissionRatio : list) { + CommissionRatioVo vo = getCommissionRatioVo(commissionRatio); + vos.add(vo); + } + return vos; + } + + @Override + public CommissionRatioVo updateRatio(Long id, Double ratio) { + CommissionRatio commissionRatio = baseMapper.selectById(id); + if (Objects.isNull(commissionRatio)) { + return null; + } + commissionRatio.setRatio(ratio); + baseMapper.insert(commissionRatio); + + return this.getCommissionRatioVo(commissionRatio); + } + + @Override + public CommissionRatioVo detail(Long id) { + CommissionRatio commissionRatio = baseMapper.selectById(id); + if (Objects.isNull(commissionRatio)) { + return null; + } + return this.getCommissionRatioVo(commissionRatio); + } + + + private CommissionRatioVo getCommissionRatioVo(CommissionRatio commissionRatio) { + CommissionRatioVo vo = new CommissionRatioVo(); + BeanUtil.copyProperties(commissionRatio, vo); + if (commissionRatio.getType() == 0) { + vo.setRatioName("平台手续费"); + } else if (commissionRatio.getType() == 1) { + vo.setRatioName("邀请人提成"); + } + return vo; + } + + +} diff --git a/mcwl-pay/src/main/java/com/mcwl/pay/config/AliConfig.java b/mcwl-pay/src/main/java/com/mcwl/pay/config/AliConfig.java index 95ebbf6..62d55c8 100644 --- a/mcwl-pay/src/main/java/com/mcwl/pay/config/AliConfig.java +++ b/mcwl-pay/src/main/java/com/mcwl/pay/config/AliConfig.java @@ -15,8 +15,10 @@ public class AliConfig { private String appId; @Value("${mall.mgt.aliPayConfig.privateKey}") private String privateKey; - @Value("${mall.mgt.aliPayConfig.publicKey}") - private String publicKey; + @Value("${mall.mgt.aliPayConfig.alipayCertPath}") + private String alipayCertPath; + @Value("${mall.mgt.aliPayConfig.alipayRootCertPath}") + private String alipayRootCertPath; @Value("${mall.mgt.aliPayConfig.gatewayUrl}") private String gatewayUrl; } diff --git a/mcwl-pay/src/main/java/com/mcwl/pay/domain/enums/CommissionRationEnum.java b/mcwl-pay/src/main/java/com/mcwl/pay/domain/enums/CommissionRationEnum.java new file mode 100644 index 0000000..40b3c99 --- /dev/null +++ b/mcwl-pay/src/main/java/com/mcwl/pay/domain/enums/CommissionRationEnum.java @@ -0,0 +1,32 @@ +package com.mcwl.pay.domain.enums; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.Getter; +import lombok.NoArgsConstructor; + +/** + * @Author:ChenYan + * @Project:McWl + * @Package:com.mcwl.pay.domain + * @Filename:PaymentStatus + * @Description TODO + * @Date:2025/1/3 17:24 + */ + +@Getter +@AllArgsConstructor +@NoArgsConstructor +public enum CommissionRationEnum { + + /** + * 佣金配给邀请者用户 + */ + COMMISSION_RATION_INVITER_USER("CommissionRationInviterUser"), + /** + * 佣金配给商家用户 + */ + COMMISSION_RATION_MERCHANT("CommissionRationMerchant"); + + private String name; +} diff --git a/mcwl-pay/src/main/java/com/mcwl/pay/service/AliPayService.java b/mcwl-pay/src/main/java/com/mcwl/pay/service/AliPayService.java index 21bb746..52437b0 100644 --- a/mcwl-pay/src/main/java/com/mcwl/pay/service/AliPayService.java +++ b/mcwl-pay/src/main/java/com/mcwl/pay/service/AliPayService.java @@ -15,7 +15,7 @@ public interface AliPayService { PayVo pointsPay(Double paymentAmount) throws Exception; - R fetch(String outBizNo, String amount) throws AlipayApiException; + R fetch(String amount) throws AlipayApiException; // 查询订单状态 R queryTradeStatus(String outTradeNo) throws Exception; diff --git a/mcwl-pay/src/main/java/com/mcwl/pay/service/OrderTradeService.java b/mcwl-pay/src/main/java/com/mcwl/pay/service/OrderTradeService.java index 16f33d3..5f0f02f 100644 --- a/mcwl-pay/src/main/java/com/mcwl/pay/service/OrderTradeService.java +++ b/mcwl-pay/src/main/java/com/mcwl/pay/service/OrderTradeService.java @@ -3,6 +3,7 @@ package com.mcwl.pay.service; import com.baomidou.mybatisplus.extension.service.IService; import com.mcwl.common.domain.IdsParam; import com.mcwl.pay.domain.OrderTrade; +import com.mcwl.resource.domain.dto.ProductRes; import java.util.List; import java.util.Map; @@ -27,4 +28,5 @@ public interface OrderTradeService extends IService { void orderHandler(OrderTrade orderTrade, String suffix, Map params); + void productHandler(ProductRes productRes); } diff --git a/mcwl-pay/src/main/java/com/mcwl/pay/service/impl/AliPayServiceImpl.java b/mcwl-pay/src/main/java/com/mcwl/pay/service/impl/AliPayServiceImpl.java index 720784e..536b3b4 100644 --- a/mcwl-pay/src/main/java/com/mcwl/pay/service/impl/AliPayServiceImpl.java +++ b/mcwl-pay/src/main/java/com/mcwl/pay/service/impl/AliPayServiceImpl.java @@ -2,6 +2,7 @@ package com.mcwl.pay.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.io.resource.ClassPathResource; import cn.hutool.core.lang.UUID; import cn.hutool.extra.mail.MailUtil; import cn.hutool.json.JSONUtil; @@ -13,6 +14,7 @@ import com.alipay.api.DefaultAlipayClient; import com.alipay.api.domain.AlipayFundAccountQueryModel; import com.alipay.api.domain.AlipayFundTransUniTransferModel; import com.alipay.api.domain.Participant; +import com.alipay.api.internal.util.file.IOUtils; import com.alipay.api.request.AlipayFundAccountQueryRequest; import com.alipay.api.request.AlipayFundTransUniTransferRequest; import com.alipay.api.request.AlipaySystemOauthTokenRequest; @@ -52,6 +54,8 @@ import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.math.RoundingMode; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.concurrent.TimeUnit; @@ -273,14 +277,12 @@ public class AliPayServiceImpl implements AliPayService { /** * 支付宝转账方法 - * - * @param outBizNo 外部业务单号 * @param amount 转账金额 * @return 返回支付宝转账响应的内容 */ @Override @Transactional(rollbackFor = Exception.class) - public R fetch(String outBizNo, String amount) throws AlipayApiException { + public R fetch(String amount) throws AlipayApiException { Long userId = SecurityUtils.getUserId(); SysUser sysUser = sysUserService.selectUserById(userId); if (sysUser.getWallet() < Double.parseDouble(amount)) { @@ -293,9 +295,8 @@ public class AliPayServiceImpl implements AliPayService { // 构造请求参数以调用接口 AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest(); AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel(); - // 设置商家侧唯一订单号 - model.setOutBizNo(outBizNo); + model.setOutBizNo(UUID.fastUUID().toString(true)); // 设置订单总金额 model.setTransAmount(amount); @@ -319,25 +320,25 @@ public class AliPayServiceImpl implements AliPayService { return R.fail("请先绑定支付宝账号"); } - // 添加提现记录和修改用户钱包 - this.addLogAndUpdateUserWallet(sysUser, amount); - // 收款方信息 Participant payeeInfo = new Participant(); // 沙箱环境 - payeeInfo.setIdentity("2088722057445020"); - payeeInfo.setIdentityType("ALIPAY_USER_ID"); +// payeeInfo.setIdentity("2088722057445020"); +// payeeInfo.setIdentityType("ALIPAY_USER_ID"); // 线上环境 -// payeeInfo.setIdentity(sysUserPayAccount.getOpenId()); -// payeeInfo.setIdentityType("ALIPAY_OPEN_ID"); + payeeInfo.setIdentity(sysUserPayAccount.getOpenId()); + payeeInfo.setIdentityType("ALIPAY_OPEN_ID"); model.setPayeeInfo(payeeInfo); request.setBizModel(model); + // 添加提现记录和修改用户钱包 + this.addLogAndUpdateUserWallet(sysUser, amount); + // 证书用:certificateExecute(request),密钥用:execute(request) - AlipayFundTransUniTransferResponse response = alipayClient.execute(request); + AlipayFundTransUniTransferResponse response = alipayClient.certificateExecute(request); System.out.println(response.getBody()); if (response.isSuccess()) { @@ -530,7 +531,7 @@ public class AliPayServiceImpl implements AliPayService { private void addLogAndUpdateUserWallet(SysUser sysUser, String amount) { BigDecimal wallet = new BigDecimal(sysUser.getWallet().toString()); BigDecimal amountBigDecimal = new BigDecimal(amount); - sysUser.setWallet(wallet.subtract(amountBigDecimal).doubleValue()); + sysUser.setWallet(wallet.subtract(amountBigDecimal).setScale(2, RoundingMode.HALF_UP).doubleValue()); sysUserService.updateUser(sysUser); // 添加记录 @@ -540,19 +541,37 @@ public class AliPayServiceImpl implements AliPayService { sysUserPayAccountLog.setAccount("支付宝"); sysUserPayAccountLogService.save(sysUserPayAccountLog); } + public AlipayConfig getAlipayConfig() { + AlipayConfig config = new AlipayConfig(); - private AlipayConfig getAlipayConfig() { - String privateKey = aliConfig.getPrivateKey(); - String alipayPublicKey = aliConfig.getPublicKey(); - AlipayConfig alipayConfig = new AlipayConfig(); - alipayConfig.setServerUrl(aliConfig.getGatewayUrl()); - alipayConfig.setAppId(aliConfig.getAppId()); - alipayConfig.setPrivateKey(privateKey); - alipayConfig.setFormat("json"); - alipayConfig.setAlipayPublicKey(alipayPublicKey); - alipayConfig.setCharset("UTF-8"); - alipayConfig.setSignType("RSA2"); - return alipayConfig; + // 设置网关地址 + config.setServerUrl(aliConfig.getGatewayUrl()); + + // 设置应用ID + config.setAppId(aliConfig.getAppId()); + + // 设置应用私钥 + config.setPrivateKey(aliConfig.getPrivateKey()); + + // 设置支付宝公钥,因为配置了证书,所以不需要设置支付宝公钥 +// config.setAlipayPublicKey(aliConfig.getPublicKey()); + + // 设置应用公钥证书路径 + config.setAppCertPath(getClass().getResource("/certs/appCertPublicKey.crt").getPath()); + + // 设置支付宝公钥证书路径 + config.setAlipayPublicCertPath(getClass().getResource(aliConfig.getAlipayCertPath()).getPath()); + + // 设置支付宝根证书路径 + config.setRootCertPath(getClass().getResource(aliConfig.getAlipayRootCertPath()).getPath()); + + // 设置字符编码格式 + config.setCharset("UTF-8"); + + // 设置签名类型 + config.setSignType("RSA2"); + + return config; } } diff --git a/mcwl-pay/src/main/java/com/mcwl/pay/service/impl/OrderTradeServiceImpl.java b/mcwl-pay/src/main/java/com/mcwl/pay/service/impl/OrderTradeServiceImpl.java index b77640e..f26bdc9 100644 --- a/mcwl-pay/src/main/java/com/mcwl/pay/service/impl/OrderTradeServiceImpl.java +++ b/mcwl-pay/src/main/java/com/mcwl/pay/service/impl/OrderTradeServiceImpl.java @@ -6,18 +6,29 @@ import com.mcwl.common.core.domain.entity.SysUser; import com.mcwl.common.core.redis.RedisCache; import com.mcwl.common.domain.IdsParam; import com.mcwl.common.utils.DateUtils; +import com.mcwl.common.utils.SecurityUtils; import com.mcwl.common.utils.StringUtils; import com.mcwl.memberCenter.domain.RechargeRecord; import com.mcwl.memberCenter.service.MemberService; import com.mcwl.memberCenter.service.RechargeRecordService; import com.mcwl.myInvitation.domain.Commission; +import com.mcwl.myInvitation.domain.CommissionRatio; import com.mcwl.myInvitation.domain.Consume; +import com.mcwl.myInvitation.service.CommissionRatioService; import com.mcwl.myInvitation.service.CommissionService; import com.mcwl.myInvitation.service.ConsumeService; import com.mcwl.pay.domain.OrderTrade; +import com.mcwl.pay.domain.enums.CommissionRationEnum; import com.mcwl.pay.mapper.OrderTradeMapper; import com.mcwl.pay.service.OrderTradeService; +import com.mcwl.resource.domain.ModelImage; +import com.mcwl.resource.domain.ModelProduct; +import com.mcwl.resource.domain.WorkFlow; +import com.mcwl.resource.domain.dto.ProductRes; import com.mcwl.resource.domain.enums.OrderTypeEnum; +import com.mcwl.resource.service.ModelImageService; +import com.mcwl.resource.service.ModelService; +import com.mcwl.resource.service.WorkFlowService; import com.mcwl.system.service.ISysUserService; import com.mcwl.system.service.impl.SysUserServiceImpl; import org.springframework.beans.factory.annotation.Autowired; @@ -25,6 +36,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.*; /** @@ -40,11 +52,11 @@ public class OrderTradeServiceImpl extends ServiceImpl map = new HashMap<>(); + if (productType == 0) { + map = this.modelOrderHandler(productUserId, productId, sysUser); + } else if (productType == 1) { + map = this.workFlowOrderHandler(productUserId, productId, sysUser); + } else if (productType == 2) { + map = this.imageOrderHandler(productUserId, productId, sysUser); + } + + if (map.isEmpty()) { + throw new RuntimeException("商品不存在"); + } + + // 邀请人提成 + Double amount = map.get("amount"); + // 商品价格 + Double price = map.get("price"); + + // 保存消费表 + Consume consume = new Consume(); + consume.setUserId(SecurityUtils.getUserId()); + consume.setAmount(price); + consume.setProductId(productId); + consume.setType(productType); + consume.setConsumeDate(new Date()); + consumeService.save(consume); + + + // 通过sysUser获取邀请人id + if (Objects.isNull(inviterUserId)) { + return; + } + + // 保存提成表 + Commission commission = new Commission(); + commission.setConsumeId(inviterUserId); + commission.setAmount(amount); + commissionService.save(commission); + + } + @Override public List selectMallProductList(OrderTrade orderTrade) { @@ -108,8 +185,8 @@ public class OrderTradeServiceImpl extends ServiceImpl params) { // 更新订单状态 // 支付宝交易凭证号 @@ -269,4 +308,153 @@ public class OrderTradeServiceImpl extends ServiceImpl 模型金额(price) 邀请人提成(amount) + */ + private Map modelOrderHandler(Long productUserId, Long modelId, SysUser sysUser) { + + ModelProduct modelProduct = modelService.lambdaQuery() + .eq(ModelProduct::getId, modelId) + .eq(ModelProduct::getUserId, productUserId) + .one(); + if (Objects.isNull(modelProduct)) { + return new HashMap<>(); + } + // 获取模型价格 + Double price = modelProduct.getProductPrice(); + + return getStringDoubleMap(productUserId, sysUser, price); + } + + /** + * 工作流订单处理,返回工作流金额和邀请人提成 + * + * @param productUserId 产品用户id + * @param workFlowId 工作流id + * @param sysUser 当前用户 + * @return Map 工作流金额(price) 邀请人提成(amount) + */ + private Map workFlowOrderHandler(Long productUserId, Long workFlowId, SysUser sysUser) { + WorkFlow workFlow = workFlowService.lambdaQuery() + .eq(WorkFlow::getId, workFlowId) + .eq(WorkFlow::getUserId, productUserId) + .one(); + if (Objects.isNull(workFlow)) { + return new HashMap<>(); + } + // 获取模型价格 + Double price = workFlow.getProductPrice(); + + return getStringDoubleMap(productUserId, sysUser, price); + } + + /** + * 图片订单处理,返回图片金额和邀请人提成 + * + * @param productUserId 产品用户id + * @param imageId 图片id + * @param sysUser 当前用户 + * @return Map 图片金额(price) 邀请人提成(amount) + */ + private Map imageOrderHandler(Long productUserId, Long imageId, SysUser sysUser) { + ModelImage modelImage = modelImageService.lambdaQuery() + .eq(ModelImage::getId, imageId) + .eq(ModelImage::getUserId, productUserId) + .one(); + if (Objects.isNull(modelImage)) { + return new HashMap<>(); + } + // 获取模型价格 + Double price = modelImage.getProductPrice(); + + return getStringDoubleMap(productUserId, sysUser, price); + } + + + /** + * 处理商品、邀请人提成 + * @param productUserId 产品用户id + * @param sysUser 当前用户 + * @param price 商品价格 + * @return Map 商品价格(price) 邀请人提成(amount) + */ + private Map getStringDoubleMap(Long productUserId, SysUser sysUser, Double price) { + // 从redis获取提成比例 + // 抽取商家金额比例 + String CommissionRationMerchant = redisCache.getCacheObject(CommissionRationEnum.COMMISSION_RATION_MERCHANT.getName()); + if (Objects.isNull(CommissionRationMerchant)) { + CommissionRatio commissionRatio = commissionRatioService.lambdaQuery() + .eq(CommissionRatio::getType, 1) + .one(); + CommissionRationMerchant = commissionRatio.getRatio().toString(); + } + + // 佣金配给邀请者用户比例 + String commissionRationInviterUser = redisCache.getCacheObject(CommissionRationEnum.COMMISSION_RATION_INVITER_USER.getName()); + if (Objects.isNull(CommissionRationMerchant)) { + CommissionRatio commissionRatio = commissionRatioService.lambdaQuery() + .eq(CommissionRatio::getType, 0) + .one(); + commissionRationInviterUser = commissionRatio.getRatio().toString(); + } + + Double rationMerchant = redisCache.getCacheObject(CommissionRationMerchant); + Double rationInviterUser = redisCache.getCacheObject(commissionRationInviterUser); + + // 将模型价格、抽取商家金额比例、佣金配给邀请者用户比例转换为BigDecimal类型 + BigDecimal priceBigDecimal = new BigDecimal(price.toString()); + BigDecimal rationMerchantBigDecimal = new BigDecimal(rationMerchant.toString()); + BigDecimal rationInviterUserBigDecimal = new BigDecimal(rationInviterUser.toString()); + + // 邀请人获取的金额 = 模型价格 * 抽取商家金额比例 * 邀请人提成比例 + BigDecimal inviterUserAmount = priceBigDecimal + .multiply(rationMerchantBigDecimal) + .multiply(rationInviterUserBigDecimal) + .setScale(2, RoundingMode.HALF_UP); + + // 商家获取的金额 = 模型价格 * (1 - 抽取商家金额比例) + BigDecimal merchantAmount = priceBigDecimal + .multiply(new BigDecimal("1.00").subtract(rationMerchantBigDecimal)); + + // 通过sysUser获取邀请人id + if (Objects.nonNull(sysUser.getInviterUserId())) { + // 更新邀请人钱包金额 + SysUser inviterUser = sysUserService.selectUserById(sysUser.getInviterUserId()); + if (Objects.nonNull(inviterUser)) { + inviterUser.setWallet(new BigDecimal(inviterUser.getWallet().toString()) + .add(inviterUserAmount) + .setScale(2, RoundingMode.HALF_UP) + .doubleValue()); + sysUserService.updateUser(inviterUser); + } + } + // 更新当前用户钱包金额 + sysUser.setWallet(new BigDecimal(sysUser.getWallet().toString()) + .subtract(priceBigDecimal) + .setScale(2, RoundingMode.HALF_UP) + .doubleValue()); + // 更新商家钱包金额 + SysUser merchants = sysUserService.selectUserById(productUserId); + merchants.setWallet(new BigDecimal(merchants.getWallet().toString()) + .add(merchantAmount) + .setScale(2, RoundingMode.HALF_UP) + .doubleValue()); + sysUserService.updateUser(merchants); + + + Map map = new HashMap<>(); + map.put("price", price); + map.put("amount", inviterUserAmount.doubleValue()); + + return map; + } + + } diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/domain/ModelImage.java b/mcwl-resource/src/main/java/com/mcwl/resource/domain/ModelImage.java index 570d3c2..6f6ad9f 100644 --- a/mcwl-resource/src/main/java/com/mcwl/resource/domain/ModelImage.java +++ b/mcwl-resource/src/main/java/com/mcwl/resource/domain/ModelImage.java @@ -115,4 +115,10 @@ public class ModelImage extends BaseEntity { */ @ApiModelProperty(value = "审核失败原因") private String auditText; + + /** + * 商品价格 + */ + @ApiModelProperty(value = "商品价格") + private Double productPrice; } diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/domain/ModelProduct.java b/mcwl-resource/src/main/java/com/mcwl/resource/domain/ModelProduct.java index a11d6f4..2e1a295 100644 --- a/mcwl-resource/src/main/java/com/mcwl/resource/domain/ModelProduct.java +++ b/mcwl-resource/src/main/java/com/mcwl/resource/domain/ModelProduct.java @@ -137,6 +137,12 @@ public class ModelProduct extends BaseEntity { @ApiModelProperty(value = "删除标志(0代表存在 2代表删除)") private String delFlag; + /** + * 商品价格 + */ + @ApiModelProperty(value = "商品价格") + private Double productPrice; + /** diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/domain/WorkFlow.java b/mcwl-resource/src/main/java/com/mcwl/resource/domain/WorkFlow.java index 58379e0..807d785 100644 --- a/mcwl-resource/src/main/java/com/mcwl/resource/domain/WorkFlow.java +++ b/mcwl-resource/src/main/java/com/mcwl/resource/domain/WorkFlow.java @@ -184,4 +184,10 @@ public class WorkFlow { @TableField(exist = false) private Integer isLike; + /** + * 商品价格 + */ + @ApiModelProperty(value = "商品价格") + private Double productPrice; + } diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/domain/dto/ModelCommentRes.java b/mcwl-resource/src/main/java/com/mcwl/resource/domain/dto/ModelCommentRes.java index d7d26c6..b3c1dac 100644 --- a/mcwl-resource/src/main/java/com/mcwl/resource/domain/dto/ModelCommentRes.java +++ b/mcwl-resource/src/main/java/com/mcwl/resource/domain/dto/ModelCommentRes.java @@ -15,7 +15,7 @@ public class ModelCommentRes { */ @ApiModelProperty(value = "模型id", required = true) @NotNull(message = "模型id不能为空") - private Long workFlowId; + private Long modelId; /** * 评论内容 diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/domain/dto/ProductRes.java b/mcwl-resource/src/main/java/com/mcwl/resource/domain/dto/ProductRes.java new file mode 100644 index 0000000..083600f --- /dev/null +++ b/mcwl-resource/src/main/java/com/mcwl/resource/domain/dto/ProductRes.java @@ -0,0 +1,35 @@ +package com.mcwl.resource.domain.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +@Data +@ApiModel(description = "产品信息") +public class ProductRes { + + /** + * 产品用户id + */ + @NotNull(message = "产品用户id不能为空") + @ApiModelProperty(value = "产品用户id", required = true) + private Long productUserId; + + /** + * 产品id + */ + @NotNull(message = "产品id不能为空") + @ApiModelProperty(value = "产品id", required = true) + private Long productId; + + /** + * 商品类型 + */ + @NotNull(message = "产品类型不能为空") + @ApiModelProperty(value = "产品类型 0模型 1工作流 2图片", required = true) + private Integer productType; + + +} diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/domain/vo/ModelImageVo.java b/mcwl-resource/src/main/java/com/mcwl/resource/domain/vo/ModelImageVo.java index e38c465..9e17c3a 100644 --- a/mcwl-resource/src/main/java/com/mcwl/resource/domain/vo/ModelImageVo.java +++ b/mcwl-resource/src/main/java/com/mcwl/resource/domain/vo/ModelImageVo.java @@ -1,10 +1,12 @@ package com.mcwl.resource.domain.vo; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.ArrayList; +import java.util.Date; import java.util.List; @Data @@ -98,9 +100,22 @@ public class ModelImageVo { @ApiModelProperty(value = "是否置顶") private Integer isTop; + /** + * 是否点赞 + */ + @ApiModelProperty(value = "是否点赞") + private Integer isLike; + /** * 审核状态 */ @ApiModelProperty(value = "审核状态") private Integer auditStatus; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @ApiModelProperty(value = "创建时间") + private Date createTime; } diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/domain/vo/ModelVo.java b/mcwl-resource/src/main/java/com/mcwl/resource/domain/vo/ModelVo.java index 36c9031..953e8e0 100644 --- a/mcwl-resource/src/main/java/com/mcwl/resource/domain/vo/ModelVo.java +++ b/mcwl-resource/src/main/java/com/mcwl/resource/domain/vo/ModelVo.java @@ -1,8 +1,12 @@ package com.mcwl.resource.domain.vo; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; @Data @ApiModel(description = "模型请求对象") @@ -59,9 +63,21 @@ public class ModelVo { @ApiModelProperty(value = "是否置顶") private Integer isTop; + /** + * 是否点赞 + */ + @ApiModelProperty(value = "是否点赞") + private Integer isLike; + /** * 审核状态 */ @ApiModelProperty(value = "审核状态") private Integer auditStatus; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间") + private Date createTime; } diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/domain/vo/WorkFlowVo.java b/mcwl-resource/src/main/java/com/mcwl/resource/domain/vo/WorkFlowVo.java index aebfc87..abf6d68 100644 --- a/mcwl-resource/src/main/java/com/mcwl/resource/domain/vo/WorkFlowVo.java +++ b/mcwl-resource/src/main/java/com/mcwl/resource/domain/vo/WorkFlowVo.java @@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.Date; + @Data @ApiModel(description = "工作流请求对象") public class WorkFlowVo { @@ -54,10 +56,22 @@ public class WorkFlowVo { @ApiModelProperty(value = "是否置顶") private Integer isTop; + /** + * 是否点赞 + */ + @ApiModelProperty(value = "是否点赞") + private Integer isLike; + /** * 审核状态 */ @ApiModelProperty(value = "审核状态") private Integer auditStatus; + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间") + private Date createTime; + } diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/ModelImageServiceImpl.java b/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/ModelImageServiceImpl.java index 5a330a3..08a6c9d 100644 --- a/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/ModelImageServiceImpl.java +++ b/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/ModelImageServiceImpl.java @@ -14,11 +14,13 @@ import com.mcwl.common.utils.SecurityUtils; import com.mcwl.common.utils.StringUtils; import com.mcwl.common.utils.baidu.BaiduCensor; import com.mcwl.resource.domain.ModelImage; +import com.mcwl.resource.domain.ModelImageLike; import com.mcwl.resource.domain.dto.ModelImagePageRes; import com.mcwl.resource.domain.dto.ModelImageRes; import com.mcwl.resource.domain.vo.ModelImageVo; import com.mcwl.resource.mapper.ModelImageCommentMapper; import com.mcwl.resource.mapper.ModelImageMapper; +import com.mcwl.resource.service.ModelImageLikeService; import com.mcwl.resource.service.ModelImageService; import com.mcwl.system.service.ISysDictDataService; import com.mcwl.system.service.ISysUserService; @@ -42,12 +44,13 @@ public class ModelImageServiceImpl extends ServiceImpl tagList = new ArrayList<>(); if (StringUtils.isNotEmpty(modelImage.getTags())) {