diff --git a/mcwl-admin/pom.xml b/mcwl-admin/pom.xml index 5a751d5..ef9109d 100644 --- a/mcwl-admin/pom.xml +++ b/mcwl-admin/pom.xml @@ -24,6 +24,17 @@ 0.4.7 + + + + + + com.alipay.sdk + alipay-sdk-java + 4.40.30.ALL + + + com.alipay.sdk alipay-easysdk diff --git a/mcwl-admin/src/main/java/com/mcwl/McWlApplication.java b/mcwl-admin/src/main/java/com/mcwl/McWlApplication.java index 1cf52e3..e7c3b73 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; /** diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/comment/CommentController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/comment/CommentController.java new file mode 100644 index 0000000..83d8d28 --- /dev/null +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/comment/CommentController.java @@ -0,0 +1,77 @@ +//package com.mcwl.web.controller.comment; +// +// +//import com.mcwl.comment.domain.ProductCommentConditionEntity; +//import com.mcwl.comment.domain.ProductCommentEntity; +//import com.mcwl.comment.service.impl.CommentServiceImpl; +//import com.mcwl.common.utils.ResponsePageEntity; +//import com.mcwl.resource.domain.MallProduct; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.web.bind.annotation.*; +// +//import javax.validation.constraints.NotNull; +//import java.util.List; +// +///** +// * @Author:ChenYan +// * @Project:McWl +// * @Package:com.mcwl.web.controller.comment +// * @Filename:CommentController +// * @Description TODO +// * @Date:2025/1/4 18:56 +// */ +//@RestController +//@RequestMapping("/comment") +//public class CommentController { +// +// @Autowired +// private CommentServiceImpl commentService; +// +// /** +// * 通过id查询商品评论信息 +// * +// * @param id 系统ID +// * @return 商品评论信息 +// */ +// @GetMapping("/findById") +// public MallProduct findById(Long id) { +// return commentService.findById(id); +// } +// +// +// +// /** +// * 添加商品评论 +// * +// * @param productCommentEntity 商品评论实体 +// * @return 影响行数 +// */ +// @PostMapping("/insert") +// public int insert(@RequestBody ProductCommentEntity productCommentEntity) { +// return commentService.insert(productCommentEntity); +// } +// +// /** +// * 修改商品评论 +// * +// * @param productCommentEntity 商品评论实体 +// * @return 影响行数 +// */ +// @PostMapping("/update") +// public int update(@RequestBody ProductCommentEntity productCommentEntity) { +// return commentService.update(productCommentEntity); +// } +// +// /** +// * 批量删除商品评论 +// * +// * @param ids 商品评论ID集合 +// * @return 影响行数 +// */ +// @PostMapping("/deleteByIds") +// public int deleteByIds(@RequestBody @NotNull List ids) { +// return commentService.deleteByIds(ids); +// } +// +// +//} diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/MemberController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/MemberController.java index 602986a..9a384bd 100644 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/MemberController.java +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/MemberController.java @@ -111,7 +111,7 @@ public class MemberController { return AjaxResult.warn("用户不存在"); } - Member member = memberService.rechargePoints(userId, amount * 10); + Member member = memberService.rechargePoints(userId, amount * 100); // 返回充值积分 if (!Optional.ofNullable(member).isPresent()) { 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 733770e..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,11 +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.domain.MallProduct; 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; @@ -32,7 +44,7 @@ import java.util.concurrent.TimeUnit; * 支付宝支付 */ @Component - +@Slf4j public class AliPayIntegration { @Autowired @@ -50,6 +62,9 @@ public class AliPayIntegration { @Autowired private ISysUserService sysUserService; + @Autowired + private AliConfig aliConfig; + public AliPayIntegration(Config config) { Factory.setOptions(config); @@ -63,38 +78,38 @@ public class AliPayIntegration { * @return 二维码url * @throws Exception */ - public String orderPay(OrderTradeDto orderTradeDto) throws Exception { - Integer productId = orderTradeDto.getProductId(); - if (!Optional.ofNullable(productId).isPresent()) { - throw new ServiceException("mallProductId不能为空"); - } - - MallProduct mallProduct = mallProductService.getById(productId); - if (!Optional.ofNullable(mallProduct).isPresent()) { - throw new ServiceException("mallProduct不存在"); - } - - // 设置orderTrade信息 - OrderTrade tradeEntity = new OrderTrade(); - BeanUtil.copyProperties(orderTradeDto, tradeEntity); - tradeEntity.setCode(UUID.randomUUID().toString(true).substring(0, 30)); - tradeEntity.setUserId(SecurityUtils.getUserId()); - tradeEntity.setUserName(SecurityUtils.getUsername()); - tradeEntity.setProductName(mallProduct.getProductName()); - - //调用支付宝的接口 - AlipayTradePrecreateResponse payResponse = Factory.Payment.FaceToFace() - .preCreate(mallProduct.getProductName(), - tradeEntity.getCode() + "_product", - orderTradeDto.getPaymentAmount().toString()); - // 缓存到redis - redisCache.setCacheObject(tradeEntity.getCode() + "_product", JSONUtil.toJsonStr(tradeEntity), 3, TimeUnit.MINUTES); -// AlipayTradePrecreateResponse payResponse = Factory.Payment.FaceToFace().preCreate("订单主题:Mac笔记本", "LS123qwe123", "19999"); - //参照官方文档响应示例,解析返回结果 - String httpBodyStr = payResponse.getHttpBody(); - JSONObject jsonObject = JSONObject.parseObject(httpBodyStr); - return jsonObject.getJSONObject("alipay_trade_precreate_response").get("qr_code").toString(); - } +// public String orderPay(OrderTradeDto orderTradeDto) throws Exception { +// Integer productId = orderTradeDto.getProductId(); +// if (!Optional.ofNullable(productId).isPresent()) { +// throw new ServiceException("mallProductId不能为空"); +// } +// +// MallProduct mallProduct = mallProductService.getById(productId); +// if (!Optional.ofNullable(mallProduct).isPresent()) { +// throw new ServiceException("mallProduct不存在"); +// } +// +// // 设置orderTrade信息 +// OrderTrade tradeEntity = new OrderTrade(); +// BeanUtil.copyProperties(orderTradeDto, tradeEntity); +// tradeEntity.setCode(UUID.randomUUID().toString(true).substring(0, 30)); +// tradeEntity.setUserId(SecurityUtils.getUserId()); +// tradeEntity.setUserName(SecurityUtils.getUsername()); +// tradeEntity.setProductName(mallProduct.getProductName()); +// +// //调用支付宝的接口 +// AlipayTradePrecreateResponse payResponse = Factory.Payment.FaceToFace() +// .preCreate(mallProduct.getProductName(), +// tradeEntity.getCode() + "_product", +// orderTradeDto.getPaymentAmount().toString()); +// // 缓存到redis +// redisCache.setCacheObject(tradeEntity.getCode() + "_product", JSONUtil.toJsonStr(tradeEntity), 3, TimeUnit.MINUTES); +//// AlipayTradePrecreateResponse payResponse = Factory.Payment.FaceToFace().preCreate("订单主题:Mac笔记本", "LS123qwe123", "19999"); +// //参照官方文档响应示例,解析返回结果 +// String httpBodyStr = payResponse.getHttpBody(); +// JSONObject jsonObject = JSONObject.parseObject(httpBodyStr); +// return jsonObject.getJSONObject("alipay_trade_precreate_response").get("qr_code").toString(); +// } /** @@ -173,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/pay/AliPay/OrderTradeController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/pay/AliPay/OrderTradeController.java index 918f87b..2aada84 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 @@ -118,9 +118,9 @@ public class OrderTradeController extends BaseController { String type = orderTradeDto.getType(); - if ("member".equals(type)) { + if ("member".equalsIgnoreCase(type)) { qrUrl = aliPayIntegration.memberPay(orderTradeDto); - } else if ("points".equals(type)) { + } else if ("points".equalsIgnoreCase(type)) { qrUrl = aliPayIntegration.pointsPay(orderTradeDto.getPaymentAmount()); } diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/pay/WxPay/WxPayController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/pay/WxPay/WxPayController.java new file mode 100644 index 0000000..ec2efe6 --- /dev/null +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/pay/WxPay/WxPayController.java @@ -0,0 +1,65 @@ +package com.mcwl.web.controller.pay.WxPay; + +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.mcwl.web.controller.pay.WxPay.util.PayUtil; +import com.wechat.pay.contrib.apache.httpclient.util.AesUtil; +import org.springframework.web.bind.annotation.*; + +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; + +/** + * 微信支付 + * + * @author DaiZibo + * @date 2025/1/6 + * @apiNote + */ + + +@RestController +@RequestMapping(value = "/wx/pay") +public class WxPayController { + + /** + * 预支付下单 + * + * @param orderSn 订单号 + * @param total 分 + * @param description 描述 + */ + @GetMapping(value = "/getPay") + public String getPay(String orderSn, int total, String description) { + PayUtil payUtil = new PayUtil(); + try { + return payUtil.requestwxChatPay(orderSn, total, description, "oYgFI91D00GpCwccdnKDR4KNxI4k"); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + // 支付回调 + @PostMapping(value = "/returnNotify") + public Map returnNotify(@RequestBody JSONObject jsonObject) { + // v3 私钥 + String key = "xxxxx"; + String json = jsonObject.toString(); + String associated_data = (String) JSONUtil.getByPath(JSONUtil.parse(json), "resource.associated_data"); + String ciphertext = (String) JSONUtil.getByPath(JSONUtil.parse(json), "resource.ciphertext"); + String nonce = (String) JSONUtil.getByPath(JSONUtil.parse(json), "resource.nonce"); + try { + String decryptData = new AesUtil(key.getBytes(StandardCharsets.UTF_8)).decryptToString(associated_data.getBytes(StandardCharsets.UTF_8), nonce.getBytes(StandardCharsets.UTF_8), ciphertext); + System.out.println("decryptData = " + decryptData); + //TODO 业务校验 + } catch (Exception e) { + e.printStackTrace(); + } + HashMap stringStringHashMap = new HashMap<>(); + stringStringHashMap.put("code", "200"); + stringStringHashMap.put("message", "返回成功"); + // 返回这个说明应答成功 + return stringStringHashMap; + } +} diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/MallProductLikeController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/MallProductLikeController.java index 50e18fd..abcca5c 100644 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/MallProductLikeController.java +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/MallProductLikeController.java @@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.*; * @apiNote */ -@RequestMapping("like") +@RequestMapping("/like") @RestController public class MallProductLikeController { 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..37d5f20 --- /dev/null +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/ModelImageController.java @@ -0,0 +1,85 @@ +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.ModelImageCommentLike; +import com.mcwl.resource.domain.ModelImageLike; +import com.mcwl.resource.domain.dto.ModelImageCommentRes; +import com.mcwl.resource.domain.dto.ModelImageRes; +import com.mcwl.resource.service.ModelImageCommentLikeService; +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; + + private final ModelImageCommentLikeService modelImageCommentLikeService; + + + /** + * 图片上传 + */ + @GetMapping("/upload") + public AjaxResult upload(MultipartFile file) { + + return AjaxResult.success("上传成功", OssUtil.uploadMultipartFile(file)); + + } + + + /** + * 图片发布 + */ + @PostMapping("/publish") + public AjaxResult publish(@RequestBody ModelImageRes modelImageRes) { + modelImageService.publish(modelImageRes); + return AjaxResult.success(); + } + + /** + * 图片点赞/取消 + */ + @GetMapping("/imageLike/{imageId}") + public AjaxResult like(@PathVariable Long imageId) { + modelImageLikeService.like(imageId); + return AjaxResult.success(); + } + + + /** + * 图片评论发布 + */ + @PostMapping("/comment") + public AjaxResult comment(@RequestBody ModelImageCommentRes modelImageCommentRes) { + modelImageService.comment(modelImageCommentRes); + return AjaxResult.success(); + } + + /** + * 图片评论点赞/取消 + */ + @GetMapping("/commentLike/{commentId}") + public AjaxResult commentLike(@PathVariable Long commentId) { + modelImageCommentLikeService.like(commentId); + return AjaxResult.error(); + } + + + + +} diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/WorkFlowController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/WorkFlowController.java new file mode 100644 index 0000000..7442adf --- /dev/null +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/WorkFlowController.java @@ -0,0 +1,73 @@ +package com.mcwl.web.controller.resource; + +import com.mcwl.common.core.controller.BaseController; +import com.mcwl.common.core.domain.AjaxResult; +import com.mcwl.web.controller.common.OssUtil; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + + +/** + * 工作流 + * @Author:ChenYan + * @Project:McWl + * @Package:com.mcwl.web.controller.resource + * @Filename:MallProductController + * @Description 商品 + * @Date:2024/12/31 10:48 + */ + +@RestController +@RequestMapping("/WorkFlow") +public class WorkFlowController extends BaseController { + + + + /*** + * + * 图片 + * @param file + * @return + */ + @PostMapping("/file") + public AjaxResult Malifile(@RequestParam MultipartFile file){ + + String s = OssUtil.uploadMultipartFile(file); + return AjaxResult.success(s); + } + + + /*** + * + * zip + * @param file + * @return + */ + @PostMapping("/zipUrlFile") + public AjaxResult zipUrlFile(@RequestParam MultipartFile file){ + String s = OssUtil.uploadMultipartFile(file); + return AjaxResult.success(s); + } + + + + + /*** + * + * 下载zip + * @param file + * @return + */ + @PostMapping("/zipUrl") + public AjaxResult zipUrl(@RequestParam MultipartFile file){ + String s = OssUtil.uploadMultipartFile(file); + return AjaxResult.success(s); + } + + +// @PostMapping("/add") +// public AjaxResult +} diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/system/SysAdviceController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/system/SysAdviceController.java new file mode 100644 index 0000000..31dde5b --- /dev/null +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/system/SysAdviceController.java @@ -0,0 +1,57 @@ +package com.mcwl.web.controller.system; + +import com.mcwl.common.core.domain.AjaxResult; +import com.mcwl.system.domain.vo.AdviceVo; +import com.mcwl.system.service.ISysAdviceService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequestMapping("system/advice") +@RequiredArgsConstructor +public class SysAdviceController { + + private final ISysAdviceService sysAdviceService; + + /** + * 根据当前用户获取新消息提醒 + */ + @GetMapping("getUserNewMsg") + public AjaxResult getUserNewMsg() { + List adviceVo = sysAdviceService.getUserNewMsg(); + return AjaxResult.success(adviceVo); + } + + /** + * 根据当前用户获取系统公告 + */ + @GetMapping("getUserSystemNotice") + public AjaxResult getUserSystemNotice() { + List adviceVo = sysAdviceService.getUserSystemNotice(); + return AjaxResult.success(adviceVo); + } + + /** + * 根据当前用户获取所有消息 + */ + @GetMapping("getUserAllMsg") + public AjaxResult getUserAllMsg() { + List adviceVo = sysAdviceService.getUserAllMsg(); + return AjaxResult.success(adviceVo); + } + + /** + * 获取所有消息 + */ + @GetMapping("getAllMsg") + public AjaxResult getAllMsg() { + List adviceVo = sysAdviceService.getAllMsg(); + return AjaxResult.success(adviceVo); + } + + +} diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/system/SysUserController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/system/SysUserController.java index 236581e..77ed1a6 100644 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/system/SysUserController.java +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/system/SysUserController.java @@ -269,4 +269,16 @@ public class SysUserController extends BaseController userService.updateUserInfo(sysUser); return AjaxResult.success("修改成功"); } + + /** + * 实名认证 + * @param sysUser + * @return + */ + @PostMapping("/updateIdCard") + public AjaxResult updateIdCard(@RequestBody SysUser sysUser){ + + return userService.updateIdCard(sysUser); + } + } diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/system/WXController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/system/WXController.java index 199c60c..014be8a 100644 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/system/WXController.java +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/system/WXController.java @@ -14,12 +14,13 @@ import com.mcwl.system.domain.SysUserThirdAccount; import com.mcwl.system.service.ISysUserService; import com.mcwl.system.service.ISysUserThirdAccountService; import com.mcwl.system.service.IWXService; -import com.mcwl.web.controller.common.OssUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.io.IOException; @@ -59,13 +60,6 @@ public class WXController { @Resource private SysPermissionService permissionService; - @Anonymous - @PostMapping("/test") - public AjaxResult test(@RequestParam MultipartFile file){ - - String s = OssUtil.uploadMultipartFile(file); - return AjaxResult.success(s); - } /** * 扫码登录用uuid生成 diff --git a/mcwl-admin/src/main/resources/application.yml b/mcwl-admin/src/main/resources/application.yml index f36a688..2d9736b 100644 --- a/mcwl-admin/src/main/resources/application.yml +++ b/mcwl-admin/src/main/resources/application.yml @@ -183,5 +183,5 @@ mall: appId: 9021000135682614 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= publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApHkjwHnoUnZuqbas+ZputyWIfU2WKBFKd+wFwlCZytpQhVA16CGAMCGpgjxUPpqbmOtPy74y0wxmDHB9IaYOVsVmi2SAl1IqfxwUSIllbdvbjBvZFAIQlPa8U/zHJPgdGNHDt/Bwqp5uB0OkcGLB9PYyAXBEKiu6zdTsiZloUrPwgnBRJ0iNHYiWo/oOYD9KfopLA+D1nQjqq8m3ShZe46ecMo6ZCHtQI/HtgL/EGga5KY2zOUi0Wwviu8w79RjjzfdsDkzu5VnBdaSru4awDyiF9nAF+uPgA4ZOdLKkpoEANwuIorDW8tT69Gwh+mYx9sDJMxJf7XOekdPbymomiwIDAQAB - notifyUrl: https://702bc39c.r27.cpolar.top/web/pay/notify + notifyUrl: https://253d7236.r27.cpolar.top/web/pay/notify gatewayUrl: https://openapi-sandbox.dl.alipaydev.com/gateway.do diff --git a/mcwl-common/pom.xml b/mcwl-common/pom.xml index 84f00c1..f56a827 100644 --- a/mcwl-common/pom.xml +++ b/mcwl-common/pom.xml @@ -341,7 +341,26 @@ 3.5.0 - + + + + + + + org.apache.httpcomponents + httpclient + 4.2.1 + + + org.apache.httpcomponents + httpcore + 4.2.1 + + + commons-lang + commons-lang + 2.6 + diff --git a/mcwl-common/src/main/java/com/mcwl/common/constant/CacheConstants.java b/mcwl-common/src/main/java/com/mcwl/common/constant/CacheConstants.java index aa05d09..8182e6b 100644 --- a/mcwl-common/src/main/java/com/mcwl/common/constant/CacheConstants.java +++ b/mcwl-common/src/main/java/com/mcwl/common/constant/CacheConstants.java @@ -47,5 +47,10 @@ public class CacheConstants */ public static final String WX_OPENID_KEY = "wx_openid:"; + /** + * 类型 + */ public static final String WE_CHAT = "we_chat"; + + public static final String ID_CARD_COUNT = "id_card_count:"; } diff --git a/mcwl-common/src/main/java/com/mcwl/common/core/domain/entity/SysUser.java b/mcwl-common/src/main/java/com/mcwl/common/core/domain/entity/SysUser.java index c949b91..ac6ea89 100644 --- a/mcwl-common/src/main/java/com/mcwl/common/core/domain/entity/SysUser.java +++ b/mcwl-common/src/main/java/com/mcwl/common/core/domain/entity/SysUser.java @@ -58,9 +58,6 @@ public class SysUser extends BaseEntity /** 密码 */ private String password; - /** 钱包 */ - private Long wallet; - /** 帐号状态(0正常 1停用) */ @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用") private String status; @@ -98,6 +95,16 @@ public class SysUser extends BaseEntity /** 简介 */ private String brief; + /** + * 姓名 + */ + private String name; + + /** + * 身份证 + */ + private String idCard; + /** * 邀请人id */ @@ -108,6 +115,7 @@ public class SysUser extends BaseEntity */ private Double freePoints; + public SysUser() { @@ -241,6 +249,22 @@ public class SysUser extends BaseEntity return delFlag; } + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getIdCard() { + return idCard; + } + + public void setIdCard(String idCard) { + this.idCard = idCard; + } + public void setDelFlag(String delFlag) { this.delFlag = delFlag; @@ -324,7 +348,6 @@ public class SysUser extends BaseEntity this.brief = brief; } - public Long getInviterUserId() { return inviterUserId; } @@ -363,6 +386,10 @@ public class SysUser extends BaseEntity ", postIds=" + Arrays.toString(postIds) + ", roleId=" + roleId + ", brief='" + brief + '\'' + + ", name='" + name + '\'' + + ", idCard='" + idCard + '\'' + + ", inviterUserId=" + inviterUserId + + ", freePoints=" + freePoints + '}'; } } diff --git a/mcwl-common/src/main/java/com/mcwl/common/utils/HttpUtils.java b/mcwl-common/src/main/java/com/mcwl/common/utils/HttpUtils.java new file mode 100644 index 0000000..ee016fe --- /dev/null +++ b/mcwl-common/src/main/java/com/mcwl/common/utils/HttpUtils.java @@ -0,0 +1,328 @@ +package com.mcwl.common.utils; + +import org.apache.commons.lang.StringUtils; +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.HttpClient; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpDelete; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.conn.ClientConnectionManager; +import org.apache.http.conn.scheme.Scheme; +import org.apache.http.conn.scheme.SchemeRegistry; +import org.apache.http.conn.ssl.SSLSocketFactory; +import org.apache.http.entity.ByteArrayEntity; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.message.BasicNameValuePair; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.X509Certificate; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + + +/** + * 校验实名认证信息 + * @author DaiZibo + * @date 2025/1/8 + * @apiNote + */ + +public class HttpUtils { + + /** + * get + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @return + * @throws Exception + */ + public static HttpResponse doGet(String host, String path, String method, + Map headers, + Map querys) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpGet request = new HttpGet(buildUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + return httpClient.execute(request); + } + + /** + * post form + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param bodys + * @return + * @throws Exception + */ + public static HttpResponse doPost(String host, String path, String method, + Map headers, + Map querys, + Map bodys) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPost request = new HttpPost(buildUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (bodys != null) { + List nameValuePairList = new ArrayList(); + + for (String key : bodys.keySet()) { + nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key))); + } + UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, "utf-8"); + formEntity.setContentType("application/x-www-form-urlencoded; charset=UTF-8"); + request.setEntity(formEntity); + } + + return httpClient.execute(request); + } + + /** + * Post String + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param body + * @return + * @throws Exception + */ + public static HttpResponse doPost(String host, String path, String method, + Map headers, + Map querys, + String body) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPost request = new HttpPost(buildUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (StringUtils.isNotBlank(body)) { + request.setEntity(new StringEntity(body, "utf-8")); + } + + return httpClient.execute(request); + } + + /** + * Post stream + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param body + * @return + * @throws Exception + */ + public static HttpResponse doPost(String host, String path, String method, + Map headers, + Map querys, + byte[] body) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPost request = new HttpPost(buildUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (body != null) { + request.setEntity(new ByteArrayEntity(body)); + } + + return httpClient.execute(request); + } + + /** + * Put String + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param body + * @return + * @throws Exception + */ + public static HttpResponse doPut(String host, String path, String method, + Map headers, + Map querys, + String body) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPut request = new HttpPut(buildUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (StringUtils.isNotBlank(body)) { + request.setEntity(new StringEntity(body, "utf-8")); + } + + return httpClient.execute(request); + } + + /** + * Put stream + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param body + * @return + * @throws Exception + */ + public static HttpResponse doPut(String host, String path, String method, + Map headers, + Map querys, + byte[] body) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPut request = new HttpPut(buildUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (body != null) { + request.setEntity(new ByteArrayEntity(body)); + } + + return httpClient.execute(request); + } + + /** + * Delete + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @return + * @throws Exception + */ + public static HttpResponse doDelete(String host, String path, String method, + Map headers, + Map querys) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpDelete request = new HttpDelete(buildUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + return httpClient.execute(request); + } + + private static String buildUrl(String host, String path, Map querys) throws UnsupportedEncodingException { + StringBuilder sbUrl = new StringBuilder(); + sbUrl.append(host); + if (!StringUtils.isBlank(path)) { + sbUrl.append(path); + } + if (null != querys) { + StringBuilder sbQuery = new StringBuilder(); + for (Map.Entry query : querys.entrySet()) { + if (0 < sbQuery.length()) { + sbQuery.append("&"); + } + if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) { + sbQuery.append(query.getValue()); + } + if (!StringUtils.isBlank(query.getKey())) { + sbQuery.append(query.getKey()); + if (!StringUtils.isBlank(query.getValue())) { + sbQuery.append("="); + sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8")); + } + } + } + if (0 < sbQuery.length()) { + sbUrl.append("?").append(sbQuery); + } + } + + return sbUrl.toString(); + } + + private static HttpClient wrapClient(String host) { + HttpClient httpClient = new DefaultHttpClient(); + if (host.startsWith("https://")) { + sslClient(httpClient); + } + + return httpClient; + } + + private static void sslClient(HttpClient httpClient) { + try { + SSLContext ctx = SSLContext.getInstance("TLS"); + X509TrustManager tm = new X509TrustManager() { + + @Override + public X509Certificate[] getAcceptedIssuers() { + return null; + } + + @Override + public void checkClientTrusted(X509Certificate[] xcs, String str) { + + } + + @Override + public void checkServerTrusted(X509Certificate[] xcs, String str) { + + } + }; + ctx.init(null, new TrustManager[]{tm}, null); + SSLSocketFactory ssf = new SSLSocketFactory(ctx); + ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); + ClientConnectionManager ccm = httpClient.getConnectionManager(); + SchemeRegistry registry = ccm.getSchemeRegistry(); + registry.register(new Scheme("https", 443, ssf)); + } catch (KeyManagementException ex) { + throw new RuntimeException(ex); + } catch (NoSuchAlgorithmException ex) { + throw new RuntimeException(ex); + } + } + +} diff --git a/mcwl-common/src/main/java/com/mcwl/common/utils/VerifyCard.java b/mcwl-common/src/main/java/com/mcwl/common/utils/VerifyCard.java new file mode 100644 index 0000000..916afef --- /dev/null +++ b/mcwl-common/src/main/java/com/mcwl/common/utils/VerifyCard.java @@ -0,0 +1,55 @@ +package com.mcwl.common.utils; + +import org.apache.http.HttpResponse; +import org.apache.http.util.EntityUtils; + +import java.util.HashMap; +import java.util.Map; + +/** + * 身份证校验 + * + * @author DaiZibo + * @date 2025/1/8 + * @apiNote + */ +public class VerifyCard { + + public static String idCard(String name, String card) { + String host = "https://kzidcardv1.market.alicloudapi.com"; + String path = "/api-mall/api/id_card/check"; + String method = "POST"; + String appcode = "680661d47eb740bcb85472cec9774ecf"; + Map headers = new HashMap(); + //最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105 + headers.put("Authorization", "APPCODE " + appcode); + //根据API的要求,定义相对应的Content-Type + headers.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); + Map querys = new HashMap(); + Map bodys = new HashMap(); + bodys.put("name", name); + bodys.put("idcard", card); + + + try { + /** + * 重要提示如下: + * HttpUtils请从 + * https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java + * 下载 + * + * 相应的依赖请参照 + * https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/pom.xml + */ + HttpResponse response = HttpUtils.doPost(host, path, method, headers, querys, bodys); + System.out.println(response.toString()); + //获取response的body + //System.out.println(EntityUtils.toString(response.getEntity())); + return EntityUtils.toString(response.getEntity()); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/consumer/EmptyPointsRemindConsumer.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/consumer/EmptyPointsRemindConsumer.java index b54de54..0557381 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/consumer/EmptyPointsRemindConsumer.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/consumer/EmptyPointsRemindConsumer.java @@ -1,8 +1,14 @@ package com.mcwl.memberCenter.consumer; import com.mcwl.common.constant.QueueConstants; +import com.mcwl.common.core.domain.entity.SysUser; +import com.mcwl.common.utils.SecurityUtils; import com.mcwl.memberCenter.domain.Member; import com.mcwl.memberCenter.service.MemberService; +import com.mcwl.system.domain.SysAdvice; +import com.mcwl.system.domain.enums.AdviceEnum; +import com.mcwl.system.service.ISysAdviceService; +import com.mcwl.system.service.ISysUserService; import com.rabbitmq.client.Channel; import org.springframework.amqp.core.Message; import lombok.RequiredArgsConstructor; @@ -11,6 +17,7 @@ import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; import java.io.IOException; +import java.util.Date; /** * 积分消费者 @@ -20,16 +27,27 @@ import java.io.IOException; @RequiredArgsConstructor public class EmptyPointsRemindConsumer { - private final MemberService memberService; + private final ISysAdviceService sysAdviceService; + + private final ISysUserService sysUserService; /** * 积分清零提醒 */ @RabbitListener(queues = QueueConstants.EMPTY_POINTS_REMIND_QUEUE, ackMode = "MANUAL") - public void emptyPointsRemind(Member Member, Channel channel, Message message) { + public void emptyPointsRemind(Member member, Channel channel, Message message) { try { - // TODO 发送短信提醒用户积分即将清零 - log.info("获取到积分清零提醒的数据:{}", Member); + SysUser sysUser = sysUserService.selectUserByUserName("admin"); + SysAdvice sysAdvice = new SysAdvice(); + sysAdvice.setSenderId(sysUser.getUserId()); + sysAdvice.setReceiverId(member.getUserId()); + sysAdvice.setType(AdviceEnum.NEW_MESSAGE_REMIND); + sysAdvice.setTitle("积分清零提醒"); + sysAdvice.setContent("您的积分即将清零,请及时消费"); + sysAdvice.setCreateBy(sysUser.getUserName()); + sysAdvice.setUpdateBy(sysUser.getUserName()); + sysAdvice.setUpdateTime(new Date()); + sysAdviceService.save(sysAdvice); channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); } catch (Exception e) { log.error("处理积分清零提醒消息时出错: {}", e.getMessage(), e); diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/consumer/MemberBillingConsumer.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/consumer/MemberBillingConsumer.java index 02a0085..e39bd00 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/consumer/MemberBillingConsumer.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/consumer/MemberBillingConsumer.java @@ -1,7 +1,12 @@ package com.mcwl.memberCenter.consumer; import com.mcwl.common.constant.QueueConstants; +import com.mcwl.common.core.domain.entity.SysUser; import com.mcwl.memberCenter.domain.Member; +import com.mcwl.system.domain.SysAdvice; +import com.mcwl.system.domain.enums.AdviceEnum; +import com.mcwl.system.service.ISysAdviceService; +import com.mcwl.system.service.ISysUserService; import com.rabbitmq.client.Channel; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -19,6 +24,9 @@ import java.io.IOException; @RequiredArgsConstructor public class MemberBillingConsumer { + private final ISysAdviceService sysAdviceService; + + private final ISysUserService sysUserService; /** * 会员账单 @@ -27,7 +35,14 @@ public class MemberBillingConsumer { public void memberBillingQueue(Member member, Channel channel, Message message) { try { // TODO 发送短信提醒用户会员账单,如果支付成功,更新last_payment_date,并重新计算end_date(start_date + 1个月) - log.info("获取到会员账单的数据:{}", member); + SysUser sysUser = sysUserService.selectUserByUserName("admin"); + SysAdvice sysAdvice = new SysAdvice(); + sysAdvice.setSenderId(sysUser.getUserId()); + sysAdvice.setReceiverId(member.getUserId()); + sysAdvice.setType(AdviceEnum.NEW_MESSAGE_REMIND); + sysAdvice.setTitle("会员账单"); + sysAdvice.setContent("您的会员即将到期,请及时支付"); + sysAdviceService.save(sysAdvice); channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); } catch (Exception e) { log.error("处理会员账单消息时出错: {}", e.getMessage(), e); diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/impl/MemberServiceImpl.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/impl/MemberServiceImpl.java index f237821..92f79ad 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/impl/MemberServiceImpl.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/impl/MemberServiceImpl.java @@ -7,20 +7,14 @@ import com.mcwl.common.core.domain.AjaxResult; import com.mcwl.common.core.domain.entity.SysUser; import com.mcwl.common.exception.ServiceException; import com.mcwl.common.utils.SecurityUtils; -import com.mcwl.memberCenter.domain.MemberBenefit; -import com.mcwl.memberCenter.domain.MemberLevel; -import com.mcwl.memberCenter.domain.Member; -import com.mcwl.memberCenter.domain.Promotion; +import com.mcwl.memberCenter.domain.*; import com.mcwl.memberCenter.enums.MemberBenefitTypeEnum; import com.mcwl.memberCenter.enums.MemberEnum; import com.mcwl.memberCenter.enums.MemberPeriodicEnum; import com.mcwl.memberCenter.enums.PromotionEnum; import com.mcwl.memberCenter.mapper.MemberMapper; import com.mcwl.memberCenter.mapper.PromotionMapper; -import com.mcwl.memberCenter.service.MemberBenefitService; -import com.mcwl.memberCenter.service.MemberLevelService; -import com.mcwl.memberCenter.service.MemberService; -import com.mcwl.memberCenter.service.PromotionService; +import com.mcwl.memberCenter.service.*; import com.mcwl.system.service.ISysUserService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -41,6 +35,8 @@ public class MemberServiceImpl extends ServiceImpl impleme private final PromotionMapper promotionMapper; + private final MemberConsumeService memberConsumeService; + @Override public Member createUserMember(Long userId, Long memberLevelId, String paymentMethod, Long promotionId) { if (userId == null) { @@ -195,16 +191,19 @@ public class MemberServiceImpl extends ServiceImpl impleme throw new ServiceException("积分不足"); } + // 保存消费记录 + saveMemberConsume(consumePoints, userId, points); + // 先扣除会员的积分 if (member != null) { double mp = member.getPoints() - consumePoints; if (mp >= 0) { member.setPoints(mp); + consumePoints = 0.0; } else { member.setPoints(0D); consumePoints = consumePoints - memberPoints; } - member.setPoints(mp); baseMapper.updateById(member); } // consumePoints有剩余再扣除用户的积分 @@ -215,6 +214,18 @@ public class MemberServiceImpl extends ServiceImpl impleme } + private void saveMemberConsume(Double consumePoints, Long userId, double points) { + MemberConsume memberConsume = new MemberConsume(); + memberConsume.setUserId(userId); + memberConsume.setConsumePoints(consumePoints); + memberConsume.setRemainingPoints(points - consumePoints); + memberConsume.setConsumeTime(new Date()); + memberConsume.setCreateBy(SecurityUtils.getUsername()); + memberConsume.setUpdateBy(SecurityUtils.getUsername()); + memberConsume.setUpdateTime(new Date()); + memberConsumeService.save(memberConsume); + } + private List getUseUserMember(Long userId) { // startDate 小于等于当前时间、endDate 大于等于当前时间 // subscriptionStatus 不为 "过期" 或 "待支付" diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/task/UserMemberTask.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/task/UserMemberTask.java index a2dcadf..a02bc2d 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/task/UserMemberTask.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/task/UserMemberTask.java @@ -2,13 +2,17 @@ package com.mcwl.memberCenter.task; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.mcwl.common.constant.QueueConstants; +import com.mcwl.common.core.domain.entity.SysUser; import com.mcwl.memberCenter.domain.Member; import com.mcwl.memberCenter.enums.MemberEnum; import com.mcwl.memberCenter.service.MemberService; +import com.mcwl.system.service.ISysUserService; import lombok.RequiredArgsConstructor; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; @@ -19,6 +23,8 @@ public class UserMemberTask { private final MemberService memberService; + private final ISysUserService sysUserService; + private final RabbitTemplate rabbitTemplate; @@ -41,14 +47,23 @@ public class UserMemberTask { /** * 清空积分 每月月底前两天 */ + @Transactional public void emptyPointsTsk() { List memberList = memberService.getUseUserMember(); + List userIdList = new ArrayList<>(); + List sysUserList = new ArrayList<>(); if (memberList == null || memberList.isEmpty()) { return; } for (Member member : memberList) { member.setPoints(0.0); member.setUpdateTime(new Date()); + userIdList.add(member.getUserId()); + } + sysUserList = sysUserService.listByIds(userIdList); + for (SysUser sysUser : sysUserList) { + sysUser.setFreePoints(0.0); + sysUserService.updateUser(sysUser); } memberService.updateBatchById(memberList); } diff --git a/mcwl-pay/pom.xml b/mcwl-pay/pom.xml index 5dc7363..ae0612e 100644 --- a/mcwl-pay/pom.xml +++ b/mcwl-pay/pom.xml @@ -53,6 +53,12 @@ com.mcwl mcwl-system + + com.mcwl + mcwl-resource + 3.8.8 + compile + 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..95ebbf6 --- /dev/null +++ b/mcwl-pay/src/main/java/com/mcwl/pay/config/AliConfig.java @@ -0,0 +1,22 @@ +package com.mcwl.pay.config; + + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +@Data +@Configuration +@Component +public class AliConfig { + @Value("${mall.mgt.aliPayConfig.appId}") + private String appId; + @Value("${mall.mgt.aliPayConfig.privateKey}") + private String privateKey; + @Value("${mall.mgt.aliPayConfig.publicKey}") + private String publicKey; + @Value("${mall.mgt.aliPayConfig.gatewayUrl}") + private String gatewayUrl; +} diff --git a/mcwl-pay/src/main/java/com/mcwl/pay/domain/enums/OrderTypeEnum.java b/mcwl-pay/src/main/java/com/mcwl/pay/domain/enums/OrderTypeEnum.java deleted file mode 100644 index 89830e5..0000000 --- a/mcwl-pay/src/main/java/com/mcwl/pay/domain/enums/OrderTypeEnum.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.mcwl.pay.domain.enums; - -import lombok.AllArgsConstructor; -import lombok.Getter; - - -@Getter -@AllArgsConstructor -public enum OrderTypeEnum { - - POINTS("points"), - MEMBER("member"); - - private final String name; - -} diff --git a/mcwl-pay/src/main/java/com/mcwl/pay/service/impl/OrderTradeServiceImpl.java b/mcwl-pay/src/main/java/com/mcwl/pay/service/impl/OrderTradeServiceImpl.java index 10612f2..5957d7b 100644 --- a/mcwl-pay/src/main/java/com/mcwl/pay/service/impl/OrderTradeServiceImpl.java +++ b/mcwl-pay/src/main/java/com/mcwl/pay/service/impl/OrderTradeServiceImpl.java @@ -5,17 +5,27 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mcwl.common.core.domain.entity.SysUser; import com.mcwl.common.core.redis.RedisCache; import com.mcwl.common.domain.IdsParam; +import com.mcwl.common.utils.DateUtils; import com.mcwl.common.utils.StringUtils; +import com.mcwl.memberCenter.domain.RechargeRecord; +import com.mcwl.memberCenter.service.MemberService; +import com.mcwl.memberCenter.service.RechargeRecordService; +import com.mcwl.myInvitation.domain.Commission; +import com.mcwl.myInvitation.domain.Consume; +import com.mcwl.myInvitation.service.CommissionService; +import com.mcwl.myInvitation.service.ConsumeService; import com.mcwl.pay.domain.OrderTrade; -import com.mcwl.pay.domain.PaymentResult; -import com.mcwl.pay.domain.enums.PaymentStatus; import com.mcwl.pay.mapper.OrderTradeMapper; import com.mcwl.pay.service.OrderTradeService; +import com.mcwl.resource.domain.enums.OrderTypeEnum; +import com.mcwl.system.service.ISysUserService; +import com.mcwl.system.service.impl.SysUserServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.util.Collections; -import java.util.List; +import java.math.BigDecimal; +import java.util.*; /** * @Author:ChenYan @@ -36,12 +46,6 @@ public class OrderTradeServiceImpl extends ServiceImpl { + ModelImageCommentLike getLikeImageComment(Long userId, Long commentId); +} 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/mapper/WorkFlowMapper.java b/mcwl-resource/src/main/java/com/mcwl/resource/mapper/WorkFlowMapper.java new file mode 100644 index 0000000..b233fe7 --- /dev/null +++ b/mcwl-resource/src/main/java/com/mcwl/resource/mapper/WorkFlowMapper.java @@ -0,0 +1,18 @@ +package com.mcwl.resource.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.mcwl.resource.domain.WorkFlow; +import org.apache.ibatis.annotations.Mapper; + +/** + * 工作流 + * @author DaiZibo + * @date 2025/1/9 + * @apiNote + */ + +@Mapper +public interface WorkFlowMapper extends BaseMapper { + + +} diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/mapper/WorkFlowVersionMapper.java b/mcwl-resource/src/main/java/com/mcwl/resource/mapper/WorkFlowVersionMapper.java new file mode 100644 index 0000000..3a91407 --- /dev/null +++ b/mcwl-resource/src/main/java/com/mcwl/resource/mapper/WorkFlowVersionMapper.java @@ -0,0 +1,16 @@ +package com.mcwl.resource.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.mcwl.resource.domain.WorkFlowVersion; +import org.apache.ibatis.annotations.Mapper; + +/** + * 工作流版本 业务实现层 + * @author DaiZibo + * @date 2025/1/9 + * @apiNote + */ + +@Mapper +public interface WorkFlowVersionMapper 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..95f1fdc --- /dev/null +++ b/mcwl-resource/src/main/java/com/mcwl/resource/service/ModelImageCommentLikeService.java @@ -0,0 +1,11 @@ +package com.mcwl.resource.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.mcwl.resource.domain.ModelImageComment; +import com.mcwl.resource.domain.ModelImageCommentLike; +import com.mcwl.resource.domain.dto.ModelImageCommentRes; + + +public interface ModelImageCommentLikeService extends IService { + void like(Long commentId); +} 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..2e79d86 --- /dev/null +++ b/mcwl-resource/src/main/java/com/mcwl/resource/service/ModelImageService.java @@ -0,0 +1,26 @@ +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.dto.ModelImageCommentRes; +import com.mcwl.resource.domain.dto.ModelImageRes; +import com.mcwl.resource.domain.vo.MallProductVo; + + +public interface ModelImageService extends IService { + + /** + * 发布 + * @param modelImageRes 发布对象 + */ + void publish(ModelImageRes modelImageRes); + + /** + * 评论 + * @param modelImageCommentRes 评论对象 + */ + void comment(ModelImageCommentRes modelImageCommentRes); +} diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/service/WorkFlowService.java b/mcwl-resource/src/main/java/com/mcwl/resource/service/WorkFlowService.java new file mode 100644 index 0000000..3a60ffc --- /dev/null +++ b/mcwl-resource/src/main/java/com/mcwl/resource/service/WorkFlowService.java @@ -0,0 +1,11 @@ +package com.mcwl.resource.service; + +/** + * 工作流 业务层 + * @author DaiZibo + * @date 2025/1/9 + * @apiNote + */ + +public interface WorkFlowService { +} diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/service/WorkFlowVersionService.java b/mcwl-resource/src/main/java/com/mcwl/resource/service/WorkFlowVersionService.java new file mode 100644 index 0000000..da8fc1b --- /dev/null +++ b/mcwl-resource/src/main/java/com/mcwl/resource/service/WorkFlowVersionService.java @@ -0,0 +1,11 @@ +package com.mcwl.resource.service; + +/** + * 工作流版本 业务层 + * @author DaiZibo + * @date 2025/1/9 + * @apiNote + */ + +public interface WorkFlowVersionService { +} 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..1e7c014 --- /dev/null +++ b/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/ModelImageCommentLikeServiceImpl.java @@ -0,0 +1,66 @@ +package com.mcwl.resource.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.mcwl.common.exception.ServiceException; +import com.mcwl.common.utils.SecurityUtils; +import com.mcwl.resource.domain.ModelImage; +import com.mcwl.resource.domain.ModelImageComment; +import com.mcwl.resource.domain.ModelImageCommentLike; +import com.mcwl.resource.domain.ModelImageLike; +import com.mcwl.resource.domain.dto.ModelImageCommentRes; +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 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 ModelImageCommentLikeServiceImpl extends ServiceImpl implements ModelImageCommentLikeService { + + private final ModelImageCommentMapper modelImageCommentMapper; + + @Override + @Transactional + public void like(Long commentId) { + ModelImageComment modelImageComment = modelImageCommentMapper.selectById(commentId); + if (Objects.isNull(modelImageComment)) { + throw new ServiceException("该评论不存在"); + } + Long userId = SecurityUtils.getUserId(); + ModelImageCommentLike modelImageCommentLike = baseMapper.getLikeImageComment(userId, commentId); + if (Objects.nonNull(modelImageCommentLike)) { + if (Objects.equals(modelImageCommentLike.getDelFlag(), "0")) { + modelImageCommentLike.setDelFlag("1"); + modelImageComment.setLikeNum(modelImageComment.getLikeNum() - 1); + } else { + modelImageCommentLike.setDelFlag("0"); + modelImageComment.setLikeNum(modelImageComment.getLikeNum() + 1); + } + // 更新点赞记录 + baseMapper.updateById(modelImageCommentLike); + // 更新图片评论点赞数 + modelImageCommentMapper.updateById(modelImageComment); + return; + } + + // 添加点赞记录 + modelImageCommentLike = new ModelImageCommentLike(); + modelImageCommentLike.setUserId(userId); + modelImageCommentLike.setModelImageCommentId(commentId); + modelImageCommentLike.setCreateBy(SecurityUtils.getUsername()); + modelImageCommentLike.setUpdateBy(SecurityUtils.getUsername()); + modelImageCommentLike.setUpdateTime(new Date()); + baseMapper.insert(modelImageCommentLike); + + // 更新图片点赞数 + modelImageComment.setLikeNum(modelImageComment.getLikeNum() + 1); + modelImageCommentMapper.updateById(modelImageComment); + } + +} 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..18222d6 --- /dev/null +++ b/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/ModelImageServiceImpl.java @@ -0,0 +1,70 @@ +package com.mcwl.resource.service.impl; + +import cn.hutool.core.bean.BeanUtil; +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.ModelImageComment; +import com.mcwl.resource.domain.ModelProduct; +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.mapper.MallProductLikeMapper; +import com.mcwl.resource.mapper.ModelImageCommentMapper; +import com.mcwl.resource.mapper.ModelImageMapper; +import com.mcwl.resource.service.MallProductLikeService; +import com.mcwl.resource.service.MallProductService; +import com.mcwl.resource.service.ModelImageCommentService; +import com.mcwl.resource.service.ModelImageService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; +import java.util.Objects; + +@Service +@RequiredArgsConstructor +public class ModelImageServiceImpl extends ServiceImpl implements ModelImageService { + + private final ModelImageCommentMapper modelImageCommentMapper; + + private final ModelImageMapper modelImageMapper; + + @Override + public void comment(ModelImageCommentRes modelImageCommentRes) { + Long parentId = modelImageCommentRes.getParentId(); + ModelImageComment mic = modelImageCommentMapper.selectById(parentId); + + if (Objects.nonNull(parentId) && Objects.isNull(mic)) { + return; + } + + ModelImageComment modelImageComment = new ModelImageComment(); + BeanUtil.copyProperties(modelImageCommentRes, modelImageComment); + modelImageComment.setUserId(SecurityUtils.getUserId()); + modelImageComment.setCreateBy(SecurityUtils.getUsername()); + modelImageComment.setUpdateBy(SecurityUtils.getUsername()); + modelImageComment.setUpdateTime(new Date()); + modelImageCommentMapper.insert(modelImageComment); + + } + + @Override + public void publish(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); + modelImageMapper.insert(modelImage); + + + } +} diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/SysUserAttentionServiceImpl.java b/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/SysUserAttentionServiceImpl.java index 4de0d65..5971fea 100644 --- a/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/SysUserAttentionServiceImpl.java +++ b/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/SysUserAttentionServiceImpl.java @@ -71,9 +71,8 @@ public class SysUserAttentionServiceImpl implements SysUserAttentionService { public SysUserInfo selectUserInfo() { Long userId = SecurityUtils.getUserId(); - return SysUserInfo.builder().bean(sysUserAttentionMapper.selectBean(userId)) - .download(mallProductMapper.sumNumber(userId)) +// .download(mallProductMapper.sumNumber(userId)) .likeCount(mallProductLikeMapper.countLike(userId)) .attention(sysUserAttentionMapper.selectAttentionCount(userId)).build(); } diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/WorkFlowServiceImpl.java b/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/WorkFlowServiceImpl.java new file mode 100644 index 0000000..875acf2 --- /dev/null +++ b/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/WorkFlowServiceImpl.java @@ -0,0 +1,17 @@ +package com.mcwl.resource.service.impl; + +import com.mcwl.resource.service.WorkFlowService; +import org.springframework.stereotype.Service; + +/** + * 工作流 业务实现层 + * @author DaiZibo + * @date 2025/1/9 + * @apiNote + */ + +@Service +public class WorkFlowServiceImpl implements WorkFlowService { + + +} diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/WorkFlowVersionServiceImpl.java b/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/WorkFlowVersionServiceImpl.java new file mode 100644 index 0000000..8b0ba03 --- /dev/null +++ b/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/WorkFlowVersionServiceImpl.java @@ -0,0 +1,16 @@ +package com.mcwl.resource.service.impl; + +import com.mcwl.resource.service.WorkFlowService; +import org.springframework.stereotype.Service; + +/** + * 工作流版本 业务实现层 + * @author DaiZibo + * @date 2025/1/9 + * @apiNote + */ + +@Service +public class WorkFlowVersionServiceImpl implements WorkFlowService { + +} diff --git a/mcwl-resource/src/main/resources/mapper/resource/ModelImageCommentLikeMapper.xml b/mcwl-resource/src/main/resources/mapper/resource/ModelImageCommentLikeMapper.xml new file mode 100644 index 0000000..29ad01b --- /dev/null +++ b/mcwl-resource/src/main/resources/mapper/resource/ModelImageCommentLikeMapper.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + select id, + user_id, + model_image_comment_id, + create_by, + create_time, + update_by, + update_time, + del_flag, + remark + from model_image_comment_like + + + + 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 + + + + diff --git a/mcwl-system/src/main/java/com/mcwl/system/domain/SysAdvice.java b/mcwl-system/src/main/java/com/mcwl/system/domain/SysAdvice.java new file mode 100644 index 0000000..137eb59 --- /dev/null +++ b/mcwl-system/src/main/java/com/mcwl/system/domain/SysAdvice.java @@ -0,0 +1,54 @@ +package com.mcwl.system.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.mcwl.common.core.domain.BaseEntity; +import com.mcwl.system.domain.enums.AdviceEnum; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 消息通知 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_advice") +public class SysAdvice extends BaseEntity { + + @TableId + private Long id; + + /** + * 发送者id + */ + private Long senderId; + + /** + * 接收者id + */ + private Long receiverId; + + /** + * 消息类型 表示新消息提醒,系统公告等 + */ + private AdviceEnum type; + + /** + * 标题 + */ + private String title; + + /** + * 内容 + */ + private String content; + + /** + * 是否已读 0 是 1 否 + */ + private String isRead; + + + + +} diff --git a/mcwl-system/src/main/java/com/mcwl/system/domain/enums/AdviceEnum.java b/mcwl-system/src/main/java/com/mcwl/system/domain/enums/AdviceEnum.java new file mode 100644 index 0000000..b305311 --- /dev/null +++ b/mcwl-system/src/main/java/com/mcwl/system/domain/enums/AdviceEnum.java @@ -0,0 +1,58 @@ +package com.mcwl.system.domain.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 通知枚举 + */ +@Getter +@AllArgsConstructor +public enum AdviceEnum { + + /** + * 新消息提醒 + */ + NEW_MESSAGE_REMIND("newMessageRemind", "新消息提醒"), + + /** + * 系统公告 + */ + SYSTEM_NOTICE("systemNotice", "系统公告"), + + /** + * 邮件提醒 + */ + EMAIL_REMIND("emailRemind", "邮件提醒"), + + /** + * 短信提醒 + */ + SMS_REMIND("smsRemind", "短信提醒"), + + /** + * 推送提醒 + */ + PUSH_REMIND("pushRemind", "推送提醒"), + + /** + * 点赞提醒 + */ + LIKE_REMIND("likeRemind", "点赞提醒"), + /** + * 评论提醒 + */ + COMMENT_REMIND("commentRemind", "评论提醒"), + /** + * 私信提醒 + */ + PRIVATE_MESSAGE_REMIND("privateMessageRemind", "私信提醒"); + + private final String name; + + @EnumValue + private final String value; + + +} diff --git a/mcwl-system/src/main/java/com/mcwl/system/domain/vo/AdviceVo.java b/mcwl-system/src/main/java/com/mcwl/system/domain/vo/AdviceVo.java new file mode 100644 index 0000000..81fe383 --- /dev/null +++ b/mcwl-system/src/main/java/com/mcwl/system/domain/vo/AdviceVo.java @@ -0,0 +1,29 @@ +package com.mcwl.system.domain.vo; + +import com.mcwl.system.domain.enums.AdviceEnum; +import lombok.Data; + +@Data +public class AdviceVo { + + /** + * 消息类型 表示新消息提醒,系统公告等 + */ + private AdviceEnum type; + + /** + * 标题 + */ + private String title; + + /** + * 内容 + */ + private String content; + + /** + * 是否已读 0 是 1 否 + */ + private String isRead; + +} diff --git a/mcwl-system/src/main/java/com/mcwl/system/mapper/SysAdviceMapper.java b/mcwl-system/src/main/java/com/mcwl/system/mapper/SysAdviceMapper.java new file mode 100644 index 0000000..85f400a --- /dev/null +++ b/mcwl-system/src/main/java/com/mcwl/system/mapper/SysAdviceMapper.java @@ -0,0 +1,16 @@ +package com.mcwl.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.mcwl.system.domain.SysAdvice; +import com.mcwl.system.domain.SysConfig; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 消息通知 + */ +@Mapper +public interface SysAdviceMapper extends BaseMapper { + +} diff --git a/mcwl-system/src/main/java/com/mcwl/system/mapper/SysUserMapper.java b/mcwl-system/src/main/java/com/mcwl/system/mapper/SysUserMapper.java index a866592..893f970 100644 --- a/mcwl-system/src/main/java/com/mcwl/system/mapper/SysUserMapper.java +++ b/mcwl-system/src/main/java/com/mcwl/system/mapper/SysUserMapper.java @@ -1,6 +1,5 @@ package com.mcwl.system.mapper; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.mcwl.common.core.domain.entity.SysUser; import org.apache.ibatis.annotations.Param; @@ -133,5 +132,10 @@ public interface SysUserMapper SysUser selectUserInfoById(@Param("userId") Long userId); + void updateIdCard(SysUser sysUser); + + SysUser selectByIdCard(@Param("idCard") String idCard); + + List listByIds(List userIdList); } diff --git a/mcwl-system/src/main/java/com/mcwl/system/service/ISysAdviceService.java b/mcwl-system/src/main/java/com/mcwl/system/service/ISysAdviceService.java new file mode 100644 index 0000000..136addb --- /dev/null +++ b/mcwl-system/src/main/java/com/mcwl/system/service/ISysAdviceService.java @@ -0,0 +1,24 @@ +package com.mcwl.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.mcwl.system.domain.SysAdvice; +import com.mcwl.system.domain.SysConfig; +import com.mcwl.system.domain.vo.AdviceVo; + +import java.util.List; + +/** + * 消息通知 服务层 + * + * @author mcwl + */ +public interface ISysAdviceService extends IService { + + List getUserNewMsg(); + + List getUserSystemNotice(); + + List getUserAllMsg(); + + List getAllMsg(); +} diff --git a/mcwl-system/src/main/java/com/mcwl/system/service/ISysUserService.java b/mcwl-system/src/main/java/com/mcwl/system/service/ISysUserService.java index f3df3e2..ff375d9 100644 --- a/mcwl-system/src/main/java/com/mcwl/system/service/ISysUserService.java +++ b/mcwl-system/src/main/java/com/mcwl/system/service/ISysUserService.java @@ -1,5 +1,6 @@ package com.mcwl.system.service; +import com.mcwl.common.core.domain.AjaxResult; import com.mcwl.common.core.domain.entity.SysUser; import java.util.List; @@ -213,4 +214,8 @@ public interface ISysUserService SysUser selectUserInfoById(Long userId); + AjaxResult updateIdCard(SysUser sysUser); + + List listByIds(List userIdList); + } diff --git a/mcwl-system/src/main/java/com/mcwl/system/service/impl/SysAdviceServiceImpl.java b/mcwl-system/src/main/java/com/mcwl/system/service/impl/SysAdviceServiceImpl.java new file mode 100644 index 0000000..a4199cb --- /dev/null +++ b/mcwl-system/src/main/java/com/mcwl/system/service/impl/SysAdviceServiceImpl.java @@ -0,0 +1,70 @@ +package com.mcwl.system.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.mcwl.common.utils.SecurityUtils; +import com.mcwl.system.domain.SysAdvice; +import com.mcwl.system.domain.SysUserThirdAccount; +import com.mcwl.system.domain.enums.AdviceEnum; +import com.mcwl.system.domain.vo.AdviceVo; +import com.mcwl.system.mapper.SysAdviceMapper; +import com.mcwl.system.service.ISysAdviceService; +import com.mcwl.system.service.IWXService; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +import java.nio.charset.StandardCharsets; +import java.util.Collections; +import java.util.List; + +/** + * 消息管理 业务层处理 + */ +@Service +public class SysAdviceServiceImpl extends ServiceImpl implements ISysAdviceService { + + + @Override + public List getUserNewMsg() { + + Long userId = SecurityUtils.getUserId(); + + List sysAdvices = baseMapper.selectList(lambdaQuery() + .eq(SysAdvice::getReceiverId, userId) + .eq(SysAdvice::getType, AdviceEnum.NEW_MESSAGE_REMIND)); + + return BeanUtil.copyToList(sysAdvices, AdviceVo.class); + } + + @Override + public List getUserSystemNotice() { + Long userId = SecurityUtils.getUserId(); + + List sysAdvices = baseMapper.selectList(lambdaQuery() + .eq(SysAdvice::getReceiverId, userId) + .eq(SysAdvice::getType, AdviceEnum.SYSTEM_NOTICE)); + + return BeanUtil.copyToList(sysAdvices, AdviceVo.class); + } + + @Override + public List getUserAllMsg() { + Long userId = SecurityUtils.getUserId(); + + List sysAdvices = baseMapper.selectList(lambdaQuery() + .eq(SysAdvice::getReceiverId, userId)); + + return BeanUtil.copyToList(sysAdvices, AdviceVo.class); + } + + @Override + public List getAllMsg() { + + List sysAdvices = baseMapper.selectList(null); + + return BeanUtil.copyToList(sysAdvices, AdviceVo.class); + } +} diff --git a/mcwl-system/src/main/java/com/mcwl/system/service/impl/SysUserServiceImpl.java b/mcwl-system/src/main/java/com/mcwl/system/service/impl/SysUserServiceImpl.java index c9ab419..be8aaf2 100644 --- a/mcwl-system/src/main/java/com/mcwl/system/service/impl/SysUserServiceImpl.java +++ b/mcwl-system/src/main/java/com/mcwl/system/service/impl/SysUserServiceImpl.java @@ -1,13 +1,17 @@ package com.mcwl.system.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.alibaba.fastjson2.JSONObject; import com.mcwl.common.annotation.DataScope; +import com.mcwl.common.constant.CacheConstants; import com.mcwl.common.constant.UserConstants; +import com.mcwl.common.core.domain.AjaxResult; import com.mcwl.common.core.domain.entity.SysRole; import com.mcwl.common.core.domain.entity.SysUser; +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.common.utils.VerifyCard; import com.mcwl.common.utils.bean.BeanValidators; import com.mcwl.common.utils.spring.SpringUtils; import com.mcwl.system.domain.SysPost; @@ -30,6 +34,7 @@ import javax.validation.Validator; import java.security.SecureRandom; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -42,6 +47,9 @@ public class SysUserServiceImpl implements ISysUserService { private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class); + @Autowired + private RedisCache redisCache; + @Autowired private SysUserMapper userMapper; @@ -600,6 +608,53 @@ public class SysUserServiceImpl implements ISysUserService return userMapper.selectUserInfoById(userId); } + @Override + public AjaxResult updateIdCard(SysUser sysUser) { + + //获取次数 + Integer s = redisCache.getCacheObject(CacheConstants.ID_CARD_COUNT + sysUser.getUserId()); + Integer count = 0; + if (s != null){ + + if (3<=s){ + + return AjaxResult.error("次数上限"); + }else { + //次数+1 + s++; + count = s; + } + } + + //存入次数 + redisCache.setCacheObject(CacheConstants.ID_CARD_COUNT+sysUser.getUserId(),count,1, TimeUnit.DAYS); + + //查看身份证是否唯一 + SysUser user = userMapper.selectByIdCard(sysUser.getIdCard()); + if (user != null){ + return AjaxResult.error("该信息已绑定"); + } + //校验 + String s1 = VerifyCard.idCard(sysUser.getName(), sysUser.getIdCard()); + JSONObject jsonObject = JSONObject.parseObject(s1); + Integer code = jsonObject.getInteger("code"); + if (code != 200){ + + return AjaxResult.error(jsonObject.getString("msg")); + } + log.info("实名认证校验的结果:{}",s1); + //修改数据库 + userMapper.updateIdCard(sysUser); + + return AjaxResult.success("实名认证成功"); + } + + @Override + public List listByIds(List userIdList) { + return userMapper.listByIds(userIdList); + } + + /** * 生成随机密码 * @param length @@ -618,5 +673,4 @@ public class SysUserServiceImpl implements ISysUserService return sb.toString(); } - } diff --git a/mcwl-system/src/main/resources/mapper/system/SysUserMapper.xml b/mcwl-system/src/main/resources/mapper/system/SysUserMapper.xml index febf895..69ecb7f 100644 --- a/mcwl-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/mcwl-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -49,7 +49,7 @@ - select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, + select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,u.inviter_user_id, u.free_points, d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status from sys_user u @@ -150,8 +150,21 @@ + + + + insert into sys_user( @@ -226,7 +239,13 @@ where user_id = #{userId} - + + update sys_user set name = #{name}, + id_card = #{idCard} + where user_id = #{userId} + + + update sys_user set del_flag = '2' where user_id = #{userId}