diff --git a/pom.xml b/pom.xml index c563791..dcd5553 100644 --- a/pom.xml +++ b/pom.xml @@ -172,6 +172,11 @@ mybatis-spring-boot-starter 2.1.0 + + org.apache.httpcomponents + httpclient + 4.5.3 + com.baomidou mybatis-plus-boot-starter diff --git a/src/main/java/com/bsd/say/controller/CouponController.java b/src/main/java/com/bsd/say/controller/CouponController.java new file mode 100644 index 0000000..bead810 --- /dev/null +++ b/src/main/java/com/bsd/say/controller/CouponController.java @@ -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{ + @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; + } +} diff --git a/src/main/java/com/bsd/say/controller/UsersController.java b/src/main/java/com/bsd/say/controller/UsersController.java new file mode 100644 index 0000000..fdda4d7 --- /dev/null +++ b/src/main/java/com/bsd/say/controller/UsersController.java @@ -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{ + @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; + } + +} diff --git a/src/main/java/com/bsd/say/entities/Coupon.java b/src/main/java/com/bsd/say/entities/Coupon.java index a263c76..e5c7840 100644 --- a/src/main/java/com/bsd/say/entities/Coupon.java +++ b/src/main/java/com/bsd/say/entities/Coupon.java @@ -19,5 +19,10 @@ public class Coupon extends BaseEntity{ /** * 绑定的userId */ - private Integer userId; + private Long userId; + + /** + * 领券人名 + */ + private String receiverName; } diff --git a/src/main/java/com/bsd/say/service/CouponService.java b/src/main/java/com/bsd/say/service/CouponService.java index 53561e1..cb2c190 100644 --- a/src/main/java/com/bsd/say/service/CouponService.java +++ b/src/main/java/com/bsd/say/service/CouponService.java @@ -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 { + AjaxResult receiveCoupon(AjaxRequest ajaxRequest); } diff --git a/src/main/java/com/bsd/say/service/UsersService.java b/src/main/java/com/bsd/say/service/UsersService.java index 4bd2faf..67625b8 100644 --- a/src/main/java/com/bsd/say/service/UsersService.java +++ b/src/main/java/com/bsd/say/service/UsersService.java @@ -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{ + AjaxResult sendNote(AjaxRequest ajaxRequest); + + AjaxResult confirmNote(AjaxRequest ajaxRequest); } diff --git a/src/main/java/com/bsd/say/service/impl/CouponServiceImpl.java b/src/main/java/com/bsd/say/service/impl/CouponServiceImpl.java index faeb4cb..36001da 100644 --- a/src/main/java/com/bsd/say/service/impl/CouponServiceImpl.java +++ b/src/main/java/com/bsd/say/service/impl/CouponServiceImpl.java @@ -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 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.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; + } + } + } } diff --git a/src/main/java/com/bsd/say/service/impl/UsersServiceImpl.java b/src/main/java/com/bsd/say/service/impl/UsersServiceImpl.java index dd2f62f..b55e7b0 100644 --- a/src/main/java/com/bsd/say/service/impl/UsersServiceImpl.java +++ b/src/main/java/com/bsd/say/service/impl/UsersServiceImpl.java @@ -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 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 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; + } + + } diff --git a/src/main/java/com/bsd/say/util/HttpRequestUtils.java b/src/main/java/com/bsd/say/util/HttpRequestUtils.java new file mode 100644 index 0000000..be29cfa --- /dev/null +++ b/src/main/java/com/bsd/say/util/HttpRequestUtils.java @@ -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(); + + + /** + * 向指定URL发送GET方法的请求 + * + * @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(); + } + + + } + +} \ No newline at end of file diff --git a/src/main/java/com/bsd/say/util/MD5Utils.java b/src/main/java/com/bsd/say/util/MD5Utils.java new file mode 100644 index 0000000..f0a38f1 --- /dev/null +++ b/src/main/java/com/bsd/say/util/MD5Utils.java @@ -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; + } + + +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index fc5dfd5..f481190 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -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: