优惠券模块:

1.验证码
2.验证验证码领券
master
ck 5 years ago
parent e73d579d82
commit 950ad159fa

@ -172,6 +172,11 @@
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>

@ -0,0 +1,41 @@
package com.bsd.say.controller;
import com.bsd.say.beans.AjaxRequest;
import com.bsd.say.beans.AjaxResult;
import com.bsd.say.entities.Coupon;
import com.bsd.say.service.CouponService;
import com.bsd.say.service.UsersService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("coupon")
@CrossOrigin
public class CouponController extends BaseController<CouponService, Coupon>{
@Resource
private CouponService couponService;
@Override
public CouponService getBaseService() {
return super.getBaseService();
}
/**
*
*/
@RequestMapping(value = "/receive-coupon")
@ResponseBody
public AjaxResult receiveCoupon(@RequestBody AjaxRequest ajaxRequest){
AjaxResult ajaxResult = new AjaxResult();
try {
ajaxResult = couponService.receiveCoupon(ajaxRequest);
} catch (Exception e) {
e.printStackTrace();
String errMsg = e.getMessage() != null ? e.getMessage() : "操作失败";
ajaxResult.setRetcode(AjaxResult.FAILED);
ajaxResult.setRetmsg(errMsg);
}
return ajaxResult;
}
}

@ -0,0 +1,39 @@
package com.bsd.say.controller;
import com.bsd.say.beans.AjaxRequest;
import com.bsd.say.beans.AjaxResult;
import com.bsd.say.entities.Users;
import com.bsd.say.service.UsersService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("users")
@CrossOrigin
public class UsersController extends BaseController<UsersService, Users>{
@Resource
private UsersService usersService;
@Override
public UsersService getBaseService() {
return super.getBaseService();
}
@RequestMapping(value = "/send-note")
@ResponseBody
public AjaxResult sendNote(@RequestBody AjaxRequest ajaxRequest){
AjaxResult ajaxResult = new AjaxResult();
try {
ajaxResult = usersService.sendNote(ajaxRequest);
} catch (Exception e) {
e.printStackTrace();
String errMsg = e.getMessage() != null ? e.getMessage() : "操作失败";
ajaxResult.setRetcode(AjaxResult.FAILED);
ajaxResult.setRetmsg(errMsg);
}
return ajaxResult;
}
}

@ -19,5 +19,10 @@ public class Coupon extends BaseEntity{
/**
* userId
*/
private Integer userId;
private Long userId;
/**
*
*/
private String receiverName;
}

@ -1,6 +1,9 @@
package com.bsd.say.service;
import com.bsd.say.beans.AjaxRequest;
import com.bsd.say.beans.AjaxResult;
import com.bsd.say.entities.Coupon;
public interface CouponService extends BaseService<Coupon> {
AjaxResult receiveCoupon(AjaxRequest ajaxRequest);
}

@ -1,6 +1,11 @@
package com.bsd.say.service;
import com.bsd.say.beans.AjaxRequest;
import com.bsd.say.beans.AjaxResult;
import com.bsd.say.entities.Users;
public interface UsersService extends BaseService<Users>{
AjaxResult sendNote(AjaxRequest ajaxRequest);
AjaxResult confirmNote(AjaxRequest ajaxRequest);
}

@ -1,20 +1,102 @@
package com.bsd.say.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.bsd.say.beans.AjaxRequest;
import com.bsd.say.beans.AjaxResult;
import com.bsd.say.entities.Coupon;
import com.bsd.say.entities.Users;
import com.bsd.say.mapper.CouponMapper;
import com.bsd.say.mapper.UsersMapper;
import com.bsd.say.service.CouponService;
import com.bsd.say.util.HttpRequestUtils;
import com.bsd.say.util.MD5Utils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
@Service("couponService")
@Transactional
public class CouponServiceImpl extends BaseServiceImpl<CouponMapper, Coupon> implements CouponService {
@Value("${bsd.addCouponUrl}")
private String addCouponUrl;
@Value("${bsd.tokenkey}")
private String tokenkey;
@Resource
private UsersMapper usersMapper;
@Autowired
protected CouponMapper couponMapper;
@Resource
private RedisTemplate redisTemplate;
@Override
public CouponMapper getBaseMapper() {
return this.couponMapper;
}
/**
*
* @param ajaxRequest
* @return
*/
@Override
public AjaxResult receiveCoupon(AjaxRequest ajaxRequest) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
AjaxResult ajaxResult = new AjaxResult();
JSONObject data = ajaxRequest.getData();
if (data == null){
ajaxResult.setRetmsg("DATA MISSING");
ajaxResult.setRetcode(AjaxResult.FAILED);
return ajaxResult;
}else {
String phone = data.getString("phone");
String code = data.getString("code");
String receiverName = data.getString("receiverName");
if (StringUtils.isEmpty(phone)||StringUtils.isEmpty(code)){
ajaxResult.setRetcode(AjaxResult.FAILED);
ajaxResult.setRetmsg("PHONE OR CODE MISSING");
return ajaxResult;
}else {
if (code.equals(redisTemplate.opsForValue().get(phone))){
String token = MD5Utils.md5(tokenkey+df.format(new Date()));
//验证成功,领券
JSONObject request = new JSONObject();
request.put("mobileNo",phone);
request.put("couponsGroupNo","Q00001326");
String url = addCouponUrl + token;
try {
String result = HttpRequestUtils.sendPost(url,request);
JSONObject resultJson = JSONObject.parseObject(result);
if (resultJson.getBoolean("success")){
Coupon coupon = new Coupon();
Users users = usersMapper.selectOne(Wrappers.<Users>lambdaQuery().eq(Users::getPhone,phone)
.and(queryWrapper1 -> queryWrapper1.eq(Users::getState,1)));
coupon.setUserId(users.getId());
coupon.setReceiverName(receiverName);
couponMapper.insert(coupon);
ajaxResult.setRetmsg("SUCCESS");
ajaxResult.setRetcode(AjaxResult.SUCCESS);
}else {
ajaxResult.setRetcode(AjaxResult.FAILED);
ajaxResult.setRetmsg(resultJson.getString("errorMessage"));
}
} catch (IOException e) {
e.printStackTrace();
}
}else {
ajaxResult.setRetcode(AjaxResult.FAILED);
ajaxResult.setRetmsg("ERROR CODE");
}
return ajaxResult;
}
}
}
}

@ -1,15 +1,37 @@
package com.bsd.say.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.bsd.say.beans.AjaxRequest;
import com.bsd.say.beans.AjaxResult;
import com.bsd.say.entities.Users;
import com.bsd.say.mapper.UsersMapper;
import com.bsd.say.service.UsersService;
import com.bsd.say.util.HttpRequestUtils;
import com.bsd.say.util.MD5Utils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.concurrent.TimeUnit;
@Service("usersService")
@Transactional
public class UsersServiceImpl extends BaseServiceImpl<UsersMapper,Users> implements UsersService {
@Resource
private RedisTemplate redisTemplate;
@Value("${bsd.tokenkey}")
private String tokenkey;
@Value("${bsd.sendSource}")
private String sendSource;
@Value("${bsd.verifySMSCodeUrl}")
private String verifySMSCodeUrl;
@Autowired
protected UsersMapper usersMapper;
@ -17,4 +39,82 @@ public class UsersServiceImpl extends BaseServiceImpl<UsersMapper,Users> impleme
public UsersMapper getBaseMapper() {
return this.usersMapper;
}
/**
*
* @param ajaxRequest
* @return
*/
@Override
public AjaxResult sendNote(AjaxRequest ajaxRequest) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
AjaxResult ajaxResult = new AjaxResult();
JSONObject data = ajaxRequest.getData();
if (data == null){
ajaxResult.setRetmsg("DATA MISSING");
ajaxResult.setRetcode(AjaxResult.FAILED);
return ajaxResult;
}else {
String phone = data.getString("phone");
if (StringUtils.isEmpty(phone)){
ajaxResult.setRetcode(AjaxResult.FAILED);
ajaxResult.setRetmsg("PHONE MISSING");
return ajaxResult;
}else {
int radomInt = new Random().nextInt(999999);
String noteCode = String.valueOf(radomInt);
String token = MD5Utils.md5(tokenkey + df.format(new Date()));
String param = "&mobileNo=" + phone + "&verifyCode=" + noteCode + "&sendSource=" + sendSource;
String result = HttpRequestUtils.sendGet(verifySMSCodeUrl+token+param);
JSONObject resultJson = JSONObject.parseObject(result);
if (resultJson.getBoolean("success")){
redisTemplate.opsForValue().set(phone,noteCode,60, TimeUnit.SECONDS);
ajaxResult.setRetmsg("SUCCESS");
ajaxResult.setRetcode(AjaxResult.SUCCESS);
ajaxResult.setData(noteCode);
return ajaxResult;
}else {
ajaxResult.setRetcode(AjaxResult.FAILED);
ajaxResult.setRetmsg("SEND ERROR");
return ajaxResult;
}
}
}
}
/**
*
* @param ajaxRequest
* @return
*/
@Override
public AjaxResult confirmNote(AjaxRequest ajaxRequest) {
// AjaxResult ajaxResult = new AjaxResult();
// JSONObject data = ajaxRequest.getData();
// if (data == null){
// ajaxResult.setRetmsg("DATA MISSING");
// ajaxResult.setRetcode(AjaxResult.FAILED);
// return ajaxResult;
// }else {
// String phone = data.getString("phone");
// String code = data.getString("code");
// if (StringUtils.isEmpty(phone)||StringUtils.isEmpty(code)){
// ajaxResult.setRetcode(AjaxResult.FAILED);
// ajaxResult.setRetmsg("PHONE OR CODE MISSING");
// return ajaxResult;
// }else {
// if (code.equals(redisTemplate.opsForValue().get(phone))){
// ajaxResult.setRetcode(AjaxResult.SUCCESS);
// ajaxResult.setRetmsg("SUCCESS");
// }else {
// ajaxResult.setRetcode(AjaxResult.FAILED);
// ajaxResult.setRetmsg("ERROR CODE");
// }
// return ajaxResult;
// }
// }
return null;
}
}

@ -0,0 +1,203 @@
package com.bsd.say.util;
import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.config.CookieSpecs;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
public class HttpRequestUtils {
private static CloseableHttpClient httpClient = HttpClients.createDefault();
private static HttpClientContext context = new HttpClientContext();
/**
* URLGET
*
* @param url URL
* @param param name1=value1&name2=value2
* @return URL
*/
public static String sendGet(String url, String param) {
String result = "";
BufferedReader in = null;
try {
String urlNameString = url + "?" + param;
result = sendGet(urlNameString);
} catch (Exception e) {
System.out.println("发送GET请求出现异常" + e);
e.printStackTrace();
} finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return result;
}
public static String sendGet(String url) {
CloseableHttpResponse response = null;
String content = null;
try {
HttpGet get = new HttpGet(url);
response = httpClient.execute(get, context);
HttpEntity entity = response.getEntity();
content = EntityUtils.toString(entity);
EntityUtils.consume(entity);
return content;
} catch (Exception e) {
e.printStackTrace();
if (response != null) {
try {
response.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
return content;
}
/**
* URL POST
*
* @param url URL
* @param param name1=value1&name2=value2
* @return
*/
public static String sendPost(String url, String param, String token) {
PrintWriter out = null;
BufferedReader in = null;
String result = "";
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("Authorization", token);
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// 获取URLConnection对象对应的输出流
out = new PrintWriter(conn.getOutputStream());
// 发送请求参数
out.print(param);
// flush输出流的缓冲
out.flush();
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("发送 POST 请求出现异常!" + e);
e.printStackTrace();
}
//使用finally块来关闭输出流、输入流
finally {
try {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
return result;
}
public static String sendPost(String url, JSONObject jsonObject) throws IOException {
CloseableHttpClient httpClient = HttpClients.createDefault();
StringEntity entity;
//url的get请求
HttpPost post = new HttpPost(url);
//设置长连接
post.setHeader("Connection", "keep-alive");
//模拟游览器,游览器中输入about://version查看代理项,模拟自己的游览器
post.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36");
entity = new StringEntity(jsonObject.toJSONString(), "utf-8"); // 解决中文乱码问题
entity.setContentEncoding("UTF-8");
entity.setContentType("application/json");
post.setEntity(entity);
RequestConfig defaultConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD).build();
post.setConfig(defaultConfig);
//执行请求,并获取回应
CloseableHttpResponse httpResponse = httpClient.execute(post);
//成功获取json数据
String result = EntityUtils.toString(httpResponse.getEntity());
return result;
}
public static void main(String[] args) throws IOException {
String url = "http://10.10.2.184:1292/token";
String appId = "8ec5fe4f-1213-4a2f-80e4-fc8887e71122";
String secert = "123456";
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(url).append("?appId=").append(appId).append("&secret=").append(secert);
url = stringBuilder.toString();
String result = HttpRequestUtils.sendGet(url);
String token = JSONObject.parseObject(result).getString("data");
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpResponse httpResponse = null;
try {
String psncode = "160647";
String str = sendPost("http://10.10.2.184:1292/hr/QueryAnnual?psncode=160647", "", token);
System.out.println(str);
} catch (Exception e) {
e.printStackTrace();
} finally {
httpclient.close();
}
}
}

@ -0,0 +1,31 @@
package com.bsd.say.util;
import java.security.MessageDigest;
/**
* Created by zhuyaoyao on 2016/12/26.
*/
public class MD5Utils {
public static String md5(String str) {
MessageDigest md5;
try {
md5 = MessageDigest.getInstance("MD5");
byte[] md5Bytes = md5.digest(str.getBytes());
StringBuffer hexValue = new StringBuffer();
for (int i = 0; i < md5Bytes.length; i++) {
int val = ((int) md5Bytes[i]) & 0xff;
if (val < 16)
hexValue.append("0");
hexValue.append(Integer.toHexString(val));
}
str = hexValue.toString();
} catch (Exception e) {
throw new RuntimeException(e);
}
return str;
}
}

@ -1,16 +1,16 @@
# springboot整合postgres连接配制
spring:
# redis:
# database: 2
# host: 10.10.1.176
# port: 6379
# password: ribo@2016
# jedis:
# pool:
# max-idle: 8
# min-idle: 0
# max-active: 8
# max-wait: -1
redis:
database: 4
host: 10.10.1.176
port: 6379
password: ribo@2016
jedis:
pool:
max-idle: 8
min-idle: 0
max-active: 8
max-wait: -1
datasource:
url: jdbc:mysql://106.15.109.152:3306/bsd_asy?characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true
username: root
@ -42,6 +42,12 @@ server:
award:
rule: 5
bsd:
tokenkey: BOSIDENG
sendSource: BRAND_VERIFY_CODE
verifySMSCodeUrl: http://vtest.bsd.cn/BSD_WXAPP/sysWeChat/verifySMSCode?token=
addCouponUrl: http://vtest.bsd.cn/BSD_WXAPP/miniProgram/addCoupon?token=
### 上传文件路径
#upload:
# excel:

Loading…
Cancel
Save