From 7f22f046c8d50b94a7e527cb4c0c951d57336acc Mon Sep 17 00:00:00 2001 From: yang <2119157836@qq.com> Date: Sun, 12 Jan 2025 15:14:31 +0800 Subject: [PATCH] =?UTF-8?q?feat(resource):=20=E6=B7=BB=E5=8A=A0=E6=A8=A1?= =?UTF-8?q?=E7=89=B9=E5=9B=BE=E7=89=87=E5=88=97=E8=A1=A8=E3=80=81=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E3=80=81=E5=88=A0=E9=99=A4=E7=AD=89=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增图片列表、详情、删除、修改等接口 - 实现分页查询功能 - 添加用户信息展示 - 优化图片上传和评论相关功能 --- .../pay/AliPay/AliPayIntegration.java | 166 ++++++------------ .../pay/AliPay/OrderTradeController.java | 21 +++ .../resource/ModelImageController.java | 74 +++++++- .../com/mcwl/common/core/page/PageDomain.java | 4 + .../resource/domain/dto/ModelImageRes.java | 4 + .../mcwl/resource/domain/vo/ModelImageVo.java | 74 ++++++++ .../resource/service/ModelImageService.java | 14 ++ .../service/impl/ModelImageServiceImpl.java | 69 +++++++- 8 files changed, 310 insertions(+), 116 deletions(-) create mode 100644 mcwl-resource/src/main/java/com/mcwl/resource/domain/vo/ModelImageVo.java diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/pay/AliPay/AliPayIntegration.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/pay/AliPay/AliPayIntegration.java index ad1114f..771ac62 100644 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/pay/AliPay/AliPayIntegration.java +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/pay/AliPay/AliPayIntegration.java @@ -8,18 +8,24 @@ import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.AlipayConfig; import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.diagnosis.DiagnosisUtils; import com.alipay.api.domain.AlipayFundAccountQueryModel; import com.alipay.api.domain.AlipayFundTransToaccountTransferModel; +import com.alipay.api.domain.AlipayFundTransUniTransferModel; +import com.alipay.api.domain.Participant; import com.alipay.api.request.AlipayFundAccountQueryRequest; import com.alipay.api.request.AlipayFundTransToaccountTransferRequest; +import com.alipay.api.request.AlipayFundTransUniTransferRequest; import com.alipay.api.response.AlipayFundAccountQueryResponse; import com.alipay.api.response.AlipayFundTransToaccountTransferResponse; +import com.alipay.api.response.AlipayFundTransUniTransferResponse; import com.alipay.easysdk.factory.Factory; import com.alipay.easysdk.kernel.Config; import com.alipay.easysdk.payment.facetoface.models.AlipayTradePrecreateResponse; import com.mcwl.common.core.redis.RedisCache; import com.mcwl.common.exception.ServiceException; import com.mcwl.common.utils.SecurityUtils; +import com.mcwl.common.utils.StringUtils; import com.mcwl.memberCenter.domain.MemberLevel; import com.mcwl.memberCenter.service.MemberLevelService; import com.mcwl.memberCenter.service.MemberService; @@ -184,74 +190,58 @@ public class AliPayIntegration { * @param amount 转账金额 * @return 返回支付宝转账响应的内容 */ - public String transfer(String outBizNo, String payerUserId, String payeeUserId, String amount) { - // 参数校验:检查外部业务单号是否为空 - if (outBizNo == null || outBizNo.isEmpty()) { - throw new IllegalArgumentException("outBizNo cannot be null or empty"); - } - // 参数校验:检查付款方用户ID是否为空 - if (payerUserId == null || payerUserId.isEmpty()) { - throw new IllegalArgumentException("payerUserId cannot be null or empty"); - } - // 参数校验:检查收款方用户ID是否为空 - if (payeeUserId == null || payeeUserId.isEmpty()) { - throw new IllegalArgumentException("payeeUserId cannot be null or empty"); - } - - try { - // 初始化支付宝SDK客户端,传入相关配置信息 - AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig()); - - // 创建向支付宝账户转账的请求对象 - AlipayFundTransToaccountTransferRequest request = new AlipayFundTransToaccountTransferRequest(); - // 创建转账请求的业务模型对象,用于设置具体业务参数 - AlipayFundTransToaccountTransferModel model = new AlipayFundTransToaccountTransferModel(); - - // 设置转账金额到业务模型对象中 - model.setAmount(amount); - - // 设置收款方账户类型为支付宝登录账号 - model.setPayeeType("ALIPAY_LOGONID"); - // 设置收款方的支付宝账号 - model.setPayeeAccount(payeeUserId); - // 设置收款方真实姓名,此处应替换为真实信息 - model.setPayeeRealName("测试用户"); - // 设置转账备注信息 - model.setRemark("转账备注"); - // 设置外部业务单号 - model.setOutBizNo(outBizNo); - // 设置付款方展示名称 - model.setPayerShowName("测试用户"); - // 设置付款方真实姓名 - model.setPayerRealName("测试用户"); - // 设置扩展参数,这里示例为一个空JSON字符串 - model.setExtParam("{}"); - // 将设置好参数的业务模型对象放入请求对象中 - request.setBizModel(model); - - // 执行转账请求,获取支付宝响应对象 - AlipayFundTransToaccountTransferResponse response = alipayClient.execute(request); - // 记录支付宝转账响应的详细内容 - log.info("Alipay transfer response: {}", response.getBody()); - - // 判断转账是否成功 - if (response.isSuccess()) { - // 记录转账成功日志 - log.info("Alipay transfer call success"); - // 如果成功,返回响应内容 - return response.getBody(); - } else { - // 记录转账失败日志,包含错误码和错误信息 - log.error("Alipay transfer call failed, error code: {}, error msg: {}", response.getCode(), response.getMsg()); - // 抛出运行时异常,告知调用者转账失败及失败原因 - throw new RuntimeException("Alipay transfer failed: " + response.getMsg()); - } - } catch (AlipayApiException e) { - // 捕获支付宝API异常,记录详细异常信息 - log.error("Alipay API exception occurred during transfer", e); - // 包装成运行时异常再次抛出,让调用者处理 - throw new RuntimeException("Alipay API exception during transfer", e); + public String transfer(String outBizNo, String payerUserId, String payeeUserId, String amount) throws AlipayApiException { + + // 初始化SDK + AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig()); + + // 构造请求参数以调用接口 + AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest(); + AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel(); + + // 设置商家侧唯一订单号 + model.setOutBizNo(outBizNo); + + // 设置订单总金额 + model.setTransAmount(amount); + + // 设置描述特定的业务场景 + model.setBizScene("DIRECT_TRANSFER"); + + // 设置业务产品码 + model.setProductCode("TRANS_ACCOUNT_NO_PWD"); + + // 设置转账业务的标题 + model.setOrderTitle("测试"); + + // 设置收款方信息 + Participant payeeInfo = new Participant(); + payeeInfo.setCertType("IDENTITY_CARD"); + payeeInfo.setCertNo("1201152******72917"); + payeeInfo.setIdentity("2088123412341234"); + payeeInfo.setName("黄龙国际有限公司"); + payeeInfo.setIdentityType("ALIPAY_USER_ID"); + model.setPayeeInfo(payeeInfo); + + // 设置业务备注 + model.setRemark("201905代发"); + + // 设置转账业务请求的扩展参数 + model.setBusinessParams("{\"payer_show_name_use_alias\":\"true\"}"); + + request.setBizModel(model); + AlipayFundTransUniTransferResponse response = alipayClient.certificateExecute(request); + System.out.println(response.getBody()); + + if (response.isSuccess()) { + System.out.println("调用成功"); + } else { + System.out.println("调用失败"); + // sdk版本是"4.38.0.ALL"及以上,可以参考下面的示例获取诊断链接 + String diagnosisUrl = DiagnosisUtils.getDiagnosisUrl(response); + System.out.println(diagnosisUrl); } + return response.getBody(); } /** @@ -288,48 +278,6 @@ public class AliPayIntegration { } } -// public static void main(String[] args) throws AlipayApiException { -// String privateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCQxmQGcaiKjOhayWi+zNTvpp8B5YT8jFFkjLzrD+W+T2Dwf2GfFR4p95zsCJxYeoLWdghMPA6/GMFrLbuVFpaEjuTm4icqA9N8n5d3W0j7gh+wMjZoqyJclAIeb09ut7rY6mWzilA9kWmZnUG7MOWIU70RVRYrfJectCFw/odM9lG4XIVe13X2h+1ecTQyQzLWmnvKFCfo7dQjE7fIYiWfud1ZGUneNs3u73pNWMB6ThGTTCbs0atcgM3fYOg3q7fTxIu9VcaUCJiJ/kNbL9sVEyOrSyx2f2o6w06zdEaOiQFsuDeS8QPYGMg7pf42wAfqCO6hqxQiQT5vp1hvB0o1AgMBAAECggEAIhaEYLwMSispXo8D2cES9iaOU/z91hUX6Qv2Q4anuqqoEZh8nN91Db6etTjFz1NxURvTklelxTsH97t56n26DRY0MWTYgd0Kw9Iz8MeOpKGb4nnAM97vpUq4QQBGfLRIC2ENdzu+7vA5JBFR88hsky/cWaNmJ/EbJauIIDneE7GigMR2HF7kfzdZzOBN4ZEh/ef5NKeCnEieRJJhWRgrgNXVZ44Tqi67AM7ey9pyUtBe7fgzxXtrWXBN9yKaVxxSXm3KJXFQqA6mcilFVZaxMNlAySc4MPTW8lq0ozOCOCunoeIphNz/OVIxGu3/voXFXlBfOKqOkYMVZxMY6OrvtQKBgQD0nIlXK4VW72VaGpz9kxQkRNzJV/yqaqet1GOSlPM2l0RCRFOVVdnvbQdHGPe6+HxHL1dh5MP8T/aHoP+4UXkkQCc8moS2FZxJvFH2QTSZBcSSdGL7GMpROqs38J+XlJzrhNcB20lrW6D7yMeQa4YEcXwdbD8Er/YaIqODBWYYewKBgQCXg+16RLDArciwwhf0TBWZPor2iYFDdwU5UPu7CKOhU1MLfQhG85gGpXHjB6G8cMUi/ezxh/FEl+sWOZegpkPwL5/BQS9tNYWIaC4kipPF/a5Up4DMYUHVAuuPwNqqXpvgU+rGjCns0wtPRnjrkghLkc3oTSID7o7pzUwIk2whDwKBgAys3+EIfExY82OL5X6uVGjcuKQmTw11oWK8krxRw5iclgjpCXu/ix+BAtOIU634mlgF9/02oYE9k4TLrvSaJDDgsifNyfq1e/fGLmkYT+VuCxWbulVQn4s+AwlPCrYMGWWK6KlL9638fYcOjGjLaZJpXwkXRtyzUYlhKh/r87JpAoGBAIavRp2mi/xrPvgpQQPv0k9L8llfOCHRnjoqC+thrZsNp8eRmJcBmMVnskofEZ2iHQuS71pw/n58EQTLo0ayJbhPjVJL8K3CovXzrfjbmqqoa5xi3bJQTiXdF6rMw1QpD6Uk05E1LVuQ6v/IZFr7kBYlAQWb8z3NhQq+bPU+nyLvAoGAGpBbSM8gPzdWQqkHoos0icu3cj0GhN3MU7+1Eb/rsXyh/lk5wtZTEnHjwhdUOUtwVNjvrv7CzA7unhOoaM6YcE/Zpd4zt8pjqH1Mhds7UHf4Xg+A+J4G6meYnhSwfBpOub02ncsqfBlXE0qhFv6AvcMewWndyLb8EYaUUXTYkG0="; -// CertAlipayRequest alipayConfig = new CertAlipayRequest(); -// alipayConfig.setPrivateKey(privateKey); -// alipayConfig.setServerUrl("https://openapi-sandbox.dl.alipaydev.com/gateway.do"); -// alipayConfig.setAppId("9021000135682614"); -// alipayConfig.setCharset("UTF-8"); -// alipayConfig.setSignType("RSA2"); -// alipayConfig.setEncryptor(""); -// alipayConfig.setFormat("json"); -// alipayConfig.setCertContent("<-- 请填写您的应用公钥证书内容字符串 -->"); -// alipayConfig.setAlipayPublicCertContent("<-- 请填写您的支付宝公钥证书内容字符串 -->"); -// alipayConfig.setRootCertContent("-----BEGIN CERTIFICATE-----\r\nMIIBszCCAVegAwIBAgIIaeL+wBcKxnswDAYIKoEcz1UBg3UFADAuMQswCQYDVQQG\r\nEwJDTjEOMAwGA1UECgwFTlJDQUMxDzANBgNVBAMMBlJPT1RDQTAeFw0xMjA3MTQw\r\nMzExNTlaFw00MjA3MDcwMzExNTlaMC4xCzAJBgNVBAYTAkNOMQ4wDAYDVQQKDAVO\r\nUkNBQzEPMA0GA1UEAwwGUk9PVENBMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE\r\nMPCca6pmgcchsTf2UnBeL9rtp4nw+itk1Kzrmbnqo05lUwkwlWK+4OIrtFdAqnRT\r\nV7Q9v1htkv42TsIutzd126NdMFswHwYDVR0jBBgwFoAUTDKxl9kzG8SmBcHG5Yti\r\nW/CXdlgwDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFEwysZfZ\r\nMxvEpgXBxuWLYlvwl3ZYMAwGCCqBHM9VAYN1BQADSAAwRQIgG1bSLeOXp3oB8H7b\r\n53W+CKOPl2PknmWEq/lMhtn25HkCIQDaHDgWxWFtnCrBjH16/W3Ezn7/U/Vjo5xI\r\npDoiVhsLwg==\r\n-----END CERTIFICATE-----\r\n\r\n-----BEGIN CERTIFICATE-----\r\nMIIF0zCCA7ugAwIBAgIIH8+hjWpIDREwDQYJKoZIhvcNAQELBQAwejELMAkGA1UE\r\nBhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmlj\r\nYXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5jaWFsIENlcnRpZmlj\r\nYXRpb24gQXV0aG9yaXR5IFIxMB4XDTE4MDMyMTEzNDg0MFoXDTM4MDIyODEzNDg0\r\nMFowejELMAkGA1UEBhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNV\r\nBAsMF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5j\r\naWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFIxMIICIjANBgkqhkiG9w0BAQEF\r\nAAOCAg8AMIICCgKCAgEAtytTRcBNuur5h8xuxnlKJetT65cHGemGi8oD+beHFPTk\r\nrUTlFt9Xn7fAVGo6QSsPb9uGLpUFGEdGmbsQ2q9cV4P89qkH04VzIPwT7AywJdt2\r\nxAvMs+MgHFJzOYfL1QkdOOVO7NwKxH8IvlQgFabWomWk2Ei9WfUyxFjVO1LVh0Bp\r\ndRBeWLMkdudx0tl3+21t1apnReFNQ5nfX29xeSxIhesaMHDZFViO/DXDNW2BcTs6\r\nvSWKyJ4YIIIzStumD8K1xMsoaZBMDxg4itjWFaKRgNuPiIn4kjDY3kC66Sl/6yTl\r\nYUz8AybbEsICZzssdZh7jcNb1VRfk79lgAprm/Ktl+mgrU1gaMGP1OE25JCbqli1\r\nPbw/BpPynyP9+XulE+2mxFwTYhKAwpDIDKuYsFUXuo8t261pCovI1CXFzAQM2w7H\r\nDtA2nOXSW6q0jGDJ5+WauH+K8ZSvA6x4sFo4u0KNCx0ROTBpLif6GTngqo3sj+98\r\nSZiMNLFMQoQkjkdN5Q5g9N6CFZPVZ6QpO0JcIc7S1le/g9z5iBKnifrKxy0TQjtG\r\nPsDwc8ubPnRm/F82RReCoyNyx63indpgFfhN7+KxUIQ9cOwwTvemmor0A+ZQamRe\r\n9LMuiEfEaWUDK+6O0Gl8lO571uI5onYdN1VIgOmwFbe+D8TcuzVjIZ/zvHrAGUcC\r\nAwEAAaNdMFswCwYDVR0PBAQDAgEGMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFF90\r\ntATATwda6uWx2yKjh0GynOEBMB8GA1UdIwQYMBaAFF90tATATwda6uWx2yKjh0Gy\r\nnOEBMA0GCSqGSIb3DQEBCwUAA4ICAQCVYaOtqOLIpsrEikE5lb+UARNSFJg6tpkf\r\ntJ2U8QF/DejemEHx5IClQu6ajxjtu0Aie4/3UnIXop8nH/Q57l+Wyt9T7N2WPiNq\r\nJSlYKYbJpPF8LXbuKYG3BTFTdOVFIeRe2NUyYh/xs6bXGr4WKTXb3qBmzR02FSy3\r\nIODQw5Q6zpXj8prYqFHYsOvGCEc1CwJaSaYwRhTkFedJUxiyhyB5GQwoFfExCVHW\r\n05ZFCAVYFldCJvUzfzrWubN6wX0DD2dwultgmldOn/W/n8at52mpPNvIdbZb2F41\r\nT0YZeoWnCJrYXjq/32oc1cmifIHqySnyMnavi75DxPCdZsCOpSAT4j4lAQRGsfgI\r\nkkLPGQieMfNNkMCKh7qjwdXAVtdqhf0RVtFILH3OyEodlk1HYXqX5iE5wlaKzDop\r\nPKwf2Q3BErq1xChYGGVS+dEvyXc/2nIBlt7uLWKp4XFjqekKbaGaLJdjYP5b2s7N\r\n1dM0MXQ/f8XoXKBkJNzEiM3hfsU6DOREgMc1DIsFKxfuMwX3EkVQM1If8ghb6x5Y\r\njXayv+NLbidOSzk4vl5QwngO/JYFMkoc6i9LNwEaEtR9PhnrdubxmrtM+RjfBm02\r\n77q3dSWFESFQ4QxYWew4pHE0DpWbWy/iMIKQ6UZ5RLvB8GEcgt8ON7BBJeMc+Dyi\r\nkT9qhqn+lw==\r\n-----END CERTIFICATE-----\r\n\r\n-----BEGIN CERTIFICATE-----\r\nMIICiDCCAgygAwIBAgIIQX76UsB/30owDAYIKoZIzj0EAwMFADB6MQswCQYDVQQG\r\nEwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UECwwXQ2VydGlmaWNh\r\ndGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNpYWwgQ2VydGlmaWNh\r\ndGlvbiBBdXRob3JpdHkgRTEwHhcNMTkwNDI4MTYyMDQ0WhcNNDkwNDIwMTYyMDQ0\r\nWjB6MQswCQYDVQQGEwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UE\r\nCwwXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNp\r\nYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRTEwdjAQBgcqhkjOPQIBBgUrgQQA\r\nIgNiAASCCRa94QI0vR5Up9Yr9HEupz6hSoyjySYqo7v837KnmjveUIUNiuC9pWAU\r\nWP3jwLX3HkzeiNdeg22a0IZPoSUCpasufiLAnfXh6NInLiWBrjLJXDSGaY7vaokt\r\nrpZvAdmjXTBbMAsGA1UdDwQEAwIBBjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBRZ\r\n4ZTgDpksHL2qcpkFkxD2zVd16TAfBgNVHSMEGDAWgBRZ4ZTgDpksHL2qcpkFkxD2\r\nzVd16TAMBggqhkjOPQQDAwUAA2gAMGUCMQD4IoqT2hTUn0jt7oXLdMJ8q4vLp6sg\r\nwHfPiOr9gxreb+e6Oidwd2LDnC4OUqCWiF8CMAzwKs4SnDJYcMLf2vpkbuVE4dTH\r\nRglz+HGcTLWsFs4KxLsq7MuU+vJTBUeDJeDjdA==\r\n-----END CERTIFICATE-----\r\n\r\n-----BEGIN CERTIFICATE-----\r\nMIIDxTCCAq2gAwIBAgIUEMdk6dVgOEIS2cCP0Q43P90Ps5YwDQYJKoZIhvcNAQEF\r\nBQAwajELMAkGA1UEBhMCQ04xEzARBgNVBAoMCmlUcnVzQ2hpbmExHDAaBgNVBAsM\r\nE0NoaW5hIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMMH2lUcnVzQ2hpbmEgQ2xhc3Mg\r\nMiBSb290IENBIC0gRzMwHhcNMTMwNDE4MDkzNjU2WhcNMzMwNDE4MDkzNjU2WjBq\r\nMQswCQYDVQQGEwJDTjETMBEGA1UECgwKaVRydXNDaGluYTEcMBoGA1UECwwTQ2hp\r\nbmEgVHJ1c3QgTmV0d29yazEoMCYGA1UEAwwfaVRydXNDaGluYSBDbGFzcyAyIFJv\r\nb3QgQ0EgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOPPShpV\r\nnJbMqqCw6Bz1kehnoPst9pkr0V9idOwU2oyS47/HjJXk9Rd5a9xfwkPO88trUpz5\r\n4GmmwspDXjVFu9L0eFaRuH3KMha1Ak01citbF7cQLJlS7XI+tpkTGHEY5pt3EsQg\r\nwykfZl/A1jrnSkspMS997r2Gim54cwz+mTMgDRhZsKK/lbOeBPpWtcFizjXYCqhw\r\nWktvQfZBYi6o4sHCshnOswi4yV1p+LuFcQ2ciYdWvULh1eZhLxHbGXyznYHi0dGN\r\nz+I9H8aXxqAQfHVhbdHNzi77hCxFjOy+hHrGsyzjrd2swVQ2iUWP8BfEQqGLqM1g\r\nKgWKYfcTGdbPB1MCAwEAAaNjMGEwHQYDVR0OBBYEFG/oAMxTVe7y0+408CTAK8hA\r\nuTyRMB8GA1UdIwQYMBaAFG/oAMxTVe7y0+408CTAK8hAuTyRMA8GA1UdEwEB/wQF\r\nMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBLnUTfW7hp\r\nemMbuUGCk7RBswzOT83bDM6824EkUnf+X0iKS95SUNGeeSWK2o/3ALJo5hi7GZr3\r\nU8eLaWAcYizfO99UXMRBPw5PRR+gXGEronGUugLpxsjuynoLQu8GQAeysSXKbN1I\r\nUugDo9u8igJORYA+5ms0s5sCUySqbQ2R5z/GoceyI9LdxIVa1RjVX8pYOj8JFwtn\r\nDJN3ftSFvNMYwRuILKuqUYSHc2GPYiHVflDh5nDymCMOQFcFG3WsEuB+EYQPFgIU\r\n1DHmdZcz7Llx8UOZXX2JupWCYzK1XhJb+r4hK5ncf/w8qGtYlmyJpxk3hr1TfUJX\r\nYf4Zr0fJsGuv\r\n-----END CERTIFICATE-----"); -// // 如果不使用content的模式,那么这里需要自行设置文件的绝对路径 -// // alipayConfig.setCertPath("cert的绝对路径"); -// // alipayConfig.setAlipayPublicCertPath("AlipayPublicCertPath的绝对路径"); -// // alipayConfig.setRootCertPath("RootCertPath的绝对路径"); -// AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig); -// AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest(); -// AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel(); -// model.setOutBizNo("201806300001"); -// model.setTransAmount("23.00"); -// model.setProductCode("TRANS_ACCOUNT_NO_PWD"); -// Participant payeeInfo = new Participant(); -// BankcardExtInfo bankcardExtInfo = new BankcardExtInfo(); -// bankcardExtInfo.setInstName("招商银行"); -// bankcardExtInfo.setAccountType("1"); -// payeeInfo.setBankcardExtInfo(bankcardExtInfo); -// model.setPayeeInfo(payeeInfo); -// request.setBizModel(model); -// AlipayFundTransUniTransferResponse response = alipayClient.certificateExecute(request); -// System.out.println(response.getBody()); -// if (response.isSuccess()) { -// System.out.println("调用成功"); -// } else { -// System.out.println("调用失败"); -// // sdk版本是"4.38.0.ALL"及以上,可以参考下面的示例获取诊断链接 -// // String diagnosisUrl = DiagnosisUtils.getDiagnosisUrl(response); -// // System.out.println(diagnosisUrl); -// } -// } - private AlipayConfig getAlipayConfig() { String privateKey = aliConfig.getPrivateKey(); String alipayPublicKey = aliConfig.getPublicKey(); 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 2aada84..f16e9b7 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 @@ -144,6 +144,27 @@ public class OrderTradeController extends BaseController { return map.get("alipay_trade_query_response"); } + /** + * 查看余额 + */ + @GetMapping("/balance") + public void balance() throws Exception { + aliPayIntegration.balance(); + } + + /** + * 提现接口 + */ + @Anonymous + @PostMapping("/withdraw") + public void withdraw(@RequestBody OrderTradeDto orderTradeDto, HttpServletResponse response) throws Exception { + String outBizNo = UUID.fastUUID().toString(true); + String payerUserId = "2088102167258880"; + String payeeUserId = "2088102167258880"; + String amount = "100"; + aliPayIntegration.transfer(outBizNo, payerUserId, payeeUserId, amount); + } + /** * 支付回调接口 diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/ModelImageController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/ModelImageController.java index b422da5..1cb98e4 100644 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/ModelImageController.java +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/ModelImageController.java @@ -1,8 +1,17 @@ package com.mcwl.web.controller.resource; import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.metadata.OrderItem; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.pagehelper.PageInfo; +import com.mcwl.common.constant.HttpStatus; +import com.mcwl.common.core.controller.BaseController; import com.mcwl.common.core.domain.AjaxResult; +import com.mcwl.common.core.domain.entity.SysUser; +import com.mcwl.common.core.page.PageDomain; +import com.mcwl.common.core.page.TableDataInfo; import com.mcwl.common.utils.SecurityUtils; +import com.mcwl.common.utils.StringUtils; import com.mcwl.common.utils.oss.OssUtil; import com.mcwl.resource.domain.ModelImage; import com.mcwl.resource.domain.ModelImageComment; @@ -11,9 +20,12 @@ import com.mcwl.resource.domain.ModelImageLike; import com.mcwl.resource.domain.dto.ModelImageCommentRes; import com.mcwl.resource.domain.dto.ModelImageRes; import com.mcwl.resource.domain.vo.ModelImageCommentVo; +import com.mcwl.resource.domain.vo.ModelImageVo; import com.mcwl.resource.service.ModelImageCommentLikeService; +import com.mcwl.resource.service.ModelImageCommentService; import com.mcwl.resource.service.ModelImageLikeService; import com.mcwl.resource.service.ModelImageService; +import com.mcwl.system.service.ISysUserService; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -37,6 +49,55 @@ public class ModelImageController { private final ModelImageCommentLikeService modelImageCommentLikeService; + private final ModelImageCommentService modelImageCommentService; + + private final ISysUserService sysUserService; + + + /** + * 图片列表 + */ + @PostMapping("/list") + public TableDataInfo list(@RequestBody PageDomain pageDomain) { + + return modelImageService.listByPage(pageDomain); + } + + /** + * 图片详情 + */ + @GetMapping("/detail/{imageId}") + public AjaxResult detail(@PathVariable @NotNull(message = "图片id不能为空") Long imageId) { + ModelImageVo modelImageVo = new ModelImageVo(); + ModelImage modelImage = modelImageService.getById(imageId); + if (Objects.nonNull(modelImage)) { + BeanUtil.copyProperties(modelImage, modelImageVo); + SysUser sysUser = sysUserService.selectUserById(modelImage.getUserId()); + modelImageVo.setUserId(SecurityUtils.getUserId()); + modelImageVo.setUserName(SecurityUtils.getUsername()); + modelImageVo.setUserAvatar(sysUser.getAvatar()); + } + return AjaxResult.success(modelImageVo); + } + + /** + * 图片删除 + */ + @GetMapping("/delete/{imageId}") + public AjaxResult delete(@PathVariable @NotNull(message = "图片id不能为空") Long imageId) { + modelImageService.removeById(imageId); + return AjaxResult.success(); + } + + /** + * 图片修改 + */ + @PostMapping("/update") + public AjaxResult update(@RequestBody ModelImageRes modelImageRes) { + modelImageService.updateById(modelImageRes); + return AjaxResult.success(); + } + /** * 图片上传 @@ -62,7 +123,7 @@ public class ModelImageController { * 图片点赞/取消 */ @GetMapping("/imageLike/{imageId}") - public AjaxResult like(@PathVariable Long imageId) { + public AjaxResult like(@PathVariable @NotNull(message = "图片id不能为空") Long imageId) { modelImageLikeService.like(imageId); return AjaxResult.success(); } @@ -81,11 +142,20 @@ public class ModelImageController { * 图片评论点赞/取消 */ @GetMapping("/commentLike/{commentId}") - public AjaxResult commentLike(@PathVariable Long commentId) { + public AjaxResult commentLike(@PathVariable @NotNull(message = "评论id不能为空") Long commentId) { modelImageCommentLikeService.like(commentId); return AjaxResult.success(); } + /** + * 删除图片评论 + */ + @GetMapping("/commentDelete/{commentId}") + public AjaxResult commentDelete(@PathVariable @NotNull(message = "评论id不能为空") Long commentId) { + modelImageCommentService.removeById(commentId); + return AjaxResult.success(); + } + /** * 获取图片评论 */ diff --git a/mcwl-common/src/main/java/com/mcwl/common/core/page/PageDomain.java b/mcwl-common/src/main/java/com/mcwl/common/core/page/PageDomain.java index 95a5190..d1d8d3e 100644 --- a/mcwl-common/src/main/java/com/mcwl/common/core/page/PageDomain.java +++ b/mcwl-common/src/main/java/com/mcwl/common/core/page/PageDomain.java @@ -2,6 +2,8 @@ package com.mcwl.common.core.page; import com.mcwl.common.utils.StringUtils; +import javax.validation.constraints.NotNull; + /** * 分页数据 * @@ -10,9 +12,11 @@ import com.mcwl.common.utils.StringUtils; public class PageDomain { /** 当前记录起始索引 */ + @NotNull(message = "当前记录起始索引不能为空") private Integer pageNum; /** 每页显示记录数 */ + @NotNull(message = "每页显示记录数不能为空") private Integer pageSize; /** 排序列 */ diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/domain/dto/ModelImageRes.java b/mcwl-resource/src/main/java/com/mcwl/resource/domain/dto/ModelImageRes.java index 1499307..b1199af 100644 --- a/mcwl-resource/src/main/java/com/mcwl/resource/domain/dto/ModelImageRes.java +++ b/mcwl-resource/src/main/java/com/mcwl/resource/domain/dto/ModelImageRes.java @@ -7,6 +7,10 @@ import javax.validation.constraints.NotBlank; @Data public class ModelImageRes { + /** + * 图片id + */ + private Long id; /** * 图片地址(最多8张,切割) */ 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 new file mode 100644 index 0000000..e79b106 --- /dev/null +++ b/mcwl-resource/src/main/java/com/mcwl/resource/domain/vo/ModelImageVo.java @@ -0,0 +1,74 @@ +package com.mcwl.resource.domain.vo; + +import lombok.Data; + +@Data +public class ModelImageVo { + /** + * 图片ID + */ + private Long id; + /** + * 用户ID + */ + private Long userId; + /** + * 用户名称 + */ + private String userName; + /** + * 用户头像 + */ + private String userAvatar; + /** + * 图片地址(最多8张,切割) + */ + private String imagePaths; + /** + * 是否添加水印 + */ + private Integer hasWatermark; + /** + * 是否会员下载 + */ + private Integer isMemberDownload; + /** + * 是否不可下载 + */ + private Integer isNotDownloadable; + /** + * 是否隐藏生成信息 + */ + private Integer hideGenInfo; + /** + * 图片标题(最多30字) + */ + private String title; + /** + * 图片标签(多个,切割) + */ + private String tags; + /** + * 描述信息(最多500) + */ + private String description; + /** + * 在线生成数 + */ + private Integer onlineGenNum; + /** + * 下载数 + */ + private Integer downloadNum; + /** + * 返图数 + */ + private Integer returnNum; + /** + * 点赞数 + */ + private Integer likeNum; + + + +} diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/service/ModelImageService.java b/mcwl-resource/src/main/java/com/mcwl/resource/service/ModelImageService.java index ad903b0..da1e48b 100644 --- a/mcwl-resource/src/main/java/com/mcwl/resource/service/ModelImageService.java +++ b/mcwl-resource/src/main/java/com/mcwl/resource/service/ModelImageService.java @@ -3,6 +3,8 @@ package com.mcwl.resource.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.mcwl.common.core.domain.AjaxResult; +import com.mcwl.common.core.page.PageDomain; +import com.mcwl.common.core.page.TableDataInfo; import com.mcwl.resource.domain.ModelImage; import com.mcwl.resource.domain.ModelProduct; import com.mcwl.resource.domain.dto.ModelImageCommentRes; @@ -14,6 +16,11 @@ import java.util.List; public interface ModelImageService extends IService { + /** + * 根据id更新 + * @param modelImageRes 更新对象 + */ + void updateById(ModelImageRes modelImageRes); /** * 发布 @@ -33,4 +40,11 @@ public interface ModelImageService extends IService { * @return 评论区 */ List getComment(Long imageId); + + /** + * 分页查询 + * @param pageDomain 分页参数 + * @return 分页数据 + */ + TableDataInfo listByPage(PageDomain pageDomain); } 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 bcf887e..15b805a 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 @@ -1,27 +1,28 @@ package com.mcwl.resource.service.impl; import cn.hutool.core.bean.BeanUtil; -import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.OrderItem; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.mcwl.common.core.domain.AjaxResult; +import com.mcwl.common.constant.HttpStatus; import com.mcwl.common.core.domain.entity.SysUser; +import com.mcwl.common.core.page.PageDomain; +import com.mcwl.common.core.page.TableDataInfo; import com.mcwl.common.utils.SecurityUtils; +import com.mcwl.common.utils.StringUtils; import com.mcwl.resource.domain.ModelImage; import com.mcwl.resource.domain.ModelImageComment; import com.mcwl.resource.domain.dto.ModelImageCommentRes; import com.mcwl.resource.domain.dto.ModelImageRes; -import com.mcwl.resource.domain.vo.MallProductVo; import com.mcwl.resource.domain.vo.ModelImageCommentVo; -import com.mcwl.resource.mapper.MallProductLikeMapper; +import com.mcwl.resource.domain.vo.ModelImageVo; import com.mcwl.resource.mapper.ModelImageCommentMapper; import com.mcwl.resource.mapper.ModelImageMapper; import com.mcwl.resource.service.ModelImageService; import com.mcwl.system.service.ISysUserService; import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -61,6 +62,18 @@ public class ModelImageServiceImpl extends ServiceImpl page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize()); + if (StringUtils.isEmpty(pageDomain.getOrderByColumn())) { + pageDomain.setOrderByColumn("create_time"); + } + // 设置排序 + boolean isAsc = Objects.equals(pageDomain.getIsAsc(), "asc"); + OrderItem orderItem = new OrderItem(pageDomain.getOrderByColumn(), isAsc); + page.addOrder(orderItem); + modelImageMapper.selectPage(page, null); + // 获取分页数据 + List modelImageList = page.getRecords(); + + // ModelImage数据转为ModelImagePageVo + List modelImageVoList = new ArrayList<>(); + for (ModelImage modelImage : modelImageList) { + ModelImageVo modelImageVo = new ModelImageVo(); + BeanUtil.copyProperties(modelImage, modelImageVo); + // 获取用户信息 + SysUser sysUser = sysUserService.selectUserById(modelImage.getUserId()); + modelImageVo.setUserId(sysUser.getUserId()); + modelImageVo.setUserName(sysUser.getUserName()); + modelImageVo.setUserAvatar(sysUser.getAvatar()); + modelImageVoList.add(modelImageVo); + } + + // 封装分页数据 + TableDataInfo rspData = new TableDataInfo(); + rspData.setCode(HttpStatus.SUCCESS); + rspData.setMsg("查询成功"); + rspData.setRows(modelImageVoList); + rspData.setTotal(page.getTotal()); + + return rspData; + } + /** * 构建ModelImageCommentVo对象 *