1811872455@163.com hai 3 semanas
pai
achega
3de20be54e

+ 7 - 0
storlead-centre-api/src/main/java/com/storlead/centre/system/UserApiController.java

@@ -264,6 +264,13 @@ public class UserApiController {
        return Result.ok();
     }
 
+    @ApiOperation("同步OA数据")
+    @PostMapping("syncWxId")
+    public Result syncOasyncWxId() {
+        userService.syncWxId();
+        return Result.ok();
+    }
+
     @ApiOperation("重置密码")
     @PostMapping("resetPassword")
     public Result resetPassword(Long userId) {

+ 0 - 15
storlead-centre-api/src/main/resources/application-dev.yml

@@ -109,21 +109,6 @@ spring:
           url: jdbc:mysql://mysql.test.storlead.com:39091/sp_unified_service_test?useSSL=false&useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true
           username: root
           password: rCgRgLjH99Xvg5BN
-
-#          driver-class-name: com.mysql.jdbc.Driver
-#          url: jdbc:mysql://139.159.206.64:65369/sp_sales_system_prod?useSSL=false&useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&rewriteBatchedStatements=true
-#          username: sp_sales_prod
-#          password: MsKLJue01MLIYnd2*0ReMQ
-        management:
-          driver-class-name: com.mysql.jdbc.Driver
-          url: jdbc:mysql://mysql.test.storlead.com:39091/storlead_test?useSSL=false&autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&noDatetimeStringSync=true&serverTimezone=Asia/Shanghai
-          username: root
-          password: rCgRgLjH99Xvg5BN
-
-#          driver-class-name: com.mysql.jdbc.Driver
-#          url: jdbc:mysql://139.159.206.64:65369/storlead_prod?useSSL=false&useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&rewriteBatchedStatements=true
-#          username: storlead_platform
-#          password: QkfgG7Cw6E&*PlvYYw==oBfjSf2zw
         oa:
           driver-class-name: com.mysql.jdbc.Driver
           url: jdbc:mysql://139.159.206.64:65369/storlead_ecology_prod?useSSL=false&useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true

+ 1 - 1
storlead-framework/storlead-web/src/main/java/com/storlead/framework/web/enums/ErrorMsgCode.java

@@ -10,7 +10,7 @@ public enum ErrorMsgCode {
     /** 协议级返回码 */
     UPGRADE(100, "您当前版本需要升级"),
     UPGRADE_DATA(101, "需更新配置或数据"),
-    SUCCESS(200, "操作成功"),
+    SUCCESS(200, "操作成功1"),
     REDIRECT(300, "重定向"),
     LOGIN_FAIL(401, "登陆鉴权失败"),
     PARAMETER_FAIL(400, "参数错误"),

+ 1 - 1
storlead-framework/storlead-web/src/main/java/com/storlead/framework/web/enums/ResultCode.java

@@ -11,7 +11,7 @@ public enum ResultCode {
     /**
      * 操作成功
      */
-    SC_OK_200(200, "操作成功"),
+    SC_OK_200(200, "操作成功3"),
 
     FAILED(-1, "处理失败"),
 

+ 234 - 0
storlead-framework/storlead-web/src/main/java/com/storlead/framework/web/handler/ExceptionHandler.java

@@ -0,0 +1,234 @@
+package com.storlead.framework.web.handler;
+
+import com.storlead.framework.web.assemble.Result;
+import com.storlead.framework.web.exception.DaoException;
+import com.storlead.framework.web.exception.TopException;
+import com.storlead.framework.web.message.MsgCode;
+import com.storlead.framework.web.message.TopMsgCode;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.dao.DataAccessException;
+import org.springframework.dao.DataIntegrityViolationException;
+import org.springframework.dao.DuplicateKeyException;
+import org.springframework.data.redis.connection.PoolException;
+import org.springframework.http.converter.HttpMessageConversionException;
+import org.springframework.http.converter.HttpMessageNotReadableException;
+import org.springframework.validation.BindException;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.FieldError;
+import org.springframework.validation.ObjectError;
+import org.springframework.web.HttpRequestMethodNotSupportedException;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+import org.springframework.web.multipart.MaxUploadSizeExceededException;
+import org.springframework.web.servlet.NoHandlerFoundException;
+
+import javax.validation.ConstraintViolation;
+import javax.validation.ConstraintViolationException;
+import javax.validation.ValidationException;
+import java.sql.SQLException;
+import java.util.*;
+
+/**
+ * @program: storlead-centre-platform
+ * @description:
+ * @author: chenkq
+ * @create: 2025-12-23 10:57
+ */
+@Slf4j
+@RestControllerAdvice
+public class ExceptionHandler {
+
+    private final boolean ONLINE = StringUtils
+            .startsWithIgnoreCase(StringUtils.isNotBlank(System.getProperty("spring.profiles.active"))
+                    ? System.getProperty("spring.profiles.active")
+                    : System.getProperty("spring.profiles.default"), "prod");
+    /**
+     * 校验错误拦截处理
+     *
+     * @param exception 错误信息集合
+     * @return 错误信息
+     */
+    @org.springframework.web.bind.annotation.ExceptionHandler(MethodArgumentNotValidException.class)
+    public Result<?> validationBodyException(MethodArgumentNotValidException exception) {
+        BindingResult result = exception.getBindingResult();
+        String message = "";
+        if (result.hasErrors()) {
+            List<ObjectError> errors = result.getAllErrors();
+            if (errors != null) {
+                errors.forEach(p -> {
+                    FieldError fieldError = (FieldError) p;
+                    log.error("Data check failure : object{" + fieldError.getObjectName() + "},field{" + fieldError.getField() +
+                            "},errorMessage{" + fieldError.getDefaultMessage() + "}");
+
+                });
+                if (errors.size() > 0) {
+                    FieldError fieldError = (FieldError) errors.get(0);
+                    message = fieldError.getDefaultMessage();
+                }
+            }
+        }
+        return Result.error("".equals(message) ? "请填写正确信息" : message);
+    }
+
+    @org.springframework.web.bind.annotation.ExceptionHandler(NoHandlerFoundException.class)
+    public Result<?> handlerNoFoundException(Exception e) {
+        log.error(e.getMessage(), e);
+        return Result.error(404, "路径不存在,请检查路径是否正确");
+    }
+
+    @org.springframework.web.bind.annotation.ExceptionHandler(DuplicateKeyException.class)
+    public Result<?> handleDuplicateKeyException(DuplicateKeyException e){
+        log.error(e.getMessage(), e);
+        return Result.error("数据库中已存在该记录");
+    }
+
+//	@ExceptionHandler(Exception.class)
+//	public Result<?> handleException(Exception e){
+//		log.error(e.getMessage(), e);
+//		return Result.error("操作失败,"+e.getMessage());
+//	}
+
+    @org.springframework.web.bind.annotation.ExceptionHandler(HttpMessageConversionException.class)
+    public Result<?> invalidFormatException(HttpMessageConversionException e){
+        log.error("invalidFormatException --- error --", e);
+        return Result.error("操作失败----,"+e.getMessage());
+    }
+
+    @org.springframework.web.bind.annotation.ExceptionHandler(HttpMessageNotReadableException.class)
+    public Result<?> httpMessageNotReadableException(HttpMessageNotReadableException e){
+        log.error("httpMessageNotReadableException --- error --", e);
+        return Result.error("操作失败,参数转换失败,请校验传入参数类型是否正确!");
+    }
+
+    /**
+     * @Author 政辉
+     * @param e
+     * @return
+     */
+    @org.springframework.web.bind.annotation.ExceptionHandler(HttpRequestMethodNotSupportedException.class)
+    public Result<?> HttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e){
+        StringBuffer sb = new StringBuffer();
+        sb.append("不支持");
+        sb.append(e.getMethod());
+        sb.append("请求方法,");
+        sb.append("支持以下");
+        String [] methods = e.getSupportedMethods();
+        if(methods!=null){
+            for(String str:methods){
+                sb.append(str);
+                sb.append("、");
+            }
+        }
+        log.error(sb.toString(), e);
+        //return Result.error("没有权限,请联系管理员授权");
+        log.error("HttpRequestMethodNotSupportedException --- error --", e);
+        return Result.error(405,sb.toString());
+    }
+
+    /**
+     * spring默认上传大小100MB 超出大小捕获异常MaxUploadSizeExceededException
+     */
+    @org.springframework.web.bind.annotation.ExceptionHandler(MaxUploadSizeExceededException.class)
+    public Result<?> handleMaxUploadSizeExceededException(MaxUploadSizeExceededException e) {
+        log.error("handleMaxUploadSizeExceededException --- error --", e);
+        return Result.error("文件大小超出最大限制, 请压缩或降低文件质量! ");
+    }
+
+    @org.springframework.web.bind.annotation.ExceptionHandler(DataIntegrityViolationException.class)
+    public Result<?> handleDataIntegrityViolationException(DataIntegrityViolationException e) {
+        log.error("handleDataIntegrityViolationException --- error --", e);
+        return Result.error("数据完整性异常");
+//        return Result.error("字段太长,超出数据库字段的长度");
+    }
+
+    @org.springframework.web.bind.annotation.ExceptionHandler(PoolException.class)
+    public Result<?> handlePoolException(PoolException e) {
+        log.error("handlePoolException --- error --", e);
+        return Result.error("Redis 连接异常!");
+    }
+
+
+    @org.springframework.web.bind.annotation.ExceptionHandler({ ConstraintViolationException.class, ValidationException.class, BindException.class })
+    public Result onValidationException(Exception e) {
+        Map<String, String> errorMessage;
+        if (e instanceof BindException) {
+            errorMessage = getErrorMessage((BindException) e);
+        } else if (e instanceof ConstraintViolationException) {
+            errorMessage = getErrorMessage((ConstraintViolationException) e);
+        } else {
+            throw new IllegalArgumentException("接收到不合理异常,无法处理,请检查编程错误", e);
+        }
+        log.error("onValidationException --- error --", e);
+        return createWebResult(TopMsgCode.FORM_VALIDATE_ERROR, errorMessage);
+    }
+
+    //getBindingResult
+    private static Map<String, String> getErrorMessage(BindException e) {
+        BindingResult result = e.getBindingResult();
+        List<ObjectError> errors = result.getAllErrors();
+        if (errors == null || errors.isEmpty()) {
+            return Collections.emptyMap();
+        }
+        Map<String, String> builder = new HashMap();
+        //Builder<String, String> builder = ImmutableMap.builder();
+        for (ObjectError oe : errors) {
+            if (oe instanceof FieldError) {
+                FieldError fe = (FieldError) oe;
+                builder.put(fe.getField(), fe.getDefaultMessage());
+            }
+        }
+        return builder;
+    }
+
+    private static Map<String, String> getErrorMessage(ConstraintViolationException e) {
+        Set<ConstraintViolation<?>> violations = e.getConstraintViolations();
+        if (violations == null || violations.isEmpty()) {
+            return Collections.emptyMap();
+        } else {
+            Map<String, String> builder = new HashMap();
+            for (ConstraintViolation<?> v : violations) {
+                builder.put(v.getPropertyPath().toString(), v.getMessage());
+            }
+            return builder;
+        }
+    }
+
+    @org.springframework.web.bind.annotation.ExceptionHandler({ DaoException.class, DataAccessException.class, SQLException.class })
+    public Result onDaoException(Exception e) {
+        log.error("onDaoException --- error --", e);
+        if (ONLINE) {
+            return createWebResult(TopMsgCode.DAO_ERROR, "数据库访问错误");
+        } else {
+            return createWebResult(TopMsgCode.DAO_ERROR, e.getMessage());
+        }
+    }
+
+    @org.springframework.web.bind.annotation.ExceptionHandler(TopException.class)
+    public Result onTopException(TopException e) {
+        log.error("onTopException --- error --", e);
+        return createWebResult(e.getCode(), e.getMessage());
+    }
+
+    @org.springframework.web.bind.annotation.ExceptionHandler
+    public Result onOtherException(Exception e) {
+        log.error("onOtherException --- error --", e);
+        if (ONLINE) {
+            return createWebResult(TopMsgCode.OTHER_ERROR, "未知异常");
+        } else {
+            return createWebResult(TopMsgCode.OTHER_ERROR, e.getMessage());
+        }
+    }
+
+    private static Result createWebResult(MsgCode msgCode, Object value) {
+        Result resp = createWebResult(msgCode,null);
+        resp.setResult(value);
+        return resp;
+    }
+
+    private static Result createWebResult(MsgCode msgCode, String message) {
+        return Result.error(msgCode.code(), StringUtils.isNotBlank(message) ? message : msgCode.message());
+    }
+
+
+}

+ 1 - 1
storlead-framework/storlead-web/src/main/java/com/storlead/framework/web/message/TopMsgCode.java

@@ -7,7 +7,7 @@ public enum TopMsgCode implements MsgCode{
     ERROR(-1, "操作失败"), //
     UPGRADE(100, "您当前版本需要升级"), //
     UPGRADE_DATA(101, "需更新配置或数据"), //
-    SUCCESS(200, "操作成功"), //
+    SUCCESS(200, "操作成功2"), //
     REDIRECT(300, "重定向"), //
     LOGIN_FAIL(401, "登陆鉴权失败"), //
     FORBIDDEN(403, "权限不足"), //

+ 54 - 54
storlead-framework/storlead-web/src/main/java/com/storlead/framework/web/message/WebResp.java

@@ -1,54 +1,54 @@
-package com.storlead.framework.web.message;
-
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.io.Serializable;
-
-@Data
-@NoArgsConstructor
-public class WebResp<T> implements Serializable {
-    /**
-     * code 码
-     */
-    private int code ;
-    /**
-     * 错误时 返回错误信息数据
-     */
-    private String message;
-
-    /**
-     * data
-     */
-    private T data;
-
-    public WebResp (int code,String message) {
-        this(code,message,null);
-    }
-
-    public WebResp(T value) {
-        this(value, null);
-    }
-
-    public WebResp(T value, String message) {
-        this(200, "操作成功", value);
-    }
-
-    public WebResp(int code, String message, T data) {
-        this.code = code;
-        this.message = message;
-        this.data = data;
-    }
-
-    public static <T> WebResp<T> failure() {
-        return new WebResp<T>(TopMsgCode.ERROR.code(),TopMsgCode.ERROR.message());
-    }
-
-    public static <T> WebResp<T> failure(String message) {
-        return new WebResp<T>(TopMsgCode.ERROR.code(),message);
-    }
-
-    public static <T> WebResp<T> success() {
-        return new WebResp<T>(TopMsgCode.SUCCESS.code(),TopMsgCode.SUCCESS.message());
-    }
-}
+//package com.storlead.framework.web.message;
+//
+//import lombok.Data;
+//import lombok.NoArgsConstructor;
+//
+//import java.io.Serializable;
+//
+//@Data
+//@NoArgsConstructor
+//public class WebResp<T> implements Serializable {
+//    /**
+//     * code 码
+//     */
+//    private int code ;
+//    /**
+//     * 错误时 返回错误信息数据
+//     */
+//    private String message;
+//
+//    /**
+//     * data
+//     */
+//    private T data;
+//
+//    public WebResp (int code,String message) {
+//        this(code,message,null);
+//    }
+//
+//    public WebResp(T value) {
+//        this(value, null);
+//    }
+//
+//    public WebResp(T value, String message) {
+//        this(200, "操作成功", value);
+//    }
+//
+//    public WebResp(int code, String message, T data) {
+//        this.code = code;
+//        this.message = message;
+//        this.data = data;
+//    }
+//
+//    public static <T> WebResp<T> failure() {
+//        return new WebResp<T>(TopMsgCode.ERROR.code(),TopMsgCode.ERROR.message());
+//    }
+//
+//    public static <T> WebResp<T> failure(String message) {
+//        return new WebResp<T>(TopMsgCode.ERROR.code(),message);
+//    }
+//
+//    public static <T> WebResp<T> success() {
+//        return new WebResp<T>(TopMsgCode.SUCCESS.code(),TopMsgCode.SUCCESS.message());
+//    }
+//}

+ 135 - 135
storlead-framework/storlead-web/src/main/java/com/storlead/framework/web/process/ApiResultHandler.java

@@ -1,140 +1,140 @@
-package com.storlead.framework.web.process;
-
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.storlead.framework.web.message.WebResp;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.core.MethodParameter;
-import org.springframework.http.MediaType;
-import org.springframework.http.converter.HttpMessageConverter;
-import org.springframework.http.server.ServerHttpRequest;
-import org.springframework.http.server.ServerHttpResponse;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
-
-import java.lang.reflect.AnnotatedElement;
-import java.lang.reflect.Array;
-import java.util.*;
-
-@ControllerAdvice
-public class ApiResultHandler implements ResponseBodyAdvice<Object> {
-    private List<String> modulePackages;
-
-    private static final Class[] annos = {
-            RequestMapping.class
-            , GetMapping.class
-            , PostMapping.class
-            , DeleteMapping.class
-            , PutMapping.class
-    };
-
+//package com.storlead.framework.web.process;
+//
+//import com.fasterxml.jackson.core.JsonParser;
+//import com.fasterxml.jackson.databind.DeserializationFeature;
+//import com.fasterxml.jackson.databind.ObjectMapper;
+//import com.storlead.framework.web.message.WebResp;
+//import org.apache.commons.lang3.StringUtils;
+//import org.springframework.core.MethodParameter;
+//import org.springframework.http.MediaType;
+//import org.springframework.http.converter.HttpMessageConverter;
+//import org.springframework.http.server.ServerHttpRequest;
+//import org.springframework.http.server.ServerHttpResponse;
+//import org.springframework.web.bind.annotation.*;
+//import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
+//
+//import java.lang.reflect.AnnotatedElement;
+//import java.lang.reflect.Array;
+//import java.util.*;
+//
+//@ControllerAdvice
+//public class ApiResultHandler implements ResponseBodyAdvice<Object> {
+//    private List<String> modulePackages;
+//
+//    private static final Class[] annos = {
+//            RequestMapping.class
+//            , GetMapping.class
+//            , PostMapping.class
+//            , DeleteMapping.class
+//            , PutMapping.class
+//    };
+//
+////    @Override
+////    public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
+////        return supports(returnType, modulePackages);
+////    }
+//
 //    @Override
-//    public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
-//        return supports(returnType, modulePackages);
+//    public boolean supports(MethodParameter returnType, Class converterType) {
+//        AnnotatedElement element = returnType.getAnnotatedElement();
+//        return Arrays.stream(annos).anyMatch(anno -> anno.isAnnotation() && element.isAnnotationPresent(anno));
 //    }
-
-    @Override
-    public boolean supports(MethodParameter returnType, Class converterType) {
-        AnnotatedElement element = returnType.getAnnotatedElement();
-        return Arrays.stream(annos).anyMatch(anno -> anno.isAnnotation() && element.isAnnotationPresent(anno));
-    }
-
-//    public static boolean supports(MethodParameter returnType, List<String> modulePackages) {
-//        Class<?> declaringClass = returnType.getDeclaringClass();
-//        return belongOwn(modulePackages, declaringClass.getPackage().getName());
-////                declaringClass.getAnnotation(UnWarp.class) == null
-////                && returnType.getMethodAnnotation(Unwrap.class) == null
-////                && belongOwn(modulePackages, declaringClass.getPackage().getName());
+//
+////    public static boolean supports(MethodParameter returnType, List<String> modulePackages) {
+////        Class<?> declaringClass = returnType.getDeclaringClass();
+////        return belongOwn(modulePackages, declaringClass.getPackage().getName());
+//////                declaringClass.getAnnotation(UnWarp.class) == null
+//////                && returnType.getMethodAnnotation(Unwrap.class) == null
+//////                && belongOwn(modulePackages, declaringClass.getPackage().getName());
+////    }
+//
+//    public static boolean belongOwn(List<String> modulePackages, String declaringPackageName) {
+//        for (String modulePackage : modulePackages) {
+//            if (declaringPackageName.startsWith(modulePackage)) {
+//                return true;
+//            }
+//        }
+//        return false;
 //    }
-
-    public static boolean belongOwn(List<String> modulePackages, String declaringPackageName) {
-        for (String modulePackage : modulePackages) {
-            if (declaringPackageName.startsWith(modulePackage)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * 数据返回之前   处理数据
-     **/
-    @Override
-    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
-                                  Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request,
-                                  ServerHttpResponse response) {
-
-        if (MediaType.TEXT_EVENT_STREAM.includes(selectedContentType)) {
-            return body;
-        }
-
-        Object data = wrapIfNeed(body, returnType);
-        String selectedConverterTypeClassName = selectedConverterType.getName();
-        // selectedConverterType 对象是  StringHttpMessageConverter时, 表示不能直接返回  WebResp, 要不然会报错      org.springframework.http.converter.StringHttpMessageConverter
-        if (selectedConverterTypeClassName.indexOf("StringHttpMessageConverter") >= 0) {    // 如果是返回  string 类型的, 就返回 string 类型的
-            if (data instanceof WebResp) {
-                ObjectMapper mapper = new ObjectMapper();
-                mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
-                mapper.enable(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS);
-                mapper.enable(DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT);
-                mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
-                try {
-                    return mapper.writeValueAsString(data);
-                } catch (Exception e) {
-                    return data;
-                }
-            } else {
-                return data;
-            }
-        } else {    // 返回 对象的
-            return data;
-        }
-    }
-
-    public static Object wrapIfNeed(Object body, MethodParameter returnType) {
-        if (body instanceof WebResp) {
-            return body;
-        } else {
-            if (body != null) {
-                return new WebResp(body);
-            } else if(body == null) {
-                return new WebResp("");
-            }
-            return new WebResp(getDefaultValue(returnType));
-        }
-    }
-
-    public static Object getDefaultValue(MethodParameter returnType) {
-        Class<?> bodyType = returnType.getParameterType();
-        return getDefaultValue(bodyType);
-    }
-
-    private static Object getDefaultValue(Class<?> bodyType) {
-        final Object body;
-        if (bodyType.isArray()) {
-            body = Array.newInstance(bodyType.getComponentType(), 0);
-        } else if (List.class.isAssignableFrom(bodyType)) {
-            body = Collections.emptyList();
-        } else if (Set.class.isAssignableFrom(bodyType)) {
-            body = Collections.emptySet();
-        } else if (Map.class.isAssignableFrom(bodyType)) {
-            body = Collections.emptyMap();
-        } else if (String.class.isAssignableFrom(bodyType)) {
-            body = StringUtils.EMPTY;
-        } else {
-            body = bodyType;
-        }
-        return body;
-    }
-
-//BeansException
+//
+//    /**
+//     * 数据返回之前   处理数据
+//     **/
 //    @Override
-//    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
-////        List<String> modulePackages = FrameworkAutoConfigurationPackages.get(beanFactory);
-////        List<String> modulePackageList = new ArrayList<>(modulePackages.size() + 1);
-////        modulePackageList.addAll(modulePackages);
-////        modulePackageList.add(PageResp.class.getPackage().getName());
-//        this.modulePackages = null;//= modulePackageList;
+//    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
+//                                  Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request,
+//                                  ServerHttpResponse response) {
+//
+//        if (MediaType.TEXT_EVENT_STREAM.includes(selectedContentType)) {
+//            return body;
+//        }
+//
+//        Object data = wrapIfNeed(body, returnType);
+//        String selectedConverterTypeClassName = selectedConverterType.getName();
+//        // selectedConverterType 对象是  StringHttpMessageConverter时, 表示不能直接返回  WebResp, 要不然会报错      org.springframework.http.converter.StringHttpMessageConverter
+//        if (selectedConverterTypeClassName.indexOf("StringHttpMessageConverter") >= 0) {    // 如果是返回  string 类型的, 就返回 string 类型的
+//            if (data instanceof WebResp) {
+//                ObjectMapper mapper = new ObjectMapper();
+//                mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
+//                mapper.enable(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS);
+//                mapper.enable(DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT);
+//                mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
+//                try {
+//                    return mapper.writeValueAsString(data);
+//                } catch (Exception e) {
+//                    return data;
+//                }
+//            } else {
+//                return data;
+//            }
+//        } else {    // 返回 对象的
+//            return data;
+//        }
 //    }
-}
+//
+//    public static Object wrapIfNeed(Object body, MethodParameter returnType) {
+//        if (body instanceof WebResp) {
+//            return body;
+//        } else {
+//            if (body != null) {
+//                return new WebResp(body);
+//            } else if(body == null) {
+//                return new WebResp("");
+//            }
+//            return new WebResp(getDefaultValue(returnType));
+//        }
+//    }
+//
+//    public static Object getDefaultValue(MethodParameter returnType) {
+//        Class<?> bodyType = returnType.getParameterType();
+//        return getDefaultValue(bodyType);
+//    }
+//
+//    private static Object getDefaultValue(Class<?> bodyType) {
+//        final Object body;
+//        if (bodyType.isArray()) {
+//            body = Array.newInstance(bodyType.getComponentType(), 0);
+//        } else if (List.class.isAssignableFrom(bodyType)) {
+//            body = Collections.emptyList();
+//        } else if (Set.class.isAssignableFrom(bodyType)) {
+//            body = Collections.emptySet();
+//        } else if (Map.class.isAssignableFrom(bodyType)) {
+//            body = Collections.emptyMap();
+//        } else if (String.class.isAssignableFrom(bodyType)) {
+//            body = StringUtils.EMPTY;
+//        } else {
+//            body = bodyType;
+//        }
+//        return body;
+//    }
+//
+////BeansException
+////    @Override
+////    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
+//////        List<String> modulePackages = FrameworkAutoConfigurationPackages.get(beanFactory);
+//////        List<String> modulePackageList = new ArrayList<>(modulePackages.size() + 1);
+//////        modulePackageList.addAll(modulePackages);
+//////        modulePackageList.add(PageResp.class.getPackage().getName());
+////        this.modulePackages = null;//= modulePackageList;
+////    }
+//}

+ 2 - 0
storlead-user/src/main/java/com/storlead/user/service/IUserService.java

@@ -58,6 +58,8 @@ public interface IUserService extends MyBaseService<UserEntity> {
 	 */
 	Boolean syncOa();
 
+	Boolean syncWxId();
+
 	/**
 	 * 同步OA公司
 	 *

+ 4 - 0
storlead-user/src/main/java/com/storlead/user/service/impl/UserServiceImpl.java

@@ -151,6 +151,10 @@ public class UserServiceImpl extends MyBaseServiceImpl<UserMapper, UserEntity> i
 		return true;
 	}
 
+	@Override
+	public Boolean syncWxId() {
+		 return syncUserOpenIdFormTencent();
+	}
 	/**
 	 * 同步project公司
 	 *