Explorar el Código

Merge branch 'pro' of http://git.mokasz.com/liuwei/launch-webFlux-platform into pro

volta hace 2 años
padre
commit
31d999d9aa

+ 3 - 3
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/planNew/PlanNewCommonOutController.java

@@ -595,12 +595,12 @@ public class PlanNewCommonOutController {
         if (request.getCode() == null || request.getCode().isEmpty()) {
             throw new BaseException("code不能为空");
         }
-        Integer visits = planServiceInterface.setUserVisitsToRedis(request.getUnique(), request.getCode());
-        request.setUserVisits(visits);
-
         Mono<PlanNewCommon> planNewCommonMono = template.selectOne(Query.query(Criteria.where("code").is(request.getCode())), PlanNewCommon.class)
                 .switchIfEmpty(Mono.error(new BaseException(" code错误")))
                 .onErrorResume(throwable -> Mono.error(new BaseException(" code错误")));
+        // 记录访问
+        Integer visits = planServiceInterface.setUserVisitsToRedis(request.getUnique(), request.getCode());
+        request.setUserVisits(visits);
         Mono<PlanNewCommonShareRes> resMono = planNewCommonMono.flatMap(plan -> {
             Mono<StringBuilder> stringBuilderMono;
             boolean isQs = Objects.nonNull(request.getWx_user_id()) && !request.getWx_user_id().isEmpty();

+ 1 - 1
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/planNew/PlanNewController.java

@@ -386,7 +386,7 @@ public class PlanNewController {
     @PostMapping("posterTemList")
     public Mono<RStatus<Paged<PosterTemplateRes>>> posterTemList(@RequestBody PosterTemPage request) {
         Criteria criteria = Criteria.empty(); // poster_template_id
-        if (Objects.nonNull(request.getName()) && "" != request.getName()) {
+        if (Objects.nonNull(request.getName()) && "" != request.getName().trim()) {
             criteria = criteria.and("name").is(request.getName());
         }
         Query query = Query.query(criteria);

+ 3 - 3
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/planNew/PlanNewOutController.java

@@ -555,12 +555,12 @@ public class PlanNewOutController {
         if (request.getCode() == null || request.getCode().isEmpty()) {
             throw new BaseException("code不能为空");
         }
-        Integer visits = planServiceInterface.setUserVisitsToRedis(request.getUnique(), request.getCode());
-        request.setUserVisits(visits);
-
         Mono<PlanNew> code0 = template.selectOne(Query.query(Criteria.where("code").is(request.getCode())), PlanNew.class)
                 .switchIfEmpty(Mono.error(new BaseException(" code错误")))
                 .onErrorResume(throwable -> Mono.error(new BaseException(throwable.getMessage())));
+        // 获取用户访问次数
+        Integer visits = planServiceInterface.setUserVisitsToRedis(request.getUnique(), request.getCode());
+        request.setUserVisits(visits);
         Mono<DataLists0> dataLists0Mono =  code0.flatMap(ftmp->{
             //(如果wx_user_id值不为空则使用清水分类)
             Mono<StringBuilder> stringBuilderMono;

+ 3 - 3
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/listening/ListeningPlanServiceImpl.java

@@ -430,13 +430,13 @@ public class ListeningPlanServiceImpl implements ListeningPlanServiceInterface{
         if (request.getCode() == null || request.getCode().isEmpty()) {
             throw new BaseException("code不能为空");
         }
-        Integer visits = planServiceInterface.setUserVisitsToRedis(request.getUnique(), request.getCode());
-        request.setUserVisits(visits);
-
         Mono<ListeningPlanNew> code1 = template.selectOne(Query.query(Criteria.where("code")
                 .is(request.getCode())), ListeningPlanNew.class)
                 .switchIfEmpty(Mono.error(new BaseException("hello!!! code错误")))
                 .onErrorResume(throwable -> Mono.error(new BaseException(throwable.getMessage())));
+        // 获取用户访问次数
+        Integer visits = planServiceInterface.setUserVisitsToRedis(request.getUnique(), request.getCode());
+        request.setUserVisits(visits);
         Mono<DataListsShare> dataListsShareMono = code1.flatMap(ftmp -> {
             Mono<ListeningPlanNew> code = Mono.just(ftmp);
             return Mono.zip(code, getPoster_template_id(code), getPoster(code), getPlanNewBackgroupPoster(code), getQrcode(code)).flatMap(f -> {

+ 19 - 13
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/planNew/PlanServiceImpl.java

@@ -48,8 +48,8 @@ public class PlanServiceImpl implements PlanServiceInterface {
     @Override
     public Mono<RStatus<Paged<ListeningPlanNewRes2>>> page(PlanReqPage request, Criteria criteria) {
         Query query = Query.query(criteria);
-        int skip  = (request.getPage() - 1) * request.getSize();
-        int limit =  request.getSize();
+        int skip = (request.getPage() - 1) * request.getSize();
+        int limit = request.getSize();
         Mono<Long> count = template.count(query, PlanNewCommon.class);
         Flux<PlanNewCommon> createdAt = template.select(Query.query(criteria)
                 .offset(skip)
@@ -91,19 +91,25 @@ public class PlanServiceImpl implements PlanServiceInterface {
     @Override
     public Integer setUserVisitsToRedis(String unique, String code) {
         String redisKey = RedisKey.H5_USER_UNIQUE + unique;
-        Integer integer = 0;
-        if (Boolean.TRUE.equals(stringRedisTemplate.hasKey(redisKey))){
-            Object val = stringRedisTemplate.opsForHash().get(unique, code);
-            if (val != null) {
-                integer = Integer.getInteger(val.toString());
-                integer = integer + 1;
+        int integer = 0;
+        try {
+            if (Boolean.TRUE.equals(stringRedisTemplate.hasKey(redisKey))) {
+                Object val = stringRedisTemplate.opsForHash().get(redisKey, code);
+                if (val != null) {
+                    integer = Integer.parseInt(val.toString());
+                    integer = integer + 1;
+                }
             }
+            stringRedisTemplate.opsForHash().put(redisKey, code, Integer.toString(integer));
+            // 设置过期时间
+            if (integer == 0) {
+                LocalDateTime expireTime = LocalDateTime.of(LocalDate.now().plusDays(1), LocalTime.of(2, 0));
+                long minute = Duration.between(LocalDateTime.now(), expireTime).toMinutes();
+                stringRedisTemplate.expire(redisKey, minute, TimeUnit.MINUTES);
+            }
+        } catch (Exception e) {
+            log.error("设置用户访问次数到redis异常,unique:{},code:{}", unique, code, e);
         }
-        stringRedisTemplate.opsForHash().put(redisKey, code, integer.toString());
-        // 设置过期时间
-        LocalDateTime expireTime = LocalDateTime.of(LocalDate.now().plusDays(1), LocalTime.of(4,0));
-        long minute = Duration.between(LocalDateTime.now(), expireTime).toMinutes();
-        stringRedisTemplate.expire(redisKey, minute, TimeUnit.MINUTES);
         return integer;
     }
 }

+ 9 - 2
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/planNew/ipAnalyze/IpAnalyzeServiceImpl.java

@@ -37,12 +37,19 @@ public class IpAnalyzeServiceImpl implements IpAnalyzeServiceInterface {
             }
             String responseBody = httpResponse.body();
             log.info("ip解析result: {}", responseBody);
+            if (responseBody == null) {
+                return null;
+            }
+            // 两种情况
+            // {"code":200,"message":"处理成功","data":{"ip":"124.232.36.87","long_ip":"2095588439","isp":"电信","area":"华中","region_id":"430000","region":"湖南","city_id":"","city":"","district":"","district_id":"","country_id":"CN","country":"中国","lat":"28.112444","lng":"112.983810"},"request_id":"7c8fd4985e2e4959ba7c9330bd2b21d8"}
+            // {"ret":200,"msg":"success","data":{"ip":"121.227.207.155","long_ip":"2044972955","isp":"电信","area":"华东","region_id":"320000","region":"江苏","city_id":"320500","city":"苏州","district":"姑苏区","district_id":"320508","country_id":"CN","country":"中国","lat":"31.336392","lng":"120.617296"},"log_id":"6f91c494755a454a90aed87c2114f179"}
             JSONObject jsonObject = JSONUtil.parseObj(responseBody);
-            if (jsonObject.getInt("ret") == 200) {
+            if ((jsonObject.getInt("ret") != null && jsonObject.getInt("ret")  == 200)
+                    || (jsonObject.getInt("code") != null && jsonObject.getInt("code")  == 200)) {
                 return jsonObject.getJSONObject("data");
             }
         } catch (Exception e) {
-            log.error("ip解析异常", e);
+            log.warn("ip解析异常", e);
         }
         return null;
     }

+ 77 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/userVisits/UserVisitsServices.java

@@ -0,0 +1,77 @@
+package com.webflux.launchadmin.mysql.service.userVisits;
+
+import com.plumelog.core.util.LogExceptionStackTrace;
+import com.webflux.launchadmin.global.BaseException;
+import com.webflux.launchadmin.mysql.controller.listening.req.OutListeningShareRequest;
+import com.webflux.launchadmin.mysql.controller.planNew.req.HftRequest;
+import com.webflux.launchadmin.mysql.controller.planNew.req.PlanNewCommonShareReq;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Service;
+
+import java.time.Duration;
+import java.util.Objects;
+
+@Service
+@Slf4j
+public class UserVisitsServices {
+    @Autowired
+    private StringRedisTemplate stringRedisTemplate;
+
+    public Integer getRedisUserVisits(String unique){
+        String s="-1";
+        try {
+            s = stringRedisTemplate.opsForValue().get(unique);
+        }catch (Exception e){
+            log.error("接口异常 desc = {} e = {}", " redis读用户访问次数失败", LogExceptionStackTrace.erroStackTrace(e));
+        }
+        if(Objects.isNull(s) || "".equals(s.trim())){
+            return -1;
+        }
+        try {
+            return Integer.valueOf(s);
+        }catch (Exception e){
+            log.error("接口异常 desc = {} e = {} value={}", "redis读用户访问次数解析Integer错误", LogExceptionStackTrace.erroStackTrace(e), s);
+            return -1;
+        }
+    }
+    public void setRedisUserVisits(String unique,Integer value){
+        try {
+            stringRedisTemplate.opsForValue().set(unique,String.valueOf(value), Duration.ofHours(48));
+        }catch (Exception e){
+            log.error("接口异常 desc = {} e = {}", "redis写入用户访问次数失败", LogExceptionStackTrace.erroStackTrace(e));
+            try {
+                stringRedisTemplate.opsForValue().set(unique,String.valueOf(value), Duration.ofHours(48));
+            }catch (Exception e2){
+                log.error("接口异常 desc = {} e = {}", "重试redis写入用户访问次数失败", LogExceptionStackTrace.erroStackTrace(e2));
+            }
+        }
+    }
+
+    public void setUserVisitsV(HftRequest request) {
+        if(Objects.isNull(request.getUnique()) || "".equals(request.getUnique().trim())){
+            throw new BaseException("unique参数异常 请核对");
+        }
+        Integer redisUserVisits = getRedisUserVisits(request.getUnique())+1;
+        request.setUserVisits(redisUserVisits);
+        setRedisUserVisits(request.getUnique(),redisUserVisits);
+    }
+
+    public void setUserVisitsVLintening(OutListeningShareRequest request) {
+        if(Objects.isNull(request.getUnique()) || "".equals(request.getUnique().trim())){
+            throw new BaseException("unique参数异常 请核对");
+        }
+        Integer redisUserVisits = getRedisUserVisits(request.getUnique())+1;
+        request.setUserVisits(redisUserVisits);
+        setRedisUserVisits(request.getUnique(),redisUserVisits);
+    }
+    public void setUserVisitsCommon(PlanNewCommonShareReq request) {
+        if(Objects.isNull(request.getUnique()) || "".equals(request.getUnique().trim())){
+            throw new BaseException("unique参数异常 请核对");
+        }
+        Integer redisUserVisits = getRedisUserVisits(request.getUnique())+1;
+        request.setUserVisits(redisUserVisits);
+        setRedisUserVisits(request.getUnique(),redisUserVisits);
+    }
+}

+ 2 - 0
launch-admin/src/main/resources/application.yml

@@ -7,6 +7,8 @@ spring:
   profiles:
     # 环境配置
     active: dev
+  codec:
+    max-in-memory-size: -1  # 或者其他合适的值
 
 
 xxl: