(WxCUser.class);
- // value值的序列化
- template.setValueSerializer(j);
- template.setHashKeySerializer(j);
-
- // key的序列化
- template.setKeySerializer(new StringRedisSerializer());
- template.setHashKeySerializer(new StringRedisSerializer());
-
- template.setConnectionFactory(connectionFactory);
- return template;
- }
-
-}
diff --git a/mallinkWechatOpen/src/main/java/com/iformall/config/RedisProperies.java b/mallinkWechatOpen/src/main/java/com/iformall/config/RedisProperies.java
deleted file mode 100644
index 21602ae47..000000000
--- a/mallinkWechatOpen/src/main/java/com/iformall/config/RedisProperies.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package com.iformall.config;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import redis.clients.jedis.JedisPoolConfig;
-import redis.clients.jedis.Protocol;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.SSLParameters;
-import javax.net.ssl.SSLSocketFactory;
-
-/**
- * Stormeye
- */
-@ConfigurationProperties(prefix = "wechat.redis")
-public class RedisProperies extends JedisPoolConfig {
- private String host = Protocol.DEFAULT_HOST;
- private int port = Protocol.DEFAULT_PORT;
- private String password;
- private int database = 1;
- private int connectionTimeout = Protocol.DEFAULT_TIMEOUT;
- private int soTimeout = Protocol.DEFAULT_TIMEOUT;
- private String clientName;
- private boolean ssl;
- private SSLSocketFactory sslSocketFactory;
- private SSLParameters sslParameters;
- private HostnameVerifier hostnameVerifier;
-
- public boolean isSsl() {
- return ssl;
- }
-
- public void setSsl(boolean ssl) {
- this.ssl = ssl;
- }
-
- public SSLSocketFactory getSslSocketFactory() {
- return sslSocketFactory;
- }
-
- public void setSslSocketFactory(SSLSocketFactory sslSocketFactory) {
- this.sslSocketFactory = sslSocketFactory;
- }
-
- public SSLParameters getSslParameters() {
- return sslParameters;
- }
-
- public void setSslParameters(SSLParameters sslParameters) {
- this.sslParameters = sslParameters;
- }
-
- public HostnameVerifier getHostnameVerifier() {
- return hostnameVerifier;
- }
-
- public void setHostnameVerifier(HostnameVerifier hostnameVerifier) {
- this.hostnameVerifier = hostnameVerifier;
- }
-
- public String getHost() {
- return host;
- }
-
- public void setHost(String host) {
- if (host == null || "".equals(host)) {
- host = Protocol.DEFAULT_HOST;
- }
- this.host = host;
- }
-
- public int getPort() {
- return port;
- }
-
- public void setPort(int port) {
- this.port = port;
- }
-
- public String getPassword() {
- return password;
- }
-
- public void setPassword(String password) {
- if ("".equals(password)) {
- password = null;
- }
- this.password = password;
- }
-
- public int getDatabase() {
- return database;
- }
-
- public void setDatabase(int database) {
- this.database = database;
- }
-
- public String getClientName() {
- return clientName;
- }
-
- public void setClientName(String clientName) {
- if ("".equals(clientName)) {
- clientName = null;
- }
- this.clientName = clientName;
- }
-
- public int getConnectionTimeout() {
- return connectionTimeout;
- }
-
- public void setConnectionTimeout(int connectionTimeout) {
- this.connectionTimeout = connectionTimeout;
- }
-
- public int getSoTimeout() {
- return soTimeout;
- }
-
- public void setSoTimeout(int soTimeout) {
- this.soTimeout = soTimeout;
- }
-}
diff --git a/mallinkWechatOpen/src/main/java/com/iformall/config/RestFilter.java b/mallinkWechatOpen/src/main/java/com/iformall/config/RestFilter.java
deleted file mode 100644
index 4f9298433..000000000
--- a/mallinkWechatOpen/src/main/java/com/iformall/config/RestFilter.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package com.iformall.config;
-
-import java.io.IOException;
-import java.util.Optional;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * 前后端分离RESTful接口过滤器
- *
- * @author xuguoqin
- *
- */
-public class RestFilter implements Filter {
-
- @Override
- public void init(FilterConfig filterConfig) throws ServletException {
-
- }
-
- @Override
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
- throws IOException, ServletException {
- HttpServletRequest req = null;
- if (request instanceof HttpServletRequest) {
- req = (HttpServletRequest) request;
- }
- HttpServletResponse res = null;
- if (response instanceof HttpServletResponse) {
- res = (HttpServletResponse) response;
- }
- if (req != null && res != null) {
- //设置允许传递的参数
- res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
- //设置允许带上cookie
- res.setHeader("Access-Control-Allow-Credentials", "true");
- String origin = Optional.ofNullable(req.getHeader("Origin")).orElse(req.getHeader("Referer"));
- //设置允许的请求来源
- res.setHeader("Access-Control-Allow-Origin", origin);
- //设置允许的请求方法
- res.setHeader("Access-Control-Allow-Methods", "GET, POST, PATCH, PUT, DELETE, OPTIONS");
- }
- chain.doFilter(request, response);
- }
-
- @Override
- public void destroy() {
-
- }
-
-}
\ No newline at end of file
diff --git a/mallinkWechatOpen/src/main/java/com/iformall/config/RestTemplateConfig.java b/mallinkWechatOpen/src/main/java/com/iformall/config/RestTemplateConfig.java
deleted file mode 100644
index 560a77cb5..000000000
--- a/mallinkWechatOpen/src/main/java/com/iformall/config/RestTemplateConfig.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.iformall.config;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.http.client.ClientHttpRequestFactory;
-import org.springframework.http.client.SimpleClientHttpRequestFactory;
-import org.springframework.web.client.RestTemplate;
-
-@Configuration
-public class RestTemplateConfig {
-
- @Bean
- public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
- return new RestTemplate(factory);
- }
-
- @Bean
- public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
- SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
- factory.setReadTimeout(5000);//ms
- factory.setConnectTimeout(10000);//ms
- return factory;
- }
-}
\ No newline at end of file
diff --git a/mallinkWechatOpen/src/main/java/com/iformall/config/ShiroConfig.java b/mallinkWechatOpen/src/main/java/com/iformall/config/ShiroConfig.java
deleted file mode 100644
index e41df9ae1..000000000
--- a/mallinkWechatOpen/src/main/java/com/iformall/config/ShiroConfig.java
+++ /dev/null
@@ -1,303 +0,0 @@
-package com.iformall.config;
-
-import com.iformall.service.MallPermissionService;
-import com.iformall.shiro.MyRetryLimitCredentialsMatcher;
-import com.iformall.shiro.MyShiroRealm;
-import org.apache.shiro.mgt.SecurityManager;
-import org.apache.shiro.spring.LifecycleBeanPostProcessor;
-import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
-import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
-import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
-import org.apache.shiro.web.servlet.SimpleCookie;
-import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
-import org.crazycake.shiro.RedisCacheManager;
-import org.crazycake.shiro.RedisManager;
-import org.crazycake.shiro.RedisSessionDAO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import javax.servlet.Filter;
-import javax.servlet.ServletRequest;
-import javax.servlet.http.HttpServletRequest;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-
-/**
- * Created by yangqj on 2017/4/23.
- */
-@Configuration
-public class ShiroConfig {
- @Autowired(required = false)
- private MallPermissionService resourcesService;
-
- @Value("${spring.redis.host}")
- private String host;
-
- @Value("${spring.redis.port}")
- private int port;
-
- @Value("${spring.redis.timeout}")
- private int timeout;
-
- @Value("${spring.redis.expire}")
- private int expire;
-
- @Value("${spring.redis.password}")
- private String password;
-
- @Bean
- public static LifecycleBeanPostProcessor getLifecycleBeanPostProcessor() {
- return new LifecycleBeanPostProcessor();
- }
-
- /**
- * ShiroDialect,为了在thymeleaf里使用shiro的标签的bean
- * @return
- */
-// @Bean
-// public ShiroDialect shiroDialect() {
-// return new ShiroDialect();
-// }
-
- /**
- * ShiroFilterFactoryBean 处理拦截资源文件问题。
- * 注意:单独一个ShiroFilterFactoryBean配置是或报错的,因为在
- * 初始化ShiroFilterFactoryBean的时候需要注入:SecurityManager
- *
- * Filter Chain定义说明
- * 1、一个URL可以配置多个Filter,使用逗号分隔
- * 2、当设置多个过滤器时,全部验证通过,才视为通过
- * 3、部分过滤器可指定参数,如perms,roles
- */
- @Bean
- public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) {
- System.out.println("ShiroConfiguration.shirFilter()");
- ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
- // 必须设置 SecurityManager
- shiroFilterFactoryBean.setSecurityManager(securityManager);
- Map filters = new LinkedHashMap();
- filters.put("token", new ShiroLoginFilter());
- filters.put("corsFilter", new RestFilter());
- //filters.put("authc", new MyFormAuthenticationFilter());
- shiroFilterFactoryBean.setFilters(filters);
- // 如果不设置默认会自动寻找Web工程根目录下的"/login.jsp"页面
- shiroFilterFactoryBean.setLoginUrl("/#/");
- // 登录成功后要跳转的链接
-
- shiroFilterFactoryBean.setSuccessUrl("/usersPage");
- //未授权界面;
- shiroFilterFactoryBean.setUnauthorizedUrl("/403");
- //拦截器.
- Map filterChainDefinitionMap = new LinkedHashMap();
-
- //配置退出 过滤器,其中的具体的退出代码Shiro已经替我们实现了
-
- //filterChainDefinitionMap.put("/ue/**", "anon");
- //filterChainDefinitionMap.put("/config.json", "anon");
-
- // 静态文件
- filterChainDefinitionMap.put("/css/**", "anon");
- filterChainDefinitionMap.put("/js/**", "anon");
- filterChainDefinitionMap.put("/img/**", "anon");
- filterChainDefinitionMap.put("/font-awesome/**", "anon");
- //:这是一个坑呢,一不小心代码就不好使了;
- //
- //自定义加载权限资源关系
-// Map map = new HashMap<>();
-// List resourcesList = resourcesService.list(map);
-// for(SysPermission resources:resourcesList){
-//
-// if (StringUtil.isNotEmpty(resources.getUrl())) {
-// String permission = "perms[" + resources.getUrl()+ "]";
-// filterChainDefinitionMap.put(resources.getUrl(),permission);
-// }
-// }
-
- // 登录
- filterChainDefinitionMap.put("/captcha.jpg", "anon");
- filterChainDefinitionMap.put("/doLogin/**", "anon");
- filterChainDefinitionMap.put("/version", "anon");
-
- /// swagger-ui.html
- filterChainDefinitionMap.put("/swagger-ui.html", "anon");
- filterChainDefinitionMap.put("/v2/**", "anon");
- filterChainDefinitionMap.put("/swagger-resources/**", "anon");
- filterChainDefinitionMap.put("/webjars/**", "anon");
-
- // 第三方平台
- filterChainDefinitionMap.put("/wxOpen/**", "anon");
-
-
-// filterChainDefinitionMap.put("/role/**", "corsFilter,token");
- filterChainDefinitionMap.put("/**", "corsFilter,token,authc");
-// filterChainDefinitionMap.put("/**", "anon");
-
-
- shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
- return shiroFilterFactoryBean;
- }
-
-
- public static boolean isAjax(ServletRequest request) {
- String header = ((HttpServletRequest) request).getHeader("X-Requested-With");
- if ("XMLHttpRequest".equalsIgnoreCase(header)) {
- System.out.println("当前请求为Ajax请求");
- return Boolean.TRUE;
- }
- System.out.println("当前请求非Ajax请求");
- return Boolean.FALSE;
- }
-
- @Bean
- public SecurityManager securityManager(@Qualifier("myRetryLimitCredentialsMatcher") MyRetryLimitCredentialsMatcher matcher) {
- DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
- //设置realm.
- securityManager.setRealm(myShiroRealm(matcher));
- // 自定义缓存实现 使用redis
- //securityManager.setCacheManager(cacheManager());
- // 自定义session管理 使用redis
- securityManager.setSessionManager(sessionManager());
- return securityManager;
- }
-
- @Bean
- public MyShiroRealm myShiroRealm(MyRetryLimitCredentialsMatcher matcher) {
- MyShiroRealm myShiroRealm = new MyShiroRealm();
- myShiroRealm.setCredentialsMatcher(matcher);
- return myShiroRealm;
- }
-
-
- /**
- * 密码匹配凭证管理器 凭证匹配器
- * (由于我们的密码校验交给Shiro的SimpleAuthenticationInfo进行处理了
- * 所以我们需要修改下doGetAuthenticationInfo中的代码;
- * )
- *
- * @return
- */
- @Bean(name = "myRetryLimitCredentialsMatcher")
- public MyRetryLimitCredentialsMatcher hashedCredentialsMatcher() {
- MyRetryLimitCredentialsMatcher hashedCredentialsMatcher = new MyRetryLimitCredentialsMatcher();
-
- hashedCredentialsMatcher.setHashAlgorithmName("md5");//散列算法:这里使用MD5算法;
- hashedCredentialsMatcher.setHashIterations(2);//散列的次数,比如散列两次,相当于 md5(md5(""));
-
- return hashedCredentialsMatcher;
- }
-
-
- /**
- * 开启shiro aop注解支持.
- * 使用代理方式;所以需要开启代码支持;
- *
- * @param securityManager
- * @return
- */
- @Bean
- public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
- AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
- authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
- return authorizationAttributeSourceAdvisor;
- }
-
- /**
- * 配置shiro redisManager
- * 使用的是shiro-redis开源插件
- *
- * @return
- */
- public RedisManager redisManager() {
- RedisManager redisManager = new RedisManager();
- redisManager.setHost(host);
- redisManager.setPort(port);
- //redisManager.setExpire(expire);// 配置缓存过期时间
- redisManager.setTimeout(timeout);
- redisManager.setPassword(password);
- return redisManager;
- }
-
- /**
- * cacheManager 缓存 redis实现
- * 使用的是shiro-redis开源插件
- *
- * @return
- */
- public RedisCacheManager cacheManager() {
- RedisCacheManager redisCacheManager = new RedisCacheManager();
- redisCacheManager.setRedisManager(redisManager());
- return redisCacheManager;
- }
-
-
- /**
- * RedisSessionDAO shiro sessionDao层的实现 通过redis
- * 使用的是shiro-redis开源插件
- */
- @Bean
- public RedisSessionDAO redisSessionDAO() {
- RedisSessionDAO redisSessionDAO = new RedisSessionDAO();
- redisSessionDAO.setRedisManager(redisManager());
- return redisSessionDAO;
- }
-
- /**
- * shiro session的管理
- */
- @Bean
- public DefaultWebSessionManager sessionManager() {
- DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
- //设置session过期时间为1小时(单位:毫秒),默认为30分钟
- sessionManager.setGlobalSessionTimeout(60 * 60 * 1000);
- sessionManager.setSessionValidationSchedulerEnabled(true);
- sessionManager.setSessionIdUrlRewritingEnabled(false);
-
- sessionManager.setSessionDAO(redisSessionDAO());
- sessionManager.setSessionIdCookie(simpleCookie());
- return sessionManager;
- }
-
- @Bean
- public SimpleCookie simpleCookie() {
- SimpleCookie simpleCookie = new SimpleCookie("SSID");
- simpleCookie.setDomain("");
- return simpleCookie;
- }
-
-// @Bean
-// public SimpleCookie rememberMeCookie(){
-// //System.out.println("ShiroConfiguration.rememberMeCookie()");
-// //这个参数是cookie的名称,对应前端的checkbox的name = rememberMe
-// SimpleCookie simpleCookie = new SimpleCookie("rememberMe");
-// //
-// simpleCookie.setMaxAge(60*30);
-// return simpleCookie;
-// }
-
-// @Bean
-// public CookieRememberMeManager rememberMeManager(){
-// //System.out.println("ShiroConfiguration.rememberMeManager()");
-// CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();
-// cookieRememberMeManager.setCookie(rememberMeCookie());
-// //rememberMe cookie加密的密钥 建议每个项目都不一样 默认AES算法 密钥长度(128 256 512 位)
-// cookieRememberMeManager.setCipherKey(Base64.decodeBytes("2AvVhdsgUs0FSA3SDFAdag=="));
-// return cookieRememberMeManager;
-// }
-
-// @Bean(name = "securityManager")
-// public DefaultWebSecurityManager defaultWebSecurityManager(MyShiroRealm realm){
-// DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
-// //设置realm
-// securityManager.setRealm(realm);
-// //用户授权/认证信息Cache, 采用EhCache缓存
-// securityManager.setCacheManager(cacheManager());
-// //注入记住我管理器
-// securityManager.setRememberMeManager(rememberMeManager());
-// return securityManager;
-// }
-
-}
diff --git a/mallinkWechatOpen/src/main/java/com/iformall/config/ShiroLoginFilter.java b/mallinkWechatOpen/src/main/java/com/iformall/config/ShiroLoginFilter.java
deleted file mode 100644
index 30d8fe441..000000000
--- a/mallinkWechatOpen/src/main/java/com/iformall/config/ShiroLoginFilter.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.iformall.config;
-
-import com.alibaba.fastjson.JSON;
-import com.iformall.common.ResultData;
-import org.apache.shiro.web.filter.authc.FormAuthenticationFilter;
-
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-
-public class ShiroLoginFilter extends FormAuthenticationFilter {
-
- @Override
- protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
- response.setCharacterEncoding("UTF-8");
- response.setContentType("application/json");
- ResultData resultData = new ResultData(ResultData.UNLOGIN,"用户未登录");
- response.getWriter().write(JSON.toJSONString(resultData));
- return false;
- }
-
- /**
- * 判断ajax请求
- * @param request
- * @return
- */
- boolean isAjax(HttpServletRequest request){
- return (request.getHeader("X-Requested-With") != null && "XMLHttpRequest".equals( request.getHeader("X-Requested-With").toString()) ) ;
- }
-
-}
\ No newline at end of file
diff --git a/mallinkWechatOpen/src/main/java/com/iformall/config/WebConfig.java b/mallinkWechatOpen/src/main/java/com/iformall/config/WebConfig.java
deleted file mode 100644
index 48708f36e..000000000
--- a/mallinkWechatOpen/src/main/java/com/iformall/config/WebConfig.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package com.iformall.config;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.DeserializationConfig;
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.module.SimpleModule;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.http.converter.HttpMessageConverter;
-import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
-import org.springframework.web.servlet.config.annotation.CorsRegistry;
-import org.springframework.web.servlet.config.annotation.EnableWebMvc;
-import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.text.SimpleDateFormat;
-import java.util.List;
-
-@Configuration
-@EnableWebMvc
-public class WebConfig implements WebMvcConfigurer {
-
- @Override
- public void addResourceHandlers(ResourceHandlerRegistry registry) {
- registry.addResourceHandler("swagger-ui.html")
- .addResourceLocations("classpath:/META-INF/resources/");
- registry.addResourceHandler("/webjars/**")
- .addResourceLocations("classpath:/META-INF/resources/webjars/");
- //registry.addResourceHandler("/app/**").addResourceLocations("classpath:/app/");
-
- }
-
- @Override
- public void addCorsMappings(CorsRegistry registry) {
- registry.addMapping("/**")
- .allowedOrigins("*")
- .allowCredentials(true)
- .allowedMethods("GET", "POST", "DELETE", "PUT")
- .maxAge(3600);
- }
-
- @Override
- public void configureMessageConverters(List> converters) {
- MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
- //ObjectMapper 是Jackson库的主要类。它提供一些功能将转换成Java对象匹配JSON结构,反之亦然
- ObjectMapper objectMapper = new ObjectMapper();
- SimpleModule simpleModule = new SimpleModule();
-
- //不显示为null的字段
- objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-
- DeserializationConfig dc = objectMapper.getDeserializationConfig();
- // 设置反序列化日期格式、忽略不存在get、set的属性
- objectMapper.setConfig(
- dc.with(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"))
- .without(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
- );
-
- //序列化将Long转String类型
- simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
- simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
- SimpleModule bigIntegerModule = new SimpleModule();
- //序列化将BigInteger转String类型
- bigIntegerModule.addSerializer(BigInteger.class, ToStringSerializer.instance);
- SimpleModule bigDecimalModule = new SimpleModule();
- //序列化将BigDecimal转String类型
- bigDecimalModule.addSerializer(BigDecimal.class, ToStringSerializer.instance);
- objectMapper.registerModule(simpleModule);
- objectMapper.registerModule(bigDecimalModule);
- objectMapper.registerModule(bigIntegerModule);
- jackson2HttpMessageConverter.setObjectMapper(objectMapper);
- converters.add(jackson2HttpMessageConverter);
- }
-
-
-}
diff --git a/mallinkWechatOpen/src/main/java/com/iformall/config/WechatOpenProperties.java b/mallinkWechatOpen/src/main/java/com/iformall/config/WechatOpenProperties.java
deleted file mode 100644
index e19dfc4eb..000000000
--- a/mallinkWechatOpen/src/main/java/com/iformall/config/WechatOpenProperties.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package com.iformall.config;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-
-/**
- * Stormeye
- */
-@ConfigurationProperties(prefix = "wechat.open")
-public class WechatOpenProperties {
- /**
- * 设置微信三方平台的appid
- */
- private String componentAppId;
-
- /**
- * 设置微信三方平台的app secret
- */
- private String componentSecret;
-
- /**
- * 设置微信三方平台的token
- */
- private String componentToken;
-
- /**
- * 设置微信三方平台的EncodingAESKey
- */
- private String componentAesKey;
-
- public String getComponentAppId() {
- return componentAppId;
- }
-
- public void setComponentAppId(String componentAppId) {
- this.componentAppId = componentAppId;
- }
-
- public String getComponentSecret() {
- return componentSecret;
- }
-
- public void setComponentSecret(String componentSecret) {
- this.componentSecret = componentSecret;
- }
-
- public String getComponentToken() {
- return componentToken;
- }
-
- public void setComponentToken(String componentToken) {
- this.componentToken = componentToken;
- }
-
- public String getComponentAesKey() {
- return componentAesKey;
- }
-
- public void setComponentAesKey(String componentAesKey) {
- this.componentAesKey = componentAesKey;
- }
-
- @Override
- public String toString() {
- return ToStringBuilder.reflectionToString(this,
- ToStringStyle.MULTI_LINE_STYLE);
- }
-}
diff --git a/mallinkWechatOpen/src/main/java/com/iformall/controller/BaseController.java b/mallinkWechatOpen/src/main/java/com/iformall/controller/BaseController.java
deleted file mode 100644
index c77080fde..000000000
--- a/mallinkWechatOpen/src/main/java/com/iformall/controller/BaseController.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.iformall.controller;
-
-import com.iformall.utils.IPUtil;
-import org.springframework.web.bind.WebDataBinder;
-import org.springframework.web.bind.annotation.InitBinder;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.context.request.RequestContextHolder;
-import org.springframework.web.context.request.ServletRequestAttributes;
-
-import javax.servlet.http.HttpServletRequest;
-import java.beans.PropertyEditorSupport;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-@RestController
-public class BaseController {
- @InitBinder
- public void InitBinder(WebDataBinder dataBinder) {
- dataBinder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
- public void setAsText(String value) {
- try {
- setValue(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(value));
- } catch(ParseException e) {
- try {
- setValue(new SimpleDateFormat("yyyy-MM-dd ").parse(value));
- } catch (ParseException e1) {
- setValue(null);
- }
- }
- }
-
- public String getAsText() {
- return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format((Date) getValue());
- }
-
- });
- }
-
- public String getIpAddr() {
- HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
- String ipaddress = IPUtil.getIpAddr(request);
- return ipaddress;
- }
-}
diff --git a/mallinkWechatOpen/src/main/java/com/iformall/controller/HomeController.java b/mallinkWechatOpen/src/main/java/com/iformall/controller/HomeController.java
deleted file mode 100644
index b6379567a..000000000
--- a/mallinkWechatOpen/src/main/java/com/iformall/controller/HomeController.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package com.iformall.controller;
-
-import com.google.code.kaptcha.Constants;
-import com.google.code.kaptcha.Producer;
-import com.iformall.common.ErrorCode;
-import com.iformall.common.ResultData;
-import com.iformall.domain.po.MallUserInfo;
-import com.iformall.exception.MallinkException;
-import com.iformall.service.MallUserRoleService;
-import com.iformall.shiro.UserSession;
-import com.iformall.utils.ShiroUtils;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.shiro.SecurityUtils;
-import org.apache.shiro.authc.UsernamePasswordToken;
-import org.apache.shiro.subject.Subject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.imageio.ImageIO;
-import javax.servlet.ServletException;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletResponse;
-import java.awt.image.BufferedImage;
-import java.io.IOException;
-
-
-@RestController
-@Api(description = "登录相关接口")
-public class HomeController extends BaseController {
- private final Logger logger = LoggerFactory.getLogger(this.getClass());
-
- @Value("${version}")
- private String version;
-
- @Autowired
- private Producer producer;
-
- @Autowired
- private MallUserRoleService mallUserRoleService;
-
-
- @GetMapping("/captcha.jpg")
- public void captcha(HttpServletResponse response)throws ServletException, IOException {
- logger.debug("[" + getIpAddr() + "] HomeController::captcha");
- response.setHeader("Cache-Control", "no-store, no-cache");
- response.setContentType("image/jpeg");
-
- //生成文字验证码
- String text = producer.createText();
- //生成图片验证码
- BufferedImage image = producer.createImage(text);
- //保存到shiro session
- ShiroUtils.setSessionAttribute(Constants.KAPTCHA_SESSION_KEY, text);
-
- ServletOutputStream out = response.getOutputStream();
- ImageIO.write(image, "jpg", out);
- IOUtils.closeQuietly(out);
- }
-
- @ApiOperation("登录")
- @PostMapping("/doLogin")
- public ResultData login(@RequestBody MallUserInfo user, HttpServletResponse response) {
- logger.debug("[" + getIpAddr() + "] HomeController::login");
-
- try {
- String kaptcha = ShiroUtils.getKaptcha(Constants.KAPTCHA_SESSION_KEY);
- if(!user.getCaptcha().equalsIgnoreCase(kaptcha)){
- return new ResultData(ErrorCode.KAPCHA_NOT_EQUAL);
- }
- } catch (MallinkException e) {
- logger.error("验证码" + e.getMessage());
- return new ResultData(ErrorCode.KAPCHA_NOT_VALID.getCode(), e.getMessage());
- }
-
-
- ResultData data = new ResultData();
- if (StringUtils.isBlank(user.getUsername()) || StringUtils.isBlank(user.getPassword())) {
-// throw new SystemException(ErrorCode.LOGIN_USER_OR_PWD_ERROR);
- return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
- }
- try {
- Subject subject = SecurityUtils.getSubject();
- UsernamePasswordToken token = new UsernamePasswordToken(user.getUsername(), user.getPassword());
- subject.login(token);
- MallUserInfo info = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo);
- info.setPassword("保密");
- info.setBopenId("保密");
- if(StringUtils.isNotBlank(info.getWebOpenId())) {
- info.setWebOpenId("保密");
- }
- String menus = mallUserRoleService.getPermissionsByUser(info);
- if(menus != null) {
- info.setMenus(menus);
- }
-
- Cookie unameCookie = new Cookie("uname", info.getUsername());
- unameCookie.setMaxAge(60);
- response.addCookie(unameCookie);
-
- data.data = info;
- } catch (Exception e) {
- return new ResultData(ErrorCode.USER_PASSWD_ERR);
- }
- return data;
- }
-
- @ApiOperation("登出")
- @GetMapping("/logout")
- public ResultData logout() {
- logger.debug("[" + getIpAddr() + "] HomeController::logout");
- ResultData data = new ResultData();
- SecurityUtils.getSubject().logout();
- return data;
- }
-
- @ApiOperation("获取后端版本号")
- @GetMapping("/version")
- public ResultData version() {
- return new ResultData(version);
- }
-}
\ No newline at end of file
diff --git a/mallinkWechatOpen/src/main/java/com/iformall/controller/WechatAuthController.java b/mallinkWechatOpen/src/main/java/com/iformall/controller/WechatAuthController.java
deleted file mode 100644
index a0a3023f4..000000000
--- a/mallinkWechatOpen/src/main/java/com/iformall/controller/WechatAuthController.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package com.iformall.controller;
-
-import com.iformall.domain.po.WxAuthorizerInfo;
-import com.iformall.enums.EnumWxAuthorizationStatus;
-import com.iformall.service.WxAuthorizerInfoService;
-import com.iformall.service.wechat.WxOpenService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import me.chanjar.weixin.common.error.WxErrorException;
-import me.chanjar.weixin.open.bean.result.WxOpenAuthorizerInfoResult;
-import me.chanjar.weixin.open.bean.result.WxOpenQueryAuthResult;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.util.Date;
-
-/**
- * Stormeye Wu
- */
-@Controller
-@RequestMapping("/wt_auth")
-@Api(description = "微信第三方开放平台授权相关接口")
-public class WechatAuthController {
- private final Logger logger = LoggerFactory.getLogger(getClass());
- @Autowired
- private WxOpenService openService;
-
- @Autowired
- private WxAuthorizerInfoService authorizerInfoService;
-
- @ApiOperation(value = "获取授权跳转页", notes = "")
- @GetMapping("/goto_auth_url_show")
- @ResponseBody
- public String gotoPreAuthUrlShow() {
- return "" +
- "" +
- "go" +
- "" +
- "";
- }
-
- @ApiOperation(value = "授权跳转页", notes = "")
- @GetMapping("/goto_auth_url")
- public void gotoPreAuthUrl(HttpServletRequest request, HttpServletResponse response) {
- String host = request.getHeader("host");
- String url = "https://" + host + "/O/wt_auth/jump";
- try {
- url = openService.getWxOpenComponentService().getPreAuthUrl(url);
- response.sendRedirect(url);
- } catch (WxErrorException | IOException e) {
- logger.error("gotoPreAuthUrl", e);
- throw new RuntimeException(e);
- }
- }
-
- @ApiOperation(value = "授权", notes = "")
- @GetMapping("/jump")
- @ResponseBody
- public void jump(@RequestParam("auth_code") String authorizationCode) {
- try {
- WxOpenQueryAuthResult queryAuthResult = openService.getWxOpenComponentService().getQueryAuth(authorizationCode);
- logger.info("getQueryAuth", queryAuthResult);
- WxOpenAuthorizerInfoResult openAuthorizerInfoResult = openService.getWxOpenComponentService().getAuthorizerInfo(
- queryAuthResult.getAuthorizationInfo().getAuthorizerAppid());
- // save auth info
- authorizerInfoService.saveOrUpdate(new WxAuthorizerInfo(){
- {
- setAuthorizerAppid(openAuthorizerInfoResult.getAuthorizationInfo().getAuthorizerAppid());
- setAlias(openAuthorizerInfoResult.getAuthorizerInfo().getAlias());
- setHeadImg(openAuthorizerInfoResult.getAuthorizerInfo().getHeadImg());
- setQrcodeUrl(openAuthorizerInfoResult.getAuthorizerInfo().getQrcodeUrl());
- setAuthorizationStatus(EnumWxAuthorizationStatus.AUTHORIZED.getCode());
- setAuthTime(new Date());
- }
- });
- } catch (WxErrorException e) {
- logger.error("gotoPreAuthUrl", e);
- throw new RuntimeException(e);
- }
- }
-
- @ApiOperation(value = "手机跳转链接url", notes = "")
- @GetMapping("/getMobilePreAuthUrl")
- @ResponseBody
- public String getMobilePreAuthUrl(HttpServletRequest request, HttpServletResponse response) {
- String host = request.getHeader("host");
- String url = "https://" + host + "/O/wt_auth/jump";
- try {
- url = openService.getWxOpenComponentService().getMobilePreAuthUrl(url);
- return url;
- } catch (WxErrorException e) {
- logger.error("getMobilePreAuthUrl", e);
- throw new RuntimeException(e);
- }
- }
-}
diff --git a/mallinkWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java b/mallinkWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java
deleted file mode 100644
index 5f542e67a..000000000
--- a/mallinkWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java
+++ /dev/null
@@ -1,415 +0,0 @@
-package com.iformall.controller;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.iformall.common.Result;
-import com.iformall.common.ResultData;
-import com.iformall.domain.po.*;
-import com.iformall.enums.*;
-import com.iformall.service.*;
-import com.iformall.service.wechat.WxOpenService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import me.chanjar.weixin.common.error.WxErrorException;
-import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage;
-import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
-import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
-import me.chanjar.weixin.open.bean.message.WxOpenXmlMessage;
-import me.chanjar.weixin.open.bean.result.WxOpenAuthorizerInfoResult;
-import me.chanjar.weixin.open.bean.result.WxOpenPlatformResult;
-import me.chanjar.weixin.open.bean.result.WxOpenQueryAuthResult;
-import me.chanjar.weixin.open.bean.result.WxOpenResult;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.http.HttpServletRequest;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.Charset;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.List;
-
-@Controller
-@RequestMapping("/wxOpen")
-@Api(description = "微信第三方开放平台回调相关接口")
-public class WechatCalllbackController extends BaseController {
- private final Logger logger = LoggerFactory.getLogger(this.getClass());
-
- @Autowired
- protected WxOpenService openService;
-
- @Autowired
- private WxComponentVerifyTicketService componentVerifyTicketService;
-
- @Autowired
- private WxAuthorizerInfoService authorizerInfoService;
-
- @Autowired
- private WxWeappAuditStatusService weappAuditStatusService;
-
- @Autowired
- private WxAppinfoService appinfoService;
-
- @Autowired
- private MailService mailService;
-
- @RequestMapping(value = "/notify", method = RequestMethod.POST)
- @ApiOperation("接收ticket回调")
- public Object receiveTicket(HttpServletRequest request) throws IOException {
- logger.info("[" +getIpAddr() + "]接收微信回调 /wxOpen/notify");
- InputStream inStream = request.getInputStream();
- ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
- byte[] buffer = new byte[1024];
- int len = 0;
- while ((len = inStream.read(buffer)) != -1) {
- outSteam.write(buffer, 0, len);
- }
- String resultxml = new String(outSteam.toByteArray(), Charset.forName("UTF-8"));
- logger.info(resultxml);
-
- outSteam.close();
- inStream.close();
-
- String timestamp = request.getParameter("timestamp");
- String nonce = request.getParameter("nonce");
- String signature = request.getParameter("signature");
- String encType = request.getParameter("encrypt_type");
- String msgSignature= request.getParameter("msg_signature");
-
- /*
- // 测试数据
- String timestamp = "1545708083";
- String nonce = "1052028699";
- String signature = "b5fa8296b46c726cbed35f744944f20f682776a6";
- String encType = "aes";
- String msgSignature= "54bec4c513f447cb312fd091bea48326f87aedde";
-
- String resultxml = "\n" +
- " \n" +
- " \n" +
- "";
- */
- logger.info("\n接收微信回调:[signature=[{}], encType=[{}], msgSignature=[{}],"
- + " timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ",
- signature, encType, msgSignature, timestamp, nonce, resultxml);
-
- if (!StringUtils.equalsIgnoreCase("aes", encType)
- || !openService.getWxOpenComponentService().checkSignature(timestamp, nonce, signature)) {
- throw new IllegalArgumentException("非法请求,可能属于伪造的请求!");
- }
-
- // aes加密的消息
- WxOpenXmlMessage inMessage = WxOpenXmlMessage.fromEncryptedXml(resultxml,
- openService.getWxOpenConfigStorage(), timestamp, nonce, msgSignature);
- this.logger.info("接收微信回调,消息解密后内容为:{} ", inMessage.toString());
- if(inMessage.getInfoType().equals(EnumWxAuthorizationInfoType.COMPONENT_VERIFY_TICKET.getMessage())) {
- // 保存component_verify_ticket
- componentVerifyTicketService.saveOrUpdate(new WxComponentVerifyTicket(){
- {
- setComponentVerifyTicket(inMessage.getComponentVerifyTicket());
- setCreateTime(new Date(Long.valueOf(inMessage.getCreateTime() * 1000)));
- setComponentAppid(inMessage.getAppId());
- setDeadline(new Date(Long.valueOf(System.currentTimeMillis() + (60*60*1000))));
- }
- });
- } else if (inMessage.getInfoType().equals(EnumWxAuthorizationInfoType.AUTHORIZED.getMessage()) ||
- inMessage.getInfoType().equals(EnumWxAuthorizationInfoType.UPDATEAUTHORIZED.getMessage())
- ) {
- try {
- WxOpenQueryAuthResult queryAuthResult = openService.getWxOpenComponentService().getQueryAuth(inMessage.getAuthorizationCode());
- logger.info("getQueryAuth", queryAuthResult);
-
- WxOpenAuthorizerInfoResult openAuthorizerInfoResult = openService.getWxOpenComponentService().getAuthorizerInfo(
- queryAuthResult.getAuthorizationInfo().getAuthorizerAppid());
- logger.info(openAuthorizerInfoResult.toString());
- // save auth info
- authorizerInfoService.saveOrUpdate(new WxAuthorizerInfo(){
- {
- setAuthorizerAppid(openAuthorizerInfoResult.getAuthorizationInfo().getAuthorizerAppid());
- setAlias(openAuthorizerInfoResult.getAuthorizerInfo().getAlias());
- setHeadImg(openAuthorizerInfoResult.getAuthorizerInfo().getHeadImg());
- setQrcodeUrl(openAuthorizerInfoResult.getAuthorizerInfo().getQrcodeUrl());
- setAuthorizationStatus(EnumWxAuthorizationStatus.AUTHORIZED.getCode());
- setAuthTime(new Date());
- }
- });
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- }
- } else if (inMessage.getInfoType().equals(EnumWxAuthorizationInfoType.UNAUTHORIZED.getMessage())) {
- authorizerInfoService.saveOrUpdate(new WxAuthorizerInfo(){
- {
- setAuthorizerAppid(inMessage.getAuthorizerAppid());
- setAuthorizationStatus(EnumWxAuthorizationStatus.UNAUTHORIZED.getCode());
- setAuthTime(new Date());
- }
- });
- }
- try {
- String out = openService.getWxOpenComponentService().route(inMessage);
- this.logger.info("组装回复信息:{}", out);
- } catch (WxErrorException e) {
- this.logger.error("notify", e);
- }
-
- return "success";
- }
-
- @RequestMapping(value = "/{appId}/callback")
- @ApiOperation("消息回调")
- public Object callback(@PathVariable("appId") String appId, HttpServletRequest request) throws IOException {
- logger.info("[" +getIpAddr() + "]接收微信APP回调 /{appId}/callback");
- InputStream inStream = request.getInputStream();
- ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
- byte[] buffer = new byte[1024];
- int len = 0;
- while ((len = inStream.read(buffer)) != -1) {
- outSteam.write(buffer, 0, len);
- }
- String resultxml = new String(outSteam.toByteArray(), Charset.forName("UTF-8"));
- logger.info(resultxml);
-
- outSteam.close();
- inStream.close();
-
- String timestamp = request.getParameter("timestamp");
- String nonce = request.getParameter("nonce");
- String signature = request.getParameter("signature");
- String encType = request.getParameter("encrypt_type");
- String openid = request.getParameter("openid");
- String msgSignature= request.getParameter("msg_signature");
-
- logger.info("接收微信APP回调:[appId=[{}], openid=[{}], signature=[{}], encType=[{}], msgSignature=[{}],"
- + " timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ",
- appId, openid, signature, encType, msgSignature, timestamp, nonce, resultxml);
- if (!StringUtils.equalsIgnoreCase("aes", encType)
- || !openService.getWxOpenComponentService().checkSignature(timestamp, nonce, signature)) {
- throw new IllegalArgumentException("非法请求,可能属于伪造的请求!");
- }
-
- String out = "";
- // aes加密的消息
- WxMpXmlMessage inMessage = WxOpenXmlMessage.fromEncryptedMpXml(resultxml,
- openService.getWxOpenConfigStorage(), timestamp, nonce, msgSignature);
- logger.info("接收微信APP回调,消息解密后内容为:\n{}", inMessage.toString());
- // 全网发布测试用例
- if (StringUtils.equalsAnyIgnoreCase(appId, "wx570bc396a51b8ff8", "wxd101a85aa106f53e")) {
- try {
- if (StringUtils.equals(inMessage.getMsgType(), "text")) {
- if (StringUtils.equals(inMessage.getContent(), "TESTCOMPONENT_MSG_TYPE_TEXT")) {
- out = WxOpenXmlMessage.wxMpOutXmlMessageToEncryptedXml(
- WxMpXmlOutMessage.TEXT().content("TESTCOMPONENT_MSG_TYPE_TEXT_callback")
- .fromUser(inMessage.getToUser())
- .toUser(inMessage.getFromUser())
- .build(),
- openService.getWxOpenConfigStorage()
- );
- } else if (StringUtils.startsWith(inMessage.getContent(), "QUERY_AUTH_CODE:")) {
- String msg = inMessage.getContent().replace("QUERY_AUTH_CODE:", "") + "_from_api";
- WxMpKefuMessage kefuMessage = WxMpKefuMessage.TEXT().content(msg).toUser(inMessage.getFromUser()).build();
- openService.getWxOpenComponentService().getWxMpServiceByAppid(appId).getKefuService().sendKefuMessage(kefuMessage);
- }
- } else if (StringUtils.equals(inMessage.getMsgType(), "event")) {
- WxMpKefuMessage kefuMessage = WxMpKefuMessage.TEXT().content(inMessage.getEvent() + "from_callback").toUser(inMessage.getFromUser()).build();
- openService.getWxOpenComponentService().getWxMpServiceByAppid(appId).getKefuService().sendKefuMessage(kefuMessage);
- }
- } catch (WxErrorException e) {
- logger.error("callback", e);
- }
- } else {
- /**判断消息类型,调用对应的方法*/
- switch (inMessage.getMsgType()){
- case "event": {
- switch (inMessage.getEvent()) {
- case "weapp_audit_success": { // 审核成功
- updateAuditStatus(appId, true, "");
- break;
- }
- case "weapp_audit_fail": { // 审核失败
- updateAuditStatus(appId, false, inMessage.getReason());
- break;
- }
- default:
- break;
- }
- return "success";
- }
- case "text":
- WxMpXmlOutMessage outMessage = openService.getWxOpenMessageRouter().route(inMessage, appId);
- if (outMessage != null) {
- out = WxOpenXmlMessage.wxMpOutXmlMessageToEncryptedXml(outMessage, openService.getWxOpenConfigStorage());
- logger.info(out);
- }
- /*
- else {
-
- WxMpXmlOutMessage outMsg = new WxMpXmlOutTextMessage();
- outMsg.setCreateTime(System.currentTimeMillis());
- outMsg.setToUserName(inMessage.getFromUser());
- outMsg.setFromUserName(inMessage.getToUser());
- outMsg.setMsgType("text");
- ((WxMpXmlOutTextMessage) outMsg).setContent(inMessage.getContent());
- out = WxOpenXmlMessage.wxMpOutXmlMessageToEncryptedXml(outMsg, wxOpenService.getWxOpenConfigStorage());
- }
- */
- else {
- out = "success";
- }
- break;
- default:
- return "success";
- }
- }
-
-
- return out;
- }
-
- private void updateAuditStatus(String appId, boolean success, String reason) {
-
-
- WxWeappAuditStatus auditStatus = weappAuditStatusService.getByAppId(appId);
- if(auditStatus != null) {
- if(success) {
- auditStatus.setAuditStatus(EnumWeappAuditStatus.SUCCESS.getCode());
- auditStatus.setAuditErrCode("");
- } else {
- auditStatus.setAuditStatus(EnumWeappAuditStatus.FAIL.getCode());
- auditStatus.setAuditErrCode(reason);
- }
- auditStatus.setAuditTime(new Date());
- weappAuditStatusService.updateStatus(auditStatus);
- }
-
- // 发邮件
- WxAppinfo appinfo = appinfoService.getByAppId(appId);
- if(appinfo != null) {
- SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
-
- StringBuilder titleSB = new StringBuilder();
- if(appinfo.getType().equals(EnumAppType.C.getCode())) {
- titleSB.append("C端小程序");
- } else if(appinfo.getType().equals(EnumAppType.B.getCode())) {
- titleSB.append("B端小程序");
- } else if(appinfo.getType().equals(EnumAppType.MP_S.getCode())) {
- titleSB.append("公众号-服务号");
- } else if(appinfo.getType().equals(EnumAppType.MP_P.getCode())) {
- titleSB.append("公众号-订阅号");
- }
- titleSB.append(appinfo.getName());
- if(success) {
- titleSB.append("审核通过");
- } else {
- titleSB.append("审核未通过");
- }
-
- StringBuilder sb = new StringBuilder();
- sb.append(df.format(new Date())).append("\n");
- if(success) {
- sb.append("审核通过\n");
- } else {
- sb.append("审核未通过\n").append("原因").append(reason);
- }
-
- String[] receivers = new String[] {"wangmei@iformall.com", "wuguoqiang@iformall.com", "huanghui@iformall.com", "sunmingming@iformall.com"};
-
- //发送邮件
- mailService.sendSimpleMail(receivers, titleSB.toString(), sb.toString());
- }
- }
-
- @GetMapping(value = "/createOpenPlatform")
- @ApiOperation("创建微信开放平台")
- public ResultData createOpenPlatform(@RequestParam(value="appId") String appId) {
- Gson gson = new GsonBuilder().create();
- try {
- String responseStr = openService.getWxOpenComponentService().getWxMpServiceByAppid(appId).createOpenPlatform(appId);
- logger.info(responseStr);
- WxOpenPlatformResult openPlatformResult = gson.fromJson(responseStr, WxOpenPlatformResult.class);
- if(openPlatformResult.isSuccess()) {
- WxAuthorizerInfo authorizerInfo = authorizerInfoService.getByAppId(appId);
- if(authorizerInfo != null) {
- authorizerInfo.setId(authorizerInfo.getId());
- authorizerInfo.setOpenAppid(openPlatformResult.getOpenAppid());
- authorizerInfoService.updateOpenAppid(authorizerInfo);
- }
- }
- return new ResultData(responseStr);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- return new ResultData(Result.ERROR, e.getMessage());
- }
- }
-
- @GetMapping(value = "/bindOpenPlatform")
- @ApiOperation("绑定微信开放平台")
- public ResultData bindOpenPlatform(@RequestParam(value = "appId") String appId, @RequestParam(value = "openAppId") String openAppId) {
- Gson gson = new GsonBuilder().create();
- try {
- String responseStr = openService.getWxOpenComponentService().getWxMpServiceByAppid(appId).bindOpenPlatform(appId, openAppId);
- logger.info(responseStr);
- WxOpenResult openResult = gson.fromJson(responseStr, WxOpenResult.class);
- if(openResult.isSuccess()) {
- return new ResultData();
- }
- return new ResultData(Result.ERROR, responseStr);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- return new ResultData(Result.ERROR, e.getMessage());
- }
- }
-
- @GetMapping(value = "/unbindOpenPlatform")
- @ApiOperation("解绑微信开放平台")
- public ResultData unbindOpenPlatform(@RequestParam(value = "appId") String appId, @RequestParam(value = "openAppId") String openAppId) {
- Gson gson = new GsonBuilder().create();
- try {
- String responseStr = openService.getWxOpenComponentService().getWxMpServiceByAppid(appId).unbindOpenPlatform(appId, openAppId);
- logger.info(responseStr);
- WxOpenResult openResult = gson.fromJson(responseStr, WxOpenResult.class);
- if(openResult.isSuccess()) {
- return new ResultData();
- }
- return new ResultData(Result.ERROR, responseStr);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- return new ResultData(Result.ERROR, e.getMessage());
- }
- }
-
- @GetMapping(value = "/getOpenPlatform")
- @ApiOperation("获取微信开放平台appId")
- public ResultData getOpenPlatform(@RequestParam(value = "appId") String appId) {
- Gson gson = new GsonBuilder().create();
- try {
- String responseStr = openService.getWxOpenComponentService().getWxMpServiceByAppid(appId).getBindOpenPlatform(appId);
- logger.info(responseStr);
- WxOpenPlatformResult openPlatformResult = gson.fromJson(responseStr, WxOpenPlatformResult.class);
- if(openPlatformResult.isSuccess()) {
- return new ResultData(openPlatformResult.getOpenAppid());
- }
- return new ResultData(Result.ERROR, responseStr);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- return new ResultData(Result.ERROR, e.getMessage());
- }
- }
-
- @GetMapping(value = "/clearQuota")
- @ApiOperation("代公众号清零quota,每个公众号每个月有10次清零机会,包括在微信公众平台上的清零以及调用API进行清零")
- public ResultData clearQuota(@RequestParam(value = "appId") String appId) {
- try {
- openService.getWxOpenComponentService().getWxMpServiceByAppid(appId).clearQuota(appId);
- return new ResultData();
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- return new ResultData(Result.ERROR, e.getMessage());
- }
- }
-}
diff --git a/mallinkWechatOpen/src/main/java/com/iformall/controller/WechatWeappCodeController.java b/mallinkWechatOpen/src/main/java/com/iformall/controller/WechatWeappCodeController.java
deleted file mode 100644
index b151c4f21..000000000
--- a/mallinkWechatOpen/src/main/java/com/iformall/controller/WechatWeappCodeController.java
+++ /dev/null
@@ -1,544 +0,0 @@
-package com.iformall.controller;
-
-import com.alibaba.fastjson.JSON;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.reflect.TypeToken;
-import com.iformall.common.ErrorCode;
-import com.iformall.common.Result;
-import com.iformall.common.ResultData;
-import com.iformall.domain.po.*;
-import com.iformall.domain.vo.WxWeappCodeStatusVo;
-import com.iformall.enums.*;
-import com.iformall.service.*;
-import com.iformall.service.wechat.WxOpenService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import me.chanjar.weixin.common.error.WxErrorException;
-import me.chanjar.weixin.open.api.WxOpenMaService;
-import me.chanjar.weixin.open.bean.ma.WxMaOpenCommitExtInfo;
-import me.chanjar.weixin.open.bean.message.WxOpenMaSubmitAuditMessage;
-import me.chanjar.weixin.open.bean.result.*;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URLEncoder;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Stormeye Wu
- */
-@RestController
-@RequestMapping("/weappCode")
-@Api(description = "微信第三方开发平台-小程序-代码管理")
-public class WechatWeappCodeController {
- private final Logger logger = LoggerFactory.getLogger(getClass());
- @Autowired
- private WxOpenService openService;
-
- @Autowired
- private WxWeappCodeStatusService weappCodeStatusService;
-
- @Autowired
- private WxWeappAuditStatusService weappAuditStatusService;
-
- @Autowired
- private WxWeappReleaseStatusService weappReleaseStatusService;
-
- @Autowired
- private WxAppinfoService appinfoService;
-
- @Autowired
- private WxAuthorizerInfoService authorizerInfoService;
-
- @Autowired
- private WxWeappExtSetService weappExtSetService;
-
-
- @ApiOperation(value = "为授权的小程序帐号上传小程序代码", notes = "extInfo参考https://mp.weixin.qq.com/debug/wxadoc/dev/framework/config.html")
- @PostMapping("/codeCommit")
- public ResultData codeCommit(Long templateId, String userVersion, String userDesc, String extInfoStr) {
- Gson gson = new GsonBuilder().create();
- WxMaOpenCommitExtInfo extInfo = gson.fromJson(extInfoStr, new TypeToken() {}.getType());
- String appId = extInfo.getExtAppid();
-
- // 检查appId是否已授权
- WxAuthorizerInfo authorizerInfo = authorizerInfoService.getByAppId(appId);
- if(authorizerInfo == null) {
- return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
- }
- if(!authorizerInfo.getAuthorizationStatus().equals(EnumWxAuthorizationStatus.AUTHORIZED.getCode())) {
- return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
- }
-
- WxWeappCodeStatus codeStatus = weappCodeStatusService.getByAppId(appId);
-
- WxAppinfo appinfo = appinfoService.getByAppId(appId);
-
- int iAppType = 0;
- String appTypeStr = userVersion.substring(0, 1);
- if(appTypeStr.equalsIgnoreCase("C"))
- iAppType = EnumAppType.C.getCode();
- else if(appTypeStr.equalsIgnoreCase("B"))
- iAppType = EnumAppType.B.getCode();
-
- try {
- // code提交
- WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
- logger.info(extInfo.toString());
- WxOpenResult openRet = openMaService.codeCommit(templateId, userVersion, userDesc, extInfo);
- logger.info(openRet.toString());
- boolean codeCommitStatus = false;
- if (openRet.isSuccess()) {
- codeCommitStatus = true;
- }
- if (codeStatus == null) {
- codeStatus = new WxWeappCodeStatus();
- codeStatus.setAppId(appId);
- if (appinfo != null) {
- codeStatus.setType(appinfo.getType());
- }
- codeStatus.setUserVersion(userVersion);
- codeStatus.setVersionDesc(userDesc);
- if(codeCommitStatus) {
- codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.SUCCESS.getCode());
- } else {
- codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.FAIL.getCode());
- codeStatus.setCodeErrCode(gson.toJson(openRet));
- }
- codeStatus.setCodeTime(new Date());
- weappCodeStatusService.saveStatus(codeStatus);
- } else {
- codeStatus.setUserVersion(userVersion);
- codeStatus.setVersionDesc(userDesc);
- if(codeCommitStatus) {
- codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.SUCCESS.getCode());
- } else {
- codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.FAIL.getCode());
- codeStatus.setCodeErrCode(gson.toJson(openRet));
- }
- codeStatus.setCodeTime(new Date());
- weappCodeStatusService.updateStatus(codeStatus);
- }
- return new ResultData(openRet);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- if (codeStatus == null) {
- codeStatus = new WxWeappCodeStatus();
- codeStatus.setAppId(appId);
- if (appinfo != null) {
- codeStatus.setType(appinfo.getType());
- }
- codeStatus.setUserVersion(userVersion);
- codeStatus.setVersionDesc(userDesc);
- codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.FAIL.getCode());
- codeStatus.setCodeErrCode(e.getMessage());
- codeStatus.setCodeTime(new Date());
- weappCodeStatusService.saveStatus(codeStatus);
- } else {
- codeStatus.setUserVersion(userVersion);
- codeStatus.setVersionDesc(userDesc);
- codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.FAIL.getCode());
- codeStatus.setCodeErrCode(e.getMessage());
- codeStatus.setCodeTime(new Date());
- weappCodeStatusService.updateStatus(codeStatus);
- }
- return new ResultData(Result.ERROR, e.getMessage());
- }
- }
-
- @ApiOperation("获取体验小程序的体验二维码")
- @GetMapping("/getQrcode")
- public void getQrcode(@RequestParam(value = "appId") String appId, @RequestParam(value = "pagePath") String pagePath,
- @RequestParam(value = "params", required = false) Map params,
- HttpServletResponse response, HttpServletRequest req) {
- try {
- WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
- File file = openMaService.getTestQrcode(pagePath, params);
- ServletOutputStream out = response.getOutputStream();
-
- response.reset();
- response.setContentType("image/jpeg");
- String agent = req.getHeader("user-agent");
- String filename = "QRCode.jpg";
- if (agent.contains("Firefox")) {
- response.setHeader("Content-disposition",
- "attachment; filename=" + new String(filename.getBytes("GB2312"),"ISO-8859-1"));
- } else {
- response.setHeader("Content-disposition",
- "attachment; filename=" + URLEncoder.encode(filename,"UTF-8"));
- }
- // 循环取出流中的数据
- byte[] b = new byte[1024];
- int len;
- InputStream inStream = new FileInputStream(file);
- while ((len = inStream.read(b)) > 0)
- response.getOutputStream().write(b, 0, len);
- inStream.close();
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- } catch (IOException e) {
- logger.error(e.getMessage());
- }
- }
-
- @ApiOperation("获取授权小程序帐号已设置的类目")
- @GetMapping("/getCategory")
- public ResultData getCategory(String appId) {
- try {
- WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
- WxOpenMaCategoryListResult openRet = openMaService.getCategoryList();
- logger.info(openRet.toString());
- return new ResultData(openRet);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- return new ResultData(Result.ERROR, e.getMessage());
- }
- }
-
- @ApiOperation("获取小程序的第三方提交代码的页面配置")
- @GetMapping("/getPage")
- public ResultData getPage(String appId) {
- try {
- WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
- WxOpenMaPageListResult openRet = openMaService.getPageList();
- logger.info(openRet.toString());
- return new ResultData(openRet);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- return new ResultData(Result.ERROR, e.getMessage());
- }
- }
-
- @ApiOperation("将第三方提交的代码包提交审核")
- @GetMapping("/submitAudit")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "appId", value = "appId", dataType = "String", paramType = "query", required = true),
- @ApiImplicitParam(name = "version", value = "version", dataType = "String", paramType = "query")})
- public ResultData submitAudit(String appId, String version) {
- Gson gson = new GsonBuilder().create();
- WxWeappExtSet extSetQ = new WxWeappExtSet();
- extSetQ.setAppId(appId);
- WxWeappExtSet extSet = weappExtSetService.getByObj(extSetQ);
- if(StringUtils.isBlank(extSet.getReleaseJson())) {
- logger.error("Release JSON is null");
- return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
- }
-
- WxWeappCodeStatusVo codeQ = new WxWeappCodeStatusVo();
- codeQ.setAppId(appId);
- if(StringUtils.isNotBlank(version)) {
- codeQ.setUserVersion(version);
- }
- List codeStatusList = weappCodeStatusService.getList(codeQ);
- if(codeStatusList.size() == 1) {
- WxWeappCodeStatusVo codeStatus = codeStatusList.get(0);
- WxOpenMaSubmitAuditMessage subMessage = gson.fromJson(extSet.getReleaseJson(), new TypeToken() {}.getType());
- if(codeStatus != null && codeStatus.getCodeStatus().equals(EnumWeappCodeCommitStatus.SUCCESS.getCode())) {
- WxWeappAuditStatus auditStatus = weappAuditStatusService.getByAppId(appId);
- boolean submitStatus = false;
- String codeErrCode = "";
- try {
- WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
- WxOpenMaSubmitAuditResult openRet = openMaService.submitAudit(subMessage);
- logger.info(openRet.toString());
- if(openRet.isSuccess()) {
- submitStatus = true;
- codeErrCode = gson.toJson(openRet);
- } else {
- submitStatus = false;
- codeErrCode = gson.toJson(openRet);
- }
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- submitStatus = false;
- codeErrCode = e.getMessage();
- }
-
- if (auditStatus == null) {
- auditStatus = new WxWeappAuditStatus();
- auditStatus.setId(codeStatus.getId());
- auditStatus.setAppId(codeStatus.getAppId());
- auditStatus.setType(codeStatus.getType());
- auditStatus.setUserVersion(codeStatus.getUserVersion());
- auditStatus.setVersionDesc(codeStatus.getVersionDesc());
- if(submitStatus) {
- auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode());
- } else {
- auditStatus.setAuditStatus(EnumWeappAuditStatus.FAIL.getCode());
- }
- auditStatus.setAuditErrCode(codeErrCode);
- auditStatus.setAuditTime(new Date());
- weappAuditStatusService.saveStatus(auditStatus);
- } else {
- if(!submitStatus) {
- if(!auditStatus.getUserVersion().equals(codeStatus.getUserVersion())
- && auditStatus.getAuditStatus().equals(EnumWeappAuditStatus.AUDITING.getCode())) {
- // 提交审核失败不替换当前审核中的数据
- return new ResultData(ErrorCode.WEAPP_HAD_AUDITING);
- }
- codeStatus.setCodeStatus(EnumWeappAuditStatus.FAIL.getCode());
- codeStatus.setCodeErrCode(codeErrCode);
- } else {
- codeStatus.setCodeStatus(EnumWeappAuditStatus.AUDITING.getCode());
- }
- auditStatus.setUserVersion(codeStatus.getUserVersion());
- auditStatus.setVersionDesc(codeStatus.getVersionDesc());
- auditStatus.setAuditTime(new Date());
- weappAuditStatusService.updateStatus(auditStatus);
- }
- if(submitStatus) {
- return new ResultData(codeErrCode);
- } else {
- return new ResultData(ErrorCode.WEAPP_AUDIT_ERR);
- }
- } else {
- logger.error(ErrorCode.WEAPP_CODE_COMMIT_ERR.getMessage());
- return new ResultData(ErrorCode.WEAPP_CODE_COMMIT_ERR);
- }
- }
- return new ResultData(ErrorCode.WEAPP_CODE_COMMIT_ERR);
- }
-
- @ApiOperation("查询某个指定版本的审核状态")
- @PostMapping("/getAuditstatus")
- public ResultData getAuditstatus(String appId, String auditidStr) {
- Gson gson = new GsonBuilder().create();
- Long auditId = Long.valueOf(auditidStr);
- WxWeappAuditStatus auditStatus = weappAuditStatusService.getByAppId(appId);
- if(auditStatus != null && auditStatus.getAuditid().equals(auditId)) {
- try {
- WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
- WxOpenMaQueryAuditResult openRet = openMaService.getAuditStatus(auditId);
- logger.info(openRet.toString());
- if (openRet.isSuccess()) {
- auditStatus.setAuditid(openRet.getAuditId());
- // 审核状态,其中0为审核成功,1为审核失败,2为审核中,3已撤回
- switch (openRet.getStatus().intValue()) {
- case 0:
- auditStatus.setAuditStatus(EnumWeappAuditStatus.SUCCESS.getCode());
- break;
- case 1:
- auditStatus.setAuditStatus(EnumWeappAuditStatus.FAIL.getCode());
- break;
- case 2:
- auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode());
- break;
- case 3:
- auditStatus.setAuditStatus(EnumWeappAuditStatus.UNDO.getCode());
- break;
- default:
- auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode());
- break;
- }
- auditStatus.setAuditErrCode(gson.toJson(openRet));
- auditStatus.setAuditTime(new Date());
- weappAuditStatusService.updateStatus(auditStatus);
- }
- return new ResultData(openRet);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- return new ResultData(Result.ERROR, e.getMessage());
- }
- }
- return new ResultData(Result.ERROR, "auditid不对应");
- }
-
- @ApiOperation("查询最新一次提交的审核状态")
- @GetMapping("/getLatestAuditstatus")
- public ResultData get_latest_auditstatus(String appId) {
- Gson gson = new GsonBuilder().create();
- WxWeappAuditStatus auditStatus = weappAuditStatusService.getByAppId(appId);
- if(auditStatus != null
- && auditStatus.getAuditStatus().equals(EnumWeappAuditStatus.AUDITING.getCode())) {
- try {
- WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
- WxOpenMaQueryAuditResult openRet = openMaService.getLatestAuditStatus();
- logger.info(openRet.toString());
- if (openRet.isSuccess()) {
- auditStatus.setAuditid(openRet.getAuditId());
- // 审核状态,其中0为审核成功,1为审核失败,2为审核中,3已撤回
- switch (openRet.getStatus().intValue()) {
- case 0:
- auditStatus.setAuditStatus(EnumWeappAuditStatus.SUCCESS.getCode());
- break;
- case 1:
- auditStatus.setAuditStatus(EnumWeappAuditStatus.FAIL.getCode());
- break;
- case 2:
- auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode());
- break;
- case 3:
- auditStatus.setAuditStatus(EnumWeappAuditStatus.UNDO.getCode());
- break;
- default:
- auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode());
- break;
- }
- auditStatus.setAuditErrCode(gson.toJson(openRet));
- auditStatus.setAuditTime(new Date());
- weappAuditStatusService.updateStatus(auditStatus);
- }
- return new ResultData(openRet);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- return new ResultData(Result.ERROR, e.getMessage());
- }
- } else {
- return new ResultData(Result.ERROR, "审核状态不是审核中");
- }
- }
-
- @ApiOperation("发布已通过审核的小程序")
- @GetMapping("/releaseAudited")
- public ResultData releaesAudited(String appId) {
- if(StringUtils.isBlank(appId)) {
- return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
- }
- Gson gson = new GsonBuilder().create();
- WxWeappAuditStatus auditStatus = weappAuditStatusService.getByAppId(appId);
- if(auditStatus.getAuditStatus().equals(EnumWeappAuditStatus.SUCCESS.getCode())) {
- boolean isUpdate = false;
- WxWeappReleaseStatus releaseStatus = weappReleaseStatusService.getByAppId(appId);
- if(releaseStatus != null) {
- // 版本已发布成功,跳过
- if(releaseStatus.getUserVersion().equals(auditStatus.getUserVersion())
- && releaseStatus.getReleaseStatus().equals(EnumWeappReleaseStatus.SUCCESS.getCode())) {
- return new ResultData(ErrorCode.WEAPP_APP_RELEASEED);
- }
- releaseStatus.setUserVersion(auditStatus.getUserVersion());
- releaseStatus.setVersionDesc(auditStatus.getVersionDesc());
- isUpdate = true;
- } else {
- releaseStatus = new WxWeappReleaseStatus();
- releaseStatus.setAppId(auditStatus.getAppId());
- releaseStatus.setType(auditStatus.getType());
- releaseStatus.setUserVersion(auditStatus.getUserVersion());
- releaseStatus.setVersionDesc(auditStatus.getVersionDesc());
- }
- try {
- WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
- WxOpenResult openRet = openMaService.releaesAudited();
- logger.info(openRet.toString());
- if(openRet.getErrcode().equals('0')) {
- releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.SUCCESS.getCode());
- } else {
- releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.FAIL.getCode());
- }
- releaseStatus.setReleaseErrCode(gson.toJson(openRet));
- releaseStatus.setReleaseTime(new Date());
- if(isUpdate) {
- weappReleaseStatusService.updateStatus(releaseStatus);
- } else {
- weappReleaseStatusService.saveStatus(releaseStatus);
- }
- return new ResultData(openRet);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.FAIL.getCode());
- releaseStatus.setReleaseErrCode(e.getMessage());
- releaseStatus.setReleaseTime(new Date());
- if(isUpdate) {
- weappReleaseStatusService.updateStatus(releaseStatus);
- } else {
- weappReleaseStatusService.saveStatus(releaseStatus);
- }
- return new ResultData(Result.ERROR, e.getMessage());
- }
- } else {
- return new ResultData(ErrorCode.WEAPP_NOT_AUDITED);
- }
- }
-
- @ApiOperation("小程序版本回退")
- @GetMapping("/revertCodeRelease")
- public ResultData revertCodeRelease(String appId) {
- Gson gson = new GsonBuilder().create();
- WxWeappReleaseStatus releaseStatus = weappReleaseStatusService.getByAppId(appId);
- try {
- WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
- WxOpenResult openRet = openMaService.revertCodeReleaes();
- logger.info(openRet.toString());
- if(openRet.isSuccess()) {
- if(releaseStatus != null) {
- releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.BACK.getCode());
- releaseStatus.setReleaseErrCode(gson.toJson(openRet));
- releaseStatus.setReleaseTime(new Date());
- weappReleaseStatusService.updateStatus(releaseStatus);
- }
- return new ResultData();
- }
- return new ResultData(openRet);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- return new ResultData(Result.ERROR, e.getMessage());
- }
- }
-
- @ApiOperation("查询当前设置的最低基础库版本及各版本用户占比")
- @GetMapping("/getSupportVersion")
- public ResultData getSupportVersion(String appId) {
- try {
- WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
- String openRet = openMaService.getSupportVersion();
- logger.info(openRet.toString());
- return new ResultData(openRet);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- return new ResultData(Result.ERROR, e.getMessage());
- }
- }
-
- @ApiOperation("设置最低基础库版本")
- @GetMapping("/setSupportVersion")
- public ResultData setSupportVersion(String appId, String version) {
- try {
- WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
- String openRet = openMaService.setSupportVersion(version);
- logger.info(openRet);
- return new ResultData(openRet);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- return new ResultData(Result.ERROR, e.getMessage());
- }
- }
-
- @ApiOperation(value = "小程序审核撤回", notes = "单个帐号每天审核撤回次数最多不超过1次,一个月不超过10次。")
- @GetMapping("/undoCodeAudit")
- public ResultData undoCodeAudit(String appId) {
- Gson gson = new GsonBuilder().create();
- WxWeappAuditStatus auditStatus = weappAuditStatusService.getByAppId(appId);
- if(auditStatus != null) {
- try {
- WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
- WxOpenResult openResult = openMaService.undoCodeAudit();
- if(openResult.isSuccess()) {
- auditStatus.setAuditStatus(EnumWeappAuditStatus.UNDO.getCode());
- auditStatus.setAuditErrCode(gson.toJson(openResult));
- auditStatus.setAuditTime(new Date());
- weappAuditStatusService.updateStatus(auditStatus);
- return new ResultData("审核撤回成功");
- }
- return new ResultData(Result.ERROR, "审核撤回失败");
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- return new ResultData(Result.ERROR, e.getMessage());
- }
- }
- return new ResultData(Result.ERROR, "没有审核记录,不能撤回");
- }
-}
diff --git a/mallinkWechatOpen/src/main/java/com/iformall/controller/WechatWeappDraftTemplateController.java b/mallinkWechatOpen/src/main/java/com/iformall/controller/WechatWeappDraftTemplateController.java
deleted file mode 100644
index 2c2a97e2c..000000000
--- a/mallinkWechatOpen/src/main/java/com/iformall/controller/WechatWeappDraftTemplateController.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package com.iformall.controller;
-
-import com.iformall.common.Result;
-import com.iformall.common.ResultData;
-import com.iformall.service.wechat.WxOpenService;
-import io.swagger.annotations.Api;
-import me.chanjar.weixin.common.error.WxErrorException;
-import me.chanjar.weixin.open.bean.WxOpenMaCodeTemplate;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * Stormeye Wu
- */
-@RestController
-@RequestMapping("/weappDraftTemplate")
-@Api(description = "微信第三方开发平台-小程序-代码模版库管理")
-public class WechatWeappDraftTemplateController {
- private final Logger logger = LoggerFactory.getLogger(getClass());
- @Autowired
- private WxOpenService openService;
-
-
- @GetMapping("/tempDraftList")
- public ResultData getTempDraftList() {
- try {
- List list = openService.getWxOpenComponentService().getTemplateDraftList();
- return new ResultData(list);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- return new ResultData(Result.ERROR, e.getMessage());
- }
-
- }
-
- @GetMapping("/tempList")
- public ResultData getTempList() {
- try {
- List list = openService.getWxOpenComponentService().getTemplateList();
- return new ResultData(list);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- return new ResultData(Result.ERROR, e.getMessage());
- }
- }
-
- @PostMapping("/addToTemplate")
- public ResultData addToTemplate(@RequestBody WxOpenMaCodeTemplate template) {
- if(template == null || template.getDraftId() == null) {
- return new ResultData(Result.ERROR, "draftId is null");
- }
- try {
- openService.getWxOpenComponentService().addToTemplate(template.getDraftId());
- return new ResultData();
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- return new ResultData(Result.ERROR, e.getMessage());
- }
- }
-
- @PostMapping("/deleteTemplate")
- public ResultData deleteTemplate(@RequestBody WxOpenMaCodeTemplate template) {
- if(template == null || template.getTemplateId() == null) {
- return new ResultData(Result.ERROR, "templateId is null");
- }
- try {
- openService.getWxOpenComponentService().deleteTemplate(template.getTemplateId());
- return new ResultData();
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- return new ResultData(Result.ERROR, e.getMessage());
- }
- }
-}
diff --git a/mallinkWechatOpen/src/main/java/com/iformall/controller/WechatWeappMsgTemplateController.java b/mallinkWechatOpen/src/main/java/com/iformall/controller/WechatWeappMsgTemplateController.java
deleted file mode 100644
index 36fbfe48b..000000000
--- a/mallinkWechatOpen/src/main/java/com/iformall/controller/WechatWeappMsgTemplateController.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package com.iformall.controller;
-
-import cn.binarywang.wx.miniapp.api.WxMaService;
-import cn.binarywang.wx.miniapp.bean.template.WxMaTemplateAddResult;
-import cn.binarywang.wx.miniapp.bean.template.WxMaTemplateLibraryGetResult;
-import cn.binarywang.wx.miniapp.bean.template.WxMaTemplateLibraryListResult;
-import cn.binarywang.wx.miniapp.bean.template.WxMaTemplateListResult;
-import com.iformall.common.ErrorCode;
-import com.iformall.common.Result;
-import com.iformall.common.ResultData;
-import com.iformall.domain.po.WxAuthorizerInfo;
-import com.iformall.enums.EnumWxAuthorizationStatus;
-import com.iformall.service.WxAuthorizerInfoService;
-import com.iformall.service.wechat.WxOpenService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import me.chanjar.weixin.common.error.WxErrorException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * Stormeye Wu
- */
-@RestController
-@RequestMapping("/weappMsgTemplate")
-@Api(description = "微信第三方开发平台-小程序-消息模板设置")
-public class WechatWeappMsgTemplateController {
- private final Logger logger = LoggerFactory.getLogger(getClass());
- @Autowired
- private WxOpenService openService;
-
- @Autowired
- private WxAuthorizerInfoService authorizerInfoService;
-
- @ApiOperation("获取小程序模板库标题列表")
- @GetMapping("getTmpLibList")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "appId", value = "appId", dataType = "String", paramType = "query", required = true),
- @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true),
- @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)})
- public ResultData getTmpLibList(String appId, Integer pageNum, Integer pageSize) {
- try {
- WxMaService maService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
- WxMaTemplateLibraryListResult ret = maService.getTemplateService().findTemplateLibraryList(pageNum, pageSize);
- return new ResultData(ret);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- return new ResultData(Result.ERROR, e.getMessage());
- }
- }
-
- @ApiOperation("获取模板库某个模板标题下关键词库")
- @GetMapping("getTemplateLibraryKeywordList")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "appId", value = "appId", dataType = "String", paramType = "query", required = true),
- @ApiImplicitParam(name = "id", value = "页数", dataType = "String", paramType = "query", required = true)})
- public ResultData findTemplateLibraryKeywordList(String appId, String id) {
- try {
- WxMaService maService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
- WxMaTemplateLibraryGetResult ret = maService.getTemplateService().findTemplateLibraryKeywordList(id);
- return new ResultData(ret);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- return new ResultData(Result.ERROR, e.getMessage());
- }
-
- }
-
- @ApiOperation("组合模板并添加至帐号下的个人模板库")
- @PostMapping("addTemplate")
- public ResultData addTemplate(String appId, String id, List keywordIdList) {
- WxAuthorizerInfo authorizerInfo = authorizerInfoService.getByAppId(appId);
- if(authorizerInfo == null) {
- return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
- }
- if(!authorizerInfo.getAuthorizationStatus().equals(EnumWxAuthorizationStatus.AUTHORIZED.getCode())) {
- return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
- }
- try {
- WxMaService maService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
- WxMaTemplateAddResult ret = maService.getTemplateService().addTemplate(id, keywordIdList);
- authorizerInfo.setTemplateStatus(0);
- authorizerInfo.setTemplateTime(new Date());
- authorizerInfo.setUpdateTime(new Date());
- authorizerInfoService.updateTemplate(authorizerInfo);
- return new ResultData(ret);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- authorizerInfo.setTemplateStatus(1);
- authorizerInfo.setTemplateTime(new Date());
- authorizerInfo.setUpdateTime(new Date());
- authorizerInfoService.updateTemplate(authorizerInfo);
- return new ResultData(Result.ERROR, e.getMessage());
- }
-
- }
-
- @ApiOperation("获取帐号下已存在的模板列表")
- @GetMapping("getTemplateList")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "appId", value = "appId", dataType = "String", paramType = "query", required = true),
- @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true),
- @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)})
- public ResultData findTemplateList(String appId, Integer pageNum, Integer pageSize) {
- try {
- WxMaService maService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
- WxMaTemplateListResult ret = maService.getTemplateService().findTemplateList(pageNum, pageSize);
- return new ResultData(ret);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- return new ResultData(Result.ERROR, e.getMessage());
- }
-
- }
-
- @ApiOperation("删除帐号下的某个模板")
- @PostMapping("delTemplate")
- public ResultData delTemplate(@RequestParam(value = "appId") String appId, @RequestParam(value = "templateId") String templateId) {
- try {
- WxMaService maService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
- maService.getTemplateService().delTemplate(templateId);
- return new ResultData();
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- return new ResultData(Result.ERROR, e.getMessage());
- }
- }
-}
diff --git a/mallinkWechatOpen/src/main/java/com/iformall/controller/WechatWeappSetController.java b/mallinkWechatOpen/src/main/java/com/iformall/controller/WechatWeappSetController.java
deleted file mode 100644
index 7b9506a59..000000000
--- a/mallinkWechatOpen/src/main/java/com/iformall/controller/WechatWeappSetController.java
+++ /dev/null
@@ -1,230 +0,0 @@
-package com.iformall.controller;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.iformall.common.ErrorCode;
-import com.iformall.common.Result;
-import com.iformall.common.ResultData;
-import com.iformall.domain.po.WxAuthorizerInfo;
-import com.iformall.enums.EnumWxAuthorizationStatus;
-import com.iformall.service.WxAuthorizerInfoService;
-import com.iformall.service.wechat.WxOpenService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import me.chanjar.weixin.common.error.WxErrorException;
-import me.chanjar.weixin.open.api.WxOpenMaService;
-import me.chanjar.weixin.open.bean.result.*;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Stormeye Wu
- */
-@RestController
-@RequestMapping("/weappSet")
-@Api(description = "微信第三方开发平台-小程序设置")
-public class WechatWeappSetController {
- private final Logger logger = LoggerFactory.getLogger(getClass());
- @Autowired
- private WxOpenService openService;
-
- @Autowired
- private WxAuthorizerInfoService authorizerInfoService;
-
- @ApiOperation("获取小程序的信息")
- @GetMapping("/getInfo")
- public ResultData getAccountBasicInfo(String appId) {
- try {
- WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
- String openRet = openMaService.getAccountBasicInfo();
- logger.info(openRet.toString());
- return new ResultData(openRet);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- }
- return new ResultData(Result.ERROR);
- }
-
- @ApiOperation("获取小程序服务器域名")
- @GetMapping("/getDomain")
- public ResultData getDomain(String appId) {
- try {
- WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
- WxOpenResult openRet = openMaService.getDomain();
- logger.info(openRet.toString());
- return new ResultData(openRet);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- return new ResultData(Result.ERROR, e.getMessage());
- }
-
- }
-
- @ApiOperation("获取小程序服务器域名")
- @GetMapping("/getWebDomain")
- public ResultData getWebDomain(String appId) {
- try {
- WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
- String openRet = openMaService.getWebViewDomain();
- logger.info(openRet);
- return new ResultData(openRet);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- return new ResultData(Result.ERROR, e.getMessage());
- }
- }
-
- @ApiOperation(value = "设置小程序服务器域名", notes = "{\n" +
- " \"action\":\"add/set/delete/get\",\n" +
- " \"requestdomain\":[\"https://www.qq.com\",\"https://www.qq.com\"],\n" +
- " \"wsrequestdomain\":[\"wss://www.qq.com\",\"wss://www.qq.com\"],\n" +
- " \"uploaddomain\":[\"https://www.qq.com\",\"https://www.qq.com\"],\n" +
- " \"downloaddomain\":[\"https://www.qq.com\",\"https://www.qq.com\"],\n" +
- " }")
- @PostMapping("/modifyDomain")
- public ResultData modifyDomain(String appId, String action,
- List requestDomain, List wsrequestdomain,
- List uploaddomain, List downloaddomain) {
- WxAuthorizerInfo authorizerInfo = authorizerInfoService.getByAppId(appId);
- if(authorizerInfo == null) {
- return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
- }
- if(!authorizerInfo.getAuthorizationStatus().equals(EnumWxAuthorizationStatus.AUTHORIZED.getCode())) {
- return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
- }
- try {
- WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
- WxOpenMaDomainResult openRet = openMaService.modifyDomain(action,
- requestDomain, wsrequestdomain,
- uploaddomain, downloaddomain);
- logger.info(openRet.toString());
- if(openRet.isSuccess()) {
- logger.info("设置服务器域名成功");
- authorizerInfo.setDomainStatus(0);
- authorizerInfo.setDomainTime(new Date());
- authorizerInfo.setUpdateTime(new Date());
-
- } else {
- logger.info("设置服务器域名成功");
- authorizerInfo.setDomainStatus(1);
- authorizerInfo.setDomainTime(new Date());
- authorizerInfo.setUpdateTime(new Date());
- }
- authorizerInfoService.updateDomainUrl(authorizerInfo);
- return new ResultData(openRet);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- }
- return new ResultData(Result.ERROR);
- }
-
- @ApiOperation(value = "设置小程序业务域名", notes = "{\n" +
- " \"action\":\"add/set/delete/get\",\n" +
- " \"webviewdomain\":[\"https://www.qq.com\",\"https://m.qq.com\"]\n" +
- " }")
- @PostMapping("/modifyWebViewDomain")
- public ResultData modifyWebViewDomain(String appId, String action,
- List urlList) {
- WxAuthorizerInfo authorizerInfo = authorizerInfoService.getByAppId(appId);
- if(authorizerInfo == null) {
- return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
- }
- if(!authorizerInfo.getAuthorizationStatus().equals(EnumWxAuthorizationStatus.AUTHORIZED.getCode())) {
- return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
- }
- try {
- WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
- String openRet = openMaService.setWebViewDomain(action, urlList);
- logger.info(openRet);
- JSONObject webRetObj = JSON.parseObject(openRet);
- if(webRetObj.getInteger("errcode").equals(0)) {
- logger.info("设置服务器业务域名成功");
- authorizerInfo.setWebdomainStatus(0);
- authorizerInfo.setWebdomainTime(new Date());
- authorizerInfo.setUpdateTime(new Date());
- } else {
- logger.info("设置服务器业务域名失败");
- authorizerInfo.setWebdomainStatus(1);
- authorizerInfo.setWebdomainTime(new Date());
- authorizerInfo.setUpdateTime(new Date());
- }
- authorizerInfoService.updateWebDomainUrl(authorizerInfo);
- return new ResultData(openRet);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- }
- return new ResultData(Result.ERROR);
- }
-
- @ApiOperation(value = "绑定微信用户为小程序体验者", notes = "{\"appId\":\"string\", \"wechatId\":\"string\"}")
- @PostMapping("/bindTester")
- public ResultData bindTester(@RequestBody Map params) {
- String appId = params.get("appId");
- String wechatId = params.get("wechatId");
- if(StringUtils.isBlank(appId)) {
- return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "appId不能为空");
- }
- WxAuthorizerInfo authorizerInfo = authorizerInfoService.getByAppId(appId);
- if(authorizerInfo == null) {
- return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
- }
- if(!authorizerInfo.getAuthorizationStatus().equals(EnumWxAuthorizationStatus.AUTHORIZED.getCode())) {
- return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
- }
- if(StringUtils.isBlank(wechatId)) {
- return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "wechatId不能为空");
- }
- try {
- WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
- WxOpenResult openRet = openMaService.bindTester(wechatId);
- logger.info(openRet.toString());
- return new ResultData(openRet);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- return new ResultData(e.getMessage());
- }
- }
-
- @ApiOperation(value = "解除绑定小程序的体验者", notes = "")
- @PostMapping("/unbindTester")
- public ResultData unbindTester(@RequestBody Map params) {
- String appId = params.get("appId");
- String wechatId = params.get("wechatId");
- if(StringUtils.isBlank(appId)) {
- return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "appId不能为空");
- }
- if(StringUtils.isBlank(wechatId)) {
- return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "wechatId不能为空");
- }
- try {
- WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
- WxOpenResult openRet = openMaService.unbindTester(wechatId);
- logger.info(openRet.toString());
- return new ResultData(openRet);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- return new ResultData(e.getMessage());
- }
- }
-
- @ApiOperation(value = "获取体验者列表", notes = "")
- @GetMapping("/getTesterList")
- public ResultData getTesterList(@RequestParam(value = "appId") String appId) {
- try {
- WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
- WxOpenResult openRet = openMaService.getTesterList();
- logger.info(openRet.toString());
- return new ResultData(openRet);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- }
- return new ResultData(Result.ERROR);
- }
-}
diff --git a/mallinkWechatOpen/src/main/java/com/iformall/controller/WxWeappBasicSetController.java b/mallinkWechatOpen/src/main/java/com/iformall/controller/WxWeappBasicSetController.java
deleted file mode 100644
index c124e112c..000000000
--- a/mallinkWechatOpen/src/main/java/com/iformall/controller/WxWeappBasicSetController.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.iformall.controller;
-
-import com.github.pagehelper.PageInfo;
-import com.iformall.common.ErrorCode;
-import com.iformall.common.ResultData;
-import com.iformall.domain.po.WxWeappBasicSet;
-import com.iformall.service.WxWeappBasicSetService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.*;
-
-/**
- * Stormeye Wu
- */
-@Controller
-@RequestMapping("/weappBasicSet")
-@Api(description = "小程序基础设置接口")
-public class WxWeappBasicSetController extends BaseController {
- private final Logger logger = LoggerFactory.getLogger(getClass());
-
- @Autowired
- private Integer getFmDelay;
-
- @Autowired
- private WxWeappBasicSetService weappBasicSetService;
-
- @ApiOperation("分页列表接口")
- @GetMapping("list")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true),
- @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)})
- public ResultData list(@ModelAttribute WxWeappBasicSet weappBasicSet, Integer pageNum, Integer pageSize) {
- logger.debug("[" + getIpAddr() + "] WxWeappBasicSetController::list");
- if (null == weappBasicSet) weappBasicSet = new WxWeappBasicSet();
- weappBasicSet.setDeploy(getFmDelay);
- final PageInfo page = weappBasicSetService.listAsPage(weappBasicSet, pageNum, pageSize);
- return new ResultData(page);
- }
-
- @PostMapping("add")
- public ResultData add(WxWeappBasicSet weappBasicSet) {
- logger.debug("[" + getIpAddr() + "] WxWeappBasicSetController::add");
- if (null == weappBasicSet) return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
- weappBasicSetService.saveOrUpdate(weappBasicSet);
- return new ResultData();
- }
-
- @PostMapping("update")
- public ResultData update(WxWeappBasicSet weappBasicSet) {
- logger.debug("[" + getIpAddr() + "] WxWeappBasicSetController::update");
- if (null == weappBasicSet) return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
- weappBasicSetService.saveOrUpdate(weappBasicSet);
- return new ResultData();
- }
-
-}
diff --git a/mallinkWechatOpen/src/main/java/com/iformall/controller/WxWeappExtSetController.java b/mallinkWechatOpen/src/main/java/com/iformall/controller/WxWeappExtSetController.java
deleted file mode 100644
index a58f18251..000000000
--- a/mallinkWechatOpen/src/main/java/com/iformall/controller/WxWeappExtSetController.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.iformall.controller;
-
-import com.github.pagehelper.PageInfo;
-import com.iformall.common.ErrorCode;
-import com.iformall.common.ResultData;
-import com.iformall.domain.po.WxWeappExtSet;
-import com.iformall.service.WxWeappExtSetService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.ModelAttribute;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-/**
- * Stormeye Wu
- */
-@Controller
-@RequestMapping("/weappExtSet")
-@Api(description = "小程序扩展设置接口")
-public class WxWeappExtSetController extends BaseController {
- private final Logger logger = LoggerFactory.getLogger(getClass());
-
- @Autowired
- private WxWeappExtSetService weappExtSetService;
-
- @ApiOperation("分页列表接口")
- @GetMapping("list")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true),
- @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)})
- public ResultData list(@ModelAttribute WxWeappExtSet weappExtSet, Integer pageNum, Integer pageSize) {
- logger.debug("[" + getIpAddr() + "] WxWeappExtSetController::list");
- if (null == weappExtSet) weappExtSet = new WxWeappExtSet();
- final PageInfo page = weappExtSetService.listAsPage(weappExtSet, pageNum, pageSize);
- return new ResultData(page);
- }
-
- @PostMapping("add")
- public ResultData add(WxWeappExtSet weappExtSet) {
- logger.debug("[" + getIpAddr() + "] WxWeappExtSetController::add");
- if (null == weappExtSet) return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
- weappExtSetService.saveOrUpdate(weappExtSet);
- return new ResultData();
- }
-
- @PostMapping("update")
- public ResultData update(WxWeappExtSet weappExtSet) {
- logger.debug("[" + getIpAddr() + "] WxWeappBasicSetController::update");
- if (null == weappExtSet) return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
- weappExtSetService.saveOrUpdate(weappExtSet);
- return new ResultData();
- }
-
-}
diff --git a/mallinkWechatOpen/src/main/java/com/iformall/controller/WxWeappInfoController.java b/mallinkWechatOpen/src/main/java/com/iformall/controller/WxWeappInfoController.java
deleted file mode 100644
index 117ad7ca1..000000000
--- a/mallinkWechatOpen/src/main/java/com/iformall/controller/WxWeappInfoController.java
+++ /dev/null
@@ -1,952 +0,0 @@
-package com.iformall.controller;
-
-import cn.binarywang.wx.miniapp.api.WxMaService;
-import cn.binarywang.wx.miniapp.bean.template.WxMaTemplateAddResult;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.github.pagehelper.PageInfo;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.reflect.TypeToken;
-import com.iformall.common.ErrorCode;
-import com.iformall.common.Result;
-import com.iformall.common.ResultData;
-import com.iformall.domain.po.*;
-import com.iformall.domain.vo.WxWeappAuditStatusVo;
-import com.iformall.domain.vo.WxWeappCodeStatusVo;
-import com.iformall.domain.vo.WxWeappInfo;
-import com.iformall.domain.vo.WxWeappReleaseStatusVo;
-import com.iformall.enums.*;
-import com.iformall.service.*;
-import com.iformall.service.wechat.WxOpenService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.models.auth.In;
-import me.chanjar.weixin.common.error.WxErrorException;
-import me.chanjar.weixin.open.api.WxOpenMaService;
-import me.chanjar.weixin.open.bean.ma.WxMaOpenCommitExtInfo;
-import me.chanjar.weixin.open.bean.message.WxOpenMaSubmitAuditMessage;
-import me.chanjar.weixin.open.bean.result.WxOpenMaDomainResult;
-import me.chanjar.weixin.open.bean.result.WxOpenMaQueryAuditResult;
-import me.chanjar.weixin.open.bean.result.WxOpenMaSubmitAuditResult;
-import me.chanjar.weixin.open.bean.result.WxOpenResult;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.*;
-
-/**
- * Stormeye Wu
- */
-@Controller
-@RequestMapping("/weapp")
-@Api(description = "小程序")
-public class WxWeappInfoController extends BaseController {
- private final Logger logger = LoggerFactory.getLogger(getClass());
-
- @Autowired
- private Integer getFmDelay;
-
- @Autowired
- private WxAuthorizerInfoService authorizerInfoService;
-
- @Autowired
- private WxWeappBasicSetService weappBasicSetService;
-
- @Autowired
- private WxWeappExtSetService weappExtSetService;
-
- @Autowired
- private WxWeappCodeStatusService weappCodeStatusService;
-
- @Autowired
- private WxWeappAuditStatusService weappAuditStatusService;
-
- @Autowired
- private WxWeappReleaseStatusService weappReleaseStatusService;
-
- @Autowired
- private WxOpenService openService;
-
- @Autowired
- private WxAppinfoService appinfoService;
-
- @Autowired
- private WxTemplateMsgService templateMsgService;
-
-
- @ApiOperation(value = "小程序分页列表接口", notes = "查询支持小程序类型,名称,appid,version")
- @GetMapping("list")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true),
- @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)})
- public ResultData list(@ModelAttribute WxWeappInfo weappInfo, Integer pageNum, Integer pageSize) {
- logger.debug("[" + getIpAddr() + "] WxWeappInfoController::list");
- if (null == weappInfo) {
- weappInfo = new WxWeappInfo();
- } else {
- if(StringUtils.isBlank(weappInfo.getName())) {
- weappInfo.setName(null);
- }
- }
- weappInfo.setSortColumns(WxWeappInfo.Field.Name_ASC,WxWeappInfo.Field.Type_ASC);
- final PageInfo page = authorizerInfoService.listVoAsPage(weappInfo, pageNum, pageSize);
- return new ResultData(page);
- }
-
- @ApiOperation("小程序列表接口")
- @GetMapping("allist")
- public ResultData getList(@ModelAttribute WxWeappInfo weappInfo) {
- logger.debug("[" + getIpAddr() + "] WxWeappInfoController::list");
- if (null == weappInfo) {
- weappInfo = new WxWeappInfo();
- } else {
- if(StringUtils.isBlank(weappInfo.getName())) {
- weappInfo.setName(null);
- }
- }
- weappInfo.setSortColumns(WxAuthorizerInfo.Field.CurrentVersion_DESC);
- final List list = authorizerInfoService.getList(weappInfo);
- return new ResultData(list);
- }
-
- @ApiOperation(value = "APPs基础设置(服务器域名、业务域名、基础版本、微信模板)", notes = "{\"apps\":\"appid,appid\",\"type\":\"String\"}")
- @PostMapping("batchBasicSet")
- public ResultData batchSet(@RequestBody Map params) {
- logger.debug("[" + getIpAddr() + "] WxWeappInfoController::batchBasicSet");
- String appsStr = params.get("apps");
- String typeStr = params.get("type");
-
- if(StringUtils.isBlank(typeStr)) {
- return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "type参数不能为空");
- }
-
- Integer type = 0;
- try {
- type = Integer.parseInt(typeStr);
- } catch (Exception e) {
- return new ResultData(ErrorCode.SYS_PARAMETER_ERROR);
- }
- // 检查基础配置参数
- WxWeappBasicSet weappBasicSetQ = new WxWeappBasicSet();
- weappBasicSetQ.setType(type);
- weappBasicSetQ.setDeploy(getFmDelay);
- WxWeappBasicSet weappBasicSet = weappBasicSetService.getByTypeAndDeploy(weappBasicSetQ);
- if(weappBasicSet == null) {
- logger.error("未找到相关的基础设置参数");
- return new ResultData(ErrorCode.WEAPP_BASIC_SET_ERR);
- }
-
- JSONObject domainObj = JSON.parseObject(weappBasicSet.getDomainUrl());
- if(domainObj == null) {
- logger.error("未找到相关的基础设置参数");
- return new ResultData(ErrorCode.WEAPP_BASIC_SET_DOMAIN_ERR);
- }
- JSONObject templeObj = JSON.parseObject(weappBasicSet.getTemplateInfo());
-
- if(StringUtils.isBlank(appsStr)) {
- WxWeappInfo weappInfoQ = new WxWeappInfo();
- weappInfoQ.setType(type);
- List list = authorizerInfoService.getList(weappInfoQ);
- for(WxWeappInfo info: list) {
- appsStr += info.getAuthorizerAppid() + ",";
- }
- appsStr = appsStr.substring(0, appsStr.length() - 1);
- }
-
- // 逐一设置app配置
- String [] apps = appsStr.split(",");
- for(String appId: apps) {
- // 检查appId是否已授权
- WxAuthorizerInfo authorizerInfo = authorizerInfoService.getByAppId(appId);
- if(authorizerInfo == null) {
- return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
- }
- if(!authorizerInfo.getAuthorizationStatus().equals(EnumWxAuthorizationStatus.AUTHORIZED.getCode())) {
- return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
- }
- ResultData openRet = setBasicForAppId(appId, weappBasicSet, domainObj, templeObj);
- if (openRet != null) return openRet;
- }
- return new ResultData();
- }
-
- private ResultData setBasicForAppId(String appId, WxWeappBasicSet weappBasicSet, JSONObject domainObj, JSONObject templeObj) {
- WxAuthorizerInfo authorizerInfo = authorizerInfoService.getByAppId(appId);
- if(authorizerInfo == null) {
- return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
- }
- try {
- WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
- // 设置基础版本
- String versionRet = openMaService.setSupportVersion(weappBasicSet.getVersion());
- logger.info(versionRet);
- JSONObject verObj = JSON.parseObject(versionRet);
- if(verObj.getInteger("errcode").equals(0)) {
- authorizerInfo.setBaseStatus(0);
- } else {
- authorizerInfo.setBaseStatus(1);
- }
- authorizerInfo.setBaseTime(new Date());
- authorizerInfo.setUpdateTime(new Date());
- authorizerInfoService.updateBaseVersion(authorizerInfo);
-
- // 服务器域名
- String action = "set";
- JSONObject urlObj = domainObj.getJSONObject("url");
- List requestDomain = getUrlList(urlObj.getJSONArray("requestdomain"));
- List wsrequestDomain = getUrlList(urlObj.getJSONArray("wsrequestdomain"));
- List uploadDomain = getUrlList(urlObj.getJSONArray("requestdomain"));
- List downloadDomain = getUrlList(urlObj.getJSONArray("requestdomain"));
- WxOpenMaDomainResult openRet = openMaService.modifyDomain(action,
- requestDomain, wsrequestDomain,
- uploadDomain, downloadDomain);
- logger.info(openRet.toString());
- if(openRet.isSuccess()) {
- logger.info("设置服务器域名成功");
- authorizerInfo.setDomainStatus(0);
- authorizerInfo.setDomainTime(new Date());
- authorizerInfo.setUpdateTime(new Date());
-
- } else {
- logger.info("设置服务器域名成功");
- authorizerInfo.setDomainStatus(1);
- authorizerInfo.setDomainTime(new Date());
- authorizerInfo.setUpdateTime(new Date());
- }
- authorizerInfoService.updateDomainUrl(authorizerInfo);
- // 业务域名
- JSONObject webObj = domainObj.getJSONObject("web");
- List urlList = getUrlList(webObj.getJSONArray("webviewdomain"));
- String openRet1 = openMaService.setWebViewDomain(action, urlList);
- logger.info(openRet1);
- JSONObject webRetObj = JSON.parseObject(openRet1);
- if(webRetObj.getInteger("errcode").equals(0)) {
- logger.info("设置服务器业务域名成功");
- authorizerInfo.setWebdomainStatus(0);
- authorizerInfo.setWebdomainTime(new Date());
- authorizerInfo.setUpdateTime(new Date());
- } else {
- logger.info("设置服务器业务域名失败");
- authorizerInfo.setWebdomainStatus(1);
- authorizerInfo.setWebdomainTime(new Date());
- authorizerInfo.setUpdateTime(new Date());
- }
- authorizerInfoService.updateWebDomainUrl(authorizerInfo);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- return new ResultData(Result.ERROR, e.getMessage());
- }
-
- // 设置微信模板
- if(weappBasicSet.getType().equals(EnumAppType.C.getCode())) {
- WxAppinfo appinfo = appinfoService.getByAppId(appId);
- try {
- WxMaService maService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
- // 核销成功消息
- JSONObject verify_success = templeObj.getJSONObject("verify_success");
- JSONArray keyidlist = verify_success.getJSONArray("keyword_id_list");
- List keyArr = getIdList(keyidlist);
- WxMaTemplateAddResult ret = maService.getTemplateService().addTemplate(verify_success.getString("id"), keyArr);
- logger.info(ret.toString());
- if(appinfo != null) {
- // wx_template_msg
- WxTemplateMsg templateMsgQ = new WxTemplateMsg();
- templateMsgQ.setTenantId(appinfo.getTenantId());
- templateMsgQ.setType(EnumTemplateType.VERIFY_SUCCESS.getCode());
- WxTemplateMsg templateMsg = templateMsgService.getByObj(templateMsgQ);
- if(templateMsg != null) {
- templateMsg.setTemplateId(ret.getTemplateId());
- templateMsgService.saveOrUpdate(templateMsg);
- } else {
- templateMsgQ.setTemplateId(ret.getTemplateId());
- templateMsgService.saveOrUpdate(templateMsgQ);
- }
- }
- // 核销失败消息
- JSONObject verify_fail = templeObj.getJSONObject("verify_fail");
- keyidlist = verify_fail.getJSONArray("keyword_id_list");
- List keyArr1 = getIdList(keyidlist);
- ret = maService.getTemplateService().addTemplate(verify_fail.getString("id"), keyArr1);
- logger.info(ret.toString());
- if(appinfo != null) {
- // wx_template_msg
- WxTemplateMsg templateMsgQ = new WxTemplateMsg();
- templateMsgQ.setTenantId(appinfo.getTenantId());
- templateMsgQ.setType(EnumTemplateType.VERIFY_FAIL.getCode());
- WxTemplateMsg templateMsg = templateMsgService.getByObj(templateMsgQ);
- if(templateMsg != null) {
- templateMsg.setTemplateId(ret.getTemplateId());
- templateMsgService.saveOrUpdate(templateMsg);
- } else {
- templateMsgQ.setTemplateId(ret.getTemplateId());
- templateMsgService.saveOrUpdate(templateMsgQ);
- }
- }
-
- // 更新状态
- authorizerInfo.setTemplateStatus(0);
- authorizerInfo.setTemplateTime(new Date());
- authorizerInfo.setUpdateTime(new Date());
- authorizerInfoService.updateTemplate(authorizerInfo);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- // 更新状态
- authorizerInfo.setTemplateStatus(1);
- authorizerInfo.setTemplateTime(new Date());
- authorizerInfo.setUpdateTime(new Date());
- authorizerInfoService.updateTemplate(authorizerInfo);
- return new ResultData(Result.ERROR, e.getMessage());
- }
- }
- // 设置成功返回null
- return null;
- }
-
- private List getIdList(JSONArray keyidlist) {
- List keyArr = new ArrayList();
- for (int i = 0; i < keyidlist.size(); i++) {
- keyArr.add(keyidlist.getIntValue(i));
- }
- return keyArr;
- }
-
- private List getUrlList(JSONArray urlList) {
- List keyArr = new ArrayList();
- for (int i = 0; i < urlList.size(); i++) {
- keyArr.add(urlList.getString(i));
- }
- return keyArr;
- }
-
- @ApiOperation(value = "批量授权的小程序code提交", notes = "{\"apps\":\"appid,appid\",\"templateId\":\"String\",\"type\":\"String\",\"userVersion\":\"String\",\"userDesc\":\"String\"}")
- @PostMapping("batchCodeCommit")
- public ResultData batchCodeCommit(@RequestBody Map params) {
- logger.debug("[" + getIpAddr() + "] WxWeappInfoController::batchExtSet");
- String appsStr = params.get("apps");
- String templateIdStr = params.get("templateId");
- String typeStr = params.get("type");
- String userVersion = params.get("userVersion");
- String userDesc = params.get("userDesc");
-
- Integer type = null;
- Long templateId = null;
- try {
- templateId = Long.parseLong(templateIdStr);
- } catch (Exception e) {
- return new ResultData(ErrorCode.SYS_PARAMETER_ERROR);
- }
-
- try {
- type = Integer.parseInt(typeStr);
- } catch (Exception e) {
- logger.error("type为null");
- }
- if(StringUtils.isBlank(appsStr)) {
- if(type == null) {
- logger.error("type为null");
- return new ResultData(ErrorCode.SYS_PARAMETER_ERROR);
- }
- WxWeappInfo authQ = new WxWeappInfo();
- authQ.setType(type);
- List appList = authorizerInfoService.getList(authQ);
- appsStr = "";
- StringBuilder sb = new StringBuilder();
- boolean bfirst = true;
- for(WxWeappInfo app: appList) {
- if(bfirst) {
- sb.append(app.getAuthorizerAppid());
- bfirst = false;
- } else {
- sb.append(app.getAuthorizerAppid()).append(",");
- }
- }
- }
- String [] apps = appsStr.split(",");
- // 逐一检查app的设置
- for(String appId: apps) {
- WxWeappExtSet extSetQ = new WxWeappExtSet();
- extSetQ.setAppId(appId);
- WxWeappExtSet extSet = weappExtSetService.getByObj(extSetQ);
- if(extSet == null) {
- return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
- }
- if(StringUtils.isBlank(extSet.getExtJson())) {
- return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
- }
- if(StringUtils.isBlank(extSet.getReleaseJson())) {
- return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
- }
- }
- // 逐一设置app配置
- for(String appId: apps) {
- // 检查appId是否已授权
- WxAuthorizerInfo authorizerInfo = authorizerInfoService.getByAppId(appId);
- if(authorizerInfo == null) {
- return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
- }
- if(!authorizerInfo.getAuthorizationStatus().equals(EnumWxAuthorizationStatus.AUTHORIZED.getCode())) {
- return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
- }
- codeCommit(appId, userVersion, userDesc, templateId);
- }
- return new ResultData();
- }
-
- private void codeCommit(String appId, String userVersion, String userDesc, Long templateId) {
- WxAppinfo appinfo = appinfoService.getByAppId(appId);
-
- int iAppType = 0;
- String appTypeStr = userVersion.substring(0, 1);
- if(appTypeStr.equalsIgnoreCase("C"))
- iAppType = EnumAppType.C.getCode();
- else if(appTypeStr.equalsIgnoreCase("B"))
- iAppType = EnumAppType.B.getCode();
-
- if(!appinfo.getType().equals(iAppType)) {
- // 如果版本号与小程序的类型不一致,不提交版本
- return;
- }
-
- // get ext json
- WxWeappExtSet extSetQ = new WxWeappExtSet();
- extSetQ.setAppId(appId);
- WxWeappExtSet extSet = weappExtSetService.getByObj(extSetQ);
- WxWeappCodeStatus codeStatus = weappCodeStatusService.getByAppId(appId);
- if(extSet != null) {
- boolean codeCommitStatus = false;
- if(codeStatus != null && codeStatus.getCodeStatus().equals(0) && codeStatus.getUserVersion().equals(userVersion)) {
- codeCommitStatus = true;
- }
- if(!codeCommitStatus) {
- codeCommitStatus = doCodeCommit(userVersion, userDesc, templateId, appinfo, extSet, codeStatus);
- }
- }
- }
-
- @ApiOperation(value = "小程序批量提交审核", notes = "{\"type\":\"String\",\"userVersion\":\"String\",\"apps\":\"appid,appid\"}")
- @PostMapping("batchCodeAudit")
- public ResultData batchCodeAudit(@RequestBody Map params) {
- logger.debug("[" + getIpAddr() + "] WxWeappInfoController::batchExtSet");
- String appsStr = params.get("apps");
- String typeStr = params.get("type");
- String userVersion = params.get("userVersion");
- Integer type = null;
- try {
- type = Integer.parseInt(typeStr);
- } catch (Exception e) {
- logger.error("小程序类型");
- }
- if(StringUtils.isBlank(appsStr)) {
- if(type == null) {
- return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
- }
- WxWeappInfo authQ = new WxWeappInfo();
- authQ.setType(type);
- List appList = authorizerInfoService.getList(authQ);
- appsStr = "";
- StringBuilder sb = new StringBuilder();
- boolean bfirst = true;
- for(WxWeappInfo app: appList) {
- if(bfirst) {
- sb.append(app.getAuthorizerAppid());
- bfirst = false;
- } else {
- sb.append(app.getAuthorizerAppid()).append(",");
- }
- }
- }
- String [] apps = appsStr.split(",");
- // 逐一检查app的设置
- for(String appId: apps) {
- WxWeappExtSet extSetQ = new WxWeappExtSet();
- extSetQ.setAppId(appId);
- WxWeappExtSet extSet = weappExtSetService.getByObj(extSetQ);
- if(extSet == null) {
- return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
- }
- if(StringUtils.isBlank(extSet.getExtJson())) {
- return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
- }
- if(StringUtils.isBlank(extSet.getReleaseJson())) {
- return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
- }
- }
- // 逐一设置app配置
- for(String appId: apps) {
- // 检查appId是否已授权
- WxAuthorizerInfo authorizerInfo = authorizerInfoService.getByAppId(appId);
- if(authorizerInfo == null) {
- return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
- }
- if(!authorizerInfo.getAuthorizationStatus().equals(EnumWxAuthorizationStatus.AUTHORIZED.getCode())) {
- return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
- }
- codeAudit(appId, userVersion);
- }
- return new ResultData();
- }
-
- private void codeAudit(String appId, String userVersion) {
- // get ext json
- WxWeappExtSet extSetQ = new WxWeappExtSet();
- extSetQ.setAppId(appId);
- WxWeappExtSet extSet = weappExtSetService.getByObj(extSetQ);
- WxWeappCodeStatus codeStatus = weappCodeStatusService.getByAppId(appId);
- if(extSet != null) {
- boolean codeCommitStatus = false;
- if(codeStatus != null
- && codeStatus.getCodeStatus().equals(EnumWeappCodeCommitStatus.SUCCESS.getCode())
- && codeStatus.getUserVersion().equals(userVersion)) {
- codeCommitStatus = true;
- }
- if(codeCommitStatus) {
- WxWeappAuditStatus auditStatus = weappAuditStatusService.getByAppId(appId);
- if(auditStatus != null && auditStatus.getAuditStatus().equals(EnumWeappAuditStatus.AUDITING.getCode())) {
- logger.error("审核中不能再提交审核");
- return;
- }
- doCodeAudit(codeStatus, auditStatus, extSet);
- } else {
- logger.error("CODE提交失败");
- }
- }
- }
-
- private boolean doCodeCommit(String userVersion, String userDesc, Long templateId, WxAppinfo appinfo, WxWeappExtSet extSet, WxWeappCodeStatus codeStatus) {
- Gson gson = new GsonBuilder().create();
- // code提交
- boolean codeCommitStatus = false;
- String codeErrCode = "";
- try {
- WxMaOpenCommitExtInfo extInfo = gson.fromJson(extSet.getExtJson(), new TypeToken() {}.getType());
- logger.info("OLD: " + extInfo.toString());
- // 自动修改提交的版本
- if(extInfo.getExtMap().containsKey("appVersion")) {
- extInfo.getExtMap().put("appVersion", userVersion);
- }
- logger.info("NEW: " + extInfo.toString());
- WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appinfo.getAppId());
- WxOpenResult openRet = openMaService.codeCommit(templateId, userVersion, userDesc, extInfo);
- logger.info(openRet.toString());
- if (openRet.isSuccess()) {
- codeCommitStatus = true;
- }
- codeErrCode = gson.toJson(openRet);
- } catch (WxErrorException e) {
- codeCommitStatus = false;
- codeErrCode = e.getMessage();
- logger.error(codeErrCode);
- }
-
- if (codeStatus == null) {
- codeStatus = new WxWeappCodeStatus();
- codeStatus.setId(appinfo.getId());
- codeStatus.setAppId(appinfo.getAppId());
- if (appinfo != null) {
- codeStatus.setType(appinfo.getType());
- }
- codeStatus.setUserVersion(userVersion);
- codeStatus.setVersionDesc(userDesc);
- if(codeCommitStatus) {
- codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.SUCCESS.getCode());
- } else {
- codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.FAIL.getCode());
- }
- codeStatus.setCodeErrCode(codeErrCode);
- codeStatus.setCodeTime(new Date());
- weappCodeStatusService.saveStatus(codeStatus);
- } else {
- codeStatus.setUserVersion(userVersion);
- codeStatus.setVersionDesc(userDesc);
- if(codeCommitStatus) {
- codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.SUCCESS.getCode());
- } else {
- codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.FAIL.getCode());
- }
- codeStatus.setCodeErrCode(codeErrCode);
- codeStatus.setCodeTime(new Date());
- weappCodeStatusService.updateStatus(codeStatus);
- }
- return codeCommitStatus;
- }
-
- private void doCodeAudit(WxWeappCodeStatus codeStatus, WxWeappAuditStatus auditStatus, WxWeappExtSet extSet) {
- Gson gson = new GsonBuilder().create();
- boolean submitStatus = false;
- Long auditid = null;
- String codeErrCode = "";
- try {
- WxOpenMaSubmitAuditMessage subMessage = gson.fromJson(extSet.getReleaseJson(), new TypeToken() {}.getType());
- logger.info(subMessage.toString());
- WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(codeStatus.getAppId());
- WxOpenMaSubmitAuditResult openRet = openMaService.submitAudit(subMessage);
- logger.info(openRet.toString());
- if(openRet.isSuccess()) {
- submitStatus = true;
- auditid = openRet.getAuditId();
- } else {
- submitStatus = false;
- }
- codeErrCode = gson.toJson(openRet);
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- submitStatus = false;
- codeErrCode = e.getMessage();
- }
-
- if (auditStatus == null) {
- auditStatus = new WxWeappAuditStatus();
- auditStatus.setId(codeStatus.getId());
- auditStatus.setAppId(codeStatus.getAppId());
- auditStatus.setType(codeStatus.getType());
- auditStatus.setUserVersion(codeStatus.getUserVersion());
- auditStatus.setVersionDesc(codeStatus.getVersionDesc());
- if(submitStatus) {
- auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode());
- auditStatus.setAuditid(auditid);
- } else {
- auditStatus.setAuditStatus(EnumWeappAuditStatus.FAIL.getCode());
- }
- auditStatus.setAuditErrCode(codeErrCode);
- auditStatus.setAuditTime(new Date());
- weappAuditStatusService.saveStatus(auditStatus);
- } else {
- if(!submitStatus) {
- if(!auditStatus.getUserVersion().equals(codeStatus.getUserVersion())
- && auditStatus.getAuditStatus().equals(EnumWeappAuditStatus.AUDITING.getCode())) {
- // 当前审核中的数据不能替换
- return;
- }
- auditStatus.setAuditStatus(EnumWeappAuditStatus.FAIL.getCode());
- } else {
- auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode());
- auditStatus.setAuditid(auditid);
- }
- auditStatus.setUserVersion(codeStatus.getUserVersion());
- auditStatus.setVersionDesc(codeStatus.getVersionDesc());
- auditStatus.setAuditErrCode(codeErrCode);
- auditStatus.setAuditTime(new Date());
- weappAuditStatusService.updateStatus(auditStatus);
- }
- }
-
-
- @ApiOperation(value = "批量审核查询", notes = "{\"type\":\"string\",\"version\":\"string\"}")
- @PostMapping("batchAuditQuery")
- public ResultData batchAuditQuery(@RequestBody Map params) {
- logger.debug("[" + getIpAddr() + "] WxWeappInfoController::batchAuditQuery");
- Gson gson = new GsonBuilder().create();
- String typeStr = params.get("type");
- String version = params.get("version");
- Integer type = null;
- try {
- type = Integer.parseInt(typeStr);
- } catch (Exception e) {
- logger.error(e.getMessage());
- }
- WxWeappAuditStatusVo queryVo = new WxWeappAuditStatusVo();
- if(StringUtils.isNotBlank(typeStr)) {
- queryVo.setType(type);
- }
- if(StringUtils.isNotBlank(version)) {
- queryVo.setUserVersion(version);
- }
- queryVo.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode());
- List apps = weappAuditStatusService.getList(queryVo);
- apps.stream().forEach( auditStatus -> {
- // 审核中,可以发起审核查询
- try {
- WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(auditStatus.getAppId());
- WxOpenMaQueryAuditResult openResult = openMaService.getLatestAuditStatus();
- logger.info(openResult.toString());
- if (openResult.isSuccess()) {
- // 审核状态,其中0为审核成功,1为审核失败,2为审核中,3已撤回
- switch (openResult.getStatus().intValue()) {
- case 0:
- auditStatus.setAuditStatus(EnumWeappAuditStatus.SUCCESS.getCode());
- break;
- case 1:
- auditStatus.setAuditStatus(EnumWeappAuditStatus.FAIL.getCode());
- break;
- case 2:
- auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode());
- break;
- case 3:
- auditStatus.setAuditStatus(EnumWeappAuditStatus.UNDO.getCode());
- break;
- default:
- auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode());
- break;
- }
- auditStatus.setAuditErrCode(gson.toJson(openResult));
- auditStatus.setAuditid(openResult.getAuditId());
- auditStatus.setAuditTime(new Date());
- weappAuditStatusService.updateStatus(auditStatus);
- }
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- }
- });
- return new ResultData();
- }
-
- @ApiOperation(value = "批量审核撤回", notes = "{\"type\":\"string\",\"version\":\"string\"}")
- @PostMapping("batchAuditCancel")
- public ResultData batchAuditCancel(@RequestBody Map params) {
- logger.debug("[" + getIpAddr() + "] WxWeappInfoController::batchAuditCancel");
- Gson gson = new GsonBuilder().create();
- String typeStr = params.get("type");
- String version = params.get("version");
- Integer type = null;
- try {
- type = Integer.parseInt(typeStr);
- } catch (Exception e) {
- logger.error(e.getMessage());
- }
- WxWeappAuditStatusVo queryVo = new WxWeappAuditStatusVo();
- if(StringUtils.isNotBlank(typeStr)) {
- queryVo.setType(type);
- }
- if(StringUtils.isNotBlank(version)) {
- queryVo.setUserVersion(version);
- }
- queryVo.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode());
- List apps = weappAuditStatusService.getList(queryVo);
- apps.stream().forEach( auditStatus -> {
- // 审核通过,已发布不可撤回
- try {
- WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(auditStatus.getAppId());
- WxOpenResult openResult = openMaService.undoCodeAudit();
- logger.info(openResult.toString());
- if(openResult.isSuccess()) {
- auditStatus.setAuditStatus(EnumWeappAuditStatus.UNDO.getCode());
- auditStatus.setAuditErrCode(gson.toJson(openResult));
- auditStatus.setAuditTime(new Date());
- weappAuditStatusService.updateStatus(auditStatus);
- }
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- }
- });
- return new ResultData();
- }
-
- @ApiOperation(value = "批量发布", notes = "{\"type\":\"string\", \"version\":\"string\"}")
- @PostMapping("batchRelease")
- public ResultData batchRelease(@RequestBody Map params) {
- logger.debug("[" + getIpAddr() + "] WxWeappInfoController::batchRelease");
- Gson gson = new GsonBuilder().create();
- String typeStr = params.get("type");
- String version = params.get("version");
- Integer type = null;
- try {
- type = Integer.parseInt(typeStr);
- } catch (Exception e) {
- logger.error(e.getMessage());
- }
- WxWeappAuditStatusVo queryVo = new WxWeappAuditStatusVo();
- if(StringUtils.isNotBlank(typeStr)) {
- queryVo.setType(type);
- }
- if(StringUtils.isNotBlank(version)) {
- queryVo.setUserVersion(version);
- }
- queryVo.setAuditStatus(EnumWeappAuditStatus.SUCCESS.getCode());
- List apps = weappAuditStatusService.getList(queryVo);
- apps.stream().forEach( auditStatus -> {
- boolean isUpdate = false;
- WxWeappReleaseStatus releaseStatus = weappReleaseStatusService.getByAppId(auditStatus.getAppId());
- if(releaseStatus != null) {
- // 当前版本已发布成功,跳过
- if(releaseStatus.getUserVersion().equals(version)
- && releaseStatus.getReleaseStatus().equals(EnumWeappReleaseStatus.SUCCESS.getCode())) {
- return;
- }
- releaseStatus.setUserVersion(auditStatus.getUserVersion());
- releaseStatus.setVersionDesc(auditStatus.getVersionDesc());
- } else {
- releaseStatus = new WxWeappReleaseStatus();
- releaseStatus.setId(auditStatus.getId());
- releaseStatus.setAppId(auditStatus.getAppId());
- releaseStatus.setType(auditStatus.getType());
- releaseStatus.setUserVersion(auditStatus.getUserVersion());
- releaseStatus.setVersionDesc(auditStatus.getVersionDesc());
- isUpdate = true;
- }
-
- try {
- WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(auditStatus.getAppId());
- WxOpenResult openRet = openMaService.releaesAudited();
- logger.info(openRet.toString());
- boolean releaseSuccess = false;
- if(openRet.isSuccess()) {
- releaseSuccess = true;
- }
- if(releaseSuccess) {
- releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.SUCCESS.getCode());
- } else {
- releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.FAIL.getCode());
-
- }
- releaseStatus.setReleaseErrCode(gson.toJson(openRet));
- releaseStatus.setReleaseTime(new Date());
- if(isUpdate) {
- weappReleaseStatusService.updateStatus(releaseStatus);
- } else {
- weappReleaseStatusService.saveStatus(releaseStatus);
- }
- } catch (WxErrorException e) {
- logger.error(e.getMessage());
- releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.FAIL.getCode());
- releaseStatus.setReleaseErrCode(e.getMessage());
- releaseStatus.setReleaseTime(new Date());
- if(isUpdate) {
- weappReleaseStatusService.updateStatus(releaseStatus);
- } else {
- weappReleaseStatusService.saveStatus(releaseStatus);
- }
- }
- });
- return new ResultData();
- }
-
- @ApiOperation(value = "小程序code提交状态分页列表接口", notes = "查询支持小程序类型,名称,appid,version")
- @GetMapping("codeStatusList")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true),
- @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)})
- public ResultData codeStatusList(@ModelAttribute WxWeappCodeStatusVo weappCodeStatusVo, Integer pageNum, Integer pageSize) {
- logger.debug("[" + getIpAddr() + "] WxWeappInfoController::codeStatusList");
- if (null == weappCodeStatusVo) {
- weappCodeStatusVo = new WxWeappCodeStatusVo();
- } else {
- if(StringUtils.isBlank(weappCodeStatusVo.getAppId())) {
- weappCodeStatusVo.setAppId(null);
- }
- if(StringUtils.isBlank(weappCodeStatusVo.getName())) {
- weappCodeStatusVo.setName(null);
- }
- }
- weappCodeStatusVo.setSortColumns(WxWeappCodeStatus.Field.UserVersion_DESC);
- final PageInfo page = weappCodeStatusService.listAsPage(weappCodeStatusVo, pageNum, pageSize);
- return new ResultData(page);
- }
-
- @ApiOperation(value = "小程序审核状态分页列表接口", notes = "查询支持小程序类型,名称,appid,version")
- @GetMapping("auditStatusList")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true),
- @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)})
- public ResultData auditStatusList(@ModelAttribute WxWeappAuditStatusVo weappAuditStatusVo, Integer pageNum, Integer pageSize) {
- logger.debug("[" + getIpAddr() + "] WxWeappInfoController::auditStatusList");
- if (null == weappAuditStatusVo) {
- weappAuditStatusVo = new WxWeappAuditStatusVo();
- } else {
- if(StringUtils.isBlank(weappAuditStatusVo.getAppId())) {
- weappAuditStatusVo.setAppId(null);
- }
- if(StringUtils.isBlank(weappAuditStatusVo.getName())) {
- weappAuditStatusVo.setName(null);
- }
- }
- weappAuditStatusVo.setSortColumns(WxWeappAuditStatus.Field.UserVersion_DESC);
- final PageInfo page = weappAuditStatusService.listAsPage(weappAuditStatusVo, pageNum, pageSize);
- return new ResultData(page);
- }
-
- @ApiOperation(value = "小程序发布状态分页列表接口", notes = "查询支持小程序类型,名称,appid,version")
- @GetMapping("releaseStatusList")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true),
- @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)})
- public ResultData releaseStatusList(@ModelAttribute WxWeappReleaseStatusVo weappReleaseStatusVo, Integer pageNum, Integer pageSize) {
- logger.debug("[" + getIpAddr() + "] WxWeappInfoController::releaseStatusList");
- if (null == weappReleaseStatusVo) {
- weappReleaseStatusVo = new WxWeappReleaseStatusVo();
- } else {
- if(StringUtils.isBlank(weappReleaseStatusVo.getAppId())) {
- weappReleaseStatusVo.setAppId(null);
- }
- if(StringUtils.isBlank(weappReleaseStatusVo.getName())) {
- weappReleaseStatusVo.setName(null);
- }
- }
- weappReleaseStatusVo.setSortColumns(WxWeappReleaseStatus.Field.UserVersion_DESC);
- final PageInfo page = weappReleaseStatusService.listAsPage(weappReleaseStatusVo, pageNum, pageSize);
- return new ResultData(page);
- }
-
- @ApiOperation("小程序code提交版本列表")
- @GetMapping("codeVersionList")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "type", value = "小程序类型", dataType = "int", paramType = "query", required = true)})
- public ResultData getCodeVersionList(Integer type) {
- logger.debug("[" + getIpAddr() + "] WxWeappInfoController::getCodeVersionList");
- final List