feat(payment): 更新支付宝支付功能并添加证书

master
yang 2025-02-15 14:36:29 +08:00
parent 57bdbdca3b
commit c363c0c6d9
32 changed files with 902 additions and 98 deletions

View File

@ -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<CommissionRatioVo>> list() {
List<CommissionRatioVo> list = commissionRatioService.ratioList();
return R.ok(list);
}
/**
*
*/
@GetMapping("/detail")
@ApiOperation(value = "提成详情")
public R<CommissionRatioVo> 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<CommissionRatioVo> 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);
}
}

View File

@ -24,12 +24,12 @@ import static com.mcwl.common.core.domain.AjaxResult.success;
/** /**
* *
*/ */
@RestController() @RestController()
@RequiredArgsConstructor @RequiredArgsConstructor
@RequestMapping("/invitation") @RequestMapping("/invitation")
@Api(tags = "邀请管理") @Api(tags = "我的邀请")
public class InvitationController { public class InvitationController {
private final InvitationService invitationService; private final InvitationService invitationService;

View File

@ -165,9 +165,8 @@ public class AliPayController extends BaseController {
if (amount < 0.1) { if (amount < 0.1) {
return R.fail("提现金额最小为0.1"); return R.fail("提现金额最小为0.1");
} }
String outBizNo = UUID.fastUUID().toString(true);
return aliPayService.fetch(outBizNo, amount.toString()); return aliPayService.fetch(amount.toString());
} }

View File

@ -16,6 +16,7 @@ import com.mcwl.common.utils.SecurityUtils;
import com.mcwl.pay.domain.OrderTrade; import com.mcwl.pay.domain.OrderTrade;
import com.mcwl.pay.service.AliPayService; import com.mcwl.pay.service.AliPayService;
import com.mcwl.pay.service.OrderTradeService; import com.mcwl.pay.service.OrderTradeService;
import com.mcwl.resource.domain.dto.ProductRes;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -37,7 +38,7 @@ import java.util.Map;
*/ */
@RestController @RestController
@RequestMapping("/web/pay") @RequestMapping("/order")
@Validated @Validated
@Api(tags = "订单模块") @Api(tags = "订单模块")
public class OrderTradeController extends BaseController { public class OrderTradeController extends BaseController {
@ -54,6 +55,18 @@ public class OrderTradeController extends BaseController {
@Autowired @Autowired
private RedisCache redisCache; private RedisCache redisCache;
/**
*
*/
@PostMapping("/buy")
@ApiOperation(value = "购买产品")
public R<Object> 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 = "修改订单") @ApiOperation(value = "修改订单")
public R<Object> upda(@RequestBody OrderTrade orderTrade) { public R<Object> update(@RequestBody OrderTrade orderTrade) {
// 获取当前用户 // 获取当前用户
Long userId = SecurityUtils.getUserId(); Long userId = SecurityUtils.getUserId();
if (userId == null) { if (userId == null) {

View File

@ -93,7 +93,7 @@ public class MallProductController extends BaseController {
@ApiOperation(value = "添加模型") @ApiOperation(value = "添加模型")
@PostMapping("/insert") @PostMapping("/insert")
public AjaxResult addupdateModel(@RequestBody RequestModel requestModel) { public R<String> addupdateModel(@RequestBody RequestModel requestModel) {
ModelProduct modelProduct = requestModel.getModelProduct(); ModelProduct modelProduct = requestModel.getModelProduct();
Long userId = SecurityUtils.getUserId(); Long userId = SecurityUtils.getUserId();
modelProduct.setUserId(userId); modelProduct.setUserId(userId);
@ -130,7 +130,7 @@ public class MallProductController extends BaseController {
*/ */
@ApiOperation(value = "查询模型详情") @ApiOperation(value = "查询模型详情")
@GetMapping("/selectModelById") @GetMapping("/selectModelById")
public AjaxResult selectModelById(@Valid @NotNull(message = "模型id不能为空") @RequestParam Long id) { public R<ModelProduct> selectModelById(@Valid @NotNull(message = "模型id不能为空") @RequestParam Long id) {
return modelService.selectModelById(id); return modelService.selectModelById(id);
} }

View File

@ -48,7 +48,7 @@ public class ModelImageCommentController {
* / * /
*/ */
@ApiOperation(value = "图片评论点赞/取消") @ApiOperation(value = "图片评论点赞/取消")
@RepeatSubmit @RepeatSubmit(interval = 1000)
@GetMapping("/commentLike") @GetMapping("/commentLike")
public R<Object> commentLike(@Valid public R<Object> commentLike(@Valid
@NotNull(message = "评论id不能为空") @NotNull(message = "评论id不能为空")

View File

@ -126,8 +126,10 @@ mall:
appId: 9021000143684202 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 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 notifyUrl: https://7d014da8.r27.cpolar.top/ali/pay/notify
# 沙箱支付宝网关 # 沙箱支付宝网关
gatewayUrl: https://openapi-sandbox.dl.alipaydev.com/gateway.do gatewayUrl: https://openapi-sandbox.dl.alipaydev.com/gateway.do
@ -140,11 +142,14 @@ mall:
# gatewayHost: openapi-sandbox.dl.alipaydev.com # gatewayHost: openapi-sandbox.dl.alipaydev.com
# signType: RSA2 # signType: RSA2
# # 线上应用id # # 线上应用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 # notifyUrl: https://253d7236.r27.cpolar.top/ali/pay/notify
# # 线上支付宝网关 # # 线上支付宝网关
# gatewayUrl: https://openapi.alipay.com/gateway.do # gatewayUrl: https://openapi.alipay.com/gateway.do

View File

@ -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-----

View File

@ -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-----

View File

@ -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-----

View File

@ -33,7 +33,7 @@ public class BaseEntity implements Serializable
private String createBy; 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) @TableField(fill = FieldFill.INSERT)
private Date createTime; private Date createTime;

View File

@ -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;
}

View File

@ -26,6 +26,12 @@ public class Consume extends BaseEntity {
// 消费金额 // 消费金额
private Double amount; private Double amount;
// 商品id
private Long productId;
// 商品类型
private Integer type;
// 消费时间 // 消费时间
private Date consumeDate; private Date consumeDate;
} }

View File

@ -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;
}

View File

@ -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<CommissionRatio> {
}

View File

@ -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<CommissionRatio> {
/**
*
*
* @return List<CommissionRatioVo>
*/
List<CommissionRatioVo> ratioList();
CommissionRatioVo updateRatio(Long id, Double ratio);
CommissionRatioVo detail(Long id);
}

View File

@ -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<CommissionRatioMapper, CommissionRatio> implements CommissionRatioService {
@Override
public List<CommissionRatioVo> ratioList() {
List<CommissionRatio> list = baseMapper.selectList(null);
if (list == null || list.isEmpty()) {
return Collections.emptyList();
}
List<CommissionRatioVo> 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;
}
}

View File

@ -15,8 +15,10 @@ public class AliConfig {
private String appId; private String appId;
@Value("${mall.mgt.aliPayConfig.privateKey}") @Value("${mall.mgt.aliPayConfig.privateKey}")
private String privateKey; private String privateKey;
@Value("${mall.mgt.aliPayConfig.publicKey}") @Value("${mall.mgt.aliPayConfig.alipayCertPath}")
private String publicKey; private String alipayCertPath;
@Value("${mall.mgt.aliPayConfig.alipayRootCertPath}")
private String alipayRootCertPath;
@Value("${mall.mgt.aliPayConfig.gatewayUrl}") @Value("${mall.mgt.aliPayConfig.gatewayUrl}")
private String gatewayUrl; private String gatewayUrl;
} }

View File

@ -0,0 +1,32 @@
package com.mcwl.pay.domain.enums;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
/**
* @AuthorChenYan
* @ProjectMcWl
* @Packagecom.mcwl.pay.domain
* @FilenamePaymentStatus
* @Description TODO
* @Date2025/1/3 17:24
*/
@Getter
@AllArgsConstructor
@NoArgsConstructor
public enum CommissionRationEnum {
/**
*
*/
COMMISSION_RATION_INVITER_USER("CommissionRationInviterUser"),
/**
*
*/
COMMISSION_RATION_MERCHANT("CommissionRationMerchant");
private String name;
}

View File

@ -15,7 +15,7 @@ public interface AliPayService {
PayVo pointsPay(Double paymentAmount) throws Exception; PayVo pointsPay(Double paymentAmount) throws Exception;
R<String> fetch(String outBizNo, String amount) throws AlipayApiException; R<String> fetch(String amount) throws AlipayApiException;
// 查询订单状态 // 查询订单状态
R<Object> queryTradeStatus(String outTradeNo) throws Exception; R<Object> queryTradeStatus(String outTradeNo) throws Exception;

View File

@ -3,6 +3,7 @@ package com.mcwl.pay.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.mcwl.common.domain.IdsParam; import com.mcwl.common.domain.IdsParam;
import com.mcwl.pay.domain.OrderTrade; import com.mcwl.pay.domain.OrderTrade;
import com.mcwl.resource.domain.dto.ProductRes;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -27,4 +28,5 @@ public interface OrderTradeService extends IService<OrderTrade> {
void orderHandler(OrderTrade orderTrade, String suffix, Map<String, String> params); void orderHandler(OrderTrade orderTrade, String suffix, Map<String, String> params);
void productHandler(ProductRes productRes);
} }

View File

@ -2,6 +2,7 @@ package com.mcwl.pay.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.resource.ClassPathResource;
import cn.hutool.core.lang.UUID; import cn.hutool.core.lang.UUID;
import cn.hutool.extra.mail.MailUtil; import cn.hutool.extra.mail.MailUtil;
import cn.hutool.json.JSONUtil; 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.AlipayFundAccountQueryModel;
import com.alipay.api.domain.AlipayFundTransUniTransferModel; import com.alipay.api.domain.AlipayFundTransUniTransferModel;
import com.alipay.api.domain.Participant; 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.AlipayFundAccountQueryRequest;
import com.alipay.api.request.AlipayFundTransUniTransferRequest; import com.alipay.api.request.AlipayFundTransUniTransferRequest;
import com.alipay.api.request.AlipaySystemOauthTokenRequest; import com.alipay.api.request.AlipaySystemOauthTokenRequest;
@ -52,6 +54,8 @@ import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode;
import java.nio.charset.StandardCharsets;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -273,14 +277,12 @@ public class AliPayServiceImpl implements AliPayService {
/** /**
* *
*
* @param outBizNo
* @param amount * @param amount
* @return * @return
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public R<String> fetch(String outBizNo, String amount) throws AlipayApiException { public R<String> fetch(String amount) throws AlipayApiException {
Long userId = SecurityUtils.getUserId(); Long userId = SecurityUtils.getUserId();
SysUser sysUser = sysUserService.selectUserById(userId); SysUser sysUser = sysUserService.selectUserById(userId);
if (sysUser.getWallet() < Double.parseDouble(amount)) { if (sysUser.getWallet() < Double.parseDouble(amount)) {
@ -293,9 +295,8 @@ public class AliPayServiceImpl implements AliPayService {
// 构造请求参数以调用接口 // 构造请求参数以调用接口
AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest(); AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();
AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel(); AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel();
// 设置商家侧唯一订单号 // 设置商家侧唯一订单号
model.setOutBizNo(outBizNo); model.setOutBizNo(UUID.fastUUID().toString(true));
// 设置订单总金额 // 设置订单总金额
model.setTransAmount(amount); model.setTransAmount(amount);
@ -319,25 +320,25 @@ public class AliPayServiceImpl implements AliPayService {
return R.fail("请先绑定支付宝账号"); return R.fail("请先绑定支付宝账号");
} }
// 添加提现记录和修改用户钱包
this.addLogAndUpdateUserWallet(sysUser, amount);
// 收款方信息 // 收款方信息
Participant payeeInfo = new Participant(); Participant payeeInfo = new Participant();
// 沙箱环境 // 沙箱环境
payeeInfo.setIdentity("2088722057445020"); // payeeInfo.setIdentity("2088722057445020");
payeeInfo.setIdentityType("ALIPAY_USER_ID"); // payeeInfo.setIdentityType("ALIPAY_USER_ID");
// 线上环境 // 线上环境
// payeeInfo.setIdentity(sysUserPayAccount.getOpenId()); payeeInfo.setIdentity(sysUserPayAccount.getOpenId());
// payeeInfo.setIdentityType("ALIPAY_OPEN_ID"); payeeInfo.setIdentityType("ALIPAY_OPEN_ID");
model.setPayeeInfo(payeeInfo); model.setPayeeInfo(payeeInfo);
request.setBizModel(model); request.setBizModel(model);
// 添加提现记录和修改用户钱包
this.addLogAndUpdateUserWallet(sysUser, amount);
// 证书用certificateExecute(request)密钥用execute(request) // 证书用certificateExecute(request)密钥用execute(request)
AlipayFundTransUniTransferResponse response = alipayClient.execute(request); AlipayFundTransUniTransferResponse response = alipayClient.certificateExecute(request);
System.out.println(response.getBody()); System.out.println(response.getBody());
if (response.isSuccess()) { if (response.isSuccess()) {
@ -530,7 +531,7 @@ public class AliPayServiceImpl implements AliPayService {
private void addLogAndUpdateUserWallet(SysUser sysUser, String amount) { private void addLogAndUpdateUserWallet(SysUser sysUser, String amount) {
BigDecimal wallet = new BigDecimal(sysUser.getWallet().toString()); BigDecimal wallet = new BigDecimal(sysUser.getWallet().toString());
BigDecimal amountBigDecimal = new BigDecimal(amount); 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); sysUserService.updateUser(sysUser);
// 添加记录 // 添加记录
@ -540,19 +541,37 @@ public class AliPayServiceImpl implements AliPayService {
sysUserPayAccountLog.setAccount("支付宝"); sysUserPayAccountLog.setAccount("支付宝");
sysUserPayAccountLogService.save(sysUserPayAccountLog); sysUserPayAccountLogService.save(sysUserPayAccountLog);
} }
public AlipayConfig getAlipayConfig() {
AlipayConfig config = new AlipayConfig();
private AlipayConfig getAlipayConfig() { // 设置网关地址
String privateKey = aliConfig.getPrivateKey(); config.setServerUrl(aliConfig.getGatewayUrl());
String alipayPublicKey = aliConfig.getPublicKey();
AlipayConfig alipayConfig = new AlipayConfig(); // 设置应用ID
alipayConfig.setServerUrl(aliConfig.getGatewayUrl()); config.setAppId(aliConfig.getAppId());
alipayConfig.setAppId(aliConfig.getAppId());
alipayConfig.setPrivateKey(privateKey); // 设置应用私钥
alipayConfig.setFormat("json"); config.setPrivateKey(aliConfig.getPrivateKey());
alipayConfig.setAlipayPublicKey(alipayPublicKey);
alipayConfig.setCharset("UTF-8"); // 设置支付宝公钥,因为配置了证书,所以不需要设置支付宝公钥
alipayConfig.setSignType("RSA2"); // config.setAlipayPublicKey(aliConfig.getPublicKey());
return alipayConfig;
// 设置应用公钥证书路径
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;
} }
} }

View File

@ -6,18 +6,29 @@ import com.mcwl.common.core.domain.entity.SysUser;
import com.mcwl.common.core.redis.RedisCache; import com.mcwl.common.core.redis.RedisCache;
import com.mcwl.common.domain.IdsParam; import com.mcwl.common.domain.IdsParam;
import com.mcwl.common.utils.DateUtils; import com.mcwl.common.utils.DateUtils;
import com.mcwl.common.utils.SecurityUtils;
import com.mcwl.common.utils.StringUtils; import com.mcwl.common.utils.StringUtils;
import com.mcwl.memberCenter.domain.RechargeRecord; import com.mcwl.memberCenter.domain.RechargeRecord;
import com.mcwl.memberCenter.service.MemberService; import com.mcwl.memberCenter.service.MemberService;
import com.mcwl.memberCenter.service.RechargeRecordService; import com.mcwl.memberCenter.service.RechargeRecordService;
import com.mcwl.myInvitation.domain.Commission; import com.mcwl.myInvitation.domain.Commission;
import com.mcwl.myInvitation.domain.CommissionRatio;
import com.mcwl.myInvitation.domain.Consume; import com.mcwl.myInvitation.domain.Consume;
import com.mcwl.myInvitation.service.CommissionRatioService;
import com.mcwl.myInvitation.service.CommissionService; import com.mcwl.myInvitation.service.CommissionService;
import com.mcwl.myInvitation.service.ConsumeService; import com.mcwl.myInvitation.service.ConsumeService;
import com.mcwl.pay.domain.OrderTrade; import com.mcwl.pay.domain.OrderTrade;
import com.mcwl.pay.domain.enums.CommissionRationEnum;
import com.mcwl.pay.mapper.OrderTradeMapper; import com.mcwl.pay.mapper.OrderTradeMapper;
import com.mcwl.pay.service.OrderTradeService; 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.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.ISysUserService;
import com.mcwl.system.service.impl.SysUserServiceImpl; import com.mcwl.system.service.impl.SysUserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -25,6 +36,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*; import java.util.*;
/** /**
@ -58,12 +70,77 @@ public class OrderTradeServiceImpl extends ServiceImpl<OrderTradeMapper, OrderTr
@Autowired @Autowired
private MemberService memberService; private MemberService memberService;
@Autowired
private ModelService modelService;
@Autowired
private ModelImageService modelImageService;
@Autowired
private WorkFlowService workFlowService;
@Autowired
private CommissionRatioService commissionRatioService;
@Autowired @Autowired
private RechargeRecordService rechargeRecordService; private RechargeRecordService rechargeRecordService;
@Autowired @Autowired
private RedisCache redisCache; private RedisCache redisCache;
@Override
@Transactional(rollbackFor = Exception.class)
public void productHandler(ProductRes productRes) {
Long productUserId = productRes.getProductUserId();
Long productId = productRes.getProductId();
Integer productType = productRes.getProductType();
SysUser sysUser = sysUserService.selectUserById(SecurityUtils.getUserId());
// 获取邀请人id
Long inviterUserId = sysUser.getInviterUserId();
// 邀请者获取的提成
Map<String, Double> 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 @Override
public List<OrderTrade> selectMallProductList(OrderTrade orderTrade) { public List<OrderTrade> selectMallProductList(OrderTrade orderTrade) {
@ -181,7 +258,7 @@ public class OrderTradeServiceImpl extends ServiceImpl<OrderTradeMapper, OrderTr
BigDecimal wallet = new BigDecimal(user.getWallet().toString()); BigDecimal wallet = new BigDecimal(user.getWallet().toString());
BigDecimal walletDecimal = wallet.add(amountBigDecimal); BigDecimal walletDecimal = wallet.add(amountBigDecimal).setScale(2, RoundingMode.HALF_UP);
user.setWallet(walletDecimal.doubleValue()); user.setWallet(walletDecimal.doubleValue());
sysUserService.updateUser(user); sysUserService.updateUser(user);
@ -210,44 +287,6 @@ public class OrderTradeServiceImpl extends ServiceImpl<OrderTradeMapper, OrderTr
} }
private void productHandler(OrderTrade orderTrade) {
Long userId = orderTrade.getUserId();
SysUser sysUser = sysUserService.selectUserById(userId);
double amount = 0.0;
// 通过sysUser获取邀请人id
Long inviterUserId = sysUser.getInviterUserId();
if (Objects.nonNull(inviterUserId)) {
amount = 0.5; // 固定0.5元提成
}
// 保存消费表
Consume consume = new Consume();
consume.setUserId(userId);
consume.setAmount(Double.valueOf(orderTrade.getPaymentAmount()));
consume.setConsumeDate(orderTrade.getOrderTime());
consume.setCreateBy(orderTrade.getUserName());
consume.setUpdateBy(orderTrade.getUserName());
consume.setCreateTime(new Date());
consume.setUpdateTime(new Date());
consume.setRemark("购买商品");
consumeService.save(consume);
// 保存提成表
Commission commission = new Commission();
commission.setConsumeId(inviterUserId);
commission.setAmount(amount);
commission.setPayStatus(0);
commission.setCreateBy(sysUser.getUserName());
commission.setUpdateBy(sysUser.getUserName());
commission.setCreateTime(new Date());
commission.setUpdateTime(new Date());
commission.setRemark("提成");
commissionService.save(commission);
}
private void orderHandler(OrderTrade orderTrade, Map<String, String> params) { private void orderHandler(OrderTrade orderTrade, Map<String, String> params) {
// 更新订单状态 // 更新订单状态
// 支付宝交易凭证号 // 支付宝交易凭证号
@ -269,4 +308,153 @@ public class OrderTradeServiceImpl extends ServiceImpl<OrderTradeMapper, OrderTr
orderTrade.setUpdateTime(new Date()); orderTrade.setUpdateTime(new Date());
orderTradeService.updateById(orderTrade); orderTradeService.updateById(orderTrade);
} }
/**
*
*
* @param productUserId id
* @param modelId id
* @param sysUser
* @return Map<String, Double> (price) (amount)
*/
private Map<String, Double> 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<String, Double> (price) (amount)
*/
private Map<String, Double> 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<String, Double> (price) (amount)
*/
private Map<String, Double> 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<String, Double> (price) (amount)
*/
private Map<String, Double> 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<String, Double> map = new HashMap<>();
map.put("price", price);
map.put("amount", inviterUserAmount.doubleValue());
return map;
}
} }

View File

@ -115,4 +115,10 @@ public class ModelImage extends BaseEntity {
*/ */
@ApiModelProperty(value = "审核失败原因") @ApiModelProperty(value = "审核失败原因")
private String auditText; private String auditText;
/**
*
*/
@ApiModelProperty(value = "商品价格")
private Double productPrice;
} }

View File

@ -137,6 +137,12 @@ public class ModelProduct extends BaseEntity {
@ApiModelProperty(value = "删除标志0代表存在 2代表删除") @ApiModelProperty(value = "删除标志0代表存在 2代表删除")
private String delFlag; private String delFlag;
/**
*
*/
@ApiModelProperty(value = "商品价格")
private Double productPrice;
/** /**

View File

@ -184,4 +184,10 @@ public class WorkFlow {
@TableField(exist = false) @TableField(exist = false)
private Integer isLike; private Integer isLike;
/**
*
*/
@ApiModelProperty(value = "商品价格")
private Double productPrice;
} }

View File

@ -15,7 +15,7 @@ public class ModelCommentRes {
*/ */
@ApiModelProperty(value = "模型id", required = true) @ApiModelProperty(value = "模型id", required = true)
@NotNull(message = "模型id不能为空") @NotNull(message = "模型id不能为空")
private Long workFlowId; private Long modelId;
/** /**
* *

View File

@ -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;
}

View File

@ -1,10 +1,12 @@
package com.mcwl.resource.domain.vo; package com.mcwl.resource.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
@Data @Data
@ -98,9 +100,22 @@ public class ModelImageVo {
@ApiModelProperty(value = "是否置顶") @ApiModelProperty(value = "是否置顶")
private Integer isTop; private Integer isTop;
/**
*
*/
@ApiModelProperty(value = "是否点赞")
private Integer isLike;
/** /**
* *
*/ */
@ApiModelProperty(value = "审核状态") @ApiModelProperty(value = "审核状态")
private Integer auditStatus; private Integer auditStatus;
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@ApiModelProperty(value = "创建时间")
private Date createTime;
} }

View File

@ -1,8 +1,12 @@
package com.mcwl.resource.domain.vo; package com.mcwl.resource.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@Data @Data
@ApiModel(description = "模型请求对象") @ApiModel(description = "模型请求对象")
@ -59,9 +63,21 @@ public class ModelVo {
@ApiModelProperty(value = "是否置顶") @ApiModelProperty(value = "是否置顶")
private Integer isTop; private Integer isTop;
/**
*
*/
@ApiModelProperty(value = "是否点赞")
private Integer isLike;
/** /**
* *
*/ */
@ApiModelProperty(value = "审核状态") @ApiModelProperty(value = "审核状态")
private Integer auditStatus; private Integer auditStatus;
/**
*
*/
@ApiModelProperty(value = "创建时间")
private Date createTime;
} }

View File

@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.util.Date;
@Data @Data
@ApiModel(description = "工作流请求对象") @ApiModel(description = "工作流请求对象")
public class WorkFlowVo { public class WorkFlowVo {
@ -54,10 +56,22 @@ public class WorkFlowVo {
@ApiModelProperty(value = "是否置顶") @ApiModelProperty(value = "是否置顶")
private Integer isTop; private Integer isTop;
/**
*
*/
@ApiModelProperty(value = "是否点赞")
private Integer isLike;
/** /**
* *
*/ */
@ApiModelProperty(value = "审核状态") @ApiModelProperty(value = "审核状态")
private Integer auditStatus; private Integer auditStatus;
/**
*
*/
@ApiModelProperty(value = "创建时间")
private Date createTime;
} }

View File

@ -14,11 +14,13 @@ import com.mcwl.common.utils.SecurityUtils;
import com.mcwl.common.utils.StringUtils; import com.mcwl.common.utils.StringUtils;
import com.mcwl.common.utils.baidu.BaiduCensor; import com.mcwl.common.utils.baidu.BaiduCensor;
import com.mcwl.resource.domain.ModelImage; 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.ModelImagePageRes;
import com.mcwl.resource.domain.dto.ModelImageRes; import com.mcwl.resource.domain.dto.ModelImageRes;
import com.mcwl.resource.domain.vo.ModelImageVo; import com.mcwl.resource.domain.vo.ModelImageVo;
import com.mcwl.resource.mapper.ModelImageCommentMapper; import com.mcwl.resource.mapper.ModelImageCommentMapper;
import com.mcwl.resource.mapper.ModelImageMapper; import com.mcwl.resource.mapper.ModelImageMapper;
import com.mcwl.resource.service.ModelImageLikeService;
import com.mcwl.resource.service.ModelImageService; import com.mcwl.resource.service.ModelImageService;
import com.mcwl.system.service.ISysDictDataService; import com.mcwl.system.service.ISysDictDataService;
import com.mcwl.system.service.ISysUserService; import com.mcwl.system.service.ISysUserService;
@ -42,12 +44,13 @@ public class ModelImageServiceImpl extends ServiceImpl<ModelImageMapper, ModelIm
private final ModelImageMapper modelImageMapper; private final ModelImageMapper modelImageMapper;
private final ModelImageLikeService modelImageLikeService;
private final ISysUserService sysUserService; private final ISysUserService sysUserService;
private final ISysDictDataService sysDictDataService; private final ISysDictDataService sysDictDataService;
@Autowired private final ThreadPoolTaskExecutor threadPoolTaskExecutor;
private ThreadPoolTaskExecutor threadPoolTaskExecutor;
@Override @Override
@ -230,6 +233,17 @@ public class ModelImageServiceImpl extends ServiceImpl<ModelImageMapper, ModelIm
} }
BeanUtil.copyProperties(modelImage, modelImageVo); BeanUtil.copyProperties(modelImage, modelImageVo);
ModelImageLike modelImageLike = modelImageLikeService.lambdaQuery()
.eq(ModelImageLike::getUserId, SecurityUtils.getUserId())
.eq(ModelImageLike::getModelImageId, imageId)
.one();
if (Objects.nonNull(modelImageLike)) {
modelImageVo.setIsLike(1);
} else {
modelImageVo.setIsLike(0);
}
// 设置标签 // 设置标签
List<String> tagList = new ArrayList<>(); List<String> tagList = new ArrayList<>();
if (StringUtils.isNotEmpty(modelImage.getTags())) { if (StringUtils.isNotEmpty(modelImage.getTags())) {