diff --git a/mcwl-admin/pom.xml b/mcwl-admin/pom.xml
index c2794f3..ef9109d 100644
--- a/mcwl-admin/pom.xml
+++ b/mcwl-admin/pom.xml
@@ -28,11 +28,11 @@
-
-
-
-
-
+
+ com.alipay.sdk
+ alipay-sdk-java
+ 4.40.30.ALL
+
diff --git a/mcwl-admin/src/main/java/com/mcwl/McWlApplication.java b/mcwl-admin/src/main/java/com/mcwl/McWlApplication.java
index 1cf52e3..26960e7 100644
--- a/mcwl-admin/src/main/java/com/mcwl/McWlApplication.java
+++ b/mcwl-admin/src/main/java/com/mcwl/McWlApplication.java
@@ -1,6 +1,7 @@
package com.mcwl;
import com.fasterxml.jackson.databind.SerializationFeature;
+import com.mcwl.pay.config.AliConfig;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
@@ -8,6 +9,7 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
/**
@@ -16,6 +18,7 @@ import org.springframework.context.annotation.Bean;
* @author mcwl
*/
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
+@EnableConfigurationProperties(AliConfig.class)
public class McWlApplication
{
public static void main(String[] args)
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 919b44c..bbc69c5 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
@@ -5,6 +5,17 @@ import cn.hutool.core.lang.UUID;
import cn.hutool.db.sql.Order;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
+import com.alipay.api.*;
+import com.alipay.api.AlipayClient;
+import com.alipay.api.DefaultAlipayClient;
+import com.alipay.api.domain.*;
+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.CertAlipayRequest;
+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;
@@ -15,10 +26,12 @@ import com.mcwl.memberCenter.domain.Member;
import com.mcwl.memberCenter.domain.MemberLevel;
import com.mcwl.memberCenter.service.MemberLevelService;
import com.mcwl.memberCenter.service.MemberService;
+import com.mcwl.pay.config.AliConfig;
import com.mcwl.pay.domain.OrderTrade;
import com.mcwl.pay.domain.OrderTradeDto;
import com.mcwl.resource.service.MallProductService;
import com.mcwl.system.service.ISysUserService;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
@@ -31,7 +44,7 @@ import java.util.concurrent.TimeUnit;
* 支付宝支付
*/
@Component
-
+@Slf4j
public class AliPayIntegration {
@Autowired
@@ -49,6 +62,9 @@ public class AliPayIntegration {
@Autowired
private ISysUserService sysUserService;
+ @Autowired
+ private AliConfig aliConfig;
+
public AliPayIntegration(Config config) {
Factory.setOptions(config);
@@ -172,4 +188,172 @@ public class AliPayIntegration {
JSONObject jsonObject = JSONObject.parseObject(httpBodyStr);
return jsonObject.getJSONObject("alipay_trade_precreate_response").get("qr_code").toString();
}
+
+ /**
+ * 支付宝转账方法
+ * @param outBizNo 外部业务单号
+ * @param payerUserId 付款方用户ID
+ * @param payeeUserId 收款方用户ID
+ * @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 void balance() throws AlipayApiException {
+ // 初始化SDK
+ AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig());
+
+ // 构造请求参数以调用接口
+ AlipayFundAccountQueryRequest request = new AlipayFundAccountQueryRequest();
+ AlipayFundAccountQueryModel model = new AlipayFundAccountQueryModel();
+
+ // uid参数未来计划废弃,存量商户可继续使用,新商户请使用openid。请根据应用-开发配置-openid配置选择支持的字段。
+ // model.setAlipayUserId("2088301409188095");
+
+ // 设置支付宝openId
+ model.setAlipayOpenId("061P6NAblcWDWJoDRxSVvOYz-ufp-3wQaA4E_szQyMFTXse");
+
+ // 设置查询的账号类型
+ model.setAccountType("ACCTRANS_ACCOUNT");
+
+ request.setBizModel(model);
+ AlipayFundAccountQueryResponse response = alipayClient.execute(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);
+ }
+ }
+
+// 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();
+ 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;
+ }
}
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
new file mode 100644
index 0000000..38efa1a
--- /dev/null
+++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/ModelImageController.java
@@ -0,0 +1,65 @@
+package com.mcwl.web.controller.resource;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.mcwl.common.core.domain.AjaxResult;
+import com.mcwl.common.utils.SecurityUtils;
+import com.mcwl.common.utils.oss.OssUtil;
+import com.mcwl.resource.domain.ModelImage;
+import com.mcwl.resource.domain.ModelImageLike;
+import com.mcwl.resource.domain.dto.ModelImageRes;
+import com.mcwl.resource.service.ModelImageLikeService;
+import com.mcwl.resource.service.ModelImageService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.Date;
+import java.util.Objects;
+
+@RestController
+@RequestMapping("/modelImage")
+@RequiredArgsConstructor
+public class ModelImageController {
+
+ private final ModelImageService modelImageService;
+
+ private final ModelImageLikeService modelImageLikeService;
+
+
+ /**
+ * 图片上传
+ */
+ @GetMapping("/upload")
+ public AjaxResult upload(MultipartFile file) {
+
+ return AjaxResult.success("上传成功", OssUtil.uploadMultipartFile(file));
+
+ }
+
+
+ /**
+ * 图片发布
+ */
+ @PostMapping("/publish")
+ public AjaxResult publish(@RequestBody ModelImageRes modelImageRes) {
+ ModelImage modelImage = new ModelImage();
+ BeanUtil.copyProperties(modelImageRes, modelImage);
+ modelImage.setCreateBy(SecurityUtils.getUsername());
+ modelImage.setUpdateBy(SecurityUtils.getUsername());
+ modelImage.setUpdateTime(new Date());
+ modelImage.setStatus(3);
+ modelImageService.save(modelImage);
+ return AjaxResult.success();
+ }
+
+ /**
+ * 图片点赞/取消
+ */
+ @GetMapping("/like/{imageId}")
+ public AjaxResult like(@PathVariable Long imageId) {
+ modelImageLikeService.like(imageId);
+ return AjaxResult.success();
+ }
+
+
+}
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
new file mode 100644
index 0000000..d0a6a23
--- /dev/null
+++ b/mcwl-pay/src/main/java/com/mcwl/pay/config/AliConfig.java
@@ -0,0 +1,19 @@
+package com.mcwl.pay.config;
+
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.stereotype.Component;
+
+@Data
+@ConfigurationProperties(prefix = "mall.mgt.aliPayConfig")
+@Configuration
+@Component
+public class AliConfig {
+
+ private String appId;
+ private String privateKey;
+ private String publicKey;
+ private String gatewayUrl;
+}
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 a8a3fef..037955b 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
@@ -1,8 +1,11 @@
package com.mcwl.resource.domain;
+import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
+import com.mcwl.common.core.domain.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
+import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
/**图片表
@@ -16,47 +19,66 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
@Data
+@EqualsAndHashCode(callSuper = true)
@TableName("model_image")
-public class ModelImage {
+public class ModelImage extends BaseEntity {
/**
* 主键ID
*/
+ @TableId
private Long id;
/**
* 图片地址(最多8张,切割)
*/
- private Long image_paths;
+ private String imagePaths;
/**
* 是否添加水印
*/
- private Long has_watermark;
+ private Integer hasWatermark;
/**
* 是否会员下载
*/
- private Long is_member_download;
+ private Integer isMemberDownload;
/**
* 是否不可下载
*/
- private Long is_not_downloadable;
+ private Integer isNotDownloadable;
/**
* 是否隐藏生成信息
*/
- private Long hide_gen_info;
+ private Integer hideGenInfo;
/**
* 图片标题(最多30字)
*/
- private Long title;
+ private String title;
/**
* 图片标签(多个,切割)
*/
- private Long tags;
+ private String tags;
/**
* 描述信息(最多500)
*/
- private Long description;
+ private String description;
/**
- * 删除标志(0代表存在 2代表删除)
+ * 在线生成数
*/
- private Long del_flag;
+ private Integer onlineGenNum;
+ /**
+ * 下载数
+ */
+ private Integer downloadNum;
+ /**
+ * 返图数
+ */
+ private Integer returnNum;
+ /**
+ * 点赞数
+ */
+ private Integer likeNum;
+
+ /**
+ * 状态
+ */
+ private Integer status;
}
diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/domain/ModelImageComment.java b/mcwl-resource/src/main/java/com/mcwl/resource/domain/ModelImageComment.java
new file mode 100644
index 0000000..e51109c
--- /dev/null
+++ b/mcwl-resource/src/main/java/com/mcwl/resource/domain/ModelImageComment.java
@@ -0,0 +1,45 @@
+package com.mcwl.resource.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("model_image_comment")
+public class ModelImageComment extends BaseEntity {
+
+ @TableId
+ private Long id;
+
+ /**
+ * 用户id
+ */
+ private Long userId;
+
+ /**
+ * 图片id
+ */
+ private Long modelImageId;
+
+ /**
+ * 评论内容
+ */
+ private String content;
+
+ /**
+ * 父评论id
+ */
+ private Long parentId;
+
+ /**
+ * 点赞数
+ */
+ private Integer likeNum;
+
+}
diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/domain/ModelImageCommentLike.java b/mcwl-resource/src/main/java/com/mcwl/resource/domain/ModelImageCommentLike.java
new file mode 100644
index 0000000..d1c8ec1
--- /dev/null
+++ b/mcwl-resource/src/main/java/com/mcwl/resource/domain/ModelImageCommentLike.java
@@ -0,0 +1,30 @@
+package com.mcwl.resource.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;
+
+import java.util.Date;
+
+/**
+ * 图片评论点赞
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("model_image_comment_like")
+public class ModelImageCommentLike extends BaseEntity {
+
+ @TableId
+ private Long id;
+
+ /**
+ * 用户id
+ */
+ private Long userId;
+
+ private Long modelImageCommentId;
+
+
+}
diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/domain/ModelImageLike.java b/mcwl-resource/src/main/java/com/mcwl/resource/domain/ModelImageLike.java
new file mode 100644
index 0000000..0384e56
--- /dev/null
+++ b/mcwl-resource/src/main/java/com/mcwl/resource/domain/ModelImageLike.java
@@ -0,0 +1,35 @@
+package com.mcwl.resource.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.mcwl.common.core.domain.BaseEntity;
+import lombok.*;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 图片点赞表
+ */
+
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class ModelImageLike extends BaseEntity {
+
+ @TableId
+ private Long id;
+
+ /**
+ * 用户id
+ */
+ private Long userId;
+
+ /**
+ * 图片id
+ */
+ private Long modelImageId;
+
+}
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
new file mode 100644
index 0000000..1499307
--- /dev/null
+++ b/mcwl-resource/src/main/java/com/mcwl/resource/domain/dto/ModelImageRes.java
@@ -0,0 +1,45 @@
+package com.mcwl.resource.domain.dto;
+
+import lombok.Builder;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+public class ModelImageRes {
+ /**
+ * 图片地址(最多8张,切割)
+ */
+ @NotBlank(message = "图片地址不能为空")
+ private String imagePaths;
+ /**
+ * 是否添加水印
+ */
+ private Integer hasWatermark;
+ /**
+ * 是否会员下载
+ */
+ private Integer isMemberDownload;
+ /**
+ * 是否不可下载
+ */
+ private Integer isNotDownloadable;
+ /**
+ * 是否隐藏生成信息
+ */
+ private Integer hideGenInfo;
+ /**
+ * 图片标题(最多30字)
+ */
+ @NotBlank(message = "图片标题不能为空")
+ private String title;
+ /**
+ * 图片标签(多个,切割)
+ */
+ private String tags;
+ /**
+ * 描述信息(最多500)
+ */
+ private String description;
+
+}
diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/mapper/ModelImageCommentLikeMapper.java b/mcwl-resource/src/main/java/com/mcwl/resource/mapper/ModelImageCommentLikeMapper.java
new file mode 100644
index 0000000..4d5137a
--- /dev/null
+++ b/mcwl-resource/src/main/java/com/mcwl/resource/mapper/ModelImageCommentLikeMapper.java
@@ -0,0 +1,10 @@
+package com.mcwl.resource.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mcwl.resource.domain.ModelImageComment;
+import com.mcwl.resource.domain.ModelImageCommentLike;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ModelImageCommentLikeMapper extends BaseMapper {
+}
diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/mapper/ModelImageCommentMapper.java b/mcwl-resource/src/main/java/com/mcwl/resource/mapper/ModelImageCommentMapper.java
new file mode 100644
index 0000000..a883ace
--- /dev/null
+++ b/mcwl-resource/src/main/java/com/mcwl/resource/mapper/ModelImageCommentMapper.java
@@ -0,0 +1,10 @@
+package com.mcwl.resource.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mcwl.resource.domain.ModelImage;
+import com.mcwl.resource.domain.ModelImageComment;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ModelImageCommentMapper extends BaseMapper {
+}
diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/mapper/ModelImageLikeMapper.java b/mcwl-resource/src/main/java/com/mcwl/resource/mapper/ModelImageLikeMapper.java
new file mode 100644
index 0000000..3c4bb13
--- /dev/null
+++ b/mcwl-resource/src/main/java/com/mcwl/resource/mapper/ModelImageLikeMapper.java
@@ -0,0 +1,11 @@
+package com.mcwl.resource.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mcwl.resource.domain.ModelImage;
+import com.mcwl.resource.domain.ModelImageLike;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ModelImageLikeMapper extends BaseMapper {
+ ModelImageLike getLikeImage(Long userId, Long imageId);
+}
diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/mapper/ModelImageMapper.java b/mcwl-resource/src/main/java/com/mcwl/resource/mapper/ModelImageMapper.java
new file mode 100644
index 0000000..76579d0
--- /dev/null
+++ b/mcwl-resource/src/main/java/com/mcwl/resource/mapper/ModelImageMapper.java
@@ -0,0 +1,9 @@
+package com.mcwl.resource.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mcwl.resource.domain.ModelImage;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ModelImageMapper extends BaseMapper {
+}
diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/service/ModelImageCommentLikeService.java b/mcwl-resource/src/main/java/com/mcwl/resource/service/ModelImageCommentLikeService.java
new file mode 100644
index 0000000..55e8313
--- /dev/null
+++ b/mcwl-resource/src/main/java/com/mcwl/resource/service/ModelImageCommentLikeService.java
@@ -0,0 +1,9 @@
+package com.mcwl.resource.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mcwl.resource.domain.ModelImageComment;
+import com.mcwl.resource.domain.ModelImageCommentLike;
+
+
+public interface ModelImageCommentLikeService extends IService {
+}
diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/service/ModelImageCommentService.java b/mcwl-resource/src/main/java/com/mcwl/resource/service/ModelImageCommentService.java
new file mode 100644
index 0000000..e1ad5b2
--- /dev/null
+++ b/mcwl-resource/src/main/java/com/mcwl/resource/service/ModelImageCommentService.java
@@ -0,0 +1,9 @@
+package com.mcwl.resource.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mcwl.resource.domain.ModelImage;
+import com.mcwl.resource.domain.ModelImageComment;
+
+
+public interface ModelImageCommentService extends IService {
+}
diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/service/ModelImageLikeService.java b/mcwl-resource/src/main/java/com/mcwl/resource/service/ModelImageLikeService.java
new file mode 100644
index 0000000..6a34b9c
--- /dev/null
+++ b/mcwl-resource/src/main/java/com/mcwl/resource/service/ModelImageLikeService.java
@@ -0,0 +1,11 @@
+package com.mcwl.resource.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mcwl.resource.domain.ModelImage;
+import com.mcwl.resource.domain.ModelImageLike;
+
+
+public interface ModelImageLikeService extends IService {
+
+ void like(Long imageId);
+}
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
new file mode 100644
index 0000000..43550fb
--- /dev/null
+++ b/mcwl-resource/src/main/java/com/mcwl/resource/service/ModelImageService.java
@@ -0,0 +1,12 @@
+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.resource.domain.ModelImage;
+import com.mcwl.resource.domain.ModelProduct;
+import com.mcwl.resource.domain.vo.MallProductVo;
+
+
+public interface ModelImageService extends IService {
+}
diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/ModelImageCommentLikeServiceImpl.java b/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/ModelImageCommentLikeServiceImpl.java
new file mode 100644
index 0000000..d347426
--- /dev/null
+++ b/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/ModelImageCommentLikeServiceImpl.java
@@ -0,0 +1,15 @@
+package com.mcwl.resource.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mcwl.resource.domain.ModelImageComment;
+import com.mcwl.resource.domain.ModelImageCommentLike;
+import com.mcwl.resource.mapper.ModelImageCommentLikeMapper;
+import com.mcwl.resource.mapper.ModelImageCommentMapper;
+import com.mcwl.resource.service.ModelImageCommentLikeService;
+import com.mcwl.resource.service.ModelImageCommentService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class ModelImageCommentLikeServiceImpl extends ServiceImpl implements ModelImageCommentLikeService {
+
+}
diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/ModelImageCommentServiceImpl.java b/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/ModelImageCommentServiceImpl.java
new file mode 100644
index 0000000..c35b923
--- /dev/null
+++ b/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/ModelImageCommentServiceImpl.java
@@ -0,0 +1,15 @@
+package com.mcwl.resource.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mcwl.resource.domain.ModelImage;
+import com.mcwl.resource.domain.ModelImageComment;
+import com.mcwl.resource.mapper.ModelImageCommentMapper;
+import com.mcwl.resource.mapper.ModelImageMapper;
+import com.mcwl.resource.service.ModelImageCommentService;
+import com.mcwl.resource.service.ModelImageService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class ModelImageCommentServiceImpl extends ServiceImpl implements ModelImageCommentService {
+
+}
diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/ModelImageLikeServiceImpl.java b/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/ModelImageLikeServiceImpl.java
new file mode 100644
index 0000000..14fa2f3
--- /dev/null
+++ b/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/ModelImageLikeServiceImpl.java
@@ -0,0 +1,63 @@
+package com.mcwl.resource.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mcwl.common.core.domain.AjaxResult;
+import com.mcwl.common.exception.ServiceException;
+import com.mcwl.common.utils.SecurityUtils;
+import com.mcwl.resource.domain.ModelImage;
+import com.mcwl.resource.domain.ModelImageLike;
+import com.mcwl.resource.mapper.ModelImageLikeMapper;
+import com.mcwl.resource.mapper.ModelImageMapper;
+import com.mcwl.resource.service.ModelImageLikeService;
+import com.mcwl.resource.service.ModelImageService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.Objects;
+
+@Service
+@RequiredArgsConstructor
+public class ModelImageLikeServiceImpl extends ServiceImpl implements ModelImageLikeService {
+
+ private final ModelImageMapper modelImageMapper;
+
+ @Override
+ @Transactional
+ public void like(Long imageId) {
+ ModelImage modelImage = modelImageMapper.selectById(imageId);
+ if (Objects.isNull(modelImage)) {
+ throw new ServiceException("该图片不存在或已下架");
+ }
+ Long userId = SecurityUtils.getUserId();
+ ModelImageLike modelImageLike = baseMapper.getLikeImage(userId, imageId);
+ if (Objects.nonNull(modelImageLike)) {
+ if (Objects.equals(modelImageLike.getDelFlag(), "0")) {
+ modelImageLike.setDelFlag("1");
+ modelImage.setLikeNum(modelImage.getLikeNum() - 1);
+ } else {
+ modelImageLike.setDelFlag("0");
+ modelImage.setLikeNum(modelImage.getLikeNum() + 1);
+ }
+ // 更新点赞记录
+ baseMapper.updateById(modelImageLike);
+ // 更新图片点赞数
+ modelImageMapper.updateById(modelImage);
+ return;
+ }
+
+ // 添加点赞记录
+ modelImageLike = new ModelImageLike();
+ modelImageLike.setUserId(userId);
+ modelImageLike.setModelImageId(imageId);
+ modelImageLike.setCreateBy(SecurityUtils.getUsername());
+ modelImageLike.setUpdateBy(SecurityUtils.getUsername());
+ modelImageLike.setUpdateTime(new Date());
+ baseMapper.insert(modelImageLike);
+
+ // 更新图片点赞数
+ modelImage.setLikeNum(modelImage.getLikeNum() + 1);
+ modelImageMapper.updateById(modelImage);
+ }
+}
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
new file mode 100644
index 0000000..0aca774
--- /dev/null
+++ b/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/ModelImageServiceImpl.java
@@ -0,0 +1,25 @@
+package com.mcwl.resource.service.impl;
+
+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.utils.SecurityUtils;
+import com.mcwl.resource.domain.MallProductLike;
+import com.mcwl.resource.domain.ModelImage;
+import com.mcwl.resource.domain.ModelProduct;
+import com.mcwl.resource.domain.vo.MallProductVo;
+import com.mcwl.resource.mapper.MallProductLikeMapper;
+import com.mcwl.resource.mapper.ModelImageMapper;
+import com.mcwl.resource.service.MallProductLikeService;
+import com.mcwl.resource.service.MallProductService;
+import com.mcwl.resource.service.ModelImageService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+@Service
+public class ModelImageServiceImpl extends ServiceImpl implements ModelImageService {
+
+}
diff --git a/mcwl-resource/src/main/resources/mapper/resource/ModelImageLikeMapper.xml b/mcwl-resource/src/main/resources/mapper/resource/ModelImageLikeMapper.xml
new file mode 100644
index 0000000..c960a63
--- /dev/null
+++ b/mcwl-resource/src/main/resources/mapper/resource/ModelImageLikeMapper.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id,
+ user_id,
+ model_image_id,
+ create_by,
+ create_time,
+ update_by,
+ update_time,
+ del_flag,
+ remark
+ from model_image_like
+
+
+
+