Kaynağa Gözat

侧边栏发官方通用链接

三七 2 hafta önce
ebeveyn
işleme
3899ae7493

+ 0 - 12
fs-qwhook-sop/src/main/java/com/fs/app/annotation/Login.java

@@ -1,12 +0,0 @@
-package com.fs.app.annotation;
-
-import java.lang.annotation.*;
-
-/**
- * app登录效验
- */
-@Target(ElementType.METHOD)
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface Login {
-}

+ 0 - 15
fs-qwhook-sop/src/main/java/com/fs/app/annotation/LoginUser.java

@@ -1,15 +0,0 @@
-package com.fs.app.annotation;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * 登录用户信息
- */
-@Target(ElementType.PARAMETER)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface LoginUser {
-
-}

+ 0 - 29
fs-qwhook-sop/src/main/java/com/fs/app/config/WebMvcConfig.java

@@ -1,29 +0,0 @@
-package com.fs.app.config;
-
-
-import com.fs.app.interceptor.AuthorizationInterceptor;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
-/**
- * MVC配置
- */
-@Configuration
-public class WebMvcConfig implements WebMvcConfigurer {
-    @Autowired
-    private AuthorizationInterceptor authorizationInterceptor;
-//    @Autowired
-//    private LoginUserHandlerMethodArgumentResolver loginUserHandlerMethodArgumentResolver;
-
-    @Override
-    public void addInterceptors(InterceptorRegistry registry) {
-        registry.addInterceptor(authorizationInterceptor).addPathPatterns("/app/**");
-    }
-//
-//    @Override
-//    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
-//        argumentResolvers.add(loginUserHandlerMethodArgumentResolver);
-//    }
-}

+ 8 - 5
fs-qwhook-sop/src/main/java/com/fs/app/controller/ApisFsUserCourseVideoController.java

@@ -191,18 +191,21 @@ public class ApisFsUserCourseVideoController extends BaseController {
 
     @PostMapping("/selectTagList")
     @ApiOperation("侧边栏发官方群发链接")
-    public TableDataInfo selectTagList(@RequestBody QwTagGroup qwTagGroup) throws Exception {
+    public R selectTagList(@RequestBody QwTagGroup qwTagGroup) {
 
         if (StringUtil.strIsNullOrEmpty(qwTagGroup.getName())){
-            startPage();
+            PageHelper.startPage(qwTagGroup.getPageNum(), qwTagGroup.getPageSize());
             List<QwTagGroupListVO> list = qwTagGroupService.selectQwTagGroupListVO(qwTagGroup);
-            return getDataTable(list);
+            PageInfo<QwTagGroupListVO> result = new PageInfo<>(list);
+            return R.ok().put("data", result);
         }else {
-            startPage();
+            PageHelper.startPage(qwTagGroup.getPageNum(), qwTagGroup.getPageSize());
             QwTagParam tagParam=new QwTagParam();
             tagParam.setName(qwTagGroup.getName());
             tagParam.setCorpId(qwTagGroup.getCorpId());
-            return getDataTable(qwTagService.searchTags(tagParam));
+            List<QwTagGroupListVO> qwTagGroupListVOS = qwTagService.searchTags(tagParam);
+            PageInfo<QwTagGroupListVO> result = new PageInfo<>(qwTagGroupListVOS);
+            return R.ok().put("data", result);
         }
 
     }

+ 0 - 70
fs-qwhook-sop/src/main/java/com/fs/app/interceptor/AuthorizationInterceptor.java

@@ -1,70 +0,0 @@
-package com.fs.app.interceptor;
-
-
-import com.fs.app.annotation.Login;
-import com.fs.app.exception.FSException;
-import com.fs.app.utils.JwtUtils;
-import com.fs.common.core.redis.RedisCache;
-import com.fs.common.utils.StringUtils;
-import io.jsonwebtoken.Claims;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.stereotype.Component;
-import org.springframework.web.method.HandlerMethod;
-import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * 权限(Token)验证
- */
-@Component
-public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
-    @Autowired
-    private JwtUtils jwtUtils;
-    @Autowired
-    RedisCache redisCache;
-    public static final String USER_KEY = "userId";
-
-    @Override
-    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
-        Login annotation;
-        if(handler instanceof HandlerMethod) {
-            annotation = ((HandlerMethod) handler).getMethodAnnotation(Login.class);
-        }else{
-            return true;
-        }
-
-        if(annotation == null){
-            return true;
-        }
-
-        //获取用户凭证
-        String token = request.getHeader(jwtUtils.getHeader());
-        if(StringUtils.isBlank(token)){
-            token = request.getParameter(jwtUtils.getHeader());
-        }
-
-        //凭证为空
-        if(StringUtils.isBlank(token)){
-            throw new FSException(jwtUtils.getHeader() + "不能为空", HttpStatus.UNAUTHORIZED.value());
-        }
-
-        Claims claims = jwtUtils.getClaimByToken(token);
-        if(claims == null || jwtUtils.isTokenExpired(claims.getExpiration())){
-            throw new FSException(jwtUtils.getHeader() + "失效,请重新登录", HttpStatus.UNAUTHORIZED.value());
-        }
-
-        //查询用户的TOKEN是否和REDIS中的一样
-//        String redisToken=redisCache.getCacheObject("AiChatToken:"+ Long.parseLong(claims.getSubject()));
-//        if(redisToken==null||!redisToken.equals(token)){
-//            throw new FSException(jwtUtils.getHeader() + "失效,请重新登录", HttpStatus.UNAUTHORIZED.value());
-//        }
-//        long l = Long.parseLong(claims.getSubject());
-        //设置userId到request里,后续根据userId,获取用户信息
-        request.setAttribute(USER_KEY, Long.parseLong(claims.getSubject()));
-
-        return true;
-    }
-}

+ 0 - 87
fs-qwhook-sop/src/main/java/com/fs/app/utils/JwtUtils.java

@@ -1,87 +0,0 @@
-package com.fs.app.utils;
-
-import io.jsonwebtoken.Claims;
-import io.jsonwebtoken.Jwts;
-import io.jsonwebtoken.SignatureAlgorithm;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-import java.util.Date;
-
-/**
- * jwt工具类
-
- */
-@ConfigurationProperties(prefix = "fs.jwt")
-@Component
-public class JwtUtils {
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-
-    private String secret;
-    private long expire;
-    private String header;
-
-    /**
-     * 生成jwt token
-     */
-    public String generateToken(long userId) {
-        Date nowDate = new Date();
-        //过期时间
-        Date expireDate = new Date(nowDate.getTime() + expire * 1000);
-
-        return Jwts.builder()
-                .setHeaderParam("typ", "JWT")
-                .setSubject(userId+"")
-                .setIssuedAt(nowDate)
-                .setExpiration(expireDate)
-                .signWith(SignatureAlgorithm.HS512, secret)
-                .compact();
-    }
-
-    public Claims getClaimByToken(String token) {
-        try {
-            return Jwts.parser()
-                    .setSigningKey(secret)
-                    .parseClaimsJws(token)
-                    .getBody();
-        }catch (Exception e){
-            logger.debug("validate is token error ", e);
-            return null;
-        }
-    }
-
-    /**
-     * token是否过期
-     * @return  true:过期
-     */
-    public boolean isTokenExpired(Date expiration) {
-        return expiration.before(new Date());
-    }
-
-    public String getSecret() {
-        return secret;
-    }
-
-    public void setSecret(String secret) {
-        this.secret = secret;
-    }
-
-    public long getExpire() {
-        return expire;
-    }
-
-    public void setExpire(long expire) {
-        this.expire = expire;
-    }
-
-    public String getHeader() {
-        return header;
-    }
-
-    public void setHeader(String header) {
-        this.header = header;
-    }
-}

+ 0 - 244
fs-qwhook-sop/src/main/java/com/fs/framework/aspectj/LogAspect.java

@@ -1,244 +0,0 @@
-package com.fs.framework.aspectj;
-
-import com.alibaba.fastjson.JSON;
-import com.fs.common.annotation.Log;
-import com.fs.common.core.domain.model.LoginUser;
-import com.fs.common.enums.BusinessStatus;
-import com.fs.common.enums.HttpMethod;
-import com.fs.common.utils.SecurityUtils;
-import com.fs.common.utils.ServletUtils;
-import com.fs.common.utils.StringUtils;
-import com.fs.common.utils.ip.IpUtils;
-import com.fs.framework.manager.AsyncManager;
-import com.fs.framework.manager.factory.AsyncFactory;
-import com.fs.system.domain.SysOperLog;
-import org.aspectj.lang.JoinPoint;
-import org.aspectj.lang.Signature;
-import org.aspectj.lang.annotation.AfterReturning;
-import org.aspectj.lang.annotation.AfterThrowing;
-import org.aspectj.lang.annotation.Aspect;
-import org.aspectj.lang.annotation.Pointcut;
-import org.aspectj.lang.reflect.MethodSignature;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
-import org.springframework.validation.BindingResult;
-import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.servlet.HandlerMapping;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.lang.reflect.Method;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * 操作日志记录处理
- *
-
- */
-@Aspect
-@Component
-public class LogAspect
-{
-    private static final Logger log = LoggerFactory.getLogger(LogAspect.class);
-
-    // 配置织入点
-    @Pointcut("@annotation(com.fs.common.annotation.Log)")
-    public void logPointCut()
-    {
-    }
-
-    /**
-     * 处理完请求后执行
-     *
-     * @param joinPoint 切点
-     */
-    @AfterReturning(pointcut = "logPointCut()", returning = "jsonResult")
-    public void doAfterReturning(JoinPoint joinPoint, Object jsonResult)
-    {
-        handleLog(joinPoint, null, jsonResult);
-    }
-
-    /**
-     * 拦截异常操作
-     *
-     * @param joinPoint 切点
-     * @param e 异常
-     */
-    @AfterThrowing(value = "logPointCut()", throwing = "e")
-    public void doAfterThrowing(JoinPoint joinPoint, Exception e)
-    {
-        handleLog(joinPoint, e, null);
-    }
-
-    protected void handleLog(final JoinPoint joinPoint, final Exception e, Object jsonResult)
-    {
-        try
-        {
-            // 获得注解
-            Log controllerLog = getAnnotationLog(joinPoint);
-            if (controllerLog == null)
-            {
-                return;
-            }
-
-            // 获取当前的用户
-            LoginUser loginUser = SecurityUtils.getLoginUser();
-
-            // *========数据库日志=========*//
-            SysOperLog operLog = new SysOperLog();
-            operLog.setStatus(BusinessStatus.SUCCESS.ordinal());
-            // 请求的地址
-            String ip = IpUtils.getIpAddr(ServletUtils.getRequest());
-            operLog.setOperIp(ip);
-            // 返回参数
-            operLog.setJsonResult(JSON.toJSONString(jsonResult));
-
-            operLog.setOperUrl(ServletUtils.getRequest().getRequestURI());
-            if (loginUser != null)
-            {
-                operLog.setOperName(loginUser.getUsername());
-            }
-
-            if (e != null)
-            {
-                operLog.setStatus(BusinessStatus.FAIL.ordinal());
-                operLog.setErrorMsg(StringUtils.substring(e.getMessage(), 0, 2000));
-            }
-            // 设置方法名称
-            String className = joinPoint.getTarget().getClass().getName();
-            String methodName = joinPoint.getSignature().getName();
-            operLog.setMethod(className + "." + methodName + "()");
-            // 设置请求方式
-            operLog.setRequestMethod(ServletUtils.getRequest().getMethod());
-            // 处理设置注解上的参数
-            getControllerMethodDescription(joinPoint, controllerLog, operLog);
-            // 保存数据库
-            AsyncManager.me().execute(AsyncFactory.recordOper(operLog));
-        }
-        catch (Exception exp)
-        {
-            // 记录本地异常日志
-            log.error("==前置通知异常==");
-            log.error("异常信息:{}", exp.getMessage());
-            exp.printStackTrace();
-        }
-    }
-
-    /**
-     * 获取注解中对方法的描述信息 用于Controller层注解
-     *
-     * @param log 日志
-     * @param operLog 操作日志
-     * @throws Exception
-     */
-    public void getControllerMethodDescription(JoinPoint joinPoint, Log log, SysOperLog operLog) throws Exception
-    {
-        // 设置action动作
-        operLog.setBusinessType(log.businessType().ordinal());
-        // 设置标题
-        operLog.setTitle(log.title());
-        // 设置操作人类别
-        operLog.setOperatorType(log.operatorType().ordinal());
-        // 是否需要保存request,参数和值
-        if (log.isSaveRequestData())
-        {
-            // 获取参数的信息,传入到数据库中。
-            setRequestValue(joinPoint, operLog);
-        }
-    }
-
-    /**
-     * 获取请求的参数,放到log中
-     *
-     * @param operLog 操作日志
-     * @throws Exception 异常
-     */
-    private void setRequestValue(JoinPoint joinPoint, SysOperLog operLog) throws Exception
-    {
-        String requestMethod = operLog.getRequestMethod();
-        if (HttpMethod.PUT.name().equals(requestMethod) || HttpMethod.POST.name().equals(requestMethod))
-        {
-            String params = argsArrayToString(joinPoint.getArgs());
-            operLog.setOperParam(StringUtils.substring(params, 0, 2000));
-        }
-        else
-        {
-            Map<?, ?> paramsMap = (Map<?, ?>) ServletUtils.getRequest().getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
-            operLog.setOperParam(StringUtils.substring(paramsMap.toString(), 0, 2000));
-        }
-    }
-
-    /**
-     * 是否存在注解,如果存在就获取
-     */
-    private Log getAnnotationLog(JoinPoint joinPoint) throws Exception
-    {
-        Signature signature = joinPoint.getSignature();
-        MethodSignature methodSignature = (MethodSignature) signature;
-        Method method = methodSignature.getMethod();
-
-        if (method != null)
-        {
-            return method.getAnnotation(Log.class);
-        }
-        return null;
-    }
-
-    /**
-     * 参数拼装
-     */
-    private String argsArrayToString(Object[] paramsArray)
-    {
-        String params = "";
-        if (paramsArray != null && paramsArray.length > 0)
-        {
-            for (int i = 0; i < paramsArray.length; i++)
-            {
-                if (StringUtils.isNotNull(paramsArray[i]) && !isFilterObject(paramsArray[i]))
-                {
-                    Object jsonObj = JSON.toJSON(paramsArray[i]);
-                    params += jsonObj.toString() + " ";
-                }
-            }
-        }
-        return params.trim();
-    }
-
-    /**
-     * 判断是否需要过滤的对象。
-     *
-     * @param o 对象信息。
-     * @return 如果是需要过滤的对象,则返回true;否则返回false。
-     */
-    @SuppressWarnings("rawtypes")
-    public boolean isFilterObject(final Object o)
-    {
-        Class<?> clazz = o.getClass();
-        if (clazz.isArray())
-        {
-            return clazz.getComponentType().isAssignableFrom(MultipartFile.class);
-        }
-        else if (Collection.class.isAssignableFrom(clazz))
-        {
-            Collection collection = (Collection) o;
-            for (Iterator iter = collection.iterator(); iter.hasNext();)
-            {
-                return iter.next() instanceof MultipartFile;
-            }
-        }
-        else if (Map.class.isAssignableFrom(clazz))
-        {
-            Map map = (Map) o;
-            for (Iterator iter = map.entrySet().iterator(); iter.hasNext();)
-            {
-                Map.Entry entry = (Map.Entry) iter.next();
-                return entry.getValue() instanceof MultipartFile;
-            }
-        }
-        return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse
-                || o instanceof BindingResult;
-    }
-}

+ 6 - 4
fs-service/src/main/java/com/fs/qw/domain/QwTagGroup.java

@@ -3,8 +3,11 @@ package com.fs.qw.domain;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.fs.common.annotation.Excel;
 import com.fs.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.io.Serializable;
+
 /**
  * 企微客户标签组对象 qw_tag_group
  *
@@ -12,7 +15,7 @@ import lombok.Data;
  * @date 2024-06-20
  */
 @Data
-public class QwTagGroup extends BaseEntity
+public class QwTagGroup extends BaseEntity implements Serializable
 {
     private static final long serialVersionUID = 1L;
 
@@ -41,10 +44,9 @@ public class QwTagGroup extends BaseEntity
 
     private Integer groupFrom;
 
-    @TableField(exist = false)
+    @ApiModelProperty(value = "页码,默认为1", required = true)
     private Integer pageNum = 1;
 
-    @TableField(exist = false)
+    @ApiModelProperty(value = "页大小,默认为10", required = true)
     private Integer pageSize = 10;
-
 }

+ 9 - 8
fs-service/src/main/java/com/fs/qw/service/impl/QwGroupMsgServiceImpl.java

@@ -721,7 +721,7 @@ public class QwGroupMsgServiceImpl implements IQwGroupMsgService
     }
 
     @Override
-    public R sendSidebarOfficial(QwGroupMsgParam qwGroupMsgParam) throws Exception {
+    public R sendSidebarOfficial(QwGroupMsgParam qwGroupMsgParam)  {
         QwCompany qwCompany = qwCompanyMapper.selectQwCompanyByCorpId(qwGroupMsgParam.getCorpId());
 
         if (StringUtil.strIsNullOrEmpty(qwGroupMsgParam.getSender())){
@@ -752,25 +752,25 @@ public class QwGroupMsgServiceImpl implements IQwGroupMsgService
         if (StringUtil.strIsNullOrEmpty(qwCompany.getMiniAppId())){
             return  R.error("该主体没有绑定 小程序,请联系管理员");
         }
-//
-//        String mediaId =(String)redisCache.getCacheObject("miniprogram:"+qwGroupMsgParam.getCorpId()+":"+qwGroupMsgParam.getCourseId());
-//        if (StringUtil.strIsNullOrEmpty(mediaId)){
-//            return R.error("该课程封面未上传 至企业微信,请联系管理员");
-//        }
+
+        String mediaId =(String)redisCache.getCacheObject("miniprogram:"+qwGroupMsgParam.getCorpId()+":"+qwGroupMsgParam.getCourseId());
+        if (StringUtil.strIsNullOrEmpty(mediaId)){
+            return R.error("该课程封面未上传 至企业微信,请联系管理员");
+        }
 
         String linkByMiniApp = createLinkByMiniAppGeneral(new Date(), qwGroupMsgParam.getCourseId(), qwGroupMsgParam.getVideoId(), qwUser, 0L,2,null,1);
 
         msgTemplate.setSender(qwGroupMsgParam.getSender().trim());
         msgTemplate.setMiniprogramAppid(qwCompany.getMiniAppId());
         msgTemplate.setMiniprogramTitle(qwGroupMsgParam.getMiniprogramTitle());
-        msgTemplate.setMiniprogramPicMediaId("mediaId");
+        msgTemplate.setMiniprogramPicMediaId(mediaId);
         msgTemplate.setMiniprogramPage(linkByMiniApp);
 
         qwGroupMsgItem.setMsgType(3);
         qwGroupMsgItem.setMiniprogramTitle(qwGroupMsgParam.getMiniprogramTitle());
         qwGroupMsgItem.setMiniprogramAppid(qwCompany.getMiniAppId());
         qwGroupMsgItem.setMiniprogramPicUrl(qwGroupMsgParam.getMiniprogramPicUrl());
-        qwGroupMsgItem.setMiniprogramPicMediaId("mediaId");
+        qwGroupMsgItem.setMiniprogramPicMediaId(mediaId);
         qwGroupMsgItem.setMiniprogramPage(linkByMiniApp);
 
 
@@ -811,6 +811,7 @@ public class QwGroupMsgServiceImpl implements IQwGroupMsgService
         msgTemplate.setTextContent(qwGroupMsgParam.getTextContent());
         msgTemplate.setType(3);
 
+        logger.info("侧边栏请求参数:-"+msgTemplate);
         QwAddMsgTemplateResult qwAddMsgTemplateResult = qwApiService.addMsgTemplate(msgTemplate, qwGroupMsgParam.getCorpId());
 
         qwGroupMsg.setMsgid(qwAddMsgTemplateResult.getMsgId() == null ? null : qwAddMsgTemplateResult.getMsgId());