Browse Source

支付成功回调,核减,签约增加31天内代扣成功的不能再次签约的判断

master
qyhdd 3 years ago
parent
commit
52fd4216d5
  1. 12
      pom.xml
  2. 41
      rights-client-controller/src/main/java/com/cyjd/rights/controller/AliPayController.java
  3. 2
      rights-client-controller/src/main/resources/application-dev.yml
  4. 2
      rights-client-controller/src/main/resources/application.yml
  5. 25
      rights-entity/src/main/java/com/cyjd/rights/entity/ConfigEntity.java
  6. 583
      rights-entity/src/main/java/com/cyjd/rights/utils/RedisUtil.java
  7. 1
      rights-interface/src/main/java/com/cyjd/rights/business/service/AliPayOrderService.java
  8. 7
      rights-interface/src/main/java/com/cyjd/rights/business/service/ConfigService.java
  9. 17
      rights-interface/src/main/java/com/cyjd/rights/business/service/SendSuccessMobileService.java
  10. 7
      rights-server/src/main/java/com/cyjd/rights/business/mapper/ConfigMapper.java
  11. 21
      rights-server/src/main/java/com/cyjd/rights/business/service/impl/AliPayOrderServiceImpl.java
  12. 13
      rights-server/src/main/java/com/cyjd/rights/business/service/impl/ConfigServiceImpl.java
  13. 67
      rights-server/src/main/java/com/cyjd/rights/business/service/impl/SendSuccessMobileServiceImpl.java

12
pom.xml

@ -138,7 +138,17 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId> <artifactId>spring-boot-starter-validation</artifactId>
</dependency> </dependency>
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies> </dependencies>
<build> <build>

41
rights-client-controller/src/main/java/com/cyjd/rights/controller/AliPayController.java

@ -10,9 +10,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.cyjd.rights.beans.AliPayProperties; import com.cyjd.rights.beans.AliPayProperties;
import com.cyjd.rights.beans.R; import com.cyjd.rights.beans.R;
import com.cyjd.rights.business.service.AliPayOrderService; import com.cyjd.rights.beans.ResultCodeEnum;
import com.cyjd.rights.business.service.AliPayService; import com.cyjd.rights.business.service.*;
import com.cyjd.rights.business.service.AliPaySigningOrderService;
import com.cyjd.rights.constant.AliPayConstant; import com.cyjd.rights.constant.AliPayConstant;
import com.cyjd.rights.constant.EnumPeriodType; import com.cyjd.rights.constant.EnumPeriodType;
import com.cyjd.rights.dto.AliPayInOrderByAgreementDto; import com.cyjd.rights.dto.AliPayInOrderByAgreementDto;
@ -66,6 +65,12 @@ public class AliPayController {
@Autowired @Autowired
private AliPaySigningOrderService aliPaySigningOrderService; private AliPaySigningOrderService aliPaySigningOrderService;
@Autowired
private SendSuccessMobileService sendSuccessMobileService;
@Autowired
private ConfigService configService;
/** /**
* 支付配置 * 支付配置
*/ */
@ -106,8 +111,10 @@ public class AliPayController {
@PostMapping("/signUp") @PostMapping("/signUp")
public R signUp(@RequestBody AliPaySignUpDto signUpDto) { public R signUp(@RequestBody AliPaySignUpDto signUpDto) {
String price="19.9"; String price="19.9";
//查询数据库用户签约记录 //查询用户31天内是否已经有代扣成功的记录了
if (!aliPayOrderService.checkOpen(signUpDto.getMobile())) {
return R.error(ResultCodeEnum.user_month_repeat_open);
}
AliPayUserPageSignReq signReq = new AliPayUserPageSignReq(); AliPayUserPageSignReq signReq = new AliPayUserPageSignReq();
signUpDto.setIsPage(true); signUpDto.setIsPage(true);
signUpDto.setPeriod("31"); //设置天数 signUpDto.setPeriod("31"); //设置天数
@ -115,7 +122,6 @@ public class AliPayController {
signReq.setBusinessType(2); signReq.setBusinessType(2);
signReq.setType(0); signReq.setType(0);
String agreementNo = OrderUtil.getAgreementNo(); String agreementNo = OrderUtil.getAgreementNo();
int i = checkFrom(signUpDto.getMobile());
//如果未签约,调用支付宝接口获取支付宝签约跳转地址 //如果未签约,调用支付宝接口获取支付宝签约跳转地址
signReq.setExternalAgreementNo(agreementNo); signReq.setExternalAgreementNo(agreementNo);
signReq.setIsPage(signUpDto.getIsPage()); signReq.setIsPage(signUpDto.getIsPage());
@ -395,8 +401,6 @@ public class AliPayController {
* @param inMap * @param inMap
* @return * @return
*/ */
@ApiOperation(value = "ces", notes = "cs")
@PostMapping("/ces")
public String agreementNotify(@RequestBody Map<String, String> inMap) { public String agreementNotify(@RequestBody Map<String, String> inMap) {
log.info("支付宝代扣回调开始:request{}"+JSON.toJSONString(inMap)); log.info("支付宝代扣回调开始:request{}"+JSON.toJSONString(inMap));
try { try {
@ -462,10 +466,17 @@ public class AliPayController {
aliPayOrderEntity.setLinkName(aliPaySigningOrderEntity.getLinkName()); aliPayOrderEntity.setLinkName(aliPaySigningOrderEntity.getLinkName());
aliPayOrderEntity.setOrderName("会员随心选"); aliPayOrderEntity.setOrderName("会员随心选");
if ("TRADE_SUCCESS".equals(tradeStatus) || "TRADE_FINISHED".equals(tradeStatus)) { if ("TRADE_SUCCESS".equals(tradeStatus) || "TRADE_FINISHED".equals(tradeStatus)) {
// TODO: 2023/05/22 1.处理业务
aliPayOrderEntity.setStatus(1); aliPayOrderEntity.setStatus(1);
aliPayOrderService.save(aliPayOrderEntity); aliPayOrderService.save(aliPayOrderEntity);
log.info("支付订单保存成功"+aliPayOrderEntity); log.info("支付订单保存成功"+aliPayOrderEntity);
//回传
if (1161==aliPaySigningOrderEntity.getLinkId()){
//查看是否发送
if (sendSuccessMobileService.ifSendDataByType(aliPaySigningOrderEntity.getLinkId().toString())) {
//回传成功数据
sendSuccessMobileService.sendSuccessMobile(aliPaySigningOrderEntity.getMobile(),"zm");
}
}
// if (b){ // if (b){
// log.info("支付订单保存成功"+aliPayEntity.getOrderId()+"=====status:"+aliPayEntity.getStatus()); // log.info("支付订单保存成功"+aliPayEntity.getOrderId()+"=====status:"+aliPayEntity.getStatus());
// //
@ -503,5 +514,15 @@ public class AliPayController {
return operatorsId; return operatorsId;
} }
// @ApiOperation(value = "test", notes = "test")
// @PostMapping("/test")
// public void tess() {
// for (int i = 0; i < 10; i++) {
// if (sendSuccessMobileService.ifSendDataByType("1059")) {
// System.out.println("发送");
// }else {
// System.out.println("不发送");
// }
// }
// }
} }

2
rights-client-controller/src/main/resources/application-dev.yml

@ -35,7 +35,7 @@ payment:
appId: 2021003135690045 appId: 2021003135690045
privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCGq3UKNbNuIazHbD9slLNJsStw2347rYwR1NmFLCi/d62yNLeTZvmrY4aW3GsDsQiK5vFdLRxaT8tIkGO11GilBRn00xkNKnwPkMA8GUdtr7GaudH+YBqk2snDeBhtdlYLq1V79USGZKdnpsPoUIXVIpyhnBlULzcJP7hf7NSauRVBnDf+MuEQOjhRAc6i8RN7nY2Oz5x6ZuIPhJ8qWjbZQoN6sJ00KU5oYZaN34/NGmPIfpR4QwbZbABm0Y0dCwkXzzNoV3cPYsFqKWNN8gxY7mI7YQqYsVb25fvALDjOl0XUGv1D7lMOC4mX3iz4q8b13ZNK+Tb3y4atwO6jK0EdAgMBAAECggEAUb4ZGM1n0F2YZqQKC3pnKT/lQme4w7if4OL19aPMSAv43sao90v2GFYdB81bF66JpOZxc0FCiH8OwUkDfQclTaU/ECBigF9dVoViahheBvIyN9y63lCvW4mCFqf7C9ZcfFDPXqKNqZXHF19eYtEdqzWLJX1+0l6mZXLME03J7u+tPX+OOnjf/K3wBp90RzoS02Ofp8fxiRyiDwFwlcxfRVbffLPVIW8JMqyOuI95U0l90F3N48+twJj8UeZlWHQeTGSDZ5jgfC6T5SXkDxOi6e7ZemZUG43rqsEHyb84fBfpr4ZFh9SkjXSnRih5w0VRws50dE2u1wAeCLG8K5KD8QKBgQDX/rpHjIJl0aD2LsI1kcUW82Yzm7qOJWApRCTe/+mZtrNGotzz/Mc2S0xV8s95ahgsH9AYqytu58UdM0CQhJ5+57fPDQcYWq9QvHB741ljAd1371qTLvRsMQg6E/nmObFvAON7ynNuh+TfkM9e7HQS6dpA0FkVqrREdD7hgUeUewKBgQCfnL3GKdMdH5FTTMBJgiLwHYBpgFQxDPzD5DEvz9lgCgosk76k4jQGi/3/raJWxkAED5K4O2J90IE/VnRXV4Uhi4h54D3ceO9dtXWBN1IxqEuO7pw9ldiRjFrlTo4aSgnq2wrjiVKn92Fm2YXIcAyhibUs7hamWt6LGAULbM5JRwKBgG11jXlM35gxz9xyfcEgCj1DQ/vLY5M9panD+tt33S4kxF17k3WiGGKPbjPwROxGs9FInfCibfRaSC4wFvwl+Rxe2Wt4MqxI6KeFl4tw/4+JFm79QW1tUjix8HVeQjpF6oFSdfX59t2AyJ/zhuOX+IrNL+nArCSqyYgXUPZ+yYOZAoGATbLAkxnDInc+iF1hcac/GMJTw4fr9CDNXxLTeuHkgKMChua5NIzFJLa7Q96jmzhQ62klVDfcX0DD2jBc3DPHpCfHnQSzOINKisSN2gQzJ+c0OPUg673pOhkoGl5eQJ/wKfrNVyx/JzL+oFGdlZAuJejiYGfacMrlcLKVqhUiansCgYEAtPCz8J3fYipscjdWKQIXsejr110KF0zsh8X7ZYKxhAgRZ5ck3wbMbffYIfa7wCm5nIJMY640P3Jh6Rb5W5/4/i04gHbE1Loi714aGCXoY6gm5oVoKIFP8h3g3MyQl7mZ2huAA/KnLsThlmfQ0l0n6Pd8xEcqJ+Ggi/GS2MQQrIw= privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCGq3UKNbNuIazHbD9slLNJsStw2347rYwR1NmFLCi/d62yNLeTZvmrY4aW3GsDsQiK5vFdLRxaT8tIkGO11GilBRn00xkNKnwPkMA8GUdtr7GaudH+YBqk2snDeBhtdlYLq1V79USGZKdnpsPoUIXVIpyhnBlULzcJP7hf7NSauRVBnDf+MuEQOjhRAc6i8RN7nY2Oz5x6ZuIPhJ8qWjbZQoN6sJ00KU5oYZaN34/NGmPIfpR4QwbZbABm0Y0dCwkXzzNoV3cPYsFqKWNN8gxY7mI7YQqYsVb25fvALDjOl0XUGv1D7lMOC4mX3iz4q8b13ZNK+Tb3y4atwO6jK0EdAgMBAAECggEAUb4ZGM1n0F2YZqQKC3pnKT/lQme4w7if4OL19aPMSAv43sao90v2GFYdB81bF66JpOZxc0FCiH8OwUkDfQclTaU/ECBigF9dVoViahheBvIyN9y63lCvW4mCFqf7C9ZcfFDPXqKNqZXHF19eYtEdqzWLJX1+0l6mZXLME03J7u+tPX+OOnjf/K3wBp90RzoS02Ofp8fxiRyiDwFwlcxfRVbffLPVIW8JMqyOuI95U0l90F3N48+twJj8UeZlWHQeTGSDZ5jgfC6T5SXkDxOi6e7ZemZUG43rqsEHyb84fBfpr4ZFh9SkjXSnRih5w0VRws50dE2u1wAeCLG8K5KD8QKBgQDX/rpHjIJl0aD2LsI1kcUW82Yzm7qOJWApRCTe/+mZtrNGotzz/Mc2S0xV8s95ahgsH9AYqytu58UdM0CQhJ5+57fPDQcYWq9QvHB741ljAd1371qTLvRsMQg6E/nmObFvAON7ynNuh+TfkM9e7HQS6dpA0FkVqrREdD7hgUeUewKBgQCfnL3GKdMdH5FTTMBJgiLwHYBpgFQxDPzD5DEvz9lgCgosk76k4jQGi/3/raJWxkAED5K4O2J90IE/VnRXV4Uhi4h54D3ceO9dtXWBN1IxqEuO7pw9ldiRjFrlTo4aSgnq2wrjiVKn92Fm2YXIcAyhibUs7hamWt6LGAULbM5JRwKBgG11jXlM35gxz9xyfcEgCj1DQ/vLY5M9panD+tt33S4kxF17k3WiGGKPbjPwROxGs9FInfCibfRaSC4wFvwl+Rxe2Wt4MqxI6KeFl4tw/4+JFm79QW1tUjix8HVeQjpF6oFSdfX59t2AyJ/zhuOX+IrNL+nArCSqyYgXUPZ+yYOZAoGATbLAkxnDInc+iF1hcac/GMJTw4fr9CDNXxLTeuHkgKMChua5NIzFJLa7Q96jmzhQ62klVDfcX0DD2jBc3DPHpCfHnQSzOINKisSN2gQzJ+c0OPUg673pOhkoGl5eQJ/wKfrNVyx/JzL+oFGdlZAuJejiYGfacMrlcLKVqhUiansCgYEAtPCz8J3fYipscjdWKQIXsejr110KF0zsh8X7ZYKxhAgRZ5ck3wbMbffYIfa7wCm5nIJMY640P3Jh6Rb5W5/4/i04gHbE1Loi714aGCXoY6gm5oVoKIFP8h3g3MyQl7mZ2huAA/KnLsThlmfQ0l0n6Pd8xEcqJ+Ggi/GS2MQQrIw=
publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhqt1CjWzbiGsx2w/bJSzSbErcNt+O62MEdTZhSwov3etsjS3k2b5q2OGltxrA7EIiubxXS0cWk/LSJBjtdRopQUZ9NMZDSp8D5DAPBlHba+xmrnR/mAapNrJw3gYbXZWC6tVe/VEhmSnZ6bD6FCF1SKcoZwZVC83CT+4X+zUmrkVQZw3/jLhEDo4UQHOovETe52Njs+cembiD4SfKlo22UKDerCdNClOaGGWjd+PzRpjyH6UeEMG2WwAZtGNHQsJF88zaFd3D2LBailjTfIMWO5iO2EKmLFW9uX7wCw4zpdF1Br9Q+5TDguJl94s+KvG9d2TSvk298uGrcDuoytBHQIDAQAB publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhqt1CjWzbiGsx2w/bJSzSbErcNt+O62MEdTZhSwov3etsjS3k2b5q2OGltxrA7EIiubxXS0cWk/LSJBjtdRopQUZ9NMZDSp8D5DAPBlHba+xmrnR/mAapNrJw3gYbXZWC6tVe/VEhmSnZ6bD6FCF1SKcoZwZVC83CT+4X+zUmrkVQZw3/jLhEDo4UQHOovETe52Njs+cembiD4SfKlo22UKDerCdNClOaGGWjd+PzRpjyH6UeEMG2WwAZtGNHQsJF88zaFd3D2LBailjTfIMWO5iO2EKmLFW9uX7wCw4zpdF1Br9Q+5TDguJl94s+KvG9d2TSvk298uGrcDuoytBHQIDAQAB
certPath: /home/cert/alibaba/ certPath: D:/firefox/rights/
signNotifyUrl: https://interface.bnyer.cn/alipay/signNotify signNotifyUrl: https://interface.bnyer.cn/alipay/signNotify
agreementNotifyUrl: https://interface.bnyer.cn/alipay/agreementNotify agreementNotifyUrl: https://interface.bnyer.cn/alipay/agreementNotify
signReturnUrl: https://vediocnd.corpring.com/hotVIP/paybackImg.png signReturnUrl: https://vediocnd.corpring.com/hotVIP/paybackImg.png

2
rights-client-controller/src/main/resources/application.yml

@ -9,4 +9,4 @@ spring:
name: right-client name: right-client
profiles: profiles:
# 环境配置 # 环境配置
active: prod active: dev

25
rights-entity/src/main/java/com/cyjd/rights/entity/ConfigEntity.java

@ -0,0 +1,25 @@
package com.cyjd.rights.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("tb_config")
public class ConfigEntity {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 配置名字 hj(核减数配置)
*/
private String configName;
/**
* 配置数据
*/
private String configValue;
}

583
rights-entity/src/main/java/com/cyjd/rights/utils/RedisUtil.java

@ -0,0 +1,583 @@
package com.cyjd.rights.utils;
import org.springframework.context.annotation.Lazy;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.script.DefaultRedisScript;
import org.springframework.data.redis.core.script.RedisScript;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.io.Serializable;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
* @author jhf
* @date 2020/3/23 14:00
*/
@Component
public class RedisUtil {
@Lazy
@Resource
private RedisTemplate<String, Object> redisTemplate;
private static final Long SUCCESS = 1L;
/**
* 指定缓存失效时间
* @param key
* @param time 时间()
* @return
*/
public boolean expire(String key,long time){
try {
if(time>0){
redisTemplate.expire(key, time, TimeUnit.SECONDS);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 根据key 获取过期时间
* @param key 不能为null
* @return 时间() 返回0代表为永久有效
*/
public long getExpire(String key){
return redisTemplate.getExpire(key,TimeUnit.SECONDS);
}
/**
* 判断key是否存在
* @param key
* @return true 存在 false不存在
*/
public boolean hasKey(String key){
try {
return redisTemplate.hasKey(key);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 删除缓存
* @param key 可以传一个值 或多个
*/
@SuppressWarnings("unchecked")
public void del(String ... key){
if(key!=null&&key.length>0){
if(key.length==1){
redisTemplate.delete(key[0]);
}else{
redisTemplate.delete(Arrays.asList(key));
}
}
}
//============================String=============================
/**
* 普通缓存获取
* @param key
* @return
*/
public Object get(String key){
return key==null?null:redisTemplate.opsForValue().get(key);
}
/**
* 普通缓存放入
* @param key
* @param value
* @return true成功 false失败
*/
public boolean set(String key,Object value) {
try {
redisTemplate.opsForValue().set(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 普通缓存放入并设置时间
* @param key
* @param value
* @param time 时间() time要大于0 如果time小于等于0 将设置无限期
* @return true成功 false 失败
*/
public boolean set(String key,Object value,long time){
try {
if(time>0){
redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
}else{
set(key, value);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 递增
* @param key
* @param delta 要增加几(大于0)
* @return
*/
public long incr(String key, long delta){
if(delta<0){
throw new RuntimeException("递增因子必须大于0");
}
System.out.println(redisTemplate);
return redisTemplate.opsForValue().increment(key, delta);
}
/**
* 递减
* @param key
* @param delta 要减少几(小于0)
* @return
*/
public long decr(String key, long delta){
if(delta<0){
throw new RuntimeException("递减因子必须大于0");
}
return redisTemplate.opsForValue().increment(key, -delta);
}
//================================Map=================================
/**
* HashGet
* @param key 不能为null
* @param item 不能为null
* @return
*/
public Object hget(String key,String item){
return redisTemplate.opsForHash().get(key, item);
}
/**
* 获取hashKey对应的所有键值
* @param key
* @return 对应的多个键值
*/
public Map<Object,Object> hmget(String key){
return redisTemplate.opsForHash().entries(key);
}
/**
* HashSet
* @param key
* @param map 对应多个键值
* @return true 成功 false 失败
*/
public boolean hmset(String key, Map<String,Object> map){
try {
redisTemplate.opsForHash().putAll(key, map);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* HashSet 并设置时间
* @param key
* @param map 对应多个键值
* @param time 时间()
* @return true成功 false失败
*/
public boolean hmset(String key, Map<String,Object> map, long time){
try {
redisTemplate.opsForHash().putAll(key, map);
if(time>0){
expire(key, time);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 向一张hash表中放入数据,如果不存在将创建
* @param key
* @param item
* @param value
* @return true 成功 false失败
*/
public boolean hset(String key,String item,Object value) {
try {
redisTemplate.opsForHash().put(key, item, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 向一张hash表中放入数据,如果不存在将创建
* @param key
* @param item
* @param value
* @param time 时间() 注意:如果已存在的hash表有时间,这里将会替换原有的时间
* @return true 成功 false失败
*/
public boolean hset(String key,String item,Object value,long time) {
try {
redisTemplate.opsForHash().put(key, item, value);
if(time>0){
expire(key, time);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 删除hash表中的值
* @param key 不能为null
* @param item 可以使多个 不能为null
*/
public void hdel(String key, Object... item){
redisTemplate.opsForHash().delete(key,item);
}
/**
* 判断hash表中是否有该项的值
* @param key 不能为null
* @param item 不能为null
* @return true 存在 false不存在
*/
public boolean hHasKey(String key, String item){
return redisTemplate.opsForHash().hasKey(key, item);
}
/**
* hash递增 如果不存在,就会创建一个 并把新增后的值返回
* @param key
* @param item
* @param by 要增加几(大于0)
* @return
*/
public double hincr(String key, String item,double by){
return redisTemplate.opsForHash().increment(key, item, by);
}
/**
* hash递减
* @param key
* @param item
* @param by 要减少记(小于0)
* @return
*/
public double hdecr(String key, String item,double by){
return redisTemplate.opsForHash().increment(key, item,-by);
}
//============================set=============================
/**
* 根据key获取Set中的所有值
* @param key
* @return
*/
public Set<Object> sGet(String key){
try {
return redisTemplate.opsForSet().members(key);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 根据value从一个set中查询,是否存在
* @param key
* @param value
* @return true 存在 false不存在
*/
public boolean sHasKey(String key,Object value){
try {
return redisTemplate.opsForSet().isMember(key, value);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 将数据放入set缓存
* @param key
* @param values 可以是多个
* @return 成功个数
*/
public long sSet(String key, Object...values) {
try {
return redisTemplate.opsForSet().add(key, values);
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* 将set数据放入缓存
* @param key
* @param time 时间()
* @param values 可以是多个
* @return 成功个数
*/
public long sSetAndTime(String key,long time,Object...values) {
try {
Long count = redisTemplate.opsForSet().add(key, values);
if(time>0) expire(key, time);
return count;
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* 获取set缓存的长度
* @param key
* @return
*/
public long sGetSetSize(String key){
try {
return redisTemplate.opsForSet().size(key);
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* 移除值为value的
* @param key
* @param values 可以是多个
* @return 移除的个数
*/
public long setRemove(String key, Object ...values) {
try {
Long count = redisTemplate.opsForSet().remove(key, values);
return count;
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
//===============================list=================================
/**
* 获取list缓存的内容
* @param key
* @param start 开始
* @param end 结束 0 -1代表所有值
* @return
*/
public List<Object> lGet(String key,long start, long end){
try {
return redisTemplate.opsForList().range(key, start, end);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 获取list缓存的长度
* @param key
* @return
*/
public long lGetListSize(String key){
try {
return redisTemplate.opsForList().size(key);
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* 通过索引 获取list中的值
* @param key
* @param index 索引 index>=0时 0 表头1 第二个元素依次类推index<0时-1表尾-2倒数第二个元素依次类推
* @return
*/
public Object lGetIndex(String key,long index){
try {
return redisTemplate.opsForList().index(key, index);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 将list放入缓存
* @param key
* @param value
* @return
*/
public boolean lSet(String key, Object value) {
try {
redisTemplate.opsForList().rightPush(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 将list放入缓存
* @param key
* @param value
* @param time 时间()
* @return
*/
public boolean lSet(String key, Object value, long time) {
try {
redisTemplate.opsForList().rightPush(key, value);
if (time > 0) expire(key, time);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 将list放入缓存
* @param key
* @param value
* @return
*/
public boolean lSet(String key, List<Object> value) {
try {
redisTemplate.opsForList().rightPushAll(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 将list放入缓存
* @param key
* @param value
* @param time 时间()
* @return
*/
public boolean lSet(String key, List<Object> value, long time) {
try {
redisTemplate.opsForList().rightPushAll(key, value);
if (time > 0) expire(key, time);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 根据索引修改list中的某条数据
* @param key
* @param index 索引
* @param value
* @return
*/
public boolean lUpdateIndex(String key, long index,Object value) {
try {
redisTemplate.opsForList().set(key, index, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 移除N个值为value
* @param key
* @param count 移除多少个
* @param value
* @return 移除的个数
*/
public long lRemove(String key,long count,Object value) {
try {
Long remove = redisTemplate.opsForList().remove(key, count, value);
return remove;
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* redis加锁
* @param key
* @param value
* @param exptime 过期时间(秒为单位)
* @return
*/
public boolean setIfAbsent(final String key, final Serializable value, final long exptime) {
Boolean result = (Boolean) redisTemplate.execute(new RedisCallback<Boolean>() {
@Override
public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
RedisSerializer valueSerializer = redisTemplate.getValueSerializer();
RedisSerializer keySerializer = redisTemplate.getKeySerializer();
Object obj = connection.execute("set", keySerializer.serialize(key),
valueSerializer.serialize(value),
"NX".getBytes(StandardCharsets.UTF_8),
"EX".getBytes(StandardCharsets.UTF_8),
String.valueOf(exptime).getBytes(StandardCharsets.UTF_8));
return obj != null;
}
});
return result;
}
/**
* 解锁
* @param key
* @param val
* @return
*/
public boolean unLock(String key, String val){
String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
RedisScript<Long> redisScript = new DefaultRedisScript<>(script, Long.class);
Object execute = redisTemplate.execute(redisScript, Collections.singletonList(key), val);
if(SUCCESS.equals(execute)) {
return true;
}
return false;
}
}

1
rights-interface/src/main/java/com/cyjd/rights/business/service/AliPayOrderService.java

@ -4,4 +4,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.cyjd.rights.entity.AliPayOrderEntity; import com.cyjd.rights.entity.AliPayOrderEntity;
public interface AliPayOrderService extends IService<AliPayOrderEntity> { public interface AliPayOrderService extends IService<AliPayOrderEntity> {
boolean checkOpen(String mobile);
} }

7
rights-interface/src/main/java/com/cyjd/rights/business/service/ConfigService.java

@ -0,0 +1,7 @@
package com.cyjd.rights.business.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cyjd.rights.entity.ConfigEntity;
public interface ConfigService extends IService<ConfigEntity> {
}

17
rights-interface/src/main/java/com/cyjd/rights/business/service/SendSuccessMobileService.java

@ -0,0 +1,17 @@
package com.cyjd.rights.business.service;
public interface SendSuccessMobileService {
/**
* 回传成功的号码
* @param mobile 手机号
* @param channelName 渠道名称
*/
void sendSuccessMobile(String mobile,String channelName);
/**
* 判断是否发送核减
* @param linkId 链接Id
* @return
*/
boolean ifSendDataByType(String linkId);
}

7
rights-server/src/main/java/com/cyjd/rights/business/mapper/ConfigMapper.java

@ -0,0 +1,7 @@
package com.cyjd.rights.business.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cyjd.rights.entity.ConfigEntity;
public interface ConfigMapper extends BaseMapper<ConfigEntity> {
}

21
rights-server/src/main/java/com/cyjd/rights/business/service/impl/AliPayOrderServiceImpl.java

@ -1,5 +1,6 @@
package com.cyjd.rights.business.service.impl; package com.cyjd.rights.business.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cyjd.rights.business.mapper.AliPayOrderMapper; import com.cyjd.rights.business.mapper.AliPayOrderMapper;
import com.cyjd.rights.business.service.AliPayOrderService; import com.cyjd.rights.business.service.AliPayOrderService;
@ -7,7 +8,27 @@ import com.cyjd.rights.entity.AliPayOrderEntity;
import lombok.extern.java.Log; import lombok.extern.java.Log;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.List;
@Service @Service
@Log @Log
public class AliPayOrderServiceImpl extends ServiceImpl<AliPayOrderMapper,AliPayOrderEntity> implements AliPayOrderService { public class AliPayOrderServiceImpl extends ServiceImpl<AliPayOrderMapper,AliPayOrderEntity> implements AliPayOrderService {
@Override
public boolean checkOpen(String mobile) {
SimpleDateFormat begin = new SimpleDateFormat("yyy-MM-dd");
String beginString=begin.format(new Date());
LocalDateTime end = LocalDateTime.now().plusDays(-31);
String endString = end.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
String beginStringTime=beginString+" 00:00:00";
String endStringTime=endString+" 23:59:89";
int orderCount = this.count(new QueryWrapper<AliPayOrderEntity>().ge("order_time", endStringTime).le("order_time", beginStringTime).eq("mobile",mobile).eq("status",1));
if (orderCount<=0){
return true;
}
return false;
}
} }

13
rights-server/src/main/java/com/cyjd/rights/business/service/impl/ConfigServiceImpl.java

@ -0,0 +1,13 @@
package com.cyjd.rights.business.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cyjd.rights.business.mapper.ConfigMapper;
import com.cyjd.rights.business.service.ConfigService;
import com.cyjd.rights.entity.ConfigEntity;
import lombok.extern.java.Log;
import org.springframework.stereotype.Service;
@Service
@Log
public class ConfigServiceImpl extends ServiceImpl<ConfigMapper,ConfigEntity> implements ConfigService {
}

67
rights-server/src/main/java/com/cyjd/rights/business/service/impl/SendSuccessMobileServiceImpl.java

@ -0,0 +1,67 @@
package com.cyjd.rights.business.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.cyjd.rights.business.service.ConfigService;
import com.cyjd.rights.business.service.SendSuccessMobileService;
import com.cyjd.rights.entity.ConfigEntity;
import com.cyjd.rights.utils.HttpUtils;
import com.cyjd.rights.utils.RedisUtil;
import lombok.extern.java.Log;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.HashMap;
@Service
@Log
public class SendSuccessMobileServiceImpl implements SendSuccessMobileService {
@Autowired
private ConfigService configService;
@Autowired
private RedisUtil redisUtil;
private String baseUrl="http://47.107.84.195:666/manage/business/api/notificationApi/cyCall";
@Override
public void sendSuccessMobile(String mobile, String channelName) {
if ("zm".equals(channelName)){
HashMap<String, Object> params = new HashMap<>();
params.put("mobile",mobile);
params.put("date", LocalDateTime.now());
HttpUtils.sendPostJSON(baseUrl, JSON.toJSONString(params));
}
}
@Override
public boolean ifSendDataByType(String linkId) {
ConfigEntity configEntity = configService.getOne(new QueryWrapper<ConfigEntity>().eq("config_name", "hj"));
if (configEntity==null){
return false;
}
return nuclearSubtractionByLinkId(Integer.valueOf(configEntity.getConfigValue()), linkId);
}
public boolean nuclearSubtractionByLinkId(Integer nuclearSubtraction, String linkId) {
//核减
String key="hejian"+linkId;
Integer number= 10;
double delNumber=number-nuclearSubtraction;
boolean flag=true;
long fujianhejian = redisUtil.incr(key, 1);
if (fujianhejian > delNumber) {
flag=false;
if (fujianhejian >= number) {
redisUtil.set(key,0);
}
}
return flag;
}
}
Loading…
Cancel
Save