From f88c68ac0a57f5602ca7b2d3dad1c4394725fa80 Mon Sep 17 00:00:00 2001 From: Diyu0904 <1819728964@qq.com> Date: Thu, 16 Jan 2025 18:55:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=96=87=E6=9C=AC=E5=AE=A1?= =?UTF-8?q?=E6=A0=B8=20=E6=96=B0=E5=A2=9E=E5=9B=BE=E7=89=87=E5=AE=A1?= =?UTF-8?q?=E6=A0=B8=20=E8=A7=84=E8=8C=83=E9=85=8D=E7=BD=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=20=E5=AE=8C=E5=96=84=E7=9F=AD=E4=BF=A1=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E7=A0=81=E5=8F=91=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mcwl-admin/pom.xml | 40 ++++++ .../main/java/com/mcwl/McWlApplication.java | 3 +- .../mcwl/web/controller/common/OssUtil.java | 6 +- .../controller/common/baidu/AuthService.java | 81 +++++++++++ .../controller/common/baidu/BaiduCensor.java | 126 ++++++++++++++++++ .../pay/AliPay/AliPayIntegration.java | 8 -- .../pay/AliPay/OrderTradeController.java | 10 +- .../rabbitmq/consumer/CodeConsumer.java | 60 ++++++++- .../resource/MallProductController.java | 8 +- .../resource/ModelVersionController.java | 2 +- .../controller/system/SysLoginController.java | 22 ++- .../src/main/resources/application-druid.yml | 45 +++++++ mcwl-admin/src/main/resources/application.yml | 45 +------ mcwl-common/pom.xml | 20 +++ .../mcwl/common/constant/RedisConstants.java | 2 + .../com/mcwl/common/utils/Base64Util.java | 69 ++++++++++ .../java/com/mcwl/common/utils/FileUtil.java | 77 +++++++++++ .../java/com/mcwl/common/utils/HttpUtil.java | 82 ++++++++++++ .../mcwl/common/utils/uuid/TelSmsUtils.java | 8 +- mcwl-framework/pom.xml | 1 + .../impl/WorkFlowCommentServiceImpl.java | 2 +- 21 files changed, 626 insertions(+), 91 deletions(-) create mode 100644 mcwl-admin/src/main/java/com/mcwl/web/controller/common/baidu/AuthService.java create mode 100644 mcwl-admin/src/main/java/com/mcwl/web/controller/common/baidu/BaiduCensor.java create mode 100644 mcwl-common/src/main/java/com/mcwl/common/utils/Base64Util.java create mode 100644 mcwl-common/src/main/java/com/mcwl/common/utils/FileUtil.java create mode 100644 mcwl-common/src/main/java/com/mcwl/common/utils/HttpUtil.java diff --git a/mcwl-admin/pom.xml b/mcwl-admin/pom.xml index 2ed9bfd..8573814 100644 --- a/mcwl-admin/pom.xml +++ b/mcwl-admin/pom.xml @@ -128,6 +128,46 @@ spring-boot-starter-test test + + + com.aliyun + aliyun-java-sdk-core + 4.1.1 + + + com.aliyun + aliyun-java-sdk-green + 3.6.6 + + + com.alibaba.fastjson2 + fastjson2 + 2.0.9 + + + + + + + + + commons-io + commons-io + 2.4 + + + commons-codec + commons-codec + 1.10 + + + + + com.aliyun + imageaudit20191230 + 2.0.6 + + diff --git a/mcwl-admin/src/main/java/com/mcwl/McWlApplication.java b/mcwl-admin/src/main/java/com/mcwl/McWlApplication.java index e7c3b73..794e9f4 100644 --- a/mcwl-admin/src/main/java/com/mcwl/McWlApplication.java +++ b/mcwl-admin/src/main/java/com/mcwl/McWlApplication.java @@ -1,8 +1,6 @@ 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; import org.springframework.boot.SpringApplication; @@ -17,6 +15,7 @@ import org.springframework.context.annotation.Bean; * * @author mcwl */ +@EnableConfigurationProperties @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) public class McWlApplication { diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/common/OssUtil.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/common/OssUtil.java index 601d1ac..6baeb3f 100644 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/common/OssUtil.java +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/common/OssUtil.java @@ -4,7 +4,6 @@ import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.model.GetObjectRequest; import com.aliyun.oss.model.PutObjectRequest; -import lombok.extern.log4j.Log4j2; import org.springframework.web.multipart.MultipartFile; import java.io.*; @@ -14,15 +13,17 @@ import java.util.UUID; /** * Oss服务调用 */ -@Log4j2 public class OssUtil { /** * Endpoint 存储对象概述 阿里云主账号AccessKey,accessKeySecret拥有所有API的访问权限 访问路径前缀 存储对象概述 */ private static String endPoint = "oss-cn-beijing.aliyuncs.com"; + private static String accessKeyId = "LTAI5tSHZZ8wHJRP8X4r9TXT"; + private static String accessKeySecret = "F82IVNx0IGJ3AnP6gSIfcyql1HCXIH"; + private static String accessPre = "https://ybl2112.oss-cn-beijing.aliyuncs.com/"; /** @@ -38,7 +39,6 @@ public class OssUtil { endPoint, accessKeyId, accessKeySecret); - log.info("oss服务连接成功!"); } /** diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/common/baidu/AuthService.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/common/baidu/AuthService.java new file mode 100644 index 0000000..71075f9 --- /dev/null +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/common/baidu/AuthService.java @@ -0,0 +1,81 @@ +package com.mcwl.web.controller.common.baidu; + + +import org.codehaus.jettison.json.JSONObject; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.List; +import java.util.Map; + +/** + * @author DaiZibo + * @date 2025/1/16 + * @apiNote + */ + +public class AuthService { + + + /** + * 获取权限token + * @return 返回示例: + * { + * "access_token": "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567", + * "expires_in": 2592000 + * } + */ + + /** + * 获取API访问token + * 该token有一定的有效期,需要自行管理,当失效时需重新获取. + * @param ak - 百度云官网获取的 API Key + * @param sk - 百度云官网获取的 Securet Key + * @return assess_token 示例: + * "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567" + */ + public static String getAuth(String ak, String sk) { + // 获取token地址 + String authHost = "https://aip.baidubce.com/oauth/2.0/token?"; + String getAccessTokenUrl = authHost + // 1. grant_type为固定参数 + + "grant_type=client_credentials" + // 2. 官网获取的 API Key + + "&client_id=" + ak + // 3. 官网获取的 Secret Key + + "&client_secret=" + sk; + try { + URL realUrl = new URL(getAccessTokenUrl); + // 打开和URL之间的连接 + HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection(); + connection.setRequestMethod("GET"); + connection.connect(); + // 获取所有响应头字段 + Map> map = connection.getHeaderFields(); + // 遍历所有的响应头字段 + for (String key : map.keySet()) { + System.err.println(key + "--->" + map.get(key)); + } + // 定义 BufferedReader输入流来读取URL的响应 + BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); + String result = ""; + String line; + while ((line = in.readLine()) != null) { + result += line; + } + /** + * 返回结果示例 + */ + System.err.println("result:" + result); + JSONObject jsonObject = new JSONObject(result); + String access_token = jsonObject.getString("access_token"); + return access_token; + } catch (Exception e) { + System.err.printf("获取token失败!"); + e.printStackTrace(System.err); + } + return null; + } +} diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/common/baidu/BaiduCensor.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/common/baidu/BaiduCensor.java new file mode 100644 index 0000000..c10da1b --- /dev/null +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/common/baidu/BaiduCensor.java @@ -0,0 +1,126 @@ +package com.mcwl.web.controller.common.baidu; + + +import com.mcwl.common.utils.Base64Util; +import com.mcwl.common.utils.HttpUtil; + +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; + + +/** + * @author DaiZibo + * @date 2025/1/16 + * @apiNote + */ + + +public class BaiduCensor { + + //设置APPID/AK/SK + public static final String APP_ID = "115921420"; + public static final String API_KEY = "UOU5eZh73FOrsQbSKbO0wAAA"; + public static final String SECRET_KEY = "nKT1ztffZk9XTxEnhcFdQW0UFggMWq9t"; + + //图像审核 + public static String ImageCnesor(String filePath) { + // 请求url + String url = "https://aip.baidubce.com/rest/2.0/solution/v1/img_censor/v2/user_defined"; + try { + byte[] imgData = downloadImageFromOSS(filePath); + // 本地文件路径 +// String filePath = "[本地文件路径]"; + String imgStr = Base64Util.encode(imgData); + String imgParam = URLEncoder.encode(imgStr, "UTF-8"); + String param = "image=" + imgParam; + //获取accessToken + String accessToken = AuthService.getAuth(API_KEY, SECRET_KEY); + String result = HttpUtil.post(url, accessToken, param); + //接口说明 https://ai.baidu.com/docs#/ImageCensoring-API/top + System.out.println(result); + return result; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static String TextCensor(String content) { + // 请求url + String url = "https://aip.baidubce.com/rest/2.0/solution/v1/text_censor/v2/user_defined"; + try { + String param = "text=" + URLEncoder.encode(content, "utf-8"); + + // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。 + String accessToken = AuthService.getAuth(API_KEY, SECRET_KEY); + + String result = HttpUtil.post(url, accessToken, param); + System.out.println(result); + return result; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 从阿里云读取文件 + * + * @param ossUrl + * @return + */ + public static byte[] downloadImageFromOSS(String ossUrl) { + HttpURLConnection connection = null; + InputStream inputStream = null; + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + + try { + //读取阿里云的图片使用次方法 + URL url = new URL(ossUrl); + connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("GET"); + + int responseCode = connection.getResponseCode(); + if (responseCode == HttpURLConnection.HTTP_OK) { + inputStream = connection.getInputStream(); + byte[] buffer = new byte[4096]; + int bytesRead; + while ((bytesRead = inputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + } + return outputStream.toByteArray(); + } else { + System.err.println("Failed to retrieve data from OSS: HTTP error code " + responseCode); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (inputStream != null) { + try { + inputStream.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + if (connection != null) { + connection.disconnect(); + } + } + return null; + } + + + public static void main(String[] args) { + String s = BaiduCensor.TextCensor("我草你妈的"); + + String s1 = BaiduCensor.ImageCnesor("https://ybl2112.oss-cn-beijing.aliyuncs.com/2025/JANUARY/2/19/4/877e449c-3c0d-4630-a304-91ec110499f2.png"); + + + } + + +} 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 771ac62..ddc59d5 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 @@ -10,14 +10,11 @@ import com.alipay.api.AlipayConfig; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.diagnosis.DiagnosisUtils; import com.alipay.api.domain.AlipayFundAccountQueryModel; -import com.alipay.api.domain.AlipayFundTransToaccountTransferModel; import com.alipay.api.domain.AlipayFundTransUniTransferModel; import com.alipay.api.domain.Participant; import com.alipay.api.request.AlipayFundAccountQueryRequest; -import com.alipay.api.request.AlipayFundTransToaccountTransferRequest; import com.alipay.api.request.AlipayFundTransUniTransferRequest; import com.alipay.api.response.AlipayFundAccountQueryResponse; -import com.alipay.api.response.AlipayFundTransToaccountTransferResponse; import com.alipay.api.response.AlipayFundTransUniTransferResponse; import com.alipay.easysdk.factory.Factory; import com.alipay.easysdk.kernel.Config; @@ -25,15 +22,11 @@ import com.alipay.easysdk.payment.facetoface.models.AlipayTradePrecreateResponse import com.mcwl.common.core.redis.RedisCache; import com.mcwl.common.exception.ServiceException; import com.mcwl.common.utils.SecurityUtils; -import com.mcwl.common.utils.StringUtils; import com.mcwl.memberCenter.domain.MemberLevel; import com.mcwl.memberCenter.service.MemberLevelService; -import com.mcwl.memberCenter.service.MemberService; import com.mcwl.pay.config.AliConfig; import com.mcwl.pay.domain.OrderTrade; import com.mcwl.pay.domain.OrderTradeDto; -import com.mcwl.system.service.ISysUserService; -import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -44,7 +37,6 @@ import java.util.concurrent.TimeUnit; * 支付宝支付 */ @Component -@Slf4j public class AliPayIntegration { @Autowired 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 f16e9b7..e6f9d4b 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 @@ -4,6 +4,7 @@ import cn.hutool.core.lang.UUID; import cn.hutool.extra.qrcode.QrCodeUtil; import cn.hutool.json.JSONUtil; import com.alipay.easysdk.factory.Factory; +import com.alipay.easysdk.kernel.Config; import com.alipay.easysdk.payment.common.models.AlipayTradeQueryResponse; import com.mcwl.common.JSONUtils; import com.mcwl.common.annotation.Anonymous; @@ -16,15 +17,15 @@ import com.mcwl.common.utils.SecurityUtils; import com.mcwl.pay.domain.OrderTrade; import com.mcwl.pay.domain.OrderTradeDto; import com.mcwl.pay.service.OrderTradeService; -import lombok.extern.slf4j.Slf4j; -import com.alipay.easysdk.kernel.Config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * @Author:ChenYan @@ -35,7 +36,6 @@ import java.util.*; * @Date:2025/1/3 14:46 */ -@Slf4j @RestController @RequestMapping("/web/pay") @Validated @@ -177,7 +177,7 @@ public class OrderTradeController extends BaseController { @PostMapping("/notify") // 注意这里必须是POST接口 public String payNotify(HttpServletRequest request) throws Exception { - log.info("已经进入回调接口"); + if (request.getParameter("trade_status").equals("TRADE_SUCCESS")) { System.out.println("=========支付宝异步回调========"); diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/rabbitmq/consumer/CodeConsumer.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/rabbitmq/consumer/CodeConsumer.java index 4710bb5..6d8858d 100644 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/rabbitmq/consumer/CodeConsumer.java +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/rabbitmq/consumer/CodeConsumer.java @@ -1,24 +1,74 @@ package com.mcwl.web.controller.rabbitmq.consumer; +import com.alibaba.fastjson.JSON; import com.mcwl.common.constant.QueueConstants; -import lombok.extern.slf4j.Slf4j; +import com.mcwl.common.constant.RedisConstants; +import com.mcwl.common.core.domain.model.PhoneLoginBody; +import com.mcwl.common.core.redis.RedisCache; +import com.mcwl.common.utils.uuid.TelSmsUtils; +import com.rabbitmq.client.Channel; +import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + /** * 手机号登录短信验证码消费者 + * * @author DaiZibo * @date 2024/12/30 * @apiNote */ -@Slf4j + @Component public class CodeConsumer { - @RabbitListener(queues = QueueConstants.CODE_QUEUE) - public void code(String msg) { + @Autowired + private RedisCache redisCache; + + @Autowired + private RedisTemplate redisTemplate; + + @RabbitListener(queues = QueueConstants.CODE_QUEUE) + public void code(Message message, Channel channel, String msg) { + + + if (msg == "") { + return; + } + String messageId = message.getMessageProperties().getMessageId(); + try { + Long add = redisTemplate.opsForSet().add(RedisConstants.CODE_UUID + messageId, "1"); + redisTemplate.expire(RedisConstants.CODE_UUID + messageId, 2, TimeUnit.MINUTES); + if (add > 0) { + PhoneLoginBody phoneLoginBody = JSON.parseObject(msg, PhoneLoginBody.class); + + //发送短信服务 + // 构建 sendDataMap + Map sendDataMap = new HashMap<>(); + sendDataMap.put("code", phoneLoginBody.getCode()); + String s1 = TelSmsUtils.sendSms(phoneLoginBody.getPhone(), "SMS_478520014", sendDataMap); + + + //手动确认 + channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); + }else { + + } + + } catch (IOException e) { + //删除标记 + redisTemplate.delete(RedisConstants.CODE_UUID+messageId); + throw new RuntimeException(e); + } + - log.info("消费者获取到的数据:{}", msg); } } diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/MallProductController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/MallProductController.java index 85cdf95..1cf0663 100644 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/MallProductController.java +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/MallProductController.java @@ -1,7 +1,7 @@ package com.mcwl.web.controller.resource; import cn.hutool.core.bean.BeanUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.mcwl.common.annotation.Anonymous; import com.mcwl.common.core.controller.BaseController; import com.mcwl.common.core.domain.AjaxResult; import com.mcwl.common.core.page.PageDomain; @@ -10,19 +10,14 @@ import com.mcwl.common.utils.SecurityUtils; import com.mcwl.resource.domain.ModelProduct; import com.mcwl.resource.domain.dto.ModelImagePageRes; import com.mcwl.resource.domain.request.RequestModel; -import com.mcwl.resource.domain.request.RequestWorkFlow; -import com.mcwl.resource.domain.vo.MallProductVo; import com.mcwl.resource.service.ModelImageService; import com.mcwl.resource.service.ModelService; import com.mcwl.resource.service.WorkFlowService; -import com.mcwl.system.service.ISysUserService; import com.mcwl.web.controller.common.OssUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; -import java.util.List; - /** * 商品 @@ -56,6 +51,7 @@ public class MallProductController extends BaseController { * @param file * @return */ + @Anonymous @PostMapping("/file") public AjaxResult Malifile(@RequestParam MultipartFile file) { diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/ModelVersionController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/ModelVersionController.java index b4ec12a..d884e5e 100644 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/ModelVersionController.java +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/ModelVersionController.java @@ -3,9 +3,9 @@ package com.mcwl.web.controller.resource; import com.mcwl.common.core.controller.BaseController; import com.mcwl.common.core.domain.AjaxResult; import com.mcwl.common.core.page.TableDataInfo; +import com.mcwl.common.utils.oss.OssUtil; import com.mcwl.resource.domain.ModelVersion; import com.mcwl.resource.service.ModelVersionService; -import com.mcwl.web.controller.common.OssUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/system/SysLoginController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/system/SysLoginController.java index c375bd4..5d49c89 100644 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/system/SysLoginController.java +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/system/SysLoginController.java @@ -1,5 +1,6 @@ package com.mcwl.web.controller.system; +import com.alibaba.fastjson2.JSONObject; import com.mcwl.common.annotation.Anonymous; import com.mcwl.common.constant.Constants; import com.mcwl.common.constant.QueueConstants; @@ -18,15 +19,13 @@ import com.mcwl.framework.web.service.SysLoginService; import com.mcwl.framework.web.service.SysPermissionService; import com.mcwl.framework.web.service.TokenService; import com.mcwl.system.service.ISysMenuService; -import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Set; +import java.util.UUID; import java.util.concurrent.TimeUnit; /** @@ -34,7 +33,6 @@ import java.util.concurrent.TimeUnit; * * @author mcwl */ -@Slf4j @RestController public class SysLoginController { @@ -74,19 +72,19 @@ public class SysLoginController //生成验证码 String s = CodeUtils.generateCaptcha(); - log.info("获取到的验证码:{}",s); + //存储redis redisCache.setCacheObject(RedisConstants.CODE_PHONE+phone,s,1, TimeUnit.MINUTES); - //发送短信服务 - // 构建 sendDataMap - Map sendDataMap = new HashMap<>(); - sendDataMap.put("code:", s); -// TelSmsUtils.sendSms(phone,"SMS_460535072",sendDataMap); + PhoneLoginBody phoneLoginBody = PhoneLoginBody.builder().code(s) + .phone(phone).build(); - rabbitTemplate.convertAndSend(QueueConstants.CODE_QUEUE,s); + rabbitTemplate.convertAndSend(QueueConstants.CODE_QUEUE, JSONObject.toJSONString(phoneLoginBody), message -> { + message.getMessageProperties().setMessageId(UUID.randomUUID().toString().replace("-","")); + return message; + }); - return AjaxResult.success(s); + return AjaxResult.success(); } diff --git a/mcwl-admin/src/main/resources/application-druid.yml b/mcwl-admin/src/main/resources/application-druid.yml index a1c90fd..e3d9d4e 100644 --- a/mcwl-admin/src/main/resources/application-druid.yml +++ b/mcwl-admin/src/main/resources/application-druid.yml @@ -76,6 +76,28 @@ spring: wall: config: multi-statement-allow: true + # redis 配置 + redis: + # 地址 + host: 1.13.246.108 + # 端口,默认为6379 + port: 6370 + # 数据库索引 + database: 0 + # 密码 + password: MuYu_Cloud@Redis + # 连接超时时间 + timeout: 10s + lettuce: + pool: + # 连接池中的最小空闲连接 + min-idle: 0 + # 连接池中的最大空闲连接 + max-idle: 8 + # 连接池的最大数据库连接数 + max-active: 8 + # #连接池最大阻塞等待时间(使用负值表示没有限制) + max-wait: -1ms # 公众号配置 wechat: @@ -84,3 +106,26 @@ wechat: # 应用密钥 secret: abbabcf1da711a3bbd95387ec83edcac +# yml版(application.yml) +aliyun: + oss: + bucketName: ybl2112 + endpoint: oss-cn-beijing.aliyuncs.com + accessKeyId: LTAI5tSHZZ8wHJRP8X4r9TXT + accessKeySecret: F82IVNx0IGJ3AnP6gSIfcyql1HCXIH + accessPre: https://ybl2112.oss-cn-beijing.aliyuncs.com/ + +mall: + mgt: + aliPayConfig: + protocol: https + gatewayHost: openapi-sandbox.dl.alipaydev.com + signType: RSA2 + 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://253d7236.r27.cpolar.top/web/pay/notify + gatewayUrl: https://openapi-sandbox.dl.alipaydev.com/gateway.do + + + diff --git a/mcwl-admin/src/main/resources/application.yml b/mcwl-admin/src/main/resources/application.yml index 2d9736b..ca8f5eb 100644 --- a/mcwl-admin/src/main/resources/application.yml +++ b/mcwl-admin/src/main/resources/application.yml @@ -65,28 +65,7 @@ spring: restart: # 热部署开关 enabled: true - # redis 配置 - redis: - # 地址 - host: 1.13.246.108 - # 端口,默认为6379 - port: 6370 - # 数据库索引 - database: 0 - # 密码 - password: MuYu_Cloud@Redis - # 连接超时时间 - timeout: 10s - lettuce: - pool: - # 连接池中的最小空闲连接 - min-idle: 0 - # 连接池中的最大空闲连接 - max-idle: 8 - # 连接池的最大数据库连接数 - max-active: 8 - # #连接池最大阻塞等待时间(使用负值表示没有限制) - max-wait: -1ms + # token配置 token: @@ -163,25 +142,3 @@ xss: excludes: /system/notice # 匹配链接 urlPatterns: /system/*,/monitor/*,/tool/* - -# yml版(application.yml) -aliyun: - oss: - bucketName: ybl2112 - endpoint: oss-cn-beijing.aliyuncs.com - accessKeyId: LTAI5tSHZZ8wHJRP8X4r9TXT - accessKeySecret: F82IVNx0IGJ3AnP6gSIfcyql1HCXIH - policy : https://ybl2112.oss-cn-beijing.aliyuncs.com/ - - -mall: - mgt: - aliPayConfig: - protocol: https - gatewayHost: openapi-sandbox.dl.alipaydev.com - signType: RSA2 - 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://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 f56a827..fce5171 100644 --- a/mcwl-common/pom.xml +++ b/mcwl-common/pom.xml @@ -18,6 +18,24 @@ + + com.baidu.aip + java-sdk + 4.12.0 + + + slf4j-simple + org.slf4j + + + + + + + com.fasterxml.jackson.core + jackson-databind + + com.aliyun.oss @@ -160,10 +178,12 @@ org.springframework.boot spring-boot-starter-security + org.springframework.boot spring-boot-starter-web + org.springframework.boot spring-boot-starter-aop diff --git a/mcwl-common/src/main/java/com/mcwl/common/constant/RedisConstants.java b/mcwl-common/src/main/java/com/mcwl/common/constant/RedisConstants.java index 6010987..80ed9c6 100644 --- a/mcwl-common/src/main/java/com/mcwl/common/constant/RedisConstants.java +++ b/mcwl-common/src/main/java/com/mcwl/common/constant/RedisConstants.java @@ -11,4 +11,6 @@ package com.mcwl.common.constant; public class RedisConstants { public static final String CODE_PHONE = "code_phone:"; + + public static final String CODE_UUID = "code_uuid:"; } diff --git a/mcwl-common/src/main/java/com/mcwl/common/utils/Base64Util.java b/mcwl-common/src/main/java/com/mcwl/common/utils/Base64Util.java new file mode 100644 index 0000000..866f1ef --- /dev/null +++ b/mcwl-common/src/main/java/com/mcwl/common/utils/Base64Util.java @@ -0,0 +1,69 @@ +package com.mcwl.common.utils; + +/** + * Base64工具类 + * @author DaiZibo + * @date 2025/1/16 + * @apiNote + */ + +public class Base64Util { + private static final char last2byte = (char) Integer.parseInt("00000011", 2); + private static final char last4byte = (char) Integer.parseInt("00001111", 2); + private static final char last6byte = (char) Integer.parseInt("00111111", 2); + private static final char lead6byte = (char) Integer.parseInt("11111100", 2); + private static final char lead4byte = (char) Integer.parseInt("11110000", 2); + private static final char lead2byte = (char) Integer.parseInt("11000000", 2); + private static final char[] encodeTable = new char[]{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'}; + + public Base64Util() { + } + + public static String encode(byte[] from) { + StringBuilder to = new StringBuilder((int) ((double) from.length * 1.34D) + 3); + int num = 0; + char currentByte = 0; + + int i; + for (i = 0; i < from.length; ++i) { + for (num %= 8; num < 8; num += 6) { + switch (num) { + case 0: + currentByte = (char) (from[i] & lead6byte); + currentByte = (char) (currentByte >>> 2); + case 1: + case 3: + case 5: + default: + break; + case 2: + currentByte = (char) (from[i] & last6byte); + break; + case 4: + currentByte = (char) (from[i] & last4byte); + currentByte = (char) (currentByte << 2); + if (i + 1 < from.length) { + currentByte = (char) (currentByte | (from[i + 1] & lead2byte) >>> 6); + } + break; + case 6: + currentByte = (char) (from[i] & last2byte); + currentByte = (char) (currentByte << 4); + if (i + 1 < from.length) { + currentByte = (char) (currentByte | (from[i + 1] & lead4byte) >>> 4); + } + } + + to.append(encodeTable[currentByte]); + } + } + + if (to.length() % 4 != 0) { + for (i = 4 - to.length() % 4; i > 0; --i) { + to.append("="); + } + } + + return to.toString(); + } +} diff --git a/mcwl-common/src/main/java/com/mcwl/common/utils/FileUtil.java b/mcwl-common/src/main/java/com/mcwl/common/utils/FileUtil.java new file mode 100644 index 0000000..29c829e --- /dev/null +++ b/mcwl-common/src/main/java/com/mcwl/common/utils/FileUtil.java @@ -0,0 +1,77 @@ +package com.mcwl.common.utils; + +import java.io.*; + +/** + * 文件读取工具类 + * @author DaiZibo + * @date 2025/1/16 + * @apiNote + */ + +public class FileUtil { + + + /** + * 读取文件内容,作为字符串返回 + */ + public static String readFileAsString(String filePath) throws IOException { + File file = new File(filePath); + if (!file.exists()) { + throw new FileNotFoundException(filePath); + } + + if (file.length() > 1024 * 1024 * 1024) { + throw new IOException("File is too large"); + } + + StringBuilder sb = new StringBuilder((int) (file.length())); + // 创建字节输入流 + FileInputStream fis = new FileInputStream(filePath); + // 创建一个长度为10240的Buffer + byte[] bbuf = new byte[10240]; + // 用于保存实际读取的字节数 + int hasRead = 0; + while ( (hasRead = fis.read(bbuf)) > 0 ) { + sb.append(new String(bbuf, 0, hasRead)); + } + fis.close(); + return sb.toString(); + } + + /** + * 根据文件路径读取byte[] 数组 + */ + public static byte[] readFileByBytes(String filePath) throws IOException { + File file = new File(filePath); + if (!file.exists()) { + throw new FileNotFoundException(filePath); + } else { + ByteArrayOutputStream bos = new ByteArrayOutputStream((int) file.length()); + BufferedInputStream in = null; + + try { + in = new BufferedInputStream(new FileInputStream(file)); + short bufSize = 1024; + byte[] buffer = new byte[bufSize]; + int len1; + while (-1 != (len1 = in.read(buffer, 0, bufSize))) { + bos.write(buffer, 0, len1); + } + + byte[] var7 = bos.toByteArray(); + return var7; + } finally { + try { + if (in != null) { + in.close(); + } + } catch (IOException var14) { + var14.printStackTrace(); + } + + bos.close(); + } + } + } +} diff --git a/mcwl-common/src/main/java/com/mcwl/common/utils/HttpUtil.java b/mcwl-common/src/main/java/com/mcwl/common/utils/HttpUtil.java new file mode 100644 index 0000000..835f03c --- /dev/null +++ b/mcwl-common/src/main/java/com/mcwl/common/utils/HttpUtil.java @@ -0,0 +1,82 @@ +package com.mcwl.common.utils; + +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.List; +import java.util.Map; + +/** + * http工具类 + * + * @author DaiZibo + * @date 2025/1/16 + * @apiNote + */ + +public class HttpUtil { + + public static String post(String requestUrl, String accessToken, String params) + throws Exception { + String contentType = "application/x-www-form-urlencoded"; + return HttpUtil.post(requestUrl, accessToken, contentType, params); + } + + public static String post(String requestUrl, String accessToken, String contentType, String params) + throws Exception { + String encoding = "UTF-8"; + if (requestUrl.contains("nlp")) { + encoding = "GBK"; + } + return HttpUtil.post(requestUrl, accessToken, contentType, params, encoding); + } + + public static String post(String requestUrl, String accessToken, String contentType, String params, String encoding) + throws Exception { + String url = requestUrl + "?access_token=" + accessToken; + return HttpUtil.postGeneralUrl(url, contentType, params, encoding); + } + + public static String postGeneralUrl(String generalUrl, String contentType, String params, String encoding) + throws Exception { + URL url = new URL(generalUrl); + // 打开和URL之间的连接 + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("POST"); + // 设置通用的请求属性 + connection.setRequestProperty("Content-Type", contentType); + connection.setRequestProperty("Connection", "Keep-Alive"); + connection.setUseCaches(false); + connection.setDoOutput(true); + connection.setDoInput(true); + + // 得到请求的输出流对象 + DataOutputStream out = new DataOutputStream(connection.getOutputStream()); + out.write(params.getBytes(encoding)); + out.flush(); + out.close(); + + // 建立实际的连接 + connection.connect(); + // 获取所有响应头字段 + Map> headers = connection.getHeaderFields(); + // 遍历所有的响应头字段 + for (String key : headers.keySet()) { + System.err.println(key + "--->" + headers.get(key)); + } + // 定义 BufferedReader输入流来读取URL的响应 + BufferedReader in = null; + in = new BufferedReader( + new InputStreamReader(connection.getInputStream(), encoding)); + String result = ""; + String getLine; + while ((getLine = in.readLine()) != null) { + result += getLine; + } + in.close(); + System.err.println("result:" + result); + return result; + } +} diff --git a/mcwl-common/src/main/java/com/mcwl/common/utils/uuid/TelSmsUtils.java b/mcwl-common/src/main/java/com/mcwl/common/utils/uuid/TelSmsUtils.java index 20f0c25..d61f36a 100644 --- a/mcwl-common/src/main/java/com/mcwl/common/utils/uuid/TelSmsUtils.java +++ b/mcwl-common/src/main/java/com/mcwl/common/utils/uuid/TelSmsUtils.java @@ -18,8 +18,8 @@ public class TelSmsUtils { /** * 阿里云主账号AccessKey,accessKeySecret拥有所有API的访问权限 */ - private static String accessKeyId = "LTAIEVXszCmcd1T5"; - private static String accessKeySecret = "2zHwciQXln8wExSEnkIYtRTSwLeRNd"; + private static String accessKeyId = "LTAI5tSHZZ8wHJRP8X4r9TXT"; + private static String accessKeySecret = "F82IVNx0IGJ3AnP6gSIfcyql1HCXIH"; /** * 短信访问域名 @@ -28,7 +28,7 @@ public class TelSmsUtils { /** * 短信签名 */ - private static String signName = "帝宇"; + private static String signName = "魔创未来"; /** * 实例化短信对象 @@ -65,7 +65,7 @@ public class TelSmsUtils { /** * 发送单条短信 * @param tel - * @param templateCode SMS_153991546 + * @param templateCode * @param sendDataMap */ public static String sendSms(String tel , String templateCode , Map sendDataMap){ diff --git a/mcwl-framework/pom.xml b/mcwl-framework/pom.xml index 295fa24..701a650 100644 --- a/mcwl-framework/pom.xml +++ b/mcwl-framework/pom.xml @@ -23,6 +23,7 @@ spring-boot-starter-web + org.springframework.boot diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/WorkFlowCommentServiceImpl.java b/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/WorkFlowCommentServiceImpl.java index efc85c7..66a2546 100644 --- a/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/WorkFlowCommentServiceImpl.java +++ b/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/WorkFlowCommentServiceImpl.java @@ -9,10 +9,10 @@ import com.mcwl.resource.domain.vo.WorkFlowCommentVo; import com.mcwl.resource.mapper.WorkFlowCommentMapper; import com.mcwl.resource.service.WorkFlowCommentService; import com.mcwl.system.service.ISysUserService; -import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.validation.constraints.NotNull; import java.util.ArrayList; import java.util.Date; import java.util.List;