From 52fd4216d502b572f4ea2d75a5ed6646bcd29c66 Mon Sep 17 00:00:00 2001 From: qyhdd Date: Tue, 8 Aug 2023 11:38:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E4=BB=98=E6=88=90=E5=8A=9F=E5=9B=9E?= =?UTF-8?q?=E8=B0=83=EF=BC=8C=E6=A0=B8=E5=87=8F=EF=BC=8C=E7=AD=BE=E7=BA=A6?= =?UTF-8?q?=E5=A2=9E=E5=8A=A031=E5=A4=A9=E5=86=85=E4=BB=A3=E6=89=A3?= =?UTF-8?q?=E6=88=90=E5=8A=9F=E7=9A=84=E4=B8=8D=E8=83=BD=E5=86=8D=E6=AC=A1?= =?UTF-8?q?=E7=AD=BE=E7=BA=A6=E7=9A=84=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 12 +- .../rights/controller/AliPayController.java | 41 +- .../src/main/resources/application-dev.yml | 2 +- .../src/main/resources/application.yml | 2 +- .../com/cyjd/rights/entity/ConfigEntity.java | 25 + .../java/com/cyjd/rights/utils/RedisUtil.java | 583 ++++++++++++++++++ .../business/service/AliPayOrderService.java | 1 + .../business/service/ConfigService.java | 7 + .../service/SendSuccessMobileService.java | 17 + .../rights/business/mapper/ConfigMapper.java | 7 + .../service/impl/AliPayOrderServiceImpl.java | 21 + .../service/impl/ConfigServiceImpl.java | 13 + .../impl/SendSuccessMobileServiceImpl.java | 67 ++ 13 files changed, 785 insertions(+), 13 deletions(-) create mode 100644 rights-entity/src/main/java/com/cyjd/rights/entity/ConfigEntity.java create mode 100644 rights-entity/src/main/java/com/cyjd/rights/utils/RedisUtil.java create mode 100644 rights-interface/src/main/java/com/cyjd/rights/business/service/ConfigService.java create mode 100644 rights-interface/src/main/java/com/cyjd/rights/business/service/SendSuccessMobileService.java create mode 100644 rights-server/src/main/java/com/cyjd/rights/business/mapper/ConfigMapper.java create mode 100644 rights-server/src/main/java/com/cyjd/rights/business/service/impl/ConfigServiceImpl.java create mode 100644 rights-server/src/main/java/com/cyjd/rights/business/service/impl/SendSuccessMobileServiceImpl.java diff --git a/pom.xml b/pom.xml index 1a1a626..9800d21 100644 --- a/pom.xml +++ b/pom.xml @@ -138,7 +138,17 @@ org.springframework.boot spring-boot-starter-validation - + + + org.springframework.boot + spring-boot-starter-data-redis + 2.0.5.RELEASE + + + redis.clients + jedis + 2.9.0 + diff --git a/rights-client-controller/src/main/java/com/cyjd/rights/controller/AliPayController.java b/rights-client-controller/src/main/java/com/cyjd/rights/controller/AliPayController.java index 318b7bf..2844b93 100644 --- a/rights-client-controller/src/main/java/com/cyjd/rights/controller/AliPayController.java +++ b/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.cyjd.rights.beans.AliPayProperties; import com.cyjd.rights.beans.R; -import com.cyjd.rights.business.service.AliPayOrderService; -import com.cyjd.rights.business.service.AliPayService; -import com.cyjd.rights.business.service.AliPaySigningOrderService; +import com.cyjd.rights.beans.ResultCodeEnum; +import com.cyjd.rights.business.service.*; import com.cyjd.rights.constant.AliPayConstant; import com.cyjd.rights.constant.EnumPeriodType; import com.cyjd.rights.dto.AliPayInOrderByAgreementDto; @@ -66,6 +65,12 @@ public class AliPayController { @Autowired private AliPaySigningOrderService aliPaySigningOrderService; + + @Autowired + private SendSuccessMobileService sendSuccessMobileService; + + @Autowired + private ConfigService configService; /** * 支付配置 */ @@ -106,8 +111,10 @@ public class AliPayController { @PostMapping("/signUp") public R signUp(@RequestBody AliPaySignUpDto signUpDto) { String price="19.9"; - //查询数据库用户签约记录 - + //查询用户31天内是否已经有代扣成功的记录了 + if (!aliPayOrderService.checkOpen(signUpDto.getMobile())) { + return R.error(ResultCodeEnum.user_month_repeat_open); + } AliPayUserPageSignReq signReq = new AliPayUserPageSignReq(); signUpDto.setIsPage(true); signUpDto.setPeriod("31"); //设置天数 @@ -115,7 +122,6 @@ public class AliPayController { signReq.setBusinessType(2); signReq.setType(0); String agreementNo = OrderUtil.getAgreementNo(); - int i = checkFrom(signUpDto.getMobile()); //如果未签约,调用支付宝接口获取支付宝签约跳转地址 signReq.setExternalAgreementNo(agreementNo); signReq.setIsPage(signUpDto.getIsPage()); @@ -395,8 +401,6 @@ public class AliPayController { * @param inMap * @return */ - @ApiOperation(value = "ces", notes = "cs") - @PostMapping("/ces") public String agreementNotify(@RequestBody Map inMap) { log.info("支付宝代扣回调开始:request{}"+JSON.toJSONString(inMap)); try { @@ -462,10 +466,17 @@ public class AliPayController { aliPayOrderEntity.setLinkName(aliPaySigningOrderEntity.getLinkName()); aliPayOrderEntity.setOrderName("会员随心选"); if ("TRADE_SUCCESS".equals(tradeStatus) || "TRADE_FINISHED".equals(tradeStatus)) { - // TODO: 2023/05/22 1.处理业务 aliPayOrderEntity.setStatus(1); aliPayOrderService.save(aliPayOrderEntity); log.info("支付订单保存成功"+aliPayOrderEntity); + //回传 + if (1161==aliPaySigningOrderEntity.getLinkId()){ + //查看是否发送 + if (sendSuccessMobileService.ifSendDataByType(aliPaySigningOrderEntity.getLinkId().toString())) { + //回传成功数据 + sendSuccessMobileService.sendSuccessMobile(aliPaySigningOrderEntity.getMobile(),"zm"); + } + } // if (b){ // log.info("支付订单保存成功"+aliPayEntity.getOrderId()+"=====status:"+aliPayEntity.getStatus()); // @@ -503,5 +514,15 @@ public class AliPayController { 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("不发送"); +// } +// } +// } } diff --git a/rights-client-controller/src/main/resources/application-dev.yml b/rights-client-controller/src/main/resources/application-dev.yml index cb5ff2d..8ac1137 100644 --- a/rights-client-controller/src/main/resources/application-dev.yml +++ b/rights-client-controller/src/main/resources/application-dev.yml @@ -35,7 +35,7 @@ payment: 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= 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 agreementNotifyUrl: https://interface.bnyer.cn/alipay/agreementNotify signReturnUrl: https://vediocnd.corpring.com/hotVIP/paybackImg.png diff --git a/rights-client-controller/src/main/resources/application.yml b/rights-client-controller/src/main/resources/application.yml index 24deafd..f3f055d 100644 --- a/rights-client-controller/src/main/resources/application.yml +++ b/rights-client-controller/src/main/resources/application.yml @@ -9,4 +9,4 @@ spring: name: right-client profiles: # 环境配置 - active: prod \ No newline at end of file + active: dev \ No newline at end of file diff --git a/rights-entity/src/main/java/com/cyjd/rights/entity/ConfigEntity.java b/rights-entity/src/main/java/com/cyjd/rights/entity/ConfigEntity.java new file mode 100644 index 0000000..59bda65 --- /dev/null +++ b/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; +} diff --git a/rights-entity/src/main/java/com/cyjd/rights/utils/RedisUtil.java b/rights-entity/src/main/java/com/cyjd/rights/utils/RedisUtil.java new file mode 100644 index 0000000..54c6e3c --- /dev/null +++ b/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 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 hmget(String key){ + return redisTemplate.opsForHash().entries(key); + } + + /** + * HashSet + * @param key 键 + * @param map 对应多个键值 + * @return true 成功 false 失败 + */ + public boolean hmset(String key, Map 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 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 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 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 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 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() { + @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 redisScript = new DefaultRedisScript<>(script, Long.class); + Object execute = redisTemplate.execute(redisScript, Collections.singletonList(key), val); + if(SUCCESS.equals(execute)) { + return true; + } + return false; + } +} + diff --git a/rights-interface/src/main/java/com/cyjd/rights/business/service/AliPayOrderService.java b/rights-interface/src/main/java/com/cyjd/rights/business/service/AliPayOrderService.java index c884b3c..db47a6c 100644 --- a/rights-interface/src/main/java/com/cyjd/rights/business/service/AliPayOrderService.java +++ b/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; public interface AliPayOrderService extends IService { + boolean checkOpen(String mobile); } diff --git a/rights-interface/src/main/java/com/cyjd/rights/business/service/ConfigService.java b/rights-interface/src/main/java/com/cyjd/rights/business/service/ConfigService.java new file mode 100644 index 0000000..b02a71e --- /dev/null +++ b/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 { +} diff --git a/rights-interface/src/main/java/com/cyjd/rights/business/service/SendSuccessMobileService.java b/rights-interface/src/main/java/com/cyjd/rights/business/service/SendSuccessMobileService.java new file mode 100644 index 0000000..290077a --- /dev/null +++ b/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); +} diff --git a/rights-server/src/main/java/com/cyjd/rights/business/mapper/ConfigMapper.java b/rights-server/src/main/java/com/cyjd/rights/business/mapper/ConfigMapper.java new file mode 100644 index 0000000..f4f6189 --- /dev/null +++ b/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 { +} diff --git a/rights-server/src/main/java/com/cyjd/rights/business/service/impl/AliPayOrderServiceImpl.java b/rights-server/src/main/java/com/cyjd/rights/business/service/impl/AliPayOrderServiceImpl.java index 72a3ada..6c0701d 100644 --- a/rights-server/src/main/java/com/cyjd/rights/business/service/impl/AliPayOrderServiceImpl.java +++ b/rights-server/src/main/java/com/cyjd/rights/business/service/impl/AliPayOrderServiceImpl.java @@ -1,5 +1,6 @@ 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.cyjd.rights.business.mapper.AliPayOrderMapper; import com.cyjd.rights.business.service.AliPayOrderService; @@ -7,7 +8,27 @@ import com.cyjd.rights.entity.AliPayOrderEntity; import lombok.extern.java.Log; 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 @Log public class AliPayOrderServiceImpl extends ServiceImpl 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().ge("order_time", endStringTime).le("order_time", beginStringTime).eq("mobile",mobile).eq("status",1)); + if (orderCount<=0){ + return true; + } + return false; + } } diff --git a/rights-server/src/main/java/com/cyjd/rights/business/service/impl/ConfigServiceImpl.java b/rights-server/src/main/java/com/cyjd/rights/business/service/impl/ConfigServiceImpl.java new file mode 100644 index 0000000..f373047 --- /dev/null +++ b/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 implements ConfigService { +} diff --git a/rights-server/src/main/java/com/cyjd/rights/business/service/impl/SendSuccessMobileServiceImpl.java b/rights-server/src/main/java/com/cyjd/rights/business/service/impl/SendSuccessMobileServiceImpl.java new file mode 100644 index 0000000..072f7c6 --- /dev/null +++ b/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 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().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; + } + + +}