From acdd7da542bcc52deb51c890c3e7d8647c1b3e26 Mon Sep 17 00:00:00 2001 From: yuyang <2265829957@qq.com> Date: Mon, 2 Aug 2021 20:25:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B3=A8=E5=86=8C=E8=8E=B7=E5=8F=96=E6=89=8B?= =?UTF-8?q?=E6=9C=BA=E5=8F=B7=E9=AA=8C=E8=AF=81=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xhpc/common/core/utils/HttpUtils.java | 73 ++++++++- .../general/controller/XhpcSmsController.java | 30 ++++ .../java/com/xhpc/general/domain/XhpcSms.java | 152 ++++++++++++++++++ .../xhpc/general/mapper/XhpcSmsMapper.java | 12 ++ .../xhpc/general/service/IXhpcSmsService.java | 18 +++ .../general/service/XhpcSmsServiceImpl.java | 109 +++++++++++++ .../main/resources/mapper/XhpcSmsMapper.xml | 95 +++++++++++ 7 files changed, 486 insertions(+), 3 deletions(-) create mode 100644 xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/controller/XhpcSmsController.java create mode 100644 xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/domain/XhpcSms.java create mode 100644 xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/mapper/XhpcSmsMapper.java create mode 100644 xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/service/IXhpcSmsService.java create mode 100644 xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/service/XhpcSmsServiceImpl.java create mode 100644 xhpc-modules/xhpc-general/src/main/resources/mapper/XhpcSmsMapper.xml diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/xhpc/common/core/utils/HttpUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/xhpc/common/core/utils/HttpUtils.java index d27e96b5..9314b68d 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/xhpc/common/core/utils/HttpUtils.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/xhpc/common/core/utils/HttpUtils.java @@ -29,6 +29,12 @@ import org.apache.http.util.EntityUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.net.HttpURLConnection; +import java.net.URL; import java.util.*; /** @@ -148,11 +154,11 @@ public class HttpUtils { } - /** + /**json格式的参数数据 * post请求 * * @param url 请求地址 - * @param params json格式的参数数据 + * @param params * @return * @author fengjundan * @date 2018/6/2 @@ -405,5 +411,66 @@ public class HttpUtils { return null; } - + public static String postFormData(String path, HashMap Headers, HashMap formMap) { + String result = ""; + HttpURLConnection connection = null; + String boundary = "--------------------------132183525382215881770481"; + try { + URL url = new URL(path); + connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("POST"); + connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary); + connection.setDoOutput(true); + connection.setDoInput(true); + connection.setRequestProperty("Connection", "Keep-Alive"); + // 不使用缓存 + connection.setUseCaches(false); + if (Headers != null) { + if (Headers.size() > 0) { + for (Map.Entry entry : Headers.entrySet()) { + connection.setRequestProperty(entry.getKey(), entry.getValue()); + } + } + } + StringBuffer formSB = new StringBuffer(); + if (formMap != null) { + if (formMap.size() > 0) { + for (Map.Entry entry : formMap.entrySet()) { + String inputName = entry.getKey(); + String inputValue = entry.getValue(); + formSB.append("\r\n").append("--").append(boundary).append("\r\n"); + formSB.append("Content-Disposition: form-data; name=\"" + inputName + "\"\r\n\r\n"); + formSB.append(inputValue); + } + formSB.append("\r\n").append("--").append(boundary).append("--"); + } + } + connection.connect(); + //OutputStream out = new DataOutputStream(connection.getOutputStream()); + PrintWriter out = new PrintWriter(new OutputStreamWriter(connection.getOutputStream(), "UTF-8")); + out.print(formSB.toString()); + out.flush(); + //获得响应状态 + int resultCode = connection.getResponseCode(); + if (HttpURLConnection.HTTP_OK == resultCode) { + formSB = new StringBuffer(); + String readLine; + BufferedReader responseReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); + while ((readLine = responseReader.readLine()) != null) { + formSB.append(readLine).append("\n"); + } + responseReader.close(); + result = formSB.toString(); + } else { + result = "{\"code\":\"" + resultCode + "\"}"; + } + out.close(); + } catch (Exception e) { + logger.error(e.toString()); + return "{\"code\":500,\"result\":\"" + "POST表单请求 " + path + " 时出现异常\"}"; + } finally { + connection.disconnect(); + } + return result; + } } diff --git a/xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/controller/XhpcSmsController.java b/xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/controller/XhpcSmsController.java new file mode 100644 index 00000000..d3bd6489 --- /dev/null +++ b/xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/controller/XhpcSmsController.java @@ -0,0 +1,30 @@ +package com.xhpc.general.controller; + +import com.xhpc.common.core.web.controller.BaseController; +import com.xhpc.common.core.web.domain.AjaxResult; +import com.xhpc.common.security.annotation.PreAuthorize; +import com.xhpc.general.service.IXhpcSmsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * @author yuyang + * @date 2021/8/1 23:42 + */ +@RestController +@RequestMapping("/sms") +public class XhpcSmsController extends BaseController { + + @Autowired + private IXhpcSmsService xhpcSmsService; + + /** + * 注册获取手机号验证码 + */ + @GetMapping(value = "/getLogonPhoneCode") + public AjaxResult getLogonPhoneCode(@RequestParam("phone") String phone) + { + return AjaxResult.success(xhpcSmsService.getLogonPhoneCode(phone)); + } + +} diff --git a/xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/domain/XhpcSms.java b/xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/domain/XhpcSms.java new file mode 100644 index 00000000..145eb4ba --- /dev/null +++ b/xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/domain/XhpcSms.java @@ -0,0 +1,152 @@ +package com.xhpc.general.domain; + +import com.xhpc.common.core.web.domain.BaseEntity; + +/** + * @author yuyang + * @date 2021/7/30 18:16 + */ +public class XhpcSms extends BaseEntity { + + /** + * 短信id + */ + private Long smsId; + /** + * 类型 + */ + private String phone; + /** + * 编号 + */ + private String code; + /** + * 模板id + */ + private String templateId; + /** + * + */ + private String accessKey; + /** + * + */ + private String secretKey; + /** + * + */ + private String regionId; + /** + * 短信内容 + */ + private String content; + /** + * 状态(0成功 1失败 2.空号 3.系统异常) + */ + private Integer status; + /** + * 删除标志(0代表存在 2代表删除) + */ + private Integer delFlag; + + public Long getSmsId() { + + return smsId; + } + + public void setSmsId(Long smsId) { + + this.smsId = smsId; + } + + public String getPhone() { + + return phone; + } + + public void setPhone(String phone) { + + this.phone = phone; + } + + public String getCode() { + + return code; + } + + public void setCode(String code) { + + this.code = code; + } + + public String getTemplateId() { + + return templateId; + } + + public void setTemplateId(String templateId) { + + this.templateId = templateId; + } + + public String getAccessKey() { + + return accessKey; + } + + public void setAccessKey(String accessKey) { + + this.accessKey = accessKey; + } + + public String getSecretKey() { + + return secretKey; + } + + public void setSecretKey(String secretKey) { + + this.secretKey = secretKey; + } + + public String getRegionId() { + + return regionId; + } + + public void setRegionId(String regionId) { + + this.regionId = regionId; + } + + public String getContent() { + + return content; + } + + public void setContent(String content) { + + this.content = content; + } + + public Integer getStatus() { + + return status; + } + + public void setStatus(Integer status) { + + this.status = status; + } + + public Integer getDelFlag() { + + return delFlag; + } + + public void setDelFlag(Integer delFlag) { + + this.delFlag = delFlag; + } + +} diff --git a/xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/mapper/XhpcSmsMapper.java b/xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/mapper/XhpcSmsMapper.java new file mode 100644 index 00000000..d84bb77d --- /dev/null +++ b/xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/mapper/XhpcSmsMapper.java @@ -0,0 +1,12 @@ +package com.xhpc.general.mapper; + +import com.xhpc.general.domain.XhpcSms; + +/** + * @author yuyang + * @date 2021/7/30 18:51 + */ +public interface XhpcSmsMapper { + + int addXhpcSms(XhpcSms xhpcSms); +} diff --git a/xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/service/IXhpcSmsService.java b/xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/service/IXhpcSmsService.java new file mode 100644 index 00000000..a17ac312 --- /dev/null +++ b/xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/service/IXhpcSmsService.java @@ -0,0 +1,18 @@ +package com.xhpc.general.service; + +import com.xhpc.common.core.web.domain.AjaxResult; + +/** + * @author yuyang + * @date 2021/7/30 18:45 + */ +public interface IXhpcSmsService { + + + /** + * 登陆回验证码 + * @param phone + * @return + */ + AjaxResult getLogonPhoneCode(String phone); +} diff --git a/xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/service/XhpcSmsServiceImpl.java b/xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/service/XhpcSmsServiceImpl.java new file mode 100644 index 00000000..21aaf161 --- /dev/null +++ b/xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/service/XhpcSmsServiceImpl.java @@ -0,0 +1,109 @@ +package com.xhpc.general.service; + +import com.alibaba.fastjson.JSONObject; +import com.xhpc.common.core.utils.HttpUtils; +import com.xhpc.common.core.web.domain.AjaxResult; +import com.xhpc.common.redis.service.RedisService; +import com.xhpc.general.domain.XhpcSms; +import com.xhpc.general.mapper.XhpcSmsMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import java.io.IOException; +import java.util.Date; +import java.util.HashMap; +import java.util.Random; +import java.util.concurrent.TimeUnit; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * @author yuyang + * @date 2021/7/30 18:50 + */ +@Service +public class XhpcSmsServiceImpl implements IXhpcSmsService{ + + public static RedisService REDIS; + public static final String URL = "http://sms.daiyicloud.com/sms/apiSend/add"; + public static final String ACCOUNT ="scxhkj"; + public static final String PASSWD ="6A9628548C4CBECCE80A2479CD77679F"; + public static final String PRODUCTLD ="20191130000001"; + + + @Autowired + private RedisService redisService; + @Autowired + private XhpcSmsMapper xhpcSmsMapper; + + @PostConstruct + public void init(){ + REDIS =redisService; + } + + + @Override + public AjaxResult getLogonPhoneCode(String phone) { + + //调用接口 + String pattern ="^([1][0-9]{10})"; + Pattern compile = Pattern.compile(pattern); + Matcher m =compile.matcher(phone); + boolean isMatch = m.matches(); + if(!isMatch){ + return AjaxResult.error("1003","请输入正确的手机号"); + } + //添加短信记录 + XhpcSms xhpcSms =new XhpcSms(); + try { + Long random = getRandom(); + String conten ="【小华充电】您的验证码是:"+random+",有效期为5分钟。如非本人操作,可不用理会。"; + String req = HttpUtils.postFormData(URL, null, assembleSmsReq(phone,conten)); + JSONObject json = JSONObject.parseObject(req); + xhpcSms.setCode(random+""); + xhpcSms.setPhone(phone); + xhpcSms.setContent(conten); + xhpcSms.setCreateTime(new Date()); + xhpcSms.setRemark(req); + String ok = json.getString("ok"); + if("true".equals(ok)){ + REDIS.setCacheObject(phone,random,300L, TimeUnit.SECONDS); + xhpcSms.setStatus(0); + xhpcSmsMapper.addXhpcSms(xhpcSms); + return AjaxResult.success(); + }else{ + xhpcSms.setStatus(1); + xhpcSmsMapper.addXhpcSms(xhpcSms); + return AjaxResult.error(1012,"服务器繁忙,请稍后再试"); + } + } catch (Exception e) { + //e.printStackTrace(); + xhpcSms.setStatus(3); + xhpcSmsMapper.addXhpcSms(xhpcSms); + return AjaxResult.error(1010,"服务器繁忙,请稍后再试"); + } + + } + + private static HashMap assembleSmsReq(String phone,String content) { + HashMap params = new HashMap<>(); + params.put("account", ACCOUNT); + params.put("password", PASSWD); + params.put("content", content); + params.put("mobiles", phone); + params.put("productId", PRODUCTLD); + return params; + } + + private Long getRandom(){ + Random rnd = new Random(); + Long number = Long.valueOf(rnd.nextInt(999999)); + return number; + } + + + public static void main(String[] args) { + + } +} diff --git a/xhpc-modules/xhpc-general/src/main/resources/mapper/XhpcSmsMapper.xml b/xhpc-modules/xhpc-general/src/main/resources/mapper/XhpcSmsMapper.xml new file mode 100644 index 00000000..08d1a8fd --- /dev/null +++ b/xhpc-modules/xhpc-general/src/main/resources/mapper/XhpcSmsMapper.xml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + insert into xhpc_sms + + + phone, + + + code, + + + content, + + + status, + + + del_flag, + + + create_time, + + + create_by, + + + update_time, + + + update_by, + + + remark + + + + + #{phone}, + + + #{code}, + + + #{content}, + + + #{status}, + + + #{delFlag}, + + + #{createTime}, + + + #{createBy}, + + + #{updateTime}, + + + #{updateBy}, + + + #{remark} + + + +