admin
2019-08-23 c547160a973fd81dba7858a855ca7d95b5b3c320
金币获取版本控制
1个文件已修改
2个文件已添加
114 ■■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/aspect/IntegralGetVersionLimitAspect.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/IntegralControllerV2.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/annotation/integral/IntegralGetVersionLimit.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/aspect/IntegralGetVersionLimitAspect.java
New file
@@ -0,0 +1,91 @@
package com.yeshi.fanli.aspect;
import java.io.IOException;
import java.lang.reflect.Method;
import javax.annotation.Resource;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.core.DefaultParameterNameDiscoverer;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
import org.springframework.stereotype.Component;
import org.yeshi.utils.NumberUtil;
import com.yeshi.fanli.entity.bus.user.UserActiveLog;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.user.UserActiveLogService;
import com.yeshi.fanli.util.VersionUtil;
import com.yeshi.fanli.util.annotation.RequestSerializableByKey;
import com.yeshi.fanli.util.annotation.integral.IntegralGetVersionLimit;
@Component
@Aspect
public class IntegralGetVersionLimitAspect {
    @Resource
    private UserActiveLogService userActiveLogService;
    private ExpressionParser parser = new SpelExpressionParser();
    private DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer();
    public String generateKeyBySpEL(String spELString, ProceedingJoinPoint joinPoint) {
        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
        String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod());
        Expression expression = parser.parseExpression(spELString);
        EvaluationContext context = new StandardEvaluationContext();
        Object[] args = joinPoint.getArgs();
        for (int i = 0; i < args.length; i++) {
            context.setVariable(paramNames[i], args[i]);
        }
        return expression.getValue(context).toString();
    }
    @Around("execution(public * com.yeshi.fanli.service.impl.integral.*.*(..))")
    public Object requestSerializable(ProceedingJoinPoint joinPoint) throws IOException {
        Signature signature = joinPoint.getSignature();
        MethodSignature methodSignature = (MethodSignature) signature;
        Method targetMethod = methodSignature.getMethod();
        try {
            Method realMethod = joinPoint.getTarget().getClass().getDeclaredMethod(joinPoint.getSignature().getName(),
                    targetMethod.getParameterTypes());
            if (realMethod.isAnnotationPresent(IntegralGetVersionLimit.class)) {
                IntegralGetVersionLimit rs = realMethod.getAnnotation(IntegralGetVersionLimit.class);
                String key = rs.uid();
                String uid = generateKeyBySpEL(key, joinPoint);
                if (uid != null && NumberUtil.isNumeric(uid)) {
                    UserActiveLog activeLog = userActiveLogService.getUserLatestActiveInfo(Long.parseLong(uid));
                    if (activeLog != null) {
                        // 小于1.6.5版本不增加积分
                        if (!VersionUtil.greaterThan_1_6_5(
                                "appstore".equalsIgnoreCase(activeLog.getChannel()) ? "ios" : "android",
                                activeLog.getVersionCode()))
                            return null;
                    }
                }
            }
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        }
        try {
            return joinPoint.proceed();
        } catch (Throwable e) {
            LogHelper.errorDetailInfo(e);
        } finally {
        }
        return null;
    }
}
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/IntegralControllerV2.java
@@ -11,6 +11,7 @@
import java.util.Set;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
fanli/src/main/java/com/yeshi/fanli/util/annotation/integral/IntegralGetVersionLimit.java
New file
@@ -0,0 +1,22 @@
package com.yeshi.fanli.util.annotation.integral;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
 * 金币获得版本控制器
 *
 * @author Administrator
 *
 */
@Documented
@Target(ElementType.METHOD)
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface IntegralGetVersionLimit {
    String uid();
}